2. Un Semáforo es una variable especial que
constituye una serie de opciones elementales
para poder restringir o garantizar el acceso a los
recursos en un Sistema Operativo con un entorno
de multiprocesamiento.
3. Dependiendo del número de recursos a
gestionar, un semáforo puede ser:
1. Semáforo contador (Más de 1 recurso)
2. Semáforo binario (1 solo recurso)
Un semáforo se constituye por dos métodos
elementales:
1. wait() – denominado P
2. signal() – denominado V
4. Inicia(Semáforo s, Entero r)
{
s = r;
}
El número de recursos a gestionar se define por la variable entera r.
5. P(Semáforo s)
{
if(s>0)
s = s-1;
else
wait();
}
Debido a que s representa el número de recursos disponibles,
cuando un proceso requiere utilizar alguno, llama al método wait(), en
donde si es que hay procesos disponibles se resta un número del
semáforo, sino se mantiene en un bucle hasta que tenga alguno libre.
6. Un proceso se bloquea mientras se encuentra en el bucle wait()
7. V(Semáforo s) {
if(!procesos_bloqueados)
s = s+1;
else
signal();
}
Debido a que s representa el número de recursos disponibles,
cuando un proceso haya dejado de utilizar uno, se vuelve a sumar al
semáforo, siempre y cuando no haya procesos bloqueados.
8. Si es que existen procesos bloqueados, ellos tienen prioridad
para acceder a los recursos que se hayan liberado.
9. Los procesos son indivisibles, no puede haber modificación
simultánea de los valores del semáforo, o pueden causarse
conflictos.