2024-07-12
한어Русский языкEnglishFrançaisIndonesianSanskrit日本語DeutschPortuguêsΕλληνικάespañolItalianoSuomalainenLatina
04.07.2024: Studiennotizen zur Betriebssystemsynchronisierung und zum gegenseitigen Ausschluss
Gleichzeitige Prozesse oder Programme verlieren ihren Abschluss, wenn sie ausgeführt werden. Das heißt, wenn zwei Programme eine gemeinsame Ressource in separaten Bereichen verwenden, können die Ergebnisse jeder Ausführung unterschiedlich sein.
Der Grund dafür ist, dass wir die gemeinsam genutzte Ressource x, auf die sowohl Programm a als auch Programm b zugreifen müssen, nicht geschützt haben.
Die sich gegenseitig einschränkende Beziehung ist Synchronisation. Ein einfaches Verständnis von Synchronisation besteht darin, dass es eine Reihenfolge bei der Ausführung von Prozessen geben muss.
Die Beziehung, die sich gegenseitig indirekt einschränkt, wird als sich gegenseitig ausschließende Beziehung bezeichnet, z
„Produzenten- und Verbrauchermodell“
Zähler+ +
首先把变量放到寄存器里面
register1 = counter;
接下来对寄存器进行一个自增
register1 = register1 + 1;
再把结果返回到counter里
counter = register1;
Schalter- -
首先把变量放到寄存器里面
register2 = counter;
接下来对寄存器进行一个自减
register2 = register2 - 1;
再把结果返回到counter里
counter = register2;
Lösung: Behandeln Sie den Zähler als kritische Ressource und erlauben Sie dem Prozess, gegenseitig auf den variablen Zähler zuzugreifen (den Synchronisierungsmechanismus erfahren Sie später).
Unabhängig davon, ob es sich um eine hardwarekritische Ressource oder eine softwarekritische Ressource handelt, müssen mehrere Prozesse gegenseitig darauf zugreifen.
Bei diesen Bereichen handelt es sich im Wesentlichen um Codes
Wenn sich kein Prozess im kritischen Abschnitt befindet, bedeutet dies, dass die Ressourcen des kritischen Abschnitts inaktiv sind. Ein Prozess, der den Zugriff auf den kritischen Abschnitt anfordert, sollte sofort in seinen eigenen kritischen Abschnitt eintreten dürfen, um die Ressourcen effektiv zu nutzen.
Wenn ein vorhandener Prozess den kritischen Abschnitt betritt, zeigt dies an, dass auf die kritische Ressource zugegriffen wird. Daher müssen andere Prozesse, die versuchen, in den kritischen Abschnitt einzudringen, warten, um den gegenseitigen Zugriff auf die kritische Ressource sicherzustellen.
Bei Prozessen, die Zugriff auf kritische Ressourcen erfordern, sollten sie sicherstellen, dass sie innerhalb einer begrenzten Zeit in ihren eigenen kritischen Abschnitt gelangen können, um zu vermeiden, dass sie in einen „Warten auf den Tod“-Zustand geraten.
Wenn ein Prozess seinen eigenen kritischen Abschnitt nicht betreten kann, sollte der Prozessor (CPU) sofort freigegeben werden, um zu verhindern, dass der Prozess in einen „Beschäftigt-Warten“-Zustand fällt.
两个进程必须交替进入临界区,若一个进程不再进入临界区,则另一个进程也无法进入临界区,违背了“空闲让进”准则
Die Double-Flag-Erstprüfungsmethode setzt ein boolesches Array-Flag[2], um die Bereitschaft jedes Prozesses zu markieren, den kritischen Abschnitt zu betreten. flag[i]=true bedeutet, dass Pi den kritischen Abschnitt betreten möchte.
- Die while-Schleife entspricht dem Ampelmechanismus
- Das Setzen der Flagge der anderen Partei ist gleichbedeutend mit dem Ändern der Ampel der anderen Partei.
- Da jedoch beide Prozesse zuerst die Flagge prüfen [zuerst auf die Ampel schauen] und beide zunächst falsch sind [beide grüne Ampeln], ist es möglich, dass die beiden Prozesse gleichzeitig die Ampel passieren und gemeinsam in den kritischen Abschnitt gelangen .
Die Nachprüfungsmethode mit doppelter Flagge überprüft die Flagge der anderen Partei und setzt dann ihre eigene. Diese beiden Vorgänge können nicht gleichzeitig ausgeführt werden, sodass die beiden Prozesse möglicherweise gleichzeitig in den kritischen Abschnitt gelangen Es wurde eine Methode entwickelt, die zuerst die eigene Flagge setzt und dann die Flagge der anderen Partei überprüft. Wenn die Flagge der anderen Partei wahr ist, wird andernfalls der kritische Abschnitt eingegeben
Petersons Algorithmus kombiniertEinzelmarkierungsmethodeUndMethode zur Nachprüfung mit doppelter MarkierungDie Idee besteht darin, flag[] zu verwenden, um das sich gegenseitig ausschließende Zugriffsproblem zu lösen, und turn, um das Hungerproblem zu lösen.
Wenn beide Parteien um den Eintritt in den kritischen Abschnitt konkurrieren, kann der Prozess zugelassen werden, um der anderen Partei die Möglichkeit zu geben, in den kritischen Abschnitt einzutreten.
Bevor jeder Prozess den kritischen Abschnitt betritt, setzt er seine eigene Flagge und die Wendeflagge, die eintreten darf. Danach erkennt er gleichzeitig die Flagge und die Wende der anderen Partei, um sicherzustellen, dass nur ein Prozess eintreten darf Beide Parteien beantragen gleichzeitig den Zutritt zum kritischen Abschnitt.
Unterlassener Verzicht auf das Warterecht
Für Software ist es schwierig, das Problem des gegenseitigen Ausschlusses jedes Prozesses vom Eintritt in den kritischen Abschnitt zu lösen, und es gibt große Einschränkungen. Daher stellt der Computer einige spezielle Hardwareanweisungen zur Lösung des Problems bereit.
Der TS-Befehl kann als Funktionsprozess (primitiv) betrachtet werden, dessen Ausführungsprozess unteilbar ist.
Verwenden Sie TS, um kritische Abschnitte zu verwalten und eine Sperre für jede kritische Ressource festzulegen.
Es wird als Swap-Anweisung bezeichnet und dient dazu, den Inhalt zweier Wörter auszutauschen.
Es ist als Ganzzahl S definiert, die zur Darstellung der Anzahl der Ressourcen verwendet wird. Für dieses Ganzzahl-Semaphor gibt es nur drei Operationen: Initialisierung (Zuweisen eines Anfangswerts), Warten (Dekrementieren), Signal (Inkrementieren).
Prozesssynchronisationsmechanismus ohne „Busy Waiting“-Phänomen
- Die Warteoperation entspricht der P-Operation
- Die Signaloperation entspricht der V-Operation
- Nur zwei unterschiedliche Namen, die Funktionen sind genau gleich
- warte(A) = P(A)
- Signal(B) = V(A)
Legen Sie einen sich gegenseitig ausschließenden Semaphor-Mutex = 1 fest und platzieren Sie dann den kritischen Abschnitt für jeden Prozess, um auf kritische Ressourcen zuzugreifen, zwischen Wait (Mutex) und Signal (Mutex).
Setzen Sie ein Synchronisationssemaphor S = 0, sodass zuerst das Anweisungssignal (S) und dann das Warten (S) ausgeführt werden müssen.