PatentDe  


Dokumentenidentifikation DE19506734A1 07.09.1995
Titel Computersystem und Verfahren zum Aufrechterhalten der Speicherkonsistenz in einer Busanforderungswarteschlange
Anmelder Intel Corp., Santa Clara, Calif., US
Erfinder Brayton, James M., Beaverton, Oreg., US;
Rhodehamel, Michael W., Beaverton, Oreg., US;
Sarangdhar, Nitin V., Beaverton, Oreg., US;
Hinton, Glenn J., Portland, Oreg., US
Vertreter Zenz, Helber, Hosbach & Partner, 45133 Essen
DE-Anmeldedatum 27.02.1995
DE-Aktenzeichen 19506734
Offenlegungstag 07.09.1995
Veröffentlichungstag im Patentblatt 07.09.1995
IPC-Hauptklasse G06F 12/08
IPC-Nebenklasse G06F 13/16   G06F 15/167   
Zusammenfassung Es wird ein Mechanismus für ein Computersystem (910) geschaffen, der die Datenkonsistenz zwischen verschiedenen Cache-Ebenen eines hierarchischen Mehrebenen-Speichersystems (L1, L2-CACHE, RAM) sicherstellt. Der Cache-Speicherkonsistenz-Mechanismus enthält eine Busanforderungswarteschlange (EBRQ) für einen externen Bus (912) und einen zugehörigen Mechanismus zum Überwachen und Steuern der Ausgabe von Datenanforderungen, beispielsweise Lese- und Schreibanforderungen, auf den externen Bus. Das Computersystem kann mehrere CPUs (914) enthalten, die jeweils diesen Konsistenzmechanismus aufweisen.

Beschreibung[de]

Die vorliegende Erfindung betrifft Computersysteme und insbesondere Computersysteme mit mehreren Ebenen von hierarchischen Speichern, deren Konsistenz aufrechterhalten werden muß.

Computersysteme können mehrere hierarchisch angeordnete Speicherebenen aufweisen. Beispielsweise kann ein Computer einen Hauptspeicher mit wahlfreiem Zuriff (RAM) und eine zentrale Verarbeitungseinheit (CPU), die eine oder mehrere Ebenen von Cache-Speichern enthält, aufweisen. Jede Cache-Speicherebene ist im allgemeinen schneller und kleiner als die Ebene über ihr, jedoch teurer sowohl preislich als auch gemessen in der benötigten Siliziumfläche. Cache-Speicher werden vorgesehen, um die Ausführungsgeschwindigkeit eines ausgeführten Programms in einer für das Programm transparenten Weise zu beschleunigen. Jeder Cache-Speicher wird zum schnelleren Zugriff durch die CPU zum Halten von gültigen Daten verwendet, die von dem Programm in logischer Hinsicht als in dem RAM befindlich angesehen werden. Ein solches System kann einen primären (L1-)Cache-Speicher, der vorteilhafterweise in der CPU angeordnet ist, einen sekundären (L2-)Cache-Speicher, der in der CPU als On-Chip- oder Off-Chip-Speicher angeordnet sein kann, und einen tertiären (L3-)Cache-Speicher aufweisen, der üblicherweise eher auf der Mutterplatine angeordnet würde. Andere Konfigurationen sind natürlich möglich.

Da dieselben logischen Daten an physikalisch unterschiedlichen Stellen in Cache-Speichern einer oder mehrerer Ebenen vorhanden sein können, und da eine gegebene logische Dateneinheit zu diesen verschiedenen Ebenen zu unterschiedlichen Zeiten geschrieben werden kann, ist es nötig, die logische Kohärenz oder Konsistenz zwischen den Speicherebenen aufrechtzuerhalten.

Fortgeschrittene Computersysteme können mehrere Teilnehmer enthalten, die in der Lage sind, aus dem Speicher zu lesen und/oder in den Speicher zu schreiben. Dies stellt höhere Anforderungen an die Cache-Speicher-Konsistenz-Anforderung. Solche Teilnehmer können verschiedene Einheiten innerhalb einer einzigen CPU enthalten. Außerdem können sie mehrere CPUs in einem einzigen System enthalten. Sie können auch andere Arten von Teilnehmern, beispielsweise Steuereinrichtungen für den direkten Speicherzugriff (DMA) oder ähnliches aufweisen.

In einem solchen System sind die verschiedenen Cache-Speicher möglicherweise mit verschiedenen Kombinationen von Bussen gekoppelt. Um die Systemleistung zu verbessern, ist es wünschenswert, daß die verschiedenen Teilnehmer auf die Cache- Speicher über diese Busse in einer nicht blockierenden Weise zugreifen.

Aufgabe der Erfindung ist es, die Cache-Speicherkonsistenz zu verbessern und ein nicht-blockierendes Cache-Speichern in mehreren Ebenen zu ermöglichen. Insbesondere ist ein System mit einem oder allen der folgenden Eigenschaften wünschenswert: Instruktionsverarbeitung außer der Reihe, spekulative Ausführung von Instruktionen, insbesondere von solchen, die Busanforderungen enthalten, tiefe Bus-Pipeline-Verarbeitung, Unterstützung von selbstmodifizierendem Code, Unabhängigkeit beim Laden von Befehls- und Daten-Cache-Speicher, Integration des L2- Cache-Speichers und internes Cache-Speichern in mehreren Ebenen.

Diese Aufgabe wird durch ein Computersystem mit den Merkmalen des Anspruchs 1 sowie durch ein Verfahren mit den Merkmalen des Anspruchs 3 gelöst.

Die Erfindung stellt ein Computersystem und ein von diesem ausgeführtes Verfahren zur Verfügung, das einen Mechanismus zum Sicherstellen der Konsistenz zwischen Daten verschiedener Ebenen der Cache-Speicherung in einem hierarchischen Mehrebenen-Speichersystem aufweist. Der Cache-Konsistenzmechanismus enthält eine externe Bus-Anforderungswarteschlange und einen zugehörigen Mechanismus, die zum Überwachen und Steuern der Ausgabe von Datenanforderungen, beispielsweise Leseanforderungen und Schreibanforderungen, an einen externen Bus miteinander kooperieren. Das Computersystem enthält eine oder mehrere CPUs, von denen jede den Konsistenzmechanismus aufweist.

Im folgenden wird die Erfindung anhand in der Zeichnung dargestellter Ausführungsbeispiele näher beschrieben. In der Zeichnung sind ähnliche Elemente mit gleichen Bezugszeichen bezeichnet. In der Zeichnung zeigen:

Fig. 1 ein Mehrprozessor-Computersystem mit einem Satz von Prozessoren und einem Speichersubsystem;

Fig. 2 ein Blockschaltbild eines Mehrprozessor-Computersystems, in dem die Erfindung ausgeführt werden kann;

Fig. 3 ein Blockschaltbild mit einem Bus-Gruppen-System, in dem die Erfindung ausgeführt werden kann;

Fig. 4 eine Übersicht über ein erfindungsgemäßes Mehrprozessor-Computersystem;

Fig. 5 ein Zeitablaufdiagramm von zwei Bustransaktionen bei einem Ausführungsbeispiel der Erfindung;

Fig. 6 ein Blockschaltbild des Speichersubsystems eines Prozessors, der in einem Ausführungsbeispiel des erfindungsgemäßen Computersystems enthalten ist;

Fig. 7 ein Blockschaltbild, das ein Ausführungsbeispiel eines erfindungsgemäßen Prozessors veranschaulicht;

Fig. 8 ein Blockschaltbild eines Prozessors in dem Mehrprozessor-Computersystem;

Fig. 9 ein Blockschaltbild des erfindungsgemäßen Systems;

Fig. 10 ein Blockschaltbild, das weitere Details der externen Bus-Anforderungswarteschlange zeigt;

Fig. 11 die Umordnungsschaltung, die einen Umordnungspuffer mit einem Satz von ROB-Einträgen (RE0 bis REn) enthält, die Ergebnisdaten von der ungeordneten spekulativen Ausführung von physikalischen Mikrobefehlen zwischenspeichern;

Fig. 12 eine Speicherladeschaltung, die eine Adreßerzeugungsschaltung, eine Speicherordnungsschaltung, eine Datenübersetzungs-Nachschlage-Pufferschaltung (DTLB) und eine Daten-Cache-Speicherschaltung aufweist;

Fig. 13 einen Prozessor eines Ausführungsbeispiels, der einen internen Daten-Cache-Speicher, eine Speicherzugriffsschaltung und Transaktionswarteschlangen zum Verfolgen zurückgestellter Transaktionen aufweist;

Fig. 14 eine Knotenschnittstellenschaltung für ein Ausführungsbeispiel, das Transaktionswarteschlangen zum Verfolgen zurückgestellter Transaktionen und zum Aussenden zurückgestellter Transaktionen zwischen Bus-Gruppen aufweist;

Fig. 15 ein Beispiel eines Abbruch- und Neuabfertigungsprozesses;

Fig. 16 ein Ablaufdiagramm, das die Schritte zur Schaffung eines Speicherkonsistenzmodells (d. h. eine Prozeßordnung) in einem Mehrprozessorsystem beschreibt;

Fig. 17-18 ein Ablaufdiagramm, das die Behandlung einer Kommunikationstransaktion durch die Knotenschnittstellenschaltung veranschaulicht;

Fig. 19 ein Ablaufdiagramm, das eine Lesetransaktion eines anfordernden Busteilnehmers veranschaulicht;

Fig. 20 ein Ablaufdiagramm, das eine Schreibtransaktion oder eine Invalidierungstransaktion eines anfordernden Busteilnehmers veranschaulicht;

Fig. 21 ein vereinfachtes Ablaufdiagramm der Arbeitsweise eines Ausführungsbeispiels des erfindungsgemäßen Computersystems;

Fig. 22 ein Ablaufdiagramm, das die Schritte zum Unterstützen einer Operation zum Speicher auf einem Pipeline-Bus bei einem Ausführungsbeispiel der Erfindung beschreibt;

Fig. 23 ein Ablaufdiagramm, das die Schritte zum Ausführen einer Leseoperation auf einem Pipeline- Bus bei einem Ausführungsbeispiel der Erfindung beschreibt;

Fig. 24 ein Ablaufdiagramm, das die Schritte zum Aktualisieren der Cache-Speicherzustände bei einer Leseoperation bei einem anderen Ausführungsbeispiel der Erfindung beschreibt;

Fig. 25 ein Ablaufdiagramm, das die Schritte zum Aktualisieren der Cache-Speicherzustände bei einer Leseoperation bei einem anderen Ausführungsbeispiel der Erfindung beschreibt;

Fig. 26 ein Ablaufdiagramm, das die Schritte zum Ausführen einer Schreiboperation auf einem Pipeline-Bus bei einem Ausführungsbeispiel der Erfindung beschreibt;

Fig. 27 ein Ablaufdiagramm, das die Schritte zum Aktualisieren der Cache-Speicherzustände bei einer Schreiboperation bei einem anderen Ausführungsbeispiel der Erfindung beschreibt;

Fig. 28 ein Ablaufdiagramm, das die Schritte zum Aktualisieren der Cache-Speicherzustände bei einer Schreiboperation bei einem weiteren Ausführungsbeispiel der Erfindung beschreibt;

Fig. 29 ein Ablaufdiagramm, das die Schritte zum Ausführen einer Cache-Zeilen- Invalidierungsoperation auf einem Pipeline-Bus bei einem Ausführungsbeispiel der Erfindung beschreibt.

Fig. 1 zeigt ein Mehrprozessor-Computersystem 120. Das Mehrprozessor-Computersystem 120 weist einen Satz von Prozessoren 122-124, und ein Speichersubsystem 126 auf. Die Prozessoren 122-124 und das Speichersubsystem 126 kommunizieren über einen Mehrprozessorbus 128.

Jeder Prozessor 122-124 holt sich einen Strom von Makroinstruktionen von dem Speichersubsystem 126 über den Mehrprozessorbus 128. Jeder Prozessor 122-124 führt den zugehörigen Strom von Makroinstruktionen aus und verwaltet die Datenspeicherung in dem Speichersubsystem 126.

Fig. 2 zeigt eine Übersicht über ein Mehrprozessor-Computersystem, in dem die Erfindung ausgeführt werden kann. Das Computersystem weist allgemein einen Prozessorsystembus oder ein anderes Kommunikationsmittel 201 zum Informationsaustausch eines oder mehrerer Prozessoren 202 und 203 auf. Der Prozessorsystembus 201 enthält Adreß-, Daten- und Steuerbusse. Wie oben beschrieben, können die Prozessoren 202 und 203 einen kleinen, extrem schnellen internen Cache-Speicher zum vorübergehenden Speichern von Daten und Instruktionen auf dem Chip aufweisen, der im allgemeinen als ein primärer (L1-)Cache-Speicher bezeichnet wird. Ferner kann ein größerer, langsamerer sekundärer (L2-)Cache-Speicher 204 mit dem Prozessor 202 zum temporären Speichern von Daten und Instruktionen mit dem Prozessor 202 gekoppelt sein. In dem derzeit bevorzugten Ausführungsbeispiel sind der L1- und der L2-Cache-Speicher in der gleichen Chip- Verkapselung wie der Prozessor 202 enthalten.

Mit dem Prozessorsystembus 202 ist außerdem der Prozessor 203 gekoppelt zur Informationsverarbeitung gemeinsam mit dem Prozessor 202. Der Prozessor 203 kann ein paralleler Prozessor sein, der ähnlich oder gleich dem Prozessor 202 ist. Alternativ kann der Prozessor 203 ein Coprozessor sein, beispielsweise ein digitaler Signalprozessor. Darüber hinaus können mit dem Prozessorsystembus 201 ein tertiärer (L3-)Cache-Speicher 211 zum temporären Speichern von Daten und Instruktionen zur Verwendung durch andere Einrichtungen in dem Computersystem (z. B. durch den Prozessor 202, 203 usw.) und eine L3-Cache-Steuereinrichtung 210 zum Steuern des Zugriffes auf den L3-Cache-Speicher 211 gekoppelt sein. Die L3-Cache-Steuereinrichtung 210 ist außerdem mit dem Speichersystembus 215 gekoppelt.

Ein Speichersystembus oder eine andere Kommunikationseinrichtung 215 zum Austauschen von Informationen ist mit dem Prozessor 202 gekoppelt, um dem Prozessor 202 und den anderen Einrichtungen in dem Computersystem den Zugriff auf Speicher- und Eingabe/Ausgabe(I/O)-Subsysteme zu ermöglichen. Eine Speichersteuereinrichtung 222 ist mit dem Speichersystembus 215 gekoppelt, um den Zugriff auf einen RAM oder eine andere dynamische Speichereinrichtung 221 zum Speichern von Informationen und Instruktionen für die Prozessoren 202 und 203 (üblicherweise als Hauptspeicher bezeichnet) zu ermöglichen. Die Speichersteuereinrichtung 212 erhält die Ordnung der Lese- und Schreiboperationen auf der Basis spezieller, im folgenden beschriebener Regeln aufrecht. Eine Massenspeichereinrichtung 225, beispielsweise eine magnetische Platte und ein Plattenlaufwerk zum Speichern von Informationen und Instruktionen, und eine Anzeigeeinrichtung 223, beispielsweise eine Kathodenstrahlröhre (CRT) oder eine Flüssigkristallanzeige (LCD) zum Anzeigen von Informationen sind mit dem Speichersystembus 215 gekoppelt.

Eine Eingabe/Ausgabe(I/O)-Brücke 224 ist mit dem Speichersystembus 215 und einem I/O-Bus 231 gekoppelt, um einen Kommunikationspfad oder eine Gateway für Einrichtungen entweder an dem Speichersystembus 215 oder an dem I/O-Bus 231 zu Einrichtungen auf dem anderen Bus zur Datenübertragung zu ermöglichen. Im wesentlichen ist die Brücke 224 eine Schnittstelle zwischen dem System-I/O-Bus 231 und dem Speichersystembus 215. Speziell wandelt die Brücke 224 den Byte/Wort/Doppelwort-Datenübertragungsverkehr vom I/O-Bus 231 in Verkehr mit Zeilenbreite auf dem Speichersystembus 215 um.

Der I/O-Bus 231 tauscht Informationen zwischen den Einrichtungen in dem Computersystem aus. Zu den Einrichtungen, die mit dem System-I/O-Bus 231 gekoppelt sein können, gehört eine Anzeigeeinrichtung 232, beispielsweise eine Kathodenstrahlröhre oder eine Flüssigkristallanzeige, eine alphanumerische Eingabeeinrichtung mit alphanumerischen und anderen Tasten zum Übermitteln von Informationen und Befehlsauswahlen zu anderen Einrichtungen des Computersystems (z. B. Prozessor 202) und einer Cursorsteuereinrichtung 234 zum Steuern der Cursorbewegung. Darüber hinaus können eine Hardcopy-Einrichtung 235, beispielsweise ein Plotter oder ein Drucker, zum Ermöglichen einer visuellen Darstellung der Computerbilder und eine Massenspeichereinrichtung 236, beispielsweise eine magnetische Platte und ein Plattenlaufwerk, zum Speichern von Informationen und Instruktionen mit dem Systembus 231 gekoppelt sein.

Selbstverständlich werden bestimmte Ausführungsformen und Verwendungen der vorliegenden Erfindung nicht alle oben genannten Komponenten erfordern oder enthalten. Beispielsweise können bei bestimmten Ausführungsbeispielen die L3-Cache-Steuereinrichtung und der L3-Cache-Speicher entfallen. Bei solchen Ausführungsformen befinden sich der Prozessor 202 und 203 direkt an dem Speichersystembus 215. Bei anderen Ausführungsbeispielen wird es nicht erforderlich sein, eine Anzeigeeinrichtung zum Anzeigen von Informationen vorzusehen. Bestimmte Implementierungen der vorliegenden Erfindung können zusätzliche Prozessoren oder andere Komponenten enthalten.

Fig. 3 zeigt ein Blockschaltbild mit einem Busgruppensystem, in dem die Erfindung ausgeführt werden kann. Die vorliegende Erfindung kann in Mehrprozessor-Computersysteme mit einem oder mehreren Gruppen von Teilnehmern verwendet werden. Fig. 3 zeigt zwei solcher Gruppen 301 und 302. Jede dieser Gruppen weist eine Anzahl von Teilnehmern auf. Beispielsweise weist die Gruppe 301 die vier Teilnehmer 303 bis 306 und einen Cache- Speicher 307 auf. Die Teilnehmer 303 bis 306 können andere Mikroprozessoren, Coprozessoren, digitale Signalprozessoren, DMA-Steuereinrichtungen, I/O-Einrichtungen, I/O-Brücken, Netzwerkeinrichtungen/-steuereinrichtungen und/oder separate Cache-Speicher mit oder ohne zugehörigen Prozessoren aufweisen. Kurz gesagt, kann ein Teilnehmer eine beliebige Einrichtung sein, die Lade- und/oder Speicheroperationen ausführen kann. Der Cache-Speicher 307 wird von den vier Teilnehmern 303 bis 306 geteilt. Jede Gruppe ist mit einem Systembus 308 gekoppelt. Die Gruppen 301 bis 302 sind mit verschiedenen anderen Komponenten des Computersystems über eine Systemschnittstelle 309 gekoppelt. Die Systemschnittstelle 309 enthält eine Hochgeschwindigkeits-I/O-Schnittstelle 310 als Schnittstelle des Computersystems mit der Außenwelt und eine Speicherschnittstelle 311, die den Zugriff auf einen Hauptspeicher, beispielsweise eine DRAM-Speichermatrix ermöglicht.

Bei der Erfindung wird eine Prozessorreihenfolge(-ordnung) von der für die meisten Prozessorsystemarchitekturen geschriebenen vorhandenen Software inhärent vorausgesetzt. Das Unterstützen der Prozessorordnung impliziert, daß Speicheroperationen, die von irgendeinem Prozessor in dem System erzeugt werden, in der gleichen Reihenfolge von allen Prozessoren des Systems beobachtet werden. In anderen Worten, die Reihenfolge (Ordnung) der Speicherungen muß aufrechterhalten werden. Quellcodes, die eine Produzenten/Konsumenten-Beziehung benötigen, hängen von dieser Unterstützung zur Sicherstellung einer richtigen Funktionalität ab.

Angenommen, der Prozessor 303 ist ein Informationsproduzent und der Prozessor 304 ein Konsument dieser vom Prozessor 303erzeugten Informationen. Die Codesequenzen für sowohl den Produzentenprozessor als auch den Konsumentenprozessor sind wie folgt:

Produzent Konsument W1: Speicherdaten an die Adresse X R1: Während Flag = 0; Loop a1 W2: Speichere 1 für das Flag (W=write; R=Read) R2: Lade Daten von der Adresse X


Folglich führt der Produzentprozessor 303 eine Schreiboperation W1 von Daten an die Adresse X aus und danach eine zweite Schreiboperation W2, um das Flag auf "1" zu setzen, wobei dies anzeigt, daß die Daten an der Adresse X gültig sind. In der Zwischenzeit führt der Konsumentprozessor 304 kontinuierlich eine Leseoperation R1 aus, um feststellen zu können, ob das Flag auf "1" gesetzt wurde. Diese R1-Leseoperation wird kontinuierlich ausgeführt, bis das Flag auf "1" gesetzt ist (durch Produzentprozessor 303). Wenn festgestellt wird, daß das Flag gesetzt ist (z. B. "1"), führt der Konsumentprozessor eine Leseoperation R2 zum Laden der Daten von der Adresse X aus. Damit dieser Befehlsteil erfolgreich in dem Mehrprozessorsystem ausgeführt wird, sollte die Reihenfolge, in der W1 und W2 von dem Produzentprozessor 303 geschrieben werden, die gleiche sein, in der R1 und R2 dem Konsumentprozessor 304 aktualisiert erscheinen.

Bei der vorliegenden Erfindung wird die Leistungsfähigkeit durch das Implementieren einer spekulativen Prozessorreihenfolge (oder -ordnung), bei gleichzeitigem Vermeiden von Prozessorordnungsverletzungen maximiert. Bei dem derzeitig bevorzugten Ausführungsbeispiel bleiben Speicheroperation in der Reihenfolge und sind konsistent. Jedoch wird es Ladeoperationen gestattet, andere Ladeoperationen vorbeizulassen. Speicherinstruktionen werden unverzüglich ausgeschieden (retired) und bleiben in dem Speicherpuffer, da das Ausscheiden (retirement) keinen Cache-Speicherzugriff erfordert. Diese Speicheroperationen, bekannt als "Senior"-Speicheroperationen werden im Hintergrund zum Speicher ausgeführt. Der Inhalt des Cache/Speichersystems bleibt ungeändert.

Wenn zwei aufeinanderfolgende Speicheroperationen (d. h. W1 und W2) in den Senior-Speicherpuffer ausgeschieden sind, ist die Existenz der Speicheroperationen nur für den Produzentprozessor, jedoch für keinen Konsumentprozessor sichtbar. Wenn der Produzentprozessor von den gleichen Adreßstellen liest, wird vom Speicherpuffer direkt zu dem Kern weitergeleitet. Dieser Mechanismus ist als "Speicherweiterleiten" ("store forwarding") bekannt. Wichtig ist, daß dieser Mechanismus die Prozessorordnung des Prozessors im Hinblick auf seine eigenen Schreiboperationen aufrechterhält. Wenn zu diesem Zeitpunkt irgendein Konsumentprozessor in dem System von den zwei Stellen liest, wird keine die Auswirkungen der zwei Speicheroperationen reflektieren. Das stellt sicher, daß die Prozessorordnung in bezug auf alle anderen Prozessoren für die zwei Schreiboperationen aufrechtgehalten wird. Von den so ausgeschiedenen Senior-Speicheroperationen verläßt jeweils eine pro Zeiteinheit den Speicheroperationspuffer. Dies bewirkt eine Speichersystemaktualisierung. Auf diese Weise wird sichergestellt, daß die W1-Speicheroperation die erste ist, die den Senior-Speicheroperationspuffer verläßt. Da keine nachfolgende Speicheroperation die Senior-Speicheroperation-Puffereinheit verlassen darf, ist die Aktualisierung des Systemspeichers gesichert.

Wenn eine Ladeoperation eine andere Ladeoperation (z. B. spekulative Ladeoperationen) durchläßt, überwacht (snoops) der Ladeoperationenpuffer die Speicheroperationen von den anderen Prozessoren. Wenn eine externe Speicheroperation mit einer Ladeoperation in Konflikt gerät, die bereits beendet wurde, obwohl eine frühere Ladeoperation noch aussteht, zeigt dies die Erfassung eines Fehlers an. Bei einem Ausführungsbeispiel wird eine Ladeoperation als noch ausstehend betrachtet, wenn sie noch nicht vom Speicher geladen wurde. Bei einem anderen Ausführungsbeispiel bedeutet "noch ausstehend", daß auf den Speicher zugegriffen wurde, aber daß die Ladeoperation noch nicht ausgeschieden (retired) wurde. Bei diesem Ausführungsbeispiel können falsche Fehleranzeigen auftreten. Dies verhindert die Richtigkeit nicht, aber mindert die Leistungsfähigkeit. Die illegale Ladeoperation und alle nachfolgenden Mikrooperationen (Mikrocode mit Quellfeldern, Zielen, Direktdaten und Flags) werden abgebrochen. Die Sequenz wird dann erneut bei der Ladeoperation gestartet, die die Abbruchbedingung ausgelöst hat. Indem die Ladeoperation zu einer späteren Zeit erneut abgefertigt wird, werden die richtigen Daten gelesen.

Nun wird ein Beispiel beschrieben, um die Prozessorordnungsoperation im Hinblick auf die Lese/Schreibsequenz (R1, R2, W1 und W2) für den oben beschriebenen Produzentprozessor 303 und Konsumentprozessor 304 zu veranschaulichen. Es sei angenommen, daß die Ladeoperation R2 spekulativ vor der Ladeoperation R1 verarbeitet wird, was zu einem Prozessorordnungsfehler führt. Dieser Fehler wird erfaßt, wenn die Speicheroperation W2 einen Snoop-Treffer für die bereits beendete Ladeoperation R2 verursacht, während die Ladeoperation R1 noch aussteht. Wenn der Fehler erfaßt wird, wird er durch Abbrechen der Ladeoperation R2 berichtigt. Außerdem werden alle nachfolgenden spekulativen Zustände gelöscht. Später wird die Ladeoperation R2 erneut abgefertigt. Sie greift dann auf die gültigen Daten zu.

Fig. 4 zeigt eine Übersicht über ein erfindungsgemäßes Mehrprozessor-Computersystems. Das Computersystem weist einen Prozessor-Speicher-Bus oder eine andere Kommunikationseinrichtung 401 zum Austauschen von Informationen eines oder mehrerer Prozessoren 402 und 403 auf. Der Prozessorsystembus 401 enthält Adreß-, Daten- und Steuerbusse. Die Prozessoren 402 und 403 können einen internen kleinen, extrem schnellen primären (L1-) Cache-Speicher aufweisen, um Daten und Instruktionen auf dem Chip temporär zu speichern. Ferner kann ein größerer langsamerer sekundärer (L2-)Cache-Speicher 404 mit dem Prozessor 402 zum temporären Speichern von Daten und Instruktionen mit dem Prozessor 402 gekoppelt sein. Bei einem Ausführungsbeispiel sind die Prozessoren 402 und 403 zur INTEL-Architektur kompatible Mikroprozessoren; jedoch kann die vorliegende Erfindung jede Mikroprozessorart, auch verschiedene Arten von Prozessoren verwenden.

