Rinnakkaisohjelmistot kuulustelu 22.8.2003 1. Vastaa lyhyesti seuraaviin kysymyksiin: a) Mitä tarkoittaa "puomisynkronointi" (barrier synchronization)? Miten se eroaa tavallisesta "PV-synkronoinnista"? b) Mitä hyötyä on puskurin käytöstä tuottaja-kuluttaja -rakenteen toteutuksessa? Miten puskurin pituus vaikuttaa suorituskykyyn? c) Miten kuluttajan odottaminen toteutuu, jos ratkaisu perustuu 1) semaforien, 2) monitorin, 3) sanoman välitystä käyttävän puskurimanagerin, 4) etäproseduurin käyttöön? Siis kuka/mikä odottaa? Missä odottaa? Mitä odottaa? (Käytä ko. menetelmän käsitteistöä, käyttöjärjestelmän sisälle ei pidä mennä.) (a: 4, b: 3, c: 8) 2. a) Mitkä ovat lukkiutumistilanteen neljä välttämätöntä ja riittävää ehtoa? Selitä, mitä kukin tarkoittaa resurssien jakelussa. b) Ryhmäkommunikoinnissa syntyy toisinaan lukkiutumistilanne: kaikki odottavat sanomaa joltakulta toiselta (receive-käskyssä). Miten em neljä ehtoa toteutuvat tässä tilanteessa? 3. Muistinhallinta toteutetaan monitorina, jossa on kaksi käyttäjän operaatiota: request(amount) ja release(amount), missä amount on kokonaisluku. Kun prosessi kutsuu proseduuria request, se joutuu odottamaan, kunnes sille voidaan antaa amount-parametrin ilmoittama määrä sivutiloja. Prosessi vapauttaa sivutiloja kutsumalla operaatiota release. Muistin jakelussa noudatetaan "pienin pyyntö ensin" -peri- aatetta (odottajia palvellaan pyyntöjen suuruusjärjestyksessä). Kirjoita muistinhallinnan toteuttavien operaatioiden request ja release koodit. Ratkaisun tulee sisältää muistinhallinnan teknisestä toteutuksesta vain sen verran, mitä tarvitaan odotuksen toteuttamiseen ja päätöksentekoon. Signal-operaatio on tyyppiä "signal and wait". 4. Tietoliikenneverkon reitittimen ohjelmiston perusrakenne voisi olla seuraavanlainen: - m säiettä odottaa sanomia, kukin omalta kanavaltaan - m säiettä kirjoittaa sanomia, kukin omalle kanavalleen - jokaisella kirjoittavalla säikeellä on yhden sanoman mittainen puskuri - kun lukeva säie on saanut sanoman, se vie sanoman (reititystaulun määrittelemän) kirjoittajan puskuriin; jos puskuri on täynnä, lukija odottaa. Kirjoita tämän toiminnallisuuden toteuttava koodi. Ratkaisun ei tarvitse sisältää osoitteen määrittämiseen liittyviä yksityiskohtia. Tähän tehtävään ei kuulu se, miten sanoma siirtyy send-operaation näkemästä kanavasta receive-operaation näkemään kanavaan. Voit olettaa, että siirrettävänä voi olla enintään yksi sanoma kerrallaan ja että siirto on aina virheetön. ++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++ 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ä.