Buscar este blog

sábado, 15 de enero de 2011

2.9 Semáforos Sistemas Operativos

2.9 Semáforos Sistemas Operativos

 SEMÁFOROS
Funcionamiento de los semáforos
       Dos o más procesos pueden cooperar por medio de simples señales, de forma que se pueda obligar a detenerse a un proceso en una posición determinada hasta que reciba una señal específica. Cualquier requisito complicado de coordinación puede satisfacerse por medio de la estructura de señales adecuada. Para la señalización, se usan variables especiales llamadas semáforos. Para transmitir una señal por el semáforo, los procesos ejecutan la primitiva signal(s). Para recibir una señal del semáforo, los procesos ejecutan la primitiva wait(s); si la señal correspondiente aún no se ha transmitido, el proceso es suspendido hasta que tenga lugar la transmisión. Para lograr el efecto deseado, se pueden contemplar los semáforos como variables que tienen un valor entero sobre el que se definen las tres operaciones siguientes:              
1.       Un semáforo debe inicializarse con un valor no negativo.
2.       La operación wait decrementa el valor del semáforo. Si el valor del semáforo se hace negativo, el proceso que ejecuta el wait se bloquea.
3.       La operación signal incrementa el valor del semáforo. Si el valor no es positivo, se desbloquea a un proceso bloqueado por una posición wait.
       Las primitivas wait y signal se suponen atómicas, es decir, no pueden ser interrumpidas y cada rutina puede considerarse como un paso indivisible. Una versión más limitada es el semáforo binario, que sólo puede tomar los valores 0 y 1. En principio los semáforos binarios son más sencillos de implementar y tienen la misma potencia de expresión que los semáforos generales. Tanto en los semáforos como en los semáforos binarios se emplea una cola para mantener los procesos esperando en el semáforo. La política más equitativa mediante la cual se quitan los procesos de dicha cola es la FIFO. La única exigencia estricta es que un proceso no debe quedar retenido en la cola de un semáforo indefinidamente porque otros procesos tengan preferencia.
       Generalmente operadores como WAIT y SIGNAL operan en los semáforos de la siguiente manera. Cuando un proceso ejecuta un operador WAIT que tiene un valor de semáforo en 0, ese proceso se bloquea; si el valor es mayor que cero, el valor del semáforo es disminuido en 1 y el proceso continua. Cuando un proceso ejecuta un operador SIGNAL y hay procesos bloqueados (WAITING), uno de estos procesos es activado (puesto en la cola de listos). Si no hay procesos esperando el valor del semáforo se incrementa en 1. Se asume que procesos bloqueados por semáforos pierden el procesador y entran en una cola de espera (WAITING QUEUE) en vez de producir BUSY WAITING. También se asume que la cola de espera es FIFO.

1 comentario: