Harjoitusten vastaukset

Tietokoneen toiminta, Itseopiskelukurssi, HT 3 vast
HUOM: Katso nämä vastaukset vasta tehtyäsi itse tehtävät. Oppiminen tapahtuu pääasiassa tehtäviä ratkottaessa. Vastauksen katsominen heti kättelyssä on hyvän tehtävän hukkaanheittämistä oppimisen näkökulmasta.

  1. Ohjelman tietorakenteiden sijainti. Korkean tason kieli vs. symbolinen konekieli. Oletetaan, että meillä on korkean tason kielellä (C, Java, Pascal) tehty ohjelma Sovellus, joka käännetään ttk-91 koneen konekielelle
    1. Mitkä ohjelman Sovellus tiedot (esim. muuttujien arvot) haluttaisiin pitää laiterekistereissä koko ohjelman suorituksen ajan. Miksi? Miten tämä voitaisiin saada aikaiseksi?    
      Usein viitattu tieto, tarvitaan usein ja tieto on tällöin nopeiten saatavilla, kääntäjä huolehtii koodin optimoinnin avulla.
    2. Mitkä ohjelman Sovellus tiedot haluttaisiin pitää muistissa koko ohjelman suorituksen ajan. Miksi? Miten tämä voitaisiin saada aikaiseksi?
      Monisanainen tai harvoin käytetty tieto. Turha varata rekisteriä, koska tieto ei sinne joko mahdu tai sitä käytetään harvoin. Kääntäjä päättää.
    3. Mitkä ohjelman Sovellus tiedot haluttaisiin pitää joskus rekisterissä ja joskus muistissa ohjelman suorituksen aikana. Miksi? Miten tämä voitaisiin saada aikaiseksi?
      Tieto joka on jonkin ohjelman osan (esim. metodin A suorituksen aikana tai tietyn loopin) suorituksen ajan usein viitattu, mutta muutoin harvoin viitattu (esim. loopin laskuri). Kääntäjä päättää. Ohjelmoija voi vihjata kääntäjälle pragma-pseudokäskyn avulla. Toisaalta, todellisissa koneissa kaikki tieto pitää ladata rekisteriin ainakin siksi aikaa kun sitä käytetään laskennassa.
    4. Mitkä ohjelman Sovellus tietojen ei tarvitse sijaita missään ohjelman suorituksen aikana? Miksi? Anna esimerkkejä. (Tämä ei ole trikkikysymys)
      Tieto, jota ohjelman tällä suorituskerralla ei tarvita lainkaan. Yhdellä suorituskerralla ei yleensä käydä läpi koko koodia eikä viitata kaikkeen dataan. Esim. pelin tason 10 data-alue, kun aloittelija pelaa tasoilla 1-5. Tällainen tieto voi sijaita esimerkiksi levyllä, kunnes se tarvittaessa haetaan muistiin.
    5. Mitkä ohjelman Sovellus tiedoista ei ole väliä, missä ne sijaitsevat suoritusaikana? Miksi? Anna esimerkkejä.
      Tieto jota käytetään silloin tällöin mutta joka tapauksessa harvoin. Eivät vaikuta kokonaisuuden kannalta suorituskykyyn mitenkään. Näitä tosin ei ole viisasta pitää koko aikaa rekisterissä, koska harvoille rekistereille on parempaakin käyttöä.
       
  2. Binääri- ja heksadesimaalijärjestelmät
    1. Mikä on desimaalijärjestelmän luvun 43.234 binääriesitys? Entä heksadesimaaliesitys?
      101011.001110111110 eli 0x2B.3BE kun tarkkuus on 12 numeroa binääripisteen jälkeen. Bittejä lasketaan niin paljon kuin tarvitaan, tai kunnes esitys on tarkka ja kaikki loput ovat nolllia.
    2. Mitä desimaalijärjestelmän lukua binääriluku 101010.1010 vastaa? Entä heksadesimaalilukua?
      42.625 eli 0x2A.A
       
  3. Kokonaisluvut. Mikä on desimaalilukujen +23 ja -75 esitys seuraavissa 16 bitin Big-Endian esitysmuodoissa:
    1. etumerkillinen (sign and magnitude)               0000 0000 0001 0111        1000 0000 0100 1011
    2. kahden komplementti (two's complement)     0000 0000 0001 0111        1111 1111 1011 0101
    3. yhden komplementti (one's complement)       0000 0000 0001 0111        1111 1111 1011 0100
    4. 32767 vakiolisäys (biased by 32767)           1000 0000 0001 0110        0111 1111 1011 0100
       
  4. Liukuluvut
    1. Mikä on desimaaliluvun -4.0 IEEE liukulukustandardin mukainen esitys (32 bittiä)?
      0xC080 0000 eli 1100 0000 1000 0000  0000 0000 0000 0000
    2. Mikä on desimaaliluvun 33.125 IEEE liukulukustandardin mukainen esitys?
      0x4204 8000 eli 0100 0010 0000 0100  1000 0000 0000 0000   
    3. Oletetaan, että ohjelmointikielessä MyLan on totuusarvo (boolean) ja liukuluku tietotyypit. Esimerkiksi, MyLan ohjelmissa 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?
      Kyllä voi. Koodataan totuusarvot kokonaislukuina ja totuusarvo-operaatiot (ja, tai, negaatio) bittioperaatioilla AND, OR ja NOT. Koodataan liukuluvut kokonaislukuina IEEE standardin mukaisesti ja toteutetaan liukulukuoperaatiot (+, -, *, /) omilla aliohjelmillaan, jotka kukin toteuttavat IEEE-standardin mukaisen liukulukuoperaation käyttäen ttk-91:n bitti- ja kokonaislukuoperaatioita.

  5. Miten Little-Endian ja Big-Endian esitysmuodot eroavat toisistaan?
    Monitavuisen tiedon (esim. 0xAABBCCDD) tavujen talletusjärjestys on erilainen. Big-Endianissa eniten merkitsevä tavu (0xAA) talletetaan pienimpään tavuosoitteeseen (esim tavujen 2000-2003 sisällöt 0xAA, 0xBB, 0xCC, 0xDD) ja Little-Endianissa päin vastoin (esim tavujen 2000-2003 sisällöt 0xDD, 0xCC, 0xBB, 0xAA). Molemmilla talletustavoilla on etunsa ja molempia käytetään. Aritmeettis-loogisen yksikön pitää tietenkin tietää talletusjärjestys, jotta laskutoimitukset menevät oikein.
     
  6. Miten merkkijono "Aika lyhyt merkkijono" esitetään muistissa? Anna yksi konkreettinen (ei ttk-91) esimerkki.
    Joko tietueena {pituus, merkkijono} eli {21 , "Aika lyhyt merkkijono"} tai merkkijonon loppumerkin avulla eli esimerkiksi "Aika lyhyt merkkijono\n" (jossa '\n' on yksi erikoismerkki)

  7. Tämän viikon TitoTrainer tehtävät

Ylimääräisiä keskustelutehtäviä

  1. Mitä hyötyä olisi pitää myös pieniä taulukoita rekisterissä (esim. 8 alkioinen kokonaislukutaulukko)? Miten tällaisia vektorirekistereitä voisi tehokkaasti hyödyntää?

  2. Mitä etua/haittaa olisi toteuttaa oma laitteiston tunnistama tietotyyppi hajuille?

  3. Mitä etua/haittaa on sillä, että muistisoitteet osoittavat (4-tavuisiin?) sanoihin eikä tavuihin?
    (Esim. tavuosoitteen 0010 0010 0010 1100 asemesta sanaosoite 00 1000 1000 1011)
    Entäpä jos muistisoitteet osoittaisivat bitteihin?

  4. Mikä käytännön merkitys on tiedon tarkkuuden häviämisellä liki samankokoisten liukulukujen vähennyslaskun yhteydessä?
    (esim. 1.234567 - 1.234566)

  5. Anna kertauskysymystehtävän vastausvaihtoehtoja hyvine selityksineen seuraavaan kertauskysymykseen: "Mitkä seuraavista väitteistä liittyen tiedon tallettamiseen tietokoneessa ovat totta?"
    1. Anna ainakin kolme vastausvaihtoehtoa, jotka ovat totta.
    2. Anna ainakin kolme vastausvaihtoehtoa, jotka eivät ole totta.
    3. Anna ainakin kaksi vastausvaihtoehtoa, jotka voivat ehkä olla totta tai sitten ei.
    Palauta vastausvaihtoehdot selityksineen ohjaajalle. Tee vastausvaihtoehdot ja selitykset sellaisiksi, jotta niiden käyttö olisi hyödyllistä muille kurssin opiskelijoille. Vastausta saatetaan käyttää uuden kertaustehtävän laadinnassa. Jos vastausta ei saa käyttää tähän tarkoitukseen, mainitkaa asiasta palautuksessa.