Pr-1st-1.1-m05-Slajd48

Z Studia Informatyczne
Wersja z dnia 15:55, 7 wrz 2006 autorstwa Szopen (dyskusja | edycje)
(różn.) ← poprzednia wersja | przejdź do aktualnej wersji (różn.) | następna wersja → (różn.)
Przejdź do nawigacjiPrzejdź do wyszukiwania

Przykład działania algorytmu (1)

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 P1, P2, P3 i P4 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 pSi (ang. process state), jest zmienną reprezentowaną przez tablicę [1..2] liczb naturalnych. Wartość pSi[1] zależy od wartości zmiennej notifiedi, i od liczby odebranych wiadomości typu DONE. Początkowo wartość pSi[1] jest równa 0. Po nadaniu zmiennej notifiedi wartości True przez monitor Qi, pSi[1] przyjmuje wartość 1. Następnie, gdy zakończy się zainicjowana ewentualnie faza potwierdzania i odebrana zostanie ostatnia wiadomość typu DONE, wartość pSi[1] jest zmieniana na 2. Podobnie wartość pSi[2] zależy od zmiennej confirmedi, oraz od liczby odebranych wiadomości typu ACK. Początkowo pSi[2] równa się 0. Po nadaniu zmiennej confirmedi wartości True przez monitor Qi, pSi[2] przyjmuje wartość 1. Następnie, po odebraniu ostatniej wiadomości typu ACK, wartość elementu pSi[2] jest zmieniana na 2. Drugi wektor skojarzony z każdym monitorem Qi, oznaczony przez cSi (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 pSi jest umieszczony wewnątrz wierzchołka, a wektor cSi obok wierzchołka.

W rozważanym przykładzie przyjęto, że Q1=Qα jest jedynym inicjatorem procesu detekcji zakleszczenia. Monitor Q1 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 𝒪𝒰𝒯1, a monitor oczekuje na wiadomości typu DONE potwierdzające wszystkie wiadomości typu NOTIFY. Następnie, monitory Q2, Q3 i Q4 odbierają współbieżnie wiadomości typu NOTIFY i w konsekwencji wywołują procedurę NotifyProc, zmieniając tym samym odpowiednio pSi[1] 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 notifiedi 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 Q2, Q3 i Q4 przyjmują wartość [2,0]. Umożliwia to dalej wysłanie wiadomości typu DONE do inicjatora Q1. Gdy inicjator otrzyma wszystkie oczekiwane wiadomości typu DONE, algorytm kończy się stwierdzając zakleszczenie procesu P1.


<< Poprzedni slajd | Spis treści | Następny slajd >>