Prozess SyncHronisierung: Kritisches Abschnittsproblem im Betriebssystem
โก Intelligente Zusammenfassung
Prozess SyncDie Koordinierung von Prozessablรคufen dient dazu, zu verhindern, dass zwei Prozesse gleichzeitig auf dieselben gemeinsam genutzten Daten oder Ressourcen zugreifen. Sie beugt Dateninkonsistenzen in Mehrprozesssystemen vor, indem sie den Eintritt in den kritischen Abschnitt kontrolliert.

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.
Es ist insbesondere in einem Mehrprozesssystem erforderlich, wenn mehrere Prozesse gleichzeitig laufen 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. รnderungen, die von einem Prozess vorgenommen werden, werden daher nicht unbedingt von anderen Prozessen รผbernommen, die auf dieselben Daten zugreifen. Um diese Art von Dateninkonsistenz zu vermeiden, mรผssen die Prozesse miteinander synchronisiert werden.
Wie Prozess SyncFunktioniert die Thronisierung?
Beispielsweise รคndert Prozess A die Daten in einem Speicherbereich, wรคhrend ein anderer Prozess B versucht, die Daten aus diesem Speicherbereich 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 Teils:
- 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 Exit-Abschnitt ermรถglicht es den anderen Prozessen, die im Entry-Abschnitt warten, in den Critical-Abschnitt einzutreten. Er prรผft auรerdem, ob ein Prozess, der seine Ausfรผhrung beendet hat, รผber diesen Abschnitt entfernt werden soll.
- Restabschnitt: Alle anderen Teile des CodeDiejenigen, die nicht im Abschnitt โKritischโ, โEintrittโ und โAusgangโ aufgefรผhrt sind, werden als Restabschnitt bezeichnet.
Was ist ein Problem mit kritischen Abschnitten?
Ein kritischer Abschnitt ist ein Codeabschnitt, auf den nur ein einzelner Prozess zu einem bestimmten Zeitpunkt zugreifen kann. Dieser Abschnitt enthรคlt gemeinsam genutzte 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 einhalten:
- 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 kommt zum Einsatz, wenn sich kein Prozess im kritischen Abschnitt befindet und ein Prozess eintreten mรถchte. Dann entscheiden die Prozesse, die sich nicht im Restabschnitt befinden, innerhalb einer endlichen Zeit, wer eintreten soll.
- Gebundenes Warten: Wenn ein Prozess anfordert, in den kritischen Abschnitt zu gelangen, ist die Anzahl der Prozesse, die in ihren kritischen Abschnitt gelangen kรถnnen, begrenzt. Sobald diese Grenze erreicht ist, muss das System die Anfrage des Prozesses zum Eintritt in seinen kritischen Abschnitt zulassen.
Lรถsungen fรผr den kritischen Abschnitt
In Bearbeitung SyncBei der Chronologie 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 ein weit verbreitetes Verfahren zur Lรถsung von Problemen mit kritischen Abschnitten. Dieser Algorithmus wurde von einem Informatiker namens Peterson entwickelt, daher der Name Petersons Lรถsung.
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 muss zu einem bestimmten Zeitpunkt in den kritischen Abschnitt eintreten.
- Es wird ein FLAG[]-Array der Grรถรe N verwaltet, das standardmรครig auf โfalseโ gesetzt ist. Immer wenn ein Prozess in den kritischen Abschnitt eintreten mรถchte, muss er sein Flag auf โtrueโ setzen. Wenn beispielsweise Pi eintreten mรถchte, setzt er FLAG[i]=TRUE.
- Eine weitere Variable namens TURN gibt die Prozessnummer an, die aktuell darauf wartet, in das CS einzutreten.
- 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: Wenn P2 an Position 2 ist, tritt er in den kritischen Abschnitt ein und verlรคsst diesen bei Position 3, wodurch P3 aus der Warteschleife ausbricht.
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 diese nach dem Verlassen wieder 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 fรผr jeden einfach zu implementieren ist, wurde auch eine strikte 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 Lรถsung
Semaphore Es handelt sich lediglich um eine nicht-negative Variable, die von mehreren Threads gemeinsam genutzt wird. Sie stellt einen weiteren Algorithmus bzw. eine Lรถsung fรผr das Problem des kritischen Abschnitts dar. Es ist ein Signalmechanismus, mit dem ein Thread, der auf ein Semaphor wartet, von einem anderen Thread signalisiert werden kann.
Es verwendet zwei atomare Operationen: 1) Warten und 2) Signal zur Prozesssynchronisation.
Beispiel
WAIT ( S ): while ( S <= 0 ); S = S - 1; SIGNAL ( S ): S = S + 1;


