Pr-1st-1.1-m05-Slajd48: Różnice pomiędzy wersjami
Nie podano opisu zmian |
Nie podano opisu zmian |
||
Linia 1: | Linia 1: | ||
==Przykład działania algorytmu (1)== | ==Przykład działania algorytmu (1)== | ||
[[Image: | [[Image:Pr-1st-1.1-m05-Slajd58.png]] | ||
[[Image: | [[Image:Pr-1st-1.1-m05-Slajd69.png]] | ||
[[Image: | [[Image:Pr-1st-1.1-m05-Slajd60.png]] | ||
[[Image: | [[Image:Pr-1st-1.1-m05-Slajd61.png]] | ||
[[Image: | [[Image:Pr-1st-1.1-m05-Slajd62.png|Przykład działania algorytmu (1)]] | ||
Linia 25: | Linia 25: | ||
W rozważanym przykładzie przyjęto, że | W rozważanym przykładzie przyjęto, że | ||
<math>Q_1 = Q_{\alpha} jest jedynym inicjatorem procesu detekcji zakleszczenia. Monitor | <math>Q_1 = Q_{\alpha}</math> jest jedynym inicjatorem procesu detekcji zakleszczenia. Monitor | ||
<math>Q_1</math> wywołuje procedurę NotifyProc i w konsekwencji jego stan zmienia się, wiadomości typu NOTIFY zostają wysłane (co zaznaczono białym kółkiem i strzałką) do monitorów wszystkich procesów tworzących zbiór warunkujący <math>\mathcal{OUT}_1</math>, a monitor oczekuje na wiadomości typu DONE potwierdzające wszystkie wiadomości typu NOTIFY. Następnie, monitory | <math>Q_1</math> wywołuje procedurę NotifyProc i w konsekwencji jego stan zmienia się, wiadomości typu NOTIFY zostają wysłane (co zaznaczono białym kółkiem i strzałką) do monitorów wszystkich procesów tworzących zbiór warunkujący <math>\mathcal{OUT}_1</math>, a monitor oczekuje na wiadomości typu DONE potwierdzające wszystkie wiadomości typu NOTIFY. Następnie, monitory | ||
<math>Q_2</math>, <math>Q_3</math> i <math>Q_4</math> | <math>Q_2</math>, <math>Q_3</math> i <math>Q_4</math> | ||
Linia 33: | Linia 33: | ||
[[ | [[Pr-1st-1.1-m05-Slajd47 | << Poprzedni slajd]] | [[Pr-1st-1.1-m05-toc|Spis treści ]] | [[Pr-1st-1.1-m05-Slajd49 | Następny slajd >>]] |
Aktualna wersja na dzień 15:55, 7 wrz 2006
Przykład działania algorytmu (1)
Dla ilustracji działania algorytmu rozważmy przykładowy stan globalny reprezentowany przez graf oczekiwanych potwierdzeń przedstawiony na slajdzie. Procesy
, , i
należące do zbioru
są pasywne i oczekują na wiadomości od innych procesów ze zbioru , zgodnie z grafem WFG. Dla prostoty prezentacji skojarzymy z każdym wierzchołkiem grafu WFG (procesem) dwa wektory reprezentujące stan algorytmu w danym wierzchołku. Pierwszy wektor, oznaczony przez
(ang. process state), jest zmienną reprezentowaną przez tablicę [1..2] liczb naturalnych. Wartość zależy od wartości zmiennej
, i od liczby odebranych wiadomości typu DONE. Początkowo wartość jest równa 0. Po nadaniu zmiennej
wartości True przez monitor
, przyjmuje wartość 1. Następnie, gdy zakończy się zainicjowana ewentualnie faza potwierdzania i odebrana zostanie ostatnia wiadomość typu DONE, wartość
jest zmieniana na 2. Podobnie wartość
zależy od zmiennej , oraz od liczby odebranych wiadomości typu ACK. Początkowo
równa się 0. Po nadaniu zmiennej wartości True przez monitor ,
przyjmuje wartość 1. Następnie, po odebraniu ostatniej wiadomości typu ACK, wartość elementu
jest zmieniana na 2. Drugi wektor skojarzony z każdym monitorem , oznaczony przez
(ang. communication state), jest zmienną reprezentowaną przez tablicę [1..3], której elementy odpowiadają licznikom odebranych wiadomości typu CONFIRM, ACK i DONE. Początkowo, wszystkie te liczniki mają wartość 0. Są one stosownie zwiększane w wyniku odebrania wiadomości typu CONFIRM, ACK i DONE. Na rysunku wektor jest umieszczony wewnątrz wierzchołka, a wektor
obok wierzchołka.
W rozważanym przykładzie przyjęto, że jest jedynym inicjatorem procesu detekcji zakleszczenia. Monitor wywołuje procedurę NotifyProc i w konsekwencji jego stan zmienia się, wiadomości typu NOTIFY zostają wysłane (co zaznaczono białym kółkiem i strzałką) do monitorów wszystkich procesów tworzących zbiór warunkujący , a monitor oczekuje na wiadomości typu DONE potwierdzające wszystkie wiadomości typu NOTIFY. Następnie, monitory , i odbierają współbieżnie wiadomości typu NOTIFY i w konsekwencji wywołują procedurę NotifyProc, zmieniając tym samym odpowiednio i wysyłając wiadomości typu NOTIFY do monitorów wszystkich procesów tworzących ich zbiory warunkujące. W następnym kroku, wiadomości typu NOTIFY docierają do monitorów, których flagi są już zapalone (True). Dlatego, monitory te wysyłają w odpowiedzi wiadomości typu DONE (zaznaczone czarnym kółkiem). W rezultacie, wektory stanów monitorów , i przyjmują wartość [2,0]. Umożliwia to dalej wysłanie wiadomości typu DONE do inicjatora . Gdy inicjator otrzyma wszystkie oczekiwane wiadomości typu DONE, algorytm kończy się stwierdzając zakleszczenie procesu .