Académique Documents
Professionnel Documents
Culture Documents
Tipos de procesos
Independientes
Su estado no es compartido Son deterministas Son reproducibles Pueden ser detenidos y rearrancados sin ningn efecto negativo
Cooperantes
Su estado es compartido Su funcionamiento no es determinista Su funcionamiento puede ser irreproducible Si son detenidos y posteriormente rearrancados puede que se produzcan efectos negativos
Ejemplo: un proceso que escribe en el terminal la cadena abc y otro la cadena cba
Sincronizacin de procesos 2
Productor-consumidor
Un proceso produce datos que son posteriormente procesados por otro proceso i.e.: el manejador de teclado y el programa que recoge los caracteres de un buffer Lo ms cmodo es emplear un buffer circular
Escribe Lee
Productor
Consumidor
Sincronizacin de procesos 3
El productor no puede escribir en el buffer si est lleno Comparte con el consumidor: el buffer y el contador
do { ... produce un nuevo elemento (elemento_p) ... while (contador == MAX_ELEMENTOS) haz_nada; buffer[indice_p] = elemento_p; indice_p = (indice_p + 1) % MAX_ELEMENTOS; contador = contador + 1; } while (TRUE);
Sincronizacin de procesos 4
El productor no puede leer del buffer si est vaco Comparte con el consumidor: el buffer y el contador
do {
while (contador == 0) haz_nada; elemento_c = buffer[indice_c]; indice_c = (indice_c + 1) % MAX_ELEMENTOS; contador = contador - 1;
... consume el elemento (elemento_c) ... } while (TRUE);
Sincronizacin de procesos 5
Condiciones de carrera
Sincronizacin de procesos 6
Atomicidad
Una operacin se dice que es atmica (en un sistema uniprocesador) cuando se ejecuta con las interrupciones deshabilitadas Las referencias y las asignaciones son atmicas en la mayora de los sistemas. Esto no es siempre cierto para matrices, estructuras o nmeros en coma flotante Si el HW no proporciona operaciones atmicas, stas no pueden construirse por SW
Sincronizacin de procesos 7
Sincronizacin
Persona A
3:00 Mira en la nevera. No hay leche 3:05 Va a la tienda 3:10 Llega a la tienda 3:15 Deja la tienda 3:20 Llega a casa y guarda la leche Mira en la nevera. No hay leche Va a la tienda Llega a la tienda
Persona B
3:25
3:30
2002-2003 Mariano Gmez Plaza
Deja la tienda
Llega a casa y ...
Sincronizacin de procesos 8
Sincronizacin de procesos 9
Solucin general:
do { protocolo de entrada seccin crtica protocolo de salida resto de la seccin } while (TRUE);
Sincronizacin de procesos 10
Tipos de soluciones
Suposiciones: Los procesos se ejecutan a una velocidad 0 Su velocidad relativa no influye Soluciones basadas en variables de control Soluciones basadas en instrucciones mquina especficas (test-and-set o swap)
Soluciones basadas en primitivas del SO Soluciones basadas en regiones crticas y monitores
Sincronizacin de procesos 11
Thread Ti
do { while (turno != i) haz_nada; seccin crtica turno = j; resto de la seccin } while (TRUE);
2002-2003 Mariano Gmez Plaza Sincronizacin de procesos 12
Segundo intento
Variables compartidas:
flag[i] = FALSE; flag[j] = FALSE;
Estas variables indican la intencin de los hilos de entrar en seccin crtica Thread Ti
do { flag[i] = TRUE; while (flag[j]) haz_nada; seccin crtica flag[i] = FALSE; resto de la seccin } while (TRUE);
Sincronizacin de procesos 13
Variables compartidas:
int turno, flag[2]; flag[i] = flag[j] = FALSE;
Thread Ti
do { flag[i] = TRUE; turno = j; while (flag[j] && (turno == j)) haz_nada; seccin crtica flag[i] = FALSE; resto de la seccin } while (TRUE);
2002-2003 Mariano Gmez Plaza Sincronizacin de procesos 14
Sincronizacin hardware
int test_and_set (int *destino) { int aux; aux = *destino; *destino = TRUE; return (aux); }
Sincronizacin de procesos 15
Instruccin swap
void swap (int *a, int *b) { int aux; aux = *a; *a = *b; *b = aux; }
Sincronizacin de procesos 16
Semforos
Introducidos por Dijkstra en los aos 60 Es un tipo especial de variable que slo puede ser accedida por dos primitivas P y V P (semforo): operacin atmica que espera hasta que la variable semforo sea positiva, en este momento la decrementa en 1 V (semforo): operacin atmica que incrementa la variable semforo en 1 Cmo quedara el problema de la seccin crtica con semforos?
Sincronizacin de procesos 17
Son independientes de la mquina Son simples Pueden trabajar con varios procesos Pueden permitir que varios procesos entren en la seccin crtica al mismo tiempo en caso de necesitarse esta posibilidad Doble uso de los semforos: Exclusin mutua Sincronizacin
Sincronizacin de procesos 18
Productor-consumidor
Restricciones:
El consumidor espera a que haya datos en el buffer El productor espera a que haya buffers vacos Slo un nico proceso puede manipular el buffer a la vez
Semforos:
smf_llenos, smf_vacos y exmut
Inicializacin:
smf_llenos = 0 smf_vacos = nmero_de_buffers exmut = 1
Sincronizacin de procesos 19
Productor
P (smf_vacos); P (exmut); Produce un dato; V (exmut); V (smf_llenos);
Consumidor
P (smf_llenos); P (exmut); Consume el dato; V (exmut); V (smf_vacos);
Por qu el productor hace P(smf_vacos) y V(smf_llenos)? Es importante el orden en que se ejecutan las primitivas P y V? Cmo podemos extender el problema si hay dos consumidores?
2002-2003 Mariano Gmez Plaza Sincronizacin de procesos 20
Lectores-escritores
Descripcin: Los escritores acceden a la BBDD cuando no haya ningn otro escritor y ningn lector. Semforo escribir
Los lectores acceden cuando no haya ningn escritor accediendo o esperando. Semforo leer Variables compartidas: LA, LE, EA, EE. A estas variables accederemos en exclusin mutua. Semforo exmut
Sincronizacin de procesos 21
Iniciacin
Sincronizacin de procesos 22
Lector
P (exmut); if ((EA + EE) == 0) { V (leer); LA = LA + 1; } else { LE = LE + 1; } V (exmut); P (leer); Leemos los datos; P (exmut); LA = LA - 1; if (LA == 0 && EE > 0) { V (escribir); EA = EA + 1; EE = EE - 1; }
2002-2003 Mariano Gmez Plaza
Escritor
P (exmut); if (( EA + LA + EE) == 0){ V (escribir); EA = EA + 1; } else { EE = EE + 1; } V (exmut); P (escribir); Escribimos los datos; P (exmut); EA = EA - 1; if (EE > 0) { V (escribir); EA = EA + 1; EE = EE - 1; } else while (LE > 0) { V (leer); LA = LA + 1; LE = LE - 1; } V (exmut);
Sincronizacin de procesos 23
Casos particulares
Un lector entra y deja el sistema Un escritor entra y deja el sistema Entran dos lectores al sistema Un escritor entra y debe esperar Un lector entra y debe esperar Los lectores abandonan el sistema y el escritor contina Los escritores abandonan el sistema, y el ltimo lector contina y abandona
Sincronizacin de procesos 24
Variables compartidas:
exmut semaforo[N]
void filosofo (int i) { while (TRUE) { piensa(); toma_tenedores(i); come(); pon_tenedores(i); } } /* Fin de filosofo */
2002-2003 Mariano Gmez Plaza Sincronizacin de procesos 25
A qu valores se deben iniciar los semforos? Por qu la funcin comprueba siempre se invoca desde una seccin crtica?
Sincronizacin de procesos 27
Variable compartida:
esperando: nmero de clientes esperando
Inicialmente:
barberos=0 exmut=1 esperando=0
Sincronizacin de procesos 28
clientes=0
Barbero
do {
P(clientes); P(exmut); esperando=esperando-1; V(barberos); V(exmut); /* Corta el pelo */
Cliente
do {
P(exmut); if (esperando < SILLAS) { esperando=esperando + 1; V(clientes); V(exmut); P(barberos); /* Se corta el pelo */ } else { V(exmut); } } while (PELOLARGO);
} while (TRUE);
Sincronizacin de procesos 29
Por un puente slo pueden pasar o coches que suben o coches que bajan. Solucin: Variables compartidas:
int contadorsubida = 0, contadorbajada = 0; semaforo exmut_s, exmut_b, puente;
Iniciacin: Los semforos inicialmente deben valer 1 No se tratan los problemas de inanicin
Sincronizacin de procesos 30
Cdigo subida
P(exmut_s); contadorsubida++; if (contadorsubida == 1) P(puente); V(exmut_s);
... Se sube el puente ... P(exmut_s); contadorsubida--; if (contadorsubida == 0) V(puente); V(exmut_s);
Cdigo bajada
P(exmut_b); contadorbajada++; if (contadorbajada == 1) P(puente); V(exmut_b);
... Se baja el puente ... P(exmut_b); contadorbajada--; if (contadorbajada == 0) V(puente); V(exmut_b);
Sincronizacin de procesos 31
Las primitivas P y V se realizan por SW Razn: P y V se ven implicados en aspectos de planificacin Partimos de la siguiente declaracin:
typedef struct { int contador; (cola q;) int t; /* Para multiprocesadores */ } SEMAFORO;
En el caso de los semforos con espera activa el cdigo entre parntesis sobra
Sincronizacin de procesos 32
Sincronizacin de procesos 33
P y V en sistemas uniprocesador
P (SEMAFORO *s) { cli; if (s->contador > 0) { s->contador- = 1; sti; return; } Aadimos proc. a s->q sti; Planificacin } V (SEMAFORO *s) { cli; if (s->q == vaca) { s->contador+ = 1; } else { Sacar proceso de s->q Despertarlo } sti; }
Sincronizacin de procesos 34
P y V en sistemas multiprocesador
P (SEMAFORO *s) { while (TAS(s->t) != 0); if (s->contador > 0) { s->contador- = 1; s->t = 0; return; } Aadimos proc. a s->q s->t = 0; Planificacin } V (SEMAFORO *s) { while (TAS(s->t) != 0); if (s->q vaca) { s->contador+ = 1; } else { Sacar proceso de s->q; Despertarlo; } s->t = 0; }
Sincronizacin de procesos 35
Vlido para comunicacin intermquina Definicin: Mensaje: parte de informacin que es pasada de un proceso a otro Buzn: lugar donde se depositan los mensajes desde el envo a la recepcin Operaciones sobre mensajes: Enviar Recibir
Sincronizacin de procesos 36
Mtodos de comunicacin
Comunicacin en un nico sentido: los mensajes fluyen en un nico sentido Ejemplos: Tuberas de UNIX, productorconsumidor y streams Comunicacin bidireccional: los mensajes fluyen en ambos sentidos Ejemplos: Llamadas a procedimientos remotos (RPCs) o el modelo cliente-servidor
Sincronizacin de procesos 37
Ejemplos
Productor:
Consumidor:
Cliente:
Servidor:
char orden[100]; char resp[1000]; recibir (orden, buzon1); enviar (resp, buzon2);
Sincronizacin de procesos 38
Muchas aplicaciones responden a este esquema Las partes que se comunican pueden ser completamente independientes. Ventajas: Es ms difcil que se produzcan errores Permite que los procesos no confen entre s Las aplicaciones pueden ser escritas por programadores y en tiempos diferentes Los procesos pueden correr en diferentes procesadores, conectados a travs de una red
Sincronizacin de procesos 39
Nombres Comunicacin simtrica Comunicacin asimtrica Copiado Paso por valor: es lento y obligatorio en sistemas sin memoria compartida Paso por referencia: es rpido pero hay problemas con su modificacin Hbrido: copy-on-write
Sincronizacin de procesos 40
Bloqueo versus no bloqueo enviar y recibir pueden ser bloqueantes o no Formas de espera en un buzn:
Varios procesos pueden esperar en un buzn Un proceso puede esperar en varios buzones
Sincronizacin de procesos 41