Mecanismos de Sincronización en Sistemas Operativos: Dekker, Peterson, Semáforos y Monitores
Enviado por Chuletator online y clasificado en Informática y Telecomunicaciones
Escrito el en español con un tamaño de 3,37 KB
Mecanismos de Sincronización en Sistemas Operativos
Tercera tentativa: espera infinita
Se puede producir un bloqueo mutuo, donde los dos procesos entran en un ciclo infinito. Esto se debe a que cada uno de los procesos se puede bloquear en su verificación.
Cuarta tentativa: aplazamiento indefinido
Se introduce un tratamiento de cortesía. Cuando un proceso ve que otro quiere utilizar el recurso, le cede el turno cortésmente. La exclusión mutua está garantizada y no ocurre bloqueo mutuo, pero puede ocurrir un aplazamiento indefinido debido al retraso [delay(random)].
Algoritmo de Dekker
Utiliza, además de las banderas de intención de entrar, una variable turno que resuelve en caso de conflicto. Es una combinación de los programas PrimerIntento y CuartoIntento anteriormente descritos. Esta solución asegura la exclusión mutua y está libre de interbloqueos. Este algoritmo sirve para conseguir la exclusión mutua entre dos procesos. El algoritmo utilizado para N procesos tan sólo tiene un interés teórico ya que consume demasiado tiempo para conseguir la exclusión mutua.
Algoritmo de Peterson
Simplifica el algoritmo de Dekker. El protocolo de entrada es más elegante con las mismas garantías de exclusión mutua, imposibilidad de bloqueo mutuo y de aplazamiento indefinido.
Semáforos
El uso de semáforos fue propuesto en 1965 por Dijkstra, con el objetivo de resolver el problema de la exclusión mutua, evitando la espera activa. Los semáforos son herramientas a nivel software donde es el SO el que interactúa con el hardware y no el usuario.
Esta solución es aplicable a n procesos. wait(s)
Bloquea al proceso si el resultado no es positivo y decrementa. signal(s)
Incrementa y despierta a un proceso suspendido (si lo hay).
Ventajas
- Mecanismo seguro de acceso a un recurso compartido mediante el encapsulamiento de las operaciones sobre la variable que controla el semáforo.
- Consiguen sincronización de procesos concurrentes evitando la espera activa.
- El programa principal debe inicializar el semáforo (según su uso).
Inconvenientes
- La inicialización es crítica.
- Confundir un
wait
con unsignal
u omitir alguno de ellos. - Resultan programas muy grandes y complejos, difíciles de depurar.
Región crítica
En cualquier caso existen razones para no implementar RC con semáforos, por ejemplo, el compilador no conoce qué variables protege un semáforo, con lo que no ayudaría si se está utilizando una variable compartida fuera de su RC (esto tendría que controlarlo también el programador). También hay que tener sumo cuidado cuando se combinan los semáforos y las RC. Si un proceso que está dentro de una RC realiza una operación wait()
sobre un semáforo cuyo contador vale 0, este proceso se parará dentro de la RC, bloqueándola en consecuencia.
Monitores
Son mecanismos de sincronización de nivel más alto que los semáforos. Los procedimientos van encapsulados dentro de un módulo que tiene la propiedad especial de que sólo un proceso puede estar activo cada vez para ejecutar un procedimiento del monitor. La única acción que debe realizar el programador del proceso que usa un recurso es invocar una entrada del monitor.