1 / 20

Oversættelse af Java-programmer

Oversættelse af Java-programmer. Java. Bytecode. 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

ivria
Télécharger la présentation

Oversættelse af Java-programmer

An Image/Link below is provided (as is) to download presentation Download Policy: Content on the Website is provided to you AS IS for your information and personal use and may not be sold / licensed / shared on other websites without getting consent from its author. Content is provided to you AS IS for your information and personal use only. Download presentation by click this link. While downloading, if for some reason you are not able to download a presentation, the publisher may have deleted the file from their server. During download, if you can't get a presentation, the file might be deleted by the publisher.

E N D

Presentation Transcript


  1. Oversættelse af Java-programmer Java Bytecode 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). Java Bytecode Maskinsprog javac jit- oversætter

  2. Håndoversættelse fra Javatil Lippiatt++ Java Lippiatt++ 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 start CPU-cyklus = 1. Hent instruktion. 2. Udfør instruktion. • Anbring næste • instruktion i IR • Inkrementer IP • Udfør • instruktion i IR stop Stop?

  4. Syntaks af maskininstruktioner(Lippiatt++) 0001001110000001

  5. Maskininstruktion = operationskode + operander 000100111000 0001 Op-kode # Operand Operand 0001rrrrmmmmmmmm

  6. Symbolsk maskinsprog(assembler-sprog) STORERM • - 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) STORERM /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. Instruktionssættet i Lippiatt++ • 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

  10. Symboler i flowdiagram start stop Instruktion (alm) LOAD, ADD etc. Pil til næste instruktion JUMP_POS0 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 < [R3]) omformuleres til (i - [R3]>= 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) [[SP]] <- [PC] [SP] <- [SP]-1 [PC] <- PR [SP] <- [SP]+1 [PC] <- [SP] CALL PR .. PR: .. RETURN • Retur-adresser for mere end et procedurekald gemmes • på stakken. • Indholdet af SP-registret er adressen på toppen af stakken.

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

  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

More Related