Vous êtes sur la page 1sur 30

Mdulo IV

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

Sincronizacin con Espera Activa

{ Introduccin
{ Sincronizacin Condicional
{ Exclusin Mutua
{ Espera Activa vs. Espera Pasiva
{ Conclusiones

BLP/LI 3
Introduccin

{ Vamos a estudiar la programacin


concurrente con el Modelo
Concurrencia de Memoria
Compartida
{ El Modelo de Concurrencia de Paso
de Mensajes se estudia en
asignaturas de Redes y Sistemas
Distribuidos

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

Qu ocurre si dos procesos leen o


escriben de forma simultnea en la
misma variable?

BLP/LI 5

Introduccin

{ Modelo de Memoria Compartida


z La abstraccin de la programacin
concurrente nos dice que hay que
estudiar las intercalaciones de las
instrucciones atmicas de cada proceso
z La lectura y la escritura de variables de
tipo simple (boolean, integer, char)
son instrucciones atmicas en PascalFC

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

{ Actividades entre procesos con el


Modelo de Memoria Compartida

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

{ Actividades entre procesos con el


Modelo de Memoria Compartida
z Sincronizacin
{ Si slo se usan variables compartidas para
la sincronizacin se tiene Espera Activa
{ Se pueden usar tambin herramientas
especficas de sincronizacin de procesos
del lenguaje de programacin, por ejemplo
los Semforos
{ Tipos de sincronizacin
z Sincronizacin condicional
z Exclusin mutua

BLP/LI 10

Sincronizacin con Espera Activa

{ 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

Proceso A PA1 PA2

Proceso B PB1 PB2

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

PB1 PA1 PA2 PB2 Proceso B PB1 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 process tPA(var continuar:boolean);


begin
Condicional write('PA1 ');
continuar := true;
Se declara una variable write('PA2 ');
continuar end;
process tPB(var continuar:boolean);
procA la pondr a true begin
cuando haya ejecutado write('PB1 ');
PA1 y continuar while not continuar do;
ejecutando PA2 write('PB2 ');
end;
procB ejecutar PB1 y
comprobar var
constantemente en un continuar: boolean;
bucle el valor de procA:tPA; procB:tPB;
continuar
begin
Saldr del bucle cuando continuar := false;
valga true y continuar
cobegin
ejecutando PB2
procA(continuar);
procB(continuar);
coend;
end.
BLPBLP/LI
(06-07) 14

Sincronizacin Condicional
{ Intercalacin de instrucciones que obtiene la
salida
PA1 PB1 PA2 PB2

procA procB continuar


1 write('PA1 '); false
2 write('PB1 '); false
3 continuar := true; true
4 write('PA2 '); true
5 while not continuar true
6 write('PB2 '); true

BLP/LI 15
Sincronizacin Condicional
{ Intercalacin de instrucciones que obtiene la
salida
PB1 PA1 PA2 PB2

procA procB continuar


1 write('PB1 '); false
2 while not continuar false
3 while not continuar false
4 while not continuar false
5 write('PA1 '); false
6 continuar := true; true
7 write('PA2 '); true
8 while not continuar true
9 write('PB2 '); true
BLP/LI 16

Sincronizacin Condicional
{ Intercalacin de instrucciones que obtiene la
salida
PA1 PA2 PB1 PB2

procA procB continuar


1 write('PA1 '); false
2 continuar := true; true
3 write('PA2 '); true
4 write('PB1 '); true
5 while not continuar true
6 write('PB2 '); true

BLP/LI 17

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

process type proceso;


begin
repeat
seccion_critica;
seccion_no_critica;
forever
end;

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

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

{ Propiedades de Vida (liveness)


z Ausencia de Retrasos innecesarios
z Ausencia de inanicin (starvation)
z Ausencia de interbloqueo activo (livelock)

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

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 30
1 Aproximacin
Alternancia Obligatoria

{ Utilizar una variable turno que indique


el proceso que puede entrar en la
regin crtica
{ Cuando un proceso va a entrar en la
seccin crtica, en el preprotocolo se
comprueba si es su turno
{ Al salir de la seccin crtica, en el
postprotocolo se indica que el turno es
del otro proceso

BLP/LI 31

1 Aproximacin
Alternancia Obligatoria
type tControl = record
turno: integer;
end;

process type tP1(var c: tControl); process type tP2(var c: tControl);


begin begin
repeat repeat
(* Preprotocolo *) (* Preprotocolo *)
while c.turno <> 1 do; while c.turno <> 2 do;
(* Seccin Crtica *) (* Seccin Crtica *)
write('SC1 '); write('SC1 ');
write('SC2 '); write('SC2 ');
(* Postprotocolo *) (* Postprotocolo *)
c.turno := 2; c.turno := 1;
(* Seccin No Crtica *) (* Seccin No Crtica *)
write('SNC1 '); write('SNC1 ');
write('SNC2 '); write('SNC2 ');
forever forever
end; end;
BLP/LI 32

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

{ Requisitos que cumple


z Exclusin Mutua
z Ausencia de Interbloqueos
z Ausencia de Inanicin
{ Requisitos que no cumple
z Ausencia de Retrasos Innecesarios
(debido a que la alternancia es
obligatoria y no debera serlo)

BLP/LI 35

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 36
2 Aproximacin
No Exclusin Mutua

{ Para evitar la alternancia obligatoria,


podemos usar una variable booleana
por cada proceso que indique si dicho
proceso est en la regin crtica
{ Un proceso al entrar en la regin
crtica comprueba si ya hay otro
proceso y si no hay nadie, indica que
entra l
{ Al salir de la regin crtica indica que
ya no est en la regin crtica
BLP/LI 37

2 Aproximacin
No Exclusin Mutua
type tControl = record
p1sc,p2sc: boolean;
end;

process type tP1(var c: tControl); process type tP2(var c: tControl);


begin begin
repeat repeat
(* Preprotocolo *) (* Preprotocolo *)
while c.p2sc do; while c.p1sc do;
c.p1sc := true; c.p2sc := true;
(* Seccin Crtica *) (* Seccin Crtica *)
write('SC1 '); write('SC1 ');
write('SC2 '); write('SC2 ');
(* Postprotocolo *) (* Postprotocolo *)
c.p1sc := false; c.p2sc := false;
(* Seccin No Crtica *) (* Seccin No Crtica *)
write('SNC1 '); write('SNC1 ');
write('SNC2 '); write('SNC2 ');
forever forever
end; end;
BLP/LI 38

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

{ Aunque existan intercalaciones que


cumplen con los requisitos, existen
intercalaciones en las que no se
tiene la exclusin mutua
{ Los dos procesos pueden ejecutar
las instrucciones de la seccin
crtica de forma intercalada

BLP/LI 40

2 Aproximacin
No Exclusin Mutua

{ Requisitos que no cumple


z Exclusin Mutua
p1 p2 c.p1sc c.p2sc
1 while c.p2sc false false
2 while c.p1sc false false
3 c.p1sc := true; true false
4 c.p2sc := true; true true
5 write('SC1 '); true true
6 write('SC1 '); true true
7 write('SC2 '); true true
8 write('SC2 '); true true
9

BLP/LI 41

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

process type tP1(var c: tControl); process type tP2(var c: tControl);


begin begin
repeat repeat
(* Preprotocolo *) (* Preprotocolo *)
c.p1p := true; c.p2p := true;
while c.p2p do; while c.p1p do;
(* Seccin Crtica *) (* Seccin Crtica *)
write('SC1 '); write('SC1 ');
write('SC2 '); write('SC2 ');
(* Postprotocolo *) (* Postprotocolo *)
c.p1p := false; c.p2p := false;
(* Seccin No Crtica *) (* Seccin No Crtica *)
write('SNC1 '); write('SNC1 ');
write('SNC2 '); write('SNC2 ');
forever forever
end; end;
BLP/LI 44

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

{ Requisitos que cumple


z Exclusin Mutua
{ Requisitos que no cumple
z Ausencia de interbloqueos
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 while c.p1p true true
6 while c.p1p true true
7 while c.p2p true true
BLP/LI 46

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 47

4 Aproximacin
Espera Indefinida

{ La 3 aproximacin falla porque los


dos procesos, una vez que anuncian
su intencin de entrar en su seccin
crtica, insisten en su derecho de
entrar en ella
{ La 4 aproximacin cede su derecho a
entrar en la seccin crtica si descubre
que hay competencia con otro proceso

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

{ Requisitos que cumple


z Exclusin Mutua
{ Requisitos que no cumple
z Interbloqueo
{ Hay intercalaciones en las que ningn
proceso entra en la seccin crtica

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

{ Requisitos que no cumple


z Inanicin
{ Hay intercalaciones en las que un proceso
no entra nunca en la seccin crtica
mientras que otro proceso entra repetidas
veces

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

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

{ Requisitos que cumple


z Exclusin Mutua
z Ausencia de Interbloqueos
z Ausencia de Retrasos Innecesarios
z Ausencia de Inanicin

Una demostracin ms rigurosa se puede encontrar en el libro Ben-


Ari, M. Principles of Concurrent and Distributed Programming. Ed.
Prentice Hall, 1.990.

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

Uso de la Exclusin Mutua


{ Una instruccin atmica es aquella que se
ejecuta como una unidad indivisible
{ El lenguaje de programacin y el
hardware definen las instrucciones
atmicas en las que se divide cada
sentencia
Instrucciones
Atmicas
Sentencia
LOAD R,x
x:=x+1 ADD R,#1
STR R,x

BLP/LI 59

Uso de la Exclusin Mutua


{ Supongamos que dos procesos quieren
usar una variable comn para contar las
acciones realizadas
{ Segn hemos visto, si dos procesos quieren
incrementar la misma variable existen
intercalaciones de las instrucciones
atmicas que producen errores en la cuenta
{ Para el desarrollador sera muy interesante
que el incremento de una variable fuese
una instruccin atmica

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

Uso de la Exclusin Mutua


{ La seccin crtica de la exclusin mutua es una
instruccin atmica de grano grueso

z Es indivisible en el sentido de que ningn otro


proceso puede interferir en el uso del recurso
compartido de acceso exclusivo
{ Si dentro de la seccin crtica se incrementa una
variable, ningn otro proceso podr interferir en
esa sentencia

z Pero es divisible en el sentido de que se pueden


intercalar instrucciones atmicas de la seccin no
crtica

BLP/LI 62

Uso de la Exclusin Mutua


{ Se ha visto un algoritmo de Exclusin
Mutua para dos procesos. El algoritmo
de Lamport es un algoritmo que permite
tener una exclusin mutua para ms de
dos procesos
{ Este algoritmo es complejo y no vamos a
ver su implementacin

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

{ Cuando sale usaremos el comentario


(*postprotocolo(recurso)*)

BLP/LI 64

Uso de la Exclusin Mutua


{ Se dice que un recurso est bajo exclusin
mutua si se ejecuta el preprotocolo antes de
usar dicho recurso y el postprotocolo una vez
finalizado el uso
{ Varios recursos pueden estar bajo exclusin
mutua en un mismo programa
{ Puede haber diferentes secciones crticas de
acceso a un mismo recurso bajo exclusin mutua
z Por ejemplo, incrementar y decrementar una
variable son cdigos diferentes pero hacen uso del
mismo recurso
{ Las secciones crticas pueden anidarse si es
necesario
BLP/LI 65

Uso de la Exclusin Mutua


{ Variable x bajo exclusin mutua con dos
secciones crticas
program incdec;

process type inc(var x:integer); var


begin x:integer;
(*preprotocolo(x)*) pInc:inc; pDec:dec;
x:=x+1; begin
(*postprotocolo(x)*) x:=0;
end; cobegin
pInc(x);
process type dec(var x:integer); pDec(x);
begin coend;
(*preprotocolo(x)*) writeln(x)
x:=x-1; end.
(*postprotocolo(x)*)
end;

BLP/LI 66
Uso de la Exclusin Mutua

{ El resultado de este programa


siempre ser 0
{ No se pueden producir errores al
contar porque no se pueden
intercalar instrucciones que usan la
variable x

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

{ Indicar el fin con (*preprotocolo(recurso)*)

z Escribir el programa completo

BLP/LI 69
Ejercicio 2

{ Considerar que caben infinitas


personas dentro del museo
{ Las personas no pueden hablar a la
vez
{ Se pide:
z Identificar los recursos compartidos
z Implementar el programa

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

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

while not continuar do;

BLP/LI 73

Problemas de la Espera Activa


{ La Espera Activa tiene bastantes problemas
z Multiprogramacin
{ Los procesos que estn esperando estn
malgastando el procesador que podra usarse por
otros procesos que realmente estn realizando un
trabajo til
z Multiproceso
{ Un procesador ejecutando instrucciones consume
energa y por tanto disipa calor
{ Si las instrucciones no son tiles, el procesador
podra estar en reposo

La Espera Activa es muy ineficiente


BLP/LI 74

Problemas de la Espera Activa


{ Para solucionar estos problemas, surgi la
Espera Pasiva
{ En la espera pasiva, cuando un proceso no puede
continuar ejecutando las sentencias se bloquea y
deja de ejecutar sentencias hasta que otro
proceso lo desbloquea cuando se cumplen las
condiciones para que siga ejecutando
{ Esto permite aprovechar de forma mucho mas
adecuada los recursos (capacidad de cmputo,
energa, )

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

Herramientas de Espera Pasiva


{ Puesto que la espera activa es ineficiente
se han diseado herramientas que
permiten sincronizar procesos con espera
pasiva
{ Algunas de estas herramientas de
sincronizacin permiten la sincronizacin
con un mayor grado de abstraccin de
forma que el desarrollo de aplicaciones
concurrentes es ms sencillo y, por tanto,
la probabilidad de fallo es menor

BLP/LI 77

Herramientas de Espera Pasiva


{ En la programacin funcional y en la
programacin orientada a objetos, la gran
mayora de los lenguajes de programacin
implementan los mismos conceptos
z Funcional: Funciones, listas, patrones
z Orientacin a Objetos: Clases, objetos, mtodos,
atributos
{ En la programacin concurrente no ocurre lo
mismo y cada lenguaje de programacin
implementa solo algunas herramientas
concurrentes

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

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 80

Implementacin
de la Multiprogramacin

{ Cuando se ejecuta un programa


concurrente en multiprogramacin,
slo un proceso puede estar
ejecutndose en el procesador a la vez
{ Para coordinar a todos los procesos
que comparten el procesador
z Planificacin (Scheduling)
z Despacho (Dispatching)

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

{ Para implementar la Espera Pasiva, un


proceso en un sistema en
multiprogramacin puede estar en los
siguientes estados

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

z Propiedades de seguridad (safety)


{ Exclusin Mutua
{ Ausencia de Interbloqueo pasivo

z Propiedades de Vida (liveness)


{ Ausencia de Retrasos innecesarios
{ Ausencia de inanicin (starvation)
{ Ausencia de interbloqueo activo (livelock)

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

{ La Espera Activa es una tcnica


muy ineficiente
{ No debe usarse nunca para
desarrollar programas concurrentes

BLP/LI 88

Vous aimerez peut-être aussi