Wzajemne wykluczanie i zakleszczenie

Podobne dokumenty
Detekcja zakleszczenia (1)

Elekcja, wzajemne wykluczanie i zakleszczenie

Problem detekcji zakończenia

Przetwarzanie rozproszone

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

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

Koordynacja procesów w środowisku rozproszonym

Stan globalny. Krzysztof Banaś Systemy rozproszone 1

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

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

Konstrukcja spójnego obrazu stanu globalnego

Detekcja zakleszczenia (2)

Algorytm Lamporta. Czy można to ulepszyć?

Przetwarzanie rozproszone

Przetwarzanie rozproszone

Problem detekcji zakończenia (I)

Problem detekcji zakończenia (II)

Przeplot. Synchronizacja procesów. Cel i metody synchronizacji procesów. Wątki współbieżne

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

Synchronizacja procesów i wątków

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

4. Procesy pojęcia podstawowe

Mechanizmy rozgłaszania niezawodnego

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

Konstrukcja spójnego obrazu stanu globalnego - wprowadzenie

Problem zakleszczenia

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

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

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

Monitory. Wady semafora

Wprowadzenie do programowania współbieżnego

4. Procesy pojęcia podstawowe

Programowanie współbieżne i równoległe. dr inż. Marcin Wilczewski 2013

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

Programowanie współbieżne Wykład 10 Synchronizacja dostępu do współdzielonych zasobów. Iwona Kochańska

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

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

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

SYSTEMY OPERACYJNE WYKLAD 6 - procesy

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

POTRZEBY A B C D E P P P P P

Monitory. Jarosław Kuchta

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

Proces rozproszony 1

Systemy operacyjne. Zajęcia 11. Monitory

Wykład 5: Specyfikacja na poziomie systemowym

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

Klasyczne problemy współbieżności. Problem producenta i konsumenta Problem czytelników i pisarzy Problem pięciu filozofów

Współbieżność w środowisku Java

synchronizacji procesów

SYSTEMY CZASU RZECZYWISTEGO - VxWorks

synchronizacji procesów

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

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

Wstęp do programowania 2

Programowanie równoległe i rozproszone. Monitory i zmienne warunku. Krzysztof Banaś Programowanie równoległe i rozproszone 1

Przeciwdziałanie zakleszczeniu. Wykład prowadzą: Jerzy Brzeziński Dariusz Wawrzyniak

Proces z sekcją krytyczną. Synchronizacja procesów. Synchronizacja procesów, cd. Synchronizacja procesów, cd. Synchronizacja procesów, cd

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

4. Procesy pojęcia podstawowe

