Problema del Productor Consumidor resuelto con Semáforos.

 

  ¿Para qué sirve esta Simulación?

¿Hasta dónde puedo llegar?

¿Qué nos muestra la Simulación?

¿Cómo la hago funcionar?

  El Banco de Pruebas.

Comenzar a trabajar.

 

 

 


¿Para qué sirve esta Simulación?

La siguiente herramienta, presenta una simulación creada con el objetivo de hacer entender al usuario, como se pueden solucionar los problemas de concurrencia mediante el uso de semáforos.

Pretendemos que el usuario de esta herramienta, comprenda la base de funcionamiento de la solución adoptada por los sistemas operativos para resolver los problemas de concurrencia. Aconsejamos el uso de esta herramienta conjuntamente con la explicación teórica a cerca del tema de Procesos concurrentes.

 


¿Hasta dónde puedo llegar?

Plantearemos el problema de un proceso productor que se encarga de crear un tipo de elementos que otro proceso (el consumidor) necesita consumir para continuar con su ejecución.

Ambos utilizan como canal de comunicación un Buffer finito que está en memoria compartida sobre el que depositarán y recogerán los elementos producidos.

La solución a este problema se obtiene con la introducción de tres semáforos:

 

El funcionamiento de la herramienta será básicamente el siguiente:

Tanto el proceso productor como el consumidor tendrán la posibilidad de producir o consumir elementos, pero esto no lo harán siempre. La herramienta permite al usuario manejar la probabilidad de que cada proceso que utilice sus oportunidades de consumo o producción.

Cuando un proceso decide consumir o producir un elemento, primero comprobará si puede hacerlo, y esto lo hará consultando el buffer (a efectos visuales, supondrá la conexión de una serie de líneas entre los procesos y el buffer). Para la consulta del buffer deberá crear la exclusión mutua, acción que se verá representada en la simulación con la puesta en rojo del semáforo del buffer.

Si puede hacerlo (consumir o producir) seguirá en la sección critica y recogerá o pondrá un elemento del buffer. Hecho esto, comprobará que si el otro proceso está esperando la operación que ha realizado (el otro proceso haya realizado una operación P(s)), si es así le avisará de que ya puede continuar su tarea (realiza una operación V(s) sobre él).

Si el proceso no puede trabajar con el buffer (porque este está lleno o vacío), realizará una operación P(s), en espera de que el otro proceso le libere de la incapacidad de trabajar mediante su trabajo con el buffer (realice una operación V(s)).

El consumo o la producción de un elemento, se verá representado por el desplazamiento de un circulo, que ira desde el proceso al buffer de elementos (caso de una producción) o desde el buffer al proceso (caso de consumo). El circulo estará relleno de un color que cambiara hacia la mitad del recorrido. El primer color del circulo será del color del objeto del que parte y el segundo del color del objeto al que llega.

Tanto si los procesos consumen o producen elementos, como si no lo hacen, cuando terminen su consulta se volverán a conectar con el buffer para hacer que termine la exclusión mutua, lo que colocara el semáforo del buffer de nuevo en verde y dispuesto para servir otra consulta.

 Este es básicamente el funcionamiento de la herramienta. Estará haciendo que el productor produzca elementos y que el consumidor los consuma mientras que no se cumpla el tiempo que hemos decido que dure la simulación.

 


¿Qué nos muestra la Simulación? 

El aspecto de la herramienta lo podemos observar en la ilustración 1, en ella se distinguen una serie de figuras principales que serán las representantes de los diferentes participantes en la simulación:

Si el círculo activo es el de color rojo, en los semáforos del productor o el consumidor, esto indicará que el elemento al que representa está detenido por no poder seguir con su tarea (la de producir o la de consumir). Si el semáforo es el del buffer, lo que significa el color rojo es que el buffer está siendo utilizado por alguien (esta en exclusión mutua) y que los demás no podrán accederlo.
El color verde, en productor y consumidor indica que pueden producir o consumir. En el buffer indica que puede ser accedido por cualquiera. 
Cuando uno de los procesos esté accediendo al semáforo, la línea pasará del color gris al rojo, mientras dure esa conexión, seguirá en rojo. Una vez haya realizado su tarea el proceso desde el que parte, la línea volverá a su color gris original.  

 

Ilustración 1 Instantánea de la Herramienta

 

