DE10045915A1 - Verfahren und System zum Steuern von Datenübertragungen mit physikalischer Trennung der Datenfunktionalität von der Adressen- und Steuerfunktionalität in einem verteilten Multi-Bus-Mehrprozessorsystem - Google Patents

Verfahren und System zum Steuern von Datenübertragungen mit physikalischer Trennung der Datenfunktionalität von der Adressen- und Steuerfunktionalität in einem verteilten Multi-Bus-Mehrprozessorsystem

Info

Publication number
DE10045915A1
DE10045915A1 DE10045915A DE10045915A DE10045915A1 DE 10045915 A1 DE10045915 A1 DE 10045915A1 DE 10045915 A DE10045915 A DE 10045915A DE 10045915 A DE10045915 A DE 10045915A DE 10045915 A1 DE10045915 A1 DE 10045915A1
Authority
DE
Germany
Prior art keywords
data
bus
node
address
master device
Prior art date
Legal status (The legal status is an assumption and is not a legal conclusion. Google has not performed a legal analysis and makes no representation as to the accuracy of the status listed.)
Ceased
Application number
DE10045915A
Other languages
English (en)
Inventor
Ii Manual Joseph Alvarez
Joel Roger Davidson
Sanjay Raghunath Deshpande
Peter Dau Geiger
Lawrence Joseph Powell
Praveen S Reddy
Current Assignee (The listed assignees may be inaccurate. Google has not performed a legal analysis and makes no representation or warranty as to the accuracy of the list.)
International Business Machines Corp
Original Assignee
International Business Machines Corp
Priority date (The priority date is an assumption and is not a legal conclusion. Google has not performed a legal analysis and makes no representation as to the accuracy of the date listed.)
Filing date
Publication date
Application filed by International Business Machines Corp filed Critical International Business Machines Corp
Publication of DE10045915A1 publication Critical patent/DE10045915A1/de
Ceased legal-status Critical Current

Links

Classifications

    • GPHYSICS
    • G06COMPUTING; CALCULATING OR COUNTING
    • G06FELECTRIC DIGITAL DATA PROCESSING
    • G06F15/00Digital computers in general; Data processing equipment in general
    • G06F15/16Combinations of two or more digital computers each having at least an arithmetic unit, a program unit and a register, e.g. for a simultaneous processing of several programs
    • G06F15/163Interprocessor communication
    • G06F15/173Interprocessor communication using an interconnection network, e.g. matrix, shuffle, pyramid, star, snowflake
    • G06F15/17356Indirect interconnection networks
    • G06F15/17368Indirect interconnection networks non hierarchical topologies
    • G06F15/17381Two dimensional, e.g. mesh, torus
    • GPHYSICS
    • G06COMPUTING; CALCULATING OR COUNTING
    • G06FELECTRIC DIGITAL DATA PROCESSING
    • G06F12/00Accessing, addressing or allocating within memory systems or architectures
    • G06F12/02Addressing or allocation; Relocation
    • G06F12/08Addressing or allocation; Relocation in hierarchically structured memory systems, e.g. virtual memory systems
    • G06F12/0802Addressing of a memory level in which the access to the desired data or data block requires associative addressing means, e.g. caches
    • G06F12/0806Multiuser, multiprocessor or multiprocessing cache systems
    • G06F12/0813Multiuser, multiprocessor or multiprocessing cache systems with a network or matrix configuration
    • GPHYSICS
    • G06COMPUTING; CALCULATING OR COUNTING
    • G06FELECTRIC DIGITAL DATA PROCESSING
    • G06F12/00Accessing, addressing or allocating within memory systems or architectures
    • G06F12/02Addressing or allocation; Relocation
    • G06F12/08Addressing or allocation; Relocation in hierarchically structured memory systems, e.g. virtual memory systems
    • G06F12/0802Addressing of a memory level in which the access to the desired data or data block requires associative addressing means, e.g. caches
    • G06F12/0806Multiuser, multiprocessor or multiprocessing cache systems
    • G06F12/0815Cache consistency protocols
    • G06F12/0831Cache consistency protocols using a bus scheme, e.g. with bus monitoring or watching means

Abstract

Eine verteilte Systemstruktur für ein Breitweg-symmetrisches Mehrprozessorsystem unter Anwendung eines Cache-Kohärenzprotokolls auf Bus-Basis ist vorgesehen. Die verteilte Systemstruktur enthält einen Adressenschalter, multiple Speicherteilsysteme und multiple Mastervorrichtungen, entweder Prozessoren, E/A-Agenten oder kohärente Speicheradapter, die in einem Knotensatz organisiert sind, der von einem Knotenkontroller unterstützt wird. Der Knotenkontroller erhält Befehle von einer Mastervorrichtung, kommuniziert mit einer Mastervorrichtung als eine andere Mastervorrichtung oder als eine Slave-Vorrichtung und setzt von einer Master-Vorrichtung erhaltene Befehle in eine Warteschlange. Infolge Kontaktstifteinschränkungen, die von breiten Bussen verursacht sein können, z. B. von Bussen, die eine große Anzahl Datenkontaktstifte unterstützen, kann der Knotenkontroller so implementiert werden, dass die Funktionalität für seine Adressenwege und Datenwege in physikalisch getrennten Komponenten, Chips oder Schaltungen implementiert sein kann, wie z. B. in einem Knotendatenkontroller (NCD) oder einem Knotenadressenkontroller (NCA). In diesem Fall können Befehle zum Steuern des Datenflusses durch einen Knoten vom Knotenadressenkontroller an den Knotendatenkontroller geschickt werden.

Description

