Semáforo

Un semáforo es una variable S entera que toma valores no negativos, y sobre la cual aparecen definidas 2 operaciones:

     
1. Wait(S)
	   Si S>0 entonces S:=S-1. En caso contrario se suspende la ejecución del proceso y éste quede 
	   bloqueado en el semáforo S.

2. Signal(S)
	   Si hay algún proceso que ha sido suspendido en el semáforo se le despierta y puede continuar
	   su ejecución. En caso contrario S:=S+1.
     
  

     
Los semáforos tienen las siguientes propiedades:

	1. Wait y Signal son instrucciones atómicas. Ninguna instrucción puede ir entrelazada entre
	     la comprobación de si S > 0 y el decremento de la variable o la suspensión del proceso.

	2. El valor inicial de un semáforo es un número no negativo.

	3. La operación Signal debe despertar a uno de los procesos suspendidos en el semáforo, 
	   pero la definición no especifica a cuál. Esto podría llevar a pensar que los semáforos no
	   garantizan la vivacidad. La siguiente hipótesis nos permite asegurarla.

	4. Hipótesis de corrección de los semáforos: si un proceso P está bloqueado en un semá-
	   foro S y este toma un valor estrictamente mayor que cero con una frecuencia infinita, el
	   proceso P eventualmente será desbloqueado.

Los semáforos serán generales si pueden tomar cualquier valor no negativo, y binarios si solo pueden tomar
los valores 0 y 1. En este último caso, la instrucción de incremento de la operación Signal se sustituye por 
S := 1.

En la literatura la notación habitual para las operaciones sobre semáforos es la siguiente:

	Wait(S)  = P(S)
 	Signal(S)= V(S)
     
  


Hosted by www.Geocities.ws

1