Informatik

Coffman-Bedingungen: Deadlocks sicher erkennen

Coffman-Bedingungen: Deadlocks sicher erkennen
Coffman-Bedingungen: Deadlocks sicher erkennen
Für Quiz, Lückentext, Lernkarten und Fortschritt ist JavaScript nötig. Alle Inhalte und Lösungen bleiben direkt lesbar.

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.

Deine Lernziele

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.

Definition

Coffman-Bedingungen

Die vier Bedingungen beschreiben gemeinsam, wie eine Verklemmung möglich wird:

  1. Mutual Exclusion (wechselseitiger Ausschluss): Mindestens eine Ressource kann zu einem Zeitpunkt nur von einem Prozess genutzt werden.
  2. Hold and Wait (Halten und Warten): Ein Prozess hält bereits mindestens eine Ressource und wartet gleichzeitig auf eine weitere.
  3. No Preemption (kein Entzug): Eine belegte Ressource kann dem haltenden Prozess nicht erzwungen entzogen werden. Er muss sie selbst freigeben.
  4. 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.
Merke

Nicht eine einzelne Bedingung verursacht den Deadlock. Erst ihr gleichzeitiges Zusammenspiel ermöglicht die Verklemmung.

Teste dich
Frage 1 von 1LeichtEine Datei darf immer nur von einem Prozess im Schreibmodus verwendet werden. Welche Coffman-Bedingung beschreibt das?
Lösung: Mutual Exclusion — Weil die Datei nicht gleichzeitig von mehreren Prozessen schreibend genutzt werden darf, liegt wechselseitiger Ausschluss vor.
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.

  1. Notiere die beteiligten Prozesse und Ressourcen.
  2. Ordne jedem Prozess seine bereits gehaltenen Ressourcen zu.
  3. Notiere, welche zusätzlichen Ressourcen er anfordert.
  4. Prüfe Mutual Exclusion, Hold and Wait und No Preemption.
  5. Suche zuletzt nach einer geschlossenen Wartekette.
  6. Entscheide erst danach, ob alle vier Bedingungen gleichzeitig erfüllt sind.
Beispiel

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.

Teste dich
Frage 1 von 1MittelThread A hält lock1 und wartet auf lock2. Thread B hält lock2 und wartet auf lock1. Das System darf lock2 sicher entziehen und A zuteilen. Welche Coffman-Bedingung ist dadurch aufgehoben?
Lösung: No Preemption — No Preemption verlangt, dass nur der Halter eine Ressource freigeben kann. Ein sicherer erzwungener Entzug hebt genau diese Bedingung auf und bricht damit die Voraussetzungskette des Deadlocks.
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.

BedingungMögliche MaßnahmeMöglicher Nachteil
Mutual ExclusionRessource gemeinsam nutzbar machen, etwa paralleles Lesen erlaubenNicht jede Ressource kann geteilt werden
Hold and WaitAlle benötigten Ressourcen gemeinsam anfordernBedarf muss früh bekannt sein; Ressourcen können ungenutzt reserviert bleiben
No PreemptionSicheren Ressourcenentzug oder Rücksetzung erlaubenNicht jede Operation lässt sich gefahrlos unterbrechen
Circular WaitEine feste globale Reihenfolge für Ressourcen festlegenDie Reihenfolge kann Zugriffe einschränken
Beispiel

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.

Gut zu wissen

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.

Merke

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.

Teste dich
Frage 1 von 1MittelIn einer Anwendung müssen alle Threads zuerst Ressource A und danach Ressource B sperren. Welche Bedingung wird gezielt verhindert?
Lösung: Circular Wait — Eine für alle Prozesse verbindliche Reihenfolge verhindert, dass ein Prozess A und ein anderer in Gegenrichtung B hält. Dadurch kann keine geschlossene Wartekette entstehen.
Karteikasten
Karteikasten

Überlege zuerst selbst und drehe die Karte anschließend zum Prüfen um.

Alles auf einen Blick
Mindmap
  • 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
Abschluss-Check
Teste dich
Frage 1 von 3LeichtWelche Aussage über die Coffman-Bedingungen ist richtig?
Lösung: Ein Deadlock kann nur entstehen, wenn alle vier Bedingungen gleichzeitig erfüllt sind. — Die Bedingungen bilden eine gemeinsame Voraussetzungskette. Fehlt mindestens eine von ihnen, kann kein Deadlock entstehen.
Frage 2 von 3MittelProzess P1 hält R1 und wartet auf R2. Prozess P2 hält R2 und wartet auf R1. Beide Ressourcen sind exklusiv und nicht entziehbar. Welche Bewertung ist korrekt?
Lösung: Alle vier Coffman-Bedingungen sind erfüllt. — Die Ressourcen sind exklusiv, beide Prozesse halten und warten, ein Entzug ist ausgeschlossen und P1 sowie P2 warten zyklisch aufeinander.
Frage 3 von 3SchwerEine Anwendung nutzt exklusive Ressourcen, deren laufende Verwendung nicht sicher unterbrochen werden kann. Der Gesamtbedarf ist vorab unbekannt, aber alle Ressourcen lassen sich eindeutig nummerieren. Welche Prävention passt am besten?
Lösung: Ressourcen dürfen nur in aufsteigender Nummernfolge angefordert werden. — Die feste Reihenfolge nutzt die verfügbare Nummerierung und verhindert Circular Wait. Sie verlangt weder einen bekannten Gesamtbedarf noch einen unsicheren Ressourcenentzug.

Passend dazu