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 gegevens. De verandering die door één proces wordt aangebracht, wordt dus niet noodzakelijkerwijs weerspiegeld wanneer andere processen toegang krijgen tot dezelfde gedeelde gegevens. Om dit soort inconsistentie van gegevens te voorkomen, moeten de processen zo zijn syncmet elkaar verzoend.

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 gegevens die door het tweede proces worden gelezen foutief zijnneomet ons op.

Proces Syncronisatie werkt

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

Oplossingen voor het kritieke gedeelte

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 Kritieke Sectie ook hardwarematig opgelost. Sommige besturingssystemen bieden een vergrendelingsfunctionaliteit waarbij een proces een vergrendeling verkrijgt bij het betreden van de kritieke sectie en de vergrendeling vrijgeeft nadat deze deze heeft verlaten.

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.

Semafoor oplossing

seinpaal 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.

Het gebruikt twee atomic-bewerkingen, 1) wachten en 2) signaal voor het proces synckroning.

Voorbeeld

WAIT ( S ):
while ( S <= 0 );
S = S - 1;
SIGNAL ( S ):
S = S + 1;

Samengevat

  • Proces syncHronisatie is de taak van het coördineren van de uitvoering van processen op een manier dat geen twee processen toegang kunnen 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 kritische sectie worden ook opgelost door syncronisatie van hardware
  • Syncronisatiehardware is niet voor iedereen eenvoudig te implementeren, daarom werd ook de strikte softwaremethode, bekend als Mutex Locks, geïntroduceerd.
  • Semafoor is een ander algoritme of oplossing voor het kritieke sectieprobleem.