(2) Linux-Systemvorschriften: Alle verwaisten Prozesse werden zu untergeordneten Prozessen eines speziellen Prozesses (Prozess 1, der der Init-Prozess ist).
5. Was sind die Multi-Thread-Synchronisationsmechanismen?(1).bss
section: Speichert nicht initialisierte globale Variablen und statische Variablen, die auf 0 initialisiert sind. .bss
段:存储未初始化的、初始化为0的全局变量和静态变量。
(2).data
.data
section: Speichern Sie globale Variablen, statische Variablen und konstante Konstanten, die nicht auf 0 initialisiert sind. Programmierer verwenden malloc im Programm, um dynamisch Speicher aus dem Heap-Speicher des virtuellen Speichers zu beantragen, und verwenden free, um den Speicher freizugeben. Wenn das Programm eine große Anzahl von malloc/freien Vorgängen hat und über einen längeren Zeitraum ausgeführt wird, ist der Heap-Speicherplatz des virtuellen Speichers anfällig für Speicherfragmentierung, kann aber die Zuweisungsanforderung von malloc nicht erfüllen. Die Speicherfragmentierung wird in externe Fragmentierung und interne Fragmentierung unterteilt. Die folgende Abbildung beschreibt die Speicherzuweisung eines Teils des Heap-Speichers. Der Heap-Speicher ist in viele Zuweisungsblöcke in Einheiten von 4 Bytes unterteilt. Die weißen Blöcke stellen den freien Speicher dar, und die hellblauen und dunkelblauen Blöcke stellen den zugewiesenen Speicher dar. Gehen Sie davon aus, dass die kleinste Einheit der Speicherzuweisung ein Zuweisungsblock (4 Bytes) ist.
(1) Semaphoren werden für die Thread-Synchronisation und Mutex-Sperren für den gegenseitigen Thread-Ausschluss verwendet.
(2) Das Semaphor kann eine nicht negative Ganzzahl sein, die die Multithread-Synchronisation mehrerer ähnlicher Ressourcen realisieren kann; der Mutex kann nur 0/1 sein, was nur für den gegenseitigen ausschließlichen Zugriff auf eine Ressource verwendet werden kann.
(3) Das Semaphor kann von einem Thread freigegeben und von einem anderen Thread erhalten werden. Das Sperren und Entsperren des Mutex muss jeweils von demselben Thread verwendet werden, und mehrere Threads müssen bei Verwendung mehrerer Mutexe auf die einheitliche Reihenfolge achten. Andernfalls kann es zu einem Deadlock kommen.
Was sind die vier notwendigen Bedingungen für einen Deadlock?
(1)Bedingung zum gegenseitigen Ausschluss: Eine Ressource kann jeweils nur von einem Prozess verwendet werden, und andere Prozesse können nur warten.
(2)Anforderungs- und Haltebedingungen: Der Prozess hat mindestens eine Ressource erhalten, hat aber eine neue Ressourcenanforderung gestellt und die Ressource ist bereits von anderen Prozessen belegt Die erhaltene Ressource ist immer noch „Halten“.
(3)Unentbehrlicher Zustand: Die von einem Prozess erhaltenen Ressourcen können nicht von anderen Prozessen entzogen werden und können nur von ihm selbst freigegeben werden.
(4) Zyklische Wartebedingung: Mehrere Prozesse bilden eine Beziehung des zyklischen Wartens auf Ressourcen von Ende zu Ende.
Hinweis: Die oben genannten vier Bedingungen sind unabdingbar.
Wie gehe ich mit Deadlocks um?
(1) Deadlock verhindern: Durch das Festlegen einiger Einschränkungen werden die notwendigen Bedingungen für einen Deadlock zerstört.
(2) Deadlock vermeiden: Verwenden Sie während des Ressourcenzuweisungsprozesses eine Methode, um zu verhindern, dass das System in einen unsicheren Zustand eintritt, und vermeiden Sie so einen Deadlock.
(3) Deadlock erkennen und entfernen: Lassen Sie das Auftreten eines Deadlocks zu, ergreifen Sie jedoch nach bestandener Systemerkennung einige Maßnahmen, um den Deadlock zu beseitigen.
Wie verhindert man einen Deadlock?
(1)Fehlerhafte „Anforderungs- und Haltebedingungen“:
①Statische Zuweisung, das heißt, jeder Prozess beansprucht alle Ressourcen, die er benötigt, wenn er mit der Ausführung beginnt:
②Dynamische Zuteilung, das heißt, jeder Prozess belegt keine Systemressourcen, wenn er die Ressourcen beantragt, die er benötigt.
(2)Zerstören Sie den „unveräußerlichen Zustand“: Während der Blockierungs- und Wartezeit eines Prozesses werden die von ihm belegten Ressourcen implizit freigegeben und dann von anderen Prozessen verwendet, und die blockierten und wartenden Ressourcen können erst neu gestartet werden, nachdem alle erforderlichen Ressourcen erhalten wurden Ressourcen.
(3)Zerstören Sie die „zyklische Wartebedingung“: Verwenden Sie die geordnete Zuweisung von Ressourcen und nummerieren Sie alle Ressourcen mit einer größeren Anzahl. Ein Prozess kann nur dann eine größere Anzahl erhalten, wenn er eine Ressource mit einer kleineren Anzahl erhält Nummer. Nummerierte Ressourcen
Das obige ist der detaillierte Inhalt vonHochfrequenztestpunkte für Betriebssysteminterviews. Für weitere Informationen folgen Sie bitte anderen verwandten Artikeln auf der PHP chinesischen Website!