Was sind die Ursachen für Deadlocks unter Linux?

青灯夜游
Freigeben: 2022-03-21 16:03:35
Original
3222 Leute haben es durchsucht

Die Gründe für einen Deadlock unter Linux sind: 1. Deadlock verursacht durch Konkurrenz um Ressourcen, die nicht verhindert werden können; 2. Deadlock verursacht durch Konkurrenz um verbrauchbare Ressourcen; 3. Deadlock verursacht durch falsche Prozessfortschrittssequenz (wenn der Prozess ausgeführt wird, Anforderungen). und falsche Reihenfolge der Ressourcenfreigabe, was zu einem Prozess-Deadlock führt).

Was sind die Ursachen für Deadlocks unter Linux?

Die Betriebsumgebung dieses Tutorials: Linux5.9.8-System, Dell G3-Computer.

1. Das Konzept des Deadlocks:

Wenn jeder Prozess (oder Thread) in einer Gruppe von Prozessen (oder Threads) wartet, kann dies nur durch andere Prozesse (oder Threads) in der Gruppe verursacht werden Prozesse. Dann ist die Gruppe von Prozessen (oder Threads) blockiert (Deadlock).

2. Gründe für einen Deadlock:

(1) Deadlock verursacht durch Konkurrenz um nicht auf Abruf verfügbare Ressourcen

Zum Beispiel: Deadlock verursacht beim Teilen von Dateien

Es gibt zwei Prozesse P1 und P2 im System Sie sind beide bereit, zwei Dateien F1 und F2 zu schreiben. Bei beiden handelt es sich um wiederverwendbare und nicht präemptive Ressourcen. Wenn Prozess P1 gleichzeitig F1 öffnet, wird Prozess P2 blockiert, weil F2 bereits belegt ist. Wenn P2 Datei F2 öffnen möchte, ist er blockiert Während des Wartens kommt es weiterhin zu einem Deadlock.

(2) Deadlock durch Konkurrenz um Verbrauchsressourcen

Zum Beispiel: Deadlock durch Prozesskommunikation

Es gibt drei Prozesse P1, P2 und P3 im System, m1, m2 und m3 sind drei Verbrauchsmaterialien Ressource. Einerseits generiert Prozess P1 die Nachricht m1 und sendet sie an P2, andererseits empfängt er die Nachricht m3 von P3. Einerseits generiert Prozess P2 die Nachricht m2 und sendet sie an P3, andererseits empfängt er die Nachricht m1 von P1. Ebenso generiert Prozess P3 einerseits die Nachricht m3 und sendet sie an P1 und empfängt andererseits die Nachricht m2 von P2.

Wenn die drei Prozesse zuerst von ihnen selbst generierte Nachrichten senden und dann Nachrichten von anderen empfangen, können sie reibungslos und ohne Deadlock laufen. Wenn die drei Prozesse jedoch zuerst Nachrichten von anderen empfangen, ohne Nachrichten zu generieren, führt das ewige Warten zu einem Deadlock.

(3) Falsche Reihenfolge des Prozessfortschritts führt zu Deadlock: Während des laufenden Prozesses ist die Reihenfolge der Anforderung und Freigabe von Ressourcen unangemessen, was zu einem Prozess-Deadlock führt.

Im Bild oben können die beiden Prozesse reibungslos abgeschlossen werden, wenn Sie in der Reihenfolge von Kurve 2 vorgehen In Kurve 3 können die beiden Prozesse reibungslos abgeschlossen werden. Wenn Sie in der Reihenfolge von Kurve 4 fortfahren, gelangen die beiden Prozesse in den unsicheren Bereich D. Zu diesem Zeitpunkt behält P1 die Ressource R1 und P2 die Ressource R2 In einem unsicheren Zustand kann es zu einem Deadlock kommen.


3. Notwendige Bedingungen für einen Deadlock

(1) Bedingungen für den gegenseitigen Ausschluss. Die von einem Prozess (Thread) angeforderten Ressourcen können innerhalb eines bestimmten Zeitraums nur von einer Prozess- (Thread-)Sperre belegt werden.

(2) Bedingungen anfordern und einhalten. Ein Prozess (Thread) belegt bereits mindestens eine Ressource, es wird jedoch eine neue Ressourcenanforderung gestellt und die Ressource wird von einem anderen Prozess (Thread) belegt.

(3) Nicht-vermeidbare Bedingung (nicht-vermeidbare Bedingung). Von einem Prozess (Thread) erworbene Ressourcen können nicht vorzeitig freigegeben werden, bevor sie aufgebraucht sind.

(4) Schleifenwartezustand (Schleifenwartezustand). Wenn ein Deadlock auftritt, muss ein Prozess (Thread) vorhanden sein – eine kreisförmige Kette von Ressourcen.

4. Deadlock-Vermeidung, Prävention und Lösungen

Deadlock-Vermeidung bedeutet, darauf zu achten, dass es während des Betriebs des Systems nicht zu einem Deadlock kommt.

     Die ersten drei Bedingungen für das Auftreten eines Deadlocks sind die notwendigen Bedingungen für das Auftreten eines Deadlocks, dh die Bedingungen, die erfüllt sein müssen, damit ein Deadlock auftritt, und nicht das Vorhandensein dieser drei Bedingungen Tritt auf jeden Fall auf, solange es logisch vermieden wird. Die vierte Bedingung kann einen Deadlock vermeiden.

