Tulkinta ja emulointi

Samankaltaiset tiedostot
Copyright 2018 Teemu Kerola

Luento 11 Tulkinta ja emulointi

Jakso 11 Tulkinta ja emulointi

Java ohjelmien suoritus (3) Luento 11 Tulkinta ja emulointi. Java virtuaalikone (JVM) (5) JVM:n tietorakenteet (8) JVM:n tietorakenteet (jatkuu) (6)

Javaohjelmien suoritus (3) Jakso 11 Tulkinta ja emulointi. Java-virtuaalikone (JVM) (5) JVM:n tietorakenteet (8) JVM:n tietorakenteet (jatkuu) (6)

Luento 11 Tulkinta ja emulointi

Java ohjelmien suoritus (3) Luento 11 Tulkinta ja emulointi. Java virtuaalikone (JVM) (5) JVM:n tietorakenteet (9) JVM:n tietorakenteet (jatkuu)

Luento 11 Tulkinta ja emulointi

Java ohjelmien suoritus (3) Luento 11 Tulkinta ja emulointi

Luento 11 Tulkinta ja emulointi

Tietokoneen toiminta, K Tavoitteet (4)

Jakso 12 Yhteenveto. Keskeiset asiat Teemu Kerola, K2000

Java-ohjelman suoritus Java tavukoodi, Java-virtuaalikone. Java-ohjelmien emulointi ja käännös Java-suorittimet. C# ttk-91, Crusoe

Jakso 4 Aliohjelmien toteutus

Tieto ja sen osoite (3) Jakso 3 Konekielinen ohjelmointi (TTK-91, KOKSI) Osoitinmuuttujat. Tieto ja sen osoite (5)

Luento 4 Aliohjelmien toteutus

Luento 2 (verkkoluento 2) Ttk-91 järjestelmä

Jakso 4 Aliohjelmien toteutus

Aliohjelmatyypit (2) Jakso 4 Aliohjelmien toteutus

Jakso 3 Konekielinen ohjelmointi (TTK-91, KOKSI)

Jakso 3 Konekielinen ohjelmointi (TTK-91, KOKSI)

Luento 4 (verkkoluento 4) Aliohjelmien toteutus

Luento 3 (verkkoluento 3) Ttk-91 konekielinen ohjelmointi. Ohjelman esitysmuoto Konekielinen ohjelmointi ttk-91:llä (Titokone, TitoTrainer)

Luento 3 Konekielinen ohjelmointi (TTK-91, KOKSI)

LOAD R1, =2 Sijoitetaan rekisteriin R1 arvo 2. LOAD R1, 100

Luento 2 (verkkoluento 2) Ttk-91 järjestelmä

Luento 4 Aliohjelmien toteutus

Jakso 4 Aliohjelmien toteutus

Luento 4 Aliohjelmien toteutus

Jakso 4 Aliohjelmien toteutus. Tyypit Parametrit Aktivointitietue (AT) AT-pino Rekursio

Luento 4 (verkkoluento 4) Aliohjelmien toteutus

Luento 1 Tietokonejärjestelmän rakenne

Luento 1 Tietokonejärjestelmän rakenne

Luento 1 Tietokonejärjestelmän rakenne. Järjestelmän eri tasot Laitteiston nopeus

Aliohjelmatyypit (2) Jakso 4 Aliohjelmien toteutus

Luento 1 Tietokonejärjestelmän rakenne. Järjestelmän eri tasot Laitteiston nopeus

Luento 4 Aliohjelmien toteutus. Tyypit Parametrit Aktivointitietue (AT) AT-pino Rekursio

Teemun juustokakku Rekisterien, välimuistin, muistin, levymuistin ja magneettinauhan nopeudet suhteutettuna juuston hakuaikaan juustokakkua tehdessä?

Jakso 3 Konekielinen ohjelmointi (TTK-91, KOKSI) Muuttujat Tietorakenteet Kontrolli Optimointi Tarkistukset

Luento 1 (verkkoluento 1) Tietokonejärjestelmä

Jakso 3 Konekielinen ohjelmointi (TTK-91, KOKSI)

Luento 5 (verkkoluento 5) Suoritin ja väylä

Luento 1 (verkkoluento 1) Ohjelman sijainti Ohjelman esitysmuoto Laitteiston nopeus

Jakso 3 Konekielinen ohjelmointi (TTK-91, KOKSI)

Tiedon esitysmuodot. Luento 6 (verkkoluento 6) Lukujärjestelmät Kokonaisluvut, liukuluvut Merkit, merkkijonot Äänet, kuvat, muu tieto

