Tietokoneen toiminta, kevät 2002

Harjoitus 4

Käsitellään harjoitusryhmissä tiistaina 4.6.2002.

  1. Ttk-91-koneen konekäskyn osoiteosa on vain 16-bittinen. Tämä asettaa rajoituksia käskyssä olevien vakioiden koolle.
    1. Mikä on suurin positiivinen luku, joka voidaan esittää käskyssä vakiona?
    2. Mikä on pienin negatiivinen luku, joka voidaan esittää käskyssä vakiona?
    3. Miten tulee toimia, jos tarvitaankin suurempaa vakiota? Esimerkiksi lukua 500000?
    4. Entä miten tulisi menetellä, jos tarvitaan suurta vakiota indeksoidun osoitusmoodin kanssa? Esimerkiksi, jos halutaan lukea data osoitteesta (R1)+666666?

  2. 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 +23 ja -75 esitys seuraavissa 16 bitin Big-Endian esitysmuodoissa:
      1. etumerkillinen (sign and magnitude)
      2. kahden komplementti (two's complement)
      3. yhden komplementti (one's complement)
      4. 32767 vakiolisäys (biased by 32767)
    4. Mikä on desimaaliluvun 33.125 IEEE-liukulukustandardin mukainen esitys?
    5. Oletetaan, että ohjelmointikielessä MyLan on totuusarvo (boolean) ja liukuluku tietotyypit. Esimerkiksi, siinä voidaan käyttää boolean tai float tyyppisiä muuttujia.
      Ttk-91 koneessa ei kuitenkaan ole tällaisia tietotyyppejä. Voisiko MyLan kielelle tehdä kääntäjän, jonka avulla MyLan kielisiä ohjelmia voisi suorittaa ttk-91 koneessa? Jos voi, niin miten? Jos ei voi, niin miksi ei?

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

  5. 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