Kurssikuulustelu 14.2.2002, arvosteluperusteet Tehtävä 1. (Arvostelija: Kimmo Airamaa) a) Prosessin suoritusvuoro on ohi, esim. aikaviipale täyttynyt. [2p] b) Prosessi on valmis suoritukseen ja vuorottaja valitsee sen. [2p] c) prosessi siirretään odottamaan keskeytystä (I/O?) [2p] d) esim. I/O valmis, prosessi ei enää odota tapahtumaa [2p] e) Hyvin korkean prioriteetin prosessi tulee järjestelmään. [1p] f) waiting-tilassa odotetaan jotain ulkoista tapahtumaa. Realistinen esimerkki tilanteesta. [1p] g) normaali tapahtuma, kun uusi prosessi tulee järjestelmään [1p] h) unixin kill / windowsin taskmanager-end [1p] ----------------------------------------------------------------------- Tehtävä 2. (Arvostelija: Heikki Lindholm) ref. Häkkinen s.39-s.42 luento 5 2. [12 p] Konekäskyjen suoritus. 2. a. [2 p] Miten konekäsky "ADD R2, VarX(R1)" esitetään muistissa? Lyhyesti: 32-bittisenä lukuna. Tai tarkemmin: lukuna, jossa eniten merkitsevät kahdeksan bittiä kuvaa käskykoodia, seuraavat kolme bittiä käskyn ensimmäistä operandia, seuraavat kaksi bittiä käskyn muistinoutojen (osoitusmoodi) määrää, seuraavat kolme bittiä toisen operandin indeksirekisteriä ja loput 16 bittiä toisen operandin osoiteosaa (vakio-osaa). Käskystä "ADD R2, VarX(R1)" siis ADD on käskykoodi, R2 on ensimmäinen operandi ja VarX(R1) määrittelee indeksoidun toisen operandin, jossa indeksinä käytetään rekisteriä R1 ja osoiteosana symbolin VarX arvoa. o lyhyt vastaus riittää (2p) # oli yllättävän vaikea kysymys. TÄYSIN käsittämättömiä satuiluja monilla 2. b. [4 p] Mitä suorittimella tapahtuu konekäskyä "ADD R2, VarX(R1)" suoritettaessa käskyn suoritussyklin eri vaiheissa? 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 1. käsky haetaan muistista (-> IR), PC:tä kasvatetaan o PC -> MAR o väylä: lue o (ADD R2, VarX(R1)) -> MBR o MBR -> IR 2. käsky tulkitaan o puretaan osiin -käskykoodi ADD -1. operandi R2 -osoitusmuoto indeksoitu () -2. operandin indeksirekisteri R1 ja osoiteosa VarX o lasketaan tehollinen muistiosoite, joka tässä tapauksessa on VarX+R1. Tulos siirretään TR:iin. 3. käsky suoritetaan o käskyyn liittyy yksi muistihaku (indeksoitu osoitus) - VarX+R1 = TR -> MAR - väylä: lue - (osoitteen VarX+R1 sisältö) -> MBR - MBR -> TR o ALU:iin syötetään operaatioksi ADD ja operandeiksi R2:n arvo ja luku, joka saatiin äskeisen muistihaun tuloksena (TR), ja ohjataan ALU:n tulos rekisteriin R2. 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) 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 # tässä oli, kuten yleensäkin, kellolaite/aikaviipalekeskeytys luokiteltu melkein kaikilla omaksi tyypikseen. Se on siis prosessorin ulkopuolisen komponentin aiheuttama keskeytys siinä missä vaikkapa näppäimistönkin aiheuttama keskeytys 2. d. [3 p] Mitä keskeytyksiä voi laitteistossa tapahtua konekäskyn "ADD R2, VarX(R1)" suorituksen aikana? Viitaten edellisen tehtävän keskeytystyyppeihin, voi sattua kahden tyyppisiä keskeytyksiä: 1. Käskyn aiheuttamat virhetilanteet 3. Prosessorin ulkopuolisten komponenttien aiheuttamat keskeytykset. Kyseisen käskyn tapauksessa voi siis tietenkin sattua mikä vain prosessorin ulkopuolelta tuleva keskeytys (olettaen, että käskyä suoritetaan käyttäjätilassa, keskeytykset sallittuina). Lisäksi käskyn suoritus voi aiheuttaa virhetilanteen, jos tulee aritmeettinen ylivuoto. Jos käskyn 2:n operandin tuottama muistiosoite on liian suuri (> LIMIT) tai virtuaalimuistijärjestelmässä poistettu fyysisestä muistista saattaa käskyn suoritus aiheuttaa vastaavasti muistivirhe tai sivunpuutos keskeytyksen. o 3 listattua järkevää keskeytystä riittää (3p) Ref. Häkkinen, luku 6 luento 10 luento 8 (ladatun ohjelman esitysmuoto) luento 11 (Java) ----------------------------------------------------------------------- Tehtävä 3. (Arvostelija: Heikki Lindholm) 3. [12 p] Käännös, linkitys ja lataus. Oletetaan aluksi, että kyse on "tavallisella" ohjelmointikielellä (kuten esim. C tai Pascal) kirjoitetusta ohjelmasta. 3. a. [3 p] Mitä tapahtuu ohjelmaa käännettäessä? Mikä on käännetyn ohjelman esitysmuoto? Ohjelmaa käännettäessä kääntäjä muuttaa ohjelman käännösyksiköt korkeamman tason ohjelmointikielisestä esityksestä (myös symbolinen konekieli on tällainen) konekieliseen esitysmuotoon. Käännöksessä yksikössä käytetyistä symboleista kerätään tietoa linkitystä varten (uudelleensijoitustiedot, viittaukset toisiin käännösyksiköihin/kirjastorutiineihin). Yksikön sisäiset viittaukset muutetaan yksikön sisäisiksi osoitteiksi (lineaarinen nollasta alkava osoiteavaruus). Käännetyn ohjelman esitysmuoto on konekielinen objektimoduuli. o käännös 2p o esitysmuoto 1p 3. b. [3 p] Mitä tapahtuu ohjelmaa linkitettäessä? Mikä on linkitetyn ohjelman esitysmuoto? Ohjelmaa linkitettäessä linkittäjä yhdistää ohjelman käännösyksiköt yhdeksi ajomoduuliksi (yhteen osoiteavaruuteen). Linkityksessä käännösyksiköille lasketaan alkuosoite lopullisessa ajomoduulissa ja korjataan kaikki yksiköiden sisäiset viitteet vastaamaan uutta tilannetta (yksikön uutta alkuosoitetta). Lisäksi käännösyksiköiden väliset viittaukset selvitetään yhteisessä osoiteavaruudessa ja asetetaan osoitteet sen mukaisiksi. Linkitetyn ohjelman esitysmuoto on (edelleen konekielinen) ajomoduuli. o linkitys 2p o esitysmuoto 1p 3. c. [3 p] Mitä tapahtuu ohjelmaa ladattaessa? Mikä on ladatun ohjelman esitysmuoto? (melko suoraan luennosta 10) Ohjelmaa ladattaessa ajomoduulista luodaan suorituskelpoinen prosessi. Prosessin koodi- ja tarvittavat data-alueet ladataan muistiin ja prosessi siirretään ready-to-run -jonoon. Prosessin saadessa suoritusvuoron MMU ja laiterekisterit ladataan PCB:stä. Ladatun ohjelman esitysmuoto on järjestelmässä oleva prosessi. o lataus 2p o esitysmuoto 1p 3. d. [3 p] Miten kohtien a-c vastauksesi muuttuisivat, jos kyseessä olisikin Java-kielinen ohjelma? Jos Java-kielinen ohjelma käännetään suoraan konekieliseksi (eikä tavukoodiksi), vastaukset eivät muutu. Tavallisessa tapauksessa: a. käännös tapahtuu oleellisesti samaan tapaan, mutta objektimoduuli on aina Javan tavukoodia. b. Ennen latausta/ajoa tapahtuvaa linkitystä ei Javassa tehdä. Latauksen/ajon yhteydessä tehtävä linkitys voidaan käytetyn JVM:n toteutuksesta riippuen suorittaa loppuun joko ohjelmaa ladattaessa tai sitten vasta kun symbolia käytetään (esim. metodikutsu) c. Latauksen yhteydessä JVM pyytää ClassLoaderilta pyydettyä luokkaa (esim. java *MyProg*), jonka ClassLoader sitten lataa. Sen jälkeen luokka linkitetään (ainakin osittain, ei välttämättä loppuun asti) ja ajetaan JVM:n toimesta (tulkinta, JIT). Esitysmuoto on ajoalustan muistissa oleva JVM:n tietorakenne (Class luokan ilmentymä(t)). o löyhä arvostelu - ei tästä ainakaan pelkästään luentokalvojen perusteella paljon selvää saisi... ----------------------------------------------------------------------- Tehtävä 4. (Arvostelija: Kimmo Airamaa) a) * Indeksointi vakiolla 6 (rekisterissä), tulos ladataan johonkin rekisteriin [1p] * Ri, tulostus (OUT Ri, =CRT) [1p] b) * Muuttuja I rekisteriin, indeksointi, [1p] * osoitteen selvittäminen (=Taulu(Ri)), tulostus [1p] c) Talletetaan X:n arvo Taulu(I):n osoittamaan muistipaikkaan. * LOAD Ri, X LOAD Rj, I (tai vastaavat operaatiot) [1p] * STORE Ri, Taulu(Rj) [1p] d) * Arr osoite taulun alkukohtaan (=Taulu), Dim = 10[1p] * Parametrit pinoon [1p] * aliohjelmakutsu [1p] ei aliohjelmaa itse, mutta sen tekemisestä ei mene pisteitä e) Tehtävässä tehtävä selvästi aliohjelmana, muutoin 0p. * Käytettävien rekisterien arvot on otettava talteen aliohjelmassa. [1p] * Parametrit pinosta indeksoimalla. [osattava tehdä, muuten -1p] * 2345678 on liian iso käskyn vakio-osaan. Käytettävä DC/DS [1p] (Sijoitus mieluiten silmukassa) * Poistuminen aliohjelmasta oikein. [1p]