Sei sulla pagina 1di 49

El Problema de la

Exclusión Mutua
Programación Concurrente y Distribuida

1
Exclusión Mutua

Exclusión Mutua para N procesos


N procesos (bucle infinito), cada uno con SC y SNC
Las SC no pueden entrelazarse (EM)
Se insertará un pre- y un post-protocolo antes y después SC
Un proceso no puede pararse en la SC o en los protocolos

2
Exclusión Mutua

El sistema debe estar libre de interbloqueos


No se permitirá la inanición
En ausencia de competencia, si un proceso quiere entrar en su
SC, deberá poder hacerlo

3
Exclusión Mutua 2 procesos

Simplificación a 2 procesos
Primero resolvemos esto y luego extenderemos la solución

4
Primer Intento

Si tenemos 2 procesos que quieren acceder a un mismo recurso,


¿cómo podemos coordinarlos?
Solución simple

5
Primer Intento

Usaremos una variable TURNO, que permitirá que se vayan


cediendo el acceso a la SC

6
Primer Intento
TURNO:1..2=1; Tarea P2{
Tarea P1{ loop
loop{ SNC_2;
SNC_1; loop
loop exit when TURNO==2;
exit when TURNO=1; SC2;
SC1; a2:TURNO=1;
a1:TURNO=2; }
}

7
Primer Intento
Corrección: ¿Se cumple la Exclusión Mutua?
Demostración por reducción al absurdo
Suponemos P1 y P2 en SC
Para ello 1º entra P1(p.e.) en t1 y luego P2 en t2 (t1<t2)
Si entra P1 => en t1 TURNO==1
Si entra P2 => en t2 TURNO==2
Si P1 sigue en SC, no ha cambiado TURNO => ABSURDO
8
Primer Intento
Demostración usando Invariantes
(at(SC1)=>TURNO==1), (at(SC2)=>TURNO==2)
Razonamiento análogo para ambos
Inicialmente:
TURNO==1 : OK
at(SC1) : FALSO
FALSE=>TRUE : OK
9
Primer Intento
Suponemos que el Invariante se cumple en P(N)
Tenemos que centrarnos en lo que cambie el invariante
A1, pone TURNO a 2, pero ya no estamos en at(SC1)
False=>False
Antes de SC1. At(SC1)==true, pero TURNO==1
True=>True
Efectos de P2: Solo en a2, pero ?=>True: OK
10
Primer Intento

Vemos que no estén los dos a la vez en la SC


Not(at(SC1) and at(SC2))
Si at(SC1) and at(SC2), usando los invariantes anteriores
TURNO==1 and TURNO==2
¡¡Absurdo!!

11
Primer Intento
Cumple la E.M.
Está libre de interbloqueos
Para que P1 siempre en preprotocolo y P2 también...
Turno != 1 y Turno != 2 no es posible
No existe inanición
Para que P2 no entre nunca, TURNO==1 siempre
Para que P1 no entre nunca, TURNO==2 siempre
12
Primer Intento

¿Funciona perfectamente?

13
Primer Intento
Puede fallar en ausencia de competencia
Si P2 se para en su SNC, P1 pasaría y pondría TURNO==2,
pero nadie restauraría TURNO a 1
Fallo
Esta solución obliga a que ambos procesos estén siempre
entrando en sus SC uno detrás de otro

14
Segundo Intento

Tener una única variable para marcar a quién le toca entrar da


problemas
¿Qué otras soluciones se nos ocurren?

15
Segundo Intento

Posible solución:
Tener 2 variables, una por proceso
Si la variable asociada al proceso está a 0, es que el proceso
está en la SC
Evita el fallo en ausencia de competencia

16
Segundo Intento
C1, C2: 0..1=1; Tarea P2{
Tarea P1{ loop
loop SNC_1;
SNC_1; loop
loop exit when C1==1;
exit when C2==1; C2=0;
C1=0; SC_2;
SC_1; C2=1;
C1=1 }
}

17
Segundo Intento

¿Funciona correctamente?

18
Segundo Intento

No realiza correctamente la Exclusión Mutua


Interfoliación Ejemplo:
P1 explora el valor de C2 y encuentra que C2 = 1;
P2 explora el valor de C1 y encuentra que C1 = 1;
P1 asigna e C1 el valor 0
P2 asigna a C2 el valor 0
P1 entra en su región crítica
P2 Entra en su región crítica.

19
Tercer Intento

El 2º Intento falla porque cada proceso marca cuándo está


progresando a la SC
Posible solución: Señalizar la intención
Variante de la anterior solución

20
Tercer Intento
C1,C2:0..1=1; Tarea P2{
Tarea P1{ loop
loop a2:SNC_2;
a1:SNC_1; b2:C2=0;
b1:C1=0; loop
loop c2:exit when C1==1;
c1:exit when C2==1; d2:SC_2;
d1:SC_1; e2:C2=1;
e1:C1=1 }
}
21
Tercer Intento
Resuelve la Exclusión Mutua
Invariante:
(C1=0)=(at(c1) or at(d1) or at(e1))
(C2=0)=(at(c2) or at(d2) or at(e2))
Not(at(d1) and at(d2))
Nos fijamos en P1 y sus transiciones

22
Tercer Intento
Inicialmente C1=1 y at(a1) : OK.......P(0)
Suponemos que se cumple en cierto momento......P(N)
a1->b1: No afecta a C1
b1->c1 : C1=0, pero at(c1) a True : True
c1->c1 : Se conserva
c1->d1 : No cambia

23
Tercer Intento

d1->e1 : No cambia
e1->a1 : Pone C1=1 pero también at(a1)
Las transiciones de P2 no afectan a P1
Con C2 es análogo

24
Tercer Intento

Not(at(d1) and at(d2))


Inicialmente P1 at(a1) y P2 at(a2)
Solo se puede hacer falso si c2->d2 mientras at(d1) o
simétrica
Pero si at(d1)....C1==0 => No puede darse la transición

25
Tercer Intento

¿Funciona correctamente?

26
Tercer Intento

Se puede llegar a interbloqueo con la interfoliación


P1 asigna 0 a C1;
P2 asigna 0 a c2;
P1 chequea C2 y sigue en el bucle;
P2 chequea C1 y sigue en el bucle;

27
Cuarto Intento

El problema del tercer intento es que ambos procesos insisten en


su intención de acceder a la SC
¿Solución?
Hacer procesos “generosos”, que renuncien temporalmente a
entrar a su SC si ven que no pueden entrar

28
Cuarto Intento
C1, C2:0..1=1; Tarea P2{
Tarea P1{ loop
loop a2:SNC_2;
a1:SNC_1; C2=0;
C1=0; loop
loop c2:exit when c1=1;
c1:exit when c2=1; C2=1;
C1=1; C2=0;
C1=0; end loop;
end loop; d2:SC_2;
d1:SC_1; e2:C2=1
e1:C1=1; }
}

29
Cuarto Intento

¿Funciona correctamente?

30
Cuarto Intento

La EM se demuestra como en el anterior intento


Falla al poder caer en inanición (repitiendo 4 indef.)
1: P1 hace C1 = 0;
2: P2 hace C2 = 0;
3: P2 consulta C1 y hace C2 = 1;
4: P1 completa el ciclo completo siguiente:


Consulta C2;


Entra en su seccion critica;


hace C1 = 1;


Ejecuta la seccion no critica;


hace C1 = 0;
5: P2 hace C2 = 0;

31
Cuarto Intento

Puede darse un livelock (no deadlock)


1: P1 hace C1 = 0;
2: P2 hace C2 = 0;
3: P1 consulta C2 y permanece en el bucle;
4: P2 consulta C2 y permanece en el bucle;
5: P1 hace C1 = 1;
6: P2 hace C2 = 1;
7: P1 hace C1 = 0;
8: P2 hace C2 = 0;
9:: P1 consulta C2 y permanece en el bucle;
10: P2 consulta C2 y permanece en el bucle;

32
Algoritmo de Dekker

Combinación del primer y último intento


Primer intento: Paso de turno
Último intento: renuncio temporal

33
Algoritmo de Dekker
C1, C2: Entero 0..1 = 1;
TURNO: Entero 1..2 = 1;
Tarea P1 {
loop
SNC_1;
C1 = 0;
loop
i1: exit when C2 = 1;

i2: if TURNO == 2 {
C1 = 1;
loop exit when TURNO == 1;
C1 = 0;
}
SC_1;
C1 = 1;
TURNO = 2;
}
34
Algoritmo de Dekker
Tarea P2 {
loop
SNC_2;
C2 = 0;
loop
a2: exit when C1 = 1;

b1: if TURNO == 1 {
C2 = 1;
loop exit when TURNO == 2;
C2 = 0;
}
SC_2;
C2 = 1;
TURNO = 1;
}
35
Algoritmo de Dekker

Turno aporta prioridad


En ausencia de competencia, se pasa de Turno
loop exit when Cn=1

36
Algorimo de Dekker

Cumple EM, el Invariante es el del Tercer Intento y misma dem.


¿Inanición y livelock?...Problemas del 4º

37
Algoritmo de Dekker

Inanición (demostramos para P1, para P2 es análogo)


Nos apoyaremos en dos condiciones que cumplen las
variables de P2 y que impiden que P1 entre en inanición

38
Algoritmo de Dekker

Condición 1:
#C1=0 ^ #Turno=1 => ◊#C2=1
Si C1 está pidiendo constantemente entrar en SC
Y P1 tiene preferencia
En algún momento P2 liberará la SC

39
Algoritmo de Dekker

Pueden darse dos casos


a: P2 se queda en la Sección No Crítica
b: P2 avanza hacia su Sección Crítica
Si a, C2 vale 1
Si b, se quedaría en el bucle de Turno, pues no tiene prioridad

40
Algoritmo de Dekker

Condición 2:
#C1=1 ^ #Turno2 => ◊Turno=1
Si C1 no pide entrar en la SC
Y el Proceso 2 tiene preferencia
Entonces, en algún momento, la preferencia cambiará y la
obtendrá el proceso 1.

41
Algoritmo de Dekker

También pueden darse dos casos


a: P2 se queda en la Sección No Crítica
b: P2 avanza hacia su Sección Crítica
Si a, no se cumple, pero no importa
Si b, el propio P2 pondría turno a 1 cuándo acabara su SC

42
Algoritmo de Dekker

Demostración de Vivacidad (inanición/interbloqueo)


Si P1 ejecuta su preprotocolo, acabará entrando en su SC
Suponemos que P1 no entra en su SC
Demostración por absurdo

43
Algoritmo de Dekker
#Turno = 2 => ◊#C1=1
#Turno = 2 => ◊Turno = 1
¬#Turno = 2 => ◊Turno = 1
◊Turno = 1
◊#Turno = 1
◊#(at(i1) v at(i2))

44
Algoritmo de Dekker

◊#C1 = 0
◊#C2 = 1
6 y 8 se contradicen, pues P1 no puede iterar indefinidamente si
se cumple la condición de salida del bucle

45
Algoritmo de la Panadería

En la LECTURA 1

46
Consideraciones Atomicidad

Con instrucciones atómicas más abstractas todo puede ser más


sencillo

47
Test & Set

Test_Set{
Li=C;
C=1;
}

48
Test & Set
Tarea_i{
loop
SNC_i;
loop
Test_Set(Li);
exit when Li==0;
SC_i;
C=0;
}

49

Potrebbero piacerti anche