Dstrbuované systémy a výpočty X36DSV Jan Janeček (dnes Peter Macejko)
Výlučný přístup Algortmy na úplném grafu Lamport - základní algortmus, 3(n-1) zpráv/požadavek Rcart Agrawala - pozdržení souhlasů, 2(n-1) zpráv/požadavek Carvalho Roucarol - kredty pro přístup, 0 2(n-1) zpráv/požadavek Rcart Agrawala - požadavkový token, n zpráv/požadavek X36DSV - Dstrbuované systémy a výpočty (8) - v1.6 2
Lamport Rq : queue Ts : array LC : nt [] { ntalzaton } LC := 0; for j := 1 to N do Ts[j] := 0; Rq[j] := Lega: LC local clock (lokální čas) Rq request queue (prortní fronta) Ts tme stamps (čas poslední zprávy) Komunkační prmtva: Request(LC, ) Response(LCj, j) Release(LC, ) X36DSV - Dstrbuované systémy a výpočty (8) - v1.6 3
Lamport Rq : queue Ts : array [] X36DSV - Dstrbuované systémy a výpočty (8) - v1.6 4
Lamport Rq Rq Rq : queue LC Ts : array LC [] Rq Odesláno (n-1) zpráv X36DSV - Dstrbuované systémy a výpočty (8) - v1.6 5
Lamport Rq(LC, ) Rq(LC, ) Rq : queue LC Ts : array LC [] Rq(LC, ) X36DSV - Dstrbuované systémy a výpočty (8) - v1.6 6
Lamport Rq : queue j LC Ts : array Rp LC [] X36DSV - Dstrbuované systémy a výpočty (8) - v1.6 7
Lamport Rq : queue j LC Ts : array Rp(LCj, j) LC [] X36DSV - Dstrbuované systémy a výpočty (8) - v1.6 8
Lamport j Rq : queue LC Ts : array LC [] LCj [j] Přjato (n-1) zpráv X36DSV - Dstrbuované systémy a výpočty (8) - v1.6 9
Lamport when request { access request } [P] Rq[] := LC; Ts[] := LC; LC := LC+1; [V] for j:=1 to N do f j then s REQUEST(LC,) to j when receved REQUEST(ts,j) { j-th process request } [P] LC := max(lc,ts); LC := LC+1; [V] Rq[j] := ts; Ts[j] := ts; s RESPONSE(LC,) to j when receved RESPONSE(ts,j) { j-th process response } [P] LC := max(lc,ts); LC := LC+1; [V] Ts[j] := ts X36DSV - Dstrbuované systémy a výpočty (8) - v1.6 10
Lamport Rq : queue Ts : array [] X < Y X36DSV - Dstrbuované systémy a výpočty (8) - v1.6 11
Lamport Rq : queue j X Ts : array Rl(LC, ) Rl(LC, ) [] Rl(LC, ) Odesláno (n-1) zpráv X36DSV - Dstrbuované systémy a výpočty (8) - v1.6 12
Lamport when (Rq[]<Rq[j] forall j ) and (Rq[]<Ts[j] forall j ) { crtcal secton } s RELEASE(LC) to j when receved RELEASE(ts,j) { j-th process release } [P] LC := max(lc,ts); LC := LC+1; [V] Rq[j] := ; Zprávy request + response + release (n-1) + (n-1) + (n-1) = 3x(n-1) X36DSV - Dstrbuované systémy a výpočty (8) - v1.6 13
Rcart - Agrawala MyRq Req : array MaxRq { ntalzaton } MaxRq:=0; MyReq:=F; for j:=1 to N do Req[j]:=F Lega: MyRq sekvenční číslo vlastní žádost MaxRq maxmální sekvenční číslo Req pole regstrací žádostí na vstup do CS Komunkační prmtva: Request(MyRq, ) Response() X36DSV - Dstrbuované systémy a výpočty (8) - v1.6 14
Rcart - Agrawala MyRq S+1 MaxRq S Rq Rq Req : array T [] Rq X36DSV - Dstrbuované systémy a výpočty (8) - v1.6 15
Rcart - Agrawala MyRq S+1 MaxRq S Rq(MyRq, ) Rq(MyRq, ) Req : array T [] Rq(MyRq, ) Odesláno (n-1) zpráv X36DSV - Dstrbuované systémy a výpočty (8) - v1.6 16
Rcart - Agrawala j Rq(MyRq, ) MyRq Req : array? [] MaxRq max [j] X36DSV - Dstrbuované systémy a výpočty (8) - v1.6 17
Rcart - Agrawala MyRq MaxRq j Req : array Rp() [] Přjato (n-1) zpráv X36DSV - Dstrbuované systémy a výpočty (8) - v1.6 18
Rcart - Agrawala MyRq MaxRq j Req : array? Rp() []? Rp() X36DSV - Dstrbuované systémy a výpočty (8) - v1.6 19
Rcart - Agrawala when request { access request } [P] Req[] := T; MyRq := MaxRq+1; [V] RpCnt := 0; for j:=1 to N do f j then s REQUEST(MyRq,) to j; wat RpCnt=N-1; { crtcal secton } Req[] := F; for j:=1 to N do { delayed responses } f Req[j] then Req[j]:=F; s REPLY to j X36DSV - Dstrbuované systémy a výpočty (8) - v1.6 20
Rcart - Agrawala when receved REQUEST(k,j) do { request of the k-th process } MaxRq := max(maxrq,k); [P] Delay := Req[] and ((k>myrq) or (k=myrq and j>)); [V] f Delay then Req[j] := T else s REPLY to j when receved REPLY do { response of any process } RpCnt:=RpCnt+1; Zprávy request + response (n-1) + (n-1) = 2x(n-1) X36DSV - Dstrbuované systémy a výpočty (8) - v1.6 21
Carvalho - Roucarol MyRq MaxRq InUse { ntalzaton } Req : array Grant : array MaxRq := 0; MyRq := 0; for j:=1 to N do Req[j] := F; Grant[j] := F Lega: MyRq sekvenční číslo vlastní žádost MaxRq maxmální sekvenční číslo InUse dentfkátor krtcké sekce Req pole regstrací žádostí na vstup do CS Grant pole aktvních 'pověření' Komunkační prmtva: Request(MyRq, ) Reply() X36DSV - Dstrbuované systémy a výpočty (8) - v1.6 22
Carvalho - Roucarol MyRq S+1 MaxRq S Req : array Rq Rq T [] Rq Grant : array; [] X36DSV - Dstrbuované systémy a výpočty (8) - v1.6 23
Carvalho - Roucarol MyRq MaxRq j Req : array Rp() Rp() [] Rp() Grant : array; [] X36DSV - Dstrbuované systémy a výpočty (8) - v1.6 24
Carvalho - Roucarol when request { access request } [P] Req[] := T; MyRq := MaxRq+1; [V] for j:=1 to N do f j and (not Grant[j]) then s REQUEST(MyRq,) to j; wat (Grant[j]=T forall j ); Req[] := F; InUse := T; { crtcal secton } InUse := F; for j:=1 to N do { delayed responses } f Req[j] then Grant[j] := F; Req[j] := F; s REPLY to j X36DSV - Dstrbuované systémy a výpočty (8) - v1.6 25
Carvalho - Roucarol when receved REQUEST(k,j) do { j-th process request } MaxRq := max(maxrq,k); [P] Delay := ((k>myrq) or (k=myrq and j>)) [V] f InUse or (Req[] and Delay) then Req[j]:=T; f not (InUse or Req[]) or (Req[] and (not Grant[j]) and (not Delay)) then s REPLY() to j; f (Req[] and Grant[j] and (not Delay)) then Grant[j]:=F; s REPLY() to j; s REQUEST(MyRq,) to j X36DSV - Dstrbuované systémy a výpočty (8) - v1.6 26
Carvalho - Roucarol when receved REPLY from j do { j-th process response } Grant[j] := T Zprávy request + response (n-1) + (n-1) = 2x(n-1) 0 + 0 = 0 X36DSV - Dstrbuované systémy a výpočty (8) - v1.6 27
Rcart - Agrawala (token passng) Clock InUse TokenHeld Req : array Token : array { ntalzaton } for j:=1 to N do Req[j] := 0; Token[j] := 0; Clock := 0; InUse := F; TokenHeld := (myid == 0)?T:F Lega: Clock sekvenční číslo InUse dentfkátor krtcké sekce Req pole regstrací žádostí na vstup do CS Token pole s časy přjetí tokenu TokenHeld dentfkátor přítomnost tokenu Komunkační prmtva: Request(Clock, ) Token() X36DSV - Dstrbuované systémy a výpočty (8) - v1.6 28
Rcart - Agrawala (token passng) Req : array; Token : array; [] Rq(Clock, ) Rq(Clock, ) [] Rq(Clock, ) X36DSV - Dstrbuované systémy a výpočty (8) - v1.6 29
Rcart - Agrawala (token passng) Req : array; Token Token : array; [] [] X36DSV - Dstrbuované systémy a výpočty (8) - v1.6 30
Rcart - Agrawala (token passng) when request do { access request } f not TokenHeld then Clock := Clock+1; broadcast REQUEST(Clock,); { broadcastng request } receve TOKEN; { watng for token } TokenHeld := T ; InUse := true; { crtcal secton } Token[] := Clock; InUse := F; j := (+1) mod N; whle j do f Req[j]>Token[j] and TokenHeld then { passng token } TokenHeld := F; s TOKEN to j; j := (j+1) mod N X36DSV - Dstrbuované systémy a výpočty (8) - v1.6 31
Rcart - Agrawala (token passng) when receved REQUEST(k,j) do { j-th process request } Req[j]:=max(Req[j],k); f TokenHeld and not InUse then j:=(+1) mod N; whle <>j do f Req[j]>Token[j] and TokenHeld then TokenHeld:=F; s TOKEN to j; j:=(j+1) mod N; { passng token } X36DSV - Dstrbuované systémy a výpočty (8) - v1.6 32
Výběr leader electon Rozbtí symetre Výběr na stromu - základní algortmus, - vyžaduje 3(n-1) zpráv Výběr na kruhu Chang Roberts - jednosměrná komunkace, - komunkační složtost n.log(n) n 2 Hrschberg Snclar - obousměrná komunkace - komunkační složtost n.log(n) Peterson/Dolev Klave Rodeh - jednosměrná komunkace, - komunkační složtost n.log(n) X36DSV - Dstrbuované systémy a výpočty (8) - v1.6 33
Electon on tree X36DSV - Dstrbuované systémy a výpočty (8) - v1.6 34
Electon on tree X36DSV - Dstrbuované systémy a výpočty (8) - v1.6 35
Electon on tree X36DSV - Dstrbuované systémy a výpočty (8) - v1.6 36
Electon on tree X36DSV - Dstrbuované systémy a výpočty (8) - v1.6 37
Electon on tree var ws p : boolean; nt false; // wake-up sent wr p : boolean; nt 0; // wake-up receved rec p [q]: boolean; nt false; // receved from q v p : P; nt p; // node d state p : {sleep,leader,lost}; nt sleep; // node state f p s ntator then ws p := true; forall q n Negh p do s (wakeup) to q ; whle wr p <#Negh p do receve (wakeup); wr p := wr p +1; ; f not ws p then ws p := true; forall q n Negh p do s (wakeup) to q X36DSV - Dstrbuované systémy a výpočty (8) - v1.6 38
Electon on tree /* start of the tree algorthm */ whle #{q : ~rec p [q]} > 1 do receve(tok,r) from q; rec p [q] := true; v p := mn(v p,r) ; s(tok,v p ) to q 0 wth ~rec p [q 0 ]; receve(tok,r) from q 0 ; v p := mn(v p,r); f v p =p then state := leader else state := lost; forall q n Negh p, q q 0 do s(tok,v p ) to q Zprávy 4x (n-1) -?-> 3x (n-1) X36DSV - Dstrbuované systémy a výpočty (8) - v1.6 39
Electon on rng Chang - Roberts X36DSV - Dstrbuované systémy a výpočty (8) - v1.6 40
Electon on rng Chang - Roberts ELECTION X36DSV - Dstrbuované systémy a výpočty (8) - v1.6 41
Electon on rng Chang - Roberts ELECTION ELECTION X36DSV - Dstrbuované systémy a výpočty (8) - v1.6 42
Electon on rng Chang - Roberts var Votng; Coordnator; { ncalzace } Votng:=F; Coordnator:=0 when decson INITIATE_ELECTION do { rozhodnutí volt } Votng:=T; sl ELECTION() X36DSV - Dstrbuované systémy a výpočty (8) - v1.6 43
Electon on rng when receved ELECTION(j) do { příjem zprávy ELECTION } f j> then sl ELECTION(j); Votng:=T ; f j< and not Votng then sl ELECTION(MyNumber); Votng:=T ; f j= then sl ELECTED() X36DSV - Dstrbuované systémy a výpočty (8) - v1.6 44
Electon on rng when receved ELECTED(j) do { příjem zprávy ELECTED } Coordnator:=j; Votng:=F; f j<> then sl ELECTED(j) Zprávy (n-1) mn 0.5n(n-1) max O(n log n) - avg X36DSV - Dstrbuované systémy a výpočty (8) - v1.6 45
Electon on rng var state p ; f p s ntator then state p := cand; s(tok,p) to Next p ; repeat receve(tok,q); f q=p then state p := leader else f q<p then f state p =cand then state p := lost; s(tok,q) to Next p untl state p =leader else repeat receve(tok,q); s(tok,q) to Next p ; f state p =sleep then state p := lost untl false Chang - Roberts X36DSV - Dstrbuované systémy a výpočty (8) - v1.6 46
Electon on rng Hrshberg - Snclar X36DSV - Dstrbuované systémy a výpočty (8) - v1.6 47
Electon on rng Hrshberg - Snclar { ncalzace } Nresp := 0; RespOK := T when decson INITIATE_ELECTION do { rozhodnutí volt } State := CANDIDATE; lmax := 1; whle State=CANDIDATE do Nresp := 0; RespOK := T; slr CANDIDATURE(,0,lmax); // d, 0 vzd., Imax - hloubka wat NResp=2; f not RespOK then State := LOST; lmax := 2*lmax X36DSV - Dstrbuované systémy a výpočty (8) - v1.6 48
Electon on rng Hrshberg - Snclar when receved CANDIDATURE(j,l,lmax) do { příjem zprávy CANDIDATURE } f j< then respond RESPONSE(F, j); f State=NOT_INVOLVED then INITIATE_ELECTION ; f j> then State := LOST; l := l+1; f l<lmax then pass CANDIDATURE(j, l, lmax) else respond RESPONSE(T, j) ; f j= then f State<>ELECTED then State:=ELECTED; Wnner := ; pass ELECTED() X36DSV - Dstrbuované systémy a výpočty (8) - v1.6 49
Electon on rng Hrshberg - Snclar when receved RESPONSE(r,j) do { příjem zprávy RESPONSE } f j= then Nresp := NResp+1; RespOK := RestOK and r else pass RESPONSE(r,j) when receved ELECTED(j) do { příjem zprávy ELECTED } f Wnner<>j then pass ELECTED(j); Wnner := j; State := NOT_INVOLVED X36DSV - Dstrbuované systémy a výpočty (8) - v1.6 50
Electon on rng Peterson/DKR var cp : P nt p ; {Current dentty of p} acnp : P nt udef ; {Id of antclockwse actve neghbor} wnp : P nt udef ; {Id of wnner} statep : (actve, passve, leader, lost) nt actve ;? X36DSV - Dstrbuované systémy a výpočty (8) - v1.6 51
Electon on rng Peterson/DKR f p s ntator then state p := actve else state p := passve ; whle wn p = udef do { dokud neznáme vítěze } f state p = actve then s <one, c p > ; receve <one, q> ; acn p := q ; f acn p = c p then { acn p je mnmum } s <smal, acn p > ; wn p := acn p ; receve <small, q> ; ; else { acn p je současné Id souseda } s<two, acn p > ; receve<two, q> ; f acn p < c p and acn p < q then c p := acn p else state p := passve else { state p = passve } receve <one, q> ; s <one, q> ; receve m ; s m ; { m je <two, q> nebo <smal, q> } f m s a <small, q> message then wn p := q f p = wn p then state p := leader else state p := lost X36DSV - Dstrbuované systémy a výpočty (8) - v1.6 52