Deadlock in Operating-System: Was ist zirkuläres Warten (Beispiele)

⚡ Intelligente Zusammenfassung

Ein Deadlock in einem Betriebssystem entsteht, wenn eine Reihe von Prozessen blockiert ist, weil jeder Prozess eine Ressource belegt und auf eine andere wartet, die von einem anderen Prozess belegt wird. Dadurch entsteht eine kreisförmige Kette, in der kein Prozess fortfahren kann.

  • 🔒 Definition: Ein Deadlock führt dazu, dass Prozesse einfrieren, die jeweils eine Ressource belegen, während sie aufeinander warten.
  • 🧩 Vier Bedingungen: Gegenseitiger Ausschluss, Halte- und Abwarteprinzip, keine Präemption und zirkuläres Warten müssen alle gleichzeitig gelten.
  • 🔁 Kreisförmiges Warten: Die Prozesse bilden eine geschlossene Kette, wobei jeder Prozess auf eine Ressource wartet, die vom nächsten Prozess gehalten wird.
  • 🛡️ Verhütung: Das Versagen einer der vier Bedingungen verhindert das Entstehen einer Pattsituation.
  • 🏦 Vermeidung: Der Algorithmus des Bankers überprüft Ressourcenanforderungen, um das System in einem sicheren Zustand zu halten.
  • 🤖 KI-Perspektive: Maschinelles Lernen erkennt Deadlock-Muster, und Copilot hilft beim Schreiben und Überprüfen von Sperrcode.

Deadlock in Operating-System

Was ist Deadlock?

Deadlock ist eine Situation, die in einem Betriebssystem Ein Deadlock tritt auf, wenn ein Prozess in einen Wartezustand gerät, weil ein anderer wartender Prozess die benötigte Ressource belegt. Dies ist ein häufiges Problem in Multiprocessing-Umgebungen, in denen mehrere Prozesse eine bestimmte Art von sich gegenseitig ausschließender Ressource gemeinsam nutzen, die als Softlock oder Softwarelock bezeichnet wird.

Wenn es zu einer Blockade kommt, kann keiner der beteiligten Prozesse fortgesetzt werden, sodass die betroffene Arbeit so lange unterbrochen wird, bis das Betriebssystem eingreift.

Beispiel für einen Deadlock

  • Ein Beispiel aus der Praxis wäre der Verkehr, der nur in eine Richtung fließt.
  • Hier wird eine Brücke als Ressource betrachtet.
  • Wenn es also zu einer Verklemmung kommt, kann diese behoben werden, indem ein Fahrzeug zurücksetzt (Ressourcen unterbricht und zurückrollt).
  • Bei einer Blockade müssen möglicherweise mehrere Fahrzeuge rückwärts fahren.
  • Hungertod ist also möglich.

Beispiel für einen Deadlock

Beispiel für einen Deadlock

Was ist zirkuläres Warten?

Ein Prozess wartet auf eine Ressource, die von einem zweiten Prozess gehalten wird, welcher wiederum auf eine Ressource wartet, die von einem dritten Prozess gehalten wird, und so weiter. Dies setzt sich fort, bis der letzte Prozess auf eine Ressource wartet, die vom ersten Prozess gehalten wird. Dadurch entsteht eine geschlossene Kette.

Beispielsweise wird Prozess A Ressource B zugewiesen, während er Ressource A anfordert. Auf die gleiche Weise wird Prozess B Ressource A zugewiesen, während er Ressource B anfordert. Dadurch entsteht eine zirkuläre Warteschleife.

Beispiel für zirkuläres Warten

Ein Computer verfügt beispielsweise über drei USB-Laufwerke und drei Prozesse. Jeder der drei Prozesse belegt eines der USB-Laufwerke. Fordert nun jeder Prozess ein weiteres Laufwerk an, entsteht eine Deadlock-Situation, da jeder Prozess darauf wartet, dass ein USB-Laufwerk freigegeben wird, während es noch belegt ist. Dies führt zu einer Endlosschleife.

Beispiel für zirkuläres Warten

Beispiel für zirkuläres Warten

Deadlock-Erkennung im Betriebssystem