Der Prozessor 403 ist zum Verarbeiten von Informationen gemeinsam mit dem Prozessor 402 ebenfalls mit dem Prozessor- Speicher-Bus 401 gekoppelt. Der Prozessor 403 kann ein paralleler Prozessor, beispielsweise ein dem Prozessor 402 ähnlicher oder gleicher Prozessor sein. Alternativ kann der Prozessor 403 ein Coprozessor, beispielsweise ein digitaler Signalprozessor sein. Der Prozessor-Speicher-Bus 401 ermöglicht einen Zugriff des Systems zu dem Speicher und den Eingabe/Ausgabe(I/O)-Subsystemen. Eine Speichersteuereinrichtung 422 ist mit dem Prozessor-Speicher-Bus 401 gekoppelt, um den Zugriff auf einen Nur- Lese-Speicher (RAM) oder auf eine andere dynamische Speichereinrichtung 421 (üblicherweise als Hauptspeicher bezeichnet) zum Speichern von Informationen und Instruktionen für die Prozessoren 402 und 403 zu steuern. Die Speichersteuereinrichtung 422 hält eine strenge Ordnung der Lese- und Schreiboperationen aufrecht. Eine Massendatenspeichereinrichtung 425, beispielsweise eine Magnetplatte und ein Plattenlaufwerk, zum Speichern von Informationen und Instruktionen und eine Anzeigeeinrichtung 423, beispielsweise eine Kathodenstrahlröhre (CRT) oder eine Flüssigkristallanzeige (LCD), zum Anzeigen von Informationen für den Computerbenutzer sind mit dem Prozessor-Speicher-Bus 401 gekoppelt.

Bei einem Ausführungsbeispiel enthält die Speichersteuereinrichtung 422 einen Snarfing- oder Wegnahmepuffer 470, einen Cache-Zeilenpuffer 471, eine implizite Rückschreib(IW)-Logik 472 und eine Verschmelzungslogik (merge logic) 473. Der Snarfing-Puffer 470 ist ein temporärer Datenpuffer zur Speicherung von Daten, die vom Bus weggenommen (snarfed off) wurden. Der Cache-Zeilenpuffer 471 ist ein temporärer Datenpuffer, der zum Speichern von von dem Bus weggenommenen Daten einer impliziten Rückschreib-Datenübertragung verwendet wird. Bei einem Ausführungsbeispiel speichert die IW-Logik 472 (IW-Implicit Writeback) von dem Bus empfangene Daten entweder in den Snarfing- Puffer 470 oder in den Cache-Zeilenpuffer 471, und zwar in Abhängigkeit von der Datenquelle. Bei einem anderen Ausführungsbeispiel überträgt die IW-Logik 472 die Daten ohne Zwischenspeichern in einem temporären Puffer direkt zum Hauptspeicher. Die IW-Logik 472 kann außerdem eine implizite Rückschreibantwort auf den Bus ausgeben, und zwar in Abhängigkeit von der Anforderung und davon, ob die Speichersteuereinrichtung 422 Daten übertragen wird, um der Anforderung nachzukommen. In einem Modus ist die IW-Logik 472 mit dem Bus über eine Busschnittstelle 475 gekoppelt, die Daten von dem Bus wegnimmt und Daten auf den Bus gibt.

Die Verschmelzungslogik 473 vereinigt die Daten in dem Snarfing-Puffer 470 und dem Cache-Zeilenpuffer 471 und speichert die Cache-Speicherzeile dann im Hauptspeicher 421. In einem Modus speichert die Verschmelzungslogik 473 die Cache- Speicherzeile über eine Speicherschnittstelle 476 in den Hauptspeicher 471. Bei einem Ausführungsbeispiel stellen der Snarfing- Puffer 470 und der Cache-Speicherzeilenpuffer 471 mehrere Puffer dar. Das heißt, daß die Speichersteuereinrichtung 421 mehrere Snarfing-Puffer und mehrere Cache-Speicherzeilenpuffer enthält. Zusätzliche Puffer sind nicht dargestellt, um die Zeichnungen übersichtlich zu halten.

Im folgenden wird detaillierter beschrieben, wie die Speichersteuereinrichtung 422 den Snarfing-Puffer 470, den Cache- Speicherzeilenpuffer 471, die IW-Logik 472 und die Verschmelzungslogik 473 in der vorliegenden Erfindung verwendet. Die Datenübertragung zwischen der Speichersteuereinrichtung 422 und dem Bus und zwischen der Speichersteuereinrichtung 422 und dem Hauptspeicher 421 ist für den Fachmann klar und wird deshalb nicht weiter beschrieben.

Bei einem anderen Ausführungsbeispiel sind der Snarfing- Puffer 470, der Cache-Speicherzeilenpuffer 471, die IW-Logik 472, die Verschmelzungslogik 473 in anderen Teilnehmern auf dem Bus enthalten. Beispielsweise können die Prozessoren 402 oder 403 der Fig. 4 diese zusätzliche Logik enthalten, Daten vom Bus wegnehmen (snarfen) und sie zur Speicherung in dem internen Speicher des Teilnehmers verschmelzen. Bei einem Modus enthalten die Prozessoren 402 und 403 einen temporären Speicherpuffer zum Speichern der vereinigten Datenzeile; auf diese Weise kann eine nachfolgende Anforderung nach der gleichen Datenzeile direkt von dem temporären Speicherpuffer anstelle vom Speicher erfüllt werden. Bei einem anderen Modus speichern die Teilnehmer die vereinigte Cache-Speicherzeile in einem L2-Cache-Speicher, wie dem L2-Cache-Speicher 404 gemäß Fig. 4.

Bei einem Ausführungsbeispiel enthält der Prozessor 402 außerdem einen mit einer Cache-Steuereinrichtung 439 gekoppelten L1-Cache-Speicher 438. Bei einem Modus legt die Cache-Steuereinrichtung 439 Signale an den Prozessor-Speicher-Bus 401 an und empfängt Signale von dem Bus 401 über die Busschnittstelle 441. Die Cache-Steuereinrichtung 439 überprüft Anforderungen auf dem Bus 401, um festzustellen, ob der Cache-Speicher 438 eine Kopie der angeforderten Cache-Speicherzeile aufweist, indem sie den Zustand der Cache-Speicherzeile wie oben beschrieben überprüft. Die Cache-Steuereinrichtung 439 kann in Abhängigkeit von dem Zustand der Cache-Speicherzeile einen HIT#-Signal oder ein HITM#-Signal ausgeben, was unten näher beschrieben wird. Bei einem Modus überträgt die Cache-Steuereinrichtung 439 die Cache-Speicherzeile des Cache-Speichers 438 zu dem Bus 401, wenn sie ein HITM#-Signal in Antwort auf die Anforderung anlegt. Bei einem Ausführungsbeispiel gibt die Cache-Steuereinrichtung 439 die Cache-Speicherzeile über die Busschnittstelle 441 auf den Prozessor-Speicher-Bus 401. Die Signalausgabe und das Übertragen von Daten an und von dem Bus 401 durch die Cache-Steuereinrichtung 439 ist für den Fachmann klar und wird deshalb nicht weiter beschrieben.

Bei einem alternativen Ausführungsbeispiel steuert die Cache-Steuereinrichtung 439 außerdem einen mit dem Prozessor 402 gekoppelten L2-Cache-Speicher. Das Zusammenwirken von Cache-Steuereinrichtung 439 und Cache-Speicher 404 entspricht dem oben beschriebenen Zusammenwirken zwischen Cache-Speicher 438 und Cache-Steuereinrichtung 439.

Der gezeigte Prozessor 402 enthält ein weiteres Detail. Die übrigen Teilnehmer an dem Prozessor-Speicher-Bus 401 können diese zusätzliche im Prozessor 402 gezeigte Logik ebenfalls aufweisen. Bei einem Ausführungsbeispiel enthalten alle Teilnehmer an dem Bus, die Anforderungen ausgeben, einen Cache- Speicher 438 und eine Cache-Steuereinrichtung 439. Diese zusätzliche Logik ist nicht bei allen Teilnehmern dargestellt, um die Zeichnungen nicht zu überladen.

Eine Eingabe/Ausgabe(I/O)-Brücke 424 ist mit dem Prozessor- Speicher-Bus 401 und dem System-I/O-Bus 431 gekoppelt, um einen Kommunikationspfad oder ein Gateway für Einrichtungen an entweder dem Prozessor-Speicher-Bus 401 oder dem I/O-Bus 431 zur Verfügung zu stellen, um auf Daten zwischen Einrichtungen an dem anderen Bus zugreifen zu können oder diese zu übertragen. Wesentlich ist, daß die Brücke 424 eine Schnittstelle zwischen dem System-I/O-Bus 431 und dem Prozessor-Speicher-Bus 401 ist.

Der I/O-Bus 431 tauscht Informationen mit Peripheriegeräten in dem Computersystem aus. Geräte, die mit dem Systembus 431 gekoppelt sein können, sind eine Anzeigeeinrichtung 432, beispielsweise eine Kathodenstrahlröhre oder eine Flüssigkristallanzeige, eine alphanumerische Eingabeeinrichtung 433 einschließlich alphanumerischer und anderer Tasten zum Austauschen von Informationen und Befehlsauswahlen mit anderen Einrichtungen in dem Computersystem (z. B. mit dem Prozessor 402), und eine Cursor-Steuereinrichtung 434 zum Steuern der Cursorbewegung. Ferner können mit dem Systembus 431 eine Hardcopy- Einrichtung 435, beispielsweise ein Plotter oder ein Drucker, zur visuellen Darstellung der Computerbilder und eine Massenspeichereinrichtung 436, beispielsweise eine Magnetplatte und ein Plattenlaufwerk, zum Speichern von Informationen und Instruktionen gekoppelt sein.

Bei manchen Ausführungsformen kann es nicht erforderlich sein, eine Anzeigeeinrichtung für anzuzeigende Informationen zur Verfügung zu stellen. Bestimmte Ausführungsformen der vorliegenden Erfindung können zusätzliche Prozessoren oder andere Komponenten enthalten. Außerdem können bestimmte Ausführungsformen der vorliegenden Erfindung möglicherweise nicht sämtliche o.g. Komponenten erfordern oder enthalten. Beispielsweise können der Prozessor 403, die Anzeigeeinrichtung 423 oder die Massenspeichereinrichtung 425 nicht mit dem Prozessor- Speicher-Bus 401 gekoppelt sein. Außerdem können die in der Darstellung mit dem System-I/O-Bus 431 gekoppelten Peripheriegeräte mit dem Prozessor-Speicher-Bus 401 gekoppelt sein; zusätzlich kann in einigen Ausführungsbeispielen nur ein einziger Bus existieren, wobei die Prozessoren 402 und 403, die Speichersteuereinrichtung 422 und die Peripheriegeräte 432 bis 436 mit dem einen Bus gekoppelt sind.

Verschiedene Phasen von unterschiedlichen Transaktionen können sich überlappen, wobei eine Pipeline der Busverwendung entsteht und die Busleistung verbessert wird. Fig. 5 zeigt beispielsweise überlappte Anforderungs/Antwortphasen für zwei Transaktionen. Es wird auf Fig. 5 Bezug genommen. Jede Transaktion beginnt mit einer Zuteilungsentscheidungsphase, in der ein anfordernder Teilnehmer Busbesitzer wird. Die zweite Phase ist die Anforderungsphase, in der der Busbesitzer Anforderungs- und Adreßinformationen auf den Bus gibt. Die dritte Phase der Transaktion ist eine Fehlerphase, drei Takte nach der Anforderungsphase. Die Fehlerphase zeigt alle sofort von der Anforderung ausgelösten Fehler an. Die vierte Phase einer Transaktion ist eine Snoop- bzw. Überwachungsphase, vier oder mehr Takte nach der Anforderungsphase. Die Snoop-Phase zeigt an, ob die bei einer Transaktion zugegriffene Cache-Speicherzeile in dem Cache-Speicher irgendeines Teilnehmers gültig oder modifiziert (oder "dirty") vorliegt.

Die Antwortphase zeigt an, ob die Transaktion fehlgeschlagen oder erfolgreich ist, ob die Antwort unmittelbar oder verzögert ist und ob die Transaktion Datenphasen enthält. Wenn eine Transaktion eine von der Antwortphase ausgelöste Datenphase enthält, dann beginnt sie mit der Datenübertragung mit der Antwortphase.

Die Verwendung eines Pipeline-Systems kann verschiedene Probleme mit sich bringen. Im Beispiel gemäß Fig. 5 wird beispielsweise das Anforderungssignal 1 im Takt T1 und das Anforderungssignal 2 im Takt T4 gesendet. Wenn die Anforderungen 1 und 2 Anforderungen für die gleiche Adresse sind, muß das System die Cache-Speicherkonsistenz aufrechterhalten, um beide Anforderungen 1 und 2 richtig auszuführen.

Die Festlegung eines globalen Überwachungstaktes löst dieses Problem. Das heißt, es wird ein Taktzyklus festgelegt, in dem das gesamte System als die Transaktion überwachend angesehen wird. Bei einem Ausführungsbeispiel ist dieser globale Überwachungstakt in der Snoop-Phase. Auf diese Weise behandelt jeder Teilnehmer vor der Snoop-Phase einer bestimmten Transaktion diese Transaktion so, als ob sie noch nie stattgefunden hätte. Dies geschieht, obwohl der anfordernde Teilnehmer eine Anforderung auf den Bus getrieben hat. Nach der Snoop-Phase jedoch behandelt jeder Teilnehmer die Anforderung so, als ob sie stattgefunden hätte.

Der globale Überwachungstakt ist in der Snoop-Phase, da jeder Teilnehmer das Schicksal der Transaktion in der Snoop-Phase kennt. Das heißt, es ist bekannt, ob ein Teilnehmer eine der Anforderung entsprechende modifizierte Cache-Speicherzeile aufweist, und die Teilnehmer wissen, ob sie den Zustand ihrer eigenen Cache-Speicherzeile aktualisieren müssen. Auf diese Weise sind der Teilnehmer bzw. die Teilnehmer bekannt, die von der Antwort an den anfordernden Teilnehmer betroffen sind.

Es ist anzumerken, daß unter gewissen Umständen eine bestimmte Transaktion möglicherweise nicht bei der Snoop-Phase für diese Transaktion global überwacht wird. Bei Systemen, die eine Mehrbus-Hierarchie verwenden, wird die derzeitige Transaktion beispielsweise global überwacht, wenn der Besitz der angeforderten Cache-Speicherzeile in der Busgruppe des die Anforderung herausgebenden Prozessors erfüllt werden kann (unabhängig davon, ob sie in einem modifizierten oder geteilten Zustand ist). Jedoch kann die Situation auftreten, daß die Cache-Speicherzeile nicht innerhalb der Busgruppe in Besitz ist und entweder in einer anderen Gruppe oder im Systemspeicher ist, der über den Gruppen-Manager der derzeitigen Gruppe erreicht wird. In einem solchen Fall ist der Gruppen-Manager für das Erlangen des Besitzes der Cache-Speicherzeile verantwortlich. Drei verschiedene Szenarien gibt es in einem solchen Fall.

Bei dem ersten Szenarium ist der Besitz des Systembusses der nächsten Ebene unmittelbar verfügbar. Infolgedessen kann der Besitz der Cache-Speicherzeile von der Snoop-Phase der derzeitigen Transaktion garantiert werden. Auf diese Weise wird die Transaktion, wie oben beschrieben, in der Snoop-Phase der derzeitigen Transaktion global überwacht. Bei einem zweiten Szenarium ist der Besitz des Systembusses der nächsten Ebene nicht unmittelbar verfügbar, kann aber dennoch zu einer späteren Zeit erlangt werden. Ferner kann die Cache-Speicherzeile an den anfordernden Prozessor zurückgegeben werden. Bei diesem Moment verzögert der Gruppen-Manager die globale Überwachung der Transaktion. Wenn schließlich der Besitz des Systembusses der nächsten Ebene erlangt ist, gibt der Gruppen-Manager den Besitz der Cache-Speicherzeilen mit einer verzögerten Antwort zurück. Während der Snoop-Phase der verzögerten Antwort wird die Transaktion global überwacht. Schließlich könnte der Besitz des Systembusses der nächsten Ebene nicht möglich sein, um ein gegenseitiges Sperren zu vermeiden. Folglich wird die Transaktion abgebrochen und ein weiteres Mal erneut versucht. Die Transaktion wird solange nicht global überwacht, bis die wiederholte Transaktion erfolgreich beendet wurde. Die erneut versuchte Transaktion wird während des Wiederholens global überwacht auf der Basis des Falles, unter den sie fällt.

Die Zustände der zugehörigen Cache-Speicherzeilen werden während der Snoop-Phase aktualisiert, um den globalen Überwachungstakt zu unterstützen. D.h., die Cache-Speicherzeilenzustände werden in dem globalen Überwachungstakt aktualisiert, um das richtige Systemverhalten sicherzustellen. Wenn in dem Beispiel gemäß Fig. 5 die Anforderungen 1 und 2 beides Leseanforderungen zu der gleichen Cache-Speicherzeile sind, werden die Cache-Speicherzeilenzustände, die infolge der Anforderung 1 aktualisiert werden müssen, vor der Snoop-Phase für die Anforderung 2 aktualisiert. Andernfalls können der oder die Teilnehmer nicht die notwendigen HIT#- oder HITM#-Signale für die Anforderung 2 anlegen.

Die Snoop-Phase für Anforderung 1 der Fig. 5 beginnt beispielsweise im Takt 7. Im Takt 7 legen alle Teilnehmer an den Bus HIT#- und HITM#-Signale an oder nehmen diese zurück, in Abhängigkeit von dem Zustand der angeforderten Cache-Speicherzeile in ihren Cache-Speichern. Diese Signale werden von allen Teilnehmern an dem Bus in dem nächsten Takt, Takt 8, überwacht. Bei einem Ausführungsbeispiel aktualisiert jeder Teilnehmer an dem Bus seinen Cache-Speicherzustand im Takt 7, wobei er gleichzeitig die HIT#- und HITM#-Signale anlegt oder zurücknimmt. Auf diese Weise hat jeder Teilnehmer bis zum Takt 8 seinen Snoop-Zustand aktualisiert. In dem in Fig. 2 gezeigten Beispiel beginnt die Snoop-Phase für Anforderung 2 im Takt 10. Auf diese Weise legt jeder Teilnehmer die richtigen HIT#- und HITM#-Signale in der Snoop-Phase für die Anforderung 2 an oder nimmt diese zurück, selbst wenn die Anforderung 2 eine Anforderung für die gleiche Cache-Speicherzeile wie Anforderung 1 ist, da der Zustand des Cache-Speichers jedes Teilnehmers bis zum Takt 8 aktualisiert ist.

Bei einem anderen Ausführungsbeispiel aktualisiert jeder Teilnehmer seinen Cache-Speicherzustand im Takt 8 oder im Takt 9 bei der Beobachtung der Snoop-HIT#- und/oder -HITM#-Signale im Takt 8. Bei dem in Fig. 5 dargestellten Beispiel wird die Cache-Speicherkonsistenz aufrechterhalten, wenn die Cache- Speicherzustände vor der Snoop-Phase für Anforderung 2 aktualisiert werden.

Auf diese Weise wahrt die Aktualisierung der Cache-Speicherzustände im Takt 8 oder im Takt 9 die Speicherkonsistenz.

Fig. 6 ist ein Blockschaltbild des Speichersubsystems des Prozessors P&sub0; bei einem Ausführungsbeispiel des erfindungsgemäßen Computersystems. Es ist klar, daß andere Subsystemarchitekturen zur Implementierung der vorliegenden Erfindung verwendet werden können. Während der Ausführung eines Programms in dem Prozessor P&sub0; wird zunächst eine Instruktion herangeholt und dann in eine oder mehrere primitive Operationen decodiert. Diese primitiven Operationen (Mikrobefehle oder "Mikro-ops") laufen dann durch die Maschine - möglicherweise werden sie untereinander außer der Reihe bzw. ungeordnet ausgeführt - bis sie schließlich ausgeschieden werden. Die Verarbeitung des Prozessors P&sub0; ist auf diese Weise am besten als Serie von Prozessen zu verstehen, die Mikrobefehle enthalten, die von einem Satz von verschiedenen Makrobefehlen abgeleitet sind und die über einen Satz von Puffern kommunizieren.

Die Ausführung eines Programms mit dem Prozessor P&sub0; beginnt mit dem Heranholen der Instruktionen von dem Speicher und dem Eingeben der herangeholten Instruktionen in einen Puffer oder eine Warteschlange. Danach werden die Instruktionen in einen Satz von primitiven Mikrobefehlen konvertiert. Ein separater Zuweisungsprozeß bestimmt, zu welchen der vielen physikalischen Register Ergebnisse der Mikrobefehle gesteuert werden sollen. Wenn die Ressourcen zugewiesen sind, werden die zugehörigen Operanden herangeholt und bereitgestellt, indem sie in eine Reservierungsstation (RS) gegeben werden. Die Reservierungsstation ist ein Puffer, der die noch nicht ausgeführten Mikrobefehle enthält. Wenn Daten für eine gegebene Instruktion bereit sind, fertigt die RS die Instruktion zu einer von mehreren Ausführungseinheiten entsprechend den Datenabhängigkeiten und der Verfügbarkeit von Ausführungseinheiten ab. Wenn die Ausführungseinheit die angeforderte Operation ausführt, wird eine Rückschreiboperation zu der Reservierungsstation ausgeführt.

Die Außer-der-Reihe-Maschine des Prozessors P&sub0; enthält außerdem einen Umordnungspuffer (ROB - re-order buffer). Dies ist eine Funktionseinheit, in der spekulative Ergebnisse gesammelt, erneut geordnet und dann ausgeschieden werden. Das Ausscheiden ist der aktive Prozeß, einen beendeten Mikrobefehl aus dem Umordnungspuffer zu entfernen und seinen Zustand als solchen permanenten Architekturzustand festzulegen, der von dem ursprünglichen Quellprogramm zugewiesen wurde.

Es wird weiter auf Fig. 6 Bezug genommen. Das Speichersubsystem empfängt Zuteilungsoperationen (meistens Speicher- Leseoperationen und Speicher-Schreiboperationen) von dem Außerder-Reihe- (O-O-O bzw. out-of-order) Abfertigungskern 621. Der Abfertigungskern 621 enthält die Reservierungsstation und den Umordnungspuffer des Prozessors. Das Speichersubsystem empfängt Zuteilungsoperationen von der Reservierungsstation und gibt Daten- und Fehlerinformation zu der RS und dem ROB zurück. Wenn das Speichersubsystem einen Speicher-Lese-Mikrobefehl (d. h. einen Lade-Mikrobefehl) empfängt, gibt es eine Anforderung zum Lesen von Daten vom externen Speicher 612 an den Bus 611 aus. Wenn das Subsystem einen Speicher-Schreib-Mikrobefehl (d. h. einen Speicher-Mikrobefehl) empfängt, kann es Daten zu dem externen Speicher 612, einem I/O-Peripheriegerät oder zu einem anderen mit dem Systembus 611 gekoppelten Teilnehmer zurückschreiben. Da die Reservierungsstation des Kerns 621 auf der Basis von Datenflußabhängigkeiten arbeitet, muß das Speichersubsystem des Prozessors P&sub0; Fehler der Speicherordnung feststellen.

Das Speichersubsystem der Fig. 6 enthält eine Daten-Cache- Speichereinheit (DCU) 637 mit einer 8K-Zweiwege-satzassoziativen Matrix mit einer Cache-Zeilenlänge von 32 Bytes bei dem gewählten Ausführungsbeispiel. Die DCU 637 ist in vier Datenbänke aufgeteilt. Das erlaubt zwei Zugriffe (eine Ladeoperation, eine Speicheroperation) gleichzeitig, wenn sie auf zwei separaten Bänken stattfinden. Die DCU 637 sorgt für eine 2- Zyklus-Zugriffszeit auf die Lade- und Speicheroperationen, die in dem Cache-Speicher einen Treffer erzielen. Darüberhinaus ist der DCU ein nicht-blockierender Cache, was bedeutet, daß er eingehende Zugriffsoperationen verarbeiten kann, während er unter Verwendung des externen Busses 611 (über die externe Busschnittstelle 640) Cache-Speicher-Fehlversuche weiterverarbeitet. Die Daten-Cache-Speichereinheit 637 enthält vier Füllpuffer, die jeweils 256-Bits groß sind und die zum Speichern ausstehender Cache-Speicherzugriffe verwendet werden. Die DCU 637 blockiert Cache-Speicher-Fehlzugriffe nur, wenn alle Füllpuffer belegt sind. Die DCU 637 verwendet ein Modifiziert/Exklusiv/Geteilt/Ungültig(MESI)-Protokoll zur Unterstützung der Cache-Speicher-Kohärenz für Mehrprozessor-Computersysteme.

Das Speichersubsystem des Prozessors P&sub0; weist außerdem einen Datenübersetzungs-Nachschlage-Puffer (DTLB) 628 auf, der für Speicherzugriffe lineare Adressen in physikalische Adressen übersetzt. Der DTLB 628 führt eine Nachschlageoperation in einer Cache-Speichermatrix aus, die die Abbildung vom linearen zum physikalischen Adreßraum enthält. Der DTLB 628 speichert außerdem Cache-Speicherbereichsinformationen mit jeder physikalischen Adresse und kann zwei Adreßübersetzungen in jedem Taktzyklus ausführen.

Bei dem ausgewählten Ausführungsbeispiel enthält der DTLB 628 eine kleine Seitenmatrix und eine große Seitenmatrix. Die kleine Matrix enthält Matrixadreßinformationen für 4-KB-Seitengrößen und 64 Einträge. Die große Seitenmatrix enthält Adreßinformationen für 2-MB- und 4-MB-Seitengrößen und enthält 8 Einträge. Beide Matrizen sind 4-Wege-satzassoziative Cache- Speicher. Der DTLB 628 überprüft die Speicherzugriffe auch auf Schutzberechtigungen, Ausnahmen, Traps, Datenunterbrechungspunkte usw. Wenn der Übersetzungspuffer eine Ausnahme irgendeiner Art erfaßt, gibt er Fehlerinformationen an den Umordnungspuffer des Abfertigungskerns zurück und weist den Rest des Subsystems an, den Zugriff abzubrechen.

