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

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

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

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ä:

Tavoite. Monitorit. Semafori perusmekanismi synkronointiin

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

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

Yhteenvetoa. Ongelmakenttä

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

Semaforit ja rinnakkaisuuden hallinta

Semaforit ja rinnakkaisuuden hallinta

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

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

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

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

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

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

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

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

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

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

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

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

Ohjelmoinnin peruskurssien laaja oppimäärä

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

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

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

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

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

Projekti 1 Säikeet ja kriittisen vaiheen kontrollointi javalla

5. Luento: Rinnakkaisuus ja reaaliaika. Tommi Mikkonen,

Oppimistavoitteet kurssilla Rinnakkaisohjelmointi

Rinnakkaisohjelmointi kurssi. Opintopiiri työskentelyn raportti

Ohjelmoinnin peruskurssien laaja oppimäärä

useampi ns. avain (tai vertailuavain) esim. opiskelijaa kuvaavassa alkiossa vaikkapa opintopistemäärä tai opiskelijanumero

812315A Ohjelmiston rakentaminen. Asynkronisuus

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

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

TIES542 kevät 2009 Yhteismuistisamanaikaisuus

815338A Ohjelmointikielten periaatteet

Rinnakkaisohjelmistot. Liisa Marttinen Tietojenkäsittelytieteen laitos Helsingin yliopisto Kevät 2004

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

A TIETORAKENTEET JA ALGORITMIT

Rinnakkaisohjelmointi, Syksy 2006

Hajautettu ympäristö Ei yhteistä muistia Kommunikointi sanomien välityksellä

Hajautettu ympäristö Ei yhteistä muistia Kommunikointi sanomien välityksellä

Johdantoa. Miksi rinnakkaisuutta? Laitteistoarkkitehtuureja. Rinnakkaisuus - Samanaikaisuus. Peräkkäisyyteen perustuvat sovellukset

Prosessi perinteisesti

Johdantoa. Andrews, Ch 1

Johdantoa. Rinnakkaisuus - Samanaikaisuus. Peräkkäisyyteen perustuvat sovellukset

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

Luento 6. T Ohjelmoinnin jatkokurssi T1 & T Ohjelmoinnin jatkokurssi L1. Luennoitsija: Otto Seppälä

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

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

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

11/20: Konepelti auki

Lukkiutuminen. Taustaa

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

2 Konekieli, aliohjelmat, keskeytykset

Monitorit -projekti Rinnakkaisohjelmointi

Processes and threads

815338A Ohjelmointikielten periaatteet Harjoitus 5 Vastaukset

Sisällys. 18. Abstraktit tietotyypit. Johdanto. Johdanto

Johdantoa. Miksi rinnakkaisuutta? Keskinäinen kommunikointi. Prosessit voivat häiritä toisiaan! Rinnakkaisuus - Samanaikaisuus

Tutoriaaliläsnäoloista

Operaattoreiden ylikuormitus. Operaattoreiden kuormitus. Operaattoreiden kuormitus. Operaattoreista. Kuormituksesta

käyttötapaukset mod. testaus

Sisältö, osa II. Sanomanvälitys. Kanavat. Hajautettu ympäristö Ei yhteistä muistia Kommunikointi sanomien välityksellä.

18. Abstraktit tietotyypit 18.1

Käännös, linkitys ja lataus

Sisällys. 1. Omat operaatiot. Yleistä operaatioista. Yleistä operaatioista

Aliohjelmatyypit (2) Jakso 4 Aliohjelmien toteutus

Olion elinikä. Olion luominen. Olion tuhoutuminen. Olion tuhoutuminen. Kissa rontti = null; rontti = new Kissa();

Luento 4 Aliohjelmien toteutus

1. Omat operaatiot 1.1

Jakso 4 Aliohjelmien toteutus

ELM GROUP 04. Teemu Laakso Henrik Talarmo

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

Tietorakenteet ja algoritmit - syksy

Vertailulauseet. Ehtolausekkeet. Vertailulauseet. Vertailulauseet. if-lauseke. if-lauseke. Javan perusteet 2004

Muistutus aikatauluista

Sisällys. 17. Ohjelmoinnin tekniikkaa. Aritmetiikkaa toisin merkiten. for-lause lyhemmin

Jakso 4 Aliohjelmien toteutus

11. Javan toistorakenteet 11.1

815338A Ohjelmointikielten periaatteet Harjoitus 3 vastaukset

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

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

