1
|
- Tulkinta ja emulointi
- Java ohjelman suoritus, tulkinta ja kääntäminen
- Suorittimen emulointi
- C#, ttk-91, Crusoe
|
2
|
|
3
|
- Hypoteettinen suoritin, toteutus eri tavoilla
- Geneerinen, sitä on ”helppo” simuloida kaikilla todellisilla
suorittimilla
- Useita säikeitä (thread) voi olla ”samanaikaisesti” suorituksessa
- suorittimella mikroaikaskaalassa vain yksi kerrallaan
- Tietorakenteet
- mm. virtuaalikoneen suorittimen ”rekisterit”
- luodaan JVM:n käynnistämisen yhteydessä
- Käskyt
- virtuaalikoneen suorittimen konekäskyt
- 226 käskyä á 32 bittiä
|
4
|
- JVM pino
- kuten tavallinen AT-pino
- koostuu useista kehyksistä (frames)
(vrt. aktivointitietue) ja operandipinosta
- käyttö: kehyksille ainoastaan push/pop operaatiot,
operandipinon alkioille myös push/pop
- ei tarvita yhtenäistä muistialuetta
- allokoidaan keosta (heap)
- toteutuksesta riippuen rajallinen tai dynaamisesti laajennettavissa
- tila loppu Þ
StackOverflowError, OutOfMemoryError
|
5
|
- JVM keko (JVM heap)
- yhteinen kaikille saman virtuaalikoneen säikeille
- automaattinen roskienkeruu (garbage collector)
- ei-käytössä (implisiittisesti ”vapautettu”) oleva muistialue
palautetaan uusiokäyttöön (vapaaksi)
- ei tarvita erikseen free operaatiota Java ohjelmassa
- voi hidastaa suoritusta milloin vain
- toteutuksesta riippuen kiinteän kokoinen tai dynaamisesti
laajennettavissa
- ei tarvitse muodostaa yhtenäistä muistialuetta natiivijärjestelmän
keossa
- tila loppu Þ
OutOfMemoryError
|
6
|
- JVM metodialue (JVM Method Area)
- yhteinen kaikille JVM säikeille
- vastaa tavallista kääntäjän tuottamaa koodisegmenttiä
- loogisesti osa JVM kekoa
- toteutuksesta riippuen kiinteän kokoinen tai dynaamisesti
laajennettavissa
- tila loppu Þ
OutOfMemoryError
|
7
|
- Javan suoritusaikainen vakioallas
(runtime constant pool)
- joka luokalle (class) ja liittymälle (interface)
- suoritusaikainen esitystapa tiedoston
class constant_pool -taulukolle
- vastaa vähän tavallista symbolitaulua
- useita erilaisia vakioita (käännösaikaiset literaalit, suor. aikana
ratkottavat attribuutit, …)
- talletetaan JVM metodialueelle
- tila loppu Þ
OutOfMemoryError
|
8
|
- Natiivimetodien pinot
(Native Method Stacks)
- toteutus voi käyttää tavallisia pinoja
(”C stacks”) sellaisten natiivimetodien tukena, jota ei ole
kirjoitettu Javalla
- käytetään myös Java tulkin toteutuksessa
- ei JVM toteutuksissa, joissa ei natiivimetodeja
- toteutuksesta riippuen kiinteän kokoinen tai dynaamisesti
laajennettavissa
- tila loppu Þ StackOverflowError,
OutOfMemoryError
|
9
|
- JVM rekisterit
- PC osoittaa johonkin JVM metodialueelle
- CPP osoittaa vakioaltaaseen
- LV on paikallisten muuttujien kantaosoite
(vähän kuten FP ttk-91:ssä)
- SP osoittaa JVM operandipinon huipulle
- kaikki rekisterit implisiittisiä,
niitä ei erikseen nimetä JVM konekäskyissä
|
10
|
- JVM kehys (frame, raami)
- talletetaan JVM pinoon, luodaan metodin kutsun yhteydessä, vapautetaan
metodista poistuttaessa
- paikalliset muuttujat
- parametrit, paluuarvo ja välitulokset
- dynaamisen linkityksen toteutusväline
- keskeytysten toteutusväline
|
11
|
- Paikalliset muuttujat
sisältävä taulukko
- viittaukset indeksoituna (0, 1, 2, …) rekisterin LV suhteen
- indeksit sanoina
- kaksi sanaa vaativa muuttuja (long, double) sijoitetaan kahteen
peräkkäiseen (32 bittiseen) sanaan
- big-endian talletus
- Parametrit, paluuarvon ja välitulokset sisältävä operandipino
- SP osoittaa pinon huipulle
- pinoarkkitehtuuri (vs. rekisteriarkkitehtuuri)
|
12
|
- Välitön operandi
- Indeksoitu
- Pino-osoitus
- Taulukko-osoitus pinon kautta
|
13
|
- Peruslaskutoimitukset
- add, sub, mul, div, rem, neg
- Boolean
- and, or, xor, shl, shr, ushr
- Pinon hallinta
- dup, pop, swap, tauluk. luonti, esitystavan muutokset
- Load/Store
- load, aload, store, astore, push-käskyt
- Vertailut
- Kontrollinsiirrot
- Muut
|
14
|
- Emuloi JVM konekielen käskyjä (byte-koodia)
- Yksi (byte-koodi) käsky kerrallaan
- JVM rekisterit ja muistialueet emuloitu tulkin tietorakenteina muistissa
- Hidasta, mutta joustavaa
|
15
|
- (a) Käännetään tavukoodi suoraan natiivikoneen konekielelle ja
suoritetaan se normaalin ohjelman tapaan
- (b) Käännetään tavukoodi ensin korkean tason kielelle (esim C), joka
sitten käännetään natiivikoneen konekielelle
- alkuosa riittää tehdä kerran
- loppuosa on jo valmiina yleensä
- Ongelma: dynaaminen linkitys
|
16
|
- JIT = Just-in-Time
- Emulointi ja/tai käännös tilanteesta riippuen
- Käännä luokka natiivikonekielelle dynaamisesti linkitettäväksi
moduuliksi, juuri ennen luokan metodin kutsua
- Tarvitsee paljon muistia
- Voi hidastaa suoritusta, jos käännökseen menee enemmän aikaa kuin
tulkitsemiseen
- käännös vasta 2. kutsukerralla?
- JVM rekisterit ja muistialueet emuloitu tulkin tietorakenteina, joita
natiivikoodi myös käyttää
|
17
|
- Suorittimen määrittely, jonka mukaisessa koneessa byte-koodi -muodossa
olevia ohjelmia voidaan sellaisenaan suorittaa
- Valinnainen välimuisti ja liukulukusuoritin
- Kaikki 226 JVM konekäskyä
- jotkut käskyt toteutettu aliohjelmilla, jotka aktivoidaan
keskeytyskäsittelymekanismin avulla
- Myös 115 muuta konekäskyä käyttöjärjestelmän ja muiden
ohjelmointikielten toteuttamiseksi
|
18
|
- 64 (välimuisti-) laiterekisteriä JVM pinon huipun talletukseen
- loput JVM pinosta muistissa
|
19
|
- 25 rekisteriä á 32 bittiä
- PC, LV, CPP, SP (pino kasvaa alaspäin)
- OPLIM alaraja SP:lle; alitus aiheuttaa keskeytyksen
- FRAME osoittaa paikallisten muuttujataulukon jälkeen talletettuun
metodin paluuosoitteeseen
- PSW (tilarekisteri)
- rekisteri, joka kertoo pinon välimuistirekistereiden tämänhetkisen
käytön
- 4 rekisteriä keskeytysten ja break-point’ien käsittelyyn
- 4 rekisteriä säikeiden hallintaan
- 4 rekisteriä C ja C++ ohjelmien toteutukseen
- 2 rajarekisteriä sallitun muistialueen rajoittamiseen
- suorittimen version numero ja konfiguraatiorekisterit
|
20
|
- Read/write ylimääräisille rekistereille
- Osoittimien manipulointikäskyt
- mitä tahansa muistialuetta voidaan suoraan lukea/kirjoittaa
- tarvitaan C/C++ varten
- C/C++ aliohjelmien kutsu ja paluukäskyt
- Natiivi HW manipulointi
- tyhjennä välimuisti (osittain? kokonaan?), ...
- Muut käskyt
|
21
|
- Sun microJAVA 701
- valinnainen välimuisti
- oma muistiväylä
- PCI väylä muille laitteille
- 16 ohjelmoitavaa I/O johdinta
- 3 ohjelmoitavaa ajastinta (Þ kellolaitekeskeytykset)
- suunnattu halpoihin kannettaviin laitteisiin
(kämmenmikro, PDA - Personal Digital Assistant)
- Sun ultraJAVA
- nopeampi, parempi, kalliimpi, …
- suunnattu grafiikka- ja
multimediasovelluksiin
|
22
|
- JEM (Rockwell Collins)
- PSC1000 (Patriot Scientific)
- dSys (Saksa), lääketieteellisiä laitteita
- MJ501 (LG Semicon)
- JSR-001, Real-Time Specification for Java (Java Community Process,
”Sun Microsystems”)
- aJile: aJ-80, aJ-100,
älykkäät liikkuvat laitteet
|
23
|
- MAJC - Microprocessor Architecture for Java Computing
- suoritinarkkitehtuurin määrittely
- tavoitteena suuri nopeus Java, C ja C++ sovelluksille
- suunnattu multimediasovelluksiin verkossa
- tukee hyvin JIT-käännöstä
|
24
|
- 1-4 suoritinta (2 suorittimen lastu, v. 1999)
- Useiden (peräkkäin kutsuttavien) metodien samanaikainen suoritus eri
suorittimilla
- ennakoivalle (speculative) suoritukselle oma kasa
- peruutus (rollback), jos ennakoitu suoritus meni pieleen
- 4 säiettä suorituksessa per suoritin
- säikeen vaihto nopeampaa kuin muistista luku!
- laiterekisterit 4:lle säikeelle!
- välimuistin hudin aikana suoritetaan muita säikeitä
- Suunnattu interaktiiviseen TV:hen,
virtuaalitodellisuussovelluksiin, ...
|
25
|
|
26
|
- C#
- Javan kaltainen kieli
- kehittäjä: Anders Hejlsberg (Turbo Pascal, Delphi, J++)
- osa Microsoft .Net -ympäristöä
- nivoutuu hyvin Windows XP:n kanssa
- ECMA (European Computer Manufacturers Association) standardi (MS, HP ja Intel)
- MSIL – virtuaalikoneen konekieli
- Microsoft Intermediate Language
- sopiva ”välikieli” kaikille korkean tason kielille:
C, C++, Pascal, Java, C#, Visual Basic
- suoritus ainoastaan (JIT) käännösten avulla
|
27
|
|
28
|
- TTK-91 konekielen emulointi
- KOKSI simulaattorin osa
- Yksi käsky kerrallaan
- TTK-91 koneen rekisterit ja muisti emuloitu tulkin tietorakenteina
|
29
|
|
30
|
- x86 konekielen emulointi, JIT käännös
- Natiivi käskykantaa ei ole julkistettu
- ”nopeampi, sama teknologia”?
- ”yhtä nopea, vähemmän virtaa”
- Monta x86 käskyä yhtä aikaa paloiteltuna emuloinnissa,
sekajärjestyksessä
- x86 rekisterit emuloitu natiivi- järjestelmän laiterekistereillä
- x86 muisti emuloitu rekistereiden
avulla suojattuna tietorakenteina
- Tarkat keskeytykset:
- suorituksen peruutus
- uusi käännös hitaalle koodille
- uusi hidas tarkka emulointi
|
31
|
|
32
|
|
33
|
|
34
|
|