Tietokoneen toiminta, Syksy 2003, LH 4
Nämä tehtävät käsitellään harjoituksissa viikolla 48, 24-28.11.2003.- Tiedon muuttumattomuus, Hamming koodi.
- 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. Bitit on numeroitu oikealta vasemmalle, kuten luennolla esitettiin. Ei siis vasemmalta oikealle, kuten Häkkisen monisteessa! )
- Entä kuinka muuttumattomuuden tarkistus tapahtuu siirrettävälle 16 - bitin lohkolle 01010011 01010101. (Näissä 16 bitissä ei ole mukana tarkistubittejä!)
- Montako piuhaa (johdinta, bittiä) tarvitaan 32-bittisen data-väylän
turvaamiseksi virheenkorjaavaa Hamming-koodia käyttäen? Entä 64-bittinen
väylä?
(Haluamme siis pystyä kerralla siirtämään 32 bittiä todellista dataa tarkistusbittien lisäksi) - Miksi Hamming-koodin käyttö ei ole hyvä ratkaisu paikallisverkkojen tiedonsiirron turvaamiseen?
- 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.
- Jos välimuistia ei käytetä, niin kauanko keskimääräisesti kestää datan (1 sana) lukeminen rekisteriin?
- Jos välimuistia käytetään, niin kauanko keskimääräisesti kestää datan (1 sana) lukeminen rekisteriin?
- Miten prosessi tietää, löytyikö tieto välimuistista vai ei?
- Miten sovelluksen käyttäjä (ihminen) tietää, löytyikö tieto välimuistista vai ei?
- Miten käyttäjä (ohjelmoija) voi vaikuttaa välimuistin tehokkuuteen?
- 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.
- Miten ja mihin aikaisemmin suorituksessa olleen prosessin tiedot talletetaan? Mitkä tiedot täytyy ottaa talteen? MBR, MAR, TR, PC, SP, FP, BASE, LIMIT, välimuistin tiedot, ...?
- Miten ja mistä uuden prosessin tiedot saadaan suorittimelle? Mistä käskystä uuden prosessin suoritus alkaa? Miten suoritusvuoro vaihtuu uudelle prosessille?
- Mikä on suorittimen tila (käyttäjä, etuoikeutettu) alkaen juuri ennen
kellolaitekeskeytyshetkeä siihen asti kun uuden prosessin ensimmäisen
käsky suoritetaan?
- [2 htp] Määrittele kuusialkioinen taulukko Taulu[0..5] pääohjelmatasolla.
Toteuta sitten seuraavat tehtävät TTK-91 koneen symbolisella konekielellä
ja suorita ohjelmasi Koksissa.
- Tee aliohjelma Init(Arr, Dim, Val), joka alustaa parametrina annetun
taulukon Arr siten, että kunkin alkion Arr[i] arvoksi tulee luku Val+i+1000.
Parametri Arr on alustettava taulukko, Dim on k.o. taulukon alkioiden
lukumäärä ja Val on 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ä.) - Alusta taulukko Taulu aliohjelmaa Init käyttäen (Val = 100).
- Tulosta taulukon Taulu alkion Taulu[4] arvo ja osoite.
Noudata luennolla ja harjoituksissa esitettyjen suositusten mukaista aliohjelmien (funktioiden) toteutustapaa ja kutsumekanismia.
- Tee aliohjelma Init(Arr, Dim, Val), joka alustaa parametrina annetun
taulukon Arr siten, että kunkin alkion Arr[i] arvoksi tulee luku Val+i+1000.
Parametri Arr on alustettava taulukko, Dim on k.o. taulukon alkioiden
lukumäärä ja Val on kokonaisluku. Arr on viiteparametri. Dim ja Val
ovat arvoparametreja.
- Kertaustehtävien tekemismekaniikka. Tee yksi kertaustehtävä
ryhmätyön
määrittelyssä annetulla menetelmällä. Käytä
kysymystä "Miksi Titossa käytetään ttk-91 symbolista
konekieltä?" ja vastausvaihtoehtoja
- Se on hauskaa.
- Parempaakaan konekieltä ei ole keksitty.
- Ttk-91 konekieli on helpompaa kuin todellisten koneiden konekieli.
- Ohjelmointia ei voi opetella ilman, että oppii kunnolla konekielistä ohjelmointia.
- Se on ainoa konekieli, jolle on simulaattori olemassa.
Keksi itse sopivat vastauselitykstykset kuhunkin vaihtoehtoon. Jos haluat, voit myös keksiä muita vaihtoehtoja. Valitse kysymykseen sopiva aihealue ja vastausvaihtoehtojen oikein/väärin luokittelu. Tämän tehtävän voi hyvin tehdä ryhmätyöparin kanssa.
Jos jollakin ei vielä ole ryhmätyöparia, niin lähettäkää sähköpostia minulle. Ryhmittelen sitten loput parit ja ilmoitan niistä sähköpostitse.
Teemu Kerola