DER ERFINDUNG ZUGRUNDELIEGENDER ALLGEMEINER STAND DER TECHNIK 1. Technisches Gebiet
Die vorliegende Erfindung betrifft im allgemeinen ein verbessertes Datenverarbeitungssystem und insbesondere ein Verfahren und ein System zum Verbessern des Datendurchsatzes in einem Datenverarbeitungssystem. Spezifisch betrifft die vorliegende Erfindung ein Verfahren und ein System zum Verbessern der Leistung des Speicherzugriffs und der Steuerung unter Verwendung einer Cache-Speicher-Kohärenz.
2. Beschreibung verwandter Fachgebiete
Herkömmlicherweise werden symmetrische Multiprozessoren um einen gemeinsamen Systembus herum konstruiert, auf dem alle Prozessoren und sonstigen Vorrichtungen, wie z. B. Speicher und E/A-Vorrichtungen, durch einfache physikalische Kontakte an die Drähte angeschlossen sind, die die Bussignale führen. Dieser allgemeine Bus ist der Pfad zum Übertragen von Befehlen und Daten zwischen den Vorrichtungen und auch zum Erzielen der Kohärenz zwischen dem Cache und dem Speicher des Systems. Eine allgemeine Einbuskonstruktion bleibt eine populäre Wahl für die Mehrprozessor-Anschließbarkeit wegen der Einfachheit der Systemorganisation.
Diese Organisation vereinfacht auch die Aufgabe des Erzielens der Kohärenz zwischen den Cache-Speichern des Systems. Ein Befehl, der von einer Vorrichtung ausgegeben wird, wird gleichzeitig und im gleichen Taktzyklus, in dem der Befehl auf den Bus gelegt wird, an alle anderen Systemvorrichtungen gesandt. Ein Bus erzwingt eine feste Ordnung für alle Befehle, die auf ihn gelegt werden. Diese Ordnung wird vereinbart von allen Vorrichtungen im System, weil sie alle die gleichen Befehle befolgen. Die Vorrichtungen können auch ohne besondere Anstrengung in den Auswirkungen einer Befehlssequenz übereinstimmen. Das ist ein Hauptvorteil für einen Mehrprozessor, der sich auf einen einzigen Bus gründet.
Eine Konstruktion, die sich auf einen einzigen allgemeinen Bus gründet, beschränkt jedoch in der Regel die Größe des Systems, es sei denn, man entscheidet sich für eine geringere Systemleistung. Die Grenzen der Technik lassen jedoch dann nur zu, dass wenige Vorrichtungen an den Bus angeschlossen werden können, ohne die Geschwindigkeit zu kompromittieren, mit der der Bus schaltet, und damit auch die Geschwindigkeit, mit der das System läuft. Wenn mehr Master-Vorrichtungen, wie z. B. Prozessoren und E/A-Agenten, auf den Bus gelegt werden, muss der Bus langsamer schalten, was seine verfügbare Bandbreite einschränkt. Geringere Bandbreiten können Warteschlangenverzögerungen bewirken, was zur Minderung der Prozessorbenutzung führt und die Systemleistung reduziert.
Ein weiterer ernstlicher Nachteil in einem Ein-Bus-System ist die Verfügbarkeit nur eines einzigen Datenwegs für die Datenübertragung. Das verschärft zusätzlich die Warteschlangenverzögerungen und trägt zu einer Minderung der Systemleistung bei.
Es gibt zwei Klassen von Cache-Kohärenz-Protokollen. Eine sind Erfassungsprotokolle auf Bus-Basis, in dem alle Cache- Speicher im System an einen gemeinsamen Bus angeschlossen sind und nach Transaktionen suchen, die von anderen Cache- Speichern auf den gemeinsamen Bus gelegt werden, und dann geeignete Aktionen unternehmen, um miteinander kohärent zu bleiben. Die andere Klasse sind auf Unterverzeichnissen gegründete Protokolle, in denen jede Speicheradresse eine "Home-Site" hat. Wenn immer ein Cache diese Adresse anspricht, wird ein "Unterverzeichnis" an der Home-Site aktualisiert, um die Identität des Cache mit dem Stand der darin enthaltenen Daten abzuspeichern. Wenn es erforderlich wird, den Zustand der Daten in diesem Cache zu aktualisieren, schickt die Home-Site ausdrücklich eine Meldung an den Cache und fordert ihn auf, eine geeignete Aktion zu unternehmen.
Ausgedrückt als Implementierungs- und Überprüfungskomplexität ist das Erfassungsprotokoll auf Bus-Basis signifikant einfacher als das auf Unterverzeichnis gründende Protokoll, und ist das Protokoll der Wahl für symmetrische Mehrprozessor-(SMP)-Systeme. Jedoch wird das Erfassungsprotokoll auf Bus-Basis effektiv eingesetzt in einem System mit nur einer kleinen Anzahl Prozessoren, üblicherweise 2 bis 4.
Zwar ist derzeit eine Einsystembus-Konstruktion die bevorzugte Konstruktionswahl für die Implementierung eines Kohärenzprotokolls, sie kann jedoch für ein Breitweg- Mehrprozessor-System nicht eingesetzt werden.
Es wäre also vorteilhaft, eine verteilte, Breitweg-Multi-Bus- Mehrprozessor-Konstruktion zu haben, die Cache- Kohärenzprotokolle auf Bus-Basis benutzt.
ZUSAMMENFASSUNG DER ERFINDUNG
Eine verteilte Systemstruktur für ein Breitweg-symmetrisches Mehrprozessorsystem unter Verwendung eines Cache- Kohärenzprotokolls auf Bus-Basis ist vorgesehen. Die verteilte Systemstruktur enthält einen Adressenschalter, multiple Speicherteilsysteme, und multiple Mastervorrichtungen, entweder Prozessoren, E/A-Agenten oder kohärente Speicheradapter, die in einem Knotensatz organisiert sind, der von einem Knotenkontroller unterstützt wird. Der Knotenkontroller erhält Befehle von einer Mastervorrichtung, kommuniziert mit einer Mastervorrichtung als andere Mastervorrichtung oder als Slave-Vorrichtung, und setzt von einer Master-Vorrichtung erhaltene Befehle in eine Warteschlange. Aufgrund von Kontaktstiftbeschränkungen, die von breiten Bussen verursacht sein können, z. B. von Bussen, die eine große Anzahl Kontaktstifte unterstützen, kann der Knoten Controller so implementiert sein, dass die Funktionalität für seine Adressenwege und Datenwege in physikalisch getrennten Komponenten, Chips oder Schaltungen implementiert sein kann, wie z. B. ein Knoten-Daten-Controller (NCD) oder ein Knoten-Adressen-Controller (NCA). In diesem Fall können Befehle vom Knoten-Adressen-Controller zum Knoten-Daten-Controller geschickt werden, um den durch einen Knoten fließenden Datenfluß zu steuern.
KURZE BESCHREIBUNG DER ZEICHNUNGEN
Die neuartigen Merkmale, die als kennzeichnend für die Erfindung angesehen werden, sind in den beiliegenden Ansprüchen dargelegt. Die Erfindung selbst, sowie ein bevorzugter Anwendungsmodus, weitere Aufgaben und Vorteile derselben, lassen sich am besten unter Bezugnahme auf die nachstehende detaillierte Beschreibung einer illustrativen Ausführungsform anhand der begleitenden Zeichnungen verstehen; in diesen ist
Fig. 1 ein Übersichtsschaltbild, das die grundlegende Struktur eines herkömmlichen Mehrprozessor-Computersystems darstellt;
Fig. 2 ist ein Übersichtsschaltbild, das eine typische Architektur wiedergibt;
Fig. 3 ist ein Übersichtsschaltbild, das ein Mehrprozessor- Computersystem mit drei Verarbeitungseinheiten wiedergibt;
Fig. 4 ist ein Übersichtsschaltbild, das eine verteilte Systemstruktur für ein verteiltes Mehrprozessor- Computersystem mit einem unterstützenden Cache-Kohärenz- Protokoll auf Busbasis aus der Perspektive der Adressenwege in einem Mehrprozessorsystem wiedergibt;
Fig. 5 ist ein Übersichtsschaltbild, das eine verteilte Systemstruktur für ein verteiltes Mehrprozessor- Computersystem mit einem unterstützenden Cache-Kohärenz- Protokoll auf Busbasis aus der Perspektive der Datenwege in einem Mehrprozessorsystem wiedergibt;
Fig. 6 ist ein Übersichtsschaltbild, das die Adressenwege im Inneren eines Knotenkontrollers darstellt;
Fig. 7 ist ein Übersichtsschaltbild, das die internen Adressenwege eines Adressenschalters darstellt, der Knotenkontroller und Speicherteilsysteme miteinander verschaltet;
Fig. 8 ist ein Diagramm, das ein Speicherteilsystem darstellt, das an den Adressenschalter des verteilten Systems gemäß der vorliegenden Erfindung angeschlossen ist;
Fig. 9 ist ein Übersichtsschaltbild, das die Datenwege im Inneren eines Knotenkontrollers darstellt;
Fig. 10A-10B sind Übersichtsschaltbilder, die die Systemstruktur zum Bestimmen eines Busreaktionssignals für eine verteilte Systemstruktur darstellt;
Fig. 10C-10D sind Übersichtsschaltbilder, die die Komponenten darstellen, deren Signale an den lokalen und globalen Zyklen beteiligt sind;
Fig. 11 ist ein Übersichtsschaltbild, das die getrennte Daten- und Adressen/Steuerungsfunktionalität für einen einzelnen Knoten in einer Mehrfachknoten-Systemstruktur für ein verteiltes, Multibus-Mehrprozessorsystem darstellt; und
Fig. 12A-12B sind Tabellen, die ein Codierungsschema für Datenleitwegführungsbefehle zeigen, die von einem Knotenadressen-Controller (NCA) an einen Knoten-Daten- Controller (NCD) gesendet werden.
DETAILLIERTE BESCHREIBUNG DER BEVORZUGTEN AUSFÜHRUNGSFORM
Nehmen wir jetzt Bezug auf Fig. 1; hier wird die grundlegende Struktur eines herkömmlichen Mehrprozessor-Computersystems 110 dargestellt. Das Computersystem 110 weist mehrere Verarbeitungseinheiten 112a, 112b und 112c auf, die mit verschiedenen peripheren Vorrichtungen, einschließlich Eingangs/Ausgangs-(E/A)-Agenten 114, zusammengeschlossen sind; diese empfangen bzw. senden Daten von einem Monitor- Adapter 102 an einen Anzeigen-Monitor 105, Tastaturadapter 104 und eine Tastatur 107, Plattenadapter 103 und eine nichtflüchtige Speichervorrichtung 106, eine Speichervorrichtung 116 (wie z. B. ein dynamischer Direktzugriffsspeicher d. h. DRAM), der von den Verarbeitungseinheiten zum Abarbeiten von Programmbefehlen benutzt wird, und Firmware 118 (festgespeicherte Standardprogramme), deren Hauptaufgabe es ist, ein Betriebsystem in einer der Peripherievorrichtungen (in der Regel die nichtflüchtige Speichervorrichtung) zu suchen und zu laden, immer dann, wenn der Computer zum ersten Mal eingeschaltet wird. Verarbeitungseinheiten 112a-112c kommunizieren mit den Peripherievorrichtungen über verschiedene Mittel, einschließlich ein Bus 120. Das Computersystem 110 kann zusätzliche Komponenten aufweisen, die nicht dargestellt sind, wie z. B. serielle und parallele Ports, zum Anschluss an Peripherievorrichtungen, wie z. B. Modems oder Drucker. Der Fachmann erkennt ferner, dass es noch weitere Komponenten gibt, die im Zusammenhang mit denen benutzt werden können, die im Übersichtsschaltbild 1 dargestellt sind; zum Beispiel, kann ein Anzeigeadapter benutzt werden, um einen Videoanzeigemonitor zu steuern, ein Speicherkontroller kann benutzt werden, um auf den Speicher 116 zuzugreifen, usw. Zusätzlich kann das Computersystem 110 mit mehr oder auch weniger Prozessoren konfiguriert sein.
In einem symmetrischen Mehrprozessor-(SMP)-Computer sind alle Verarbeitungseinheiten 112a-112c im allgemeinen identisch; d. h. sie benutzen alle einen gemeinsamen Satz oder Teilsatz von Anweisungen oder Protokollen zum Arbeiten und weisen in der Regel die gleiche Architektur auf.
Nehmen wir jetzt Bezug auf Fig. 2; hier wird eine typische Organisation dargestellt. Eine Verarbeitungseinheit 112 beinhaltet einen Prozessor 122 mit einer Vielzahl Register und Ausführungseinheiten, die Programmanweisungen abarbeiten, um den Computer zu betreiben. Der Prozessor kann auch Cache- Speicher aufweisen, wie z. B. einen Anweisungs-Cache 125 und einen Daten-Cache 126. Diese Cache-Speicher werden als "integriert" (on-board) bezeichnet, wenn sie zusammen mit den Registern und Ausführungseinheiten des Prozessors einstückig gepackt sind. Cache-Speicher werden allgemein benutzt, um Speicherwerte zwischenzuspeichern, auf die der Prozessor wiederholt zugreifen muss, um die Verarbeitung durch Vermeiden des längerdauernden Schritts des Ladens der Werte aus dem Speicher, wie z. B. aus Speicher 116, gezeigt in Fig. 1, zu beschleunigen.
Die Verarbeitungseinheit 112 kann zusätzliche Cache-Speicher beinhalten, wie z. B. Cache 128. Cache 128 wird als Ebene 2 (L2 - Level 2) Cache bezeichnet, weil er die integrierten Cache-Speicher (Ebene 1) 124 und 126 unterstützt. Mit anderen Worten, Cache 128 wirkt als Zwischenglied zwischen Speicher 116 und den integrierten Cache-Speichern und kann eine viel größere Menge Informationen (Anweisungen und Daten) speichern, als die integrierten Cache-Speicher, obwohl natürlich zu Lasten eines länger dauernden Zugriffs. Zum Beispiel könnte Cache 128 ein Chip sein mit einer Speicherkapazität von 256 oder 512 Kilobyte, während der Prozessor 112 ein IBM PowerPCTM Prozessor der Serie 604 sein kann, mit integrierten Cache-Speichern mit einer Gesamtspeicherkapazität von 64 kB. Cache 128 ist mit dem Bus 120 verbunden, und das Laden aller Informationen vom Speicher 116 zum Prozessor 112 muss durch den Cache 128 laufen. Zwar zeigt Fig. 2 eine Cache-Hierarchie auf nur zwei Ebenen, jedoch können auch Mehr-Ebenen-Cache-Hierarchien vorgesehen werden, in denen viele Ebenen seriell verbundener Cache- Speicher arbeiten.
Für einen SMP-Computer ist es wichtig, ein kohärentes Speichersystem vorzusehen, d. h. zu bewirken, dass Schreibvorgänge auf jeden individuellen Speicherort in irgend einer Reihenfolge für alle Prozessoren serialisiert werden. Nehmen wir z. B. an, dass ein Speicherort durch eine Sequenz von Schreibvorgängen modifiziert wird, um die Werte 1, 2, 3, 4 anzunehmen. In einem Cache-kohärenten System beobachten alle Prozessoren die Schreibvorgänge auf eine bestimmte Speicherstelle in der gezeigten Reihenfolge. Es ist jedoch möglich, dass ein bestimmtes Bearbeitungselement einen Schreibvorgang in die Speicherstelle überspringt. Ein gegebenes Verarbeitungselement, das die Speicherstelle liest, könnte die Folge 1, 3, 4 sehen und die Aktualisierung auf den Wert 2 überspringen. Ein System, das sicherstellt, dass jeder Prozessor die gültige Datenreihenfolge erhält, heißt "kohärent". Es ist bedeutsam, dass virtuell alle Kohärenz- Protokolle nur mit der Granularität von der Größe eines Cache-Blocks arbeiten. Das heißt, das Kohärenz-Protokoll steuert die Bewegung der Schreibzulassungen für Daten auf einer Cache-Block-Basis und nicht gesondert für jede individuelle Speicherstelle.
Es gibt eine Reihe von Protokollen und Techniken zum Erreichen der Cache-Kohärenz, die dem Fachmann bekannt sind. Im Mittelpunkt aller dieser Mechanismen zum Wahren der Kohärenz steht die Forderung, dass die Protokolle zu einem gegebenen Zeitpunkt nur einem einzigen Prozessor die "Genehmigung" geben, die einen Schreibvorgang auf eine gegebene Speicherstelle (Cache-Block) zuläßt. Als Konsequenz dieser Forderung ergibt sich, wenn immer ein Bearbeitungselement versucht, auf eine Speicherstelle zu schreiben, muss es zunächst alle Verarbeitungselemente informieren, dass es auf die Speicherstelle zu schreiben wünscht, und muss von allen anderen Verarbeitungselementen die Genehmigung zum Durchführen dieses Schreibbefehls einholen. Der entscheidende Punkt dabei ist, dass alle anderen Prozessoren im System vom ersten Prozessor über den Schreibbefehl informiert werden müssen, bevor das Schreiben erfolgt. Näherer Einzelheiten darüber, wie die Cache-Kohärenz in einer Mehrebenen-Hierarchie implementiert wird, siehe Fig. 3.
Nehmen wir jetzt Bezug auf Fig. 3; hier wird ein Mehrprozessor-Computersytem mit drei Verarbeitungseinheiten (140, 141, 142) dargestellt, bestehend aus den Prozessoren (140a, 141a, 142a), die jeweils einen Cache L1 (140b, 141b, 142b), einen Cache L2 (140c, 141c, 142c) und schließlich einen Cache L3 (140d, 141d, 142d) aufweisen. In dieser Hierarchie ist jeder Cache, der auf einer tieferen Ebene steht, (d. h. ein Cache L3 steht "tiefer" als ein Cache L2) in der Regel größer und hat eine längere Zugriffszeit als der nächst höher stehende Cache. Ferner enthalten üblicherweise, obwohl nicht unbedingt gefordert, die Cache-Speicher auf einer tieferen Ebene Kopien aller Blöcke, die auf den Cache- Speichern der höheren Ebene vorhanden sind. Wenn z. B. ein Block im Cache L2 einer gegebenen Verarbeitungseinheit steht, impliziert das, dass auch der Cache L3 dieser Verarbeitungseinheit eine (möglicherweise veraltete) Kopie des Blocks enthält. Wenn ferner ein Block im Cache L1 einer gegebenen Verarbeitungseinheit vorkommt, steht er auch in den Cache-Speichern L2 und L3 dieser Verarbeitungseinheit. Diese Eigenschaft heißt Inklusion, und ist dem Fachmann wohlbekannt. Von jetzt ab wird daher angenommen, falls nicht anders festgelegt, dass das Prinzip der Inklusion auf den Cache der vorliegenden Erfindung anwendbar ist.
Um eine Cache-Kohärenz in einem System, wie in Fig. 3 gezeigt wird, zu implementieren, kommunizieren die Prozessoren über eine gewöhnliche allgemeine Zwischenverbindung 143. Die Prozessoren schicken Meldungen über die Zwischenverbindung, die ihren Wunsch anzeigen, von Speicherstellen zu lesen oder darauf zu schreiben. Wenn eine Operation auf die Zwischenverbindung gelegt wird, "erfassen" (snoop) alle anderen Prozessoren diese Operation und entscheiden, ob es der Zustand ihrer Cache-Speicher erlaubt, dass die angeforderte Operation durchgeführt wird, und wenn, unter welchen Bedingungen. Diese Mitteilung ist nötig, weil in Systemen mit Cache-Speichern die jeweils neueste gültige Kopie eines gegebenen Speicherblocks aus dem Systemspeicher 144 auf einen oder mehrere Cache-Speichern im System übertragen worden sein kann. Wenn ein Prozessor (sagen wir 140a) versucht, auf eine Speicherstelle zuzugreifen, die in einer Cache-Hierarchie (140b, 140c und 140d) nicht vorkommt, kann die korrekte Version des Blocks, die den wahren Wert für die Speicherstelle enthält, entweder im Systemspeicher 144 oder in einem der Cache-Speicher in den Verarbeitungseinheiten 141 und 142 stehen. Falls die korrekte Version in einem der anderen Cache-Speicher des Systems steht, müssen die korrekten Werte aus dem Cache im System anstatt aus dem Systemspeicher geholt werden.
Betrachten wir jetzt zum Beispiel einen Prozessor, sagen wir 140a, der eine Stelle im Speicher lesen will. Zunächst fragt er seinen eigenen Cache L1, 140b, ab. Wenn der Block nicht im Cache L1 (140b) steht, geht die Abfrage auf Cache L2, 140c, über. Wenn der Block nicht im Cache L2 steht, geht die Abfrage auf Cache L3, 140d, über. Wenn der Block nicht im Cache L3, 140d, steht, wird die Anforderung auf die generalisierte, abzuarbeitende Zwischenverbindung 143 gelegt. Sobald eine Operation auf die generalisierte Zwischenverbindung gelegt ist, "erfassen" die anderen Verarbeitungseinheiten die Operation und bestimmen, ob der Block in ihren Cache-Speichern vorkommt. Wenn dann eine Verarbeitungseinheit, sagen wir 142, den von der Verarbeitungseinheit 140 angeforderten Datenblock nach dem Prinzip der Inklusion in ihrem Cache L1, 142a, hat und die Daten modifiziert sind, haben auch Cache L2, 142c, und Cache L3, 142d, Kopien des Blocks. Wenn daher der Cache L3, 142d, der Verarbeitungseinheit 142 die Leseoperation erfasst, stellt er fest, dass der angeforderte Block im Cache L3, 142d, vorhanden und modifiziert ist. Wenn das geschieht, kann der Cache L3, 142d, eine Meldung auf die generalisierte Zwischenverbindung legen, die die Verarbeitungseinheit 140 unterrichtet, dass sie die Operation später noch einmal versuchen muss, weil der zuletzt aktualisierte Wert des Speicherortes für die Leseoperation im Cache L3, 142d, steht, der außerhalb des Hauptspeichers 144 liegt, und es muss eine geeignete Aktion unternommen werden, um ihn verfügbar zu machen, um die Leseanforderung der Verarbeitungseinheit 140 zu bedienen.
Der Cache L3, 142d, kann einen Prozess beginnen, um die modifizierten Daten aus dem Cache L3 in den Hauptspeicher 144 einzuspeichern. Damit wird der neueste, aktualisierte Wert der Speicherstelle für die anderen Prozessoren verfügbar gemacht.
Alternativ kann in einem Prozess, genannt "Intervention", der Cache L3, 142d, den neuesten aktualisierten Wert für die Speicherstelle direkt an die Verarbeitungseinheit 140 schicken, die ihn angefordert hat. Der Cache L3 kann dann einen Prozess beginnen, die modifizierten Daten aus dem Cache L3 in den Hauptspeicher einzuspeichern. Die Verarbeitungseinheit 140, insbesondere ihr Cache L3, 140d, stellt schließlich die Leseanforderung auf der generalisierten Zwischenverbindung dar. An diesem Punkt wurden jedoch die modifizierten Daten aus dem Cache L1 der Verarbeitungseinheit 142 abgerufen und die Leseanforderung vom Prozessor 140 wird befriedigt. Das eben beschriebene Szenario wird im allgemeinen als "Erfassungs-Einspeicherung" (snoop push) bezeichnet. Eine Leseanforderung wird auf der verallgemeinerten Zwischenverbindung erfasst, was bewirkt, dass die Verarbeitungseinheit 147 den Block in der Hierarchie ganz nach unten drückt, um die von der Verarbeitungseinheit 140 gestellte Leseanforderung zu befriedigen.
Der hier zu bemerkende Schlüsselpunkt ist, wenn ein Prozessor einen Block lesen oder darauf schreiben will, muss er diesen Wunsch den anderen Verarbeitungseinheiten im System mitteilen, um die Cache-Speicherkohärenz zu wahren. Um das zu erreichen, ordnet das Cache-Kohärenzprotokoll jedem Block auf jeder Ebene der Cache-Hierarchie einen Status-Indikator zu, der den augenblicklichen "Status" des Blocks anzeigt. Die Statusinformation wird benutzt, um gewisse Optimierungen im Kohärenzprotokoll zu ermöglichen, die den Meldungsverkehr auf der verallgemeinerten Zwischenverbindung 143 und den Zwischen-Cache-Verbindungen 140x, 140y, 141x, 141y, 142x, 142y einschränkt. Als ein Beispiel für diesen Mechanismus, wenn eine Verarbeitungseinheit einen Lesevorgang durchführt, erhält sie eine Meldung, die anzeigt, ob das Lesen später noch einmal versucht werden muss. Wenn die Leseoperation nicht noch einmal versucht wird, enthält die Meldung im allgemeinen auch Informationen, die es der Verarbeitungseinheit ermöglichen, festzustellen, ob auch eine andere Verarbeitungseinheit eine noch aktive Kopie des Blocks enthält (das geschieht dadurch, dass die anderen Cache- Speicher auf der untersten Ebene eine Angabe "gemeinsam benutzt" oder "nicht gemeinsam benutzt" für jeden Lesevorgang angeben, den sie nicht wieder versuchen).
Auf diese Weise kann eine Verarbeitungseinheit bestimmen, ob ein anderer Prozessor im System eine Kopie des Blocks hat. Wenn keine andere Verarbeitungseinheit eine aktive Kopie des Blocks hat, markiert die Lese-Verarbeitungseinheit den Status des Blocks als "exklusiv". Wenn ein Block als "exklusiv" gekennzeichnet ist, ist es zulässig, der Verarbeitungseinheit zu ermöglichen, den Block später zu schreiben, ohne erst mit den anderen Verarbeitungseinheiten im System zu kommunizieren, weil keine andere Verarbeitungseinheit eine Kopie des Blocks hat. Es ist daher im allgemeinen für einen Prozessor möglich, eine Stelle zu lesen oder zu beschreiben, ohne vorher diese Absicht auf der Zwischenverbindung mitzuteilen. Das geschieht jedoch nur in Fällen, in denen das Kohärenzprotokoll sichergestellt hat, dass kein anderer Prozessor ein Interesse an dem Block hat. Einige Details des genauen Arbeitens eines Mehrebenen-Cache-Kohärenzprotokolls wurden in der vorliegenden Diskussion zwecks Vereinfachung ausgelassen. Jedoch die wesentlichen Aspekte, die auf die Erfindung Einfluß haben, wurden beschrieben. Diese nicht beschriebenen Aspekte sind dem Fachmann wohlbekannt. Ein weiterer Aspekt der Vielebenen-Cache-Strukturen, die sich auf die Erfindung beziehen, sind die Operationen, die als Freigabe bezeichnet werden. Die Blöcke in einem Cache- Speicher werden in Blockgruppen unterteilt, die sogenannten "Sätze". Ein Satz ist eine Sammlung von Blöcken, in denen eine gegebener Speicherblock sitzen kann. Für jeden gegebenen Speicherblock gibt es einen unverwechselbaren Satz im Cache, auf den der Block gemäß vorgegebener Abbildungsfunktionen abgebildet werden kann. Die Anzahl der Blöcke in einem Satz wird als Assoziativität des Cache bezeichnet (z. B. 2-Wegsatz­ assoziativ heißt, dass es für jeden gegebenen Speicherblock zwei Blöcke im Cache gibt, auf die der Speicherblock abgebildet werden kann). Jedoch können mehrere unterschiedliche Blöcke im Hauptspeicher auf einen gegebenen Satz abgebildet werden.
Wenn alle Blöcke in einem Satz für einen gegebenen Cache voll sind und bei diesem Cache eine Anforderung eingeht, ob zum Lesen oder zum Schreiben an einer Speicherstelle, die auf den vollen Satz abbildet, muss der Cache einen der Blöcke "freigeben", die augenblicklich im Satz stehen. Der Cache wählt einen Block, der geräumt werden muss, durch eines einer Reihe vom Mitteln, die dem Fachmann wohlbekannt sind, (least recently used (LRU), zufällig, Pseudo-LRU, usw.). Wenn die Daten im ausgewählten Block modifiziert werden, werden diese Daten auf die nächst niedere Ebene in der Speicherhierarchie geschrieben, die ein anderer Cache (im Falle eines L1- oder L2-Cache) oder Hauptspeicher (im Falle eines L3-Cache) sein kann. Hier ist anzumerken, dass nach dem Inklusions-Prinzip auf der unteren Ebene der Hierarchie ein Block verfügbar sein wird, um die geschriebenen modifizierten Daten aufzunehmen. Wenn aber die Daten im angewählten Block nicht verändert werden, wird der Block einfach aufgegeben und nicht auf die nächstniedere Ebene in der Hierarchie geschrieben. Dieser Prozess des Entfernens eines Blocks aus einer Ebene der Hierachie ist als "Eviction" (Räumen) bekannt. Am Ende dieses Prozesses hat der Cache keine Kopie des geräumten Blocks mehr und nimmt nicht mehr aktiv am Kohärenzprotokoll für den geräumten Block teil, weil, wenn der Cache eine Operation erfasst (entweder auf der generalisierten Zwischenverbindung 143 oder Zwischen-Cache-Verbindungen 140x, 141x, 142x, 140y, 141y, 142y) wird der Block im Cache nicht gefunden.
Die vorliegende Erfindung ist in der Lage, eine große Anzahl Vorrichtungen in einem verteilten, Multibus-Mehrprozessor- System zusammenzuschließen und die Beschränkungen einer auf einen Einzelbus basierenden Konstruktion zu überwinden. Die folgende Beschreibung betrifft die Erfindung im Hinblick auf die 6xx-Bus-Architektur, jedoch ist die vorliegende Erfindung keinesfalls auf eine besondere Busarchitektur beschränkt und das nachstehend erläuterte System kann auch auf andere Bus- Architekturen angewandt werden.
Systemadressenweg-Topologie
Nehmen wir jetzt Bezug auf Fig. 4; hier bildet ein Übersichtsschaltbild eine verteilte Systemstruktur für ein Mehrprozessorsystem mit einem unterstützenden Cache-Kohärenz- Protokoll auf Busbasis aus der Perspektive der Adressenwege innerhalb des Mehrprozessor-Systems. Fig. 4 zeigt eine Anzahl Master-Vorrichtungen, die einen Befehl anlaufen lassen können, wie z. B. eine Speichertransaktion. Diese Master- Vorrichtungen, wie z. B. Prozessoren, E/A-Agenten, und kohärente Speicheradapter sind in Clustern auf eine Anzahl N Gruppen, genannt Knoten, verteilt. Am Kopf jedes Knotens steht ein Knotenkontroller, an den seine Master angeschlossen sind.
Fig. 4 zeigt die Knoten 410 und 420, die Gruppierungen von Systemelementen enthalten. Die Anzahl der Knotenanzahl kann unterschiedlich sein, je nach der Konfiguration des Systems. Der Knoten 410, auch als Node0 bezeichnet, enthält die Prozessoren 411 und 412, auch als Prozessor P0 und Prozessor PP-1 bezeichnet, die die Master für den Knoten 410 sind. Jeder Knotenkontroller hat eine Vielzahl bidirektionaler Standard- Prozessoradressendaten-Busse, über die die Master zum verteilten System zusammengeschaltet sind. Die Prozessoren 411 und 412 sind über die Busse 413 und 414, auch bezeichnet als P0Bus bzw. PP-1Bus, an den Knotenkontroller 415, bezeichnet auch als Knotenkontroller NC0 angeschlossen. Der Knoten 421, bezeichnet auch als NodeN-1, enthält Prozessor 421 und E/A- Agent 422, die die Master für den Knoten 420 sind. Prozessor 421 und E/A-Vorrichtung 422 sind über die Busse 423 bzw. 424 an den Knotenkontroller 425, auch als Knotenkontroller NCN-1 bezeichnet, angeschlossen. Die Anzahl der Master je Knoten kann unterschiedlich sein, in Abhängigkeit von der Konfiguration des Systems, und die Anzahl der Master an jedem Knoten muss nicht einheitlich in allen Knoten im System sein.
Der Knotenkontroller stellt die physikalische Schnittstelle zwischen einem Master und dem Rest des Systems dar und jeder Knotenkontroller im System enthält die gesamte erforderliche Logik, um Prozessorbusse individuell zuzuteilen und mit seinen lokalen Mastern als weiterer Master oder als Slave, d. h. eine Vorrichtung, die Masterbefehle akzeptiert und ausführt, aber keine Masterbefehle generiert, zu kommunizieren. Ein Prozessor schickt über seinen lokalen Knotenkontroller einen Befehl in das System. Zwar zeigt die Fig. 4 einen Master je Port, jedoch sind bei einem geeigneten Verteilungsschema auf dem Bus dieses Ports auch mehrere Master je Port möglich. Zum Beispiel könnte Prozessor 411 einer von vielen Prozessoren sein, die mit dem Bus 413 zusammengeschlossen sind. Wenn jedoch mehr Prozessoren an einen einzigen Port angeschlossen sind, dann arbeitet ihr Adressenbus langsamer, gerechnet in Buszykluszeit.
Alternativ kann einer der Master des Knotens 420 einen kohärenten Speicheradapter beinhalten, der eine Kommunikation mit einem anderen Datenverarbeitungssystem vorsieht, das eine Cache-Kohärenz bewahrt. Der kohärente Speicheradapter kann nah oder fern liegen und kann einen Port eines Knotenkontrollers besetzen, um Speichertransaktionen zu senden oder zu empfangen, um auf ähnliche Weise wie ein E/A- Agent als Master/Slave-Vorrichtung zu handeln. Beispielsweise kann ein anderer Knotenkontroller von einem anderen Datenverarbeitungssystem auch an den kohärenten Speicheradapter angeschlossen sein, so dass Datenverarbeitungssysteme, die die vorliegende Erfindung anwenden, miteinander verkettet werden können.
Die Knotenkontroller 415 und 425 sind über Paare von einseitig gerichteten Nur-Adressenbussen an eine Vorrichtung angeschlossen, die Adressenschalter (ASX) heißt. Die Busse 416 und 417, bezeichnet auch AOut0 bzw. AIn0, verbinden den Knotenkontroller 415 mit dem Adressenschalter 430. Die Busse 426 und 427, bezeichnet auch AOutN-1 bzw. AInN-1, verbinden den Knotenkontroller 425 mit dem Adressenschalter 430. Wie gezeigt, leiten die Busse AOutx Adressen von den Knotenkontrollern zum Adressenschalter, und die Busse AInx leiten Adressen vom Adressenschalter zu den Knotenkontrollern.
Der Adressenschalter 430 hat zusätzliche unidirektionale Adressenbusverbindungen 431 und 432, auch bezeichnet als AInN und AIn(N+S-1), zu Speicherkontrollern oder Speicherteilsystemen 442 und 444, auch bezeichnet als Speicherteilsysteme MS0 und MSS-1. Die Speicherkontroller werden als Slave-Vorrichtungen angenommen und haben keine Fähigkeit, Befehle an das verteilte System auszugeben. Die Anzahl der Speicherteilsysteme kann variieren, in Abhängigkeit von der Konfiguration des Systems.
Systemdatenweg-Topologie
Nehmen wir jetzt Bezug auf Fig. 5; hier zeigt ein Übersichtsschaltbild eine verteilte Systemstruktur für ein verteiltes Mehrprozessorsystem mit einem unterstützenden Cache-Kohärenz-Protokoll auf Busbasis aus der Perspektive der Datenwege innerhalb des Mehrprozessor-Systems. Ähnlich wie Fig. 4 zeigt Fig. 5 eine Anzahl Mastervorrichtungen. Diese Mastervorrichtungen sind in Clustern auf eine Anzahl von N Gruppen, genannt Knoten, verteilt. Am Kopf jedes Knotens steht ein Knotenkontroller, an den seine Master angeschlossen sind. Fig. 5 heißt Knoten 510 und 520, die die Prozessoren 511 und 512 enthalten. Die Prozessoren 511 und 512 sind über die Busse 513 und 514 an den Knotenkontroller 515 angeschlossen. Der Knoten 520, auch als NodeN-1 bezeichnet, enthält den Prozessor 521 und die E/A-Vorrichtung 522, die über die Busse 523 bzw. 524 an den Knotenkontroller 525 angeschlossen sind, der auch als Knotenkontroller NCN-1 bezeichnet wird.
Die in Fig. 4 und Fig. 5 gezeigten Knotenkontroller könnten physikalisch die gleiche Systemkomponente sein, werden aber aus unterschiedlichen Perspektiven beschrieben, um die unterschiedliche Funktionalität zu zeigen, die von den Knotenkontrollern ausgeführt wird. Fig. 4 zeigt Adressenwege innerhalb des Mehrprozessorsystems, während Fig. 5 die Datenwege innerhalb des Mehrprozessorsystems darstellt. Als Alternative können in einer bevorzugten Ausführungsform die Adressenwege und die Datenwege mit einer unterstützenden Funktionalität in physikalisch getrennten Komponenten, Chips oder Schaltkreisen, wie in einen Knoten-Datenkontroller oder einen Knoten-Adressenkontroller implementiert sein. Die Wahl, einen Knotenkontroller mit getrennter oder kombinierter Daten- und Adressenfunktionalität zu implementieren, kann von Parametern anderer Systemkomponenten abhängen. Wenn zum Beispiel die Größen der im System unterstützten Busse klein genug sind, können sowohl Adressen- als auch Datenfunktionalität in eine einzige Knotenkontroller- Komponente gelegt werden. Wenn aber die Busse eine höhere Anzahl Datenkontaktstifte unterstützen, kann die Kontaktstiftbeschränkung physikalisch erfordern, dass die Adressen- und die Datenfunktionalität auf gesonderte Knotenkontroller-Komponenten gelegt werden.
Als Alternative kann ein gesonderter Knotendatenkontroller weiter in mehrere Knotendatenkontroller je Knoten unterteilt sein, so dass jeder Knotendatenkontroller eine Unterstützung für einen Teil des Datenwegs des Knotens vorsieht. Auf diese Weise wird der Datenweg des Knotens über mehr als einen Knotendatenkontroller unterteilt.
In Fig. 5 wird dargestellt, wie jeder Knotenkontroller an eine Vielzahl Speicherkontroller, wie z. B. Speicherteilsysteme MS0 und MSS-1 angeschlossen ist. Zwar wird jeder Knotenkontroller als über einen unabhängigen Datenbus mit jedem Speicherkontroller verbunden dargestellt, jedoch können Mehrfachknoten- und/oder Mehrfachdatenkontroller auch über den gleichen Datenbus verbunden sein, wenn ein geeigneter Verteilermechanismus eingebaut ist. Wie beim Zusammenschließen einer Vielzahl Mastervorrichtungen über einen einzigen Bus an einen einzigen Knotenkontroller, wird die Schaltrate eine Funktion der Anzahl Vorrichtungen, die an den Bus angeschlossen sind. Der Knotenkontroller 515 ist über den Datenbus 516 mit dem Speicherteilsystem 542, und über den Bus 517 mit dem Speicherteilsystem 544 verbunden, auch bezeichnet als N0D0 bzw. N0DS-1. Der Knotenkontroller 525 ist über den Datenbus 527 mit dem Speicherteilsystem 544, und über den Datenbus 526 mit dem Speicherteilsystem 542 verbunden, auch bezeichnet als NN-1D0 bzw. Nn-1DS-1.
Anstatt eines einzigen Datenbusses, der die Daten aller Master überträgt, gibt es auch Mehrfachdatenbusse, von denen jeder nur einen kleinen Teil des Datenverkehrs trägt, der übernommen werden müsste, wenn die Master an einen einzigen Bus angeschlossen wären. Dabei können die Komponentenschnittstellen schneller getaktet sein, als es bei nur einem Bus möglich wäre. Diese Konfiguration ermöglicht die Zuteilung von mehr Datenbus-Bandbreite je Master, als es auf einem einzigen Bit möglich wäre, was zu geringeren Warteschlangenverzögerungen führt.
Interne Knotenkontroller-Adressenwege
Nehmen wir jetzt Bezug auf Fig. 6; ein Übersichtsschaltbild zeigt die Adressenwege im Inneren eines Knotenkontrollers.
Knotenkontroller 600, auch bezeichnet als NCx, ist ähnlich wie die Knotenkontroller 415 und 425 in Fig. 4, oder die Knotenkontroller 515 und 525 in Fig. 5. Individuelle Ports des Knotenkontrollers 600 haben ihre eigenen Warteschlangen, um Befehle von den Mastern zu puffern, sobald die Befehle bei den Knotenkontrollern eingehen. Ein Befehl kann eine nicht- deterministische Verzögerung erfahren, während er in diesen Puffern auf die progressive Auswahl zum Adressenschalter wartet.
Der Knotenkontroller 600 weist zweiseitig gerichtete Busse 601-604 auf, die an Mastervorrichtungen angeschlossen sind. Die Busse 601-604 liegen über Bus-Sender/Empfänger 605-608 an Eingangsgrenzen-Zwischenspeichern 609-612 und Ausgangsgrenzen-Zwischenspeichern 613-616. Die Eingangsgrenzen-Zwischenspeicher 609-612 versorgen Puffer 617-620, die die Befehle von den Mastervorrichtungen enthalten. Ein Befehl von einer Mastervorrichtung kann aus einem Transaktions-Kennzeichen, Transaktionstyp, Ziel- oder Quelladresse und sonstigen möglichen einschlägigen Informationen bestehen. Puffer 617-620 enthalten möglicherweise alle Informationen, die mit einem Befehl zu tun haben, falls erforderlich, oder können alternativ auch nur die Informationen enthalten, die für das Funktionieren des Adressenwegs innerhalb des Knotenkontrollers nötig sind. Die vom Eingangspuffer gehaltenen Informationen können unterschiedlich sein, in Abhängigkeit von alternativen Konfigurationen eines Knotenkontrollers. Puffer 617-620 speisen Steuereinheit/Multiplexer 621, die nur einen Befehl auf einmal auswählen, um ihn über den Zwischenspeicher 622, den Sender 623 und den Bus 624, auch AOutx genannt, an den Adressenschalter zu schicken.
Der Knotenkontroller 600 erhält Befehle von den Mastern über die Busse 601-604 für die schließliche Übertragung durch einen Grenzen-Zwischenspeicher 622 und Sender 623 an den Adressenschalter über den Bus 624, auch als Bus AOutx bezeichnet. Auf eine entsprechende Weise empfängt der Knotenkontroller 600 Befehle vom Adressenschalter über den Bus 625, auch als Bus AInx bezeichnet, und den Empfänger 626 zum Aufnehmen in den Grenzenzwischenspeicher 627, auch als FROM_ASX_BL bezeichnet. Diese Befehle folgen einem Adressenweg durch eine feste Anzahl Zwischenspeicher, die eine feste Verzögerung haben, wie Zwischen-Flipflop 628 und Ausgangsgrenzen-Zwischenspeicher 613-616, bevor sie zu den Bussen 601-604 gelangen. Zusätzlich passieren Befehle an die Master-Vorrichtungen auch einen Multiplexer je Port, wie z. B. Steuereinheiten/Multiplexer 629-632, die ebenfalls eine feste Verzögerung haben. Auf diese Weise legen Befehle, die über Bus 625 ankommen, einen Weg mit einer festen Verzögerung einer deterministischen Anzahl Zyklen entlang ihres Wegs zurück. Mit anderen Worten, zwischen dem Punkt, an dem ein Befehl den Zwischenspeicher FROM_ASX_BL erreicht, bis zu dem Punkt, ab dem jede Master-Vorrichtung, wie z. B. ein Satz Prozessoren, die an den Knotenkontroller angeschlossen sind, sich dem ankommenden Befehl gegenüber sieht, läuft immer eine feste Zeitperiode ab.
Die Zuteiler für die Ports, die an die Master angeschlossen sind, sind so ausgelegt, dass sie den Knotenkontrollern, die die Port-Busse treiben, die höchste Priorität zuteilen. Wenn ein Master eine Anforderung stellt, einen Bus zur gleichen Zeit zu treiben, an der ihn der Knotenkontroller treiben will, bekommt der Knotenkontroller die höchste Priorität. In einer bevorzugten Ausführungsform wird vom Adressenschalter zwecks Hilfe für dieses Zuteilungs-Szenario noch vor dem Senden des Befehls durch den Adressenschalter ein Signal, genannt "SnoopValid" (nicht dargestellt), angesteuert. Das ermöglicht, dass die Zuteilung für den Bus zwischen einem Knotenkontroller und seinen Mastern greift und früh genug ausgeführt wird, um sicherzustellen, dass ein Befehl, der über den AInx-Bus vom Adressenschalter herkommt, nicht stehen bleibt, nicht einmal für einen Zyklus, solange er im Innern des Knotenkontrollers ist. Das gewährleistet, dass die Zeitperiode für die feste Anzahl der Zwischenspeicher entlang dem AInx-zu-Px-Busweg wirklich eine deterministische Anzahl Zyklen auflöst.
Die Steuerlogikeinheit 633 wird auch mit dem im FROM_ASX_BL- Zwischenspeicher zwischengespeicherten ankommenden Befehl versehen für die geeignete Bestimmung von Steuersignalen an andere Einheiten oder Komponenten innerhalb des Knotenkontrollers 600. Zum Beispiel kommuniziert die Steuerlogik 633 mit den Puffern 617-620 über die Steuersignale 634, Steuereinheit/Multiplexer 621 über die Steuersignale 636 und Steuereinheiten/Multiplexer 629-632 durch Steuersignale 635 zum Auswählen von Befehlen, Lösen von Kollisionen und Modifizieren von Befehlsfeldern, einschließlich eines Befehlstyps, falls erforderlich, um den kontinuierlichen Befehlsfluß innerhalb des Knotenkontrollers 600 sicherzustellen. Die Steuerlogikeinheit 633 erhält auch ggf. weitere Steuersignale 637.
Adressenschalter-interne Adressenwege
Nehmen wir jetzt Bezug auf Fig. 7; hier gibt ein Diagramm die internen Adressenwege eines Adressenschalters wieder, der Knotenkontroller und Speicherteilsysteme verschaltet. Der Adressenschalter 700 verbindet einen Satz von vier Knotenkontrollern und zwei Speicherteilsysteme. Befehle kommen an Erst-Eingang/Erst-Ausgang-(FIFO)-Warteschlangen 721-724 von Bussen 701-704 an, die auch AOut0-AOut3 bezeichnet sind, über die Empfänger 709-712 und Eingangsgrenzen- Zwischenspeicher 713-716 an. Diese Befehle können in einem FIFO resident sein, bevor sie vom Steuereinheit/Multiplexer 725 angewählt werden. Ein Befehl kann eine endliche, jedoch nicht-deterministische Anzahl Verzögerungszyklen aufweisen, während er im FIFO steht. Die Steuerlogikeinheit 726 kann mit dem Steuereinheit/Multiplexer 725 und den FIFOs 721-724 kommunizieren, um die Auswahl der eingehenden Befehle zu bestimmen. Die Steuerlogikeinheit 726 empfängt ggf. auch andere Steuersignale 733.
Der Steuereinheit/Multiplexer 725 wählt nur einen Befehl auf einmal an, der über Wege, die im Hinblick auf die Anzahl der Verzögerungszyklen deterministisch sind, zum Knotenkontroller und zum Speicherteilsystem gesendet wird. Im Beispiel der Fig. 7 werden die Befehle über die Einrichtungsbusse 713 und 732, auch als Busse AIn4 und AIn5 bezeichnet, über Ausgangsgrenzen-Zwischenspeicher 727 und 728 und Sender 729 und 730 an die Speicherteilsysteme gesendet. Befehle werden über einseitig gerichtete Busse 705-708, auch bezeichnet als Busse AIn0-AIn3, durch Ausgangsgrenzen-Zwischenspeicher 717- 720 und Sender 741-744 an Knotenkontroller gesendet. In diesem Beispiel gibt es nur einen einzigen Verzögerungszyklus an den Ausgangsgrenzen-Zwischenspeicher 717-720, 727 und 728.
Aus den Beschreibungen für die Fig. 4-7 wird verständlich, dass eine Transaktion von einer Meistervorrichtung über ihren Bus und Port zu ihrem Knotenkontroller ausgegeben wird. Der Knotenkontroller wird eine Art unmittelbarer Reaktion über den Bus an die Mastervorrichtung vorsehen und kann die Transaktion für eine spätere Ausgabe an den Rest des Systems in Warteschlange setzen. Sobald die Ausgabe der Transaktion an den Rest des Systems erfolgt, stellt der Adressenschalter sicher, dass die Transaktion mit einer bekannten Stufenverzögerung an den Rest des Systems gesendet werden kann, so dass die anderen Vorrichtungen die Transaktion erfassen können.
Gemäß der verteilten Systemstruktur der vorliegenden Erfindung würde jede Vorrichtung im System in der Lage sein, die Transaktion im gleichen Zyklus zu sehen und eine Kohärenz-Reaktion im gleichen Zyklus vorzusehen. Der Adressenschalter ist in der Lage, eine Transaktion an alle Knotenkontroller zu senden, einschließlich des Knotenkontrollers des Knoten, der die Vorrichtung enthält, die die Transaktion ausgegeben hat. Eine geeignete Logik ist in jeden Knotenkontroller eingebaut, so dass der Knotenkontroller bestimmen kann, ob die eingehende erfasste Transaktion von einer Vorrichtung an einem seiner eigenen Ports ausgegeben wurde. Wenn ja, dann stellt der Knotenkontroller sicher, dass der Bus an dem Port, an dem er die Transaktion ausgegeben hat, nicht mit einer Transaktion, die von diesem Port her aufgenommen wurde, erfassen kann. Sonst könnte die Vorrichtung "verwirrt" werden, wenn sie mit ihrer eigenen Transaktion erfasst wird. Wenn die Vorrichtung eine Erfassung ihrer eigenen Transaktion erhalten würde, könnte die Vorrichtung eine Reaktion ausgeben, die eine Kollision mit ihrer eigenen Transaktion anzeigen würde. Wenn das der Fall wäre, weil die ursprüngliche Transaktion in Wirklichkeit die gleiche Transaktion ist, die erfasst wird, würde die "Kollision" nie aufgelöst werden und die Transaktion würde nicht abgeschlossen werden.
Weitere Einzelheiten der Art, in der die Transaktionen ausgegeben wurden, sind nachstehend vorgesehen.
Speicherteilsystem-interne Adressenwege
Nehmen wir jetzt Bezug auf Fig. 8; ein Diagramm zeigt ein Speicherteilsystem, das an den Adressenschalter des verteilten Systems der vorliegenden Erfindung angeschlossen ist. Fig. 8 zeigt das Speicherteilsystem 800, auch bezeichnet als Speicherteilsystem MSx. Der Speicherkontroller 801 im Speicherteilsystem 800 erhält einen Befehl vom Adressenschalter über den einseitig gerichteten Bus 802, auch bezeichnet als Bus AInx, über eine Anzahl Zwischenspeicher FD 803, die nur eine Festverzögerungsleitung bilden. Auf diese Weise erfährt ein Befehl, der vom Adressenschalter gesendet wird, eine Festanzahl Verzögerungszyklen, bevor der Befehl für den Speicherkontroller verfügbar wird.
Wie bereits gezeigt, durchquert ein Befehl, der über den Bus AInx an einem Knotenkontroller ankommt, einen deterministischen Verzögerungsweg von einer Aufnahme im FROM_ASX_BL-Zwischenspeicher zu seiner Vorlage an einer Mastervorrichtung. Auf ähnliche Weise durchquert ein Befehl einen deterministischen Verzögerungsweg vom Steuereinheit/Multiplexer innerhalb des Adressenschalters zur festen Verzögerungsleitung im Speicherteilsystem. Wenn die Verzögerung der Zwischenspeicher FD 803 im Speicherteilsystem an den richtigen Wert angeglichen wird, kann sichergestellt werden, dass der Speicherkontroller einen Befehl zum gleichen Zeitpunkt vorgelegt erhält, an dem die Master, die an Ports der Knotenkontroller angeschlossen sind, den gleichen Befehl vorgelegt erhalten. Es besteht also eine deterministische Zyklenzahl zwischen dem Punkt, an dem der Steuereinheit/Multiplexer im Adressenschalter eine Transaktion sendet, und dem Punkt, an dem die Master und Speicherkontroller den Befehl erhalten.
Da nur eine kleine Anzahl Master an jeden Port dieses Knotenkontrollers angeschlossen sind, ist die Geschwindigkeit, mit der jeder an diese Ports angeschlossene Bus betrieben werden kann, unabhängig von der Gesamtanzahl der Ports im System. Wenn z. B. ein einziger Master an jeden Port angeschlossen ist, kann sein Bus im Punkt-zu-Punkt-Modus mit der bestmöglichen Geschwindigkeit laufen. Daher ist die verteilte Struktur der vorliegenden Erfindung in der Lage, wohlverstandene und leicht zu überprüfende, Cache-kohärente Protokolle auf Busbasis für Mehrfachprozessoren maßstäblich zu verändern, um die Bandbreite des Systems zu vergrößern.
Knotenkontroller-interne Datenwege
Nehmen wir jetzt Bezug auf Fig. 9; hier zeigt ein Übersichtsschaltbild die Datenwege im Inneren eines Knotenkontrollers. Der Knotenkontroller 900, auch als NCx bezeichnet, ist ähnlich wie die Knotenkontroller 415 und 425 in Fig. 4 oder die Knotenkontroller 515 und 525 in Fig. 5. Individuelle Ports des Knotenkontrollers 900 haben ihre eigenen Warteschlangen, um Daten von den Mastern zu puffern, wenn die Daten beim Knotenkontroller eintreffen. Die Daten können eine nicht-deterministische Verzögerung erfahren während sie in diesen Puffern auf die weiterführende Bewegung zu ihren Zielorten warten.
Der Knotenkontroller 900 weist bidirektionale Busse 901-904 auf, auch als PxBus bezeichnet, die an die Mastervorrichtungen angeschlossen sind. Die Busse 901-904 sind über Sender/Empfänger 905-908 mit Eingangsgrenzen- Zwischenspeichern 909-912 und Ausgangsgrenzen- Zwischenspeichern 909-912 verbunden. Eingangsgrenzen- Zwischenspeicher 909-912 versorgen Datenpuffer 917-920, die die Daten von den Mastervorrichtungen aufnehmen.
Von einem der Ports des Knotenkontrollers eingehende Daten können zu einem Speicherteilsystem oder einem anderen Cache geleitet werden. Im dargestellten Beispiel in Fig. 9, das das in Fig. 6 gezeigte Beispiel fortsetzt, können die von einem der Ports des Knotenkontrollers ankommenden Daten an eine der folgenden vier Stellen geführt werden: Speicherteilsystem MS0, Speicher-Teilsystem MSS-1, Cache-zu-Cache-FIFO (FIFO C2C) zum Weiterleiten der Daten innerhalb des Knotens, oder zu einer Prefetch-Maschine zum Vorabrufen von Datenwörtern. Mit dem FIFO-C2C-Mechanismus ist jeder Knoten in der Lage, Daten von einem seiner Ports zu einem anderen Port zu schicken und damit den Datentransfer von einem Master zu einem anderen zu ermöglichen. Puffer 917-920 speisen Multiplexer 925-927 und 914, die eine Datenquelle zum Weitersenden von Daten auswählen. Die Steuerlogikeinheit 939 sieht Steuersignale für den Multiplexer 925 vor zum Auswählen von Daten, die an das Speicherteilsystem MS0 geschickt werden sollen, und für den Multiplexer 926 zum Auswählen von Daten, die an das Speicherteilsystem MSS-1 geschickt werden sollen. Der Knotenkontroller 900 schickt Daten von den Multiplexern 925 und 926 über die Grenzen-Zwischenspeicher 931 und 933 und Sender/Empfänger 935 und 936 durch die bidirektionalen Busse 937 und 938, auch als NxD0 und NxDS-1 gekennzeichnet, zum Speicherteilsystem MS0 und zum Speicherteilsystem MSS-1.
Die Steuerlogikeinheit 939 liefert Steuersignale an den Multiplexer 927 zum Auswählen von Daten, die innerhalb des Knotens weitergeschickt werden sollen. Die Daten werden dann in den FIFO 928 auf Warteschlange gesetzt. Die Steuerlogikeinheit 939 sieht auch Steuersignale für den Multiplexer 941 vor, um Daten zum Vorabrufen auszuwählen. Die Prefetch-Maschine 942 generiert dann Vorabrufanforderungen für die ausgewählten Daten.
Auf entsprechende Weise akzeptiert der Knotenkontroller 900 Daten über die Sender/Empfänger 935 und 936 und Grenzen- Zwischenspeicher 932 und 934 vom Speicherteilsystem MS0 und Speicherteilsystem MSS-1 über die bidirektionalen Busse 937 und 938. Die Daten werden dann in die richtigen FIFOs 929 und 930 auf Warteschlange gesetzt. Die Daten von den FIFOs 928-930 laufen durch je einen Multiplexer per Port, wie z. B. Steuereinheiten/Multiplexer 921-924. Die Daten von den FIFOs 929-930 laufen durch den Multiplexer 941 zum Steuern und Korrelieren von Vorabruf-Anforderungen. Die Steuerlogikeinheit 939 schickt Steuersignale an die Multiplexer 921-924, um Daten auszuwählen, die an die Mastervorrichtungen geschickt werden müssen. Die Steuerlogikeinheit 939 empfängt ggf. auch weitere Steuersignale 940. Somit hat der Knotenkontroller eine Entscheidungslogik für die Datenbusse und ist unabhängig beim Steuern der Datentranfers in Parallelität. Auf diese Weise ist die verteilte Systemstruktur der vorliegenden Erfindung in der Lage, den Systemdatendurchsatz zu verbessern.
Reaktionskombinationsblock (RCB)
Nehmen wir jetzt Bezug auf die Fig. 10A-10B; hier zeigen Übersichtsschaltbilder die Systemstruktur zum Bestimmen der Busreaktionssignale für eine verteilte Systemstruktur, ähnlich der in Fig. 4 und Fig. 5. Fig. 10A und Fig. 10B zeigen die Anschlussflexibilität für Vorrichtungen in der verteilten Systemstruktur der vorliegenden Erfindung mit einem Steuerlogikblock zum Kombinieren von Bussignalen (Reaktionen) AStat und AResp. Zwecks Klarheit werden die Signale AStat und AResp getrennt gezeigt. Hier muss wieder darauf hingewiesen werden, dass E/A-Agenten als Master- Vorrichtungen handeln können, die gemäß Fig. 10A und Fig. 10B an die Ports der Knotenkontroller angeschlossen sind.
Wie in Fig. 10A ersichtlich, haben die Prozessoren 1001-1004, auch als Px bezeichnet, unidirektionale AStatOut Signale 1005-1008, auch mit PxNxAStOut, und AStatIn Signale 1009-1012, auch mit PxNxAStIn bezeichnet, die die Prozessoren mit dem Reaktionskombinationsblock (RCB) 1000 verbinden. Die Slave- Vorrichungen, wie z. B. Speicherteilsysteme 1005 und 1006, auch als MSx bezeichnet, sind verbunden mit dem RCB durch die AStatOut Signale 1013 und 1014, bezeichnet auch als Mx_AStOut, und die AStatIn Signale 1015 und 1016, auch als Mx_AStIn bezeichnet, verbunden. Knotenkontroller 1017 und 1018, auch als NCx bezeichnet, sind mit dem RCB auch über einen ähnlichen Satz unidirektionaler AStatOut Signale 1019- 1022, auch als NxPxAStOut bezeichnet, und AStatIn Signale 1023-1026, auch als NxPxAStIn bezeichnet, je Port verbunden. Der Adressenschalter 1027, auch als ASX bezeichnet ist beteiligt an der Bestimmung der richtigen Logik für das Systemverarbeiten einer Transaktion durch Liefern des Sendesignals 1028 und des Transaktionsquellen-ID 1029, der eine Codierung eines Knoten-Identifikators zusammen mit einem Port-Identifikator innerhalb des Knotens ist, durch den eine Master-Vorrichtung eine Transaktion an das System ausgegeben hat.
Wie in Fig. 10B gezeigt wird, haben die Prozessoren 1001-1004 unidirektionale ARespOut Signale 1055-1058, auch bezeichnet als PxNxAReOut, und ARespIn Signale 1059-1062, auch als PxNxAReIn bezeichnet, die die Prozessoren mit dem RCB 1000 verbinden. Speicherteilsysteme 1005 und 1006 verbinden den RCB mit ARespIn Signalen 1065 und 1066, auch als Mx-AReIn bezeichnet. Die Speicherteilsysteme 1005 und 1006 sind nicht mit den ARespOut Leitungen verbunden, die nicht von diesen Slave-Vorrichtungen getrieben werden. Knotenkontroller 1017 und 1018 sind ebenfalls an den RCB über einen ähnlichen Satz unidirektionaler ARespOut Signale 1069-1072, auch bezeichnet als NxPxAReOut, und ARespIn Signale 1073-1076, auch als NxPxAReIn bezeichnet, verbunden. Wieder ist der Adressenschalter 1027 an der Bestimmung der richtigen Transaktionslogik beteiligt durch Vorsehen des Sendesignals 1028 und des Transaktionsport-ID 1029.
Wie aus den Fig. 10A-10B ersichtlich, wird ein Satz AStatIn/AStatOut Signalen und ARespIn/ARespOut Signalen an/von einer Master-Vorrichtung mit einem ähnlichen Satz AStatIn/AStatOut Signalen und ARespIn/ARespOut Signalen an/von seinen(m) Knotenkontroller gepaart. Diese Paarung wird auf einer Per-Port-Basis gemacht. Wie bereits besprochen, wird jeder Port im Beispiel mit einer einzigen Master- Vorrichtung gezeigt, die mit jedem Port verbunden ist. Wenn jedoch mehr als eine Master-Vorrichtung je Port angeschlossen wäre, dann würden die Paare der AStatIn/AStatOut Signale und der ARespIn/ARespOut Signale vom Satz der Master- Vorrichtungen benutzt, die an diesem Port mit dem Bus wie in einer Standard-Einbus-Konfiguration verbunden wären.
In der bevorzugten Ausführungsform kombiniert der RCB die AStatOuts und ARespOuts aus verschiedenen Quellenvorrichtungen und erzeugt AStatIn und ARespIn Signale laut der 6XX Bus-Spezifikation, wie in der Beschreibung IBM Server Group Power PC MP System Bus, Version 5.3, hier per Querverweis angezogen, beschrieben wird. Der RCB erhält die AStatOut und ARespOut Signale und gibt AStatIn bzw. ARespIn Signale zurück. Nicht alle Vorrichtungen erhalten die gleichen Reaktionen für eine bestimmte Transaktion. Die bei den einzelnen Vorrichtungen eingegangenen Signale werden auf einer Per-Zyklus-Basis bestimmt, wie nachstehend in näheren Einzelheiten beschrieben wird.
Lokale/Globale Zyklen
Während eines gegebenen Systemzyklus kann eine Master- Vorrichtung an einem Port eine Transaktion über den Bus ihres Ports zum Empfang durch ihren Knotenkontroller ausgeben, oder der Knotenkontroller kann der Mastervorrichtung eine Transaktion vorlegen, die vom Adressenschalter geschickt worden war, um die Transaktion zu erfassen. Wenn die Master- Vorrichtung eine Transaktion ausgibt, wird dieser Zyklus als "lokal" bezeichnet, wenn der Knotenkontroller eine Transaktion vorlegt, wird der Zyklus als "global" bezeichnet.
Wie oben beschrieben, sendet der Adressenschalter jeweils nur eine Transaktion an alle Knotenkontroller, und dort gibt es eine feste Zeitverzögerung zwischen der Zeit, in der der Adressenschalter eine Transaktion ausgibt, und der Zeit, bis sie an den Ports jedes Knotenkontrollers erscheint. Unter dieser Betriebsart wird, nachdem ein Knotenkontroller eine Sendetransaktion vom Adressenschalter erhalten hat und dann eine vorgegebene Anzahl Zyklenzeiten später die Transaktion an die Vorrichtungen auf den Bussen der Ports des Knotenkontroller während eines Zyklus vorstellt, führen alle Knotenkontroller auf allen Ports während eines Zyklus die gleiche Aktion durch, mit einer Ausnahme, wie oben erklärt. Wenn es also einen globalen Zyklus gibt, der auf dem Bus eines der Ports im System ausgeführt wird, werden globale Zyklen in allen Ports des Systems ausgeführt. Alle restlichen Zyklen sind lokale Zyklen.
Während lokaler Zyklen wird eine Aktivität an einem Port nicht mit der Aktivität an anderen Ports im System korreliert. In Abhängigkeit davon, ob eine Vorrichtung zur Ausgabe einer Transaktion benötigt wird oder nicht, würde der lokale Zyklus besetzt sein oder leerlaufen. Es findet also ein globaler Zyklus statt, wenn eine Transaktion von allen Vorrichtungen im System erfasst wird, und nur ein lokaler Zyklus kann von einer Vorrichtung zur Ausgabe einer Transaktion benutzt werden.
Betrieb eines RCB während lokaler vs. globaler Zyklen
Nehmen wir an, die Zyklen des gesamten Systems sind entweder lokal oder global "gefärbt", dann sind die Reaktionsgenerierung, die Reaktionskombination und die Reaktionsempfangszyklen, die eine feste Anzahl Zyklen nach der Ausgabe einer Transaktion auftreten, ähnlich gekennzeichnete lokale Reaktionsfenster oder globale Reaktionsfenster. Aus diesem Grund wird die Reaktionskombinationsfunktion des RCB während eines gegebenen Zyklus entsprechend entweder als im lokalen oder im globalen Modus stehend angesehen. Während lokaler Zyklen kombiniert der RCB Reaktionen auf einer Per-Port-Grundlage. Das heißt, der RBC kombiniert die Reaktion eines Ports und die Reaktion, die der Knotenkontroller entsprechend diesem Port erzeugt. Bei globalen Zyklen kombiniert der RCB Reaktionen von allen Ports und Knotenkontrollern im System (wieder mit Ausnahme jeweils eines Ports, wie nachstehend erklärt wird).
Zwecks richtigen Umschaltens zwischen lokalen und globalen Kombinations-Modi ist der RCB mit einem Signal versehen, das das Senden einer Transaktion durch den Adressenschalter an die Knotenkontroller anzeigt, gezeigt als Sendesignal 1028 in Fig. 10A, sowie das Transaktionsquellen-ID-Signal 1029. Im RCB gespeicherte Konfigurationsinformationen zeigen den genauen Zyklus an, in dem die Kombination der Reaktionen für die gesendete Transaktion nach dem Eingang des Sendetransaktionssignals ausgeführt werden müssen. Auf diese Weise wird für jeden globalen Zyklus der RCB so ausgelegt, dass er Reaktionen aus den richtigen Quellen kombiniert.
Primäre vs. sekundäre lokale Zyklen
Ein Prozessor kann möglicherweise eine Transaktion nur während lokaler Zyklen ausgeben. Bei bestimmten Transaktionstypen gibt der Prozessor die Transaktion nur einmal aus. Bei Bestimmten anderen Transaktionstypen kann der Prozessor möglicherweise aufgefordert werden, die Transaktion mehrmals auszugeben. Der Prozessor wird hinsichtlich der durchzuführenden Aktionen von seinem Knotenkontroller zusammen mit dem RCB, durch die Anwendung der AStatIn/AStatOut-Signale und der ARespIn/ARespOut-Signale hinsichtlich der durchzuführenden Aktionen angewiesen.
Erreichung der Kohärenz durch Erfassen in zeitlich und räumlich verteilter Weise
Aus der obigen Beschreibung sollte offensichtlich sein, dass Prozessoren und Vorrichtungen Transaktionen von anderen Prozessoren und Vorrichtungen während der Zyklen anders sehen als in dem Zyklus, in dem sie an das System ausgegeben wurden. Das ist anders als die Situation mit einem Erfassungsprotokoll in einer Ein-Bus-Umgebung, in der alle Vorrichtungen im System eine Transaktion zur gleichen Zeit beobachten, in der sie ausgegeben wurde, und gleichzeitig eine Kohärenzreaktion dafür erzeugen, und in der der Verursacher der Transaktion die Reaktion an diesem gleichen Zeitpunkt erhält. So wird im vorliegenden System das Erreichen der Kohärenz sowohl in der Zeit als auch im Raum verteilt, d. h. über mehrere Zyklen und mehrere Busse, die mit mehreren Knotenkontrollern verbunden sind.
Bei der Anwendung der verteilten Systemstruktur ist es bedeutsam, die globale Kohärenz auf effiziente Weise zu erreichen. Zu diesem Zweck werden alle Transaktionen in zwei Kategorien sortiert: (1) Transaktionen, für die es möglich ist, die globale Kohärenzreaktion vorauszusagen und sie im primären Reaktionsfenster anzuzeigen; und (2) Transaktionen, für die es notwendig ist, eine globale Erfassung durchzuführen, bevor die letztendliche Kohärenzreaktion berechnet werden kann.
Im ersten Fall akzeptiert der Knotenkontroller die Transaktion und gibt eine globale Kohärenzreaktion an die Ausgabeeinheit im primären Reaktionsfenster aus. Der Knotenkontroller übernimmt dann die volle Verantwortung für die abschließende Durchführung der Transaktion im System und für das Erreichen der globalen Reaktion zu einem späteren Zeitpunkt.
Im zweiten Fall führt der Knotenkontroller drei Schritte aus. Erstens, der Knotenkontroller akzeptiert die Transaktion und liefert eine primäre Reaktion, die eine Verschiebung des Erreichens und Lieferung der globalen Reaktion anzeigt. In der 6XX Busarchitektur ist diese Reaktion die "Wiederanlauf"- Reaktion. Zweitens, zu einem späteren Zeitpunkt, errechnet der Knotenkontroller eine globale Kohärenzreaktion für diese Transaktion. Und drittens, der Knotenkontroller fordert, dass der Prozessor eine sekundäre Transaktion ausgibt, und schickt die globale Reaktion zum sekundären Reaktionsfenster. In der 6XX Busarchitektur wird die Anforderung an den Prozessor zur Ausgabe einer sekundären Transaktion gestellt durch Ausgabe eines Wiederanlaufbefehls mit einem Vermerk entsprechend der Original-Transaktion. Der Prozessor kann dann den Vermerk zur Identifizierung benutzen, welche seiner Transaktionen wiederanlaufen soll.
Wiederanlaufbefehle und Sekundärreaktionen
Wie oben angemerkt, wird eine von einer Vorrichtung akzeptierte Transaktion für den Rest des Systems erfasst. Beim Erfassen wird die Vorrichtung, die die Transaktion ausgegeben hat, nicht selbst erfasst, so dass die Vorrichtung nicht verwirrt wird durch das Erfassen ihrer eigenen Transaktion.
Bei Transaktionen im ersten obigen Fall, d. i. Transaktionen, in denen der Knotenkontroller die Transaktion akzeptiert und eine globale Kohärenzreaktion an die ausgebende Einheit im PrimärReaktionsfenster ausgibt, wird der Port, der der Vorrichtung entspricht, die die Transaktion ausgegeben hat, im Lokalmodus im Reaktionszyklus der Transaktion gehalten, so dass der Prozessor eine andere Transaktion ausgeben kann. Wie oben bereites gesagt, wird, während das Reaktionsfenster dem Transaktions-Reaktionszyklus entspricht, der RCB so konfiguriert, dass er Reaktionen aus allen Quellen außer dem Port auf dem Knotenkontroller, der die Transaktion ausgegeben hat, kombiniert. Dann ist der Knotenkontroller in der Lage, eine Primär- oder Sekundär-Reaktion über den Port zu liefern, falls der Prozessor eine Transaktion ausgeben will.
Für Transaktionen im zweiten obigen Fall, d. i. Transaktionen, für die es erforderlich ist, global zu erfassen bevor die letztendliche Kohärenzreaktion berechnet werden kann, hält der Knotenkontroller den besonderen Port im Lokalmodus, gibt aber eine Neuanlauftransaktion aus. Der Steuereinheit/Multiplexer, der den ausgehenden Grenzenzwischenspeicher am Port versorgt, ermöglicht, dass der Knotenkontroller diese Funktionalität ausführt.
Alternativ dazu kann der Knotenkontroller wählen, nicht so aggressiv zu sein, und anstatt die Vorrichtung eine Transaktion ausgeben zu lassen kann der Knotenkontroller ggf. selbst im Zyklus, in dem die Transaktion der Vorrichtung im Rest des Systems erfasst wird, eine Null- oder Wiederholungstransaktion an die Vorrichtung ausgeben.
Nehmen wir jetzt Bezug auf die Fig. 10C-10D; hier bezeichnen Übersichtsschaltbilder die Komponenten, deren Signale an den lokalen und globalen Zyklen beteiligt sind. Fig. 10C zeigt die Signale, die vom RCB während eines Globalzyklus berücksichtigt wurden. In gezeigten Beispiel nehmen die Signale für eine einzige Mastervorrichtung, Prozessor 1001, an der Bestimmung der geeigneten Signale für die anderen Vorrichtungen, Knotenkontroller und Speicherteilsysteme zur globalen Reaktion durch den RCB nicht teil. Die Signale für den Prozessor 1001 sind gepaart mit den entsprechenden Signalen von seinem Knotenkontroller, die ebenfalls für die Globalreaktion nicht berücksichtigt werden. Aus der Perspektive des Prozessors 1001 wird er in einem Lokalzyklus gehalten, während eine vom Prozessor 1001 ausgegebene Transaktion für den Rest des Systems erfasst wird. Wie bereits bemerkt, wird zwar ein Prozessor dargestellt, aber die Signale werden auf einer Per-Port-Basis betrachtet, und der Bus eines bestimmten Ports wird in einem lokalen Zyklus gehalten während der Rest des Systems in einem globalen Zyklus steht.
Fig. 10D zeigt die Signale, die vom RCB während eines Lokalzyklus in Betracht gezogen werden. Im gezeigten Beispiel nehmen die Signale von einer einzigen Mastervorrichtung, Prozessor 1001, an der Bestimmung der geeigneten Signale zum Rücksenden an den Prozessor 1001 und seinen Knotenkontroller durch den RCB teil. Signale von anderen Vorrichtungen, Knotenkontrollern und Speicherteilsystemen können gleichzeitig an der Reaktion für die Globalreaktion teilnehmen. Die Signale für den Prozessor 1001 werden gepaart mit den entsprechenden Signalen von seinem Knotenkontroller, die auch die Globalreaktion nicht beeinflussen. Aus der Perspektive des Prozessors 1001 kann er eine andere Transaktion ausgeben, während seine andere Transaktion für den Rest des Systems erfasst wird. Zwecks Klarheit werden Signale vom Adressenschalter für den Lokalzyklus nicht gezeigt, obwohl der RCB diese Signale zum Bestimmen benutzt, welchen Port er in den Lokalzyklus setzen soll.
Erzielen der richtigen Reihenfolge unter den Bus-Speichertransaktionen
Für ein Computersystem müssen zum richtigen Ablauf der Arbeiten bestimmte, von Mastervorrichtungen ausgegebene Speicherzugriffs-Transaktionen und sonstige Transaktionstypen in der richtigen und unverwechselbaren Reihenfolge geordnet sein. In einem System mit einem einzigen Systembus ist diese Aufgabe auf triviale Weise gelöst, weil die Reihenfolge, in der die Transaktionen auf den Bus gelegt werden, die gleiche ist, in der diese Transaktionen ablaufen müssen. In einem verteilten System mit mehrfachen Bussen verlangt diese Aufgabe jedoch, dass den durch das System auf Warteschlange gesetzten Transaktionen eine bestimmte Reihenfolge zugeteilt wird. Die verteilte Architektur der vorliegenden Erfindung ermöglicht, dass eine richtige und unverwechselbare Reihenfolge in einem Satz Transaktionen erzwungen wird. Die Erfindung offenbart auch ein wirksames Mittel zum Erreichen der Reihenfolge, so dass ein Erfassungsprotokoll mit Hardware-Cache-Kohärenz unterstützt werden kann.
Wenn Vorrichtungen in einem Mehrprozessorsystem auf den Speicher zugreifen, entweder unter dem Einfluß von Programmen oder Steuersequenzen, geben sie Speichertransaktionen aus. Die Vorrichtungen können auch andere Bustransaktionen zum Erzielen von Kohärenz, Anordnen, Interrupts usw. im System ausgeben. Diese Transaktionen können in der Regel parallel ablaufen, ohne Störung anderer Transaktionen. Wenn sich aber zwei Transaktionen zum Beispiel auf Adressen innerhalb des gleichen Doppelworts beziehen, heißt das in der 6XX Bus- Terminolgie, dass sie "kollidieren", und die zwei Transaktionen müssen in irgend einer spezifischen Reihenfolge abgeschlossen werden. In einige Fällen ist jede Abschlussreihenfolge zulässig und in anderen Fällen liegt die Reihenfolge fest und wird durch die Transaktionstypen vorgegeben. Wenn zum Beispiel eine Lesetransaktion und eine Schreibtransaktion versuchen, auf eine Adresse zuzugreifen, die als 'Memory Coherence Not Required' (Speicherkohärenz nicht erforderlich) deklariert ist, ist für diese beiden Transaktionen jede beliebige Reihenfolge des Abschlusses zulässig. Wenn sie sich jedoch auf eine in einen Cache- Speicher zu setzende Adresse beziehen, der kohärent gehalten werden muss, muss die Reihenfolge des Abschlusses der Regel folgen, dass das Schreiben vorgeht und das Lesen nachfolgt.
Mittel zum Erzwingen einer vorgegebenen Reihenfolge für Transaktionen
In dem verteilten Mehrprozessorsystem laut Beschreibung in den Fig. 4-10D können die mehrfachen Prozessoren und weitere Vorrichtungen gleichzeitig Transaktionen über die mehrfachen Busse im System ausgeben. Somit entsteht von Anfang an eine Zweideutigkeit über die Reihenfolge der Transaktionen, schon wenn sie ausgegeben werden. Bei ihrem Fluß durch das System legt das System als ersten Schritt eine "heuristische Reihenfolge der Ankunft" für sie fest, die vernünftig und fair ist. Diese vorläufige Ordnung ist nicht notwendigerweise die gleiche Reihenfolge, in der diese Transaktionen schließlich im System ausgeführt werden. Wenn zwei kollidierende Transaktionen im System gleichzeitig aktiv sind, wird diejenige, die durch die heuristische Ordnung den Rang der "früheren der zwei" hat, als erste zum Abschluss vorgemerkt, falls es die Kohärenz nicht anders bestimmt.
Sobald Befehle im System eingehen, werden sie von den Knotenkontrollern "registriert", d. h. sie werden von den Knotenkontrollern gespeichert und stehen zur Analyse und zu Kollisions-Prüfungen zur Verfügung. Knotenkontroller schicken eine der registrierten Transaktionen auf einmal an den Adressenschalter. Der Adressenschalter wählt jeweils gleichzeitig nur eine Transaktion aus mit einem fairen Zuteilungssystem unter den an ihn geschickten Transaktionen, und sendet dann die ausgewählte Transaktion zurück an die Knotenkontroller und an die Speicherteilsysteme. Der Adressenteil der Transaktion, die vom Adressenspeicher gesendet wird, wird als erstes im Knotenkontroller im Grenzenzwischenspeicher FROM_ASX_BL zwischengespeichert. Wie oben beschrieben wird in jedem Zyklus eine eindeutige Transaktion im FROM_ASX_BL in allen Knotenkontrollern und Speicherteilsystemen zwischengespeichert, und alle sonstigen registrierten Transaktionen, die bis zu diesem Zyklus eingegangen sind und die noch aktiv sind, einschließlich der Transaktion, die augenblicklich im FROM_ASX_BL steht, können diese Transaktion "sehen". Diese zwei Eigenschaften werden benutzt zum Definieren der Reihenfolge der Ankunft der Transaktionen unter Verwendung der folgenden vernünftigen und fairen Heuristik: Die Reihenfolge der Ankunft einer Transaktion im System ist die gleiche wie die Reihenfolge der Ankunft im FROM_ASX_BL.
Wenn eine Transaktion zum ersten Mal im FROM_ASX_BL ankommt, wird sie als "erfasst" markiert, um die Tatsache anzuzeigen, dass in einer festen Anzahl Zyklen, die dem augenblicklichen Zyklus folgen, die Transaktion zum ersten Mal bei allen Vorrichtungen des Systems zum Erfassen vorgelegt wird. Die folgende Regel wird befolgt, um einer Transaktion ihre relative Stellung in der Reihenfolge der durchzuführenden Transaktionen zuzuweisen, ungeachtet der wahren Zeit, in der sie ins System eingegeben wurde: Eine registrierte Transaktion, die bereits als erfasst markiert ist, wird nominell als früher in das System eingegangen definiert als die augenblickliche Transaktion im FROM_ASX_BL. Diejenigen, die nicht als erfasst markiert sind, werden nominell als später in das System eingegangen definiert als die augenblickliche Transaktion im FROM_ASX_EL.
Verfahren zum Erzielen der richtigen Abarbeitungssequenz für Transaktionen
Die Transaktion im FROM_ASX_BL bleibt für einen Zyklus dort. Während dieses Zyklus wird die Transaktion mit jeder anderen Transaktion verglichen, die in diesem Augenblick im ganzen System registriert ist, zwecks Erfassens der Kollision- und Reihenfolge-Entscheidung. In jedem dieser paarweisen Vergleiche könnte es zwei Ergebnissätze geben: Einen, der den Abschluss der augenblicklich im FROM_ASX_BL befindlichen Transaktion beeinflußt, und der zweite, der den Abschluss irgendeiner anderen Transaktionen beeinflußt.
Jeder Vergleich führt zu einer Entscheidung, entweder die augenblickliche Vorlage der Transaktion im FROM_ASX_BL zum Erfassen zu ermöglichen, oder den Abschluss auf einen späteren Zeitpunkt zu verschieben. Die Verschiebung wird über die Berechnung eines AStat Retry Signals oder ggf. eines AResp Retry Signals ausgeführt. Diese Signale aus individuellen Vergleichen werden Knoten um Knoten innerhalb des Knotenkontrollers kombiniert. Eine Entscheidung zum Verschieben erhält die höchste Priorität, so dass sogar ein einziger Vergleich, der eine Verschiebung erfordert, gewinnt und dahin führt, dass der Knoten für das Verschieben der Transaktion stimmt. Nur wenn alle Vergleiche innerhalb eines Knotens dafür stimmen, die augenblickliche Erfassung abzuschließen, entscheidet der Knoten, die Transaktion abzuschließen.
Die kombinierten Signale AStat Retry und AResp Retry werden vom Knotenkontroller in die AStat Retry und AResp Retry Codes codiert und werden dem RCB zur Beteiligung am globalen AStat und AResp Fenster der zu erfassenden Transaktion vorgelegt. Während dieser Fenster werden Reaktionen von allen Vorrichtungen, ausgenommen der Vorrichtung, die die Transaktion ausgegeben hat, und Knotenkontrollern vom RCB kombiniert, um eine globale Reaktion zu erzeugen, die an alle Teilnehmer, wie im Hinblick auf die obigen Fig. 10A-10D erklärt wird, zurückgegeben wird. Wieder hat auf dieser globalen Ebene eine Neuversuchsreaktion die höchste Priorität (ausgenommen ein Fehler-Code) und ist die letztendliche Reaktion, wenn einer der Eingabereaktionen ein Neuversuch war. Die Wirkung einer globalen Neuversuchsreaktion ist das Streichen des augenblicklichen Erfassens der Transaktion. Beim Erfassen einer globalen Neuversuchsreaktion für die Transaktion, gibt der Knotenkontroller, in dem die Transaktion registriert ist, entweder die Transaktion für das globale Erfassen neu aus, oder versucht erneut die ursprüngliche Transaktion von der diese Transaktion abgeleitet war.
Diese globalen Neuversuche können wiederholt werden, bis die korrekte Reihenfolge erzielt ist.
Wenn aus welchem Grund auch immer eine Transaktion eine Neuversuchsreaktion erhält, wird ihre Erfassungsmarkierung zurückgesetzt und sie verliert damit ihre augenblickliche nominelle Position in der Transaktionsreihenfolge im System. Wenn sie wieder zum Erfassen kommt, bekommt die Transaktion eine neue Position gemäß den obigen Regeln. Der Mechanismus verbietet nicht unbedingt die Möglichkeit, dass die Neuausgabe der Transaktion hinter einer anderen Transaktion eingeordnet wird, die erst nach ihr in das System gelangt ist. Wenn andererseits die augenblickliche Transaktion durchgeführt wird, kann das bewirken, dass andere Transaktionen erneut versucht werden müssen.
Steuern der Datentransfers
Wie bereits erwähnt, können die Adressenwege und die Datenwege eines Knotenkontrollers mit unterstützender Funktionalität in physikalisch getrennten Komponenten, Chips oder Schaltungen, wie z. B. ein Knotendaten-Kontroller oder ein Knotenadressen-Kontroller, implementiert werden. Ein pragmatischer Grund für diese Trennung der Funktionalität wären physikalische Vorgaben wie z. B. Kontaktstift- Einschränkungen. Wenn z. B. das verteilte, Multibus- Mehrfachprozessorsystem breite Busse unterstützt, z. B. Busse, die eine große Zahl Datenkontaktstifte unterstützen, könnte eine Konstruktion eines Knotenkontrollers mit seiner gesamten Funktionalität innerhalb einer einzigen physikalischen Komponente zu Schwierigkeiten führen, wenn man versuchen würde, mehr als zwei Ports auf einen einzigen Knotenkontroller zu legen, wenn alle Bus-Signale an die einzige physikalische Komponente angeschlossen wären. In dieser Implementierung können Befehle von einem Knotenadressen-Kontroller an seinen entsprechenden Knotendaten-Kontroller geschickt werden, um den Datenfluß durch einen Knoten zu steuern.
Nehmen wir jetzt Bezug auf Fig. 11; hier zeigt ein Übersichtsschaltbild eine gesonderte Daten- und Adressen/Steuerfunktionalität für einen einzigen Knoten in einer Mehrknoten-Systemstruktur für ein verteiltes Multibus- Mehrprozessorsystem. Fig. 11 ist ähnlich wie Fig. 4 und Fig. 5 und zeigt einige Signalleitungen, die auch in Fig. 4 und Fig. 5 gezeigt werden.
Fig. 11 zeigt den Knoten 1100, der Gruppierungen von Systemelementen enthält. Knoten 1100, auch bezeichnet als Node0, wird unterstützt von zwei Knotenkontroller- Komponenten, dem Knotenkontroller 'Daten' (NCD), 1101, und dem Knotenkontroller 'Adressen' (NCA), 1102. Der Knoten 1100 enthält den Prozessor 1103 und den E/A-Agenten 1104, auch bezeichnet als Prozessor P0 und E/A, die die Master für den Knoten 1100 sind. Die Anzahl der Master im Knoten 1100 kann variieren, in Abhängigkeit von der Konfiguration des Systems.
Jeder Knoten umfasst multiple bidirektionale Standard- Prozessor/Adressen-Datenbusse, über die die Master zu dem verteilten System zusammengeschlossen sind. Master- Vorrichtungen 1103 und 1104 sind mit NCD 1101, auch als NC0 bezeichnet, verbunden über Busstücke 1105 und 1107, auch als N0P0BuSData bzw. N0I/OBusData bezeichnet. Busstücke 1105 und 1107 sind der Datenteil, oder die Datensignale, der bidirektionalen Standardbusse dieser Master-Vorrichtungen. Master-Vorrichtungen 1103 und 1104 sind an NCA 1102, auch als NCA0 bezeichnet, über die Busstücke 1106 und 1108, auch als N0P0BusAddr/Ctrl bzw. N0I/OBusAddr/Ctrl bezeichnet, angeschlossen. Die Busstücke 1106 und 1108 sind der Adressen- und Steuerteil, oder die Adressen/Steuersignale, der bidirektionalen Standardbusse dieser Master-Vorrichtungen.
NCD 1101 ist mit einem ersten Speicherteilsystem (nicht dargestellt) über den Datenbus 1109, und mit einem zweiten Speicherteilsystem (nicht dargestellt) über den Bus 1110, auch bezeichnet als N0D0 bzw. N0DS-1, angeschlossen. NCA 1102 verbindet Knoten 1100 über Paare von unidirektionalen Nuradressenbussen 1111 und 1112, auch als AOut0 bzw. AIn0 bezeichnet, mit dem Adressenschalter (nicht dargestellt).
Wie oben schon erwähnt kann ferner jeder Knotendaten- Kontroller in mehrfache Knoten-Daten-Controller je Knoten aufgeteilt sein, so dass jeder Knoten-Daten-Controller einen Teil des Knotendatenwegs unterstützt. In diesem Fall sind die Knotendatenwege über mehr als einen Knotendaten-Kontroller aufgeteilt, was für den Knoten 1100 mehr als einen NCD ergeben würde. Alle Adressen/Steuersignale von jeder Mastervorrichtung im Knoten würden an den NCA des Knotens angeschlossen sein, aber jeweils ein Teil jedes Mastervorrichtungs-Datenbusses ist mit jedem NCD in diesem Knoten verbunden. Zum Beispiel wäre bei vier Prozessoren und zwei NCDs eine erste Hälfte des Datenbusses von jedem Prozessor mit einer ersten Hälfte des Datenbusses von jedem Prozessor mit einem ersten NCD, und die zweite Hälfte des Datenbusses von jedem Prozessor mit dem zweiten NCD verbunden.
NCA 1102 steuert die Aktionen des NCD 1101 durch Steuerbusse 1113 und 1114, auch als Node0Ctrl0 bzw. Node0CtrlJ bezeichnet. Befehle werden vom Adressenchip (NCA) an den Slave-Datenchip (NCD) für jede datenbezügliche Transaktion gesendet. Eine zweckgebundene Befehlsschnittstelle ist vorgesehen für jeden Datenport, einschließlich der Master-Vorrichtungen eines Ports und des Speicherteilsystems, das an den Knoten angeschlossen ist. Das ermöglicht die Fähigkeit, dass ein unverwechselbarer Datentransfer gleichzeitig auf jedem Datenport ablaufen kann. Somit sieht der Steuerbus 1113 Befehle für die Master-Vorrichtung 1103 vor, und der Steuerbus 1114 besorgt die Befehle für die Master-Vorrichtung 1104.
In jedem Port werden die Befehle in zwei Typen aufgeteilt: Nachgelagerte und vorgelagerte Befehle. Nachgelagerte Befehle beinhalten das Führen ankommender Daten von einem Mastervorrichtungsport zu einer Eingangswarteschlange oder von einer Eingangswarteschlange entweder zur Cache-zu-Cache- Warteschlange, einer Vorabruf-Warteschlange oder zum Speicher. Vorgelagerte Befehle steuern das Führen der Daten aus den Speicherports. Das beinhaltet Führen der Eingangsdaten vom Speicher zu Speicherwarteschlangen, von den Speicherwarteschlangen entweder zu den Vorabpuffern oder zu den Mastervorrichtungsports, oder von der Cache-zu-Cache- Warteschlange zurück zu den Mastervorrichtungsports.
Die Größe der Steuerbusse 1113 und 1114 und damit der Inhalt der Befehlswarteschlange zwischen dem NCA und dem NCD kann variieren in Abhängigkeit von der Systemimplementierung, und kann abhängen vom Busprotokoll, das im verteilten Multibussystem, unterstützt wird, dem Typ der Datenstrukturen im NCA, dem Grad der Datenführungsfunktionalität, die im NCD unterstützt werden muss, usw. In einem typischen System werden in jedem Zyklus Freigabeimpulse von einem Master-Chip an einen Slave-Chip geschickt, um Datenpakete an ihren Bestimmungsort zu übertragen. Das wäre in einem Kontaktstift-begrenzten System undurchführbar. In der vorliegenden Erfindung genügt ein einziger Befehl, um eine Transaktion durchzuführen, einschließlich einer Mehrpaket-Datenübertragung. Deshalb können die gleichen Befehlsleitungen benutzt werden, um in jedem Zyklus einen neuen Steuerbefehl an den NCD zu schicken, um eine andere Aufgabe auszuführen. Das ergibt die gewünschte Parallelität zum Anlaufenlassen multipler Transaktionen innerhalb eines einzigen Knotens unter Verwendung der geringstmöglichen Anzahl Steuerkontaktstifte.
Nehmen wir wieder Bezug auf Fig. 9; dort werden Datenwege und Datenstrukturen in einem Knotenkontroller gezeigt. Diese Datenwege und Datenstrukturen können ähnlich oder identisch mit den Datenwegen und Datenstrukturen sein, die in einem NCD implementiert sind, der nur die Datentransfer-Funktionalität des Knotens unterstützt. Fig. 9 zeigt eine einzige FIFO- Warteschlange je Mastervorrichtungsport, FIFO-Warteschlangen 917-920, eine Cache-zu-Cache-FIFO-Warteschlange, FIFO- Warteschlange 928, und eine einzige FIFO-Warteschlange je Speicher-Teilsystem, FIFO-Warteschlangen 929 und 930. Jedoch auch andere Datenstrukturen können in einem NCD implementiert sein, in Abhängigkeit von der in einem Knotenkontroller gewünschten Funktionalität.
Die Datenstrukturen in einem Knotenkontroller-Chipsatz müssten die maximale Flexibilität und Leistung zum Führen von Daten zu und von Mastervorrichtungen in einem verteilten Multibus-Vielprozessorsystem zulassen. Wenn die Knotenkontroller-Funktionalität auf zwei Chiptypen aufgeteilt ist, um den Betrieb breiter Busse zu ermöglichen, von denen einer den Adressenteil steuert während der andere die Daten überträgt, kann eine Implementierung den NCA-Chip die im NCA- Chip gefundenen Datenstrukturen nachahmen lassen, um die durch den Knoten fließenden Daten zu verfolgen. Unterschiedliche Warteschlangen können aufgebaut werden, um die Daten zu führen, in Abhängigkeit vom Typ der ausgegebenen Transaktionen. Anstatt alle Daten zu serialisieren, ermöglicht es eine Warteschlangenstruktur, dass Transaktionen höherer Priorität langsamere oder solche mit niederer Priorität überholen. Sie bewirkt auch die Parallelität, die erforderlich ist, die multiplen Transaktionen gleichzeitig anlaufen zu lassen.
In einer bevorzugten Ausführungsform gibt es drei Warteschlangen, hoch, nieder und E/A, für jeden Prozessorport für ankommende Daten. Die Daten werden jeweils zu der geeignetsten Warteschlange geführt, in Abhängigkeit vom Transaktionstyp. Innerhalb der Warteschlange folgen die Daten einer FIFO-Struktur. Alle vorhergehenden Transaktionen müssen abgeschlossen sein, bevor die neue Transaktion bedient wird. Das fördert die Fairneß innerhalb einer Priorität. Die erste Vorzug wird der Hochprioritätswarteschlange gegeben, wenn der gleiche Zielort aus Mehrfachquellen angesteuert wird. Die zweite Präferenz wird der Niedrigprioritätswarteschlange gegeben, gefolgt von der E/A-Warteschlange. Die beiden letzteren Warteschlangen enthalten Transaktionen, für die die Abschlusszeit für die Systemleistung nicht so kritisch ist wie für die Hochprioritäts-Transaktionen.
Für Daten, die aus dem Speicherteilsystem kommen, gibt es eine FIFO-Warteschlange für jeden Speicherkontroller. Daten, die aus dem Speicher gelesen werden, und Eingriffsdaten haben höchste Priorität beim Schicken der Daten an ihren Zielort. Es sollte wenig oder keine Verzögerung auf dem vorgelagerten Weg geben, weil Lesen dem Schreiben übergeordnet ist. Das befreit den Speicherkontroller von der Konkurrenz. Unter dieser Annahme sind gesonderte Warteschlangen für Lesedaten, Vorabruf und Anforderung, und Eingriffsdaten nicht notwendig, können aber implementiert werden.
Der NCA-Chip schickt Steuersignale zum NCD-Chip, um den Datenverkehr aus beliebigen vier Prozessoren und von beliebigen zwei Speicherteilsystemen zu lenken. Der NCA-Chip kann die NCD-Datenstrukturen in seinen eigenen Datenstrukturen im NCA nachahmen, wobei der Unterschied darin besteht, dass nur ein Eintrag, oder eine Transaktionsmarke, in den Warteschlangen des NCA-Chips für jede Transaktion beibehalten wird. Sobald ein Datentransfer von einer Master- Vorrichtung an den Knotenkontroller geschickt wird, werden die Daten in die geeigneten Eingangs-Warteschlangen, genannt "CPU Eingangs-Warteschlangen" übertragen. Zuteiler entscheiden dann über die Priorität der Ausführung und den endgültigen Zielort für die Daten. Das kann eine Übertragung an den Cache-zu-Cache-Puffer (C2C), zum Vorabruf, zum Ausscheidemechanismus, zu irgendeinem der Speicherports, oder die Einleitung eines Kopierbefehls beinhalten, wobei eine Kopie sowohl an den Speicher als auch an einen internen Puffer (Vorabruf oder C2C) geschickt wird.
Wie bereits beschrieben werden Daten aus dem Speicher in eine zweckgebundene Speicher-Warteschlange gesetzt. Gesonderte Zuteiler für den vorgelagerten Weg können entweder die Daten aus den Speicher-Warteschlangen zu einem Master- Vorrichtungsport schicken, die Daten verwerfen, oder die Daten in Vorabruf-Warteschlangen setzen. In Abhängigkeit vom Zielort können gleichzeitig Mehrfachtransaktionen anlaufen.
In einer bevorzugten Implementierung kann der NCD-Chip Daten zwischen zwei Speicherteilsystemen und bis zu vier Prozessoren leiten. Der NCD enthält einen nichtblockierenden Vier-Port-zu-Zwei-Port-Kreuzschienenschalter mit 08677 00070 552 001000280000000200012000285910856600040 0002010045915 00004 08558 Eingangspuffern an jedem Port, die so bemessen sind, dass sie maximale Effizienz beim Datendurchsatz sicherstellen. Zusätzliche Puffer sehen Speichermöglichkeiten für Zwischenprozessortransfers und den Vorabruf von Daten aus dem Speicher vor. Die Port-Eingangspuffer sowie die Prozessor-zu- Prozessor-Puffer (oder Cache-zu-Cache-Puffer) sind FIFOs.
Für Daten, die zu einem Prozessor geleitet werden, haben die Daten von einem Speicherport höchste Priorität. Das läßt das Strömen von Daten zu wenn immer möglich. Die Cache-zu-Cache- und die Vorabruf-Puffer haben nach den Speicher- Warteschlangen die gleiche Priorität.
Für den Weg vom Prozessor zum Speicher werden mehrfache Eingangspuffer benutzt, um eine gegenseitige Blockierung zu verhindern, die auftreten kann, wenn ein Hochprioritätstransfer durch einen Niedrigprioritäts- oder E/A-Transfer blockiert wird. Auf diesem Weg hat ein Transfer in die Hochprioritätspuffer Vorrang über die Niedrigprioritäts- und E/A-Puffer.
Der Cache-zu-Cache-Puffer wird benutzt, wenn ein Prozessor Daten anfordert, die im Cache eines der anderen Prozessoren stehen. Ein Transfer dieser Art hat höchste Priorität, so dass diese Daten immer über den Hochpriorität-Eingangspuffer quellengeführt werden. Der Cache-zu-Cache-Puffer wird gebraucht, damit es möglich wird, dass die unterschiedlichen Steuerteile der Knotenkontroller etwas unabhängig agieren können. Ohne dieselben müsste der Befehl vom NCA zum Senden von Daten in den Speicher mit einem Befehl zum Senden von Daten an den Prozessor synchronisiert werden.
Der Vorabrufpuffer ist ein volladressierbares Register, bestehend aus vier gesonderten Vorabruf-Anordnungen, jeweils eine reserviert für jeden Prozessor. Jede Anordnung enthält vier Ströme, wobei jeder Strom in der Lage ist, zwei Cache- Leitungen zu halten. Für einen Prozessor vorabgerufene Daten können nur zu diesem Prozessor geschickt werden. Wenn ein anderer Prozessor die gleichen Daten anfordert, wird eine vorabgerufene Kopie ungültig gemacht und dann erneut abgerufen.
Der NCA sieht alle Steuerungen für die Datenbewegung durch den NCD vor. Jeder Datenport hat seinen eigenen Steuerport, wenn also das System zwei Speicherteilsysteme aufweist und ein Knoten vier Master-Vorrichtungen hat, dann können bis zu sechs Datentransfers in dem Knoten jederzeit durch die Ports des NCD unterwegs sein. Es kann auch noch eine Reihe sonstiger Transaktionen geben, die in dem NCD ablaufen, während die sechs Datentransfers durch die NCD-Ports laufen, wie z. B. Transfers zwischen internen Warteschlangen. In Abhängigkeit vom Transfer-Typ können in jedem Zyklus neue Transfers eingeleitet werden. Da der NCD keine Transfers in Warteschlangen setzt, abgesehen von den Transaktionen, die in den obigen Warteschlangen stehen, wird erwartet, dass der NCA einen Transfer nur dann anlaufen läßt, wenn die angeforderten Vorrichtungen auf dem NCD frei sind.
Nehmen wir jetzt Bezug auf Fig. 12A-12B; die Tabellen zeigen ein Codierschema für Datenführungsbefehle, die von einem NCA an einen NCD geschickt werden. Dieses Codierschema sieht Flexibilität vor, um eine optimale Leistung von einem geteilten Transaktionsbussystem unter der Benutzung einer Mindestanzahl Steuerleitungen zu erhalten. Da ein einziger Befehl geschickt wird, auch für eine Mehrpaket-Transaktion, kann ein Befehls-Port benutzt werden, mit jedem Zyklus einen Führungsbefehl zu schicken. Befehle, die Eingabedaten beinhalten, erhalten Priorität über andere Führungsbefehle, da diese kritisch für die Vermeidung von Datenverlust sind.
In dieser Implementierung wird jeder Prozessor-Port mit Eingangspuffern versehen, die so ausgelegt sind, dass sie Hochprioritätsdaten, Niedrigprioritätsdaten und E/A-Daten halten können. Transfers umfassen üblicherweise 1, 2, 4 oder 8 Wörter, obwohl Transfers zu und von Hochprioritätspuffern vorzugsweise immer 8 Wörter betreffen.
Da Prozessor-Port-Datentransfers zu den Niedrigprioritäts- und E/A-Puffern von Hochprioritätstransfers abgebrochen und überschrieben werden können, zusätzlich zu Steuertransfers zu und von Speicherports, sieht der Speicherport die Fähigkeit vor, Daten aus dem Prozessor-Niedrigprioritäts- und E/A- Puffer zu verwerfen. Da ein Transfer in jedem beliebigen Zyklus abgebrochen werden kann, wäre ein Vorabruf-Adressenbit mit einem dritten Transfergrößenbit überlastet, um zuzulassen, das eine Verwerfungstransaktion von 1 bis 8 Wörtern unterstützt.
In der Implementierung, die in den Tabellen der Fig. 12A und Fig. 12B gezeigt wird, ist jeder Satz Steuerleitungen 11 Bits breit. Daher ist jeder Steuerbus zwischen NCA und NCD, wie die Steuerbusse 1113 und 1114 in Fig. 11, 11 Signalleitungen breit, mit insgesamt 44 Signalleitungen für die Ports der Prozessoren oder Mastervorrichtungen, und 22 Signalleitungen für die Ports des Speicherteilsystems.
Hier muss darauf hingewiesen werden, dass Knotenkontroller, NCAs und NCDs, die Daten und Transaktionen steuern, innerhalb des verteilten Multi-Bus-Systems der vorliegenden Erfindung auf einen Bus gelegt werden können. Da die Organisation der Master-Vorrichtungen in den Knoten nur eine bevorzugte Ausführungsform ist, können die Master-Vorrichtungen auch unter Verwendung alternativer Verbindungen organisiert werden. Daher können in einer alternativen Organisation die Knotenkontroller, NCAs und NCDs durch allgemeinere Buszugriffskontroller (BACs), Adressen-BACs (ABACs) bzw. Daten-BACs (DBACs) ersetzt werden, die analoge Trennung von Bus-Adressen/Steuerung und Bus-Daten/Funktionalität innerhalb einer allgemeineren Organisation vorsehen.
Die Vorteile der vorliegenden Erfindung werden anhand der oben gegebenen detaillierten Beschreibung offensichtlich. Die vorliegende Erfindung ermöglicht das Skalieren eines standardisierten und leichter zu überprüfenden Cache- Kohärenz-Protokols auf Busbasis zu einem Multi-Bus- Mehrprozessorsystem großer Breite, dessen große Breite physikalische Busse im Normalfall zu uneffizienten Medien bei der Kommunikation zwischen Systemkomponenten, wie z. B. Prozessoren, Speicherteilsystemen und E/A-Agenten machen würde. Durch Benutzen der verteilten Systemstruktur der vorliegenden Erfindung wird die Entwicklung komplizierterer, auf Unterverzeichnissen beruhender Protokolle usw. unnötig. Die vorliegende Erfindung ermöglicht auch, dass Komponentenschnittstellen schneller getaktet werden als es mit einem einzigen Bus möglich wäre, und verbreitert somit die Bandbreiten der Komponentenschnittstellen und führt zu einer größeren Gesamtsystembandbreite und -leistung. Die vorliegende Erfindung unterstützt auch Mehrfachdatenbusse, und vervielfacht damit die Datenbreite des Systems und verbessert die Effizienz des Prozessors. Die Datenübertragungsparallelität des vorliegenden Systems verbessert ferner den Gesamtdatendurchsatz des Systems.
Ferner muss unbedingt darauf hingewiesen werden, dass zwar die vorliegende Erfindung im Zusammenhang mit einem voll funktionierenden Datenverarbeitungssystem beschrieben wurde, jedoch dem Fachmann bewußt ist, dass die Prozesse der vorliegenden Erfindung in der Form eines computerlesbaren Mediums von Anweisungen und in verschiedenen Formen verteilt werden können, und dass die vorliegende Erfindung gleichermaßen anwendbar ist, unabhängig von dem besonderen Typ der signalführenden Medien, die dann wirklich zur Durchführung der Verteilung benutzt werden. Beispiele für computerlesbare Medien sind u. a. beschreibbare Medien wie eine Floppydisk, ein Festplattenlaufwerk, ein RAM und CD- ROMs, sowie Medien vom Übertragungstyp, wie digitale und analoge Kommunikationsverbindungen.
Die Beschreibung der vorliegenden Erfindung wurde nur für Zwecke der Darstellung und Erläuterung gegeben, sie ist jedoch nicht erschöpfend oder einschränkend für die Erfindung in der geoffenbarten Form gedacht. Dem Fachmann sind zahlreiche Modifikationen oder Änderungen offensichtlich. Die Ausführungsform wurde gewählt und beschrieben, um die Grundlagen der Erfindung und deren praktische Anwendung am besten zu erklären und andere Fachleute in die Lage zu versetzen, die Erfindung in unterschiedlichen Ausführungsformen mit verschiedenen Modifikationen zu verstehen, die für den jeweilig betrachteten besonderen Zweck geeignet sind.

