Concurrencia
© 1998-2012 José Miguel Santos – Alexis Quesada – Francisco Santana
1
Contenidos
n n n n
Sistemas concurrentes El problema de la sección crítica Semáforos Monitores
2
Bibliografía
n
Fundamentos de Sistemas Operativos
q
q
S. Candela, C.R. García, A. Quesada, F.J. Santana, J.M. Santos. Thomson, 2007 Capítulo 3 J.T.Palma, M.C. Garrido, F. Sánchez, A. Quesada Capítulos 1, 2, 3, 4, 5 y 6 M. Ben-Ari. Prentice Hall, 1990 A. Burns, G. Davies. Addison-Wesley, 1993 Capítulo 7
3
n
Programación Concurrente
q q
n
Principles of Concurrent and Distributed Programming
q
n
Concurrent Programming
q q
Contenidos
n n n n
Sistemas concurrentes El problema de la seccióncrítica Semáforos Monitores
4
Modelo del sistema
n
Conjunto de procesos cooperativos
q q q q
Red de cajeros automáticos Sistema de reserva de billetes Servidor de impresión ...
5
¿Qué es concurrencia?
n
n
n
Definición de diccionario: coincidir en el espacio o en el tiempo dos o más personas o cosas. En Informática, se habla de concurrencia cuando hayuna existencia simultánea de varios procesos en ejecución. Ojo, concurrencia existencia simultánea no implica ejecución simultánea.
6
Paralelismo y concurrencia
n
n
El paralelismo es un caso particular de la concurrencia. Se habla de paralelismo cuando ocurre la ejecución simultánea de instrucciones.
7
Procesos cooperativos
n
n
n
Necesidades de sincronizacióny comunicación Los procesos concurrentes tendrán necesidad de comunicarse información Además, será necesario en ocasiones detener a un proceso hasta que se produzca un determinado evento o se den ciertas condiciones à sincronización
8
Técnicas de sincronización
n
Basadas en memoria compartida
q q q q q
Inhibición de Interrupciones Espera activa Semáforos Regionescríticas Monitores Canales Buzones
n
Basadas en el paso de mensajes
q q
9
Ejemplo 1: modificación concurrente de una variable
procedure
Ejemplo1
is
x:integer;
procedure
P1
is
begin
x:=x+10;
end
P1;
procedure
P2
is
begin
if
x>100
then
Put_Line (x);
else
Put_Line
(x-‐50);
end
if;
end
P2;
begin
x:=100;
COBEGIN
P1;
P2;
COEND;
end
Ejemplo1;
10
Ejemplo 2: bucles infinitos concurrentes
procedure
Ejemplo2
is
contador:integer;
procedure
Cuenta
is
begin
loop
…espera
a
que
pase
un
coche…
contador
:=
contador+1;
end
loop;
end
Cuenta;
procedure
Imprime;
begin
loop
espera
una
hora
Put(“Coches
que
han
pasado:
“);
Put
(contador);
contador:=0
end
loop;
end
Imprime;
begin
contador:=0;
COBEGIN
Cuenta;
Imprime;
COEND;
end
Ejemplo2;
11
Ejemplo 3: búfer limitado
N:
constant
integer:=...;
type
elemento
is ...;
buffer:
array(0..N-‐1)
of
elemento;
entra,sale:
mod
N:=0;
contador:
integer
range
0..N:=0;
Productor
Consumidor
loop
producir_algo
(elem);
loop
exit
when
contador0;
end
loop;
elem:=buffer(sale);
...
Regístrate para leer el documento completo.