Information Technology Reference
In-Depth Information
Sprungmarkenbefehle
Wie bereits beschrieben wurde, ist bei einer Umsetzung von Sprungbefehlen eine
Anpassung der virtuellen in reale Zieladressen erforderlich. Die hierzu benötigte
Sprungadressumsetzungstabelle assoziiert jedes potentielle virtuelle Sprungziel mit
der entsprechenden realen Befehlsadresse. Da ohne weitere Vereinbarungen jede
virtuelle Befehlsadresse ein potentielles Sprungziel ist, muss die Sprungadressum-
setzungstabelle auch mit jedem virtuellen Befehl aktualisiert werden, was die Lauf-
zeittransformation verlangsamt und sehr speicherplatzaufwendig ist.
Eine Lösung des hier angedeuteten Problems besteht darin, alle tatsächlich genutz-
ten virtuellen Sprungziele zu kennzeichnen, z.B., indem die Sprungadressumset-
zungstabelle mit allen relevanten Sprungzielen im virtuellen Programm codiert
wird. Bei der Laufzeittransformation sind darin nur noch die realen zu den virtuellen
Sprungadressen einzutragen und die virtuellen Sprungbefehle entsprechend der
Tabelleneinträge zu transformieren. Der Ansatz hat jedoch Nachteile: (1.) muss wei-
terhin zu jedem virtuellen Befehl überprüft werden, ob die virtuelle Befehlsadresse
in der Sprungadressumsetzungstabelle enthalten ist, was Zeit kostet, (2.) ist mit
Hilfe der Sprungadressumsetzungstabelle eine Rückentwicklung des Originalpro-
gramms sehr einfach und (3.) ist der Hauptspeicherbedarf größer als nötig, da die
Sprungadressumsetzungstabelle auch Einträge enthalten kann, die z.B. nur lokal
gültig sind und nach der Laufzeittransformation der jeweiligen Funktion möglicher-
weise nicht länger benötigt werden.
Die Nachteile lassen sich vermeiden, wenn man die Sprungziele im virtuellen Pro-
gramm direkt durch sog. Sprungmarkenbefehle kennzeichnet. Eine Sprungadres-
sumsetzungstabelle ist dann nicht mehr mit jedem virtuellen Befehl zu durchsuchen
bzw. zu aktualisieren, sondern nur noch beim Erkennen eines Sprungmarkenbefehls.
Des Weiteren lässt sich ein virtuelles Programm resistent gegen eine Rücküberset-
zung machen, weil die Sprungmarkenbefehle nicht von eingebetteten Konstanten
unterscheidbar sind und somit die erforderlichen Startpunkte für die Rücküberset-
zung unbekannt bleiben (zum Begriff der Resistenz siehe Abschnitt 4.1.4). Schließ-
lich ist der Hauptspeicherbedarf geringer als bei Verwendung statischer, im virtuel-
len Programm codierter Sprungadressumsetzungstabellen. Es ist nämlich möglich,
Einträge aus einer dynamisch erzeugten Sprungadressumsetzungstabelle zu löschen,
wenn diese nicht länger benötigt werden. Ein vorteilhafter Nebeneffekt: Da Sprung-
markenbefehle auch Kontrollflussinformationen vermitteln, sind Optimierungstech-
niken, z.B. die Schlüssellochoptimierung, einfach anwendbar.
Sprungmarkenbefehle sind z.B. in P-Code einer im Zusammenhang mit Pascal-Pro-
grammen benutzten sog. abstrakten Maschine verfügbar [140, 30]. Mit Gironimo ist
das Konzept in Hinblick auf eine ressourcensparende und schnelle Laufzeittransfor-
mation erweitert worden. Die Definition einer Sprungmarke, die relativ oder abso-
lut, jedoch nicht indirekt adressierbar ist, geschieht durch den virtuellen Befehl
label , dem als Argument die absolute Anzahl von darauf verweisenden Referenzen
übergeben wird (siehe Tabelle 4.1). Dies lässt sich nutzen, um die Sprungadressum-
setzungstabelle klein zu halten, und zwar, indem man die Anzahl der auf eine
Sprungmarke verweisenden Sprungbefehle zählt und das Zählergebnis mit dem
Search WWH ::




Custom Search