DE602004004383T2 - System und verfahren zur dynamischen adressierung von gespiegelter speicherbank - Google Patents

System und verfahren zur dynamischen adressierung von gespiegelter speicherbank Download PDF

Info

Publication number
DE602004004383T2
DE602004004383T2 DE602004004383T DE602004004383T DE602004004383T2 DE 602004004383 T2 DE602004004383 T2 DE 602004004383T2 DE 602004004383 T DE602004004383 T DE 602004004383T DE 602004004383 T DE602004004383 T DE 602004004383T DE 602004004383 T2 DE602004004383 T2 DE 602004004383T2
Authority
DE
Germany
Prior art keywords
memory
request
data
read
memory bank
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.)
Expired - Lifetime
Application number
DE602004004383T
Other languages
English (en)
Other versions
DE602004004383D1 (de
Inventor
E. Robert Morrisville JETER
H. Kenneth Raleigh POTTER
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.)
Cisco Technology Inc
Original Assignee
Cisco Technology Inc
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 Cisco Technology Inc filed Critical Cisco Technology Inc
Publication of DE602004004383D1 publication Critical patent/DE602004004383D1/de
Application granted granted Critical
Publication of DE602004004383T2 publication Critical patent/DE602004004383T2/de
Anticipated expiration legal-status Critical
Expired - Lifetime legal-status Critical Current

Links

Classifications

    • GPHYSICS
    • G06COMPUTING; CALCULATING OR COUNTING
    • G06FELECTRIC DIGITAL DATA PROCESSING
    • G06F11/00Error detection; Error correction; Monitoring
    • G06F11/07Responding to the occurrence of a fault, e.g. fault tolerance
    • G06F11/16Error detection or correction of the data by redundancy in hardware
    • G06F11/20Error detection or correction of the data by redundancy in hardware using active fault-masking, e.g. by switching out faulty elements or by switching in spare elements
    • G06F11/2053Error detection or correction of the data by redundancy in hardware using active fault-masking, e.g. by switching out faulty elements or by switching in spare elements where persistent mass storage functionality or persistent mass storage control functionality is redundant
    • G06F11/2056Error detection or correction of the data by redundancy in hardware using active fault-masking, e.g. by switching out faulty elements or by switching in spare elements where persistent mass storage functionality or persistent mass storage control functionality is redundant by mirroring
    • G06F11/2087Error detection or correction of the data by redundancy in hardware using active fault-masking, e.g. by switching out faulty elements or by switching in spare elements where persistent mass storage functionality or persistent mass storage control functionality is redundant by mirroring with a common controller
    • GPHYSICS
    • G06COMPUTING; CALCULATING OR COUNTING
    • G06FELECTRIC DIGITAL DATA PROCESSING
    • G06F11/00Error detection; Error correction; Monitoring
    • G06F11/07Responding to the occurrence of a fault, e.g. fault tolerance
    • G06F11/16Error detection or correction of the data by redundancy in hardware
    • G06F11/20Error detection or correction of the data by redundancy in hardware using active fault-masking, e.g. by switching out faulty elements or by switching in spare elements
    • G06F11/2053Error detection or correction of the data by redundancy in hardware using active fault-masking, e.g. by switching out faulty elements or by switching in spare elements where persistent mass storage functionality or persistent mass storage control functionality is redundant
    • G06F11/2056Error detection or correction of the data by redundancy in hardware using active fault-masking, e.g. by switching out faulty elements or by switching in spare elements where persistent mass storage functionality or persistent mass storage control functionality is redundant by mirroring
    • G06F11/2069Management of state, configuration or failover
    • GPHYSICS
    • G06COMPUTING; CALCULATING OR COUNTING
    • G06FELECTRIC DIGITAL DATA PROCESSING
    • G06F11/00Error detection; Error correction; Monitoring
    • G06F11/07Responding to the occurrence of a fault, e.g. fault tolerance
    • G06F11/14Error detection or correction of the data by redundancy in operation
    • G06F11/1402Saving, restoring, recovering or retrying
    • G06F11/1446Point-in-time backing up or restoration of persistent data
    • G06F11/1448Management of the data involved in backup or backup restore
    • G06F11/1451Management of the data involved in backup or backup restore by selection of backup contents

Description

  • 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:

