Lataa esitys
Esittely latautuu. Ole hyvä ja odota
JulkaistuAnita Laine Muutettu yli 9 vuotta sitten
1
1 Rio / Auvo Häkkinen 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 / Auvo Häkkinen 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 / Auvo Häkkinen 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 / Auvo Häkkinen 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 / Auvo Häkkinen 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 vapautusijärjestys mikä odottavista prosesseista pääsee etenemään? voiko uusi ilmaantua paikalle?
6
6 Rio / Auvo Häkkinen ensimmäisiä synkronointivälineitä ja yhä edelleen tärkeitä esim. käyttöjärjestelmissä kriittiset alueet sem mutex = 1; ……. P(mutex); kriittinen alue # vain yksi prosessi kerrallaan V(mutex)
7
7 Rio / Auvo Häkkinen prosessien signallointi 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 / Auvo Häkkinen 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 / Auvo Häkkinen 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 / Auvo Häkkinen 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 / Auvo Häkkinen 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 / Auvo Häkkinen 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 / Auvo Häkkinen Andrews Fig. 4.12: Outline of readers and writers with passing the baton.
14
14 Rio / Auvo Häkkinen 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).
15
15 Rio / Auvo Häkkinen SJN: Lyhyin työ seuraavaksi request(time,id): P(e); if (!free) DELAY; free = false; SIGNAL; release(): P(e); free = true; SIGNAL;
16
16 Rio / Auvo Häkkinen 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)
17
17 Rio / Auvo Häkkinen Andrews Fig. 4.14: Shortest job next allocation using semaphores.
18
18 Rio / Auvo Häkkinen yleinen prosessien synkronointi process Reader [i=1 to M] …… SIGNAL;
Samankaltaiset esitykset
© 2024 SlidePlayer.fi Inc.
All rights reserved.