Harjoitukset
Tietokoneen toiminta, Kesä 2002, LH 5
Nämä tehtävät tehdään harjoituksissa 30.8.2002.
Tee tehtävät yksi kerrallaan haluamassasi järjestyksessä. Tarvittaessa
pyydä apua paikalla olevilta ohjaajilta. Halutessasi voit tehdä tehtäviä
pienessä ryhmässä, mutta kaikkien tulee silti kirjoittaa omat vastauksensa ja
tehdä omat ohjelmansa omalla koneellaan. Saatuasi valmiiksi jonkun tehtävän
(joukon tehtäviä), voit pyytää ohjaajaa tarkistamaan suorituksesi.
Ennen pois lähtöäsi varmista vielä, että ohjaajat ovat kirjanneet kaikki
tekemäsi tehtävät. Harjoitustehtäviä voi toki tehdä vielä kotonakin,
mutta kurssin läpipääsyyn ja arvosanaan vaikuttavat vain harjoitustilanteessa
kirjatut tehtävät. Kurssin suoritus edellyttää aktiivisuutta myös
harjoitustehtävien suhteen.
- Aliohjelmat, makrot, literaalit, muuttujat, vakiot
- Anna esimerkki tilanteesta, jossa rutiini XYZ olisi parempi toteuttaa
makrona kuin aliohjelmana. Perustelut? Esimerkki?
- Anna esimerkki tilanteesta, jossa rutiini XYZ olisi parempi toteuttaa
aliohjelmana kuin makrona. Perustelut? Esimerkki?
- Anna esimerkki tilanteesta, jossa on parempi toteuttaa lukuarvo X
literaalina kuin vakiona käskyssä? Perustelut? Esimerkki?
- Anna esimerkki tilanteesta, jossa on parempi toteuttaa lukuarvo X
vakiona käskyssä kuin literaalina? Perustelut? Esimerkki?
- 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?
- Oletetaan, että levyn pyörimisnopeus on 7200 rpm, 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.
Otaksumme (epärealistisesti), että hakuvarren siirtoaika on lineaarinen
urien lukumäärän suhteen ja että se on 0.02 ms per ura. Otaksumme
(epärealistisesti), että luettavan tiedoston jokaisen sektorin sijainti on
täysin satunnainen levyllä, mästä saadaan todennäköisyyslaskentaa
käyttäen keskimääräiseksi ylitettävien urien lukumääräksi 667.
Otaksumme edelleen (epärealistisesti), että tiedosto luetaan levyltä yksi
sektori kerrallaan. Kauanko kestää 333.33 KB tiedoston lukeminen levyltä
keskimäärin? Entä 24 MB tiedoston lukeminen?
- 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.
- 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?
- Jump table. Pitkät valintalauseet (switch-lauseet) voivat hidastaa
ohjelman suoritusta huomattavasti, jos usein suoritettavassa silmukassa joka
kerta valitaan yksi kerrallaan oikea case-tapaus esimerkiksi 60 eri
mahdollisuuden joukosta. Tähän menee keskimäärin 30 vertailua ja
kuhunkin vertailuun ainakin 2 konekäskyä!
Jos valinta-arvot ovat kokonaislukuarvoisia, nollasta alkavia ja
muodostavat (liki) yhtenäisen arvoalueen, niin usean if-then-else
-vertailun asemesta voidaan käyttää hyppytaulua (jump table). Hyppytaulun
avulla päästää oikeaan case-tapaukseen aina suoraan muutamalla
konekäskyllä. Hyppytaulu sisältää monta hyppykäskyä (yksi per
case-tapaus), joista valintamuuttujan perusteella valitaan indeksoitua
osoitusmoodia käyttäen oikea hyppykäsky. Esimerkiksi, jos rekisteri R3
sisältää valinta-arvon ja hyppytaulun osoite on JTBL, niin oikeaan
case-tapaukseen (siihen liittyvään hyppykäskyyn) päästään konekäskyn
"JUMP JTBL(R3)" avulla.
- Anna (Koksissa suorituskelpoinen) ttk-91 esimerkki hyppytaulun
käytöstä, kun case-tapauksia on 10.
- Miten em. valintalause toteutetaan, jos hyppytaulussa onkin
hyppykäskyjen asemesta ainoastaan case-tapausten osoitteet? Anna
toteutus samalle esimerkille kuin kohdassa (a).
- Milloin toteutustapa (a) on parempi kuin (b)? Miksi?
- Milloin toteutustapa (b) on parempi kuin (a)? Miksi?
- Jos kukin case-tapaus vaatii 10 konekäskyä ja case-tapauksia on 60,
niin kuinka paljon (%) hyppytaulun käyttö nopettaa valintalauseen
suoritusta (verrattuna usean peräkkäisen vertailun toteutukseen)?
Eroavatko em. toteutustavat (kohdat a ja b) tässä suhteessa?
Teemu Kerola