Claims (29)

  1. Verfahren zum Lesen von Daten, die in ersten und zweiten Speicherbanken gespiegelt sind, in einem Memory Controller (400), der Zugriff auf eine Vielzahl von Speicherbanken (410) hat, wobei das Verfahren die folgenden Schritte umfasst: Empfangen einer Leseanfrage, die die erste Speicherbank (410c) spezifiziert, wobei die Leseanfrage angibt, dass sie eine Spiegel-Leseanfrage (604) ist; Identifizieren der zweiten Speicherbank (410g), in der die Daten gespiegelt sind; und Ausgeben der Leseanfrage nur an die zweite Speicherbank, sofern die von der Leseanfrage spezifizierte erste Speicherbank nicht verfügbar ist.
  2. Verfahren nach Anspruch 1, wobei: die Leseanfrage eine Speicheradresse aufweist, die eine Stelle (606) innerhalb der ersten Speicherbank (410c) identifiziert, und die Speicheradresse einen Flag (604) aufweist, der angibt, dass die Leseanfrage eine Spiegel-Leseanfrage ist.
  3. Verfahren nach Anspruch 2, wobei der Flag (604) von einer Datenverarbeitungseinheit (330) gesetzt wird, die mit dem Memory Controller (400) in Kommunikationsbeziehung steht, um anzugeben, dass die Leseanfrage eine Spiegel-Leseanfrage ist.
  4. Verfahren nach einem der vorhergehenden Ansprüche, das folgende Schritte umfasst: Empfangen einer Leseanfrage, die die erste Speicherbank (410c) spezifiziert, wobei die Leseanfrage angibt, dass sie eine nicht-gespiegelte Leseanfrage ist; und Warten, dass die erste Speicherbank (410c) verfügbar wird, bevor die Leseanfrage an die erste Speicherbank ausgegeben wird, unabhängig von der Verfügbarkeit der zweiten Speicherbank (410g).
  5. Verfahren nach einem der vorhergehenden Ansprüche, das des Weiteren die folgenden Schritte umfasst: Empfangen einer Schreibanfrage, die eine ausgewählte der beiden Speicherbanken (410h) spezifiziert, wobei die Schreibanfrage angibt, dass sie eine Spiegel-Schreibanfrage (604) ist; Identifizieren der zweiten Speicherbank (410d), in der die Daten gespiegelt werden; Ausgeben der Schreibanfrage an die beiden Speicherbanken (410h, 410d), in denen die Daten gespiegelt werden; und Ausführen der Schreibanfrage in den beiden Speicherbanken, ohne eine Speicherbank zu sperren.
  6. Verfahren nach einem der vorhergehenden Ansprüche, das des Weiteren das Schreiben von Daten umfasst, die in zwei Speicherbanken gespiegelt werden, wobei das Schreiben von Daten die folgenden Schritte umfasst: Empfangen einer Schreibanfrage, die eine ausgewählte der beiden Speicherbanken (410h) spezifiziert, wobei die Schreibanfrage angibt, dass sie eine Spiegel-Schreibanfrage (604) ist; Identifizieren der zweiten Speicherbank (410d), in der die Daten gespiegelt werden; Ausgeben der Schreibanfrage an die beiden Speicherbanken, in denen die Daten gespiegelt werden; und Ausführen der Schreibanfrage in den beiden Speicherbanken, ohne eine Speicherbank zu sperren.
  7. Verfahren nach Anspruch 6, wobei das Empfangen einer einzigen Schreibanfrage dazu führt, dass beide Speicherbanken (410h, 410d) aktualisiert werden.
  8. Verfahren nach Anspruch 7, wobei: der Memory Controller eine Vielzahl von Zustandsmaschinen (415, 419) aufweist und jede Zustandsmaschine mit einer der Speicherbanken (410d, 401h) assoziiert ist, und die einzige von dem Memory Controller (400) empfangene Schreibanfrage an die beiden Zustandsmaschinen gesendet wird, die mit den beiden Speicherbänken assoziiert sind, in denen die Daten gespiegelt werden.
  9. Verfahren nach einem der Ansprüche 6 bis 8, wobei: die Schreibanfrage eine Speicheradresse (600) der ausgewählten der Speicherbanken enthält, und die Speicheradresse einen Flag (604) aufweist, der angibt, dass die Schreibanfrage eine Spiegel-Schreibanfrage ist.
  10. Verfahren nach Anspruch 9, wobei: die Schreibanfrage an den Memory Controller (400) von einem Datenverarbeitungselement (330) ausgegeben wird, das mit dem Memory Controller in Kommunikationsbeziehung steht, und das Datenverarbeitungselement den Flag (604) so setzt, dass er angibt, dass die Schreibanfrage eine Spiegel-Schreibanfrage ist.
  11. Verfahren nach Anspruch 10, wobei das Datenverarbeitungselement (330) ein Prozessor ist.
  12. Verfahren nach einem der Ansprüche 6 bis 10, das des Weiteren den Schritt des Komplettierens der Schreibanfrage in jeder Speicherbank (410d, 410h) umfasst, bevor eine weitere Anfrage an eine der Speicherbanken ausgegeben wird.
  13. Verfahren nach Anspruch 1, das des Weiteren das Durchführen einer atomischen Read-Modify-Write Transaktion für Daten, die in ersten (410b) und zweiten (410f) Speicherbanken gespeichert sind, umfasst, wobei das Durchführen der Transaktion die folgenden Schritte umfasst: Empfangen einer atomischen Read-Modify-Write Transaktion, die eine ausgewählte der beiden Speicherbanken (410b) spezifiziert, wobei die Read-Modify-Write Transaktion angibt, dass sie eine Spiegel-Read-Modify-Write Transaktion (506) ist; Identifizieren der zweiten Speicherbank (410f), in der die Daten gespiegelt sind; Auswählen eine der ersten und zweiten Speicherbanken (410b, 410f), aus der die Daten auszulesen sind, in Abhängigkeit von der Verfügbarkeit der ersten und zweiten Speicherbanken; Modifizieren der aus der ausgewählten Datenbank ausgelesenen Daten; Ausgeben der Schreibanfrage an die beiden Speicherbanken, in denen die Daten gespiegelt werden; und Ausführen der Schreibanfrage in den beiden Speicherbanken, ohne eine Speicherbank zu sperren.
  14. Verfahren nach Anspruch 13, wobei: die atomische Transaktion eine Speicheradresse aufweist, die eine Stelle (600) innerhalb der ersten Speicherbank identifiziert, und die Speicheradresse einen Flag (604) aufweist, der angibt, dass die atomische Transaktion eine atomische Spiegel-Transaktion ist.
  15. Verfahren nach Anspruch 1, wobei die erste Speicherbank (410b) deshalb nicht verfügbar ist, weil die erste Speicherbank eine Anfrage eines anderen Speicherzugriffs bedient, wenn der Schritt des Ausgebens durchgeführt wird.
  16. Memory Controller (400) zum Lesen von Daten, die in ersten (410c, 410g) und zweiten Speicherbanken gespiegelt sind, wobei der Memory Controller Zugriff auf eine Vielzahl von Speicherbanken hat, und aufweist: eine Einrichtung zum Empfangen einer Leseanfrage, die die erste Speicherbank (410c) spezifiziert, wobei die Leseanfrage angibt, dass sie eine Spiegel-Leseanfrage (604) ist; eine Einrichtung zum Identifizieren der zweiten Speicherbank (410g), in der die Daten gespiegelt sind; und eine Einrichtung zum Ausgeben der Leseanfrage nur an die zweite Speicherbank, sofern die von der Leseanfrage spezifizierte erste Speicherbank nicht verfügbar ist (414).
  17. Memory Controller nach Anspruch 16, der des Weiteren aufweist: eine Vielzahl von Zwischenspeichern (402) zum Speichern von Leseanfragen, die von dem Memory Controller (400) empfangen werden, wobei die Anfragen Daten spezifizieren, die in den Speicherbanken (410) gespeichert sind; eine Einrichtung zum Auswählen eine der ersten und zweiten Speicherbanken (410c, 410g), aus denen die spezifizierten Daten auszulesen sind, in Abhängigkeit von der Verfügbarkeit der ersten und zweiten Speicherbanken; und eine Einrichtung zum Abrufen der Daten aus der ausgewählten der ersten und zweiten Speicherbanken (410c, 410g).
  18. Memory Controller nach Anspruch 16 oder 17, der des Weiteren aufweist: eine Einrichtung zum Identifizieren wenigstens einer Anfrage als Spiegel-Schreibanfrage, die Daten spezifiziert, die in der ersten Speicherbank (410h) gespeichert sind; eine Einrichtung zum Identifizieren der zweiten Speicherbank (410d), in der die von der Spiegel-Schreibanfrage spezifizierten Daten gespiegelt werden; eine Einrichtung zum Ausgeben der Schreibanfrage an die beiden Speicherbanken (410h, 410d), in denen die Daten gespiegelt werden; und eine Einrichtung zum Ausführen der Schreibanfrage in den beiden Speicherbanken, ohne eine Speicherbank zu sperren.
  19. Memory Controller nach Anspruch 18, wobei die Daten in den Speicherbanken als separat adressierbare Speicherblöcke organisiert sind, und Daten zwischen den ersten und zweiten Speicherbanken auf Blockebene gespiegelt werden.
  20. Memory Controller nach Anspruch 18 oder 19, wobei die Anfragen eine Speicheradresse (600) der spezifizierten Daten aufweisen, die Speicheradresse einen Spiegel-Flag (604) enthält, und die Einrichtung zum Identifizieren wenigstens einer Anfrage als Spiegel-Schreibanfrage den Spiegel-Flag der Speicheradresse verwendet, die in der Spiegel-Schreibanfrage enthalten ist.
  21. Memory Controller nach einem der Ansprüche 16 bis 20, wobei: die Leseanfrage eine Speicheradresse enthält, die eine Stelle innerhalb der ersten Speicherbank (410h) identifiziert.
  22. Memory Controller nach einem der Ansprüche 16 bis 21, der des Weiteren aufweist: eine Einrichtung zum Empfangen einer zweiten Leseanfrage, die die erste Speicherbank (410c) spezifiziert, wobei die zweite Leseanfrage angibt, dass sie eine nicht-gespiegelte Leseanfrage ist; und eine Einrichtung, die so konfiguriert ist, dass sie wartet, bis die erste Speicherbank (410c) verfügbar wird, bevor sie die zweite Leseanfrage an die erste Speicherbank ausgibt, unabhängig von der Verfügbarkeit der zweiten Speicherbank (410g).
  23. Memory Controller nach Anspruch 22, wobei die erste Speicherbank (410c) aufgrund der Anhängigkeit einer Anfrage eines anderen Speicherzugriffs an der ersten Speicherbank nicht verfügbar ist.
  24. Memory Controller mit Zugriff auf eine Vielzahl von Speicherbanken, wobei der Memory Controller so ausgelegt ist, dass er eine atomische Read-Modify-Write Transaktion für in ersten (410b) und zweiten (410f) Speicherbanken gespeicherte Daten durchführt, wobei der Memory Controller aufweist: eine Einrichtung zum Empfangen einer atomischen Read-Modify-Write Transaktion, die die erste Speicherbank (410b) der beiden Speicherbanken spezifiziert, wobei die Read-Modify-Write Transaktion angibt, dass die Read-Modify-Write Transaktion eine Spiegel-Read-Modify-Write Transaktion (506) ist; eine Einrichtung zum Identifizieren der zweiten Speicherbank (410f), in der die Daten gespiegelt sind; eine Einrichtung zum Auswählen einer der ersten und zweiten Speicherbanken (410b, 410f), aus der die Daten auszulesen sind, in Abhängigkeit von der Verfügbarkeit der ersten und zweiten Speicherbanken; eine Einrichtung zum Modifizieren der aus dieser ausgewählten Speicherbank ausgelesenen Daten; und eine Einrichtung zum Schreiben der modifizierten Daten in die beiden Speicherbanken (410b, 410f), in denen die Daten gespiegelt werden.
  25. Memory Controller nach Anspruch 24, wobei die atomische Read-Modify-Write Transaktion eine Einrichtung umfasst, die so angeordnet ist, dass sie eine Stelle (600) innerhalb der ersten Speicherbank identifiziert.
  26. Memory Controller nach Anspruch 24 oder 25, wobei die Einrichtung zum Identifizieren aufweist: eine Vielzahl von Zustandsmaschinen (415, 419), die jeweils mit einer der Speicherbanken (410d, 410h) assoziiert und so konfiguriert sind, dass sie alle Anfragen für die Speicherbank empfangen.
  27. Memory Controller nach Anspruch 26, wobei die Einrichtung zum Identifizieren des Weiteren aufweist: einen Arbiter (422) auf höchster Ebene, der so konfiguriert ist, dass er ermittelt, ob die Anfrageschlange eine Anfrage enthält; und einen Arbiter (428) auf unterster Ebene, der so konfiguriert ist, dass er die Verfügbarkeit der Vielzahl von Speicherbanken überwacht.
  28. Memory Controller nach Anspruch 27, wobei die Vielzahl von Zustandsmaschinen (415, 419) ein Teil des Arbiters (428) auf unterster Ebene sind.
  29. Computerprogramm, Computerprogramm-Erzeugnis oder computerlesbares Medium, die Befehle zum Durchführen eines Verfahrens gemäß einem der Ansprüche 1 bis 15 aufweisen.
