Arvosteluperusteet, kurssikuulustelu 17.12.2001 ======================================================================== Tehtävä 1 (Teemu Kerola) ======================================================================== a) Prosessi on ohjelman suoritusaikainen esitysmuoto järjestelmässä. Pääasia on, että annetaan täsmällinen ja oikein oleva lyhyt selostus. b) Prosessin kuvaaja (PCB) ja mitä tietoja siinä on. Pelkkä nimi ei riitä. c) Tehtävät, oikeudet. KJ prosessi toteuttaa jotain käyttöjärjestelmän hallintopalvelua (muistinhallintaa, laitteiden hallintaa, prosessien hallintaa, ...). Se voi olla elossa aina tai vain tarvittaessa. Se voi suorittaa aina tai osan ajasta etuoikeutussa tilassa. Sillä on yleensä suurempi prioriteetti kuin käyttäjätason prosesseilla. d) Suoritinympäristön (laiterekisterit, tilarekisterit, MMU, PC, ...) tiedot otetaan talteen aikaisemman prosessin alueelle (PCB:n osoittamaan paikkaan), uudet tiedot kopioidaan uuden prosessin alueelta (PCB) suorittimelle. Aikaisempi prosessi (sen PCB) siirretään joko odottamaan uutta vuoroa suorittimelle RR-jonoon, odottamaan jotain tapahtumaa sen tapahtuman mukaiseen jonoon, tai sitten se voidaan prosessin päättymisen yhteydessä poistaa kokonaan järjestelmästä. e) Aikaviipalekeskeytys. Käyttöjärjestelmä antaa prosessin kerrallaan käyttää vain yhden aikaviipaleen verran suoritinta. Suorituskelpoiset prosessit vuorottelevat täten suorittimella. Voi olla myöskin, että joku korkeamman prioriteetin prosessi (esim. KJ-prosessi) saa suoritusvuoron jonkin muun keskeytyksen (esim. laitekeskeytyksen) jälkeen. f) Korkean prioriteetin omaava prosessi saa laitekeskeytyksen ja alemman prioriteetin prosessi joutuu väistymään tieltä välittömästi. Voi myös olla, että Ready-to-Run -jono oli tyhjä. =============================================================================== Tehtävä 2 Arvostelu: Heikki Lindholm =============================================================================== ref. Häkkinen s.39-s.42 luento 5 2. [12 p] Konekäskyjen suoritus. 2. a. [2 p] Määrittele käsite käskyjen suoritussykli. Mitkä ovat sen vaiheet? Käskyn suoritussykli tarkoittaa operaatioita, joita prosessori tekee konekäskyn suoritusaikana. Karkeasti operaatiot voidaan jakaa kahteen luokkaan: niihin, jotka tehdään jokaisen käskyn yhteydessä ja niihin jotka määräytyvät käskystä itsestään. Käskyn suoritussyklin vaiheet hieman Häkkisen esitystä yleisemmällä tasolla: 1. käskyn nouto (ja PC:n kasvatus seuraavan käskyn noutoa varten) 2. käskyn tulkinta (purku, muistios. laskeminen) 3. käskyn suoritus (muistista haut, laskenta (ALU), tuloksen tallennus) 4. keskeytysten tarkistus o Luentokalvon 6 perusteella vastaukseksi riittävät kohdat 2 ja 3 2. b. [4 p] Miten suorittimella tapahtuu konekäskyä "ADD R5, =345" suoritettaessa suoritussyklin eri vaiheissa? 1. käsky haetaan muistista (-> IR), PC:tä kasvatetaan o PC -> MAR o väylä: lue o (ADD R5, =345) -> MBR o MBR -> IR 2. käsky tulkitaan o puretaan osiin -käskykoodi ADD -1. operandi R5 -osoitusmuoto = -2. operandi 345 (tai 345(R0)) o lasketaan tehollinen muistiosoite, joka tässä tapauksessa on 345+R0 = 345 (koska R0 on indeksirekisterinä aina 0). Tulos siirretään TR:iin. 3. käsky suoritetaan o käskyyn ei liity muistihakuja, koska operandi on välitön. Siispä ALU:iin syötetään operaatioksi ADD ja operandeiksi R5:n arvo ja luku 345 (TR) ja ohjataan ALU:n tulos rekisteriin R5. o (Lisäksi luultavasti muutetaan SR:n GEL-bittejä vastaamaan käskyn tuloksen tilannetta.) 4. käskyn suorituksen jälkeen tutkitaan tilarekisteristä (SR) tapahtuiko poikkeuksia. o 1 p per kohta 2. c. [3 p] Määrittele käsite keskeytys (exception, interrupt). Minkä tyyppisiä keskeytyksiä on olemassa? Miten keskeytykset käsitellään suorittimella? Keskeytys on mikä tahansa tilanne, jonka käsittely vaatii poikkeuksen käskyjen normaaliin suoritusjärjestykseen (kalvot). Keskeytyksiä on pääasiassa kolmea tyyppiä: 1. Käskyn aiheuttamat virhetilanteet (esim. nollalla jako) 2. Käskyn aiheuttamat muut poikkeustilanteet (ei virhe: "käsky itse halusi aiheuttaa poikkeuksen", esim. SVC) 3. Prosessorin ulkopuolisten komponenttien aiheuttamat keskeytykset. (esim. kellolaitekeskeytys, laiteohjainkeskeytys) Keskeytykset käsitellään suorittimella seuraavasti: - jokaisen käskyn suorituksen jälkeen tarkistetaan SR:stä, onko keskeytyksiä sattunut - [prosessorille on ennalta määrätty keskeytystyypit, jotka se tunnistaa.] Keskeytystyypin mukaan haaraudutaan keskeytyskäsittelijään, kun se on tarpeen (SR). Haarautuminen tapahtuu hyvin pitkälle aliohjelma- kutsun tapaan - oleellisina eroina ovat yleensä se, että keskeytys- käsittelijän osoite saadaan nk. keskeytysvektorista, joka on jokin vakio-osoite (riippuu prosessorityypistä), ja se, että keskeytyskäsit- telijä suoritetaan etuoikeutetussa tilassa. Yleensä keskeytyskäsittelyn aikana ei sallita uusia keskeytyksiä. o määritelmä 1p, tyypit (2/3) 1p, selostus käsittelystä 1p 2. d. [3 p] Määrittele käsite etuoikeutettu tila (supervisor state, priviledged state). Miten se vaikuttaa käskyjen suoritukseen? Prosessoreissa on yleensä jaettu toimintoja (käskykantaa) osiin siten, että osaa käskyistä voi suorittaa vain, kun prosessori on tietyssä tilassa. Yleensä prosessorin mahdollisia tiloja ovat käyttäjätila ja etuoikeutettu tila. Etuoikeutetussa tilassa voi suorittaa prosessorin kaikkia käskyjä, kun taas käyttäjätilassa voi suorittaa yleensä vain "turvallisia" käskyjä. Etuoikeutetulle tilalle tyypillisiä käskyjä ovat varsinkin MMU:ta hallitsevat käskyt, ts. etuoikeutetussa tilassa voidaan viitata koko muistiavaruuteen, kun käyttäjätilassa voidaan viitata muistiin vain MMU:n asettamissa rajoissa. Tilajaottelu on perusteltu käyttöjärjestelmien toteuttamisen helpottamiseksi/ mahdollistamiseksi. o määritelmä 1p (riittää: Etuoik. tila on *prosessorin* tila, jossa...) o etuoik. tilassa mihin vain muistiavaruuden kohtaan viittaaminen mahd. 1p o etuoik. tilassa void suor. käskyjä joita ei voi suor. käyttäjätilassa 1p o etuoik. tilassa void suor. KAIKKIA mahd. käskyjä 2p =============================================================================== Tehtävä 3 Arvostelu: Heikki Lindholm =============================================================================== ref. luento 11 3. [12 p] Java. Oletetaan, että ohjelma MyProg on kirjoitettu Javalla ja että se suoritetaan järjestelmässä tulkitsemalla. 3. a. [2 p] Mitä ohjelmalle MyProg tehdään ennen sen varsinaisen suorituksen alkua? Mikä on MyProg'in esitysmuoto suoritusaikana ja miten siihen päästään? Ohjelma MyProg ladataan muistiin (mahdollisesti myös linkitetään) ennen kuin varsinainen suoritus alkaa (tulkki lataa). MyProg on muistissa tavukoodi- muodossa, johon se on saatu kääntämällä .java tiedosto (javac). o 2p, kun tarpeeksi (2 kohtaa) oikein, 0p muuten o 'konekielinen' tulkittu tarkoittamaan ajoalustan konekieltä 3. b. [2 p] Miten ohjelman MyProg suoritus lopulta tapahtuu suoritusaikana? Minkälainen käyttöjärjestelmän tuntema prosessi (tai prosessit) on suoritusvuorossa ohjelman MyProg suoritusaikana? Tulkki suorittaa MyProg'ia lukemalla ohjelman tavukoodia käsky kerrallaan ja suorittamalla käskyn vaatimat operaatiot emuloidussa ympäristössä. (1p) Käyttöjärjestelmässä on MyProg'n suoritusaikana tulkin prosessi sekä mahdollisesti prosessi, joka hoitaa roskien keruun (muistinhallinta Javassa). (1p) o jos väitetty, että MyProg'lla oma prosessi -> 1p miinusta 3. c. [2 p] Jotkut väittävät Java-ohjelmien suorittamisen tulkitsemalla olevan hitaampaa kuin vastaavien C-kielisten käännettyjen ohjelmien suorittamisen kyseisessä ympäristössä. Anna hyvin perusteltu vastaus tähän väitteeseen. Väite pitää paikkansa, koska 0. C-kieli on yleensä käännettynä ajoalustan konekielelle 1. Javan tavukoodin yksittäiset käskyt eivät tee oleellisesti sen monimutkaisempia operaatioita kuin useimpien (muiden) prosessorienkaan konekieliset käskyt. 2. Jokaisen käskyn yhteydessä Java kielistä ohjelmaa ajava tulkki joutuu lukemaan tavukoodisen käskyn (ainakin yksi ajoympäristön konekäsky) ja suorittamaan sen (monia ajoympäristön käskyjä; tulkinta, suoritus, jne.), lisäksi tulkki ei voi juurikaan hyödyntää rekisterejä tavukoodisen ohjelman dataa käsiteltäessä vaan yleensä ottaen kaikki muuttujat sijaitsevat muistissa (emuloitu ajoympäristö). 3. Javan monet operaatiot ovat lukuisten tarkistusten (esim. taulukkojen käsittely) vuoksi hitaampia kuin C-kielen vastaavat operaatiot. o kunhan on osoitettu tulkinnan ja natiivisuorituksen eron tuntemus -> 2p 3. d. [2 p] Miten tilanne kohtiin (a) ja (b) muuttuu, jos käytetään JIT-käännöstä? JIT-käännöstä käytettäessä saatetaan edelleen käyttää tulkkia apuna, joten sitä koskevat huomiot pätevät tähänkin. Suoritusaikana MyProg'n esitysmuoto on pääasiassa JIT-kääntäjän luoma natiivikielinen versio suoritettavasta metodista*. Myös luokan alkuperäinen tavukoodi säilyy muistissa. Suoritus tapahtuu kuten em. pääasiassa natiivikonekielisiä metodeja suorittaen. Kun metodia kutsutaan, JIT-kääntäjä kääntää metodin koodin natiivikonekielelle ja siirtää suorituksen jollain mekanismilla käännettyyn koodiin. Käyttöjärjestelmässä on prosesseina tulkin lisäksi MyProg'n natiivikonekielinen osuus ja luultavasti myös JIT-kääntäjä. * myös luokka käy o esitysmuoto 1p, prosessit 1p o 1p myös JIT toiminnan selostuksesta vaikka em. ei olisikaan kovin hyvin 3. e. [2 p] Miten tilanne kohtiin (a) ja (b) muuttuu, jos käytetään Java suoritinta? Käytettäessä Java suoritinta on tavukoodi suorittimen konekieltä, joten MyProg'n tavukoodiksi käännetty versio on ohjelman esitysmuoto sitä suoritettaessa. Ennen suorituksen alkua käyttöjärjestelmä lataa ohjelman muistiin. MyProg'n suoritus tapahtuu siten, että prosessori lukee muistista MyProg'n käskyjä ja suorittaa ne, eli täsmälleen samaan tapaan kuin missä vain natiiviympäristössä tapahtuva natiivikielisen ohjelman suoritus. MyProg'n suorituksen aikana on suoritusvuorossa tietenkin ainoastaan MyProg itse. o ei tulkkiprosessia 2p 3. f. [2 p] Miten kohtien (a) ja (b) tilanne eroaa siitä, että ohjelmasi olisi ollut C-kielinen ja se suoritettaisiin "tavalliseen tapaan"? C-kielisen ohjelman suoritus tapahtuu kuten kohdan (e) kohdalla. Ei siis tarvita tulkkeja eikä mitään muutakaan käännösmekanismia ohjelmakoodin ja prosessorin välillä. o ei tulkkiprosessia, käännös alustan konekielelle 2p =============================================================================== Tehtävä 4 Arvostelu: Heikki Lindholm =============================================================================== ref. luento 4 4. [12 p] Aktivointitietue. TTK-91 koneen aliohjelmat toteutetaan aktivointitietueiden avulla. (Noudata luennolla ja harjoituksissa esitettyjen suositusten mukaista aliohjelmien (funktioiden) toteutustapaa ja kutsumeka- nismia. Käytä valaisevaa ja kattavaa esimerkkiä kaikkien kohtien vastauksissa.) o ei miinuksia vaikka esimerkki(t) puuttui, jos vastaukset olivat selkeitä ja sisälsivät kaiken vaaditun 4. a. [3 p] Määrittele käsite aktivointitietue. Mitä tietoja ja kenttiä aktivointitietueessa on? Aktivointitietue (t. aliohjelman ympäristö) käsittää yhteen aliohjelmakutsuun liittyvät tiedot. Aktivointitietue on (luentokalvon 9 mukaan) seuraavanlainen: paluuarvo (aliohjelma tallentaa tuloksensa tähän) parametrit (aliohjelman parametrien arvot) vanha PC (paluuosoite) vanha FP (kutsukohdan aktivointitietue) paikalliset muuttujat (aliohjelman paikallisten muuttujain tilanvaraus) tallennetut rekisterit (aliohjelman alussa tallennetut rekisterien arvot) o määritelmä 1p o kentät+selitykset 2p o ei miinuksia, jos paikalliset muuttujat puuttuivat o 1 pinna pois, jos rekisterien tallennusta ei huomioitu(, mutta ei lopuista kohdista ((d), (e))) 4. b. [2 p] Mitkä aktivointitietueen kentistä ovat käytössä aliohjelman varsinaisen rungon (body) aikana ja miten niihin viitataan? Selvästi ainakin paikalliset muuttujat ovat käytössä aliohjelman rungon aikana, koska ne on varattu sitä varten. Lopuista tiedoista aliohjelman rungossa käytetään luultavasti ainakin parametreja sekä paluuarvoa, tosin parametrien lukeminen ja paluuarvon kirjoittaminen voitaneen myös lukea "vakiotoimenpiteisiin", jotka tehdään aina aliohjelman alussa/lopussa. Kaikkiin aktivointitietueen alkioihin viitataan käyttäen FP:iin suhteellista viittausta, esimerkkiksi LOAD R1, X(FP). o kentät 1p o viittaustapa 1p 4. c. [2 p] Määrittele käsite aktivointitietuepino. Aktivointitietueet varataan dynaamisesti pinosta (SP). Aktivointitietuepino on varatuista aktivointitietueista koostuva pino(n osa). o 2p pino aktivointitietueita riittää o 2p riittää myös jollain tavalla selostettuna, että aktivointitietue on pinossa 4. d. [3 p] Miten ja milloin aktivointitietuepinoon talletetaan uusi aktivointitietue? Montako konekäskyä tähän kuluu? Aktivointitietuepinoon talletetaan uusi aktivointitietue aliohjelmakutsun yhteydessä. Aktivointitietueen luonti alkaa hieman ennen varsinaista CALL käskyä ja jatkuu vielä aliohjelman puolellakin. Luonti tapahtuu pääasiassa PUSH SP, xxx -tyyppisillä käskyillä. Lisäksi CALL-käsky luo osansa aktivointitietueesta (PC:n ja FP:n tallennus). Aliohjelmakutsua ennen varataan tilaa paluuarvolle (ainakin yksi PUSH- käsky) ja parametreille (parametrien määrän verran PUSH-käskyjä), jonka jälkeen kutsutaan aliohjelmaa CALL-käskyllä. Aliohjelman puolella varataan tilaa paikallisille muuttujille (muuttujien tilantarpeen verran PUSH-käskyjä) ja tallennetaan rekisterien vanhat arvot (niin monta PUSH:ia kuin rekistereitä tarvitsee tallettaa - tai yksi PUSHR). Aktivointitietueen luontiin kuluu vähintään 1 konekäsky (CALL) ja enintään n käskyä riippuen em. varaustarpeista. o 3p: milloin, mitä (PUSH, CALL) ja hyvin selostettu (a)-kohta 4. e. [2 p] Miten ja milloin aktivointitietuepinosta poistetaan aktivointitietue? Montako konekäskyä tähän kuluu? Aktivointitietuepinosta poistetaan tietue aliohjelmasta poistumisen yhteydessä. Tietuetta aletaan poistaa jo aliohjelman puolella ja poisto jatkuu mahdollisesti aliohjelman EXIT-käskyn jälkeenkin. Aktivointitietue poistetaan pinosta pääasiassa POP-käskyjen avulla, tosin jotkut POP:sta voitaisiin korvata suoralla SP:n manipuloinnilla. Lisäksi EXIT-käsky poistaa aktivointitietueesta osansa (ainakin PC:n ja FP:n). Poisto tapahtuu edelliseen kohtaan verrattuna käänteisesti: Ensin aliohjelman puolella poistetaan aktivointitietueesta tallennetut rekisterien arvot (palautetaan rekistereihin), sitten vapautetaan paikallisille muuttujille varattu tila. Tämän jälkeen EXIT-käsky vapauttaa pinosta PC:lle ja FP:lle varatun tilan. Lisäksi EXIT-käskyn yhteydessä yleensä vapautetaan ennen aliohjelmakutsua parametreille varattu tila. EXIT-käskyn jälkeen - aliohjelman kutsukohdan jälkeisessä koodissa - vapautetaan paluuarvoille varattu tila. o 2p milloin, mitä (EXIT)