Prozesssynchronisierung: Kritisches Abschnittsproblem im Betriebssystem

Was ist Prozesssynchronisation?

Prozesssynchronisation 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 zur Inkonsistenz der gemeinsam genutzten Daten führen. Daher spiegelt sich die von einem Prozess vorgenommene Änderung nicht unbedingt wider, wenn andere Prozesse auf dieselben gemeinsam genutzten Daten zugegriffen haben. Um solche Dateninkonsistenzen zu vermeiden, müssen die Prozesse miteinander synchronisiert werden.

Wie funktioniert die Prozesssynchronisierung?

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 sindneomit uns auf.

Prozesssynchronisierung funktioniert

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

Bei der Prozesssynchronisierung 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 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

Lösungen für den kritischen Abschnitt

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.

Synchronisationshardware

Manchmal werden die Probleme des kritischen Abschnitts auch durch Hardware gelöst. Einige Betriebssysteme bieten eine Sperrfunktion, bei der ein Prozess beim Betreten des Abschnitts „Kritisch“ eine Sperre erwirbt und die Sperre aufhebt, wenn er ihn verlässt.

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

Synchronisierungshardware ist keine einfache Methode, die für jedermann zu implementieren ist, daher 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.

Semaphor-Lösung

Semaphor 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 atomIC-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

  • Unter Prozesssynchronisation versteht man die Aufgabe, die Ausführung von Prozessen so zu koordinieren, dass keine zwei Prozesse auf dieselben gemeinsamen Daten und Ressourcen zugreifen 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
  • Synchronisierungshardware ist nicht für jeden eine einfach zu implementierende Methode, daher wurde auch die strenge Softwaremethode namens Mutex Locks eingeführt.
  • Semaphore ist ein weiterer Algorithmus oder eine Lösung für das Problem des kritischen Abschnitts.