semaforos
DESCRIPTION
Ejemplos clasicos de Sistemas OperativosTRANSCRIPT
Semaforos
Sistema Operativos 1
Septiembre 4 del 2009
Here comes your footer Page 2
Semaforos:
Un semaforo es una variable especial protegida que es utilizada en hilos y procesos, y el metodo clasico para restringir a los recursos compartidos.
IS <---- Inicializacion Down ----- Inicia Exclusion Mutua Up --------- Finaliza Exclusion Mutua Si la variable semaforo contiene valores (n>1) se le denomina Semaforo
Contador si lo contiene 0 y 1 se le denomina Binario.
La operación “Down” consistirá en ir decrementando el numero de recursos que posee el semáforo, cuando este contador llegue a 0, entonces el proceso quedara bloqueado en espera de que dicho contador sea liberado por medio de un “Up”.
Que Es Un Semaforo:
Here comes your footer Page 3
Semaforos:
Algoritmo Del Is:
Is(Semaforo s, m: entero){s<- N;
}
Algoritmo Del Down:
Down(Semaforo s){
if(S:Semaforo){
if(s>0)
s=s-1;
else
Bloquear_Proceso();
}}
Algoritmos De Los Semaforo:
Here comes your footer Page 4
Semaforos : Exclusion Mutua
Semaforos:
Exc_Mut
Inicializacion:
Is(exc_mut, 1);
Ejemplo 1:
Proceso 1 Proceso 2
Repeat Hace_Cosas(); Down(Exc_Mut); Region_Critica(); Up(Exc_Mut); Hace_Mas_Cosas();Fin;
Repeat Hace_Algo(); Down(Exc_Mut); Region_Critica(); Up(Exc_Mut); Hace_Mas_de_algo();Fin;
Here comes your footer Page 5
Semaforos : Productor_Consumidor
Una Lista de Memoria de N-Slots disponibles.
Necesita llevar cuenta de los item en lista. Productor Produce Item al Ingresar a la lista. Consumidor consume item de la lista. Region Critica:
- Estructura_Circular(Bodega)
Semaforos:- Exc_Mut ------- Manejo De La Cola Circular (Binario)
- Lleno ----------- Casillas Llenas
- Vacio ----------- Casillas Vacias
El problema está en lograr que cuando el consumidor trata de extraer un ítem cuando la lista está vacía, el consumidor se bloquee hasta que el productor deposite un ítem. Del mismo modo, cuando el productor intenta depositar un ítem cuando el buffer ya tiene el máximo de N ítemes, el productor se debe bloquear hasta que el consumidor extraiga un ítem.
Descripcion
0
12
3
4
5 6
7
Consumidor
Productor
-Push()-Pop()
Here comes your footer Page 6
Semaforos : Productor-Consumidor
Semaforos:
Exc_Mut, Lleno, Vacio;
Inicializacion:
IS(Vacio, 7); IS(Lleno,0); IS(Exc_Mut,1);
Ejemplo 2:
Productor Consumidor
Repeat Hace_Cosas(); x=producir(); down(vacio); down(Exc_Mut); push(x); up(Exc_Mut);Up(lleno); Hace_mas_cosas();Until_Fin;
Repeat Hace_Algo(); down(Lleno); down(Exc_Mut); Y=pop(); up(Exc_Mut);Up(vacio); Hace_mas_de_algo();Until_Fin;
Here comes your footer Page 7
Semaforos : Lectores y Escritores
Solamente puede haber un escritor, al mismo tiempo. Si Hay un escritor no puede haber ningun lector. Puede haber mas de un lector. Ningun escritor, puede escribir hasta que el ultimo lector deje de utilizar
la base de datos.
Region Critica: Base De Datos NL Numero Lectores
Semaforos:
DB --- Base De Datos
Exc_Mut <--- NL
Descripcion
E1
E2
E3
L1
L2
L3
Here comes your footer Page 8
Semaforos : Lectores y Escritores
Semaforos:
DB, Exc_Mut
Inicializacion:
IS(Exc_Mut, 1);
IS(DB,1);
NL=0;
Ejemplo 2: Escritor Lector
Repeat Hace_algo(); Escribe(); Up(DB); Hace_mas_algo();Until_fin;
Repeat
Down(Exc_Mut); NL=NL+1; if(NL==1) then down(DB); Up(Exc_Mut);
Leer();
Down(Exc_mut); NL=NL-1; If(NL==0) then UP(DB); UP(Exc_Mut);
Hace_Mas_Alguna_cosa();Until_Fin;
Here comes your footer Page 9
Semaforos : Filosofos Comensales
Problemas Que Pueden Surgir Con Mala
Sincronizacion:
DeadLock:
Dos o mas procesos estan esperando por una condicion que solo puede ser causada por una hebra que tambien esta esperando.
Starvation o Espera Indefinida:
Un proceso en la lista de espera de un semaforo de la cual estan entrando y saliendo continuamente hebras y listas de espera de semaforo.
Cinco filosofos se sientan alrededor de una mesa y pasan su vida cenando y pensando. Cada filósofo tiene un plato de fideos y un tenedor a la izquierda de su plato. Para comer los fideos son necesarios dos tenedores y cada filósofo sólo puede tomar los que están a su izquierda y derecha. Si cualquier filósofo coge un tenedor y el otro está ocupado, se quedará esperando, con el tenedor en la mano, hasta que pueda coger el otro tenedor, para luego empezar a comer.
Here comes your footer Page 10
Semaforos : Filosofos Comensales
Los Filosofos Piensan Los Filosofos Comen
- Toman 2 tenedores
Los Filosofos Duermen
Variables: Status [1..N] - P (pensando), H (hambriento)
C(comiendo)
Semaforos:
Exc_Mut -- Para Proteger a Status Sem[1..N] -- Control De Filosofos
Descripcion
Here comes your footer Page 11
Semaforos : Filosofos Comensales
Inicializacion:
for i=1 to N
Is(sema[i],0);
Is(exc_mut,1);
for i=1 to N
Status=P;
Inicializacion:
IS(Exc_Mut, 1);
IS(DB,1);
NL=0;
Ejemplo 3:Filósofos Comensales:
Filosofos(Integer i){ Pensar(); Tomar_Tenedores(i); Comer(); Deja_Tenedores(i); Dormir();}Dejar_Tenedores(Integer i){Down(Exc_Mut); Status[i]=‘P’; test(Der(i)); test(Izq(i));Up(Exc_Mut);}
Tomar_Tenedores(Integer i){ Down(Exc_Mut); Status[i]=‘H’; Test=‘H’; Up(Exc_Mut); Down(Sema[i]);}
Test(Integer i){If(status[izq[i]]<>’C’ and status[Der(i)]<>’C’ and Status[i]==‘H’){ Status[i]=‘C’; Up(Sem[i]);}}
Here comes your footer Page 12
Bibliografia:http://elcopypaste.wordpress.com/2008/09/19/semaforos/http://trevinca.ei.uvigo.es/~formella/doc/cd05/node77.html
http://es.wikipedia.org/wiki/Sem%C3%A1foro_(programaci%C3%B3n) http://html.rincondelvago.com/semaforos.html
http://www.dcc.uchile.cl/~jpiquer/Docencia/SO/aps/node9.html
Tux