581332 Rinnakkaisohjelmointi, koe 28.9.2010
Kirjoita jokaiseen vastauspaperiisi
kurssin nimi, pvm, oma nimi, nimikirjoitus ja opiskelijanumero.
Jokaiseen tehtävään riittää 1-2 sivun vastaus.
- [9 p] Kriittisen vaiheen ongelma
- Mikä on kriittisen vaiheen ongelma?
Anna konkreettinen esimerkki tilanteesta, jossa kriittisen vaiheen ongelma ilmenee.
- Voisiko kriittisen vaiheen ongelma ilmetä tilanteessa, jossa kaksi prosessia (säiettä) suorittavat eri koodialueita. Selitä miksi ei tai anna esimerkki tilanteesta, jossa tämä ongelma voi ilmetä.
- Miten "viestikapulan antaminen" (baton passing) -menetelmä liittyy kriittisen vaiheen ongelmaan? Mitä erilaista siinä on tavallisen kriittisen vaiheen ongelman ratkaisuun verrattuna?
- Miten kriittisen vaiheen ongelma ratkaistaan semaforiratkaisuissa? Selitä.
- Miten kriittisen vaiheen ongelma ratkaistaan monitoriratkaisuissa? Selitä.
- [9 p] Lukkiutuminen.
- Mikä on lukkiutumisongelma? Anna Aterioivien filosofien ongelmaan pohjautuva konkreettinen esimerkki lukkiutumisesta. Kuka lukkiutuu ja miksi?
- Mitkä neljä ehtoa täytyy olla voimassa, jotta lukkiutuminen voisi tapahtua? Näytä, että ne pätevät Aterioivien filosofien esimerkissäsi.
- Anna kaksi eri tyyppistä ratkaisua lukkiutumisen välttämiseksi? Selitä pääpiirteissään kuinka ne toimivat ja mitä tietoja ratkaisut vaativat. Näytä kuinka menetelmät toimisivat Aterioivien filosofien ongelmaan.
- [9 p] Monitori.
- Mikä on monitori? Miten monitori ratkaisee kriittisen vaiheen ongelman?
- Missä eri kohdissa monitorissa suorittavat prosessit voivat joutua odottamaan suoritusvuoroaan?
- Mitä tarkoittaa käsite monitorin signalointisemantiikka? Miten monitorin signalointisemantiikka vaikuttaa monitorin toteutukseen? Miten monitorin signalointisemantiikka tulee ottaa huomioon monitoria kutsuvissa ohjelmissa?
- Oletetaan, että käytät monitoria sovelluksen ratkaisussasi. Minkälainen koodi on järkevää laittaa monitorin sisälle? Minkälainen koodi on järkevää laittaa monitorin ulkopuolelle? Perustele.
- [9 p] Mehiläisparvi ja karhu. Mehiläisparvi (N mehiläistä) ruokkii loukkuun joutunutta karhua keräämällä sille hunajaa. Karhun elämä loukossa on vain syömistä ja odottelua. Mehiläiset keräävät hunajaa ja laittavat hunaja-annoksensa purkkiin yksi kerrallaan. Kun purnukka on täynnä (H annosta), viimeisen annoksen laittanut mehiläinen herättää karhun syömään ennenkuin poistuu paikalta. Hunajaa tuovat mehiläiset jäävät tällöin odottamaan purnukan tyhjenemistä. Kun karhu on tyhjentänyt purkin, se päästää mehiläiset taas täyttämään purkkia ja käy itse nukkumaan.
Tehtävänä on simuloida karhun ja mehiläisten toimintaa prosessien avulla.
Anna semaforien avulla tehty ratkaisu, joka siis sisältää mehiläisten ja karhun algoritmit pseudokoodina. Selitä, mitä synkronointi- ja kommunikointiongelmia ongelmassa on ja kuinka ne on ratkaistu vastauksessasi.