-
Die
vorliegende Erfindung bezieht sich allgemein auf ein Verfahren und
eine Vorrichtung zum Ermöglichen
einer effizienten Kommunikation in einem Computernetzwerk.
-
Computernetzwerke
mit verteiltem, gemeinsam verwendeten Speicher (DSM – Distributed Shared
Memory) sind im Stand der Technik bekannt. Zum Zwecke der Erläuterung
veranschaulicht 1 ein Computernetzwerk 10,
welches eine Netzwerk-Infrastruktur 12 (NI) hat. Vier Netzwerkknoten 100, 102, 104 und 106 sind
als an die Netzwerkinfrastruktur 12 angeschlossen dargestellt. Über die
Netzwerkinfrastruktur 12 können die Knoten 100–106 miteinander
kommunizieren, um Programme, Daten und dergleichen gemeinsam zu
verwenden. Selbstverständlich
kann die Anzahl der Knoten, die pro Netzwerk 10 vorgesehen
sind, von den konkreten Bedürfnissen
abhängen
und kann irgendeine beliebige Anzahl von Knoten umfassen.
-
Innerhalb
jedes Netzwerkknotens gibt es einen Speicherraum, der typischerweise
in einem Speichermodul implementiert ist, auf dessen Speicherblöcke andere
Netzwerkknoten Zugriff haben können.
Im Allgemeinen hat jeder Speicherblock in dem Netzwerk eine eindeutige
Adresse, welche es ermöglicht,
an das er eindeutig adressiert bzw. angesprochen wird. Die Einheit
bzw. Gesamtheit aller Speicherblöcke
in den Knoten des Netzwerkes 10 bildet den verteilten,
gemeinsam verwendeten Speicher (DSM). Es versteht sich jedoch, dass,
auch wenn auf die Speicherblöcke
des DSM durch irgendeinen Netzwerkknoten zugegriffen werden kann,
ein gegebener Speicherblock typischerweise irgendeinem Heimatknoten
in dem Netzwerk 10 zugeordnet ist.
-
Für Zwecke
der vorliegenden Erfindung kann die Netzwerk-Infrastruktur 12 irgendeine
Konfiguration haben und kann durch irgendein beliebiges Protokoll
implementiert sein. Im Allgemeinen besitzt die Netzwerk-Infrastruktur 12 die
Fähigkeit,
eine Nachricht korrekt von einem Knoten zu einem anderen entsprechend
der mit der Nachricht verknüpften
Zieladresse zu überbringen.
Eine beispielhafte Netzwerk-Infrastruktur ist Sequent Numa-Q, die
bei Sequent Computer Systems, Inc. in Beaverton, OR, erhältlich ist.
-
Jeder
der Netzwerkknoten 110–106 kann
so einfach sein, wie ein Computer, der einen einzigen Prozessor
hat, welcher über
einen Speicher-Cache mit seinem eigenen Speicher verbunden ist.
Ein Netzwerkknoten kann aber auch so kompliziert sein, dass er ein
vollständiges,
Bus-basiertes Mehrprozessorsystem oder sogar ein Teilnetzwerk mit
mehreren Prozessoren sein kann. In letzterem Fall kann ein Knoten
mehrere Prozessoren aufweisen, die jeweils mit ihrem eigenen Speichermodul
und Speicher-Cache verbunden sind, ebenso wie auch mit verteiltem, gemeinsam
verwendeten Speicher, der über
andere Knoten in dem Netzwerk verteilt ist. Der Einfachheit der
Darstellung wegen wird die Erfindung hier unter Bezug auf Knoten
beschrieben, die einen einzigen Prozessor haben. Es sollte jedoch
für Fachleute,
welche diese Offenbarung erfahren, auf der Hand liegen, dass die
hier offenbarten Prinzipien und Techniken in einfacher Weise auf
Knoten erweiterbar sind, die mehrere Prozessoren haben.
-
Im
Stand der Technik kommunizieren die Netzwerkknoten typischerweise
miteinander, indem sie einen Ansatz auf Bus-Basis oder ein direktes
Protokoll verwenden. Als Beispiel zeigt 2 ein Schema
eines Computer-Netzwerks, einschließlich beispielhafter Knoten 100a und 100b,
für die
Implementierung einer Version eines Protokolls nach dem Stand der
Technik auf Bus-Basis. In dem Knoten 110a nach 2 ist
der Prozessor 200a mit einem Speichermodul 204a,
beispielsweise einem dynamischen Speichermodul mit wahlweisen Zugriff (SRAM), über einen
Speicher-Cache 202a verbunden, der typischerweise unter
Verwendung einer Art eines schnellen Speichers implementiert ist,
beispielsweise in Form eines statischen Speichers mit wahlfreiem
Zugriff (SRAM – Static
Random Access Memory). Das Speichermodul 204a kann in Speicherblöcke aufgeteilt
sein und der Speicher-Cache 202a dient dazu, den Zugriff
auf Speicherblöcke des
Speichermodus 200a zu beschleunigen, indem er eine Kopie
des angeforderten Speicherblocks hält, und zwar entweder von seinem
eigenen Knoten oder einem anderen Knoten in dem Netzwerk (wie zum Beispiel
dem Knoten 100b) in seinen schnellen Speicherschaltkreisen. Über eine
Netzwerkschnittstelle (die in jedem Knoten enthalten ist, jedoch
aus Gründen
der Einfachheit der Darstellung nicht dargestellt ist) kann der
Knoten 100a mit dem Knoten 100b ebenso wie mit
anderen Knoten in dem Netzwerk über
eine Bus-basierte Netzwerk-Infrastruktur kommunizieren, beispielsweise
einen Bus 206, um auf den verteilten, gemeinsam verwendeten
Speicher (DSM) Zugriff zu erhalten, der über die Knoten in dem Netzwerk
verteilt ist.
-
In
einem Computernetzwerk auf Bus-Basis wird eine Speicheranforderung
von einem gegebenen Knoten typischerweise auf dem gemeinsamen Bus
an andere Knoten rundgesendet, so dass die Anforderung von allen
anderen Knoten in dem Netzwerk erkannt werden kann. Wenn beispielsweise
der Prozessor 200a nach 2 Zugriff
auf einen Speicherblock benötigt,
welcher in einem anderen Speichermodul eines anderen Netzwerkknotens
liegt, sendet er typischerweise seine Speicherzugriffsanforderung auf
dem gemeinsamen Bus rund. Alle Knoten auf einem Netzwerk würden eben
diese Anforderung empfangen, und derjenige Knoten, dessen Speicheradressbereiche
zu der Speicheradresse passen, welche in der Speicherzugriffsanforderung
vorgesehen ist, wird dann antworten.
-
Diese
Rundsendetechnik arbeitet in angemessener Weise für relativ
kleine Computernetzwerke. Wenn Computernetzwerke größer werden und/oder
physikalisch bzw. räumlich
stär ker
verteilt sind, hat der Ansatz auf Bus-Basis gewisse Schwiengkeiten.
Wenn der Bus beispielsweise größer wird,
um mehr Knoten aufzunehmen, so ist es wünschenswert, den Bus mit einer
höheren
Geschwindigkeit zu betreiben, da jeder Knoten im allgemeinen für eine gewisse
Zeitdauer Zugriff auf den Bus benötigt, um seine Transaktionen
auszuführen. Das
Betreiben eines großen
Busses mit hoher Frequenz ist jedoch schwierig, da, wenn Busse größer werden,
sie auch elektrisch länger
werden und elektrische Aspekte, zum Beispiel die Kapazität, ihre
Betriebsfrequenz beträchtlich
einschränken
können. Dementsprechend
ist der Einsatz auf Bus-Basis im Allgemeinen für große oder räumlich weit verteilte Computernetzwerke
ungeeignet.
-
Weiterhin
erfordert ein Protokoll auf Bus-Basis das Vorsehen eines Vermittlungsschaltkreises, um
eine natürliche
Reihenfolge von Transaktionen durch die verschiedenen Knoten des
Computernetzwerkes durchzusetzen. Der Vermittler muss sicherstellen,
dass Bus-Zugriffsanforderungen
von den verschiedenen Netzwerkknoten angemessen sortiert werden,
um Konkurrenzzustände
zu vermeiden. Die Verwendung von Vermittlerschaltkreisen und eines Vermittlungsschemas
entspricht einer zusätzlichen Komplexitätsebene
und trägt
damit zu den Kosten bei dem Aufbau und der Wartung von Computernetzwerken
bei.
-
Wie
Fachleute erkennen, stellen die zusätzlichen Nachrichten, die in
einem Bus-basierten System von dem anfordernden Knoten an alle Knoten
in ein Netzwerk ausgesendet werden müssen, eine Zusatzlast für Bus dar.
Darüber
hinaus muss der anfordernde Knoten jeden Knoten in dem Netzwerk
befragen und erfordert, dass jeder Knoten die Anforderung analysiert,
um die Anforderung entweder zu ignorieren oder zu beantworten. Die
zusätzliche
Arbeit, die an den anderen Knoten im Netzwerk erforderlich ist, entspricht
einer zusätzlichen
Verzögerung
und zusätzlicher
Verarbeitung, welche die Netzwerkknoten ausführen müssen.
-
Das
Verzeichnis-Protokoll bietet einen Versuch, ein Computernetzwerk
zu implementieren, in welchem eine natürliche Rundsendung nicht erforderlich
ist, um Speicherzugriffsanforderungen zu bedienen, das heißt eine
Transaktion oder eine Anforderung von einem Knoten muss nicht an
alle anderen Knoten in dem Netzwerk rund gesendet werden. 3 veranschaulicht
zum Zwecke der Erläuterung einen
Computernetzwerkknoten 100, der für die Implementierung des Verzeichnisprotokolls
geeignet ist. In jedem Knoten des Computernetzwerks, welches das
Verzeichnisprotokoll verwendet, kann ein Verzeichnis vorgesehen
sein, welches Verzeichnisseinträge
für die
Speicherblöcke
ihres Speichermoduls enthält.
Gemäß 3 ist
ein Verzeichnis 210 dargestellt, welches als eine Datenstruktur
in einem Speicher implementiert sein kann und welches Verzeichniseinträge enthält, von
denen jeder einem eindeutigen Speicherblock des Speichermoduls im
Knoten 100 entspricht. Beispielsweise ist im Verzeichnis 210a ein
Verzeichniseintrag 212 dargestellt, welcher einem Speicherblock 208 in
einem Speichermodul 204 entspricht. Die Einheit bzw. Gesamtheit
aller Verzeichniseinträge
in einem gegebenen Knoten entspricht dem Verzeichnis für diesen
Knoten. Außerdem
ist in 3 eine Schnittstelle 206 dargestellt, welche
den Schaltkreis für
den Anschluss eines Knotens an seine Außenwelt, beispielsweise an
die Netzwerkinfrastruktur, repräsentiert.
-
In
dem Verzeichnisprotokoll muss jeder Knoten in dem Netzwerk, beispielsweise
jeder der Knoten 100–106,
wissen, ob er eine exklusive Kopie eines Speicherblocks (eine modifizierbare
oder M-Kopie), eine gemeinsam verwendete, Nur-Lesekopie (eine S-Kopie)
hat, oder ob er keine Kopie (eine ungültige oder I-Kopie) hat. Wenn
ein Knoten eine M-Kopie des Blockes hat, so sagt man, dass er eine exklusive
Kopie habe und dass er diese Kopie modifizieren kann, um zu bewirken,
dass sie sich möglicherweise
von ihrem Gegenstück
in dem Speichermodul 204 des Heimatknotens des Blockes
unterscheidet. Wenn irgendein Knoten in dem Computernetzwerk eine
M-Kopie des Speicherblocks 208 besitzt, geben alle anderen
Knoten ihre Kopien auf, das heißt
sie besitzen nur I-Kopien dieses Speicherblockes.
-
Während vielleicht
nur ein Knoten eine M-Kopie eines Speicherblockes hat, können mehrere Knoten
gleichzeitig gemeinsam verwendete Kopien (S-Kopien) besitzen. Ein
Knoten, welcher eine S-Kopie hat, hat im wesentlichen eine Nur-Lese-Kopie, das
heißt
er kann nicht die Inhalte des Speicherblocks modifizieren. S-Kopien
eines Speicherblocks können
gleichzeitig mit I-Kopien desselben Speicherblocks in einem Netzwerk
existieren. S-Kopien eines Speicherblocks können jedoch nicht mit irgendeiner M-Kopie
desselben Speicherblocks coexistieren.
-
In
einer Implementierung kann ein Knoten vom Cache von einer exklusiven
Kopie (M-Kopie) anfordern, indem er eine RTO-Anforderung herausgibt, wobei
RTO für "Lesen um zu besitzen" ("Read to own") steht. Ein Knoten
kann vom Cache eine gemeinsam verwendete Kopie eines Speicherblocks anfordern,
indem er eine RTS-Anforderung ausgibt, wobei RTS für "Read to Share" (lesen um gemeinsam
zu verwenden") steht.
Ein Knoten kann außerdem
anfordern, dass die exklusive M-Kopie eines Speicherblocks, die
er gerade besitzt, durch Ausgabe einer WB-Anforderung zurück zu schreiben,
wobei WB für
Zurückschreiben
("writeback") steht.
-
Wie
schon gesagt, weiß jeder
Knoten in dem Computernetzwerk, was für eine Art von Kopie des Speicherblockes 208 er
gerade besitzt. Demnach wird diese Kenntnis, welche sich auf den
Speicherblock bezieht, unter den Knoten des Netzwerks verbreitet.
Darüber
hinaus wird dieselbe Kenntnis bezüglich des Speicherblocks 208 auch
zentral an den Heimatknoten des Speicherblocks 208 mitgeteilt,
das heißt
in einem Verzeichniseintrag 212 des Verzeichnisses 210.
-
Um
die Darstellung zu vereinfachen, wird die Erläuterung hier unter Bezug auf
das aus vier Knoten bestehende Netzwerk nach 1 gegeben,
auch wenn das Netzwerk, wie schon erwähnt, irgendeine beliebige Anzahl
von Knoten enthalten mag. Die Arbeitsweise des Verzeichnisprotokolls
nach dem Stand der Technik kann am besten unter Bezug auf die Beispiele
nach 4 und das Zustandsdiagramm nach 5 veranschaulicht
werden. In 4 sind in Reihen A-H die Zustände für den Speicherblock 208 des
Knotens 100 nach 3 dargestellt. Zu
irgendeinem beliebigen Zeitpunkt repräsentiert eine der Reihen A-H
den Inhalt des Verzeichniseintrags 212 in dem Verzeichnis 210 am
Heimatknoten 100. Man sollte dabei bedenken, dass, auch
wenn ein einzelner Speicherblock 208 hier im einzelnen
erläutert
wird, die Aufnahme in Caches typischerweise mit einer Mehrzahl von
Speicherblöcken
ausgeführt wird.
-
In
Reihe A ist ein Knoten 100 dargestellt, welcher eine exklusive
M-Kopie des Speicherblocks 218 hat (M-Zustände in Reihe
A, Spalte 100). Definitionsgemäß müssen alle anderen Netzwerkknoten ungültige Kopien
des Speicherblocks 208 haben (dargestellt durch Zustände E in
Reihe A, Spalten 102, 106). Nach Belieben kann
die M-Kopie des Speicherblocks 208 aktuell durch den Cache-Speicher
aufgenommen werden, in dem beispielsweise in dem Knoten 100,
oder in dem Speichermodul des Heimatknotens.
-
Transaktion # 1 Reihe
A zu Reihe B in 4):
-
Man
nehme an, dass der Knoten 104 nunmehr eine exklusive M-Kopie
des Speicherblocks 208 haben möchte, welche, sowie es in dem
Zustand A dargestellt ist, gerade an ihrem Heimatknoten 100 liegt.
Gemäß 4 entspricht
der Knoten 104 dem anfordernden Knoten 502, während Knoten 100 dem Heimatknoten
für den
Speicherblock 208 entspricht, der in 4 als
Heimatknoten 508 dargestellt ist. Der abhängige Knoten 512 entspricht
dem Knoten, bei welchem die Kopie des Speicherblocks 208 aktuell liegt.
In Reihe A ist der abhängige
Knoten 512 zufällig derselbe
Knoten, wie der Heimatknoten, das heißt der Knoten 100.
-
Die
RTO-Anforderung von dem Knoten 104 (mit dem anfordernden
Knoten 502 bei dieser ersten Transaktion) wird über den
Pfad 504 an den Heimatknoten 100 (Knoten 508)
weitergeleitet. Das Weiterleiten der RTO-Transaktion von dem anfordernden Knoten
an den Heimatknoten wird typischerweise durch die Netzwerkinfrastruktur 12 gehandhabt,
welche die Adresse verwendet, die mit der RTO-Anforderung geliefert
wird. Die Netzwerkinfrastruktur 12 weiß, wo sich der Heimatknoten
für einen
bestimmten Speicherblock befindet, beispielsweise aufgrund einer
Zuordnung der Adresse des Blocks zu den Adressbereichen der verschiedenen
Knoten. Wenn der Heimatknoten 100 (Knoten 508)
die RTO-Nachricht empfängt,
so setzt er das Anhängigkeitsbit,
welches zu dem angeforderten Speicherblock 208 gehört. Das
Setzen des Anhängigkeitsbits
zeigt an, dass auf den Speicherblock 208 zeitweise zugegrif fen
wird, dass er nicht verfügbar
ist, um eine weitere Zugriffsanforderung zu bedienen, welche sich
auf den Speicherblock 208 bezieht. Weiterhin weiß der Heimatknoten 100,
indem er das Verzeichnis 212 (Reihe A) überprüft, dass er eine exklusive
M-Kopie des Speicherblocks 208 hat und alle anderen Knoten ungültige Kopien
des Speicherblocks 208 haben. Dass er auch der Knoten ist,
bei welchem sich die Kopie befindet (abhängiger Knoten 512),
kann man sich in 5 den Knoten 100 als
einen vorstellen, welcher sowohl den Heimatknoten 508 als
auch den abhängigen
Knoten 512 umfasst. Der Knoten 100 (Heimatknoten 508/abhängiger Knoten 512)
sendet dann eine Kopie des Speicherblocks 208 über den Pfad 514 an
den anfordernden Knoten 104 (Knoten 502). Nach
Empfang einer Kopie des Speicherblocks 208 aktualisiert
der anfordernde Knoten 104 (Knoten 502) dann seine
Kopie in eine exklusive M-Kopie und sendet eine Bestätigungsnachricht über Pfad
den 506 an den Heimatknoten 100 (Knoten 508).
Der Empfang der Bestätigungsnachricht
durch den Heimatknoten 100 (Knoten 508), bewirkt,
dass der Heimatknoten 100 seine eigene Kopie des Speicherblocks 208 in
eine ungültige
I-Kopie herabstuft und seinen Verzeichniseintrag 212 aktualisiert
(in den der Reihe B) und zulässt,
dass das Anhängigkeitsbit, welches
zu dem Speicherblock 208 gehört, zurückgesetzt wird, wodurch nachfolgende
Transaktionen, welche den Speicherblock 208 betreffen,
bedient werden können.
Wie in der Transaktion # 1 dargestellt ist, beseitigt die Verwendung
der Anhängigkeitsbits
und der expliziten Nachrichten zwischen dem anfordernden Knoten,
dem Heimatknoten und dem abhängigen
Knoten (über
die Pfade 504, 506, 510 und 514)
das Erfordernis eines sich über
das gesamte Netzwerk erstreckenden Sendens (Rundsendens) zum Bedienen
der Transaktion # 1.
-
Weiterhin
beseitigt die Verwendung des Anhängigkeitsbits
das Erfordernis eines natürlichen Ordnungsmechanismus,
da Transaktionen zu einem Heimatknoten in derjenigen Reihenfolge
in einer Schlange angeordnet werden können, in welcher sie empfangen
werden und in dieser Reihenfolge bedient werden können, sobald
das Anhängigkeitsbit zurückgesetzt
wird.
-
Transaktion # 2 (Reihe
B zu Reihe D):
-
In
der Transaktion # 2 wirkt der Knoten 102 als der anfordernde
Knoten und fordert eine exklusive Kopie des Speicherblocks 208 an,
indem er eine RTO-Transaktion ausgibt. Die RTO-Transaktion wird durch die Netzwerkinfrastruktur 12 an
den Heimatknoten des Speicherblocks 208, das heißt den Knoten 508 in
der Transaktion # 2, über
den Pfad 504 weitergeleitet und bewirkt, dass der Heimatknoten 100 das
zu dem Speicherblock 208 gehörige Anhängigkeitsbit setzt. Die Netzwerkschnittstelle 12 weiß, dass
die Nachricht an den Knoten 100 überbracht werden sollte, da
sie die Adresse des angeforderten Speicherblocks ermitteln kann
und weiß,
welcher Knoten in dem Netzwerk der Heimatknoten für den angeforderten
Speicherblock ist. Der Knoten 100 kann aus dem Verzeichniseintrag 212 (Reihe
B) feststellen, dass der Knoten 104 aktuell die einzige
exklusive M-Kopie des Speicherblocks 208 hat.
-
Dementsprechend
sendet der Heimatknoten 100 (Knoten 508) über den
Pfad 510 eine Anforderung an den Knoten 104 (den
abhängigen
Knoten) um bei dem Knoten 104 anzufordern, dass er eine Kopie
des Speicherblocks 208 an den anfordernden Knoten, das
heißt
den Knoten 102 (Anforderungsknoten 502) übermittelt.
Der Knoten 104 ist bei dieser Transaktion der abhängige Knoten,
da er denjenigen Knoten repräsentiert,
bei welchem aktuell eine gültige
Kopie des angeforderten Speicherblocks liegt. Der abhängige Knoten 104 (Knoten 512)
stuft seine Kopie von einer exklusiven M-Kopie zu einer ungültigen I-Kopie
herab, da definitionsgemäß, falls
ein Knoten in dem Computernetzwerk eine exklusive M-Kopie hat, das
heißt
der anfordernde Knoten 102, alle anderen Knoten ungültige I-Kopien
haben müssen.
-
Wenn
der anfordernde Knoten 102 (Knoten 502 in der
Transaktion # 2) eine Kopie des Speicherblocks 208 empfängt, so
vermerkt er intern, dass er nunmehr eine exklusive M-Kopie hat (Reihe
D, Spalte 102) und er gibt über den Pfad 506 eine
Bestätigung
aus. Wenn der Heimatknoten 100 (Knoten 508) die
Bestätigungsnachricht über den
Pfad 506 von dem anfordernden Knoten empfängt, aktualisiert
er seine Kopie zu einer ungültigen
I-Kopie, falls erforderlich (in diesem Fall stellt es sich als unnötig heraus),
aktualisiert den Verzeichniseintrag 212 (in denjenigen
der Reihe D) und setzt das Anhängigkeitsbit, welches
zu dem Speicherblock 208 gehört, zurück, so dass weitere Transaktionen,
welche den Speicherblock 208 betreffen bzw. umfassen, bedient werden
können.
-
Transaktion # 3 (Reihe
D zu Reihe A):
-
In
der Transaktion # 3 fordert der Knoten 102, der eine exklusive
M-Kopie enthält,
dass der Inhalt des Speicherblocks 208 in den Heimatknoten 100 zurückgeschrieben
wird. Ein Knoten wünscht möglicherweise,
dass der Speicherblock, den er zuvor aus verschiedenen Gründen in
seinem Cache aufgenommen hat, zurückgeschrieben wird, das heißt, er möchte einen
anderen Speicherblock in den Cache aufnehmen und hat nicht genug
Platz in seinem Speicher-Cache. Gemäß 4 sendet
der anfordernde Knoten 102 (Knoten 502) eine Rückschreibe-(WB-)Transaktion
an die Netzwerkinfrastruktur. Die Netzwerkinfrastruktur leitet dann
diese Anforderung an den Heimatknoten des Speicherblocks 208, das
heißt
den Knoten 100. Nach Empfang dieser WB-Anforderung, setzt
der Heimatknoten 100 (Knoten 508) das zu dem Speicherblock 208 gehörige Anhängigkeitsbit.
-
Der
Heimatknoten 100 kann feststellen, dass der Knoten 102 die
exklusive Kopie besitzt, indem er den Verzeichniseintrag 212 (Reihe
D) überprüft. Der Heimatknoten 100 (Knoten 508)
sendet dann über den
Pfad 510 eine Nachricht an den abhängigen Knoten 512 (wobei
der Knoten aktuell die Kopie des Speicherblocks 208 hat,
welcher zufällig
derselbe Knoten wie der anfordernde Knoten 102 in dieser Rückschreibe-Transaktion
ist. Dementsprechend kön nen
der anfordernde Knoten 502 und der abhängige Knoten 512 in
der Transaktion als eine einzige Einheit betrachtet werden. Der
Knoten 102 (abhängiger
Knoten 512/anfordernder Knoten 502) sendet dann
eine Kopie des Speicherblocks 208 über den Pfad 506 an
den Heimatknoten 100 (Knoten 508), wo der Inhalt
des Speicherblocks 208 in den Heimatknoten 100 (Knoten 508)
geschrieben wird. Sobald der Inhalt des Speicherblocks 208 zurückgeschrieben
ist, kann der Verzeichniseintrag 212 aktualisiert werden (in
den der Reihe A) und das Anhängigkeitsbits,
welches zu dem Speicherblock 208 gehört, kann dann zurückgesetzt
werden.
-
Transaktion # 4 (Reihe
D zu Reihe E):
-
Der
Knoten 104 möchte
eine gemeinsam verwendete, Nur-Lesekopie des Speicherblocks 208 haben
und gibt eine RTS (Read to Share – Lesen zum gemeinsamen Verwenden)-Anforderung an die Netzwerkinfrastruktur
aus, um eine Nur-Lese-Kopie des Speicherblocks 208 anzufordern.
Die Netzwerkinfrastruktur 12 übermittelt dann die RTS-Anforderung
von dem anfordernden Knoten 104 (Knoten 502) über den
Pfad 504 an den Heimatknoten 100 (Knoten 508).
-
Indem
der Verzeichniseintrag 212 überprüft wird, weiß der Heimatknoten 100,
dass der Knoten 102 derzeit eine exklusive M-Kopie des
Speicherblocks 208 hat und das alle anderen Knoten aktuell ungültige I-Kopien
haben. Der Heimatknoten 100 sendet dann eine Nachricht über den
Pfad 510, um den abhängigen
Knoten 102, der eine M-Kopie hat, zu fragen bzw. aufzufordern,
sich selbst in eine S-Kopie herabzustufen und eine Kopie des Speicherblocks 408 an
den anfordernden Knoten 104 (Knoten 702) zu übermitteln.
Der abhängige
Knoten 102 (Knoten 512) sendet dann eine Kopie
des Speicherblocks 208 an den anfordernden Knoten 104 (Knoten 502) über den
Pfad 514 und stuft gleichzeitig die Kopie, die er hat,
von einer exklusiven M-Kopie in eine gemeinsam verwendete S-Kopie
herab. Nach dem Empfang einer Kopie des Speicherblocks 208 sendet der
anfordernde Knoten 104 (Knoten 502) dann über den
Pfad 506 eine Bestätigungsnachricht
an den Heimatknoten 100 (Knoten 508), was bewirkt,
dass der Verzeichniseintrag 212 aktualisiert wird (in den
der Reihe E) und dass das Anhängigkeitsbit,
welches zu dem Speicherblock 208 gehört, zurückgesetzt wird.
-
Transaktion # 5 (Reihe
F zu Reihe G):
-
In
einer Ausführungsform
kann, wann immer sich eine gemeinsam verwendete Nur-Lese-S-Kopie irgendwo in
dem Knoten befindet, der Heimatknoten auch eine Kopie der gemeinsam
verwendeten Nur-Lese-S-Kopie behalten. Die gemeinsam verwendete
Nur-Lese-S-Kopie kann beispielsweise von dem anfordernden Knoten 502 (nachdem
er eine Kopie des Speicherblockes von dem abhängigen Knoten empfangen hat)
an den Heimatknoten 508 gesen det werden, zusammen mit der
Bestätigungsnachricht des
Pfades 506. Da der Heimatknoten ebenfalls eine gemeinsam
verwendete Nur-Lese-S-Kopie hat, kann er in vorteilhafter Weise
eine nachfolgende RTS-Anforderung von einem weiteren Knoten in dem
Computernetzwerk direkt bedienen, ohne dass er einen anderen Knoten
in dem Netzwerk darum bitten muss, eine Kopie des angeforderten
Speicherblocks an den anfordernden Knoten zu übermitteln. Diese Transaktion
ist als Transaktion # 5 dargestellt, wenn die Zustände des
Speicherblocks 208 sich von demjenigen der Reihe F zu denjenigen
der Reihe G in 4 verändern.
-
In
der Transaktion # 5 haben die Knoten 100 und 102 aktuell
gemeinsam verwendete Nur-Lese-S-Kopien
des Speicherblocks 208 und die Knoten 104 und 106 haben
ungültige
I-Kopien desselben Speicherblocks.
Der Knoten 104 möchte
eine gemeinsam verwendete Nur-Lese-S-Kopie des Speicherblocks 208 haben
und gibt eine RTS-Anforderung aus, welche über den Pfad 506 am
Heimatknoten 100 (Knoten 508) ankommt. Da der
Heimatknoten 100 (Knoten 508) bereits eine gemeinsam verwendete
S-Kopie hat (er weiß dies
entweder selbst oder aufgrund einer Überprüfung des Verzeichniseintrags 212,
das heißt
Reihe F) muss er keine Kopie des Speicherblocks 208 von
einem anderen Knoten in dem Netzwerk anfordern und kümmert sich in
der Tat nicht darum, welche weiteren Kopien auf dem Knoten des Netzwerks
existieren mögen.
Dementsprechend können
der Heimatknoten 508 und der abhängige Knoten 512 als
dieselbe Einheit, das heißt als
Knoten 100, betrachtet werden und können über den Pfad 514 an
den anfordernden Knoten 104 (Knoten 502) mit einer
Kopie des Speicherblocks 208 antworten. Nach Empfang einer
Kopie des Speicherblocks 208 bestätigt der anfordernde Knoten 104 (Knoten 502)
durch Senden einer Nachricht über
den Pfad 506 an den Heimatknoten 100 (Heimatknoten 508/abhängiger Knoten 512),
was bewirkt, dass der Verzeichniseintrag 212 aktualisiert
wird (in denjenigen der Reihe G) und dass das Anhängigkeitsbit, welches
zu dem Speicherblock 208 gehört, zurückgesetzt wird.
-
Transaktion # 6 (Reihe
G zu Reihe H1:
-
Bei
der Transaktion # 6 haben die Knoten 100, 102 und 104 gemeinsam
verwendete, Nur-Lese-S-Kopien,
während
der Knoten 106 eine ungültige I-Kopie
des Speicherblocks 208 hat. Anschließend möchte der Knoten 106 (Knoten 502 in 4)
eine exklusive M-Kopie haben und gibt eine RTO-Transaktion an die
Netzwerkinfrastruktur 12 aus. Die Netzwerkinfrastruktur 12 übermittelt
dann die RTO-Anforderung an den Heimatknoten des Speicherblocks 208,
das heißt
an den Knoten 100, und zwar über den Pfad 504.
-
Durch Überprüfen des
Verzeichniseintrags 212 (Reihe G) weiß der Heimatknoten 100 (Knoten 508),
dass er eine gemeinsam verwendete Nur-Lese-S-Kopie hat (Reihe G,
Spalte 100) und dass andere Knoten, das heißt die Knoten 102 und 104 ebenfalls
gemeinsam verwendete Nur-Lese-S-Kopien haben. Der Heimatknoten 100 (Knoten 508)
muss Nachrichten an die anderen Knoten im Netzwerk senden, und zwar
in einer Ausführungsform
auf parallele Weise, um bei diesen abhängigen Knoten, das heißt bei den
Knoten 100, 102 und 104 anzufordern,
dass sie ihre Kopien des Speicherblocks 208 in ungültige I-Kopien
herabstufen.
-
Der
Knoten 100 kann sich selbst als abhängigen Knoten behandeln, da
eine gültige
Kopie des Speicherblocks 208 aktuell auf dem Knoten 100 liegt. Dementsprechend
können
der Heimatknoten 508 und der abhängige Knoten 512 als
dieselbe Einheit betrachtet werden, das heißt als Knoten 100.
Eine Konsequenz hieraus ist, dass jegliche Nachrichten, die zwischen
diesen beiden Einheiten gesendet werden, als ein Null-Vorgang betrachtet
werden können. Der
Heimatknoten 100 (Heimatknoten 508/abhängiger Knoten 512)
sendet dann eine Kopie des Speicherblocks 208 über den
Pfad 514 an den anfordernden Knoten 106 (Knoten 502).
-
Der
Heimatknoten 100 (Heimatknoten 508/abhängiger Knoten 512)
sendet an den anfordernden Knoten 106 (Knoten 502)
auch Information, welche sich auf die Anzahl der abhängigen Knoten
in dem Netzwerk bezieht, an welche es die Anforderung zum Herabstufen
gesendet hat. Diese Information wird durch den anfordernden Knoten 106 (Knoten 502)
gehalten. Alle abhängigen
Knoten, an welche der Heimatknoten 508 die Nachricht (über Pfad 510) gesendet
hat, sich selbst herabzustufen, berichten auch an den anfordernden
Knoten 106 (Knoten 502), um zu bestätigen, dass
sie ihre Kopien von gemeinsam verwendeten S-Kopien in ungültige I-Kopien herabgestuft
haben. Der anfordernde Knoten 106 (Knoten 502)
zählt dann
die Anzahl von Bestätigungen, um
sicherzustellen, dass alle abhängigen
Knoten, die ihre Kopien in dem Netzwerk herabstufen müssen, dies
bestätigt
haben.
-
Wenn
der anfordernde Knoten 106 (Knoten 502) damit
zufrieden gestellt ist, dass alle Knoten, die ihre Kopien herabstufen
müssen,
dies getan haben, sendet der anfordernde Knoten 106 (Knoten 502), dann
eine Bestätigungsnachricht über den
Pfad 506 an den Heimatknoten 100 (Knoten 508),
um zu ermöglichen,
dass der Heimatknoten 100 den Verzeichniseintrag 212 (in
denjenigen der Reihe H) aktualisiert und das Anhängigkeitsbit, welches zu dem Speicherblock 208 gehört, zurücksetzt.
-
Auch
wenn das Verzeichnisprotokoll das Erfordernis einer natürlichen
Ordnung und eines natürlichen
Rundsendens in einem Computernetzwerk beim Bedienen von Speicherzugriffsanforderungen beseitigt,
stellt das Erfordernis eines Verzeichniseintrags für jeden
Speicherblock in einem Knoten eine beträchtliche Speichergrundlast
(overhead) dar. Diese Speichergrundlast kann für Knoten, die eine große Anzahl
von Speicherblöcken
haben, beträchtlich sein.
In einigen Systemen kann die Implementierung eines Verzeichnisses
beispielsweise eine Speicherzusatzlast (bzw. -grundlast) von bis
zu 3 % erfordern. Aus diesem Grund wer den Verzeichnisse mitunter durch
weniger teuere, wenn auch langsamere Speicher implementiert, wie
zum Beispiel durch dynamische Speicher mit wahlfreiem Zugriff (DRAM).
-
Langsamere
Speicher bringen jedoch den Nachteil eines Leistungsabfalls bei
Systemen mit sich, welche das Verzeichnisprotokoll verwenden. Im Ergebnis
sind schon viele Versuche unternommen worden, um die Geschwindigkeit
zu optimieren, mit welcher auf Verzeichniseinträge in dem Verzeichnisprotokoll
zugegriffen werden kann, um die Erfüllung der Speicherzugriffsanforderungen
zu beschleunigen. 6 stellt ein Verzeichniscache-Protokoll
zur Optimierung von DSM-Zugriffen unter Verwendung von Verzeichnissen
dar. In 6 ist eine Verzeichniseinheit 600 dargestellt,
welche ein Verzeichnis 601 und einen Verzeichnis-Cache 604 enthält. Das
Verzeichnis 601 enthält
Verzeichnis-Einträge 602,
die jeweils allgemein einem einseitigen Speicherblock in einem Speichermodul
eines Knotens entsprechen, beispielsweise in dem Speichermodul 204 des
Knotens 100 von 3. In einer Ausführungsform
enthält jeder
Verzeichniseintrag 602 in dem Verzeichnis 601 ein
Feld zum Speichern der Verzeichniszustände der entsprechenden Speicherblöcke in den
Knoten des Computernetzwerks.
-
Der
Verzeichnis-fache 604 ist vorgesehen, um die Zugriffsgeschwindigkeit
auf Verzeichnis-Einträge 602 zu
verbessern. Der Verzeichnis-Cache 604 kann mit einem schnelleren
Speichertyp implementiert werden, als derjenige, der zum Implementieren des
Verzeichnisses 601 verwendet wurde, beispielsweise durch
einen statischen RAM. Der Verzeichnis-Cache 604 enthält Verzeichnis-Cache-Einträge 603,
welche einen Teilsatz von Verzeichniseinträgen 602 repräsentieren,
die durch irgendeinen Knoten in dem Netzwerk im fache aufgenommen
worden sind. Jeder Verzeichnis-Cache-Eintrag 603 kann ein
Feld aufweisen, um anzuzeigen, ob der Verzeichniseintrag gültig ist,
wobei ein weiteres Feld zum Speichern der Adresse des entsprechenden
Speicherblocks im fache aufgenommen ist und noch ein weiteres Feld zum
Speichern der Verzeichniszustände
der entsprechenden Speicherblöcke
in den Knoten des Netzwerks. Funktionell gesprochen kann man sich
die Verzeichniseinheit 600 als eine einzige Einheit vorstellen,
welche eine zu dem Verzeichnis 210 nach 3 äquivalente
Funktion hat, jedoch mit verbesserter Geschwindigkeit.
-
Gemäß dem Verzeichnis-Cache-Protokoll wird,
wenn der Zugriff auf einen Speicherblock erwünscht ist, der Verzeichnis-Cache 604 überprüft, um festzustellen,
ob der Verzeichniseintrag, welcher dem angeforderten Speicherblock
entspricht, bereits in dem Verzeichnis-Cache 604 existiert
bzw. vorliegt. Wenn der Verzeichniseintrag, der dem angeforderten Speicherblock
entspricht, bereits in dem Verzeichnis-Cache 604 vorliegt,
das heißt,
wenn es einen Cache-Treffer gibt, ist die Geschwindigkeit, mit welcher dieser
Verzeichniseintrag gelesen und modifiziert werden kann, beträchtlich
erhöht,
wodurch auch die Geschwindigkeit, mit welcher eine Speicherzugriffsanforderung
durch den Heimatknoten des angeforderten Speicherblocks bedient
werden kann, gesteigert ist.
-
Im
Falle eines Cache-Fehlzugriffs (das heißt der Verzeichniseintrag,
welcher dem angeforderten Speicherblock entspricht, kann in dem
Verzeichnis-Cache 604 nicht gefunden werden), schreibt
jedoch das Verzeichnisprotokoll vor, dass das ein geeigneter Verzeichniseintrag
aus dem Verzeichnis 601 in dem Verzeichnis-Cache 604 aufgenommen
wird. Sobald der geeignete Verzeichniseintrag im Cache aufgenommen
ist, kann er abgefragt werden, um das Bedienen der Speicherzugriffsanforderung
zu ermöglichen.
Nachdem die Speicherzugriffsanforderung, die den Speicherblock angefordert
hat, bedient worden ist, kann der im Cache aufgenommene Verzeichniseintrag
modifiziert werden, um die Zustände seines
entsprechenden Speicherblocks in den Netzwerkknoten wiederzugeben.
-
Auch
wenn das Protokoll des Verzeichnis-Caches eine Verbesserung hinsichtlich
der Geschwindigkeit darstellt, mit welcher auf Verzeichniseinträge zugegriffen
werden kann und mit welcher diese modifiziert werden können (und
zusätzlich
hinsichtlich der Geschwindigkeit, mit welcher Speicherzugriffsanforderungen
bedient werden können)
gibt es noch genügend
Raum für
eine weitere Verfeinerung bzw. Verbesserung. Wie zuvor bereits erwähnt, ist
es beispielsweise, wenn ein Verzeichnisfehler vorliegt, notwendig,
in dem Verzeichnisprotokoll auf das Verzeichnis 601 zuzugreifen,
um den erforderlichen Verzeichniseintrag im Cache aufzunehmen. Das
im Cache Aufnehmen eines Verzeichniseintrags aus dem Verzeichnis 601 entspricht
einer nicht trivialen Verzögerung
bei der Verarbeitung von Speicherzugriffsanforderungen. Diese Verzögerung wird
noch verstärkt
durch die Tatsache, dass das Verzeichnis 601 aufgrund seiner
Größe in einer
typischen Anwendung üblicherweise
in Form preiswerter und langsamerer Speicher implementiert ist.
-
Weiterhin
macht es die Aufnahme erforderlicher Verzeichniseinträge im Verzeichnis-Cache 604 notwendig,
dass Cache-Rückschreibevorgänge erfolgen,
wann immer der Verzeichnis-Cache 604 voll ist.
Ein Cache-Rückschreibevorgang,
der Platz für die
Aufnahme zusätzlicher
Verzeichniseinträge
in dem Verzeichnis-Cache 604 schafft, stellt eine weitere,
nicht triviale Verzögerung
bei der Verarbeitung einer Speicherzugriffsanforderung dar. Weiterhin
ist auch die Logik, die erforderlich ist, um einen Verzeichnis-Cache
zu steuern, nicht trivial, was beträchtliche Entwicklungs- und
Verifizierungsbemühungen erfordert,
um seine ordnungsgemäße Implementierung
und Betrieb sicherzustellen.
-
Der
Artikel "Reducing
Memory and Traffic Requirements for Scalable Directory-based fache Coherence
Schemes" ("Verminderung der
Speicher und Verkehrserfordernisse für erweiterbare Cache-Kohärenzschemata
auf Verzeichnisbasis) von A. Gupta et al. (Proc. of the 1990 international
conference on parallel processings 13-17 August, pages I-312 – I-321)
be schreibt verschiedene Cache-Kohärenzschemata auf Verzeichnisbasis
für die
Verwendung in einer gemeinsam verwendeten Speicherarchitektur mit
mehreren Prozessoren. Eines der beschriebenen Schemata umfasst die
Verwendung eines "spärlichen" Verzeichnisses.
Das spärliche
Verzeichnis ist ein Verzeichnis-Cache, der weniger Einträge enthält, als
es entsprechende Speicherblöcke gibt.
Dementsprechend kann die Größe des Verzeichnisses
reduziert werden. Verzeichnis-basierte Kohärenz-Protokolle stellen die
Konsistenz zwischen Clustern von Prozessoren sicher. Für Blöcke, die
innerhalb eines Clusters im Cache aufgenommen sind, werden keine
Verzeichniseinträge
erzeugt, stattdessen wird ein (Verzeichnisfreies) Cache-Kohärenz-"Schnüffel"-Schema auf Bus-Basis
bereitgestellt.
-
Der
Artikel "Introducing
Memory into the Switch Elements of Multiprocessor Interconnection Networks" (Einführen von
Speicher in die Zwischenspeicherelemente von Verbindungsnetzwerken
mit mehren Prozessoren) von H. E. Mizrahi et al. (Computer Architecture
News, vol. 17, No. 3, June, pages 158-166) lehrt ein Mehrprozessor-Verbindungsnetzwerk
mit gemeinsam verwendeten Speicher, welches als ein binärer Baum
ausgestaltet ist. Blätter
des Netzwerks weisen Prozessoren auf und Zwischenknoten des Baumes
weisen Schalter bzw. Zwischenspeicher auf. Die Zwischenspeicher
können
ein Verzeichnis mit Einträgen
enthalten, welche Routing-Information bereitstellen. Die Routing-Information
zeigt an, welcher Teilbaum des Knotens ein bestimmtes Datenobjekt
enthält.
Eine Anforderung, die an einem Knoten empfangen wurde, wird dann
entlang des angezeigten Teilbaums geleitet. Wenn kein Routing-Eintrag
in dem Verzeichnis für
die Anforderung vorliegt, wird die Anforderung entlang beider Teilbäume geleitet.
-
Der
Artikel "Performance
of Pruning-Cache Directories for Large Scale Multiprocessors (Leistungsfähigkeit
von Cache-Verzeichnissen mit Abschneiden für Mehrfachprozessoren in großem Maßstab) von
S. L. Scott et al. (IEEE transaction on parallel and distributed
systems, vol. 4, No. 5, 1 May 1993, pages 520.534) lehrt ein Verfahren
zum Vermindern von Ungültigmachen
des Verkehrs in einem Mehrprozessorsystem mit einer hierarchischen
Topologie. Verzeichnisse können
als Abschneide-Caches bzw. abschneidbare Caches ausgestaltet werden und
hierarchisch aufgeteilt werden. Die Verzeichnis-Einträge zeigen
an, welche Bereiche der Hierarchie oder welche Teilbäume Daten
enthalten können, welche
einem Ungültigmachen
entsprechen. Empfangene Anweisungen zum Ungültigmachen werden dann an diejenige
Teilbäume
weitergeleitet, welche den Datengegenstand enthalten können. Wenn
das Verzeichnis keinen entsprechenden Eintrag enthält, so wird
das Ungültigmachen
an alle Teilbäume
weitergeleitet.
-
Der
Artikel "Memory
Coherence in Shared Virtual Memory Systems" (Speicher-Kohärenz in gemeinsam verwendeten
virtuellen Speichersystemen) von Kai Li et al. (ACM transactions
on computer systems, vol. 7, no. 4., 1 November 1989, pages 321-359)
lehrt ein gemeinsam verwendetes, virtuelles Speichersystem, in welchem
jeder Prozessor diejenigen Speicherseiten verwaltet, die ihm gehören. Bei
einem Lese- oder Schreibfehler leitet der auslösende Prozessor eine Rundsendenachricht
an die verbleibenden Prozessoren in dem System, um den Besitzer
zu lokalisieren.
-
Der
Artikel "An Economical
Solution to the Cache Coherence Problem" (ökonomische
Lösung für das Cache-Kohärenz-Problem)
von Archibald J. et al. (Proceedings of annually symposium on computer
architecture, Los Angeles, IEEE Comp. Soc. Press, U.S., pages 355-361)
ist generell auf ein Cache-Kohärenz-Schema
in einem Mehrprozessorsystem gerichtet. Insbesondere lehrt dieses
Dokument eine Speichersteuerung, welche dafür ausgelegt ist, ein Verzeichnis
zu verwenden, um den Zustand aller Speicherblöcke für ein entsprechendes Speichermodul
aufzubewahren, jedoch ohne anzuzeigen, welcher Cache den Block aktuell
hat. Demnach wird für die
Kohärenz
ein Rundsenden an alle Caches benötigt. Es wird weiterhin vorgeschlagen,
zusätzlich
zu dem Verzeichnis einen kleinen (spärlichen bzw. reduzierten) Verzeichnispuffer
zu verwenden, der alle Caches, welche eine Kopie haben, vollständig identifiziert.
Nur wenn ein Block in diesem reduzierten Verzeichnispuffer nicht
gefunden wird, findet das Rundsenden statt.
-
Keines
der oben beschriebenen Dokumente offenbart das Aufnehmen von Verzeichniszuständen in
einem Cache, die sich auf einen Speicherblock beziehen, in einem
Teilverzeichnis-Cache, wenn eine erste Speicherzugriffsanforderung
bezüglich
der Verzeichniszustände
einen Erneuerungspunkt erzeugt.
-
Ein
Erneuerungspunkt ist ein Punkt, an welchem ein Zugriff abgeschlossen
ist und alle Zustände eines
Speicherblocks an dem Knoten des Netzwerks auf Basis des zuletzt
abgeschlossenen ersten Zugriffs vollständig festlegbar sind, ohne
dass weitere nachfolgende Zugriffe berücksichtigt werden müssen.
-
In
Anbetracht des Vorstehenden sind Verfahren und eine Vorrichtung
wünschenswert,
welche ermöglichen,
dass Verzeichniseinträge,
welche Speicherblöcken
des verteilten Speichers eines Netzwerks entsprechen, beim Bedienen
von Speicherzugriffsanforderungen in wirksamer Weise zugänglich sind.
-
In
den anhängenden
Ansprüchen
sind entsprechende verschiedene Gesichtspunkte und Merkmale der
Erfindung definiert.
-
Die
Erfindung wird nun beispielhaft unter Bezug auf die beigefügten Figuren
beschrieben, in welchen gleiche Teile durchgehend mit gleichen Bezugszeichen
bezeichnet sind und in welchen:
-
1,
nur für
Zwecke der Erläuterung,
ein Computernetzwerk veranschaulicht, welches eine Mehrzahl von
Knoten und eine Netzwerkinfrastruktur hat.
-
2 ein
Schema eines Computernetzwerkknotens zum Implementieren einer Version
des Bus-basierten Protokolls nach dem Stand der Technik ist.
-
3 nur
für Zwecke
der Erläuterung
einen Computernetzwerkknoten zum Implementieren des Verzeichnisprotokolls
nach dem Stand der Technik illustriert,
-
4 nur
zum Zwecke der Erläuterung
und in Reaktion auf verschiedene Speicherzugriffsanforderungen,
die Zustände
eines Speicherblocks in dem Knoten des Netzwerks nach 1 illustriert.
-
5 ein
Zustandsdiagramm ist, welches die verschiedenen Kommunikationspfade
zwischen einem anfordernden Knoten, einem Heimatknoten und einem
abhängigen
Knoten beim Bedienen von Speicherzugriffsanforderungen illustriert.
-
6 ein
Diagramm ist, welches ein Verzeichnis und einen Verzeichnis-Cache zum Implementieren
des Verzeichnis-Cache-Protokolls zeigt,
-
7 für Zwecke
der Erläuterung
einen Computernetzwerkknoten zum Implementieren des verzeichnisfreien
Protokolls illustriert,
-
8a und 8b entsprechend
verschiedenen Aspekten der vorliegenden Erfindung die Organisation
der Struktur mit Anhängigkeitsflag
in dem verzeichnisfreien Protokoll zeigen.
-
9 ein
Zustandsdiagramm ist, welches die verschiedenen Kommunikationspfade
zwischen einem anfordernden Knoten, einem Heimatknoten und einem
abhängigen
Knoten beim Bedienen von Speicherzugriffsanforderungen in dem verzeichnisfreien
Protokoll illustriert.
-
10 entsprechend
einem Aspekt der vorliegenden Erfindung einen Computernetzwerkknoten zum
Implementieren des Hybrid-Protokolls illustriert,
-
11 ein
Flussdiagramm ist, welches in einer Ausführungsform der vorliegenden
Erfindung die an dem Heimatknoten erfolgenden Schritte beim Bedienen
einer empfangenen Speicherzugriffsanforderung in einer Ausführungsform
der vorliegenden Erfindung illustriert,
-
12 ein
Flussdiagramm ist, welches in einer Ausführungsform der vorliegenden
Erfindung die Schritte veranschaulicht, die an dem Heimatknoten bei
der Aufnahme eines Verzeichniseintrags in dem teilweisen Verzeichnis-Cache
verwendet werden, wenn ein Erneuerungspunkt erfasst wird.
-
Es
wird nun eine Erfindung beschrieben, die sich auf ein Hybrid-Protokoll
bezieht, um es Knoten eines Computernetzwerks zu ermöglichen,
auf den verteilten, gemeinsam verwendeten Speicher eines Netzwerks
in effizienter Weise zuzugreifen. In der folgenden Beschreibung
sind zahlreiche spezielle Details dargelegt, um ein gründliches
Verständnis
der vorliegenden Erfindung zu gewährleisten. Es liegt jedoch
für Fachleute
auf der Hand, dass die vorliegende Erfindung ohne einige oder gar
alle dieser speziellen Details ausgeführt werden kann. In anderen Fällen sind
wohlbekannte Strukturen und Verfahrensschritte nicht im Einzelnen
beschrieben worden, um die vorliegende Erfindung nicht unnötig zu verschleiern.
-
Gemäß einer
Ausführungsform
der Erfindung wird ein Hybrid-Protokoll bereitgestellt, um es dem
Heimatknoten eines angeforderten Speicherblocks zu ermöglichen,
Vorteil aus einem Treffer im Verzeichnis-Cache zu ziehen. Unter
Verwendung der in dem Verzeichnis-Eintrag eines Caches enthaltenen
Information kann eine Speicherzugriffsanforderung schnell in der
zu dem zuvor erwähnten
Verzeichnisprotokoll gehörenden
Weise bedient werden.
-
Im
Falle eines Fehlzugriffs im Verzeichnis-Cache, das heißt es gibt
keinen Verzeichniseintrag, welcher in dem Verzeichnis-Cache dem
angeforderten Speicherblock entspricht, wird in vorteilhafter Weise
ein verzeichnisloses bzw. verzeichnisfreies Protokoll verwendet.
Wie schon der Name sagt, ermöglicht
das verzeichnisfreie Protokoll es dem Heimatknoten, eine Speicherzugriffsanforderung
von irgendeinem Knoten in dem Netzwerk zu bedienen, ohne Information
zu verwenden, die typischerweise in einem zu dem Verzeichnisprotokoll
gehörenden Verzeichniseintrag
bereitgestellt wird.
-
Das
verzeichnisfreie Protokoll wird nunmehr im Einzelnen in Verbindung
mit den 7 bis 10 erläutert. 7 zeigt
ein Schema eines Computernetzwerkknotens, wie zum Beispiel des Knotens 100 nach 1,
welches geeignet ist, das verzeichnisfreie Protokoll zu implementieren.
In 7 ist der Knoten 100 so dargestellt,
dass er einen Prozessor 700 besitzt. Der Prozessor 700 ist
mit einem Speicher-Cache 702 verbunden, welcher verwendet
wird, um angeforderte Speicherblöcke
im Cache aufzunehmen. Die durch den Speicher-Cache 700 aufgenommenen Speicherblöcke entsprechen
Speicherblöcken,
welche durch den Knoten 100 angefordert wurden. Der Heimatknoten
eines im fache aufgenommenen Speicherblocks kann derselbe Knoten wie
derjenige Knoten sein, auf welchem das Verzeichnis aufbewahrt WIRDoder
es kann ein anderer Knoten in dem Netzwerk sein.
-
Sowohl
der Speicher-Cache 702 als auch das Speichermodul 704 sind
mit einer Netzwerkschnittstelle 706 verbunden. Die Netzwerkschnittstelle 706 entspricht
dem Schaltkreis, der es dem Knoten 100 ermöglicht,
mit der Netzwerkinfrastruktur zu kommunizieren, wie zum Beispiel
der Netzwerkinfrastruktur 12 nach 1. Das Verzeichnismodul 704 hat
typischerweise einen Adressbereich, der sich von den Adressbereichen,
welche zu anderen Speichermodulen in dem Netzwerk gehören, unterscheidet. Die
Einheit bzw. Gesamtheit aller Speichermodule 704 in einem
Netzwerk bildet den verteilten, gemeinsam verwendeten Speicher (DSM).
Das Speichermodul 704 enthält weiterhin alle Speicherblöcke eines Knotens.
Wenn das Netzwerk im Ruhezustand ist, hat jeder Speicherblock einen
Heimatknoten. Wie bereits zuvor erwähnt, kann der Knoten 100 einfach
nur ein einzelner Prozessor sein, der einen Cache hat oder er kann
so komplex sein, dass er ein komplettes Multiprozessor-System auf Bus-Basis
ist.
-
Um
das verzeichnisfreie Protokoll zu implementieren, wird eine Struktur 710 mit
Anhängigkeitsflags
bereitgestellt. Die Struktur 710 von Anhängigkeitsflags
ist mit der Netzwerkschnittstelle 706 verbunden. Die Struktur 710 mit
Anhängigkeitsflags
repräsentiert
die Speicherstruktur zum Speichern des Flags, das anzeigt, ob auf
einem bestimmten Speicherblock, beispielsweise den Speicherblock 708,
durch aktuell gerade durch einen Netzwerkknoten zugegriffen wird
und ob dieser durch einen anderen Knoten nicht gelesen oder beschrieben
werden soll. Wenn ein Anhängigkeitsflag
gesetzt ist, wird der Zugriff auf den zugehörigen Speicherblock für andere Netzwerkknoten
verhindert. Wenn ein Anhängigkeitsflag
zurückgesetzt
wird, ist der zugehörige Speicherblock
für die
Bedienung der nächsten
Transaktion verfügbar,
welche ihn anfordert.
-
Die
Struktur 710 mit Anhängigkeitsflags
kann implementiert werden, durch Bereitstellen eines Flag (was ein
einziges Bit sein kann, auch wenn mehrere Bits ebenso gut verwendet
werden können)
für jeden Speicherblock
des Speichermoduls 704. Eine gewisse vordefinierte Beziehung
zwischen den Adressen der Speicherblöcke in dem Speichermodul 704 und den
Adressen von Flags in der Struktur der Anhängigkeitsflags kann es dem
Knoten 100 erlauben, den eindeutigen Speicherblock, der
zu jedem Flag gehört,
festzustellen. Beispielsweise kann, wenn die Adresse des Speichermoduls 704 um 64 erhöht wird, die
Adresse der Struktur der Anhängigkeitsflags
beispielsweise um 1 zunehmen. 8a zeigt
diese Implementierung, wobei Anhängigkeitsflags 804–810 auf
die Speicherblöcke
des Speichermoduls 704 abgebildet werden, wobei irgendeine übliche Zuordnungstechnik
verwendet wird, beispielsweise die oben beschriebene Zuordnungstechnik.
-
Es
ist nicht erforderlich, dass jeder Speicherblock in der Struktur 710 der
Anhängigkeitsflags
ein zugeordnetes Anhängigkeitsflag
hat. Wie in 8b dargestellt, wird jeder Anhängigkeitsstruktur-Eintrag 830 in
der Struktur 710 der Anhängigkeitsflags implementiert
durch ein Feld 812 von Anhängigkeitsflags und ein Adressfeld 814,
wenn ein Speicherblock "anhängig" ist, so wird seine
Adresse in das Adressfeld 814 einer Anhängigkeitsstruktur 830 einge geben
und das Anhängigkeitsflag
in dem Feld 812 für
Anhängigkeitsflags
wird gesetzt. Die Anzahl der Einträge 430 der Anhängigkeitsstruktur
in der Struktur 710 aus Anhängigkeitsflags kann kleiner
sein als die Anzahl von Speicherblöcken in dem Speichermodul 704,
um die Speichergrundlast ("overhead") zu reduzieren.
Die Implementierung gemäß 8B ist
vorteilhaft für Netzwerkknoten,
die ein relativ großes
Speichermodul 704 haben, da typischerweise nur eine kleine
Anzahl von Speicherblöcken
zu einem gegebenen Zeitpunkt im Cache aufgenommen ist und da die
Anzahl von Einträgen 430 der
Anhängigkeitsstruktur
relativ klein gehalten werden kann. Die Anzahl von Einträgen 430 der
Anhängigkeitsstruktur
kann von System zu System in starkem Maße variieren, je nach der Anzahl
der Speicherblöcke,
von denen man erwartet, dass sie zu irgendeinem gegebenen Zeitpunkt
im Cache aufgenommen sind (wobei diese Anzahl für ein bestimmtes Netzwerk statistisch
bestimmt werden kann). Die Betriebsweise des vorliegenden verzeichnisfreien
Protokolls kann am besten unter Bezug auf die Beispiele nach 4 und
das Zustandsdiagramm nach 9 beschrieben
werden. In 4 sind in den Reihen A-H die
Zustände
für den Speicherblock 708 des
Knotens 100 nach 7 in den
vier Knoten des Netzwerks dargestellt. Man sollte dabei im Hinterkopf
behalten, dass, auch wenn hier im einzelnen nur einzelner Speicherblock 708 beschrieben
wird, um die Darstellung zu vereinfachen, die Aufnahme im Cache
typischerweise mit einer Mehrzahl von Speicherblöcken erfolgt. Man sollte auch
im Hinterkopf behalten, dass die Anzahl von Knoten in einem Netzwerk
entsprechend den Erfordernissen variiert werden kann. Weiterhin
ist die Matrix gemäß 4 hier
nur für
Zwecke der Erläuterung dargestellt.
In dem verzeichnisfreien Protokoll ist es nicht notwendig, eine
zentralisierte Matrix oder ein Verzeichnis in dem Computerspeicher
zu erzeugen und aufrecht zu erhalten.
-
In
Reihe A ist der Knoten 100 mit einer exklusiven M-Kopie
des Speicherblocks 708 (M-Zustand in Reihe A, Spalte 100)
dargestellt. Definitionsgemäß müssen alle
anderen Netzwerkknoten ungültige
Kopien des Speicherblocks 708 haben (dargestellt durch
den Zustand I in Reihe A, Spalten 102–106). Im Übrigen ist
die M-Kopie des Speicherblocks 708 aktuell durch den Speicher-Cache
in seinem Heimatknoten 100 aufgenommen.
-
Transaktion
# 1, Reihe A zur Reihe B in 4): Angenommen
der Knoten 104 möchte
nun eine exklusive M-Kopie des Speicherblocks 708 haben,
die, wie in Reihe A angezeigt, aktuell in ihrem Heimatknoten 100 liegt.
Gemäß 4 stellt
der Knoten 104 den anfordernden Knoten 902 dar,
während der
Knoten 100 den Heimatknoten für den Speicherblock 708 darstellt,
der in 4 als Heimatknoten 908 gezeigt ist. Der
abhängige
Knoten 912 repräsentiert
den Knoten, bei welchem die Kopie des Speicherblocks 708 gerade
liegt. In Reihe A ist der abhängige
Knoten 912 zufällig
derselbe Knoten, wie der Heimatknoten, das heißt der Knoten 100.
-
Die
RTO-Anforderung von dem Knoten 104 (in dieser ersten Transaktion
der anfordernde Knoten 902), wird an dem Heimatknoten 100 (Knoten 108) über den
Pfad 904 weitergeleitet. Das Weiterleiten der RTO-Transaktion
von dem anfordernden Knoten an den Heimatknoten kann durch die Netzwerkinfrastruktur 12 unter
Verwendung der Adresse gehandhabt werden, die mit der RTO-Anforderung
bereitgestellt wird. Die Netzwerkinfrastruktur 12 weiß, wo der Heimatknoten
für einen
bestimmten Speicherblock sich befindet, in dem sie beispielsweise
seine Adresse auf die Adressbereiche der verschiedenen Knoten abbildet.
Wenn der Heimatknoten 100 (Knoten 108) die RTO-Nachricht
empfängt,
setzt er das zu dem angeforderten Speicherblock 708 gehörige Anhängigkeitsflag.
Weiterhin weiß er,
dass er eine exklusive M-Kopie des Speicherblocks 708 besitzt
und kann daher ableiten, dass alle anderen Knoten ungültige Kopien
des Speicherblocks 708 haben müssen. Da dies außerdem der
Knoten ist, bei welchem die Kopie liegt (abhängiger Knoten 912),
kann man sich den Knoten 100 nach 9 vorstellen
als einen, der sowohl den Heimatknoten 908 als auch den
abhängigen
Knoten 912 umfasst.
-
Der
Knoten 100 (Heimatknoten 908/abhängiger Knoten 912)
sendet dann eine Kopie des angeforderten Speicherblocks 708 über den
Pfad 914 an den anfordernden Knoten 104 (Knoten 902).
Nach Empfang einer Kopie des Speicherblocks 708 aktualisiert
der anfordernde Knoten 104 (Knoten 902) dann seine
Kopie zu einer exklusiven M-Kopie und sendet über den Pfad 906 eine
Bestätigungsnachricht
an den Heimatknoten 100 (Knoten 908). Der Empfang der
Bestätigungsnachricht
durch den Heimatknoten 100 (Knoten 908) ermöglicht es,
dass das Anhängigkeitsflag,
welches zu dem Speicherblock 708 gehört, zurückgesetzt wird, und erlaubt
dadurch, dass nachfolgende Transaktionen, welche den Speicherblock 708 betreffen,
bedient werden können.
Wie bei der Transaktion #1 dargestellt, beseitigt die Verwendung von
Anhängigkeitsflags
und expliziten Nachrichten zwischen dem anfordernden Knoten, dem
Heimatknoten und dem abhängigen
Knoten (über
die Pfade 904, 906, 910 und 914)
das Erfordernis eines Netzwerk-weiten Rundsendens, um diese RTO-Transaktion
# 1 zu bedienen.
-
Darüber hinaus
beseitigt die Verwendung des Anhängigkeitsflags
das Erfordernis eines natürlichen
Ordnungsmechanismus, da Transaktionen durch den empfangenden Heimatknoten
in der Reihenfolge in einer Schlange angeordnet werden können, in
welcher sie empfangen werden und in dieser Reihenfolge bedient werden,
sobald das Anhängigkeitsflag
zurückgesetzt
wird. Wie Fachleute auf diesem Gebiet erkennen, ist die Anzahl von
Nachrichten, die in dem Netzwerk gesendet werden, in vorteilhafter
Weise für
die Transaktion # 1 in dem verzeichnisfreien Protokoll dieselbe
wie bei der Implementierung, welche das Verzeichnis-Protokoll verwendet, das
heißt
es gibt keinen Nachteil hinsichtlich der Leistungsfähigkeit,
der mit der Verwendung des verzeichnisfreien Protokolls für die Transaktion
# 1 verknüpft wäre. In vorteilhafter
Weise ist jedoch das Verzeichnis ebenso wie seine damit zusammenhängen den Komplexitäten und
die Grundlast bzw. Überlast
hinsichtlich Speicherung/Transaktion bei dem erfindungsgemäßen verzeichnisfreien
Protokoll nicht erforderlich.
-
Transaktion # 2 (Reihe
B zu Reihe D):
-
In
der Transaktion # 2 wirkt der Knoten 102 als der anfordernde
Knoten und fordert eine exklusive Kopie des Speicherblocks 708 an,
indem er eine RTO-Transaktion ausgibt. Die RTO-Transaktion wird durch die Netzwerkinfrastruktur 12 an
den Heimatknoten 100 des Speicherblocks 708 geleitet,
das heißt über den
Pfad 904 an den Knoten 908 in der Transaktion
# 2, und bewirkt, dass der Heimatknoten 100 das mit dem
Speicherblock 708 verknüpfte
Anhängigkeitsflag
setzt.
-
Da
der Knoten 100 lediglich weiß, dass er eine ungültige Kopie
des Speicherblocks 708 hat (Reihe B, Spalte 100),
und keinen direkten Verzeichniseintrag hat, um das verzeichnisfreie
Protokoll zu befragen, weiß der
Knoten 100 nicht, wo in dem Netzwerk eine gültige Kopie
des Speicherblocks 708 gefunden werden kann. Der Knoten 100 muss
jedoch bei dem Knoten, der die Kopie des Speicherblocks 8 hat,
das Weiterleiten dieser Kopie an den anfordernden Knoten 102 anfordern.
Dementsprechend sendet der Heimatknoten 100 (Knoten 908)
in einer Ausführungsform
eine Anforderung über
den Pfad 910 in paralleler Weise an alle anderen Knoten
in dem Netzwerk mit Ausnahme des anfordernden Knotens (Knoten 102 in
der Transaktion # 1) und an sich selbst (Knoten 100). In
diesem Fall betrifft daher die Anzahl von Nachrichten, die durch
die Netzwerkschnittstelle 12 von dem Heimatknoten gesendet
wird, Total – 2, wobei
Total die Gesamtzahl von Knoten in einem Computernetzwerk 10 repräsentiert.
-
Wenn
ein Knoten, der die Nachricht von dem Heimatknoten 100 empfängt, auf
die Anforderung nicht in der Weise erwidern kann, dass er eine Kopie des
Speicherblocks 708 an den anfordernden Knoten sendet, das
heißt
wenn er keine gültige
Kopie des Speicherblocks 708 hat, ignoriert der empfangende Knoten
einfach die Anforderung von dem Heimatknoten. Bei dieser Transaktion
antwortet der Knoten 104, der aktuell die einzige exklusive
Kopie des Speicherblocks 708 hat (wie es in Reihe B dargestellt
ist), über den
Pfad 914 an den anfordernden Knoten 102 (Knoten 902 in
der Transaktion # 2). Der Knoten 104 ist der abhängige Knoten
in dieser Transaktion, da er den Knoten repräsentiert, bei welchem eine
gültige Kopie
des angeforderten Speicherblocks aktuell liegt. Der Knoten 104 (abhängiger Knoten 912)
stuft seine Kopie von einer exklusiven M-Kopie herab zu einer ungültigen I-Kopie,
da definitionsgemäß dann,
wenn ein Knoten in dem Computernetzwerk, das heißt der anfordernde Knoten 102,
eine exklusive M-Kopie hat, alle anderen Knoten ungültige Knoten
I-Kopien haben müssen.
-
Wenn
der anfordernde Knoten 902 (Knoten 102 in der
Transaktion # 2) eine Kopie des Speicherblocks 708 empfängt, so
vermerkt er intern, dass er nunmehr eine exklusive M-Kopie hat (Reihe
D, Spalte 102, und gibt über Pfad 906 eine
Bestätigung
raus. Wenn der Heimatknoten 100 (Knoten 908) die
Bestätigungsnachricht
von dem anfordernden Knoten über den
Pfad 906 empfängt,
aktualisiert er seine Kopie, falls erforderlich (in diesem Fall
erweist es sich als unnötig,
und setzt das Anhängigkeitsflag,
welches zu dem Speicherblock 708 gehört, zurück, so dass andere Transaktionen,
welche den Speicherblock 708 betreffen, bedient werden
können.
-
Wie
man anhand der Diskussion bezüglich der
Transaktion # 2 erkennen kann, beträgt, wenn der Heimatknoten nicht
die exklusive M-Kopie eines Speicherblocks hat und eine RTO-Anforderung
empfängt,
die sich auf diesen Speicherblock bezieht, die Anzahl der Nachrichten,
die er über
die Netzwerkinfrastruktur 12 senden muss, um bei einem
anderen Knoten anzufordern, dass er das Weiterleiten einer Kopie
des angeforderten Speicherblocks an den anfordernden Knoten ermöglicht,
zumindest Total – 2. Von
den gesandten Nachrichten ist die Anzahl der Nachrichten, die "verschwindet" bzw. überflüssig ist, das
heißt
durch die empfangenden abhängigen
Knoten ignoriert wird, Total – 3
(da einer der empfangenen Knoten derjenige Knoten ist, der durch
Senden einer gültigen
Kopie des Speicherblocks 708 an den anfordernden Knoten
reagieren kann). Demnach ist in Transaktion # 2 die Anzahl von Nachrichten,
die durch den Heimatknoten über
die Netzwerkinfrastruktur 12 gesendet werden müssen, um
die RTO-Anforderung zu erfüllen,
möglicherweise
größer als
im Fall des Verzeichnis-Protokolls. Für relativ kleine Netzwerke,
die eine relativ kleine Anzahl von Knoten haben, kann die Anzahl
der verschwendeten Nachrichten jedoch aufgrund der beträchtlich
einfacheren Implementierung des verzeichnisfreien Protokolls gerechtfertigt
sein.
-
Transaktion # 3 (Reihe
D zu Reihe A):
-
In
der Transaktion # 3 fordert der Knoten 102, der eine exklusive
M-Kopie hat, das Zurückschreiben
des Inhalts des Speicherblocks 708 in den Heimatknoten 100.
Ein Knoten möchte
möglicherweise
einen Speicherblock zurückschreiben,
den er früher
aus einer Vielzahl von Gründen
im Cache aufgenommen hatte, das heißt er möchte einen anderen Speicherblock
im Cache aufnehmen und hat keinen Platz in seinem Speicher-Cache.
Gemäß 2 sendet
der anfordernde Knoten 102 (Knoten 902) eine Rückschreibe-(WB-)Transaktion
an die Netzwerkinfrastruktur. Die Netzwerkinfrastruktur leitet dann
diese Anforderung an den Heimatknoten des Speicherblocks 708,
das heißt
den Knoten 100 über
den Pfad 904. Nach Empfang dieser WB-Anforderung setzt der
Heimatknoten 100 (Knoten 908) das zu dem Speicherblock 708 gehörige Anhängigkeitsflag.
-
Auch
wenn der Heimatknoten 100 nur eine ungültige I-Kopie des Speicherblocks 708 hat
(wie in Reihe D, Spalte 100 gemäß 4 dargestellt),
kann er ableiten, dass, da der Knoten 102 ein Zurückschreiben
fordert, der Knoten 102 eine exklusive M-Kopie des Speicherblocks 708 haben
muss. Dementsprechend sendet der Heimatknoten 100 (Knoten 908) über den
Pfad 910 eine Nachricht an den abhängigen Knoten 912 und
fordert ihn zum Zurückschreiben
auf. Der abhängige
Knoten 912 repräsentiert
denjenigen Knoten, der aktuell gerade die Kopie des Speicherblocks 708 hat,
der zufälligerweise
bei dieser Rückschreibe-Transaktion derselbe
Knoten wie der anfordernde Knoten 102 ist. Dementsprechend
können
der anfordernde Knoten 902 und der abhängige Knoten 912 in
dieser Transaktion als eine einzige Einheit betrachtet werden. Der
Knoten 102 (abhängiger
Knoten 912/anfordernder Knoten 902) sendet dann
eine Kopie des Speicherblocks 708 über den Pfad 906 an
den Heimatknoten 100 (Knoten 908), wo der Inhalt
des Speicherblocks 708 in den Heimatknoten 100 (Knoten 908)
geschrieben wird. Sobald der Inhalt des Speicherblocks 708 zurückgeschrieben
worden ist, kann dann das Anhängigkeitsflag,
welches zu dem Speicherblock 708 gehört, zurückgesetzt werden.
-
In
der Transaktion # 3 liegt eine mögliche Konkurrenzsituation
vor, wenn die Rückschreibeanforderung
vom Knoten 102 hinsichtlich ihrer Ankunft am Heimatknoten 100 verzögert ist,
und wenn in der Zwischenzeit ein anderer Knoten in dem Netzwerk eine
Transaktion ausgibt, welche den Speicherblock 708 betrifft,
dier bedient werden muss, bevor die Rückschreibeanforderung von dem
anfordernden Heimatknoten 102 beim Heimatknoten 100 ankommt.
In dieser Situation schreitet der Heimatknoten 100 nach
Empfang der später
ausgegebenen jedoch früher
angekommenen Transaktionsanforderung, wenn er sieht, dass das Anhängigkeitsflag,
welches zu dem Speicherblock 708 gehört, nicht gesetzt worden ist,
möglicherweise
zum Bedienen dieser später
ausgegebenen Anforderung fort.
-
Das
Bedienen dieser später
ausgegebenen Anforderung kann bewirken, dass die Kopie des Speicherblocks 708 von
dem Knoten 102 weg bewegt wird. Wenn die Rückschreibeanforderung
von dem Knoten 102 schließlich am Heimatknoten 100 ankommt
und bedient wird, hat der Knoten 102 möglicherweise keine exklusive
M-Kopie des Speicherblocks 708 mehr. Wenn ein Heimatknoten,
zum Beispiel der Knoten 100, eine Rückschreibeanforderung empfängt, so
kann er einfach über
den Pfad 910 an den anfordernden/abhängigen Knoten antworten, um den
anfordernden/abhängigen
Knoten zu bitten, nur dann zurückzuschreiben,
wenn der anfordernde/abhängige
Knoten noch immer eine exklusive M-Kopie des Speicherblocks hat.
Ansonsten ignoriert der Heimatknoten einfach die empfangene Rückschreibeanforderung.
In vorteilhafter Weise werden, indem an den Knoten, welcher des
Zurückschreiben
anfordert, auf diese Weise geantwortet wird, mögliche Konkurrenzsituationen
in vorteilhafter Weise vermieden.
-
Transaktion # 4 (Reihe
D zu Reihe E):
-
Der
Knoten 104 möchte
eine gemeinsam verwendete Nur-Lese-Kopie des Speicherblocks 708 haben
und gibt eine RTS-(Read-to-Share)-Anforderung an die Netzwerkinfrastruktur
aus, um eine Nur-Lese-Kopie des Speicherblocks 708 anzufordern.
Die Netzwerkinfrastruktur 12 leitet die RTS-Anforderung über den
Pfad 904 von dem anfordernden Knoten 104 (Knoten 902)
an den Heimatknoten 100 (Knoten 908) was bewirkt,
das das Anhängigkeitsflag,
welches zu dem Speicherblock 708 gehört, gesetzt wird.
-
Der
Heimatknoten 100 weiß lediglich,
dass er eine ungültige
I-Kopie hat (Reihe D, Spalte 100). Ohne Wissen darüber, welcher
Knoten in dem Netzwerk eine gemeinsam verwendete S-Kopie oder eine exklusive
M-Kopie hat, muss der Heimatknoten 100 (Knoten 908)
eine Anforderung an alle übrigen
Knoten in dem Netzwerk rundsenden, um den Knoten, der eine M-Kopie
hat, aufzufordern, sich selbst zu einer S-Kopie herabzustufen und
eine Kopie des angeforderten Speicherblocks 708 an den
anfordernden Knoten 104 (Knoten 902) zu senden.
Die Anzahl von Anforderungen, welche über den Pfad 910 von
dem Heimatknoten 100 (Knoten 908) aus an die übrigen Knoten
in dem Computernetzwerk gesendet werden, ist wiederum Total -2 (es
ist nicht erforderlich, eine Anforderung an den Heimatknoten oder
an denjenigen Knoten zu senden, welcher eine Kopie des Speicherblocks 708 anfordert).
-
In
diesem Fall entspricht der Knoten 102 dem abhängigen Knoten,
welcher zuvor die exklusive M-Kopie hatte (Reihe D, Spalte 102).
Der abhängige Knoten 102 (Knoten 912)
sendet dann eine Kopie des Speicherblocks 708 an den anfordernden
Knoten 104 (Knoten 902), und stuft gleichzeitig
die Kopie, die er hat, von einer exklusive M-Kopie in eine gemeinsam
verwendete S-Kopie herab (von Reihe D, Spalte 102 zu Reihe
E, Spalte 102). Nach Empfang einer Kopie des Speicherblocks 708 sendet
dann der anfordernde Knoten 104 (Knoten 902) eine
Bestätigungsnachricht
an den Heimatknoten 100 (Knoten 908), welcher
das Anhängigkeitsflag
zurücksetzt.
-
Transaktion # 5 (Reihe
F zu Reihe G):
-
Wann
immer sich eine gemeinsam verwendete Nur-Lese-S-Kopie irgendwo in
dem Knoten befindet, kann der Heimatknoten ebenfalls eine gemeinsam
verwendete Nur-Lese-S-Kopie behalten. Die gemeinsam verwendete Nur-Lese-S-Kopie
kann beispielsweise von dem anfordernden Knoten 902 (nachdem
er eine Kopie des angeforderten Speicherblocks von dem abhängigen Knoten
empfangen hat) zusammen mit einer Bestätigungsnachricht auf dem Pfad 906 an
den Heimatknoten 908 gesendet werden. Da der Heimatknoten
eine gemeinsam verwendete Nur-Lese-S-Kopie hat, kann er in vorteilhafter Weise
einen nachfolgende RTS-Anforderung von einem anderen Knoten in dem
Computernetzwerk bedienen, ohne ei nen anderen Knoten bitten zu müssen, seine
Kopie an den anfordernden Knoten zu senden. Diese Transaktion ist
als Transaktion # 5 dargestellt, wenn die Zustände des Speicherblocks 708 sich
von denjenigen der Reihe F zu denjenigen der Reihe G in 4 verändern.
-
In
Transaktion # 5 haben die Knoten 100 und 102 aktuell
gemeinsam verwendete Nur-Lese-S-Kopien
des Speicherblocks 708 und die Knoten 104 und 106 haben
ungültige
I-Kopien desselben Speicherblocks. Der Knoten 104 möchte eine
gemeinsam verwendete Nur-Lese-S-Kopie
des Speicherblocks 708 haben und gibt eine RTS-Anforderung
aus, die am Heimatknoten 100 (Knoten 908) über den
Pfad 906 ankommt und bewirkt, dass das Anhängigkeitsflag, welches
zu dem Speicherblock 708 gehört, gesetzt wird. Da der Heimatknoten 100 (Knoten 908)
bereits eine gemeinsam verwendete S-Kopie hat, muss er nicht eine
Kopie des Speicherblocks 708 von irgendeinem anderem Knoten
in dem Netzwerk anfordern und kümmert
sich in der Tat nicht darum, welche anderen Kopien auf den Knoten
des Netzwerks existieren mögen.
Dementsprechend können
der Heimatknoten 908 und der abhängige Knoten 912 als dieselbe
Einheit, das heißt
als Knoten 100, angesehen werden und können über den Pfad 914 an
den anfordernden Knoten 104 (Knoten 902) mit einer
Kopie des Speicherblocks 708 antworten. Nach Empfang einer
Kopie des Speicherblocks 708 bestätigt der anfordernde Knoten 104 (Knoten 902)
durch Senden einer Nachricht über
den Pfad 906 an den Heimatknoten 100 (Heimatknoten 908/abhängiger Knoten 912),
was bewirkt, dass das Anhängigkeitsflag, welches
zu dem Speicherblock 708 gehört, zurückgesetzt wird.
-
Transaktion # 6 (Reihe
G zu Reihe H):
-
In
der Transaktion # 6 haben die Knoten 100, 102 und 104 gemeinsam
verwendete Nur-Lese-S-Kopien,
während
der Knoten 106 eine ungültige I-Kopie
des Speicherblocks 708 hat. Anschließend möchte der Knoten 106 (Knoten 902 in 4)
eine exklusive M-Kopie haben und gibt eine RTO-Transaktion an die
Netzwerkinfrastruktur 12 aus. Die Netzwerkinfrastruktur 12 leitet
die RTO-Anforderung über den
Pfad 904 an den Heimatknoten des Speicherblocks 708,
das heißt
an den Knoten 100, was bewirkt, dass das Anhängigkeitsflag,
welches zu dem Speicherblock 708 gehört, gesetzt wird. Da der Heimatknoten 100 (Knoten 908)
lediglich weiß,
dass er eine gemeinsam verwendete Nur-Lese-S-Kopie hat (Reihe G,
Spalte 100), und da es gemäß dem verzeichnisfreien Protokoll
kein zentrales Verzeichnis in dem Heimatknoten gibt, welches befragt
werden könnte,
muss der Heimatknoten 100 (Knoten 908) Nachrichten
an die anderen Knoten in dem Netzwerk senden, um sie aufzufordern,
ihre Kopie des Speicherblocks 708 zu ungültigen I-Kopien
herabzustufen, falls sie zuvor gemeinsam verwendete Nur-Lese-S-Kopien
hatten. Erneut ist auch hier die Anzahl von Nachrichten, die über dem
Pfad 910 an andere Knoten in dem Netzwerk gesendet werden müssen, Total – 2 (da
der Heimatknoten 100 keine Nachricht an sich selbst oder
an den anfordernden Knoten senden muss).
-
Weiterhin
kann der Knoten 100 sich selbst als einen abhängigen Knoten
behandeln, da in eine gültigen,
wenn auch gemeinsam verwendete Kopie des Speicherblocks 708 gerade
auf dem Knoten 100 liegt. Dementsprechend können der
Heimatknoten 908 und der abhängige Knoten 912 als
dieselbe Einheit betrachtet werden, das heißt als der Knoten 100. Der
Heimatknoten 100 (Heimatknoten 908/abhängiger Knoten 912)
sendet dann eine Kopie des Speicherblocks 708 über den
Pfad 914 an den anfordernden Knoten 106 (Knoten 902).
-
Der
Heimatknoten 100 (Heimatknoten 908/abhängiger Knoten 912)
sendet an den anfordernden Knoten 106 (Knoten 902)
auch Information bezüglich
der Anzahl von abhängigen
Knoten in dem Netzwerk, an welche er die Anforderung zum Herabstufen
gesendet hat. Diese Information wird durch den anfordernden Knoten 106 (Knoten 902)
gehalten. Jeder abhängige
Knoten, an welchen der Heimatknoten 908 (über Pfad 910)
die Nachricht sendet, sich selbst herabzustufen, berichtet ebenfalls
an den anfordernden Knoten 106 (Knoten 902) über den Pfad 914,
um zu bestätigen,
dass er entweder seine Kopie von einer gemeinsam verwendeten S-Kopie
in eine ungültige
I-Kopie herabgestuft hat oder dass er bereits eine ungültige I-Kopie
hat und nicht weiter herabzustufen braucht. Der anfordernde Knoten 106 (Knoten 902)
zählt dann
die Anzahl von Bestätigungen
um sicherzustellen, dass alle abhängigen Knoten in dem Netzwerk
eine Bestätigung
gesendet haben.
-
Wenn
der anfordernde Knoten 106 (Knoten 902) damit
zufrieden gestellt ist, dass alle Knoten, die ihre Kopien herabstufen
müssen,
dies auch getan haben, sendet der anfordernde Knoten 906 (Knoten 902)
dann über
den Pfad 906 eine Bestätigungsnachricht
an den Heimatknoten 100 (Knoten 908), um es dem
Heimatknoten 100 zu ermöglichen,
das zu dem Speicherblock 708 gehörige Anhängigkeitsflag zurückzusetzen.
Auch hier ist wieder anzumerken, dass die Verwendung dieser ausdrücklichen
Nachrichten und der Anhängigkeitsflags
in vorteilhafter Weise das Erfordernis beseitigen, einen Ordnungsschaltkreis, wie
zum Beispiel einen Vermittlungsschaltkreis, in dem Netzwerk zu haben,
um eine natürliche
Ordnung zu ermöglichen.
-
Wie
Fachleute auf diesem Gebiet aus dem Vorstehenden erkennen, hat das
verzeichnisfreie Protokoll einen Vorteil gegenüber dem Bus-basierten Rundsendeverfahren,
da im schlechtesten Fall die Anzahl der Nachrichten, die an die
abhängigen
Knoten gesendet werden müssen,
um zwei geringer ist als die Gesamtzahl der Knoten in dem Netzwerk.
Im besten Fall, beispielsweise bei der Transaktion # 1, ist die
Anzahl der Nachrichten, die gesendet werden, so gering, wie es bei
dem Verzeichnisprotokoll erforderlich ist. Insbesondere beseitigt
das erfindungsgemäße verzeichnisfreie
Protokoll in vorteilhafter Weise das Erfordernis, eine Anforderung
an jeden Knoten in dem Netzwerk rundzusenden, wenn der Heimatknoten
eine M-Kopie hat und auf eine RTO- oder eine RTS-Anforderung von
einem anderen Knoten reagiert. In ähnlicher Weise ist kein Rundsenden
erforderlich, wenn der Heimatknoten eine S-Kopie hat und auf eine
RTS-Transaktionsanforderung von dem anderen Knoten reagiert.
-
Ein
reines verzeichnisfreies Protokoll ist jedoch im Vergleich zu den
Verzeichnis- oder Verzeichnis-Cache-Protokollen inhärent langsamer,
da im Durchschnitt eine größere Anzahl
von Nachrichten erforderlich ist, um Speicherzugriffsanforderungen
zu bedienen. Das Verzeichnis- oder Verzeichnis-Cache-Protokoll kann
die Anzahl von Nachrichten reduzieren, die an andere Knoten des
Netzwerks beim Bedienen von Speicherzugriffsanforderungen gesendet
werden müssen
und verbessert damit die Geschwindigkeit. Wie zuvor erwähnt, hat
jedoch ein reines Verzeichnis- oder Verzeichnis-Cache-Protokoll den
Nachteil einer hohen Speichergrundlast (overhead), um einen Verzeichniseintrag
für jeden Speicherblock
der Netzwerkknoten zu implementieren.
-
Gemäß einem
Aspekt der vorliegenden Erfindung wird ein hybrides Protokoll für die Bedienung von
Speicherzugriffsanforderungen bereitgestellt. Das erfindungsgemäße hybride
Protokoll bzw. Hybridprotokoll erfordert in vorteilhafter Weise
nicht die Implementierung eines Verzeichniseintrags für jeden Speicherblock
(wie im Falle des Verzeichnisprotokolls oder des Verzeichnis-Cache-Protokolls).
Weiterhin kann das erfindungsgemäße Hybrid-Protokoll in
vorteilhafter Weise die Geschwindigkeit verbessern, mit welcher
Speicherzugriffsanforderungen bedient werden können, indem der Vorteil von
Verzeichniseinträgen
genutzt wird, falls sie in einem Teilverzeichnis-Cache existieren,
um Speicherzugriffsanforderungen zu beschleunigen.
-
In
dem Hybrid-Protokoll ist nur ein Teilverzeichnis-Cache erforderlich.
Ein teilweiser Verzeichnis-Cache bzw. Teilverzeichnis-Cache speichert
nur eine geringe Anzahl der im Cache aufgenommenen Verzeichniseinträge und erfordert
weniger Speicher für
seine Implementierung, da es nicht notwendig ist, ein Verzeichniseintrag
für jeden
Speicherblock eines Netzwerkknotens bereitzustellen.
-
10 ist
ein Diagramm eines Netzwerkknotens um gemäß einer Ausführungsform
der vorliegenden Erfindung das Hybrid-Protokoll zu implementieren.
In 10 sind der Prozessor 700, der Speicher-Cache 702,
das Speichermodul 704, der Speicherblock 708 und
die Netzwerkschnittstelle 706 im wesentlichen dieselben
wie die Elemente, welche in 7 die gleichen
Bezugszahlen haben. In 10 wird ein Teilverzeichnis-Cache 950 bereitgestellt,
um eine vorbestimmte Anzahl von Verzeichniseinträgen im Cache aufzunehmen, welche
den Speicherblöcken
des Speichermoduls 704 entsprechen. Jeder Verzeichniseintrag
in dem Teilverzeichnis-Cache kann in einer Ausführungsform ein ähnlich einem
Eintrag 603 in dem Verzeichnis-Cache nach 6 sein. Mit
anderen Worten, es kann ein Feld vorgesehen werden, um anzuzeigen,
ob der Verzeichniseintrag gültig
ist, ein weiteres Feld zum Spei chern der Adresse des entsprechenden
Speicherblocks und noch ein weiteres Feld zum Speichern der Verzeichniszustände der
entsprechenden Speicherblöcke
in den Knoten des Netzwerkes.
-
Die
vorbestimmte Anzahl von Verzeichniseinträgen kann je nach Bedarf variieren.
Für Knoten,
deren Speicherblöcke
möglicherweise
oft angefordert werden, kann die vorbestimmte Anzahl von Plätzen für Verzeichniseinträge in dem
Teilverzeichnis-Cache 950 erhöht werden, um das Bedienen
von Speicherzugriffsanforderungen zu beschleunigen. Der Teilverzeichnis-Cache 950 kann
so ausgewählt werden,
dass er eine angemessenen Größe hat,
so dass eine vernünftige
Anzahl üblicherweise
verwendeter Speicherblöcke
während
des größten Teiles der
Zeit im Cache aufgenommen ist. In einer Ausführungsform können weniger
Plätze
für Verzeichniseinträge in dem
Teilverzeichnis-Cache 950 vorgesehen sein als es Speicherblöcke in dem
Speichermodul gibt, der auf demselben Knoten liegt.
-
Gemäß dem erfindungsgemäßen Hybrid-Protokoll
wird in dem Fall eines Treffers dem Teilverzeichnis-Cache, das heißt wenn
der Verzeichniseintrag, welcher dem angeforderten Speicherblock
entspricht, in dem Teilverzeichnis-Cache 950 existiert,
in vorteilhafter Weise das Verzeichnisprotokoll verwendet. Wenn
jedoch ein Fehlzugriff auf den Teilverzeichnis-Cache vorliegt, wird in vorteilhafter Weise
das verzeichnisfreie Protokoll verwendet. Es sollte für Fachleute
auf dem Gebiet an dieser Stelle klar sein, dass, falls kein Verfahren
existiert, um zu entscheiden, wann Verzeichniszustände, die
sich auf einen bestimmten Speicherblock beziehen, in dem Cache in
einem Verzeichniseintrag in dem Teilverzeichnis-Cache 950 aufgenommen
werden sollten, ein Teilverzeichnis-Cache 950, der zu Beginn
womöglich
leer ist, immer leer bleibt. Wenn diese Situation nicht bereinigt
wird, wird das Hybrid-Protokoll
im wesentlichen ein verzeichnisfreies Protokoll, das es keinen Übergangsweg
gibt, um sich von dem verzeichnisfreien Protokoll zu dem Verzeichnisprotokoll zu
bewegen.
-
Gemäß einer
Ausführungsform
der vorliegenden Erfindung erfolgt der Übergang von dem verzeichnisfreien
Protokoll zu dem Verzeichnisprotokoll dann, wenn bezüglich der
Zustände
eines bestimmten Speicherblocks in dem Knoten des Netzwerks ein Erneuerungspunkt
vorliegt. Mathematisch gesprochen, bezieht sich ein Erneuerungspunkt
auf einen Punkt, an welchem vergangene Transaktionen, die sich auf
eine Einheit beziehen, das heißt
in diesem Fall einen angeforderten Speicherblock, ignoriert werden
können.
An diesem Erneuerungspunkt können
die Zustände
des Speicherblocks an verschiedenen Knoten des Netzwerks einfach
aus der zuletzt abgeschlossenen Transaktion unabhängig von
der abgelaufenen Vergangenheit bestimmt werden.
-
Gemäß einer
Ausführungsform
der vorliegenden Erfindung liegt ein Erneuerungspunkt beim Abschluss
einer Anforderung nach einer exklusiven M-Kopie eines Speicherblocks
(einer RTO-Anforderung) vor. Der Abschluss einer RTO-Transaktion
entspricht einem Erneuerungspunkt, da, falls beispielsweise eine
RTO-Anforderung durch den Knoten 102 ausgegeben wird, der
Knoten 102 nach dem erfolgreichen Abschluss der RTO-Transaktion
die einzige exklusive M-Kopie des Speicherblocks hätte, und
alle anderen Knoten in dem Netzwerk definitionsgemäß ungültige I-Kopien
dieses Speicherblocks haben müssen.
Wenn der Erneuerungspunkt erfasst wird, kann der Verzeichniseintrag,
der sich auf den angeforderten Speicherblock bezieht, in vorteilhafter
Weise abgeleitet und in einen Verzeichniseintrag in dem Teilverzeichnis-Cache 950 aufgenommen
werden, ohne dass andere Knoten des Netzwerks befragt werden müssen, um
die Zustände
des angeforderten Speicherblocks in den Knoten des Netzwerks zu
erfragen.
-
Die
Vorteile des Hybrid-Protokolls versteht man besser unter Bezug auf
die 11 und 12. 11 ist
ein Flussdiagramm, welches in einer Ausführungsform der vorliegenden
Erfindung die Schritte veranschaulicht, die an dem Heimatknoten
beim Bedienen einer empfangenen Speicherzusatzanforderung ablaufen.
Im Schritt 1112 wird eine Speicherzugriffsanforderung,
die sich auf einen Heimatspeicherblock bezieht, von der Netzwerkinfrastruktur
empfangen. In Schritt 1104 bestimmt das Verfahren, ob ein Verzeichniseintrag,
welcher dem angeforderten Speicherblock entspricht, in dem Teilverzeichnis-Cache
existiert, beispielsweise in dem Teilverzeichnis-Cache 950 nach 10.
Wenn ein Verzeichniseintrag entsprechend dem angeforderten Speicherblock
bereits in dem Teilverzeichnis-Cache des Heimatknotens existiert,
verwendet das Verfahren in vorteilhafter Weise das Verzeichnisprotokoll, um
die empfangene Speicherzugriffsanforderung zu bedienen (Schritt 1106).
Der Übergang
von einem verzeichnisfreien Protokoll zu einem Verzeichnisprotokoll
erfolgt dann, wenn es einen Treffer in dem Teilverzeichnis-Cache 950 gibt.
-
Wenn
andererseits ein Verzeichniseintrag, welcher dem angeforderten Speicherblock
entspricht, in dem Teilverzeichnis-Cache an dem Heimatknoten nicht
gefunden werden kann, verwendet das Verfahren in vorteilhafter Weise
das verzeichnisfreie Protokoll beim Bedienen der empfangenen Speicherzugriffsanforderung.
Auf diese Weise vermeidet das Hybrid-Protokoll in vorteilhafter Weise, dass
es die Netzwerkknoten abfragen muss, um die Verzeichniszustände eines
Speicherblocks zu bestimmen, wenn es einen Fehlzugriff im Teilverzeichnis-Cache
gibt. Der Übergang
von einem Verzeichnisprotokoll zu einem verzeichnisfreien Protokoll
erfolgt dann, wenn es einen Fehlzugriff bzw. eine Fehlabfrage in
dem Teilverzeichnis-Cache 950 gibt.
-
In
Schritt 1110 wird die zuletzt bediente Speicherzugriffsanforderung
untersucht, um zu bestimmen, ob sie eine Transaktion repräsentiert,
die einen Erneuerungspunkt in den Verzeichniszuständen des angeforderten
Speicherblocks erzeugen kann. Wie zuvor bereits erwähnt, wird
ein solcher Erneuerungspunkt erzeugt, wenn die zuletzt erzeugte
Speicher zugriffsanforderung eine RTO-(Read-to-Own – Lesen zum
Zwecke des Besitzens) Anforderung ist.
-
Wenn
die zuletzt bediente Speicherzugriffsanforderung zu einem Erneuerungspunkt
führt, geht
das Verfahren mit Schritt 1112 weiter, wobei die Verzeichniszustände, die
sich auf den zuletzt angeforderten Speicherblock beziehen, in einem
Verzeichniseintrag in dem Teilverzeichnis-Cache 950 aufgenommen
werden. Falls nicht, enden die Schritte des Bedienens einer Speicherzugriffsanforderung unter
Verwendung des Hybrid-Protokolls bei Schritt 1104.
-
Gemäß einer
Ausführungsform
der vorliegenden Erfindung können
die Verzeichniseinträge, die
in dem Teilverzeichnis-Cache 950 aufgenommen sind, in dem
Teilverzeichnis-Cache 950 solange wie möglich gehalten werden. Zu irgendeinem
Zeitpunkt kann jedoch der Teilverzeichnis-Cache voll werden. Wenn
ein zusätzlicher
Verzeichniseintrag in dem Teilverzeichnis-Cache 950 aufgenommen
werden muss, wird es notwendig, in dem Teilverzeichnis-Cache 950 Platz
zu schaffen, um dem neu im Cache aufzunehmenden Verzeichniseintrag
Platz zu geben.
-
Gemäß einer
Ausführungsform
der vorliegenden Erfindung sondert die Erfindung einfach Verzeichniseinträge, die
nicht anhängig
sind, aus dem Teilverzeichnis-Cache 950 aus, um für zusätzliche
im Cache aufzunehmende Verzeichniseinträge Platz zu schaffen. Ein Verzeichniseintrag
ist nicht anhängig, wenn
festgestellt wird, dass sein Anhängigkeitsflag nicht
gesetzt ist. Der Aussonderungsvorgang kann so einfach sein, dass
der Raum bzw. Abschnitt des Verzeichniseintrags, welcher den nicht
anhängigen Verzeichniseintrag
enthält, überschrieben
wird.
-
Es
ist möglich,
einen nicht anhängigen
Verzeichniseintrag einfach aus dem Teilverzeichnis-Cache 950 in
dem Hybrid-Protokoll auszusondern, da, falls eine nachfolgende Speicherzugriffsanforderung, die
sich auf einen Speicherblock bezieht, dessen Verzeichniseintrag
zuvor ausgesondert wurde, empfangen wird, die Hybrid-Technik einfach
diese Speicherzugriffsanforderung unter Verwendung des verzeichnisfreien
Protokolls bedient.
-
12 ist
ein Flussdiagramm, welches die bei dem Heimatknoten bei der Aufnahme
eines Verzeichniseintrags in dem Teilverzeichnis-Cache ablaufenden
Schritte beim Erfassen eines Erneuerungspunkts genauer zeigt. Im
Schritt 1202 wird festgestellt, ob es zusätzlichen
Platz in dem Teilverzeichnis-Cache gibt, um den neuen Verzeichniseintrag
darin aufzunehmen. Wenn dies der Fall ist, wird der Verzeichniseintrag
einfach in einen nicht verwendeten Verzeichniseintragsplatz in dem
Teilverzeichnis-Cache 950 geschrieben (Schritt 1204).
Falls in dem Teilverzeichnis-Cache 950 kein Platz ist,
stellt das Verfahren fest, ob ein nicht anhängiger Eintrag im dem Teilverzeichnis-Cache 950 verfügbar ist
(Schritt 905). Wenn alle aktuel len Einträge in dem
Teilverzeichnis-Cache 950 anhängig sind, kann der Teilverzeichnis-Cache 950 für Einträge den Verzeichniseintrag, der
als nächster
im Cache aufgenommen werden soll, in einer Schlange anordnen und
ihn dann aufnehmen, wenn ein Eintrag in dem Teilverzeichnis-Cache 950 nicht-anhängig wird.
Alternativ kann der Teilverzeichnis-Cache 950 den Verzeichniseintrag,
der als nächstes
im Cache aufzunehmen ist, ignorieren und ihn überhaupt nicht im Cache aufnehmen.
-
Falls
ein nicht anhängiger
Eintrag in dem Teilverzeichnis-Cache 950 ist, kann der
nicht anhängige
Eintrag ausgesondert werden. Die Auswahl eines nicht anhängigen Verzeichniseintrags
zum Aussondern, wenn mehrere Verzeichniseinträge nicht anhängig sind,
kann unter Verwendung irgendeiner bekannten Technik ausgeführt werden.
In einer Ausführungsform
kann, wie bereits erwähnt,
der nicht anhängige
Verzeichniseintrag einfach mit dem neuen Verzeichniseintrag in dem
Teilverzeichnis-Cache 950 überschrieben werden (Schritt 1206).