mutex handout 3 - Universidad Politécnica de Madrid

Anuncio
Secciones crı́ticas y exclusión mutua
Lecturas:
Andrews, secciones 3.1, 3.2, 3.3, 3.4
Ben-Ari, sección 2.2
Manuel Carro
Universidad Politécnica de Madrid
Este texto se distribuye bajo los términos de la Creative Commons License
M. Carro (UPM)
Exclusión mutua
1/1
Secciones crı́ticas
El primer problema a resolver
Código fuente
−→
Código compilado
X := X + X;
(a) Load MemPos1, Accum
(b) Add MemPos1, Accum
(c) Sto Accum, MemPos1
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)
Esquema
Protocolo de entrada
Sección crı́tica
Protocolo de salida
M. Carro (UPM)
Exclusión mutua
2/1
Secciones crı́ticas
Sección crı́tica
Soluciones software y hardware
I
I
Hardware: instrucciones especializadas (Test and Set y Swap)
Software: algoritmos exclusión mutua / soporte S.O.
Muchos algoritmos de exclusión mutua
I
I
I
I
Peterson (lo veremos)
Dekker (Ben-Ari, Cáp. 3)
Panaderı́a, Tickets (Andrews, Cáp. 3)
etc.
M. Carro (UPM)
Exclusión mutua
3/1
Secciones crı́ticas
Exclusión mutua
Ejemplo de necesidad de exclusión mutua:
shvar without mutex.adb
I
I
Variables vistas por varios procesos
Accesos indiscriminados −→ resultados erróneos
Intentaremos implementación protocolos entrada / salida
Supondremos atomicidad sentencias Ada
Suposición: procesos no mueren en
I
Sección crı́tica
I
Protocolos entrada / salida
M. Carro (UPM)
Protocolo de entrada
Sección crı́tica
Protocolo de salida
Exclusión mutua
4/1
Desarrollo de un algoritmo
El tren de los Andes
(andes{1,2,3,4,5}.adb)
Dos trenes cruzan el mismo puente
Diferentes velocidades / recorridos
Sincronización entrada / salida puente
M. Carro (UPM)
Exclusión mutua
5/1
Desarrollo de un algoritmo
El tren de los Andes
Primer intento de exclusión mutua
type Tipo Turno is (Dcha, Izq);
T: Tipo Turno:= Dcha;
loop
while ( T / = I z q ) loop
null ;
end loop ;
....
T : = Dcha ;
end loop ;
M. Carro (UPM)
loop
while ( T / = Dcha ) loop
null ;
end loop ;
....
T := Izq ;
end loop ;
Exclusión mutua
6/1
Desarrollo de un algoritmo
El tren de los Andes
Segundo intento de exclusión mutua
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 ;
Bote i = True sii tren i está cruzando
M. Carro (UPM)
Exclusión mutua
7/1
Desarrollo de un algoritmo
El tren de los Andes
Tercer 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
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 ;
M. Carro (UPM)
Exclusión mutua
8/1
Desarrollo de un algoritmo
El tren de los Andes
Cuarto 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)
Exclusión mutua
9/1
Desarrollo de un algoritmo
El tren de los Andes
Quinto intento de exclusión mutua
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)
Exclusión mutua
10 / 1
Desarrollo de un algoritmo
Prueba
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
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:
Supongamos ambos trenes en sección crı́tica
Entonces Bote Izquierdo = Bote Derecho = True
La condición de entrada es sólo cierta para uno
Éste debe haber entrado primero
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 / 1
Desarrollo de un algoritmo
Prueba (Cont.)
Bote_Dcho: Boolean := False;
Cadencia correcta:
Treni “está de paseo”
Entonces Botei = False
Por tanto el otro tren puede
entrar
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;
Ausencia de interbloqueo:
Tren Derecho y Tren Izquierdo bloqueados en bucle entrada
Imposible: o bien Turno = Derecha o bien Turno = Izquierda
Uno de los dos puede continuar
M. Carro (UPM)
Exclusión mutua
12 / 1
Desarrollo de un algoritmo
Prueba (Cont.)
Ausencia de inanición:
Treni entra s.c. repetidamente:
I
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)
Bote_Dcho: Boolean := False;
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
13 / 1
Desarrollo de un algoritmo
Propiedades vistas
Seguridad:
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)
M. Carro (UPM)
Exclusión mutua
14 / 1
Desarrollo de un algoritmo
Espera activa
Algoritmo Peterson (y otros): espera activa
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 / 1
Desarrollo de un algoritmo
Ejercicio
Ben-Ari, Principles of
Concurrent
Programming, ejercicio
3.4
Dos procesos P1 y P2
Demostrar corrección o
encontrar contraejemplo
M. Carro (UPM)
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 ;
Exclusión mutua
16 / 1
Descargar