Está en la página 1de 25

ITESM - CEM

Sistemas Operativos I CB00856-1

Sistemas Operativos I
Cb00856 1

Modulo 5.

Semforos y monitores
Soluciones al problema de exclusin mutua

Prof. Erika MATA SANCHEZ


emata@itesm.mx http://homepage.cem.itesm.mx/emata

Verano 2006

El problema del productor/consumidor

Sistemas Operativos I

Verano 2005

ITESM - CEM

Sistemas Operativos I CB00856-1

El problema del productor/consumidor


Dos procesos comparten un almacn (buffer) de tamao fijo.
productor: coloca informacin en el almacn (buffer) consumidor: obtiene informacin del almacn

Problema:
productor desea colocar algo en el almacn lleno consumidor desea obtener en el almacn vaci

Solucin
irse a dormir cuando el almacn este lleno (productor) o cuando se encuentre vaco (consumidor)
Sistemas Operativos I 3

Planteamiento de la solucin
Dos variables compartidas por los procesos: N: nmero elementos en el almacn (buffer) Nm: nmero mximo elementos (tamao buffer) Actividades productor:
verificar si N= Nm si es verdad => a dormir si no es verdad => aadir un elemento

Actividades consumidor:
verificar si N = 0 si es verdad => a dormir si no es verdad => quitar un elemento
Sistemas Operativos I 4

Verano 2005

ITESM - CEM

Sistemas Operativos I CB00856-1

Primitivas de la solucin
Dos primitivas de comunicacin son usadas entre los procesos que bloquean el CPU.

Primitiva dormir (sleep)


provoca el bloqueo de quien hizo la llamada ser suspendido hasta que alguien lo despierte

Primitiva despertar (wakeup)


despierta al proceso que invoc primitiva sleep tiene un parmetro: el proceso a despertar
Sistemas Operativos I 5

Solucin problema productor/consumidor


#define Nm 100 int N = 0; void productor( ) { while (TRUE) { produce_elem(&elemento); produce_elem(&elemento); Nm) if (N == Nm) sleep(); sleep(); intro_elem(elemento); intro_elem(elemento); N = N+1 if (N == 1) wakeup(consumidor); wakeup(consumidor); }
Sistemas Operativos I

/* Nmero de espacios en el almacen (buffer) -- N */ /* Nmero de elementos en el almacen (buffer) --- cont*/

/* ciclo infinito

*/ */ */ */ */ */

/* genera el siguiente elemento /* si el almacen (buffer) esta lleno /* entonces se duerme /* colocar elemento en almacen /* incrementa N elementos alma.

/* estaba vaco el almacen (buffer) */

Verano 2005

ITESM - CEM

Sistemas Operativos I CB00856-1

Solucin problema productor/consumidor


void consumidor( ) { while (TRUE) { if (N == 0) sleep(); sleep(); retira_elem(&elemento); retira_elem(&elemento); N = N - 1; if (N == Nm-1) Nmwakeup(productor); wakeup(productor); consume_elem(elemento); consume_elem(elemento); } }
Sistemas Operativos I

/* ciclo infinito /* entonces se duerme /* retira elemento del almacen

*/ */ */

/* si el almacen (buffer) esta vaco */

/* decrementa conta. elementos alma */ /* estaba lleno el almacen (buffer) */ /* consume el elemento */

N = count

Problemas de la solucin
Almacen vaco
Productor

Nm = N

Consumidor Consumidor lee count (count = 0) if (cont == 0) => verdad

Prod. introduce elemento en almacen Incrementa cont if (cont == 1) => verdad wakeup(consumidor); /* cons no esta dormido, seal se pierde */ sleep() producira elementos hasta que se llene el almacen y se ira a dormir sleep()
Sistemas Operativos I

AMBOS DORMIRAN POR SIEMPRE

Verano 2005

ITESM - CEM

Sistemas Operativos I CB00856-1

