Vous êtes sur la page 1sur 54

TEMA 1.

FUNDAMENTOS
DE LA CONCURRENCIA
Ingeniera en Informtica

Contenidos

Introduccin

Beneficios de la programacin concurrente

Concurrencia y arquitecturas hardware

Especificacin de ejecucin concurrente

Caractersticas de los sistemas concurrentes

Problemas inherentes a la programacin


concurrente

Verificacin de programas concurrentes

Alexis Quesada Arencibia

ProgramacinConcurrente

Bibliografa

Programcin Concurrente

Principles of Concurrent and Distributed Programming

J. Toms, M. Garrido, F. Snchez, A. Quesada, 2003


Captulo 1 y 2
M. Ben-Ari. Prentice Hall, 1990
Captulo 1 y 2

Concurrent Programming

A. Burns, G Davis. Addison-Wesley, 1993


Captulo 1

Alexis Quesada Arencibia

ProgramacinConcurrente

Contenidos

Introduccin

Beneficios de la programacin concurrente

Concurrencia y arquitecturas hardware

Especificacin de ejecucin concurrente

Caractersticas de los sistemas concurrentes

Problemas inherentes a la programacin


concurrente

Verificacin de programas concurrentes

Alexis Quesada Arencibia

ProgramacinConcurrente

Qu es la concurrencia?

Definicin Real Academia Espaola:

<<Acaecimiento o concurso de varios sucesos en un


mismo tiempo>>

Una forma de ver la concurrencia es


como un conjunto de actividades que se
desarrollan de forma simultnea
En informtica, cada una de esas
actividades se suele llamar proceso

Alexis Quesada Arencibia

ProgramacinConcurrente

Concurrencia

En Informtica, se habla de concurrencia


cuando hay una

existencia simultnea de varios procesos en


ejecucin

Dos procesos sern concurrentes cuando la


primera instruccin de uno de ellos se ejecuta
despus de la primera instruccin del otro y
antes de la ltima

Alexis Quesada Arencibia

ProgramacinConcurrente

Concurrencia

Ojo, existencia simultnea no implica ejecucin

simultnea

Depender del hardware subyacente

El paralelismo es un caso particular de la


concurrencia
Se habla de paralelismo cuando ocurre la ejecucin
simultnea de instrucciones:

arquitecturas paralelas
procesamiento paralelo
algoritmos paralelos
programacin paralela

Alexis Quesada Arencibia

ProgramacinConcurrente

Dnde se encuentra la
concurrencia?

En la Naturaleza (el problema que se modela)

ejemplos?

En el hardware (la herramienta para


solucionar el problema):

ejecucin paralela de instrucciones


funcionamiento paralelo de los perifricos
procesadores mltiples
sistemas distribuidos

Alexis Quesada Arencibia

ProgramacinConcurrente

Concurrencia inherente o
potencial

Sistemas inherentemente concurrentes:

el entorno con el que interactan, o el entorno


que modelan tiene forzosamente actividades
simultneas
p.ej. red de cajeros automticos

Sistemas potencialmente concurrentes:

no es estrictamente necesario que haya


concurrencia, pero se puede sacar partido de ella
p.ej. para aumentar la velocidad de ejecucin

Alexis Quesada Arencibia

ProgramacinConcurrente

Programa y Proceso

Definicin extendida: un proceso es un programa


en ejecucin
o mejor una actividad asncrona susceptible de
ser asignada a un procesador

Alexis Quesada Arencibia

ProgramacinConcurrente

10

Procesos

Independientes

Cooperantes

P.ej. dos procesos de dos usuarios diferentes


P. ej. el navegador del esquema anterior

Estas tareas de colaboracin y competencia


exigen mecanismos de comunicacin y
sincronizacin entre procesos

Alexis Quesada Arencibia

ProgramacinConcurrente

11

Programacin Concurrente
Disciplina que se encarga del estudio de las
notaciones que permiten especificar la ejecucin
concurrente de las acciones de un programa, as
como las tcnicas para resolver los problemas
inherentes a la ejecucin concurrente (comunicacin
y sincronizacin)

Alexis Quesada Arencibia

ProgramacinConcurrente

12

Programacin Concurrente

Tradicionalmente estuvo asociada al mundo de los


Sistemas Operativos
Primeros programas concurrentes: SO

Evolucin plataformas hardware


Diferentes partes del SO en ejecucin sin un orden
predecible y compartiendo variables => nuevos problemas
Soluciones especficas

Tres hitos importantes marcan su evolucin:

Hilo
Aparicin de lenguajes de alto nivel que da soporte a la P.C.
La aparicin de Internet

Alexis Quesada Arencibia

ProgramacinConcurrente

13

Programacin concurrente

EL trabajar con procesos concurrentes


