Harjoitusten vastaukset

Tietokoneen toiminta, Itseopiskelukurssi, HT 6 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. 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.
    1. Anna esimerkkejä tilanteesta, jolloin tulkitseminen olisi parempi kuin muut vaihtoehdot. Perustele, miksi muut tavat olisivat huonompia.
      Esim. tietty lyhyt metodi suoritetaan vain kerran, pienessä laitteistossa ei ole kääntäjää. Kääntäminen ei ehkä kannata, koska käännökseen kuluu enemmän aikaa kuin tulkitsemiseen.
    2. Anna vastaavat esimerkit ja perustelut tilanteista, jolloin muut e.m. vaihtoehdoista olisivat parhaita vaihtoehtoja.
      Käännös: esim. sama (aikakriittinen) ohjelma suoritetaan monta kertaa.
      JIT-käännös: esim. suuri ohjelma, josta vain pientä osaa moduuleista tarvitaan yhdellä suorituskerralla.
      Java-suoritin: esim. pieni laite, jolla suoritetaan ainoastaan Java-sovelluksia.
    3. Mikä olisi paras vaihtoehto (Java) ohjelmoinnin harjoitustyön suorittamiseen? Miksi?
      Java-tulkki, nopeus ei (yleensä) ole tärkeä.
    4. 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?
      1) Java-tulkki, 2) konekielelle käännetty ja linkitetty MyProg,
      3) Java-tulkki, Java-kääntäjä, linkittäjä, 4) tavukoodinen MyProg.
    5. Milloin käyttäisit C#'ia Javan asemesta? Mitä eroja/yhtäläisyyksiä C#'lla ja Javalla on?
      Microsoftin ympäristöissä. C# suunnattu JIT-käännökseen, molemmissa "tavukoodi", C# "tavukoodi" (MSIL) on välikieli myös muille kielille (esim. C, Java) kuin C#'lle.

  2. 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.
    1. Anna konekäskyt, joilla X:n arvoa kasvatetaan 5:llä.     iinc 3 5
    2. Anna konekäskyt, joilla X:n arvoksi tulee Y+Z             iload 4, iload 5, iadd, istore 3
    3. Anna konekäskyt, joilla Y:n arvoksi tulee Tbl[3]           aload 6, iconst 3, iaload, istore 4
    4. Mitkä ovat suurimmat erot JVM ja ttk-91 arkkitehtuurien välillä?
      JVM on todellinen toimiva kokonaisuus, JVM on pinokone, kun ttk-91 on rekisterikone. JVM:ssä pinoa käytetään myös laskennan välitulosten tallentamiseen eikä ainoastaan aliohjelmakutsujen toteutukseen. JVM:lle on toteutettu toimivia laitteistototeutuksia. JVM:ssä on keko ja literaalialue. JVM:ssä on myös muita tietotyyppejä kuin kokonaislukuja. JVM:ssä aktivointitietueen (kehyksen) manipulointi on tehokkaammin toteutettu.
       
  3. Javan suoritus
    1. Missä olosuhteissa Javalla tehdyn ohjelman suoritus olisi nopeampaa kuin saman ohjelman C:llä tai C++:lla tehty toteutus? Miksi? Onko tämä tärkeätä? Milloin?
      JVM:n laitteistoteutuksessa. Ei kauhean tärkeätä, koska tarve on nimenomaan Javaa suorittavalla ympäristöllä eikä minkäänlainen kilpailu muiden ohjelmointikielten kanssa.
    2. Missä olosuhteissa Javalla tehdyn ohjelman suoritus olisi hitaampaa kuin saman ohjelman C:llä tai C++:lla tehty toteutus? Miksi? Onko tämä tärkeätä? Milloin?
      Lähes aina. C ja C++ kuvautuvat paremmin käytössä oleviin rekisteripohjaisiin todellisiin arkkitehtuureihin. Tämä voi olla hyvinkin merkittävää, sovelluksen käyttötarkoituksesta riippuen.
    3. Oletetaan, että osaat hyvin sekä Java- että C-kieliä. Sinulle on annettu tietty sovellus toteutettavaksi ja saat itse valita toteutuskielen. Kumpaa käyttäisit? Miksi? Onko tämä tärkeätä? Miksi?
      Riippuu sovelluksesta. Jos sovellus on helpompi toteuttaa jollakin kielellä, niin käytetään sitä. Toisaalta, jos asovellus on pieni eikä kielellä ole muuten väliä, niin käytetään sitä kieltä mitä paremmin osaa.
    4. Onko Javan suoritus tulkissa emulointia vai simulointia? Se on emulointia, koska suorituksessa emuloidaan kaikkia laitteiston toimintoja.
    5. Mikä on emuloinnin ja simuloinnin ero? Simuloinnissa emuloidaan ainoastaan sillä simulointikerralla olennaiset toiminnot. Esimerkiksi, simuloinnissa voidaan haluta ulos vain laskentaan käytetty aika eikä lopputulosta laisinkaan. Ttk-91 simulaattorit simuloivat ttk-91 ohjelmien toimintaa oikein, mutta eivät emuloi koko järjestelmän toimintaa. Simuloinnin kohteena on yleensä jokin varsinaisen järjestelmän (osittainen, abstrakti) malli, eikä koko järjestelmä. JVM kuvaa järjestelmän kokonaisuudessaan. Ttk-91:ssä simuloidaan (myös animaattorilla) vain osaa koko järjstelmästä.
    6. Miten Java-ohjelmien suoritus eroaa C-ohjelmien suorituksesta?
      Java-ohjelmien tulkitsemisen tapauksessa suorituksessa oleva prosessi on Java-tulkki ja tavukoodin käskyjä emuloidaan yksi kerrallaan (aika hitaasti). Käännöksen tai JIT-käännöksen yhteydessä suorituksessa on myös Java-kääntäjä aika ajoin, jonka tuottamat koodit linkitetään dynaamisesti suoritettavaan ohjelmaan. C-ohjelmat yleensä käännetään ja linkitetään staattisesti valmiiksi, jolloin niiden suoritus tapahtuu yhden tavanomaisen prosessin puitteissa.
    7. Miten Javan suoritus tulkin avulla eroaa ttk-91 ohjelmien suorituksesta Titokoneessa? Mitä niillä on yhteistä?
      Eroa ei juurikaan ole. Molemmat hakevat konekielisiä (tavukoodi) käskyjä yksi kerrallaan ja emuloivat niiden toimintaa simuloitujen laitteistorakenteiden (JVM tai ttk-91) avulla. Java-tulkki tosin keskittyy ohjelman suorittamiseen, kun Titokone käsittää myös ohjelmiston kehitysympäristön (debuggerin) ja suorituksen animaattorin.

     
  4. Vastaa kurssikyselyyn.

    Vastaa kurssikyselyn kohdassa 14 ("Miten kurssia voisi kehittää?") myös allaoleviin lisäkysymyksiin. Merkitse vastaukseesi kyseisten lisäkysymyksen kohdat (a, b, ...). Ota kopiot vastauksestasi mukaan opintopiiri- ja ryhmätapaamiseesi.

    1. Montako tuntia olet käyttänyt tähän kurssiin yhteensä tähän asti aikaa?
      Verkkoluentojen seuraamiseen? Harjoitustehtäviin? Projekteihin? Itseopiskeluun?
    2. Kuinka suureen osaan verkkoluennoista kävit läpi? (100%, 90%, ...)
    3. Oliko aikataulu nopea/sopiva/hidas?
    4. Käytitkö englanninkielisiä oppikirjoja (Stallings, Tanenbaum)? Kuinka paljon? Montako tuntia luit?
    5. Paljonko aikaa (tunteja) opintopiirisi käytti harjoitustehtävien läpikäyntiin ennen ryhmätapaamista?
    6. Oliko harjoitustehtäviä liikaa/liian vähän?
    7. Hyviä ideoita tämän itseopiskelukurssin kehittämiseen

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

Ylimääräisiä keskustelutehtäviä

  1. Miksi hyvää Java-kielessä on? Mitkä ovat sen heikkoudet?

  2. Voisiko ttk-91arkkitehtuurin toteuttaa Java virtuaalikoneessa? Miten?

  3. Voisiko JVM'n toteuttaa ttk-91:ssä? Miksi ei?

  4. Onko tämä kurssi vastannut odotuksiisi?
    Miten? Jos ei, niin oliko vika kurssissa vai odotuksissasi?

  5. Miten tietokone toimii?

  6. Anna kertauskysymystehtävän vastausvaihtoehtoja hyvine selityksineen seuraavaan kertauskysymykseen: "Mitkä seuraavista väitteistä liittyen  Java-ohjelmien suorittamiseen 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.