-
Technisches Gebiet
-
Diese
Erfindung bezieht sich auf ein Verfahren und eine Vorrichtung zum Ändern dynamischer Entscheidungsbäume, z.B.
zur Verwendung bei Schaltern (z.B. Zentralstationen bzw. Hubs und
Routern), die zum Lenken von Datenpaketen in paketbasierten Datenkommunikationsnetzwerken
verwendet werden, oder bei Überwachungssonden
zum Sammeln von Daten über
eine Funktionsweise derartiger Netzwerke.
-
Stand der
Technik
-
Große Datenkommunikationsnetzwerke
mit hoher Kapazität,
z.B. das Internet, beruhen üblicherweise
auf Paketvermittlungstechniken. Bei derartigen Techniken werden
zu kommunizierende Daten in Blöcke
aufgeteilt, von denen jeder mit einem Anfangsblock kombiniert wird,
um ein Datenpaket zu bilden. Beispielsweise umfasst der Anfangsblock
Informationen, die die jeweilige Kommunikationstransaktion, auf
die sich das Paket bezieht, identifizieren, und Weiterleitungs- bzw. Routinginformationen,
die den Absender und den beabsichtigten Empfänger der Daten identifizieren.
Jedes Paket wird zwischen Paketvermittlungsvorrichtungen, z.B. Hubs
und Routern, die den Anfangsblock des Pakets untersuchen und die
Routinginformationen in Verbindung mit Daten über den aktuellen Betriebsstatus
des Netzwerks verwenden, um einen Übertragungspfad auszuwählen, entlang
dessen das Paket zu seinem endgültigen Zielort
weitergeleitet werden soll, durch das Netzwerk übertragen.
-
Mit
zunehmender Nachfrage nach einer neuen und qualitativ hochwertigeren
Datenübertragung steigt
auch das Erfordernis schnellerer und gleichzeitig flexiblerer Paketvermittlungsvorrichtungen.
Eine Technik, die bei Paketvermittlungsein richtungen zum Untersuchen
von Paketanfangsblöcken
und Treffen von Weiterleitungsentscheidungen verwendet wird, stützt sich
auf die Verwendung von Datenstrukturen, die oft als Entscheidungsbäume bezeichnet
werden (obwohl sie formaler als gerichtete azyklische Graphen beschrieben
werden). Ein Beispiel der Verwendung dieser Technik ist in der US-Patentschrift Nr. 5,574,910
beschrieben, wo jeder nicht-endgültige Knoten
eines binären
Entscheidungsbaums eine Bandbreite von Werten eines „Schlüssels" (z.B. eines bestimmten
Feldes eines Paketanfangsblockes) darstellt, wobei der linke Tochterknoten
dieses Knotens einen niedrigeren Teil des Wertebereichs und der rechte
Tochterknoten den oberen Teil des Wertebereichs darstellt. Knoten
können
zu dem Entscheidungsbaum hinzugefügt und aus demselben gelöscht werden.
-
Derzeitige
Implementierungen von Entscheidungsbäumen weisen verschiedene Nachteile
auf. Beispielsweise wird ein vollständiger Baum üblicherweise
in einem einzigen Vorgang aus einem Regelsatz entwickelt, der definiert,
wie Pakete weitergeleitet werden sollen; somit beinhaltet sogar
eine einzelne, triviale Änderung
der Regeln eine Erstellung eines vollständigen neuen Baums. Wenn dieser
Baum einen vorhandenen Baum in einer Paketvermittlungseinrichtung
ersetzen soll, muss die Vermittlungseinrichtung vorübergehend
deaktiviert werden (oder ankommende Pakete müssen zumindest gepuffert werden),
während
die Baumersetzung stattfindet, um zu vermeiden, dass sich die Ersetzung
auf ein Paket auswirkt, für
das Weiterleitungsentscheidungen, die den Baum verwenden, bereits
im Gange sind. Dies verringert einerseits den Durchsatz der Paketvermittlungseinrichtung
und erhöht
andererseits deren Komplexität
und Kosten. Alternativ dazu können
zwei Kopien des gesamten Entscheidungsbaums aufrechterhalten werden – eine Aktive
für Weiterleitungspakete
und eine Inaktive, die auf sichere Weise modifiziert werden kann;
wenn die Modifikationen abgeschlossen sind, wird der aktive Baum
inaktiv gemacht, und umgekehrt. Obwohl ein derartiges „Doppelpuffern" eine Verringerung
des Durch satzes der Vermittlungseinrichtung vermeidet, beinhaltet
es eine kostspielige Vervielfältigung
bzw. Duplikation von Hochgeschwindigkeitsspeicher, der üblicherweise zum
Speichern von Entscheidungsbäumen
verwendet wird.
-
Es
wäre äußerst wünschenswert,
ein Entscheidungsbaumsystem zu haben, das ermöglicht, ansprechend auf Veränderungen
der zugeordneten Weiterleitungsregeln an dem Entscheidungsbaum inkrementale
Veränderungen
durchzuführen.
Zudem ist es wünschenswert,
dass derartige Veränderungen durchgeführt werden,
ohne den Betrieb der Paketvermittlungseinrichtung mehr als nur momentan
zu stören,
und dass sie ohne jegliches Erfordernis, ankommende Pakete zu puffern,
durchgeführt
werden.
-
Eine
Aufgabe dieser Erfindung besteht darin, ein Verfahren zu schaffen,
das die Verwendung von Entscheidungsbäumen erleichtert.
-
Offenbarung
der Erfindung
-
Gemäß einem
Aspekt dieser Erfindung ist ein Verfahren zum Ändern eines dynamischen Entscheidungsbaumes,
der in einem Vorrichtungsspeicher (26) gespeichert ist
und Knoten (A, B, C, D) enthält,
von einer Erster-Knoten-Konfiguration zu einer Zweiter-Knoten-Konfiguration
vorgesehen; wobei das Verfahren folgende Schritte umfasst:
- (a) Identifizieren einer Stelle in dem Entscheidungsbaum,
an der zumindest ein neuer Knoten (Cb2, 52)
eingefügt
werden soll;
- (b) Einfügen,
an dieser Stelle, eines temporären Knotens
(58), der einen ersten und einen zweiten Zustand aufweist,
wobei der erste Zustand die vorhandene Konfiguration des Baums unverändert lässt, und
wobei der temporäre
Knoten anfänglich
in dem ersten Zustand ist;
- (c) Einfügen
des zumindest einen neuen Knotens (Cb2, 52),
der von dem temporären
Knoten (58) abhängen
soll und nur dann in den Baum eingekoppelt wird, wenn sich der temporäre Knoten (58)
in dem zweiten Zustand befindet;
- (d) Wiederholen der Schritte (a), (b) und (c) für jegliche
zusätzliche
neue Knoten (Ca2, 54), die eingefügt werden
sollen; und
- (e) gleichzeitiges Ändern
jedes temporären
Knotens (56, 58) von seinem ersten zu seinem zweiten
Zustand.
-
Die
vorliegende Erfindung umfasst auch eine Vorrichtung zum Ausführen des
obigen Verfahrens.
-
Kurze Beschreibung
der Zeichnungen
-
Unter
Bezugnahme auf die beiliegenden Zeichnungen werden nun beispielhaft
ein Verfahren und eine Vorrichtung zum Ändern dynamischer Entscheidungsbäume gemäß dieser
Erfindung in einer Datenpaketvermittlungseinrichtung beschrieben.
Es zeigen:
-
1 ein
Blockschemabild einer Datenpaketvermittlungseinrichtung;
-
2 ein
Blockschemabild einer in die Paketvermittlungseinrichtung der 1 integrierten Entscheidungsbaumverwaltungseinrichtung;
-
3a bis 3g einen
einfachen Entscheidungsbaum und Schritte, die an einem Modifizieren
desselben beteiligt sind;
-
4 ein
Flussdiagramm, das die Hauptschritte in einer rekursiven Prozedur
zum Verwalten von Änderungen an
einem dynamischen Entscheidungsbaum veranschaulicht; und
-
5 bis 14 Schritte,
die an einem Verwalten von Änderungen
an einem dynamischen Entscheidungsbaum beteiligt sind.
-
Bester Modus zum Ausführen der
Erfindung & industrielle
Anwendbarkeit
-
Unter
Bezugnahme auf 1 weist eine Paketvermittlungseinrichtung 10 mehrere
Schnittstellen 12 zum Verbinden der Vermittlungseinrichtung
mit physischen Netzwerkmedien (z.B. einem paarverseilten Kabel,
einem Koaxialkabel oder einem Lichtwellenleiter) auf, die Datenpakete
gemäß relevanten Standardprotokollen
(z.B. gemäß 100Base-T
Fast Ethernet, 100VG-AnyLAN oder FDDI) tragen. Jede Schnittstelle
weist eine zugeordnete Tor-ASIC (ASIC = application specific integrated
circuit, anwendungsspezifische integrierte Schaltung) 14 zum
Steuern des Flusses von Paketen in und aus der Schnittstelle gemäß bekannten
Prinzipien auf.
-
Die
Tor-ASICs 14 sind durch einen Bus 16 miteinander
und mit einer Paketklassifizierungseinrichtung 18 gekoppelt,
die Pakete gemäß in deren Anfangsblöcken enthaltenen
Informationen „klassifiziert" und sie entsprechend
von der Schnittstelle, an der sie empfangen wurden, zur weiteren Übertragung
entsprechend an eine oder mehrere andere Schnittstellen weiterleitet.
Zu diesem Zweck beinhaltet die Paketklassifizierungseinrichtung 18 eine Entscheidungsbaumverwaltungseinrichtung 20,
die einen Speicher zum Speichern eines Entscheidungsbaums und eine
Schaltungsanordnung zum Verwenden desselben enthält, um aus Paketanfangsblockinformationen
zu ermitteln, wie Pakete weitergeleitet werden sollen. Die Ergebnisse
dieses Bestimmens werden vorübergehend
in Ausgangsregistern 22 in der Paketklassifizierungseinrichtung 18 gespeichert, und
der Inhalt dieser Register 22 wird wiederum über den
Bus 16 an die Tor-ASICs 14 geliefert, um die Aktionen
bzw. Handlungen der Tor-ASICs 14 zu steuern und dadurch
zu bewirken, dass die Pakete nach Bedarf weitergeleitet werden.
Die Paketklassifizierungseinrichtung 18 ist mit einem Prozessor
oder einer CPU 24 verbunden, der bzw. die Überwachungssoftwareprogrammanweisungen
ausführt,
um den Gesamtbetrieb der Paketvermittlungseinrichtung 10 zu steuern,
und insbesondere, um den Betrieb der Entscheidungsbaumverwaltungseinrichtung 20 zu steuern,
um ihre Entscheidungsbäume
zu erstellen und zu modifizieren. Die CPU weist einen zugeordneten
Direktzugriffsspeicher (RAM) 26 auf, der diese Überwachungsprogrammanweisungen
und ferner bestimmte Datenposten (nachfolgend beschrieben), die
sich auf die Struktur und Verwaltung der Entscheidungsbäume beziehen,
speichert.
-
Die
hierin zu beschreibenden Entscheidungsbäume sind, formeller ausgedrückt, ordnungsgemäß als gerichtete
azyklische Graphen beschrieben. Trotzdem verbreitete sich der Begriff „Entscheidungsbaum" in der Technik,
um auf derartige Graphen Bezug zu nehmen, und somit wird er in diesem Dokument
verwendet.
-
Unter
Bezugnahme auf 2 enthält die Entscheidungsbaumverwaltungseinrichtung 20 eine oder
mehrere Nachschlageinheiten 28, die über eine FIFO-Einheit (FIFO
= first-in first-out) Pakete von dem Bus 16 empfangen.
Diese Nachschlageinheiten lesen Anweisungen aus dem Entscheidungsbaum, implementieren
die Anweisung (z.B. durch Lesen weiterer Teile des ankommenden Pakets
aus der FIFO 30, durch Vergleichen dieser Teile mit Testwerten
und/oder durch Einstellen der Ausgangsregister 22) und
verzweigen sich anschließend
zu einer weiteren Anweisung in dem Entscheidungsbaum. Die Nachschlageinheiten 28 greifen über eine
Speichersteuerung 32, die mit der CPU 24 und mit
einem Baumspeicher gekoppelt ist, der die zwei folgenden Teile aufweist,
auf den Entscheidungsbaum zu: einen schnellen RAM-Speicher 34,
der mit der Entscheidungsbaumverwaltungs einrichtung 20 integriert
ist, und einen langsameren RAM-Speicher 36 in
einer mit der Entscheidungsbaumverwaltungseinrichtung 20 gekoppelten
separaten Einheit.
-
Es
gibt verschiedene Arten von Anweisungen in dem Entscheidungsbaum:
- – Verzweigung
ist der Hauptanweisungstyp. Dieser kann eine variable Anzahl von
Bits aus dem ankommenden Paket (oder aus anderen Quellen) lesen
und verwendet den Wert, den er gelesen hat, um in eine angehängte Tabelle
zu indexieren oder zu hashen, um eine weitere Anweisung zu finden.
Verzweigungen können
Werte auch aus einem eines kleinen Satzes von Registern oder aus
dem durch eine andere Nachschlageinheit erzeugten Ergebnis lesen.
- – Handlungsanweisungen
ermöglichen,
dass das endgültige
Resultat des ankommenden Pakets entschieden werden kann. Sie modifizieren
Bestimmte der Ausgangsregister 22, die bestimmen, ob das
Paket weitergeleitet werden sollte, und falls dies der Fall ist,
wohin.
- – Andere
Anweisungen, die ermöglichen,
dass Bits aus dem Paket ausgesondert werden, dass Register zugewiesen
und bewegt werden, und dass Zähler
in dem Entscheidungsbaum inkrementiert werden.
-
Anweisungen
in dem Entscheidungsbaum, der in dem Baumspeicher 34/36 gespeichert
ist, sind durch in dem RAM 26 (1) gespeicherte
Regeln definiert und werden durch die CPU 24 verarbeitet, um
den Entscheidungsbaum zu erstellen und zu modifizieren. Eine Regel
weist zwei Hauptteile auf: einen Bedingungssatz (z.B. „Falls
EingangsTor = = 1", „If In-Port = = 1") und einen Handlungssatz
(wie z.B. „Dann
lasse Paket fallen", „then DropPacket", oder „dann gib
Paket über
Tor-ASIC X aus", „then output packet
via PortASIC X").
Wenn ein Paket den Bedingungen entspricht (wie sie in dem Teil des
Entscheidungsbaums, der dieser Regel entspricht, verkörpert sind),
werden die betreffenden Handlungen durchgeführt. Die Bedingungen in einer
Regel vergleichen den Wert eines Feldes mit einem feststehenden
Wert (z.B. einer bestimmten Zieladresse für Pakete), um zu entscheiden,
ob die Handlungen durchgeführt werden
sollten; ein Feld ist üblicherweise
ein Abschnitt des Anfangsblockes eines Pakets von ankommenden Daten.
Regeln sind in Regelsätzen
enthalten, die üblicherweise
aufeinander bezogene Sätze von
Regeln enthalten (die sich auf denselben Satz von Feldern beziehen).
Eine Hinzufügung
einer Regel zu einem Regelsatz in dem RAM 26 bewirkt, dass die
CPU 24 unter der Steuerung des in dem RAM 26 gespeicherten Überwachungssoftwareprogramms entsprechende Änderungen
an dem Entscheidungsbaum in dem Baumspeicher 34/36 bewirkt.
-
Das Überwachungssoftwareprogramm
erhält
für jeden
Regelsatz einen „Regelbaum" in dem RAM 26 aufrecht,
der aus einem Satz von miteinander verbundenen Knoten besteht. Jede
Regel kann man so betrachten, als beschreibe sie einen fiktiven Pfad
durch diesen Regelbaum. Jeder Knoten in dem Regelbaum entspricht üblicherweise
einer oder mehreren Anweisungen in dem Entscheidungsbaum in dem
Baumspeicher 34/36. Wenn ein Paket, das einer bestimmten
Regel entspricht, klassifiziert wird, führt die Paketklassifizierungseinrichtung 18 Anweisungen
aus, die den Knoten auf dem fiktiven Pfad der Regel durch den Regelbaum
entsprechen. Die Knoten in dem Regelbaum speichern auch verschiedene Informationsposten,
die benötigt
werden, um Veränderungen
an dem Entscheidungsbaum in dem Baumspeicher 34/36 zu
verwalten.
-
Die
Vorgehensweise zum Hinzufügen
von Regeln zu einem Regelsatz in dem RAM 26 ist in den 3a bis 3g veranschaulicht,
wobei als erstes Beispiel eine Regel verwendet wird, die eine Bedingung
enthält,
die sich auf das EingangsTor bezieht, an dem ein Paket empfangen
wird (wie es in einem Feld-EingangsTor aufgezeichnet ist, das in
dem Paketanfangsblock enthalten ist, mittels der relevanten Tor-ASIC):
Falls
EingangsTor = = 1 oder 2, dann führe
HandlungA durch, führe
HandlungB durch (Regel 1)
-
Unter
Bezugnahme auf 3a wird ein „Verzweigungs"-Knoten 40 (der
einer Verzweigungsanweisung in dem Entscheidungsbaum entspricht)
erstellt, der Informationen über
das Feld-EingangsTor in
dem Paketanfangsblock enthält.
Die Erstellung eines Knotens beinhaltet in der Praxis Schritte (die durch
das Überwachungsprogramm
in dem RAM 26 koordiniert werden) wie z.B. ein Zuweisen
von Raum in dem RAM 26 zum Speichern von Informationen über den
Knoten, und ein Aktualisieren von Tabellen, die ebenfalls in dem
RAM 26 gespeichert sind, zum Verwalten und Wiedergewinnen
derartiger Informationen, z.B. gemäß der Identität eines
Feldes, auf das durch eine Regel Bezug genommen wird.
-
Als
Nächstes
wird der Verzweigungsknoten 40 erweitert, um Einträge für die spezifizierten
Testwerte, 1 und 2 (3b), zu enthalten. Wenn es weitere
Testbedingungen gäbe,
würden
nach Bedarf entsprechende Knoten gefunden oder erstellt.
-
Wenn
Knoten für
alle Testbedingungen der Regel mit relevanten Testwerten existieren,
wird ein „Handlungs"-Knoten 42 hinzugefügt, um die
durch die Regel festgelegte(n) Handlung(en) zu enthalten, wie in 3c gezeigt
ist; in diesem Fall gibt es die HandlungA und die HandlungB, die
beide für
einen der in dem Verzweigungsknoten 40 getesteten Werte benötigt werden.
Die neue Regel ist nun abgeschlossen, und die CPU kann ausgelöst werden,
entsprechende Teile des Überwachungsprogramms
auszuführen,
um, wie nachfolgend beschrieben wird, an dem Entscheidungsbaum in
dem Baumspeicher 34/36 entsprechende Veränderungen
vorzunehmen, um zu bewirken, dass die neue Regel tatsächlich implementiert
werden kann.
-
Anschließend kann
gewünscht
werden, eine weitere Regel hinzuzufügen, wie folgt:
Falls
EingangsTor = = 3, dann führe
HandlungA aus, führe
HandlungB aus (Regel 2)
-
In
diesem Fall existiert bereits ein Knoten, der sowohl die HandlungA
als auch die HandlungB bewirkt (der Handlungsknoten 42),
ebenso ein Knoten (der Verzweigungsknoten 40), der den
Wert des Feld-EingangsTors testet. Dementsprechend verwendet das Überwachungsprogramm
erneut die Knoten 40 und 42 mit zusätzlichen
Einträgen,
um die zusätzliche
Regel zu integrieren. Der sich ergebende Regelbaum ist in 3d gezeigt.
Wiederum nimmt das Überwachungsprogramm
anschließend
die entsprechenden Veränderungen
an dem Entscheidungsbaum in dem Baumspeicher 34/36 vor.
-
Nun
kann eine dritte neue Regel gewünscht werden,
wie folgt:
Falls EingangsTor = = 3, dann führe HandlungC durch (Regel
3)
-
Diese
Regel muss hinzugefügt
werden, ohne die Ausführung
der zwei zuvor hinzugefügten
Regeln zu beeinträchtigen,
die, im Fall der Regel 2, bereits eine HandlungA und eine HandlungB
erfordern, wenn das EingangsTor 3 ist; gleichermaßen ist
die Auswirkung dieser neuen Regel auf den Fall EingangsTor = = 3
beschränkt,
so dass die neue HandlungC nicht durchgeführt werden muss, wenn das EingangsTor
1 oder 2 ist. Ein einfaches Hinzuaddieren der HandlungC zu dem Handlungsknoten 42,
wie in 3e gezeigt ist, ist also falsch,
da HandlungA und HandlungB nicht implementiert werden sollten, wenn
das EingangsTor 3 ist; gleichermaßen ist auch ein Absondern
der HandlungC zur Implementierung, wenn das EingangsTor 3 ist, wie
in 3f gezeigt ist, falsch, da die HandlungA und die
HandlungB dann fälschlicherweise
für diesen
Wert des EingangsTors weggelassen würden.
-
Um
die Regel 3 auf richtige Weise hinzuzufügen, muss der vorhandene Handlungsknoten 42 dementsprechend
kopiert werden, um einen zweiten Handlungsknoten 44 zu
erzeugen, wie er in 3g gezeigt ist, mit den Handlungen
für EingangsTorwerte
1 und 2 in dem ursprünglichen
Knoten 42 und den Aktionen für den EingangsTorwert 3 in
der Kopie (Knoten 44). Dann kann die neue HandlungC auf
korrekte Weise lediglich zu dem neuen Handlungsknoten 44 hinzugefügt werden.
-
Der
Vorgang der Regelhinzufügung,
der oben umrissen würde,
besteht aus drei Phasen:
- – Phase 1 verwendet eine rekursive
Prozedur, um den Regelbaum in dem RAM 26 zu durchqueren, wobei
Bedingungen in der Regel erfüllt
werden, nach Bedarf Knoten erzeugt oder geteilt werden und die Handlungen
in der Regel schließlich
in den entsprechenden Knoten gespeichert werden; da diese erste
Phase in dem Regelbaum in dem RAM 26 durchgeführt wird,
hat sie keine Auswirkung auf das Funktionieren der Entscheidungsbaumverwaltungseinrichtung 20,
während
die Klassifizierung der Pakete fortgesetzt wird;
- – Phase
2 fügt „Vermittlungsknoten" in den Regelbaum
ein, so dass alle neuen und modifizierten Knoten von der alten Baumstruktur
isoliert sind, und erfasst und kombiniert jegliche vervielfältigten bzw.
duplizierten bzw. Mehrfachknoten;
- – Phase
3 erzeugt neue Anweisungen in dem Baumspeicher 34/36,
die den neuen/modifizierten Knoten in dem RAM 26 entsprechen,
und erstellt spezielle „Vermittlungs"-Verzweigungsanweisungen, die den Vermittlungsknoten
entsprechen; da die neuen Anweisungen durch die Vermittlungsanweisungen
isoliert werden, fungiert der Entscheidungsbaum in dem Baumspeicher 34/36 immer
noch genauso wie vorher; alle Vermittlungsanweisungen be ziehen sich
auf einen einzigen Steuerwert an einer festgelegten Stelle in dem Baumspeicher 34/36 (beispielsweise
durch Aufrufen einer Anweisung, die den Wert an dieser Stelle untersucht
und zurückgibt);
dieser Steuerwert enthält
anfänglich
einen Wert von 0, was bewirkt, dass die Vermittlungsanweisungen
auf die alten Pfade zeigen; dann wird in einem einzelnen Vorgang
ein Wert von 1 in die Steuerstelle geschrieben; in diesem Moment
schalten alle Vermittlungsanweisungen gleichzeitig hinüber zu dem neuen
Pfad, und danach folgen alle Paketklassifizierungsoperationen dem
neuen, modifizierten Entscheidungsbaum. (Falls zur Klassifizierung
eines Pakets mehr als eine Veränderung
entlang einem einzelnen Pfad durch den Regelbaum benötigt wird,
wird die Klassifizierung kurz deaktiviert, und die Umschaltung wird
nur dann durchgeführt, wenn
bei dem Klassifizierungsvorgang keine Pakete verbleiben.)
-
Danach
werden die Vermittlungsknoten und -anweisungen und redundante alte
Knoten und Anweisungen beseitigt. In den Phasen 1 und 2 können viele
neue Regeln hinzugefügt
werden, bevor Phase 3 aufgerufen wird.
-
Phase 1
-
Bevor
die rekursive Prozedur beginnt, wird ein KnotenInfo-Array initialisiert.
Dieses Array behält jeden
neuen Knoten im Auge, wenn er angetroffen wird, indem es die folgenden
Daten für
denselben unterhält:
- – BesuchsZählwert – wie oft
der Knoten während der
Rekursion besucht wurde;
- – RefZählwert – wie viele
andere Knoten auf denselben zeigen (diese Informationen werden auch in
Zuordnung zu jedem Knoten einzeln in dem RAM 26 gehalten);
- – Rückzeiger
zu den Einträgen
in den Knoten, die Zeiger auf diesen Knoten enthalten.
-
KnotenInfo-Array-Einträge werden
in einer doppelt verbundenen Liste unterhalten, die nach Tiefe in
dem Baum sortiert ist.
-
Die
rekursive Prozedur beginnt bei dem Wurzelknoten des Regelbaums (d.h.
bei dem Verzweigungsknoten, der das erste Feld in dem Paket untersucht,
für das
jemals eine Regelbedingung in dem Regelsatz spezifiziert wurde)
und führt
den folgenden Zyklus durch:
- (1) schlage einen
KnotenInfo-Array-Eintrag für den
aktuellen Knoten nach; wenn kein derartiger Eintrag vorliegt, erstelle
einen.
- (2) untersuche die Werte von BesuchsZählwert und RefZählwert in
diesem KnotenInfo-Eintrag:
- – wenn
sie nicht gleich sind, halte die rekursive Prozedur an (siehe unten);
- – falls
sie gleich sind, kann die Regel einfach zu dem aktuellen Knoten
hinzugefügt
werden (siehe unten).
-
Die
rekursive Prozedur wird angehalten, wenn die Werte von BesuchsZählwert und
RefZählwert
nicht gleich sind, da dies bedeutet, dass die Prozedur nicht alle
Pfade zu dem aktuellen Knoten untersucht hat. In diesem Fall muss
die Prozedur den Regelbaum, der Knoten untersucht, von denen sie
den Knoten erreichte, an dem der Stopp erfolgte, sichern. Wenn sie
einen Pfad von einem derartigen Knoten findet, der noch nicht untersucht
wurde, wird die Rekursion entlang dieses Pfades wieder aufgenommen. Wenn
kein derartiger nicht-untersuchter
Pfad gefunden wird, sucht die Prozedur einen dem Wurzelknoten am
nächsten
liegenden Knoten, an dem die Rekursion zuvor angehalten worden war,
und nimmt die Rekursion von dort wieder auf. Dieser Prozess wird fortgesetzt,
bis jeder Knoten, für
den die Rekursion angehalten wurde, aufgelöst wurde, entweder weil ein
Verfolgen eines anderen Pfades zu dem Knoten bewirkt, dass BesuchsZählwert und
RefZählwert gleich
werden, oder wenn notwendig durch Aufspalten des Knotens.
-
Der
Prozess zum Hinzufügen
einer Regel zu einem Knoten, nachdem der entsprechende Knoten wie
oben beschrieben identifiziert wurde, hängt davon ab, ob der Knoten
ein Verzweigungsknoten, ein Vermittlungsknoten oder ein Handlungsknoten
ist.
-
Wenn
er ein Verzweigungsknoten ist, testet er eventuell nicht das in
der Bedingung der Regel enthaltene Feld, wobei in diesem Fall alle
Pfade von dem Knoten akzeptabel sind. Demgemäß wird jeder dieser Pfade nacheinander
ausgewählt,
und die rekursive Prozedur wird auf den ausgewählten Pfad angewandt. Falls
das Feld, auf das in der Bedingung der Regel verwiesen wird, in
dem Verzweigungsknoten getestet wird, liegen zwei Situationen vor,
die zu betrachten sind:
- – die Bedingung in der Regel
kann die akzeptablen Pfade von dem Knoten auf einen Teilsatz aller Pfade
von diesem Knoten beschränken;
in diesem Fall wird die rekursive Prozedur bei dem ersten Pfad in
diesem Teilsatz wieder aufgenommen;
- – der
bzw. die durch die Bedingung der Regel getestete(n) Wert(e) wird
bzw. werden eventuell derzeit nicht in dem Verzweigungsknoten spezifiziert, wobei
der Verzweigungsknoten in diesem Fall erweitert wird, um den bzw.
die zusätzlichen
Wert(e) zu umfassen (wie bei der oben beschriebenen Erweiterung
von 3c zu 3d) – dies kann
erfordern, dass der Knoten kopiert wird, falls die Ressourcen in
dem RAM 26 für
diesen Knoten bereits vollständig
belegt sind; dann wird die rekursive Prozedur von dem ersten Pfad,
der dem neu hinzugefügten
Testwert bzw. den neu hinzugefügten
Testwerten zugeordnet ist, wieder aufgenommen.
-
Ein
Vermittlungsknoten wird auf ähnliche Weise
wie ein Verzweigungsknoten behandelt, mit der Ausnahme, dass lediglich
der „neue" Pfad, der bewirkte,
dass dieser Vermittlungsknoten hinzugefügt wurde, zur Untersuchung
durch die rekursive Prozedur ausgewählt wird.
-
Wenn
der Knoten, zu dem die Regel hinzugefügt werden soll, ein Handlungsknoten
ist und alle durch die Regel getesteten Bedingungen implementiert
wurden, werden die Handlungen in der Regel einfach zu dem Handlungsknoten
hinzugefügt,
und die rekursive Prozedur ist abgeschlossen. Wenn es Bedingungen
gibt, die noch implementiert werden müssen, wird die rekursive Prozedur
geradewegs durch den Handlungsknoten hindurch fortgesetzt.
-
Wenn
alle Knoten, an denen die Rekursion anhielt, aufgelöst wurden,
und wenn alle Handlungen in der Regel, die hinzugefügt wurde,
in Handlungsknoten platziert wurden, ist die rekursive Prozedur der
Phase 1 abgeschlossen. Jedoch sind die neuen oder modifizierten
Knoten noch nicht in den Rest des Regelbaums eingebunden.
-
Phase 2
-
Für jede Kette
eines oder mehrerer neuer oder modifizierter Knoten wird ein Vermittlungsknoten
in den Regelbaum eingefügt.
Zu diesem Zweck durchquert der Regelhinzufügungsprozess wieder den Regelbaum
nach oben, wobei er die Rückzeiger verwendet
und die Knoten identifiziert, mit denen neue Knoten mittels eines
Pfades verbunden werden sollten. Die Verbindung wird über einen
Vermittlungsknoten, der ebenfalls eingefügt wird, hergestellt, so dass
verhindert wird, dass sich die neuen Knoten (wenn sie als Anweisungen
in dem Baumspeicher 34/36 reproduziert werden)
vorübergehend
in irgendeiner Form auswirken.
-
Während dieser
Phase erfasst der Regelhinzufügungsprozess
außerdem
jeglichen Knoten, der exakt mit der Wirkung eines anderen Knotens übereinstimmt,
und kombiniert dieselben mit Blick darauf, die Größe des Baums
minimal zu halten, zu einem einzigen, gemeinsam verwendeten Knoten.
Zu diesem Zweck vergleicht der Prozess Knoten, die wahrscheinliche
Kandidaten für
eine Kombination sind. Ein Knoten stimmt mit der Wirkung eines anderen Knotens überein,
wenn:
- – beide
Handlungsknoten sind, die dieselben Handlungen enthalten; oder
- – beide
Verzweigungsknoten sind, die dasselbe Feld gegenüber demselben Satz von Werten
testen.
-
Wenn
beide Knoten auf diese Weise übereinstimmen,
wird der neu hinzugefügte
Knoten entfernt, indem jeglicher Verzweigungsknoten, der auf den
neuen Knoten zeigt, modifiziert wird, so dass er statt dessen auf
den übereinstimmenden
existierenden Knoten zeigt. Diese Prozedur wird auf rekursive Weise
entlang jeglicher Kette von Knoten, die den neuen vervielfältigten
Knoten enthalten, fortgesetzt.
-
Phase 3
-
Für alle neuen
oder modifizierten Knoten in dem RAM 26:
- – wird Speicher
in dem Baumspeicher 34/36 zugewiesen;
- – wird
jeder neue oder modifizierte Knoten in den entsprechenden Satz von
Anweisungen in dem Baumspeicher umgewandelt;
- – werden
Verzweigungsknoten zu Verzweigungsanweisungen;
- – werden
Handlungsknoten zu Handlungsanweisungen;
- – werden
Vermittlungsknoten zu Vermittlungsanweisungen (spezielle Verzweigungsanweisungen);
- – werden
alle existierenden Anweisungen dahingehend modifiziert, auf die
Vermittlungsanweisungen zu zeigen;
- – werden
existierende Knoten, die dahingehend modifiziert wurden, auf Vermittlungsknoten
zu zeigen, lokalisiert, und werden die entsprechenden Anweisungen
in dem Baumspeicher 34/36 dahingehend modifiziert,
auf die relevanten Vermittlungsanweisungen zu zeigen;
- – wird
die Speichersteuerstelle, die den Zustand der Vermittlungsanweisungen
steuert, in Bezug auf ihren Wert von 0 zu 1 verändert, wodurch bewirkt wird,
dass alle Vermittlungsanweisungen gleichzeitig ihren Zustand ändern, um
an den neuen Pfaden entlang zu zeigen;
- – werden
die vorhandenen Anweisungen, die auf Vermittlungsanweisungen zeigen,
dahingehend modifiziert, direkt an den neuen Pfaden entlang zu zeigen
statt über
die Vermittlungsanweisungen in ihrem veränderten Zustand;
- – werden
jegliche redundanten alten Knoten und Anweisungen und die Vermittlungsknoten
und -anweisungen entfernt (d.h. die Speicherstellen, die Informationen über dieselben
und ihre Verbindungen mit anderen Knoten enthalten, werden gelöscht, und
diese Stellen werden zur Wiederverwendung an einen Freier-Speicher-Pool
zurückgegeben).
-
Beispiel einer
Regelhinzufügung
-
5 bis 12 zeigen
ein praktisches Beispiel einer Hinzufügung einer Regel gemäß der oben beschriebenen
Prozedur.
-
Unter
Bezugnahme auf 5 existiert bereits ein Regelsatz
für die
Regeln, die die folgenden Bedingungen umfassen:
falls (A =
= 1 oder 2) und (B = = *) und (C = = 1) und (D = = ...) dann ...
(Regel 4)
falls (A = = 1 oder 2) und (B = = *) und (C = = 2)
und (D = = ...) dann ... (Regel 5)
falls (A = = 3) und (B =
= *) und (C = = 1) und (D = = ...) dann ... (Regel 6)
-
Es
sei angemerkt, dass der Wert von B bei diesem Beispiel nicht von
Bedeutung ist (obwohl spätere
Regeln eventuell Bedingungen auf diesen Wert festlegen); der Knoten
CA gemeinsam verwendet wird, um den Entscheidungsbaum kompakt zu
halten. Die neue hinzuzufügende
Regel lautet:
falls (A = = 1 oder 3) und (B = = *) und (C =
= 2) dann führe
HandlungX durch (Regel 7)
-
Die
rekursive Prozedur der Phase 1 beginnt an dem Wurzelknoten des Regelbaums
in dem RAM 26, d.h. dem Verzweigungsknoten A. Nach einem Prüfen des
KnotenInfo-Arrays auf einen Eintrag bezüglich dieses Knotens hin stellt
die Prozedur fest, dass es keinen gibt, da dies das erste Mal ist,
dass der Knoten während
einer Verarbeitung dieser neuen Regel 7 untersucht wurde; somit
wird:
- – ein
KnotenInfo-Array-Eintrag erstellt;
- – sein
BesuchsZählwert-Parameter
auf einen Wert Eins inkrementiert;
- – sein
RefZählwert-Parameter
auf den Wert eingestellt, der in Verbindung mit dem Knoten A selbst
gespeichert ist;
- – ein
Rückzeiger
zu dem Regelsatz selbst zu dem Eintrag hinzugefügt.
-
Als
Nächstes
wird der Wert des RefZählwert-Parameters
bei diesem KnotenInfo-Eintrag (in diesem Fall 1, da der Knoten A
durch lediglich einen „Knoten", den Regelsatz selbst,
referenziert wird) mit dem BesuchsZählwert-Parameter (nun ebenfalls
1) verglichen. Sie sind gleich, also kann die rekursive Prozedur
bezüglich
dieses Knotens damit fortfahren, Regel 7 hinzuzufügen. Da
es ein Verzweigungsknoten ist, muss die Prozedur als Nächstes untersuchen, ob
dieser Knoten ein in der Regel 7 referenziertes Feld testet; der
Knoten A testet das Feld A, das in der Tat auch in der Regel 7 getestet
wird, so dass die Prozedur nun einen Pfad auswählt, der von dem Knoten A verfolgt
werden soll. Es gibt zwei relevante Pfade, für die Werte A = = 1 und A =
= 3; zuerst wählt
die Prozedur den Pfad für
A = = 1 aus und kehrt zurück, um
den nächsten
Knoten entlang diesem Pfad, nämlich
den Knoten Ba, zu untersuchen.
-
Nach
einem Prüfen
des KnotenInfo-Arrays auf einen Eintrag bezüglich dieses Knotens Ba hin stellt
die Prozedur fest, dass es keinen gibt, da dies das erste Mal ist,
dass der Knoten während
einer Verarbeitung dieser neuen Regel 7 untersucht wurde; somit
wird:
- – ein
KnotenInfo-Array-Eintrag erstellt;
- – sein
BesuchsZählwert-Parameter
auf einen Wert Eins inkrementiert;
- – sein
RefZählwert-Parameter
auf den Wert eingestellt, der in Verbindung mit dem Knoten Ba selbst
gespeichert ist;
- – ein
Rückzeiger
auf den Knoten A zu dem Eintrag hinzugefügt.
-
Der
Wert des RefZählwert-Parameters
bei diesem KnotenInfo-Eintrag
(in diesem Fall 1, da der Knoten Ba durch lediglich einen Knoten
referenziert wird) wird mit dem BesuchsZählwert-Parameter (nun ebenfalls
1) verglichen. Sie sind gleich, also kann die rekursive Prozedur
bezüglich
dieses Knotens damit fortfahren, Regel 7 hinzuzufügen. Da
es ein Verzweigungsknoten ist, muss die Prozedur als Nächstes untersuchen,
ob dieser Knoten ein in der Regel 7 referenziertes Feld testet;
der Knoten Ba testet das Feld B, das in der Tat auch in der Regel
7 getestet wird, jedoch mit einem „bedeutungslosen" (WildCard-) Wert, so
dass die Prozedur nun alle Pfade auswählt, die von dem Knoten Ba
verfolgt werden sollen – in
diesem Fall gibt es lediglich einen Pfad, zu dem Knoten Ca.
-
Was
die beiden ersten geprüften
Knoten angeht, stellt die Prozedur fest, dass es keinen KnotenInfo-Array-Eintrag
für den
Knoten Ca gibt; somit wird:
- – ein KnotenInfo-Array-Eintrag
erstellt;
- – sein
BesuchsZählwert-Parameter
auf einen Wert Eins inkrementiert;
- – sein
RefZählwert-Parameter
auf den Wert eingestellt, der in Verbindung mit dem Knoten Ca selbst
gespeichert ist;
- – ein
Rückzeiger
auf den Knoten Ba zu dem Eintrag hinzugefügt.
-
Der
Wert des RefZählwert-Parameters
bei diesem KnotenInfo-Eintrag
(in diesem Fall 2, da der Knoten Ca durch zwei Knoten, Ba und Bb,
referenziert wird) wird mit dem BesuchsZählwert-Parameter (nun 1) verglichen.
Sie sind nicht gleich, so dass die rekursive Prozedur an diesem
Punkt anhalten muss und speichern muss, wie weit die Prozedur auf
diesem Pfad bezüglich
des KnotenInfo-Array-Eintrags für
den Knoten Ca fortgeschritten war.
-
Die
Prozedur kehrt nun zu dem Knoten Ba zurück und stellt fest, dass die
Verarbeitung für
diesen Knoten abgeschlossen ist, und somit kehrt sie weiter zu dem
Knoten A zurück
und stellt fest, dass die Verarbeitung für diesen Knoten immer noch
benötigt
wird, bezüglich
des Pfades für
den Wert A = = 3, hin zu dem Knoten Bc.
-
Dementsprechend
prüft die
rekursive Prozedur nun das KnotenInfo-Array bezüglich eines Eintrags für diesen
Knoten und stellt wiederum fest, dass es keinen gibt; somit wird:
- – ein
KnotenInfo-Array-Eintrag erstellt;
- – sein
BesuchsZählwert-Parameter
auf einen Wert Eins inkrementiert;
- – sein
RefZählwert-Parameter
auf den Wert eingestellt, der in Verbindung mit dem Knoten Bc selbst
gespeichert ist;
- – ein
Rückzeiger
auf den Knoten A zu dem Eintrag hinzugefügt.
-
Der
Wert des RefZählwert-Parameters
bei diesem KnotenInfo-Eintrag
(1, da der Knoten Bc durch lediglich einen Knoten referenziert wird)
wird mit dem BesuchsZählwert-Parameter
(nun ebenfalls 1) verglichen. Sie sind gleich, so dass die rekursive Prozedur
bezüglich
dieses Knotens damit fortfahren kann, Regel 7 hinzuzufügen. Es
ist ein Verzweigungskno ten, so dass die Prozedur als Nächstes untersucht,
ob dieser Knoten ein in der Regel 7 referenziertes Feld testet;
der Knoten Bc testet das Feld B, das in der Tat auch in der Regel
7 getestet wird, jedoch mit einem „bedeutungslosen" (WildCard-) Wert, so
dass die Prozedur nun alle Pfade auswählt, die von dem Knoten Bc
verfolgt werden sollen – es
gibt lediglich einen Pfad, zu dem Knoten Cb.
-
Wie
zuvor stellt die rekursive Prozedur fest, dass es in dem KnotenInfo-Array
für diesen
Knoten keinen Eintrag gibt; somit wird:
- – ein KnotenInfo-Array-Eintrag
erstellt;
- – sein
BesuchsZählwert-Parameter
auf einen Wert Eins inkrementiert;
- – sein
RefZählwert-Parameter
auf den Wert eingestellt, der in Verbindung mit dem Knoten Cb selbst
gespeichert ist;
- – ein
Rückzeiger
auf den Knoten Bc zu dem Eintrag hinzugefügt.
-
Der
Wert des RefZählwert-Parameters
bei diesem KnotenInfo-Eintrag
(1, da der Knoten Cb durch lediglich einen Knoten referenziert wird)
wird mit dem BesuchsZählwert-Parameter
(nun ebenfalls 1) verglichen. Sie sind gleich, so dass die rekursive Prozedur
bezüglich
dieses Knotens damit fortfahren kann, Regel 7 hinzuzufügen. Es
ist ein Verzweigungsknoten, so dass die Prozedur als Nächstes untersucht,
ob dieser Knoten ein in der Regel 7 referenziertes Feld testet;
der Knoten Cb testet das Feld C, das in der Regel 7 getestet wird,
so dass die Prozedur nun versucht, einen Pfad auszuwählen, der
von dem Knoten Cb an verfolgt werden soll. Es gibt jedoch keinen
Pfad von dem Knoten Cb für
den Wert C = = 2, also muss einer hinzugefügt werden. Bei diesem Beispiel
wird angenommen, dass der existierende Knoten Cb kei nen weiteren
Testwert berücksichtigen
kann, so dass ein neuer Knoten Cb2 benötigt wird (6).
Dieser Knoten Cb2 wird mit ausreichenden Ressourcen
in dem RAM 26 erzeugt, um eine Kopie des aktuellen Inhalts
des vorhandenen Codes Cb (der Testwert C = = 1, was zu dem Knoten
Dc führt) plus
den neuen Testwert C = = 2 zu enthalten.
-
An
diesem Punkt wurden alle Bedingungen in der neuen Regel 7 berücksichtigt,
so dass die Handlung, die dieselbe spezifiziert (HandlungX) für den Fall
C = = 2 direkt als Resultat zu dem neuen Knoten Cb2 hinzugefügt werden
kann. Zu diesem Zweck wird ein Vermittlungsknoten 50 (7)
in dem RAM 26 erzeugt, mit einer Verbindung von dem entsprechenden
Resultat des Knotens Cb2, die zu einem neuen
Handlungsknoten 52 führt,
der die HandlungX spezifiziert. An diesem Punkt ist der Knoten Cb2 inaktiv, da er keinen Eingangspfad aufweist,
also werden beide seine Resultate ebenfalls inaktiv, wie in 7 durch
gestrichelte Linien dargestellt ist. Obwohl der Vermittlungsknoten 50 aus
diesem Grund nicht unbedingt notwendig ist, ist er als Vorsichtsmaßnahme gegen
einen Ausfall mit aufgenommen, um die Hinzufügung der neuen Regel 7 auf
Pfaden, die erst noch verfolgt werden müssen, abzuschließen, wobei
die neue HandlungX in diesem Fall nirgendwo wirksam werden sollte.
Der Vermittlungsknoten 50 gewährleistet, dass diese neue
Handlung isoliert bleibt, bis die Hinzufügung der neuen Regel vollständig erfolgreich
war.
-
Die
Prozedur ersetzt den KnotenInfo-Array-Eintrag für den veralteten Knoten Cb
durch einen KnotenInfo-Eintrag für
den Ersatzknoten Cb2 und kehrt dann zurück, um den
vorausgehenden Knoten Bc zu untersuchen. Sie stellt fest, dass die
Verarbeitung für
diesen Knoten abgeschlossen ist, also kehrt sie weiter zu dem Knoten
A zurück,
für den
die Verarbeitung nun ebenfalls abgeschlossen ist. Dementsprechend
prüft die
rekursive Prozedur, ob etwaige ausstehende Knoten vorliegen, für die die
Rekursion angehalten werden musste, und stellt fest, dass dies bei
dem Knoten Ca der Fall ist.
-
Somit
muss die Rekursion an diesem Knoten wieder aufgenommen werden.
-
Die
Prozedur vergleicht den RefZählwert
für diesen
Knoten Ca (2) mit seinem Besuchszählwert (1), und da sie feststellt,
dass sie sich unterscheiden, und in Abwesenheit einer anderen Möglichkeit,
teilt sie den Knoten in zwei Hälften.
Dementsprechend wird ein neuer Knoten Ca2 erzeugt
(8), wobei der Inhalt des vorhandenen Knotens Ca
und ebenso Pfade aus demselben zu den Knoten Da und Db dupliziert
werden. Die neue Regel 7 spezifiziert eine Bedingung für das Feld
C (C = = 2), und der neue Knoten Ca2 umfasst
bereits einen Test für
diesen Wert; ferner wurden alle Bedingungen in der neuen Regel 7
an diesem Punkt berücksichtigt,
so dass ein Handlungsknoten 54 für die Aktion, die er spezifiziert,
an dem (derzeit inaktiven) Pfad aus dem Knoten Ca2 heraus
(zu dem Knoten Db) hinzugefügt
werden kann – siehe 9.
Man beachte, dass die Erzeugung des neuen Knotens Ca2 gewährleistet,
dass die neue Regel 7 lediglich für die Fälle, in denen A die Werte 1 und
3 aufweist, korrekt hinzugefügt
wird, jedoch nicht in dem Fall, dass A den Wert 2 aufweist.
-
An
diesem Punkt stellt die rekursive Prozedur fest, dass alle angehaltenen
Rekursionen abgeschlossen wurden und somit auch Phase 1 der Hinzufügung der
Regel 7 abgeschlossen wurde.
-
Bei
Phase 2 identifiziert die Prozedur neu hinzugefügte Knoten, die durch Vermittlungsknoten mit
vorhandenen Knoten verbunden werden müssen, wie in 9 durch
gestrichelte Pfeile angegeben ist. Zu diesem Zweck untersucht die
Prozedur den KnotenInfo-Array-Eintrag für jeden neu hinzugefügten Knoten,
wobei sie Rückzeiger
sucht, die existierende Knoten angeben, von denen derartige Verbindungen gemacht
werden sollten. Für
jede derartige Verbindung wird ein Vermittlungsknoten erzeugt. Beispielsweise
vervielfältigt
der neue Knoten Ca2 den vorhandenen Knoten
Ca, der mit dem vor handenen Knoten Ba verbunden ist. Dementsprechend
wird ein Vermittlungsknoten 56 in die bestehende Verbindung zwischen
den existierenden Knoten Ba und Ca platziert und wird anfänglich eingestellt,
um den Pfad entlang dieser Verbindung aufrechtzuerhalten (10). Der
alternative, derzeit ungenutzte Pfad von dem neuen Vermittlungsknoten 56 wird
mit dem neuen Knoten Ca2 gekoppelt. Desgleichen
wird ein neuer Vermittlungsknoten 58 bezüglich der
Knoten Bc, Cb und Cb2 hinzugefügt.
-
Als
Nächstes
werden in Phase 3 die neuen und modifizierten Knoten in
dem Regelbaum in dem RAM 26 in Anweisungen umgewandelt,
die in den Baumspeicher 34/36 platziert werden,
um einen entsprechenden modifizierten Entscheidungsbaum zu erzeugen.
Somit veranschaulichen 10–12 insbesondere
die Struktur des Entscheidungsbaums in dem Baumspeicher 34/36 sowie
des Regelbaums in dem RAM 26.
-
Für jeden
neuen Knoten Ca2, Cb2, 52 und 54 (HandlungX)
in dem Regelbaum werden in dem Baumspeicher 34/36 entsprechende
Anweisungen erzeugt (d.h. Speicherressourcen in dem Baumspeicher
werden zugewiesen, und Zeiger auf den Speicher für andere Knoten werden nach
Bedarf eingerichtet). Desgleichen werden in dem Baumspeicher 34/36 Vermittlungsanweisungen
erzeugt, die den Vermittlungsknoten 50, 56 und 58 entsprechen,
und durch den O-Wert in der Steuerstelle eingestellt, um die vorhandenen
Pfade durch den Entscheidungsbaum zu bewahren und die neuen Anweisungen
isoliert zu halten. Die vorhandenen Anweisungen in dem Entscheidungsbaum
für die
Knoten Ba und Bc werden so modifiziert, dass die Pfade von denselben
zu den Vermittlungsanweisungen führen,
die den Vermittlungsknoten 56 bzw. 58 entsprechen,
statt direkt zu den Anweisungen zu führen, die den Knoten Ca und
Cb entsprechen.
-
Der
Wert in der Steuerstelle wird nun von 0 zu 1 geändert. Die Vermittlungsanweisungen,
die den Vermittlungsknoten 50, 56 und 58 entsprechen, verändern gleichzeitig
ihren Zu stand, so dass die Pfade von denselben zu den neuen Anweisungen
für die
Knoten 52, Ca2 bzw. Cb2 führen. Somit
ist der modifizierte Entscheidungsbaum in einem einzigen, effektiv
augenblicklichen Übergang
implementiert, ohne dass ein Zwischenzustand eine Mischung der vorherigen
und modifizierten Bäume
beinhaltet.
-
Die
den Knoten Ba und Bc entsprechenden Anweisungen werden erneut modifiziert,
so dass die Pfade von denselben statt zu den Vermittlungsanweisungen,
die den Vermittlungsknoten 56 und 58 entsprechen,
direkt zu den neuen Anweisungen für die Knoten Ca2 und
Ca2 führen,
und die Anweisung für den
Knoten Cb2 wird ebenfalls modifiziert, um
direkt mit der Handlungsanweisung, die dem Handlungsknoten 52 entspricht,
verbunden zu werden. Anschließend
werden die Vermittlungsanweisungen für die Vermittlungsknoten 50, 56 und 58 beseitigt
(d.h. die Speicherressourcen, die Informationen über dieselben speichern, werden
gelöscht
und zur Wiederverwendung freigegeben), ebenso wie die veraltete Anweisung,
die dem veralteten Knoten Cb entspricht (12). Die
Knoten selbst in dem RAM 26 werden ebenfalls gelöscht.
-
Wie
oben erwähnt
wurde, erfasst der Prozess in Phase 2 Mehrfachknoten und kombiniert
sie mit Blick auf eine Minimierung der Nutzung von Speicherressourcen
so, dass ihre Funktionalität
gemeinsam verwendet wird. Dies kann durch das Beispiel des Hinzufügens einer
neuen Regel 8 wie folgt veranschaulicht werden:
wenn (A = =
3) und (B = = *) und (C = = 3) dann führe HandlungX durch (Regel
8)
-
Phase
1 erzeugt einen neuen Knoten Cb3, wie in 13 gezeigt
ist, mit einem Pfad zu dem Knoten Dc für den Fall, dass C den Wert
1 aufweist, und mit Pfaden zu Handlungsknoten 52 (vorhanden) und 60 (neu),
die jeweils eine HandlungX enthalten, für die Fälle, dass C den Wert 2 bzw.
3 aufweist. Bei Phase 2 erfasst der Prozess, dass die zwei Hand lungsknoten 52 und 60 identisch
sind, gemäß den oben
beschriebenen Kriterien, und kombiniert sie zu einem einzigen Handlungsknoten 62,
wie in 14 gezeigt ist.
-
Der
Prozess zum Löschen
von Regeln ähnelt sehr
stark dem Prozess zum Hinzufügen
von Regeln, mit Ausnahme dessen, dass der letzte Schritt, bei dem
die Regelhandlungen zu einem Handlungsknoten hinzugefügt werden,
durch einen Schritt ersetzt wird, bei dem die Regelhandlungen aus
dem Handlungsknoten entfernt werden. In diesem Fall muss eine Fehlerbedingung
angezeigt werden, wenn die Handlung(en), die in der zu löschenden
Regel vorliegt bzw. vorliegen, in der Tat nicht in dem Handlungsknoten
gefunden wird bzw. werden.
-
Obwohl
die obigen Beispiele im Kontext von Entscheidungsbäumen zur
Paketvermittlung beschrieben wurden, ist die Erfindung nicht auf
eine derartige Verwendung beschränkt.
Beispielsweise ist sie auch auf Testsonden anwendbar, die mit Netzwerkkommunikationsverbindungen
verbunden sind, um Protokoll- und Zeitgebungsinformationen zur entfernten
Anzeige und Analyse zu sammeln; in diesem Fall kann der Entscheidungsbaum
verwendet werden, um die Funktionsweise eines Protokolls zu definieren,
so dass die Sonde eine tatsächliche
Implementierung des Protokolls mittels Paketen, die das Netzwerk
durchqueren, mit der theoretischen Definition des Protokolls vergleichen
kann. Eine weitere mögliche
Verwendung betrifft Virusscanner zum Prüfen von Softwareprogrammen;
derartige Scanner können
dadurch arbeiten, dass sie eine beliebige von mehreren bestimmten
Sequenzen von Anweisungscodes in Programm- und Datendateien suchen.
Dieser Prozess kann zweckmäßigerweise
in einem Entscheidungsbaum implementiert werden. Während neue
Computerviren entwickelt werden, ist es notwendig, Virusscanner
(und somit ihre Entscheidungsbäume)
kontinuierlich zu aktualisieren. Die vorliegende Erfindung liefert
ein zweckmäßiges Verfahren zum
Bewerkstelligen desselben.