DE69721961T2 - Mikroprozessor mit einem Nachschreibcachespeicher - Google Patents

Mikroprozessor mit einem Nachschreibcachespeicher Download PDF

Info

Publication number
DE69721961T2
DE69721961T2 DE69721961T DE69721961T DE69721961T2 DE 69721961 T2 DE69721961 T2 DE 69721961T2 DE 69721961 T DE69721961 T DE 69721961T DE 69721961 T DE69721961 T DE 69721961T DE 69721961 T2 DE69721961 T2 DE 69721961T2
Authority
DE
Germany
Prior art keywords
write
cache
entry
cache entry
preemptive
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
DE69721961T
Other languages
English (en)
Other versions
DE69721961D1 (de
Inventor
Jr. Robert D. Marshall
Jonathan H. Shiell
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.)
Texas Instruments Inc
Original Assignee
Texas Instruments 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 Texas Instruments Inc filed Critical Texas Instruments Inc
Application granted granted Critical
Publication of DE69721961D1 publication Critical patent/DE69721961D1/de
Publication of DE69721961T2 publication Critical patent/DE69721961T2/de
Anticipated expiration legal-status Critical
Expired - Lifetime 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/0804Addressing of a memory level in which the access to the desired data or data block requires associative addressing means, e.g. caches with main memory updating

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)

