Arvosteluperusteet, kurssikuulustelu 13.5.2002 ======================================================================== Tehtävä 1 (Päivi Kuuppelomäki) ======================================================================== a) Desimaalilukujen +43 ja -17 esitys pyydettiin 4 eri tavalla. Kustakin oikeasta vastauksesta sai 1/2 pistettä ja yhteensä siis 4 pistettä jos kaikki kohdat olivat oikein. Kanden komplementti esityksessä oli yllättäviä virheitä desimaaliluvun +43 kohdalla eli oli annettukin -43 esitys. b) oikeasta vastauksesta sai yhden pisteen c) oikeasta vastauksesta sai yhden pisteen Jollain oli mennyt heksadesimaali- ja oktaalijärjestelmä sekaisin. d) Kokonaisosan muunnosta sai yhden pisteen ja desimaaliosan muunnosta toisen pisteen e) liukuluvun esitysmuoto selityksestä sai täydet kaksi pistettä, jos kentät ja peritaate oli selitetty oikein. Erikoistapauksia ei tarvinnut osata selittää. f) Jos oli osannut muuntaa desimaaliluvun binääriluvuksi sai yhden pisteen ja toisen pisteen jos vielä IEEE:n liukulukustandardin mukainen esitys oli oikein. ======================================================================== Tehtävä 2 (Harri Pulli) ======================================================================== 2. [12p] Suoritin ja prosessi (prosessor and process) a. [3p] Piirrä suorittimen suoritusaikaisista tiloista (processor state) tilakaavio. Kerro tilojen nimet ja piirrä niiden väliset tilasiirtymät. Luentomateriaalin luku 5: Suorittimen tilat Käyttäjätila (user mode) ja etuoikeutettu tila (kernel mode, priviledged mode) user mode <-> kernel mode Pisteytyksestä: Kaavio, nimet, siirtymät -> 3p. b. [3p] Miten ja milloin suorittimen tila muuttuu? Käsittele kukin mahdollinen tilasiirtymä erikseen esimerkkitapahtuman avulla. Käyttäjätilasta -> etuoikeutettuun tilaan: - Laitteisto siirtää suorittimen etuoikeutettuun tilaan keskeytyksen alkutoimenpiteiden aikana. - Keskeytys, poikkeus tai KJ:n palvelupyyntö (SVC käsky) siirtää suorittimen etuoikeutettun tilaan - Esimerkki: Ulkoinen laite aiheuttaa keskeytyksen. CPU huomaa keskeytyksen suoritettuaan käskynloppuun. CPU siirtyy etuoikeutettuun tilaan. Etuoikeutetusta tilasta -> Käyttäjätilaan - Etuoikeutettu konekäsky "return from interrupt handler" esim. IRET (Pentium II) - Palattaessa keskeytyskäsittelijästä tai kun palvelupyyntö on suoritettu. - Esimerkki: Käsiteltyään ulkoisen laitteen keskeytyksen. Palataan keskeytystä edeltävään prosessin suoritukseen IRET käskyllä. Pisteytyksestä: Tärkeää oli vastata kumpaankin kysymykseen MITEN ja MILLOIN. Jos vastasi vain milloin kohtaan - 1 1/2p. c. [3p] Piirrä prosessin suoritusaikaisista tiloista (process state) tilakaavio. Kerro tilojen nimet ja piirrä niiden väliset tilasiirtmät. luonti -> Valmis suoritukseen <-> suorituksessa -> poistettu/tapettu ^ | ^ |--- odottaa <----| - - - - - - - -| Tai initiated, ready to run, runnning, waiting, terminated. Pisteytyksestä: Kaavio, siirtymät ja nimet -> 3p d. [3p] Miten ja milloin prosessin tila muuttuu? Käsittele kukin mahdollinen tilasiirtymä erikseen esimerkkitapahtuman avulla. Initiated -> ready - Äitiprosessi on tehnyt palvelupyynön, jolla uusi prosessi luodaan. Kun KJ on luonut prosessin tarvitsemat tietorakenteet, yms siirretään se ready jonoon. ready -> running - Vuorottaja valitsee suoritukseen uuden prosessin, kun edellinen prosessi siirtyy pois suorittimelta. - Esimerkki: Kellolaite keskeytys ilmoittaa edellisen prosessin aikaviipaleen loppuneen. Prosessi siirretään Ready jonoon. vuorottaja valitsee ready jonosta seuraavan prosessin. running -> ready - Kellolaite keskeytys ilmoittaa prosessin aikaviipaleen loppuneen. Prosessi siirretään Ready jonoon. vuorottaja valitsee ready jonosta seuraavan prosessin. running -> waiting - Prosessi suorittaa palvelupyynnön joka aiheuttaa prosessin suorituksen keskeytymisen. Palvelupyyntöä odottava prosessi siirretään waiting jonoon. - Esimerkki: Prosessi suorittaa palvelupyynnön: Levyltä lukupyyntö. waiting -> ready - Kun palvelupyyntö valmistuu (Keskeytys "ilmoittaa" esim. siirtopyynnön valmistuneen. KJ tutkiin odottavista prosesseista mikä odotti ko. tapahtumaa ja siirtää sen prosessin RR jonoon.) siirretään odottava prosessi ready jonoon. - Esimerkki: Levyltä lukupyyntö valmistuu. running -> terminated - Prosessi kutsuu Exit() - palvelupyyntöä. Pisteytyksestä: Kaikki siirtymät tuli kuvata. Yleisin virhe oli kuvata vain prosessin tilat eikä siirtymiä. ======================================================================== Tehtävä 3 (Mikko Rauhala) ======================================================================== a) Täydellinen suoritus sisältää oleelliset luentomateriaalissa mainitut käskysyklin osat: Käskyn nouto, tulkinta, muistinoudot, suoritus, poikkeuksien tarkistus. Osittaisia pisteitä osittaisesta ratkaisusta tai epäselvästä esityksestä. b) Käskynoudon hoito (MMU:n rekisterien käyttö hyvä mainita), käskyn tulkinta CU:ssa, epäsuoran osoituksen käyttö (pari muistiosoitusta lisää), ALU:n käskyttäminen suorittamaan vähennyslaskuoperaatio mainitulle rekisterille ja muistista noudetulle arvolle, tuloksen tallennus takaisin rekisteriin, tilarekisterin tarkistus. Ihan kaikkia detaljeja ei ole välttämättä tarvinnut mainita täysiin pisteisiin, mutta luonnollisesti pisteet tippuvat lineaarisesti yksityiskohtaisuuden vähentyessä. c) Oleellisin ero on Java-tavukoodin perustuminen pinoarkkitehtuuriin rekisteriarkkitehtuurin sijaan. Tästä on saanut 2-3 pistettä tarkkuudesta riippuen. Muista valideista detaljeista on saanut yleensä pisteen verran, esim. eroista käskykannan laajuus, vaikka käskyt ovatkin periaatteessa samaa yksinkertaisuusluokkaa. Suoritusaika-asioista harkinnanvaraisesti piste tulkinta- ja kääntökysymyksistä, ja esim. Java-suorittimen pino-optimoinnista. ======================================================================== Tehtävä 4 (Erkki Rautama) ======================================================================== a) Tämä oli suurimmalla osalla oikein. Pisteen saivat myös ne, jotka olivat sijoittaneet taulukon nimen T ja tunnuksen DS väärään järjestykseen. b) Suurimmat hankaluudet tuntuivat olevan parametrien käsittely ja osittain siihen liittyen viitteenä saadun taulukon käyttö. Pisteitä jaettiin niin, että parametrien oikea käsittely antoi 2p, aliohjelman toimintalogiikka 2p, ja viimeisen pisteen sai jos loputkin yksityiskohdat olivat kunnossa (rekistereiden talletus, ei suurempia syntaksivirheitä). Koodin optimointiin ei kiinnitetty huomiota. c) Tärkeää oli, että ennen aliohjelman kutsumista pinoon talletetaan oikeat parametrit ja tilaa paluuarvolle oikeassa järjestyksessä (tärkeää oli muistaa taulukon kohdalla sen osoitteen välittäminen) (2p). Aliohjelman kutsuminen ja paluuarvon käsittely toivat loput kaksi pistettä. d) Tämä kohta oli osattu hyvin. Parittomien ja parillisten taulukon arvojen erotteluun on ainakin kaksi tapaa, jakojäännösoperaatio MOD tai bittitason AND-operaatio. Jomman kumman selittäminen ja/tai b-kohdan koodiin tulevien muutosten esittely antoivat 2p. e) Lisäpisteen tai kaksi sai, mikäli aktivointitietuepinot olivat oikein piirretyt (hiukan riippuen toki b-kohdan ratkaisusta).