manejo de prioridad en semáforos

manejo de prioridad en semáforos

de Esteban Gabriel Risso Martinez -
Número de respuestas: 7

Buenas, mirando el tema de semáforos quise implementar prioridades entre procesos usando una variable booleana.

Por ejemplo si tengo el siguiente escenario: el problema del Productor - Consumidor y a parte tengo Inspectores que tienen prioridad tanto sobre los Productores como sobre los Consumidores a la hora de entrar al buffer.

Mi idea fue que al momento de obtener el buffer los Productores o Consumidores preguntaran si había llegado un inspector, si es así liberaran el buffer y esperaran a que el inspector lo liberara.

procedure productor() {                  procedure inspector() {                   procedure consumidor() {

     producir();                                      hayInspector = true;                       P(N);

     P(E);                                              P(S);                                               P(S);

     P(S);                                              mirarBuffer();                                  if (hayInspector) {

     if (hayInspector) {                          V(S);                                                     V(S);

           V(S);                                    }                                                                P(S);  

           P(S);                                                                                                     hayInspector = false;

           hayInspector = false;                                                                       } 

      }                                                                                                            tomar();

      guardar();                                                                                             V(S);

      V(S);                                                                                                     V(E);

      V(N);                                                                                                }


Gracias. 

Saludos!

En respuesta a Esteban Gabriel Risso Martinez

Re: manejo de prioridad en semáforos

de Leonardo Alberro Zimmermann -
En respuesta a Leonardo Alberro Zimmermann

Re: manejo de prioridad en semáforos

de Esteban Gabriel Risso Martinez -

De la misma forma que en el teórico, INIT(S,1), INIT(N,0), INIT(E,TAM_BUFFER). Básicamente al Productor - Consumidor del teórico le agregue la variable booleana, para intentar manejar la prioridad que tienen los inspectores sobre ambos.

Pero no se si quedo bien, capaz necesito agregar algún semáforo para manejar la variable hayInspector.

En respuesta a Esteban Gabriel Risso Martinez

Re: manejo de prioridad en semáforos

de Leonardo Alberro Zimmermann -

Algunos comentarios:

- hayInspector es una variable que siempre debe ser mutoexcluida, de lo contrario es fácil llegar a una inconsistencia. En   procedure inspector() es modificada fuera de un mutex.

- Si el inspector es el que inspecciona es él quien cuando sale debe indicar que "se fue" seteando hayInspector en false. 

- No me queda claro si tu idea era un solo inspector o muchos. Si eran muchos la solución no lo contempla y deberías darle prioridad sobre los consumidores parecido a como le diste prioridad a estos sobre los productores.


Saludos.

En respuesta a Leonardo Alberro Zimmermann

Re: manejo de prioridad en semáforos

de Esteban Gabriel Risso Martinez -
Mi planteo es: muchos inspectores que tienen prioridad sobre los productores y consumidores al momento de entrar al buffer. Para resolver esto quiero utilizar la variable booleana hayInspectores.

Mirando los comentarios que me hiciste puse un semáforo para hacer un mutex en hayInspectores.

INIT(mhayInspectores,1);

procedure productor() {                  procedure inspector() {                   

     producir();                                     P(mhayInspectores);                      

     P(E);                                             hayInspector = true;                                             

     P(S);                                             V(mhayInspectores);                                 

     if (hayInspector) {                         P(S);                                                    

           V(S);                                       mirarBuffer();                                                         

           P(S);                                       V(S);                                                                                                                                       

      }                                                  P(mhayInspectores);                                                         

      guardar();                                   hayInspector = false;                                                      

      V(S);                                           V(mhayInspectores);                                                        

      V(N);                                         }                                                  

Me genera dudas si esta bien porque al terminar un inspector cambia el valor de hayInspector en false y si hay otro inspector y un productor pelando por el buffer ya no se cumple que la variable hayInspector del segundo inspector sea true, afectando la prioridad del mismo.

En respuesta a Esteban Gabriel Risso Martinez

Re: manejo de prioridad en semáforos

de Esteban Gabriel Risso Martinez -

Agradezco si alguien me da una mano con esto, todavía no termine de ver como implementar la prioridad en semáforos con una variable booleana.

Gracias!

En respuesta a Esteban Gabriel Risso Martinez

Re: manejo de prioridad en semáforos

de Arturo Camilo Collazo Gil -

Hola,

tal vez te convenga enfocar el problema como una "instancia" de lectores / escritores con prioridad.

Si en vez de gestionar la prioridad con una variable booleana, lo haces con un contador, el último inspector puede dar paso a los otros procesos no-inspectores.

En la ppt de "uso de semáforos", se resuelve de la forma comentada arriba (Problema lectores / escritores, con un contador de escritores + un semáforo especial "try").

Saludos!

En respuesta a Arturo Camilo Collazo Gil

Re: manejo de prioridad en semáforos

de Esteban Gabriel Risso Martinez -

Entiendo lo que decís y de hecho hice tal cual lo que describís. Pero después buscando en el eva encontré que también se podía implementar la prioridad usando una variable booleana y quise intentar hacerlo de esa forma pero no tuve mucho éxito.


Gracias por la respuesta.

Saludos!