Harjoitukset
Tietokoneen toiminta, Kesä 2002, LH 6
Nämä tehtävät tehdään harjoituksissa 3.9.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.
- 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]
- Javan suoritus. Missä olosuhteissa Javalla tehdyn ohjelman suoritus olisi
nopeampaa/hitaampaa kuin saman ohjelman C:llä tai C++:lla tehty toteutus?
Miksi?
- [2 htp] Itseään muuttava koodi. Joissakin suorittimissa, ttk-91
mukaanlukien, voidaan muistipaikan arvoa tulkita sekä koodina että datana.
Tämä mahdollistaa itseään muuttavien ohjelmien toteuttamisen. Itseään
muuttavassa ohjelmassa muutetaan suoritettavia konekäskyjä ennen niiden
suoritusta. Joissakin tapauksissa tämä voi johtaa nopeampaan koodiin kuin
tavanomaisemmat ratkaisut. Esimerkiksi, silmukassa jokin aina samalla
tavalla suoritettu valinta voidaan jättää kokonaan pois, kun
valintakäskyjen ja eri vaihtoehtojen asemesta asemesta koodi onkin jo
etukäteen muutettu siten, että siinä on ainoastaan tuo ennalta tunnettu
vaihtoehto. Yleisesti ottaen itseään muuttava koodi johtaa aina
monimutkaisempiin ohjelmiin, joiden suoritusta on vaikea ymmärtää ja
joissa olevien virheiden korjaaminen voi olla erittäin vaikeata. Useat
tietokonevirukset toimivat juuri tällä tavoin, muuttaen
käyttöjärjestelmän koodia!
Tee itseään muuttava ttk-91 ohjelma, jossa on käskysarja, joka
- ennen muutosta laskisi yhteen muuttujien X ja Y arvon, mutta
- muutoksen jälkeen laskeekin muuttujien X ja Y tulon. ADD käsky on
siis muutettu MUL käskyksi.
Muutos voidaan tehdä esimerkiksi vaihtamalla koko käsky tai editoimalla
kyseistä käskyä. Kumpaa tapaa käytit? Osaatko tehdä sen sillä toisella
tavalla?
Vihje: käsky "Osoite Add R2, R3"
voidaan ladata R1:een tavallisella "Load R1, Osoite"
käskyllä.
- [1 htp] Vastaa kurssikyselyyn.
Kiinnitä lisähuomiota kohdan 14 vastauksiin. Kysymykset 15, 20 ja 21 ovat
epärelevantteja.
Kohdassa 14 ("Miten kurssia voisi kehittää?") vastaa myös
lisäkysymyksiin:
- Montako tuntia olet käyttänyt tähän kurssiin yhteensä tähän
asti aikaa?
Luentojen seuraamiseen? Harjoituksiin? Itseopiskeluun?
- Oliko aikataulu nopea/sopiva/hidas?
- Kuinka suureen osaan luennoista osallistuit? (100%, 90%, ...)
- Kuinka suureen osan harjoituksista teit? (100%, 90%, ...)
- Kuinka suureen osan ohjelmointi (Koksi) harjoituksista teit? (100%,
90%, ...)
- Piditkö paikalle tehdyistä harjoituksista vai olisitko mielummin
osallistunut tavallisiin laskuharjoituksiin, jossa käydään läpi
etukäteen kotona tehtyjä kotitehtäviä? Perustelut?
- Käytitkö englanninkielisiä oppikirjoja? Kuinka paljon?
Teemu Kerola