Protsessi sünkroniseerimine: OS-i kriitilise osa probleem

Lang L: none (table-of-contents):

Anonim

Mis on protsesside sünkroniseerimine?

Protsesside sünkroniseerimine on protsesside täitmise koordineerimise ülesanne nii, et kahel protsessil ei oleks juurdepääsu samadele jagatud andmetele ja ressurssidele.

See on spetsiaalselt vajalik mitmeprotsessilises süsteemis, kui mitmed protsessid töötavad koos ja rohkem kui üks protsess üritab samal ajal juurde pääseda samale jagatud ressursile või andmetele.

See võib põhjustada jagatud andmete vastuolu. Seega ei pruugi ühe protsessi tehtud muudatus ilmneda tingimata siis, kui teised protsessid pääsevad samadele jagatud andmetele juurde. Seda tüüpi andmete vastuolude vältimiseks tuleb protsessid omavahel sünkroonida.

Selles opsüsteemi õpetuses saate teada:

  • Mis on protsesside sünkroniseerimine?
  • Kuidas protsesside sünkroonimine töötab?
  • Programmi jaotised
  • Mis on kriitilise osa probleem?
  • Kriitilise osa reeglid
  • Kriitilise osa lahendused

Kuidas protsesside sünkroonimine töötab?

Näiteks töötle A andmete muutmine mälupesas, samal ajal kui teine ​​protsess B üritab andmeid lugeda samast mälupunktist. On suur tõenäosus, et teise protsessi käigus loetud andmed on ekslikud.

Programmi jaotised

Siin on kriitilise osa neli olulist elementi:

  • Sisestussektsioon: see on osa protsessist, mis otsustab konkreetse protsessi sisestamise.
  • Kriitiline osa: see osa võimaldab ühel protsessil sisestada ja muuta jagatud muutujat.
  • Väljumisjagu: jaotis Välju võimaldab teistel protsessidel, mis on jaotises Ootel oodata, siseneda kriitilistesse jaotistesse. Samuti kontrollib see, et selle jaotise kaudu tuleks protsess, mille lõpetamine lõpetati, eemaldada.
  • Ülejäänud osa: Koodeksi kõiki muid osi, mis pole jaotises Kriitiline, Sisestus ja Välju, nimetatakse ülejäänud sektsiooniks.

Mis on kriitilise osa probleem?

Kriitiline osa on koodilõik, millele pääseb juurde signaaliprotsessi abil teatud ajahetkel. Jaotis koosneb jagatud andmeressurssidest, millele on vaja juurde pääseda muude protsesside abil.

  • Kriitilise sektsiooni sisestust haldab funktsioon wait () ja seda tähistatakse kui P ().
  • Kriitilisest lõigust väljumist juhib signaali () funktsioon, mida tähistatakse kui V ().

Kriitilises osas saab käivitada ainult ühe protsessi. Teised protsessid, mis ootavad oma kriitilise sektsiooni käivitamist, peavad ootama, kuni praegune protsess on selle lõpule viinud.

Kriitilise osa reeglid

Kriitiline jaotis peab jõustama kõik kolm reeglit:

  • Vastastikune välistamine: vastastikune väljajätmine on kahendsemafooride eriliik, mida kasutatakse jagatud ressursile juurdepääsu kontrollimiseks. See sisaldab prioriteetset pärimismehhanismi, et vältida laiendatud prioriteetsete inversiooniprobleemide tekkimist. Kriitilises sektsioonis saab korraga käivitada mitte rohkem kui ühte protsessi.
  • Edusammud: seda lahendust kasutatakse siis, kui kedagi pole kriitilises sektsioonis ja keegi soovib sisse tulla. Siis peaksid need protsessid, mis pole nende meeldetuletuste jaotises, otsustama, kes peaks sisse minema piiratud aja jooksul.
  • Seotud ootamine: kui protsess esitab taotluse kriitilisse sektsiooni pääsemiseks, on nende kriitilisse sektsiooni sattumise protsentide arv piiratud. Niisiis, kui piir on saavutatud, peab süsteem lubama protsessil taotleda oma kriitilises osas.

Kriitilise osa lahendused

Protsesside sünkroonimisel mängib kriitiline osa peamist rolli, nii et probleem tuleb lahendada.

Siin on mõned laialt kasutatavad meetodid kriitilise sektsiooni probleemi lahendamiseks.

Petersoni lahendus

Petersoni lahendus on laialt levinud lahendus kriitiliste sektsioonide probleemidele. Selle algoritmi töötas välja arvutiteadlane Peterson ja seetõttu nimetatakse seda Petersoni lahenduseks.

