Java-Prozessoren Die Java Virtual Machine spezifiziert ... Java Instruktions-Satz Datentypen Operanden-Stack Konstanten-Pool Methoden-Area Heap für Laufzeit-Daten Class File Format 26 ©LR-ifi-UNIZH-2001 Java-Prozessoren Die Java Virtual Machine Java Instruktions-Satz 200 OpCodes (jeweils 8 Bits) 25 Variationen 3 reservierte OpCodes 0, 1, 2, 3, ... Operanden keine Register-Spezifikationen elementare und komplexe Instruktionen lokale Variable relativ zu Basiszeiger sehr kompakter Code ( ~ 1.8 Bytes) Datentypen byte short integer long float double char object returnAddress 27 ©LR-ifi-UNIZH-2001 Java-Prozessoren Die Java Virtual Machine Java Instruktions-Satz sehr leistungsfähige Instruktionen (Operanden und Resultat auf Stack) z. B. integer add JVM iadd Typischer RISC load load add tos tos-1 store tos-1 analoge Instruktionen z. B. fadd iload index bipush byte ifeq single float add load integer from local variable push signed integer branch if equal to 0 28 ©LR-ifi-UNIZH-2001 Java-Prozessoren Die Java Virtual Machine Instruktionsmix aus mehreren Benchmarks Stack Operationen: dup, push, load und store auf lokale Variable Load Objekt: Zugriff auf Objekte in Arrays und auf dem Heap Store Objekt: Zugriff auf Objekte in Arrays und auf dem Heap Compute: ALU, FP, Computed Branches 7% Call / Return: virtuelle und nicht-virtuelle Method Invocation 28% 43% 5% 17% 29 ©LR-ifi-UNIZH-2001 Java-Prozessoren Die Java Virtual Machine picoJava™ Prozessor für • Network Computer • Internet Chip für Netzwerk-Anwendungen (PDAs, Pagers etc.) • Zellular-Telephon und Telekommunikations-Prozessoren • Traditionelle “embedded” Anwendungen Anforderungen an Produkte für “embedded”-Märkte • Robuste Programme — • Komplexe Programme durch Teams entwickelt — • OO-Sprachen und -Entwicklungsumgebungen Wiederbenutzung von Codes von einer Produktgeneration zur nächsten — • • • Graceful Recovery vs. Crash Portabler Code Geringe Systemkosten (Prozessor, ROM, DRAM etc.) Hohe Leistung Geringe Leistungsaufnahme 30 ©LR-ifi-UNIZH-2001 Java-Prozessoren Implementierungen der Java Virtual Machine Java Java —> JVM byte code byte code Interpreter OS Irgendeine CPU 31 ©LR-ifi-UNIZH-2001 Java-Prozessoren Implementierungen der Java Virtual Machine Java Java Java —> JVM byte code Java —> JVM byte code byte code byte code Just-in-time Compiler Interpreter Binärer Maschinen-Code OS OS Irgendeine CPU Irgendeine CPU 32 ©LR-ifi-UNIZH-2001 Java-Prozessoren Implementierungen der Java Virtual Machine Java Java Java Java —> JVM byte code Java —> JVM byte code Java —> JVM byte code byte code byte code byte code Just-in-time Compiler Interpreter Binärer Maschinen-Code OS OS OS Irgendeine CPU Irgendeine CPU picoJava™ 33 ©LR-ifi-UNIZH-2001 Java-Prozessoren JVM picoJava™ Blockdiagramm I / O Bus and Memory Interface Unit 32 32 INSTRUCTION Cache 0-16 KB PC and Trap Control DATA Cache 0-16 KB Execution Control Logic Data Cache Controller 32 Instruction Buffer Instruction Decode and Folding 32 Stack Cache Unit (64 Entries) Integer Unit Data Path Floating Point Data Path 96 konfigurierbar 34 ©LR-ifi-UNIZH-2001 Java-Prozessoren JVM picoJava™ Pipeline u Einfache 4-stufige Pipeline u Compute nur vom Stack nie vom Hauptspeicher u Execute Phase hat Zugriff zum Data Cache FETCH DECODE Fetch 4-byte cache lines into the instruction buffer Decode up to 2 instructions Folding logic DATA CACH EXECUTE & CACHE WRITE BACK Execute for one or more cycles Write results back into operand stack u Stack-basierte Architekturen greifen nach einer LOADInstruktion immer auf die durch das LOAD gelieferten Daten zu. (—> Zugriff auf das Data Cache ist nicht “pipelined”). u picoJava™ Pipeline unterstützt gezielt den Durchsatz objekt-orientierter Programme • Unterstützung für Method Invocation und verdeckte Zugriffe auf Lokale Variable. • Unterstützung für Thread Synchronization und High Performance Garbage Collection. 35 ©LR-ifi-UNIZH-2001 Java-Prozessoren JVM picoJava™ Stack Architektur Method Frame 0 Method Frame 1 Method Frame 2 Method Frame 3 Return Program Parameters & Locals Return Variables Frame State Return Frame Operand Stack Return Constant Pool Current Method Vector Current Method Monitor Address 36 ©LR-ifi-UNIZH-2001 Java-Prozessoren JVM picoJava™ Dribbling Stack Mechanismus Restore Low Watermark • • • • Pipeline Parameters & Locals ••• Operand Stack Data Cache • • • High Watermark Save • Stack zwischen Methoden überlappend Parameterübergabe ohne Kopieren (—> “Registerfenster” bei RISCs) Flexibler Methoden-Stack (unterschiedliche Methoden-Grössen) picoJava™ organisiert dynamische StackGrösse automatisch im Hintergrund Dribbling Mechanismus sorgt für SAVE und RESTORE der relevanten Stack-Daten (relevant heisst abhängig vom TOS) Stack-Cache ist ein innerhalb picoJava™ verwalteter Ringpuffer High und Low Watermark steuern den Dribbling Mechanismus durch Auslagerung der ältesten Methoden Preloading der restlichen Methoden nach Beendigung der vorangehenden Methoden 37-1 ©LR-ifi-UNIZH-2001 Java-Prozessoren JVM picoJava™ Instruction Folding Lösung des klassischen Problems: Stack-Ineffizienz RISC ADD R3, R2, R1 JVM + TOS TOS TOS TOS-1 TOS-1 TOS-2 TOS TOS-1 TOS lv2 lv1 ©LR-ifi-UNIZH-2001 TOS TOS lv2 sum Zyklus 1 iload_1 iload_1 iload_2 iadd istore_3 sum + sum lv1 Zyklus 2 iload_2 Zyklus 3 iadd Zyklus 4 istore_3 Zyklus 1 iload_1 + iload_2 + iadd + istore_3 37-2 Java-Prozessoren JVM picoJava™ Instruction Folding Benchmark-Resultate (Innere Schleife von Drystone 2.1) Vergleich “Generischer RISC” mit picoJava™ II Taktzyklus Generischer RISC Code picoJava™ II Code (instruction folding) 1 2 3 4 5 6 7 8 9 10 MOV R3, #0 ADD R2, R1, #10 LDR R5, [R0+#d1] iconst_0 + istore_3 iload_1 + bipush 10 + iadd + istore_2 aload_0 + getfield CharGlob CMP BNE LDR SUB SUB MOV bipush 65 + if_cmpne L28 aload_0 + getfield IntGlob iinc 2, 255 iload_2 + isub + istore_1 iconst_1 + istore_3 R5, #65 L28 R5, [R0+#d2] R2, R2, #-1 R1, R5, R2 R3, #1 Code-Länge Laufzeit ©LR-ifi-UNIZH-2001 = 36 Bytes = 10 Zyklen Code-Länge Laufzeit = 28 Bytes = 9 Zyklen 37-2A Java-Prozessoren JVM picoJava™ Basis-Instruktionssatz Instruktionstyp Gesamtanzahl Push constant 13 Load/store local v 82 Stack management 10 Arithmetic 24 Shift & logical 12 Branch & compare 27 Exception handling 1 Array management 20 Function return 7 Switch-table branch 2 Conversions 15 Monitors 2 Object field manipulations 4 Method invocation 4 Miscell. object handling 3 Total number Portion (%) ©LR-ifi-UNIZH-2001 226 100 Anzahl Instruktionen der Länge von 1 Byte 2 Bytes 3 Bytes mehr als 3 Bytes 8 2 3 40 41 1 10 24 12 5 1 19 2 1 17 1 1 1 7 2 15 2 4 3 1 3 141 62 45 20 34 15 6 3 37-3 Java-Prozessoren JVM picoJava™ Instruktionssatz Basis-Instruktionssatz absichtlich unvollständig, d.h. keine Instruktionen für keine Möglichkeiten zu Test | Diagnose Hardware Read | Write CPU Status On Chip Cache Management ... expliziten Hauptspeicherzugriff Virus-Erkennung ... Erweiterter Bytecode schafft Abhilfe ( picoJava™ II ) Instruktionstyp Gesamtanzahl Diagnostik 8 Register reads & writes 49 Arbitrary loads & stores 35 Other language support 6 System software support 17 Total number Portion (%) ©LR-ifi-UNIZH-2001 115 100 Anzahl Instruktionen der Länge von 1 Byte 2 Bytes 3 Bytes 8 49 26 9 5 1 2 10 5 2 2 98 85 15 13 37-4 Java-Prozessoren JVM picoJava™ II und Bytecode-Laufzeit-Unterstützung Effektive Unterstützung zum JVM-Speicher-Management Automatische Speicherverwaltung Implizite Allokation beim Kreieren eines Objekts Implizite Deallokation (garbage collection), wenn Objekt nicht länger benötigt Garbage Collection (in JVM-Spezifikation ausgelassen, d.h. implementationsabhängig) Elementare Garbage Collection Mark & Sweep Algorithmus: • Scannen des gesamten Speichers nach Objekten, die von einem laufenden Programm erreichbar sind • Markieren dieser Objekte • Freigabe aller nicht-markierten Teile • Kompaktieren des Speichers (keine Fragmentierung) Zeitaufwendig, atomar durchzuführen, nicht für Realzeit-Anwendungen geeignet Generative Garbage Collection 90% aller Objekte “leben” kürzer als die Zeit, die zur Allokation von 32 Kb erforderlich ist Einrichtung einer Nursery Mark & Sweep nur für die Nursery “Ueberlebende” in Langzeit-Speicher Gewisse Vorkehrungen für vollständige GarbageCollection trotzdem notwendig Alternative: Verschiedene Nurseries für verschiedene Altersgruppen ©LR-ifi-UNIZH-2001 37-5