Virtuell indizierbarer Cache-Speicher
Die Erfindung betrifft einen viituell indizierbaren Cache-Speicher, der Synonym-Eintrage effizient behandelt und ihnen keine Alignment-Restriktionen auferlegt. Moderne Prozessoren benötigen Cache-Speicher, um die Lücke zwischen schnellen Prozessoren und langsamen Hauptspeichern auszugleichen.
Bekannt sind real und virtuell indizierte Cache-Speicher. Beim real indizierten Cache-Speicher wird die vom Prozessor gelieferte virtuelle Adresse zuerst vom Translation Lookaside Buffer (TLB) in eine Realadresse umgesetzt. Danach wird der Cache-Speicher mit einer Realadresse angesprochen. Beim virtuell indizierten Cache-Speicher wird dieser direkt mit der virtuellen Adresse angesprochen. Eine Umsetzung in die entsprechende Realadresse erfolgt nur bei einem Cache-Miss. Der Vorteil eines virtuell indizierten Cache-Speichers ist die höhere Geschwindigkeit, da der Umsetzschritt durch den TLB entfällt. Sein Nachteil tritt bei Synonymen bzw. Aliasing auf. Synonyme sind unter-
schiedliche virtuelle Adressen, die auf dieselbe Realadresse abgebildet werden. Bei solchem Aliasing kann also ein (reales) Speicherobjekt über verschiedene (virtuelle) Adressen angesprochen werden. Konventionelle virtuell indizierbare Cache-Speicher
- verbieten Synonyme entweder total,
- oder beschränken ihre Anwendung (z.B. indem sie für zwei Synonyme v und v' stets v = V' (mod Cache-Größe) verlangen,
- oder stellen Aliasing mit Hilfe eines Reverse Translation Buffers (RTB) fest, brauchen aber viel Zeit für das Umschalten zwischen zwei Synonymen.
Im Stand der Technik sind sogenannte Direct-Mapped Cache-Speicher bekannt. Ein derartiger Cache-Speicher ist wie in Fig. 8 dargestellt organisiert. Bei einem derartigen Direct-Mapped Cache-Speicher wird mit Hilfe einer map-Funktion aus der virtuellen Adresse v ein Cache-Index berechnet und damit eine Zeile des Cache-Speichers angewählt. Dann wird v mit der virtuellen Adresse des augenblicklich mit dieser Cache-Zeile assoziierten Speicherbereichs verglichen. Bei Gleichheit liegt ein Treffer (Cache-Hit) vor (und die Cache-Zeile wird anstelle des Hauptspeichers benutzt); andernfalls wird ein Cache-Miss signalisiert.
Meistens wird
(v mod Cache-Größe)/Zeilengröße als map-Funktion benutzt. Dann braucht im Cache-Speicher nicht die vollständige virtuelle Adresse gespeichert zu werden, sondern es reicht v/Cache-Größe.
Direct-Mapped Cache-Speicher sind einfacher, führen aber zu höheren Miss-Raten als n-Wege Cache-Speicher. Diese bestehen prinzipiell aus n entsprechend kleineren Direct-Mapped Cache-Blöcken. Dabei wird sichergestellt, daß sich jedes Hauptspeicherelement in höchstens einem Block befindet. Da die map-Funktion jeweils n CacheZeilen indiziert, können jeweils bis zu n Elemente mit map-äquivalenten Adressen im Cache-Speicher enthalten sein. Diese n-fache Assoziativität verringert die Wahrscheinlichkeit von Clashes und vergrößert entsprechend die Trefferrate.
Wenn ein konventioneller virtuell indizierter Cache-Speicher Aliasing im Cache-Speicher zuläßt, d.h. erlaubt, daß mit einem einzigen Realobjekt mehrere Cache-Zeilen oder -Zellen assoziiert sind, könnte man derart verfahren, daß zwischen einem Haupt- und keinem, einem oder mehreren Nebeneinträgen unterschieden wird. Zugriff auf den Haupteingang wird normal abgewickelt. Zugriff auf einen Nebeneintrag führt zu einem Alias-Miss und bewirkt, daß - die Daten des Haupteintrags in diesen Nebeneintrag kopiert werden,
- dieser Nebeneintrag neuer Haupteintrag wird,
- der alte Haupteintrag Nebeneintrag wird.
Der Erfindung liegt die Aufgabe zugrunde, einen virtuell indizierbaren Cache-Speicher zu schaffen, der mehrfaches Aliasing ohne Alignment-Einschränkung zuläßt und diese Synonyme effizient behandelt. Insbesondere sollen die notwendigen Reaktionen auf einen Alias-Miss wenig Zeit erfordern.
Zur Lösung dieser Aufgabe wird mit der Erfindung ein virtuell indizierbarer Cache-Speicher mit den Merkmalen des Anspruchs 1 vorgeschlagen. Alternativ kann der erfindungsgemäße Cache-Speicher die Merkmale des Anspruchs 7 aufweisen. Die Merkmale vorteilhafter Weiterbildungen beider Varianten sind jeweils in den Unteransprüchen aufgeführt.
Der virtuell indizierbare Cache-Speicher gemäß der ersten Variante ist mit mehreren Cache-Blöcken zum Speichern von Information versehen. Über einen externen Datenbus werden Datenworte von mindestens einem Prozessor zu den Cache-Blöcken und zwischen den Cache-Blöcken übertragen. Jeder Cache-Block kann auf den externen Datenbus zugreifen und auf diesem Datenbus liegende Datenworte übernehmen. Zum virtuellen Adressieren des Cache-Speichers ist ein externer Datenbus vorgesehen, auf den mindestens ein Prozessor virtuelle Adressen legt. Der Cache-Speicher weist eine Indexereinheit auf, die die virtuelle Adresse empfängt und diese virtuelle Adresse in ein oder mehrere Indizes für einen oder mehrere Cache-Blöcke und in eine gemeinsame Restadresse zerlegt. Zum Übertragen der Restadresse von der Indexereinheit zu den Cache-Blöcken ist ein Restadreßbus vorgesehen, an den die Indexereinheit und die Cache-Blöcke angeschlossen sind. Die Indizes bzw. der Index wird von der Indexereinheit über einen Indexbus zu den Cache-Blöcken übertragen. Über diesen Indexbus werden auch zwischen den Cache-Blöcken Indizes, nämlich die Synonym-Indizes übertragen. Jeder Index ist dabei einem bestimmten Cache-Block zugeordnet. Dies gilt sowohl für die von der Indexereinheit erzeugten Indizes als auch für die Synonym-Indizes, die in den Cache-Blöcken abgelegt sind, sofern Synonym-Einträge existieren. Über eine externe Schreib/Lese-Leitung wird von dem min-
destens einen Prozessor an jeden Cache-Block ein Schreib- oder ein Lesesignal übertragen.
Die Cache-Blöcke des erfindungsgemäßen Cache-Speichers gemäß der ersten Variante sind derart organisiert, daß jeder Cache-Block mehrere Cache-Zellen aufweist, die durch einen über den Indexbus empfangenen und dem betreffenden Cache-Block zugeordneten Index auswählbar sind. Jede Cache-Zelle wiederum umfaßt ein Markierungsfeld für eine Markierung, die mit der Restadresse verglichen wird, sofern diese Cache-Zelle von dem Index ausgewählt wird. Ferner weist jede Cache-Zelle, wenigstens ein Datenfeld für ein Datenwort auf. Pro Datenfeld weist die Cache-Zelle ein Statusfeld mit mindestens einer Lesbarkeits- und einer Schreibbarkeits-Flagge auf. Sind diese Flaggen gesetzt, so ist das Datenwort des diesem Statusfeld zugeordneten Datenfeld lesbar bzw. schreibbar. Sind die Flaggen nicht gesetzt bzw. rückgesetzt, darf nicht direkt gelesen bzw. geschrieben werden. Pro Cache-Zelle ist bzw. sind ferner ein oder mehrere Synonym-Indizes gespeichert, und zwar in einem Synonym-Indexfeld. In diesem Indexfeld abge-speicherte gültige Synonym-Indizes (einer oder mehrere, wobei die Tatsache, ob der Inhalt des Indexfeldes einen gültigen Synonym-Index anzeigt, durch ein entsprechendes Validity-Bit signalisiert werden kann,) geben diejenigen Cache-Zellen der anderen Cache-Blöcke an, die Datenfelder aufweisen, die der gleichen realen Adresse (Synonym-Adressen), die der Indexereinheit zugeführt worden ist und zur Indizierung der Cache-Zelle in dem angesprochenen Cache-Block gefάhrt hat, zugeordnet sind. Schließlich ist der erfindungsgemäße Cache-Speicher mit einem Cache-Hit/Miss-Ausgang versehen, über den ein Cache-Hit signalisiert werden kann, wenn der von der Indexereinheit empfangenen virtuellen
Adresse eine Cache-Zelle eines der Cache-Blöcke zulässigerweise zugeordnet ist, und über den ein Cache-Miss signalisiert werden kann, wenn in keinem Cache-Block eine Cache-Zelle der von der Indexereinheit empfangenen virtuellen Adresse zugeordnet ist.
Jeder Cache-Block ist mit einer Vergleichereinheit zum Vergleichen der über den Restadreßbus empfangenen Rest-adresse oder eines Teils davon mit dem Inhalt des Markierungsfeldes einer Cache-Zelle versehen. Diejenige Cache-Zelle, deren Markierung (Inhalt des Markierungsfeldes) mit der Restadresse oder eines Teils davon verglichen wird, wird über den den betreffenden Cache-Block zugeordneten Index des Indexbusses ausgewählt. Dieser Index wiederum kann entweder von der Indexereinheit geliefert werden (in diesem Fall ist der Index aus der virtuellen Adresse, die die Indexereinheit vom Prozessor empfängt, ableitet) oder von dem Synonym-Indexfeld eines anderen Cache-Blocks stammen. Am Cache-Hit/ Miss-Ausgang des Cache-Speichers wird ein Cache-Miss dann signalisiert, wenn für sämtliche Cache-Blöcke der Vergleich aus der Restadresse mit der Markierung der jeweils indizierten Cache-Zelle negativ ist. Beim Schreiben bzw. Lesen eines Datenworts in den bzw. aus dem Cache-Speicher wird im Trivialfall, in dem das dem betreffenden Datenfeld zugeordnete Statusfeld eine gesetzte Schreibbarkeits- bzw. Lesbarkeits-Flagge aufweist, wie folgt verfahren.
Bei Vorhandensein eines Schreibsignals auf der Schreib/ Lese-Leitung ist ein auf dem Datenbus befindliches Datenwort unmittelbar in das durch die Restadresse oder einen Teil davon bestimmte Datenfeld einer durch den Index der Indexereinheit indizierten Cache-Zelle ein-
schreibbar, wenn die Schreibbarkeits-Flagge des dem Datenfeld zugeordneten Statusfeldes gesetzt ist. Bei Vorhandensein eines Lesesignals auf der Schreib/Lese-Leitung ist das Datenwort des durch die Restadresse oder einen Teil davon bestimmten Datenfeldes einer durch den Index der Indexereinheit indizierten Cache-Zelle unmittelbar lesbar, wenn die Lesbarkeits-Flagge des dem Datenfeld zugeordneten Statusfeldes gesetzt ist. Im Anschluß an das Schreiben oder Lesen wird am Cache-Hit/Miss-Ausgang ein Cache-Hit signalisiert.
Sofern vom Prozessor Schreiben signalisiert wird, die Schreibbarkeits-Flagge für das durch die Restadresse oder einen Teil davon bestimmte Datenfeld der durch den Index der Indexereinheit indizierten Cache-Zelle jedoch nicht gesetzt ist, ein Schreiben in das Datenfeld also nicht erlaubt ist, und im Synonym-Indexfeld ein oder mehrere gültige Synonym-Indizes enthalten sind, arbeitet der erfindungsgemäße Cache-Speicher vorzugsweise wie folgt:
Jeder in dem Synonym-Indexfeld der durch den Index der Indexereinheit indizierten Cache-Zelle befindliche gültige Synonym-Index wird über den Indexbus an den jeweils zugeordneten Cache-Block angelegt.
Das auf dem Datenbus befindliche Datenwort wird ungeachtet der nicht gesetzten Schreibbarkeits- Flagge in das Datenfeld der durch den Index der Indexereinheit indizierten Cache-Zelle geschrieben.
Die Schreibbarkeits-Flagge und die Lesbarkeits- Flagge des zu diesem Datenfeld gehörenden Status- feldes werden gesetzt .
Schließlich werden auch die Schreibbarkeits- und die Lesbarkeits-Flaggen in denjenigen Statusfeldern rückgesetzt, die denjenigen Datenfeldern in den durch die Synonym-Indizes indizierten Cache- Zellen zugeordnet sind, die durch die Restadresse oder einen Teil davon bestimmt sind.
Bei einem Lesesignal auf der Schreib/Lese-Leitung und einer nicht gesetzten Lesbarkeits-Flagge in dem Status-feld des diesem zugeordneten und durch die Restadresse oder einen Teil davon bestimmten Datenfeldes der durch den Index der Indexereinheit indizierten Cache-Zelle arbeitet der erfindungsgemäße Cache-Speicher vorzugsweise wie folgt: - Jeder in dem Synonym-Indexfeld der durch den Index der Indexereinheit indizierten Cache-Zelle befindliche gültige Synonym-Index wird über den Indexbus an den jeweils zugeordneten Cache-Block angelegt. - Das Datenwort des durch die Restadresse oder einen Teil davon bestimmten Datenfeldes mindestens einer durch die Synonym-Indizes indizierten Cache-Zellen wird auf den Datenbus gelegt, sofern die diesem Datenfeld zugeordnete Lesbarkeits-Flagge gesetzt ist. Hierbei ist. zu beachten, daß die in diesen Datenfeldern abgelegten Datenworte identisch sind. Für jedes durch die Restadresse oder einen Teil davon bestimmte Datenfeld der durch die Synonym- Indizes indizierten Cache-Zellen wird dafür gesorgt, daß die zugeordnete Schreibbarkeits-Flagge rückgesetzt ist. - Schließlich wird das auf dem Datenbus befindliche Datenwort in das durch die Restadresse oder einen
Teil davon bestimmte Datenfeld der ursprünglich durch den Index der Indexereinheit indizierten Cache-Zelle geschrieben und die Lesbarkeits-Flagge des diesem Datenfeld zugeordneten Statusfeldes gesetzt.
In den beiden zuvor beschriebenen Fällen wird ein Cache-Hit genau dann signalisiert, wenn sämtliche der jeweils aufgeführten Schritte abgearbeitet werden können und sind.
Der Vorzug des erfindungsgemäßen Cache-Speichers besteht in dem schnellen Handling von Synonym-Einträgen. Ein Zugriff auf eine RTB-Aktion im Falle von Synonymen ist nicht erforderlich, wodurch Verarbeitungszeit eingespart wird. Schließlich erfolgt bei einem Synonym-Hit, d.h. bei Vorhandensein von Synonymen, auch kein externer Buszugriff; vielmehr läuft die Synonym-Behandlung intern und schneller ab.
In vorteilhafter Weiterbildung der Erfindung ist vorgesehen, daß der Indexbus mehrere Teilindexbusse aufweist. Die Anzahl dieser Teilindexbusse ist dabei gleich der Anzahl an Cache-Blöcken. An jeden Teilindexbus sind sowohl die Indexereinheit als auch sämtliche Cache-Blöcke angeschlossen. Die Indexereinheit ist mit mehreren Ausgängen zum Liefern jeweils eines Indexes versehen. Dabei ist jeder Ausgang genau mit einem Teilindexbus verbunden. Auch die Cache-Blöcke weisen eine der Anzahl an Indexteilbussen gleichende Anzahl von Eingängen/Ausgängen auf. Dabei weist jeder Cache-Block einen Index-Eingang und mehrere Index-Ausgänge auf. Jeder Indexteilbus ist genau mit einem 'Index-Eingang eines der Cache-Blöcke verbunden. Selbiges gilt für jeden Ausgang der Cache-Blöcke und dessen Verbindung
mit einem Indexteilbus. Der Vorteil der zuvor beschriebenen Indexbusstruktur besteht darin, daß durch die Indexteilbusse die Zuordnung von Indizes der Indexereinheit und von Synonym-Indizes einzelner Cache-Blöcke zu bestimmten Cache-Blöcken durch die Hardware gegeben ist.
Alternativ zu dem obigen Aufbau des Indexbusses kann dieser auch im Multiplex-Betrieb arbeiten, so daß die Zuordnung eines Indexes zu einem Cache-Block zeitgesteuert ist.
Bei dem erfindungsgemäßen Cache-Speicher gemäß der ersten Variante kann es sich entweder um einen Einwort-Cache-Speicher oder um einen Mehrwort-Cache-Speieher handeln. Pro Cache-Zelle können also ein oder mehrere Datenfelder vorgesehen sein. Der Normalfall ist, daß mehrere derartiger Datenfelder pro Cache-Zelle vorhanden sind, um den Datenbus, an den sämtliche Cache-Blöcke angesprochen sind, in seiner Breite nicht zu groß werden zu lassen.
Die oben genannte Aufgabe wird auch durch einen Cache-Speicher mit den Merkmalen des Anspruchs 7 gelöst (zweite Variante). Der Unterschied dieser zweiten Variante gegenüber der zuvor bes-chriebeπeπ ers-ten Variante des Cache-Speichers besteht darin, daß pro Cache-Zelle eines jeden Cache-Blocks statt der Schreib-barkeits- und Lesbarkeits-Flaggen eine Mehrfach-Anzeige vorgesehen ist, die anzeigt, ob Synonym-Indizes im Synonym-Indexfeld existieren oder nicht. Diese Information kann durch eine spezielle Mehrfach-Flagge angezeigt werden oder aber dadurch in einer Cache-Zelle abgelegt sein, daß mindestens einer der Synonym-Indizes gültig ist. Ein zusätzliches Bit für die Mehrfach-Flag-
ge ist also nicht zwingend erforderlich; vielmehr könnten also sämtliche Gültigkeitsbits für die Synonym-Indizes einer logischen ODER-Operation unterzogen werden, um die Mehrfach-Information zu erhalten.
Soll in das Datenfeld oder eines der Datenfelder einer Cache-Zelle mit gesetzter Mehrfach-Flagge geschrieben werden, so wird dieses Datenwort in sämtliche durch den bzw. die Synonym-Indizes des Synonymfeldes dieser Cache-Zelle indizierte Cache-Zellen anderer Cache-Blöcke ebenfalls geschrieben. Diese Organisation des Cache-Speichers hat den Vorteil, daß das Lesen eines Synonyms stets in einem Schritt erfolgen kann, da beim Schreiben in ein Datenfeld mit Synonymen stets auch in die Synonym-Datenfelder geschrieben worden ist. Das wiederum bedeutet, daß eine Schreib-Operation stets zwei Schritte erfordert.
Sofern im Rahmen dieser Erfindung der Begriff "Bus" verwendet wird, meint dies jegliche Art von Übertragungsnetzwerk, über das die daran angeschlossenen Einheiten kommunizieren können. Der "Bus" ist insofern lediglich eine spezielle Form eines Übertragungsnetzwerks. Ferner soll im Rahmen dieser Erfindung mit dem Ausdruck "Adresse" der Name gemeint sein, der einem Realobjekt (z.B. einer' Speicherstelle eines Real-speichers) bzw. einem virtuellen Objekt (z.B. einer Speicherstelle des virtuellen Speichers) zugeordnet ist.
Für den erfindungsgemäßen Cache-Speicher beider Varianten gelten die folgenden Randbedingungen:
Sofern Synonym-Einträge vorhanden sind, befinden sich diese immer in unterschiedlichen Cache-
Blöcken, wobei jeder Cache-Block maximal einen Synonym-Eintrag aufweisen kann. - Jede Cache-Zelle verweist durch ihre gültigen Synonym-Indizes auf die Synonym-Einträge in anderen Cache-Blöcken. - Von sämtlichen Synonym-Eintragen weist maximal einer eine gesetzte Schreibbarkeits-Flagge auf. - Von sämtlichen Synonym-Einträgen weist mindestens einer eine gesetzte Lesbarkeits-Flagge auf. - Sämtliche mit gesetzten Lesbarkeits-Flaggen versehenen Synonym-Einträge sind identisch.
Nachfolgend wird anhand der Figuren ein Ausführungsbeispiel der Erfindung näher erläutert. Im einzelnen zeigen:
Fig. 1 den grundsätzlichen Aufbau eines Cache- Speichers mit interner Synonym-Verwaltung,
Fign. 2 bis 6
den Cache-Speicher gemäß Fig. 1, wobei durch
Hervorhebung einzelner Daten- und Steuerpfade der Nutzdaten- und Steuerdatenfluß während einzelner Phasen einer Schreib- und Lese-Operation angedeutet ist,
Fig. 7 schematisch den Aufbau eines Cache-Blockes des
Cache-Speichers gemäß den Fign. 1 bis 6 und
Fig. 8 schematisch den Aufbau eines herkömmlichen
Cache-Speichers mit map-Funktion.
Anhand von Fig. 1 soll nachfolgend der Aufbau eines Cache-Speichers 10 mit effizienter Synonym-Verarbeitung (nachfolgend auch mit SF-Cache für Synonym-freundlicher Cache-Speicher bezeichnet) beschrieben werden. Der Cache-Speicher weist mehrere Cache-Blöcke 12 auf (im dargestellten Beispiel sind es drei Cache-Blöcke 12), die sämtlich an einem bidirektionalen externen Datenbus 14 angeschlossen sind. Der externe Datenbus 14 führt zu einem (nicht dargestellten) Prozessor. Dieser Prozessor ist an eine Schreib/Lese-Leitung 16 angeschlossen, die mit jedem der Cache-Blöcke 12 verbunden ist. Neben den Cache-Blöcken 12 weist der Cache-Speicher 10 eine Indexereinheit 18 auf, der über einen externen Adreßbus 20 vom Prozessor eine virtuelle Adresse zugeführt wird. In der Indexereinheit 18 wird aus der virtuellen Adresse eine Restadresse erzeugt, die auf einen internen Restadreßbus 22 gelegt wird. Der interne Restadreßbus 22 ist mit den Cache-Blöcken 12 verbunden. Neben der Verbindung über den Restadreßbus 22 sind die Indexereinheit 18 und die Cache-Blöcke 12 zusätzlich über einen Indexbus 24 verbunden, der mehrere Indexteilbusse 26 aufweist. Es existieren so viele Indexteilbusse 26 wie Cache-Blöcke 12 vorhanden sind. Die Indexereinheit 18 und sämtliche der Cache-Blöcke 12 sind mit jedem der Indexteilbusse 26 verbunden. In der Indexereinheit 18 wird aus der virtuellen Adresse neben der Restadresse für jeden Cache-Speicher ein Index erzeugt. Sämtliche dieser Indizes werden auf die Indexteilbusse 26 gelegt. Diese Indizes können für jeden Cache-Block 12 unterschiedlich oder gleich sein; insbesondere ist es auch möglich, daß für einen oder mehrere Cache-Blöcke 12 kein Index erzeugt wird. Während die Indexereinheit 18 auf jeden der Indexteilbusse 26 jeweils einen Index legen kann, ist pro Indexteilbus 26 lediglich ein Cache-Block 12 vorgesehen, der von diesem Indexteilbus
26 den Index übernehmen kann. Dieser Cache-Block 12 kann seinerseits auf die anderen der Indexteilbusse 26 Indizes legen, die dann für andere Cache-Blöcke bestimmt sind. Bei den von einem Cache-Block 12 auf einen der Indexteilbusse 26 gelegten Index handelt es sich um einen Synonym-Index, der auf Synonyme in anderen Cache-Blöcken 12 verweist. Hierauf wird noch weiter unten eingegangen werden. Schließlich sind sämtliche Cache-Blöcke 12 über einen internen Steuerdatenbus 28 miteinander verbunden. Bei Vorhandensein von Synonymen in dem Cache-Speicher 10 legt im Laufe einer Schreib- bzw. Lese-Operation ein über den von der Indexereinheit 18 erzeugten Index bestimmter Cache-Block 12 ein Steuersignal (nachfolgend auch als Step 2-Signal bezeichnet) auf den Steuerdatenbus 28, der dieses Steuersignal an die anderen Cache-Blöcke 12 weitergibt. Auch auf dieses Steuersignal wird noch weiter unten näher eingegangen werden. Bevor auf die Funktionsweise des Cache-Speichers gemäß Fig. 1 eingegangen wird, soll noch anhand von Fig. 7 der interne Aufbau eines Cache-Blocks 12 kurz erläutert werden. Jeder Cache-Block 12 besteht aus einer Vielzahl von Cache-Zellen 30 (auch Cache-Zeilen genannt). Jede Cache-Zeile 30 weist ein Markierungsfeld 32 auf, in dem eine Markierung v' gespeichert ist. Zusätzlich zu dem Markierungsfeld 32 ist jede Cache-Zelle 30 mit einem oder mehreren Datenfeldern 34 versehen (im hier zu beschreibenden Ausführungsbeispiel existieren pro CacheZelle vier Datenfelder 34), in denen Datenworte d0, d1, d2, d3 abspeicherbar sind. Jedem Datenfeld 34 ist ein Statusfeld 36 zugeordnet, wobei jedes Statusfeld 36 eine Schreibbarkeits-Flagge 38 und eine Lesbarkeits-Flagge 40 aufweist. Ist die Schreibbarkeits-Flagge 38 gesetzt, so läßt sich in das dieser Schreibbarkeits-
Flagge 38 zugeordnete Datenfeld 34 ein Datenwort schreiben. Ist die Lesbarkeits-Flagge 40 gesetzt, so läßt sich aus dem zugeordneten Datenfeld 34 das Datenwort lesen. Bei nicht gesetzter Schreibbarkeits-/Les-barkeits-Flagge 38,40 ist eine Schreib- bzw. Leseaktion nicht möglich. Zusätzlich zu dem Markierungsfeld 32, dem oder den Datenfeldern 34 und dem oder den Statusfeldern 36 weist jede Cache-Zelle 30 mindestens ein Synonym-Indexfeld 42 auf (im hier zu beschreibenden Ausführungsbeispiel existieren zwei Synonym-Indexfelder 42). Diese Synonym-Indexfelder 42 dienen der Speicherung von Synonym-Indizes (alias2, alias3), die auf Cache-Zellen in anderen Cache-Blöcken 12 des Cache-Speichers 10 verweisen, in denen Synonyme abgelegt sind. Die Zuordnung eines in einer Cache-Zelle 30 eines (ersten) Cache-Blocks 12 abgelegten Synonym-Index zu einer Cache-Zelle eines anderen (zweiten) Cache-Blocks 12 ergibt sich dadurch, daß der betreffende Synonym-Index auf denjenigen Indexteilbus 26 gelegt wird, von dem der andere (zweite) Cache-Block 12 liest. In Fig. 7 nicht dargestellt sind Validierungs-Bits bzw. -Flaggen, die anzeigen, daß sich in dem bzw. den Synonym-Index-feldern gültige Synonym-Indizes befinden. Gemäß Fig. 7 ist jeder Cache-Block 12 mit einer Vergleichereinheit 44 versehen. Diese Vergleichereinheit 44 hat die Aufgabe, die über den Restadreßbus 22 gelieferte Restadresse (rem virt address) mit der Markierung v' des Markierungsfe des 32 derjenigen Cache-Zelle 30 zu vergleichen, die über den Index c1 innerhalb des Cache-Blocks 12 ausgewählt ist. Dieser Index c1 wird von der Indexereinheit 18 geliefert, die diesen Index c1 aus der virtuellen Adresse (vaddr, siehe Fig. 1) erzeugt. Ist der Vergleich in der Vergleichereinheit 44 positiv, so wird über die Restadresse dasjenige Daten
feld 34 ausgewählt, aus dem gelesen oder in das geschrieben werden soll. Das Schreib- bzw. Lesesignal wird einer internen Steuereinheit 46 über die Leitung 16 zugeführt. Die Steuereinheit 46 ist darüber hinaus mit dem Steuerdatenbus 28 verbunden, um auf diesen ein für die anderen Cache-Blöcke bestimmtes Steuersignal zu legen oder von diesem ein von einem anderen Cache-Block erzeugtes Steuersignal zu empfangen. Schließlich steuert die Steuereinheit 46 auch die Ausgabe der Synonym-Indizes und legt diese auf die betreffenden Indexteilbusse 26 (in Abhängigkeit von der Zuordnung der Synonym-Indizes zu den einzelnen Cache-Blöcken).
Nachfolgend soll anhand der Fign. 2 bis 4 der Ablauf einer Lese-Aktion und anhand der Fign. 5 und 6 der Ablauf einer Schreib-Operation näher erläutert werden. Der Cache-Speicher 10 arbeitet unter der Randbedingung, daß bei Vorhandensein von Synonymen diese auf mehrere Cache-Blöcke 12 verteilt sind, pro Cache-Block 12 also lediglich ein Synonym gespeichert ist.
In der ersten Phase (Step 1) einer Lese-Operation wird vom Prozessor über den Adreßbus 20 die virtuelle Adresse (vaddr) angelegt. Die Indexereinheit 18 erzeugt die Restadresse, die auf den Restadreßbus 22 gelegt wird. Ferner erzeugt die Ihdexereinheit 18 ein oder mehrere Indizes c1 bis c3, die auf die einzelnen Indexteilbusse 26 des Indexbusses 24 gelegt werden. Im in Fig. 2 dargestellten Fall wird der Index cx auf denjenigen Indexteilbus 26 gelegt, von dem ausschließlich der mit Block1 bezeichnete Cache-Block 12 liest. Der diesem Cache-Block1 zugeordnete Index c1 wählt eine bestimmte Cache-Zeile innerhalb dieses Cache-Blocks 12 aus. Die Markierung des Markierungsfeldes dieser Cache-Zeile wird mit der Restadresse verglichen. Ist der Vergleich
positiv, so wird über die Restadresse auch dasjenige der Datenfelder ausgewählt, aus dem gelesen werden soll. Für die weitere Beschreibung sei angenommen, daß die Lesbarkeits-Flagge des diesem Datenfeld zugeordneten Statusfeldes nicht gesetzt ist und daß im Synonym-Indexfeld der angewählten Cache-Zelle gültige Synonym-Indizes gespeichert sind.
Da die Lesbarkeits-Flagge nicht gesetzt ist, darf das Datenwort des Datenfeldes nicht gelesen werden. Da gültige Synonym-Indizes in dieser Cache-Zeile gespeichert sind, werden sie auf die Indexteilbusse 26 gelegt. Durch die Zuordnung der Synonym-Indizes zu den Indexteilbussen 26 wird durch den Cache-Block 12 festgelegt, welcher Synonym-Index für welchen anderen Cache-Block 12 vorgesehen ist. Innerhalb der anderen Cache-Blöcke 12 wird dann anhand des jeweils zugeordneter. Synonym-Indexes eine Cache-Zelle ausgewählt. Ferner erzeugt die Steuereinheit des die Synonym-Indizes auf die Indexteilbusse 26 legenden Cache-Blocks 12 das Steuersignal (Step 2-Signal), das den Steuereinheiten der anderen Cache-Blöcke zugeht. Diese Situation ist in Fig. 3 wiedergegeben. Einer der durch die Synonym-Indizes angesprochenen Cache-Blöcke 12 weist eine durch den betreffenden Synonym-Index indizierte Cache-Zelle auf, derrα durch die Restadresse bestimmtes Datenfeld eine gesetzte Lesbarkeits-Flagge aufweist, womit das in diesem Datenfeld gespeicherte Datenwort lesbar ist. In dem hier zu beschreibenden Fall soll es sich bei diesem Cache-Block um den Block2 handeln. Das Datenwort der Cache-Zelle dieses Blocks2 wird auf den Datei-ous 14 gelegt und vom Prozessor gelesen. Zusätzlich wird dieses Datenwort aber auch von dem ursprünglich angesprochenen ersten
Cache-Block 12 (Block 1 der Figuren) gelesen. Diese Situation ist in Fig. 4 wiedergegeben. Schließlich wird die ursprünglich nicht gesetzte Lesbarkeits-Flagge für das Datenfeld der indizierten Cache-Zelle des Blocks1 gesetzt und die Schreibbarkeits-Flaggen der durch die Restadresse bestimmten Datenfelder der Cache-Zeilen der anderen Blöcke, die durch die Synonym-Indizes bestimmt sind, rückgesetzt. Danach ist die Lese-Operation abgeschlossen und es wird ein Cache-Hit signalisiert.
Für den Fall, daß ein auf dem Datenbus 14 anstehendes Datenwort in ein Datenfeld einer Cache-Zelle innerhalb eines der Cache-Blöcke des Cache-Speichers geschrieben werden soll, wird gemäß Fign. 5 und 6 verfahren. Zunächst wird in der ersten Phase der Schreib-Operation
(Step 1, s. Fig. 5) wie im Falle einer Lese-Operation eine Cache-Zeile eines Cache-Blocks ausgewählt (im in
Fig. 5 gezeigten Fall ist dies eine Cache-Zelle des
Blocks1). Wird dabei festgestellt, daß das durch die Restadresse spezifizierte Datenfeld der Cache-Zeile eine nicht gesetzte Schreibbarkeits-Flagge aufweist, so werden die gültigen Synonym-Indizes der Synonym-Indexfelder dieser Cache-Zeile auf die Indexteilbusse gelegt. Danach erfolgt das Schreiben des auf dem Datenbus anstehenden Datenwortes in das Datenfeld des Blocks1. Der Blocki sendet ein Step 2-Signal an die übrigen Cache-Blöcke. Die Lesbarkeits- und Schreibbarkeits-Flaggen derjenigen Datenfelder, die in den durch die Synonym-Indizes spezifizierten Cache-Zellen der anderen Cache-Blöcke enthalten und durch die Restadresse bestimmt sind, werden sämtlich rückgesetzt, wohingegen die Schreibbarkeits-Flagge und die Lesbarkeits-Flagge des durch die Restadresse bestimmten Datenfeldes der durch den Index der Indexereinheit bestimmten Cache-
Zelle beide gesetzt werden. Anschließend wird Cache-Hit signalisiert.
In den Figuren, insbesondere in Fig. 7, und in der obigen Abhandlung wird zwar ein Mehrwort-Cache-Speieher beschrieben, jedoch sollen nachfolgend anhand eines Einwort-Cache-Speichers, in dem der Datenbus so breit ist, daß er in einem Schritt einen ganzen Cache-Eintrag transportieren kann (jede Zeile weist also lediglich ein Datenfeld auf), nochmals die Besonderheiten der Arbeitsweise des erfindungsgemäßen SF-Cache-Speichers erläutert werden.
Beim SF-Cache-Speicher enthält jede Cache-Zeile (neben verschiedenen Steuerinformationen) nicht nur die assoziierte virtuelle Adresse vci und die Daten dci , sondern- ein 1-bit-Feld readable (Lesebarkeits-Flagge),- ein 1-bit-Feld wri table (Schreibbarkeits-Flagge),- n - 1 Felder alias(j) (für j ≠ i) (Synonym-Indexfelder).
Die Felder aliasci (j) enthalten entweder den Spezialwert keine Adresse oder die Cache-Adresse der Zeile des Blocks j, die ein Synonym der aktuellen Zeile enthält.
Es gelten folgende Invarianzen:
1. Synonym-Einträge befinden sich immer in unterschiedlichen Cache-Blöcken.
2. Jede Cache-Zeile "weiß", wo sämtliche ihrer im Cache-Speicher befindlichen Synonym-Einträge sind.
3. Maximal einer von sämtlichen synonymen Cache-Einträgen ist wri table.
4. Mindestens einer von sämtlichen synonymen Cache- Einträgen ist readable.
5. Alle readaJble synonymen Cache-Einträge haben den gleichen Datenwert.
Jeder Cache-Block ist eine eigenständig operierende Einheit. Im folgenden ist die Reaktion des Blocks i abhängig von seinen Eingangssignalen beschrieben. Dabei sind jeweils links von → die Vorraussetzungen für die rechts davon beschriebenen Operationen aufgeführt. Zur Anwahl einer Alternative müssen alle dafür aufgeführten Voraussetzungen erfüllt sein (und-Verknüpfung). Alle durch Komma getrennte Operationen erfolgen parallel; das Taktende wird durch □ angezeigt. Bei zweitaktigen Alternativen wird der zweite Schritt unabhängig von den dann gesetzten Steuersignalen durchgeführt. ÜberStreichung (wie
bezeichnet die Negation eines Signals bzw. eines Bits,
das Setzen und step2 ! das Zurücksetzen eines Signals bzw. eines Bits. D bezeichnet den Datenbus, V die vom Prozessor kommende virtuelle Adresse und V den Cache-internen virtuellen Adreßbus, auf den der Indexer die restliche virtuelle Adresse legt, die die Cache-Blöcke für die Trefferprüfung benötigen.
Das hit-Signal (in den Figuren nicht aufgeführt) signalisiert dem Prozessor den erfolgreichen Abschluß einer Lese- oder Schreib-Operatiön. Ist am Ende eines Taktes weder hi t noch step2 gesetzt, wird dem Prozessor damit ein Miss signalisiert.
Wenn eine Cache-Zeile k Worte (gemessen am Datenbus) oder, anders ausgedrückt, k Datenfelder enthält, werden die readable und wri table Bits pro Datenfeld geführt. Das entsprechende Datenfeld wird über den niederwertigen Teil
der angelegten virtuellen Adresse V bzw. über die Restadresse bzw. einen Teil davon ausgewählt. Die Reaktion des Cache-Blocks i ist dann:
Man beachte, daß die aktuell gültigen Worte eines Cache-Objekts jetzt über mehrere Blöcke verstreut sein können. Die oben aufgeführten Invarianzen gelten jetzt wortweise.
Unabhängig von der SF-Eigenschaft kann der Indexer alternativ auch schon im ersten Schritt verschiedene Zeilen der einzelnen Cache-Blöcke adressieren, um Clashes zu vermeiden. Je nach der eingesetzten map-Funktion muß dann der Adreßbus V erweitert werden.
Auf eine vereinfachte Variante des Cache-Speichers wird im folgenden noch kurz eingegangen. Bei diesem vereinfachten SF-Cache-Speicher wird auf das Feld readable verzichtet und anstelle des Feldes writable ein Feld shared verwendet. Der Cache-Block i operiert dann folgendermaßer (hier wird gleich die Mehrwort-Version beschrieben):
Es gilt: shared ist genau dann gesetzt, wenn mindestens ein alias
ci (j) eine echte Adresse enthält. Also kann anstelle des shared-Feldes im Cache-Speicher auch eine Schaltung benutzt werden, die
bildet (∅ bezeichnet den Wert keine Adresse) . Man beachte, daß Schreiben hier immer zwei Schritte kostet, wenn sich ein Synonym im Speicher befindet, Lesen aber in jedem Fall in einem Schrirt abgehandelt werden kann.