-
Hintergrund
der Erfindung
-
1. Gebiet
der Erfindung
-
Die
vorliegende Erfindung bezieht sich auf Computersysteme, insbesondere
auf die Spiegelung von Daten auf mehrere Speichereinrichtungen,
beispielsweise auf Speicherbänke.
-
2. Hintergrundinformationen
-
Computersysteme
mit hoher Leistungsfähigkeit
arbeiten häufig
mit mehreren Prozessoren oder Zentraleinheiten (CPUs). Jeder Prozessor
kann dabei auf gemeinsame und private Daten zugreifen, beispielsweise
auf Programmanweisungen (z. B. Algorithmen) sowie auf Daten, die
in einer Speichereinheit abgelegt sind, die mit den Prozessoren
gekoppelt ist. Eine der gängigeren
Mehrprozessorarchitekturen ist das so genannte systolische Array,
bei dem jeder Prozessor mit seinem nächsten Nachbarn in einer netzartigen
Topologie gekoppelt ist und die Prozessoren eine Befehlsfolge bei
den Daten ausführen, die
zwischen ihnen fließen.
In der Regel arbeiten die Prozessoren in einem systolischen Array
im „Gleichschritt", wobei jeder Prozessor
zwischen Verarbeitungs- und Kommunikationsphase hin- und herwechselt.
-
Systolische
Arrays werden häufig
eingesetzt, wenn das zu lösende
Problem in einzelne Arbeitseinheiten aufgeteilt werden kann. Bei
eindimensionalen (1-D) systolischen Arrays, die aus einer einzigen „Reihe" an Prozessoren bestehen,
ist jeder Prozessor für
die Ausführung
eines bestimmten Befehlssatzes an den Eingabedaten verantwortlich,
damit die entsprechenden Ausgabedaten erzeugt werden, die dann (wahrscheinlich
mit weiteren Eingabedaten) an den nächsten Prozessor im Array weitergeleitet
werden. Um den Durchsatz zu maximieren, wird das Problem so aufgeteilt,
dass jeder Prozessor ungefähr dieselbe
Zeit benötigt,
um seinen Arbeitsanteil zu erledigen. Auf diese Weise können die
neuen Eingabedaten im Pipeline-Verfahren im Array weitergeleitet werden,
und zwar in einer Geschwindigkeit, die der Verarbeitungszeit jedes
Prozessors entspricht.
-
Dabei
können
so viele Einheiten an Eingabedaten parallel verarbeitet werden,
wie sich Prozessoren im Array befinden. Die Leistung kann gesteigert werden,
indem dem Array mehr Prozessoren hinzugefügt werden, vorausgesetzt, dass
das Problem weiterhin in kleinere Arbeitseinheiten aufgeteilt werden
kann. Sobald dieses Aufteilungslimit erreicht ist, kann die Verarbeitungsleistung
weiter erhöht
werden, indem mehrere Reihen parallel konfiguriert werden und neue
Eingabedaten dem ersten Prozessor in einer nächsten Reihe des nächstfolgenden
Arrays zugewiesen werden.
-
Ein
geeignetes Einsatzgebiet für
Mehrprozessorarchitekturen – wie
systolische Arrays – ist
der Bereich der Datenkommunikation. Systolische Arrays werden insbesondere
in den Forwarding-Engines von Netzwerkzwischenstationen oder -knoten,
z. B. in Routern, eingesetzt. Ein Zwischenknoten verbindet Datenübertragungsabschnitte
und Subnetzwerke eines Computernetzwerks über eine Reihe von Ports untereinander,
um den Datenaustausch zwischen zwei oder mehr Endknoten des Computernetzwerks
zu ermöglichen.
Die Endknoten kommunizieren in der Regel gemäß vordefinierten Protokollen
(z. B. TCP/IP – Transmission
Control Protocol/Internet Protocol – oder IPX – Internetwork Packet eXchange
Protocol) über
den Austausch einzelner Pakete oder Frames. Die Forwarding-Engine
wird häufig
vom Zwischenknoten eingesetzt, um Datenpakete zu verarbeiten, die
an den verschiedenen Ports empfangen werden. Diese Verarbeitung
kann auch die Bestimmung des Ziels eines Datenpakets, etwa die Festlegung
des Ausgabeports, sowie das Stellen des Datenpakets in eine Ausgabewarteschlange,
die mit dem Ziel verknüpft
ist, beinhalten.
-
Die
Prozessoren einer Forwarding-Engine haben in der Regel einen gemeinsamen
Zugriff auf eine oder mehrere Speichereinrichtungen, in denen Informationen,
die von allen Prozessoren benötigt werden,
z. B. Übermittlungstabellen,
abgelegt sind. Jede Speichereinrichtung kann darüber hinaus aus einer Vielzahl
an Speicherbänken
bestehen. Um eine konsistente „Ansicht" der Daten durch
die verschiedenen Prozessoren sicherzustellen, werden die einzelnen
Speichereinrichtungen und/oder Speicherbänke häufig gesperrt, während auf
sie zugegriffen wird. So sperrt beispielsweise ein Prozessor, der
Daten von einer bestimmten Speicherbank lesen will, diese Speicherbank,
damit andere Prozessoren den Inhalt während des Lesezugriffs nicht
verändern
können.
Gleichermaßen
sperrt ein Prozessor, der Daten schreiben will, diese Speicherbank,
so dass andere Prozessoren aus dieser Speicherbank keine Daten auslesen
können,
solange der Schreibvorgang nicht abgeschlossen ist. Obwohl solche
Verriegelungsmechanismen zur Datenkonsistenz beitragen, führen sie häufig zu
Verzögerungen,
wenn mehrere Prozessoren auf Daten derselben Speicherbank zugreifen
wollen.
-
Um
solche Verzögerungen
zu reduzieren oder zu vermeiden, werden Inhalte von einer Speicherbank
in eine andere kopiert. Wenn z. B. die Speichereinrichtung über vier
Speicherbänke
verfügt,
dann kann der Inhalt der Speicherbank 0 (B0) an die Speicherbank
2 (B2) gespiegelt werden, und der Inhalt der Speicherbank 1 (B1)
an die Speicherbank 3 (B3). Folglich ist der Inhalt der Speicherbänke B2-B3
identisch mit dem der Speicherbänke
B0-B1. Um diese Anordnung vorteilhaft zu nutzen, wird jedem Prozessor
eine dieser beiden Gruppen zugewiesen, und jede Gruppe darf nur
auf einen der gespiegelten Speicherbanksätze zugreifen. Oder anders ausgedrückt: Die
erste Prozessorgruppe greift auf die Speicherbänke B0-B1 zu, während die
zweite Prozessorgruppe die Speicherbänke B2-B3 verwendet. Wenn ein
Prozessor aus der ersten Gruppe Daten auslesen muss, die in der
Speicherbank B1 abgelegt sind, so sperrt er damit nur die Speicherbank
B1. Die Speicherbank B3, die eine identische Kopie der Daten aus
der Speicherbank B1 enthält,
bleibt entsperrt. Entsprechend gilt, dass ein Prozessor aus der zweiten
Gruppe ohne weiteres auf die Speicherbank B3 zugreifen kann, auch
wenn die Speicherbank B1 gesperrt ist. So kann ein Prozessor aus
jeder Gruppe gleichzeitig auf dieselben Daten zugreifen.
-
Um
eine solche Anordnung zur Datenspiegelung einzurichten, führen die
Prozessoren in der Regel Leser- und Schreibercodes aus. Der Lesercode für die Prozessoren
ist vordefiniert, um die Speicherbänke anzusprechen, mit denen
der Prozessor verknüpft
ist, z. B. die Speicherbänke
B0-B1 oder die Speicherbänke
B2-B3. Der Lesercode führt
eine Warteschleife, z. B. ein „Spinlock", aus, bis der Prozessor
die Freigabe der Sperre für
die entsprechende Speicherbank, z. B. Speicherbank B1, die ausgelesen
werden soll, erhält.
Sobald die Freigabe erteilt ist, führt der Prozessor den Lesevorgang
aus und die Ergebnisse werden an den anfragenden Prozessor ausgegeben.
Der Prozessor gibt dann die Sperre auf und ermöglicht damit einem anderen
Prozessor den Zugriff auf die Speicherbank B1. Da alle Daten auf zwei
Speicherbänken
gespiegelt sind, muss ein Schreibvorgang an beiden Speicherorten
erfolgen, um Datenkonsistenz sicherzustellen. In diesem Fall führt der
Schreibercode ein Spinlock aus, bis beide Speicherbänke, z.
B. B1 und B3, gesperrt sind. Sobald die Sperre bestätigt ist,
führt der
Prozessor die beiden Schreibvorgänge
aus. Sobald die beiden Schreibvorgänge abgeschlossen sind, wird
die Sperre der Speicherbänke
aufgehoben, so dass auf beide Speicherbänke wieder von anderen Prozessoren
zugegriffen werden kann.
-
Darüber hinaus
erfordert eine gemeinsam genutzte Speichereinrichtung häufig eine
gerechte Zuteilung (Arbitration) zwischen den Prozessoren, die auf
die Quelle zugreifen wollen. Mittels Arbitration versucht die Speichereinrichtung
einen Prozessor daran zu hindern, wiederholt auf die Speichereinrichtung
zuzugreifen und damit andere Prozessoren am Zugang zur Speichereinrichtung
zu hindern. In der Regel wird bei einer Arbitration ein Prozessor,
der gerade auf eine Speichereinrichtung zugegriffen hat, in eine
Warteposition gezwungen, bis alle anderen Prozessoren die Möglichkeit
hatten, auf die Speichereinrichtung zuzugreifen; erst dann darf
der ursprüngliche
Prozessor ein zweites Mal auf die Speichereinrichtung zugreifen.
Wie weiter oben beschrieben, löst ein
Schreibvorgang eines Prozessors auf eine gespiegelte Speicherbank
zwei Schreiboperationen aus – eine
für jede
Speicherbank. Wenn die Speichereinrichtung eine Arbitration ausführt, muss
der Prozessor, nach der ersten Schreiboperation warten, bis alle anderen
Prozessoren die Möglichkeit
hatten, auf die Speichereinrichtung zuzugreifen. Erst dann erhält der Prozessor
die Genehmigung für
die zweite Schreiboperation. Da jedoch der Prozessor beide Speicherbänke gesperrt
hat, bevor mit der Schreiboperation begonnen wurde, bleiben beide
Speicherbänke
die gesamte Zeit gesperrt. Dies hat zur Folge, dass die anderen
Prozessoren daran gehindert werden, auf eine der beiden Speicherbänke zuzugreifen, bis
beide Schreibvorgänge
vollständig
abgeschlossen sind. Dies kann die Effizienz des Systems beeinträchtigen.
-
US-A1-2001/0001871
legt einen Plattenarray-Controller offen, der aus zwei identischen
Controllern besteht, wobei jeder Controller über einen eigenen Speicher
und einen Speichermanager verfügt. Der
Speichermanager vereinfacht die Ausführung der gespiegelten Schreib-
und Lesevorgänge über eine
Hot-Plugfähige
Schnittstelle, die die Controller miteinander verbindet.
-
EP-A1-0744696
legt eine Methode zur Datenübertragung
an ein Speichermedium offen, bei der ein Controller eingesetzt wird,
der über
einen Cache-Speicher und einen Parameter zur Cache-Bereinigung am
Host-Computer verfügt.
-
Aufgrund
dessen ist ein effizienterer Mechanismus für die Speichereinrichtung erforderlich.
Die Erfindung löst
das oben erwähnte
Erfordernis mit den Methoden und Geräten, die in den beigefügten unabhängigen Ansprüchen 1,
13, 16 und 24 definiert sind.
-
Zusammenfassung
der Erfindung
-
Hinsichtlich
eines Aspekts wird eine Methode für das Lesen von Daten bereitgestellt,
die an die ersten und zweiten Speicherbänke in einem Memory Controller,
der Zugriff auf eine Vielzahl von Speicherbänken hat, gespiegelt werden.
Die Methode beinhaltet die folgenden Schritte: Empfang einer Leseanfrage
an die erste Speicherbank, wobei die Leseanfrage anzeigt, dass es
sich um eine gespiegelte Leseanfrage handelt; Erkennen der zweiten
Speicherbank, an die die Daten gespiegelt werden; Ausgabe der Leseanfrage
ausschließlich
an die zweite Speicherbank, vorausgesetzt, dass die erste Speicherbank,
die von der Leseanfrage angesprochen wurde, nicht verfügbar ist.
-
Hinsichtlich
eines weiteren Aspekts wird ein Memory Controller bereitgestellt,
der Daten ausliest, die an der ersten und zweiten Speicherbank gespiegelt
sind, wobei der Memory Controller Zugriff auf eine Vielzahl von
Speicherbänken
hat. Der Memory Controller bietet: Möglichkeiten zum Empfang einer Leseanfrage
an die erste Speicherbank, wobei die Leseanfrage anzeigt, dass es
sich um eine gespiegelte Leseanfrage handelt; Möglichkeiten zum Erkennen der
zweiten Speicherbank, an die die Daten gespiegelt werden; Möglichkeiten
zur Ausgabe der Leseanfrage ausschließlich an die zweite Speicherbank,
vorausgesetzt, dass die erste Speicherbank, die von der Leseanfrage
angesprochen wurde, nicht verfügbar
ist.
-
Hinsichtlich
eines weiteren Aspekts wird ein Memory Controller bereit gestellt,
der Zugriff auf eine Vielzahl von Speicherbänken hat, wobei der Memory Controller
so angepasst wurde, dass er eine atomische Read-Modify-Write (Lesen-Ändern-Schreiben)-Transaktion
an den auf die erste und zweite Speicher bank gespiegelten Daten
ausführen
kann. Der Memory Controller verfügt über: Möglichkeiten für den Empfang
einer atomischen Read-Modify-Write-Transaktion, die die erste Speicherbank
der beiden Speicherbänke
anspricht, wobei die Read-Modify-Write-Transaktion anzeigt, dass
es sich bei der Read-Modify-Write-Transaktion
um eine gespiegelte Read-Modify-Write-Transaktion handelt; Möglichkeiten
zum Erkennen der zweiten Speicherbank, an die die Daten gespiegelt
werden; Möglichkeiten
zur Auswahl entweder der ersten oder zweiten Speicherbank, aus der
die Daten abhängig
von ihrer Verfügbarkeit
auf der ersten oder zweiten Speicherbank gelesen werden; Möglichkeiten
zur Änderung
der Daten, die aus dieser ausgewählten
Speicherbank gelesen werden; Möglichkeiten
zum Schreiben der geänderten
Daten auf die zwei Speicherbänke,
auf die die Daten gespiegelt werden.
-
Im
vorliegenden Dokument wird eine dynamische Adressiermethode zur
Datenspiegelung über mehrere
Speicherbänke
einer Speichereinrichtung sowie für den effizienten Zugriff auf
diese Daten beschrieben. Die Speichereinrichtung befindet sich vorzugsweise
in einem System mit einer Vielzahl an Prozessoren und einem Memory
Controller, der praktischerweise mit einer Speichereinrichtung gekoppelt ist.
Jeder der Prozessoren kann Anfragen an den Controller ausgeben,
um auf die Speichereinrichtung zuzugreifen. Der Memory Controller
enthält
eine Vielzahl an Zwischenspeichern für die Ablage der Anfragen sowie
einen Arbiter, der die Reihenfolge festlegt, in der die gepufferten
Speicheranfragen Zugang zu den Speicherbänken der Speichereinrichtung
erhalten. Daten, die in den Speicherbänken abgelegt sind, werden
vorzugsweise in separat zu adressierenden Einheiten angeordnet,
beispielsweise in Speicherblöcken.
Jede Speicheradresse ist darüber
hinaus so konfiguriert, dass sie ein Spiegel-Flag-Feld enthält, das
von dem Prozessor, der die jeweilige Anfrage ausgibt, gesetzt oder
nicht gesetzt werden kann.
-
In
einer Ausführungsart
gibt ein Prozessor, um Daten zu schreiben, die an zwei Speicherbänke gespiegelt
werden, einen einzigen Schreibvorgang mit dem gesetzten Spiegel-Flag-Feld
aus. Der Memory Controller merkt, dass der Spiegel-Flag des Schreibvorgangs
gesetzt ist und wartet daher darauf, dass beide Speicherbänke wieder
verfügbar
sind. In diesem Stadium sorgt der Memory Controller dafür, dass
der Schreibvorgang bei beiden Speicherbänken ausgeführt wird. Der Memory Controller
ist bezeichnenderweise so konfiguriert, dass si chergestellt wird, dass
beide Speicherbänke
zusammen mit dem Schreibvorgang aktualisiert werden, bevor andere Anfragen
die Berechtigung erhalten, auf diese Speicherbänke zuzugreifen. Es ist hierbei
von Vorteil, dass keine der beiden Speicherbänke gesperrt werden muss, um
den Schreibvorgang abzuschließen.
-
Darüber hinaus
kann ein Prozessor, der Daten lesen will, die über zwei Speicherbänke gespiegelt
wurden, diese Daten sowohl von der einen wie der anderen Speicherbank
erhalten, auch wenn der Lesevorgang nur eine der beiden Speicherbänke anspricht.
Der Prozessor gibt bezeichnenderweise vorzugsweise eine Leseanfrage
an den Memory Controller aus, der die gewünschte Speicheradresse auflistet.
Darüber
hinaus setzt der Prozessor vorzugsweise das Spiegel-Flag-Feld der angegebenen
Speicheradresse. Obwohl die Anfrage nur eine Speicherbank angibt,
weil das Spiegel-Flag-Feld gesetzt ist, prüft der Memory Controller die
Verfügbarkeit
beider Speicherbänke,
die die gewünschten
Daten enthalten. Der Memory Controller prüft also die angegebene Speicherbank
sowie die Speicherbank, die die gespiegelte Version der angegebenen
Speicherbank ist. Wenn beide Speicherbänke verfügbar sind, wird die Leseanfrage
angenommen und die gewünschten Daten
werden aus der Speicherbank abgerufen, die verfügbar war, und an den Prozessor
zurückgegeben.
Wiederum muss der Prozessor die Speicherbank nicht entsperren, bevor
er den Lesevorgang ausgibt. Stattdessen ist der Memory Controller
so konfiguriert, dass er andere Anfragen, die dieselbe Speicherbank
ansprechen, daran hindert, sich vor die Leseanfrage zu schieben.
Anstatt die Daten auf der Ebene der Speicherbank zu spiegeln, spiegelt
die vorliegende Erfindung die Daten auf Blockebene. Das System erlaubt
also das Spiegeln ausgewählter Speicherblöcke, z.
B. einer häufig
verwendeten Tabelle, von einer Speicherbank auf die andere, anstatt den
gesamten Inhalt der Speicherbänke
spiegeln zu müssen.
Die vorliegende Erfindung erhöht
damit drastisch den tatsächlichen
Speicherplatz der Speichereinrichtung.
-
Kurze Beschreibung
der Zeichnungen
-
Die
folgende Beschreibung der Erfindung bezieht sich auf die beigefügten Zeichnungen:
-
1 ist
ein Blockdiagramm eines Computernetzwerks, das aus mehreren untereinander
verbundenen Kommunikationsmedien sowie Subnetzwerken besteht, die
mit einer Vielzahl an Endknoten verknüpft sind.
-
2 ist
ein schematisches Blockdiagramm (Teildiagramm) eines Netzwerkzwischenknotens, beispielsweise
einer Netzwerkvermittlungseinheit, die mit der vorliegenden Erfindung
vorteilhaft eingesetzt werden kann.
-
3 ist
ein schematisches Blockdiagramm (Teildiagramm) einer Forwarding-Engine
des Knotens aus 2, die aus einer Vielzahl an
Prozessoren besteht, die als ein mehrdimensionales systolisches
Array aufgebaut ist.
-
4 ist
eine schematische Darstellung eines Memory Controllers gemäß der vorliegenden
Erfindung und
-
5 und 6 sind
schematische Darstellungen von Speicheradressen gemäß der vorliegenden
Erfindung.
-
Detaillierte
Beschreibung der speziellen Ausführungsform
-
1 ist
ein Blockdiagramm eines Computernetzwerks 100, das aus
einer Ansammlung aus miteinander verbundenen Kommunikationsmedien und
Subnetzwerken besteht, die mit einer Vielzahl von Stationen verknüpft sind.
Die Stationen sind in der Regel Computer, die aus Endknoten 102 und 112 und
einem Netzwerkzwischenknoten 200 bestehen. Der Zwischenknoten 200 kann
ein Router oder eine Netzwerkvermittlungseinheit (Switch) sein,
bei der die Endknoten 102 und 112 aus PCs, Workstations, Servern,
PDAs, etc. bestehen können.
Die Subnetzwerke bestehen normalerweise aus lokalen Netzwerken (LANs) 110 und 120,
obwohl die Erfindung auch sehr vorteilhaft mit anderen Konfigurationen
von Kommunikationsmedien arbeiten dürfte, beispielsweise mit Punkt-zu-Punkt-Netzwerken,
Weitbereichsnetzen (WANs), drahtlosen Netzwerken, usw. Die Kommunikation
zwischen den Stationen eines Netzwerks wird in der Regel über den
Austausch einzelner Netzwerknachrichten, wie Frames oder Pakete,
zwischen den kommunizierenden Endknoten ausgeführt, und zwar gemäß einem
vordefinierten Protokoll, beispielsweise dem Internet-Protokoll
IP, dem IPX-Protokoll, dem AppleTalk-Protokoll, dem DEC-Net-Protokoll, etc.
-
2 ist
ein schematisches Blockdiagramm (Teildiagramm) des Zwischenknotens 200,
der in der zeichnerischen Ausführungsart
vorzugsweise eine Netzwerkvermittlungseinheit ist. Der Knoten 200 führt in der
Regel Schicht 2 (L2)-Verarbeitungsfunktionen
aus, beispielsweise so genannte „cut-through" Operationen, bei
denen ein Frame vor der Übertragung
an einen Zielort nicht als Ganzes gespeichert werden muss. Außerdem führt der
Knoten 200 Schicht 3 (L3)-Übermittlungsoperationen durch
und bestimmt Paketleitwege. Eine Funktion der hier beschriebenen
Architektur ist die Fähigkeit,
den Knoten 200 so zu programmieren, dass er neben L2- und L3-Operationen
auch die Aufgaben höherer
Schichten ausführen
kann. Zu diesem Zweck wird die Arbeitsweise des Knotens 200 als
die einer Vermittlungsstelle von Netzwerkpaketen beschrieben, obschon
er auch für
weitere oder andere Anwendungen, beispielsweise Datenverschlüsselung,
Ablaufsteuerung, etc., programmiert werden kann.
-
Der
Zwischenknoten 200 besteht aus einer Vielzahl untereinander
verbundener Komponenten, so auch einer auf Arrays basierenden Forwarding-Engine 300,
verschiedenen Speichern, z. B. externen Speichereinrichtungen (Ext
Mem) 280, einer Einheit aus Zwischenspeicher und Warteschlange (BQU) 210 sowie
Schnittstellenkarten für
den Netzwerkanschluss 240. Der Betrieb dieser Komponenten
ist vorzugsweise durch ein Uhrenmodul 270 zu synchronisieren,
wobei die Array-Elemente der Forwarding-Engine 300 asynchron
laufen dürfen.
In der abgebildeten Ausführungsart
sendet das Uhrenmodul 270 seine Signale über Uhrenleitungen
an alle Komponenten des Knotens 200.
-
Die
externen Speichereinrichtungen 280 bestehen aus Direktzugriffsspeichern
(RAM), die von der Forwarding-Engine 300 angesprochen werden, um
dort Softwareprogramme und Datenstrukturen zu speichern, auf die
von den Komponenten zugegriffen werden kann. Ein Betriebssystem,
das teilweise auch in den externen Speichereinrichtungen 280 resident sein
kann und von der Engine 300 ausgeführt wird, organisiert funktional
den Knoten 200, indem er u. a. Netzwerkoperationen aufruft,
um Softwareprozesse zu unterstützen,
die am Knoten 200 ausgeführt werden. Es ist für Fachleute
offensichtlich, dass andere Speichereinrichtungen, einschließlich verschiedener computerlesbarer
Medien, verwendet werden können,
um Programmanweisungen zu speichern und auszuführen.
-
Wie
dargestellt ist die auf Arrays basierende Forwarding-Engine 300 mit
den externen Speichereinrichtungen (ExtMem) 280 verknüpft. Die
Einheit aus Zwischenspeicher und Warteschlange (BQU) 210 ist
mit einem Paketspeicher 220 verbunden, um Datenpakete zu
speichern, sowie mit einem Warteschlangenspeicher 230,
um die Kopfzeilen der Datenpakete in Datenstrukturen abzulegen,
beispielsweise in verknüpften
Listen, die als Warteschlangen 235 aufgebaut sein können. Die
BQU 210 verfügt
außerdem über eine
Datenschnittstellenschaltung, um die Forwarding-Engine 300 mit
einer Vielzahl an Leitungskarten 240 über einen Auswahlschaltkreis 250 zu
verbinden, der über
einen Arbiter 255 verfügt.
Die Leitungskarten 240 können z. B. aus Optical-Carrier-Level-12 (OC12)-,
Optical-Carrier-Level-48 (OC48)- und Fast-Ethernet (FE)-Schnittstellen bestehen,
von denen jede über
einen konventionellen Schnittstellenkreislauf verfügt, der
das Signal, die elektrischen und mechanischen Merkmale sowie die Schnittstellenschaltung
enthält,
die notwendig sind, um die physikalischen Medien und Protokolle
zu verbinden, die über
diese Medien laufen. Eine typische Konfiguration des Zwischenknotens 200 kann
zahlreiche Eingabe-/Ausgabekanäle
an diesen Schnittstellen einschließen, von denen jede mit mindestens einer
Warteschlange 235 im Warteschlangenspeicher 230 verbunden
ist. Die Forwarding-Engine 300 funktioniert in der Regel
als Vermittlungsprozessor, der die Datenpakete und/oder die Kopfzeilen
in der Reihenfolge ändert,
wie die BQU 210 die Warteschlangenoperationen ausführt.
-
Ein
Routing-Prozessor 260 führt
konventionelle Routing-Protokolle aus, um direkt mit der Forwarding-Engine 300 zu
kommunizieren. Die Routing-Protokolle beinhalten in der Regel einen
topologischen Datenaustausch zwischen den Endknoten, um optimale
Wege durch das Netzwerk festzulegen, die z. B. auf Ziel-IP-Adressen
basieren. Diese Protokolle liefern Daten, die vom Routing-Prozessor 260 verwendet
werden, um Routing-Tabellen zu erstellen und zu unterhalten (nicht
dargestellt). Die Tabellen können
als Forwarding-Tabellen in die externen Speichereinrichtungen 280 geladen
werden, die dann von der Forwarding-Engine 300 verwendet
werden, um Übermittlungsoperationen
auszuführen.
Wenn ein Header gemäß dem IP-Switching-Verfahren
verarbeitet wird, bestimmt die Engine 300, wohin das Paket übermittelt
werden soll, und legt dazu Forwarding-Tabellen mit einer IP-Adresse
des Headers an. Die Ausfürung
der Übermittlungsoperationen
liefert die Zielmedienzugriffssteue rungsadressen (MAC) der Header,
die von der Forwarding-Engine 300 umgeschrieben werden,
um die Ausgabeschnittstellen für
die Pakete zu ermitteln.
-
3 ist
ein schematisches Blockdiagramm (Teildiagramm) der Forwarding-Engine 300,
die aus einer Vielzahl an Datenverarbeitungselementen besteht, beispielsweise
aus Prozessoren (XMCs) 330, die als mehrdimensionales systolisches
Array angeordnet sind. Jeder Prozessor 330 ist zur Veranschaulichung
ein Pipeline-Prozessor, der unter anderem über eine Vielzahl an arithmetischlogischen
Einheiten (ALUs) sowie über
eine Registerdatei verfügt,
die wiederum über
eine Vielzahl allgemein nützlicher
Register verfügt,
die Zwischenergebnisse speichern, die von den ALUs errechnet werden.
Die Prozessoren 330 können
in mehreren Reihen und Spalten angeordnet sein. In der Abbildung
in 3 sind die Prozessoren 330 in acht (8)
Reihen (von denen nur vier abgebildet sind) und vier (4) Spalten
(von denen nur zwei abgebildet sind) in einer 8×4-Konfiguration angeordnet,
die zwischen einem Eingabezwischenspeicher 310 und einem
Ausgabezwischenspeicher 380 eingebettet sind. In der bevorzugten
Ausführungsart sind
die Prozessoren in einer 8×2-Konfiguration
angeordnet, obwohl andere Anordnungen, beispielsweise 4×4, 4×8 oder
8×1, mit
der vorliegenden Erfindung ebenfalls vorteilhaft eingesetzt werden
können.
-
Die
Prozessoren 330 einer jeden Reihe sind als „Pipeline" konfiguriert, um
nacheinander Operationen an flüchtigen
Daten (z. B. bei Paketkopfzeilen), die im vorliegenden Dokument
als Kontextdaten bezeichnet werden, auszuführen, während die Prozessoren 330 einer
jeden Spalte parallel arbeiten, um im Wesentlichen dieselbe Operation
an den flüchtigen Daten
auszuführen,
wenn auch zeitversetzt. Jede Zeitphase enthält einen vordefinierten Zeitraum
an Zyklen, z. B. 128 Zyklen. Ein nachfolgender Schaltkreis (nicht
abgebildet) steuert die Prozessoren 330 jeder „Pipeline", wodurch sichergestellt
wird, dass jeder Prozessor 330 die Verarbeitung der laufenden flüchtigen
Daten beendet, bevor in einer neuen Phase neue flüchtige Daten
in die „Pipeline" geladen werden.
In der Regel wird eine neue Verarbeitungsphase gestartet, d. h.
ein Kontextwechsel wird durchgeführt, wenn
alle Prozessoren 330 mit der Verarbeitung ihrer aktuellen
Kontextdaten fertig sind und ein neuer, eingehender Kontextdatensatz
vollständig übermittelt ist.
-
Wie
weiter oben beschrieben, ist die Forwarding-Engine 300 mit
einer Vielzahl externer Speichereinrichtungen (ExtMem) 280 über die
Memory Controller 400 verbunden. Jede externe Speichereinrichtung 280 sollte
möglichst
eine oder mehrere RLDRAMs (Reduced Latency DRAM) sein, von denen
jede über
eine Vielzahl an Speicherbänken
verfügt.
Für Fachleute
dürfte
jedoch klar erkennbar sein, dass auch andere Speichereinrichtungen,
wie FCRAM (Fast Cycle RAM) oder sogar SRAM (Synchronous RAM) eingesetzt
werden können.
Die externen Speichereinrichtungen 280 werden vorzugsweise
zur Speicherung von nicht-flüchtigen
Daten (z. B. Forwarding-Tabellen, Warteschlangen, etc.), eingesetzt,
die als Datenreihen aufgebaut sind und zur Verarbeitung flüchtiger
Daten eingesetzt werden. Mit jedem Prozessor 330 ist ein
Schaltkreis 340 verbunden, der die physikalische Adresse
erzeugt (GEN PHY ADDR) und die logischen Speicheradressen, so wie
sie von den Prozessoren als Teil der Speicherzugriffsanfrage ausgegeben
werden, in die entsprechenden physikalischen Adressen konvertiert.
Die GEN PHY ADDR-Schaltkreise 340 können entlang der Reihe oder
dem Bus angeordnet werden, die/der die Prozessoren mit dem Memory
Controller 400 verbindet. Es gilt als selbstverständlich,
dass auch Verbindungen (nicht dargestellt) von den Memory Controllern 400 zurück zu den
Prozessoren 330 laufen, um an diese Informationen zurückzugeben.
Darüber hinaus
verfügt
jeder Prozessor 330 vorzugsweise über eine Speicherverwaltungseinheit
(nicht dargestellt) als Schnittstelle zu den Memory Controllern 400 und
den externen Speichereinrichtungen 280. Die GEN PHY ADDR-Schaltkreise 340 können Teil der
Speicherverwaltungseinheiten sein.
-
Eine
geeignete Plattform für
den Zwischenknoten 200 ist die Routerserie 7200 der Firma
Cisco Systems Inc. aus San Jose, Kalifornien (USA).
-
4 ist
ein schematisches Blockdiagramm (Teildiagramm) eines Memory Controllers 400 entsprechend
der vorliegenden Erfindung. Der Memory Controller 400 verfügt über eine
Vielzahl an Anfragewarteschlangen 402-407 (von
denen nur einige dargestellt sind). Jede Anfragewarteschlange empfängt und
speichert Anfragen nach Speicherzugriff, die der Memory Controller 400 von
einem der damit verbundenen Prozessoren erhält. Die Anfragewarteschlange 402 beispielsweise
empfängt
und speichert Anfragen nach Speicherzugriff, die vom Prozessor P0
ausgegeben werden, die Anfragewarteschlange 403 empfängt und
speichert Anfragen nach Speicherzugriff, die vom Prozessor P1 aus gegeben
werden, die Anfragewarteschlange 404 beispielsweise empfängt und
speichert Anfragen nach Speicherzugriff, die vom Prozessor P2 ausgegeben
werden, und so weiter. Jede Warteschlange hat einen Anfang und ein Ende.
Sobald die Anfragen empfangen werden, werden sie an das Ende der
jeweiligen Anfragewarteschlange gestellt. Entsprechend der Darstellung kann
jede Warteschlange bis zu acht Anfragen erhalten.
-
Mit
dem Memory Controller 400 ist die entsprechende externe
Speichereinrichtung 280 verbunden, die über eine Vielzahl von z. B.
acht Speicherbänken 410a-h
verfügt.
Jede Speicherbank speichert eine feste Anzahl an Informationen,
z. B. 4 MB, bei einer gesamten Speicherkapazität pro externe Speichereinrichtung 280 von
32 MB. Der Memory Controller 400 verfügt auch über eine Vielzahl an Zustandsmaschinen 412-419,
eine für
jede Speicherbank. Die Zustandsmaschine 412 (SM 0) ist
beispielsweise mit der Speicherbank 410a (B0) verbunden,
die Zustandsmaschine 413 (SM 1) mit der Speicherbank 410b (B1),
die Zustandsmaschine 414 (SM 2) mit der Speicherbank 410c (B2)
und so weiter. Jede Zustandsmaschine 412-419 durchläuft eine Vielzahl
von Zuständen – z. B. „verfügbar" und „besetzt" – für die jeweilige Speicherbank.
-
Ein
Memory Controller 400 implementiert vorzugsweise ein Arbitrationsschema
mit zwei Ebenen, um festzulegen, welche Anfragen nach Speicherzugriff
während
eines vorgegebenen Speicherzugriffszyklus ausgeführt werden. So hat beispielsweise
der Memory Controller 400 einen Arbiter auf oberster Ebene 422,
der prüft,
welche der Anfragewarteschlangen ausstehende Anfragen auf Speicherzugriff
enthalten. Der Arbiter auf oberster Ebene 422 empfängt auch
Informationen darüber,
welche der Zustandsmaschinen 412-419 für eine Anfrage auf
Speicherzugriff verfügbar
sind, was durch das Signal 424 für Speicherbankverfügbarkeit
(BANK AVAIL) und das Signal 425 für Speichersperre (MEMORY LOCK
BLOCK) angezeigt wird. Wie in diesem Dokument erläutert, wählt der
Arbiter auf oberster Ebene 422 für jeden Zyklus eine Anfrage
aus den Anfragewarteschlangen 402-407, um diese
an die Zustandsmaschine der Speicherbank auszugeben, die von der
ausgewählten
Anfrage vorgegeben wird, so wie es in der mit der Anfrage verbundenen
Speicheradresse festgelegt ist. Die Anfrage wird an die angegebene
Zustandsmaschine (gekennzeichnet durch den Pfeil 426) weitergeleitet.
Die ausgewählte
Anfrage ist vorzugsweise die älteste
Anfrage, deren gewünschte
Zustandsmaschine verfügbar
und nicht durch eine Speichersperre oder durch eine frühere gespiegelte
Schreibanfrage bzw. eine atomische Transaktion blockiert ist. Die
zweite Ebene der Arbitration wird von dem Arbiter auf unterster
Ebene 428 ausgeführt,
der mit den Zustandsmaschinen 412-419 und der
externen Speichereinrichtung 280 kommuniziert. Im Allgemeinen übernimmt
der Arbiter auf unterster Ebene 428 die älteste Anfrage
von den Zustandsmaschinen 412-419 und übergibt
diese der externen Speichereinrichtung 280, wobei die Verfügbarkeit
der benötigten
Ressourcen, z. B. Busse o.ä., berücksichtigt
wird. Die Zustandsmaschinen 412-419 und der Arbiter
auf unterster Ebene 428 können bei einem externen Speichertreiber 430 eingerichtet sein.
-
In
Einklang mit der Erfindung umfasst der Memory Controller 400 außerdem einen
Erkennungsschaltkreis für
den Spiegel-Flag 432, der die Speicheradresse überprüft, die
in den Anfragen nach Speicherzugriff enthalten ist, eine dynamische
Mirror-Engine 434, die das Adressierschema der dynamisch
gespiegelten Speicherbank der vorliegenden Erfindung ausführt, sowie
eine Speicherbankabbildungstabelle 436, die anzeigt, welche
Begleitspeicherbank, z. B. Speicherbank 410h (B7), die
gespiegelten Daten für
die jeweilige Speicherbank, z. B. Speicherbank 410d (B3),
enthält.
In der dargestellten Ausführungsart
sind alle Komponenten 432, 434 und 436 beim
Arbiter auf oberster Ebene 422 angeordnet.
-
Um
die Arbitrationsfunktionen auszuführen, verfügt der Arbiter auf oberster
Ebene 422 vorzugsweise über
eine Vielzahl an Registern oder Bitmaps, die er prüft und verarbeitet,
um eine Anfrage zur Ausgabe an die Zustandsmaschinen auszuwählen. Insbesondere
besteht der Arbiter auf oberster Ebene 422 aus einer Vielzahl
an Auftragsbitmaps, die in der Regel mit 440 gekennzeichnet
sind und jeweils für eine
Anfragewarteschlange stehen, aus einer globalen Pending-Bitmaps (PEND) 442,
aus einer globalen Berechtigungsbitmap (ELIG) 443 sowie
aus einer Vergleichslogik 444. Wie hier beschrieben enthält der Arbiter
auf oberster Ebene 422 außerdem eine Bitmap 446 der
global gespiegelten Schreibanfrage sowie eine Vielzahl an Speicherbanktreffer-Bitmaps 448.
Die Auftragsbitmaps 440 zeigen an, wie lange jede einzelne
Anfrage am Kopf der jeweiligen Anfragewarteschlange gewartet hat.
Die PEND-Bitmap, die verwendet wird, um die Auftragsbitmaps festzusetzen,
zeigt an, welche Anfragen noch ausgegeben werden müssen. Die
ELIG-Bitmap 443 zeigt an, welche An fragen die Berechtigung
besitzen, an die Zustandsmaschinen 412-419 ausgegeben
zu werden. Aufgrund dieser Informationen in den Auftrags- und Berechtigungsbitmaps
bestimmt die Vergleichslogik 444, welche der Anfragen,
die sich aktuell am Kopf der Anfragewarteschlangen befinden, zugelassen werden
und welche blockiert werden. Die Vergleichslogik 444 führt insbesondere
eine logische UND-Operation bei den Auftrags- und ELIG-Bitmaps 440, 443 in
jedem Zyklus durch, um zu bestimmen, welche Anfrage an die Zustandsmaschine
während des
jeweiligen Zyklus gesendet wird.
-
Jede
Auftragsbitmap 440 hat vorzugsweise eine Vielzahl an 1-Bit-Feldern,
wobei jedes Bit mit einer bestimmten Anfragewarteschlange verknüpft ist. Jede
der Auftragsbitmaps 440 wird vorzugsweise von dem Arbiter
auf oberster Ebene 422 gesetzt, um anzuzeigen, dass die
Anfragen, die sich am Kopf der Anfragewarteschlangen befinden, älter sind
als die Anfrage, mit der diese Auftragsbitmap verknüpft ist. Vor
allem wenn eine neue Anfrage an den Anfang ihrer Anfragewarteschlange
gelangt, führt
die Vergleichslogik 444 eine logische ODER-Operation an der
PEND-Bitmap 442 und allen anderen Anfragen aus, die einen
niedrigeren Prozessor-ID-Wert haben und ebenfalls an den Anfang
ihrer Anfragewarteschlangen gelangt sind. Das Ergebnis dieser logischen
ODER-Operation wird dann in die Auftragsbitmap eingegeben, die mit
der neuen Anfrage verknüpft
ist.
-
Die
globale PEND-Bitmap 442 verfügt über eine Vielzahl an 1-Bit-Feldern,
bei denen jedes Bit mit einem bestimmten Bit der Anfragewarteschlangen verknüpft ist.
Bei der Ausgabe der zulässigen
Anfragen an die Zustandsmaschinen, d. h. während jedes Zyklus des Arbiters
auf oberster Ebene 422, bestätigt die Vergleichslogik 444 jedes
Bit der globalen PEND-Bitmap 442, die zu einer Abfragewarteschlange
gehört,
die noch immer eine an ihrem Kopf wartende Anfrage hat, die auf
die Ausgabe an die Zustandsmaschinen wartet.
-
Die
globale ELIG-Bitmap 443 verfügt ebenfalls über 1-Bit-Felder,
bei denen jedes Bit mit einem bestimmten Bit der Anfragewarteschlange
verknüpft ist.
Jedes Bit der ELIG-Bitmap 443 wird vorzugsweise durch den
Arbiter auf oberster Ebene 422 gesetzt, um anzuzeigen,
welche Anfragen, die sich am Kopf ihrer jeweiligen Anfragewarteschlangen
befinden, dazu berechtigt sind, an die jeweiligen Zustandsmaschinen 412-419 ausgegeben
zu werden. Insbesondere wenn eine Zustandsmaschine momentan nicht verfügbar oder
aufgrund einer Speichersperre blockiert ist, wird die Position der
ELIG-Bitmap 443, die einer Prozessoranfrage an diese Zustandsmaschine entspricht,
vorzugsweise wieder zurückgesetzt.
Die Bitpositionen, die bestätigt
bleiben, stellen daher die Anfragen dar, die zur Ausgabe berechtigt
sind.
-
Der
Memory Controller 400 ist vorzugsweise in der Hardware über einen
oder mehrere anwendungsspezifische integrierte Schaltkreise (ASIC) bzw.
FPGAs (Field Programmable Gate Array) implementiert. Fachleute werden
jedoch erkennen, dass verschiedene Kombinationen aus Hardware und Software,
einschließlich
Firmware, eingesetzt werden können.
Die funktionalen Aspekte des Memory Controllers 400 könnten in
der Tat allein durch Software implementiert werden, die auf einem
Speichermedium abgelegt ist, z. B. einem Nur-Lese-Speicher (ROM), und von einem oder
mehreren Datenverarbeitungselementen ausgeführt werden.
-
Während des
Betriebs geben die Prozessoren 330 (3) der Forwarding-Engine 300 Anfragen
zum Speicherzugriff aus, beispielsweise Lese-, Schreib- und atomische
Transaktionen an den entsprechenden Memory Controller 400.
Eine atomische Transaktion, beispielsweise eine Read-Modify-Write
(Lesen-Ändern-Schreiben),
umfasst vielfältige
Operationen, die alle ohne Unterbrechung ausgeführt werden müssen. Der
Memory Controller 400 sorgt dafür, dass die Lese-, Schreib-
und atomischen Transaktionen an dem externen Speicher 280 ausgeführt werden,
und gibt die angeforderten Daten, falls erforderlich, an den Prozessor 330 zurück. Der
Begriff „Daten" ist in diesem Zusammenhang
im weitesten Sinne anzuwenden, um jedwede Art von Informationen
einzuschließen,
beispielsweise Tabelleneinträge,
Wörter,
Zeichenfolgen, Werte, Anweisungen, Zeichenträger, etc. Die Informationen,
die in den externen Speichereinrichtungen 280 gespeichert sind,
sind vorzugsweise in separat adressierbaren Speicherblöcken oder
einfach in Speicherblöcken angeordnet.
In der bevorzugten Ausführungsart
enthält
jeder Speicherblock 64 Datenbits sowie acht Bits Fehlerkorrekturcode
(ECC), so dass sich insgesamt 72 Bits ergeben. Fachleute werden
jedoch erkennen, dass auch andere Größen zur Anwendung kommen können. Ein
Prozessor 330 legt einen bestimmten Block fest, indem dessen
logische Adresse an die Anfrage angehängt wird.
-
Die
Prozessoren 330 werden vorzugsweise mit Leser- und Schreibercode
konfiguriert, der auch als Mikrocode bezeichnet wird, um damit die
Anfragen auf Speicherzugriff zu erzeugen und auszugeben. In Systemen
nach dem bisherigen Stand der Technik zeigt der Leser- und Schreibercode
an, welchen Speicherbanksatz der jeweilige Prozessor zu verwenden
hat. Der Mikrocode bei den Prozessoren P0-P3 kann z. B. festlegen,
dass diese Prozessoren die Zielspeicherbänke B0-B3 ansprechen müssen, während ein
anderer Mikrocode bei den Prozessoren P4-P7 festlegt, dass diese
Prozessoren die Speicherbänke
B4-B7 ansprechen sollen. Mit der vorliegenden Erfindung können dieselben
Leser- und Schreibercodes
bei allen Prozessoren verwendet werden. Es besteht daher keine Notwendigkeit,
die Prozessoren mit bestimmten Speicherbänken zu verknüpfen.
-
Es
sollte unbestritten sein, dass die Prozessoren 330 (3)
und die Memory Controller 400 einen Ablaufsteuerungsmechanismus
verwenden, um die Speicherverwaltungseinheit bei einem Prozessor daran
zu hindern, zusätzliche
Anfragen auf Speicherzugriff auszugeben, wenn die Anfragewarteschlange dieses
Prozessors voll ist.
-
5 ist
eine sehr schematische Darstellung des Formats einer logischen Adresse 500,
so wie sie für
die vorliegende Erfindung verwendet werden kann. Die logische Adresse 500 ist
vorzugsweise 32 Bits lang und in einer Vielzahl von Feldern organisiert.
Insbesondere hat eine logische Adresse 500 ein 1-Bit großes externes
Speicher-Flag 502 an der Bit-Position 31, ein 1-Bit großes Datenstrom/-block-Flag 504 an
der Bit-Position 30, ein 1-Bit großes Spiegel-Flag 506 an
der Bit-Position 29 sowie ein 28-Bit großes logisches Adressfeld 508,
das die logische Adresse enthält.
Wenn diese bestätigt
wird, zeigt das externe Speicher-Flag an, dass der Speicherblock,
der dieser logischen Adresse entspricht, sich im externen Speicher 280 befindet.
Das Datenstrom/-block-Flag zeigt an, ob die logische Adresse des
Felds 508 eine Datenstromadresse oder eine Datenblockadresse
ist. Ein geeigneter Mechanismus zur Implementierung von Datenstrom- und
Datenblockadressiermodi wird in dem sich in Gemeinschaftsbesitz
befindenden U.S. Patent Nr. 6.505.269 über „Dynamic Addressing Mapping
to Eliminate Memory Resource Contention in a Symmetrical Multiprocessor
System" beschrieben.
-
Logische
Adressen werden von dem jeweiligen Prozessor des GEN PHY ADDR-Schaltkreises 340 in
physikalische Adressen konvertiert. Der GEN PHY ADDR-Schaltkreis 340 kann
einen oder mehr Adressumsetzungspuffer (TLB) (nicht dargestellt) verwenden,
um die logischen Adressen in physikalische umzuwandeln.
-
6 ist
eine sehr schematische Darstellung des Formats einer physikalischen
Adresse 600, die von einem GEN PHY ADDR-Schaltkreis 340 umgewandelt
wurde. Die physikalische Adresse 600 ist vorzugsweise 27
Bits lang und in einer Vielzahl von Feldern aufgeteilt. Insbesondere
hat eine physikalische Adresse 600 ein 1-Bit großes Datenstrom/-block-Flag 602 an
der Bit-Position 26, ein 1-Bit großes Spiegel-Flag 604 an
der Bit-Position 25 sowie ein 25-Bit großes physikalisches Adressfeld 608,
das wiederum ein Unterfeld für
die Speicherbanknummer 608 und ein Offsetfeld 610 enthält. Der
GEN PHY ADDR-Schaltkreis 340 kopiert
unverändert
den Inhalt des Datenstrom/-block-Flag-Felds 504 und den Inhalt des
Spiegel-Flag-Felds 506 der logischen Adresse 500 in
die entsprechenden Felder 602 und 604 der physikalischen
Adresse 600. Der GEN PHY ADDR-Schaltkreis 340 setzt
den Inhalt des logischen Adressfelds 508 in eine physikalische
Adresse um und lädt
diese physikalische Adresse in das Feld 606 der physikalischen
Adresse 600. Die Speicherbanknummer bezeichnet die jeweilige
Speicherbank, während
das Offsetfeld den Standort innerhalb dieser Speicherbank angibt.
-
Sobald
die Adresse der Anfrage für
den Speicherzugriff umgesetzt wurde, wird die Anfrage an den Memory
Controller 400 gesendet, wo sie in der Anfragewarteschlange
abgelegt wird, die dem Prozessor zugeordnet ist, der die Anfrage
ausgegeben hat.
-
In
der schematischen Darstellung der Ausführungsart entspricht die logische
Adresse einem Byte, während
eine physikalische Adresse einem Wort mit 32-Bit (4-byte-aligned) entspricht.
-
Gespiegelte Leseanfrage
-
Angenommen,
der Prozessor P0 gibt eine Leseanfrage für einen Block aus, der auf
zwei Speicherbänken
gespiegelt ist. P0 erzeugt eine physikalische Adresse 500 und
bestätigt
das externe Speicher-Flag 502. P0 setzt auch ein Feld 504,
abhängig
davon, ob sich die Daten im Datenstrom- oder Datenblockmodus befinden.
P0 prüft
auch den Spiegel-Flag 506, da diese Adresse einem gespiegelten Block
entspricht. Wie in diesem Dokument beschrieben, kann die vorliegende
Erfindung Daten auf der Granularität eines Speicherblocks von
einer Speicherbank zu deren Partnerbank spiegeln. Mit der vorliegenden
Erfindung werden nur solche Blöcke über zwei
Speicherbänke
gespiegelt, die Daten enthalten, die tatsächlich gespiegelt werden müssen, z. B.
häufig
aufgerufene Tabellen. Solche Speicherblöcke einer ersten Speicherbank,
die keine Daten enthalten, auf die häufig zugegriffen wird, müssen nicht an
die Partnerbank der ersten Speicherbank gespiegelt werden. Dies
schafft erheblichen Platz in den Speicherbänken. In der bevorzugten Ausführungsart „weiß" der Prozessor 330,
welche Blöcke über mehrere
Speicherbänke
gespiegelt werden und auch auf welche logischen Adressen das Spiegel-Flag-Feld 506 geprüft werden
sollte. Der Mikrocode könnte
beispielsweise mit diesen Daten programmiert werden.
-
Der
GEN PHY ADDR-Schaltkreis 340 wandelt die logische Adresse
in eine physikalische Adresse um. Angenommen, die physikalische
Adresse spezifiziert einen Block in Speicherbank B2 410c, die
eine der Speicherbänke
ist, die mit dem Prozessor P0 verknüpft ist. Wie bereits erwähnt, kopiert
der GEN PHY ADDR-Schaltkreis 340 den Inhalt des Datenstrom/-block-Flag-Felds 504 der
logischen Adresse in das Datenstrom/-block-Flag-Feld 602 der
physikalischen Adresse und den Inhalt des Spiegel-Flag-Felds 506 der
logischen Adresse in das Spiegel-Flag-Feld 604 der physikalischen
Adresse. Die Leseanfrage mit der physikalischen Adresse wird dann
an den Memory Controller 400 gesendet und dort an das Ende
der Anfragewarteschlange 402 gestellt, die mit P0 verknüpft ist.
Wenn Anfragen an den Kopf der Warteschlange 402 gelangen,
werden sie vom Arbiter auf oberster Ebene 422 aus der Warteschlange
entfernt und die restlichen Anfragen vorgerückt.
-
Wenn
die betreffende Leseanfrage den Kopf der Anfragewarteschlange 402 erreicht,
wird diese vom Arbiter auf höchster
Ebene 422 geprüft,
der die Auftragsbitmaps 440 aktualisiert. Dies ist abhängig von
dem Zeitpunkt, an dem die Anfrage an den Anfang der Anfragewarteschlange 402 gelangt,
und zwar im Verhältnis
zu dem Zeitpunkt, an dem die Anfragen an die Anfänge der Anfragewarteschlangen 403-407 gelangen.
Der Erkennungsschaltkreis für den
Spie gel-Flag 432 legt dann fest, ob der Spiegel-Flag 604 der
physikalischen Adresse, die mit der betreffenden Leseanfrage verknüpft ist,
bestätigt wurde.
In diesem Beispiel ist das Spiegel-Flag-Feld 604 bestätigt, was
die dynamische Mirror-Engine 434 veranlasst, die Leseanfrage
wie eine dynamisch gespiegelte Leseanfrage zu behandeln. Als Antwort
auf eine dynamisch gespiegelte Leseanfrage, legt die dynamische
Mirror-Engine 434 fest, welche beiden Speicherbänke 410 den
entsprechenden Speicherblock enthalten. Wie oben angegeben gibt
die physikalische Adresse einen Block in der Speicherbank B2 410c an.
Es wird angenommen, dass die Speicherbankabbildungstabelle 436 anzeigt,
dass die Speicherbank B6 410g auf der Speicherbank B2 410c abgebildet
ist, d. h. es gibt eine Kopie des angefragten Blocks sowohl an der
Speicherbank B2 als auch an der Speicherbank B6. In diesem Fall
prüft die dynamische
Mirror-Engine 434 die
Verfügbarkeit
der Zustandsmaschine 414, die der Speicherbank B2 410c entspricht,
sowie die Verfügbarkeit
der Zustandsmaschine 418, die der Speicherbank B6 410g entspricht,
auch wenn in der Anfrage nur der Speicherbank B2 angegeben war.
Wie ebenfalls oben erwähnt,
wird eine Zustandsmaschine einer Speicherbank als verfügbar betrachtet,
wenn sie sich in einem verfügbaren
Status befindet, d. h. es gibt aktuell keine Anfrage, die darauf
wartet, an die externe Speichereinrichtung 280 ausgegeben
zu werden.
-
Wenn
entweder die Zustandsmaschine 414 oder 418 verfügbar ist,
dann werden die erforderlichen Ressourcen als verfügbar betrachtet,
und die passende ELIG-Bitmap 443 wird
gesetzt, um anzuzeigen, dass die betreffende Leseanfrage zur Ausgabe
berechtigt ist. Um festzulegen, welche der berechtigten Anfragen
während
eines gegebenen Zyklus ausgegeben werden, vergleicht die Vergleichslogik 444 die
Auftragsbitmaps 440 mit der ELIG-Bitmap 443, um
zu bestimmen, welche der berechtigten Anfragen die älteste ist.
Anfragen beginnen erst zu altern, wenn sie den Anfang ihrer Anfragewarteschlange
erreicht haben. Wenn zwei berechtigte Anfragen gleich alt sind,
kann der Arbiter auf oberster Ebene 422 die Prozessorbezeichnung
als Entscheidungshilfe verwenden und niedrigeren Bezeichnungen die höhere Priorität einräumen. Wenn
beispielsweise die Prozessoren P1 und P6 beide berechtigte Anfragen haben,
die gleich alt sind, dann wird die Anfrage von P1 ausgewählt. Wenn
zum selben Zeitpunkt keine anderen Anfragen älter sind als die betreffende
Leseanfrage, dann wird sie zugelassen und an die Zustandsmaschine
gesendet, die verfügbar
war, z. B. an die Zustandsmaschine 418. Wenn sowohl die
Zustandsmaschine 414 als auch 418 verfügbar sind, dann
wählt die
dynamische Mirror-Engine 434 vorzugsweise die aus, an die
die Anfrage gerichtet war, also die Zustandsmaschine 414.
Der Arbiter auf oberster Ebene 422 schickt die betreffende
Leseanfrage von der Anfragewarteschlange 402 an die Zustandsmaschine 418 über die
Leitung 426.
-
Am
externen Speichertreiber 430 entscheiden die Zustandsmaschinen 412-419,
die Anfragen haben, wer Zugriff auf den externen Speicher 280 erhält. Um einem „Verhungern" des Schreibflusses
vorzubeugen, kann der Arbiter auf unterster Ebene 428 so
konfiguriert werden, dass er in einem „strikten" altersbasierten Arbitrationsschema
operiert, in dem die Entscheidung zugunsten der ältesten Anfrage gewinnt, auch
wenn deren Ressourcen aktuell nicht verfügbar sind und dadurch der Arbiter
auf unterster Ebene 428 alle nachfolgenden Anfragen blockiert, bis
die Ressourcen verfügbar
werden und die älteste Anfrage
ausgegeben werden kann. Alternativ kann der Arbiter auf unterster
Ebene 428 so konfiguriert werden, dass er im Schreibverzögerungsmodus
arbeitet, was den Arbiter 428 zu dem Versuch veranlasst,
die Lese- und Schreibanfragen zusammenzufassen, um die Bus-Verzögerungen
bei der Richtungsänderung
zu verringern. Falls zwei Anfragen gleich alt sind, können die
Bezeichnungen der Zustandsmaschinen als Entscheidungshilfe verwendet werden
und niedrigeren Bezeichnungen die höhere Priorität eingeräumt werden.
Wenn die betreffende Leseanfrage zur ältesten Anfrage wird, für die die notwendigen
Ressourcen vorhanden sind, wird sie an die externe Speichereinrichtung 280 gesendet. Der
angegebene Speicherblock wird aus der Speicherbank B6 410g ausgelesen
und an P0 zurückgegeben.
-
Wie
dargestellt wurde die betreffende Leseanfrage, die an die Speicherbank
B2 410c gerichtet war, nicht verzögert, obwohl die Speicherbank
B2 410c nicht verfügbar
war. Stattdessen ermöglichte – in Einklang
mit der vorliegenden Erfindung – die
Bestätigung
des Spiegel-Flag-Felds 604, dass die betreffende Leseanfrage
von der gespiegelten Speicherbank, d. h. von der Speicherbank B6 410g, bedient
wurde. P0 erhält
somit seine Daten schneller als dies mit den bisherigen technischen
Mitteln möglich
gewesen wäre.
Da also eine Leseanfrage, deren Spiegel-Flag-Feld 604 bestätigt ist,
Zugriff auf beide verknüpften
Speicherbänke
hat, wird die Leseanfrage in der Regel früher zugelassen als wenn der
Zugriff nur auf eine einzige Speicherbank möglich wäre. Wenn bei spielsweise die
Zustandsmaschine 414 damit beschäftigt wäre, eine andere Anfrage auszuführen, wie
in dem oben beschriebenen Beispiel, dann könnte die Leseanfrage von P0
dennoch zugelassen werden, wenn die Zustandsmaschine 418 (die
von der Leseanfrage nicht angegeben wurde) verfügbar ist.
-
Um
Daten aus einem Speicherblock zu lesen, der nicht gespiegelt ist,
wird der Prozessor P0 das Spiegel-Flag-Feld 504 der physikalischen
Adresse 500 vorzugsweise unbestätigt lassen. In diesem Fall
behandelt der Memory Controller 400 die Leseanfrage, die
die Speicherbank B1 410b angeben kann, als eine Standardleseanfrage.
Insbesondere wenn diese Leseanfrage an den Anfang der Warteschlange 402 gelangt,
schlussfolgert der Erkennungsschaltkreis für den Spiegel-Flag 432,
dass das Spiegel-Flag-Feld 604 der logischen Adresse nicht bestätigt ist.
In diesem Fall erhält
die Leseanfrage nur dann eine Berechtigung, wenn die Zustandsmaschine 413,
die die Speicherbank B1 410b bedient, verfügbar ist.
Da das Spiegel-Flag-Feld 604 nicht bestätigt ist, ist diese Leseanfrage
nicht berechtigt, von der Speicherbank, die an die Speicherbank
B1 410b gespiegelt wird, bedient zu werden.
-
Wie
dargestellt, brauchen die Prozessoren 300 – ob das
Spiegel-Flag-Feld 506 bestätigt ist oder nicht – von den
Speicherbänken,
von denen die Daten ausgelesen werden, keine Sperre anzufordern. Stattdessen
geben die Prozessoren ihre Leseanfragen einfach aus und der Memory
Controller 400 stellt sicher, dass die Leseanfragen vor
später
eintreffenden Anfragen für
den angegebenen Speicherblock ausgeführt werden.
-
Gespiegelte Schreibanfragen
-
Angenommen,
der Prozessor P6 möchte eine
Schreibanfrage an einem Speicherblock ausführen, der über zwei Speicherbänke gespiegelt
ist, z. B. die Speicherbänke
B3 410c und B7 410h. Gemäß der vorliegenden Erfindung
veranlasst der Mikrocode an P6, dass der Prozessor eine einzelne
Schreibanfrage ausgibt, die die logische Adresse des zu beschreibenden
Speicherblocks enthält.
Die logische Adresse entspricht derjenigen der beiden Speicherbänke, mit
der P6 verknüpft
ist, z. B. B7 410h. Der Prozessor P6 bestätigt das
Spiegel-Flag-Feld 506 der
logischen Adresse 500. Der GEN PHY ADDR-Schaltkreis 340 übersetzt
die logische Adresse 500 in eine physikalische Adresse 600 und
kopiert den Inhalt des Spiegel-Flag-Felds 506 der logischen Adresse
in das Spiegel-Flag-Felds 604 der physikalischen Adresse.
Die Schreibanfrage wird dann an den Memory Controller 400 gesendet,
wo sie an das Ende der Anfragewarteschlange 406, die zum
Prozessor P6 gehört,
gestellt wird.
-
Wenn
die Schreibanfrage den Anfang der Warteschlange 406 erreicht,
wird sie von dem Arbiter auf oberster Ebene 442 geprüft. Insbesondere
prüft die
dynamische Mirror-Engine 434 das Spiegel-Flag-Feld 604 und
stellt fest, ob es bestätigt
ist. Die dynamische Mirror-Engine 434 betrachtet also die
betreffende Schreibanfrage als eine dynamisch gespiegelte Schreibanfrage.
Folglich ruft die dynamische Mirror-Engine 434 die Speicherbankabbildungstabelle
auf, um festzustellen, welche Speicherbank, z. B. B3 410d,
auf der Speicherbank B7 410h abgebildet ist, die die Zielspeicherbank
der betreffenden Schreibanfrage ist. In diesem Fall wartet der Arbiter auf
oberster Ebene 422, bis die Zustandsmaschine für die Speicherbank
B7 410h, also die Zustandsmaschine 419, und die
Zustandsmaschine für
die Speicherbank B3 410d, also die Zustandsmaschine 415,
beide verfügbar
sind, bevor er prüft,
ob die betreffende Schreibanfrage zur Ausgabe berechtigt ist. Wenn
nur eine Zustandsmaschine – aber
nicht beide -verfügbar
ist, dann betrachtet der Arbiter auf oberster Ebene 422 die
erforderlichen Ressourcen als nicht verfügbar. Sobald die beiden Zustandsmaschinen 415 und 419 verfügbar sind, ändert der
Arbiter der obersten Ebene 422 die globale ELIG-Bitmap 443 entsprechend
und lässt
somit die Schreibanfrage zu, vorausgesetzt, dass es sich dabei um
die älteste berechtigte
Anfrage handelt. Wenn es sich um die älteste berechtigte Anfrage
handelt, dann gibt der Arbiter auf oberster Ebene 422 die
betreffende Schreibanfrage an die Zustandsmaschine 415 und
die Zustandsmaschine 419 aus, und macht diese damit nicht
länger
verfügbar.
Die Zustandsmaschinen 415 und 419 verhandeln dann
um den gerechten Zugang zu der externen Speichereinrichtung 280.
-
Um
sicherzustellen, dass die Schreiboperationen und atomischen Transaktionen,
die an eine bestimmte Speicherbank gerichtet sind, auch an die jeweilige
Zustandsmaschine geleitet werden, bevor andere Transaktionen ebenfalls
an die angegebene Speicherbank geleitet werden, die jedoch den Anfang
ihrer Anfragewarteschlangen erst nach den Schreiboperationen und
atomischen Transaktionen erreicht haben, enthält der Arbiter auf oberster
Ebene 422 außerdem
eine Bitmap 446 der global gespiegelten Schreibanfrage
und eine Vielzahl an Speicherbanktreffer-Bitmaps, die in der Regel
mit 448 bezeichnet werden. Die Bitmap 446 der
global gespiegelten Schreibanfrage und jedes der Speicherbank treffer-Bitmaps 448 haben
eine Vielzahl von 1-Bit-Feldern, bei denen jedes Bit mit einer bestimmten
Anfragewarteschlange verbunden ist.
-
Wenn
ein Prozessor, z. B. P5, eine gespiegelte Schreibanfrage (oder eine
gespiegelte atomische Transaktion) an die Speicherbank B6 ausgibt, bestätigt der
Arbiter auf oberster Ebene 422 das entsprechende Bit, z.
B. das sechste Bit, der Bitmap 446 der gespiegelten Schreibanfrage,
wenn diese Schreibanfrage den Anfang ihrer Anfragewarteschlange 405 erreicht.
Wenn darüber
hinaus ein anderer Prozessor, z. B. P7, eine Anfrage ausgibt, etwa eine
Leseanfrage, die ebenfalls für
die Speicherbank B6 ist, die den Anfang ihrer Anfragewarteschlange 407 erreicht,
dann bestätigt
der Arbiter auf oberster Ebene 422 das sechste Bit des
Speicherbanktreffer-Bitmaps 448 für die Anfragewarteschlange 407, da
dies dieselbe Speicherbank zum Ziel hat, d. h. Speicherbank B6,
wie die gespiegelte Schreibanfrage von P5, die sich am Anfang der
Anfragewarteschlange 405 befindet. Jeder Zyklus, die Auftragsbitmap 440 eines
jeden Prozessors, seine Speicherbanktreffer-Bitmap 448 und
die Bitmap 446 der global gespiegelten Schreibanfrage werden
logisch mit einer UND-Operation verknüpft. Das Ergebnis wird dann
verwendet, um die entsprechende Bit-Position des Prozessors in der
ELIG-Bitmap 443 zu setzen, und zwar zusammen mit dem Signal 424 für die Speicherbankverfügbarkeit
(BANK AVAIL) und dem Signal 425 für Speichersperre (MEMORY LOCK BLOCK).
Wenn also, anders ausgedrückt,
die Anfrage eines Prozessors dieselbe Speicherbank sucht wie eine
gespiegelte Schreibanfrage oder eine gespiegelte atomische Transaktion
und die Anfrage des Prozessors an den Anfang seiner Anfragewarteschlange
nach der gespiegelten Schreibanfrage oder der atomischen Transaktion
gelangt, dann wird die Anfrage des Prozessors solange als nicht
berechtigt angesehen, bis die gespiegelten Schreibanfragen oder
atomischen Transaktionen an die Zustandsmaschinen übergeben
sind.
-
Wie
in diesem Dokument beschrieben, garantiert der Arbiter auf höchster Ebene 422,
dass keine späteren
Anfragen an dieselbe Speicherbank ausgegeben werden, bis die gespiegelte
Schreibanfrage oder die atomische Transaktion ausgeführt sind.
Somit wird sichergestellt, dass die Leser eine konsistente Datenansicht
haben. Es sollte klar sein, dass sobald die Anfragen an die Zustandsmaschinen übergeben
sind, diese vom Arbiter auf unterster Ebene ungeordnet übernommen
werden können.
Es sollte auch klar sein, dass sobald die Schreibanfrage an die Speicherbank
B3 aus dem obigen Beispiel abgeschlossen ist, der aktualisierte
Speicherblock bei Speicherbank B3 gelesen werden kann, ohne dabei Datenkonsistenzprobleme
zu riskieren, selbst wenn die Schreibanfrage an die Speicherbank
B7 noch auszuführen
ist.
-
Um
einen Speicherblock zu beschreiben, der nicht an einer zweiten Speicherbank
gespiegelt ist, lässt
ein Prozessor einfach nur das Spiegel-Flag-Feld 506 der
logischen Adresse unbestätigt. In
diesem Fall, wenn die Schreibanfrage den Anfang der Anfragewarteschlange
erreicht, schlussfolgert die dynamische Mirror-Engine 434,
dass das Spiegel-Flag-Feld 604 nicht bestätigt ist.
Die Engine 434 schlussfolgert, dass die Schreibanfrage
eine Standardschreibanfrage ist. Folglich prüft der Arbiter auf oberster
Ebene 422 nur, ob die angegebene Speicherbank verfügbar ist.
Der Arbiter auf oberster Ebene 422 prüft nicht, ob die andere Speicherbank, auf
der die angegebene Speicherbank abgebildet ist, ebenfalls verfügbar ist.
Wenn diese eine angegebene Speicherbank verfügbar ist und es keine früheren Anfragen
gibt, die noch nicht zugelassen wurden, wird die Schreibanfrage
an die Zustandsmaschine für
diese angegebene Speicherbank ausgegeben. Die Zustandsmaschine veranlasst
dann in Zusammenarbeit mit dem Arbiter auf unterster Ebene 428 die
Schreibanfrage, die an dieser angegebenen Speicherbank ausgeführt wird.
-
Wie
die vorliegende Erfindung zeigt, kann ein Prozessor an einen gespiegelten
Speicherblock schreiben, ohne dazu entweder die betreffenden Speicherbänke sperren
und ohne separate Schreibanfragen an jede Speicherbank ausgeben
zu müssen.
Mit der vorliegenden Erfindung werden in der Tat weder für die Lese- noch für die Schreibanfragen Sperren
gesetzt. Stattdessen bestätigt
der Prozessor einfach nur das Spiegel-Flag-Feld und der Memory Controller 400 führt die
Schreibanfrage an den beiden Speicherbänken aus, die für den Prozessor
erkennbar sind.
-
Ein
erster Speicherblocksatz bei der ersten Speicherbank kann außerdem an
eine zweite Speicherbank gespiegelt werden, indem das Spiegel-Flag-Feld
bestätigt
wird, während
ein zweiter Speicherblocksatz an der ersten Speicherbank nicht gespiegelt
wird. Die nicht gespiegelten Bereiche der ersten und zweiten Speicherbanken
können
daher verschiedene Informationen speichern, wobei der effektive
Speicherplatz der externen Speichereinrichtung 280 erhöht wird.
-
Gespiegelte
atomische Speichertransaktionen
-
Angenommen
ein Prozessor, beispielsweise P2, möchte einen Wert aus der externen
Speichereinrichtung 280 auslesen, einige Operationen an
diesem Wert ausführen
(z. B. eine Zahl hinzufügen)
und dann das Ergebnis wieder zurück
auf denselben Speicherort schreiben. P2 gibt vorzugsweise eine atomische
Read-Modify-Write-Anfrage aus, die die logische Adresse 600 für den zu
lesenden Wert festlegt. Wenn der Wert, der gelesen wurde, an zwei Speicherbänken gespiegelt
wird, bestätigt
P2 das Spiegel-Flag-Feld 506 der logischen Adresse 600. Der
GEN PHY ADDR-Schaltkreis 340 wandelt die logische Adresse 500 in
ein physikalische Adresse 600 um. Das Spiegel-Flag-Feld 604 der
physikalischen Adresse wird auf gleiche Weise bestätigt. Angenommen,
die physikalische Adresse ist an die Speicherbank B1 gerichtet.
Die Read-Modify-Write-Anfrage wird
an das Ende der Warteschlange 404 gestellt, die zu P2 gehört. Wenn
die Read-Modify-Write-Anfrage an den Anfang der Warteschlange 404 gelangt,
wird sie geprüft.
Die dynamische Mirror-Engine 434 stellt fest, dass das
Spiegel-Flag-Feld 604 bestätigt ist und dass die physikalische
Adresse die Speicherbank B1 bezeichnet, deren ausgewählte Speicherorte
an der Speicherbank B5 gespiegelt sind. Da die Read-Modify-Write-Anfrage
eine Schreibkomponente enthält, müssen die
Zustandsmaschine 413 (die zur Speicherbank B1 gehört) und
die Zustandsmaschine 417 (die zur Speicherbank B5 gehört) verfügbar sein, damit
die Read-Modify-Write-Anfrage für
die Ausgabe durch den Arbiter auf oberster Ebene 422 berechtigt
ist. Wenn beide Zustandsmaschinen 413 und 417 verfügbar sind,
dann wird die ELIG-Bitmap 443 entsprechend gesetzt und
die Read-Modify-Write-Anfrage wird an die Zustandsmaschine 413 und
die Zustandsmaschine 417 ausgegeben, vorausgesetzt, dass
diese die älteste
berechtigte Anfrage ist.
-
In
diesem Fall liest eine der Zustandsmaschinen, z. B. die Zustandsmaschine 413,
den festgelegten Wert aus der Speicherbank B1. Die Zustandsmaschine 413 fügt die Zahl,
die von der Read-Modify-Write-Anfrage festgelegt wurde, dem Wert
hinzu, der aus der Speicherbank B1 ausgelesen wurde. Danach liefert
die Zustandsmaschine 413 die errechneten Ergebnisse an
die Zustandsmaschine 417, die mit der Speicherbank B5 verknüpft ist.
Die beiden Zustandsmaschinen 413 und 417 schreiben
dann die errechneten Ergebnisse an die Speicherbänke B1 bzw. B5, so wie es weiter
oben in Zusammenhang mit den gespiegelten Schreibanfragen beschrieben
ist.
-
Dieser
Ansatz erspart einen „zusätzlichen" Lesevorgang, d.
h. den Lesevorgang an Speicherbank B5. Er stellt auch sicher, dass
dieselben Werte an beiden Speicherbänken (B1 und B5) geschrieben werden,
selbst wenn die beiden Standorte vor der atomischen Transaktion
verschiedene Werte enthalten haben.
-
Die
Prozessoren führen
also atomische Transaktionen aus, ohne zuerst eine der Speicherbänke sperren
zu müssen.
-
Obwohl
die vorliegende Erfindung in Zusammenhang mit einem 8×4-systolischen
Array beschrieben wurde, werden Fachleute erkennen, dass sie auch
mit anderen Arten von Computerarchitekturen als Arrays eingesetzt
werden kann. Die vorliegende Erfindung kann in der Tat unter anderem
in Architekturen mit Netz-, Baum- oder Kubusstruktur verwendet werden,
die über
mehrere Datenverarbeitungseinheiten verfügen, beispielsweise Prozessoren und/oder
Input/Output-Geräte.
-
Die
vorstehende Beschreibung bezieht sich auf bestimmte Ausführungen
dieser Erfindung. Für Fachleute
wird ersichtlich sein, dass andere Variationen und Veränderungen
an den beschriebenen Ausführungen
vorgenommen werden können,
zur Erzielung einiger oder aller Vorteile dieser Erfindung. Andere
Arbitrationsschemata, wie Arbiter mit einer einzigen Ebene, können beispielsweise
verwendet werden.
-
Folgende
Ansprüche
werden geltend gemacht: