DE10219623A1 - System und Verfahren zur Speicherentscheidung unter Verwendung von mehreren Warteschlangen - Google Patents

System und Verfahren zur Speicherentscheidung unter Verwendung von mehreren Warteschlangen

Info

Publication number
DE10219623A1
DE10219623A1 DE10219623A DE10219623A DE10219623A1 DE 10219623 A1 DE10219623 A1 DE 10219623A1 DE 10219623 A DE10219623 A DE 10219623A DE 10219623 A DE10219623 A DE 10219623A DE 10219623 A1 DE10219623 A1 DE 10219623A1
Authority
DE
Germany
Prior art keywords
pending
requests
cache
memory
read
Prior art date
Legal status (The legal status is an assumption and is not a legal conclusion. Google has not performed a legal analysis and makes no representation as to the accuracy of the status listed.)
Ceased
Application number
DE10219623A
Other languages
English (en)
Inventor
Robert F Krick
David Jerome C Johnson
Paul L Rogers
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.)
HP Inc
Original Assignee
Hewlett Packard Co
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 Hewlett Packard Co filed Critical Hewlett Packard Co
Publication of DE10219623A1 publication Critical patent/DE10219623A1/de
Ceased legal-status Critical Current

Links

Classifications

    • GPHYSICS
    • G06COMPUTING; CALCULATING OR COUNTING
    • G06FELECTRIC DIGITAL DATA PROCESSING
    • G06F12/00Accessing, addressing or allocating within memory systems or architectures
    • G06F12/02Addressing or allocation; Relocation
    • G06F12/08Addressing or allocation; Relocation in hierarchically structured memory systems, e.g. virtual memory systems
    • G06F12/0802Addressing of a memory level in which the access to the desired data or data block requires associative addressing means, e.g. caches
    • G06F12/0806Multiuser, multiprocessor or multiprocessing cache systems
    • G06F12/0815Cache consistency protocols
    • G06F12/0831Cache consistency protocols using a bus scheme, e.g. with bus monitoring or watching means

Landscapes

  • Engineering & Computer Science (AREA)
  • Theoretical Computer Science (AREA)
  • Physics & Mathematics (AREA)
  • General Engineering & Computer Science (AREA)
  • General Physics & Mathematics (AREA)
  • Memory System Of A Hierarchy Structure (AREA)

Abstract

Die Erfindung beschreibt ein System für ein Verfahren zur Verwendung von mehreren Warteschlangen zum Zugreifen auf Speicherentitäten. Die Prioritäten können zwischen konkurrierenden Warteschlangen eingerichtet werden, um eine maximale Verarbeitungseffizenz zu ermöglichen. Zusätzlich, wenn mehr als eine ausstehende Transaktion denselben Speicherplatz betrifft, werden Abhängigkeiten eingerichtet, um die korrekte Sequenzierung der konkurrierenden Transaktionen sicherzustellen.

Description

Der Gegenstand der vorliegenden Anmeldung ist verwandt zu dem in der eingereichten Anmeldung mit dem Titel SCHNELLE PRIORITÄTSBESTIMMUNGSSCHALTUNG MIT ROTIERENDER PRIORITÄT, deren Offenbarung hiermit durch Bezugnahme aufgenommen worden ist.
Die Erfindung bezieht sich im allgemeinen auf Computerspeichersysteme und spezieller auf eine Speichersteuerung in einem System, um eine Zugriffszeit auf Daten unter Verwendung eines Speichers zu verbessern.
Der Wunsch nach einer Erhöhung der Geschwindigkeit, mit der der Computer Informationen verarbeitet, ist immer stärker geworden. Ein Schema zum Erhöhen der Verarbeitungsgeschwindigkeit umfaßt die Verbesserung einer Speicherzugriffszeit.
Eine übliche Art und Weise, mit der die Speicherzugriffszeit verbessert werden soll, ist, einen Cache-Speichers zusammen mit einem Hauptspeicher bereitzustellen. Ein Cache-Speicher ist typischerweise einem Prozessor zugeordnet und erfordert weniger Zugriffszeit als der Hauptspeicher. Kopien von Daten aus Lese- und Schreibeaktionen aus dem Prozessor werden im Cache zurückgehalten. Manche Cache-Systeme behalten vor kurzem vorgenommene Lese- und Schreibeaktionen ein, während andere komplexere Algorithmus aufweisen können, um zu bestimmen, welche Daten im Cache-Speicher zurückgehalten werden. Wenn ein Prozessor Daten anfordert, die derzeit im Cache resident sind, wird nur auf den Cache-Speicher zugegriffen. Da der Cache-Speicher eine geringere Zugriffszeit erfordert als der Hauptspeicher, wird die Verarbeitungsgeschwindigkeit verbessert. Heutzutage können Speicherzugriffe vom Hauptspeicher sogar 250 Nanosekunden dauern, während ein Cache-Zugriff zwei oder drei Nanosekunden dauern kann.
Zusätzlich kann ein Cache-System verwendet werden, um die effektive Geschwindigkeit einer Datenschreibe-Aktion zu erhöhen. Wenn ein Prozessor z. B. eine Speicherstelle schreiben soll, kann der Prozessor eine Datenschreibe- Aktion ausschließlich an den Cache-Speicher ausführen. Der Cache-Speicher und eine zugeordnete Steuerlogik können dann die Daten an den Hauptspeicher schreiben, während der Prozessor mit anderen Aufgaben fortfährt.
Computersysteme können auch die Verwendung des Caches erweitern und eine Multiebenen-Hierarchie des Cache- Speichers verwenden, wobei sich ein relativ schneller, kostspieliger Speicher mit eingeschränkter Kapazität auf der höchsten Ebene der Hierarchie befindet und zu einem relativ langsameren, kostengünstigeren Speicher mit einer höheren Kapazität auf der niedrigsten Ebene der Hierarchie übergegangen wird. Typischerweise umfaßt die Hierarchie einen kleinen, schnellen Speicher, der als Primär-Cache bezeichnet wird, der entweder physisch in eine prozessorintegrierte Schaltung integriert ist oder sich physisch nahe am Prozessor angebracht ist. Der Primär- Cache, der auf dem gleichen Chip wie die zentrale Verarbeitungseinheit (CPU) eingebaut ist, kann eine Frequenz (d. h. Zugriffszeit) gleich der Frequenz der CPU aufweisen. Es kann ein separater Anweisungs-Primär-Cache und ein Daten-Primär-Cache vorhanden sein. Primär-Caches maximieren typischerweise das Verhalten, während dabei Kapazität geopfert wird, um eine Datenlatenz zu minimieren. Zusätzlich stellt der Primär-Cache typischerweise eine hohe Bandbreite bereit. Ein Sekundär-Cache oder ein Tertiär- Cache können ebenfalls verwendet werden und sind typischerweise weiter vom Prozessor entfernt. Diese Sekundär- und Tertiär-Caches liefern einen "Rückanschlag" (Backstop) für den Primär-Cache und weisen im allgemeinen eine größere Kapazität, eine höhere Latenz und eine geringere Bandbreite als der Primär-Cache auf. Wenn ein Prozessor ein Teil von einem Primär-Cache anfordert und das Teil im Primär-Cache vorhanden ist, resultiert daraus ein Cache-"Treffer". Während es, wenn ein Teil nicht vorhanden ist, einen Primär-Cache-"Fehlschlag" gibt. Im Falle eines Primär-Cache-Fehlschlags wird das angeforderte Teil von der nächsten Ebene des Cache-Speichers oder, wenn das angeforderte Teil nicht im Cache-Speicher enthalten ist, vom Hauptspeicher abgerufen.
Typischerweise sind alle Speicher in Worten organisiert (z. B. 32 Bits oder 64 Bits pro Wort). Der Mindestspeicherbetrag, der zwischen einem Cache und einer nächstniedrigen Ebene der Speicherhierarchie übertragen werden kann, wird als eine Cache-Zeile oder manchmal als ein Block bezeichnet. Eine Cache-Zeile umfaßt typischerweise mehrere Worte (z. B. 16 Worte pro Zeile). Ein Speicher kann auch in Seiten (auch als Segmente bezeichnet), mit vielen Zeilen pro Seite aufgeteilt sein. Bei manchen Systemen kann die Seitengröße variabel sein.
Caches sind unter Verwendung von drei Hauptarchitekturen konstruiert worden: direkt abgebildete, satzassoziative (satzadressierte) und vollassoziative (voll inhaltsadressierte). Einzelheiten über die drei Cache-Typen sind in den nachstehenden Druckschriften des Stands der Technik beschrieben, deren Offenbarung hiermit durch Bezugnahme aufgenommen worden ist: De Blasi, "Computer Architecture", ISBN 0-201-41603-4 (Addison-Wesley, 1990), S. 273-291; Stone, "High Performance Computer Architecture", ISBN 0-201-51377-3 (Addison-Wesley, 2. Ausgabe 1990), S. 29-39; Tabak, "Advanced Microprocessors", ISBN 0-07-062807-6 (McGraw-Hill 1991), S. 244-248).
Beim direkten Abbilden, wenn eine Zeile angefordert wird, weist nur eine Zeile im Cache übereinstimmende Indexbits auf. Daher können die Daten unmittelbar abgerufen und auf einen Datenbus getrieben werden, bevor das System bestimmt, ob der Rest der Adresse übereinstimmt. Die Daten können oder können nicht gültig sein, jedoch im Normalfall, wo sie gültig sind, sind die Datenbits auf einem Bus verfügbar, bevor das System die Gültigkeit der Daten bestätigt.
Bei satzassoziativen Caches ist nicht bekannt, welche Zeile einer Adresse entspricht, bis die Indexadresse berechnet und die Etikettadresse gelesen und verglichen worden ist. Das heißt, bei satzassoziativen Caches wird das Ergebnis eines Etikettenvergleichs verwendet, um auszuwählen, welche Zeile von Datenbits in einem Satz von Zeilen dem Prozessor präsentiert wird.
Ein Cache soll angeblich vollassoziativ sein, wenn ein Cache eine ganze Zeilenadresse zusammen mit den Daten speichert und eine beliebige Zeile an einer beliebigen Stelle im Cache plaziert werden kann. Für einen großen Cache, bei dem eine beliebige Zeile an einer beliebigen Stelle plaziert werden kann, ist jedoch eine umfangreiche Hardware erforderlich, um schnell zu bestimmen, ob und wo sich ein Eintrag im Cache befindet. Für große Caches umfaßt eine schnellere, platzsparende Alternative die Verwendung eines Teilsatzes einer Adresse (die als Index bezeichnet wird), um eine Zeilenposition im Cache zu benennen und anschließend den verbleibenden Satz von höherwertigen Bits von jeder physischen Adresse (die als Etikett bezeichnet wird) zusammen mit den Daten zu speichern. Bei einem Cache mit Indexierung kann ein Teil mit einer speziellen Adresse nur innerhalb eines Satzes von Cache-Zeilen, die durch den Index bezeichnet sind, plaziert werden. Wenn der Cache so angeordnet ist, daß der Index für eine gegebene Adresse genau auf eine Zeile im Teilsatz abgebildet wird, gilt der Cache als direkt abgebildet. Wenn der Index auf mehr als eine Zeile im Teilsatz abgebildet wird, gilt der Cache als satzassoziativ. Die gesamte oder ein Teil einer Adresse werden einer Hash-Aktion unterzogen, um einen Satzindex zu liefern, der den Adressenraum in Sätze partitioniert.
Bei allen drei Typen von Caches wird eine Eingangsadresse an eine Vergleichslogik angelegt. Typischerweise wird ein Teilsatz der Adresse, der als Etikettenbits bezeichnet wird, aus der Eingangsadresse extrahiert und mit den Etikettenbits von jedem Cache-Eintrag verglichen. Wenn die Etikettenbits übereinstimmen, werden die entsprechenden Daten aus dem Cache extrahiert.
Im allgemeinen liefern direktabgebildete Caches einen schnelleren Zugriff, jedoch beanspruchen sie die meiste Zeit zum Vergleichen der Etikettenbits. Vollassoziative Caches weisen eine größere Zugriffszeit auf, konsumieren jedoch mehr Leistung und erfordern einen komplexeren Schaltungsaufbau.
Wenn mehrere Prozessoren mit ihren eigenen Caches in einem System enthalten sind, werden Cache-Kohärenzprotokolle verwendet, um die Kohärenz zwischen und unter den Caches beizubehalten. Es gibt zwei Klassen von Cache- Kohärenzprotokollen:
  • 1. Verzeichnisbasierte: Die Informationen über einen Block des physischen Speichers werden an einem einzigen gemeinsamen Platz erhalten. Diese Informationen umfassen normalerweise, welcher Cache/s eine Kopie des Blocks aufweist/en und ob diese Kopie ausschließlich für eine zukünftige Modifizierung markiert ist. Bei einem Zugriff auf einen speziellen Block wird zuerst das Verzeichnis abgefragt, um zu sehen, ob die Speicherdaten verfallen sind und die echten Daten (wenn überhaupt) in irgendeinem anderen Cache residieren. Ist dies der Fall, dann wird der Cache, der den modifizierten Block enthält, dazu gebracht, seine Daten an den Speicher zurückzusenden. Dann leitet der Speicher die Daten an den neuen Anfordernden (Requester), wobei das Verzeichnis mit dem neuen Platz dieses Blocks aktualisiert wird. Dieses Protokoll minimiert eine Interbusmodul- (oder Intercache-) Störung, leidet jedoch typischerweise an einer hohen Latenz und ist aufgrund der erforderlichen großen Verzeichnisgröße teuer zu bauen.
  • 2. Schnüffeln: Jeder Cache, der eine Kopie der Daten aus einem Block des physischen Speichers aufweist, weist auch eine Kopie der Informationen über den Datenblock auf. Jeder Cache befindet sich typischerweise auf einem gemeinsamen Speicherbus, und alle Cache- Controller überwachen oder schnüffeln an dem Bus, um zu bestimmen, ob sie eine Kopie des gemeinsamen Blocks aufweisen oder nicht.
