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.

  • ๐Ÿ”— Mรครคratlus: SyncHroniseeritud protsesse koordineeritakse nii, et need ei pรครคse samaaegselt juurde jagatud andmetele.
  • โš ๏ธ Miks on vaja: Koordineerimata juurdepรครคs jagatud mรคlule toob kaasa vastuolulisi ja ekslikke andmeid.
  • ๐Ÿงฉ Kriitiline osa: Sisenemise, kriitilise tรคhtsusega, vรคljumise ja รผlejรครคnud osad struktureerivad turvalise juurdepรครคsu jagatud muutujatele.
  • ๐Ÿ“ Kolm reeglit: Kehtiv lahendus peab vastama vastastikuse vรคlistamise, edenemise ja piiratud ootamise kriteeriumidele.
  • ๐Ÿ› ๏ธ Lahendused: Petersoni algoritm, sรผnkroniseerimisriistvara, mutex-lukud ja semaforid lahendavad probleemi.
  • ๐Ÿšฆ Semaphore: Jagatud mittenegatiivne muutuja, mida signaalitakse aatomite wait() ja signal() operatsioonide abil.

Protsess Synchroniseerimine

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.

Protsess Synchroniseerimine Teosed

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

Kriitilise osa lahendused

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;

KKK

Mutex lubab ainult รผhel lรตimel lukku hoida ja vabastada, pakkudes ranget vastastikust vรคlistamist. Semafor on signaaliloendur, mis vรตimaldab รผhel vรตi mitmel lรตimel ressurssidele juurde pรครคseda, et see saaks koordineerida mitut samaaegset juurdepรครคsu.

Vรตidujooksutingimus tekib siis, kui kaks vรตi enam protsessi pรครคsevad samaaegselt juurde jagatud andmetele ja lรตpptulemus sรตltub nende tรคitmise ajastusest. SyncKronifitseerimine hoiab selle รคra, tagades, et kriitilisse ossa siseneb korraga ainult รผks protsess.

Pattiseisu tekib siis, kui kaks vรตi enam protsessi hoiavad igaรผks ressurssi ja ootavad teise protsessi poolt hoitavat ressurssi, nii et kumbki ei saa edasi liikuda. Hoolikas lukustuste jรคrjestamine, ajalรตpud ja vรคltimisalgoritmid aitavad ummikseisu sรผnkroniseerimise ajal vรคltida.

Tehisintellekti tรถรถriistad saavad analรผรผsida koodi ja selle tรคitmist tracet tuvastada vรตidujooksutingimusi, ummikseisusid ja puuduvaid lukke, mida on kรคsitsi raske taasesitada. ร•ppides tundma levinud samaaegsusmustreid, mรคrgistavad nad riskantseid jagatud andmetele juurdepรครคsu kohti ja pakuvad vรคlja sรผnkroniseerimise vajaduse.

Tehisintellekt ei saa garanteerida ennetamist, kuid see vรคhendab riski. See saab soovitada รตiget lukustamist, genereerida lรตimekindlat koodi ja kรคivitada automatiseeritud teste, mis paljastavad ajastusvead. Lรตplik korrektsus sรตltub ikkagi arendajate samaaegsuse disaini รผlevaatamisest ja valideerimisest.

Vรตta see postitus kokku jรคrgmiselt: