Está en la página 1de 17

Sistemas Operativos

Temas 4, 5 y 6

Jorge Garca Duque


Despacho: B-202
Tutoras: Lunes 16:00-18:00 y Martes 16:00-20:00

Sistemas Operativos. 2009-2010


ndice

Tema 4: Herramientas de Sincronizacin de


Alto Nivel.
Regiones Crticas.
Monitores.
Tema 5: Comunicacin entre procesos.
Tema 6: Gestin de Interbloqueo
Resolucin de cuestiones y problemas de
examen.

Sistemas Operativos. 2009-2010


Tema 4. Herramientas de
Sincronizacin de Alto
Nivel

Sistemas Operativos. 2009-2010 Herramientas de Sincronizacin de Alto Nivel


Regiones Crticas (I). Introduccin

Objetivo: evitar los problemas de inicializacin y


errores en la disposicin de las sentencias wait y
signal.
Consta de una variable compartida x de cualquier
tipo, a la que slo se puede acceder mediante la
sentencia:
REGION x DO S,
donde S es la seccin crtica donde se accede a
la variable x.
La Regin Crtica garantiza el acceso en exclusin
mutua a S, y por tanto, a los datos contenidos en la
variable x.
Sistemas Operativos. 2009-2010 Herramientas de Sincronizacin de Alto Nivel
Regiones Crticas (II). Exclusin Mutua

Proceso P { Proceso Q {
shared tipo x; shared tipo x;
................. .................
REGION x DO BEGIN REGION x DO BEGIN
Seccin Crtica; Seccin Crtica;
END; END;
................. .................
} }
COBEGIN P;Q; COEND;
Sistemas Operativos. 2009-2010 Herramientas de Sincronizacin de Alto Nivel
Regiones Crticas (III). Exclusin Mutua

Implementacin con semforos:


La sentencia shared tipo x se sustituye
por: semaforo x_mutex(1);
La sentencia REGION x DO S se sustituye
por: wait(x_mutex);
S;
signal(x_mutex);
Problema: slo solucionamos el problema
de la exclusin mutua.
Sistemas Operativos. 2009-2010 Herramientas de Sincronizacin de Alto Nivel
Regiones Crticas (IV). Condicionales

Regiones Crticas Condicionales:


Se aade una condicin de acceso booleana B:
REGION x WHEN B DO S;
Slo si B es cierto se compite por el acceso en
exclusin mutua a S.
Si B es falso, el proceso se suspende hasta que B sea
cierto y pueda competir por la exclusin mutua.
La comprobacin de B debe hacerse en exclusin
mutua por lo que sus variables involucradas deben
incluirse en la Regin x;

Sistemas Operativos. 2009-2010 Herramientas de Sincronizacin de Alto Nivel


Regiones Crticas (V). Implementacin
[shared tipo x]: semaforo x_mutex(1), x_wait(0);
int x_cuenta = 0, x_temp = 0;
[REGION x WHEN B DO S]:
wait(x_mutex);
if (NOT B) {
x_cuenta++;
signal(x_mutex);
wait(x_wait);
while (NOT B) {
x_temp++;
if (x_temp < x_cuenta) signal(x_wait);
else signal(x_mutex);
wait(x_wait);
}
x_cuenta--;
}
Sistemas Operativos. 2009-2010 Herramientas de Sincronizacin de Alto Nivel
Regiones Crticas (VI). Implementacin
[REGION x WHEN B DO S] (cont):
S;
if (x_cuenta > 0) {
x_temp = 0;
signal(x_wait);
}
else signal(x_mutex);

Problemas de la implementacin:
Conlleva evaluar todas las condiciones B cada vez que
un proceso accede a la seccin crtica.
Los procesos se desordenan.
Sistemas Operativos. 2009-2010 Herramientas de Sincronizacin de Alto Nivel
Monitores(I). Introduccin
Objetivo: aislar el cdigo de sincronizacin del
cdigo de los procesos.

