Your SlideShare is downloading. ×
0
Semaforos
Semaforos
Semaforos
Semaforos
Semaforos
Semaforos
Semaforos
Semaforos
Semaforos
Semaforos
Semaforos
Semaforos
Upcoming SlideShare
Loading in...5
×

Thanks for flagging this SlideShare!

Oops! An error has occurred.

×
Saving this for later? Get the SlideShare app to save on your phone or tablet. Read anywhere, anytime – even offline.
Text the download link to your phone
Standard text messaging rates apply

Semaforos

13,498

Published on

Ejemplos clasicos de Sistemas Operativos

Ejemplos clasicos de Sistemas Operativos

Published in: Education, Business, Real Estate
0 Comments
1 Like
Statistics
Notes
  • Be the first to comment

No Downloads
Views
Total Views
13,498
On Slideshare
0
From Embeds
0
Number of Embeds
6
Actions
Shares
0
Downloads
421
Comments
0
Likes
1
Embeds 0
No embeds

Report content
Flagged as inappropriate Flag as inappropriate
Flag as inappropriate

Select your reason for flagging this presentation as inappropriate.

Cancel
No notes for slide

Transcript

  • 1. Semaforos Sistema Operativos 1 Septiembre 4 del 2009
  • 2. Semaforos: <ul><li>Un semaforo es una variable especial protegida que es utilizada en hilos y procesos, y el metodo clasico para restringir a los recursos compartidos. </li></ul><ul><li>IS <---- Inicializacion </li></ul><ul><li>Down  ----- Inicia Exclusion Mutua </li></ul><ul><li>Up  --------- Finaliza Exclusion Mutua </li></ul><ul><li>Si la variable semaforo contiene valores (n>1) se le denomina Semaforo Contador si lo contiene 0 y 1 se le denomina Binario. </li></ul><ul><li>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”. </li></ul>Page Que Es Un Semaforo:
  • 3. Semaforos: <ul><li>Algoritmo Del Is: </li></ul><ul><li>Is(Semaforo s, m: entero){ </li></ul><ul><ul><ul><li>s<- N; </li></ul></ul></ul><ul><li>} </li></ul><ul><li>Algoritmo Del Down: </li></ul><ul><li>Down(Semaforo s){ </li></ul><ul><li>if(S:Semaforo){ </li></ul><ul><li>if(s>0) </li></ul><ul><li>s=s-1; </li></ul><ul><li>else </li></ul><ul><li>Bloquear_Proceso(); </li></ul><ul><li> } } </li></ul>Page Algoritmos De Los Semaforo:
  • 4. Semaforos : Exclusion Mutua <ul><li>Semaforos: </li></ul><ul><li>Exc_Mut </li></ul><ul><li>Inicializacion: </li></ul><ul><li>Is(exc_mut, 1); </li></ul>Page 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;
  • 5. Semaforos : Productor_Consumidor <ul><li>Una Lista de Memoria de N-Slots disponibles. </li></ul><ul><li>Necesita llevar cuenta de los item en lista. </li></ul><ul><li>Productor Produce Item al Ingresar a la lista. </li></ul><ul><li>Consumidor consume item de la lista. </li></ul><ul><li>Region Critica: </li></ul><ul><ul><li>Estructura_Circular(Bodega) </li></ul></ul><ul><ul><ul><li>Semaforos: </li></ul></ul></ul><ul><ul><li>Exc_Mut  ------- Manejo De La Cola Circular (Binario) </li></ul></ul><ul><ul><li>Lleno  ----------- Casillas Llenas </li></ul></ul><ul><ul><li>Vacio  ----------- Casillas Vacias </li></ul></ul><ul><ul><li>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. </li></ul></ul>Page Descripcion 0 1 2 3 4 5 6 7 Consumidor Productor -Push() -Pop()
  • 6. Semaforos : Productor-Consumidor <ul><li>Semaforos: </li></ul><ul><li>Exc_Mut, Lleno, Vacio; </li></ul><ul><li>Inicializacion: </li></ul><ul><li>IS(Vacio, 7); IS(Lleno,0); IS(Exc_Mut,1); </li></ul>Page 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;
  • 7. Semaforos : Lectores y Escritores <ul><li>Solamente puede haber un escritor, al mismo tiempo. </li></ul><ul><li>Si Hay un escritor no puede haber ningun lector. </li></ul><ul><li>Puede haber mas de un lector. </li></ul><ul><li>Ningun escritor, puede escribir hasta que el ultimo lector deje de utilizar la base de datos. </li></ul><ul><li>Region Critica: </li></ul><ul><li>Base De Datos </li></ul><ul><li>NL  Numero Lectores </li></ul><ul><li>Semaforos: </li></ul><ul><li>DB  --- Base De Datos </li></ul><ul><li>Exc_Mut <--- NL </li></ul>Page Descripcion E1 E2 E3 L1 L2 L3
  • 8. Semaforos : Lectores y Escritores <ul><li>Semaforos: </li></ul><ul><li>DB, Exc_Mut </li></ul><ul><li>Inicializacion: </li></ul><ul><li>IS(Exc_Mut, 1); </li></ul><ul><li>IS(DB,1); </li></ul><ul><li>NL=0; </li></ul>Page 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;
  • 9. Semaforos : Filosofos Comensales <ul><li>Problemas Que Pueden Surgir Con Mala </li></ul><ul><li>Sincronizacion: </li></ul><ul><li>DeadLock: </li></ul><ul><li>Dos o mas procesos estan esperando por una condicion que solo puede ser causada por una hebra que tambien esta esperando. </li></ul><ul><li>Starvation o Espera Indefinida: </li></ul><ul><li>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. </li></ul><ul><li>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. </li></ul>Page
  • 10. Semaforos : Filosofos Comensales <ul><li>Los Filosofos Piensan </li></ul><ul><li>Los Filosofos Comen </li></ul><ul><ul><li>Toman 2 tenedores </li></ul></ul><ul><li>Los Filosofos Duermen </li></ul><ul><li>Variables: </li></ul><ul><li>Status [1..N]  - P (pensando), H (hambriento) </li></ul><ul><ul><ul><ul><ul><li>C(comiendo) </li></ul></ul></ul></ul></ul><ul><li>Semaforos: </li></ul><ul><li>Exc_Mut  -- Para Proteger a Status </li></ul><ul><li>Sem[1..N]  -- Control De Filosofos </li></ul>Page Descripcion
  • 11. Semaforos : Filosofos Comensales <ul><li>Inicializacion: </li></ul><ul><li>for i=1 to N </li></ul><ul><li> Is(sema[i],0); </li></ul><ul><li>Is(exc_mut,1); </li></ul><ul><li> for i=1 to N </li></ul><ul><li> Status=P; </li></ul><ul><li>Inicializacion: </li></ul><ul><li>IS(Exc_Mut, 1); </li></ul><ul><li>IS(DB,1); </li></ul><ul><li>NL=0; </li></ul>Page 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]); } }
  • 12. Page 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

×