Detekcja zakleszczenia (1)



Podobne dokumenty
Wzajemne wykluczanie i zakleszczenie

Problem detekcji zakończenia

Detekcja zakleszczenia (2)

Przetwarzanie rozproszone

Czas wirtualny, złożoność algorytmów

Mechanizmy rozgłaszania niezawodnego

Czas wirtualny, złożoność algorytmów

Konstrukcja spójnego obrazu stanu globalnego

Problem detekcji zakończenia (I)

Problem detekcji zakończenia (I)

Problem detekcji zakończenia (II)

PROJEKT WSPÓŁFINANSOWANY ZE ŚRODKÓW UNII EUROPEJSKIEJ W RAMACH EUROPEJSKIEGO FUNDUSZU SPOŁECZNEGO OPIS PRZEDMIOTU

Przetwarzanie rozproszone

Przetwarzanie rozproszone

Porządek dostępu do zasobu: procesory obszary pamięci cykle procesora pliki urządzenia we/wy

procesów Współbieżność i synchronizacja procesów Wykład prowadzą: Jerzy Brzeziński Dariusz Wawrzyniak

Proces rozproszony. Plan wykładu. Wykład prowadzą: Jerzy Brzeziński Jacek Kobusiński. Proces rozproszony. Zbiór stanów globalnych (1)

Proces rozproszony 1

Treść zadań 1 8 odnosi się do poniższego diagramu przestrzenno-czasowego.

Wstęp do programowania. Drzewa. Piotr Chrząstowski-Wachtel

Sortowanie topologiczne skierowanych grafów acyklicznych

Problem zakleszczenia

Algorytmy równoległe: ocena efektywności prostych algorytmów dla systemów wielokomputerowych

Informatyka 1. Przetwarzanie tekstów

Wprowadzenie do programowania współbieżnego

Algorytmy równoległe. Rafał Walkowiak Politechnika Poznańska Studia inżynierskie Informatyka 2010

w PL/SQL bloki nazwane to: funkcje, procedury, pakiety, wyzwalacze

Konstrukcja spójnego obrazu stanu globalnego - wprowadzenie

POTRZEBY A B C D E P P P P P

Równoległy algorytm wyznaczania bloków dla cyklicznego problemu przepływowego z przezbrojeniami

Losowość w rozproszonym modelu

Podstawy programowania 2. Temat: Drzewa binarne. Przygotował: mgr inż. Tomasz Michno

J. Ułasiewicz Programowanie aplikacji współbieżnych 1

Wstęp do programowania. Różne różności

Sztuczna Inteligencja i Systemy Doradcze

Wykład 5: Specyfikacja na poziomie systemowym

Wstęp do programowania. Listy. Piotr Chrząstowski-Wachtel

Mechanizmy komunikacji. spotkania symetryczne (język CSP) spotkania asymetryczne (Ada) przestrzenie krotek (Linda) potoki, komunikaty i kanały (Unix)

Algorytmy i Struktury Danych.

Zakleszczenie. Problem i przeciwdziałanie. Systemy operacyjne Wykład 8 1

Wstęp do programowania 2

Podstawowe własności grafów. Wykład 3. Własności grafów

Algorytmy zarządzania współbieżnym wykonywaniem transakcji część I

Semafory. // G - globalna dla wszystkich. // Wada - aktywne oczekiwanie Test_and_Set(Li); exit when Li = 0; end loop sekcja_krytyczna(i); G := 0;

Algorytmy równoległe: ocena efektywności prostych algorytmów dla systemów wielokomputerowych

Rozproszone systemy operacyjne

PODSTAWY BAZ DANYCH 13. PL/SQL

Programowanie strukturalne. Opis ogólny programu w Turbo Pascalu

Przeszukiwanie z nawrotami. Wykład 8. Przeszukiwanie z nawrotami. J. Cichoń, P. Kobylański Wstęp do Informatyki i Programowania 238 / 279

