Académique Documents
Professionnel Documents
Culture Documents
Programacin Concurrente
{ Tema1: Introduccin a la Programacin
Concurrente
{ Tema 2: Sincronizacin con Espera
Activa
{ Tema 3: Sincronizacin con Semforos
BLP/LI 1
Mdulo IV
Programacin Concurrente
Tema 2
Sincronizacin con Espera
Activa
BLP/LI 2
{ Introduccin
{ Sincronizacin Condicional
{ Exclusin Mutua
{ Espera Activa vs. Espera Pasiva
{ Conclusiones
BLP/LI 3
Introduccin
BLP/LI 4
Introduccin
{ Modelo de Memoria Compartida
z Los procesos pueden acceder a una
memoria comn
z Existen variables compartidas que
varios procesos pueden leer y escribir
BLP/LI 5
Introduccin
BLP/LI 6
Introduccin
{ Lectura simultneas
z Ambos procesos leen el valor de la variable
{ Escrituras simultneas
z El resultado de la escritura simultnea sobre una variable
compartida de tipo simple ser el valor escrito por uno u
otro proceso
z Nunca una mezcla de las dos escrituras
{ Lectura y Escritura simultneas
z Si un proceso lee sobre una variable compartida de tipo
simple y simultneamente otro escribe sobre ella, el
resultado de la lectura ser o bien el valor de la variable
antes de la escritura o bien el valor de la variable despus
de la escritura
z Nunca un valor intermedio
BLP/LI 7
Introduccin
Relaciones Actividades
entre procesos entre procesos
Hay
diferentes
Se lleva a
tipos Sincronizacin
cabo
mediante
Condicional
Competencia Sincronizacin
A veces Exclusin
necesita
Mutua
Cooperacin Comunicacin
BLP/LI 8
Introduccin
z Comunicacin
{ Se utilizan las variables compartidas para
compartir informacin
{ Un proceso escribe un valor en la variable y
otro proceso lee ese valor
BLP/LI 9
Introduccin
BLP/LI 10
{ Introduccin
{ Sincronizacin Condicional
{ Exclusin Mutua
{ Espera Activa vs. Espera Pasiva
{ Conclusiones
BLP/LI 11
Sincronizacin Condicional
{ Se produce cuando un proceso debe
esperar a que se cumpla una cierta
condicin para proseguir su ejecucin
{ Esta condicin slo puede ser activada
por otro proceso
Diagrama de Precedencia
BLP/LI 12
Sincronizacin Condicional
{ Si los procesos muestran por pantalla* el nombre de la
accin que han realizado, el resultado de ejecutar el
programa concurrente del diagrama podra ser
cualquiera de los siguientes:
Algunas Salidas Posibles:
PA1 PA2 PB1 PB2
Proceso A PA1 PA2
PA1 PB1 PA2 PB2
Salidas No Posibles:
PB1 PB2 PA1 PA2
* La escritura en pantalla con write es
una instruccin atmica en PascalFC
BLP/LI 13
program sinccond;
Sincronizacin Condicional
{ Intercalacin de instrucciones que obtiene la
salida
PA1 PB1 PA2 PB2
BLP/LI 15
Sincronizacin Condicional
{ Intercalacin de instrucciones que obtiene la
salida
PB1 PA1 PA2 PB2
Sincronizacin Condicional
{ Intercalacin de instrucciones que obtiene la
salida
PA1 PA2 PB1 PB2
BLP/LI 17
BLP/LI 18
Exclusin Mutua
{ Qu es la Exclusin Mutua?
z Desde un punto de vista general la exclusin mutua
se tiene cuando varios procesos compiten por un
recurso comn de acceso exclusivo
z Slo uno de los procesos puede estar accediendo al
recurso a la vez y los dems tienen que esperar
z Cuando un proceso libera el recurso de acceso
exclusivo y otro proceso estaba esperando, el
proceso que espera acceder al recurso
z De forma mas concreta, para comprender su
funcionamiento se estudia El Problema de la
Exclusin Mutua
BLP/LI 19
Exclusin Mutua
{ El problema de la Exclusin Mutua
z Se tienen dos o ms procesos concurrentes, que
ejecutan indefinidamente una secuencia de
instrucciones dividida en dos secciones
{ Seccin crtica
{ Seccin no crtica
BLP/LI 20
Exclusin Mutua
{ Seccin Crtica
z Secuencia de instrucciones que acceden a un recurso
compartido de acceso exclusivo
z Puesto que el recurso es de acceso exclusivo y solo un
proceso puede acceder a l al mismo tiempo, cada proceso
debe ejecutar las instrucciones de la seccin crtica sin que
haya intercalacin de instrucciones de la seccin crtica de
otros procesos
z Se pueden intercalar instrucciones que no hagan uso del
recurso, es decir, instrucciones fuera de la seccin crtica de
otros procesos
{ Seccin No Crtica
z Secuencia de instrucciones que pueden ser ejecutadas
concurrentemente por todos los procesos
z Se pueden intercalar con las instrucciones de la seccin crtica
y de la seccin no crtica de otros procesos
BLP/LI 21
Exclusin Mutua
{ El preprotocolo y
postprotocolo son las
secuencias de instrucciones
process type proceso;
que deben ejecutar los
begin
repeat procesos para garantizar que
preprotocolo; las instrucciones de la
seccion_critica; seccin crtica se ejecutan
postprotocolo; cumpliendo los requisitos
seccion_no_critica; { Se asume que los procesos
forever finalizan su ejecucin fuera
end;
de la seccin crtica, de
forma que siempre hayan
ejecutado el postprotocolo
BLP/LI 22
BLP/LI 23
Propiedades de Correccin
{ Pese a que pueda parecer sencillo, implementar
correctamente un programa para El Problema de
la Exclusin Mutua es complejo y hay que tener
en cuenta que se deben cumplir ciertas
propiedades de correccin
{ Se estudian con detenimiento porque las tendremos
que cumplir siempre que desarrollemos cualquier
programa concurrente, no slo en este problema
concreto
{ Una propiedad de un programa concurrente es
una caracterstica que se debe cumplir en cualquier
posible intercalacin de las instrucciones atmicas
BLP/LI 24
Propiedades de Correccin
{ Exclusin Mutua
z En cada instante solo puede estar un proceso ejecutando
su seccin crtica porque slo un proceso puede acceder al
recurso compartido a la vez
{ Ausencia de Retrasos Innecesarios
z Si un proceso intenta entrar en su seccin crtica y no hay
otro proceso que tambin quiera entrar, entonces deber
entrar sin retrasos
{ Ausencia de Inanicin (starvation)
z Todo proceso que quiera entrar en la seccin crtica en
algn momento deber conseguirlo
z Se produce inanicin cuando un proceso quiere entrar en
la seccin critica pero sistemticamente es otro proceso el
que entra en ella
BLP/LI 25
Propiedades de Correccin
{ Ausencia de Interbloqueos
z Si varios procesos intentan entrar simultneamente a su
seccin crtica, al menos uno de ellos debe lograrlo. Un
interbloqueo se producira si ambos procesos quedaran
esperando
z Interbloqueo activo (livelock)
{ Cuando los procesos ejecutan instrucciones que no
producen un avance real del programa, son intiles
z Interbloqueo pasivo (deadlock)
{ Cuando todos los procesos estn esperando
{ Como todos estn esperando, ninguno de ellos podr
cambiar las condiciones para que dejen de esperar
BLP/LI 26
Propiedades de Correccin
{ Las propiedades se dividen en dos tipos
z De seguridad (safety)
{ Si alguna de estas propiedades se incumple en
alguna ocasin, el programa se comportar de
forma errnea
{ Aseguran que nada malo suceder durante la
ejecucin y deben cumplirse siempre
z De Vida (liveness)
{ Si alguna de estas propiedades se incumple en
alguna ocasin, el programa se comportara de
forma correcta pero ser lento y desaprovechar
los recursos
{ Aseguran que algo bueno ocurrir alguna vez
durante la ejecucin del programa
BLP/LI 27
Propiedades de Correccin
{ Propiedades de seguridad (safety)
z Exclusin Mutua
z Ausencia de Interbloqueo pasivo
BLP/LI 28
Propiedades de Correccin
{ La Ausencia de Inanicin es una propiedad que
asegura que todos los procesos pueden acceder a
la seccin crtica
{ Es posible que unos procesos accedan en muchas
ocasiones a la seccin crtica y otros slo accedan
de vez en cuando
{ El acceso a la seccin crtica se puede especificar
con ms Justicia (fairness)
z Espera lineal: Si un proceso quiere entrar en la seccin
crtica, entrar antes de que otro proceso entre ms de
una vez
z Espera FIFO: Si un proceso quiere entrar en la seccin
crtica, entrar antes de que entre otro proceso que lo
solicite despus que l
BLP/LI 29
BLP/LI 30
1 Aproximacin
Alternancia Obligatoria
BLP/LI 31
1 Aproximacin
Alternancia Obligatoria
type tControl = record
turno: integer;
end;
1 Aproximacin
Alternancia Obligatoria
{ A continuacin se muestra una posible
intercalacin de las instrucciones
{ Se supone que el turno comienza en 1
{ Se puede observar cmo las instrucciones
de la seccin crtica del proceso p1 no se
intercalan con las instrucciones de la
seccin crtica de p2
{ Se puede observar cmo las instrucciones
que no estn en la seccin crtica se
pueden intercalar con instrucciones de la
seccin crtica
BLP/LI 33
p1 p2 c.turno
1 1 Aproximacin
while c.turno <> 1 1
2
3
Alternancia
write('SC1 ');
Obligatoria
while c.turno <> 2
1
1
4 write('SC2 '); 1
5 c.turno := 2; 2
6 while c.turno <> 2 2
7 write('SNC1 '); 2
8 write('SC1 '); 2
9 write('SNC2 '); 2
10 write('SC2 '); 2
11 while c.turno <> 1 2
12 while c.turno <> 1 2
13 c.turno := 1; 1
14 while c.turno <> 1 1
15 write('SC1 '); 1
16 write('SNC1 '); 1
17 write('SC2 '); 1
18
BLP/LI 34
1 Aproximacin
Alternancia Obligatoria
BLP/LI 35
BLP/LI 36
2 Aproximacin
No Exclusin Mutua
2 Aproximacin
No Exclusin Mutua
type tControl = record
p1sc,p2sc: boolean;
end;
p1 p2 c.p1sc c.p2sc
1 while c.p2sc false false
2 c.p1sc := true; true false
3 while c.p1sc true false
4 write('SC1 '); true false
5 while c.p1sc true false
6 write('SC2 '); true false
7 while c.p1sc true false
8 c.p1sc := false; false false
9 while c.p1sc false false
10 write('SNC1 '); false false
11 c.p2sc := true; false true
12 write('SC1 '); false true
13 write('SNC2 '); false true
14 while c.p2sc false true
15 write('SC2 '); false true
16 while c.p2sc false true
17 c.p2sc := false; false false
18 while c.p2sc false false
19
BLP/LI 39
2 Aproximacin
No Exclusin Mutua
BLP/LI 40
2 Aproximacin
No Exclusin Mutua
BLP/LI 41
BLP/LI 42
3 Aproximacin
Interbloqueo
{ El problema de la aproximacin
anterior es que los dos procesos
miran y despus entran, pudiendo
entrar los dos a la vez
{ En la 3 aproximacin, antes de
comprobar si hay alguien dentro,
vamos a hacer una peticin
{ Si alguien lo ha pedido ya, nos
esperamos
BLP/LI 43
3 Aproximacin
Interbloqueo
type tControl = record
p1p,p2p: boolean;
end;
p1 p2 c.p1p c.p2p
1 c.p1p := true; true false
2 while c.p2p true false
3 c.p2p := true; true true
4 while c.p1p true true
5 write('SC1 '); true true
6 while c.p1p true true
7 write('SC2 '); true true
8 c.p1p := false; false true
9 while c.p1p false true
10 write('SNC1 '); false true
11 write('SNC2 '); false true
12 write('SC1 '); false true
13 c.p1p := true; true true
14 while c.p2p true true
15 write('SC2 '); true true
16 c.p2p := false; true false
17 while c.p2p true false
18 write('SC1 '); true false
19
BLP/LI 45
3 Aproximacin
Interbloqueo
BLP/LI 47
4 Aproximacin
Espera Indefinida
BLP/LI 48
4 Aproximacin
Espera Indefinida
process p1(var c: tControl);
begin
repeat
(* Preprotocolo *) type tControl = record
c.p1p := true; p1p,p2p: boolean;
while c.p2p do end;
begin
c.p1p := false;
c.p1p := true;
end;
(* Seccin Crtica *)
write('SC1 ');
write('SC2 ');
(* Postprotocolo *)
acceso.p1p := false;
(* Seccin No Crtica *)
write('SNC1 ');
write('SNC2 ');
forever
end; BLP/LI 49
4 Aproximacin
Espera Indefinida
BLP/LI 50
4 Aproximacin
Espera Indefinida
{ Interbloqueo
p1 p2 c.p1p c.p2p
1 c.p1p := true; true false
2 c.p2p := true; true true
3 while c.p2p true true
4 while c.p1p true true
5 c.p1p := false; false true
6 c.p2p := false; false false
7 c.p1p := true; true false
8 c.p2p := true; true true
9 while c.p2p true true
10 while c.p1p true true
11 c.p1p := false; false true
12 c.p2p := false; false false
BLP/LI 51
4 Aproximacin
Espera Indefinida
BLP/LI 52
p1 p2 c.p1p c.p2p
1 c.p1p := true; true false
2 c.p2p := true; true true
3 while c.p1p true true
4 c.p2p := false; true false
5 while c.p2p true false
6 c.p2p := true; true true
7 write('SC1 '); true true
8 while c.p1p true true
9 write('SC2 '); true true
10 c.p2p := false; true false
11 c.p1p := false; false false
12 write('SNC1 '); false false
13 write('SNC2 '); false false
14 c.p2p := true; false true
15 c.p1p := true; true true
16 while c.p1p true true
17 c.p2p := false; true false
18 while c.p2p true false
19 write('SC1 '); true false
BLP/LI 53
BLP/LI 54
Solucin
Algoritmo de Dekker
{ Es una combinacin de la 1 y 4
aproximacin
{ Las variables booleanas aseguran la
exclusin mutua (como en la 4
aproximacin)
{ Al detectar competencia, una
variable turno se encarga del
desempate
BLP/LI 55
Solucin
Algoritmo de Dekker
process p1(var c: tControl);
begin
repeat
(* Preprotocolo *)
c.p1p := true; type tControl = record
while c.p2p do p1p,p2p: boolean;
if c.turno <> 1 then turno: integer;
begin end;
c.p1p := false;
while c.turno <> 1 do;
c.p1p := true;
end;
(* Seccin Crtica *)
write('SC1 ');
write('SC2 ');
(* Postprotocolo *)
c.p1p := false;
c.turno := 2;
(* Seccin No Crtica *)
write('SNC1 ');
write('SNC2 ');
forever
end; BLP/LI 56
Solucin
Algoritmo de Dekker
BLP/LI 57
Sincronizacin con Espera Activa
{ Introduccin
{ Sincronizacin Condicional
{ Exclusin Mutua
z Propiedades de Correccin
z 1 Aproximacin: Alternancia Obligatoria
z 2 Aproximacin: No Exclusin Mutua
z 3 Aproximacin: Interbloqueo
z 4 Aproximacin: Espera indefinida
z Solucin: Algoritmo de Dekker
z Uso de la Exclusin Mutua
{ Espera Activa vs. Espera Pasiva
{ Conclusiones
BLP/LI 58
BLP/LI 59
BLP/LI 60
Uso de la Exclusin Mutua
{ Tipos de instrucciones atmicas
z De grano fino
{ Ofrecidas por el lenguaje de programacin y el
hardware al desarrollador
{ Habitualmente se corresponden con las
instrucciones mquina del procesador
z De grano grueso
{ Conjunto de sentencias que ejecuta un proceso sin
interferencias de otros procesos
{ Los lenguajes de programacin y el sistema
hardware disponen de mecanismos para hacer que
un grupo de sentencias se ejecuten como una
instruccin atmica de grano grueso
BLPBLP/LI
(06-07) 61
BLP/LI 62
BLP/LI 63
Uso de la Exclusin Mutua
{ Para simplificar el estudio terico de la exclusin
mutua y de las secciones crticas de un programa,
en lugar de poner el cdigo completo del
preprotocolo y del postprotocolo usaremos
comentarios
{ Cuando un proceso entra en la seccin crtica
para hacer uso de un recurso compartido de
acceso exclusivo usaremos el comentario
(*preprotocolo(recurso)*)
BLP/LI 64
BLP/LI 66
Uso de la Exclusin Mutua
BLP/LI 67
Ejercicio 1
{ Existen 5 personas en el mundo, 1
museo, y slo cabe una persona dentro
del museo
{ Las personas realizan tres acciones dentro
del museo
z Cuando entran al museo saludan: hola?
z Cuando ven el museo se sorprenden: qu
bonito! y esto es alucinante!!!
z Cuando se van del museo se despiden: adis
{ Al salir les ha gustado tanto que vuelven
a entrar
BLP/LI 68
Ejercicio 1
{ Se pide
z Tipos de procesos
z Nmero de procesos del programa concurrente
y de qu tipo son
z Escribir lo que hace cada proceso
z Identificar los recursos compartidos
z Identificar la seccin o secciones crticas
{ Indicar el inicio con (*preprotocolo(recurso)*)
BLP/LI 69
Ejercicio 2
BLP/LI 70
Ejercicio 3
{ Considerar que caben infinitas personas
dentro del museo
{ Las personas no pueden hablar a la vez
{ Cada persona al entrar tiene que saludar
diciendo cuntas personas hay en el
museo: hola, ya somos 5
{ Al despedirse tiene que decir el nmero
de personas que quedan tras irse: Me
voy, adis a los 4
BLP/LI 71
BLP/LI 72
Problemas de la Espera Activa
{ Se ha trabajado en el modelo de Memoria
Compartida usando variables compartidas
para la sincronizacin
{ Se denomina Espera Activa porque los
procesos estn ejecutando instrucciones
(estn activos) incluso cuando tienen que
esperar para poder continuar su ejecucin
BLP/LI 73
BLP/LI 75
Sincronizacin con Espera Activa
{ Introduccin
{ Sincronizacin Condicional
{ Exclusin Mutua
{ Espera Activa vs. Espera Pasiva
z Problemas de la Espera Activa
z Herramientas de Espera Pasiva
z Implementacin de la Multiprogramacin
{ Conclusiones
BLP/LI 76
BLP/LI 77
BLP/LI 78
Herramientas de Espera Pasiva
{ Herramientas de Espera Pasiva
z Modelo de Memoria Compartida
{ Semforos
{ Monitores
{ Regiones Crticas
{ Regiones Crticas Condicionales
{ Sucesos
{ Buzones
{ Recursos
z Modelo de Paso de Mensajes
{ Envo asncrono
{ Envo sncrono o cita simple
{ Invocacin Remota o cita extendida
BLP/LI 79
BLP/LI 80
Implementacin
de la Multiprogramacin
BLP/LI 81
Implementacin
de la Multiprogramacin
{ Planificacin (Scheduling)
z Poltica que determina la asignacin, en
cada instante, de los procesos a los
procesadores disponibles
{ FIFO: El primero que lleg
{ Lineal: No puede volver el mismo proceso
hasta que no hayan ejecutado los dems
{ Prioridades: El ms prioritario
{ Aleatoria
BLP/LI 82
Implementacin
de la Multiprogramacin
{ Despacho (Dispatching)
z Configuracin del procesador para que ejecute
el proceso que ha determinado la planificacin
z El proceso debe ejecutarse con las mismas
condiciones en las que abandon el procesador
z Para ello el sistema dispone de un Descriptor
de Proceso (Process Control Block) por cada
proceso que alberga toda la informacin
necesaria
{ Identificador del proceso (Process ID, PID)
{ Estado
{ Entorno, Memoria,
BLP/LI 83
Implementacin
de la Multiprogramacin
Preparado Ejecucin
Bloqueado
BLP/LI 84
Sincronizacin con Espera Activa
{ Introduccin
{ Sincronizacin Condicional
{ Exclusin Mutua
{ Espera Activa vs. Espera Pasiva
{ Conclusiones
BLP/LI 85
Conclusiones
{ Se han descrito las propiedades de
correccin que debe cumplir un programa
concurrente
BLP/LI 86
Conclusiones
{ Condicin de carrera
z Se dice que se ha producido una
condicin de carrera (race condition)
cuando un programa concurrente se
comporta de una forma anmala
debido a que los procesos no estn
bien sincronizados entre si
z Habitualmente las condiciones de
carrera ocurren solo ocasionalmente y
aparecen en ciertas intercalaciones de
instrucciones
BLP/LI 87
Conclusiones
BLP/LI 88