Das Speichersubsystem der Fig. 6 enthält außerdem einen Speicherordnungspuffer (MOB-memory order buffer), der das Abfertigen in dem Speichersubsystem steuert. In Fig. 6 ist der Speicherordnungspuffer als einen Ladeoperationspuffer 630 und einen Speicheroperationspuffer 631 enthaltend dargestellt. Diese Puffer handhaben alle Lade- und Speicheroperationen und verfolgen die Verarbeitung dieser Operationen beim Durchlauf durch den Prozessor. Wenn eine Operation abgefertigt ist und aufgrund eines Adreß- oder Ressourcenkonfliktes nicht beendet werden kann, blockiert der MOB die Operation und speichert die Abhängigkeitsinformationen. Der Ladeoperationspuffer 630 enthält 16 Einträge, während der Speicheroperationspuffer 631 12 Einträge enthält. Die Einträge dies Ladeoperationspuffers 630 und des Speicheroperationspuffers 631 werden als Mikrobefehle zugewiesen und werden in den ROB des Außer-der-Reihe-Abfertigungskerns 621 ausgegeben.

Der Speicherordnungspuffer dient als eine Art Reservierungsstation zweiter Ordnung. Der MOB fertigt blockierte Operationen erneut ab, wenn die Blockierungsquelle entfernt ist. Einige Speicheroperationen können nicht spekulativ ausgeführt werden, so daß der MOB den Ausscheidungsprozeß überwacht und nicht-spekulative Operationen zur richtigen Zeit abfertigt. Der Speicherordnungspuffer fertigt außerdem Speicherschreiboperationen (d. h. Speicheroperationen) zum Daten-Cache-Speicher 637 ab.

Zur Veranschaulichung zeigt Fig. 6, wie der Kern 671 eine Speicheroperation abfertigt, die in zwei Mikrobefehle decodiert wird: einen Adreßspeicher-Mikrobefehl (STA) und eine Datenspeicheroperation (STD), dargestellt durch die Blöcke 624 bzw. 625. Vom Kern 621 abgefertigte Lade-Mikrobefehle sind in Fig. 6 durch den Block 623 dargestellt.

Alle von der Reservierungsstation abgefertigten Mikrobefehle werden von dem Ladeoperations- und vom Speicheroperationspuffer verfolgt. Die Speichere-Daten-Mikrobefehle werden beispielsweise direkt in den Speicherpuffer 631 eingegeben, während die Speichere-Adresse- und Lade-Daten-Mikrobefehle von der DTLB 628 in ihre physikalischen Adresse übersetzt werden. Physikalische Adressen für die Lade-Daten- und Speichere- Adresse-Mikrobefehle sind in Fig. 6 durch die Blöcke 634 bzw. 635 dargestellt. Speichere-Adresse-Mikrobefehle werden in den Speicheroperationspuffer 631 eingegeben, während Lade-Daten- Mikrobefehle an den Ladeoperationspuffern und die Daten-Cache- Speichereinheit 637 gesendet werden.

Die Daten-Cache-Speichereinheit 637 liefert, wie bereits oben beschrieben, die zugehörigen physikalischen Daten dem Abfertigungskern 621 zurück oder gibt einen Speicherzugriff zum Hauptspeicher über die externe Busschnittstelle 640 und den Systembus 611 aus. Wenn sowohl der Speichere-Adresse- als auch der Speichere-Daten-Mikrobefehl zugeteilt und nicht länger spekulativ sind, kombiniert der Speicherordnungspuffer des Speichersubsystems diese und teilt diese als Speicheroperation der DCU 637, wie durch den Block 641 gezeigt. In manchen Fällen werden Speicheroperationen auch nach dem Ausscheiden zwischengespeichert, wenn sie keine Abhängigkeit mit anderen Operationen erzeugen.

Wichtig ist, daß Speicheroperationen nicht spekulativ oder ungeordnet ausgeführt werden können, da es keine Möglichkeit gibt, eine Schreiboperation, die nicht ausgeführt werden sollte, rückgängig zu machen. Das Speichern von Adressen und die Berechnung von Speicherdaten kann jedoch spekulativ und ungeordnet ausgeführt werden, um die Prozessorleistung zu erhöhen.

Wie oben ausgeführt, werden Speicheroperationen in zwei Mikrobefehle aufgeteilt: Einen Speichere-Adresse (STA)-Mikrobefehl und einen Speichere-Daten (STD)-Mikrobefehl. Der STA-Mikrobefehl ist durch den Block 624 dargestellt und ist eine Adreßberechnung und -übersetzung. Der STD-Mikrobefehl ist durch den Block 625 dargestellt und enthält eine Datenkonvertierungsoperation. Diese beiden Operationen schreiben ihre Daten in den Speicheroperationspuffer 631, der physikalisch in drei Einheiten aufgeteilt ist. Der Speicherordnungspuffer enthält lineare Adreß-, Status- und Mikrobefehlsinformationen. Die DCU 637 enthält die derzeitigen physikalischen Adressen.

Bei einem Ausführungsbeispiel enthält der Speicheroperationspuffer 631 12 Einträge und speichert bis zu 12 Speicheroperationen. Der Speicherpuffer 631 wird verwendet, um alle Speicheroperationen in die Warteschlange einzureihen, bevor sie zum Speicher abgefertigt werden. Der Puffer 631 überprüft außerdem alle Ladeoperationen auf Speicheradreßkonflikte. Diese Überprüfung sorgt dafür, daß die Ladeoperationen konsistent mit den vorher ausgeführten Speicheroperationen sind, die noch in dem Speicheroperationspuffer bleiben.

Der Ladeoperationspuffer 630 enthält 16 Puffereinträge und speichert bis zu 16 Ladeoperationen. Der Ladepuffer wird verwendet, um Ladeoperationen in die Warteschlange einzureihen. Alle Ladeoperationen laufen in den Ladeoperationspuffer und können auf diese Weise überwacht werden (snooped); von dort werden sie erneut abgefertigt. Die Warteschlangenoperationen werden dann erneut vom Ladeoperationspuffer 630 abgefertigt, wenn der Konflikt beseitigt wurde. Die Prozessorordnung wird für Ladeoperationen aufrechtgehalten, indem externe Schreiboperationen auf beendete Ladeoperationen überwacht werden (snooped). Gemäß der Erfindung veranlaßt eine Schreiboperation eines Teilnehmers zu einer spekulativen Lese-Speicherstelle, die Außer-der-Reihe-Maschine zum Löschen und Neustarten der Ladeoperation. Dieser Aspekt der Erfindung wird im folgenden detaillierter beschrieben.

In dem Speichersubsystem werden Ressourcen zugewiesen, wenn eine Speicher- oder Ladeoperation in die Reservierungsstation eingegeben wird. Die Puffer 630 und 631 empfangen die spekulativen Lade- und Speichere-Adresse-Operationen von der Reservierungsstation in dem Abfertigungskern 621. Eine Ladeoperation wird in zwei Mikrobefehle decodiert, während eine Speicheroperation in Speichere-Daten und Speichere-Adresse-Mikrobefehle decodiert wird. Zu der Zuweisungszeit wird die Operation mit ihrem möglichen Platz in dem Puffer 630 oder 631 gekennzeichnet (tagged). Die Reservierungsstation liefert den Befehlscode, während die Adreßerzeugungseinheit des Prozessors die lineare Adresse für einen Zugriff berechnet und zur Verfügung stellt. Diese Operationen werden entweder unmittelbar ausgeführt, oder sie werden in den Speicherordnungspuffer zur späteren Abfertigung geschrieben. In dem Fall einer Ladeoperation wird es von der Daten-Cache-Speichereinheit 637 erwartet, die Daten zum Kern 621 zurückzugeben. Parallel werden Adreß- und Statusbits in den Ladeoperationspuffer geschrieben, um die Beendigung der Operation zu signalisieren.

Bei dem erfindungsgemäßen Computersystem wird eine strenge Ordnung von dem Prozessor P&sub0; emuliert, selbst wenn es eine inhärent schwach-geordnete Maschine ist. Das heißt, P&sub0; ist ein Prozessor, der in der Lage ist, Instruktionen außer der Reihe auszuführen; P&sub0; ermöglicht es, Ladeoperationen an Ladeoperationen vorbeizulassen, trotzdem repräsentiert er das Architekturmodell der strengen Ordnung (d. h. kein Durchlassen) durch das spekulative Prozessorordnen. Alle beendeten und nicht ausgeschiedenen Ladeoperationen überwachen (snoop) den externen Bus 11 nach externen Speicheroperationen (d. h. Schreiboperationen) Wenn eine externe Schreiboperationsadresse mit einer nicht ausgeschiedenen Ladeoperationsadresse übereinstimmt, dann wird mit einem Flag ein Prozessorordnungsfehler angezeigt. Anstatt die mit einem Flag gekennzeichnete Ladeoperation auszuscheiden, wie es normalerweise üblich wäre, wird die Ladeoperation zusammen mit allen nachfolgenden Mikrobefehlen abgebrochen. Der Prozessor startet dann das Neu-Ausgeben der Mikrobefehle, wobei er mit der abgebrochenen Ladeoperation beginnt.

Bei dem derzeitigen Ausführungsbeispiel der Erfindung ist diese Schrittsequenz als RONuke-Operation (re-order nuke) bekannt. Bei einer RONuke-Operation wird die Ladeoperation abgebrochen; die spekulative Verarbeitung des Computersystems wird abgebrochen, und der Prozessor beginnt erneut mit der Ausführung bei der abgebrochenen Ladeoperation.

Eine andere Betrachtungsweise des Problems, das zwischen Prozessoren eines Mehrprozessorsystems auftreten kann, ist die folgende: Wenn Ladeoperationen außer-der-Reihe ausgeführt werden, können sie die Speicheroperationen von einem anderen Prozessor tatsächlich ungeordnet erscheinen lassen. Dies ergibt sich, wenn eine spätere Lade-Operation eine frühere Ladeoperation durchläßt, die noch nicht ausgeführt wurde. Die spätere Ladeoperation liest alte Daten, während die frühere Ladeoperation, wenn sie ausgeführt ist, die Möglichkeit hat, neue, von einem anderen Prozessor geschriebene Daten zu lesen. Diese Ladeoperationen würden die Prozessorordnungsregeln verletzen, wenn es ihnen erlaubt wäre, den Architekturzustand festzulegen. Um dies zu verhindern, überwacht (snoops) der Ladeoperationspuffer 630 alle Daten-Schreiboperationen auf dem externen Bus 611. Das ist in Fig. 6 durch die Snoop-Leitung veranschaulicht, die den Ladeoperationspuffer 630 über die Busschnittstelleneinheit 640 mit dem externen Bus 611 koppelt. Wenn irgendein Prozessor zu einer Stelle schreibt, die spekulativ gelesen werden, werden die Ladeoperation und nachfolgende Operationen gelöscht und zur Gewinnung der richtigen Daten erneut ausgeführt.

Es sei angenommen, daß der Prozessor #1 ein strenges Speicherordnungsmodell aufweist, d. h. annimmt, daß Speicheroperationen in der ursprünglichen Programmreihenfolge auftreten. Es sei ferner angenommen, daß der Prozessor #2 ein außer der Reihe verarbeitender Prozessor ist, z. B. Prozessor P&sub0;. Wenn der Prozessor #2 bereit ist, die erste Ladeoperation zur Speicherstelle 5 auszuführen, wird der externe Bus 611 vom Ladepuffer 630 überwacht, um festzustellen, ob die Gefahr besteht, die strenge Ordnung zu verletzen. Wenn die Ladeoperation zur Speicherstelle 5 zur Ausführung ansteht und eine Speicheroperation auf dem externen Bus 611 zur Speicherstelle 5 vorliegt, läuft der Prozessor #2 Gefahr, die strenge Ordnung zu verletzen. Gemäß der Erfindung unternimmt der Prozessor #2 eine berichtigende Aktion, um das natürlich schwache Ordnungsmodell zu vermeiden, das normalerweise herauskommen würde. Der Prozessor #2 erledigt dies, indem er zunächst die spekulativen Zustände der Maschine beseitigt und dann beginnend mit der abgebrochenen Ladeoperation erneut ausführt.

Es sei daran erinnert, daß der Ladeoperationspuffer 630 in dem Speichersubsystem alle ausstehenden Ladeoperationen für den Prozessor zu jeder gegebenen Zeit verfolgt. Wenn eine Ladeoperation auftritt - oder in Zukunft auftreten wird - liegt die Adresse in dem Ladeoperationspuffer 630 vor. Der Prozessor P&sub0; überwacht den Bus 11 hinsichtlich Speicheroperationen von anderen Teilnehmern, indem er diese Adressen überwacht (snoops). Wenn eine Adresse mit einer im Ladeoperationspuffer 630 zur Ausführung anstehenden Adresse übereinstimmt, dann besteht die mögliche Gefahr für das Verletzen der strengen Ordnung. Der Ladepuffer 630 überwacht den externen Bus 611 und sucht nach Speicheroperationen auf dem Bus, die mit der in dem Puffer 630 vorliegenden Adresse übereinstimmen. Wenn der gekennzeichnete (tagged) (Snoop-Treffer) Ladeoperationseintrag des Ladeoperationspuffers ggf. versucht ausgeschieden zu werden, wird der Maschinenzustand zunächst zerstört. Der Prozessor gibt dann beginnend mit der abgebrochenen Ladeoperation die Instruktionen erneut aus.

In Fig. 7 ist ein Blockschaltbild gezeigt, in dem ein erfindungsgemäßer Prozessor 700 dargestellt ist. Der Prozessor 700 weist eine Ausführungseinheit 701, eine Bus-Steuereinrichtung 702, eine Daten-Cache-Speicher-Steuereinrichtung 703, einen Daten-Cache-Speicher 704 und eine Instruktionsheranhol- und -ausgabeeinheit 705 mit einem integrierten Instruktions- Cache-Speicher 706 auf. Die Elemente 701 bis 706 sind in der dargestellten Weise miteinander gekoppelt. Sie kooperieren miteinander, um in einer Pipeline Instruktionen heranzuholen, auszugeben und auszuführen und Ergebnisse zu sichern.

Die Instruktionsheranhol- und -ausgabeeinheit 705 holt die Instruktionen von einem externen Speicher über die Bus-Steuereinrichtung 702 und einen externen Systembus heran. Die Bus- Steuereinrichtung 702 koordiniert die Datenübertragung zwischen den externen Komponenten und dem Prozessor 700. Außerdem koordiniert die Bus-Steuereinrichtung 702 Cache-Speicher-Kohärenzübertragungen. Die Instruktions-Heranhol- und -ausgabeeinheit 705 gibt diese Instruktionen dann in einer geordneten Sequenz an die Ausführungseinheit 701 aus. Im wesentlichen führt die Ausführungseinheit 701 solche Funktionen wie Addieren, Subtrahieren, logische UND-Operationen und Integer-Multiplikationen aus. Einige dieser Instruktionen werden spekulativ herangeholt und abgefertigt. Die Ausführungseinheit 701 hält diese Integer- und Gleitkomma-Instruktionen und führt diese aus, wenn ihre Operandenabhängigkeiten von Ausführungsergebnissen von vorangegangenen Instruktionen gelöst sind. In ähnlicher Weise hält die Ausführungseinheit 701 Lade- und Speicherinstruktionen und sendet sie an den Speicherordnungspuffer 708.

Die Ausscheidelogik 707 schreibt die Zustände dieser Instruktionen in demjenigen permanenten Architekturstand fest, der von dem ursprünglichen Quellcode bestimmt war. In dem Speicherordnungspuffer 708 werden Lade- und Speicheroperationen auf Speicherordnungseffekte überprüft. Speicher- und/oder Ladeoperationen werden, ggf. aufgeschoben, bis Ordnungsinkonsistenten gelöst sind.

Der Speicherordnungspuffer 708 weist einen Speicheroperationspuffer 709 und einen Ladeoperationspuffer 710 auf. Der Speicheroperationspuffer 709 hat eine First-in-First-out(FIFO)- Struktur zum Speichern von Adreß-, Größen-, Daten- und anderen Schlüsselattributen. Der obere Zeiger der Struktur zeigt auf die als letztes ausgeschiedene Speicheroperation. Die unterste Speicheroperation des Speicheroperationspuffers 709 (d. h. die am längsten ausgeschiedene Speicheroperation) ist diejenige, die zum Schreiben in ein Speichersubsystem, beispielsweise den Daten-Cache-Speicher 704, bereit ist. Der Speicheroperationspuffer 708 ist nur für den Prozessorkern (z. B. Ausführungseinheit 701 und Instruktionsheranhol- und -ausgabeeinheit 705) sichtbar. Externe Überwachungsoperationen (snoops) erkennen das Vorhandensein der Speicheroperation nicht.

Der Ladeoperationspuffer 710 ist ein Arbeitspuffer, der von dem Speichersubsystem verwendet wird, um die Zugriffsordnung von Speicherladeoperationen durchzuführen. Jede Ladeoperation wird mit dem Speicheroperation-Puffer-ID (SBID) von der vorangegangenen Speicheroperation gekennzeichnet. Dieser SBID stellt die relative Stelle der Ladeoperation im Vergleich zu allen Speicheroperationen in der Ausführungssequenz dar. Wenn die Ladeoperation im Speicher ausgeführt wird, wird ihre SBID als Anfangspunkt zur Abgrenzung der Ladeoperation gegen alle älteren Ladeoperationen in dem Puffer verwendet.

Wenn die Ladeoperationen ungeordnet ausgeführt werden, könnten diese Ladeoperationen dazu führen, daß die Ladeoperationen von anderen Prozessoren ungeordnet erscheinen. Diese Situation könnte auftreten, wenn eine jüngere Ladeoperation eine noch nicht ausgeführte, ältere Ladeoperation durchlassen würde (z. B. Leseoperation R&sub2; wird vor einer früheren Leseoperation R&sub1; ausgeführt). Diese jüngere Ladeoperation liest alte Daten, während die ältere Ladeoperation neue, von einem anderen Prozessor geschriebene Daten lesen könnte. Diese Ladeoperationen würden die Prozessorordnung verletzen, wenn ihr Zustand festgeschrieben werden könnte. Die Erfindung verhindert diese Verletzung, indem sie den Ladeoperationspuffer 709 verwendet, um alle Daten-Schreiboperationen von anderen Teilnehmern am Bus 712 zu überwachen (snoop). Der Begriff snooping bezieht sich auf die Tätigkeit des Überwachens des Daten- und Adreßverkehrs in Hinsicht auf bestimmte Werte. Wenn ein anderer Prozessor zu einer Stelle schreibt, die spekulativ gelesen wurde, werden die Ladeoperation und nachfolgende Operationen gelöscht und erneut ausgeführt, um die richtigen Daten abzurufen (z. B. die Prozessorordnung wiederherzustellen).

Die Daten-Cache-Speicher-Steuereinrichtung 703 steuert den Datenzugriff auf den Daten-Cache-Speicher 704. Der Daten-Cache- Speicher 704 ist ein schneller, kleiner, in der Hardware enthaltener Arbeitspufferspeicher, der von Lade- und Speicheroperationen in weniger Taktzyklen erreicht werden kann als der Hauptspeicher. Die Daten-Cache-Speicher-Steuereinrichtung 703 und der Daten-Cache-Speicher 704 antworten unmittelbar auf die Ladeinstruktionen, indem sie, gegebenenfalls Daten senden. Dagegen werden Speicherinstruktionen zwischengespeichert. Anders gesagt, werden Instruktionen nicht notwendigerweise in der Ordnung ausgeführt/gesendet, in der sie ausgegeben wurden. Außerdem werden einige Instruktionen spekulativ ausgeführt/gesendet. Auf jeden Fall werden die Ausführungsergebnisse der Integer-, Gleitkomma-, und Ladeinstruktionen zwischengespeichert und dann ausgeschieden oder geordnet festgeschrieben. Im Vergleich dazu werden die zwischengespeicherten Speicherinstruktionen ausgeschieden oder geordnet festgeschrieben und danach im "Hintergrund" abgefertigt, wie es dem Speichersystem paßt. Spekulative Integer-, Gleitkomma- und Lade-Ausführungsergebnisse und zwischengespeicherte Speicheroperationen von falsch vorhergesagten Verzweigungen werden gelöscht.

Die Instruktionsheranhol- und -ausführungseinheit 705 steht stellvertretend für eine breite Kategorie von Intruktions- Heranhol- und Ausgabeelementen, die in vielen Computersystemen zu finden sind. Deren Aufbau und Funktionen sind bekannt. Bei dem bevorzugten Ausführungsbeispiel enthält die Instruktions- Heranhol- und Ausgabeeinheit 705 einen Instruktions-Cache- Speicher 706. Der Instruktions-Cache-Speicher 706 ist ein schneller lokaler Speicher, der die auszuführenden Instruktionen hält. Wenn ein Programm versucht, auf eine Instruktion zuzugreifen, die nicht mehr oder nicht länger in dem Cache- Speicher ist, wartet der Prozessor solange, bis die Hardware die gewünschten Instruktionen von einem anderen Cache-Speicher oder einem untergeordneten Speicher heranholt. Es ist die Aufgabe der Instruktions-Heranhol- und -Ausgabeeinheit 705, zu entscheiden, auf welchen Instruktions-Cache-Speichereintrag zum Erreichen einer maximalen Programmleistung als nächstes zugegriffen werden soll. Bei dem bevorzugten Ausführungsbeispiel ist der Instruktions-Cache-Speicher 706 und der Daten-Cache- Speicher 704 in einer Speicherhierarchie angeordnet.

Fig. 8 zeigt den Prozessor 822. Der Prozessor 822 weist einen Front-End-Bereich auf, der eine Busschnittstellenschaltung 830 und eine Instruktions-Heranhol- und Mikrobefehlsausgabeschaltung 832 enthält. Der Prozessor 822 weist außerdem einen Registerumbenennungsbereich mit einer Register-Alias-Schaltung 834 und einer Zuweiserschaltung 836 auf. Der Prozessor 822 weist außerdem einen Bereich zur Außer-der-Reihe-Ausführung auf, der eine Reservierungs- und Abfertigungsschaltung 838, eine Ausführungsschaltung 840, eine Umordnungsschaltung 842 und eine Real-Register-Schaltung 844 aufweist.

Die Busschnittstellenschaltung 830 gibt die Übertragung von Adreß-, Daten- und Steuerinformationen über den Mehrprozessorbus 828 frei. Die Instruktionsheranhol- und Mikrobefehlsausgabeschaltung 832 holt einen Strom von Makroinstruktionen von dem Speichersubsystem 826 über den Mehrprozessorbus 828 und die Busschnittstellenschaltung 830. Die Instruktionsheranhol- und Mikrobefehlsausgabeschaltung 832 implementiert die spekulative Verzweigungsvorhersage zur Maximierung des Heranhol-Durchsatzes der Makroinstruktionen.

Bei einem Ausführungsbeispiel ist der über den Mehrprozessorbus 828 abgerufene Strom von Makroinstruktionen ein Strom von Makroinstruktionen für einen Mikroprozessor der INTEL- Architektur. Die Makroinstruktionen für Mikroprozessoren mit der INTEL-Architektur laufen auf einem Satz von Architekturregistern, einschließlich einem EAX-Register, einem EBX-Register, einem ECX-Register und einem EDX-Register usw.

Die Instruktionsheranhol- und Mikrobefehlsausgabeschaltung 832 konvertiert die Makroinstruktionen des eingehenden Stroms von Makroinstruktionen in einen geordneten Strom von Mikrobefehlen, im folgenden als logische Mikrobefehle bezeichnet. Die Instruktionsheranhol- und Mikrobefehlsausgabeschaltung 832 erzeugt einen oder mehrere logische Mikrobefehle für jede eingehende Makroinstruktion. Die zu jeder Makroinstruktion gehörenden logischen Mikrobefehle sind Mikrobefehle eines reduzierten Instruktionssatzes, die die Funktion der zugehörigen Makroinstruktion ausführen. Der logische Mikrobefehl spezifiziert arithmetische und logische Operationen genauso wie Lade- und Speicheroperationen zu dem Speichersubsystem 826.

Die Instruktionsheranhol- und Mikrobefehlsausgabeschaltung 832 überträgt den eingehenden Strom von logischen Mikrobefehlen zu der Register-Alias-Schaltung 834 und zu der Zuweiserschaltung 836 über einen Bus 850 für logische Mikrobefehle. Bei einem Ausführungsbeispiel gibt die Instruktionsheranhol- und Mikrobefehlsausgabeschaltung 832 bis zu vier geordnete logische Mikrobefehle während jedes Taktzyklusses des Prozessors 822 aus. Alternativ können die geordneten logischen Mikrobefehle auf vier während jedes Taktzyklusses beschränkt werden, um den Platzbedarf der integrierten Schaltung für den Prozessor 822 zu minimieren.

Die Instruktionsheranhol- und Mikrobefehlsausgabeschaltung 832 enthält einen Mikroinstruktionssequenzer und einen zugehörigen Steuerspeicher. Der Mikroinstruktionssequenzer implementiert Mikroprogramme, um verschiedene Funktionen für den Prozessor 822 auszuführen, einschließlich Fehlerbeseitigungsfunktionen und Prozessorordnungsfunktionen.

Jeder von der Instruktionsheranhol- und Mikrobefehlsausgabeschaltung 832 erzeugte logische Mikrobefehl weist einen Befehlscode, ein Paar von logischen Quellen und ein logisches Ziel auf. Jede logische Quelle kann ein Register spezifizieren oder einen Direktdatenwert zur Verfügung stellen. Die logischen Register-Quellen und die logischen Ziele der logischen Mikrobefehle spezifizieren Architekturregister der ursprünglichen Makroinstruktionen. Außerdem spezifizieren die logischen Register-Quellen und die logischen Ziele der logischen Mikrobefehle temporäre Register für von dem Mikroinstruktionssequenzer der Instruktionsheranhol- und Mikrobefehlsausgabeschaltung 832 implementierten Mikrobefehlscode.

Die Register-Alias-Schaltung 834 empfängt die geordneten logischen Mikrobefehle über den logischen Mikrobefehlsbus 850 und erzeugt einen zugehörigen Satz von geordneten physikalischen Mikrobefehlen, indem sie die logischen Quellen und die logischen Ziele der logischen Mikrobefehle umbenennt. Die Register-Alias-Schaltung 834 empfängt die geordneten logischen Mikrobefehle über den logischen Mikrobefehlsbus 850, bildet die logischen Quelladressen und die logischen Zieladressen jedes logischen Mikrobefehls in physikalische Quelladressen und eine physikalische Zieladresse ab und überträgt die geordneten physikalischen Mikrobefehle über einen physikalischen Mikrobefehlsbus 852.

Jeder physikalische Mikrobefehl weist den Befehlscode des zugehörigen logischen Mikrobefehls auf, ein Paar von physikalischen Quelladressen und eine physikalische Zieladresse. Jede physikalische Quelladresse kann ein physikalisches Register spezifizieren oder einen Direktdatenwert zur Verfügung stellen. Die physikalischen Register-Quelladressen des physikalischen Mikrobefehls spezifizieren die in der Umordnungsschaltung 842 enthaltenen physikalischen Register und die in der Real-Register-Schaltung 844 enthaltenen Register für einen festgeschriebenem Zustand (committed state registers). Die physikalischen Zieladressen der physikalischen Mikrobefehle spezifizieren die in der Umordnungsschaltung 842 enthaltenen physikalischen Register.

