Programación Concurrente y Distribuída Algoritmos para Distribución

Anuncio
Distribution
Programación Concurrente y Distribuı́da
Algoritmos para Distribución
Camilo Rueda 1
slides basados en el texto “Introduction to Distributed
Algorithms” de Gerard Tel
1 Universidad
Javeriana-Cali
3 de mayo de 2010
Distribution
basics
Algoritmos de “olas”
Computación: colección C de eventos
Los eventos están ordenados por precedencia causal (≺)
Hay un evento especial interno llamado decidir
Un algoritmo de olas:
Intercambia un número finito de mensajes
y realiza después una decisión.
La decisión depende causalmente de algún evento del
proceso
Distribution
basics
Algoritmos de “olas”: definición formal
Es un algoritmo distribuido que satisface:
1
Terminación (cada computación es finita):
∀C. |C| < ∞
2
Decisión (cada computación contiene al menos un evento
“decidir”):
∀C. ∃e. e es evento decidir
3
Dependencia (evento “decidir” está precedido de otro):
∀C. ∀e ∈ C : (decidir (e) ⇒ ∀p ∈ P. ∃f ∈ Cp : f ≺ e)
Cada computación se denomina ola
Distribution
basics
Tipos de algoritmos de ola
Centralizado: hay exactamente un proceso iniciador en
cada computación
Descentralizado: varios procesos pueden iniciar
Topologı́a: algoritmos especı́ficos para cierta topologı́a
Conocimiento inicial. Ejemplos:
Identidad del proceso
Identidad de los vecinos
Número de decisiones
Complejidad: número de mensajes intercambiados.
Distribution
basics
Propiedades de algoritmos de ola
Sea N el número de procesos y E el número de conexiones.
PROP1:
PROP2:
PROP3:
PROP4:
para cada evento e ∈ C, existe un iniciador p
y un evento f ∈ Cp tal que f e
sea dp ∈ C un evento de decisión en el proceso p.
∀q 6= p : ∃f ∈ Cq : (f dp ∧ f es evento send)
En un algoritmo con un iniciador p ∈ C tal que
un evento de decisión dp ocurre en el proceso p,
al menos N mensajes se intercambian
En un algoritmo sin comocimiento de identidades,
al menos E mensajes se intercambian
Distribution
basics
Sincronización global
En cada proceso q debe ejecutarse un evento aq ,
y en algunos procesos se ejecuta un evento bp ,
tal que toda ejecución de aq
ocurre antes que cualquiera de los bp
Distribution
basics
Algoritmo de ola de árbol
var recp [q], para cada q ∈ vecinosp init false
/* recp [q] = true si p ha recibido mensaje de q */
begin while #{q : recp [q] = false} > 1do
begin receive htok i from q; recp [q] := true end
/* ahora solamente hay un q0 con recp [q0 ] = false */
send htoki to q0 ;
x : receive htokifrom q0 ; recp [q0 ] := true ;
decide
/* informar la decisión
forall q ∈ Vecinosp , q 6= q0 do send htok i to q */
end
Las hojas del árbol son iniciadores
Distribution
basics
Algoritmo centralizado del eco (Chang)
var recp : integer init 0 /* número de mensajes recibidos*/
padrep : P init undef
Para el iniciador:
begin forall q ∈ Vecinosp do send htoki to q ;
while recp < #(Vecinosp ) do
receive htoki ; recp := recp + 1 end ;
decide
end
Para no-iniciadores:
begin receive htok i from vecino q; padrep := q; recp := recp + 1;
forall q ∈ Vecinosp , q 6= padrep do send htok i to q;
while recp < #(Vecinosp ) do
receive htoki ; recp := recp + 1 end ;
send htok i to padrep
end
Distribution
basics
Elección de lı́der en árboles
Cada proceso puede estar en los estados:
dormido, lider , pierde
Cada iniciador despierta a sus vecinos
Una vez todo proceso está despierto, se ejecuta el
algoritmo de ola para árbol
Variables:
wsp : controla que cada proceso p envı́e mensajes de
despertar una sola vez
wrp : número de mensajes despertar recibidos por p
vp : identificador del proceso p
Distribution
basics
Elegir lı́der en árbol: algoritmo (1)
var wsp : boolean init false ; wrp : integer init 0;
recp [q] : boolean init false , para cada q ∈ Vecinosp
vp : P init undef
statep : {dormido, lider , pierde} init dormido;
begin if iniciador (p) then
wsp := true ; forall q ∈ Vecinosp do send hdespiertei to q
end ;
while wrp < #(Vecinosp ) do
receive hdespiertei ; wrp := wrp + 1;
if not(wsp ) then wsp := true ;
forall q ∈ Vecinosp do send hdespiertei to q
end
end ;
/* empezar el algoritmo de ola */
...
Distribution
basics
Elegir lı́der en árbol: algoritmo (2)
...
/* empezar el algoritmo de ola */
begin while #{q : recp [q] = false } > 1do
begin receive htok, r i from q; recp [q] := true ;
vp := min(vp , r )
end ;
/* ahora solamente hay un q0 con recp [q0 ] = false */
send htok , vp i to q0 ;
receive htok, r ifrom q0 ;
vp := (min, vp , r ); /* decidir: respuesta=vp */
if vp = p then statep := lider else statep := pierde end ;
/* informar la decisión
forall q ∈ Vecinosp , q 6= q0 do send htok, vp i to q */
end
Distribution
basics
Algoritmo centralizado de extinción
Para redes de cualquier topologı́a
Procede por “oleadas”, empezando por el iniciador
Cada ola tiene un identificador
El lı́der de la ola envı́a mensajes a todos los demás. Estos
incluyen el ID de la ola
Cada proceso se asocia a alguna ola
Si el ID de la ola de un proceso es menor que el que
recibe como mensaje, se ignora el mensaje
Si es mayor, reinicializa variables y comienza ola con el
valor recibido
Si es igual, el mensaje se trata como en el algoritmo usual
de ola
Cuando la ola inicada por q llega a punto de decisión, es
el lı́der.
Distribution
basics
Algoritmo centralizado de extinción (1)
var cawp : P init undef
recp : integer init 0 /* número de htok, cawp i recibidos*/
padrep , winp : P init undef ; /* winp es la identidad del lı́der */
lrecp : integer init 0; /* num de hldr , r i recibidos*/
begin if iniciador (p) then
cauwp := p; forall q ∈ Vecinosp do send htok , pi to q ;
end ;
while lrecp < #(Vecinosp ) do
receive msg from q;
if msg = hldr , r i then
if lrecp = 0 then forall q ∈ Vecinosp do send hldr , r i to q ;
end ;
lrecp := lrecp + 1; winp := r
else /* un mensaje htok, r i */
......
Distribution
basics
Algoritmo centralizado de extinción (2)
else /* un mensaje htok, r i */
begin if r < cawp ∨ cawp = undef then /* reiniciar */
cauwp := r ; recp := 0 : padrep := q ;
forall s ∈ Vecinosp , s 6= q do send htok, r i to s
end :
if r = cawp then
recp := recp + 1;
if recp = #(Vecinosp ) then
if cawp = p then
forall s ∈ Vecinosp do send hldr , pi to s ;
else send htok, cawp i to padrep end
end
end
end end ;
if winp = p then statep := lider else statep := pierde end
end
Distribution
basics
Trabajo de programación distribuida
Implemente el algoritmo de Chang para n procesos
Úselo para construir un árbol de los procesos
Sobre ese árbol implemente el algoritmo de elección de
leader
Descargar