Harjoitukset
Tietokoneen toiminta, K2002.muunto, LH 4
Nämä tehtävät tehdään harjoituksissa 17.1.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.
- 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)
- 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)
- 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?
- Prosessi.
- Mitä tapahtuu, jos Ready-to-Run jono on tyhjä?
- Voiko samasta ohjelmasta olla monta prosessia yhtä aikaa Ready-to-Run
jonossa? Miten tai miksi ei?
- Kumpi kestää kauemmin, aliohjelman kutsu vai prosessin vaihto?
Miksi?
- Kuuluuko välimuistin sisältö prosessin suoritinympäristöön vai
ei? Miksi?
- Kuuluvatko MAR ja MBR prosessin suoritinympäristöön vai ei? Miksi
- 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?
- 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] Jump table. Pitkät valintalauseet (switch-lauseet) voivat
hidastaa ohjelman suoritusta huomattavasti, jos usein suoritettavassa
silmukassa joka kerta valitaan yksi kerrallaan oikea case-tapaus esimerkiksi
60 eri mahdollisuuden joukosta. Tähän menee keskimäärin 30 vertailua ja
kuhunkin vertailuun ainakin 2 konekäskyä!
Jos valinta-arvot ovat kokonaislukuarvoisia, nollasta alkavia ja
muodostavat (liki) yhtenäisen arvoalueen, niin usean if-then-else
-vertailun asemesta voidaan käyttää hyppytaulua (jump table). Hyppytaulun
avulla päästää oikeaan case-tapaukseen aina suoraan muutamalla konekäskyllä.
Hyppytaulu sisältää monta hyppykäskyä (yksi per case-tapaus), joista
valintamuuttujan perusteella valitaan indeksoitua osoitusmoodia käyttäen
oikea hyppykäsky. Esimerkiksi, jos rekisteri R3 sisältää valinta-arvon
ja hyppytaulun osoite on JTBL, niin oikeaan case-tapaukseen (siihen liittyvään
hyppykäskyyn) päästään konekäskyn "JUMP JTBL(R3)" avulla.
- Anna (Koksissa suorituskelpoinen) ttk-91 esimerkki hyppytaulun käytöstä,
kun case-tapauksia on 10.
- Miten em. valintalause toteutetaan, jos hyppytaulussa onkin hyppykäskyjen
asemesta ainoastaan case-tapausten osoitteet? Anna toteutus samalle
esimerkille kuin kohdassa (a).
- Milloin toteutustapa (a) on parempi kuin (b)? Miksi?
- Milloin toteutustapa (b) on parempi kuin (a)? Miksi?
- Jos kukin case-tapaus vaatii 10 konekäskyä ja case-tapauksia on 60,
niin kuinka paljon (%) hyppytaulun käyttö nopettaa valintalauseen
suoritusta (verrattuna usean peräkkäisen vertailun toteutukseen)?
Eroavatko em. toteutustavat (kohdat a ja b) tässä suhteessa?
Varaudu esittämään kaikki Koksiin liittyvät tehtävät mikrotietokoneella
harjoitustilaisuudessa. Pidä mukanasi levykettä harjoitusta varten tekemiesi
ohjelmien tallettamiseen.
Teemu Kerola