Professional Documents
Culture Documents
MONITORES
noviembre de 2001
Fernando Cuartero
Monitores
Problema con las variables compartidas Cmo copiar un fichero?
noviembre de 2001
Fernando Cuartero
Monitores
? ? ?
Problema propuesto por Brinch-Hansen (1972) En la versin incorrecta, compartir s y t no funciona En la versin correcta no se comparten, as se evita el problema En general, si no es posible evitar compartir es necesario establecer mecanismos que garanticen las condiciones en que la comparticin es correcta
noviembre de 2001
Fernando Cuartero
Monitores
?
Con los semforos y RCC las variables compartidas son globales a todos los procesos Las sentencias que acceden a las variables compartidas pueden estar dispersas a lo largo del cdigo Para comprender el acceso a las variables compartidas es necesario inspeccionar todo el programa Para aadir un nuevo proceso es necesario tomar precauciones en el acceso a las variables compartidas a lo largo de todo el cdigo disperso Las RCC son ms estructuradas que los semforos, pero con un alto coste de eficiencia
Fernando Cuartero 4
noviembre de 2001
Monitores
?
C.A.R Hoare propuso en 1974 el concepto de MONITOR como una mejora al semforo
? ? ? ?
Herramienta al nivel del lenguaje, no del sistema Paquete encapsulando variables y procedimientos (clase) Asegura encapsulamiento y exclusin mutua La implementacin es casi tan eficiente como los semforos
noviembre de 2001
Fernando Cuartero
Monitores
?
Un monitor es una coleccin de variables compartidas (recursos), y procedimientos que operan sobre estos recursos. El acceso a los recursos se efecta en exclusin mutua
Proc Variable compartida Proc
Programa
noviembre de 2001
Fernando Cuartero
Monitores
monitor identificador; Declaraciones de variables; cdigo de initializacin; procedure op1(parameters); Declaracin de variables begin Implementacin de op1 end procedure opN(parameters); Declaracin de variables begin Implementacin de opN end begin ... end
noviembre de 2001 Fernando Cuartero 7
Monitores
Uso del monitor
noviembre de 2001
Fernando Cuartero
Monitores. Ejemplo
Acceso a la pantalla
noviembre de 2001
Fernando Cuartero
Monitores. Ejemplo
monitor SCREEN_ACCESS is procedure PUT (S : in STRING); end SCREEN_ACCESS; with ADA.TEXT_IO; monitor body SCREEN_ACCESS is procedure PUT (S : in STRING) is begin ADA.TEXT_IO.PUT (S); end PUT; end SCREEN_ACCESS;
noviembre de 2001
Fernando Cuartero
10
Monitores. Condiciones
?
? ?
PROBLEMA: Cmo expresar condiciones de sincronizacin con este paradigma? RESPUESTA: Introduciendo un mecanismo para suspender y reactivar procesos SUGERENCIA: Recuperar la idea de los semforos PROBLEMA: Pero un wait debe dejar que otro proceso realice el signal, por lo que hay que liberar la exclusin mutua
noviembre de 2001
Fernando Cuartero
11
Monitores. Condiciones
? ?
Variables Condicin con operaciones: wait(c) : Detiene la ejecucin SIEMPRE, a diferencia del wait de un semforo signal(c) : Desbloquea UN proceso detenido. La ejecucin del mismo est condicionada a la exclusin mutua Existe una cola de procesos por cada variable condicin
noviembre de 2001
Fernando Cuartero
12
Monitores. Condiciones
?
IDEAS CLAVE
?
? ? ?
Recuperar la filosofa de las operaciones wait y signal de los semforos Mantener el espritu de las regiones crticas Relajar el concepto de condicin de sincronizacin Separar los datos compartidos y sus operaciones del cdigo principal en un cdigo centralizado Establecer una estructura de datos abstracta con los datos compartidos y sus operaciones
noviembre de 2001
Fernando Cuartero
13
Monitores. Condiciones
noviembre de 2001
Fernando Cuartero
14
Ejemplo de monitor
monitor PC; condition space_avail, item_avail; integer count, N; procedure enter(i); begin if count = N then wait(space_avail); enter_item(i); count := count + 1; if count = 1 then signal(item_avail); end; procedure remove(i); begin if count = 0 then wait(item_avail); remove_item(i); count := count -1; if count = N - 1 then signal(space_avail); end; count := 0; N := 20; end monitor; noviembre de 2001 Fernando Cuartero procedure producer; begin while true do begin produce_item(i); PC.enter(i); end end; procedure consumer; begin while true do begin PC.remove(i); consume_item(i); end end;
15
Monitores
VENTAJAS
?
Uniformidad: El monitor provee una nica capacidad, la exclusin mutua, no existe la confusin de los semforos Modularidad: El cdigo que se ejcecuta en exclusin mutua est separado, no mezclado con el resto del programa Simplicidad: El programador no necesita preocuparse de las herramientas para la exclusin mutua Eficiencia de la implementacin: La implementacin subyacente puede limitarse fcilmente a los semforos
noviembre de 2001 Fernando Cuartero 16
Monitores
INCONVENIENTES
?
Separacin de la condicin: La primitiva de sincronizacin (condicin) parece primitiva comparada con el mecanismo de RCC. Puede producir errores Acoplamiento de operaciones: Las condiciones necesitan la cooperacin de dos procesos, uno que realice el wait y otro el signal. Es fcil cometer errores en este acoplamiento Interaccin de mltiples condiciones: Cuando el nmero de condiciones crece, y se hacen complicadas, la complejidad del cdigo crece de manera extraordinaria
noviembre de 2001 Fernando Cuartero 17
Monitores
RCC vs MONITORES
? ?
Las condiciones de un monitor son semforos unarios En una RCC la condicin B se reevala repetidamente para determinar el fin de una suspensin, mientras que en un monitor no se hace. Aunque puede ser necesario La expresin region C when B do S, se puede trasladar a
procedure P () if not B then wait(C); S; end;
noviembre de 2001 Fernando Cuartero 18
Monitores
RCC vs MONITORES
Ms estructurada la RCC
noviembre de 2001
Fernando Cuartero
19
empty(c): Devuelve cierto si la cola asociada a la condicin c est vaca wait(c,p): Detiene la ejecucin poniendo al proceso en la cola, pero con prioridad p, adelantando a otros procesos detenidos con menor prioridad minrank(c): Determina la menor prioridad de un proceso detenido en la condicin c.
noviembre de 2001
Fernando Cuartero
20
Problema:
? ? ? ?
El signal se ejecuta en exclusin mutua Permite a otro proceso su ejecucin Pero NO puede ejecutarse al mismo tiempo quin debe continuar la ejecucin?
noviembre de 2001
Fernando Cuartero
21
noviembre de 2001
Fernando Cuartero
22
? ?
? ?
Se ejecuta el signal y contina la ejecucin el proceso que ha invocado el signal Situacin ms fcil de implementar al no ser expulsora Problema: La ejecucin del signal se hace porque una condicin es cierta. Sin embargo no se garantiza que deje de serlo cuando le toque el turno al proceso despertado Puede ser necesario guardar las condiciones wait en un bucle Permite una operacin adicional: signal all Es el mecanismo usado en los monitores de java
noviembre de 2001 Fernando Cuartero 23
? ? ?
Se ejecuta el signal y el proceso abandona la ejecucin. Contina el proceso despertado Tiene una implementacin fcil Es la ms difcil de usar para el programador Se garantiza que la condicin es cierta para el proceso despertado El compilador debe comprobar que signal es la ltima instruccin ejecutada Es el mecanismo usado en Pascal Concurrente
Fernando Cuartero 24
noviembre de 2001
? ?
? ?
Se ejecuta el signal y el proceso abandona temporalmente la ejecucin, contina el proceso despertado Tiene una implementacin ms complicada Se garantiza que la condicin es cierta para el proceso despertado Es el mecanismo usado en Euclid y Modula Problema: Existen otra cola adicional, la de los procesos detenidos en signal
Fernando Cuartero 25
noviembre de 2001
? ?
Se ejecuta el signal y el proceso abandona temporalmente la ejecucin, contina el proceso despertado. El proceso detenido en signal tiene prioridad cuando aqul acabe Tiene una implementacin mas complicada Se garantiza que la condicin es cierta para el proceso despertado Es el mecanismo usado en Pascal Plus
noviembre de 2001
Fernando Cuartero
26
Todas las versiones tienen la misma potencia descriptiva Dada una versin de signal, sea cual sea, es posible implementar otra diferente Es necesario conocer la semntica de signal para garantizar resultados No es un detalle que se pueda dejar oculto
noviembre de 2001
Fernando Cuartero
27
se invierte el orden
Monitores
EL PROBLEMA DE LA LLAMADA EN MONITOR ANIDADO Considerar un proceso en un monitor M1, llama a un monitor M2, y se bloquea en una condicin
? ?
noviembre de 2001
noviembre de 2001
Fernando Cuartero
31
procedure lib_write () procedure lib_read() nw := nw-1; nr := nr-1; signal (Okwrite ); if nr = 0 then signal (Okwrite ); Signal _all(Okread); end; end;
noviembre de 2001
Fernando Cuartero
32
...
noviembre de 2001 Fernando Cuartero 33
...
procedure quiere_cortar(); -- invocada por el cliente while barbero=0 do wait(barbero_libre); barbero := barbero -1; espera := espera+1; signal (silla_ocupada); while abierto=0 do wait(puerta_abierta); abierto := abierto -1; signal (cliente_sale); end;
...
noviembre de 2001 Fernando Cuartero 34
...
procedure sig_cliente(); -- invocada por el barbero barbero := barbero+1; signal(barbero_libre); while espera=0 do wait(silla_ocupada); espera := espera -1; end; procedure fin_corte(); -- invocada por el barbero abierto := abierto+1; signal(puerta_abierta); while abierto>0 do wait(cliente_sale); end;
noviembre de 2001 Fernando Cuartero 35