Kertausluento 1 (lu01, lu02, lu03) Tietokonejärjestelmän rakenne ttk-91 ja sillä ohjelmointi

Tietokoneen toiminta, Kevät Copyright Teemu Kerola Järjestelmän eri tasot Laitteiston nopeus

Tietokoneen toiminta Keskeiset asiat Mitä hyötyä tästä on? Mitä seuraavaksi? Kurssit? Asiat? Teemu Kerola, Copyright 2010

Tiedon sijainti suoritusaikana (3) Luento 3 Konekielinen ohjelmointi (TTK-91, KOKSI) Miten tietoon viitataan? (4)

Luento 2 TTK-91 tietokone ja sen KOKSI simulaattori

Kertausluento luennoista 1-3 1

Luento 2 TTK-91 tietokone ja sen KOKSI simulaattori

Luento 12 Yhteenveto

Luento 12 Yhteenveto. Keskeiset asiat Mitä hyötyä tästä on? Mitä seuraavaksi? Kurssit? Asiat?

Keskeiset asiat Mitä hyötyä tästä on? Mitä seuraavaksi? Kurssit? Asiat? Teemu Kerola, Copyright Tavoitteet (4)

Luento 12 Yhteenveto. Keskeiset asiat Mitä hyötyä tästä on? Mitä seuraavaksi? Kurssit? Asiat? Teemu Kerola, Copyright 2010

Luento 3 Konekielinen ohjelmointi (TTK-91, KOKSI)

Luento 3 Konekielinen ohjelmointi (TTK-91, KOKSI)

Ongelma(t): Miten mikro-ohjelmoitavaa tietokonetta voisi ohjelmoida kirjoittamatta binääristä (mikro)koodia? Voisiko samalla algoritmin esitystavalla

Tavoitteet (4) Luento 12 Yhteenveto. Keskeisiä asioita. Mitä hyötyä tästä on? (2) Esimerkkikone: TTK-91 laitteisto suoritin - CPU

Luento 12 Yhteenveto. Keskeiset asiat Mitä hyötyä tästä on? Mitä seuraavaksi? Kurssit? Asiat? Teemu Kerola, K2000

Tietokoneen toiminta, K Tavoitteet (4)

Luento 3 Konekielinen ohjelmointi (TTK-91, KOKSI) Muuttujat Tietorakenteet Kontrolli Optimointi Tarkistukset

Luento 2 TTK-91 tietokone ja sen KOKSI simulaattori

Luento 12 Yhteenveto

Luento 2 TTK-91 tietokone ja sen KOKSI simulaattori. Miksi konekieltä? Tietokone TTK-91. Miksi ei oikeaa konekieltä?

Luento 3 Konekielinen ohjelmointi (TTK-91, KOKSI)

Luento 3 Konekielinen ohjelmointi (TTK-91, KOKSI) Muuttujat Tietorakenteet Kontrolli Optimointi Tarkistukset

Luento 12 Yhteenveto. Keskeiset asiat Mitä hyötyä tästä on? Mitä seuraavaksi? Kurssit? Asiat? 29/01/2001 Teemu Kerola, Copyright 2001

Luento 3 Konekielinen ohjelmointi (TTK-91, KOKSI) Muuttujat Tietorakenteet Kontrolli Optimointi Tarkistukset

Tiedon sijainti suoritusaikana. Luento 3 Konekielinen ohjelmointi (TTK-91, KOKSI)

Luento 12 Yhteenveto

Luento 2 TTK-91 tietokone ja sen KOKSI simulaattori

1. Keskusyksikön rakenne

Jakso 2 TTK-91 -tietokone ja sen KOKSI -simulaattori

Luento 5 (verkkoluento 5) Suoritin ja väylä

Luento 3 Konekielinen ohjelmointi (TTK-91, KOKSI)

Tietokoneen toiminta Keskeiset asiat Mitä hyötyä tästä on? Mitä seuraavaksi? Kurssit? Asiat? Teemu Kerola, Copyright 2003

Jakso 10 Ohjelman suoritus järjestelmässä

Jakso 2 TTK-91 -tietokone ja sen KOKSI -simulaattori

11/20: Konepelti auki

Luento 12 Yhteenveto. Tavoitteet. Keskeisiä asioita. Mitä hyötyä tästä on? Esimerkkikone: TTK-91 laitteisto. Tietokoneen toiminta 27.4.

Luento 2 TTK-91 tietokone ja sen simulaattori. Miksi konekieltä? Tietokone TTK-91. Miksi ei oikeaa konekieltä? TTK-91 (1) TTK-91 laitteisto

