πŸ“Ž

Deadlock Detection Algorithm - Beispiel

Algorithmus

Markiert deadlock-freie Prozesse.

Initialisierung

setze alle Prozesse auf unmarkiert

markiere alle Prozesse PkP_kο»Ώ mit βˆ€i:Aki=0\forall i: A_{ki} = 0ο»Ώ- this line is the only difference to the banker's algo.

Initialisiere Work Vector fΓΌr alle iiο»Ώ mit Wi:=ViW_i := V_iο»Ώ- copy that we will change

Algorithmus

Suche unmarkierten PkP_kο»Ώ mit βˆ€i:Qki≀Wi\forall i: Q_{ki} \leq W_iο»Ώ- requested byPkP_k≀ total currently available

Falls dieser existiert:

markiere PkP_kο»Ώ

βˆ€i:Wi=Wi+Aki\forall i: W_i = W_i + A_{ki}ο»Ώ- increase currently available by whatPkP_kο»Ώused

Ansonsten: exit loop

Ende

unmarkierte Prozesse befinden sich in einem deadlock

Beispiel

V=(00001) V=\left(\begin{array}{lllll}0 & 0 & 0 & 0 & 1\end{array}\right) ο»Ώ

Anforderungs Matrix

(Ressourcen-Anforderungen)

Q=(01001001010000110101) Q=\left(\begin{array}{lllll}0 & 1 & 0 & 0 & 1 \\0 & 0 & 1 & 0 & 1 \\0 & 0 & 0 & 0 & 1 \\1 & 0 & 1 & 0 & 1\end{array}\right) ο»Ώ

Allocation Matrix (Aktuell beansprucht)

A=(10110110000001000000) A=\left(\begin{array}{lllll}1 & 0 & 1 & 1 & 0 \\1 & 1 & 0 & 0 & 0 \\0 & 0 & 0 & 1 & 0 \\0 & 0 & 0 & 0 & 0\end{array}\right) ο»Ώ

Initialisierung

Alle Prozesse sind unmarkiert.

Wir markieren P4P_4ο»Ώ .

W:=(00001) W:=\left(\begin{array}{lllll}0 & 0 & 0 & 0 & 1\end{array}\right) ο»Ώ

Algorithmus

Wir suchen unmarkierten Prozess von der Menge {P1,P2,P3}\{P_1, P_2, P_3\}ο»Ώ mit der Eigenschaft

βˆ€i:Q3i≀Wi\forall i: Q_{3i} \leq W_iο»Ώ und finden nur P3P_3ο»Ώ .

Da (00001)≀(00001) \left(\begin{array}{lllll} 0 & 0 & 0 & 0 & 1\end{array}\right) \leq \left(\begin{array}{lllll} 0 & 0 & 0 & 0 & 1\end{array}\right) ο»Ώ , markieren wir P3P_3ο»Ώ .

Wir setzen

W=(00001)+(00010)=(00011) W=\left(\begin{array}{lllll}0 & 0 & 0 & 0 & 1\end{array}\right) + \left(\begin{array}{lllll}0 & 0 & 0 & 1 & 0\end{array}\right) = \left(\begin{array}{lllll}0 & 0 & 0 & 1 & 1\end{array}\right) ο»Ώ


Wir suchen unmarkierten Prozess von der Menge {P1,P2}\{P_1, P_2\}ο»Ώ mit der Eigenschaft

βˆ€i:Q3i≀Wi\forall i: Q_{3i} \leq W_iο»Ώ und finden nichts.

Ende

Es sind nicht alle Prozesse markiert, der Algorithmus liefert Deadlock von {P1,P2}\{P_1, P_2\}ο»Ώ .

Circular Wait / Hold and Wait von P1,P2P_1, P_2ο»Ώ lΓ€sst sich auch in der Matrix beobachten:

In Matrizen stehen Zeilen fΓΌr Prozesse, Spalten fΓΌr Ressourcen

Q=(01001001010000110101) Q=\left(\begin{array}{lllll} 0 & \textcolor{orange}1 & \textcolor{orange}0 & 0 & 1 \\ 0 & \textcolor{orange}0 & \textcolor{orange}1 & 0 & 1 \\ 0 & 0 & 0 & 0 & 1 \\ 1 & 0 & 1 & 0 & 1\end{array}\right) ο»Ώ

A=(10110110000001000000) A=\left(\begin{array}{lllll}1 & \textcolor{orange}0 & \textcolor{orange}1 & 1 & 0 \\1 & \textcolor{orange}1 & \textcolor{orange}0 & 0 & 0 \\0 & 0 & 0 & 1 & 0 \\0 & 0 & 0 & 0 & 0\end{array}\right) ο»Ώ