Algorytmy równoległe: prezentacja i ocena efektywności prostych algorytmów dla systemów równoległych

Algorytmy i struktury danych. Drzewa: BST, kopce. Letnie Warsztaty Matematyczno-Informatyczne

Algorytm Lamporta. Czy można to ulepszyć?

Monitory. Wady semafora

Stan globalny. Krzysztof Banaś Systemy rozproszone 1

synchronizacji procesów

Delphi 7 + Indy 10 Przykłady prostych aplikacji sieciowych

Wykład 8. Drzewo rozpinające (minimum spanning tree)

Wykład 15. Literatura. Kompilatory. Elementarne różnice. Preprocesor. Słowa kluczowe

Grafem nazywamy strukturę G = (V, E): V zbiór węzłów lub wierzchołków, Grafy dzielimy na grafy skierowane i nieskierowane:

Konstrukcja spójnego obrazu stanu globalnego algorytmy

Konstrukcja spójnego obrazu stanu globalnego algorytmy

Programowanie współbieżne Wykład 5. Rafał Skinderowicz

Konstrukcja spójnego obrazu stanu globalnego algorytmy

PoniŜej znajdują się pytania z egzaminów zawodowych teoretycznych. Jest to materiał poglądowy.

Wstęp do programowania. Drzewa podstawowe techniki. Piotr Chrząstowski-Wachtel

Cheatsheet PL/SQL Andrzej Klusiewicz 1/9

Wykład 5. Synchronizacja (część II) Wojciech Kwedlo, Wykład z Systemów Operacyjnych -1- Wydział Informatyki PB

Podstawowe algorytmy i ich implementacje w C. Wykład 9

Semafor nie jest mechanizmem strukturalnym. Aplikacje pisane z użyciem semaforów są podatne na błędy. Np. brak operacji sem_post blokuje aplikację.

Semafory. - aktywne oczekiwanie =GRGDWNRZ\PZVSDUFLHPVSU]WRZ\P 6SHFMDOQDLQVWUXNFMDPDV]\QRZDUHDOL]XMFDDWRPRZ\]DSLVL odczyt, np.

Algorytmy i struktury danych

Zarządzanie bazą danych. Bazy Danych i Systemy informacyjne Wykład 4. Piotr Syga

Synchronizacja procesów i wątków

Informatyka 1. Wyrażenia i instrukcje, złożoność obliczeniowa

UNIKANIE IMPASÓW W SYSTEMACH PROCESÓW WSPÓŁBIEŻNYCH

Procesy stochastyczne

J. Ułasiewicz Programowanie aplikacji współbieżnych 1

Krzysztof Jakubczyk. Zadanie 2

Systemy operacyjne. wykład 11- Zakleszczenia. dr Marcin Ziółkowski. Instytut Matematyki i Informatyki Akademia im. Jana Długosza w Częstochowie

INSTRUKCJA PUSTA. Nie składa się z żadnych znaków i symboli, niczego nie robi. for i := 1 to 10 do {tu nic nie ma};

Problem zakleszczenia. Wykład prowadzą: Jerzy Brzeziński Dariusz Wawrzyniak

synchronizacji procesów

Realizacja algorytmu wyznaczania wyrazów ciągu w języku VHDL z zastosowaniem podziału projektu na moduły: FSM i Data Path.

OPERACJE NA PLIKACH. Podstawowe pojęcia:

Algorytmy i struktury danych. wykład 5

Porządek symetryczny: right(x)

Sortowanie. Kolejki priorytetowe i algorytm Heapsort Dynamiczny problem sortowania:

5. Model komunikujących się procesów, komunikaty

prowadzący dr ADRIAN HORZYK /~horzyk tel.: Konsultacje paw. D-13/325

1 Wprowadzenie do algorytmiki

Wprowadzenie do Sztucznej Inteligencji

Wstęp do programowania

