Anda di halaman 1dari 42

SINCRONIZACION

Sincronizacin y Comunicacin
Procesos cooperan en sus tareas, durante su ciclo de vida sincronizacin y comunicacin:
Entre ellos o con el proceso maestro que los haya creado. Acceso controlado a estructuras de datos compartidas

Sincronizacin
Acto de asegurarse que los procesos/hilos independientes comienzan a ejecutar un bloque de cdigo concreto en el mismo tiempo lgico.

Sincronizacin y Comunicacin
static int indicadorEjecuciion = TRUE void main() { for (i=0; i<N; i++) createThread(. . .); sleep(1000); indicadorEjecucion=FALSE; ... }

TrabajoHilo() { ... while (indicadorEjecucion){ //iteracion de trabajo } return resultado; }

Sincronizacin y Comunicacin
Tres problemas:
Cmo puede un proceso pasar informacin a otro? Cmo se asegura que dos o ms procesos no se estorben mutuamente al efectuar actividades crticas ? Cmo se puede sincronizar la ejecucin de los procesos dependientes?

Condicin de competencia
Procesos colaboradores pueden compartir almacenamiento comn ambos leen y escriben: memoria principal, archivo compartido. P.e.: spooler

de impresin

Condicin de competencia
Procesos o hilos cooperativos concurrentes PROGRAMACION CONCURRENTE
shared double balance; Esquema de cdigo para p1 ... balance=balance+cantidad; ... load R1, balance load R2, cantidad add R1, R2 store R1, balance shared double balance; Esquema de cdigo para p2 ... balance=balance-cantidad; ... load R1, balance load R2, cantidad sub R1, R2 store R1, balance

Condicin de competencia
Ejecucin de p1 ... Load R1, balance Load R2, cantidad
Interrupcin del temporizador

Ejecucin de p2

Interrupcin del temporizador

load R1, balance load R2, cantidad sub R1, R2 store R1, balance ...

Add R1, R2 Store R1, balance ...

Condicin de competencia

contador:INTEGER:=0;

contador:INTEGER:=0; process Reportero; repeat imprimir(contador); contador:=0; forever; end Observador;

process Observador; repeat esperar_evento;


contador:=contador + 1; forever; end Observador;

Condicin de competencia
(data race, race condicion)
Cuando el resultado de una operacin depende:
De las velocidades relativas de los procesos, Del orden particular en que se intercalan las operaciones de los procesos concurrentes Lo producen: Procesos paralelos (concurrentes) que comparten: datos o recursos Directorio de spooler, in, out, Contador o balance.

Seccin o regin crtica


Se producen en el sw concurrente, siempre que dos procesos/hilos acceden a una variable compartida, por tanto, no deberan ejecutar esa parte del cdigo de forma concurrente. .

Seccin o regin crtica


shared double balance; Esquema de cdigo para p1 ... balance=balance+cantidad; ... contador:INTEGER:=0; process Observador; repeat esperar_evento;

shared double balance;


Esquema de cdigo para p2 ... balance=balance-cantidad; ... contador:INTEGER:=0; process Reportero; repeat imprimir(contador); contador:=0; forever; end Observador;

contador:=contador + 1;
forever; end Observador;

Cmo evitar las condiciones de carrera?

EXCLUSIN MUTUA
Si un proceso esta haciendo uso de un dato compartido, los otros no pueden hacerlo hasta que el otro termine. Problema: acceso a la variable compartida antes que el proceso que la este modificando la deje en estado consistente
Operaciones de acceso a la variable compartida no son atmicas.

Porteros PROTOCOLO ENTRADA/SALIDA

Condiciones para el sincronismo


Exclusin mutua: dos procesos nunca pueden estar simultneamente dentro de sus regiones crticas. Ausencia de postergacin innecesaria: si un proceso quiere entrar en su seccin crtica, puede hacerlo si los otros estn en seccin no crtica. Ningn proceso que se ejecute fuera de su regin crtica puede bloquear a otros procesos. Entrada garantizada (ausencia de inanicin): ningn proceso deber tener que esperar indefinidamente para entrar en su regin crtica No se puede hacer suposiciones sobre el hardware, (velocidades o el nmero de procesadores que intervienen).

Mecanismos de sincronizacin
Exclusin mutua con espera activa
Primitivas SLEEP y WAKEUP

Semforos
Mutexes Monitores Transferencia de mensajes Barreras

EXCLUSION MUTUA CON ESPERA ACTIVA


Exclusin mutua Primitivas SLEEP & WAKEUP Semforos Mutexes Monitores Transferencia de mensajes Barreras

Exclusin mutua con espera activa


Inhabilitacin de interrupciones Variables de bloqueo (candados) Alternancia estricta Solucin de Peterson

Hardware de sincronizacin: TSL

Inhabilitacin de interrup.

Exclusin mutua

Cada proceso inhabilite las interrupciones justo despus de ingresar en su regin crtica.

Y vuelva a habilitarlas justo antes de salir de ella.


Instrucciones mquina DISABLE (inhabilitar las interrupciones) y ENABLE (habilitar las interrupciones).

Inhabilitacin de interrup.

Exclusin mutua

Con las interrupciones inhabilitadas no hay interrupciones de reloj.


CPU slo se conmuta de un proceso a otro como resultado de interrupciones de reloj o de otro tipo.

Proceso puede examinar y actualizar la memoria compartida sin temor operaciones atmicas.

Inhabilitacin de interrup.
Desventajas:

Exclusin mutua

Regin crtica debe ser corta perder interrupciones generadas por los dispositivos de E/S. Inhabilitando las interrupciones, tambin se impide la ejecucin de:
Procesos cooperantes que no intentan entrar en la regin crtica
Resto de los procesos del sistema.

Peligroso darle al usuario la posibilidad de inhabilitar las interrupciones perdida de las subsiguientes interrupciones y el acaparamiento en exclusiva de la CPU.

Inhabilitacin de interrup.
Por tanto:
Tcnica til o prctica para el ncleo Mtodo apropiado para sistemas monoprocesador.

Exclusin mutua

Pero no es apropiada como mecanismo general de exclusin mutua para los procesos de usuario

Inhabilitacin de interrup.
shared double balance,cantidad; Programa para p1 ... deshabilitarInterrupciones(); balance=balance+cantidad; habilitarInterrupciones(); ...

Exclusin mutua

shared double balance, cantidad;


Programa para p2 ... deshabilitarInterrupciones(); balance=balance-cantidad; habilitarInterrupciones(); ...

Variables de bloqueo
0 (false) libre 1 (true) ocupada

Exclusin mutua

Variable compartida booleana, indica si la crtica est ocupada o no: Cuando un proceso llegue a la entrada de la regin debe consultar el valor de la variable candado:
si es 0 pone en 1 y entra a la regin crtica si es 1 proceso debe esperar hasta que sea 0

Variables de bloqueo
shared boolean bloqueo = FALSE; shared double cantidad, balance; Programa para P1 ... while (bloqueo) { NULL;} bloqueo=TRUE; balance=balance+cantidad; bloqueo=FALSE; ...

Exclusin mutua

Programa para P2 ... while (bloqueo) { NULL;} bloqueo=TRUE; balance=balance-cantidad; bloqueo=FALSE; ...

La consulta del candado y su posterior puesta a True, no es atmica.


No se asegura la exclusin mutua.

Variables de bloqueo
(bloqueado en el while)
Ejecucin P2

Exclusin mutua

Ejecucin P1

bloqueo=TRUE

bloqueo=FALSE

Interrupcin

Interrupcin

Interrupcin

Variables de bloqueo
entrar(bloqueo) { deshabilitarInterrupciones(); while(bloqueo){ } bloqueo=TRUE; habilitarInterrupciones();

Exclusin mutua

salir(bloqueo) { deshabilitarInterrupciones(); bloqueo=FALSE; habilitarInterrupciones(); }

shared double balance,cantidad; Shared boolean bloqueo=FALSE; Programa para p1 entrar(bloqueo); balance=balance+cantidad; salir(bloqueo);

shared double balance, cantidad; Shared boolean bloqueo=FALSE; Programa para p2 entrar(bloqueo); balance=balance-cantidad; salir(bloqueo);

Alternancia estricta

Exclusin mutua

Usa una variable compartida, que indica a quin le corresponde entrar en la Regin Crtica
Inicialmente la variable es FALSE. El primer proceso examina la variable, ve que es FALSE, y entra en su RC. El segundo proceso tambin ve que es FALSE
No entra en la RC da vueltas en ciclos espera activa. Bloqueo giratorio

Al salir el primer proceso (variable=TRUE), el segundo recin puede entrar a su RC.

Alternancia estricta
shared boolean bloqueo = FALSE; shared boolean cantidad, balance; Programa para P1 ... while (bloqueo) { NULL;} balance=balance+cantidad; bloqueo=TRUE; ...

Exclusin mutua

Programa para P2 ... while (!bloqueo) { NULL;} balance=balance-cantidad; bloqueo=FALSE; ...

Viola la condicin de ausencia de postergacin


Requiere que los procesos se alternen estrictamente para entrar a sus regiones crticas.

Algoritmo de Peterson

Exclusin mutua

Dekker Combinando la idea de tomar turnos con la de tener variables de candado y variables de advertencia: solucin software para el problema de la exclusin mutua sin alternancia estricta . 1981 Peterson descrubre forma ms sencilla de lograr la exclusin mutua
Manejar ms informacin: una variable ms.

Ser verdadera si un proceso quiere entrar a la seccin crtica.

Algoritmo de Peterson
#define FALSE 0 #define TRUE 1 #define N 2 int turno; int interesado [N]; void enter_region (int process) { int otro; otro = 1-process; interesado [process] = TRUE; turno = process; while (turno == process && interesado [otro] == TRUE); } void leave_region (int process) { interesado [process] = FALSE; }

Exclusin mutua
Dos procesos 0 y 1 Cada proceso invoca para ingresar a SC. Despus de SC el proceso invoca

enter_region (proceso)

leave_region() ya

termin y permitir que entre otro.

Clave xito: procesos manifiestan la intencin de entrar 1ro.

Algoritmo de Peterson
Analizando condiciones:

Exclusin mutua

Exclusin mutua: si dos procesos quieren entrar no pueden entrar al mismo tiempo: while (interesado [otro] && turno == process) no puede ser negativa para ambos procesos a la vez. Si Pi entra primero turn=i,

para que el otro entre turn= 1-i, o bien interested[i] = FALSE.

Algoritmo de Peterson
Analizando condiciones:
Ausencia de postergacin innecesaria:

Exclusin mutua

Si Pi entra primero y el otro est ejecutando su seccin no crtica Interesado [otro] = FALSE Pi no tiene impedimento de entrar

Algoritmo de Peterson
Analizando condiciones:
Entrada garantizada:

Exclusin mutua

Si un proceso quiere entrar, slo debe esperar que el otro salga de la seccin crtica. Puede haber inanicin: Una vez que se cumple la condicin que permite a un proceso entrar, esta debe ser permanente hasta que le toca la CPU al proceso que quiere entrar. Si la condicin fuera intermitente, el planificador puede ser nuestro enemigo.

Hw de sincronizacin:TS

Exclusin mutua

Instrucciones especiales para resolver el problema de la seccin crtica.


Instrucciones que combinan dos o tres operaciones en una sola operacin atmica.

TS RX,bloqueo
Test and Set probar y escribir

Lee el contenido de la palabra de memoria (bloqueo), Lo coloca en el registro RX Le pone un valor diferente a 0 o FALSE.

Hw de sincronizacin:TS

Exclusin mutua

Se garantiza que: la lectura de la palabra y la escritura en ella son indivisibles. En sistemas multiprocesador, la CPU que ejecuta TS bloquea el bus de memoria.
Se requiere una variable compartida bloqueo para coordinar el acceso a la memoria compartida
bloqueo = 0 (false) cualquier proceso le asigna 1 (true) usando TS y entra en la seccin crtica
Al terminar el proceso, le asigna 0 (false) con MOVE.

Ningn otro proceso o procesador puede tener acceso a la palabra de memoria antes de acabarse de ejecutar TS.

Hw de sincronizacin:TS

Exclusin mutua

Cmo es que puede esta instruccin evitar que dos procesos entren simultneamente en sus regiones crticas?
enter_region: ts register, lock cmp register, 0 jne enter_region ret
leave_region: move lock,0 ret

Pi:
.
.

enter_region; seccion_critica; leave_region;


. .

Hw de sincronizacin:TS
shared int lock=0; while (ts(lock)==1) skip; seccion_critica; lock=0;

Exclusin mutua

Cuando un proceso llega a la entrada de la regin crtica, si el bloqueo no tiene 0, el proceso debe de ejecutarse en ciclo hasta que el bloqueo sea 0.

Tambin utiliza espera activa


Gasto intil de tiempo de CPU

Este protocolo provee exclusin mutua sin postergacin innecesaria y sirve para n procesos.

SLEEP & WAKEUP

Exclusin mutua Primitivas SLEEP & WAKEUP Semforos Mutexes Monitores Transferencia de mensajes Barreras

Problema

Semforos

Soluciones de Peterson y Test And Set, tiene:


Espera activa: desperdicia tiempo de CPU. Problema de la inversin de prioridades: hambruna.

Solucin: primitivas de comunicacin


Se bloquean No desperdician tiempo de CPU.

SLEEP & WAKEUP

Definicin
SLEEP:

Sleep & Wakeup

Llamada al sistema, hace que el invocador se bloquee

WAKEUP:
Llamada que activa al proceso que lleva como parmetro

Ambas tienen un parmetro: direccin de memoria que relaciona las llamadas SLEEP con las llamadas WAKEUP.

Productor - Consumidor
(buffer limitado)

Sleep & Wakeup

Dos procesos comparten un buffer de tamao fijo. Productor: coloca informacin Consumidor: saca informacin

Problemas:
Buffer lleno y productor quiere colocar Buffer vaco y consumidor quiere sacar.

Solucin: productor y consumidor se desactiven en el momento adecuado.

Productor - Consumidor

Sleep & Wakeup

Productor - Consumidor

Sleep & Wakeup

Puede generarse condiciones de competencia?.


Acceso a count es irrestricto

Solucin: aumentar ms memoria bit de espera para activar.


Alcanca de seales de activar o despertar.

Si hay n procesos?.... Cunta memoria es necesaria?.