Rinnakkaisohjelmointi, LH 4
Ohjelma PlusMinus. Yhteisessä muistissa on 6 muuttujaa: X1, X2, X3, X4, Ctrl ja Sum. Kaikkien alkuarvo on nolla. Viisi laskentaprosessia 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.
- [2 htp] Tee BACI'lla ohjelmasta PlusMinus semaforeihin perustuva versio, jossa kriittisen vaiheen suojaus toimii oikein.
Kun toteutat tämä BACI'lla, käytä synkronointiin BACIn semaforeja.
Miten tiedät, että ohjelmasi toimii oikein? Perustele.- Tee ohjelmasta versio, jossa kriittisen vaiheen suojaus ei toimi. Miten tämä ilmenee?
- Tee ohjelmasta versio, jossa kriittisen vaiheen suojaus toimii oikein. Miten tiedät, että ohjelmasi toimii oikein? Perustele.
- Miten ohjelmasi muuttuisi, jos laskentaprosesseja olisikin 4 tai 10 kappaletta?
Huom: sinun ei tarvitse muokata BACI-toteutusta 4 tai 10 laskentaprosessille, vaikka toki saat sen halutessasi tehdä. - Olisiko hyödyllistä käyttää 10 laskentaprosessia? Miksi?
Mikä olisi suurin hyödyllinen laskentaprosessien määrä? Miksi?
- Risteys.
- Näytä, että lukkiutumisen neljä ehtoa täyttyvät risteysesimerkissä (ks. Fig. 6.1 [Stall05], tai luento 5 kalvo 8).
- Anna jokaiselle ehdolle esimerkki, kuinka sen toteutuminen voitaisiin estää. Koeta tehdä esimerkit sellaisiksi, että niissä estetään vain yhden ehdon toteutuminen, mutta muut ehdot voivat silti toteutua.
- Tarkastellaan lukkiutumisen välttämistä pankkiirin (Banker) algoritmin avulla (ks. Fig. 16.11 [Bacon93], tai luento 5 kalvot 44-45)
- Prosessi P2 pyytää vapaana olevaa resurssia R5. Voiko sen antaa ilman lukkiutumisvaaraa? Miksi?
- Prosessi P4 pyytää vapaana olevaa resurssia R5. Voiko sen antaa ilman lukkiutumisvaaraa? Miksi?
- Meillä on seuraavat aliohjelmat, joiden toiminnat ovat sidoksissa toisiinsa:
- Aliohjelma PrintOut (Pr, Db, ...) tarvitsee suorituksensa aikana tulostimen Pr ja varaa tietokannan Db itselleen.
- Aliohjelma Update (Db, ...) varaa tietokannan Db itselleen.
- Aliohjelma Combine (Db1, Db2, Db3, ...) varaa tietokannat Db1, Db2 ja Db3 suorituksensa ajaksi.
Toteuta näiden aliohjelmien keskeinen synkronointi semaforien avulla, kun käytössä on tietokannat Payroll, Personnel, Customers ja Inventory.
- Perustele, miten ratkaisusi toteuttaa em. funktionaalisuusvaatimukset.
- Perustele, miksi poissulkemisongelmaa ei ilmene.
- Perustele, miksi ratkaisusi ei johda lukkiutumiseen.
- Perustele, miksi ratkaisusi ei johda nälkiintymiseen.
- Miksi tehtävänasettelu on epärealistinen? Anna ainakin kaksi syytä.
Teemu Kerola 27.11.2009 12:43