Rinnakkaisohjelmointi, S2006, LH 4
Nämä tehtävät käsitellään harjoituksissa viikolla 47, 20-24.11.2006.
Liittyy tehtäviin 2-4:
Ohjelma PlusMinus. Meillä on yhteisessä muistissa 6 muuttujaa: X1, X2, X3, X4, Ctrl ja Sum. Kaikkien alkuarvo on nolla. Meillä on viisi laskentaprosessia, jotka suorittavat 50 kertaa loopin, jonka kriittinen vaihe on:
- Jos muuttujan Ctrl arvo on pariton, vähennä kustakin Xi'stä luku 1. Muutoin lisää niihin luku 2.
- Lopuksi lisää 1 muuttujaan Ctrl ja laske muuttujien Xi summa muuttujaan Sum.
Kun toteutat tämä BACI'lla, käytä synkronointiin ainoastaan (muita) yhteisiä muuttujia. Mahdolliset odotukset voi toteuttaa busy-wait -tyyppisinä looppeina: while (xx != 1) {};.
Lopulta BACI'n prosessien hallinta antaa vuoron myös muille prosesseille, eli odotus ei ole ikuista, jos joku muu prosessi on suorituskelpoinen.
- Tehtävät 5.1 ja 5.3 oppikirjasta.
- Tee BACI'lla ohjelmasta PlusMinus versio, jossa kriittisen vaiheen suojaus ei toimi. Miten tämä
ilmenee?
- Tee BACI'lla ohjelmasta PlusMinus versio, jossa kriittisen vaiheen suojaus toimii oikein.
Miten tiedät, että ohjelmasi toimii oikein? Perustele.
- Tee BACI'lla ohjelmasta PlusMinus versio, joka voi lukkiintua. Mikä siinä
on oleellisesti väärin eli missä on vika? Miten lukkiintuminen ilmenee BACI-ohjelmassasi eli miten tiedät ohjelmasi lukkiutuneen?
- Näytä, että lukkiutumisen neljä ehtoa täyttyvät risteysesimerkissä
(ks. Fig. 6.1 [Stall05], tai luento 6 kalvo 5).
- Tarkastellaan lukkiutumisen välttämistä pankkiirin (Banker) algoritmin avulla (ks. Fig. 16.11 [Bacon93], tai luento 6 kalvot 33-34)
- Prosessi P2 pyytää vapaana olevaa resurssia R5. Voiko sen antaa ilman lukkiutumisvaaraa?
- Prosessi P4 pyytää vapaana olevaa resurssia R5. Voiko sen antaa ilman lukkiutumisvaaraa?
Teemu Kerola 23.11.2006 9:07