Käsitellä asiaa Synchronisointi: Kriittinen osa-ongelma käyttöjärjestelmässä
Mikä on prosessi Synchronisointi?
Käsitellä asiaa Synchronisointi on tehtävä koordinoida prosessien toteuttamista siten, että kahdella prosessilla ei ole pääsyä samaan yhteiseen dataan ja resursseihin.
Sitä tarvitaan erityisesti moniprosessijärjestelmässä, kun useat prosessit ovat käynnissä yhdessä ja useampi kuin yksi prosessi yrittää päästä samaan jaettuun resurssiin tai tietoihin 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äntyyppisten tietojen epäjohdonmukaisuuden välttämiseksi prosessit on synkronoitava keskenään.
Miten prosessi Synchronisointi toimii?
Esimerkiksi prosessi A muuttaa muistipaikan tietoja, kun toinen prosessi B yrittää lukea tietoja muistipaikasta sama muistipaikka. On suuri todennäköisyys, että toisen prosessin lukemat tiedot ovat virheellisiä.
Ohjelman osat
Tässä on neljä kriittisen osan olennaista elementtiä:
- Sisäänpääsy-osio: Se on osa prosessia, joka päättää tietyn prosessin aloittamisesta.
- Kriittinen jakso: Tämä osa sallii yhden prosessin syöttää ja muokata jaettua muuttujaa.
- Poistu osiosta: Poistumisosion avulla muut prosessit, jotka odottavat Entry-osiossa, voivat siirtyä kriittisiin osiin. Se myös tarkistaa, että suorituksensa lopettanut prosessi tulee poistaa tämän osion kautta.
- Loppuosa: Kaikki muut koodin osat, jotka eivät ole kriittisissä, sisääntulo- ja poistumisosiossa, tunnetaan nimellä Jäljellä oleva osa.
Mikä on kriittisen osan ongelma?
Kriittinen osa on koodisegmentti, johon signaaliprosessi pääsee käsiksi tietyllä hetkellä. Osio koostuu jaetuista tietoresursseista, joita muiden prosessien on käytettävä.
- Kriittisen osan syöttämistä käsittelee wait()-funktio, ja se esitetään muodossa P().
- Kriittiseltä osalta poistumista ohjaa signaali()-funktio, joka esitetään muodossa V().
Kriittisessä osassa voidaan suorittaa vain yksi prosessi. Muiden prosessien, jotka odottavat kriittisen osuutensa suorittamista, on odotettava, kunnes nykyinen prosessi suorittaa suorituksensa.
Kriittisen osan säännöt
Kriittisen osan on noudatettava kaikkia kolmea sääntöä:
- Yhteinen poissulkeminen: Keskinäinen poissulkeminen on erityinen binäärinen semafori, jota käytetään jaetun resurssin pääsyn hallintaan. Se sisältää prioriteetin periytymismekanismin laajennetun prioriteetin inversio-ongelmien välttämiseksi. Vain yksi prosessi voi suorittaa sen kriittisessä osassa kerralla.
- Progress: Tätä ratkaisua käytetään, kun kukaan ei ole kriittisellä alueella ja joku haluaa sisään. Silloin niiden prosessien, jotka eivät ole heidän muistutusosiossa, pitäisi rajallisessa ajassa päättää, kenen pitäisi mennä.
- Sitoutunut odotus: Kun prosessi pyytää pääsyä kriittiseen osioon, on olemassa tietty raja prosessien lukumäärälle, jotka voivat päästä kriittiseen osioon. Joten kun raja saavutetaan, järjestelmän on sallittava prosessin pyyntö päästä sen kriittiseen osaan.
Ratkaisut kriittiseen osioon
Työn alla Synchronisaatio, kriittinen osa on pääroolissa niin, että ongelma on ratkaistava.
Tässä on joitain yleisesti käytettyjä menetelmiä kriittisten osien ongelman ratkaisemiseksi.
Petersonin ratkaisu
Petersonin ratkaisu on laajalti käytetty ratkaisu kriittisiin lohkoongelmiin. Tämän algoritmin on kehittänyt tietojenkäsittelytieteilijä Peterson, minkä vuoksi se on nimetty Petersonin ratkaisuksi.
Tässä ratkaisussa, kun prosessi suoritetaan kriittisessä tilassa, toinen prosessi suorittaa vain loput koodista, ja päinvastoin voi tapahtua. Tämä menetelmä auttaa myös varmistamaan, että vain yksi prosessi suoritetaan kriittisessä osassa tiettynä aikana.
esimerkki
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
- Oletetaan, että prosesseja on N (P1, P2, … PN) ja jokainen prosessi jossain vaiheessa vaatii pääsyn kriittiseen osioon
- FLAG[]-taulukkoa, jonka koko on N, ylläpidetään, mikä on oletuksena epätosi. Joten aina kun prosessi edellyttää pääsyä kriittiseen osioon, sen on asetettava lippunsa tosi. Jos esimerkiksi Pi haluaa syöttää, se asettaa FLAG[i]=TOSI.
- Toinen muuttuja nimeltä TURN ilmaisee prosessinumeron, joka on parhaillaan siirtymässä CS:ään.
- Prosessi, joka tulee kriittiseen osioon poistuessaan, muuttaisi KÄÄNNÖN toiseen numeroon valmiiden prosessien luettelosta.
- Esimerkki: käännös on 2, sitten P2 tulee kriittiseen osaan ja poistuessaan turn=3 ja siksi P3 katkeaa odotussilmukasta.
Synchronisointi Laitteisto
Joskus kriittisen osan ongelmat ratkeavat myös laitteistolla. Joissakin käyttöjärjestelmissä on lukitustoiminto, jossa prosessi lukkiutuu saapuessaan kriittiseen osioon ja vapauttaa lukon sieltä poistuttuaan.
Joten kun toinen prosessi yrittää päästä kriittiseen osaan, se ei pääse sisään, koska se on lukittu. Se voi tehdä niin vain, jos se on ilmainen hankkimalla itse lukon.
Mutex lukot
Synchronisointilaitteisto ei ole yksinkertainen tapa toteuttaa kaikille, joten tiukka ohjelmistomenetelmä, joka tunnetaan nimellä Mutex Locks, otettiin myös käyttöön.
Tässä lähestymistavassa koodin syöttöosassa LOCK saadaan kriittisen osan sisällä käytettyjen kriittisten resurssien päälle. Poistumisosassa lukko vapautetaan.
Semaphore Ratkaisu
Semaphore on yksinkertaisesti muuttuja, joka ei ole negatiivinen ja jaetaan säikeiden kesken. Se on toinen algoritmi tai ratkaisu kriittisen osan ongelmaan. Se on signalointimekanismi ja semaforilla odottava lanka, joka voidaan signaloida toisella säikeellä.
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ä prosessien suorittamisen koordinoimiseksi siten, että kahdella prosessilla ei ole pääsyä samoihin jaettuihin tietoihin ja resursseihin.
- Kriittisen osan neljä elementtiä ovat 1) sisääntulo-osa 2) kriittinen osa 3) poistumisosa 4) muistutusosa
- Kriittinen osa on koodisegmentti, johon signaaliprosessi pääsee käsiksi tietyllä hetkellä.
- Kolme pakollista sääntöä, jotka on noudatettava kriittisen osion osalta, ovat: 1) Keskinäinen poissulkeminen 2) Prosessiratkaisu 3) Sidottu odotus
- Keskinäinen poissulkeminen on erityinen binäärinen semafori, jota käytetään jaetun resurssin pääsyn hallintaan.
- Prosessiratkaisua käytetään, kun kukaan ei ole kriittisellä alueella ja joku haluaa mukaan.
- Sidotussa odotusratkaisussa sen jälkeen, kun prosessi pyytää pääsyä kriittiseen osioonsa, on raja, kuinka monta muuta prosessia pääsee kriittiseen osioonsa.
- Petersonin ratkaisu on laajalti käytetty ratkaisu kriittisiin lohkoongelmiin.
- Kriittisen osan ongelmat ratkaistaan myös laitteiston synkronoinnilla
- Synchronisointilaitteisto ei ole kaikille helppo toteuttaa, joten otettiin käyttöön myös tiukka ohjelmistomenetelmä, joka tunnetaan nimellä Mutex Locks.
- Semaphore on toinen algoritmi tai ratkaisu kriittisen osan ongelmaan.