in EnglishOther side in English

581332 Rinnakkaisohjelmointi, 4 op, erilliskoe 15.8.2008

Kirjoita jokaiseen vastauspaperiisi seuraavat tiedot: nimi ja nimikirjoitus, opiskelijanumero, kurssin nimi ja sivunumero.
  1. [15 p] Kriittinen alue (vaihe). 
    1. Anna konkreettinen (pseudokooditason) esimerkki kriittisestä vaiheesta. Selitä yksityiskohtaisesti, mikä tässä on varsinainen ongelma ja kuinka ongelma tulee ratkaista.
    2. Näytä (pseudokooditasolla), kuinka kriittiset vaiheet suojataan keskeytykset estämällä.
      Millaisessa laskentaympäristössä tämä olisi järkevä ratkaisu? Miksi?
      Millaisessa laskentaympäristössä tämä ei olisi järkevä ratkaisu? Miksi?
    3. Näytä (pseudokooditasolla), kuinka kriittiset vaiheet suojataan busy-wait -loopin avulla (esim test-and-set -käskyn avulla).
      Millaisessa laskentaympäristössä tämä olisi järkevä ratkaisu? Miksi?
      Millaisessa laskentaympäristössä tämä ei olisi järkevä ratkaisu? Miksi?
    4. Näytä (pseudokooditasolla), kuinka kriittiset vaiheet suojataan semaforin avulla.
      Millaisessa laskentaympäristössä tämä olisi järkevä ratkaisu? Miksi?
      Millaisessa laskentaympäristössä tämä ei olisi järkevä ratkaisu? Miksi?
    5. Näytä (pseudokooditasolla), kuinka kriittiset vaiheet suojataan monitorin avulla.
      Millaisessa laskentaympäristössä tämä olisi järkevä ratkaisu? Miksi?
      Millaisessa laskentaympäristössä tämä ei olisi järkevä ratkaisu? Miksi?
       
  2. [15 p] Sekoilua semaforeilla
    Allaoleva ratkaisu tuottaja-kuluttaja -ongelmaan ei toimi oikein.
        char buffer[n];
        int  start = 0,  end = 0;
        sem  empties = n, fulls = 1, turn = 0;
       
        process Producer[i=1 to M] {               process Consumer[i=1 to N] {
        char data;                                 char result;
        ....                                       .....
        while (true) {                             while (true) {
            .....                                      .....
            produce data;                              P(turn);
            P(empties);                                P(fulls);
            P(turn);                                   result=buffer[start];
            buffer[end] = data;                        start= (start + 1) % n;
            end = (end + 1) % n;                       V(turn);   
            V(fulls);                                  V(empties);
            V(turn);                                   use result;
            }                                          }
        }                                           }
    
    1. Mitä virheitä ratkaisussa on ja mitä toimintaongelmia nämä virheet aiheuttavat? Anna yksi toimintaongelmaan johtava skenaario.
    2. Toimisiko ratkaisu, jos tuottajia ja kuluttajia olisi vain yksi (M=N=1)? Perustele.
    3. Onko mahdollista lisätä tuottajien ja kuluttajien rinnakkaisuutta? Jos on, niin miten?
    4. Korjaa koodi oikein toimivaksi tai kirjoita aivan oma ratkaisusi. Muista liittää kommentteja omaan koodiisi, vaikka annetussa koodissa ei niitä olekaan! Selitä, miten kohdan (a) virheet ja kohdan (c) suorituskykyä rajoittavat tekijät on huomioitu.
       
  3. [15 p] Monitorit
    1. Mikä on monitori? Mihin ongelmaan se on ratkaisu? 
    2. Mitä etuja/haittoja monitoreilla on semaforeihin verrattuna? Anna esimerkkejä.
    3. Mitä käsite monitorin signalointisemantiikka tarkoittaa?
      Mikä on IRR (Immediate Resumption Requirement, "Signal and Urgent Wait", E<S<W) signalointisemantiikka?
      Miten IRR eroaa käytännössä esimerkiksi Javan signalointisematiikasta (E=W<S)?
    4. Täytyykö monitoria käyttävien (kutsuvien) ohjelmien osia ohjelmoitaessa ottaa huomioon monitorin signalointisemantiikka? Jos täytyy, niin millä tavoin? Jos ei täydy, niin miksi ei?

  4. [15 p] Lukkiutuminen
    1. [6 p] Mitä käsite lukkiutuminen tarkoittaa? Anna pseudokooditason esimerkki. Milloin lukkiutuminen voi tapahtua?
    2. Mitä käsite elolukkiutuminen (livelock) tarkoittaa? Anna pseudokooditason esimerkki. Milloin elolukkiutuminen voi tapahtua?
    3. Mitä käsite nälkiintyminen tarkoittaa? Anna pseudokooditason esimerkki. Milloin nälkiintyminen voi tapahtua?
    4. Kuinka Dijkstran pankkiirin algoritmi (Banker's Algorithm) pääpiirteissään toimii? Minkä ongelman se täsmällisesti ratkaisee? Mitä tietoja se tarvitsee ja mistä nämä tiedot saadaan? Päättyykö algoritmi aina? Milloinka algoritmi käynnistetään ja kuinka sen tulosta käytetään?