Tietokoneen toiminta, kevät 2004

Harjoitus 5

Käsitellään harjoitusryhmissä torstaina 3.6.2004.

Varaudu harjoituksiin etukäteen tutustumalla käsiteltävään asiaan ja yrittämällä itse tehdä tehtäviä niin paljon kuin mahdollista. Harjoitustilaisuudessa tehtävät 'viimeistellään' ryhmissä.

  1. Oletetaan, että TTK-91-koneelle on laadittu käyttöjärjestelmä, joka sallii usean samanaikaisen prosessin suorittamisen koneella. Käyttöjärjestelmään kuuluu yhtenä osa-alueena prosessien hallinta. Oletetaan, että kellolaitekeskeytyksen takia ollaan päädytty tilanteeseen, jossa suoritusvuorossa olevaa prosessia vaihdetaan. Käyttöjärjestelmän suunnittelijan ja toteuttajan on täytynyt ottaa kantaa mm. seuraaviin kysymyksiin. Millaisiin ratkaisuihin hän on todennäköisesti päätynyt TTK-91-koneessa?
    1. Miten ja mihin aikaisemmin suorituksessa olleen prosessin tiedot talletetaan? Mitkä tiedot täytyy ottaa talteen?
    2. Miten ja mistä uuden prosessin tiedot saadaan suorittimelle? Mistä käskystä uuden prosessin suoritus alkaa? Miten suoritusvuoro vaihtuu uudelle prosessille?
    3. Mikä on suorittimen tila (käyttäjä, etuoikeutettu) alkaen juuri ennen kellolaitekeskeytyshetkeä siihen asti kun uuden prosessin ensimmäisen käsky suoritetaan?

  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.
    1. Miten literaalin käyttö eroaa muuttujan käytöstä? Edut? Haitat?
    2. 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ä? Perustelut?
    3. Miten makron käyttö eroaa aliohjelmam 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.

  3. 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?

  4. 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?

  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.

  6. Muistiin kuvattu I/O. Esimerkissä driver.k91 on kuvattu laiteajuri suoraa I/O toteutusta käyttäen. 
    1. Miten laiteajuri tietää, että laite on tulostanut annetun luvun?
    2. Mitä laiteajuri tekee sillä aikaa kun laite on tulostamassa lukua? 
      Kauanko tähän voi kulua aikaa?
    3. Miten laite (laiteohjain) kertoo laiteajurille, että laitteelle annettu tehtävä on suoritettu?
    4. Miten varsinainen (laiteajuria kutsunut) sovellusohjelma saa tietää, että laitteelle annettu tehtävä on suoritettu? 
    5. Kuinka ko. 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?