ISA-niveauet (1) Machine Language: You try to shoot yourself in the foot only to discover you must first reinvent the gun, gunpowder, the bullet, and your.

Slides:



Advertisements
Lignende præsentationer
Niveauer af abstrakte maskiner
Advertisements

Grundlæggende IT Lektion 4 Sådan virker pc’en
Velkommen til Softwarekonstruktion
RT Speciale Evaluering af Java til udvikling af indlejrede realtidssystemer ved brug af en eksisterende ”Java Optimized Processor” (JOP) Speciale – efterår.
Pc-kørekort Sådan virker pc’en Keld Hinsch.
1 Pentium IA-32 Maskinarkitekturen. 2 Historie (1) Starter i 1970 med udviklingen af Intel 4004:
1 Pentium IA-32 Maskinarkitekturen Kort resume – uge 5.
Indledende Programmering Uge 2 - Efterår 2006 Selektioner og interaktion mellem objekter Susanne Brix Lindros.
KONCEPT Klasser og objekter En klasse beskriver et World ArrayList
Symbolsk maskinsprog.
Computer netværk og TCP/IP protokoller Kort resume – uge 6
Oversættelse af Java-programmer JavaBytecode javac Normalt oversættes Java-programmer til bytecode, som fortolkes af en JVM (Java Virtual Machine). Java.
Første generation (maskiner/operativsystemer) 45-55: radiorør Kun maskinsprog programmering = skrivning af nullerog ettaller Intet operativsystem programmør.
Grundlæggende programmering Efterår 2001
Representations for Path Finding in Planar Environments.
Hvordan man skriver koden.
01 – Java platform for starters. 2 NOEA2009Java-kursus – Java Platform Introduktion til Java Baggrund Hvad er Java? Faciliteter i Java.
Csaudk 1 NOV 2010 DATALOGISK INSTITUT DET NATURVIDENSKABELIGE FAKULTET AARHUS UNIVERSITET KANDIDATORIENTERING 1. Nov 2010.
Indledende Programmering Uge 5 - Efterår 2006 Om at udvikle korrekte og pålidelige programmer Susanne Lindros.
GP 10, 7/ Grundlæggende programmering Efterår 2001 Forelæsning 10 onsdag 7/ kl. 9:15 – 12:00.
FEN IntroJava AAU1 Opsamling: afvikling af Java-programmer Input fra keyboard og fil Fra en prompt Fra BlueJ Fra NetBeans.
FEN IntroJava AAU1 Java grundelementer Variable og datatyper Sætninger og udtryk Metoder.
Begreber og Redskaber 2 BRP.
DComNet1 Computere og Netværk (dComNet) Jens Kargaard Madsen Jens Bennedsen
Program for fremlæggelse
DComNet1 Computer netværk og TCP/IP protokoller. dComNet2 Maskinarkitektur.. fokus på intern organisation af en enkelt computer:
Forelæsning 3.1 Collections Javas for-each løkke
Begreber og Redskaber 3 BRP.
1 Tråde 2 Plan Trådbegrebet Synkronisering Koordinering Eksempel: et flertrådet spil.
Grunde til at jeg elsker dig
Fundamentale datastrukturer
FEN KbP/seminar2: design11 Kontraktbaseret programmering Seminar 2 Klassedesign – grundprincipper Eksempler: Stack Dictionary.
Objekter og klasser Rasmus D. Lehrmann DM
10. Datastrukturer. 2 Nordjyllands Erhvervakademi Collections library Datastrukturer i.NET kaldes normalt Collections Findes i namespace System.Collections.
DComNet1 Computere og Netværk (dComNet) Jens Kargaard Madsen Jens Bennedsen
1 Fundamentale datastrukturer. 2 Definitioner: abstrakt datatype, datastruktur Elementære datastrukturer og abstrakte datatyper : arrays, stakke, køer,
Procestræ under afvikling af cp init login shell cp cp src dest.
DComNet1 Computer netværk og TCP/IP protokoller. dComNet2 Maskinarkitektur.. fokus på intern organisation af en enkelt computer:
DComNet1 ISA-niveauet (1) Machine Language: You try to shoot yourself in the foot only to discover you must first reinvent the gun, gunpowder, the bullet,
Begreber og Redskaber 7. Plan for idag Rekursive underprogrammer Rekursive datastrukturer Rekursion vs iteration Rekursivt: Flette sortering.
8 RÅD VEDRØRENDE GOD PROGRAMMERING Effective (brown) Java.
11 - Exceptions. 2 NOEA2009Java-kursus – Exceptions Hvad er en exception? En undtagelse. Typisk en fejl der opstår runtime Afbryder det normale programflow.
FEN IntroJava AAU1 Klasser og objekter Grundbegreber Student-Course.
Fundamentale sprogbegreber
KF04 GRAY Item 2, 12, 22, 32, 42, 52. Consider a builder when faced with many constructor parameters Item 2.
C#: Udtryk og metoder Kilde: Joe Hummel. 2 Nordjyllands Erhvervakademi – 2008 Indhold “With regards to programming statements and methods, C# offers what.
03 – Udtryk og metoder. 2 NOEA2009Java-kursus – Udtryk og metoder Udtryk i Java Java har standard udtrykene… Værditildeling Subrutiner og funktionskald.
Længste plateau En klassisk problemstilling (Gries, 1981) - og her i Java!!! Denne opgave drejer sig om at bestemme længden af det længste plateau i en.
Process Control Hardware baggrund Process begrebet i et OS Process tilstande Context switching.
9. Interfaces. 2 Nordjyllands Erhvervakademi Objectives “Good class design starts with good application design — how many classes, do they relate.
Identitet vs lighed. Spørgsmål Hvad udskriver run metoden? 1.”Ens!” 2.”Forskellige!” 3.Ved ikke public class Driver{ public static void run(){ String.
DComNet1 ISA-niveauet (2). dComNet2 Niveauer af virtuelle maskiner ISA niveauet / maskinkodeniveauet / maskinniveau.
Paradigmer i Programmering 3. Højere ordens funktioner Idag: Højere ordens funktioner Algebraiske datatyper Næste gang: I/O, Filer, interaktive programmer.
Begreber og Redskaber 4. Plan for idag Om metoder, parametre, returværdier Et par ord om objekt-orientering Håndkøring af programmer.
Begreber og Redskaber 3. Plan for idag Om metoder, parametre, returværdier Overblik over klasser,objekter,nedarvning Et par ord om objekt-orientering.
I o p o DAIMI, AU, November 1999Programkonstruktion I9E.1 Konstruktion og brug af klasser – en stak og en HP-regnemaskine push pop.
Klasser og objekter. dIntProg, E08Klasser og objekter.2 Grundbegreber Klasser og objekter –beskrivelse –oprettelse Attributter og metoder –tilstand –opførsel.
DAIMIIntroducerende objektorienteret programmering3B.1 Definition af klasser Klasseskelet, metoder, et eksempel: dato.
 Michael E. Caspersen, 2000Introducerende objektorienteret programmering6A.1 Programmering med interfaces – en stak og en HP-regnemaskine push pop.
Trinvis forfinelse Systematisk, gradvis udvikling af programmer.
Indledende Programmering Uge 6 - Efterår 2006
DMasArk1 Pentium IA-32 Maskinarkitekturen. dMasArk2 Historie (1).. starter i 1970 med udviklingen af Intel 4004:
Kari Rye Schougaard, Ph.d.-stud. Værktøjer og Teknikker, 2006 A A R H U S U N I V E R S I T E T DATALOGISK INSTITUT Java på 20 minutter (eller lidt mere)
Programmering med interfaces Separering af specifikation, anvendelse og implementation.
Klasser og objekter – grundbegreber.  Michael E. Caspersen, 2001Introducerende objektorienteret programmeringKlasser og objekter.2 Klasser og objekter.
Programmering med interfaces – en stak og en HP-regnemaskine push pop.
Klasser og objekter. dIntProg, F08Klasser og objekter.2 Grundbegreber Klasser og objekter –beskrivelse –oprettelse Attributter og metoder –tilstand –opførsel.
I o p o DAIMI, AU, September 1999Introducerende objektorienteret programmering5C.1 Virkefeltsregler i Java int i; int j; int k; i = i+j; String t; Sequence.
Virkefeltsregler i Java int i; int j; int k; i = i+j; String t; Sequence s; int i; int j; Sequence s; String s; int i; int j;
Embedded SW – C & picoBlaze
Præsentationens transcript:

ISA-niveauet (1) Machine Language: You try to shoot yourself in the foot only to discover you must first reinvent the gun, gunpowder, the bullet, and your foot. Instruction set architecture level (ISA) niveauet – eller maskinkodeniveauet / maaskinniveauet På dette niveau sker programmering udfra nogle meget basale primitiver - som teksten i den gule boks antyder. dComNet

Niveauer af virtuelle maskiner højniveausprog symbolsk maskinkodeniveau ISA niveauet / maskinkodeniveauet / maskinniveau I sidste time introducerede vi det hierarki af virtuelle maskiner samt vi vil bruge som udgangspunkt til at studere maskinarkitektur. [GÅ KORT IGENNEM HIERARKIET OG GIVE DE DANSKE NAVNE] Hvert niveau definerer en virtuel maskine via de instruktioner, typer og håndtag der er til rådighed for en programmør på den pågældende maskine. Idag fokuseres på Niveau 2 – Instruction Set Architecture Level - som vi også vil kalde maskinkodeniveauet eller blot maskinniveau. dComNet

Instruction Set Architecture Level Grænseflade mellem hardware og software: k = 6-i-j oversættelse 01100011100 …. Fysisk maskine: Pentium, UltraSPARC, Intel 8051,… En af de ting der karakteriserer ISA niveauet er at det er grænsefladen mellem hardware og software. Programmer skrevet i højniveusprog vil blive oversat (ved brug af en compiler og en assembler) til absolut maskinkode dvs. en sekvens af 0 og 1’er der svarer til højniveuprogrammet, men som kan afvikles på den fysiske maskine. Det er absolutmaskinkode der kan udføres på en fysisk maskine baseret på eksempelvis Pentium, UltraSparc, eller Intel 8051 CPU som er de eksempler SCO har. Hvorfor programmere i maskinkode fremfor blot at bruge en oversætter? Der kan være behov for programmering i maskinkode hvis man har behov for at tilgå hardware nære ting, eksempelvis ifm. programmering af device drivere for ydre enheder eller andre centrale dele af et operativsystem. Eller hvis der er en del af et program hvor der er stor behov for hastighedsoptimering – altså meget effektiv kode. Endelig er det selvfølgelig relevant for de programmører som skal implementere en oversætter for en given maskinarkitektur. Interessant for maskinkodeprogrammører (eks: device drivere, optimering) og oversættere (compilere). dComNet

Fornuftige spørgsmål om en maskine 1. Hvad skal maskinen bruges til? 2. Hvordan programmeres maskinen? 3. Hvordan er maskinen opbygget? Vi introducerede en række spørgsmål til et niveau eller en maskine. Spørgsmål 2 og 3 svarede til eksternt vs. internt syn på en maskine. dComNet

Svar for ISA-niveauet Hvad skal maskinen bruges til? Til afvikling af programmer skrevet i højniveausprog. 2. Hvordan programmeres maskinen? I maskinkode, men i praksis skrives programmer i symbolsk maskinkode, som derefter oversættes til absolut maskinkode. Hvordan er maskinen opbygget? Baseret på von Neumann maskinarkitektur. Ad 1: dvs. en maskine på dette niveau skal i nogen designes så den kan understøtte de begreber vi har i højniveausprog, eksempelvis variable, forgreninger, løkker, metode/funktions/procedure kald. Derudover kan der være andre hensyn som eksempelvis anvendelse område: Pentium rettet med PC, mens Intel 8051 rettet mod indlejrede systemer. Ad 2: Ingen fornuftige folk vil programmere direkte i maskinkode dvs. i sekvenser af 0 og 1. Ad 3: Lad os starte med at se på 3 – von Neuman arkitektur som vi også ganske kort var rundt om sidste gang. dComNet

Opbygning og begreber Afvikle absolut maskinkode gemt i lageret (Main memory) Begreber: Kontrol- og beregningsenhed, registre. Lager, lagerceller, lagermodellen. Maskininstruktioner (ordrer), instruktionssæt, ordreformat. Ydre enheder (I/O devices). ISA-niveauet er opbygget baseret på von Neumann maskinarkitekturen. Von-Neuman arkitekturen er et nyttigt billede at have i hovedet ifm. ISA niveauet. [REPETER KORT VON-NEUMANN ARKITEKTUREN] De begreber der knytter sig til ISA niveauet er: [LØB DEM KORT IGENNEM] Lad os starte med at kigge på udførsel af maskinkode - som i første omgang relaterer sig til kontrol og beregningsenheden. dComNet

Instruktionsformat og repræsentation højniveau Symbolsk maskinkode absolut maskinkode k = 6-i-j; bipush 6 0x10 0x06 iload 1 0x15 0x01 isub 0x64 iload 2 0x15 0x02 isub 0x64 istore 3 0x36 Programmer på ISA niveau er absolut maskinkode (sekvens of 0 og 1). Fra sidst: højniveau -> symbolskmaskinsprog -> absolut maskinkode. Den absolutte maskinkode er her opskrevet i hexadecimal notation. [TAVLE OMKRING DECIMAL, HEXADECIMAL, BINÆR] Pointe: det vi har gemt i lageret er den binære representation af et program. Absolut maskinkode her opskrevet i hexadecimal notation, men ligger i binær representation i lageret. dComNet

Udførsel af maskinkode Via fetch-decode-execute cycle (SCO s. 54): Fetch the next instruction from memory into the instruction register. Change the program counter to point to the following instruction Determine the type of instruction just fetched. If the instruction uses a word in memory, determine where it is. Fetch the word, if needed, into a CPU register. Execute the instruction. Go to step 1 to begin executing the following instruction. [GÅ IGENNEM DE ENKELTE PUNKTER I CYKLEN – TEGN EVT PÅ TAVLEN SAMTIDIG] Ad 1: Svarer til fetch Ad 3: Svarer til decode Ad 4-5: Henter operander dvs. det instruktionen skal operere på. Ad 6: Involverer typisk den aritmetisk/logiske enhed. POINTE: hver iteration i fetch-decode-execute svarer til udførslen af en maskininstruktion. Lidt upræcist omkring 2: antager at placering af operander er læst ind som en del af instruktionen. Ex. en lageraddresse der udpeger et ord. Det er vel ikke altid tilfældet. Vil svare til at hele iload_1 bliver læst ind i på en gang dvs. også operanden 1. (kunne maaske implementeres saadan?) Operand begrebet er lidt uklart her. Hver iteration af løkken udfører en maskininstruktion. dComNet

Udførsel af maskininstruktion Involverer oftest den aritmetisk logiske enhed (ALU’en): ALU’en er den eneste ting på maskinen der kan udføre en beregning. Vigtig pointe: Før en beregning kan laves eksempelvis ifm. isub ordren skal de tal (operander) der skal trækkes fra hinanden ind i nogle registre på CPU’en således at de kan fødes ned i ALU’en og beregningen foretages. Dette involverer typisk at hente operanderne ude i lageret. Når beregningen er foretaget vil resultatet typisk blive gemt i et register som så senere skrives ud i lageret. MÅSKE NOGET ANIMATION PÅ DENNE SLIDE Operander må typisk hentes ind fra lageret før ALU’en kan opererer på dem ifm. udførsel af instruktionen. dComNet

Registre Kan lagre et antal bit afhængig af registerbredden. Kontrolinformation program counter instruktionsregister stack pointer stack frame pointer … Operander For lige kort at afrunde registre for nu: To anvendelser: 1) Kontrol information, eksempelvis programræller og instruktionregister – de andre ser vi eksempel på senere. 2) Operander ifm. med logiske og aritmetiske operationer. Ad tilgængelighed: eksempelvis er programtæller og instruktionsregister oftest ikke direkte tilgængelig for programmøren. Kun indirekte via udførsel af instruktioner. Ikke alle registre er tilgængelige for ISA-programmøren. dComNet

