581305-6 Tietokoneen toiminta, 4 op, erilliskoe 11.9.2007   

Kirjoita jokaiseen vastauspaperiisi seuraavat tiedot: nimi ja nimikirjoitus, henkilötunnus tai opiskelijanumero, kurssin nimi ja sivunumero.
  1. [9 p] Konekäskyt.
    1. Mikä on konekäsky? Mikä on symbolinen konekäsky?
    2. Miten konekielisiä ohjelmia suoritetaan?
    3. Miten symbolisella konekielellä kirjoitettuja ohjelmia suoritetaan?
    4. Miten korkean tason ohjelmointikielellä kirjoitettuja ohjelmia suoritetaan?
      Miten Java-ohjelmien suoritus eroaa "tavallisilla" lohkorakenteisilla (esim. C, Fortran) kielillä kirjoitettujen ohjelmien suorituksesta?
       
  2. [9 p] Etuoikeutetut suoritustila (priviledged execution mode).
    1. Mitkä on (konekäskyjen) etuoikeutettu suoritustila? Mihin sitä tarvitaan?
    2. Miten etuoikeutettu suoritustila eroaa tavallisesta (user mode) suoritustilasta?
    3. Milloin ja miten suoritustila vaihtuu tavallisesta etuoikeutettuun?
    4. Milloin ja miten suoritustila vaihtuu etuoikeutetusta tavalliseen?
       
  3. [9 p] I/O:n toteutus. Käsitellään tässä käyttäjätason prosessia P, joka haluaa kirjoittaa 2048 tavun datasegmentin kovalevylle. Käytössä on epäsuoraa I/O:ta (indirect I/O) käyttävä toteutus. I/O:n toteutukseen osallistuu laiteajuriprosesi ja laiteohjainprosessi.
    1. Missä laitteiston osassa kukin prosessi on (suorittamassa koodiaan)?
    2. Mitä tarkoittaa käsite "muistiinkuvattu I/O" (memory-mapped I/O)? Mikä muu vaihtoehto I/O:n toteuttamiseen on olemassa?
    3. Miten ja milloin laiteohjain tietää, mitä sen pitää tehdä? Kuka antaa sille ohjeita ja miten?
    4. Miten ja milloin laiteajuri tietää, että laiteohjain on tehnyt sille annetun tehtävän?
    5. Miten ja milloin sovellus P tietää, että sen pyytämä I/O on tehty? Kuka kertoo sen P:lle ja miten?

       
  4. [9 p] Aliohjelmat ja funktiot. Aliohjelma Limits(Arr, n, big, small) palauttaa parametrina annetun n-alkioisen taulukon suurimman ja pienimmän alkioiden arvot ulostuloparametreissa big ja small. Limits() ei siis ole funktio. Esimerkiksi, jos parametrina olisi 4-alkioinen taulukko T={4, 6, 2, 8}, niin aliohjelmakutsusta Limits(T, 4, hi, lo) paluun jälkeen muuttujan hi arvo olisi 8 ja muuttujan lo arvo olisi 2. Parametri Arr on viiteparametri, n on kokonaislukuarvoinen arvoparametri, big ja small ovat kokonaislukuarvoisia viiteparametreja.
    1. Anna ttk-91 koneen symbolisella konekielellä käskyt, joilla aliohjelmaa Limits() käyttäen lasketaan ja tulostetaan globaalin (pääohjelmatasolla määritellyn) 40-alkioisen taulukon Salaries suurimman ja pienimmän alkion arvot.
    2. Muokataan aliohjelma Limits funktioksi fLimits(Arr, n): {big, small}, joka palauttaa siis arvonaan kaksi kokonaislukua (kyseisen taulukon suurimman ja pienimmän alkion arvot). Esimerkiksi, jos parametrina olisi 4-alkioinen taulukko T={4, 6, 2, 8}, niin kutsun {hi, lo} = fLimits(T, 4) paluun jälkeen muuttujan hi arvo olisi 8 ja muuttujan lo arvo olisi 2. Parametri Arr on viiteparametri ja n on kokonaislukuarvoinen arvoparametri; paluuarvot big ja small ovat kokonaislukuarvoisia.
      Anna ttk-91 koneen symbolisella konekielellä käskyt, joilla funktiota fLimits() käyttäen lasketaan ja tulostetaan globaalin (pääohjelmatasolla määritellyn) 40-alkioisen taulukon Salaries suurimman ja pienimmän alkion arvot.
    HUOM: Aliohjelmaa Limits() siis ei tarvitse esittää lainkaan.
    Noudata suositusten mukaista aliohjelmien (funktioiden) toteutustapaa ja kutsumekanismia.


TTK-91 konekielen käskyt ovat: NOP, STORE, LOAD, IN, OUT, ADD, SUB, MUL, DIV, MOD, AND, IR, XOR, SHL, SHR, COMP, JUMP, JNEG, JZER, JPOS, JNNEG, JNZER, JNPOS, JLES, JEQU, JGRE, JNLES, JNEQU, JNGRE, CALL, EXIT, PUSH, POP, PUSHR, POPR, SVC