Käyttöjärjestelmät I, syksy 2005, tehtävä 1, mallivastaus Mikko Heimola (paljon lainauksia Auvo Häkkisen vanhoista vastauksista) a) PAIKALLISUUS 1) välimuisti: nopea apumuisti CPU:n ja muistin välissä. Pidä tallessa viimeaikoina viitattujen muistipaikkojen sisältöjä (käskyjä, dataa), jotta ei tarvitse noutaa hitaammasta keskusmuistista. 2) osoitemuunnospuskuri (TLB): nopea apumuisti MMU:ssa. Pidä tallessa viimeisimmissä osoitemuunnoksissa käytettyjä sivutaulun alkiota, jotta ei tarvitse noutaa hitaammasta keskusmuistista. 3) lohkopuskurit: KJ:n 'työalueita" keskusmuistissa. Pidä tallessa viimeaikoina viitattuja levylohkoja. Tdstoja käsitellään tyypillisesti peräkkäisjärjestyksessä, joten srva viitattu tavu sijaitsee tn. samassa lohkossa kuin edellinen, ja on siten saatavissa nopeammin kuin levyltä. 4) virtuaalimuisti: Keskusmuistin ja levyn yhteiskäyttöä. Pidä keskusmuistissa vain ne sivut, joihin on viimeaikoina viitattu. Uusi viittaus kohdistuu suurella tn:llä samalle sivulle. Näistä piti kuvata kolme, ja pisteitä sai yhden kustakin jos perustelut olivat mukana, puoli per kohta jos oli vain mainittu nimeltä tilanne. Ihmiset tuntuivat tässä ajatelleen pääasiassa "paikallista" paikallisuutta ja maininneen tilanteita joissa muistinluenta etenee lineaarisesti muistipaikasta seuraavaan, eivätkä ajallista paikallisuutta, eli sitä että samaan muistipaikkaan viitataan lyhyen ajan kuluttua uudestaan. Tästä ei kuitenkaan mennyt pisteitä ellei siihen liittynyt jotain väärinymmärrystä. c) LAITTEISTOPIIRTEET 1) etuoikeutettu tila ja etuoikeutetut käskyt: suojaussyistä ei voida sallia esim, että mikä tahansa prosessi muuttaisi MMU:n rekistereiden arvoja (voisi viitata toisten prosessien alueille), estäisi keskeytykset (voisi valloittaa CPU:n vain itselleen) tai lukisi suoraan levyä (ohittaen tdstoihin liittyvät käyttöoikeustarkistukset). Nuo toiminnot sallittu vain KJ:lle. CPU suostuu suorittamaan etuoikeutettuja käskyjä vain, jos se on asetettu etuoikeutettuun tilaan (bitti PSW:ssä). 2) Keskeytysmekanismi: ks. c)-kohta. Keskeytyksen sattuessa laitteisto asettaa CPU:n etuoikeutettuun tilaan (bitti PSW:ssä) ja siirtää kontrollin KJ:lle (PC+PSW pinoon, PC <- käsittelijän ens. käskyn osoite). 3) Ajonaikainen osoitemuunnos: MMU muuttaa ohjelman sisäisen osoitteen fyysiseksi osoitteeksi ajonaikana (ohjelman sivujen paikka voi vaihdella jopa suoritusaikana). Tässä yhteydessä MMU voi tehdä myös käyttötapa -tarkistuksen (R/W) sekä varmistaa, että prosessi viittaa vain sallitulle alueelle. 4) Kellokeskeytykset: ks. c)-kohta Taaskin kolme piti mainita, pisteytys vastaava. Tässä ihmisillä tuntui menevän sekaisin mitkä ovat laitteistopiirteitä ja mitkä ohjelmallisia, esim. vuorottaja (joka valitsee mikä prosessi seuraavaksi otetaan suoritukseen) on ohjelmallinen eikä siksi kelvannut yhdeksi vastaukseksi, joskin jos vastaaja vaikutti tarkoittavan tällä kellokeskeytyksiä, se hyväksyttiin. Samoin väliin tarjottiin hyvin kehittyneitä rakenteita (virtuaalimuisti), jotka ovat kyllä käytössä moderneissa moniajojärjestelmissä, mutta eivät varsinaisesti välttämättömiä. "Keskusmuisti" taas on tarpeellinen jo yksiajojärjestelmillekin, joten sekään ei kelvannut. c) KESKEYTYSMEKANISMI 1) CPU:n ulkopuolisten laitteiden ohjaustarve, esim I/O valmis: Jotkut laitteet voivat toimia itsenäisesti ja ilmoittaa, kun tarvitsevat KJ:n apua. KJ tarkistaa laitteen statuksen, ja esim. siirtää siirron valmistumista odottaneen prosessin Ready-tilaan. Tavallisesti keskeytynyt prosessi saa jatkaa. 2) Aikaviipalointi (kellokeskeytys): yksikään prosessi ei voi valloittaa CPU:ta itselleen, koska viipaleen täyttymisen vuoksi CPU siirtyy suorittamaan KJ:tä, joka siirtää prossssin Ready-jonoon prioriteetin mukaiseen paikkaan, ja vuorottaa suoritukseen Ready-jonon ens. prosessin. 3) Virhetilanteiden käsittely: Jos sovelluksessa ohjelmointivirhe (esim. nollallajako), KJ voi käsitellä tilanteen (esim. tapa prosessi) ja ottaa suoritukseen jonkun toisen prosessin. 4) Palvelupyynnöt: Eräiden toimintojen oltava keskitettyjä (esim. tdstojen käyttöoikeuksien tarkistaminen) tai vaatii etuoikeutettuja käskyjä (esim. I/O). KJ palvelee pyynnön heti (sama prosessi saa jatkaa), tai käynnistää jonkun apuprosessin Ready-jonoon palvelemaan pyyntöä. Valmistumista odottava prosessi Blocked-tilaan, CPU:lle joku toinen prosessi. 5) Sivunpuutos: KJ laittaa prosessin Blocked tilaan, pistää levyohjaimen siirtämään puuttuvaa sivua keskusmuistiin, ja vuorottaa suoritukseen jonkin toisen prosessin. Tässä piti osata mainita kolme ylläkuvatun kaltaista keskeytysluokkaa, jos oli erillisinä tilanteina kuvattu esim. kaksi eri I/O-keskeytystilannetta (tulostin ja kiintolevy), nämä laskettiin vain yhdeksi kohdaksi. Pisteytys sama kuin edellisissä. d) SIIRRÄNTÄMENETELMÄT 1) Suora I/O (Programmed I/O): CPU tutkii toistuvasti ("pollaa") ohjaimen statusrekisteristä onko siirto valmistunut (ns. busy-wait). 2) Epäsuora I/O (Interrupt-driven I/O): CPU antaa siirtotehtävän ohjaimelle, ja suorittaa itse muita prosesseja. Ohjain keskeyttää kun siirto on valmis, minkä jälkeen CPU siirtää ohjaimen ja muistin välillä. 3) DMA (Direct Memory Access): DMA-ohjain osaa siirtää suoraan muistin ja laitteen välillä itse, CPU:n tarvitsee vain käynnistää siirto. Keskeytys vasta kun koko siirto on valmis. Pisteytys edellisiä vastaava. Tehtävä oli pääpiirteissään osattu ilahduttavan hyvin, olihan kyse kurssin perusasioista.