Helsingin yliopisto
Tietojenkäsittelytieteen laitos

Rinnakkaisohjelmistot, Harjoitus 1 (syksy 2004)

1.-5.11.2004

Opiskeltava alue: Andrews: luku 1 The Concurrent Computing Landscape.

Näiden harjoitustehtävien tarkoituksena on luoda yleiskatsaus kurssin ongelmakenttään -- prosesseihin ja niiden väliseen vuorovaikutukseen. Tavoitteena on myös itse oppia havaitsemaan prosessien kommunikointitarpeet sekä käyttämään kursilla esitettyä notaatiota algoritmien toiminnan kuvaamiseen.


1 - KURSSIN PERUSTERMEJÄ

Selvitä lyhyesti ao. termeihin liittyvät oleelliset asiat (mitä tarkoittaa? erot? tarve? yms.)

2 - KAKSI PROSESSIA/SÄIETTÄ KJ:N NÄKÖKULMASTA

  1. Selvitä kuinka kaksi säiettä (tai prosessia) voivat käyttää yhteistä dataa ja yhteistä koodia. Lisäksi kummankin on voitava käyttää omaa dataa (paikalliset muuttujat) ja pinoa (mm. aliohjelmakutsut).
  2. Millaisia vaatimuksia liittyy yhteisen datan tai yhteisen koodin käyttöön? Voiko KJ taata nuo oikeellisuusvaatimukset vai pitääkö kenties ohjelmoijankin huomioida jotain? Mitä?
  3. Kuinka samanaikaista / rinnakkaista näiden yhteistä koodia/dataa käyttävien prosessien (säikeiden) eteneminen voi olla? Oletetaan, että ohjelmoija on tarkoittanut prosessien kommunikoinnin vuorottelevaksi (toinen "vastaa" toisen "ilmoitukseen"). Mitä ongelmia voi syntyä eli millä kaikilla eri tavoilla prosessit voisivat toimia väärin?
3 – REITITIN, PROSESSIT JA PUSKUROINTI

Tietoliikenneverkon reititinkoneen tehtävä on vastaanottaa sille eri reittejä pitkin saapuvat sanomapaketit, tutkia pakettien osoitetiedot ja lähettää paketit edelleen osoitteen perusteella eri reittejä pitkin kohti määränpäätä. (Piirrä kuva!) Reitittimen yksi prosessi vastaanottaa saapuvat paketit ja sijoittaa ne muistipuskuriin. Toinen prosessi lukee paketit puskurista, tutkii otsikkotiedot ja lähettää paketit edelleen jollekin linjalle. Kummankin prosessin algoritmi olisi erittäin yksinkertainen, ellei toinenkin prosessi olisi olemassa.
Mitä ongelmia syntyy ratkottavaksi siitä, että prosessit käyttävät yhteistä puskuria? Tee lukijaprosessille ja kirjoittajaprosessille toiminnalliset vaatimusmäärittelyt. Ts. määrittele kuka saa tehdä mitä ja milloin sekä kuka ei saa tehdä mitä ja milloin?

4 -TUOTTAJA JA KULUTTAJA JA USEAN ALKION RAJALLINEN PUSKURI

Tuottajan ja kuluttajan välissä on puskuri, jonka koko on N alkiota ja jota täytetään ja käytetään FIFO-jonona.

  1. Miten puskurin käsittely voidaan hoitaa? Mitä muuttujia puskurin käsittelyä varten tarvitaan? Anna puskurin ja puskurin käsittelyyn tarvittavien muuttujien määrittelyt.
  2. Miten tuottaja toimii viedessään dataa puskurin alkioihin? Missä tilanteissa tuottaja joutuu odottamaan ja minkä takia?
  3. Miten kuluttaja toimii ottaessaan dataa puskurista? Missä tilanteissa kuluttaja joutuu odottamaan ja minkä takia?

5 – OPISKELIJAT RUOKALASSA

Opiskelijat tulevat ruokalaan, jonottavat vuoroaan ja kertovat ruuan annostelijalle haluamansa ruokalajin. Saatuaan ruokalautasensa opiskelija valitsee vielä juoman ja ottaa itselleen ruokailuvälineet. Voidakseen syödä lautasellaan olevan ruuan opiskelija tarvitsee sekä haarukan että veitsen. Kun opiskelija on syönyt, hän vie pois likaiset astiat ja poistuu ruokalasta.

  1. Kirjoita Rion-kurssilla esitettyä merkintätapaa eli notaatiota käyttäen opiskelijan toimintaa kuvaava koodi Opiskelija-prosessina.
  2. Missä tilanteissa Opiskelija-prosessi joutuu tahdistamaan toimintaansa muiden prosessien (= muiden opiskelijoiden ja annostelijan) toiminnan kanssa?
  3. Veitsiä ja haarukoita on käytettävissä vain rajallinen määrä ja usein paljon vähemmän kuin niitä käyttöönsä haluavia nälkäisiä opiskelijoita. Miten tilanteesta selvitään? Onko mahdollista, että jotenkin syntyy sellainen tilanne, jossa kukaan ei pääse syömään (= ei saa käyttöönsä sekä veistä että haarukkaa), vaikka sekä haarukoita että veitsiä on käytettävissä vaikkakaan ei tarpeeksi kaikille halukkaille?


L A S K A R I O H J E I T A
Harjoituksista voit saada kaikkiaan 9 pistettä.
Kaikkiaan tehtäviä on noin 30 kappaletta ja pisteitä tehdyistä tehtävistä saa seuraavasti:

           merkattuja tehtäviä           pisteitä
                    3                        1
                    6                        2
                    9                        3
                   12                        4
                   15                        5
                   18                        6
                   21                        7
                   24                        8
                   27                        9
          

Tehtävät tehdään etukäteen ja ne käsitellään yhdessä harjoituksissa. Mitä perusteellisemmin olet valmistautunut harjoituksiin tehtäviä tekemällä ja kirjaa lukemalla, sitä hyödyllisempiä harjoitustilaisuudet ovat. Harjoituksissa voit myös kysyä itsellesi epäselviksi jääneitä kohtia.

Harjoituksia kannattaa, mikäli mitenkään vain mahdollista, tehdä yhdessä toisten kurssilaisten kanssa.



Kaksi päätä on parempi kuin yksi.

[an error occurred while processing this directive]