aade complejidad a la tarea de
programar
cules son entonces los beneficios que
aporta la programacin concurrente?

Alexis Quesada Arencibia

ProgramacinConcurrente

14

Contenidos

Introduccin

Beneficios de la programacin concurrente

Concurrencia y arquitecturas hardware

Especificacin de ejecucin concurrente

Caractersticas de los sistemas concurrentes

Problemas inherentes a la programacin concurrente

Verificacin de programas concurrentes

Alexis Quesada Arencibia

ProgramacinConcurrente

15

Beneficios de la programacin
concurrente

Mejor aprovechamiento de la CPU

Velocidad de ejecucin

Solucin de problemas de naturaleza


concurrente

Sistemas de control
Tecnologas web
Aplicaciones basadas en interfaces de usuarios
Simulacin
SGDB

Alexis Quesada Arencibia

ProgramacinConcurrente

16

Contenidos

Introduccin

Beneficios de la programacin concurrente

Concurrencia y arquitecturas hardware

Especificacin de ejecucin concurrente

Caractersticas de los sistemas concurrentes

Problemas inherentes a la programacin


concurrente

Verificacin de programas concurrentes

Alexis Quesada Arencibia

ProgramacinConcurrente

17

Concurrencia y arquitecturas
hardware

Arquitecturas que soportan la


programacin concurrente

Sistemas con un solo procesador (sistemas


monoprocesador)
Sistemas con ms de un procesador
(sistemas multiprocesador)

Alexis Quesada Arencibia

ProgramacinConcurrente

18

Sistemas monoprocesador

No hay paralelismo. Los


procesos se reparten el
procesador: entrelazado
(interleaving)
Quin planifica los procesos?

el sistema operativo
el propio ejecutable (gracias
al compilador) -> runtime

scheduler (RTSS)

Todos los procesos comparten


la misma memoria

Forma natural de sincronizar


y comunicar procesos

Variables compartidas

Alexis Quesada Arencibia

ProgramacinConcurrente

19

Sistemas multiprocesador o
sistemas paralelos

Ms de un procesador => permite que


exista un paralelismo real entre los
procesos

Clasificacin sistemas multiprocesador

estrechamente acoplados (multiprocesadores)


dbilmente acoplados (sistemas distribuidos)

Alexis Quesada Arencibia

ProgramacinConcurrente

20

Sistemas estrechamente
acoplados

Normalmente llamados multiprocesadores

Los procesadores comparten memoria y reloj

Ventaja:

Puede ser ms o menos difcil acceder a la


memoria de otro procesador

aumento de velocidad de procesamiento con bajo


coste

Inconveniente:

Escalable slo hasta decenas o centenares de


procesadores

Alexis Quesada Arencibia

ProgramacinConcurrente

21

Sistemas estrechamente
acoplados

La sincronizacin y comunicacin entre procesos


se suele hacer mediante variables compartidas

Alexis Quesada Arencibia

ProgramacinConcurrente

22

Sistemas dbilmente acoplados o


sistemas distribuidos

Mltiples procesadores conectados mediante


una red
Los procesadores no comparten memoria ni
reloj
Los sistemas conectados pueden ser de
cualquier tipo
Escalable hasta millones de procesadores (ej.
Internet)

Alexis Quesada Arencibia

ProgramacinConcurrente

23

Sistemas distribuidos: ventajas

comparticin de recursos dispersos


ayuda al trabajo cooperativo de equipos
humanos

aumento de velocidad de ejecucin

escalabilidad ilimitada

aumento de fiabilidad:

tolerancia a fallos (fault tolerance)


alta disponibilidad (availability)

Alexis Quesada Arencibia

ProgramacinConcurrente

24

Sistemas distribuidos

La forma natural de comunicar y


sincronizar procesos es mediante el uso de
paso de mensajes

Alexis Quesada Arencibia

ProgramacinConcurrente

25

Contenidos

Introduccin

Beneficios de la programacin concurrente

Concurrencia y arquitecturas hardware

Especificacin de ejecucin concurrente

Caractersticas de los sistemas concurrentes

Problemas inherentes a la programacin


concurrente

Verificacin de programas concurrentes

Alexis Quesada Arencibia

ProgramacinConcurrente

26

Especificacin de ejecucin
concurrente

Qu se puede ejecutar concurrentemente?

Condiciones de Bernstein (1966)

Cmo especificarlo?

Lenguaje concurrente

Alexis Quesada Arencibia

ProgramacinConcurrente

27

Condiciones de Bernstein

Sea

L(Sk)={a1,a2,...,an} el conjunto de lectura del


