2024-07-12
한어Русский языкEnglishFrançaisIndonesianSanskrit日本語DeutschPortuguêsΕλληνικάespañolItalianoSuomalainenLatina
2024-07-04: Käyttöjärjestelmän synkronointi ja keskinäinen poissulkeminen -tutkimuksen muistiinpanot
Samanaikaiset prosessit tai ohjelmat menettävät sulkemisensa suoritettaessa. Eli jos kaksi ohjelmaa käyttävät yhteistä resurssia eri alueilla, kunkin ajon tulokset voivat olla erilaisia.
Syynä on se, että emme suojanneet jaettua resurssia x, jota sekä ohjelman a että ohjelman b on käytettävä.
Toisiaan rajoittava suhde on synkronointi Yksinkertainen käsitys synkronoinnista on, että prosessien suorittamisessa on oltava järjestys.
Suhdetta, joka epäsuorasti rajoittaa toisiaan, kutsutaan toisensa poissulkevaksi suhteeksi, esim
"Tuottaja- ja kuluttajamalli"
laskuri++
首先把变量放到寄存器里面
register1 = counter;
接下来对寄存器进行一个自增
register1 = register1 + 1;
再把结果返回到counter里
counter = register1;
laskuri- -
首先把变量放到寄存器里面
register2 = counter;
接下来对寄存器进行一个自减
register2 = register2 - 1;
再把结果返回到counter里
counter = register2;
Ratkaisu: Käsittele laskuria kriittisenä resurssina ja anna prosessin käyttää muuttujalaskuria keskenään (synkronointimekanismin opit myöhemmin)
Olipa kyseessä laitteistokriittinen resurssi tai ohjelmistokriittinen resurssi, useiden prosessien on käytettävä sitä keskenään.
Nämä alueet ovat pohjimmiltaan koodeja
Kun kriittisessä osassa ei ole prosessia, se osoittaa, että kriittisen osan resurssit ovat käyttämättömiä. Prosessin, joka pyytää pääsyä kriittiseen osioon, tulee päästää välittömästi omaan kriittiseen osioon resurssien tehokkaaksi hyödyntämiseksi.
Kun olemassa oleva prosessi tulee kriittiseen osioon, se osoittaa, että kriittistä resurssia käytetään. Siksi muiden kriittiseen osaan pääsyä yrittävien prosessien on odotettava varmistaakseen toisensa poissulkevan pääsyn kriittiseen resurssiin.
Niiden prosessien osalta, jotka edellyttävät pääsyä kriittisiin resursseihin, heidän tulee varmistaa, että ne pääsevät omaan kriittiseen osioonsa rajoitetun ajan sisällä, jotta ne eivät joutuisi "odottaa kuolemaa" -tilaan.
Kun prosessi ei pääse omaan kriittiseen osaansa, prosessori (CPU) on vapautettava välittömästi, jotta prosessi ei putoa "varattu odottavaan" -tilaan.
两个进程必须交替进入临界区,若一个进程不再进入临界区,则另一个进程也无法进入临界区,违背了“空闲让进”准则
Kaksoislipun ensimmäinen tarkistusmenetelmä asettaa Boolen taulukon lipun[2] merkitsemään kunkin prosessin halukkuutta siirtyä kriittiseen osioon lippu[i]=true tarkoittaa, että Pi haluaa siirtyä kriittiseen osaan.
- While-silmukka vastaa liikennevalomekanismia
- Toisen osapuolen lipun asettaminen vastaa toisen osapuolen liikennevalon vaihtamista.
- Koska molemmat prosessit kuitenkin tarkistavat lipun ensin [katso liikennevaloa ensin] ja molemmat ovat aluksi vääriä [molemmat vihreät valot], on mahdollista, että molemmat prosessit ohittavat liikennevalon samanaikaisesti ja tulevat kriittiseen osaan yhdessä .
Kaksoislipun jälkitarkistusmenetelmä tarkistaa toisen osapuolen lipun ja asettaa sitten oman. Näitä kahta toimintoa ei voi tehdä yhdellä kertaa, joten nämä kaksi prosessia voivat siirtyä kriittiseen osioon samaan aikaan jälkitarkistusmenetelmä, joka asettaa ensin oman lipun ja sitten tarkistaa toisen osapuolen lipun, jos toisen osapuolen lippu on tosi, siirry kriittiseen osioon
Petersonin algoritmi yhdistääyhden merkin menetelmäjaKaksoispisteen jälkitarkastusmenetelmäAjatuksena on käyttää lippua [] ratkaistakseen toisensa poissulkevan pääsyongelman ja käyttää turnaa nälkäongelman ratkaisemiseen.
Jos molemmat osapuolet kilpailevat pääsystä kriittiseen osioon, voidaan prosessin antaa toiselle osapuolelle mahdollisuus päästä kriittiseen osaan.
Ennen kuin kukin prosessi siirtyy kriittiseen osioon, se asettaa oman lippunsa ja asettaa vuorolipun, jonka jälkeen se tunnistaa toisen osapuolen lipun ja käännöksen samanaikaisesti varmistaakseen, että vain yksi prosessi pääsee sisään. molemmat osapuolet pyytävät pääsyä kriittiseen osioon samanaikaisesti.
Odotusoikeudesta luopumatta jättäminen
Ohjelmiston on vaikea ratkaista ongelmaa, jonka mukaan jokainen prosessi ei pääse kriittiseen osioon, ja sillä on suuria rajoituksia. Siksi tietokone tarjoaa joitain erityisiä laitteistoohjeita ongelman ratkaisemiseksi.
TS-käskyä voidaan pitää funktioprosessina (primitiivinä), jonka suoritusprosessi on jakamaton.
Käytä TS:ää kriittisten osien hallintaan ja lukituksen asettamiseen jokaiselle kriittiselle resurssille.
Sitä kutsutaan vaihtokäskyksi ja sitä käytetään kahden sanan sisällön vaihtamiseen.
Se määritellään kokonaislukuna S, jota käytetään edustamaan resurssien määrää. Tälle kokonaislukusemaforille on vain kolme toimintoa: alustus (alkuarvon määrittäminen), odotus (vähennys), signaali (lisäys).
Prosessin synkronointimekanismi ilman "varattu odotus" -ilmiötä
- Odotustoiminto vastaa P-operaatiota
- Signaalitoiminta vastaa V-toimintoa
- Vain kaksi eri nimeä, toiminnot ovat täsmälleen samat
- odota(A) = P(A)
- signaali(B) = V(A)
Aseta toisensa poissulkeva semafori mutex=1 ja aseta sitten kriittinen osa kullekin prosessille kriittisten resurssien käyttämiseksi odotus(mutex) ja signaali(mutex) välillä.
Aseta synkronointisemaforiksi S=0, jotta ensin suoritettava käskysignaali(S) ja sitten odotus(S)