Claims (18)

1. Ein Datenverarbeitungssystem, enthaltend:
Eine Vielzahl Mastervorrichtungen;
eine Vielzahl bidirektionaler Mastervorrichtungsbusse, wobei ein Mastervorrichtungsbus eine oder mehrere Mastervorrichtungen an einen Buszugangskontroller anschließt; und
einen Buszugangskontroller (BAC), beinhaltend:
einen Adressen-BAC (ABAC), wobei der ABAC an jeden Mastervorrichtungsbus der Vielzahl Mastervorrichtungsbusse angeschlossen ist;
einen Daten-BAC (DBAC), wobei der DBAC an jeden Mastervorrichtungsbus der Vielzahl Mastervorrichtungsbusse angeschlossen ist; und
einen Satz Steuerleitungen zwischen dem ABAC und dem DBAC.
2. Das Datenverarbeitungssystem gemäß Anspruch 1, das ferner enthält:
Eine Vielzahl ABAC-Ports, wobei jeder ABAC-Port mit Adressen/Steuerleitungen jedes Mastervorrichtungsbusses verbunden ist; und
Eine Vielzahl DBAC-Ports, wobei jeder DBAC-Port mit Datenleitungen jedes Mastervorrichtungsbusses verbunden ist.
3. Das Datenverarbeitungssystem gemäß Anspruch 1, das ferner enthält: Steuermittel zum Generieren und Senden von Datenflußbefehlen vom ABAC zum DBAC.
4. Das Datenverarbeitungssystem gemäß Anspruch 3, das ferner enthält: Befehlausführungsmittel zum Ausführen von Transaktionsbefehlen.
5. Das Datenverarbeitungssystem gemäß Anspruch 3, in dem die Befehle Mehrpaketdatentransaktionen sind.
6. Das Datenverarbeitungssystem gemäß Anspruch 3, in dem das Steuermittel in der Lage ist, in jedem Zyklus einen neuen Steuerbefehl an den DBAC zu schicken.
7. Das Datenverarbeitungssystem gemäß Anspruch 3, das ferner enthält: Eine Vielzahl von DBAC-Warteschlangen, wobei jeder DBAC- Port mindestens eine DBAC-Warteschlange umfasst, um parallel eine Datentransaktion auf jedem Port zu ermöglichen.
8. Ein Buszugangskontroller (BAC), enthaltend:
Einen Adressen-BAC (ABAC), in dem der ABAC an eine Vielzahl Mastervorrichtungsbusse anschließbar ist;
einen Daten-BAC (DBAC), in dem der DBAC an eine Vielzahl Mastervorrichtungsbusse anschließbar ist; und
einen Satz Steuerleitungen zwischen dem ABAC und dem DBAC.
9. Das Datenverarbeitungssystem gemäß Anspruch 8, das ferner enthält:
Eine Vielzahl ABAC-Ports, wobei jeder ABAC-Port mit Adressen/Steuerleitungen jedes Mastervorrichtungsbusses verbunden ist; und
eine Vielzahl DBAC-Ports, wobei jeder DBAC-Port mit Datenleitungen jedes Mastervorrichtungsbusses verbunden ist.
10. Das Datenverarbeitungssystem gemäß Anspruch 8, das ferner enthält: Steuermittel zum Generieren und Senden von Datenflußbefehlen vom ABAC an den DBAC.
11. Das Datenverarbeitungssystem gemäß Anspruch 8, in dem die Befehle Mehrpaketdatentransaktionen sind.
12. Das Datenverarbeitungssystem gemäß Anspruch 8, in dem das Steuermittel in der Lage ist, in jedem Zyklus einen neuen Steuerbefehl an den DBAC zu schicken.
13. Eine Bussteuervorrichtung enthaltend:
Einen Satz eines oder mehrerer Knotendatenkontroller in denen jeder Knotendatenkontroller einen Teil des Datenwegs zwischen einem Speicherteilsystem und einer Mastervorrichtung vorsieht;
einen Knotenadressenkontroller; und
eine Befehlsschnittstelle zwischen dem Satz Knotendatenkontroller und dem Knotenadressenkontroller.
14. Die Bussteuervorrichtung gemäß Anspruch 13, wobei eine Mastervorrichtung ein Prozessor oder ein Eingangs/Ausgangsagent oder ein kohärenter Speicheradapter ist.
15. Die Bussteuervorrichtung gemäß Anspruch 13, wobei ein Knotendatenkontroller beinhaltet:
Eine Vielzahl von Mastervorrichtungsdatenports, wobei jeder Mastervorrichtungsdatenport an einen Datenteil eines Mastervorrichtungsbusses anschließbar ist;
eine Vielzahl von Speicherteilsystemports, in dem jeder Speicherteilsystemport an einen bidirektionalen Speicherteilsystembus anschließbar ist, wobei ein Speicherteilsystembus Daten zwischen der Bussteuervorrichtung und einem der Speicherteilsysteme transportiert; und
einen Satz Datenwarteschlangen, wobei die Datenwarteschlangen die Übertragung von Daten auf einer gleichzeitigen, Per-Port-Basis unterstützen.
16. Die Bussteuervorrichtung gemäß Anspruch 13, wobei ein Knotendatenkontroller beinhaltet:
Eine Vielzahl von Mastervorrichtungsadressenports, wobei jeder Mastervorrichtungsadressenport mit einem Adressen/Steuerteil eines Mastervorrichtungsbusses verbunden ist;
ein Paar Adressenschalterports, wobei jeder Adressenschalterport mit einem eines Paars unidirektionaler Adressenschalterbusse verbunden ist, wobei einer des Paars Adressenschalterbusse eine Adresse von der Bussteuervorrichtung zum Adressenschalter, und einer des Paars Adressenschalterbusse eine Adresse vom Adressenschalter zur Bussteuervorrichtung übermittelt; und
einen Satz Steuerwarteschlangen, wobei die Steuerwarteschlangen die Übertragung von Daten durch Datenwarteschlangen zum Knotendatenkontroller unterstützen.
17. Die Bussteuervorrichtung gemäß Anspruch 13, wobei die Befehlsschnittstelle einen Satz Steuersignale je Datenport im Knotendatenkontroller enthält.
18. Die Bussteuervorrichtung gemäß Anspruch 13, wobei die Befehlsschnittstelle in der Lage ist, einen Datenübertragungsbefehl je Zyklus zu übertragen.
DE10045915A 1999-09-23 2000-09-16 Verfahren und System zum Steuern von Datenübertragungen mit physikalischer Trennung der Datenfunktionalität von der Adressen- und Steuerfunktionalität in einem verteilten Multi-Bus-Mehrprozessorsystem Ceased DE10045915A1 (de)

