Академический Документы
Профессиональный Документы
Культура Документы
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;
Condicin de competencia
Ejecucin de p1
de p2
...
Load R1, balance
Load
R2, cantidad
Interrupcin
del temporizador
Ejecucin
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)
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;
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.
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
Inhabilitacin de interrup.
Exclusin mutua
Inhabilitacin de interrup.
Exclusin mutua
Inhabilitacin de interrup.
Desventajas:
Exclusin mutua
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;
Programa para p1
...
deshabilitarInterrupciones();
balance=balance+cantidad;
habilitarInterrupciones();
...
Programa para p2
...
deshabilitarInterrupciones();
balance=balance-cantidad;
habilitarInterrupciones();
...
Variables de bloqueo
Exclusin mutua
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;
......
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;
Programa para p1
entrar(bloqueo);
balance=balance+cantidad;
Programa para p2
entrar(bloqueo);
balance=balance-cantidad;
Alternancia estricta
Exclusin mutua
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;
......
Algoritmo de Peterson
Exclusin mutua
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;
}}
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
Hw de sincronizacin:TS
Exclusin mutua
Hw de sincronizacin:TS
Exclusin mutua
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.
Exclusin mutua
Primitivas SLEEP & WAKEUP
Semforos
Mutexes
Monitores
Transferencia de mensajes
Barreras
Problema
Semforos
Definicin
SLEEP:
Llamada al sistema, hace que el invocador se bloquee
WAKEUP:
Llamada que activa al proceso que lleva como
parmetro
Productor - Consumidor
(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.
Productor - Consumidor
Productor - Consumidor