581332 Rinnakkaisohjelmointi, koe 20.1.2012                           in EnglishOther side in English

Kirjoita jokaiseen vastauspaperiisi kurssin nimi, pvm, oma nimi, nimikirjoitus ja opiskelijanumero.
  1. [9 p] Kriittisen vaiheen ongelma monisäikeisessä ohjelmassa moniytimisessä järjestelmässä. Yhteiskäyttöisten muuttujien f1, ..., f8 arvojen tulee olla aina konsistensseja (yhteensopivia): niitä päivitettäessä kaikkien arvot tulee päivittää konsistentisti ja koskaan ei pidä pystyä lukemaan epäkonsistensseja muuttujien arvoja. Koodissa on yksi koodinpätkä u1, joka päivittää muuttujien f1, ..., f8 arvoja ja toinen koodinpätkä r1, joka ainoastaan lukee muuttujien f1, ..., f8 arvoja.
    1. Missä olosuhteissa kumpaakaan koodinpätkistä (u1 ja r1) ei tarvitse suojata kriittisenä alueena?
    2. Missä olosuhteissa molemmat koodinpätkistä (u1 ja r1) tarvitsee suojata kriittisenä alueena? Kuuluvatko ne tällöin samaan kriittiseen alueeseen vai muodostavatko ne molemmat oman kriittisen alueensa?
    3. Missä olosuhteissa koodinpätkä u1 tarvitsee suojata kriittisenä alueena, mutta koodinpätkää r1 ei tarvitse suojata kriittisenä alueena?

  2. [9 p] Lukkiutuminen.
    1. [2 p] Mikä on lukkiutumisongelma? Anna Aterioivien filosofien ongelmaan pohjautuva konkreettinen esimerkki lukkiutumisesta.
    2. [4 p] Mitkä neljä ehtoa täytyy olla voimassa, jotta lukkiutuminen voisi tapahtua? Näytä, että ne pätevät kohdan (a) esimerkissäsi.
    3. [3 p] Anna edellämainittuihin (kohta b) neljään ehtoon perustuen kolme eri tapaa estää lukkiutuminen ennakolta Aterioivien filosofien ongelmassa. Selitä, miten kukin tapa toimii lukkiutumisen estämiseksi.

  3. [9 p] Tuottaja-kuluttaja -ongelma. Tuottajia ja kuluttajia on molempia yksi kappale. Puskurin koko on 1000.
    1. Kuvaile ongelma. Erityisesti kerro, mitä synkronointi- ja kommunikointiongelmia tähän liittyy. Mitä hyötyä isommasta puskurista on?
    2. Anna ongelman ratkaisu semaforien avulla. Esitä tuottajan ja kuluttajan pseudokoodi. Määrittele selkeästi kaikki käyttämäsi semaforit alkuarvoineen. Selitä, miksi ratkaisusi on oikein.
    3. Oletetaan nyt, että järjestelmän kokonaislogiikka on sellainen, että puskurissa odottavien alkioiden lukumäärä ei ikinä voi olla 10 enempää. Kuinka tämä vaikuttaa ongelman ratkaisuun ja sen sisältämiin synkronointi- ja kommunikointiongelmiin. Anna ongelman ratkaisu semaforien avulla. Esitä tuottajan ja kuluttajan pseudokoodi. Määrittele selkeästi kaikki käyttämäsi semaforit alkuarvoineen. Selitä, miksi ratkaisusi on oikein.

  4. [9 p] Monitori.
    1. [1 p] Mikä on monitori?
    2. [2 p] Miten monitori ratkaisee kriittisen vaiheen ongelman?
    3. [2 p] Miten monitorin ehtomuuttujat (ja niiden operaatiot) eroavat semaforeista?
    4. [4 p] Anna tehtävän 3 Tuottaja-kuluttaja -ongelman ratkaisu monitorilla. Esitä tuottajan, kuluttajan ja monitorin pseudokoodi. Määrittele selkeästi kaikki käyttämäsi monitorin ehtomuuttujat alkuarvoineen. Selitä, miksi ratkaisusi on oikein.
      Huolehdi ratkaisussasi erityisesti siitä, että ainoastaan synkronointiongelman ratkaisu tapahtuu monitorissa ja että varsinainen työ (alkioiden "tuottaminen", puskuriin laittaminen ja sieltä poistaminen, alkioiden "kuluttaminen") tapahtuu monitorin ulkopuolella.