------------------------------------------------------------------------- Käyttöjärjestelmät I, Kurssikoe 3.11.2003 Tehtävä 1 / Mikko ------------------------------------------------------------------------- a) - Ulkopuolisten laitteiden on osattava tuottaa keskeytyksiä; keskeytyskäsittelyn aluksi on laitettava pinoon PC ja PSW - Aikaviipalekello, jottei kukaan valloita CPU kokonaan - Etuoikeutettu tila, johon siirrytään automaattisesti keskeytyksen sattuessa; etuoikeutettuja käskyjä joita voidaan käyttää vain tässä tilassa - Ajonaikainen osoitteenmuunnos laitteistotoimintona Yhden näistä kohdista puuttumisesta -1 p, tosin selostus keskeytyksistä saattoi kattaa kaksi ensimmäistä. Käytännössä hyvin harva oli maininnut PC:n ja PSW:n pinoonlaittamisen ja etuoikeutettuun tilaan siirtymisen automaattisuuden, ja maininnoissa muistin suojauksesta ei tullut ilmi, että osoitteenmuunnoksen pitää olla ajonaikaista myös siksi, ettei tiedetä missä kohtaa muistia prosessi milläkin ajokerralla sijaitsee. Ylivoimaisesti parhaiten oli muistettu keskeytysten tarve, etuoikeutettu tila taasen puuttui hyvin monesta paperista. Ikävästi moni kuvitteli esim. skeduloijan tai PCB:n olevan laitteistopiirre. b) Mitä tietoja on tapana tallettaa tiedostoattribuutteihin? Nimi, koko, käyttöoikeudet (+ omistaja ja ryhmä), lohkoluettelo (tai muut sijaintitiedot), aikaleimat Nimen, käyttöoikeuksien tai koko-/sijaintimaininnan puuttumisesta -1p. kustakin. Yllättävää kyllä, liki kaikissa papereissa oli muistettu käyttöoikeuksien tarve, nimen ja varsinaisen datan sijaintitietojen puuttuessa. Eksoottista? c) Mitä tietoja on tapana tallettaa prosessin kuvaajaan? - Prosessin omistamat muistialueet (PTR, BASE, LIMIT) - Tallealue rekistereille (PC,R1- jne. ja PSW:lle) - Prosessin tunnistetiedot (PID, UID, GID), prioriteetti, tila - Avoimet tiedostot, työhakemisto - -1p/ olennainen puute. Erityisesti muistialueiden ja rekisterien tallealueen puuttumisesta lähti pisteitä. Tehtävä oli osattu kohtuullisen hyvin, hämmentävintä oli monessa paperissa esiintynyt väite, että koodi, data ja pino sisältyisivät kokonaisuudessaan PCB:hen (tästä tuli tietenkin miinusta). ------------------------------------------------------------------------- Käyttöjärjestelmät I, Kurssikoe 3.11.2003 Tehtävä 2 / Mikko ------------------------------------------------------------------------- a) Keskeytysten avulla voidaan parantaa prosessorin käyttöastetta (tärkeä), ottamalla toinen prosessi ajoon edellisen odottaessa esim. I/O-tapahtumaa. Samoin se mahdollistaa interaktiivisen moniajon, missä suoritettavaa prosessia vaihdetaan tasaisin väliajoin, luoden käyttäjälle illuusio rinnakkaisesta suorituksesta, sekä käyttöjärjestelmän päästämisen suoritusvuoroon esim. virhetilanteissa. Kellokeskeytys: Aiheutetaan säännöllisin väliajoin.Siirtää ajossa olevan prosessin Ready jonoon, ottaa valmiiden jonosta uuden suoritettavaksi. Ilman tätä I/O:ta tekemätön prosessi voisi vallata koko koneen, ja muutenkin vuorottaminen olisi epätasaista. I/O-keskeytys: Siirron valmistuttua. Tarkistaa mikä laite aiheutti keskeytyksen, tekee tarvittavat tiedonsiirtotoimet, siirtää siirtoa odottaneen prosessin ajovalmiiden jonoon (jos se ei odota jotain toistakin tapahtumaa). Virhetilanne: Ohjelmakoodi on yrittänyt viitata yli oman muistialueensa ulkopuolelle, tehnyt laittoman käskykutsun, jakanut nollalla tms. KJ tarkistaa oliko virhe fataali, ja jos oli, lopettaa prosessin (ei-fataalien tapauksessa tehdään jotain muita korjaustoimenpiteitä). Palvelupyyntö: Ohjelma pyytää KJ:lta esim. I/O-toimenpidettä tai tiedoston avaamista. Käsitellään tarkastamalla ohjelman oikeudet tehdä tämä ja ajamalla ko. palvelukäsittelijä. Sivunpuutoskeskeytys: Ohjelma haluaa viitata muistipaikkaan, joka on siirretty toissijaiseen muistiin. KJ huomaa tämän yrittäessään muuntaa loogista sivunumeroa sivutilanumeroksi sivutaulusta, ja aiheuttaa keskeytyksen. Aloitetaan siirräntä tämän sivun tuomiseksi muistiin. Keskeytetään uudestaan tämän valmistuessa. Perustelut 2 p, esimerkeistä 2 p. Perustelut saattoivat toki tulla ilmi esimerkeissäkin. Hyvin osattu, ei tyyppivikoja. b) Miten ja milloin prosessori huomaa keskeytyksen? Tarkastelemalla PSW:n bittiä (1 p.) käskysyklin lopussa (1 p.). Jotkut väittivät tarkastelun tapahtuvan vain aikaviipaleen loppumisen tai peräti prosessin päättymisen(!) yhteydessä. Ei ei. c) Stallings, sivu 23, kuva 1.10. Kuittaus -> PC ja PSW pinoon (1 p.) -> Etuoikeutettuun tilaan siirtyminen (1 p.) -> Keskeytyskäsittelijän lataaminen suoritettavaksi eli PC:hen (1p) Tässä kohtaa laitteistolta ohjelmatasolle (1 p.) -> Käsittelijän suorittaminen/keskeytyksenkäsittely -> Edellisen prosessin palautus/vaihto uuteen (2 p.) * Kaikkien ed. prosessin rekisterien talletus PCB:hen * Tilan päivittäminen * Siirtäminen oikeaan jonoon * Uuden prosessin ottaminen ready-jonon kärjestä running-prosessiksi * Sen arvojen lataaminen PCB:stä prosessoriin Virheitä: Etuoikeutettuun tilaan siirtyminen oli unohtunut monelta, PC ja PSW vietiin milloin minnekin ja missäkin välissä, väliin koko prosessin tila talletettiin heti alkuun laitteistotoimintona kuvaajaan, väitettiin että KJ lataisi itse itsensä suoritettavaksi. ------------------------------------------------------------------------- Käyttöjärjestelmät I, Kurssikoe 3.11.2003 Tehtävä 3 / Mika ------------------------------------------------------------------------- a) (max 4p) Stallings kuva 7.18: rekistereiden maininta (1p) ja mitä pitävät sisällään (1p), fyys.osoitteen muodostus ja tarkistus (1p), poikkeus ellei OK (1p) b) (max 8p) Stallings kuva 8.8: TLB ja PTR mainittu (1p) ja sisältö selitetty (1p), miten sivunro ja siirtymä saadaan (1p), TLB:n tsekkaaminen (1p) ja ST:n alkion nouto (1p), läsnäolobitin tutkiminen (1p) ja sivupuutoksen generointi (1p), katenointi (1p) Kommentteja: Yleisesti ottaen tehtävä oli hyvin osattu, melkein kaikki osasivat tehtävän vähintään tyydyttävästi. Tyypillisiä virheitä olivat a-kohdassa, ei selitetty mitä BASE ja LIMIT rekisterit sisältävät. Lisäksi jotkut olivat toki maininneet LIMIT rekisterin sisällön, mutta unohtivat mainita että osoitteen ylittäessä LIMIT:n arvon aiheutetaan keskeytys. b-kohdassa joillekin meni TLB ja PTR sekaisin, yleinen virhe oli joko unohtaa TLB:n käyttö (eli ensin katsotaan TLB:stä ja vasta sitten mennään sivutauluun) tai jättää mainitsematta että oikea sivutaulun alkio löydetään indeksoimalla sivunumerolla sivutaulua, jonka alkuosoite on PTR rekisterissä. Samoin usea unohti mainita miten loogisesta osoitteesta saadaan sivunumero, maininta siitä että looginen osoite sisältää sivunumeron ja siirtymän ei ihan riitä. Samaan rataan jotkut unohtivat mainita, että lopullinen osoite saadaan katenoimalla ja lopuksi jotkut unohtivat mainita sivunpuutoskeskeytyksen, joka seuraa silloin kun haluttua sivua ei ole muistissa. ------------------------------------------------------------------------- Käyttöjärjestelmät I, Kurssikoe 3.11.2003 Tehtävä 4 / Avrll ------------------------------------------------------------------------- OPEN: Parametrit (1p) pinoon (1p): - mikä tdsto (nimi merkkijonona), avaamistapa (R),operaation koodi (OPEN) ja sitten palvelupyyntö -> keskeytys KJ tarkistaa prosessin oikeudet tdstoon vertaamalla PCB:n uid+gid vs. tdston uid+gid sekä käyttöoikeusbitit (1p). Jos OK, merkitsee tdston PCB:hen tdstokuvaajatauluun, ja palauttaa prosessille tdstokahvan (1p). READ: Parametrit (1p) pinoon: mistä (tdstokahva), minne (muuttujan muistiosoite), paljonko (tavumäärä), operaatio (read) ja sitten palvelupyyntö -> keskeytys. KJ selvittää nykyisen lukuposition ja tdstoattribuuttien avulla käsittelyvuorossa olevan levylohkon numeron (<- laiteriippumaton taso) ja tsekkaa onko se valmiina lohkopuskureissa (1p). Jos on laiteriippumaton taso siirtää tiedon sovelluksen alueelle (1p), korjaa lukupositiota ja sovellus saa jatkaa. Jos ei, niin.. Laiteriippumaton taso antaa ajurille vapaan lohkopuskurin osoitteen ja lohkonumeron, lohkon koon ja operaatiokoodin. Ajuri laskee lohkonumeron perusteella levyosoitteen (ura, pinta, sektori) ja laittaa DMA-siirron käyntiin kertomalla ohjaimelle mistä (levyosoite), minne (lohkopuskurin osoite), paljonko (tavumäärä) ja suunta (read) (1p). Ohjain siirtää tiedon itsenäisesti suoraan muistiin (1p). Noudon ajaksi palvelua pyytänyt prosessi Blocked tilaan, KJ kopioi rekistereiden arvot prosessorista sen kuvaajaan. KJ suorituttaa muita prosesseja sillä aikaa kun siirto on käynnissä. (1p) Kun siirto valmis -> keskeytys (1p) KJ (ajuri) tarkistaa miten sujui, jos OK, niin laiteriippumaton taso kopioi lohkopuskurista tietoa prosessin alueelle (1p). KJ siirtää siirtoa pyytäneen prosessi Ready-jonoon. Keskeytynyt prosessi saa jatkaa CPU:lla. Kun siirtoa pyytänyt prosessi aikanaan pääsee Ready-jonon keulille, se pääsee suoritukseen. (1p) [HUOM: tuossa 13 pistettä, vaikka max 12p] Kommentteja: ============ Tämä tehtävä oli kutakuinkin sama kuin osiossa 3. Ihan täysiin pisteisiin ylti noin 10 paperia. Siellä oli todella hyviä mallikelpoisia ratkaisuja, jotta kiitosta vaan. Nollille tai lähes nollille jäi vastaavsti noin 10 paperia. Keskiarvo pyöri jossain puolessavälissä 6:n pisteen korvilla. Yllättävän moni oli unohtanut käyttöoikeuksien tarkistamisen ja varmaan yhtä monelta oli selittämättä OPEN(..) ja READ(...) palvelupyyntöjen parametrit. Myös lohkopuskurin käyttö oli unohdettu luvattoman monessa paperissa. Vastausten täsmällisyydessä oli monilla aika paljon toivomisen varaa: "CPU rupeaa tekemään jotain muuta ja ajuri selvittää...", "levy tutkii FAT-taulua...". Tässä ei myöskään haettu "mistä, minne, paljonko, suunta" fraasia vaan täsmällisempää selitystä. Pahimmat mokat olivat MMU:n ja osoitemuunnoksen sotkeminen tähän yhteyteen. Tällaisia papruja oli peräti puolenkymmentä. Toivottavasti kaikki ei kuitenkaan olleet laskareissa samassa porukassa. -------------------------------------------------------------------------