------------------------------------------------------------------------- Käyttöjärjestelmät I, erilliskoe 15.1.2002 Tehtävä 1 ------------------------------------------------------------------------- a) kirja luku 1.4. Taulukko 1.1 (Classes of Interrupts), muista myös sivupuutoskeskeytys ja palvelupyyntö(keskeytys). 2 pistettä mainitsemisista, 2 pistettä perusteluista b) kirja kuva 1.7. Keskeytys huomataan pystyyn nostetusta bitistä tilarekisterissä PSW tai erillisessä keskeytysrekisterissä. Tutkitaan jokaisen käskysyklin lopuksi (ellei keskeytykset ole juuri sillä hetkellä estettyinä). 1 1/2 milloin, 1 1/2 miten c) kirja kuva 1.10 ja sivut 21-25. Lisäksi syytä mainita etuoikeutettuun tilaan siirtyminen ja keskeytysten esto (mainittu toisaalla kirjassa). Laitetoiminnot 4 p (kuittaus, PSW&PC pinoon, siirtyminen etuoikeutettuun tilaan, keskytysten esto, PC:lle käsittelijän alkuosoite), ohjelmallinen osa 4 p ( rekistereiden talletus pinoon, käsittely (heti/käsittelevä prosessi esim. ajuri Ready-tilaan), rekistereiden palautus tai niiden talletus PCB:hen + vuorottajaan) ------------------------------------------------------------------------- Käyttöjärjestelmät I, erilliskoe 15.1.2002 Tehtävä 2 ------------------------------------------------------------------------- kirja Taulukko 3.5 (Typical Elements of Process Control Block) - Tärkeimmät kokonaisuudet: tunnistus, vuorottaminen, muistinhallinta, tiedostojärjestelmä. Kukin osio 4 pistettä: mitä tietoa 2 p, milloin käytetään 2 p. Jos kuitenkin joku keskeinen asia puuttuu, esim. tallealue rekistereille, ei saanut täysiä pisteitä. tunnistus --------- -pid: muut prosessit viittaavat yks. numerolla, -ppid: äitiprosessi saa tietoa lapsestaan -uid, gid: tärkeä mm. käyttöoikeuksien tarkistuksessa muistinhallinta --------------- - tieto siitä missä prosessille varatut muistialueet ovat - tavallisesti vain osoitin erillisellä alueella olevaan sivutauluun - käytetään osoitemuunnoksissa (ST:n osoite PTR:ään), tarvitaan myös kun tehdään uusia tilanvarauksia, korvataan vanhoja varauksia uusilla ja kun prosessin päättyessä vapautetaan kaikki varaukset. vuorottaminen ------------- - tila (Ready, Blocked jne..): voiko prosessi edetä, vai odottaako jotain. Linkitetty tilan mukaiseen jonoon. - tallealue rekistereille: jos ei ajossa, tiedot tallessa täällä. Kun saa ajovuoron, kopioidaan CPU:lle - prioriteetti: vaikuttaa siihen kuinka nopeasti prosessi saa CPU:n. Tähän kategoriaan kuuluu myös prioriteetin laskentaan vaikuttavia tietoja, esim. käytetty CPU-aika, käytetty I/O-aika tiedostojärjestelmä ------------------- - työhakemiston polkunimi: tarvitaan, jos tiedosto avataan suhteellista polkunimeä käyttäen, cd-komento vaikuttaa tähän - tiedostokuvaaja: kutakin prosessin avaamaa tiedostoa kohden on yksi viite KJ:n muihin tietorakenteisiin (~ globaali avoimet tiedostot taulu). Tarvitaan aina, kun prosessi käyttää tiedostoa. Kun prosessi päättyy, suljetaan kaikki prosessin tiedostot. Se edellyttää myös KJ:n tallettamien globaalien (yhteiskäyttöisten) tietojen päivittämistä. Ylläoleva riitti täysiin pisteisiin. Allamainituista saattoi saada jotain unohtunutta anteeksi (max 1 p) Siirräntä --------- - hoidetaan käytännössä tiedostokäsitteen kautta -> ei kovin paljon tätä varten tarvittavaa tietoa. Unixissa I/O:n parametritietoja välitetään PCB:n kautta laiteajurille Muuta ----- - linkkikenttiä: PCB:t muodostavat resurssien odotusjonoja, esim. Ready-jonossa CPU:ta odottavat, kunkin laitteen (laiteajurin) jonossa ko. laitteelta palvelua odottavat jne. Äitiprosessiinkin voi olla suora linkki. - prosessien väliseen kommunikointiin liittyvää tietoa, esim. lipukkeita, signaalilipukkeita jne. ------------------------------------------------------------------------- Käyttöjärjestelmät I, erilliskoe 15.1.2002 Tehtävä 3 ------------------------------------------------------------------------- - kirjan luku 2 sekä vastaavat luentokalvot Tässä yhteydessä toimii prosessienhallinta, tdstojenhallinta, siirräntäjärjestelmä sekä muistinhallinta. - 2 p per selvästi mainuttu osa-alue + 2 p selityksestä per osa-alue Aluksi KJ tietenkin tarkistaa, onko annettu komento todellakin jokin suoritettava ohjelma eli koodi. Tähän tarvitaan tiedosto- ja siirräntäjärjestelmiä. Hakemistoalkio on haettava levyltä muistiin tutkimista varten (ellei se jo ole muistissa). Äitiprosessin PCB:stä löytyy uid/gid, joita käytetään oikeuksien tarkistamisessa. Sitten tarkistetaan onko käyttäjällä oikeudet ko. ohjelman suorittamiseksi (Tiedostojärjestelmän palvelu). Tapahtuu vertaamalla PCB:ssä olevia tietoja (uid, gid) tiedostoattribuuteissa oleviin tietoihin (uid, gid + oikeudet). Sitten luodaan ja alustetaan PCB (Muistinhallintaa & prosessinhallintaa apuna käyttäen) Tämän jälkeen ohjelman koodi luetaan sisään (mahdollisesti vain osa) ja tulevalle prosessille varataan muistia. Tähän tarvitaan siirräntä- ja muistinhallintajärjestelmiä. Jos KJ:n toteutus perustuu tarvenoutoon, muistia varataan vasta sivupuutosten yhteydessä, ei etukäteen. Lopuksi prosessin PCB pistetään jonoon odottamaan READY-jonoon vuoroaan prosessorille. Tähän tarvitaan prosessinhallintajärjestelmää. [ Kun edellisen prosessin aikaviipale loppuu tai CPU:lla olevan prosessin suoritus muuten keskeytyy, talletaan (mahdollisesti) vanhan prosessin rekisterit PCB:hen ja pistetään PCB BLOCKED- ja tai READY-jonoon. Sitten haetaan prosessilistasta uuden prosessin PCB. Tämän jälkeen prosessimme tiedot ladataan PCB:stä rekistereihin (PSW, PC ja muut). Myös MMU täytyy alustaa: PTR:n arvoksi sivutaulun fyys.alkuosoite ja TLB on tyhjennettävä, koska se sisälsi edellisen prosessin viittauksia, jotka olisivat vääriä uuden prosessin muistialueen suhteen. Vasta tämän jälkeen CPU jatkaa suoritustaan tämän luodun prosessin koodista. ] ------------------------------------------------------------------------- Käyttöjärjestelmät I, erilliskoe 15.1.2002 Tehtävä 4 ------------------------------------------------------------------------- 1) KJ valitsee uuden prosessin suoritukseen - nollaa TLB:n validibitit - aseta PTR = uuden prosessin sivutaulun fyys. osoite (löytyy PCB:stä) - kopioi muut rekisterit ja prosessi pääsee suoritukseen 2) Aluksi MMU yrittää muuntaa virtuaaliosoitteen 0 fyysiseksi osoitteeksi (sivu = 0, siirtymä = 0), 3) Koska sivun 0 tietoja ei löydy TLB:stä, MMU noutaa muistista TLB:hen sivutaulun alkion osoitteesta PTR + 0 4) Sivutaulun alkiosta käy ilmi, ettei sivu 0 ole muistissa (läsnäolobitti P=0), joten MMU aiheuttaa sivunpuutoskeskeytyksen. 5) KJ käsittelee keskeytyksen ja laittaa laiteohjaimen noutamaan puuttuvaa sivua muistiin (KJ valitsee sivutilaksi esim 77). Prosessin tilaksi tulee Blocked. 6) Kun ohjain siirtää, CPU voi suorittaa muita prosesseja. 7) Tulee "siirto valmis" keskeytys. KJ kirjaa sivutauluun sivun 0 kohdalle P=1 ja sivutilanro=77, sekä siirtää prosessin READY tilaan. 8) Aikanaan prosessi pääsee uudelleen suoritukseen. - kohdat 1) - 3) kuten edellä 9) Nyt sivutaulun alkiosta käy ilmi, että sivu 0 on muistissa ja MMU voi tehdä osoitemuunnoksen. fyys.os = katenoi(sivutilanro, siirtymä) 10) Tällä osoitteella etsitään ensin välimuistista ja vasta sitten haetaan muistista. 11) Osoitteille 1..510 osoitemuunnos onnistuu helposti, sillä nyt TLB:stä löytyy valmiiksi sivuun 0 liittyvät tiedot. 12) Kun prosessi viittaa osoitteeseen 2001, se sijaitseekin sivulla 1. Koska sivun 1 tiedot eivät ole TLB:ssä, toistuu kohdat 3) - 10) mutta sivunumerolle 1. 13) Seuraavalla viitteellä 2002 osoitemuunnoksessa tarvittavat tiedot löytyvät TLB:stä, joten osoitemuunnos on nopeaa. 14) Viite osoitteeseen 500 osuu sivulle 0. Sen tietoja ei löydy TLB:stä (validibitit nollattu välillä, CPU suoritti muita prosessja), ja sivutaulun alkio on noudettava muistista fyysisestä osoitteesta PTR + 0 (ko. muistipaikan sisältö voi löytyä toki välimuististakin!). 15) Osoitemuunnos kuten kohdat 9) - 11) o-o-o Kukin kohta 1 piste. Täydet pisteet sai, jos kaikki yleisperiaatteet olivat kohdallaan. Välimuistista ei tarvinnut mainita mitään. -------------------------------------------------------------------------