Indukowane Reguły Decyzyjne I. Wykład 3

Lock Manager Deadlock Źródła Jak starczy czasu. Dreadlocks. Konrad Błachnio MIMUW 19 maja 2010

Struktury danych (I): kolejka, stos itp.

Wprowadzenie do Sztucznej Inteligencji

Wprowadzenie do Sztucznej Inteligencji

Modelowanie złożonych układów cyfrowych (1)

Transkrypt:

Detekcja zakleszczenia (1) Wykład prowadzą: Jerzy Brzeziński Jacek Kobusiński Plan wykładu Procesy aktywne i pasywne Definicja zakleszczenia Problem detekcji wystąpienia zakleszczenia Detekcja zakleszczenia dla modelu OR Detekcja zakleszczenia dla modelu AND Detekcja zakleszczenia w środowisku synchronicznym dla modelu k spośród r Detekcja zakleszczenia 1 (2) Wprowadzenie Nieformalna definicja problemu Procesy tworzące przetwarzanie rozproszone komunikują się ze sobą za pomocą mechanizmu wymiany wiadomości, realizując wspólny cel przetwarzania. Jedne procesy wysyłają komunikaty zawierające żądania przydziału pewnych zasobów, inne w odpowiedzi przesyłają ewentualnie komunikaty potwierdzające przydział żądanych zasobów. W przetwarzaniu rozproszonym może w ogólności wystąpić sytuacja, w której wszystkie procesy pewnego niepustego zbioru procesów oczekują na wiadomości (potwierdzające na przykład przydział zasobów) od innych procesów tego właśnie zbioru. Stan taki nazywany jest zakleszczeniem rozproszonym (ang. distributed deadlock). Detekcja zakleszczenia 1 (3) Detekcja zakleszczenia 1 (4)

Procesy aktywne i pasywne Warunek uaktywnienia W każdej chwili proces może być w jednym z dwóch stanów: aktywnym albo pasywnym. Proces aktywny może realizować przetwarzanie wykonując operacje odpowiadające zajściu zdarzeń wewnętrznych i komunikacyjnych. Warunek uaktywnienia jest wyrażony przez predykat: ready i (X ) (P ia X) activate i (X ) (5.1) Detekcja zakleszczenia 1 (5) Detekcja zakleszczenia 1 (6) Definicja problemu Zakleszczenie w modelu jednostkowym Przez deadlock(b) oznaczamy predykat stwierdzający, że w danej chwili τ, niepusty zbiór procesów B jest zbiorem procesów zakleszczonych. deadlock(b) (5.2) ( P i :: P i B:: ( passive i D i = 1 ( P j :: P j D i B:: ( in-transit i [j] available i [j] )))) Detekcja zakleszczenia 1 (7) Detekcja zakleszczenia 1 (8)

Zakleszczenie w modelu AND Zakleszczenie w modelu OR deadlock(b) (5.3) ( P i :: P i B:: ( passive i ( P j :: P j D i B:: ( in-transit i [j] available i [j] )))) deadlock(b) (5.4) ( P i :: P i B:: ( passive i D i B ( P j :: P j D i :: ( in-transit i [j] available i [j] )))) Detekcja zakleszczenia 1 (9) Detekcja zakleszczenia 1 (10) Zakleszczenie w podstawowym modelu k spośród r Zakleszczenie w modelu OR AND deadlock(b) (5.5) ( P i :: P i B:: ( passive i ( B i ::B i D i B:: ( D i \B i < k i ( P j :: P j B i :: ( in-transit i [j] available i [j] )))))) deadlock(b) (5.6) ( P i :: P i B:: ( passive i ( u :: 1 u q i :: ( P j :: P j D iu B:: ( in-transit i [j] available i [j] ))))) Detekcja zakleszczenia 1 (11) Detekcja zakleszczenia 1 (12)

