390 likes | 472 Views
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. Niveauer af virtuelle maskiner. h øjniveausprog. symbolsk maskin kodeniveau. ISA niveauet / maskin kodeniveauet / maskinniveau.
E N D
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. dComNet
Niveauer af virtuelle maskiner højniveausprog symbolsk maskinkodeniveau ISA niveauet / maskinkodeniveauet / 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,… 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? 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. 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). 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 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. Hver iteration af løkken udfører en maskininstruktion. dComNet
Udførsel af maskininstruktion Involverer oftest den aritmetisk logiske enhed (ALU’en): 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 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 Celler i lageret udpeges af adresser 0,...,n-1. dComNet
Maskinord Celler grupperes i maskinord (words) 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? dComNet
IJVM • Simplificering Java’s Virtuelle Maskine (JVM): • 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
Eksempel: ordreformat bipush 6 0x10 0x06 iload 1 0x15 0x01 isub 0x64 iload 2 0x15 0x02 isub 0x64 istore 3 0x36 dComNet
32 bit 8 bit 32 bit IJVM Lagermodel Opdelt i tre områder (konstant pool, stakken, method area): Indlejret i et 4Gb lineært lager: 4.294.967.296 celler (1 byte/celle). dComNet
IJVM registre 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. dComNet
Udførsel af instruktioner Ændrer maskinens tilstand jf. ”Meaning”: bipush 6 0x10 0x06 (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: dComNet
Rekursive metodekald /* 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. dComNet
invokevirtual callee dComNet
ireturn 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 dComNet
? dComNet
IJVM ISA-niveau Kan implementeres via et mikroprogram på Mic-1 mikroarkitekturen: dComNet
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. dComNet
Windows (NOT SUPPORTED) • Se hjemmesiden – ijvm tools manual 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 ); // } dComNet
.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; istore r end_if: iload r // return r; ireturn // } dComNet
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 test.j fortolkes af ijvm test.bc 77 43 IJVM simulator dComNet
Antal argumenter for main Antal lokale variable for main Start adresse for main Start adresse for min 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 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 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-17Bachelororientering it: Store Aud. 14-15 Bachelororientering datalogi: Lille Aud. 14-16Kandidatorientering: Store Aud. 15-17I 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