OSA I: Yhteisten muuttujien käyttö Prosessit samassa koneessa. Sisältöä. Poissulkeminen. Halutut ominaisuudet 2-1. Rinnakkaiset, atomiset operaatiot

Samankaltaiset tiedostot
OSA I: Yhteisten muuttujien käyttö. Prosessit samassa koneessa. Rio 2004 / Auvo Häkkinen 2-1

OSA I: Yhteisten muuttujien käyttö. Sisältöä. Prosessit samassa koneessa. Poissulkeminen ja synkronointi. Semaforit ja rinnakkaisuuden hallinta

OSA I: Sisältöä. Atomisuus (atomic action) v Poissulkeminen ja synkronointi. Kriittinen (koodi)alue (critical section)

Semaforit Liisa Marttinen 2-1

alkuarvo P(S) public V(S) public jos kriittinen alue vapaa, lukitse se ja jatka eteenpäin jos kriittinen alue varattu, odota

Ongelmakenttä. Rinnakkaisuuden tarve. Kommunikointiin tarvitaan. Ympäristö Suunnittelun yksinkertaistaminen Suorituskyky Luotettavuus

Semaforit. Semaforit. semafori S S.arvo. alkuarvo P(S) S.joukko V(S)

Ongelmakenttä. Yhteenvetoa. Ratkottava. Mekanismit. Lukkomuuttujat. Lukkomuuttujat, Spin Locks. Rinnakkaisuuden tarve. Kommunikointiin tarvitaan

Yhteenvetoa. Ongelmakenttä

Semaforit ja rinnakkaisuuden hallinta. Tuottajat ja kuluttajat. Lukijat ja kirjoittajat. Andrews 4.2, Rio 2004 / Auvo Häkkinen

Semaforit ja rinnakkaisuuden hallinta

Semaforit ja rinnakkaisuuden hallinta

Käyttöjärjestelmät: poissulkeminen ja synkronointi

Ongelmakenttä. Yhteenvetoa. Mekanismit. Ratkottava. Lukkomuuttujat, Spin Locks. Lukkomuuttujat. Rinnakkaisohjelmistot 2004 / Auvo Häkkinen 9-1

Monitorit. Monitori Synkronointimenetelmiä Esimerkkejä. Andrews , Stallings 5.5

Monitorit. Tavoite. Monitori Synkronointimenetelmiä Esimerkkejä. Andrews , Stallings 5.5. Minimoi virhemahdollisuuksia

Semaforit ja rinnakkaisuuden hallinta. Tuottajat ja kuluttajat. Halkaistu binäärisemafori (Split binary semaphore) semaforit empty ja full

OSA II: Hajautettu ympäristö. Sisältö, osa II. Ei yhteistä muistia. Sanomanvälitys. Etäproseduurikutsu. Rendezvous. Rio 2004 / Auvo Häkkinen

Rinnakkaisohjelmointi

Rinnakkaisohjelmointi

Rinnakkaisohjelmointi

5. Luento: Rinnakkaisuus ja reaaliaika. Tommi Mikkonen,

Tavoite. Monitorit. Monitori Hoare Monitori. Minimoi virhemahdollisuuksia. Monitori Synkronointimenetelmiä Esimerkkejä

Liite 1. Projektin tulokset (Semaforit Javassa) Jukka Hyvärinen Aleksanteri Aaltonen

Oppimistavoitteet kurssilla Rinnakkaisohjelmointi

Palvelut. Sulautetut järjestelmät Luku 2 Sivu 1 (??) Sulautetut käyttöjärjestelmät

OSA II: Hajautettu ympäristö. Ei yhteistä muistia. Rio 2004 / Auvo Häkkinen

Lukkiutuminen. Taustaa Aterioivat Filosofit Ennaltaehkäisy Havaitseminen Välttely. Andrews 4.3 Stallings (tai mikä tahansa KJ-kirja)

Lukkiutuminen. Taustaa

