Professional Documents
Culture Documents
Rozproszone wzajemne
wykluczanie (CS critical
section)
Algorytm zcentralizowany
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 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 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 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 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).
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 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
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.
Wykrywanie zakleszcze
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.