 Monitorit Monitori Synkronointimenetelmiä Esimerkkejä Andrews 5.1-5.2, Stallings 5.5.

Slides:



Advertisements
Samankaltaiset esitykset
Tuloksellinen Java-ohjelmointi Luku 3 Luokkien käyttäminen
Advertisements

1. Missä vietät joulun useimmiten?. 2. Missä viettäisit joulun mieluiten?
Juha Kauppinen Consulting oy Työntekijäkysely Tietoja
Kokeen laatiminen ja arviointi Tiia Karpin
15. Loogiset operaatiot.
Pääkaupunkiseudun 8. luokkien palvelukyky Espoo, Tapiolan koulu Joulukuu 2013.
Hampuri, Saksa Löytää suunta, joka mahdollistaa Lions Clubs Internationalin saavuttavan sen täyden potentiaalin kansainvälisenä.
JavaScript (c) Irja & Reino Aarinen, 2007
VBA –ohjelmoinnin perusteet
vuorovaikutteiset www-sivut 1.Asiakas-palvelinmalli kuvana Request Response request.asp response.asp.
2.8.3 Abstraktit tietotyypit
Käännösaikaiset virheilmoitukset • Tulee silloin, kun koodissa on jotain sellaista, joka ei ole Javan syntaksin mukaista • Esim. – Syntax error, insert.
Synkronointi Yksi tärkeimmistä rinnakkaisuuteen liittyvistä asioista. semaforit tapahtumalaskurit monitorit.
@ Leena Lahtinen OHJELMAN OSITTAMINEN LUOKKA ATTRIBUUTIT METODIT.
Liisa Marttinen Semaforit Liisa Marttinen Semaforit P() aka WAIT() aka Down() jos kriittinen alue vapaa, lukitse se ja.
TAUOLLA TYÖKAVEREIDEN KANSSA
1 Senioreiden säästäminen ja maksutavat 2014 SENIOREIDEN SÄÄSTÄMINEN JA MAKSUTAVAT
Säännöt 30 kuvaa 45 sekuntia / kuva 10 sekuntia kirjoitusaikaa Vastaus suomeksi, ruotsiksi, englanniksi, tieteellisellä nimellä tai sen 3+3 lyhenteellä.
AET:n liikkuminen ja liputustekniikka
Säännöt 30 kuvaa 45 sekuntia / kuva 15 sekuntia kirjoitusaikaa Vastaus suomeksi, ruotsiksi, englanniksi, tieteellisellä nimellä tai sen 3+3 lyhenteellä.
Säännöt 30 kuvaa 45 sekuntia / kuva 10 sekuntia kirjoitusaikaa Vastaus suomeksi, ruotsiksi, englanniksi, tieteellisellä nimellä tai sen 3+3 lyhenteellä.
I.R.O. Research Oy vee 10/2000 Mediakäyttö Käyttää vähintään kerran viikossa Tytöt ja pojat *) Kirjat (esim. romaanit, lasten- ja nuortenkirjat)
Ehto- ja toistolauseet
TMA.003 / L3 ( )1 3. Funktioista 3.1. Kuvaus ja funktio Olkoon A ja B ei-tyhjiä joukkoja. Tulojoukon A  B = {(x,y) | x  A, y  B} osajoukko on.
Juha Kauppinen Consulting oy Rakenneselvitykseen liittyviä tutkimuksia Tiedotustilaisuus Karjasillan kirkolla Juha Kauppinen.
Elinkeinopoliittinen mittaristo 2014
Valittu kansa – Israel vai me?
Ohjelmoinnin tekniikkaa Sisällys for -lause lyhemmin. Vaihtoehtoisia merkintöjä aritmeettisille lauseille. Useiden muuttujien esittely.
Säännöt 30 kuvaa 45 sekuntia / kuva 15 sekuntia kirjoitusaikaa Vastaus suomeksi, ruotsiksi, englanniksi, tieteellisellä nimellä tai sen 3+3 lyhenteellä.
Yrittäjien äänestyskäyttäytyminen 50,7 57,6 55,0 23,4 20,3 21,9 11,4 9,3 8,0 5,2 5,5 6,9 4,2 4,5 3,6 0,7 1,7 1,3 1,7 0,0 0,0 0,7 0,0 0,0 2,7 1,0 3,3.
© Jukka Harju, Jukka Juslin
2 - 1 Rio syksy 2004 OSA I: Yhteisten muuttujien käyttö Prosessit samassa koneessa.
1 Kertaus koetta varten oleellisista asioista Jukka Juslin.
Jumala tuntee minut; Jeesus – Sana tuli ihmiseksi
Suuntaamattoman graafin syvyyshaku
1 Raha-asioiden suunnitteleminen ja nykyinen rahatilanne Senioritutkimus 2011.
Seinäjoki kisa A Tuomari: Tytti Lintenhofer ALO 12kyl, 4pys Kyl:
Maatalous, maaseutuyrittäminen rahavirrat 2008 ja 2007 Pohjois-Savo Jari Kauhanen MTK- Pohjois-Savo.
Eksponentiaalinen kasvaminen ja väheneminen
 Etäproseduurikutsu RPC Toteutus Virhesemantiikka Andrews 8.1, 10.3, Stallings 13.3.
ict1td002 - Copyright Raine Kauppinen 1 Alkuarvot ja tyyppimuunnokset (1/5)  Aiemmin olemme jo antaneet muuttujille alkuarvoja, esimerkiksi: int.
Visual Basic -ohjelmointi
Maitotaito PIENEN VAUVAN PÄIVÄ Maitotaito.
Säännöt 30 kuvaa 45 sekuntia / kuva 15 sekuntia kirjoitusaikaa Vastaus suomeksi, ruotsiksi, englanniksi, tieteellisellä nimellä tai sen 3+3 lyhenteellä.
1. Usean muuttujan funktiot
@ Leena Lahtinen OHJELMAN OSITTAMINEN LUOKKA ATTRIBUUTIT METODIT.
Heuristinen arviointi Käyttöliittymäseminaari Jere Salonen.
Komponenttipohjainen ohjelmistotekniikka (TJTSS56) Osa 4 Kevätlukukausi 2010 Jyväskylän yliopisto Tietojenkäsittelytieteiden laitos Markku Sakkinen.
@ Leena Lahtinen Toistorakenne Ohjelmassa toistetaan tiettyjä toimenpiteitä monta kertaa peräkkäin Toisto noudattaa sille kuuluvia tarkkoja standardoituja.
Suomen Lääkäriliitto | Finnish Medical AssociationLääkärit Suomessa | Physicians in Finland Tilastotietoja lääkäreistä ja terveydenhuollosta 2014 Statistics.
Rinnakkaisuus Järjestelmässä, jossa voi olla useita prosesseja rinnakkain suorituksessa voi tulla tilanteita, joissa prosessien suoritusta täytyy kontrolloida.
Johdetun luokan olion esittely... tMyn1 Johdetun luokan olion esittely ja määrittely Esittelyluokka tarkoittaa olion tunnuksen luokkaa. Määrittelyluokka.
Monitorit Monitori Synkronointimenetelmiä Esimerkkejä.
 Yhteenvetoa. Rio 2005 / Auvo Häkkinen, Liisa Marttinen Ongelmakenttä Rinnakkaisuuden tarve Ympäristö Suunnittelun yksinkertaistaminen Suorituskyky.
 Yhteenvetoa. Rio 2004 / Auvo Häkkinen Ongelmakenttä Rinnakkaisuuden tarve Ympäristö Suunnittelun yksinkertaistaminen Suorituskyky Luotettavuus.
