You are on page 1of 40

1

Introduccin a la Programacin
Concurrente y Distribuida
Antonio Tomeu Programacin Concurrente y Distribuida
CONTENIDO:
Concepto de Concurrencia
Exclusin Mutua y Sincronizacin
Correccin en Sistemas Concurrentes
Consideraciones sobre el Hardware
Sistemas Distribuidos
Sistemas de Tiempo Real
Procesamiento Paralelo
BIBLIOGRAFA RECOMENDADA:
[Ben90] Ben-Ari, M. Concurrent and Distributed Programming
Prentice Hall, 1990. [Captulos 1 y 2]
[Bur93] Burns, A. & Davis, G. Concurrent Programming.
[Captulo 1]
[Pal03] Palma, J. et al. Programacin Concurrente. [Captulo 1]
[Tom03] Tomeu, A. Apuntes de Prog. Concurrente. [Tema 1]
2
Antonio Tomeu Programacin Concurrente y Distribuida
R.A.E.: coincidir en el espacio o en el
tiempo dos o ms personas o cosas
En informtica, se da cuando dos o
ms procesos existen
simultneamente
Distinguir entre existencia y ejecucin
simultnea
Definicin de Concurrencia
3
La concurrencia es ms general que el paralelismo
Las soluciones que la P. Concurrente da para la
sincronizacin y comunicacin son vlidas para
programas paralelos con memoria comn
Se tiene paralelismo cuando se produce la ejecucin
simultnea de procesos concurrentes:
Algoritmos paralelos
Mtodos de programacin paralela
Procesamiento paralelo
Arquitecturas paralelas
Concurrencia versus paralelismo
4
En el dominio de los problemas: casos reales que se
pretenden modelar mediante programas
En el hardware
Ejecucin paralela (arquitecturas paralelas)
Funcionamiento paralelo de perifricos
Multiprocesadores
Sistemas Distribuidos
En los sistemas operativos
Ejecucin simultnea de procesos
Ejecucin simultnea de threads dentro de un proceso
Presencia de Concurrencia
5
Sistema informtico donde la concurrencia
desempea un papel relevante
Ejemplos:
Sistemas Operativos
Sistemas de Gestin de B.D.
Sistemas de Tiempo Real
Sistemas Distribuidos
Distinguir entre:
Sistemas inherentemente concurrentes
Sistemas potencialmente concurrentes
Concepto de Sistema Concurrente
Antonio Tomeu Programacin Concurrente y Distribuida
6
Programacin Concurrente: conjunto de notaciones y
tcnicas utilizadas para describir mediante programas
el paralelismo potencial de los problemas, y
resolviendo los problemas de sincronizacin y
comunicacin que pueden presentarse
Se ocupa: del anlisis, diseo, implementacin y
depuracin de programas concurrentes.
No se ocupa: del hardware sobre el cual dichos
programas concurrentes se ejecutan
Concepto de Programacin Concurrente
Antonio Tomeu Programacin Concurrente y Distribuida
7
Indeterminacin
Un programa secuencial es determinista: los mismos datos de
entrada generan siempre la misma salida
Un programa concurrente es no determinista: la misma
entrada puede dar lugar a diferentes salidas
Esto no significa que el programa sea incorrecto
No atomicidad
Velocidad de ejecucin de procesos desconocida
Incertidumbre sobre el resultado
Entrelazado
Un programa concurrente puede tener varias secuencias de
ejecucin diferentes
Mayor dificultad de verificacin de programas
cul es la definicin de correccin de un programa?
Antonio Tomeu Programacin Concurrente y Distribuida
Caractersticas de la P. Concurrente
8
Antonio Tomeu Programacin Concurrente y Distribuida
Ejemplo de Entrelazado
N: Integer := 0;
Task Body P1 is Task Body P2 is
begin begin
N := N+1; N := N+1
end P1; End P2;
Proceso 1;
Load (x);
Add (x,1);
Store (x);
Instrucciones de
Incremento como
Inc.
Proceso 2;
Load (x);
Add (x,1);
Store (x);
9
PROC. INST. N REG1 REG2
Inicial 0
P1 Load (x) 0 0
P2 Load (x) 0 0 0
P1 Add (x,1) 0 1 0
P2 Add (x,1) 0 1 1
P1 Store (x) 1 1 1
P2 Store (x) 1 1 1


