Escolar Documentos
Profissional Documentos
Cultura Documentos
Concurrencia
Contenidos
n n n n
Bibliografa
n
S. Candela, C.R. Garca, A. Quesada, F.J. Santana, J.M. Santos. Thomson, 2007 Captulo 3 J.T. Palma, M.C. Garrido, F. Snchez, A. Quesada Captulos 1, 2, 3, 4, 5 y 6 M. Ben-Ari. Prentice Hall, 1990 A. Burns, G. Davies. Addison-Wesley, 1993 Captulo 7
3
Programacin Concurrente
q q
Concurrent Programming
q q
Contenidos
n n n n
Qu es concurrencia?
n
Definicin de diccionario: coincidir en el espacio o en el tiempo dos o ms personas o cosas. En Informtica, se habla de concurrencia cuando hay una existencia simultnea de varios procesos en ejecucin. Ojo, concurrencia existencia simultnea no implica ejecucin simultnea.
Paralelismo y concurrencia
n
El paralelismo es un caso particular de la concurrencia. Se habla de paralelismo cuando ocurre la ejecucin simultnea de instrucciones.
Procesos cooperativos
n
Necesidades de sincronizacin y comunicacin Los procesos concurrentes tendrn necesidad de comunicarse informacin Adems, ser necesario en ocasiones detener a un proceso hasta que se produzca un determinado evento o se den ciertas condiciones sincronizacin
Tcnicas de sincronizacin
n
Inhibicin de Interrupciones Espera activa Semforos Regiones crticas Monitores Canales Buzones
10
11
Productor
Consumidor
loop producir_algo (elem); loop exit when contador<N; end loop; buffer(entra):=elem; entra:=entra+1; contador:=contador+1; end loop;
loop loop exit when contador>0; end loop; elem:=buffer(sale); sale:=sale+1; contador:=contador-1; consumir (elem); end loop;
12
Ambas rutinas son correctas si se ejecutan por separado pero podran NO funcionar si se ejecutan de manera concurrente Supongamos que contador contiene en un momento dado el valor 5 y que las instrucciones contador=contador+1 y contador=contador-1 se ejecutan de forma concurrente (contador podra ser 4, 5 o 6!) contador = contador + 1 contador=contador-1 registro1 := contador; registro2 := contador; registro1 := registro1 +1; registro2 := registro2 -1; contador : registro1; contador := registro2; registro1 := contador registro1 := registro1+1 registro2 := contador registro2 := registro2 -1 contador := registro1 contador := registro2 (registro1= 5) (registro1 = 6) (registro2 = 5) (registro2 = 4) (contador = 6) (contador = 4)
13
T0: productor T1: productor T2: consumidor T3: consumidor T4: productor T5: consumidor
Contenidos
n n n n
14
Seccin crtica: segmento de cdigo donde se accede a datos compartidos con otros procesos
15
Nunca puede haber ms de un proceso en la seccin crtica (exclusin mutua) Los pre y post protocolos sern algoritmos para garantizar que se cumple la exclusin mutua
16
Requisitos de la solucin
n n
Exclusin mutua Progreso: si ningn proceso est en seccin crtica y hay procesos que desean entrar en su s.c., slo estos ltimos participarn en la decisin y sta se tomar en un tiempo finito. Espera limitada: hay un lmite para el nmero de veces que otros procesos pueden adelantarse a un proceso que quiere entrar en s.c.
17
Importante
n
Suponemos que cada proceso se ejecuta a una velocidad distinta de cero No podemos hacer suposiciones acerca de las velocidades relativas de los procesos
18
Si suspendemos la multiprogramacin, desaparece el problema de acceso a los datos compartidos pero perdemos todas las ventajas de la multiprogramacin Hay que buscar una solucin menos radical
19
Antes de que un proceso entre en su seccin crtica, se inhiben las interrupciones As es imposible que el proceso sea expulsado de la CPU mientras est accediendo al dato compartido Al salir de la SC, se rehabilitan las interrupciones
20
Mientras un proceso est en SC, se suspende toda la concurrencia en el sistema no se le da oportunidad a otros procesos que no estn accediendo al recurso compartido Esta tcnica no se puede implementar en un multiprocesador
21
La sincronizacin se basa en que un proceso espera mediante la comprobacin continua de una variable, manteniendo ocupada la CPU.
n n
22
proceso 1
proceso 2
24
25
proceso 1
proceso 2
26
Tercer intento
libre1,libre2:
boolean
:=
true;
loop
SNC1;
libre1:=false;
loop
exit
when
libre2;
end
loop;
SC1;
libre1:=true;
end
loop;
loop
SNC2;
libre2:=false;
loop
exit
when
libre1;
end
loop;
SC2;
libre2:=true;
end
loop;
proceso 1
proceso 2
27
28
Soluciones hardware
n
30
Instrucciones atmicas
n n
Inventadas en los aos 60. Permiten evaluar y asignar un valor a una variable de forma atmica.
n n
test-and-set(B): Pone B a true y devuelve el antiguo valor de B. (Evaluar-y-Asignar(B)) SWAP(A,B): Intercambia los valores de A y B. (Intercambiar(A,B))
Ejemplos de algoritmos
loop
Seccin
no
crtica;
loop
exit
when
Test_and_Set(llave)=false;
end
loop;
Seccin
crtica;
llave:=false;
end
loop;
usando swap
loop
Seccin
no
crtica;
aux:=true;
--
variable
local!
loop
Swap(llave,aux);
exit
when
aux=false;
end
loop;
Seccin
crtica;
llave:=false;
end
loop;
usando test-and-set
32
Contenidos
n n n n
34
Semforos
n n
Edsger Dijkstra, 1965 Objetivo: herramienta universal para sincronizar procesos, que sirva como componente bsico para construir algoritmos concurrentes
35
Concepto de semforo
n
Dijkstra lo defini como una variable entera S con dos operaciones atmicas: P(S): esperar a que S>0;
S:=S-1;
n
P(s) = wait(s) = espera (s) V(s) = signal(s) = seal (s) (se utilizan varias notaciones para las operaciones de los semforos, pero todas significan lo mismo)
37
38
Se asocia un semforo, inicializado a cero, al evento por el que queremos esperar. Cuando un proceso ha hecho que se cumpla una determinada condicin, lo indica ejecutando un signal(c). Un proceso esperar a que la condicin sea cierta mediante un wait(c).
P1
begin
S1;
signal(c);
S2;
end;
P2
begin
R1;
wait(c);
R2;
end;
39
Semforos: ejercicios
n
Ejercicios
q
a.-) Resolver el problema de la seccin crtica con n procesos b.-) Resolver diversos problemas de sincronizacin
n
b.1.-) Sean P1 y P2 dos procesos concurrentes. Modificar el cdigo de ambos procesos de forma que el conjunto de sentencias R2 del proceso 2 se ejecute despus de que se haya ejecutado el conjunto de sentencias S1 del proceso 1. P1
begin
S1;
S2;
end;
P2
begin
R1;
R2;
end;
40
Semforos: ejercicios
q
b.2.-) Realizar un pequeo programa que se ajuste al siguiente diagrama (o grafo) de precedencia (suponiendo que disponemos de las herramientas siguientes: sentencia concurrente cobegin/coend )
A B
C D
41
Semforos: ejercicios
q
b.3.-) Realizar un pequeo programa que se ajuste al siguiente diagrama (o grafo) de precedencia (suponiendo que disponemos de las herramientas siguientes: sentencia concurrente cobegin/coend y semforos)
A B C D
42
43
Inhibir interrupciones Instrucciones hardware especiales Aplicar un algoritmo de seccin crtica con espera activa
Entorno multiprocesador:
q q
45
Semforos binarios
n
Los semforos vistos reciben el nombre de semforo general o semforo de conteo Un semforo que slo puede tomar los valores 0 y 1 recibe el nombre de semforo binario
46
Ejercicio
n
47
1er problema: prioridad para los lectores 2 problema: prioridad para los escritores
48
Bfer limitado
N:
constant
integer:=...;
type
elemento
is
...;
buffer:
array(0..N-1)
of
elemento;
entra,sale:
mod
N:=0;
hayElementos:
Semaphore
:=0;
hayHuecos:
Semaphore
:=N;
cerradura:
Semaphore
:=1;
Productor
Consumidor
loop ... producir un elemento elem ... wait(hayHuecos); wait(cerradura); buffer(entra):=elem; entra:=entra+1; signal(cerradura); signal(hayElementos); end loop;
loop
wait(hayElementos);
wait(cerradura);
elem:=buffer(sale);
sale:=sale+1;
signal(cerradura);
signal(hayHuecos);
...
consumir
elemento
elem
...
end
loop;
49
Lectores y escritores
n
q q
Puede haber varios lectores accediendo a la BD de forma concurrente Slo puede haber un escritor trabajando No puede haber lectores y escritores al mismo tiempo y si se puede, que no haya inanicin
50
Si un escritor est esperando, se le pueden adelantar otros lectores Ojo, riesgo de inanicin para los escritores
Si hay escritores esperando por la BD, los lectores que van llegando nuevos se deben esperar hasta que todos los escritores finalicen Ahora hay riesgo de inanicin para los lectores
51
Lector
loop
wait(cerradura);
nlectores:=nlectores+1;
if
nlectores=1
then
wait(escritura);
signal(cerradura);
LEER
DE
LA
BD;
wait(cerradura);
nlectores:=nlectores-1;
if
nlectores=0
then
signal(escritura);
signal(cerradura);
end
loop;
Escritor
52
Lector
wait(cerrojo);
while
escribiendo
or
nesc>0
loop
signal(cerrojo);
wait(cerrojo);
end
loop;
nlec
:=
nlec
+
1;
signal(cerrojo);
leer
de
la
BD
wait(cerrojo);
nlec
:=
nlec
1;
signal(cerrojo);
Escritor
wait(cerrojo);
nesc
:=
nesc
+
1;
while
escribiendo
or
nlec>0
loop
signal(cerrojo);
wait(cerrojo);
end
loop;
nesc
:=
nesc
-
1;
escribiendo
:=
true;
signal(cerrojo);
escribir
en
la
BD
wait(cerrojo);
escribiendo
:=
false;
signal(cerrojo);
53
Los filsofos
54
55
La solucin anterior puede entrar en un estado de bloqueo mutuo entre todos los filsofos interbloqueo Posibles soluciones:
q q
Algoritmo asimtrico filsofos pares/impares Impedir a ms de cuatro filsofos entrar a pedir los palillos Coger los dos palillos de forma atmica (o coges los dos, o no coges ninguno)
56
Los semforos son una herramienta de bajo nivel, que requiere un uso disciplinado y cuidadoso. Es muy fcil cometer errores de uso con semforos. Veamos algunos ejemplos
57
58
59
Ms problemas
Dos procesos que acceden a recursos compartidos: qu ocurre al ejecutarlos al mismo tiempo?
V (disco) V (impresora)
V (impresora) V (disco)
60
Objetivo: introducir en el lenguaje de programacin herramientas de sincronizacin que sean ms seguras que los semforos Ejemplos:
q q
61
Abstraccin de un bloque de cdigo que accede a recursos compartidos. Garantiza exclusin mutua. El cdigo slo se ejecuta si la condicin asociada a la regin crtica es cierta. Ejemplo:
region
Bfer
when
Nelementos
>
0
{
//
este
cdigo
se
ejecuta
en
exclusin
mutua
//
y
slo
se
ejecuta
si
Nelementos
>
0
consumir
un
elemento
del
bfer
Nelementos
=
Nelementos
1;
}
62
Se plantearon en 1972 (Brinch Hansen, Pascal Concurrente) Gran fuerza expresiva, el cdigo queda mucho ms legible y compacto Problema: implementacin muy costosa, comparada con el cdigo escrito a mano con semforos Por ese motivo, nunca llegaron a prosperar como herramienta de uso comn
63
Contenidos
n n n n
64
Monitor
n n
Estructura de datos privada Operaciones pblicas Exclusin mutua Sincronizacin (variables condicin)
+
q q
65
Si varios procesos intentan manipular el monitor al mismo tiempo, van entrando de uno en uno: no puede haber ms de un proceso trabajando con el monitor en cada momento.
66
67
Variables condicin
n
Una variable condicin sirve para gestionar una cola de espera por el monitor Dos operaciones
q
x.wait bloquea al proceso y lo mete en la cola x x.signal desbloquea a un proceso de la cola x; si no hay procesos en x, no hace nada
68
69
datos compartidos
x y
cola de ingreso
...
operaciones cdigo de inicializacin
70
Qu ocurre cuando un proceso P realiza una operacin signal sobre una variable condicin x y existe un proceso suspendido Q asociado a dicha variable?
n n
Estilo Hoare se reanuda Q inmediatamente Estilo Mesa Q se desbloquea, pero espera a que P abandone el monitor
71
Si varios procesos estn suspendidos por la condicin x y algn proceso ejecuta x.signal, qu proceso se reanuda?
q q
72
73
77
Lectores y escritores (y 3)
public
EmpiezaEscritura()
{
while
(nlec>0
||
escribiendo)
{
escribir.wait();
}
escribiendo
=
true;
}
public
TerminaEscritura()
{
escribiendo
=
false;
if
(lecesperan
>
0)
{
leer.signal();
}
else
{
escribir.signal();
}
}
};
80
81
82
83
84