Helsingin yliopisto
Tietojenkäsittelytieteen laitos
Rinnakkaisohjelmistot,syksy 2005, Harjoitus 5 |
5. - 9.2005
Andrews: 5.2 Monitors, ss 215-224 (ks. myös 5.4-5.5 pthreads-kirjasto ja Java, vaikka näistä ei kysytä kokeessa), 7.1-7.5 Message Passing, ss 295-314, Stallings 5.6 Message Passing
Tehtävissä harjoitellaan sekä monitorin että sanomanvälityksen käyttöä prosessin tahdistamiseen. Etenkin sanomavälitystehtävissä ymmärtämisen helpottamiseksi kannattaa piirrellä kuvia.
1 - MONITORI TOIMIVAKSI
i) potilas1, lääkäri, potilas2; ii) potilas1, potilas2, lääkäri; iii) lääkäri, potilas1, potilas2;
monitor Vastaanotto { cond sisään; cond ulos; cond tutki; boolean varattu = false; procedure Tulevastaanotolle ( ) { # potilaan koodi if (varattu) wait(sisään); # odota sisäänkutsua varattu = true; # merkitse varatuksi mene tutkimushuoneeseen signal(tutki); # ilmoita lääkärille ole tutkittavana wait(ulos); # jää odottamaan poistumismerkkiä poistu tutkimushuoneesta } procedure Tutkipotilas ( ) { # lääkärin koodi signal(sisään); # kutsu potilas sisään wait(tutki); # odotetaan potilasta tutki potilas signal(ulos); # anna poistumissignaali varattu =false; # vapauta tutkimushuone } } process Potilas( )[i = 1 to n] { while (true) { tee mitä ikinä teet tuntuu sairaalta call Vastaanotto.Tulevastaanotolle ( ); } } process Lääkäri( ) { while (true) call Vastaanotto.Tutkipotilas( ); }
2 - NUKKUVA PARTURI MONITORIIN
Nukkuvan parturin monitor-ratkaisu on esitetty Andrewsin kirjan kuvassa 5.10.
3 - PROSESSIEN TAHDISTUS SANOMANVÄLITYKSELLÄ
Laskenta on jaettu rinnakkaisuuden saavuttamiseksi N:lle eri prosessille. Niihin on ohjelmoitu vikasietoisuutta varten joukko tahdistuspisteitä: jos jotain menee pieleen, voidaan myöhemmin jatkaa jostain tahdistuspisteestaä.
Aina kun prosessin suoritus saapuu tahdistuspisteeseen, se tallettaa sen hetkiset tilatietonsa levylle. Tallettamisensa se saa tehdä vasta kun, kaikki muutkin prosessit ovat saaneet tahdistusta edeltävät vaiheet valmiiksi ja päässeet omaan tahdoistuspisteeseensä. Suoritus saa jatkua laskennan seuraavaan vaiheeseen vasta, kun kaikki ovat saaneet tallettamisensa valmiiksi. Prosessien välinen kommunikointi perustuu sanomanvälitykseen.
Esittele kommunikoinnissa tarvittavat kanavat ja kirjoita tahdistukseen tarvittavat koodin osat.
4 - SANOMANVÄLITYSTÄ KORVATUNTURILLA
Lähes koko vuoden Pukin vetoporot vaeltavat Lapin tuntureilla ja syövät jäkälää muiden porojen kanssa. Jouluaaton lähestyessä vetoporot kokoontuvat Korvatunturille Pukin pajan läheisyyteen. Kun kaikki N vetoporoa ovat saapuneet paikalle, vetoporoista Petteri Punakuono ilmoittaa tästä Pukille. Pukki valjastaa porot lahjareen eteen ja niin lähdetään matkaan lahjoja jakamaan. Kun Pukki on saanut jaettua lahjat kaikille maailman lapsille, porot kiidättävät Pukin taikareen takaisin Korvatunturille, jossa Pukki kiittää poroja ja vapauttaa ne vaeltamaan muiden porojen kanssa. Toteuta Pukki ja porot prosesseina, jotka kommunikoivat sanomanvälitystä käyttäen. Piirrä kaaviokuva, josta selviää Pukin ja porojen välinen kommunikointi. Kirjoita Pukki-ja Petteri-prosessin ja muiden poroprosessien koodit.
5 - PANKKITILIN YHTEISKÄYTTÖ
Pankkitili on usean henkilön käytössä, joista jokainen voi tallettaa tilille tai nostaa tililtä rahaa. Tili ei saa koskaan mennä negatiiviseksi. Koodaa palvelin, joka huolehtii tilin käytöstä. Asiakkaat voivat pyytää joko jonkun rahasumman talletusta tai rahasumman nostoa. Jos tilillä ei ole tarpeeksi rahaa, niin pyyntöä viivytetään. Asiakkaat ja palvelin käyttävät sanomanvälitystä kommunikointiin.
6 - TIETOKANTAPALVELIN
Toteutetaan lukijat/kirjoittajat -ongelmalle sellainen ratkaisu, jossa varsinaiset lukija- ja kirjoittajaprosessit eivät pääsekään suoraan käsiksi tietokantaan, vaan esittävät luku- ja kirjoituspyyntönsä tietokannan kirjoittamisesta ja lukemisesta huolehtiville palvelijaprosesseille (n kappaletta). Valvottava tietokanta on omassa erillisessä palvelimessaan ja vain palvelijaprosesseilla on pääsy tietokantaan. Asiakkaiden (lukijat ja kirjoittajat) ja palvelijoiden välinen kommunikointi perustuu asynkroniseen sanomanvälitykseen. Piirrä kuva tilanteesta. Mitä kommunikointikanavia tarvitaan? Millaisia ovat niissä kulkevat sanomat? Miten asiakkaat pyytävät luku- tai kirjoituspalvelua? Hahmottele palvelijaprosessien koodi.
Vihje: Koska yhteistä tietokantaa käyttäviä palvelijaprosesseja on monta, niin ratkaisussa on varmistettava, että vain yksi prosessi kerrallaan on kirjoittamassa eikä kukaan ole tällöin lukemassa. Lukuja voidaan tehdä useita samanaikaisesti. Palvelijaprosessit voivat käyttää kirjan kuvassa 5.5 esitettyä monitoria luku- ja kirjoitustoimintojen synkronointiin.
7- ANNA PALAUTETTA KURSSISTA
mutta mielellään vasta kokeen
jälkeen, jotta voit kommentoida myös koetta käsitteleviä
kohtia.
Se, joka ei koskaan epäile, ei tiedä mitään. |