4-13. Ratkaisu 4: OK, mutta... vrt. 2. Ratkaisu 3: OK. Ratkaisu 5: OK? Nälkiintyminen?

OSA II: Hajautettu ympäristö. Sisältö, osa II. Sanomanvälitys. Käsitteistöä. Sanomanvälitys. Kommunikointi. Sanomanvälitys. Etäproseduurikutsu

Taustaa. Lukkiutuminen. Seuraukset. Määritelmiä Lukkiuma (deadlock) päättymätön odotus BLOCKED-tilassa. prosessi P. prosessi Q. pyydä A? OK.

Ohjelmoinnin peruskurssien laaja oppimäärä

Tieto ja sen osoite (3) Jakso 3 Konekielinen ohjelmointi (TTK-91, KOKSI) Osoitinmuuttujat. Tieto ja sen osoite (5)

Ohjelmoinnin peruskurssien laaja oppimäärä

4. Luento: Prosessit ja säikeets. Tommi Mikkonen,

Rinnakkaisuus. parallel tietokoneissa rinnakkaisia laskentayksiköitä concurrent asioita tapahtuu yhtaikaa. TTY Ohjelmistotekniikka

Graafisen käyttöliittymän ohjelmointi Syksy 2013

Jakso 3 Konekielinen ohjelmointi (TTK-91, KOKSI)

Etäproseduurikutsu, Remote Procedure Call (RPC) Etäproseduurikutsu. Poissulkeminen moduulin sisällä?

Etäproseduurikutsu. Etäproseduurikutsu, Remote Procedure Call (RPC)

Jakso 3 Konekielinen ohjelmointi (TTK-91, KOKSI)

Etäproseduurikutsu. RPC Toteutus Virhesemantiikka. Andrews 8.1, 10.3, Stallings 13.3

Semaforit Javassa. Mari Kononow, Eveliina Mattila, Sindi Poikolainen HELSINGIN YLIOPISTO

Prosessi perinteisesti

Tietojenkäsittelyn perusteet 2. Lisää käyttöjärjestelmistä

Stallings, Luku 4.1. KJ-I I S2005 / Tiina Niklander, kalvot Auvo HäkkinenH

poissulkeminen ohjelmoijan vastuulla P():t ja V():t siellä, täällä ja tuolla - meniköhän oikein? Yksityiskohtia pois ohjelmoijalta kääntäjälle

Monitorit. Monitori Synkronointimenetelmiä Esimerkkejä

Tavoite. Monitorit. Semafori perusmekanismi synkronointiin. Hyötyjä:

Käyttöjärjestelmät: prosessit

1. Tarkastellaan seuraavaa stokastista Petri-verkkoa: p 2. p 1. lock write 1

IT K 1 45 K ä yt t öj ä rj estelmät

Stallings, Luku 4.1. KJ-I S2004 / Tiina Niklander, kalvot Auvo Häkkinen 4-1. KJ-I I S2004 / Tiina Niklander, kalvot Auvo Häkkinen 12-1

Alkuarvot ja tyyppimuunnokset (1/5) Alkuarvot ja tyyppimuunnokset (2/5) Alkuarvot ja tyyppimuunnokset (3/5)

Luento 3 Konekielinen ohjelmointi (TTK-91, KOKSI)

Sisältöä SÄIKEET, SMP

Jaana Diakite Projekti 1 JAVA-Monitorit 1(13) Rinnakkaisohjelmointi Anu Uusitalo

Javan semaforit. Joel Rybicki, Aleksi Nur mi, Jara Uitto. Helsingin yliopisto

Rinnakkaisohjelmointi, Syksy 2006

12. Javan toistorakenteet 12.1

Sisällys. 11. Javan toistorakenteet. Laskurimuuttujat. Yleistä

Luento 3 (verkkoluento 3) Ttk-91 konekielinen ohjelmointi. Ohjelman esitysmuoto Konekielinen ohjelmointi ttk-91:llä (Titokone, TitoTrainer)