Lageret Indeholder program og operander (data). Organiseret som sekvens af celler som hver lagrer et antal bit: 1 byte er 8 bit Sørg for at operand begrebet er klart nu (skal være klart efter 6-i-j eksemplet). Hvor mange forskellige værdier der kan gemmes i hver celle? a) 2^8 = 256 b) 2^12 = 4096 c) 2^16 = 65536 Addressering: registre eksempelvis programtæller PC udpeger celler i lageret. Dette betyder at bredden af registre bestemmer hvor mange celler der kan tilgås: Hvor stor bredde har vi brug for i disse eksempler? Behov for at adressere 12 celler = 4 bits Behov for at adressere 8 celler = 3 bits Behov for at adressere 6 celler = 3 bits Der er gennem tiderne været brugt mange forskellig cellebredder, men i dag er lagre typiske organiseret i celler hver af 8 bit. Celler i lageret udpeges af adresser 0,...,n-1. dComNet

Maskinord Celler grupperes i maskinord (words) Hensigtsmæssigt hvis maskinen eksempelvis ALU’en kan operere på operander der fylder mere en 1 byte, eksempelvis 64 bits heltal hvilket svarer til 8 bytes. Typisk vil registre så også være 64 bit brede og ordstørrelsen vil så typisk matche dette. TAVLE: 1) Illusterer alignment. Pointe: Hvorvidt ord skal alignes på de naturlige grænser afhænger af hvorledes de addresser der ligger i registre fortolkes dvs. hvorvidt det er en ord-adresse (dvs. nummeret på et ord) eller om det er en celle adresse dvs. nummeret på en celle + og man så læser de næste 4 bytes startende derfra. 2) Illustrer big-endian vs. little endian Typisk 4 eller 8 byte (32 eller 64 bit). Størrelsen er typisk relateret til bredden af registre på maskinen. dComNet

