Der Bankieralgorithmus (Dijkstra, 1965) wird zur Vermeidung von Verklemmungen genutzt.
Funktionsweise
Wir erweitern den Resource Allocation Graph wie folgt:
- Claim-Kante
: Prozess könnte Ressource anfordern (gestrichelte Linie) - Claim-Kante wird zur Anforderungskante, wenn ein Prozess die Ressource anfordert
- Anforderungskante wird zur Zuweisungskante, wenn die Ressource dem Prozess zugeteilt wird
- Zuweisungskante wird zur Claim-Kante, wenn die Ressource wieder freigegeben wird
Beispiel:
graph LR P1((P1)) -.-> R2[R2] P2((P2)) -.-> R2 R1 --> P1 P2 --> R1
Voraussetzungen
Um den Bankieralgorithmus anzuwenden, müsen folgende Voraussetzungen erfüllt sein:
- Es gibt mehrere Instanzen jedes Ressourcentyps
- Die Maximale Anzahl benötigter Instanzen eines Ressourcentyps eines Prozesses muss bekannt sein
- Der Prozess muss das System in einem sicheren Zustand belassen, ansonsten muss er warten
Datenstrukturen
- Available - Vektor der Länge
gibt Anzahl der verfügbaren Instanzen pro Ressourcentyp an - Max -
Matrix
definiert den maximalen Bedarf an Ressourcen für jeden Prozess - Allocation -
Matrix
definiert die derzeit reservierten Ressourcen für jeden Prozess - Need -
Matrix
gibt die noch benötigten Ressourcen für jeden Prozess an
Es gilt:
Beispiel
Gegeben seien folgende Allocation und Max Matrizen, sowie die Available Matrix von den Prozessen
Dadurch lässt sich die Need-Matrix berechnen:
Jetzt muss überprüft werden, ob der Need von einem Prozess
- Für
trifft das nicht zu: Dementsprechend wird dieser Prozess zunächst übersprungen. - Für
trifft das zu: Dementsprechend fügen wir den Prozess an die Safe-Sequenz an: Der Available-Vektor wird mit der entsprechenden Zeile aus der Allocation-Matrix erhöht: - Bei
trifft die Bedingung wieder nicht zu: - Für
trifft die Bedingung wieder zu: Der Prozess wird an die Safe-Sequenz angehängt: Der Available-Vektor wird wieder aktualisiert: - So geht das weiter:
- Ist man am Ende angekommen aber hat Prozesse übrig, die noch nicht in der Safe Sequenz sind, fängt man wieder von Vorne an:
Daraus folgt die Reihenfolge