Schnüffel-Protokolle sind für eine Multiprozessor- Systemarchitektur sehr gut geeignet, die Caches und einen gemeinsamen Speicher verwendet, weil sie im Kontext der bereits bestehenden, physischen Verbindung arbeiten, die normalerweise zwischen dem Bus und dem Speicher vorgesehen ist. Das Schnüffeln wird gegenüber den Verzeichnisprotokollen häufig bevorzugt, weil sich der Betrag an Kohärenzinformationen proportional zur Anzahl von Blöcken in einem Cache und nicht zur Anzahl von Blöcken im Hauptspeicher verhält.
Das Kohärenzproblem entsteht in einer Multiprozessorarchitektur, wenn ein Prozessor einen exklusiven Zugriff haben muß, um einen Block des Speichers oder Objekts zu schreiben, und/oder die neueste Kopie haben muß, wenn ein Objekt gelesen wird. Ein Schnüffel-Protokoll muß alle Caches, die das Objekt, das geschrieben werden soll, teilen, lokalisieren. Die Konsequenzen einer Schreibe-Aktion an gemeinsame Daten umfassen entweder ein Invalidieren aller anderen Kopien der Daten oder ein Aussenden der Schreibe-Aktion an alle der gemeinsamen Kopien. Aufgrund der Verwendung der Zurückschreibe-Caches müssen die Kohärenzprotokolle ebenfalls Prüfungen an allen Caches während der Speicherleseaktionen bewirken, um zu bestimmen, welcher Prozessor die aktuellste Kopie der Informationen aufweist.
Daten bezüglich der Informationen, die zwischen den Prozessoren geteilt werden, werden den Statusbits hinzugefügt, die in einem Cache-Block bereitgestellt sind, um die Schnüffel-Protokolle zu implementieren. Diese Informationen werden beim Überwachen von Busaktivitäten verwendet. Bei einem Leseaktions-Fehlschlag überprüfen alle Caches, ob sie eine Kopie des angeforderten Blocks von Informationen haben und ergreifen die entsprechende Maßnahme, wie z. B. Zuführen der Informationen zum Cache, bei dem sich der Fehlschlag ereignete. In ähnlicher Weise überprüfen alle Caches bei einer Schreibe-Aktion, ob sie eine Kopie der Daten besitzen und handeln dann, indem sie beispielsweise ihre Kopie der Daten invalidieren oder ihre Kopie der Daten verändern, um den jüngsten Wert zu reflektieren.
Die Schnüffel-Protokolle umfassen zwei Typen:
Schreiben-Invalidieren: Der Schreibprozessor bewirkt, daß alle Kopien in anderen Caches invalidiert werden, bevor er seine lokale Kopie verändert. Dem Prozessor steht dann frei, die Daten zu aktualisieren, bis zu dem Zeitpunkt, wo ein weiterer Prozessor nach den Daten fragt. Der Schreibprozessor gibt ein Invalidierungssignal über den Bus aus, und alle Caches prüfen, ob sie eine Kopie der Daten besitzen. Ist dies der Fall, müssen sie den Block, der die Daten enthält, invalidieren. Dieses Schema erlaubt mehrere Leser, jedoch nur einen einzigen Schreiber.
Schreiben-Aussenden: Der Schreibprozessor sendet die neuen Daten über den Bus aus und invalidiert nicht jeden Block, der geteilt wird. Alle Kopien werden dann mit dem neuen Wert aktualisiert. Dieses Schema sendet kontinuierlich Schreibe-Aktionen an gemeinsame Daten aus, während das Schreiben-Invalidieren-Schema, das vorstehend erörtert wurde, alle anderen Kopien löscht, so daß es nur eine lokale Kopie für die anschließenden Schreibe-Aktionen gibt. Die Schreiben-Aussenden-Protokolle ermöglichen normalerweise, daß Daten als gemeinsam (ausgesendet) etikettiert werden, oder die Daten können als privat (lokal) etikettiert werden. Für weitere Informationen über die Kohärenz siehe J. Hennessy, D. Patterson, Computer Architecture: A Quantitative Approach, Morgan Kaufmann Publishers, Inc., (1990), deren Offenbarung hiermit durch Bezugnahme aufgenommen worden ist.
Bei einer Schnüffel-Kohärenz-Multiprozessor-Systemarchi­ tektur wird jede kohärente Transaktion auf dem Systembus zu jedem Cache-Teilsystem des Prozessors weitergeleitet, um eine Kohärenzprüfung auszuführen. Diese Überprüfung stört normalerweise die Pipeline des Prozessors, weil auf den Cache nicht durch den Prozessor zugegriffen werden kann, während die Kohärenzprüfung stattfindet.
Bei einem traditionellen Einzelport-Cache ohne doppelte Cache-Etiketten wird die Prozessor-Pipeline bei Cache- Zugriffsanweisungen blockiert, wenn der Cache-Controller damit beschäftigt ist, Cache-Kohärenzprüfungen für andere Prozessoren zu verarbeiten. Für jede Schnüffel-Aktion muß der Cache-Controller zuerst die Cache-Etiketten für die Schnüffel-Adresse prüfen und dann den Cache-Zustand modifizieren, wenn sich ein Treffer ereignet hat. Das Zuteilen der Cache-Bandbreite für eine atomische (untrennbare) Etiketten-Lese- und Schreibe-Aktion (für eine mögliche Modifizierung) verriegelt den Cache von dem Prozessor länger als notwendig, wenn die Schnüffel-Aktion keine Etiketten-Schreibe-Aktion erfordert. Zum Beispiel sind 80 bis 90% der Cache-Abfragen Fehlschläge, d. h. eine Etiketten-Schreibeaktion ist nicht erforderlich. Bei einer Mehrebenen-Cache-Hierarchie können viele dieser Fehlschläge gefiltert werden, wenn eine Inklusionseigenschaft beachtet wird. Eine Inklusionseigenschaft ermöglicht, daß Informationen auf der höchsten Ebene des Caches bezüglich der Inhalte der unteren Cache-Ebenen gespeichert werden.
Die Geschwindigkeit, mit der Computer Informationen für viele Anwendungen verarbeiten, kann durch Erweitern der Größe der Caches, speziell des Primär-Caches, erhöht werden. Während die Größe des Primär-Caches zunimmt, werden die Hauptspeicherzugriffe verringert und die Gesamtverarbeitungsgeschwindigkeit nimmt zu. In ähnlicher Weise, da die Größe des Sekundär-Caches zunimmt, werden die Hauptspeicherzugriffe verringert und die Gesamtverarbeitungsgeschwindigkeit erhöht, obwohl dies nicht so wirksam ist wie das Erweitern der Größe des Primär-Caches.
Typischerweise werden bei Computersystemen Primär-Caches, Sekundär-Caches und Tertiär-Caches unter Verwendung eines statischen Direktzugriffsspeichers (SRAM; SRAM = Static Random Access Memory) implementiert. Die Verwendung des SRAM ermöglicht eine verringerte Zugriffszeit, was die Geschwindigkeit erhöht, mit der die Informationen verarbeitet werden können. Ein dynamischer Direktzugriffsspeicher (DRAM; DRAM = Dynamic Random Access Memory) wird typischerweise für den Hauptspeicher verwendet, da er weniger kostspielig ist, weniger Leistung erfordert und größere Speicherdichten liefert.
Typischerweise schränkten Computersysteme des Stands der Technik auch auf die Anzahl von ausstehenden Transaktionen an den Cache zu einem bestimmten Zeitpunkt ein. Wenn mehr als eine Transaktion durch einen Cache empfangen werden sollte, verarbeitete der Cache die Anforderungen seriell. Wenn z. B. zwei Transaktionen durch einen Cache empfangen werden sollten, wurde die erste Transaktionsanforderung zuerst verarbeitet, wobei die zweite Transaktion zurückgehalten wurde, bis die erste Transaktion beendet war. Sobald die erste Transaktion vollendet war, verarbeitete der Cache die zweite Transaktionsanforderung.
Es existieren zahlreiche Protokolle, die die Cache-Kohärenz über mehrere Caches und den Hauptspeicher beibehalten. Ein solches Protokoll wird MESI genannt. Das MESI-Protokoll ist bei M. Papamarcos und J. Patel, "A Low Overhead Coherent Solution for Multiprocessors with Private Cache Memories", im Sitzungsprotokoll des 11. International Symposium on Computer Architecture, IEEE, New York (1984), S. 348-354, ausführlich beschrieben, und in seiner Gesamtheit hierin durch Bezugnahme aufgenommen. MESI steht für Modified, Exclusive, Shared, Invalid (Modifiziert, Exklusiv, Geteilt, Ungültig.) Nach dem MESI-Protokoll wird eine Cache-Zeile gemäß ihrer Verwendung kategorisiert. Eine modifizierte Cache-Zeile zeigt an, daß die spezielle Zeile durch den Cache, der der momentane Besitzer der Zeile ist, beschrieben worden ist. Eine exklusive Cache-Zeile zeigt an, daß ein Cache die exklusive Eigentümerschaft der Cache- Zeile aufweist, was dem Cachecontroller ermöglicht, die Cache-Zeile zu modifizieren. Eine gemeinsame Cache-Zeile zeigt an, daß ein oder mehrere Caches die Eigentümerschaft der Zeile aufweisen. Eine gemeinsame Cache-Zeile gilt als Nur-Lese-Zeile, und jede Vorrichtung unter dem Cache kann die Zeile lesen, darf jedoch nicht an den Cache schreiben. Einen ungültige Cache-Zeile oder eine Cache-Zeile ohne Eigentümer identifiziert eine Cache-Zeile, deren Daten nicht gültig sein können, da der Cache die Cache-Zeile nicht mehr besitzt.
Es ist die Aufgabe der vorliegenden Erfindung, eine Vorrichtung zum Zuweisen eines Speichers und ein Verfahren zum Steuern eines Zugriffs auf einen Cache-Speicher zu schaffen.
Diese Aufgabe wird durch eine Vorrichtung gemäß Anspruch 1 und 13 und ein Verfahren gemäß Anspruch 15 gelöst.
Die Erfindung umfaßt ein System und Verfahren zum Prioritäten setzen, Identifizieren und Erzeugen von Abhängigkeiten zwischen ausstehenden Transaktionsanforderungen, die sich auf einen Sekundär- Gache beziehen. Die ausstehenden Anforderungen in den Lese- Warteschlangen haben im allgemeinen gegenüber Schreib- Anforderungen Priorität, wobei die Kohärenz-Warteschlange die höchste Priorität aufweist. Zusätzlich, wenn mehr als eine Transaktionsanforderung den gleichen Speicherplatz betrifft, wird eine Abhängigkeit identifiziert und erzeugt, um sicherzustellen, daß die erste angeforderte Transaktion, die den Speicherplatz betraf, zuerst verarbeitet wird.
Bevorzugte Ausführungsbeispiele der vorliegenden Erfindung werden nachfolgend Bezug nehmend auf die beiliegenden Zeichnungen näher erläutert. Es zeigen:
Fig. 1 eine Sekundär-Cachestruktur, die zwei Warteschlangen, eine Lesewarteschlange und eine Schreibwarteschlange umfaßt;
Fig. 2 ein zweidimensionales Array, das den satzassoziativen Cache, der im DRAM enthalten ist, darstellt;
Fig. 3 eine Sekundär-Cachestruktur, die eine Lesewarteschlange, eine Schreibwarteschlange, eine Kohärenzwarteschlange und eine Räumungswarteschlange umfaßt, die jeweils verwendet werden, um Cache-Zeilen aus dem DRAM zu lesen;
Fig. 4 die Struktur der Adressen für die verschiedenen Warteschlangen von Fig. 3;
Fig. 5 die Struktur der Adressen, wenn die Transaktionen in der Kohärenzwarteschlange und der Lesewarteschlange anstehen;
Fig. 6 die Struktur der Adressen, wenn die Transaktionen in der Lesewarteschlange, der Räumungswarteschlange und der Schreibwarteschlange anstehen;
Fig. 7A die Struktur der Adressen, wenn die Transaktionen in der Lesewarteschlange und der Schreibwarteschlange anstehen und derselbe Speicherabschnitt des DRAMs betroffen ist;
Fig. 7B ein Beispiel einer Abhängigkeitsauswahl, wenn mehrere Adreßabhängigkeiten existieren;
Fig. 7C ein Beispiel der Umbruchbeschaffenheit der Warteschlangen; und
Fig. 8 eine Tabelle, die die Abhängigkeiten zwischen den verschiedenen Warteschlangen darstellt.
Im allgemeinen umfaßt eine Speicherhierarchie verschiedene Komponenten, die mit verschiedenen Geschwindigkeiten arbeiten. Diese Geschwindigkeiten können sich von der Geschwindigkeit der zentralen Verarbeitungseinheit (CPU) unterscheiden. Typischerweise nimmt die Geschwindigkeit der Komponente ab, während die Entfernung von der CPU zunimmt. Diese Geschwindigkeits-Versätze können durch Warteschlangenbildung, oder Speichern, der verzögerten Operationen gelöst werden. Zum Beispiel wird ein statischer Direktzugriffsspeicher (SRAM) bei Cache-Operationen verwendet, und die Technik des dynamischen Direktzugriffsspeichers (DRAM) ist im allgemeinen nicht für Caches verwendet worden, weil sie, bezüglich der Zugriffszeit, relativ zum Hauptspeicher einen geringen Nutzen bietet. Die DRAM-Technik ist jedoch pro Bit Speicher näherungsweise viermal weniger teuer als der SRAM und ermöglicht aufgrund seiner höheren Dichte, daß ein viel größerer Cache für einen bestimmten Bereich implementiert wird. Wenn eine nutzbare Fläche "auf dem Gehäuse" von Bedeutung ist, erlangt der Dichtevorteil des DRAMs gegenüber dem SRAM ebenfalls Bedeutung.
Während die Größe des SRAM-implementierten Primär-Caches zunimmt, nimmt die Größe des Speichers, der für den Sekundär- oder Tertiär-Cache erforderlich ist, ebenfalls zu. Typischerweise, wenn eine Cache-Hierarchie implementiert wird, wird die Größe des Speichers auf jeder nachfolgenden Ebene um einen Faktor von vier oder acht erhöht. Daher ist für einen Primär-Cache von einem Megabyte ein Sekundär-Cache von vier bis acht Megabyte wünschenswert. Da die Größe des Sekundär-Caches zunähme, würde die Verwendung des SRAMs aufgrund seiner eingeschränkten Dichte untragbar werden. Durch Verwendung der DRAM-Technologie sind Sekundär-Caches von 32 Megabyte oder mehr möglich. Während die Zeit für einen Zugriff auf Informationen, die im DRAM-Sekundär-Cache gespeichert sind, zunimmt, wird die Gesamtbeeinträchtigung durch die geringe Primär-Cache-Fehlschlagsrate, die dem größeren Primär-Cache zugeordnet ist, versetzt. In anderen Worten könnte der Sekundär-Cache eine längere Latenz umfassen, während die Größe des Primär-Caches zunimmt.
Um die Latenz, die dem Sekundär-Cache zugeordnet ist, weiter zu verringern, kann der DRAM-Speicher konzipiert sein, um eine schnellere Zugriffszeit aufzuweisen. Diese schnellere Zugriffszeit wird durch die Verwendung kleinerer DRAM-Chips als im Hauptspeicher erreicht, wodurch die Anzahl von Pins, die zum Übertragen von Daten zu und aus dem DRAM verwendet werden, erhöht wird und die Frequenz, bei der der DRAM-Chip arbeitet, erhöht wird. Die DRAM-Chips können konfiguriert sein, um zu ermöglichen, daß eine Cache-Zeile in der Größenordnung von 15 Nanosekunden übertragen wird.
Sowohl die erweiterte Größe des Sekundär-Caches und seine längere Latenzzeit (im Vergleich zum Primär-Cache) erfordern eine Methodik, um mehrere unerfüllte Anforderungen für Daten aus dem Sekundär-Cache zu bewältigen. Die Anforderungen können sogar alle zwei Nanosekunden empfangen werden, und wenn 15 Nanosekunden für eine Anforderung benötigt werden, um bedient zu werden, können mehrere zusätzliche Anforderungen empfangen werden. Obgleich die Systeme des Stands der Technik zahlreiche Anforderungen an den SRAM-Sekundär-Cache sequentiell gehandhabt haben, erfordert die Verwendung von größeren DRAM-Sekundär-Cache-Strukturen einen solideren Lösungsansatz.
Fig. 1 zeigt eine Sekundär-Cachestruktur 100, die zwei Warteschlangen, eine Lese-Warteschlange (ReadQ) 101 und eine Schreibe-Warteschlange (WriteQ) 102, umfaßt. Für den Zweck der vorliegenden Darstellung kann ReadQ 101 acht Adressen 103 und zwei Datenzeilen 104 halten, während WriteQ 102 acht Adressen 105 und acht Datenzeilen 106 halten kann. Eine Adresse 103 und eine Adresse 105 sind gepufferte Kopien der Adresse der Cache-Zeile, die im DRAM 113 gespeichert wird, nicht die Cache-Zeile an sich. Wenn eine Leseanforderung durch den Sekundär-Cache empfangen wird, wird diese durch die Etiketten-Pipeline 107 verarbeitet, die den Platz der Cache-Zeile im DRAM 113 bestimmt. Die Leseanforderung wird an einem der Adreßplätze gespeichert, und während die Lese-Aktion stattfindet, können zusätzliche Leseanforderungen durch ReadQ 101 empfangen werden. Gleichzeitig können Schreibanforderungen empfangen werden, die durch die Etiketten-Pipeline 107 verarbeitet und durch WriteQ 102 gespeichert werden. Die Speicherung von mehreren Anforderungen ermöglicht den Caches, als nichtblockierende Caches zu arbeiten, die dem System ermöglichen, weiterhin mit einer oder mehreren unerfüllten, anstehenden Transaktionen zu arbeiten. Eine Speicherentscheidungsvorrichtung, die nachstehend beschrieben wird, wird verwendet, um die Sequenzierung von mehreren anstehenden Anforderungen zu bestimmen.
Die Etiketten-Pipeline 107 und der Etiketten-RAM 108 werden verwendet, um zu bestimmen, ob die angeforderte Cache-Zeile im Sekundär-Cache resident ist. Die Etiketten-Pipeline 107 ist ebenfalls wirksam, um für eine neue Cache-Zeile, die in den Sekundär-Cache geschrieben werden soll, Platz zu machen. Wenn die Cache-Zeile im Sekundär-Cache resident ist, wird die Anforderung durch die Etiketten-Pipeline 107 an die ReadQ 101 gesendet, die dann auf die Anforderung hin agiert. Die ReadQ 101 liefert dann die Cache-Zeile zur CPU. Wenn die Cache-Zeile nicht resident ist, wird die Anforderung durch die Etiketten-Pipeline 107 an den Hauptspeicher über einen Multiplexer 109 gesendet. Die Cache-Zeilen, die vom Hauptspeicher zurückkehren, gelangen durch den Busrückgabepuffer 110 und werden über den Multiplexer 111 zum Prozessor 112 gesendet. Diese Cache- Zeilen, die vom Hauptspeicher zurückkehren, können ebenfalls im Sekundär-Cache gespeichert werden, um die Zugriffszeit für anschließende Abfragen der gleichen Cache- Zeile zu verringern. Die Etiketten-Pipeline 107 und der Etiketten-RAM 108 behandeln Operationen aus der CPU atomisch und sequentiell. Dies verdeckt das Warteschlangenverhalten, das zum Liefern der Daten notwendig ist.
Die WriteQ 102 ist für das Schreiben von neuen Cache-Zeilen in den DRAM des Sekundär-Caches verantwortlich. Diese Cache-Zeilen werden vom Prozessor oder dem Hauptspeicher erhalten. Der Prozessor kann die Cache-Zeile zurück zum Sekundär-Cache senden, wenn er die Informationen, die in der Cache-Zeile enthalten sind, aktualisiert hat, oder die Cache-Zeile kann zum Sekundär-Cache gesendet werden, um die Daten aus dem Primär-Cache zu entfernen. Die Cache-Zeilen, die aus dem Primär-Cache kommen, befinden sich typischerweise im modifizierten oder "schmutzigen" Zustand. Das Speichern der modifizierten Cache-Zeile im Sekundär- Cache und nicht im Hauptspeicher ermöglicht eine schnellere, anschließende Wiedergewinnung der Cache-Zeile. Die Cache-Zeilen, die aus dem Hauptspeicher kommen, gelangen durch den Busrückgabepuffer 110 zur WriteQ 102 und werden im DRAM 113 gespeichert.
Die Größe des DRAMs 113 beträgt bei einem bevorzugten Ausführungsbeispiel 32 Megabyte. Der DRAM 113 kann daher 262.144 Cache-Zeilen speichern, wenn die Größe von jeder Cache-Zeile 128 Byte beträgt. Bei einem bevorzugten Ausführungsbeispiel verwendet der DRAM 113 einen satzassoziativen Vier-Wege-Cache, der 65.536 Reihen enthält. Der satzassoziative Vier-Wege-(0, 1, 2, 3)Cache ermöglicht daher die Speicherung von 262.144 Cache-Zeilen. Der satzassoziative Cache kann als ein zweidimensionales Array dargestellt werden.
Ein Fachmann mit Durchschnittsqualifikation würde verstehen, daß, obwohl die vorliegende Beschreibung einen einzelnen Prozessor, der eine Cache-Zeile anfordert, erörtert, die Erfindung auf eine Anzahl von Prozessoren, die den Sekundär-Cache teilen, gleichermaßen anwendbar wäre.
Fig. 2 zeigt ein zweidimensionales Array, das den satzassoziativen Cache, der im DRAM 113 enthalten ist, darstellt. Das zweidimensionale Array enthält 65.536 Indizes oder Reihen und vier Wege (0, 1, 2, 3). Wenn eine Cache-Zeile an den Sekundär-Cache gesendet wird, legt die Etiketten-Pipeline 107 eine Funktion an die Adresse an, um zu bestimmen, wo im DRAM 113 die Cache-Zeile gespeichert werden soll. Die Funktion bestimmt zuerst, in welchem Index die Cache-Zeile gespeichert werden könnte. Sechzehn Bit der Cache-Zeilenadresse werden verwendet, um den Index zu bestimmen. Anschließend wird der Cache-Zeilenweg unter Verwendung der nächsten zwei Bits der Funktion bestimmt. Zum Beispiel würde eine Cache-Zeile mit dem Ausgangssignal der Funktion auf der Adresse 000000000000000110 im Index 1 (0000000000000001) und Weg 2 (10) gespeichert werden. Die Cache-Zeile würde im Platz 201 der Fig. 2 gespeichert werden. Vierundvierzig Bit werden im Hauptspeicher verwendet, um einzelne Bytes zu adressieren, wo die oberen zweiunddreißig Bits verwendet werden, um die Cache-Zeilen zu differenzieren. Da nur achtzehn Bit der Cache- Zeilenadresse verwendet werden, um zu bestimmen, wo im DRAM 113 die Cache-Zeile gespeichert wird, kann mehr als eine Cache-Zeile im gleichen Abschnitt des DRAMs 113 gespeichert werden, jedoch vorzugsweise nicht gleichzeitig.
Der Etiketten-RAM 108 (Fig. 1) enthält ebenfalls 65.536 Reihen (Indizes) und vier Spalten (Wege) und wird verwendet, um die Position einer Cache-Zeile im DRAM 113 zu bestimmen. Wenn vom Primär-Cache eine Anforderung empfangen wird, berechnet die Etiketten-Pipeline 107 einen Index, der für den Zugriff auf den Etiketten-RAM 108 verwendet wird. Bei einem bevorzugten Ausführungsbeispiel werden 44 Bit (0 bis 43) verwendet, um den Hauptspeicher zu adressieren, wobei 0 das höchstwertige Bit und 43 das niederwertigste Bit ist. Da die Cache-Zeilen 128 Byte enthalten, werden die unteren sieben Bit (37 bis 43) nicht verwendet und können fallengelassen werden. Sechzehn der verbleibenden Bits (21 bis 36) werden durch die Etiketten-Pipeline 107 verwendet, um den Index für sowohl den Etiketten-RAM 108 als auch den DRAM 113 zu berechnen. Die verbleibenden Bits, die Bits 0 bis 20, die als das "Etikett" bezeichnet werden, werden im entsprechenden Abschnitt des Etiketten-RAMs 108 gespeichert. Die im Etiketten-RAM 108 gespeicherten Bits sowie die Position, wo die Bits gespeichert sind, werden durch die Etiketten-Pipeline 107 verwendet, um zu bestimmen, ob die gewünschte Cache-Zeile im Sekundär-Cache vorhanden ist. Bei diesem Ausführungsbeispiel wird jeder der vier Wege überprüft, um zu bestimmen, ob die Cache- Zeile im Sekundär-Cache vorhanden ist.
Fig. 3 ist eine Sekundär-Cache-Struktur, die die ReadQ 101, die WriteQ 102, die Kohärenz-Warteschlange (CohQ) 301 und die Räumungswarteschlange (EvictQ) 302 umfaßt. Die ReadQ 101, die CohQ 301 und die EvictQ 302 werden jeweils verwendet, um Cache-Zeilen aus dem DRAM zu lesen. In Fig. 3 wird die ReadQ 101 verwendet, um die Cache-Zeile aus dem DRAM zu lesen und die Cache-Zeile zum Prozessor zurückzusenden. Eine Kopie der Cache-Zeile kann im Sekundär-Cache zurückgehalten werden.
Die CohQ 301 wird verwendet, um den DRAM zu lesen und die Daten an einen anderen Prozessor über den externen Speicherbus zu senden. Die CohQ 301 wird verwendet, um ein Schnüffeln von einem anderen Prozessor zu erfüllen. Das Schnüffeln nimmt die Cache-Zeile aus dem Sekundär-Cache und gibt die Cache-Zeile an einen zweiten Prozessor ansprechend auf das Schnüffeln frei. Die CohQ 301 ähnelt einer Fern- Lesewarteschlange von einem zweiten Prozessor.
Die EvictQ 302 löscht eine Cache-Zeile aus dem DRAM. Abhängig vom Status der Cache-Zeile kann die EvictQ 302 die Daten (für gemeinsame oder private Leerdaten) aussortieren, oder die EvictQ 302 sendet eine verschmutzte, private Cache-Zeile zum Hauptspeicher oder einem anfragenden Prozessor zurück. In beiden Fällen macht die EvictQ 302 im Sekundär-Cache Platz für nachfolgende Daten. Typischerweise kooperiert die EvictQ 302 mit der Etiketten-Pipeline 107 und dem Etiketten-RAM 108, um die älteste Cache-Zeile aus dem Sekundär-Cache zu spülen.
Das System von Fig. 3 umfaßt drei separate, spezialisierte Lesewarteschlangen in Form der ReadQ 101, CohQ 301 und EvictQ 302, weil das Gesamtverhalten des Systems direkt an die Zeit gebunden ist, die erforderlich ist, um die Lese- Aktionen von einem Prozessor zu bedienen. Sowohl die ReadQ 101 als auch die CohQ 301 können, wenn die Lese-Aktionen nicht umgehend ausgeführt werden, bewirken, daß ein Prozessor seine Gesamtbetriebsgeschwindigkeit verringert. Die EvictQ 302 wird verwendet, um alte Cache-Zeilen, die nicht mehr benötigt werden, zurück zum Hauptspeicher zu schieben, um die Speicherung von zusätzlichen Cache-Zeilen zu ermöglichen. Indem jeder der Lese-Aktionen eine separate Warteschlange gewidmet wird, wird das Gesamtsystemverhalten verbessert.
Die CohQ 301 von Fig. 3 kann zwei Adressen und zwei Datenleitungen beinhalten, während die EvictQ 302 vier Adressen und vier Datenleitungen beinhalten kann. Die Anzahl von Adressen und die Anzahl von Datenleitungen sind vom Verhalten, das von der Sekundär-Cache-Struktur gewünscht ist, abhängig. Während die Anzahl von Adressen und die Anzahl von Datenleitungen, die gespeichert sind, erhöht wird, erhöht sich das Gesamtverhalten des Systems.
Die Warteschlangenarchitektur, die in Fig. 3 gezeigt ist, ermöglicht der eingehenden Transaktionsrate, vorübergehend die Rate zu übertreffen, mit der die eingehenden Transaktionen verarbeitet werden können. In anderen Worten können zu einem bestimmten Zeitpunkt mehrere Anforderungen ausstehen. Diese ausstehenden Anforderungen werden in den Adreßwarteschlangen von ReadQ 101, CohQ 301, EvictQ 302 und WriteQ 102 gespeichert. Die separaten, unterscheidbaren Warteschlangen werden für die verschiedenen Transaktionen verwendet, um kritischeren Transaktionen eine höhere Priorität einzuräumen. Wenn mehrere ausstehende Anforderungen innerhalb einer bestimmten Warteschlange vorhanden sind, werden sie in der Reihenfolge, in der sie empfangen wurden, bedient. Die ausstehenden Anforderungen innerhalb einer bestimmten Warteschlange können jedoch nicht sequentiell bedient werden, da die Abhängigkeiten zwischen den Warteschlangen eine ausstehende Transaktion in einer weiteren Warteschlange erfordern können, um gegenüber der Bedienung der nächsten ausstehenden Anforderungen in der vorhandenen Warteschlange Priorität zu erlangen. Die Abhängigkeiten werden in einer Abhängigkeitslogik gesammelt.
Fig. 4 zeigt die Struktur der Adressen für die verschiedenen Warteschlangen von Fig. 3. Die in den Adressen der verschiedenen Warteschlangen gespeicherten Adressen sind im Hinblick auf den DRAM 113 und nicht auf die Cache-Zeilen-Adresse aus dem Hauptspeicher. Wie in Fig. 2 beschrieben ist, wird eine Speicheradresse im DRAM 113 durch einen Index und einen Weg identifiziert, wobei der Index von 0 bis 65.536 und der Weg von 0 bis 3 variiert. Für den Zweck von Fig. 4 bis 7 wird die Speicheradresse des DRAMs 113 durch geordnete Paare der Form (x, y) identifiziert, wobei x den Indexwert und y den Wegewert darstellt. Zum Beispiel würde (5, 3) eine Cache-Zeile darstellen, die bei einem Indexwert von 5 und einem Weg 3 gespeichert ist. Wie zuvor erörtert wurde, werden mehrere ausstehende Anforderungen, die in einer spezifischen Warteschlange vorhanden sind, in der Reihenfolge verarbeitet, in der sie empfangen wurden. Wenn eine Lese- Aktion für (10, 1) zuerst empfangen werden würde, der eine Lese-Aktion für (11, 2) folgte, der eine Lese-Aktion für (3, 0) folgte, und jede dieser Anforderungen ausstehend wäre, würde die ReadQ-Adresse 103 erscheinen, wie in Fig. 4 dargestellt ist. Ohne die Transaktionen, die in den anderen Warteschlangen anstehen, würde die Lese-Aktion 401 zuerst bedient werden, die Lese-Aktion 402 als nächstes bedient werden und schließlich die Lese-Aktion 403 als letztes verarbeitet werden.
Fig. 5 zeigt die Struktur der Adressen, wenn die Transaktionen in der CohQ und der ReadQ anstehen. Die Bezeichnung "T" zeigt die Zeitsequenz an, mit der die Anforderungen durch die Etiketten-Pipeline 107 empfangen und verarbeitet wurden. In Fig. 5 wurde zum Zeitpunkt T1 eine Lese-Aktion (10, 1) empfangen, der eine Kohärenz (5, 1) zum Zeitpunkt T2 folgte, der eine Lese-Aktion (11, 2) zum Zeitpunkt T3 folgte, dem eine Kohärenz (7, 2) zum Zeitpunkt T4 folgte, der eine Lese-Aktion (3, 0) zum Zeitpunkt T5 folgte. Vorzugsweise erlangt eine ausstehende Kohärenzanforderung gegenüber einer ausstehenden Anforderung in einer beliebigen der anderen drei Warteschlangen (ReadQ, EvictQ oder WriteQ) Priorität. Wenn jede der Transaktionen, die in Fig. 5 identifiziert sind, ausstünde und nicht begonnen hätte, würde die Kohärenz (5, 1) 501 vor der Lese-Aktion (10, 1) 502 zuerst bedient werden, selbst wenn die Lese-Aktion (10, 1) 502 zuerst empfangen wurde. Zusätzlich, da die ausstehenden Transaktionen in der Kohärenzwarteschlange gegenüber den ausstehenden Transaktionen in den anderen Warteschlangen Priorität besitzen, würden ausstehende Kohärenztransaktionen (7, 2) 503 ebenfalls vor der Lese- Aktion (10, 1) 502 bedient werden. Sobald jede der ausstehenden Kohärenztransaktionen bedient wurde, würden die drei ausstehenden Leseanforderungen der Reihe nach ausgeführt werden.
Fig. 6 zeigt die Struktur der Adressen, wenn die Transaktionen in der ReadQ, EvictQ und WriteQ anstehen. In Fig. 6 wurde zum Zeitpunkt T1 eine Lese-Aktion (10, 1) empfangen, der eine Räum-Aktion (13, 0) zum Zeitpunkt T2 folgte, der eine Schreib-Aktion (5, 1) zum Zeitpunkt T3 folgte, der eine Schreib-Aktion (7, 2) zum Zeitpunkt T4 folgte, der eine Schreib-Aktion (8, 0) zum Zeitpunkt T5 folge, der eine Lese-Aktion (11, 2) zum Zeitpunkt T6 folgte.
Vorzugsweise erlangt, abgesehen von einer Aktion auf dem identischen Abschnitt des DRAMs 113, eine Lese-Aktion gegenüber einer Schreib-Aktion Priorität. Wenn jede der Transaktionen, die in Fig. 6 identifiziert sind, ausstehend wäre, würde die Lese-Aktion (10, 1) zuerst auftreten, gefolgt von der Lese-Aktion (11, 2). Da die Räum-Aktion ein spezifischer Typ von Lese-Aktion ist, träte die Räum-Aktion (13, 0) an dritter Stelle auf, der die drei Schreibanforderungen der Reihe nach folgten.
Fig. 7A zeigt die Struktur der Adressen, wenn die Transaktionen in der ReadQ und der WriteQ anstehen und derselbe Speicherabschnitt des DRAMs 113 betroffen ist. In Fig. 7A wurde zum Zeitpunkt T1 eine Lese-Aktion (5, 0) empfangen, der eine Schreib-Aktion (6, 1) zum Zeitpunkt T2 folgte, der eine Schreib-Aktion (9, 0) zum Zeitpunkt T3 folgte, der eine Lese-Aktion (7, 1) zum Zeitpunkt T4 folgte, der eine Schreib-Aktion (10, 0) zum Zeitpunkt T5 folgte, der eine Lese-Aktion (9, 0) zum Zeitpunkt T6 folgte, der eine Lese-Aktion (11, 2) zum Zeitpunkt T7 folgte, der eine Lese-Aktion (15, 0) zum Zeitpunkt T8 folgte. Wie im Hinblick auf Fig. 5 beschrieben ist, geschehen Lese-Aktionen vorzugsweise vor Schreib-Aktionen, solange kein Konflikt besteht, d. h. solange die Operationen nicht in dieselbe Speicherstelle des DRAMs 113 involvieren. Wenn jedoch dieselbe Speicherstelle des DRAMs 113 betroffen ist, muß die Operation, die an dieser Speicherstelle zuerst angefordert wurde, geschehen, bevor die Operation, die als zweites angefordert wurde, an dieser Speicherstelle ausgeführt wird. In anderen Worten muß, im Hinblick auf Fig. 7A, die Schreib-Aktion (9, 0), die zum Zeitpunkt T3 geschah, geschehen, bevor die Lese-Aktion (9, 0), die zum Zeitpunkt T5 geschah, stattfindet. Diese Sequenzierung wird durch Überprüfen möglicher Abhängigkeiten erreicht, wenn eine Transaktion angefordert wird, und, wenn eine Abhängigkeit identifiziert wird, wodurch sichergestellt wird, daß die abhängige Transaktion vor der Transaktion erreicht wird, die die Abhängigkeit bewirkte.
Zum Zeitpunkt T1, als die Lese-Aktion (5, 0) empfangen wurde, gab es keine ausstehenden Transaktionen in keiner der Warteschlangen, so daß keine Abhängigkeit identifiziert wurde. Zum Zeitpunkt T2, als die Schreib-Aktion (6, 1) empfangen wurde, gab es keine weiteren Transaktionen, die den Speicherplatz (6, 1) des DRAMs 113 betrafen, so daß daher keine Abhängigkeiten identifiziert wurden. In ähnlicher Weise wurde zum Zeitpunkt T3, als die Schreib- Aktion (9, 0) empfangen wurde, jede ausstehende Transaktion überprüft und es wurden keine Abhängigkeiten identifiziert, weil keine ausstehende Transaktion den Speicherplatz (9, 0) des DRAM 113 betraf. Zum Zeitpunkt T4 wurde die Lese-Aktion (7, 1) empfangen, und es wurde erneut keine Abhängigkeit identifiziert. Zum Zeitpunkt T5 wird die Schreib-Aktion (10, 0) angefordert, die erneut mit keiner der ausstehenden Transaktionen in Konflikt steht. Zum Zeitpunkt T6, wenn jedoch die Anforderung von der Etiketten-Pipeline 107 nach Abhängigkeiten überprüft wird, wird die Schreib-Aktion (9, 0) identifiziert und eine Abhängigkeit wird eingerichtet, die erfordern wird, daß der jüngste Eintrag in die WriteQ, die die Abhängigkeit involviert, beendet werden muß, bevor die Lese-Aktion (9, 0) bedient wird. Bei diesem Beispiel wird die Lese-Aktion (5, 0) zuerst bedient, der eine Lese- Aktion (7, 1) folgt, der eine Schreib-Aktion (6, 1) folgt, der eine Schreib-Aktion (9, 0) folgt, der eine Schreib- Aktion (10, 0) folgt, der eine Lese-Aktion (9, 0) folgt, der eine Lese-Aktion (11, 2) folgt, der eine Lese-Aktion (15, 0) folgt. Durch Bedienen der Schreib-Aktion (9, 0) vor der Lese-Aktion (9, 0) stellt das System sicher, daß die letzte Cache-Zeile für (9, 0) durch die Lese-(9, 0)- Transaktion empfangen wird.
Fig. 7B zeigt ein Beispiel der Abhängigkeitsauswahl, wenn mehrere Adreßabhängigkeiten existieren. Bei diesem Beispiel wird davon ausgegangen, daß die Transaktionen T1, T2, T3, T4 und T5 in der ReadQ anstehen, wenn zum Zeitpunkt T6 eine Schreib-Aktion von (10, 0) in die WriteQ eingebracht wird. Wenn die (10, 0) Schreib-Aktion 701 in den WriteQ-Schlitz 101 eingebracht wird, wird seine Adresse mit allen gültigen Einträgen in die ReadQ verglichen. Die Schlitze 3 702 und 5 703 stimmen beide überein, so daß die Abhängigkeiten dahingehend existieren, daß der ReadQ-Schlitz 3 702 vor dem WriteQ-Schlitz 1 701 ausgeführt werden muß und der ReadQ- Schlitz 5 703 vor dem WriteQ-Schlitz 1 701 ausgeführt werden muß. Das System muß diese beiden Abhängigkeiten jedoch nicht verfolgen. Es ist ausreichend, nur die Abhängigkeit bezüglich der "jüngsten" Lese-Aktion, die in die Abhängigkeit involviert ist, aufzuzeichnen, da innerhalb der ReadQ eine implizite Priorität besteht, stets die älteste Transaktion zuerst zu verarbeiten. Der ReadQ- Schlitz 3 702 muß vor dem ReadQ-Schlitz 5 703 ausgeführt werden. Wenn der WriteQ-Schlitz 1 701 nur eine Abhängigkeit bezüglich des ReadQ-Schlitzs 5 703 aufzeichnet, wird daher die Abhängigkeit vom ReadQ-Schlitz 3 702 implizit erfüllt.
Fig. 7C zeigt ein Beispiel, das konzipiert ist, um die rotierende oder Umbruchbeschaffenheit der Q-Strukturen hervorzuheben und zu zeigen, wie die Abhängigkeitsprüfung beeinträchtigt wird. Für dieses Beispiel geht man davon aus, daß die Transaktionen zu den Zeitpunkten T1, T2, T3, T4, T5, T6, T7 und T8 alle zusammen Lese-Aktionen waren und jeweils in den ReadQ-Schlitzen 1 bis 8 gehalten wurden. Dann werden die Transaktionen, die in den ReadQ-Schlitzen 1 bis 4 zurückgehalten wurden, beendet und aus der ReadQ entfernt. Die nächste Lese-Transaktion wird in den ReadQ- Schlitz 1 704 plaziert, die als (14, 0) T9 gezeigt ist. Es ist zu beachten, daß die Transaktion T9 im Schlitz 1 immer noch "jünger" ist als die Transaktionen in den Schlitzen 5 bis 8. Zusätzliche Leseanforderungen T10 und T11 werden dann in die ReadQ-Schlitze 2 und 3 gesetzt. Der Schlitz, wo eine neue Transaktion plaziert ist, wird durch den ReadQ- Einbringungszeiger gesteuert. Dabei handelt es sich um einen rotierenden Zeiger in dem Sinne, daß nach dem Einbringen einer Transaktion in den Schlitz 8 sich der Zeiger herumwickelt und auf den Schlitz 1 für die nächste Einbringung zeigt. Infolgedessen hängt die Priorität oder das "Alter" einer Transaktion sowohl von ihrer Schlitzanzahl als auch vom Wert des ReadQ- Einbringungszeigers ab.
Unter Fortsetzung des Beispiels kommt eine Schreib-Aktion an (10, 0) 705 zum Zeitpunkt T12 an. Wenn die Schreib- Aktion (10, 2) T12 in den WriteQ-Schlitz 1 705 eingegeben wird, wird seine Adresse mit der Adresse der ReadQ-Einträge verglichen, um Abhängigkeiten herauszufinden. In diesem Fall weisen der Schlitz 3 706 und der Schlitz 5 707 Adreßübereinstimmungen auf, so daß eine Abhängigkeit zwischen dem ReadQ-Schlitz 3 706 und dem WriteQ-Schlitz 1 705 besteht und eine Abhängigkeit zwischen dem ReadQ- Schlitz 5 707 und dem WriteQ-Schlitz 1 705 existiert. Man beachte, daß dies gleichen Abhängigkeiten sind, die in Fig. 7B existierten, jedoch ist nun der Eintrag in den Schlitz 3 706 der jüngste aufgrund der rotierenden Eigenart der ReadQ. Daher markiert sich der Eintrag in den WriteQ- Schlitz 1 705 selbst als vom ReadQ-Schlitz 3 706 abhängig. Die Abhängigkeit vom ReadQ-Schlitz 5 707 wird durch die Tatsache, daß die ReadQ ihren Schlitz 5 707 vor dem Schlitz 3 706 ausführen muß, implizit gehandhabt. Ein Fachmann mit Durchschnittsqualifikation würde verstehen, daß die Erfindung andere Kombinationen von Adreßschlitzen und Numerierungsschemata umfaßt.
Fig. 8 ist eine Tabelle, die die Abhängigkeitslogikprioritäten zwischen den verschiedenen Warteschlangen darstellt. Eine Spalte 801 identifiziert eine Warteschlange, die die erste ausstehende Anforderung empfängt. Eine Reihe 802 identifiziert die Warteschlange, die die zweite ausstehende Anforderung für eine Operation oder Transaktion auf der gleichen Speicheradresse empfängt. Der Inhalt der Tabelle zeigt die resultierenden Abhängigkeiten an. Diagonale Zellen 803, 804, 805 und 806 beschreiben zwei ausstehende Transaktionen in der gleichen Warteschlange. Wie zuvor beschrieben wurde, wenn zwei ausstehende Anforderungen in der gleichen Warteschlange enthalten sind, werden die angeforderten Transaktionen in der Reihenfolge, in der sie empfangen werden, ausgeführt. Die Zellen 807, 808, 809, 810, 811 und 812 sind Situationen, in denen eine erste anstehende Transaktion eine Lese-Aktion und eine zweite anstehende Transaktion eine Schreib-Aktion involviert. Da die Lese-Aktionen nicht destruktiv sind, sind diese Zellen als Gleichgültige (DC; DC = don't care) etikettiert, d. h. die Transaktionen können in einer beliebigen Reihenfolge durchgeführt werden. Wie jedoch zuvor beschrieben wurde, wird eine ausstehende Transaktion in einer Kohärenzwarteschlange immer zuerst durch eine Priorität bedient, und daher ist keine Abhängigkeit notwendig.
Wie in Fig. 8 dargestellt ist, beschreibt die Zelle 813 die Abhängigkeit, die erforderlich ist, wenn eine Schreib- Aktion an einen spezifischen Speicherplatz des DRAMs 113 vor einer Lese-Aktion an denselben Speicherplatz des DRAMs 113 auftritt. In diesem Fall sollte die Schreib-Aktion vor der Lese-Aktion geschehen. Die Abhängigkeit wird gehandhabt, indem sichergestellt wird, daß die jüngste, übereinstimmende, ausstehende Transaktion in der Schreibwarteschlange (als die Leseanforderung empfangen wurde) vor der Bedienung eines ausstehenden Eintrags in die Lesewarteschlange bedient wird. Weitere Abhängigkeitsalgorithmen können in ähnlicher Weise implementiert werden.
Die Zelle 814 von Fig. 8 zeigt die umgekehrte Situation. Darin wird eine übereinstimmende Transaktion zum Lesen einer speziellen Speicheradresse des DRAMs 113 vor einer ausstehenden Transaktion zum Schreiben an die Speicheradresse desselben spezifischen DRAMs 113 empfangen. In diesem Fall wird eine Abhängigkeit eingerichtet, die sicherstellt, daß die Lese-Aktion vor der Schreib-Aktion geschieht. Vorzugsweise wird die Abhängigkeit gehandhabt, indem sichergestellt wird, daß die jüngste, übereinstimmende, ausstehende Transaktion in der Lesewarteschlange (als die Schreibanforderung empfangen wurde) vor dem Bedienen des ausstehenden Eintrags in die Schreibwarteschlange bedient wird.
Eine Zelle 815 von Fig. 8 beschreibt die Abhängigkeit, die erforderlich ist, wenn eine Schreib-Aktion an einen spezifischen Speicherplatz des DRAMs 113 vor einer Kohärenzanforderung an denselben spezifischen Speicherplatz des DRAMs 113 geschieht. In diesem Fall sollte die Schreib- Aktion vor der Kohärenz geschehen. Vorzugsweise wird die Abhängigkeit gehandhabt, indem sichergestellt wird, daß die jüngste, übereinstimmende, ausstehende Transaktion in der Schreibwarteschlange (als die Kohärenzanforderung empfangen wurde) vor der Bedienung des ausstehenden Eintrags in die Kohärenzwarteschlange bedient wird.
Eine Zelle 816 von Fig. 8 zeigt die umgekehrte Situation. In der Zelle 816 wird eine ausstehende Kohärenztransaktion für eine spezifische Speicheradresse des DRAMs 113 vor einer ausstehenden Transaktion zum Schreiben derselben spezifischen Speicheradresse des DRAMs 113 empfangen. In diesem Fall stellt die Priorität, die sicherstellt, daß die Kohärenztransaktion vor der Schreibtransaktion geschieht, die richtige Sequenzierung der Transaktionen sicher.
Eine Zelle 817 von Fig. 8 beschreibt die Abhängigkeit, die erforderlich ist, wenn eine Schreib-Aktion an einen spezifischen Speicherplatz des DRAMs 113 vor einer EvictQ- Anforderung an den gleichen spezifischen Speicherplatz des DRAMs 113 geschieht. In diesem Fall sollte die Schreib- Aktion vor der Räum-Aktion geschehen. Vorzugsweise wird die Abhängigkeit gehandhabt, indem sichergestellt wird, daß die jüngste, übereinstimmende, ausstehende Transaktion in der Schreibwarteschlange (als die Räumungsanforderung empfangen wurde) vor dem Bedienen des ausstehenden Eintrags in die Räumungswarteschlange bedient wird.
Eine Zelle 818 von Fig. 8 zeigt die umgekehrte Situation. In der Zelle 818 wird eine ausstehende Räumungstransaktion für eine spezifische Speicheradresse des DRAMs 113 vor einer ausstehenden Transaktion zum Schreiben derselben spezifischen Speicheradresse des DRAMs 113 empfangen. In diesem Fall sollte die Räumungstransaktion vor der Schreibtransaktion geschehen, um sicherzustellen, daß die Cache-Zeile, die sich momentan am Platz des DRAMs 113 befindet, nicht durch die Schreibtransaktion überschrieben wird. Die Abhängigkeit wird gehandhabt, indem sichergestellt wird, daß die jüngste, übereinstimmende, ausstehende Transaktionen in der Räumungswarteschlange (als die Schreibwarteschlange empfangen wurde) vor dem Bedienen des ausstehenden Eintrags auf die Schreibwarteschlange bedient wird.

Claims (18)

1. Speicherentscheidungsvorrichtung, die folgende Merkmale aufweist:
eine Lese-Warteschlange (101), die ein Register für jeden Eintrag umfaßt, um Adressen von jeweiligen anstehenden Lese-Anforderungen zu speichern;
eine Schreib-Warteschlange (102), die ein Register für jeden Eintrag umfaßt, um Adressen von anstehenden Schreibe-Anforderungen zu speichern; und
eine Abhängigkeitslogik zum Einrichten von Prioritäten von Operationen zwischen der anstehenden Lese-Warteschlange (101) und der anstehenden Schreib-Warteschlange (102).
2. Speicherentscheidungsvorrichtung gemäß Anspruch 1, bei der: die Abhängigkeitslogik die anstehenden Lese- Anforderungen gegenüber den anstehenden Schreibe- Anforderungen priorisiert.
3. Speicherentscheidungsvorrichtung gemäß Anspruch 1 oder 2, bei der: die Abhängigkeitslogik anstehende Lese-Anforderungen und anstehende Schreib-Anforderungen identifiziert, die einen gemeinsamen Speicherplatz (113) betreffen, und bei der die Abhängigkeitslogik eine Abhängigkeitsbeziehung, die zum Sequenzieren der anstehenden Anforderungen, die den gemeinsamen Speicherplatz (113) betreffen, verwendet wird, einrichtet.
4. Speicherentscheidungsvorrichtung gemäß Anspruch 3, bei der der Speicherplatz (113) ein Speicherplatz eines DRAMs ist.
5. Speicherentscheidungsvorrichtung gemäß Anspruch 3, bei der der Speicherplatz (113) ein Speicherplatz eines SRAMs ist.
6. Speicherentscheidungsvorrichtung gemäß einem der Ansprüche 3 bis 5, bei der die Abhängigkeit eine älteste, anstehende Anforderung favorisiert.
7. Speicherentscheidungsvorrichtung gemäß einem der Ansprüche 1 bis 6, die ferner konfiguriert ist, um Operationen eines Cache-Speichers zu unterstützen, der folgende Merkmale aufweist:
eine Kohärenz-Warteschlange (301), die ein Register für jeden Eintrag umfaßt, um Adressen von jeweiligen anstehenden Kohärenz-Anforderungen (301) zu speichern; und
eine Räumungs-Warteschlange (302), die ein Register für jeden Eintrag umfaßt, um Adressen von jeweiligen anstehenden Räumungs-Anforderungen (302) zu speichern;
wobei die Abhängigkeitslogik Prioritäten zwischen den anstehenden Lese-Anforderungen, den anstehenden Schreib-Anforderungen, den anstehenden Kohärenz- Anforderungen und den anstehenden Räumungs- Anforderungen einrichtet.
8. Speicherentscheidungsvorrichtung gemäß Anspruch 7, bei der: die Abhängigkeitslogik die anstehenden Lese- Anforderungen gegenüber den anstehenden Schreib- Anforderungen priorisiert.
9. Speicherentscheidungsvorrichtung gemäß Anspruch 7, bei der: die Abhängigkeitslogik anstehende Lese-Anforderungen und anstehende Schreib-Anforderungen, die einen gemeinsamen Speicherplatz (113) betreffen, identifiziert und bei der die Abhängigkeitslogik eine Abhängigkeit einrichtet, die die anstehenden Anforderungen, die den gemeinsamen Speicherplatz (113) betreffen, sequenziert.
10. Speicherentscheidungsvorrichtung gemäß Anspruch 9, bei der der Speicherplatz (113) ein Speicherplatz eines DRAMs ist.
11. Speicherentscheidungsvorrichtung gemäß Anspruch 9, bei der der Speicherplatz (113) ein Speicherplatz eines SRAMs ist.
12. Speicherentscheidungsvorrichtung gemäß Anspruch 9, bei der die Abhängigkeit eine anstehende Anforderung favorisiert.
13. Speicherentscheidungsvorrichtung, die folgende Merkmale aufweist:
eine Lese-Warteschlange (101), die ein Register für jeden Eintrag umfaßt, um Adressen von jeweiligen anstehenden Lese-Anforderungen zu speichern;
eine Schreib-Warteschlange (102), die ein Register für jeden Eintrag umfaßt, um Adressen von jeweiligen anstehenden Schreib-Anforderungen zu speichern;
eine Kohärenz-Warteschlange (301), die ein Register für jeden Eintrag umfaßt, um Adressen von jeweiligen anstehenden Kohärenz-Anforderungen zu speichern;
eine Räumungs-Warteschlange (302), die ein Register für jeden Eintrag umfaßt, um Adressen von jeweiligen anstehenden Räumungs-Anforderungen zu speichern; und
eine Abhängigkeitslogik, die konfiguriert ist, um Betriebsprioritäten zwischen den anstehenden Lese-, Schreib-, Kohärenz- und Räumungs-Anforderungen einzurichten.
14. Speicherentscheidungsvorrichtung gemäß Anspruch 13, bei der die Abhängigkeitslogik Abhängigkeiten zwischen anstehenden Lese-, Schreib-, Kohärenz- und Räumungsanforderungen einrichtet.
15. Verfahren zum Steuern eines Zugriffs auf einen Cache, wobei das Verfahren folgende Schritte aufweist:
Warteschlangenbildung von anstehenden Lese- Anforderungen;
Warteschlangenbildung von anstehenden Schreibe- Anforderungen; und
Priorisieren einer Reihenfolge der anstehenden Lese- Anforderungen und der anstehenden Schreib- Anforderungen.
16. Verfahren gemäß Anspruch 15, bei dem der Schritt des Priorisierens die Lese-Anforderung gegenüber den Schreib-Anforderungen priorisiert.
17. Verfahren gemäß Anspruch 15 oder 16, das ferner folgenden Schritt aufweist: Erzeugen von Abhängigkeiten für anstehende Anforderungen, die einen gemeinsamen Speicherplatz (113) betreffen.
18. Verfahren gemäß einem der Ansprüche 15 bis 17, bei dem der Schritt des Erzeugens von Abhängigkeiten die erste angeforderte Transaktion gegenüber einer später angeforderten Transaktion priorisiert.
DE10219623A 2001-05-10 2002-05-02 System und Verfahren zur Speicherentscheidung unter Verwendung von mehreren Warteschlangen Ceased DE10219623A1 (de)

Applications Claiming Priority (1)

Application Number Priority Date Filing Date Title
US09/853,951 US20020169935A1 (en) 2001-05-10 2001-05-10 System of and method for memory arbitration using multiple queues

Publications (1)

Publication Number Publication Date
DE10219623A1 true DE10219623A1 (de) 2002-11-21

Family

ID=25317322

Family Applications (1)

Application Number Title Priority Date Filing Date
DE10219623A Ceased DE10219623A1 (de) 2001-05-10 2002-05-02 System und Verfahren zur Speicherentscheidung unter Verwendung von mehreren Warteschlangen

Country Status (2)

Country Link
US (1) US20020169935A1 (de)
DE (1) DE10219623A1 (de)

Cited By (1)

* Cited by examiner, † Cited by third party
Publication number Priority date Publication date Assignee Title
US10078592B2 (en) 2004-09-09 2018-09-18 Intel Corporation Resolving multi-core shared cache access conflicts

Families Citing this family (24)

* Cited by examiner, † Cited by third party
Publication number Priority date Publication date Assignee Title
US7127559B2 (en) * 2001-07-10 2006-10-24 Micron Technology, Inc. Caching of dynamic arrays
US7062761B2 (en) 2001-07-10 2006-06-13 Micron Technology, Inc. Dynamic arrays and overlays with bounds policies
US20030088744A1 (en) * 2001-11-06 2003-05-08 Infineon Technologies Aktiengesellschaft Architecture with shared memory
US20050071574A1 (en) * 2001-11-06 2005-03-31 Rudi Frenzel Architecture with shared memory
US7032077B2 (en) * 2002-12-23 2006-04-18 Hewlett-Packard Development Company, L.P. Multiple cache coherency
US7149829B2 (en) 2003-04-18 2006-12-12 Sonics, Inc. Various methods and apparatuses for arbitration among blocks of functionality
US7296105B2 (en) * 2003-10-03 2007-11-13 Sonics, Inc. Method and apparatus for configuring an interconnect to implement arbitration
US7739436B2 (en) * 2004-11-01 2010-06-15 Sonics, Inc. Method and apparatus for round robin resource arbitration with a fast request to grant response
US20060129764A1 (en) * 2004-12-09 2006-06-15 International Business Machines Corporation Methods and apparatus for storing a command
US7418543B2 (en) * 2004-12-21 2008-08-26 Intel Corporation Processor having content addressable memory with command ordering
US7870545B2 (en) * 2005-12-16 2011-01-11 Intel Corporation Protecting shared variables in a software transactional memory system
US20080082755A1 (en) * 2006-09-29 2008-04-03 Kornegay Marcus L Administering An Access Conflict In A Computer Memory Cache
US20080201531A1 (en) * 2006-09-29 2008-08-21 Kornegay Marcus L Structure for administering an access conflict in a computer memory cache
US20080282050A1 (en) * 2007-05-07 2008-11-13 On Demand Microelectronics Methods and arrangements for controlling memory operations
US8583865B1 (en) * 2007-12-21 2013-11-12 Emc Corporation Caching with flash-based memory
US8549209B2 (en) * 2008-11-04 2013-10-01 Mosaid Technologies Incorporated Bridging device having a configurable virtual page size
US8904115B2 (en) * 2010-09-28 2014-12-02 Texas Instruments Incorporated Cache with multiple access pipelines
US9632947B2 (en) * 2013-08-19 2017-04-25 Intel Corporation Systems and methods for acquiring data for loads at different access times from hierarchical sources using a load queue as a temporary storage buffer and completing the load early
US9665468B2 (en) 2013-08-19 2017-05-30 Intel Corporation Systems and methods for invasive debug of a processor without processor execution of instructions
CN105980978B (zh) * 2014-12-13 2019-02-19 上海兆芯集成电路有限公司 用于检测暂停的逻辑分析器
EP3047380B1 (de) * 2014-12-13 2019-04-24 VIA Alliance Semiconductor Co., Ltd. Musterdetektor zur erkennung von ausfällen
WO2016092345A1 (en) 2014-12-13 2016-06-16 Via Alliance Semiconductor Co., Ltd. Logic analyzer for detecting hangs
US9697121B2 (en) 2015-09-29 2017-07-04 International Business Machines Corporation Dynamic releasing of cache lines
US11461127B2 (en) * 2019-05-24 2022-10-04 Texas Instruments Incorporated Pipeline arbitration

Cited By (1)

* Cited by examiner, † Cited by third party
Publication number Priority date Publication date Assignee Title
US10078592B2 (en) 2004-09-09 2018-09-18 Intel Corporation Resolving multi-core shared cache access conflicts

Also Published As

Publication number Publication date
US20020169935A1 (en) 2002-11-14

Similar Documents

Publication Publication Date Title
DE10219623A1 (de) System und Verfahren zur Speicherentscheidung unter Verwendung von mehreren Warteschlangen
DE69721643T2 (de) Multiprozessorsystem ausgestaltet zur effizienten Ausführung von Schreiboperationen
DE69722079T2 (de) Ein Mehrrechnersystem mit Anordnung zum Durchführen von Blockkopieroperationen
DE69722512T2 (de) Mehrrechnersystem mit einem die Anzahl der Antworten enthaltenden Kohärenzprotokoll
DE102009023898B4 (de) Optimierung von gleichzeitigen Zugriffen in einem verzeichnisbasierten Kohärenzprotokoll
DE69724354T2 (de) Ein Mehrprozessorrechnersystem mit lokalen und globalen Adressräumen und mehreren Zugriffsmoden
DE69721640T2 (de) Multiprozessor-Rechnersystem und Verfahren zur Steuerung des Verkehrsflusses
DE10262164B4 (de) Computersystem mit einer hierarchischen Cacheanordnung
DE60222402T2 (de) Verfahren und system zur spekulativen ungültigkeitserklärung von zeilen in einem cachespeicher
DE102009022151B4 (de) Verringern von Invalidierungstransaktionen aus einem Snoop-Filter
DE69233655T2 (de) Mikroprozessorarchitektur mit der Möglichkeit zur Unterstützung mehrerer verschiedenartiger Prozessoren
DE102007052853B4 (de) Zeilentauschschema zur Verringerung von Rückinvalidierungen in einem Snoopfilter
DE69724353T2 (de) Mehrrechnersystem mit einem Drei-Sprung-Kommunikationsprotokoll
DE69733374T2 (de) Speichersteuerungsvorrichtung und -system
DE102007048507B4 (de) Cache-Speichersystem und Verfahren zum Bereitstellen eines Transaktionsspeichers
DE112005002180T5 (de) Lösen von Cachekonflikten
DE3621321A1 (de) Cache-speicher- bzw. multiprozessor-system und betriebsverfahren
DE102008062044B4 (de) 1Speicherinterne, seiteninterne Verzeichnis-Chache-Kohärenz-Konfiguration
DE10219621A1 (de) Schnelle Prioritätsbestimmungsschaltung mit rotierender Priorität
DE19516937A1 (de) Hierarchisches Cachesystem für einen Computer
DE3102150A1 (de) "schaltungsanordnung mit einem cachespeicher fuer eine zentraleinheit einer datenverarbeitungsanlage
DE2841041A1 (de) Datenverarbeitungsanlage mit mindestens zwei mit einem schnellen arbeitsspeicher ausgeruesteten prozessoren
DE102007030116A1 (de) Snoop-Filter mit ausschließlicher Inhaberschaft
DE69937611T2 (de) Intelligenter Puffer-Speicher
DE102006030879A1 (de) System zum Reduzieren der Latenzzeit von exklusiven Leseanforderungen in einem symmetrischen Multiprozessorsystem

Legal Events

Date Code Title Description
OP8 Request for examination as to paragraph 44 patent law
8131 Rejection