S S S S
Proceso A I I
DATOS
I I Proceso B
N N N N
C. C. C. C.

Monitor: tipo abstracto de datos que garantiza el


acceso en exclusin mutua a los datos.
Sistemas Operativos. 2009-2010 Herramientas de Sincronizacin de Alto Nivel
Monitores(II). Introduccin
Slo un proceso puede ejecutar simultnemente una de las
funciones de acceso (ENTRY) definidas para el Monitor.
El Monitor puede incluir funciones internas con el objetivo de
estructurar la codificacin de las funciones de acceso.
Los procesos no pueden acceder a las funciones internas ni a los
datos del Monitor.

f1 f4
Internas
f2 DATOS f5

f3 Inicio() f6

Sistemas Operativos. 2009-2010 Herramientas de Sincronizacin de Alto Nivel


Monitores (III). Condicionales

Se incluyen como parte de los datos del


Monitor Variables de Condicin:
Una variable de condicin v consta de:
Una cola de procesos.
Tres funciones de acceso:
wait(v): suspende al proceso en la cola asociada a la
variable de condicin.
signal(v): si existe algn proceso suspendido en la
cola asociada a la variable de condicin se despierta el
ms prioritario.
empty(v): funcin boolena que retorna verdadero si
no existe ningn proceso suspendido en la cola asociada a
la variable de condicin (falso en caso contrario)

Sistemas Operativos. 2009-2010 Herramientas de Sincronizacin de Alto Nivel


Monitores(IV). Condicionales
Monitor Semaforo inicio() {
int s; s = N;
condition v; }
ENTRY wait() { ENTRY signal() {

if (s == 0) wait(v); if (empty(v)) s++;


else s--; else signal(v);
} }
Proceso P {
M.wait();
S;
M.signal();
}
Sistemas Operativos. 2009-2010 Herramientas de Sincronizacin de Alto Nivel
Monitores (V). Condicionales
Problema: cuando un proceso P despierta a otro proceso Q
suspendido sobre una variable de condicin, existirn dos
procesos preparados dentro del Monitor!.
Solucin: como el Monitor garantiza la exclusin mutua en el
acceso a los datos, uno de los dos procesos se suspender
hasta que el otro abandone el Monitor (retorna o se suspende
sobre una variable de condicin).
Dos posibilidades:
1. Contina el proceso sealado (Q) y se demora el que ha
ejecutado el signal (P).
2. Contina el proceso que ha ejecutado el signal (P) y se
demora el proceso sealado (Q).
En general, las soluciones son dependientes del tipo de Monitor.
Soluciones independientes del tipo de Monitor: despus de un
signal, el proceso abandona el Monitor.

Sistemas Operativos. 2009-2010 Herramientas de Sincronizacin de Alto Nivel


Colas de Variables de Condicin Cola Interna

MONITOR

Internas

DATOS

Inicio()

Cola de Procesos de Entrada

Sistemas Operativos. 2009-2010 Herramientas de Sincronizacin de Alto Nivel


Monitores(VI). Implementacin
semaforo mutex(1), next(0);
int next_count = 0;

[condition v]:
semaforo v_sem(0);
int v_count = 0;

[Monitor.f()]:
wait(mutex); if (next_count > 0)
f(); signal(next);
siguiente(); else signal(mutex);
Sistemas Operativos. 2009-2010 Herramientas de Sincronizacin de Alto Nivel
Monitores(VII). Implementacin
[signal(v)]: Tipo 1 (cont. sealado)
if (v_count > 0) {
next_count++;
signal(v_sem);
wait(next);
next_count--;
}
[wait(v)]: Tipo 1 (cont. Sealado)
v_count++;
siguiente(); if (next_count > 0)
wait(v_sem); signal(next);
v_count--; else signal(mutex);
Sistemas Operativos. 2009-2010 Herramientas de Sincronizacin de Alto Nivel

También podría gustarte