Kontrollirakenteet laajemmin
Tilastollisesti merkitsevä nousu Tilastollisesti merkitsevä lasku Edelliseen aineistoon KMT 2005 verrattuna* KMT Kevät06 puolivuosiaineisto KMT SYKSY05/KEVÄT06.
Visual Basic -ohjelmointi
Johdetun luokan olion alustus tMyn1 Johdetun luokan olion alustus määrätyillä arvoilla Kun ohjelmassa esiintyy johdetun luokan olion määrittely, järjestelmä.
6 - 1 Rio 2004 / Auvo Häkkinen OSA II: Hajautettu ympäristö Ei yhteistä muistia.
1 Rio s05 / Liisa Marttinen Kertaus: Semaforit Semaforin operaatiot: sem s = n; # semaforin alkuarvo P(s); # jos s
1 Rio / Auvo Häkkinen Kertaus: Semaforit Semaforin operaatiot: sem s = n; # semaforin alkuarvo P(s); # jos s
1 - 1 Rio syksy 2005 Liisa Marttinen Prosessit voivat häiritä toisiaan! yhteinen muisti k=k+1; i=i-1 k=k+1; i=i-1; i: 10 k: prosessi i prosessi j Prosessien.
 Etäproseduurikutsu RPC Toteutus Virhesemantiikka Andrews 8.1, 10.3, Stallings 13.3.
6 - 1 Rio 2004 / Auvo Häkkinen OSA II: Hajautettu ympäristö Ei yhteistä muistia.
Toisto Toistolausekkeet for, while(ehto){…} ja do {…} while(ehto)
16. Ohjelmoinnin tekniikkaa
Kontrollirakenteet laajemmin
13. Loogiset operaatiot.
16. Ohjelmoinnin tekniikkaa
Esityksen transkriptio:

 Monitorit Monitori Synkronointimenetelmiä Esimerkkejä Andrews , Stallings 5.5

5 - 2 Rio 2004 / Auvo Häkkinen 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 - 3 Rio 2004 / Auvo Häkkinen Semafori perusmekanismi synkronointiin voidaan systemaattisesti ratkaista synkronointiongelmia melko alhaisen tason mekanismi => helppo tehdä virheitä unohtaa jokin P- tai V-operaatio tehdä ylimääräisiä P- tai V-operaatioita käyttää väärää semaforia unohtaa suojata jokin kriittinen alue Globaaleja muuttujia Varmistuttava että kaikki osat yhdessä toimivat oikein samaa mekanismia käytetään sekä poissulkemiseen että ehtosynkronointiin

5 - 4 Rio 2004 / Auvo Häkkinen Monitori

5 - 5 Rio 2004 / Auvo Häkkinen 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 - 6 Rio 2004 / Auvo Häkkinen Esittely Monitori staattinen ’olio’ Prosessi kutsuu monitorin proseduureja Monitorin muuttujien arvot pysyvät niin kauan kuin monitori on olemassa (permanent) Kutsu call Mname.opname(arguments) monitor Mname { pysyvien muuttujien määrittely proseduurit alustuslauseet }

5 - 7 Rio 2004 / Auvo Häkkinen Stallings Fig. 5.21: Structure of a Monitor. Proseduureissa voi käyttää paikallisia muuttujia, kullakin prosessilla niistä oma kopio (pinossa). Monitorin muuttujat yhteiskäytössä. Vain yksi prosessi kerrallaan suorittaa monitorin koodia.