Die Register-Alias-Schaltung 834 überträgt die logischen Zieladressen der logischen Mikrobefehle über einen Bus 854 für logische Zieladressen. Die über den Bus 854 für logische Zieladressen übertragenen logischen Zieladressen identifizieren die Architekturregister, die den physikalischen Zieladressen auf dem Bus 852 für physikalische Mikrobefehle entsprechen.

Die Zuweiserschaltung 836 verfolgt die verfügbaren Ressourcen in der Umordnungsschaltung 842 der Reservierungsstation und Abfertigungsschaltung 838 und der Ausführungsschaltung 840. Die Zuweiserschaltung 836 weist den physikalischen Mikrobefehlen auf dem Bus 852 für physikalische Mikrobefehle physikalische Zieladressen in der Umordnungsschaltung 842 und Reservierungsstationseinträge in der Reservierungsstations- und Abfertigungsschaltung 838 zu. Die Zuweiserschaltung 836 weist außerdem den physikalischen Mikrobefehlen auf dem Bus 852 für physikalische Mikrobefehle, die einen eine Lade-Speicher-Operation spezifizierenden Befehlscode aufweisen, Ladeoperationspuffer- Einträge in einem Speicherordnungspuffer in der Ausführungsschaltung 840 zu.

Die Zuweiserschaltung 836 überträgt die zugewiesenen physikalischen Zieladressen über einen Bus 856 für physikalische Zieladressen an die Register-Alias-Schaltung 834. Die zugewiesenen physikalischen Zieladressen spezifizieren physikalische Register in der Umordnungsschaltung 842 zum Zwischenpuffern spekulativer Ergebnisse für die physikalischen Mikrobefehle. Die zugeordneten physikalischen Zieladressen werden von der Register-Alias-Schaltung 834 zur Umbenennung der logischen Zieladressen der logischen Mikrobefehle in physikalische Zieladressen verwendete.

Die Zuweiserschaltung 836 weist die physikalischen Register der Umordnungsschaltung 842 den physikalischen Mikrobefehlen in der gleichen Reihenfolge zu, in der die logischen Mikrobefehle über den Bus 850 für logische Mikrobefehle empfangen wurden. Die Zuweiserschaltung 836 verwaltet einen Zuweisungszeiger für das Zuweisen der physikalischen Register der Umordnungsschaltung 842. Der Zuweisungszeiger zeigt für jeden Satz von über den Bus 850 für logische Mikrobefehle empfangenen logischen Mikrobefehlen auf einen nächsten Satz von aufeinanderfolgenden physikalischen Registern in der Umordnungsschaltung 842. Die Ordnung der den physikalischen Mikrobefehlen in der Umordnungsschaltung 842 zugewiesenen physikalischen Register spiegelt die Ordnung der ursprünglichen Mikrobefehle wieder.

Die Zuweiserschaltung 836 spezifiziert die Reservierungsstationseinträge für die physikalischen Mikrobefehle auf dem Bus 852 für physikalische Mikrobefehle, indem sie Reservierungsstationseintrags-Auswahlsignale über einen Reservierungsstations-Auswahlbus 866 zu der Reservierungsstations- und Abfertigungsschaltung 838 überträgt.

Die Zuweiserschaltung 836 weist allen physikalischen Mikrobefehlen auf dem Bus 852 für physikalische Mikrobefehle, die einen Lade-Speicher-Befehlscode spezifizieren, Ladeoperationspuffer-Einträge zu. Die Zuweiserschaltung 836 weist die Ladepuffereinträge zu, indem sie über einen Ladeoperationspuffer-ID-Bus 872 Ladeoperationspufferbezeichner zu der Reservierungs- und Abfertigungsschaltung 838 überträgt.

Die Reservierungs- und Abfertigungsschaltung 838 hält die physikalischen Mikrobefehle, die auf die Ausführung durch die Ausführungsschaltung 840 warten. Die Reservierungs- und Abfertigungsschaltung 838 empfängt die geordneten physikalischen Mikrobefehle über den Bus 852 für physikalische Mikrobefehle, assembliert die Quelldaten für die physikalischen Mikrobefehle und fertigt die physikalischen Mikrobefehle zur Ausführungsschaltung 840 ab.

Die Reservierungs- und Abfertigungsschaltung 838 empfängt die physikalischen Mikrobefehle über den Bus 850 für physikalische Mikrobefehle und speichert die physikalischen Mikrobefehle in verfügbare Reservierungsstationseinträgen. Die Reservierungs- und Abfertigungsschaltung 838 assembliert die Quelldaten für die physikalischen Mikrobefehle und fertigt die physikalischen Mikrobefehle zu geeigneten Ausführungseinheiten in der Ausführungsschaltung 840 ab, wenn die Quelldaten assembliert sind.

Die Reservierungs- und Abfertigungsschaltung 838 empfängt die Quelldaten für die anhängigen physikalischen Mikrobefehle über einen Quelldatenbus 858 von der Umordnungsschaltung 842 und der Real-Register-Schaltung 844. Die Reservierungs- und Abfertigungsschaltung 838 empfängt außerdem während des Rückschreibens von spekulativen Ergebnissen von der Ausführungsschaltung 840 zu der Umordnungsschaltung 842 über einen Ergebnisbus 862 Quelldaten für die anhängigen physikalischen Mikrobefehle von der Ausführungsschaltung 840.

Die Reservierungs- und Abfertigungsschaltung 838 plant die physikalischen Mikrobefehle zur Ausführung ein, die fertig assemblierte Quelldaten aufweisen. Die Reservierungs- und Abfertigungsschaltung 838 fertigt zur Ausführungsschaltung 840 über einen Mikrobefehls-Abfertigungsbus 860 die bereiten physikalischen Mikrobefehle ab. Die Reservierungs- und Abfertigungsschaltung 838 plant die Ausführung der physikalischen Mikrobefehle außer der Reihe entsprechend der Verfügbarkeit der Quelldaten für die physikalischen Mikrobefehle und entsprechend der Verfügbarkeit der Ausführungseinheitsressourcen in der Ausführungsschaltung 840 ein.

Die Ausführungsschaltung 840 schreibt die spekulativen Ergebnisse von der ungeordneten Ausführung der physikalischen Mikrobefehle über den Ergebnisbus 862 in die Umordnungsschaltung 842 zurück. Die Rückschreiboperationen der spekulativen Ergebnisse von der Ausführungsschaltung 840 sind aufgrund der ungeordneten Abfertigung von physikalischen Mikrobefehlen durch die Reservierungs- und Abfertigungsschaltung 838 und aufgrund der variierenden Anzahl der zur Ausführung der verschiedenen Arten der physikalischen Mikrobefehle benötigten Zyklen des Prozessors 822 ungeordnet.

Bei einem Ausführungsbeispiel weist die Ausführungsschaltung 840 einen Satz von fünf Ausführungseinheiten EU0-EU4 auf. Die Reservierungs- und Abfertigungsschaltung 838 fertigt zu den Ausführungseinheiten EU0-EU4 bis zu fünf physikalische Mikrobefehle über den Mikrobefehls-Abfertigungsbus 860 gleichzeitig ab.

Die Ausführungseinheit EU0 führt Funktionen der arithmetischen Logikeinheit (ALU) einschließlich Integer-Multiplikations- und -Divisionsoperation sowie Gleitkomma-Additions-Multiplikations- und -Divisions-Mikrobefehle aus. Die Ausführungseinheit EU1 führt ALU-Integer-Funktionen und Sprungoperationen aus. Die Ausführungseinheit EU2 führt Integer- und Gleitkomma-Ladeoperationen vom Speicher genauso wie Funktionen zum Laden linearer Adressen und Segment-Registeroperationen aus. Die Ausführungseinheit EU3 führt Integer- und Gleitkomma- Speicheroperationen und Segmentregisteroperationen aus. Die Ausführungseinheit EU4 führt Integer- und Gleitkomma- Datenspeicher-Operationen aus.

Die Umordnungsschaltung 842 enthält die physikalischen Register, die spekulative Ergebnisse für die physikalischen Mikrobefehle zwischenspeichern. Jedes physikalische Register in der Umordnungsschaltung 842 ist für Integer-Datenwerte und für Gleitkomma-Datenwerte geeignet.

Die Real-Register-Schaltung 844 enthält Register für festgeschriebene Zustände (committed state registers), die den Architekturregistern des ursprünglichen Stroms von Makroinstruktionen entsprechen. Jedes Register für festgeschriebene Zustände in der Real-Register-Schaltung 844 ist für Integer- Datenwerte und für Gleitkomma-Datenwerte geeignet.

Bei einem Ausführungsbeispiel weisen die Register der Real- Register-Schaltung 44 die EAX-, EBX-, ECX- und EDX-Register usw. eines Mikroprozessors mit INTEL-Architektur genauso wie die Flags eines Prozessors der INTEL-Architektur auf. Die Real- Register-Schaltung 844 enthält außerdem Register mit festgeschriebenem Zustand für die Mikrobefehlsregister, die von dem in der Instruktionsheranhol- und Mikrobefehlsausgabeschaltung 832 ausgeführten Mikrobefehlscode verwendet werden.

Die Umordnungsschaltung 842 und die Real-Register-Schaltung 844 empfangen die physikalischen Mikrobefehle über den Bus 852 für physikalische Mikrobefehle. Die physikalischen Quelladressen der physikalischen Mikrobefehle spezifizieren physikalische Register in der Umordnungsschaltung 842 und Register für festgeschriebene Zustände in der Real-Register-Datei 844, die die Daten für die physikalischen Mikrobefehle enthalten.

Die Umordnungsschaltung 842 und die Real-Register-Schaltung 844 lesen die von den physikalischen Quelladressen spezifizierten Daten und übertragen die Quelldaten zu der Reservierungs- und Abfertigungsschaltung 838 über einen Quelldatenbus 858. Jede physikalische Quelladresse des physikalischen Mikrobefehls enthält ein Real-Register-Datei-Gültig(RRFV)-Flag, das anzeigt, ob die Quelldaten in einem physikalischen Register in der Umordnungsschaltung 842 oder in einem Register mit festgeschriebenem Zustand in der Real-Register-Datei 844 enthalten sind.

Die physikalischen Zieladressen der physikalischen Mikrobefehle auf dem Bus 852 für physikalische Mikrobefehle spezifizieren die physikalischen Register in der Umordnungsschaltung 842, um die spekulativen Ergebnisse der ungeordneten Ausführung der physikalischen Mikrobefehle zwischenzuspeichern. Die Umordnungsschaltung 842 empfängt die physikalischen Zieladressen der physikalischen Mikrobefehle über den Bus 852 für physikalische Mikrobefehle und löscht die von den physikalischen Zieladressen spezifizierten physikalischen Register.

Die Umordnungsschaltung 842 empfängt die den physikalischen Mikrobefehlen entsprechenden logischen Zieladressen über den Bus 854 für logische Zieladressen und speichert die logischen Zieladressen in den von den physikalischen Zieladressen der physikalischen Mikrobefehle spezifizierten physikalischen Registern. Die logischen Zieladressen in den physikalischen Registern der Umordnungsschaltung 842 spezifizieren die Register mit festgeschriebenem Zustand in der Real-Register-Schaltung 844 zum Ausscheiden der physikalischen Mikrobefehle.

Eine Ausscheidelogikschaltung 846 weist die physikalischen Mikrobefehle, indem sie die in den physikalischen Registern der Umordnungsschaltung 842 gehaltenen spekulativen Ergebnisse in einen Architekturzustand in der gleichen Reihenfolge festlegt, in der die ursprünglichen logischen Mikrobefehle empfangen wurden. Die Ausscheidelogikschaltung 846 veranlaßt die Übertragung der spekulativen Ergebnisdaten in der Umordnungsschaltung 842 zu zugehörigen Registern mit festgeschriebenem Zustand in der Real-Register-Schaltung 844 über einen Ausscheidebus 864. Bei einem Ausführungsbeispiel scheidet die Ausscheidelogikschaltung 846 bis zu vier physikalische Registeroperationen während jedes Zyklusses des Prozessors 822 aus. Bei einem anderem Ausführungsbeispiel scheidet die Ausscheidelogikschaltung 846 bis zu drei physikalische Registeroperationen während jedes Zyklusses des Prozessors 822 aus, um den Platzbedarf der integrierten Schaltung zu minimieren.

Die Ausscheidelogikschaltung 846 veranlaßt außerdem die Umordnungsschaltung 842, die Makroinstruktions-Zeiger-Deltawerte für die ausscheidenden physikalischen Mikrobefehle über einen Makroinstruktions-Zeiger Offset-Bus 820 während des Ausscheidens zu übertragen.

Die Neustartschaltung 848 empfängt die Makroinstruktions- Zeiger-Deltawerte über den Makroinstruktions-Zeiger-Offset-Bus 820. Die Neustartschaltung 848 berechnet gemäß den Makroinstruktions-Zeiger-Deltawerten für die ausscheidenden ROB-Einträge einen festgeschriebenen (verbindlichen) Instruktionszeigerwert.

Die Ausscheidelogikschaltung 846 verwaltet einen Ausscheidezeiger zu den physikalischen Registern in der Umordnungsschaltung 842. Der Ausscheidezeiger zeigt auf auszuscheidende Sätze von aufeinanderfolgenden physikalischen Ausscheide-Register. Der Ausscheidezeiger folgt dem Zuweisungszeiger durch die physikalischen Register in der Umordnungsschaltung 842, wenn die Ausscheidelogik die spekulativen Ergebnisse der physikalischen Register in dem festgeschriebenen (verbindlichen) Zustand ausscheidet. Die Ausscheidelogikschaltung 846 scheidet die physikalischen Registeroperationen geordnet aus, da die physikalischen Register den physikalischen Mikrobefehlen zugewiesen wurden.

Die Ausscheidelogikschaltung 846 sendet die von dem Ausscheidezeiger spezifizierten physikalischen Ausscheideadressen über einen Ausscheidehinweisbus 870 aus. Der Speicherordnungspuffer in der Ausführungsschaltung 840 empfängt die physikalischen Ausscheidezieladressen und gibt einen Satz von Speicherordnungs-Neustartsignalen 876 aus. Die Speicherordnungs-Neustartsignale 876 zeigen an, ob eine einer der ausscheidenden physikalischen Zieladressen entsprechende Speicher-Ladeoperation eine mögliche Prozessorordnungsverletzung verursacht hat.

Die Speicherordnung-Neustartsignale 876 zeigen an, welche der ausscheidenden physikalischen Zieladressen die mögliche Prozessorordnungsverletzung verursacht hat.

Die Speicherordnungs-Neustartsignale 876 werden von der Neustartschaltung 848 empfangen. Wenn die Speicherordnungs- Neustartsignale 876 eine mögliche Prozessorordnungsverletzung anzeigen, gibt die Neustartschaltung 848 ein Umordnungslöschsignal 878 aus. Das Umordnungslöschsignal 878 veranlaßt die Umordnungsschaltung 842, die spekulativen Ergebnisdaten für die unausgeschiedenen physikalischen Mikrobefehle zu löschen. Das Umordnungslöschsignal 878 veranlaßt die Reservierungs- und Abfertigungsschaltung 838, die anhängigen physikalischen Mikrobefehle zu löschen, die die Abfertigung zu der Ausführungsschaltung 848 erwarten. Das Umordnungslöschsignal 878 veranlaßt außerdem die Zuweiserschaltung 836, den Zuweisungszeiger zum Zuweisen der physikalischen Register in der Umordnungsschaltung 842 zurückzusetzen und veranlaßt die Ausscheidelogikschaltung 846, den Ausscheidezeiger zum Ausscheiden der physikalischen Register zurückzusetzen.

Wenn die Speicherordnungs-Neustartsignale 876 eine mögliche Prozessorordnungsverletzung anzeigen, verwendet die Neustartschaltung 848 die über den Makroinstruktions-Zeiger-Offset-Bus 820 empfangenen Makroinstruktions-Zeiger-Deltawerte, um einen Neustartinstruktionszeigerwert zu berechnen. Der Neustartinstruktionszeigerwert spezifiziert die Makroinstruktion, die zu dem physikalischen Mikrobefehl gehört, der die mögliche Speicherordnungsverletzung erzeugt hat. Die Neustartschaltung 848 überträgt den Neustartinstruktionszeigerwert zu der Instruktionsheranhol-und Mikrobefehlsausgabeschaltung 832 über einen Neustart-Vektorbus 822.

Die Instruktionsheranhol- und Mikrobefehlsausgabeschaltung 842 empfängt den Instruktionszeigerwert über einen Neustart- Vektorbus 822. Das Umordnungslöschsignal 878 veranlaßt den Mikroinstruktionssequenzer der Instruktionsheranhol- und Mikrobefehlsausgabeschaltung 832, den geordneten Strom von logischen Mikrobefehlen, die von der Umordnungsschaltung 842 vor dem Ausscheiden gelöscht wurden, erneut auszugeben. Die Instruktionsheranhol- und Mikrobefehlsausgabeschaltung 832 gibt die logischen Mikrobefehle erneut aus, indem sie einen Makroinstruktionsstrom beginnend bei der Makroinstruktionsadresse heranholt, die vom dem Neustartinstruktionszeigerwert spezifiziert wird, und indem sie den Makroinstruktionsstrom in logische Mikrobefehle konvertiert und die logischen Mikrobefehle über den Bus für logische Mikrobefehle überträgt.

Wenn die Speicherordnungs-Neustartsignale 876 keine mögliche Prozessorordnungsverletzung anzeigen, dann geht das Ausscheiden der physikalischen Registeroperationen, die durch die ausscheidenden physikalischen Zieladressen spezifiziert sind, weiter. Die Umordnungsschaltung 842 überprüft die Gültig-Flags für die ausscheidenden physikalischen Zieladressen. Die Umordnungsschaltung 842 scheidet die spekulativen Ergebnisdaten für jede ausscheidende physikalische Registeroperation aus, wenn das Gültig-Flag der ausscheidenden physikalischen Registeroperation gültige spekulative Daten anzeigt. Die Umordnungsschaltung 842 scheidet eine physikalische Registeroperation aus, indem sie die Übertragung der spekulativen Ergebnisdaten zu Registern mit festgeschriebenen Zuständen in der Real-Register- Schaltung 844, die durch die logischen Zieladressen der physikalischen Register spezifiziert sind, veranlaßt.

Die Register-Alias-Schaltung 834 und die Zuweiserschaltung 836 empfangen die ausscheidenden physikalischen Zieladressen über einen Ausscheidehinweisbus 870. Die Register-Alias-Schaltung 834 aktualisiert die Register-Alias-Tabelle entsprechend, um das Ausscheiden widerzuspiegeln. Die Zuweiserschaltung 836 markiert die ausgeschiedenen physikalischen Register in der Umordnungsschaltung 842 als für eine Zuweisung verfügbar.

Fig. 9 zeigt das Computersystem 910 nach der Erfindung. Das Computersystem enthält einen Systembus 912, der mehrere verschiedene Busse, beispielsweise einen Hauptsystembus, einen Zwischen-Prozessor-Kommunikationsbus, einen lokalen Netzbus oder andere solche Busse, enthalten kann, von denen jeder eine Gruppe von Busleitungen für eine oder mehrere Funktionen, z. B. zur Daten-, Adreß- und Steuerinformationsübertragung aufordnet.

Aus Gründen der Übersichtlichkeit der Fig. 9, und um dem Leser das Verständnis der Erfindung zu erleichtern, sind alle diese Busse durch Bus 912 dargestellt, der im folgenden als externer Bus 912 bezeichnet wird. Zur Veranschaulichung wurde die Zeichnung weiter vereinfacht. Mit dem externen Bus sind verschiedene repräsentativ dargestellte Computersystemkomponenten gekoppelt, einschließlich einem Speichersubsystem (RAM), einem Festplattenlaufwerk (HD). Andere derartige Komponenten können auch mit dem externen Bus gekoppelt sein.

Mit dem externen Bus sind außerdem eine oder mehrere CPUs gekoppelt. Es können außerdem ein oder mehrere Steckplätze vorgesehen werden, um zusätzliche CPUs aufzunehmen. Solche zusätzlichen CPUs können zu dem System hinzugefügt werden, um seine Leistung zu erhöhen und können Erweiterungs- bzw. Upgrade-CPUs enthalten, die den vorher vorliegenden CPUs überlegen sind, oder sie können zusätzliche Mehrprozessor-CPUs enthalten, die mit den anderen vorhandenen CPUs zusammenarbeiten bzw. im Tandem-Betrieb laufen, oder sie können Verbesserung-CPUs, beispielsweise mathematische Coprozessoren oder Graphikbeschleuniger, enthalten, die in Ergänzung zu den anderen CPUs arbeiten. Ein solches Mehrprozessor(MP)-System kann homogen sein, indem es nur CPUs von einer einzigen Architektur (ISA) aufweist, oder es kann heterogen ausgebildet sein, indem es CPUs von verschiedenen Architekturen enthält. Bei einem Ausführungsbeispiel können die CPUs Mikroprozessoren mit INTEL- Architektur sein. In jedem Fall sind Steckplätze für eine zusätzliche oder mehrere zusätzliche CPU(s) mit ihrem(n) zugehörigem(n) L1-Cache-Speicher(n) und einem oder mehreren optionalen L2-Cache-Speichern vorgesehen.

Jede der CPUs kann die im folgenden in Bezug auf die CPU 914 beispielhaft beschriebenen Merkmale aufweisen und jeder der Steckplätze kann eine Busverbindung für solche Merkmale in der oder den zusätzlichen CPU(s) zur Verfügung stellen.

Die CPU 914 kann selbstverständlich über die dargestellten Merkmale hinaus weitere Merkmale aufweisen. Solche Merkmale wurden wieder aus Gründen der Übersichtlichkeit in Fig. 9 weggelassen. Beispielsweise sind übliche Zusatzeinrichtungen, wie Gleitkomma- und Integer-Ausführungseinheiten nicht dargestellt, und auch nicht die weniger bekannten Zusatzeinrichtungen, wie eine Außer-der-Reihe Maschine oder ein spekulativer Ausführungsmechanismus.

Zur Veranschaulichung kann die CPU 914 so beschrieben werden, als wenn sie eine externe Busanforderungswarteschlangeneinheit (EBRQ - external bus request queue) aufweist und um diese herum gebaut wurde. Die CPU 914 weist außerdem eine Warteschlange-zum-externen-Bus-Anforderungslogikeinheit (EBRL - external bus request logic) auf, die mit dem externen Bus und der EBRQ gekoppelt ist.

Die CPU 914 weist eine mit der EBRQ gekoppelte Anforderungspriorisierungs- und Bestätigungseinheit (RPA - request prioritization and acknowledgement) auf. Eine Instruktionsheranholeinheit (IFU - instruction fetch unit) ist mit der RPA gekoppelt. Außerdem ist eine Daten-Cache-Speichereinheit (DC) mit der RPA gekoppelt. Die CPU kann eine primäre Cache-Speichereinheit (L1) aufweisen, entweder einen gemeinsamen Cache- Speicher oder, wie in Fig. 9 gezeigt, einen Daten-L1-Cache- Speicher in der DCU und einem Instruktions-L1-Cache-Speicher in der IFU.

Die CPU 914 enthält außerdem eine mit der EBRQ gekoppelte Statusverfolgungs-Logikeinheit (STL status tracking logic). Die STL ist mit dem externen Bus und dem rückseitigen Bus entweder, wie dargestellt, direkt oder indirekt gekoppelt und liefert Informationen, die den Status der jeweiligen Busse anzeigen.

Solche Statusinformationen können beispielsweise anzeigen, ob der Bus belegt ist, Überwachungsoperationen ausführt, Paritätsfehler aufweist und andere solche Informationen, die zur Implementierung des erfindungsgemäßen Verfahrens hilfreich sind. Die STL kann außerdem verfolgen: den Status der von dem externen Bus zurückgegebenen Daten, den Status der zu dem L1-Cache- Speicher gesendeten Daten (Instruktions- und/oder Daten-L1), den Status der zu dem L2-Cache-Speicher gesendeten Daten, den Cache-Speicherzustand der Daten, beispielsweise den MESI-Status, den Snoop-Status der Anforderung, zu der Datenrückgabe an den L2-Cache-Speicher zugehörige Informationen, den Fehlerstatus, wie beispielsweise Adreßfehler, Datenfehler und/oder Antwortfehler vom externen Bus. Die STL kann auch den Status jeder Anforderung verfolgen, wobei die Statusinformationen beispielsweise enthalten: ob die Anforderung zur Bearbeitung durch den BBL/L2 (backside bus logic/level two cache) ansteht, ob die Anforderung derzeitig von dem BBL/L2 abgearbeitet wird, ob die Anforderung zur Bearbeitung auf dem externen Bus ansteht, ob die Anforderung derzeitig auf dem externen Bus bearbeitet wird, ob die Anforderung zur Rückgabe an die BBL/L2 ansteht, ob die Daten an den BBL/L2 zurückgegeben werden, und ob die Anforderung erledigt/beendet ist.

Eine Warteschlange- zum-Rückseitenbus-Anforderungslogikeinheit (BSBRL-backside bus request logic) ist mit dem EBRQ und einer Rückseitbuslogikeinheit (BBL) gekoppelt.

Die BBL koppelt die CPU 914 mit einem Cache-Speicher, beispielsweise einer sekundären Cache-Speichereinheit (L2). Der L2-Cache-Speicher kann in der CPU entweder als chipeigener Cache-Speicher oder in einem Mehrchip-Modul angeordnet sein, oder er kann als physikalisch separat gepackter Chip konzipiert sein. Bei einem Ausführungsbeispiel einer dieser Konfigurationen ist der L2-Cache-Speicher vorteilhafterweise mit der CPU 914 über einen rückseitigen Bus 916 gekoppelt. Dies verringert den Busverkehr auf dem externen Bus 912.

Es ist klar, daß ein hierarchisches Mehrebenen-Speichersystem mit einer breiten Vielfalt von Konfigurationen konstruiert werden kann. Bei manchen Konfigurationen kann es einen virtuellen Speicher enthalten, in dem ein Teil der Festplatte als weitere Cache-Speicherebene behandelt wird.

Bei dem System gemäß Fig. 9 können verschiedene Komponenten, wie die DCU, die IFU, die BBL/L2, die CPUs, die DMA und andere Komponenten, als Busanforderungen auf dem externen Bus ausgebende und empfangende Teilnehmer agieren. Die EBRQ nimmt Busanforderungen von jedem der Teilnehmer in der CPU/L2 auf und reiht sie auf und von dem externen Bus ein. In dem dargestellten Ausführungsbeispiel handhabt die EBRQ externe Busanforderungen von und zu dem DCU, der IFU und der BBL/L2.

Verschiedene Busteilnehmer können gemäß verschiedener Ausführungsbeispiele verschiedene Busanforderungen ausführen. Bei einem Ausführungsbeispiel enthalten solche Busanforderungen Lese- und Schreibanforderungen und können von der DCU, der IFU und der BBL/L2 wie in Tabelle 1 gezeigt, angefordert werden.



Die DCU-Lese- und -Schreibanforderungen sind natürlich Daten-Lese- und Schreiboperationen. Die IFU-Leseanforderung ist natürlich eine Instruktionsheranholoperation. Externe Busanforderungen von der DCU und der IFU werden generell auf den L2- Cache-Speicher gerichtet; DCU- und IFU-Operationen auf dem externen Bus wurden üblicherweise bereits in dem L1-Cache- Speicher nachgeschlagen, führten jedoch zu Fehlversuchen.