Foreløbig opsummering Maskinordrer (programmet) befinder sig i lageret. Operander (data) befinder sig i lageret og i registre. Kontrolinformation befinder sig i registre. Hvordan tilgås operander i lageret? Hvordan implementeres metodekald i maskinkode? Lad os lige opsummere hvad vi har indtil videre: Svaret på de to sidste spørgsmål er meget maskinafhængige Vi vil i første omgang se på disse to spørgsmål ifm. den maskine som hedder IJVM som vi vil bruge en del tid på i kurset. dComNet

IJVM Simplificering Java’s Virtuelle Maskine (JVM): Simplificering af Java Virtual Maskine mht. to aspekter: Kun heltals og booleske operationer dvs. instruktioner på strenge og lignende er fjernet. De objektorientede dele er fjernet. Sliden viser instruktionssættet for IJVM maskinen dvs. de primitiver der er tilrådighed for programmøren. [LØB KORT IGENNEM INSTRUKTIONERNE – ORDET STAK ER CENTRALT] Det ikke nok at sige hvilke instuktioner der findes, det er nødvendigt helt præcist at sige hvilke bitmønstre der svarer til hvilke instruktioner – dettte kaldes ordreformat. Kun heltalsoperationer og ingen objektorientering. dComNet

? Overvej med DIG SELV hvad outputtet er fra følgende program: Diskuter med din nabo hvad svaret er .method main bipush 88 bipush 2 bipush 3 iadd ireturn 2 3 5 88 90 93 udefineret dComNet

