Documenti di Didattica
Documenti di Professioni
Documenti di Cultura
Objetivos
Estudiar los conceptos generales de la
programacin concurrente
Saber realizar aplicaciones concurrentes en el
lenguaje Ada
Reconocer y saber utilizar los mecanismos de
comunicacin entre tareas
Saber desarrollar una aplicacin con tareas
Indice
Conceptos
generales
Procesos
Concurrencia
en Ada
Comunicacin
y sincronizacin
Comunicacin
Tipos
protegidos
Comunicacin
Cita
Conceptos generales
Procesos: Introduccin
Se pueden ejecutar en uno de los siguientes entornos:
Procesos: Definiciones
Proceso:
Concepto de proceso
with TEXT_IO; use TEXT_IO;
with ASCII_UTILITIES;
procedure Valdemo is
TEXT : string(1..80);
LENGTH : natural;
F : float; fich.exe
begin
put_line("VALDEMO");new_line;
put_line("Enter some real numbers ");
.
new_line; put_line("Done.");
end Valdemo;
Programas y procesos
CPU
P.P.
C.P.
pila
pila
dkjfdsljf
dsldldjf
ds9u094
3nc32049
reks-0e
cargar
R0
R2
R4
R1
R3
R5
P.E.
datos
cdigo
datos
cdigo
Sistemas Informticos de tiempo real.
Memoria
7
nuevo
terminado
ejecucin
preparado
espera
Procesos
CPU's virtuales
pila
P.P.
dades
C.P.
Cdigo
P.E.
pila
P.P.
Datos
C.P.
Cdigo
R0
R2
R4
R1
R3
R5
CPU
P.P.
R0
R2
R4
R1
R3
R5
R0
R2
R4
R1
R3
R5
C.P.
R0
R2
R4
R1
R3
R5
P.E.
P.E.
pila
P.P.
Datos
C.P.
Cdigo
Memoria
P.E.
Procesos: Representacin
Identificacin
Informacin de estado
Informacin de control
10
Procesos: Multiplexacin
11
Procesos: Multiplexacin
El resultado es que cada proceso posee una CPU virtual, lo cual
da la sensacin de que est permanentemente en ejecucin.
CPU's virtuales
CPU's virtuales
CPU's virtuales
P.P.
P.P.
P.P.
C.P.
R0
R2
R4
R1
R3
R5
P.E .
P.P.
C.P.
P.P.
R0
R2
R4
R1
R3
R5
C.P.
R0
R2
R4
CPU
C.P.
R1
R3
R5
P.E .
P.E.
P.E .
P.P.
C.P.
P.P.
C.P.
R0
R2
R4
R1
R3
R5
P.P.
R0
R2
R4
R1
R3
R5
P.E .
R0
R2
R4
R1
R3
R5
P.E .
P.P.
C.P.
P.E .
C.P.
P.E.
R0
R2
R4
CPU
C.P.
R1
R3
R5
P.E .
P.P.
C.P.
R0
R2
R4
R1
R3
R5
CPU
P.P.
R0
R2
R4
R1
R3
R5
R0
R2
R4
R1
R3
R5
C.P.
R0
R2
R4
R1
R3
R5
P.E.
P.E .
R0
R2
R4
R1
R3
R5
P.P.
C.P.
P.E .
12
Cambio de contexto
CPU
P.P.
j
C.P.
pila
datos
cdigo
S.O.
R0
R2
R4
R1
R3
R5
P.E.
Tabla de procesos
PCB
pila
datos
cdigo
j
13
Cambio de contexto
1. Est en ejecucin el proceso i
2. Se produce una interrupcin
3. Salva el contexto del proceso i en su posicin de la PCB
4. Se resuelve la interrupcin
5. Se selecciona el siguiente proceso a ejecutar (j)
6. Se carga el contexto de del proceso j PCBj
j
i
S.O.
P.P.
C.P.
pila
datos
cdigo
R0
R2
R4
P.P.
R1
R3
R5
P.E.
datos
cdigo
PCB
j
C.P.
pila
pila
datos
CPU
CPU
CPU
R0
R2
R4
P.P.
R1
R3
R5
datos
P.E.
cdigo
j
datos
PCB
R1
R3
R5
P.E.
Taula_Proces
pila
j
cdigo
cdigo
pila
i
C.P.
pila
R0
R2
R4
datos
cdigo
j
14
Planificacin
cola_preparados
e/s
cola_bloqueados
CPU
peticin de e/s
expulsin forzosa
evento
espera un evento
planificador
Permite la ejecucin concurrente (alternada) de los procesos.
Un
es el elemento encargado de seleccionar el
proceso mas adecuado para ser ejecutado
15
Ventajas
q
q
q
q
Inconvenientes
q
q
q
16
17
Cola de procesos
preparados
Procesador
Cola de procesos
bloqueados
Termina
T3
T2
T1
18
Nuevo
Cola de procesos
preparados
Procesador
Termina
Cola de procesos
bloqueados
T3
T2
T1
19
Nuevo
Termina
Cola de procesos
bloqueados
20
Ui
21
task <nombre> is
-- variables locales
begin
<instrucciones>;
end <nombre>;
22
23
Tareas: Creacin
Las tareas en Ada pueden declararse en cualquier nivel de la aplicacin y
son creadas de forma implcita cuando se entra en el mbito de la
declaracin.
Procedure Ejemplo_1 is
task A;
task body A is
--declaraciones.
begin
--codigo de la tarea
end A;
begin
-- cdigo del principal
end Ejemplo_1;
Sistemas Informticos de tiempo real.
24
25
27
Tareas: Ejemplo
Productores y Consumidores
4
5
2
3
Almacn
1
P
Sistemas Informticos de tiempo real.
28
Tareas: Ejemplo
Productores y Consumidores
4
5
2
Almacn
1
5
1
6
6
P
Sistemas Informticos de tiempo real.
C
29
Tareas: Ejemplo
Productores y Consumidores
4
5
2
3
Almacn
1
P
Sistemas Informticos de tiempo real.
30
Tareas: Ejemplo
task body Consumidor is
X : Integer; I : Integer := 0;
begin
delay 1.0; 1
loop
I := I + 1;
exit when I > Veces;
while Vacio loop
delay 1.0; 2
end loop;
Sacar(Mi_Cola1, X);
delay 1.0;
3
delay Espera;
4
5
delay 1.0;
end loop;
6
delay 1.0;
end Consumidor;
Productores y
Consumidores
4
2
3
5
1
6
C
31
Tareas: Creacin
with Text_Io; use Text_Io;
with Tampones; use Tampones;
procedure Test is
T: Tampon_Circular;
task Productor;
task Consumidor;
begin
Inicializar;
Put_Line("Programa de test del tampon concurrente");
end Test;
32
Tareas: Creacin
task body Productor is
I : Integer:= 0;
begin
loop
I := I + 1;
exit when I > 30;
delay 0.7;
while Lleno loop
delay 1.0;
end loop;
Anyadir(T, I);
Put(" He anyadido el item: ");
Put(I); New_Line;
end loop;
end Productor;
33
34
35
36
37
Tareas: Discriminantes
38
39
:
:
:
:
Productor(Pid
Productor(Pid
Productor(Pid
Productor(Pid
C1
C2
C3
C4
:
:
:
:
Consumidor(Cid
Consumidor(Cid
Consumidor(Cid
Consumidor(Cid
=>
=>
=>
=>
=>
=>
=>
=>
1,
2,
3,
4,
1,
2,
3,
4,
Veces
Veces
Veces
Veces
Veces
Veces
Veces
Veces
=>
=>
=>
=>
=>
=>
=>
=>
Retardo
Retardo
Retardo
Retardo
=>
=>
=>
=>
5000);
2000);
7000);
6000);
40
Tareas: Creacin
41
42
43
Memoria compartida
Mensajes
44
45
generic
N: Positive;
package variables is
type Variable is array(1..N) of Integer;
Incrementar
Mostrar
Iniciar
46
47
Tarea P1 x:=x+1
Tarea P2 x:=x-1
48
Semforos
Regiones criticas
Monitores
Ada ofrece los tipos protegidos
49
Tipos Protegidos
Ada permite eliminar los problemas de coordinacin y
comunicacin con datos suministrando una abstraccin como
es el tipo protegido.
Este tipo protegido es similar a los MONITORES y
REGIONES CRTICAS
Un tipo protegido de Ada encapsula unos datos,
proporcionando un acceso a los mismos mediante
subprogramas (function o procedure) y mediante
entradas (entry) protegidos
Se garantiza el acceso excluyente de las tareas
a los mismos
Nos permite la comunicacin y sincronizacin
entre las mismas
Sistemas Informticos de tiempo real.
50
Tipos Protegidos
lectura/escritura
lectura
procedure
datos
function
51
Tipos Protegidos
lectura/escritura
lectura
lectura/escritura
procedure
datos
function
entry
52
Tipos Protegidos
l Sincronizacin
l Proteger un recurso
l Compartir variables de forma segura
53
Tipos Protegidos
l Sincronizacin
Sincronizar las tareas para garantizar un
estado determinado.
Por ejemplo:
Control Marcha/Paro. Las tareas se
sincronizan y arrancan de una forma
coordinada.
54
Tipos Protegidos
l Proteger un recurso
Varias tareas acceden a un recurso comun (la
pantalla). Las lineas se entremezclan.
Opcin
tomar el recurso
Usarlo
Soltarlo
55
package Recursos is
private
Abierto: Boolean := true;
end Semaforo;
private
Libre : Boolean := true;
end Recurso;
end Semaforos;
End Recursos;
56
procedure Salir is
begin
Abierto := True;
end Salir;
procedure Soltar is
begin
Libre := True;
end Soltar;
end Semaforo;
end Semaforos;
end Recurso;
end Recursos;
57
package Semaforos is
protected type Semaforo is
entry Entrar;
procedure Salir;
private
Contador: Integer := 0;
end Semaforo;
end Semaforos;
entry Entrar_Izquierda;
entry Entrar_Derecha;
procedure Salir_izquierda;
procedure Salir_derecha;
private
nizq_der, nder_izq: Integer:= 0;
end Semaforo;
end Semaforos;
58
Colas NO Protegidas
Generic
N: Positive; type Item is private;
with procedure Put(I1: Item); with function to_String(I: Item) return String;
package Colas is
type Cola_Circular is limited private;-- operaciones
function Vacia(C : in Cola_Circular) return Boolean;
function Llena(C : in Cola_Circular) return Boolean;
procedure Inicializar (C : in out Cola_Circular);
procedure Anyadir( C : in out Cola_Circular; I: in Item);
procedure Sacar (C : in out Cola_Circular; I: out Item);
procedure Listar(C : in Cola_Circular);
procedure Estado(C : in Cola_Circular);
Cola_Llena, Cola_Vacia: exception;
private
-- estructura
subtype Index is Integer range 0..N-1;
type Cola is array (Index) of Item;
type Cola_Circular is
record
Datos: Cola;
Entrada: Integer := 0;
Salida: Integer := -1;
Contador: Integer :=0;
end record;
end Colas;
Sistemas Informticos de tiempo real.
59
Colas Protegidas
generic
N: Positive; type Item is private;
with procedure Put(I1: Item); with function To_String(I: Item) return String;
package Colas is
type Cola is array(0..N-1) of Item;
-- operaciones
private
-- estructura de datos
Datos : Cola;
Entrada: Integer := 0;
Salida: Integer := -1;
Contador: Integer :=0;
end Cola_Circular;
end Colas;
60
Diferencias
No protegido
Protegido
Definicin del tipo
private
Datos : Cola;
Entrada: Integer := 0;
Salida: Integer := -1;
Contador: Integer :=0;
end Cola_Circular;
61
Diferencias
No protegido
Protegido
Uso del tipo
C : Cola_Circular;
Anyadir(C, item);
C : Cola_Circular;
C.Anyadir(item);
62
Memoria compartida
Mensajes
63
La Cita Extendida
La sincronizacin es implcita
Variantes segn la semntica del operador de
envo de mensaje:
Asncrono
Sncrono
Invocacin remota
Ada ofrece el modelo de invocacin remota o cita
extendida (extended rendevouz)
64
La Cita Extendida
65
La Cita Extendida
Declaracin de los servicios
task Control_Nivel is
entry Iniciar_Control;
entry Terminar_Control;
end Control_Nivel;
Cada servicio
es atendido en
un accept
Sistemas Informticos de tiempo real.
Implementacin tarea
task body Control_Nivel is
begin
....
accept Iniciar_Control;
....
accept Terminar_Control;
....
end Control_Nivel;
66
La Cita Extendida
Para que se produzca la comunicacin debe darse la
cita:
tareas
cliente
servidor
servidor
ejecucin
bloqueo
accept
cita
accept
t
Sistemas Informticos de tiempo real.
67
La Cita Extendida
Ejemplo: calculadora
task Servicio_Calculadora is
entry Suma (S1, S2: Integer; S : out Integer);
entry Resta (M, S: Integer; R : out Integer);
end Calculadora;
begin
Servicio_Calculadora.Suma(A, B, C);
exception
when Tasking_Error =>
-- El servidor ha terminado?
...
end;
Sistemas Informticos de tiempo real.
Tarea llamante
68
La Cita Extendida
task body Servicio_Calculadora is
...
begin
-- Inicializacin del servicio
loop
select
accept Suma (S1, S2: Integer; S : out Integer) do
...
end Suma;
or
accept Resta (M, S: Integer; R : out Integer) do
...
end Resta;
end select;
end loop;
end Servicio_Calculadora;
Sistemas Informticos de tiempo real.
69
La Cita Extendida
entryCOUNT es un atributo de la entrada que permite
conocer el nmero de tareas esperando en la cola de
peticiones
task Sensor is
begin
loop
accept Leer_Canal(1)(X: out Valor) do
Familia de entry
-- accede al sensor del canal 1
end Leer_Canal;
.......
accept Leer_Canal(2)(X: out Valor) do
-- accede al sensor del canal 2
task Sensor is
end Leer_Canal;
entry Leer_Canal(1..5)(X: out Valor);
.......
end Sensor;
end Sensor;
70
Seleccin indeterminista
select
[Guarda]
<Alternativa_1>
or
[Guarda ]
<Alternativa_2>
else
...
end select
71
Formas de select
select
select
[Guarda]
<Alternativa_1>
or
[Guarda ]
<Alternativa_2>
else
...
end select
or
when No_Llena =>
accept Anyadir_Item(Elmt : Integer) do
Seleccionar_Ventana(0);
Anyadir(Mi_Cola1, Elmt);
end Anyadir_Item;
end select;
72
Formas de select
select
select
[Guarda]
<Alternativa_1>
or
[Guarda ]
<Alternativa_2>
else
...
end select
or
when No_Llena =>
accept Anyadir_Item(Elmt : Integer) do
Seleccionar_Ventana(0);
Anyadir(Mi_Cola1, Elmt);
end Anyadir_Item;
else
-- realizar tareas de mantenimiento
end select;
Sistemas Informticos de tiempo real.
73
Formas de select
select
select
[Guarda]
<Alternativa_1>
or
[Guarda ]
<Alternativa_2>
or
terminate
...
end select
or
when No_Llena =>
..
or
terminate;
end select;
74
Formas de select
select
select
[Guarda]
<Alternativa_1>
or
[Guarda ]
<Alternativa_2>
or
delay tiempo
end select
or
when No_Llena =>
..
or
delay 2.0;
end select;
Espera temporizada.
Limita el tiempo de bloqueo en espera de la cita.
75
Formas de select
loop
select
[Guarda]
Tarea1.servicio1;
or
[Guarda ]
Tarea2.servicio2;
else
...
end select
Dibujar_Agente(Pid, 1, 0);
I := I + 1;
exit when I > Veces;
delay Espera * Factor;
Dibujar_Agente(Pid, 5, 0);
Item := Item + 1;
select
Gestor_Cola.Anyadir_Item(Item);
or
Gestor_Cola.Anyadir_Item(Item);
end select;
Dibujar_Agente(Pid, 6, 0);
delay 0.5 * Factor;
end loop;
76
Formas de select
select
[Guarda]
<Alternativa_1>
or
[Guarda ]
<Alternativa_2>
else
...
end select
loop
Dibujar_Agente(Pid, 1, 0);
I := I + 1;
exit when I > Veces;
delay Espera * Factor;
Dibujar_Agente(Pid, 5, 0);
Item := Item + 1;
select
Gestor_Cola1.Anyadir_Item(Item);
or
Gestor_Cola2.Anyadir_Item(Item);
else
Put(No he podido aadir);
end select;
Dibujar_Agente(Pid, 6, 0);
delay 0.5 * Factor;
end loop;
Sistemas Informticos de tiempo real.
77
Formas de select
select
[Guarda]
<Alternativa_1>
or
[Guarda ]
<Alternativa_2>
or
terminate
...
end select
loop
.
select
Gestor_Cola.Anyadir_Item(Item);
or
terminate;
end select;
..
end loop;
78
Formas de select
select
[Guarda]
<Alternativa_1>
or
[Guarda ]
<Alternativa_2>
or
delay tiempo
end select
loop
.
select
Gestor_Cola.Anyadir_Item(Item);
or
delay 5.0;
end select;
..
end loop;
Espera temporizada.
Limita el tiempo de bloqueo en espera de la cita.
79
Conclusiones
n
Procesos y Tareas
Tareas en Ada
Tipo Tarea
Tipos protegidos
Mensajes
80