Sunteți pe pagina 1din 26

Cursul 9

Algoritmi Wave
n proiectarea i execuia aplicaiilor distribuite
intervin task-uri elementare comune, care pot fi
realizate ca sub-task-uri:
- broadcasting;
- sincronizare global;
- declanarea unui eveniment n fiecare proces;
- calculul unei funcii pentru fiecare proces care
posed o parte a datelor de intrare.
Se va observa, ulterior, c aceste operaii sunt
att de importante nct problemele mai
complicate pot fi rezolvate numai n termenii
utilizrii lor.
Algoritmi wave
Vom considera, n continuare, c topologia reelei
este:
- fix;
- neorientat fiecare canal este bidirecional;
- conectat exist o cale ntre oricare dou
procese;
Sistemul este asincron i nu exist un timp
global, sau ceasuri de timp real.
Un calcul este o colecie de evenimente,
ordonate parial de relaia de preceden cauzal
t. Numrul de evenimente care se produc n
calculul C este |C|, iar n procesul p se produc
evenimentele din submulimea C
p

Se presupune c exist un tip special de
eveniment intern, denumit decide (decizional). Un
algoritm wave schimb un numr finit de mesaje,
dup care ia o decizie, care depinde cauzal de un
anumit eveniment n fiecare proces.
Definiie Un algoritm wave este un algoritm
distribuit care satisface urmtoarele cerine:
1. terminarea fiecare calcul este finit:
C: |C|<
2. decizie fiecare calcul conine cel puin un
eveniment de decizie:
C: - e e C: e este un eveniment decide
3. dependen n fiecare calcul, fiecare eveniment de
decizie este precedat cauzal de cte un eveniment n
fiecare proces:
C: eeC: ( e este un eveniment decizional qeP - f e C
q
:
f t e).
Un calcul al unui algoritm wave poart denumirea de
wave val.
n privina proceselor componente, se face o distincie
ntre iniiatori i neiniiatori sau nsoitori followers.

Un proces este iniiator dac starteaz spontan (ca
urmare a ndeplinirii unei condiii interne a procesului)
execuia unui algoritm local.
Un nsoitor devine implicat n algoritm numai cnd
primete un mesaj din partea acestuia (iniiatorului) i
declaneaz execuia algoritmului procesului.
Primul eveniment al iniiatorului este un eveniment de tip
intern sau send. Primul eveniment al nsoitorului este de
tip receive.
Exist numeroi algoritmi de tip wave, care difer n
aspectele urmtoare:
-centralizarea un algoritm este centralizat dac
trebuie s existe exact un iniiator n cadrul fiecrui
calcul, sau descentralizat dac poate fi startat spontan
de o submulime arbitrar de procese;
- topologia se poate proiecta un algoritm special,
pentru o anumit topologie;
- informaia iniial un algoritm poate considera
disponibilitatea n cadrul proceselor a unor tipuri diferite
de informaii (identitatea proceselor, a vecinilor etc.);
- numrul deciziilor fiecare proces execut cel
mult o decizie. Numrul proceselor care execut un
astfel de eveniment poate s difere (unul, dou, toate);
- complexitatea se refer la numrul de mesaje
schimbate, cantitatea de bii i timpul consumat de un
calcul.
Un mesaj transport cauzalitate i numai uneori i date
O subclas important de algoritmi wave este a celor centralizai,
care au urmtoarele dou proprieti suplimentare:
- iniiatorul este singurul proces care decide;
- toate evenimentele sunt ordonate total prin ordinea
cauzal.
Algoritmii cu proprietile de mai sus se mai numesc i
algoritmi de traversare.
Rezultate elementare
n primul rnd, fiecare eveniment al unui calcul este
precedat de un eveniment produs la iniiator.
Lemma 1 pentru fiecare eveniment e e C, exist un
iniiator p i un eveniment f e C astfel nct f t e.

