in EnglishOther side in English

581332 Rinnakkaisohjelmointi (4 op), erilliskuulustelu 22.9.2009

Kirjoita jokaiseen vastauspaperiisi seuraavat tiedot: nimi ja nimikirjoitus, opiskelijanumero, kurssin nimi ja sivunumero.
  1. [9 p] Kriittinen alue (vaihe). Oletetaan, että monisäikeisen ohhelman yhteisessä muistissa olevien muuttujien X, Y ja Z käyttöä halutaan suojata kriittisen vaiheen avulla. Muuttujiin viitataan ohjelmassa viidessä kohtaa (kohdat A, B, C, D ja E): 
     A: X <- 7      B: some1 <- X    C: Y <- 87    D: some4 <- X    E: some5 <- Y
    Y <- 4 some2 <- Y Y <- 0
    Z <- X+Y some3 <- Z
    Kohdassa A muuttujien Y ja Z vanhat arvot eivät saa näkyä muille sen jälkeen kun X on saanut uuden arvon ja Z'n uuden arvon tulee olla X'n ja Y'n uusien arvojen summa. Kohdassa B muuttujien some1, some2 ja some3 arvoiksi tulee tulla X'n, Y'n ja Z'n arvot käskysarjan suorituksen alkuhetkellä. Kohdassa E muuttujan Y arvo tulee nollata välittömästi sen lukemisen jälkeen.
    1. Mitkä näistä (pseudo)koodinpätkistä (A, B, C, D ja E) tulee suojata kriittisenä alueena ja miksi?  
    2. Näytä (pseudokooditasolla), kuinka näiden säikeiden kriittiset vaiheet suojataan keskeytykset estämällä. Millaisessa laskentaympäristössä tämä olisi järkevä ratkaisu? Miksi?
    3. Näytä (pseudokooditasolla), kuinka näiden säikeiden kriittiset vaiheet suojataan busy-wait -loopissa (esim test-and-set -käskyn avulla). Millaisessa laskentaympäristössä tämä olisi järkevä ratkaisu? Miksi?
       
  2. [9 p] Lukkiutuminen. Meillä on neljä säiettä (A, B, C ja D), jotka suorittavat allaolevia koodeja. Me emme tiedä mitään suoritusnopeuksista - emme siis tiedä kuinka paljon aikaa kuluu eri semaforioperaatioiden välillä. Kaikkien semaforien (s1-s6) alkuarvo on 1. Semaforioperaatiothan ovat P (eli wait) ja V (eli signal).
    1. ... P(s1) ... P (s2) ... P(s3) ... V(s3) ... V(s2) ... V(s1) ...
    2. ... P(s2) ... P (s4) ... P(s5) ... V(s5) ... V(s4) ... V(s2) ...
    3. ... P(s5) ... V(s5) ... P (s1) ... V(s1) ... P(s3) ... V(s3) ...
    4. ... P(s6) ... P (s5) ... P(s1) ... V(s1) ... V(s5) ... V(s6) ...

    Kaikki neljä säiettä käynnistetään samalla kertaa ja ovat siis suorituksessa samanaikaisesti.

    1. Resurssien varauskaavio (resource reservation graph) näyttää samalla kertaa kullekin prosessille sen sillä hetkellä varaamat ja haluamat resurssit. Kuvaa lukkiintumisongelma varattavien resurssien ja varauskaavion avulla. Mitkä ovat nämä varattavat resurssit tässä tapauksessa? Missä järjestyksessä kukin säie varaa ja vapauttaa niitä? Piirrä resussien varauskaavio skenaariolle, jossa kaikki säikeet pääsevät yhtä aikaa ensimmäiseen semaforioperaatioonsa (P(s1), P(s2), P(s5) tai P(6)).
    2. Anna lukkiutuva skenaario ja lukkiutumishetken resurssien varauskaavio.
    3. Mikä ovat lukkiutumisen mahdollistavat neljä vaatimusta ja kuinka ne toteutuvat tässä?
       
  3. [9 p] Yksisuuntainen silta
    Kahden kylän A ja B välissä olevan joen yli kulkee niin kapea silta, että autot voivat ajaa sitä pitkin vain yhteen suuntaan kerrallaan. Kun sillalla kulkee autoja A:sta B:hen, niin B:stä A:han haluavien täytyy odottaa. Silta ei myöskään ole kovin vankka, joten sillalla saa olla korkeintaan 5 autoa yhdellä kertaa. Jotta varmistetaan, että autot menevät sillalle vain kulloinkin sallitusta suunnasta, siltaa käyttävät autoprosessit kutsuvat proseduuria aja_sillalle(suunta) pyrkiessään sillalle ja sillalta poistuessaan proseduuria poistu_sillalta(suunta):
      Process auto(suunta) {
        .....
        aja_sillalle(suunta);
        ylitä silta
        poistu_sillalta(suunta);
        ......
        }
    Tee semaforeja ja P- ja V-operaatioita käyttävät koodit proseduureille aja_sillalle(suunta) ja poistu_sillalta(suunta). Ratkaisun ei tarvitse olla reilu, vaan autojen odotusajat saavat olla pitkiä. Jos autoja suuntaan A:sta B:hen tulee jatkuvalla virralla, niin suuntaa B:stä A:han odottavat autot voivat joutua odottamaan tosi pitkään. Kuitenkin samalta suunnalta tulevien autojen tulee päästä sillalle saapumisjärjestyksessä.
     
  4. [9 p] Mehiläisparvi, karhu ja IRR monitori. 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 annos 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 taas nukkumaan.

    Ohjelmoi purnukan täytön ja tyhjentämisen synkronoinnin ratkaisu IRR (E<S<W) signalointisemantiikkaa käyttävän monitorin avulla. Monitori sisältää siis vain synkronointiongelman ratkaisun - hunajan kerääminen, purkin täyttäminen ja tyhjentäminen tapahtuvat monitorin ulkopuolella. Esitä mehiläisprosessien (N kpl), karhuprosessin ja monitorin pseudokoodi. Selvitä vielä sanallisesti, missä tilanteissa tarvitaan poissulkemista ja/tai synkronointia sekä kuinka ne toteutuvat ratkaisussasi. Kerro myös, mikä osa ratkaisuasi perustuu nimenomaan IRR signalointisemantiikkaan. Tee tarvittavat oletukset muista monitorin piirteistä ja kirjoita ne näkyville.