Description

  • TECHNISCHES GEBIET DER ERFINDUNG
  • Die Erfindung bezieht sich allgemein auf das Gebiet der Mikroprozessoren und insbesondere auf Mikroprozessoren, die interne Caches für Daten verwenden.
  • HINTERGRUND DER ERFINDUNG
  • Mikroprozessoren, die in heutigen Personalcomputern verwendet werden, verarbeiten Daten mit sehr hoher Geschwindigkeit. Dies gilt vor allem für superskalare Mikroprozessoren, die mehr als einen Befehl gleichzeitig verarbeiten können. Es ist wirtschaftlich nicht machbar, das gesamte Speichersystem des Computers mit derselben Geschwindigkeit wie den Mikroprozessor zu betreiben. Ferner ist er nicht notwendig, ein solches Speichersystem aufzubauen. Mikroprozessoren verwenden Daten- oder Befehls-Caches auf der Grundlage einer Annahme von Lokalität. Sobald bestimmte Daten oder ein bestimmter Befehl aus dem Hauptspeicher mit einem Verweis versehen worden ist, ist es normalerweise der Fall, auch in nächster Zukunft nahegelegene Daten oder Befehle mit Verweisen zu versehen. Es ist machbar, einen kleinen und schnellen Speicher aufzubauen, der solche Daten oder Befehle vorübergehend speichert. Es ist üblich, Daten in Mindestgrößen, die größer als die kleinste adressierbare Speichergröße sind, aus dem Hauptspeicher abzurufen. Solche Speicherabrufe können über einen Datenbus, der breiter als die kleinste adressierbare Speichergröße ist, oder über Bündel aus mehreren Speicherzugriffen oder über beides erfolgen. Ein solches Abrufen von benachbarten Daten nützt außerdem der Lokalitätsannahme, indem nahegelegene Adressen, die wahrscheinlich in nächster Zukunft mit Verweisen versehen werden, abgerufen werden. Speicher-Caches speichern ihre Daten mit einer Angabe der entsprechenden Hauptspeicheradresse.
  • Jeder Speicherverweis durch den Mikroprozessor wird gegen diese Cache-Adreßangaben geprüft, um festzustellen ob die Adresse, auf die verwiesen wird, im Cache erfaßt ist. Falls die Adresse, auf die verwiesen wird, im Cache gespeichert ist, was als Cache-Treffer bezeichnet wird, findet im Cache, anstatt im Hauptspeicher ein Speicherzugriff statt. Da der Speicherzugriff auf den Cache schneller als ein Zugriff auf den Hauptspeicher ist, stellt jeder Cache-Treffer eine Zunahme der Speicherzugriffsgeschwindigkeit dar. Es sei angemerkt, daß solche Speicherzugriffe sowohl für das Lesen im Speicher als auch für das Schreiben in den Speicher ausgeführt werden können. Falls der Zugriff ein Schreiben ist, erfolgt dieses Schreiben in die Kopie der im Cache gespeicherten Daten. Dieser Cache-Eintrag wird dann als schmutzig markiert. Dies bedeutet, daß er Daten enthält, die sich von den Daten unter der entsprechenden Adresse im Hauptspeicher unterscheiden, und die Cache-Daten dem im laufenden Programm verlangten Zustand entsprechen. Falls die Adresse, auf die verwiesen wird, nicht im Cache gespeichert ist, was als Cache-Fehlschuß bezeichnet wird, muß auf den Hauptspeicher zugegriffen werden. Bei einem Lesezugriff muß die Mikroprozessor-Betriebseinheit, die die Daten benötigt, angehalten werden, bis die Daten von dem langsameren Hauptspeicher zurückschickt worden sind. Wenn diese Hauptspeicherdaten abgerufen worden sind, werden sie sowohl der anfordernden Mikroprozessor-Betriebseinheit zugeführt als auch im Cache gespeichert. Manche Mikroprozessoren erfassen nach einem Cache-Fehlschuß bei einem Schreibzugriff keine Daten im Cache. Diese Mikroprozessoren schreiben lediglich in den Hauptspeicher. In superskalaren Mikroprozessoren werden wahrscheinlich andere nützliche Tasks ausgeführt, während dieses Schreibens in den Hauptspeicher stattfindet. Andere Mikroprozessoren wenden eine Cache- Schreibzuteilungsstrategie an, indem sie nach einem Cache-Fehlschuß bei einem Schreibzugriff Daten abrufen. Die unter der Speicheradresse zu schreibenden Daten werden abgerufen und im Cache gespeichert. Das Schreiben in den Speicher findet dann in den entsprechenden Cache-Ort statt. Dieser Cache-Eintrag wird als schmutzig markiert, was angibt, daß sich der Cache-Eintrag von der Kopie im Hauptspeicher unterscheidet. Eine Schreibzuteilungsstrategie basiert auf der Annahme, daß für ein auf einen fehlgeschlagenen Cache-Schreibzugriff folgendes Lesen oder Schreiben nochmals für kurze Zeit auf den Speicherort zugegriffen werden muß. Falls dies wahr ist, finden die nachträglichen Zugriffe innerhalb des Cache statt und steigern die Speicherzugriffsgeschwindigkeit.
  • Welche Größe der Speicher-Cache auch immer hat, füllt ihn der Mikroprozessor eventuell. Beim nächsten folgenden Cache-Fehlschuß muß ein Cache-Eintrag gelöscht werden, um das Speichern der fehlenden Daten aus dem Hauptspeicher freizugeben. Speicher-Caches verwenden üblicherweise einen Algorithmus "der längsten Nichtverwendung". Zusammen mit der entsprechenden Speicheradresse und einer Angabe, ob der Cache-Eintrag schmutzig ist, muß der Speicher-Cache eine Angabe der letzten Verwendung des Cache-Eintrags speichern. Der zu ersetzende Cache-Eintrag ist der am längsten nichtverwendete Cache-Eintrag. Dies basiert auf den Annahme, daß der längsten nichtverwendete Cache-Eintrag derjenige Eintrag ist, der am wenigsten wahrscheinlich in nächster Zukunft wieder benötigt wird.
  • Dieser Cache-Eintrag-Ersetzungsprozeß beginnt mit einem Cache-Fehlschuß, da die angeforderten Daten nicht im Cache sind. Der Cache-Controller muß bestimmen, welche Cache-Einträge durch die jüngst angeforderten Daten zu ersetzten sind. Wenn der am längsten nichtverwendete Cache-Eintrag sauber ist und genau den Daten im Hauptspeicher entspricht, wird dieser Cache-Eintrag überschrieben. Da der Cache-Eintrag gleich den am entsprechenden Ort im Speicher gespeicherten Daten ist, verändert dieses Überschreiben den Funktionszustand des Programms nicht. Wenn der am längsten nichtverwendete Cache-Eintrag schmutzig ist, enthält der Cache-Eintrag Daten, die sich vom entsprechenden Speicherort unterscheiden. In diesem Fall hält der Cache-Eintrag den Funktionszustand des Programms und wäre ein Überschreiben dieser Daten falsch. Dieser Cache-Eintrag muß geräumt werden, d. h., im Hauptspeicher aufgezeichnet werden, bevor der Cache-Eintrag wiederverwendet werden kann.
  • Die Notwendigkeit, schmutzige Cache-Einträge zu räumen, kann zu einem Anhalten des Mikroprozessors führen. Diese Situation tritt nur nach einem Cache-Fehlschuß ein, der üblicherweise angibt, daß eine Mikroprozessor-Ausführungseinheit Daten benötigt. Diese Situation kann entweder nach einem Lesen im Speicher oder einem Schreiben in den Speicher, falls eine Schreibzuteilungsstrategie angewandt wird, eintreten. Jedoch können die aus dem Hauptspeicher angeforderten Daten nicht gespeichert werden, solange der schmutzige Cache-Eintrag nicht in den Speicher geschrieben ist. Somit fordert der Mikroprozessor neue Daten an, muß jedoch warten, bis alte Daten in den Speicher geschrieben sind, bevor die neue Daten aus dem Speicher abgerufen werden können. Es ist an sich bekannt, einen Rückschreibpuffer bereitzustellen, um dieses Problem zu behandeln. Der Rückschreibpuffer ist ein First-in-First-out-Puffer für Cache-Einträge, die durch Scheduling in den Speicher geschrieben werden. Jeder Eintrag in den Rückschreibpuffer umfaßt die Cache-Eintrag-Daten und die entsprechende Hauptspeicheradresse. Wenn der Speicherbus frei ist, werden die Daten des letzten Eintrags im Rückschreibpuffer an der entsprechenden Adresse in den Hauptspeicher geschrieben. Nach Abschluß dieses Schreibens in den Hauptspeicher wird ein Rückschreibpuffer-Eintrag freigeben, um einen weiteren geräumten Cache-Eintrag zu speichern. Der Rückschreibpuffer verzögert das Freigeben des angeforderten Schreibens in den Speicher bis nach dem Lesen im Speicher. Da eine Mikroprozessor-Betriebseinheit auf den Abschluß des Lesens im Speicher wartet, ermöglicht das Vorangehen des Lesens vor dem Schreiben das Fortsetzen des Mikroprozessorbetriebs nach der Cache-Eintragräumung.
  • Es gibt Gelegenheiten, in denen die Annahme der Lokalität von Verweisen nicht zutrifft. Einer dieser Fälle ist ein Kontextwechsel, wenn der Mikroprozessor von seiner momentanen Task zu einer anderen Task wechselt. Dies kann beim Laden eines neuen Programms, dem Wechseln zwischen Teilen eines einzelnen Programms oder beim Behandeln einer Unterbrechung eintreten. In diesen Fällen wechselt die Speicheroperation von einem ursprünglichen Adressenblock zu einem anderen Adressenblock. Ein solches Wechseln des Speicherverweises erfordert das Holen einer großen Menge von Daten aus dem Hauptspeicher in einer relativ kurzen Zeitperiode. Dies erfordert das Ersetzen eines großen Abschnitts an Inhalten des Speicher-Cache. Somit kann während eines Kontextwechsels das Räumen einer großen Anzahl von schmutzigen Cache-Einträgen erforderlich sein. Ein Rückschreibpuffer verzögert lediglich die Notwendigkeit, in den Speicher zu schreiben. Sobald der Rückschreibpuffer voll ist, muß vor einem angeforderten Lesen im Speicher ein Zurückschreiben eines schmutzigen Cache-Eintrags erfolgen. Bei einem Kontextwechsel tritt diese Situation häufig wiederholt ein, was den Betrieb des Mikroprozessors jedesmal verlangsamt.
  • Das Erweitern der Tiefe des FIFO-Rückschreibpuffers führt zu einer Verringerung dieses Problems. Bei ausreichender Tiefe kann das Zurückschreiben verzögert werden, bis eine neue Task beginnt, im Cache erfaßte Daten mit Verweisen zu versehen. Stets dann, wenn die neue Task einen Cache-Treffer landet, ist kein Speicherbuszyklus erforderlich, um die angeforderten Daten abzurufen. Dies gibt einen Speicherbuszyklus zum Zurückschreiben aus dem Rückschreibpuffer frei. Je größer der Rückschreibpuffer ist, desto wahrscheinlicher ist, daß die Zurückschreibungen verzögert werden, bis ihre erforderlichen Speicherbuszyklen hinter Cache-Treffern versteckt werden können. Jedoch verbraucht der Rückschreibpuffer relativ große Mengen an Fläche in der integrierten Schaltung, die den Mikroprozessor aufnimmt. Jeder Eintrag in den Rückschreibpuffer muß einen vollständigen Cache-Eintrag umfassen, der eine Breite von 46 bit oder 256 bit oder mehr besitzen kann. Jeder Eintrag in den Rückschreibpuffer benötigt außerdem die Anfangsadresse der Daten, die häufig 27 bis 29 bit beträgt. Außerdem wird üblicherweise die Adresse jedes Eintrags im Rückschreibpuffer mit der Adresse jedes Speicherzugriffs verglichen. Das Zurückschreiben von Daten wird im allgemeinen abgebrochen, wenn die Adresse eines Speicherzugriffs mit einer Adresse innerhalb des Rückschreibpuffers übereinstimmt. Eine Übereinstimmung bei einem Lesen im Speicher bedeutet, daß Daten im Rückschreibpuffer von einer Betriebseinheit des Mikroprozessors benötigt werden. Es erspart Zeit, wenn diese Daten aus dem Rückschreibpuffer erhalten werden, anstatt sie in den Hauptspeicher zu schreiben, was einen Cache-Fehlschuß beim Lesezugriff erzeugt, und danach in den Cache zurückzuschreiben. Eine Übereinstimmung bei einem Schreiben in den Speicher bedeutet, daß die Daten im Rückschreibpuffer zu verändern sind. Somit sind die Daten im Rückschreibpuffer die falschen Daten zum Schreiben in den Speicher. Außerdem bedeutet ein Zugriff auf Daten im Rückschreibpuffer in jedem Fall, daß diese Daten nicht mehr die am längsten nichtverwendeten Daten sind. Somit sollte ein anderer Cache-Eintrag als der Cache-Eintrag im Rückschreibpuffer ersetzt werden. Da der Rückschreibpuffer die Mikroprozessor-Ausführungseinheit, die Daten benötigt, anhalten kann, sollten alle diese Vergleiche rechtzeitig abgeschlossen werden, um nach einer Übereinstimmung das schnelle Löschen eines Rückschreibpuffer-Eintrags zu ermöglichen.
  • Dies erfordert eine Menge an paralleler Hardware für die Vergleiche. Wegen dieser Schaltungsumfänge wird die Tiefe des Rückschreibpuffers üblicherweise so festgelegt, daß ein Anhalten der Mikroprozessor-Betriebseinheit während der gewöhnlichen Verarbeitung zumeist verhindert wird, jedoch nicht während Kontextwechseln.
  • Das US-Patent Nr. 4.530.055 offenbart ein hierarchisches Speichersystem, bei dem Cache-Speichersegmente nach einem Algorithmus, der auf dem Alter des Segments seit dem ersten Schreiben basiert, einzeln an den Massenspeicher zurück übergeben werden.
  • IBM Technical Disclosure Bulletin, Bd. 23, Nr. 12, 12. Mai 1981 "Preventive Cast-Outs Operations in Cache Hierarchies" offenbart die Verwendung von präventiven Auslagerungen von modifizierten Cache-Blöcken in den Hauptspeicher, wenn sich der Prozessor in einem seiner unvermeidbaren Wartezustände (z. B. während anstehender E/A-Operationen) befindet.
  • ZUSAMMENFASSUNG DER ERFINDUNG
  • Diese Erfindung sieht ein preemptives Cache-Zurückschreiben in einem Mikroprozessor mit einem internen Cache, wie er in Anspruch 10 dargelegt ist, und ein entsprechendes Verfahren, wie es in Anspruch 1 dargelegt ist, vor. Die Erfindung prüft jeden Cache-Eintrag einmal in jeder vorgegebenen Zeitperiode, um festzustellen, ob der Cache-Eintrag verschmutzt ist. Wenn ein Cache-Eintrag schmutzig ist, prüft sie eine Schreibhistorie, um festzustellen, ob der Cache-Eintrag alt ist. Wenn der Cache-Eintrag alt ist, schreibt sie den Cache-Eintrag preemptiv in den Hauptspeicher und markiert den Cache-Eintrag als sauber.
  • In einer bevorzugten Ausführungsform enthält die Schreibhistorie einen Zählwert für die Anzahl von aufeinanderfolgenden vorgegebenen Zeitperioden, in denen kein Schreiben in den Cache-Eintrag stattfand. Der Cache-Eintrag ist alt, wenn der Zählwert eine vorgegebene Zahl übersteigt. Dieser Nichtschreibzyklus-Zählstand wird bei jedem Beginnen eines Cache-Eintrags auf null gesetzt. Bei jedem Schreiben in den Cache-Eintrag wird ein Schreibbit gesetzt. Bei jeder Prüfung der Schreibhistorie wird ein Nichtschreibzyklus-Zählwert inkrementiert, falls das entsprechende Schreibbit nicht gesetzt ist, und dekrementiert, falls das Schreibbit gesetzt ist. Jede Prüfung der Schreibhistorie setzt das Schreibbit zurück. Der Cache-Eintrag wird als alt bestimmt, wenn der Nichtschreibzyklus-Zählwert eine vorgegebene Zahl übersteigt. Alternativ wird der Nichtschreibzyklus-Zählwert auf null gesetzt, falls das entsprechende Schreibbit gesetzt ist.
  • Das preemptive Cache-Zurückschreiben verwendet vorzugsweise einen First-in-First-out-Rückschreibpuffer. Der Zustands-Cache-Eintrag und seine entsprechende Adresse werden in einen ersten Puffereintrag kopiert. Das schmutzige Bit oder die schmutzigen Bits, die diesem Cache-Eintrag entsprechen, können ebenfalls in den Rückschreibpuffer kopiert werden. Dies könnte dazu verwendet werden, den Rückschreibpuffer lediglich für das Zurückschreiben des schmutzigen Teils des Cache-Eintrags freizugeben. Der ausgegebene Eintrag des Rückschreibpuffers wird stets dann in den Hauptspeicher geschrieben, wenn der Hauptspeicher zur Annahme eines Einschreibens frei ist. Der schmutzige Cache-Eintrag kann beim Kopieren in den Rückschreibpuffer als sauber markiert werden. Alternativ kann der schmutzige Cache-Eintrag als sauber markiert werden, wenn der Rückschreibpuffer den schmutzigen Cache-Eintrag in den Hauptspeicher schreibt.
  • Jede Speicherzugriffsadresse wird mit der Adresse jedes Eintrags im Rückschreibpuffer verglichen. Falls eine Schreibadresse mit der Adresse eines Rückschreibpuffer-Eintrags übereinstimmt, wird der übereinstimmende Eintrag aus dem Rückschreibpuffer geleert. Falls der jenem Rückschreibpuffer-Eintrag entsprechende Cache-Eintrag als sauber markiert worden ist, wird er als schmutzig ummarkiert. Ein Lesereklamierungs-Zählstand kann die Lesereklamierung eines Rückschreibpuffer-Eintrags ermöglichen. Der Lesereklamierungs-Zählstand wird beim Kopieren des Cache-Eintrags und seiner entsprechenden Adresse in den Rückschreibpuffer auf null gesetzt. Wenn eine Leseadresse mit der Adresse eines Rückschreibpuffer-Eintrags übereinstimmt, wird der Lesereklamierungs-Zählstand inkrementiert. Der Rückschreibpuffer-Eintrag wird geleert, wenn und nur dann wenn der Lesereklamierungs-Zählstand die vorgegebene Zahl nicht übersteigt.
  • Das Prüfen jedes Cache-Eintrags einmal in jeder vorgegebenen Zeitspanne kann das Anhalten des Betriebs des Mikroprozessors einmal in jeder vorgegebenen Zeitspanne und das sequentielle Prüfen sämtlicher Cache-Einträge umfassen. Vorzugsweise erfolgt das Prüfen jedes Cache-Eintrags im Hintergrund während der normalen Verarbeitung. Beim Erreichen einer vorgegebenen Anzahl von Befehlszyklen wird der nächste sequentielle Cache-Eintrag geprüft. Wenn der Mikroprozessor aus dem nächsten sequentiellen Cache-Eintrag liest oder in diesen schreibt, ruht die Cache-Eintrag-Prüfung, bis das Lesen oder Schreiben beendet ist.
  • KURZBESCHREIBUNG DER ZEICHNUNG
  • Die vorliegende Erfindung wird nun anhand von Beispielen und mit Bezug auf die begleitende Zeichnung näher beschrieben, worin:
  • 1 in Form eines Blockschaltplans die Gesamtarchitektur eines Mikroprozessors gemäß der Erfindung zeigt;
  • 2 in Form eines Blockschaltplans die Beziehung zwischen der Busschnittstelleneinheit, dem Daten-Cache, einem Cache für Daten niederer Ebene und dem Rückschreibpuffer gemäß dieser Erfindung zeigt;
  • 3 die Definition von Cache-Eintrag-Bits gemäß einer bevorzugten Ausführungsform dieser Erfindung zeigt;
  • 4 die Definition von Rückschreibpuffer-Bits gemäß einer bevorzugten Ausführungsform dieser Erfindung zeigt;
  • 5 den Aufbau des Zeitsteuerungsabschnitts einer bevorzugten Ausführungsform der Logik für preemptives Cache-Zurückschreiben dieser Erfindung zeigt;
  • 6 den Aufbau des Etikettbehandlungsabschnitts der bevorzugten Ausführungsform der Logik für preemptives Cache-Zurückschreiben dieser Erfindung zeigt;
  • 7 in Form eines Ablaufplans die Arbeitsweise einer bevorzugten Ausführungsform der Logik für preemptives Cache-Zurückschreiben dieser Erfindung zeigt; und
  • 8 den Aufbau einer alternativen Ausführungsform des Etikettbehandlungsabschnitts der bevorzugten Ausführungsform der Logik für preemptives Cache-Zurückschreiben dieser Erfindung zeigt.
  • GENAUE BESCHREIBUNG BEVORZUGTER AUSFÜHRUNGSFORMEN
  • Diese Erfindung strebt das Identifizieren alter Daten innerhalb des Cache an. Alte Daten sind Daten, die vom Mikroprozessor für das Schreiben nicht mehr benötigt werden. Diese alten Daten werden dann zurückgeschrieben, bevor der Cache-Eintrag geräumt werden muß. Die Daten werden im Cache aufbewahrt, bilden jedoch nun saubere Daten. Bei einem Kontextwechsel müssen weitaus weniger Daten in den Hauptspeicher geschrieben werden, da die identifizierten alten Daten bereits in den Hauptspeicher geschrieben worden sind. Dies dient dazu, dem Bedarf an Zurückschreibungen zuvorzukommen und diese vor der durch den Kontextwechsel erzeugten Speicherzugriffsspitze zu plazieren. Dies führt zu einer reduzierten Spitzen-Speicherzugriffsanforderung, was eine bessere Nutzung eines Rückschreibpuffers ermöglicht.
  • Eine selbständige Zustandsmaschine oder ein selbständiger Prozessor schreiben schmutzige Cache-Einträge preemptiv zurück. Die Logik für preemptives Cache-Zurückschreiben arbeitet vorzugsweise nur selten und nur dann, wenn die Speicherbusaktivität niedrig ist. Wenn die Logik für preemptives Cache- Zurückschreiben aktiv ist, bestimmt sie, ob ein Cache-Eintrag alt ist. Sie verwendet eine Schreibhistorie für den Cache-Eintrag. Wenn der Cache-Eintrag sowohl schmutzig als auch alt ist, wird er in einen Rückschreibpuffer kopiert. Der Rückschreibpuffer speichert die Cache-Eintrag-Daten und deren Adresse in einer Warteschlange für das Schreiben in den Hauptspeicher. Der entsprechende Cache-Eintrag kann beim Kopieren in den Rückschreibpuffer oder dann, wenn der Rückschreibpuffer diesen wirklich in den Hauptspeicher schreibt, als sauber markiert werden.
  • Wenn sonst nichts dazwischenkommt, wird der Cache-Eintrag im Rückschreibpuffer in den Hauptspeicher oder in einen externen Cache geschrieben. Es gibt bestimmte Fälle, in denen es besser ist, anders vorzugehen. Wenn sich beim Lesen im Speicher ein Cache-Treffer für einen zum Zurückschreiben anstehenden Cache-Eintrag ergibt, wäre es das Beste, für einen Cache-Eintrag, der gerade verwendet wird, keinen Speicherbuszyklus zu verwenden. Dementsprechend kann der Zurückschreib-Eintrag geleert werden. In einer alternativen Ausführungsform wird der Rückschreibpuffer-Eintrag nur bis zu einer vorgegebenen Anzahl von Lesevorgängen geleert. Wenn der Cache-Eintrag öfters als die vorgegebene Anzahl von Malen ohne ein dazwischenliegendes Schreiben gelesen wurde, wird der entsprechende Rückschreibpuffer nicht geleert. In diesem Fall lassen die Schreibzugriffe nicht darauf schließen, daß das Programm das Schreiben auf diese Adresse beendet hat. Somit kann das preemptive Cache-Zurückschreiben weitergehen.
  • Wenn sich beim Schreiben in den Speicher ein Cache-Treffer für einen zum Zurückschreiben anstehenden Cache-Eintrag ergibt, wird der Zurückschreib-Eintrag geleert. In diesem Fall ist der Cache-Eintrag nicht mehr alt. Es ist besser, zum Schreiben eines veränderten Cache-Eintrags keinen Speicherbuszyklus zu verwenden. Diese Daten können nochmals benötigt werden, weshalb sie kein guter Kandidat für preemptives Zurückschreiben sind.
  • 1 zeigt einen Blockschaltplan eines Mikroprozessors in den die Ausführungsformen dieser Erfindung eingebaut werden können. Zunächst wird mit Bezug auf 1 ein exemplarisches Computersystem 102, das einen exemplarischen superskalaren Pipeline-Mikroprozessor 110 enthält, in dem die bevorzugte Ausführungsform implementiert ist, beschrieben. Selbstverständlich wird die Architektur des Computersystems 102 und des Mikroprozessors 110 hier nur beispielhaft beschrieben, da es beabsichtigt ist, die vorliegenden Ausführungsformen in Mikroprozessoren unterschiedlicher Architektur zu verwenden. Es wird daher erwartet, daß jeder gewöhnliche Fachmann, der sich auf diese Patentbeschreibung bezieht, ohne weiteres in der Lage ist, die vorliegenden Ausführungsformen in anderen Mikroprozessorarchitekturen zu implementieren.
  • Der in 1 gezeigte Mikroprozessor 110 ist über den Bus B mit anderen Systembausteinen verbunden. Obwohl der Bus B in diesem Beispiel als ein einzelner Bus gezeigt ist, kann der Bus B natürlich mehrere Busse mit verschiedenen Geschwindigkeiten und Protokollen repräsentieren, wie dies bei herkömmlichen Computern, die die PCI-Local-Bus-Architektur verwenden, bekannt ist; hier ist lediglich als Beispiel und zwecks Einfachheit, ein einzelner Bus B gezeigt. Das Computersystem 102 enthält herkömmliche Untersysteme wie etwa Kommunikationsschnittstellen 103 (einschließlich Modem-Anschlüsse und Modems, Netzschnittstellen und dergleichen), ein graphisches Anzeigesystem 104 (einschließlich Videospeicher, Videoprozessoren, Graphikmonitor), ein Hauptspeichersystem 105, das üblicherweise mittels eines dynamischen Direktzugriffsspeichers (DRAM) implementiert ist und einen Stapelspeicher 107 umfaßt, Eingabegeräte 106 (einschließlich Tastatur, Zeigegerät und zugehörige Schnittstellenschaltungen) und ein Plattensystem 108 (das Festplattenlaufwerke, Floppy-disk-Laufwerke und CD-ROM-Laufwerke umfassen kann). Das Computersystem 102 von 1 soll also einem herkömmlichen Desktop-Computer oder einer herkömmlichen Desktop-Workstation entsprechen, wie sie gegenwärtig allgemein verwendet werden. Natürlich können auch andere Systemimplementierungen von den vorliegenden Ausführungsformen profitieren, wie Fachleute erkennen werden.
  • Der Mikroprozessor 110 enthält eine Busschnittstelleneinheit (BIU) 112, die mit dem Bus B verbunden ist und die Kommunikation zwischen dem Mikroprozessor 110 und den anderen Elementen im Computersystem 102 steuert und aus führt. Die BIU 112 enthält die geeignete Steuer- und Taktschaltungsanordnung zur Ausübung dieser Funktion einschließlich der Schreibpuffer zur Steigerung der Betriebsgeschwindigkeit und einschließlich der Zeitgeberschaltungsanordnung zur Synchronisation der Ergebnisse des internen Betriebs mit den Zeitbedingungen des Busses B. Der Mikroprozessor 110 enthält außerdem eine Takterzeugungs- und Steuerungsschaltungsanordnung 120, die bei diesem exemplarischen Mikroprozessor 110 interne Taktphasen auf der Grundlage des Bus-Taktes vom Bus B erzeugt; die Frequenz der internen Taktphasen kann in diesem Beispiel wählbar als Vielfaches der Frequenz des Bus-Taktes programmiert werden.
  • Wie aus 1 hervorgeht, besitzt der Mikroprozessor 110 drei Ebenen von internem Cache-Speicher, wobei die höchste von diesen der Ebene-2-Cache 114 ist, der mit der BIU 112 verbunden ist. In diesem Beispiel ist der Ebene-2-Cache 114 ein Unified-Cache und konfiguriert, um alle in einem Cache erfaßbaren Daten und in einem Cache erfaßbaren Befehle über die BIU 112 vom Bus B zu empfangen, so daß ein großer Teil des vom Mikroprozessor 110 angewiesenen Busverkehrs über den Ebene-2-Cache 114 abgewickelt wird. Natürlich kann der Mikroprozessor 110 den Busverkehr auch unter Umgehung des Cache 114 ausführen, indem bestimmte Bus-Lesevorgänge und Bus-Schreibvorgänge als "nicht cache-fähig" behandelt werden. Der in 1 gezeigte Ebene-2-Cache 114 ist mit zwei Ebene-1-Caches 116 verbunden; der Ebene-1-Daten-Cache 116d ist für Daten reserviert, während der Ebene-1-Befehls-Cache 116i für Befehle reserviert ist. Der Energieverbrauch durch den Mikroprozessor 110 wird dadurch minimiert, daß auf den Ebene-2-Cache 114 nur im Fall von Cache-Fehlschüssen des geeigneten der Ebene-1-Caches 116 zugegriffen wird. Ferner ist auf der Datenseite ein Mikro-Cache 118 als Ebene-0-Cache vorgesehen, der in diesem Beispiel ein Cache ist, der völlig getrennte Adreß- und Datenwege (Dual-Ports) besitzt.
  • Wie in 1 gezeigt und oben angemerkt worden ist, ist der Mikroprozessor 110 vom superskalaren Typ. In diesem Beispiel sind innerhalb des Mikroprozessors 110 mehrere Ausführungseinheiten vorgesehen, die eine parallele Ausführung von bis zu vier Befehlen gleichzeitig für einen einzigen Befehlszeigereintrag ermöglichen. Diese Ausführungseinheiten umfassen zwei Arithmetik-Logik-Einheiten (ALU) 1440 , 1442 für die Verarbeitung von bedingten Sprungoperationen, Ganzzahloperationen und logischen Operationen, eine Gleitpunkteinheit (FPU) 130, zwei Lade- und Speichereinheiten 1400 , 1401 und eine Mikro-Ablaufsteuerung 148. Die beiden Lade- und Speichereinheiten 140 benutzen die zwei Anschlüsse des Mikro-Cache 118, um darauf wirklich parallel zuzugreifen, und (ihren außerdem Lade- und Speicheroperationen auf Register in der Registerdatei 139 aus. Der Mikro-Datenadressenumsetzpuffer (mTLB) 138 ist dazu vorgesehen, in herkömmlicher Weise die logischen Datenadressen in physikalische Adressen umzuwandeln.
  • Diese mehreren Ausführungseinheiten werden über mehrere Pipelines mit jeweils sieben Stufen mit Zurückschreiben gesteuert. Die Pipeline-Stufen sind folgende:
    F Abrufen: Diese Stufe erzeigt die Befehlsadresse und liest den Befehl aus dem Befehls-Cache oder dem Befehlsspeicher
    PD0 Vordecodierstufe 0: Diese Stufe bestimmt die Länge und die Startposition von bis zu drei abgerufenen x86-Befehlen
    PD1 Vordecodierstufe 1: Diese Stufe extrahiert die x86-Befehlsbytes und codiert sie für das Decodieren in ein Format mit fester Länge x86-Befehle in atomare DC Decodieren: Diese Stufe wandelt die Operationen (AOps) um
    SC Rechenzeit zuweisen (Schedule): Diese Stufe weist den geeigneten führungseinheiten bis zu vier AAusOps zu
    P Operand: Diese Stufe liest die durch die AOOps angegebenen Registeroperanden aus
    EX Ausführen: Diese Stufe betreibt die Ausführungseinheiten entsprechend den AOps und den ausgelesenen Operanden
    WB Zurückschreiben: Diese Stufe speichert die Ergebnisse der Ausführung in Registern oder im Speicher
  • Wieder mit Bezug auf 1, die oben angeführten Pipeline-Stufen werden von verschiedenen Funktionsblöcken im Mikroprozessor 110 ausgeführt. Die Abrufeinheit 126 erzeugt Befehlsadressen vom Befehlszeiger mittels des Mikro-Befehlsadressenumsetzpuffers (mTLB) 122, der in herkömmlicher Weise die logische Befehlsadresse in eine physikalische Befehlsadresse für die Anwendung auf den Ebene-1-Befehls-Cache 116i umwandelt. Der Befehls-Cache 116i erzeugt einen Strom von Befehlsdaten für die Abrufeinheit 126, die ihrerseits den Befehlscode in der gewünschten Abfolge an die Vordecodierstufen liefert. Die spekulative Ausführung wird in erster Linie durch die Abrufeinheit 126 gesteuert, und zwar in einer Weise, die weiter unten näher erläutert wird.
  • Die Vordecodierung der Befehle wird im Mikroprozessor 110 in zwei Teile, nämlich die Vordecodieren-0-Stufe 128 und Vordecodieren-1-Stufe 132, aufgebrochen. Diese beiden Stufen arbeiten als getrennte Pipeline-Stufen und arbeiten zusammen, um bis zu drei x86-Befehle zu lokalisieren, und verwenden denselben Decodierer 134. Als solche besitzt die Vordecodierstufe der Pipeline im Mikroprozessor 110 eine Breite von drei Befehlen. Die oben angeführte Vordecodieren-0-Einheit 128 bestimmt die Größe und die Position von maximal drei x86-Befehlen (die natürlich eine variable Länge besitzen) und besteht als solche aus drei Befehlsinterpretierern; die Vordecodieren-1-Einheit 132 codiert die Mehrbytebefehle in ein Format mit fester Länge um, um das Decodieren zu erleichtern.
  • Die Decodiereinheit 134 umfaßt in diesem Beispiel vier Befehlsdecodierer, wovon jeder einen x86-Befehl mit fester Länge von der Vordecodieren-1-Einheit 132 empfangen und zwischen einer und drei atomaren Operationen (AOps) erzeugen kann; AOps sind im wesentlichen äquivalent zu RISC-Befehlen, Drei der vier Decodierer arbeiten parallel, wobei sie bis zu neun AOps in die Decodierwarteschlange am Ausgang der Decodiereinheit 134 einreihen, um auf das Scheduling zu warten; der vierte Decodierer ist für Spezialfälle reserviert. Der Scheduler 136 liest bis zu vier AOps aus der Decodierwarteschlange am Ausgang der Decodier einheit 134 und weist diese AOps den geeigneten Ausführungseinheiten zu. Außerdem empfängt die Operandeneinheit 144 die Operanden und bereitet diese für die Ausführung vor. Wie in 1 angegeben ist, empfängt die Operandeneinheit 144 einen Eingang vom Scheduler 136 und außerdem vom Mikrocode-ROM 148 über einen Multiplexer 145 und ruft Registeroperanden zur Verwendung bei der Ausführung der Befehle ab. Außerdem führt die Operandeneinheit 144 gemäß diesem Beispiel eine Operandenweiterleitung, um zum Speichern bereite Ergebnisse an Register zu senden, und auch eine Adressenerzeugung für AOps des Lade- und Speichertyps durch.
  • Die Mikro-Ablaufsteuerung 148 steuert in Kombination mit dem Mikrocode-ROM 146 die ALUs 142 und die Lade- und Speichereinheiten 140 bei der Ausführung von Mikrocode-Eintrag-AOps, die im allgemeinen die letzten in einem Zyklus auszuführenden AOps sind. In diesem Beispiel steuert die Mikro-Ablaufsteuerung 148 den Zeitablauf über im Mikrocode-ROM 146 gespeicherte Mikrobefelle, um diese Steuerung für jene mikrocodierten Mikrobefehle auszuführen. Beispiele von mikrocodierten Mikrobefehlen umfassen für den Mikroprozessor 110 umfangreiche und selten benutzte x86-Befehle, x86-Befehle, die Segment- oder Steuerregister modifizieren, die Behandlung von Ausnahmen und Unterbrechungen und Mehrzyklus-Befehle (wie etwa REP-Befehle und Befehle, die die Inhalte sämtlicher Register in den Stapelspeicher schreiben und zurückschreiben (PUSH und POP)).
  • Der Mikroprozessor 110 enthält außerdem eine Schaltungsanordnung 124 für die Steuerung der Ausführung der JTAG-Scan-Prüfung und bestimmter automatischer Selbsttestfunktionen, die die Gültigkeit des Betriebs des Mikroprozessors 110 nach dem Abschluß der Fertigung sowie nach einem Rücksetzen und nach anderen Ereignissen sicherstellen.
  • 2 zeigt eine Schnittstelle zwischen der Busschnittstelleneinheit 112, dem Ebene-2-Cache 114 und dem Ebene-1-Daten-Cache 116d genauer, wobei elektrische Verbindungen dargestellt sind. 2 zeigt Verbindungen zwischen dem Ebene-1-Daten-Cache 116d und dem Ebene-2-Cache 114. Fachleuten ist klar, daß dies mit einem Cache wie etwa dem in 2 gezeigten Ebene-2-Cache 114, der mit dem Lade- und Speichereinheiten 1400 , 1401 direkt verbunden ist, bewerkstelligt werden könnte. Der einzige Unterschied zwischen diesen Ausführungsformen wäre, daß der Ebene-2-Cache 114 getrennte Adreß- und Datenwege (Dual-Ports) für den Datenzugriff haben müßte oder die Speichereinheiten 1400 , 1401 eine einzige gemeinsame Datenschnittstelle mit dem Ebene-2-Cache 114 haben müßten. 2 zeigt nicht die Verbindungen zwischen dem Ebene-2-Cache 114 und dem Ebene-1-Befehls-Cache 116i . In der bevorzugten Ausführungsform ist der Ebene-2-Cache 114 ein kombinierter Daten- und Befehls-Cache. In der bevorzugten Ausführungsform sind die Verbindungen zwischen dem Ebene-2-Cache 114 und dem Ebene-1-Befehls-Cache 116i herkömmlicher Art. Diese Verbindungen sind in 2 zwecks Kürze nicht gezeigt.
  • Der Ebene-2-Cache 114 umfaßt eine Logik für preemptives Cache-Zurückschreiben 212, eine Steuerlogik 214, Etiketten und Adressen 216 und Cache-Daten 218. 2 zeigt ferner den Rückschreibpuffer 220, der eine Steuerlogik 222, Etiketten und Adressen 224 und Rückschreibpuffer-Daten 226 umfaßt. Ein Multiplexer 230 wickelt unter der Steuerung der Steuerlogik 214 die Auswahl von Daten aus den Cache-Daten 218 oder den Rückschreibpuffer-Daten 226 ab, mit denen der Ebene-1-Daten-Cache 116d und die Rückschreibpuffer-Daten 226 versorgt werden.
  • 3 zeigt die Definitionen der Etiketten- und Adressenfelder 216 und der Cache-Daten 218 eines bei dieser Erfindung verwendeten Cache-Eintrags. Jeder Cache-Eintrag im Ebene-2-Cache 214 umfaßt einen Satz von Etiketten und Adressen 216 und die entsprechenden Cache-Eintrag-Daten 218. Es sei angemerkt, daß in 3 Darstellungen von anderen, normalerweise verwendeten Feldern wie etwa eine Markierung für "am längsten nichtverwendet", die von herkömmlicher Art sind, weggelassen sind. Die Etiketten- und Adressenfelder 216 enthalten ein Schreib-(WR)-Feld 312. Das Schreibfeld 312 besteht vorzugsweise aus einem einzelnen Bit. Dieses Schreibfeld 312 wird bei der ersten Verwendung des Cache-Eintrags auf 0 gesetzt. Dieses Feld wird bei jedem Schreiben in die entsprechenden Cache-Eintrag-Daten auf 1 gesetzt. Die Steuerlogik 214 wickelt diese Operationen an dem Schreibfeld 312 ab. Das Schreibfeld 312 wird stets dann, wenn die Logik für preemptives Cache-Zurückschreiben 212 den Cache-Eintrag bearbeitet, auf 0 zurückgesetzt. Das Nichtschreibzyklus-(NWcycle)-Feld 314 besteht vorzugsweise aus 2 oder 3 Bits. Das Nichtschreibzyklus-Feld 314 speichert eine Schreibhistorie des entsprechenden Cache-Eintrags. Das Nichtschreibzyklus-Feld 314 wird allein von der Logik für preemptives Cache-Zurückschreiben 212 gesteuert, und zwar in einer Weise, die weiter unten erläutert wird. Das Lesereklamierungs-(RRclm)-Feld 316 besteht vorzugsweise aus 1 oder 2 Bits. Das Lesereklamierungs-Feld 316 speichert eine Lesereklamierungs-Historie des entsprechenden Cache-Eintrags. Das Lesereklamierungs-Feld 316 wird anfänglich beim Beginnen des Cache-Eintrags auf null zurückgesetzt. Das Lesereklamierungs-Feld 316 wird durch die Steuerlogik 216 bei jedem Schreiben in den entsprechenden Cache-Eintrag auf null zurückgesetzt. Das Lesereklamierungs-Feld 316 wird von der Logik für preemptives Cache-Zurückschreiben 212 in einer Weise verwendet, die weiter unten erläutert wird. Das schmutzige (D) Feld 318 ist das herkömmliche schmutzige Feld, das angibt, daß in den entsprechenden Cache-Eintrag seit dem letzten Zurückschreiben in das Hauptspeicheruntersystem 105 geschrieben wurde. Wie an sich bekannt ist, kann das schmutzige Feld 318 ein einziges Bit für den gesamten Cache-Eintrag sein oder kann mehrere Bits, eines für jedes kleinste adressierbare Datenwort, umfassen. Das schmutzige Feld 318 wird allein durch die Steuerlogik 214 gesteuert, jedoch von der Logik für preemptives Cache-Zurückschreiben 212 verwendet. Das entsprechende Bit bzw. die entsprechenden Bits werden bei jedem Schreiben in das entsprechende kleinste adressierbare Datenwort des Cache-Eintrags auf null zurückgesetzt bzw. insgesamt mit Nullen belegt. Das schmutzige Feld 318 wird beim Schreiben der entsprechenden Daten in das Hauptspeicheruntersystem 105 durch die Steuerlogik 216 auf null zurückgesetzt bzw. insgesamt mit Nullen belegt. Das Adressenfeld 320 ist das herkömmliche Cache-Adressenfeld. Die Länge dieses Adressenfeldes 320 hängt von der durch den Mikroprozessor verwendeten Adressenlänge und der Größe der Cache-Eintrag-Daten ab. Lediglich als Beispiel, der Mikroprozessor 110 kann 32-bit-Adressen verwenden, wobei jede Adresse ein Byte im Hauptspei cheruntersystem 105 auswählt und die Länge jedes Cache-Dateneintrags 32 bäte betragen kann. In diesem Fall besteht das Adressenfeld 320 aus 27 Bits. Die Cache-Eintrag-Daten 218 bestehen aus den entsprechenden Daten des Cache-Eintrags.
  • 4 zeigt die Definitionen der Etiketten- und Adressenfelder 224 und der Rückschreibpuffer-Daten 226 eines verwendeten Rückschreibpuffers. Jeder Rückschreibpuffer-Eintrag im Rückschreibpuffer 220 umfaßt einen Satz von Etiketten und Adressen 224 und entsprechende Rückschreibpuffer-Eintrag-Daten 226. Das Feld für preemptives Zurückschreiben (P) 332 besteht vorzugsweise aus einem einzelnen Bit. Das Feld für preemptives Zurückschreiben 332 wird bei einer Übertragung von Daten aus dem Ebene-2-Cache 114 in den Rückschreibpuffer 220 für ein preemptive Cache-Zurückschreiben auf 1 gesetzt. Das Feld für preemptives Zurückschreiben 332 wird bei einer Übertragung von Daten aus dem Ebene-2-Cache 114 in den Rückschreibpuffer 220 für ein normales Cache-Räumungszurückschreiben auf 0 gesetzt. Das Feld für preemptives Zurückschreiben 332 wird durch die Steuerlogik 222 in Verbindung mit der Steuerlogik 214 verwendet, um zu bestimmen, ob ein preemptiver Cache-Zurückschreib-Eintrag im Rückschreibpuffer 220 zu leeren ist. Dies wird weiter unten näher beschrieben. Der Rückschreibpuffer-Eintrag kann auch das schmutzige Feld 334 mit einem oder mehreren schmutzigen Bits umfassen. Wenn das schmutzige Feld 318 des Cache-Eintrags mehrere Bits zum Markieren von Abschnitten der Cache-Eintrag-Daten 218 enthält, erfordert der Zurückschreib-Eintrag eine Kopie dieses Feldes als schmutziges Feld 334. Dieses könnte dazu verwendet werden, den Rückschreibpuffer 220 lediglich zum Zurückschreiben des schmutzigen Teils des Cache-Eintrags freizugeben. Zum Schluß, die Etiketten- und Adressenfelder 224 umfassen ferner ein Adressenfeld 336 des gleichen Typs wie das Adressenfeld 320 jedes Cache-Eintrags.
  • Die Logik für preemptives Cache-Zurückschreiben 212 bearbeitet jeden Eintrag im Ebene-2-Cache 114 auf einer periodischen Basis. Gemäß einer bevorzugten Ausführungsform arbeitet die Logik für preemptives Zurückschreiben 212 relativ selten. Ein Tätigwerden bei erfolgreichen Cache-Einträgen nach jeweils 500 bis 4000 Befehlszyklen wird als ausreichend angesehen. 5 zeigt eine Cache-Eintrag-Zugriffsschaltung für den Zugriff auf den Ebene-2-Cache 114. Ein Zähler 410 zählt Zyklen des Befehlstaktes. Der Zähler 410 ist 9 bis 12 bit breit. Neun Bits ergeben 512 Befehlszyklen zwischen Cache-Eintrag-Prüfungen. Zwölf Bits ergeben 4096 Befehlszyklen zwischen Cache-Eintrag-Prüfungen. Der Zähler 410 erzeugt ein Überlaufsignal, das einen Signalspeicher 412 jedesmal setzt, wenn er seinen vollen Zählwert erreicht. Falls der Signalspeicher 412 gesetzt ist, erzeugt er ein Aktivierungssignal. Zusätzliche Befehlstaktzyklen führen dazu, daß sich der Zähler 410 überrollt (roll over) und wieder ab null zählt.
  • Unter momentaner Außerachtlassung des UND-Gliedes 414 versorgt das Aktivierungssignals des Signalspeichers 412 den Zähleingang des Zählers 420. Caches sind üblicherweise in Größen, die der zweiten Potenz entsprechen, aufgebaut. Die Anzahl von höchstwertigen Bits im Zähler 420 entspricht der kleinsten Anzahl von Bits, die zum Umfassen der Anzahl von Cache-Einträgen erforderlich ist. Ganz gleich, wo der Zähler 420 zählt, liefert er eine inkrementierten Cache-Eintrag-Zahl. Wenn die Cache-Eintrag-Prüfoperation abgeschlossen ist, erzeugt die Logik für preemptives Cache-Zurückschreiben 212 ein Cache-Eintrag-Prüfung-abgeschlossen-Signal. Dieses Cache-Eintrag-Prüfung-abgeschlossen-Signal setzt den Signalspeicher 412 zurück. Dies gibt den Signalspeicher 412 frei, um beim nächsten Überlauf des Zählers wieder das Aktivierungssignal auszugeben. Für jeden solchen Zyklus gibt der Zähler 420 die Bearbeitung der nächsten Cache-Eintrag-Zahl frei. Dies setzt sich fort, bis alle Cache-Einträge geprüft worden sind, worauf der Zähler 420 zum ersten Cache-Eintrag überrollt (rolls over).
  • Zurück zum UND-Glied 414, das vom Signalspeicher 412 ausgegebene Aktivierungssignal wird einem nichtinvertierenden Eingang des UND-Gliedes 414 zugeführt. Ein invertierender Eingang des UND-Gliedes 414 empfängt ein Etiketten-Belegt-Signal. Der Ausgang des UND-Gliedes 414 versorgt den Zähleingang des Zählers 420. Es besteht die Möglichkeit, daß die Logik für preemptives Zurückschreiben 212 und die Steuerlogik 214 auf die Etiketten und Adressen 216 gleichzeitig auf denselben Cache-Eintrag zuzugreifen versuchen. Die Steuerlogik 216 erfaßt eine Übereinstimmung zwischen dem um eins erhöhten Cache-Etiketteneintrag-Signal des Zählers 420 und der Identität des mit einer momentanen Adresse übereinstimmenden Cache-Eintrags. Wenn dies der Fall ist, sendet die Steuerlogik 212 ein aktives Etiketten-Belegt-Signal an die Logik für preemptives Cache-Zurückschreiben 212. Das invertierte Etiketten-Belegt-Signal schließt das UND-Gatter 414 und hält den Zählbetrieb des Zählers 420 an. Gleichzeitig stoppen auch alle anderen Operationen der Logik für preemptives Cache-Zurückschreiben 212. Der Zählvorgang im Zähler 420 und der Betrieb der Logik für preemptives Cache-Zurückschreiben 212 werden wieder aufgenommen, wenn die Steuerlogik 216 ihren Zugriff auf den Cache-Eintrag abgeschlossen hat und das Etiketten-Belegt-Signal deaktiviert. Der Signalspeicher 412 behält seinen Zustand während der Zeit, in der die Etiketten belegt sind, bei, so daß kein Zählwert fehlt. Die Operation des preemptiven Cache-Zurückschreibens ist eine Hintergrund-Task, so daß diese Task gewöhnliche Cache-Operationen abwartet. Da die Logik für preemptives Cache-Zurückschreiben 212 so selten arbeitet, verändert andererseits ein solches gelegentliches Anhalten Operationen des preemptiven Cache-Zurückschreibens nicht. Es sei angemerkt, daß es möglich ist, die erforderlichen Cache-Etiketten als Speicher mit getrennten Adreß- und Datenwegen (Dual-Ported-Speicher) aufzubauen, um einen simultanen Zugriff zu ermöglichen. Konflikte treten selten auf, und die Folgen des Anhaltens der Operation des preemptiven Cache-Zurückschreibens bis zu sieben Befehlszyklen sind infinitesimal. Deshalb sind die zusätzlichen Schaltungen für das erforderliche Versehen dieser Cache-Etiketten mit getrennten Adreß- und Datenwegen nicht gerechtfertigt.
  • 6 zeigt den Aufbau der Betriebsteile der Logik für preemptives Cache-Zurückschreiben 212. Die Logik für preemptives Cache-Zurückschreiben 212 umfaßt einen Multiplexer 501, einen Addierer 502, einen Multiplexer 503, eine Anpassungsschaltung 504, ein UND-Glied 505, ein ODER-Glied 506, ein UND-Glied 507, einen Multiplexer 508, einen Addierer 509, eine Anpassungsschaltung 510 und ein 010-Datenregister 511. Nach Auswahl des zu prüfenden Cache- Eintrags durch die Cache-Eintrag-Nummer-Ausgabe des Zählers 410 werden das Datenfelderschreiben 312, das Nichtschreibzyklus-Feld 314 und das Lesereklamierungs-Feld 316 abgerufen und der Logik für preemptives Cache-Zurückschreiben 212 zugeführt. Die Logik für preemptives Cache-Zurückschreiben 212 empfängt außerdem das Rückschreibpuffer-Treffer-Signal von der Steuerlogik 222 über die Steuerlogik 214 und das Lese/Nichtschreib-Signal vom Ebene-1-Daten-Cache 116d über die Steuerlogik 214. Die Logik für preemptives Cache-Zurückschreiben 212 berechnet neue Werte für das Nichtschreib-Feld 314 und das Lesereklamierungs-Feld 316, die im entsprechenden Cache-Eintrag gespeichert werden. Die Logik für preemptives Cache-Zurückschreiben 212 erzeugt außerdem das Rückschreibpuffer-Eintrag-Leerung-Signal, das die Steuerlogik 214 dem Rückschreibpuffer 220 zuführt. Es sei angemerkt, daß das Schreibfeld 312 stets dann, wenn von der Logik für preemptives Cache-Zurückschreiben 212 ein Cache-Eintrag geprüft wird, auf 0 zurückgesetzt wird. Die Schaltung, die diese Funktion erfüllt, ist zwecks Kürze weggelassen. Es sei außerdem angemerkt, daß die in 6 gezeigten Schaltungen bei einer normalen Prüfung von Cache-Einträgen und bei einer Prüfung von Cache-Einträgen, die auf einen Rückschreibpuffer-Treffer folgen, wirksam werden.
  • Der Multiplexer 501 wird durch das Schreibfeld 312 (WR) gesteuert. Falls das Schreibfeld 1 ist, was angibt, daß der Cache-Eintrag seit dem letzten Zyklus geschrieben wurde, wählt der Multiplexer 501 seinen –1-Dateneingang. Falls das Schreibfeld 0 ist, was angibt, daß der Cache-Eintrag seit dem letzten Zyklus nicht geschrieben wurde, wählt der Multiplexer 501 seinen +1-Dateneingang. Der Multiplexer 501 liefert einen Eingang an den Addierer 502. Der zweite Eingang des Addierers 502 empfängt den Wert des abgerufenen Nichtschreibzyklus-Feldes 314 (NWcyle). Das Abrufen jenes Nichtschreibzyklus-Feldes 314 umfaßt vorzugsweise 2 oder 3 Bits. Der Addierer 502 bildet eine Summe mit einer entsprechenden Anzahl von Bits. Es sei angemerkt, daß die kleinste Ausgabe des Addierers 502 null ist. Somit können mehrere aufeinanderfolgende Schreibzyklen das Nichtschreibzyklus-Feld 314 nicht unter null dekrementieren. Dies ist als Sättigungssubtraktionsoperation bekannt. Der Addierer 502 liefert seinen Summen ausgang an einen Eingang des Multiplexers 503. Der Multiplexer 503 wählt im allgemeinen diesen Eingang, der im Nichtschreibzyklus-Feld 314 des entsprechenden Cache-Eintrags gespeichert wird. Somit wird das Nichtschreib-Feld 314 im allgemeinen inkrementiert, falls der Cache-Eintrag während des vorhergehenden Zyklus nicht geschrieben wurde, und dekrementiert, falls der Cache-Eintrag während des vorhergehenden Zyklus geschrieben wurde.
  • Die Anpassungsschaltung 504 erfaßt, wenn das Nichtschreibzyklus-Feld 314 einen vorgegebenen Wert übersteigt. Dies tritt stets dann ein, wenn die Anzahl von jüngsten Nichtschreibzyklen die Anzahl der jüngsten Schreibzyklen um den vorgegebenen Wert übersteigt. In der bevorzugten Ausführungsform erfaßt die Anpassungsschaltung 504 den Überlaufzustand des Addierers 502, was angibt, daß die Summe 7 (binär 111) übersteigt. Alternativ kann die Anpassungsschaltung 504 stets dann ausgelöst werden, wenn der Summenausgang des Addierers 502 gleich einer bestimmten Zahl ist. Wenn die Anpassungsschaltung 504 ihren Zustand erfaßt, erzeugt sie ein Signal für preemptives Cache-Zurückschreiben. Dieses signalisiert der Steuerlogik 214, die Adressen und Daten des entsprechenden Cache-Eintrags in den Rückschreibpuffer 220 zu übertragen. Die Steuerlogik 214 signalisiert außerdem der Steuerlogik 222, das Feld für preemptives Zurückschreiben (P) auf 1 zu setzen. Dies gibt den Rückschreibpuffer 220 frei, um einen Rückschreibpuffer-Treffer für preemptive Zurückschreibungen anders als für normale den Cache betreffende Räumungs-Zurückschreibungen zu behandeln. Sobald der Cache-Eintrag im FIFO-Rückschreibpuffer 220 ist, wird der Cache-Eintrag im allgemeinen über die Busschnittstelleneinheit 112 in das Hauptspeicheruntersystem 105 geschrieben. Es ist an sich bekannt, daß die Datenmenge in jedem Rückschreibpuffer-Eintrag ein Vielfaches der Datenbreite zwischen der Busschnittstelleneinheit 112 und dem Bus B zum Hauptspeicheruntersystem 105 sein kann. Die Busschnittstelleneinheit 112 wickelt das Puffern und das Sequentialisieren sowohl der Lesevorgänge als auch der Schreibvorgänge, die zur Kompensation dieses Unterschieds in der Datenbreite erforderlich sind, in an sich bekannter Weise ab. Die Steuerlogik 214 kann den entsprechenden Cache-Eintrag nach dem Kopieren in den Rückschreibpuffer 220 über das schmutzige Feld 318 (D) als sauber markieren oder alternativ bis zum eigentlichen Schreiben in das Hauptspeicheruntersystem 105 warten.
  • Die Logik für preemptives Cache-Zurückschreiben 212 erzeugt das Rückschreibpuffer-Eintrag-Leerung-Signal über das UND-Glied 505 und das ODER-Glied 506. Das Rückschreibpuffer-Treffer-Signal von der Steuerlogik 220 wird über die Steuerlogik 214 einem nichtinvertierenden Eingang des UND-Gliedes 505 zugeführt. Ein invertierender Eingang des UND-Gliedes 505 empfängt das Lese/Nichtschreib-Signal (R/) von der Steuerlogik 214. Das UND-Glied 505 liefert einen Eingang an das ODER-Glied 506. Somit erzeugen das UND-Glied 505 und das ODER-Glied 506 nach der Erfassung eines Rückschreibpuffer-Treffers ein aktives Rückschreibpuffer-Eintrag-Leerung-Signal, wenn der Ebene-1-Daten-Cache 116d ein Schreiben anfordert. Wie oben beschrieben wurde, bedeutet ein Treffer auf den Rückschreibpuffer 220 bei einem Schreiben, daß der Rückschreibpuffer-Eintrag die falschen, in das Hauptspeicheruntersystem 105 zu schreibenden Daten enthält. Somit sollte dieser Zurückschreib-Eintrag gelöscht und nicht in das Hauptspeicheruntersystem 105 geschrieben werden. Es sei angemerkt, daß der Rückschreibpuffer 220 seinen Eintrag bei einem Treffer auf einen preemptiven Zurückschreib-Eintrag leeren kann, da diese Daten noch im Ebene-2-Cache 114 gespeichert sind. Dieser Zustand wird durch das P-Feld 322 angegeben. Somit kann der Ebene-2-Cache 114 auf den Speicherzugriff normal reagieren, obwohl der Cache-Eintrag auch im Rückschreibpuffer 220 ist. Wenn bei einem normalen Zurückschreiben, das einem geräumten Cache-Eintrag entspricht, ein Rückschreibpuffer-Treffer vorkommt, müssen diese Daten zum Ebene-2-Cache 114 zurückübertragen werden, bevor jegliche Verarbeitung fortsetzen kann. Im Fall einer Räumung speichert der Ebene-2-Cache 114 diese Daten nicht mehr. Die Steuerlogik 214 muß den zurückgehenden Rückschreibpuffer-Eintrag speichern und einen anderen zu ersetzenden oder zu räumenden Cache-Eintrag identifizieren. Dieser Prozeß ist an sich bekannt und muß nicht weiter beschrieben werden.
  • Das UND-Glied 507 empfängt außerdem sowohl das Rückschreibpuffer-Treffer-Signal als auch das Lese/Nichtschreib-Signal. Diese beiden Signale werden an nichtinvertierende Eingänge geliefert. Das UND-Glied 507 erzeugt beim Empfang dieses Rückschreibpuffer-Treffer-Signals ein aktives Signal, wenn der Ebene-1-Daten-Cache eine Leseanforderung ausgibt. Der entsprechende Rückschreibpuffer-Eintrag kann in Abhängigkeit von der Anzahl der Lesereklamierungen geleert werden. Der Ausgang des UND-Gliedes 507 steuert die Wahl des Multiplexers 508. Falls das UND-Glied 507 einen aktiven Ausgang erzeugt, was den Empfang eines Rückschreibpuffer-Treffers während eines Lesezugriffs angibt, wählt der Multiplexer 508 sein +1-Eingangssignal. Andernfalls wählt der Multiplexer 508 sein 0-Eingangssignal. Der Multiplexer 508 liefert einen Eingang an den Addierer 509. Der zweite Eingang des Addierers 509 empfängt den Wert des abgerufenen Lesereklamierungs-Feldes 316 (RRclm). Das Abrufen jenes Lesereklamierungs-Feldes 316 besteht vorzugsweise aus 1 oder 2 Bits. Der Addierer 509 bildet eine Summe mit einer entsprechenden Anzahl von Bits. Diese Summe wird im Lesereklamierungs-Feld 316 des entsprechenden Cache-Eintrags gespeichert. Im allgemeinen führt diese Summe zu keiner Veränderung des Lesereklamierungs-Feldes 316, da der Multiplexer 508 im allgemeinen seinen 0-Eingang wählt.
  • Die Anpassungsschaltung 510 erfaßt, wenn das Lesereklamierungs-Feld 316 einen vorgegebenen Wert übersteigt. Dies tritt stets dann ein, wenn die Anzahl von Lesereklamierungen des Cache-Eintrags vom Rückschreibpuffer 220 einen vorgegebenen Wert übersteigt. In der bevorzugten Ausführungsform erfaßt die Anpassungsschaltung 510 den Überlaufzustand des Addierers 509, was angibt, daß die Summe 3 (binär 11) übersteigt. Alternativ kann die Anpassungsschaltung 510 stets dann ausgelöst werden, wenn der Summenausgang des Addierers 509 gleich einer bestimmten Zahl ist. Wenn die Anpassungsschaltung 510 ihren Zustand erfaßt, erzeugt sie ein aktives Ausgangssignal. Dieses Signal versorgt einen invertierenden Eingang des ODER-Gliedes 506. Somit erzeugt das ODER-Glied 506 das Rückschreibpuffer-Eintrag-Leerung-Signal bei Lesetreffern, falls die Anpassungsschaltung 510 nicht ihren Zustand erfaßt. Dies gibt die Lesereklamierung von in den Rückschreibpuffer 220 kopierten Daten für eine vorgegebene Anzahl von Malen frei. Sobald diese Anzahl überschritten wird, was von der Anpassungsschaltung 510 erfaßt wird, wird der Rückschreibpuffer-Eintrag bei einem Lesen nicht geleert, sondern kann über die Busschnittstelle 112 in den Hauptspeicher 105 geschrieben werden. Es sei angemerkt, daß jedes Schreiben in einen Cache-Eintrag das Lesereklamierungs-Feld 316 auf 0 zurücksetzt. Somit erreicht das Lesereklamierungs-Feld 316 seine Grenze erst nach mehreren Lesevorgängen ohne ein dazwischenliegendes Schreiben. In diesem Fall wäre es das Beste, den Cache-Eintrag unter der Annahme, daß der Mikroprozessor 110 mit dem Schreiben auf diese Adresse fertig ist, zurückzuschreiben.
  • Die Anpassungsschaltung 510 steuert außerdem die Wahl des Multiplexers 503. Normalerweise steuert die Anpassungsschaltung 510 den Multiplexer 503 so, daß er den Summenausgang des Addierers 502 wählt. Wenn die Anpassungsschaltung 510 ein aktives Signal erzeugt, wählt der Multiplexer 503 seinen Eingang vom 010-Register 511. Dies stellt den Nichtschreibzyklus-Zählstand bei jeder Lesereklamierung vom Rückschreibpuffer 220 im voraus auf 2 (binär 010) ein. Somit sind zur Erzeugung eines preemptiven Zurückschreibens, das auf eine Lesereklamierung folgt, weniger Lesezyklen erforderlich.
  • 7 zeigt in Form eines Ablaufplans die Prozeßschritte, die eine Logik für preemptives Cache-Zurückschreiben 212 in Gestalt eines selbständigen Prozessors oder einer selbständigen Zustandsmaschine ermöglicht. Der in 7 gezeigte Prozeß 700 beginnt mit dem Erfassen, ob der Rückschreibpuffer 220 einen Treffer erzeugt (Entscheidungsblock 701). Falls dies nicht wahr ist, prüft der Prozeß 700, um zu bestimmen, ob der Zähler einen nächsten Zählstand erreicht hat (Entscheidungsblock 702). Falls dies nicht wahr ist, kehrt der Prüfung 700 zum Entscheidungsblock 701 zurück. Der Prozeß wiederholt diese Schritte, bis eine Bedingung erfüllt ist.
  • Beim Erfassen eines nächsten Zählstandes prüft der Prozeß 700, um zu bestimmen, ob die Etiketten des nächsten zu prüfenden Cache-Eintrags belegt sind (Entscheidungsblock 703). Dies kann gelegentlich geschehen, wenn normale Ca che-Prozesse auf den Cache-Eintrag zugreifen. Der Prozeß 700 wiederholt die Prüfung des Entscheidungsblocks 703, bis die Cache-Etiketten nicht belegt sind. Da das preemptive Cache-Zurückschreiben ein Hintergrundprozeß ist, wartet es, bis es keinen Konflikt mit anderen höherprioren Prozessen gibt. Der Prozeß 700 ruft die Cache-Etiketten für den Eintrag, auf den zugegriffen wird, ab. Diese Cache-Etiketten enthalten das Schreib-(WR)-Feld 312, das Nichtschreibzyklus-(NWcycle)-Feld 314, das Lesereklamierung-(RRclm)-Feld 316 und das schmutzige (D) Feld 318, die in 3 gezeigt sind.
  • Der Prozeß 700 prüft als nächstes, um zu bestimmen, ob der Cache-Eintrag, auf den zugegriffen wird, schmutzig ist (Entscheidungsblock 705). Für einen sauberen Eintrag ist kein preemptives Cache-Zurückschreiben geeignet. Somit kehrt der Prozeß 700 zum Entscheidungsblock 701 zurück, falls der Cache-Eintrag nicht schmutzig ist. Falls der Cache-Eintrag schmutzig ist, prüft der Prozeß 700, um zu bestimmen, ob das Schreibfeld 312 1 ist (Entscheidungsblock 706). Falls das Schreibfeld 312 1 ist, dekrementiert der Prozeß 700 das Nichtschreibzyklus-Feld 314 (Verarbeitungsblock 707). Wie oben beschrieben wurde, ist dies eine Sättigungssubtraktion, weshalb das Nichtschreibzyklus-Feld 314 keinen Wert besitzen kann, der kleiner als null ist. Der Prozeß 700 setzt danach das Schreibfeld 312 auf 0 zurück (Verarbeitungsblock 708). Die neuen Werte dieser beiden Felder werden in den entsprechenden Cache-Etiketten für den der Prüfung unterzogenen Cache-Eintrag gespeichert. Der Prozeß 700 kehrt danach zum Entscheidungsblock 701 zurück, um in der Schleife zu bleiben, bis ein Rückschreibpuffer-Treffer vorkommt (Entscheidungsblock 701) oder der nächste Zählstand erreicht ist (Entscheidungsblock 702). Falls das Schreibfeld 312 0 ist, dekrementiert der Prozeß 700 das Nichtschreibzyklus-Feld 314 (Verarbeitungsblock 709). Der Prozeß 710 prüft, ob der inkrementierte Zählstand eine vorgegebene Zahl übersteigt (Entscheidungsblock 710). Falls der Zählstand die vorgegebene Zahl nicht übersteigt, kehrt der Prozeß 700 zum Entscheidungsblock 710 zurück, um in der Schleife zu bleiben, bis ein Rückschreibpuffer-Treffer vorkommt (Entscheidungsblock 701) oder der nächste Zählstand erreicht ist (Entscheidungsblock 702). Falls der inkrementierte Zählstand die vorgegebene Zahl übersteigt, beginnt der Prozeß 700 ein preemptives Cache-Zurückschreiben jenes Eintrags (Verarbeitungsblock 711). Der Prozeß 700 kehrt danach zum Entscheidungsblock 701 zurück, um in der Schleife zu bleiben, bis ein Rückschreibpuffer-Treffer vorkommt (Entscheidungsblock 701) oder der nächste Zählstand erreicht ist (Entscheidungsblock 702).
  • Beim Erfassen eines Rückschreibpuffer-Treffers (Entscheidungsblock 701) prüft der Prozeß 700 das P-Feld 332 (Entscheidungsblock 712). Wie oben beschrieben wurde, wird das P-Feld 332 für preemptive Cache-Zurückschreibungen auf 1 und für normale Cache-Räumungszurückschreibungen auf 0 gesetzt. Wenn der Rückschreibpuffer-Treffer auf einen normalen Cache-Räumungszurückschreib-Eintrag erfolgte, kehrt der Prozeß 700 zur Ausgangsschleife mit den Entscheidungsblöcken 701 und 702 zurück. Wenn der Rückschreibpuffer-Treffer auf einen preemptiven Rückschreibpuffer-Eintrag erfolgte, prüft der Prozeß 700, um zu bestimmen, ob der Speicherzugriff ein Schreiben ist (Entscheidungsblock 713). Wenn der Speicherzugriff, der den Rückschreibpuffer-Treffer erzeugte, ein Schreiben ist, setzt der Prozeß 714 das Schreibfeld 312 auf 1 (Verarbeitungsblock 714) und dekrementiert das Nichtschreibzyklus-Feld 314 (Verarbeitungsblock 715). Anschließend wird der Rückschreibpuffer-Eintrag geleert (Verarbeitungsblock 716). Es sei angemerkt, daß aufgrund dessen, daß dies ein preemptiver Rückschreibpuffer-Eintrag ist, die entsprechenden Daten noch immer im Ebene-2-Cache 114 gespeichert sind. Somit muß der Rückschreibpuffer 220 diese Daten nicht in den Cache zurückkopieren. Tatsächlich kann der Ebene-2-Cache 114 den Schreib-Speicherzugriff normalerweise versorgen, während der Rückschreibpuffer 220 diesen Eintrag leert. Sobald der Rückschreibpuffer-Eintrag geleert ist, kehrt der Prozeß 700 zur Ausgangsschleife zurück.
  • Wenn der Speicherzugriff, der den Rückschreibpuffer-Treffer erzeugt, ein Lesen ist, inkrementiert der Prozeß 714 das Lesereklamierungs-Feld 316 (Verarbeitungsblock 717). Der Prozeß 700 prüft dann, um zu bestimmen, ob das Lesereklamierungs-Feld 316 seine vorgegebene Zahl übersteigt (718). Falls dies wahr ist, wird der Rückschreibpuffer-Eintrag nicht geleert und kehrt der Prozeß 700 zur Ausgangsschleife zurück. Falls das Lesereklamierungs-Feld 316 seine vorgegebe ne Zahl nicht übersteigt, setzt der Prozeß 714 das Schreibfeld 312 auf 0 (Verarbeitungsblock 719) und das Nichtschreibzyklus-Feld 314 auf 010 (Verarbeitungsblock 715). Anschließend wird der Rückschreibpuffer-Eintrag geleert (Verarbeitungsblock 716). Sobald der Rückschreibpuffer-Eintrag geleert ist, kehrt der Prozeß 700 zur Ausgangsschleife zurück.
  • 8 zeigt den Aufbau der Betriebsteile der Logik für preemptives Cache-Zurückschreiben 212 gemäß einer alternativen Ausführungsform. In dieser alternativen Ausführungsform setzt ein Schreiben in den Cache-Eintrag das Nichtschreibzyklus-Feld 212 auf null, wobei Lesereklamierungen vom Rückschreibpuffer 220 nicht unterstützt werden. Die Logik für preemptives Cache-Zurückschreiben 212 umfaßt einen Multiplexer 511, einen Addierer 502, einen Multiplexer 513, eine Anpassungsschaltung 504 und ein UND-Glied 515. Nach Auswahl des zu prüfenden Cache-Eintrags durch die Cache-Eintrag-Nummer-Ausgabe des Zählers 410 werden das Datenfelderschreiben 312 und das Nichtschreibzyklus-Feld 314 abgerufen und der Logik für preemptives Cache-Zurückschreiben 212 zugeführt. Das Lesereklamierungs-Feld 316 wird in dieser alternativen Ausführungsform nicht unterstützt. Die Logik für preemptives Cache-Zurückschreiben 212 empfängt außerdem das Rückschreibpuffer-Treffer-Signal von der Steuerlogik 222 über die Steuerlogik 214 und das Lese/Nichtschreib-Signal vom Ebene-1-Daten-Cache 116d über die Steuerlogik 214. Die Logik für preemptives Cache-Zurückschreiben 212 berechnet einen neuen Wert für das Nichtschreib-Feld 314, das im entsprechenden Cache-Eintrag gespeichert wird. Die Logik für preemptives Cache-Zurückschreiben 212 erzeugt außerdem das Rückschreibpuffer-Eintrag-Leerung-Signal, das die Steuerlogik 214 dem Rückschreibpuffer 220 zuführt.
  • Der Multiplexer 511 wird durch Schreibfeld 312 (WR) gesteuert. Falls das Schreibfeld 1 ist, was angibt, daß der Cache-Eintrag seit dem letzten Zyklus geschrieben wurde, wählt der Multiplexer 511 seinen 0-Dateneingang. Falls das Schreibfeld 0 ist, was angibt, daß der Cache-Eintrag seit dem letzten Zyklus nicht geschrieben wurde, wählt der Multiplexer 511 seinen +1-Dateneingang. Der Multiplexer 511 liefert einen Eingang an den Addierer 502. Der zweite Eingang des Addierers 502 empfängt den Wert des abgerufenen Nichtschreibzyklus-Feldes 314 (NWcycle). Der Addierer 502 liefert seinen Summenausgang an einen Eingang des Multiplexers 513. Der Multiplexer 513 wählt im allgemeinen diesen Summeneingang, wenn das Schreibfeld 312 0 ist. Der Multiplexer 513 wählt seinen 0-Eingang, wenn das Schreibfeld 312 1 ist. Somit wird das Schreibfeld 312 inkrementiert, wenn für den vorhergehenden Zyklus kein Schreiben stattgefunden hat, und auf 0 zurückgesetzt, wenn wenigstens ein Schreibvorgang stattgefunden hat.
  • Die Anpassungsschaltung 504 erfaßt, wenn das Nichtschreibzyklus-Feld 314 einen vorgegebenen Wert übersteigt. Dies tritt stets dann ein, wenn die Anzahl von aufeinanderfolgenden Nichtschreibzyklen den vorgegebenen Wert übersteigt. Wenn die Anpassungsschaltung 504 ihren Zustand erfaßt, erzeugt sie ein Signal für preemptives Cache-Zurückschreiben. Dies geschieht, wie oben beschrieben wurde.
  • Die Logik für preemptives Cache-Zurückschreiben 212 erzeugt das Rückschreibpuffer-Eintrag-Leerung-Signal über das UND-Glied 515. Das Rückschreibpuffer-Treffer-Signal von der Steuerlogik 220 wird über die Steuerlogik 214 einem nichtinvertierenden Eingang des UND-Gliedes 515 zugeführt. Ein invertierender Eingang des UND-Gliedes 515 empfängt das Lese/Nichtschreib-Signal (R/) von der Steuerlogik 214. Das UND-Glied 515 liefert beim Erfassen eines Rückschreibpuffer-Treffers ein aktives Rückschreibpuffer-Eintrag-Leerung-Signal, wenn der Ebene-1-Daten-Cache 116d ein Schreiben anfordert.

Claims (17)

  1. Verfahren zum preemptiven Cache-Zurückschreiben in einem Mikroprozessor-Cache-System, wobei das Verfahren die folgenden Schritte umfaßt: Prüfen jedes Cache-Eintrags einmal in jeder vorgegebenen Zeitperiode, um festzustellen, ob der Cache-Eintrag verschmutzt ist (705), wobei der verschmutzte Cache-Eintrag angibt, daß in den Cache-Eintrag seit dem letzten Schreiben des Cache-Eintrags in den Hauptspeicher geschrieben wurde; falls ein Cache-Eintrag als schmutzig bestimmt worden ist, Prüfen, um zu bestimmen, ob der Cache-Eintrag ein Kandidat für ein preemptives Cache-Zurückschreiben ist (706, 709, 710); und falls der schmutzige Cache-Eintrag ein Kandidat für ein preemptives Cache-Zurückschreiben ist, Schreiben des schmutzigen Cache-Eintrags in den Hauptspeicher (711) und Markieren des schmutzigen Cache-Eintrags als sauber, was angibt, daß in den Cache-Eintrag seit dem letzten Schreiben des Cache-Eintrags in den Hauptspeicher nicht geschrieben wurde ist, und dadurch gekennzeichnet, daß: der Schritt des Prüfens, um zu bestimmen, ob der Cache-Eintrag ein Kandidat für ein preemptives Cache-Zurückschreiben ist, umfaßt: Setzen eines entsprechenden Nichtschreib-Zählstandes (314) auf null bei jedem Beginnen eines Cache-Eintrags, Setzen eines Schreibbits (312), das dem Cache-Eintrag entspricht, bei jedem Schreiben in den Cache-Eintrag, bei jeder Prüfung, um zu bestimmen, ob der Cache-Eintrag ein Kandidat für ein preemptives Cache-Zurückschreiben ist, Inkrementieren des Nichtschreib-Zählstandes (709), falls das entsprechende Schreibbit nicht gesetzt ist, Nichtinkrementieren des Nichtschreib-Zählstandes (709), falls das entsprechende Bit gesetzt ist, und danach Zurücksetzen des entsprechenden Schreibbits (708), und Bestimmen, daß der schmutzige Cache-Eintrag ein Kandidat für ein preemptives Cache-Zurückschreiben ist, falls der Nichtschreib-Zählstand eine vorgegebene Zahl (710) übersteigt.
  2. Verfahren zum preemptiven Cache-Zurückschreiben nach Anspruch 1, bei dem: der Schritt des Prüfens, um zu bestimmen, ob der schmutzige Cache-Eintrag ein Kandidat für ein preemptives Cache-Zurückschreiben ist, ferner umfaßt: bei jedem Prüfen, um zu bestimmen, ob der Cache-Eintrag ein Kandidat für ein preemptives Cache-Zurückschreiben ist, Dekrementieren des Nichtschreib-Zählstandes, falls das entsprechende Schreibbit gesetzt ist.
  3. Verfahren zum preemptiven Cache-Zurückschreiben nach Anspruch 1, bei dem: der Schritt des Prüfens, um zu bestimmen, ob der schmutzige Cache-Eintrag ein Kandidat für ein preemptives Cache-Zurückschreiben ist, ferner umfaßt: bei jedem Prüfen, um zu bestimmen, ob der Cache-Eintrag ein Kandidat für preemptives Cache-Zurückschreiben ist, Zurücksetzen des Nichtschreib-Zählstandes auf null, falls das entsprechende Schreibbit gesetzt ist.
  4. Verfahren zum preemptiven Cache-Zurückschreiben nach einem der Ansprüche 1 bis 3, bei dem: der Schritt des Schreibens des schmutzigen Cache-Eintrags in den Hauptspeicher (711) umfaßt: Schreiben des schmutzigen Cache-Eintrags und seiner entsprechenden Adresse in einen ersten Eintrag eines First-in-First-out-Rückschreibpuffers (226) und Schreiben eines letzten Eintrags des Rückschreibpuffers in den Hauptspeicher, wann immer der Hauptspeicher frei ist, um Schreibvorgänge zu akzeptieren.
  5. Verfahren zum preemptiven Cache-Zurückschreiben nach Anspruch 4, bei dem: der Schritt des Markierens des schmutzigen Cache-Eintrags als sauber das Markieren des schmutzigen Cache-Eintrags als sauber beim Schreiben des schmutzigen Cache-Eintrags und seiner entsprechenden Adresse in den Rückschreibpuffer (226) umfaßt.
  6. Verfahren zum preemptiven Cache-Zurückschreiben nach Anspruch 4, bei dem: der Schritt des Markierens des schmutzigen Cache-Eintrags als sauber das Markieren des schmutzigen Cache-Eintrags als sauber, wenn der Rückschreibpuffer (226) den schmutzigen Cache-Eintrag in den Hauptspeicher schreibt, umfaßt.
  7. Verfahren zum preemptiven Cache-Zurückschreiben nach Anspruch 4, das ferner umfaßt: Setzen eines Lesereklamierungs-Zählstandes (316), der jedem Cache-Eintrag entspricht, auf null beim Beginnen des Cache-Eintrags und bei jedem Schreiben in den Cache-Eintrag; Vergleichen einer Leseadresse jedes Lesens aus dem Cache mit den entsprechenden Adressen jedes Eintrags im Rückschreibpuffer (701), falls die Leseadresse mit der entsprechenden Adresse eines Eintrags im Rückschreibpuffer übereinstimmt: Inkrementieren des Lesereklamierungs-Zählstandes (717), Prüfen, um zu bestimmen, ob der Lesereklamierungs-Zählstand eine zweite vorgegebene Zahl übersteigt (718), und dann und nur dann, wenn der Lesereklamierungs-Zählstand die zweite vorgegebene Zahl nicht übersteigt, Leeren des übereinstimmenden Eintrags aus dem Rückschreibpuffer (716).
  8. Verfahren zum preemptiven Cache-Zurückschreiben nach einem vorhergehenden Anspruch, bei dem: der Schritt des Prüfens jedes Cache-Eintrags einmal in jeder vorgegebenen Zeitspanne darin besteht: einmal in jeder vorgegebenen Zeitspanne den Betrieb des Mikroprozessors anzuhalten, danach sämtliche Cache-Einträge sequentiell zu prüfen und danach den Betrieb des Mikroprozessors wiederaufzunehmen.
  9. Verfahren zum preemptiven Cache-Zurückschreiben nach einem vorhergehenden Anspruch, bei dem: die vorgegebene Zeitspanne durch Zählen einer vorgegebenen Anzahl von Befehlszyklen des Mikroprozessors bestimmt ist.
  10. Mikroprozessor, der umfaßt: einen internen Cache-Speicher (114) mit mehreren Cache-Einträgen, wovon jeder Cache-Daten (218), ein Adressenfeld (320), das angibt, wo die Cache-Daten in einem Hauptspeicher gespeichert sind, und ein schmutziges Feld (318), das angibt, daß in die Cache-Daten seit dem letzten Schreiben der Cache-Daten in den Hauptspeicher geschrieben wurde, enthält, dadurch gekennzeichnet, daß: jeder Cache-Eintrag ferner umfaßt: ein Schreibbit (312), das bei jedem Schreiben in den Cache-Eintrag gesetzt wird, und ein Nichtschreibzyklus-Feld (314) aus mehreren Bits, das bei jedem Beginnen des Cache-Eintrags auf null gesetzt wird; der Mikroprozessor ferner umfaßt: eine Schaltung für preemptives Cache-Zurückschreiben, die mit dem Cache-Speicher verbunden ist und umfaßt: eine Cache-Eintrag-Zugriffsschaltung, die einmal in jeder vorgegebenen Zeitspanne auf das wenigstens eine schmutzige Bit, das Schreibbit und das Nichtschreibzyklus-Feld jedes Cache-Eintrags in einer vorgegebenen Reihenfolge zugreift, einen Addierer (502), der arbeitet, wenn das wenigstens eine schmutzige Bit (318) angibt, daß die Cache-Daten (216) schmutzig sind, wobei der Addierer (502) einen ersten Eingang, der das Nichtschreibzyklus-Feld des Cache-Eintrags, auf den zugegriffen wird, empfängt, einen zweiten Eingang, der einen +1-Eingang empfängt, falls das Schreibbit nicht gesetzt ist, und einen Ausgang, der eine Summe aus den ersten und zweiten Eingängen erzeugt, besitzt, wobei die Summe das Nichtschreibzyklus-Feld des Cache-Eintrags, auf den zugegriffen wird, ersetzt, wobei das Nichtschreibzyklus-Feld (314) hiervon inkrementiert wird, wobei der Addierer (502) das Nichtschreibzyklus-Feld nicht inkrementiert, falls das Schreibbit gesetzt ist, wobei das Schreibbit bei jedem solchen Zugriff zurückgesetzt wird, eine Anpassungsschaltung (504), die mit dem Addierer (502) verbunden ist und angibt, ob die Summe eine vorgegebene Zahl übersteigt; und ein Rückschreibmittel (212), das die Cache-Daten (216), die durch das schmutzige Feld (318) des Cache-Eintrags, auf den zugegriffen wird, als schmutzig bezeichnet werden, in den Hauptspeicher (105) an einer Adresse schreibt, die dem Adressenfeld (320) des Cache-Eintrags, auf den zugegriffen wird, entspricht, falls die Anpassungsschaltung (504) angibt, daß die Summe die vorgegebene Zahl übersteigt.
  11. Mikroprozessor nach Anspruch 10, bei dem: die Schaltung (212) für preemptives Cache-Zurückschreiben ferner umfaßt: einen Multiplexer (501), der einen ersten Eingang, der +1 empfängt, einen zweiten Eingang, der –1 empfängt, einen Steuereingang, der das Schreibbit emp fängt, und einen mit dem zweiten Eingang des Addierers (502) verbundenen Ausgang besitzt, wobei der Multiplexer (501) –1 am ersten Eingang auswählt, falls das Schreibbit (312) gesetzt ist, und +1 am zweiten Eingang auswählt, falls das Schreibbit (312) nicht gesetzt ist.
  12. Mikroprozessor nach Anspruch 10, bei dem: die Schaltung (212) für preemptives Cache-Zurückschreiben ferner umfaßt: einen ersten Multiplexer (511), der einen ersten Eingang, der +1 empfängt, einen zweiten Eingang, der 0 empfängt, einen Steuereingang, der das Schreibbit (312) empfängt, und einen mit dem zweiten Eingang des Addierers (502) verbundenen Ausgang besitzt, wobei der Multiplexer (501) +1 am ersten Eingang auswählt, falls das Schreibbit nicht gesetzt ist, und 0 am zweiten Eingang auswählt, falls das Schreibbit gesetzt ist, einen zweiten Multiplexer (513), der einen ersten Eingang, der die Summe des Addierers (502) empfängt, einen zweiten Eingang, der 0 empfängt, einen Steuereingang, der das Schreibbit (312) empfängt, und einen Ausgang besitzt, der das Nichtschreibzyklus-Feld (314) des Cache-Eintrags, auf den zugegriffen wird, ersetzt, wobei der zweite Multiplexer (513) 0 am ersten Ausgang auswählt, falls das Schreibbit (312) gesetzt ist, und die Summe des Addierers (502) am zweiten Eingang auswählt, falls das Schreibbit (312) nicht gesetzt ist.
  13. Mikroprozessor nach Anspruch 10, der ferner umfaßt: einen First-in-First-out-Rückschreibpuffer (220), der einen Eingang, der die Cache-Eintrag-Daten, die in den Hauptspeicher (105) geschrieben werden sollen, und die entsprechende Adresse empfängt, und einen Ausgang, der in den Hauptspeicher (105) schreibt, wann immer der Hauptspeicher (105) frei ist, um Schreibvorgänge zu akzeptieren, besitzt.
  14. Mikroprozessor nach Anspruch 13, bei dem: die Schaltung (212) für preemptives Cache-Zurückschreiben den Cache-Eintrag als sauber markiert, wenn sie den Cache-Eintrag und seine entsprechende Adresse in den Rückschreibpuffer (220) schreibt.
  15. Mikroprozessor nach Anspruch 13, bei dem: die Schaltung (212) für preemptives Cache-Zurückschreiben den Cache-Eintrag als sauber markiert, wenn der Rückschreibpuffer einen entsprechenden Eintrag des Rückschreibpuffers (220) in den Hauptspeicher (105) schreibt.
  16. Mikroprozessor nach Anspruch 13, bei dem: der Cache-Eintrag ferner ein Lesereklamierungs-Feld (316) enthält, das bei jedem Beginnen des Cache-Eintrags und bei jedem Schreiben in den Cache-Eintrag auf null gesetzt wird; wobei der Rückschreibpuffer (220) ein Bit (332) für preemptives Zurückschreiben enthält, das gesetzt wird, wenn ein Cache-Eintrag und seine entsprechende Adresse für preemptives Zurückschreiben kopiert wird, und das zurückgesetzt wird, wenn ein Cache-Eintrag und seine entsprechende Adresse für eine Räumung des Cache-Eintrags kopiert wird, wobei der Rückschreibpuffer (220) eine Leseadresse jedes Speicher-Lesevorgangs mit den entsprechenden Adressen jedes Eintrags (222) in dem Rückschreibpuffer (220) vergleicht, wobei die Schaltung (212) für preemptives Cache-Zurückschreiben ferner umfaßt: einen zweiten Multiplexer (508), der einen ersten Eingang, der 0 emp-fängt, einen zweiten Eingang, der +1 empfängt, und einen Steuereingang, der mit dem Rückschreibpuffer verbunden ist, besitzt, wobei der Multiplexer (508) 0 am ersten Eingang auswählt, falls der Rückschreibpuffer (220) keine Übereinstimmung zwischen der Leseadresse und einer entsprechenden Adresse des Rückschreibpuffer-Eintrags, dessen Bit (232) für preemptives Zurückschreiben gesetzt ist, erfaßt, und +1 am zweiten Eingang auswählt, falls der Rückschreibpuffer eine Übereinstimmung zwischen der Leseadresse und einer entsprechenden Adresse eines Rückschreibpuffer-Eintrags erfaßt, einen zweiten Addierer (509), der einen ersten Eingang, der das Lesereklamierungs-Feld (316) des Cache-Eintrags, auf den zugegriffen wird, empfängt, einen zweiten Eingang, der mit dem Ausgang des zweiten Multiplexers (508) verbunden ist, und einen Ausgang, der eine zweite Summe aus den ersten und zweiten Eingängen erzeugt, besitzt, wobei die zweite Summe das Lesereklamierungs-Feld (316) des Cache-Eintrags, auf den zugegriffen wird, ersetzt, eine zweite Anpassungsschaltung (510), die mit dem zweiten Addierer (509) verbunden ist und angibt, daß die zweite Summe eine zweite vorgegebene Zahl übersteigt, und wobei der Rückschreibpuffer (220) den übereinstimmenden Eintrag aus dem Rückschreibpuffer leert, falls die zweite Anpassungsschaltung angibt, daß die zweite Summe die zweite vorgegebene Zahl übersteigt.
  17. Mikroprozessor nach einem der Ansprüche 10 bis 16, bei dem: die Cache-Eintrag-Zugriffsschaltung umfaßt: einen ersten Zähler (410) mit einer vorgegebenen Anzahl von Bits, der einen Zähleingang, der einen Befehlstakt zum Zählen von Befehlszyklen empfängt, und einen Ausgang, der bei Erreichen eines vollen Zählstandes ein Überlaufsignal erzeugt, besitzt, und einen zweiten Zähler (420), der einen Zähleingang, der das Überlaufsignal des ersten Zählers empfängt, und einen Ausgang, der einen Zählstand für den Zugriff auf einen entsprechenden Cache-Eintrag ausgibt, besitzt.
DE69721961T 1996-12-20 1997-12-22 Mikroprozessor mit einem Nachschreibcachespeicher Expired - Lifetime DE69721961T2 (de)

Applications Claiming Priority (2)

Application Number Priority Date Filing Date Title
US3354496P 1996-12-20 1996-12-20
US33544P 1996-12-20

Publications (2)

Publication Number Publication Date
DE69721961D1 DE69721961D1 (de) 2003-06-18
DE69721961T2 true DE69721961T2 (de) 2004-02-12

Family

ID=21871028

Family Applications (1)

Application Number Title Priority Date Filing Date
DE69721961T Expired - Lifetime DE69721961T2 (de) 1996-12-20 1997-12-22 Mikroprozessor mit einem Nachschreibcachespeicher

Country Status (4)

Country Link
US (1) US6134634A (de)
EP (1) EP0854428B1 (de)
JP (1) JPH10232827A (de)
DE (1) DE69721961T2 (de)

Families Citing this family (90)

* Cited by examiner, † Cited by third party
Publication number Priority date Publication date Assignee Title
US6014759A (en) * 1997-06-13 2000-01-11 Micron Technology, Inc. Method and apparatus for transferring test data from a memory array
US6044429A (en) 1997-07-10 2000-03-28 Micron Technology, Inc. Method and apparatus for collision-free data transfers in a memory device with selectable data or address paths
GB9806184D0 (en) * 1998-03-23 1998-05-20 Sgs Thomson Microelectronics A cache coherency mechanism
US6601151B1 (en) * 1999-02-08 2003-07-29 Sun Microsystems, Inc. Apparatus and method for handling memory access requests in a data processing system
US6574710B1 (en) * 2000-07-31 2003-06-03 Hewlett-Packard Development Company, L.P. Computer cache system with deferred invalidation
US6772293B2 (en) * 2000-12-27 2004-08-03 Intel Corporation System and method for optimizing memory bus bandwidth utilization by request classification and ordering
US6594741B1 (en) * 2001-02-23 2003-07-15 Lsi Logic Corporation Versatile write buffer for a microprocessor and method using same
US6940865B2 (en) * 2001-04-17 2005-09-06 Atheros Communications, Inc. System and method for interleaving frames with different priorities
US6829682B2 (en) * 2001-04-26 2004-12-07 International Business Machines Corporation Destructive read architecture for dynamic random access memories
US6889290B2 (en) 2001-06-29 2005-05-03 Intel Corporation Memory management apparatus and method
US7228366B2 (en) * 2001-06-29 2007-06-05 Intel Corporation Method and apparatus for deterministic removal and reclamation of work items from an expansion bus schedule
US7472230B2 (en) * 2001-09-14 2008-12-30 Hewlett-Packard Development Company, L.P. Preemptive write back controller
US7187689B1 (en) * 2001-10-29 2007-03-06 Juniper Networks, Inc. Self-cleaning mechanism for error recovery
US7096320B2 (en) * 2001-10-31 2006-08-22 Hewlett-Packard Development Company, Lp. Computer performance improvement by adjusting a time used for preemptive eviction of cache entries
US20030084253A1 (en) * 2001-10-31 2003-05-01 Johnson David J.C. Identification of stale entries in a computer cache
US20030084249A1 (en) * 2001-10-31 2003-05-01 Johnson David J.C. Preemptive eviction of stale entries is a computer cache by use of age-bits
US6810465B2 (en) 2001-10-31 2004-10-26 Hewlett-Packard Development Company, L.P. Limiting the number of dirty entries in a computer cache
US6813691B2 (en) 2001-10-31 2004-11-02 Hewlett-Packard Development Company, L.P. Computer performance improvement by adjusting a count used for preemptive eviction of cache entries
US7389387B2 (en) * 2001-12-31 2008-06-17 Intel Corporation Distributed memory module cache writeback
US6874067B2 (en) * 2002-04-11 2005-03-29 International Business Machines Corporation Eliminating unnecessary data pre-fetches in a multiprocessor computer system
US7428592B2 (en) * 2002-07-11 2008-09-23 Oracle International Corporation Securely persisting network resource identifiers
US7467142B2 (en) 2002-07-11 2008-12-16 Oracle International Corporation Rule based data management
US7512585B2 (en) * 2002-07-11 2009-03-31 Oracle International Corporation Support for multiple mechanisms for accessing data stores
US8375113B2 (en) 2002-07-11 2013-02-12 Oracle International Corporation Employing wrapper profiles
US7206851B2 (en) 2002-07-11 2007-04-17 Oracle International Corporation Identifying dynamic groups
US7447701B2 (en) * 2002-07-11 2008-11-04 Oracle International Corporation Automatic configuration of attribute sets
US7114037B2 (en) * 2002-07-11 2006-09-26 Oracle International Corporation Employing local data stores to maintain data during workflows
US7428523B2 (en) * 2002-07-11 2008-09-23 Oracle International Corporation Portal bridge
US7478407B2 (en) * 2002-07-11 2009-01-13 Oracle International Corporation Supporting multiple application program interfaces
US7904487B2 (en) 2003-10-09 2011-03-08 Oracle International Corporation Translating data access requests
US7340447B2 (en) * 2003-10-09 2008-03-04 Oracle International Corporation Partitioning data access requests
US7882132B2 (en) 2003-10-09 2011-02-01 Oracle International Corporation Support for RDBMS in LDAP system
US7415577B2 (en) * 2004-03-10 2008-08-19 Intel Corporation Method and apparatus to write back data
US7421535B2 (en) * 2004-05-10 2008-09-02 International Business Machines Corporation Method for demoting tracks from cache
US7941585B2 (en) * 2004-09-10 2011-05-10 Cavium Networks, Inc. Local scratchpad and data caching system
US7594081B2 (en) 2004-09-10 2009-09-22 Cavium Networks, Inc. Direct access to low-latency memory
EP1794979B1 (de) 2004-09-10 2017-04-12 Cavium, Inc. Selektive datenstrukturnachbildung
US8230144B1 (en) * 2004-10-19 2012-07-24 Broadcom Corporation High speed multi-threaded reduced instruction set computer (RISC) processor
US20060155934A1 (en) * 2005-01-11 2006-07-13 Ramakrishnan Rajamony System and method for reducing unnecessary cache operations
US7478203B2 (en) * 2006-03-08 2009-01-13 Sun Microsystems, Inc. Technique for eliminating dead stores in a processor
CN101449256B (zh) 2006-04-12 2013-12-25 索夫特机械公司 对载明并行和依赖运算的指令矩阵进行处理的装置和方法
US7913048B2 (en) * 2006-07-26 2011-03-22 International Business Machines Corporation Data subscribe-and-publish mechanisms and methods for producer-consumer pre-fetch communications
EP2527972A3 (de) 2006-11-14 2014-08-06 Soft Machines, Inc. Vorrichtung und Verfahren zum Verarbeiten von komplexen Anweisungsformaten in einer Multi-Thread-Architektur, die verschiedene Kontextschaltungsmodi und Visualisierungsschemen unterstützt
JP5077209B2 (ja) * 2008-12-03 2012-11-21 日本電気株式会社 メモリ管理装置、メモリ管理方法およびプログラム
US8631204B2 (en) 2010-07-14 2014-01-14 Seagate Technology Llc Multi-resolution cache monitoring
JP2012033047A (ja) * 2010-07-30 2012-02-16 Toshiba Corp 情報処理装置、メモリ管理装置、メモリ管理方法、及びプログラム
EP2616928B1 (de) 2010-09-17 2016-11-02 Soft Machines, Inc. Mehrfach verzweigte einzelzyklus-vorhersage mit einem latenten cache für frühe und entfernte verzweigungsvorhersage
EP2689327B1 (de) 2011-03-25 2021-07-28 Intel Corporation Ausführung von befehlsfolgen-codeblocks mittels durch partitionierbare engines realisierter virtueller kerne
KR101966712B1 (ko) 2011-03-25 2019-04-09 인텔 코포레이션 분할가능한 엔진에 의해 인스턴스화된 가상 코어를 이용한 코드 블록의 실행을 지원하는 메모리 프래그먼트
TWI518504B (zh) 2011-03-25 2016-01-21 軟體機器公司 使用可分割引擎實體化的虛擬核心以支援程式碼區塊執行的暫存器檔案節段
KR101639854B1 (ko) 2011-05-20 2016-07-14 소프트 머신즈, 인크. 복수의 엔진에 의해 명령어 시퀀스들의 실행을 지원하기 위한 상호접속 구조
WO2012162188A2 (en) 2011-05-20 2012-11-29 Soft Machines, Inc. Decentralized allocation of resources and interconnect structures to support the execution of instruction sequences by a plurality of engines
US8996789B2 (en) * 2011-05-23 2015-03-31 International Business Machines Corporation Handling high priority requests in a sequential access storage device having a non-volatile storage cache
JP2013065150A (ja) * 2011-09-16 2013-04-11 Toshiba Corp キャッシュメモリ装置、プロセッサ、および情報処理装置
US20130091331A1 (en) * 2011-10-11 2013-04-11 Iulian Moraru Methods, apparatus, and articles of manufacture to manage memory
US10191746B2 (en) 2011-11-22 2019-01-29 Intel Corporation Accelerated code optimizer for a multiengine microprocessor
CN108427574B (zh) 2011-11-22 2022-06-07 英特尔公司 微处理器加速的代码优化器
US9141543B1 (en) 2012-01-06 2015-09-22 Marvell International Ltd. Systems and methods for writing data from a caching agent to main memory according to a pre-clean criterion
US8930674B2 (en) 2012-03-07 2015-01-06 Soft Machines, Inc. Systems and methods for accessing a unified translation lookaside buffer
US9444496B2 (en) * 2012-04-04 2016-09-13 University Of Southern California Correctable parity protected memory
US9569356B1 (en) * 2012-06-15 2017-02-14 Emc Corporation Methods for updating reference count and shared objects in a concurrent system
US9740612B2 (en) * 2012-07-30 2017-08-22 Intel Corporation Systems and methods for maintaining the coherency of a store coalescing cache and a load cache
US9229873B2 (en) 2012-07-30 2016-01-05 Soft Machines, Inc. Systems and methods for supporting a plurality of load and store accesses of a cache
US9710399B2 (en) 2012-07-30 2017-07-18 Intel Corporation Systems and methods for flushing a cache with modified data
US9916253B2 (en) 2012-07-30 2018-03-13 Intel Corporation Method and apparatus for supporting a plurality of load accesses of a cache in a single cycle to maintain throughput
US9430410B2 (en) 2012-07-30 2016-08-30 Soft Machines, Inc. Systems and methods for supporting a plurality of load accesses of a cache in a single cycle
US9678882B2 (en) 2012-10-11 2017-06-13 Intel Corporation Systems and methods for non-blocking implementation of cache flush instructions
US9442849B2 (en) * 2012-12-29 2016-09-13 Intel Corporation Apparatus and method for reduced core entry into a power state having a powered down core cache
WO2014150806A1 (en) 2013-03-15 2014-09-25 Soft Machines, Inc. A method for populating register view data structure by using register template snapshots
US9891924B2 (en) 2013-03-15 2018-02-13 Intel Corporation Method for implementing a reduced size register view data structure in a microprocessor
KR102083390B1 (ko) 2013-03-15 2020-03-02 인텔 코포레이션 네이티브 분산된 플래그 아키텍처를 이용하여 게스트 중앙 플래그 아키텍처를 에뮬레이션하는 방법
EP2972845B1 (de) 2013-03-15 2021-07-07 Intel Corporation Verfahren zur ausführung von in blöcken gruppierten befehlen aus mehreren threads
US9569216B2 (en) 2013-03-15 2017-02-14 Soft Machines, Inc. Method for populating a source view data structure by using register template snapshots
WO2014150971A1 (en) 2013-03-15 2014-09-25 Soft Machines, Inc. A method for dependency broadcasting through a block organized source view data structure
US9886279B2 (en) 2013-03-15 2018-02-06 Intel Corporation Method for populating and instruction view data structure by using register template snapshots
US10140138B2 (en) 2013-03-15 2018-11-27 Intel Corporation Methods, systems and apparatus for supporting wide and efficient front-end operation with guest-architecture emulation
WO2014150991A1 (en) 2013-03-15 2014-09-25 Soft Machines, Inc. A method for implementing a reduced size register view data structure in a microprocessor
US10275255B2 (en) 2013-03-15 2019-04-30 Intel Corporation Method for dependency broadcasting through a source organized source view data structure
US9811342B2 (en) 2013-03-15 2017-11-07 Intel Corporation Method for performing dual dispatch of blocks and half blocks
US9904625B2 (en) 2013-03-15 2018-02-27 Intel Corporation Methods, systems and apparatus for predicting the way of a set associative cache
US9280389B1 (en) * 2014-12-30 2016-03-08 Tyco Fire & Security Gmbh Preemptive operating system without context switching
US10210087B1 (en) 2015-03-31 2019-02-19 EMC IP Holding Company LLC Reducing index operations in a cache
US10922228B1 (en) 2015-03-31 2021-02-16 EMC IP Holding Company LLC Multiple location index
US9767041B2 (en) * 2015-05-26 2017-09-19 Intel Corporation Managing sectored cache
US10740260B2 (en) * 2016-05-12 2020-08-11 Lg Electronics Inc. Cache self-clean engine
KR20180094391A (ko) * 2017-02-15 2018-08-23 에스케이하이닉스 주식회사 메모리 시스템 및 메모리 시스템의 동작 방법
US20190354482A1 (en) * 2018-05-21 2019-11-21 Microsoft Technology Licensing, Llc Time-based mechanism supporting flush operation
CN109739696B (zh) * 2018-12-13 2022-05-13 北京计算机技术及应用研究所 一种双控存储阵列固态硬盘缓存加速方法
US11163573B2 (en) * 2019-02-13 2021-11-02 International Business Machines Corporation Hierarchical metadata predictor with periodic updates
KR20210123555A (ko) * 2020-04-03 2021-10-14 에스케이하이닉스 주식회사 메모리 시스템

Family Cites Families (10)

* Cited by examiner, † Cited by third party
Publication number Priority date Publication date Assignee Title
US4530055A (en) * 1982-03-03 1985-07-16 Sperry Corporation Hierarchical memory system with variable regulation and priority of writeback from cache memory to bulk memory
US5045996A (en) * 1986-11-12 1991-09-03 Xerox Corporation Multiprocessor cache memory housekeeping
EP0273665A3 (de) * 1987-01-02 1990-06-06 General Electric Company Anordnung, um optische Speicheranlagen des Wormtyps scheinbar neuschreibbar zu machen
US5119485A (en) * 1989-05-15 1992-06-02 Motorola, Inc. Method for data bus snooping in a data processing system by selective concurrent read and invalidate cache operation
US5467460A (en) * 1990-02-14 1995-11-14 Intel Corporation M&A for minimizing data transfer to main memory from a writeback cache during a cache miss
JP2839060B2 (ja) * 1992-03-02 1998-12-16 インターナショナル・ビジネス・マシーンズ・コーポレイション データ処理システムおよびデータ処理方法
US5623633A (en) * 1993-07-27 1997-04-22 Dell Usa, L.P. Cache-based computer system employing a snoop control circuit with write-back suppression
US5555398A (en) * 1994-04-15 1996-09-10 Intel Corporation Write back cache coherency module for systems with a write through cache supporting bus
US5729713A (en) * 1995-03-27 1998-03-17 Texas Instruments Incorporated Data processing with first level cache bypassing after a data transfer becomes excessively long
US5778430A (en) * 1996-04-19 1998-07-07 Eccs, Inc. Method and apparatus for computer disk cache management

Also Published As

Publication number Publication date
EP0854428A1 (de) 1998-07-22
DE69721961D1 (de) 2003-06-18
US6134634A (en) 2000-10-17
EP0854428B1 (de) 2003-05-14
JPH10232827A (ja) 1998-09-02

Similar Documents

Publication Publication Date Title
DE69721961T2 (de) Mikroprozessor mit einem Nachschreibcachespeicher
DE69908193T2 (de) Ausführung von speicher- und ladeoperationen mittels einer linkdatei
DE4218003C2 (de) Cache-Steuereinrichtung für ein sekundäres Cache-Speichersystem
DE10085375B4 (de) Verfahren und Einrichtung für einen pipeline-verschachtelten Multi-Thread-Befehlsdecodierer
DE60038693T2 (de) Verfahren und vorrichtung zur ausschaltung eines taktsignals in einem vielfadenprozessor
DE10296989B4 (de) Multi-Thread-Prozessor mit der Fähigkeit einer impliziten Multi-Thread-Ausführung eines Ein-Thread-Programms
DE60102017T2 (de) Räumungsfilter für adressenübersetzungspuffer
DE112005002305B4 (de) Thread-Livelock-Einheit
DE60036016T2 (de) Schnell multithreading für eng gekoppelte multiprozessoren
DE60002200T2 (de) Umschaltungsverfahren in einem multithreadprozessor
DE69534148T2 (de) Rechnersystem zur Ausführung von Verzweigungsbefehlen
DE69727773T2 (de) Verbesserte Verzweigungsvorhersage in einem Pipelinemikroprozessor
DE60005701T2 (de) Threadumschaltungslogik in einem multithreadprozessor
DE69434728T2 (de) Synchronisationssystem und verfahren in einem datencachesystem mit aufgeteiltem pegel
DE19781995C2 (de) Prozessor mit einer Wiederhol-Architektur
DE60009151T2 (de) Vorhersage von datenbeförderung von speicher- zum ladebefehl mit untrainierung
DE69932066T2 (de) Mechanismus zur "store-to-load forwarding"
DE60005860T2 (de) Ablaufsteuerung zum ausgeben und wiederausgeben von ketten abhängiger befehle
DE69434669T2 (de) Spekulative Befehlswarteschlange für Befehle mit variabler Byteslänge
DE112005003098B4 (de) Verfahren und Vorrichtung zum Zugreifen auf einen physikalischen Speicher von einer CPU oder einem Prozessorelement mit hoher Leistung
DE112007001171T5 (de) Verfahren für virtualisierten Transaktionsspeicher bei globalem Überlauf
DE112004002267T5 (de) Ruhezustandsmechansimus für virtuelles Multithreading
DE19506734A1 (de) Computersystem und Verfahren zum Aufrechterhalten der Speicherkonsistenz in einer Busanforderungswarteschlange
DE112004001133T5 (de) Warteschlangen-Sperren mit Monitor-Memory-Wait
DE4335475A1 (de) Datenverarbeitungseinrichtung mit Cache-Speicher

Legal Events

Date Code Title Description
8364 No opposition during term of opposition