Semaforos

Clasificado en Informática

Escrito el en español con un tamaño de 3,63 KB

 

Semáforos: es una herramienta de sincronización para soluciona el problema de la sección critica y los problemas de sincronización. Se trata de un variable entera que solo puede accederse mediante 2 operaciones: Wait y Signal. Cuando un proceso modifica un valor de un semáforo, otros no pueden hacerlo simultáneamente. Se inicializa con valor NO negativo, WAIT decrementa el valor del semanaforo, cuando el valor se hace negativo, el proceso se bloquea. SIGNAL incrementa el valor del semáforo, si el valor no es positivo se desbloquea un proceso bloqueado por WAIT.
La definición es:
P(s) { while (s<=0)
s--;}
V(s) { s++;}
Los sistemas operativos usan semáforos para controlar el acceso a una sección critica o recursos compartidos. El semáforo se inicializa en un valor que corresponde al número de recursos disponibles. Cada proceso que quiere usar un recurso realiza una operación WAIT en el semáforo. Cuando libera el recurso, realiza operaciones SIGNAL. Cuando el contador es 0, todos los recursos están siendo utilizados, y los procesos que quieran usar recursos, se bloquearan hasta que el contador sea mayor q 0.
Implementación: uno de los problemas mas generales es que cuando un proceso no encuentra un recurso disponible, el proceso se queda realizando un spin, a esto se lo denomina espera ocupada y se desperdician ciclos de cpu. Para evitar este problema, se utiliza el método de bloqueo, que hace que cuando el proceso no encuentra un recurso disponible, se bloquea a si mismo y se coloca en una cola de espera asociada con el semáforo, y el proceso se pasa al estado de espera. Luego, se devuelve el control al planificador de la cpu, el cual selecciona otro proceso para su ejecución. Un proceso que esta bloqueado, esperando un semáforo deberá ser reiniciado cuando algún otro proceso ejecuta una operación SIGNAL. El proceso se inicia mediante una operación Wakeup, que cambia el estado del proceso de espera a listo. Este proceso, se coloca luego en la cola de listos.

El problema de los filósofos comensales: Considere a 5 filósofos que pasan sus vidas pensando y comiendo. Comparten una mesa redonda común con 5 sillas, una para cada filósofo. En el centro de la mesa hay un tazón de arroz y 5 palillos chinos únicos para comer. Cuando un filósofo piensa, no interactúan sus colegas. Cuando un filosofo le da hambre trata de tomar los 2 palillos mas cercanos. Solo puede tomar un palillo a la vez. Y no se puede tomar un palillo que esta en manos de otro. Mientras esta comiendo no suelta los palillos, una vez que termino los deja y empieza a pensar de nuevo. Este es un problema clásico de sincronización, es un ejemplo de una gran clase de problemas de control de concurrencia. Es una representación sencilla de la necesidad de asignar varios recursos entre varios procesos. Como solución, se puede representar cada palillo mediante un semáforo. Un filósofo trata de tomar un palillo ejecutando la operación WAIT sobre dicho semáforo, y libera los palillos con la operación SIGNAL.