Professional Documents
Culture Documents
Sistemas Operativos I
Cb00856 – 1
Modulo 5.
Semáforos y monitores
Soluciones al problema de
exclusión mutua
Verano 2006
Sistemas Operativos I 2
Verano 2005 1
ITESM - CEM Sistemas Operativos I CB00856-1
Planteamiento de la solución
Dos variables compartidas por los procesos:
N: número elementos en el almacén (buffer)
Nm: número máximo elementos (tamaño buffer)
Actividades productor:
verificar si N= Nm
si es verdad => a dormir
Actividades consumidor:
verificar si N = 0
si es verdad => a dormir
Sistemas Operativos I 4
Verano 2005 2
ITESM - CEM Sistemas Operativos I CB00856-1
Primitivas de la solución
Dos primitivas de comunicación son usadas entre los
procesos que bloquean el CPU.
Sistemas Operativos I 5
void productor( )
{
while (TRUE) { /* ciclo infinito */
produce_elem(&elemento);
produce_elem(&elemento); /* genera el siguiente elemento */
if (N == Nm)
Nm) /* si el almacen (buffer) esta lleno */
sleep();
sleep(); /* entonces se duerme */
intro_elem(elemento);
intro_elem(elemento); /* colocar elemento en almacen */
N = N+1 /* incrementa N elementos alma. */
if (N == 1) /* estaba vacío el almacen (buffer) */
wakeup(consumidor);
wakeup(consumidor);
}
}
Sistemas Operativos I 6
Verano 2005 3
ITESM - CEM Sistemas Operativos I CB00856-1
void consumidor( )
{
Sistemas Operativos I 7
N = count
Problemas de la solución Nm = N
Almacen vacío
Productor Consumidor
Consumidor lee count (count = 0)
if (cont == 0) => verdad
sleep()
producira elementos hasta que se
llene el almacen y se ira a dormir
sleep()
Sistemas Operativos I
AMBOS DORMIRAN POR SIEMPRE 8
Verano 2005 4
ITESM - CEM Sistemas Operativos I CB00856-1
Posible solución
Sistemas Operativos I 9
Los semáforos
Verano 2005 5
ITESM - CEM Sistemas Operativos I CB00856-1
P(S) V(S)
if ( S > 0 ) then if (alguien espera por S)
then
S:=S-1 deja pasar al proceso
else else
esperar por S S:=S+1
Sistemas Operativos I 11
11
Características principales
Desbloqueando procesos
El semáforo informa a los procesos que se encuentran
bloqueados.
El administrador de procesos que elige quien pasa a
ejecución
Atomicidad
Se garantiza que al iniciar una operación con un semáforo,
ningún otro proceso puede tener acceso al semáforo hasta
que la operación termine o se bloquee.
En ese tiempo ningún otro proceso puede simultáneamente
modificar el mismo valor de semáforo
Sistemas Operativos I 12
12
Verano 2005 6
ITESM - CEM Sistemas Operativos I CB00856-1
Tipos de semáforos
Contadores Binarios
Sincronización
Sistemas Operativos I 13
13
Sistemas Operativos I 14
14
Verano 2005 7
ITESM - CEM Sistemas Operativos I CB00856-1
Semáforos binarios
Sólo pueden tomar dos valores: 0 o 1
Generalmente se inicializan con un valor de 1.
Son usados por dos o más procesos para garantizar
que sólo uno puede entrar en sección crítica.
Antes de entrar a sección crítica un proceso ejecuta
un P(S) y un V(S) antes de salir de ella
while(1)
while(1)
P(entrar)
<Secció
<Sección Crí
Crítica>
V(salir)
V(salir)
do
Sistemas Operativos I 15
15
Semáforos sincronía
Solución varios problemas sincronización.
Sean dos procesos concurrentes P1 y P2 que se
encuentran corriendo:
P1 con enunciado S1
P2 con enunciado S2
Se desea que S2 sea ejecutado después de que S1 haya
terminado.
Solución: Semáforo síncrono (inicializado en 0).
P1: ------------- P2: --------------
------------- --------------
S1 P(sincro)
V(sincro) S2
------------- -------------
------------- -------------
Sistemas Operativos I 16
16
Verano 2005 8
ITESM - CEM Sistemas Operativos I CB00856-1
semaphore ocupado = 1;
semaphore vacio = N;
semaphore lleno = 0;
Sistemas Operativos I 17
17
Sistemas Operativos I 18
18
Verano 2005 9
ITESM - CEM Sistemas Operativos I CB00856-1
Sistemas Operativos I 19
19
Sistemas Operativos I 20
20
Verano 2005 10
ITESM - CEM Sistemas Operativos I CB00856-1
V(&lleno)
envio señal que proceso
esperaba
produce_elem(&elemento)
proceso despierta
P(&ocupado)
ocupado=0
retira_elem(...
Sistemas Operativos I 21
21
Verano 2005 11
ITESM - CEM Sistemas Operativos I CB00856-1
El problema de la panadería
Sistemas Operativos I 23
23
La cena de filósofos
Cinco filósofos se sientan en una mesa redonda. Cada uno
tiene un plato de spaghetti y un tenedor frente a él.
Cinco filó
filósofos, cinco platos, cinco tenedores
El spaghetti es tan
escurridizo que un filósofo
necesita dos tenedores para
comerlo, pero cada filosofo
solo posee un tenedor.
Sistemas Operativos I 24
24
Verano 2005 12
ITESM - CEM Sistemas Operativos I CB00856-1
La cena de filósofos
Sistemas Operativos I 25
25
La cena de filósofos
Sistemas Operativos I 26
26
Verano 2005 13
ITESM - CEM Sistemas Operativos I CB00856-1
La cena de filósofos
Hambruna - si un filosofo no puede tomar 2 tenedores,
puede ocurrir independientemente del deadlock.
Sistemas Operativos I 27
27
La cena de filósofos
Ejemplo:
NUNCA SUCEDE
Sistemas Operativos I 28
28
Verano 2005 14
ITESM - CEM Sistemas Operativos I CB00856-1
La cena de filósofos
Una solución:
Sistemas Operativos I 29
29
La cena de filósofos
Una solución:
• Hambruna se previene en función del método MUTEX utilizado:
• busy waiting (ocupado, en espera) - causan
Solución general:
Para un num arbitrario de agentes (A1...Am) que necesitan
acceso exclusivo a un num arbitrario de recursos (R1...Rn).
Agentes:
1. Peticiones de acceso en orden creciente (i.e. Acceso a R3
antes de acceso a R4).
2. Si un agente tiene Rx y necesita Ry, debe liberar primero Rx
si x > y
Sistemas Operativos I 30
30
Verano 2005 15
ITESM - CEM Sistemas Operativos I CB00856-1
Sistemas Operativos I 31
31
PROBLEMA:
Coordinación si crear condiciones de
competencia.
Sistemas Operativos I 32
32
Verano 2005 16
ITESM - CEM Sistemas Operativos I CB00856-1
1. Espera clientes
2. Barbero (si esta desocupado)
3. MUTEX
Sistemas Operativos I 33
33
Sistemas Operativos I 34
34
Verano 2005 17
ITESM - CEM Sistemas Operativos I CB00856-1
Sistemas Operativos I 35
35
Los monitores
Otra opción para la sincronización de procesos.
Introducido por Hoare
C. A. R. Hoare's seminal research paper on monitors,
"Monitors: An Operating System Structuring Concept,"
Communications of the ACM, Vol. 17, No. 10, October
1974, pp. 549-557
Se trata de una construcción concurrente que
contiene los datos y procedimientos necesarios para
la asignación de un recurso compartido.
Para lograr la asignación de un recurso una función
del proceso debe llamar una entrada del monitor.
Sistemas Operativos I 36
36
Verano 2005 18
ITESM - CEM Sistemas Operativos I CB00856-1
Procesos y monitores
Procesos no tienen acceso directo a las estructuras de
datos.
Solo un proceso puede estar activo en un monitor en
cada momento.
Cuando se llama a un entrada la implementación monitor
verifica si no hay otro proceso dentro del monitor:
si: proceso efectuó la
Estructura E1
llamada es suspendido Datos
P1
no: el que hizo la llamada Proc. 1 E2
puede entrar P2
Proc. 2 E3
: : P3
procedimientos Proc. n En
entradas
Sistemas Operativos I 37
37
1. wait()
proceso descubre que no puede continuar (almacen
lleno) ejecuta wait en alguna variable de condición
proceso se bloquea y permite que otro proceso entre al
monitor
2. signal
proceso que entra puede despertar a otro con una
instrucción signal sobre la variable de condición que el
otro proceso espera
Sistemas Operativos I 38
38
Verano 2005 19
ITESM - CEM Sistemas Operativos I CB00856-1
Sistemas Operativos I 39
39
Sistemas Operativos I 40
40
Verano 2005 20
ITESM - CEM Sistemas Operativos I CB00856-1
Sistemas Operativos I 42
42
Verano 2005 21
ITESM - CEM Sistemas Operativos I CB00856-1
procedure producir
cont :=0;
N:=100;
procedure retirar P2
ProdCons.producir
ProdCons.retirar
Sistemas Operativos I 43
43
Problema lectores/escritores
En algunos sistemas computacionales se cuenta con dos
tipos de procesos
procesos lectores: leen datos
Verano 2005 22
ITESM - CEM Sistemas Operativos I CB00856-1
Sistemas Operativos I 45
45
Solución lectores/escritores
monitor LectoresEscritores procedure terminar_lectura;
var begin
lectores: integer; lectores:= lectores - 1;
alguien_escribe: boolean; if (lectores = 0 ) then
puede_leer, puede_escribir: condition; signal(puede_escribir);
end;
procedure comenzar_lectura;
begin
if ( (alguien_escribe) o en_cola(puede_escribir) ) then
wait(puede_leer)
lectores:= lectores + 1;
signal(puede_leer)
end;
Sistemas Operativos I 46
46
Verano 2005 23
ITESM - CEM Sistemas Operativos I CB00856-1
Solución lectores/escritores
procedure comenzar_escritura;
begin
if ( (lectores > 0) or (alguien_escribe) ) then
wait(puede_escribir)
wait
alguien_escribe:=true;
end;
procedure terminar_escritura;
begin
alguien_escribe:=false;
if ( en_cola(puede_leer)) then
signal(puede_leer)
signal
else
signal(puede_escribir)
signal
end I
Sistemas Operativos 47
47
Solución lectores/escritores
begin
lectores:=0;
alguien_escribe:= false;
end;;
end
Sistemas Operativos I 48
48
Verano 2005 24
ITESM - CEM Sistemas Operativos I CB00856-1
Sistemas Operativos I 49
49
Verano 2005 25