Die BBL/L2-Schreibanforderung kann ein " geändertes Opfer- Rückschreiben" ("dirty victim writeback") sein. Wenn der L2- Cache-Speicher voll ist, erfordern neue Cache-Speicherzeilenzuordnungen, daß eine bereits belegte Cache-Speicherzeile aus dem Speicher geschrieben wird. Diese herausgeschriebene Cache- Speicherzeile wird als "Opfer" einer Cache-Speicherzeilenersetzung bezeichnet. Eine geopferte Zeile muß nur herausgeschreiben werden, wenn sie Daten enthält, die im Hinblick auf die nicht Cache-gespeicherten Daten (oder die in einer höheren Ebene Cache-gespeicherten Daten), die diese Zeile darstellen, geändert wurde. Solch eine geänderte Zeile ist "dirty". Wenn eine nicht geänderte Zeile zwangsgeräumt wird, kann sie einfach überschrieben und ignoriert werden, da die woanders existierenden Daten immer noch an der Adresse gültig sind.

Buskonflikte können auftreten, wenn ein anfordernder Teilnehmer eine Schreiboperation zu einer gegebenen Adresse ausgibt und ein anderer Teilnehmer eine Lese- oder eine Schreiboperation zu der gleichen Adresse ausgibt. Die verschiedenen Einheiten können völlig unabhängig voneinander arbeiten, aber können gelegentlich Anforderungen zu der gleichen Adresse senden. Die Reihenfolge, in der diese Anforderungen zur gleichen Adresse auf den externen Bus gegeben werden und die Art und Weise, wie sie abgearbeitet werden, ist im Hinblick auf das Aufrechterhalten der Speicherkonsistenz kritisch. Verschiedene Ordnungsschemen können verwendet werden, wie beispielsweise das strenge oder das schwache Ordnen. Jedoch, unabhängig davon, welches Ordnen verwendet wird, muß es konsistent verwendet werden.

Wenn eine anfordernde Einheit eine Leseoperation und eine andere anfordernde Einheit eine Schreiboperation zu der gleichen Adresse ausgeben, muß die erste Einheit die Daten empfangen, die die zweite Einheit ausgibt. Dies kann erreicht werden, indem die Schreiboperation auf dem externen Bus vor der Leseoperation ausgegeben wird und dadurch, daß garantiert wird, daß die Schreiboperation beendet ist. Alternativ kann es dadurch erreicht werden, daß ein anderer Mechanismus für die Leseoperation anfordernde Einheit zum Empfangen der Daten von der die Schreiboperation anfordernde Einheit vorgesehen werden.

Bei dem in Fig. 9 dargestellten Ausführungsbeispiel akzeptiert die EBRQ die neuen Anforderungen von der IFU und der DCU über die RPA und legt diese Anforderungen der BBL über die BSBRL vor, so daß die BBL bestimmen kann, ob deren L2-Cache- Speicher die angeforderte Adresse enthält oder, mit anderen Worten, ob der L2-Cache-Speicher eine Cache-Speicherzeile enthält, die von der Adresse im Speicher zwischengespeicherte Daten speichert. Wenn ein L2-Cache-Fehlversuch auftritt, signalisiert die BBL dies und verlangt, daß die Anforderung von dem externen Bus abgearbeitet wird. Das kann bedeuten, daß sie von einem (nicht dargestellten) L3-Cache-Speicher abgearbeitet werden kann, oder direkt vom Haupt-RAM. Wenn die Anforderung eine Leseanforderung ist und die Daten nicht in dem L2-Cache- Speicher sind, kann der BBL in dem L2-Cache-Speicher Platz für die Daten machen, die schließlich von der Anforderung zurückgegeben werden, indem eine Zeile von dem L2-Cache-Speicher wie oben beschrieben zwangsgeräumt bzw. geopfert wird.

Fig. 10 zeigt weitere Details der EBRQ. Die EBRQ enthält eine Warteschlange 1020. Um über einen breiten Anwendungsbereich eine hohe Leistung zu erzielen, kann die Warteschlange 1020 vorteilhafterweise einen first-in/first-out-(FIFO-) Warteschlangenmechanismus verwenden, um auszuwählen, welche Anforderung zur Bedienung zur BBL/L2 gesendet werden soll. Andere Verfahren können bei anderen Ausführungsbeispielen verwendet werden.

Die Warteschlange 1020 enthält einen oder mehrere Einträge. In dem dargestellten Ausführungsbeispiel enthält sie vier Einträge an den Warteschlangenstellen 0 bis 3. Jeder Eintrag kann verschiedene Informationen über eine zugehörige Anforderung enthalten. Beispielsweise kann der Eintrag eine Kennung (ID) der Anforderung, einen Typ (TYPE) der Anforderung, beispielsweise Lese- oder Schreiboperation, eine Adresse (ADDR), an die die Anforderung gerichtet ist, und den derzeitigen Status (STATUS) der Anforderung enthalten. Je nach Wunsch können weitere Informationen enthalten sein.

Ein Warteschlangenmanager 1022 steuert die Zuweisung und Freigabe von Einträgen in der Warteschlange 1020. Neueinträge in der Warteschlange werden zugewiesen, wenn eine Anforderung von der IFU oder der DCU von der RPA angenommen wird. Einträge werden von der Warteschlange freigegeben, wenn sie erfolgreich von der BBL/LC bedient wurden oder wenn sie ausgegeben wurden und erfolgreich auf dem externen Bus beendet wurden und (fakultativ) ihre Daten zu der BBL/L2 zurückgegeben haben, oder wenn ein die vorzeitige Freigabe erfordernder ernster Fehler auftritt, beispielsweise wenn verschiedene Adreßparitätsfehler auftreten oder wenn eine harte Fehlerantwort auf dem externen Bus zurückgegeben wird.

Die EBRQ kann außerdem eine Liste 1024 von Dirty-Opfer- Zeile-Opferungsanforderungen enthalten. Sie kann einen oder mehrere Einträge enthalten. Bei dem dargestellten Ausführungsbeispiel enthält sie zwei Einträge an den Listenstellen 0 und 1. Jeder Eintrag kann verschiedene Informationen über die zwangsgeräumten Zeilen enthalten, beispielsweise die Adresse (ADDR) der Daten in der Zeile und den Status (STATUS) der Zwangsräumungsrückschreibanforderung.

Ein Listenmanager 1026 steuert die Zuweisung und Freigabe der Einträge in der Liste 1024.

Wenn eine neue Anforderung von der DCU oder der IFU ankommt, weist der Manager 1022 den nächsten verfügbaren Eintrag am Ende der Warteschlange 1020 gemäß einem vorgegebenen Algorithmus zu. Die Details dieses Algorithmus sind zum Verständnis der Erfindung nicht erforderlich. Wichtig ist, daß die neue Anforderung an das Ende der FIFO gesetzt wird.

Wenn die Anforderung den Anfang der FIFO erreicht, entfernt der Manager 1022 sie, und die EBRQ legt sie der BBL vor. Wenn die BBL aus irgendeinem Grund nicht in der Lage ist, die Anforderung zu diesem bestimmten Zeitpunkt zu bedienen, weist die BBL die Anforderung zurück, und der Manager 1022 fügt die Anforderung wieder in die Warteschlange ein.

Bei einem Ausführungsbeispiel wird die zurückgewiesene Anforderung an das Ende der FIFO zurückgegeben.

Anforderungen, die dem externen Bus vorgelegt werden, können dem gleichen Zurückweisungs- und Wiedereinfügungsschema unterworfen sein. Beispielsweise kann ein externer Bus-Paritätsfehler die Anforderung zwingen, zurückgewiesen und zu einer späteren Zeit wieder ausgegeben zu werden.

Bei einem Ausführungsbeispiel müssen zurückgewiesene Anforderungen im Hinblick auf andere Anforderungen nicht, wie oben beschrieben, den gleichen Ordnungsanforderungen unterworfen werden, jedoch müssen bei einem solchen Ausführungsbeispiel geeignete Schritte unternommen werden, um die Speicherkonsistenz sicherzustellen.

Das oben detailliert beschriebene Schema stellt sicher, daß keine Anforderung "ungerecht" behandelt wird. Es sorgt jedoch für eine hohe Systemleistung. Es gibt jedoch zusätzliche Erwägungen, mit denen sich die Erfindung befaßt.

In dem in Fig. 9 dargestellten Ausführungsbeispiel, bei dem die DCU, die IFU und die BBL/L2 Lese- und Schreibanforderungen ausgeben können, gibt es vier Speicherordnungsprobleme, die behandelt werden müssen. Diese sind in Tabelle 2 dargestellt.



Bei dem dargestellten Ausführungsbeispiel wird der Fall einer DCU-Leseoperation vs. eine DCU-Leseoperation ignoriert, da die DCU keine zwei, einen Konflikt auslösenden Anforderungen zu der gleichen Adresse ausgibt.

Dieser vierte Fall liegt in einem Mehrprozessorsystem vor. Bei diesem Ausführungsbeispiel kann eine Leseanforderung zu einer gegebenen Adresse, die von einem Prozessor auf den externen Bus gegeben wurde, solange nicht unmittelbar von einer von einem anderen Prozessor auf den externen Bus ausgegebenen Schreibanforderung zu der gleichen Adresse gefolgt werden, bis es garantiert ist, daß die Leseanforderung den bzw. die Cache- Speicher des zweiten Prozessors überwacht (snooped) hat und alle darin zwischengespeicherten modifizierten Daten empfangen hat.

Es ist somit klar, daß die ersten drei Fälle sich nur auf den internen Bereich einer CPU beziehen.

Die dargestellten Komponenten des Systems der vorliegenden Erfindung kooperieren, um zahlreiche Mechanismen oder Verfahren auszuführen, die zusammen dazu dienen, in der EBRQ Speicherordnungsprobleme zu verhindern. Zu diesen Mechanismen können bei verschiedenen Ausführungsbeispielen gehören: (A) ein Blockierungsmechanismus für gleiche Adressen, (B) ein Mechanismus zum Handhaben selbstmodifizierender Befehlscodes und einen Busüberwachungs(Bussnooping)-Mechanismus, (C) einen Rückwärtsabfragemechanismus, (D) einen Konfliktadressen-Puffermechanismus und (E) andere, allgemeinere Mechanismen.

Bei dem in Fig. 9 gezeigten Ausführungsbeispiel enthält die CPU 914 außerdem einen Blockierungsmechanismus 930 für gleiche Adressen, einen selbstmodifizierenden Befehlscode- und Überwachungsmechanismus 932, einen Rückwärtsabfragemechanismus 934 und einen Konfliktadressen-Puffermechanismus 936.

Der Blockierungsmechanismus für gleiche Adressen stellt sicher, daß, wenn eine neue Anforderung der BBL zum Nachschlagen in dem L2-Cache-Speicher vorgelegt wird, ihre Adresse mit jeder Adresse in der EBRQ verglichen wird, die zu einer Anforderung gehört, die den L2-Cache-Speicher bereits durchlaufen hat. Wenn eine Übereinstimmung gefunden wird, wird die neue Anforderung von der BBL zurückgewiesen und wie oben beschrieben an das Ende der FIFO gestellt,.

Der Selbstmodifizierungs-Befehlscode- und Selbstüberwachungs-Mechanismus stellt sicher, daß, wenn eine IFU-Anforderung der BBL zur Bedienung vorgelegt wird, eine selbstmodifizierende Befehlscodeüberwachung (self-modifying-code snoop) auf der DCU und der EBRQ durchgeführt wird, um das Vorhandensein modifizierter Daten entweder in der DCU oder in dem Verfahren des Schreibens einer Anforderung in die EBRQ zu erfassen. Wenn modifizierte Daten gefunden werden, wird die Anforderung auf den externen Bus mit einer Anweisung gesendet, sich selbst zu überwachen oder in der CPU nach den modifizierten Daten zurückzuschauen.

Der Rückwärtsabfragemechanismus stellt sicher, daß, wenn die BBL/L2 eine Geänderte-Opfer-Zeile zwangsräumt, die Adresse in der DCU und der EBRQ gesucht wird, um festzustellen, ob eine später modifizierte Version der gleichen Daten existiert. Wenn festgestellt wird, daß eine solche existiert, wird die Busanforderung von dem L2-Cache-Speicheropfervorgang einfach von der Liste entfernt und nie auf den externen Bus aufgegeben.

Der Konfliktadressen-Puffermechanismus stellt sicher, daß, wenn eine Anforderung von irgendeinem Teilnehmer auf den externen Bus gegeben wird, seine Adresse in einem (nicht dargestellten) Konflikt-Adressenpuffer gespeichert wird. Vergleiche mit diesem Puffer hindern die CPU daran, irgendeine Anforderung aus zugeben, die mit einer vorher ausgegebenen Anforderung zu der gleichen Adresse in Konflikt geraten könnte, bis die vorher ausgegebene Anforderung als sicher garantiert werden kann. Eine Anforderung ist sicher, wenn sie das sogenannte Fehlerfenster und das globale Überwachungsfenster durchlaufen hat und somit garantiert beendet ist.

Diese Mechanismen arbeiten wie folgt zusammen, um zu verhindern, daß der Speicher umgeordnet werden muß, oder anders gesagt, um Cache-Speicher-Inkonsistenzen zu verhindern.

In dem Fall einer DCU-Schreiboperation vs. eine IFU-Leseoperation, wenn die IFU-Leseoperation von der BBL zuerst bedient wird, detektiert der Selbstmodifizierungs-Befehlscode Überwachungsmechanismus das Vorliegen der hinausgehenden modifizierten Daten in der EBRQ und instruiert die EBRQ, den externen Bus zur Selbstüberwachung (self-snoop) der CPU zu steuern. Das Selbstüberwachen führt dazu, daß die modifizierten Daten für die DCU-Schreiboperation durch einen impliziten Rückschreibmechanismus der CPU herausgeschrieben werden, und daß die DCU-Schreiboperation abgebrochen wird.

In dem Fall DCU-Schreiboperation vs. BBL/L2-Schreiboperation, wenn die L2-Cache-Speicher-geänderte-Opfer-Zeile-Anforderung vorgelegt wird, findet der Rückwärtsabfragemechanismus die DCU-Schreibanforderung bereits im Ablauf vor und wird die BBL/L2-Schreibanforderung abbrechen.

In dem Fall DCU-Leseoperation oder IFU-Leseoperation vs. BBL/L2-Schreiboperation, wenn eine DCU-Leseoperation oder eine IFU-Leseoperation in die FIFO eintritt, während eine BBL/L2- Schreiboperation zur gleichen Adresse auftritt, wird das Vorbeikommen der Leseoperation an der BBL/L2-Schreiboperation durch den Blockiermechanismus für gleiche Adressen blockiert.

In dem Fall externe Leseoperation vs. interne Schreiboperation verhindert der Konfliktadressen-Puffermechanismus, daß die interne Schreiboperation auf den externen Bus gegeben wird, bis die Überwachung (snoop) von der externen Leseoperation garantiert beendet ist. Wenn die Überwachungs- bzw. Snoop-Operation die ausgehenden modifizierten Daten trifft, wird die Schreibanforderung abgebrochen.

Fig. 11 zeigt die Umordnungsschaltung 1142. Die Umordnungsschaltung 1142 enthält einen Umordnungspuffer 1182 mit einem Satz von ROB-Einträgen (RE0 bis REn). Die ROB-Einträge RE0 bis REn sind physikalische Register, die spekulative Ergebnisdaten von der ungeordneten Ausführung der physikalischen Mikrobefehle zwischenspeichern. Bei einem Ausführungsbeispiel weisen die ROB-Einträge RE0 bis REn einen Satz von 64 physikalischen Registern auf. Bei einem anderen Ausführungsbeispiel weisen die ROB-Einträge RE0 bis REn einen Satz von 40 physikalischen Registern auf.

Jeder ROB-Eintrag weist ein Gültig-Flag (V), einen Ergebnisdatenwert, einen Satz von Flags, eine Flag-Maske, ein logisches Ziel (LDST), Fehlerdaten und einen Instruktionszeigerdeltawert (IPDELTA) auf.

Das Gültig-Flag zeigt ein, ob der Ergebnisdatenwert für den zugehörigen ROB-Eintrag gültig ist. Die Umordnungsschaltung 1142 löscht das Gültig-Flag für jeden neu zugeordneten ROB- Eintrag, um einen ungültigen Ergebnisdatenwert anzuzeigen. Die Umordnungsschaltung 1142 setzt das Gültig-Flag, wenn spekulative Ergebnisdaten von der Ausführungsschaltung 1140 zu dem ROB-Eintrag zurückgeschrieben werden.

Der Ergebnisdatenwert ist ein spekulatives Ergebnis von der ungeordneten Ausführung des zugehörigen physikalischen Mikrobefehls. Der Ergebnisdatenwert kann entweder ein Integer-Datenwert oder ein Gleitkomma-Datenwert sein. Bei einem Ausführungsbeispiel weist das Ergebnisdatenwertfeld jedes ROB-Eintrags RE0 bis REn 86 Bits zum Unterbringen sowohl von Integer- als auch von Gleitkomma-Datenwerten auf.

Die Flags und die Flag-Maske stellen spekulative Architektur-Flag-Informationen zur Verfügung. Die spekulativen, architektonischen Flag-Informationen werden beim Ausscheiden des zugehörigen ROB-Eintrags zu den architektonischen Flags der Real-Register-Schaltung 1144 übertragen.

Das logische Ziel LDST spezifiziert ein Register mit festgeschriebenem Zustand in der Real-Register-Schaltung 1144. Der Ergebnisdatenwert des zugehörigen ROB-Eintrags wird während des Ausscheidens des ROB-Eintrags in das von LDST spezifizierte Register mit festgeschriebenem Zustand übertragen.

Die Fehlerdaten enthalten Fehlerinformationen für den fehlerhaft verarbeitenden Mikrobefehlscode, der in der Instruktionsheranhol- und Mikrobefehlsausgabeschaltung 1132 ausgeführt wird. Wenn ein Fehler auftritt, liest der Fehlerhandhabungsmikrobefehl die Fehlerdaten, um die Fehlerursache festzustellen.

Der IPDELTA ist ein Makroinstruktionszeiger-Deltawert, der die zu dem physikalischen Register gehörige Makroinstruktion identifiziert.

Die Umordnungsschaltung 1142 empfängt die physikalischen Mikrobefehle pmop_0 bis pmop_3 über den Bus 1152 für physikalische Mikrobefehle. Die Umordnungsschaltung 1142 liest die von den physikalischen Mikrobefehlen pmop_0 bis pmop_3 spezifizierten Quelldaten von dem Umordnungspuffer 1182. Die Umordnungsschaltung 1142 überträgt die Ergebnisdatenwerte und die Gültig- Flags von den durch die physikalischen Quellen psrc1 und psrc2 der physikalischen Mikrobefehle spezifizierten ROB-Einträge zu der Reservierungs- und Abfertigungsschaltung 1138 über den Quelldatenbus 1158.

Beispielsweise werden die Ergebnisdatenwerte und die Gültig-Flags von den von den physikalischen Quellen psrc1 und psrc2 des pmop_0 spezifizierten ROB-Einträgen als Quelldaten src1/src2 data_0 über den Quelldatenbus 1158 übertragen. Die Quelldaten src1/src2 data_0 stellen von den physikalischen Quellen psrc1 und psrc2 des pmop_0 spezifizierte Quelldaten zur Verfügung, wenn die zugehörigen Gültig-Flags gültige Quelldaten anzeigen.

In ähnlicher Weise überträgt die Umordnungsschaltung 1142 Ergebnisdatenwerte und Gültig-Flags von den zugehörigen ROB- Einträgen als Quelldaten src1/src2 data_1 bis Quelldaten src1/src2 data_3 über den Quellbus 1158 für die physikalischen Mikrobefehle pmop_1 bis pmop_3.

Die Umordnungsschaltung 1142 löscht die Gültig-Bits der durch die physikalischen Ziele pdst der physikalischen Mikrobefehle pmop_0 bis pmop_3 spezifizierten ROB-Einträge, die über den Bus 1152 für physikalische Mikrobefehle empfangen wurden. Die Umordnungsschaltung 1142 löscht die Gültig-Bits, um anzuzeigen, daß der zugehörige Ergebnisdatenwert nicht gültig ist, da die physikalischen Mikrobefehle pmop_0 bis pmop_3, die diesen Ergebnisdatenwert erzeugen, in der Reservierungs- und Abfertigungsschaltung 1138 assembliert werden.

Die Umordnungsschaltung 1142 empfängt die logischen Ziele ldst_0 bis ldst_3 und die Makroinstruktions-Zeigerdeltas mipd_0 bis mipd_3 über den Bus 1154 für logische Ziele. Die Umordnungsschaltung 1142 speichert die logischen Ziele ldst_0 bis ldst_3 in die LDST-Felder der von den physikalischen Zielen pdst der physikalischen Mikrobefehle pmop_0 bis pmop_3 spezifizierten ROB-Einträge. Die Umordnungsschaltung 1142 speichert die Makroinstruktions-Zeigerdeltas mipd_0 bis mipd_3 in die IPDELTA-Felder der durch die physikalischen Ziele pdst der physikalischen Mikrobefehle pmop_0 bis pmop_3 spezifierten ROB- Einträge.

Beispielsweise speichert die Umordnungsschaltung 1142 ldst_0 und mipd_0 in die von dem physikalischen Ziel pdst des pmop_0 spezifizierten LDST- und IPDELTA-Felder des ROB. Das logische Ziel in dem LDST-Feld eines ROB-Eintrags spezifiziert ein Register mit festgeschriebenem Zustand in der Real-Register-Schaltung 1144 zum Ausscheiden des zugehörigen ROB-Eintrags. Das Makroinstruktions-Zeigerdelta in dem IPDELTA-Feld eines ROB-Eintrags spezifiziert die ursprüngliche Makroinstruktion des zugehörigen ROB-Eintrags.

Die Umordnungsschaltung 1142 empfängt Informationen zum Rückschreiben spekulativer Ergebnisse von der Ausführungsschaltung 1140 über den Ergebnisbus 1162. Informationen zum Rückschreiben spekulativer Ergebnisse von den Ausführungseinheiten EU0 bis EU4 enthalten Ergebnisdatenwerte, physikalische Ziele pdst und Fehlerdaten.

Die Umordnungsschaltung 1142 speichert die Informationen zum Rückschreiben spekulativer Ergebnisse von den Ausführungseinheiten EU0 bis EU4 in die von den physikalischen Zielen pdst auf dem Ergebnisbus 1162 spezifizierten ROB-Einträge. Für jede Ausführungseinheit EU0 bis EU4 speichert die Umordnungsschaltung 1142 den Ergebnisdatenwert in das Ergebnisdatenwertfeld und speichert die Fehlerdaten des von dem physikalischen Ziel pdst spezifizierten ROB-Eintrags.

Die Ergebnisdatenwerte von den Ausführungsschaltungen 1140 enthalten jeweils ein Gültig-Flag. Jedes Gültig-Flag wird in dem Gültig-Flag-Feld des von dem physikalischen Ziel pdst spezifizierten ROB-Eintrags gespeichert. Die Ausführungseinheiten EU0 bis EU4 setzen die Gültig-Flags, um anzuzeigen, ob die zugehörigen Ergebnisdatenwerte gültig sind.

Die Umordnungsschaltung 1142 empfängt die physikalischen Ausscheideziele über den Ausscheidehinweisbus 1170. Die physikalischen Ausscheideziele veranlassen die Umordnungsschaltung 1142, die spekulativen Ergebnisdatenwerte in den ROB-Einträgen RE0 bis REn auf den architektonischen Zustand festzuschreiben, in dem die spekulativen Ergebnisdatenwerte zu der Real-Register-Schaltung 1144 über den Ausscheidebus 1164 übertragen werden.

Der Ausscheidebus 1164 führt die spekulativen Ergebnisse für einen Satz von ausscheidenden Mikrobefehlen rm_0 bis rm_4. Jeder ausscheidende Mikrobefehl rm_0 bis rm_4 weist einen Ergebnisdatenwert und ein logisches Ziel ldst von einem der ROB-Einträge RE0 bis REn auf.

Die ausscheidenden physikalischen Ziele von der Ausscheidelogikschaltung 1164 veranlassen die Umordnungsschaltung 1142 außerdem dazu, die Makroinstruktions-Zeigerdeltas für die ausscheidenden ROB-Einträge über den Makroinstruktions-Zeiger- Offset-Bus 1120 zu der Neustartschaltung 1148 zu übertragen.

Die Umordnungsschaltung 1142 empfängt das Umordnungs-Löschsignal 1178 von der Neustartschaltung 1148. Das Umordnungs- Löschsignal 1178 veranlaßt die Umordnungsschaltung 1142, alle ROB-Einträge zu löschen.

Fig. 12 zeigt eine Lade-Speicher-Schaltung in der Ausführungsschaltung 1240. Die Lade-Speicher-Schaltung weist eine Adreßerzeugungsschaltung 1200, eine Speicherordnungsschaltung 1202, eine Datenübersetzungs-Nachschlage-Puffer(DTLB)-Schaltung 104 und eine Daten-Cache-Speicherschaltung 1206 auf.

Die Adreßerzeugungsschaltung 1200 empfängt zugeteilte physikalische Lade-Speicher-Mikrobefehle von der Reservierungs- und Abfertigungsschaltung 1238 über den Mikrobefehls-Abfertigungsbus 1260. Jeder abgefertigte physikalische Lade-Speicher- Mikrobefehl auf dem Mikrobefehls-Abfertigungsbus 1260 weist einen Befehlscode, ein Paar Quelldatenwerte src1_data und src2_data, ein physikalisches Ziel pdst und eine Lade-Puffer- Kennung lbid auf.

Die Adreßerzeugungsschaltung 1200 bestimmt für jeden abgefertigten physikalischen Lade-Speicher-Mikrobefehl eine den Quelldatenwerten src1_data und src2_data entsprechende lineare Adresse. Die lineare Adresse kann auch als virtuelle Adresse bezeichnet werden. Bei einem Ausführungsbeispiel enthält die Adreßerzeugungsschaltung 1200 Speichersegmentregister und erzeugt die lineare Adresse gemäß der Speichersegmentierung der Mikroprozessoren mit Intel-Architektur. Die Adreßerzeugungsschaltung 1200 überträgt lineare Lade-Speicher-Mikrobefehle zu der Speicherordnungsschaltung 1202 über einen linearen Operationsbus 1290. Jede lineare Lade-Speicher-Operation auf dem linearen Operationsbus 1290 entspricht einem über den Mikrobefehl-Abfertigungsbus 1260 empfangenen, abgefertigten physikalischen Lade-Speicher-Mikrobefehl. Jeder lineare Lade-Speicher- Mikrobefehl enthält den Befehlscode des zugehörigen physikalischen Lade-Speicher-Mikrobefehls die von den zugehörigen Quelldatenwerten src1_data und src2_data bestimmte lineare Adresse, das zugehörige physikalische Ziel pdst und die zugehörige Lade-Puffer-Kennung lbid.

