- Semaforit ja
niiden käyttö [16 p]
- Pitävätkö
seuraavat väitteet paikkansa? Perustele vastauksesi. (10 p)
- Jos ohjelman kahdesta prosessista
kumpikin suorittaaa ensin P-operaation samalle semaforille, niin
prosessit aina ja välttämättä lukkiutuvat.
- Halkaistun binäärisemaforin
(split binary semaphore) käyttö helpottaa keskinäisen
poissulkemisen (mutual exclusion) toteuttamisen ohjelmointia.
- V-operaatio kasvattaa semaforin
arvoa yhdellä vain, jos semaforin jono on tyhjä.
- Semaforissa jonottavien
prosessien lukumäärää ei voida kysyä, mutta
E-operaatiolla voidaan tutkia, onko semaforin jono tyhjä.
- Semaforin jono on aina FIFO-jono
ja on käytettävä yksityisiä semaforeja (private
semaphore), kun halutaan herättää prosessit jossain
muussa järjestyksessä.
- Mitä ongelmia tai
omituisuuksia seuraavassa ratkaisussa on? Perustele vastauksesi.(6
p)
sem AutoKuopalla = 0,
KuormaValmis = 1,
KaivuriVapaa = 0;
process Kaivuripappa ( ){
V(KaivuriVapaa);
P(AutoKuopalla);
while(true) {
täytä kuorma;
V(KuormaValmis);
V(KaivuriVapaa);
P(AutoKuopalla);
}
}
process Kuormurikuski[i=1 to N](){
while(true) {
P(KaivuriVapaa);
aja monttuun;
V(AutoKuopalla);
P(KuormaValmis);
poistu montusta ;
vie hiekka sinne, minne kuuluukin;
}
}
- Sirkuksen apupoika monitorina [20]
Sirkuksessa on 3 elefanttia
ja 100 valkoista hiirtä. Eläimet siirtyvät areenalle
kapeaa käytävää pitkin, jossa mahtuu kulkemaan
kerrallaan vain yksi elefantti, mutta vaikka kaikki sata hiirtä.
Koska elefantit pelkäävät hiiriä, ne eivät
voi mennä käytävälle, jos siinä on yksikin
hiiri kulkemassa. Ja mikään hiiri ei uskaltaudu
käytävälle, jos siinä on elefantti kulkemassa,
koska pelästynyt elefantti saattaisi tallata sen.
- Onko tämä
ongelma erikoistapaus jostain kurssilla esitetyistä yleisistä
ongelmista? Jos on niin mistä yleisestä ongelmasta? (2
p)
- Laadi monitori
Apupoika, joka huolehtii siitä, että vain yksi elefantti
saa mennä käytävälle kerrallaan, ja etteivät
hiiret ja elefantit ole koskaan samaan aikaa käytävällä.
(10 p)
- Kirjoita myös
Hiiri- ja Elefantti-prosessien koodit.(3 p)
- Tee ratkaisustasi niin
reilu, etteivät hiiret voi koskaan täysin estää
elefantteja pääsemästä käytävälle
tai vastaavasti elefantit hiiriä. (Näin voi olla jo
b)-kohdassa.) (5 p)
- Sanomanvälitystä
ja laskentapalvelua [15 p]
Työlästä laskentaa
(esim. matriisien kertomista) suoritetaan rinnakkain ja suoritusta
valvoo erityinen koordinointiprosessi Master, joka ensin jakaa
laskentaa suorittaville Worker- prosesseille (N kpl) niiden
tarvitsemat syötteet. Kun Worker-prosessi on saanut oman
laskentansa päätökseen, se lähettää
tuloksensa Master-prosessille. Saatuaan tulokset kaikilta
Worker-prosesseilta Master kokoaa tulokset yhteen.
Koordinaattoriprosessi Master itse
toimii palvelimena, joka vastaanottaa muilta prosesseilta
laskentapyyntöjä. Pyynnöt se käsittelee aina
yhden kerrallaan. Laskentapyynnön saatuaan Master lähettää
tarpeelliset syöttötiedot Worker-prosesseille, jotka
suorittavat laskennan ja palauttavat tuloksensa Masterille, joka
puolestaan lähettää lopputuloksen laskentaa
pyytäneelle prosessille.
Kaikki prosessit käyttävät
sanomanvälitystä keskinäiseen kommunikointiin.
- Piirrä kuva prosessien
välisestä sanomanvälityksestä ja tarvittavista
kanavista (5 p)
- Esitä Master-prosessin ja
Worker-prosessien koodit keskittyen vain toimintojen tahdistuksen
kannalta oleelliseen. Muista myös määritellä
prosessien käyttämät kanavat. (10 p)