Vous êtes sur la page 1sur 32

Tema 3.

Monitores

Programacin Concurrente
Depto. de Lenguajes y Sistemas Informticos Universidad de Granada

Contenidos
1. Concepto de Monitor
1.1. Fundamento terico de los monitores 1.2. Sintaxis de los monitores 1.3. Exclusin mutua con monitores 1.4. Instanciacin de monitores

2. Sincronizacin en Monitores
2.1. Primitivas de sincronizacin en monitores 2.2. Efecto de las operaciones sincronizacin sobre la exclusin mutua del monitor 2.3. Equivalencia entre semforos y monitores 2.4. Problemas paradigmticos resueltos con monitores

1. Concepto de Monitor
1.1. Fundamento terico de los monitores
Inconvenientes mecanismos como los semforos:
Basados en variables globales No modular. Uso y funcin de las variables no explcito. Operaciones sobre variables recurso dispersas y no protegidas. No Acceso estructurado ni encapsulacin Fuente de errores. Definir objetos abstractos compartidos (una coleccin de datos y procedimientos asociados que se comparten por varios procesos). Garantizar acceso exclusivo a datos e implementar sincronizacin.

Monitor (Hoare 1974) : Mecanismo de alto nivel que permite

Monitor = Encapsulacin
Definicin recurso (datos). Operaciones de Manipulacin (procedims.)

Recurso: Se percibe como un mdulo al que se accede concurrentemente. El usuario ignora detalles de implementacin del recurso y de las operaciones asociadas.

1. Concepto de Monitor
1.1.1. Centralizacin de funciones crticas.
Origen: S.O. concurrente Monitor monoltico Programa que centraliza las funciones crticas (asig./planif. recursos) del sistema. Soportados por facilidades hardware: Ejecucin en modo ininterrumpido (E.M.). Acceso a posiciones de memoria privilegiadas. Ejecucin de instrucciones privilegiadas. Monitor: Versin descentralizada del monitor original. Cada monitor tiene: Una funcin especfica. Datos e instrucciones propias. Ejemplo: M1 : nico monitor que accede a v1 asegura E.M. ya que ser ininterrumpible (la entrada al monitor de un proceso excluye la entrada de otros). nico procesamiento sobre v1 programado en M1. Diferentes monitores (o instancias de un monitor) para diferentes tareas. Mayor Eficiencia (+ Concurrencia) Mayor Robustez: Modularidad

1. Concepto de Monitor
1.1.2. Estructuracin en el acceso a los datos.
Definicin tipos para las operaciones y los datos (T.A.D.). odular: Paradigma de Programacin M Mdulo: Conjunto de procedimientos relacionados + datos. Principio de Ocultacin de datos: Hacer local al mdulo todo lo que no debe ser visible. Ejemplo: Mdulo de pila. Resolver: Interfaz de usuario: procedimientos push y pop. Representacin (p.e. array) slo accedida mediante interfaz. Inicializacin antes de uso. Lenguajes de Programacin Dirigida a Objetos Clase.

1. Concepto de Monitor
1.2. Sintaxis de los monitores
Estructura de un monitor de nombrename y procedimientos op1,...,opN: Monitor name; var ... Declaracin de variables permanentes
procedure op1 (...); var ... Declaracin de variables locales a op1 { ... Cdigo que implementa op1 } ... ... ... procedure opN (...); var ... Declaracin de variables locales a opN { ... Cdigo que implementa opN } begin ... Cdigo para inicializar variables permanentes end.

1. Concepto de Monitor
1.2.1. Proteccin de los datos en el monitor. mbito variables permanentes del monitor : Cdigo monitor (procedimientos y cod. inicializacin). Acceso variables permanentes: slo dentro de los procedimientos. Procedimientos slo acceden: Variables permanentes Variables locales Valores variables permanentes se mantienen entre diferentes ejecuciones de los procedimientos. Comunicacin monitor-mundo exterior: A travs de los parmetros de los procedimientos.

1. Concepto de Monitor
1.2.2. Procedimientos del Monitor. Comunes a todos los procesos del sistema. Nueva llamada proced. Nuevos valores parmetros y variables locales. Sintaxis: nombremonitor.nombreprocedimiento(parmetros_reales);

1.2.3. Cdigo de inicializacin Ejecucin slo 1 vez: Inicializa vars. Permanentes. Tras Ejecucin: Monitor = objeto pasivo (datos + proceds.) nica forma ejecutar monitor: llamar proced.

