Sistemas Operativos Tema 6 Control de la concurrencia

  • Slides: 59
Download presentation
Sistemas Operativos Tema 6: Control de la concurrencia 1

Sistemas Operativos Tema 6: Control de la concurrencia 1

Tema 6: Control de la Concurrencia Índice: 1. Cooperación entre procesos 2. Estrategias optimista

Tema 6: Control de la Concurrencia Índice: 1. Cooperación entre procesos 2. Estrategias optimista y pesimista 3. Métodos de bajo nivel 4. Semáforos 5. Mensajes 6. Monitores 2

Tema 6: Control de la Concurrencia Índice: 1. Cooperación entre procesos 2. Estrategias optimista

Tema 6: Control de la Concurrencia Índice: 1. Cooperación entre procesos 2. Estrategias optimista y pesimista 3. Métodos de bajo nivel 4. Semáforos 5. Mensajes 6. Monitores 3

Tema 6: Control de la Concurrencia 1. Cooperación entre Procesos v Procesos frecuentemente cooperan

Tema 6: Control de la Concurrencia 1. Cooperación entre Procesos v Procesos frecuentemente cooperan en la realización del alguna tarea v Procesos que cooperan, suelen compartir algún tipo de recurso v Recurso= cualquier entidad software o hardware: Ø Dispositivos Ø Estructuras de datos: • • Variables Archivos Estructuras de datos compuestas … 4

Tema 6: Control de la Concurrencia 1. Cooperación entre Procesos v Formas de acceso

Tema 6: Control de la Concurrencia 1. Cooperación entre Procesos v Formas de acceso a los recursos compartidos: Ø Concurrencia • Acceso simultáneo directo al recurso Ø Sincronización • Uso de mecanismos de coordinación para ordenar acceso Ø Comunicación • Sólo un proceso accede directamente a recurso • Demás procesos le envían peticiones (cliente/servidor) v La modificación concurrente del estado de un recurso puede dar lugar a condiciones de carrera! 5

1. Cooperación entre procesos Tema 6: Control de la Concurrencia P 1 P 2

1. Cooperación entre procesos Tema 6: Control de la Concurrencia P 1 P 2 … tabla[i]= e 1; i= i+1; . . . tabla e 2 e 1 i=0 i=1 i=2 0 1 2 … tabla[i]= e 2; i= i+1; . . . 3 v Condición de carrera: corrupción del estado de un recurso causada por su actualización concurrente por parte de varios procesos (o hilos). 6

Tema 6: Control de la Concurrencia 1. Cooperación entre Procesos v Sección crítica: porción

Tema 6: Control de la Concurrencia 1. Cooperación entre Procesos v Sección crítica: porción de código en la que se accede a un recurso compartido. v Exclusión mutua: garantizar que en cada momento se pueda estar ejecutando como máximo una sección crítica asociada a un recurso. P 1 … <protocolo de entrada> tabla[i]= e 1; i= i+1; <protocolo de salida>. . . P 2 tabla 0 i=0 1 2 … <protocolo de entrada> tabla[i]= e 2; i= i+1; <protocolo de salida>. . . 3 7

Tema 6: Control de la Concurrencia Índice: 1. Cooperación entre procesos 2. Estrategias optimista

Tema 6: Control de la Concurrencia Índice: 1. Cooperación entre procesos 2. Estrategias optimista y pesimista 3. Métodos de bajo nivel 4. Semáforos 5. Mensajes 6. Monitores 8

Tema 6: Control de la Concurrencia 2. Estrategias optimista y pesimista v Control Pesimista:

Tema 6: Control de la Concurrencia 2. Estrategias optimista y pesimista v Control Pesimista: Ø Consiste en garantizar la exclusión mutua en el acceso a los recursos. v Control Optimista: Ø No se fuerza exclusión mutua → pueden darse condiciones de carrera!! Ø Si se da una condición de carrera → se detecta y se soluciona. Ø Protocolo de entrada típico: salvar estado Ø Protocolo de salida típico: • Comprobar si ha habido condición de carrera • En caso afirmativo, restaurar estado y repetir 9

Tema 6: Control de la Concurrencia 2. Estrategias optimista y pesimista v Control Pesimista:

