Esittely latautuu. Ole hyvä ja odota

Esittely latautuu. Ole hyvä ja odota

Synkronointi Yksi tärkeimmistä rinnakkaisuuteen liittyvistä asioista. semaforit tapahtumalaskurit monitorit.

Samankaltaiset esitykset


Esitys aiheesta: "Synkronointi Yksi tärkeimmistä rinnakkaisuuteen liittyvistä asioista. semaforit tapahtumalaskurit monitorit."— Esityksen transkriptio:

1 Synkronointi Yksi tärkeimmistä rinnakkaisuuteen liittyvistä asioista. semaforit tapahtumalaskurit monitorit

2 Semaforit Semafori on suojattu globaali kokonaislukumuuttuja, jota voidaan käsitellä proseduureilla P (tai wait) ja V (tai signal). P ja V toteutetaan käyttöjärjestelmän ytimessä ja niihin sovelletaan poissulkemista. Semaforilla on oma jonotietorakenne, johon sitä odottavat prosessit sijoitetaan. P ja V proseduuria kutsuvat prosessit pannaan jonoon FIFO-järjestykseen P ja V ovat jakamattomia

3 Binäärinen semafori voi saada arvokseen 0 tai 1 Tyypillinen semaforin S käyttö: P(S) kriittinen alue V(S) V(S) { if(S.jono on tyhjä) {S++;} else{Siirrä S.jonon seuraava prosessi suoritukseen} }//V() P(S){ if (S==0) { {siirry S.jonoon odottamaan ja pysäytä prosessi} }//if else { S--; }//else }//P()

4 Laskenta- eli yleinen semafori saa arvokseen kokonaislukuja >= 0 P(S){ S--; if(S<0) { siirry S.jonoon odottamaan ja pysäytä prosessi } }//P() V(S){ S++; if(S<=0) {Siirrä S.jonon seuraava prosessi suoritukseen} }//V()

5 Semaforien käyttö Poissulkemisongelma http://www.uwasa.fi/~h79423/kj/semafori- poissulkeminen.html ongelmia: keskeytysten esto, rinnakkaiset prosessorit, nälkiintyminen, jonot prosessien synkronointi http://www.uwasa.fi/~h79423/kj/semafori- synkronointi.html

6 Tuottajat ja kuluttajat Semaforia voidaan käyttää apuna viestinvälityksessä Ongelmia: poissulkeminen synkronointi (lukea ei saa ennen kuin toinen on tuottanut viestin, uutta signaalia ei saa tuottaa ennen kuin vanha on luettu) http://www.uwasa.fi/~h79423/kj/semafori- tuotkulut.html

7 Tapahtumalaskurit Muistuttaa etäisesti semaforia, pitää kirjaa tapahtumien esiintymisestä kokonaislukumuuttujalla Kolme alkeistoimintoa: 1.advance(laskuri) – lisää yhdellä 2.read(laskuri) – lukee laskurin arvon 3.await(laskuri, v) – sammuttaa prosessin, kunnes laskurin arvo on vähintään v http://www.uwasa.fi/~h79423/kj/tapahtumalaskuri.html

8 Monitorit Korkeamman tason menetelmä Ominaisuuksia: 1.paikallisia muuttujia voi käsitellä vain monitorin omien proseduurien kautta 2.prosessi käyttää monitoria kutsumalla yhtä sen proseduureista 3.vain prosessi kerrallaan voi käyttää monitoria

9 Määritellään ehtomuuttujia synkronointiin, joihin pääsee käsiksi vain monitorin sisältä, lisäksi prosessijono. Funktiot ehtomuuttujien käyttöön: cwait(c): pysäyttää kutsuvan prosessin, jos ehto c on tosi. Muut prosessit voivat käyttää monitoria. csignal(c): jatkaa jonkin cwait() funktiolla ja samalla ehdolla pysäytetyn ohjelman suoritusta. Jos tällaisia prosesseja on useita, se valitsee niistä yhden, jos niitä ei ole, ei tehdä mitään. Malli sisältää ongelmia poissulkemisen suhteen.

10 Paikkaus: cnotify(x) (csignal()-funktion tilalle) Kun monitorissa oleva ohjelma toteaa ehtomuuttujan x tilan muuttuneen, se suorittaa funktion cnotify(x) ja jatkaa normaalisti suoritustaan. cnotify(x) kertoo ehtomuuttujaan x liittyvälle jonolle, että ehtomuuttuja on muuttunut ja jono voi ottaa sieltä prosessin, kun sille sopii. Koska jokin muu prosessi on kuitenkin saattanut suorittaa monitoria jonon ottaessa ensimmäisen prosessin, aiheuttaen siten uuden muutoksen ehtomuuttujan tilassa, jononkäsittelijän täytyy ensin uudelleen tarkastaa ehtomuuttujansa tila ennen kuin jonosta otetaan prosessi jatkamaan suoritustaan.

11 cnotify() mahdollistaa myös cbroadcast(x)- funktion lisäämisen, joka tiedottaa kaikille muuttujaa x tarkkaileville prosesseille muutoksista. Muutos tuo mukanaan toimintavarmuutta.

12 Uudelleenkäytettävien resurssien osoittaminen monitorilla monitori Resurssinvaraaja { condition vapaa; public Resurssinvaraaja(){ vapaa = true; }//Resurssinvaraaja public static void getresource(){ while (!vapaa) cwait(vapaa); vapaa = false; }//getresource() public static void returnresource(){ vapaa= true; cnotify(vapaa); }//returnresource }//monitori Resurssinvaraaja http://www.uwasa.fi/~h79 423/kj/monitori- tuotkulut.html http://www.uwasa.fi/~h79 423/kj/monitori- lukikirj.html

13 Ruokailevat filosofit Ajatusleikki, jolla kuvataan erilaisia synkronointiin liittyviä ongelmia


Lataa ppt "Synkronointi Yksi tärkeimmistä rinnakkaisuuteen liittyvistä asioista. semaforit tapahtumalaskurit monitorit."

Samankaltaiset esitykset


Iklan oleh Google