Mikä on prosessin synkronointi?
Prosessisynkronointi on tehtävänä koordinoida prosessien suorittaminen siten, että kahdella prosessilla ei ole pääsyä samoihin jaettuihin tietoihin ja resursseihin.
Sitä tarvitaan erityisesti moniprosessisessa järjestelmässä, kun useat prosessit ovat käynnissä yhdessä, ja useampi kuin yksi prosessi yrittää päästä käsiksi samaan jaettuun resurssiin tai dataan samanaikaisesti.
Tämä voi johtaa jaettujen tietojen epäjohdonmukaisuuteen. Joten yhden prosessin tekemä muutos ei välttämättä heijastu, kun muut prosessit käyttivät samaa jaettua dataa. Tämän tyyppisen tietojen epäjohdonmukaisuuden välttämiseksi prosessit on synkronoitava keskenään.
Tässä käyttöjärjestelmän opetusohjelmassa opit:
- Mikä on prosessin synkronointi?
- Kuinka prosessin synkronointi toimii?
- Ohjelman osiot
- Mikä on kriittisen osan ongelma?
- Kriittisen osan säännöt
- Ratkaisut kriittiseen osaan
Kuinka prosessin synkronointi toimii?
Esimerkiksi prosessi A muuttaa tietoja muistipaikassa samalla kun toinen prosessi B yrittää lukea tietoja samasta muistipaikasta. On erittäin todennäköistä, että toisen prosessin luema data on virheellistä.
Ohjelman osiot
Tässä on kriittisen osan neljä olennaista osaa:
- Entry Section: Se on osa prosessia, joka päättää tietyn prosessin merkinnän.
- Kriittinen osa: Tämän osan avulla yksi prosessi voi syöttää ja muokata jaettua muuttujaa.
- Poistumisosio: Poistu-osion avulla muut prosessit, jotka odottavat Entry-osiossa, pääsevät kriittisiin osioihin. Se tarkistaa myös, että suorituksen suorittanut prosessi olisi poistettava tämän osan kautta.
- Jäännösosasto: Kaikki muut koodin osat, jotka eivät ole Kriittinen-, Sisään- ja Poistumis-osiossa, tunnetaan jäännösosiona.
Mikä on kriittisen osan ongelma?
Kriittinen osa on koodisegmentti, johon pääsee signaaliprosessilla tiettynä ajankohtana. Tämä osio koostuu jaetuista tietolähteistä, joita muiden prosessien on käytettävä.
- Kriittisen osan merkintää hoitaa wait () -toiminto, ja sitä edustaa P ().
- Kriittiseltä alueelta poistumista ohjataan signaalitoiminnolla (), jota kutsutaan nimellä V ().
Kriittisessä osassa voidaan suorittaa vain yksi prosessi. Muiden prosessien, jotka odottavat kriittisen osionsa suorittamista, on odotettava, kunnes nykyinen prosessi suorittaa suorituksensa loppuun.
Kriittisen osan säännöt
Kriittisen osan on täytettävä kaikki kolme sääntöä:
- Keskinäinen poissulkeminen: Keskinäinen poissulkeminen on erityinen binäärisemaforin tyyppi, jota käytetään jaetun resurssin pääsyn hallintaan. Se sisältää prioriteettiperintämekanismin laajennettujen prioriteettien kääntöongelmien välttämiseksi. Kriittisessä osassa voidaan suorittaa enintään yksi prosessi kerralla.
- Edistyminen: Tätä ratkaisua käytetään, kun kukaan ei ole kriittisessä osassa ja joku haluaa tulla sisään. Sitten niiden prosessien, jotka eivät ole heidän muistutusosassaan, pitäisi päättää, kenen pitäisi mennä sisään, rajallisessa ajassa.
- Sidottu odotus: Kun prosessi pyytää pyyntöä pääsemään kriittiseen osioon, kriittiselle osalle pääsemiselle on tietty raja. Joten, kun raja on saavutettu, järjestelmän on sallittava prosessin pyyntö päästä kriittiseen osaansa.
Ratkaisut kriittiseen osaan
Prosessisynkronoinnissa kriittisellä osalla on päärooli, joten ongelma on ratkaistava.
Tässä on joitain laajalti käytettyjä menetelmiä kriittisen osan ongelman ratkaisemiseksi.
Petersonin ratkaisu
Petersonin ratkaisu on laajalti käytetty ratkaisu kriittisiin osio-ongelmiin. Tämän algoritmin on kehittänyt tietotekniikan tutkija Peterson, minkä vuoksi se on nimetty Petersonin ratkaisuksi.
Tässä prosessissa, kun prosessi suorittaa kriittisessä tilassa, toinen prosessi suorittaa vain loput koodista, ja päinvastoin voi tapahtua. Tämä menetelmä auttaa myös varmistamaan, että kriittisessä osassa kulkee vain yksi prosessi tiettynä ajankohtana.
Esimerkki
PROCESS PiFLAG[i] = truewhile( (turn != i) AND (CS is !free) ){ wait;}CRITICAL SECTION FLAG[i] = falseturn = j; //choose another process to go to CS
- Oletetaan, että prosesseja on N (P1, P2, ... PN), ja jokainen prosessi jossain vaiheessa edellyttää kriittisen osan siirtymistä
- Ylläpidetään FLAG [] -kokoa N, joka on oletusarvoisesti väärä. Joten aina, kun prosessi vaatii kriittisen osan saapumista, sen on asetettava lippunsa totta. Esimerkiksi, jos Pi haluaa syöttää, se asettaa FLAG [i] = TOSI.
- Toinen muuttuja nimeltä TURN ilmaisee prosessinumeron, joka on parhaillaan syöttämässä CS: ää.
- Prosessi, joka siirtyy kriittiseen osaan poistuessaan, muuttaisi TURN: n toiseen numeroon valmiiden prosessien luettelosta.
- Esimerkki: käännös on 2, sitten P2 siirtyy Kriittinen-osioon ja poistuttaessa käännöksestä = 3 ja siksi P3 irtoaa odotussilmukasta.
Synkronointilaitteisto
Joskus kriittisen osan ongelmat ratkaistaan myös laitteistolla. Jotkin käyttöjärjestelmät tarjoavat lukitustoiminnon, jossa Prosessi hankkii lukon siirtyessään Kriittinen-osioon ja vapauttaa lukon poistuttuaan siitä.
Joten kun toinen prosessi yrittää päästä kriittiseen osioon, se ei pääse sisään, koska se on lukittu. Se voi tehdä niin vain, jos se on vapaa hankkimalla itse lukko.
Mutex-lukot
Synkronointilaitteisto ei ole yksinkertainen tapa toteuttaa kaikkia, joten käyttöön otettiin myös tiukka ohjelmistomenetelmä, joka tunnetaan nimellä Mutex Locks.
Tässä lähestymistavassa koodin syöttöosassa saadaan LOCK kriittisen osan sisällä käytetyistä kriittisistä resursseista. Poistumisalueella lukko vapautetaan.
Semaforiratkaisu
Semafori on yksinkertaisesti muuttuja, joka ei ole negatiivinen ja jaettu ketjujen kesken. Se on toinen algoritmi tai ratkaisu kriittisen osan ongelmaan. Se on signalointimekanismi ja lanka, joka odottaa semaforissa, jonka toinen lanka voi signaloida.
Se käyttää kahta atomioperaatiota, 1) odota ja 2) signaalia prosessin synkronointiin.
Esimerkki
WAIT ( S ):while ( S <= 0 );S = S - 1;SIGNAL ( S ):S = S + 1;
Yhteenveto:
- Prosessien synkronointi on tehtävänä koordinoida prosessien suorittaminen siten, että kahdella prosessilla ei ole pääsyä samoihin jaettuihin tietoihin ja resursseihin.
- Kriittisen osan neljä elementtiä ovat 1) merkintäosa 2) kriittinen osa 3) poistumisosa 4) muistutusosa
- Kriittinen osa on koodisegmentti, johon pääsee signaaliprosessilla tiettynä ajankohtana.
- Kolme pakollista sääntöä, jotka on pantava täytäntöön kriittisellä osalla, ovat: 1) Keskinäinen poissulkeminen 2) Prosessiratkaisu 3) Sidottu odotus
- Keskinäinen poissulkeminen on erityinen binäärisemaforityyppi, jota käytetään jaetun resurssin pääsyn hallintaan.
- Prosessiratkaisua käytetään, kun kukaan ei ole kriittisessä osassa ja joku haluaa.
- Sitoutuneessa odotusratkaisussa, kun prosessi pyytää pyyntöä pääsemään kriittiseen osaansa, on raja sille, kuinka moni muu prosessi voi päästä kriittiseen osaansa.
- Petersonin ratkaisu on laajalti käytetty ratkaisu kriittisiin osio-ongelmiin.
- Kriittisen osan ongelmat ratkaistaan myös synkronoimalla laitteisto
- Synkronointilaitteisto ei ole yksinkertainen tapa toteuttaa kaikkia, joten käyttöön otettiin myös tiukka ohjelmistomenetelmä, joka tunnetaan nimellä Mutex Locks.
- Semafori on toinen kriittisen osan ongelman algoritmi tai ratkaisu.