-
Die vorliegende Erfindung bezieht sich auf einen Tandem-
Cache-Speicher, der ein Cache-Speicher ist, der zwei Cache-
Speicher aufweist, welche parallel arbeiten und sich
gegenseitig unterstützen, und zwar zum Zweck des schnellen
Bedienens von Informationsanforderungen, die durch einen
Prozessor ausgegeben werden.
-
Es ist bekannt, daß bei den modernen
Datenverarbeitungssystemen, und um die Leistung zu erhöhen, die durch den
"Flaschenhals" der Zugriffszeit auf einen Arbeitsspeicher durch
einen Systembus wesentlich begrenzt ist, Pufferspeicher oder
"Cache-Speicher" verwendet werden, von denen jeder mit einem
Prozessor in dem System gekoppelt ist. Jeder Cache speichert
Informationen, die von dem entsprechenden Prozessor zuletzt
verwendet worden sind, und liefert solche Informationen auf
eine Prozessoranforderung hin, ohne daß auf den Systembus
zugegriffen werden muß.
-
Mehrere Cache-Speicher werden auch verwendet, um ihren
Wirkungsgrad zu verbessern. Jeder ist dafür vorgesehen, um eine
spezielle Art von Informationen zu speichern. Insbesondere
ist es bekannt, ein Paar von Cache-Speichern jeweils zum
Speichern von Daten und Befehlen zu verwenden. Ferner ist
auch die Verwendung von hierarchischen Cache-Speichern
bekannt.
-
Im gegenwärtigen Stand der Technik können zwei Arten von
Cache-Speichern unterschieden werden:
-
- Cache-Speicher zum Speichern von zuletzt verwendeten
unabhängigen Informationsblöcken;
-
- Cache-Speicher zum Speichern von sequentiellen
Informationsblöcken, von denen erwartet wird, daß sie verwendet
werden.
-
Die Cache-Speicher der ersten Art umfassen im wesentlichen
ein "Verzeichnis" oder eine Liste von Blockadressen und
einen Speicher, der die Informationsblöcke speichert, deren
Adresse in dem Verzeichnis aufgelistet ist. Die Adresse des
Blocks ist das Adressenfeld, das allen Adressen der
Informationspunkte in dem Block gemeinsam ist.
-
Die Informationspunkte in dem gleichen Block sind
"aneinander angrenzend", und zwar in dem Sinn, daß sich ihre
Adressen lediglich in den niederstwertigen Adressbits
unterscheiden (ihre Anzahl hängt von der Blockgröße ab), daß jedoch
die Adressen der einzelnen Blöcke völlig unabhängig
voneinander sind.
-
Der Betrieb der ersten Art von Cache-Speichern ist bekannt:
Wenn ein Prozessor Informationen bei einer gegebenen Adresse
anfordert, wird die Adresse mit den Adressen, die in dem
Cache-Verzeichnis gespeichert sind, verglichen. Wenn
dieselbe mit einer solcher Adresse übereinstimmt, sind die
angeforderten Informationen in dem Cache gespeichert und
können aus demselben gelesen werden.
-
Andernfalls fordert der Cache einen Informationsblock, der
die Informationen enthält, von dem Arbeitsspeicher (über den
Systembus) an. Sobald der Block in dem Cache gespeichert
ist, liefert der Cache die angeforderten Informationen zu
der Verarbeitungseinheit, wobei eine Verzögerung oder
Latenzzeit vorhanden ist, die der Zeit entspricht, die
benötigt wird, um den ganzen Block zu lesen, oder im besten Fall
(für sehr ausgefeilte Cache-Speicher) die der Zeit
entspricht, die benötigt wird, um den vorausgehenden
Blockabschnitt zu lesen, welcher die angeforderten Informationen
enthält.
-
In jedem Fall kann der Cache nicht weiter von dem Prozessor
verwendet werden, selbst wenn die angeforderten
Informationen zu dem Prozessor geliefert werden, sobald sie in dem
Cache verfügbar sind, und derselbe ist für die gesamte Zeit,
die benötigt wird, um den ganzen Block zu laden, "latent".
-
Die Latenzzeit kann ferner vergrößert werden, wenn dem Laden
des Blocks eine "Ersetzungs"-operation vorausgehen muß, d.h.
durch das Speichern der Informationen, die in einer
bestimmten Zone des Cache gespeichert sind, in dem Arbeitsspeicher,
um in dem Cache einen Platz für den neuen Informationsblock
freizumachen.
-
Die erste Art von Cache-Speichern liefert trotz der oben
erwähnten Begrenzungen den bemerkenswerten Vorteil, daß,
solange die angeforderten Informationen in dem Cache enthalten
sind, dieselben zu dem Prozessor auf eine schnelle Art und
Weise und eine unbegrenzte Anzahl von Malen geliefert werden
können, und zwar unabhängig von der Reihenfolge, in der
Informationspunkte angefordert werden.
-
Der Cache der zweiten Art arbeitet auf eine unterschiedliche
Art und Weise. Dieselben weisen eine Kapazität auf, die auf
ein paar Blocks begrenzt sind (üblicherweise zwei oder
vier), auf die durch streng sequentielle Adressen in
aufsteigender Reihenfolge verwiesen wird. Ein Cache dieser Art
ist beispielsweise in der Europäischen Veröffentlichung
EP-A-0293720 beschrieben.
-
Gemäß dieser Anmeldung wird, wenn Informationen angefordert
werden, welche nicht in dem Cache enthalten sind, der Cache
mit dem Block geladen, der die angeforderten Informationen
enthält, und zusätzlich mit dem nächsten Block, der in der
Reihenfolge folgt. Die angeforderten Informationen werden zu
dem anfordernden Prozessor, sobald sie verfügbar sind,
geliefert. Wenn die angeforderten Informationen in einem Block
sind, der bereits in dem Cache enthalten ist, wenn jedoch
der nächste folgende Block nicht in dem Cache enthalten ist,
dann liefert der Cache die angeforderten Informationen ohne
Verzögerung zu dem anfordernden Prozessor.
-
Zusätzlich ruft der Cache den nächsten folgenden Block von
dem Arbeitsspeicher ab und speichert denselben.
-
Solange daher die Informationspunkte, die aufeinanderfolgend
angefordert werden, in fortlaufenden und aufsteigenden
Adressen geordnet sind, werden sie sehr schnell von dem
Cache geliefert, der sie bereits von dem Arbeitsspeicher
erhalten hat, und zwar mit "Vorabruf"-Operationen. Dieser
Vorteil wird offensichtlich in dem Falle von "Sprüngen"
verloren. Zusätzlich müssen Informationen in dem Fall, in dem
die gleichen Informationen aufeinanderfolgend angefordert
werden, wieder aus dem Arbeitsspeicher gelesen werden, was
folglich zu einer Besetzung der Betriebsmittel (des
Arbeitsspeichers und des Systembusses) führt.
-
Das Dokument IBM TECHNICAL DISCLOSURE BULLETIN, Bd. 31, Nr.
3, August 1988, New York, S. 303 - 306: "High performance
microprocessor memory system" offenbart eine
Vorabrufeinheit, die den Cache-Speichern der zweiten Art ähnlich ist,
welche auf vorteilhafte Weise in Kombination mit einem
Mikroprozessor-Cache-System der ersten Art verwendet werden
kann.
-
Die Vorabrufeinheit und der Mikroprozessor-Cache würden von
einem architekturellen Standpunkt aus hierarchisch
Kaskaden-verbunden oder -strukturiert sein, wie es vorher erwähnt
wurde. Die erste Art würde zwischen den Mikroprozessor und
den Systembus geschaltet sein, während die zweite Art
zwischen den Systembus und den Speicher geschaltet werden
würde.
-
Immer wenn ein Fehlschlag ("MISS") in dem Cache-Speicher der
ersten Art auftritt, würde als Ergebnis eine Speicherlesen-
Anforderung durch den Systembus zu dem Speichersystem
gesendet werden, und, wenn die angeforderten Informationen in dem
Cache der zweiten Art verfügbar sind, würden dieselben zu
dem Mikroprozessor und zu dem Cache der ersten Art viel
schneller gesendet werden, als wenn sie ursprünglich von dem
Speicher in die Vorabrufeinheit gelesen werden müßten.
-
Es wird jedoch ein Systembus mit einer möglichen
Konkurrenzsituation und der damit verbundenen Latenzzeit benötigt
werden, wodurch immer eine relativ lange
Übertragungsverzögerung aufgrund des Systembusses vorhanden sein wird.
-
Zusätzlich würde im Falle eines Mehrprozessorsystems oder
selbst im Falle, in dem Einheiten einen direkten
Speicherzugriff haben, das sequentielle Vorabrufen, das durch die
Vorabrufeinheit geschaffen wird, keinen wesentlichen Vorteil
bieten, da Speicherzugriffe von den mehreren Prozessoren
(oder Einheiten) vermischt sind und die Sequenzialität von
Adressen bei den Speicherzugriffen im allgemeinen verloren
wird.
-
Die US-A-4,443,488 beschreibt ein Cache-Speichersystem,
welches bis zu einem gewissen Grad die Funktionen der Cache-
Speicher der ersten Art und der Cache-Speicher der zweiten
Art durch Aufteilen des Cache in eine Mehrzahl von Regionen
kombiniert. In jeder Region werden Informationen in
sequentieller Reihenfolge vorabgerufen, wobei die Informationen,
die in jeder Region gespeichert sind, unabhängig von denen
in den anderen Regionen adressiert werden.
-
Die Anordnung ist sehr kompliziert und resultiert sehr oft
in einer Teilausnutzung der gesamten Größe des
Cache-Speichers, da die Regionen eine feste Größe haben müssen,
wohingegen die Informationssequenzen, die in denselben
gespeichert sind, eine variable Länge aufweisen, welche im
allgemeinen kürzer als die feste Größe ist.
-
Ferner wird der Cache-Speicherzyklus, um es zu ermöglichen,
daß der Cache gelesen wird, selbst wenn der Cache-Speicher
sequentiell zu aufeinanderfolgenden Zeitpunkten eine
Mehrzahl von seguentiellen Informationsblöcken lädt, in zwei
halbe Zyklen aufgeteilt, während denen der Cache jeweils
gelesen bzw. beschrieben wird. Als Folge wird der Cache
inhärent
durch eine Latenzzeit betroffen, welche zwar kurz aber
nicht vernachlässigbar ist.
-
Die Erfindung ist in Anspruch 1 definiert.
-
Die vorliegende Erfindung überwindet die Nachteile der Art
von Cache-Speichern, welche vorher beschrieben wurden, indem
ein cache-Speichersystem geschaffen wird, welches im
folgenden als Tandem-Cache bezeichnet wird, welches tatsächlich
aus zwei Cache-Speichern besteht, welche gekoppelt sind, um
parallel zu arbeiten, und welche beide zwischen einem
Prozessor und dem Systembus positioniert sind.
-
Ein erster Cache mit einer relativ hohen Kapazität ist
organisiert, um eine Mehrzahl von unabhängigen Blöcken von
Informationspunkten zu speichern. Der zweite Cache ist
organisiert, um eine begrenzte Anzahl von Blöcken, vorzugsweise
vier, aus sequentiellen Informationspunkten zu speichern.
-
Der erste Cache weist einen Adresseneingang auf, der mit dem
Adresseneingang des zweiten Cache verbunden ist, während
sein Informationen-Eingang/Ausgang mit dem
Informationenausgang des zweiten Cache verbunden ist.
-
Wenn ein Prozessor Informationen anfordert, welche in beiden
Cache-Speichern nicht verfügbar sind, führt der zweite Cache
aufeinanderfolgende Leseoperationen durch und ruft den
Block, der die angeforderten Informationen enthält, und die
Blöcke mit aufeinanderfolgenden Adressen in aufsteigender
Reihenfolge von einem Arbeitsspeicher ab, wobei dieselben in
geeignete Register geladen werden, die angeordnet sind, um
einen Puffer zu bilden.
-
Sobald die angeforderten Informationen verfügbar sind,
werden sie zu dem anfordernden Prozessor weitergeleitet, wobei
zum gleichen Zeitpunkt der Block, der dieselben enthält, in
den ersten Cache geladen wird.
-
Die Informationsblöcke mit aufeinanderfolgenden Adressen
werden nicht in dem ersten Cache gespeichert, was den
Vorteil hat, daß der erste Cache frei bleibt, um auf
nachfolgende Anforderungen von dem Prozessor zu antworten.
-
Das Latenzproblem wird daher vermieden, und der erste Cache
wird nicht mit Informationen gefüllt, deren folgende
Verwendung nicht sicher ist.
-
Daher wird sogar das sog. "Trefferverhältnis" erhöht.
-
Wenn ein Prozessor einen Informationspunkt anfordert, der
nicht in dem ersten Cache enthalten ist, der jedoch in dem
zweiten enthalten ist, liefert der zweite Cache denselben
unmittelbar und überträgt zum gleichen Zeitpunkt den Block,
der die angeforderten Informationen enthält, zu dem ersten
Cache.
-
Wenn ferner ein Raum, der ausreichend ist, um eine Mehrzahl
von Blöcken zu enthalten, in dem zweiten Cache als Ergebnis
einer solchen Übertragung frei wird, wird eine Mehrzahl von
Blöcken aus dem Arbeitsspeicher in einem Stoßbetrieb
("Burst"-Betrieb) gelesen und in dem freien Raum
gespeichert, ohne daß die Operation des ersten Cache gestört wird.
-
Wenn die angeforderten Informationen in dem ersten Cache
verfügbar sind, werden sie zu dem anfordernden Prozessor
geliefert, und der zweite Cache bleibt inaktiv.
-
Die Merkmale und die Vorteile der Erfindung werden aus der
folgenden Beschreibung einer bevorzugten Form eines
Ausführungsbeispiels und aus den beigefügten Zeichnungen
offensichtlicher.
-
Fig. 1 zeigt in Blockdiagrammform ein
Datenverarbeitungssystem, das einen Tandem-Cache-Speicher gemäß der
Erfindung aufweist.
-
Fig. 2 zeigt in Blockdiagrammform die Architektur eines
Tandem-Cache-Speichers gemäß der Erfindung.
-
Fig. 3 und 4 zeigen in Logikflußdiagrammform den Betrieb und die
Zustände, die von dem Cache-Speicher von Fig. 2 und
von seiner verbundenen Steuerlogik eingenommen
werden.
-
Fig. 1 zeigt in Blockdiagrammform ein
Datenverarbeitungssystem, das den Tandem-Cache-Speicher der vorliegenden
Erfindung aufweist.
-
Das System umfaßt einen Prozessor 1, der eine
Speicherverwaltungseinheit aufweist, den Tandem-Cache-Speicher 2, einen
Arbeitsspeicher 3 und mindestens eine
Eingabe/Ausgabe-Steuerung I/OC 4 (I/OC = Input/Output Controller).
-
Ein Systembus 5, welcher einen Satz von Leitungen ABUS (ABUS
= Adressenbus) zum Übertragen von Adressen, einen Satz von
Leitungen DBUS (DBUS = Datenbus) zum Übertragen von Daten
oder Befehlen und einen Satz von Leitungen CBUS (CBUS =
Steuerbus) zum Übertragen von Steuersignalen aufweist,
bildet einen Kommunikationsweg für den Prozessor 1, den
Arbeitsspeicher 3 und die I/OC 4. Die Kommunikation zwischen
dem Prozessor 1 und dem Bus 5, damit derselbe einen Zugriff
auf den Arbeitsspeicher hat, tritt durch den Cache-Speicher
2 auf. Vorzugsweise, jedoch nicht notwendigerweise ist der
Cache-Speicher nur zum Speichern von Befehlen und zum
Abrufen derselben von dem Arbeitsspeicher gedacht.
-
Daten-Lesen/Schreiben-Operationen in dem Arbeitsspeicher,
die durch den Prozessor 1 angefordert werden, werden durch
eine Schnittstelleneinheit 6 durchgeführt, welche wiederum
einen Datencache enthalten kann.
-
Auf diese Art und Weise der Architektur kann der Tandem-
Cache-Speicher 2 auf eine sehr einfache Art und Weise
implementiert und auf eine ohne weiteres verständliche Art und
Weise beschrieben werden.
-
Der Cache-Speicher 2 umfaßt einen ersten Cache 7 mit einer
relativ hohen Kapazität, einen zweiten Vorabruf-Cache 8 und
zwei Sätze von Logikgattern 9, 10 zur Verbindung mit dem Bus
5.
-
Insbesondere verbinden die Gatter 9 die Cache-Speicher 7, 8
mit dem Adressenbus ABUS, während die Gatter 10 den Cache 8
mit dem Datenbus DBUS verbinden.
-
Die beiden Cache-Speicher 7, 8 empfangen durch einen Kanal
11 Leseadressen, die durch den Prozessor 1 erzeugt werden.
-
Wenn in dem Cache 7 ein Treffer auftritt, sendet der Cache 7
ein aktiviertes Signal HIT (HIT = Treffer) über eine Leitung
12 zu dem Cache 8.
-
Derselbe sendet ferner den angeforderten Befehl über einen
Kanal 14 (DATA; DATA = Daten) zu dem Prozessor 1.
-
Vorzugsweise, jedoch nicht notwendigerweise, weisen der
Kanal 14, der Datenbus DBUS und der Arbeitsspeicher 3 einen
Vier-Byte-Parallelismus auf.
-
Vier Byte ist ferner die Blockgröße in den Cache-Speichern
7, 8.
-
Aus Klarheits- und Einfachheitgründen wird ferner
angenommen, daß die Befehle aus Vier-Byte-Worten bestehen und immer
ausgerichtet sind (d.h. die zwei niederstwertigen
Adressenbits der Befehle sind immer Null).
-
Im Falle eines Fehlschlags sendet der Cache 7 ein
deaktiviertes Signal HIT zu dem Cache 8.
-
Wenn der Befehl, auf den durch die Leseadresse in dem Kanal
11 verwiesen wird, in dem Cache 8 gespeichert ist, sendet
der Cache 8 die angeforderten Informationen über den Kanal
14 zu dem Prozessor 1.
-
Zusätzlich steuert derselbe den Cache 7 über die
Steuerleitung 15, um die gleichen Informationen zu dem Cache 7 über
den Kanal 14 zu übertragen.
-
Wenn ferner in dem Cache 8 ein bestimmter Platz zum
Speichern einer Mehrzahl von Informationsblöcken verfügbar ist,
erzeugt der Cache 8 in einem bidirektionalen Kanal 16 die
Adressen der Blöcke, die als nächstes denen folgen, die
bereits in dem Cache 8 gespeichert sind, fordert der Cache 8
einen Zugriff auf den Systembus (über Steuerleitungen 117)
und steuert der Cache, sobald er denselbe erhalten hat, eine
Sequenz von Speicherlesen-Operationen im Stoßbetrieb,
wodurch die empfangenen Informationen in den verfügbaren Raum
geladen werden.
-
Die Informationen werden über Gatter 10 und einen Kanal 17
empfangen.
-
Wenn der Befehl, der durch den Prozessor 1 angefordert wird,
sowohl in dem Cache 7 als auch in dem Cache 8 nicht
vorhanden ist, arbeitet der Cache 8, wie es vorher beschrieben
wurde, um von dem Arbeitsspeicher den Block, der den
angeforderten Befehl enthält, und eine Mehrzahl von nächsten
folgenden geordneten Blöcken abzurufen.
-
Sobald der Block, der die angeforderten Informationen
enthält, von dem Cache 8 empfangen wird, wird derselbe zu dem
Prozessor 1 gesendet und gleichzeitig in den Cache 7
geladen.
-
Bidirektionale Gatter 9, die durch den Cache 18 zum
Empfangen von Adressen von dem Systembus geeignet gesteuert
werden, versetzen die zwei Cache-Speicher 7, 8 in die Lage,
systematisch "Busüberwachungs"-Operationen durchzuführen.
-
Selbst wenn die cache-Speicher 7, 8 lediglich zum Speichern
von Befehlen, d.h. Informationen, die allgemein nicht
modifiziert werden können, gedacht sind, ist es ratsam, die
Blöcke, die in beiden Cache-Speichern gespeichert sind,
jedesmal ungültig zu machen, wenn die entsprechenden Blöcke,
die in dem Speicher 3 gespeichert sind, durch andere
Informationen ersetzt werden.
-
Für diesen Zweck kann der Cache 8 über den Kanal 171
erfassen, ob eine Speicherschreibenoperation durch den Systembus
angefordert worden ist.
-
Wenn diese Situation auftritt, werden die Gatter 9
gesteuert, um die Schreibenadresse, die auf dem Bus 5 vorhanden
ist, zu dem Cache 7 und zu dem Cache 8 (durch den Kanal 16)
zu übertragen.
-
Beide Cache-Speicher überprüfen, ob der Block i, auf den
verwiesen wurde, in demselben vorhanden ist, und, wenn dies
der Fall ist, machen dieselben den Block ungültig.
-
Diese Operation ist als "Busüberwachung" oder "Schnuppern"
bekannt.
-
Der Cache 7 ist für sich betrachtet bekannt und herkömmlich.
-
Er verdient daher keine weitere Erklärung.
-
Fig. 2 zeigt in Blockdiagrammform und detaillierter ein
bevorzugtes Ausführungsbeispiel des Cache 8.
-
Der Cache 8 umfaßt eine Logiksequenzereinrichtung SQC 18
(SQC = Logical Sequencer), welche als logische finite
Zustandsmaschine implementiert sein kann, einen Befehlspuffer
IPB 19 (IPB = Instruction Buffer), in dem eine Mehrzahl von
sequentiellen Blöcken von Befehlen gespeichert werden kann,
ein Register IPBP 21 zum Speichern der Adressen des ersten
der Blöcke, welche gerade in dem Puffer 19 gespeichert sind,
ein Zählerregister IPBL 22, eine
Adressenvergleichslogikeinheit 23, einen Multiplexer 20 und einen Satz von
Drei-Zustands-Gattern 35.
-
Die Vergleichslogikeinheit 23 umfaßt ein UND-Gatter 34, eine
Subtrahiereinrichtung 31 und zwei Komparatoren 32, 33.
-
Die Subtrahiereinrichtung 31 weist Eingänge auf, die mit den
Ausgängen der Register 21 und 22 verbunden sind.
-
Der Komparator 32 weist Eingänge auf, die jeweils mit dem
Ausgang des Multiplexers 20 und mit dem Ausgang des
Registers 21 verbunden sind.
-
Der Ausgang des Komparators 32 ist mit einem ersten Eingang
eines UND-Gatters 34 verbunden.
-
Der Komparator 33 weist Eingänge auf, die jeweils mit dem
Ausgang des Multiplexers 20 und mit dem Ausgang des
Zählerregisters 22 verbunden sind. Sein Ausgang ist mit einem
zweiten Eingang eines UND-Gatters 34 verbunden.
-
Der Puffer 19 umfaßt vier Register 24, 25, 26, 27, von denen
jedes 32 Bit aufweist, und wobei die Eingänge mit dem Kanal
17 (welcher wiederum mit dem Datenbus des Systembusses 5
über die Gatter 10 verbunden ist), mit einem Decodierer 30
und mit einem Multiplexer 28 verbunden sind.
-
Der Ausgang jedes Registers ist mit einem Eingang des
Multiplexers 28, der vier Eingänge aufweist, verbunden.
-
Der Ausgang des Multiplexers 28 ist mit dem Kanal 14
verbunden.
-
Der Multiplexer 28 wird durch einen Auswahlcode SC (SC =
Selection Code) gesteuert, der aus den zwei niederstwertigen
Bits in dem Ausgangssignal von dem Multiplexer 20 besteht.
-
Der Code SC gibt auf gegenseitig exklusive Art und Weise
einen der Eingänge frei, damit er mit dem Ausgang verbunden
wird.
-
Der Ausgang des Multiplexers 28 wird durch ein Signal EN1
freigegeben (EN = Enable), das durch die
Sequenzereinrichtung 18 erzeugt wird.
-
Der Decodierer 30 weist einen Eingang auf, der mit dem
Ausgang des Zählerregisters 22 verbunden ist, und derselbe
empfängt die niederstwertigen Bits des Ausgangssignals des
Registers 22. Der Decodierer 30 gibt auf gegenseitig exklusive
Art und Weise eines von vier Auswahlsignalen SL1, SL2, SL3,
SL4 aus, wobei jedes das Laden eines der vier Register 24,
25, 26, 27 freigibt.
-
Das Laden wird durch ein Signal LD (LD = Load) gesteuert,
das durch die Sequenzereinrichtung 18 erzeugt wird.
-
Der erste Eingangssatz des Multiplexers 20 ist mit dem Kanal
11 verbunden, wohingegen der zweite Eingangssatz mit dem
Kanal 16 verbunden ist.
-
Ein Signal BW, das durch die Sequenzereinrichtung 18 erzeugt
wird, versetzt den Multiplexer 20 in die Lage, an seinem
Ausgang die Informationen zu übertragen, die auf dem Kanal
16 vorhanden sind, wenn die "Busüberwachung" erfaßt, daß
Schreibeoperationen auf dem Systembus auftreten.
-
Der Ausgang des Multiplexers 20 ist mit dem Eingang der zwei
Register 21, 22 und ferner mit jeweils einem Eingang der
Komparatoren 32, 33 verbunden.
-
Die Register 21, 22 werden jeweils durch parallele
Ladesignale LD1, LD2 und durch ein Initialisierungsrilcksetzsignal
RST (RST = Reset) gesteuert.
-
Das Register 22 wird ferner durch ein
Inkrementierungssteuersignal
INCR gesteuert.
-
Alle diese Signale werden durch die Sequenzereinrichtung 18
erzeugt.
-
Der Ausgang des Zählerregisters 22 ist mit dem Kanal 16 über
die Gatter 35 verbunden.
-
Die Gatter 35 sind normalerweise freigegeben, um Adressen
durch ein Signal NBW (BW-negiert) zu dem Kanal 16 zu
übertragen.
-
Aus Klarheitsgründen und aufgrund der Konsistenz mit der
Annahme, daß die Befehle immer ausgerichtet sind und mit einem
Informationsblock zusammenfallen, und da ferner der
Parallelismus des Arbeitsspeichers und des Datenkanals gleich der
Größe eines Informationsblocks ist, sind die Adressen, die
auf dem Kanal 11 und dem Kanal 16 vorhanden sind, sowie die,
die an dem Ausgang der Register 21, 22 vorhanden sind,
Blockadressen, weshalb dieselben die zwei niederstwertigen
Adressenbits nicht aufweisen, welche auf ein "Byte" in dem
Informationsblock verweisen.
-
Somit bilden die zwei niederstwertigen Bits der Blockadresse
an dem Ausgang des Multiplexers 20 den Auswahlcode SC,
wohingegen die zwei niederstwertigen Bits in dem
Ausgangssignal von dem Register 22 und dem Eingangssignal in den
Decodierer 30 einen Auswahlcode SC zum Schreiben in eines der
Register 24, 25, 26, 27 bilden.
-
Die Subtrahiereinrichtung 31 subtrahiert den Inhalt des
Registers 21 von dem Inhalt des Registers 22 und signalisiert
der Sequenzereinrichtung 18 durch einen Drei-Bit-Code DIF,
was die Differenz zwischen den beiden Inhalten ist.
-
Die Sequenzereinrichtung 18 empfängt das Signal HIT von dem
Cache 7 und tauscht Steuersignale mit dem Systembus 5 aus.
Diese Signale sind nicht detailliert, da sie offensichtlich
von dem Systembusprotokoll abhängen, wobei es möglich ist,
irgendeines einer Mehrzahl von Standard- oder
Nicht-Standard-Protokollen, welche in der Technik bekannt sind,
auszuwählen.
-
Die Sequenzereinrichtung 18 empfängt ferner ein Signal HIT1
von dem Gatter 34 und ein periodisches Taktsignal CK (CK =
Clock) von einem Oszillator 18A.
-
Besser als irgendeine Schaltungsbeschreibung verdeutlichen
die Flußdiagramme der Fig. 3 und 4 die Architektur der
Sequenzereinrichtung 18 als eine finite Zustandsmaschine, die
gemäß vorbestimmten Logikf lüssen arbeitet, wodurch der
Betrieb des Cache 8 offensichtlich wird.
-
Der Cache 8, welcher normalerweise inaktiv ist, wird durch
zwei externe Ereignisse getriggert: das deaktivierte Signal
HIT von dem Cache 7 zusammen mit Signalen, die von dem
Prozessor 1 erzeugt werden, wie z.B. AS, einem
Adressenprüfungssignal, und FCO, einem Signal zum Qualifizieren der
Adresse als eine Befehlsadresse, oder durch einen
Schreibenbefehl SBW auf dem Bus 5, der mit einem
Adressenprüfungssignal SBAS auf dem Systembus gekoppelt ist. Die in den beiden
Fällen durchgeführten Operationen sind jeweils in Fig. 3 und
Fig. 4 gezeigt.
-
In Fig. 3 springt der Cache 8 von einem anfänglichen Zustand
IDLE (IDLE = Leerlauf) (Block 100) zu einem ersten aktiven
Zustand 101 aufgrund der externen Signale AS, FCO, NHIT.
-
Wenn die Sequenzereinrichtung 18 in diesem Zustand ist,
überprüft sie, ob das Signal HIT1 aktiviert ist oder nicht.
-
Wenn HIT1 deaktiviert ist, bedeutet dies, daß die Adresse,
die in dem Kanal 11 über den Multiplexer 20 empfangen worden
ist, nicht größer oder gleich der Adresse ist, die in dem
Register 21 ist, und nicht kleiner als die Adresse ist, die
in dem Register 22 gespeichert ist.
-
Diese Bedingung ist beispielsweise die Bedingung, welche
nach einer Initialisierung auftritt, welche die Register 21
und 22 zurücksetzt.
-
Wenn HIT1 deaktiviert ist, lädt die Sequenzereinrichtung 18
die auf dem Kanal 11 vorhandene Adresse mittels der Befehle
LD1, LD2 in die Register 21 und 22.
-
Es kann angemerkt werden, daß diese Operation nicht den
Zustand des Signals HITL verändert.
-
Der Code DIF, der von der Subtrahiereinrichtung 31 erzeugt
wird, ist bei diesem Beispiel 000, was signalisiert, daß
sich die in den beiden Registern 21, 22 gespeicherten
Adresse um einen Betrag von 0 unterscheidet.
-
Daher kann eine Mehrzahl von Blöcken von dem Arbeitsspeicher
abgerufen und in den Puffer 19 geladen werden.
-
Die Sequenzereinrichtung 18 ist ferner vorgesehen, um einen
Zugriff auf den Systembus 5 anzufordern, indem ein
geeignetes Flip-Flop eingestellt wird, was anzeigt, daß eine
Busanforderung BRQ schwebend ist (Block 102), wonach die
sequenzereinrichtung 18 in einen Busanforderungs- und
Entscheidungs-Zustand 103 springt, in dem dieselbe darauf wartet
einen Zugriff zu erhalten.
-
Wenn während eines solchen Wartens ein bestimmter
Schreibebefehl auf dem Systembus auftritt, wie es durch die
aktivierten Signale SBW und SBAS gezeigt ist, verläßt die
Sequenzereinrichtung 18 den Zustand 103 und springt zu einem
Zustand 104, welcher nachfolgend erläutert wird.
-
Sobald ein Zugriff auf den Bus 5 erhalten ist, wie es
beispielsweise durch ein aktiviertes Signal BGRANT gezeigt sein
kann, springt die Sequenzereinrichtung 18 in einen Zustand
105 und steuert eine Arbeitsspeicher-Leseoperation in einem
Stoßbetrieb durch Aktivieren eines Signals SBRBURST, wobei
ein Code NBURST die Anzahl von Blöcken anzeigt, die gelesen
werden sollen (bei dem Beispiel ist NBURST das Komplement zu
4 des Codes DIF), und durch Rücksetzen des Indikator-Flip-
Flops für eine schwebende Anforderung (Signal RSBRQ).
-
Wenn dieser Zustand vorhanden ist, sind die Gatter 9 zu dem
Systembus hin durch ein Signal EN2 und die Gatter 35 durch
ein Signal NBW freigegeben, derart, daß die in dem Register
22 gespeicherte Adresse über den Systembus 5 übertragen
wird.
-
Die derart übertragene Adresse fällt mit der Blockadresse
zusammen, die durch den Kanal 11 erhalten wird.
-
Der Cache 8 ist durch das Signal EN, welches die Gatter 10
freigibt, voreingestellt, um die angeforderten Informationen
zu empfangen.
-
Nach einem bestimmten Zeitintervall empfängt der Cache 8
einen ersten Informationsblock, der von einem Prüfungssignal
DVAL begleitet wird.
-
Beim Empfang eines solchen Signais erzeugt die
Entscheidungseinrichtung 18 ein Signal LD und lädt den
Informationsblock in das Register unter den Registern 24, 25, 26, 27,
welches durch den Code SC ausgewtohlt ist.
-
Zum gleichen Zeitpunkt aktiviert dieselbe ein Signal INCR,
was bewirkt, daß das Zählerregister 22 inkrementiert wird.
-
Bei einer Inkrementierung wählt das Register 22 ein weiteres
Register unter den Registern 24, 25, 26, 27, und zwar als
Ziel für einen neuen Informationsblock, wenn derselbe
empfangen wird.
-
Aufgrund einer solchen Inkrementierung aktiviert die
Vergleichseinheit 23 HITI. Als Konsequenz, wenn AS aktiviert
und
HIT deaktiviert sind, erzeugt die Sequenzereinrichtung
18 das Signal ENI, das den Multiplexer 28 freigibt, um den
angeforderten Informationsblock auf dem Kanal 14, welcher
durch ein Prüfungssignal DTACK begleitet wird, zu
übertragen, welcher durch eine Leitung 15 zu sowohl dem Prozessor 1
als auch dem Cache 7 gesendet wird (Fig. 1).
-
Der Block wird von dem anf ordernden Prozessor (welcher AS
deaktiviert) empfangen, und derselbe wird gleichzeitig in
den Cache 7 fur eine weitere folgende Verwendung geladen.
-
Die Sequenzereinrichtung 18 begrenzt sich nicht darauf,
einen Befehlsblock abzurufen, sondern dieselbe überprüft, ob
das Ausgangssignal der Subtrahiereinrichtung 31 eine
Differenz anzeigt, die gleich 4 ist, d.h. gleich der
Pufferkapazität ist.
-
In dem negativen Fall bleibt die Sequenzereinrichtung in dem
Zustand 103 und nimmt wieder den Fluß auf, der bereits am
Knoten 107 beschrieben wurde, wodurch die Ladeoperation des
Puffers 19 und die Inkrementierung des Zählers 22 wiederholt
werden, bis der Code DIF einen Wert gleich 4 anzeigt.
-
Beim Auftreten dieses Ereignisses enden die Stoßbetrieb-
Leseoperationen, wonach die Sequenzereinrichtung 18 in den
Zustand 100 (IDLE; IDLE = Leerlauf) zurückspringt.
-
Es kann angemerkt werden, daß in dem Falle des Pufferladens,
wie es vorher gezeigt wurde, der Multiplexer 28 gesperrt
ist, wenn das Signal AS deaktiviert ist, d.h. wenn der
Prozessor 1 keinen neuen Befehl benötigt, der in einem der
folgenden Blöcke enthalten ist, welche in dem Puffer 19
gespeichert sind.
-
Diese Blöcke werden nicht zu dem Cache 7 übertragen, es sei
denn, daß sie von dem Prozessor 1 angefordert werden.
-
Aus dem oben beschriebenen Fluß resultiert, daß der
Prozessor
1 und der Cache 7 den Block empfangen, der die
angeforderten Informationen enthält, und zwar sobald derselbe
verfügbar wird, ohne auf eine Vollendung der Stoßbetrieb-
Leseoperation warten zu müssen.
-
Daher ist die Informationslatenzzeit minimiert, und der
Cache 7 wird mit einem Inforrnationsblock geladen, welcher
zumindest einmal verwendet worden ist.
-
Es mag ebenfalls angemerkt werden, daß während einer
Stoßbetrieb-Leseoperation, wenn der Prozessor 1 wieder die
Signale AS und FCO aktiviert, um einen Befehl in einem Block
anzufordern, welcher nicht in den Cache 7 geladen ist,
welcher jedoch bereits in den Puffer 19 geladen ist (Signale
NHIT und HIT1 aktiviert, Block 106), der Informationsblock,
der den angeforderten Befehl enthält, zu dem anfordernden
Prozessor 1 gesendet wird, wobei derselbe gleichzeitig in
den Cache 7 geladen wird, ohne auf eine Vollendung der
Stoßbetrieb-Leseoperation zu warten (Block 106B). In anderen
Worten ist es möglich, gleichzeitig von dem Puffer 19 zu
lesen und auf den Puffer 19 zu schreiben.
-
Nachfolgend wird auf das Flußdiagramm von Fig. 3 Bezug
genommen, um den Betrieb des Cache 8 in dem Fall zu
betrachten, in dem der Prozessor 1 einen Befehl anfordert, der in
dem Cache 7 fehlt, der jedoch in dem Puffer 19 enthalten
ist.
-
In diesem Fall springt die Sequenzereinrichtung 18 zu dem
Zustand 101, wobei jedoch das Signal HIT1 aktiviert ist,
wonach die Sequenzereinrichtung 18 ENI und DTACK aktiviert,
wonach der angeforderte Block unmittelbar zu dem Prozessor 1
und zu dem Cache 7 übertragen wird.
-
Die Auswahl des Registers des Puffers 19, das den Block
speichert, wird durch die Adresse durchgeführt, die auf dem
Kanal 11, vorhanden ist, und die durch den Multiplexer 20 zu
dem Auswahleingang des Multiplexers 28 übertragen wird.
-
Die Sequenzereinrichtung 18 aktiviert ferner das Signal LD1
und lädt die Adresse an dem Ausgang des Multiplexers 20 in
das Register 21.
-
Sobald diese Operation durchgeführt worden ist, überprüft
die Sequenzereinrichtung 18, ob aufgrund einer solchen
Operation der Code DIF im Ausgangssignal von der
Subtrahiereinrichtung 31 eine Differenz anzeigt, die kleiner oder gleich
2 ist (Block 110).
-
Falls dies zutrifft, springt die Sequenzereinrichtung 18 von
dem Zustand 101 zu dem Zustand 103.
-
Daher wird eine Stoßbetrieb-Leseoperation, die mindestens
zwei Blöcke anfordert, durchgeführt.
-
Die Blöcke werden in den Puffer 19 geladen.
-
In diesem Fall ist die Operation zu dem Prozessor 1 und dem
Cache 7 vollständig transparent.
-
In dem negativen Fall (DIF > 2) springt die
Sequenzereinrichtung 18 von dem Zustand 101 zu dem Zustand IDLE 100.
-
Zwei weitere Fälle müssen nun betrachtet werden:
-
A) Befehlsanforderung durch den Prozessor 1 mit HIT in dem
Cache 7.
-
B) Auf dem Systembus auftretende Schreibeoperation.
-
In dem Fall A) liefert der Cache 7 den Befehl, während der
Cache 8 inaktiv bleibt.
-
In dem Fall B) müssen der Cache 7 und der Cache 8
überprüfen, daß die Schreibeoperation auf dem Systembus nicht
bestimmte Informationen in einem Block modifiziert, welche
entweder in dem Cache 7 oder in dem Cache 8 oder in beiden
enthalten sind.
-
Daher springt die Sequenzereinrichtung 18 aufgrund der
Signale SBW, SBAS, die auf dem Systembus aktiviert sind, zu
dem Zustand 104, und zwar entweder von dem Zustand 100 oder
von dem Zustand 103 aus (Fig&sub5; 3) s Wenn dieselbe in dem
Zustand 104 ist, aktiviert die Sequenzereinrichtung 18 das
Signal BW, welches den Multiplexer 20 steuert und die Gatter
35 sperrt, derart, daß die Vergleichseinheit 23 überprüft,
ob die Adresse auf dem Systembus auf einen Block bezogen
ist, der in dem Puffer 7 gespeichert ist.
-
Wenn das Signal HIT1 aktiviert wird, erzeugt die
Sequenzereinrichtung 18 Rücksetzsignale (RSIPBL, RSIPBP), welche zu
dem Register 21, 22 gerichtet sind (Signal RS von Fig. 2),
wonach dieselbe zu dem Zustand IDLE 100 springt.
-
Von dem Zustand 100 springt die Sequenzereinrichtung 18
unmittelbar zu dem Zustand 101, wenn eine gleichzeitige
Prozessoranforderung aufgetreten ist, und die Signale AS, FCO,
NHIT schwebend sind (Fig. 3).
-
Wenn dieselbe in dem Zustand 104 ist und wenn das Signal
HIT1 deaktiviert ist, überprüft die Sequenzereinrichtung 18
den Zustand der schwebenden Anforderung BRQ, und wenn diese
Bedingung wahr ist, springt dieselbe beim Auftreten der
Bedingung BGRANT zu dem Zustand 105 von Fig. 3.
-
Wenn die Bedingung BRQ falsch ist, springt die
Sequenzereinrichtung 18 zu dem Zustand 100.
-
Die vorhergehende Beschreibung bezieht sich auf ein
bevorzugtes Ausführungsbeispiel der Erfindung, das auf mehrere
Arten und Weisen verändert werden kann.
-
Selbst wenn die Beschreibung auf einen Tandem-Cache-Speicher
bezogen ist, der spezifisch für das Speichern von Befehlen
vorgesehen ist, ist es insbesondere ebenfalls möglich, einen
Tandem-Cache-Speicher zu implementieren, bei dem ein Cache,
wie z.B. der Cache 7, zum Speichern von sowohl Befehlen als
auch Daten gedacht sein kann, während ein Cache, wie z.B. 8,
zum ausschließlichen Speichern von Befehlen gedacht ist.
-
Es ist ferner m:glich, einen Tandem-Cache-Speicher zu
implementieren, bei dem ein Cache für unabhängige Blöcke von
Daten und Befehlen mit einem Paar von Cache-Speichern
gekoppelt ist, welche sequentielle Blöcke puffern, wobei jeder
der Cache-Speicher des Paars funktionsmäßig äquivalent zu
dem Cache 8 ist, der bereits beschrieben worden ist, wobei
dieselben jedoch zum Speichern von Blöcken von Befehlen bzw.
von Datenblöcken gedacht sind.