-
Diese
Erfindung betrifft ein Computersystem zum Ausführen von Verzweigungsbefehlen
und ein Verfahren zum Betreiben eines derartigen Computersystems.
-
Programme
bestehen aus Blöcken
oder Folgen (engl.: strings) sequenzieller Befehle, die eine einzelne
Eintrittsstelle (der erste Befehl) und eine einzelne Ausgangsstelle
(der letzte Befehl) aufweisen. Es gibt ein oder zwei Wahlmöglichkeiten
von auszuführenden
Befehlsblöcken
nach einem speziellen Block. Wenn es zwei mögliche Blöcke gibt, muss eine Bedingung
verwendet werden, um festzulegen, welcher Block zu wählen ist. Das
Muster von Verbindungen zwischen Blöcken wird als Steuerung oder
Flussgraph des Programms bezeichnet.
-
Diese
Befehlsblöcke
sind zusammen in einem Speicher gepackt. Wenn es keine Wahlmöglichkeit
eines nachfolgenden Blocks (Block B) gibt, kann er normalerweise
unmittelbar nach dem ersten Block (Block A) angeordnet sein. Das
bedeutet, dass keine explizite Änderung
der Steuerung notwendig ist, um vom Block A zum Block B zu gelangen.
Manchmal ist dies nicht möglich,
beispielsweise wenn mehr als ein Block den Block B als Nachfolger
aufweist. Alle dieser Vorgänger
bis auf einen müssen
angeben, dass der nachfolgende Block nicht der nächste sequenzielle Block, sondern
der Block B ist. Dies sind nicht bedingte Verzweigungen. Einige Blöcke haben
eine Wahlmöglichkeit
von Nachfolgeblöcken.
Klarerweise kann nur einer der Nachfolger, beispielsweise der Block
B, danach sequenziell angeordnet sein. Der andere Block, der Block
C, ist explizit innerhalb des Blocks A angegeben. Ein Bedingungsverfahren
wird verwendet, um zu ermitteln, welcher Block zu wählen ist.
Wenn die Bedingung erfüllt
ist, dann ist der gewählte
Nachfolgeblock der Block C. Wenn die Bedingung nicht erfüllt ist,
dann ist der gewählte
Nachfolger der Block B. Dies sind bedingte Verzweigungen.
-
Verzweigungen
sind auf dem Gebiet gut bekannt und für ein Computersystem bedeutsam,
um ein Programm auszuführen.
Bekannte Computer enthalten ein spezielles Register, das Befehls- Pointer-Register,
das eine Angabe der Adressen des nächsten, auszuführenden
Befehls bereitstellt. Dieses Register wird üblicherweise automatisch nach
einer Befehlsausführung
inkrementiert, so dass es nun die Adresse des nächsten sequenziellen Befehls
angibt. Verzweigungsbefehle werden verwendet, um dieses Verhalten
zu ändern.
Diese Verzweigungsbefehle spezifizieren eine alternative Adresse
(die Zielstelle) für
den nächsten
ausführbaren
Befehl. Bedingte Verzweigungsbefehle spezifizieren auch eine Bedingung,
die für
die alternative, zu verwendende Adresse erfüllt sein muss – ansonsten
wird der Befehlspointer wie üblich
inkrementiert. Diese Verzweigungsbefehle definieren daher das Ende
eines Blocks von Befehlen.
-
Der
Computer in einem Computersystem ohne Pipeline-Verarbeitung ruft ab, dekodiert und
führt aus, um
einen einzelnen Befehl zu Ende zu bringen, bevor er zu dem nächsten Befehl
weiter geht. In einem System mit Pipeline-Verarbeitung, in dem Abruf-,
Dekodier- und Ausführungsstufen
allesamt gleichzeitig an einem Strom von Befehlen arbeiten, ist
es jedoch möglich,
Befehle abzurufen, die nicht benötigt
werden. Man betrachte beispielsweise ein System mit einer vierstufigen
Befehls-Pipeline mit Abruf-, Dekodier-, Ausführungs- und Schreibstufen.
Der früheste
Zeitpunkt, zu dem ein Verzweigungsbefehl detektiert werden kann,
befindet sich in der Dekodier-Stufe, wobei zu diesem Zeitpunkt der
nächste
sequenzielle Befehl in dem Speicher bereits abgerufen worden ist.
Für eine
nicht bedingte Verzweigung muss dieser verworfen werden, und neue
Befehle werden von der Zielstelle abgerufen. Für bedingte Verzweigungen ist
es komplizierter. Der Zustand muss evaluiert werden, um zu ermitteln,
ob die Zielstelle zu ändern
ist oder nicht. Dies geschieht in der Ausführungs-Stufe, wobei daher der
sequenziell abgerufene Befehl in der Abruf-Stufe zurückgestellt
werden muss und die Pipeline-Verarbeitung nur dann fortschreiten
kann, nachdem die Verzweigung ausgeführt worden ist. Wenn die Bedingung
wahr war, muss der sequenziell abgerufene Befehl ignoriert werden,
und neue Befehle werden von der Zielsstelle abgerufen. Die erste
Pipelinebearbeitung, die auf eine Prozessorarchitektur angewendet
wird, soll Befehle vorab ausgeben, weil dies eine der einfachsten
Beschleunigungen ist.
-
Aus
der vorherigen Beschreibung ist es klar, dass der Befehl nach einem
Verzweigungsbefehl immer abgerufen wird, aber nur manchmal erforderlich
ist, und dass daher eine Pipeline-Verarbeitungsblase erzeugt wird, während ermittelt
wird, was zu tun ist. Ein Versuch, dies zu verbessern, ist durchgeführt worden,
indem die Semantik von Verzweigungsbefehlen geändert wurde, so dass der nachfolgende
Befehl immer ausgeführt wird
und die Verzweigung festlegt, ob der Befehl, der nach diesem ausgeführt wird,
der eine sequenziell nach diesem ist oder der Befehl an der Zielstelle.
Diese werden als verzögerte
Verzweigungen bezeichnet und der Befehl, der dem Verzweigungsbefehl
unmittelbar folgt, wird als Verzweigungsverzögerungszeitschlitz bezeichnet. 1 veranschaulicht
schematisch diese Operation. In der Dekodierungsstufe wird der Verzweigungsbefehl
detektiert. Der Verzweigungsverzögerungszeitschlitz
ist Inst 1, der immer ausgeführt
wird. Wenn die Verzweigung gewählt
wird, dann ist der nächste
ausgeführte
Befehl Inst D0, der der erste Befehl eines anderen Blocks ist, wohingegen,
wenn die Verzweigung nicht gewählt
wird, er Inst 2 ist, der der erste Befehl des nächsten folgenden Blocks ist.
Inst 1 muss ein Befehl sein, der immer ausgeführt werden kann, unabhängig von
dem Ergebnis der (bedingten) Verzweigung, und es darf kein Befehl
sein, der festlegt, ob die bedingte Verzweigung zu wählen ist.
Wenn kein Befehl innerhalb des Programms zu finden ist, der diese
Bedingungen erfüllt,
dann muss ein Befehl, der keine Wirkung hat (NO OP), stattdessen
eingefügt
werden.
-
Pipeline-Verarbeitungen
können
so ausgelegt sein, dass die optimale Anzahl an Verzögerungszeitschlitzen
mehr als 1 beträgt.
Je tiefergehend ein Computer mit einer Pipeline-Verarbeitung ausgestattet
ist, desto mehr Verzögerungszeitschlitze
werden im Allgemeinen benötigt.
Unglücklicherweise
ist es immer schwieriger, brauchbare Befehle aufzufinden, die in
jede zusätzlichen
Zeitschlitz eingebracht werden können, so
dass vie le von diesen mit Befehlen gefüllt werden, die nichts bewirken.
Dies ordnet große
Blasen von NO-OP-Befehlen in der Ausführungs-Pipeline an, was den
Geschwindigkeitsvorteil verringert, der erhalten wird, indem eine
tiefe Pipeline-Verarbeitung durchgeführt wird.
-
Ein
weiteres bedeutsames Problem bei diesem Ansatz besteht darin, dass,
wenn ein neues Computersystem eines vorhandenen Befehlssatzes mit
einer neuen Pipeline-Organisation und daher einer anderen Anzahl
an Verzweigungsverzögerungszeitschlitzen
ausgelegt wird, es vorhandene Binärfunktionen nicht ausführen kann.
Programme müssen
erneut kompiliert werden, um ausgeführt zu werden.
-
Beim
Versuch, Verzweigungsverzögerungszeitschlitze überflüssig zu
machen, verwendet ein bekanntes System zwei Einrichtungen zum Abrufen
von Befehlen in der Abruf-Stufe einer Pipeline-Verarbeitung, wobei jede Einrichtung
zum Abrufen von Befehlen in der Lage ist, eine Folge von Befehlen
abzurufen und zu speichern. Eine Einrichtung zum Abrufen von Befehlen
weist ihr zugeordnet eine lokale Dekodierschaltkreisanordnung auf,
die ausgelegt ist, um Verzweigungsbefehle zu detektieren. Es ist
ersichtlich, dass diese lokale Dekodierschaltkreisanordnung zusätzlich zu
der normalen Dekodierstufe der Pipeline vorhanden ist. Wenn ein Verzweigungsbefehl
von der aktiven Einrichtung zum Abrufen detektiert wird, initialisiert
sie die andere Einrichtung zum Abrufen von Befehlen, um damit zu
beginnen, Befehle von dem neuen Block abzurufen, wobei die Befehle
bis zu dem Verzweigungsbefehl des ersten Blocks weiterhin zum Dekodieren
und Ausführen
in die Pipeline eingebracht werden. Dieses System benötigt nicht
nur eine zusätzliche
lokale Dekodierschaltkreisanordnung, um Verzweigungsbefehle vor
der normalen Dekodierstufe der Pipeline zu dekodieren, sondern es schließt auch
ein spekulatives Abrufen von Befehlen aus dem Speicher ein, von
denen viele nicht erforderlich sein können.
-
EP-A-355069
(Evans & Sutherland
Computer Corporation) definiert ein System, in dem es eine Trennung
des Befehls gibt, um eine Verzweigung in zwei unterschiedliche Teile
zu erreichen. Der Befehl zum Festlegen einer Verzweigung gibt die
Zielstelle für
die Verzweigung an und kann so nah wie möglich am Anfang der Folge von
Befehlen angeordnet sein.
-
Eine
tatsächliche
Implementierung der Verzweigung wird später in Antwort auf ein Trennbit
durchgeführt,
das in einem späteren
Befehl angeordnet ist.
-
Die
Bereitstellung der Zielstelle für
die Verzweigung durch den Befehl zum Festlegen einer Verzweigung
sorgt für
eine frühe
Angabe des Umstandes, dass ein Speicherzugriff durchzuführen ist
(oder wahrscheinlich durchzuführen
ist) und stellt die Speicheradresse (die Zielstelle) für diesen
Zugriff bereit. Wenn das Trennbit bewirkt, dass die Verzweigung
gewählt
wird und daher der Zeitpunkt eintritt, auf diese Speicheradresse
zuzugreifen, hat das System keine Chance, eine Einstellung für den Zugriff
vorzunehmen, beispielsweise indem die erforderlichen Daten in einen
lokalen Cache gebracht werden.
-
Ein
mit dem System von EP-A-355069 verbundenes Problem besteht darin,
dass die Zielstelle, von der neue Befehle abzurufen sind, zurückgesetzt
wird, nachdem ein Trennbitsignal ausgegeben worden ist. Dies bedeutet,
dass es dort keine mehrfachen Verzweigungen unter Verwendung der
Zielstelle geben kann, die von einem einzelnen Befehl zum Festlegen
einer Verzweigung festgelegt wird. Es ist vorteilhaft, diese Situation
zuzulassen, und es ist eine Aufgabe der vorliegenden Erfindung,
ein verbessertes System zur Implementierung von Verzweigungen bereitzustellen,
die dies ermöglichen.
-
IBM
Technical Disclosure Bulletin, Band 37, Nummer 04B betrifft ein
Verfahren, Verzweigungen zu behandeln, bei dem, wenn eine Anzahl
an bedingten Verzweigungsbefehlen die gleiche Zieladresse aufweist,
die Bedingungen für
jeden dieser Befehle gleichzeitig überprüft werden können. Dies wird erreicht, indem
ein "bedingte Verzweigung
zu vorherigem Ziel"-Befehl [engl.: "conditional branch
to previous target" instruction]
verwendet wird.
-
Das
Patent der Vereinigten Staaten Nummer 4,200,927 betrifft einen Hochleistungscomputer,
der Befehle vorab abruft und vorab kodiert, um sie sequenziell einer
Ausführungseinheit
bereitzustellen. Ein Funktionsmechanismus zum Vorverarbeiten von
Befehlen weist drei separate Mechanismen auf, um Befehle abzurufen.
Eine Anzahl von Verzweigungsbefehlstypen wird definiert und das
offenbarte Verfahren schließt
ein, zu raten, ob eine bedingte Verzweigung gewählt wird oder nicht.
-
"An Instruction Cache
Design for use with a Delayed Branch" von A. R. Pleszkun & M. K. Farrens, Universität von Visconsin,
betrifft einen Befehlscache, der einen PBR-Befehl zum Vorbereiten
einer Verzweigung [engl: prepare to branch PBR instruction] verwendet.
Dieser Befehl versucht eine Pipeline-Stufe arbeitend zu halten,
nachdem eine bedingte Verzweigung aufgefunden worden ist, indem
spezifiziert wird, dass bis zu sieben der folgenden Befehle unbedingt
ausgeführt
werden.
-
Gemäß einem
Aspekt der vorliegenden Erfindung ist ein Computersystem zum Abrufen,
Dekodieren und Ausführen
von Befehlen bereitgestellt, das umfasst:
eine Speicherschaltkreisanordnung
zum Speichern einer Mehrzahl von Befehlen an entsprechenden Speicherstellen,
wobei die Mehrzahl von Befehlen in Befehlsfolgen angeordnet ist,
wobei jede Befehlsfolge einen ersten Befehl und eine Gruppe von
nachfolgenden Befehlen umfasst,
eine Befehlsabrufschaltkreisanordnung
zum Abrufen einer Reihe von Befehlen von der Speicherschaltkreisanordnung
und mit einer Angabeeinrichtung, um eine Angabe einer nächsten Adresse
bereitzustellen, an der eine nächste
Abrufoperation auszuführen
ist,
eine Ausführungsschaltkreisanordnung
zum Ausführen
abgerufener Befehle, wobei wenigstens einige der Befehlsfolgen jeweils
aufweisen
- (a) einen Befehl (SET) zum Festlegen
einer Verzweigung, der eine Angabe über eine Zielstelle bereitstellt, von
der ein nachfolgender Befehl abgerufen werden kann, wobei der nachfolgende
Befehl von einer anderen Befehlsfolge ist,
- (b) einen Befehl (DO) zum Bewirken einer Verzweigung,
dadurch
gekennzeichnet,
dass wenigstens einige der Befehlsfolgen ferner
aufweisen - (c) einen Bedingungsbefehl, der eine
Bedingung definiert und festlegt, dass weitere, auszuführende Befehle
nur dann neue Befehle sind, wenn die Bedingung erfüllt ist,
dass
die Befehlsabrufschaltkreisanordnung erste und zweite Befehlsabrufeinrichtungen
umfasst, um nachfolgende Befehle bzw. neue Befehle abzurufen, und
in Antwort auf ein Ausführen
des Befehls (SET) zum Festlegen einer Verzweigung betrieben wird,
um beginnend bei der Zielstelle nachfolgende Befehle von der Zeichenfolge,
die den Befehl zum Festlegen einer Verzweigung enthält, und
die neuen Befehle aus der anderen Befehlsfolge parallel abzurufen,
während
die nachfolgenden Befehle weiter ausgeführt werden,
und dass das
Computersystem eine Auswahlschaltkreisanordnung umfasst, um in Antwort
auf ein Ausführen des
Befehls (DO) zum Bewirken einer Verzweigung die Ausführungsschaltkreisanordnung
zu veranlassen, die neuen Befehle auszuführen, wenn die von dem Bedingungsbefehl
definierte Bedingung erfüllt
ist, wobei die Auswahlschaltkreisanordnung betriebsfähig ist,
eine Ausgewählte
der ersten und zweiten Befehlsabrufeinrichtungen mit der Ausführungsschaltkreisanordnung
zu verbinden.
-
Die
Erfindung stellt auch ein Verfahren zum Betreiben eines Computers,
um Befehle abzurufen, zu dekodieren und auszuführen, bereit, wobei der Computer
eine Speicherschaltkreisanordnung aufweist, die eine Mehrzahl von
Befehlen an entsprechenden Speicherstellen speichert, wobei die
Mehrzahl von Befehlen in Befehlsfolgen angeordnet ist, wobei jede
Befehlsfolge einen ersten Befehl und eine Gruppe von nachfolgenden Befehlen
aufweist, wobei das Verfahren umfasst:
Abrufen einer Reihe
von Befehlen von der Speicherschaltkreisanordnung und Bereitstellen
einer Angabe einer nächsten
Adresse, an der eine nächste
Abrufoperation auszuführen
ist, wobei eine erste Befehlsabrufeinrichtungen nachfolgende Befehle
abruft und eine zweite Befehlsabrufeinrichtung neue Befehle abruft,
Dekodieren
der Befehle,
Ausführen
jedes Befehls der Reihe nach, wobei wenigstens einige der Befehlsfolgen
jeweils aufweisen
- (a) einen Befehl (SET) zum
Festlegen einer Verzweigung, der eine Angabe über eine Zielstelle bereitstellt, von
der ein nachfolgender Befehl abgerufen werden kann, wobei der nachfolgende
Befehl von einer anderen Befehlsfolge ist,
- (b) einen Befehl zum Bewirken einer Verzweigung, und
- (c) einen Bedingungsbefehl, der eine Bedingung für eine zu
verwendende Verzweigung definiert,
Speichern der Angabe
der Zielstelle in einem Zielspeicher (65) nach einem Ausführen des
Befehls zum Festlegen einer Verzweigung,
paralleles Abrufen
der nachfolgenden Befehle aus der Folge, die den Befehl zum Festlegen
einer Verzweigung enthält,
und der neuen Befehle aus der anderen Befehlsfolge beginnend bei
der Zielstelle,
Fortsetzen des Ausführens der nachfolgenden Befehle
bis der Befehl (DO) zum Bewirken einer Verzweigung ausgeführt wird,
was angibt, dass weitere, auszuführende
Befehle die neuen Befehle sind, wenn die von dem Bedingungsbefehl
definierte Bedingung erfüllt
ist, und
Antworten auf den Befehl (DO) zum Bewirken einer Verzweigung
durch Beginnen der Ausführung
der neuen Befehle, wobei der Befehl zum Bewirken einer Verzweigung
auswählt,
welche der ersten und zweiten Befehlsabrufeinrichtungen Befehle
zur Ausführung
zuführt.
-
Bei
einer Ausführungsform
umfasst die Befehlsabrufschaltkreisanordnung zwei Befehlspuffer,
einen ersten, mit der Ausführungsschaltkreisanordnung
verbundenen Puffer zum Speichern nachfolgender Befehle und einen
zweiten Puffer zum Speichern neuer Befehle, wobei in Antwort auf
ein Ausführen
des Befehls (DO) zum Bewirken einer Verzweigung die Inhalte des
zweiten Puffers in den ersten Puffer kopiert werden.
-
Bei
der beschriebenen Ausführungsform
weist die Befehlsabrufsschaltkreisanordnung zwei Befehlsabrufeinrichtungen
auf, um jeweils den nachfolgenden Befehl und den neuen Befehl abzurufen,
und wobei die Auswahlschaltkreisanordnung betriebsfähig ist,
eine gewählte
der Befehlsabrufeinrichtungen mit der Ausführungsschaltkreisanordnung
zu verbinden.
-
Im
einfachsten Fall kann der Zielspeicher die Speicheradresse der Zielstelle
speichern. Um einen Kernel-Eintrag zuzulassen, kann der Befehl zum
Festlegen einer Verzeigung die Zielstelle unter Verwendung eines
implizierten Werts identifizieren, der ein spezielles Register adressiert,
das die Speicheradresse des neuen Befehls speichert.
-
Um
zu ermöglichen,
Deskriptor-Verzweigungen auszuführen,
kann der Zielspeicher einen Pointer zu einer Speicherstelle speichern,
die die Speicheradresse der Zielstelle enthält.
-
Das
Signal, um eine Verzweigung zu bewirken, wird erzeugt, wenn die
Verzweigungsstelle, an der die Verzweigung vorzunehmen ist, identifiziert
wird. Dies kann auf eine Anzahl von Arten durchgeführt werden. Beispielsweise
kann ein weiterer Befehl in der Folge von vor der Verzweigungsstelle
ausgeführten
Befehle angeordnet sein, wobei in diesem Fall der genannte weitere
Befehl die Verzweigungsstelle identifiziert, die in einem Verzweigungsstellenregister
gespeichert ist. Die Inhalte des Verzeigungsstellenregisters können dann
mit einem Befehlspointerregister verglichen werden, das eine Angabe
der Adresse speichert, von der ein nächster Befehl normalerweise
abgerufen würde,
wobei das Signal, um eine Verzweigung zu bewirken, erzeugt wird, wenn
die zwei gleich sind. Alternative Verfahren zum Identifizieren der
Verzweigungsstelle sind ebenfalls hier diskutiert.
-
Die
Bereitstellung eines weiteren Befehls, der die Verzweigungsstelle
identifiziert, der aber vor der Verzweigungsstelle angeordnet ist,
verringert die Anzahl von unerwünschten
Befehlen, die abgerufen werden, bevor die Verzweigung gewählt wird.
-
Als
weitere Alternative kann der Befehl zum Festlegen einer Verzweigung
selbst die Verzweigungsstelle identifizieren, die in dem Verzweigungsstellenregister
gespeichert ist, wodurch das Erfordernis eines weiteren Befehls
beseitigt wird.
-
Bei
einer speziell bevorzugten Ausführungsform
wird die Verzweigungsstelle jedoch durch einen weiteren, speziell
vorgesehenen, sich von dem Befehl zum Festlegen einer Verzweigung
unterscheidenden Befehl identifiziert, der an der Verzweigungsstelle
in der Folge von ausgeführten
Befehlen angeordnet ist. Um zu ermöglichen, dass zusätzliche
Verzweigungen bewirkt werden, kann dieser Befehl zum Bewirken einer
Verzweigung selbst die Bedingung definieren, die zu erfüllen ist,
so dass eine Verzweigung nur dann gewählt wird, wenn die Bedingung
erfüllt
ist, und nicht gewählt
wird, wenn die Bedingung nicht erfüllt ist.
-
Dies
sorgt für
einen weiteren technischen Vorteil gegenüber dem oben diskutierten System
gemäß EP-A-355069.
In diesem System muss der Befehl selbst angeben, ob die Verzweigung
bedingt ist oder nicht und bewirken, dass sich verschiedene unterschiedliche
Zustandsdetektoren in einem betriebsbereiten Zustand befinden, um
bereit zu sein, eine Bedingung zu erfassen. Die Bedingung selbst
wird in einem Befehl definiert, der sich von dem Befehl zum Festlegen
einer Verzweigung und von dem Trennbitbefehl unterscheidet.
-
Um
die Notwendigkeit von Zustandsindikatoren zu vermeiden, stellt die
vorliegende Erfindung gemäß einem
anderen Aspekt ein Computersystem zum Abrufen, Dekodieren und Ausführen von
Befehlen bereit, das umfasst:
eine Speicherschaltkreisanordnung
zum Speichern einer Mehrzahl von Befehlen an entsprechenden Speicherstellen,
wobei die Mehrzahl von Befehlen in Befehlsfolgen angeordnet ist,
wobei jede Folge einen ersten Befehl und eine Gruppe von nachfolgenden
Befehlen umfasst,
eine Befehlsabrufschaltkreisanordnung zum
Abrufen einer Reihe von Befehlen aus der Speicherschaltkreisanordnung
und mit einer Angabeeinrichtung, um eine Angabe einer nächsten Adresse
bereitzustellen, an der eine nächste
Abrufoperation auszuführen
ist,
eine Ausführungsschaltkreisanordnung
zum Ausführen
abgerufener Befehle, wobei wenigstens eine der Befehlsfolgen einen
Befehl (SET) zum Festlegen einer Verzweigung, der eine Angabe über eine
Zielstelle bereitstellt, von der ein nachfolgender Befehl abgerufen
werden kann, wobei der nachfolgende Befehl von einer anderen Befehlsfolge
ist, und einen Befehl (DO) zum Bewirken einer Verzweigung umfasst,
der sich von dem Befehl zum Festlegen einer Verzweigung unterscheidet
und an der Verzweigungsstelle angeordnet ist, nach der die neuen
Befehle auszuführen
sind, und wobei die Befehlsabrufschaltkreisanordnung in Antwort
auf eine Ausführung
des Befehls (SET) zum Festlegen einer Verzweigung betrieben wird,
um bei der Zielstelle beginnend nachfolgende Befehle aus der Folge,
die den Befehl zum Festlegen einer Verzweigung enthält, und
neue Befehle aus der anderen Befehlsfolge parallel abzurufen, während die
nachfolgenden Befehle weiter ausgeführt werden; und
eine Auswahlschaltkreisanordnung,
die in Antwort auf ein Ausführen
des Befehls (DO) zum Bewirken einer Verzweigung die Ausführungsschaltkreisanordnung
veranlasst, die neuen Befehle auszuführen, wenn eine durch den Befehl
zum Bewirken einer Verzweigung festgelegte Bedingung erfüllt ist.
-
Gemäß einem
weiteren Aspekt stellt die Erfindung auch ein Verfahren zum Betreiben
eines Computers, um Befehle abzurufen, zu dekodieren und auszuführen, bereit,
wobei der Computer eine Speicherschaltkreisanordnung aufweist, die
eine Mehrzahl von Befehlen an entsprechenden Speicherstellen speichert,
wobei die Mehrzahl von Befehlen in Befehlsfolgen angeordnet ist,
wobei jede Folge einen ersten Befehl und eine Gruppe von nachfolgenden
Befehlen aufweist, wobei das Verfahren umfasst:
Abrufen einer
Reihe von Befehlen aus der Speicherschaltkreisanordnung und Bereitstellen
einer Angabe einer nächsten
Adresse, an der eine nächste
Abrufoperation auszuführen
ist,
Dekodieren der Befehle,
Ausführen jedes Befehls der Reihe
nach, wobei wenigstens eine der Befehlsfolgen einen Befehl (SET)
zum Festlegen einer Verzweigung, der eine Angabe über eine
Zielstelle bereitstellt, von der ein nachfolgender Befehl abgerufen
werden kann, wobei der nachfolgende Befehl von einer anderen Befehlsfolge
ist,
paralleles Abrufen von nachfolgenden Befehlen aus der
Befehlsfolge, die den Befehl zum Festlegen einer Verzweigung enthält, und
von neuen Befehlen aus der anderen Befehlsfolge beginnend bei der
Zielstelle bei Ausführung
des Befehls zum Festlegen einer Verzweigung;
paralleles Abrufen
der nachfolgenden Befehle von der Zeichenfolge, die den Befehl zum
Festlegen einer Verzweigung und die neuen Befehle von der anderen
Befehlsfolge enthält,
die an der Zielstelle beginnt,
Fortsetzen des Ausführens der
nachfolgenden Befehle, bis ein Befehl zum Bewirken einer Verzweigung
ausgeführt
wird, der an der Verzweigungsstelle angeordnet ist, nach der neue
Befehle auszuführen
sind, und der angibt, dass weitere, auszuführende Befehle die neuen Befehle
sind, wenn eine durch den Befehl zum Bewirken einer Verzweigung
festgelegte Bedingung erfüllt
ist; und
Antworten auf den Befehl zum Bewirken einer Verzweigung,
indem eine Ausführung
der neuen Befehle begonnen wird.
-
Als
alternative Anordnung, um das Computersystem in die Lage zu versetzen,
bedingte Verzweigungen auszuführen,
kann es eine Schaltkreisanordnung aufweisen, um einen Zustandindikator
in einem eines bestätigten
Zustands und eines zurückgewiesenen
Zustands zu speichern. Der bestätigte
Zustand ist einer, bei dem weitere, auszuführende Befehle neue Befehle
beginnend bei der Zielstelle sind. Der zurückgewiesene Zustand ist einer,
bei dem weitere, auszuführende
Befehle nachfolgende Befehle im Speicher und keine neuen Befehle
sind. Einer der Zustände
kann in Antwort auf ein Ausführen
des Befehls zum Festlegen einer Verzweigung festgelegt sein, und
der andere der Zustände
kann in Antwort auf ein Ausführen
eines zweiten Befehls selektiv festgelegt sein, der sich von dem
Befehl zum Festlegen einer Verzweigung unterscheidet und einer Bedingung
unterworfen ist.
-
Der
zweite Befehl kann ein Bestätigungsbefehl
sein, der den bestätigten
Zustand einstellt, wenn die Bestätigungsbedingung
erfüllt
ist.
-
Alternativ
könnte
der zweite Befehl ein Zurückweisungsbefehl
sein, der den zurückgewiesenen
Zustand einstellt, wenn die Zurückweisungsbedingung
erfüllt
ist.
-
Die
Bereitstellung dieser Zurückweisungs-
oder Bestätigungsbefehle
ermöglicht
eine weitere Verbesserung dahingehend vorzunehmen, dass der Befehl
zum Festlegen einer Verzweigung der erste Befehl der Folge ist und
es eine Mehrzahl aneinander anschließender Befehlsfolgen gibt,
wobei der Befehl zum Festlegen einer Verzweigung als weiterer Befehl
dient, um das Signal zum Bewirken einer Verzweigung zu erzeugen, wenn
sich der Zustandsindikator in dem bestätigten Zustand befindet. Es
ist ersichtlich, dass der als weiterer Befehl dienende Befehl zum
Festlegen einer Verzweigung auch den Zustand des Zustandsindikators
zurück in
seinem ursprünglichen
Zustand ändert.
Vorzugsweise kann der Beschädigungs-/Zurückweisungsbefehl
so früh
wie möglich
in der Folge angeordnet werden (nachdem die Bedingung erzeugt worden
ist), so dass der Ausführungsschaltkreisanordnung
eine frühe
Angabe bereitgestellt werden kann, welchen Weg die Verzweigung gehen
wird.
-
Für ein besseres
Verständnis
der vorliegenden Erfindung und um zu zeigen, wie dieselbe umgesetzt werden
kann, wird nun beispielshalber auf die beigefügten Zeichnungen Bezug genommen,
in denen:
-
1 eine
schematische Veranschaulichung eines bekannten Verzweigungssystems
der vorliegenden Erfindung für
nicht bedingte Verzweigungen ist;
-
2 eine
schematische Veranschaulichung des Verzweigungssystems der vorliegenden
Erfindung für
nicht bedingte Verzweigungen ist;
-
3 eine
schematische Veranschaulichung des Verzweigungssystems der vorliegenden
Erfindung für
bedingte Verzweigungen ist;
-
4 ein
einfaches Blockdiagramm eines Prozessors mit Pipeline-Verarbeitung
ist;
-
5 ein
Schaltkreisdiagramm einer Befehlsabrufeinrichtung ist;
-
6 ein
Schaltkreisdiagramm eines Computersystems zum Implementieren von
Verzweigungsbefehlen ist;
-
7 ein
Schaltkreisdiagramm einer Befehlsabrufeinrichtung mit Kernel- und
Deskriptor-Funktionen ist;
-
8 ein
schematisches Diagramm ist, das ein Aufrufen einer Prozedur veranschaulicht;
-
9 eine
Skizze ist, die Zustände
zum Durchführen
von Prozeduraufrufen veranschaulicht;
-
10 ein
Blockdiagramm ist, das eine alternative Implementierung eines Befehlsabrufschaltkreises veranschaulicht;
-
11 ein
Blockdiagramm ist, das eine Einrichtung zum nicht vorhersagenden
Abrufen veranschaulicht; und
-
12 ein
Blockdiagramm ist, das eine Einrichtung zum vorhersagenden Abrufen
veranschaulicht.
-
Zuerst
wird auf die 2 und 3 Bezug
genommen, um das Konzept zu erläutern,
das dem Verzweigungssystem der vorliegenden Erfindung zugrunde liegt. 2 veranschaulicht
drei Blöcke
von Befehlen in einem Speicher, Block A, Block B und Block C. Jeder
Block umfasst einen ersten Befehl, der im jeweiligen Fall ein Befehl
Set B, Set C, Set D zum Festlegen einer Verzweigung ist, eine Reihe
von nachfolgenden Befehlen, zum Beispiel Inst A1, Inst A2 ... Inst
Ai – 1
in Block A, und wenigstens einen Befehl, der in jedem Fall ein Befehl
zum Bewirken einer Verzeigung ist, der hier als D0 bezeichnet wird.
Es wird angenommen, dass in einem Computersystem mit Pipeline-Verarbeitung die
Reihe von Befehlen in Block A abgerufen, dekodiert und ausgeführt wird.
Bei Ausführung
des ersten Befehls Set B, wird eine Zielstelle für eine Verzweigung gespeichert,
die in diesem Fall die Speicheradresse des ersten Befehls Set C
von Block B identifiziert. In dieser Stufe wird jedoch abgesehen
davon, die Zielstelle zu speichern und möglicherweise den Speicher,
der den Block B enthält,
für einen
Zugriff einzustellen, beispielsweise indem die relevanten Speicheradressen
in einen lokalen Cache bewegt werden, kein Vorgang durchgeführt. Die
Befehle in Block A werden weiter abgerufen, dekodiert und ausgeführt, bis
der letzte Befehl D0 ausgeführt
wird. Die Ausführung
dieses Befehls bewirkt, dass ein Signal zum Bewirken einer Verzweigung
erzeugt wird, was die Ausführungseinheit
veranlasst, die Zielstelle, die durch den Einstellbefehl Set B eingestellt
worden ist, als ihren nächsten
Befehl zu adressieren. Daher ist der nächste, vom Speicher abzurufende
Befehl der erste Befehl Set C von Block B. Dies ist in 2 durch
den gepunkteten Pfeil angegeben.
-
2 veranschaulicht
den Fall nicht bedingter Verzweigungen, das sind Verzweigungen,
die zwangsläufig
gewählt
werden. 3 veranschaulicht die Position
für bedingte
Verzweigungen, das sind Verzweigungen, die abhängig davon, ob eine Bedingung,
die beurteilt worden ist, erfüllt
wird oder nicht, gewählt
werden können
oder nicht. 3 veranschaulicht den Fall,
in dem ein dritter Befehl zusätzlich
zu dem Befehl zum Festlegen ei ner Verzweigung und dem Befehl zum
Bewirken einer Verzweigung, die oben unter Bezugnahme auf 2 beschrieben
wurden, verwendet wird. In 3 wird dieser
dritte Befehl als CONFIRM bezeichnet, auch wenn es im Folgenden
ersichtlicher wird, dass es möglich
ist, bedingte Verzweigungen zu implementieren, wobei ein Zurückweisungsbefehl
mit entgegengesetzter Semantik verwendet wird.
-
Es
ist auch möglich,
bedingte Verzweigung unter Verwendung eines bedingten D0-Befehls
zu implementieren.
-
3 veranschaulicht
drei Reihe von Befehlen, die im Speicher als Block A, Block B und
Block C gespeichert sind. Block B ist als an den Block A anschließend gezeigt
und ist im Speicher so angeordnet, dass, wenn Befehle aus dem Speicher
unter Verwendung von sequenziellen Speicheradressen abgerufen werden, Befehle
dann normalerweise in der Folge von Block A gefolgt von Block B
abgerufen werden. Block C ist als irgendwo im Speicher angeordnet
gezeigt. Wie in 2 umfasst jeder Block einen
ersten Befehl, der ein Befehl zum Festlegen einer Verzweigung ist
(Set C in Block A, Set D in Block B und Set in Block C). Block A
umfasst zusätzlich
eine Reihe von auszuführenden
Befehlen, die einen Bestätigungsbefehl
und den letzten Befehl umfassen, der der Befehl zum Bewirken einer
Verzweigung ist. Wie oben unter Bezugnahme auf 2 beschrieben,
werden Befehle abgerufen, dekodiert und ausgeführt. Wenn der erste Befehl
von Bock A ausgeführt
wird, wird er als Befehl zum Festlegen einer Verzweigung mit einer
Zielstelle identifiziert, die die Speicheradresse für den ersten
Befehl Set E in Block C identifiziert. Befehle in Block A werden
weiterhin abgerufen, dekodiert und ausgeführt, bis der Bestätigungsbefehl
erreicht wird, der einen ihm zugeordnete Bedingung aufweist. Wenn
die Bedingung erfüllt
ist, wird die Verzweigung bestätigt
und die Ausführung
des Befehls D0 zum Bewirken einer Verzweigung an dem Ende von Block
A bewirkt, dass die durch die Zielstelle identifizierte Verzweigung,
wie durch die gepunktete Linie in 3 angegeben,
gewählt
wird. Daher ist der nächste
abzurufende, dekodierende auszuführende
Befehl der erste Befehl Set E von Block C. Wenn die Bestätigungsbedingung nicht
erfüllt
ist, wird die Verzweigung nicht gewählt, wenn der Befehl zum Bewirken
einer Verzweigung ausgeführt
wird, aber stattdessen ist der nächste,
abzurufende, zu dekodierende und auszuführende Befehl der erste Befehl
Set D von Block B, der dem Block A im Speicher sequenziell folgt.
Es ist auf einfache Weise zu erkennen, dass es erforderlich ist,
sobald Betätigungsbefehle
eingeführt
worden sind, auch nicht bedingte Verzweigungen zu bestätigen, wie
zum Beispiel der, der beispielshalber in Block C veranschaulicht
ist, wo die Verzweigung immer bestätigt wird und keiner Bedingung
unterworfen ist.
-
Zwecks
der vorliegenden Beschreibung wird angenommen, dass jedes brauchbare
Computersystem in der Lage sein muss, zusätzlich zu nicht bedingten Verzweigungen
bedingte Verzweigungen zum implementieren. Es ist ersichtlich, dass,
um Verzweigungen, wie oben unter Bezugnahme auf die 2 und 3 beschrieben,
zu implementieren, ein Zielregister vorgesehen sein muss, um die
Zielstelle zu speichern, die durch den Befehl zum Festlegen einer
Verzweigung angegeben wird. Für
bedingte Verzweigungen muss außerdem ein
Zustandsindikator vorgesehen sein, um anzugeben, ob sich die Verzweigung
in einem bestätigten
Zustand befindet oder nicht. Eine detaillierte Erläuterung
von Schaltkreisanordnungen, die in der Lage sind, die vorliegende
Erfindung zu implementieren, erfolgt später. Zuerst folgt eine Erläuterung
der verschiedenen unterschiedlichen Wege, auf die Verzweigungsbefehle
gemäß der vorliegenden
Erfindung implementiert werden können.
-
-
Dieses
Schema ist unten umrissen. Es gibt drei charakteristische Befehle.
Ein Zustandsbit wird benötigt,
um zu spezifizieren, ob die Verzweigung bestätigt worden ist oder nicht.
Es könnte
mehrfache Bestätigungsbefehle
geben, wobei die Verzweigung gewählt
wird, wenn die für
einen Bestätigungsbefehl
bewertete Bedingung zutrifft ist.
-
-
Diese
Technik ist mit Verfahren A abgesehen davon vergleichbar, dass die
Verzweigung nicht bestätigt,
sondern zurückgewiesen
werden muss. Wie zuvor wird Zustandsbit benötigt, um festzuhalten, ob die
Verzweigung zurückgewiesen
worden ist oder nicht. Der Befehl zum Festlegen initialisiert das
Verzweigungsbefehlsregister und setzt den Zustand auf Verzweigung.
-
Der
do-Befehl führt
die initialisierte Verzweigung aus, wenn der Zustand weiterhin auf
Verzweigung steht. Bei dieser Semantik ist der Zurückweisungsbefehl
optional, nicht bedingte Verzweigung würden keinen benötigen. Es
kann mehr als einen Zurückweisungsbefehl
geben, wenn einer die Verzweigung annulliert, wird die Verzweigung
nicht gewählt.
-
-
Dieses
Verfahren kombiniert die Bestätigungs-
und do-Befehle, so dass do ein bedingtes do wird. Eine Zustandsmaschine
ist nicht erforderlich, um festzuhalten, ob die Verzweigung zu wählen ist
oder nicht.
-
-
Dieses
Schema verzögert
die Wirkung des do-Befehls um eine variable Größe ("Offset"). Dies ermöglicht es, das Abrufen unnötiger Befehle
am Ende des Blocks von Befehlen zu beenden.
-
Das
Ende des Blocks (Verzweigungsstelle) ist in dem do-Befehl entweder
als Offset zu dem letzten Befehl in dem Block, als der erste Block
in dem nachfolgenden Block oder als eine Befehlsanzahl zu bis zu dem
Ende des Blocks angegeben. Es sind zwei Register erforderlich, eine
Zustandsbit, um aufzuzeichnen, ob die Verzweigung bestätigt worden
ist oder nicht, und ein Verzweigungsstellenregister, um die Blockendadresse oder
einen Zählerstand
als Angabe der Verzweigungsstelle zu speichern.
-
-
Diese
Schema ist mit Verfahren D abgesehen davon vergleichbar, dass die
Verzweigung nicht bestätigt,
sondern bedingt zurückgewiesen
wird. Der Zurückweisungsbefehl
ist optional.
-
-
Dieses
Schema ist mit Verfahren D abgesehen davon vergleichbar, dass die
Verzweigungsstelle zusammen mit dem Befehl zum Festlegen spezifiziert
wird, wobei die Erfordernis eines do-Befehls beseitigt wird. Die Verzweigung
muss weiterhin bestätigt
werden, ansonsten wird sie ignoriert. Zwei zusätzliche Register werden benötigt, ein
Zustandsbit, um aufzuzeichnen, ob die Verzweigung bestätigt worden
ist oder nicht, und ein Verzweigungsstellenregister, um den Blockabschlussoffset
oder einen Zählerstand
als Angabe der Verzweigungsstelle zu speichern.
-
-
Diese
Schema ist mit Verfahren F abgesehen davon vergleichbar, dass die
Verzweigung optional zurückgewiesen
werden kann. Nicht bedingte Befehle benötigen keinen Zurückweisungsbefehl.
Der gleiche zusätzliche
Zustand ist erforderlich.
-
-
-
Dieses
Verfahren ist eine Kombination des Verfahrens C und des Verfahrens
D. Der Befehl zum Festlegen spezifiziert die Verzweigungszielstelle,
während
der do-Befehl sowohl eine Verzweigungsstelle als auch die Bedingung
spezifiziert, ob die Verzweigung auszuführen ist. Zwei Zustandsobjekte
sind erforderlich, um dies zu unterstützten, ein Verzweigungsstellenregister,
um die Verzweigungsstelle zu speichern, und eines, um festzuhalten,
ob die Verzweigung auszuführen
ist oder nicht. Beide derselben werden durch den do-Befehl eingestellt.
Wenn die Bedingung falsch ist, bleibt der Prozessor in dem Zustand
ohne Verzweigung. Nicht bedingte Verzweigungen könnten entweder eine zutreffende
Bedingung spezifizieren oder einen speziellen nicht bedingten do-Befehl.
-
Dieses
Verfahren ist interessant, weil es nicht erfordert, die Verzweigungszielstelle
für jeden
Block festzulegen, wenn das Ziel aufeinander folgender Blöcke das
gleiche ist. Dies geschieht in engen Schleifen. Beispielsweise ist
der folgende Kode gültig.
-
-
Der
Befehl zum Festlegen wird nur einmal ausgeführt. Das gleiche Verzweigungsziel
wird für
jede Durchlauf der Schleife benötigt.
-
Einige
der oben genannten Verfahren können
weiter modifiziert werden. Beispielsweise ist es ersichtlich, dass
für eine
Mehrzahl von aneinander grenzenden Blöcken im Speicher, wie beispielsweise
in 3 veranschaulicht, wo der Befehl zum Festlegen
einer Verzweigung der erste Befehl eines Blocks ist und der do-Befehl
der letzte Befehl eines Blocks ist, es bei jeder Blockgrenze einen
do-Befehl gibt, dem ein Befehl zum Festlegen unmittelbar folgt.
Dies ist in 3 insbesondere dort veranschaulicht,
wo der Block A den Block B trifft. Für Verfahren, die eine Angabe
darüber
speichern, ob sich das System in einem Verzweigungszustand befindet
oder nicht, ist es möglich,
den do-Befehl an dem Ende eines Blocks zu beseitigen und auf den
Befehl zum Festlegen am Anfang eines anschließenden Blocks zurück zu greifen.
Daher könnend
die Verfahren A und B modifiziert werden, um einen anderen do-Befehl
zu beseitigen und den Befehl zum Festlegen wie folgt zu interpretieren.
Wenn sich das System in einem Verzweigungszustand befindet, wird
der nachfolgende Befehl zum Festlegen am Anfang des nächsten Blocks
ausgeführt,
als ob es dort einen do-Befehl gäbe,
um die Verzweigung zu bewirken. Wenn sich das System nicht in einem
Verzweigungszustand befindet, wird, wenn sich der Befehl zum Festlegen
am Anfang des nächsten
Blocks ausgeführt
wird, die Verzweigung nicht gewählt
und der Befehl zum Festlegen wird auf normale Weise ausgeführt, um
eine Verzweigung mit einer Zielstelle festzulegen.
-
Nun
wird ein Computersystem zum Implementieren von Verzweigungen beschrieben,
das einen Befehl zum Trennen von Verzweigungen verwendet. 4 ist
ein vereinfachtes Blockdiagramm eines Computersystems mit Pipeline-Verarbeitung.
Diese zeigt einen Speicher 41, der bei diesem Beispiel
ein herkömmliches RAM
umfasst. Das Computersystem weist einen Adressbus 39 und
einen Datenbus 43 auf, die mit dem Speicher 41 verbunden
sind. Es ist ersichtlich, dass Lese- und Schreib-Steuersignale für den Speicher
erforderlich sind, diese sind in 4 aber nicht
veranschaulicht. Der Speicher 41 speichert ein Programm,
das Folgen von Befehlen an unterschiedlichen adressierbaren Stellen
umfasst, wie bereits oben unter Bezugnahme auf die 2 und 3 beschrieben.
Der Speicher 41 kann auch Daten speichern. Der Datenbus 43 überträgt Datenwerte
zu und von dem Speicher 41. Der Adressbus 39 überträgt Speicheradressdaten
für Lese- und Schreiboperationen.
Das Computersystem umfasst einen Schaltkreis 10 zum Abrufen
von Befehlen, der ausgelegt ist, dem Speicher über eine Adressleitung 12 Adressen
zuzuführen
und über
eine Datenleitung 14 Befehle vom Speicher zu empfangen.
Ein Dekodierschaltkreis 16 ist angeschlossen, um Befehle
zu empfangen, die von dem Abrufschaltkreis abgerufen werden und
auf einer Befehlsleitung 22 zugeführt werden, und dekodiert diese.
Der Dekodierschaltkreis 16 führt Befehle einem Ausführungsschaltkreis 18 zu,
der Befehle ausführt
und einen Ergebnisschreibschaltkreis 20 steuert, um Ergebnisse
der Ausführung
in ein temporäres
Register 11 zu schreiben. Für die Zwecke der vorliegenden
Erfindung sind der Dekodierschaltkreis 16, der Ausführungsschaltkreis 18,
der Ergebnisschreibschaltkreis 20 und die Register 11 herkömmlich und
werden hier nicht weiter beschrieben. Sie werden zusammen im Folgenden
als der Prozessor 17 bezeichnet.
-
Der
Abrufschaltkreis 10 ist ausgelegt, um vier Bytes gleichzeitig
aus dem Speicher 41 abzurufen und um Befehle über die
Befehlsleitung 22 dem Dekodierschaltkreis 16 bereit
zu stellen.
-
Dort,
wo die Befehle von variabler Länge
sind, ist es ersichtlich, dass ein Abgleichmechanismus in dem Schaltkreis
zum Abrufen von Befehlen erforderlich ist, um mit Befehlen umzugehen,
die nicht genau vier Bytes lang sind und um diese Befehle korrekt
abzugleichen. Eine Schaltkreisanordnung, um dies zu erreichen, ist
in unserer parallel anhängige
europäischen
Patentanmeldung mit der Nummer 95 303 608.4 beschrieben. Die vorliegende
Erfindung kann mit Befehlsgruppen gleicher Länge oder variabler Länge implementiert
werden.
-
Der
Abrufschaltkreis 10 umfasst zwei Einrichtungen zum Abrufen
von Befehlen, von denen eine nun unter Bezugnahme auf 5 beschrieben
wird. Die Datenleitung 14a und die Adressleitung 12a sind
mit entsprechenden, in 4 veranschaulichten Leitungen 14 und 12 verbunden.
Die Einrichtung zum Abrufen weist einen Abrufpointer 65 auf,
der eine 32-Bit-Verriegelung umfasst, die die nächste Adresse im Speicher enthält, aus
der ein 32-Bit-Wort zu lesen ist. Wann immer ein Wert aus dem Speicher
gelesen wird, wird der Abrufpointer 65 normalerweise über eine
Inkrementiereinheit 38 um vier Bytes auf eine neue Pointeradresse
erhöht.
Die Abrufeinrichtung ist ausgelegt, um vom Speicher Befehle auf
der Datenleitung 14 und einen Befehlspuffer 66 zu
lesen, von dem sie entlang der Befehlsleitung 22 zu dem
Prozessor 17 ausgegeben werden. Für Befehle variabler Länge ist
ein Längenindikator 74 vorgesehen,
der auf einer Leitung 70 eine Angabe von dem Befehlspuffer 66 über die
Länge des
Befehls, der ausgegeben worden ist, empfängt. Der Längenindikator 74 erzeugt ein
Mengensignal 86, das die Anzahl von Bytes angibt, die von
dem ausgegebenen Befehl verwendet wird. Ein Bytezähler 75 speichert
zu jedem Zeitpunkt einen Zählerstand
der Anzahl von Bytes in dem Befehlspuffer 66 und erzeugt
ein Auswahlsignal 24, das festlegt, ob von dem Speicher 41 abgerufene
Bytes in den Befehlspuffer 66 eingefügt werden müssen. Der Befehlspuffer 66 empfängt auch
ein Beseitigungssignal 26, das bewirkt, dass ein Befehl
aus dem Puffer entfernt wird. Nicht entfernte Befehle werden weitergeschoben,
wodurch am Ende des Puffers Raum für mehr Bytes aus dem Speicher 41 geschaffen
wird. Der Befehlspuffer 66 spricht auch auf ein Speichersignal 28,
das bewirkt, dass Bytes aus dem Speicher in dem Puffer an der Stelle
gespeichert werden, die von dem Auswahlsignal 24 angegeben
wird. Das Speichersignal 28 wird aus einem Verriegelungssignal 30 erhalten,
das verwendet wird, um anzugeben, dass Daten aus dem Speicher gespeichert werden
können.
-
Der
Abrufpointer 65 wird mit einer Adresse auf der Leitung 32 von
einem Abrufmultiplexer 34 zugeführt, der einen Eingang aufweist,
der angeschlossen ist, um eine nächste
Adresse auf Leitung 36 von der Inkrementiereinheit 38 zu
empfangen. Die Inkrementiereinheit 38 aktualisiert die
Abrufadresse auf übliche
Weise, bei diesem Beispiel jedes Mal um vier Bytes. Der andere Eingang
des Abrufmultiplexers 34 ist mit einer Startleitung 40 verbunden,
auf der eine neue Adresse zugeführt
wird, von der aus ausgehend ein Abrufen zu beginnen ist. Es ist
auf einfache Weise ersichtlich, dass zum Verzweigen die neue Adresse
aus der Zielstelle erhalten wird, die in dem Befehl zum Festlegen
einer Verzweigung identifiziert ist. Ein Startsignal 42 steuert den
Abrufmultiplexer 34 dahingehend, ein Abrufen ausgehend
von einer neuen Adresse auf der Startleitung 40 zu beginnen.
Der Verriegelungseingang des Abrufpointers 65 ist mit einem
OR-Gatter 44 verbunden, das das Startsignal 42 und
das Verriegelungssignal empfängt,
um ein Verriegeln nachfolgender Adressen in den Abrufpointer 65 hinein
zu steuern. Das Haltesignal 30 wird auch einem Gatter 46 zugeführt, das
mit dem Verriegelungseingang des Bytezählers 75 verbunden
ist und das an seinem anderen Eingang ein Nächster-Signal 48 empfängt, das
verwendet wird, um anzugeben, dass ein Befehl aus dem Befehlspuffer 66 gelesen
worden ist, und das daher den geeigneten Bytezählerstand verriegelt.
-
Das
Startsignal 42 wird auch dem Löscheingang des Bytezählers 75 und
dem Löscheingang
einer Stoppverriegelung 50 zugeführt. Die Stoppverriegelung 50 empfängt an der
Stopp-An-Leitung 52 die Adresse, nach der keine weiteren
Befehle abzurufen sind. Diese Adresse wird in die Stoppverriegelung 50 unter
Steuerung eines Stoppsignals 54 gesteuert. Die Ausgabe
der Stoppverriegelung 50 wird einem Komparator 56 zugeführt, der
auf der Leitung 12 auch die Speicheradresse empfängt. Der
Komparator 12 ermittelt, ob die Speicheradresse auf der
Leitung 12 die bei der Stoppverriegelung 50 gespeicherte
Adresse erreicht hat oder nicht. Die Ausgabe des Komparators 56 wird
einem Gatter 58 zugeführt,
das auch die Ausgabe einer Einheit 80 zum Überprüfen des
Füllstands
erhält.
Die Einheit 80 zum Überprüfen des
Füllstands
empfängt
die Ausgabe des Bytezählers 75 und
aktiviert seinen Eingang immer dann, wenn der Puffer 66 voll
ist. Der Ausgang des Gatters 58 stellt auf einer Leitung 82 ein
Gefüllt-Signal
bereit, das angibt, dass entweder der Befehlspuffer 66 voll
ist, oder dass die Stopp-Adresse erreicht worden ist. Wenn das Gefüllt-Signal 82 aktiviert
ist, werden keine weiteren Speicheranfragen durchgeführt. Die
Ausgabe des Bytezählers 75 wird
auch einer zweiten Inkrementiereinheit 84 zugeführt, deren
Ausgabe einem Eingang eines Zählmultiplexers 85 zugeführt wird.
Der andere Eingang des Zählmultiplexers 85 wird
von einer Subtraktionseinheit 90 versorgt, die die Ausgabe
des Bytezählers 75 und
die Ausgabe des Längenindikators 74 empfängt. Die
Subtraktionseinheit 90 aktiviert ein Mehr-Signal 92 immer
dann, wenn der Befehlspuffer nicht wenigstens einen Befehl enthält.
-
Der
Betrieb der Einrichtung zum Abrufen von Befehlen wird nun beschrieben.
Eine Startadresse, die die Speicheradresse ist, die die ersten vier
Bytes am Anfang eine Blocks von Befehlen angibt, wird auf der Leitung 40 dem
Abrufmultiplexer 34 zugeführt. Das Startsignal 42 wird
aktiviert, um die Stoppverriegelung 50 zu löschen und
die Startadresse in dem Abrufpointer 65 zu verriegeln.
An dieser Adresse wird ein Speicherzugriff durchgeführt und
die ersten vier Bytes werden entlang der Datenleitung 14 dem
Befehlspuffer 66 zugeführt. Das
Verriegelungssignal 30 bewirkt, dass diese vier Bytes in
dem Puffer gespeichert werden, und verriegelt die nächste Adresse
in den Abrufpointer 65 hinein. Diese nächste Adresse ist nun die Startadresse
durch die Inkrementiereinheit 38 inkrementiert um vier
Bytes, sofern, wie später
vollständiger
beschrieben, eine Verzweigung nicht gewählt wird. Der Befehlspuffer 66 führt über die
Leitung 22 einen Befehl dem Längenindikator 74 zu
und gibt diesem die Länge
des Befehls auf der Leitung 70 an. Der Ausgang des Längenindikators 74 führt das
Mengensignal 86 zu, um die Größe des Befehls anzugeben, der
entfernt worden ist, und versorgt auch einen Eingang der Subtraktionseinheit 90,
die dem Bytezähler
einen Zählerstand
bereitstellt, um diesen in die Lage zu versetzen, das Auswahlsignal 24 zu
aktivieren, um zu ermitteln, ob die nächsten vier, aus dem Speicher
abgerufenen Bytes in dem Puffer gespeichert werden sollten.
-
Wie
bereits beschrieben worden ist, findet die Entfernung eines Befehls
aus dem Puffer auf der Leitung 22 unter Steuerung des Nächster-Signals 48 statt.
Wenn nicht wenigstens ein Befehl in dem Befehlspuffer gespeichert
ist, wird das Mehr-Signal 92 aktiviert.
Wenn der Befehlspuffer voll ist, bewirkt die Einheit 80 zur
Füllstandsüberprüfung, dass
das Gefüllt-Signal 82 aktiviert
wird, um weitere Speicherzugriffe zu verhindern.
-
Die
Stoppverriegelung 50 wird verwendet, um eine Adresse zu
speichern, an der die Einrichtung zum Abrufen nicht vorbei gehen
sollte. Bei Beginn des Abrufens an der Startadresse wird die Stoppverriegelung 50 durch
das Startsignal 42 auf eine ungültige Adresse zurückgesetzt.
Das Speichern einer speziellen Adresse in der Stoppverriegelung 50 beendet
das Abrufen. Die Verwendung der Stoppverriegelung 50 wird
in der folgenden Beschreibung der Anwendung der Abrufeinheit klarer.
-
Wenn
ein Verzweigungsbefehl abgerufen, dekodiert und ausgeführt worden
ist, wird die durch den Verzweigungsbefehl identifizierte Zielstelle
verwendet, um der Einrichtung zum Abrufen von Befehlen auf der Leitung 40 die
Startadresse bereitzustellen, wenn das Signal zum Bewirken einer
Verzweigung zugeführt
worden ist, um zu bewirken, dass eine Verzeigung gewählt wird.
Die Abrufeinheit beginnt daher das Abrufen von Befehlen beginnend
bei der neuen Zielstelle.
-
Der
Abrufschaltkreis 10 von 4 weist
zwei Einrichtungen zum Abrufen von Befehlen des oben unter Bezugnahme
auf 5 beschriebenen Typs auf. Nun wird auf 6 Bezug
genommen, um detaillierter zu beschreiben, wie Verzweigungsbefehle
die Aktivität
der Einrichtungen zum Abrufen von Befehlen steuern. In 6 sind
die Einrichtungen zum Abrufen als Abrufeinrichtung A und Abrufeinrichtung
B veranschaulicht. Das System weist eine Entscheidungseinheit 100 auf,
die zwischen der Abrufeinrichtung A und der Abrufeinrichtung B zum
Zugriff auf den Speicher unter Verwendung der Gefüllt- und
Mehr-Signale von jeder Abrufeinrichtung entscheidet, um zu ermitteln,
welche Daten benötigt.
Die Gefüllt-
und Mehr-Signale für
die Abrufeinrichtung A werden an der Entscheidungseinrichtung als
Mehr-A und Gefüllt-A
bezeichnet und die Gefüllt-
und Mehr-Signale
für die
Abrufeinrichtung B werden an der Entscheidungseinrichtung als Mehr-B
und Gefüllt-B
bezeichnet. Bezugszeichen, die die Abrufeinrichtung A betreffen,
entsprechen denjenigen für
die in 5 gezeigte Einrichtung zum Abrufen von Befehlen.
Diese Bezugszeichen werden für
die Abrufeinrichtung B nicht wiederholt, da diese genau die gleichen
Signale und Betrieb wie die Abrufeinrichtung A aufweist. Die Adressausgaben 12a der
Abrufeinrichtung A und B werden über
einen Adressmultiplexer 102 der Adressleitung 12 zugeführt. Der
Multiplexer wird durch ein Sel-A-Signal auf der Leitung 104 von
der Entscheidungseinrichtung 100 gesteuert, die der Abrufeinrichtung
Priorität
verleiht, die aktuell Befehle zur Ausführung abruft. Es ist ersichtlich, dass
eine der Abrufeinrichtungen verwendet wird, um Befehle in dem aktuellen
Block (und möglicherweise
in dem nächsten
sequenziellen Block) abzurufen, und die andere Abrufeinrichtung
verwendet wird, um beginnend bei der Zielstelle Befehle abzurufen.
Beide Abrufeinrichtungen empfangen Befehle über die Datenleitung 14 und
führen
ihre Befehle auf der Leitung 22a einem Auswahlmultiplexer 104 zu.
Der Ausgang 22 des Multiplexers 104 ist mit dem
Prozessor 17 verbunden, der Befehle dekodiert und Ausführungen
und die Ergebnisse in das temporäre
Register 11 schreibt. Der Prozessor 17 führt das
nächste
Signal zu, das auf die Leitung 48 den Einrichtungen zum
Abrufen von Befehlen zugeführt
wird. Der Prozessor 17 empfängt auf der Leitung 106 ein
Wartesignal, das aus den Mehr-Signalen 92 der Abrufeinrichtungen
abgeleitet wird. So wie der Prozessor 17 Befehle ausführt, wird
ein Befehlspointerregister 108 aktualisiert, um auf den
nächsten
auszuführenden
Befehl zu weisen, indem eine Ausgabe auf der Leitung 110 für neue IP
[Befehlspointer; engl.: Instruction Pointer] über einen Pointermultiplexer 112 zugeführt wird.
Ein Verriegelungs-IP-Signal auf der Leitung 114 gibt an, wenn
das Befehlspointerregister 108 zu aktualisieren ist. Der
Ausgang des Befehlspointerregisters 108 stellt den aktuellen
Wert des Befehlspointers einer Leitung 116 für aktuelle
IP bereit.
-
Das
Computersystem von 6 weist auch ein Zielpointerregister 118,
um eine durch einen Befehl zum Festlegen einer Verzweigung identifizierte
Zielstelle zu speichern, und ein Verzweigungspointerregister 120 auf,
um einen Wert zu speichern, der die Stelle identifiziert, an der
die Verzweigung zu wählen
ist. Das Computersystem weist auch einen aktiven Abrufeinrichtungsschalter 122 auf,
der steuert, welche der Abrufeinrichtungen A und B dem Prozessor 17 Befehle
zuführt.
Es gibt auch eine Vergleichseinheit 124, die angeschlossen
ist, um die Ausgaben des Verzweigungspointerregisters 120 und
des Befehlspointerregisters 108 zu empfangen. Eine Überprüfungsausgabe
von dem Prozessor 17 auf der Leitung 126 wird über ein
Gatter 128 zugeführt,
um den Pointermultiplexer 112 und den aktiven Abrufeinrichtungsschalter 122 zu
steuern. Das Gatter 128 weist auch eine Eingabe auf der
Leitung 130 von der Vergleichseinheit 124 auf.
-
Der
Ausführungsschaltkreis
des Prozessors 17 weist eine Ausführungseinheit 136 für Befehle
zum Festlegen einer Verzweigung und eine Ausführungseinheit 142 für do-Befehle
auf. Das Computersystem weist auch einen Zustandsindikator 132 auf,
um eine Angabe des Zustands des Systems zu speichern, das heißt, ob es
sich in einem Verzweigungszustand befindet oder nicht.
-
Die übrigen,
in 6 veranschaulichten Gatter sind hier nicht beschrieben,
weil sie lediglich der Vollständigkeit
halber veranschaulicht sind, um auf klarere Weise die Verbindungen
zwischen den Signalleitungen darzulegen.
-
Der
Betrieb des Computersystems von 6 wird nun
beschrieben. Es wird angenommen, dass der Prozessor 17 den
Block A von 3 ausführt. Die Startadresse, die
den Anfang des ersten Befehls von Block A identifiziert, wird der
Abrufeinrichtung A zugeführt.
Der erste Befehl wird auf der Leitung 22a dem Multiplexer 104 zugeführt, der
durch ein Signal auf der Leitung 134 von dem aktiven Abrufeinrichtungsschalter 122 gesteuert
wird, so dass Befehle von der Abrufeinrichtung A dem Prozessor 17 zugeführt werden.
Der erste Befehl ist ein Befehl Set C zum Festlegen einer Verzweigung,
der von der Ausführungseinheit 136 zum
Festlegen einer Verzweigung identifiziert wird, die einen Teil des
Prozessors 17 bildet. Die Ausführungseinheit 136 zum
Festlegen einer Verzweigung erzeugt die geeignete Zielstelle auf
der Zielleitung 138 und ein Einstellsignal auf der Leitung 140.
Das Einstellsignal wird verwendet, um das Startsignal 42 für die Abrufeinrichtung
B zu aktivieren, dass diese Abrufeinrichtung initialisiert wird,
um den Beginn, Be fehle von der Zielstelle abzurufen, einzuleiten. Die
Zielstelle wird auch in dem Zielpointerregister 118 gespeichert.
Befehle im Block A werden weiterhin von der Abrufeinrichtung A aus
dem Speicher dem Prozessor 17 zugeführt und ausgeführt. Bei
Ausführung
des Bestätigungsbefehls
wird die Bedingung für
den Bestätigungsbefehl überprüft und der
Zustandsindikator 132 wird in geeigneter Weise eingestellt.
Die Bedingungsleitung 45 gibt den Zustand des Systems an,
der, wie später
beschrieben, selektiv den Stoppleitungen 54 und den Abrufeinrichtungen
zugeführt
wird. Die folgende Beschreibung geht davon aus, dass die Bedingung
für den
Bestätigungszustand
positiv war, so dass sich das System in einem Verzweigungszustand
befindet. Nach dem Abrufen, Dekodieren und Ausführen weiterer Befehle bis zu
und einschließlich
von Inst A –1
in Block A ist der nächste
Befehl ein Befehl zum Bewirken einer Verzweigung. Dieser wird von
der Ausführungseinheit 142 für do-Befehle
ausgeführt,
die einen Teil des Prozessors 17 bildet. Bei Ausführung des
Befehls zum Bewirken einer Verzweigung durch diese Einheit 142 wird die
Verzweigungsstelle berechnet (die erste Adresse des ersten Befehls
am Anfang des nächsten
sequenziellen Blocks) und wird über
die Leitung 144 dem Verzweigungspointerregister 120 zugeführt. Der
Verzweigungspunkt wird auch den Stopp-Haltekreisen 50 der Abrufeinrichtungen
zugeführt.
In diesem Fall wird das Stopp-Signal 54 für die Abrufeinrichtung
A über
die Bedingungsleitung 145 aktiviert und nicht für die Abrufeinrichtung B.
Daher hält
die Abrufeinrichtung A die Stopp-Adresse,
so dass sie aufhört,
abzurufen, wenn diese Adresse erreicht wird. Wenn die Verzweigungsstelle,
die in dem Verzweigungspointerregister 21 gespeichert ist,
der Adresse des nächsten
Befehls entspricht, der in dem Befehlspointerregister 108 gespeichert
ist, bewirkt die Ausgabe der Vergleichseinheit 24, dass
ein Signal zum Bewirken einer Verzweigung auf der Leitung 146 aktiviert
wird. Dies steuert den Befehlspointermultiplexer 112 dahingehend,
dass das Befehlspointerregister 108 ausgehend von dem Zielpointerregister 118 aktualisiert
wird, das, wie man sich erinnert, die Zielstelle speichert, die
in dem Befehl zum Festlegen einer Verzweigung identifiziert ist.
Das Signal 146 zum Bewirken einer Verzweigung wird ferner
dem aktiven Abrufeinrichtungsschalter 112 zugeführt, der
bewirkt, dass die Abrufeinrichtung B die aktive Abrufeinrichtung
wird, die beginnt, ausgehend von der Zielstelle abzurufen, so dass
die Verzweigung gewählt
wird. Die Ausgabe des aktiven Abrufeinrichtungsschalters 112 steuert
den Befehlsmultiplexer 104, seine Eingänge umzuschalten.
-
Wenn
die Bedingung, die für
den Bestätigungsbefehl überprüft worden
ist, angibt, dass die Verzweigung nicht zu wählen ist, wird bei Ausführung des
do-Befehls durch die Ausführungseinheit 142 für do-Befehle eine
ungültige
Adresse auf der Verzweigungsleitung 144 zur Speicherung
in dem Stopp-Haltekreis 50 der aktiven Abrufeinrichtung,
die Abrufeinrichtung A, zu geführt.
Dabei ruft die aktive Abrufeinrichtung weiter sequenzielle Befehle
aus dem Speicher ab, so dass die Verzweigung nicht gewählt wird.
Auf vergleichbare Weise wird die ungültige Adresse, die als Verzweigungsstelle
in dem Verzweigungspointerregister 120 gespeichert ist,
niemals mit der Adresse übereinstimmen,
die in dem Befehlspointerregister 108 gespeichert ist,
so dass die Vergleichseinheit niemals bewirkt, dass das Signal 146 zum
Bewirken einer Verzweigung aktiviert wird.
-
Die
obige Beschreibung, die das Computersystem von 6 betrifft,
gilt für
ein System, das ein Verzweigungspointerregister und einen Zustandsindikator
zum Speichern des Zustands des Systems aufweist. Wie früher erwähnt, können diese
weggelassen werden, wenn ein Verfahren, wie zum Beispiel das Verfahren C,
verwendet wird, bei dem das Signal zum Bewirken einer Verzweigung
ein Bedingungssignal ist, das an der Verzweigungsstelle angeordnet
ist. Der Befehl zum Festlegen einer Verzweigung gibt die Zielstelle
in das Zielpointerregister 118, wie oben beschrieben, ein.
Wenn der Befehl zum Bewirken einer Verzweigung ausgeführt wird,
wird die in dem Befehl definierte Bedingung überprüft. Wenn die Bedingung zutrifft,
wird das Signal 146 zum Bewirken einer Verzweigung zugeführt, um
zu bewirken, dass die Abrufeinrichtung B die aktive Abrufeinrichtung
wird, die beginnt, ausgehend von der Zielstelle abzurufen, so dass
die Verzweigung gewählt
wird. Die Zielstelle bleibt in dem Zielpointerregister 118 gültig und,
statt die Abrufeinrichtung A so zu steuern, dass sie wie oben beschrieben
aufhört,
abzurufen, wird sie veranlasst, ausgehend von der Zielstelle das
Abrufen neuer Befehle zu beginnen. Dies hat den Vorteil, dass, wenn
eine weitere Verzweigung erforderlich sein sollte, die eine durch
den Befehl zum Festlegen definierte Zielstelle aufweist, die neuen
Befehle bereits abgerufen worden sind.
-
Wenn
ein Befehl zum Bewirken einer Verzweigung, für den die in dem Befehl definierte
Bedingung zutrifft, ausgeführt
worden ist, werden alle Befehle, die nach dem Befehl zum Bewirken
einer Verzweigung in die Ausführungseinheit 142 gelangen,
gelöscht,
weil sie nicht ausgeführt
werden sollten. Stattdessen wird die Ausführung der neuen Befehle begonnen.
-
Daher
wechselt die Abrufeinrichtung A und die Abrufeinrichtung B bei Ausführung eines
Befehls zum Bewirken einer Verzweigung, für den die Bedingung erfüllt ist,
ihre Rollen.
-
Wenn
ein Befehl zum Bewirken einer Verzweigung ausgeführt wird, für den die Bedingung festlegt, dass
die Verzweigung nicht zu wählen
ist, gibt es keine Änderung
der Rollen der Abrufeinrichtungen.
-
Bis
zur Ausführung
des nächsten
Befehls zum Einstellen, der eine neue Zielstelle in dem Zielpointerregister 118 neu
einstellt, bleibt die Zielstelle in dem Zielpointerregister 118 gültig und
gespeichert.
-
11 ist
ein Blockdiagramm, das dieses Prinzip veranschaulicht. In 11 bezeichnen
die Bezugszeichen 39 und 43, wie in vorherigen
Figuren, den Adressbus und den Datenbus. Die Abrufschaltkreisanordnung 10 in 4 ist
durch eine Ausführungsbefehlsabrufeinrichtung 402 und
eine Zielbefehlsabrufeinrichtung 404 implementiert. Diese
sind als Abrufeinrichtung E bzw. Abrufeinrichtung T bezeichnet.
Gleiche Elemente in jeder Abrufeinrichtung weisen das gleiche Bezugszeichen
in geeigneter Weise mit einem Suffix E oder T versehen auf. Jede
Abruf einrichtung umfasst einen Abrufpointer 406, um eine
Angabe der nächsten
Adresse zu speichern, von der aus ausgehend Befehle abzurufen sind,
und einen Startpointer 408, um die Zielstelle zu speichern,
die den ersten Befehl in einer neuen Folge von Befehlen angibt.
Jede Abrufeinrichtung weist auch einen Puffer 410 auf,
um eine Reihe von Befehlen zu speichern.
-
Das
Bezugszeichen 118 bezeichnet, wie zuvor, das Zielpointerregister,
das in Antwort auf die Ausführung
eines Befehls zum Festlegen einer Verzweigung eine Angabe der Zielstelle
speichert. Das Bezugszeichen 412 bezeichnet einen Auswahlschaltkreis,
um eine der Abrufeinrichtungen auszuwählen, die als die Ausführungsabrufeinrichtung
E arbeitet, um ihre Befehle dem Dekodierschaltkreis 16 von 4 zuzuführen.
-
Ein
Sortierer 414 empfängt
das Signal 146 zum Bewirken einer Verzweigung und weist
einen Zustand auf, der sich bei Empfang dieses Signal ändert, um
zu bewirken, dass sich die Rolle der Abrufeinrichtungen, wie oben
beschrieben, ändern,
indem der Auswahlschaltkreis 412 über die Leitung 411 gesteuert
wird.
-
Der
Sortierer 414 kann den Abrufeinrichtungen 408E, 408T jeweils über Leitungen 418E, 418T auch Signale
bereitstellen. Wenn das Signal zum Bewirken einer Verzweigung auftritt,
führt der
Sortierer auf der Leitung 418E ein Signal zu, um zu bewirken,
dass die Abrufeinrichtung E beginnt, Befehle von der Zielstelle
zu erhalten.
-
Manchmal
ist es nützlich,
mehr als zwei Einrichtungen zum Abrufen von Befehlen vorzusehen,
um bedingte Befehle, die wahrscheinlich erfüllt werden, und bedingte Befehle,
die wahrscheinlich nicht erfüllt
werden, zu berücksichtigen.
Dies ist insbesondere dort der Fall, wo die Ausführungseinheit mit einer Pipeline-Verarbeitung
ausgestattet ist und die Bestimmung der Bedingung zum Bewirken einer
Verzweigung in einer letzten Stufe in der Pipeline durchgeführt wird.
-
12 ist
ein Blockdiagramm, das ein System zum Implementieren einer derartigen
Anordnung veranschaulicht. In 12 bezeichnen
gleiche Bezugszeichen gleiche Teile wie in 11 für die Ausführungsbefehlsabrufeinrichtung
und die Zielbefehlsabrufeinrichtung und die anderen Merkmale, die
den 11 und 12 gemeinsam
sind.
-
Das
System von 12 weist zusätzlich eine Fehlvorhersageabrufeinrichtung 403,
die Abrufeinrichtung M, auf. Diese weist ebenso ein Abrufpointerregister 406M zum
Speichern der Adresse, von der aus ausgehend nächste Befehle abzurufen sind,
einen Puffer 410M, um eine Reihe von Befehlen zu speichern,
und ein Startpointerregister 408M auf, um die Startadresse
zu speichern, von der aus ausgehend Befehle abzurufen sind. Der
Auswahlschaltkreis 412 ist ausgelegt, um eine der drei
Abrufeinrichtungen auszuwählen,
die als die Ausführungsabrufeinrichtung
E arbeitet, um der Dekodierschaltkreisanordnung 16 Befehle
zuzuführen.
-
Wie
zuvor ruft die Ausführungsabrufeinrichtung 402 die
normale Folge von Befehlen zur Zufuhr zu der Ausführungseinheit
ab. Die Zielabrufeinrichtung 404 ruft beginnend bei der
Zielsstelle Befehle ab und speichert daher den nächsten Verzweigungszielbefehl.
-
Zusätzlich zu
diesen zwei Abrufeinrichtungen ruft die Fehlvorhersageabrufeinrichtung 403 Befehle
ab, die an einer Verzweigung angeordnet sind, die aus einem bedingten
Befehl resultiert, der wahrscheinlich nicht erfüllt werden wird. Dies wird
als ein als nicht zu verwendender vorhergesagter Arm einer Verzweigung
bezeichnet. Wenn nachfolgend festgestellt wird, dass ein bedingter
Befehl falsch vorhergesagt wurde, ist die korrekte Folge von Befehlen
in dieser Abrufeinrichtung gespeichert.
-
Bei
Ausführung
eines Befehls zum Festlegen einer Verzweigung wird wie zuvor eine
Angabe der Zielstelle in das Zielpointerregister 118 geladen.
Die Zielabrufeinrichtung 404 wird zu rückgesetzt und beginnt, ausgehend
von der Zielstelle Befehle abzurufen.
-
Wenn
ein bedingter DO-Befehl, der wahrscheinlich nicht gewählt wird,
(oder ein nicht bedingter DO-Befehl) zu der Ausführungseinheit gesendet wird,
werden die Funktionen der drei Abrufeinrichtungen so geändert, dass
die Ausführungsabrufeinrichtung 402 die
Fehlvorhersageabrufeinrichtung wird, die Zielabrufeinrichtung 404 die
Ausführungsabrufeinrichtung
wird und die Fehlvorhersageabrufeinrichtung 403 die Zielabrufeinrichtung
wird. Die neue Zielabrufeinrichtung (formal die Fehlvorhersageabrufeinrichtung
M) wird zurückgesetzt
und beginnt, ausgehend von der in dem Zielpointerregister 118 gespeicherten
Zielstelle Befehle abzurufen. Wenn ein bedingter DO-Befehl, der
eine Bedingung angibt, die wahrscheinlich nicht erfüllt werden
wird, zu der Ausführungseinheit
gesendet wird, ändern
sich die Rollen der Ziel- und Vorhersageabrufeinrichtungen wie folgt.
Die Zielabrufeinrichtung, Abrufeinrichtung T, wird die Fehlvorhersageabrufeinrichtung
und die Fehlvorhersageabrufeinrichtung, Abrufeinrichtung M wird
die Zielabrufeinrichtung. Die neue Zielabrufeinrichtung wird zurückgesetzt
und beginnt, an der Zielstelle, die in dem Zielpointerregister 118 gespeichert
ist, Befehle abzurufen.
-
Eine
Detektion einer Absendung dieses bedingten DO-Befehls zu der Ausführungseinheit
wird durch eine Detektionseinheit 413 vorgenommen. Diese
führt dem
Sortierer 414 Vorhersage-Gewählt- und Vorhersage-Nicht gewählt-Signale
zu.
-
Wenn
ein DO-Befehl durch die Ausführungseinheit
ausgeführt
wird, wird ermittelt, ob die Verzweigung zu wählen ist oder nicht. Wenn dies
mit der Vorhersage übereinstimmt,
dann ist alles in Ordnung. Wenn jedoch die Auswahl der Verzweigung
nicht korrekt vorhergesagt worden ist, werden alle Befehle, die
in die Ausführungseinheit
nach dem nicht korrekt vorhergesagten bedingten DO-Befehl gelangt
sind, gelöscht,
und die Fehlvorhersageabrufeinrichtung und die Ausführungsabrufein richtung
wechseln die Rollen. Hierfür
empfängt
der Sortierer ein Fehlvorhergesagt-Signal von der Ausführungseinheit.
-
Diese
Anordnung kann auf vielerlei unterschiedliche Arten implementiert
werden, ohne dabei das Konzept zu beeinträchtigen. Beispielsweise könnten die
Inhalte der ausgehenden Zieleinrichtung zu der eingehenden Zieleinrichtung
kopiert werden, wenn die Abrufeinrichtungen umbenannt werden. Dies
bedeutet, dass die neue Zielabrufeinrichtung keine Zeit vergeudet,
diese Befehle erneut abzurufen. Sie würde das Abrufen von dort aus
fortsetzen, wo die ausgehende Zielabrufeinrichtung aufgehört hat,
vorausgesetzt sie ist nicht voll. Alternativ müssen die Abrufeinrichtungen
nicht dynamisch umbenannt werden, aber ihre Inhalte werden wie geeignet übertragen.
Dies würde
jede Erfordernis an einem Zustand in dem Sortierer 414 beseitigen.
-
Die
oben beschriebenen Einrichtungen zum Abrufen von Befehlen und Schaltkreisanordnung
sind in der Lage, sogenannte einfache Verzweigungen zu implementieren.
Andere spezialisierte Typen von Verzweigungsbefehlen sind ebenfalls
brauchbar. Einer dieser ist eine Kernel-Verzweigung. Viele Prozessoren
weisen zwei Betriebsarten auf, eine für normale Programme und eine
für spezielle
Programme. Diese werden als Benutzer- und Kernel-Modi bezeichnet. Ein Kernel-Modus weist
mehrere ihm verfügbare
Befehle auf, die verwendet werden, um den Betrieb des Computers
zu beeinflussen. Diese Trennung ist erforderlich, um zu verhindern,
dass ein fehlerhaftes oder schädliches
Benutzermodusprogramm Schaden an anderen Benutzermodusprogrammen
verursacht. Kernel-Modusprogramme können als korrekt vorausgesetzt
werden. Daher wird ein Verfahren benötigt, um von einem Benutzer-
zu einem Kernel-Programmmodus zu wechseln. Dies wird bewerkstelligt,
indem eine Verzweigung zu einer speziellen Zielstelle, die als Kernel-Eingangsstelle
bezeichnet wird, vorgenommen wird. Bei der vorliegenden Erfindung
wird dies unter Verwendung eines speziellen Befehls zum Festlegen
einer Verzweigung implementiert, der die Verzweigungszielstelle
nicht explizit spezifiziert, sondern einen implizierten Wert verwendet.
Irgendein Zustand muss verwendet werden, um zu spezifi zieren, dass, wenn
die Verzweigung auftritt, der Prozess zum Kernel-Modus wechseln
muss.
-
Eine
andere spezialisierte Art eines Verzweigungsbefehls ist eine sogenannte
Deskriptor-Verzweigung, die ein Aufruf über einen Pointer darstellt.
Dieser Verzweigungsbefehl spezifiziert eine Adresse im Speicher,
aber es ist nicht die Adresse, die die Zielstelle der Verzweigung
angibt. Stattdessen ist es eine Speicherstelle, die die Zielstelle
für die
Verzweigung enthält.
-
7 veranschaulicht
eine Einrichtung zum Abrufen von Befehlen, die verwendet werden
kann, um Kernel- und Deskriptor-Verzweigungen
zu implementieren. Gleiche Bezugszeichen in der 7 bezeichnen gleiche
Teile in 5. Die Abrufeinrichtung von 7 weist
die folgende zusätzliche
Schaltkreisanordnung auf. Eine Kernel-Verriegelung 200 speichert
die Adresse zur Verwendung zum Aufrufen des Kernels und kann nur
mittels eines sicheren Kodes programmiert werden. Sie empfängt an ihrem
Verriegelungseingang ein Speicher-Kernel-Signal 202, um
die Kernel-Adresse auf der Leitung 204 zu verriegeln. Ein
Kernel-Multiplexer 206 empfängt an einem Eingang desselben
die Kernel-Adresse und die normale Startadresse auf der Leitung 40 an
dem anderen Eingang desselben. Der Kernel-Multiplexer 206 wird
durch ein Verzweigungs-Kernel-Signal auf der Leitung 208 gesteuert.
Das Verzweigungs-Kernel-Signal wird zu dem gleichen Zeitpunkt aktiviert,
an dem das Startsignal 40 normalerweise aktiviert würde, um
eine Verzweigung zu initialisieren. Wenn das Signal aktiviert ist,
wird die in der Kernel-Verriegelung 200 gespeicherte Adresse
in dem Abrufhaltekreis 65 über den Multiplexer 206 und
einen weiteren Multiplexer 208 gespeichert, anstelle der
durch das Startsignal zugeführten Adresse.
-
Die
Abrufeinrichtung umfasst auch eine Deskriptor-Verriegelung 210,
die angibt, ob der Abrufpointer 65 eine Befehlsadresse
oder eine Deskriptor-Adresse speichert. Er wird durch das Desktriptor-Signal
auf der Leitung 212 gesteuert. Wenn die Deskriptor-Verriegelung 210 angibt,
dass die Adresse eine De skriptor-Adresse ist, wird sie über ein
Pointer-Register 214 aus in dem Puffer 66 gespeicherten
Daten geladen. Der Multiplexer 208 steuert, ob die dem
Abrufpointer 65 zugeführte
Adresse von dem Pointer-Register 214 oder von dem Multiplexer 206 stammt.
Eine Deskriptor-Angabe-Einheit 216 signalisiert, ob der
Puffer 66 genug Information für das Pointer-Register 214 speichert
oder nicht, um die korrekte Dekriptor-Adresse zu speichern.
-
Die
Abrufeinrichtung von 7 ist daher in der Lage Kernel-Verzweigungen und
Deskriptor-Verzweigungen auszuführen.
-
Ein
anderer Verzweigungsbefehlstyp ist ein Prozeduraufruf. Dieser erfordert
es, dass ein geeigneter Befehlspointerwert so gesichert wird, dass
die Prozedur zurück
zu dem Teil eines Programms zurückkehrt,
von dem sie ausgegangen ist. Daher kann die Prozedur aus unterschiedlichen
Teilen des Programms aufgerufen werden. 8 veranschaulicht
die Flussgrafik für
einen Prozeduraufruf. 8 veranschaulicht ein Programm, das
einen Teil 1, einen Teil 2 und eine Prozedur enthält. Der
Teil 1 weist sequenzielle Blöcke
von Befehlen Block A, Block B auf, zwischen denen ein Aufrufbefehl
angeordnet ist. Auf vergleichbare Weise weist der Teil 2 sequenziell
Blöcke
von Befehlen Block C, Block D auf, zwischen denen sich ein Aufrufbefehl
befindet. Die Prozedur weist eine Folge von Prozedurbefehlen PROC
und einen Rücksprungbefehl
auf. Die zwei Teile des Kodes, sowohl der Teil 1 als auch der Teil
2 rufen die Prozedur auf und beide kehren zu ihren entsprechenden Steuerflüssen zurück. Der
Aufrufbefehl kann als spezieller Typ eines Befehls zum Festlegen
oder zum Ausführen
einer Verzweigung implementiert sein, der nicht nur eine Zielstelle
(SET) oder eine Verzweigungsstelle (D0) identifiziert, sondern auch
bewirkt, dass die Rücksprungadresse
des ersten Befehls des nächsten
sequenziellen Blocks in einem Rücksprungregister
gespeichert wird. Dann kann der Rücksprungbefehl als spezieller
Typ eines Befehls zum Festlegen implementiert sein, der eine Verzweigung
zu der Rücksprungadresse bewirkt,
die in dem Register gespeichert worden ist.
-
9 gibt
das Zustandsregister an, das erforderlich ist, um Prozeduraufrufe
zu implementieren. Dieses weist Register 230 mit einem
Auswahlregister 132 auf, die durch ein Registerauswahlsignal 234 gesteuert werden.
Bei Ausführung
eines Befehls zum Festlegen oder Bewirken (oder Abrufen) einer Verzweigung
wird die Adresse des nächsten
Befehls nach dem Aufrufbefehl, zu der das Programm zurückspringen
soll, in Antwort auf das Speichersignal 238 in den Registern 230 auf
der Verzweigungsleitung 236 gespeichert. Wenn der spezielle
Befehl zum Festlegen (oder Zurückspringen)
implementiert ist, wird die Verzweigung zu der Zielstelle bewirkt,
die in dem spezifizierten Register 230 gespeichert ist.
-
Bei
der oben beschriebenen Ausführungsform
gibt es zwei Einrichtungen zum Abrufen von Befehlen, die beide als
aktive Abrufeinrichtung in Abhängigkeit
des Zustands des Schaltermultiplexers arbeiten können. 10 veranschaulicht
in Blockdiagrammform eine alternative Ausführungsform, bei der der Befehlsabrufschaltkreis
zwei Einrichtungen zum Abrufen von Befehlen umfasst, von denen eine
immer die aktive Abrufeinrichtung ist. Diese Ausführungsform
wird unter Bezugnahme auf 10 nun
klarer beschrieben. Gleiche Bezugszeichen in 10 bezeichnen
gleiche Teile von 6, aber mit Strichindizes versehen.
Somit veranschaulicht 10 einen Prozessor 17' mit Pipeline-Verarbeitung,
der eine Ausführungsschaltkreisanordnung mit
einem Ausführungsschaltkreis 136' für Befehle
zum Festlegen einer Verzweigung und einem Ausführungsschaltkreis 142' für Befehle
zum Bewirken einer Verzweigung aufweist. Es gibt ein Befehlspointerregister 108' und ein Zielpointerregester 118'. Der Abrufschaltkreis
weist eine aktive Abrufeinrichtung eine Zielabrufeinrichtung auf.
Die aktive Abrufeinrichtung weist einen Abrufpointer 65' und einen Befehlspuffer 66' auf. Auf vergleichbare
Weise weist die Zielabrufeinrichtung einen Abrufpointer 65'' und einen Zielbefehlspuffer 66'' auf.
-
Bei
Ausführung
eines Befehls zum Festlegen einer Verzweigung wird das Zielpointerregister 118' initialisiert,
um den Abrufpointer 65' der
Zielabrufeinrichtung anzuweisen, ausgehend von der Zielstelle mit
dem Abrufen von Befehlen zu beginnen. Zwischenzeitlich ruft die
aktive Abrufeinrichtung Befehle sequenziell aus dem Speicher ab
und führt
diese dem Prozessor 17' zu.
Bei Ausführung
des Befehls zum Bewirken einer Verzweigung dient eine Kopiereinheit 300 dazu,
die Inhalte des Zielbefehlspuffer 66' der Zielabrufeinrichtung zu dem
Befehlspuffer 66' der
aktiven Abrufeinrichtung zu kopieren, so dass die nächsten,
dem Prozessor 17' zuzuführenden
Befehle diejenigen sind, die von der Zielstelle stammen.
-
Weitere
Einzelheiten einer Implementierung des Schaltkreises von 10 sind
hier nicht ausgeführt, weil
sie aus der oben hinsichtlich des Schaltkreises der 5, 6 und 7 gegebenen
Information ersichtlich ist, wie der Schaltkreis von 10 implementiert
werden könnte.