Title: Sistemas Concurrentes: el problema de la exclusi
1Sistemas Concurrentesel problema de la
exclusión mutua
- I.T. Informática de Sistemas
- Curso 2002-2003
2Bibliografía
- Principles of Concurrent and Distributed
Programming - M. Ben-Ari. Prentice Hall, 1990
- Capítulo 3
- Sistemas Operativos
- A. Silberschatz, P. Galvin. Addison Wesley
Longman, 1999 - Capítulo 6
3Modelo del sistema
- N procesos intentan acceder a un recurso
compartido en un bucle infinito - loop
- Sección_No_Crítica
- Pre_Protocolo
- Sección_Crítica
- Post_Protocolo
- end loop
- Nunca puede haber más de un proceso en la sección
crítica (exclusión mutua) - Los pre y post protocolos serán algoritmos para
garantizar que se cumple la exclusión mutua
4Requisitos de la solución, según Ben-Ari
- Siempre se debe cumplir la exclusión mutua.
- Un proceso puede detenerse en su sección no
crítica, sin que afecte a los demás procesos. - No pueden aparecer interbloqueos.
- No puede haber inanición si un proceso declara
entrar en s.c., terminará entrando. - Progreso si no hay contención si un solo proceso
quiere entrar en s.c., debe poder entrar sin más.
5Requisitos de la solución, según Peterson
- Exclusión mutua
- Progreso si ningún proceso está en sección
crítica y hay procesos que desean entrar en su
s.c., sólo estos últimos participarán en la
decisión y ésta se tomará en un tiempo finito. - Espera limitada hay un límite para el número de
veces que otros procesos pueden adelantarse a un
proceso que quiere entrar en s.c.
6Primer intento variable turno
turno integer range 1..2 1
- loop
- SNC1
- loop exit when turno1 end loop
- SC1
- turno2
- end loop
- loop
- SNC2
- loop exit when turno2 end loop
- SC1
- turno1
- end loop
7Discusión del primer intento
- Garantiza exclusión mutua?
- Está libre de interbloqueo?
- Está libre de inanición?
- Garantiza el progreso si no hay contención?
- qué pasa si P2 muere en su sección no crítica ?
8Segundo intento avisadores
flag1,flag2 boolean true
- loop
- SNC1
- loop exit when flag2 end loop
- flag1false
- SC1
- flag1true
- end loop
- loop
- SNC2
- loop exit when flag1 end loop
- flag2false
- SC2
- flag2true
- end loop
9Discusión del segundo intento
- Garantiza el progreso si no hay contención?
- Garantiza exclusión mutua ?
- qué pasa con esta secuencia ?
- P1 encuentra flag2 a true en el bucle
- P2 encuentra flag1 a true en el bucle
- P1 pone flag1 a false
- P2 pone flag2 a false
- P1 entra en su sección crítica
- P2 entra en su sección crítica
10Tercer intento
flag1,flag2 boolean true
- loop
- a1 SNC1
- b1 flag1false
- c1 loop exit when flag2 end loop
- d1 SC1
- e1 flag1true
- end loop
- loop
- a2 SNC2
- b2 flag2false
- c2 loop exit when flag1 end loop
- d2 SC2
- e2 flag2true
- end loop
11Demostración de la exclusión mutua
- flag1false ? at(c1) V at(d1) V at(e1)
- flag2false ? at(c2) V at(d2) V at(e2)
- (at(d1) ? at(d2))
12Pero, qué pasa con esta secuencia?
- P1 pone flag1 a false
- P2 pone flag2 a false
- P1 se queda esperando en su bucle
- P2 se queda esperando en su bucle
13Algoritmo de Dekker
C1, C2 Integer range 0..1 1 Turn Integer
range 1..2 1
loop SNC2 C2 0 loop exit
when C11 if Turn1 then C2 1
loop exit when Turn2 end
loop C2 0 end if end
loop SC2 C2 1 Turn 1 end loop
- loop
- SNC1
- C1 0
- loop
- exit when C21
- if Turn2 then
- C1 1
- loop
- exit when Turn1
- end loop
- C1 0
- end if
- end loop
- SC1
- C1 1
- Turn 2
- end loop
14Soluciones hardware
- Instrucciones atómicas test-and-set ó SWAP.
- Permiten evaluar y asignar un valor a una
variable de forma atómica. - test-and-set(B) Pone B a true y devuelve el
antiguo valor de B. - SWAP(A,B) Intercambia los valores de A y B.
- Si disponemos de estas instrucciones, se
simplifica muchísimo el problema de la sección
crítica, sobre todo para N procesos.
15Soluciones hardware
SWAP Temp A A B B A
TEST_AND_SET Li C C1 1
Li Integer range 0..1 0 loop SNCi
loop Swap(C,Li) exit when Li1 end
loop SCi Swap(C,Li) end loop
- Li Integer range 0..1
- loop
- SNCi
- loop
- exit when
- Test_and_Set(Li)
- exit when Li0
- end loop
- SCi
- C 0
- end loop