IJVM ordreformat dComNet Denne slide viser generelt ordreformatet for JVM og dermed IJVM. Ordrer består af en opkode del og en operand som på forskelig vis specifecerer operanden til instruktionen. Det er ikke hele formatet der bruges i forbindelse med IJVM, da den kun har et begrænset instruktionssæt i forhold til JVM. dComNet

Eksempel: ordreformat bipush 6 0x10 0x06 iload 1 0x15 0x01 isub 0x64 iload 2 0x15 0x02 isub 0x64 istore 3 0x36 Udfra dette ordresæt kan man så programmere maskinen. dComNet

IJVM Lagermodel Opdelt i tre områder (konstant pool, stakken, method area): Method area: her ligger vores IJVM maskinkode dvs. programmet ligger i method area. Opdelt i bytes. Dvs. method area er som et array af bytes. Stakken: Bruges til at lave beregninger på samt ifm. med udførsel af metoder (det vender vi snart tilbage til). Opdelt i maskinord dvs. virker som et array af maskinord på 32 bit. Constant pool: bruges til at gemme visse konstanter samt til at identificere hvor i method area koden for de forskellige metoder i programmet ligger. Opdelt i maskinord dvs. virker som et array af maskinord af 32 bit. Dvs. lageret kan opfattes som bestående af tre logiske lagre. TAVLE: Diskuter dernæst indlejring og tegn denne variant op på tavlen. 32 bit 32 bit 8 bit Indlejret i et 4Gb lineært lager: 4.294.967.296 celler (1 byte/celle). dComNet

