semaforos

12
Semaforos Sistema Operativos 1 Septiembre 4 del 2009

Upload: universidad-de-san-carlos-de-guatemala

Post on 18-Jun-2015

13.462 views

Category:

Education


3 download

DESCRIPTION

Ejemplos clasicos de Sistemas Operativos

TRANSCRIPT

Page 1: Semaforos

Semaforos

Sistema Operativos 1

Septiembre 4 del 2009

Page 2: Semaforos

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:

Page 3: Semaforos

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:

Page 4: Semaforos

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;

Page 5: Semaforos

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()

Page 6: Semaforos

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;

Page 7: Semaforos

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

Page 8: Semaforos

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;

Page 9: Semaforos

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.

Page 10: Semaforos

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

Page 11: Semaforos

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]);}}

Page 12: Semaforos

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