Tietokoneen toiminta kevät 2005 Laskuharjoitus 5 (maanantaina 6.6.2005.) 1.Käännä seuraava rekursiivinen aliohjelma konekielelle: static long Duo(int n) { if n < 1 then return 1 else return Duo(n-1)+n+1; } Kirjoita myös yksinkertainen pääohjelma, jossa kutsutaan metodia Duo. 2.Tiedon esitys. a.Mikä on desimaalijärjestelmän luvun 43.234 binääriesitys? b.Mitä desimaalijärjestelmän lukua binääriluku 101010.1010 vastaa? c.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? d.Mikä on desimaaliluvun 33.125 IEEE-liukulukustandardin mukainen esitys? 3.Hamming-koodi. a.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) b.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. a.Jos välimuistia ei käytetä, niin kauanko keskimääräisesti kestää datan (1 sana) lukeminen rekisteriin? b.Jos välimuistia käytetään, niin kauanko keskimääräisesti kestää datan (1 sana) lukeminen rekisteriin? c.Miten prosessi tietää, löytyikö tieto välimuistista vai ei? d.Miten sovelluksen käyttäjä (ihminen) tietää, löytyikö tieto välimuistista vai ei? e.Miten käyttäjä (ohjelmoija) voi vaikuttaa välimuistin tehokkuuteen? 5.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: a.Mistä CPU tietää, että viipale on täysi? b.Miten CPU saadaan suorittamaan käyttöjärjestelmää? c.Miten CPU otetaan pois vanhalta prosessilta? d.Miten se annetaan uudelle prosessille? Mille? 6.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.