You are on page 1of 42

Programowanie rozproszone

Semestr letni 2013/2014


Piotr Kalita
kalita@ii.uj.edu.pl
Wykad 4

Rozproszone wzajemne
wykluczanie (CS critical
section)

Algorytm zcentralizowany

Algorytmy oparte na tokenie


Algorytmy EndlessTraversal i OnDemandTraversal
Algorytm Raymonda (drzewowy)
Algorytm rozproszonej kolejki (drzewowy)
Algorytmy nie oparte na tokenie
Algorytm Lamporta
Algorytm Maekawy

Algorytm zcentralizowany
Jeden wze w sieci jest wybrany na pocztku jako leader,
leader bdzie zajmowa si wydawaniem pozwole.
Wze (powiedzmy x), ktry chce wej do CS wysya danie
request do leadera.
Leader kolejkuje dania lokalnie. Jeli kolejka jest pusta to
leader kolejkuje danie i odsya do x pozwolenie na wejcie
do sekcji krytycznej permission. Jeli jest niepusta to tylko
kolejkuje.
Po otrzymaniu permission od leadera wze wchodzi do CS.
Po zakoczeniu CS wze wysya do leadera informacje o
zakoczeniu CS finished.
Leader po otrzymaniu finished, usuwa pierwszy element kolejki
i (o ile kolejka bdzie niepusta) do kolejnego wysya
permission.

Algorytm zcentralizowany analiza


Algorytm prosty i skuteczny.
Dla wza x mamy
3 * d(x,leader) operacji request, permission, finished
W grafie penym s to tylko 3 operacje.
Naley zwrci uwag, e w algorytmie znajduje si take
routing, to znaczy kady wze musi umie wysa
komunikat do leadera, a leader do kadego innego wza.
Oczywicie algorytm jest niesprawiedliwy ze wzgldu na
obcienie wzw.

Algorytm EndlessTraversal
Token obchodzi ca sie tak jak w algorytmie DFS traversal. Robi to cay czas w kko.
Wze moe wej do sekcji krytycznej tylko gdy ma token.
Wze przesya dalej token dopiero po wyjciu z sekcji
krytycznej.
Warto mie drzewo rozpinajce dla grafu wwczas jedno
obejcie sieci przez token bdzie miao co najwyej 2(n-1)
krokw.
Jeszcze lepiej by byo mie cykl Hamiltona (to cykl majcy n
krawdzi, w ktrym wystpuje kady wierzchoek) wtedy
bdziemy mieli tylko n krokw. Nie kady graf ma c.H.

Algorytm OnDemadTraversal
Algorytm EndlessTraversal dobrze spisuje si, gdy mamy
duo da wejcia do CS (heavy load).
Gdy jest mao da wejcia do CS (lub nie ma ich w
ogle) token wdruje niepotrzebnie.
Rozwizaniem jest OnDemandTraversal.
Zaoymy e mamy topologi piercienia. Odpowiada to
skonstruowanemu cyklowi Hamiltona.
Jeli nie mamy c.H. to mona skorzysta z drzewa kad
krawd zamieniamy na dwie skierowane i duplikujemy
wzy, przy czym wze zduplikowany suy tylko do
forwardowania.

OnDemandTraversal c.d.
Token bdzie wdrowa w jednym kierunku (np. zgodnie z
ruchem wskazwek zegara) a dodatkowy komunikat
request bdzie wdrowa w przeciwnym kierunku (np.
przeciwnie do ruchu wskazwek zegara).
Kada krawd bdzie miaa kolor (biaa lub czarna). Na
pocztku wszystkie krawdzie bd biae a token bdzie w
jednym, wybranym wle.
Jeli krawdzi przejdzie komunikat request, staje si ona
czarna. Jeli przejdzie ni token staje si ona biaa.
Token wdruje tylko czarnymi krawdziami a request tylko
biaymi.