DE602004004383T 2003-03-21 2004-02-26 System und verfahren zur dynamischen adressierung von gespiegelter speicherbank Expired - Lifetime DE602004004383T2 (de)

Applications Claiming Priority (3)

Application Number Priority Date Filing Date Title
US394984 1995-02-27
US10/394,984 US7194568B2 (en) 2003-03-21 2003-03-21 System and method for dynamic mirror-bank addressing
PCT/US2004/005522 WO2004095290A2 (en) 2003-03-21 2004-02-26 System and method for dynamic mirror-bank addressing

Publications (2)

Publication Number Publication Date
DE602004004383D1 DE602004004383D1 (de) 2007-03-08
DE602004004383T2 true DE602004004383T2 (de) 2007-11-08

Family

ID=32988515

Family Applications (2)

Application Number Title Priority Date Filing Date
DE602004017232T Expired - Fee Related DE602004017232D1 (de) 2003-03-21 2004-02-26 System und Verfahren zur dynamischen Adressierung von gespiegelter Speicherbank
DE602004004383T Expired - Lifetime DE602004004383T2 (de) 2003-03-21 2004-02-26 System und verfahren zur dynamischen adressierung von gespiegelter speicherbank

Family Applications Before (1)

Application Number Title Priority Date Filing Date
DE602004017232T Expired - Fee Related DE602004017232D1 (de) 2003-03-21 2004-02-26 System und Verfahren zur dynamischen Adressierung von gespiegelter Speicherbank

