3.2.12 Deadlocks

[gesichtete Version][gesichtete Version]
Keine Bearbeitungszusammenfassung
 
(64 dazwischenliegende Versionen von 9 Benutzern werden nicht angezeigt)
Zeile 1: Zeile 1:
<p>
 
{{#index:Deadlock|Verklemmung|Deadlock-Zustand|Zustand, Deadlock}}
<loop_index id="5fa978539ca4f">Deadlock</loop_index><loop_index id="5fa97853d244b">Verklemmung</loop_index><loop_index id="5fa97853d2456">Deadlock-Zustand</loop_index><loop_index id="5fa97853d245d">Zustand, Deadlock</loop_index>
Deadlocks sind eine unangenehme Sache, sie sollten besser nicht auftreten. Zunächst die Definition:
Deadlocks sind eine unangenehme Sache. Sie sollten besser nicht auftreten, aber das kann man leider nicht selbst bestimmen. Zunächst die Definition:
</p>
</p>
<br />
<br />
==== Definition: Deadlock-Zustand  ====
== Definition: Deadlock-Zustand  ==
<p>
<p>
<loop_area type="definition">
<loop_area type="definition">
<p>
<p>
Eine Menge von Prozessen befindet sich nach <cite>Tanenbaum+2009</cite> in einem '''Deadlock-Zustand''', wenn jeder Prozess aus der Menge auf ein Ereignis wartet, das nur ein anderer Prozess aus der Menge auslösen kann.
Eine Menge von Prozessen befindet sich nach <cite id="5fa978539ca5a">Tanenbaum+2009</cite> in einem '''Deadlock-Zustand''', wenn jeder Prozess aus der Menge auf ein Ereignis wartet, das nur ein anderer Prozess aus der Menge auslösen kann.
</p>
</p>
</loop_area>
</loop_area>
Zeile 14: Zeile 14:
<p>
<p>
Wenn sich mehrere Prozesse in einem Deadlock-Zustand befinden, so sagt man auch vereinfachend: Es ist ein Deadlock aufgetreten.
Wenn sich mehrere Prozesse in einem Deadlock-Zustand befinden, so sagt man auch vereinfachend: Es ist ein Deadlock aufgetreten.
</p>
<p>
Der englische Betriff ''Deadlock'' wird auf deutsch gerne mit ''Verklemmung'' übersetzt.
</p>
</p>


<br />
<br />
== Eine Analogie aus der Realität ==
<p>
<p>
In der realen Welt gibt es eine schöne Analogie zum Deadlock-Zustand von Prozessen:
In der realen Welt gibt es eine schöne Analogie zum Deadlock-Zustand von Prozessen:
Zeile 24: Zeile 28:
<loop_area type="practice">
<loop_area type="practice">
<p>
<p>
Wenn du dir vorstellen kannst, dass ein Auto im Strassenverkehr einen Prozess repräsentiert, dann zeigt [http://pieterpan.files.wordpress.com/2008/11/deadlock.jpg dieses Bild] einen Deadlock-Zustand einer Menge von Autos. <small>([http://www.skyscrapercity.com/showpost.php?p=33297124&postcount=55 Hier gibt es eine kleine Sammlung mit ähnlichen Fotos.])</small>
Wenn du dir vorstellen kannst, dass ein Auto im Straßenverkehr einen Prozess repräsentiert, dann zeigt [http://pieterpan.files.wordpress.com/2008/11/deadlock.jpg dieses Bild] einen Deadlock-Zustand einer Menge von Autos. <small>([http://www.skyscrapercity.com/showpost.php?p=33297124&postcount=55 Hier gibt es eine kleine Sammlung mit ähnlichen Fotos.])</small>
</p>
</p>
<p>
<p>
Zeile 35: Zeile 39:
</spoiler>
</spoiler>
</loop_area>
</loop_area>
</p>
<br />
==== Aufgabe 1 ====
<p>
<loop_area type="task">
<loop_task title="Deadlock-Philosophen">
<p>
<cite>Mandl+2013</cite> geht am Ende von Kapitel 6.2.2 auf das Philosophenproblem und eine dabei bestehende Deadlock-Gefahr ein.
</p>
<p>
Erläutere:
* Unter welcher Bedingung tritt bei den speisenden Philosophen ein Deadlock-Zustand ein?
* Welche Rolle spielt eine [[TSL-Befehl#Definition:_Atomare_Aktion|atomare Aktion]] dabei?
</p>
</loop_task>
</loop_area>
</p>
<br />
==== Vier Bedingungen für einen Deadlock ====
<p>
Eine grundlegende Arbeit über ''System Deadlocks'' veröffentlichten E.G. Coffman, Jr.; M.J. Elphick und A. Shoshani im Jahre 1971 in der Zeitschrift [http://dl.acm.org/citation.cfm?id=356588&dl=ACM&coll=DL&CFID=259872056&CFTOKEN=90437868 Computing Surveys, Vol. 3, No. 2]; <small>(hier ist ein [http://people.cs.umass.edu/~mcorner/courses/691J/papers/TS/coffman_deadlocks/coffman_deadlocks.pdf alternativer Link] zu diesem Dokument)</small>.
</p>
<p>
Sie beschreiben darin vier Bedingungen, welche allesamt eingetreten sein müssen, und damit einen Deadlock-Zustand verursacht haben:
# ''Mutal exclusion condition''<br />Eine Ressource steht einem Prozess nur exklusiv zur Verfügung, sie kann also nicht gleichzeitig von mehreren Prozessen belegt werden.
# ''Wait for condition''<br />Prozesse warten und behalten dabei die Kontrolle über bereits zugewiesene Ressourcen solange, bis sie alle Ressourcen zugesprochen bekommen haben, um schließlich ihre Arbeit fortführen zu können.
# ''No preemtion condition''<br />Zugewiesene Ressourcen können einem Prozess nicht gewaltsam wieder entrissen werden.
# ''Circular wait condition''<br />Es gibt eine zyklische Kette von Prozessen, die bereits eine oder mehrere Ressourcen zugeweisen bekommen haben, und die gleichzeitig auf weitere Resourcen warten, welche bereits dem jeweils nächsten Prozess in der Kette zugesprochen wurden.
</p>
</p>


<br />
<br />


==== Deadlocks erkennen ====
== Ein Deadlock beim Philosophenproblem ==
<p>
<p>
Die vierte der gerade beschriebenen Bedingungen liefert eine Möglichkeit, nach der ein bereits eingetretener Deadlock-Zustand auf einem System entdeckt werden kann. Man realisiert dies durch die Konstruktion eines speziellen Graphen, der anschließend untersucht wird. Die folgenden Aufgaben beschäftigen sich damit.
Im Kapitel zum Philosophenproblem wurde bereits auf die Möglichkeit eines Deadlocks hingewiesen. Die folgenden Aufgaben greifen dieses wieder auf.
</p>
</p>


<br />
<br />
 
=== Aufgabe 1 ===
==== Aufgabe 2 ====
<p>
<p>
{{#index:Betriebsmittelgraph|Belegungs-Anforderungs-Graph|Zyklus im Betriebsmittelgraph|Konstruktion Betriebsmittelgraph}}
<loop_area type="task">
<loop_area type="task">
<loop_task title="Deadlocks erkennen mit Hilfe eines Betriebsmittelgraphen">
<loop_task title="Deadlock-Philosophen" id="5fa978539ca60">
<p>
<p>
Die Universität Oldenburg stellt ein [http://olli.informatik.uni-oldenburg.de/Deadlock/Start.html Tutorial Deadlock-Algorithmen] bereit, bei dem u.a. auf die Erkennung eines Deadlock-Zustands eingegangen wird. Insbesondere kann die Erkennung mit Hilfe zweier Schritte erfolgen:
<cite id="5fa978539ca65">Mandl+2013</cite> geht am Ende von Kapitel 6.2.2 auf das Philosophenproblem und eine dabei bestehende Deadlock-Gefahr ein.
* Schritt 1: [http://olli.informatik.uni-oldenburg.de/Deadlock/Html/Erkennung1_Aufbau.html Konstruktion eines Betriebsmittelgraphen]
* Schritt 2: [http://olli.informatik.uni-oldenburg.de/Deadlock/Html/Erkennung1_Zyklus.html Überprüfung eines Betriebsmittelgraphen auf Zyklen]
</p>
</p>
<p>
<p>
Mache dich mit diesem Tutorial vertraut!
Erläutere:
* Unter welcher Bedingung tritt bei den speisenden Philosophen ein Deadlock-Zustand ein?
* Welche Rolle spielt eine [[Das_Problem_des_ung%C3%BCnstigsten_Moments#Definition:_Atomare_Aktion|atomare Aktion]] dabei?
</p>
</p>
<p>
<small>Ein ''Betriebsmittelgraph'' wird in gängiger Literatur alternativ auch ''Belegungs-Anforderungs-Graph'' genannt.
</small></p>
</loop_task>
</loop_task>
</loop_area>
</loop_area>
Zeile 98: Zeile 66:


<br />
<br />
==== Aufgabe 3 ====
 
=== Aufgabe 2 ===
<p>
<p>
<loop_area type="task">
<loop_area type="task">
<loop_task title="Zeichne den Betriebsmittelgraph und erkenne den Deadlock!">
<loop_task title="Applet zum Philisophenproblem" id="5fa978539ca6b">
<p>
<p>
Gegeben seien die Prozesse ''P1'' bis ''P5'' und die Ressourcen ''Drucker'', ''Plotter'', ''Modem'', ''Magnetbandlaufwerk'' sowie ''Diskettenlaufwerk'' und ''CD-ROM-Laufwerk''. Jede Ressource sei genau einmal vorhanden.
An der FH Köln wird ein [http://www.nt.fh-koeln.de/fachgebiete/inf/diplom/semwork/ Semaphor Workshop] mit Java-Applets bereitgestellt, anhand derer das Philosophenproblem mit Hilfe von insgesamt fünf Semaphoren nachvollzogen werden kann.
</p>
</p>
<p>
<p>
Aktuell besteht folgende Ressourcenzuteilung und -anforderung:
<small>http://www.nt.fh-koeln.de/fachgebiete/inf/diplom/semwork/beispiele/phil/phil.html</small>
* ''P1'' belegt ''Plotter'' und fordert ''Diskettenlaufwerk'' an.
* ''P2'' belegt ''Magnetbandlaufwerk'' und fordert ''Plotter'' und ''Modem'' an.
* ''P3'' belegt ''Modem'' und fordert ''Drucker'' an.
* ''P4'' belegt ''Drucker'' und fordert ''CD-ROM-Laufwerk'' an.
* ''P5'' belegt ''Diskettenlaufwerk'' und fordert ''Magnetbandlaufwerk'' an.
</p>
</p>
<p>
<p>
Zeichne den Betriebsmittelgraph! Achte dabei auf die Pfeilrichtungen!
Erzeuge in dem Applet einen Deadlock!
</p>
</p>
<p>
<p>
Offensichtlich liegt hier ein Deadlock vor.
<small>Falls das Java-Applet in deinem Browser nicht startet, musst du eventuell die [[Java-Applets|Java-Sicherheitseinstellungen]] anpassen. Trage dort ein: http://www.nt.fh-koeln.de</small>
* Woran ist dies im Betriebsmittelgraphen erkennbar?
* Welche Prozesse sind daran beteiligt?
</p>
</p>
</loop_task>
</loop_task>
Zeile 127: Zeile 89:
<br />
<br />
<p>
<p>
Wie man sieht, hilft der Betriebsmittelgraph tatsächlich bei der Erkennung eines Deadlocks. Aber:
== So geht es weiter: ==
</p>
<p>
<loop_area type="notice">
<p>
Wenn du die letzte Aufgabe zum Betriebsmittelgraphen durchgeführt hast, dann hast du ('''ein Mensch!''') den Deadlock erkannt.
</p>
<p>
Eigentlich ist es aber die Aufgabe '''des Betriebssystems''' einen Deadlock zu erkennen!
</p>
</loop_area>
</p>
 
<p>
Die Frage ist also:
</p>
</p>
<p>
<loop_area type="question">
<p>
<p>
Kann '''ein Betriebssystem''' auch einen Betriebsmittelgraphen konstruieren und einen Zyklus darin erkennen?
<loop_area type="arrangement"><loop_toc> </loop_toc></loop_area>
</p>
</loop_area>
</p>
 
<p>
Die Antwort ist: Ja, das geht!
</p>
<p>
Prof. Dr. [http://www2.informatik.hu-berlin.de/~hs/ Holger Schlingloff] vom Institut für Informatik der Humboldt-Universität zu Berlin geht darauf in seinem Aufsatz [http://www-i1.informatik.rwth-aachen.de/~algorithmus/algo35.php Zyklensuche] <small>(hier auch als [http://www-i1.informatik.rwth-aachen.de/~algorithmus/Algorithmen/algo35/algo35.pdf PDF])</small> ein.
</p>
<p>
<loop_area type="notice">
<p>
Es wird an dieser Stelle nicht näher darauf eingegangen, wie die Graphenkonstruktion (bzw. -repräsentation) im Rechner, sowie die anschließende Zyklensuche abläuft.
</p>
<p>
Es sei aber darauf verwiesen, dass diese Tätigkeit eine Reihe anderer Dinge benutzt, die für Studierende an Hochschulen üblicherweise in Vorlesungen zur ''Mathematik'' oder zu ''Algorithmen und Datenstrukturen'' behandelt werden.
</p>
<p>
Falls du diese Vorlesungen bereits gehört hast, kommen dir diese Stichwörter vielleicht bekannt vor: Adjazenzmatrix, Nachbarschaftsliste, Rekursion, Tiefensuche, Breitensuche.
</p>
</loop_area>
</p>
 
<br />
<p>
Es ist jetzt also klar, dass ein Betriebssystem die folgenden beiden Dinge tun muss, um einen gegebenenfalls vorhandenen Deadlock-Zustand zu erkennen:
# Konstruiere den aktuellen Betriebsmittelgraphen.
# Überprüfe den Graphen auf einen Zyklus.
</p>
 
<p>
Falls ein Zyklus erkannt wird, so liegt ein Deadlock vor, und es können auch die beteiligten Prozesse und Ressourcen identifiziert werden.
</p>
<p>
Falls kein Zyklus erkannt wird, so besteht die Gewissheit, dass "alles in Ordnung" ist, d.h. es liegt kein Deadlock vor.
</p>
 
<br />
==== Aufgabe 4 ====
<p>
<loop_area type="task">
<loop_task title="Was tun bei erkanntem Deadlock?">
<p>
Was sollte das Betriebssystem tun, wenn es einen Deadlock erkannt und die zugehörigen Prozesse und Betriebsmittel identifiziert hat?
</p>
<p>
Überlege, recherchiere und diskutiere in deiner Lerngruppe! Schätze für jeden Vorschlag auch die möglichen Folgen ab.
</p>
</loop_task>
</loop_area>
</p>
</p>


<br />
<br />
==== Aufgabe 5 ====
== Alternative Webquelle zum Thema ==
<p>
<loop_area type="task">
<loop_task title="Wie oft nach einem Deadlock suchen?">
<p>
Wie oft sollte ein Betriebssystem die Suche nach einem Deadlock durchführen?
* Einmal pro Sekunde?
* Einmal pro Minute?
* Einmal pro Stunde?
* Einmal am Tag?
* etc.
</p>
<p>
Die pragmatischte Antwort lautet immer: "Es kommt drauf an!"
</p>
<p>
<p>
Dann erläutere doch mal: Worauf kommt es an?
<loop_area type="websource">
* Welche Situationen oder Einsatzzwecke für Betriebssysteme sind vorstellbar, bei denen eine Suche nach Deadlocks in kürzeren oder längeren Zeitabständen durchgeführt werden sollte?
* Welche Vor- oder Nachteile hat eine (zu) häufige oder (zu) seltene Suche?
</p>
</loop_task>
</loop_area>
</p>
 
<br />
 
==== Deadlocks ignorieren ====
<p>
<p>
Eine durchaus gängige Methode im Umgang mit Deadlocks ist das Ignorieren:
Operating Systems: Deadlocks<br />
<small>http://www.cs.uic.edu/~jbell/CourseNotes/OperatingSystems/7_Deadlocks.html</small>
</p>
</p>
<p>
<p>
<loop_area type="practice">
[http://www.cs.uic.edu/~jbell/ Dr. John T. Bell]<br />
<p>
Department of Computer Science<br />
"Es gibt keine Deadlocks, weil ich daran glaube, dass es keine Deadlocks gibt!", sagt das Betriebssystem.
University of Illinois, Chicago<br />
</p>
</p>
</loop_area>
</loop_area>
</p>
</p>


<p>
<div class="autoit_do_not_print">
Rechtfertigen kann man diese Haltung, wenn die Wahrscheinlichkeit des Auftretens eines Deadlocks gering ist, und gleichzeitig die Folgen eines aufgetretenen Deadlocks "nicht dramatisch" sind (wie immer man "dramatisch" dann auch definieren möchte).
</p>
<p>
Allgemein ist davon auszugehen, dass die automatische Erkennung und Behandlung von Deadlocks sehr aufwendig, und damit sehr teuer ist.
</p>
 
<br />
<br />
<hr />
<hr />
<sub>Diese Seite steht unter der [http://creativecommons.org/licenses/by/3.0/deed.de Creative Commons Namensnennung 3.0 Unported Lizenz] [http://creativecommons.org/licenses/by/3.0/deed.de http://i.creativecommons.org/l/by/3.0/80x15.png]
<sub>Diese Seite steht unter der [http://creativecommons.org/licenses/by/3.0/deed.de Creative Commons Namensnennung 3.0 Unported Lizenz] [http://creativecommons.org/licenses/by/3.0/deed.de http://i.creativecommons.org/l/by/3.0/80x15.png]
</sub>
</sub>
</div>

Aktuelle Version vom 21. Dezember 2023, 11:11 Uhr

Deadlocks sind eine unangenehme Sache. Sie sollten besser nicht auftreten, aber das kann man leider nicht selbst bestimmen. Zunächst die Definition:


Definition: Deadlock-Zustand

Definition

Eine Menge von Prozessen befindet sich nach Tanenbaum 2009 in einem Deadlock-Zustand, wenn jeder Prozess aus der Menge auf ein Ereignis wartet, das nur ein anderer Prozess aus der Menge auslösen kann.

Wenn sich mehrere Prozesse in einem Deadlock-Zustand befinden, so sagt man auch vereinfachend: Es ist ein Deadlock aufgetreten.

Der englische Betriff Deadlock wird auf deutsch gerne mit Verklemmung übersetzt.


Eine Analogie aus der Realität

In der realen Welt gibt es eine schöne Analogie zum Deadlock-Zustand von Prozessen:

Aus der Praxis

Wenn du dir vorstellen kannst, dass ein Auto im Straßenverkehr einen Prozess repräsentiert, dann zeigt dieses Bild einen Deadlock-Zustand einer Menge von Autos. (Hier gibt es eine kleine Sammlung mit ähnlichen Fotos.)

In Anbetracht dieser Bilder kannst du überlegen, ob die Menge der Prozesszustände noch um einen ergänzt werden sollte. Welcher Zustand ist damit gemeint?


Ein Deadlock beim Philosophenproblem

Im Kapitel zum Philosophenproblem wurde bereits auf die Möglichkeit eines Deadlocks hingewiesen. Die folgenden Aufgaben greifen dieses wieder auf.


Aufgabe 1

Aufgabe

Mandl 2013 geht am Ende von Kapitel 6.2.2 auf das Philosophenproblem und eine dabei bestehende Deadlock-Gefahr ein.

Erläutere:

  • Unter welcher Bedingung tritt bei den speisenden Philosophen ein Deadlock-Zustand ein?
  • Welche Rolle spielt eine atomare Aktion dabei?


Aufgabe 2

Aufgabe

An der FH Köln wird ein Semaphor Workshop mit Java-Applets bereitgestellt, anhand derer das Philosophenproblem mit Hilfe von insgesamt fünf Semaphoren nachvollzogen werden kann.

http://www.nt.fh-koeln.de/fachgebiete/inf/diplom/semwork/beispiele/phil/phil.html

Erzeuge in dem Applet einen Deadlock!

Falls das Java-Applet in deinem Browser nicht startet, musst du eventuell die Java-Sicherheitseinstellungen anpassen. Trage dort ein: http://www.nt.fh-koeln.de


So geht es weiter:


Alternative Webquelle zum Thema