Documentos de Académico
Documentos de Profesional
Documentos de Cultura
Semafor Os
Semafor Os
Sistemas Operativos I
Cb00856 1
Modulo 5.
Semforos y monitores
Soluciones al problema de exclusin mutua
Verano 2006
Sistemas Operativos I
Verano 2005
ITESM - CEM
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
Primitivas de la solucin
Dos primitivas de comunicacin son usadas entre los procesos que bloquean el CPU.
/* 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.
Verano 2005
ITESM - CEM
*/ */ */
/* decrementa conta. elementos alma */ /* estaba lleno el almacen (buffer) */ /* consume el elemento */
N = count
Problemas de la solucin
Almacen vaco
Productor
Nm = N
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
Verano 2005
ITESM - CEM
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
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
Tipos de semforos
Contadores Sincronizacin
Sistemas Operativos I
Binarios
13 13
14 14
Verano 2005
ITESM - CEM
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
17 17
/* ciclo infinito /* genera el siguiente elemento / * entra en la seccin crtica /* colocar elemento en el almacen /* sale de la seccin crtica
*/ */ */ */ */
Sistemas Operativos I
18 18
Verano 2005
ITESM - CEM
/* ciclo infinito /* entra en la seccin crtica /* toma un elemento del almacen /* sale de la seccin crtica /* hace algo con el elemento
*/ */ */ */ */
19 19
20 20
Verano 2005
10
ITESM - CEM
V(&lleno) envio seal que proceso esperaba produce_elem(&elemento) proceso despierta P(&ocupado) ocupado=0 retira_elem(...
Sistemas Operativos I
21 21
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
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.
Sistemas Operativos I
24 24
Verano 2005
12
ITESM - CEM
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
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
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
31 31
Sistemas Operativos I
32 32
Verano 2005
16
ITESM - CEM
Sistemas Operativos I
33 33
34 34
Verano 2005
17
ITESM - CEM
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
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
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
39 39
Sistemas Operativos I
40 40
Verano 2005
20
ITESM - CEM
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
Sistemas Operativos I
42 42
Verano 2005
21
ITESM - CEM
P1
ProdCons.producir ProdCons.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
Verano 2005
22
ITESM - CEM
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
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
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
49 49
Verano 2005
25