Protsess Synchroniseerimine: OS-i kriitiline jaotisprobleem
โก Nutikas kokkuvรตte
Protsess SyncKronifitseerimine on protsesside tรคitmise koordineerimise รผlesanne nii, et kaks protsessi ei pรครคseks samaaegselt juurde samadele jagatud andmetele vรตi ressursile. See hoiab รคra andmete ebajรคrjekindluse mitmeprotsessilistes sรผsteemides, kontrollides juurdepรครคsu kriitilisse ossa.

Mis on protsess Synchroniseerimine?
Protsess Synchroniseerimine on รผlesanne koordineerida protsesside tรคitmist nii, et kahel protsessil ei oleks juurdepรครคsu samadele jagatud andmetele ja ressurssidele.
See on eriti vajalik mitmeprotsessilises sรผsteemis, kui mitu protsessi tรถรถtavad koos ja rohkem kui รผks protsess pรผรผab samal ajal juurde pรครคseda samale jagatud ressursile vรตi andmetele.
See vรตib viia jagatud andmete ebajรคrjekindluseni. Seega ei kajastu รผhe protsessi tehtud muudatus tingimata siis, kui teised protsessid samadele jagatud andmetele juurde pรครคsevad. Sellise andmete ebajรคrjekindluse vรคltimiseks tuleb protsessid omavahel sรผnkroonida.
Kuidas protsess Synchroniseerimine tรถรถtab?
Nรคiteks protsess A muudab mรคlupesas andmeid, samal ajal kui teine โโprotsess B รผritab andmeid mรคlust lugeda. sama mรคlu asukoht. On suur tรตenรคosus, et teise protsessi poolt loetud andmed on ekslikud.
Programmi jaotised
Siin on kriitilise osa neli olulist elementi:
- Sisenemise jaotis: See on osa protsessist, mis otsustab konkreetse protsessi sisestamise.
- Kriitiline osa: See osa vรตimaldab รผhel protsessil sisestada ja muuta jagatud muutujat.
- Vรคlju jaotisest: Vรคljumisosa lubab teistel sisenemisosas ootavatel protsessidel siseneda kriitilisse sektsiooni. Samuti kontrollib see, kas protsess, mis on oma tรคitmise lรตpetanud, tuleks selle sektsiooni kaudu eemaldada.
- รlejรครคnud jaotis: Kรตik teised osad Code, mis ei kuulu kriitilise, sisenemis- ja vรคljumissektsiooni, on tuntud kui jรครคkide sektsiooni.
Mis on kriitilise sektsiooni probleem?
Kriitiline osa on koodisegment, millele pรครคseb ligi รผks protsess kindlal ajahetkel. See osa koosneb jagatud andmeressurssidest, millele peavad juurde pรครคsema ka teised protsessid.
- Kriitilise sektsiooni sisenemist haldab funktsioon oota () ja seda tรคhistatakse kui P ().
- Kriitilisest sektsioonist vรคljumist juhib funktsioon signal(), mis on esitatud kui V().
Kriitilises osas saab teostada ainult รผhte protsessi. Teised protsessid, mis ootavad oma kriitilise osa tรคitmist, peavad ootama, kuni praegune protsess lรตpetab oma tรคitmise.
Kriitilise sektsiooni reeglid
Kriitiline osa peab jรตustama kรตik kolm reeglit:
- Vastastikune vรคlistamine: Vastastikune vรคlistamine on binaarsemafori eritรผรผp, mida kasutatakse jagatud ressursile juurdepรครคsu kontrollimiseks. See sisaldab prioriteedi pรคrimise mehhanismi, et vรคltida laiendatud prioriteedi inversiooni probleeme. Selle kriitilises osas saab korraga kรคivitada mitte rohkem kui รผks protsess.
- Progress: Seda lahendust kasutatakse siis, kui kriitilises osas pole kedagi ja keegi tahab sinna pรครคseda. Seejรคrel peaksid need protsessid, mis pole รผlejรครคnud osas, lรตpliku aja jooksul otsustama, kes sinna pรครคseb.
- Piiratud ootamine: Kui protsess esitab pรคringu kriitilisse ossa pรครคsemiseks, on kriitilisse ossa pรครคsevate protsesside arvul kindel piirang. Seega, kui piirang on saavutatud, peab sรผsteem lubama protsessil kriitilisse ossa pรครคseda.
Kriitilise osa lahendused
Tรถรถs Synckroniseerimisel mรคngib kriitiline lรตik peamist rolli, seega tuleb probleem lahendada.
Siin on mรตned laialdaselt kasutatavad meetodid kriitilise sektsiooni probleemi lahendamiseks.
Petersoni lahendus
Petersoni lahendus on kriitiliste sektsioonide รผlesannete laialdaselt kasutatav lahendus. Selle algoritmi tรถรถtas vรคlja arvutiteadlane nimega Peterson, mistรตttu seda nimetatakse Petersoni lahenduseks.
Selles lahenduses, kui protsess kรคivitub kriitilises olekus, tรคidab teine โโprotsess ainult รผlejรครคnud koodi ja vรตib juhtuda vastupidine. See meetod aitab ka tagada, et kriitilises sektsioonis tรถรถtaks kindlal ajal ainult รผks protsess.
Nรคide
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
- Eeldame, et protsesse on N (P1, P2, ... PN) ja iga protsess peab mingil ajahetkel sisenema kriitilisse sektsiooni.
- Sรคilitatakse N-suurune FLAG[] massiiv, mis on vaikimisi vรครคrtusega โvรครคrโ. Seega, kui protsess vajab sisenemist kriitilisse sektsiooni, peab ta oma lipu vรครคrtuseks mรครคrama โtรตeneโ. Nรคiteks kui Pi soovib siseneda, mรครคrab ta lipu vรครคrtuseks โtรตeneโ.
- Teine muutuja nimega TURN nรคitab protsessi numbrit, mis ootab hetkel CS-i sisenemist.
- Protsess, mis vรคljumisel kriitilisse sektsiooni siseneb, muudaks TURN-i valmis protsesside loendist mรตne teise numbri.
- Nรคide: kรคik on 2, siis P2 siseneb kriitilisse sektsiooni ja vรคljudes kรคigult 3, murrab P3 ootetsรผklist vรคlja.
Synchroniseerimine Riistvara
Mรตnikord lahendatakse kriitilise sektsiooni probleemid ka riistvara abil. Mรตned operatsioonisรผsteemid pakuvad lukustusfunktsiooni, kus protsess hangib luku kriitilisse sektsiooni sisenedes ja vabastab selle pรคrast sealt lahkumist.
Seega, kui mรตni teine โโprotsess รผritab kriitilisse sektsiooni siseneda, ei saa see siseneda, kuna see on lukustatud. Seda saab teha ainult siis, kui see on tasuta, hankides luku ise.
Mutex lukud
SyncKroniseerimisriistvara ei ole kรตigile lihtne rakendada, seega vรตeti kasutusele ka range tarkvarameetod, mida tuntakse Mutex Locksina.
Selle lรคhenemisviisi korral saadakse koodi sisestussektsioonis LOCK kriitilises jaotises kasutatavate kriitiliste ressursside รผle. Vรคljumise osas vabastatakse see lukk.
Semaphore Lahendus
Semaphore on lihtsalt mittenegatiivne muutuja, mida jagavad lรตimed. See on jรคrjekordne algoritm vรตi lahendus kriitilise sektsiooni probleemile. See on signaalimismehhanism ja semaforil ootavale lรตimele saab signaali anda teine โโlรตim.
See kasutab protsessi sรผnkroniseerimiseks kahte aatomioperatsiooni: 1) ootamist ja 2) signaali andmist.
Nรคide
WAIT ( S ): while ( S <= 0 ); S = S - 1; SIGNAL ( S ): S = S + 1;


