Exclusíon mutua

Anuncio
Secciones crı́ticas
El primer problema a resolver
−→
Código fuente
Secciones crı́ticas y exclusión mutua
Código compilado
X := X + X;
(a) Load MemPos1, Accum
(b) Add MemPos1, Accum
(c) Sto Accum, MemPos1
Lecturas:
Andrews, secciones 3.1, 3.2, 3.3, 3.4
Ben-Ari, sección 2.2
Regular acceso a X := X + X
Sólo una tarea a la vez: exclusión mutua
Sección crı́tica del programa (reduce número ejecuciones posibles)
Manuel Carro
Universidad Politécnica de Madrid
Esquema
Protocolo de entrada
Sección crı́tica
Protocolo de salida
Este texto se distribuye bajo los términos de la Creative Commons License
M. Carro (UPM)
Exclusión mutua
1 / 16
M. Carro (UPM)
Exclusión mutua
Secciones crı́ticas
Secciones crı́ticas
Sección crı́tica
Exclusión mutua
Soluciones software y hardware
I
I
Ejemplo de necesidad de exclusión mutua:
shvar without mutex.adb
Hardware: instrucciones especializadas (Test and Set y Swap)
Software: algoritmos exclusión mutua / soporte S.O.
I
I
I
I
I
Supondremos atomicidad sentencias Ada
Peterson (lo veremos)
Dekker (Ben-Ari, Cáp. 3)
Panaderı́a, Tickets (Andrews, Cáp. 3)
etc.
M. Carro (UPM)
Exclusión mutua
Variables vistas por varios procesos
Accesos indiscriminados −→ resultados erróneos
Intentaremos implementación protocolos entrada / salida
Muchos algoritmos de exclusión mutua
I
2 / 16
Suposición: procesos no mueren en
3 / 16
I
Sección crı́tica
I
Protocolos entrada / salida
M. Carro (UPM)
Desarrollo de un algoritmo
Protocolo de entrada
Sección crı́tica
Protocolo de salida
Exclusión mutua
4 / 16
Desarrollo de un algoritmo
El tren de los Andes
El tren de los Andes
Primer intento de exclusión mutua
(andes{1,2,3,4,5}.adb)
type Tipo Turno is (Dcha, Izq);
T: Tipo Turno:= Dcha;
loop
while ( T / = I z q ) loop
null ;
end loop ;
....
T : = Dcha ;
end loop ;
Dos trenes cruzan el mismo puente
Diferentes velocidades / recorridos
Sincronización entrada / salida puente
M. Carro (UPM)
Exclusión mutua
5 / 16
M. Carro (UPM)
loop
while ( T / = Dcha ) loop
null ;
end loop ;
....
T : = Izq ;
end loop ;
Exclusión mutua
6 / 16
Desarrollo de un algoritmo
Desarrollo de un algoritmo
El tren de los Andes
El tren de los Andes
Segundo intento de exclusión mutua
Tercer intento de exclusión mutua
B o t e I z q : Boolean : = False ;
Bote Dcho : Boolean : = False ;
B o t e I z q : Boolean : = False ;
Bote Dcho : Boolean : = False ;
loop
while Bote Dcho loop
null ;
end loop ;
B o t e I z q : = True ;
....
B o t e I z q : = False ;
end loop ;
loop
while B o t e I z q loop
null ;
end loop ;
Bote Dcho : = True ;
....
Bote Dcho : = False ;
end loop ;
loop
B o t e I z q : = True
while Bote Dcho loop
null ;
end loop ;
....
B o t e I z q : = False ;
end loop ;
loop
Bote Dcho : = True
while B o t e I z q loop
null ;
end loop ;
....
Bote Dcho : = False ;
end loop ;
Bote i = True sii tren i está cruzando
M. Carro (UPM)
Exclusión mutua
7 / 16
M. Carro (UPM)
Desarrollo de un algoritmo
Exclusión mutua
Desarrollo de un algoritmo
El tren de los Andes
El tren de los Andes
Cuarto intento de exclusión mutua
Quinto intento de exclusión mutua
B o t e I z q : Boolean : = False ;
Bote Dcho : Boolean : = False ;
loop
B o t e I z q : = True ;
while Bote Dcho loop
B o t e I z q : = False ;
B o t e I z q : = True ;
end loop ;
....
B o t e I z q : = False ;
end loop ;
loop
Bote Dcho : = True ;
while B o t e I z q loop
Bote Dcho : = False ;
Bote Dcho : = True ;
end loop ;
....
Bote Dcho : = False ;
end loop ;
M. Carro (UPM)
8 / 16
Exclusión mutua
9 / 16
Turno : Tipo Turno := Dcha;
B o t e I z q : Boolean : = False ;
Bote Dcho : Boolean : = False ;
loop
B o t e I z q : = True ;
Turno : = Der ;
while Bote Der and
( Turno = Der ) loop
null ;
end loop ;
−− Secci ón c r ı́ t i c a
B o t e I z q : = False ;
end loop ;
loop
Bote Dcho : = True ;
Turno : = I z q ;
while B o t e I z q and
( Turno = I z q ) loop
null ;
end loop ;
−− Secci ón c r ı́ t i c a
Bote Dcho : = False ;
end loop ;
M. Carro (UPM)
Desarrollo de un algoritmo
Exclusión mutua
10 / 16
Desarrollo de un algoritmo
Prueba
Prueba (Cont.)
Bote_Dcho: Boolean := False;
Observaciones:
Tren i cruzando (en s.c.) −→
Botei = True
Turno resuelve conflictos
Algún proceso es el último en
cambiar Turno
Cadencia correcta:
loop
Bote_Dcho:= True;
Turno:= Izq;
while Bote_Izq and
(Turno = Izq) loop
null;
end loop;
-- Sección crı́tica
Bote_Dcho := False;
end loop;
Bote_Dcho: Boolean := False;
Treni “está de paseo”
Entonces Botei = False
Por tanto el otro tren puede
entrar
Exclusión mutua:
loop
Bote_Dcho:= True;
Turno:= Izq;
while Bote_Izq and
(Turno = Izq) loop
null;
end loop;
-- Sección crı́tica
Bote_Dcho := False;
end loop;
Supongamos ambos trenes en sección crı́tica
Ausencia de interbloqueo:
Entonces Bote Izquierdo = Bote Derecho = True
Tren Derecho y Tren Izquierdo bloqueados en bucle entrada
La condición de entrada es sólo cierta para uno
Imposible: o bien Turno = Derecha o bien Turno = Izquierda
Éste debe haber entrado primero
Uno de los dos puede continuar
Y al estar aún en s.c. no puede haberle dado el turno al otro
Contradicción
M. Carro (UPM)
Exclusión mutua
11 / 16
M. Carro (UPM)
Exclusión mutua
12 / 16
Desarrollo de un algoritmo
Desarrollo de un algoritmo
Propiedades vistas
Prueba (Cont.)
Seguridad:
Ausencia de inanición:
Treni entra s.c. repetidamente:
I
Bote_Dcho: Boolean := False;
Al salir da oportunidad al otro tren
(con Botei )
Treni puede intentar reentrar antes
que el otro:
I
I
Pero al intentar reentrar se quita
Turno a sı́ mismo
Y el otro proceso ha solicitado paso
(con Botej )
M. Carro (UPM)
loop
Bote_Dcho:= True;
Turno:= Izq;
while Bote_Izq and
(Turno = Izq) loop
null;
end loop;
-- Sección crı́tica
Bote_Dcho := False;
end loop;
Exclusión mutua
Ausencia de interbloqueo (normalmente necesaria)
Exclusión mutua
Vivacidad:
Cadencia correcta
(acceso recurso si está libre y proceso intenta)
Ausencia de inanición
(asegurar acceso recurso a todos los procesos)
13 / 16
M. Carro (UPM)
Desarrollo de un algoritmo
Dos procesos P1 y P2
Demostrar corrección o
encontrar contraejemplo
14 / 16
Desarrollo de un algoritmo
Ejercicio
Ben-Ari, Principles of
Concurrent
Programming, ejercicio
3.4
Exclusión mutua
Espera activa
Algoritmo Peterson (y otros): espera activa
c1 , c2 : I n t e g e r : = 1 ;
loop −− Proceso P1
loop
c1 : = 1 − c2 ;
e x i t when c2 / = 0 ;
end loop ;
. . . . −− Secci ón c r ı́ t i c a
c1 : = 1 ;
end loop ;
Tareas esperando entrar realizan trabajo
Válidos como idea inicial
I
Sólo algunas veces usados en casos muy particulares
(multiprocesadores, R.C. muy pequeñas, sistemas con hardware
dedicado)
No útiles en la mayor parte de los casos
Mecanismos de más bajo nivel (S.O. suspende tareas)
¡Huid de la espera activa!
M. Carro (UPM)
Exclusión mutua
15 / 16
M. Carro (UPM)
Exclusión mutua
16 / 16
Descargar