Esittely latautuu. Ole hyvä ja odota

Esittely latautuu. Ole hyvä ja odota

1 Rio s05 / Liisa Marttinen Kertaus: Semaforit Semaforin operaatiot: sem s = n; # semaforin alkuarvo P(s); # jos s<=0, pysäyttää jonottamaan semaforin.

Samankaltaiset esitykset


Esitys aiheesta: "1 Rio s05 / Liisa Marttinen Kertaus: Semaforit Semaforin operaatiot: sem s = n; # semaforin alkuarvo P(s); # jos s<=0, pysäyttää jonottamaan semaforin."— Esityksen transkriptio:

1 1 Rio s05 / Liisa Marttinen Kertaus: Semaforit Semaforin operaatiot: sem s = n; # semaforin alkuarvo P(s); # jos s<=0, pysäyttää jonottamaan semaforin jonoon, muuten s=s-1 V(s); # vapauttaa jonottavan prosessin # semaforin jonosta; jos jono tyhjä # s=s+1 Semaforin sisäiset tietorakenteet: semaforin arvo semaforin jono (FIFO = FCFS)

2 2 Rio s05 / Liisa Marttinen Erilaisia semaforeja binäärisemafori: vain arvot 0 ja 1 yleinen semafori: arvot [0…n] jaettu binäärinen semafori: useasta semaforista aina yhdellä kerrallaan on arvo 1, muilla arvo on 0; yksityinen semafori: kullakin prosessilla oma semafori poissulkeva semafori (‘mutex’): varmistaa, että vain yksi kerrallaan suorittaa kriittistä koodiaan pääsysemafori (‘entry’): rajoittaa pääsyä; esim. montako prosessia voi ‘samanaikaisesti’ suorittaa tiettyjä koodinosia sígnaloiva semafori : ilmoittaa tapahtumasta, jota toinen odottaa

3 3 Rio s05 / Liisa Marttinen Yleisiä ohjeita semaforien käytöstä Semaforeille on vain operaatiot: alustus, P(), V() Semaforin alkuarvo etenemislupien lkm/vapaiden resurssien lkm kuinka moni prosessi voi tehdä P() -operaation joutumatta semaforin jonoon  tarkista semaforien oikeat alkuarvot! Missä tilanteissa odotettava? kutakin tilannetta kohti oma semafori prosessi odottamaan  P( ) Missä tilanteissa odottaminen päättyy? päästä odottaja etenemään  V( )

4 4 Rio s05 / Liisa Marttinen Onko P()-operaatioita kriittisen alueen sisällä? pääseekö joku varmasti vapauttamaan odotuksesta Jos tarve tietää semaforin arvo tai onko joku jonossa  oma laskurimuuttuja! muista sillekin poissulkeminen Jos tarve priorisointiin (semaforin jono FCFS!)  ylläpidä omaa jonoa jonon alkiossa prioriteetin (järjestyksen) määräävä arvo sekä yksityinen odotussemafori  Nyt algoritmi voi rauhassa tutkia jonon tilaa ensin ja päättää sitten päästääkö jonkun etenemään

5 5 Rio s05 / Liisa Marttinen ensimmäisiä synkronointivälineitä ja yhä edelleen tärkeitä esim. käyttöjärjestelmissä Nyt myös Javassa mukana kriittiset alueet sem mutex = 1; # jotta alussa joku pääsee ……. P(mutex); kriittinen alue # vain yksi prosessi kerrallaan V(mutex)

6 6 Rio s05 / Liisa Marttinen prosessien signallointi Yleisesti prosessi odottaa jotain toisen prosessin aiheuttamaa tapahtumaa sem event =0; process w1: process W2: …. ….. P(event); ….. …….. V(event); ……. ……. …….. V(event); P(event); ………. ……… ………..