Ingerencja w kod systemu operacyjnego (przerwania) Programowanie na niskim poziomie (instrukcje specjalne) Trudności implementacyjne (alg.

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

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

Bazy danych w sterowaniu

Sortowanie topologiczne skierowanych grafów acyklicznych

Mechanizmy pracy równoległej. Jarosław Kuchta

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

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

SOP2 - semafory. grudzień

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

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

Struktury danych (I): kolejka, stos itp.

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

1.1 Definicja procesu

Systemy operacyjne III

Proces z sekcją krytyczną. Synchronizacja procesów. Synchronizacja procesów, cd. Synchronizacja procesów, cd. Synchronizacja procesów, cd

Języki i Techniki Programowania II. Wykład 7. Współbieżność 1

Czas w systemach rozproszonych. Krzysztof Banaś Systemy rozproszone 1

Programowanie strukturalne. Opis ogólny programu w Turbo Pascalu

Kolejki FIFO (łącza nazwane)

Algorytmy i Struktury Danych.

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

Informatyka 1. Przetwarzanie tekstów

Tryby komunikacji między procesami w standardzie Message Passing Interface. Piotr Stasiak Krzysztof Materla

Procesy, wątki i zasoby

Konstrukcja spójnego obrazu stanu globalnego algorytmy

Systemy Rozproszone. Zagadnienia do egzaminu.

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

1 Wprowadzenie do algorytmiki

Funkcje w PL/SQL Funkcja to nazwany blok języka PL/SQL. Jest przechowywana w bazie i musi zwracać wynik. Z reguły, funkcji utworzonych w PL/SQL-u

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

Programowanie współbieżne i równoległe

Planowanie przydziału procesora

Synchronizacja procesów

Pomoc dla użytkowników systemu asix 6. Strategia buforowa

dr inż. Jarosław Forenc

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

asix5 Podręcznik użytkownika Strategia buforowa

Planowanie przydziału procesora

Transkrypt:

Wzajemne wykluczanie i zakleszczenie Wzajemne wykluczanie Wzajemne wykluczenie zapewnia procesom ochronę przy dostępie do zasobów, daje im np. gwarancję, że jako jedyne będą mogły z nich korzystać Typy algorytmów: Podejście scentralizowane Algorytmy rozproszone algorytm Lamporta Algorytmy bazujące na żetonie algorytm Suzuki-Kasami

Podejście scentralizowane 1. Jeden proces jest wybierany jako koordynator 2. Proces P, który chce wejść do sekcji krytycznej wysyła wiadomość do koordynatora 3. Jeżeli inny proces nie przebywa aktualnie w danej sekcji krytycznej, odsyła pozwolenie do P 4. Po otrzymaniu pozwolenia P wchodzi do sekcji krytycznej 5. Jeżeli w tym samym czasie do tej samej sekcji krytycznej chce się dostać inny proces, jego prośba jest rozpatrywana później lub otrzymuje wiadomość odmowną Podejście scentralizowane przykład Stan kolejki żądań P 2 P 3 P 2 (3) Żądanie (6 6) Odpowiedź (7) Zwolnij (5) Zwolnij (9) Zwolnij P 1 (2) Odpowiedź P C (8) Odpowiedź P 3 (1) Żądanie (4) Żądanie

Algorytm Lamporta wprowadzenie Wykorzystuje mechanizm synchronizacji zegarów Lamporta Zbiór żądań zbiór procesów, od których wymagane są pozwolenia na wejście do sekcji krytycznej Zbiór żądań w algorytmie Lamporta jest zbiorem wszystkich procesów Każdy proces przechowuje kolejkę żądań sekcji krytycznej uszeregowanych według znaczników czasowych Algorytm Lamporta 1) Żądanie sekcji krytycznej w procesie Pi wysłanie żądania ze znacznikiem czasu (ts(i),i) do wszystkich procesów ze zbioru Ri dodanie żądania do kolejki (również lokalnie) odesłanie odpowiedzi ze znacznikami czasu 2) Wejście do sekcji krytycznej, gdy: odpowiedzi od wszystkich procesów Pj mają znaczniki czasowe (ts(j),i) większe od znacznika żądania żądanie to jest na początku kolejki procesu żądającego 3) Zwalnianie sekcji krytycznej wysłanie wiadomości ZWOLNIJ do innych procesów usunięcie żądania z początku kolejki

