Tietokoneen toiminta, S2003, LH 5
Nämä tehtävät käsitellään harjoituksissa viikoilla 49 (1-5.12.2003)- 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?
- 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?
- 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ä, mistä saadaan
todennäköisyyslaskentaa käyttäen keskimääräiseksi ylitettävien urien lukumääräksi
667. (Jos matematiikka on sinusta hauskaa, niin tarkista tulos itse!) 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?
Teemu Kerola