581332 Rinnakkaisohjelmointi, koe 14.6.2013              in EnglishOther side in English

Kokeen perusteella kurssista saa 6 op, jos 2 op projekti on tehty, ja 4 op muutoin.
Jos olet tehnyt 2 op projektin luentokurssin yhteydessä, mainitse asiasta ja kerro minä vuonna projektisi on tehty.
Kirjoita jokaiseen vastauspaperiisi kurssin nimi, pvm, oma nimi, nimikirjoitus ja opiskelijanumero.

  1. [9 p] Kriittisen vaiheen ongelma
    1. Anna kooditason esimerkki kriittisestä vaiheesta. Anna esimerkkiisi liittyvä skenaario, jossa laskennan lopputulos on virheellinen, jos kriittistä vaihetta ei ole suojattu.
    2. Selitä, miksi tämän saman skenaarion laskennan tulos on oikein, kun kriittinen vaihe on suojattu. Miksi tulos on nyt oikein kaikissa mahdollisissa skenaarioissa?
    3. Millä menetelmällä esimerkkisi kriittinen vaihe on hyvä suojata? Miksi juuri tällä menetelmällä eikä kahdella muulla tuntemallasi menetelmällä. Perustele. Näytä, miten kriittisen vaiheen suojaus toteutetaan pseudokooditasolla käyttämälläsi menetelmällä.

  2. [9 p] Lukkiutuminen
    1. [2 p] Mikä on lukkiutumisongelma? Anna joku konkreettinen (pseudokoodi) esimerkki lukkiutumisesta.
    2. [3 p] Miten lukkiutuminen voidaan havaita? Mitä tehdään, jos lukkiutuminen havaitaan?
    3. [2 p] Selitä Pankkiirin algoritmin (Banker's Algorithm) pääperiaatteet lukkiutumisen estämiseksi ennakolta. Kuinka se toimisi kohdan (a) esimerkissäsi?
    4. [2 p] Anna joku muu konkreettinen menetelmä kuin Pankkiirin algoritmi lukkiutumisen estämiseksi ennakolta. Mihin periaatteeseen ratkaisu perustuu? Kuinka se toimisi kohdan (a) esimerkissäsi?
       
  3. [9 p] Monitori
    1. Miten kriittisen vaiheen ongelman ratkaisu tehdään monitorissa? Miten ratkaisu eroaa semaforiratkaisusta?
    2. Miten synkronointiongelman ratkaisu tehdään monitorissa? Miten ratkaisu eroaa semaforiratkaisusta?
    3. Mitä tarkoittaa käsite "monitorin signalointisemantiikka"? Miten se vaikuttaa (i) monitorin toteutukseen ja (ii) monitoria kutsuvan rutiinin toteutukseen?

  4. [9 p] Tuottaja-kuluttaja -ongelma. Tuottajia ja kuluttajia on kumpiakin yksi kappale. Puskurin koko on ääretön.
    1. [2 p] Kuvaile ongelma. Erityisesti kerro, mitä synkronointi- ja kommunikointiongelmia tähän liittyy.
    2. [2 p] Mitä "äärettömän suuri" puskuri käytännössä tarkoittaa ja kuinka se käytännössä toteutetaan? Miten tämä "äärettömän suuri" puskuri vaikuttaa ongelman ratkaisulogiikkaan (verrattuna äärellisen kokoiseen puskuriin)?
    3. [5 p] Anna ongelman ratkaisu semaforien avulla. Esitä tuottajan ja kuluttajan pseudokoodi. Määrittele selkeästi kaikki käyttämäsi semaforit ja muut tietorakenteet alkuarvoineen. Selitä, miksi ratkaisusi on oikein.