Algorytm Lamporta przykład P1 wchodzi do sekcji krytycznej P1 {(2,1)} {(1,2),(2,1)} {(2,1)} P2 {(1,2)} {(1,2),(2,1)} {(2,1)} P3 {(1,2)} {(1,2),(2,1)} {(2,1) P2 wchodzi do sekcji krytycznej P2 wychodzi z sekcji krytycznej Algorytm Suzuki-Kasami wprowadzenie (1) W algorytmie Suzuki-Kasami wykorzystywany jest żeton, o który ubiegają się procesy chcące wejść do sekcji krytycznej Proces, który posiada żeton może wchodzić do sekcji krytycznej do czasu, gdy nie poprosi o niego inny proces Pojawiają się problemy, co zrobić ze: starymi (przedawnionymi) żądaniami starymi (przedawnionymi) żądaniami zaległymi żądaniami

Algorytm Suzuki-Kasami wprowadzenie (2) Problem przedawnionych żądań Żądania mają postać ŻĄDANIE(j, n), gdzie n oznacza, że proces Pj żąda n-tego wykonania sekcji krytycznej RNi[1..N] jest tablicą przechowywaną przez proces Pi; RNi[j] oznacza największą liczbę porządkową otrzymaną w żądaniu od procesu Pj ŻĄDANIE(j, n) otrzymane przez Pi jest przedawnione jeżeli RNi[j]>n Po otrzymaniu przez Pi wiadomości ŻĄDANIE(j, n), RNi[j] = max(rni[j], n) Algorytm Suzuki-Kasami wprowadzenie (3) Problem zaległych żądań Zaległe żądania określane są przy użyciu zawartości żetonu, który składa się z kolejki żetonu Q i tablicy żetonu LN Q kolejką procesów żądających LN jest tablicą o rozmiarze N, a LN[j] oznacza liczbę porządkową ostatnio wykonanego żądania przez proces Pj Po wykonaniu sekcji krytycznej proces Pi aktualizuje tablicę LN: LN[i] := RNi[i] Na podstawie tablicy LN można stwierdzić, czy jakiś proces ma zaległe żądanie

Algorytm Suzuki-Kasami 1) Żądanie sekcji krytycznej wysłanie przez proces żądania o żeton, jeżeli go nie ma odesłanie wolnego żetonu 2) Wejście do sekcji po otrzymaniu żetonu 3) Zwalnianie sekcji krytycznej aktualizacja tablicy oraz kolejki żetonu wysłanie żetonu do następnego procesu w kolejce Algorytm Suzuki-Kasami 1) Żądanie sekcji krytycznej Jeśli proces Pi nie ma żetonu, to inkrementuje wartość RNi[i] i wysyła ł ŻĄDANIE(i, sn), ) gdzie sn=rni[i] Kiedy proces Pj otrzymuje ŻĄDANIE, to uaktualnia RNj[i]=max(RNj[i], sn) Jeżeli Pj ma nieużywany token to wysyła go do procesu Pi, jeśli RNj[i]=LN[i] + 1 2) Wejście do sekcji po otrzymaniu żetonu Proces Pi wchodzi do sekcji krytycznej po otrzymaniu żetonu

Algorytm Suzuki-Kasami 3) Wyjście procesu Pi z sekcji krytycznej LN[i] = RNi[i] Dla każdego procesu Pj, którego identyfikatora nie ma w kolejce żetonu, jego identyfikator dodawany jest do kolejki Q, jeśli spełniony jest warunek RNi[j]=LN[j]+1. Jeżeli kolejka Q nie jest pusta, Pi usuwa identyfikator z początku kolejki i wysyła żeton do procesu oznaczonego tym identyfikatorem. Zakleszczenie - wprowadzenie 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.

Podejście rozproszone - nieformalna definicja problemu 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). Warunki konieczne zakleszczenia 1. Wzajemne wykluczanie 2. Istnienie procesu, który blokuje zasób, a jednocześnie sam czeka na zasób blokowany przez inny proces 3. Brak wywłaszczania zasobów 4. Czekanie cykliczne

Graf przydziału zasobów P1 P2 P4 P3 Stanowisko 1 Stanowisko 2 Strategie postępowania z zakleszczeniami Sposoby postępowania z zakleszczeniami niedopuszczanie do zakleszczeń dopuszczanie do zakleszczeń i późniejsze ich usuwania ignorowanie zakleszczeń Metody niedopuszczania do zakleszczeń zapobieganie zakleszczeniom unikanie zakleszczeń

Zapobieganie zakleszczeniom w systemach rozproszonych Przydział priorytetów dla procesów przy dostępie do zasobów Zastosowanie znaczników czasowych możliwość pozbycia się problemu zagłodzenia procesów o niskich priorytetach. Metody: 1) Czekanie albo śmierć (ang. wait-die), 2) Zranienie albo czekanie (ang. wound-wait) Wadą powyższych algorytmów jest występowanie niepotrzebnych wywłaszczeń Wykrywanie zakleszczeń Do wykrywania zakleszczeń używa się grafu oczekiwania (WFG), który reprezentuje stan przydziału zasobów Jeżeli stan przedstawiany przez graf dotyczy całego systemu rozproszonego mówimy o globalnym grafie oczekiwania Jeżeli stan, który reprezentuje graf dotyczy tylko danego stanowiska, to jest to lokalny graf oczekiwania P1 P3 P2 P4

