Sunteți pe pagina 1din 18

Universitatea Politehnica Bucureşti - Facultatea de Automatică şi Calculatoare

Ceasuri logice si ordonarea evenimentelor

Intr-un algoritm distribuit, fiecare proces executa o succesiune de actiuni


•  vom numi eveniment producerea unei actiuni
evenimentele aceluiasi proces sunt ordonate in timp
•  ordine usor de stabilit datorita executiei secventiale a procesului
Ordonarea unor evenimente din procese diferite este importanta
•  de ex. intrarea intr-o sectiune critica se face in ordinea cererilor
(politica echitabila!)
Cum se poate face ordonarea?
•  Ordonarea conform timpului fizic de producere este dificila!

11/7/15 Algoritmi Paraleli si distribuiti


Universitatea Politehnica Bucureşti - Facultatea de Automatică şi Calculatoare

Ordinea relativa a evenimentelor

•  Solutie Lamport – folosirea unor ceasuri logice


•  Ordinea este definita de relatia petrecut inainte (à):
–  dacă a şi b sunt evenimente din acelaşi proces şi a îl precede in
timp pe b, atunci aàb;
–  când a reprezintă transmiterea unui mesaj de către un proces, iar
b recepţia aceluiaşi mesaj de către un altul, atunci aàb;
–  dacă aàb şi bàc atunci aàc.

11/7/15 Algoritmi Paraleli si distribuiti


Universitatea Politehnica Bucureşti - Facultatea de Automatică şi Calculatoare

Ordinea relativa a evenimentelor (2)

•  Algoritmul lui Lamport foloseste relatia ”à" pentru a face ordonarea


partiala a evenimentelor

•  Algoritmul pastreaza:

–  pentru fiecare proces o variabila cl (clock) initial 0

–  pentru fiecare mesaj un camp tt (timestmp)

11/7/15 Algoritmi Paraleli si distribuiti


Universitatea Politehnica Bucureşti - Facultatea de Automatică şi Calculatoare

Reguli:
•  la producere eveniment intern
•  cl este incrementat
•  valoarea sa este asociata evenimentului ca amprenta de timp
•  la transmitere mesaj
•  incrementează cl al procesului transmitator cu 1
•  actualizează amprenta de timp a mesajului tt = cl;
•  la primire mesaj cu amprenta de timp tt
•  actualizează ceasul receptorului cl = maxim (cl, tt) + 1

11/7/15 Algoritmi Paraleli si distribuiti


Universitatea Politehnica Bucureşti - Facultatea de Automatică şi Calculatoare

Aplicatie: excluderea mutuala distribuita


•  Foloseste implementari distribuite ale primitivelor P si V
–  când un proces execută o operaţie P sau V el difuzează un mesaj
celorlalte procese
broadcast ch[m] trimite m pe fiecare din ch[1:n]
mesajul m are aceeasi amprenta de timp pe toate canalele
–  apoi analizeaza răspunsurile pentru a decide continuarea execuţiei.
•  Implementarea semafoarelor distribuite
–  procesele Utiliz[i] iniţiază operaţiile P sau V
–  procesele Ajutor[i] implementează operaţiile P si V.

Utiliz(i) Utiliz(j)
Ajutor(j)

start[i]
opsem[i]
Ajutor(i)

11/7/15 Algoritmi Paraleli si distribuiti


Universitatea Politehnica Bucureşti - Facultatea de Automatică şi Calculatoare

enum fel {V, P, ack};


chan opsem[1:n](int transm, fel op, int timp);
chan start[1:n](int timp);

process Utiliz [i = 1 to n]{


int cl = 0; /*ceas logic*/
int ts; /*timestamp mesaj*/
...
cl = cl+1;
broadcast opsem(i, P, cl); /*operatia P*/
receive start[i](ts); /*asteapta permisiune*/
cl = max(cl, ts) + 1;
sectiune critica;
cl = cl+1;
broadcast opsem(i, V, cl); /*operatia V*/
sectiune ne-critica;

}
11/7/15 Algoritmi Paraleli si distribuiti
Universitatea Politehnica Bucureşti - Facultatea de Automatică şi Calculatoare

