Tietokoneen toiminta, kevät 2004

Harjoitus 4

Käsitellään harjoitusryhmissä tiistaina 1.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 sitten 'viimeistellään' ryhmissä.

  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?

  3. Hamming-koodi.
    1. Onko Hamming-koodatussa bittijonossa 100 1101 (4 databittiä ja 3 tarkistusbittiä) virheitä, jos niin millaisia ja miten ne korjataan? Entä bittijonossa 100 1100?
    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. Voiko prosessi havaita, löytyikö tieto välimuistista vai ei?
    4. Tarvitseeko sovelluksen käyttäjän (ihminen) tietää, löytyikö tieto välimuistista vai ei? Miksi?

  5. Tee aliohjelma Init(Arr, Dim, Val), joka alustaa annetun taulukon Arr siten, että kunkin alkion Arr[i] arvoksi tulee luku Val + i. Parametri Arr on alustettavan taulukon osoite, Dim on ko. taulukon alkioiden lukumäärä ja Val on kokonaisluku. Parametrit annetaan pinossa, taulukon osoite viiteparametrina ja muut arvoparametreina.

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