Proces Syncronisatie: kritiek sectieprobleem in het besturingssysteem
Wat is proces Synckroning?
Proces Synckroning is de taak om de uitvoering van processen zo te coördineren dat geen twee processen toegang kunnen hebben tot dezelfde gedeelde gegevens en bronnen.
Het is vooral nodig in een systeem met meerdere processen wanneer meerdere processen samen 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 data. Dus de wijziging die door één proces is gemaakt, wordt niet noodzakelijkerwijs weerspiegeld wanneer andere processen dezelfde gedeelde data benaderen. Om dit type inconsistentie van data te voorkomen, moeten de processen met elkaar worden gesynchroniseerd.
Hoe proces Syncronisatie Werkt?
Proces A verandert bijvoorbeeld de gegevens op een geheugenlocatie terwijl een ander proces B de gegevens uit de geheugenlocatie probeert te lezen dezelfde geheugenlocatie. Er is een grote kans dat de door het tweede proces gelezen gegevens onjuist zijn.
Secties van een programma
Hier zijn vier essentiële elementen van het kritische gedeelte:
- Toegangssectie: Het maakt deel uit van het proces dat beslist over de toegang tot een bepaald proces.
- Kritieke sectie: Met dit onderdeel kan één proces de gedeelde variabele invoeren en wijzigen.
- Uitgangssectie: Met de Exit-sectie kan het andere proces dat in de Entry-sectie wacht, de kritieke secties betreden. Het controleert ook of een proces dat zijn uitvoering heeft voltooid, via deze sectie moet worden verwijderd.
- Resterende sectie: Alle andere delen van de Code, die niet in de sectie Kritiek, Binnenkomst en Uitgang staan, staan bekend als de Overige sectie.
Wat is een kritiek sectieprobleem?
Een kritieke sectie is een codefragment dat op een specifiek tijdstip toegankelijk is voor een signaalproces. De sectie bestaat uit gedeelde gegevensbronnen waartoe andere processen toegang moesten krijgen.
- 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 signal()-functie, weergegeven als V().
In het kritieke gedeelte kan slechts één proces worden uitgevoerd. Andere processen, die wachten om hun kritieke sectie uit te voeren, moeten wachten totdat het huidige proces de uitvoering ervan heeft voltooid.
Regels voor kritieke sectie
De kritieke sectie moet alle drie de regels handhaven:
- Wederzijdse uitsluiting: Wederzijdse uitsluiting is een speciaal type binaire semafoor dat wordt gebruikt voor het controleren van de toegang tot de gedeelde bron. Het omvat een mechanisme voor prioriteitsovererving om uitgebreide problemen met prioriteitsinversie te voorkomen. Er kan niet meer dan één proces tegelijk in de kritieke sectie worden uitgevoerd.
- Voortgang: Deze oplossing wordt gebruikt wanneer niemand zich in de kritieke sectie bevindt en iemand wel naar binnen wil. Vervolgens moeten de processen die niet in hun herinneringssectie staan, binnen een beperkte tijd beslissen wie er naar binnen mag.
- Gebonden wachten: Wanneer een proces een verzoek doet om in de kritieke sectie te komen, is er een specifieke limiet voor het aantal processen dat in de kritieke sectie kan komen. Wanneer de limiet is bereikt, moet het systeem dus toestaan dat verzoeken aan het proces in de kritieke sectie terechtkomen.
Oplossingen voor het kritieke gedeelte
In proces Syncronisatie, kritische sectie speelt de hoofdrol, zodat het probleem moet worden opgelost.
Hier zijn enkele veelgebruikte methoden om het kritieke sectieprobleem op te lossen.
Peterson-oplossing
De oplossing van Peterson is een veelgebruikte oplossing voor kritieke sectieproblemen. Dit algoritme is ontwikkeld door computerwetenschapper Peterson en wordt daarom de oplossing van Peterson genoemd.
Wanneer een proces in deze oplossing in een kritieke toestand wordt uitgevoerd, voert het andere proces alleen de rest van de code uit en kan het tegenovergestelde gebeuren. Deze methode zorgt er ook voor dat er op een bepaald tijdstip slechts één proces in de kritieke sectie wordt uitgevoerd.
Voorbeeld
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
- Stel dat er N processen zijn (P1, P2, ... PN) en dat elk proces op een bepaald moment de kritieke sectie moet betreden
- Er wordt een FLAG[]-array met grootte N onderhouden, die standaard onwaar is. Dus telkens wanneer een proces de kritieke sectie moet betreden, moet het zijn vlag op waar zetten. Als Pi bijvoorbeeld wil invoeren, wordt FLAG[i]=TRUE ingesteld.
- Een andere variabele genaamd TURN geeft het procesnummer aan dat momenteel in de CS wil worden ingevoerd.
- Het proces dat tijdens het verlaten 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 kritieke sectie en bij het verlaten van beurt=3 breekt P3 uit de wachtlus.
Syncronisatie hardware
Soms worden de problemen van de Critical Section ook door hardware opgelost. Sommige besturingssystemen bieden een lock-functionaliteit waarbij een Process een lock krijgt bij het betreden van de Critical section en de lock weer vrijgeeft na het verlaten ervan.
Dus wanneer een ander proces de kritieke sectie probeert binnen te komen, kan het niet binnenkomen omdat het is vergrendeld. Dit kan hij alleen doen als hij gratis is door het slot zelf te verwerven.
Mutex-sloten
Syncronisatiehardware is geen eenvoudige methode om voor iedereen te implementeren, dus werd ook een strikte softwaremethode geïntroduceerd, bekend als Mutex Locks.
Bij deze benadering wordt in het invoergedeelte van de code een LOCK verkregen over de kritieke bronnen die in het kritieke gedeelte worden gebruikt. In het uitgangsgedeelte wordt dat slot ontgrendeld.
Semaphore Het resultaat
Semaphore is eenvoudigweg een variabele die niet-negatief is en wordt gedeeld tussen threads. Het is een ander algoritme of een oplossing voor het kritieke sectieprobleem. Het is een signaleringsmechanisme en een draad die wacht op een semafoor, die kan worden gesignaleerd door een andere draad.
Er worden twee atomaire bewerkingen gebruikt: 1) wachten en 2) signaal voor de processynchronisatie.
Voorbeeld
WAIT ( S ): while ( S <= 0 ); S = S - 1; SIGNAL ( S ): S = S + 1;
Samenvatting
- Processynchronisatie is de taak om de uitvoering van processen zodanig te coördineren dat geen twee processen toegang hebben tot dezelfde gedeelde gegevens en bronnen.
- Vier elementen van het kritische gedeelte zijn 1) Ingangsgedeelte 2) Kritieke gedeelte 3) Uitgangsgedeelte 4) Herinneringsgedeelte
- Een kritieke sectie is een codefragment dat op een specifiek tijdstip toegankelijk is voor een signaalproces.
- Drie 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 voor het controleren van de toegang tot de gedeelde bron.
- Procesoplossing wordt gebruikt als er niemand in de kritieke sectie is en iemand wel naar binnen wil.
- Bij een gebonden wachtoplossing is er, nadat een proces een verzoek heeft ingediend om in zijn kritieke sectie te komen, een limiet voor het aantal andere processen dat in zijn kritieke sectie kan komen.
- De oplossing van Peterson is een veelgebruikte oplossing voor kritieke sectieproblemen.
- Problemen van de kritieke sectie worden ook opgelost door synchronisatie van hardware
- Syncronisatiehardware is niet voor iedereen eenvoudig te implementeren, daarom werd ook de strikte softwaremethode, bekend als Mutex Locks, geïntroduceerd.
- Semaphore is een ander algoritme of oplossing voor het kritieke sectieprobleem.