IJVM registre Udpeger bunden (word) af det aktuelle stakafsnit. Program Counter (PC): 32-bit register Udpeger aktuel instruktion (byte) i method area. Stack Pointer (SP) : 32-bit register Udpeger øverste element (word) på stakken. Local Variable Frame Pointer (LV): 32-bit register Udpeger bunden (word) af det aktuelle stakafsnit. Constant Pool Pointer: 32-bit register Udpeger bunden (word) af konstant pool i lageret Ingen registre kan direkte tilgås via IJVM instruktioner. At der ikke er nogle registre direkte tilgængelig for programmøren på ISA skyldes at IJVM (og JVM) er en såkaldt stakmaskine Dvs. man bruger en stak i stedet for registre til at gemme mellemresultater ifm. beregninger. Deres indhold kan selvfølgelig ændres indirekte som resultat af udførsel af instruktioner. dComNet

Udførsel af instruktioner Ændrer maskinens tilstand jf. ”Meaning”: bipush 6 0x10 0x06 Den præcise ændring kunne selvfølgelig også opskrives mere formelt. TAVLE: eksempel på ændringer ved bipush 6. (PC, SP, LV, Stak) → (PC', SP', LV', Stak') dComNet

Stakken En “abstraktion” ovenpå lageret. Bruges til at lave beregninger: Bruges til udførsel af metodekald: En anden vigtigt element i IJVM er stakken. Abstration ovenpå lageret i den forstand at lageret er et lineært lager af celler og vi ikke får mere eller mindre lager afhængig af hvorledes vi bruger stakken Ad metodekald: bruges til at kontrol information og overføre parametre samt holde styr på lokale variable. Vi vil se mere i detalje på metode kald i det følgende. dComNet

