ADA lenguaje de programacin concurrente 1 Introduccin l

  • Slides: 14
Download presentation
ADA: lenguaje de programación concurrente 1

ADA: lenguaje de programación concurrente 1

Introducción l l El desarrollo de ADA ha sido patrocinado por el gobierno de

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

Tareas l La especificación describe la interfaz con otras tareas task T is …

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

Ejemplo COMPRA l Solución secuencial para comprar CARNE, ENSALADA y VINO procedure COMPRAR is

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

Ejemplo COMPRA (concurrente) Procedure COMPRAR is task OBTENER_ENSALADA; task body OBTENER_ENSALADA is begin COMPRAR_ENSALADA;

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. 5

La cita l La cita entre dos tareas se produce como consecuencia de la

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. 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 n 6

La cita: sentencia accept l l Describe el conjunto de sentencias que se ejecutan

La cita: sentencia accept l l 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; 7

¿Qué ocurre en la cita? l l La tarea que llama al punto de

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

Buffer de un único elemento Task BUFFERING is entry DEPOSITAR(X: in ITEM); entry RETIRAR(X:

Buffer de un único elemento Task BUFFERING is entry DEPOSITAR(X: in ITEM); entry RETIRAR(X: out ITEM); end; Llamada: task body BUFFERING is BUFFERING. DEPOSITAR(…); V: ITEM; BUFFERING. RETIRAR(…); 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 9

Más sobre puntos de entrada l Cada punto de entrada tiene una cola de

Más sobre puntos de entrada l 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. n La cola puede estar vacía. n Cada ejecución de la sentencia accept retira una tarea de la cola. n l Puede no tener parámetros: entry SENYALAR; -- declaración n T. SENYALAR; -- llamada n l La sentencia accept no necesita tener cuerpo: n l accept SENYALAR; Si una tarea llama a uno se sus puntos de entrada: n INTERBLOQUEO 10

Sentencia SELECT Task VAR_PROTEGIDA is entry LEER(X: out ITEM); entry ESCRIBIR(X: in ITEM); end;

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; 11

Condiciones de guarda loop Task BUFFERING is select entry DEPOSITAR (X: in ITEM); when

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

Más sobre condiciones de guarda l l Si no existe, la condición del select

Más sobre condiciones de guarda l l 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. 13

Otras formas de SELECT select llamada / accept else conjunto de sentencias end select;

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