1. Concepto de Monitor
1.3. Exclusin mtua con monitores
Acceso al monitor en E.M. Slo un proceso en un momento dado puede ejecutar un procedimiento Subsiguientes llamadas esperan finalizacin. Violacin podra tener efectos caticos sobre vars. Ventajas sobre Semforos (soluc. no estructurada): Proteccin Variables: evita interferencias exteriores Estructuracin acceso: Espera y sealizacin se programan dentro monitor. Si el monitor es correcto, lo ser cada instancia utilizada por los procesos. E.M. garantizada automticamente No errores. Invariante: Define una relacin sobre los datos del monitor. Se mantiene siempre excepto cuando un procedimiento est ejecutndose. Se ha de cumplir antes de entrar y despus de salir. Se ha de reestablecer el invariante en procedimientos antes de devolver el control o suspender el proceso.

1. Concepto de Monitor
1.4. Instanciacin de monitores Permite declarar diversos monitores con estructura y comportamiento idnticos (Ej.: planificar varios recursos similares). Declaracin tipo monitor: Class Monitor nombre_clase .... ....... Instanciacin de monitores: monitor1, monitor2: nombreclase; Prctica: se permite declarar varias instancias e incluso conjuntos parametrizados de monitores. Implementacin con procedimientos reentrantes: Basta asignar nuevas instancias de las variables globales para cada instancia de un monitor.

2. Sincronizacin en Monitores
2.1. Primitivas de sincronizacin en monitores Sincronizacin: Facilidad de bloqueo-activacin de acuerdo a una condicin. Propsitos de las instrucciones de sincronizacin en semforos: Bloqueo-activacin Cuenta (representacin condicin) En monitores: Slo Bloqueo-activacin Representacin condicin mediante datos protegidos del monitor

2. Sincronizacin en Monitores
2.1. Primitivas de sincronizacin en m onitores (cont.) Ejemplo de monitor: Planificador de un nico recurso (sem. binario)
monitor recurso; var ocupado: boolean; noocupado: condicion; procedure adquirir; {if ocupado then noocupado.wait; ocupado := true} procedure liberar; {ocupado := false; noocupado.signal;} begin ocupado := false /* valor inicial*/ end;

2. Sincronizacin en Monitores
2.1.1. Semntica de las operaciones

Wait: "estoy esperando a que algo (condicin) ocurra". Bloquea proceso.

Signal: "estoy sealando que algo (condicin) ha ocurrido" . Reactiva un proceso bloqueado en esa condicin.

Responsabilidad del programador que el proceso ejecute: Wait: cuando algo (condicin) no se d Signal: Cuando la condicin acabe de activarse.

2. Sincronizacin en Monitores
2.1.2. Variables de condicin o seales
Ms de una razn para esperar: representan distintas condiciones Deben de ser diferenciadas por wait y signal. Nuevo tipo de variable: Variable de condicin o seal. Sin valor almacenado (ni V, ni F). Una variable condicin por cada razn de bloqueo. Operaciones Nombre_variable_condicin.wait Nombre_variable_condicin.signal Representacin variable condicin Cola (inicialmente vaca) de procs esperando en condicin. Invisible a procs. Ms de un proceso puede estar dentro del mismo monitor, aunque slo uno ejecutndose (resto bloqueados en variables condicin).

2. Sincronizacin en Monitores
2.1.3. Propiedad FIFO de las colas de condicin Ms de un proc. esperando en condicin condicin.signal reactivar el proc. que lleve ms tiempo esperando.

Cada proc. en cola obtendr eventualmente su turno No inanicin.

condicin.queue Funcin booleana = V Hay algn proc. esperando en condicin.

2. Sincronizacin en Monitores
2.1.4. Colas de condicin con prioridad Propiedad FIFO: evita inanicin. Mayor control sobre estrategia de planificacin: prioridad del proceso en espera como nuevo parmetro. Nombre_var_condicin.wait (prioridad:integer); Formato: Signal reanuda proceso que especific el valor ms bajo de prioridad. Precaucin diseo monitor: Evitar riesgos como la inanicin. Justificacin: Ningn efecto sobre la lgica del programa: Funcionamiento similar con/sin colas de prioridad. Slo mejora caractersticas dep. del tiempo. Ordenacin automtica cola: tcnica de planificacin rpida y sencilla, excepto si la cola es muy larga. Almacenamiento requerido por proceso: una palabra