Ejemplo de Entrelazado
Antonio Tomeu Programacin Concurrente y Distribuida
10
Permiten determinar si dos conjuntos de instrucciones
se pueden ejecutar de forma concurrente.
L(S
k
)={a
1
, a
2
, ., a
n
} es el conjunto de lectura del
conjunto del conjunto de instrucciones S
k
.
E(S
k
)={b
1
, b
2
, ., b
n
} es el conjunto de escritura
del conjunto del conjunto de instrucciones S
k.
Dos conjuntos de instrucciones S
i
y S
j
se puede
ejecutar concurrentemente si:
L(S
i
)E(S
j
)=O
E(S
i
)L(S
j
)=O
E(S
i
)E(S
j
)=O
Condiciones de Bernstein
Antonio Tomeu Programacin Concurrente y Distribuida
11
Trabajar a nivel de instrucciones atmicas o de grupos
de instrucciones cuya ejecucin atmica es forzada
por el programador
Hacer la Hiptesis de Progreso Finito
Razonar sobre la correccin a nivel de grupos de
instrucciones
Considerar la incertidumbre sobre el resultado final
Considerar la correccin bajo todas las secuencias de
entrelazado posibles
Desarrollar un modelo abstracto de sistema
concurrente
Conclusiones
Antonio Tomeu Programacin Concurrente y Distribuida
12
Los programas concurrentes expresan
mediante entidades concurrentes (procesos o
hilos) la ejecucin de tareas simultneas.
Concurrencia de primer y segundo nivel.
Cada entidad concurrente se ejecuta sobre un
procesador virtual
Monoprocesador en s.o. multiproceso
Multiprocesador en arquitecturas paralelas
A efectos del programador, es indiferente
Compilador y s.o determinan cmo se
ejecutan esas entidades concurrentes
Modelo Abstracto de la Concurrencia
Antonio Tomeu Programacin Concurrente y Distribuida
13
Suponer que cada entidad concurrente se
ejecuta en un procesador virtual (que puede
ser real o no) corriendo en paralelo
Si disponemos de una arquitectura paralela la
concurrencia ser real
Si no disponemos de una arquitectura
paralela la concurrencia ser simulada
La escritura y depuracin de programas
concurrentes es independiente de la
implementacin, dado el modelo de
procesadores virtuales
Antonio Tomeu Programacin Concurrente y Distribuida
Procesadores Virtuales
14
Aparecen cuando varias entidades concurrentes
comparten recursos comunes accediendo a ellos
simultneamente
Pueden dar lugar a problemas graves como
sobreescritura de datos, interbloqueos, etc.
Son propias de los sistemas concurrentes
Se caracterizan, a nivel de programacin, por zonas
de cdigo de las entidades concurrentes desde las que
se accede a recursos comunes. Se las llama secciones
crticas
Dado el indeterminismo de los programas
concurrentes, la nica forma de evitar una condicin
de concurso ser forzar la ejecucin aislada de cada
seccin crtica
Antonio Tomeu Programacin Concurrente y Distribuida
Condiciones de Concurso
15
Consiste en evitar la condicin de concurso sobre un
recurso compartido forzando la ejecucin atmica de
las secciones crticas de las entidades concurrentes
que lo usan.
Ello implica detener la ejecucin de una entidad
concurrente hasta que se produzcan determinadas
circunstancias: sincronizacin
Tambin implica el pode comunicar a otras entidades
el estado de una dada: comunicacin
Los lenguajes concurrentes deben permitir ambas
Concepto de Exclusin Mutua
Antonio Tomeu Programacin Concurrente y Distribuida
16
Dentro de las secciones crticas no hay entrelazado
Se incrementa el determinismo, ya que se garantiza
la ejecucin secuencial ("atmica) de las secciones
crticas
Permite comunicar a los procesos a travs de las
secciones crticas
Acota a nivel de cdigo (sintcticamente) las
secciones crticas mediante el uso de protocolos de
entrada y salida de las mismas
Puede generar sobrecargas de ejecucin
Beneficios del uso de Exclusin Mutua
Antonio Tomeu Programacin Concurrente y Distribuida
17
Modelo de Entidad Concurrente
Task body P is
begin
loop
Resto_de_cdigo;
Pre-protocolo;
Seccin Crtica;
Post-Protocolo;
end P;
Cdigo
Pre-protocolo
Post-protocolo
S. Crtica
Antonio Tomeu Programacin Concurrente y Distribuida
18
Basadas en intercambio de seales
Las entidades concurrentes intercambian informacin
que indica cundo se puede ejecutar una seccin
crtica
Algoritmos basados en memoria comn
Cerrojos
Semforos
Seales y eventos
Basadas en el aislamiento de los recursos
compartidos
Regiones Crticas (condicionales y no condicionales)
Monitores
Objetos protegidos (lenguajes concurrentes con OO)
Herramientas de Sincronizacin
Antonio Tomeu Programacin Concurrente y Distribuida
19
Basada en memoria comn
Uso de Buzones
Canales
RPC y RMI
Otras
Herramientas de Comunicacin
Antonio Tomeu Programacin Concurrente y Distribuida
20
Propiedades de Correccin
Seguridad
Vivacidad
Inanicin
Equidad
Especificacin Formal de Sistemas Concurrentes
Lgica Temporal
CSP (Hoare)
Redes de Petri
Metodologa grfica de representacin
Admite el modelado dinmico de sistemas concurrentes
Permite una verificacin matemticamente sencilla de las
propiedades de correccin de un sistema concurrente
Correccin de Sistemas Concurrentes
Antonio Tomeu Programacin Concurrente y Distribuida
21
Correccin parcial
Correccin total
Correccin de Sistemas Concurrentes
Antonio Tomeu Programacin Concurrente y Distribuida
22
Se considera lenguajes de programacin concurrentes
a aquellos que permiten expresar la concurrencia
directamente, no siendo necesario el recurso al s.o. o
a bibliotecas especficas
Incluyen herramientas para sincronizar y comunicar a
entidades concurrentes
C no es un lenguaje concurrente
Ada, Java, Occam son lenguajes concurrentes
Puede incluir OO como Java, o no incluirla, como Ada
Lenguajes Concurrentes
Antonio Tomeu Programacin Concurrente y Distribuida
23
Co-rutinas
Cobegin
P1; P2; P3:
Coend;
Co-rutinas mltiples
forall i:= 1 to 100 do
P(i);
Pipes (Linux)
grep termino|sort|lpr
Sintaxis de la Concurrencia
Vectorizacin
type vector is array(1..100)
of int;
var a, b,c: vector;
a := b*c+2*a;
Tareas concurrentes
task A is begin CodA end;
task B is begin CodB end;
task C is begin CodC end;
Objetos concurrentes
class Hilo extends Thread{imp}
Hilo prod = new Hilo();
Hilo consu = new Hilo ();
prod.start();
consu.start();
Antonio Tomeu Programacin Concurrente y Distribuida
24
Manuales
Accediendo directamente al hardware.
Usando libreras software (pthread en C, herencia de la clase
Thread o implementacin de la interfaz Runnable en Java)
Automticas
Bajo la responsabilidad del Sistema Operativo
(multiprogramacin)
Deteccin del compilador de la concurrencia implcita en un
programa secuencial y generacin autmatica de los procesos
concurrente que correspondan.
Creacin de Entidades Concurrentes
Antonio Tomeu Programacin Concurrente y Distribuida
25
Modelo de Creacin Esttico
Nmero de procesos concurrente fijado en tiempo
de compilacin
No es un mtodo flexible
Es un mtodo seguro, eficaz y limitado
Modelo de Creacin Dinmico
Procesos creados y destruidos en tiempo de
ejecucin
Es un mtodo flexible
Es menos seguro que los mtodos esttico.
Es utilizado por el s.o. Unix o el lenguaje Java
Es menos estructurado y ms difcil de interpretar
Modelos de Creacin de Entidades Concurrentes
Antonio Tomeu Programacin Concurrente y Distribuida
26
Creacin Dinmica de Procesos en C
#include <sys/types.h>
#include <unistd.h>
pid_t fork(void)
La llamada a fork crea un nuevo proceso copiando la
imagen de memoria del proceso padre (que efectu la
llamada)
El hijo hereda algunos (no todos) los atributos del padre
tales como ficheros abiertos o dispositivos en uso
El hijo tiene un nuevo ID, y sus contadores de tiempo de
uso de CPU estn a 0. No tiene seales pendientes
Su cdigo y atributos generalmente se encuentran
dispersos entre los espacio del ncleo y de usuario
Es un proceso independiente por completo
Antonio Tomeu Programacin Concurrente y Distribuida
27
Creacin Dinmica de Procesos en C
#include <stdio.h>
#include <sys/types.h>
#include <unistd.h>
int i,n;
pid_t childpid;
for (i = 1;i < n; i++)
if ((childpid=fork())==-1)
break;
fprint(stderr,Soy el proceso %ld con padre %ld\n,
(long)getpid(), (long)getppid());
Antonio Tomeu Programacin Concurrente y Distribuida
28
Creacin Dinmica de en Java
Un programa concurrente en Java tiene varios
hilos concurrentes
Todos comparten el mismo espacio de
direcciones virtuales
Comparten los recursos del sistema
Poseen contador de programa y pila propios
Dos mtodos posibles para definir hilos
Thread Clase Extendida
extends
Antonio Tomeu Programacin Concurrente y Distribuida
29
Sistemas monoprocesador
Modelo de concurrencia simulado (procesadores virtuales)
Existe interfoliacin de instrucciones
Arquitectura de memoria comn
Existe planificacin en el acceso al procesador
Sistemas multiprocesador
Acoplamiento fuerte (sistemas paralelos)
Arquitectura de memoria comn
Soluciones propuestas para monoprocesador admisibles
Acoplamiento dbil (sistemas distribuidos)
Arquitectura de comunicaciones
Necesidad de soluciones ad-hoc
Consideraciones sobre el Hardware
Antonio Tomeu Programacin Concurrente y Distribuida
30
Conjunto de mquinas independientes conectadas por
una red
El acoplamiento es dbil
Arquitectura de memoria no comn
Temporizacin no uniforme
Se pueden conectar mquinas de muchos tipos
Entidades concurrentes no comparten memoria
Sincronizacin en torno a comunicacin
Son sistemas altamente escalables
Programacin de Sistemas Distribuidos
Antonio Tomeu Programacin Concurrente y Distribuida
31
Se comparten recursos
Se pueden escalar indefinidamente
Son ms fiables
Tolerancia a fallos
Alta disponibilidad
Reconfigurabilidad
Ventajas de los Sistemas Distribuidos
Antonio Tomeu Programacin Concurrente y Distribuida
32
Complejidad mayor en la relacin interproceso
Complejidad mayor en sincronizacin
No existe un estado nico
Plataformas heterogneas
Factores de comunicacin
Prdida de mensajes
Orden de los mensajes
Idempotencia de tareas
Inconvenientes de los Sistemas Distribuidos
Antonio Tomeu Programacin Concurrente y Distribuida
33
Modelo de Paso de Mensajes
Primitivas de comunicacin send/receive
Carcter de las primitivas
Protocolo solicitud/respuesta de pocas capas
Modelo RPC/RMI
Permite al programador invocar procedimientos remotos de
forma (idealmente transparente)
Requiere procedimientos de resguardo (stubs)
Modelo de Objetos Distribuidos
DCOM (Microsoft)
CORBA (OMG)
EJB (Sun)
Implementacin de Programas Distribuidos
Antonio Tomeu Programacin Concurrente y Distribuida
34
Modelo de Paso de Mensajes
NUCLEO NUCLEO
CLIENTE SERVIDOR
SOLICITUD
RESPUESTA
RED
Antonio Tomeu Programacin Concurrente y Distribuida
35
Modelo RPC/RMI (paso de mensajes-alto nivel)
Entorno Global
VAR vec: Vector;
init vect [1],vec[2],...,vec[MAX]
.
.
VectorEscalado (vec,MAX,10)
.
(suspendido)
.
continua
copy v,nElements,k
from CALL message
FOR i:=1 TO Nelements DO
v[i]:=v[i]*k;
copy v to reply message
CLIENTE
SERVIDOR
Respuesta
Peticin

Antonio Tomeu Programacin Concurrente y Distribuida
36
Modelo de Objetos Distribuidos
Antonio Tomeu Programacin Concurrente y Distribuida
37
Exclusin Mutua Distribuida
Algoritmos Centralizados
Algoritmos Token-Ring
Algoritmos Distribuidos (Ricart-Agrawala)
Sincronizacin Distribuida
Con relojes fsicos
Con relojes lgicos
Terminacin Distribuida
Concepto de terminacin distribuida
Algoritmo de Dijkstra-Scholten
Algoritmo de Terminacin con Marcadores
Sincronizacin de Programas Distribuidos
Antonio Tomeu Programacin Concurrente y Distribuida
38
Son sistemas concurrentes caracterizados por
la existencia de una ligadura temporal para
completar una tarea
Control robtico, teledireccin, telemedicina, multimedia
Programador tiene acceso a reloj y planificador.
Pueden ser:
Crticos: las tareas deben necesariamente satisfacer las
restricciones impuestas por la ligadura temporal.
No Crticos: las tareas intentan satisfacer tales
restricciones, pero el diseo no garantiza la consecucin
de las mismas con total garanta.
Linux RT
Sistemas de Tiempo Real
Antonio Tomeu Programacin Concurrente y Distribuida
39
Cada entidad concurrente se ejecuta sobre
un procesador dedicado.
Si la memoria es comn, las soluciones de la
programacin concurrente siguen vigentes.
Con memoria comn los requerimientos de
correccin son los mismos.
En otro caso, se requieren nuevas soluciones
Programacin Paralela
Antonio Tomeu Programacin Concurrente y Distribuida
40
Son sistemas con ms de un procesador
Corresponden al esquema MIMD de Flynn
La memoria suele ser comn (acoplamiento fuerte)
Caso particular de la programacin concurrente
Escalable hasta cientos de unidades.
Tcnicas de programacin especficas
Paralelizacin de algoritmos
Balanceado de carga
Particionamiento de datos
Particionamiento de funciones
Multiprocesadores
Antonio Tomeu Programacin Concurrente y Distribuida

You might also like