Descargar la presentación
La descarga está en progreso. Por favor, espere
Publicada porJosé María Cruz Palma Modificado hace 9 años
1
1 Tema 8: Sincronización y Comunicación Sistemas Operativos
2
2 Í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
3
3 Í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
4
4 1. Monitores Tema 8: Sincronización y Comunicación Semáforos: Artefactos del SO que se emplean como mecanismos de sincronización ¡Pero no contienen la lógica de coordinación! Monitores (Hoare, 1.974): Estructura del lenguaje de programación Encapsulan la lógica de coordinación junto con los mecanismos
5
5 1. Monitores Tema 8: Sincronización y Comunicación Definición: Estructura del lenguaje compuesta por: Datos locales a la estructura Subprogramas (métodos) que pueden acceder a dichos datos 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. Permiten organizar procesos en espera mediante variables de condición + primitivas de suspensión y reanudación.
6
6 1. Monitores Tema 8: Sincronización y Comunicación monitor mimonitor { private: public: } void metodo1 () { } void metodo2 () { } Datos y métodos locales, variables de condición Métodos públicos
7
7 1. Monitores Tema 8: Sincronización y Comunicación monitor mimonitor { private: public: } void metodo1 () { } void metodo2 () { } Datos y métodos locales, variables de condición Métodos públicos condition C; if (tengo_que_esperar()) wait(C); signal(C);
8
8 1. Monitores Tema 8: Sincronización y Comunicación Reanudación mediante signal(): signal() actúa como return() (Brinch Hansen, 1975) Simple, pero irritante para los programadores 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. 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);
9
9 1. Monitores Tema 8: Sincronización y Comunicación Productor/Consumidor con monitores: monitor prodCons { private: condition lleno, vacio; int cont= 0; tipo tabla[N]; int ins, ext= 0; void almacenar_dato (tipo dato) { tabla[ins]= dato; if (++ins == N) ins=0; } tipo extraer_dato () { tipo resultado= tabla[ext]; if (++ext==N) ext= 0; return resultado; } … … public: void Almacenar (tipo dato) { if (cont==N) wait (lleno); almacenar_dato (dato); cont++; if (cont==1) signal (vacio); } tipo Extraer () { if (cont==0) wait (vacio); tipo resultado= extraer_dato (); cont--; if (cont==N-1) signal (lleno); return resultado; } } void productor () { while(true) { tipo dato= producir_elemento(); ProdCons.Almacenar(dato); } } void consumidor() { while(true) { tipo dato= ProdCons.Extraer(); consumir(dato); } }
10
10 1. Monitores Tema 8: Sincronización y Comunicación “Inconvenientes”: Espacio protegido para ser accedido sólo de la forma que está autorizado Problema del compilador. Riesgo de interbloqueo si desde un método de un monitor se llama a otro El interbloqueo no depende de los mecanismos empleados, sino de la lógica. Métodos diseñadados para unas aplicaciones, talvez no sean los más adecuados para otras Si no sabes diseñar software reutilizable, estudia ISW x No todos los lenguajes los soportan Java, Modula3, Modula2, Pascal Concurrente… Librería
11
11 1. Monitores Tema 8: Sincronización y Comunicación 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()/notifyAll() heredados de clase Object: if (condicion) wait(C) → while(condicion) wait(); signal(C) → notifyAll();
12
12 Í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
13
13 2. Mensajes Tema 8: Sincronización y Comunicación Primitiva de sincronización y comunicación Fácil implementación Mecanismo empleado para coordinar componentes del sistema operativo en sistemas mincronúcleo Fácil de portar a sistemas distribuidos Primitivas: send(destino, mensaje) receive(destino, mensaje)sendrec(dest_fuent, mensaje)
14
14 2. Mensajes Tema 8: Sincronización y Comunicación 1.Destino y fuente 2.Formas de transmisión 3.Tipos de comunicación 4.Longitud de los mensajes 5.Aplazamiento indefinido
15
15 2. Mensajes Tema 8: Sincronización y Comunicación 1.Destino y fuente 2.Formas de transmisión 3.Tipos de comunicación 4.Longitud de los mensajes 5.Aplazamiento indefinido
16
16 2.1 Destino y fuente Tema 8: Sincronización y Comunicación Denominación Directa: destino y fuente son identificadores de procesos Valores especiales: BROADCAST ANY 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
17
17 2.1 Destino y fuente Tema 8: Sincronización y Comunicación Denominación Directa: Ventajas: simplicidad Inconvenientes: Procesos deben conocerse entre sí Equivalente a un único “buzón” por proceso (menos flexible) Denominación Indirecta: Ventajas: Flexibilidad Emisor y receptor no necesitan conocerse Fácil de portar a ambientes distribuidos Inconvenientes: Posibilidad de procesos intrusos P1 P2 P4 P3
18
18 2. Mensajes Tema 8: Sincronización y Comunicación 1.Destino y fuente 2.Formas de transmisión 3.Tipos de comunicación 4.Longitud de los mensajes 5.Aplazamiento indefinido
19
19 2.2 Formas de Transmisión Tema 8: Sincronización y Comunicación Por copia Directa Indirecta Por referencia Directa Global Por copia en caso de escritura (COW)
20
20 2.1 Formas de Transmisión Tema 8: Sincronización y Comunicación Transmisión por copia directa Mensaje se copia de espacio de emisor a espacio de receptor emisorreceptor Inconvenientes tiempo empleado en copiar ¿Y si receptor no está en memoria?
21
21 receptor Sistema Operativo 2.1 Formas de Transmisión Tema 8: Sincronización y Comunicación emisor Inconvenientes: tiempo empleado en copiar se multiplica por dos ¿Y si espacio SO se llena? Transmisión por copia indirecta Mensaje se copia de espacio de emisor a espacio de SO, y de ahí a espacio de receptor
22
22 2.1 Formas de Transmisión Tema 8: Sincronización y Comunicación Transmisión por referencia directa Lo que se copia es un puntero al mensaje emisorreceptor 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
23
23 receptor Sistema Operativo 2.1 Formas de Transmisión Tema 8: Sincronización y Comunicación emisor Inconvenientes: ¿y si espacio compartido se llena? ¿y si receptor olvida liberar mensaje? 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
24
24 2.1 Formas de Transmisión Tema 8: Sincronización y Comunicación 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. emisorreceptor
25
25 2. Mensajes Tema 8: Sincronización y Comunicación 1.Destino y fuente 2.Formas de transmisión 3.Tipos de comunicación 4.Longitud de los mensajes 5.Aplazamiento indefinido
26
26 2.3 Tipos de Comunicación Tema 8: Sincronización y Comunicación Tanto emisión como recepción pueden ser: Síncrona Asíncrona Emisión síncrona: Emisor se bloquea hasta que receptor recibe mensaje Recepción síncrona: Receptor se bloquea hasta recibir mensaje Emisión o recepción asíncrona: No hay bloqueos ¡No confundir asíncrona con no bloqueante! Lo más habitual: Recepción síncrona Emisión asíncrona
27
27 2.3 Tipos de Comunicación Tema 8: Sincronización y Comunicación Consecuencia de emisión asíncrona con copia intermedia: emisorreceptor Gestión del espacio de las colas: En espacio de procesos En espacio de Sistema Operativo Para evitar llenar espacio: Limitar espacio o número de mensajes por proceso
28
28 2.3 Tipos de Comunicación Tema 8: Sincronización y Comunicación 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
29
29 2. Mensajes Tema 8: Sincronización y Comunicación 1.Destino y fuente 2.Formas de transmisión 3.Tipos de comunicación 4.Longitud de los mensajes 5.Aplazamiento indefinido
30
30 2.4 Longitud de los mensajes Tema 8: Sincronización y Comunicación Tipos de mensajes: De longitud fija De longitud variable Longitud Variable Ventajas: Mayor flexibilidad 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
31
31 2. Mensajes Tema 8: Sincronización y Comunicación 1.Destino y fuente 2.Formas de transmisión 3.Tipos de comunicación 4.Longitud de los mensajes 5.Aplazamiento indefinido
32
32 2.5 Aplazamiento indefinido Tema 8: Sincronización y Comunicación Aplazamiento indefinido en el tiempo: Procesos que esperan para siempre… Recibir un mensaje que nunca llegará Entregar un mensaje que nunca se recogerá Aplazamiento indefinido de mensajes: Mensajes que nunca serán recogidos Causa: procesos que Abortan Terminan
33
33 2.5 Aplazamiento indefinido Tema 8: Sincronización y Comunicación Soluciones: Denominación directa: Es trivial determinar sin proceso compañero abortado o terminado 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 Comunicación asíncrona: Siempre puede aplazar mensajes Solución: protocolos de confirmación (equivale a síncrona)
34
34 Í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
35
35 3. Cooperación Mediante Mensajes Tema 8: Sincronización y Comunicación Usaremos: Denominación Indirecta (buzones) Emisión Asíncrona Recepción Síncrona Por cada recurso compartido, un buzón B con un mensaje inicialmente Secciones críticas asociadas al recurso: Protocolo de entrada: receive(B,msg) Protocolo de salida: send(B, msg) ¡Mensaje actúa como testigo!
36
36 2. Cooperación Mediante Mensajes Tema 8: Sincronización y Comunicación Productor/Consumidor con mensajes while(true) { msg= producir_elemento(); send (datos, msg); } productor while(true) { receive(datos, &msg); consumir_elemento(msg); } consumidor datos
37
37 sync 2. Cooperación Mediante Mensajes Tema 8: Sincronización y Comunicación Productor/Consumidor con mensajes while(true) { msg= producir_elemento(); receive (sync, &ms); send (datos, msg); } productor while(true) { receive(datos, &msg); send(sync, msg); consumir_elemento(msg); } consumidor datos
38
38 Í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
39
39 Í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
40
40 4. Mensajes en Red Tema 8: Sincronización y Comunicación Se pueden coordinar mediante mensajes procesos en diferentes máquinas Hay que replantear algunos problemas, y tratar otros que aparecen: Identificación destino/remitente Fiabilidad transmisión Interpretación de los datos
41
41 4. Mensajes en Red Tema 8: Sincronización y Comunicación Identificación destino/remitente 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) 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 ↔ buzon1@maquina1
42
42 4. Mensajes en Red Tema 8: Sincronización y Comunicación Fiabilidad de la transmisión 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ó 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
43
43 4. Mensajes en Red Tema 8: Sincronización y Comunicación Interpretación de los datos 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
44
44 4. Mensajes en Red Tema 8: Sincronización y Comunicación Interpretación de los datos 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) 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.
45
45 Í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
46
46 5. Equivalencias entre primitivas Tema 8: Sincronización y Comunicación = = =
47
47 5. Equivalencias entre primitivas Tema 8: Sincronización y Comunicación Monitores con semáforos monitor mimonitor { private: condition C; public: void metodo1 () { … if (tengo_que_esperar()) wait(C); … } void metodo2 () { … signal(C); … } } semaforo excmut=CrearSemaforo(1); down(excmut ); up(excmut) ; struct condition { int bloqueados; semaforo esp; /* = 0 */ }; struct condition C; void wait(condition *varcond) { varcond->bloqueados++; up(excmut); down(varcond->esp); } ; #define signal( /* condition* */ varcond) { if (c->bloqueados > 0) { c->bloqueados--; up(c->esp); } else up(excmut); return; }
48
48 5. Equivalencias entre primitivas Tema 8: Sincronización y Comunicación = = =
49
49 5. Equivalencias entre primitivas Tema 8: Sincronización y Comunicación Buzones con semáforos struct buzon { semaforo excmut; /* = 1 */ int nummensajes; listasem esp_send; listasem esp_rec; int ins, ext; mensaje[] tabla; } semaforo esp; /* = 1 */ void send(buzon *b, mensaje *m) { down(b->excmut); if (b->num_mensajes == MSG_MAX)) { añadir(&b->esp_send,&esp); up(b->excmut); down(esp); } b->tabla[b->ins]=m; incrementar(&b->ins); b->nummensajes++; if (!lista_vacia(b->esp_rec)) { semaforo s=sacar_de_lista(&b->esp_rec); up(s); } else up(b->excmut); } semaforo esp; /* = 0 */ void receive(buzon *b, mensaje *m) { down(b->excmut); if (b->num_mensajes == 0) { añadir(&b->esp_receive,&esp); up(b->excmut); down(esp); } *m= b->tabla[b->ext]; incrementar(&b->ext); b->nummensajes--; if (!lista_vacia(b->esp_send)) { semaforo s=sacar_de_lista(&b->esp_send); up(s); } else up(b->excmut); }
50
50 5. Equivalencias entre primitivas Tema 8: Sincronización y Comunicación = = =
51
51 5. Equivalencias entre primitivas Tema 8: Sincronización y Comunicación 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); } }
52
52 5. Equivalencias entre primitivas Tema 8: Sincronización y Comunicación = = =
53
53 5. Equivalencias entre primitivas Tema 8: Sincronización y Comunicación Buzones con monitores monitor buzon { private: int nummensajes; varcond lleno, vacio; int ins, ext; mensaje[] tabla; public: void receive (mensaje *m) { if (num_mensajes == 0) wait (vacio); *m= tabla[ext]; incrementar(&ext); nummensajes--; signal (lleno); } void send(mensaje *m) { if (num_mensajes == MSG_MAX)) wait (lleno); tabla[ins]=*m; incrementar(&ins); nummensajes++; signal (vacio); } }
54
54 5. Equivalencias entre primitivas Tema 8: Sincronización y Comunicación = = =
55
55 5. Equivalencias entre primitivas Tema 8: Sincronización y Comunicación Semáforos con buzones cliente 1 servidor de semáforos cliente 2 identificación del semáforo referencia a buzón de proceso código de operación: CrearSemáforo destruirSemáforo Down Up valor inicial del contador, si operación es CrearSemáforo identificación del semáforo contador del semáforo lista de los buzones de los procesos bloqueados
56
56 5. Equivalencias entre primitivas Tema 8: Sincronización y Comunicación = = =
57
57 5. Equivalencias entre primitivas Tema 8: Sincronización y Comunicación Monitores con buzones monitor nombre { private: condition C1, C2; public: void metodo1() { … if (me_espero()) wait(C1); … } void metodo1() { … signal(C1); … } } servidor de monitores nombre del monitor referencia a buzón de respuesta código de operación: Entrar en Monitor Salir de monitor signal wait nombre de variable de condición, si signal o wait. nombre del monitor estado (libre u ocupado) lista de los buzones de procesos en espera de entrar por cada variable de condición: Nombre: C1 Lista de los buzones de los procesos bloqueados Nombre:C2 Lista de los buzones de los procesos bloqueados
Presentaciones similares
© 2025 SlidePlayer.es Inc.
All rights reserved.