OnDemandTraversal c.d.
Jeli wze chce wej do CS i ma token to wchodzi do
CS.
Jeli wze chce wej do CS i nie ma tokena, a jego lewe
poczenie jest biae, to wysya tym poczeniem request i
zmienia kolor poczenia na czarne. Nastpnie czeka na
token.
Jeli wze otrzyma (prawym poczeniem) request, to:
A) jeli ma token, to go odsya (by moe po zakoczeniu
CS) i zmienia kolor poczenia na biae,
B) jeli nie ma tokena i jego lewe poczenie jest biae,
wysya nim request i zmienia jego kolor na czarne.

OnDemandTraversal c.d.
Po otrzymaniu tokena wze:
A) jeli chce wej do CS to wchodzi,
B) po wyjciu z CS lub jeli wze nie chcia wej do CS, to
jeli prawe poczenie wza jest czarne, wysyany jest nim
token i kolor jest zmieniony na biay.
Uwaga:
jeli wze chce skorzysta z CS kilkakrotnie, to musi po
otrzymaniu tokena wykona wszystkie swoje operacje z CS,
alternatyw jest wysanie kolejnego request dopiero po
otrzymaniu i odesaniu tokena.

Algorytm Raymonda
Wzy s uoone w drzewo. Kada krawd w drzewie jest
skierowana w stron wza, ktry ma token. Wze ten jest
korzeniem drzewa. Kady wze ma unikatowy numer.
Kady wze ma zmienn lokaln holder, ktra jest
krawdzi prowadzc w kierunku tokena.
Kady wze ma take kolejk fifo request_queue, ktra
przechowuje jego dania otrzymania tokena, jak rwnie
dania otrzymania tokena pochodzce od dzieci tego
wza.
Jeli kolejka jest niepusta to znaczy, e wze wysa
komunikat request do wza wskazanego przez krawd
holder.

Algorytm Raymonda struktura

Algorytm Raymonda I
Jeli wze chce wej do CS i ma token, to wchodzi do
CS.
Jeli wze chce wej do CS i nie ma tokena, to:
a) dodaje request k (k to numer naszego wza) do
swojej kolejki request_queue,
b) jeli request_queue bya pusta przed dodaniem, to
wze wysya komunikat request k (gdzie k to numer
wza) do wza wskazanego przez holder.
(jeli request_queue bya niepusta to dodajemy tylko
request k do kolejki i czekamy, bo wze prosi ju
wczeniej o token).

Algorytm Raymonda II
Jeli wze o numerze r na ciece pomidzy wzem
chccym wej do CS a korzeniem dostanie komunikat
request k to postpuje bardzo podobnie do wza chccego
wej do CS.
a) dodaje request k do kolejki request_queue,
b) jeli request_queue bya pusta przed dodaniem request k,
to wze wysya komunikat request r (gdzie r to numer wza)
do wza wskazanego przez holder.
(jeli request_queue bya niepusta to dodajemy tylko request k
do kolejki i czekamy bo wze r wysa ju komunikat request
r).

Algorytm Raymonda III


Jeli wze posiadajcy token i nie znajdujcy si w sekcji
krytycznej otrzyma komunikat request k, to:
a) wze wysya token do wza od ktrego odebra
wiadomo (czyli do wza k),
b) ustawia swoj zmienn holder na wze do ktrego
wysa token.
Wze majcy token i bdcy w sekcji krytycznej po
otrzymaniu request k dodaje ten komunikat do kolejki
request_queue.

Algorytm Raymonda IV
Jeli wze o numerze k otrzyma token, to:
a) jeli na szczycie request_queue jest request k to znaczy,
e wze ten moe wej do strefy krytycznej, wze
wwczas usuwa wpis ze szczytu kolejki i wchodzi do strefy
krytycznej,
b) wze nie chcia wej do strefy krytycznej lub chcia ale
kto inny zakolejkowa si wczeniej (inaczej mwic na
szczycie kolejki jest request r gdzie r jest inne ni k), to:
- usuwamy wpis request r ze szczytu kolejki,
- wysyamy token do wza r (to jeden z ssiadw wza k),
- ustawiamy zmienn holder tak, by wskazywaa na r
- jeli kolejka request_queue jest niepusta to razem z
tokenem wysyamy request k

