Rinnakkaisohjelmistot erilliskuulustelu 25.3.2003 1. a) Mitkä ovat ne kolme ehtoa, joiden vallitessa saattaa syntyä lukkiutumistilanne? Miten kukin näistä ehdoista täyttyy aterioivien filosofien ongelmassa? b) Voidaanko filosofien tapauksessa lukkiutuminen estää muuttamalla haarukoiden käyttösääntöjä siten, että jokin em ehdoista ei täyty. Tarkastele kutakin sääntöä erikseen. c) Mikä on pankkiirin algoritmin perusidea? Miten asiakkaan käy, jos pankkiiri ei voi pyyntöön suostua? 2. Museossa järjestetään vain opastettuja kiertokäyntejä. Vierailijat saapuvat odotushuoneeseen, josta opas heidät sitten noutaa. Mallita opas ja vierailijat prosesseina ja kirjoita prosessien rutiinit. Odotus toteutetaan käyttäen semaforeja. Vihje: vierailijan rutiinin rakennemalli on ikuinen silmukka, jonka rungon periaaterakenne on {tee jotain muualla};{odota opasta};{kulje museossa} ja oppaalla vastaavasti {herätä ryhmä};{tee museokierros} Huomaa, että ryhmän liikkeellelähdön aikana voi odotushuoneeseen tulla uusia vierailijoita - näiden pitää päästä mukaan kierrokselle. 3. Hajautetun sovelluksen komponentit toimivat eri koneissa kaukana toisistaan, solmujen väliset yhteydet ovat hitaita ja saattavat joskus olla poikki. Sovellukseen sisältyy "luotettava monilähetys": sanoma välitetään joko kaikille ryhmän jäsenille tai sitten ei kenellekään. Kirjoita luotettavan monilähetyksen toteuttava rutiini käyttäen send ja receive -operaatioita ja globaaleja kanavia (lähettäjän koodi riittää, vastaanottajan koodia ei tarvitse kirjoittaa). Suorituskykysyistä kommunikoinnissa on hyödynnettävä rinnakkaisuutta niin paljon kuin mahdollista. (Muista myös ilmoittaa send/receive -operaatioidesi synkronointi- semantiikka: "blocking" vai "nonblocking"?) 4. Verkon kuormitustilanteen kartoittamiseen voidaan käyttää esimerkiksi ns. "probe-echo" -algoritmia. Algoritmin idea on yksinkertainen: verkko käsitellään binääripuuna, jonka juurisolmu kysyy kummankin alipuunsa kuormitustiedot ko. alipuun juurelta, nämä toimivat vastaavasti ja tiedot saatuaan palauttavat ne kysyjälle (lisäten mukaan mukaan omat tietonsa). Kirjoita kunkin solmun algoritmi. Kommunikointiin käytetään etäproseduurikutsua. ++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++ 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ä.