Information Technology Reference
In-Depth Information
baren Maske. Die Register r1 , r2 usw. folgen dann jeweils im Wortabstand, wobei
mit Erreichen der letzten realen Registeradresse die Zählung wieder bei 0 beginnt.
Falls also z.B. lrm.sp die Adresse 0xdfc enthält und der reale Registerspeicher 128
Worte aufnehmen kann, ergibt sich für r0 die reale Registeradresse 0x1fc (entspricht
der Wortadresse 0x7f), für r1 die reale Registeradresse 0x0, für r2 die reale Regis-
teradresse 4 usw.
Speicher
reale
Register
virtuelle
Register
Speicher
reale
Register
virtuelle
Register
lsm.sp
￿￿￿￿￿￿￿￿￿￿￿￿￿
lsm.sp
r0
r14
r0
r14
lsm.sz
a
lsm.bp
lsm.bp
lsm.sp & msk
￿￿￿￿￿￿￿￿￿￿￿￿￿
￿￿￿￿￿￿￿￿￿￿￿￿￿
lsm.bp & msk
lsm.sp & msk
lsm.bp & msk
b
a
b
Bild A.1. Organisation des lokalen Registerspeichers als Stapel. a vor und b nach einem Überlauf
Wächst der Stapel, z.B. bei Ausführung eines alloc -Befehls, nimmt auch der im rea-
len Registerspeicher belegte Bereich zu. Dies ist unproblematisch, solange genü-
gend reale Register zur Verfügung stehen. Übersteigt jedoch die Differenz lsm.bp -
lrm.sp die Anzahl der verfügbaren realen Register lrm.sz , ist die Abbildung der
Hauptspeicher- und Registeradressen nicht länger eindeutig.
Dieser Fall ist in Bild A.1b durch den mit a markierten kreuzschraffierten Bereich
kenntlich gemacht. Solange darauf kein Zugriff erfolgt, sind Aktionen jedweder Art
unnötig. Erst wenn ein Register innerhalb des Bereich adressiert wird, müssen die
betroffenen Register im Hauptspeicher gesichert (an der mit b markierten Position)
und der Zeiger lrm.bp anschließend verschoben werden. Dies lässt sich in Hardware
realisieren, ist aber auch in Software durchführbar, nämlich indem bei einem Über-
lauf eine Register-Stack-Overflow-Exception ausgelöst wird.
Schrumpft der Stapel, z.B. durch Ausführung des Befehls free , müssen zuvor ausge-
lagerte Inhalte ggf. wieder aus dem Hauptspeicher in den Registerspeicher geladen
werden. Dies ist jedoch erst bei einem Zugriff auf einen entsprechenden Bereich
erforderlich. Man verfährt hier ähnlich wie bei dem vorgenannten Fall. Zunächst
wird das Spezialregister lrm.sp vergrößert, bis sein Inhalt dem von lrm.bp ent-
spricht. Mit Freigabe weiterer Bereiche kommt es zur parallelen Inkrementierung
der Spezialregister lrm.sp und lrm.bp . Bei einem Registerzugriff werden schließlich
die benötigten Inhalte entweder automatisch nachgeladen oder es kommt zu einer
Register-Stack-Underflow-Exception , in deren Verlauf die maximal zugreifbaren 15
Register geladen werden, der Zeiger lrm.bp modifiziert und mit Hilfe des Befehls
retxr (oder retpr ) der die Ausnahmeanforderung auslösende Befehl wiederholt wird.
Globale Register
Die Verwaltung der globalen Register geschieht über den Spezialregistersatz grm
(global register management). Falls grm.glb.v (visible) gesetzt ist, sind die globalen
Register über die Registeradressen 0x8 bis 0xe entsprechend r8 bis r14 ansprechbar
Search WWH ::




Custom Search