-
GEBIET DER ERFINDUNG
-
Die
vorliegende Erfindung bezieht sich auf Speichersteuerungen für Computer
und insbesondere auf einen besonders effizienten Mechanismus zum Bewirken
bzw. Ausführen
von Lese- und Schreibvorgängen in
einem Speichersystem mit aufgespaltener Transaktion. Ein System
nach dem Stand der Technik wird durch die Druckschrift
US 5,455,924 offenbart.
-
HINTERGRUND DER ERFINDUNG
-
Ein
typisches Speichersystem enthält
eine Speichereinrichtung und eine Speichersteuerung. Speichereinrichtungen
umfassen, ohne hierauf beschränkt
zu sein, Speichereinrichtungen mit wahlfreiem Zugriff (RAM) und
Speichereinrichtungen, die ein Speichermedium umfassen, wie z.B.
magnetische und/oder optische Platten. Ein dynamischer RAM (DRAM)
ist ein Beispiel einer Speichereinrichtung, die in Computersystemen üblicherweise
verwendet wird.
-
Speichersteuereinrichtungen
empfangen typischerweise Speicherzugriffsanweisungen von einer Prozessoreinheit,
wie z.B. einer zentralen Prozessoreinheit (CPU). Programmanweisungen,
die durch einen Prozessor ausgeführt
werden, erfordern typischerweise, daß Speicherzugriffsanweisungen, die
an eine Speichersteuerung ausgegeben werden, durch die Speichersteuerung
in der bestimmten Reihenfolge ausgeführt werden, in welcher die
Speicherzugriffsanweisungen durch die Speichersteuerung empfangen
wurden. Beispielsweise geht man davon aus, daß eine Leseanweisung, welche
Daten abruft, die an einer Speicherstelle gespeichert sind, welche durch
eine zuvor ausgegebene Schreibanweisung überschrieben wurde, die nach
Ausführung
dieser Schreibanweisung gespeicherten Daten abrufen soll. Mit anderen
Worten, man geht davon aus, daß der vorherige
Schreibbefehl vor dem danach ausgegebenen Lesebefehl ausgeführt werden
soll. Wenn die relative Reihenfolge der Ausführung der Schreibe- und Leseanweisungen
nicht eingehalten wird, hängen
die Daten, die durch Ausführung
des Lesebefehls abgerufen werden, von der relativen Reihenfolge
der Ausführung
der Schreib- und Leseanweisungen ab. Dies führt zu einem unvorhersagbaren
Verhalten von Computervorgängen.
Deshalb werden Speicherzugriffsvorgänge typischerweise der Reihe
nach abgearbeitet, um die Datenintegrität und die Vorhersagbarkeit
eines Computerprozesses aufrechtzuerhalten.
-
Bei
einer aufgespaltenen Speicherzugriffstransaktion kann ein einzelner
Speicherzugriffsbefehl in mehreren Teilen ausgegeben werden. Beispielsweise
können
eine Anforderung nach einem Speicherzugriff und die entsprechende
Speicheradresse beide in einer ersten Transaktion von einem Prozessor
an eine Speichersteuerung ausgegeben werden, und Daten, welche der
Anforderung und der Speicheradresse entsprechen, können von
dem Prozessor an die Speichersteuerung in einer zweiten, nachfolgenden
Transaktion ausgegeben werden. Solche aufgespaltenen Transaktionen
des Speicherzugriffs sind typischerweise aufgespaltene Schreibanweisungen,
da ein Schreibbefehl typischerweise sowohl die Angabe einer Zieladresse
als auch von Schreibdaten er fordert, die in die Zieladresse geschrieben
werden sollen. Dementsprechend kann die Zieladresse zusammen mit
einer Anweisung an eine Speichersteuerung gesendet werden, welche
in einer Transaktion einen Schreibvorgang spezifiziert, während die Schreibdaten
in einer nachfolgenden Transaktion an die Speichersteuerung gesendet
werden können.
Leseanweisungen geben typischerweise eine Quelladresse und einen
Befehl an, welcher einen Lesevorgang spezifiziert. Das Senden der
Lesedaten an die Speichersteuerung ist im allgemeinen unnötig, da
die Datenübertragung
des Lesevorgangs von dem Speicher zu dem Prozessor ausgeführt wird.
Dementsprechend werden Leseanweisungen typischerweise von der Speichersteuerung
als vollständig
angesehen, da die gesamte Information, die erforderlich ist, um
eine Leseanweisung auszuführen,
empfangen wird, wenn die Leseanforderung und die Quelladresse empfangen
wurden.
-
Eine
aufgespaltene Schreibanweisung erfordert typischerweise, daß die Schreibanweisung
vor der Ausführung
derselben durch die Speichersteuerung vollständig ist. Insbesondere kann
die Speichersteuerung keinen aufgespaltenen Schreibbefehl ausführen, bis
die erforderlichen Schreibdaten in einer nachfolgenden Transaktion
empfangen wurden. Da die Schreibdaten in einer aufgespaltenen Schreibanweisung
oftmals in einer späteren
Transaktion als die Schreibanweisung und die Zieladresse bereitgestellt werden,
kann das Verarbeiten einer aufgespaltenen Schreibanweisung eine
Abwarteperiode für
die Schreibdaten erfordern. In dem hier verwendeten Sinn bezeichnet
eine Abwarteperiode für
Schreibdaten einen Zeitraum der Inaktivität einer Speichersteuerung,
während
die Speichersteuerung auf den Empfang der Schreibdaten einer aufgespaltenen
Schreibanweisung wartet. Umgekehrt können Leseanweisungen in Systemen
mit aufgespaltener Transaktion, welche eine Leseanforderung und
eine Leseadresse enthalten, durch die Speichersteuerung unmittelbar ohne
irgendeine Warteperiode ausgeführt
werden.
-
Aufgespaltene
Transaktionen vergrößern die Speicherzugriffseffizienz,
indem sie es einem Speichersystem erlauben, eine Speicherschreibanweisung
zu initiieren, die erforderlichen entsprechenden Schreibdaten von
irgendeiner aus einer Anzahl von Quellen zusammenzuholen und die
Verarbeitung der Speicherschreibanweisung abzuschließen, wenn
die erforderlichen Schreibdaten anschließend empfangen wurden. Da jedoch
Speicherzugriffsvorgänge
typischerweise der Reihe nach ausgeführt werden, um die Datenintegrität zu erhalten,
müssen
nachfolgende Speicherzugriffsanweisungen, die vollständig und für die Ausführung bereit
sind, einschließlich
von Leseanweisungen, im allgemeinen auf die Ausführung vorangehender aufgespaltener
Schreibanweisungen warten, die nicht ausgeführt werden können, bis
die erforderlichen Schreibdaten durch die Speichersteuerung empfangen
wurden. Dieses Blockieren von nachfolgenden Speicherzugriffsanforderungen
während
eines anhängigen
Empfangs von Schreibdaten, die einer zuvor empfangenen aufgespaltenen Schreibanweisung
entsprechen, führt
zu einer beträchtlichen
Ineffizienz bei konventionellen Speichersteuersystemen mit aufgespaltener
Transaktion.
-
Was
benötigt
wird, ist ein Mechanismus für das
weitere Verbessern der Effizienz und des Durchsatzes von Speichersteuerungen,
die eine Folge von aufgespaltenen Speicherzugriffsanweisungen verarbeiten,
wobei die Integrität
der Daten erhalten bleibt.
-
ZUSAMMENFASSUNG
DER ERFINDUNG
-
Besondere
und bevorzugte Aspekte der Erfindung sind in den beigefügten unabhängigen und abhängigen Ansprüchen dargelegt.
-
In
einer Ausführungsform
der vorliegenden Erfindung werden unvollständige Schreibanweisungen in
einem Speichersystem mit aufgespaltenen Transaktionen in einem Nebenpuffer
[A.d.Ü.:
auch als Seitenpuffer bezeichnet] gespeichert. Eine Speichersteuerung
empfängt
Leseanweisungen und aufgespaltene Schreibanweisungen von einem Prozessor.
Eine aufgespaltene Schreibanweisung enthält eine Schreibadresse, eine
Schreibanforderung, welche den Befehl als Schreibanweisung kennzeichnet, und
Schreibdaten. In einer aufgespaltenen Schreibanweisung können die
Schreibadresse und die Schreibanforderung für die Speichersteuerung in
einer anfänglichen
Transaktion bereitgestellt werden, während die Schreibdaten in einer
nachfolgenden Transaktion für
die Speichersteuerung bereitgestellt werden können.
-
Die
Speichersteuerung enthält
eine First-In-First-Out-Speichereinrichtung (Haupt-FIFO), einen
Nebenpuffer und eine Speichersteuerlogik. Unter der Steuerung der
Speichersteuerlogik empfängt der
Haupt-FIFO eine Folge von aufgespaltenen Speicherzugriffsanweisungen
und speichert diese. Die Speichersteuerungslogik ordnet vollständige Schreibanweisungen
auf dem Haupt-FIFO in einer Schlange an und holt die vollständigen Anweisungen aus
dem Haupt-FIFO, um sie der Reihe nach auszuführen. Außerdem speichert unter der
Steuerung der Speichersteuerlogik der Nebenpuffer zeitweise unvollständige Schreibanweisungen.
Entsprechend den Prinzipien der vorliegenden Erfindung empfängt die
Speichersteuerung eine unvollständige
Schreibanweisung und speichert die unvollständige Schreibanweisung in dem
Nebenpuffer, solange der Empfang der Schreibdaten auf sich warten
läßt, der
die unvollständige
Schreibanweisung abschließt.
Im Anschluß an
empfangene Speicherzugriffsanweisungen, die vollständig sind
und die nicht in Konflikt mit der unvollständigen Schreibanweisung stehen,
d.h. welche nicht auf irgendeine Speicherstelle zugreifen, auf welche
auch durch die unvollständige
Schreibanweisung zugegriffen wird, werden auf dem Haupt-FIFO für eine unmittelbare
Ausführung
außerhalb
der Reihenfolge bezüglich
der unvollständigen Schreibanweisung
in einer Schlange angeordnet. Durch Ausführen der Speicherzugriffsanweisungen außerhalb
der Reihenfolge wird eine eine Verzögerung bedeutende Warteperiode
vermieden, wodurch die Leistungsfähigkeit und der Durchsatz des
Speichersystems verbessert werden. Zusätzlich wird, da sichergestellt
wird, daß zwischen
der vollständigen Speicherzugriffsanweisung
und der unvollständigen Schreibanweisung,
die in dem Nebenpuffer gespeichert ist, kein Konflikt vorliegt,
die Datenintegrität
sichergestellt. Auf diese Weise erreicht eine Speichersteuerung
gemäß den Prinzipien
der vorliegenden Erfindung eine schnellere Ausführung aufeinanderfolgender,
aufgespaltener Speicherzugriffsanweisungen, während die Datenintegrität beibehalten
wird.
-
Wenn
ein Speicherzugriffskonflikt mit der unvollständigen Schreibanweisung in
einer nachfolgend ausgegebenen, vollständigen Speicherzugriffsanweisung
erfaßt
wird, wird die Ausführung
der vollständigen
Speicherzugriffsanweisung verschoben, bis die unvollständige Schreibanweisung
abgeschlossen und ausgeführt
worden ist. Dementsprechend kann eine eine Verzögerung bedeutende Warteperiode
auftreten, wenn dies notwendig ist, um die Datenintegrität sicherzustellen.
An dere vollständige Speicherzugriffsanweisungen
jedoch, die nicht mit der unvollständigen Schreibanweisung in
Konflikt sind, und die vor der in Konflikt stehenden, vollständigen Speicherzugriffsanforderung
ausgegeben wurden, können
vor dem Abschluß der
unvollständigen Schreibanweisung
verarbeitet und vor dem Verschieben der Verarbeitung der in Konflikt
stehenden Speicherzugriffsanweisung ausgeführt werden.
-
Wenn
die Schreibdaten des unvollständigen Schreibbefehls,
der in dem Nebenpuffer gespeichert ist, empfangen werden, werden
die Schreibdaten mit der unvollständigen Schreibanweisung kombiniert, um
eine vollständige
Schreibanweisung zu bilden, die von dem Nebenpuffer für die Verarbeitung
in den FIFO verschoben wird. Alle anderen Speicherzugriffsanweisungen,
welche mit der zuvor unvollständigen
Schreibanweisung in Konflikt waren, sind dann für eine unmittelbare Ausführung bereit.
-
KURZE BESCHREIBUNG DER
FIGUREN
-
Die
vorliegende Erfindung wird beispielhaft, jedoch ohne Beschränkungsabsicht
in den Figuren der beigefügten
Zeichnungen beschrieben, in welchen gleiche Bezugszahlen sich auf ähnliche
Elemente beziehen und in denen:
-
1 ein
Blockdiagramm einer Speichersteuerung ist, die einen Nebenpuffer
gemäß der vorliegenden
Erfindung für
eine schnelle Verarbeitung von Speicherzugriffsanweisungen in einem
Speichersystem mit aufgespaltenen Transaktionen umfaßt,
-
2 ein
Blockdiagramm einer Ausführungsform
einer Struktur eines Nebenpuffers nach 1 ist, um
unvollständige
Speicherzugriffsanweisungen gemäß den Prinzipien
der vorliegenden Erfindung zu speichern,
-
3 ein
logisches Flußdiagramm
eines Verfahrens zum Empfangen und anfänglichen Verarbeiten einer
Speicherzugriffsanweisung in einem Speichersystem mit aufgespaltener
Transaktion gemäß den Prinzipien
der vorliegenden Erfindung ist, und
-
4 ein
logisches Flußdiagramm
eines Verfahrens zum Empfangen von Speicherschreibdaten ist, welche
einem unvollständigen,
aufgespaltenen Schreibbefehl entsprechen, der in einem Nebenpuffer
in einem Speichersystem mit aufgespaltener Transaktion gemäß den Prinzipien
der vorliegenden Erfindung gespeichert ist.
-
GENAUE BESCHREIBUNG
-
In
der folgenden genauen Beschreibung von Ausführungsformen der vorliegenden
Erfindung sind viele spezielle Einzelheiten dargestellt, um ein
vollständiges
Verständnis
der vorliegenden Erfindung zu gewährleisten. Es liegt jedoch
für Fachleute
auf der Hand, daß die
vorliegende Erfindung ohne diese speziellen Einzelheiten oder durch
Verwendung alternativer Elemente oder Abläufe ausgeführt werden kann. In anderen
Fällen
wohlbekannte Prozesse, Vorgänge,
Komponenten und Schaltkreise sind nicht im einzelnen beschrieben
worden, um Aspekte der vorliegenden Erfindung nicht unnötig zu verschleiern.
-
In
einer Ausführungsform
der Erfindung enthält
eine Speichersteuerung 107 (1) einen
Nebenpuffer 112 zum Speichern unvollständiger Schreibanweisungen,
während
nachfolgend empfangene, nicht damit in Konflikt stehende, vollständige Speicherzugriffsanweisungen
vor einer solchen unvollständigen
Schreibanweisung auf einem Haupt-FIFO 114 für die weitere
Verarbeitung in einer Schlange angeordnet werden können. Wie
in 1 dargestellt, ist die Speichersteuerung 107 ein
Teil eines Speichersystems 100. In dem Speichersystem 100 stellt
eine synchrone Verbindung 102 eine Kommunikation von Speicherzugriffsanweisungen
und Daten zwischen einem Prozessor 104 und einer Speichersteuerung 107 bereit.
Der Prozessor 104 enthält
einen Cachespeicher 106. In einer Ausführungsform ist der Prozessor 104 ein
SPARC-Prozessor, der von Sun Microsystems, Inc. in Mountainview, Kalifornien,
erhältlich
ist. Zusätzliche
Verbindungen 116 sind ebenfalls für die Kommunikation von Daten und
Steuersignalen zwischen der Speichersteuerung 107 und einer
Speichereinrichtung 108 vorgesehen. Die Speichereinrichtung 108 kann,
ohne hierauf beschränkt
zu sein, eine Speichereinrichtung mit wahlfreiem Zugriff (RAM) und
Speichereinrichtungen, die Speichermedien, wie z.B. magnetische
und/oder optische Platten, enthalten, umfassen. In einer Ausführungsform
der vorliegenden Erfindung ist die Speichereinrichtung 108 ein
dynamischer RAM (DRAM). Der Prozessor 104, die synchrone
Verbindung 102 und das Speichersystem 100 können Bestandteile
eines Computersystems, wie z.B. des SPARCstation, Workstation-Computersystems
sein, das von Sun Microsystems, Inc. in Mountainview, Kalifornien,
erhältlich
ist. Sun, Sun Microsystems und das Sun-Logo sind Marken oder eingetragene
Marken von Sun Microsystems, Inc. in den Vereinigten Staaten und
anderen Ländern.
Alle SPARC-Marken werden unter Lizenz verwendet und sind Marken
von SPARC International, Inc. in den Vereinigten Staaten und anderen Ländern. Produkte,
welche SPARC-Marken tragen, beruhen auf einer von Sun Microsystems,
Inc. entwickelten Architektur.
-
Die
Speichersteuerung 107 enthält eine Speichersteuerlogik 110,
einen Nebenpuffer 110 und einen Haupt-FIFO 114.
Die Speichersteuerung 107 empfängt und verarbeitet Speicherzugriffsanweisungen
von dem Prozessor 104. Derartige Speicherzugriffsanweisungen
können
aufgespaltene Schreibanweisungen und Leseanweisungen umfassen.
-
Eine
aufgespaltene Schreibanweisung enthält eine Schreibanforderung,
welche den Befehl als Schreibbefehl kennzeichnet, einen Schreibadreßbereich,
welcher einen Bereich von Speicherstellen innerhalb der Speichereinrichtung 108 angibt,
und Schreibdaten, die in dem Bereich der Speicherstellen gespeichert
werden sollen, welche durch den Schreibadreßbereich angegeben wurden.
In einer Ausführungsform
der vorliegenden Erfindung kann der Prozessor 104 aufgespaltene
Schreibanweisungen in zwei Teilen an die Speichersteuerung 107 ausgeben.
Der erste Teil einer aufgespaltenen Schreibanweisung umfaßt die Schreibanforderung
und den Schreibadreßbereich.
Der zweite Teil einer aufgespaltenen Schreibanweisung, der zu einem
Zeitpunkt ausgegeben werden kann, der nach der Ausgabe des ersten
Teils liegt, enthält
die Schreibdaten. Auf die Schreibdaten kann von dem Cache 106 des
Prozessors 104 oder von einer anderen Speicherquelle auf
Befehl des Prozessors 104 zugegriffen werden. Wenn der
Zugriff erfolgt ist, stellt der Prozessor 104 die Schreibdaten
für die
Speichersteuerung 107 bereit. Die Speichersteuerung 107 kann
außerdem vollständige Schreibanweisungen
empfangen und verarbeiten, in welchen die Schreibanforderung, der Schreibadreßbereich
und die Schreibdaten durch die Speichersteuerung 107 allesamt
in einer einzelnen Transaktion über
die synchrone Verbindung 102 empfangen wurden. Speicherleseanweisungen,
welche durch die Speichersteuerung 107 verarbeitet werden,
enthalten im allgemeinen eine Leseanforderung, welche die Anweisung
als eine Leseanweisung kennzeichnet, und einen Leseadreßbereich.
Der Leseadreßbereich
gibt einen Bereich von Speicherstellen innerhalb der Speichereinrichtung 108 an,
aus welchem die Daten geholt bzw. abgerufen werden sollen. Die Speichersteuerung 107 empfängt Leseanweisungen
in einer vollständigen
Form in einer einzigen Transaktion über die synchrone Verbindung 102.
-
Die
Speichersteuerung 107 kann alle vollständigen Speicherzugriffsanweisungen
verarbeiten, d.h. alle vollständigen
Schreibanweisungen und alle Leseanweisungen, ohne weitere Information
von dem Prozessor 104 zu benötigen. Die Speichersteuerung 107 kann
jedoch nicht eine unvollständige Schreibanweisung
verarbeiten, bis sie vollständig
ist, d.h. bis die entsprechenden Schreibdaten angekommen sind. Beispielsweise
kann die Speichersteuerung 107 eine Leseanweisung durch
Lesen der Daten aus der angegebenen Leseadresse in der Speichereinrichtung 108 ausführen, sobald
die Leseanweisung angekommen ist. Im Gegensatz dazu kann eine unvollständige Schreibanweisung,
beispielsweise eine Schreibanforderung und ein Schreibadreßbereich
ohne Schreibdaten, durch die Speichersteuerung 107 nicht
ausgeführt
werden, bis die entsprechenden Schreibdaten von dem Prozessor 104 empfangen
wurden. Dementsprechend kann eine beträchtliche Verzögerung,
die manchmal auch als eine Warteperiode bezeichnet wird, zwischen
dem Empfang der unvollständigen
Schreibanweisung und den entsprechenden Schreibdaten vergehen. Die
Speichersteuerung 107 verwendet jedoch den Nebenpuffer 112,
um unvollständige
Schreibanweisungen zu speichern, so daß nachfolgend empfangene, nicht damit
in Konflikt stehende Speicherzugriffsanweisungen während der
Warteperiode auf die unvollständige
Schreibanweisung verarbeitet werden können.
-
Die
Speichersteuerung 107 verarbeitet empfangene Speicherzugriffsanweisungen
gemäß dem logischen
Flußdiagramm 300 (3),
in welchem die Verarbeitung mit dem Schritt 302 beginnt.
In Schritt 302 empfängt
die Speichersteuerung 107 (1) eine
Speicherzugriffsanweisung. In einer Ausführungsform verarbeitet die
Speichersteuerlogik 110 Speicherzugriffsanweisungen so,
wie sie durch die Speichersteuerung von dem Prozessor 104 empfangen
wurden und bevor empfangene Speicherzugriffsanweisungen auf dem
Haupt-FIFO 114 in einer Schlange angeordnet werden. In
einer alternativen Ausführungsform
verarbeitet die Speichersteuerlogik 110 Speicherzugriffsanweisungen,
wie sie aus dem Haupt-FIFO 114 aus der Schlange aufgelöst wurden, nachdem
alle zuvor empfangenen Speicherzugriffsanweisungen verarbeitet worden
sind. In jedem Fall wird die Speicherzugriffsanweisung, welche durch
die Speichersteuerlogik 110 in den Schritten des logischen
Flußdiagramms 300 (3)
verarbeitet wird, hier als die in Rede stehende Speicherzugriffsanweisung
bezeichnet.
-
In
Schritt 304 (3), in welchem die Verarbeitung
von Schritt 302 aus fortschreitet, bestimmt die Speichersteuerlogik 110 (1)
der Speichersteuerung 107, ob die in Rede stehende Speicherzugriffsanweisung
vollständig
ist. Die in Rede stehende Speicherzugriffsanweisung ist vollständig, wenn
(i) die in Rede stehende Speicherzugriffsanweisung eine Leseanweisung
ist, wie es durch eine Leseanforderung angezeigt wird, und die einen
Leseadreßbereich
enthält,
oder (ii) die in Rede stehende Speicherzugriffsanweisung eine Schreibanweisung
ist, wie sie durch eine Schreibanforderung angezeigt wird, und die
einen Schreibadreßbereich
und Schreibdaten enthält.
Wenn die Speichersteuerlogik 110 feststellt, daß die in
Rede stehende Speicherzugriffsanweisung vollständig ist, geht die Verarbeitung weiter
zu dem Testschritt 308 (3), welcher
nachstehend beschrieben wird. Umgekehrt geht, wenn die Speichersteuerlogik 110 (1)
feststellt, daß die
in Rede stehende Speicherzugriffsanweisung unvollständig ist,
die Verarbeitung von dem Testschritt 304 (3)
zu dem Testschritt 306.
-
In
dem Testschritt 306 stellt die Speichersteuerlogik 110 (1)
fest, ob der Nebenpuffer 112 für eine Speicherung einer unvollständigen Schreibanweisung
verfügbar
ist. Die Speichersteuerlogik 110 betrifft eine solche Feststellung
durch Vergleich von Daten, die in einem Gültigkeitsfeld 206 (2)
des Nebenpuffers 112 gespeichert sind, mit Daten, welche
anzeigen, daß der
Nebenpuffer für
die Speicherung einer Speicherzugriffsanweisung verfügbar ist. Der
Nebenpuffer 112 und das Gültigkeitsfeld 206 werden
unten noch genauer beschrieben. Wenn der Nebenpuffer 112 für eine Speicherung
einer unvollständigen
Schreibanweisung nicht verfügbar
ist, geht die Verarbeitung zurück
zu dem Testschritt 306. Die Verarbeitung der in Rede stehenden
Speicherzugriffsanweisung wird damit angehalten, bis der Nebenpuffer 112 für eine Speicherung
der in Rede stehenden Speicherzugriffsanweisung verfügbar ist. Umgekehrt
geht, wenn der Nebenpuffer 112 für die Speicherung einer unvollständigen Schreibanweisung
verfügbar
ist, die Verarbeitung von dem Testschritt 306 (3)
zu Schritt 308.
-
In
Schritt 308 speichert die Speichersteuerlogik 110 (1)
die in Rede stehende Speicherzugriffsanweisung, die, wie oben im
Kontext des Testschritts 304 (3) beschrieben
wurde, als unvollständige
Schreibanweisung bestimmt wurde, in dem Nebenpuffer 112 (1).
Der Nebenpuffer 112 ist in 2 genauer
dargestellt. Der Nebenpuffer 112 enthält Felder 204–208 zum
Speichern einer Speicherzugriffsanweisung und entsprechender Beschreibungsdaten
der Speicherzugriffsanweisung. Die Felder 204–208 enthalten
ein Adreßfeld 204,
ein Gültigkeitsfeld 206 und
ein Schreibdatenfeld 208. Jedes der Felder 204–208 speichert
Daten, die gemeinsam ein bestimmtes Stück einer Information angeben,
die sich auf eine Speicherzugriffsanweisung bezieht.
-
Das
Adreßfeld 204 speichert
Daten, welche einen Speicheradreßbereich der Speichereinrichtung 108 angeben,
der die Zieladresse für
eine bestimmte Schreibanweisung ist. Das Gültigkeitsfeld 206 speichert
Daten, die ein Gültigkeitstag
spezifizieren, welches anzeigt, ob die entsprechende Speicherzugriffsanweisung
gültig
ist. Insbesondere zeigen Daten, welche in dem Gültigkeitsfeld 206 gespeichert sind,
an, ob der Nebenpuffer 112 eine Speicherzugriffsanweisung
speichert oder für
die Speicherung einer Speicherzugriffsanweisung verfügbar ist.
Das Schreibdatenfeld 208 ordnet Speicherraum zum Speichern
von Schreibdaten zu, wenn derartige Schreibdaten nachfolgend empfangen
werden, um eine unvollständige
Schreibanweisung, die in dem Nebenpuffer 112 gespeichert
ist, zu vervollständigen.
-
Im
Verlaufe des Ladens der in Rede stehenden Speicherzugriffsanweisung
in den Nebenpuffer 112 (1) in Schritt 308 (3)
speichert die Speichersteuerlogik 110 (1)
(1) die Schreibadresse, die durch die in Rede stehende Speicherzugriffsanweisung
angegeben wird, in dem Adreßfeld 204 (2),
und (2) setzt das Gültigkeitstag
in dem entsprechenden Gültigkeitsfeld 206 (2),
um anzuzeigen, daß der
Nebenpuffer 112 eine gültige
Speicherzugriffsanweisung enthält.
-
Nach
dem Schritt 308 (3) wird
die Verarbeitung entsprechend dem logischen Flußdiagramm 300 vervollständigt. Demnach
wird, falls die in Rede stehende Speicherzugriffsanweisung eine
unvollständige
Schreibanweisung ist, die unvollständige Schreibanweisung nicht
verarbeitet, sondern wird stattdessen in dem Nebenpuffer 112 (1)
gespeichert, bis die erforderlichen Schreibdaten anschließend durch
die Speichersteuerung empfangen werden. Die Verarbeitung durch die
Speichersteuerung 107 nach dem Empfang der Schreibdaten,
welche einer zuvor empfangenen unvollständigen Schreibanweisung entsprechen,
verläuft
entsprechend dem logischen Flußdiagramm 400 (4),
das nachstehend noch genauer beschrieben wird. Es versteht sich,
daß die
nachfolgend empfangenen Speicherzugriffsanweisungen durch die Speichersteuerlogik 110 (1)
entsprechend dem logischen Flußdiagramm 300 (3)
vor dem Empfang der erforderlichen Schreibdaten zur Vervollständigung
einer unvollständigen
Schreibanweisung verarbeitet werden können.
-
Wenn
in dem Testschritt 304 (3) die Speichersteuerlogik 110 (1)
feststellt, daß die
in Rede stehende Speicherzugriffsanweisung vollständig ist,
geht die Verarbeitung von Schritt 304 (3) zu
Testschritt 310. In dem Testschritt 310 stellt
die Speichersteuerung 110 (1) fest,
ob die in Rede stehende Speicherzugriffsanweisung mit irgendeiner Speicherzugriffsanweisung,
die in dem Nebenpuffer 112 gespeichert ist, in Konflikt
steht, die hier manchmal als die Speicherzugriffsanweisung des Nebenpuffers
bezeichnet wird. Da die Speicherzugriffsanweisung des Nebenpuffers
in dem Nebenpuffer 112 bei einer vorherigen Ausführung der
Schritte des logischen Flußdiagramms 300 (3)
gespeichert wurde, ist es wichtig zu verifizieren, daß es keinen Konflikt
zwischen der in Rede stehenden Speicherzugriffsanweisung und der
Speicherzugriffsanweisung im Nebenpuffer gibt, da dies eine Voraussetzung
der Verarbeitung der in Rede stehenden Speicherzugriffsanweisung
vor dem Verarbeiten der Speicherzugriffsanweisung im Nebenpuffer
ist. Dies erhält
die Datenintegrität.
-
Die
Speichersteuerlogik 110 (1) stellt fest,
ob die in Rede stehende Speicherzugriffsanweisung mit der Speicherzugriffsanweisung
im Nebenpuffer in Konflikt steht, indem sie den Schreibadreßbereich
der Speicherzugriffsanweisung im Nebenpuffer mit dem Adreßbereich
der in Rede stehenden Speicherzugriffsanweisung vergleicht. Der
Adreßbereich
der in Rede stehenden Speicherzugriffsanweisung ist ein Leseadreßbereich,
wenn die in Rede stehende Speicherzugriffsanweisung eine Leseanweisung
ist, und sie ist ein Schreibadreßbereich, wenn die in Rede
stehende Speicherzugriffsanweisung eine Schreibanweisung ist. Beim
Vergleichen der jeweiligen Adreßbereiche
stellt die Speichersteuerlogik 110 fest, ob eine oder mehrere
Speicheradressen beiden Adreßbereichen
gemeinsam sind. Daher stellt die Speicherlogik 110 (1)
im Testschritt 310 (3) fest,
ob die in Rede stehende Speicherzugriffsanweisung mit der Speicherzugriffsanweisung des Nebenpuffers
in Konflikt steht, indem sie bestimmt, ob die entsprechenden Adreßbereiche
eine oder mehrere Adressen gemeinsam haben.
-
Wenn
die Speichersteuerlogik 110 (1) in dem
Testschritt 310 (3) feststellt,
daß die
in Rede stehende Speicherzugriffsanweisung mit der Speicherzugriffsanweisung
des Nebenpuffers in Konflikt steht, führt eine Verarbeitung entsprechend
dem logischen Flußdiagramm 300 dazu,
daß der
Testschritt 310 wiederholt ausgeführt wird, oder anderenfalls
abgewartet wird, bis der unvollständige Schreibbefehl, der in
dem Nebenpuffer 112 gespeichert ist, abgeschlossen und
verarbeitet ist. Nachdem die in dem Nebenpuffer 112 gespeicherte
Schreibanweisung abgeschlossen und verarbeitet ist, steht der in
Rede stehende Speicherzugriff nicht mehr in Konflikt mit der Speicherzugriffsanweisung
des Nebenpuffers und die Verarbeitung entsprechend dem logischen Flußdiagramm 300 (3)
geht weiter zu Schritt 312, der nachstehend beschrieben
wird. Wenn die Speichersteuerlogik 110 (1)
in dem Testschritt 310 feststellt, daß die in Rede stehende Speicherzugriffsanweisung
nicht mit der Speicherzugriffsanweisung im Nebenpuffer in Konflikt
steht, geht die Verarbeitung entsprechend dem logischen Flußdiagramm 300 (3)
von dem Testschritt 310 zu dem Schritt 312 weiter.
-
In
Schritt 312 (3) verarbeitet die Speichersteuerlogik 110 (1)
die in Rede stehende Speicherzugriffsanweisung. In der beispielhaften Ausführungsform,
in welcher die Speichersteuerung 107 die in Rede stehende
Speicherzugriffsanweisung in Schritt 302 empfängt, verarbeitet
die Speichersteuerlogik 110 die in Rede stehende Speicherzugriffsanweisung
in Schritt 312, indem sie die in Rede stehende Speicherzugriffsanweisung
auf dem Haupt-FIFO 114 für eine nachfolgende Verarbeitung in
einer Schlange anordnet, was ein Bewirken der Datenübertragung
innerhalb der Speichersteuereinrichtung 108 entsprechend
der in Rede stehenden Speicherzugriffsanweisung einschließt. In der
alternativen Ausführungsform,
in welcher die in Rede stehende Speicherzugriffsanweisung in Schritt 302 aus dem
Haupt-FIFO 114 aus der Schlange genommen wird, verarbeitet
die Speichersteuerlogik 110 (1) die in
Rede stehende Speicherzugriffsanweisung, indem sie die Datenübertragung
innerhalb der Speichereinrichtung 108 gemäß der in
Rede stehenden Speicherzugriffsanweisung bewirkt.
-
Demnach
wird die in Rede stehende Speicherzugrffsanweisung, welche durch
die Speichersteuerung 107 nach dem Empfang der Speicherzugriffsanweisung
des Nebenpuffers empfangen wird, vor der Speicherzugriffsanweisung
des Nebenpuffers verarbeitet, wenn die in Rede stehende Speicherzugriffsanweisung
und die des Nebenpuffers nicht in Konflikt miteinander sind. Im
Ergebnis wird die Verarbeitung von nicht in Konflikt stehenden Leseanweisungen
während
des Wartens auf die Vervollständigung
einer zuvor empfangenen, unvollständigen Schreibanweisung nicht
verschoben. Dementsprechend erkennt man gemäß der Erfindung eine beträchtliche
Verbesserung hinsichtlich der Verarbeitung der Speicherzugriffsanweisung
und hinsichtlich des Durchsatzes.
-
Die
Speichersteuerung 107 verarbeitet Schreibdaten, die von
dem Prozessor 104 über
die synchrone Verbindung 102 empfangen wurden, wie es in
dem logischen Flußdiagramm 400 (4)
dargestellt wird, in welchem die Verarbeitung mit dem Schritt 402 beginnt.
In Schritt 402 empfängt
die Speichersteuerlogik 110 (1) Schreibdaten.
Von Schritt 402 (4) geht
die Verarbeitung weiter zu Schritt 404, in welchem die
Speichersteuerlogik 110 (1) eine
zuvor empfangene, unvollständige Schreibanweisung
vorfindet, die in dem Nebenpuffer 112 gespeichert ist und
welcher die aktuell empfangenen Schreibdaten entsprechen.
-
In
Schritt 406 (4) bildet die Speichersteuerlogik 110 (1)
eine vollständige
Schreibanweisung, indem sie die empfangenen Schreibdaten und die
unvollständige
Schreibanweisung miteinander kombiniert, die den empfangenen Schreibdaten entspricht.
Die Verarbeitung geht weiter zu Schritt 408 (4),
in welchem die Speichersteuerlogik 110 (1)
die nunmehr vervollständigte
Speicherzugriffsanweisung des Nebenpuffers in der Weise verarbeitet,
die oben in Verbindung mit Schritt 312 (3)
beschrieben wurde. Zusätzlich
wird nach Schritt 408 (4) jegliche
Speicherzugriffsanweisung, die in Testschritten 306 und/oder 310 in
Anbetracht der anhängigen
Verarbeitung der Speicherzugriffsanweisung des Nebenpuffers angehalten
wurde, freigegeben. Insbesondere wird jede unvollständige Schreibanweisung,
die in Testschritt 306 angehalten wurde, in Schritt 308 in
dem Nebenpuffer 112 gespeichert, und jede vollständige Speicherzugriffsanweisung,
die in Konflikt mit der Speicherzugrffsanweisung des Nebenpuffers
war und daher in Testschritt 310 angehalten wurde, wird
in Schritt 312 verarbeitet, wie oben beschrieben.
-
Durch
Verwenden des Nebenpuffers 112 für das zeitweilige Speichern
unvollständiger
Schreibanweisungen kann die Verarbeitung nachfolgend ausgegebener
Speicherzugriffsanweisungen fortgeführt werden, solange derartige
nachfolgend ausgegebene Speicherzugriffsanweisungen nicht in Konflikt
mit der Speicherzugriffsanweisung des Nebenpuffers sind. Die Verwendung
des Nebenpuffers 112 in der oben beschriebenen Weise verbessert
die Leistungsfähigkeit
und den Speicherzugriffsdurchsatz einer Speichersteuerung in einem
System mit aufgespaltener Transaktion beträchtlich.
-
Es
versteht sich, daß die
obige Beschreibung lediglich beispielhaft und nicht beschränkend ist.