Puntos a tratar Coordinación entre Procesos Parte I • Tipos de interacción entre procesos – Competencia entre procesos para adquirir recursos – Cooperación entre procesos para compartir – Cooperación entre procesos via comunicación • Aproximaciones de Software al problema de Exclusión Mutua. Protocolo del Igloo. • Aproximaciones de Hardware al problema de Exclusión Mutua. M.B. Ibáñez M.B. Ibáñez Tareas del Sistema de Operación Tipos de interacción entre procesos • • • • Saber qué procesos están activos Asignar y retirar recursos a los procesos Proteger los datos y los recursos El resultado de la ejecución de un proceso debe ser independiente de la velocidad de ejecución de ese y otros procesos • Los procesos desconocen la existencia de los demás procesos • Competencia • Los procesos saben de la existencia de otros procesos • Cooperación compartiendo recursos • Los procesos saben exactamente quiénes son los otros procesos • Cooperación via comunicación M.B. Ibáñez M.B. Ibáñez Competencia entre Procesos para adquirir Recursos Problemas de Control I • La ejecución de un proceso puede afectar el comportamiento de los procesos que compiten con él por un determinado recurso • Si dos procesos quieren usar un mismo recurso, el recurso será asignado a uno de ellos y el otro deberá esperar • Es posible que el proceso suspendido nunca logre tener el recurso y nunca termine M.B. Ibáñez ¿Cómo garantizar la Exclusion Mutua? – Región crítica • Solo un proceso a la vez puede estar en la región crítica M.B. Ibáñez 1 Problemas de Control II Deadlock process P {… solicita R1 … solicita R2 …} process Q { … solicita R2 … solicita R1 …} parbegin P;Q parend; • S.O.:: R1 -> P • S.O.:: R2 -> Q • P necesita R2 pero no libera a R1 • Q necesita R1 pero no libera a R2 Problemas de Control III Inanición • Los procesos P1, P2, P3 requieren el recurso R periódicamente • R -> P1 • P2 y P3 esperan por el recurso R • R -> P2 • (R -> P1 ; R-> P2)* • P3 perece por inanición M.B. Ibáñez Problemas de Control IV Ejemplo: Concurso static int i Process A Process B i=0 i=0 while ( i > -10 ) { while ( i < 10 ) { i--; i++; } } System.out.println System.out.println (“gana A”); (“gana B”); M.B. Ibáñez Cooperación de Procesos compartiendo recursos • Los procesos utilizan datos compartidos • La escritura debe ser mutuamente exclusiva • Las regiones críticas permiten garantizar la integridad de los datos M.B. Ibáñez M.B. Ibáñez Coherencia de los datos Cooperación entre Procesos mediante Comunicación {a=b} { a = b} P1: a := a + 1 b := b + 1 P1:: a := a + 1 P2:: b := 2 * b P1:: b := b + 1 P2:: a := 2 * a P2: b := 2 * b a := 2 * a • La comunicación permite sincronizar, coordinar varias actividades • Posibles problemas: – deadlock – inanición { a != b} M.B. Ibáñez M.B. Ibáñez 2 Requerimientos para la Exclusión Mutua • Solo un proceso a la vez puede estar en la región crítica • Si un proceso espera por una región crítica, no puede ser demorado de manera infinita. Requerimientos para la Exclusión Mutua • Si la región crítica no está siendo utilizada, cualquier proceso que lo requiera podrá usarla • No puede hacerse ninguna estimación acerca de la velocidad de los pocesos o el número de los mismos • Un proceso permanece dentro de la región crítica únicamente por tiempo limitado M.B. Ibáñez Protocol Igloo M.B. Ibáñez Primer Intento var turn: 0..1 Process 0 … while turn <> 0 do {nothing}; < critical section > turn := 1; ... M.B. Ibáñez Comentarios • Esta solución garantiza la exclusión mutua • Problemas: – Los procesos se alternan en el uso de la región crítica – Si un proceso falla dentro o fuera de la región crítica el otro proceso nunca podrá usar la región crítica – Busy waiting M.B. Ibáñez Process 1 … while turn <> 1 do {nothing}; < critical section > turn := 0; ... M.B. Ibáñez Segundo intento var flag: array [0..1] of boolean; Process 0 … while flag[1] do {nothing}; flag[0] := true; < critical section >; flag[0] := false; ... Process 1 … while flag[0] do {nothing}; flag[1] := true; < critical section >; flag[1] := false; ... M.B. Ibáñez 3 Tercer intento Comentarios • Esta solución no garantiza la exclusión mutua, véase la siguiente secuencia: P0 ejecuta la instrucción while y encuentra la flag[1] en false. P1 ejecuta la instrucción while y encuentra la flag[0] en false P0 pone la flag[0] en true y entra en la región crítica P1 pone la flag[1] en true y entra en la región crítica var flag: array [0..1] of boolean; Process 0 … flag[0] := true; while flag[1] do {nothing}; < critical section >; flag[0] := false; ... Process 0 … flag[1] := true; while flag[0] do {nothing}; < critical section >; flag[1] := false; ... M.B. Ibáñez M.B. Ibáñez Comentarios Cuarto Intento • Se garantiza la exclusión mutua • Problemas: – Si un proceso falla dentro de su región crítica, el otro proceso nunca podrá usarla – Deadlock. Process 0 Process 1 … flag[0] := true; while flag[1] do { flag[0] := fa lse; … flag[1] := true; while flag[0] do { flag[1] := fa lse; <delay for a short time>; flag[0] := true; }; <critical section>; flag[0] := fa lse; ... <delay for a short time>; flag[1] := true; }; <critical section>; flag[1] := fa lse; ... M.B. Ibáñez M.B. Ibáñez Comentarios Solución Correnta Algoritmo de Dekker I • Se garantiza la exclusión mutua • Considere la siguiente secuencia de eventos: P0 coloca la flag[0] en true P1 coloca la flag[1] en true P0 checks flag[1] P1 checks flag[0] P0 coloca la flag[0] en false P1 coloca la flag[1] en false P0 coloca la flag[0] en true P1 coloca la flag[1] en true M.B. Ibáñez procedure P0; begin repeat flag[0] := true; while flag[1] do if turn = 1 then begin flag[0] := false; while turn = 1 do {nothing}; flag[0] := true; end <critical section>; turn := 1; flag[0] := false; <remainder> forever end; procedure P1; begin repeat flag[1] := true; while flag[0] do if turn = 0 then begin flag[1] := false; while turn = 0 do {nothing}; flag[1] := true; end <critical section>; turn := 0; flag[1] := false; <remainder> forever end; M.B. Ibáñez 4 Solución Correcta Algoritmo de Dekker II var flag array[0..1] of boolean; turn: 0..1; begin flag[0] := false; flag[1] := false; turn := 1; parbegin P0; P1; parend end Exclusión Mutua: Deshabilitación de las interrupciones repeat <disable interrupts> <critical section> <enable interrupts> <remainder> forever M.B. Ibáñez M.B. Ibáñez Deshabilitación de las interrupciones: Desventajas Aproximaciones de Hardware al problema de Exclusión Mutua • La eficiencia de la ejecución puede degradarse • El procesador está limitado en su habilidad de alternar entre procesos • Interrupciones • Instrucciones de Máquina • Multiprocesamiento – Desabilitar interrupciones en un procesador no garantiza la exclusión mutua M.B. Ibáñez M.B. Ibáñez Deshabilitación de Interrupciones Deshabilitación de Interrupciones Desventajas repeat <deshabilite interrupciones> <sección crítica> <habilite interrupciones> <resto> forever M.B. Ibáñez • La eficiencia de ejecución puede bajar dramáticamente • El procesador está limitado a permitir interacción entre programas • Multiprocesamiento – La deshabilitación de interrupciones en un procesador no garantiza la exclusión mutua o – Puede ocasionar pérdida de tiempo mientras el mensaje es pasado entre los procesadores M.B. Ibáñez 5 Exclusión Mutua: Instrucciones de Máquina I function testset(var i: integer): boolean { if i = 0 then { i := 1; testset := true; } else testset := false; } Exclusión Mutua: Instrucciones de Máquina II program mexclusion; const N = …; var bolt: integer; ... { bolt := 0; parbegin P(1);P(2);…;P(N); parend } procedure P(i:integer) { repeat repeat <no-op> until testset(bolt); <critical-section>; bolt := 0; <remainder>; forever } M.B. Ibáñez M.B. Ibáñez Instrucciones de Máquina: Ventajas Instrucciones de Máquina. Desventajas • Se aplica a cualquier número de procesos tanto en un solo procesador como en varios procesadores que comparten memoria • Es simple y por tanto fácil de verificar • Puede ser utilizado para soportar varias regiones críticas, cada región crítica puede ser definida por su propia variable M.B. Ibáñez • Se utiliza busy waiting • Es posible la inanición • Es posible el deadlock – – – – – P1 ejecuta la instrución testset y entra en su región crítica P1 es interrumpido, P2 tiene mayor prioridad P2 intenta usar el mismo recurso que P1 P2 entra en un lazo de busy-waiting P1 nunca es atendido porque tiene menor prioridad que P2 M.B. Ibáñez 6