Semáforos

Anuncio
Semáforos
• Definición de Semáforos e implementación con espera activa.
Un mecanismo semáforo consta básicamente de dos operaciones primitivas señal (Signal) y espera (Wait)
(Originalmente definidas como P y V por Disjkstra), que operan sobre un tipo especial de variable semáforo,
s. La variable semáforo puede tomar valores enteros y, excepto posiblemente en su inicialización, solo puede
ser accedida y manipulada por medio de las operaciones SIGNAL y WAIT. Ambas primitivas llevan un
argumento cada una, la variable semáforo, y pueden definirse del modo siguiente..:
SIGNAL (s) ..:
Incrementa el valor de su argumento semáforo, s , en una operación indivisible.
WAIT (s) ..:
Decrementa el valor de su argumento semáforo, s , en tanto el resultado no sea negativo. La conclusión de la
operación WAIT, una vez tomada la decisión de decrementar su argumento semáforo, debe ser individual.
Ejemplo..:
Wait(s): While not (s > 0 ) do {Seguir Probando};
S := s − 1;
Signal(s) s := s + 1;
Un semáforo cuya variable solo tiene permitido tomar los valores 0 (ocupado) y 1 (libre) se denomina
Semáforo Binario. Un Semáforo General puede tomar cualquier valor entero. La lógica de las operaciones
WAIT y SIGNAL aplica tanto para Semáforos Binarios como Semáforos Generales.
Propiedades
Los semáforos son un mecanismo relativamente sencillo pero poderoso de asegurar la exclusión mutua entre
procesos concurrentes para acceder a un recurso compartido. En vez de que lo usuarios inventen sus propios
protocolos de sincronización (tarea difícil y traicionera) los semáforos son una herramienta proporcionada por
el diseñador de sistemas. Los usuarios solo necesitan contribuir a controlar el acceso a los recursos
compartidos obedeciendo un protocolo estándar y sencillo.
Los semáforos pueden estar disponibles en un lenguaje de programación, como construcción del lenguaje, o
como servicio del sistema operativo invocado mediante llamadas al sistema. Cuando son proporcionadas por
el sistema operativo, las variables semáforos no son declaradas ni manipuladas en el lenguaje, sino que se
manipulan a través de llamadas al sistemas tales como ..: CREAR_SEMAFORO,
ASOCIAR_A_SEMAFORO, ESPERAR, SEÑAL, CERRAR_SEMAFORO.
Disciplina de Servicio de los Semáforos
La definición de semáforo con espera activa no impone la aplicación de ninguna ordenación a los procesos
que esperan, existe, por tanto, una posibilidad de que un proceso pueda quedar bloqueado debido a la
competencia con otros. Esta situación, en la cual algunos procesos progresan hacia su terminación pero uno o
1
más procesos permanecen bloqueados fuera del recurso, se denomina Aplazamiento Indefinido. Este
fenómeno también es conocido como Bloqueo Activo, y los procesos afectados se dicen que son Postergados.
Para evitar bloqueos activos algunas implementaciones de semáforos obligan a aplicar una disciplina de
servicio entre los procesos en espera.
La elección de una disciplina de servicio es muy importante ya que una disciplina sesgada puede posibilitar
que un grupo de procesos conspire contra otros y usurpe permanentemente el recurso.
La postergación de procesos puede evitarse añadiendo el siguiente requisito a la implementación de semáforo
..: Una petición para entrar a la sección critica debe ser concedida en tiempo finito. Dada la suposición de que
cada proceso tarda un tiempo finito en ejecutar la sección critica, este requisito puede sastifacerse utilizando la
disciplina FIFO (First Input First Output − Primero en entrar... Primero en Salir) para elegir entre los procesos
en espera. Este método garantiza la entrada a la sección critica en tiempo finito, como también es conocido
como Implementación Estricta de Semáforos.
• Implementación de Semáforos con Colas
La implemetación de los semáforos con espera activa tienen dos importantes desventajas .: el potencial
aplazamiento indefinido y la baja eficiencia debido al consumo de ciclos de procesador por parte de procesos
bloqueados. Aunque un proceso bloqueado no experimenta ningún proceso real, no obstante continua
consumiendo recursos del sistema a causa de la espera activa. Tanto el bloqueo activo como la ineficaz espera
activa pueden verse aliviados por la implementación de semáforos con cola.
Un proceso suspendido no consume ciclos de procesador, de modo que este método es potencialmente más
eficiente que el de la espera activa.
Resumen
La sincronización entre procesos es necesaria para evitar error de temporización debido al acceso concurrente
a recursos compartidos, tales como estructuras a datos o dispositivos de E/S, por parte de procesos
competidores. La sincronización entre procesos también permite el intercambio de señales de temporización
(Parar / Seguir) entre procesos cooperativos con el fin de preservar las relaciones especificadas de precedencia
impuesta por el problema que se resuelva.
Los semáforos son un mecanismo de sincronización entre procesos simples pero potente basado en esta
filosofía. Los semáforos satisfacen la mayoría de los extensos requisitos que hemos especificados para un
buen mecanismo de control de concurrencia incluyendo la no existencia de suposiciones con respecto a las
velocidades relativas ni la prioridades de los procesos competidores excepto que posiblemente existan.
De las estrategias para la implementación de semáforos, la implementación con cola facilita la eliminación del
problema del aplazamiento indefinido y tiene una mayor eficiencia potencial que la implementación con
espera activa.
2
Descargar