Bankieralgorithmus
aus Wikipedia, der freien Enzyklopädie
Der Bankieralgorithmus (englisch Banker's algorithm) geht auf Edsger W. Dijkstra (1965) zurück und wird zum Erkennen einer Verklemmung (deadlock) genutzt. Dazu werden die verfügbaren Ressourcen und die Prozesse aufgelistet. Die Ressourcen gliedern sich in gesamte Ressourcen und verfügbare Ressourcen. Die Prozesse erhalten ebenfalls zwei Eigenschaften: Zum einen die Ressourcen, die bereits besetzt werden, zum anderen die noch benötigten Ressourcen.
Dann werden alle Prozesse – sofern möglich – nacheinander abgearbeitet und die belegten zu den verfügbaren Ressourcen zugeführt. Nach Ausführung des Algorithmus steht fest, ob eine Verklemmung vermeidbar ist oder nicht. Kommt der Bankieralgorithmus zu einem erfolgreichen Ende, kann unter Umständen durch "unbedachte" Ausführung der Prozesse trotzdem eine Verklemmung entstehen.
Inhaltsverzeichnis |
[Bearbeiten] Begriff: Bankieralgorithmus
Wie einem Bankier nur eine begrenzte Anzahl an Geld zur Verfügung steht um die Wünsche seiner Kunden zu befriedigen, so steht einem Betriebssystem auch nur eine begrenzte Anzahl von Betriebsmitteln zur Verfügung. Der Bankier hält deswegen immer noch so viel Geld in seinem Tresor zurück, damit er noch von mindestens einem Kunden das komplette Kreditlimit erfüllen kann. Dieser eine Kunde (Prozess) kann dann sein Geschäft erfolgreich zum Abschluss bringen und das verwendete Geld wieder zurück auf die Bank bringen. Nun kann es ein anderer Kunde haben.
[Bearbeiten] Voraussetzungen
Gegeben sind vor Ausführung des Algorithmus folgende Informationen:
- m Ressourcen
- n Threads/Prozesse (mit belegten Ressourcen)
- sowie die noch benötigten Ressourcen der Prozesse
Gesucht wird dann die Information, ob eine Verklemmung auftreten kann, oder nicht.
[Bearbeiten] Formale Beschreibung
Gesamtressourcen
Verfügbare Ressourcen
von Prozess i belegte Ressourcen (werden nach Prozessdurchführung freigegeben)
von Prozess i benötigte Ressourcen (müssen für einen Prozessstart vorhanden sein)
alle Prozesse i sind nicht markiert.
[Bearbeiten] Beispiel
Start des Algorithmus
1. Schritt: Prozess 2 ausführen
2. Schritt: Prozess 1 ausführen
3. Schritt: Kein Prozess mehr ausführbar
- DEADLOCK!
[Bearbeiten] Siehe auch
- Dekker-Algorithmus, alternativer Algorithmus zur Synchronisation