JAVA-PERUSTEET. JAVA-OHJELMOINTI 3op A JAVAN PERUSTEET LYHYT KERTAUS JAVAN OMINAISUUKSISTA JAVAN OMINAISUUKSIA. Java vs. C++?

Muistihierarkia Kiintolevyt I/O:n toteutus

Tietokoneen toiminta Copyright Teemu Kerola Tyypit Parametrit Aktivointitietue (AT) AT-pino Rekursio

Luento 4 Aliohjelmien toteutus

Käännös, linkitys ja lataus

Miksi konekieltä? Jakso 2 TTK-91-tietokone ja sen KOKSI-simulaattori. Tietokone TTK-91. Miksi ei oikeaa konekieltä?

Kertausluento 2 (lu04, lu05, lu06) Aliohjelmien toteutus Suoritin, väylä, tiedon esitys

Luento 10 Käännös, linkitys ja lataus

Jakso 2 TTK-91-tietokone ja sen KOKSI-simulaattori

TIE448 Kääntäjätekniikka, syksy Antti-Juhani Kaijanaho. 13. lokakuuta 2009

Miksi konekieltä? Jakso 2 TTK-91-tietokone ja sen KOKSI-simulaattori. Tietokone TTK-91. Miksi ei oikeaa konekieltä? TTK-91: tietotyypit (2)

Miksi konekieltä? Jakso 2 TTK-91-tietokone ja sen KOKSI-simulaattori. Tietokone TTK-91. Miksi ei oikeaa konekieltä? TTK-91: rekisterit

Jakso 2 TTK-91-tietokone ja sen KOKSI-simulaattori

TIEP114 Tietokoneen rakenne ja arkkitehtuuri, 3 op. Assembly ja konekieli

Luento 10 Käännös, linkitys ja lataus. Käännös Linkitys Dynaaminen linkitys Lataus

Jakso 10 Ohjelman suoritus järjestelmässä. Käännös Linkitys Dynaaminen linkitys Lataus

Suoritin. Jakso 5 Suoritin ja väylä. TTK-91 muistin rakenne. TTK-91 suorittimen rakenne

Transkriptio:

Luento 11 (verkkoluento 11) Tulkinta ja emulointi Java ohjelman suoritus Tavukoodi JVM Tulkinta Java-suoritin Käännös ja JIT-käännös JVM vs. Titokone

Java ohjelmien suoritus Java virtuaalikone SW HW Java tulkki Pentium II suoritin ( esimerkiksi) käännös, JITkäännös tulkitseminen Javasuo ritin SW HW iload i iload j iadd istore k Java suoritin k = i+j; Java ohjelma iload i iload j iadd istore k instr natiiviympäristö käännös tavukoodiksi Java byte-koodi (JIT) käännös instr latausmoduuli Pentium II suoritin SW HW 2

Java virtuaalikone (JVM) Hypoteettinen suoritin, toteutus eri tavoilla Geneerinen. Sitä on helppo simuloida kaikilla todellisilla suorittimilla Käännökseen tai tulkitsemiseen perustuva suoritus Useita säikeitä (thread) voi olla samanaikaisesti suorituksessa Tietorakenteet Mm. virtuaalikoneen suorittimen rekisterit Luodaan JVM:n käynnistämisen yhteydessä Käskyt Virtuaalikoneen suorittimen konekäskyt 226 käskyä 3

JVM pino JVM:n tietorakenteet kuten tavallinen aktivointitietuepino 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) Figs 4-8, 4-9, 4-10 [Tane13] toteutuksesta riippuen rajallinen tai dynaamisesti laajennettavissa tila loppu StackOverflowError, OutOfMemoryError http://java.sun.com/docs/books/vmspec/2nd-edition/html/vmspectoc.doc.html 4

Fig 4-9 [Tane13]. Stacks (2) LOAD iload 2 ADD iadd STORE istore 0 Use of an operand stack (not registers) for doing an (e.g., integer) arithmetic computation. Keskustele 6

Fig 4-10 [Tane13] The various parts of the IJVM memory. 7

JVM:n tietorakenteet (jatkuu) 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 (ongelma ainakin tosiaikajärjestelmissä) toteutuksesta riippuen kiinteän kokoinen tai dynaamisesti laajennettavissa ei tarvitse muodostaa yhtenäistä muistialuetta natiivijärjestelmän keossa tila loppu OutOfMemoryError 8

JVM:n tietorakenteet (jatkuu) JVM metodialue (JVM Method Area) yhteinen kaikille JVM säikeille vastaa tavallista kääntäjän tuottamaa koodisegmenttiä loogisesti osa JVM kekoa ks. Fig. 4-10 [Tane13] toteutuksesta riippuen kiinteän kokoinen tai dynaamisesti laajennettavissa tila loppu OutOfMemoryError 9

