Java-Prozessoren Die Java Virtual Machine spezifiziert

Transcription

Java-Prozessoren Die Java Virtual Machine spezifiziert
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