Rinnakkaisohjelmistot erilliskuulustelu 21.1.2003 1. a) Tietojärjestelmän eräs päivitys sisältää useaan tiedostoon kohdis- tuvia kirjoitusoperaatioita. Päivitys vaaditaan suoritettavaksi "atomisena". Mitä tämä tarkoittaa päivittäjän kannalta? Mitä tämä tarkoittaa tiedostojen muiden käyttäjien kannalta? Miten atomisuus saadaan toteutettua? Mitä ongelmia tästä ratkaisusta saattaa seurata? b) Mikä on "vartioitu kommunikointilause" (guarded communication statement)? Anna esimerkki, jossa käsitettä sovelletaan (kirjoita koodista oleelliset osat; jos käytät jotain omaperäistä syntaksia, niin selitä riittävän täsmällisesti merkintöjesi semantiikka). (a: 8p, b: 7p) 2. Miten monitorin operaatiot "wait" ja "signal" ("signal and continue") voidaan toteuttaa semaforien avulla? Kirjoita tarvittavat koodit. Yksinkertaisuuden vuoksi oletetaan, että - järjestelmässä on vain yksi monitori - monitorin condition-muuttujat esitellään vektorina c[n], jonka elementin tyyppi on "jono" - tyyppiin "jono" liittyy kaksi operaatiota: "insert" ja "remove". Vihje: wait-operaation suorittava prosessi on syytä panna odottamaan yksityiseen semaforiin. Miksi? 3. Eräs sääennustuslaskenta on toteutettu rinnakkaisena. Ennustettavan alueen ilmatila on jaettu kuutioihin ja kunkin kuution ennustuksesta huolehtii yksi solmukone. Laskenta etenee vaiheittain: - alkuarvoista lähtien kukin solmu laskee kuutiolleen ensimmäisen ennusteen (esimerkiksi säätila tunnin kuluttua) - kun ennuste on valmistunut, niin solmu ilmoittaa ennustetun tilan naapureilleen - saatuaan kaikilta naapureiltaan niiden ennusteet solmu aloittaa seuraavan vaiheen ja laskee seuraavan ennusteeen (esim. säätila kuutiossa seuraavan tunnin kuluttua). Näin jatketaan, kunnes ennusteet on saatu halutulle aikavälille (esim. viikon ennuste). Kommunikointi perustuu sanomanvälitykseen, jossa käytetään (globaaleja) kanavia. Kirjoita yhden solmun laskenta-algoritmin "normaalivaiheen" toimintaa ohjaavan ohjelman oleelliset osat (sovelluksen käynnistys- ja lopetusvaiheista ei tarvitse välittää). Esittele kanavat, täsmennä send/receive-rutiinien synkronointisemantiikka ("blocking" vai "non- blocking"). 4. Tuottaja ja kuluttaja toimivat asynkronisesti, eri koneissa. Kommuni- kointiin niillä on käytettävissä vain etäproseduurikutsu. Niinpä asynkronisuus on toteutettu sijoittamalla puskuri erityiseen puskuri- palvelijaan. Kirjoita koodit tuottajan, kuluttajan ja puskuripalveli- jan kommunikointiin. (Ratkaisussa voidaan rajoittua yhden tuottajan ja yhden kuluttajan tapaukseen; toisaalta puskuriin mahtuu useita tietoyksiköitä.) Yksityiskohtaisuuden taso: etäproseduurien keskeiset osat, etäprose- duurikutsun muoto, puskurin hallinta. ########################################################################### HUOMAA, että kussakin tehtävässä on käytettävä vaadittua rakennetta (sema- fori, monitori, sanomanvälitys, etäproseduuri); tämä on edellytys sille, että tehtävä arvostellaan. Yksityiskohtaisuuden taso: kaikki, mikä liittyy rinnakkaisuuden hallintaan ja kommunikointiin, on tärkeää, muilta osin toimintojen kuvauksissa voidaan käyttää suunnilleen yleiskielen ilmaisuja. Algoritmien kielen tulee olla suhteellisen lähellä Andrewsin käyttämää algoritmien kuvauskieltä.