Tietokoneen toiminta kesä 2005

Laskuharjoitus 5 (keskiviikkona 31.8.2005.)

  1. Tiedon esitys.
    1. Mikä on desimaalijärjestelmän luvun 43.234 binääriesitys?
    2. Mitä desimaalijärjestelmän lukua binääriluku 101010.1010 vastaa?
    3. Mikä on desimaalilukujen +25 ja -78 esitys seuraavissa 8 bitin Big-Endian esitysmuodoissa:
      i) etumerkillinen
      ii) kahden komplementti
      iii) yhden komplementti
      in) vakiolisäys käyttäen vakiota 127?
    4. Mikä on desimaaliluvun 33.125 IEEE-liukulukustandardin mukainen esitys?

  2. Hamming koodi.
    Hamming koodin avulla on mahdollista havaita ja korjata yksittäisen bitin muuttuminen.
    1. Näytä, miten 8-bittinen data "1010 0100" varmistetaan Hamming-koodia käyttäen.
    2. Oletetaan, että bittivirhe muuttaa Hamming-koodilla varmistamastasi datasta yhden databitin siten, että varsinainen data muuttuukin muotoon "1011 0100". Näytä, miten virheenkorjaava Hamming koodi havaitsee ja korjaa tämän virheen.
    3. Entä mitä tapahtuu, jos joku tarkistusbiteistä muuttuu.
    4. Kuinka monta tarkistusbittiä tarvitaan, jos Hamming koodia käytettäessä databittejä on 8, 16, 32, 64, 128, 256, 512 tai 1024. Entä kuinka monta prosenttia bittien määrän lisäys on verrattuna databittien määrään kussakin tapauksessa.

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

  4. Selitä yksityiskohtaisesti, kuinka prosessori ja käyttöjärjestelmä toimivat, kun suorituksessa olevan prosessin aikaviipale täyttyy. Selostuksestasi tulee siis käydä ilmi vastaukset ainakin seuraaviin kysymyksiin:
    1. Mistä CPU tietää, että viipale on täysi?
    2. Miten CPU saadaan suorittamaan käyttöjärjestelmää?
    3. Miten CPU otetaan pois vanhalta prosessilta?
    4. Miten se annetaan uudelle prosessille? Mille?

  5. Anna esimerkkejä tilanteista, jolloin on järkevää, että keskeytyksen käsittelyn jälkeen jatketaan eri käyttäjäprosessia (user process) kuin mikä oli suoritusvuorossa keskeytyksen tapahtuessa. Anna myös esimerkkejä tilanteista, jolloin keskeytyksen jälkeen on järkevää jatkaa saman prosessin suoritusta.

  6. Täydennä ohjelmaa stirling.k91. Lisää pääohjelmaan tarkistus ja funktioon stirling puuttuva kutsu itseensä.
    Pääohjelman tulee siis lukea muuttujien M ja N arvot ja kutsua funktiota stirling, jos N ja M ovat positiivisia kokonaislukuja ja M on suurempi tai yhtäsuuri kuin N. Funktio Stirling taas laskee palauttamansa arvon palautuskaavan
    S(K,K) = S(K,1) = 1, missä K on positiivinen kokonaisluku
    S(M,N) = N * S(M-1, N) + S(M-1, N-1), 1 < N < M
    
    avulla.
    Piirrä lisäksi aktivointitietuepinon sisältö kutsun Stirling(5,3) suorituksen aikana silloin kun se on suurimmillaan.
    Tarkista ohjelmasi toimivuus kääntämällä ja suorittamalla se Titokoneen avulla.