Documenti di Didattica
Documenti di Professioni
Documenti di Cultura
Exclusión Mutua
Programación Concurrente y Distribuida
1
Exclusión Mutua
2
Exclusión Mutua
3
Exclusión Mutua 2 procesos
Simplificación a 2 procesos
Primero resolvemos esto y luego extenderemos la solución
4
Primer Intento
5
Primer Intento
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
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
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
19
Tercer Intento
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
25
Tercer Intento
¿Funciona correctamente?
26
Tercer Intento
27
Cuarto Intento
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
31
Cuarto Intento
32
Algoritmo de Dekker
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
36
Algorimo de Dekker
37
Algoritmo de Dekker
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
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
42
Algoritmo de Dekker
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
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