Posible solucin
Aadir un bit de espera de despertar Sin embargo si se tienen dos o ms procesos un solo bit no es suficiente.

Sistemas Operativos I

Los semforos
Definidos por Dijkstra en 1965
Dijkstra, E. W., Cooperating sequential processes, `Programming Languages', Genuys, F. (ed.), Academic Press, 1965

Variable protegida cuyo valor solo puede ser accesado y alterado por dos operaciones: P(S) y V(S) Nombres provienen del holands passeren (probar) y vrijgeven (incrementar).
Sistemas Operativos I
10 10

Verano 2005

ITESM - CEM

Sistemas Operativos I CB00856-1

Las operaciones de semforos

P(S)
if ( S > 0 ) then then S:=S-1 else esperar por S

V(S)
if (alguien espera por S) deja pasar al proceso else S:=S+1

Sistemas Operativos I

11 11

Caractersticas principales
Desbloqueando procesos
El semforo informa a los procesos que se encuentran bloqueados. El administrador de procesos que elige quien pasa a ejecucin

Atomicidad
Se garantiza que al iniciar una operacin con un semforo, ningn otro proceso puede tener acceso al semforo hasta que la operacin termine o se bloquee. En ese tiempo ningn otro proceso puede simultneamente modificar el mismo valor de semforo
Sistemas Operativos I
12 12

Verano 2005

ITESM - CEM

Sistemas Operativos I CB00856-1

Tipos de semforos

Contadores Sincronizacin
Sistemas Operativos I

Binarios

13 13

Semforos generales o contadores


tiles cuando un recurso ser asignado, tomndolo de un conjunto de recursos idnticos Semforo es inicializado con el nmero de recursos existentes:
P(S) decrementa S en 1; indicando que un recurso ha sido suprimido del conjunto. Si S = 0 no hay ms recursos y el proceso se bloquea V(S) incrementa S en 1; indicando que un recurso ha sido regresado al conjunto. Si un proceso esperaba por un recurso, ste se despierta.
Sistemas Operativos I

14 14

Verano 2005

ITESM - CEM

Sistemas Operativos I CB00856-1

Semforos binarios
Slo pueden tomar dos valores: 0 o 1 Generalmente se inicializan con un valor de 1. Son usados por dos o ms procesos para garantizar que slo uno puede entrar en seccin crtica. Antes de entrar a seccin crtica un proceso ejecuta un P(S) y un V(S) antes de salir de ella Estructura de cada proceso:
while(1) while(1) P(entrar) <Secci Cr <Seccin Crtica> V(salir) V(salir) do
Sistemas Operativos I
15 15

Semforos sincrona
Solucin varios problemas sincronizacin. 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 despus de que S1 haya terminado.

Solucin:

Semforo sncrono (inicializado en 0). P1: ------------P2: --------------------------------------S1 P(sincro) V(sincro) S2 ------------------------------------------------16 16

Sistemas Operativos I

Verano 2005

ITESM - CEM

Sistemas Operativos I CB00856-1

Solucin prod/cons semforos (1)


#define N 100 int cont = 0;

/* Nmero de espacios en el almacen (buffer) */ * Nmero de elementos en el almacen (buffer) */

typedef int semaphore

semaphore ocupado = 1; semaphore vacio = N; semaphore lleno = 0;

Sistemas Operativos I

17 17

Solucin prod/cons semforos (2)


void productor( ) { while (TRUE) { produce_elem(&elemento); produce_elem(&elemento); P(&vacio); ) P( P(&ocupado); ) P( intro_elem(elemento); intro_elem(elemento); V(&ocupado); ) V( V(&lleno); ) V( } }

/* ciclo infinito /* genera el siguiente elemento / * entra en la seccin crtica /* colocar elemento en el almacen /* sale de la seccin crtica

*/ */ */ */ */

/* decrementa contador espacios vacos */

/* incrementa cont entradas ocupadas */

Sistemas Operativos I

18 18

Verano 2005

ITESM - CEM

Sistemas Operativos I CB00856-1

Solucin prod/cons semforos (3)


void consumidor( ) { while (TRUE) { P(&lleno); ) P( P(&ocupado); ) P( retira_elem(elemento); retira_elem(elemento); V(&ocupado); ) V( V(&vacio); ) V( haz_algo(elemento); } }
Sistemas Operativos I

/* ciclo infinito /* entra en la seccin crtica /* toma un elemento del almacen /* sale de la seccin crtica /* hace algo con el elemento

*/ */ */ */ */

/* decrementa cont. entradas ocupadas */

/* incrementa contador entradas vacas */

19 19

Ejemplo ejecucin (1)


PRODUCTOR produce_elem(&elemento) P(&vacio) vacio=99 P(&ocupado) ocupado= 0 intro_elem(elemento) V(&ocupado) ocupado=1 CONSUMIDOR

Temina quantum, cambio CPU

Temina quantum, cambio CPU


Sistemas Operativos I

P(&lleno) proceso bloqueado

20 20

Verano 2005

10

ITESM - CEM

Sistemas Operativos I CB00856-1

Ejemplo ejecucin (2)


PRODUCTOR CONSUMIDOR bloqueado

V(&lleno) envio seal que proceso esperaba produce_elem(&elemento) proceso despierta P(&ocupado) ocupado=0 retira_elem(...

Sistemas Operativos I

21 21

Ejemplo ejecucin (3)


PRODUCTOR P(&vacio) vacio=98 P(&ocupado) proceso espera liberacin de la variable ocupado CONSUMIDOR

V(&ocupado) envio seal a quien esperaba ocupado V(&vacio) vacio=99 haz_algo(elemento) proceso despierta intro_elem(elemento) V(&ocupado) Sistemas Operativos I ocupado=1

22 22

Verano 2005

11

ITESM - CEM

Sistemas Operativos I CB00856-1

Problemas clsicos de exclusin mutua


El problema de la cena de filsofos El problema del Barbero dormiln El problema de los fumadores El problema de la panadera El problema de los lectores/escritores
Sistemas Operativos I
23 23

La cena de filsofos
Cinco filsofos se sientan en una mesa redonda. Cada uno tiene un plato de spaghetti y un tenedor frente a l.

fil Cinco filsofos, cinco platos, cinco tenedores


El spaghetti es tan escurridizo que un filsofo 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 filsofos
La vida de un filsofo consta de periodos alternados de comer y pensar. Cuando un filsofo siente hambre, intenta tomar el tenedor de la izquierda y si lo consigue, lo intenta con el de la derecha. Si logra asir dos tenedores toma unos bocados y despus deja los cubiertos y sigue pensando.

Sistemas Operativos I

25 25

La cena de filsofos
El problema consiste en desarrollar un algoritmo que evite la hambruna y el deadlock. Deadlock Ocurre cuando los 5 filosofos tienen un tenedor y nadie puede tomar el segundo
F1 espera el tenedor que ocupa el F2 quien espera por el tenedor del F3 y as sucesivamente. (Cadena circular de bloqueo)

Sistemas Operativos I

26 26

Verano 2005

13

ITESM - CEM

Sistemas Operativos I CB00856-1

La cena de filsofos
Hambruna - si un filosofo no puede tomar 2 tenedores, puede ocurrir independientemente del deadlock. Analogia de tenedores con recursos -- CONCURRENCIA BLOQUEO - Tcnica comn para asegurar que solo un recurso sea utilizado a la vez: Cuando un programa se interesa por un recurso bloqueado por alguien mas, ste espera a que se desbloquee Cuando muchos recursos se involucran puede ocurrir un Deadlock.

Sistemas Operativos I

27 27

La cena de filsofos
Ejemplo: un programa requiere procesar dos archivos. Cuando dos programas bloquean uno archivo cada uno, ambos esperan a que el otro desbloque el segundo archivo

NUNCA SUCEDE

Sistemas Operativos I

28 28

Verano 2005

14

ITESM - CEM

Sistemas Operativos I CB00856-1

La cena de filsofos
Una solucin:
Ordenar los tenedores y decir a los filsofos de tomarlos en orden creciente Filsofos : P1, P2, P3, P4 y P5 Tenedores: T1, T2, T3, T4 y T5. P1 toma T1, si antes le permiten tomar el segundo tenedor T2. P2 a P4 actan igual, tomando Tx antes de Tx+1. Pero P5 toma T1 antes de T5. Cambia conducta normal: P5 genera una asimetra que

previene un deadlock.

Sistemas Operativos I

29 29

La cena de filsofos
Una solucin:
Hambruna se previene en funcin del mtodo MUTEX utilizado: busy waiting (ocupado, en espera) - causan Colas asegurando acceso equitativo al tenedor por medio del filosofo adyacente una solucion Solucin 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

Problema Barbero Dormiln


Una barbera tiene una sala de espera con n sillas, y otra sala donde se encuentra el silln de afeitado. Si no hay clientes a los que servir, el barbero se echa a dormir en el silln. Si entra un cliente en la barbera y todas las sillas estn ocupadas, el cliente se va. Si el barbero est ocupado afeitando, el cliente se sienta en una de las sillas disponibles. Si el barbero est dormido, el cliente despierta al barbero. Escribir un programa que coordine al barbero y los clientes mediante semforos.
Sistemas Operativos I

31 31

Problema Barbero Dormiln


Problema clsico de IPC (Comunicacion interprocesos) y sincronizacin entre mltiples procesos de SO PROBLEMA: Coordinacin si crear condiciones de competencia.

Sistemas Operativos I

32 32

Verano 2005

16

ITESM - CEM

Sistemas Operativos I CB00856-1

Problema Barbero Dormiln


Solucion comun: 3 semaforos 1. Espera clientes 2. Barbero (si esta desocupado) 3. MUTEX Solo involucra al barbero: problem. single sleeping barber problem.

Sistemas Operativos I

33 33

Problema de los fumadores


Considere un sistema con tres procesos fumadores y un proceso agente. Cada fumador esta continuamente enrrollando y fumando cigarrillos. Sin embargo, para enrrollar y fumar un cigarrillo, el fumador necesita tres ingredientes: tabaco, papel, y fsforos. Uno de los procesos fumadores tiene papel, otro tiene el tabaco y el tercero los fsforos. El agente tiene una cantidad infinita de los tres materiales. El agente coloca dos de los ingredientes sobre la mesa. El fumador que tiene el ingrediente restante enrrolla un cigarrillo y se lo fuma, avisando al agente cuando termina. Entonces, el agente coloca dos de los tres ingredientes y se repite el ciclo.

Sincronizar al agente y a los fumadores.


Sistemas Operativos I

34 34

Verano 2005

17

ITESM - CEM

Sistemas Operativos I CB00856-1

Problema Panadera de Lamport


Una panadera tiene una variedad de panes y pasteles vendidos por n vendedores. Cada uno de los cuales toma un nmero al entrar. El cliente espera hasta or su nmero. Cuando el vendedor se desocupa, llama al siguiente nmero. Escriba un procedimiento para los vendedores y otro para los clientes.

Sistemas Operativos I

35 35

Los monitores
Otra opcin para la sincronizacin 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 construccin concurrente que contiene los datos y procedimientos necesarios para la asignacin de un recurso compartido. Para lograr la asignacin de un recurso una funcin 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 implementacin monitor verifica si no hay otro proceso dentro del monitor:
si: proceso efectu la llamada es suspendido no: el que hizo la llamada puede entrar
Estructura Datos Proc. 1 Proc. 2

E1 E2 E3

P1 P2 P3
entradas

:
procedimientos
Sistemas Operativos I

:
En

Proc. n

37 37

Operaciones sincrona en procesos


Para sincronizar procesos se usan variables de tipo condicin y dos operaciones:
1. wait()
proceso descubre que no puede continuar (almacen lleno) ejecuta wait en alguna variable de condicin proceso se bloquea y permite que otro proceso entre al monitor

2. signal
proceso que entra puede despertar a otro con una instruccin signal sobre la variable de condicin que el otro proceso espera
Sistemas Operativos I
38 38

Verano 2005

19

ITESM - CEM

Sistemas Operativos I CB00856-1

Comentarios variables condicin


Las variables de condicin NO son contadores. No se acumulan seales para su uso posterior (como los semforos) Si una variable de condicin queda sealada sin que nadie la espere, la seal se pierde. La instruccin WAIT debe aparecer antes de SIGNAL
regla que hace ms sencilla la implementacin

Sistemas Operativos I

39 39

Monitores y problema prod/cons


Exclusin mutua es automtica,
el monitor garantiza que solo el productor o el consumidor estaran ejecutandose

Si el almacen esta totalmente ocupado, el productor realizar una operacin WAIT


se encontrar bloqueado hasta que consumidor ejecute un SIGNAL

Si el almacen esta totalmente vacio el consumidor realizar una operacin WAIT


se encontrar bloqueado hasta que productor ejecute un SIGNAL

Sistemas Operativos I

40 40

Verano 2005

20

ITESM - CEM

Sistemas Operativos I CB00856-1

Solucin prod/cons con monitores


monitor ProdCons condition lleno, vacio; integer cont, N; procedure producir; begin if (cont = N) then wait(lleno); introducir_elemento; cont := cont +1; if (cont = 1) then signal(vacio); end;
Sistemas Operativos I

procedure retirar; begin if (cont = 0) then wait(vacio) retirar_elemento; cont := cont-1 if (cont = N-1) then signal(lleno); end; cont := 0; N=100; end monitor;
41 41

Llamando entradas monitor


procedure productor; begin while true do begin producir_elemento; ProdCons.producir; end end; procedure consumidor; begin while true do begin ProdCons.retirar; consumir_elemento; end end;

Sistemas Operativos I

42 42

Verano 2005

21

ITESM - CEM

Sistemas Operativos I CB00856-1

Esquema solucin prod/cons con monitores


monitor ProdCons
condition lleno, vacio; integer cont, N;

P1
ProdCons.producir ProdCons.retirar

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 procesos escritores: escriben datos Ejemplo de este tipo de sistema: reservacin area. Muchos lectores pueden acceder la base de datos a la vez
varios lectores no cambian el contenido de la base de datos

Un escritor debe tener acceso exclusivo


un escrito puede modificar los datos
Sistemas Operativos I
44 44

Verano 2005

22

ITESM - CEM

Sistemas Operativos I CB00856-1

Planteamiento solucin lec/esc


Si el escritor esta activo
ningn lector o escritor puede estar activo

Esta exclusin necesita realizarse solo a nivel registro (i.e. no toda la base de datos)
no es necesario garantizar a un escritor el acceso exclusivo a la base de datos completa

Problema propuesto por Courtois, Heymans y Parnas:


Courtois, P.J., Heymans, F., and Parnas, D.L. Concurrent Control with Readers and Writers, CACM, Vol. 14, No. 10, October 1971, pp.667-668

Sistemas Operativos I

45 45

Solucin lectores/escritores
monitor LectoresEscritores var lectores: integer; alguien_escribe: boolean; puede_leer, puede_escribir: condition; procedure terminar_lectura; begin lectores:= lectores - 1; if (lectores = 0 ) then 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

Solucin 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 Sistemas Operativos I

47 47

Solucin 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

Ultimo comentario sobre solucin


El monitor lectores/escritores puede usarse para controlar el acceso a
una base de datos completa, un subconjutno de la base consistente de varios registros sobre un simple registro

Sistemas Operativos I

49 49

Verano 2005

25

También podría gustarte