Algorytm Raymonda V
Wychodzc w wle k ze strefy krytycznej, jeli
kolejka request_queue jest niepusta, to
postpujemy tak samo jak w punkcie b z
poprzedniego slajdu:
A) usuwamy wpis request r ze szczytu kolejki,
B) wysyamy token do wza r,
C) ustawiamy holder na krawd prowadzc do
wza r,
D) jeli kolejka nadal jest niepusta, to wysyamy
request k razem z tokenem.

Przykad
2

Przykad 2
(wspbiene dania)
2

2
2

Algorytm rozproszonej kolejki


(DQ)

Algorytm jest inn wersj algorytmu Raymonda (nie trzeba tu


pamita lokalnych kolejek w wzach ale za to wymagany
jest routing).
Zakadamy, e mamy drzewo rozpinajce.
Wewntrz drzewa pamitana (w rozproszony sposb) bdzie
kolejka wzw. Zakadamy, e kady wze w kolejce moe
pojawi si tylko raz.
Wze posiadajcy token wie kto jest pierwszy w kolejce.
Kady wze znajdujcy si w kolejce wie kto jest za nim w
kolejce. Pamita to w zmiennej next.
Graf jest skierowany a strzaki wskazuj wze z koca kolejki.
Wze w kierunku koca kolejki jest pamitany w zmiennej
last.

Algorytm DQ zaoenia
c.d.
Zakadamy, e umiemy wysa komunikat z dowolnego
wza do dowolnego innego (bdziemy to
wykorzystywa do wysyania komunikatu do wza
next).
Pocztkowo token jest w wle r, i lasty s
uporzdkowane tak, e wskazuj w kierunku r (tylko
last(r)=r), natomiast next(x) = x dla kadego wza x
(aden x nie jest w kolejce).

Algorytm DQ I
Jeli wze x potrzebuje tokena, to wysya komunikat
request x do wza last(x) i ustawia last(x):=x.
Jeli wze y dla ktrego last(y) = w otrzyma komunikat
request x od wza z, to:
- zapamituje w i ustawia last(y):=z (zmienia kierunek
krawdzi)
- jeli w = y (to znaczy, e y jest na kocu kolejki),
ustawiamy next(y):=x (x bdzie za y w kolejce), w tej
sytuacji jeli y ma token i nie jest w CS, to wykonuje
TokenTransfer,
- w przeciwnym razie wysyamy request x do w,

Algorytm DQ - TokenTransfer
Wze posiadajcy token i nie bdcy w CS lub po
wyjciu z CS wykonuje procedur TokenTransfer.

TokenTransfer
jeli next(x) jest rne od x, to wysyamy token do
wza next(x) i ustawiamy next(x) := x.

Algorytm DQ - przykad
Algorytm
dziaa
poprawnie
take przy
wspbienych
daniach

Algorytm Lamporta
Algorytm zakada, e wszystkie dania s uporzdkowane, to znaczy
kademu zdarzeniu wysania komunikatu (zdarzenie to nazwiemy x)
moemy przypisa pewn warto T(x), tak e dla dwch dowolnych
zdarze x,y albo T(x) < T(y), albo T(y) < T(x). T(x) bdziemy nazywa
znacznikiem czasu (timestamp).
W algorytmie Lamporta mamy dwie moliwoci:
A) T(x) = (tx, id), gdzie id to numer wza wysyajcego x, a tx to lokalny
znacznik czasu wysania komunikatu
W tym przypadku wze odbierajcy komunikat powinien ustawi swj czas
lokalny t na t:=max{tx, t}.
B) T(x) = (C(x), id), gdzie C(x) to warto CounterClock dla zdarzenia x.
Najpierw porwnujemy zegary, a potem, jeli jest taka potrzeba, id.

