dr inż. Arkadiusz Danilecki
W oparciu o wykłady prof. J. Brzezińskiego
$\Pi , \Sigma^i, \Sigma(\tau)$ - Proces globalny, $i$-ty stan globalny, stan globalny w chwili $\tau$ czasu globalnego
$P_i$ - $i$-ty proces
$S_i$ - stan $i$-tego procesu
$E_i^k$ - $k$-te zdarzenie w $i$-tym procesie
$C_{i,j} \in \mathcal{C}$ - kanał od $P_i$ do $P_j$
$\mathcal{P}, \mathcal{S}, \mathcal{T}, \mathcal{E}$ - zbiory elementów
Czy przetwarzanie rozproszone osiągnęło swój cel? Czy algorytm się zakończył? Czy jest jeszcze jakiś proces, który kontynuuje pracę?
Jak zawsze w środowisku rozproszonym, problem nie jest trywialny. Odpytanie po kolei procesów "czy już skończyliście pracę" może skutkować błędnym przeświadczeniem, że przetwarzanie się zakończyło.
Jak zawsze w środowisku rozproszonym, problem nie jest trywialny. Odpytanie po kolei procesów "czy już skończyliście pracę" może skutkować błędnym przeświadczeniem, że przetwarzanie się zakończyło.
"Czy zaszło zakończenie" jest predykatem stabilnym, więc jak najbardziej można!
Specjalizowane algorytmy bywają czasami wydatniejsze... A poza tym problem jest ciekawy sam w sobie
Nieformalnie problem detekcji zakończenia przetwarzania rozproszonego polega na sprawdzeniu, czy wszystkie procesy przetwarzania są w stanie pasywnym oraz czy żadna wiadomość będąca w kanale (transmitowana lub dostępna) nie uaktywni któregokolwiek z tych procesów.
Nieformalnie problem detekcji zakończenia przetwarzania rozproszonego polega na sprawdzeniu, czy wszystkie procesy przetwarzania są wstanie pasywnym oraz czy żadna wiadomość będąca w kanale (transmitowana lub dostępna) nie uaktywni któregokolwiek z tych procesów.
Przez proces aktywny rozumiemy tutaj wykonujący kroki algorytmu; w przeciwnym wypadku uznajemy go za pasywny.
Przez zakończenie obliczeń rozproszonych mamy tutaj na myśli osiągnięcie pewnej końcowej konfiguracji, w której nie są już możliwe dalsze kroki algorytmu.
Przez proces aktywny rozumiemy tutaj wykonujący kroki algorytmu; w przeciwnym wypadku uznajemy go za pasywny.
Zakładamy, że proces aktywny może spontanicznie w każdej chwili stać się pasywny. Proces pasywny może być uaktywniony dopiero po otrzymaniu jednej lub więcej wiadomości.
Przetwarzanie rozproszone ${\mathit {\Pi }}$ jest w danej chwili w stanie zakończenia dynamicznego, jeżeli żaden proces składowy przetwarzania rozproszonego nie będzie już nigdy uaktywniony. Stan ten będzie utrzymywany pomimo, że pewne wiadomości są wciąż transmitowane, a pewne wiadomości są już dostępne.
Jest to oczywiście predykat stabilny.
Przetwarzanie rozproszone ${\mathit {\Pi }}$ jest w danej chwili w stanie zakończenia statycznego, jeżeli:
W klasycznej definicji zakończenia przyjmowano, że przetwarzanie rozproszone jest w stanie zakończenia, jeżeli w danej chwili wszystkie procesy są pasywne i wszystkie kanały są puste.
W modelu przetwarzania synchronicznego przyjmuje się, że transmisje są natychmiastowe. Stąd kanały mogą być uznane za puste przez cały czas i problem zakończenia sprowadza się do sprawdzenia czy wszystkie procesy są jednocześnie pasywne.
Stan zakończenia opisuja więc następujący predykat: $$Iterm({\mathcal {P}})\equiv P_{i}::P_{i}\in {\mathcal {P}}::passive_{i}$$
Algorytm Dijkstra, Feijen, van Gasteren.
Procesy łączymy w wirtualny pierścień na potrzeby algorytmu; wiadomości aplikacyjne przesyłane są jednak w topologii grafu w pełni połączonego!
Algorytm Dijkstra, Feijen, van Gasteren.
Procesy łączymy w wirtualny pierścień na potrzeby algorytmu; wiadomości aplikacyjne przesyłane są jednak w topologii grafu w pełni połączonego!
Algorytm Dijkstra, Feijen, van Gasteren.
Dowód poprawności
Postęp: Czy jeżeli zakończenie zaszło, wykryjemy to w skończonym czasie?
Bezpieczeństwo: Czy jeżeli wykryliśmy zakończenie, to zakończenie zaszło?
Dowód poprawności
Postęp: Czy jeżeli zakończenie zaszło, wykryjemy to w skończonym czasie?
Co może powstrzymać algorytm przed zakończeniem:
Bezpieczeństwo: Czy jeżeli wykryliśmy zakończenie, to zakończenie zaszło?
Dowód poprawności
Postęp: Czy jeżeli zakończenie zaszło, wykryjemy to w skończonym czasie?
Bezpieczeństwo: Czy jeżeli wykryliśmy zakończenie, to zakończenie zaszło?
Co może się stać, by po zakończeniu algorytmu jakieś procesy były wciąż aktywne?