-
GEBIET DER ERFINDUNG
-
Die
vorliegende Erfindung betrifft vor allem Kommunikations- und Computersysteme;
und insbesondere betrifft die Erfindung die Erzeugung und die Verwendung
von verbesserten Baum-Bitmap-Datenstrukturen beim Bestimmen einer Übereinstimmung eines
längsten
Präfix,
wie z.B. in einem Router, in einem Paketvermittlungssystem oder
in einem anderen Kommunikations- oder Computersystem, ohne darauf
begrenzt zu sein.
-
HINTERGRUND DER ERFINDUNG
-
Die
Kommunikationsindustrie ändert
sich schnell, um sich auf die aufkommenden Technologien und den
immer weiter zunehmenden Kundenbedarf einzustellen. Dieser Kundenbedarf
bezüglich neuer
Anwendungen und erhöhter
Leistung von existierenden Anwendungen treibt Kommunikationsnetz- und
Systemanbieter dazu, Netze und Systeme mit größerer Geschwindigkeit und Kapazität (z.B.
größerer Bandbreite)
zu verwenden. Beim Versuch, diese Ziele zu erreichen, besteht eine übliche Vorgehensweise,
die von vielen Kommunikationsanbietern ergriffen wird, darin, die
Paketvermittlungstechnologie zu verwenden. Öffentliche und private Kommunikationsnetze
werden zunehmend unter Verwendung von verschiedenen Pakettechnologien,
wie z.B. des Internetprotokolls (IP), aufgebaut und erweitert.
-
Eine
Netzvorrichtung, wie z.B. eine Vermittlungsstelle oder ein Router,
empfängt
typischerweise ein Paket, verarbeitet dieses und leitet dieses weiter oder
verwirft dieses auf der Basis von einem oder mehreren Kriterien,
einschließlich
der Art des von dem Paket verwendeten Protokolls, Adressen des Pakets
(z.B. Quelle, Zielort, Gruppe), und der Art oder Qualität des angeforderten
Dienstes. Außerdem werden
typischerweise eine oder mehrere Sicherheitsoperationen bei jedem
Paket durchgeführt.
Bevor jedoch diese Operationen durchgeführt werden können, muss
typischerweise eine Paketklassifizierungsoperation am Paket durchgeführt werden.
-
Die
IP-Weiterleitung erfordert eine Berechnung des längsten übereinstimmenden Präfix bei
Leitungsgeschwindigkeiten. Die aktuelle IP-Version IPv4 verwendet
32-Bit-zieladressen, und ein Kern-Internet-Router kann über 200.000
Präfixe
besitzen. Ein Präfix
wird typischerweise mit einem Bitstring (z.B. 01*), gefolgt von
einem '*', bezeichnet, um
anzugeben, dass der Wert dieser rechts davon stehenden Bits egal
ist. Für
das Ziel-Routing besteht jeder Präfix-Eintrag in einer Routing-Tabelle
typischerweise aus einem Präfix
und einem Wert des nächsten Sprungs
(hext Hop). Es sei zum Beispiel angenommen, dass die Datenbank aus
nur zwei Präfix-Einträgen (01* → L1; 0100* → L2) besteht.
Wenn der Router ein Paket mit einer Zieladresse empfängt, die
mit 01000 beginnt, stimmt die Adresse sowohl mit dem ersten Präfix (01*)
als auch mit dem zweiten Präfix (0100*) überein.
Da das zweite Präfix
die längste Übereinstimmung
ist, sollte das Präfix
zum nächsten Sprung
L2 gesandt werden. Andererseits soll ein Paket mit einer Zieladresse,
die mit 01010 beginnt, zum nächsten
Sprung L1 gesandt werden. Die Next-Hop-Informationen legen typischerweise
einen Ausgangsort am Router und möglicherweise eine Datenübermittlungsabschnittsadresse
fest.
-
1A veranschaulicht
ein Beispiel eines Satzes von Präfixen
P1–9,
die als Knoten 1A–9A in Tabelle 10A und
als Knoten 1B–9B im
Unibit-Trie 10B gezeigt sind. Im Unibit-Trie 10B sind
auch Platzhalter-/unbesetzte Knoten 11B–18B gezeigt, die nicht übereinstimmende
Knoten darstellen (d.h., Knoten, die nicht mögliche Ergebnisse als ein längstes übereinstimmendes
Präfix
sind). Ein String bzw. Strang von 1110000 stimmt beispielsweise
mit den Präfixen
P1 (1B), P2 (2B) und P5 (5B) überein,
wobei das längste übereinstimmende
Präfix
P5 (5B) ist.
-
Eine
bekannte Vorgehensweise wird typischerweise als "Baum-Bitmap" bezeichnet, die in Eatherton et al., "Data Structure Using
a Tree Bitmap and Method for Rapid Classification of Data in a Database",
US-Patentanmeldung 09/371,907 , eingereicht
am 10. August 1999 und ausgegeben als
US-Patent
Nr. 6,560,610 , beschrieben ist. Die Baum-Bitmap ist ein
Multibit-Trie-Algorithmus,
der eine Darstellung des Trie durch Gruppieren von Knoten in Sätze von
Schrittweiten (Strides) implementiert. Eine Schrittweite ist typischerweise
als die Anzahl von Baum-Levels des binären Trie, die zusammen gruppiert
werden, oder als die Anzahl von Levels in einem Baum definiert,
auf die in einer einzelnen Leseoperation zugegriffen wird, welche
mehrere Levels in einem Baum oder Trie darstellt.
1B stellt
eine solche Unterteilung von Knoten P1–P9 (
1B–
9B)
und unbesetzten Knoten
11B–
18B (
1A) in
Schrittweiten
20–
25 dar.
In diesem Beispiel besitzt die Schrittweite die Größe drei.
-
In
einer bekannten Implementierung des Baum-Bitmap-Algorithmus werden
alle Sohnknoten eines gegebenen Trie-Knotens benachbart zueinander
gespeichert, was die Verwendung von nur einem Zeiger für alle Söhne ermöglicht (der
Zeiger zeigt auf den Beginn des Sohnknotenblocks), da jeder Sohnknoten
als ein Versatz (Offset) von dem einzelnen Zeiger berechnet werden
kann. Dies kann die Anzahl von erforderlichen Zeigern verringern
und verkleinert die Größe von Trie-Knoten.
-
Außerdem sind
zwei Bitmaps pro Trie-Knoten vorhanden, eine für alle intern gespeicherten
Präfixe
und eine für
die externen Zeiger. Die interne Bitmap weist ein 1-Bit auf, das
für alle
Präfixe
gesetzt ist, die innerhalb dieses Knotens gespeichert sind. Auf
diese Weise sind für
einen r-Bit-Trie-Knoten (2')-1 mögliche Präfixe mit
Längen
von weniger als r vorhanden, und folglich wird eine (2')-1-Bitmap verwendet.
Die externe Bitmap enthält
ein Bit für
alle möglichen
2' Sohn-Zeiger.
Ein Trie-Knoten besitzt eine feste Größe und enthält nur eine Bitmap für externe
Zeiger, eine interne Bitmap für
Next-Hop-Informationen und
einen einzelnen Zeiger auf den Block von Sohnknoten. Die mit den
internen Präfixen
assoziierten nächsten
Sprünge
(hext Hops) werden innerhalb jedes Trie-Knotens in einem mit diesem
Trie-Knoten assoziierten separaten Array gespeichert. Für Speicherplatzzuweisungszwecke
sind Ergebnis-Arrays normalerweise
ein geradzahliges Vielfaches der gemeinsamen Knotengröße (z.B.
ist bei 16-Bit-Next-Hop-Zeigern und 8-Byte-Knoten ein Ergebnisknoten
für bis
zu vier Next-Hop-Zeiger erforderlich, zwei Ergebnisknoten sind für bis zu
8 erforderlich, usw.). Das Setzen von Next-Hop-Zeigern in ein separates
Ergebnis-Array erfordert potentiell zwei Speicherzugriffe pro Trie-Knoten
(einen für
den Trie-Knoten und einen zum Abrufen des Ergebnisknotens für gespeicherte
Präfixe).
Typischerweise wird eine einfache verzögerte Strategie, nicht auf
die Ergebnisknoten zuzugreifen, bis die Suche endet, verwendet.
Dann wird auf den Ergebnisknoten zugegriffen, der dem letzten Trie-Knoten
entspricht, der in dem Pfad angetroffen wird, der ein gültiges Präfix enthielt.
Dies fügt
nur eine einzelne Speicherreferenz am Ende neben der pro Trie-Knoten erforderlichen einen
Speicherreferenz hinzu.
-
Das
Dokument
US 5 787 430 offenbart
die Suche nach einem längsten übereinstimmenden
Präfix
in einer Datenbank, die eine Trie-Struktur aufweist. Bedingt durch
die Zurückverfolgung
des eingerichteten Pfades verwendet die Datenbank den Speicher auf
effiziente Weise.
-
1C veranschaulicht
eine Darstellung einer Baum-Bitmap-Implementierung des in den 1A–1B gezeigten
Präfixbeispieles.
Wie gezeigt ist, stellt der Wurzelknoten 30 den Trie des
ersten Level dar. Der Sohn-Zeiger 31 verbindet
den Wurzelknoten 30 mit dem Sohn-Array 40, das
die Schrittweiten des zweiten Level enthält. In dem Level 3 sind zwei
Sohn-Arrays 50 und 60 vorhanden, die von dem Sohn-Array 40 aus
jeweils durch Sohn-Zeiger 41 und 42 verbunden
sind.
-
Eine Übereinstimmung
eines längsten
Präfix wird
gefunden, indem mit dem Wurzelknoten begonnen wird. Die ersten Bits
der Zieladresse (entsprechend der Schrittweite des Wurzelknotens,
drei in diesem Beispiel) werden verwendet, um in die externe Bitmap
am Wurzelknoten in beispielsweise der Position P zu indizieren.
Wenn sich eine 1 in dieser Position befindet, dann ist ein gültiger Sohn-Zeiger vorhanden.
Die Anzahl von 1-en, nicht einschließlich und links von dieser
1 (zum Beispiel I), wird bestimmt. Da der Zeiger auf die Startposition
des Sohn-Blocks (zum Beispiel C) und die Größe jedes Trie-Knotens (zum Beispiel
S) bekannt ist, kann der Zeiger auf den Sohnknoten als C + (I·S) berechnet
werden.
-
Vor
dem Weiterbewegen zum Sohn wird die interne Bitmap geprüft, um festzustellen,
ob ein gespeichertes Präfix
vorhanden ist, das der Position P entspricht. Dazu sei angenommen,
dass beginnend von rechts nacheinander Bits von P entfernt werden und
in die entsprechende Position der internen Bitmap indiziert wird,
wobei nach der ersten angetroffenen 1 gesucht wird. Es sei beispielsweise
angenommen, dass P 101 ist und eine Schrittweite von drei Bits an
der Wurzelknoten-Bitmap verwendet wird. Das am weitesten rechts
liegende Bit wird zuerst entfernt, was zum Präfix 10* führt. Da 10* der sechsten Bitposition
in der internen Bitmap entspricht, wird eine Prüfung durchgeführt, um
festzustellen, ob sich eine 1 in dieser Position befindet. Wenn
nicht, dann werden die am weitesten rechts liegenden zwei Bits entfernt
(was zum Präfix
1* führt). Da
1* der dritten Position in der internen Bitmap entspricht, wird
eine Prüfung
durchgeführt,
um festzustellen, ob sich dort eine 1 befindet. Wenn dort eine 1 gefunden
wird, dann endet die Suche. Wenn dort keine 1 gefunden wird, dann
werden die ersten drei Bits entfernt, und eine Suche nach dem Eintrag,
der * entspricht, im ersten Eintrag der internen Bitmap wird durchgeführt.
-
Sobald
festgestellt wurde, dass ein übereinstimmendes
gespeichertes Präfix
innerhalb eines Trie-Knotens existiert, werden die Informationen,
die dem nächsten
Sprung entsprechen, vom Ergebnisknoten, der dem Trie-Knoten zugeordnet
ist, nicht unmittelbar wiedergewonnen. Vielmehr wird die Anzahl von
Bits vor der Präfixposition
gezählt,
um seine Position in dem Ergebnis-Array anzugeben. Das Zugreifen auf das
Ergebnis-Array würde
eine zusätzliche Speicherreferenz
pro Trie-Knoten benötigen.
Statt dessen wird der Sohnknoten untersucht, während sich an die gespeicherte
Präfixposition
und den entsprechenden Vater-Trie-Knoten erinnert wird. Die Absicht
besteht darin, sich den letzten Trie-Knoten T im Suchpfad, der ein
gespeichertes Präfix
enthielt, und die entsprechende Präfixposition zu merken. Wenn die
Suche endet (d.h., ein Trie-Knoten mit einer in der entsprechenden
Position der externen Bitmap gesetzten 0 angetroffen wird), wird
auf das Ergebnis-Array, das T entspricht, in der bereits berechneten
Position zugegriffen, um die Informationen des nächsten Sprungs abzulesen.
-
1D veranschaulicht
einen Pseudocode einer Implementierung der vollen Baum-Bitmap-Suche.
Er nimmt eine Funktion treeFunction (Baum-Funktion) an, die die Position des längsten übereinstimmenden Präfix, falls vorhanden, innerhalb
eines gegebenen Knotens finden kann, indem er die interne Bitmap
zu Rate zieht. "LongestMatch" (längste Übereinstimmung)
verfolgt einen Zeiger auf die bisher gesehene längste Übereinstimmung. Die Schleife
endet, wenn kein Sohn-Zeiger vorhanden ist (d.h., kein Bit in der
externen Bitmap eines Knotens gesetzt ist), auf den der verzögerte Zugriff
des Ergebnisknotens, auf den durch LongestMatch gezeigt wird, durchgeführt wird,
um den endgültigen
nächsten
Sprung (hext Hop) zu erhalten. Der Pseudocode nimmt an, dass die
gesuchte Adresse bereits in Schrittweiten unterteilt ist und stride[i]
die der i-ten Schrittweite entsprechenden Bits enthält.
-
Indem
die Schrittweite konstant gehalten wird, besteht ein Verfahren zum
Verringern der Größe von jedem
wahlfreien bzw. direkten Zugriff darin, die internen und externen
Bitmaps aufzuteilen, was manchmal als Spalt-Baum-Bitmaps bezeichnet wird. Dies wird durchgeführt, indem
nur die externe Bitmap in jedem Trie-Knoten angeordnet wird. Wenn
keine Speichersegmentierung besteht, können die Sohn-Trie-Knoten und
die internen Knoten von dem gleichen Vater im Speicher benachbart
zueinander angeordnet werden. Wenn eine Speichersegmentierung existiert,
ist es eine schlechte Konstruktion, dass die internen Knoten über mehrere
Speicherbänke
gestreut sind. Im Fall eines segmentierten Speichers ist eine Option,
dass ein Trie-Knoten Zeiger auf das Sohn-Array, den internen Knoten
und auf das Ergebnis-Array aufweist.
-
Bei
einer Alternative, wie sie in 1E veranschaulicht
ist, liegt der Trie-Knotenpunkt am internen Knoten und der interne
Knotenpunkt am Ergebnis-Array. Um zu bewirken, dass diese Optimierung funktioniert,
muss jeder Sohn ein Bit aufweisen, das angibt, ob der Vaterknoten
ein Präfix
enthält,
das eine bisher längste Übereinstimmung
ist. Wenn sich ein Präfix
im Pfad befinden würde,
zeichnet die Lookup-Maschine den Ort des internen Knotens (aus der
Datenstruktur des letzten Knotens berechnet) als das bisher längste übereinstimmende
Präfix
enthaltend auf. Wenn die Suche endet, dann wird auf den entsprechenden
internen Knoten zugegriffen und dann wird auf den dem internen Knoten
entsprechenden Ergebnisknoten zugegriffen. Es ist zu beachten, dass
der Kernalgorithmus auf die Next-Hop-Informationen verzögert zugreift;
der Spalt-Baum-Algorithmus greift selbst auf die interne Bitmap
verzögert
zu. Was bewirkt, dass dies funktioniert, ist, dass zu jedem Zeitpunkt,
an dem ein Präfix
P in einem Knoten X gespeichert ist, alle Söhne von X, die mit P übereinstimmen,
ein Bit speichern können,
das besagt, dass der Vater ein gespeichertes Präfix aufweist. Die Softwarereferenzimplementierung
verwendet diese Optimierung, um die Verarbeitung von internen Bitmaps zu
sparen; die Hardwareimplementierungen verwenden sie nur, um die
Zugriffsbreitengröße zu verringern
(da die Bitmapverarbeitung in der Hardware kein Problem ist). Ein
angenehmer Vorteil von Spalt-Baum-Bitmaps besteht darin, dass dann,
wenn ein Knoten, der nur Pfade und keine internen Präfixe enthalten
würde,
ein Zeiger von internen Knoten von Null verwendet werden kann und
kein Platz in der internen Bitmap verschwendet wird.
-
Mit
dieser Optimierung werden die externen und internen Bitmaps jeweils
zwischen dem Suchknoten und dem internen Knoten aufgeteilt. Das
Auf teilen der Bitmaps auf diese Art und Weise führt zu einer verringerten Knotengröße, was
von Vorteil bei Hardwareimplementierungen ist. Jeder Suchknoten Sj
weist zwei Zeiger auf – wobei
einer auf die Söhne und
der andere auf den internen Knoten Ij zeigt. Der interne Knoten
Ij verwaltet einen Zeiger auf das Blatt-Array LAj von Blättern, die
Präfixen
entsprechen, die zu diesem Knoten gehören. 1E veranschaulicht
zum Beispiel Suchknoten S1 (111), S2 (112) und
S3 (113), interne Knoten I1 (121), I2 (115) und
I3 (114), und Blatt-Arrays LA1 (122), LA2 (116) und
LA3 (123) und ihre Verbindung miteinander durch Zeiger.
Außerdem
umfassen die Blatt-Arrays LA1 (122), LA2 (116)
bzw. LA3 (123) jeweils Blattknoten L1 (122A),
L2 (116A) und L3 (123A). Es sei angemerkt, dass
die in durchgezogenen Linien dargestellten Knoten die Knoten sind,
auf die während
eines nachstehend beschriebenen Baum-Bitmap-Lookup-Beispiels zugegriffen
wird.
-
Nun
soll der Fall betrachtet werden, in dem ein Lookup vor sich geht,
indem auf die Suchknoten S1 (111), S2 (112) und
S3 (113) zugegriffen wird. Wenn das Flag parent_has_match
(Vater besitzt Übereinstimmung)
in S3 (113) gesetzt ist, impliziert dies, dass irgendein
Präfix
in einem der Blattknoten L2 (116A) in dem Blatt-Array LA2
(116) vorliegt, welches die aktuell längste Übereinstimmung ist. In diesem
Fall wird die Adresse des internen Knotens I2 (115) im
Lookup-Kontext gespeichert. Nun soll angenommen werden, dass S3
(113) für
dieses Lookup Pfade nicht erweitert. Es könnte sich irgendein Präfix im Blatt-Array
LA3 (123) befinden, das das längste übereinstimmende Präfix ist.
Daher wird zuerst auf I3 (114) zugegriffen und seine interne
Bitmap auf ein längstes übereinstimmendes
Präfix überprüft. Wenn kein
längstes übereinstimmendes
Präfix
gefunden wird, wird der interne Knoten I2 (115), dessen
Adresse gespeichert wurde, wiedergewonnen, seine Bitmap wird analysiert
und der Blattknoten L2 (116A), der der längsten Übereinstimmung
entspricht, wird zurückgeführt. Die
obige Zugriffssequenz ist S1 (111), S2 (112),
S3 (113), I3 (114), I2 (115), L2 (116A).
Dieses Beispiel zeigt, dass es Fälle
gibt, in denen auf zwei interne Knoten zugegriffen werden muss und
zwei interne Bitmaps analysiert werden müssen, bevor die längste Übereinstimmung
bestimmt werden kann.
-
In
Hardwareimplementierungen sind die Speicherzugriffsgeschwindigkeiten
im Allgemeinen der Engpass im Gegensatz zur Knotenverarbeitungszeit. Eine
typische Implementierung einer auf Hardware basierenden Baum-Bitmap-Lookup-Maschine verwendet
mehrere Speicherkanäle,
um die Baum-Bitmap-Datenstruktur
zu speichern. In diesem Fall werden die Baum-Bitmap-Knoten über die
Speicherkanäle
derart verteilt, dass pro Lookup aufeinander folgende Knoten, auf
die zugegriffen wird, in verschiedene Speicherkanäle fallen.
Wenn ein einzelner Speicherkanal "x" Zugriffe
pro Sekunde unterstützen kann,
dann können,
wenn mehrere Lookup-Vorgänge
gleichzeitig in Gang sind, "x" Lookup-Vorgänge pro
Sekunde im Durchschnitt erreicht werden, vorausgesetzt, dass auf
jeden Speicherkanal höchstens einmal
pro Lookup zugegriffen wird. Wenn auf irgendeinen der Kanäle zweimal
pro Lookup zugegriffen wird, dann fällt die Paketweiterleitungsrate
um die Hälfte,
da dieser spezielle Kanal zum Engpass wird.
-
Daher
müssen
alle internen Knoten entlang irgendeines Pfades von der Wurzel bis
zum Boden des Baumes in unterschiedlichen Speicherkanälen gespeichert
werden. Das Zugreifen auf zwei interne Knoten stellt ein Problem
dar, wenn eine begrenzte Anzahl von Speicherkanälen vorhanden sind, da beide
internen Knoten in verschiedenen Speicherkanälen angeordnet werden müssen, und
auf welche zwei internen Knoten zugegriffen werden soll, von der
speziellen Baum-Bitmap und vom speziellen Lookup-Wert abhängt. Mit
Bezug auf 1E könnten beispielsweise die internen
Knoten, auf die zugegriffen wird, I3 (114) und I2 (115)
oder I3 (114) und I1 (121) oder I2 (115)
und I1 (121) sein. In diesem Beispiel müssen sich daher alle sieben
Knoten S1 (111), S2 (112), S3 (113),
I1 (121), I2 (115), I3 (114) und L2 (116)
in separaten Speichermodulen befinden. Dies ist problematisch, wenn
weniger als sieben Speichermodule vorhanden sind.
-
Neue
Verfahren und Vorrichtungen zum Erzeugen und Verwenden von verbesserten Baum-Bitmap-Datenstrukturen
beim Bestimmen einer längsten
Präfix Übereinstimmung
sind erforderlich, insbesondere, jedoch nicht auf diejenigen Verfahren
und Vorrichtungen begrenzt, die die Anzahl von Speicherzugriffen
verringern und/oder einen Vorteil gegenüber früheren Baum-Bitmap-Implementierungen
bereitstellen.
-
ZUSAMMENFASSUNG DER ERFINDUNG
-
Verfahren
und Vorrichtungen zum Erzeugen und Verwenden von verbesserten baumartigen Bitmap-Datenstrukturen
bzw. Baum-Bitmap-Datenstrukturen
beim Bestimmen einer längsten
Präfix-Übereinstimmung,
wie z.B. in einem Router, einem Paketvermittlungssystem oder einer
anderen Kommunikations- oder Computerkomponente, -vorrichtung oder
einem anderen Kommunikations- oder Computersystem, werden offenbart.
Ein Ausführungsbeispiel
umfasst eine Datenstruktur. Die Datenstruktur umfasst einen ersten
Suchknoten, ein erstes Sohn-Array mit einem ersten internen Knoten
und einem zweiten Suchknoten; und ein erstes Blatt-Array mit mehreren
ersten Blatt-Array-Einträgen.
Der erste Suchknoten umfasst einen Zeiger auf das erste Sohn-Array.
Der erste interne Knoten umfasst einen Zeiger auf das erste Blatt-Array. Der zweite
Suchknoten umfasst einen Zeiger auf einen oder mehrere erste Blatt-Array-Einträge.
-
KURZE BESCHREIBUNG DER ZEICHNUNGEN
-
Die
beigefügten
Ansprüche
legen die Merkmale der Erfindung mit Besonderheit dar. Die Erfindung
kann zusammen mit ihren Vorteilen aus der folgenden ausführlichen
Beschreibung in Verbindung mit den begleitenden Zeichnungen am besten
verstanden werden, in denen:
-
1A–1E Blockdiagramme
oder andere Veranschaulichungen eines bekannten Baum-Bitmap-Systems
sind;
-
2A ein
Blockdiagramm einer verbesserten Baum-Bitmap-Datenstruktur ist, die in einem Ausführungsbeispiel
verwendet wird;
-
2B ein
Blockdiagramm einer verbesserten Baum-Bitmap-Datenstruktur ist, die in einem Ausführungsbeispiel
verwendet wird;
-
3A ein
Blockdiagramm eines Prozesses ist, der in einem Ausführungsbeispiel
verwendet wird, um eine Operation einer längsten Präfix-Übereinstimmung
unter Verwendung einer Baum-Bitmap durchzuführen;
-
3B–3C einen
Pseudocode von Prozessen veranschaulichen, die in einem Ausführungsbeispiel
verwendet werden, um Knoten zu einer Baum-Bitmap hinzuzufügen und aus dieser zu löschen;
-
4 ein
Blockdiagramm eines Ausführungsbeispiels
ist, das eine Baum-Bitmap-Datenstruktur erzeugt und/oder verwendet,
um eine Übereinstimmung
eines längsten
Präfix
zu bestimmen;
-
5 ein
Blockdiagramm eines Ausführungsbeispiels
ist, das eine Baum-Bitmap-Datenstruktur erzeugt und/oder verwendet,
um eine Übereinstimmung
eines längsten
Präfix
zu bestimmen;
-
6A Suchanfrage-
und Ergebnismeldungsformate veranschaulicht, die in einem Ausführungsbeispiel
verwendet werden;
-
6B ein
Format von Knotendatenelementen veranschaulicht, die in einem Ausführungsbeispiel
verwendet werden;
-
6C einen
Prozess darstellt, der in einem Ausführungsbeispiel verwendet wird,
um eine Adresse eines nächsten
relevanten Knotens oder Elements in einem Ausführungsbeispiel einer Baum-Bitmap-Datenstruktur
zu bestimmen;
-
7 einen
Prozess veranschaulicht, der in einem Ausführungsbeispiel verwendet wird,
um Daten aus einem empfangenen Paket oder anderen Informationen
zu extrahieren, solche Daten zu einem Baum-Bitmap-System weiterzuleiten
und das empfangene Paket oder andere Informationen gemäß einem
vom Baum-Bitmap-System empfangenen Ergebnis zu verarbeiten; und
-
8A–8D Prozesse
darstellen, die in einem Ausführungsbeispiel
verwendet werden, um eine Baum-Bitmap-Operation eines längsten Präfix oder
eine andere Lookup-Operation durchzuführen.
-
AUSFÜHRLICHE BESCHREIBUNG
-
Verfahren
und Vorrichtungen zum Erzeugen und Verwenden von verbesserten Baum-Bitmap-Datenstrukturen
beim Bestimmen einer längsten
Präfix-Übereinstimmung
wie z.B. in einem Router, einem Paketvermittlungssystem oder einer
anderen Kommunikations- oder Computerkomponente, -vorrichtung oder
einem anderen Kommunikations- oder Computersystem werden offenbart.
Die hier beschriebenen Ausführungsbeispiele
umfassen verschiedene Elemente und Begrenzungen, wobei kein Element
oder keine Begrenzung als kritisches Element oder kritische Begrenzung
betrachtet wird. Jeder der Ansprüche
führt individuell
einen Aspekt der Erfindung in ihrer Gesamtheit an. Darüber hinaus können einige
beschriebene Ausführungsbeispiele unter
anderem Systeme, Netze, integrierte Schaltungschips, eingebettete
Prozessoren, ASICs, Verfahren und computerlesbare Medien, die Befehle
enthalten, umfassen, sind jedoch nicht auf diese begrenzt. Die nachstehend
beschriebenen Ausführungsbeispiele
verkörpern
verschiedene Aspekte und Konfigurationen innerhalb des Schutzbe reichs und
Gedankens der Erfindung, wobei die Figuren beispielhafte und nicht-begrenzende
Konfigurationen veranschaulichen.
-
So,
wie er hier verwendet wird, bezieht sich der Begriff "Paket" auf Pakete aller
Arten oder irgendwelche anderen Informations- oder Dateneinheiten, einschließlich, jedoch
nicht begrenzt auf Zellen mit fester Länge und Pakete mit variabler
Länge,
von denen jedes in kleinere Pakete oder Zellen unterteilbar sein
kann oder nicht. Der Begriff "Paket", so, wie er hier
verwendet wird, bezieht sich auch auf sowohl das Paket selbst als
auch auf eine Paketangabe, wie z.B. jedoch nicht begrenzt auf alles
oder einen Teil eines Pakets oder Paket-Header, einen Datenstrukturwert,
einen Zeiger oder Index oder irgendeinen anderen Teil oder eine
Identifikation eines Pakets. Überdies
können
diese Pakete eine oder mehrere Arten von Informationen enthalten,
einschließlich,
jedoch nicht begrenzt auf Sprach-, Daten-, Video- und Audioinformationen.
Der Begriff "Datenelement" wird hier verwendet,
um sich auf ein Paket oder irgendeine andere Einheit oder ein Stück von Informationen
oder Daten zu beziehen.
-
Der
Begriff "System" wird hier allgemein
verwendet, um eine beliebige Anzahl von Komponenten, Elementen,
Untersystemen, Vorrichtungen, Paketvermittlungselementen, Paketvermittlungsstellen, Routern,
Netzen, Computer- und/oder
Kommunikationsvorrichtungen oder -mechanismen oder Kombinationen
von Komponenten davon zu beschreiben. Der Begriff "Computer" wird hier allgemein
verwendet, um eine beliebige Anzahl von Computern zu beschreiben,
einschließlich,
jedoch nicht begrenzt auf Personal Computer, eingebettete Prozessoren
und Systeme, eine Steuerlogik, ASICs, Chips, Arbeitsplatzrechner,
Großrechner,
usw.. Der Begriff "Vorrichtung" wird hier allgemein
verwendet, um jede Art von Mechanismus, einschließlich eines
Computers oder Systems oder einer Komponente davon, zu beschreiben.
Die Begriffe "Aufgabe" und "Prozess" werden hier allgemein
verwendet, um eine beliebige Art von laufendem Programm zu beschreiben,
einschließlich, jedoch
nicht begrenzt auf einen Computerprozess, eine Computeraufgabe,
einen Computer-Thread, eine
Ausführungsanwendung,
ein Betriebssystem, einen Anwenderprozess, einen Vorrichtungstreiber, einen
nativen Code, eine Maschinen- oder andere Sprache, usw., und kann
interaktiv und/oder nicht interaktiv sein, lokal und/oder entfernt
ausführen,
im Vordergrund und/oder im Hintergrund ausführen, in den Anwender- und/oder
Betriebssystem-Adressenräumen
ausführen,
eine Routine einer Bibliothek und/oder eine eigenständige Anwendung
sein, und ist nicht auf irgendein spezielles Speicherpartitionierungsverfahren
begrenzt. Die Schritte, Verbindungen und Verarbeitung von Signalen
und Informationen, die in den Figuren veranschaulicht sind, einschließlich, jedoch
nicht begrenzt auf irgendwelche Block- und Ablaufdiagramme und Nachrichtensequenzdiagramme,
können
in derselben oder in einer anderen seriellen oder parallelen Reihenfolge
und/oder durch unterschiedliche Komponenten und/oder Prozesse, Threads,
usw. und/oder über
unterschiedliche Verbindungen durchgeführt werden und mit anderen Funktionen
in anderen Ausführungsbeispielen
kombiniert werden, wobei am Schutzbereich und Gedanken der vorliegenden
Erfindung festgehalten wird.
-
Darüber hinaus
werden die Begriffe "Netz" und "Kommunikationsmechanismus" hier allgemein verwendet,
um ein oder mehrere Netze, Kommunikationsmedien oder Kommunikationssysteme
zu beschreiben, einschließlich,
jedoch nicht begrenzt auf das Internet, private oder öffentliche
Telefon-, zellulare, drahtlose, Satelliten-, Kabel-, lokale, Stadtbereichs-
und/oder Weitbereichs-Netze, ein Kabel, eine elektrische Verbindung,
einen Bus usw. und interne Kommunikationsmechanismen wie z.B. Nachrichtenleitung,
Kommunikationen zwischen Prozessen, einen gemeinsam genutzten Speicher,
usw..
-
Der
Begriff "Speichermechanismus" umfasst eine beliebige
Art von Speicher, Speichervorrichtung oder einen anderen Mechanismus
zum Halten von Befehlen oder Daten in einem beliebigen Format. Ein "computer-lesbares
Medium" ist ein
erweiterbarer Begriff, der irgendeinen Speicher, eine Speichervorrichtung,
einen Speichermechanismus und andere Speicher- und Signalisierungsmechanismen
umfasst, einschließlich
Schnittstellen und Vorrichtungen wie z.B. Netzschnittstellenkarten
und Puffer darin, sowie irgendwelche Kommunikationsvorrichtungen und
Signale, die empfangen und gesendet werden, und andere aktuelle
und sich entwickelnde Technologien, die ein computergestütztes System
interpretieren, empfangen und/oder senden kann. Der Begriff "Speicher" umfasst irgendeinen
Direktzugriffsspeicher (RAM), Festwertspeicher (ROM), Flash-Speicher,
integrierte Schaltungen und/oder andere Speicherkomponenten oder
-elemente. Der Begriff "Speichervorrichtung" umfasst beliebige
Festkörper-Speichermedien,
Plattenlaufwerke, Disketten, vernetzte Diens te, Bandlaufwerke und
andere Speichervorrichtungen. Speicher und Speichervorrichtungen
können von
einem Computer ausführbare
Befehle, die von einem Prozessor und/oder einer Steuerlogik ausgeführt werden
sollen, und Daten speichern, die von einem Prozessor und/oder einer
Steuerlogik manipuliert werden. Der Begriff "Datenstruktur" ist ein erweiterbarer Begriff, der
sich auf irgendein Datenelement, irgendeine Variable, irgendeine
Datenstruktur, irgendeine Datenbank und/oder ein oder mehrere Organisationsschemen
bezieht, die auf Daten angewendet werden können, um die Interpretation
der Daten oder das Durchführen
von Operationen an diesen zu erleichtern, wie z.B., jedoch nicht
begrenzt auf Speicherstellen oder -vorrichtungen, Sätze, Warteschlangen,
Bäume,
Halden (Heaps), Listen, verkettete Listen, Arrays, Tabellen, Zeiger,
usw.. Eine Datenstruktur wird typischerweise in einem Speichermechanismus
gehalten. Der Begriff "assoziativer
Speicher" bezieht
sich auf alle Arten von bekannten oder entwickelten assoziativen
Speichern, einschließlich, jedoch
nicht begrenzt auf adressierbare Speicher mit binärem oder
ternärem
Inhalt, Hash-Tabellen, TRIE oder andere Datenstrukturen, usw..
-
Der
Begriff "ein Ausführungsbeispiel" wird hier verwendet,
um auf ein spezielles Ausführungsbeispiel
zu verweisen, wobei sich jeder Verweis auf "ein Ausführungsbeispiel" auf ein anderes
Ausführungsbeispiel
beziehen kann, und die wiederholte Verwendung des Begriffes hier
beim Beschreiben von zugehörigen
Merkmalen, Elementen und/oder Begrenzungen stellt keinen kumulativen
Satz von zugehörigen
Merkmalen, Elementen und/oder Begrenzungen fest, die absolut jedes
Ausführungsbeispiel umfassen
muss, obwohl ein Ausführungsbeispiel
typischerweise alle diese Merkmale, Elemente und/oder Begrenzungen
umfassen kann. Außerdem umfasst
der Ausdruck "Einrichtung
zum xxx" typischerweise
ein computer-lesbares Medium, das vom Computer ausführbare Befehle
zum Durchführen
von xxx enthält.
-
Außerdem werden
die Begriffe "erstes", "zweites", usw. typischerweise
hier verwendet, um verschiedene Einheiten (z.B. ein erstes Element,
ein zweites Element) zu bezeichnen. Die Verwendung dieser Begriffe
hier schließt
nicht notwendigerweise eine Reihenfolge ein, wie z.B. eine Einheit
oder ein Ereignis, die/das vor dem anderen stattfindet oder kommt,
sondern stellt vielmehr einen Mechanismus zum Unterscheiden zwischen
speziellen Einheiten bereit. Überdies
werden die Ausdrücke "auf der Basis von
x" und "in Reaktion auf x" verwendet, um einen minimalen
Satz von Datenelementen x anzugeben, von dem etwas abgeleitet oder
durch den etwas verursacht wird, wobei "x" erweiterbar
ist und nicht notwendigerweise eine vollständige Liste von Datenelementen
beschreibt, an denen die Operation durchgeführt wird, usw.. Außerdem wird
der Ausdruck "gekoppelt
mit" verwendet,
um ein gewisses Niveau an direkter oder indirekter Verbindung zwischen
zwei Elementen oder Vorrichtungen anzugeben, wobei die Kopplungsvorrichtung
oder -vorrichtungen das gekoppelte Signal oder die übertragenen
Informationen modifiziert/modifizieren oder nicht modifiziert/nicht modifizieren.
Der Begriff "Teilmenge" wird verwendet, um
eine Gruppe von allen oder weniger als allen der Elemente einer
Menge anzugeben. Überdies
wird der Begriff "oder" hierin verwendet,
um eine alternative Auswahl von einem oder mehreren, einschließlich allen
der konjunktiven Datenelementen anzugeben.
-
Verfahren
und Vorrichtungen zum Erzeugen und Verwenden einer verbesserten Baum-Bitmap-Datenstruktur
beim Bestimmen einer Übereinstimmung
eines längsten
Präfix,
wie z.B. in einem Router, einem Paketvermittlungssystem, werden
offenbart. Ein Ausführungsbeispiel
organisiert die Baum-Bitmap,
um die Anzahl von internen Knoten zu minimieren, auf die während einer Lookup-Operation
zugegriffen werden muss. Ein Zeiger ist in jedem der Trie- oder
Suchknoten auf den besten übereinstimmenden
Eintrag im Blatt- oder Ergebnis-Array des Vaters enthalten, was
einen direkten Zugriff auf dieses Ergebnis ermöglicht, ohne einen entsprechenden
internen Knoten analysieren zu müssen. Überdies
speichert ein Ausführungsbeispiel den
internen Knoten für
ein spezielles Level als erstes Element in seinem Sohn-Array. Außerdem verwendet
ein Ausführungsbeispiel
eine Universal-Lookup-Maschine, die mehrere Baum-Bitmaps oder andere
Datenstrukturen simultan durchlaufen kann und vollständige Suchen,
teilweise Suchen durchführen
kann und teilweise Suchen wiederaufnehmen kann, wie z.B. nach dem
Empfang von zusätzlichen
Daten, in denen zu suchen ist.
-
Ein
Ausführungsbeispiel
umfasst eine Verbesserung an der Baum-Bitmap-Datenstruktur und den zugehörigen Lookup-
und Aktualisierungsschemen. Diese verbessern typischerweise die Lookup-Leistung
und können
einen Speicherzugriff für
bestimmte Hardwareausführungsbeispiele
einsparen. Ein Ausführungsbeispiel
organisiert die Baum-Bitmap in einer solchen Weise, dass höchstens
ein Zugriff auf einen internen Knoten pro Lookup erforderlich ist.
Ein Ausführungsbeispiel
modifiziert zum Beispiel die Baum-Bitmap-Struktur so, dass vermieden
wird, dass auf den internen Knoten I2 in der Zugriffsequenz S1,
S2, S3, I3, I2 und L2 (d.h., der vorher in Bezug auf 1E beschriebenen
Sequenz) zugegriffen werden muss. In diesem Beispiel und auch mit
Bezug auf 1E wird der übereinstimmende Blattknoten
L2 (116A) nach dem Analysieren der internen Bitmap in I2
(115) bestimmt. Eine Analyse dieser Zugriffssequenz führt zu der
Beobachtung, dass für
jedes Lookup, das durch den Knoten S3 (113) läuft, das
anschließende
Analysieren der internen Bitmap I2 (115) immer denselben übereinstimmenden
Blattknoten L2 (116) ergibt. In einem Ausführungsbeispiel
werden folglich eine neue Baum-Bitmap-Datenstruktur und zugehörige Lookup- und
Aktualisierungsschemen verwendet, um das Analysieren der internen
Bitmap in I2 (122) in dieser beispielhaften Lookup-Sequenz zu vermeiden.
-
Ein
Ausführungsbeispiel
verwendet eine Datenstruktur, die einen ersten Suchknoten, ein erstes Sohn-Array
mit einem ersten internen Knoten und einem zweiten Suchknoten und
ein erstes Blatt-Array mit mehreren ersten Blatt-Array-Einträgen verwendet. Typischerweise
umfasst der erste Suchknoten einen Zeiger auf das erste Sohn-Array,
der erste interne Knoten umfasst einen Zeiger auf das erste Blatt-Array;
und der zweite Suchknoten umfasst einen Zeiger auf einen der mehreren
ersten Blatt-Array-Einträge.
-
In
einem Ausführungsbeispiel
ist der erste interne Knoten das erste Element des ersten Sohn-Array.
In einem Ausführungsbeispiel
geben der Zeiger des ersten internen Knotens und der Zeiger des
zweiten Suchknotens verschiedene erste Blatt-Array-Einträge an. In
einem Ausführungsbeispiel
umfasst die Datenstruktur ferner ein zweites Sohn-Array, wobei der
zweite Suchknoten einen Zeiger auf das zweite Sohn-Array umfasst.
In einem Ausführungsbeispiel umfasst
die Datenstruktur ferner ein zweites Blatt-Array mit mehreren zweiten
Blatt-Array-Einträgen,
wobei das zweite Sohn-Array einen zweiten internen Knoten umfasst,
wobei der zweite interne Knoten einen Zeiger auf das zweite Blatt-Array
umfasst. In einem Ausführungsbeispiel
ist der zweite interne Knoten das erste Element des zweiten Sohn-Array.
In einem Ausführungsbeispiel
umfasst das zweite Sohn-Array einen dritten Such- oder Endknoten,
wobei der zweite Such- oder Endknoten einen Zeiger auf einen von
mehreren zweiten Blatt-Array-Einträgen umfasst. In einem Ausführungsbeispiel
geben der Zeiger des zweiten internen Knotens und der Zeiger des
dritten Such- oder Endknotens verschiedene zweite Blatt-Array-Einträge an. In
einem Ausführungsbeispiel
stellt der erste Suchknoten eine Schrittweite (stride) einer ersten
Länge dar
und der zweiten Suchknoten stellt eine Schrittweite einer zweiten Länge dar,
wobei die erste und die zweite Länge
unterschiedlich sind. In einem Ausführungsbeispiel umfasst der
erste Suchknoten einen ersten Indikator der ersten Länge und
der zweite Suchknoten umfasst einen zweiten Indikator der zweiten
Länge.
-
Ein
Ausführungsbeispiel
durchläuft
eine baumartige Datenstruktur, die mehrere Präfixe darstellt, die in mehrere
Schrittweiten einer Anzahl von Baum-Levels unterteilt sind, die größer sind
als Eins, wobei jede der mehreren Schrittweiten durch eine Baum-Bitmap
dargestellt wird und Angaben von Sohn-Pfaden durch eine erweiterte
Bitmap dargestellt werden. In einem Ausführungsbeispiel wird ein Suchknoten
auf einem aktuellen Level innerhalb der baumartigen Datenstruktur
bzw. Baumdatenstruktur empfangen. Eine Kennung der aktuell besten Übereinstimmung
wird in Reaktion auf die Feststellung, ob eine neue beste Übereinstimmung
existiert, aktualisiert. In eine Bitmap, die das aktuelle Level
erweitert, wird bei der Feststellung indiziert, ob ein übereinstimmender
Knoten des nächsten
Level existiert oder nicht. In einem Ausführungsbeispiel wird dieser Durchlauf
wiederholt, bis ein übereinstimmender Knoten
des nächsten
Level nicht existiert, und dann wird der durch den Suchknoten des
aktuellen Level angegebene Knoten wiedergewonnen und ein Suchergebnis
wird auf der Basis der Kennung der aktuell besten Übereinstimmung
oder auf der Basis eines Zeigers im Suchknoten des aktuellen Levels
auf einen Blattknoten identifiziert. In einem Ausführungsbeispiel
wird in Reaktion auf die Feststellung, dass der Suchknoten auf dem
aktuellen Level nicht existiert, in einen Endknoten indiziert, um
das Suchergebnis zu identifizieren. In einem Ausführungsbeispiel
wird die Kennung der aktuell besten Übereinstimmung auf der Basis
eines Zeigers in dem Endknoten aktualisiert.
-
Ein
Ausführungsbeispiel
durchläuft
eine Baumdatenstruktur, die in einem oder mehreren computer-lesbaren
Medium/Medien gespeichert ist, auf der Basis eines Eingangssuchdatenstrangs.
Typischerweise wird ein Suchprogessionskontext eines teilweise beendeten
Baumdurchlaufs empfangen, wobei der Suchprogessionskontext typischerweise eine
Adresse eines nächsten
Kno tens oder irgendeinen anderen Knotenindikator umfasst. Der Durchlauf der
Baumdatenstruktur wird ab diesem Knoten für einen nächsten Abschnitt des Eingangsstrangs
wieder aufgenommen. Ein Ausführungsbeispiel
verteilt eine Lookup-Anfrage, die typischerweise die Adresse des nächsten Knotens
umfasst, zu einer von mehreren Speichervorrichtungen. Ein Lookup-Ergebnis
wird von einer der mehreren Speichervorrichtungen empfangen, wobei
das Lookup-Ergebnis
einen Suchknoten umfasst. Ein Kennung der aktuell besten Übereinstimmung
wird in Reaktion auf die Feststellung, ob eine neue beste Übereinstimmung
existiert, aktualisiert. In eine erweiterte Bitmap des aktuellen
Level des Suchknotens wird indiziert, um festzustellen, ob ein übereinstimmender
Knoten des nächsten
Level existiert oder nicht. Ein neuer Wert der Adresse des nächsten Knotens
wird erzeugt, wie es auch ein neuer Wert für den Suchprogessionskontext
wird.
-
In
einem Ausführungsbeispiel
umfasst der Suchprogessionskontext ferner eine Angabe der besten Übereinstimmung
und eine Länge
eines verwendeten Eingangssuchdatenstrangs. In einem Ausführungsbeispiel
umfasst die Angabe der besten Übereinstimmung
ein Übereinstimmungs-Flag
und einen Blattzeiger (leaf pointer). In einem Ausführungsbeispiel
sind mehrere baumartigen bzw. Baumdatenstrukturen in den computer-lesbaren
Medien gespeichert, und diese baumartigen Datenstrukturen können simultan
durchlaufen werden.
-
Eine
Vorrichtung eines Ausführungsbeispiels zum
Durchlaufen von Knoten einer oder mehrerer baumartigen bzw. Baumdatenstrukturen
auf der Basis eines Eingangsdatenstrangs umfasst einen Baum-Bitmap-Mechanismus
für die
nächste
Adresse zum Bestimmen einer Speicheradresse eines nächsten Knotens
einer speziellen Baumdatenstruktur von einer oder mehreren Baumdatenstrukturen,
wobei der nächste
Knoten einem Abschnitt des Eingangsdatenstrangs entspricht, mehrere
Speichervorrichtungen zum Speichern von einer oder mehreren Baumdatenstrukturen
und zum Zurückführen des nächsten Knotens
in Reaktion auf eine Wiedergewinnungsanfrage; und einen Speichermanager,
der mit dem Baum-Bitmap-Mechanismus für die nächste Adresse und den mehreren
Speichervorrichtungen gekoppelt ist, zum Verteilen der Wiedergewinnungsanfrage
zu einer der mehreren Speichervorrichtungen. Typischerweise umfasst
jede von einer oder mehreren Baumdatenstrukturen einen ersten Suchknoten,
ein erstes Sohn-Array mit einem ersten internen Knoten und einem zweiten
Suchknoten, und ein erstes Blatt-Array mit mehreren ersten Blatt-Array-Einträgen. In
einem Ausführungsbeispiel
umfasst der erste Suchknoten einen Zeiger auf das erste Sohn-Array,
der erste interne Knoten umfasst einen Zeiger auf das erste Blatt-Array;
und der zweite Suchknoten umfasst einen Zeiger auf einen der mehreren
ersten Blatt-Array-Einträge.
-
In
einem Ausführungsbeispiel
umfassen eine oder mehrere Baumdatenstrukturen Knoten von mindestens
zwei verschiedenen Bäumen.
In einem Ausführungsbeispiel
bestimmt die nächste
Adresse der Baum-Bitmap ferner eine der mehreren Speichervorrichtungen
und stellt eine Angabe von einer der mehreren Speichervorrichtungen
zum Speichermanager bereit. In einem Ausführungsbeispiel umfasst der nächste Knoten
eine Angabe von einer speziellen der mehreren Speichervorrichtungen,
wobei der Speichermanager die Wiedergewinnungsanfrage zu der speziellen
der mehreren Speichervorrichtungen verteilt. In einem Ausführungsbeispiel
umfassen die mehreren Speichervorrichtungen eine erste Speichervorrichtung
eines ersten Typs und eine zweite Speichervorrichtung eines zweiten
Typs, wobei der erste und der zweite Typ unterschiedlich sind. In
einem Ausführungsbeispiel
speichert der erste Speichertyp einen Knoten eines ersten Level
für jede
der Baumdatenstrukturen.
-
2A veranschaulicht
ein solches Ausführungsbeispiel
mit Suchknoten S1 (211), S2 (212) und S3 (213),
internen Knoten I1 (221), I2 (224) und I3 (214)
und Blatt-Arrays LA1 (222), LA2 (215), LA3 (223),
Blattknoten L1 (222A–B),
L2 (215A–B)
und L3 (223A–B)
und ihre Verbindungen miteinander durch Zeiger. Es sei angemerkt,
dass die in durchgezogenen Linien dargestellten Knoten die Knoten
sind, auf die während
eines nachstehend beschriebenen Baum-Bitmap-Lookup-Beispiels zugegriffen
wird. Wie ebenfalls in 2A gezeigt ist, zeigen die Zeiger 220, 230 und 240 direkt
von ihren jeweiligen Suchknoten 212, 213 und 225 auf
einen Blattknoten 222A, 215A und 223B des
Vaters (entsprechend dem Eintrag der besten Übereinstimmung). Es sei auch
angemerkt, dass 2A nur einen Pfad zeigt, während Suchknoten
andere Pfade auf unterschiedliche Blattknoten (222A–B, 215A–B, 223A–B) innerhalb
der Blatt-Arrays (222, 215, 223) zeigen.
In einem Ausführungsbeispiel
ist zur Steuerzeit (z.B. wenn die Baum-Bitmap programmiert wird)
bekannt, dass das Blatt L2 (215A) die dem Knoten S3 (213)
entsprechende längste Übereinstimmung
enthält.
Durch direktes Speichern eines Zeigers auf den Blattknoten L2 (215A) im
Knoten S3 (213) muss somit dann auf I2 (224) nicht
zugegriffen werden, bevor auf das Blatt L2 (215) in der
vorstehend erwähnten
Zugriffssequenz zugegriffen wird.
-
In
einem Ausführungsbeispiel
umfassen der Suchknoten S1 (211), S2 (212), S3
(213) bzw. S4 (225) jeweils einen parent_best_leaf_pointer
(Zeiger auf bestes Vater-Blatt) (210, 220, 230 und 240)
auf das beste übereinstimmende
Blatt in ihrem entsprechenden Vater-Blatt-Array. Gezeigt sind der
Suchknoten S2 (212) mit dem Zeiger 220 auf den
Blattknoten L1 (222A) im Blatt-Array LA1 (222),
der Suchknoten S3 (213) mit dem Zeiger 230 auf
den Blattknoten L2 (215A) im Blatt-Array LA2 (215)
und der Suchknoten S4 (225) mit dem Zeiger 240 auf
den Blattknoten L3 (23B) im Blatt-Array LA3 (223).
In einem Ausführungsbeispiel
gibt ein parent_best_leaf_pointer von Null an, dass kein aktualisiertes
derartiges längstes übereinstimmendes
Präfix
im Vaterknoten vorhanden ist.
-
In
bestimmten Ausführungsbeispielen
ist das Minimieren der Größe eines
Knotens sehr wichtig. In einem Ausführungsbeispiel wird Raum in
einem Suchknoten von früheren
Baum-Bitmap-Implementierungen zurückgewonnen, indem der Zeiger
des internen Knotens in einem Suchknoten befreit wird und indem
der interne Knoten als erster Knoten im Sohn-Array angeordnet wird.
Dann kann auf einen internen Knoten durch einen Sohn-Zeiger im Suchknoten
zugegriffen werden und der befreite Zeigerraum des internen Knotens
in der Knotenstruktur eines Suchknotens (von einer früheren Implementierung) wird
verwendet, um den Zeiger auf den besten übereinstimmenden Blattknoten
im Vater-Blatt-Array zu speichern. Mit Bezug auf das Beispiel wird
der Zeiger 235 des internen Knotens in S3 (d.h., S3 → I3) durch die
Verbindung S3 → L2
(230) ausgetauscht, wobei L2 die längste Übereinstimmung in dem Level
2 entsprechend S3 (213) ist.
-
2B veranschaulicht
ein Ausführungsbeispiel
einer neuen Baum-Bitmap-Datenstruktur.
Wie gezeigt ist, ist der interne Knoten als das erste Element im
Sohn-Array des Suchknotens angeordnet. Daher wird auf die Söhne sowie
den internen Knoten unter Verwendung desselben Zeigers zugegriffen. Der
interne Knoten I1 (261) ist zum Beispiel das erste Element
des Sohn-Array 260 und der interne Knoten I2 (281)
ist das erste Element des Sohn-Array 280.
-
Genauer
umfasst der Suchknoten S1 (250) einen Zeiger 256 auf
das Sohn-Array 260, das den internen Knoten I1 (261)
und die Sohnelemente 265 umfasst. Der interne Knoten I1
(261) umfasst einen Zeiger 267 auf das Blatt-Array LA1 (270),
der null oder mehr Elemente umfassen kann, einschließlich des
Elements Blattknoten L1 (271), der in diesem Beispiel das
beste Blatt-Vater-Ergebnis
für den
Suchknoten S2 (262) ist. Es sei angemerkt, dass die Sohnelemente 265 den
Suchknoten S2 (262) umfassen, der einen Zeiger 268 direkt
auf den Blattknoten L2 271 umfasst. Für ein leichtes Verständnis des
Lesers sei angemerkt, dass eine Reihe von Punkten in den Sohnelementen 265 und
im Blatt-Array LA1
(270) verwendet wird, um mehr mögliche Suchknoten in den Sohnelementen 265 und
den Zeigern auf Einträge
im Blatt-Array LA1 (270) darzustellen. Der Suchknoten S2
(262) umfasst auch einen Zeiger 266 auf das Sohn-Array 280,
das den internen Knoten I2 (281) und die Sohnelemente 285 umfasst,
einschließlich
des Endknotens E3 (282). Der interne Knoten I2 (281)
umfasst einen Zeiger 277 auf das Blatt-Array LA2 (290).
Der Endknoten E3 (282) umfasst einen Zeiger 288 direkt
auf den Blattknoten L2 (291), der das beste Blatt-Vater-Ergebnis
für den Endknoten
E3 (282) ist.
-
Wenn
ein Ausführungsbeispiel
in verallgemeinerten Begriffen beschrieben wird, wird auf den internen
Knoten Ik des Suchknotens Sk nur
dann zugegriffen, wenn Sk nicht Präfixe für einen
speziellen Lookup erweitert. Wenn Sk Präfixe erweitert,
dann muss auf Ik niemals zugegriffen werden.
Mit anderen Worten, in einem Ausführungsbeispiel ist es niemals der
Fall, dass sowohl auf Ik als auch Sk+1 beim gleichen Lookup zugegriffen werden
muss. Daher können
sowohl Ik als auch Sk+1 typischerweise
im gleichen Speichermodul angeordnet sein. In einem Ausführungsbeispiel
wird an die Adresse Ik des internen Knotens beim Lookup erinnert,
wenn das Flag "parent_has_match" im Suchknoten Sk+1 auf dem nächsten Level gesetzt ist. Wenn "parent_best_leaf-pointer" in Sk+1 nicht
Null ist, zeigt er mit diesem neuen Schema direkt auf den Blattknoten
auf dem Level "k", welches das längste übereinstimmende
Präfix
ist. In einem Ausführungsbeispiel würden die
obigen Knotenstrukturmodifikationen für alle Baum-Bitmap-Knoten außer den
internen Knoten und Blattknoten gelten.
-
3A veranschaulicht
einen Prozess, der in einem Ausführungsbeispiel
verwendet wird, um ein Lookup bei einer Baum-Bitmap durchzuführen. Die Verarbeitung
beginnt mit dem Prozessblock 300 und geht zum Prozessblock 302 weiter,
in dem die Suche mit dem Wurzelknoten auf dem Level k=0 beginnt. Als
nächstes
wird im Prozessblock 304 das current_best_leaf (aktuell
bestes Blatt) auf Null=0 initialisiert (d.h., bisher keine Übereinstimmung)
und der parent_best_leaf_pointer wird auf Null=0 initialisiert (d.h.,
bisher keine Übereinstimmung).
-
Wie
im Prozessblock 306 bestimmt, wird als nächstes,
wenn der aktuelle Knoten ein Suchknoten Sk ist
(z.B. kein Endknoten Ek), dann, wie im Prozessblock 308 bestimmt,
wenn der parent_best_leaf_pointer in Sk nicht
Null ist, im Prozessblock 310 das current_best_leaf auf
den Wert von parent_best_leaf_pointer gesetzt.
-
Im
Prozessblock 312 wird als nächstes in die "erweiternde Bitmap" von Sk unter
Verwendung der nächsten
paar Bits vom Lookup-Schlüssel
in Abhängigkeit
von der Schrittweite indiziert. Wenn, wie im Prozessblock 314 bestimmt,
Sk Präfixe
erweitert, dann wird im Prozessblock 316 die Adresse des
Knotens des nächsten
Level im Sohn-Array (typischerweise einschließlich einer Einstellung, um
zu berücksichtigen,
dass der interne Knoten Ik der erste Knoten in
dem Sohn-Array ist) berechnet. Als nächstes wird im Prozessblock 318 der
Knoten auf dem Level k+1 wiedergewonnen und die Verarbeitung kehrt
zum Prozessblock 306 zurück.
-
Ansonsten
wird, wenn Sk keine Präfixe erweitert (wie im Prozessblock 314 bestimmt),
dann im Prozessblock 320 der interne Knoten Ik wiedergewonnen,
wobei Ik das erste Element im Sohn-Array von
Sk ist. Wenn, wie im Prozessblock 322 bestimmt, ein
längstes übereinstimmendes
Präfix
in Ik vorhanden ist, indem die interne Bitmap
analysiert wird, dann wird im Prozessblock 324 das Ergebnis
vom Blattknoten auf dem Level k wiedergewonnen und die Verarbeitung
ist vollständig,
wie durch den Prozessblock 338 angegeben ist. Ansonsten
wird im Prozessblock 326 das Ergebnis unter Verwendung
des gespeicherten current_best_leaf wiedergewonnen, um direkt auf
das Blatt zuzugreifen, das dem bisher längsten Präfix entspricht, und die Verarbeitung
ist vollständig,
wie durch den Prozessblock 338 angegeben wird.
-
Ansonsten
wurde im Prozessblock 306 der aktuelle Knoten als ein Endknoten
bestimmt, und die Verarbeitung geht zum Prozessblock 330 weiter. Wenn,
wie im Prozessblock 330 bestimmt, der parent_best_leaf_pointer
in Ek nicht Null ist, dann wird das current_best_leaf
im Prozessblock 332 auf den Wert von parent_best_leaf_pointer
gesetzt.
-
Als
nächstes
wird, wie im Prozessblock 334 bestimmt, dann, wenn ein
längstes übereinstimmendes
Präfix
in Ek vorhanden ist, im Prozessblock 336 das
Ergebnis aus dem Blattknoten auf dem Level K wiedergewonnen, und
die Verarbeitung ist vollständig,
wie durch den Prozessblock 338 angegeben wird. Ansonsten
wird im Prozessblock 326 das Ergebnis unter Verwendung
des gespeicherten current_best_leaf wiedergewonnen, um direkt auf das
Blatt zuzugreifen, das dem bisher längsten Präfix entspricht, und die Verarbeitung
ist vollständig,
wie durch den Prozessblock 338 angegeben wird.
-
3B veranschaulicht
einen Prozess, der in einem Ausführungsbeispiel
verwendet wird, um die parent_best_leaf_pointers zu aktualisieren,
wenn Präfixe
in eine Baum-Bitmap-Datenstruktur eingefügt werden, wenn ein Blattknoten
hinzugefügt
wird. Pk soll das Präfix sein, das auf dem level
k eingefügt wird.
Sk soll der entsprechende Suchknoten sein. Setk+1 soll die Menge von denjenigen Knoten
im Sohn-Array von Sk sein, die die Abkömmlinge
von Pk sind. Mit anderen Worten, Pk ist ein Präfix aller Suchknoten im Setk +1. In einem Ausführungsbeispiel
ist Setk +1 die Menge
aller Knoten, in denen das Flag "parent_has_match" gesetzt werden muss,
wenn Pk eingefügt wird.
-
In
einem Software-Ausführungsbeispiel
werden die folgenden zusätzlichen
Variablen zusammen mit dem "parent_best_leaf_pointer" in jedem Suchknoten
aufrechterhalten. Es sei angemerkt, dass in einem Ausführungsbeispiel
diese nur in der Steuersoftware-Knotenstruktur und nicht in der
Hardwarestruktur erforderlich sind. Der bestleaf_offset (Sk +1) (Versatz des
besten Blattes) ist grundsätzlich
der Versatz des Blattes, auf das durch parent_best_leaf (Sk +1) (bestes Vaterblatt)
in seinem Blatt-Array gezeigt wird. Die "bestleaf_length" (Länge
des besten Blattes) ist die Länge
des Präfix,
auf das durch parent_best_leaf (Sk+1) gezeigt
wird.
-
Das
Folgende sind die Definitionen von Begriffen/Funktionen/Variablen,
die in dem in 3B dargestellten Pseudocode
verwendet werden. Children_array (Sk) (Sohn-Array)
ist der Sohn-Arrayzeiger des Suchknotens Sk.
Bestleaf_offset (Sk +1)
ist der Wert der Variablen "bestleaf_offset" nur der Software
des Suchknotens Sk+1. Parent_best_leaf (Sk +1) ist der Wert
des neu eingeführten "parent_best_leaf_pointer" im Suchknoten Sk +1. Bestleaf_length
(Sk +1) ist der Wert
der Variablen "bestleaf_length" nur der Software
des Suchknotens Sk+1. "New_leaf_array_base (Pk)
(Basis des neuen Blatt-Array) ist die Adresse der Stelle in der Baum-Bitmap,
wenn ein neues Präfix
in einem existierenden Blatt-Array eingefügt wird, in das das gesamte
Blatt-Array zusammen mit dem eingefügten Präfix Pk kopiert
wird.
-
Wie
in dem in 3B veranschaulichten Pseudocode
beschrieben ist, geht grundsätzlich
das eigentliche Einfügen
des Präfix
genauso vor sich wie frühere
Implementierungen, mit dem Hinzufügen der Aktualisierung der
parent_best_leaf_pointers in den Suchknoten des nächsten Level,
anstatt das Flag parent_has_match zu aktualisieren. Für eine Baum-Bitmap-Datenstruktur,
die in einem konsistenten Zustand mit allen parent_best_leaf_pointers
ist, die auf die korrekten Blätter
zeigen, zeigt der in 3B veranschaulichte Pseudocode,
wie alle parent_best_leaf_pointers nach dem Einfügen eines Präfix wieder
in einen konsistenten Zustand gebracht werden.
-
Wenn
ein neuer Suchknoten Sk +1 in
das Sohn-Array von Sk eingefügt wird
(z.B. wenn neue Zweige des Baumes infolge des Einfügens des
Präfix erzeugt
werden), muss außerdem
das parent_best_leaf (Sk +1)
bestimmt werden. Im Wesentlichen wird der Versatz des Blattknotens
im Blatt-Array Lk von Sk,
der das längste
Präfix
entsprechend Sk+1 ist, durch Analysieren
der internen Bitmap im internen Knoten Ik von
Sk bestimmt.
-
Außerdem müssen die parent_best_leaf_pointers
aktualisiert werden, wenn ein Präfix
gelöscht
wird. Pk soll das Präfix sein, das auf dem Level
k gelöscht
wird. Sk soll der entsprechende Suchknoten
sein. Setk+1 soll die Menge von denjenigen
Knoten im Sohn-Array von Sk sein, für die Pk das beste Blatt ist. 3C veranschaulicht
einen Prozess, der in einem Ausführungsbeispiel
verwendet wird, um die parent_best_leaf_pointers in den Sohnknoten
des Suchknotens zu aktualisieren, aus dem das Präfix gelöscht wird.
-
4 veranschaulicht
ein Ausführungsbeispiel
eines Systems 400, wie z.B., jedoch nicht begrenzt auf
ein Computer- oder Kommunikationssystem, zum Implementieren einer
Baum-Bitmap-Datenstruktur. In einem Ausführungsbeispiel verwendet das
System 400 eine solche Baum-Bitmap-Datenstruktur zum Bestimmen der Übereinstimmungen des
längsten
Präfix
gemäß der Erfindung.
In einem Ausführungsbeispiel
programmiert das System 400 eine andere Vorrichtung, wie
z.B. eine Durchlaufmaschine 500 (5), über die
Schnittstelle 404 mit einer Baum-Bitmap-Datenstruktur.
-
In
einem Ausführungsbeispiel
umfasst das System 400 einen Prozessor 401, einen
Speicher 402, Speichervorrichtungen 403 und wahlweise
eine Schnittstelle 404, die typischerweise über einen
oder mehrere Kommunikationsmechanismen 409 (für veranschaulichende
Zwecke als Bus gezeigt) gekoppelt sind. Verschiedene Ausführungsbeispiele
des Systems 400 können
mehr oder weniger Elemente umfassen. Der Betrieb des Systems 400 wird
typischerweise durch den Prozessor 401 unter Verwendung des
Speichers 402 und der Speichervorrichtungen 403 gesteuert,
um eine oder mehrere Zeitablausteueraufgaben oder -prozesse durchzuführen. Der
Speicher 402 ist ein Typ eines computer-lesbaren Mediums
und umfasst typischerweise einen Direktzugriffsspeicher (RAM), einen
Festwertspeicher (ROM), einen Flash-Speicher, integrierte Schaltungen und/oder
andere Speicherkomponenten. Der Speicher 402 speichert
typischerweise von einem Computer ausführbare Befehle, die vom Prozessor 401 ausgeführt werden
sollen, und/oder Daten, die vom Prozessor 401 manipuliert
werden, um eine Funktionalität
gemäß der Erfindung
zu implementieren. Die Speichervorrichtungen 403 sind ein
anderer Typ von computer-lesbarem Medium und umfassen typischerweise
Festkörper-Speichermedien, Plattenlaufwerke,
Disketten, vernetzte Dienste, Bandlaufwerke und andere Speichervorrichtungen.
Die Speichervorrichtungen 403 speichern typischerweise
von einem Computer ausführbare
Befehle, die vom Prozessor 401 ausgeführt werden sollen, und/oder
Daten, die vom Prozessor 401 manipuliert werden, um eine Funktionalität gemäß der Erfindung
zu implementieren.
-
5 veranschaulicht
ein Blockdiagramm eines Ausführungsbeispiels
zum Durchlaufen einer hierarchischen Datenstruktur, einschließlich, jedoch nicht
begrenzt auf eine Baum-Bitmap- oder andere Baumdatenstruktur. Eine
Anfragevorrichtung 501, wie z.B. ein Prozessor oder eine
andere Steuerlogik, erzeugt Lookup-Anfragen, die von der Durchlaufmaschine 500 empfangen
werden, und speichert sie im Anfragepuffer 512. Ein Wartungsprozessor 502 programmiert
die Durchlaufmaschine 500 mit einer oder mehreren Baum-Bitmap- und/oder
anderen Datenstrukturen, da die Durchlaufmaschine gleichzeitig verwendet
werden kann, um Suchen in mehreren und sogar unabhängigen Baum-Bitmap-
und/oder anderen Datenstrukturen durchzuführen. In einem Ausführungsbeispiel
entsprechen die Anfragevorrichtung 501 und/oder der Wartungsprozessor
dem System 400 (4). In einem Ausführungsbeispiel sind
die Anfragevorrichtung 501 und/oder der Wartungsprozessor 502 in
der Durchlaufmaschine 500 enthalten.
-
In
einem Ausführungsbeispiel
umfasst die Durchlaufmaschine 500 einen Anfragepuffer 512,
um Suchanfragen zu empfangen und zu Puffern, einen Speichermanager 520,
um Lese- und Schreiboperationen an der Speichervorrichtung und Steuerung 521–529 und
an dem SRAM und der Steuerung 530 zu steuern, wobei die
Ergebnisse zu einer Baum-Bitmap-Logik 514 für die nächste Adresse oder
eine Ausgabewarteschlange 535 gelenkt wird. Die Ausgabewarteschlange 535 kommuniziert
Suchergebnisse zur Anfragevorrichtung 501. Die Baum-Bitmap-Logik 514 für die nächste Adresse
verarbeitet Suchanfragen, die vom Anfragepuffer 512 empfangen
werden, und Zwischenergebnisse, die von den Speichervorrichtungen
und Steuerungen 521–529 und
vom SRAM und der Steuerung 530 empfangen werden, und bestimmt
möglicherweise die
Speicheradresse des nächsten
Knotens und leitet die Speicherleseanfrage zum Speichermanager 520 weiter.
-
Suchanfragen,
die von der Durchlaufmaschine 500 empfangen oder erzeugt
werden, können
einen vollständigen
oder teilweisen String (Strang) umfassen, auf dessen Basis ein längstes übereinstimmendes
Präfix
oder ein anderes Ergebnis zu finden ist. In einem Ausführungsbeispiel
umfasst die Durchlaufmaschine 500 beispielsweise die Fähigkeit,
auf der Basis eines ersten Abschnitts eines Lookup-Strangs zu suchen,
ein Ergebnis zurückzuführen und
dann die Suche auf der Basis des Ergebnisses und eines zusätzlichen
Abschnitts des Lookup-Strangs ab dort fortzusetzen, wo sie aufgehört wurde.
Außerdem
setzt in einem Ausführungsbeispiel
die Durchlaufmaschine 500 die Suche durch die Datenstruktur
fort, bis ein Ergebnis empfangen wird, Suchdaten ausgeschöpft sind
oder ein Stoppknoten (nachstehend weiter beschrieben) angetroffen
wird.
-
Formate,
die in einem Ausführungsbeispiel einer
Suchanfrage verwendet werden, sind in 6A gezeigt.
Die anfängliche
Suchanfrage 601 umfasst ein Suchtypen-Feld, das eine anfängliche (im
Gegensatz zu einer fortgesetzten) Suchanfrage angibt, und ein Suchdaten-Feld,
das Informationen enthält,
mit denen sie abgeglichen werden sollen. Die fortgesetzte Suchanfrage 602 umfasst
ein Suchtypen-Feld, das eine fortgesetzte Suche angibt, ein Startadressen-Feld, das angibt,
von wo aus die Suche wieder aufzunehmen ist, ein Suchdaten-Feld
mit einem zusätzlichen
Abschnitt des Lookup-Strangs, ein Flag für ein bisher gültiges Blatt
und ein Feld für einen
Zeiger auf das bisher beste Blatt, wobei dieses Flag angibt, ob
das Feld für
den Zeiger auf das bisher beste Blatt mit dem entsprechenden Zeiger
besetzt ist (was während
eines vorherigen Teils der Suche bestimmt worden ist).
-
6A veranschaulicht
zusätzlich
Formate, die in einem Ausführungsbeispiel
einer Suchantwort verwendet werden. Das Antwort-(fortgesetzte Suche)-Ergebnis 603 umfasst
ein Suchergebnistypen-Feld, ein Feld für die Adresse des nächsten Knotens,
ein Flag für
ein bisher gültiges
Blatt, ein Feld für einen
Zeiger auf das bisher beste Blatt und ein Feld für eine Länge von verwendeten Suchdaten.
Das Antwortergebnis (Blattzugriffsergebnis) 604 umfasst ein
Suchergebnistypen-Feld und das resultierende Blattknotendaten-Feld.
-
Eine
oder mehrere Baum-Bitmap- oder andere Datenstrukturen werden in
den Wartungsprozessor 502 (5) geladen
und können
von diesem wiedergewonnen werden, indem Anfragen zur Aktualisierungssteuerung 539 übermittelt
werden, die Aktualisierungsanfragen zum Speichermanager 520 sendet
und Informationen von Speichervorrichtungen und Steuerungen 521–529 und
vom SRAM und von der Steuerung 530 empfangen kann.
-
6B veranschaulicht
das Format von Knoten oder Datenstrukturelementen, die in einem Ausführungsbeispiel
verwendet werden. Der Such-/End-/Stopp-Knoten 611 umfasst
ein Knotentypenfeld, eine Sohn-Array-Clustergröße, die eine im aktuellen Knoten
verwendete Schrittweitengröße angibt,
so dass die Datenstruktur Schrittweiten und Knoten mit variablen
Längen
verwenden kann. Der Such-/End/-Stopp-Knoten 611 umfasst
ferner die erweiternde Bitmap, ein Sohn- (z.B. Sohn-Arrays) Zeiger-Feld,
einen Zeiger auf das bisher beste Blatt, ein Flag für die Existenz
eines internen Knotens und ein Fehlerkorrekturcode-Feld. Der interne
Knoten 612 umfasst ein Knotentypenfeld, ein Blatt-Array-Zeigerfeld,
ein Feld für
den Zeiger auf das bisher beste Blatt, ein internes Bitmap-Feld
und ein Fehlerkorrekturcode-Feld. Der Blattknoten 613 umfasst
ein Knotentypenfeld, ein Feld für
assoziative Rückführungsdaten
und ein Fehlerkorrekturcode-Feld. Der Überspringknoten 614 umfasst
ein Knotentypenfeld, ein Feld für
verglichene Daten, ein Feld für
eine verglichene Länge,
ein Feld für
das bisher beste Blatt, ein Sohn- (z.B. Sohn-Arrays) Zeiger-Feld
und ein Fehlerkorrekturcode-Feld.
-
Mit
Rückbezug
auf 5 werden Suchanfragen wie z.B., jedoch nicht begrenzt
auf diejenigen, die hier beschrieben werden, vom Anfragepuffer 512 empfangen.
Wenn die Speicheradresse des Knotens auf der Basis der empfangenen
Suchanfrage leicht erhältlich
ist, wird die Anfrage direkt zum Speichermanager 520 weitergeleitet.
Ansonsten wird die Anfrage zur Baum-Bitmap-Logik 514 für die nächste Adresse weitergeleitet,
in der die Speicheradresse berechnet wird. Es sei angemerkt, dass
die Baum-Bitmap-Logik 514 für die nächste Adresse auch Speicherleseergebnisse
empfängt
und die Speicheradresse des nächsten
Knotens berechnet oder das Speicherleseergebnis (z.B. Knoten) zur Ausgabewarteschlange 535 weiterleitet.
-
6C veranschaulicht
einen Prozess, der in einem Ausführungsbeispiel
verwendet wird, um die nächste
Adresse (z.B. die Adresse des relevanten nächsten Knotens oder Elements
in der Datenstruktur) zu berechnen oder zu bestimmen. Die Verarbeitung
beginnt mit dem Prozessblock 650 und geht zum Prozessblock 652 weiter,
in dem die aktuelle Schrittweitenlänge des nächsten Abschnitts des Lookup-Strangs
und die Sohn-Bitmap wiedergewonnen werden. Es sei angemerkt, dass
die Schrittweitenlänge
eines Eintrages in einem Ausführungsbeispiel
zwischen jedem Eintrag variieren kann. Überdies unterstützt ein
Ausführungsbeispiel
variierende Größen des
Sohn-Array, wobei diese Größe durch die
Sohn-Array-Clustergröße identifiziert
wird. Im Prozessblock 654 wird als nächstes die Anzahl von Einsen
in der Sohn-Bitmap des Eintrags bis zu der Position gezählt, die
dem Lookup-Strang entspricht. Folglich identifiziert diese Zählung, welches
Element das nächste
von Interesse ist. Im Prozessblock 656 wird die nächste Adresse
auf der Basis des Sohn-Zeigers plus der Zählung, multipliziert mit der Breite
eines Zeiger-Feldes, berechnet. Dann wird im Prozessblock 658 die
Lookup-Anfrage, einschließlich der
bestimmten nächsten
Adresse, Speicherbank und des zu verwendenden Kanals, zum Speichermanager
weitergeleitet und die Verarbeitung ist beendet, wie durch den Prozessblock 659 angegeben wird.
-
Die
Verarbeitung durch die Anfragevorrichtung 501 (5)
und die Durchlaufmaschine 500 wird durch die Ablaufdiagramme
weiter beschrieben, die in 7 und 8A–8D dargestellt
sind, denen wir uns nun zuwenden.
-
7 veranschaulicht
einen Prozess, der in einem Ausführungsbeispiel
durch die Anfragevorrichtung 501 (5) verwendet
wird. Die Verarbeitung beginnt mit dem Prozessblock 700 und
geht zum Prozessblock 702 weiter, in dem ein Paket oder
andere Informationen empfangen werden. Als nächstes wird im Prozessblock 704 eine
Speichersuchanfrage wie z.B. eine anfängliche Suchanfrage 601 (6A)
zur Durchlaufmaschine 500 (5) weitergeleitet.
Im Prozessblock 706 wird als nächstes das Ergebnis von der
Durchlaufmaschine 500 empfangen. Wie im Prozessblock 708 bestimmt,
kehrt die Verarbeitung dann, wenn die Suche nicht beendet ist (z.B.
es sind mehr Bits zur Durchlaufmaschine in einer Suchanfrage zu
liefern, wie etwa für
eine fortgesetzte Suchanfrage 602 von 6A),
zum Prozessblock 704 zurück, um die Suchanfrage zu erzeugen
und zu übertragen.
Ansonsten wird im Prozessblock 710 das Paket oder die anderen
Informationen auf der Basis des empfangenen Ergebnisses verarbeitet.
Die Verarbeitung ist für
diese Suche beendet, wie durch den Prozessblock 712 angegeben
ist.
-
Die 8A–8D veranschaulichen
einen Prozess, der in einem Ausführungsbeispiel
verwendet wird, um die Baum-Bitmap- oder eine andere Datenstruktur
zu durchlaufen. Die Verarbeitung beginnt mit dem Prozessblock 800 und
geht zum Prozessblock 802 weiter, in dem die anfängliche
oder fortgesetzte Suchanfrage empfangen wird. Als nächstes wird,
wie im Prozessblock 804 bestimmt, dann, wenn der erste
Speicherzugriff im SRAM und der Steuerung 530 durchgeführt werden
sollte, im Prozessblock 806 die SRAM-Lookup-Adresse bestimmt,
und die Speicherzugriffsanfrage (d.h., Lookup-Anfrage) wird im Prozessblock 808 zur
SRAM-Steuereinheit weitergeleitet, um den Speicherzugriff durchzuführen. Ansonsten
oder bei Fortsetzung über
das Verbindungselement 8A (811) wird die Lookup-Anfrage im
Prozessblock 810 zu einer der externen Speichervorrichtungen
auf der Basis irgendeines Verteilungsschemas für die Speichervorrichtungen,
das verfügbar
ist, weitergeleitet, um die Anfragen zu bedienen. In einem Ausführungsbeispiel
wird jede der einen oder mehreren Baum-Bitmap- oder anderen Datenstrukturen
in jedem der externen Speicher repliziert. In einem Ausführungsbeispiel
besetzen bestimmte der Baum-Bitmap-
oder anderen Datenstrukturen eine Teilmenge der externen Speicher.
-
Im
Prozessblock 812 wird als nächstes das Lookup-Ergebnis
empfangen. Wenn, wie im Prozessblock 814 bestimmt, das
Lookup-Ergebnis einen Überspringknoten
umfasst, dann geht die Verarbeitung über das Verbindungselement
8B (816) zum Verbindungselement 8B (830) in 8B weiter. Wenn,
wie im Prozessblock 818 bestimmt, das Lookup-Ergebnis einen
internen Knoten umfasst, dann geht die Verarbeitung ansonsten über das
Verbindungselement 8C (820) zum Verbindungselement 8C (850)
in 8C weiter. Wenn, wie im Prozessblock 822 bestimmt,
das Lookup-Ergebnis einen Blattknoten umfasst, dann wird ansonsten
im Prozessblock 824 der Rückführungswert des Lookup im Prozessblock 824 gesandt
und die Verarbeitung ist beendet, wie durch den Prozessblock 826 angegeben
ist. Ansonsten geht die Verarbeitung über das Verbindungselement
8D (828) zum Verbindungselement 8D (870) in 8D weiter.
-
Unter
Bezugnahme auf 8B fährt die Verarbeitung über das
Verbindungselement 8B (830) oder 8E (840) fort.
Beim Beginnen ab dem Verbindungselement 8B (830), wie im
Prozessblock 832 bestimmt, wird, wenn ein bestes Blatt
vorhanden ist, das dem aktuellen Knoten entspricht, dann dieses beste
Blatt als in der Suche bisher entdecktes aktuell bestes Blatt im
Prozessblock 834 gespeichert. Wie im Prozessblock 836 bestimmt,
entsprechen die im Überspringknoten
bereitgestellten Überspringbits den
nächsten
Datenbits des Lookup-Strangs, dann wird als nächstes im Prozessblock 838 die
spezifizierte Adresse im Überspringknoten
als der nächste Adresswert
verwendet, und die Verarbeitung kehrt über das Verbindungselement
8A (839) zum Verbindungselement 8A (811) in 8A zurück. Der Überspringknoten
ermöglicht,
dass ein String von Suchdaten mit einem programmierten String verglichen wird, der
einem oder mehreren Tries entsprechen kann und folglich verwendet
werden kann, um Speicherzugriffe und Lookup-Zeit zu sparen. Dieses Überspringknotenmerkmal
ist besonders nützlich, wenn
lange Strings im Lookup-Strang vorhanden sind, die nicht variieren,
wie z.B. bei einem IPv6-Lookup.
-
Ansonsten
oder bei Fortsetzung ausgehend vom Verbindungselement 8E (840)
wird, wenn eine beste Übereinstimmung
im Prozessblock 842 bestimmt wurde, dann dieser Wert der
besten Übereinstimmung
als die nächste
Adresse verwendet, und die Verarbeitung geht über das Verbindungselement 8A
(847) zum Verbindungselement 8A (811), 8A, weiter.
Ansonsten wurde kein Ergebnis einer besten Übereinstimmung aufgefunden
und das Ergebnis bezüglich
keiner Übereinstimmung
wird im Prozessblock 844 gesandt, und die Verarbeitung
dieser Suche wird beendet, wie durch den Prozessblock 845 angegeben
ist.
-
Unter
Bezugnahme auf 8C, wobei ab dem Verbindungselement
8C (850) begonnen wird, wird, wie im Prozessblock 852 bestimmt
wird, wenn ein bestes Blatt vorhanden ist, das dem aktuellen Knoten
entspricht, dann dieses beste Blatt als in der Suche bisher entdecktes
aktuell bestes Blatt im Prozessblock 854 gespeichert. Wie
im Prozessblock 856 bestimmt, wird als nächstes dann,
wenn das Versatzbit-Flag in der Baum-Bitmap gesetzt ist (d.h., die Baum-Bitmap soll analysiert
werden), im Prozessblock 858 die Adresse des Blattknotens
im Prozessblock 858 berechnet, und die Verarbeitung geht über das
Verbindungselement 8A (859) zum Verbindungselement 8A (811), 8A,
weiter. Ansonsten geht die Verarbeitung über das Verbindungselement
8E (857) zum Verbindungselement 8E (840) in 8B weiter.
-
Unter
Bezugnahme auf 8D, wobei ab dem Verbindungselement
8D (870) begonnen wird, wird, wie im Prozessblock 872 bestimmt,
dann, wenn ein bestes Blatt vorhanden ist, das dem aktuellen Knoten
entspricht, dieses beste Blatt als bisher in der Suche entdecktes
aktuell bestes Blatt im Prozessblock 873 gespeichert. Wie
im Prozessblock 874 bestimmt, geht als nächstes dann,
wenn das entsprechende Bit in der externen Bitmap nicht gesetzt
ist (z.B. kein externes Lookup für
dieses Lookup besteht), die Verarbeitung zum Prozessblock 876 weiter.
Wenn der Sohnknoten kein interner Knoten ist, dann wird, wie im
Prozessblock 880 bestimmt, dann, wenn eine Übereinstimmung des
Lookup-Strangs besteht, im Prozessblock 881 die nächste Adresse auf
die beste Adresse gesetzt, und die Verarbeitung geht über das
Verbindungselement 8A (883) zum Verbindungselement 8A (811), 8A,
weiter. Ansonsten wird im Prozessblock 882 ein Ergebnis
bezüglich
keiner Übereinstimmung
im Prozessblock 882 gesandt, und die Verarbeitung ist beendet,
wie durch den Prozessblock 883 angegeben wird. Wenn ein
interner Knoten, wie im Prozessblock 876 bestimmt, vorliegt,
dann wird ansonsten im Prozessblock 878 die nächste Adresse
auf den Wert des Sohn-Zeigers gesetzt, und die Verarbeitung geht über das
Verbindungselement 8A (879) zum Verbindungselement 8A (811), 8A,
weiter.
-
Ansonsten
wird die nächste
Adresse des Sohnknotens im Prozessblock 884 berechnet.
Wenn der aktuelle Knoten ein Stoppknoten ist (z.B. eine Durchlaufstoppangabe
angibt), wie im Prozessblock 886 bestimmt, dann wird der
Zustand der Suche im Prozessblock 888 zurückgeführt oder
gesandt und die Verarbeitung wird beendet, wie durch den Prozessblock 889 angegeben
ist. Ansonsten geht die Verarbeitung über das Verbindungselement
8A (887) zum Verbindungselement 8A (811), 8A,
weiter.
-
Angesichts
der vielen möglichen
Ausführungsbeispiele,
auf die die Prinzipien unserer Erfindung angewendet werden können, ist
zu erkennen, dass die Ausführungsbeispiele
und Ausführungsformen
davon, die hier unter Bezugnahme auf die Zeichnungen/Figuren beschrieben
worden sind, nur veranschaulichend sind und nicht als Begrenzung des
Schutzbereichs der Erfindung aufgefasst werden sollen. Beispielsweise
und wie für
einen Fachmann auf diesem Gebiet ersichtlich wäre, können viele der Prozessblockoperationen
umgeordnet werden, so dass sie vor, nach oder im Wesentlichen gleichzeitig mit
anderen Operationen durchgeführt
werden. Es können
auch viele verschiedene Formen von Datenstrukturen in verschiedenen
Ausführungsbeispielen verwendet
werden. Die Erfindung, wie sie hier beschrieben worden ist, zieht
alle solchen Ausführungsbeispiele
in Betracht, die in den Schutzbereich der folgenden Ansprüche und Äquivalente
davon fallen können.