Zakleszczenie w modelu dysjunkcyjnym k spośród r Zakleszczenie w modelu predykatowym deadlock(b) (5.7) ( P i :: P i B:: ( passive i ( u :: 1 u q i :: ( B iu ::B iu D iu B:: ( D iu \B iu < k iu ( P j :: P j B iu :: ( in-transit i [j] available i [j] ))))))) deadlock(b) (5.8) ( P i :: P i B:: ( passive i activate i (AV i IT i (P \B)))) Detekcja zakleszczenia 1 (13) Detekcja zakleszczenia 1 (14) Przykłady zakleszczeń Przykład model jednostkowy Wait-For Graph (WFG): N 5 N 1 N 2 N 4 N 3 P i N 1, N 2, N 3, N 4, N 5 węzły środowiska przetwarzania P 1, P 2, P 3, P 4, P 5 procesy wykonywane w odpowiednich węzłach P j łuk P i, P j reprezentujący fakt, że proces P i, oczekuje na wiadomość od procesu P j Każdy proces w grafie z łukiem wychodzącym jest pasywny. Procesy bez łuków wychodzących są aktywne. Zakładamy, że wszystkie kanały są puste. P 5 P 1 P 2 D 21 deadlock(b) zachodzi dlab= {P 1, P 2, P 3, P 4 } B D 3 P 4 P 3 D 4 Zbiory warunkujące: D 1 = {P 4 }, D 2 = {P 4 }, D 3 = {P 2 }, D 4 = {P 3 }. Detekcja zakleszczenia 1 (15) Detekcja zakleszczenia 1 (16)

Przykład model AND Przykład model OR P 5 D 1 P 1 P 2 D 2 deadlock(b) zachodzi dlab= {P 1, P 2, P 3, P 4 } B D 3 P 4 P 3 D 4 Zbiory warunkujące: D 1 = {P 4, P 5 }, D 2 = {P 1, P 4 }, D 3 = {P 2 }, D 4 = {P 3 }. P 5 D 1 P 1 P 2 D 2 deadlock(b) zachodzi dlab= {P 2, P 3, P 4 } B D 3 P 4 P 3 D 4 Zbiory warunkujące: D 1 = {P 4, P 5 }, D 2 = {P 4 }, D 3 = {P 2 }, D 4 = {P 2, P 3 }. Detekcja zakleszczenia 1 (17) Detekcja zakleszczenia 1 (18) P 5 Przykład model k spośród r P 1 P 2 Modeleżądań: dla P 1 : 1 spośród 3 dla P 2 : 1 spośród 1 dla P 3 : 2 spośród 2 dla P 4 : 2 spośród 3 P Zbiory warunkujące: 4 P 3 D 4 D 1 = {P 2, P 4, P 5 }, D 31 B D2 D 2 = {P 3 }, D 3 = {P 2, P 4 }, D 4 = {P 1, P 2, P 3 }. deadlock(b) zachodzi dlab= {P 2, P 3, P 4 } Klasyfikacja problemów detekcji zakleszczenia problem detekcji wystąpienia zakleszczenia problem detekcji zakleszczenia procesu problem detekcji zakleszczenia zbioru procesów problem detekcji maksymalnego zbioru procesów zakleszczonych Detekcja zakleszczenia 1 (19) Detekcja zakleszczenia 1 (20)