Die Grundidee der Deadlock-Vermeidung: Das System prüft dynamisch jede vom Prozess ausgegebene Ressourcenanforderung, die das System erfüllen kann, und entscheidet anhand der Prüfergebnisse, ob das System nach der Zuweisung wahrscheinlich einen Deadlock erleidet. es wird nicht zugewiesen; andernfalls wird es zugewiesen.

(1) Häufig verwendete Methoden zur Vermeidung von Deadlocks:

1. Geordnete Zuweisung von Ressourcen

2. Banker-Algorithmus, Grundidee: Bei der Methode zur Vermeidung von Deadlocks darf der Prozess dynamisch für Ressourcen gelten, aber Das System muss vor der Zuweisung von Ressourcen zunächst die Sicherheit der zugewiesenen Ressourcen berechnen. Wenn die Zuweisung nicht dazu führt, dass das System in einen unsicheren Zustand übergeht, weisen Sie es zu, andernfalls warten Sie.

(2) Vermeidung von Deadlocks:

1. Zerstörung der „unveräußerlichen“ Bedingung: Wenn ein Prozess eine Ressource belegt und dann eine andere Ressource beantragt, diese aber nicht erfüllen kann, verlässt er die ursprünglich belegte Ressource.
Diese Strategie ist komplex und teuer in der Umsetzung. Da einer Ressource nach längerer Nutzung zwangsweise entzogen wird, führt dies dazu, dass die vorherige Arbeitsphase fehlschlägt.
2. Zerstören Sie die Bedingung „Anfordern und Halten“: Übernehmen Sie eine statische Strategie zur einmaligen Ressourcenzuweisung, dh wenden Sie sie auf alle Ressourcen an, bevor der Prozess ausgeführt wird, und führen Sie sie aus, wenn sie erfüllt sind für.
3. Zerstörung der Bedingung des „gegenseitigen Ausschlusses“: Diese Strategie ist nahezu unmöglich, da die gegenseitige Ausschließlichkeit von Ressourcen durch ihre eigene Natur bestimmt wird.
4. Zerstören Sie die Bedingung des „zirkulären Wartens“: Nummerieren Sie alle Ressourcen im System der Reihe nach. Das allgemeine Prinzip ist, dass immer seltenere Ressourcen größere Nummern haben. Wenn ein Prozess Ressourcen beantragt, muss er sich strikt an die Reihenfolge der Ressourcennummern halten, andernfalls weist das System diese nicht zu. Das heißt, ein Prozess kann nur Ressourcen mit einer größeren Anzahl erhalten, wenn er Ressourcen mit einer kleineren Anzahl erhält. Beim Freigeben von Ressourcen sollte dies in absteigender Reihenfolge der Anzahl erfolgen.

(3) Methoden zur Lösung von Deadlocks:

Es gibt derzeit zwei Methoden: Eine besteht darin, das Auftreten eines Deadlocks zu verhindern und die andere darin, das Auftreten eines Deadlocks zuzulassen und ihn dann zu lösen, nachdem er aufgetreten ist.

Es gibt konkret die folgenden 4 Methoden:

1. Verhindern Sie das Auftreten von Deadlocks, indem Sie bestimmte strenge Grenzwerte festlegen, um die Bedingungen für Deadlocks zu zerstören. Diese Methode führt jedoch zu einer geringen Auslastung der Systemressourcen. 2. Vermeiden Sie Deadlocks. Bei der dynamischen Ressourcenzuweisung wird eine Methode verwendet, um zu verhindern, dass das System in einen unsicheren Zustand eintritt, und um einen Deadlock zu vermeiden. Dieser Ansatz erreicht eine höhere Ressourcenauslastung auf Kosten schwächerer Einschränkungen.

3. Deadlock erkennen. Durch die Einrichtung eines Erkennungsmechanismus im System kann das System sofort erkennen, ob tatsächlich ein Deadlock aufgetreten ist, die mit dem Deadlock verbundenen Prozesse und Ressourcen genau bestimmen und dann Maßnahmen ergreifen, um den Deadlock zu beheben.

4. Lösen Sie den Stillstand. Dies ist eine Maßnahme, die mit der Deadlock-Erkennung einhergeht und dazu dient, den Prozess aus dem Deadlock-Zustand zu befreien.

Verwandte Empfehlungen: „

Linux-Video-Tutorial

Das obige ist der detaillierte Inhalt vonWas sind die Ursachen für Deadlocks unter Linux?. Für weitere Informationen folgen Sie bitte anderen verwandten Artikeln auf der PHP chinesischen Website!

Verwandte Etiketten:
Quelle:php.cn
Erklärung dieser Website
Der Inhalt dieses Artikels wird freiwillig von Internetnutzern beigesteuert und das Urheberrecht liegt beim ursprünglichen Autor. Diese Website übernimmt keine entsprechende rechtliche Verantwortung. Wenn Sie Inhalte finden, bei denen der Verdacht eines Plagiats oder einer Rechtsverletzung besteht, wenden Sie sich bitte an admin@php.cn
Beliebte Tutorials
Mehr>
Neueste Downloads
Mehr>
Web-Effekte
Quellcode der Website
Website-Materialien
Frontend-Vorlage
Über uns Haftungsausschluss Sitemap
Chinesische PHP-Website:Online-PHP-Schulung für das Gemeinwohl,Helfen Sie PHP-Lernenden, sich schnell weiterzuentwickeln!