DEFINICIÓN
uUn semáforo es
una variable especial (o tipo abstracto de datos) que constituye
el método clásico para restringir o permitir el acceso a recursos compartidos
(por ejemplo, un recurso de almacenamiento del sistema o variables del código
fuente) en un entorno de multiprocesamiento (en el que se ejecutarán
varios procesos concurrentemente). Fueron inventados por Edsger Dijkstra en
1965 y se usaron por primera vez en el sistema operativo THEOS
uUn semáforo básico es una estructura
formada por una posición de memoria y dos instrucciones, una para reservarlo y
otra para liberarlo
OPERACIONES
u1) WAIT – DOWN
u2) SIGNAL - UP
uLa operación V es denominada a
veces subir el semáforo (up) y la operación P se conoce
también como bajar el semáforo (down), y también
son llamadas signal y wait o soltary tomar.
FUNCIONAMIENTO
uSe empieza por inicializar la posición de memoria a 1
(o al valor correspondiente si ese recurso concreto admite más de un acceso
simultáneo). Esto se hace en el inicio del programa principal.
uA continuación, cada vez que un thread o un proceso
quiera acceder a dicho recurso (por ejemplo, un fichero), hará primero una
petición con la primera de las llamadas disponibles. Cuando el S.O. ejecuta esa
llamada, comprueba el valor que hay en la posición de memoria del semáforo, y
si es distinta de cero, se limita a restarle 1 y devolver el control al
programa; sin embargo, si ya es cero, duerme al proceso que hizo la petición y
lo mete en la cola de procesos, en espera de que el semáforo se ponga a un
valor distinto de cero.
uPor último, cuando el proceso ha terminado el acceso
al recurso, usa la segunda llamada para liberar el semáforo. Cuando el S.O. la
ejecuta, comprueba si la cola del semáforo está vacia, en cuyo caso
se limita a incrementar el valor del semáforo, mientras que si tiene algún
proceso, lo despierta, de modo que vuelve a recibir ciclos de CPU y sigue su
ejecución. Si había varios procesos en espera, se irán poniendo en marcha uno
tras otro a medida que el anterior va liberando el semáforo. Cuando termina el
último, el semáforo se vuelve a poner a 1. Se trata, por tanto, del mismo
proceso que seguiríamos con la variable, pero con la ventaja de que es un
mecanismo estandar para todos
los procesos, y como es una operacion atómica (esto es, que durante su ejecución no se admiten
cambios de tarea), no surje el problema
de que una conmutación pueda producir errores aleatorios.
TIPOS DE SEMÁFORO
uBINARIOS
u CONTADORES