Rinnakkaisohjelmointi

Rinnakkaisohjelmointi

Rinnakkaisohjelmointi

12. Javan toistorakenteet 12.1

LOAD R1, =2 Sijoitetaan rekisteriin R1 arvo 2. LOAD R1, 100

RINNAKKAINEN OHJELMOINTI A,

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

Tietorakenteet ja algoritmit Johdanto Lauri Malmi / Ari Korhonen

Sekvenssi: kokoelma peräkkäisiä alkioita (lineaarinen

ITKP102 Ohjelmointi 1 (6 op)

Transkriptio:

Monitorit Monitori Synkronointimenetelmiä Esimerkkejä Andrews 5.1-5.2, Stallings 5.5 Tavoite Minimoi virhemahdollisuuksia poissulkeminen ohjelmoijan vastuulla P():t ja V():t siellä, täällä ja tuolla - meniköhän oikein? Yksityiskohtia pois ohjelmoijalta kääntäjälle mitä yhteisiä muuttujia prosesseilla mikä semafori liittyy mihinkin kriittiseen alueeseen missä kohdassa kriittiset alueet sijaitsevat ohjelmakoodissa Kääntäjä voisi tuottaa koodia, jossa yhteiskäytön automaattinen kontrollointi yhteisiä muuttujia käytetään vain kriittisen alueen sisällä kriittiselle alueelle siirrytään ja sieltä poistutaan oikein mutta saattaa rajoittaa rinnakkaisuutta 5-2

Monitori 5-3 Monitori Hoare 1974 Kapseloi datan + käsittelevät operaatiot abstraktit objektit ja julkiset metodit Kaikki yhteiset, pysyvät muuttujat monitorin sisällä Tarjoaa automaattisesti poissulkemisen vain yksi monitorin aliohjelma kerrallaan aktiivinen muut prosessit voivat olla odottamassa - joko pääsyä monitoriin tai monitorin ehtomuuttujassa kääntäjä! Aktiivinen prosessi - passiivinen monitori 5-4

Esittely monitor Mname { pysyvien muuttujien määrittely proseduurit alustuslauseet Monitori staattinen olio Prosessi kutsuu monitorin proseduureja Monitorin muuttujien arvot pysyvät niinkauan kuin monitori olemassa (permanent) Kutsu call Mname.opname(arguments) 5-5 Monitorin muuttujat yhteiskäytössä. Vain yksi prosessi kerrallaan suorittaa monitorin koodia. Proseduureissa voi käyttää paikallisia muuttujia, kullakin prosessilla niistä oma kopio (pinossa). Stallings Fig. 5.21: Structure of a Monitor.

Ehtomuuttujat ja operaatiot cond cv ei arvoa - vain jono Blocked prosesseja (paikka odotukselle) wait(cv) laita prosessi jonoon odottamaan operaatiota signal() prosessi joutuu aina jonoon! signal(cv) jos jono tyhjä, no operation, ehtomuuttuja ei muista jos jonossa prosesseja, herätä jonon ensimmäinen empty(cv) palauta true, jos jono on tyhjä vrt. semafori! 5-7 Monitorin käyttövuorot koodattava eksplisiittisesti synkronointi aina ohjelmoijan vastuulla jos prosessi ei voi jatkaa monitorin sisällä, vapauta monitori muiden käyttöön: kutsu wait(cv) odotus tavallaan monitorin ulkopuolellla! kun odotukseen liittyvä ehto tulee todeksi, kutsu signal(cv) signal() herättää monitorin sisällä jo olleen toisen prosessin Kumpi saa jatkaa proseduurissaan? Herättäjä? Herätetty? 5-8

Signaloinnin vaihtoehdot Signal and Continue (nonpreemptive) signaloija jatkaa, herätetty suoritukseen myöhemmin Signal and Wait (preemptive) signaloija odottaa, herätetty saa jatkaa heti (= prosessin vaihto) ks. Fig 5.21: signaler into urgent queue Odottavat prosessit ehtomuuttujan jonossa Odotus poissuljetun alueen ulkopuolella ks. Fig 5.21 monitor waiting area Myös uudet prosessit kilpailemassa pääsystä monitorin sisälle Onko ehto enää true, kun herätetty pääsee jatkamaan? 5-9 Signal and Continue Java, POSIX: phtreads-kirjasto, Andrewsin kirja (tämä kurssi) S&C vain vihje, että juuri silloin vaadittu ehto true, ehto ei kuitenkaan välttämättä enää voimassa, kun herätetty prosessi pääsee jatkamaan odotuskohdastaan kenties tarkistettava ennenkuin voi jatkaa! Signal and Wait kirjallisuudessa Andrews Fig. 5.1. 5-10

Esim: Semaforin toteutus monitorin avulla Andrews Fig. 5.2 Signal and Wait: FIFO semaphore ehto varmasti voimassa, kun herätetty suoritukseen Signal and Continue: toiminnallisuus ei täysin kiinnitetty muuttujien arvot saattaneet muuttua uudelleen, ennenkuin herätetty pääsee suorituksen Andrews Fig 5.3: FIFO semaphore using passing the condition Odotettu ehto voimassa, ojenna se sellaisenaan herätettävälle ehto varmasti voimassa, kun herätetty jatkaa muille prosesseille ehto ei ole voimassa 5-11 Andrews Fig. 5.2. condition passing Andrews Fig. 5.3.

Synkronointi 5-13 Synkronointi (Condition Synchronization) vrt. 4.5 Andrews Fig. 5.4.

process Producer[i=1 to N] { typet data; while (true) { tuota data; call Bounded_Buffer.deposit(data); process Consumer[i=1 to M] { typet data; while (true) { Bounded_Buffer.fetch(data); kuluta data; Prosessit monitorin ulkopuolella! Miksi? 5-15 Lisää operaatioita wait (cv, rank) odota arvon mukaan kasvavassa järjestyksessä (priority wait) minrank(cv) palauta jonon ensimmäisen prosessin arvo signal_all(cv) herätä kaikki ehtomuuttujassa cv odottavat prosessit S&C: while (! empty(cv)) signal(cv); S&W: ei kovin hyvin määritelty miksei? vrt. semafori! 5-16

Kaikkien herätys (Broadcast Signal) Huom: DB ei monitorin sisällä! Miksei? vrt. 4.13 Andrews Fig. 5.5. Prioriteetin mukaan jonotus (Priority Wait) Condition passing: Pidä resurssi varattuna, anna varattuna seuraavalle prosessille! Ei etuilua! vrt. 4.14 Andrews Fig. 5.6.

Kattava herätys (Covering Condition) Herätä kaikki odottajat - tarkistakoot itse, onko jatkamislupa edelleen voimassa! Andrews Fig. 5.7. Priority Wait Herätä vain ne, jotka voivat jatkaa! Andrews Fig. 5.8.

Synkronointi Priority wait helppo ohjelmoida, tehokas ratkaisu voi käyttää, jos odotusehdoilla staattinen järjestys Covering condition voi käyttää, jos herätetty prosessi voi tarkistaa ehdon uudelleen ei voi käyttää, jos odotusehdot riippuvat myös muiden odottavien prosessien tiloista Jos minrank ei riitä odotuksen/vuorojen järjestämiseen, talleta yhteiset odotusehdot pysyviin muuttujiin ja jätä prosessit odottamaan yksityisiin ehtomuuttujiin ohjelmoi itse jonon ylläpito (jonotusjärjestys) 5-21 Rendezvous: Nukkuva parturi Useita aktiivisia prosesseja Rendezvous: kahden prosessin kohtaaminen vrt. puomisynkronointi Kutakin odotussyytä varten ehtomuuttuja ja laskuri rendezvous: uusi asiakas - vapaa parturi Asiakkaan odotettava, että parturi vapaa ovi auki Parturin odotettava, että asiakas paikalla asiakas poistuu 5-22

Systemaatt. ratkaisu resurssi: muuttuja varaus: vähennä (-) vapautus: lisää (+) varo muita: while Andrews Fig. 5.10. process Barber { typet data; while (true) { call Barber_Shop.get_next_customer();... parturoi... call Barber_Shop.finished_cut() process Customer[i=1 to M] { while (true) {.. tee sitä ja tätä... call Barber_Shop.get_haircut(); 5-24

POSIX-kirjasto, pthread # include <pthread.h> ehtomuuttujat käyttö yhdessä mutexin kanssa monitori pthread_cond_init(), *_wait(), *_signal(), *_broadcast(), *_timedwait(), *_destroy() Java, synchronized methods automaattinen poissulkeminen monitori ei ehtomuuttujia, yksi implisiittinen odotusjono / objekti operaatiot wait(), notify(), notifyall() Lue man- / opastussivut Andrews ch 5.4, 5.5 5-25 Kertauskysymyksiä? 5-26