Semaforos Binarios
Semaforos Binarios
Semaforos Binarios
Los semáforos son una herramienta de sincronización que ofrece una solución al problema de la
sección crítica (porción de código de un programa de computador en la cual se accede a un
recurso compartido que no debe ser accedido por mas de un proceso o hilo en ejecución). Un
semáforo provee una simple pero útil abstracción para controlar el acceso de múltiples procesos a
un recurso común en programación paralela, o entornos multiusuarios. El concepto de semáforo
fue inventando por el holandés Esdger W. Dijkstra.
Los semáforos sólo pueden ser manipulados usando las siguientes operaciones ( éste es
el código con espera activa):
Inicia(Semáforo s, Entero v)
{
s = v;
}
En el que se iniciará la variable semáforo s a un valor entero v.
P(Semáforo s)
{
if(s>0)
s = s-1;
else
wait();
}
La cual mantendrá en espera activa al regido por el semáforo si éste tiene un valor inferior o igual
al nulo.
V(Semáforo s)
{
if(!procesos_bloqueados)
s = s+1;
else
signal();
}
Problemas que pueden surgir con mala Sincronización
DeadLock: Dos o más procesos están esperando por una condición que solo puede ser causada por un
proceso que también esta esperando.
Starvation o Espera Indefinida: Un proceso en la lista de espera de un semáforo de la cual están entrando y
saliendo continuamente procesos y listas de espera de semáforo.
Semáforos binarios
Dijkstra dio en 1968 una solución elegante y sencilla al problema de la exclusión mutua con la
introducción del concepto de semáforo binario. Esta técnica permite resolver la mayoría de los
problemas de sincronización entre procesos y forma parte del diseño de muchos sistemas
operativos y de lenguajes de programación concurrentes.
Un semáforo binario es un indicador de condición (S) que registra si un recurso está disponible o
no. Un semáforo binario sólo puede tomar dos valores: O y 1. Si, para un semáforo binario. S=1
entonces el recurso está disponible y la tarea lo puede utilizar; si S=0 el recurso no está
disponible y el proceso debe esperar.
Al igual que en los semáforos binarios, la ejecución de las operaciones son indivisibles, esto es,
una vez que se ha empezado la ejecución de uno de estos procedimientos se continuará hasta
que la operación se haya completado.