Käyttöjärjestelmät I Kurssikoe 2005-10-18 Mallivastaus ja arvosteluperusteet, tehtävä 2 Pisteiden saamiseksi tehtävässä täytyi mainita kappaleen oleellinen sisältö. Useimmista aiheista pisteitä pystyi saamaan kaksi, ja toisen menetti jos kappaleen aiheen käsittelyssä oli selviä virheitä tai puutteita. a) - PTR (Page Table Register), joka sisältää ajettavan prosessin sivutaulun alkuosoitteen (mutta ei itse sivutalua, joka voi olla muutaman megatavun kokoinen!) 1p - TLB (Translation Lookaside Buffer), joka sisältää viimeksi tarvittuja sivutaulualkioita. Alkioihin on liitetty näiden looginen sivunumero ja datan validiusbitti. 2p MAR ja MBR -rekisterit ovat TiTo-kurssin asiaa, eikä niiden maininnalla ole tässä merkitystä. Osoitteenmuunnos: - Jaetaan looginen *osoite kahtia*. Sivukoolla 2^n osoittavat loogisen osoitteen n vähiten merkitsevää ("viimeisintä", "oikeanpuoleisinta") bittiä siirtymää sivun sisällä ja loput ("ensimmäiset", "vasemmanpuoleiset") sivunumeroa. 2p LIMIT-tarkistusta ei tarvita, koska yliosoitus on fyysisesti mahdotonta sivun sisällä, bittejä ei ole enempää kuin kelvollisia muistiosoitteita sivulla. Sama pätee sivuille, sillä jokaiselle mahdolliselle sivulle on rivi sivutaulussa. - Katsotaan *löytyykö TLB:stä* sivunumeroa vastaavaa riviä. (Rivi sisältää sivunumeron, validibitin ja sivutaulun rivin.) Jos sivu löytyy, katsotaan *onko validibitti asetettu*. Jos se ei ole, sivu ei ole käytettävissä. Jos sivu löytyy ja validibitti on asetettu, sivutilan numero löytyi TLB:stä ja se katenoidaan fyysisen osoitteen aluksi. 3p - Jos sivua ei löytynyt tai validibitti ei ollut päällä, joudumme tekemään *muistihaun* sivutaulusta. Sivutaulun fyysinen osoite on PTR:ssä. Lisäämällä siihen sivunumero saadaan sivutaulun oikean rivin osoite. Sivutaulun riviltä saa sivutilan numeron, ei siis sen fyysistä osoitetta. Koskan sivun koko on kahden potenssi, sivutilan numerosta ja siirtymästä sivun sisällä saa fyysisen osoitteen katenoimalla, mikä on nopeampaa kuin fyysisen osoitteen vaatima aritmeettinen operaatio. 2p - Tarkastetaan sivun present-bitti. Jos se on asetettu, rivi on kelvollinen ja sivu on muistissa. Jos present-bittiä ei ole asetettu, aiheutetaan *sivunpuutoskeskeytys*. Tällöin haluttu sivu pitää lukea levyltä. 2p b) Käytettäessä kaksitasoista sivutaulua sivuhakuosuus on monimutkaisempi. Looginen osoite on jaettu kolmeen osaan. Ensimmäinen osa (eniten merkitsevät bitit) osoittaa aina muistissa olevaan juurisivutauluun. Loogisen osoitteen toinen osa on siirtymä ensimmäisen osan määräämässä juuritaulun rivin osoittamaan käyttäjäsivutaulun osiossa. Siirtymän osoittamalta käyttäjäsivutaulun riviltä löytyy lopulta fyysisen muistisivun numero, josta voidaan katenoida loogisen osoitteen viimeisen osan kanssa fyysinen muistiosoite. 3p c) Loogisten osoitteiden vasemmanpuoleisimmat kuusi bittiä ovat sivutaulun sivunumeroita ja loput bitit siirtymiä sivun sisällä. Tehtävässä siis täytyy yksinkertaisesti korvata kunkin osoitteen ensimmäiset kuusi bittiä tämän bittijonon kohdalta sivutaulusta löytyvällä kehyksen osoitteella. Sivua 001100 ei ole muistissa, joten todellista muistipaikkaa ei pystytä heti tuottamaan. Sen sijaan aiheutetaan sivunpuutoskeskeytys. a. 110001 0101010101 (1p) b. Todellista muistiosoitetta ei pystytä tuottamaan koska haluttua sivua ei ole muistissa. Aiheutuu sivunpuutoskeskeytys. (1p) c. 001110 0000111100 (1p) -- Risto Saarelma