Sistemas Operativos Tema 8 Sincronizacin y Comunicacin 1

























































- Slides: 57
Sistemas Operativos Tema 8: Sincronización y Comunicación 1
Tema 8: Sincronización y Comunicación Índice: 1. Monitores 2. Mensajes 3. Cooperación Mediante Mensajes 4. Mensajes en Red 5. Equivalencias entre primitivas 2
Tema 8: Sincronización y Comunicación Índice: 1. Monitores 2. Mensajes 3. Cooperación Mediante Mensajes 4. Mensajes en Red 5. Equivalencias entre primitivas 3
Tema 8: Sincronización y Comunicación 1. Monitores v Semáforos: Ø 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 4
Tema 8: Sincronización y Comunicación 1. Monitores 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. 5
Tema 8: Sincronización y Comunicación 1. Monitores monitor mimonitor { private: Datos y métodos locales, variables de condición public: void metodo 1 () { Métodos públicos } void metodo 2 () { } } 6
Tema 8: Sincronización y Comunicación 1. Monitores 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); } } 7
Tema 8: Sincronización y Comunicación 1. Monitores 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); 8
Tema 8: Sincronización y Comunicación 1. Monitores … 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; } }… } 9
Tema 8: Sincronización y Comunicación 1. Monitores “Inconvenientes”: v Espacio protegido para ser accedido sólo de la forma que está autorizado Ø Problema del compilador. v Riesgo de interbloqueo si desde un método de un monitor se llama a otro Ø El interbloqueo no depende empleados, sino de la lógica. de los mecanismos v Métodos diseñadados para unas aplicaciones, talvez no sean los más adecuados para otras Ø Si no sabes diseñar software reutilizable, estudia ISWx v No todos lenguajes los soportan Ø Java, Modula 3, Modula 2, Pascal Concurrente… Ø Librería 10
Tema 8: Sincronización y Comunicación 1. Monitores v Monitores en el lenguaje Java: Ø Cada objeto Java garantiza la exclusión mutua entre sus métodos declarados como synchronized. Ø No hay variables de condición Ø wait(C) → Método wait() heredado de clase Object. Ø signal(C) → Métodos notify()/notify. All() heredados de clase Object: • if (condicion) wait(C) → while(condicion) wait(); • signal(C) → notify. All(); 11
Tema 8: Sincronización y Comunicación Índice: 1. Monitores 2. Mensajes 3. Cooperación Mediante Mensajes 4. Mensajes en Red 5. Equivalencias entre primitivas 12
Tema 8: Sincronización y Comunicación 2. Mensajes v Primitiva de sincronización y comunicación v Fácil implementación v Mecanismo empleado para coordinar componentes del sistema operativo en sistemas mincronúcleo v Fácil de portar a sistemas distribuidos v Primitivas: send(destino, mensaje) receive(destino, mensaje) sendrec(dest_fuent, mensaje) 13
Tema 8: Sincronización y Comunicación 2. Mensajes 1. Destino y fuente 2. Formas de transmisión 3. Tipos de comunicación 4. Longitud de los mensajes 5. Aplazamiento indefinido 14
Tema 8: Sincronización y Comunicación 2. Mensajes 1. Destino y fuente 2. Formas de transmisión 3. Tipos de comunicación 4. Longitud de los mensajes 5. Aplazamiento indefinido 15
Tema 8: Sincronización y Comunicación 2. 1 Destino y fuente v Denominación Directa: Ø destino y fuente son identificadores de procesos Ø Valores especiales: • BROADCAST • ANY v Denominación Indirecta: Ø Recurso compartido especial en el sistema: buzón Ø Los mensajes se leen y envían de/a buzones Ø Buzones tienen asociada algún tipo de nombre emisor receptor 16
Tema 8: Sincronización y Comunicación 2. 1 Destino y fuente v Denominación Directa: Ø Ventajas: simplicidad Ø Inconvenientes: • Procesos deben conocerse entre sí • Equivalente a un único “buzón” por proceso (menos flexible) v Denominación Indirecta: Ø Ventajas: • Flexibilidad • Emisor y receptor no necesitan conocerse • Fácil de portar a ambientes distribuidos Ø Inconvenientes: • Posibilidad de procesos intrusos P 1 P 3 P 2 P 4 17
Tema 8: Sincronización y Comunicación 2. Mensajes 1. Destino y fuente 2. Formas de transmisión 3. Tipos de comunicación 4. Longitud de los mensajes 5. Aplazamiento indefinido 18
Tema 8: Sincronización y Comunicación 2. 2 Formas de Transmisión v Por copia Ø Directa Ø Indirecta v Por referencia Ø Directa Ø Global v Por copia en caso de escritura (COW) 19
Tema 8: Sincronización y Comunicación 2. 1 Formas de Transmisión v Transmisión por copia directa Ø Mensaje se copia de espacio de emisor a espacio de receptor v Inconvenientes Ø tiempo empleado en copiar Ø ¿Y si receptor no está en memoria? emisor receptor 20
Tema 8: Sincronización y Comunicación 2. 1 Formas de Transmisión v Transmisión por copia indirecta Ø Mensaje se copia de espacio de emisor a espacio de SO, y de ahí a espacio de receptor v Inconvenientes: Ø tiempo empleado en copiar se multiplica por dos Ø ¿Y si espacio SO se llena? Sistema Operativo emisor receptor 21
Tema 8: Sincronización y Comunicación 2. 1 Formas de Transmisión v Transmisión por referencia directa Ø Lo que se copia es un puntero al mensaje v Inconvenientes: Ø Un puntero fuera de su espacio de memoria puede… • No tener sentido • Constituir un intento de violación del sistema de protección Ø Mensaje se convierte en recurso compartido emisor receptor 22
Tema 8: Sincronización y Comunicación 2. 1 Formas de Transmisión v Transmisión por referencia global Ø Emisor crea mensaje en espacio de SO, y se copia a espacio de receptor un puntero al mismo Ø Receptor asume responsabilidad de liberar mensaje v Inconvenientes: Ø ¿y si espacio compartido se llena? Ø ¿y si receptor olvida liberar mensaje? Sistema Operativo emisor receptor 23
Tema 8: Sincronización y Comunicación 2. 1 Formas de Transmisión v Transmisión por copia en caso de escritura Ø El mensaje sólo se copia si se modifica por emisor o receptor Ø Necesitamos colaboración del hardware: mecanismos de protección de memoria. emisor receptor 24
Tema 8: Sincronización y Comunicación 2. Mensajes 1. Destino y fuente 2. Formas de transmisión 3. Tipos de comunicación 4. Longitud de los mensajes 5. Aplazamiento indefinido 25
Tema 8: Sincronización y Comunicación 2. 3 Tipos de Comunicación v Tanto emisión como recepción pueden ser: Ø Síncrona Ø Asíncrona v Emisión síncrona: Ø Emisor se bloquea hasta que receptor recibe mensaje v Recepción síncrona: Ø Receptor se bloquea hasta recibir mensaje v Emisión o recepción asíncrona: Ø No hay bloqueos v ¡No confundir asíncrona con no bloqueante! v Lo más habitual: Ø Recepción síncrona Ø Emisión asíncrona 26
Tema 8: Sincronización y Comunicación 2. 3 Tipos de Comunicación v Consecuencia de emisión asíncrona con copia intermedia: emisor receptor v Gestión del espacio de las colas: Ø En espacio de procesos Ø En espacio de Sistema Operativo v Para evitar llenar espacio: Ø Limitar espacio o número de mensajes por proceso 27
Tema 8: Sincronización y Comunicación 2. 3 Tipos de Comunicación v Utilidad de recepción no bloqueante: Ø Procesos que deben hacer algo mientras no reciban mensajes Ø Procesos que pueden recibir mensajes a través de varios buzones receptor 28
Tema 8: Sincronización y Comunicación 2. Mensajes 1. Destino y fuente 2. Formas de transmisión 3. Tipos de comunicación 4. Longitud de los mensajes 5. Aplazamiento indefinido 29
Tema 8: Sincronización y Comunicación 2. 4 Longitud de los mensajes v Tipos de mensajes: Ø De longitud fija Ø De longitud variable Longitud Variable v Ventajas: Ø Mayor flexibilidad v Inconvenientes: complica implementación Ø Si transferencia por referencia: distintos tamaños de ventana Ø Si transferencia por copia: tiempo de transmisión variable Ø Si colas de mensajes: no se pueden implementar con tablas 30
Tema 8: Sincronización y Comunicación 2. Mensajes 1. Destino y fuente 2. Formas de transmisión 3. Tipos de comunicación 4. Longitud de los mensajes 5. Aplazamiento indefinido 31
Tema 8: Sincronización y Comunicación 2. 5 Aplazamiento indefinido v Aplazamiento indefinido en el tiempo: Ø Procesos que esperan para siempre… • Recibir un mensaje que nunca llegará • Entregar un mensaje que nunca se recogerá v Aplazamiento indefinido de mensajes: Ø Mensajes que nunca serán recogidos v Causa: procesos que Ø Abortan Ø Terminan 32
Tema 8: Sincronización y Comunicación 2. 5 Aplazamiento indefinido Soluciones: v Denominación directa: Ø Es trivial determinar sin proceso compañero abortado o terminado v Denominación indirecta: Ø Si buzón tiene asociado permisos, se puede comprobar si hay procesos en el sistema que puedan leer o escribir en él v Comunicación asíncrona: Ø Siempre puede aplazar mensajes Ø Solución: protocolos de confirmación (equivale a síncrona) 33
Tema 8: Sincronización y Comunicación Índice: 1. Monitores 2. Mensajes 3. Cooperación Mediante Mensajes 4. Mensajes en Red 5. Equivalencias entre primitivas 34
Tema 8: Sincronización y Comunicación 3. Cooperación Mediante Mensajes v Usaremos: Ø Denominación Indirecta (buzones) Ø Emisión Asíncrona Ø Recepción Síncrona v Por cada recurso compartido, un buzón B con un mensaje inicialmente v Secciones críticas asociadas al recurso: Ø Protocolo de entrada: receive(B, msg) Ø Protocolo de salida: send(B, msg) v ¡Mensaje actúa como testigo! 35
Tema 8: Sincronización y Comunicación 2. Cooperación Mediante Mensajes Productor/Consumidor con mensajes productor consumidor while(true) { msg= producir_elemento(); while(true) { receive(datos, &msg); send (datos, msg); consumir_elemento(msg); } } datos 36
Tema 8: Sincronización y Comunicación 2. Cooperación Mediante Mensajes 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 37
Tema 8: Sincronización y Comunicación Índice: 1. Monitores 2. Mensajes 3. Cooperación Mediante Mensajes 4. Mensajes en Red 5. Equivalencias entre primitivas 38
Tema 8: Sincronización y Comunicación Índice: 1. Monitores 2. Mensajes 3. Cooperación Mediante Mensajes 4. Mensajes en Red 5. Equivalencias entre primitivas 39
Tema 8: Sincronización y Comunicación 4. Mensajes en Red v Se pueden coordinar mediante procesos en diferentes máquinas mensajes v Hay que replantear algunos problemas, y tratar otros que aparecen: Ø Identificación destino/remitente Ø Fiabilidad transmisión Ø Interpretación de los datos 40
Tema 8: Sincronización y Comunicación 4. Mensajes en Red Identificación destino/remitente v Denominación directa: no es viable Ø ¿Qué PID tiene el proceso destino en la otra máquina? Ø ¿Es único ese PID? Ø ¿De qué tipo es el PID? (depende de SO) v Denominación indirecta: ¿en qué máquina reside el buzón? Ø nombrebuzon@nombremaquina • ¡Procesos dependen de ubicación física del buzón! Ø Autoridad central que asocia nombre lógico a nombre físico: • mibuzon ↔ buzon 1@maquina 1 41
Tema 8: Sincronización y Comunicación 4. Mensajes en Red Fiabilidad de la transmisión v Al enviar información a través de una red… Ø Puede no llegar Ø Puede llegar alterada Ø Puede llegar replicada Ø Puede llegar en orden distinto al que se envió v Los mensajes deben enviarse a través de una pila de protocolos Ø Esta pila debe garantizar una calidad de servicio mínima: • Los mensajes llegan sin alterar y en el orden en que se envían • De lo contrario, al menos se nos informa de ello Ø Si la calidad del servicio no es suficiente → será responsabilidad del servicio de mensajería implementar los protocolos que garanticen 42
Tema 8: Sincronización y Comunicación 4. Mensajes en Red Interpretación de los datos v Determinados datos pueden codificarse de distinta manera, según plataforma software o incluso procesador: Ø Datos de más de un byte: • Big endian (motorola, SPARC): byte más significativo en dirección más baja • Little endian (intel): byte más significativo en dirección más alta Ø Caracteres: distintas coficaciones: • ANSI, ASCII, EBCDIC, UTF-8, UNICODE… Ø Coma flotante: • IEEE 754: precisión doble o simple 43
Tema 8: Sincronización y Comunicación 4. Mensajes en Red Interpretación de los datos v Solución 1: enviar junto a cada dato un identificador de tipo de dato Ø Todo proceso debe conocer todo tipo de dato! Ø Hay que enviar más información (identificadores de tipos) v Solución 2: formatos estándar de red Ø Cada proceso sólo conoce sus formatos y los de red Ø Al enviar: convierte de formato nativo a formato de red Ø Al recibir: se convierte de formato de red a formato nativo Ø Doble conversión: ¡posiblemente innecesaria! Ø No obstante, coste computacional muy pequeño. 44
Tema 8: Sincronización y Comunicación Índice: 1. Monitores 2. Mensajes 3. Cooperación Mediante Mensajes 4. Mensajes en Red 5. Equivalencias entre primitivas 45
Tema 8: Sincronización y Comunicación 5. Equivalencias entre primitivas = = = 46
Tema 8: Sincronización y Comunicación 5. Equivalencias entre primitivas Monitores con semáforos monitor mimonitor semaforo excmut=Crear. Semaforo(1); { private: condition C; struct condition { public: int bloqueados; void metodo 1 () semaforo esp; /* = 0 */ down(excmut { }; signal( /* condition* */ varcond) #define … ); { if (tengo_que_esperar()) struct condition C; if (c->bloqueados > 0) wait(C); up(excmut) void{ wait(condition *varcond) … ; { c->bloqueados--; } varcond->bloqueados++; up(c->esp); void metodo 2 () up(excmut); } { down(varcond->esp); else down(excmut … up(excmut); ); }; signal(C); up(excmut) … } } } return; ; 47
Tema 8: Sincronización y Comunicación 5. Equivalencias entre primitivas = = = 48
Tema 8: Sincronización y Comunicación 5. Equivalencias entre primitivas Buzones con semáforos struct buzon { semaforo excmut; /* = 1 */ int nummensajes; listasem esp_send; listasem esp_rec; int ins, ext; mensaje[] tabla; } semaforo esp; /* = 0 1 */ void receive(buzon send(buzon *b, mensaje *m)*m) { down(b->excmut); if (b->num_mensajes == 0) MSG_MAX)) { añadir(&b->esp_receive, &esp); añadir(&b->esp_send, &esp); up(b->excmut); down(esp); } *m= b->tabla[b->ins]=m; b->tabla[b->ext]; incrementar(&b->ext); incrementar(&b->ins); b->nummensajes--; b->nummensajes++; if (!lista_vacia(b->esp_send)) (!lista_vacia(b->esp_rec)) { semaforos=sacar_de_lista(&b->esp_send); s=sacar_de_lista(&b->esp_rec); up(s); } else up(b->excmut); 49 }
Tema 8: Sincronización y Comunicación 5. Equivalencias entre primitivas = = = 50
Tema 8: Sincronización y Comunicación 5. Equivalencias entre primitivas Semáforos con monitores monitor arr_semáforos { private: struct { int cont; condition esp; } S[N]; public: void down (int i) /* Down sobre el semáforo i-ésimo */ { if (--S[i]. contador < 0) wait(S[i]. esp); } void up (int i) /* Up sobre el semáforo i-ésimo */ { if(++S[i]. contador <=0) signal(S[i]. esp); } } 51
Tema 8: Sincronización y Comunicación 5. Equivalencias entre primitivas = = = 52
Tema 8: Sincronización y Comunicación 5. Equivalencias entre primitivas Buzones con monitores monitor buzon { private: void send(mensaje *m) { if (num_mensajes == MSG_MAX)) wait (lleno); int nummensajes; varcond lleno, vacio; int ins, ext; mensaje[] tabla; public: void receive (mensaje *m) { if (num_mensajes == 0) wait (vacio); tabla[ins]=*m; incrementar(&ins); nummensajes++; signal (vacio); } } *m= tabla[ext]; incrementar(&ext); nummensajes--; signal (lleno); } 53
Tema 8: Sincronización y Comunicación 5. Equivalencias entre primitivas = = = 54
Tema 8: Sincronización y Comunicación 5. Equivalencias entre primitivas Semáforos con buzones servidor de semáforos cliente 1 • identificación del semáforo • contador del semáforo • lista de los buzones de los procesos bloqueados cliente 2 • identificación del semáforo • referencia a buzón de proceso • código de operación: • Crear. Semáforo • destruir. Semáforo • Down • Up • valor inicial del contador, si operación es Crear. Semáforo 55
Tema 8: Sincronización y Comunicación 5. Equivalencias entre primitivas = = = 56
Tema 8: Sincronización y Comunicación 5. Equivalencias entre primitivas Monitores con buzones servidor de monitores • nombre del monitor • estado (libre u ocupado) • lista de los buzones de procesos en espera de entrar • por cada variable de condición: • Nombre: C 1 • Lista de los buzones de los procesos bloqueados • Nombre: C 2 • Lista de los buzones de los procesos bloqueados monitor nombre { private: condition C 1, C 2; public: void metodo 1() { … if (me_espero()) wait(C 1); … • nombre del monitor } • referencia a buzón de respuesta • código devoid operación: metodo 1() • Entrar{ en Monitor • Salir de … monitor • signal(C 1); • wait … • nombre de} variable de condición, si signal o wait. 57 }