JVM:n tietorakenteet (jatkuu) 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 ks. Fig. 4-10 [Tane13] 10

JVM:n tietorakenteet (jatkuu) 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 11

JVM:n tietorakenteet (jatkuu) JVM rekisterit PC osoittaa johonkin JVM metodialueelle CPP osoittaa vakioaltaaseen ks. Fig. 4-10 [Tane13] 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ä 12

JVM:n tietorakenteet (jatkuu) 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 ks. Figs 4-12, 4-13 [Tane13] 13

Fig 4-12 [Tane13] The IJVM Instruction Set (2) Memory before executing INVOKEVIRTUAL. After executing it. 14

Fig 4-13 [Tane13] The IJVM Instruction Set (3) Memory before executing IRETURN. After executing it. 15

Paikalliset muuttujat sisältävä taulukko JVM kehyksen data 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 ks. Fig. 4-13 [Tane13] pinoarkkitehtuuri (vs. rekisteriarkkitehtuuri) 16

JVM:n tiedon osoitusmoodit (4) Välitön operandi Indeksoitu iinc 2 34 Java: xloc += 34; iinc 2 34 tehollinen muistiosoite (LV) + 2 Pino-osoitus iadd ks. Fig. 4-9 [Tane13] Java: a1 = a2+a3; korvaa pinon kaksi päällä olevaa kokonaislukua niiden summalla Taulukkoosoitus pinon kautta aload 1 iload 2 iaload istore 3 Korvaa pinon pinnalla olevat taulukon alkuosoite ja indeksi k.o. taulukon alkiolla Java: a = T[i]; Keskustele 17

Peruslaskutoimitukset JVM käskyt 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 ks. Fig. 4-11 [Tane13] 18

Fig 4-11 [Tane13] The IJVM Instruction Set (1) The IJVM instruction set. The operands byte, const, and varnum are 1 byte. The operands disp, index, and offset are 2 bytes. 19

Fig 4-11 [Tane10], Compiling Java to IJVM (1) a) A Java fragment. b) The corresponding Java assembly language. c) The IJVM program in hexadecimal. Keskustele 20

Java tulkki Emuloi JVM konekielen käskyjä (tavukoodia) Yksi (tavukoodi) käsky kerrallaan JVM rekisterit ja muistialueet emuloitu tulkin tietorakenteina muistissa vrt. Titokone ja TTK-91 Hidasta, mutta joustavaa iload 1 iload 2 iadd istore 3 Java tulkki data JMV: pino, keko metodialue, vakioallas, rekist, etc etc Pentium II suoritin 21

Käännös natiivikoneelle Eri tavat toteuttaa kääntäjä (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 standardi C-kääntäjällä natiivikoneen konekielelle alkuosa riittää tehdä kerran loppuosa on jo valmiina yleensä Ongelma: ei dynaamista linkitystä iload 1 iload 2 iadd istore 3 dl latausmoduuli käännös data Pentium II suoritin 22

JIT = Just-in-Time Emulointi ja/tai käännös tilanteesta riippuen Käännä luokka natiivikonekielelle dynaamisesti linkitettäväksi moduuliksi, mutta vasta 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ää Java JIT käännös JIT käännös dl latausmoduuli iload i iload j iadd istore k data Java tulkki Pentium II suoritin 23

Java suoritin: Sun PicoJAVA II 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 24

PicoJAVA II pino 64 (välimuisti-) laiterekisteriä JVM pinon huipun talletukseen loput JVM pinosta muistissa rekisterit (cache) 64 muisti Shawn Lauzon, Survey of the JavaChip 25

PicoJAVA II rekisterit 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 26

PicoJAVA ylim. käskyt 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 power on/off,... 27

TTK-91 Emulointi TTK-91 konekielen emulointi Titokoneen komponentti Yksi käsky kerrallaan TTK-91 koneen rekisterit ja muisti emuloitu tulkin (Titokone) tietorakenteina ks. simulaattorin koodi, proj. Titokone: http://www.cs.helsinki.fi/group/nodes/kurssit/tito/2012s/interpreter.java http://www.cs.helsinki.fi/group/nodes/kurssit/tito/2012s/processor.java load R1, 234 add R1, =5 mul R1, R2 data TTK-91 emulaattori Pentium II suoritin Keskustele 32

-- Loppu -- Välimuisti (1965, MauriceWilkes) IBM S/360 Model 85 1968 256 lohkoa á 64 tavua 33