process Ajutor [i = 1 to n){


typedef struct {int transm, fel k, int ts} queue;
queue qm [lmax]; /*coada ordonata dupa timestamp tm*/
int cl = 0;
int sem = valoare_initiala;
int transm;
fel k;
int ts;

11/7/15 Algoritmi Paraleli si distribuiti 7


Universitatea Politehnica Bucureşti - Facultatea de Automatică şi Calculatoare

while (true) {
receive opsem[i](transm, k, ts);
cl = max(cl, ts) + 1;
if (k==P or k==V) {
insereaza (transm, k, ts) in locul corespunzator in qm;
cl = cl+1; broadcast opsem(i, ack, cl);}
else if (k==ack) {
inregistreaza primirea unui ack;
for [mesajele V complet confirmate ] {
scoate mesaj din qm;
sem = sem+1;}
for [mesajele P complet confirmate st sem>0] {
scoate mesaj (transm, k, ts) din qm;
sem = sem-1;
if (transm=i) {cl = cl+1; send start[i](cl); }
}
} /*end process*/

11/7/15 Algoritmi Paraleli si distribuiti


Universitatea Politehnica Bucureşti - Facultatea de Automatică şi Calculatoare

mesajele trimise de P1 ajung in ordinea transmisiei la P2

M2 M1 M2 M1
P1 P2

mesaje primite de P8 si pastrate in qm

Prefix stabil

28 22 21 19 17 13 10 9 7 5 3

P1 P2 P3 P8 P4 P5 P6 P7 P8 P5 P3

de la cine ? timp producere

11/7/15 Algoritmi Paraleli si distribuiti


Universitatea Politehnica Bucureşti - Facultatea de Automatică şi Calculatoare

Ceasuri logice vectoriale


Cu soluţia Lamport:
daca e precede f atunci amprenta_logică (e) < amprenta_logică (f)
Dar, in figura:
amprenta_logică (e) < amprenta_logică (f) & e precede f
amprenta_logică (e) < amprenta_logică (c) & e NU precede c
In general, daca
amprenta_logică (a) < amprenta_logică (b) NU putem spune daca a à b
Solutia: ceasuri logice vectoriale.

11/7/15 Algoritmi Paraleli si distribuiti


Universitatea Politehnica Bucureşti - Facultatea de Automatică şi Calculatoare

Fiecare P[i] are asociat un vector Vi [1..n] în care:


Vi [i] este numărul de evenimente produse în procesul P[i];
Vi [j] este numărul de evenimente despre care P[i] ştie (a aflat din
amprentele mesajelor primite) că au avut loc la P[j].

Procesul P[i] actualizează Vi la fiecare eveniment din P[i]

La un eveniment intern P[i] incrementeaza Vi [i]

11/7/15 Algoritmi Paraleli si distribuiti


Universitatea Politehnica Bucureşti - Facultatea de Automatică şi Calculatoare

Când P[i] transmite mesajul m (eveniment send m):


P[i] incrementează Vi [i]
P[i] adaugă Vi la m ca vector de amprente de timp curent vt(m)

Când P[j] primeşte m si vt(m) (eveniment receive m):


P[j] ajustează:
Vj [k] = max{Vj [k],vt(m)[k]} pentru fiecare k
P[j] incrementează Vj [j] cu 1

11/7/15 Algoritmi Paraleli si distribuiti


Universitatea Politehnica Bucureşti - Facultatea de Automatică şi Calculatoare

Aplicarea regulilor ceasurilor logice vectoriale


Reguli
VT1 = VT2 ó VT1[i] = VT2[i], pentru i = 1, ..., N
VT1 <= VT2 ó VT1[i] <= VT2[i], pentru i = 1, ..., N
VT1 < VT2 ó VT1 <= VT2 şi VT1 != VT2

Fie vt(a) şi vt(b) vectorii de amprente de timp asociaţi ev a şi b.


Atunci:
vt(a) < vt(b) => ev a precede cauzal b
vt(a) !< vt(b) and vt(a) !> vt(b) and vt(a) != vt(b) ó ev a şi b sunt
concurente
11/7/15 Algoritmi Paraleli si distribuiti
Universitatea Politehnica Bucureşti - Facultatea de Automatică şi Calculatoare

Receptia si livrarea mesajelor


•  Mesajele destinate unui proces sunt receptionate si memorate
temporar de un modul de comunicare
•  Mesajele sunt livrate procesului (de aplicatie) cand sunt
indeplinite anumite conditii

11/7/15 Algoritmi Paraleli si distribuiti 14


Universitatea Politehnica Bucureşti - Facultatea de Automatică şi Calculatoare

Ordonare Cauzală Multicast


Procesele unei colecţii P comunică între ele doar prin mesaje cu difuzare
Se cere ca mesajele să respecte dependenţa cauzală
vt(m) < vt(m') => livrareP (m) à livrareP (m')

Ex: vt(m1) < vt(m2) è m1 trebuie livrat inainte de m2;


Obs. in figura nu sunt marcate toate copiile mesajelor multicast!
m1 si m3 sunt concurente è pot fi livrate oricum (similar m2 si m3)

11/7/15 Algoritmi Paraleli si distribuiti


Universitatea Politehnica Bucureşti - Facultatea de Automatică şi Calculatoare

Protocolul (vectori de timp)

•  fiecare proces P [i = 1..n] are asociat un vector Vi [1..n], cu


toate elementele iniţial 0
•  se numara doar operatiile de transmitere de mesaje
•  Vi [i] este nr evenimente transmitere de mesaje produse de
P[i];
•  Vi [j] este nr evenimente transmitere de mesaje despre care
P[i] ştie (a aflat) că au avut loc la P[j].
•  Procesul P[i] actualizează Vi la fiecare eveniment de trimitere
sau recepţie de mesaj la / de la P[i].

11/7/15 Algoritmi Paraleli si distribuiti


Universitatea Politehnica Bucureşti - Facultatea de Automatică şi Calculatoare

Când procesul sursa P[s] transmite mesajul m:


P[s] incrementează Vs [s]
P[s] adaugă Vs la m ca vector de amprente de timp curent vt(m)
•  Obs. Pentru ordonare cauzala, incrementarea lui Vs [s] se
face doar la transmitere de mesaje de catre s

vt(m) spune receptorului câte evenimente (din alte procese) au precedat m


şi ar putea influenţa cauzal pe m.

Când destinatia P[d] primeşte mesajul m împreună cu vt(m), mesajul este


păstrat într-o coadă de întârziere şi este livrat doar dacă:
vt(m) [s] = Vd [s] + 1
vt(m) [k] =< Vd [k] pentru k <> s

Când mesajul este livrat, Vd este actualizat conform regulilor vectorilor de


timp:
Vd [k] = max{Vd [k], vt(m)[k]} pentru fiecare k = 1,n.

11/7/15 Algoritmi Paraleli si distribuiti


Universitatea Politehnica Bucureşti - Facultatea de Automatică şi Calculatoare

Alte acţiuni ale protocolului la livrarea mesajelor:

dacă vt(m)[k] > Vd [k] pentru un oarecare k atunci se întârzie m


P[s] a primit mesaje de care mesajul curent poate fi cauzal dependent, dar
pe care P[d] încă nu le-a primit;
dacă vt(m)[s] > V(d)[s]+1 atunci se întârzie m
mai sunt mesaje de la P[s] pe care P[d] nu le-a primit
(asigura ordinea FIFO pentru canale nonFIFO)
dacă vt(m)[s] <= Vd [s] atunci rejectează m
m este un duplicat al unui mesaj primit anterior.
11/7/15 Algoritmi Paraleli si distribuiti

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