Vous êtes sur la page 1sur 41

Sincronizacin de procesos

Mariano Gmez Plaza

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 programa que calcula 1000 cifras decimales de pi


2002-2003 Mariano Gmez Plaza

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

2002-2003 Mariano Gmez Plaza

Sincronizacin de procesos 3

Cdigo del productor

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);

2002-2003 Mariano Gmez Plaza

Sincronizacin de procesos 4

Cdigo del consumidor

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);

2002-2003 Mariano Gmez Plaza

Sincronizacin de procesos 5

Condiciones de carrera

El cdigo anterior no funciona por existir condiciones de carrera al actualizar el contador


Veamos qu ocurre al ejecutar la sentencia:
contador = contador + 1;
Productor load r0, contador add r0, 1 store contador, r0 Consumidor load r0, contador sub r0, 1 store contador, r0

Problema: la modificacin del contador no es atmica

2002-2003 Mariano Gmez Plaza

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

2002-2003 Mariano Gmez Plaza

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

Cul es el problema planteado?


Alguien necesita leche, pero no tanta Exclusin mutua: es el mecanismo que asegura que slo una persona o proceso est haciendo algo en un instante determinado (los otros estn excluidos). Seccin crtica: es la seccin de cdigo, o coleccin de operaciones, en el que se actualizan variables comunes. Cuando un proceso est ejecutando cdigo de su SC, ningn otro proceso puede estar en su SC

2002-2003 Mariano Gmez Plaza

Sincronizacin de procesos 9

Problema de la seccin crtica

Toda solucin debe cumplir tres condiciones


Exclusin mutua Progreso Espera limitada

Solucin general:
do { protocolo de entrada seccin crtica protocolo de salida resto de la seccin } while (TRUE);

2002-2003 Mariano Gmez Plaza

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

2002-2003 Mariano Gmez Plaza

Sincronizacin de procesos 11

Solucin con variables de control


Vlidas para varios procesadores Suposicin: las instrucciones de carga y almacenamiento son atmicas Primer intento Ti y Tj comparten la variable turno

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);

2002-2003 Mariano Gmez Plaza

Sincronizacin de procesos 13

Tercer intento (Dekker)

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); }

Variable compartida cerrojo iniciada a FALSE


do { while (test_and_set (&cerrojo)) haz_nada; seccin crtica cerrojo = FALSE; resto de la seccin } while (TRUE);

2002-2003 Mariano Gmez Plaza

Sincronizacin de procesos 15

Instruccin swap
void swap (int *a, int *b) { int aux; aux = *a; *a = *b; *b = aux; }

Variable compartida cerrojo iniciada a FALSE


do { llave = TRUE; do { swap (cerrojo, llave); } while (llave != FALSE); seccin crtica cerrojo = FALSE; resto de la seccin } while (TRUE);

2002-2003 Mariano Gmez Plaza

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?

2002-2003 Mariano Gmez Plaza

Sincronizacin de procesos 17

Caractersticas de los semforos

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

2002-2003 Mariano Gmez Plaza

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

2002-2003 Mariano Gmez Plaza

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

2002-2003 Mariano Gmez Plaza

Sincronizacin de procesos 21

Iniciacin

leer = escribir = 0 exmut = 1 LA = EA = LE = EE = 0


Adems: Los escritores tienen prioridad sobre los lectores

2002-2003 Mariano Gmez Plaza

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

2002-2003 Mariano Gmez Plaza

Sincronizacin de procesos 24

Problema de los filsofos

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

Problema de los filsofos


void toma_tenedores(int i) { P(exmut); estado[i] = HAMBRIENTO; comprueba(i); V(exmut); P(semaforo[i]); } /* Fin de toma_tenedores */
void pon_tenedores(int i) { P(exmut); estado[i] = PENSANDO; comprueba((i-1)%N); comprueba((i+1)%N); V(exmut); } /* Fin de pon_tenedores */
2002-2003 Mariano Gmez Plaza Sincronizacin de procesos 26

Problema de los filsofos


void comprueba(int i) { if (estado[i] == HAMBRIENTO && estado[(i-1)%N] != COMIENDO && estado[(i+1)%N] != COMIENDO) { estado[i] = COMIENDO; V(semaforo[i]); } } /* Fin de comprueba */

A qu valores se deben iniciar los semforos? Por qu la funcin comprueba siempre se invoca desde una seccin crtica?

2002-2003 Mariano Gmez Plaza

Sincronizacin de procesos 27

Problema del barbero dormiln

Problema: 1 barbero y N sillas de espera Si un cliente entra y no hay sillas, se va Semforos:


clientes: nmero de clientes en espera sin contar el que
est en la silla del peluquero barberos: nmero de barberos inactivos

exmut: exclusin mutua


Variable compartida:
esperando: nmero de clientes esperando

Inicialmente:
barberos=0 exmut=1 esperando=0
Sincronizacin de procesos 28

clientes=0

2002-2003 Mariano Gmez Plaza

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);

2002-2003 Mariano Gmez Plaza

Sincronizacin de procesos 29

Problema del puente estrecho

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

2002-2003 Mariano Gmez Plaza

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);

2002-2003 Mariano Gmez Plaza

Sincronizacin de procesos 31

Codificacin los semforos

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

2002-2003 Mariano Gmez Plaza

P y V en spin locks (espera activa)


P (SEMAFORO *s) { while (1) { cli; if (s->contador > 0) { s->contador- = 1; sti; return; } sti; } /* fin del while */ } V (SEMAFORO *s) { cli; s->contador+ = 1; sti; }

2002-2003 Mariano Gmez Plaza

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; }

2002-2003 Mariano Gmez Plaza

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; }

2002-2003 Mariano Gmez Plaza

Sincronizacin de procesos 35

Comunicacin con mensajes

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

2002-2003 Mariano Gmez Plaza

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

2002-2003 Mariano Gmez Plaza

Sincronizacin de procesos 37

Ejemplos

Productor:

Consumidor:

int mensaje1[1000]; while (1) { --Preparamos el mensaje1-enviar (mensaje1, buzn); }

int mensaje2[1000]; while (1) { recibir (mensaje2, buzn); --Procesamos el mensaje2-}

Cliente:

Servidor:

char resp[1000]; envia(leer vax, buzon1); recibir (resp, buzon2);

char orden[100]; char resp[1000]; recibir (orden, buzon1); enviar (resp, buzon2);

2002-2003 Mariano Gmez Plaza

Sincronizacin de procesos 38

Por qu utilizar mensajes?

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

2002-2003 Mariano Gmez Plaza

Implementacin de los mensajes

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

2002-2003 Mariano Gmez Plaza

Sincronizacin de procesos 40

Implementacin de los mensajes

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

Longitud Mensajes de longitud fija Mensajes de longitud variable

2002-2003 Mariano Gmez Plaza

Sincronizacin de procesos 41

Vous aimerez peut-être aussi