Harjoitukset
Tietokoneen toiminta, K2002.muunto, LH 5
Nämä tehtävät tehdään harjoituksissa 22.1.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, jossarutiini 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?
- 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.
- add R1, ParX(FP)
% R1? ParX? FP?
ADD?
- XX dc 456789
% XX?
- call SP, IO.Print
% Print?
- DD equ 65
% DD?
- locX = 3456789;
/* locX? 3456789? locX is local
variable in a C program */
Kussakin tapauksessa perustele, miksi sidonta ei voisi tapahtua
aikaisemmin/myöhemmin.
- 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?
Varaudu esittämään kaikki Koksiin liittyvät tehtävät mikrotietokoneella
harjoitustilaisuudessa. Pidä mukanasi levykettä harjoitusta varten tekemiesi
ohjelmien tallettamiseen.
Teemu Kerola