Præsentation er lastning. Vent venligst

Præsentation er lastning. Vent venligst

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.

Lignende præsentationer


Præsentationer af emnet: "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."— Præsentationens transcript:

1 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

2 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

3 Instruction Set Architecture Level
Grænseflade mellem hardware og software: k = 6-i-j oversættelse …. 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

4 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

5 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

6 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

7 Instruktionsformat og repræsentation
højniveau Symbolsk maskinkode absolut maskinkode k = 6-i-j; bipush x10 0x06 iload x15 0x01 isub 0x64 iload x15 0x02 isub x64 istore x36 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

8 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

9 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

10 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

11 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

12 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

13 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

14 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

15 ? 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

16 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

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

18 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: celler (1 byte/celle). dComNet

19 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

20 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

21 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

22 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

23 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

24 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

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

26 ? 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

27 ? dComNet

28 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

29 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

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

31 dComNet

32 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

33 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

34 // stack = a - b, ... ; a - b < 0 => a < b iflt else
.method min // int min .args // ( int a, int b ){ .define a = 1 .define b = 2 .locals // 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

35 IJVM simulator test.j oversættes til ijvm-asm test.j test.bc
main index: 0 method area: 40 bytes b ac 00 03 b 00 0a a7 00 ac constant pool: 2 words e 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

36 Antal argumenter for main
main index: 0 method area: 40 bytes bipush 88 iload 1 iload 2 10 b invokevirtual 1 13 ac ireturn iload 1 iload 2 isub 23 9b 00 0a iflt 10 iload 2 istore 3 30 a goto 7 iload 1 istore 3 iload 3 39 ac ireturn constant pool: 2 words e 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

37 ijvm test.bc 77 43 IJVM Trace of foo stack = 0, 1, 43, 77, 15
bipush [10 58] stack = 88, 0, 1, 43, 77, 15 iload [15 01] stack = 77, 88, 0, 1, 43, 77, 15 iload [15 02] stack = 43, 77, 88, 0, 1, 43, 77, 15 invokevirtual [b ] stack = 12, 13, 0, 43, 77, 21, 0, 1 iload [15 01] stack = 77, 12, 13, 0, 43, 77, 21, 0 iload [15 02] stack = 43, 77, 12, 13, 0, 43, 77, 21 isub [64] stack = 34, 12, 13, 0, 43, 77, 21, 0 iflt [9b 00 0a] stack = 12, 13, 0, 43, 77, 21, 0, 1 iload [15 02] stack = 43, 12, 13, 0, 43, 77, 21, 0 istore [36 03] stack = 12, 13, 43, 43, 77, 21, 0, 1 goto [a ] stack = 12, 13, 43, 43, 77, 21, 0, 1 iload [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

38 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

39 Bachelor og kandidat orientering
HUSK: Bachelor- og kandidatorientering i lille og store aud. (INCUBA) fredag d. 28 oktober Bachelororientering it: Store Aud Bachelororientering datalogi: Lille Aud Kandidatorientering: Store Aud 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


Download ppt "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."

Lignende præsentationer


Annoncer fra Google