Detekcja wystąpienia zakleszczenia Detekcja wystąpienia zakleszczenia procesu Czy istnieje w pewnej chwili zbiór B, dla którego predykat deadlock(b) jest prawdziwy? Detekcja zakleszczenia procesu P i sprowadza się do sprawdzenia czy prawdziwy jest predykat: Odpowiedź na to pytanie określa wartość predykatu: dp i ( B :: deadlock(b) ) P i B) (5.10) de ( B :: deadlock(b)) (5.9) Detekcja zakleszczenia 1 (21) Detekcja zakleszczenia 1 (22) Detekcja wystąpienia zakleszczenia zbioru procesów Detekcja maksymalnego zbioru zakleszczonego Detekcja zakleszczenia zbioru procesów polega na znalezienia zbiorub*, dla którego prawdziwy jest następujący predykat: deadlock(b*) ((B* = Ø) ( B :: deadlock(b))) (5.11) Detekcja maksymalnego zbioru zakleszczonego, sprowadza się do znalezienia takiego zbioru B*, dla którego spełniony jest warunek: (deadlock(b*) B* = Ø) (maxdead(b*)), (5.12) gdzie maxdead(b*) ( B :: deadlock(b) (B B*)) (5.13) Detekcja zakleszczenia 1 (23) Detekcja zakleszczenia 1 (24)

Model aplikacyjnego przetwarzania rozproszonego Alg. Chandy, Misra, Hass dla modelu AND (1) D i P i RELEASE REQUEST GRANT CANCEL type PROBE extends FRAME is record of initindex : INTEGER end record probeout : PROBE granted i : array [1..n] of BOOLEAN := False D i : set of PROCESS_ID recvprobe i : array [1..n] of BOOLEAN := False α i : INTEGER k : INTEGER deadlockdetected i : BOOLEAN := False Detekcja zakleszczenia 1 (25) Detekcja zakleszczenia 1 (26) Alg. Chandy, Misra, Hass dla modelu AND (2) Alg. Chandy, Misra, Hass dla modelu AND (3) 1. when e_start(q α, DeadlockDetection) do 2. if passive α 3. then 4. for all Q k :: P k D α do 5. probeout.initindex := α 6. send(q α, Q k, probeout) 7. end for 8. end if 9. end when 10. when e_activate(p i ) do 11. for all k {1, 2,..., n} do 12. recvprobe i [k]:= False 13. end for 14. end when Detekcja zakleszczenia 1 (27) Detekcja zakleszczenia 1 (28)

Alg. Chandy, Misra, Hass dla modelu AND (4) Detekcja zakleszczenia dla modelu OR (1) 15. when e_receive(q j, Q i, probein: PROBE) do 16. α i := probein.initindex 17. if passive i ( recvprobe i [α i ]) ( granted i [j]) 18. then 19. recvprobe i [α i ]:= True 20. if α i = i 21. then 22. deadlockdetected i := True 23. decide(deadlockdetected i ) 24. else Algorytm detekcji zakleszczenia dla modelu OR opiera się na przetwarzaniu dyfuzyjnym (ang. query computation). 25. probeout.initindex:=α i 26. for all Q k :: P k D i do 27. send(q i, Q k, probeout) 28. end for 29. end if 30. end if 31. end when Detekcja zakleszczenia 1 (29) Detekcja zakleszczenia 1 (30) Detekcja zakleszczenia dla modelu OR (2) Detekcja zakleszczenia dla modelu OR (3) Twierdzenie 5.2 Jeżeli inicjator Q α rozpoczyna detekcję w chwili, gdy jego proces aplikacyjny P α jest zakleszczony, to Q α stwierdzi zakleszczenie procesu P α w skończonym czasie (algorytm detekcji zakończy się). Twierdzenie 5.2 Jeżeli inicjator Q α deklaruje, że jego proces aplikacyjny P α jest zakleszczony, to P α należy do pewnego zbioru procesów zakleszczonych w chwili zakończenia algorytmu. Detekcja zakleszczenia 1 (31) Detekcja zakleszczenia 1 (32)