Applications Claiming Priority (1)

Application Number Priority Date Filing Date Title
US09/404,280 US6725307B1 (en) 1999-09-23 1999-09-23 Method and system for controlling data transfers with physical separation of data functionality from address and control functionality in a distributed multi-bus multiprocessor system

Publications (1)

Publication Number Publication Date
DE10045915A1 true DE10045915A1 (de) 2001-05-10

Family

ID=23598961

Family Applications (1)

Application Number Title Priority Date Filing Date
DE10045915A Ceased DE10045915A1 (de) 1999-09-23 2000-09-16 Verfahren und System zum Steuern von Datenübertragungen mit physikalischer Trennung der Datenfunktionalität von der Adressen- und Steuerfunktionalität in einem verteilten Multi-Bus-Mehrprozessorsystem

Country Status (2)

Country Link
US (1) US6725307B1 (de)
DE (1) DE10045915A1 (de)

Cited By (1)

* Cited by examiner, † Cited by third party
Publication number Priority date Publication date Assignee Title
WO2004044762A2 (en) * 2002-11-05 2004-05-27 Newisys, Inc. Transaction processing using multiple protocol engines in systems having multiple muti-processor clusters

Families Citing this family (25)

* Cited by examiner, † Cited by third party
Publication number Priority date Publication date Assignee Title
US7996843B2 (en) 1999-08-25 2011-08-09 Qnx Software Systems Gmbh & Co. Kg Symmetric multi-processor system
US6751698B1 (en) * 1999-09-29 2004-06-15 Silicon Graphics, Inc. Multiprocessor node controller circuit and method
US7529799B2 (en) * 1999-11-08 2009-05-05 International Business Machines Corporation Method and apparatus for transaction tag assignment and maintenance in a distributed symmetric multiprocessor system
WO2002065309A1 (en) * 2001-02-13 2002-08-22 Candera, Inc. System and method for policy based storage provisioning and management
US6865637B1 (en) * 2001-06-26 2005-03-08 Alcatel Memory card and system for updating distributed memory
US7043596B2 (en) * 2001-08-17 2006-05-09 Sun Microsystems, Inc. Method and apparatus for simulation processor
JP3759054B2 (ja) * 2002-03-01 2006-03-22 Necエレクトロニクス株式会社 バスシステム
US7277449B2 (en) * 2002-07-29 2007-10-02 Freescale Semiconductor, Inc. On chip network
US7051150B2 (en) * 2002-07-29 2006-05-23 Freescale Semiconductor, Inc. Scalable on chip network
US7200137B2 (en) * 2002-07-29 2007-04-03 Freescale Semiconductor, Inc. On chip network that maximizes interconnect utilization between processing elements
US6996651B2 (en) * 2002-07-29 2006-02-07 Freescale Semiconductor, Inc. On chip network with memory device address decoding
US7139860B2 (en) * 2002-07-29 2006-11-21 Freescale Semiconductor Inc. On chip network with independent logical and physical layers
US6907502B2 (en) * 2002-10-03 2005-06-14 International Business Machines Corporation Method for moving snoop pushes to the front of a request queue
KR100453821B1 (ko) * 2002-10-09 2004-10-20 한국전자통신연구원 마이크로 컨트롤러를 위한 데이터 버스 시스템
US7451231B2 (en) * 2005-02-10 2008-11-11 International Business Machines Corporation Data processing system, method and interconnect fabric for synchronized communication in a data processing system
US7568063B2 (en) * 2006-02-02 2009-07-28 Hewlett-Packard Development Company, L.P. System and method for a distributed crossbar network using a plurality of crossbars
US20080059687A1 (en) * 2006-08-31 2008-03-06 Peter Mayer System and method of connecting a processing unit with a memory unit
US20080098178A1 (en) * 2006-10-23 2008-04-24 Veazey Judson E Data storage on a switching system coupling multiple processors of a computer system
JP2008118184A (ja) * 2006-10-31 2008-05-22 Fujitsu Ltd 処理装置及び処理モジュール
US20080270658A1 (en) * 2007-04-27 2008-10-30 Matsushita Electric Industrial Co., Ltd. Processor system, bus controlling method, and semiconductor device
US7783813B2 (en) * 2007-06-14 2010-08-24 International Business Machines Corporation Multi-node configuration of processor cards connected via processor fabrics
US8554967B2 (en) * 2009-06-16 2013-10-08 Freescale Semiconductor, Inc. Flow control mechanisms for avoidance of retries and/or deadlocks in an interconnect
US8364922B2 (en) * 2009-12-21 2013-01-29 International Business Machines Corporation Aggregate symmetric multiprocessor system
US8370595B2 (en) * 2009-12-21 2013-02-05 International Business Machines Corporation Aggregate data processing system having multiple overlapping synthetic computers
US10872291B2 (en) * 2017-12-22 2020-12-22 Alibaba Group Holding Limited On-chip communication system for neural network processors