Ein Deadlock kann vom Ressourcenplaner erkannt werden. Ein Ressourcenplaner hilft dem Betriebssystem dabei, die Ressourcenverwaltung zu gewährleisten. track aller Ressourcen, die verschiedenen Prozessen zugewiesen sind. Sobald ein Deadlock erkannt wird, kann er durch die Unterbrechung von Ressourcen, das Zurücksetzen eines Prozesses oder das Beenden eines oder mehrerer der im Deadlock befindlichen Prozesse behoben werden.

Deadlock-Verhinderung im Betriebssystem

Es ist wichtig, einen Deadlock von vornherein zu verhindern. Das System prüft jede Transaktion vor ihrer Ausführung, um sicherzustellen, dass sie nicht zu einem Deadlock führt. Selbst kleine Operationen, die potenziell einen Deadlock verursachen könnten, werden niemals ausgeführt.

Die Vermeidung von Deadlocks ist eine Reihe von Methoden, die sicherstellen, dass mindestens eine der vier notwendigen Bedingungen nicht erfüllt sein kann.

Keine Vorauszahlung

Eine Ressource kann nur dann freiwillig von dem Prozess freigegeben werden, der sie hält, nachdem dieser Prozess seine Aufgabe abgeschlossen hat.

  • Wenn ein Prozess, der Ressourcen belegt, eine weitere Ressource anfordert, die ihm nicht sofort zugewiesen werden kann, werden alle seine Ressourcen freigegeben.
  • Unterbrochene Ressourcen werden der Liste der Ressourcen hinzugefügt, auf die der Prozess wartet.
  • Der Prozess wird erst dann neu gestartet, wenn er sowohl seine alten Ressourcen als auch die neu angeforderten Ressourcen wiedererlangt hat.

Gegenseitiger Ausschluss

Mutex ist die vollständige Bezeichnung für Mutex. Es handelt sich um eine spezielle Art von Binärsperre. Semaphor Dies dient der Zugriffskontrolle auf eine gemeinsam genutzte Ressource. Es beinhaltet einen Mechanismus zur Prioritätsvererbung, um Probleme mit erweiterter Prioritätsinversion zu vermeiden und blockiert Aufgaben mit höherer Priorität so kurz wie möglich.

Gemeinsam genutzte Ressourcen wie schreibgeschützte Dateien führen nie zu Deadlocks, Ressourcen wie Drucker und Bandlaufwerke benötigen jedoch den exklusiven Zugriff durch einen einzigen Prozess.

Halten und warten

In diesem Fall müssen Prozesse daran gehindert werden, eine oder mehrere Ressourcen zu belegen, während sie gleichzeitig auf eine oder mehrere andere Ressourcen warten.

Zirkuläres Warten

Diese Methode erzwingt eine vollständige Ordnung aller Ressourcentypen. Die Vermeidung von Zirkelbelegungen erfordert zudem, dass jeder Prozess Ressourcen in aufsteigender Reihenfolge anfordert.

Deadlock-Vermeidung Algorithms

Es ist besser, einen Deadlock zu vermeiden, anstatt erst nach seinem Auftreten Maßnahmen zu ergreifen. Zur Vermeidung sind zusätzliche Informationen erforderlich, beispielsweise zur Ressourcennutzung. Ein hilfreiches Modell zur Deadlock-Vermeidung besteht darin, dass jeder Prozess die maximale Anzahl der benötigten Ressourcen jedes Typs angibt.

Vermeidung Algorithms

Der Deadlock-Vermeidungsalgorithmus bewertet dynamisch den Ressourcenzuweisungsstatus, sodass eine zirkuläre Wartesituation niemals auftreten kann.

Für eine einzelne Instanz eines Ressourcentyps:

  • Verwenden Sie einen Ressourcenzuordnungsgraphen.
  • Ein Zyklus im Graphen ist notwendig und hinreichend für eine Verklemmung.

Bei mehreren Instanzen eines Ressourcentyps:

  • Ein Zyklus ist zwar notwendig, aber nicht hinreichend für eine Verklemmung.
  • Verwenden Sie die Banker-Algorithmus.

Unterschied zwischen Verhungern und Deadlock

Hier einige wichtige Unterschiede zwischen Deadlock und Starvation:

