PRIMITIVAS DE SINCRONIZACIÓN
PRIMITIVAS DE SINCRONIZACIÓN
BASADAS EN
MEMORIA COMPARTIDA:
SEMÁFORO
q El primer avance en la resolución de problemas de procesos concurrentes llego en 1965, con el artículo publicado por Dijkstra. Quien estaba interesado en el diseño de un SO como un conjunto de procesos secuenciales cooperantes y en el desarrollo de mecanismos eficientes y fiables para dar soporte a la cooperación.
qEl principio fundamental postulado fue: “si dos o mas procesos pueden cooperar por medio de simples señales, de forma que se pueda obligar a detener a un proceso en una posición determinada hasta que reciba una señal específica”.
Ver videos:
https://www.youtube.com/watch?v=YN4neOXh8rU
Barbero dormilon:
Folósofos:
Productor- Consumidor:
Productor-Consumidor con JAVA:
REGIONES CRITICAS CONDICIONALES:
Desde el punto de vista didáctico es válido analizarlo, porque constituyen un escalafón intermedio entre un mecanismo de bajo nivel como son los semáforos y uno de alto nivel como los monitores
MONITORES:
Un monitor es una colección de procedimientos, variables y estructuras de datos que se agrupan en un tipo especial de módulo o paquete. Los procesos pueden invocar los procedimientos de un monitor en el momento en que deseen, pero no pueden acceder directamente a las estructuras de datos internas del monitor desde procedimientos declarados afuera del monitor.
Los monitores poseen una propiedad especial que los hace útiles para lograr la exclusión mutua: sólo un proceso puede estar activo en un monitor en un momento dado. Los monitores son una construcción de lenguaje de programación, así que el compilador sabe que son especiales y puede manejar las llamadas a procedimientos de monitor de una forma diferente a como maneja otras llamadas procedimientos. Por lo regular, cuando un proceso invoca un procedimiento de monitor, las primeras instrucciones del procedimiento verifican si hay algún otro proceso activo en ese momento dentro del monitor. Si así es, el proceso invocadores suspende hasta que el otro proceso abandona el monitor. Si ningún otro proceso está usando el monitor, el proceso invocador puede entrar.
Es responsabilidad del compilador implementar la exclusión mutua en las entradas monitores, pero una forma común es usar un semáforo binario. Puesto que el compilador, no el programador, se está encargando de la exclusión mutua, es mucho menos probable que algo salga mal. En cualquier caso, la persona que escribe el monitor no tiene que saber cómo el compilador logra la exclusión mutua; le basta con saber que si convierte todas las regiones críticas en procedimientos de monitor, dos procesos nunca podrán ejecutar sus regiones críticas al mismo tiempo. Aunque los monitores ofrecen una forma fácil de lograr la exclusión mutua, esto no es suficiente, como acabamos de ver. También necesitamos un mecanismo paraqué los procesos se bloqueen cuando no puedan continuar