Country Status (8)

Country Link
US (1) US7194568B2 (de)
EP (2) EP1777626B1 (de)
CN (1) CN100383751C (de)
AT (2) ATE352064T1 (de)
AU (1) AU2004232184B2 (de)
CA (1) CA2519332C (de)
DE (2) DE602004017232D1 (de)
WO (1) WO2004095290A2 (de)

Families Citing this family (49)

* Cited by examiner, † Cited by third party
Publication number Priority date Publication date Assignee Title
US7257681B2 (en) * 2003-06-11 2007-08-14 Cisco Technology, Inc. Maintaining entity order with gate managers
JP4256210B2 (ja) * 2003-06-12 2009-04-22 株式会社半導体理工学研究センター 同期バンク型メモリ
US7454555B2 (en) * 2003-06-12 2008-11-18 Rambus Inc. Apparatus and method including a memory device having multiple sets of memory banks with duplicated data emulating a fast access time, fixed latency memory device
TWI230859B (en) * 2004-03-11 2005-04-11 Amic Technology Corp Method and related system for accessing LPC memory or firmware memory in a computer system
JP5017971B2 (ja) * 2005-09-07 2012-09-05 ソニー株式会社 集積装置
US8145851B2 (en) 2005-09-07 2012-03-27 Sony Corporation Integrated device
US7461216B2 (en) * 2006-02-23 2008-12-02 Hewlett-Packard Development Company, L.P. Memory controller
US8453147B2 (en) * 2006-06-05 2013-05-28 Cisco Technology, Inc. Techniques for reducing thread overhead for systems with multiple multi-threaded processors
US8041929B2 (en) 2006-06-16 2011-10-18 Cisco Technology, Inc. Techniques for hardware-assisted multi-threaded processing
US8010966B2 (en) * 2006-09-27 2011-08-30 Cisco Technology, Inc. Multi-threaded processing using path locks
US8417895B1 (en) 2008-09-30 2013-04-09 Violin Memory Inc. System for maintaining coherency during offline changes to storage media
US8442059B1 (en) 2008-09-30 2013-05-14 Gridiron Systems, Inc. Storage proxy with virtual ports configuration
US8838850B2 (en) * 2008-11-17 2014-09-16 Violin Memory, Inc. Cluster control protocol
US8443150B1 (en) 2008-11-04 2013-05-14 Violin Memory Inc. Efficient reloading of data into cache resource
US8788758B1 (en) 2008-11-04 2014-07-22 Violin Memory Inc Least profitability used caching scheme
JP5367357B2 (ja) * 2008-12-24 2013-12-11 株式会社メガチップス メモリシステムおよびコンピュータシステム
US8650362B2 (en) * 2009-04-17 2014-02-11 Violin Memory Inc. System for increasing utilization of storage media
US8667366B1 (en) 2009-04-17 2014-03-04 Violin Memory, Inc. Efficient use of physical address space for data overflow and validation
US8713252B1 (en) 2009-05-06 2014-04-29 Violin Memory, Inc. Transactional consistency scheme
KR100940868B1 (ko) * 2009-05-25 2010-02-09 이성재 디램으로 에스램 출력특성을 구현하는 장치 및 방법
US9069676B2 (en) 2009-06-03 2015-06-30 Violin Memory, Inc. Mapping engine for a storage device
US8402198B1 (en) 2009-06-03 2013-03-19 Violin Memory, Inc. Mapping engine for a storage device
US20100332718A1 (en) * 2009-06-26 2010-12-30 Micron Technology, Inc. System and method for providing configurable latency and/or density in memory devices
US8402246B1 (en) 2009-08-28 2013-03-19 Violin Memory, Inc. Alignment adjustment in a tiered storage system
KR101459200B1 (ko) * 2010-02-09 2014-11-07 미쓰비시덴키 가부시키가이샤 전송 제어장치, 메모리 제어장치, 및 상기 전송 제어장치를 구비한 plc
US8447930B2 (en) * 2010-06-22 2013-05-21 International Business Machines Corporation Managing in-line store throughput reduction
US8959288B1 (en) 2010-07-29 2015-02-17 Violin Memory, Inc. Identifying invalid cache data
US8832384B1 (en) 2010-07-29 2014-09-09 Violin Memory, Inc. Reassembling abstracted memory accesses for prefetching
US8472350B2 (en) * 2010-12-31 2013-06-25 Telefonaktiebolaget L M Ericsson (Publ) Bank aware multi-bit trie
US8972689B1 (en) 2011-02-02 2015-03-03 Violin Memory, Inc. Apparatus, method and system for using real-time performance feedback for modeling and improving access to solid state media
US8635416B1 (en) 2011-03-02 2014-01-21 Violin Memory Inc. Apparatus, method and system for using shadow drives for alternative drive commands
CN104321759B (zh) * 2012-05-25 2018-03-13 华为技术有限公司 高速分布存储器系统中的多客户端多存储器控制方法和设备
US9548885B2 (en) * 2012-07-02 2017-01-17 Marvell Israel (M.I.S.L) Ltd Systems and methods for providing replicated data from memories to processing clients
US10191873B2 (en) * 2012-12-20 2019-01-29 Advanced Micro Devices, Inc. Method and apparatus for power reduction for data movement
EP2981965A4 (de) * 2013-04-02 2017-03-01 Violin Memory Inc. System zur erhöhung einer speichermedienleistung
JP2015011421A (ja) * 2013-06-27 2015-01-19 ソニー株式会社 記憶制御装置、記憶装置、および、その記憶制御方法
US9933980B2 (en) * 2014-02-24 2018-04-03 Toshiba Memory Corporation NAND raid controller for connection between an SSD controller and multiple non-volatile storage units
US20160162416A1 (en) * 2014-12-08 2016-06-09 Intel Corporation Apparatus and Method for Reducing Latency Between Host and a Storage Device
US10031884B2 (en) 2015-02-11 2018-07-24 Samsung Electronics Co., Ltd Storage apparatus and method for processing plurality of pieces of client data
US10152436B2 (en) * 2016-03-30 2018-12-11 Oracle International Corporation Mutual exclusion in a non-coherent memory hierarchy
KR20180080775A (ko) 2017-01-05 2018-07-13 에스케이하이닉스 주식회사 동적 미러링이 가능한 메모리 장치, 메모리 모듈 및 반도체 시스템
EP3662474B1 (de) 2017-07-30 2023-02-22 NeuroBlade Ltd. Speicherbasierte verteilte prozessorarchitektur
US11055105B2 (en) * 2018-08-31 2021-07-06 Micron Technology, Inc. Concurrent image measurement and execution
US10613977B1 (en) * 2018-09-27 2020-04-07 Amazon Technologies, Inc. Target port with distributed transactions
US10831693B1 (en) 2018-09-27 2020-11-10 Amazon Technologies, Inc. Multicast master
US11043246B2 (en) * 2019-04-18 2021-06-22 Samsung Electronics Co, Ltd. Memory modules including a mirroring circuit and methods of operating the same
US11741350B2 (en) 2019-11-27 2023-08-29 Amazon Technologies, Inc. Efficient utilization of processing element array
US11836527B2 (en) 2021-08-02 2023-12-05 Nvidia Corporation Accelerating table lookups using a decoupled lookup table accelerator in a system on a chip
US11704067B2 (en) * 2021-08-02 2023-07-18 Nvidia Corporation Performing multiple point table lookups in a single cycle in a system on chip