En la ilustración 1, podemos apreciar una instantánea del funcionamiento de la simulación.

En ella podemos destacar el color rojo del semáforo buffer y el estado Activo de la conexión entre el proceso productor y el Buffer. Este aspecto nos indica que es el proceso Productor el que esta trabajando con el buffer.

También se puede ver en la imagen que el buffer tiene ya unos elementos introducidos, por lo que el proceso Consumidor podrá consumir cuando lo desee (Observe que el semáforo del Consumidor esta verde). Si no hubiese elementos (celdas magenta), el semáforo estaría rojo.

El buffer no está completamente lleno, y por esto, cuando el proceso Productor desee producir podrá hacerlo (Observe que el semáforo del Consumidor está verde). Si no hubiese huecos (celdas amarillas), el semáforo estaría rojo.

 


¿Cómo la hago funcionar? 

La segunda parte de la interfaz gráfica, es la destinada a la interacción con el usuario, la que se encargará de obtener los parámetros según los cuales se ejecutara la simulación.

Esta zona se sitúa en la parte inferior de la pantalla mostrada de forma global en la Ilustración 1. Mas claramente la podemos ver en la Ilustración 2.

Ilustración 2 Parámetros de la Herramienta

 El botón Empezar, sirve para iniciar la herramienta con los datos que tengan los demás paramentos. Cuando se pulsa, su leyenda cambia, pasará de Empezar a Reiniciar. Esto permitirá que cuando la simulación comenzada haya terminado, podamos volver a ejecutarla, modificando, si así lo deseamos el resto de parámetros.

 El siguiente parámetro que podemos pasar a la herramienta es el de "P. Consumir:". Indica la probabilidad de que el proceso Consumidor consuma los elementos que hay en el buffer. Está representado en tanto por cien. Por defecto tiene un 50%. Puede tomar valores desde 0 a 99. Mediante él, podemos hacer que el proceso consumidor consuma mucho o poco. La introducción de un dato incorrecto provocará que se tomen unos datos por defecto.

El siguiente parámetro que podemos pasar a la herramienta es el de "P. Producir:". Indica la probabilidad de que el proceso Productor produzca elementos para introducir en el buffer. Está representado en tanto por cien. Por defecto tiene un 50%. Puede tomar valores desde 0 a 99. Mediante él, podemos hacer que el proceso productor produzca mucho o poco. La introducción de un dato incorrecto provocará que se tomen unos datos por defecto.

 El último de los datos que podemos pasar a la herramienta es el tiempo aproximado que va a durar la simulación del algoritmo "Tiempo Simul:". Está expresado en minutos, y por defecto tiene una duración de dos minutos. Acepta datos en el rango (0-99), es decir permitiría ejecuciones de 0 a 99 minutos. El tomar el valor 0 como válido, ha sido para permitir que la simulación, solo de la posibilidad de consumir y producir a los procesos una vez.

 


El Banco de Pruebas

En esta simulación, los principales experimentos que podemos realizar serán los siguientes:

Podemos aumentar la probabilidad de que el proceso Productor produzca elementos (a 85 o 90 %). Si esto lo combinamos con que el Consumidor tenga una probabilidad baja de Consumir (a 10 o 20 %), conseguiremos hacer que el buffer de elementos esté rápidamente completo. Podremos observar como el proceso productor intenta producir y no puede hacerlo. En el momento en el que el consumidor retire un elemento, activará el semáforo del productor y este podrá seguir con su trabajo.

Podemos aumentar la probabilidad de que el proceso Consumidor consuma elementos (a 85 o 90 %). Si esto lo combinamos con que el Productor tenga una probabilidad baja de Producir (a 10 o 20 %), conseguiremos hacer que el buffer de elementos se mantenga casi siempre vacío. Podremos observar como el proceso consumidor intenta consumir y no puede hacerlo. En el momento en el que el productor produzca un elemento, activará el semáforo del consumidor y este podrá seguir con se trabajo.

Si mantenemos igualadas las dos probabilidades, la simulación se llevará a cabo sin llegar casi nunca al extremo de un buffer lleno o vacío.

Recomendamos hacer, que la simulación tenga una duración suficiente para que podamos observar el aspecto que deseemos. Esta duración depende de las distintas probabilidades asignadas a los procesos.

 


Comenzar a trabajar.

Desde aquí ya sí puedes empezar a trabajar con la herramienta.