Documente Academic
Documente Profesional
Documente Cultură
Ejemplo:
S1
S3
S2
S4
S5
S6
S7
ESPECIFICACIN DE LA CONCURRENCIA
Los grafos no se pueden usar en programacin.
Necesitamos otras herramientas:
FORK / JOIN
FORK L
Genera dos ejecuciones concurrentes en un programa:
1. Una se inicia en la instruccin siguiente a FORK
2. Otra empieza en la instruccin etiquetada L
JOIN
Permite recombinar varias ejecuciones paralelas en una
sola. La rama que ejecuta primero la instruccin JOIN
termina su ejecucin.
EJEMPLO:
S1
Implementar, usando
S2
FORK/JOIN, el grafo de
S4
precedencia de la figura.
S5
S3
S6
S7
S1;
CONT := 3;
FORK L1;
S2;
S4;
FORK L2;
S5;
GOTO L3;
L2: S6;
GOTO L3;
L1: S3;
L3: JOIN CONT;
S7;
COBEGIN / COEND
COBEGIN
S0
S1;
S2;
S1
S2
...
Sn
...
Sn;
Sn+1
COEND;
EJEMPLO:
S1
Implementar, usando
S3
S2
COBEGIN/COEND,
S4
el grafo de precedencia
de la figura adjunta.
S5
S6
S7
S1;
COBEGIN
S3;
BEGIN
S2;
S4;
COBEGIN
S5;
S6;
COEND
END
COEND;
S7;
COMPARATIVA
La instruccin concurrente (COBEGIN/COEND) se
aade fcilmente a un lenguaje de alto nivel.
No es capaz de reflejar todos los grafos de precedencia.
S1
S3
S2
S4
S5
S6
S7
CONT := n;
FORK L2;
FORK L3;
...
FORK Ln;
S1;
GOTO L1;
L2: S2;
GOTO L1;
L3: S3;
GOTO L1;
...
Ln: Sn;
L1: JOIN CONT;
1.8. APNDICE: COMUNICACIN Y SINCRONIZACIN ENTRE PROCESOS
EJERCICIO:
Dada la expresin (A + B) * (C + D) - (E/F)
Establecer el grafo correspondiente que extraiga el
mximo grado de paralelismo e implementar dicho grafo
utilizando:
A) La pareja COBEGIN/COEND
B) La construccin FORK/JOIN
SOLICITAR_ACCESO (SECCIN_CRTICA);
LIBERAR (SECCIN_CRTICA);
10
1. Exclusin mutua.
Si un proceso Pi se est ejecutando en su seccin
crtica, entonces ningn otro proceso se puede estar
ejecutando en la suya.
2. Progresin.
Ningn proceso suspendido fuera de su seccin
crtica debe impedir progresar a otros procesos.
3. Espera limitada.
Si un proceso ha solicitado entrar en su SC, debe
haber un lmite al nmero de veces que otros
procesos entren en sus respectivas SC, antes de que
el primero lo consiga.
11
Pi: repeat
...
CDIGO DE ENTRADA
SECCIN CRTICA
CDIGO DE SALIDA
SECCIN RESIDUAL
until false;
12
Algoritmo 1
Pi: repeat
while turno i do no-op;
SECCIN CRTICA
turno := j;
SECCIN RESIDUAL
until false;
13
Algoritmo 2
Pi: repeat
indicador[i] := true;
while indicador[j] do no-op;
SECCIN CRTICA
indicador[i] := false;
SECCIN RESIDUAL
until false;
14
Algoritmo 2 (variante)
Pi: repeat
SECCIN CRTICA
indicador[i] := false;
SECCIN RESIDUAL
until false;
15
Algoritmo 3 (Peterson)
var indicador: array [0..1] of boolean;
turno: 0..1;
Pi: repeat
indicador[i] := true;
turno := j;
while (indicador[j] and turno=j) do no-op;
SECCIN CRTICA
indicador[i] = false;
SECCIN RESIDUAL
until false;
16
Inconvenientes:
Peligroso en manos del usuario.
No sirve si se tienen dos o ms CPUs.
17
Test-and-Set (Evaluar-y-asignar)
18
Pi: repeat
SECCIN CRTICA
cerradura := false;
SECCIN RESIDUAL
until false;
19
Swap (Intercambiar)
20
llave := true;
repeat
SWAP(cerradura, llave);
until llave = false;
SECCIN CRTICA
cerradura := false;
SECCIN RESIDUAL
until false;
21
22
SEMFOROS
WAIT(s)
V(s)
SIGNAL(s)
ESPERA(s)
SEAL(s)
23
Pi: repeat
wait(mutex);
SECCIN CRTICA
signal(mutex);
SECCIN RESIDUAL
until false;
24
25
type semforo =
record
valor: integer;
L: lista de proceso;
end;
26
27
P1:repeat
P2: repeat
...
...
wait(S);
S2;
S1;
signal(S);
...
...
until false;
until false;
28
EJEMPLO:
S1
El grafo de precedencia
adjunto
no
tiene
S3
S2
un
S4
programa correspondiente
usando slo la instruccin
S5
concurrente.
S6
S7
cobegin
begin S1; signal(A); signal(B); end;
begin wait(A); S2; S4; signal(C); signal(D); end;
begin wait(B); S3; signal(E); end;
begin wait(C); S5; signal(F); end;
begin wait(D); wait (E); S6; signal(G); end;
begin wait(F); wait (G); S7; end;
coend
29
EJERCICIOS
30
PROBLEMA PRODUCTORES/CONSUMIDORES
Ejemplos de productores/consumidores:
Controlador de impresora que produce caracteres
que son consumidos por la impresora
Compilador que produce cdigo ensamblador que
es consumido por el ensamblador
31
Prod:
repeat
<Produce mensaje>
wait(mutex);
<Deposita mensaje>
signal(mutex);
signal(producido);
...
until false;
Cons.:
repeat
...
wait(producido);
wait(mutex);
<Recoge mensaje>
signal(mutex);
<Consume mensaje>
until false;
32
P: repeat
<Produce mensaje>
Bloquea al productor
wait(vaco);
en espera de huecos
wait(mutex);
<Deposita mensaje>
signal(mutex);
signal(lleno);
until false;
C:
Incrementa el
nmero de llenos
repeat
wait(lleno);
Bloquea al consumidor
wait(mutex);
en espera de mensajes
<Recoge mensaje>
signal(mutex);
signal(vacio);
<Consume mensaje>
Incrementa el
nmero de huecos
until false;
33
Ejemplo:
Control de acceso a ficheros en sistemas de bases
de datos multiusuario
34
El
problema
de
Lectores/Escritores
tiene
distintas
35
L: repeat
wait(mutex);
cont_lect := cont_lect + 1;
if cont_lect = 1 then wait(escribe);
signal(mutex);
Lectura
wait(mutex);
cont_lect := cont_lect -1;
if cont_lect = 0 then signal(escribe);
signal(mutex);
until false;
E: repeat
wait(escribe);
Escritura
signal(escribe);
until false;
36
repeat
wait(lleno);
wait(mutexc);
mensaje := buzon[c];
c := (c+1) mod n;
signal(mutexc);
signal(vacio);
<Consume mensaje>
until false;
37
PROBLEMA
Un proceso intercambia las
Se viola el principio de la
exclusin mutua
Situacin de interbloqueo
por wait
Un proceso omite wait,
Se violar la exclusin
signal o ambas
Situacin de posible
interbloqueo
38