1.SEMÁFOROS 2.PROBLEMAS CLÁSICOS DE SINCRONIZACIÓN 3. MONITORES GRUPO  VI <ul><li>INTEGRANTES: </li></ul><ul><ul><li>Krusk...
1. SEMÁFORO <ul><li>Herramienta de sincronización que no requiere de espera   ocupada. </li></ul><ul><li>Señala si un recu...
1. SEMÁFORO – IMPLEMENTACIÓN <ul><li>Defina un semáforo como un registro </li></ul><ul><li>typedef struct { </li></ul><ul>...
1. SEMÁFORO - IMPLEMENTACIÓN <ul><li>wait(S): </li></ul><ul><li>S.value--; </li></ul><ul><li>if (S.value < 0) { </li></ul>...
1. SEMÁFORO -  INTERBLOQUEOS E INANICIÓN <ul><li>Semáforo de conteo  – valor entero con un rango sin  restricciones dentro...
1. SEMÁFORO -  INTERBLOQUEOS DE INACICIÓN <ul><li>Interbloqueo(Deadlock) – dos ó más procesos están  esperando indefinidam...
2. PROBLEMAS CLÁSICOS DE SINCRONIZACIÓN <ul><li>2.1. Problema del Buffer Limitado </li></ul><ul><li>2.2. Problema de los L...
2. PROBLEMAS CLÁSICOS DE SINCRONIZACIÓN  2.1.  Problema  del Buffer  Limitado <ul><li>Se utiliza para ilustrar la potencia...
2. PROBLEMAS CLÁSICOS DE SINCRONIZACIÓN  2.1.  Problema  del Buffer  Limitado-Proceso  Consumidor <ul><li>do { </li></ul><...
2. PROBLEMAS CLÁSICOS DE SINCRONIZACIÓN  2.2. Problema de los Lectores - Escritores <ul><li>Esta estructura de utiliza par...
2. PROBLEMAS CLÁSICOS DE SINCRONIZACIÓN  2.3 Problema de los Filósofos Comensales <ul><li>Es un ejemplo de amplia clase  d...
2. PROBLEMAS CLÁSICOS DE SINCRONIZACIÓN  2.3 Problema de los Filósofos Comensales <ul><li>Filósofo  i: </li></ul><ul><ul><...
3. MONITORES <ul><li>3.1  Utilización . </li></ul><ul><li>3.2  Solución  al  problema  de la  cena  de los  filósofos   us...
3.MONITORES <ul><li>Son una herramienta de sincronizacion mas estructurada que un semáforo encapsula variables compartidas...
3. MONITORES <ul><li>Permiten a un proceso esperar dentro del monitor, una variable de  condición debe de ser declarada, c...
3.MONITORES 3.1  Utilización <ul><li>Construcción de sincronización de alto-nivel que permite compartir con </li></ul><ul>...
3.MONITORES 3.1  Utilización Visión Esquemática de un Monitor Monitor con Variables de Condición
3.MONITORES 3.2 Solución al problema de la cena de los  filósofos usando monitores.  <ul><li>monitor dp </li></ul><ul><li>...
3.MONITORES 3.3  Implementación  de un monitor  usando   semáforos . <ul><li>Variables </li></ul><ul><li>semaphore mutex; ...
3.MONITORES 3.3  Implementación  de un monitor  usando   semáforos .  <ul><li>Por cada variable de condición  x, tenemos: ...
Upcoming SlideShare
Loading in …5
×

Sincronizacion de procesos

4,368 views

Published on

Published in: Education
0 Comments
0 Likes
Statistics
Notes
  • Be the first to comment

  • Be the first to like this

No Downloads
Views
Total views
4,368
On SlideShare
0
From Embeds
0
Number of Embeds
6
Actions
Shares
0
Downloads
130
Comments
0
Likes
0
Embeds 0
No embeds

No notes for slide

Sincronizacion de procesos

  1. 1. 1.SEMÁFOROS 2.PROBLEMAS CLÁSICOS DE SINCRONIZACIÓN 3. MONITORES GRUPO VI <ul><li>INTEGRANTES: </li></ul><ul><ul><li>Kruskaya Salazar </li></ul></ul><ul><ul><li>Yadira Torres </li></ul></ul><ul><ul><li>Santiago Plascencia </li></ul></ul>SINCRONIZACIÓN DE PROCESOS
  2. 2. 1. SEMÁFORO <ul><li>Herramienta de sincronización que no requiere de espera ocupada. </li></ul><ul><li>Señala si un recurso está libre y se puede utilizar el proceso. </li></ul><ul><li>Semáforo S – variable entera. </li></ul><ul><li>Puede solo ser accesada vía dos indivisibles (atómicas) operaciones wait(); y signal();. </li></ul><ul><li>Wait, activa el proceso cuando encuentra codigo de condición ocupado </li></ul><ul><li>wait (S): </li></ul><ul><ul><li>// P: proberen = probar </li></ul></ul><ul><li>while S≤ 0 ; // no-op; </li></ul><ul><li>S--; </li></ul><ul><li>Signal, queda activado cuando un proceso sale de la región crítica y el código de condición está como libre. </li></ul><ul><li>signal (S): </li></ul><ul><ul><li>// V:verhogen = incrementar </li></ul></ul><ul><li>S++; </li></ul>
  3. 3. 1. SEMÁFORO – IMPLEMENTACIÓN <ul><li>Defina un semáforo como un registro </li></ul><ul><li>typedef struct { </li></ul><ul><li>int value; </li></ul><ul><li>struct process *L; </li></ul><ul><li>} semaphore; </li></ul><ul><li>Suponga dos operaciones simples: </li></ul><ul><ul><li>block :suspende el proceso que lo invoco. </li></ul></ul><ul><ul><li>wakeup( P) : reanuda la ejecución de un proceso P bloqueado </li></ul></ul>
  4. 4. 1. SEMÁFORO - IMPLEMENTACIÓN <ul><li>wait(S): </li></ul><ul><li>S.value--; </li></ul><ul><li>if (S.value < 0) { </li></ul><ul><li>agregar este proceso a la lista S.L; </li></ul><ul><li>block; </li></ul><ul><li>} </li></ul><ul><li>signal(S): </li></ul><ul><li>S.value++; </li></ul><ul><li>if (S.value <= 0) { </li></ul><ul><li>remover un proceso P de la lista S.L; </li></ul><ul><li>wakeup(P); </li></ul><ul><li>} </li></ul>Definamos las operaciones con semáforos como:
  5. 5. 1. SEMÁFORO - INTERBLOQUEOS E INANICIÓN <ul><li>Semáforo de conteo – valor entero con un rango sin restricciones dentro de un dominio. </li></ul><ul><li>Semáforo binario – se los conoce también como cerrojos mútex. </li></ul><ul><li>valor entero con un rango solo entre 0 y 1; puede ser el más simple de implementar. </li></ul><ul><li>Puede implementarse un semáforo de conteo S como un semáforo binario. </li></ul><ul><li>Dos o mas procesos están esperando indefidinamente a que se produzca otro proceso que solo puede ser consecuencia del resultado de otro proceso que esta en estado de espera, debido a la ejecución de la operación signal(), a esto se le atribuye que los procesos se han interbloqueado. </li></ul>
  6. 6. 1. SEMÁFORO - INTERBLOQUEOS DE INACICIÓN <ul><li>Interbloqueo(Deadlock) – dos ó más procesos están esperando indefinidamente por un evento que puede ser causado sólo por uno de los procesos que están en espera. </li></ul><ul><ul><li>Suponga que: S y Q son dos semáforos inicializados a 1 </li></ul></ul><ul><li>P0 P1 </li></ul><ul><li>wait(S); wait(Q); </li></ul><ul><li>wait(Q); wait(S); </li></ul><ul><li>M M </li></ul><ul><li>signal(S); signal(Q); </li></ul><ul><li>signal(Q); signal(S); </li></ul><ul><li>Inanición – bloqueo indefinido. Un proceso puede jamás ser removido de la cola de semáforos en la cual se encuentra suspendido </li></ul>
  7. 7. 2. PROBLEMAS CLÁSICOS DE SINCRONIZACIÓN <ul><li>2.1. Problema del Buffer Limitado </li></ul><ul><li>2.2. Problema de los Lectores y Escritores </li></ul><ul><li>2.3 Problema de los Filósofos Comensales </li></ul>
  8. 8. 2. PROBLEMAS CLÁSICOS DE SINCRONIZACIÓN 2.1. Problema del Buffer Limitado <ul><li>Se utiliza para ilustrar la potencia de las primitivas de sincronización. </li></ul><ul><li>Datos compartidos: semaphore full, empty, mutex; </li></ul><ul><ul><li>Inicialmente: </li></ul></ul><ul><ul><li>full = 0, empty = n, mutex = 1 </li></ul></ul><ul><li>do { </li></ul><ul><li>… </li></ul><ul><li>//produce un item en nextp </li></ul><ul><li>… </li></ul><ul><li>wait(empty);//Cuenta el # de bufferes vacios y llenos </li></ul><ul><li>wait(mutex); </li></ul><ul><li>… </li></ul><ul><li>//agrega nextp al buffer </li></ul><ul><li>… </li></ul><ul><li>signal(mutex); </li></ul><ul><li>signal(full);// Cuenta el # de bufferes vacios y llenos </li></ul><ul><li>} while (1); </li></ul>
  9. 9. 2. PROBLEMAS CLÁSICOS DE SINCRONIZACIÓN 2.1. Problema del Buffer Limitado-Proceso Consumidor <ul><li>do { </li></ul><ul><li>wait(full) </li></ul><ul><li>wait(mutex); </li></ul><ul><li>… </li></ul><ul><li>//remueve un item desde el //buffer a nextc </li></ul><ul><li>… </li></ul><ul><li>signal(mutex); </li></ul><ul><li>signal(empty); </li></ul><ul><li>… </li></ul><ul><li>//consume el item en nextc </li></ul><ul><li>… </li></ul><ul><li>} while (1); </li></ul>
  10. 10. 2. PROBLEMAS CLÁSICOS DE SINCRONIZACIÓN 2.2. Problema de los Lectores - Escritores <ul><li>Esta estructura de utiliza para asegurar q los problemas generados por acceder simultáneamente un escritor y algún otro proceso no afloren. </li></ul><ul><li>Lectores-Escritores </li></ul><ul><li>Datos compartidos: </li></ul><ul><li>semaphore mutex, wrt; </li></ul><ul><li>Inicialmente: </li></ul><ul><li>mutex = 1, wrt = 1, readcount = 0 </li></ul><ul><li>Proceso Escritor. </li></ul><ul><li>wait(wrt);// asegurar la exclusión mutua mientras actualioza la variable </li></ul><ul><li>… </li></ul><ul><li>//está escribiendo </li></ul><ul><li>… </li></ul><ul><li>signal(wrt); </li></ul>
  11. 11. 2. PROBLEMAS CLÁSICOS DE SINCRONIZACIÓN 2.3 Problema de los Filósofos Comensales <ul><li>Es un ejemplo de amplia clase de problemas de control de concurrencia </li></ul><ul><li>Datos compartidos: </li></ul><ul><li>semaphore chopstick[5 ]; </li></ul><ul><li>//Inicialmente todos los valores son 1 </li></ul>
  12. 12. 2. PROBLEMAS CLÁSICOS DE SINCRONIZACIÓN 2.3 Problema de los Filósofos Comensales <ul><li>Filósofo i: </li></ul><ul><ul><ul><li>do { </li></ul></ul></ul><ul><ul><ul><li>wait(chopstick[i]) </li></ul></ul></ul><ul><ul><ul><li>wait(chopstick[(i+1) % 5]) </li></ul></ul></ul><ul><ul><ul><li>… </li></ul></ul></ul><ul><ul><ul><li>//comer </li></ul></ul></ul><ul><ul><ul><li>… </li></ul></ul></ul><ul><ul><ul><li>signal(chopstick[i]); </li></ul></ul></ul><ul><ul><ul><li>signal(chopstick[(i+1) % 5]); </li></ul></ul></ul><ul><ul><ul><li>… </li></ul></ul></ul><ul><ul><ul><li>//pensar </li></ul></ul></ul><ul><ul><ul><li>… </li></ul></ul></ul><ul><ul><ul><li>} while (1); </li></ul></ul></ul>
  13. 13. 3. MONITORES <ul><li>3.1 Utilización . </li></ul><ul><li>3.2 Solución al problema de la cena de los filósofos usando monitores. </li></ul><ul><li>3.3 Implementación de un monitor usando semáforos . </li></ul><ul><li>3.4 Reanudación de procesos dentro de un monitor. </li></ul>
  14. 14. 3.MONITORES <ul><li>Son una herramienta de sincronizacion mas estructurada que un semáforo encapsula variables compartidas en conjunto con los procedimientos para accesar esas variables. </li></ul><ul><li>Son tipo de dato abstracto, por lo tanto los procesos llaman a los procedimientos del monitor en cualquier momento pero no pueden accesar directamente a las variables encapsuladas. </li></ul>
  15. 15. 3. MONITORES <ul><li>Permiten a un proceso esperar dentro del monitor, una variable de condición debe de ser declarada, como condition x, y; </li></ul><ul><li>La variable de condición puede solo ser usada con las operaciones wait y signal. </li></ul><ul><li>La operación </li></ul><ul><li>x.wait(); </li></ul><ul><li>significa que al proceso que invoca esta operación </li></ul><ul><li>es suspendido hasta que algun otro proceso invoque </li></ul><ul><li>x.signal(); </li></ul><ul><li>La operación x.signal reanuda exactamente un proceso </li></ul><ul><li>suspendido. If no hay proceso suspendido , then la </li></ul><ul><li>operación signal no tiene efecto. </li></ul>
  16. 16. 3.MONITORES 3.1 Utilización <ul><li>Construcción de sincronización de alto-nivel que permite compartir con </li></ul><ul><li>seguridad un tipo de datos abstracto entre procesos concurrentes. </li></ul><ul><ul><li>monitor nombre-monitor </li></ul></ul><ul><ul><li>{ </li></ul></ul><ul><ul><ul><li>//declaración de variables compartidas </li></ul></ul></ul><ul><ul><ul><li>procedure body P1 (…) { </li></ul></ul></ul><ul><ul><ul><li>. . . </li></ul></ul></ul><ul><ul><ul><li>} </li></ul></ul></ul><ul><ul><ul><li>procedure body P2 (…) { </li></ul></ul></ul><ul><ul><ul><li>. . . </li></ul></ul></ul><ul><ul><ul><li>} </li></ul></ul></ul><ul><ul><ul><li>procedure body Pn (…) { </li></ul></ul></ul><ul><ul><ul><li>. . . </li></ul></ul></ul><ul><ul><ul><li>} </li></ul></ul></ul><ul><ul><ul><li>{ </li></ul></ul></ul><ul><ul><ul><li>código de inicialización </li></ul></ul></ul><ul><ul><ul><li>} </li></ul></ul></ul><ul><ul><li>} </li></ul></ul>
  17. 17. 3.MONITORES 3.1 Utilización Visión Esquemática de un Monitor Monitor con Variables de Condición
  18. 18. 3.MONITORES 3.2 Solución al problema de la cena de los filósofos usando monitores. <ul><li>monitor dp </li></ul><ul><li>{ </li></ul><ul><li>enum {thinking, hungry, eating} state[5]; </li></ul><ul><li>condition self[5]; </li></ul><ul><li>void pickup(int i) // siguiente movimiento </li></ul><ul><li>void putdown(int i) // siguiente movimiento </li></ul><ul><li>void test(int i) // siguiente movimiento </li></ul><ul><li>void init() { </li></ul><ul><li>for (int i = 0; i < 5; i++) </li></ul><ul><li>state[i] = thinking; </li></ul><ul><li>} </li></ul><ul><li>} </li></ul><ul><li>void pickup(int i) { </li></ul><ul><li>state[i] = hungry; </li></ul><ul><li>test[i]; </li></ul><ul><li>if (state[i] != eating) </li></ul><ul><li>self[i].wait(); </li></ul><ul><li>} </li></ul><ul><li>void putdown(int i) { </li></ul><ul><li>state[i] = thinking; </li></ul><ul><li>// probar vecinos izquierdo y derecho </li></ul><ul><li>test((i+4) % 5); </li></ul><ul><li>test((i+1) % 5); </li></ul><ul><li>} </li></ul><ul><li>void test(int i) { </li></ul><ul><li>if ( (state[(I + 4) % 5] != eating) && </li></ul><ul><li>(state[i] == hungry) && </li></ul><ul><li>(state[(i + 1) % 5] != eating)) { </li></ul><ul><li>state[i] = eating; </li></ul><ul><li>self[i].signal(); </li></ul><ul><li>} </li></ul><ul><li>} </li></ul>
  19. 19. 3.MONITORES 3.3 Implementación de un monitor usando semáforos . <ul><li>Variables </li></ul><ul><li>semaphore mutex; // (initially = 1) </li></ul><ul><li>semaphore next; // (initially = 0) </li></ul><ul><li>int next-count = 0; </li></ul><ul><li>// Cada procedimiento externo F será reemplazado por </li></ul><ul><li>wait(mutex); </li></ul><ul><li>… </li></ul><ul><li>body of F; </li></ul><ul><li>… </li></ul><ul><li>if (next-count > 0) </li></ul><ul><li>signal(next) </li></ul><ul><li>else </li></ul><ul><li>signal(mutex); </li></ul><ul><li>// La exclusión mutua dentro de un monitor está asegurada. </li></ul>
  20. 20. 3.MONITORES 3.3 Implementación de un monitor usando semáforos . <ul><li>Por cada variable de condición x, tenemos: </li></ul><ul><li>semaphore x-sem; // (initially = 0) </li></ul><ul><li>int x-count = 0; </li></ul><ul><li>􀂄 La operación x.wait puede ser implementada como: </li></ul><ul><li>x-count++; </li></ul><ul><li>if (next-count > 0) </li></ul><ul><li>signal(next); </li></ul><ul><li>else </li></ul><ul><li>signal(mutex); </li></ul><ul><li>wait(x-sem); </li></ul><ul><li>x-count--; </li></ul><ul><li>La operación x.signal puede ser implementada como: </li></ul><ul><li>if (x-count > 0) { </li></ul><ul><li>next-count++; </li></ul><ul><li>signal(x-sem); </li></ul><ul><li>wait(next); </li></ul><ul><li>next-count--; </li></ul><ul><li>} </li></ul>

×