Varaudu esittämään kaikki koksiin liittyvät tehtävät mikrotietokoneella
harjoitustilaisuudessa. Tallenna siksi ratkaisusi joko levykkeelle tai
fs-verkkolevylle. Ota mukaan myös tuloste ratkaisuistasi.
- Tehtävä 1: Levyoperaatioiden kesto
Ennakkoon palautettava tehtävä ! Tehtävästä saa yhden
koepistettä vastaavan pisteen.
Otaksumme levyn toiminnasta seuraavaa:
- Levyn pyörimisnopeus on 7200 rpm ja siinä on yksi luku/kirjoituspää per levypinta.
- Sylintereiden (uraa per levypinta) lukumäärä on 2000, joka uralla on 50 sektoria ja sektorin koko on
0.5 kB.
- Hakuvarren siirtoaika on
lineaarinen urien lukumäärän suhteen, joten se on 0.02 ms per ura.
- Luettavan tiedoston jokaisen sektorin
sijainti on
täysin satunnainen levyllä, joten sektorista toiseen siirryttäessä
joudutaan ylittämään keskimäärinen 667 uraa. (Urien määrä saadaan
todennäköisyyslaskennalla)
- Tiedosto luetaan levyltä
yksi
sektori kerrallaan.
Kauanko kestää 333.33 kB tiedoston lukeminen
levyltä keskimäärin? Entä 24 MB tiedoston lukeminen?
Kirjoita tarvittavat laskutoimitukset välivaiheineen tavalliseen
tekstitiedostoon. Voit halutessasi lyhyesti kuvailla laskennan etenemistä
vaiheesta toiseen.
Palauta laatimasi tekstitiedosto www-sivun
http://db.cs.helsinki.fi/~tuohinie/tito/ kautta.
Palautus pitää tehdä viimeistään 24 tuntia ennen ryhmän alkua.
Myöhemmin palautus ei ole mahdollista eikä myöhästyneitä
palautusyrityksiä oteta huomioon.
- Tehtävä 2: Aliohjelmat, makrot, literaalit, muuttujat, vakiot
Ohjelmaa kirjoittaessaan ohjelmoija voi ottaa huomioon myös kääntäjän
toiminnan. Tietyt rakenneratkaisut voivat olla kääntäjän tai lopullisen
suoritettavan konekielen kannalta mielekkäämpiä kuin jotkut toiset.
- Miten literaalin käyttö eroaa
muuttujan käytöstä? Edut? Haitat?
- Miten literaalin käyttö eroaa käskyn vakio-osan käytöstä?
Edut? Haitat?
Anna esimerkki tilanteesta, jossa on parempi
toteuttaa lukuarvo X literaalina kuin vakiona käskyssä.
Anna esimerkki tilanteesta, jossa
on parempi toteuttaa lukuarvo X vakiona käskyssä kuin literaalina.
- Miten makron käyttö eroaa
aliohjelman käytöstä? Edut? Haitat?
Anna esimerkki tilanteesta, jossa rutiini XYZ
olisi parempi toteuttaa makrona kuin aliohjelmana.
Anna esimerkki tilanteesta, jossa rutiini XYZ
olisi parempi toteuttaa aliohjelmana kuin makrona.
- Tehtävä 3: Nimen sidonta
Ohjelmassa käytetyn nimen sidonta sen lopulliseen arvoon voi tapahtua
ainakin seuraavien tapahtumien yhteydessä : ohjelman kirjoitusaikana,
käännösaikana, linkityksen aikana, latausaikana, kantarekisterin
(tai muun KJ rekisterin) asetuksen aikana, tai konekäskyn
suoritusaikana.
Milloin seuraavien esimerkkien nimien sidonta tapahtuu? Perustele.
| Operaatio | Nimet |
a. | add R1,ParX(FP) | R1? ParX? FP?
ADD? |
b. | XX dc 456789 | XX? |
c. | call SP, IO.Print | Print? |
d. | DD equ 65 | DD? |
e. | locX = 3456789; | locX? c-kielen muuttuja |
Kussakin tapauksessa perustele, miksi sidonta ei voisi tapahtua
aikaisemmin tai myöhemmin.
- Tehtävä 4: Itseään muuttava ohjelma
Mitä ohjelma
mystery.k91 tekee? Miten se tekee sen? Entä ohjelmaa
mystery2.k91? Miten se tekee sen? Mihin tällaista ohjelmointitapaa voisi
hyödyntää? Mitä ongelmia tällaisessa ohjelmointitavassa on?
- Tehtävä 5: Linkitys
Miten Tanenbaumin kirjan [Tane99]
kuva 7-15 (b) muuttuisi, jos moduulit linkitettäisiinkin (alhaalta
ylöspäin) järjestyksessä ACDB kuvassa 7-15 käytetyn järjestyksen
ABCD asemesta?
Huomaa, että kuvassa 7-15 osoitteet kasvavat ylöspäin. Moduulit
on esitelty kuvassa
7-14.
- Tehtävä 6: Muistiinkuvattu I/O.
Esimerkissä driver.k91
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?
- Kuinka k.o. laiteajuria tulisi muuttaa, jos tulostus
tehtäisiinkin epäsuoraa I/O:tä 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ää epäsuoraa
I/O:ta.
Mitä etu/haittaa tästä olisi? Tuleeko tästä mitään muutoksia
tulostinlaitteiston (laiteohjaimen) vaatimuksiin?
Tiina.Niklander@cs.helsinki.fi