Tietokoneen toiminta, K2003, LH 6
Nämä tehtävät käsitellään harjoituksissa viikolla 18 (28.4-2.5.2003). Vappuna (1.5) ei ole harjoituksia. Torstain laskuharjoitusryhmiin kuuluvat opiskelijat voivat osallistua muihin ryhmiin. Perjantaina (2.5) on laskuharjoitukset normaaliin tapaan.- Java ohjelmia (tavukoodia) voidaan suorittaa (ainakin) neljällä eri tavalla: 
      tulkitsemalla, tavallisella käännöksellä, Just-In-time -käännöksellä tai 
      suoraan Java-suorittimella. 
      
- Anna esimerkkejä tilanteesta, jolloin tulkitseminen olisi parempi kuin muut vaihtoehdot. Perustele, miksi muut tavat olisivat huonompia.
 - Anna vastaavat esimerkit ja perustelut tilanteista, jolloin muut e.m. vaihtoehdoista olisivat parhaita vaihtoehtoja.
 - Mikä olisi paras vaihtoehto (Java) ohjelmoinnin harjoitustyön suorittamiseen? Miksi?
 - Mitä prosesseja järjestelmässä tarvitaan ohjelman suoritushetkellä, jos Java ohjelmaasi MyProg suoritetaan 1) tulkitsemalla, 2) tavallisella käännöksellä, 3) Just-In-Time -käännöksellä tai 4) suoraan Java-suorittimella?
 
 - Java virtuaalikone. Tee seuraavat oletukset. X, Y ja Z ovat paikallisia 
      muuttujia numero 3, 4 ja 5. Tbl osoittaa 20 alkioiseen taulukkoon ja se 
      (Tbl) on talletettu paikalliseen muuttujaan numero 6. 
      
- Anna konekäskyt, joilla X:n arvoa kasvatetaan 5:llä.
 - Anna konekäskyt, joilla X:n arvoksi tulee Y+Z
 - Anna konekäskyt, joilla Y:n arvoksi tulee Tbl[3]
 
Luennolla esitetyt Tanenbaumin kirjan [Tane99] kuvat 4-10, 4-12, 4-13, 4-9 ja 5-36 löytyvät myös verkosta.
 - Javan suoritus. Missä olosuhteissa Javalla tehdyn ohjelman suoritus olisi 
      nopeampaa/hitaampaa kuin saman ohjelman C:llä tai C++:lla tehty toteutus? 
      Miksi? 
      
 - [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 (tai 
      2000) eri mahdollisuuden joukosta. Tähän menee keskimäärin 30 (tai 1000) 
      vertailua ja kuhunkin vertailuun ainakin 2 konekäskyä! 
      
Jos valintavakiot 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ää valintamuuttujan arvon ja hyppytaulun osoite on JTBL, niin oikeaan case-tapaukseen johtavaan 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)?
 - Milloin toteutustapa (b) on parempi kuin (a)?
 - Jos kukin case-tapaus vaatii 10 konekäskyä ja case-tapauksia on 60, niin kuinka paljon (%) hyppytaulun käyttö nopettaa valintalauseen suoritusta? Eroavatko em. toteutustavat (kohdat a ja b) tässä suhteessa?
 
 - [1 htp] Vastaa kurssikyselyyn. 
      Kiinnitä lisähuomiota kohtien 14 ja 19 vastauksiin. Ota lisäkysymysten vastaukset 
      talteen laskuharjoituksissa tapahtuvaa keskustelua varten. 
      
Vastaa kurssikyselyn kohdassa 14 ("Miten kurssia voisi kehittää?") myös lisäkysymyksiin:
- Montako tuntia olet käyttänyt tähän kurssiin yhteensä tähän asti aikaa?
Luentojen seuraamiseen? Harjoituksiin? Itseopiskeluun? - Kuinka suureen osaan luennoista osallistuit? (100%, 90%, ...)
 - Jos osallistuit lähes kaikkiin luentoihin, niin opitko perusasiat luennoilla vai pitikö niitä vielä kovasti opiskella kirjoista?
 - Käytitkö englanninkielisiä oppikirjoja? Kuinka paljon?
 
Vastaa kurssikyselyn kohdassa 19 ("Muita kommentteja ...") myös lisäkysymyksiin:
- Mitä mieltä olit kertauskysymyksistä? Olivatko ne hyödyllisiä?
 - Mitä mieltä olit ryhmätyöstä, jossa tehtiin kertauskysymyksiä?
 - Oliko ryhmätyön määrittely mielestäsi sopiva, puutteellinen vai liian detaljoitu? Perustele.
 
 - Montako tuntia olet käyttänyt tähän kurssiin yhteensä tähän asti aikaa?
 
Varaudu esittämään kaikki Koksiin liittyvät tehtävät mikrotietokoneella harjoitustilaisuudessa. Pidä mukanasi levykettä harjoitusta varten tekemiesi ohjelmien tallettamiseen.
Teemu Kerola