Information Technology Reference
In-Depth Information
auch die zu sichernden Registerinhalte in r0 und r1 auf dem Stapel ablegt. Das Gegenstück, also das
Laden der gespeicherten Registerinhalte (Zeile 8) und der Rücksprung aus dem Unterprogramm
(Zeile 9) sind ebenfalls in einem realen Befehl zusammenfassbar. Da der ARM7TDMI zwar die
prä- und postmodifizierende indirekte Adressierung unterstützt, die Bedingungsbits jedoch bei
Speicherzugriffen nicht automatisch gesetzt werden, ist zu den virtuellen Befehlen in den Zeilen 6
und 15 jeweils ein zusätzlicher Vergleich mit dem Befehl cmp (compare) auszuführen.
4.1.3 Laufzeitübersetzung (just in time compiling)
Die zuvor beschriebene Laufzeittransformation generiert aus virtuellen Befehlen
oder Befehlskompositionen kontextfrei reale Befehle, was schnell und ressourcen-
sparend möglich ist. Die maximal erreichbare Ausführungsgeschwindigkeit virtuel-
ler Programme ist jedoch davon abhängig, wie ähnlich die virtuelle und die emulie-
rende reale Prozessorarchitektur einander sind. Negativ wirkt sich z.B. aus, wenn
die Anzahl der realen und der virtuellen Register voneinander abweicht: Stehen
einerseits zu wenige reale Register zur Verfügung, müssen einige der virtuellen
Register im langsamen Hauptspeicher untergebracht werden, was die Ausführungs-
geschwindigkeit einer Emulation mindert. Falls andererseits zu viele reale Register
zur Verfügung stehen, so bedeutet dies, dass Merkmale nicht nutzbar sind, die eine
erhöhte Ausführungsgeschwindigkeit zur Folge hätten. Der Vergleich eines virtuel-
len und eines entsprechenden nativen Programms fällt deshalb zu Ungunsten des
virtuellen Programms aus.
Ein zu großer realer Registerspeicher ist durch Tricks, z.B. dem im Zusammenhang
mit Gironimo erwähnten Arbeitsbereichen, noch handhabbar. Das ist jedoch nicht
mehr möglich, wenn sich die virtuelle und die reale Prozessorarchitektur grundsätz-
lich voneinander unterscheiden. Zum Beispiel lässt sich eine virtuelle 0-Adressar-
chitektur wie die der JVM (java virtual machine) von Sun [99] oder die der MSIL
(microsoft intermediate language) von Microsoft [104] schlecht durch Laufzeit-
transformation in ein reales Programm für die heute oft als 2- oder 3-Adressarchi-
tektur realisierten Prozessoren umsetzen, insbesondere, weil die realen Registerspei-
cher i.Allg. nicht indirekt adressierbar sind. Deshalb übersetzt man in solchen Fällen
das 0-Adressprogramm. Die sog. Laufzeitübersetzung (just in time compiling)
erzeugt dabei aus einem virtuellen Programm zunächst einen Syntaxbaum , der
schließlich in eine reale Befehlsfolge für eine beliebige Prozessorarchitektur umge-
setzt wird.
Zur Beschreibung der Vorgehensweise ist in Bild 4.6a ein virtuelles Programm für
die JVM zur Berechnung eines Polynoms zweiten Grades dargestellt. Die Wirkung
der 0-Adressbefehle auf den Stapel ist jeweils im Kommentar angegeben. Zum Bei-
spiel wird ax 2 berechnet, indem a und zweimal x über die Variablenadressen 0 und 1
auf den Stapel geladen (iload, integer load) und anschließend multipliziert (imul,
integer multiply) werden.
Der in Bild 4.6b dargestellte Syntaxbaum lässt sich aus dem virtuellen Programm
konstruieren, indem man die virtuellen Befehle in Knoten umsetzt. Beim Erzeugen
eines neuen Werts auf dem Stapel wird ein äußerer Knoten, beim Verarbeiten von
Stapelinhalten ein innerer Knoten generiert. Der Leser überzeuge sich von der Kor-
Search WWH ::




Custom Search