Вы находитесь на странице: 1из 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
static int indicadorEjecuciion = TRUE
void main() {
void main() {
for (i=0; i<N; i++)
for (i=0; i<N; i++)
createThread(. . .);
createThread(. . .);
sleep(1000);
sleep(1000);
indicadorEjecucion=FALSE;
indicadorEjecucion=FALSE;
...
...
}
}

TrabajoHilo() {
TrabajoHilo() {
...
...
while (indicadorEjecucion){
while (indicadorEjecucion){
//iteracion de trabajo
//iteracion de trabajo
}
}
return resultado;
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;

shared double balance;

Esquema de cdigo para


p1
...
balance=balance+cantidad;
...

Esquema de cdigo para


p2
...
balance=balance-cantidad;
...

load R1, balance


load R2, cantidad
add R1, R2
store R1, balance

load R1, balance


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

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

Ejecucin

load R1, balance


load R2, cantidad
sub R1, R2
store R1, balance
Interrupcin del temporizador . . .
Add R1, R2
Store R1, balance
...

Condicin de competencia

contador:INTEGER:=0;

contador:INTEGER:=0;

process Observador;
repeat
esperar_evento;

process Reportero;
repeat
imprimir(contador);

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

contador:=0;
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;

shared double balance;

Esquema de cdigo para p1


...
balance=balance+cantidad;
...

Esquema de cdigo para p2


...
balance=balance-cantidad;
...

contador:INTEGER:=0;
process Observador;
repeat
esperar_evento;
contador:=contador + 1;
forever;
end Observador;

contador:INTEGER:=0;
process Reportero;
repeat
imprimir(contador);
contador:=0;
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.

Exclusin mutua

Por tanto:
Tcnica til o prctica para el ncleo
Mtodo apropiado para sistemas
monoprocesador.
Pero no es apropiada como mecanismo general de
exclusin mutua para los procesos de usuario

Inhabilitacin de interrup.

Exclusin mutua

shared double
balance,cantidad;

shared double balance,


cantidad;

Programa para p1
...
deshabilitarInterrupciones();
balance=balance+cantidad;
habilitarInterrupciones();
...

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

Variables de bloqueo

Exclusin mutua

Variable compartida booleana, indica si la crtica


est ocupada o no:
0 (false) libre
1 (true) ocupada

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

Exclusin mutua

shared
sharedboolean
booleanbloqueo
bloqueo==FALSE;
FALSE;
shared
shareddouble
doublecantidad,
cantidad,balance;
balance;
Programa
Programapara
paraP1
P1
......
while
while(bloqueo)
(bloqueo){{NULL;}
NULL;}
bloqueo=TRUE;
bloqueo=TRUE;
balance=balance+cantidad;
balance=balance+cantidad;
bloqueo=FALSE;
bloqueo=FALSE;
......

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

La consulta del candado y su posterior puesta a


True, no es atmica.

No se asegura la exclusin mutua.

Variables de bloqueo

Exclusin mutua

(bloqueado en el while)
Ejecucin P2

Interrupcin

bloqueo=FALSE

Interrupcin

Interrupcin

bloqueo=TRUE

Ejecucin P1

Variables de bloqueo
entrar(bloqueo)
entrar(bloqueo){{
deshabilitarInterrupciones();
deshabilitarInterrupciones();
while(bloqueo){
while(bloqueo){

}}

}}
bloqueo=TRUE;
bloqueo=TRUE;
habilitarInterrupciones();
habilitarInterrupciones();

Exclusin mutua

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

shared double
balance,cantidad;
Shared boolean
bloqueo=FALSE;

shared double balance,


cantidad;
Shared boolean
bloqueo=FALSE;

Programa para p1
entrar(bloqueo);
balance=balance+cantidad;

Programa para p2
entrar(bloqueo);
balance=balance-cantidad;

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

Exclusin mutua

shared
sharedboolean
booleanbloqueo
bloqueo==FALSE;
FALSE;
shared
sharedboolean
booleancantidad,
cantidad,balance;
balance;
Programa
Programapara
paraP1
P1
......
while
while(bloqueo)
(bloqueo){{NULL;}
NULL;}
balance=balance+cantidad;
balance=balance+cantidad;
bloqueo=TRUE;
bloqueo=TRUE;
......

Programa
Programapara
paraP2
P2
......
while
while(!bloqueo)
(!bloqueo){{NULL;}
NULL;}
balance=balance-cantidad;
balance=balance-cantidad;
bloqueo=FALSE;
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
#defineFALSE
FALSE00
#define
#defineTRUE
TRUE11
#define
#defineNN 22
int
intturno;
turno;
int
interesado
int interesado[N];
[N];
void
voidenter_region
enter_region(int
(intprocess)
process)
{{
int
intotro;
otro;
otro
otro==1-process;
1-process;
interesado
interesado[process]
[process]==TRUE;
TRUE;
turno
=
process;
turno = process;
while
while(turno
(turno==
==process
process&&
&&interesado
interesado[otro]
[otro]==
==TRUE);
TRUE);
}}

Exclusin mutua

Dos
Dosprocesos
procesos00yy11
Cada
Cadaproceso
procesoinvoca
invoca
enter_region
enter_region(proceso)
(proceso)
para
paraingresar
ingresaraaSC.
SC.

Despus
Despusde
deSC
SCelelproceso
proceso
invoca
invocaleave_region()
leave_region()

ya
yatermin
terminyypermitir
permitirque
que
entre
entreotro.
otro.

void
voidleave_region
leave_region(int
(intprocess)
process)
{{
interesado
interesado[process]
[process]==FALSE;
FALSE;
}}

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

Algoritmo de Peterson

Exclusin mutua

Analizando condiciones:
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

Exclusin mutua

Analizando condiciones:
Ausencia de postergacin innecesaria:
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

Exclusin mutua

Analizando condiciones:
Entrada garantizada:
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.

Ningn otro proceso o procesador puede tener acceso a la


palabra de memoria antes de acabarse de ejecutar TS.

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.

Hw de sincronizacin:TS

Exclusin mutua

Cmo es que puede esta instruccin evitar que dos


procesos entren simultneamente en sus regiones
crticas?
enter_region:
enter_region:
tstsregister,
register,lock
lock
cmp
cmpregister,
register,00
jne
jneenter_region
enter_region
ret
ret
leave_region:
leave_region:
move
movelock,0
lock,0
ret
ret

Pi:
Pi:

.
.
.
.

enter_region;
enter_region;
seccion_critica;
seccion_critica;
leave_region;
leave_region;
.
.
.
.

Hw de sincronizacin:TS

Exclusin mutua

shared
sharedint
intlock=0;
lock=0;
while
while(ts(lock)==1)
(ts(lock)==1)skip;
skip;
seccion_critica;
seccion_critica;
lock=0;
lock=0;
Cuando
Cuando un
un proceso
proceso llega
llega aa la
la entrada
entrada de
de la
la regin
regin crtica,
crtica, sisi
el
el bloqueo
bloqueo no
no tiene
tiene 0,
0, el
el proceso
proceso debe
debe de
de ejecutarse
ejecutarse en
en ciclo
ciclo
hasta
hasta que
que el
el bloqueo
bloqueo sea
sea 0.
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 & Wakeup

SLEEP:
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

Sleep & Wakeup

(buffer limitado)
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?.

Вам также может понравиться