-
Verwandte Patente sind:
-
1. Das US-Patent 4,695,943 von James W. Keeley und Thomas F.
Joyce mit dem Titel "Multiprocessor Shared Pipeline Cache
Memory", eingereicht am 27. September 1984, welches dem gleichen
Inhaber wie diese Patentanmeldung zugewiesen ist. EP 176,972 ist eine
entsprechende Anmeldung.
-
2. Das US-Patent 4,785,395 von James W. Keeley mit dem Titel "A
Coherent Cache System Shared by a Pair of Processing Units",
eingereicht am gleichen Tage wie diese Anmeldung, welches dem
gleichen Inhaber wie diese Patentanmeldung zugewiesen ist. Es gibt
keine entsprechende EP-Anmeldung.
-
Die vorliegende Erfindung bezieht sich auf Cache-Speichersysteme und
insbesondere auf Cache-Speichersysteme, die in Multiprozessorsystemen
verwendet werden.
-
Es ist gut bekannt, daß Cache-Speicher beim Erhöhen des Durchsatzes
von kleinen und großen Monoprozessor- und Multiprozessor-Systemen
sehr effektiv gewesen sind. In solchen Systemen sind die Cache häufig
in einer sogenannten Privat-Cache-Anordnung konfiguriert, bei der der
Cache-Speicher einem einzelnen Prozessor zugeteilt ist.
-
Um den Systemdurchsatz zu erhöhen, haben die Systeme die Anzahl von
Verarbeitungseinheiten erhöht, wobei jede einen Cache-Speicher
verwendet,
welcher seinerseits mit einem Hauptspeicher und den anderen
Einheiten des Gesamtsystems über einen asynchronen Systembus
verbunden war. In solchen Systemen erzeugen die unabhängig arbeitenden
Verarbeitungseinheiten, unsynchronisierte, sich überlappende
Anforderungen an den Hauptspeicher. Dies kann die Cache-Kohärenz wesentlich
beeinflussen, was die Fähigkeit des Cache ist, dem Inhalt des
Hauptspeichers genau und korrekt zu folgen. Das Ergebnis ist, daß
Verarbeitungseinheiten gezwungen sein können, mit veralteten Daten zu arbeiten,
welche das System schließlich zu einem Halt bringen könnten.
-
Im allgemeinen sind zwei grundsätzliche Herangehensweisen zum
Aufrechterhalten der Cache-Kohärenz eingesetzt worden. Die erste, welche als
eine Durchschreib-Herangehensweise bezeichnet wird, verwendet eine
Horchvorrichtung, welche das Auftreten irgendwelcher Schreiboperationen
erfaßt, die an dem Hauptspeicher vorgenommen wurden, und erneuert
den Inhalt des Cache. Die zweite Herangehensweise verwendet
Schaltungen, welche den Dateninhalt der Cache-Stellen invalidiert, wenn eine
andere Systemeinheit in eine Hauptspeicherstelle schreibt, welche auf
einen Cache der Verarbeitungseinheit abgebildet worden ist.
-
Beim Einsatz der Durchschreib-Herangehensweise erfaßt ein Cache-System
des Standes der Technik, wenn irgendwelche Daten in den Hauptspeicher
durch eine andere Einheit gelesen oder geschrieben werden, und zwar
vor dem Empfang der angeforderten Daten, welche in einen gegebenen
Adreßbereich fallen. Wenn dem so ist, wird der Cache umgangen, und
die angeforderten Daten werden an die anfordernde Verarbeitungseinheit
übertragen. Während dies eine Cache-Kohärenz gewährleistet, kann der
Prozeß des Umgehens des Cache zu einer verminderten Systemeffizienz
führen. Dies tritt auf, wenn das System auf Grund der Hinzufügung von
mehr und schnelleren Verarbeitungseinheiten belebter wird, was zu einer
wesentlichen Verminderung der Cache-Trefferrate führt.
-
Das US-Patent 3,771,137 offenbart ein Multiverarbeitungs-Computersystem,
welches eine Vielzahl von Prozessoren aufweist, und zwar jeder mit
seinem eigenen Pufferspeicher (Cache), und welche einen Hauptspeicher
gemeinsam nutzen. Ein "Durchsage"-System (Horchvorrichtung) stellt
jedem Prozessor die Fähigkeit bereit, jeden anderen Prozessor zu
befragen, um zu bestimmen, ob sich eine modifizierte, z. B. erneuerte, Version
der gewünschten Daten in dem Pufferspeicher eines anderen Prozessors
befindet. Wenn festgestellt wird, daß sich in einem Pufferspeicher eine
modifizierte Version der Daten befindet, werden sie an den
Hauptspeicher übertragen, wo sie die ursprünglichen Daten ersetzen. Dann
werden die modifizierten Daten auf den Speicherdatenbus gelegt und an den
anfordernden Prozessor übertragen. In diesem System, welches nur
einem Puffer erlaubt, eine modifizierte Version irgendeines
Datenabschnitts zu enthalten, erhält der anfordernde Prozessor die neuesten
Daten, als ob sie vom Hauptspeicher ausgingen.
-
Das US-Patent 3,723,976 ist eine Verbesserung des obigen Systems vom
US-Patent 3,771,137, worin zusätzlich im Falle eines
Pufferspeicher-Lesefehlers und vor der Durchsageanforderung ein Verzeichnis mit der
Adresse der über die Durchsage zu erhaltenden Daten erneuert wird.
Die durch die Durchsageanforderung zurückgegebenen Daten werden
dann immer zu der zugehörigen Pufferspeicherstelle geleitet.
Zwischenzeitliche Lese- und Schreibzugriffe auf solche Stellen sind nicht
zugelassen.
-
Die deutsche Offenlegungsschrift DE 34 39 302 offenbart ein
Speichersteuersystem, welches eine Vielzahl von Pufferadreßmatrizen
(Verzeichnissen)
verwendet. Dieses System erlaubt es, eine neue Zugriffsanforderung
anzunehmen, welche in dem eigenen Prozessor bei einer Bedingung
aufgetreten ist, daß ein Blocktransfer zu dem eigenen Prozessor beendet
ist, und daß die erste Pufferadreßmatrix im Zusammenhang mit dem
Blocktransfer erneuert ist. Die Adresse, welche zu der Pufferspeicher-
Lesefehleranforderung gehört, welche vom Hauptspeicher gemacht ist,
wird nicht in die erste Pufferadreßmatrix eingetragen, bis nachdem die
angeforderten Daten vom Hauptspeicher empfangen worden sind. Eine
Steuervorrichtung (Flip-Flop) wird gesetzt, wenn eine Pufferspeicher-
Lesefehleranforderung gemacht ist, welche Vorrichtung, wenn gesetzt, alle
nachfolgenden Anforderungen nach einem Zugriff auf den Pufferspeicher
sperrt. Es können somit keine Probleme mit inkohärenten Daten
angetroffen werden, da jegliche zwischenzeitlichen Lese- und Schreibzugriffe
auf den Pufferspeicher gerade gesperrt sind.
-
Keines der Systeme des Standes der Technik geht diese Probleme an
und beschäftigt sich mit der Lösung solcher Probleme, die unvermeidbar
auftreten, wenn ein Zugriff auf die Cache-Einheit während der
Zwischenzeit zwischen der Zeit, wenn die Cache-Einheit eine
Lesefehleranforderung ausgibt, und der Zeit, wenn die angeforderten Daten vom
Hauptspeicher oder einer anderen Cache-Einheit zurückgegeben werden,
zugelassen ist, oder mit dem Verknüpfen solcher Probleme durch die
vorherige Zuweisung einer Stelle in der Cache-Einheit, wenn eine solche
Anforderung ausgegeben wird.
-
Es ist somit das Ziel dieser Erfindung, ein verbessertes
Multiverarbeitungs-Computersystem bereitzustellen, welches Cache-Speichereinheiten und
einen gemeinsam genutzten Hauptspeicher aufweist, wodurch die Cache-
Kohärenz aufrechterhalten wird, ohne die Systemeffizienz zu vermindern,
und zwar ungeachtet unsynchronisierter, überlappender
Speicheranforderungen,
welche zugelassen sind und während der Zwischenzeit zwischen
der Zeit auftreten können, wenn die Cache-Einheit eine
Lesefehleranforderung ausgibt, und der Zeit, wenn die angeforderten Daten vom
Hauptspeicher oder einer anderen Cache-Einheit zurückgegeben werden.
-
Dieses und andere Ziele werden durch eine Cache-Einheit erreicht, wie
sie in Anspruch 1 gekennzeichnet ist, und werden offenkundiger, wenn
sie in Verbindung mit der folgenden Beschreibung und der angehängten
Zeichnung genommen werden, welche ein bevorzugtes Ausführungsbeispiel
der Erfindung zeigen.
-
In dem bevorzugten Ausführungsbeispiel koppelt ein
Cache-Speichersubsystem mit einem gemeinsam genutzten Hauptspeicher durch
Schnittstellenschaltungen über einen asynchronen Systembus zusammen mit einer
Anzahl von Zentralverarbeitungs-Subsystemen, welche ähnliche
Schnittstellenschaltungen aufweisen. Das Cache-Speichersubsystem enthält einen
Vielschicht-Verzeichnisspeicher und Pufferspeicher-Pipelinestufen, welche
von einer Anzahl von Verarbeitungseinheiten gemeinsam genutzt werden
können.
-
Eine Einleseprozeß-(RIP)-Speichereinrichtung ist betrieblich einer der
Pipelinestufen zugeordnet. Die RIP-Speichereinrichtung ist auf einen
vorbestimmten Zustand in Antwort auf eine Leseanforderung von einer
Verarbeitungseinheit gesetzt, welche eine Fehlerbedingung erzeugt, die
anzeigt, daß die angeforderten Daten sich nicht in der Pufferspeicherstufe
befinden. Das Setzen tritt auf, wenn die Horchvorrichtung, welche mit
dem Systembus gekoppelt ist, erfaßt, daß das Cache-Speichersubsystem
eine Anforderung nach den fehlenden Daten an den Hauptspeicher
weitergereicht hat, und diese Speicheranforderung an das
Cache-Speichersubsystem übergibt, was zu einer Vorzuweisung von
Verzeichnisspeicherraum
führt. Wenn dies so gesetzt ist, identifiziert die
RIP-Speichereinrichtung die Adresse der Verzeichnisstelle innerhalb einer bestimmten
Ebene, welche vorher zugewiesen wurde. Die Horchvorrichtung hält den
Inhalt der Pufferspeicherstufe kohärent, indem ihr Inhalt in Antwort auf
irgendeine Anforderung erneuert wird, welche an den Systembus durch
andere Subsysteme gegeben ist.
-
Vor dem Empfang der angebotenen Daten vom Hauptspeicher arbeitet
das Cache-Speichersubsystem, und zwar in Antwort auf das Erfassen, daß
die Horchvorrichtung Daten empfangen hat, welche den Pufferspeicher
inkohärent machen würden, um eine Steuereinrichtung, welche zum RIP-
Speicher gehört, von einem voreingestellten Zustand zu einem
unterschiedlichen Zustand zu schalten. Wenn die angeforderten Daten
empfangen sind, wird auf den Verzeichnisspeicher zugegriffen, die
RIP-Speichereinrichtung wird rückgesetzt, und die letzte Version der angeforderten
Daten wird an die anfordernde Verarbeitungseinheit als eine Funktion
des Zustands der Steuereinrichtung weitergereicht. Das heißt, wenn die
Steuereinrichtung auf einen unterschiedlichen Zustand geschaltet worden
ist, bedeutet dies, daß die angeforderten Daten nicht die neuesten Daten
sind (z. B. wurden sie durch eine andere Verarbeitungseinheit modifiziert).
Daher wird die letzte Version der in dem Pufferspeicher gespeicherten
Daten ausgelesen und zu der anfordernden Verarbeitungseinheit
transferiert, während die vom Hauptspeicher empfangenen Daten verworfen
werden. Wenn jedoch die Steuereinrichtung in einem anfänglich
voreingestellten Zustand verbleibt, bedeutet dies, daß die vom Hauptspeicher
empfangenen Daten die neuesten Daten sind. Somit werden die
angeforderten Daten in den Pufferspeicher geschrieben und zu der
anfordernden Verarbeitungseinheit transferiert.
-
Die Anordnung der vorliegenden Erfindung ist in der Lage, Kohärenz
aufrechtzuerhalten, ohne die Cache-Effizienz zu vermindern, da
angeforderte Hauptspeicherdaten in den Pufferspeicher geschrieben werden,
außer wenn sich herausstellt, daß sie veraltet sind (nicht die neuesten).
Natürlich wird dabei davon ausgegangen, daß die Daten jene
Anforderungen erfüllen, die zum Sicherstellen von Datenintegrität (z. B.
Fehlerfreiheit) erforderlich sind.
-
Zusätzlich zum Aufrechterhalten von Kohärenz wird sichergestellt, daß
der Betrieb des Cache-Speichersubsystems richtig mit dem asynchronen
Betrieb des Systembus synchronisiert ist. Das heißt, die gleiche
Speicheranforderung, welche an den Hauptspeicher auf dem Systembus gesendet
ist, wird auch an das Cache-Speichersubsystem während des gleichen
Zyklus gegeben, was zu einer Vorzuweisung des Verzeichnisspeichers
führt. Dies stellt einen zuverlässigen Betrieb innerhalb der Pipelinestufen
sicher.
-
Zusätzlich zum Obigen kann die vorliegende Erfindung verwendet
werden, um Cache-Kohärenz zwischen einem Paar von
Verarbeitungseinheiten aufrechtzuerhalten, welche das Cache-Speichersubsystem gemeinsam
nutzen. Unter solchen Umständen gehört ein zweiter Speicher zu einer
anderen Pipeline und ist so konditioniert, um die gleiche Information wie
der RIP-Speicher zu speichern. Wenn die andere Verarbeitungseinheit
eine Speicherleseanforderung für die gleichen Daten macht, blockiert der
Zustand des zweiten Speichers das Laden der Datenregister der anderen
Verarbeitungseinheit, was eine Fehlerbedingung verursacht. Dies erlaubt
der anderen Verarbeitungseinheit, ihre Operationen anzuhalten, bis zu
dem Zeitpunkt, bei dem die angeforderten Hauptspeicherdaten
bereitgestellt werden können.
-
Ein einzelner Speicher, der zur Verzeichnisstufe gehört, kann verwendet
werden, um Kohärenz zwischen Verarbeitungseinheiten aufrechtzuerhalten.
Jedoch ist es aus Leistungsfähigkeitsgründen bevorzugt, einen Speicher in
jeder Pipelinestufe zu verwenden. Dies eliminiert die Notwendigkeit,
Lese-Modifizier-Schreib-Operationen ausführen zu lassen, welche die Zeit
einer Pipelinestufe erhöhen würde, um die erforderlichen Operationen
auszuführen. Die Anordnung erlaubt auch genügend Zeit, um der
Verarbeitungseinheit zu signalisieren, ihre Operationen anzuhalten.
-
Fig. 1 ist ein Blockdiagramm eines Systems, welches die Vorrichtung
der vorliegenden Erfindung enthält.
-
Fig. 2 ist ein Blockdiagramm eines der zentralen Subsysteme von Fig.
1, welche gemäß der vorliegenden Erfindung konstruiert sind.
-
Fig. 3 zeigt in größerem Detail die Schaltungen der Pipelinestufen von
Fig. 2.
-
Fig. 4a und 4b sind Flußdiagramme, die verwendet werden, um den Betrieb der
Vorrichtung der vorliegenden Erfindung zu erklären, die in
unterschiedlich konfigurierten zentralen Subsystemen verwendet
wird.
-
Fig. 1 zeigt ein Multiprozessor-Datenverarbeitungssystem 10, welches eine
Vielzahl von Subsystemen 14 bis 30 aufweist, die gemeinsam an einen
Systembus 12 koppeln. Die veranschaulichenden Subsysteme enthalten
eine Vielzahl von zentralen Subsystemen 14 bis 16, eine Vielzahl von
Speichersubsystemen 20 bis 28 und ein peripheres Subsystem 30. Jedes
Speichersubsystem ist organisiert, um geradzahlige und ungeradzahlige
Speichermodule aufzuweisen. Ein Beispiel einer solchen Anordnung ist
in US-Patent Nr. 4,432,055 offenbart.
-
Jedes Subsystem weist einen Schnittstellenbereich auf, welcher die
zugehörige Einheit oder die zugehörigen Einheiten befähigt, Anforderungen
in der Form von Befehlen, Unterbrechungen, Daten oder Antworten/-
Status an eine andere Einheit auf den Systembus 12 auf eine asynchrone
Weise zu senden oder zu empfangen. Das heißt, von jedem
Schnittstellenbereich kann angenommen werden, daß er
Busschnittstellen-Logikschaltungen aufweist, wie sie in dem US-Patent Nr. 3,995,258 mit dem
Titel "Data Processing System Having a Data Integrity Technique",
erfunden von George J. Barlow, offenbart sind.
-
Die Organisation jedes der zentralen Subsysteme 14 bis 16 ist die
gleiche. Fig. 2 zeigt in Blockdiagrammform die Organisation des zentralen
Subsystems 14. Das Subsystem 14 weist ein Paar von
Zentralverarbeitungseinheit-(CPU)-Subsystemen 14-2 und 14-4 auf, die gekoppelt sind,
um ein Cache-Subsystem 14-6 gemeinsam zu nutzen. Das
Cache-Subsystem 14-6 koppelt an einen Systembus 12 über ein erstes
FIFO-Subsystem 14-10, von welchem angenommen werden kann, daß es in dem
Schnittstellenbereich 14-1 enthalten ist.
-
Wie aus Fig. 2 ersichtlich, sind beide CPU-Subsysteme 14-2 und 14-4 in
ihrer Konstruktion identisch. Das heißt, jedes CPU-Subsystem weist
eine 32-Bit-Zentralverarbeitungseinheit (CPU) (d. h. CPU's 14-20 und 14-
40) und eine virtuelle Speicherverwaltungseinheit (VMMU) (d. h. VMMU
14-26 und 14-46) zum Übersetzen der virtuellen CPU-Adressen in
physische Adressen zur Übergabe an das Cache-Subsystem 14-6 als Teil der
Speicheranforderungen auf. Auch weist jedes CPU-Subsystem einen Nur-
Lese-Speicher (ROS) und ein 16-Bit-ROS-Datenausgaberegister (RDR)
(d. h. ROS 14-25, 14-44 und RDR 14-25, 14-45) auf.
-
Am Beginn jedes Zyklus ist jeder ROS so konditioniert, um ein 16-Bit-
Mikroanweisungswort in sein Datenausgabe-(RDR)-Register auszulesen,
was den Typ der während des Zyklus auszuführenden Operation
(Firmware-Schritt/Box) festlegt. Die Taktschaltungen innerhalb jedes CPU-
Subsystems (d. h. Schaltungen 14-22 und 14-42) legen die grundsätzliche
Zeit für ihr der Steuerung unterliegendes Subsystem oder das Cache-
Subsystem 14-6 fest, wie es hier erklärt ist. Die Elemente jedes CPU-
Subsystems können aus standard-integrierten Schaltungschips konstruiert
sein.
-
Wie aus Fig. 2 ersichtlich, ist das Cache-Subsystem 14-6 in einen
Quellenadreßerzeugungsabschnitt und zwei separate Pipelinestufen organisiert,
und zwar jeweils mit ihren eigenen Decodier- und Steuerschaltungen. Der
Quellenadreßerzeugungsabschnitt enthält die Blöcke 14-62 und 14-64,
welche die Funktionen der Quellenadreßauswahl und des Inkrementierens
ausführen. Die erste Pipelinestufe ist eine Adreßstufe und weist die
Verzeichnis- und zugehörigen Speicherschaltungen der Blöcke 14-66 bis
14-76 auf, angeordnet wie gezeigt. Diese Stufe führt die Funktionen des
Zwischenspeicherns der erzeugten Quellenadresse, des Verzeichnissuchens
und des Treffervergleichens auf. Die erste Pipelinestufe stellt eine
Ausgabeinformation in der Form einer Ebenennummer und einer
Spaltenadresse bereit. Die Operationen der ersten Pipelinestufe werden durch
Zeitgabesignale getaktet, welche durch die Zeitgabe- und
Steuerschaltungen von Block 14-60 erzeugt werden.
-
Die Information von der ersten Stufe wird unmittelbar an die zweite
Pipelinestufe übergeben, wobei die erste Stufe für die nächste
Quellenanforderung
verfügbar gelassen wird. Die zweite Pipelinestufe ist eine
Datenstufe und weist das Datenpuffer und zugehörige Speicherschaltungen
der Blöcke 14-80 bis 14-96 auf, angeordnet wie gezeigt. Diese Stufe
führt die Funktionen des Zugreifens auf die angeforderten Daten von
den Pufferspeichern 14-88 und 14-90 oder des Ersetzens/Speicherns von
Daten mit Daten, die vom FIFO-Subsystem 14-10 empfangen sind, auf.
Somit stellt die zweite Pipelinestufe ein 36-Bit-Datenwort zur
Übertragung an eines der CPU-Subsysteme bereit. Wiederum werden die
Operationen der zweiten Pipelinestufe durch Zeitgabesignale getaktet,
welche durch die Zeitgabe- und Steuerschaltungen von Block 14-60
erzeugt sind.
-
Die unterschiedlichen Blöcke der ersten und zweiten Pipelinestufen sind
aus standard-integrierten Schaltungen konstruiert, wie z. B. solche, die in
"The TTL Data Book, Column 3", Copyrighted 1984, von Texas
Instruments Inc. und in "Advanced Micro Devices Programmable Array Logic
Handbook", Copyright 1983, von Advanced Micro Devices Inc.
beschrieben werden. Zum Beispiel ist die Adreßwählschaltung von Block 14-62
aus zwei Sätzen von sechs 74AS857 Multiplexerchips konstruiert, welche
kaskadiert sind, um eine der vier Adressen auszuwählen. Der Swap-
Multiplexer von Block 14-92 ist aus dem gleichen Typ von Chips
konstruiert. Die Zwischenspeicher der Blöcke 14-68 und 14-72 sind aus
74AS843 D-Typ Zwischenspeicherchips konstruiert. Der Swap-Multiplexer
und die Datenregisterschaltungen von Block 14-70 sind aus einem
einzelnen, getakteten, programmierbaren Matrixlogikelement konstruiert, wie
zum Beispiel als Teilenummer AMPA16R6A, hergestellt von Advanced
Micro Devices Inc.
-
Die Verzeichnis- und zugehörigen Speicher 14-74 und 14-76, die im
größeren Detail in Fig. 3 gezeigt sind, sind aus
8-Bit-Stück-Cache-Adreßkomparatorschaltungen,
welche die Teilenummer TMS2150JL haben,
hergestellt von Texas Instruments Incorporated, sowie aus einem 4K · 4-
Bit-Speicherchip mit der Teilenummer 1MS1421, hergestellt von INMOS
Corporation, konstruiert. Die Adreß- und Datenregister 14-80 bis 14-84
und 14-94 und 14-96 sind aus 9-Bit-Schnittstellen-Flip-Flops mit der
Teilenummer SN74AS823 konstruiert, hergestellt von Texas Instruments
Inc.
-
Die Pufferspeicher 14-88 und 14-90, die im größeren Detail in Fig. 3
gezeigt sind, sind ebenso aus 4K · 4-Bit-Speicherchips mit der
Teilenummer IMS1421, hergestellt von INMOS Corporation, sowie aus einem 4096
· 1 statischen RAM-Chip mit der Teilenummer AM2147, hergestellt von
Advanced Micro Devices Inc., konstruiert. Die
Adreßinkrementierschaltungen von Block 14-64 sind aus Standard-ALU-Chips, die mit der
Teilenummer 74AS181A bezeichnet sind, sowie aus einem
programmierbaren Matrixlogikelement mit der Teilenummer 74AmPAL16L8A,
hergestellt von Advanced Micro Devices Inc., konstruiert
-
Die ersten und zweiten Ebenen der Befehlsregister und
Dekodierschaltungen von Block 14-66 bzw. 14-86 verwenden getaktete, programmierbare
Matrixlogikelemente mit den Teilenummern ArnPAL16R4A und Am-
PAL16R6A, hergestellt von Advanced Micro Devices Inc. Diese
Schaltungen erzeugen die erforderlichen Auswahl-Lese- und
Schreib-Steuersignale, wie angezeigt in Fig. 2 (d. h. die Signale SWAPLT+00,
SWAPRT+00, P0LDDT-OL, P1LDDT-OL, P0LDDFOR, F1LDDT-OR).
Für weitere Details wird auf die Gleichungen im Anhang Bezug
genommen.
-
Wie aus Fig. 2 ersichtlich, ist das Cache-Subsystem 14-6 in gerade und
ungerade Abschnitte organisiert, welche es erlauben, daß auf zwei
Datenworte
gleichzeitig in Antwort auf entweder eine geradzahlige oder eine
ungeradzahlige Speicheradresse zugegriffen wird. Für weitere Information
über diesen Typ von Cache-Adressieranordnung wird auf das US-Patent
Nr. 4,378,591 Bezug genommen, welches dem gleichen Inhaber, wie dem
hier genannten, zugewiesen ist.
-
Fig. 2 zeigt auch in Blockform das FIFO-Subsystem 14-10, welches die
FIFO-Steuer- und Taktschaltungen von Block 14-11 aufweist, welche an
ein Ersetzadreßregister 14-12 und an den Systembus 12 koppeln. Das
FIFO-Subsystem 14-10 empfängt alle die zwischen irgend zwei Subsystemen
auf dem Systembus 12 transferierten Informationen. Wenn die
Information zum Erneuern von Daten im Hauptspeicher vorgesehen ist, wird die
Information codiert, um eine solche Erneuerungs- oder Ersetzoperation
anzuzeigen. Das FIFO-Subsystem 14-10 empfängt auch irgendwelche
neuen Daten, die von einer Speicheranforderung resultieren, welche an
den Systembus 12 über das Cache-Subsystem 14-6 weitergereicht wird.
Sowohl erneuerte als auch neue Daten werden als Anforderungen
innerhalb eines Pufferspeichers gespeichert, der innerhalb des Subsystems
14-10 enthalten ist. Die FIFO-Steuerschaltungen dekodieren jede
Anforderung und leiten die geeigneten Betriebszyklen ein, welche in einer
Adresse, Daten und Befehlen resultieren, die an unterschiedliche Teile
des Cache-Subsystems 14-6 gegeben werden, wie es aus Fig. 2 ersichtlich
ist. Zum Zwecke der vorliegenden Erfindung kann das FIFO-Subsystem
in seiner Konstruktion als herkömmlich angesehen werden und die Form
des Typs der FIFO-Schaltungen annehmen, die im US-Patent Nr.
4,195,340 offenbart sind, welches dem gleichen wie dem hier genannten
Inhaber zugewiesen ist.
-
Die grundsätzliche Zeitgabe für jedes der Subsysteme von Fig. 2 wird
durch die Zeitgabe- und Steuerschaltungen von Block 14-60 eingerichtet.
-
Eine solche Steuerung erlaubt das konfliktfreie gemeinsame Nutzen des
Cache-Subsystems 14-6 durch die CPU-Subsysteme 14-2 und 14-4 und das
FIFO-Subsystem 14-10. Die Schaltungen von Block 14-60 werden im
größeren Detail in der ersten verwandten Patentanmeldung beschrieben.
Diese Schaltungen enthalten Adreßauswahl-Logikschaltungen, welche
Steuersignale zum Konditionieren eines Adreßwählers 14-62 erzeugen, um
eines der Subsysteme 14-2, 14-4 und 14-10 als eine
Anforderungsadreßquelle auszuwählen.
-
Block 14-60 enthält auch Pipeline-Taktschaltungen von Block 14-620,
welche die unterschiedlichen Typen von Cache-Speicherzyklen festlegen,
die den Anfang der Pipeline einleiten können, was zur Erzeugung einer
vorbestimmten Sequenz von Signalen in Antwort auf jede Anforderung
führt. Das heißt, erste bzw. zweite Signale zeigen eine
Cache-Anforderung zur Bedienung durch das Subsystem 14-2 CPU0 und das Subsystem
14-4 CPU1 an, wohingegen andere Signale Cache-Anforderungen zur
Bedienung durch das FIFO-Subsystem 14-10 anzeigen.
-
Diese Anforderungen können wie folgt zusammengefaßt werden:
1. CPU0-LESEZYKLUS
-
Ein CPU0-Lesen tritt in Antwort auf eine Cache-Anforderung ein,
die durch den ROS 14-24 während eines ersten Zeitschlitz/Intervalls
eingeleitet wird, wenn der CPU-Anschluß 0 innerhalb der
Schnittstelle 14-1 nicht belegt ist. Die vom CPU0-Subsystem 14-2
gelieferte Adresse wird der ersten Pipelinestufe zugeführt, und das
Verzeichnis wird gelesen. Wenn ein Treffer erfaßt ist, welcher anzeigt,
daß die angeforderten Daten in dem Datenpuffer gespeichert sind,
wird der Puffer gelesen, und die Daten werden in das
CPU0-Datenregister getaktet. Wenn ein Fehler bzw. Fehlen erfaßt ist, wird der
CPU0-Anschluß belegt gemacht, die Anforderung wird an den
Speicher weitergereicht, um die angeforderten Daten zu holen.
2. CPU1-LESEZYKLUS
-
Ein CPU1-Lesen tritt in Antwort auf eine Cache-Anforderung auf,
die durch den ROS 14-44 während eines dritten Zeitschlitz/Intervalls
eingeleitet wird, wenn der CPU-Anschluß 1 innerhalb der
Schnittstelle 14-1 nicht belegt ist.
3. ZWEITHALTIGER BUS-ZYKLUS
-
Ein zweithälftiger Buszyklus tritt in Antwort auf einen ersten Typ
einer Cache-Anforderung auf, welche durch das FIFO-Subsystem 14-
10 eingeleitet wird, und zwar nach Daten, die entweder vom
Hauptspeicher oder einer I/O-Vorrichtung angefordert sind und die auf
dem Systembus 12 während eines ersten oder dritten Zeitschlitz/-
Intervalls zurückgegeben werden, wenn das FIFO-Subsystem 14-10
eine Anforderung gespeichert hat. Wenn das FIFO-Subsystem 14-10
Daten von einer I/O-Vorrichtung an die erste Pipelinestufe zuführt,
treten diese dort hindurch, ohne die Zustände irgendwelcher
Speicher zu ändern, und werden in das geeignete CPU-Datenregister
getaktet. Daten vom Hauptspeicher werden in die
Cache-Datenpuffer geschrieben und werden in die geeigneten CPU-Datenregister
getaktet.
4. SPEICHERSCHREIB-ERNEUERUNGSZYKLUS
-
Ein Speicherschreib-Erneuerungszyklus tritt in Antwort auf einen
zweiten Typ einer Cache-Anforderung auf, die durch das FIFO-
Subsystem 14-10 zum Ersetzen oder Erneuern von Daten, die vom
Systembus 12 empfangen sind, eingeleitet wird, und zwar nach
Bestätigung solcher Daten während eines ersten oder dritten
Zeitschlitz/Intervalls,
wenn das FIFO-Subsystem 14-10 eine Anforderung
gespeichert hat. Das FIFO-Subsystem 14-10 liefert Daten an die
erste Pipelinestufe, was zum Lesen des Verzeichnisspeichers führt.
Wenn ein Treffer erfaßt ist, werden die Ersatzdaten in den
Pufferspeicher geschrieben.
5. FIFO-ZUTEILUNGSZYKLUS
-
Eine FIFO-Zuteilung tritt in Antwort auf einen CPU0- oder CPU1-
LESEZYKLUS auf, was dazu führt, daß ein Verfehlen erfaßt wird.
Der CPU-Anschluß wird belegt gemacht, und die Anforderung wird
an den Speicher weitergereicht, um die angeforderten Daten zu
holen. Nachdem die Speicherleseanforderung quittiert wurde, wird
die CPU-Leseanforderung in die FIFO-Subsystemregister geladen und
Steuerschaltungen, die in dem Subsystem enthalten sind, leiten eine
Anforderung für einen FIFO-Betriebszyklus ein (d. h. Zwangssignal
CYFIFO = 1). Signale, welche den Anforderungstyp und die
Ebenennummerinformation spezifizieren, werden als Eingaben an das
Befehlsregister und die Decodierschaltungen von Block 14-66 angelegt.
Diese Signale enthalten FIMREF (Speicherreferenz), FIWRIT
(Speicherlesen) und FIDT16- 18/19-21 (Ebenennummer). Die Signale
FIMREF und FIWRIT leiten einen FIFO-Zuteilungszyklus ein (d. h.
FIALOCYC= 1).
-
Fig. 3 zeigt die Organisation des geraden und ungeraden
Verzeichnisspeichers und der Pufferspeicher-Pipelinestufen gemäß der vorliegenden
Erfindung. Wie aus Fig. 3 ersichtlich, enthalten die Verzeichnis- und
zugehörigen Speicherschaltungen der Blöcke 14-74 und 14-76 jeweils
einen Mehrfachebenen-4K · 20-Bit-Verzeichnisspeicher 14-740 und einen
512 · 4-Bit-Prozeßspeicher (SIP) 14-742 für den zweithälftigen Buszyklus.
-
Der Verzeichnisspeicher 14-740 erzeugt in Antwort auf eine
Cache-Adresse acht Trefferausgabesignale (HIT0-7), die an die
Trefferdecodierschaltungen von Block 14-86 angelegt werden. Der Verzeichnisspeicher 14-
740 wird in Antwort auf Schreibfreigabesignale LVWR0 bis LVWR7 von
den Schaltungen 14-66 beschrieben. Der SIP-Speicher 14-742 erzeugt in
Antwort auf die Cache-Spaltenadresse vier Ausgabesignale (SIP0-3), die
ebenso an die Trefferdekodierschaltungen von Block 14-86 angelegt
werden. Der SIP-Speicher 14-742 wird mit der Ebenennummer und den
SIP-Bitsignalen als eine Funktion von Eingabedatensignalen SIPDT0-3 und
ein Schreibfreigabesignal SIPWRT beschrieben, welches durch die
Schaltungen von Block 14-66 erzeugt ist. Für weitere Details, wie diese
Signale erzeugt sind, wird auf die Gleichungen im Anhang Bezug
genommen.
-
Die Trefferdecodierschaltungen von Block 14-86 enthalten die
Trefferdecodierschaltungen von Block 14-860 und die
SIP-Trefferdecodierschaltungen von Block 14-862. In dem bevorzugten Ausführungsbeispiel werden
separat getaktete PLA-Elemente verwendet, um die
Trefferdecodierschaltungen der Blöcke 14-860 und 14-862 zu konstruieren.
-
In Antwort auf die gezeigten Eingabesignale erzeugen die
Trefferdecodierschaltungen von Block 14-860 die
Trefferebenennummer-Ausgabesignale HIT0-2 und HIT. Diese Signale zeigen die Ebene an, bei der der
Treffer aufgetreten ist, sowie die Trefferbedingung, die während eines
zweithälftigen Buszyklus oder eines Erneuerungszyklus (d. h. normaler
Betrieb) auftritt. Gleichzeitig erzeugen die prioritäts-codierten
SIP-Trefferdecodierschaltungen von Block 14-862 ein SIP-Ausgabesignal SIPHIT
nach dem Erfassen des Vorhandenseins eines möglichen
Kohärenzproblems, da beide Verarbeitungseinheiten die gleichen Daten angefordert
haben. Für weitere Details, wie diese Signale erzeugt sind, wird auf die
Gleichungen im Anhang Bezug genommen.
-
Die Aufgaben von den Schaltungen der Blöcke 14-860 und 14-682
werden als Eingaben an die Schaltungen der Datenpuffer-Pipelinestufe
angelegt, wie gezeigt. Gemäß dem bevorzugten Ausführungsbeispiel der
vorliegenden Erfindung weisen der Datenpuffer und die zugehörigen
Speicherschaltungen der Blöcke 14-88 und 14-90 jeweils einen 4K · 16-
Bit-Datenpuffer 14-880, einen 4K · 1-Bit-Einieseprozeß-(RIP)-Speicher 14-
882 und ein zugehöriges D-Typ getaktetes Steuer-Flip-Flop 14-884 und
ein AND-Gatter 14-886 auf, die alle wie gezeigt verbunden sind. Der
RIP-Speicher 14-882 wird als eine Funktion eines Eingabedatensignals
RIPDTI und eines Schreibfreigabesignals RIPWRT beschrieben, welche
durch die Schaltungen von Block 14-86 erzeugt sind. Für weitere
Details, wie diese Signale erzeugt sind, kann auf die Gleichungen im
Anhang Bezug genommen werden.
-
Das Datenausgabesignal RIPDAT vom RIP-Speicher 14-882 wird in das
Steuer-Flip-Flop 14-884 über das AND-Gatter 14-886 in Antwort auf ein
Treffersignal von Block 14-860 während eines Erneuerungszyklus geladen,
(d. h. wenn das Signal FIUPDATE eine "Eins" ist). Das Flip-Flop 14-884
wird auf einen binären Nullzustand während eines Zuteilungszyklus
voreingestellt (d. h. wenn das Signal FIALOCYCLE eine binäre "Null"
ist). Das Ausgabesignal RIPFLP vom Flip-Flop 14-884 wird als eine
Eingabe an eine Datenwählschaltung 14-866 angelegt, welche auch im
Block 14-86 enthalten ist.
-
Als eine Funktion des Zustands des Signals RIPFLP erzeugt die
Datenwählschaltung 14-866 Ausgabefreigabesignale CADREGEN, CADBWEN
und CADBEN, welche die Datenregister 14-82 und den
Datenpufferspeicher
14-880 selektiv konditionieren, um die Datensignale
bereitzustellen, die in eines der CPU-Datenregister 14-94 und 14-96 geladen werden
sollen. Für weitere Details, wie diese Signale erzeugt sind, kann auf die
Gleichungen im Anhang Bezug genommen werden.
-
Mit Bezug auf die Flußdiagramme der Fig. 4a und 4b wird nun der
Betrieb der Vorrichtung der vorliegenden Erfindung, gezeigt in Fig. 3,
beschrieben werden. In dem System von Fig. 1 kann jede
Verarbeitungseinheit Verarbeitungsanforderungen an den Speicher einieiten. Das
Speichersubsystem arbeitet normalerweise, um die Speicheranforderungen
in eine Warteschlange einzureihen und um die Anforderungen sequentiell
zu verarbeiten. Unter bestimmten Umständen kann eine
Verarbeitungseinheit ein Wort oder einen Teil eines Worts von der gleichen Stelle
lesen, welche eine andere Verarbeitungseinheit gerade erneuert oder
beschreibt. Da die Verarbeitungseinheit die Schreibanforderung an den
Systembus 12 anlegen kann, bevor das Speichersubsystem die durch die
erste Verarbeitungseinheit angeforderte Information liefert, wird die
Information, die tatsächlich an die erste Verarbeitungseinheit geliefert
wird, inkohärent sein, d. h. die Information wird eine Mischung aus alter
und neuer Information enthalten.
-
Während es möglich sein kann, die Inkohärenz zu vermeiden, indem die
Auferlegung von Verriegelungsanweisungen für die Verarbeitungseinheiten,
welche gemeinsame Speicherbereiche nutzen, erforderlich gemacht wird,
mag dies nicht immer praktisch sein. Es kann auch schwierig sein,
Verletzungen zu erfassen und zu verhindern.
-
Die Vorrichtung der vorliegenden Erfindung befähigt nicht nur das
Cache-Subsystem, kohärente Daten an ihre zugehörige
Verarbeitungseinheit oder ihre zugehörigen Verarbeitungseinheiten bereitzustellen, sondern
sie stellt die letzte Version der gerade angeforderten Daten bereit. In
dem bevorzugten Ausführungsbeispiel ist die
Einleseprozeß-RIP-Speichervorrichtung in sowohl den geraden als auch ungeraden Cache-Abschnitten
enthalten, um eine Kohärenz für jedes der zwei 16-Bit-Worte zu
gewährleisten. Natürlich kann diese Vorrichtung erweitert werden, um das
gleiche Maß von Kohärenz für jedes Byte jedes Wortes zu gewährleisten.
Dies kann geschaffen werden, indem die RIP-Speichervorrichtung
dupliziert wird.
-
Die Reihenfolge der Operationen, die in Fig. 4a gezeigt sind,
veranschaulichen den Betrieb eines Systems, das als eine einzelne
Verarbeitungseinheit konfiguriert ist, welche mit dem Systembus 12 über einen
einzelnen Cache koppelt. In diesem Fall benötigt Fig. 3 nur einen
einzelnen Speicher (entweder SIP-Speicher 14-742 oder RIP-Speicher 14-
882). Aus Leistungsfähigkeitsgründen ist es wünschenswert, den Speicher
in der ersten Pipelinestufe aufzunehmen. Es wird bemerkt, daß beide
Speicher 14-742 und 14-882 äquivalent sind. Um die
Betriebsgeschwindigkeit des RIP-Speichers 14-882 zu erhöhen, ist der Speicher in einen
4K · 1-Bit-Speicher organisiert. Jede der 512 adressierbaren Stellen hat
acht dazugehörige Ebenen. Somit werden die Ebenen codiert und ihr
Wert durch Zugriff auf den Speicher bestimmt.
-
In dem Fall der Konfiguration mit einzelnen Verarbeitungseinheiten sind
der Ausgang SIPHIT von den SIP-Trefferdecodierschaltungen von Block
14-862 als eine Eingabe mit dem AND-Gatter 14-886 anstelle des RIP-
DAT-Signals verbunden. Der RIP-Speicher 14-882 ist daher eliminiert.
-
Mit Bezug auf das Flußdiagramm von Fig. 4a wird angenommen, daß die
CPU0 mit dem Cache-Subsystem 14-6 koppelt. Wenn die CPU 14-2 das
Datenwort 0 anfordert, das an der Stelle A0 des geraden Speichermoduls
des Speichersubsystems 20-2 der Figur gespeichert ist, signalisieren die
Trefferdecodierschaltungen von Block 14-660 des Cache-Subsystems 14-6
eine Fehlbedingung (d. h. Signal HIT = 0). Dieses Signal veranlaßt den
Schnittstellenbereich 14-1, eine Leseanforderung an das
Hauptspeichersubsystem 20-2 auszugeben, wobei das an der Stelle A0 gespeicherte
Datenwort angefordert wird. Das heißt, die Speicherleseanforderung wird an
den Systembus 12 angelegt und wird durch die Schaltungen des
Schnittstellenbereichs 20-1 quittiert, nachdem sie durch das Speichersubsystem
20-2 akzeptiert ist.
-
Nach Quittierung wird die gleiche Leseanforderung in das
FIFO-Subsystem 14-10 vom Systembus 12 geladen. Auf diese Weise wird die
Busanforderung mit der Zeitgabe der Cache-Pipeline synchronisiert. Die
Cache-Speicheradresse wird über die Adreßwählschaltung 14-62 an die
Adreßzwischenspeicher 14-68/74 angelegt, während bestimmte Befehls-
und Datenbits an das Befehlsregister und die Decodierschaltungen von
Block 14-66 angelegt werden. Dies tritt immer auf, wenn es eine freie
Pipelinestufe gibt und das FIFO-Subsystem 14-10 eine Anforderung für
einen FIFO-Zyklus eingeleitet hat (d. h. Signal CYFIFO = 1).
-
Die Befehlsbits, welche den Typ der FIFO-Anforderung spezifizieren,
werden durch die Schaltungen von Block 14-66 decodiert. Da die
Anforderung eine Speicherleseanforderung ist, sind die Signale FIMREF
und FIWRIT binäre "Einsen". Diese Signale zwingen das Signal FIUP-
DATE auf eine binäre "EINS", wobei ein FIFO-Zuteilungsbetriebszyklus
eingeleitet wird (d. h. Signal FIALOCYC = 1).
-
Wie ersichtlich aus der Fig. 4a nimmt das Cache-Subsystem eine
Vorzuteilung des Verzeichnisses vor, indem der Reihenadreßabschnitt der
Leseanforderung-Cache-Adresse in die durch die Cache-Spaltenadresse
spezifizierte Stelle an der bezeichneten Ebene geschrieben wird. Die
Ebene wird bestimmt, indem die Ebenennummerbits FIDT16-18 oder
FIDT19-21 vom FIFO-Subsystem 14-10 decodiert werden, was einem
entsprechenden Signal der Verzeichnisschreib-Freigabesignal LVWR0 bis
LVWR7 auf eine binäre "NULL" zwingt.
-
Zur gleichen Zeit wird der RIP-Speicher 14-742 auf einen vorbestimmten
Zustand gesetzt, um anzugeben, daß ein Lesen in der Verarbeitung ist.
Das heißt, die Ebenennummer und die Einleseprozeßbits werden in die
durch die Cache-Spaltenadresse spezifizierte Stelle in Antwort auf Signale
SIPDT0-3 und SIPWRT geschrieben. Zu dieser Zeit stellt das Signal
FIALOCYC das RIP-Flip-Flop 14-884 auf einen binären NULL-Zustand
ein.
-
Wie aus Fig. 4a ersichtlich, horcht das FIFO-Subsystem 14-11 auf
irgendeine Schreibanforderung, welche durch eine andere
Verarbeitungseinheit gemacht wird. Der Empfang einer solchen Anforderung veranlaßt
das FIFO-Subsystem 14-10, einen Speicherschreiberneuerungszyklus
einzuleiten (d. h., es zwingt das Signal FIUPDATE auf eine binäre "EINS").
Auf die gleiche wie oben beschriebene Weise wird die Speicherschreib-
Cache-Adresse über Zwischenspeicher 14-68/72 an den
Verzeichnisspeicher 14-740 und den Speicher 14-742 von Fig. 3 angelegt.
-
Während jedes Schreiberneuerungszyklus wird auf die Verzeichnis- und
zugehörigen Speicherschaltungen durch die Cache-Spaltenadreßsignale
COLAD0-8 zugegriffen. Der Verzeichnisspeicher 14-740 arbeitet, um
Treffersignale HIT0-7 zu erzeugen, die anzeigen, ob die gerade
erneuerten Daten in dem Datenpuffer 14-880 gespeichert sind, und wenn dem
so ist, die Ebene in dem Datenpuffer, wo sie gespeichert sind. Zur
gleichen Zeit arbeitet der Speicher 14-742, um eine Ebenennummer und
RIP-Bitsignale SIP0-3 zu erzeugen, die anzeigen, ob ein
Einleseprozeßzustand für diese Spaltenadresse vorliegt.
-
Die Trefferdecodierschaltungen 14-680 arbeiten, um die Signale HIT0-7
in einen 3-Bit-Trefferebenencode umzuwandeln, welcher den Signalen
HIT#0-2 entspricht, und zwar zusätzlich zum Erzeugen des
Trefferausgabesignals HIT, welches das Auftreten einer Trefferbedingung anzeigt.
Die SIP-Trefferdecodierschaltungen 14-862 arbeiten, um die
Ebenennummersignale SIP0-2 mit den umgewandelten Signalen HIT#0-2 zu
vergleichen, um zu bestimmen, ob die gerade erneuerten Daten ein
Kohärenzproblem hervorrufen werden oder nicht. Wenn es eine
Übereinstimmung gibt und das RIP-Bitsignal wahr ist, zwingen die
Trefferdecodierschaltungen 14-862 das Signal SIPHIT auf eine binäre "EINS",
welches das potentielle Kohärenzproblem anzeigt.
-
Wie aus Fig. 4a ersichtlich, verursacht das Auftreten eines
Verzeichnistreffers, daß die Schreiberneuerungsdaten, die in das Datenregister 14-82
geladen sind, in den Datenpuffer 14-884 geladen werden, und zwar in
Antwort auf Signale CADBWEN und CADBEN (d. h. beide binär
"NULL"). Das Datenwort wird in die Stelle geschrieben, die durch die
Cache-Spaltenadreßsignale COLAD0-8 und durch die
Trefferebenennummersignale HIT#0-2 spezifiziert sind, welche in das Pufferadreßregister
14-80/84 geladen wurden, und zwar in Antwort auf das Taktsignal
PIPEOB + OA. Zu dieser Zeit veranlaßt das Auftreten eines
RIP-Treffers, daß das RIP-Flip-Flop 14-884 auf eine binäre "EINS" geschaltet
wird, und zwar in Antwort auf Signale SIPHIT und FIUPDATE und das
Zeitgabesignal PIPEOB-OB.
-
Wenn auf eine binäre "EINS" gesetzt, stellt RIP-Flip-Flop sicher, daß das
Cache-Subsystem kohärente Daten an die Verarbeitungseinheit liefert, und
zwar ungeachtet der Tatsache, daß das angeforderte Datenwort durch
eine andere Verarbeitungseinheit erneuert wurde. Genauer gesagt, wenn
das angeforderte Datenwort vom Hauptspeicher während eines
zweithälftigen Buszyklus empfangen wird, wird ein weiterer FIFO-Zyklus eingeleitet.
Dies führt dazu, daß das angeforderte Datenwort über das SWAPMUX-
Datenregister 14-70 an das Datenregister 14-82 transferiert wird.
-
Die Cache-Adreßsignale werden auch an den Verzeichnisspeicher 14-740
angelegt. Da das Verzeichnis zuvor zugeteilt wurde, führt das Lesen des
Verzeichnisses zur Erzeugung einer Trefferbedingung durch die
Trefferdecodierschaltungen 14-680, wie angezeigt in Fig. 4a. Als nächstes wird
der Zustand des RIP-Flip-Flops 14-884 untersucht. Der Zustand des
Signals RIPFLP konditioniert den Datenwähler 14-866, um die letzte
Version des Datenwortes für den Transfer zur Verarbeitungseinheit
auszuwählen. Das heißt, wenn das Signal RIPFLP eine binäre "EINS"
wie im vorliegenden Beispiel ist, zeigt dies an, daß ein Erneuerungszyklus
an der gleichen Stelle wie die angeforderten Daten vor dem SHBC-
Zyklus aufgetreten waren, welcher das angeforderte Datenwort zurückgab.
Daher werden die Datenwählschaltungen 14-866 konditioniert, um das
zurückgegebene Datenwort, das in dem Datenregister 14-82 gespeichert
ist, zu verwerfen und um den Datenpuffer 14-880 zum Auslesen des
erneuerten Datenwortes zum CPU-Datenregister 14-94/96 zu befähigen.
Dies wird durch die Datenwählschaltung 14-866 erreicht, welche das
Signal DREGEN auf eine binäre "EINS" zwingt, wobei das Datenregister
14-82 gesperrt wird, sowie das Signal CADBEN auf eine binäre "NULL"
zwingt, wobei der Datenpuffer 14-880 freigegeben wird.
-
Wie aus Fig. 4a ersichtlich, wird, wenn das RIP-Flip-Flop 14-886 nicht
auf eine binäre "EINS" gesetzt worden ist, das Datenwort in den
Datenpuffer 14-880 geschrieben und zu der CPU0 transferiert. Das heißt, die
Datenwählschaltung 14-860 gibt das Datenregister 14-82 frei, um das
Datenwort an das CPU-Datenregister 14-94/96 anzulegen (d. h. zwingt das
Signal DREGEN auf eine binäre "NULL"), während der Datenpuffer 14-
880 zum Schreiben des Datenwortes in die Stelle A0 auf der
spezifizierten Ebene konditioniert wird (d. h. zwingt das Signal CADBWEN auf
eine binäre "NULL" und CADBEN auf eine binäre "EINS").
-
Während des SHBC-Zyklus wird das RIP-Bit auch auf eine binäre
"NULL" in Antwort auf das Signal SIPWRT rückgesetzt. Zu diesem
Zeitpunkt ist das Dateneingangssignal SIPDT3 eine binäre "NULL".
-
Aus dem obigen wird erkannt, daß die Vorrichtung der vorliegenden
Erfindung in der Lage ist, sowohl Kohärenz aufrechtzuerhalten als auch
eine Verarbeitungseinheit mit der letzten Version eines kohärenten
Paares von Datenworten bereitzustellen. Das heißt, die geraden und
ungeraden Abschnitte des Cache-Subsystems enthalten die Vorrichtung
von Fig. 3 und arbeiten auf die in Fig. 4a veranschaulichte Weise, um
den Transfer inkohärenter Datenworte zur CPU 14-2 zu verhindern.
-
Fig. 4b veranschaulicht den Betrieb der vorliegenden Erfindung, wenn sie
in einem System verwendet wird, das als ein Cache-Subsystem 14-6 von
Fig. 2 konfiguriert ist. Um eine Kohärenz zwischen zwei
Verarbeitungseinheiten CPU0 und CPU1 sicherzustellen, welche das Cache-Subsystem
gemeinsam nutzen, werden beide Speicher 14-742 und 14-882 in den
unterschiedlichen Pipelinestufen verwendet, wie gezeigt in Fig. 3. Die
Anordnung gewährleistet Leistungsfähigkeitsvorteile darin, daß die
Speicher in jeder Pipelinestufe entweder beschrieben oder gelesen werden
(d. h. es sind keine Lese-Modifizier-Schreib-Operationen erforderlich),
wodurch Pipeline-Verzögerungen minimiert werden.
-
Wie aus Fig. 4b ersichtlich, wird dort angenommen, daß die CPU0 eine
Speicherleseanforderung erzeugt, um das Wort 0 aus der Stelle A0 des
Hauptspeichersubsystems 20 zu lesen, was eine Fehlbedingung erzeugt.
Auf die gleiche wie oben beschriebene Weise gibt die Schnittstelle 14-1
eine Speicherleseanforderung an das Hauptspeichersubsystem 20 für das
Datenwort 0 in der Stelle A0 aus. Die CPU0 signalisiert dem
Speichersubsystem 20 auch, daß das Lesen ein Doppelwortlesen ist (d. h. zwingt
eine Doppelwort-Busleitung auf einen binären "EINS"-Zustand). Dies
veranlaßt, daß das Subsystem 20 Datenworte von den geradzahligen und
ungeradzahligen Speichermodulen (d. h. Stellen A0 und A0+1) an die
CPU0 liefert.
-
Wie in Fig. 4b gezeigt, wird die Speicherleseanforderung in das FIFO-
Subsystem 14-10 geladen und führt zu einer
FIFO-Cache-Zyklusanforderung. Wie zuvor diskutiert, wird der Verzeichnisspeicher 14-740 der
geraden und ungeraden Cache-Abschnitte zuvor zugeteilt, indem die
Leseanforderung-Cache-Reihenadresse in die durch die
Cache-Spaltenadresse spezifizierte Stelle A0 auf der bezeichneten Ebene (Xi)
geschrieben wird. Zur gleichen Zeit wird auf den SIP-Speicher 14-742
zugegriffen, und die Ebenennummer Xi zusammen mit dem SIP-Bit werden in
die Stelle A0 geschrieben, welche durch die Cache-Spaltenadresse
spezifiziert ist.
-
Als nächstes wird auf den RIP-Speicher 14-882 der geraden und
ungeraden Cache-Abschnitte zugegriffen. Die durch die Cache-Spaltenadreß-
Treffernummersignale HIT#0-2 spezifizierte RIP-Bitstelle wird in Antwort
auf die Signale RIPDTI und RIPWRT, welche durch die Schaltungen 14-
86 erzeugt sind, auf eine binäre "EINS" gesetzt. Das RIP-Flip-Flop 14-
884 jedes Cache-Abschnitts wird auch auf eine binäre "NULL" auf die
zuvor beschriebene Weise gesetzt.
-
Wie aus Fig. 4b ersichtlich, bestimmt das Cache-Subsystem 14-6 in
Antwort auf jede Anforderung, ob die Anforderung für ein CPU-Lesen,
-Schreiben, -Erneuern oder einen zweithälftigen Buszyklus ist.
Angenommen es ist ein CPU-Lesezyklus, wird die Speicherleseanforderung, welche
durch die CPU1 erzeugt ist (d. h. CPU0 wartet auf Ergebnisse der
Speicherleseanforderung), untersucht, wenn sie an das Cache-Subsystem 20
durch die CPU1 gegeben wird. Das heißt, die Cache-Adresse, welche in
die Zwischenspeicher 14-68/72 geladen ist, greift auf den
Verzeichnisspeicher 14-740 und den SIP-Speicher 14-742 der geraden und ungeraden
Cache-Abschnitte zu. Wenn die CPU1 eines der zuvor durch die CPU0
angeforderten Datenworte anfordert, erzeugt der Verzeichnisspeicher 14-
740 die Ausgabetreffersignale HIT0-7, welche das Auftreten einer
Trefferbedingung auf der Ebene Xi anzeigen.
-
Die SIP-Trefferdecodierschaltungen 14-862 arbeiten, um das Signal SI-
PHIT auf eine binäre "EINS" zu zwingen, wenn das SIP-Bit eine binäre
"EINS" ist und die Trefferausgabesignale HIT0-7 mit den
Ebenennummersignalen SIP0-2 übereinstimmen. Das SIPHIT-Signal wird verwendet, um
das Vorhandensein eines Kohärenzproblems zwischen der CPU0 und der
CPU1 anzuzeigen.
-
Wie in Fig. 4b angezeigt, wird das SIPHIT-Signal verwendet, um das
Laden der CPU1-Datenregister mit Daten vom Datenpuffer 14-880 zu
blockieren, was eine Fehlbedingung im Schnittstellenbereich 14-1 erzeugt.
Dies nimmt effektiv die Anforderung zurück, soweit das Cache-Subsystem
20 betroffen ist. Um die Konstruktion zu vereinfachen, gibt der
Schnittstellenbereich 14-1 die Speicheranforderung der CPU1 an das
Hauptspeichersubsystem 20 in Antwort auf die Fehlbedingung weiter.
-
In Antwort auf jeden Schreiberneuerungszyklus wird die
Speicherschreibanforderung untersucht, wenn sie an das Cache-Subsystem 20 durch das
FIFO-Subsystem 14-10 gegeben wird, und zwar nachfolgend dem Empfang
einer Quittung vom Systembus 12. Wie oben beschrieben, wird die
Cache-Adresse über die Zwischenspeicher 14-68/72 an den
Verzeichnisspeicher 14-740 angelegt, und wenn das gerade erneuerte Datenwort das
gleiche ist, das durch die CPU0 angefordert wurde, arbeitet die
Trefferdecodierschaltung 14-860, um einen Treffer zu erzeugen.
-
Dies führt dazu, daß das erneuerte Datenwort in dem Datenpuffer 14-
880 an der durch die Cache-Spaltenadresse und die Trefferebenensignale
HIT#0-2 spezifizierte Stelle geschrieben wird. Zur gleichen Zeit wird
auch auf den RIP-Speicher 14-882 zugegriffen. Wenn das RIP-Bit auf
eine binäre "EINS" gesetzt worden ist, was signalisiert, daß ein Lesen
unter Verarbeitung ist, zwingt dies das Signal RIPDAT auf eine binäre
"EINS". Dies veranlaßt, daß das RIP-Flip-Flop 14-884 auf eine binäre
"EINS" geschaltet wird, und zwar in Antwort auf die Signale HIT, FIUP-
DATE und PIPEOB-OB, wie gezeigt in Fig. 4b.
-
Wenn das Hauptspeichersubsystem 20 seine Verarbeitung der CPUO-
Speicherleseanforderung vervollständigt, arbeitet es, um die Datenworte
0 und 1 auf den Systembus 12 während eines zweithälftigen Buszyklus
zurückzugeben. Wie aus Fig. 4b ersichtlich, wird ein SHBC-Zyklus
eingeleitet, währenddessen die zurückgegeben Datenworte zusammen mit
der Cache-Adresse an das Cache-Subsystem 20 durch das FIFO-Subsystem
14-10 gegeben werden.
-
Wie oben beschrieben, wird die Cache-Adresse an den
Verzeichnisspeicher 14-740 angelegt, was dazu führt, daß die Trefferdecodierschaltungen
14-860 einen Treffer erzeugen. Es wird auch auf den SIP-Speicher 14-
742 zugegriffen, und das SIP-Bit wird auf eine binäre "NULL" in
Antwort auf das Signal SIPWWRT rückgesetzt.
-
Wie aus Fig. 4b ersichtlich, bestimmt der Zustand des RIP-Flip-Flops 14-
884, ob der Datenpuffer 14-880 oder das Datenregister 14-82 die letzte
Version der angeforderten Datenworte enthält. Wenn auf eine binäre
"EINS" gesetzt, konditioniert das Signal RIPFLP die Datenwählschaltung
14-866, um den Transfer der SHBC-Daten vom Register 14-82 zu
verhindern. Es gibt auch das erneute Lesen des Cache-Datenpuffers 14-880
frei, indem das Signal CADBEN auf eine binäre "NULL" gesetzt wird,
sowie die Auslieferung der erneuerten Datenworte an die
CPU0-Datenregister.
-
Wenn das RIP-Flip-Flop 14-884 eine binäre "NULL" ist, zeigt dies an,
daß die angeforderten Datenworte nicht erneuert worden sind. Daher
werden die SHBC-Datenworte, die im Register 14-82 gespeichert sind, in
den Datenpuffer 14-880 geschrieben und an die CPU0-Datenregister
geliefert. Wie aus Fig. 4b ersichtlich, wird während des SHBC-Zyklus
das RIP-Bit, auf das vom RIP-Speicher 14-882 zugegriffen wird, auf eine
binäre "NULL" in Antwort auf die Signale RIPDTI und RIPWRT
rückgesetzt. Da dies kein Zuteilungszyklus ist, ist das Signal RIPDTI eine
binäre "NULL".
-
Aus dem obigen ist ersichtlich, wie die Vorrichtung der vorliegenden
Erfindung gewährleistet, daß jede Verarbeitungseinheit innerhalb des
Systems oder in dem Fall eines gemeinsam genutzten Cache, jedes Paar
von Verarbeitungseinheiten innerhalb des Systems kohärente Daten und
die letzte Version solcher kohärenter Daten empfängt, und zwar trotz
unsynchronisierter, sich überlappender Speicheranforderungen, die erlaubt
sind und während der Zwischenzeit zwischen der Zeit, wenn die Cache-
Einheit eine Lesefehleranforderung ausgibt, und der Zeit, wenn die
angeforderten Daten vom Hauptspeicher oder einer anderen Cache-
Einheit zurückgegeben werden, auftreten können. Dies wird erreicht
durch die Hinzufügung weniger Einheiten und/oder Schaltungen, wie sie
im Anspruch gekennzeichnet sind, und zwar innerhalb einer oder
mehrerer der Pipelinestufen des Cache-Subsystems. Aus
Leistungsfähigkeitsgründen sind Speicherschaltungen in jeder Pipelinestufe des gemeinsam
genutzten Cache-Subsystems enthalten.
ANHANG
-
Die Gleichungen zum Erzeugen der Signale der Fig. 2 und 3 sind durch
die folgenden Boole'schen Ausdrücke gegeben:
-
* Diese Signale werden mit Signal PIPE0B + 0A getaktet.
BESCHREIBUNG DER GLEICHUNGSAUSDRÜCKE
-
1. DBWDRD = Doppelwort-Lesebefehl (Double word read command),
festgelegt durch ROS-Datenbit 4 = 1 und ROS-Datenbit 5 = 0,
welche durch die Decodierschaltungen von Block 14-66 erzeugt sind,
welcher mit dem Signal PIPE0A+ 0A getaktet ist.
-
2. CPUNUM = CPU-Nummer-(CPU0 oder CPU1)-Signal, welches
durch die Schaltungen von Block 14-66 erzeugt ist, welcher mit dem
Signal PIPE0A+ 0A getaktet ist.
-
3. CPUCYL = CPU-Zyklussignal, welches durch die Schaltungen von
Block 14-66 erzeugt ist und welches mit dem Signal PIPE0A+ 0A
getaktet ist.
-
4. EVNHIT = HIT-Signal, welches durch die
Trefferdecodierschaltungen 14-680 erzeugt ist, zugehörig zum geradzahligen
Verzeichnisspeicher 14-76.
-
5. CMAD22 = Cache-Speicheradreßbit 22, welches am Ausgang des
Wählers 14-62 erzeugt ist.
-
6. CMAD22 = Cache-Speicheradreßbit 23, welches am Ausgang des
Wählers 14-62 erzeugt ist, spezifiziert, welche Hälfte (linke oder
rechte) des Datenregisters 14-94 oder 14-96 mit einem Datenwort
geladen werden soll.
-
7. FIAD17 = FIFO-Adreßbit 17 vom FIFO-Subsystem 14-10 legt fest,
welche CPU die Ersatzdaten empfangen soll.
-
8. FIDBWD = FIFO-Doppelbreitwortbefehl-Bit vom FIFO-Subsystem
14-11 spezifiziert, wenn die gerade zurückgegebenen Daten zwei
Worte aufweisen.
-
9. FISHBA = zweithälftiges Buszyklus-Quittungssignal des FIFO (FIFO
second half bus cycle acknowledge signal) von 14-11 spezifiziert, daß
das FIFO-Subsystem einen Cache-Zyklus erfordert, um Daten zu
verarbeiten, die von einer I/O-Vorrichtung oder einem Speicher
während eines zweithälftigen Buszyklus SHBC empfangen sind.
-
10. ODDHIT = HIT-Signal, welches durch die
Trefferdecodierschaltungen 14-680 erzeugt ist, zugehörig zum ungeraden Verzeichnisspeicher
14-74.
-
11. RPMREF = Speicherreferenzsignal, welches durch RAR 14-12
bereitgestellt ist, welches irgendwelche Ausnahmebedingungen, die
berücksichtigt werden sollen, erlaubt.
-
12. RPAD22 = Ersatzadreßbit 22 von RAR 14-12.
-
13. FIDT16-18/19-21 = die geraden/ungeraden Datenbits, welche die
Cache-Ebene definieren, die durch das FIFO-Subsystem 14-10
bereitgestellt ist.
-
14. CYFIFO = ein Zyklussignal, welches durch die FIFO-Zykluswahl-
Logikschaltungen vom Block 14-60 während einer freien Pipelinestufe
erzeugt ist.
-
15. FISHBC = das zweithältige Buszyklussignal vom FIFO-Subsystem 14-
10.
-
16. WRTPLS = das Schreibimpulssignal, welches durch die Schaltungen
von Block 14-60 erzeugt ist, welches auf halbem Wege zwischen
entweder den Taktsignalen PIPE0A+0A und PIPE0A+0B oder den
Taktsignalen PIPE0B + 0A und PIPE0B + OB auftritt.
-
17. FIMREF = das Busspeicherreferenzsignal BSMREF vom FIFO-
Subsystem 14-10.
-
18. FIWRIT = das Busspeicherschreibsignal BSWRIT vom
FIFO-Subsystem 14-10.
-
Es wird anerkannt werden, daß viele Änderungen am oben beschriebenen
Ausführungsbeispiel der Erfindung gemacht werden können. Wie erwähnt
wird nur ein einzelner Speicher zugehörig zur Verzeichnisspeicherstufe im
Falle einer einzelnen Verarbeitungseinheit gebraucht. Wenn es mehr als
eine Verarbeitungseinheit gibt, welche das Cache-Subsystem gemeinsam
nutzen, wird ein Speicher zum Erfassen einer Inkohärenz zwischen den
Verarbeitungseinheiten verwendet, während der zweite Speicher verwendet
wird, um einen Einleseprozeßzustand anzuzeigen, der für eine verbesserte
Leistungsfähigkeit aufgenommen ist. Jedoch kann es noch möglich sein,
beide innerhalb eines einzelnen Speichers zu kombinieren sowie die
Funktion des RIP-Steuer-Flip-Flops mit begleitender Verminderung der
Pipelinestufengeschwindigkeit zu kombinieren.