Coffman-Bedingungen: Deadlocks sicher erkennen
Die Coffman-Bedingungen sind vier Voraussetzungen für einen Deadlock: Mutual Exclusion, Hold and Wait, No Preemption und Circular Wait. Nur wenn alle vier gleichzeitig erfüllt sind, kann eine Verklemmung entstehen. Fehlt mindestens eine Bedingung, ist ein Deadlock ausgeschlossen.
Hake ab, was du schon kannst — und komm am Ende hierher zurück!
Die vier Bedingungen verstehen
Ein Deadlock oder eine Verklemmung ist eine geschlossene Wartesituation. Mehrere Prozesse warten dauerhaft auf Ressourcen, die von anderen beteiligten Prozessen gehalten werden. Ohne Eingriff kann keiner von ihnen fortfahren.
Coffman-Bedingungen
Die vier Bedingungen beschreiben gemeinsam, wie eine Verklemmung möglich wird:
- Mutual Exclusion (wechselseitiger Ausschluss): Mindestens eine Ressource kann zu einem Zeitpunkt nur von einem Prozess genutzt werden.
- Hold and Wait (Halten und Warten): Ein Prozess hält bereits mindestens eine Ressource und wartet gleichzeitig auf eine weitere.
- No Preemption (kein Entzug): Eine belegte Ressource kann dem haltenden Prozess nicht erzwungen entzogen werden. Er muss sie selbst freigeben.
- Circular Wait (zyklisches Warten): Die Prozesse bilden eine geschlossene Wartekette. Jeder wartet auf eine Ressource des nächsten Prozesses; der letzte wartet auf den ersten.
Nicht eine einzelne Bedingung verursacht den Deadlock. Erst ihr gleichzeitiges Zusammenspiel ermöglicht die Verklemmung.
Eine Situation Schritt für Schritt prüfen
Prüfe nicht nur, ob Prozesse warten. Untersuche systematisch, was sie halten, worauf sie warten und ob ein geschlossener Zyklus entsteht.
- Notiere die beteiligten Prozesse und Ressourcen.
- Ordne jedem Prozess seine bereits gehaltenen Ressourcen zu.
- Notiere, welche zusätzlichen Ressourcen er anfordert.
- Prüfe Mutual Exclusion, Hold and Wait und No Preemption.
- Suche zuletzt nach einer geschlossenen Wartekette.
- Entscheide erst danach, ob alle vier Bedingungen gleichzeitig erfüllt sind.
Prozess A hält den Drucker und wartet auf den Bildschirm. Prozess B hält den Bildschirm und wartet auf den Drucker.
- Mutual Exclusion: Drucker und Bildschirm sind in diesem Modell jeweils exklusiv belegt.
- Hold and Wait: Beide Prozesse halten eine Ressource und fordern eine weitere an.
- No Preemption: Die Ressourcen werden nicht erzwungen entzogen, sondern nur von ihrem Halter freigegeben.
- Circular Wait: A wartet auf B, während B auf A wartet.
Damit sind alle vier Coffman-Bedingungen gleichzeitig erfüllt. Beide Prozesse bleiben blockiert: Es liegt ein Deadlock vor.
Eine mögliche zyklische Abhängigkeit führt jedoch nicht bei jedem Programmablauf tatsächlich zum Stillstand. Gibt ein Prozess seine Ressource frei, bevor der andere sie anfordert, entsteht keine geschlossene Wartekette.
Aus den Bedingungen Prävention ableiten
Bei der Deadlock-Prävention wird das System so entworfen, dass mindestens eine Coffman-Bedingung grundsätzlich nicht erfüllt werden kann.
| Bedingung | Mögliche Maßnahme | Möglicher Nachteil |
|---|---|---|
| Mutual Exclusion | Ressource gemeinsam nutzbar machen, etwa paralleles Lesen erlauben | Nicht jede Ressource kann geteilt werden |
| Hold and Wait | Alle benötigten Ressourcen gemeinsam anfordern | Bedarf muss früh bekannt sein; Ressourcen können ungenutzt reserviert bleiben |
| No Preemption | Sicheren Ressourcenentzug oder Rücksetzung erlauben | Nicht jede Operation lässt sich gefahrlos unterbrechen |
| Circular Wait | Eine feste globale Reihenfolge für Ressourcen festlegen | Die Reihenfolge kann Zugriffe einschränken |
Zwei Threads benötigen lock1 und lock2. Wenn beide immer zuerst lock1 und danach lock2 anfordern, kann keine kreisförmige Wartekette entstehen. Ein Thread darf zwar warten, aber der andere wartet nicht in umgekehrter Richtung auf ihn. Damit ist Circular Wait ausgeschlossen.
Prävention und Vermeidung sind nicht dasselbe: Prävention schließt mindestens eine Coffman-Bedingung strukturell aus. Deadlock-Vermeidung prüft dagegen jede Zuteilung zur Laufzeit und erlaubt sie nur, wenn ein sicherer Zustand erhalten bleibt.
Wähle eine Maßnahme passend zur Ressource. Einen laufenden Schreibvorgang kann man beispielsweise nicht immer gefahrlos unterbrechen, während eine feste Sperrreihenfolge häufig schon beim Programmentwurf festgelegt werden kann.
Karteikasten
Überlege zuerst selbst und drehe die Karte anschließend zum Prüfen um.
Alles auf einen Blick
- Coffman-Bedingungen
- Mutual Exclusion: Ressource ist exklusiv nutzbar
- Hold and Wait: Prozess hält und fordert nach
- No Preemption: erzwungener Entzug ist ausgeschlossen
- Circular Wait: geschlossene Wartekette entsteht
- Diagnose: alle vier Bedingungen einzeln prüfen
- Prävention: mindestens eine Bedingung ausschließen
- Typische Maßnahme: Ressourcen immer gleich anfordern
Mit Google fortfahren