Sei sulla pagina 1di 35

Programacin Concurrente

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

Monitores. Operaciones adicionales


?

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

Monitores. Semntica de signal


?

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

Monitores. Semntica de signal


?

Posibilidades de ejecucin de signal


? ? ? ?

Signal y continue Signal y exit Signal y wait Signal y wait urgente

noviembre de 2001

Fernando Cuartero

22

Monitores. Semntica de signal


Signal y continue
?

? ?

? ?

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

Monitores. Semntica de signal


Signal y exit
?

? ? ?

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

Monitores. Semntica de signal


Signal y wait
?

? ?

? ?

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

Monitores. Semntica de signal


Signal y wait urgente
?

? ?

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

Monitores. Semntica de signal

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

Monitores. Semntica de signal. Ejemplo


monitor Semaforo1 integer s:= 0; condition pos; procedure P() if s=0 then wait (pos); s := s-1; end; procedure V() s := s+1; signal (pos); end;

Implementacin de semforos FIFO. Funciona con semntica SW. No funciona en semntica SC


noviembre de 2001 Fernando Cuartero 28

Monitores. Semntica de signal. Ejemplo


monitor Semaforo2 integer s:= 0; condition pos; procedure P() while s=0 do wait (pos); s := s-1; end; procedure V() signal (pos); s := s+1; end; If se convierte en while

se invierte el orden

Implementacin de semforos no FIFO. Funciona con semntica SC. No funciona en semntica SW


noviembre de 2001 Fernando Cuartero 29

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
? ?

Liberamos la exclusin mutua en M2 Pero se libera en M1?

Mantener la exclusividad en M1 parece ms razonable


?

Aumenta la posibilidad de deadlock (si M2 accede a M1)

Liberar M1 implica volver a competir por l en el retorno


Fernando Cuartero 30

noviembre de 2001

El problema del productor consumidor


Solucin al problema con monitores
monitor PC integer buffer[T]; condition notfull, notempty; procedure deposit( ) begin if (size = N) then wait(notfull); deposit ; signal(notempty); end procedure fetch( ) begin if (size = 0) then wait(notempty ); fetch; signal (notfull); end begin end

noviembre de 2001

Fernando Cuartero

31

El problema de los lectores y escritores


Solucin al problema con monitores
monitor rw integer nr := 0; nw := 0; condition Okread, Okwrite ; procedure pet_read() while nw > 0 do wait (Okread); nr := nr+1; end;

procedure pet_write () while nr > 0 or nw > 0 do wait(Okread); nw := nw+1; end;

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

El problema del barbero dormiln


Solucin al problema con monitores
monitor Barbera ; integer barbero := 0; espera := 0; abierto :=0; condition condition condition condition barbero_libre; silla_ocupada; puerta_abierta; cliente_sale;

...
noviembre de 2001 Fernando Cuartero 33

El problema del barbero dormiln


Solucin al problema con monitores

...
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

El problema del barbero dormiln


Solucin al problema con monitores

...
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