Was ist Prozesssynchronisation?
Die Prozesssynchronisation ist die Aufgabe, die Ausführung von Prozessen so zu koordinieren, dass keine zwei Prozesse auf dieselben gemeinsam genutzten Daten und Ressourcen zugreifen können.
Es wird insbesondere in einem Multiprozesssystem benötigt, wenn mehrere Prozesse zusammen ausgeführt werden und mehr als ein Prozess gleichzeitig versucht, auf dieselbe gemeinsam genutzte Ressource oder dieselben Daten zuzugreifen.
Dies kann zu Inkonsistenzen bei gemeinsam genutzten Daten führen. Die von einem Prozess vorgenommenen Änderungen spiegeln sich also nicht unbedingt wider, wenn andere Prozesse auf dieselben gemeinsam genutzten Daten zugreifen. Um diese Art von Dateninkonsistenz zu vermeiden, müssen die Prozesse miteinander synchronisiert werden.
In diesem Betriebssystem-Tutorial lernen Sie:
- Was ist Prozesssynchronisation?
- Wie funktioniert die Prozesssynchronisation?
- Abschnitte eines Programms
- Was ist das Problem des kritischen Abschnitts?
- Regeln für den kritischen Abschnitt
- Lösungen für den kritischen Bereich
Wie funktioniert die Prozesssynchronisation?
Beispiel: Prozess A ändert die Daten an einem Speicherort, während ein anderer Prozess B versucht, die Daten von demselben Speicherort zu lesen . Es besteht eine hohe Wahrscheinlichkeit, dass Daten, die vom zweiten Prozess gelesen werden, fehlerhaft sind.
Abschnitte eines Programms
Hier sind vier wesentliche Elemente des kritischen Abschnitts:
- Eingabeabschnitt: Es ist Teil des Prozesses, der über die Eingabe eines bestimmten Prozesses entscheidet.
- Kritischer Abschnitt: In diesem Teil kann ein Prozess die gemeinsam genutzte Variable eingeben und ändern.
- Exit-Bereich: Mit dem Exit-Abschnitt kann der andere Prozess, der im Eingabeabschnitt wartet, in die kritischen Abschnitte eintreten. Außerdem wird überprüft, ob ein Prozess, der seine Ausführung beendet hat, durch diesen Abschnitt entfernt werden soll.
- Restabschnitt: Alle anderen Teile des Codes, die sich nicht im Abschnitt "Kritisch", "Eingang" und "Ausgang" befinden, werden als "Restabschnitt" bezeichnet.
Was ist das Problem des kritischen Abschnitts?
Ein kritischer Abschnitt ist ein Codesegment, auf das ein Signalprozess zu einem bestimmten Zeitpunkt zugreifen kann. Der Abschnitt besteht aus gemeinsam genutzten Datenressourcen, auf die andere Prozesse zugreifen müssen.
- Der Eintrag in den kritischen Abschnitt wird von der Funktion wait () behandelt und als P () dargestellt.
- Der Austritt aus einem kritischen Abschnitt wird durch die Funktion signal () gesteuert, die als V () dargestellt wird.
Im kritischen Bereich kann nur ein einziger Prozess ausgeführt werden. Andere Prozesse, die darauf warten, ihren kritischen Abschnitt auszuführen, müssen warten, bis der aktuelle Prozess seine Ausführung abgeschlossen hat.
Regeln für den kritischen Abschnitt
Der kritische Abschnitt muss alle drei Regeln durchsetzen:
- Gegenseitiger Ausschluss: Der gegenseitige Ausschluss ist eine spezielle Art von binärem Semaphor, mit dem der Zugriff auf die gemeinsam genutzte Ressource gesteuert wird. Es enthält einen Prioritätsvererbungsmechanismus, um Probleme mit der erweiterten Prioritätsinversion zu vermeiden. Es kann nicht mehr als ein Prozess gleichzeitig in seinem kritischen Abschnitt ausgeführt werden.
- Fortschritt: Diese Lösung wird verwendet, wenn sich niemand im kritischen Bereich befindet und jemand daran teilnehmen möchte. Dann sollten die Prozesse, die nicht im Erinnerungsbereich enthalten sind, in einer begrenzten Zeit entscheiden, wer eintreten soll.
- Gebundenes Warten: Wenn ein Prozess eine Anforderung zum Eintritt in einen kritischen Abschnitt stellt, gibt es eine bestimmte Begrenzung für die Anzahl der Prozesse, die in ihren kritischen Abschnitt gelangen können. Wenn das Limit erreicht ist, muss das System zulassen, dass die Anforderung an den Prozess in seinen kritischen Bereich gelangt.
Lösungen für den kritischen Bereich
Bei der Prozesssynchronisation spielt der kritische Abschnitt die Hauptrolle, sodass das Problem gelöst werden muss.
Hier sind einige weit verbreitete Methoden zur Lösung des Problems kritischer Abschnitte.
Peterson-Lösung
Petersons Lösung ist eine weit verbreitete Lösung für Probleme mit kritischen Abschnitten. Dieser Algorithmus wurde von einem Informatiker Peterson entwickelt, weshalb er als Peterson-Lösung bezeichnet wird.
Wenn in dieser Lösung ein Prozess in einem kritischen Zustand ausgeführt wird, führt der andere Prozess nur den Rest des Codes aus, und das Gegenteil kann passieren. Diese Methode stellt auch sicher, dass zu einem bestimmten Zeitpunkt nur ein einziger Prozess im kritischen Bereich ausgeführt wird.
Beispiel
PROCESS PiFLAG[i] = truewhile( (turn != i) AND (CS is !free) ){ wait;}CRITICAL SECTION FLAG[i] = falseturn = j; //choose another process to go to CS
- Angenommen, es gibt N Prozesse (P1, P2,… PN) und jeder Prozess erfordert zu einem bestimmten Zeitpunkt den Eintritt in den kritischen Bereich
- Ein FLAG [] -Array der Größe N wird beibehalten, das standardmäßig false ist. Wenn ein Prozess den kritischen Abschnitt eingeben muss, muss er sein Flag auf true setzen. Wenn Pi beispielsweise eingeben möchte, wird FLAG [i] = TRUE gesetzt.
- Eine andere Variable namens TURN gibt die Prozessnummer an, die derzeit in die CS eingegeben werden soll.
- Der Prozess, der beim Beenden in den kritischen Abschnitt eintritt, würde den TURN in eine andere Zahl aus der Liste der bereitstehenden Prozesse ändern.
- Beispiel: Turn ist 2, dann tritt P2 in den Critical-Bereich ein und beim Verlassen von Turn = 3 bricht P3 aus der Warteschleife aus.
Synchronisationshardware
Manchmal werden die Probleme des kritischen Abschnitts auch durch Hardware gelöst. Einige Betriebssysteme bieten eine Sperrfunktion, bei der ein Prozess beim Aufrufen des Abschnitts "Kritisch" eine Sperre erhält und die Sperre nach dem Verlassen aufgibt.
Wenn also ein anderer Prozess versucht, den kritischen Abschnitt zu betreten, kann er nicht eintreten, da er gesperrt ist. Dies ist nur möglich, wenn es kostenlos ist, indem das Schloss selbst erworben wird.
Mutex-Schlösser
Synchronisationshardware ist keine einfache Methode für alle, daher wurde auch die strenge Softwaremethode Mutex Locks eingeführt.
Bei diesem Ansatz wird im Eingabeabschnitt des Codes ein LOCK über die kritischen Ressourcen erhalten, die innerhalb des kritischen Abschnitts verwendet werden. Im Ausgangsbereich wird diese Sperre aufgehoben.
Semaphorlösung
Semaphor ist einfach eine Variable, die nicht negativ ist und von Threads gemeinsam genutzt wird. Es ist ein anderer Algorithmus oder eine andere Lösung für das Problem des kritischen Abschnitts. Es ist ein Signalisierungsmechanismus und ein Thread, der auf ein Semaphor wartet, das von einem anderen Thread signalisiert werden kann.
Es verwendet zwei atomare Operationen, 1) Warten und 2) Signal für die Prozesssynchronisation.
Beispiel
WAIT ( S ):while ( S <= 0 );S = S - 1;SIGNAL ( S ):S = S + 1;
Zusammenfassung:
- Die Prozesssynchronisation ist die Aufgabe, die Ausführung von Prozessen so zu koordinieren, dass keine zwei Prozesse auf dieselben gemeinsam genutzten Daten und Ressourcen zugreifen können.
- Vier Elemente des kritischen Abschnitts sind 1) Eingangsabschnitt 2) Kritischer Abschnitt 3) Ausgangsabschnitt 4) Erinnerungsabschnitt
- Ein kritischer Abschnitt ist ein Codesegment, auf das ein Signalprozess zu einem bestimmten Zeitpunkt zugreifen kann.
- Drei Pflichtregeln, die durch kritische Abschnitte durchgesetzt werden müssen, sind: 1) Gegenseitiger Ausschluss 2) Prozesslösung 3) Gebundenes Warten
- Der gegenseitige Ausschluss ist eine spezielle Art von binärem Semaphor, mit dem der Zugriff auf die gemeinsam genutzte Ressource gesteuert wird.
- Die Prozesslösung wird verwendet, wenn sich niemand im kritischen Bereich befindet und jemand dies wünscht.
- In einer gebundenen Wartelösung gibt es eine Begrenzung dafür, wie viele andere Prozesse in ihren kritischen Abschnitt gelangen können, nachdem ein Prozess eine Anforderung zum Einstieg in seinen kritischen Bereich gestellt hat.
- Petersons Lösung ist eine weit verbreitete Lösung für Probleme mit kritischen Abschnitten.
- Probleme des kritischen Abschnitts werden auch durch Synchronisation der Hardware gelöst
- Synchronisationshardware ist keine einfache Methode für alle, daher wurde auch die strenge Softwaremethode Mutex Locks eingeführt.
- Semaphor ist ein anderer Algorithmus oder eine Lösung für das Problem des kritischen Abschnitts.