Demonstraie evenimentul e are o istorie finit, ceea ce
nseamn c exist un eveniment minimal f, astfel nct
f t e i nu mai exist nici un eveniment care s-l
precead pe f. Evenimentul f este primul eveniment din
p, deoarece altfel nu ar fi minimal.
Primul eveniment al unui nsoitor este de tip receive,
care trebuie precedat de un eveniment de tip send, ceea
ce contrazice din nou minimalitatea lui f. Deci, p este un
iniiator.
Un val cu un iniiator definete un arbore de acoperire
peste toate procesele sistemului, atunci cnd se
propag mesaje (primele) pe canalele selectate, ctre
toi nsoitorii.
Lemma 2 Fie C un val cu iniiatorul p i, pentru fiecare
nsoitor q, fie father
q
vecinul lui q de la care acesta a
primit un mesaj, n primul lui eveniment. Atunci,
graful T = (P, E
T
), cu E
T
= { qr : q = r . r = father
q
} este
un arbore de acoperire cu rdcina n p.
Lemma 3 Fie C un val i d
p
e C un eveniment
decide n procesul p. Atunci, q = r: - f e C
q
: (f t
d
p
. f este un eveniment send)
Teorem Fie un val C i un iniiator p, astfel
nct n p se produce un eveniment de decizie d
p
.
Atunci, n C se schimb cel puin N mesaje.
- Algoritmii wave sunt exact cei necesari pentru
emisia (broadcast) unei informaii ctre toate
procesele i primirea unei notificri atunci cnd
aceast operaie s-a ncheiat. Aceast problem,
pentru propagarea unei informaii, cu feedback
(PIF), se formuleaz astfel:
Se formeaz o submulime de procese care au un mesaj M care
trebuie transmis tuturor proceselor. Anumite procese trebuie s fie
notificate de terminarea acestei operaii; ele vor executa un
eveniment notify, numai dup ce toate procesele au primit mesajul
M. Algoritmul trebuie s foloseasc un numr finit de mesaje.
Orice algoritm wave poate fi folosit ca un algoritm PIF (procesele
care l conin iniial pe M sunt iniiatori, iar M este introdus n
mesajul transmis).
- Algoritmii wave sunt exact cei necesari pentru sincronizarea
global a proceselor. Aceast problem se formuleaz astfel:
Trebuie s se execute n fiecare proces q un eveniment a
q
, iar n
unele procese se va executa un eveniment b
p
, astfel nct
executarea tuturor evenimentelor a
q
trebuie s se produc
naintea producerii oricrui eveniment b
p
. Algoritmul trebuie s
foloseasc un numr finit de mesaje.
Algoritmul pentru inel
Acest algoritm este valabil pentru orice tip de reea n
care se poate construi un ciclu hamiltonian.
Algoritmul este centralizat: iniiatorul trimite un mesaj
< tok > de-a lungul ciclului, fiecare proces l transmite
mai departe i iniiatorul decide.
Iniiator:
begin send < tok > to Next
p
; receive < tok >; decide end
nsoitor:
begin receive < tok >; send < tok > to Next
p
; end
ntr-un numr finit de pai, algoritmul atinge configuraia
final.
Teorem algoritmul pentru inel este un algoritm wave.
Algoritmul pentru arbore
Acest algoritm este valabil pentru orice tip de
reea n care se poate construi un arbore de
acoperire.
Se presupune c toate frunzele iniiaz
algoritmul. Fiecare proces trimite exact un mesaj.
Dac un proces a primit un mesaj via fiecare
canal incident, mai puin unul, (aceast condiie
este iniial true pentru frunze), trimite mesajul pe
canalul rmas.
Dac un proces a primit mesaje pe toate canalele
incidente, decide.

var rec
p
[q] pentru fiecare q e Neigh
p
: boolean
init false;
(- este true dac p a primit un mesaj de la q -)
begin while #{q : rec
p
[q] este false} > 1 do
begin recieve < tok > de la q ; rec
p
[q] = true
end;
send < tok > la q
0
cu rec
p
[q
0
] este false;
x: receive < tok > de la q
0
cu rec
p
[q
0
] = true;
decide
(- informeaz celelalte procese despre decizie:
forall q e Neigh
p
: q = q
0
do send < tok > la q -)
end
Exist dou procese care primesc mesaje pe
fiecare canal i decid; celelalte procese nc
ateapt primirea unui mesaj, cu numrtorul de
program indicnd n x configuraia terminal.

Dac se introduce i instruciunea forall, toate
procesele vor decide i, n configuraia terminal,
fiecare proces este n starea terminal.


Algoritmul cu ecou
Acest algoritm a fost propus de Chang pentru reele cu o
topologie arbitrar algoritmul cu ecou al lui Chang
(82).
Algoritmul inund cu mesaje toate procesele, definind
un arbore de acoperire. Token urile sunt trimise n
ecou prin arcele acestui arbore. Iniiatorul trimite mesaje
tuturor vecinilor si.
La primirea unui mesaj, un nsoitor retrimite acest mesaj
tuturor vecinilor, mai puin celui de la care a primit
mesajul.
Cnd un nsoitor a primit mesaje de la toi vecinii si,
trimite un ecou printelui su. Cnd iniiatorul a primit un
mesaj de la toi vecinii si, decide.
var rec
p
:integer init 0; (- numr mesajele primite -)
father
p
: P init udef;

Iniiator:
begin forall q e Neigh
p
do send < tok > la q;
while rec
p
< # Neigh
p
do
begin receive < tok >; rec
p
:= rec
p
+ 1 end ;
decide
end

nsoitor:
begin receive < tok > de la vecinul q;
father
p
:= q ; rec
p
:= rec
p
+ 1 ;
forall q e Neigh
p
: q = father
p
do send < tok > la q ;
while rec
p
< # Neigh
p
do
begin receive < tok >; rec
p
:= rec
p
+ 1 end ;
send < tok > la father
p