5 - 8 Rio 2004 / Auvo Häkkinen Ehtomuuttujat ja operaatiot cond cv ei arvoa - vain jono ehtoa cv odottaville Blocked-tilaan siirretyille prosesseille (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 - 9 Rio 2004 / Auvo Häkkinen 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?

Rio 2004 / Auvo Häkkinen 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?

Rio 2004 / Auvo Häkkinen 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ää ole voimassa, kun herätetty prosessi pääsee jatkamaan odotuskohdastaan  tarkistettava ennenkuin voi jatkaa! Signal and Wait kirjallisuudessa Andrews Fig. 5.1.

Rio 2004 / Auvo Häkkinen Semaforin toteutus monitorina P(s): 0) s = s-1;> if (s = = 0) wait (pos); s=s-1; V(s): s=s+1; signal(pos); monitor Semaphore { int s = 0; cond pos; procedure Psem() { if (s == 0) wait (pos); s = s -1; } procedure Vsem() { s = s +1; signal (pos); } Toimiiko oikein, jos käytetään SC:tä? Entä jos if:n tilalla while?

Rio 2004 / Auvo Häkkinen Miten saataisiin toimimaan myös FIFOna myös SC:tä käytettäessä? condition passing (vrt. paton passing) procedure Psem() { if (s == 0) wait (pos); else s = s -1; } procedure Vsem() { if (empty(pos)) s = s +1; else signal (pos); }

Rio 2004 / Auvo Häkkinen Esim: Semaforin toteutus monitorin avulla Andrews Fig. 5.2 Signal and Wait: FIFO semaphore ehto varmasti voimassa, kun herätetty suoritukseen Signal and Continue: kun herättäjä poistuu monitorista, monitorin jonossa ensimmäinen saa pääsee monitoriin (ei välttämättä juuri herätetty) 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 (sitä ei merkitä näkyviin!)

Rio 2004 / Auvo Häkkinen Andrews Fig Andrews Fig condition passing

Rio 2004 / Auvo Häkkinen Synkronointi

Rio 2004 / Auvo Häkkinen Synkronointi (Condition Synchronization) Andrews Fig vrt. 4.5

Rio 2004 / Auvo Häkkinen 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) { call Bounded_Buffer.fetch(data); kuluta data; } Prosessit monitorin ulkopuolella! Miksi?

Rio 2004 / Auvo Häkkinen 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!

Rio 2004 / Auvo Häkkinen Kaikkien herätys (Broadcast Signal) Andrews Fig Huom: DB ei monitorin sisällä! Miksei? vrt. 4.13

Rio 2004 / Auvo Häkkinen Prioriteetin mukaan jonotus (Priority Wait) Andrews Fig Condition passing: Pidä resurssi varattuna, anna varattuna seuraavalle prosessille!  Ei etuilua! vrt Odotus ajan (time) mukaisessa järjestyksessä

Rio 2004 / Auvo Häkkinen ”Kattava herätys” (Covering Condition) Andrews Fig Herätä kaikki odottajat - tarkistakoot itse, onko jatkamislupa edelleen voimassa! Jokaiselle oma herätysaika!

Rio 2004 / Auvo Häkkinen Priority Wait Andrews Fig Herätä vain ne, jotka voivat jatkaa! Herätysajan mukaan järjestykseen Ensimmäisen jonossa olevan arvo (=herätysaika)

Rio 2004 / Auvo Häkkinen 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, t alleta yhteiset odotusehdot pysyviin muuttujiin ja jätä prosessit odottamaan yksityisiin ehtomuuttujiin ohjelmoi itse jonon ylläpito (jonotusjärjestys)

Rio 2004 / Auvo Häkkinen 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

Rio 2004 / Auvo Häkkinen Tapahtumien synkronointi Asiakkaan ’tärkeät’ vaiheet (tapahtumat): cinchair eli istu tuoliin (asiakas on nyt kohtauspaikalla) cleave eli poistu parturista Parturin vaiheet bavail eli vapaudu parranajoon bbusy eli aja partaa bdone eli asiakkaan parta ajettu Oikea järjestys laskurien avulla: bavail >= cinchair >= bbusy >= bdone >= cleave Ongelma: laskurit kasvavat koko ajan! barber = bavail - cinchair chair = cinchair - bbusy open = bdone - cleave

Rio 2004 / Auvo Häkkinen Monitorin rakentelua int barber = 0, int chair = 0, open = 0; parturin ja asiakkaan toimintojen tahdistus ehtomuuttujilla: 4 eri tahdistuskohtaa asiakas odottaa parturin vapautuvan parturi odottaa asiakasta (= asiakas on tuolissa) asiakas odottaa poistumismerkkiä (= ovi auki) parturi odottaa asiakkaan poistumista kullekin oma ehtomuuttuja (cond ) barber_available # signalled when barber > 0 chair_occupied # signalled when cinchair > 0 door_open # signalled when open > 0 customer_left # signalled when open == 0

