so-mod 6-sincronizaci n de procesos- 2010 6... · puede implementarse un semáforo de cuenta s como...
TRANSCRIPT
1
Módulo 6
Departamento de InformáticaFacultad de Ingeniería
Universidad Nacional de la Patagonia “San Juan Bosco”
Sincronización de Procesos
Sistemas Operativos – Sincronización de ProcesosJRA © 2010
� Fundamentos
� El Problema de la Sección Crítica
� La Solución de Peterson y otras
� Hardware de Sincronización
� Semáforos
� Problemas Clásicos de Sincronización
� Monitores
Sincronización de Procesos
2
Sistemas Operativos – Sincronización de ProcesosJRA © 2010
� El acceso concurrente a datos compartidos puede resultar en inconsistencias.
� Mantener la consistencia de datos requiere mecanismos para asegurar la ejecución ordenada de procesos cooperativos.
� La solución con memoria compartida al problema del buffer limitado (módulo anterior) permite a lo sumo n – 1 items en el buffer al mismo tiempo. Una solución, donde todos los N buffers son usados, no es simple.
� Supóngase que se modifica el código del productor-consumidor agregando una variable contador, inicializado a 0 e incrementado en cada momento que un nuevo item es agregado al buffer
Fundamentos
Sistemas Operativos – Sincronización de ProcesosJRA © 2010
Productor
� Datos compartidos type item = … ;var buffer array [0..n-1] of item;in, out: 0..n-1;contador : 0..n;in, out, contador := 0;
� Proceso Productorrepeat
…produce un item en nextp
…while contador = n do no-op;buffer [in] := nextp;in := in + 1 mod n;contador := contador +1;
until false;
3
Sistemas Operativos – Sincronización de ProcesosJRA © 2010
ConsumidorProceso Consumidor
repeat
while contador = 0 do no-op;
nextc := buffer [out];
out := out + 1 mod n;
contador := contador – 1;…
consume el item en nextc…
until false;
� Las sentencias:
� contador := contador + 1;
� contador := contador - 1;
deben ser ejecutadas atomicamente.
Sistemas Operativos – Sincronización de ProcesosJRA © 2010
Productor
El Problema
Luego de una operación de Productor y otra de
Consumidor … contador permanece invariante
contador = 4
contador = 4
contador:= contador+1;
::::
Consumidor
contador:= contador-1;
::::
::::
::::
4
Sistemas Operativos – Sincronización de ProcesosJRA © 2010
contador:= contador+1;
rega ← contador
rega ← rega+1
contador ← rega
rega ←←←← contador
rega ←←←← rega+1
contador ←←←← rega
rega= 5
Productor
El Problema
contador = 4
::::
Consumidor
contador:= contador-1;
::::
::::
::::
regb ←←←← contador
regb ←←←← regb - 1
contador ←←←← regb
contador = 3
regb ←←←← contador
regb ←←←← regb - 1
contador ←←←← regb
regb= 3
contador = 5
rega ←←←← contador
rega ←←←← rega+1
contador ←←←← rega
Sistemas Operativos – Sincronización de ProcesosJRA © 2010
P1
El Problema
Luego de la ejecución de P1 seguida de P2 los valores de a y b deben ser iguales entre sí
a = b = 1
a = b = 4
a:= a+1;b:= b+1;
::::
P2
a:= 2 * a;b:= 2 * b;
::::
::::
::::
5
Sistemas Operativos – Sincronización de ProcesosJRA © 2010
P1
El Problema
Luego de la ejecución de P1 y P2 los valores de a y b deberían ser igualesentre sí, pero no lo son.
a = b = 1
a = 4 , b = 3
a:= a+1;b:= b+1;
::::
P2
a:= 2 * a;b:= 2 * b;
::::
::::
::::
Sistemas Operativos – Sincronización de ProcesosJRA © 2010
LA sig(A) C sig(C)B sig(B)
El Problema
D sig(D) E sig(E)
: :
: :
sig(D) ← L
L ← Dsig(E) ← L
L ← E
6
Sistemas Operativos – Sincronización de ProcesosJRA © 2010
L
A sig(A) C sig(C)B sig(B)
El Problema
D sig(D) E sig(E)
: :
: :
sig(D) ← L
L ← Dsig(E) ← L
L ← Esig(E) ← L
L ← E
Sistemas Operativos – Sincronización de ProcesosJRA © 2010
sig(E) ← L
L ← E
L
A sig(A) C sig(C)B sig(B)
El Problema
D sig(D) E sig(E)
: :
: :
sig(D) ← L
L ← D
sig(D) ← L
L ← D
7
Sistemas Operativos – Sincronización de ProcesosJRA © 2010
L
A sig(A) C sig(C)B sig(B)
El Problema
D sig(D) E sig(E)
: :
: :
sig(D) ← L
L ← D
sig(D) ← L
L ← D
sig(E) ← L
L ← E
sig(E) ← L
L ← Esig(D) ← L
L ← D
Sistemas Operativos – Sincronización de ProcesosJRA © 2010
L
A sig(A) C sig(C)B sig(B)
El Problema
D sig(D) E sig(E)
: :
: :
sig(D) ← L
L ← Dsig(E) ← L
L ← E
8
Sistemas Operativos – Sincronización de ProcesosJRA © 2010
L
A sig(A) C sig(C)B sig(B)
El Problema
D sig(D) E sig(E)
: :
: :
sig(D) ← L
L ← Dsig(E) ← L
L ← Esig(E) ← L
L ← E
sig(D) ← L
L ← D
Sistemas Operativos – Sincronización de ProcesosJRA © 2010
L
A sig(A) C sig(C)B sig(B)
El Problema
D sig(D) E sig(E)
: :
: :
sig(D) ← L
L ← Dsig(E) ← L
L ← Esig(E) ← L
L ← E
sig(D) ← L
L ← D
9
Sistemas Operativos – Sincronización de ProcesosJRA © 2010
L
A sig(A) C sig(C)B sig(B)
El Problema
D sig(D) E sig(E)
: :
: :
sig(D) ← L
L ← Dsig(E) ← L
L ← Esig(E) ← L
L ← E
sig(D) ← L
L ← D
Sistemas Operativos – Sincronización de ProcesosJRA © 2010
Condición de Carrera
Condición de carrera – Es la situación donde varios procesos acceden y manejan datos compartidos concurrentemente. El valor final de los datos compartidos depende de que proceso termina último.
Para prevenir las condiciones de carrera , los procesos concurrentes cooperativos deben ser sincronizados .
10
Sistemas Operativos – Sincronización de ProcesosJRA © 2010
Problema de la Sección Crítica
n procesos todos compitiendo para usar datos compartidos
Cada proceso tiene un segmento de código llamado sección crítica , en la cual los datos compartidos son accedidos
Problema – asegurar que cuando un proceso está ejecutando en su sección crítica, no se le permite a otro proceso ejecutar en su respectiva sección crítica.
Sistemas Operativos – Sincronización de ProcesosJRA © 2010
Solución al Problema de la Sección Crítica
1. Exclusión Mutua . Si el proceso Pj está ejecutando en su sección crítica, entonces ningún otro proceso puede estar ejecutando en sus secciones críticas.
2. Progreso . Si ningún proceso está ejecutando en su sección crí-tica y existe algunos procesos que desean entrar en sus secciones criticas, entonces la selección de procesos que desean entrar en la sección crítica no puede ser pospuesta indefinidamente.
3. Espera Limitada . Debe existir un límite en el número de veces que a otros procesos les está permitido entrar en sus secciones críticas después que un proceso ha hecho un requerimiento para entrar en su sección crítica y antes que ese requerimiento sea completado.
� Asuma que cada proceso ejecuta a velocidad distinta de cero.
� No se asume nada respecto a la velocidad relativa de los nprocesos.
11
Sistemas Operativos – Sincronización de ProcesosJRA © 2010
Solo 2 procesos, P0 y P1
Estructura general del proceso Pi
repeat
sección crítica (SC)
resto de sección
until falso
Los procesos pueden compartir algunas variables comunes para sincronizar sus acciones.
Resolución del Problema
protocolo de entrada
protocolo de salida
Sistemas Operativos – Sincronización de ProcesosJRA © 2010
Solución de Peterson
� Proceso Pi
repeat
flag [i] := true;turn := j;while (flag [j] and turn = j) do no-op;
sección crítica
flag [i] := false;
resto de sección
until false;
� Alcanza los tres requerimientos; resuelve el problema de la sección crítica para dos procesos.
12
Sistemas Operativos – Sincronización de ProcesosJRA © 2010
Algoritmo para N Procesos
� Antes de entrar en su sección crítica, el proceso recibe un número. El poseedor del número mas chico entra en su sección crítica.
� Si los procesos Pi y Pj reciben el mismo número , si i< j, entonces Pi es servido primero; sino lo es Pj .
� El esquema de numeración siempre genera números en orden incremental de enumeración;
p.e., 1,2,3,3,3,3,4,5...
Sección crítica para n procesos
(Algoritmo del “panadero”)
Sistemas Operativos – Sincronización de ProcesosJRA © 2010
Algoritmo para N Procesos(Cont.)
� Notación orden lexicográfico (ticket #,id proceso #)
� (a,b) < c,d) si a < c o si a = c y b < d
� max (a0,…, an-1) es un número k, tal que k ≥ ai para i = 0, …, n – 1
� Dato compartido
var choosing: array [0..n – 1] of boolean;
number: array [0..n – 1] of integer,
Las estructuras de datos son inicializadas a false y 0 respectivamente.
13
Sistemas Operativos – Sincronización de ProcesosJRA © 2010
repeatchoosing[i] := true;number[i] := max(number[0], number[1], …, number [n – 1])+1;choosing[i] := false;for j := 0 to n – 1
do beginwhile choosing[j] do no-op;while number[j] ≠ 0
and (number[j],j) < (number[i], i) do no-op;end ;sección crítica
number[i] := 0;resto de sección
until false;
Algoritmo para N Procesos(Cont.)
Sistemas Operativos – Sincronización de ProcesosJRA © 2010
Sincronización por Hardware
� Muchos sistemas proveen soporte por hardware para el código de la sección crítica
� Monoprocesador – pueden deshabilitarse las interrupciones
� El código que esta corriendo debe ejecutar sin apropiación
� Generamente es demasiado ineficiente en sistemas multiprocesador
�Los SOs que usan esto no son ampliamente escalables
� Las computadoras modernas proveen instrucciones especiales que se ejecutan atomicamente
�Atomico = no-interrumpible
� Sea por verificación de una palabra de memoria y su inicialización
� O por intercambio de dos palabras de memoria
14
Sistemas Operativos – Sincronización de ProcesosJRA © 2010
Solución usando Test-and-Set
� Verifica y modifica el contenido de una palabra atomicamente.
función Test-and-Set (var target: boolean): boolean;
begin
Test-and-Set := target;target := true;
end ;
Sistemas Operativos – Sincronización de ProcesosJRA © 2010
� Dato compartido : var lock: boolean (inicialmente false)
� Proceso Pi
repeat
while Test-and-Set (lock) do no-op;
sección crítica
lock := false;
resto de sección
until false;
Exclusión Mutua con Test-and-Set
15
Sistemas Operativos – Sincronización de ProcesosJRA © 2010
Instrucción Swap
� Definición:
void Swap (boolean *a, boolean *b)
{
boolean temp = *a;
*a = *b;
*b = temp:
}
Sistemas Operativos – Sincronización de ProcesosJRA © 2010
Solución usando Swap� La variable booleana compartida es inicializada en FALSE;
Cada proceso tiene una variable local booleana key
� Solución:
while (true) {
key = TRUE;
while ( key == TRUE)
Swap (&lock, &key );
// sección critica
lock = FALSE;
// sección restante
}
16
Sistemas Operativos – Sincronización de ProcesosJRA © 2010
Semáforos
� Es una herramienta de sincronización.
� Semáforo S – variable entera
� Dos operaciones standard modifican S: wait() y signal()
Originalmente llamadas P() y V()
� Puede ser accedido solo por dos operaciones indivisibles (atómicas):
wait (S): while S≤ 0 do no-op;S := S – 1;
signal (S): S := S + 1;
Sistemas Operativos – Sincronización de ProcesosJRA © 2010
El Semáforo como Herramienta General de Sincronización
� Semáforo de Cuenta – el valor entero puede tener un rango sobre un dominio sin restricciones.
� Semáforo Binario – el valor entero puede tener un rango solo entre 0 y 1; puede ser más simple de implementar
� También se los conoce como mutex locks
� Puede implementarse un semáforo de cuenta S como un semáforo binario
� Provee exclusión mutua
� Semáforo S; // inicializado en 1
� wait (S);
Sección Critica
signal (S);
17
Sistemas Operativos – Sincronización de ProcesosJRA © 2010
El Semáforo como Herramienta General de Sincronización
� Ejecute B en Pj solo después que A ejecute en Pi
� Use el semáforo flag inicializado a 0
� Código:
Pi Pj
M M
A wait(flag)
signal(flag) B
Sistemas Operativos – Sincronización de ProcesosJRA © 2010
Implementación S con Semáforos Binarios
� Estructuras de datos:
var S1: binary-semaphore;S2: binary-semaphore;S3: binary-semaphore;C: integer;
� Initialización:S1 = S3 = 1S2 = 0C = valor inicial del semaforo S
18
Sistemas Operativos – Sincronización de ProcesosJRA © 2010
Implementación de S (Cont.)� operación wait
wait(S3);wait(S1);C := C – 1;if C < 0then begin
signal(S1);wait(S2);
endelse signal(S1);signal(S3);
� operación signalwait(S1);C := C + 1;if C ≤ 0 then signal(S2);signal(S1);
Sistemas Operativos – Sincronización de ProcesosJRA © 2010
Implementación del Semáforo
� Debe garantizar que dos procesos no puedan ejecutar wait () y signal () sobre el mismo semáforo al mismo tiempo
� Entonces, la implementación se convierte en el problema de la sección crítica donde el código del wait y el signal son la sección crítica.
� Podemos tener ahora espera ocupada en la implementación de la sección crítica porque:
�El código de implementación es corto
�Poca espera ocupada si la sección crítica está raramente invocada
� Note que las aplicaciones pueden pasar y gastar mucho tiempo en secciones críticas, entonces esta no es una buena solución.
19
Sistemas Operativos – Sincronización de ProcesosJRA © 2010
Implementación de Semáforo sin Espera Ocupada
� Con cada semáforo hay asociada una cola de espera.Cada entrada en dicha cola tiene dos datos:
� valor (de tipo entero)
� puntero al próximo registro en la lista
� Dos operaciones:
� block – ubica el proceso invocando la operación en la apropiada cola de espera .
� wakeup – remueve uno de los procesos en la cola de espera y lo ubica en la cola de listos.
Sistemas Operativos – Sincronización de ProcesosJRA © 2010
Implementación (Cont.)� Las operaciones del semáforo se definen como
wait (S): S.value := S.value – 1;
if S.value < 0 then begin
agregue este proceso a S.L;block;
end ;
signal (S): S.value := S.value + 1;
if S.value ≤ 0 then begin
remueva un proceso P de S.L;wakeup(P);
end ;
20
Sistemas Operativos – Sincronización de ProcesosJRA © 2010
Interbloqueo e Inanición� Interbloqueo – dos o más procesos están esperando
indefinidamente por un evento que puede ser causado por solo uno de los procesos que esperan.
� Sean S y Q dos semáforos inicializados a 1
P0 P1
wait(S); wait(Q);
wait(Q); wait(S);
M M
signal(S); signal(Q);
signal(Q); signal(S);
� Inanición – bloqueo indefinido. Un proceso no puede ser removido nunca de la cola del semáforo en el que fue suspendido.
Sistemas Operativos – Sincronización de ProcesosJRA © 2010
Problemas Clásicos de Sincronización
� Problema del Buffer Limitado
� Problema de Lectores y Escritores
� Problema de los Filósofos Cenando
21
Sistemas Operativos – Sincronización de ProcesosJRA © 2010
Problema del Buffer Limitado
� Datos compartidostype item = …var buffer = …
full, empty, mutex: semaphore;nextp, nextc: item;full :=0; empty := n; mutex :=1;
Sistemas Operativos – Sincronización de ProcesosJRA © 2010
Problema del Buffer Limitado (Cont.)
� Proceso Productorrepeat
…produce un item en nextp
…wait(empty);wait(mutex);
…agregue nextp al buffer
…signal(mutex);signal(full);
until false;
22
Sistemas Operativos – Sincronización de ProcesosJRA © 2010
Problema del Buffer Limitado(Cont.)
� Proceso Consumidor repeat
wait(full)wait(mutex);
…remueve un item de buffer a nextc
…signal(mutex);signal(empty);
…consume el item en nextc
…until false;
Sistemas Operativos – Sincronización de ProcesosJRA © 2010
Problema de los Lectores-Escritores� Un conjunto de datos es compartido entre un número de procesos
concurrentes
� Lectores – solo leen el conjunto de datos, no realizan actualizaciones
� Escritores – pueden leer y/o escribir
� Problema – permitir a múltiples lectores leer al mismo tiempo. Un solo escritor puede acceder a los datos compartidos al mismo tiempo.
� Datos compartidos
� Conjunto de datos
� Semáforo mutex inicializado a 1.
� Semáforo wrt inicializado a 1.
� Entero readcount inicializado a 0.
23
Sistemas Operativos – Sincronización de ProcesosJRA © 2010
Problema de los Lectores-Escritores
� Datos compartidosvar mutex, wrt: semaphore (=1);
readcount : integer (=0);
� Proceso Escritorwait(wrt);
…se realiza la escritura
…signal(wrt);
Sistemas Operativos – Sincronización de ProcesosJRA © 2010
Problema de los Lectores-Escritores
� Proceso Lectorwait(mutex);
readcount := readcount +1;if readcount = 1 then wait(wrt);
signal(mutex);…
se realiza la lectura…
wait(mutex);readcount := readcount – 1;if readcount = 0 then signal(wrt);
signal(mutex):
24
Sistemas Operativos – Sincronización de ProcesosJRA © 2010
Problema de los Filósofos Cenando
� Datos compartidos
Fuente con arroz (conjunto de datos)
var chopstick: array [0..4] of semaphore;(=1 inicialmente)
Sistemas Operativos – Sincronización de ProcesosJRA © 2010
Problema de los Filósofos Cenando
Filósofo i:repeat
wait(chopstick[i])wait(chopstick[i+1 mod 5])
…comer…
signal(chopstick[i]);signal(chopstick[i+1 mod 5]);
…pensar…
until false;
25
Sistemas Operativos – Sincronización de ProcesosJRA © 2010
Problemas con Semáforos
� Incorrecto uso de las operaciones sobre semáforos:
� signal (mutex) …. wait (mutex)
� wait (mutex) … wait (mutex)
� Omitir el wait (mutex) o el signal (mutex) (o ambos)
Sistemas Operativos – Sincronización de ProcesosJRA © 2010
Monitores� Es un constructor de sincronización de alto nivel que
permite compartir en forma segura un tipo de dato abstracto entre procesos concurrentes.
type monitor-name = monitordeclaraciones de variablesprocedure entry P1 :(…);
begin … end ;procedure entry P2(…);
begin … end ;M
procedure entry Pn (…);begin …end ;
begincódigo de inicialización
end
26
Sistemas Operativos – Sincronización de ProcesosJRA © 2010
Vista esquemática de un Monitor
...
datoscompartidos
código
inicialización
operaciones
cola de entrada
Sistemas Operativos – Sincronización de ProcesosJRA © 2010
Variables de Condición
� condición x, y;
� Dos operaciones sobre una variable de condición
� x.wait () – el proceso que invoca esa operación es suspendido
� x.signal () – reinicia uno de los procesos (si hay alguno) que invocó x.wait ()
27
Sistemas Operativos – Sincronización de ProcesosJRA © 2010
Monitor con Variables de Condición
datoscompartidos
código
inicialización
...
operaciones
cola de entradaxy colas asociadas a las
variables de condición x e y
Sistemas Operativos – Sincronización de ProcesosJRA © 2010
Solución de los Filósofos Cenando
type filósofos-cenando = monitorvar state : array [0..4] of :(pensando, hambre, comiendo);var self : array [0..4] of condition;procedure entry pickup (i: 0..4);
beginestado[i] := hambre,test (i);if estado[i] ≠ comiendo then self[i].wait,
end ;
procedure entry putdown (i: 0..4);begin
estado[i] := pensando;test (i+4 mod 5);test (i+1 mod 5);
end ;
28
Sistemas Operativos – Sincronización de ProcesosJRA © 2010
Solución de los Filósofos Cenando
procedure test(k: 0..4);begin
if estado[k+4 mod 5] ≠ comiendoand state[k] = hambreand state[k+1 mod 5] ] ≠ comiendo then begin
estado[k] := comiendo;self[k].signal;
end ;end ;
beginfor i := 0 to 4
do estado[i] := pensando;
end .
Sistemas Operativos – Sincronización de ProcesosJRA © 2010
Solución de los Filósofos Cenando
� Cada filósofo invoca las operaciones pickup() y putdown() en la siguiente secuencia:
dp.pickup (i)
Comer
dp.putdown (i)
29
Módulo 6
Departamento de InformáticaFacultad de Ingeniería
Universidad Nacional de la Patagonia “San Juan Bosco”
Fin