La descarga está en progreso. Por favor, espere

La descarga está en progreso. Por favor, espere

ADA: lenguaje de programación concurrente

Presentaciones similares


Presentación del tema: "ADA: lenguaje de programación concurrente"— Transcripción de la presentación:

1 ADA: lenguaje de programación concurrente

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

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

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

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 COMPRAR_VINO; end OBTENER_VINO; 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 La cita La cita entre dos tareas se produce como consecuencia de la llamada de una tarea a un punto de entrada declarado en otra tarea. Se declara en la especificación: task T is entry E(…); end; Llamada desde otra tarea: T.E(…); No puede tener un resultado

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

8 ¿Qué ocurre en la cita? 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) No se ejecuta inmediatamente task body T1 is task body T2 is : : accept E(…) do T1.E(…); … : end E; end T2; : end T1;

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

11 Sentencia SELECT loop Task VAR_PROTEGIDA is
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; 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;

12 Condiciones de guarda loop select Task BUFFERING is
when CUENTA<N => 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; 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

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

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


Descargar ppt "ADA: lenguaje de programación concurrente"

Presentaciones similares


Anuncios Google