Algorithmus
Markiert deadlock-freie Prozesse.
Initialisierung
setze alle Prozesse auf unmarkiert
markiere alle Prozesse
Pkβο»Ώ
mit
βi:Akiβ=0ο»Ώ- this line is the only difference to the banker's algo.
Initialisiere Work Vector fΓΌr alle
iο»Ώ
mit
Wiβ:=Viβο»Ώ- copy that we will change
Algorithmus
Suche unmarkierten
Pkβο»Ώ
mit
βi:Qkiββ€Wiβο»Ώ- requested byPkβο»Ώβ€ total currently available
Falls dieser existiert:
markiere
Pkβο»Ώ
βi:Wiβ=Wiβ+Akiβο»Ώ- increase currently available by whatP
k
βο»Ώused
Ansonsten: exit loop
Ende
unmarkierte Prozesse befinden sich in einem deadlock
Beispiel
V=(0β0β0β0β1β)ο»Ώ
Anforderungs Matrix
(Ressourcen-Anforderungen)
Q=βββ0001β1000β0101β0000β1111ββ ββο»Ώ
Allocation Matrix
(Aktuell beansprucht)
A=βββ1100β0100β1000β1010β0000ββ ββο»Ώ
Initialisierung
Alle Prozesse sind unmarkiert.
Wir markieren
P4βο»Ώ
.
W:=(0β0β0β0β1β)ο»Ώ
Algorithmus
Wir suchen unmarkierten Prozess von der Menge
{P1β,P2β,P3β}ο»Ώ
mit der Eigenschaft
βi:Q3iββ€Wiβο»Ώ
und finden nur
P3βο»Ώ
.
Da
(0β0β0β0β1β)β€(0β0β0β0β1β)ο»Ώ
, markieren wir
P3βο»Ώ
.
Wir setzen
W=(0β0β0β0β1β)+(0β0β0β1β0β)=(0β0β0β1β1β)ο»Ώ
Wir suchen unmarkierten Prozess von der Menge
{P1β,P2β}ο»Ώ
mit der Eigenschaft
βi:Q3iββ€Wiβο»Ώ
und finden nichts.
Ende
Es sind nicht alle Prozesse markiert, der Algorithmus liefert Deadlock von
{P1β,P2β}ο»Ώ
.
Circular Wait / Hold and Wait von
P1β,P2βο»Ώ
lΓ€sst sich auch in der Matrix beobachten:
In Matrizen stehen Zeilen fΓΌr Prozesse, Spalten fΓΌr Ressourcen
Q=βββ0001β1000β0101β0000β1111ββ ββο»Ώ
A=βββ1100β0100β1000β1010β0000ββ ββο»Ώ