Algorytm Lamporta I
Kady wze i utrzymuje kolejk komunikatw T(x). Jest to kolejka
priorytetowa posortowana wedug T(x). Nazwiemy j, dla wza i,
request_queue(i). W kolejce przechowujemy znaczniki czasu
reprezentujce dania wejcia do CS.
1. Wze i chce wej do CS:
A) Pobiera lokalny znacznik czasu lub C(x) i tworzy T(x)
B) Dodaje T(x) do kolejki request_queue(i).
C) Wysya do wszystkich wzw (broadcastem) komunikat REQUEST T(x).
2. Kiedy wze j odbiera REQUEST T(x) to:
A) dodaje T(x) do kolejki komunikatw request_queue(j),
B) by moe uaktualnia swj czas lokalny,
C) postpuje z czasem do przodu i generuje nowy znacznik czasu T(y),
D) wysya do wza od ktrego byo REQUEST komunikat REPLY T(y)

Algorytm Lamporta II
3. Wejcie do sekcji krytycznej:
Wze i wchodzi do sekcji krytycznej gdy:
A) Jego znacznik czasu reprezentujcy danie
wejcia do sekcji krytycznej jest na szczycie jego
kolejki request_queue(i).
B) Od kadego innego wza odebra komunikat
REPLY ze znacznikiem czasu wikszym ni znacznik
czasu na szczycie kolejki request_queue(i).

Algorytm Lamporta III


4. Wyjcie z sekcji krytycznej w wle i:
A) Wze usuwa znacznik czasu ze szczytu kolejki
request_queue(i).
B) Wze wysya komunikat RELEASE (ze znacznikiem
czasu) do wszystkich pozostaych wzw

5. Po odebraniu RELASE od wza i, wze j usuwa


znacznik czasu reprezentujcy danie wza i z kolejki
request_queue(j).

Algorytm Lamporta warunek


poprawnoci
Algorytm Lamporta bdzie dziaa poprawnie jeli
zachowany zostanie porzdek FIFO komunikatw, to
znaczy jeli wze i wyle do wza j dwa komunikaty,
to wze j odbierze je w tej samej kolejnoci w jakiej
byy wysane.

Algorytm Lamporta dowd


poprawnoci
Pokaemy, e zachodzi wzajemne wykluczanie. Zrobimy to nie wprost:
-> zamy, e wzy i oraz j s rwnoczenie w CS,
-> i musia wysa do j REQUEST T(x) a j do i REQUEST T(y), moemy
przyj, e T(x) < T(y),
-> nie jest moliwe e wysanie REQUEST T(x) nastpio w i po odebraniu
REQUEST T(y) ze wzgldu na mechanizm uaktualniania czasw, zatem i
najpierw wysa do j REQUEST T(x) a potem odebra od j REQUEST T(y)
-> zatem j otrzymuje REPLY po odebraniu REQUEST T(x) ze wzgldu na
kolejno FIFO
-> zatem przed wejciem do strefy krytycznej j powinien dosta T(x), ktre
zajo miejsce przed T(y) w kolejce request_queue(j),
-> zatem w momencie wejcia do strefy krytycznej w wle j T(y) nie
mogo by pierwsze w kolejce SPRZECZNO

Algorytm Lamporta dowd


poprawnoci (ilustracja)
i
REQUEST T(X)

REQUEST T(Y) REPLY

j
Wze j dosta T(x) przed REPLY, wic przed wejciem do CS wstawi
je do swojej kolejki. Wstawi tam rwnie T(y). Poniewa i ani j nie
wyszy jeszcze ze CS zarwno T(x) jak i T(y) s nadal w kolejce. Zatem
w momencie wejcia do CS jego znacznik czasu T(y) nie by na
pocztku kolejki bo T(x) < T(y).

Algorytm Lamporta ilustracja


dziaania

Algorytm Lamporta ilustracja


dziaania II

W kolejkach i w komunikatach REQUEST (8,0) i


REQUEST (12,2).

Algorytm Maekawy
Algorytm Lamporta mona ulepszy. Okazuje si, e
wze i nie musi wysya REQUEST do wszystkich
pozostaych wzw. Moe wysa REQUEST do
pewnego podzbioru wzw, ktry nazwiemy S(i). Taki
podzbir nazwiemy kworum wza i. Rodzin
wszystkich kworw {S(i)}i nazywamy koteri. Koteria
powinna spenia nastpujce warunki (dla szystkich
wzw x i y).