Family Cites Families (39)

* Cited by examiner, † Cited by third party
Publication number Priority date Publication date Assignee Title
US4152764A (en) 1977-03-16 1979-05-01 International Business Machines Corporation Floating-priority storage control for processors in a multi-processor system
US4484270A (en) 1982-07-07 1984-11-20 Sperry Corporation Centralized hardware control of multisystem access to shared and non-shared subsystems
IT1184553B (it) 1985-05-07 1987-10-28 Honeywell Inf Systems Architettura di sistema a piu' processori
EP0429733B1 (de) 1989-11-17 1999-04-28 Texas Instruments Incorporated Multiprozessor mit Koordinatenschalter zwischen Prozessoren und Speichern
US6070003A (en) 1989-11-17 2000-05-30 Texas Instruments Incorporated System and method of memory access in apparatus having plural processors and plural memories
US5208914A (en) 1989-12-29 1993-05-04 Superconductor Systems Limited Partnership Method and apparatus for non-sequential resource access
US5555425A (en) * 1990-03-07 1996-09-10 Dell Usa, L.P. Multi-master bus arbitration system in which the address and data lines of the bus may be separately granted to individual masters
JP2770603B2 (ja) 1991-03-14 1998-07-02 三菱電機株式会社 並列計算機
US5689657A (en) * 1991-03-30 1997-11-18 Deutsche Itt Industries Gmbh Apparatus and methods for bus arbitration in a multimaster system
US5440752A (en) 1991-07-08 1995-08-08 Seiko Epson Corporation Microprocessor architecture with a switch network for data transfer between cache, memory port, and IOU
US5327570A (en) 1991-07-22 1994-07-05 International Business Machines Corporation Multiprocessor system having local write cache within each data processor node
US5426765A (en) 1991-08-30 1995-06-20 Compaq Computer Corporation Multiprocessor cache abitration
US5335335A (en) 1991-08-30 1994-08-02 Compaq Computer Corporation Multiprocessor cache snoop access protocol wherein snoop means performs snooping operations after host bus cycle completion and delays subsequent host bus cycles until snooping operations are completed
US5325503A (en) 1992-02-21 1994-06-28 Compaq Computer Corporation Cache memory system which snoops an operation to a first location in a cache line and does not snoop further operations to locations in the same line
KR100294105B1 (ko) 1992-04-29 2001-09-17 썬 마이크로시스템즈, 인코포레이티드 멀티 프로세서 컴퓨터 시스템의 일관성 카피-백 버퍼용 방법 및 장치
JP3057934B2 (ja) * 1992-10-30 2000-07-04 日本電気株式会社 共有バス調停機構
JPH06231074A (ja) * 1993-01-29 1994-08-19 Nec Corp システムバスの多重アクセス方式
JP3452929B2 (ja) 1993-09-27 2003-10-06 株式会社エヌ・ティ・ティ・ドコモ マルチプロセッサ
US5577204A (en) 1993-12-15 1996-11-19 Convex Computer Corporation Parallel processing computer system interconnections utilizing unidirectional communication links with separate request and response lines for direct communication or using a crossbar switching device
JP2778913B2 (ja) 1994-04-26 1998-07-23 株式会社東芝 マルチプロセッサシステム及びメモリアロケーション方法
US5566342A (en) 1994-08-31 1996-10-15 International Business Machines Corporation Scalable switch wiring technique for large arrays of processors
US6029217A (en) * 1994-10-03 2000-02-22 International Business Machines Corporation Queued arbitration mechanism for data processing system
JPH08235141A (ja) 1995-02-28 1996-09-13 Kofu Nippon Denki Kk 情報処理システム
US5794062A (en) * 1995-04-17 1998-08-11 Ricoh Company Ltd. System and method for dynamically reconfigurable computing using a processing unit having changeable internal hardware organization
US5704058A (en) * 1995-04-21 1997-12-30 Derrick; John E. Cache bus snoop protocol for optimized multiprocessor computer system
US6011791A (en) * 1995-11-15 2000-01-04 Hitachi, Ltd. Multi-processor system and its network
US5765196A (en) * 1996-02-27 1998-06-09 Sun Microsystems, Inc. System and method for servicing copyback requests in a multiprocessor system with a shared memory
US5872940A (en) * 1996-04-01 1999-02-16 Motorola, Inc. Programmable read/write access signal and method therefor
US5754877A (en) * 1996-07-02 1998-05-19 Sun Microsystems, Inc. Extended symmetrical multiprocessor architecture
US6092165A (en) * 1996-08-16 2000-07-18 Unisys Corporation Memory control unit using a programmable shift register for generating timed control signals
US5931938A (en) 1996-12-12 1999-08-03 Sun Microsystems, Inc. Multiprocessor computer having configurable hardware system domains
US5895495A (en) 1997-03-13 1999-04-20 International Business Machines Corporation Demand-based larx-reserve protocol for SMP system buses
US5901294A (en) * 1997-09-18 1999-05-04 International Business Machines Corporation Method and system for bus arbitration in a multiprocessor system utilizing simultaneous variable-width bus access
US6122714A (en) 1997-10-24 2000-09-19 Compaq Computer Corp. Order supporting mechanisms for use in a switch-based multi-processor system
US6154816A (en) 1997-10-24 2000-11-28 Compaq Computer Corp. Low occupancy protocol for managing concurrent transactions with dependencies
US6163835A (en) * 1998-07-06 2000-12-19 Motorola, Inc. Method and apparatus for transferring data over a processor interface bus
US6330656B1 (en) * 1999-03-31 2001-12-11 International Business Machines Corporation PCI slot control apparatus with dynamic configuration for partitioned systems
US6442597B1 (en) * 1999-07-08 2002-08-27 International Business Machines Corporation Providing global coherence in SMP systems using response combination block coupled to address switch connecting node controllers to memory
US6456676B1 (en) * 1999-08-27 2002-09-24 Intel Corporation Clock signal distribution and synchronization