7 7 Rio s05 / Liisa Marttinen prosessien signallointia: puomisynkronointi sem ok1 = 0, ok2 = 0; process w1 { process W2{ …. ….. V(ok1); V(ok2); P(ok2); P(ok1); …. …. Jos monta prosessia, kannattaa käyttää erillistä koordinoijaa

8 8 Rio s05 / Liisa Marttinen Tuottaja ja kuluttaja: yksi puskurialue sem empty =1, full =0; # jaettu binäärisemafori process Producer [i = 1 to M] { …………. P(empty); buf = data; V(full); ….. process Consumer[j= 1 to N] { …………. P(full); result = buf; V(empty); …..

9 9 Rio s05 / Liisa Marttinen Tuottaja ja kuluttaja: rajoitettu puskuri sem empty = n, full =0; # laskevat vapaita ja täysiä # puskurialkioita sem mutexT =1, mutexK =1; # kriittisen alueen suojaamiseen Tuottaja i: Kuluttaja j: ……. …. P(empty); P(full); P(mutexT); P(mutexK); tuottajien kriittinen alue; kuluttajien kriittinen alue; V(mutexT); V(mutexK) V(full); V(empty); …… ……..

10 10 Rio s05 / Liisa Marttinen Kriittinen alue P(e) Lukija: Kirjoittaja: nw = 0?nw = 0 ja n r= 0? V(e) Odottavat kirjoittajat P(w) ei ole! on!! V(e) Odottavat lukijat P(r) ei ole! V(e) DB lue/kirjoita Signal r: dr>0 ei V(r) Signal w: V(e) on Baton passing: lukijat ja kirjoittajat Ennen lukemaan /kirjoittamaan menemistä Poistuu odottamaan ja jättää kriittisen alueen oven auki!

11 11 Rio s05 / Liisa Marttinen Odottavat kirjoittajat P(w) DB lue/kirjoita Odottavat lukijat P(r) Kriittinen alue P(e) Lukija: nr = nr-1 nr == 0 ja dw >0 ? Signal r: ei V(w) V(e) on Viimeinen poistuva lukija vapauttaa odottavan kirjoittajan

12 12 Rio s05 / Liisa Marttinen Odottavat kirjoittajat P(w) DB lue/kirjoita Odottavat lukijat P(r) Kriittinen alue P(e) Kirjoittaja: nw = nw-1 Signal w: nr == 0 ja dw >0 ? ei V(w) V(e) on dr > 0 ? on V(e) V(r) ei

13 13 Rio s05 / Liisa Marttinen Andrews Fig. 4.12: Outline of readers and writers with passing the baton.

14 14 Rio s05 / Liisa Marttinen Resurssien varaamisen perussapluuna P(entry) if (pyyntöön ei voi suostua) DELAY anna resurssi SIGNALNEXT Resurssien vapauttamisen perussapluuna P(entry) palauta resurssi SIGNALNEXT SIGNALNEXT: toteuta haluamasi vapautusjärjestys mikä odottavista prosesseista pääsee etenemään? voiko uusi ilmaantua paikalle?

15 15 Rio s05 / Liisa Marttinen Resurssien hallinta, Yleinen ratkaisu pyydä(parametrit) P(mutex); # poissulkeminen if (pyyntöön ei voi suostua) DELAY; # odota semaforissa anna resurssi; SIGNALNEXT; vapauta(parametrit) P(mutex); palauta resurssi; SIGNALNEXT; DELAY ~ V(mutex), P(odotussemafori) SIGNALNEXT ~ V(odotussemafori) else V(mutex) DELAY: Älä jätä prosessia Blocked-tilaan tärkeä semafori kiinni! SIGNALNEXT: Herätä odottaja, jätä kriittinen alue kiinni (baton passing).

16 16 Rio s05 / Liisa Marttinen SJN: Lyhyin työ seuraavaksi request(time,id): P(e); if (!free) DELAY; free = false; SIGNAL; release(): P(e); free = true; SIGNAL;

17 17 Rio s05 / Liisa Marttinen DELAY: Odottajan ID ja TIME (suoritusaika) suoritusajan mukaan järjestettyyn jonoon (PAIRS) oikeaan kohtaan V(e) eli vapauta kriittinen alue jää odottamaan vuoroasi P(b[ID]) Tässä tarvitaan kullekin oma semafori, jotta pystytään ’herättämään’ oikea prosessi: b[n] = ([n] 0) PAIRS-jono määrää järjestyksen: herätetään aina jonon ensimmäinen prosessi SIGNAL: Reguest-vaihe vapauta kriittinen alue V(e) eli päästä joku uusi Request- vaiheeseen Release-vaiheen lopussa Jos jonossa odottajia, niin ota jonon ensimmäisen alkiopari (time, ID) ja herätä prosessi ID: V(b[ID]; muuten V(e)

18 18 Rio s05 / Liisa Marttinen Andrews Fig. 4.14: Shortest job next allocation using semaphores.


Lataa ppt "1 Rio s05 / Liisa Marttinen Kertaus: Semaforit Semaforin operaatiot: sem s = n; # semaforin alkuarvo P(s); # jos s<=0, pysäyttää jonottamaan semaforin."

Samankaltaiset esitykset


Iklan oleh Google