-
TECHNISCHES GEBIET
-
Diese
Erfindung betrifft hochschnelle Punkt-zu-Punkt-Kopplungsstruktur-Links,
insbesondere das Routing in einer Punkt-zu-Punkt-Kopplungsarchitektur.
-
STAND DER TECHNIK
-
Computer
sind heute nicht mehr wie früher einfache arithmetische
Rechner, sondern sie haben sich zu vielseitigen Medienzentren für
eine beliebige Anzahl von Media- und Nicht-Media-Anwendungen entwickelt.
Infolgedessen enthalten Computersysteme oft eine beliebige Anzahl
von Peripherie- oder Eingabe-/Ausgabegeräten (I/O-Input/Output).
Des Weiteren wurde durch Fortschritte im Halbleiterprozess- und
Computerdesign ermöglicht, dass Computersysteme mehr Transistoren
und mehr Verarbeitungsleistung auf einzelnen physischen Prozessoren liefern,
während auch mehrere physische Prozessoren in einem System
vorhanden sein können. Bisher wurden diese Prozessoren
und andere Komponenten nur bei ausgeschaltetem System dem Computer hinzugefügt,
damit der Computer die neuen Komponenten richtig initialisieren
und behandeln konnte.
-
In
neueren Entwicklungen haben Designer jedoch Benutzern die Fähigkeit
gegeben, Komponenten/Geräte während der Laufzeit
des Computers hinzuzufügen oder zu entfernen. Diese Fähigkeit
wird oft als „Hot-Add” oder „Hot-Removal” eines
Gerätes bzw. einer Komponente bezeichnet. Hot-Add und Hot-Removal
sind allerdings nicht auf das physische Hinzufügen oder
Entfernen von Komponenten zu/von einem System begrenzt. Softwaredesigner,
wie Designer von Betriebssystemen (OS-Designer), haben Hot-Add oder
Hot-Removal auch aus Sicht der Software unterstützt. In
anderen Worten: Ein während der Laufzeit entferntes Gerät
kann weiterhin physisch vorhanden, heruntergefahren, von der Software
nicht erkennbar, virtuell entfernt oder eine Kombination davon sein.
-
Als
logische Konsequenz der Entwicklung von integrierten Schaltungen
und deren Verarbeitungsleistung wurden auch die Kopplungsstrukturen zwischen
den Komponenten weiterentwickelt, um eine ausreichende Bandbreite
für die Hochleistungskomponenten bereitzustellen. Eine
Art von Kopplungsarchitektur weist eine kohärente linkbasierte
Architektur auf. Die Komponenten in der Architektur können
zum Beispiel unter Verwendung von Punkt-zu-Punkt-Links gekoppelt
sein, wobei die Komponenten/Agenten als Knoten für das
Routing von Nachrichten untereinander angesehen werden.
-
Wenn
nach dem jetzigen Stand der Technik eine Komponente, ein Agent und/oder
ein Knoten bei dieser Art von Kopplungsarchitektur während
der Laufzeit hinzugefügt oder entfernt wird, hält
das gesamte System an, damit die Routing-Informationen aktualisiert
werden können, um die während der Laufzeit hinzugefügten
oder entfernten Komponenten entsprechend einzubinden oder deren
Zuweisung aufzuheben. Dieses Anhalten bzw. dieser Ruhezustand führt
oft dazu, dass alle aktuellen Nachrichten geräumt werden,
da neue Routing-Informationen in Bezug auf die Nachrichten Routing-Fehler,
ein Anhalten oder einen Ruhezustand des Systems und ein Aktualisieren
der Routing-Tabellen durch eine externe Software oder Firmware,
wie Basic Input Output Software (BIOS), verursachen können.
Man kann sich leicht vorstellen, dass dieser Ruhezustandsprozess
für das Hinzufügen oder Entfernen eines Agenten
potenziell teuer sein könnte, was eine potenziell langsamere
Endbenutzer-Erfahrung zur Folge hat.
-
KURZE BESCHREIBUNG DER ZEICHNUNGEN
-
Die
vorliegende Erfindung wird exemplarisch und in keiner Weise einschränkend
in den Figuren der begleitenden Zeichnungen dargestellt.
-
1 zeigt
eine Ausführungsform einer Protokollarchitektur.
-
2 zeigt
eine Ausführungsform eines Systems, das mehrere Prozessoren
enthält, die unter Verwendung einer Punkt-zu-Punkt-Kopplungsstruktur
an einen Chipsatz gekoppelt sind.
-
3 zeigt
eine Ausführungsform eines Blockdiagramms für
eine bidirektionale Kopplungsarchitektur, die eine mehrschichtige
Eingabe/Ausgabe-(I/O)-Stapelstruktur verwendet.
-
4 zeigt
eine Ausführungsform von mehreren Agenten mit der notwendigen
Logik zum Halten von Tabellen, die mit mehreren Anschlüssen
verbundene Zieleinträge enthalten.
-
5 zeigt
eine Ausführungsform eines Protokolls/Ablaufdiagramms für
ein Hot-Removal eines Agenten.
-
6 zeigt
eine Ausführungsform eines Protokolls/Ablaufdiagramms für
die Ausführung von Rückführzyklen zur
Deaktivierung der Anschlüsse für Zielagenten.
-
7 zeigt
eine Ausführungsform eines Protokolls/Ablaufdiagramms für
eine Hot-Addition eines Agenten.
-
DETAILLIERTE BESCHREIBUNG DER ERFINDUNG
-
In
der folgenden Beschreibung werden zahlreiche spezifische Details
erläutert, wie Beispiele von bestimmten Kopplungsarchitekturen,
bestimmten Nachrichten, bestimmten Routing-Tabellen-Implementierungen,
bestimmten Kopplungsarchitekturschichten etc., um ein gründliches
Verständnis der vorliegenden Erfindung zu vermitteln. Für
fachkundige Personen ist es jedoch offensichtlich, dass die Erfindung
auch ohne einige dieser spezifischen Details realisierbar ist. In
anderen Fällen werden aus dem Stand der Technik bekannte
Komponenten und Verfahren, wie Architektur-Details/Logik von bestimmten Kopplungsstrukturen,
bestimmte nicht relevante Nachrichten und Protokolle, bestimmte
Betriebsdetails der Prozessoren und Cache-Speicher etc., nicht ausführlich
beschrieben, um eine unnötige Ablenkung von der vorliegenden
Erfindung zu vermeiden.
-
Das
Verfahren und die Vorrichtung, die hier beschrieben werden, stellen
Unterstützung für dynamische Modifizierungen an
den Routing-Informationen ohne Ruhezustand bereit. Insbesondere
wird die dynamische Modifizierung der Routing-Informationen primär
in Bezug auf eine illustrative cache-kohärente linkbasierte
Kopplungsarchitektur besprochen, die unten ausführlicher
beschrieben ist. Die Verfahren und die Vorrichtung für
die Modifizierung der Routing-Informationen ohne Kohärenz
in einer Kopplungsarchitektur sind jedoch nicht darauf beschränkt, sondern
können mit jeder bekannten Kopplungsarchitektur verwirklicht
werden.
-
Ausführungsform einer illustrativen
Kopplungsarchitektur
-
1 zeigt
eine Ausführungsform einer vereinfachten High-Level-Protokollarchitektur.
Bei einer Ausführungsform sorgt die Protokollarchitektur
für die Aufrechterhaltung der Datenkonsistenz zwischen den
Daten in den Cache-Speichern innerhalb der Architektur bei normalen
Transaktionen sowie auch bei in Konflikt stehenden Anfragen. Weiter
stellt die Protokollarchitektur bei einer Ausführungsform
auch Weiterleitungsfortschritt für jede Anfrage bereit,
so dass jede Anfrage erledigt und rückgeordnet/fertig gestellt
wird.
-
Eine
Protokollarchitektur kann eine beliebige Anzahl von Knoten oder
Agenten umfassen. Bei einer Ausführungsform umfasst ein
Knoten einen Prozessor, der mit einem internen Cache-Speicher, einem
externen Cache-Speicher und/oder einem externen Speicher verbunden
ist. Ein Knoten oder Agent kann sich jedoch auf eine beliebige Einheit oder
eine Kombination davon in einer Kopplungsarchitektur beziehen, wie
z. B. einen Prozessor, einen Memory-Controller-Hub und einen I/O-Hub,
einen generischen Controller-Hub, eine I/O-Einheit, eine Kollektion
von I/O-Einheiten oder jede andere Einheit/Komponente, die zum Speicherzugriff
fähig ist. Bei einer weiteren Ausführungsform
ist ein Knoten ein Elektroniksystem (z. B. ein Computersystem, mobiles
Gerät), das mit anderen Elektroniksystemen gekoppelt ist.
Es können auch andere Arten von Knotenkonfigurationen verwendet
werden.
-
Wie
gezeigt, enthält die Architektur 100 Cache-Knoten/Agenten 105–106 und
Home-Agenten 110–112. Bei einer Ausführungsform
schützen die Home-Agenten 110–112 die
Speicherstellen, die endgültige Repositorien eines kohärenten
Speicherplatzes sind. Das bedeutet, dass Agent 110 ein
Home-Agent ist und für mehrere physische Originalspeicherstellen
für die Daten eines kohärenten Speicherplatzes
zuständig ist. Home-Agenten 110–112 können
jede Kombination der folgenden Aufgaben ausführen, u. a.:
Verfolgung von Cache-Zustandsübergangen der Cache-Agenten 105–106,
Handhabung von Konflikten unter Cache-Agenten 105–106,
Bereitstellen einer Schnittstelle zum Speicher, Bereitstellen von
Daten und/oder Verantwortlichkeit sowie alle anderen für
Home-Agenten bekannten Aufgaben.
-
Bei
einer Ausführungsform umfassen die Cache-Agenten 105–106 Agenten,
die mit den Cache-Speichern verbunden sind, wie Prozessoren, die Cache-Speicher
und Cache-I/O-Proxy-Einheiten enthalten. Die Cache-Agenten 105–106 können
jede Kombination der folgenden Aufgaben ausführen und auch
andere Aufgaben, wie das Ausführen von Lese- und Schreibanfragen
in den kohärenten Speicherplatz, Halten von Cache-Kopien
der Daten aus dem kohärenten Speicherplatz und Zustellen
der Cache-Kopien an andere Peer-Chache-Agenten. Ein Cache-Agent
oder Knoten kann auch als Peer-Agent/Knoten in Bezug auf einen anderen
Cache-Agenten bezeichnet werden. Auch wenn nicht spezifisch in 1 dargestellt,
kann die Protokollarchitektur auch Nicht-Cache-Agenten enthalten,
wie einen Input/Output-(I/O)-Hub, die teilnehmen oder Transaktionen
im Auftrag von I/O-Einheiten beobachten.
-
Bei
einer Ausführungsform halten die Cache-Agenten 105–106 und
Home-Agenten 110–112 die Datenkonsistenz
aufrecht und liefern den Weiterleitungsfortschritt durch den Austausch
von Nachrichten über die Netzwerkstruktur 101.
Bei einer Ausführungsform ermöglicht die Struktur 101 den
Transport von Nachrichten von einem Agenten/Knoten zu einem anderen
Agenten/Knoten durch ein Punkt-zu-Punkt-Kopplungsnetzwerk. Es wird oft
erwähnt, dass 1 die zusammengefasste Ansicht des
zugrundeliegenden Netzwerkes eines Cache-Kohärenzprotokolls
zeigt.
-
Bei
einer Ausführungsform kann die Kopplungsarchitektur
100 eine
beliebige Kombination der neuen Merkmale enthalten, die in den folgenden gleichzeitig
anhängigen Anmeldungen beschrieben sind. Zum Beispiel wird
im
US-Patent Nummer 6.922.756 unter
dem Titel „Forward State for Use in Cache Coherency in
a Multi-Node System” die Nutzung eines Cache-Kohärenz-Weiterleitungszustands (F-State)
beschrieben. Des Weiteren werden Beispiele für Kohärenzprotokolle
in verschiedenen Situationen besprochen in Anmeldenummer 10/833.963 (Registernummer
P15925), Anmeldetag 27. April 2004, Titel „A Two-Hop Cache
Coherency Protocol”, Amneldenummer 10/833.965 (Registernummer P18890),
Anmeldetag 27. April 2004, Titel „A Messaging Protocol”,
Anmeldenummer 10/833.977 (Registernummer P18891), Anmeldetag 27.
April 2004, Titel „A Cache Coherence Protocol” Anmeldenummer
11/330.977 (Registernummer P22376), Anmeldetag 11. Januar 2006,
Titel „A Two-Hop Source Snoop Based Cache Coherence Protocol” und
Anmeldenummer 11/331.301 (Registernummer P23106), Anmeldetag 11.
Januar 2006, Titel „A Two-Hop Source Snoop Based Messaging
Protocol”.
-
Weitere
Beispiele sind Anmeldenummer 10/325.427 (Registernummer P13923),
Anmeldetag 19. Dezember 2002, Titel „Speculative Distributed Conflict
Resolution for a Cache Coherency Protocol”, Anmeldenummer
10/326,234 (Registernummer P13984), Anmeldetag 19. Dezember 2002,
Titel „Hierarchical Directories for Cache Coherency in
a Multiprocessor System”, Anmeldenummer 10/324.711 (Registernummer
P13985), Anmeldetag 19. Dezember 2002, Titel „Hierarchical
Virtual Model of a Cache Hierarchy in a Multiprocessor System”,
Anmeldenummer 10/326.232 (Registernummer P13986), Anmeldetag 19.
Dezember 2002, Titel „Non-Speculative Distributed Conflict
Resolution for a Cache Coherency Protocol”.
-
Die
in den oben genannten gleichzeitig anhängigen Anmeldungen
beschriebenen Merkmale können in die hier beschriebenen
Ausführungsformen eingebunden sein, jedoch die hier beschrieben Ausführungsformen
sind nicht in dieser Hinsicht beschränkt, da sie weitere
Merkmale umfassen oder auch potenziell keine der oben beschriebenen
Merkmale enthalten können.
-
2 zeigt
eine Ausführungsform eines Systems, das mehrere Prozessoren
enthält, die unter Verwendung einer Punkt-zu-Punkt-Kopplungsstruktur
an einen Chipsatz gekoppelt sind. Das System nach 2 kann
auch mehrere Prozessoren enthalten, von denen nur zwei, die Prozessoren 205 und 210,
zur Verdeutlichung gezeigt sind. Wie gezeigt, enthalten die Prozessoren 205, 210 je
zwei Verarbeitungselemente 206–207, 211–212;
obwohl jede beliebige Anzahl von Verarbeitungselementen in den Prozessoren 205, 210 enthalten
sein kann.
-
Ein
Verarbeitungselement bezieht sich auf eine Thread-Einheit, eine
Prozess-Einheit, einen Kontext, einen logischen Prozessor, einen
Hardware-Thread, einen Kern und/oder jedes andere Element, das zum
Halten eines Zustands für einen Prozessor fähig
ist, wie z. B. einen Ausführungszustand oder Architekturzustand.
In anderen Worten, in einer Ausführungsform bezieht sich
ein Verarbeitungselement auf jede Hardware, die fähig ist,
unabhängig mit einem Code verbunden zu sein, wie einen
Software-Thread, ein Betriebssystem, eine Anwendung oder einen anderen
Code. Ein physischer Prozessor bezieht sich zum Beispiel meistens
auf eine integrierte Schaltung, die möglicherweise eine
Anzahl von anderen Verarbeitungselementen enthält, wie
Kerne oder Hardware-Threads.
-
Ein
Kern bezieht sich oft auf Logik in einer integrierten Schaltung,
die fähig ist, einen unabhängigen Architekturzustand
aufrechtzuerhalten, wobei jeder unabhängig aufrechterhaltene
Architekturzustand mit mindestens einigen dedizierten Ausführungsressourcen
verbunden ist. Im Gegensatz zu Kernen bezieht sich ein Hardware-Thread,
der auch als physischer Thread bezeichnet werden kann, meistens
auf eine beliebige Logik in einer integrierten Schaltung, die fähig
ist, einen unabhängigen Architekturzustand aufrechtzuerhalten,
wobei die unabhängig aufrechterhaltenen Architekturzustände
den Zugang zu den Ausführungsressourcen teilen. Somit können
in einer Ausführungsform mehrere Software-Threads, wie
z. B. mehrere Replikationen einer Einzel-Thread-Anwendung, gleichzeitig
auf mehreren Verarbeitungselementen ausgeführt werden,
welche eine Kombination aus allen vorher erwähnten Verarbeitungselementen,
wie Kerne oder Hardware-Threads, einschließen können.
-
Bei
den Prozessoren 205, 210 sind des Weiteren Ressourcen 208, 213 dargestellt,
welche normalerweise Register, Einheiten, Logik, Firmware, Speicher
und andere Ressourcen zum Ausführen von Code oder Koppeln
mit anderen Komponenten umfassen. Wie oben erwähnt, können
bestimmte Ressourcen 110 teilweise oder vollständig
den Verarbeitungselementen zugeteilt sein, während andere unter
den Verarbeitungselementen geteilt werden. Zum Beispiel können
kleinere Ressourcen, wie Befehlszähler (Instruction-Pointer,
IP) und Umbenennungslogik, für physische Threads repliziert
werden. Bestimmte Ressourcen, wie Neuordnungspuffer in einer Neuordnungs-/Rückordnungseinheit,
Befehlübersetzungspuffer (Instruction Lookaside Translation Buffer,
ILTB), Load/Store-Puffer und Warteschlangen können durch
Partitionierung untereinander geteilt werden. Weitere Ressourcen,
wie interne Allzweckregister, Seitentabellen-Basisregister, Low-Level-Daten-Cache,
ein Daten-TLB, Ausführungseinheit(en) und eine Out-Of-Order-Einheit
werden potenziell unter den Threads vollständig geteilt.
Im Gegensatz dazu können Kerne dedizierte Ausführungsressourcen
haben, während sie zumindest einen Teil eines High-Level-Cache-Speichers,
wie einen Level-2-Cache-Speicher (L2) teilen.
-
Bei
einer Ausführungsform umfassen die Ressourcen 208, 213 eine
Prozessor-Pipeline, die eine beliebige Anzahl von Pipeline-Stufen
enthalten kann. Häufige Beispiele für Pipeline-Stufen
sind u. a. Instruction-Pointer-Stufe, Fetch-Stufe, Decode-Stufe und
Drive-Stufen sowie Allocate-Stufe, Renaming-Stufe, Queue-Stufe,
Reorder-Stufe, Schedule-Stufe, Dispatch-Stufe, Execution-Stufe,
Memory-Access-Stufe und Register-Access-Stufe. Diese Liste von Stufen
ist eine exemplarische, keinesfalls vollständige Liste
von Prozessor-Pipeline-Stufen, da viele bekannte Pipeline-Stufen
in dem Prozessor 100 enthalten sein können.
-
Jeder
Prozessor 205, 210 kann auch einen Memory-Controller
oder einen lokalen Memory-Controller-Hub (MCH) für die
Kopplung mit dem Speicher 209 bzw. 214 enthalten.
Speicher (Memories) 209, 214 umfassen jede Speichereinheit,
wie Random-Access-Memory (RAM), Cache-Speicher, Flash-Speicher oder
andere Speichereinheiten. Bei einer Ausführungsform umfasst
der Speicher 214 einen High-Level-Cache-Speicher, während
die Ressourcen 213 einen Low-Level-Cache-Speicher umfassen. Bei
einer weiteren Ausführungsform umfasst der Speicher 209 einen
dynamischen Random-Access-Speicher (DRAM), der mit einem Prozessor 205 verbunden
ist, welcher einen Cache-Speicher zum Speichern der Daten vom DRAM 209 umfasst.
Dieses ist eine illustrative Ausführungsform, da die Speicher 209, 214 potenziell
jede Art von Memory umfassen können.
-
Bei
einer Ausführungsform, bei der die Speicher 209, 214 Cache-Speicher
umfassen, die entweder innerhalb oder wie gezeigt außerhalb
der Prozessoren 205, 210 enthalten sind, können
die Prozessoren 205, 210 ein Home-Knoten oder
auch ein Peer-Cache-Knoten sein. Wenn beispielsweise eine Transaktion
auf eine Speicherstelle innerhalb des Speichers 209 verweist,
muss der für den Speicher 209 zuständige
Agent, d. h. der Prozessor 205 ein Home-Agent in Bezug
zur Transaktion und Speicherstelle sein.
-
Ebenso
wenn eine Transaktion auf eine andere Speicherstelle verweist, wie
eine Stelle in einem Speicher 214, muss der Prozessor 205 ein
Peer-Cache-Agent sein.
-
Wie
gezeigt, koppeln die Punkt-zu-Punkt-Links 220–224 Komponenten
auf Punkt-zu-Punkt-Weise zusammen. Bei einer Ausführungsform
umfass jeder physische Link 220–224 eine bidirektionale
Differenzsignal-Kopplungsstruktur, wie z. B. die mit einer physischen
Schicht verbundenen physischen Links, die unten in Bezug auf 3 besprochen
werden. Infolgedessen sind Prozessoren 205, 210 und
Chipsatz 230 zur direkten Kommunikation miteinander fähig.
-
Der
Chipsatz 230 ist oft eine generische Referenz zu mehreren
integrierten Schaltungen, wie ein Memory-Controller-Hub gekoppelt
mit einem Input/Output-(I/O)-Hub. Jedoch bei einer Ausführungsform,
bei der die Agenten jeweils eine Version eines Memory-Controller-Hub
für die Kopplung an den Speicher enthalten, bezieht sich
der Chipsatz 230 auf einen I/O-Hub oder anderen Controller-Hub.
Bei einer Ausführungsform ist der Chipsatz 230,
wie oben besprochen, ein Nicht-Cache-Agent für die Teilnahme
oder Beobachtung der Transaktionen. Der Chipsatz 230 ist
jedoch in dieser Hinsicht nicht eingeschränkt, da der Chipsatz 230 bei
anderen Ausführungsformen ein Cache-Agent mit Cache-Speicher und/oder
ein Home-Agent mit einem Speicher, der Originalspeicherstellen-Repositorien
für Daten enthält, sein kann.
-
Wie
dargestellt, koppelt der Chipsatz 230 auch mit mehreren
Kopplungsstrukturen und I/O-Geräten, wie Peripheral Component
Interconnect(PCI)- oder PCI Express(PCI-E)-Geräte 261,
Integrated Device Electronics(IDE)- oder Advanced Transfer Attachment
(ATA)-Geräte 262, Universal Serial Bus(USB)-Geräte 263,
Local Area Network(LAN)- oder Wireless LAN(WLAN)-Geräte 264,
Audio-Geräte 265 und andere I/O-Geräte 266,
welche auch eine andere Kopplungsarchitektur für die Kopplung
der hier beschriebenen I/O-Geräte enthalten können.
-
Unter
Bezugnahme auf 3 wird eine Ausführungsform
eines Blockdiagramms für eine bidirektionale Kopplungsarchitektur
eines mehrschichtigen Kopplungsstrukturstapels dargestellt. Die
Bezugnahme auf die Schichten der 3, wie eine
physische Schicht 302, umfasst die Erörterung
einer generischen Schicht, die in verschiedenen Agenten verwirklicht
werden kann, wie eine physische Schicht 302a und eine physische
Schicht 302b. Wie abgebildet ist der Kopplungsstrukturstapel
in fünf Schichten partitioniert, wovon eine oder mehrere
basierend auf einer Designimplementierung potenziell optional sein können.
Die Routing-Schicht 304 ist beispielsweise bei einer Ausführungsform
in die Funktonalität der Link-Schicht 303 eingebettet;
somit ist die Routing-Schicht gemäß einer Ausführungsform
keine separate und gesonderte Schicht.
-
Bei
einer Ausführungsform ist die physische Schicht 302 für
die elektrische Übertragung von Informationen auf einem
physischen Medium zuständig. Es wird z. B. eine physischer
Punkt-zu-Punkt-Link zwischen den Linkschicht-Einheiten 303a und 303b verwendet.
Als illustratives Beispiel enthält der physische Link ein
Differenzsignalschema, das ein bidirektionales Differenzsignalpaar 351 und 352 umfasst. Hier
kann die physische Schicht potenziell logisch in einen elektrischen
Unterblock und einen logischen Unterblock aufgeteilt sein, so dass
die physische Schicht den Rest des Stapels von der elektrischen Datenübertragung
trennt und mit der Link-Schicht kommuniziert 303.
-
Bei
einer Ausführungsform trennt die Link-Schicht 303 die
physische Schicht 302 von den oberen Schichten des Stapels
und bietet link-bezogene Dienste, wie eine zuverlässige
Datenübertragung und Datenflusssteuerung zwischen verbundenen
Agenten/Einheiten und Virtualisierung eines physischen Kanals/einer
physischen Schnittstelle in mehrere virtuelle Kanäle und
Nachrichtenklassen. Hier können die virtuellen Kanäle
als mehrere virtuelle Netzwerke zur Verwendung durch die oberen Schichten
des Stapels angesehen werden. Die Protokollschicht 306 verlasst
sich beispielsweise potenziell auf die von der Link-Schicht 303 bereitgestellte Trennung,
um eine Protokollnachricht in eine Nachrichtenklasse und deshalb
in einen oder mehrere virtuelle Kanäle umzusetzen.
-
Bei
einer Ausführungsform bietet die Routing-Schicht 304 ein
flexibles Verfahren für das Routing der Pakete von einer
Quelle an ein Ziel. Wie oben erwähnt, können die
Routing-Schichten 304 bei extrem simplen Topologien nicht
explizit sondern in die Funktionalität der Link-Schicht 303 eingebunden sein.
Die Routing-Schicht 304 kann sich beispielsweise auf die
Trennung der Link-Schicht 303 verlassen, um ein <Anschluss, virtuelles
Netzwerk>-Paar zum
Routing eines Pakets anzugeben.
-
Bei
einer Ausführungsform enthält die Routing-Schicht 304 oder
die durch ihre Funktionalität damit verbundene Logik Routing-Informationen,
wie z. B. eine Routing-Tabelle. Eine Routing-Tabelle kann beispielsweise
einen Eintrag für ein Ziel in einer Kopplungsarchitektur
enthalten. In diesem Fall kann der Eintrag jede Art von Informationen
enthalten, wie Anschluss oder Anschlüsse zum Routing eines
mit einem Zielagenten verbundenen Pakets. Routing-Tabellen und die
damit verbundenen Informationen werden unten ausführlicher
besprochen.
-
Bei
einer Ausführungsform bietet die Transportschicht 305 von
Ende-zu-Ende zuverlässige Übertragungsdienste. Ähnlich
wie die Routing-Schicht 304 ist auch die Transportschicht 305 basierend
auf der Designimplementierung optional. Die Transportschicht 305 verlasst
sich beispielsweise auf die Dienste der Routing-Schicht 304,
um eine zuverlässige Übertragungsunterstützung
für die Protokollschicht 306 bereitzustellen.
Innerhalb einer Kopplungsarchitektur enthält die Transportschicht 305 bei einer
Ausführungsform einen Teilsatz von Komponenten. Infolgedessen
definiert dieser Teilsatz von Komponenten Unterfelder von Paketen
in Bezug auf die Transportschicht 305, während
andere Komponenten potenziell keine solche Unterfelder definieren.
-
Bei
einer Ausführungsform implementiert die Protokollschicht 306 ein
High-Level-Kommunikationsprotokoll zwischen Knoten/Agenten, wie
Cache-Kohärenz, Sortierung, Peer-to-Peer-Kommunikation,
Interrupt-Zustellung etc. In anderen Worten, die Protokollschicht 306 definiert
entsprechend zulässige Nachrichten, Anfragen, Antworten,
Phasen, Kohärenzzustände etc. für Knoten
oder Agenten, wie Home-Knoten, Peer-Knoten, Cache-Knoten und Nicht-Cache-Knoten.
Beispiele für Nachrichten, wie Home-Knoten-Nachrichten,
Snoop-Nachrichten, Antwort-Nachrichten etc. werden unten besprochen.
-
Die
Besprechung von Schichten und der damit verbundenen Logik kann auf
beliebige Weise gekoppelt werden. Es kann z. B. gesagt werden, dass die
Protokoll-Logik mit der physischen Schicht gekoppelt ist, d. h.
die sendende oder empfangende Logik. Wie aus 3 ersichtlich,
kann bei einer Ausführungsform die Protokoll-Logik nicht
direkt an die Logik der physischen Schicht gekoppelt sein, sondern stattdessen
durch die Logik einer anderen Schicht. Des Weiteren ist der Kopplungsstrukturstapel
bei einer Ausführungsform an die Logik der inneren Komponente
gekoppelt, wie z. B. an die Logik der Cache-Steuerung oder des Cache-Speichers,
um entsprechende Cache-Kohärenz-Aktionen einzuleiten.
-
Überblick über eine
Ausführungsform eines MESIF-Protokolls
-
Bei
einer Ausführungsform bietet das einfache Modified Exclusive
Shared Invalid Forward(MESIF)-Protokoll ein einem Snoop-Protokoll ähnliches Protokoll,
jedoch ohne die potenziellen Einschränkungen eines einzelnen
seriellen Busses. Wie ein Snooping-Cache-Protokoll verlasst sich
das MESIF auf Knoten mit Cache-Kopien der Daten, um die Kohärenz
aufrechtzuerhalten. Bei der Verwendung von Punkt-zu-Punkt-Links
statt einem synchronen, zentralen Broadcast entsteht das Problem
einer Zeitverzerrung, d. h., dass Ereignisse aus Sicht verschiedener
Knoten in einer anderen Reihenfolge einzutreten scheinen. Das MESIF-Protokoll
behandelt die Zeitverzerrung beispielsweise durch Erkennung potenzieller
durch die Zeitverzerrung bedingter Fehler und bietet eine Protokoll-
oder Softwarelösung hierzu.
-
Ein
Home-Knoten ist oft mit einer Nicht-Cache-Kopie der Daten verbunden.
Infolgedessen kann ein Home-Knoten an einer Transaktion in Bezug
auf die mit dem Home-Knoten verbundenen Daten teilnehmen. Der Home-Knoten
muss jedoch nicht in einen mit der Transaktion verbundenen „kritischen Pfad” aufgenommen
werden, sondern der Home-Knoten kann in die Transaktion eingreifen,
um Konflikte und Zeitverzerrungsprobleme zu beheben. Aufgrund der
gleichzeitigen Broadcastbasis dieses Schemas erzielt das MESIF bei
einer Ausführungsform eine niedrige Latenzzeit in Verbindung
mit Snooping-Protokollen, während eine cache-fähige
Kopie der Daten erworben wird, in bestimmten Fällen in
der geringstmöglichen Latenzzeit: in einem einzigen Anfrage/Antwort-Roundtrip.
-
Bei
einer Ausführungsform beinhaltet eine einfache Transaktion
in Bezug auf ein MESIF-Protokoll das Broadcasting einer ersten Anfrage
an alle Peer-Knoten sowie an einen Home-Knoten. Wenn eine Kopie
im Zustand E, F oder M-Kohärenzzustand cached ist, wird
sie in die Antwort aufgenommen. Dann wird eine zweite Nachricht
an den Home-Knoten gesendet, um diesen zu informieren, dass die
Anfrage erledigt wurde. Ist die angeforderte Leitung nicht cached,
oder wenn nur S-Zustandskopien existieren, dient die zweite an den
Home-Knoten gesendete Anfrage zur Bestätigung der vorherigen
Anfrage, die inzwischen vom Home-Knoten aus seinem Speicher abgerufen
worden sein kann. In jedem Fall antwortet der Home-Knoten auf die
zweite Anfrage (und potenziell auf die erste, obwohl diese oft auch kombiniert
werden können) zum Zweck des Synchronisierens und Behebens
von Konflikten. Da der Home-Knoten einen oder mehrere Cache-Speicher
enthalten kann, kann er auf die erste Anfrage genau wie jeder andere
Knoten antworten.
-
Bei
einer Ausführungsform werden Konflikte auf eine verteilte
Weise behandelt. Das Zeitverzerrungsproblem erschwert die Erkennung
von Konflikten, da einzelne Anfragen für eine unterschiedlich lange
Zeit verzögert werden können. Ein Konflikt wird jedoch
erkannt, wenn jeder Knoten nach der Erstellung einer Anfrage auf
Konflikte überwacht. Mehrere Knoten können potenziell
einen Konflikt erkennen, doch als Beispiel wird mindestens einer
der Knoten einen Konflikt erkennen. Infolgedessen umfasst eine Antwort
von einem Knoten bei einer Ausführungsform potenziell Konfliktinformationen.
-
Bei
einer Ausführungsform darf ein Knoten, der eine Kopie der
Daten von einer Antwort empfangt, die Daten sofort nach ihrem Empfang
intern verwenden, bewirkt jedoch nicht, dass diese Verwendung der
Daten für den Rest des Systems sichtbar ist, d. h. global
sichtbar, bis der Knoten eine Bestätigung empfangen hat.
Die Bestätigung kann auch Anweisungen enthalten, dass der
anfragende Knoten seine Kopie an einen anderen Knoten weiterleiten muss
und dass der Knoten eventuell aus seinem eigenen Cache-Speicher
geräumt werden muss.
-
Wenn
ein Knoten schließlich auf eine Anfrage von einem anderen
Knoten antwortet, indem er die cached Daten liefert, verzögert
der Knoten bei einer Ausführungsform andere Anfragen, die
er für die gleiche Cache-Leitung empfangt, bis der Knoten
eine Antwort vom Home-Knoten erhält, die bestätigt,
dass der Knoten die Daten weitergeleitet hat; somit wird sichergestellt,
dass alle Knoten die gleiche Reihenfolge der Übertragung
der (potenziell beschreibbaren) Cache-Leitung einhalten.
-
Der
Home-Knoten ist, wie oben beschrieben, ein Repositorium für
uncached Daten, doch der Home-Knoten kann auch einen Prozessor und
einen Cache-Speicher umfassen. Wenn der Home-Knotenprozessor den
Cache-Speicher verfehlt, sendet der Home-Knoten per Broadcast Anfragen
an alle anderen (Peer-)Knoten und der Home-Knoten behandelt die
Anfrage intern genau wie jede andere Anfrage, die für den
Home-Knoten ankommt. Dies ist ein Sonderfall, bei dem der Home-Knoten
nicht explizit Nachrichten an sich selbst (den Home-Knoten) sendet. Wenn
eine externe Anfrage für Daten ankommt, die lokal cached
sind, antwortet der Home-Knoten entsprechend.
-
Das
offen gelegte Nachrichtenprotokoll definiert einen Satz von zulässigen
Nachrichten zwischen Kohärenzagenten (Cache- und Home-Agenten),
Nicht-Cache-Agenten sowie anderen Agenten (Memory-Controller, Prozessoren
etc). Ein Kohärenzprotokoll verwendet die Nachrichten als
Wörter und Grammatik in einem Algorithmus, um einen kohärenten
Gedanken auszudrücken. Dieser Algorithmus ordnet die Anfragen
sinnvoll, behebt Konflikte und beschreibt Interaktionen zwischen
den Cache-Agenten. Obwohl oben ein MESIF-Protokoll beschrieben ist,
ist das MESIF-Cache-Kohärenzprotokoll für die Nutzung
nicht erforderlich. Der Weiterleitungszustand (Forward) kann z.
B. nicht genutzt werden, was die Nutzung des bekannten MESI-Protokolls
zur Folge hat. Des Weiteren beinhaltet die vorstehende Beschreibung
einen exemplarischen Überblick einer Ausführungsform
für ein MESIF-Protokoll. Infolgedessen können
mehrere der oben beschriebenen Komponenten in separaten Ausführungsformen
unterschiedlich sein. Eine nicht unbedingt vollständige exemplarische
Liste potenzieller Nachrichten, die in einem Messaging- und/oder
Kohärenzprotokoll verwendet werden können, ist
unten aufgeführt.
-
Unter
Bezugnahme auf 4 ist eine Ausführungsform
von mehreren Agenten, einschließlich Logik zum Halten der
Tabellen mit Zieleinträgen, die mit mehreren Anschlüssen
verbunden sind, dargestellt. Wie oben erwähnt, können
die Agenten 410, 420, 430, 440, 450,
und 460 (410–460), die auch
als Knoten bezeichnet werden können, jede Art von Agent
oder Knoten sein, wie z. B. ein Prozessor, ein Controller-Hub, ein
I/O-Gerät oder ein anderer bekannter Agent/Knoten.
-
Bei
einer Ausführungsform sind die Agenten 410–460 in
einer linkbasierten kohärenten Kopplungsarchitektur enthalten.
Wie dargestellt, sind die Agenten 410–460 auf
Punkt-zu-Punkt-Weise untereinander gekoppelt, so dass Agent 410 eine
an Agent 450 auf Anschluss 411 gerichtete Nachricht
an Agent 420 sendet, welcher die Nachricht auf Anschluss 421 empfängt
und die Nachricht durch den Anschluss 422 an den Agenten 450 leitet.
Wie unten beschrieben, kann jede andere Zahl von Pfaden zum Agent 450 existieren,
z. B. durch die Agenten 460, 440, und dann 420 bis 450.
Obwohl dynamische Modifizierungen der Routing-Informationen hauptsächlich
in Bezug auf eine Punkt-zu-Punkt-Linkarchitektur besprochen werden,
sind das Verfahren und die Vorrichtungen dieser Erfindung nicht
in dieser Hinsicht beschränkt.
-
Des
Weiteren implementieren bei einer Ausführungsform mindestens
einige der Agenten 410–460 einen Kopplungsstrukturstapel,
wie den oben beschriebenen Kopplungsstrukturstapel. Bei bestimmten
Ausführungsformen, bei denen die Schichten eines Kopplungsstrukturstapels
in die Logik eingebunden sind, können die Grenzen der Schichten
nicht deutlich abgegrenzt sein und zum Teil sogar überlappen.
Wie oben beschrieben, kann z. B. die Logik der Routing-Schicht potenziell
innerhalb implementiert werden oder sie kann die Linkschicht-Logik
teilweise überlappen.
-
Bei
einer Ausführungsform umfasst jeder der Agenten 410–460 Logik,
wie die Logik 415, 425, 435, 445 und 445,
welche die Routing-Informationen enthält. Die Logik 415 enthält
z. B. die Routing-Tabelle 416 für Agent 410.
Normalerweise wenn eine Nachricht, z. B. in Form eines Pakets, gesendet
wird, wird ein Ziel, eine Zielstelle oder ein anderer Bezeichner (Identifier,
ID) referenziert. Infolgedessen enthält die Routing-Tabelle 416 bei
einer Ausführungsform mehrere Einträge, wie die
Einträge 416a–e, die jeweils mit mehreren
Zielstellen- oder Ziel-Agenten/Knoten 420–460 verbunden
sind. Die mehreren Einträge 416a–e bieten
hier Routing-Informationen für Pakete/Nachrichten, die
eine Ziel- oder Zielstellen-ID referenzieren.
-
Angenommen
der Agent 410 empfängt ein Paket vom Agent 430,
das eine Ziel-ID referenziert, welche mit Agent 450 verbunden
ist. Bei einer Ausführungsform ist die Tabelle 416 für
die Zielagenten indexiert, wozu Ziel-IDs oder eine Repräsentation dieser
verwendet werden. Als Resultat wird der Eintrag für den
Agenten 450 bestimmt und ein Anschluss für das
Routing des Pakets wird aus der verbundenen Anschlussliste bestimmt.
Hier wird das Paket durch den Anschluss 411 geleitet. Auf ähnliche
Weise wird beim Empfang der Nachricht beim Agenten 420 eine
Routing-Logik 425 verwendet, um das Paket auf Anschluss 422 an
den Agent 450 zu leiten. Bisher war jeder Zielagent nur
mit einem Anschluss für das Routing verbunden, wie z. B.
Anschluss 411 für Agent 440. Wenn jedoch
der Agent 420 aus dem System entfernt wird, dann würde
ein Ruhezustand genutzt, um den Anschluss für Agent 440 von 411 zu 413 oder 412 zu
aktualisieren, was potenziell einen langwierigen und aufwändigen
Aktualisierungsprozess durch das BIOS oder andere Software zur Folge hat.
-
Deshalb
wird in einer Ausführungsform ein Zieleintrag mit mehreren
Anschlüssen in einer bevorzugten Reihenfolge oder Weise
verbunden. In anderen Worten, ein Routing-Eintrag für einen
Zielagenten kann eine Präferenz unter den verfügbaren
Anschlüssen in einem Agenten für das Routing zum Zielagenten
bereitstellen. Diese Präferenz kann auf einem von mehreren
Faktoren basieren, wie z. B. ob ein Anschluss aktiviert/deaktiviert
ist, ob eine Übertragungszeit mit einem Anschluss zum Zielagenten verbunden
ist, eine Anzahl von Hops oder Zwischenagenten/-knoten von einem
Anschluss zum Zielagenten, eine Anzahl auf einem Anschluss geleiteter
verlorener Pakete oder jeder andere bekannte Routing-Präferenzfaktor.
Weiter kann die Präferenz auf beliebige Weise dargestellt
werden, z. B. als Bitverschlüsselung zur Darstellung, welche
Anschlüsse bevorzugt werden, oder eine einfache geordnete
Liste, bei der ein vor einem anderen Anschluss aufgeführter
Anschluss, basierend auf der Implementierung, eine höhere
oder niedrigere Präferenz bedeutet.
-
Zum
Beispiel ist der Agent 420 mit allen drei Anschlüssen 411–413 des
Agenten 410 im Eintrag 416a verbunden. Hier wird
eine Präferenzliste verwendet, um die Anschlüsse
zu ordnen, d. h. Anschluss 411 hat eine höhere
Präferenz als Anschluss 412, was durch dessen
höhere Stellung in der Liste angezeigt wird. Des Weiteren
hat Anschluss 412 eine höhere Priorität
als Anschluss 413 für den Eintrag 416a.
In verschiedenen Einträgen können jedoch verschiedene
Prioritäten/Präferenzen bestehen, wie im Eintrag 416e,
bei dem der Anschluss 413 die höchste Präferenz
ist. Wenn deshalb eine Nachricht von einem Agenten 410 für
das Routing an den Agenten 420 empfangen wird, wird die
Nachricht in einer Ausführungsform auf dem „bevorzugten” Anschluss,
d. h. dem Anschluss mit der höchsten Priorität 411 basierend
auf der präferenziellen Ordnung der Anschlüsse
im Eintrag 416a geleitet.
-
Weiter
sind bei einer Ausführungsform mehrere Anschlüsse
auch mit Aktivierungsfeldern verbunden. Die Logik 435 im
Agenten 430 enthält zum Beispiel die Routing-Tabelle 436.
Die Routing-Tabelle 436 enthält Einträge 436a–e.
Jeder Eintrag, wie der Eintrag 436a, enthält einen
Ziel-Identifier, d. h. Agent 410 oder eine Repräsentation
davon, die mit mehreren Aktivierungs-/Deaktivierungsfeldern mehrerer Anschlüsse
im Agenten 430 verbunden ist. Hier umfasst der Eintrag 436a den
Anschluss 431 mit der höchsten Priorität
für den Zielagenten 410 und Anschluss 433 ist
aktiviert, während Anschluss 432 deaktiviert ist.
Der Anschluss 432 ist deaktiviert, da er mit keinem anderen
Agenten/Knoten verbindet.
-
Bei
einer Ausführungsform enthalten die Aktivierungs-/Deaktivierungsfelder
einen Bitvektor für das Verbinden mit den Anschlüssen
des Agenten 430, wobei ein gesetztes Bit darstellt, dass
der entsprechende Anschluss aktiviert ist, und ein entferntes Bit
bedeutet, dass der entsprechende Anschluss deaktiviert ist. Wie
dargestellt, kann ein Bitvektor auf die Anschluss-IDs ausgerichtet
sein, um Aktivierungsfelder mit den einzelnen Anschlüssen
in jedem Eintrag zu verbinden. Infolgedessen muss hier für das
Aktualisieren eines Aktivierungsfeldes auf einen aktivierten oder
deaktiviertert Wert ein Bit gesetzt bzw. ein Bit entfernt werden.
Die Verwendung des Begriffes „Aktualisieren” umfasst
jedoch nicht unbedingt eine Veränderung des Zustands oder
Wertes. Wenn ein Anschluss z. B. in einem Eintrag bereits deaktiviert
ist, beinhaltet ein Aktualisieren des Anschlusses auf einen deaktivierten
Wert im Eintrag eventuell keinerlei Handlung, da das Bit bereits
entfernt ist. Des Weiteren sind Aktivierungsfelder nicht auf das
Setzen oder Entfernen eines Bits begrenzt. Bei einer Ausführungsform
kann jede bekannte Hardware- oder Logikimplementierung für
das Aktivieren oder Deaktivieren eines Anschlusses oder einer anderen
Logik verwendet werden.
-
Das
Deaktivieren eines Anschlusses kann auf vielen verschiedenen Gründen
erfolgen. Wie gezeigt, ist Anschluss 432 beispielsweise
deaktiviert, weil er physisch getrennt bzw. nicht angeschlossen ist,
d. h. kein Agent oder Gerät ist an den Anschluss 432 gekoppelt.
In einer Ausführungsform wird ein Anschluss jedoch auch
deaktiviert als Reaktion auf den Empfang einer Anschluss-Deaktivieren-Nachricht
auf dem Anschluss. Bei einer anderen Ausführungsform wird
ein Anschluss als Reaktion auf den Empfang einer Rückführzyklus-Nachricht
deaktiviert. Anschluss-Deaktivieren- und Rückführzyklus-Nachrichten
werden unten unter Bezugnahme auf 5 bzw. 7 ausführlicher
besprochen. Infolgedessen, auch wenn nicht spezifisch dargestellt,
kann ein Anschluss in einem Routing-Eintrag für einen Zielagenten
aktiviert sein und in einem anderen Routing-Eintrag für
einen anderen Zielagenten deaktiviert sein.
-
In 5 ist
eine Ausführungsform eines Protokoll-/Blockdiagramms für
das Hot-Removal eines Agenten dargestellt. 5–7 zeigen
Protokolle zwischen einem Teilsatz von Agenten, die in der Kopplungsstruktur
von 4 dargestellt sind. Des Weiteren zeigen die 5–7 eine
bestimmte Ausführungsform der Protokollabläufe
auf im Wesentlichen serielle Weise mit bestimmten illustrativen Nachrichten.
Die Nachrichten können jedoch auch in einer anderen Reihenfolge
generiert/übertragen werden, und, wie oben erwähnt,
entsprechend der potenziellen Zeitverzerrung in der Kopplungsarchitektur
in einer vollkommen anderen Reihenfolge empfangen werden. Des Weiteren
können diese Nachrichten, Abläufe und Blöcke
seriell und auch parallel ausgeführt werden.
-
In
Block 405 wird ein Hot-Removal-Ereignis für den
Agenten 430 erkannt. Bei einer Ausführungsform
umfasst ein Hot-Removal-Ereignis das physische Entfernen eines Agenten
oder Gerätes vom System. Wenn z. B. der Agent 430 einen
USB-Speicherschlüssel umfasst, kann der Speicherschlüssel vom
System abgezogen werden. Dieses Ausstecken während der
Laufzeit erfolgt auf eine von zwei Weisen, die vom Betriebssystem
oft als sicheres und unsicheres Entfernen bezeichnet werden. Bei
einem sicheren Entfernen wird die Software auf das bevorstehende
Entfernen hingewiesen, d. h. ein Benutzer wählt, dass das
Gerät entfernt werden soll, und nachdem die Software ihre
Verbindung zum Gerät getrennt hat, kann das Gerät
auf sichere Weise entfernt werden. Im anderen Fall wird das Gerät
physisch entfernt und es wird der Software überlassen,
das Gerät später zu trennen. Deshalb kann ein
Hot-Removal-Ereignis ein softwarebezogenes Ereignis oder ein physisches
Entfernen-Ereignis umfassen. Als Beispiel für ein softwarebezogenes
Ereignis in einer kohärenten Architektur, die einen Kopplungsstrukturstapel
verwendet, kann eine High-Level-Schicht, wie eine Anwendungsschicht,
das softwarebezogene Ereignis nach unten durch den Stapel senden,
um das Hot-Removal-Ereignis anzuzeigen.
-
Ein
physisches Entfernen eines Agenten ist jedoch potenziell nicht das
einzige Hot-Removal eines Gerätes. Bei einer Ausführungsform
umfasst das Hot-Removal eines Agenten das Entfernen, Deaktivieren,
Herunterfahren oder einfach das Ausblenden eines Gerätes
vom Rest des Systems, entweder durch die Verwendung von Hardware,
Software, Firmware oder eine Kombination davon. Somit kann in einem
ersten illustrativen Beispiel ein Hot-Removal-Ereignis eintreten,
wenn ein Agent in einen Energiesparzustand (Low-Power-Zustand) wechseln
will. Basierend auf der Designimplementierung kann ein Hot-Removal
eines Agenten auf jede Weise, die die oben erwähnten Beispiele
oder andere bekannte Verfahren zum Entfernen eines Gerätes
aus Sicht eines Systems oder Betriebssystems umfasst, definiert werden.
-
Als
Reaktion auf das Erkennen eines Hot-Removal-Ereignisses 505 geniert
der Agent 430 eine Anschluss-Deaktivieren-Nachricht 451.
Eine Anschluss-Deaktivieren-Nachricht enthält eine beliebige
Nachricht, die einen empfangenden Agenten informiert, dass ein Anschluss
deaktiviert werden soll. Bei einer Ausführungsform umfasst
die Nachricht einen Anschluss-Identifier, um anzuzeigen, welcher Anschluss
deaktiviert werden soll. Andernfalls zeigt die Nachricht einfach
an, dass ein Anschluss deaktiviert werden soll und dass der Anschluss,
auf dem der empfangende Agent die Nachricht erhält, der
zu deaktivierende Anschluss ist.
-
Bei
einer Ausführungsform wird die Nachricht unter Verwendung
von Logik generiert, z. B. einer mit einer Protokollschicht verbundenen
Protokolllogik. Hier kann potenziell durch Regeln spezifiziert werden,
dass die Nachricht 451 als Reaktion auf das Erkennen eines
definierten Entfernungsereignisses generiert werden soll. Bei einer
Ausführungsform wird die Anschluss-Deaktivieren-Nachricht 451 an die
benachbarten Agenten 410, 440 gesendet. In einem
Kopplungsstrukturstapel wird die Nachricht z. B. nach ihrer Generierung
unter Verwendung von Logik gesendet, z. B. der Logik einer physischen
Schicht.
-
In 4 ist
zu sehen, dass der Eintrag 436a der Tabelle 436,
welche in der Logik 435 des Agenten 430 enthalten
ist, anzeigt, dass die an den Zielagenten 410 zu leitende
Nachricht vorzugsweise an den Anschluss 431, d. h. den
Anschluss mit der höchsten Präferenz für
den Zielagenten 410, weitergeleitet werden soll. Auf ähnliche
Weise zeigt der Eintrag 436c, dass die Nachricht an den
Agenten 440 auf Anschluss 433 weitergeleitet werden
soll. Hier empfangen die Agenten 410 und 440 Anschluss-Deaktivieren-Nachrichten 451 jeweils
auf den Anschlüssen 412 bzw. 442.
-
Bei
einer Ausführungsform deaktiviert der Agent 430 sofort
die Anschlüsse, auf denen er die Anschluss-Deaktivieren-Nachricht 451 weitergeleitet hat,
d. h. Anschlüsse 431, 433. Wie gezeigt,
wartet der Agent 430 dagegen auf die Fertigstellung der
mit den Anschluss-Deaktivieren-Nachrichten verbundenen Nachrichten,
bevor er die entsprechenden Anschlüsse deaktiviert. Infolgedessen
werden bei dieser Ausführungsform nach dem Empfang der
Nachrichten beim Agenten 430 und nach dem Senden einer
Anschluss-Deaktivieren-Nachricht, jedoch vor dem Empfang einer Fertigstellungsnachricht
vom Agenten 430 weiterhin Nachrichten auf einem aktivierten
Anschluss weitergeleitet. Agent 410 leitet z. B. eine Nachricht
(MSG) an den Zielagenten 440 an den Agenten 430 weiter.
Da der Agent 430 keine Fertigstellung 453 zum
Deaktivieren des Anschlusses 433 erhalten hat, leitet der
Agent 430 die Nachricht auf dem Anschluss 433 an
den Agenten 440 weiter.
-
Bei
einer Ausführungsform hat das Empfangen einer Anschluss-Deaktivieren-Nachricht,
das Senden einer Fertigstellung dazu oder eine Kombination davon
einen Agent-Flush-Zyklus in allen Warteschlangen durch einen Anschluss
zur Folge. Der Agent 410 hat z. B. Msg 1, Msg 2, and Msg
3 in der Warteschlange zum Weiterleiten an den Agenten 430.
Infolge des Empfangs einer Anschluss-Deaktivieren-Nachricht 451 räumt
Agent 410 diese Nachrichten aus der Warteschlange zum Agenten 430 aus.
Die Räumung der Zyklen durch den Anschluss 412 wird
dargestellt, bevor der Anschluss 412 deaktiviert und eine
Fertigstellung gesendet wird; die Zyklen können jedoch
in beliebiger Reihenfolge geräumt werden.
-
Als
Reaktion auf den Empfang der Anschluss-Deaktivieren-Nachrichten
auf den Anschlüssen 412 und 442, deaktivieren
jeweils die Agenten 410 bzw. 440 diese Anschlüsse.
In anderen Worten, der Agent 410 empfangt eine Anschluss-Deaktivieren-Nachricht 412 und
deaktiviert infolgedessen den Anschluss 412. Bei einer
Ausführungsform umfasst das Deaktivieren des Anschlusses 412 das
Deaktivieren des Anschlusses 412 in jedem Eintrag der Routing-Tabelle 416.
In 4 ist z. B. zu sehen, dass Anschluss 412 in
allen Einträgen 416a–e deaktiviert ist.
Bei einer anderen Ausführungsform wird Anschluss 412 nur
in einem Eintrag deaktiviert, wenn dieser mit dem Ursprungsagenten,
der die Anschluss-Deaktivieren-Nachricht generiert hat, übereinstimmt.
Anschluss 442 wird auf ähnliche Weise in der Routing-Logik 445 von
Agent 440 deaktiviert. Bei einer weiteren Ausführungsform
wird der Agent 430 als Reaktion auf den Empfang einer Anschluss-Deaktivieren-Nachricht
aus der Teilnehmerliste in der Tabelle 416 entfernt.
-
Agenten 410 und 440 generieren
und senden Fertigstellungsnachrichten 452 bzw. 453 an
den Agenten 430. Als Reaktion auf den Empfang der Fertigstellungsnachricht 453 vom
Agenten 440 auf Anschluss 433 deaktiviert der
Agent 430 den Anschluss 433. Bei einer Ausführungsform
wird, wie in 4 gezeigt, als Reaktion auf
eine Fertigstellungsnachricht, wie eine Fertigstellung 453 vom
Agenten 440, der Anschluss 433 in jedem Eintrag
der Tabelle 436 deaktiviert. In anderen Worten, Anschluss 433 ist
in den Einträgen 436a–e deaktiviert.
Anschluss 431 wird auf ähnliche Weise in Tabelle 436 deaktiviert,
d. h. Anschluss 431 wird, wie gezeigt, in jedem Eintrag 436a–e
der Routing-Tabelle 436 deaktiviert.
-
Bei
einer Ausführungsform wird als Reaktion auf das Deaktivieren
aller Anschlüsse, d. h. beim Empfangen der Fertigstellungen,
das Gerät entfernt. Das oben erwähnte Entfernen
kann eine beliebige Anzahl von Aktionen umfassen, wie ein Entfernen von
der Software, ein Entfernen von der Hardware, ein Herunterfahren
oder eine andere Entfernungsmaßnahme.
-
In 6 ist
eine Ausführungsform eines Protokolls/Ablaufdiagramms gezeigt,
in dem ein Rückführzyklus dargestellt ist. Bei
einer Ausführungsform wird eine Anschluss-Deaktivieren-Nachricht
an die Nachbarn gesendet und andere Knoten lernen durch normal versuchte
Zyklen, die Agenten und/oder Anschlüsse für die
Weiterleitung zu deaktivieren. In andren Worten, eine Anschluss-Deaktivieren-Nachricht deaktiviert
einen Anschluss eines Nachbarn des während der Laufzeit
entfernten Gerätes. Wie unten beschrieben, wird der Anschluss,
der die Nachricht empfangen hat, in der Routing-Logik des Nachbarn deaktiviert.
Normaler Verkehr resultiert in den unten beschriebenen Rückführzyklen,
die schließlich die Anschlüsse in den anderen
mit dem während der Laufzeit entfernten Gerät
verbundenen Komponenten deaktivieren. Infolgedessen wird durch die
Anschluss-Deaktivieren-Nachricht sowie durch normalen Verkehr und
den Austausch von Rückführzyklen bewirkt, dass
die Kopplungsstruktur eine stabile Routing-Information nach dem
Hot-Removal zurückgewinnt.
-
Zum
Beispiel generiert und sendet der Agent 450 eine an den
Agenten 430 gerichtete Nachricht. Basierend auf der Routing-Logik 455 im
Knoten 450 wird die Nachricht durch den Anschluss 451 an
den Agenten 420 geleitet. Basierend auf der Routing-Tabelle 425 im
Agenten 420 wird die Nachricht weiter durch den Anschluss 421 an
den Agenten 410 geleitet. Bei einer Ausführungsform
hat hier Agent 410 den Anschluss 412 als Reaktion
auf die Anschluss-Deaktivieren-Nachricht deaktiviert. In der aktuellen
Präferenzliste sind jedoch die Knoten 413 und 411 für
den Agenten 430 aktiviert. Deshalb kann der Agent 410 versuchen,
durch diese Anschlüsse an den Agenten 430 zu leiten.
Wie jedoch weiter unten ausführlicher beschrieben, sollte
der Rückführzyklus letztendlich alle Anschlüsse
für den Agenten 430 in der Routing-Logik 415 des
Agenten 410 deaktivieren. Bei einer anderen Ausführungsform,
die oben beschrieben ist, wird der Agent 430 sofort aus
der Teilnehmerliste in Tabelle 416 entfernt.
-
Die
Nachricht erreicht letztendlich auf jedem Weg den Agenten 410,
wenn der Agent 430 in der Routing-Logik 415 deaktiviert
wurde, d. h. wenn keine Anschlüsse in einem Eintrag für
den Agenten 430 aktiviert sind oder wenn kein Eintrag für
den Agenten 430 existiert. Wenn der Agent 410 hier
die Nachricht nicht weiterleiten kann, weil der Agent 430 in
der Routing-Logik 415 deaktiviert wird, generiert der Agent 410,
gemäß einer Ausführungsform, einen Rückführzyklus
bzw. führt diesen durch. Bei einer Ausführungsform
enthält eine Rückführzyklus-Nachricht
die Originalnachricht mit einem Feld oder einer anderen Kennzeichnung,
anhand derer sie als Rückführzyklus identifiziert
werden kann. Bei anderen Ausführungsformen wird jedoch
jedes Verfahren für die Anzeige, dass eine Nachricht nicht
weitergeleitet werden konnte, als Rückführzyklus
festgelegt. Als erstes Beispiel wird der Rückführzyklus
an die Originalquelle der Nachricht zurückgeliefert, wie
z. B. an den Agenten 450. Bei einem anderen Beispiel wird der
Rückführzyklus an den sendenden Knoten vor dem
aktuellen Knoten im Übertragungsweg zurückgeliefert.
-
Hier
wird die Rückführzyklus-Nachricht zurück
an den Agenten 420 geliefert. Bei einer Ausführungsform
wird beim Empfang der Rückführzyklus-Nachricht
auf Anschluss 421 der Anschluss 421 für
den Agenten 430 in der Logik 425 von Agent 420 deaktiviert.
Zum Beispiel kann der Agent 420 neben dem Deaktivieren
von Anschluss 421 auch versuchen, die Nachricht auf einem
anderen aktivierten Anschluss für Agent 430 erneut
weiterzuleiten, wie z. B. auf Anschluss 423, der durch
Agent 440, Agent 460 (da Anschluss 442 im
Agenten 440 deaktiviert ist) und erneut an den Agenten 410 leitet.
Der Agent 410 liefert eine ähnliche Rückführzyklus-Nachricht, durch
die die Anschlüsse für Agent 430 zurück
durch den Pfad von Agent 460, Agent 440 und zurück
zu Agent 420 deaktiviert werden. Wenn die Nachricht an den
Agenten 420 zurückgeführt wird, wird
der Anschluss 423 für den Agenten 430 in
der Routing-Logik 425 entfernt, da ein Rückführzyklus
für eine an den Agenten 430 gerichtete Nachricht
auf Anschluss 423 empfangen wurde. Bei einer Ausführungsform, bei
der alle Anschlüsse für den Agenten 430 in
der Logik 425 deaktiviert sind, kann der genannte Agent 430 aus
der Teilnehmerliste von Tabelle 416 entfernt werden. Das
Entfernen eines Agenten aus einer Routing-Tabelle kann das Löschen
eines Eintrags umfassen. Bei einer anderen Ausführungsform
umfasst das Entfernen eines Eintrags das Hinterlassen des Eintrags,
wobei alle verbundenen Anschlüsse deaktiviert sind.
-
Wie
zu sehen ist, kann Agent 420 nicht sofort erkennen, dass
Agent 430 aus dem System entfernt wurde, er lernt jedoch
durch versuchtes Routing der Nachrichten, das der Agent 430 entfernt
wurde. In anderen Worten, die Routing-Tabelle 425 für
Agent 420 lernt durch das Routing von normalem Verkehr, dass
der Agent 430 entfernt wurde. Wenn ein Zyklus hier ein „totes
Ende” erreicht, kann die Routing-Logik 425 aufgrund
der zurückgesandten Nachrichten aus den normalen Zyklen
erkennen, dass der Agent 430 nicht erreichbar ist. Auf ähnliche
Weise kann, gemäß einer oben beschriebenen Ausführungsformen,
der Agent 410 nur den Anschluss deaktivieren, auf dem eine
Deaktivieren-Nachricht empfangen wurde, und kann dann später
durch das Rückführzyklus-Protokoll andere aktivierte
Anschlüsse für den Agenten 430 deaktivieren,
um den Agenten 430 aus der Teilnehmerliste zu entfernen.
-
Wenn
die Rückführzyklus-Nachricht beim Agenten 420 ein „totes
Ende” erreicht, d. h. alle Anschlüsse für
Agent 430 in der Logik 425 deaktiviert sind, wird
die Rückführzyklus-Nachricht zum Agenten 450 zurückgeleitet.
Hier deaktiviert der Agent 450 den Anschluss 451 für
Agent 430 in der Logik 455. Infolgedessen lernt
die Kopplungsarchitektur durch Deaktivierung der Anschlüsse,
dass ein Agent entfernt wurde, oder zumindest nicht erreichbar ist.
-
Obwohl
in Bezug auf 6 ein Hot-Removal unter Verwendung
einer Anschluss-Deaktivieren-Nachricht, die an benachbarte Agenten
gesendet wird, besprochen wird, ist eine Deaktivieren-Nachricht
oder Anschluss-Deaktivieren-Nachricht in dieser Hinsicht nicht eingeschränkt.
Bei einer Ausführungsform wird z. B. eine Deaktivieren-Nachricht
durch das gesamte System oder eine Kopplungsarchitektur gesendet.
Jede Komponente sendet die Deaktivieren-Nachricht per Broadcast/Weiterleitung
aus und aktualisiert ihre mit dem während der Laufzeit
entfernten Gerät verbundene Routing-Logik. Das Aktualisieren
der Routing-Logik kann den oben beschriebenen Verfahren ähnlich
sein, wie das Entfernen des während der Laufzeit entfernten
Agenten aus einer Teilnehmerliste der Routing-Logik und/oder Deaktivieren
aller Anschlüsse, die mit dem während der Laufzeit
entfernten Agenten in der Routing-Logik verbunden sind.
-
In
Bezug auf 7 wird eine Ausführungsform
eines Protokoll-Blockdiagramms für eine Hot-Addition eines
Agenten dargestellt. Hier wird eine Hot-Addition in Block 705 für
Agent 430 erkannt, anstatt dem Hot-Removal in Block 505 von 5. Eine
Hot-Addition ist im Wesentlichen das Gegenteil aller potenziellen
Ausführungsformen des oben beschriebenen Hot-Removals.
Wenn deshalb ein Hot-Removal das physische Entfernen eines Agenten
aus einem System umfasst, gilt bei einer Hot-Addition das physische
Hinzufügen des Agenten an ein System, und auf ähnliche
Weise das Hochfahren/Herunterfahren und das Hinzufügen
durch die Software/Entfernen durch die Software.
-
Infolge
der Erkennung einer mit dem Agenten 430 verbundenen Hot-Addition
wird vom Agenten 430 eine Anschluss-Aktivieren-Nachricht
generiert. Bei einer Ausführungsform wird eine Anschluss-Aktivieren-Nachricht
an alle Knoten in einem Kopplungsstrukturnetzwerk gesendet. Hier
kann auch bei einer Ausführungsform, bei der die Anschluss-Deaktivieren-Nachrichten
nur an die benachbarten Agenten gesendet werden, eine Anschluss-Aktivieren-Nachricht
per Broadcast an alle Knoten gesendet werden. Bei einer anderen
Ausführungsform wird eine Anschluss-Aktivieren-Nachricht
dagegen nur an die benachbarten Knoten gesendet, d. h. die Knoten,
die direkt mit dem Agenten 430 verbunden sind.
-
Wie
gezeigt, empfängt der Agent 410 die Aktivieren-Nachricht
auf Anschluss 412. Agent 430 kann der Teilnehmerliste
hinzugefügt werden, wenn kein aktueller Eintrag für
Agent 430 vorhanden ist. Bei einer Ausführungsform
werden alle Anschlüsse, wie 411–413,
als Reaktion auf den Empfang einer Anschluss-Aktivieren-Nachricht
aktiviert, sogar wenn die Aktivieren-Nachricht nur auf einem Anschluss empfangen
wird. Hier können die Anschlüsse aktiviert werden,
die nicht den Agenten 430 leiten, wobei der Agent 410 genau
wie oben mit der Zeit lernt, dass diese Anschlüsse durch
Rückführzyklen deaktiviert werden sollten. Weitere
geleitete Zyklen können verwendet werden, um die Präferenzliste
für den Agenten 430 in der Logik 415 zu
bestimmen und dynamisch zu ändern.
-
Bei
einer anderen Ausführungsform wird nach Empfang der Anschluss-Aktivieren-Nachricht nur
der Anschluss 412 aktiviert. Hier können mehrere Anschluss-Aktivieren-Nachrichten
auf verschiedenen Anschlüssen empfangen werden, um die
korrekten Anschlüsse des Agenten 410 für
das Routing an Agent 430 zu aktivieren. Auf ähnliche
Weise empfangt Agent 440 eine Anschluss-Aktivieren-Nachricht und
konfiguriert seine Routing-Tabelle entsprechend für Agent 430.
Bei einer Ausführungsform werden Fertigstellungsnachrichten
für Anschluss-Aktivieren von den Agenten 410, 440 zurückgesandt
und die Anschlüsse 431, 433 werden entsprechend
aktiviert.
-
Aus
der vorstehenden Beschreibung ist zu erkennen, dass Modifizierungen
der Routing-Tabellen in einer Kopplungsarchitektur als Reaktion
auf Änderungen in der Agentenkonfiguration dynamisch durchgeführt
werden können anstatt einen Ruhezustand nutzen zu müssen.
Infolgedessen kann ein mit hohen Kosten verbundenes Anhalten eines
Systems und die Neukonfiguration der Routing-Informationen durch
externe Software/Firmware potenziell vermieden werden. Des Weiteren
kann ein System durch die Verwendung von Deaktivieren-Nachrichten
an Nachbarn und durch Rückführzyklen potenziell über entfernte
Geräte erfahren, anstatt einen systemweiten Broadcast des
Entfernens verwenden zu müssen, wodurch potenziell auch
unnötiges Verkehrsaufkommen reduziert wird. Des Weiteren
können Anschlüsse für einen Zielagenten
in einer Präferenzliste bereitgestellt werden, die dynamisch
modifizierbar ist, um das vorteilhafteste Routing von Paketen während
des Betriebs sicherzustellen.
-
Ein
Modul im Sinne dieser Offenlegung bezieht sich auf jede Hardware,
Software, Firmware oder eine Kombination davon. Modulgrenzen, die
separat dargestellt werden, sind meistens variierend und können
auch überlappend sein. Ein erstes und ein zweites Modul
teilen z. B. Hardware, Software, Firmware oder eine Kombination
davon, während bestimmte Hardware, Software oder Firmware
potenziell unabhängig bleiben kann. Bei einer Ausführungsform
umfasst der Begriff „Logik” jedoch Hardware, wie
Transistoren, Register oder andere Hardware, wie programmierbare
Logikbaugruppen. Bei anderen Ausführungsformen kann die
Logik auch in die Hardware integrierte Software oder Code umfassen,
wie Firmware oder Mikrocode.
-
Ein
Wert im Sinne dieser Offenlegung umfasst jede bekannte Repräsentation
einer Zahl, eines Zustands, eines logischen Zustands oder eines
binären logischen Zustands. Die Verwendung von Logik-Levels,
Logikwerten oder logischen Werten wird oft als 1 und 0 bezeichnet,
was auf einfache Weise die binären logischen Zustände
repräsentiert. So bezieht sich z. B. 1 auf eine High-Level-Logik
und 0 auf eine Low-Level-Logik. Bei einer Ausführungsform kann
eine Speicherzelle, wie ein Transistor oder eine Flash-Zelle fähig
sein, einen einzelnen logischen Wert oder mehrere logische Werte
zu enthalten. Es wurden jedoch auch andere Darstellungen der Werte in
Computersystemen verwendet. Die Dezimalziffer Zehn kann z. B. auch
als binärer Wert 1010 und als hexadezimaler Buchstabe A
dargestellt werden. Deshalb umfasst ein Wert jede Repräsentation
von Informationen, die in einem Computersystem enthalten sein können.
-
Weiter
können Zustande durch Werte oder Teile von Werten dargestellt
werden. So kann zum Beispiel ein erster Wert, wie eine logische
Eins, einen Standard- oder Anfangszustand darstellen, während ein
zweiter Wert, wie eine logische Null, einen nicht standardmäßigen
Zustand darstellt. Die Begriffe Rücksetzen und Setzen in
einer Ausführungsform beziehen sich auf einen Standard
und einen aktualisierten Wert bzw. Zustand. Der Standwert kann z.
B. potenziell einen hohen logischen Wert enthalten, d. h. Rücksetzen,
während ein aktualisierter Wert potenziell einen niedrigen
logischen Wert enthält, d. h. Setzen. Es kann jede beliebige
Kombination von Werten verwendet werden, um eine beliebige Anzahl von
Zuständen darzustellen.
-
Die
Ausführungsformen der oben beschriebenen Verfahren, von
Hardware, Software, Firmware oder Code kann durch Anweisungen oder
Code implementiert werden, welche auf einem maschinenzugänglichen
oder maschinelesbaren Datenträger gespeichert sind und
durch ein Verarbeitungselement ausgeführt werden können.
Ein maschinenzugänglicher/-lesbarer Datenträger
kann u. a. jeder Mechanismus sein, der Informationen in einer maschinenlesbaren
Form, wie von einem Computer oder Elektroniksystem lesbar, bereitstellt
(d. h. speichert und/oder überträgt). Maschinenzugängliche
Datenträger sind z. B Random-Access-Memory. (RAM) wie ein
statischer RAM (SRAM) oder dynamischer RAM (DRAM); ROM; magnetische
oder optische Speichermedien; Flash-Memory-Geräte; elektrische
Speichergeräte, optische Speichergeräte, akustische Speichergeräte
oder andere Formen eines Speichergerätes mit propagiertem
Signal (z. B. Trägerwellen, Infrarotsignale, digitale Signale)
etc. Eine Maschine kann z. B. auf ein Speichergerät zugreifen,
indem sie ein propagiertes Signal, wie eine Trägerwelle,
von einem Datenträger, der die auf dem propagierten Signal
zu sendenden Informationen enthalten kann, empfangt.
-
Verweise
in dieser Beschreibung auf „eine Ausführungsform” bedeuten,
dass das jeweilige Merkmal, die Struktur oder Charakteristik, die
in Verbindung mit der Ausführungsform beschrieben werden,
mindestens in einer Ausführungsform in der vorliegenden
Erfindung enthalten sind. Die Verwendung des Ausdrucks „in
einer Ausführungsform” an verschiedenen Stellen
in dieser Beschreibung bezieht sich nicht unbedingt immer auf die
gleiche Ausführungsform. Des Weiteren können Merkmale,
Strukturen oder Charakteristika auf geeignete Weise in einer oder
in mehreren Ausführungsformen kombiniert werden.
-
In
der vorstehenden Beschreibung wurden genaue Details in Bezug auf
bestimmte exemplarische Ausführungsformen beschrieben.
Es ist jedoch offensichtlich, dass verschiedene Modifizierungen und Änderungen
an diesen vorgenommen werden können, ohne vom Gedanken
und Umfang der in den angehängten Ansprüchen dargelegten
Erfindung abzuweichen. Die Beschreibung und die Zeichnungen sind
demgemäß als exemplarische Darstellung, jedoch
nicht in einem einschränkenden Sinne anzusehen. Des Weiteren
muss die vorstehende Verwendung des Begriffs Ausführungsform
und anderer exemplarischer Begriffe nicht unbedingt auf die gleiche Ausführungsform
oder das gleiche Beispiel verweisen, sondern kann sich auf verschiedene
und unterschiedliche Ausführungsformen sowie auch auf die gleiche
Ausführungsform beziehen.
-
ZITATE ENTHALTEN IN DER BESCHREIBUNG
-
Diese Liste
der vom Anmelder aufgeführten Dokumente wurde automatisiert
erzeugt und ist ausschließlich zur besseren Information
des Lesers aufgenommen. Die Liste ist nicht Bestandteil der deutschen
Patent- bzw. Gebrauchsmusteranmeldung. Das DPMA übernimmt
keinerlei Haftung für etwaige Fehler oder Auslassungen.
-
Zitierte Patentliteratur
-