La descarga está en progreso. Por favor, espere

La descarga está en progreso. Por favor, espere

1 ADA: lenguaje de programación concurrente. 2 Introducción l El desarrollo de ADA ha sido patrocinado por el gobierno de los Estados Unidos l Estándar.

Presentaciones similares


Presentación del tema: "1 ADA: lenguaje de programación concurrente. 2 Introducción l El desarrollo de ADA ha sido patrocinado por el gobierno de los Estados Unidos l Estándar."— Transcripción de la presentación:

1 1 ADA: lenguaje de programación concurrente

2 2 Introducción l El desarrollo de ADA ha sido patrocinado por el gobierno de los Estados Unidos l Estándar en 1983 / orientado a objetos 1995 (ADA95) l Un usuario puede establecer tareas diferentes l Cita(Rendezvous): exclusión mutua, sincronización y comunicación entre tareas

3 3 Tareas l La especificación describe la interfaz con otras tareas task T is … end T; l Si no presenta ninguna interfaz: task T; l En el cuerpo se describe el comportamiento dinámico task body T is … end T;

4 4 Ejemplo COMPRA l Solución secuencial para comprar CARNE, ENSALADA y VINO procedure COMPRAR is begin COMPRAR_CARNE; COMPRAR_ENSALADA; COMPRAR_VINO; end;

5 5 Ejemplo COMPRA (concurrente) Procedure COMPRAR is task OBTENER_ENSALADA; task body OBTENER_ENSALADA is begin COMPRAR_ENSALADA; end OBTENER_ENSALADA; task OBTENER_VINO; task body OBTENER_VINO is begin COMPRAR_VINO; end OBTENER_VINO; begin COMPRAR_CARNE; end COMPRAR; Una tarea se activa de forma automática al llegar al comienzo del procedimiento. El procedimiento no termina hasta que no terminen todas las tareas dependientes de él.

6 6 La cita l La cita entre dos tareas se produce como consecuencia de la llamada de una tarea a un punto de entrada declarado en otra tarea. n Se declara en la especificación: task T is entry E(…); end; n Llamada desde otra tarea: T.E(…); n No puede tener un resultado

7 7 La cita: sentencia accept l Describe el conjunto de sentencias que se ejecutan durante la cita l Se encuentra en el cuerpo de la tarea donde se declaró el punto de entrada accept E(…) do -- conjunto de sentencias end E;

8 8 ¿Qué ocurre en la cita? l La tarea que llama al punto de entrada no es la que ejecuta las sentencias asociadas (las ejecuta la tarea a la que pertenece el punto de entrada) l No se ejecuta inmediatamente task body T1 istask body T2 is : : accept E(…) do T1.E(…); … : end E;end T2; : end T1;

9 9 Buffer de un único elemento Task BUFFERING is entry DEPOSITAR(X: in ITEM); entry RETIRAR(X: out ITEM); end; task body BUFFERING is V: ITEM; begin loop accept DEPOSITAR(X: in ITEM) do V:= X; end DEPOSITAR; accept RETIRAR(X: out ITEM) do X:= V; end RETIRAR; end loop; end BUFFERING Llamada: BUFFERING.DEPOSITAR(…); BUFFERING.RETIRAR(…);

10 10 Más sobre puntos de entrada l Cada punto de entrada tiene una cola de tareas que esperan llamar al punto de entrada. n Si hay varias tareas llamando a un punto de entrada, éstas serán encoladas. n La cola puede estar vacía. n Cada ejecución de la sentencia accept retira una tarea de la cola. l Puede no tener parámetros: n entry SENYALAR; -- declaración n T.SENYALAR; -- llamada l La sentencia accept no necesita tener cuerpo: n accept SENYALAR; l Si una tarea llama a uno se sus puntos de entrada: n INTERBLOQUEO

11 11 Sentencia SELECT Task VAR_PROTEGIDA is entry LEER(X: out ITEM); entry ESCRIBIR(X: in ITEM); end; task body VAR_PROTEGIDA is V: ITEM; begin accept ESCRIBIR(X: in ITEM) do V:= X; end ESCRIBIR; loop select accept LEER(X: out ITEM) do X:= V; end LEER; or accept ESCRIBIR(X: in ITEM) do V:= X; end ESCRIBIR; end select; end loop; end VAR_PROTEGIDA;

12 12 Condiciones de guarda Task BUFFERING is entry DEPOSITAR (X: in ITEM); entry RETIRAR (X: out ITEM); end; task body BUFFERING is N: constant:= 8; BUFF: array (0..N-1) of ITEM; ENT,SAL: INTEGER range 0..N-1:=1; CUENTA: INTEGER range 0..N:=0; begin loop select when CUENTA accept DEPOSITAR(X: in ITEM) do BUF(ENT):= X; end DEPOSITAR; ENT.= (ENT+1) mod N; CUENTA:=CUENTA+1; or when CUENTA>0 => accept RETIRAR(X: out ITEM) do X:= BUF(SAL); end RETIRAR; SAL:= (SAL+1) mod N; CUENTA:= CUENTA -1; end select; end loop; end BUFFERING;

13 13 Más sobre condiciones de guarda l Si no existe, la condición del select se considera como cierta. l Se vuelven a evaluar en cada comienzo del select. l No es seguro que se siga cumpliendo cuando se produzca la cita (por ejemplo si se utilizan variables globales). l Se produce un error si ninguna de las guardas es correcta.

14 14 Otras formas de SELECT select llamada / accept else conjunto de sentencias end select; select llamada / accept or delay tiempo; conjunto de sentencias end select; select llamada / accept else delay tiempo; conjunto de sentencias end select;


Descargar ppt "1 ADA: lenguaje de programación concurrente. 2 Introducción l El desarrollo de ADA ha sido patrocinado por el gobierno de los Estados Unidos l Estándar."

Presentaciones similares


Anuncios Google