Cited By (5)

* Cited by examiner, † Cited by third party
Publication number Priority date Publication date Assignee Title
WO2004044762A2 (en) * 2002-11-05 2004-05-27 Newisys, Inc. Transaction processing using multiple protocol engines in systems having multiple muti-processor clusters
WO2004044762A3 (en) * 2002-11-05 2006-02-09 Newisys Inc Transaction processing using multiple protocol engines in systems having multiple muti-processor clusters
US8185602B2 (en) 2002-11-05 2012-05-22 Newisys, Inc. Transaction processing using multiple protocol engines in systems having multiple multi-processor clusters
US8572206B2 (en) 2002-11-05 2013-10-29 Memory Integrity, Llc Transaction processing using multiple protocol engines
US8898254B2 (en) 2002-11-05 2014-11-25 Memory Integrity, Llc Transaction processing using multiple protocol engines

Also Published As

Publication number Publication date
US6725307B1 (en) 2004-04-20

Similar Documents

Publication Publication Date Title
DE10045915A1 (de) Verfahren und System zum Steuern von Datenübertragungen mit physikalischer Trennung der Datenfunktionalität von der Adressen- und Steuerfunktionalität in einem verteilten Multi-Bus-Mehrprozessorsystem
DE69832943T2 (de) Sequenzsteuerungsmechanismus für ein switch-basiertes Mehrprozessorsystem
DE60219436T2 (de) System mit adressbasierter Intraknotenkohärenz und datenbasierter Interknotenkohärenz
DE69729243T2 (de) Multiprozessorsystem mit Vorrichtung zur Optimierung von Spin-Lock-Operationen
DE60207210T2 (de) System mit Schnittstellen, einem Schalter und einer Speicherbrücke mit cc-numa (cache-coherent non-uniform memory access)
DE69727856T2 (de) Multiprozessorsystem mit Konsistenzfehler-Registrierung mit entsprechendem Verfahren
DE69906585T2 (de) Datenverarbeitungssystem mit nichtuniformen speicherzugriffen (numa) mit spekulativer weiterleitung einer leseanforderung an einen entfernten verarbeitungsknoten
DE69724354T2 (de) Ein Mehrprozessorrechnersystem mit lokalen und globalen Adressräumen und mehreren Zugriffsmoden
DE60204213T2 (de) Level 2 Cache mit lokaler Beibehaltung von Kohärenzblöcken
DE60217221T2 (de) Ein-Chip System zur Paketverarbeitung
DE102009023898B4 (de) Optimierung von gleichzeitigen Zugriffen in einem verzeichnisbasierten Kohärenzprotokoll
DE69721643T2 (de) Multiprozessorsystem ausgestaltet zur effizienten Ausführung von Schreiboperationen
DE69724355T2 (de) Erweiterte symmetrische Multiprozessorarchitektur
DE69722079T2 (de) Ein Mehrrechnersystem mit Anordnung zum Durchführen von Blockkopieroperationen
DE60202926T2 (de) Multicomputersystem mit konfigurierbaren Schnittstellen für flexible Systemkonfigurationen
DE69732020T2 (de) Wiedereinordnung von Speicheranforderungen in einem Datenverarbeitungssystem
DE69722512T2 (de) Mehrrechnersystem mit einem die Anzahl der Antworten enthaltenden Kohärenzprotokoll
DE69721640T2 (de) Multiprozessor-Rechnersystem und Verfahren zur Steuerung des Verkehrsflusses
DE69233655T2 (de) Mikroprozessorarchitektur mit der Möglichkeit zur Unterstützung mehrerer verschiedenartiger Prozessoren
DE69724353T2 (de) Mehrrechnersystem mit einem Drei-Sprung-Kommunikationsprotokoll
DE69628609T2 (de) Distribuiertes Pipeline-Busarbitrierungssystem
DE69721891T2 (de) Deterministisches Kohärenzprotokoll für verteilten Multicache-Speicher
DE60003834T2 (de) Vituelle kanäle und entsprechende pufferzuweisungen für einen blockierungfreien rechnersystem -betrieb
DE69133257T2 (de) Vorrichtung und verfahren zur schnellen paketvermittlung
DE10316725B4 (de) Datenverwaltungsverfahren für ein Distributed Shared Memory-System

Legal Events

Date Code Title Description
OP8 Request for examination as to paragraph 44 patent law
8120 Willingness to grant licences paragraph 23
R016 Response to examination communication
R002 Refusal decision in examination/registration proceedings
R003 Refusal decision now final

Effective date: 20120727