Die Speicherordnungsschaltung 1202 enthält einen Lade-Puffer. Die Speicherordnungsschaltung 1202 empfängt die linearen Lade-Speicher-Mikrobefehle über den linearen Operationsbus 1290. Die Speicherordnungsschaltung 1202 speichert die linearen Lade-Speicher-Mikrobefehle entsprechend der zugehörigen Lade- Puffer-Kennung lbid in den Lade-Puffer. Die Speicherordnungsschaltung 1202 teilt die linearen Lade-Speicher-Mikrobefehle von dem Lade-Puffer der DTLB-Schaltung 104 über den linearen Operationsbus 1290 zu.

Die DTLB-Schaltung 1204 empfängt die zugeteilten linearen Lade-Speicher-Mikrobefehle von der Speicherordnungsschaltung 1212 über den linearen Operationsbus 1290. Die DTLB-Schaltung 1204 stellt der Daten-Cache-Speicherschaltung 106 über einen Lese-Bus 1294 für jeden von der Speicherordnungsschaltung 1202 empfangenen linearen Lade-Speicher-Mikrobefehl eine physikalische Adresse zur Verfügung.

Die DTLB-Schaltung 1204 konvertiert die zugehörigen lineare Adresse l_addr in eine physikalische Adresse für das Speichersubsystem 1226. Die DTLB-Schaltung 1204 bildet die lineare Adresse l_addr jedes linearen Lade-Speicher-Mikrobefehls gemäß einem vorgegebenen Speicher-Seitenabbildungsmechanismus in eine physikalische Adresse ab.

Die DTLB-Schaltung 1204 überträgt die der linearen Adresse l_addr jedes linearen Lade-Speicher-Mikrobefehls zugeordnete, abgebildete physikalische Adresse über einen Bus 1296 für physikalische Adressen zu der Speicherordnungsschaltung 1212. Die Speicherordnungsschaltung 1212 speichert die physikalischen Adressen für jeden linearen Lade-Speicher-Mikrobefehl in dem zugehörigen Lade-Puffer-Eintrag. Bei einem Ausführungsbeispiel speichert die Speicherordnungsschaltung 1202 einen Teil der physikalischen Adressen für jeden linearen Lade-Speicher-Mikrobefehl in dem zugehörigen Lade-Puffer-Eintrag.

Die Daten-Cache-Speicherschaltung 1206 liest die von der physikalischen Adresse auf dem Lese-Bus 1294 spezifizierten Daten. Wenn die physikalische Adresse einen Cache-Speicher- Fehlversuch verursacht, holt die Daten-Cache-Speicherschaltung 1206 die benötigte Cache-Speicherzeile von dem Speichersubsystem 1226 heran. Die Daten-Cache-Speicherschaltung 1206 empfängt über einen Schnittstellenbus 1274 und die Schnittstellenschaltung 1230, die mit dem Mehrprozessorbus 1228 gekoppelt ist, Cache-Speicherzeilen von dem Speichersubsystem 1226.

Die Daten-Cache-Speicherschaltung 1206 überträgt die Leseoperations-Ergebnisdaten, eine zugehöriges Gültig-Bit und Fehlerdaten für den Lesezugriff zu der Umordnungsschaltung 1222 und der Reservierungs- und Abfertigungsschaltung 1238 über den Ergebnisbus 1262. Der Ergebnisbus 1262 führt außerdem das physikalische Ziel von dem zugehörigen Lade-Puffer in der Speicherordnungsschaltung 1202. Die Speicherordnungsschaltung 1206 tastet die Buszyklen auf dem Mehrprozessorbus 1228 über die Busschnittstellenschaltung 1230 und den Schnittstellenbus 1274 ab bzw. überwacht (snoops) diese.

Die Speicherordnungsschaltung 1202 überwacht (snoops) den Mehrprozessorbus 1228 bezüglich einer externen Speicheroperation oder einer Leseoperation für eine Besitzoperation von einem der Prozessoren 1223 bis 1224, die eine Prozessorordnungsverletzung für eine der zugeteilten linearen Lade-Speicher-Mikrobefehle verursachen könnte. Die Speicherordnungsschaltung überwacht bzw. snoops den Mehrprozessorbus 1228 im Hinblick auf eine externe Speicheroperation, die auf die physikalische Adresse einer in dem Lade-Puffer gespeicherten, bereits zugeteilten linearen Lade-Speicher-Mikrobefehls zielt.

Während des Ausscheidens jedes physikalischen Lade-Speicher-Mikrobefehls erzeugt die Speicherordnungsschaltung 1202 die Speicherordnungs-Neustartsignale 1276, um eine mögliche Prozessorordnungsverletzung entsprechend der Snoop-Erfassung anzuzeigen.

Fig. 13 zeigt den Prozessor 1320 gemäß einem Ausführungsbeispiel der Erfindung. Der Prozessor 1320 weist einen internen Daten-Cache-Speicher 1302, eine Speicher-Zugriffsschaltung 1304, eine Instruktionsheranholpipeline 1306, eine Außer-der- Reihe-Abfertigungsschaltung 1308 und eine Ausführungsschaltung 1310 auf. Der Prozessor 1320 weist außerdem eine geordnete Warteschlangenschaltung 1300, eine Snoop-Warteschlangenschaltung 1312 und eine Warteschlangenschaltung 1314 für ausstehende Transaktionen auf.

Die Instruktionsheranholpipeline 1306 holt gemäß einer sequentiellen Programmordnung einen Instruktionsstrom von dem Speichersubsystem 1326 heran. Die Instruktionsheranholpipeline 1306 überträgt den Instruktionsstrom zu der Außer-der-Reihe- Abfertigungsschaltung 1308. Die Abfertigungsschaltung 1308 fertigt die Instruktionen des Instruktionsstromes entsprechend der Verfügbarkeit der Quelldaten der Instruktionen und der Ausführungsressourcen in der Ausführungsschaltung 1310 und nicht in der sequentiellen Programmreihenfolge an die Ausführungsschaltung 1310 ab.

Die Abfertigungsschaltung 1308 fertigt Speicherzugriffsinstruktionen, einschließlich Lade- und Speicherinstruktionen, an die Speicherzugriffsschaltung 1304 ab. Die Speicherzugriffsschaltung 1304 führt die Speicherzugriffsinstruktionen durch Zugreifen auf den internen Daten-Cache-Speicher 1302 aus. Die Speicherzugriffsschaltung 1304 gibt Kommunikationstransaktionen in die Warteschlangenschaltung 1314 für ausstehende Transaktionen ein. Jeder Eintrag in die Transaktions-Warteschlangenschaltung 1314 entspricht einer von dem Prozessor 1320 über dem Bus 1330 ausgegebenen Kommunikationstransaktion. Jeder Eintrag in der Transaktions-Warteschlangenschaltung 1314 zeigt an, ob die zugehörige Kommunikationstransaktion verzögert ist und zeigt den Cache-Speicherendzustand für die Cache-Speicherzeile entsprechend der Beendigung der Kommunikationstransaktion an.

Die In-der-Reihenfolge-Warteschlangenschaltung 1300 protokolliert Bustransaktionsinformationen für den Bus 1330. Jeder Eintrag in der geordneten Warteschlangenschaltung 1300 entspricht einer Transaktion auf den Bus 1330. Jeder Eintrag in der geordneten Warteschlangenschaltung 1300 enthält den Status der DEFER- und HITM-Signale für die zugehörigen Transaktionen. Die Transaktions-Warteschlangenschaltung 1314 erhält Informationen zur Bestimmung des Cache-Speicher-Endzustandes für Kommunikationstransaktionen von der Warteschlangenschaltung 1300.

Die Snoop-Warteschlangenschaltung 1312 liest den Status der DEFER- und HITM-Signale von der geordneten Warteschlangenschaltung 1300. Die Snoop-Warteschlangenschaltung 1312 bestimmt Snoop-Besitzübertragungen für jeden Eintrag der geordneten Warteschlangenschaltung 1300. Die Snoop-Warteschlangenschaltung 1312 bestimmt, ob eine Aktion erfordert, daß der Prozessor 1320 den Snoop-Besitz für eine Cache-Speicherzeile erlangt oder verschiebt den Snoop-Besitz für die Cache-Speicherzeile oder gewinnt den Snoop-Besitz während einer verzögerten Transaktion zurück.

Die Speicherzugriffsschaltung 1304 und die Transaktions- Warteschlangenschaltung 1314 halten die Cache-Speicherzustände für die Cache-Speicherzeilen in dem internen Cache-Speicher 1310 aufrecht. Die Cache-Speicherzustände für den internen Daten-Cache-Speicher 13,02 enthalten einen modifizierten Zustand, einen exklusiven Zustand, einen geteilten Zustand und einen ungültigen Zustand (MESI). Eine Cache-Speicherzeile mit ungültigem Zustand ist in dem internen Daten-Cache-Speicher 1302 keine Variable.

Eine Cache-Speicherzeile in dem modifizierten Zustand wird in modifizierter Form in dem internen Daten-Cache-Speicher 1302 gespeichert. Eine modifizierte Cache-Speicherzeile in dem internen Daten-Cache-Speicher 1302 ist derzeitig nicht in dem Speichersubsystem 1326 oder in einem gültigen Zustand in irgendeinem internen Daten-Cache-Speicher der Prozessoren 1321 bis 1323 oder dem Eingabe/Ausgabe-Subsystem 1325. Eine modifizierte Cache-Speicherzeile in dem internen Daten-Cache-Speicher 1302 ist in ähnlicher Weise nicht in dem Speichersubsystem 1355 oder in irgendeinem der internen Daten-Cache-Speicher der Prozessoren 1350 bis 1352 oder dem Eingabe/Ausgabe-Subsystem 1354 gespeichert.

Eine Cache-Speicherzeile im exklusiven Zustand ist in dem internen Daten-Cache-Speicher 1302 gespeichert. Die Cache- Speicherzeile im exklusiven Zustand liegt außerdem entweder im Speichersubsystem 1326 oder dem Speichersubsystem 1355 aktuell vor.

Eine Cache-Speicherzeile in dem geteilten Zustand wird in dem internen Daten-Cache-Speicher 1302 gespeichert. Die Cache- Speicherzeile in dem geteilten Zustand kann außerdem in einem internen Daten-Cache-Speicher von einem der Prozessoren 1321 bis 1322 oder 1350 bis 1352 gespeichert sein und liegt entweder in dem Speichersubsystem 1326 oder dem Speichersubsystem 1355 aktuell vor.

Fig. 14 zeigt die Knotenschnittstellenschaltung 1424 für ein Ausführungsbeispiel der Erfindung. Die Knotenschnittstellenschaltung 1424 weist eine In-der-Reihenfolge-Warteschlangenschaltung 1470, eine Eingangs-Warteschlangenschaltung 1474 und eine Abgangs-Warteschlangenschaltung 1476 auf. Die Knotenschnittstellenschaltung 1424 weist außerdem eine Konflikt- Erfassungsschaltung 1472, einen Cache-Speicher-Kohärenz-Manager 1478 und eine Fern-Schnittstellenschaltung 1480 auf.

Die In-der-Reihe-Warteschlangenschaltung 1470 protokolliert Kommunikationstransaktionsinformationen für den Bus 1430. Jeder Eintrag in der Warteschlangenschaltung 1470 entspricht einer Transaktion auf dem Bus 1430. Die Warteschlangenschaltung 1470 überträgt Kommunikationstransaktionen, die Zugriff auf die Busgruppe 1412 erfordern, in die Eingangs-Warteschlangenschaltung 1474. Die In-der-Reihe-Warteschlangenschaltung 1470 erzeugt verzögerte Antworttransaktionseinträge in der Abgangs- Warteschlangenschaltung 1476 für solche Kommunikationstransaktionen, die den Zugriff auf die Busgruppe 1412 erfordern und folglich für eine spätere verzögerte Antwort-Transaktion.

Die Fern-Schnittstellenschaltung 1480 greift auf Kommunikationstransaktionen von der Eingangs-Warteschlangenschaltung 1474 zu und führt den geforderten Zugriff zu der Busgruppe 1412 über den Systemverbindungsbus 1440 aus. Die Fern-Schnittstellenschaltung 1480 sammelt zurückgegebene Cache-Speicherzeilen- Daten und den Snoop-Status von der Bus-Gruppe 1412 und schreibt die Cache-Speicherzeilen-Daten und den Snoop-Status in die zugehörigen Verzögerte-Antwort-Transaktionseinträge in der Abgangs-Warteschlangenschaltung 1476. Die Abgangs-Warteschlangenschaltung 1476 gibt die assemblierten verzögerten Antworttransaktionen über den Bus 1430 aus. Die Fern-Schnittstellenschaltung 1480 entfernt die beendeten Ferntransaktionen aus der Eingangs-Warteschlangenschaltung 1474.

Die Konflikt-Erfassungsschaltung 1472 greift auf die Eingangs-Warteschlangenschaltung 1474 und die In-der-Reihe-Warteschlangenschaltung 1470 zu. Die Konflikt-Erfassungsschaltung 1472 bestimmt, ob eine von der In-der-Reihe-Warteschlangenschaltung 1470 protokollierte Transaktion auf dieselbe Cache- Speicherzeile gerichtet ist, auf die eine Ferntransaktion in der Eingangs-Warteschlangenschaltung 1474 protokolliert ist. Die Konflikt-Erfassungsschaltung 1472 gibt einen Invalidiereeine-Zeile-Eintrag für eine Rückinvalidierungstransaktion in die Abgangs-Warteschlangenschaltung 1426 ein, wenn der in Konflikt stehende Fernzugriff auf eine Cache-Speicherzeile erfaßt wird. Die Rückinvalidierungstransaktion wird später über den Bus 1430 ausgegeben, um ein erneutes Versuchen des Konfliktzugriffes zu veranlassen.

Fig. 15 zeigt ein Beispiel eines Abbruch- und Neuabfertigungsprozesses. Es ist eine Programmablaufsequenz 1501 mit mehreren Zuständen 1502 bis 1512 dargestellt. Die spekulative Verarbeitung führt dazu, daß eine spekulative Ladeoperation R2 vor einer früheren Ladeoperation R1 beendet wird. Diese Verletzung wird durch Überwachen (snooping) des Ladeoperationspuffers bei Ausführung der externen Speicheroperation W2 erfaßt. Die erfaßte Verletzung führt dazu, daß die R2-Ladeoperation 1508 zusammen mit allen anderen nachfolgenden Zuständen 1509 bis 1512 gelöscht wird. Später wird die R2-Ladeoperation neu zugeteilt. Außerdem werden alle folgenden spekulativen Zustände 1514 bis 1516 neu berechnet.

Bei dem derzeitig bevorzugten Ausführungsbeispiel wird nur eine Untermenge der physikalischen Adreßbits überwacht (snooped). Dieses Ausführungsbeispiel kann falsche Snoop-Treffer verursachen, wenn die Teiladresse mit einer Alias-Adresse übereinstimmt. Falsche Snoop-Treffer sind im Hinblick auf die Richtigkeit der Prozessorordnung kein Problem. Jedoch führen die falschen Snoop-Treffer zur Erzeugung falscher Fehler und Fehlerbehebungen. Übermäßig viele falsche Snoop-Treffer würden die Leistung vermindern. Die Verwendung einer Untermenge von physikalischen Adreßbits ist daher ein Kompromiß zwischen der Hardwarespeicherung der Adresse und der Leistungssteigerung. Außerdem verwaltet das Speichersystem Speicheroperationen in Blöcken (chunks) von Cache-Speicherzeilen (z. B. 32 Bytes), so daß die Speicheroperation nur über diesen Bereich (z. B. 32 Bytes) sichtbar ist.

Fig. 16 ist ein Ablaufdiagramm, daß die Schritte zur Erstellung eines Speicherkonsistenzmodells (d. h. Prozeßordnung) in einem Mehrprozessorsystem beschreibt. Im Schritt 1601 wird den Speicheroperationen eine strikte Prozessorordnung auferlegt. In anderen Worten, es wird Speicheroperationen nicht ermöglicht, andere Speicheroperationen passieren zu lassen. Ladeoperationen können andere Ladeoperationen oder andere Speicheroperationen passieren lassen. Wenn ein anderer Prozessor eine Speicheroperation ausführt, wird der Ladeoperationspuffer des ursprünglichen Prozessors überwacht (snooped), Schritte 1603 und 1604. Im Schritt 1605 wird bestimmt, ob die Snoop-Operation zu einem Treffer führt. Ein Treffer tritt auf, wenn die Speicheroperation mit einer derzeitig in dem Ladeoperationspuffer angeordneten Ladeoperation übereinstimmt. Wenn die Snoop-Operation nicht zu einem Treffer führt (d. h. einem Fehlversuch), wird der Schritt 1601 wiederholt. Es ist zu beachten, daß nicht-überwachten (non-snooped) und überwachten (snooped) aber keinen Treffer erzeugenden Ladeoperationen gestattet wird, auf normale Weise im Schritt 1606 auszuscheiden.

Wenn die Snoop-Operation zu einem Treffer führt, wird bestimmt, ob der Ladeoperationspuffer eine frühere Ladeoperation enthält, die noch aussteht, Schritt 1607. Wenn es eine solche frühere ausstehende Ladeoperation nicht gibt, dann können die beendeten Speicheroperationen und die spekulativen Ladeoperationen im Schritt 1606 ausscheiden. Der Begriff Ausscheiden bezieht sich auf die Tätigkeit des Entfernens eines beendeten Mikrobefehls von dem Umordnungspuffer und auf das Festschreiben seines Zustandes auf den permanenten architektonischen Zustand, der von der ursprünglichen Instruktion vorgesehen war. Schritt 1601 wird nach Schritt 1606 wiederholt. Andernfalls ist ein Prozessorfehler aufgetreten und erfaßt worden. Der Fehler führt zur Erzeugung eines Fehlersignals. Das Fehlersignal von dem Speichersubsystem wird,zum Abbrechen der illegalen Ladeoperation (d. h. der Ladeoperation, die den Fehler verursachte) verwendet, Schritt 1608. Danach wird die der illegalen Ladeoperation folgende Programmsequenz abgebrochen und zu einer späteren Zeit neugestartet, Schritt 1609. Das Verfahren wird beginnend am Schritt 1601 wiederholt.

Die Fig. 17 und 18 sind Ablaufdiagramme, die die Handhabung einer Kommunikationstransaktion durch die Knotenschnittstellenschaltung darstellen. Beim Block 1700 initiiert ein den Bus anfordernder Teilnehmer eine Kommunikationstransaktion über den Bus.

Im Entscheidungsblock 1702 bestimmt die Knotenschnittstellenschaltung, ob die von der Kommunikationstransaktion spezifizierte Anforderung in der Bus-Gruppe erfüllt werden kann. Wenn die Anforderung in der Bus-Gruppe beendet werden kann, dann geht die Steuerung zum Block 1704 weiter. Im Block 1704 beendet die Knotenschnittstellenschaltung die angeforderte Kommunikationstransaktion geordnet, d. h. indem die Kommunikationstransaktion nicht verzögert bzw. zurückgestellt wird.

Wenn die Knotenschnittstellenschaltung im Entscheidungsblock 1702 feststellt, daß die Anforderung nicht in der Bus- Gruppe erfüllt werden kann, dann geht die Steuerung zu dem Entscheidungsblock 1706 weiter. Im Entscheidungsblock 1706 bestimmt die Konflikt-Erfassungsschaltung, ob eine verzögerte Transaktion ansteht, die mit der Kommunikationstransaktion in Konflikt gerät. Eine anstehende verzögerte Transaktion gerät mit der Kommunikationstransaktion der anstehenden verzögerten Transaktion in Konflikt, wenn die Kommunikationstransaktion auf die gleiche Cache-Speicherzeile von Daten gerichtet ist. Wenn eine anstehende verzögerte Transaktion nicht mit der Kommunikationstransaktion in Konflikt gerät, dann geht die Steuerung zum Block 1708 weiter.

Im Block 1708 verzögert die Knotenschnittstellenschaltung die Kommunikationstransaktion, indem sie das DEFER-Signal während der Snoop-Phase der Kommunikationstransaktion anlegt und dann eine verzögerte Antwort während der Antwortphase der Kommunikationstransaktion angelegt wird. Die Knotenschnittstelle erzeugt außerdem einen Verzögerte-Antwort-Transaktionseintrag in der Abgangs-Warteschlange. Danach beendet die Fern- Schnittstellenschaltung im Block 1710 die Kommunikationstransaktion durch Zugriff auf die Bus-Gruppe. Im Block 1710 empfängt die Fern-Schnittstellenschaltung einen neuen Cache-Speicherzustand für die von der Kommunikationstransaktion spezifizierte Cache-Speicherzeile von der Bus-Gruppe und weist den neuen Cache-Speicherzustand und die Cache-Speicherzeilen-Daten, falls erforderlich, in dem zugehörigen Verzögerte-Antwort-Transaktionseintrag in der Abgangs-Warteschlange an.

Danach initiiert die Knotenschnittstellenschaltung am Block 1712 die zugehörige verzögerte Antworttransaktion von der Abgangs-Warteschlange auf den Bus. Im Entscheidungsblock 1814 bestimmt die Knotenschnittstellenschaltung, ob die Kommunikationstransaktion ein erneutes Versuchen erfordert. Die Transaktion erfordert eine Wiederholung, wenn sie nicht erfolgreich zur Bus-Gruppe 1712 beendet wurde. Wenn die Kommunikationstransaktion eine Wiederholung im Entscheidungsblock 1814 erfordert, dann geht die Steuerung zum Block 1816 weiter.

Im Block 1816 legt die Knotenschnittstellenschaltung das DEFER-Signal während der Snoop-Phase der verzögerten Antworttransaktion an. Danach läßt die Knotenschnittstellenschaltung im Block 1818 den Snoop-Besitz für die von der Kommunikationstransaktion spezifizierte Cache-Speicherzeile fallen und im Block 1819 zeigt die Knotenschnittstellenschaltung eine Wiederholung für die Kommunikationstransaktion an. Der Snoop-Besitz wird von dem ursprünglich anfordernden Busteilnehmer für die Kommunikationstransaktion angenommen.

Wenn die Transaktion im Entscheidungsblock 1814 keinen erneuten Versuch erfordert, dann geht die Steuerung zum Entscheidungsblock 1820 weiter. Im Entscheidungsblock 1820 bestimmt die Schnittstellenschaltung, ob die von der Kommunikationstransaktion spezifierte Cache-Speicherzeile mit einem mit der Bus- Gruppe gekoppelten Busteilnehmer geteilt wird. Wenn die Cache- Speicherzeile geteilt wird, dann geht die Steuerung zum Block 1822 weiter.

Im Block 1822 legt die Knotenschnittstellenschaltung das HIT-Signal oder das HITM-Signal während der Snoop-Phase der verzögerten Antworttransaktion gemäß den Snoop-Ergebnissen für die Kommunikationstransaktion von der Bus-Gruppe an. Wenn die Cache-Speicherzeile nicht geteilt wird, dann geht die Steuerung zum Block 1824 weiter. Im Block 1824 legt die Knotenschnittstellenschaltung das HIT- oder das HITM-Signal während der Snoop-Phase der verzögerten Antworttransaktion nicht an. In jedem Fall gibt die Knotenschnittstellenschaltung den Snoop- Besitz für die Cache-Speicherzeile der Kommunikationstransaktion im Block 182,6 an den anfordernden Busteilnehmer weiter.

Wenn eine anhängige verzögerte Transaktion mit der Kommunikationstransaktion nicht in Konflikt steht, dann geht die Steuerung vom Entscheidungsblock 1706 zum Entscheidungsblock 1728 weiter. Im Entscheidungsblock 1728 bestimmt die Knotenschnittstellenschaltung, ob mehrere verzögerte Transaktionen aktiviert sind. Wenn nicht mehrere verzögerte Transaktionen aktiviert sind, dann geht die Steuerung zum Block 1730 weiter. Im Block 1730 zeigt die Knotenschnittstellenschaltung einen Neuversuch für die Kommunikationstransaktion an. Der anfordernde Busteilnehmer versucht später erneut die Kommunikationstransaktion, wobei er zur Beendigung der anhängigen verzögerten Transaktion Zeit verstreichen läßt.

Wenn im Entscheidungsblock 1728 mehrere verzögerte Transaktionen aktiviert sind, dann geht die Steuerung zum Block 1732 weiter. Im Block 1732 verzögert die Knotenschnittstellenschaltung die Kommunikationstransaktion, indem sie das DEFER-Signal während der Snoop-Phase und eine verzögerte Antwort während der Antwortphase der Kommunikationstransaktion anzeigt.

Danach wird im Block 1734 die erste anhängige verzögerte Transaktion gemäß der Sequenz der Blöcke 1710 bis 1712 und 1814 bis 1826 beendet.

Danach bestimmt der Cache-Speicher-Kohärenz-Manager im Entscheidungsblock 1736, ob ein kollidierender Snoop-Besitz zwischen der im Block 1734 beendeten ersten verzögerten Transaktion und der im Block 1732 verzögerten Transaktion (der zweiten verzögerten Transaktion) vorliegt. Ein Snoop-Besitz-Konflikt auf die gleiche Cache-Speicherzeile gerichtet sind. Wenn im Entscheidungsblock 1736 kein kollidierender Snoop-Besitz vorliegt, dann geht die Steuerung zum Block 1738 weiter. Im Block 1738 beendet die Knotenschnittstellenschaltung die im Block 1732 verzögerte Kommunikationstransaktion gemäß den Blöcken 1710 bis 1712 und 1814 bis 1826.

Wenn ein kollidierender Snoop-Besitz im Entscheidungsblock 1736 vorliegt, dann geht die Steuerung zum Block 1740 weiter. Die Knotenschnittstellenschaltung initiiert im Block 1740 eine Invalidiere-Zeile-Kommunikationstransaktion auf dem Bus zu dem anfordernden Busteilnehmer für die kollidierende, im Block 1734 beendete verzögerte Transaktion. Die Invalidierungsanforderung ist eine nachträgliche Invalidierung für die erste verzögerte Transaktion, die die Cache-Speicherzeile mit kollidierendem Snoop-Besitz invalidiert. Danach beendet die Knotenschnittstellenschaltung im Block 1742 die im Block 1732 verzögerte Kommunikationstransaktion gemäß den Blöcken 1710 und 1712 und 1814 bis 1826.

Fig. 19 ist ein Ablaufdiagramm, das eine Leseanforderung eines anfordernden Busteilnehmers veranschaulicht. Der anfordernde Busteilnehmer initiiert im Block 1900 eine Lesetransaktion auf dem Bus.

Während der Snoop-Phase der Lesetransaktion im Entscheidungsblock 1902 tastet der anfordernde Busteilnehmer den Zustand des DEFER- und des HITM-Signals auf dem Bus ab. Wenn im Entscheidungsblock 1902 das DEFER-Signal angelegt und das HITM- Signal nicht angelegt ist, dann geht die Steuerung zu dem Block 1906 weiter. Andernfalls geht die Steuerung zum Block 1904 weiter. Im Block 1904 führt der anfordernde Busteilnehmer normale Cache-Speicherzustandsübergänge aus, da die Lesetransaktion geordnet beendet wird.

