Mecanismos de Sincronización en Sistemas Operativos: Semáforos, Regiones Críticas y Monitores
Enviado por Programa Chuletas y clasificado en Informática y Telecomunicaciones
Escrito el en español con un tamaño de 4,36 KB
Semáforos
Los semáforos son herramientas a nivel de software donde el Sistema Operativo (SO) interactúa con el hardware, no el usuario. El SO es el responsable de garantizar la exclusión mutua y de evitar la espera activa (WAIT(s), SIGNAL(s)). Se asocia un semáforo a cada recurso de acceso exclusivo, siendo esta solución aplicable a 'n' procesos.
Definición y Funcionamiento de los Semáforos
Cola de Procesos
Se suspenden los procesos que no pueden avanzar.
Procedimientos WAIT y SIGNAL
Estos procedimientos permiten, de forma indirecta, alterar la variable de control del semáforo.
- WAIT(s): ("Quiere entrar") Cuando un proceso desea acceder a la sección crítica, debe ejecutar
wait()
, pasándole como parámetro la variable de control del semáforo. Este procedimiento bloquea al proceso si el resultado no es positivo y decrementa el valor del semáforo. - SIGNAL(s): Incrementa el valor del semáforo y despierta a un proceso suspendido (si lo hay).
Con esta definición, el valor del semáforo puede ser negativo:
- Si contador > 0: Indica el número de procesos que pueden ejecutar
wait()
sin bloquearse. - Si contador < 0: Representa el número de procesos que están bloqueados en la cola del semáforo.
- Si contador = 0: No hay procesos en la cola de espera.
Para permitir que múltiples procesos se ejecuten simultáneamente en su sección crítica, el semáforo debe inicializarse a 'n', donde 'n' es el número máximo de procesos permitidos.
Ventajas de los Semáforos
- Mecanismo seguro para el acceso a recursos compartidos.
- Permiten la sincronización de procesos concurrentes.
- El programa principal debe inicializar el semáforo (según su caso de uso).
Inconvenientes de los Semáforos
- La inicialización es un paso crítico.
- Riesgo de confundir
wait()
consignal()
o de omitir alguno. - Pueden generar programas extensos y complejos.
Soluciones Alternativas de Sincronización
Región Crítica
Es fácil comprobar que, con un semáforo inicializado a 1, en el cuerpo de la Región Crítica (RC) solo puede haber un proceso al mismo tiempo. Sin embargo, no es conveniente utilizar semáforos para este propósito, ya que la RC está diseñada específicamente para ello. Son bloques de código que, al ser declarados como regiones críticas respecto a una variable, el compilador introduce los mecanismos de sincronización necesarios para que su ejecución se realice en régimen de exclusión mutua respecto a otras regiones críticas declaradas para la misma variable. Una región crítica se compone de una variable compartida por varios procesos.
Un proceso que intenta ejecutar una región crítica compite con otros procesos que también lo intentan:
- Si obtiene el acceso, ejecuta su bloque en régimen exclusivo.
- Si no obtiene el acceso, se encola en la lista asociada a la variable compartida y se suspende a la espera de que la región crítica quede libre.
Monitores
(synchronized
en Java) Son mecanismos de sincronización de nivel superior a los semáforos y constituyen un avance respecto a las regiones críticas condicionales. Su construcción se realiza a nivel de lenguaje de programación, controlando el acceso a datos compartidos. Un monitor es un conjunto de procedimientos que proporciona acceso con exclusión mutua a un recurso o conjunto de recursos (datos o dispositivos) compartidos por un grupo de procesos. Están encapsulados dentro de un módulo con la propiedad especial de que solo un proceso puede estar activo a la vez para ejecutar un procedimiento del monitor. La ventaja que presenta un monitor para la exclusión mutua es que esta está implícita: la única acción que debe realizar el programador del proceso que usa un recurso es invocar una entrada del monitor.
Sintaxis del Monitor
El cuerpo del monitor contiene una secuencia de instrucciones de inicialización que se ejecutan una sola vez, antes de que se realice cualquier llamada a los procedimientos del monitor.
Variables de Condición
Variable utilizada como mecanismo de sincronización dentro de un monitor.