Konstrukcja koterii

Kworum wza jest wiersz i kolumna w ktrej


on si znajduje.
Kade dwa kwora w koterii musz mie
niepuste przecicie.

Algorytm Maekawy - idea


Kady wze kolejkuje dania REQUEST. Jeli wze
pozwoli komu wej do sekcji krytycznej (wyle
REPLY), to zanim pozwoli komu nastpnemu wej do
sekcji krytycznej musi otrzyma od tego ktremu pozwoli
wej wczeniej komunikat RELEASE oznaczajcy, e
wze wyszed z sekcji krytycznej.
Kada para wzw jest chroniona przez wze nalecy
do przecicia dwch kworw.

Algorytm Maekawy I
1. Wze i chccy wej do sekcji krytycznej:
A) wysya komunikat REQUEST i do caego swojego
kworum,
B) jeli wze j odbierze REQUEST i, to odsya do i
REPLY j, o ile tylko nie wysa adnego komunikatu
REPLY po odebraniu ostatniego komunikatu RELEASE,
w przeciwnym razie kolejkuje REQUEST i do dalszego
rozwaania.
2. Wze wchodzi do sekcji krytycznej po odebraniu
REPLY od caego swojego kworum.

Algorytm Maekawy II
3. Jeli wze i wyjdzie z sekcji krytycznej to wysya
RELEASE i do caego swojego kworum.
4. Jeli wze j odbiera RELEASE i, to wysya REPLY j do
wza k takiego, e REQUEST k jest na szczycie kolejki
w wle j. Wpis ten jest usuwany z kolejki. Jeli z kolei
kolejka jest pusta to wze zapamituje, e nie wysa
adnego REPLY po ostatnim otrzymaniu RELEASE.
aden wze nie moe wysa pod rzd dwch REPLY
nie przedzielonych RELEASE.

Wada algorytmu Maekawy


Algorytm si kleszczy
x wysya REQUEST do u i w,
y do v i u,
z do w i v.
u otrzyma najpierw od x (i wyle REPLY)
v otrzyma najpierw od y (i wyle REPLY)
w otrzyma najpierw od z (i wyle REPLY)
Ani u ani w ani w nie wyl nastpnego REPLY.
Ani x ani y ani z nie otrzymaj wszystkich REPLY i nie wejd
do CS.

Wykrywanie zakleszcze

Wait For Graph (WFG)

WFG
Wzy w grafie to wzy w sieci. Krawd skierowana
od wza i do wza j oznacza e wze i czeka na
zdarzenie, ktre zajdzie w wle j. Jeli z wza i
wychodzi wiele strzaek to moemy mie model AND
lub model OR w zalenoci czy wze czeka na
dowolny jeden, czy na wszystkie wzy do ktrych
prowadz strzaki.
Zamy, e mamy model AND.
Wwczas cykl w grafie WFG oznacza deadlock.

WFG wykrywanie
deadlockw.
Inicjator wysya komunikat check do krawdzi
wychodzcych ze i zapamituje, e ju mia check.
Wze po otrzymaniu komunikatu check pierwszy raz
zapamituje e mia ten komunikat i przesya go dalej do
wszystkich krawdzi wychodzcych.
Jeli wze dosta check drugi raz to znaczy, e jest
czci deadlocku i wysya dead do krawdzi
wchodzcych do.
Wze ktry otrzymuje dead wysya dead do wszystkich
krawdzi wchodzcych. Wze, ktry otrzyma dead jest
czci deadlocku.

WFG wykrywanie
deadlockw
Jeeli wze nie ma w ogle wyj to po otrzymaniu
check zapamituje, e nie jest czci deadlocku i
wysya alive do wszystkich krawdzi wchodzcych
do.
Jeli wze otrzyma alive wszystkimi krawdziami
wychodzcymi ze, to znaczy e nie jest czci
deadlocku. Wysya wwczas alive wszystkimi
krawdziami wchodzcymi do.

You might also like