-
Die
vorliegende Erfindung bezieht sich auf ein Mehrprozessor-Verarbeitungssystem
und insbesondere auf ein Verarbeitungssystem gemäß dem Oberbegriff des ersten
Anspruchs.
-
Mehrprozessor-Verarbeitungssysteme,
bei denen mehrere Prozessoren unterschiedliche Operationen simultan
durchführen,
werden häufig
verwendet, um eine hohe Arbeitsleistungsfähigkeit zu erreichen. Bei einem
speziellen Typ eines Mehrprozessor-Verarbeitungssystems, das als
ein System mit einer verteilten Architektur oder mit lose gekoppelten
Prozessoren bekannt ist, werden die Daten zwischen den verschiedenen
Prozessoren mittels geeigneter Nachrichten ohne die Verwendung von
direkt gemeinschaftlich verwendeten Ressourcen ausgetauscht. Typischerweise
sind die Prozessoren in Knoten (oder Modulen) gruppiert, deren Operation unabhängig mittels
eines entsprechenden Taktsignals synchronisiert ist. Diese Verarbeitungssysteme unterscheiden
sich von diesen des Typs mit eng gekoppelten Prozessoren, bei denen
die Daten zwischen den verschiedenen Prozessoren mittels eines gemeinschaftlich
verwendeten Speichers ausgetauscht werden und deren Operation mittels
eines einzigen Systemtaktsignals synchronisiert ist.
-
Bei
Verarbeitungssystemen ist es allgemein notwendig, einen Zeitgeber
aufzuweisen, der eine Systemzeit speichert; diese Systemzeit wird
beispielsweise verwendet, um das Datum und die Zeit zu steuern,
um den Moment zu identifizieren, in dem Daten verschiedener Typen
(wie beispielsweise eine Datei oder eine Aufzeichnung einer Datenbank)
modifiziert wurden, um in der Lage zu sein, die jüngste Version
derselben auszuwählen,
etc.
-
Bei
eng gekoppelten Systemen ist ein Zähler, dessen Inhalt für jedes
Systemtaktsignal erhöht
wird, in jedem Prozessor eingegliedert. Da die Zähler in dem gleichen anfänglichen Moment
aktiviert werden und es ein einziges Systemtaktsignal gibt, haben
alle Zähler
immer den gleichen Inhalt.
-
Bei
lose gekoppelten Systemen jedoch ist es extrem schwierig, eine gemeinsame
Systemzeit bei allen Knoten zu erreichen, da die verschiedenen Taktsignale
nicht miteinander synchronisiert werden können. Eine mögliche Lösung bestünde darin,
einen einzigen Zähler
zu verwenden, der bei einem ausgewählten Knoten angeordnet ist
(und für
jedes entsprechende Taktsignal erhöht wird), wobei der Inhalt des
Zählers
durch einen jeglichen Prozessor gelesen wird, wenn nötig; doch
dieses System liefert lediglich eine exakte Systemzeit bei dem Knoten,
in dem der Zähler
vorhanden ist, während
bei den anderen Knoten der empfangene Wert auf Grund der Zeit, die
erforderlich ist, um den Wert zu senden, sicherlich geringer als
die tatsächliche
Systemzeit ist. Dies führt zu
Ungenauigkeiten, die bei vielen praktischen Anwendungen nicht toleriert
werden können.
-
Das
Dokument US-4746920 beschreibt ein Verfahren und eine Vorrichtung,
die dieses Verfahren implementiert, zum Synchronisieren und Verwalten der „Systemtakte", die durch jeden
von einer Anzahl von Prozessoreinheiten beibehalten werden, die
ein Mehrprozessorsystem bilden. Das vorgeschlagene Verfahren basiert
auf einer Mittelungstechnik.
-
Die
Aufgabe der vorliegenden Erfindung besteht darin, die zuvor erwähnten Nachteile
zu überwinden.
Um diese Aufgabe zu lösen,
ist ein Mehrprozessor-Verarbeitungssystem vorgeschlagen, wie es in
dem ersten Anspruch beschrieben ist.
-
Die
vorliegende Erfindung schlägt
ferner ein entsprechendes Verfahren zum Steuern einer Systemzeit
in dem Verarbeitungssystem vor.
-
Weitere
Charakteristika und die Vorteile des Mehrprozessor-Verarbeitungssystems
gemäß der vorliegenden
Erfindung werden aus der folgenden Beschreibung eines bevorzugten Ausführungsbeispiels
derselben mittels eines nicht einschränkenden Beispiels mit Bezug
auf die beigefügten
Zeichnungen deutlich, in denen:
-
1 ein
grundlegendes Blockdiagramm eines Verarbeitungssystems ist, bei
dem die vorliegende Erfindung verwendet werden kann,
-
2 schematisch
die Struktur der entfernten Brückeneinheit
zeigt,
-
3 ein
Ausführungsbeispiel
des Zeitgeberblocks zeigt.
-
Insbesondere
mit Bezug auf 1 zeigt diese ein Verarbeitungssystem 100 vom
Cache-kohärenten,
nicht einheitlichen Speicherzugriffstyp (cc-NUMA-Typ; cc-NUMA =
Cache-Coherent Non-Uniform Memory Access). Das Verarbeitungssystem 100 umfasst
N Knoten (wobei N 2), von denen in der Zeichnung vier (als N1, N2,
N3 und N4 angegeben) gezeigt sind; die Knoten N1–N4 sind miteinander mittels
eines entfernten Kommunikationskanalrings (REM LINK) 105 verbunden.
Der entfernte Ring 105 ist durch N unidirektionale Punkt-zu-Punkt-Kommunikationskanäle RL1,
RL2, RL3 und RL4 gebildet, die jeweils zwei benachbarte Knoten verbinden;
insbesondere ermöglicht
der Kanal RLi (wobei i = 1..4), dass Nachrichten von dem Knoten
Ni zu dem nächsten
Knoten N(i + 1) gesendet werden (der Kanal RL4 ermöglicht,
dass Nachrichten von dem Knoten N4 zu dem nächsten Knoten N1 gesendet werden).
Alternativ sind zwei oder mehr Ringe, ein Netz (Mesh-Router bzw.
Maschen-Router) oder eine andere äquivalente entfernte Kommunikationseinrichtung
vorgesehen.
-
Der
Knoten N1 (ähnliche
Betrachtungen gelten für
die anderen Knoten N2–N4)
ist durch einen Systembus (SYS BUS) 110 gebildet, mit dem
einer oder mehrere Prozessoren (μP)
C1, C2, C3, C4 (bei dem dargestellten Ausführungsbeispiel vier) parallel geschaltet
sind, die typischerweise interne Zwei pegel-Speicher vom Cachetyp
(in der Zeichnung nicht gezeigt) aufweisen. Eine lokale Brücke (LOC
BDG = Local Bridge) 115 ist ebenfalls mit dem Systembus 110 verbunden
und steuert eine Verbindung mit einem lokalen Bus (in der Zeichnung
nicht gezeigt), mit dem eine Gruppe (Cluster) von Eingabe/Ausgabe-Einheiten
gekoppelt ist. Der Knoten N1 umfasst einen lokalen Speicher (LOC
MEM = Local Memory) 120, typischerweise einen dynamischen
Direktzugriffsspeicher (DRAM = Dynamic Random Access Memory), der
mit dem Systembus 110 mittels einer geeigneten Steuereinheit
(nicht in der Zeichnung gezeigt) verbunden ist. Eine entfernte Brücke (REM BDG
= Remote Bridge) 125 verbindet den Systembus 110 mit
dem entfernten Ring 105 und steuert die Verbindung des
Knotens N1 mit den anderen Knoten N2–N4 des Verarbeitungssystems 100.
Eine Entscheidungseinheit (ARB = Arbitration Unit) 130 steuert
einen sich gegenseitig ausschließenden Zugriff auf den Systembus 110 durch
die verbundenen Agenten C1–C4, 115, 120 und 125.
-
Eine
Zeitgebereinheit (TEMP) 135, die typischerweise durch einen
Quarzoszillator gebildet ist, erzeugt ein Taktsignal CLK1, das zu
den Prozessoren C1–C4,
zu der lokalen Brücke 115,
zu dem lokalen Speicher 120, zu der entfernten Brücke 125 und zu
der Entscheidungseinheit 130 geliefert wird, um die Operation
des Knotens N1 zu synchronisieren. Jeder Knoten Ni umfasst eine
entsprechende Zeitgebereinheit, die in unabhängiges Taktsignal CLKi erzeugt.
Gemäß der Erfindung
weisen die Taktsignale CLKi der verschiedenen Knoten unterschiedliche Frequenzen
auf.
-
Bei
dem oben beschriebenen Verarbeitungssystem 100 kann jeder
Prozessor C1–C4
auf sowohl die Daten, die in dem lokalen Speicher 120 enthalten sind,
als auch die Daten, die in den lokalen Speichern der anderen Knoten
N2–N4
enthalten sind, die kollektiv als ein entfernter Speicher bezeichnet
sind, zugreifen. Natürlich
ist die Zugriffszeit nicht einheitlich (daher der Name NUMA), da
die Zugriffszeit auf den entfernten Speicher viel länger als
die Zugriffszeit auf den lokalen Speicher ist. Dieses System stellt
ferner mittels geeigneter Protokolle die Kohärenz der Daten sicher, die
in den verschiedenen Cache-Speichern repliziert sind, sowohl aus
dem lokalen Speicher als auch aus dem entfernten Speicher (daher
der Name cc).
-
Die
vorliegende Erfindung kann jedoch ferner bei Verarbeitungssystemen
implementiert sein, die eine unterschiedliche lose gekoppelte Architektur aufweisen,
und allgemein bei irgendeinem Mehrprozessor-Verarbeitungssystem,
das eine Mehrzahl von Knoten aufweist, die jeweils eine Einrichtung
zum Erzeugen eines unabhängigen
Taktsignals zum Synchronisieren der Operation des Knotens aufweisen.
-
Bei
dem Verarbeitungssystem gemäß der vorliegenden
Erfindung ist ein Zeitwert (die Zeitbasis oder TBi genannt), der
eine Systemzeit angibt, in jedem Knoten Ni gespeichert.
-
Der
TBi-Wert, der in jedem Knoten Ni gespeichert ist, wird auf jedes
entsprechende Taktsignal CLKi hin um einen entsprechenden Wert (die
Lokalperiode oder LOCPERIODi genannt) erhöht. Der LOCPERIODi-Wert jedes
Knotens Ni ist auf eine derartige Weise gesetzt, um eine virtuelle
Modifikationsfrequenz der Tbi-Werte zu simulieren, wobei diese Frequenz
für jeden
Knoten N1–N4
des Systems im Wesentlichen gleich ist. Falls beispielweise die
Knoten N1, N2, N3 und N4 Taktfrequenzen von 100 MHz, 150 MHz, 200
MHz bzw. 75 MHz aufweisen, sind die LOCPERIODi-Werte auf 6, 4, 3
bzw. 8 gesetzt. Somit wird für
jedes Taktsignal CLK1 (bei 100 MHz) der Wert TB1 des Knotens N1
um 6 Einheiten erhöht
(das heißt,
auf eine virtuelle Frequenz von 6·100 = 600 MHz), wird für jedes
Taktsignal CLK2 (bei 150 MHz) der Wert TB2 um 4 Einheiten erhöht (das
heißt,
auf eine virtuelle Frequenz von 4·150 = 600 MHz), wird für jedes
Taktsignal CLK3 (bei 200 MHz) der Wert TB3 um 3 Einheiten erhöht (das
heißt
auf eine virtuelle Frequenz von 3·200 = 600 MHz) und wird für jedes
Taktsignal CLK4 (bei 75 MHz) der Wert TB4 um 8 Einheiten erhöht (das
heißt
auf eine virtuelle Frequenz von 8·75 = 600 MHz).
-
Ein
ausgewählter
Knoten, der Referenzknoten (oder Master-Knoten) genannt, wird zum Synchronisieren
aller TBi-Werte verwendet; der Master-Knoten ist vorzugsweise durch
den Knoten (beispielsweise den Knoten N1) gebildet, dessen lokaler Speicher
einen ersten Datenblock enthält,
der mittels einer Adresse des Werts Null zugreifbar ist (obwohl die
Verwendung eines anderen Knoten nicht ausgeschlossen ist). Insbesondere
führt jeder
andere Knoten N2–N4
als der Master-Knoten N1 periodisch eine Synchronisationsoperation
durch, bei der der TBi-Wert in Abhängigkeit von dem Wert TB1 des Master-Knotens
N1 und von einem Wert modifiziert wird, der eine Zeit angibt, die
erforderlich ist, um den Wert TB1 von dem Master-Knoten N1 zu dem
fraglichen Knoten zu senden. Falls der Wert TB1 beispielsweise 3500200100
beträgt
und die Zeit, die erforderlich ist, um den Wert TB1 von dem Knoten
N1 zu dem Knoten N2 zu senden, 1500000 beträgt, wird der Wert TB2 auf 3500200100
+ 1500000 = 3501700100 gesetzt, um die Zeit zu berücksichtigen, die
nach der Erfassung des Werts TB1 verstrichen ist.
-
Die
TBi-Werte, die in den verschiedenen Knoten des Systems gespeichert
sind, werden somit anfänglich
(mittels einer ersten Synchronisationsoperation) auf einen gemeinsamen
Startwert gesetzt. Die periodischen Synchronisationsoperationen
ermöglichen
dann, dass die TBi-Werte im Wesentlichen einander gleich gehalten
werden, ungeachtet der Drift derselben mit der Zeit. Diese Drift
rührt von
der Tatsache her, dass es, da die Werte TBi und LOCPERIODi allgemein
als ganze Zahlen ausgedrückt
sind, nicht immer möglich
ist, eine genau gleiche Modifikationsfrequenz der TBi-Werte der
verschiedenen Knoten sicherzustellen. Selbst bei einer idealen Situation unterliegen
zudem die TBi-Werte in jedem Fall einer Drift mit der Zeit, die
durch die Differenz zwischen der tatsächlichen Frequenz der Taktsignale
und der Nennfrequenz derselben bewirkt wird.
-
Der
TBi-Wert, der in jedem Knoten gespeichert ist, kann durch die Agenten
des gleichen Knotens gelesen werden. Die Sendung des TBi-Werts zu einem
anfordernden Agenten (mittels des Systembusses ausgeführt) ist
sehr schnell (wenige Pulse des Taktsignals), so dass der TBi-Wert,
der durch den anfordernden Agenten empfangen wird, extrem genau
ist.
-
Die
Lösung
der vorliegenden Erfindung ist besonders einfach und ermöglicht,
dass ein Systemzeitgeber sehr genau gesteuert werden kann, ohne das
Verarbeitungssystem als ein Ganzes zu überlasten.
-
Die
Synchronisationsoperation wird vorzugsweise mit der Verwendung einer
Nachricht durchgeführt,
die periodisch (mit einer Frequenz, die durch eine Synchronisationsperiode
SYNCPERIOD definiert ist) von dem Master-Knoten N1 zu den anderen Knoten
N2–N4
gesendet wird. Insbesondere wird die Synchronisationsnachricht von
dem Master-Knoten N1 zu dem nächsten
Knoten N2 gesendet, dann von dem Knoten N2 zu dem nächsten Knoten
N3, und so weiter, bis die Synchronisationsnachricht zurück zu dem
Master-Knoten N1 kommt; dies macht das System extrem einfach und
reduziert einen Verkehr an dem entfernten Ring auf das Minimum.
Alternativ wird die Synchronisationsoperation periodisch (selbst
mit unterschiedlichen Frequenzen) durch jeden Knoten (mittels einer
Anforderung, die zu dem Master-Knoten gesendet wird) aktiviert,
etc.
-
Ein
Verfahren gemäß der Erfindung
besteht aus einem Setzen der globalen virtuellen Frequenz auf einen
vordefinierten Wert; der ausgewählte
Wert ist derart, um groß genug
zu sein, um sicherzustellen, dass die TBi-Werte für eine jegliche
Taktsignalfrequenz innerhalb eines vorbestimmten Bereichs genau
sind, und zu gleichen Zeit derart, dass die Werte LOCPERIODi und
SYNCPERIOD die maximal zulässige
Größe derselben
nicht überschreiten.
Die ausgewählte
globale virtuelle Frequenz ist vorzugsweise derart, um eine exakte
ganze Zahl für
den LOCPERIODi-Wert des Master-Knotens zu erreichen, so dass der
Fehler, der durch die Einstellung der Modifikationsfrequenz des
TBi-Werts auf die globale virtuelle Frequenz bewirkt wird, bei diesem
Knoten Null beträgt.
Dies ermöglicht,
dass neue Knoten (die eine Taktfrequenz unter dem Maximum aufweisen)
zu dem System ohne den Bedarf hinzugefügt werden, die globale virtuelle
Frequenz (und somit die Werte SYNCPERIOD und LOCPERIODi der anderen
Knoten) zu modifizieren, was das System extrem flexibel macht.
-
Der
SYNCPERIOD-Wert ist auf einen Wert gesetzt, der klein genug ist,
um sicherzustellen, dass die Differenz zwischen den TBi-Werten der
verschiedenen Knoten (durch die Drift der tatsächlichen Taktsignale, durch
den Fehler, der durch die LOCPERIODi-Werte eingebracht wird, und
durch die Ungenauigkeit des Synchronisationsprozesses bewirkt) unter einem
maximal zulässigen
Wert liegt. Zur gleichen Zeit sollte der SYNCPERIOD-Wert nicht zu
niedrig sein, um den entfernten Ring nicht mit übermäßig häufigen Synchronisationsnachrichten
zu überlasten.
-
Beispielsweise
wird ein System mit Knoten betrachtet, die irgendeine Taktfrequenz
aufweisen, die nicht größer als
150 MHz ist, wobei der Master-Knoten eine Taktfrequenz von 90 MHz
aufweist. Die globale virtuelle Frequenz ist auf 399960 MHz (um
so einen LOCPERIODi-Wert zu erreichen, der eine exakte ganze Zahl
ist, das heißt
399960/90 = 4444 für
den Master-Knoten) gesetzt, bei einem Zeitbasiseinheitwert, der
jedem unitären
Anstieg der TBi-Werte entspricht, von 1/399,960·106 = 2,500250025003·10–12 =
2,500250025003 ps.
-
Der
minimale LOCPERIODi-Wert ist dieser, der der maximalen Taktfrequenz
(150 MHz) entspricht, das heißt
399960/150 = 2666,4 gerundet auf die nächste ganze Zahl 2667. Der
maximale Prozentsatzfehler, der durch das Aufrunden bewirkt wird,
ist gleich einer Einheit relativ zu dem minimalen LOCPERIODi-Wert,
das heißt
1/2667 = 0,03749531308586%. Es wird angenommen, dass die Oszillatoren,
die verwendet werden, um die Taktsignale zu erzeugen, eine Genauigkeit
von 50 PPM (Parts Per Million) aufweisen, das heißt 0,005%;
in diesem Fall ist der Fehler, der bei dem Master-Knoten eingebracht
wird, gleich 0,005% (da der Fehler, der durch den LOCPERIODi-Wert
bewirkt wird, Null beträgt)
und der maximale Prozentsatzfehler beträgt 0,03749531308586 + 0,005
= 0,04249531308586. Falls somit der schlimmste Fall betrachtet wird,
bei dem diese Fehler ein entgegengesetztes Vorzeichen aufweisen
(ein Knoten fortgeschritten und ein Knoten verlangsamt), werden
die Fehler addiert, so dass der maximale gesamte Prozentsatzfehler 0,04249531308586
+ 0,005 = 0,04749531308586% beträgt.
-
Es
wird dann angenommen, dass die Differenz zwischen den TBi-Werten
unter einem vorbestimmten Wert gehalten wird, beispielsweise 5 μs. Falls
die Ungenauigkeit des Synchronisationsprozesses als 1 μs geschätzt wird,
ist es, um die Differenz unter dem erwünschten Wert zu halten, notwendig, dass
die Drift der TBi-Werte nicht größer als
5 – 1
= 4 μs beträgt. Der
maximale gesamte Prozentsatzfehler, der oben berechnet ist, erzeugt
diese Drift nach einer Zeitperiode P, die durch die Gleichung P·0,04749531308586%
= 4 10–6 definiert
ist, was P = 4·10–6·102/0,04749531308586
= 8,421883634642·10–3 =
8,421883634642ms ergibt. Um die Differenz unter dem erwünschten
Wert zu halten, ist es deshalb notwendig, dass der Synchronisationsprozess
eine Periode aufweist, die zumindest gleich dieser Zeitperiode ist,
so dass der SYNCPERIOD-Wert (in den Basiseinheiten ausgedrückt) 8,421883634642·10–3/2,500250025003·10–12 = 3,368416578511·109 = 3368416578,511 beträgt; aufgerundet auf die nächste ganze
Zahl SYNCPERIOD = 3368416579.
-
Unter
jetziger Bezugnahme auf 2 (die bereits in 1 gezeigten
Elemente sind durch die gleichen Bezugszeichen identifiziert) umfasst
die entfernte Brücke 125 eines
generischen Knotens Ni eine physische Schnittstelle (PITF = Physical
Interface) 205 mit dem entfernten Ring 105. Die
Nachrichten, die an dem entfernten Ring 105 gesendet wer den, sind
in Paketen organisiert. Jedes Paket umfasst verschiedene Dienstfelder,
die den Bestimmungsknoten, den Knoten, der das Paket emittierte,
die Länge des
Pakets, den Pakettyp, die Priorität desselben für eine Übertragung
an dem entfernten Ring, etc. identifizieren, und eine Datenstruktur,
die beispielsweise durch 8 Blöcke
(Schläge)
von 64 Bits gebildet ist; die Pakete sind gemäß dem Standard definiert, der
als der SCI-Standard (SCI = Scalable Coherent Interface = skalierbare
kohärente
Schnittstelle) bekannt ist, der in der IEEE-Spezifikation P1596.3/051
definiert ist (obwohl die Verwendung von Nachrichten unterschiedlicher
Typen nicht ausgeschlossen ist).
-
Die
physische Schnittstelle 205 empfängt die Pakete, die an dem
Kanal RL(i – 1)
von dem vorhergehenden Knoten N(i – 1) gesendet werden, und bestimmt
den entsprechenden Bestimmungsknoten. Falls der Bestimmungsknoten
ein anderer als der Knoten Ni ist, sendet die physische Schnittstelle
das empfangene Paket zu dem nächsten
Knoten N(i + 1) an dem Kanal RL(i + 1). Andernfalls werden die Datenstruktur
und die Daten, die den Pakettyp identifizieren, zu einer logischen
Schnittstelle (LITF = Logic Interface) 210 geliefert, die
den Pakettyp bestimmt und die zugeordneten Operationen durchführt. Umgekehrt
baut die logische Schnittstelle 210 ein Paket für eine Übertragung
an dem entfernten Ring 105 auf und liefert dasselbe zu
der physischen Schnittstelle 205, die dasselbe zu dem nächsten Knoten
N(i + 1) an dem Kanal RL(i + 1) sendet.
-
Die
logische Schnittstelle 210 umfasst einen entfernten Schnittstellenblock
(REM ITF = Remote Interface) 215, der mit der physischen
Schnittstelle 205 verbunden ist, und einen lokalen Schnittstellenblock
(LOC ITF = Local Interface) 220, der mit dem Systembus 110 verbunden
ist. Zwischen den entfernten Schnittstellenblock 215 und
den lokalen Schnittstellenblock 210 sind ein Logikblock 225,
der die Operation der entfernten Brückeneinheit 125 steuert (zum
Beispiel die Kohärenzprotokolle
der Cache-Speicher), und ein Zeigeberblock 230 eingefügt, der
die Aktualisierung und die Synchronisation des TBi-Werts steuert.
Die Tatsache, dass der Zeitgeberblock im Inneren der entfernten
Brückeneinheit
angeordnet ist, ist besonders vorteilhaft, da dasselbe ermöglicht,
dass die TBi-Werte der verschiedenen Knoten miteinander extrem schnell
synchronisiert werden können,
ohne den Transfer von Daten innerhalb des Knotens selbst (das heißt an dem
Systembus) zu erfordern; die vorliegende Erfindung kann jedoch auch
implementiert sein, wobei der Zeitgeberblock bei einer unterschiedlichen
Position angeordnet ist, beispielsweise in der Verhandlungseinheit,
in einem Prozessor des Knotens oder dergleichen.
-
Der
entfernte Schnittstellenblock 215 decodiert den Typ eines
Pakets, das von dem entfernten Ring 105 (mittels der physischen
Schnittstelle 205) empfangen wird; falls dasselbe ein Synchronisationspaket
ist, wird die entsprechende Datenstruktur zu dem Zeitgeberblock 230 geliefert,
wohingegen die Datenstruktur zu dem logischen Block 225 geliefert wird,
falls nicht. Umgekehrt empfängt
die entfernte Schnittstelle 215 ein Synchronisationspaket
von dem Zeitgeberblock 230 oder ein Paket irgendeines anderen
Typs von dem logischen Block 225 und diese werden dann
zu der physischen Schnittstelle 205 gesendet; eine hohe
Priorität
für eine Übertragung
an dem entfernten Ring ist vorzugsweise den Synchronisationspaketen
zugeordnet, um so die Genauigkeit des Synchronisationsprozesses
zu erhöhen.
-
Der
lokale Schnittstellenblock 220 steuert ein Protokoll für einen
Zugriff auf den Systembus 110. Insbesondere empfängt die
lokale Schnittstelle 220 von dem Systembus 110 alle
der Daten, die an demselben gesendet werden; in dem Fall einer Anweisung,
die eine Initialisierung des TBi-Werts
(der beispielsweise durch einen Prozessor des Knotens emittiert
wird) erfordert, werden die entsprechenden Daten zu dem Zeitgeberblock 230 geliefert,
wohingegen andernfalls die Daten, die von dem Systembus empfangen
werden, zu dem logischen Block 225 geliefert werden. Umgekehrt
steuert die lokale Schnittstelle 220 Anforderungen nach
einem Zugriff auf den Systembus 110, um an demselben Daten
zu senden, die von dem logischen Block 225 empfangen werden, oder
den Systemzeitwert, der von dem Zeitgeberblock 230 empfangen
wird, ansprechend auf eine entsprechende Leseanweisung (die durch
irgendeinen Agenten des Knotens emittiert wird).
-
Unter
jetziger Bezugnahme auf 3 umfasst der Zeitgeberblock 230 einen
entfernten Eingangszwischenspeicherblock (REM IN) 303 und
einen entfernten Ausgangszwischenspeicherblock (REM OUT) 306,
die die Datenstruktur des Synchronisationspakets (SYNC DATA) von
dem entfernten Schnittstellenblock empfangen bzw. dieselbe zu dem entfernten
Schnittstellenblock senden.
-
Bei
einem bevorzugten Ausführungsbeispiel der
vorliegenden Erfindung umfasst die Datenstruktur des Synchronisationspakets
ein Anfangsfeld (START) von beispielsweise 64 Bits, ein Endfeld (END)
von beispielsweise 64 Bits und ein Inkrementfeld (INC) von beispielsweise
32 Bits. Bei dem fraglichen Ausführungsbeispiel,
bei dem das Synchronisationspaket durch 8 Schläge von 64 Bits gebildet ist, wird
der erste Schlag für
das START-Feld verwendet, der zweite Schlag für das END-Feld und ein Teil
des dritten Schlags für
das INC-Feld, wobei
der vierte bis achte Schlag nicht verwendet werden.
-
Der
Zwischenspeicherblock 303 empfängt die Datenstruktur eines
Synchronisationspakets als einen Eingang und erzeugt die Werte der
Felder START, END und INC an den Ausgängen 303a, 303b bzw. 303c desselben;
umgekehrt empfängt
der Zwischenspeicherblock 306 die Werte der Felder START,
END und INC an den Eingängen 306a, 306b und 306c desselben
und erzeugt die entsprechende Datenstruktur eines Synchronisationspakets
an dem Ausgang desselben. Bei dem Zwischenspeicherblock 306 gibt
es ferner ein Register 307 (beispielsweise von 16 Bits),
das einen NEXTNODE-Wert (NÄCHSTER-KNOTEN-Wert) speichert,
der den Knoten angibt, zu dem das Synchronisationspaket gesendet
werden sollte; dieser Knoten ist vorzugsweise gesetzt, um der unmittelbar
folgende Knoten zu sein (das heißt der Knoten, der physisch
am nächsten
an dem fraglichen Knoten ist).
-
Ein
lokaler Zwischenspeicherblock (LOC IN) 309 empfängt (von
dem lokalen Schnittstellenblock) einen Initialisierungswert (INI)
für den
TBi-Wert (als eine Folge einer entsprechenden Anweisung) und gibt
den gleichen Wert aus. Ein lokaler Ausgangszwischenspeicherblock
(LOC OUT) 312 gibt eine Systemzeit gleich dem Zeitwert
TBi ansprechend auf eine entsprechende Leseanforderung aus.
-
Der
Zeitsteuerungsblock 230 umfasst ferner ein Register 315 (beispielsweise
mit 64 Bits), das den TBi-Wert speichert, und ein Register 318 (beispielsweise
mit 16 Bits), das den LOCPERIODi-Wert speichert. Der Ausgang des
Registers 315 und der Ausgang des Registers 318 sind
mit dem Eingang einer Addiererschaltung (ADD) 321 verbunden.
Der Ausgang des Registers 315 und der Ausgang des Addierers 321 sind
mit getrennten Eingängen
eines Multiplexers 324 verbunden, der den Wert, der an
lediglich einem dieser Eingänge
anliegt, abhängig
von einem geeigneten Auswahlsignal zu dem eigenen Ausgang desselben überträgt. Ein
Addierer 325 weist einen Eingang auf, der mit dem Ausgang
des Registers 315 verbunden ist, und einen anderen Eingang,
der bei einem vorbestimmten Wert gehalten wird, vorzugsweise +1.
Ein weiterer Multiplexer 327 weist getrennte Eingänge auf,
die mit dem Ausgang des Multiplexers 324, mit dem Ausgang 303a,
mit dem Ausgang des Addierers 325 und mit dem Ausgang des
Zwischenspeicherblocks 309 verbunden sind. Der Ausgang
des Multiplexers 327 ist mit dem Eingang des Registers 315 verbunden.
Der Ausgang des Registers 315 ist ferner mit dem Eingang
des Zwischenspeicherblocks 312 verbunden.
-
Ein
Register 336 (beispielsweise mit 32 Bits) wird verwendet,
um einen Inkrementwert (INC) zu speichern, der eine Zeit angibt,
die erforderlich ist, um das Synchronisations paket von einem generischen
Knoten Ni zu einem nachfolgenden Knoten N(i + 1) zu senden. Eine
Komparatorschaltung 339 weist getrennte Eingänge auf,
die mit dem Ausgang des Registers 315 und mit dem Ausgang 303a verbunden sind.
Der Ausgang des Komparators 339 und der Ausgang des Registers 336 sind
mit dem Eingang eines Addierers 342 verbunden, dessen Ausgang
mit dem Eingang des Registers 336 verbunden ist.
-
Der
Ausgang des Registers 315 und der Ausgang des Registers 336 sind
mit dem Eingang eines Addierers 345 verbunden. Ein weiterer
Addierer 348 weist einen Eingang, der mit dem Ausgang 303a verbunden
ist, und einen anderen Eingang auf, der mit dem Ausgang 303c verbunden
ist. Der Ausgang des Addierers 345 und der Ausgang des
Addierers 348 sind mit getrennten Eingängen eines Multiplexers 351 verbunden,
dessen Ausgang mit dem Eingang 306a verbunden ist.
-
Ein
Register 354 (zum Beispiel mit 32 Bits) wird verwendet,
um den SYNCPERIOD-Wert zu speichern. Der Ausgang des Registers 315 und
der Ausgang des Registers 354 sind mit dem Eingang eines
Addierers 357 verbunden. Ein weiterer Addierer 360 weist
einen Eingang, der mit dem Ausgang 303b verbunden ist,
und einen anderen Eingang auf, der mit dem Ausgang 303c verbunden
ist. Ein Multiplexer 363 weist getrennte Eingänge auf,
die mit dem Ausgang des Addierers 357 und mit dem Ausgang
des Addierers 360 verbunden sind; der Ausgang des Multiplexers 363 ist
mit dem Eingang 306b verbunden.
-
Ein
Multiplexer 364 weist getrennte Eingänge auf, die mit dem Ausgang 303c und
mit dem Ausgang des Registers 336 verbunden sind; der Multiplexer 364 überträgt den Wert,
der an lediglich einem dieser Eingänge anliegt, selektiv zu dem
Ausgang desselben, der mit dem Eingang 306c verbunden ist.
-
Der
Ausgang des Addierers 357 und der Ausgang 303b sind
mit getrennten Eingängen
eines Multiplexers 366 verbunden; der Ausgang des Multiplexers 366 ist
mit dem Eingang eines Registers 369 (zum Beispiel mit 64
Bits) verbunden, das verwendet wird, um einen Endzählwert (END)
zu speichern. Der Ausgang des Addierers 321 und der Ausgang
des Registers 369 sind mit dem Eingang eines Komparators 372 verbunden.
-
Ein
Flag 378 wird ferner verwendet, um anzugeben (zum Beispiel
wenn dasselbe eingeschaltet ist), dass der Knoten ein Master-Knoten
ist.
-
Der
Betrieb des Zeitgeberblocks 230 ist mittels geeigneter
Steuersignale (als ein Ganzes mit Sc angegeben) durch eine Steuerlogikeinheit
(CTRL = Control Logic Unit) 381 gesteuert, die im Grunde durch
eine Finit-Zustand-Maschine gebildet ist. Der Ausgang des Komparators 372 und
der Ausgang des Flags 378 sind mit dem Eingang der Logiksteuereinheit 381 verbunden,
die ferner als eine Eingabe ein Signal REM.STROBE, das (wenn dasselbe
eingeschaltet ist) angibt, dass die Datenstruktur eines Synchronisationspakets
an dem Eingang des Zwischenspeicherblocks 303 verfügbar ist,
ein Signal LOC.STROBE, das (wenn dasselbe eingeschaltet ist) angibt,
dass ein Initialisierungswert an dem Eingang des Zwischenspeicherblocks 309 verfügbar ist, und
ein Signal READ (LESEN) empfängt,
das (wenn dasselbe eingeschaltet ist) angibt, dass die Systemzeit
durch eine Leseanweisung angefordert wurde.
-
Normalerweise
befindet sich die Steuerlogikeinheit in einem Zustand, in dem auf
jedes Taktsignal CLKi hin das Signal, das durch den Addierer 321 ausgegeben
wird, mittels der Multiplexer 324 und 327 zu dem
Eingang des Registers 315 übertragen wird; der TBi-Wert
wird somit auf jedes Taktsignal CLKi hin um den LOCPERIODi-Wert
erhöht.
-
Falls
der Knoten kein Master-Knoten ist (Flag 378 aus), wird,
wenn der TBi-Wert den Endzählwert erreicht
(oder überschreitet),
der in dem Register 369 gespeichert ist (Signal, das durch
den Komparator 372 ausgegeben wird, ein), die Steuerlogikeinheit 381 in
einen Zustand versetzt, in dem das Signal, das durch das Register 315 ausgegeben
wird, auf jedes Taktsignal CLKi hin zu dem Eingang des gleichen
Registers 315 mittels der Multiplexer 324 und 327 zurückgegeben
wird, um den TBi-Wert fest zu halten.
-
Falls
jedoch der Knoten ein Master-Knoten ist (Flag 378 ein),
wird die Erhöhung
des TBi-Werts niemals unterbrochen. Wenn der TBi-Wert den Endzählwert erreicht
(oder überschreitet),
der in dem Register 369 gespeichert ist (Ausgangssignal
des Komparators 372 ein), steuert die Steuerlogikeinheit 382 die
Struktur auf eine Weise, derart, dass das Signal, das durch den
Addierer 345 ausgegeben wird (das heißt die Summe des TBi-Werts
und des Inkrementwerts), mittels des Multiplexers 351 zu
dem Eingang 306a übertragen
wird (START-Feldwert), das Signal, das durch den Addierer 357 ausgegeben
wird (das heißt
die Summe des TBi-Werts und des SYNCPERIOD-Werts), mittels des Multiplexers 363 zu
dem Eingang 306b übertragen
wird (END-Feldwert) und der Inkrementwert, der in dem Register 363 gespeichert ist,
mittels des Multiplexers 364 zu dem Eingang 306c übertragen
wird (INC-Feldwert). Zu der gleichen Zeit wird das gleiche Signal,
das durch den Addierer 357 ausgegeben wird (das heißt die Summe des
TBi-Werts und des SYNCPERIOD-Werts) ebenfalls durch den Multiplexer 366 zu
dem Register 369 übertragen
(um den Endzählwert
zu aktualisieren). Die Steuerlogikeinheit 381 aktiviert
dann den Zwischenspeicherblock 306, um ein Synchronisationspaket
aufzubauen, das diese Werte (und den NEXTNODE-Wert) enthält und das
zu dem nächsten
Knoten an dem entfernten Ring gesendet wird.
-
Wenn
ein Nicht-Master-Knoten ein Synchronisationspaket empfängt (REM.STROBE-Signal
ein), aktiviert die Steuerlogikeinheit 381 den Zwischenspeicherblock 303,
um die Werte der entsprechenden Felder START, END und INC an den
Ausgängen 303a, 303b bzw. 303c zu
erhalten. Das empfangene Synchronisationspaket wird geeignet modifiziert,
um zu dem nächsten
Knoten gesendet zu werden. Insbesondere wird das Signal, das durch
den Addierer 348 ausgegeben wird (das heißt die Summe
des START-Feldwerts und des INC-Feldwerts), mittels des Multiplexers 351 zu
dem Eingang 306a übertragen
(neuer START-Feldwert), wird das Signal, das durch den Addierer 360 ausgegeben
wird (das heißt die
Summe des END-Feld-
und des INC-Feldwerts), mittels des Multiplexers 363 zu
dem Eingang 306b übertragen
(neuer END-Feldwert) und wird das Signal an dem Ausgang 303c (INC-Feldwert)
mittels des Multiplexers 364 direkt zu dem Eingang 306c übertragen
(neuer INC-Feldwert). Die Steuerlogikeinheit 381 aktiviert
dann den Zwischenspeicherblock 306, um ein neues Synchronisationspaket
aufzubauen, das diese Werte (und den NEXTNODE-Wert) enthält und das zu dem nächsten Knoten
an dem entfernten Ring gesendet wird.
-
Zu
der gleichen Zeit wird das Signal an dem Ausgang 303a (der
START-Feldwert) mittels des Multiplexers 327 zu dem Register 315 übertragen (um
den TBi-Wert zu aktualisieren) und wird das Signal an dem Ausgang 303b (END-Feldwert)
mittels des Multiplexers 366 zu dem Register 369 übertragen
(um den Endzählwert
zu aktualisieren). Die Steuerlogikeinheit 381 kehrt dann
zu dem normalen Betriebszustand zurück, so dass der TBi-Wert auf
jedes Taktsignal hin um den LOCPE-RIODi-Wert erhöht wird.
-
Es
ist zu beachten, dass die Endzählwerte, die
in dem Master-Knoten und in dem unmittelbar nachfolgenden Knoten
gespeichert sind, gleich sind. Der START-Feldwert, der in das Register 315 des nächsten Knotens
geladen ist (gleich dem Endzählwert
TBi des Master-Knotens plus dem Inkrementwert), wird deshalb immer
größer sein
als der TBi-Wert des gleichen Knotens (der fest bei dem Endzählwert gehalten
wird). Ähnliche
Betrachtungen gelten für
die anderen Knoten, bei denen der Endzählwert und der START-Feldwert
beide um den INC-Feldwert erhöht
werden.
-
Diese
Lösung
stellt sicher, dass die Zeit, die durch den TBi-Wert gemessen wird,
sich immer (monoton) erhöht;
dieses Ergebnis wird extrem einfach und wirksam erreicht. Es ist
ferner zu beachten, dass der Fehler, der durch den oben beschriebenen
Mechanismus eingebracht wird (wenn der TBi-Wert fest gehalten wird), lediglich
während
der Synchronisationsoperation und somit innerhalb einer Zeitperiode begrenzter
Dauer auftritt. Alternativ sind äquivalente Strukturen
zum Unterbrechen der Erhöhung
des TBi-Werts im Wesentlichen vor jeder Synchronisationsoperation
vorgesehen, um den TBi-Wert fest bei einem Wert zu halten, der nicht
größer als
der Wert ist, der durch die Synchronisationsoperation gesetzt ist;
die vorliegende Erfindung kann jedoch auch ohne diese Charakteristik
beispielsweise durch die Softwaresteuerung irgendeines Dekrements
der Systemzeit oder dergleichen implementiert sein.
-
Wenn
das Synchronisationspaket von dem Master-Knoten empfangen wird,
nachdem sich dasselbe um den gesamten entfernten Ring herum bewegt
hat (REM.STROBE-Signal ein), aktiviert die Steuerlogikeinheit 381 den
Zwischenspeicherblock 303, um den START-Feldwert der entsprechenden Datenstruktur
an dem Ausgang 303a zu erhalten. Dieser Wert, der anfänglich auf
den TBi-Wert des Master-Knotens plus dem Inkrementwert (INC) gesetzt
ist und durch die Addition des INC-Feldwerts von jedem anderen Knoten modifiziert
ist, ist deshalb gleich dem anfänglichen
TBi-Wert plus N·INC.
Falls die tatsächliche
Zeit, die benötigt
wird, um das Synchronisationspaket an jedem Kanal RLi zu senden, genau
gleich dem Inkrementwert ist, ist der empfangene START-Feldwert
gleich dem aktuellen TBi-Wert; falls jedoch die tatsächliche
Sendezeit geringer als der Inkrementwert ist, ist der empfangene START-Feldwert
größer als
der aktuelle TBi-Wert, wohingegen, falls die tatsächliche
Sendezeit größer als
der Inkrementwert ist, der empfangene START-Feldwert geringer als
der aktuelle TBi-Wert ist.
-
Der
empfangene START-Feldwert wird mittels des Komparators 339 mit
dem TBi-Wert verglichen, der in dem Register 315 gespeichert
ist. Der Komparator 339 gibt ein Signal, das einen positiven Wert
(zum Beispiel +1) aufweist, aus, wenn der START-Feldwert geringer
als der TBi-Wert ist, einen Wert von Null, wenn der START-Feldwert
gleich dem TBi-Wert ist, und einen negativen Wert (zum Beispiel –1), wenn
der START-Feldwert größer als
der TBi-Wert ist. Der Inkrementwert, der in dem Register 336 gespeichert
ist, wird dann folglich durch die Addiererschaltung 342 modifiziert.
-
Die
oben beschriebene Lösung
ermöglicht, dass
der Inkrementwert extrem einfach und genau in Abhängigkeit
von dem tatsächlichen
Verkehr an dem entfernten Ring dynamisch aktualisiert wird; dieses Ergebnis
wird mit der Verwendung des gleichen Synchronisationspakets erreicht,
ohne den entfernten Ring durch die Sendung irgendeines zusätzlichen Pakets
zu überlasten.
Alternativ aktualisiert jeder Knoten den eigenen Inkrementwert desselben
(der die Zeit angibt, die benötigt
wird, um das Synchronisationspaket zu dem nächsten Knoten zu senden) oder
geeignete Pakete werden verwendet, um die Sendezeit zu bestimmen,
oder der Inkrementwert wird auf einen vorbestimmten Wert gesetzt,
etc.
-
Auf
eine Initialisierung des Systems hin wird der entsprechende LOCPERIODi-Wert
in das Register 318 jedes Knotens geladen und das Register 315 (TBi-Wert)
und das Register 369 (Endzählwert) werden auf den gleichen
Startwert gesetzt, beispielsweise Null. Der Master-Knoten wird durch
Einschalten des entsprechenden Flags 378 gesetzt; zu der
gleichen Zeit wird der SYNCPERIOD-Wert in das Register 354 geladen
und das Register 336 (Inkrementwert) wird auf einen Startwert
gesetzt, beispielsweise Null (diese Werte sind in den anderen Knoten
nicht von Bedeutung).
-
Sobald
die Zeitgeberblöcke 230 freigegeben sind,
sind somit die TBi-Werte aller der Knoten unmittelbar gleich den
Endzählwerten,
die in den Registern 369 gespeichert sind (Ausgangssignal
von dem Komparator 372 ein). Der TBi-Wert jedes Nicht-Master-Knotens
wird deshalb fest bei dem gleichen Anfangswert gehalten. Zu der
gleichen Zeit sendet der Master-Knoten ein erstes Synchronisationspaket
an dem enternten Ring. Wenn ein Nicht-Master-Knoten dieses Synchronisationspaket
empfängt,
aktualisiert derselbe den TBi-Wert
und den Endzählwert
und aktiviert dann das Inkrement des TBi-Werts (wie es oben detailliert
beschrieben ist). Es ist zu beachten, dass auch in diesem Fall der
START-Feldwert,
der in das Register 315 geladen ist (gleich dem Start-TBi-Wert
des Master-Knotens plus dem Inkrementwert), immer größer als
oder zumindest gleich dem TBi-Wert des fraglichen Knotens ist (der
fest bei dem Startwert gehalten ist).
-
Der
TBi-Wert (der in dem Master-Knoten gespeichert ist) kann auch mittels
einer entsprechenden Anweisung auf einen Initialisierungswert programmiert
sein. Wenn der Initialisierungswert an dem Eingang des Zwischenspeicherblocks 309 verfügbar ist
(LOC.STROBE-Signal ein), aktiviert die Steuerlogik 381 den
Zwischenspeicherblock 309, so dass das Eingangssignal des
Blocks 309 zu dem Ausgang desselben und dann mittels des
Multiplexers 327 zu dem Register 315 übertragen
wird; der somit aktualisierte TBi-Wert wird dann zu den anderen
Knoten des Systems mit dem ersten Synchronisationspaket gesendet,
wie es oben beschrieben ist.
-
Wenn
ein Agent des Knotens mittels einer entsprechenden Anweisung (READ-Signal
ein) anfordert, dass die Systemzeit gelesen wird, überträgt, falls
der TBi-Wert nicht fest ist (Master-Knoten oder Nicht-Master-Knoten
mit TBi-Wert unter Endzählwert),
die Steuerlogikeinheit 381 die Inhalte des Registers 315 (TBi-Wert)
zu dem Eingang des Zwischenspeicherblocks 312. Falls der
TBi-Wert fest ist (Nicht-Master-Knoten
mit TBi-Wert, der den Endzählwert
erreicht oder überschritten
hat), wird das Signal, das durch den Addierer 325 ausgegeben
wird, mittels des Multiplexers 327 zu dem Eingang des Registers 315 übertragen,
so dass der TBi-Wert um 1 erhöht wird;
die Steuerlogikeinheit 381 überträgt dann die Inhalte des Registers 315 (erhöhter TBi-Wert)
zu dem Eingang des Zwischenspeicherblocks 312. Das Signal,
das zu dem Zwischenspeicherblock 312 eingegeben wird, wird
dann zu dem Ausgang desselben übertragen,
um zu dem anfordernden Agenten geliefert zu werden.
-
Die
Systemzeit, die durch den Zwischenspeicherblock 312 ausgegeben
wird, wenn der TBi-Wert fest ist, wird somit auf jede Leseanforderung
hin um 1 erhöht.
Dies ermöglicht,
dass die Systemzeit niemals angehalten wird (streng monoton); zudem
verhindert das unitäre
Inkrement das Risiko, dass der TBi-Wert nachfolgend (nach einer
Synchronisationsoperation) geringer als der Wert ist, der in einem
vorhergehenden Moment ausgegeben wird. Alternativ wird der TBi-Wert
um einen unterschiedlichen Wert (allgemein um wenige Einheiten,
um das Risiko eines Aufweisens einer Systemzeit zu vermeiden, die
sich nicht erhöht)
erhöht
oder ein Lesen der Systemzeit wird verhindert, wenn der TBi-Wert
fest ist, etc.; die vorliegende Erfindung kann jedoch auch mit der
Ausgabe einer Systemzeit implementiert sein, die immer gleich dem
TBi-Wert ist.
-
Um
möglichen
und spezifischen Anforderungen zu genügen, kann ein Fachmann auf
dem Gebiet natürlich
auf das oben beschriebene Mehrprozessor-Verarbeitungssystem viele
Modifikationen und Variationen anwenden, von denen jedoch alle innerhalb
des Schutzbereichs der Erfindung eingeschlossen sind, wie es durch
die folgenden Ansprüche
definiert ist.