Tietokoneen toiminta, 4 op (2 ov)
Kurssikuulustelu 2.3.2006
Kirjoita jokaiseen vastauspaperiisi seuraavat tiedot: |
oma nimi, opiskelijanumero (tai henkilötunnus), |
|
kurssin nimi, nimikirjoitus ja sivunumero. |
Kurssin tulokset ja arvosteluperusteet
tulevat näkyville verkkoon kurssin aikataulusivulle linkitettynä heti arvostelun
valmistuttua.
- [6 p] Tiedon esitys.
- [4 p] Luvun +24 8-bittinen esitysmuoto on 0001 1000 eli 0x18.
Anna Big Endian 8-bittisen desimaaliluvun -24 esitys tietokoneessa, kun kokonaislukujen esitysmuoto on
- etumerkkibitti erikseen
- kahden komplementti
- yhden komplementti
- lisättynä 127:lla (Huomaa, että 127=27-1)
- [2 p] Mikä on desimaaliluvun -24.0 IEEE:n 32-bitin liukulukustandardin mukainen esitys?
- [6 p] Konekäskyjen suoritus, keskeytykset.
- [4 p] Määrittele käsite "käskyjen suoritussykli". Mitkä ovat sen vaiheet? Piirrä kuva suoritussyklistä.
- [2 p] Määrittele käsite "keskeytys" ja kerro kuinka keskeytykset toteutetaan suoritussyklin tasolla.
- [6 p] Prosessi (process).
- [3 p] Piirrä prosessin suoritusaikaisista tiloista (process state) 5-tilainen tilakaavio. Kerro tilojen nimet ja piirrä niiden väliset tilasiirtymät.
- [1 p] Määrittele käsite "aikaviipalekeskeytys (time slice interrupt)".
- [2 p]
Mitä järjestelmässä tapahtuu, kun prosessi P on suorituksessa ja tulee aikaviipalekeskeytys. Mainitse erityisesti, prosessin tilasiirtymät ja mitä tilasiirtymissä tapahtuu.
- [7 p] Muistiinkuvattu I/O. Esimerkissä driver.k91 (ks. Kuva 1 kääntöpuolella) on kuvattu laiteajuri suoraa I/O toteutusta käyttäen.
- Miten laiteajuri tietää, että laite on tulostanut annetun luvun?
- Mitä laiteajuri tekee sillä aikaa kun laite on tulostamassa lukua?
Kauanko tähän voi kulua aikaa?
- Miten laite (laiteohjain) kertoo laiteajurille, että laitteelle annettu tehtävä on suoritettu?
- Miten varsinainen (laiteajuria kutsunut) sovellusohjelma saa tietää, että laitteelle annettu tehtävä on suoritettu?
- [3 p] Kuinka k.o. laiteajuria tulisi muuttaa, jos tulostus tehtäisiinkin DMA'ta käyttäen? Tarkoitus ei ole antaa tarkkaa vastausta koodattuna, vaan kertoa pääpiirteissään, mitä kaikkea esimerkin ajurissa tulisi muuttaa, jos haluttaisiin käyttää DMA'ta.
Mitä etu/haittaa tästä olisi? Tuleeko tästä mitään muutoksia tulostinlaitteiston (laiteohjaimen) vaatimuksiin?
- [7 p] Ttk-91 koneen symbolinen konekieli. Kokonaislukuarvoiset muuttuja K ja kokonaislukuarvoisen taulukot T[10] ja U[10] on määritelty pääohjelmatasolla. Taulukoissa T ja U on siis 10 alkiota (indeksit 0,...,9).
- [1 p] Anna muuttujan K sekä taulukkojen T ja U määrittelyt.
- [4 p] Toteuta funktio PisteT(A, B, N), joka palauttaa arvonaan parametrina annettujen N-alkioisten taulukkojen A ja B pistetulon eli arvon A[0]*B[0] + A[1]*B[1] + ... + A[N-1]*B[N-1]. Parametri N on arvoparametri ja parametrit A ja B viiteparametreja. Voit olettaa, että N≥1 ja että pistetulon laskemisessa ei tapahdu ylivuotoa.
- [1 p] Anna käskyt, joilla funktion PisteT() avulla lasketaan ja tulostetaan 10-alkioisten taulukoiden T ja U pistetulon arvo.
- [1 p] Anna käskyt, joilla funktion PisteT() avulla lasketaan ja tulostetaan K-alkioisten taulukoiden T ja U pistetulon arvo.
Voit olettaa, että 0<K≤10.
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, OR, XOR, SHL, SHR, COMP, JUMP, JNEG, JZER, JPOS, JNNEG, JNZER, JNPOS,
JLES, JEQU, JGRE, JNLES, JNEQU, JNGRE, CALL, EXIT, PUSH, POP, PUSHR, POPR, SVC
; driver.k91
; output "port"
ptrCtr DC 1048576 ; control register address
ptrStat DC 1048577 ; status register address
ptrData DC 1048578 ; data register address
; timeout = time to execute 3 000 000 instructions
TimeOut DC 600000 ; timeout loop count
; print (int parData): int retVal
; print input value via output port
; return Failure (1) or Success (0)
; invoked via SVC in priviledged mode
retVal EQU –3 ; paluuarvo
parData EQU -2 ; tulostettavan luvun arvo
Print PUSHR SP
LOAD R1, parData(FP)
STORE R1, @ptrData ; set data to print
LOAD R1,=0
STORE R1, @ptrStat ; init state register to 0
LOAD R1,=1
STORE R1, @ptrCtr ; give command to print
LOAD R2, TimeOut ; init timeout
Wait LOAD R1, @PtrStat ; check state register
JNZER R1, Done
SUB R2, =1 ; check for timeout
JZER R2, Fail
JUMP Wait ; loop until done or timeout
Done LOAD R1, =0 ; return Success
JUMP Retrn
Fail LOAD R1, =1
Retrn STORE R1, retVal(FP)
POPR SP
IRET SP, =1 ; same syntax as EXIT (??)
Kuva 1. Laiteajuri driver.k91 (suora I/O)