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