se basa en programas que contienen
instrucciones de bajo nivel (lectura,
escritura) y bucles para realizar esperas
Exclusión Mutua con espera ocupada :
Para asegurar la exclusión mutua deben
incluir una secuencia de 3 pasos, Protocolo
de Entrada, Salida y sección crítica
ALTO NIVEL
Semáforos
se construyen sobre las instrucciones de bajo nivel,
usando servicios del SO para bloquear y reactivar
procesos. Se puede usar para resolver problemas de
SINCRONIZACIÓN. El mecánismo se implementa
mediante instancias de estructura de datos a las que se
accede únicamente mediante subprogramas específicos
(aumenta la SEGURIDAD y SIMPLICIDAD)
ESTRUCTURA
ELEMENTOS
Conjunto de procesos bloqueados.
INICIALIZACIÓN: vacío
Valor Natural (no negativo). INICIALIZACION:
valor inicial del semáforo
Annotations:
valor del semáforo
un semáforo es una instancia de una estructura de
datos. * esta estructura reside en memoria compartida.
OPERACIONES
sem_wait( S ) :
if (S > 0) S-- ;
else if(s==0)
bloquear;
sem_signal(S) :
if (! s.isEmpty())
desbloquear;
else s++;
USO
EXCLUSIÓN MUTUA
semáforo inicializado a 1, y
haciendo sem_wait antes de la
sección crítica y sem_signal
después de la sección crítica
SINCRONIZACIÓN
el problema de prod-cons se
resuelve fácilmente
LIMITACIONES
solo resuelve problemas sencillos de sincronización.
Problemas más complejos son difíciles de verificar su
válidez. Al igual que los cerrojos, programas erroneos
puede provocar que haya procesos bloqueados
indefinidamente o estados incorrectos.
Inconvenientes de usar mecánismos como los
semáforos. Basado en variables globales (impide el
diseño MODULAR y reduce la ESCALABILIDAD). Las
operaciones se encuentran dispersas y NO protegidas
(posibilidad de errores).
regiones criticas
solución de mas alto nivel que
los semáforos, se pueden
implementar sobre semáforos
Monitores
solución de mas alto nivel que las otras
soluciones y se pueden implementar en
algunos lenguajes orientados a objetos
(JAVA, PYTHON).
FUNCIONAMIENTO
COMUNICACIÓN
Cuando un proceso necesita OPERAR sobre un recurso
compartido deberá realizar una llamada a uno de los
procedimientos exportados. Cuando el proceso esta
ejecutando el procedimiento decimos que esta dentro
del monitor
EXCLUSIÓN MUTUA
Si un proceso esta dentro del monitor ningún otro
proceso podrá entrar, hasta que el otro proceso que
esta dentro termine
SON OBJETOS PASIVOS
Después de ejecutar el código de inicialización,
un monitor es un objeto pasivo y el código de
sus procedimientos solo se ejecuta cuando
estos son invocados.
INSTANCIACIÓN
Para cada recurso compartido se tendría que definir un
monitor. Para recursos con estructura y comportamiento
idéntico podemos instanciar de forma parametrizada
tantas veces como recursos se quiera controlar.
COLA PARA E.M
si un proceso esta DENTRO y otro proceso intenta
ejecutar un procedimiento del monitor este
proceso se queda bloqueado en la cola del monitor.
Cuando un proceso ABANDONA se desbloquea un
proceso de la cola, que ya puede entrar al monitor.
Si la cola del monitor esta VACÍA el monitor está LIBRE
y el primer proceso que ejecute una llamada a uno de
sus procedimientos entrará al monitor. Para garantizar
la VIVACIDAD del sistema, la planificación DE LA
COLA debe seguir una política FIFO
FORMA parte del ESTADO del monitor
DEFINICION
PROPIEDADES
EXCLUSIÓN MUTUA
en el acceso a los
procedimientos
E.M garantizada por definición. La
IMPLEMENTACION garantiza que
NUNCA 2 procesos estarán
ejecutando simultáneamente algún
procedimiento del monitor
VENTAJAS sobre
los semáforos
Variables protegidas
acceso estructurado
Exclusión mutua garantizada.
SINTAXIS
COMPONENTES
variables
permanentes
almacenan el estado del
recurso compartido
procedimientos internos o
procedimientos exportados
manipulan las variables
permanentes
código de
inicialización
Se inicializa las variables permanentes.
se ejecuta una única vez
VARIABLES CONDICION
Permite: *definir objetos abstractos compartidos*. Garantizar
el acceso exclusivos a las variables e implementar
sincronización. El *recurso compartido* se percibe como un
objeto. *Acceso estructurado y encapsulación*: se accede al
recurso mediante un conjunto de operaciones. El usuario
ignora la(s) variable (s) que representan al recurso y la
implementación de las las operaciones. asociadas
SINCRONIZACIÓN
VARIABLES CONDICIÓN (señales)
debe declararse una vble condición
para cualquier condición lógica de
SINCRONIZACIÓN. No tiene valor
asociado (No requiere inicialización).
representan colas. mas de un proceso
puede estar dentro del monitor
aunque solo uno estará ejecutándose.
COLAS DE CONDICIÓN
OPERACIONES
cond.wait()
cond.signal()
cond.queue()
Propiedad FIFO
signal reactivara al
proceso que lleve más
tiempo esperando
evita la inanición. Ningun
efecto sobre la logica del
programa solo mejoran las
caracteristicas
dependientes del
TIEMPO
CON PRIORIDAD
Usa colas FIFO.
cond.wait(PRIORIDAD: Integer).
Tras bloqueo se ordena a los
procesos en la cola por
PRIORIDAD. cond.Signal reanuda
al proceso con volor mas bajo de
PRIORIDAD
SEMANTICA
SEÑALAR Y CONTINUAR
Proceso señalador continua su ejecución dentro del monitor
hasta que sale o se bloquea. AL continuar dentro del monitor el
proceso señalador podría hacer falsa la condicion lógica por la
que esperaba el proceso señalado. Esta semántica OBLIGA a
programar la operación wait en un bucle
SEÑALAR Y SALIR
El proceso señalador sale del monitor
despues de ejecutar cond.signal. Esta
semántica condiciona el ESTILO de
progrmación ya que obliga a colocar
SIEMPRE la operación signal como última
instrucción
SEÑALAR Y ESPERAR
El proceso señalador se bloquea justo
despues de ejecutar la operación signal.
El proceso señalado entra de forma
inmediata al monitor. El proceso
señalador entra en la cola de procesos
del monitor. Es una semántica INJUSTA
SEÑALAR Y ESPERA URGENTE
Esta solución intenta corregir el problema de la falta de
EQUITATIVIDAD de (SS) El proceso señalador se bloquea
justo despues de ejecutar la operación signal. El proceso
señalado entra de forma inmediata al monitor. El proceso
señalador entra en una nueva cola de procesos que esperan
para acceder al monitor (cola de procesos urgentes)
POTENCIA EXPRESIVA: todas las semánticas son
capaces de resolver los mismos problemas.
FACILIDAD DE USO: la semántica SS condiciona el
estilo de programación. EFICIENCIA: las semánticas
SE y SU resultan ineficiente "suponiendo un
bloqueo innecesario -> doble cambio de contexto
en CPU" la semántica SC es un poco ineficiente al
obligar usar un bucle para cada instrucción signal
VERIFICACIÓN
IMPLEMENTACIÓN CON SEMÁFOROS
COLA DEL MONITOR: semáforo MUTEX. COLA PROC.
URGENTES: semáforo NEXT y el nÚmero de procesos en
la cola se contabiliza en la variable NEXT_COUNT
(necesaria para implementar la semántica SU) esta
implementación no permite llamadas recursivas
COLA DEL MONITOR.
COLA DE PROCESOS
URGENTES, COLA DE
PROCESOS
BLOQUEADOS
semáforos y monitores
son equivalentes en
potencia expresiva pero
los monitores facilitan el
desarrollo
ofrece interfaces de acceso a
estructuras de datos, ademas
se usa bloqueos de procesos