Deadlock Verhungern
Eine Deadlock-Situation entsteht, wenn einer der Prozesse blockiert wird. Bei einer Verhungerung der Prozesse handelt es sich um eine Situation, in der alle Prozesse mit niedriger Priorität blockiert werden, während die Prozesse mit hoher Priorität ausgeführt werden.
Deadlock ist ein unendlicher Prozess. Hungern ist ein langer Prozess, aber kein endloser.
Jede Pattsituation führt unweigerlich zu Hungersnot. Nicht jede Hungersnot führt zwangsläufig zu einer Pattsituation.
Ein Deadlock entsteht durch gegenseitigen Ausschluss, Halten und Warten, fehlende Präemption und zirkuläres Warten, die gleichzeitig auftreten. Dies geschieht aufgrund unkontrollierter Prioritätensetzung und mangelhaften Ressourcenmanagements.

Vorteile von Deadlock

Hier die Vorteile der Verwendung der Deadlock-Behandlungsmethode:

  • Diese Vorgehensweise eignet sich gut für Prozesse, die eine einzelne Aktivitätsphase durchlaufen.
  • Bei einer Deadlock-Situation ist keine Präemption erforderlich.
  • Es handelt sich um eine praktische Methode, wenn sie auf Ressourcen angewendet wird, deren Zustand leicht gespeichert und wiederhergestellt werden kann.
  • Die Durchsetzung ist über Prüfungen zur Kompilierzeit möglich.
  • Es sind keine Laufzeitberechnungen erforderlich, da das Problem bereits im Systemdesign gelöst ist.

Nachteile von Deadlock

Hier sind die Nachteile der Verwendung der Deadlock-Behandlungsmethode:

  • Es verzögert den Prozessstart.
  • Prozesse müssen ihren zukünftigen Ressourcenbedarf im Voraus kennen.
  • Es greift häufiger vor als nötig.
  • Es unterbindet inkrementelle Ressourcenanforderungen.
  • Es birgt inhärente Präemptionsverluste.

Häufig gestellte Fragen

Für einen Deadlock müssen vier Coffman-Bedingungen gleichzeitig erfüllt sein: gegenseitiger Ausschluss, Halten und Warten, keine Präemption und zirkuläres Warten. Das Wegfallen einer einzigen dieser Bedingungen verhindert die Entstehung eines Deadlocks.

Prävention beseitigt eine der vier Bedingungen im Voraus, sodass ein Deadlock niemals entstehen kann. Vermeidung lässt die Bedingungen zu, verwendet aber Laufzeitprüfungen, wie zum Beispiel die Banker-Algorithmus, um das System in einem sicheren Zustand zu halten.

Bei einer Verklemmung stoppen blockierte Prozesse vollständig und ändern ihren Zustand nie. LivelockDie Prozesse ändern ständig ihren Zustand und beanspruchen die CPU, kommen aber nicht voran. Livelock ist ein Sonderfall von Ressourcenmangel.

Die meisten Allzwecksysteme, einschließlich Windows Linux verwendet den Straußenalgorithmus und ignoriert seltene Deadlocks einfach, da deren Prävention kostspielig ist. Datenbanken und Echtzeitsysteme hingegen führen aktive Erkennungs- und Wiederherstellungsroutinen durch.

Ein Ressourcenzuordnungsgraph bildet Prozesse und Ressourcen als Knoten ab, die durch Anforderungs- und Zuweisungskanten verbunden sind. Ein Zyklus im Graphen signalisiert einen möglichen Deadlock; bei Ressourcen mit nur einer Instanz bedeutet ein Zyklus immer einen bestehenden Deadlock.

Nein. Ein echter Deadlock ist permanent, da die blockierten Prozesse ihre Ressourcen nicht von selbst freigeben. Das Betriebssystem muss ihn auflösen, indem es eine Ressource unterbricht, einen Rollback durchführt oder einen der Prozesse beendet.

Maschinelle Lernmodelle analysieren Ressourcenanforderungsmuster, um Deadlocks vorherzusagen und zu erkennen, bevor sie auftreten. KI-Scheduler können Anfragen neu anordnen oder Sperrrichtlinien optimieren, was in Datenbanken, Cloud-Plattformen und verteilten Systemen von Nutzen ist.

Ja. GitHub Copilot kann riskante Sperrreihenfolgen erkennen, konsistente Sperrbeschaffung vorschlagen und Tests generieren, die Deadlocks aufdecken. Betrachten Sie die Ausgabe als ersten Anhaltspunkt und überprüfen Sie die Parallelitätslogik anschließend mit geeigneten Analysetools.

Fassen Sie diesen Beitrag mit folgenden Worten zusammen: