Harjoitukset

Tietokoneen toiminta, Kesä 2002, LH 4

Nämä tehtävät tehdään harjoituksissa 29.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.

  1. Tiedon muuttumattomuus, Hamming koodi.
    1. Näytä, miten virheenkorjaava Hamming koodi havaitsee ja korjaa virheen kun 3. bitti vasemmalta lukien on muuttunut 7-bittisessä datassa 011 0100.
      (Näissä 7 bitissä on mukana sekä varsinainen data että tarkistusbitit)
    2. Montako piuhaa (johdinta, bittiä) tarvitaan 32-bittisen data-väylän turvaamiseksi virheenkorjaavaa Hamming-koodia käyttäen?
      (Haluamme siis pystyä kerralla siirtämään 32 bittiä todellista dataa tarkistusbittien lisäksi)
    3. Miksi Hamming-koodin käyttö ei ole hyvä ratkaisu paikallisverkkojen tiedonsiirron turvaamiseen?
    4. Todista, että henkilötunnuksen tarkistusmerkin avulla kaikki henkilötunnuksessa olevat yhden merkin virheet havaitaan.

     

  2. Välimuisti. Oletetaan, että tiedon saantiaika (1 sana) välimuistista on 2 ns ja tavallisesta muistista 10 ns. Välimuistin lohkon (rivin) koko on neljä sanaa. Oletetaan, että välimuistia käytettäessä 97% muistiviitteistä löytyy välimuistista. Voit (epärealistisesti) olettaa, että välimuistista löytyy aina tilaa uudelle lohkolle ja että tiedon siirtoaika MBR:stä rekisteriin on nolla.
    1. Jos välimuistia ei käytetä, niin kauanko keskimääräisesti kestää datan (1 sana) lukeminen rekisteriin?
    2. Jos välimuistia käytetään, niin kauanko keskimääräisesti kestää datan (1 sana) lukeminen rekisteriin?
    3. Miten prosessi tietää, löytyikö tieto välimuistista vai ei?
    4. Miten sovelluksen käyttäjä (ihminen) tietää, löytyikö tieto välimuistista vai ei?
    5. Miten käyttäjä (ohjelmoija) voi vaikuttaa välimuistin tehokkuuteen?

     

  3. Prosessi.
    1. Mitä tapahtuu, jos Ready-to-Run jono on tyhjä?
    2. Voiko samasta ohjelmasta olla monta prosessia yhtä aikaa Ready-to-Run jonossa? Miten tai miksi ei?
    3. Kumpi kestää kauemmin, aliohjelman kutsu vai prosessin vaihto? Miksi?
    4. Kuuluuko välimuistin sisältö prosessin suoritinympäristöön vai ei? Miksi?
    5. Kuuluvatko MAR ja MBR prosessin suoritinympäristöön vai ei? Miksi

  4. Oletetaan, että TTK-91 -koneelle on tehty käyttöjärjestelmä. Käyttöjärjestelmään kuuluu yhtenä osa-alueena prosessien hallinta. Oletetaan, että kellolaitekeskeytyksen takia ollaan päädytty tilanteeseen, jossa suoritusvuorossa olevaa prosessia vaihdetaan.
    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?

  5. [2 htp] Määrittele kuusialkioinen taulukko Taulu[0..5], 12-alkioinen taulukko Apu[0..11] sekä muuttujat X ja I  (alkuarvo 4) pääohjelmatasolla. Toteuta sitten seuraavat tehtävät TTK-91 koneen symbolisella konekielellä ja suorita ohjelmasi Koksissa.
    1. Tee aliohjelma Init(Arr, Dim, Val), joka alustaa parametrina annetun taulukon Arr siten, että kunkin alkion Arr[i] arvoksi tulee luku Val+i. Parametri Arr on alustettava taulukko, Dim on k.o. taulukon alkioiden lukumäärä ja Val on jokin kokonaisluku. Arr on viiteparametri. Dim ja Val ovat arvoparametreja.
      (Huomaa, että viiteparametrina annetun taulukon käyttö on vähän vaikeata, koska et voi käyttää tavallista indeksoitua osoitusmuotoa taulukon alkioiden yhteydessä.)
    2. Alusta taulukko Taulu aliohjelmaa Init käyttäen (Val = 100).
    3. Alusta taulukko Apu aliohjelmaa Init käyttäen (Val = 345000).
    4. Tulosta taulukon Taulu alkion Taulu[6] arvo ja osoite.
    5. Tulosta taulukon Apu alkion Apu[I] arvo ja osoite.
    6. Sijoita muuttujan X arvo taulukon Taulu alkion Taulu[I] arvoksi. Tulosta X:n arvo.
Noudata luennolla ja harjoituksissa esitettyjen suositusten mukaista aliohjelmien (funktioiden) toteutustapaa ja kutsumekanismia.

Teemu Kerola