conjunto de instrucciones Sk formado por todas las
variables cuyos valores son referenciados (se leen)
durante la ejecucin de las instrucciones en Sk
E(Sk)={b1,b2,...,bn} el conjunto de escritura del
conjunto de instrucciones Sk formado por todas las
variables cuyos valores son actualizados (se
escriben) durante la ejecucin de las instrucciones
en Sk

Alexis Quesada Arencibia

ProgramacinConcurrente

28

Condiciones de Bernstein

Para que dos conjuntos de instrucciones Si y Sj


se puedan ejecutar concurrentemente, se
tiene que cumplir que:

1.- L(Si) L(Sj)=


2.- E(Si) L(Sj)=
3.- E(Si) E(Sj)=

Alexis Quesada Arencibia

ProgramacinConcurrente

29

Cmo especificar la concurrencia?

Tcnicas para producir actividades concurrentes en el


computador
De forma manual

Trabajar directamente sobre el hardware


Usar llamadas al sistema o bibliotecas de software (ejs.
PVM, pthreads)
Expresarla en un lenguaje de alto nivel

De forma automtica

El sistema operativo se encarga automticamente (ej.


multiprogramacin)
El compilador detecta la concurrencia implcita en
nuestros programas secuenciales

Alexis Quesada Arencibia

ProgramacinConcurrente

30

Lenguajes de alto nivel

Los LAN permiten programar en un


nivel ms cercano al mbito del
problema (problem domain) por medio
de la abstraccin
Adems, los lenguajes y el S.O.
proporcionan herramientas para usar
con ms comodidad los recursos del
hardware.

Alexis Quesada Arencibia

ProgramacinConcurrente

31

Lenguajes de alto nivel

A lo largo de la historia, se han inventado abstracciones


en los LAN que han resultado muy tiles para la
comunidad informtica:
abstraccin de expresiones (FORTRAN...)
abstraccin del flujo de control: programacin
estructurada secuencial (Algol...)
abstraccin de la lgica y el lgebra (Lisp, Prolog...)
abstraccin de datos (Algol, Pascal...)
modelado de objetos (Smalltalk, C++...)

abstraccin de la concurrencia?

Alexis Quesada Arencibia

ProgramacinConcurrente

32

Abstraccin de la concurrencia

Nuestro programa expresa acciones concurrentes


(procesos o hilos), pero stas no tienen por qu
ejecutarse en paralelo
Cada proceso concurrente se ejecuta sobre un
procesador virtual
El compilador y el s.o. sern responsables de ejecutar
nuestros procesos como consideren ms oportuno
Nos deben dar igual las velocidades relativas de los
procesadores virtuales

Alexis Quesada Arencibia

ProgramacinConcurrente

33

Lenguajes concurrentes

Aquellos que incorporan caractersticas que


permiten expresar la concurrencia
directamente, sin recurrir a servicios del s.o.,
bibliotecas, etc.
Normalmente incluyen mecanismos de
sincronizacin y comunicacin entre procesos
Ejemplos: Ada, Java, SR, Occam, PARLOG...

Alexis Quesada Arencibia

ProgramacinConcurrente

34

Cmo expresar la concurrencia?


Ejemplos

Sentencia concurrente:

cobegin
P; Q; R
coend;

type vector is
array(1..10) of int;
var a,b,c : vector;
a := b*c + 2*a;

Sentencia concurrente mltiple:


forall i:=1 to 1000 do

P(i);

Objetos que representan


procesos:
task A is begin P; end;
task B is begin Q; end;
task C is begin R; end;

Tuberas (unix):
grep palabra | sort | lpr

Alexis Quesada Arencibia

Instrucciones vectoriales:

Notacin grfica: Grafos


de precedencia
ProgramacinConcurrente

35

Contenidos

Introduccin

Beneficios de la programacin concurrente

Concurrencia y arquitecturas hardware

Especificacin de ejecucin concurrente

Caractersticas de los sistemas concurrentes

Problemas inherentes a la programacin concurrente

Verificacin de programas concurrentes

Alexis Quesada Arencibia

ProgramacinConcurrente

36

Caractersticas de los sistemas


concurrentes

Orden de ejecucin de las instrucciones

Indeterminismo

Alexis Quesada Arencibia

ProgramacinConcurrente

37

Orden de ejecucin de las


instrucciones

La programacin
secuencial define un
orden total de las
instrucciones

Ante un conjunto de
datos de entrada el flujo
de ejecucin es siempre
el mismo

Alexis Quesada Arencibia

ProgramacinConcurrente

38

Orden de ejecucin de las


instrucciones

Un programa concurrente define un orden


parcial de ejecucin

Ante un conjunto de datos de entrada no se


puede saber cual va a ser el flujo de ejecucin

Alexis Quesada Arencibia

ProgramacinConcurrente

39

Indeterminismo

El orden parcial implica el no


determinismo de los programas
concurrentes