Procesy aktywne i pasywne 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. Procesy aktywne i pasywne W stanie pasywnym procesu P i (passive i =True) dopuszczalne są natomiast co najwyżej zdarzenia odbioru. Zmiana stanu procesu z pasywnego na aktywny uwarunkowana jest osiągnięciem gotowości przez choćby jedno z dopuszczalnych zdarzeń odbioru, czyli spełnieniem tak zwanego warunku uaktywnienia.

Warunek uaktywnienia Warunek uaktywnienia (ang. activation condition) procesu P i związany jest ze zbiorem warunkującym D i, zbiorem P ia, oraz predykatem activate i (X). Zbiór warunkujący Zbiór warunkujący (ang. dependent set), jest sumą mnogościową zbiorów P S i wszystkich zdarzeń odbioru dopuszczalnych w danej chwili.

Warunek uaktywnienia Warunek uaktywnienia jest wyrażony przez predykat: ready i (X ) (P ia X ) activate i (X ) Gdy proces jest uaktywniany, to wiadomości, których dostarczanie doprowadziło do spełnienia warunku uaktywnienia, są atomowo pobierane z buforów wejściowych i dalej przetwarzane. Definicja problemu Przez deadlock(b) oznaczamy predykat stwierdzający, że w danej chwili τ, niepusty zbiór procesów B jest zbiorem procesów zakleszczonych.

Model AND W modelu AND proces pasywny staje się aktywnym, jeżeli dotarły wiadomości od wszystkich procesów tworzących zbiór warunkujący. Model ten nazywany jest również modelem zasobowym. D i Zakleszczenie w modelu AND deadlock(b) ( B P ) ( B 0) ( P i :: P i B :: ( passive i ( P j :: P j D i B :: ( in-transit i [j] available i [j] ))))

Model OR W modelu OR do uaktywnienia procesu wystarczy jedna wiadomość od któregokolwiek z procesów ze zbioru warunkującego. Model ten nazywany jest również modelem komunikacyjnym. D i Zakleszczenie w modelu OR deadlock(b) ( B P ) ( B 0) ( P i :: P i B :: ( passive i D i B ( P j :: P j D i :: ( in-transit i [j] available i [j] ))))

Przykłady zakleszczeń Wait-For Graph (WFG): N 1 N 2 N 1, N 2, N 3, N 4, N 5 węzły środowiska przetwarzania N 5 P 1, P 2, P 3, P 4, P 5 procesy wykonywane w odpowiednich węzłach P i łuk P i, P j reprezentujący N 4 N 3 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 j Przykład model AND P 1 P 2 Zbiory warunkujące: P 5 D 1 D 3 P 4 P 3 D 1 ={P 4, P 5 }, D 2 ={P 1, P 4 }, D 3 ={P 2 }, D 4 ={P 3 }. D 2 D B D 4 deadlock(b) zachodzi dla B = {P 1, P 2, P 3, P 4 }

Przykład model OR P 1 P 2 Zbiory warunkujące: P 5 D 1 D 3 P 4 P 3 D 1 = {P 4, P 5 }, D 2 ={P 4 }, D 3 ={P 2 }, D 4 ={P 2, P 3 }. D 2 B D 4 deadlock(b) zachodzi dla B = {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 wystąpienia zakleszczenia Czy istnieje w pewnej chwili zbiór B, dla którego predykat deadlock(b) jest prawdziwy? Odpowiedź na to pytanie określa wartość predykatu: de ( B :: deadlock(b)) (5.9) Detekcja wystąpienia zakleszczenia procesu Detekcja zakleszczenia procesu P i sprowadza się do sprawdzenia czy prawdziwy jest predykat: dp i ( B :: deadlock(b)) P i B ) (5.10)

