Successfully reported this slideshow.
We use your LinkedIn profile and activity data to personalize ads and to show you more relevant ads. You can change your ad preferences anytime.

Blog

276 views

Published on

  • Be the first to comment

  • Be the first to like this

Blog

  1. 1. Identificar estado compartido y restricciones de problema-Buffer de tamaño limitado compartido entre productores y consumidores-Productor escribe en buffer[ in ], in indica posición de escritura en buffer-Consumidor extrae de buffer[ out ], out indica posicion de extracción de buffer-Contador indica el número de elementos actuales en el buffer-Múltiples productores deben manipular in, buffer[ in ] y contador atómicamente-Múltiples consumidores deben manipular out, buffer[ out ] y contador atómicamente-Múltiples consumidores y productores deben manejar contador atómicamenteint contador = 0; // indica número de items en bufferchar buffer[ N ];int in =0;int out = 0;lock_t mutex;Productorwhile( TRUE ){ // produce items en proxProd lock( mutex ); while( contador == N ){ unlock( mutex ); yield(); } buffer[ in ] = proxProd; in = ( in + 1 ) % N; contador++; unlock( lock );}Consumidorwhile( TRUE ){ // produce items en proxProd lock( mutex ); while( contador == 0 ){ unlock( mutex );
  2. 2. yield(); } proxCons = buffer[ out ]; out = ( out + 1 ) % N; contador--; unlock( mutex );}Problemas con semáforos • Son variables globales por lo tanto pueden ser accesadas de cualquier hebra directamente ( no es buena en ingeniería de software) • No hay conexión entre el semáforo y el recurso para el cual se quiere controlar acceso • Usados como mutex (ingreso a sección crítica) y para coordinación (planificación, elección quien tiene acceso al recurso) • No se puede controlar su uso, no hay garantía que el programador los use adecuadamente ( fácil de cometer errores)* Operación Wait (P): Si el valor del semáforo no es nulo, esta operación decrementa enuno el valor del semáforo. En el caso de que su valor sea nulo, la operación suspende elproceso que lo ejecuta y lo ubica en la lista del semáforo a la espera de que deje de sernulo el valor.* Operación Signal (V): Incrementa el valor del semáforo, y en caso de que hayaprocesos en la lista de espera del semáforo, se activa uno de ellos para que concluya suoperación Wait.Pseudocódigo de la operación:wait(p);if p>0then p:= p-1;else Suspende el proceso y lo encola en la lista del semáforo.Pseudocódigo de la operación:signal(p);if Hay algún proceso en la lista del semáforo
  3. 3. then Activa uno de elloselse p:= p+1;Sincronización basada en semáforosprocess Productor;var dato: Tipo_Dato; begin repeat produceDato(var dato); dejaDato(dato); signal(datoDisponible); forever;end:La clave para implementar semáforos es disponer de un mecanismo(lock y unlock) quepermita garantizar las secciones críticas de las primitivas wait y signal.Waitlockif s>0then s:= s-1;else Suspende el proceso;unlock;Signallockif Hay procesos suspendidosthen Desbloquea uno de los procesos;else s:= s+1;unlock;
  4. 4. - Peligros que introducen los semáforos son:* Un procedimiento wait y signal pueden olvidarse accidentalmente y ello conduce auna mal función catastrófica en el programa. En general un olvido de una sentencia waitconduce a un error de seguridad, como que no se respete una región de exclusiónmutua, así mismo, un olvido de una sentencia signal, conduce a un bloqueo.* Pueden incluirse todas las sentencias wait y signal necesarias, pero en puntos nocorrectos del programa o en orden no adecuado.* La solución de los mecanismos de exclusión mutua o de sincronización mediantesemáforos, dan lugar a un código con operaciones wait y signal relativas a un mismosemáforo, muy dispersas por el código del programa, lo que constituye una gravedificultad para comprender el programa y para mantenerlo.

×