Operaciones sobre semaforos (FUNDAMENTOS DE PROGRAMACION)
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 elque 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();
}
Estas instrucciones pueden modificarse para evitar laespera activa, haciendo que la operación P duerma al mismo proceso que la ejecuta si no puede decrementar el valor, mientras que la operación V despierta a un proceso que no es quien la ejecuta. En unpseudolenguaje más entendible, la operación P suele denominarse "wait" o "espera" y la operación V "signal" o "señal".
El valor del semáforo es el número de unidades del recurso que estándisponibles (si sólo hay un recurso, se utiliza un "semáforo binario" cuyo valor inicial es 1).
La verificación y modificación del valor, así como la posibilidad de irse a dormir (bloquearse) se realiza enconjunto, como una sola e indivisible acción atómica. El sistema operativo garantiza que al iniciar una operación con un semáforo, ningún otro proceso puede tener acceso al semáforo hasta que laoperación termine o se bloquee. Esta atomicidad es absolutamente esencial para resolver los problemas de sincronización y evitar condiciones de competencia.
Si hay n recursos, se inicializará el semáforo alnúmero n. Así, cada proceso, al ir solicitando un recurso, verificará que el valor del semáforo sea mayor de 0; si es así es que existen recursos libres, seguidamente acaparará el recurso y decrementaráel valor del semáforo.
Cuando el semáforo alcance el valor 0, significará que todos los recursos están siendo utilizados, y los procesos que quieran solicitar un recurso deberán esperar a que...
Regístrate para leer el documento completo.