Detekcja wystąpienia zakleszczenia zbioru procesów Detekcja zakleszczenia zbioru procesów polega na znalezienia zbioru B*, dla którego prawdziwy jest następujący predykat: deadlock(b*) ) ((B* = Ø) ( B :: deadlock(b))) (5.11) Detekcja maksymalnego zbioru zakleszczonego 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) (5.13) gdzie maxdead(b*) ( B :: deadlock(b) (B B*))

Model aplikacyjnego przetwarzania rozproszonego D i RELEASE REQUEST GRANT P i CANCEL Alg. Chandy, Misra, Hass dla modelu AND (1) 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

Alg. Chandy, Misra, Hass dla modelu AND (2) 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 Alg. Chandy, Misra, Hass dla modelu AND (3) 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

Alg. Chandy, Misra, Hass dla modelu AND (4) 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 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 dla modelu OR (1) Algorytm detekcji zakleszczenia dla modelu OR opiera się na przetwarzaniu dyfuzyjnym (ang. query computation).

Detekcja zakleszczenia dla modelu OR (2) Twierdzenie 5.2 Jeżeli inicjator Q α rozpoczyna detekcję w chwili, gdy jego proces aplikacyjny P α jest zakleszczony, to Q α stwierdzi zakleszczenie procesu P α wskończonym czasie (algorytm detekcji zakończy się). Detekcja zakleszczenia dla modelu OR (3) 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.

Alg. Chandy, Misra, Hass dla modelu OR (1) type CONTROL extends FRAME is record of initindex : INTEGER queryno : INTEGER end record type QUERY extends CONTROL type REPLY extends CONTROL Alg. Chandy, Misra, Hass dla modelu OR (1) zablokowany proces inicjuje proces wykrywania zakleszczenia wysyłając wiadomość QUERY do wszystkich procesów ze swojego zbioru warunkującego Kiedy aktywny proces otrzymuje wiadomość QUERY lub REPLY unieważnia ją Kiedy zablokowany proces Pk otrzymuje wiadomość QUERY(i,j,k) podejmuje następujące działania:

Alg. Chandy, Misra, Hass dla modelu OR (2) 1. Jeśli to pierwsza wiadomość QUERY otrzymana przez Pk, i zainicjowana przez Pi (engaging query), Pk propaguje QUERY do wszystkich procesów ze swojego zbioru warunkującego, i nadaje lokalnej wartości numk(i) wartość równą liczbie wysłanych wiadomości 2. Jeśli otrzymana wiadomość nie jest pierwsza i Pk był jest zablokowany od otrzymania pierwszej wiadomości QUERY of Pi, to Pk zwraca REPLY. W przeciwnym razie ignoruje otrzymaną wiadomośći Alg. Chandy, Misra, Hass dla modelu OR (3) Proces Pk utrzymuje zmienną logiczną waitk(i) oznaczającą fakt, że jest zablokowany od otrzymania odtatniej t wiadomości ś i QUERY. Kiedy zablokowany proces otrzymuje wiadomość REPLY(i,j,k), zmniejsza wartość numk(i) jeśli zachodzi waitk(i) Proces odsyła odpowiedź na wiadomość QUERY, dopiero po uzyskaniu wiadomości REPLY na każdą wiadomość QUERY, którą on sam wysłał. Inicjator wykrywa zakleszczenie po otrzymaniu wiadomości REPLY na wszystkie wiadomości QUERY, które wysłał.

Alg. Chandy, Misra, Hass dla modelu OR (4) Initiate a diffusion computation for a blocked process Pi: send query(i, i, j) to all processes Pj in the dependent set DSi of Pi; numi(i) = DSi; waiti(i) =true; Alg. Chandy, Misra, Hass dla modelu OR (5) When a blocked process Pk receives a query(i, j, k): if this is the engaging query for process Pi then send query(i, k, m) to all Pm in its dependent set DSk; numk(i) = DSk; waitk(i) =true else if waitk(i) then send a reply(i,k,j) to Pj.

Alg. Chandy, Misra, Hass dla modelu OR (6) When a process Pk receives a reply(i,j,k): if waitk(i) then numk(i) = numk(i) 1; if numk(i) = 0 then if i = k then declare a deadlock else send reply(i, k, m) to the process Pm which sent the engaging query..