Wat is processynchronisatie?
Processynchronisatie is de taak om de uitvoering van processen zo te coördineren dat geen twee processen toegang hebben tot dezelfde gedeelde gegevens en bronnen.
Het is vooral nodig in een systeem met meerdere processen wanneer meerdere processen tegelijkertijd worden uitgevoerd en meer dan één proces tegelijkertijd toegang probeert te krijgen tot dezelfde gedeelde bron of gegevens.
Dit kan leiden tot inconsistentie van gedeelde gegevens. De wijziging die door het ene proces is aangebracht, wordt dus niet noodzakelijk weerspiegeld wanneer andere processen toegang hebben gekregen tot dezelfde gedeelde gegevens. Om dit soort inconsistentie van gegevens te voorkomen, moeten de processen met elkaar worden gesynchroniseerd.
In deze handleiding voor het besturingssysteem leert u:
- Wat is processynchronisatie?
- Hoe werkt processynchronisatie?
- Secties van een programma
- Wat is een kritiek sectieprobleem?
- Regels voor kritieke sectie
- Oplossingen voor de kritische sectie
Hoe werkt processynchronisatie?
Proces A verandert bijvoorbeeld de gegevens op een geheugenlocatie terwijl een ander proces B probeert de gegevens van dezelfde geheugenlocatie te lezen . De kans is groot dat gegevens die door het tweede proces worden gelezen, onjuist zijn.
Secties van een programma
Hier zijn vier essentiële elementen van de kritieke sectie:
- Invoersectie: het maakt deel uit van het proces dat de invoer van een bepaald proces beslist.
- Kritieke sectie: met dit deel kan één proces de gedeelde variabele invoeren en wijzigen.
- Exit-sectie: met de Exit-sectie kan het andere proces dat wacht in de entry-sectie, de kritieke secties binnengaan. Het controleert ook of een proces dat de uitvoering heeft voltooid, moet worden verwijderd via deze sectie.
- Resterende sectie: Alle andere delen van de Code, die niet in de sectie Critical, Entry en Exit staan, staan bekend als de sectie Rest.
Wat is een kritiek sectieprobleem?
Een kritieke sectie is een codesegment waartoe toegang kan worden verkregen via een signaalproces op een specifiek tijdstip. De sectie bestaat uit gedeelde gegevensbronnen die door andere processen moesten worden benaderd.
- De toegang tot de kritieke sectie wordt afgehandeld door de functie wait () en wordt weergegeven als P ().
- Het verlaten van een kritieke sectie wordt bestuurd door de functie signal (), weergegeven als V ().
In de kritieke sectie kan slechts één proces worden uitgevoerd. Andere processen die wachten om hun kritieke sectie uit te voeren, moeten wachten tot het huidige proces de uitvoering ervan heeft voltooid.
Regels voor kritieke sectie
De kritieke sectie moet alle drie de regels afdwingen:
- Wederzijdse uitsluiting: wederzijdse uitsluiting is een speciaal type binaire semafoor dat wordt gebruikt om de toegang tot de gedeelde bron te regelen. Het bevat een mechanisme voor overerving van prioriteit om problemen met uitgebreide prioriteitsinversie te voorkomen. Er kan niet meer dan één proces tegelijk in zijn kritieke sectie worden uitgevoerd.
- Voortgang: deze oplossing wordt gebruikt als niemand zich in de kritieke sectie bevindt, en iemand wil erin. Dan moeten die processen die niet in hun herinneringssectie staan, binnen een bepaalde tijd beslissen wie er naar binnen moet.
- Bound Waiting: Wanneer een proces een verzoek doet om in een kritieke sectie te komen, is er een specifieke limiet aan het aantal processen dat in hun kritieke sectie kan komen. Dus wanneer de limiet is bereikt, moet het systeem verzoeken aan het proces toestaan om in zijn kritieke sectie te komen.
Oplossingen voor de kritische sectie
Bij processynchronisatie speelt de kritieke sectie de hoofdrol, zodat het probleem moet worden opgelost.
Hier zijn enkele veelgebruikte methoden om het kritieke sectieprobleem op te lossen.
Peterson-oplossing
Peterson's oplossing is een veel gebruikte oplossing voor kritieke sectieproblemen. Dit algoritme is ontwikkeld door een computerwetenschapper Peterson en daarom wordt het genoemd als een Peterson-oplossing.
In deze oplossing, wanneer een proces in een kritieke toestand wordt uitgevoerd, voert het andere proces alleen de rest van de code uit, en het tegenovergestelde kan gebeuren. Deze methode helpt ook om ervoor te zorgen dat slechts één proces op een bepaald moment in de kritieke sectie wordt uitgevoerd.
Voorbeeld
PROCESS PiFLAG[i] = truewhile( (turn != i) AND (CS is !free) ){ wait;}CRITICAL SECTION FLAG[i] = falseturn = j; //choose another process to go to CS
- Stel dat er N processen zijn (P1, P2, ... PN) en dat elk proces op een bepaald moment de kritieke sectie moet binnengaan
- Er wordt een FLAG [] -array met de grootte N bijgehouden, die standaard false is. Dus wanneer een proces de kritieke sectie moet betreden, moet het zijn vlag als waar instellen. Als Pi bijvoorbeeld wil invoeren, wordt FLAG [i] = TRUE ingesteld.
- Een andere variabele genaamd TURN geeft het procesnummer aan dat momenteel wacht om de CS binnen te gaan.
- Het proces dat tijdens het afsluiten de kritieke sectie binnengaat, zou de TURN veranderen in een ander nummer uit de lijst met gereedstaande processen.
- Voorbeeld: beurt is 2, dan komt P2 in de sectie Kritiek en bij het verlaten van beurt = 3 en daarom breekt P3 uit de wachtlus.
Synchronisatiehardware
Soms worden de problemen van de kritieke sectie ook opgelost door hardware. Sommige besturingssystemen bieden een vergrendelingsfunctionaliteit waarbij een proces een vergrendeling verkrijgt bij het betreden van de sectie Kritiek en de vergrendeling vrijgeeft nadat deze is verlaten.
Dus wanneer een ander proces probeert de kritieke sectie binnen te gaan, kan het niet binnenkomen omdat het is vergrendeld. Het kan dit alleen doen als het gratis is door het slot zelf te verwerven.
Mutex-sloten
Synchronisatiehardware is geen eenvoudige methode om voor iedereen te implementeren, daarom werd ook de strikte softwaremethode bekend als Mutex Locks geïntroduceerd.
Bij deze benadering wordt in het invoergedeelte van de code een LOCK verkregen over de kritieke bronnen die binnen de kritieke sectie worden gebruikt. In het uitgangsgedeelte wordt dat slot vrijgegeven.
Semafoor oplossing
Semafoor is gewoon een variabele die niet negatief is en wordt gedeeld tussen threads. Het is een ander algoritme of oplossing voor het kritieke sectieprobleem. Het is een signaleringsmechanisme en een draad die wacht op een seinpaal, die kan worden gesignaleerd door een andere draad.
Het gebruikt twee atomaire bewerkingen, 1) wacht en 2) signaal voor de processynchronisatie.
Voorbeeld
WAIT ( S ):while ( S <= 0 );S = S - 1;SIGNAL ( S ):S = S + 1;
Overzicht:
- Processynchronisatie is de taak om de uitvoering van processen zo te coördineren dat geen twee processen toegang hebben tot dezelfde gedeelde gegevens en bronnen.
- Vier elementen van kritieke sectie zijn 1) Invoersectie 2) Kritische sectie 3) Exitsectie 4) Herinneringssectie
- Een kritieke sectie is een codesegment waartoe toegang kan worden verkregen via een signaalproces op een specifiek tijdstip.
- Drie must-regels die per kritische sectie moeten worden afgedwongen zijn: 1) wederzijdse uitsluiting 2) procesoplossing 3) gebonden wachten
- Wederzijdse uitsluiting is een speciaal type binaire semafoor dat wordt gebruikt om de toegang tot de gedeelde bron te regelen.
- Procesoplossing wordt gebruikt wanneer niemand zich in de kritieke sectie bevindt en iemand wil naar binnen.
- Bij een oplossing voor gebonden wachten, nadat een proces een verzoek heeft gedaan om in zijn kritieke sectie te komen, is er een limiet voor het aantal andere processen dat in hun kritieke sectie kan komen.
- Peterson's oplossing is een veel gebruikte oplossing voor kritieke sectieproblemen.
- Problemen van de kritieke sectie worden ook opgelost door hardware te synchroniseren
- Synchronisatiehardware is niet voor iedereen een eenvoudige methode om te implementeren, daarom werd ook de strikte softwaremethode Mutex Locks geïntroduceerd.
- Semafoor is een ander algoritme of oplossing voor het kritieke sectieprobleem.