Alg. Chandy, Misra, Hass dla modelu OR (1) Alg. Chandy, Misra, Hass dla modelu OR (2) type CONTROL extends FRAME is record of initindex : INTEGER queryno : INTEGER end record type QUERY extends CONTROL type REPLY extends CONTROL queryout : QUERY replyout : REPLY D i : set of PROCESS_ID maxqueryno i : array [1..n] of INTEGER := 0 engager i : array [1..n] of INTEGER := 0 QRBalance i : array [1..n] of INTEGER := 0 contpassive i : array [1..n] of BOOLEAN := False queryno i : INTEGER α i : INTEGER deadlockdetected i : BOOLEAN := False Detekcja zakleszczenia 1 (33) Detekcja zakleszczenia 1 (34) Alg. Chandy, Misra, Hass dla modelu OR (3) Alg. Chandy, Misra, Hass dla modelu OR (4) 1. when e_start(q α, DeadlockDetection) do 2. if passive α 3. then 4. maxqueryno α [α] := maxqueryno α [α] + 1 5. contpassive α [α] := True 6. queryout.queryno := maxqueryno α [α] 7. queryout.initindex := α 8. for all Q k :: P k D α do 9. send(q α, Q k, queryout) 10. end for 11. QRBalance α [α] := D α 12. end if 13. end when 14. when e_receive(q j, Q i, queryin : QUERY) do 15. if passive i 16. then 17. queryno i := queryin.queryno 18. α i := queryin.initindex 19. if queryno i > maxqueryno i [α i ] 20. then 21. maxqueryno i [α i ] := queryno i 22. engager i [α i ] := j 23. contpassive i [α i ] := True 24. queryout.queryno := queryno i 25. queryout.initindex := α i 26. for all Q k :: P k D i do 27. send(q i, Q k, queryout) 28. end for 29. QRBalance i [α i ] := D i Detekcja zakleszczenia 1 (35) Detekcja zakleszczenia 1 (36)

Alg. Chandy, Misra, Hass dla modelu OR (5) Alg. Chandy, Misra, Hass dla modelu OR (6) 30. else 31. if contpassive i [α i ] queryno i = maxqueryno i [α i ] 32. then 33. replyout.queryno := queryno i 34. replyout.initindex := α i 35. send(q i, Q j, replyout) 36. end if 37. end if 38. end if 39. end when 40. when e_receive(q j, Q i, replyin : REPLY) do 41. if passive i 42. then 43. queryno i := queryin.queryno 44. α i := queryin.initindex 45. if maxqueryno i [α i ]=queryno i contpassive i [α i ] 46. then 47. QRBalance i [α i ]:= QRBalance i [α i ] - 1 48. if QRBalance i [α i ] = 0 49. then 50. if α i =i 51. then 52. deadlockdetected i := True 53. decide(deadlockdetected i ) Detekcja zakleszczenia 1 (37) Detekcja zakleszczenia 1 (38) Alg. Chandy, Misra, Hass dla modelu OR (7) Alg. Chandy, Misra, Hass dla modelu OR (8) 54. else 55. k:= engager i [α i ] 56. replyout.queryno:= queryno i 57. replyout.initindex:= α i 58. send(q i, Q k, replyout) 59. end if 60. end if 61. end if 62. end if 63. end when 64. when e_activate(p i ) do 65. for all k {1, 2,..., n} do 66. contpassive i [k] := False 67. end for 68. end when Detekcja zakleszczenia 1 (39) Detekcja zakleszczenia 1 (40)

Alg. Bracha, Toueg a (1) Alg. Bracha, Toueg a (2) type NOTIFY extends SIGNAL type DONE extends SIGNAL type CONFIRM extends SIGNAL type ACK extends SIGNAL notifyout doneout, donein confirmout ackout, ackin A : NOTIFY : DONE : CONFIRM : ACK : set of record of predid : PROCESS_ID succid : PROCESS_ID end record := { P i,p j : P j D i } OUT i : set of PROCESS_ID := {P j : P i,p j A} JN i : set of PROCESS_ID := {P j : P i,p j A} confirmno i : INTEGER := 0 notified i : BOOLEAN := False confirmed i : BOOLEAN := False expectno i : INTEGER deadlockdetected i : BOOLEAN := False Detekcja zakleszczenia 1 (41) Detekcja zakleszczenia 1 (42) Alg. Bracha, Toueg a (3) Alg. Bracha, Toueg a (4) 1. procedure NOTIFYPROC() do 2. notified i := True 3. for all Q k OUT i do 4. send( Q i, Q k, notifyout) 5. end for 6. if expectno i = 0 7. then 8. CONFIRMPROC() 9. end if 10. for all Q k OUT i do 11. receive(q k, Q i, donein) 12. end for 13. end procedure 14. procedure CONFIRMPROC() do 15. confirmed i := True 16. for all Q k IN i do 17. send(q i, Q k, confirmout) 18. end for 19. for all Q k IN i do 20. receive(q k, Q i, ackin) 21. end for 22. end procedure Detekcja zakleszczenia 1 (43) Detekcja zakleszczenia 1 (44)