Es decir, puede producir diferentes


resultados cuando se ejecuta
repetidamente sobre el mismo conjunto de
datos de entrada

Alexis Quesada Arencibia

ProgramacinConcurrente

40

Indeterminismo: ejemplo

Qu valor tendr la x al terminar el


programa?

Alexis Quesada Arencibia

ProgramacinConcurrente

41

No determinismo

El no determinismo es una propiedad


inherente a la concurrencia
Por culpa del no determinismo, es ms difcil
analizar y verificar un algoritmo concurrente
Ojo, que existan varias posibilidades de salida
NO significa necesariamente que un
programa concurrente sea incorrecto

Alexis Quesada Arencibia

ProgramacinConcurrente

42

Contenidos

Introduccin

Beneficios de la programacin concurrente

Concurrencia y arquitecturas hardware

Especificacin de ejecucin concurrente

Caractersticas de los sistemas concurrentes

Problemas inherentes a la programacin


concurrente

Verificacin de programas concurrentes

Alexis Quesada Arencibia

ProgramacinConcurrente

43

Problemas inherentes a la
programacin concurrente

Verificacin

Exclusin mutua

Condicin de sincronizacin

Alexis Quesada Arencibia

ProgramacinConcurrente

44

Exclusin mutua

Problema derivado de la abstraccin en los


lenguajes de alto nivel

Una instruccin de alto nivel se convierte en un


conjunto de instrucciones mquina
Son las que realmente se ejecutan
concurrentemente
En el paradigma secuencial este hecho carece de
importancia pero en ejecuciones concurrentes de
instrucciones el resultado puede ser incorrecto

Alexis Quesada Arencibia

ProgramacinConcurrente

45

Exclusin mutua

Seccin crtica: porcin de cdigo con variables compartidas


y que debe ejecutarse en exclusin mutua

Los lenguajes concurrentes deben proporcionar herramientas


para resolver este tipo de problemas

Alexis Quesada Arencibia

ProgramacinConcurrente

46

Condicin de sincronizacin

Muchas posibilidades diferentes en


cuanto al orden de ejecucin
Sin embargo, pueden ser necesarias
ciertas restricciones en el orden de
ejecucin

Alexis Quesada Arencibia

ProgramacinConcurrente

47

Condicin de sincronizacin

Alexis Quesada Arencibia

ProgramacinConcurrente

48

Contenidos

Introduccin

Beneficios de la programacin concurrente

Concurrencia y arquitecturas hardware

Especificacin de ejecucin concurrente

Caractersticas de los sistemas concurrentes

Problemas inherentes a la programacin


concurrente

Verificacin de programas concurrentes

Alexis Quesada Arencibia

ProgramacinConcurrente

49

Verificacin de programas
concurrentes

Cundo un programa (secuencial) se


considera correcto?

Parcialmente correcto. Dadas unas


precondiciones correctas, si el programa
termina se cumplen las postcondiciones
previstas
Totalmente correcto. Dadas unas
precondiciones correctas, el programa
termina y se cumplen las postcondiciones

Alexis Quesada Arencibia

ProgramacinConcurrente

50

Peculiaridades de los
programas concurrentes

Los programas concurrentes pueden no


terminar nunca y al mismo tiempo ser
correctos
Un pr.c. puede tener mltiples secuencias de
ejecucin
Cuando se dice que un pr.c. es correcto, se
entiende que se refiere a todas sus posibles
secuencias de ejecucin

Alexis Quesada Arencibia

ProgramacinConcurrente

51

Verificacin de programas
concurrentes

La correccin de programas concurrentes se


puede determinar en base al cumplimiento de
una serie de propiedades
Dos tipos de propiedades tiles en los
sistemas concurrentes

Propiedades de seguridad (safety)

Son aquellas que aseguran que nada malo va a pasar


durante la ejecucin del programa

Propiedades de viveza (liveness)

Son aquellas que aseguran que algo bueno pasar


eventualmente durante la ejecucin del programa

Alexis Quesada Arencibia

ProgramacinConcurrente

52

Verificacin de programas
concurrentes

Propiedades de seguridad (safety)

Exclusin mutua
Condicin de sincronizacin
Interbloqueo (pasivo) - deadlock

Propiedades de viveza (liveness)

Interbloqueo (activo) livelock


Inanicin - starvation

Alexis Quesada Arencibia

ProgramacinConcurrente

53

Anlisis de algoritmos
concurrentes

Usar invariantes y lgica proposicional

Usar mtodos inductivos

Usar historias de ejecucin (a->b)

Usar predicados posicionales: at(I), in(I),


after(I)

Usar lgica temporal

...

Alexis Quesada Arencibia

ProgramacinConcurrente

54

Vous aimerez peut-être aussi