Tietokoneen toiminta, kurssikuulustelun 18.12.2000 arvosteluperusteet ===================================================================== ---------------------------------------------------------------------- Tehtävä 1 (Arvostelija: Raine Kauppinen) ========= Luento 1, kalvot 35-36 (muistihierarkia); Luento 5, kalvot 5-14 (käskyjen suoritussykli); Luento 7, kalvot 16-21 (välimuisti); Luento 9, kalvot 1-23 (muistihierarkia ja virtuaalimuisti); Laskuharjoitus 3, tehtävä 4 (muistiviitteet); [Laskuharjoitus 4, tehtävä 2 (välimuisti); Laskuharjoitus 5, tehtävä 1 (virtuaalimuisti)]. a) - rekisteri - välimuisti - keskusmuisti - levymuisti, esim. kiintolevy Pisteytys (yhteensä 4p): - 1p / taso b) - rekisteri - esim. LOAD R1, R2 - viittaus (R2:n osalta) toisen operandin noutovaiheessa - data on rekisterissä, joka osoitettu käskyn 2. operandissa - välimuisti - esim. LOAD R1, LUKU - viittaus (muistipaikan LUKU osalta) toisen operandin noutovaiheessa - muistipaikan LUKU sisältö löytyy välimuistista, kun siihen on viittattu vähän aikaa sitten; tällöin ennen keskusmuistinoutoa havitaan datan olevan välimuistista, jolloin keskusmuistinoutoa ei tehdä; viittaus ei kohdistu rekisteriin, koska toinen operandi osoittaa muistipaikkaan - keskusmuisti - esim. LOAD R1, LUKU - viittaus (muistipaikan LUKU osalta) toisen operandin noutovaiheessa - muistipaikan LUKU sisältöä ei löydy välimuistista, kun siihen ei ole viittattu aikaisemmin; tällöin välimuistihaku tuottaa hudin, joten data noudetaan keskusmuistista viittaus ei kohdistu levymuistiin, kun muistipaikan sisältämä sivu sijaitsee (virtuaalimuistia käyttäessä) keskusmuistissa, eikä levyllä - levymuisti (kiintolevy) - esim. LOAD R1, LUKU - viittaus (muistipaikan LUKU osalta) toisen operandin noutovaiheessa - muistipaikan LUKU sisältöä ei löydy keskusmuistista, kun ko. muistipaikan sisältävä sivu on (virtuaalimuistia käytettäessä) sijoitettu levylle; tämä havaitaan sivutaulun avulla; aiheutuu sivunpuutoskeskeytys, jonka seurauksena kyseinen sivu (ja samalla myös muistipaikan sisältö) luetaan levyltä muistiin Pisteytys (yhteensä 6p): - 1.5p / taso: - esimerkki 0.5p - konekäskyn suorituksen kohta 0.5 p - perustelu tasolle kuulumisesta 0.5p c) Viitattavan tiedon ollessa konekäsky, käy esimerkiksi mikä tahansa suoritettava käsky. Rekisterin tapauksessa viittaus tapahtuu konekäskyn tulkintavaiheessa, muissa tapauksissa käskyn noutovaiheessa. Käsiteltävä konekäsky on haettu rekisteriin IR, joten sitä tulkittaessa käytetään ko. rekisteriä. Muiden tasojen kohdalla b-kohdassa mainittujen esimerkkien perustelut soveltuvat myös tähän kohtaa, kun oletetaan, että esimerkkinä käytetty käsky LOAD R1, LUKU on PC:n osoittama käsky, jota ollaan noutamassa. Pisteytys (yhteensä 2p): - kohta osoittautui varsin vaikeaksi, sillä esimerkkivastauksessa esitetyllä tavalla oli kohtaa käsitelty vain yhdessä vastauksessa; muut vastaukset olivat enemmän tai vähemmän puutteellisia; hyvin usein kohtaan oli myös jätetty kokonaan vastaamatta - 1 pisteen sai, jos oli käsitellyt vastauksessa hyppyjä nimettyihin muistiosoitteisiin (tällöin itse hyppykäsky viittaa muistiosoitteeseen, joten viitattava tieto ei varsinaisesti ole konekäsky) tai jos oli rekisteri-kohdassa maininnut IR:n ja käskyn tulkinnan - perustelemattomat "samat kuin edellä" vastaukset jäivät pisteittä, koska tilanteissa on eroja, jotka vaativat esimerkkivastauksen kaltaisia perusteluja (mm. rekisteri- tapaus on erilainen ja viittaus tapahtuu eri vaiheessa konekäskyn suoritusta) Pistejakauma: 0p: 2 ** 1p: 0 2p: 0 3p: 0 4p: 3 *** 5p: 2 ** 6p: 8 ******** 7p: 10 ********** 8p: 11 *********** 9p: 8 ******** 10p: 3 *** 11p: 5 ***** 12p: 1 * Keskiarvo 7.5 pistettä. ---------------------------------------------------------------------- Tehtävä 2 (Arvostelija: Raine Kauppinen) ========= Luento 8, kalvot 1-25; Laskuharjoitus 4, tehtävät 3 ja 4. a) I/O:n toteuttamiseen osallistuvat seuraavat prosessit ja laitteet: - MyProg (käyttäjätason prosessi), joka pyytää I/O:ta ReadFile- kirjastorutiinia käyttäen - laiteajuri (käyttöjärjestelmän prosessi), joka huolehtii siirron hallinnasta käyttöjärjestelmän osalta - laiteohjain (fyysisen laiteohjainkortin suorittama "prosessi"), joka ohjaa levyltä lukua laitteiston tasolla - levy (fyysinen laite), joka suorittaa fyysisen levyltä luvun Pisteytys (yhteensä 4p): - 1p / osallistuja b) Kohdan ratkaisu riippuu oletetusta I/O:n toteutustavasta. Yksinkertaisimman vastauksen saanee aikaan olettamalla, että käytössä on keskeyttävä I/O ja että laiteohjain kykenee DMA-siirtoon. Lisäksi on luontevaa olettaa, että laiteajuri on oma käyttöjärjestelmäprosessinsa, kuten kurssilla on koko ajan tehty. Muillakin oletuksilla (esimerkiksi käytössä suora I/O, laiteajuri toteutettu käyttöjärjestelmässä aliohjelmana) tehtävän pystyy toki ratkaisemaan. Tehtyjen oletusten mukainen tapahtumasarja: - käyttäjäprosessin (MyProg) käyttämä ReadFile-kirjastorutiini lähettää käyttöjärjestelmän laiteajurille lukupyynnön, samalla käyttäjätason prosessi siirtyy tilasta suorittaa tilaan odottava odottamaan siirron valmistumista - laiteajuri siirtyy tilaan suorittaa ja lähettää lukuun tarvittavat tiedot laiteohjaimelle (lukupyyntö, luettavan datan määrä, minne luettu data kirjoitetaan) ja siirtyy tilaan odottaa odottamaan laiteohjaimelta tulevaa keskeytystä, joka kertoo siirron valmistumisesta (tai epäonnistumisesta) - laiteohjain suorittaa pyydetyn siirron, eli ohjaa levyltä luvun ja luetun datan kirjoittamisen halutulle muistialueelle; kun siirto on valmis laiteohjain aiheuttaa keskeytyksen, joka kertoo, että siirto on valmis, jolloin laiteajuriprosessi siiryy tilaan odottaa suoritusta - kun laiteajuriprosessi saa prosessoriaikaa (siirtyy tilasta odottaa suoritusta tilaan suorittaa), se havaitsee siirron valmistuneen ja aiheuttaa keskeytyksen, jonka seurauksena käyttäjätason prosessi (MyProg) siirretään tilasta odottava tilaa odottaa suoritusta - käyttäjätason prosessi (MyProg) palaa rutiinista ReadFile ja jatkaa suoritusta, kun se saa seuraavan kerran prosessoriaikaa Pisteytys (yhteensä 8p): - suorituksessa olevat prosessit tai laitteet 4p (käyttäjäprosessi -> laiteajuri -> laiteohjain(+levy) -> laiteajuri -> käyttäjäprosessi) - tilasiirtymän aiheuttavat tapahtumat + odotettavat tapahtumat 4p (palvelupyyntö -> laiteajuri pyytää siirtoa laiteohjaimelta -> laiteohjain ilmoittaa siirron valmistumisesta -> laiteajuri ilmoittaa siirron valmistumisesta) Kuten esimerkkivastauksesta voi huomata, ei tehtävässä vaadittu kovinkaan yksityiskohtaista tietoa I/O:n toteuttamisesta, vaan (kurssilla esitellyt) hyvin yleiset periaatteet riittivät. Aihetta käsitellään tarkemmin Käyttöjärjestelmät-kursseilla. Pistejakauma: 0p: 8 ******** 1p: 1 * 2p: 5 ***** 3p: 4 **** 4p: 4 **** 5p: 4 **** 6p: 2 ** 7p: 1 * 8p: 6 ****** 9p: 5 ***** 10p: 6 ****** 11p: 4 **** 12p: 3 *** Keskiarvo 5.9 pistettä. ---------------------------------------------------------------------- Tehtävä 3 (Arvostelija: Raine Kauppinen) ========= Luento 11, kalvot 1-16; Laskuharjoitus 6, tehtävä 1. Alla on esitetty kurssilla käsitellyt neljä tapaa suorittaa Java- ohjelmia sekä asiat, joita kustakin tavasta tuli mainita. Vastauksessa riitti käsitellä kolmea tapaa. - Java-tulkinta - yleisidea: tulkkaus - konekäskytason suoritus: emuloidaan byte-koodia käsky kerrallaan - ero muihin suoritustapoihin: ei käännöstä - edut ja haitat: hidasta, mutta joustavaa - Käännös natiivikoneelle - yleisidea: käännös - konekäskytason suoritus: käännetään tavukoodi natiivikoneen konekielelle, jota suoritetaan normaaliin tapaan - ero muihin suoritustapoihin: ei lainkaan emulointia - edut ja haitat: suoritus nopeaa, mutta joustavuus katoaa - Just-In-Time -käännös (JIT) - yleisidea: käännös luokka kerrallaan - konekäskytason suoritus: emuloidaan byte-koodia, käännetään luokka juuri ennen sen metodin kutsua - ero muihin suoritustapoihin: dynaaminen käännös luokka kerrallaan - edut ja haitat: luokan suoritus nopeaa ensimmäisen kutsun jälkeen, mutta vaatii paljon muistia - Java-suoritin - yleisidea: tavukoodia voidaan suorittaa sellaisenaan - konekäskytason suoritus: kaikki 226 JVM-konekäskyä olemassa (jotkut toteutettu aliohjelmilla) + 115 muuta konekäskyä (käyttöjärjestelmän ja muiden ohjelmointikielten toteutus) - ero muihin suoritustapoihin: tavukoodi on suorittimen konekieli - edut ja haitat: Java-ohjelmat nopeita suorittaa, muilla kielillä toteutetut ohjelmat joudutaan kääntämään tai tulkitsemaan Bonuskysymys: Crusoe-suorittimen toteutus muistuttaa Javan tulkintaa JIT-käännöksen kanssa, koska suoritin emuloi x86:n konekieltä ottamalla kerralla käsittelyyn useita x86-käskyä yhtä aikaa (ja tulkitsemalla esimerkiksi keskeytystilanteessa käsky kerrallaan). Pisteytys (yhteensä 12p): - 4p / käsitelty tapa: - yleisidea, konekäskytason suoritus, vertailu muihin suoritustapoihin, olennaiset edut ja haitat - bonuskysymyksen perusteltu vastaus 1p Pistejakauma: 0p: 5 ***** 1p: 1 * 2p: 2 ** 3p: 2 ** 4p: 5 ***** 5p: 4 **** 6p: 7 ******* 7p: 1 * 8p: 6 ****** 9p: 8 ******** 10p: 1 * 11p: 4 **** 12p: 6 ****** 13p: 1 * Keskiarvo 6.8 pistettä. ---------------------------------------------------------------------- Tehtävä 4 (Arvostelija: Teemu Kerola) ========= Luento 3 kalvot 8 & 21, Luento 4 LH 3 teht 2, LH 4 teht 5 Häkkinen luvut 5.7-8, 6.2 a) Tee tilanvaraus 10 alkiolle a 3 sanaa, eli 30 sanaa yhteensä. Anna tekstuaaliset määrittelyt tietueen koolle ja eri kenttien suhteellisille sijainnille tietueen sisällä. Person DS 30 # 10 records, each 3 words (DS 10 -> -2p) PSize EQU 3 # record size (not necessary) Age EQU 0 # field addr relative to record address ShoeSize EQU 1 Height EQU 2 # (none of these -> -2p) Jotkut olivat ymmärtäneet tehtävän siten, että Person sisälsi vain pointterit eri tietueisiin (Person DS 10). Tämakin on OK, jos myös tietueiden tilanvaraus (Persons DS 30) on huomioitu (-1p). Taulukon Person pointterit tulisi sitten alustaa oikein, mutta sitähän ei tässä pyydetty. PSize, Age, ShoeSize ja Height voivat olla myös DC määrittelyillä; jatkossa niiden käyttö3 muistiosoitteina (ilman "=" merkkiä) b) Laske ensin k.o. kentän osoite taulukon Person sisällä (-2p) ja sitten tee sijoitus. (-2p) LOAD R1, I # index for record I MUL R1, =PSize # rel. start address of record I ADD R1, =ShoeSize # rel. address of field ShoeSize # in I'th record in array Person LOAD R2, ShSize STORE R2, Person(R2) c) Määrittele parametrien suhteeliset osoitteet aktivointitietueessa. Aliohjelmassa talleta työrekisterit, laske k.o. kentän osoite ensin taulukon Arr sisällä ja sitten absoluuttisesti, tee sijoitus, palauta työrekisterit, palauta kontrolli. #################################################################### # SetHeight (Arr, k, val) - set field Height in K'th record # in table Arr into value val # parPArr EQU -4 # call-by-reference, 10 records each 3 words parK EQU -3 # call-by-value, index of record parVal EQU -2 # call-by-value, value to be stored (-1p) SetHeight PUSHR SP # save all working regs (-1p) # compute address for (-2p) # field Height in K'th record in Arr LOAD R1, parK(FP) # index for K'th record MUL R1, =PSize # rel. start address # of K'th record in array ParPArr ADD R1, =Height # rel. start address ofz field Height # in K'th record in array ParPArr ADD R1, parPArr(FP) # abs. start address of field Height # in K'th record in array ParPArr # move data (-1p) LOAD R2, parVal(FP) # get value STORE R2, @R1 # store it to field pointed by R1 POPR SP # restore working regs (-1p) EXIT SP,=3 # pop 3 params from stack, return (-1p) Pistejakauma: pist: 0 1 2 3 4 5 6 7 8 9 10 11 12 lkm: 10 0 3 3 2 2 5 1 3 3 12 6 3 Keskiarvo 6.5 pistettä (8.0 pistettä, kun nollia ei huomioida) ----------------------------------------------------------------------