[9 p] Kriittinen alue (vaihe). Oletetaan,
että monisäikeisen ohjelman yhteisessä
muistissa olevien muuttujien X, Y ja Z
käyttöä halutaan suojata kriittisen vaiheen
avulla. Muuttujiin viitataan ohjelmassa viidessä
kohtaa (koodinpätkät A, B, C, D ja E), joita kutakin voi olla samanaikaisesti suorittamassa usea ohjelman säie:
A: X <- 55 B: some1 <- X C: X <- 5 D: Y <- 0 E: some4 <- X
Y <- 88 some2 <- Y Z <- X+Y
Z <- X+Y some3 <- Z
Kohdissa A ja C muuttujien Y ja Z vanhat arvot eivät saa
näkyä muille sen jälkeen kun X on saanut
uuden arvon ja Z'n uuden arvon tulee olla X'n ja Y'n sen hetkisten arvojen
summa. Kohdassa B muuttujien some1, some2 ja some3 uusien arvojen tulee olla
X'n, Y'n ja Z'n arvot koodinpätkän suorituksen
alkuhetkellä.
- [3 p] Oletetaan, että kyseessä on yhden suorittimen laitteisto. Mitkä näistä
(pseudo)koodinpätkistä (A, B, C, D ja E) tulee
suojata
kriittisenä alueena? Miten tilanne muuttuu, jos suorittimia on useita ja säikeet voivat olla suorituksessa samanaikaisesti eri suorittimilla?
- [2 p] Anna yhden suorittimen laitteiston konkreettinen skenaario, jossa em. koodinpätkien kriittisten alueiden suojauksen puuttuminen aiheuttaa virhetilanteen. Selitä, mikä virhe syntyy ja erityisesti miksi virhe syntyy.
- [2 p] Oletetaan, että suorittimia on yksi kappale ja käyttöjärjestelmä vuorottelee säikeiden suoritusta aikaviipaleskeluduloinnin avulla. Näytä (pseudokooditasolla), kuinka edellämainitut kriittiset vaiheet suojataan järkevästi tässä ympäristössä. Perustele ratkaisun järkevyys.
- [2 p] Oletetaan, että suorittimia on useita ja että usea säie voi olla suorituksessa samanaikaisesti eri suorittimilla. Näytä (pseudokooditasolla), kuinka
edellämainitut kriittiset vaiheet
suojataan järkevästi tässä ympäristössä. Perustele ratkaisun järkevyys.