Rekursive metodekald Værdier af parametre er lokale for hver instans? /* towers.java */ public class towers { public static void towers(int n, int i, int j) { int k; if (n == 1) System.out.println ("Move a disk from " + i + " to " + j); else { k = 6 - i - j; towers(n-1, i, k); towers(1, i, j); towers(n-1, k, j); } public static void main(String[] args) { towers(3, 1, 3); Værdier af parametre er lokale for hver instans? Returnering til den korrekte instans ved terminering? dComNet

Metodekald Understøttes af instruktionerne: invokevirtual, ireturn, iload, istore Baseret på begrebet stakafsnit (stack frame): Etableres når en metode kaldes (invokevirtual). Nedlægges når metoden returnerer (ireturn). Et stakafsnit indeholder: Argumenter/parametre for metoden (tilgås via iload) Værdier for lokale variable (tilgås via iload/istore) Kontrolinformation til genetablering af tilstand. Registret LV udpeger altid bunden af det aktuelle stakafsnit. Gå først igennem tingene på slide. Dernæst TAVLE: motiver de forskellige ting omkring stakafsnit. dComNet

invokevirtual callee dComNet Denne slide viser mere præcist hvad der sker på IJVM omkring metodekald. [GÅ IGENNEM FIGUREN – RELATIVT STOR DETALJE. REFERER TIL TAVLE MED DET ABSTRAKTE KALD] Forklar et OBJREF er et levn fra JVM hvor metoder altid tager en pointer til det objekt de er en del af. Svarer til at alle metoder tager et argument/parameter. Desuden overskriver denne implementation OBJREF med linkprt + så den bliver faktisk brugt til noget. istore og iload bruges til at tilgå parametre relativt udfra indholdet af registret LV. dComNet

ireturn [Gå igennem ireturn + specialt at returværdien er tilgængelig via stakken.] dComNet

? Overvej med DIG SELV hvad outputtet er fra følgende program: Diskuter med din nabo hvad svaret er .method test .args 2 .define x = 1 iload x bipush 1 isub ireturn .method main bipush 88 bipush 2 invokevirtual test ireturn 1 dComNet

? dComNet

IJVM ISA-niveau Kan implementeres via et mikroprogram på Mic-1 mikroarkitekturen: Dvs. IJVM ISA kan implementeres i hardware af denne mikroarkitekturen samt fortolker i form af mikroprogrammet. I forbindelse med øvelserne de næste par uger kommer i til at arbejde med IJVM maskinarkitekturen. Dog ikke i form af en fysiske maskine men i form af en simulator… dComNet

daimi-setup -a /users/kursus/dArk/dArk-tools IJVM Simulator Kan afvikles på alle DAIMI Linux-maskiner efter daimi-setup -a /users/kursus/dArk/dArk-tools ijvm-asm oversætter fra symbolsk IJVM maskinkode ijvm simulerer udførelsen af IJVM maskinkode Læs i IJVM Tools Manual tilgængelig via hjemmesiden. Afvikler IJVM maskinkode som om den var en fysisk arkitektur. Denne IJVM simulator opfører sig helt som en tilsvarende fysisk maskine der implementerede IJVM ISA maskinarkitekturen. Den kode man skriver kan køre på såvel en simulator som en tilsvarende fysisk chip. Illustrerer en af hovedpointerne ved virtuelle maskiner – man kan programmere dem som om det var en fysisk maskine og det er transparent for programmøren hvorledes maskinen er implementeret. dComNet

Windows (NOT SUPPORTED) Se hjemmesiden – ijvm tools manual dComNet

dComNet

IJVM manualen indeholder en mere præcis specifikation af instruktionerne, specielt operand delen en tabellen fra SCO. I tvivltilfælde er det IJVM Tools manualen der gælder. Der er nogle ting omkring talrepræsentation i IJVM tool manualen endnu ikke er helt forståelige – men om et par uger skulle disse begreber også være på plads. dComNet

test.j .method main // int main .args 3 // ( int a, int b ) .define a = 1 .define b = 2 // { bipush 88 // Push object reference. iload a iload b invokevirtual min ireturn // return min ( a, b ); // } Det vil vi gøre udfra følgende lille program test.j skrevet i IJVM symbolskmaskinkode. Vi kommer tilbage til symbolskmaskinsprogprogrammering på fredag. Programmet beregner minimum af to heltal og består af to metoder, main som er hovedmetoden og en metode min. Her er vist main metoden. [Løb kort igennem programmet] Bemærk at programmet er annoteret med kommentarer for et tilsvarende højniveauprogram. Bemærk hvorledes lokale variable/parametre tilgås. dComNet

// stack = a - b, ... ; a - b < 0 => a < b iflt else .method min // int min .args 3 // ( int a, int b ){ .define a = 1 .define b = 2 .locals 1 // int r; .define r = 3 iload a // if ( a >= b ) iload b isub // stack = a - b, ... ; a - b < 0 => a < b iflt else iload b // r = b; istore r goto end_if else: // else iload a // r = a; end_if: iload r // return r; ireturn // } Her er min metoden. [Gå igennem min metoden] TAVLE: tegn et stakafsnit for kaldet af min. Skal gerne gøre det klart hvorledes LV bruges. dComNet

IJVM simulator test.j oversættes til ijvm-asm test.j test.bc main index: 0 method area: 40 bytes 00 03 00 00 10 58 15 01 15 02 b6 00 01 ac 00 03 00 01 15 01 15 02 64 9b 00 0a 15 02 36 03 a7 00 07 15 01 36 03 15 03 ac constant pool: 2 words 00000000 0000000e fortolkes af ijvm test.bc 77 43 IJVM simulatoren implementerer IJVM ISA maskinarkitekturen. IJVM programmet test.j kan udføres på IJVM maskinen ved at lave følgende skridt. Vis også demo vha. cygwin. IJVM simulator dComNet

Antal argumenter for main main index: 0 method area: 40 bytes 0 00 03 2 00 00 4 10 58 bipush 88 6 15 01 iload 1 8 15 02 iload 2 10 b6 00 01 invokevirtual 1 13 ac ireturn 14 00 03 16 00 01 18 15 01 iload 1 20 15 02 iload 2 22 64 isub 23 9b 00 0a iflt 10 26 15 02 iload 2 28 36 03 istore 3 30 a7 00 07 goto 7 33 15 01 iload 1 35 36 03 istore 3 37 15 03 iload 3 39 ac ireturn constant pool: 2 words 00000000 0000000e Antal argumenter for main Antal lokale variable for main Her er indholdet af method area vist på en anden form så det er klart hvordan indholdet svarer til det oprindelige program. Indsat et linieskift der hvor min starter. TAVLE: Tegn udlægningen i lageret på tavle fra tidligere slide Bemærk 2x2 bytes i starten af hver metode som specificerer antallet af parametre/argumenter samt antallet af lokale variable er specificeret først i metoden således at invokevirtual etablere stakafsnittet korrekt. Forklar også hvorledes konstant pool bruges til at pege på starten af metoderne. Få det til at passe med indholdet af konstant pool for min og main metoden. Start adresse for main Start adresse for min dComNet

ijvm test.bc 77 43 IJVM Trace of foo stack = 0, 1, 43, 77, 15 bipush 88 [10 58] stack = 88, 0, 1, 43, 77, 15 iload 1 [15 01] stack = 77, 88, 0, 1, 43, 77, 15 iload 2 [15 02] stack = 43, 77, 88, 0, 1, 43, 77, 15 invokevirtual 1 [b6 00 01] stack = 12, 13, 0, 43, 77, 21, 0, 1 iload 1 [15 01] stack = 77, 12, 13, 0, 43, 77, 21, 0 iload 2 [15 02] stack = 43, 77, 12, 13, 0, 43, 77, 21 isub [64] stack = 34, 12, 13, 0, 43, 77, 21, 0 iflt 10 [9b 00 0a] stack = 12, 13, 0, 43, 77, 21, 0, 1 iload 2 [15 02] stack = 43, 12, 13, 0, 43, 77, 21, 0 istore 3 [36 03] stack = 12, 13, 43, 43, 77, 21, 0, 1 goto 7 [a7 00 07] stack = 12, 13, 43, 43, 77, 21, 0, 1 iload 3 [15 03] stack = 43, 12, 13, 43, 43, 77, 21, 0 ireturn [ac] stack = 43, 0, 1, 43, 77, 15 ireturn [ac] stack = 43 return value: 43 Lad og nu gå igennem afviklingen af programmet når det kaldes med parametrene 77 og 43 og specielt fokusere på stakindholdet. [Gå detaljere igennem stakindhold på tavlen.] [Følg med i afviklingen af progammet på projektor] dComNet

Opsummering ISA-niveauet: Maskininstruktioner og instruktionsformat. Absolut maskinkode. Registre og lagermodellen. IJVM maskinen: Registre: PC, SP, LV, CPP. Lagermodel: method area, constant pool, stakken. Metodekald og stakafsnit, parametre og lokale variable. IJVM simulatoren --> --> dComNet

Bachelor og kandidat orientering HUSK: Bachelor- og kandidatorientering i lille og store aud. (INCUBA) fredag d. 28 oktober 14-17 Bachelororientering it: Store Aud. 14-15 Bachelororientering datalogi: Lille Aud. 14-16 Kandidatorientering: Store Aud. 15-17 I kan møde og stille spørgsmål om kurserne til undervisere fra instituttets forskningsgrupper i området udenfor auditoriet - hvor der også vil være kaffe/the og kage