2. Sincronizacin en Monitores
2.1.4. Colas de condicin con prioridad (cont.) Ejemplo: Reloj con alarma. El proc. llamador se retardan unidades de tiempo.
monitor despertador; var ahora: integer; despertar: condicion; procedure despiertame (n: integer); var alarma: integer; {alarma := ahora + n; while ahora<alarma do despertar.wait (alarma); despertar.signal; /* Por si otro proceso coincide en la alarma */ } procedure tick; {ahora := ahora + 1; despertar.signal;} begin ahora := 0; end;

2. Sincronizacin en Monitores
2.1.4. Colas de condicin con prioridad (cont.) Ejemplo: Asignacin recurso "siguiente trabajo el ms corto". monitor asignador; var libre: boolean; turno: condicion; procedure peticin (tiempo: integer) ; {if not libre then turno.wait (tiempo); libre:=false;} procedure liberar; {libre := true; turno.signal;} begin libre:= true; end;

2. Sincronizacin en Monitores
2.2. Efecto de las operaciones de sincr. sobre la E.M. del monitor
Requisito de reanudacin inmediata
Un Signal deber ir seguida inmediatamente por la reanudacin de un proceso en espera, sin que exista la posibilidad de que intervenga la llamada a un procedimiento de un tercer proceso.

nica forma de garantizar que procesos en espera puedan adquirir un recurso que acaba de ser liberado Evita inanicin. Propuesta de Hoare
Un proceso suspendido debido a ejecucin de signal, entrar en una cola de suspendidos en Signal. Cada proceso antes de salir del monitor y liberar la E.M., comprueba si hay procesos en esta cola, si los hay, heredarn la E.M. Los procesos suspendidos al ejecutar una operacin signal tienen prioridad sobre los que intentan entrar.

Propuesta de Brinch-Hansen

Signal slo como ltima instruccin del cuerpo. Evita cola de suspendidos en signal + Eficiencia

2. Sincronizacin en Monitores
2.2.1. Problema de Anidacin de llamadas en monitores Sistema estructurado como coleccin jerrquica de monitores:
procs. de un monitor pueden llamar a otro

Problema:

Una llamada de monitor anidada se suspende en el ltimo monitor. La E.M. en el ltimo se abandonar pero no en el monitor desde el que se llama. Los procesos que intenten llamar a procedimientos de cualquier monitor de la cadena se bloquearn. Menor concurrencia Menor rendimiento.

2. Sincronizacin en Monitores
2.2.1.1. Problema de Anidacin. Propuestas de solucin a) Prohibir llamadas anidadas. b) Liberar exclusin mtua en todos los monitores implicados en la cadena y bloquear proceso.
Una vez sealado, el proceso necesitar readquirir el acceso exclusivo a todos los monitores. Requerir que el invariante del monitor se establezca antes de cualquier llamada que pueda bloquear.

c) Monitores = herramienta de estructuracin para recursos compartidos. E.M. slo forma de preservar integridad del recurso.
Hay casos en los cuales las operaciones de un monitor pueden ejecutarse concurrentemente sin efectos adversos. Definir construccin que permita especificar que ciertas operaciones se podrn ejecutar concurrentemente y la exclusin mtua se liberar.

2. Sincronizacin en Monitores
2.3. Equivalencia entre semforos y monitores
Los monitores pueden ser implementados por semforos.

Garantizar la E.M.de los cuerpos los procedimientos


Para cada monitor Semforo binario mutex (inic. a 1) para asegurar exclusin mtua entre los cuerpos de procedimientos.

mutex:bin_sem=1 ENTRADA Proc. P(mutex) SALIDA Proc. Normalmente V(mutex)

2. Sincronizacin en Monitores
2.3. Equivalencia entre sem foros y monitores (cont.) Propuesta de Hoare: Semforo urgente (inic. a 0) para cola de bloqueados en Signal Contador procs. esperando en urgente (conturgente, inic. a 0). Procesos que invocan un signal ejecutan: if (existen procs. bloqueados en wait) {conturgente ++; P(urgente) } Para liberar procs. bloqueados en signal, antes de liberar la exclusin mtua, cada proceso ejecuta: if conturgente>0 V(urgente) else V(mutex);

2. Sincronizacin en Monitores
2.3. Equivalencia entre semforos y monitores (cont.) Para cada variable condicin del monitor: Semforo semcondicin (inic. a 0) para cola de bloqueados en Wait Contador de n procs. esperando condicin (contcondicin inic. a 0).

condicin.signal

conturgente + +; if contcondicin>0 { V(semcondicin); P(urgente); } conturgente - - ;

condicin.wait

contcondicin + +; if conturgente>0 V(urgente) else V(mutex); P(semcondicin); contcondicin - -;