Tema 6: Control de la Concurrencia 2. Estrategias optimista y pesimista v Control Pesimista: Ø Ventajas: • Siempre es viable Ø Inconvenientes: • Fuerza esperas (posiblemente innecesarias) • Algunos métodos pueden ser muy drásticos v Control Optimista: Ø Ventajas: • Mayor grado de paralelismo Ø Inconvenientes: • Será posible o no en función de la naturaleza del recurso • Si hay muchos procesos concurrentes, el nº de conflictos puede aumentar y por tanto el nº de repeticiones 10

Tema 6: Control de la Concurrencia 2. Estrategias optimista y pesimista v ¿Control Pesimista

Tema 6: Control de la Concurrencia 2. Estrategias optimista y pesimista v ¿Control Pesimista u Optimista? Depende de… Ø Frecuencia y variabilidad de la probabilidad de condiciones de carrera Ø Coste de la repetición del cálculo v Optimista: idóneo si… Ø Coste de repetición del cálculo es pequeño, y Ø Previsible que hayan pocas condiciones de carrera v Pesimista: idóneo si… Ø Coste de repetición del cálculo es grande, y Ø Previsible que hayan muchas condiciones de carrera, o se espera variabilidad en su frecuencia 11

Tema 6: Control de la Concurrencia Índice: 1. Cooperación entre procesos 2. Estrategias optimista

Tema 6: Control de la Concurrencia Índice: 1. Cooperación entre procesos 2. Estrategias optimista y pesimista 3. Métodos de bajo nivel 4. Semáforos 5. Mensajes 6. Monitores 12

Tema 6: Control de la Concurrencia 3. Métodos de bajo nivel v Procesos de

Tema 6: Control de la Concurrencia 3. Métodos de bajo nivel v Procesos de usuario: siempre usarán mecanismos de control de concurrencia provistos por SO v ¿Y cuando no existen dichos mecanismos? Ø Por ejemplo, al construir el núcleo del SO v Métodos de bajo nivel para garantizar exclusión mutua: v Uso exclusivo del procesador • • Enmascarado de interrupciones Suspensión de la conmutación v Métodos de espera ocupada 13

Tema 6: Control de la Concurrencia 3. Métodos de bajo nivel Enmascarado de Interrupciones

Tema 6: Control de la Concurrencia 3. Métodos de bajo nivel Enmascarado de Interrupciones v Si no hay interrupciones→no hay apropiación v Inconvenientes: deshabilitar_interrupciones(); <protocolo de entrada> … [ sección crítica ] … <protocolo de salida> habilitar_interrupciones(); Ø Mientras interrupciones deshabilitadas, • Control absoluto de la máquina • No se atienden dispositivos • Puede que no se refresque la memoria • Sistema en peligro! Ø ¿Y la NMI? Ø ¿Y si hay otros procesadores? 14

Tema 6: Control de la Concurrencia 3. Métodos de bajo nivel Suspensión de la

Tema 6: Control de la Concurrencia 3. Métodos de bajo nivel Suspensión de la conmutación v Pedir a planificador que suspenda conmutación hasta nueva orden suspender_conmutacion(); <protocolo de entrada> … v ¡Ya no hay problemas con… [ sección crítica ] Ø Dispositivos Ø Refresco de memoria … <protocolo de salida> reanudar_conmutacion(); v Inconvenientes: Ø Posibilidad condición de carrera con rutinas de interrupción Ø Tampoco es adecuado para multiprocesadores Ø ¡Cuidado en sistemas con organización micronúcleo! 15

