Lataa esitys
Esittely latautuu. Ole hyvä ja odota
JulkaistuErkki Laine Muutettu yli 9 vuotta sitten
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.
Samankaltaiset esitykset
© 2024 SlidePlayer.fi Inc.
All rights reserved.