Family Cites Families (36)

* Cited by examiner, † Cited by third party
Publication number Priority date Publication date Assignee Title
US4096571A (en) * 1976-09-08 1978-06-20 Codex Corporation System for resolving memory access conflicts among processors and minimizing processor waiting times for access to memory by comparing waiting times and breaking ties by an arbitrary priority ranking
US4400768A (en) * 1980-06-04 1983-08-23 Burroughs Corporation Parallel access computer memory system employing a power-of-two memory modules
US5088032A (en) * 1988-01-29 1992-02-11 Cisco Systems, Inc. Method and apparatus for routing communications among computer networks
US4918600A (en) * 1988-08-01 1990-04-17 Board Of Regents, University Of Texas System Dynamic address mapping for conflict-free vector access
US5197130A (en) * 1989-12-29 1993-03-23 Supercomputer Systems Limited Partnership Cluster architecture for a highly parallel scalar/vector multiprocessor system
US5247645A (en) * 1991-03-12 1993-09-21 International Business Machines Corporation Dynamic memory mapper which supports interleaving across 2N +1, 2.sup.NN -1 number of banks for reducing contention during nonunit stride accesses
US5394553A (en) * 1991-06-12 1995-02-28 Lee Research, Inc. High performance array processor with nonlinear skewing of elements
US5428803A (en) * 1992-07-10 1995-06-27 Cray Research, Inc. Method and apparatus for a unified parallel processing architecture
US5479624A (en) * 1992-10-14 1995-12-26 Lee Research, Inc. High-performance interleaved memory system comprising a prime number of memory modules
US5617421A (en) * 1994-06-17 1997-04-01 Cisco Systems, Inc. Extended domain computer network using standard links
US5561669A (en) 1994-10-26 1996-10-01 Cisco Systems, Inc. Computer network switching system with expandable number of ports
JP3560662B2 (ja) * 1994-12-06 2004-09-02 富士通株式会社 並列プロセッサ装置
DE69616148T2 (de) 1995-05-22 2002-03-07 Lsi Logic Corp Verfahren und Vorrichtung zur Datenübertragung
US5838915A (en) * 1995-06-21 1998-11-17 Cisco Technology, Inc. System for buffering data in the network having a linked list for each of said plurality of queues
US5742604A (en) * 1996-03-28 1998-04-21 Cisco Systems, Inc. Interswitch link mechanism for connecting high-performance network switches
US5796732A (en) * 1996-03-28 1998-08-18 Cisco Technology, Inc. Architecture for an expandable transaction-based switching bus
US5764636A (en) * 1996-03-28 1998-06-09 Cisco Technology, Inc. Color blocking logic mechanism for a high-performance network switch
US5740171A (en) * 1996-03-28 1998-04-14 Cisco Systems, Inc. Address translation mechanism for a high-performance network switch
US5787255A (en) * 1996-04-12 1998-07-28 Cisco Systems, Inc. Internetworking device with enhanced protocol translation circuit
US5787485A (en) * 1996-09-17 1998-07-28 Marathon Technologies Corporation Producing a mirrored copy using reference labels
US5909550A (en) * 1996-10-16 1999-06-01 Cisco Technology, Inc. Correlation technique for use in managing application-specific and protocol-specific resources of heterogeneous integrated computer network
US5852607A (en) * 1997-02-26 1998-12-22 Cisco Technology, Inc. Addressing mechanism for multiple look-up tables
US6026464A (en) * 1997-06-24 2000-02-15 Cisco Technology, Inc. Memory control system and method utilizing distributed memory controllers for multibank memory
US6487202B1 (en) * 1997-06-30 2002-11-26 Cisco Technology, Inc. Method and apparatus for maximizing memory throughput
US6178429B1 (en) * 1997-11-26 2001-01-23 Cisco Technology, Inc. Mechanism for ensuring SCM database consistency on multi-part operation boundaries
US6195107B1 (en) * 1998-05-29 2001-02-27 Cisco Technology, Inc. Method and system for utilizing virtual memory in an embedded system
US6230240B1 (en) 1998-06-23 2001-05-08 Hewlett-Packard Company Storage management system and auto-RAID transaction manager for coherent memory map across hot plug interface
US6119215A (en) * 1998-06-29 2000-09-12 Cisco Technology, Inc. Synchronization and control system for an arrayed processing engine
US6308219B1 (en) * 1998-07-31 2001-10-23 Cisco Technology, Inc. Routing table lookup implemented using M-trie having nodes duplicated in multiple memory banks
US5982655A (en) * 1998-09-29 1999-11-09 Cisco Technology, Inc. Method and apparatus for support of multiple memory types in a single memory socket architecture
US6487591B1 (en) * 1998-12-08 2002-11-26 Cisco Technology, Inc. Method for switching between active and standby units using IP swapping in a telecommunication network
US6535963B1 (en) * 1999-06-30 2003-03-18 Cisco Technology, Inc. Memory apparatus and method for multicast devices
US6795901B1 (en) * 1999-12-17 2004-09-21 Alliant Techsystems Inc. Shared memory interface with conventional access and synchronization support
US6505269B1 (en) * 2000-05-16 2003-01-07 Cisco Technology, Inc. Dynamic addressing mapping to eliminate memory resource contention in a symmetric multiprocessor system
US6804162B1 (en) * 2001-04-05 2004-10-12 T-Ram, Inc. Read-modify-write memory using read-or-write banks
US6839797B2 (en) * 2001-12-21 2005-01-04 Agere Systems, Inc. Multi-bank scheduling to improve performance on tree accesses in a DRAM based random access memory subsystem

