Title: Sistemas Concurrentes: el problema de la seccin crtica
1Sistemas Concurrentesel problema de la sección
crítica
- I.T. Informática de Sistemas
2Bibliografía
- Programación Concurrente
- J. Palma, C. Garrido, F. Sánchez, A. Quesada,
2003 - Capítulo 3
- Principles of Concurrent and Distributed
Programming - M. Ben-Ari. Prentice Hall, 1990
- Capítulo 3
- Sistemas Operativos
- A. Silberschatz, P. Galvin. Addison-Wesley, 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
- SC2
- 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?
8Segundo intento avisadores
libre1,libre2 boolean true
- loop
- SNC1
- loop
- exit when libre2
- end loop
- libre1false
- SC1
- libre1true
- end loop
- loop
- SNC2
- loop
- exit when libre1
- end loop
- libre2false
- SC2
- libre2true
- end loop
9Demostración de la exclusión mutua
- libre1false ? at(c1) V at(d1) V at(e1)
- libre2false ? at(c2) V at(d2) V at(e2)
- (at(d1) ? at(d2))
10Tercer intento
libre1,libre2 boolean true
- loop
- SNC1
- libre1false
- loop
- exit when libre2
- end loop
- SC1
- libre1true
- end loop
- loop
- SNC2
- libre2false
- loop
- exit when libre1
- end loop
- SC2
- libre2true
- end loop
11Solución de Peterson
libre1,libre2 boolean true turno
integer range 1..2 1
- loop
- SNC1
- libre1false
- turno 2
- loop
- exit when libre2 or
- turno1
- end loop
- SC1
- libre1true
- end loop
- loop
- SNC2
- libre2false
- turno 1
- loop
- exit when libre1 or
- turno2
- end loop
- SC2
- libre2true
- end loop
12Soluciones hardwareinstrucciones atómicas
- Instrucciones atómicas test-and-set o 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 la solución a la sección
crítica.
13Soluciones con instrucciones atómicas
- loop
- SNC1
- loop
- exit when
- Test_and_Set(llave)false
- end loop
- SC1
- llavefalse
- end loop
loop SNC1 llavetrue loop
Swap(cerradura,llave) exit when
llavefalse end loop SC1
cerradurafalse end loop
Ojo, no garantizan espera limitada