2. Sincronizacin en Monitores
2.3.1. Equivalencia entre semforos y monitores. Mejoras Salida del cuerpo de un procedimiento sin wait ni signal
conturgente no ha cambiado.

V(mutex)

Salida cuando signal es la ltima instruccin del cuerpo: if contcondicin > 0 V(semcondicin) (*) else if conturgente>0 V(urgente) else V(mutex); No hay otro wait o signal en el cuerpo (*) puede omitirse. Propuesta de Brinch-Hansen

signal ltima operacin del cuerpo conturgente y urgente se omiten Esta simplificacin sugiere que todas las operaciones signal deberan siempre ser la ltima operacin de un proc. del monitor.

2. Sincronizacin en Monitores
2.3.2. Semforos v.s. Monitores Equivalentes en potencia expresiva. Motivacin de uso Monitores: Claridad y fiabilidad. Caracterstica que no se puede implementar en semforos: Suposicin FIFO sobre la cola.

2. Sincronizacin en Monitores
2.4. Problemas paradigmticos resueltos con monitores
2.4.1. Productor/consumidor utilizando un buffer circular
program productorconsumidor; monitor buffercircular; CONST tamao=...; VAR b:array [0..tamao-1] of integer; in, out, n: integer; novacio, nolleno: condicion; procedure aadir (v:integer); {if (n==tamao) nolleno.wait; /* Espera a que no est lleno*/ b[in] = v; in = (in + 1) % tamao; n ++; novacio.signal;} procedure tomar(var v:integer); {if (n==0) novacio.wait; /* Espera a que no est vaco */ v = b[out]; out = (out + 1) % tamao; n --; nolleno.signal;} {in = out = n = 0}

2. Sincronizacin en Monitores
2.4.1. Productor/consumidor utilizando un buffer circular (cont.)
procedure productor; VAR v: integer; {while (true) {producir(v);aadir(v)} procedure consumidor; VAR v:integer; {while (true) {tomar(v);consumir(v) }

cobegin /* programa principal*/ productor; consumidor; coend; }

2. Sincronizacin en Monitores
2.4.2.Problema de los lectores/escritores sin prioridades (FIFO).
program lectoresescritores; monitor leerescribir; VAR lectores: integer; escribiendo: boolean; okleer, okescribir: condicion; procedure comenzarleer; {if (escribiendo or okescribir.queue) okleer.wait; lectores + +; okleer.signal} procedure finleer; {lectores - -; if (lectores==0) okescribir.signal;} procedure comenzarescribir; {if (lectores!=0 or escribiendo) okescribir.wait; escribiendo= true } procedure finescribir; {escribiendo = false; if (okleer.queue) okleer.signal else okescribir.signal } {lectores =0; escribiendo = false}

2. Sincronizacin en Monitores
2.4.2.Problema de los lectores/escritores sin prioridades (FIFO).cont.

procedure procesolector; { while (true) {comenzarleer; leerdatos; fin leer;} procedure procesoescritor; { while (true) { comenzarescribir; escribirdatos; finescribir } {cobegin procesolector; procesolector; ... procesoescritor; procesoescritor; ... coend; }

2. Sincronizacin en Monitores
2.4.3. Implementacin con semforos del productor/consum idor a Propuesta de Brinch Hansen(/*signal es la ltim instruccin*/
program productorconsumidor; CONST tamao=...; VAR b: array [0..tamao-1] of integer; in, out, n: integer; s: semaphore; /para E.M.*/ semnovacio, semnolleno: semaphore; /* binarios */ contnovacio, contnolleno: integer; procedure aadir (v:integer); { P(s); if (n==tamao) { contnovacio+ +; V(s); P(semnovacio); contnovacio --} b[in] = v; in := (in + 1) % tamao; n + +; if contnolleno>0 V(semnolleno) else V(s);} procedure tomar(var v:integer); { P(s); if (n==0) {contnolleno + +; V(s); P(semnolleno); contnolleno - -} v := b[out]; out := (out + 1) % tamao; n := -- ; if contnovacio>0 V(semnovacio) else V(s); }

2. Sincronizacin en Monitores
2.4.3. Implementacin con semforos del productor/consum idor procedure productor; var v: integer; {while (true) {producir(v); aadir(v)} procedure consumidor; var v:integer; {while (true) {tomar(v); consumir(v)} {in =out=n = 0; s = 1; contnolleno = semnolleno = 0; contnovacio = semnovacio = 0; cobegin productor; consumidor; coend;}

Vous aimerez peut-être aussi