Also Published As

Publication number Publication date
EP1606712B1 (de) 2007-01-17
EP1606712A2 (de) 2005-12-21
AU2004232184B2 (en) 2010-05-27
ATE352064T1 (de) 2007-02-15
WO2004095290A2 (en) 2004-11-04
EP1777626A1 (de) 2007-04-25
AU2004232184A1 (en) 2004-11-04
DE602004017232D1 (de) 2008-11-27
DE602004004383D1 (de) 2007-03-08
CN100383751C (zh) 2008-04-23
WO2004095290A3 (en) 2004-12-02
CA2519332C (en) 2011-09-13
CN1761947A (zh) 2006-04-19
US20040186945A1 (en) 2004-09-23
CA2519332A1 (en) 2004-11-04
US7194568B2 (en) 2007-03-20
EP1777626B1 (de) 2008-10-15
ATE411560T1 (de) 2008-10-15

Similar Documents

Publication Publication Date Title
DE602004004383T2 (de) System und verfahren zur dynamischen adressierung von gespiegelter speicherbank
DE69722079T2 (de) Ein Mehrrechnersystem mit Anordnung zum Durchführen von Blockkopieroperationen
DE60202926T2 (de) Multicomputersystem mit konfigurierbaren Schnittstellen für flexible Systemkonfigurationen
DE60006842T2 (de) Multiprozessor-Node-Controller-Schaltung und Verfahren
DE69724354T2 (de) Ein Mehrprozessorrechnersystem mit lokalen und globalen Adressräumen und mehreren Zugriffsmoden
DE69722512T2 (de) Mehrrechnersystem mit einem die Anzahl der Antworten enthaltenden Kohärenzprotokoll
DE69721643T2 (de) Multiprozessorsystem ausgestaltet zur effizienten Ausführung von Schreiboperationen
DE69836812T2 (de) Verfahren und gerät zum dynamischen warteschlange-abschätzen
DE69724353T2 (de) Mehrrechnersystem mit einem Drei-Sprung-Kommunikationsprotokoll
DE69907776T2 (de) Verfahren und Vorrichtung zur Identifizierung gefährdeter Bauteile in einem System mit redundanten Bauteilen
DE112013006063B4 (de) Funktionsübernahme für einen Datenübertragungskanal in einem Netzwerk mit Hochleistungsdatenverarbeitung
DE60212626T2 (de) Endknotenunterteilung mittels lokaler identifikatoren
DE69233655T2 (de) Mikroprozessorarchitektur mit der Möglichkeit zur Unterstützung mehrerer verschiedenartiger Prozessoren
DE69736872T2 (de) Datenverarbeitungssystem
DE69826930T2 (de) System und Verfahren zur wirksamen Fernplatte Ein-/Ausgabe
DE69721891T2 (de) Deterministisches Kohärenzprotokoll für verteilten Multicache-Speicher
DE10124482A1 (de) Fehlertolerante Systemressource mit niedriger Latenzzeit, mit übergeordneter Protokollierung von Systemressourcentransaktionen und serverübergreifend gespiegelter Protokollierung von übergeordneten Systemressourcentransaktionen
DE112006001167T5 (de) Simulieren mehrerer virtueller Kanäle in Switching-Fabric-Netzwerken
DE112013006549T5 (de) Computersystem und Datensteuerverfahren
DE19516937A1 (de) Hierarchisches Cachesystem für einen Computer
DE102005014727A1 (de) Hardwarekoordination von Power Management-Aktivitäten
DE60106624T2 (de) Verriegelung in einem distribuierten system
DE4319912A1 (de) Echtzeitdaten-Abbildungsnetzwerksystem und Verfahren zum Betreiben desselben
DE10219623A1 (de) System und Verfahren zur Speicherentscheidung unter Verwendung von mehreren Warteschlangen
DE10236796A1 (de) Verfahren und Anordnung zur randomisierten Datenspeicherung in Speichernetzwerken und/oder einem Intranet und/oder dem Internet sowie ein entsprechendes Computerprogramm-Erzeugnis und ein entsprechendes computerlesbares Speichermedium

Legal Events

Date Code Title Description
8364 No opposition during term of opposition
8328 Change in the person/name/address of the agent

Representative=s name: BOSCH JEHLE PATENTANWALTSGESELLSCHAFT MBH, 80639 M