Prozess SyncHronisierung: Kritisches Abschnittsproblem im Betriebssystem
Was ist Prozess? SyncChronisierung?
Prozess SyncHronisierung ist die Aufgabe, die Ausführung von Prozessen so zu koordinieren, dass keine zwei Prozesse auf die gleichen gemeinsamen Daten und Ressourcen zugreifen können.
Dies wird insbesondere in einem Multiprozesssystem benötigt, wenn mehrere Prozesse gleichzeitig ausgeführt werden und mehr als ein Prozess gleichzeitig versucht, Zugriff auf dieselben gemeinsam genutzten Ressourcen oder Daten zu erhalten.
Dies kann zu Inkonsistenzen bei gemeinsam genutzten Daten führen. Die von einem Prozess vorgenommenen Änderungen werden also nicht unbedingt wiedergegeben, wenn andere Prozesse auf dieselben gemeinsam genutzten Daten zugreifen. Um diese Art von Dateninkonsistenz zu vermeiden, müssen die Prozesse miteinander synchronisiert werden.
Wie Prozess SyncFunktioniert die Thronisierung?
Beispiel: Prozess A ändert die Daten an einem Speicherort, während ein anderer Prozess B versucht, die Daten daraus zu lesen gleich Speicherort. Es besteht eine hohe Wahrscheinlichkeit, dass die vom zweiten Prozess gelesenen Daten fehlerhaft sind.
Abschnitte eines Programms
Hier sind vier wesentliche Elemente des kritischen Abschnitts:
- Eintragsbereich: Es ist ein Teil des Prozesses, der über den Eintritt in einen bestimmten Prozess entscheidet.
- Kritischer Abschnitt: Dieser Teil ermöglicht es einem Prozess, die gemeinsam genutzte Variable einzugeben und zu ändern.
- Ausgangsbereich: Der Ausgangsabschnitt ermöglicht es den anderen Prozessen, die im Eingangsabschnitt warten, in die kritischen Abschnitte einzutreten. Außerdem wird überprüft, ob ein Prozess, dessen Ausführung abgeschlossen ist, über diesen Abschnitt entfernt werden sollte.
- Restabschnitt: Alle anderen Teile des Kodex, die nicht in den Abschnitten „Kritisch“, „Eintritt“ und „Austritt“ enthalten sind, werden als Abschnitt „Rest“ bezeichnet.
Was ist ein Problem mit kritischen Abschnitten?
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 Eintritt in den kritischen Abschnitt wird von der Funktion wait() verarbeitet und als P() dargestellt.
- Der Ausgang aus einem kritischen Abschnitt wird durch die Funktion signal() gesteuert, dargestellt als V().
Im kritischen Abschnitt kann nur ein einzelner Prozess ausgeführt werden. Andere Prozesse, die auf die Ausführung ihres kritischen Abschnitts warten, 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: Gegenseitiger Ausschluss ist eine spezielle Art von binärem Semaphor, der zur Steuerung des Zugriffs auf die gemeinsam genutzte Ressource verwendet wird. Es enthält einen Mechanismus zur Prioritätsvererbung, um erweiterte Probleme bei der Prioritätsumkehr zu vermeiden. In seinem kritischen Abschnitt kann nicht mehr als ein Prozess gleichzeitig ausgeführt werden.
- Progress: Diese Lösung wird verwendet, wenn sich niemand im kritischen Abschnitt befindet und jemand hinein möchte. Dann sollten die Prozesse, die sich nicht in ihrem Erinnerungsbereich befinden, in einer begrenzten Zeit entscheiden, wer hineingehen soll.
- Gebundenes Warten: Wenn ein Prozess eine Anfrage stellt, in den kritischen Abschnitt zu gelangen, gibt es eine bestimmte Grenze für die Anzahl der Prozesse, die in seinen kritischen Abschnitt gelangen können. Wenn also das Limit erreicht ist, muss das System die Anforderung an den Prozess zulassen, in seinen kritischen Abschnitt zu gelangen.
Lösungen für den kritischen Abschnitt
In Bearbeitung SyncDer kritische Abschnitt spielt 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 kritische Abschnittsprobleme. Dieser Algorithmus wurde vom Informatiker Peterson entwickelt und wird daher als Peterson-Lösung bezeichnet.
Wenn bei 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 trägt auch dazu bei, sicherzustellen, dass zu einem bestimmten Zeitpunkt nur ein einziger Prozess im kritischen Abschnitt ausgeführt wird.
Beispiel
PROCESS Pi FLAG[i] = true while( (turn != i) AND (CS is !free) ){ wait; } CRITICAL SECTION FLAG[i] = false turn = 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 Abschnitt
- Es wird ein FLAG[]-Array der Größe N verwaltet, das standardmäßig „false“ ist. Wenn ein Prozess also den kritischen Abschnitt betreten muss, muss er sein Flag auf „true“ setzen. Wenn Pi beispielsweise eintreten möchte, wird FLAG[i]=TRUE gesetzt.
- Eine weitere Variable namens TURN gibt die Prozessnummer an, die derzeit auf die Eingabe in die CS wartet.
- Der Prozess, der beim Verlassen in den kritischen Abschnitt eintritt, würde die TURN in eine andere Nummer aus der Liste der bereiten Prozesse ändern.
- Beispiel: Turn ist 2, dann betritt P2 den kritischen Abschnitt und beim Verlassen Turn=3 und daher bricht P3 aus der Warteschleife aus.
SyncHronisierungshardware
Manchmal werden die Probleme des kritischen Abschnitts auch durch Hardware gelöst. Einige Betriebssysteme bieten eine Sperrfunktion, bei der ein Prozess beim Betreten des kritischen Abschnitts eine Sperre erhält und die Sperre nach dem Verlassen des Abschnitts freigibt.
Wenn also ein anderer Prozess versucht, in den kritischen Abschnitt einzudringen, kann er nicht darauf zugreifen, da er gesperrt ist. Dies ist nur möglich, wenn es durch den Erwerb des Schlosses selbst frei wird.
Mutex-Sperren
SyncDa die Hardware-Hronisierung nicht einfach für jedermann zu implementieren ist, wurde auch eine strenge Softwaremethode namens Mutex Locks eingeführt.
Bei diesem Ansatz wird im Eingabeabschnitt des Codes eine SPERRE für die kritischen Ressourcen erhalten, die im kritischen Abschnitt verwendet werden. Im Ausgangsabschnitt wird diese Sperre aufgehoben.
Semaphore Die Lösung
Semaphore ist einfach eine Variable, die nicht negativ ist und von Threads gemeinsam genutzt wird. Es ist ein weiterer Algorithmus oder eine Lösung für das Problem des kritischen Abschnitts. Es handelt sich um einen Signalmechanismus und einen 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 Prozesssynchronisierung.
Beispiel
WAIT ( S ): while ( S <= 0 ); S = S - 1; SIGNAL ( S ): S = S + 1;
Zusammenfassung
- Bei der Prozesssynchronisierung geht es darum, die Ausführung von Prozessen so zu koordinieren, dass keine zwei Prozesse Zugriff auf dieselben gemeinsam genutzten Daten und Ressourcen haben können.
- Vier Elemente des kritischen Abschnitts sind 1) Eingangsabschnitt, 2) Kritischer Abschnitt, 3) Ausgangsabschnitt und 4) Erinnerungsabschnitt
- Ein kritischer Abschnitt ist ein Codesegment, auf das ein Signalprozess zu einem bestimmten Zeitpunkt zugreifen kann.
- Drei Mussregeln, die von kritischen Abschnitten durchgesetzt werden müssen, sind: 1) Gegenseitiger Ausschluss, 2) Prozesslösung, 3) Gebundenes Warten
- Gegenseitiger Ausschluss ist eine spezielle Art von binärem Semaphor, der zur Steuerung des Zugriffs auf die gemeinsam genutzte Ressource verwendet wird.
- Eine Prozesslösung wird verwendet, wenn sich niemand im kritischen Abschnitt befindet und jemand hinein möchte.
- Bei einer gebundenen Wartelösung gibt es eine Grenze dafür, wie viele andere Prozesse in ihren kritischen Abschnitt gelangen können, nachdem ein Prozess eine Anfrage zum Zugriff auf seinen kritischen Abschnitt gestellt hat.
- Petersons Lösung ist eine weit verbreitete Lösung für kritische Abschnittsprobleme.
- Probleme des kritischen Abschnitts werden auch durch die Synchronisierung der Hardware gelöst
- SyncDa Hronisierungshardware nicht für jedermann einfach zu implementieren ist, wurde auch die strenge Softwaremethode namens Mutex Locks eingeführt.
- Semaphore ist ein anderer Algorithmus oder eine andere Lösung für das kritische Abschnittsproblem.