Rio 2004 / Auvo Häkkinen asiakkaan käyttämä proseduuri procedure get_haircut() { # odota tarvittaessa parturia # ’varaa parturi’ # istu tuoliin ja ilmoita olevasi paikalla # odota parranajon valmistumista eli oven avautumista # sulje ovi ja ilmoita lähteneesi } (barber == 0) wait (barber_ available); barber = barber – 1; chair = chair + 1;signal(chair_occupied); (open == 0) wait (door_open); open = open -1;signal (customer_left); while

Rio 2004 / Auvo Häkkinen Parturin käyttämät proseduurit procedure get_next_customer() { # parturi vapautunut; ilmoittaa tästä mahdollisille odottajille # odottaa asiakasta parturituoliin # tuoli merkataan vapaaksi (jo tässä!) } barber = barber + 1; signal ( barber_available); while (chair == 0) wait (chair_occupied); chair = chair - 1;

Rio 2004 / Auvo Häkkinen procedure finished_cut() { # avaa ovi ja ilmoita ’parranajon päättymisestä’ # odota asiakkaan poistumista } open = open +1; signal (door_open); while (open > 0) wait (customer_left);

Rio 2004 / Auvo Häkkinen Andrews Fig     Systemaatt. ratkaisu resurssi: muuttuja varaus: vähennä (-) vapautus: lisää (+) varo muita: while

Rio 2004 / Auvo Häkkinen 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(); }

Rio 2004 / Auvo Häkkinen POSIX-kirjasto, pthread # include 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

Rio 2004 / Auvo Häkkinen Kertauskysymyksiä?

Rio 2004 / Auvo Häkkinen Kertausta: Monitorit Kapseloi datan + käsittelevät operaatiot automaattinen poissulkeminen vain yksi kerrallaan monitorissa aktiivisena - muut odottamassa pääsyä monitoriin - tai odottavat monitorissa ehtomuuttujaa monitor Mname { pysyvien muuttujien määrittely proseduurit alustuslauseet }

Rio 2004 / Auvo Häkkinen Ehtomuuttujat ja operaatiot cond cv wait(cv), wait (cv, rank) signal(cv), signal_all(cv) empty(cv) minrank(cv) Signal and Continue vai Signal and Wait?

Rio 2004 / Auvo Häkkinen poissulkeminen automaattisesti mitä kannattaa laittaa monitorin sisälle? synkronointi wait (cv) - signal (cv) wait (cv) => aina odotus if (ehto) wait(cv) tai while (ehto) wait(cv) signal(cv) ei tallennu, jos ei odottajia, niin ei tapahdu mitään ohjelmoijan vastuulla: oikeat ehdot ja muuttujien kirjanpito oikeat kohdat wait- ja signal-operaatioille

Rio 2004 / Auvo Häkkinen Kaikkien herätys (Broadcast Signal) Andrews Fig Huom: DB ei monitorin sisällä! Miksei? vrt. 4.13

Rio 2004 / Auvo Häkkinen Herätysjärjestys normaalisti FIFO Condition passing: (vrt. baton passing) Pidä resurssi varattuna, anna varattuna seuraavalle prosessille!  Ei etuilua! Covering condition: Herätetään kaikki odottavat (signal_all(cv), jotka sitten itse tarkistavat, pitääkö ehto todella niille paikkansa. While-silmukka Minrank järjestää odottajat yhden staattisen ehdon mukaan Herätetään vain, jos ensimmäisen ehto tosi Ohjelmoi itse jonotusjärjestys

Rio 2004 / Auvo Häkkinen Priority Wait Andrews Fig Herätä vain ne, jotka voivat jatkaa!