Informatik · Klasse 12 · aktualisiert
Deadlock: erkennen, verhindern und auflösen
Du erkennst einen Deadlock, prüfst die vier Coffman-Bedingungen, liest Zuteilungsgraphen und unterscheidest Prävention, Vermeidung und Auflösung.
0 von 11 Aufgaben gelöst
Kurz gesagt
Ein Deadlock ist ein Zustand, in dem mehrere Prozesse im Kreis aufeinander warten. Im Zuteilungsgraphen ist der Wartezyklus ein Zyklus in Pfeilrichtung. Prävention verhindert Deadlocks, Vermeidung überwacht die Prozesse, Auflösung beseitigt einen eingetretenen Deadlock.
Vier Fahrzeuge fahren von allen vier Seiten ein Stück in eine Kreuzung und blockieren einander. Auch Programme können sich so festfahren. Das nennt man Deadlock. Hier lernst du, ihn zu erkennen und mit ihm umzugehen.
Deine Lernziele
Hake ab, was du schon kannst. Löst du alle Aufgaben eines Abschnitts, hakt Mela das Ziel für dich ab.
3 Abschnitte
Ein Deadlock (auch Verklemmung) ist ein Zustand, in dem mehrere Prozesse im Kreis aufeinander warten. Jeder beteiligte Prozess wartet darauf, dass ein Betriebsmittel frei wird, das ein anderer beteiligter Prozess schon für sich allein belegt hat. Betriebsmittel (Ressourcen) sind zum Beispiel ein Bildschirm oder ein Drucker.
Verklemmungen können in Systemen eintreten, die mehrere Prozesse parallel ablaufen lassen können und bei denen die Reihenfolge der Betriebsmittelvergabe nicht festgelegt ist. Liegen die Ausführungszeiten der im Kreis abhängigen Prozesse weit genug auseinander, kommt es nicht zum Deadlock. Ein Prozess, der nur ein Betriebsmittel benötigt, kann nicht verklemmen.
Nach Coffman et al. sind vier Bedingungen hinreichend für die Möglichkeit einer Verklemmung (siehe Tabelle). Gelten alle vier, ist ein Deadlock also möglich, aber nicht sicher. Wird mindestens eine Bedingung nicht erfüllt, spricht man von einer Verhinderung. Im Ablauf mit π1 und π2 siehst du nur zwei Bedingungen: Hold and Wait und Circular Wait. Ob die Betriebsmittel exklusiv sind und ob man sie entziehen kann, bleibt in diesem Beispiel offen. Aus diesem einen Beispiel folgt daher nicht, dass dort alle vier gelten.
Zwei Abgrenzungen: Bei einem Deadlock um Betriebsmittel müssen immer mehrere gemeinsam genutzte Ressourcen vorhanden sein, gegenseitiges Blockieren allein genügt nicht. Die Kreuzung ist deshalb nur ein Deadlock-Beispiel, wenn du sie in mehrere Ressourcen aufteilst, etwa in Kreuzungsviertel. Beim Livelock verharren die Prozesse nicht im Wartezustand, sondern wechseln ständig zwischen Zuständen, aus denen sie nicht mehr entkommen. Jeder Prozess bleibt dabei aktiv, kann aber seine Aufgabe nicht abarbeiten.
Definition
Deadlock
Ein Zustand, in dem mehrere Prozesse im Kreis aufeinander warten. Jeder wartet auf ein Betriebsmittel, das ein anderer beteiligter Prozess schon exklusiv belegt hat.
Beispiel: Bildschirm und Drucker
- 1π1 hat den Bildschirm und braucht zusätzlich den Drucker.
- 2Der Drucker gehört π2, und π2 fordert den Bildschirm.
- 3Hold and Wait: π1 hat den Bildschirm und braucht gleichzeitig den Drucker.
- 4Circular Wait: π1 und π2 brauchen jeweils, was der andere hat.
- 5Mutual Exclusion und No Preemption: bleiben in diesem Beispiel offen.
| Bedingung | Bedeutung | Im Bildschirm-Drucker-Ablauf |
|---|---|---|
| Mutual Exclusion | Ein Betriebsmittel ist nur einem einzigen Prozess zugänglich | bleibt offen |
| Hold and Wait | Prozesse fordern Mittel an und behalten dabei andere | π1 hat den Bildschirm, braucht den Drucker |
| No Preemption | Nur die Prozesse selbst geben Mittel frei, der Zugriff wird nicht unterbrochen | bleibt offen |
| Circular Wait | Mindestens zwei Prozesse hängen bei den Mitteln im Kreis voneinander ab | π2 hat den Drucker, fordert den Bildschirm |
Teste dich
Ein Betriebsmittelzuteilungsgraph (englisch Resource Allocation Graph, RAG) ist ein gerichteter Graph: Seine Kanten haben eine Pfeilrichtung. Er stellt Ressourcen und Prozesse in Beziehung und dient der Analyse von Deadlocks. Jeder Knoten ist entweder ein Prozessknoten Pi oder ein Ressourcenknoten Rj.
Die Pfeilrichtung trägt die Bedeutung. Eine Kante von Rj zu Pi bedeutet: Der Prozess Pi hält die Ressource Rj. Eine Kante von Pk nach Rj bedeutet: Der Prozess Pk wartet darauf, dass die Ressource Rj frei wird.
Ein Zyklus ist in einem Graphen ein Kantenzug mit unterschiedlichen Kanten, bei dem Start- und Endknoten gleich sind. In einem gerichteten Graphen heißt er gerichteter Zyklus. Folge also immer den Pfeilen, nie gegen sie. Algorithmisch lassen sich Zyklen durch eine modifizierte Tiefensuche finden. Gibt es im RAG keinen Zyklus, kann kein Deadlock auftreten.
Ein Zyklus in Pfeilrichtung ist der Wartezyklus, also das Beispiel für die Bedingung Circular Wait. Er zeigt nur diese eine Bedingung. Ob ein Deadlock vorliegt, sagt dir der Zyklus allein nicht. In den Aufgaben suchst du deshalb nur den Zyklus in Pfeilrichtung.
Definition
Betriebsmittelzuteilungsgraph
Ein gerichteter Graph mit Prozessknoten Pi und Ressourcenknoten Rj. Eine Kante Rj → Pi heißt: Pi hält Rj. Eine Kante Pk → Rj heißt: Pk wartet auf Rj.
Beispiel: Zwei Graphen mit zwei Prozessen
- 1Graph A hat die Kanten P1→R1, R1→P2, P2→R2, R2→P1.
- 2P1 wartet auf R1, und R1 ist von P2 belegt.
- 3P2 wartet auf R2, und R2 ist von P1 belegt.
- 4Zyklus in Pfeilrichtung: P1 → R1 → P2 → R2 → P1
- 5Graph B hat dieselben Kanten ohne R2→P1: Kein Zyklus in Pfeilrichtung.
Merke: Pfeil von R nach P: P hält R. Pfeil von P nach R: P wartet auf R. Ein Wartezyklus ist ein Zyklus in Pfeilrichtung. Ohne Zyklus kann kein Deadlock auftreten.
Teste dich
Die drei Begriffe unterscheiden sich darin, wann sie eingreifen. In der Literatur werden Verhinderung und Vermeidung auch öfter vertauscht. Hier gelten die Begriffe so, wie sie unten stehen.
Prävention (Verhinderung): Mindestens eine der vier Bedingungen wird nicht erfüllt. Die Tabelle zeigt je eine Maßnahme. Das konservative 2-Phasen-Sperrprotokoll (Preclaiming) setzt zu Beginn einer Transaktion alle benötigten Sperren auf einmal und verhindert so in jedem Fall Deadlocks. Es führt aber zu einem hohen Verlust an Parallelität, und man muss im Voraus wissen, welche Sperren nötig sind.
Vermeidung: Deadlocks sind dabei theoretisch möglich, das System überwacht die Prozesse aber so, dass sie nicht verklemmen. Dafür müssen alle möglichen folgenden Vorgänge bekannt sein. Grundlage ist der sichere Zustand. Der Bankieralgorithmus (Dijkstra, 1965) dient der Vermeidung. Er kennt A (verfügbare Ressourcen), C (an einen Prozess vergebene) und R (von ihm noch benötigte). Gilt R ≤ A für jede Ressourcenart einzeln, wird der Prozess abgearbeitet und gibt danach seine Ressourcen frei: A = A + C. Findet der Algorithmus eine Reihenfolge, in der alle Prozesse ohne Verklemmung ablaufen, ist der Zustand sicher. Sonst heißt er unsicher: Ein Deadlock ist dann möglich, aber nicht sicher eingetreten. In der Praxis findet der Bankieralgorithmus kaum Anwendung, weil er voraussetzt, dass alle zur Laufzeit benötigten Ressourcen schon vorher genau bekannt sind.
Auflösung (Beseitigung): Der Deadlock ist schon eingetreten und wird beseitigt. Die einfachste Art ist das gezielte Abbrechen von Prozessen. Dabei geht meist Daten verloren. Das lässt sich durch geschickte Prozessauswahl verringern, deshalb lässt sich das Verfahren nur sehr schlecht automatisieren. Weitere Möglichkeiten sind, einen Prozess zu suspendieren und später fortzusetzen, oder ein Rollback auf den zuletzt gesicherten Zustand. Nicht alle Prozesse lassen sich problemlos zurücksetzen. Ein Festplatten-Schreibvorgang eignet sich in den meisten Fällen besser als ein CD/DVD-Brennvorgang.
Eine Maßnahme begründest du so: Nenne die Bedingung oder den Zeitpunkt, den sie trifft, und prüfe ihre Voraussetzung. Das Preclaiming braucht zum Beispiel den Bedarf im Voraus, der Bankieralgorithmus ebenfalls.
Definition
Sicherer Zustand
Ein Zustand ist sicher, wenn mindestens eine Reihenfolge existiert, in der alle Prozesse enden können, selbst wenn sie noch ihre maximalen Ressourcenanforderungen stellen.
| Bedingung | Maßnahme der Prävention |
|---|---|
| Mutual Exclusion | Exklusiven Zugriff auflösen, etwa durch Spooling (Beispiel Drucker) oder Virtualisierung (Beispiel CPU) |
| Hold and Wait | Jeder Prozess nennt zu Beginn seinen Bedarf und erhält alles auf einmal, falls alles gleichzeitig frei ist |
| No Preemption | Einem Prozess werden Betriebsmittel entzogen, um sie einem anderen zuzuteilen |
| Circular Wait | Betriebsmittel linear ordnen und nur in dieser Reihenfolge anfordern oder zuteilen |
Merke: Prävention: Mindestens eine Bedingung wird nicht erfüllt. Vermeidung: Ein Deadlock ist theoretisch möglich, das System überwacht die Prozesse aber. Auflösung: Der Deadlock ist schon eingetreten und wird beseitigt.
Teste dich
Alles auf einen Blick
Deadlock
Deadlock
Mehrere Prozesse warten im Kreis aufeinander, jeder auf ein Betriebsmittel, das ein anderer belegt.
Coffman-Bedingungen
Vier Bedingungen sind hinreichend für die Möglichkeit einer Verklemmung, nicht für ihr sicheres Eintreten.
Zuteilungsgraph
Rj → Pi heißt hält, Pk → Rj heißt wartet. Der Wartezyklus ist ein Zyklus in Pfeilrichtung.
Prävention
Mindestens eine der vier Bedingungen wird nicht erfüllt.
Vermeidung
Der Deadlock bleibt theoretisch möglich, das System überwacht die Prozesse.
Auflösung
Ein eingetretener Deadlock wird beseitigt, meist mit Datenverlust.
Musteraufgabe · Schritt für Schritt
Vermeidung: Reihenfolge für π1 und π2 prüfen
- 1Gegeben: Das Betriebssystem hat noch 3 Betriebsmittel frei.
- 2π1 hat 5 Betriebsmittel und braucht noch 3. π2 hat 2 und fordert noch 8.
- 3Schritt 1: π1 bekommt die 3 freien Betriebsmittel. Frei: 3 − 3 = 0.
- 4Schritt 2: π1 hat nun alles und läuft vollständig. Danach gibt es 5 + 3 = 8 Betriebsmittel zurück. Frei: 0 + 8 = 8.
- 5Schritt 3: π2 braucht noch 8. Das passt: 8 ≤ 8.
- 6Ergebnis: Die Reihenfolge π1, dann π2 lässt beide Prozesse enden. Der Zustand ist sicher.
- 7Gegenprobe: Bekäme π2 zuerst die 3 freien Mittel, fehlten ihm noch 5.
Fehler finden
Prüfe die Aussagen zum Bankieralgorithmus mit vier Ressourcenarten In einer Zeile steckt ein Fehler. Tippe sie an.
Fehler in Zeile 5Unsicher bedeutet nur, dass keine Reihenfolge gefunden wurde, in der alle Prozesse enden können. Richtig: Der Zustand ist unsicher, eine Verklemmung ist möglich, aber nicht sicher eingetreten.
Lückentext
Wähl in jeder Lücke das passende Wort und prüf dann deine Antworten.
Eine Kante von R1 nach P2 bedeutet: P2 R1. Ist der Zustand beim Bankieralgorithmus unsicher, ist ein Deadlock . Wird mindestens eine der vier Coffman-Bedingungen nicht erfüllt, spricht man von .
Karteikasten
Erst selbst überlegen, dann umdrehen.
Übung mit Feedback