Tema 6: Control de la Concurrencia 3. Métodos de bajo nivel Espera ocupada (o

Tema 6: Control de la Concurrencia 3. Métodos de bajo nivel Espera ocupada (o espera activa) v Esperar a que algo ocurra realizando continuas comprobaciones. v Método habitual: Cerrojos Ø Variable compartida que indica si recurso está libre u ocupado: Vars. compartidas: int cerrojo=cerrado; while(cerrojo==cerrado); <protocolo de entrada> cerrojo= cerrado; … [ sección crítica ] … <protocol cerrojo= salida> abierto; v ¡Fallo! Ø No hay atomicidad entre comprobación y cierre 16

Tema 6: Control de la Concurrencia 3. Métodos de bajo nivel v Concepto de

Tema 6: Control de la Concurrencia 3. Métodos de bajo nivel v Concepto de atomicidad entre la comprobación de una condición y su acción asociada: Ø Cuando se realiza una acción en base a una comprobación previa de una condición, se debe garantizar que la condición aún se cumple P 1 … while(cerrojo==cerrado); cerrojo= cerrado; <sección crítica> P 2 cerrojo=abierto cerrojo=cerrado … while(cerrojo==cerrado); cerrojo= cerrado; <sección crítica> v Concepto de espera guardada: una espera que termina cuando se cumple (o deja de cumplir) una condición 17

Tema 6: Control de la Concurrencia 3. Métodos de bajo nivel v Solución: instrucciones

Tema 6: Control de la Concurrencia 3. Métodos de bajo nivel v Solución: instrucciones TS v Formato: TS operando Ø Z ← operando == 0 Ø operando ← 1 prot_entrada: TS cerrojo BNF prot_entrada RETN v Familia x 86: instrucción XCHG v Formato: XCHG registro, direccion Ø registro ↔ dirección Ø Si otros master en bus: prefijo lock prot_entrada: MOV AL, 1 lock XCHG AL, cerrojo CMP AL, 0 JNE prot_entrada RET 18

Tema 6: Control de la Concurrencia 3. Métodos de bajo nivel Problemas de la

Tema 6: Control de la Concurrencia 3. Métodos de bajo nivel Problemas de la espera ocupada v Desperdicio de tiempo de CPU. Sólo admisible en: Ø Procesadores dedicados Ø Sistemas monoprogramados Ø En el núcleo del SO, si se puede garantizar que tiempo de espera es suficientemente inferior a tiempo de conmutación v Si se coordinan procesos con diferentes prioridades: P 1 : while(cerrojo==cerrado); cerrojo=cerrado; : : : cerrojo=abierto; : P 2 cerrojo=abierto cerrojo=cerrado Prioridad(P 2) > Prioridad(P 1) : while(cerrojo==cerrado); cerrojo=cerrado; : : : cerrojo=abierto; : 19

Tema 6: Control de la Concurrencia Índice: 1. Cooperación entre procesos 2. Estrategias optimista

Tema 6: Control de la Concurrencia Índice: 1. Cooperación entre procesos 2. Estrategias optimista y pesimista 3. Métodos de bajo nivel 4. Semáforos 5. Mensajes 6. Monitores 20

Tema 6: Control de la Concurrencia 4. Semáforos 1. Concepto de semáforo 2. Implementación

Tema 6: Control de la Concurrencia 4. Semáforos 1. Concepto de semáforo 2. Implementación de semáforos 3. Semáforos binarios 4. Semáforos en la práctica 21

Tema 6: Control de la Concurrencia 4. Semáforos 1. Concepto de semáforo 2. Implementación

Tema 6: Control de la Concurrencia 4. Semáforos 1. Concepto de semáforo 2. Implementación de semáforos 3. Semáforos binarios 4. Semáforos en la práctica 22

Tema 6: Control de la Concurrencia 4. 1 Concepto de semáforo v E. W.

Tema 6: Control de la Concurrencia 4. 1 Concepto de semáforo v E. W. Dijkstra (1. 965) v Semaforo = tipo abstracto de datos, que encapsula: Ø Un contador entero Ø Una lista de procesos bloqueados en el semáforo v Operaciones sobre semáforos: Ø down(s): • si contador = 0, proceso se bloquea en semáforo • decrementa contador Ø up(s): • Incrementa contador • Si había algún proceso bloqueado en semáforo, reanuda uno v ¡Ambas operaciones son atómicas! 23

Tema 6: Control de la Concurrencia 4. 1 Concepto de semáforo v Utilidad: proteger

Tema 6: Control de la Concurrencia 4. 1 Concepto de semáforo v Utilidad: proteger acceso a recursos compartidos Ø A cada recurso compartido, se asocia semáforo con valor inicial 1. Ø Secciones críticas asociadas al recurso: • Protocolo de entrada: down(s) • Protocolo de salida: up(s) v Ventajas: Ø Robustez • Comprobación/Acción son atómicas Ø Procesos que se coordinan no necesitan conocerse entre sí • Sólo necesitan conocer semáforos que comparten Ø Flexibilidad • Tanto semáforos como recursos compartidos 24

Tema 6: Control de la Concurrencia 4. Semáforos 1. Concepto de semáforo 2. Implementación

Tema 6: Control de la Concurrencia 4. Semáforos 1. Concepto de semáforo 2. Implementación de semáforos 3. Semáforos binarios 4. Semáforos en la práctica 25

Tema 6: Control de la Concurrencia 4. 2 Implementación de semáforos struct s_semaforo {

Tema 6: Control de la Concurrencia 4. 2 Implementación de semáforos struct s_semaforo { int contador; listaproc bloqueados; } struct nodoproc { PID proceso; struct nodoproc *sig; } typedef struct s_semaforo *semaforo; typedef struct nodoproc *listaproc void down(semaforo s) { if (s->contador>0) s->contador--; void up(semaforo s) { else if (lista_vacia(&s->bloqueados)) { s->contador++; insertar_en_lista (&s->bloqueados, getpid()); else bloquear_proceso(); { } int pid=sacar_de_lista(&s->bloqueados); } semaforo Crear. Semaforo(int valor); reanudar_proceso(pid); } void Destruir. Semaforo(semaforo s); } 26

Tema 6: Control de la Concurrencia 4. Semáforos 1. Concepto de semáforo 2. Implementación

Tema 6: Control de la Concurrencia 4. Semáforos 1. Concepto de semáforo 2. Implementación de semáforos 3. Semáforos binarios 4. Semáforos en la práctica 27

4. 3 Semáforos binarios Tema 6: Control de la Concurrencia v Caso particular: semáforos

4. 3 Semáforos binarios Tema 6: Control de la Concurrencia v Caso particular: semáforos con sólo dos estados: Ø Abierto (true, 1, …) Ø Cerrado (false, 0, …) v Operaciones sobre semáforos binarios: Ø down(s): • si estado=cerrado, proceso se bloquea en semáforo • estado=cerrado Ø up(s): • estado=abierto • Si había algún proceso bloqueado en semáforo, reanuda uno v Todo problema que se puede resolver con semáforos contadores, se puede resolver también con binarios 28

Tema 6: Control de la Concurrencia 4. Semáforos 1. Concepto de semáforo 2. Implementación

Tema 6: Control de la Concurrencia 4. Semáforos 1. Concepto de semáforo 2. Implementación de semáforos 3. Semáforos binarios 4. Semáforos en la práctica 29

4. 4 Semáforos en la práctica Tema 6: Control de la Concurrencia Productor/Consumidor con

4. 4 Semáforos en la práctica Tema 6: Control de la Concurrencia Productor/Consumidor con semáforos productor consumidor while(true) { producir_elemento(); down(vacias); down(excmut); down(vacias); tabla 0 1 ins 2 contador=0 ext while(true) { down(llenas); down(excmut); retirar_elemento(); 3 almacenar_elemento(); up(excmut); up(llenas); } excmut=1 up(excmut); up(vacias); N-1 vacias=N consumir_elemento(); } llenas=0 30

Tema 6: Control de la Concurrencia 4. 4 Semáforos en la práctica v Reglas

Tema 6: Control de la Concurrencia 4. 4 Semáforos en la práctica v Reglas generales: Ø Si un semáforo controla sección crítica, • Cerrar lo más tarde posible • Abrir tan pronto como sea posible Ø Secciones críticas anidadas: • Evitar en la medida de lo posible • down(a) y despues down(b)→ admisible si proceso que hace up(b) no hace down(a) v Selección proceso desbloqueado por up: Ø No especificado Ø Depende de implementación: • FIFO, aleatorio, prioridad… Ø Los programas nunca deben depender de este detalle! 31

Tema 6: Control de la Concurrencia 4. 4 Semáforos en la práctica v Granularidad:

Tema 6: Control de la Concurrencia 4. 4 Semáforos en la práctica v Granularidad: nº de recursos controlados por cada semáforo Ø Granularidad fina: un recurso por semáforo Ø Granularidad gruesa: un semáforo para todos los recursos: 32

Tema 6: Control de la Concurrencia 4. 4 Semáforos en la práctica Granularidad fina:

Tema 6: Control de la Concurrencia 4. 4 Semáforos en la práctica Granularidad fina: v Ventajas: Granularidad gruesa: v (inversa) Ø mayor grado de paralelismo v Inconvenientes: Ø mayor número de semáforos Ø ¡Posibilidad de interbloqueo! P 1 P 2 33

Tema 6: Control de la Concurrencia Índice: 1. Cooperación entre procesos 2. Estrategias optimista

Tema 6: Control de la Concurrencia Índice: 1. Cooperación entre procesos 2. Estrategias optimista y pesimista 3. Métodos de bajo nivel 4. Semáforos 5. Mensajes 6. Monitores 34

Tema 6: Control de la Concurrencia 5. Mensajes 1. Concepto de mensaje 2. Implementación

Tema 6: Control de la Concurrencia 5. Mensajes 1. Concepto de mensaje 2. Implementación de mensajes 3. Mensajes en la práctica 35

Tema 6: Control de la Concurrencia 5. Mensajes 1. Concepto de mensaje 2. Implementación

Tema 6: Control de la Concurrencia 5. Mensajes 1. Concepto de mensaje 2. Implementación de mensajes 3. Mensajes en la práctica 36

Tema 6: Control de la Concurrencia 5. 1 Concepto de mensaje v Primitiva de

Tema 6: Control de la Concurrencia 5. 1 Concepto de mensaje v Primitiva de sincronización y comunicación v Mecanismo empleado para coordinar componentes del sistema operativo en sistemas micronúcleo v Fácil de portar a sistemas distribuidos v Se basa en un tipo de objeto buzón, compartido entre procesos: Ø Los mensajes se envían y leen a/de buzones Ø Buzones tienen asociado un identificador emisor send (B, msg) receive (B, &msg) B receptor 37

Tema 6: Control de la Concurrencia 5. 1 Concepto de mensaje send (buzon, mensaje):

Tema 6: Control de la Concurrencia 5. 1 Concepto de mensaje send (buzon, mensaje): v Coloca el mensaje en buzón v Un buzón puede contener múltiples mensajes Ø No obstante, su capacidad es limitada v send nunca bloquea al proceso que envía mensaje Ø Si el buzón se llena: se rechazan nuevos mensajes receive (buzon, &mensaje): v Retira un mensaje del buzón v Si el buzón está vacío: bloquea proceso hasta que haya un mensaje 38

Tema 6: Control de la Concurrencia 5. Mensajes 1. Concepto de mensaje 2. Implementación

Tema 6: Control de la Concurrencia 5. Mensajes 1. Concepto de mensaje 2. Implementación de mensajes 3. Mensajes en la práctica 39

Tema 6: Control de la Concurrencia 5. 2 Implementación de mensajes int send(buzon *b,

Tema 6: Control de la Concurrencia 5. 2 Implementación de mensajes int send(buzon *b, mensaje *m) { void receive(buzon int result; *b, mensaje *m) /* mensajes pendientes {de retirar */ down(b->mutex); int num_mensajes; down(b->semrec); if (b->num_mensajes < MSG_MAX) down {(b->mutex); /* Semáforos que garantizan exclusión mutua sobre if (b->num_mensajes == 0) buzón y sobre operación receive */memcpy(b->tabla[b->ins], m); { semaforo mutex=1, semrec= 1; b->ins= (b->ins == MSG_MAX-1) ? 0 : b->ins+1; struct buzon { Antes b->num_mensajes++; de /* Semáforo que cuenta el //número de bloquear mensajesse libera exclusión mutua up(b->sem_espera); up(b->mutex); (bloquea procesos en espera de recepción */ result= SEND_OK; down(b->sem_mensajes); semaforo sem_mensajes= 0; down(b->mutex); } /* Mensajes pendientes de recepción */ else } int ins, ext; SEND_NOK; memcpyresult= (m, b->tabla[b->ext]); mensaje[MSG_MAX] tabla; b->ext= (b->ext == MSG_MAX-1) ? 0 : b->ext+1; up(b->mutex); b->nummensajes--; return result; } up(b->mutex); up(b->semrec); } } 40

Tema 6: Control de la Concurrencia 5. Mensajes 1. Concepto de mensaje 2. Implementación

Tema 6: Control de la Concurrencia 5. Mensajes 1. Concepto de mensaje 2. Implementación de mensajes 3. Mensajes en la práctica 41

Tema 6: Control de la Concurrencia 5. 3 Mensajes en la práctica Para garantizar

Tema 6: Control de la Concurrencia 5. 3 Mensajes en la práctica Para garantizar exclusión mutua sobre recursos. . . v Asociar a cada recurso compartido un buzón B, con un mensaje inicialmente v Secciones críticas asociadas al recurso: Ø Protocolo de entrada sección crítica: receive(B, &msg) Ø Protocolo de salida sección crítica: send(B, msg) Ø ¡Mensaje actúa como testigo! v Un buzón B con N mensajes equivale a semáforo contador S con valor inicial N. . . Ø down(s) = receive(B, &msg) Ø up(s) = send(B, msg) 42

5. 3 Mensajes en la práctica Tema 6: Control de la Concurrencia Productor/Consumidor con

5. 3 Mensajes en la práctica Tema 6: Control de la Concurrencia Productor/Consumidor con mensajes productor consumidor while(true) { msg= producir_elemento(); while(true) { receive(datos, &msg); send (datos, msg); consumir_elemento(msg); } } datos 43

5. 3 Mensajes en la práctica Tema 6: Control de la Concurrencia Productor/Consumidor con

5. 3 Mensajes en la práctica Tema 6: Control de la Concurrencia Productor/Consumidor con mensajes productor while(true) { msg= producir_elemento(); consumidor datos receive (sync, &ms); send (datos, msg); while(true) { receive(datos, &msg); send(sync, msg); consumir_elemento(msg); } } sync 44

Tema 6: Control de la Concurrencia Índice: 1. Cooperación entre procesos 2. Estrategias optimista

Tema 6: Control de la Concurrencia Índice: 1. Cooperación entre procesos 2. Estrategias optimista y pesimista 3. Métodos de bajo nivel 4. Semáforos 5. Mensajes 6. Monitores 45

Tema 6: Control de la Concurrencia 6. Monitores 1. Concepto de monitor 2. Monitores

Tema 6: Control de la Concurrencia 6. Monitores 1. Concepto de monitor 2. Monitores en la práctica 3. Monitores en Java 46

Tema 6: Control de la Concurrencia 6. Monitores 1. Concepto de monitor 2. Monitores

Tema 6: Control de la Concurrencia 6. Monitores 1. Concepto de monitor 2. Monitores en la práctica 3. Monitores en Java 47

Tema 6: Control de la Concurrencia 6. 1 Concepto de monitor v Semáforos, mensajes:

Tema 6: Control de la Concurrencia 6. 1 Concepto de monitor v Semáforos, mensajes: Ø Artefactos del SO que se emplean como mecanismos de sincronización Ø ¡Pero no contienen la lógica de coordinación! v Monitores (Hoare, 1. 974): Ø Estructura del lenguaje de programación Ø Encapsulan la lógica de coordinación junto con los mecanismos 48

Tema 6: Control de la Concurrencia 6. 1 Concepto de monitor Definición: v Estructura

Tema 6: Control de la Concurrencia 6. 1 Concepto de monitor Definición: v Estructura del lenguaje compuesta por: Ø Datos locales a la estructura Ø Subprogramas (métodos) que pueden acceder a dichos datos v Cumplen: Ø Interfaz pública viene dada por los métodos (los datos privados) Ø Se garantiza que en cada momento sólo puede haber un proceso activo en algún método del monitor. v Permiten organizar procesos en espera mediante variables de condición + primitivas de suspensión y reanudación. 49

6. 1 Concepto de monitor Tema 6: Control de la Concurrencia monitor mimonitor {

6. 1 Concepto de monitor Tema 6: Control de la Concurrencia monitor mimonitor { private: Datos y métodos locales, variables de condición public: void metodo 1 () { Métodos públicos } void metodo 2 () { } } 50

6. 1 Concepto de monitor Tema 6: Control de la Concurrencia monitor mimonitor {

6. 1 Concepto de monitor Tema 6: Control de la Concurrencia monitor mimonitor { private: condition C; Datos y métodos locales, variables de condición public: void metodo 1 () { if (tengo_que_esperar()) wait(C); Métodos públicos } void metodo 2 () { signal(C); } } 51

Tema 6: Control de la Concurrencia 6. 1 Concepto de monitor Reanudación mediante signal():

Tema 6: Control de la Concurrencia 6. 1 Concepto de monitor Reanudación mediante signal(): v signal() actúa como return() (Brinch Hansen, 1975) Ø Simple, pero irritante para los programadores v Prioridad a proceso reanudado (Hoare, 1974) Ø Proceso que hace signal() se detiene hasta que proceso reactivado deja libre monitor. Ø Si proceso reactivado hace otro signal(): lista de procesos pendientes de reactivación. v Prioridad a proceso que hace signal() (Lampson y Redell, 1980) Ø Proceso puede hacer varios signal(): lista de procesos pendientes de reactivación Ø Puede haber vuelto a cambiar la condición de espera: if (condicion) wait(C); → while(condicion) wait(C); 52

Tema 6: Control de la Concurrencia 6. Monitores 1. Concepto de monitor 2. Monitores

Tema 6: Control de la Concurrencia 6. Monitores 1. Concepto de monitor 2. Monitores en la práctica 3. Monitores en Java 53

6. 2 Coordinación mediante … monitores Tema 6: Control de la Concurrencia Productor/Consumidor con

6. 2 Coordinación mediante … monitores Tema 6: Control de la Concurrencia Productor/Consumidor con monitores: public: monitor prod. Cons { void productor () private: { condition lleno, vacio; while(true) int cont= 0; { void Almacenar (tipo dato) { if (cont==N) wait (lleno); almacenar_dato (dato); cont++; tipo dato= producir_elemento(); tipo tabla[N]; Prod. Cons. Almacenar(dato); int ins, ext= 0; if (cont==1) signal (vacio); } } void almacenar_dato } (tipo dato) tipo Extraer () { { tabla[ins]= dato; void consumidor() { if (cont==0) wait (vacio); if (++ins == N) ins=0; while(true) } { tipo resultado= extraer_dato (); tipo extraer_dato () tipo dato= Prod. Cons. Extraer(); cont--; { consumir(dato); tipo resultado= tabla[ext]; } if (cont==N-1) signal (lleno); if (++ext==N) ext= 0; } return resultado; } }… } 54

Tema 6: Control de la Concurrencia 6. Monitores 1. Concepto de monitor 2. Monitores

Tema 6: Control de la Concurrencia 6. Monitores 1. Concepto de monitor 2. Monitores en la práctica 3. Monitores en Java 55

6. 3 Monitores en Java v Cada objeto Java= monitor simplificado Ø Garantizan la

6. 3 Monitores en Java v Cada objeto Java= monitor simplificado Ø Garantizan la exclusión mutua entre métodos synchronized Ø No hay variables de condición v wait(C) wait() Ø Método heredado de Object Ø Sólo en métodos declarados synchronized Ø Puede lanzar la excepción Interrupted. Exception v signal(C) notify() Ø Método heredado de Object Ø Sólo en métodos declarados synchronized Ø Reanuda cualquier hilo detenido en cualquier wait() del objeto Ø Política de reanudación: preferencia al hilo reanudante v Problema: dificultad para implementar esperas guardadas 56

Tema 6: Control de la Concurrencia 6. 3 Monitores en Java class miclase {

Tema 6: Control de la Concurrencia 6. 3 Monitores en Java class miclase { synchronized public void metodo 1(…) { … while(tengo_que_esperar()) wait(); …throws Interrupted. Exception … } synchronized public void metodo 2(…) try { { … wait(); cambiar_condicion(); } catch(Interrupted. Exception e) {}; notify. All(); … } } 57

6. 3 Monitores en Java Tema 6: Control de la Concurrencia v Inconvenientes de

6. 3 Monitores en Java Tema 6: Control de la Concurrencia v Inconvenientes de modelo Java Ø notify. All(): Ineficiente, para reanudar un hilo de entre N: • Reanudar N hilos • Efectuar N evaluaciones • Suspender N-1 hilos Ø notify(): soluciones complejas y difíciles de reusar y mantener Ø synchronized debe ser explícito: dificulta la reutilización v Atributos volatile: pueden ser actualizados de manera concurrente Ø Buena práctica: atributos privados y modificados con exclusión mutua v Sentencia synchronized (no recomendada): synchronized (expr) { … } … 58

59

59