Im Block 1906 setzt der anfordernde Busteilnehmer den Snoop-Besitz für die von der Lesetransaktion spezifizierte Cache-Speicherzeile nicht voraus. Im Entscheidungsblock 1908 führt der anfordernde Busteilnehmer eine Prüfoperation im Hinblick auf eine verzögerte Antwort während der Antwortphase der Lesetransaktion aus. Wenn im Entscheidungsblock 1908 keine verzögerte Antwort angezeigt wird, dann geht die Steuerung zum Block 1910 weiter. Im Block 1910 wiederholt der anfordernde Busteilnehmer die Lesetransaktion, wenn der adressierte Busteilnehmer während der Antwortphase der Lesetransaktion Wiederholung angezeigt hat.

Wenn im Entscheidungsblock 1908 eine verzögerte Antwort angezeigt wurde, dann geht die Steuerung zum Block 1912 weiter. Im Block 1912 wartet der anfordernde Busteilnehmer auf eine verzögerte Antworttransaktion auf dem Bus. Danach tastet der anfordernde Busteilnehmer im Entscheidungsblock 1914 das DEFER- Signal während der Snoop-Phase der verzögerten Antworttransaktion ab. Wenn das DEFER-Signal während der Snoop-Phase der verzögerten Antworttransaktion angelegt ist, dann geht die Steuerung zum Block 1916 weiter. Im Block 1916 hält der anfordernde Busteilnehmer die Cache-Speicherzeile der Lesetransaktion weiter im ungültigen Zustand. Danach versucht der anfordernde Busteilnehmer im Block 1918 die Lesetransaktion erneut, indem er die Lesetransaktion über den Bus erneut initiiert.

Wenn das DEFER-Signal während der Snoop-Phase der verzögerten Antworttransaktion im Entscheidungsblock 1914 nicht angelegt ist, dann geht die Steuerung zum Entscheidungsblock 1920 weiter. Wenn das MIT-Signal oder das HITM-Signal während der Snoop-Phase der verzögerten Antworttransaktion im Entscheidungsblock 1920 nicht angelegt ist, dann geht die Steuerung zum Block 1924 weiter. Im Block 1924 setzt der anfordernde Busteilnehmer den Besitz der in der Lesetransaktion spezifizierten Cache-Speicherzeile in dem geteilten Cache-Speicherzustand voraus.

Wenn das HIT- oder das HITM-Signal während der Snoop-Phase der verzögerten Antworttransaktion im Entscheidungsblock 1920nicht angelegt ist, dann geht die Steuerung zu dem Block 1922 weiter. Im Block 1922 setzt der anfordernde Teilnehmer den Besitz der in der Lesetransaktion spezifizierten Cache-Speicherzeile in dem exklusiven Cache-Speicherzustand voraus.

Fig. 20 ist ein Ablaufdiagramm, das eine Schreibtransaktion oder eine Invalidierungstransaktion von einem anfordernden Busteilnehmer über den Bus veranschaulicht. Im Block 2000 initiiert der anfordernde Busteilnehmer die Schreib- oder Invalidierungstransaktion über den Bus.

Während der Snoop-Phase der Schreib- oder der Invalidierungstransaktion im Entscheidungsblock 2002 tastet der anfordernde Busteilnehmer den Zustand des DEFER- und des HITM-Signals auf dem Bus ab. Wenn im Entscheidungsblock 2002 das DEFER-Signal angelegt und das HITM-Signal nicht angelegt ist, dann geht die Steuerung zum Block 2006 weiter. Andernfalls geht die Steuerung zum Block 2004 weiter. Im Block 2004 führt der anfordernde Busteilnehmer normale Cache-Speicherzustandsübergänge aus, da die Schreib- oder Invalidierungstransaktion geordnet beendet wird.

Im Block 2006 setzt der anfordernde Busteilnehmer den Snoop-Besitz für die von der Schreib- oder der Invalidierungstransaktion spezifizierte Cache-Speicherzeile nicht voraus. Im Entscheidungsblock 2008 führt der anfordernde Busteilnehmer eine Prüfoperation im Hinblick auf eine verzögerte Antwort während der Antwortphase der Schreib- oder der Invalidierungstransaktion aus. Wenn im Entscheidungsblock 2008 keine verzögerte Antwort angezeigt wird, dann geht die Steuerung zum Block 2010 weiter. Im Block 2010 versucht der anfordernde Busteilnehmer die Schreib- oder Invalidierungstransaktion erneut, wenn der adressierte Busteilnehmer während der Antwortphase der Schreib- oder Invalidierungstransaktion einen Neuversuch angezeigt hat.

Wenn im Entscheidungsblock 2008 eine verzögerte Antwort angezeigt wird, dann geht die Steuerung zum Block 2012 weiter.

Der anfordernde Busteilnehmer wartet im Block 2012 auf eine verzögerte Antworttransaktion auf dem Bus.

Wenn im Entscheidungsblock 2014 das DEFER-Signal während der Snoop-Phase der verzögerten Antworttransaktion angelegt ist, dann geht die Steuerung zum Block 2016 weiter. Im Block 2016 führt der anfordernde Busteilnehmer keine Cache-Speicherzustandsänderungen für die von der Schreib- oder der Invalidierungstransaktion spezifizierte Cache-Speicherzeile aus. Danach versucht der anfordernde Busteilnehmer im Block 2018 die Schreib- oder Invalidierungstransaktion über den Bus erneut.

Wenn das DEFER-Signal während der Snoop-Phase der verzögerten Antworttransaktion im Entscheidungsblock 2014 nicht angelegt ist, dann geht die Steuerung zum Entscheidungsblock 2020 weiter. Der anfordernde Busteilnehmer bestimmt im Entscheidungsblock 2020, ob das HITM-Signal während der Snoop-Phase der verzögerten Antworttransaktion angelegt ist. Wenn das HITM- Signal im Entscheidungsblock 2020 nicht angelegt ist, dann geht die Steuerung zum Block 2022 weiter. Im Block 2022 ändert der anfordernde Busteilnehmer den Cache-Speicherzustand für die Cache-Speicherzeile der Schreib- oder Invalidierungstransaktion in Abhängigkeit von den SNOOP-Ergebnissen in den exklusiven Zustand oder den modifizierten Zustand.

Wenn das HITM-Signal während der Snoop-Phase im Entscheidungsblock 2020 angelegt ist, dann geht die Steuerung zum Block 2024. Im Block 2024 liest der anfordernde Busteilnehmer die Cache-Speicherzeile während der Datenphase der verzögerten Antworttransaktion. Danach verschmilzt der anfordernde Busteilnehmer im Block 2026 die zurückgegebene Cache-Speicherzeile mit internen Daten und schreibt die vereinigte Cache-Speicherzeile in den internen Cache-Speicher des anfordernden Busteilnehmers zurück.

Fig. 21 zeigt ein Ablaufdiagramm, das die Schritte zum Ausführen einer Transaktion gemäß einem Ausführungsbeispiel der Erfindung beschreibt. Zu Beginn im Schritt 2101, führt der externe Bus eine Snoop-Operation aus. Als nächstes wird im Schritt 2102 bestimmt, ob eine Speichertransaktion auf dem externen Bus aufgetreten ist. Falls dies zutrifft, wird der Schritt 2101 wiederholt. Andernfalls wird im Schritt 2103 bestimmt, ob eine Ladeoperation zur gleichen Adresse aufgetreten ist. Wenn keine Ladeoperation zur gleichen Adresse aufgetreten ist, wird der Schritt 2101 wiederholt. Andernfalls werden die Ladeoperation und das spekulative Verfahren im Schritt 2104 abgebrochen. Die Ausführung wird dann im Schritt 2105 von der Ladeoperation an neu gestartet.

Fig. 22 zeigt ein Ablaufdiagramm, das die Schritte zeigt, die bei einem Ausführungsbeispiel der Erfindung ausgeführt werden. Zu Beginn, im Schritt 2205, gibt ein Teilnehmer an dem Prozessor-Speicher-Bus eine Anforderung auf den Bus aus, die an einen anderen Teilnehmer an dem Bus oder vielleicht an eine Einrichtung an dem System-I/O-Bus gerichtet ist. Die Anforderung wird in der Anforderungsphase ausgegeben, nachdem dem Prozessor während der Zuteilungsentscheidungsphase der Bus zugeteilt wurde. Wenn keine Fehler auftreten, die einen Abbruch der Anforderung in der Fehlerphase erfordern, führen alle Teilnehmer an dem Bus eine Snoop-Suchfunktion in der Snoop- Phase im Schritt 2210 aus.

Während der Snoop-Phase bestimmt jeder eine Snoop-Suchfunktion ausführende Teilnehmer, ob er eine der Anforderung entsprechende Cache-Speicherzeile in einem modifizierten Zustand aufweist (Schritt 2215). Wenn kein Teilnehmer an dem Bus eine modifizierte Kopie der Cache-Speicherzeile aufweist, dann nimmt jeder Teilnehmer auf dem Bus das Signal HITM# zurück und legt entweder das Signal HIT# an oder nimmt dieses zurück (Schritt 2216). In einigen Situationen können die Cache-Speicherzeilen von Teilnehmern in einem geteilten Zustand sein, und zwar in Abhängigkeit von der Natur der Anforderung; diese Teilnehmer legen ein HIT#-Signal an. Alle anderen Teilnehmer nehmen ein HIT#-Signal zurück. Jeder Teilnehmer auf dem Bus ändert dann den Zustand seiner Cache-Speicherzeile in seinen Ziel-Cache- Speicherzustand (Schritt 2220). Dieser Ziel-Cache-Speicherzustand hängt von der Natur der im Schritt 2205 ausgegebenen und oben detaillierter erörterten Anforderung ab. Der Prozessor empfängt dann von dem Zielteilnehmer und der Speichersteuereinrichtung in der Antwortphase im Schritt 2225 eine Antwort. Falls erforderlich (z. B. bei einer Leseanforderung) empfängt der Prozessor außerdem Daten von dem Zielteilnehmer in der Datenübertragungsphase.

Wenn jedoch ein eine Snoop-Suchfunktion ausführender Teilnehmer eine modifizierte Kopie der zugehörigen Cache-Speicherzeile aufweist, dann legt der Prozessor ein HITM#-Signal während der Snoop-Phase im Schritt 2230 an. Außerdem nehmen alle anderen Teilnehmer auf dem Bus ein HIT#-Signal zurück. Der Prozessor nimmt das HIT# zurück, da bei diesem Ausführungsbeispiel ein Prozessor beim normalen Betrieb ein HIT# zurücknimmt, wenn er ein HITM# anlegt. Alle anderen Teilnehmer nehmen das HIT# zurück, da kein anderer Teilnehmer eine gültige Kopie der Cache-Speicherzeile aufweisen kann, wenn der Prozessor eine modifizierte Kopie hat. Alle Teilnehmer auf dem Bus überwachen die HIT#- und die HITM#-Signale. Das HITM#-Signal von dem Prozessor informiert sowohl den Prozessor als auch die Speicher-Steuereinrichtung, daß der Prozessor die jüngste Version der angeforderten Cache-Speicher-Zeile hat, und daß jeder Zugriff zu der Cache-Speicherzeile daher die in dem Prozessor enthaltene Kopie der Cache-Speicherzeile einbeziehen sollte. Die Antwort von dem Prozessor und der Speicher-Steuereinrichtung auf das HITM#-Signal hängt von der Natur der Anforderung, wie oben detaillierter beschrieben, ab.

Als nächstes muß jeder Teilnehmer an dem Bus den Zustand seiner Cache-Speicherzeile in seinen Ziel-Cache-Speicherzustand ändern (Schritt 2235). Dieser Ziel-Cache-Speicherzustand hängt von der Natur der im Schritt 2205 ausgegebenen Anforderung ab und wird im folgenden detaillierter beschrieben.

Der anfordernde Teilnehmer empfängt während der Antwortphase im Schritt 2240 eine Antwort. Der Inhalt der Antwort hängt von der anfänglichen Anforderung ab, davon, ob der Zielteilnehmer antworten kann und ob ein HITM#-Signal von einem Teilnehmer an den Bus angelegt wurde. Wenn das HITM#-Signal von dem Prozessor angelegt wurde, dann werden Daten von dem Prozessor während der Datenübertragungsphase auf den Bus gesendet. Die Speichersteuereinrichtung und/oder der Prozessor können dann die Daten latch-speichern oder von dem Bus wegnehmen. Wie die Speichersteuereinrichtung und/oder der Prozessor die Daten verwenden, hängt von der ursprünglichen Anforderung ab, wie im folgenden detaillierter beschrieben wird.

Der Prozessor sendet die ganze Cache-Speicherzeile in der Datenübertragungsphase im Schritt 2245 auf den Bus, nachdem er das HITM#-Signal angelegt hat. Diese Aktion von dem Prozessor wird als "implizite Rückschreib-Datenübertragung" bezeichnet. Die implizite Rückschreib-Datenübertragung wird von einem Prozessor in der Datenübertragungsphase einer Transaktion ausgeführt, wenn dieser Prozessor ein HITM#-Signal während der Snoop-Phase für die Transaktion anlegt.

Fig. 23 zeigt ein Ablaufdiagramm, das die Schritte während einer Leseanforderung in dem System für ein Ausführungsbeispiel der Erfindung zeigt. Während der Anforderungsphase gibt der anfordernde Prozessor eine Anforderung auf den Bus (Schritt 2305). Die in Fig. 23 dargestellte Anforderung ist eine auf den Hauptspeicher gerichtete Leseanforderung. Wie oben beschrieben, führen alle Teilnehmer an dem Bus eine Snoop-Suchfunktion im Schritt 2310 aus, um festzustellen, ob ein Teilnehmer eine Kopie der angeforderten Cache-Speicherzeile in einem modifizierten Zustand aufweist (Schritt 2315).

Falls kein Teilnehmer an dem Bus eine modifizierte Kopie der Cache-Speicherzeile aufweist, hängen die folgenden Schritte davon ab, ob irgendein Teilnehmer eine in einem gültigen Zustand befindliche Kopie der Cache-Speicherzeile hat (Schritt 2320). Wenn ein Teilnehmer eine in einem gültigen Zustand befindliche Cache-Speicherzeile aufweist, dann legt der Teilnehmer ein HIT#-Signal an und nimmt ein HITM#-Signal zurück, Schritt 2325. Alle Teilnehmer ohne eine gültige Kopie nehmen sowohl das HIT#- als auch das HITM#-Signal zurück. Auf diese Weise wissen die Teilnehmer an dem Bus, daß ein oder mehrere Teilnehmer eine gültige Kopie der Cache-Speicherzeile aufweisen, daß aber kein Teilnehmer eine modifizierte Kopie der Cache-Speicherzeile hat. Daher ändert jeder Teilnehmer an dem Bus mit einer gültigen Kopie der Cache-Speicher-Zeile den Zustand dieser Cache-Speicherzeile in den geteilten Zustand (Schritt 2330). Der anfordernde Teilnehmer ändert seinen Zustand für diese Cache-Speicherzeile auch in den geteilten Zustand, da der Prozessor eine gültige Kopie der Cache-Speicherzeile in der Datenübertragungsphase erhalten wird, wie im folgenden beschrieben wird.

Bei einem alternativen in Fig. 24 dargestellten Ausführungsbeispiel ändert jeder Teilnehmer in Abhängigkeit von der ursprünglichen Leseanforderung den Zustand in seinen Zielzustand. Wie in Fig. 24 dargestellt, hängt der Zielzustand davon ab, ob die ursprüngliche Anforderung eine Lesezuweisungsanforderung war (Schritt 2428). Der Prozessor kann beispielsweise keine Lesezuweisung anfordern, um anzuzeigen, daß er in seinem Cache-Speicher keine Kopie der Cache-Speicherzeile hält. Wenn der Prozessor eine Lesezuweisung anfordert, dann ändert jeder Teilnehmer an dem Bus mit einer gültigen Kopie der Cache-Speicherzeile, einschließlich dem Prozessor, den Zustand dieser Cache-Speicherzeile in den geteilten Zustand (Schritt 2431). Wenn der Prozessor jedoch keine Lesezuweisung anfordert, dann hält jeder Teilnehmer an dem Bus seinen Cache-Speicherzustand für diese Cache-Speicherzeile aufrecht (Schritt 2432). Auf diese Weise bleibt ein im exklusiven Zustand befindlicher Teilnehmer in diesem Zustand und Teilnehmer im geteilten Zustand bleiben im geteilten Zustand.

Es wird erneut auf den Schritt 2320 in dem Ausführungsbeispiel gemäß Fig. 23 Bezug genommen. Wenn kein Teilnehmer an dem Bus eine gültige Kopie der Cache-Speicherzeile aufweist, dann nehmen alle Teilnehmer sowohl das HIT#- als auch das HITM#- Signal im Schritt 2335 zurück. Auf diese Weise ändert der Prozessor seine Kopie der Cache-Speicherzeile in den exklusiven Zustand, da er die Cache-Speicherzeile von der Speichersteuereinrichtung in der Datenübertragungsphase empfangen wird; bei allen anderen Teilnehmern bleibt die Cache-Speicherzeile im ungültigen Zustand (Schritt 2340).

Die Speichersteuereinrichtung kommt der Leseanforderung unabhängig davon nach, ob ein Teilnehmer eine gültige Kopie der Cache-Speicherzeile hat, da kein Teilnehmer eine modifizierte Kopie der angeforderten Cache-Speicherzeile aufweist. Die Speicher-Steuereinrichtung gibt dem Prozessor in der Antwortphase eine normale Antwort aus und sendet die zugehörigen Daten während der Datenübertragungsphase im Schritt 2350 auf den Bus. Der Prozessor ruft die Daten im Schritt 2375 vom Bus ab und beginnt, die Daten wie benötigt zu verwenden.

Es wird erneut auf den Schritt 2315 Bezug genommen. Wenn ein Teilnehmer an den Bus, beispielsweise ein Prozessor, eine modifizierte Kopie der angeforderten Cache-Speicherzeile aufweist, dann legt der Prozessor ein HITM#-Signal an und nimmt ein HIT#-Signal während der Snoop-Phase im Schritt 2355 zurück. Alle anderen Teilnehmer an dem Bus nehmen sowohl das HIT#- als auch das HITM#-Signal zurück. Das Anlegen des HITM#-Signals informiert die Speichersteuereinrichtung, daß ein anderer Teilnehmer an dem Bus die jüngste Version angeforderter Daten hat. Auf diese Weise weiß die Speichersteuereinrichtung, daß sie ihre Version der angeforderten Cache-Speicherzeile nicht zu dem Prozessor nicht übertragen soll.

Die Cache-Speicherzustände für diese Cache-Speicherzeile werden auch in den Prozessoren in der Snoop-Phase im Schritt 2360 aktualisiert. Ein Prozessor überträgt den Besitz der Cache-Speicherzeile an den anfordernden Prozessor. In einem Modus ändern beide Prozessoren ihre Cache-Speicherzeilenzustände in dem geteilten Zustand und stellen sicher, daß der Hauptspeicher seine Version der Cache-Speicherzeile aktualisiert. Ein Ausführungsbeispiel der vorliegenden Erfindung folgt dieser Vorgehensweise, Schritt 2360, aufgrund deren effizienter Handhabung von partiellen Rückschreibdatenübertragungen, die im folgenden detaillierter beschrieben werden. In einem anderen Modus könnte der Prozessor die Cache-Speicherzeile zu einem anderen Prozessor übertragen und seine Cache-Speicherzeile in den ungültigen Zustand ändern, während er Prozessor seine Cache-Speicherzeile in den modifizierten oder exklusiven Zustand ändert.

Wenn beide Prozessoren ihre Cache-Speicherzeilenzustände in den geteilten Zustand ändern, legt kein Prozessor in der Snoop- Phase für nachfolgende Transaktionen auf dem Bus ein HITM#- Signal für diese Cache-Speicherzeile an. Die Speichersteuereinrichtung ist dafür verantwortlich, auf alle nachfolgenden Anforderungen für diese Cache-Speicherzeile zu antworten (bis ein anderer Cache-speichernder Teilnehmer den Besitz der Cache- Speicherzeile wiedergewinnt und seinen Cache-Speicherzeilenzustand in den modifizierten Zustand ändert).

Bei einem anderen, in Fig. 25 gezeigten Ausführungsbeispiel aktualisiert jeder Teilnehmer in Abhängigkeit von der ursprünglichen Leseanforderung seinen Cache-Speicherzustand. Wie in Fig. 25 gezeigt, hängt der Zielzustand davon ab, ob die ursprüngliche Anforderung eine Lesezuweisanforderung war (Schritt 2557). Wenn der Prozessor eine Lesezuweisung anfordert, dann ändert der Teilnehmer mit einer modifizierten Kopie der Cache- Speicherzeile den Zustand dieser Cache-Speicherzeile in dem geteilten Zustand, und der Prozessor ändert seine Cache-Speicherzeile in dem geteilten Zustand (Schritt 2561). Wenn der Prozessor jedoch keine Lesezuweisung anfordert, dann ändert der Teilnehmer mit einer modifizierten Kopie der Cache-Speicherzeile diese Cache-Speicherzeile in den exklusiven Zustand und der Prozessor bleibt im ungültigen Zustand (Schritt 2562). Der Teilnehmer mit einer modifizierten Kopie der Cache-Speicherzeile bleibt nicht im ungültigen Zustand, da der Hauptspeicher eine Kopie der Cache-Speicherzeile empfängt, wie im folgenden beschrieben wird.

Es wird erneut auf das Ausführungsbeispiel gemäß Fig. 23 Bezug genommen. Für den Fachmann ist es klar, daß, obwohl der Besitz der Cache-Speicherzeile vor der tatsächlichen Übertragung der Cache-Speicherzeilendaten übertragen wird, die Cache- Speicherkonsistenz aufgrund der Pipeline-Natur des Busses erhalten bleibt. Das heißt, eine nachfolgende Anforderung kann darüber informiert werden, daß die Daten von dem Hauptspeicher selbst dann kommen können, wenn die modifizierte Version noch in dem Cache-Speicher des Prozessors ist. Zu der Zeit jedoch, zu der die Datenübertragungsphase für die nachfolgende Anforderung ansteht, sind die Daten bereits zu dem Hauptspeicher in der Datenübertragungsphase einer vorherigen Transaktion übertragen worden.

Nach dem Aktualisieren der Cache-Speicherzustände gibt die Speichersteuereinrichtung eine implizite Rückschreibantwort in der Antwortphase im Schritt 2365 an den Prozessor aus. Das Anlegen des HITM#-Signals informiert die Speichersteuereinrichtung darüber, daß sie ihre Version der Cache-Speicherzeile nicht zu dem Prozessor übertragen sollte; auf diese Weise gibt die Speichersteuereinrichtung eine implizite Rückschreibantwort anstelle einer normalen Antwort aus. Die implizite Rückschreibantwort informiert den Prozessor, daß die Anforderung nicht abgerufen wurde, sondern daß ein anderer Teilnehmer an dem Bus eine modifizierte Kopie der angeforderten Cache-Speicherzeile hat und mit den angeforderten Daten antworten wird.

Der Prozessor sendet die gesamte modifizierte Cache-Speicherzeile in der Datenübertragungsphase im Schritt 2370 auf den Bus. Bei einem Ausführungsbeispiel der vorliegenden Erfindung sendet der Prozessor in Antwort auf ein Signal von der Speichersteuereinrichtung, das anzeigt, daß der Bus zur Datenübertragung bereit ist, auf den Bus. Die Speichersteuereinrichtung gibt dieses Signal während der Antwortphase aus, wenn sie einen verfügbaren Cache-Speicherzeilenpuffer aufweist, in welchen sie die Cache-Speicherzeile eingeben kann. Wie in Fig. 23 gezeigt, nehmen sowohl die Speichersteuereinrichtung als auch der anfordernde Teilnehmer die Daten in den Schritten 2380 bzw. 2375 vom Bus. Der anfordernde Prozessor nimmt die Daten im Schritt 2375 von dem Bus und beginnt sie, wie benötigt zu verwenden.

Die Speichersteuereinrichtung nimmt die Daten ebenfalls (im Schritt 2380) vom Bus. Diese Aktion der Speichersteuereinrichtung wird als "Snarfing" der Daten ("Schnorren") bezeichnet, da die Speichersteuereinrichtung die Daten von dem Bus nimmt, die von einem anderen Teilnehmer angefordert wurden. Die Speichersteuereinrichtung schreibt die Daten dann im Schritt 2385 zum Hauptspeicher, wobei die Cache-Speicherkonsistenz aufrechtgehalten wird. Das heißt, wenn der Prozessor Daten anfordert, die in einem modifizierten Zustand in einem anderen Prozessor vorliegen, überträgt der Prozessor, wie oben beschrieben, die Daten zu dem anderen Prozessor und beide Prozessoren ändern ihre Cache-Speicherzeile in den geteilten Zustand. Der geteilte Zustand erfordert jedoch, daß der Hauptspeicher auch die jüngste Version der Cache-Speicherzeile enthält. Auf diese Weise haben durch die Snarf-Operation der Cache-Speicherzeile und das Schreiben der Cache-Speicherzeile in den Hauptspeicher sowohl die Prozessoren als auch der Hauptspeicher die jüngste Kopie der Cache-Speicherzeile.

In einer Mehrbus-Hierarchie dient der Gruppen-Manager als Speichersteuereinrichtung an dem Bus aus- den in der mit Fig. 23 zusammenhängenden Beschreibung genannten Gründen. Beispielsweise führt der Gruppen-Manager eine Snarf-Operation der Daten weg vom Bus aus und aktualisiert seinen Cache-Speicher eher, als die die Daten mit der Snarf-Operation wegnehmende Speichersteuereinrichtung. In einer solchen Situation verzögert der Gruppen-Manager die Anforderung entweder oder wiederholt sie, abhängig davon, ob der Besitz des Busses der nächsten Ebene verfügbar ist. In dieser Situation wird die globale Transaktionsüberwachung, die im Schritt 2340 abgelaufen wäre, sowie das Datensenden auf den Bus im Schritt 2350 in der oben beschriebenen Weise verzögert.

Fig. 26 zeigt ein Ablaufdiagramm, das die von einem Ausführungsbeispiel der Erfindung während einer Schreiboperation durchgeführten Schritte beschreibt. Der anfordernde Prozessor gibt während der Anforderungsphase im Schritt 2605 eine Anforderung auf den Bus. Die in Fig. 26 gezeigt Anforderung ist eine auf den Hauptspeicher gezielte Schreiboperation. Alle anderen Teilnehmer an dem Bus führen im Schritt 2610 eine Snoop-Suchfunktion aus, um zu bestimmen, ob ein Teilnehmer eine in einem modifizierten Zustand befindliche Kopie der Cache-Speicherzeile hat, in die geschrieben wird, Schritt 2615.