end
Algoritmul folosete acelai mesaj pe toat durata execuiei sale.
Dac se dorete obinerea de informaii despre procese, mesajele
pot fi modificate n sensul includerii informaiilor dorite. n acest
caz, fiii unui proces sunt acele procese de la care se primesc
mesaje diferite.
Algoritmul cu interogare
Dac exist cte un canal ntre fiecare dou procese (topologie
de tip clic), se poate folosi un algoritm mai simplu, algoritmul cu
interogare. Iniiatorul interogheaz fiecare vecin, care i rspunde
cu un mesaj. Cnd a primit mesaje de la toi vecinii, decide.
Var rec
p
: integer init 0; (- numai pentr iniiator -)
Iniiator:
begin forall q e Neigh
p
do send < tok > la q;
while rec
p
< # Neigh
p
do
begin receive < tok >; rec
p
:= rec
p
+ 1 end ;
decide
end
nsoitor:
begin receive < tok > de la q; send < tok > la q end
Acest algoritm poate fi folosit i ntr-o topologie de tip
stea.
Algoritmul cu faze
Acesta este un algoritm descentralizat, pentru reele cu topologie
oarecare.
Este necesar ca procesele s cunoasc diametrul reelei, D.
Algoritmul este corect dac procesele folosesc n loc de D o
valoare D , mai mare dect diametrul reelei limit superioar,
dar aceeai pentru toate procesele.
Algoritmul poate fi folosit n reele orientate oarecare. n acest
caz, nodul p are in-neighbors (procese de la care primete
mesaje) i out-neighbors (procese la care trimite mesaje). Se
folosesc variabilele In
p
i Out
p
.
Fiecare proces trimite exact D mesaje la fiecare vecin. Numai
dup ce a primit I mesaje de la fiecare in-neighbor, poate trimite
mesajul (I + 1) la fiecare out-neighbor.
Algoritmul folosete D mesaje pentru fiecare canal, ceea ce d un
total de ExD mesaje. Dac reeaua este neorientat, numrul de
mesaje se dubleaz.
cons D : integer = diamterul reelei;
var Rec
p
[q] : 0..D init 0 pentru fiecare q e In
p
;
(- numrul de mesaje primit de la q -)
Sent
p
: 0..D init 0;
begin if p este iniiator then
begin forall r e Out
p
do send < tok > la r;
Sent
p
:= Sent
p
+ 1
end ;
while min
q
Rec
p
[q] < D do
begin receive < tok > (de la vecinul q
0
);
Rec
p
[q
0
] : = Rec
p
[q
0
] + 1;
if min
q
Rec
p
[q] > Sent
p
and Sent
p
< D then
begin forall r e Out
p
do send < tok > la r;
Sent
p
:= Sent
p
+ 1
end
end
decide
end
Algoritmi de traversare
Algoritmii de traversare sunt algoritmi wave n
care toate evenimentele sunt total ordonate prin
relaia de cauzalitate, iar ultimul eveniment se
produce n acelai proces n care s-a produs i
primul eveniment.
Un algoritm de traversare are urmtoarele
proprieti:
1. n fiecare calcul exist un iniiator, care starteaz
algoritmul prin trimiterea unui mesaj;
2. la primirea unui mesaj, un proces fir trimite un
mesaj, fie decide;
3. algoritmul se termin n iniiator i cnd aceasta se
ntmpl, fiecare proces a trimis un mesaj, cel puin
odat.
n fiecare configuraie a algoritmului, fie exist un
mesaj n tranzit, fie un proces tocmai a primit un
mesaj i nu a ajuns s trimit un mesaj.
Primele dou proprieti asigur c n fiecare
calcul finit, un singur proces decide. Algoritmul se
termin n singurul proces care decide.
O clic poate fi traversat prin interogare
secvenial: la un moment dat, iniiatorul
interogheaz un singur vecin. Numai dup ce a
primit rspunsul, va interoga vecinul urmtor.
Algoritmul lui Tarry
Acest algoritm este proiectat pentru reele conecte
arbitrare. Se aplic urmtoarele reguli:
- un proces nu trimite un mesaj niciodat de dou ori, pe acelai
canal;
- un nsoitor trimite mesajul printelui (vecinul de la care a primit
prima dat un mesaj) numai dac nu exist nici un alt canal
posibil, conform regulii anterioare.
var used
p
[q] :boolean init false, pt. fiecare q e Neigh
p
;
father
p
: proces init udef;
Iniiator: se execut odat
begin father
p
:= p ; alege q e Neigh
p
;
used
p
[q] := true; send < tok > la q;
end
Pentru fiecare proces, odat cu primirea < tok > de la q
0
:
begin if father
p
= udef then father
p
:= q
0
;
if q e Neigh
p
: used
p
[q]
then decide
else if - q e Neigh
p
: (q = father
p
. used
p
[q])
then begin alege q e Neigh
p
- { father
p
}
cu used
p
[q] ;
used
p
[q] := true; send < tok> la q
end
else begin used
p
[father
p
] := true;
send < tok> la father
p

end
end

Fiecare calcul al acestui algoritm definete un
arbore de acoperire. Rdcina este iniiatorul, iar
fiecare nsoitor p memoreaz printele n
variabila father
p
la sfritul calculelor. Dac se
dorete ca fiecare proces s cunoasc i
identitatea fiilor, dintre vecini, se poate folosi un
mesaj special ctre printe.

S-ar putea să vă placă și