Alg. Bracha, Toueg a (5) Alg. Bracha, Toueg a (6) 23. when e_start(q α, DeadlockDetection) do 24. NOTIFYPROC() 25. if confirmno α < expectno α 26. then 27. deadlockdetected α := True 28. decide(deadlockdetected α ) 29. end if 30. end when 31. when e_receive(q j, Q i, confirmin: CONFIRM) do 32. confirmno i := confirmno i + 1 33. if confirmed i (confirmno i expectno i ) 34. then 35. CONFIRMPROC() 36. end if 37. send(q i, Q j, ackout) 38. end when Detekcja zakleszczenia 1 (45) Detekcja zakleszczenia 1 (46) Alg. Bracha, Toueg a (7) Przykład działania algorytmu (1) wiadomość typu NOTIFY wiadomość typu DONE 39. when e_receive(q j, Q i, notifyin: NOTIFY) do 40. if notified i 41. then 42. NOTIFYPROC() 43. end if 44. send(q i,q j,doneout) 45. end when,1,0 P 4 2,0 1,0 2,0 1,0 P 3,1,0 1,0 2,0,0,3 2,0 1,0,2,0 P 1 - inicjator P 2 Detekcja zakleszczenia 1 (47) Detekcja zakleszczenia 1 (48)

P 4 2,2 1,1 Przykład działania algorytmu (2) 0,3,0,0 0,2,0 wiadomość typu NOTIFY wiadomość typu DONE wiadomość typu CONFIRM wiadomość typu ACK Złożoność czasowa algorytmu detekcji zakleszczenia w środowisku synchronicznym dla modelu k spośród r (1) Graf niezorientowany odpowiadający grafowi WFG scharakteryzowany jest przez: średnicę grafu d, najdłuższą ścieżkę w grafie l. 3,0,2,0 1, 2, 3,0,3 1,2 1,0 2,2 2,2 1,0 1,1 2,1 P 3 1,2,1,0 1, 1,0,1 1,1,1 2,1,2,0 1, 2,0,2 2,2 1,0 2,1 P 1 - inicjator P 2 Złożoność całego algorytmu to: złożoność fazy potwierdzania złożoność powiadomienia inicjatora fazy potwierdzania, złożoność odpowiadającą przesłaniu wiadomości typu DONE od inicjatora fazy potwierdzania do inicjatora detekcji. Detekcja zakleszczenia 1 (49) Detekcja zakleszczenia 1 (50) Złożoność czasowa algorytmu detekcji zakleszczenia w środowisku synchronicznym dla modelu k spośród r (2) przesłanie wiadomości typu CONFIRM może zabrać l jednostek czasu transmisja wiadomości typu ACK również zabiera w najgorszym wypadku l jednostek czasu przesłanie wiadomości typu NOTIFY (równolegle do monitorów wszystkich procesów tworzących zbiór OUT i ) wymaga co najwyżej d kroków. przesłanie wiadomości typu DONE po zakończeniu fazy potwierdzania wymaga co najwyżej d kroków. W efekcie złożoność czasowa algorytmu wynosi 2d + 2l. Detekcja zakleszczenia 1 (51)