SÄIKEET, SMP. Sisältöä. Stallings, Luku 4. Prosessi vs. säie Miksi säikeitä? ULT: Käyttäjätason säikeet KLT: Säikeiden toteutus ytimessä

Rinnakkaisohjelmointi kurssi. Opintopiiri työskentelyn raportti

Sisältöä SÄIKEET, SMP

2 Konekieli, aliohjelmat, keskeytykset

Koottu lause; { ja } -merkkien väliin kirjoitetut lauseet muodostavat lohkon, jonka sisällä lauseet suoritetaan peräkkäin.

11. Javan toistorakenteet 11.1

Jakso 12 Yhteenveto. Keskeiset asiat Teemu Kerola, K2000

Tietokoneen toiminta, K Tavoitteet (4)

Etäproseduurikutsu, Remote Procedure Call (RPC) Etäproseduurikutsu. Poissulkeminen moduulin sisällä?

Ohjelmoinnin peruskurssi Y1

Rajapinta (interface)

12. Javan toistorakenteet 12.1

OHJ-4301 Sulautettu Ohjelmointi

Ongelma(t): Jotta tietokone olisi mahdollisimman yleiskäyttöinen ja suorituskykyinen, niin miten tietokoneen resurssit tulisi tarjota ohjelmoijalle,

Processes and threads

Metodit. Metodien määrittely. Metodin parametrit ja paluuarvo. Metodien suorittaminen eli kutsuminen. Metodien kuormittaminen

Jaetun muistin muuntaminen viestin välitykseksi. 15. lokakuuta 2007

TIES542 kevät 2009 Yhteismuistisamanaikaisuus

Java-kielen perusteet

Harjoitus Olkoon olemassa luokat Lintu ja Pelikaani seuraavasti:

Sisällys. Yleistä attribuuteista. Näkyvyys luokan sisällä. Tiedonkätkentä. Aksessorit. 4.2

Monitorit -projekti Rinnakkaisohjelmointi

Käyttöjärjestelmät II

Sisällys. 12. Javan toistorakenteet. Yleistä. Laskurimuuttujat

Ohjelmoinnin perusteet Y Python

TIEP114 Tietokoneen rakenne ja arkkitehtuuri, 3 op. Assembly ja konekieli

Jakso 3 Konekielinen ohjelmointi (TTK-91, KOKSI)

812315A Ohjelmiston rakentaminen. Asynkronisuus

Jakso 3 Konekielinen ohjelmointi (TTK-91, KOKSI)

OSA II: Sisältö, osa II. Sanomanvälitys. Käsitteistöä. Sanomanvälitys. Kommunikointi. Hajautettu ympäristö Ei yhteistä muistia.

Luento 4 Aliohjelmien toteutus

Rinnakkaistietokoneet luento S

Algoritmit 2. Luento 7 Ti Timo Männikkö

Sisältö. 2. Taulukot. Yleistä. Yleistä

Tavoite. Monitorit. Semafori perusmekanismi synkronointiin

TIEP114 Tietokoneen rakenne ja arkkitehtuuri, 3 op. Assembly ja konekieli

Arto Salminen,

Transkriptio:

Sisältöä OSA I: Poissulkeminen ja nti Semaforit ja rinnakkaisuuden hallinta Yhteisten muuttujien käyttö Prosessit samassa koneessa Lukkiutuminen Monitorit 2-1 2-2 Poissulkeminen ja nti Rinnakkaiset, atomiset operaatiot Spin Locks Semaforit Synkronointi Andrews 2.1-2.5, 3.1-3.2, 4.1-4.2, 6.3 ja Stallings 5.1,5.3-5.4 Rinnakkaiset, atomiset operaatiot Kriittinen alue, useita käsittelijöitä Vain yksi saa edetä alueella kerrallaan char out, in; procedure echo { input (in, keyboard); out = in; output (out, display); process P[i=1 to 2] {... echo();... Andrews 3.1. (s. 94-95) prosessi P[1] prosessi P[2] input (in,..); input(in,..); out = in; out = in; output (out,..); output(out,..); 2-4 Poissulkeminen Ohjelman perusmalli process CS[i=1 to n] { # n rinnakkaista prosessia while (true) { Entry protocol # varaa < kriittinen alue > # käytä (exclusive!) Exit protocol # vapauta Ohjelmoi kriittiset alueet lyhyiksi Halutut ominaisuudet Poissulkeminen Vain yksi prosessi kerrallaan suorituksessa kriittisellä alueella Ei lukkiutumisvaraa, ei elohiirtä Jos useita sisäänpyrkijöitä, jotain onnistaa Ei tarpeettomia viipeitä, ei nälkiintymistä Jos alue vapaa, pääsy sallittava Lopulta onnistaa Kukaan ei joudu odottamaan ikuisesti 3 safety properties + liveness property deadlock livelock 2-5 2-6

Lukkomuuttujat, Spin Locks Spin Locks, Busy Waiting Andrews 3.2 (s. 97-101) Boolean-muuttuja lock lock==true kriittinen alue varattu lock==false kriittinen alue vapaa Entry protocol while (lock) ; # aktiivinen odotus, pörrää # check again if (!lock) # busy loop lock=true; Exit protocol lock=false; 2-7 2-8 Toteutus symbolisella konekielellä Test-and-Set-käsky muuttuja L: L==1, jos kriittinen alue vapaa L==0, jos kriittinen alue varattu L == 10 LOOP: LOAD R1,L LOOP: LOAD R1,L JZER R1,LOOP JZER R1,LOOP LOAD R1,=0 LOAD R1,=0 Oma konekielen käsky atominen laitetason suoritus (execute-vaihe) argumentti: lukkomuuttuja boolean paluuarvo TS L merkitys: < temp=l; L=0; if (temp==1) jump *+2; > < kriittinen alue > LOAD R1,=1 < kriittinen alue > LOAD R1,=1 Käyttö: LOOP: TS L JUMP LOOP... OK? Testaus ja asetus atomisesti! 2-9 2-10 Test-and-Set ja TT-K91? bool TS(bool lock) { < bool initial = lock; /* arvo talteen */ lock = true; /* lukitse lukko */ return initial; > /* palauta lukon arvo */ Andrews s. 99 TS Ri,L entry exit < Ri mem[l] mem[l] 0 if (Ri==1) jump *+2 > LOOP: TS R1,L # L: 1(vapaa), 0(varattu) JUMP LOOP < kriittinen alue > LOAD R1,=1 # L 1 Test and Set toiminto lausekielellä esitettynä OK? Moniprosessorijärjestelmä? Keskeytys? 2-11 2-12

Toteutuvatko vaatimukset? Poissulkeminen? OK! Vain yksi prosessi kerrallaan suorituksessa kriittisellä alueella Ei lukkiutumisvaraa, ei elohiirtä? OK! Jos useita sisäänpyrkijöitä, jotain onnistaa Ei turhia viipeitä, ei nälkiintymistä? OK! Jos alue vapaa, pääsy sallittava Lopulta onnistaa? EI VÄLTTÄMÄTTÄ Kukaan ei joudu odottamaan ikuisesti Ongelmana suorituskyky, jos monta prosessia kilpailemassa ja koko ajan tutkimassa ja kirjoittamassa lukkomuuttujaan Rasittaa muistia ja muistiväylää Kirjoittaminen häiritsee välimuistin toimintaa => Test-and-Test-and-Set = testatan ensin, onko lukko vapaa Lukkomuuttuja ja lukko-operaatiot Muuttujan tyyppi Operaatiot lock esittely, alkuarvo lock x=1; # vapaa LOCK(x) loop test=ts(x); # aseta x = 0 until(test==1); # oliko vapaa? UNLOCK(x) x=1; [ Linux kernel: spinlock_lock(x), spinlock_unlock(x) ] [ vrt. kirja CSEnter, CSExit ] 2-13 2-14 Poissulkeminen lukkomuuttujaa käyttäen lock L=1; # käytä lukitsemaan tiettyä kriittistä aluetta # sopimus prosessien kesken! process CS [i=1 to N] { # n rinnakkaista! while (true){ LOCK(L); # varaa < kriittinen alue > # käytä (exclusive!) UNLOCK(L); # vapauta Tulkinta: L=1 yhdellä lupa edetä Aktiivinen vs. passiivinen odotus busy-wait: turhaa laitteiston käyttöä! kilpailu useita prosesseja (käyttävät yhteistä prosessoria), jotka haluavat päästä kriittiselle alueelle livelock pienen prioriteetin prosessi kriittisellä alueella suuren prioriteetin prosessi pörrää LOCK-operaatiossa vaihtoehto jos pääsy ei sallittu, odota Blocked-tilassa 2-15 2-16 Semaforit Andrews 4.1 (s. 153-155), 6.3 (s. 276-279) Semaforit public public alkuarvo P(S) V(S) private private semafori S S.arvo S.jono P() aka WAIT() aka Down() jos kriittinen alue vapaa, lukitse se ja jatka eteenpäin jos kriittinen alue varattu, odota V() aka SIGNAL() aka Up() jos joku odotusjonossa, päästä joku etenemään muuten vapauta kriittinen alue atomisia 2-17 2-18

Yleistä semaforeista Alkuperäinen idea: Dijkstra (60-luvun puoliväli) binäärisemaforit: vain arvot 0 ja 1 käytössä Operaatiot Alustus sem S=1; sem forks[5] = ([5] 1); P(S) (= passeren) V(S) (= vrijgeven) S.arvo 1 vapaa / avoinna / etenemislupa 0 varattu / suljettu / eteneminen kielletty S.jono Etenemislupaa Blocked-tilassa odottavat prosessit Toteutus: PCB:t linkitetyssä listassa (=jono) Yleiset semaforit: S.arvo ~ resurssilaskuri S.arvo > 0 vapaiden yksiköiden lkm, etenemislupien määrä kuinka monta prosessia voi tehdä P()-operaation joutumatta Blocked tilaan ja semaforin jonoon S.arvo = 0 ei vapaita [ jotkut toteutukset: S.arvo < 0 ] jonossa odottavien prosessien lkm Ei operaatiota jonon käsittelyyn / pituuden kyselyyn! semaforin arvon kyselemiseen! jos tarve tietää, ylläpidä ko. tieto omassa muuttujassa 2-19 2-20 P/V:n toteutus KJ:n ytimessä (Andrews Fig 6.5) P(S) V(S) if (S.arvo > 0) S.arvo = S.arvo - 1 else aseta prosessin tilaksi Blocked, lisää prosessi jonoon S.jono if (isempty(s.jono)) S.arvo = S.arvo + 1 else siirrä S.jonon ensimmäinen prosessi Ready-jonoon (tilaksi Ready) 2-21 P/V:n toteutus (toinen tapa, Stallings Fig. 5.6 ja 5.7) P(S) V(S) Miten ohjelmoijan huomioitava tämä toteutusero? S.arvo = S.arvo - 1 if (S.arvo < 0) aseta prosessin tilaksi Blocked, lisää prosessi jonoon S.jono S.arvo = S.arvo + 1 if (S.arvo <= 0) siirrä S.jonon ensimmäinen prosessi Ready-jonoon 2-22 Poissulkeminen semaforia käyttäen sem mutex=1; # vain perinteinen muuttujan nimi P(lock) process CS [i=1 to N] { # rinnakkaisuus! while (true){ # varaa < critical section > # käytä (exclusive!) # vapauta yksi semafori kullekin erilliselle kriittiselle alueelle huomaa oikea alkuarvo 2-23 V(lock) P(lock) P(lock) V(lock) V(lock) Vrt. Stallings Fig. 5.10 Bacon Fig 9.19

Esimerkki: Muistinhallinta (1) prosessi --...... prosessi c1 c2... koodi Muistinhallinta addr [1:MAX]; int =MAX; function (): returns addr { get = []; = -1; procedure (addr freepage) { = +1; [] = freepage; # käyttö pinona 1,7,3,8,5,6,2,9,.. koodi 2-25 2-26 Toimiikos toi? addr [1:MAX]; int =MAX; function : returns addr { get = []; = -1 ==6 framepool 1,7,3,8,5,6,2,9,.. 6 function : returns addr { get = []; = -1 ==6 2-27 Muistinhallinta (1): poissulkeminen addr [1:MAX]; int =MAX; sem mutex=1; function (): returns addr { get = []; = -1; procedure (addr freepage) { = +1; [] = freepage; 1,7,3,8,5,6,2,9,.. mutex 0 2-28 Synkronointi Synkronointi Andrews 4.2 (s. 156-164) Prosessi P1 käskyjä kerro tapahtumasta käskyjä Prosessi P2 käskyjä odota tapahtumaa käskyjä... Tapahtuma: mikä tahansa kiinnostava puskuri_täynnä, io_valmis, laskenta valmis, kriittinen alue vapaa (Looginen) tapahtuma semaforimuuttuja Kumpi ehtii ensin ntikohtaan? tarvitsee paikan missä odottaa (~jonottaa) 2-29 2-30

Synkronointi semaforia käyttäen sem A_Ready = 0; 0 ei ole tapahtunut, 1 on tapahtunut Tuottaja Kumpi ehtii ensin? Oikea alkuarvo? tuota A V(A_ready); Kuluttaja P(A_ready); kuluta A 2-31 Muistinhallinta (2): nti addr [1:MAX]; int =MAX; sem mutex=1, avail=max; function () : returns addr { P(avail); get = []; = -1 procedure (addr freepage) { = +1; [] = freepage; V(avail); 1,7,3,8,5,6,2,9,.. mutex 0 avail 6 2-32 aika Puominti (barrier) n prosessia työskentelee yhdessä Iteratiivinen käsittely, nti tietyn välivaiheen jälkeen Prosessi A Prosessi B Prosessi C I II aika Worker[1] odota process Worker [i = 1 to N] { while () { käsittele vaihe x:n alku ; toimita titieto kaikille muille; odota titietoa kaikilta muilta; käsittele vaihe x:n loppu; Worker[2] Worker[3] odota odota 2-33 2-34 Puominti Puominti, yleiset semaforit sem arrive1 = 0, arrive2 = 0; process Worker1 { käsittele alkuosa 1 V(arrive1); # lähetä ntitapahtuma P(arrive2); # odota toista prosessia käsittele loppuosa 1 process Worker2 { käsittele alkuosa 2 V(arrive2); # lähetä ntitapahtuma P(arrive1); # odota toista prosessia käsittele loppuosa 2 Huomaa järjestys! 2-35 sem arrive=0, continue[1:n] = ( [N] 0 ); process Worker [i=1 to N] { käsittele alkuosa i V(arrive); # ntitapahtuma koordinaattorille P(continue[i]); # odota toisia prosesseja käsittele loppuosa i process Coordinator { while (true) { = 0; while ( < N) { # odota, kunnes N ntitapahtumaa P(arrive); ++; for [i = 1 to N] V(continue[i]); # ntitapahtuma prosesseille Entä jos vain yksi continue-semafori? 2-36

Rinnakkaisuuden hallinta resurssien varaus get/rel muuttujat hallinnan toteutus P/V semafori P/V:n toteutus LOCK/UNLOCK lukkomuuttuja {P(mutex) V(mutex) {P(mutex) V(mutex) P( ) LOCK(lock) UNLOCK(lock) mutex avail V( ) LOCK(lock) UNLOCK(lock) Kertauskysymyksiä? LOCK/UNLOCK toteutus test-and-set-käsky lukkomuuttuja LOCK loop..ts(x)... UNLOCK x = 1 2-37 2-38