Præsentation er lastning. Vent venligst

Præsentation er lastning. Vent venligst

Oversættelse af Java-programmer JavaBytecode javac Normalt oversættes Java-programmer til bytecode, som fortolkes af en JVM (Java Virtual Machine). Java.

Lignende præsentationer


Præsentationer af emnet: "Oversættelse af Java-programmer JavaBytecode javac Normalt oversættes Java-programmer til bytecode, som fortolkes af en JVM (Java Virtual Machine). Java."— Præsentationens transcript:

1 Oversættelse af Java-programmer JavaBytecode javac Normalt oversættes Java-programmer til bytecode, som fortolkes af en JVM (Java Virtual Machine). Java kan (ligesom alle andre sprog) også oversættes til maskinkode. Normalt vil oversættelse af Java være via bytecode og i form af JIT-kompilering (Just-In-Time). JavaBytecode javac Maskinsprog jit- oversætter

2 Håndoversættelse fra Java til Lippiatt++ JavaLippiatt++ hånd- kraft Krav om korrekt håndtering af: addition ram/cpu dataoverførsel løkke procedurekald Ikke krav om håndtering af klasser/objekter i/o

3 Maskinprogram = sekvens af maskininstruktioner, der udføres 1 ad gangen CPU-cyklus = 1. Hent instruktion. 2. Udfør instruktion. Anbring næste instruktion i IR Inkrementer IP start Udfør instruktion i IR Stop? stop

4 Syntaks af maskininstruktioner (Lippiatt++) 0001001110000001

5 Maskininstruktion = operationskode + operander 0001 0011 1000 0001 0001 rrrr mmmmmmmm Op-kode # Operand

6 Symbolsk maskinsprog (assembler-sprog) STORE R M - er den symbolske maskininstruktion, der svarer til (den "rigtige") maskininstruktion 0001001110000001 Op-kode erstattet af symbolsk navn på operationen. Register-numre erstattet af variable R0,R1,.. RAM-adresser erstattet af vilkårlige variable M,X,Y,.. Assembleren oversætter assemblerinstruktioner til maskininstruktioner 1-til-1. Semantik af assembler- og maskininstruktioner kan derfor behandles under et.

7 Relevante tolkninger (jf. Lippiatts "klassifikation") af binære data Alphanumerisk information: tegn, f.eks. A=01000001 Numerisk information: det binære talsystem: 01000001=65 Kontekstafhængig information: brug af bits til at repræsentere en persons køn etc. (måske bedre at bruge String sex = female etc.)

8 Semantik (effekt af udførelse) STORE R M / 0001001110000001 Effekten af at udføre STORE R M er at kopiere indholdet af RAM-adressen M til registeret med nummeret R. Kan også skrives: [M] <- [R] Den variable M oversættes af assembleren til f.eks. 10000001. Den variable R oversættes af assembleren til f.eks. 0011.

9 CPU/RAM dataoverførsel LOAD M R STORE R M Intra cpu dataoverførsel MOVE R R' LOADCONST [R] Const Aritmetik ADD R R' SUBTRACT R R' Control flow JUMP M JUMP_POS0 R M CALL M RETURN Instruktionssættet i Lippiatt++

10 Symboler i flowdiagram start stop LOAD, ADD etc. Pil til næste instruktion JUMP_POS0 Instruktion (alm) betinget hop-instruktion

11 Flowdiagram for Count start Initia- lisering i <.. stop process_record() i=i+1

12 Oversættelse af i=i+1 ADD R0 R1 Forudsætning: R0 indeholder i. R1 indeholder konstanten 1.

13 Oversættelse af N=N+X (jf. Lippiatt s. 23-25) LOAD N R1 ADD R1 R0 STORE R1 N Register R0 indeholder en værdi (nemlig X) vi vil lægge til indholdet af memoryadresse N Kun få af instrutionerne er egentlige aritmetiske eller logiske operationer, de fleste er dataoverførsler. Operander skal være i cpu-registre.

14 Oversættelse af i=i+1 Nu uden forudsætning om at i og 1 allerede er overført til cpu-registre !! LOAD I R0 LOADCONST R1 1 ADD R0 R1 STORE R0 I

15 Oversættelse af løkkens betingelse (i <.. ?) MOVE R0 R3 SUBTRACT R3 R2 JUMP_POS0 R3 A2 Forudsætninger R0 indeholder i. R2 indeholder værdien af Integer.ParseInt(args[0]) A2 er adressen på den instruktion, der skal udføres hvis vi skal ud af løkken Ide: Testen (i = 0). Kun hop hvis vi skal ud af løkken.

16 Oversættelse af procedurekald CALL PR.. PR:.. RETURN Virker fordi RETURN bruger SP-registret til at hente adressen på den instruktion, der skal fortsættes med efter procedurekaldet. Den er nemlig gemt pga. CALL Bemærk at vi i symbolsk assembler også har etiketter/labels.

17 Implementation af CALL og RETURN uden brug af SP CALL PR.. PR:.. RETURN [Q] <- [PC] [PC] <- PR [PC] <- [Q] Denne løsning kan ikke håndtere indlejrede ("nestede") procedurekald !

18 Implementation af CALL og RETURN (med rekursion) CALL PR.. PR:.. RETURN Retur-adresser for mere end et procedurekald gemmes på stakken. Indholdet af SP-registret er adressen på toppen af stakken. [[SP]] <- [PC] [SP] <- [SP]-1 [PC] <- PR [SP] <- [SP]+1 [PC] <- [SP]

19 Vinkel: Operativsystemet skaber et antal "virtuelle maskiner" (jf. Tanenbaum 1.4.3) Maskine Maskinsprog Øvrige operativsystem Skedulatordel af operativsystem Systemprogrammer (andre end OS) Applikations- programmer

20 Monolitisk kerne vs. mikro-kerne Monolitisk kerne 1 stort program Uoverskueligt (måske) Alt kører i kerne-mode, dvs. risikabelt Linux, Windows 95/98 Tanenbaum: "Linux is obselete.." Mikro-kerne Modulopdeling Kun det mest nødvendige kører i kerne-mode Pris i form af tid til kontekstskift Windows NT/2000


Download ppt "Oversættelse af Java-programmer JavaBytecode javac Normalt oversættes Java-programmer til bytecode, som fortolkes af en JVM (Java Virtual Machine). Java."

Lignende præsentationer


Annoncer fra Google