Außer, daß Teilnehmer eine Snoop-Suchfunktion ausführen, sendet der Prozessor seine Schreibdaten im Schritt 2620 auf den Bus. Die Schreibdaten werden von der Speichersteuereinrichtung im Schritt 2625 empfangen. Wie in Fig. 26 dargestellt, findet diese Schreibdatenübertragung von dem anfordernden Prozessor unabhängig davon statt, ob ein Teilnehmer an dem Bus eine modifizierte oder gültige Kopie der Cache-Speicherzeile aufweist. Nach einem Ausführungsbeispiel der Erfindung sendet der Prozessor die Schreibdaten auf den Bus, wenn er in der Snoop- Phase ein Signal von der Speichersteuereinrichtung empfängt, das anzeigt, daß die Speichersteuereinrichtung zur Datenübertragung bereit ist.

In dem Fall, daß kein Teilnehmer an dem Bus eine modifizierte Kopie der Cache-Speicherzeile aufweist, nehmen alle Teilnehmer an dem Bus sowohl das HIT#- als auch das HITM#- Signal im Schritt 2630 zurück. Das Vorliegen der Schreiboperation zeigt allen eine Snoop-Operation ausführenden Teilnehmern, daß ihre Kopie der Cache-Speicherzeile invalidiert werden muß. Alle eine Snoop-Operation ausführenden Teilnehmer ändern auf diese Weise den Zustand ihrer Cache-Speicherzeile in den ungültigen Zustand, Schritt 2635. Die Wegnahme der HIT#- und HITM#- Signale zeigt der Speichersteuereinrichtung an, daß sie der Schreibanforderung nachkommen muß, da in keinem Cache-Speicher eines Teilnehmers eine gültige oder modifizierte Kopie der Cache-Speicherzeile vorliegt. Die Speichersteuereinrichtung gibt daher dem Prozessor in der Antwortphase im Schritt 2640 eine normale Antwort aus. Die Speichersteuereinrichtung, die die Daten im Schritt 2625 empfangen hat, schreibt die Daten dann im Schritt 2645 in den Hauptspeicher, wobei sie die Schreiboperation beendet.

Bei einem anderen, in Fig. 27 dargestellten Ausführungsbeispiel liegt jeder Teilnehmer ein HIT#-Signal an oder nimmt dieses zurück und aktualisiert seinen Cache-Speicherzustand, unabhängig von der ursprünglichen Leseanforderung (Schritte 2728). Wenn der Prozessor eine Schreibzuordnung anfordert, dann nehmen alle Teilnehmer die HIT#- und HITM#-Signale im Schritt 2731 zurück. Alle eine Snoop-Operation ausführenden Teilnehmer ändern außerdem im Schritt 2732 den Zustand ihrer Cache-Speicherzeile in den ungültigen Zustand. Wenn der Prozessor jedoch keine Schreibzuordnung anfordert, dann nimmt ein Teilnehmer oder nehmen mehrere Teilnehmer mit einer geteilten oder exklusiven Kopie der Cache-Speicherzeile die Daten mit einer Snarf- Operation weg, legt bzw. legen ein HIT#-Signal an und nimmt bzw. nehmen ein HITM#-Signal zurück (Schritt 2737). Der bzw. die Teilnehmer, der bzw. die ein HIT#-Signal angelegt (hat) haben, änder(t/n) den Zustand (seiner) ihrer Cache-Speicherzeile nicht; alle anderen Teilnehmer an dem Bus gehen in den ungültigen Zustand über (Schritt 2739). In einem Modus führt der Teilnehmer bzw. führen die Teilnehmer keine Snarf-Operation an den Daten aus und (legt)legen ein HIT#-Signal an, wenn (er) sie keine gültige Kopie der Cache-Speicherzeile (wünscht)wünschen.

Es wird erneut auf den Schritt 2615 des Ausführungsbeispiels gemäß Fig. 26 Bezug genommen. Wenn ein Teilnehmer an dem Bus, beispielsweise der Prozessor, eine modifizierte Kopie der angeforderten Cache-Speicherzeile hat, dann legt der Prozessor ein HITM#-Signal an und nimmt ein HIT#-Signal während der Snoop-Phase zurück (Schritt 2650). Da der Prozessor eine modifizierte Kopie der Cache-Speicherzeile aufweist, legen alle anderen Teilnehmer außerdem ein HIT#-Signal an den Bus. Das Anlegen eines HITM#-Signals informiert die Speichersteuereinrichtung, daß ein anderer Teilnehmer an dem Bus die jüngste Version der angeforderten Daten hat. Auf diese Weise weiß die Speichersteuereinrichtung, daß das Ausführen der Speicheroperation durch den Prozessor allein die Cache-Speicherkonsistenz nicht aufrechterhalten kann.

Wenn die Schreiboperation durch den Prozessor eine partielle Schreibdatenübertragung ist, dann ist durch diese Schreiboperation beispielsweise nicht die gesamte Cache-Speicherzeile modifiziert. Wenn eine jüngere Version der Cache-Speicherzeile in dem Cache-Speicher des Prozessors existiert, können Teile der Cache-Speicherzeile in dem Prozessor, in die von dem anderen Prozessor nicht geschrieben wurde, von früheren Schreiboperationen modifiziert worden sein. Auf diese Weise würde der Hauptspeicher eine unrichtige Kopie der Daten selbst dann enthalten, wenn er glaubt, daß er die jüngste Kopie hat, sofern die Cache-Speicherzeile in dem Prozessor nicht berücksichtigt würde.

Die Zustände der Cache-Speicherzeile werden in der Snoop- Phase in der oben beschriebenen Weise aktualisiert. Alle eine Snoop-Operation ausführenden Teilnehmer an dem Bus ändern ihre Cache-Speicherzeilen in den ungültigen Zustand im Schritt 2655.

Die Speichersteuereinrichtung hat das von dem Prozessor im Schritt 2650 ausgegebene HITM#-Signal überwacht. Auf diese Weise weiß die Speichersteuereinrichtung, daß eine modifizierte Version der Cache-Speicherzeile in einem Cache-Speicher eines Teilnehmers vorliegt. In Antwort darauf speichert die Prozessorsteuereinrichtung die im Schritt 2625 empfangenen Schreibdaten temporär in dem Snarfing-Puffer und hält die Daten in dem Snarfing-Puffer, bis der Rest der Cache-Speicherzeile, wie unten beschrieben wird, über den Bus übertragen wird. Außerdem gibt die Speichersteuereinrichtung eine implizite Rückschreibantwort an den Prozessor im Schritt 2660 aus. Die implizite Rückschreibantwort informiert den Prozessor, daß ein anderer Teilnehmer an dem Bus eine modifizierte Kopie der Cache-Speicherzeile aufweist und daß diese modifizierte Cache- Speicherzeile während der Datenübertragungsphase auf den Bus gesendet wird.

Bei einem anderen in Fig. 28 gezeigten Ausführungsbeispiel kann der Teilnehmer, der das HITM#-Signal angelegt hat, die Schreibdaten auch von dem Bus wegnehmen. Ob der Prozessor die Daten von dem Bus nimmt, hängt von der verwendeten Schreibzuordnungspolitik ab (Schritt 2852). Das heißt, wenn der Prozessor keine Schreibzuordnung anfordert, dann nimmt der andere Prozessor die Daten von dem Bus und schreibt die Daten in seinen Cache-Speicher (Schritt 2856). Der Prozessor ändert außerdem seinen Zustand für die Cache-Speicherzeile in den exklusiven Zustand. Wenn der Prozessor jedoch eine Schreibzuordnung anfordert, dann nimmt der andere Prozessor die Daten nicht von dem Bus und ändert seine Cache-Speicherzeile in den ungültigen Zustand (Schritt 2855).

Es wird erneut auf das Ausführungsbeispiel gemäß Fig. 26 Bezug genommen. Der Hauptspeicher enthält die jüngste Version der Cache-Speicherzeile. Dies geschieht so, daß der Hauptspeicher aktualisiert wird, anstelle daß kontinuierlich die Teilnehmer-Speicher aktualisiert werden.

Der Prozessor gibt daher in der Datenübertragungsphase die gesamte modifizierte Cache-Speicherzeile auf den Bus (Schritt 2665). Diese Datenübertragung ist die implizite Rückschreibdatenübertragung. Die implizite Rückschreibdatenübertragung muß durchgeführt werden, damit die Speichersteuereinrichtung mit dem zusätzlichen Teil der Cache-Speicherzeile versorgt wird, in den von dem Prozessor möglicherweise nicht geschrieben wurde. Bei einem Ausführungsbeispiel der Erfindung sendet der andere Prozessor die Cache-Speicherzeile in Antwort auf ein zweites, die Bereitschaft zur Datenübertragung anzeigendes Signal von der Speichersteuereinrichtung auf den Bus. Die Speichersteuereinrichtung sendet dieses Signal in der Antwortphase, wenn sie einen verfügbaren Cache-Speicherzeilen-Puffer hat, in den sie die Cache-Speicherzeile eingeben kann.

Die Speichersteuereinrichtung nimmt die modifizierte Cache- Speicherzeile von der impliziten Rückschreibdatenübertragung vom Bus weg (Schritt 2670). In einem Modus werden die Daten in einem Cache-Speicherzeilen-Puffer in der Speichersteuereinrichtung temporär gespeichert. Die Daten werden dann mit dem in dem oben beschriebenen Snarfing-Puffer gespeicherten Daten vereinigt, und die vereinigte Cache-Speicherzeile wird im Schritt 2675 zu dem Hauptspeicher geschrieben. Um die Vereinigung auszuführen, kombiniert die Speichersteuereinrichtung den Teil der Cache-Speicherzeile in dem Snarfing-Puffer mit den von der impliziten Rückschreibdatenübertragung empfangenen Daten, die nicht mit dem aktualisierten Teil in dem Snarfing-Puffer überlappen.

Wichtig ist, daß obwohl sich die obige Beschreibung auf partielle Schreibdatenübertragung richtet, die verwendeten Schritte genauso ihre Anwendung bei einer nichtpartiellen Schreibdatenübertragung finden. Das heißt, wenn die gesamte Cache-Speicherzeile von einer Schreiboperation von dem Prozessor aktualisiert wird, dann wir die gesamte Cache-Speicherzeile in dem Snarfing-Puffer in der Speichersteuereinrichtung gespeichert. Wenn die Speichersteuereinrichtung danach die Verschmelzung im Schritt 2665 ausführt, sind die in dem Snarfing-Puffer gespeicherten Daten einfach das Ergebnis der Verschmelzung; keine Daten der impliziten Rückschreibdatenübertragung werden bei der Verschmelzung verwendet.

Bei einem Ausführungsbeispiel ändert der anfordernde Prozessor seinen Zustand für die Cache-Speicherzeile in den ungültigen Zustand in der Snoop-Phase. Bei einem anderen Ausführungsbeispiel ändert der Prozessor seinen Zustand für die Cache-Speicherzeile in dem geteilten oder dem exklusiven Zustand, und zwar in Abhängigkeit davon, ob ein anderer Teilnehmer auch eine Kopie der Cache-Speicherzeile hat. Bei einem Modus nimmt der Prozessor die impliziten Rückschreibdaten mit einer Snarf-Operation von dem Bus, wenn ein HITM#-Signal während der Snoop-Phase angelegt war. Der Prozessor vereinigt die Daten dann mit seinen ursprünglichen Schreibdaten und aktualisiert seinen Cache-Speicher mit der vereinigten Cache-Speicherzeile. Der Prozessor würde auf diese Weise den Zustand für seine Cache-Speicherzeile in den exklusiven Zustand ändern. Wenn kein HITM#-Signal angelegt war, ändert der Prozessor in einem anderen Modus seinen Cache-Speicherzeilen-Zustand in den exklusiven Zustand oder den geteilten Zustand, wenn andere Teilnehmer an dem Bus eine gültige Kopie der Cache-Speicherzeile enthalten.

Der Gruppen-Manager dient als Speichersteuereinrichtung an dem Bus aus den in Zusammenhang mit Fig. 26 erörterten Gründen. Beispielsweise empfängt der Gruppen-Manager Schreibdaten von dem Prozessor, vereinigt sie mit der impliziten Rückschreibdatenübertragung von einem anderen Prozessor und speichert die vereinigte Cache-Speicherzeile in seinem eigenen Cache-Speicher. Der Gruppen-Manager hätte auf diese Weise eine modifizierte Kopie der Cache-Speicherzeile für alle nachfolgenden Anforderungen zu dieser Cache-Speicherzeile. Es könnte die Situation auftreten, daß die Cache-Speicherzeile zu der der Prozessor schreibt in der Gruppe ungültig ist, und daß auf den Bus der nächsten Ebene zugegriffen werden muß. In einer solchen Situation verzögert der Gruppen-Manager die Anforderung oder er versucht sie erneut, was davon abhängt, ob der Besitz des Busses der nächsten Ebene verfügbar ist. In dieser Situation wird die globale Transaktionsüberwachung, die in Schritt 2635 stattfindet, sowie der Schreibschritt 2645 in der oben beschriebenen Weise verzögert.

Wie in den Fig. 22 bis 26 gezeigt, verhält sich der eine Snoop-Operation aus führende Teilnehmer mit einer modifizierten Kopie der angeforderten Cache-Speicherzeile bei einer Leseanforderung und einer Schreibanforderung in ähnlicher Weise. Das heißt, der eine Snoop-Operation ausführende Teilnehmer legt ein HITM#-Signal an und nimmt ein HIT#-Signal zurück und sendet die zugehörige Cache-Speicherzeile zu der richtigen Zeit auf den Bus. Aufgrund dieser ähnlichen Handhabungsweise verwaltet ein Ausführungsbeispiel der Erfindung Schreibdatenübertragungen, partielle Schreibdatenübertragungen und Leseanforderungen mit einer minimalen Logikkomplexität in jedem Teilnehmer.

Fig. 29 zeigt ein Ablaufdiagramm, das die von einem Ausführungsbeispiel der Erfindung während einer Invalidierungs-Cache- Speicherzeilen-Anforderung ausgeführten Schritte beschreibt. Wie in Fig. 22 beschrieben wurde, gibt der anfordernde Teilnehmer eine Anforderung auf den Bus während der Anforderungsphase im Schritt 2905 aus. Die in Fig. 29 dargestellte Anforderung ist eine Invalidierungsanforderung für eine Cache-Speicherzeile. Das heißt, der Prozessor gibt eine Anforderung zum Invalidieren einer bestimmten Cache-Speicherzeile in jedem anderen Cache-Speicher aus. Dies könnte beispielsweise geschehen, wenn der Prozessor eine Kopie der Cache-Speicherzeile in seinem Cache-Speicher im geteilten Zustand aufweist und zu dieser schreiben möchte; der Prozessor kann alle anderen Cache- Speicherzeilen invalidieren und dann seinen Cache-Speicherzustand in den modifizierten Zustand aktualisieren und in die Cache-Speicherzeile in seinem eigenen Cache-Speicher schreiben.

Alle Teilnehmer an dem Bus führen, wie oben beschrieben, eine Snoop-Operation im Schritt 2910 aus, um zu bestimmen, ob ein Teilnehmer eine Kopie der Cache-Speicherzeile in einem modifizierten Zustand aufweist (Schritt 2915). Wenn kein Teilnehmer an dem Bus eine modifizierte Kopie der Cache-Speicherzeile aufweist, nimmt jeder Teilnehmer die HIT#- und HIM#- Signale im Schritt 2920 zurück. Die Invalidierungsanforderung wird dann für jeden Teilnehmer an dem Bus mit Ausnahme des Prozessor fortgesetzt, wobei die Kopie der Cache-Speicherzeile jedes Teilnehmers invalidiert wird, und der Cache-Speicherzeilen-Besitz auf den Prozessor übergeht (d. h. die Cache-Speicherzeile in dem Prozessor wird in den modifizierten Zustand geändert) (Schritt 2925). Die Speichersteuereinrichtung gibt dann eine normale Beendigungsantwort an den Prozessor im Schritt 2930 aus, und die Verarbeitung geht weiter.

Wenn jedoch ein Teilnehmer an dem Bus, beispielsweise ein anderer Prozessor, eine modifizierte Kopie der angeforderten Cache-Speicherzeile hat, dann legt der andere Prozessor ein HITM#-Signal an und nimmt ein HIT#-Signal während der Snoop- Phase im Schritt 2935 zurück. Alle anderen Teilnehmer an dem Bus nehmen außerdem ein HIT#-Signal während der Snoop-Phase zurück. Das Anlegen des HITM#-Signals informiert den Prozessor, daß ein anderer Teilnehmer an dem Bus derzeit den Besitz der Cache-Speicherzeile hat. Daher muß der Besitz der Cache-Speicherzeile übertragen werden.

Wie oben, werden die internen Cache-Speicherzustände der Prozessoren in der Snoop-Phase modifiziert. Die Cache-Speicherzeile in dem Prozessor wird daher in den modifizierten Zustand geändert und die Cache-Speicherzeile in dem anderen Prozessor wird in den ungültigen Zustand geändert (Schritt 2940). Daher erhält der Prozessor im Schritt 2940 den Besitz der Cache- Speicherzeile selbst, wenn die aktuellen Daten noch nicht übertragen wurden.

Das Aktualisieren der Cache-Speicherzustände in der Snoop- Phase garantiert, daß modifizierte Daten nicht verloren gehen. Wenn die nächste Anforderung an den Bus ein Zugriff zu derselben Cache-Speicherzeile ist, legt der Prozessor daher ein HITM#-Signal an, da er den Besitz der Cache-Speicherzeile hat. Zu der Zeit, zu der die Datenübertragung für diese nächste Anforderung stattfinden muß, hat der Prozessor, wie oben ausgeführt wurde, die jüngste Version der Cache-Speicherzeile in seinem Cache-Speicher.

Der andere Prozessor gibt in der Datenübertragungsphase eine implizite Rückschreibdatenübertragung der Cache-Speicherzeile aus (Schritt 2945). Diese Übertragung umfaßt die gesamte zu dem Prozessor übertragene Cache-Speicherzeile. Bei einem Ausführungsbeispiel der Erfindung gibt der andere Prozessor die Cache-Speicherzeile in Abhängigkeit von einem die Bereitschaft zur Datenübertragung anzeigenden Signal von der Speichersteuereinrichtung auf den Bus. Die Speichersteuereinrichtung gibt dieses Signal während der Antwortphase aus, wenn sie einen verfügbaren Cache-Speicherzeilen-Puffer hat, in den sie die Cache-Speicherzeile eingeben kann.

Der Prozessor nimmt die Daten vom Bus und die Speichersteuereinrichtung nimmt die Daten mit einer Snarf-Operation vom Bus (Schritt 2950). Die Cache-Speicherzeile in dem Prozessor befindet sich nun im modifizierten Zustand und der Hauptspeicher hat außerdem die jüngste Version der modifizierten Cache-Speicherzeile. Alternativ könnte der Hauptspeicher seinen Cache-Speicherzustand in den exklusiven Zustand ändern, da der Hauptspeicher eine gültige Kopie aufweist. Wie oben in Bezug auf die Fig. 23 bis 28 beschrieben wurde, dient in einer Mehrbus-Hierarchie der Gruppen-Manager für die anhand von Fig. 29 erörterten Zwecke als Speichersteuereinrichtung an dem Bus: Beispielsweise nimmt der Gruppen-Manager im Schritt 2950 Daten vom Bus. Zur Invalidierung einer Cache-Speicherzeile wird die Cache- Speicherzeile für alle Cache-Speicher in allen Gruppen invalidiert. Es kann auf diese Weise der Fall auftreten, daß die Cache-Speicherzeile, die invalidiert wird, auch in der Gruppe enthalten ist und daß zu ihrer Invalidierung auf den Bus der nächsten Ebene zugegriffen werden muß. In einer solchen Situation verzögert der Gruppen-Manager die Anforderung entweder oder er versucht sie erneut, was davon abhängt, ob der Besitz des Busses der nächsten Ebene verfügbar ist. Wie oben beschrieben, wird in dieser Situation die globale Transaktionsüberwachung, die im Schritt 2925 stattgefunden hätte, verzögert.

Bei einem anderen Ausführungsbeispiel der vorliegenden Erfindung vereinigt der eine Snoop-Operation aus führende Teilnehmer, (d. h. der Teilnehmer der eine modifizierte Kopie der angeforderten Cache-Speicherzeile aufweist) anstelle der Speichersteuereinrichtung die Daten. In dem Fall einer partiellen Schreibdatenübertragung nimmt ein Prozessor die partiellen Schreibdaten von dem Bus. Der Prozessor überträgt die Cache- Speicherzeile dann von seinem eigenen Cache-Speicher in einen temporären Speicherpuffer und vereinigt die Cache-Speicherzeile mit den partiellen Schreibdaten. Auf diese Weise hält der Prozessor eine modifizierte Kopie der Cache-Speicherzeile aufrecht und nimmt von der Speichersteuereinrichtung die Verantwortung für die Datenverschmelzung.

Bei Beendigung der Verschmelzung hat der Prozessor zwei Möglichkeiten: der Cache-Speicher für den Prozessor kann aktualisiert werden oder die Cache-Speicherzeile kann in den Hauptspeicher geschrieben werden. Wenn der Prozessor den Cache- Speicher aktualisiert, führt dies bei einem Ausführungsbeispiel der Erfindung dazu, daß der temporäre Puffer aktualisiert und der Pufferinhalt nur dann zu dem Cache-Speicher geschrieben wird, wenn ein Fehlversuch zu dem temporären Puffer vorliegt. Auf diese Weise antwortet der Prozessor effizient auf mehrere Anforderungen zu der gleichen Cache-Speicherzeile.

Die zweite Möglichkeit ist, daß der Prozessor den Hauptspeicher aktualisiert. Auf diese Weise überträgt der Prozessor bei Beendigung der Verschmelzungsoperation die Cache-Speicher- Zeile über den Bus zum Hauptspeicher. Diese Übertragung ist eine separate Transaktion und wird daher durch eine Entscheidungsoperation für den Bus ausgeführt und durch Ausgeben einer Schreibanforderung zum Speicher in der Anforderungsphase, wenn der Zugriff zum Bus gewährt ist.

Es wurde gezeigt, daß gemäß der Erfindung in einem Pipeline-Bussystem auf diese Weise die Cache-Speicherkonsistenz aufrechterhalten wird. Bei einem Ausführungsbeispiel werden Speicherzugriffe in einer einzigen Transaktion erfüllt, unabhängig, ob die zugegriffenen Daten in einer Hauptspeichereinheit des Busses oder einem Cache-Speicher in einem Teilnehmer an dem Bus enthalten sind.

Für den Fachmann ist es klar, daß, obwohl die oben beschriebenen Ausführungsbeispiele Lese-, Schreib- und Invalidierungsoperationen erörtern, die Erfindung nicht auf diese Operationen beschränkt ist.


Anspruch[de]
  1. 1. Computersystem (910) mit einem Bus (912), einem mit dem Bus gekoppelten Mehr-Ebenen-Speichersystem (L1, L2-Cache, RAM), einer mit dem Bus und dem Mehr-Ebenen-Speichersystem gekoppelten CPU (914),

    gekennzeichnet durch,

    einen Cache-Speicher-Konsistenz-Mechanismus zum Sicherstellen der Datenkonsistenz zwischen verschiedenen Ebenen von Cache-Speichern in dem Speichersystem, wobei der Cache-Speicher-Konsistenz-Mechanismus aufweist

    eine Busanforderungswarteschlange (EBRQ, 1020) zum Sicherstellen, daß Anforderungen zu einer gleichen Adresse gemäß einem vorgegebenen Speicherordnungsschema auf den Bus ausgegeben und bedient werden.
  2. 2. Computersystem nach Anspruch 1, dadurch gekennzeichnet, daß die Busanforderungswarteschlange (1020) einen FIFO-Speicher zum Einreihen externer Busanforderung aufweist.
  3. 3. Verfahren zum Betreiben eines Computersystems zur Aufrechterhaltung der Speicherkonsistenz, wobei das Computersystem einen zeitverschachtelt betriebenen (Pipeline-) externen Bus, eine oder mehrere mit dem externen Bus gekoppelte CPUs, ein mit dem externen Bus gekoppeltes, einen Hauptspeicher und eine oder mehrere Ebenen von Cache-Speichern enthaltendes Speichersystem,

    dadurch gekennzeichnet,

    daß in der bzw. den mit dem externen Bus gekoppelten CPU(s) jeweils eine Busanforderungswarteschlange vorgesehen wird,

    daß ein Programm auf der CPU bzw. den CPUs ausgeführt wird, das mehrere Speicherdatenanforderungen enthält, von denen das Programm erwartet, daß sie in einer vorgegebenen Reihenfolge bedient werden;

    daß die Speicherdatenanforderungen in einer zeitverschachtelten (Pipeline-)Reihenfolge auf den Bus ausgegeben werden;

    daß die ausgegebenen Speicherdatenanforderungen in Einträgen in die Busanforderungswarteschlange(n) eingereiht werden, um jede ausgegebene Speicherdatenanforderung betreffende Statusinformationen zu überwachen; und

    daß die Einträge zum Aufrechterhalten der Speicherkonsistenz aktualisiert werden, wobei sichergestellt wird, daß jede Anforderung aktuelle Daten empfängt, und wobei die Anforderungen in der vorgegebenen Reihenfolge bedient werden.
  4. 4. Verfahren nach Anspruch 3, wobei die CPU einen Busteilnehmer (DCU, IFU) mit einem primären (L1)-Cache-Speicher aufweist, dadurch gekennzeichnet,

    daß beim Ausgeben von dem Busteilnehmer eine vorgegebene Daten spezifizierende Anforderung ausgeben wird, die anzeigt, daß nicht in dem L1-Cache-Speicher nach den vorgegebenen Daten nachgesehen wurde; und

    daß in Abhängigkeit von dem ein Nicht-Nachsehen in dem L1- Cache-Speicher anzeigenden Busteilnehmer von dem L1-Cache- Speicher zu einer späteren Zeit eine Self-Snooping-Operation ausgeführt wird.
  5. 5. Verfahren nach Anspruch 3 oder 4, wobei die Busanforderungswarteschlange einen FIFO-Speicher mit einem Anfang und einem Ende aufweist, dadurch gekennzeichnet,

    daß beim Einreihen in die Busanforderungs-Warteschlange Anforderungen an den Anfang der FIFO eingegeben werden;

    daß beim Aktualisieren die Anforderungen vom Anfang zum Ende der FIFO weitergegeben werden;

    daß nach Gleiche-Adressen-Konflikten zwischen einer aktuellen Anforderung und einer zuvor ausgegebenen Anforderung, die in die Busanforderungswarteschlange eingegeben wurde und den L2-Speicher passiert hat, gesucht wird; und

    daß die aktuelle Anforderung blockiert wird, indem sie zum Anfang der FIFO zurückgesendet wird, wenn ein Gleiche-Adressen- Konflikt gefunden wird.






IPC
A Täglicher Lebensbedarf
B Arbeitsverfahren; Transportieren
C Chemie; Hüttenwesen
D Textilien; Papier
E Bauwesen; Erdbohren; Bergbau
F Maschinenbau; Beleuchtung; Heizung; Waffen; Sprengen
G Physik
H Elektrotechnik

Anmelder
Datum

Patentrecherche

Patent Zeichnungen (PDF)

Copyright © 2008 Patent-De Alle Rechte vorbehalten. eMail: info@patent-de.com