Selles protsessis, kui protsess käivitub kriitilises olekus, täidab teine ​​protsess ainult ülejäänud koodi ja võib juhtuda vastupidist. See meetod aitab ka veenduda, et kriitilises osas töötab kindlal ajal ainult üks protsess.

Näide

PROCESS PiFLAG[i] = truewhile( (turn != i) AND (CS is !free) ){ wait;}CRITICAL SECTION FLAG[i] = falseturn = j; //choose another process to go to CS
  • Oletame, et seal on N protsessi (P1, P2, ... PN) ja iga protsess mingil ajahetkel nõuab kriitilise sektsiooni sisenemist
  • Säilitatakse FLAG [] massiiv N, mis on vaikimisi vale. Seega, kui protsess nõuab kriitilisse sektsiooni sisenemist, peab ta määrama lipu tõeseks. Näiteks kui Pi soovib sisestada, määrab FLAG [i] = TRUE.
  • Teine muutuja nimega TURN tähistab protsessinumbrit, mis praegu CS-i sisestamiseks ootab.
  • Protsess, mis siseneb kriitilisse sektsiooni väljumisel, muudaks TURN teiseks numbriks valmisprotsesside loendist.
  • Näide: pööre on 2, siis siseneb P2 kriitilisse ossa ja pöörangust väljumisel = 3 ja seetõttu murdub P3 ooteajast.

Sünkroonimisriistvara

Mõnikord lahendab kriitilise osa probleemid ka riistvara. Mõni operatsioonisüsteem pakub luku funktsionaalsust, kus protsess omandab kriitilisse sektsiooni sisenemisel luku ja vabastab pärast lahkumist luku.

Nii et kui mõni teine ​​protsess üritab kriitilisse sektsiooni siseneda, ei pääse see lukustatuna sisse. Ta saab seda teha ainult siis, kui see on lukustuse hankimisega vaba.

Mutexi lukud

Sünkroonimisriistvara pole kõigi jaoks lihtne rakendada, seetõttu võeti kasutusele ka range tarkvarameetod, mida nimetatakse Mutex Locksiks.

Selle lähenemisviisi korral saadakse koodi sisestusosas kriitilises jaotises kasutatud kriitiliste ressursside LUKK. Väljapääsuosas on lukk vabastatud.

Semafori lahendus

Semafoor on lihtsalt muutuja, mis pole negatiivne ja mida niidid jagavad. See on kriitilise sektsiooni probleemi teine ​​algoritm või lahendus. See on signaalimehhanism ja semafooril ootav niit, millest saab märku anda teine ​​lõim.

Protsessi sünkroniseerimiseks kasutatakse kahte aatomitoimingut, 1) ootamist ja 2) signaali.

Näide

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

Kokkuvõte:

  • Protsesside sünkroniseerimine on protsesside täitmise koordineerimise ülesanne nii, et kahel protsessil ei oleks juurdepääsu samadele jagatud andmetele ja ressurssidele.
  • Kriitilise osa neli elementi on 1) Sektsiooni osa 2) Kriitiline osa 3) Väljumise osa 4) Meeldetuletuse sektsioon
  • Kriitiline osa on koodilõik, millele pääseb juurde signaaliprotsessi abil teatud ajahetkel.
  • Kolm kohustuslikku reeglit, mida kriitilise sektsiooni kaudu tuleb rakendada, on: 1) vastastikune välistamine 2) protsessilahendus 3) siduv ootamine
  • Vastastikune välistamine on binaarse semafori eriliik, mida kasutatakse jagatud ressursile juurdepääsu kontrollimiseks.
  • Protsessilahendust kasutatakse siis, kui keegi pole kriitilises sektsioonis ja keegi soovib.
  • Seotud ootelahenduses on pärast seda, kui protsess esitab taotluse oma kriitilisse sektsiooni sisenemiseks, piir, kui palju muid protsesse võib nende kriitilisse sektsiooni pääseda.
  • Petersoni lahendus on laialt levinud lahendus kriitiliste sektsioonide probleemidele.
  • Kriitilise osa probleemid lahendatakse ka riistvara sünkroniseerimise teel
  • Sünkroonimisriistvara pole kõigi jaoks lihtne rakendus, seetõttu võeti kasutusele ka range tarkvarameetod, mida nimetatakse Mutex Locksiks.
  • Semafoor on kriitilise sektsiooni probleemi teine ​​algoritm või lahendus.