-
GEBIET DER
ERFINDUNG
-
Diese
Erfindung betrifft insbesondere Kommunikationen und Computersysteme;
und insbesondere betrifft die Erfindung die Erzeugung und Verwendung
von verbesserten Baum-Bitmap-Datenstrukturen beim Bestimmen einer
Anpassung eines längsten
Präfix,
wie z. B. in einem Router, einem Paketvermittlungssystem oder anderen
Kommunikationen oder einem anderen Computersystem, ohne jedoch darauf
eingeschränkt
zu sein.
-
HINTERGRUND
DER ERFINDUNG
-
Die
Kommunikationsindustrie ändert
sich schnell, um sich auf aufkommende Technologien und den immer
weiter zunehmenden Kundenbedarf einzustellen. Dieser Kundenbedarf
für neue
Anwendungen und erhöhte
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 angenommen 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 vom 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 an
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 angepassten Präfix bei
Drahtgeschwindigkeiten. Die aktuelle IP-Version IPv4 verwendet 32-Bit-Zieladressen
und ein Kern-Internet-Router kann über 200000 Präfixe besitzen.
Ein Präfix
wird typischerweise mit einem Bitstring (z. B. 01*), gefolgt von
einem "*", bezeichnet, um
anzugeben, dass der Wert dieser nachlaufenden Bits egal ist. Für die Ziellenkung
besteht jeder Präfix-Eintrag
in einer Lenkungstabelle typischerweise aus einem Präfix und
einem Wert des nächsten
Abschnitts. Es soll beispielsweise angenommen werden, 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, entspricht die Adresse sowohl dem ersten Präfix (01*)
als auch dem zweiten Präfix
(0100*). Da das zweite Präfix
die längste
Anpassung ist, sollte das Präfix
zum nächsten
Abschnitt L2 gesandt werden. Andererseits solle ein Paket mit einer
Zieladresse, die mit 01010 beginnt, zum nächsten Abschnitt L1 gesandt
werden. Die Informationen des nächsten
Abschnitts legen typischerweise einen Ausgangsport am Router und
möglicherweise
eine Datenübermittlungsabschnittsadresse
fest.
-
1A stellt
ein Beispiel eines Satzes von Präfixen
P1-9 dar, die als Knoten 1A-9A in Tabelle 10A und
als Knoten 1B-9B im Ein-Bit-Trie 10B gezeigt
sind. Im Ein-Bit-Trie 10B sind auch Platzhalter-/leere
Knoten 11B-18B gezeigt, die nicht angepasste Knoten
darstellen (d. h. Knoten, die nicht mögliche Ergebnisse als längstes angepasstes
Präfix
sind). Ein String von beispielsweise 1110000 entspricht beispielsweise
den Präfixen
P1 (1B), P2 (2B) und P5 (5B), wobei das
längste
angepasste Präfix
P5 (B5) 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, herausgegeben als US-Patent
Nr. 6 560 610, beschrieben ist. Das Baum-Bitmap ist ein Mehrbit-Trie-Algorithmus,
der eine Darstellung des Trie durch Gruppieren von Knoten in Sätze von
Schrittweiten implementiert. Eine Schrittweite ist typischerweise
als Anzahl von Baumebenen des binären Trie, die zusammen gruppiert
werden, oder als Anzahl von Ebnen in einem Baum, auf die in einer
einzelnen Leseoperation zugegriffen wird, welche mehrere Ebenen
in einem Baum oder Trie darstellt, definiert. 1B stellt
eine solche Unterteilung von Knoten P1-P9 (1B-9B)
und leeren 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 zusammenhängend 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 Versatz vom
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, eines für die intern gespeicherten Präfixe und
eines für
die externen Zeiger. Das interne Bitmap weist ein 1-Bit auf, das
für alle
Präfixe
gesetzt ist, die innerhalb dieses Knotens gespeichert sind. Für einen
r-Bit-Trie-Knoten sind folglich (2')-1 mögliche Präfixe mit Längen von weniger als r vorhanden und
folglich wird ein (2')-1-Bitmap
verwendet. Das 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 ein
Bitmap für
einen externen Zeiger, ein internes Bitmap für Informationen des nächsten Abschnitts
und einen einzelnen Zeiger auf den Block von Sohnknoten. Die den
internen Präfixen
zugeordneten nächsten
Abschnitte werden innerhalb jedes Trie-Knotens in einem diesem Trie-Knoten
zugeordneten separaten Feld gespeichert. Für Speicherbelegungszwecke sind
Ergebnis-Felder normalerweise ein geradzahliges Vielfaches der gemeinsamen
Knotengröße (z. B.
ist bei 16-Bit-Zeigern des nächsten
Abschnitts und 8-Byte-Knoten ein Ergebnisknoten für bis zu
vier Zeiger des nächsten
Abschnitts erforderlich, zwei Ergebnisknoten sind für bis zu
8 erforderlich usw.). Das Setzen von Zeigern für nächste Abschnitte in ein separates
Ergebnis-Feld erfordert potentiell zwei Speicherzugriffe pro Trie-Knoten
(einen für
den Trie-Knoten und einen zum Abrufen des Ergebnisknotens für gespeicherte Präfixe). Eine
einfache verzögerte
Strategie, nicht auf die Ergebnisknoten zuzugreifen, bis die Suche endet,
wird typischerweise verwendet. Auf den Ergebnisknoten, der dem letzten
Trie-Knoten entspricht, der in dem Pfad angetroffen wird, der ein
gültiges
Präfix
enthielt, wird dann zugegriffen. Dies fügt nur eine einzelne Speicherreferenz
am Ende neben der pro Trie-Knoten erforderlichen einen Speicherreferenz
hinzu.
-
1C stellt
eine Darstellung einer Baum-Bitmap-Implementierung des in 1A-B
gezeigten Präfixbeispiels
dar. Wie gezeigt, stellt der Wurzelknoten 30 den Trie erster
Ebene dar. Der Sohn-Zeiger 31 verbindet den Wurzelknoten 30 mit dem
Sohn-Feld 40, das die Schrittweiten zweiter Ebene enthält. In der
Ebene 3 sind zwei Sohn-Felder 50 und 60 vorhanden,
die vom Sohn-Feld 40 jeweils durch Sohn-Zeiger 41 und 42 verbunden
sind.
-
Eine
Anpassung eines längsten
Präfix
wird gefunden, indem mit dem Wurzelkno ten begonnen wird. Die ersten
Bits der Zieladresse (entsprechend der Schrittweite des Wurzelknotens,
drei in diesem Beispiel) werden verwendet, um in das externe Bitmap
am Wurzelknoten in beispielsweise der Position P zu indexieren.
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 (beispielsweise I), wird bestimmt. Da der Zeiger auf die Startposition
des Sohn-Blocks (beispielsweise C) und die Größe jedes Trie-Knotens (beispielsweise
S) bekannt ist, kann der Zeiger auf den Sohnknoten als C + (I *
S) berechnet werden.
-
Vor
dem Weiterbewegen zum Sohn wird das interne Bitmap geprüft, um festzustellen,
ob ein gespeichertes Präfix
vorhanden ist, das der Position P entspricht. Dazu soll sich vorgestellt
werden, ausgehend von rechts nacheinander Bits von P zu entfernen
und in die entsprechende Position des internen Bitmap zu indexieren,
wobei nach der ersten angetroffenen 1 gesucht wird. Es soll beispielsweise
angenommen werden, dass P 101 ist und eine Schrittweite von drei
Bits am 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
im internen Bitmap entspricht, wird eine Prüfung durchgeführt, um
festzustellen, ob sich eine 1 in dieser Position befindet. Wenn
nicht, werden die am weitesten rechts liegenden zwei Bits entfernt
(was zum Präfix
1* führt).
Da 1* der dritten Position im internen Bitmap entspricht, wird eine
Prüfung
durchgeführt,
um festzustellen, ob sich eine 1 dort 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 Eintag, der * entspricht, im ersten Eintrag des internen Bitmap
wird durchgeführt.
-
Sobald
festgestellt wurde, dass ein angepasstes gespeichertes Präfix innerhalb
eines Trie-Knotens existiert; werden die Informationen entsprechend
dem nächsten
Abschnitt 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 im Ergebnis-Feld anzugeben. Das Zugreifen auf
das Ergebnis-Feld würde
eine zusätzliche
Speicherreferenz pro Trie-Knoten brauchen. Stattdessen wird der
Sohnknoten untersucht, während
an die gespeicherte Präfixposition
und den entsprechenden Mutter-Trie-Knoten erinnert wird. Die Absicht
besteht darin, an den letzten Trie-Knoten T im Suchpfad, der ein
gespeichertes Präfix
enthielt, und an die entsprechende Präfixposition zu erinnern. Wenn
die Suche endet (d. h. ein Trie-Knoten mit einer in der entsprechenden Position
des externen Bitmap gesetzten 0 angetroffen wird), wird auf das
Ergebnis-Feld entsprechend T in der bereits berechneten Position
zugegriffen, um die Informationen des nächsten Abschnitts abzulesen.
-
1D stellt
einen Pseudocode einer Implementierung der vollen Baum-Bitmap-Suche dar. Er nimmt
eine Funktion treeFunction (Baum-Funktion) an, die die Position
des längsten
angepassten Präfix, falls
vorhanden, innerhalb eines gegebenen Knotens finden kann, indem
er das interne Bitmap zu Rate zieht. "LongestMatch" (längste
Anpassung) verfolgt einen Zeiger auf die bisher gesehene längste Anpassung.
Die Schleife endet, wenn kein Sohn-Zeiger vorhanden ist (d. h. kein
Bit im 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 Abschnitt
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 Zugriff darin, die internen und externen Bitmaps aufzuteilen,
was manchmal als Spalt-Baum-Bitmaps bezeichnet wird. Dies wird durchgeführt, indem
nur das externe Bitmap in jedem Trie-Knoten angeordnet wird. Wenn
keine Speichersegmentierung besteht, können die Sohn-Trie-Knoten und
die internen Knoten von der gleichen Mutter im Speicher zusammenhängend 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-Feld, den internen Knoten und
auf das Ergebnis-Feld
aufweist.
-
Bei
einer Alternative, wie in 1E dargestellt,
liegt der Trie-Knotenpunkt am internen Knoten und der interne Knotenpunkt
am Ergebnis-Feld. Um zu bewirken, dass diese Optimierung funktioniert, muss
jeder Sohn ein Bit aufweisen, das angibt, ob der Mutterknoten ein
Präfix
enthält,
das eine bisher längste
Anpassung ist. Wenn sich ein Präfix
im Pfad befinden würde,
zeichnet die Nachschlagemaschine den Ort des internen Knotens (aus
der Datenstruktur des letzten Knotens berechnet) als das bisher
längste
angepasste 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 zuge griffen. Es ist zu beachten, dass
der Kernalgorithmus auf die Informationen des nächsten Abschnitts verzögert zugreift;
der Spalt-Baum-Algorithmus greift selbst auf das interne Bitmap
verzögert
zu. Was bewirkt, dass dies funktioniert, ist, dass jedes Mal, wenn ein
Präfix
P in einem Knoten X gespeichert wird, alle Söhne von X, die P entsprechen,
ein Bit speichern können,
das angibt, dass die Mutter ein gespeichertes Präfix hat. 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
netter Vorteil von Spalt-Baum-Bitmaps besteht darin, dass, wenn
ein Knoten, der nur Pfade und keine interne Präfixe enthalten würde, ein
Zeiger von internen Knoten von Null verwendet werden kann und kein
Platz am internen Bitmap verschwendet wird.
-
Mit
dieser Optimierung werden die externen und internen Bitmaps zwischen
dem Suchknoten bzw. dem internen Knoten aufgeteilt. Das Aufteilen der
Bitmaps in dieser Weise führt
zu einer verringerten Knotengröße, die
von Hardwareimplementierungen profitiert. 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 wartet einen Zeiger des Blatt-Feldes LAj von Blättern entsprechend
Präfixen,
die zu diesem Knoten gehören. 1E stellt
beispielsweise Suchknoten S1 (111), S2 (112) und
S3 (113), interne Knoten I1 (121), I2 (115)
und I3 (114) und Blatt-Felder LA1 (122), LA2 (116)
und LA3 (123) und ihre Verbindung durch Zeiger dar. Außerdem umfassen
die Blatt-Felder LA1 (122), LA2 (116) bzw. LA3
(123) Blattknoten L1 (122A), L2 (116A)
und L3 (123A). Es ist zu beachten, dass die in durchgezogenen
Linien dargestellten Knoten die Knoten sind, auf die während eines
nachstehend beschriebenen Baum-Bitmap-Nachschlagebeispiels zugegriffen
wird.
-
Nun
soll der Fall betrachtet werden, in dem ein Nachschlagen vor sich
geht, indem auf die Suchknoten S1 (111), S2 (112)
und S3 (113) zugegriffen wird. Wenn das Flag parent_has_match
(Mutter besitzt Anpassung) in S3 (113) gesetzt ist, impliziert dies,
dass irgendein Präfix
in einem der Blattknoten L2 (116A) im Blatt-Feld LA2 (116)
vorliegt, welches die momentane längste Anpassung ist. In diesem
Fall wird die Adresse des internen Knotens I2 (115) im Nachschlagekontext
gespeichert. Nun soll angenommen werden, dass S3 (113)
für dieses
Nachschlagen Pfade nicht erweitert. Es könnte sich irgendein Präfix im Blatt-Feld
LA3 (123) befinden, das das längste angepasste Präfix ist.
Daher wird zuerst auf I3 (114) zugegriffen und sein internes
Bitmap auf ein längstes angepasstes
Präfix überprüft. Wenn
kein längstes angepasstes
Präfix
gefunden wird, wird der interne Knoten I2 (115), dessen
Adresse gespeichert wurde, wiedergewonnen, sein Bitmap analysiert
und der Blattknoten L2 (116A), der der längsten Anpassung 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 Anpassung
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-Nachschlagemaschine
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 Nachschlagen aufeinander folgende Knoten,
auf die zugegriffen wird, in verschiedene Speicherkanäle fallen.
Wenn ein einzelner Speicherkanal "x" Zugriffe
pro Sekunde aushalten kann, dann können, wenn mehrere Nachschlagevorgänge gleichzeitig
in Gang sind, "x" Nachschlagevorgänge pro
Sekunde im Durchschnitt erreicht werden, vorausgesetzt, dass auf
jeden Speicherkanal höchstens
einmal pro Nachschlagen zugegriffen wird. Wenn auf irgendeinen der
Kanäle
zweimal pro Nachschlagen 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 Baums in verschiedenen Speicherkanälen gespeichert werden. Das
Zugreifen auf zwei interne Knoten stellt ein Problem dar, wenn eine
begrenzte Anzahl von Speicherkanälen
vorhanden sind, da sowohl interne Knoten in verschiedenen Speicherkanälen angeordnet
werden müssen,
als auch, auf weche zwei internen Knoten zugegriffen wird, vom speziellen
Baum-Bitmap und vom speziellen Nachschlagewert 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.
-
US-A-5
787 430 offenbart eine Baumdatenstruktur zum Bestimmen des größten angepassten Präfix. Der
Baum besteht aus Knoten, die ohne Anwendung von r-kursiven Prozeduren
durchlaufen werden, bis ein angepasstes Präfix gefunden ist. Wenn der
momentane Knoten der letzte Knoten ist und kein angepasstes Präfix aufweist,
wird der obere Mutterknoten durch Zurückverfolgen mit einem Mutter-Zeiger wiedergewonnen.
-
Neue
Verfahren und Vorrichtungen zum Erzeugen und Verwenden von verbesserten Baum-Bitmap-Datenstrukturen
beim Bestimmen einer längsten
Präfixanpassung
sind erforderlich, insbesondere, jedoch nicht auf diejenigen Verfahren und
Vorrichtungen begrenzt, die die Anzahl von Speicherzugriffen verringern
und/oder einen Vorteil gegenüber
vorherigen Baum-Bitmap-Implementierungen schaffen.
-
ZUSAMMENFASSUNG
DER ERFINDUNG
-
Verfahren
und Vorrichtungen zum Erzeugen und Verwenden von verbesserten Baum-Bitmap-Datenstrukturen
beim Bestimmen einer längsten
Präfixanpassung,
wie z. B. in einem Router, einem Paketvermittlungssystem oder einer
anderen Kommunikations- oder Computerkomponente, -vorrichtung oder einem
anderen Kommunikations- oder Computersystem, werden offenbart. Eine
Ausführungsform
umfasst eine Datenstruktur. Die Datenstruktur umfasst einen ersten
Suchknoten, ein erstes Sohn-Feld mit einem ersten internen Knoten
und einem zweiten Suchknoten; und ein erstes Blatt-Feld mit mehreren ersten
Blatt-Feldeinträgen.
Der erste Suchknoten umfasst einen Zeiger auf das erste Sohn-Feld.
Der erste interne Knoten umfasst einen Zeiger auf das erste Blatt-Feld.
Der zweite Suchknoten umfasst einen Zeiger auf einen der mehreren
ersten Blatt-Feldeinträge.
-
Aspekte
der Erfindung sind in den unabhängigen
Ansprüchen
dargelegt und bevorzugte Merkmale sind in den abhängigen Ansprüchen dargelegt. Insbesondere
schafft ein Aspekt ein Verfahren zum Durchlaufen von Knoten von
einer oder mehreren Baumdatenstrukturen auf der Basis eines Eingangsdaten-Strings,
wobei das Verfahren umfasst: Bestimmen einer Speicheradresse eines
nächsten
Knotens einer speziellen Baumdatenstruktur der einen oder mehreren
Baumdatenstrukturen, wobei der nächste Knoten
einem Abschnitt des Eingangsdaten-Strings entspricht; Speichern der einen
oder mehreren Baumdatenstrukturen und Zurückführen des nächsten Knotens in Reaktion
auf eine Wiedergewinnungsan forderung; Verteilen der Wiedergewinnungsanforderung
zu einer Speichervorrichtung; wobei jede der einen oder mehreren
Baumdatenstrukturen umfasst: einen ersten Suchknoten; ein erstes
Sohn-Feld mit einem ersten internen Knoten und einem zweiten Suchknoten;
und ein erstes Blatt-Feld mit einer Vielzahl von ersten Blatt-Feldeinträgen; wobei
der erste Suchknoten einen Zeiger auf das erste Sohn-Feld umfasst; wobei
der erste interne Knoten einen Zeiger auf das erste Blatt-Feld umfasst;
und wobei der zweite Suchknoten einen Zeiger auf einen der Vielzahl von
ersten Blatt-Feldeinträgen
umfasst. Entsprechende Aspekte von Vorrichtungen und computerlesbaren
Medien werden auch geschaffen.
-
KURZBESCHREIBUNG
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-E
Blockdiagramme oder andere Darstellungen eines bekannten Baum-Bitmap-Systems sind;
-
2A ein
Blockdiagramm einer verbesserten Baum-Bitmap-Datenstruktur ist,
die in einer Ausführungsform
verwendet wird;
-
2B ein
Blockdiagramm einer verbesserten Baum-Bitmap-Datenstruktur ist,
die in einer Ausführungsform
verwendet wird;
-
3A ein
Blockdiagramm eines Prozesses ist, der in einer Ausführungsform
verwendet wird, um eine Anpassungsoperation eines längsten Präfix unter
Verwendung eines Baum-Bitmap durchzuführen;
-
3B-C
einen Pseudocode von Prozessen darstellen, der in einer Ausführungsform
verwendet wird, um Knoten zu einem Baum-Bitmap hinzuzufügen und
aus diesem zu löschen;
-
4 ein
Blockdiagramm einer Ausführungsform
ist, die eine Baum-Bitmap-Datenstruktur erzeugt
und/oder verwendet, um eine Anpassung eines längsten Präfix zu bestimmen;
-
5 ein
Blockdiagramm einer Ausführungsform
ist, die eine Baum-Bitmap-Datenstruktur erzeugt
und/oder verwendet, um eine Anpassung eines längsten Präfix zu bestimmen;
-
6A Suchanforderungs-
und Ergebnismeldungsformate darstellt, die in einer Ausführungsform
verwendet werden;
-
6B ein
Format von Knotendatenelementen darstellt, die in einer Ausführungsform
verwendet werden;
-
6C einen
Prozess darstellt, der in einer Ausführungsform verwendet wird,
um eine Adresse eines nächsten
relevanten Knotens oder Elements in einer Ausführungsform einer Baum-Bitmap-Datenstruktur
zu bestimmen;
-
7 einen
Prozess darstellt, der in einer Ausführungsform verwendet wird,
um Daten von einem empfangenen Paket oder anderen Informationen
zu gewinnen, 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-D
Prozesse darstellen, die in einer Ausführungsform verwendet werden,
um eine Operation eines längsten
Präfix
eines Baum-Bitmap oder eine andere Nachschlageoperation durchzuführen.
-
AUSFÜHRLICHE
BESCHREIBUNG
-
Verfahren
und Vorrichtungen zum Erzeugen und Verwenden von verbesserten Baum-Bitmap-Datenstrukturen
beim Bestimmen einer längsten
Präfixanpassung
wie z. B. in einem Router, einem Paketvermittlungssystem oder einer
anderen Kommunikations- oder Computerkomponente, -vorrichtung oder einem
anderen Kommunikations- oder Computersystem werden offenbart. Die
hierin beschriebenen Ausführungsformen
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. Überdies
können
einige beschriebenen Ausführungsformen
umfassen, sind jedoch nicht begrenzt auf unter anderem Sys teme,
Netze, integrierte Schaltungschips, eingebettete Prozessoren, ASICs, Verfahren
und ein computerlesbares Medium, das Befehle enthält. Die
nachstehend beschriebenen Ausführungsformen
verkörpern
verschiedene Aspekte und Konfigurationen innerhalb des Schutzbereichs und
Gedankens der Erfindung, wobei die Fig. beispielhafte und nicht-begrenzende
Konfigurationen darstellen.
-
Wie
hierin verwendet, 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", wie hierin verwendet, bezieht
sich auch auf sowohl das Paket selbst als auch eine Paketangabe,
wie z. B., jedoch nicht begrenzt auf alles oder einen Teil eines
Pakets oder Paketkopfs, 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 Sprache, Daten, Video- und Audioinformationen.
Der Begriff "Punkt" wird hierin verwendet,
um sich auf ein Paket oder irgendeine andere Einheit oder ein Stück von Informationen
oder Daten zu beziehen.
-
Der
Begriff "System" wird hierin 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 hierin allgemein
verwendet, um eine beliebige Anzahl von Computern zu beschreiben,
einschließlich,
jedoch nicht begrenzt auf Personalcomputer, eingebettete Prozessoren
und Systeme, eine Steuerlogik, ASICs, Chips, Arbeitsplatzrechner,
Großrechner,
usw. Der Begriff "Vorrichtung" wird hierin allgemein
verwendet, um eine beliebige Art von Mechanismus, einschließlich eines Computers
oder Systems oder einer Komponente davon, zu beschreiben. Die Begriffe "Aufgabe" und "Prozess" werden hierin 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 Hintergrund ausführen, in 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 Fig. dargestellt 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 andere Komponenten und/oder Prozesse, Threads usw. und/oder über andere
Verbindungen durchgeführt
werden und mit anderen Funktionen in anderen Ausführungsformen
kombiniert werden, wobei am Schutzbereich und Gedanken der vorliegenden
Erfindung festgehalten wird.
-
Überdies
werden die Begriffe "Netz" und "Kommunikationsmechanismus" hierin allgemein verwendet,
um ein oder mehrere Netze, Kommunikationsmedien oder Kommunikationssysteme
zu beschreiben, einschließlich,
jedoch nicht begrenzt auf das Internet, private oder öffentliche
Telephon-, Zellen-, drahtlose, Satelliten-, Kabel-, lokale, Stadtbereichs-
und/oder weiträumige
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 "computerlesbares
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 computerisiertes 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 Dienste, Bandlaufwerke und
andere Speichervorrichtungen. Speicher und Speichervorrichtungen
können
vom Computer ausführbare
Befehle speichern, die von einem Prozessor und/oder einer Steuerlogik
ausgeführt werden
sollen, und Daten, die von einem Prozessor und/oder einer Steuerlogik
verarbeitet 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, Listen, verkettete Listen, Felder, 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 und
ternärem
Inhalt, Hash-Tabellen, TRIE oder andere Datenstrukturen usw.
-
Der
Begriff "eine Ausführungsform" wird hierin verwendet,
um auf eine spezielle Ausführungsform zu
verweisen, wobei jeder Verweis auf "eine Ausführungsform" sich auf eine andere Ausführungsform beziehen
kann, und die wiederholte Verwendung des Begriffes hierin 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 jede Ausführungsform
umfassen muss, obwohl eine Ausführungsform
typischerweise alle diese Merkmale, Elemente und/oder Begrenzungen umfassen
kann. Außerdem
umfasst der Ausdruck "Mittel
für xxx" typischerweise ein
computerlesbares Medium, das vom Computer ausführbare Befehle zum Durchführen von
xxx enthält.
-
Außerdem werden
die Begriffe "erstes", "zweites" usw. typischerweise
hierin verwendet, um verschiedene Einheiten (z. B. ein erstes Element,
ein zweites Element) zu bezeichnen. Die Verwendung dieser Begriffe
hierin suggeriert nicht notwendigerweise eine Reihenfolge, wie z.
B. eine Einheit oder ein Ereignis, die/das vor dem anderen vorkommt oder
kommt, sondern sieht vielmehr einen Mechanismus zum Unterscheiden
zwischen speziellen Einheiten vor. Überdies werden die Ausdrücke "auf der Basis von
x" und "in Reaktion auf x" verwendet, um einen
minimalen Satz von Punkten x anzugeben, von dem etwas abgeleitet
oder durch den etwas verursacht wird, wobei "x" erweiterbar
ist und nicht notwendigerweise eine vollständige Liste von Punkten 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
(modifizieren). Der Begriff "Teilmenge" wird verwendet,
um eine Gruppe von allen oder weniger als allen der Elemente eines
Satzes anzugeben. Überdies
wird der Begriff "oder" hierin verwendet,
um eine alternative Auswahl von einem oder mehreren, einschließlich allen,
der Verbindungspunkte anzugeben.
-
Verfahren
und Vorrichtungen zum Erzeugen und Verwenden einer verbesserten Baum-Bitmap-Datenstruktur
beim Bestimmen einer Anpassung eines längsten Präfix, wie z. B. in einem Router,
einem Paketvermittlungssystem, werden offenbart. Eine Ausführungsform
organisiert das Baum-Bitmap, um die Anzahl von internen Knoten zu minimieren,
auf die während
einer Nachschlageoperation zugegriffen werden muss. Ein Zeiger ist
in jedem der Trie- oder der Suchknoten auf den besten angepassten
Eintrag im Blatt- oder Ergebnis-Feld der Mutter enthalten, der einen
direkten Zugriff auf dieses Ergebnis ermöglicht, ohne einen entsprechenden
internen Knoten analysieren zu müssen. Überdies speichert
eine Ausführungsform
den internen Knoten für
eine spezielle Ebene als erstes Element in seinem Sohn-Feld. Außerdem verwendet
eine Ausführungsform
eine Universal-Nachschlagemaschine,
die mehrere Baum-Bitmaps oder andere Datenstrukturen simultan durchlaufen
kann und vollständige
Suchen, teilweise Suchen durchführen
kann und teilweise Suchen wieder aufnehmen kann, wie z. B. nach
dem Empfang von zusätzlichen
Daten, in denen zu suchen ist.
-
Eine
Ausführungsform
umfasst eine Verbesserung an der Baum-Bitmap-Datenstruktur und den zugehörigen Nachschlage-
und Aktualisierungsschemen. Diese verbessern typischerweise die
Nachschlageleistung und können
einen Speicherzugriff für bestimmte
Hardwareausführungsformen
sparen. Eine Ausführungsform
organisiert das Baum-Bitmap in einer solchen Weise, dass höchstens
ein Zugriff auf einen internen Knoten pro Nachschlagen erforderlich
ist. Eine Ausführungsform
modifiziert beispielsweise die Baum-Bitmap-Struktur so, dass vermieden
wird, dass auf den internen Knoten I2 in der Zugriffssequenz 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 entsprechende Blattknoten
L2 (116A) nach dem Analysieren des internen Bitmap in I2
(115) bestimmt. Eine Analyse dieser Zugriffssequenz führt zu der
Beobachtung, dass für
jedes Nachschlagen, das durch den Knoten S3 (113) läuft, das anschließende Analysieren
des internen Bitmap I2 (115) immer denselben entsprechenden
Blattknoten L2 (116) ergibt. In einer Ausführungsform
werden folglich eine neue Baum-Bitmap-Datenstruktur und zugehörige Nachschlage-
und Aktualisierungsschemen verwendet, um das Analysieren des internen
Bitmap in I2 (122) in dieser beispielhaften Nachschlagesequenz
zu vermeiden.
-
Eine
Ausführungsform
verwendet eine Datenstruktur, die einen ersten Suchknoten, ein erstes Sohn-Feld
mit einem ersten internen Knoten und einem zweiten Suchknoten und
ein erstes Blatt-Feld mit mehreren ersten Blatt-Feldeinträgen verwendet. Typischerweise
umfasst der erste Suchknoten einen Zeiger auf das erste Sohn-Feld,
der erste interne Knoten umfasst einen Zeiger auf das erste Blatt-Feld; und
der zweite Suchknoten umfasst einen Zeiger auf einen der mehreren
ersten Blatt-Feldeinträge.
-
In
einer Ausführungsform
ist der erste interne Knoten das erste Element des ersten Sohn-Feldes. In
einer Ausführungsform
geben der Zeiger des ersten internen Knotens und der Zeiger des
zweiten Suchknotens verschiedene erste Blatt-Feldeinträge an. In
einer Ausführungsform
umfasst die Datenstruktur ferner ein zweites Sohn-Feld, wobei der zweite
Suchknoten einen Zeiger auf das zweite Sohn-Feld umfasst. In einer
Ausführungsform
umfasst die Datenstruktur ferner ein zweites Blatt-Feld mit mehreren
zweiten Blatt-Feldeinträgen,
wobei das zweite Sohn-Feld einen zweiten internen Knoten umfasst,
wobei der zweite interne Knoten einen Zeiger auf das zweite Blatt-Feld
umfasst. In einer Ausführungsform
ist der zweite interne Knoten das erste Element des zweiten Sohn-Feldes.
In einer Ausführungsform
umfasst das zweite Sohn-Feld einen dritten Such- oder Endknoten,
wobei der zweite Such- oder Endknoten einen Zeiger auf einen von
mehreren zweiten Blatt-Feldeinträgen
umfasst. In einer Ausführungsform
geben der Zeiger des zweiten internen Knotens und der Zeiger des
dritten Such- oder Endknotens verschiedene zweite Blatt-Feldeinträge an. In
einer Ausführungsform
stellt der erste Suchknoten eine Schrittweite 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 einer Ausführungsform umfasst der erste
Suchknoten einen ersten Indikator der ersten Länge und der zweite Suchknoten umfasst
einen zweiten Indikator der zweiten Länge.
-
Eine
Ausführungsform
durchläuft
eine Baumdatenstruktur, die mehrere Präfixe darstellt, die in mehrere
Schrittweiten einer Anzahl von Baumebenen, die größer sind
als Eins, unterteilt sind, wobei jede der mehreren Schrittweiten
durch ein Baum-Bitmap dargestellt wird und Angaben von Sohn-Pfaden
durch ein erweitertes Bitmap dargestellt werden. In einer Ausführungsform
wird ein Suchknoten auf einer momentanen Ebene innerhalb der Baumdatenstruktur
empfangen. Ein Identifizierer der momentanen besten Anpassung wird
in Reaktion auf die Feststellung, ob eine neue beste Anpassung existiert,
aktualisiert. In ein erweitertes Bitmap der momentanen Ebene wird
bei der Feststellung indexiert, ob ein angepasster Knoten der nächsten Ebene existiert
oder nicht. In einer Ausführungsform
wird dieser Durchlauf wiederholt, bis ein angepasster Knoten der
nächsten
Ebene nicht existiert, und dann wird der durch den Suchknoten der
momentanen Ebene angegebene Knoten wiedergewonnen und ein Suchergebnis
wird auf der Basis des Identifizierers der momentanen besten Anpassung
oder auf der Basis eines Zeigers im Suchknoten der momentanen Ebene
auf einen Blattknoten identifiziert. In einer Ausführungsform
wird in Reaktion auf die Feststellung, dass der Suchknoten auf der
momentanen Ebene nicht existiert, in einen Endknoten indexiert,
um das Suchergebnis zu identifizieren. In einer Ausführungsform
wird der Identifizierer der momentanen besten Anpassung auf der
Basis eines Zeigers im Endknoten aktualisiert.
-
Eine
Ausführungsform
durchläuft
eine Baumdatenstruktur, die in einem oder mehreren computerlesbaren
Medien gespeichert ist, auf der Basis eines Eingangssuchdaten-Strings.
Typischerweise wird ein Suchfortschrittskontext eines vollständig beendeten
Baumdurchlaufs empfangen, wobei der Suchfortschrittskontext typischerweise
eine Adresse eines nächsten
Knotens oder irgendeinen anderen Knotenindikator umfasst. Der Durchlauf
der Baumdatenstruktur wird ab diesem Knoten für einen nächsten Abschnitt des Eingangs-Strings
wieder aufgenommen. Eine Ausführungsform
verteilt eine Nachschlageanforderung, die typischerweise die Adresse
des nächsten
Knotens umfasst, zu einer von mehreren Speichervorrichtungen. Ein
Nachschlageergebnis wird von einer der mehreren Speichervorrichtungen
empfangen, wobei das Nachschlageergebnis einen Suchknoten umfasst.
Ein Identifizierer der momentanen besten Anpassung wird in Reaktion auf
die Feststellung, ob eine neue beste Anpassung existiert, aktualisiert.
In ein erweitertes Bitmap der momentanen Ebene des Suchknotens wird
indexiert, um festzustellen, ob ein angepasster Knoten der nächsten Ebene
existiert oder nicht. Ein neuer Wert der Adresse des nächsten Knotens
wird erzeugt, wie es ein neuer Wert für den Suchfortschrittskontext
ist.
-
In
einer Ausführungsform
umfasst der Suchfortschrittskontext ferner eine Angabe der besten
Anpassung und eine Länge
eines verwendeten Eingangssuchdaten-Strings. In einer Ausführungsform umfasst
die Angabe der besten Anpassung ein Anpassungs-Flag und einen Blatt-Zeiger.
In einer Ausführungsform
sind mehrere Baumdatenstrukturen in den computerlesbaren Medien
gespeichert und diese Baumdatenstrukturen können simultan durchlaufen werden.
-
Eine
Vorrichtung einer Ausführungsform
zum Durchlaufen von Knoten von einer oder mehreren Baumdatenstrukturen
auf der Basis eines Eingangsdaten-Strings 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 Eingangsdaten-Strings entspricht, mehrere
Speichervorrichtungen zum Speichern von einer oder mehreren Baumdatenstrukturen und
zum Zurückführen des
nächsten
Knotens in Reaktion auf eine Wiedergewinnungsanforderung; und einen
Speicher-Manager, der mit dem Baum-Bitmap-Mechanismus für die nächste Adresse und
den mehreren Speichervorrichtungen gekoppelt ist, zum Verteilen
der Wiedergewinnungsanforderung zu einer der mehreren Speichervorrichtungen.
Typischerweise umfasst jede von einer oder mehreren Baumdatenstrukturen
einen ersten Suchknoten, ein erstes Sohn-Feld mit einem ersten internen
Knoten und einem zweiten Suchknoten, und ein erstes Blatt-Feld mit
mehreren ersten Blatt-Feldeinträgen. In
einer Ausführungsform
umfasst der erste Suchknoten einen Zeiger auf das erste Sohn-Feld,
der erste interne Knoten umfasst einen Zeiger auf das erste Blatt-Feld;
und der zweite Suchknoten umfasst einen Zeiger auf einen der mehreren
ersten Blatt-Feldeinträge.
-
In
einer Ausführungsform
umfassen eine oder mehrere Baumdatenstrukturen Knoten von mindestens
zwei verschiedenen Bäumen.
In einer Ausführungsform
bestimmt die nächste
Adresse des Baum-Bitmap ferner eine der mehreren Speichervorrichtungen
und liefert eine Angabe von einer der mehreren Speichervorrichtungen
zum Speicher-Manager. In einer Ausführungsform umfasst der nächste Knoten
eine Angabe von einer speziellen der mehreren Speichervorrichtungen,
wobei der Speicher-Manager die Wiedergewinnungsanforderung zu der speziellen
der mehreren Speichervorrichtungen liefert. In einer Ausführungsform
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
einer Ausführungsform speichert
der erste Speichertyp einen Knoten erster Ebene für jede der
Baumdatenstrukturen.
-
2A stellt
eine solche Ausführungsform mit
Suchknoten S1 (211), S2 (212) und S3 (213),
internen Knoten I1 (221), I2 (224) und I3 (214)
und Blatt-Feldern LA1 (222), LA2 (215), LA3 (223),
Blattkoten L1 (222A-B), L2 (215A-B) und L3 (223A-B)
und ihre Verbindungen durch Zeiger dar. Es ist zu beachten, dass
in durchgezogenen Linien dargestellte Knoten die Knoten sind, auf
die während
eines nachstehend beschriebenen Baum-Bitmap-Nachschlagebeispiels
zugegriffen wird. Wie in 2A gezeigt,
zeigen auch die Zeiger 220, 230 und 240 direkt
von ihrem jeweiligen Suchknoten 212, 213 und 225 auf
einen Blattknoten 222A, 215A und 223B der
Mutter (entsprechend dem Eintrag der besten Anpassung). Es ist auch
zu beachten, dass 2A nur einen Pfad zeigt, während Suchknoten
anderer Pfade auf andere Blattknoten (222A-B, 215A-B, 223A-B)
innerhalb der Blatt-Felder (222, 215, 223)
zeigen. In einer Ausführungsform
ist zur Steuerzeit (z. B. wenn das Baum-Bitmap programmiert wird)
bekannt, dass das Blatt L2 (215A) die dem Knoten S3 (213)
entsprechende längste
Anpassung 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
einer Ausführungsform
umfassen der Suchknoten S1 (211), S2 (212), S3
(213) bzw. S4 (225) jeweils einen parent_best_leaf_pointer
(Zeiger auf bestes Mutter-blatt)
(210, 220, 230 und 240) auf das
beste angepasste Blatt in ihrem entsprechenden Mutter-Blatt-Feld.
Gezeigt sind der Suchknoten S2 (212) mit dem Zeiger 220 auf
den Blattknoten L1 (222A) im Blatt-Feld LA1 (222),
der Suchknoten S3 (213) mit dem Zeiger 230 auf
den Blattknoten L2 (215A) im Blatt-Feld LA2 (215)
und der Suchknoten S4 (225) mit dem Zeiger 240 auf
den Blattknoten L3 (23B) im Blatt-Feld LA3 (223).
In einer Ausführungsform
gibt ein parent_best_leaf_pointer von Null an, dass kein aktualisiertes
derartiges längstes
angepasstes Präfix
im Mutterknoten vorhanden ist.
-
In
bestimmten Ausführungsformen
ist das Minimieren der Größe eines
Knotens sehr wichtig. In einer Ausführungsform 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-Feld 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 angepassten Blattknoten
im Mutter-Blatt-Feld zu speichern. Mit Bezug auf das Beispiel wird
der Zeiger 235 des internen Knotens in S3 (d. h. S3 → I3) gegen
die Verknüpfung
S3 → L2
(230) ausgetauscht, wobei L2 die längste Anpassung in der Ebene
2 entsprechend S3 (213) ist.
-
2B stellt
eine Ausführungsform
einer neuen Baum-Bitmap-Datenstruktur dar. Wie gezeigt, ist der
interne Knoten als erstes Element im Sohn-Feld des Suchknotens angeordnet.
Daher wird auf die Söhne
sowie den internen Knoten unter Verwendung desselben Zeigers zugegriffen.
Der interne Knoten I1 (261) ist beispielsweise das erste
Element des Sohn-Feldes 260 und der interne Knoten I2 (281) ist
das erste Element des Sohn-Feldes 280.
-
Genauer
umfasst der Suchknoten S1 (250) einen Zeiger 256 auf
das Sohn-Feld 260, das den internen Knoten I1 (261)
und Sohnelemente 265 umfasst. Der interne Knoten I1 (261)
umfasst einen Zeiger 267 auf das Blatt-Feld LA1 (270),
der null oder mehr Elemente umfassen kann, einschließlich des Element-Blattknotens
L1 (271), der in diesem Beispiel das beste Blattmutterergebnis
für den
Suchknoten S2 (262) ist. Es ist zu beachten, 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 ist zu beachten, dass eine Kette von Punkten in den Sohnelementen 265 und
im Blatt-Feld LA1 (270) verwendet wird, um mehr mögliche Suchknoten
in den Sohnelementen 265 und Zeiger auf Einträge im Blatt-Feld
LA1 (270) darzustellen. Der Suchknoten S2 (262)
umfasst auch einen Zeiger 266 auf das Sohn-Feld 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-Feld LA2 (290).
Der Endknoten E3 (282) umfasst einen Zeiger 288 direkt
auf den Blattknoten L2 (291), der das beste Blattmutterergebnis
für den
Endknoten E3 (282) ist.
-
Wenn
eine Ausführungsform
in verallgemeinerten Begriffen beschrieben wird, wird auf den internen
Knoten Ik des Suchknotens Sk nur
zugegriffen, wenn Sk nicht Präfixe für einen
speziellen Nachschlag erweitert. Wenn Sk Präfixe erweitert,
dann muss auf Ik niemals zugegriffen werden.
Mit anderen Worten, in einer Ausführungsform ist es niemals der Fall,
dass sowohl auf Ik als auch Sk+1 beim
gleichen Nachschlagen zugegriffen werden muss. Daher können sowohl
Ik als auch Sk+1 typischerweise
im gleichen Speichermodul angeordnet sein. In einer Ausführungsform
wird an die Adresse 1k des internen Knotens beim Nachschlagen
erinnert, wenn das Flag "parent_has_match" im Suchknoten Sk+1 auf der nächsten Ebene gesetzt ist. Wenn "parent_best_leaf_pointer" in Sk+1 nicht
Null ist, zeigt er mit diesem neuen Schema direkt auf den Blattknoten
auf der Ebene "k", welches das längste angepasste
Präfix
ist. In einer Ausführungsform
würden die
obigen Knotenstrukturmodifikationen für alle drei Bitmap-Knoten außer den
internen Knoten und Blattknoten gelten.
-
3A stellt
einen Prozess dar, der in einer Ausführungsform verwendet wird,
um ein Nachschlagen an einem 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 der Ebene k=0 beginnt. Als nächstes
wird im Prozessblock 304 das current_best_leaf (aktuelles
bestes Blatt) auf Null=0 initialisiert (d. h. bisher keine Anpassung)
und der parent_best_leaf_pointer wird auf Null=0 initialisiert (d.
h. bisher keine Anpassung).
-
Wie
im Prozessblock 306 bestimmt, wird als nächstes,
wenn der momentane 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, dann im Prozessblock 310 das current_best_leaf
auf den Wert von parent_best_leaf_pointer gesetzt.
-
Im
Prozessblock 312 wird als nächstes in das "erweiterte Bitmap" von Sk unter
Verwendung der nächsten
paar Bits vom Nachschlageschlüssel
in Abhängigkeit
von der Schrittweite indexiert. Wenn, wie im Prozessblock 314 bestimmt,
Sk Präfixe
erweitert, dann wird im Prozessblock 316 die Adresse des
Knotens der nächsten
Ebene im Sohn-Feld (typischerweise einschließlich einer Einstellung, um
zu berücksichtigen,
dass der interne Knoten 1k der erste Knoten im Sohn-Feld
ist) berechnet. Als nächstes
wird im Prozessblock 318 der Knoten auf der Ebene 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 1k wiedergewonnen,
wobei Ik das erste Element im Sohn-Feld von
Sk ist. Wenn, wie im Prozessblock 322 bestimmt, ein
längstes
angepasstes Präfix
in Ik vorhanden ist, indem das interne Bitmap
analysiert wird, dann wird im Prozessblock 324 das Ergebnis
vom Blattknoten auf der Ebene k wiedergewonnen und die Verarbeitung
ist vollständig,
wie durch den Prozessblock 338 angegeben. 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.
-
Ansonsten
wurde im Prozessblock 306 der momentane Knoten als 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
auf den Wert von parent_best_leaf_pointer im Prozessblock 332 gesetzt.
-
Wie
im Prozessblock 334 bestimmt, wird als nächstes,
wenn ein längstes
angepasstes Präfix
in Ek vorhanden ist, dann im Prozessblock 336 das
Ergebnis vom Blattknoten auf der Ebene K wiedergewonnen und die
Verarbeitung ist vollständig,
wie durch den Prozessblock 338 angegeben. 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.
-
3B stellt
einen Prozess dar, der in einer Ausführungsform 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 der Ebene
k eingefügt wird.
Sk soll der entsprechende Suchknoten sein. Setk+1 soll die Menge von denjenigen Knoten
im Sohn-Feld von Sk sein, die die Nachfolger
von Pk sind. Mit anderen Worten, Pk ist ein Präfix aller Suchknoten in Setk+1. In einer Ausführungsform ist Setk+1 die
Menge aller Knoten, in denen das Flag "parent_has_match" gesetzt werden muss, wenn Pk eingefügt
wird.
-
In
einer Ausführungsform
in der Software werden die folgenden zusätzlichen Variablen zusammen
mit dem "parent_best_leaf_pointer" in jedem Suchknoten
aufrechterhalten. Es ist zu beachten, dass in einer Ausführungsform
diese nur in der Steuersoftware-Knotenstruktur und nicht in der
Hardwarestruktur erforderlich sind. Der bestleaf_offset(Sk+1) (Versatz des besten Blatts) ist grundsätzlich der
Versatz des Blatts, auf das durch parent_best_leaf(Sk+1) (bestes
Mutterblatt) in seinem Blatt-Feld gezeigt wird. Die "bestleaf_length" (Länge des
besten Blatts) 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-Feld)
ist der Sohn-Feldzeiger des Suchknotens Sk.
Bestleaf_offset(Sk+1) ist der Wert der Variable "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 Variable "bestleaf_length" nur der Software
des Suchknotens Sk+1. "New_leaf_array_base(Pk)
(Basis des neuen Blatt-Feldes) ist die Adresse der Stelle im Baum-Bitmap,
wenn ein neues Präfix
in einem existierenden Blatt-Feld eingefügt wird, in das das ganze Blatt-Feld
zusammen mit dem eingefügten
Präfix
Pk kopiert wird.
-
Wie
in dem in 3B beschriebenen Pseudocode
dargestellt, 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
der nächsten
Ebene, 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,
die auf die korrekten Blätter
zeigen, ist, zeigt der in 3B dargestellte
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-Feld
von Sk eingefügt wird (z. B. wenn neue Zweige
des Baums 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-Feld Lk von Sk, der das
längste
Präfix
entsprechend Sk+1 ist, durch Analysieren
des 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 der Ebene
k gelöscht
wird. Sk soll der entsprechende Suchknoten
sein. Setk+1 soll die Menge von denjenigen
Knoten im Sohn-Feld von Sk sein, für die Pk das beste Blatt ist. 3C stellt
einen Prozess dar, der in einer Ausführungsform verwendet wird, um
die parent_best_leaf_pointers in den Sohnknoten des Suchknotens
zu aktualisieren, aus dem das Präfix
gelöscht
wird.
-
4 stellt
eine Ausführungsform
eines Systems 400, wie z. B., jedoch nicht begrenzt auf
ein Computer- oder Kommunikationssystem, zum Implementieren einer
Baum-Bitmap-Datenstruktur dar. In einer Ausführungsform verwendet das System 400 eine
solche Baum-Bitmap-Datenstruktur zum Bestimmen der Anpassungen des
längsten
Präfix
gemäß der Erfindung.
In einer Ausführungsform
programmiert das System 400 eine andere Vorrichtung, wie
z. B. eine Durchlaufmaschine 500 (5), über die
Schnittstelle 404 mit einer Baum-Bitmap-Datenstruktur.
-
In
einer Ausführungsform
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 Erläuterungszwecke
als Bus gezeigt) gekoppelt sind. Verschiedene Ausführungsformen
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 Zeitablaufsteueraufgaben oder -prozesse durchzuführen. Der
Speicher 402 ist ein Typ eines computerlesbaren Mediums
und umfasst typischerweise einen Direktzugriffsspeicher (RAM), einen
Festwertspeicher (ROM), einen Flash-Speicher, integrierte Schaltungen
und/oder andere Speicherkomponenten. Der Speicher 402 speichert
typischerweise vom Computer ausführbare
Befehle, die vom Prozessor 401 ausgeführt werden sollen, und/oder
Daten, die vom Prozessor 401 verarbeitet werden, um eine
Funktionalität
gemäß der Erfindung
zu implementieren. Die Speichervorrichtungen 403 sind ein
anderer Typ von computerlesbarem Medium und umfassen typischerweise
Festkörper-Speichermedien,
Plattenlaufwerke, Disketten, vernetzte Dienste, Bandlaufwerke und
andere Speichervorrichtungen. Die Speichervorrichtungen 403 speichern
typischerweise vom Computer ausführbare
Befehle, die vom Prozessor 401 ausgeführt werden sollen, und/oder
Daten, die vom Prozessor 401 verarbeitet werden, um eine
Funktionalität
gemäß der Erfindung
zu implementieren.
-
5 stellt
ein Blockdiagramm einer Ausführungsform
zum Durchlaufen einer hierarchischen Datenstruktur dar, einschließlich, jedoch
nicht begrenzt auf eine Baum-Bitmap- oder andere Baumdatenstruktur.
Eine Anforderungsvorrichtung 501, wie z. B. ein Prozessor
oder eine andere Steuerlogik, erzeugt Nachschlageanforderungen,
die von einer Durchlaufmaschine 500 empfangen werden, und
speichert sie im Anforderungspuffer 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 an mehreren und sogar unabhängigen Baum-Bitmap- und/oder anderen
Datenstrukturen durchzuführen.
In einer Ausführungsform
entsprechen die Anforderungsvorrichtung 501 und/oder der
Wartungsprozessor dem System 400 (4). In einer
Ausführungsform
sind die Anforderungsvorrichtung 501 und/oder der Wartungsprozessor 502 in
der Durchlaufmaschine 500 enthalten.
-
In
einer Ausführungsform
umfasst die Durchlaufmaschine 500 einen Anforderungspuffer 512,
um Suchanforderungen zu empfangen und zu puffern, einen Speicher-Manager 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 Ausgangswarteschlange 535 gelenkt wird. Die Ausgangswarteschlange 535 überträgt Suchergebnisse
zur Anforderungsvorrichtung 501. Die Baum-Bitmap-Logik 514 für die nächste Adresse
verarbeitet Suchanforderungen, die vom Anforderungspuffer 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 Speicherleseanforderung zum Speicher-Manager 520 weiter.
-
Suchanforderungen,
die von der Durchlaufmaschine 500 empfangen oder erzeugt
werden, können
einen vollständigen
oder teilweisen String umfassen, auf dessen Basis ein längstes angepasstes Präfix oder
anderes Ergebnis zu finden ist. In einer Ausführungsform umfasst die Durchlaufmaschine 500 beispielsweise
die Fähigkeit,
auf der Basis eines ersten Abschnitts eines Nachschlage-Strings
zu suchen, ein Ergebnis zurückzuführen und
dann die Suche auf der Basis des Ergebnisses und eines zusätzlichen
Abschnitts des Nachschlage-Strings ab dort fortzusetzen, wo sie
aufgehört
wurde. Außerdem setzt
in einer Ausführungsform
die Durchlaufmaschine 500 die Suche durch die Datenstruktur
fort, bis ein Ergebnis empfangen wird, Suchdaten ausgegeben werden
oder ein Stoppknoten (nach stehend weiter beschrieben) angetroffen
wird.
-
Formate,
die in einer Ausführungsform
einer Suchanforderung verwendet werden, sind in 6A gezeigt.
Die anfängliche
Suchanforderung 601 umfasst ein Suchtypen-Feld, das eine
anfängliche
(im Gegensatz zu einer fortgesetzten) Suchanforderung angibt, und
ein Suchdaten-Feld mit den Informationen, mit denen sie zu vergleichen
sind. Die fortgesetzte Suchanforderung 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 Nachschlage-String, 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 (während
eines vorherigen Teils der Suche bestimmt).
-
6A stellt
zusätzlich
Formate dar, die in einer Ausführungsform
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 Anforderungen zur Aktualisierungssteuerung 539 übermittelt
werden, die Aktualisierungsanforderungen zum Speicher-Manager 520 sendet
und Informationen von Speichervorrichtungen und Steuerungen 521-529 und
vom SRAM und von der Steuerung 530 empfangen kann.
-
6B stellt
das Format von Knoten oder Datenstrukturelementen dar, die in einer
Ausführungsform
verwendet werden. Der Such/End/Stopp-Knoten 611 umfasst
ein Knotentyp-Feld, eine Sohn-Feld-Clustergröße, die eine im momentanen
Knoten verwendete Schrittweitengröße angibt, folglich kann die
Datenstruktur Schrittweiten und Knoten mit variablen Längen verwenden.
Der Such/End/Stopp-Knoten 611 umfasst
ferner das erweiterte Bitmap, ein Sohn- (z. B. Sohn-Felder) Zeigerfeld,
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 Knotentypfeld, ein Blatt-Feld-Zeigerfeld, ein
Feld für
den Zeiger auf das beste Blatt bis jetzt, ein internes Bitmap-Feld
und ein Fehlerkorrekturcode-Feld. Der Blattknoten 613 umfasst
ein Knotentypfeld, ein Feld für
assoziative Rückführungsdaten und
ein Fehlerkorrekturcode-Feld. Der Überspringknoten 614 umfasst
ein Knotentypfeld, 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-Felder) Zeiger-Feld und ein Fehlerkorrekturcode-Feld.
-
Bei
Rückkehr
zu 5 werden Suchanforderungen wie z. B., jedoch nicht
begrenzt auf die hierin beschriebenen, vom Anforderungspuffer 512 empfangen.
Wenn die Speicheradresse des Knotens auf der Basis der empfangenen
Suchanforderung leicht erhältlich
ist, wird die Anforderung direkt zum Speicher-Manager 520 weitergeleitet.
Ansonsten wird die Anforderung zur Baum-Bitmap-Logik 514 für die nächste Adresse
weitergeleitet, in der die Speicheradresse berechnet wird. Es ist
zu beachten, 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 Ausgangswarteschlange 535 weiterleitet.
-
6C stellt
einen Prozess dar, der in einer Ausführungsform 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 momentane Schrittweitenlänge des nächsten Abschnitts des Nachschlange-String
und das Sohn-Bitmap wiedergewonnen werden. Es ist zu beachten, dass
die Schrittweitenlänge
eines Eintrages in einer Ausführungsform unter
jedem Eintrag variieren kann. Überdies
unterstützt
eine Ausführungsform
variierende Größen des Sohn-Feldes,
wobei diese Größe durch
die Sohn-Feld-Clustergröße identifiziert
wird. Im Prozessblock 654 wird als nächstes die Anzahl von Einsen
im Sohn-Bitmap des Eintrags bis zu der Position, die dem Nachschlage-String
entspricht, gezählt. Folglich
identifiziert dieser Zählstand,
welches Element das nächste
interessierende ist. Im Prozessblock 656 wird die nächste Adresse
auf der Basis des Sohn-Zeigers plus dem Zählstand, multipliziert mit der
Breite eines Zeiger-Feldes, berechnet. Dann wird im Prozessblock 658 die
Nachschlageanforderung, einschließlich der bestimmten nächsten Adresse, Speicherbank
und des zu verwendenden Kanals, zum Speicher-Manager weitergeleitet
und die Verarbeitung ist beendet, wie durch den Prozessblock 659 angegeben.
-
Die
Verarbeitung durch die Anforderungsvorrichtung 501 (5)
und die Durchlaufmaschine 500 wird durch die Ablaufdiagramme,
die in 7 und 8A-D dargestellt sind, denen
wir uns nun zuwenden, weiter beschrieben.
-
7 stellt
einen Prozess dar, der in einer Ausführungsform durch die Anforderungsvorrichtung 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
Speichersuchanforderung wie z. B. eine anfängliche Suchanforderung 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,
wenn die Suche nicht beendet ist (z. B. mehr Bits zur Durchlaufmaschine
in einer Suchanforderung zu liefern sind, wie z. B. für eine fortgesetzte
Suchanforderung 602 von 6A), kehrt
die Verarbeitung zum Prozessblock 704 zurück, um die
Suchanforderung 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.
-
8A-D
stellen einen Prozess dar, der in einer Ausführungsform 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 Suchanforderung empfangen wird. Wie im Prozessblock 804 bestimmt,
wird, wenn der erste Speicherzugriff im SRAM und der Steuerung 530 durchgeführt werden sollte,
dann als nächstes
im Prozessblock 808 die SRAM-Nachschlageadresse im Prozessblock 806 bestimmt
und die Speicherzugriffsanforderung (d. h. Nachschlageanforderung)
wird zur SRAM-Steuereinheit weitergeleitet, um den Speicherzugriff
durchzuführen.
Ansonsten oder bei Fortsetzung über
das Verbindungselement 8A (811) im Prozessblock 810 wird
die Nachschlageanforderung zu einer der externen Speichervorrichtungen
auf der Basis irgendeines Verteilungsschemas für die Speichervorrichtungen, das
verfügbar
ist, um die Anforderungen zu bedienen, weitergeleitet. In einer
Ausführungsform
wird jede der einen oder mehreren Baum-Bitmap- oder anderen Datenstrukturen in jedem
der externen Speicher wiederholt. In einer Ausführungsform besetzen bestimmte
der Baum-Bitmap- oder anderen Daten strukturen eine Teilmenge der
externen Speicher.
-
Im
Prozessblock 812 wird als nächstes das Nachschlageergebnis
empfangen. Wenn, wie im Prozessblock 814 bestimmt, das
Nachschlageergebnis 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 Nachschlageergebnis
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 Nachschlageergebnis einen Blattknoten umfasst, dann wird ansonsten
im Prozessblock 824 der Rückführungswert des Nachschlagens
im Prozessblock 824 gesandt und die Verarbeitung ist beendet,
wie durch den Prozessblock 826 angegeben. Ansonsten geht
die Verarbeitung über
das Verbindungselement 8D (828) zum Verbindungselement 8D (870)
in 8D weiter.
-
Beim
Zuwenden zu 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 momentanen Knoten entspricht, dann
dieses beste Blatt als in der Suche bisher entdecktes momentanes bestes
Blatt im Prozessblock 834 gespeichert. Wie im Prozessblock 836 bestimmt,
entsprechen die im Überspringknoten
bereitgestellten Überspringbits den
nächsten
Datenbits des Nachschlage-Strings, dann wird als nächstes im
Prozessblock 838 die festgelegte Adresse im Überspringknoten
als nächster Adressenwert
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 Nachschlagezeit zu sparen.
Dieses Überspringknotenmerkmal
ist besonders nützlich, wenn
lange Strings im Nachschlage-String vorhanden sind, die nicht variieren,
wie z. B. bei einem IPv6-Nachschlagen.
-
Ansonsten
oder bei Fortsetzung vom Verbindungselement 8E (840),
wenn eine beste Anpassung im Prozessblock 842 bestimmt
wurde, dann wird dieser Wert der besten Anpassung als 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 Anpassung aufgefunden
und das Ergebnis für
keine Anpassung wird im Prozessblock 844 gesandt und die
Verarbeitung dieser Suche wird beendet, wie durch den Prozessblock 845 angegeben.
-
Beim
Zuwenden zu 8C, wobei ab dem Verbindungselement 8C (850)
begonnen wird, wird, wie im Prozessblock 852 bestimmt,
wenn ein bestes Blatt vorhanden ist, das dem momentanen Knoten entspricht,
dann dieses beste Blatt als in der Suche bisher entdecktes momentanes
bestes Blatt im Prozessblock 854 gespeichert. Wie im Prozessblock 856 bestimmt,
wird als nächstes,
wenn das Versatzbit-Flag im Baum-Bitmap (d. h. das Baum-Bitmap soll analysiert
werden) gesetzt ist, dann 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.
-
Beim
Zuwenden zu 8D, wobei ab dem Verbindungselement 8D (870)
begonnen wird, wird, wie im Prozessblock 872 bestimmt,
wenn ein bestes Blatt vorhanden ist, das dem momentanen Knoten entspricht,
dann dieses beste Blatt als bisher in der Suche entdecktes momentanes
bestes Blatt im Prozessblock 873 gespeichert. Wie im Prozessblock 874 bestimmt,
geht als nächstes,
wenn das entsprechende Bit im externen Bitmap nicht gesetzt ist
(z. B. kein externes Nachschlagen für dieses Nachschlagen besteht),
dann die Verarbeitung zum Prozessblock 876 weiter. Wenn
der Sohnknoten kein interner Knoten ist, dann wird, wie im Prozessblock 880 bestimmt, wenn
eine Anpassung des Nachschlage-String
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
für keine
Anpassung im Prozessblock 882 gesandt und die Verarbeitung
wird beendet, wie durch den Prozessblock 883 angegeben.
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 momentane 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.
Ansonsten geht die Verarbeitung über
das Verbindungselement 8A (887) zum Verbindungselement 8A (811), 8A,
weiter.
-
Angesichts
der vielen möglichen
Ausführungsformen,
auf die die Prinzipien unserer Erfindung angewendet werden können, ist
zu erkennen, dass die Ausführungsformen
und Aspekte davon, die hierin mit Bezug auf die Zeichnungen/Fig.- beschrieben sind,
nur erläuternd
sind und nicht als Begrenzung des Schutzbereichs der Erfindung aufgefasst werden
sollten. Beispielsweise und wie für einen Fachmann 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.
Viele verschiedene Formen von Datenstrukturen könnten auch in verschiedenen
Ausführungsformen
verwendet werden. Die Erfindung, wie hierin beschrieben, zieht alle
solchen Ausführungsformen
in Betracht, die in den Schutzbereich der folgenden Ansprüche und Äquivalente
davon fallen können.