-
GEBIET DER
ERFINDUNG
-
Die
Erfindung betrifft das Zuweisen und Umbenennen von Registern in
einem Rechnersystem, welches Anweisungen abweichend von der normalen Reihenfolge
verarbeitet, und insbesondere das Protokollieren eines architekturdefinierten
Maschinenstatus, welcher architekturdefinierte Registerwerte umfasst.
-
HINTERGRUND
DER ERFINDUNG
-
Lange
Zeit war es üblich,
dass Prozessoren Anweisungen der Reihe nach ausführen. Das bedeutet, dass die
Anweisungen nacheinander in derselben Reihenfolge an die Ausführungseinheiten
des Prozessors weitergeleitet werden, wie diese in der Programmabfolge
erscheinen.
-
In
einem solchen System erfolgen Lese- und Schreiboperationen in alle
Register des Prozessors in genau derselben Reihenfolge, die durch
das Programm vorgegeben ist. Somit besteht eine Eins-zu-eins-Übereinstimmung
zwischen den Registern und ihren Werten. Zu jedem Zeitpunkt der
Ausführung
kennzeichnet eine Registerkennung genau den im entsprechenden Register
enthaltenen Wert. Dieser Wert eines Registers repräsentiert
auch den aktuellen Maschinenstatus und kann als architekturdefinierter
Registerwert bezeichnet werden.
-
Um
den Durchsatz an Anweisungen und somit die Leistung zu erhöhen, wurden
Prozessoren eingeführt,
die mehrere voneinander unabhängige Anweisungen
pro Taktzyklus ausgeben bzw. deren Ausführung auslösen. Solche Prozessoren sind
als superskalare Prozessoren bekannt. Solange keine Abhängigkeiten
zwischen den Daten, keine prozeduralen Abhängigkeiten oder Ressourcenkonflikte
bestehen, können
während
eines einzigen Zyklus mehrere Anweisungen ausgeführt werden. Wenn jedoch solche
Abhängigkeiten
oder Konflikte bestehen, kann nur die erste einer Folge von Anweisungen
ausgeführt
werden. Das führt
dazu, dass eine Vielzahl von Funktionseinheiten in einer superskalaren
Architektur nicht voll ausgelastet werden kann.
-
Als
nächster
Schritt bei der Entwicklung von Hochleistungsprozessoren gilt die
Einführung
der Verarbeitung außer
der Reihe. Diese Prozessoren ignorieren bei der Ausführung eines
Programms die Reihenfolge der Anweisungen und verarbeiten diese in
einer von der normalen Reihenfolge abweichenden Reihenfolge.
-
Wenn
allerdings eine Anweisung A Zieldaten erzeugt, die von einer Anweisung
B als Quelldaten benötigt
werden, muss diese Datenabhängigkeit
berücksichtigt
werden. Wenn Anweisungen nicht in der normalen Reihenfolge ausgegeben
werden, geht die Übereinstimmung
zwischen den Registern und den Registerwerten verloren. Gleichzeitig
können
mehrere Registerwerte existieren, die einem logischen Register entsprechen,
da jeder Schreibzugriff auf ein bestimmtes logisches Register ein
neues Exemplar dieses Registers erzeugt.
-
Die
Werte verschiedener Registerexemplare dürfen nicht miteinander verwechselt
werden. Deshalb müssen
Registergruppen bereitgehalten werden, in denen für jedes
logische Register eine Vielzahl von Werten gespeichert und erkannt
werden können.
Bevor Anweisungen einer der Ausführungseinheiten
zugeleitet werden können,
muss klargestellt werden, welche Exemplare der adressierten logischen
Register verwendet werden sollen. Die Kennzeichnung derjenigen aktuellen
Speicherzelle, welche zu einem bestimmten Zeitpunkt ein logisches Register
repräsentiert,
wird allgemein als „Registerumbenennung" bezeichnet.
-
Bei
jedem Schreibzugriff auf die logischen Register wird ein neues Exemplar
eines bestimmten logischen Registers erzeugt. Somit erzeugt jede
Anweisung, die ein Register modifiziert, ein neues physische Exemplar
dieses Registers, für
das in der Registergruppe ein physisches Register reserviert werden
muss.
-
Wenn
bei jeder Modifizierung eines logischen Registers ein neues physisches
Register reserviert wird, muss es auch einen Mechanismus geben,
um die alten Registerexemplare zu entfernen. Ohne einen solchen
Mechanismus würde
das System eine unbestimmte Anzahl von Registerexemplaren ansammeln.
Ein Exemplar kann zerstört
werden, indem sein Wert überschrieben
wird und keine Bezüge
mehr zu diesem Wert bestehen bleiben.
-
Wenn
Anweisungen in ihrer normalen Reihenfolge verarbeitet werden, befindet
sich der Prozessor immer in einem bestimmten „Status". Dieser Status muss für ein Programm
gespeichert werden, das unterbrochen wird, um „genaue Interrupts" zu ermöglichen.
Wenn eine Ausnahmebedingung eintritt, muss der Prozessor in der
Lage sein, wieder zu diesem definierten Status zurückzukehren.
Auch wenn eine Verzweigung falsch vorhergesagt worden ist und nach
dieser Verzweigung mehrere Anweisungen spekulativ ausgeführt worden
sind, muss der Prozessor in der Lage sein, zu einem wohldefinierten
nichtspekulativen Maschinenstatus zurückzukehren.
-
Das
Problem besteht darin, wie dieser Status und die entsprechenden
architekturdefinierten Registerwerte in einem System definiert werden
können, das
Anweisungen nicht in der normalen Reihenfolge verarbeitet. Während die
Anweisungen abweichend von der normalen Reihenfolge verarbeitet
werden, ist es wünschenswert,
diesen architekturdefinierten Status in der Reihenfolge weiterzuschieben.
-
Ein
Ansatz zum Definieren eines architekturdefinierten Status innerhalb
der normalen Reihenfolge besteht in Folgendem: Wenn eine Anweisung
sowie alle vorangehenden Anweisungen ausgeführt worden sind, können die
Ergebnisse der Anweisung als Status des entsprechenden Registers
für die
normale Reihenfolge gespeichert und die Anweisung selbst als „erledigt" angesehen werden.
Somit kann der architekturdefinierte Status eines Systems, das Anweisungen
nicht entsprechend der normalen Reihenfolge verarbeitet, durch die
letzte ausgeführte
Anweisung der kontinuierlichen Folge der ausgeführten Anweisungen definiert
werden. Die Werte zum Zeitpunkt der vollendeten Ausführung der
Anweisung gelten als die entsprechenden architekturdefinierten Registerwerte.
Im Falle von Ausnahmebedingungen und bei falsch vorhergesagten Verzweigungen
nimmt die Maschine die Ausführung
der Anweisung bei diesem architekturdefinierten Status wieder auf.
-
Eine
Lösung
zur Behandlung verschiedener Registerexemplare und zum kontinuierlichen
Weiterschieben des architekturdefinierten Status in der normalen
Reihenfolge besteht in der Verwendung eines Neuordnungspuffers in
Verbindung mit einer Registerdatei. Wenn eine Anweisung decodiert
wird, wird ihr eine Position am Anfang des Neuordnungspuffers zugeordnet.
Dieser Neuordnungspuffer ist als FIFO-Puffer (First-In-First-Out) ausgeführt. Sobald die
Anweisung ausgeführt
ist, wird ihr Ergebniswert wieder zurück auf den zugeordneten Speicherplatz geschrieben.
Wenn der Wert das Ende des Puffers erreicht hat und keine Ausnahmebedingung
eingetreten ist, wird er in die Registerdatei geschrieben. Wenn
die Anweisung beim Erreichen des Endes des Pufferspeichers noch
nicht vollständig
verarbeitet worden ist, geht der Neuordnungspuffer erst dann weiter,
wenn die Verarbeitung der Anweisung abgeschlossen ist. Während im
Neuordnungspuffer die spekulativen Werte der verschiedenen Registerexemplare
enthalten sind, speichert die Registerdatei die architekturdefinierten
Registerwerte und definiert somit den Status entsprechend der normalen
Reihenfolge. Falls es zu einer Ausnahmebedingung oder zu einer falschen
Vorhersage einer Verzweigung kommt, wird der Neuordnungspuffer gelöscht und
auf den Status gemäß der normalen
Reihenfolge zugegriffen.
-
Ein
Nachteil dieser Lösung
besteht darin, dass Registerwerte von den Speicherplätzen des Neuordnungspuffers
zur Registerdatei übertragen werden
müssen.
Wenn es zu einem genauen Interrupt kommt, wird auf die Werte dieser
Registerdatei zugegriffen.
-
Es
gibt eine Vielzahl unterschiedlicher Lösungen, die sich zur Speicherung
der architekturdefinierten Registerwerte einer separaten Registerdatei bedienen.
Die temporären
Werte der verschiedenen Registerexemplare können entweder, wie beschrieben,
im Neuordnungspuffer oder im Anweisungsfenster selbst oder in einer
separaten temporären
Registermatrix gespeichert werden. Diese Lösungen haben alle gemeinsam
einen Nachteil: Registerwerte müssen,
unabhängig
von der Art des Speichers, von einem temporären Registerspeicher zu einer
Registermatrix oder einer Registerdatei übertragen werden, in welcher
die architekturdefinierten Registerwerte in der normalen Reihenfolge
gespeichert bleiben.
-
In
der Internationalen Patentanmeldung PCT/JP93/00553 mit dem Titel „A system
and method for retiring instructions in a superscalar microprocessor" von J. Wang, S.
Garg und T. Deosaran werden ein System und ein verfahren zum Protokollieren
sowohl des architekturdefinierten Status als auch der umbenannten
Exemplare der logischen Register eines Systems bereitgestellt, das
Anweisungen abweichend von der normalen Reihenfolge verarbeitet.
Gemäß dem beschriebenen
Verfahren werden die Ergebnisse der außrhalb der normalen Reihenfolge
ausgeführten
Anweisungen zuerst in einem temporären Puffer zwischengespeichert,
bis alle vorangehenden Anweisungen ausgeführt worden sind.
-
Sobald
alle vorangehenden Anweisungen ausgeführt und ihre Ergebnisse in
der normalen Reihenfolge in einer Registermatrix gespeichert worden sind,
können
die Ergebnisse der betreffenden Anweisung in diese Registermatrix
geschrieben werden, sodass die betreffende Anweisung als erledigt
betrachtet werden kann. Zur Gewährleistung
der Integrität
der Daten in der Registermatrix werden die Ergebnisse der Anweisungen
erst in die Registermatrix geschrieben, nachdem die Ergebnisse aller
vorangehenden Anweisungen eingeschrieben worden sind. Auf diese
Weise wird der Maschinenstatus der Reihe nach aktualisiert. Die
beschriebene Lösung
umfasst Mittel zum Zuordnen der Ergebnisse der Anweisung zu einem
temporären
Speicherplatz und zum Schreiben auf diesen Speicherplatz, zum Übertragen
der Ergebnisse vom temporären
Speicher in die Registermatrix, sodass die Registermatrix in der
normalen Reihenfolge aktualisiert wird, sowie für spätere Operationen zum Zugreifen
sowohl auf den temporären Speicher
als auch auf die Registermatrix.
-
Registerwerte
gelten dann als erledigt, wenn sie in eine Registermatrix übertragen
werden, in welcher die „finalen
Registerwerte" gespeichert
bleiben. Zwischen dieser temporären
Registermatrix und der Finalregistermatrix ist ein ständiger Datenverkehr
erforderlich.
-
Wenn
der aktuelle Wert eines bestimmten logischen Registers ermittelt
werden soll, muss zuerst geprüft
werden, ob sich in der temporären
Registerdatei ein Exemplar befindet. Wenn kein temporäres Exemplar
gefunden wird, muss auf die Finalregistermatrix zugegriffen werden.
Für diesen
zweistufigen Datenzugriff werden Zeit und weitere Logikschaltungen
benötigt.
-
In
der Europäischen
Patentanmeldung
EP 301
220 A2 wird ein Computersystem beschrieben, mit welchem
Anweisungen außerhalb
der normalen Reihenfolge ausgeführt
werden können.
Das System ist gekennzeichnet durch eine Registermatrix aus m Hardwareregistern
in einer Systemarchitektur, in der n adressierbare Register benötigt werden,
wobei m größer als
n ist. Außerdem
umfasst das System eine Anweisungsausführungseinheit zum Ausführen von Anweisungen
in der Registermatrix, welche so geschaltet ist, dass Informationen
zu dieser Registermatrix gesendet und von ihr empfangen werden können. In
diesem System befindet sich ein Prozessorspeicher zum Speichern
von Anweisungen und Daten sowie zum Bereitstellen der Anweisungen
und Daten für
die Anweisungsausführungseinheit.
Ferner umfasst das System eine Anweisungsteuerungseinheit zur Steuerung
der Beförderung
der Anweisungen vom Prozessorspeicher zur Anweisungsausführungseinheit.
Diese Anweisungssteuerungseinheit ist mit dem Prozessorspeicher
und dem Anweisungsausführungsmittel
sowie einer logischen Einheit verbunden, die wiederum mit dem Registermatrixmittel verbunden
ist, um während
der Ausführung
der Anweisung für
jedes adressierbare Register einen äquivalenten Speicherplatz im
Hardwareregister zuzuordnen, wobei während der von der normalen
Reihenfolge abweichenden Ausführung
einer Anweisung ein demselben adressierbaren Register äquivalenter
Speicherplatz oder Speicherplätze
des Hardwareregisters zugeordnet werden, sodass während der
von der normalen Reihenfolge abweichenden Ausführung der Anweisung sowohl
ein neuer Wert als auch ein alter Wert oder alte Werte gespeichert werden.
-
Diese
Aufgabe wird durch ein in den Hauptansprüchen dargelegtes Verfahren
und System gelöst.
Weitere vorteilhafte Ausführungsarten der
vorliegenden Erfindung werden in den Unteransprüchen beschrieben und in der
folgenden Beschreibung erläutert.
-
Das
Computersystem gemäß der vorliegenden
Erfindung beinhaltet einen Prozessor, der Anweisungen abweichend
von der normalen Reihenfolge verarbeitet, in welchem die Anweisungen
logische Register adressieren und jedes der logischen Register durch
eine Gruppe von mindestens einem physischen Register dargestellt
wird. Jede Gruppe der physischen Register weist ein physisches Register auf,
das einen nichtspekulativen architekturdefinierten Status eines
dieser logischen Register darstellt, sodass sich der architekturdefinierte
Status auf die letzte aus der kontinuierlichen Folge von ausgeführten Anweisungen
bezieht. Die restlichen aus der Gruppe der physischen Register stellen
dabei umbenannte Exemplare der logischen Register dar. Das Computersystem
umfasst Folgendes: ein Matrixmittel mit den physischen Registern,
welche die architekturdefinierten Status und die umbenannten Exemplare
der logischen Register repräsentieren,
ein erstes Anzeigemittel zum Ermitteln, welches der physischen Register
aus jeder Gruppe der physischen Register gerade den architekturdefinierten
Status der logischen Register repräsentiert, und ein zweites Anzeigemittel
zum Angeben, welches der physischen Register aus jeder Gruppe der
physischen Register gerade das in der Reihenfolge jeweils letzte
umbenannte Exemplar repräsentiert.
-
Außerdem werden
das erste und das zweite Anzeigemittel als Zeiger realisiert, wobei
mit dem ersten Anzeigemittel ermittelt wird, welches der physischen
Register aus der Gruppe der physischen Register grade den architekturdefinierten
Status des logischen Registers repräsentiert, und wobei das zweite
Anzeigemittel angibt, welches der physischen Register aus jeder
Gruppe der physischen Register gerade das letzte der umbenannten
Exemplare in der Reihenfolge repräsentiert.
-
Zur
Realisierung der Anzeigemittel in Form von Zeigern sind für jedes
logische Register nur einige wenige Bits erforderlich. Aus diesem
Grunde ist dies die billigste und einfachste Möglichkeit zur Realisierung
der Anzeigemittel. Eine Aktualisierung der Zeiger kann einfach durch
Erhöhung
der Werte dieser Zeiger erfolgen.
-
Bei
einer weiteren Ausführungsart
der Erfindung sind die Registermatrixmittel als zyklische Speichermittel
ausgeführt,
in welchem die physischen Register, welche den architekturdefinierten
Status eines der logischen Register repräsentiert haben und diesen architekturdefinierten
Status der logischen Register nicht mehr repräsentieren, zur Darstellung neuer
umbenannter Exemplare wiederverwendet werden können.
-
Jedes
physische Register, das den architekturdefinierten Status repräsentiert,
kann neu zugeordnet werden. Dadurch kommt man mit einer geringeren
Anzahl von physischen Registern aus. Der Umfang an benötigten Speicherplätzen wird
verringert und weniger Chipfläche
benötigt.
Das ist besonders wichtig, da die Registerdatei mehrmals vorkommt,
nämlich
einmal pro Funktionseinheit.
-
Bei
einer weiteren Ausführungsart
der Erfindung umfasst das Computersystem ferner ein Aussonderungsmittel
zum Freigeben des physischen Registers, welches den architekturdefinierten
Status eines der logischen Register repräsentiert, zum Ermitteln des
in der Reihenfolge ältesten
aus der Gruppe der physischen Register, die die umbenannten Exemplare
der logischen Register repräsentieren,
welches Register den architekturdefinierten Status des logischen
Registers weiterhin repräsentieren
soll, und zum Aktualisieren des ersten Anzeigemittels, das ermittelt,
welches aus der Gruppe der physischen Register gerade den architekturdefinierten Status
des logischen Registers repräsentiert.
-
Das
entspricht dem Verfahren nach Anspruch 10 zur Verwaltung einer aus
mindestens einem physischen Register bestehenden Gruppe, die ein
logisches Register in einem Computersystem repräsentiert. Das Verfahren umfasst
die folgenden Schritte: Freigeben des physischen Registers, welches
den architekturdefinierten Status des logischen Registers repräsentiert,
und Ermitteln des in der Reihenfolge ältesten aus der Gruppe der
physischen Register, die die umbenannten Exemplare des logischen
Registers repräsentieren,
welches den architekturdefinierten Status des logischen Registers
weiterhin repräsentieren
soll.
-
Wenn
der architekturdefinierte Status des Computersystems in der Reihenfolge
weitergeschoben wird, muss das aktuelle Register in der Reihenfolge
freigegeben und das nachfolgende physische Register ermittelt werden,
welches den neuen architekturdefinierten Status repräsentiert.
Der Vorteil der Erfindung besteht darin, dass zum kontinuierlichen Weiterschieben
des architekturdefinierten Status keine Datenbewegungen erforderlich
sind. Stattdessen wird das erste Anzeigemittel entsprechend geändert. Das
lässt sich
einfach durch Erhöhen
des Wertes der Zeiger erreichen, sodass eine schnelle und einfache Aktualisierung
möglich
ist. Freigegebene Register können
sofort wiederverwendet werden, um neue umbenannte Exemplare zu repräsentieren.
-
KURZBESCHREIBUNG
DER ZEICHNUNGEN
-
1 zeigt
die allgemeine Struktur eines von der normalen Reihenfolge abweichenden
Verarbeitungssystems.
-
2 zeigt
ein Programmbeispiel, bei dem die Ausführung von der normalen Reihenfolge
abweicht. Hierzu müssen
die adressierten logischen Register in physische Register umbenannt
werden.
-
3 ist
eine detailliertere Darstellung eines von der normalen Reihenfolge
abweichenden Verarbeitungssystems, welches eine Registerumbenennungs-
und -reservierungseinheit umfasst.
-
4 zeigt
das Zusammenwirken zwischen der Reservierungsstation und dem Neuordnungspuffer,
um den Bearbeitungsstatus genau zu verfolgen und genaue Interrupts
zu erzeugen.
-
5 zeigt
die Registerdatei zum Speichern der architekturdefinierten und der
provisorischen Registerinhalte.
-
6 zeigt
ein Verfahren zum Reservieren und Umbenennen von Registern, welches
auf das Programmbeispiel von 2 angewendet
wird.
-
7 zeigt
die Struktur der Zuordnungsmatrix sowie einen seiner Einträge, welcher
sowohl den Zeiger für
die normale Reihenfolge als auch den Zeiger auf das umbenannte Register
enthält.
-
8A zeigt
das Format eines Eintrags der Reservierungsstation.
-
8B zeigt
die Struktur der zur Bezeichnung der physischen Quellregister verwendeten
Kennung.
-
8C zeigt
die Struktur der zur Bezeichnung der physischen Zielregister verwendeten
Kennung.
-
9 zeigt
eine Ausführungsform
eines superskalaren Computersystems, welches eine Reservierungsstation,
eine Neuordnungseinheit, eine Reservierungseinheit gemäß 7 und
eine Registerdatei gemäß 5 umfasst.
-
DETAILLIERTE
BESCHREIBUNG DER ERFINDUNG
-
1 zeigt
den typischen Aufbau eines von der normalen Reihenfolge abweichenden
Verarbeitungssystems. Anweisungen werden vom Anweisungsspeicher
(100) abgerufen und in dieser Reihenfolge im Anweisungs-Cachespeicher
(101) gepuffert. Dann werden die Anweisungen decodiert
(102) und in einem normalen internen Anweisungsformat dargestellt.
Es gibt auch Lösungen,
bei denen eine externe Anweisung in eine Anzahl kleiner interner
Anweisungen aufgeteilt wird, die dann abweichend von der normalen
Reihenfolge verarbeitet werden können.
Die Anweisungsdecodiereinheit (102) ist auch für die Klärung der
Abhängigkeiten
zuständig,
d.h., sie muss die aktuellen physischen Speicherzellen den logischen
Registern zuordnen, welche als Quellen und Ziele der jeweiligen
Anweisungen dienen. In dieser Phase kann nicht auf die Protokollierung
der verschiedenen Exemplare jedes logischen Registers verzichtet
werden, die im Verlauf der Programmausführung entstehen.
-
In
der Anweisungsdecodierphase erfolgt auch die Verzweigungsvorhersage.
-
Dann
werden die Anweisungen zur Reservierungsstation (103) weitergeleitet.
Für jedes
Zielregisterexemplar einer Anweisung wird ein Eintrag im Neuordnungspuffer
(108) erstellt. Dadurch erkennt der Neuordnungspuffer alle
physischen Register, welche Exemplare von logischen Registern repräsentieren,
in der Reihenfolge ihres Auftretens, also in der normalen Reihenfolge.
In der Reservierungsstation warten die Anweisungen so lange, bis
alle von ihnen benötigten
Quelldaten berechnet worden sind. Falls die von einer Anweisung
benötigten
Quelldaten bereits als Zieldaten einer früheren Anweisung berechnet worden
sind, befinden sich diese Zieldaten in der Registerdatei (107)
und können
von dort abgerufen werden. Falls die von einer bestimmten Anweisung
benötigten
Quelldaten noch nicht berechnet worden sind, muss die Anweisung
die Ergebnisse überwachen,
die von den verschiedenen Ausführungseinheiten
ausgegeben werden.
-
Sobald
alle Quelldaten einer bestimmten Anweisung eingetroffen sind, kann
die Anweisung selbst je nach ihrem Typ und je nach Verfügbarkeit der
Ausführungseinheiten
zu einer der Ausführungseinheiten
weitergeleitet werden. Im Falle einer Verzweigung müssen die
Anweisung zur Verzweigungseinheit (104), die Ganzzahlarithmetik
zu einer der Ganzzahleinheiten (105) und die auf einen
Speicher zugreifenden Anweisungen zu einer der Lade-/Speichereinheiten
(106) weitergeleitet werden. Somit wird jede Anweisung
durch die entsprechende Funktionseinheit verarbeitet, und die Zieldaten
der Anweisung können
berechnet werden. Beim Zugriff auf einen Speicher schreibt die Lade-/Speichereinheit
(106) entweder Daten über
einen Daten-Cachespeicher (109) in einen Datenspeicher
(110) oder empfängt
sie von diesem.
-
Der
so genannte „Festschreibungsprozess" ist für das Freigeben
von Anweisungen zuständig, d.h.,
dass aus den Zielregisterwerten der Anweisungen architekturdefinierte
Registerwerte werden. Die Anweisungen werden immer in der normalen
Reihenfolge festgeschrieben. Dadurch ist der Freigabezeiger zusammen
mit den architekturdefinierten Registerwerten in der Lage, einen
Maschinenstatus genau zu definieren. Dieser Maschinenstatus wird
dann nicht mehr verändert.
Er rückt
dann in der normalen Reihenfolge vor. Auf diese Weise werden genaue
Interrupts möglich.
-
Wenn
Anweisungen ausgeführt
werden, die von ein und demselben Register gelesen oder in dieses
geschrieben werden, muss ihre Reihenfolge beibehalten werden. Wenn
beabsichtigt wird, die Anforderungen der Ausführung in der normalen Reihenfolge
nicht einzuhalten, müssen
zuerst die Datenabhängigkeiten
zwischen verschiedenen Anweisungen geklärt werden, die auf dieselbe
Ressource zugreifen. Das geschieht dadurch, dass den verschiedenen
Exemplaren einer Ressource, zum Beispiel eines logischen Registers,
verschiedene physische Register zugeordnet werden. Dieser Vorgang
wird als „Registerumbenennung" bezeichnet und stellt
ein wesentliches Merkmal aller von der normalen Reihenfolge abweichenden
Verarbeitungssysteme dar.
-
2 veranschaulicht
dies mittels eines Programmbeispiels. Die verschiedenen auftretenden
Exemplare des Registers R3 sind in der rechten Spalte von 2 aufgeführt.
-
In
der Anweisung 200 werden die Inhalte der Register R2 und
R3 der logischen Operation ODER unterzogen; das Ergebnis dieser
Operation wird wieder in das Register R2 zurückgeschrieben. Im vorliegenden
Beispiel wird das Register R3 (das als einziges Register betrachtet
wird) nur als Quellregister verwendet. Dieses Exemplar von R3 soll
deshalb gemäß der rechten
Spalte als R3.1 bezeichnet werden.
-
Dann
wird eine „bedingte
Verzweigung" (201)
ausgeführt.
Die Bedingung für
die Ausführung der
Verzweigung ist im Register M1 enthalten. Die Register R1 und R2
enthalten die Werte Index und Basis, die zusammen mit dem Verschiebungsbetrag zur
Berechnung der Sprungadresse dienen. Wenn die Verzweigung ausgeführt werden
soll, wird die Programmausführung
an der durch R1, R2 und den Verschiebungsbetrag angezeigten Adresse
fortgesetzt.
-
Die
nächste
Anweisung (202) ist eine Ladeoperation, bei der Daten vom
Speicher abgerufen werden. R4, R3 und der Verschiebungsbetrag werden zur
Berechnung der entsprechenden Speicheradresse verwendet. Der abgerufene
Speicherinhalt wird im Register R3 gespeichert. Somit dient R3 zuerst
als Quelloperand (zur Adressberechnung) und anschließend als
Ziel. Das als Quelle verwendete Registerexemplar ist dem in Anweisung 200 verwendeten,
d.h. dem Exemplar R3.1, identisch. Dem Ziel der Anweisung 202 muss
ein anderes Exemplar von R3 zugeordnet werden, da die Ladeoperation
den Inhalt von R3 verändert.
Falls die auf Anweisung 202 folgenden Anweisungen R3 als
Quelle nutzen, dürfen
sie aus diesem Grunde nicht mehr den Wert des Exemplars R3.1 erhalten.
Deshalb muss als Ziel der Ladeoperation 202 ein neues physisches
Exemplar der Register R3, R3.2 zugeordnet werden.
-
Anschließend wird
eine Additionsoperation (203) ausgeführt. Unter Verwendung von R1,
R2 und eines Verschiebungsbetrags ermittelt die Adressarithmetik
eine Adresse, und der Inhalt dieser Adresse wird zum Inhalt von
R3 hinzugefügt.
Das Ergebnis wird dann in R3 gespeichert. Somit dient R3 wiederum
zuerst als Quelle und anschließend
als Ziel. Da R3 gerade erst in Anweisung 202 geändert worden ist,
muss der in Anweisung 203 verwendete Quellregisterwert
gleich dem Zielregisterwert der Anweisung 202 sein, also
gleich R2.2. Als Ziel für
die Anweisung 203 muss ein neues physisches Register reserviert werden,
und dem Ziel der Anweisung 203 wird ein neues Registerexemplar
R3.3 zugeordnet.
-
Bei
der Speicheroperation 204 wird der Inhalt von R1 unter
einer aus R4, R3 und einem Verschiebungsbetrag ermittelten Adresse
gespeichert. R3 dient als Quelloperand zur Adressenberechnung, und
das Exemplar trägt
die Bezeichnung R3.3.
-
Anschließend wird
in Anweisung 205 auf die aus R1, R2 und einem Verschiebungsbetrag
ermittelte Adresse zugegriffen und deren Inhalt einer logischen
Operation ODER mit dem Inhalt des Registers R3 unterzogen. Das Ergebnis
der ODER-Operation wird wieder in R3 zurückgespeichert. Das Exemplar des
Quellregisters der ODER-Operation heißt R3.3, und R3.0 wird dem
Ziel zugeordnet. Der Sprung von 3 auf 0 kommt dadurch zustande,
dass bei der im Folgenden beschriebenen Lösung in der Registerdatei nur
je vier verschiedene Registerexemplare jedes Registers gleichzeitig
verwaltet werden können.
Es können
jedoch auch noch mehr umbenannte Exemplare verarbeitet werden.
-
In
Anweisung 206 wird der Inhalt von R3 unter einer aus R3
(das sowohl als Index als auch als Basis dient) und einem Verschiebungsbetrag
ermittelten Speicheradresse gespeichert. Das hier verwendete Speicherregisterexemplar
lautet R3.0.
-
In
Anweisung 207 erfolgt ein Ladezugriff auf die Adresse (R4,
R3, Verschiebungsbetrag), dessen Ergebnis in R3 gespeichert wird.
R3 wird sowohl als Quelle (für
die Adressberechnung) als auch als Ziel verwendet. Während R3.0
das Quellregisterexemplar der Anweisung ist, wird R3.1 als neues
Zielregisterexemplar zugeordnet.
-
Aus
dieser Programmfolge ist zu erkennen, dass in den einzelnen Abschnitten 208 bis 212 der Anweisungsfolge
unterschiedliche Exemplare von R3 verwendet werden. Diejenigen Anweisungen, welche
R3.0 als Quelle verwenden (206, 207), können erst
ausgeführt
werden, nachdem das Exemplar R3.0 berechnet worden ist. Das bedeutet,
dass zuerst die Anweisung 205 ausgeführt werden muss, bevor Anweisung 206 oder 207 in
Angriff genommen werden kann, wobei deren Reihenfolge keine Rolle spielt.
-
Die
Einschränkungen
bei der Ausführung von
Anweisungen abweichend von der normalen Reihenfolge können wie
folgt zusammengefasst werden: Sobald ein neues Registerexemplar
als Ziel einer Anweisung erscheint, muss die Ausgabe von Anweisungen,
welche dieses Registerexemplar als Quellregister verwenden, so lange
warten, bis dieses Registerexemplar berechnet worden ist.
-
3 zeigt
ein ausführlicheres
Blockschaltbild eines superskalaren Computersystems. Hierbei liegt
das Schwergewicht auf der Verarbeitung verschiedener Registerexemplare.
Die im Anweisungsspeicher (300) befindlichen Anweisungen
werden ebenso wie in 1 zu einem Anweisungs-Cachespeicher
(301) übertragen.
Anschließend
werden die Anweisungen zu einer Vordecodierungseinheit (302) weitergeleitet,
welche die Anweisungen des externen Anweisungsstroms in ein normales
Anweisungsformat umgewandelt, das sich zur Verarbeitung abweichend
von der normalen Reihenfolge eignet. Bei diesem Anweisungsformat
gibt es Datenfelder für
den OP-Code, für
mindestens zwei Quellregister, für
zwei Register zur Adressberechnung, falls die Anweisung auf einen
Speicher zugreifen muss, und für
mindestens zwei Zielregister.
-
Aus
der linken Spalte von 2, in welcher eine Anweisungsfolge
gezeigt ist, die Teil eines externen Anweisungsstroms sein kann,
wird klar, dass eine Anweisung im externen Anweisungsstrom nur auf
diejenigen logischen Register zugreift, die gelesen oder geändert werden
sollen. Das Gesamtproblem der verschiedenen physischen Exemplare,
welche ein logisches Register im Verlauf der Ausführung einer
Anweisung haben kann, ist aber in diesem Stadium noch nicht gelöst. Solange
die Anweisungen des externen Anweisungsstroms in ihrer normalen Reihenfolge
verarbeitet werden, muss dieses Problem auch nicht berücksichtigt
werden. Sobald aber Anweisungen abweichend von ihrer normalen Reihenfolge
ausgeführt
werden, müssen
die verschiedenen physischen Exemplare eines bestimmten logischen
Registers sorgfältig
protokolliert werden. Dies ist für
das logische Register R3 in der linken Spalte von 2 dargestellt.
-
Das
Problem wird dadurch gelöst,
dass jedem Exemplar eines logischen Registers ein physisches Register
zugeordnet wird. Das bedeutet, dass immer dann, wenn eine Anweisung
ein bestimmtes logisches Zielregister ändert und somit ein neues Exemplar
dieses logischen Registers erzeugt, ein neues physisches Register
zugeordnet werden muss. Sobald dieses Exemplar des logischen Registers
von einer anderen Anweisung als Quelle verwendet wird, muss das
entsprechende physische Register verwendet werden. Da es für ein logisches
Register eine Vielzahl von Exemplaren geben kann, kann auch eine
Vielzahl von physischen Registern vorhanden sein, die diesem logischen
Register entsprechen.
-
Das
Analysieren, welches physische Register einem von einer bestimmten
Anweisung verwendeten logischen Register entspricht, das Ersetzen dieses
logischen Registers durch das entsprechende physische Register (Registerumbenennung)
und das Reservieren eines neuen physischen Registers, sobald ein
neues Exemplar eines logischen Registers erzeugt wurde (Registerzuordnung),
erfolgt durch die „Registerumbenennungs- und -zuordnungseinheit" (304).
-
Sobald
ein neues physisches Register zugeordnet wird, setzt die „Registerumbenennungs-
und -zuordnungseinheit" (304)
den Neuordnungspuffer (305) davon in Kenntnis. Im Neuordnungspuffer
ist für
jedes physische Ziel ein Eintrag gespeichert, der ein bestimmtes
Exemplar eines bestimmten logischen Registers kennzeichnet. Jeder
Eintrag im Neuordnungspuffer enthält das physische Register,
das von ihm repräsentierte
logische Register und den Bearbeitungsstatus dieses physischen Registers.
Bei der im Folgenden beschriebenen Ausführungsform kann der Neuordnungspuffer
gleichzeitig bis zu 32 Einträge
enthalten. Sobald die „Registerumbenennungs-
und -zuordnungseinheit" (304)
ein neues physisches Register zuordnet, wird im Neuordnungspuffer
(305) eine neue Eintragung vorgenommen. Da die Anweisungen
während
der Vordecodierung immer noch in der normalen Reihenfolge verarbeitet
werden, erfolgen auch die Eintragungen in den Neuordnungspuffer
in derselben Reihenfolge, sodass ein Eintrag, der ein früheres Exemplar
eines logischen Registers repräsentiert,
immer vor einem Eintrag kommt, der einem späteren Exemplar desselben logischen
Registers entspricht.
-
Jeder
Eintrag des Neuordnungspuffers enthält auch den Bearbeitungsstatus
des zugehörigen Zielregisters.
Während
die Eintragung vorgenommen wird, lautet dieser Bearbeitungsstatus
natürlich „nicht beendet". Sobald ein bestimmter
Registerwert ermittelt wird, wechselt der Bearbeitungsstatus seines
entsprechenden Neuordnungspuffers auf „beendet". Der Neuordnungspuffer ist als zyklischer
Puffer ausgeführt
und kann bis zu 32 Einträgen
enthalten.
-
Der
Anweisungspuffer (303) enthält nun zwei Anweisungen des
externen Anweisungsstroms in einem für die Reservierungsstation
geeigneten Format. Die logischen Register sind von der „Registerumbenennungs-
und -zuordnungseinheit" (304) durch
die entsprechenden physischen Register ersetzt worden, und jedes
Mal, wenn ein neues physisches Register zugeordnet werden sollte,
ist im Neuordnungspuffer (305) eine Eintragung vorgenommen worden.
-
Die
Anweisungen stehen nun bereit, um zur Reservierungsstation (306)
weitergeleitet zu werden. Die Reservierungsstation ist als zyklischer
Puffer mit bis zu 16 möglichen
Einträgen
ausgeführt.
-
In
der Reservierungsstation (306) warten die Anweisungen auf
ihre Quelloperanden. Sobald alle Quelloperanden einer Anweisung
eingetroffen sind, signalisiert die Anweisung, dass sie zu einer
der Funktionseinheiten gesendet werden kann. Anweisungen werden
abweichend von ihrer normalen Reihenfolge zu den Funktionseinheiten
gesendet, d.h., das Absenden einer Anweisung erfolgt unabhängig davon,
ob die vorangehende oder die nachfolgende Anweisung bereits abgesendet
worden ist. Je nach Anweisungstyp werden die Anweisungen zu einer der
Funktionseinheiten weitergeleitet: Verzweigungen werden zur Verzweigungseinheit
(307), Ganzzahlberechnungen zur Ganzzahleinheit (308)
und alle Anweisungen mit Speicherzugriff zur Lade-/Speichereinheit
(309) gesendet. Die Lade-/Speichereinheit tauscht über einen
Daten-Cachespeicher (311) Daten mit dem Datenspeicher (312)
aus.
-
Mit
jeder Funktionseinheit wird eine Kopie der Registerdatei (310)
verknüpft.
Sobald an einer dieser Registerdateien Änderungen vorgenommen werden,
werden die anderen Registerdateien in den verschiedenen Funktionseinheiten
aktualisiert. Jede Registerdatei (310) enthält die Werte
aller physischer Register, die bis dahin reserviert worden sind.
-
Da
jedes physische Register einem Exemplar eines bestimmten logischen
Registers entspricht, enthält
die Registerdatei (310) die Werte dieser Exemplare der
logischen Register, die bereits ermittelt worden sind.
-
Es
ist von Vorteil, wenn sich in unmittelbarer Nähe jeder Funktionseinheit eine
Kopie der Registerdatei befindet. Eine zu einer der Funktionseinheiten (307, 308, 309)
weitergeleitete Anweisung muss auf die Werte in ihren jeweiligen
Quellregistern zugreifen. Diese Registerwerte befinden sich in der
lokalen Kopie der Registerdatei (310). Sobald Ergebnisdaten entstehen,
werden diese in die lokale Registerdatei geschrieben. Da die logischen
Quell- und Zielregister einer Anweisung bereits während der
Vordecodierungsphase (302) in physische Register umbenannt worden
sind, kann eine zu einer Funktionseinheit weitergeleitete Anweisung
direkt auf die physischen Quell- und Zielregister der Registerdatei
zugreifen, da nunmehr die logischen nicht mehr in die physischen
Register umgesetzt werden müssen.
Diese Umsetzung ist bereits während
der Vordecodierungsphase (302) von der „Registerumbenennungs- und -zuordnungseinheit" (304) endgültig vorgenommen worden.
Durch das Bereithalten einer lokalen Kopie der Registerdatei bei
jeder Funktionseinheit kann die Zugriffszeit zu den Registerinhalten
weiter verkürzt werden.
-
Während des
Festschreibungsprozesses werden aus den von diesen Anweisungen erzeugten Zielregisterwerten
architekturdefinierte Registerwerte. Somit definiert der Festschreibungs-
oder Aussonderungsprozess einen architekturdefinierten Maschinenstatus.
Dieser architekturdefinierte Status schreitet der Reihe nach von
alten zu neueren Anweisungen fort und wandelt dadurch die entsprechenden provisorischen
Exemplare der logischen Register in gültige architekturdefinierte
Registerwerte um.
-
Zum
Verständnis
der Arbeitsweise des Festschreibungsprozesses muss der im Neuordnungspuffer
(305) gespeicherte Bearbeitungsstatus der verschiedenen
Zielregisterexemplare betrachtet werden. Der Festschreibungsprozess
beginnt mit der Suche nach der ältesten,
noch nicht fertig bearbeiteten Anweisung. Der Aussonderungszeiger
(313) zeigt auf den dieser Anweisung entsprechenden Eintrag.
Diese Anweisung kann noch nicht ausgesondert werden, da ihre Ergebnisse
noch nicht zur Verfügung stehen.
Hingegen können
alle Anweisungen sowie alle entsprechenden Zielregister vor dem
durch den Sperrzeiger definierten Eintrag festgeschrieben werden.
Die entsprechenden Anweisungen werden von der Reservierungsstation
gelöscht,
und aus den Zielregisterwerten werden architekturdefinierte Registerwerte.
Somit ist der architekturdefinierte Status (314) durch
die Zielregisterwerte vor demjenigen Eintrag des Neuordnungspuffers
definiert, auf welchen der Sperrzeiger (313) zeigt.
-
Das
Zusammenwirken zwischen der Reservierungsstation und dem Neuordnungspuffer
wird aus 4 verständlich. Die Reservierungsstation (400)
kann bis zu 16 Anweisungen aufnehmen. In der Figur ist einer der
Einträge
(402) der Reservierungsstation gezeigt. Er enthält den OP-Code
der Anweisung, Datenfelder für
Quellregister, Zielregister und für die Adressberechnung. Jede
Anweisung kann auf bis zu zwei Zielregister zugreifen.
-
Für die zu
einer Anweisung gehörenden
Zielregister wird eine Eintragung in den Neuordnungspuffer (401)
vorgenommen. Jedes neue Zielregister entspricht einem neuen Exemplar
eines bestimmten logischen Registers. Sowohl sein physisches Register
als auch sein logisches Register sind im jeweiligen Eintrag (404, 411)
des Neuordnungspuffers angegeben.
-
Die
Verbindung zwischen dem Eintrag (402) der Reservierungsstation
und dem entsprechenden Eintrag (404) des Neuordnungspuffers,
welcher Informationen über
das oder die von der Anweisung verwendeten Zielregister enthält, wird
mit Hilfe des Zeigers (403) der Neuordnungspuffers hergestellt.
Der Zeiger des Neuordnungspuffers ist ein Teil des Eintrags der
Reservierungsstation (402).
-
In
jedem Eintrag (404) des Neuordnungspuffers gibt es außerdem noch
ein Datenfeld (405), das den Bearbeitungsstatus der im
ROB-Eintrag (Neuordnungspuffer) enthaltenen Zielregister (404)
verfolgt. Zu Anfang lautet der Status des Zielregisters „nicht
beendet" (405).
-
Sobald
alle Quelldaten eines Eintrags der Reservierungsstation zur Verfügung stehen,
kann eine Anweisung zu einer der Ausführungseinheiten (408)
gesendet werden. Im Beispiel von 4 wird die
Anweisung 409 gerade von der Ausführungseinheit (408)
bearbeitet, d.h., die Anweisung befindet sich in einer bestimmten
Phase in der Pipeline der Ausführungseinheit.
Zusammen mit der Anweisung ist der ROB-Zeiger (410) zur Ausführungseinheit (408)
weitergeleitet worden. Auf diese Weise wird die Verbindung zwischen
der Anweisung (409) und ihrem entsprechenden Eintrag im
Neuordnungspuffer (411) auch noch während der Ausführung der
Anweisung aufrechterhalten.
-
Sobald
die Ergebnisse der Ausführung
der Anweisung zur Verfügung
stehen, normalerweise also am Ende der Pipeline der Ausführungseinheit, wechselt
der Bearbeitungsstatus im ROB (Neuordnungspuffer) von „nicht
beendet" auf „beendet". Somit enthält der Neuordnungspuffer
(401) die Kennungen von verschiedenen Exemplaren der logischen Register
in ihrer normalen Reihenfolge sowie Informationen darüber, ob
der Wert dieser Registerexemplare bereits ermittelt worden ist.
-
Die
Reservierungsstation (400) ist in Form einer zyklischen
Matrix ausgeführt,
die mit Hilfe von Zeigern gesteuert wird. Sobald eine Anweisung
in ihrem richtigen Format vom Anweisungspuffer (303) zur
Reservierungsstation (400) weitergeleitet wird, wird für diese
durch den Eingabezeiger (406) die entsprechende Position
des Eintrags ermittelt. Wenn die Anweisung ein oder zwei Zielregister
adressiert, muss auch im Neuordnungspuffer eine Eintragung vorgenommen
werden.
-
Auch
der Neuordnungspuffer (401) ist als zyklischer Puffer ausgeführt. In
diesem Puffer gibt es einen Zuordnungszeiger (407), der
als Eingabezeiger für
den Neuordnungspuffer dient. Dieser Zeiger zeigt auf diejenige Stelle
im Neuordnungspuffer, an welcher die nächste Eintragung erfolgen soll.
-
Während der
Zuordnungszeiger (407) für die Aufnahme der Ziele neuer
Anweisungen erforderlich ist, wird der Aussonderungszeiger (412)
zum Aussondern alter Zielregisterwerte benötigt.
-
Der
Aussonderungszeiger (412) zeigt auf das älteste Zielregister,
dessen Bearbeitung noch nicht abgeschlossen ist. Der Festschreibungsprozess
schreibt die Zielregister von solchen Einträgen fest, die älter sind
und somit in der Reihenfolge früher vorkommen
als der Eintrag, auf welchen der Aussonderungszeiger zeigt. Das
heißt,
dass die entsprechenden Einträge
freigegeben und aus den Zielregisterwerten die Werte der architekturdefinierten
Register werden, welche den „offiziellen" Maschinenstatus repräsentieren.
Außerdem
entfernt der Festschreibungsprozess alle Anweisungen in der Reservierungsstation,
welche denjenigen ROB-Einträgen
entsprechen, die vor dem Eintrag des Aussonderungszeigers (412)
stehen. Bei der von der normalen Reihenfolge abweichenden Ausführung von
Anweisungen werden eine Anzahl provisorischer Exemplare von logischen
Registern erzeugt, die noch geändert und
gelöscht
werden können.
Es gibt jedoch auch einen genauen architekturdefinierten Status
(413), der einem definierten Punkt im Anweisungsstrom entspricht,
der wiederum den architekturdefinierten Registerwerten entspricht.
-
Im
Folgenden werden die Struktur und die Verwaltung der Registerdatei
beschrieben: Der Aufbau der Registeranordnung ist in 5 dargestellt. Aus
dem Vergleich mit 3 wird klar, dass an jede Funktionseinheit,
zum Beispiel an jede Verzweigungseinheit (307), jede Ganzzahleinheit
(308) und jede Lade-/Speichereinheit (309) eine
Registerdateimatrix (310) angeschlossen sein muss. Jede
Registerdateimatrix umfasst vier Datenspalten (500, 501, 502, 503),
die aus je 16 Einträgen
zur Speicherung der verschiedenen Registerinhalte besteht, sowie eine
zusätzliche
Spalte (510) für
den Wert der I0/I1-Zähler,
die ebenfalls aus 16 Einträgen
besteht. Diese Spalte speichert die Zeiger auf die entsprechenden
architekturdefinierten Registerwerte jeder Zeile, die so genannten „Normalfolgezeiger". Während ein
Eintrag in einer der Datenspalten 36 Bit breit ist, bestehen die
Einträge
der Spalte I0/I1 lediglich aus zwei Bits.
-
Jede
der 16 Zeilen der vier Datenspalten (500, 501, 502, 503)
enthält
die Werte der verschiedenen Exemplare eines logischen Registers.
Die Zeile 504 beispielsweise enthält die verschiedenen physischen
Exemplare des logischen Registers R7. Entsprechend enthält die Zeile 505 die
verschiedenen Exemplare des logischen Registers R10. Jeder der vier
36 Bit breiten Zeileneinträge
kann den Wert eines Exemplars des logischen Registers enthalten, welches
durch diejenige Zeile repräsentiert
wird, zu der der Eintrag gehört.
-
Im
vorliegenden Beispiel gibt es drei physische Exemplare (506, 507, 508)
des logischen Registers R7. Der Registerwert von R7 in Spalte 2
(506) enthält
den architekturdefinierten Registerwert von R7. Das Datenfeld 507 in
Spalte 3 (503) repräsentiert ein
erstes und das Datenfeld 508 in Spalte 0 (500)
ein zweites provisorisches Exemplar von R7. Das dritte provisorische
Exemplar liegt noch nicht vor, sodass das Datenfeld 509 in
Spalte 1 (501) leer ist. Die vorgeschlagene Registerdateimatrix
kann neben dem architekturdefinierten Status eines logischen Registers
nur bis zu drei provisorische Exemplare dieses Registers aufnehmen.
Im Folgenden werden auch der architekturdefinierte Status eines
logischen Registers als „Normalfolgestatus" dieses logischen
Registers (506) und die weiteren physischen Exemplare (507, 508)
desselben logischen Registers als umbenannte Register bezeichnet.
-
Die
Spalte I0/I1 (510) weist für jedes logische Register zwei
Bits auf. Diese beiden Bits legen fest, welches der vier möglichen
Datenfelder in dieser Zeile den Normalfolgestatus des logischen
Registers enthält.
Bei einem Status der Spalte I0/I1 von „00" findet man den architekturdefinierten
Status im Datenfeld der Spalte 0 (500); bei "01" in der Spalte 1
(501); bei „10" in der Spalte 2
(502) und bei „11" in der Spalte 3
(503). Der Status I0/I1 (511) der Zeile für das logische
Register R7 (504) ist gleich „10", sodass sich der architekturdefinierte
Wert des Registers R7 im Datenfeld 506 befindet, welches
Bestandteil der Spalte 2 (502) ist.
-
Ein
weiteres Beispiel stellt die Zeile dar, welche das Register R10
(505) repräsentiert.
Der Status I0/I1 im Datenfeld 512 ist gleich „01", d.h., der architekturdefinierte
Wert des logischen Registers R10 befindet sich im Datenfeld 513,
welches Bestandteil der Spalte 1 ist. Aus diesem Grunde muss es
in jedem logischen Register einen Normalfolgewert geben. Außerdem befindet
sich im Datenfeld 514 der Spalte 2 ein umbenanntes Exemplar
von R10. Es gibt aber kein zweites und drittes umbenanntes Exemplar von
R10, sodass die Datenfelder 515 und 526 in den Spalten
3 und 0 leer sind.
-
6 zeigt
in Anlehnung an das Programmbeispiel von 2, wie die
Registermatrix von 5 für das Zuordnen neuer umbenannter
Exemplare zu einem bestimmten logischen Register, für das Umbenennen
logischer Register in physische Register und zum Aussondern alter
Registerexemplare verwendet werden kann, um den architekturdefinierten
Maschinenstatus kontinuierlich weiterzuschieben.
-
Die
Anweisungen 600 bis 607 entsprechen genau den
Anweisungen 200 bis 207 von 2. Auch
hier sollen nur die Exemplare des logischen Registers R3 betrachtet
werden. Die während
der Ausführung
der Anweisung entstehenden Exemplare von R3 entsprechen den in der
rechten Spalte von 2 gezeigten Exemplaren.
-
Zuerst
zeigt der Aussonderungszeiger (609) auf die Anweisung „bedingte
Verzweigung" (601).
Die vorangehende Anweisung „ODER" (600) bedient sich
des Exemplars R3.1 als Quellregister. Dieses Exemplar R3.1 wird
noch von der Ladeanweisung (602) als Quellregister verwendet.
Da der architekturdefinierte Status oder der Normalfolgestatus des Systems
durch den Status aller Register unmittelbar vor derjenigen Anweisung
definiert werden kann, auf welche der Aussonderungszeiger zeigt,
repräsentiert das
Exemplar R3.1 den Normalfolgestatus der Maschine.
-
Anschließend wird
gezeigt, wie die verschiedenen Registerexemplare von einer Registerdatei gemäß 5 berücksichtigt
werden. Zu diesem Zweck wird die Zeile für das Register R3 in der Registerdatei
betrachtet. 6 zeigt die Veränderung
dieser Zeile im Verlauf der Programmausführung.
-
Zunächst wird
festgestellt, dass der Zähler I0/I1
den Wert „01" (611) enthält. Dieser
Zähler
zeigt somit auf das zweite Datenfeld 610 der Zeile der
Registerdatei. Das heißt,
dass das Exemplar R3.1, dessen Wert sich im Datenfeld 610 befindet,
den architekturdefinierten Status repräsentiert. Die drei anderen
Felder dieser Zeile können
umbenannte Exemplare enthalten.
-
Im
Verlauf der Programmausführung
wird die Ladeanweisung (602) verarbeitet. Diese Ladeanweisung
verwendet das Exemplar R3.1 als Quelle und schreibt einen Wert in
das Register R3. Somit entsteht in Form von R3.2 ein neues aktuelles
Exemplar von R3 (209), und zum Aufnehmen dieses neuen Exemplars
muss ein physisches Register zugeordnet werden. In Schritt 612 wird
dem Exemplar R3.2 das umbenannte Exemplar 613 zugeordnet.
Jede Anweisung, welche das Exemplar als Quellregister verwendet,
muss auf das Datenfeld 613 zugreifen.
-
Die
Additionsanweisung (603) verwendet R3.2 als Quelle und
schreibt einen Wert in das Zielregister R3. Für das neue Exemplar R3.3 wird
in der Registerdatei ein weiteres Datenfeld (615) für ein umbenanntes
Register zugeordnet (614).
-
Das
neue Exemplar von R3 wird durch die Anweisung ODER (605)
erzeugt. Die Anweisung ODER schreibt einen Wert in R3 als Zielregister
und erzeugt somit das Exemplar R3.0. In Schritt 616 wird das
Datenfeld (617) für
ein umbenanntes Register zugeordnet, um das Exemplar R3.0 zu repräsentieren.
-
Jede
Zeile der Registerdatei kann das architekturdefinierte Exemplar
zuzüglich
maximal drei umbenannte Exemplare enthalten. Da bereits alle umbenannten
Exemplare (613, 615, 617) zugeordnet worden
sind, können
erst dann weitere umbenannte Exemplare zugeordnet werden, wenn der
Festschreibungsprozess alte Registerexemplare aussondert.
-
Angenommen,
sowohl die Ladeanweisung (602) als auch die Additionsanweisung
(603), welche das Zielregisterexemplar R3.3 erzeugt hat,
werden ausgesondert. Das führt
dazu, dass das Registerexemplar R3.2 zum neuen architekturdefinierten
Wert von R3 (618) wird. Dieser Vorgang wird durch Erhöhen des
Normalfolgezeigers I0/I1 auf den Wert „10" (620) angezeigt, der nun auf
das Datenfeld (619) für R3.2
zeigt. Die umbenannten Exemplare für R3.3 (622) und für R3.0 (623)
bleiben bestehen, während das
Datenfeld 621 nicht mehr belegt ist.
-
Im
weiteren Verlauf der Anweisungsdecodierung tritt nun die Ladeanweisung
(607) in Erscheinung, welche R3.0 als Quelle verwendet
und das Exemplar R3.1 als Ziel erzeugt. Da das Datenfeld (621) keinerlei
umbenannte Exemplare mehr enthält,
kann es in Schritt 624 als umbenanntes Exemplar (625)
für R3.1
zugeordnet werden.
-
Anschließend wird
die Speicheranweisung (604) ausgesondert. Das bedeutet,
dass nun der vorangehende Registerstatus zum architekturdefinierten
Status werden kann. Somit wird das Registerexemplar R3.3 zum neuen
architekturdefinierten Status des Registers R3 (626). Dann
wird der Zähler I0/I1
auf den Wert „11" erhöht (628)
und zeigt auf das Datenfeld 627. Das Datenfeld 629 enthält nun kein Registerexemplar
mehr.
-
Das
Exemplar R3.3 kann freigegeben werden, sobald die Speicheranweisung
(606) entnommen wurde, da zu diesem Zeitpunkt R3.0 zum
neuen architekturdefinierten Wert von R3 wird (630). Der Zähler I0/I1
springt auf den Wert „00" (632) und
zeigt auf das erste Datenfeld 631. Ab jetzt sind zwei Datenfelder
unbelegt.
-
7 zeigt
die Struktur der Zuordnungseinheit, welche dafür zuständig ist, dass während der Registerumbenennungs-
und -reservierungsphase die richtigen physischen Register adressiert
werden. Die Zuordnungseinheit ist eine Anordnung, welche für jedes
logische Register einen Eintrag enthält. Im vorliegenden Beispiel
gibt es die 16 logischen Register R0 bis R15, die jeweils durch
eine Zeile in der Registerdatei dargestellt sind. Somit entspricht
jeder Eintrag in der Zuordnungseinheit mit einer Breite von 10 Bit
einer Zeile in der Registerdatei.
-
Der
Zähler
I0/I1 zeigt an, welcher der vier Einträge in dieser Zeile den Normalfolgestatus
enthält.
Der Zähler
I0/I1 kommt doppelt vor: In der Registerdatei gibt es eine gesonderte
Spalte (510 in 5) mit den Werten der Zähler I0/I1,
und außerdem
gibt es noch eine Kopie des Zählers
I0/I1 in jedem Eintrag der Zuordnungseinheit (702).
-
Sobald
ein alter architekturdefinierter Registerwert eines bestimmten logischen
Registers entfernt werden soll, erfolgt dies einfach durch Erhöhen des
entsprechenden Normalfolgezeigers I0/I1. Auf diese weise wird das
erste umbenannte Exemplar zum neuen Normalfolgeregister. Das vorherige
Normalfolgeregister wird gelöscht
und es entsteht Platz zum Aufnehmen eines neuen umbenannten Exemplars.
-
Darüber hinaus
muss sowohl für
den Umbenennungsprozess als auch für den Zuordnungsprozess das
jüngste
umbenannte Exemplar bekannt sein. Dies geschieht mit Hilfe des „Umbenennungszeigers" R0/R1, der Bestandteil
jedes Eintrags der Zuordnungseinheit ist (703). Als Beispiel
soll wieder 5 dienen. In der Zeile für das Register
R7 (504) befindet sich in Spalte 2 der Normalfolgestatus
(506). Deshalb hat I0/I1 (511) den Wert „10". Außerdem gibt es
zwei umbenannte Exemplare (507, 508). Der Wert des
Zählers
R0/R1 im entsprechenden Eintrag der Zuordnungseinheit beträgt daher „00", da sich im Datenfeld 508 das
jüngste
umbenannte Exemplar befindet.
-
Wenn
auf das logische Register R7 als Quellregister zugegriffen wird,
muss auf das aktuelle umbenannte Exemplar (508) zugegriffen
werden, das durch R0/R1 bezeichnet wird.
-
Wenn
auf das logische Register R7 als Zielregister zugegriffen wird,
muss zuerst ein neues physisches Exemplar von R7 zugeordnet werden.
Das geschieht durch Erhöhen
des Zählers
R0/R1 im entsprechenden Eintrag der Zuordnungseinheit auf den Wert „01". Somit wird nun
das zuvor freie Datenfeld 509 als drittes umbenanntes Exemplar
von R7 zugeordnet. Da der Status von R0/R1 nun „01" lautet, beziehen sich fortan alle folgenden
Lesezugriffe auf das zugeordnete neue umbenannte Exemplar im Datenfeld 509.
Der Zähler
R0/R1, der „Umbenennungszeiger", zeigt immer auf
das jüngste
umbenannte Exemplar.
-
In
jedem Eintrag der Zuordnungseinheit gibt es einen dritten Zähler U0/U1
(704), welcher angibt, wie viele umbenannte Exemplare es
gibt. Dieser Wert entspricht der Differenz zwischen den Zählern R0/R1
und I0/I1.
-
Außerdem gibt
es für
jeden Eintrag der Registerdatei ein Bit (701), welches
angibt, ob die Ergebnisdaten für
jedes der Registerexemplare bereits berechnet worden sind. Diese
Bits entsprechen direkt den entsprechenden Gültigkeitsbits der Quelle in der
Reservierungsstation. Wenn ein Ergebnis eintrifft, das von einer
Anweisung benötigt
wird, und diese Anweisung noch nicht zur Reservierungsstation weitergeleitet
worden ist, sind diese Bits unerlässlich. Sie zeigen der Anweisung
an, dass deren Quelldaten bereits eingetroffen sind.
-
8A zeigt
das Format eines Eintrags der Reservierungsstation. Jede Anweisung
des externen Anweisungsstroms wird im Vordecodierungsschritt (302)
in dieses Format umgewandelt. Im Anweisungspuffer gespeicherte Anweisungen
weisen bereits das richtige Format auf.
-
In
jedem Eintrag der Reservierungsstation gibt es ein Datenfeld für den OP-Code
(800) der Anweisung. Außerdem gibt es noch vier Quelldatenfelder
(801, 802, 803, 804), welche
die physischen Quellregister der Anweisung bezeichnen. Zwei dieser
Quelldatenfelder, S0 (801) und S1 (802), bezeichnen
direkt Operanden der Anweisung. Die Datenfelder A0 (803)
und A1 (804) bezeichnen physische Quellregister, die (als „Index" und „Basis") zur Adressberechnung
dienen. Für
jedes dieser Quelldatenfelder gibt es ein Gültigkeitsbit (808),
welches anzeigt, ob der Inhalt des entsprechenden physischen Registers
zur Verfügung
steht.
-
Während der
Ausführung
der Anweisung erzeugte Daten werden in die Zielregister der Anweisung
geschrieben, die ebenfalls angegeben werden müssen. Die Datenfelder T0 (805)
und T1 (806) bezeichnen die physischen Register, in welche
Ergebnisse geschrieben werden sollen. Gemäß der Beschreibung in 4 gibt
es in jedem Eintrag der Reservierungsstation einen Neuordnungspufferzeiger (807),
der die Verbindung zu einem entsprechenden Eintrag im Neuordnungspuffer
herstellt.
-
In
jedem der Datenfelder S0, S1, A0, A1, T0 und T1 (801 bis 806)
muss ein bestimmtes physisches Universalregister bezeichnet werden.
Die 8B und 8C zeigen,
wie die Kennzeichnung des richtigen physischen Registers durchgeführt werden
kann.
-
8A zeigt
das Format der Quelldatenfelder S0 (801), S1 (802),
A0 (803) und A1 (804) eines Eintrags der Reservierungsstation.
Zuerst wird die Nummer des logischen Registers, die von der Anweisung
selbst her bekannt ist, durch die Bits 0 bis 3 angegeben. Dann muss
das aktuelle physische Exemplar des logischen Registers bezeichnet
werden. Das geschieht durch Kopieren des entsprechenden Wertes R0/R1
von der Zuordnungseinheit in das entsprechende Quelldatenfeld (810).
Dieser zwei Bit breite Anhang bezeichnet das physische umbenannte
Exemplar des logischen Registers, das als Argument der Anweisung
dienen soll. Das folgende Bit (811) ist ein Gültigkeitsbit,
welches anzeigt, ob der Inhalt des adressierten physischen Registers
zur Verfügung steht.
-
Bei
einem Zieldatenfeld (T0, T1) liegt eine andere Situation vor, da
zuerst ein neues physisches Exemplar des adressierten logischen
Registers zugeordnet werden muss. Die Bits 0 bis 3 eines Zieldatenfeldes
enthalten die Nummer (812) des logischen Registers, die
bereits aus der Anweisung selbst bekannt ist. Dann muss ein aktuelles
physisches Exemplar des logischen Registers benannt werden. In diesem
Falle wäre
es falsch, lediglich den Inhalt von R0/R1 zu kopieren, da das entsprechende
physische Register bereits vorhanden ist. Stattdessen wird ein neues
physisches Exemplar dieses logischen Registers zugeordnet, indem
vor dem Kopieren des Inhalts von R0/R1 in Bit 4 und 5 des entsprechenden
Zieldatenfeldes (813) der Zähler R0/R1 im entsprechenden Eintrag
der Zuordnungseinheit erhöht
wird. Hierbei muss auch noch geprüft werden, ob in der Registerdatei
noch ein freier Eintrag vorhanden ist. Wenn in der Registerdatei
kein freier Eintrag vorhanden ist, wird mit der Zuordnung so lange
gewartet, bis einige ältere
Registerexemplare ausgesondert worden sind.
-
9 zeigt
eine Übersicht über das
gesamte System zur Verarbeitung abweichend von der normalen Reihenfolge.
Sie zeigt die funktionellen Beziehungen zwischen der Anweisungsvordecodierung
(900), der Reservierungsstation (901), der Neuordnungseinheit
(902), der Zuordnungseinheit (903) und der Registerdatei
(904).
-
Eine
aus dem Anweisungs-Cachespeicher (301) abgerufene Anweisung,
die in das normale Anweisungsformat umgewandelt und im Anweisungspuffer
(303) gespeichert wurde, wird im Vordecodierungsschritt
analysiert (900). Der Eintrag im Anweisungspuffer enthält nur die
logischen Quell- und Zielregister, die bereits zusammen mit der
externen Anweisung geliefert wurden.
-
Nimmt
man an, dass das Operand2-Register (906) ein logisches
Quellregister ist, muss dieses Register umbenannt werden, um das
entsprechende physische Registerexemplar zu erzeugen. Zu diesem Zweck
wird der diesem logischen Register entsprechende Wert des Zählers R0/R1
aus der Matrix der Zuordnungseinheit gelesen (907). Der
Zähler
R0/R1 zeigt auf das zuletzt zugeordnete physische Exemplar dieses
logischen Registers. Wenn der Eintrag des Anweisungspuffers zur
Reservierungsstation weitergeleitet wird (901), wird der
unmittelbar zuvor ermittelte R0/R1-Wert als Anhang zur Kennung des Operand2-Registers
hinzugefügt
(908).
-
Nimmt
man an, dass das Operand1-Register (905) ein logisches
Zielregister ist, muss ein neues physisches Registerexemplar zugeordnet
werden. Hierzu sind ein Zugriff (910) auf die Zuordnungseinheit
(903) und die Erhöhung
des R0/R1-Wertes erforderlich, welcher dem durch das Operand1-Register definierten
logischen Register entspricht. Somit liegt nun ein neues physisches
umbenanntes Exemplar dieses logischen Registers vor. Wenn die Anweisung vom
Anweisungspuffer zur Reservierungsstation weitergeleitet wird, wird
der neue (erhöhte) R0/R1-Wert
als Anhang zum logischen Operand1-Register hinzugefügt (911).
-
Darüber hinaus
muss für
jedes einem logischen Zielregister entsprechende zugeordnete physische
Exemplar ein Eintrag in der Neuordnungseinheit (902) erstellt
werden. Die Einträge
in der Neuordnungseinheit werden in der normalen Reihenfolge (917)
erstellt. Da der älteste
noch nicht festgeschriebene Eintrag in der Neuordnungseinheit „das nächste auszusondernde
Zielregister" benennt,
gibt der für das
zuletzt zugeordnete Zielregisterexemplar zu erstellende Eintrag „das letzte
auszusondernde Zielregister" (912)
an.
-
Als
Ergebnis des Schrittes Registerumbenennung und -zuordnung enthält jedes
Operandendatenfeld in der Reservierungsstation (901) einen R0/R1-Wert,
mittels dessen ein bestimmtes physisches Registerexemplar in der
Registerdatei (904) eindeutig ermittelt werden kann. Aus
diesem Grunde ermöglichen
die in jedem Eintrag der Reservierungsstation enthaltenen Informationen,
Quellregisterdaten aus der Registerdatei (904) zu lesen
(912) und Zielregisterdaten in die Registerdatei zu schreiben (913).
-
Zum
Schluss wird der Prozess der Aussonderung eines alten physischen
Exemplars eines logischen Registers beschrieben. Das als nächstes auszusondernde
physische Zielregisterexemplar wird durch den ältesten Eintrag in der Neuordnungseinheit
(902) gekennzeichnet. Das älteste Exemplar eines bestimmten
logischen Registers in der Registerdatei stellt den aktuellen architekturdefinierten
Status dar. Die Spalte der Registerdatei, in welcher sich der architekturdefinierte
Wert eines bestimmten logischen Registers befindet, wird durch ihren
Normalfolgezeiger, also den I0/I1-Zeiger angezeigt, welcher diesem
logischen Register entspricht.
-
Um
den aktuellen architekturdefinierten Registerwert eines bestimmten
logischen Registers auszusondern, braucht der Zähler I0/I1 lediglich erhöht zu werden.
Dadurch geht der vorige architekturdefinierte Registerwert verloren,
und das vorige erste umbenannte Exemplar wird zum neuen architekturdefinierten
Registerwert.
-
Sowohl
die Zuordnungseinheit (903) als auch die Registerdatei
(904) enthalten Zähler
I0/I1 für jedes
logische Register. Zum Aussondern eines bestimmten Zielregisters
(914) muss deshalb der entsprechende I0/I1-Wert sowohl
in der Zuordnungseinheit (915) als auch in der Registerdatei
(916) erhöht werden.