Helsingin yliopisto
Tietojenkäsittelytieteen laitos
Rinnakkaisohjelmistot, Harjoitus 1 (kevät 2004)

22.-26.3.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. Harjoitus on jossain määrin myös Käyttöjärjestelmät I -kurssin kertausta (vilkuile tarvittaessa myös Stallingsin kirjaa).


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

a) 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).

b) Millaisia vaatimuksia liittyy yhteisen datan tai yhteisen koodin käyttöön? Voiko KJ taata nuo oikeellisuusvaatimukset vai pitääkö kenties ohjelmoijankin huomioida jotain? Mitä?

c) 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 - RINNAKKAISIA PROSESSEJA PÖYTÄKONEESSA

a) Mitä prosesseja on käynnissä tavallisessa pöytäkoneessa, jossa on graafinen ikkunointiin perustuva käyttöympäristö? Mitä hyötyä on siitä, että toiminnot on rakennettu prosesseina?

b) Onko 1) tiedostopalvelu 2) sähköposti rinnakkaisjärjestelmä? Huomaa, että asiaa voi tarkastella sekä käyttäjän että järjestelmän (järjestelmän suunnittelijan) kannalta.

o 4 - 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?

5 - LIUKUHIHNA - JO CHAPLININ NYKYAIKAA

a) Ohjelman kääntäminen muodostuu jonosta peräkkäisiä toimenpiteitä (leksikaalianalyysi, syntaksianalyysi, koodin generointi, koodin optimointi), jotka tehdään kaikille sovellukseen kuuluville moduuleille peräkkäin. Kääntämiseen liittyvät tehtävät voitaisiin hajauttaa neljälle peräkkäiselle solmukoneelle, joita yhdistää lähiverkko. Selitä miten tällainen järjestely voisi nopeuttaa laskentaa. Muista miettiä myös mahdollisia pullonkaulakohtia. Piirrä kuva!

[Se mitä nuo tässä mainitut toimenpiteet oikeasti tekevät, ei ole olennaista tämän tehtävän kannalta.]

b) Internetin nimipalvelu sisältää kaikki domain-nimet ja kustakin nimestä numeerisen osoitetiedon (IP-osoitteen; tämä on yksinkertaistus, mutta riittää tässä hyvin). Prosessit käyttävät nimipalvelua selvittäessään merkkimuodossa annettua tietokoneen nimeä (esim. melkki.cs.helsinki.fi) vastaavan IP-osoitteen (128.214.48.122). Miten rinnakkaisuutta voidaan käyttää kyselyjen tehostamiseen? Onko rinnakkaisuudesta tässä tapauksessa jotain hyötyä? Syntyykö siitä kenties ratkottavia ongelmia? Piirrä kuva!

[Tarkoitus on hahmotella asiaa, tässä ei ole tarpeen ottaa selville, miten ko. nimipalvelu todella on toteutettu. Mieti muuten myös sitä, mitä kaikkea "käytön tehostaminen" oikein voi tarkoittaa.]


L A S K A R I O H J E I T A
Harjoituksista voit saada kaikkiaan 9 pistettä.
Tavalliseen tapaan tehtyjen tehtävien määrän perusteella voit saada 6 pistettä. Kaikkiaan tehtäviä on 30 kappaletta ja pisteitä tehdyistä tehtävistä saa seuraavasti:

          merkattuja tehtäviä           pisteitä
	            6                        1
		   10                        2
		   14                        3
		   18                        4
		   22                        5
		   26                        6
	  
 
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.

Tehtäväpisteiden lisäksi aktiivisesta kurssiin osallistumisesta voi saada 3 pistettä. Aktiivinen osallistuminen tarkoittaa sitä, että tuo harjoitustilaisuuteen lyhyen, noin yhden sivun selvityksen siitä, mitä kurssilla on edellisellä viikolla käsitelty eli mitkä ovat olleet tärkeimmät asiat sekä omat kommentit siitä, mitä on ollut helppo oppia ja mikä hankalaa ja erityisesti, mikä on jäänyt epäselväksi. Kyseessä on siis jonkinlainen minimaalinen oppimispäiväkirja. Kukin selvitys tuottaa 1/2 pistettä ja kaikki kuusi yhteensä sen 3 pistettä.

Kaksi päätä on parempi kuin yksi.

[an error occurred while processing this directive]