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