-
HINTERGRUND DER ERFINDUNG
-
Gebiet der Erfindung
-
Die
vorliegende Erfindung betrifft die Computervernetzung und insbesondere
die Modifizierung von Daten, die von einer Quelle zu einem Ziel übertragen
werden.
-
Hintergrundinformationen
-
Ein
Computernetzwerk ist eine geografisch verteilte Ansammlung von miteinander
verbundenen Netzwerkverbindungen und -segmenten zum Transportieren
von Daten zwischen Knoten, wie etwa Computern. Es stehen viele Typen
von Netzwerksegmenten zur Verfügung,
wobei die Typen von lokalen Netzwerken (LANs) bis zu Weitbereichsnetzen (WANs)
reichen. Endknoten, wie zum Beispiel Personalcomputer oder Arbeitsplatzrechner,
kommunizieren typischerweise über
das Netzwerk, indem sie diskrete Rahmen oder Pakete von Daten in Übereinstimmung
mit vordefinierten Protokollen austauschen. In diesem Kontext besteht
ein Protokoll aus einem Satz von Regeln, die definieren, wie die
Knoten miteinander interagieren.
-
Computernetzwerke
können
ferner durch einen Zwischenknoten, wie zum Beispiel einen Switch oder
einen Router, miteinander verbunden sein, die eine Vielzahl von
Ports aufweisen, die mit den Netzwerken gekoppelt sein können. Zum
Beispiel kann ein Switch verwendet werden, um eine "Vermittlungs"-Funktion für die Übertragung
von Informationen zwischen einer Vielzahl von LANs bei einer hohen
Geschwindigkeit bereitzustellen. Die Vermittlungsfunktion umfasst
das Empfangen eines Datenpakets an einem Quellport, das von einem
Quellknoten stammt, und das Übertragen
dieses Pakets zu wenigstens einem Zielport für die Weiterleitung zu einem
Zielknoten.
-
Ein
Router kann verwendet werden, um LANs miteinander zu verbinden,
die unterschiedliche LAN-Standards ausführen, und/oder um eine Funktionalität auf höherer Ebene
als ein Switch bereitzustellen. Wenn die LAN-Standards, die mit den Quell- und Zielknoten
assoziiert sind, verschieden sind (z. B. Ethernet und Token Ring),
dann kann der Router auch das Format des Pa kets so ändern, dass
es von dem Zielknoten empfangen werden kann. Router arbeiten typischerweise
auf der Netzwerkschicht eines Kommunikations-Protokollstack, der von dem Netzwerk
verwendet wird, wie etwa die Internetwork-Schicht der Transmission
Control Protocol/Internet Protocol(TCP/IP)-Kommunikationsarchitektur.
-
Router
führen
auch verschiedene Funktionen durch, die mit der Modifizierung von
Daten assoziiert sind, die von einer Quelle zu einem Ziel übertragen
werden, wie etwa die Verarbeitung von Paketen, die von dem Router
empfangen werden. Diese Funktionen können das Einfügen, das
Löschen
oder das Ersetzen von Informationen in einem Paket umfassen. So
unterstützen
einige Router zum Beispiel das Multi-Protocol Label Switching(MPLS)-Protokoll.
Das MPLS-Protokoll stellt ein Verfahren zur Zuordnung von Labels
bereit, die Router davon unterrichten, wohin sie ein Paket senden
sollen, und von der Priorität unterrichten,
mit der das Paket empfangen werden soll. In Übereinstimmung mit MPLS werden
Pakete auf einem Label-Switched Path (LSP) übertragen. Ein LSP ist ein
Simplexpfad, der typischerweise eine Sequenz von Labels umfasst,
die jeden Knoten entlang des Pfads von einem Quell-Label Edge Router (LER)
zu einem Ziel-LER repräsentieren.
Ein LER ist eine Vorrichtung (z. B. ein Router), die an der Kante des
Anschlussnetzes und des MPLS-Netzwerks arbeitet, und ist typischerweise
mit der Zuweisung und der Entfernung von LEPs befasst, wenn Verkehr
ein MPLS-Netzwerk betritt oder verlässt. In einer typischen Anordnung
wird ein LSP erzeugt, indem die Labels verkettet werden, um den
Pfad zu bilden. Der LSP wird dann in den Header des Pakets an dem Quell-LER
eingefügt.
Wenn das Paket den Ziel-LER erreicht, werden die Labels aus dem
Paket-Header gelöscht
(entfernt), und das Paket wird weiter verarbeitet, z. B. wird das
Paket weitergeleitet.
-
Ein
LER verwendet oftmals einen Prozessor (CPU), um die LSPs einzufügen und
zu löschen,
die in den Paketen enthalten sind, die über ein MPLS-Netzwerk übertragen
werden. Für
Gewöhnlich führt der
Prozessor auch andere Aufgaben für
den LER durch, wie etwa die Implementierung unterschiedlicher Routing-Protokolle
und die allgemeine Verwaltung des LER. Aber die Benutzung des Prozessors
für das
Einfügen
und Löschen
von LSPs in Paketen kann eine nicht sehr effiziente Benutzung der
Ressourcen des Prozessor bedeuten. Das Einfügen und Löschen von LSPs verbraucht oftmals
Zeit und Speicherres sourcen und kann wertvolle Prozessorressourcen
verschwenden, die besser zur Durchführung von anderen Aufgaben
verwendet werden könnten,
wie zum Beispiel das Ausführen
von Routing-Protokollen.
-
Zum
Beispiel umfasst das Erzeugen und Einfügen eines LSP in ein Paket
oftmals (i) das Erzeugen des LSP durch das Bewegen von verschiedenen Stücken von
Daten von verschiedenen Speicherplätzen in einen einzigen Speicherbereich
und (ii) das Einfügen
des LSP in den Header des Pakets, was des Weiteren das Trennen des
Paket-Header in vorausgehende und hinten anhängende Teile umfassen kann,
bevor der LSP zwischen den Teilen eingefügt wird. Dieser Prozess ist
eindeutig mit einer großen Menge
von Berechnungsressourcen und Speicherbandbreite verbunden. In Abhängigkeit
von dem Betrag an Verkehr, der verarbeitet wird, kann es sein, dass
ein maßloser
Betrag an Prozessorressourcen der Modifizierung des Datenverkehrs
gewidmet werden muss, z. B. der Verarbeitung von LSPs, was die Fähigkeit
des Prozessors beeinträchtigen
kann, andere Aufgaben durchzuführen,
wie etwa die Verarbeitung anderer Pakete, die Verwaltung von Routing-Tabellen
und das Reagieren auf andere Router in dem Netzwerk. Dies wiederum
kann zu einer verringerten Paketverarbeitungsperformanz (d. h.,
Paketdurchsatz) des Routers führen.
Darüber
hinaus können diese
Aufgaben in einigen Fällen
zeitkritisch sein und erfordern es, dass der Prozessor die Aufgabe
innerhalb eines bestimmten Zeitfensters erledigt. Ein Beispiel für eine solche
Aufgabe ist das Senden eines "Keep-Alive"-Pakets innerhalb eines bestimmten Zeitrahmens,
damit der Router von dem Netzwerk bestätigt wird. Wenn der Prozessor
einen beträchtlichen
Teil seiner Ressourcen der Modifizierung von Daten widmet, die von
einer Quelle zu einem Ziel übertragen
werden, kann es sein, dass nicht genügend Ressourcen übrig bleiben,
um diese zeitkritischen Aufgaben durchzuführen.
-
Die
US-A-6275508 B1 offenbart
eine Technik zur Verarbeitung von Datagramm-Headern unter Verwendung
einer dedizierten Hardware-Logik, die eine massive Parallelität verwendet,
um hohe Geschwindigkeiten zu erzielen. Eingabe-FIFOs liefern Daten zu
der Hardware-Logik (eine Sequencer-Einheit und eine L2-Header-Einheit),
die jedes Byte an Daten parallel verarbeitet. Die Hardware-Logik
liest vorbestimmte Anweisungen aus einem Write Control Store (WCS)
aus und führt
diese aus, um die Daten zu modifizieren.
-
Die
US-A-2002/009050 A1 offenbart
eine Technik zur Reduzierung der Verarbeitungslast in einer Netzwerk-Datenpaket-Verarbeitungsvorrichtung, die
in einem Label-Switched Network verwendet wird. Dies wird dadurch
erreicht, dass eine Vielzahl von Labels in der Form eines Label-Stack
an das Paket angehängt
werden, wenn dieses das Netzwerk betritt, und danach ein Zeiger
verwendet wird, um auf spezifische Labels innerhalb des Label-Stack
hinzuweisen, anstatt dass es Knoten innerhalb des Netzwerks erlaubt
wird, Labels dem Paket hinzuzufügen oder
aus diesem zu löschen,
wenn das Paket das Netzwerk durchquert.
-
ZUSAMMENFASSUNG DER ERFINDUNG
-
Die
vorliegende Erfindung stellt ein Verfahren zur Modifizierung von
Daten bereit, die von einer Quelle zu einem Ziel übertragen
werden, wobei das Verfahren die folgenden Schritte umfasst:
Lesen
einer oder mehrerer Anweisungen mittels eines Prozessors, wobei
jede Anweisung eine Operation zur Modifizierung der Daten angibt;
Erzeugen
in Reaktion auf die eine oder mehreren Anweisungen eines oder mehrerer
Befehle, wobei jeder Befehl mit einer Operation zur Modifizierung
der Daten assoziiert ist;
Platzieren der erzeugten Befehle
in einer Datenstruktur;
Initiieren der Übertragung von Daten von der
Quelle zu dem Ziel;
Durchführen
mittels einer Vorrichtung, die unabhängig von dem Prozessor arbeitet,
der Operationen, die mit den Befehlen assoziiert sind, die in der
Datenstruktur enthalten sind, um die Daten so zu modifizieren, wie
dies von den Befehlen angewiesen wird, während die Daten von der Quelle
zu dem Ziel übertragen
werden.
-
In
dem veranschaulichten Ausführungsbeispiel
ist die Quelle ein Kontextspeicher, das Ziel ist ein Ausgabepufferspeicher,
die Datenstruktur ist eine Befehlstabelle, die einen oder mehrere
Einträge
umfasst, und die Daten sind ein Paket-Header, der in dem Kontextspeicher
enthalten ist (d. h., Kontextdaten). Der Prozessor führt Anweisungen
aus, um Operationen durchzuführen,
die die Kontextdaten modifizieren, wie zum Beispiel das Einfügen von
Daten in die und das Löschen
von Daten aus den Kontextdaten. Die Anweisungen erzeugen Befehle,
die mit den Operationen assoziiert sind; diese Befehle werden dann
in Einträge
platziert, die in der Befehlsta belle enthalten sind. Bei Vollendung
der Verarbeitung der Kontextdaten führt der Prozessor einen Sendebefehl aus
und weist einen Data Mover an, die Kontextdaten aus dem Kontextspeicher
in den Ausgabepufferspeicher zu übertragen.
Während
die Kontextdaten übertragen
werden, prüft
der Data Mover die Einträge
in der Befehlstabelle und modifiziert die Daten, wie dies von den
Befehlen angewiesen wird, die in den Einträgen enthalten sind.
-
Vorteilhafterweise
ist die erfinderische Technik eine Verbesserung gegenüber Techniken
aus dem Stand der Technik, weil sie es ermöglicht, dass Daten, die von
einer Quelle zu einem Ziel übertragen werden,
modifiziert werden, ohne dass eine beträchtliche Nutzung von Prozessorressourcen
notwendig ist. Statt dessen gibt der Prozessor in Übereinstimmung
mit der erfinderischen Technik lediglich Befehle an einen Assistenten
(Data Mover) zur Modifizierung der Daten aus. Die Befehle werden
dann ohne Verwendung von Prozessorressourcen durchgeführt, wenn
die Daten von der Quelle zu dem Ziel übertragen werden.
-
KURZE BESCHREIBUNG DER ZEICHNUNGEN
-
Die
obigen und weitere Vorteile der Erfindung können unter Bezugnahme auf die
nachfolgende Beschreibung in Verbindung mit den beigefügten Zeichnungen,
in denen gleiche Bezugszeichen identische oder funktional ähnliche
Elemente angeben, besser verstanden werden.
-
1 ist
ein schematisches Blockdiagramm eines Datennetzwerks, das auf vorteilhafte
Weise mit der vorliegenden Erfindung verwendet werden kann;
-
2 ist
ein schematisches Blockdiagramm auf hoher Ebene eines Zwischenknotens,
der auf vorteilhafte Weise mit der vorliegenden Erfindung verwendet
werden kann;
-
3 ist
ein schematisches Blockdiagramm einer Weiterleitungsmaschine, die
als eine systolische Gruppierung von Prozessoren organisiert ist, die
auf vorteilhafte Weise mit der vorliegenden Erfindung verwendet
werden kann;
-
4 ist
ein schematisches Blockdiagramm eines Prozessor-Cluster, der auf
vorteilhafte Weise mit der vorliegenden Erfindung verwendet werden kann;
-
5 ist
ein schematisches Blockdiagramm eines Befehlstabelleneintrags, der
auf vorteilhafte Weise mit der vorliegenden Erfindung verwendet werden
kann;
-
6 ist
ein schematisches Blockdiagramm einer Bitmaske, die auf vorteilhafte
Weise mit der vorliegenden Erfindung verwendet werden kann;
-
7 ist
ein partielles schematisches Blockdiagramm einer Ausgabepufferspeicher-Logik,
die auf vorteilhafte Weise mit der vorliegenden Erfindung verwendet
werden kann;
-
8 ist
eine Auflistung von beispielhaften Anweisungen, die auf vorteilhafte
Weise mit der vorliegenden Erfindung verwendet werden können;
-
9A–9C sind
Ablaufdiagramme einer Sequenz von Schritten, die auf vorteilhafte
Weise verwendet werden können,
um die vorliegende Erfindung zu implementieren; und
-
10 ist
ein Zustandsautomatendiagramm, das auf vorteilhafte Weise verwendet
werden kann, um einen Zustandsautomaten so zu konfigurieren, dass
der in Übereinstimmung
mit der vorliegenden Erfindung arbeitet.
-
AUSFÜHRLICHE BESCHREIBUNG EINES
VERANSCHAULICHENDEN AUSFÜHRUNGSBEISPIELS
-
1 ist
ein schematisches Blockdiagramm eines Computernetzwerks 100,
das auf vorteilhafte Weise mit der vorliegenden Erfindung verwendet werden
kann. Das Computernetzwerk 100 umfasst eine Ansammlung
von Kommunikationsverbindungen und -segmenten, die mit einer Vielzahl
von Knoten, wie zum Beispiel Endknoten 110 und Zwischenknoten 200,
verbunden sind. Die Netzwerkverbindungen und -segmente können lokale
Netzwerke (LANs) 120, Weitbereichsnetzwerke (WANs), wie
etwa das Internet 170, und WAN-Verbindungen 130 umfassen, die
durch Zwischenknoten 200 miteinander verbunden sind, um
ein Verbundnetz von Computerknoten zu bilden. Diese miteinander
vernetzten Knoten kommunizieren miteinander, indem sie Datenpakete
in Übereinstimmung
mit einem vordefinierten Satz von Protokollen, wie zum Beispiel
dem Transmission Control Protocol/Internet Protocol (TCP/IP) und
dem Internetwork Packet eXchange (PIX) Protokoll, austauschen.
-
2 ist
ein schematisches Blockdiagramm auf hoher Ebene eines Zwischenknotens 200,
der aus veranschaulichenden Gründen
ein Router ist. Ein Beispiel für
einen Router, der auf vorteilhafte Weise mit der vorliegenden Erfindung
verwendet werden kann, ist der Cisco 10000 Series Internet Router,
der von Cisco Systems Incorporated, San Jose, Kalifornien erhältlich ist.
Der Knoten 200 umfasst eine Vielzahl von miteinander verbundenen
Komponenten, die eine Weiterleitungsmaschine 300, verschiedene Speicher,
eine Warteschlangenbildungslogik 210 und Netzwerk-Schnittstellenkarten
(Leitungskarten) 240 umfassen. Die Operationen dieser Komponenten werden
vorzugsweise synchron durch ein Taktmodul 270 gesteuert,
obwohl die gruppierten Elemente der Weiterleitungsmaschine 300 operativ
so konfiguriert sein können,
dass sie asynchron funktionieren. In dem veranschaulichenden Ausführungsbeispiel
erzeugt das Taktmodul 270 Taktsignale bei einer Frequenz
von z. B. 200 Megahertz (d. h., Taktzyklen von 5 Nanosekunden),
und verteilt sie global über
Taktleitungen zu den Komponenten des Zwischenknotens.
-
Die
Speicher umfassen allgemein Direktzugriffsspeicher-(RAM)-Speicherstellen,
die durch die Weiterleitungsmaschine 300 adressierbar sind,
und eine Logik zum Speichern von Datenstrukturen, auf die von den
Komponenten zugegriffen wird, und von Software-Programmen, die Programme
einschließen,
die Ausführungsformen
der vorliegenden Erfindung implementieren. Ein Betriebssystem, von
dem Teile typischerweise im Speicher resident sind und von der Weiterleitungsmaschine 300 ausgeführt werden,
organisiert funktionell den Knoten 200, indem es unter
anderem Netzwerkoperationen zur Unterstützung von Software-Prozessen
aufruft, die in dem Knoten 200 ablaufen. Es wird den Fachleuten
auf dem Gebiet offensichtlich sein, dass andere Speichereinrichtungen,
die verschiedene computerlesbare Medien einschließen, zum
Speichern und zum Ausführen
von Programmanweisungen verwendet werden können, die Bestandteil der erfinderischen
Technik und des erfinderischen Mechanismus sind, die hier beschrieben
sind.
-
Die
Pufferspeicher- und Warteschlangenbildungseinheit (BQU; buffer and
queuing unit) 210 ist mit einem Paketspeicher 220 zum
Speichern von Paketen und einem Warteschlangenspeicher 220 zum Speichern
von Netzwerk- und Verbindungsschicht-Headern der Pakete in Datenstrukturen,
wie etwa Verbundlisten, die als Warteschlangen organisiert sind
(nicht gezeigt), verbunden. Die BQU 210 umfasst des Weiteren
Schnittstellenschaltungen für das
Verbinden der Weiterleitungsmaschine 300 mit einer Vielzahl
von Leitungskarten 240 über
eine Selektorschaltung 250, die einen Arbiter 255 aufweist. Die
Leitungskarten 240 können
zum Beispiel Ports des Typs Asynchronous Transfer Mode (ATM), Fast Ethernet
(FE) und Gigabit Ethernet (GE) umfas sen, von denen jeder herkömmliche
Schnittstellenschaltungen, die die Signal-, elektrischen und mechanischen
Charakteristiken enthalten können,
und Austauschschaltungen umfasst, die für die Verbindung mit den physikalischen
Medien und den Protokollen, die über
diese Medien ablaufen, benötigt
werden.
-
Ein
Routing-Prozessor 260 führt
herkömmliche
Routing-Protokolle für
die Kommunikation direkt mit der Weiterleitungsmaschine 300 aus.
Die Routing-Protokolle umfassen im Allgemeinen topologische Informationsaustausche
zwischen Zwischenknoten, um bevorzugte Pfade durch das Netzwerk auf
der Basis zum Beispiel der Ziel-IP-Adressen zu bestimmen. Diese
Protokolle stellen Informationen bereit, die von dem Prozessor 260 verwendet
werden, um Weiterleitungstabellen zu erstellen und zu verwalten.
Die Tabellen werden in die externen Speicher 340 als Weiterleitungsinformationsbasis-(FIB; forwarding
information base)-Tabellen geladen, die von der Maschine 300 verwendet
werden, um zum Beispiel Schicht-2-(L2)- und Schicht-3-(L3)-Weiterleitungsoperationen
durchzuführen.
Wenn ein Header zum Beispiel in Übereinstimmung
mit einem IP-Routing verarbeitet wird, bestimmt die Maschine 300,
wohin das Paket gesendet werden soll, in dem sie in die FIB unter
Verwendung einer IP-Adresse des Header indexiert. Die Ausführung der
Weiterleitungsoperationen führen
dazu, dass die Ziel-Media Access Control-(MAC)-Adressen der Header von der Weiterleitungsmaschine 300 neu
geschrieben werden, um Ausgangsports für die Pakete zu identifizieren.
-
Die
Weiterleitungsmaschine 300 umfasst ein symmetrisches Multiprozessorsystem,
das eine Vielzahl von Verarbeitungselementen oder Prozessoren aufweist. 3 ist
ein partielles schematisches Blockdiagramm der Weiterleitungsmaschine 300, das
eine Vielzahl von Prozessoren (TMCs) 450 umfasst, die als
eine multidimensionale systolische Gruppierung organisiert sind.
Jeder Prozessor 450 ist vorzugsweise ein überlappender
Prozessor, der unter anderem eine Vielzahl von arithmetischen logischen
Einheiten (ALUs; arithmetic logic units) und eine Registerdatei
enthält,
die eine Vielzahl von Mehrzweckregistern aufweist, die Zwischenergebnisinformationen
speichern, die von den ALUs verarbeitet worden sind. Die Prozessoren 450 können in mehrere
Reihen und Spalten gruppiert werden. In dem veranschaulichenden
Ausführungsbeispiel
sind die Prozessoren in acht (8) Reihen und zwei (2) Spalten in
einer 8 × 2-Gruppierungs-Konfiguration
gruppiert, die zwischen einem Ein gabepufferspeicher 360 und
einem Ausgabepufferspeicher 700 eingebettet ist. Aber es
sei angemerkt, dass andere Anordnungen, wie zum Beispiel 4 × 4- oder
8 × 2-
oder 8 × 1-Gruppierungs-Konfigurationen
vorteilhafterweise mit der vorliegenden Erfindung verwendet werden können. Wie
hier angemerkt ist, kann ein einzelner Prozessor, der mehrere Ausführungs-Threads
unterstützt,
die Erfindung vorteilhaft nutzen.
-
Die
Weiterleitungsmaschine 300 ist mit einer Vielzahl von externen
Speicherressourcen 340 über Speichersteuerungen 375 gekoppelt.
Der externe Speicher 340 ist vorzugsweise als eine oder
mehrere Speicherbänke
organisiert und unter Verwendung von Fast Cycle Random Access Memory(FCRAM)-Vorrichtungen implementiert,
obwohl andere Vorrichtungen wie etwa die Reduced Latency Dynamic
Random Access Memory(RLDRAM)-Vorrichtungen oder Static Random Access
Memory(SRAM)-Vorrichtungen verwendet werden können. Der externe Speicher 340 ist
ein externer "Spalten"-Speicher, der so
konfiguriert ist, dass er permanente Daten (z. B. Weiterleitungstabellen,
Warteschlangen), die als eine Reihe von Datenstrukturen organisiert
sind, zur Verwendung bei der Verarbeitung von temporären Daten
(z. B. Paketen) speichern kann. Jede Speichersteuerung 375 enthält eine
Logik, die den Zugriff auf Speicherplätze ermöglicht, die in dem assoziierten
externen Speicher 340 enthalten sind. Wie es hier verwendet
wird, umfasst ein Speichersubsystem einen externen Speicher 340 und dessen
assoziierte Speichersteuerung 375. Die Prozessoren 450 einer
Spalte sind mit einem bestimmten externen Speichersubsystem gekoppelt.
Zum Beispiel sind die Prozessoren der Spalte Eins (d. h., TMC1 in
den Reihen Null bis N) mit einem externen Speichersubsystem gekoppelt,
das die externe Speichersteuerung B 375b und den externen
Speicher B 340b umfasst.
-
Die
Prozessoren 450 einer Reihe sind als ein Cluster 400 organisiert,
der einen Kontextspeicher 430 umfasst, der so konfiguriert
ist, dass er Kontextinformationen (z. B. Paket-Header) hält, die
von den Prozessoren 450 verarbeitet werden. 4 ist
ein schematisches Blockdiagramm eines Cluster 400. Jeder
Prozessor 450 des Cluster ist mit einem Anweisungsspeicher
(TRAM) 420, der so konfiguriert ist, dass er Anweisungen
für die
Ausführung
durch den Prozessor 450 speichert, einer Steuerregistereinheit 410,
dem Kontextspeicher 430 und einer Speicherverwaltungseinheit
(MMU; memory management unit) 460 gekoppelt. Die Steuerregistereinheit 410 umfasst
verschiedene Mehrzweck- und
Steuerregister, die jeweils für
die Speicherung verwendet werden und dazu verwendet werden, die
Operation der TMCs 450 zu steuern. Die MMU 460 ist
unter anderem dazu konfiguriert, die Prozessoren 450 in
die Lage zu versetzen, auf den externen Speicher 340 durch
die externen Speichersteuerung 375 zugreifen zu können.
-
Der
Kontextspeicher 430 ist ein RAM, das so konfiguriert ist,
dass es temporäre
(Kontext)-Daten, wie etwa Paket-Header, hält. Der lokale Speicher 434 ist
ein internes RAM, das so konfiguriert ist, dass es verschiedene
Daten hält,
auf die zugriffen wird, die für
die Prozessoren 450 in einem Cluster 400 zugänglich sind.
Es sollte angemerkt werden, dass andere Formen von Speichern, wie
etwa ein interner oder ein externer Spaltenspeicher (z. B. der Speicher 340),
die für
die Prozessoren 450 einer bestimmten Spalte zugänglich sind,
mit der vorliegenden Erfindung verwendet werden können.
-
Die
Prozessoren 450 jedes Cluster 400 führen Operationen
bei den temporären
Daten aus, die in den Kontextspeicher 430 von dem Eingabepufferspeicher 360 geladen
worden sind, wohingegen die Prozessoren jeder Spalte parallel arbeiten,
um im Wesentlichen die gleiche Operation bei den temporären Daten
durchzuführen,
aber mit einer verschobenen Phase. Temporäre Daten werden zwischen den Eingabe-
und Ausgabepufferspeichern der Maschine 300 über einen
Datenpfadkanal 440 weitergeleitet, der von einer Data-Mover-Schaltung 470 bereitgestellt
wird, die mit dem Prozessor 450 gekoppelt ist. Die Kontextdaten,
die durch den Cluster 400 fließen, werden in dem Kontextspeicher 430 zusammen
mit anderen Daten und Zeigern gespeichert, die auf Daten und verschiedene
Datenstrukturen (z. B. Tabellen) hinweisen, die zum Beispiel in
dem externen Speicher 340 für die Verwendung durch den
Prozessor 450 gespeichert sind.
-
Der
Data Mover 470 umfasst eine Logik, die es ermöglicht,
dass Daten von dem Kontextspeicher 430 zu dem Ausgabepufferspeicher 700 in Übereinstimmung
mit der erfinderischen Technik transferiert werden können. Zu
diesem Zweck umfasst der Data Mover 470 unter anderem eine
Logik, die eine Befehlstabelle 500, einen Zustandsautomaten 474 und eine
Schnittstellenlogik 472 implementiert. Die Schnittstellenlogik 472 umfasst
eine Logik, die den Data Mover 470 mit dem Ausgabepufferspeicher 700 verbindet,
und ermöglichest
es zu veranschaulichenden Zwecken, dass eine 16-Byte-Dateneinheit
und eine assoziierte 2-Byte-Bitmaske zwischen dem Data Mover 470 und
dem Ausgabepufferspeicher 700 transferiert werden können. Der
Zustandsautomat 474 enthält eine kombinatorische und
sequentielle Logik, die so konfiguriert ist, dass sie einen herkömmlichen
Zustandsautomaten implementiert, der unter anderem den Transfer
von Daten von dem Kontextspeicher 430 zu dem Ausgabepufferspeicher 700 ermöglicht.
-
In
dem veranschaulichten Ausführungsbeispiel
werden die Daten, die von dem Kontextspeicher 430 zu dem
Ausgabepufferspeicher 700 transferiert werden, durch Befehle
modifiziert, die von den Prozessoren 450 erzeugt werden.
Diese Befehle enthalten Operationen, wie zum Beispiel Dateneinfüge- und Datenlöschoperationen,
die es ermöglichen, dass
Daten jeweils in die übertragenen
Daten eingefügt
und aus diesen gelöscht
werden können.
Die Befehle, die von den Prozessoren 450 erzeugt werden, werden
in einer Befehlstabelle 500 gehalten, die eine Datenstruktur
ist, die zu illustrativen Zwecken als eine Tabelle konfiguriert
ist, die einen oder mehrere Einträge enthält. Es sollte angemerkt werden,
dass andere Typen von Datenstrukturen verwendet werden können, um
die Befehlstabelle 500 zu implementieren, wie zum Beispiel
eine Array, eine Verbundliste, eine Variable, ein Register oder
eine Registerdatei. Jeder Eintrag hält einen Befehl, der mit einer Operation
(z. B. einer Dateneinfügeoperation
oder einer Datenlöschoperation)
assoziiert ist, die bei den Daten durchgeführt wird, die von dem Kontextspeicher 430 zu
dem Ausgabepufferspeicher 370 übertragen werden.
-
5 ist
ein schematisches Blockdiagramm eines Befehlstabelleneintrags 510,
der auf vorteilhafte Weise mit der vorliegenden Erfindung verwendet werden
kann. Der Eintrag 510 enthält ein Operationscode-Feld
(OP_CODE-Feld) 520,
ein Kontextspeicher-(Quell)-Adressenfeld (C_ADDR-Feld) 540,
ein Längenfeld
(LEN-Feld) 560 und ein externes Adressenfeld (X_ADDR-Feld) 580.
Das OP_CODE-Feld 520 hält
einen Wert, der mit der Operation (z. B. Daten einfügen, Daten
löschen)
assoziiert ist, die bei den Daten durchgeführt wird, die übertragen
werden. Jede Operation ist außerdem
mit einer Anfangsadresse, einer Länge und optional mit einer
externen Adresse assoziiert. Das C_ADDR-Feld 540 hält eine Adresse, die die Anfangsadresse
der Daten in einem Kon textspeicher repräsentiert, an der die Operation 520 durchgeführt wird.
Das LEN-Feld 560 hält
einen Wert, der zum Beispiel den Betrag an Daten-Bytes repräsentiert,
auf den von dem Operationscode 520 eingewirkt wird. Das
X_ADDR-Feld 580 hält
eine Adresse, die mit externen Daten assoziiert ist, die zum Beispiel
in die übertragenen
Daten eingefügt werden.
-
Wie
angemerkt ist, werden zwischen dem Data Mover 470 und dem
Ausgabepufferspeicher 700 zu illustrativen Zwecken 16 Bytes
an Daten pro Zeitpunkt übertragen.
Die Daten werden von einer 2-Byte-Bitmaske begleitet, die mit den
16 Bytes an Daten assoziiert ist und die angibt, welche Bytes innerhalb
der Daten "gültig" (freigegeben) und
welche "nicht gültig" (nicht freigegeben)
sind. Wie dies hier verwendet wird, ist ein Byte "gültig", wenn es einen gültigen Datenwert enthält, und
ist "ungültig", wenn es keinen
gültigen
Datenwert enthält
(d. h., einen Datenwert, der "nicht
definiert" ist).
Es sollte angemerkt werden, dass, obwohl in dem veranschaulichten
Ausführungsbeispiel
die Bitmaske gültige
und ungültige Bytes
in den Daten repräsentiert,
auch Bitmasken, die z. B. gültige
oder ungültige
Bits oder Worte in den übertragenen
Daten repräsentieren,
den Vorteil aus der erfinderischen Technik nutzen können.
-
6 ist
ein schematisches Blockdiagramm einer Bitmaske 600, die
auf vorteilhafte Weise mit der vorliegenden Erfindung verwendet
werden kann. Zu veranschaulichenden Zwecken umfasst die Bitmaske 600 16
Ein-Bit-"Byte-Freigabe"-(BE; byte enable)-Felder 620a–p, wobei
jedes Feld mit einem Byte in der Dateneinheit assoziiert ist und
einen Wert enthält,
der anzeigt, ob das assoziierte Datenbyte gültig oder ungültig ist.
Zum Beispiel entspricht BE0 620a dem Byte in der Position
Null (Byte 0) in der Dateneinheit und gibt an, ob das Byte 0 einen
gültigen
oder ungültigen
Bytewert enthält.
Zu veranschaulichenden Zwecken gibt das Konfigurieren des Feldes 620 derart,
dass es eine Null enthält,
an, dass das entsprechende Byte ungültig ist. In ähnlicher
Weise gibt das Konfigurieren des Feldes 620 derart, dass
es eine Eins enthält,
an, dass das entsprechende Byte gültig ist.
-
Der
Ausgabepufferspeicher 700 enthält eine Schnittstellenlogik 710,
die so konfiguriert ist, dass sie Daten und Byte-Freigabe-Informationen
erfasst, die von dem Data Mover 470 übertragen werden. 7 ist
ein partielles schematisches Blockdiagramm der Schnittstellenlogik 710,
die eine Datenlenklogik 720, ein Arbeitsregister 740 und
eine Ausgabewarteschlange 780 umfasst. Die Datenlenklogik 720 enthält eine
Logik, die so konfiguriert ist, dass sie gültige Datenbytes, die von dem
Data Mover 470 erfasst worden sind, in das Arbeitsregister 740,
welches zu veranschaulichenden Zwecken ein Schieberegister ist, "lenkt" (überträgt). Die
Ausgabewarteschlange 780 ist zu veranschaulichenden Zwecken eine
First-In-First-Out-(FIFO)-Warteschlange, die einen oder mehrere
Einträge 782 umfasst,
die jeweils gültige
Daten halten, die von dem Arbeitsregister 740 übertragen
worden sind. Daten und Byte-Freigabe-Informationen, die von der
Schnittstellenlogik 472 des Data Mover erfasst worden sind,
werden zu der Datenlenklogik 720 übertragen, die gültige Datenbytes,
die in den Daten enthalten sind, in das Arbeitsregister lenkt, indem
sie die gültigen
Bytes in das Register 740 verschiebt. Die Datenlenklogik
weist dann das Arbeitsregister an, die gültigen Daten zu einem Eintrag 782 an
dem hinteren Ende der Ausgabe-FIFO-Warteschlange 780 zu
transferieren.
-
Die
vorliegende Erfindung betrifft eine effiziente Technik zur Modifizierung
von Daten, die von einer Quelle (z. B. dem Kontextspeicher 430)
zu einem Ziel (z. B. dem Ausgabepufferspeicher 700) eines Zwischenknotens,
wie etwa einem Router 200, übertragen werden. Gemäß der Technik
werden Befehle, die Operationen enthalten, die die Daten modifizieren,
von zum Beispiel dem Prozessor 450 erzeugt und in eine
Datenstruktur (z. B. eine Befehlstabelle 500) platziert.
Die Operationen, die mit den Befehlen assoziiert sind, modifizieren
die Daten je nach Anweisung durch die Befehle, wenn die Daten von
der Quelle zu dem Ziel übertragen
werden.
-
In
dem veranschaulichten Ausführungsbeispiel
modifiziert ein Prozessor 450 Daten (z. B. fügt er Daten
in diese ein oder löscht
Daten aus diesen), die von dem Kontextspeicher 430 zu dem
Ausgabepufferspeicher 700 übertragen werden, indem er
Anweisungen ausführt,
um Befehle zu erzeugen, die die Modifikation spezifizieren, die
durchgeführt
wird. 8 veranschaulicht eine Reihe von beispielhaften Anweisungen 800,
die verwendet werden können, um
Daten in die transferierten Daten einzufügen oder Daten aus diesen zu
löschen.
Die Anweisung 810 ist eine Kontextspeicher-Dateneinfügeanweisung
(xcmi), die bewirkt, dass "Einfügedaten" in die Daten eingefügt werden,
die von dem Kontextspeicher 430 zu dem Ausgabepufferspeicher 700 übertragen
werden. Die Anweisung 810 spezifiziert eine Operation (d.
h., xcmi), die "Daten einfügen" angibt sowie verschiedene
Argumente/Parameter, die einen Betrag an Daten, der eingefügt werden
soll (z. B. 2 Bytes), einschließen,
eine Kontextspeicheradresse, an der die Daten eingefügt werden
sollen (d. h., 110), und eine Adresse der Einfügedaten
(d. h., 500). Es sei angemerkt, dass die Adresse der Einfügedaten
eine Adresse in zum Beispiel dem Kontextspeicher 430, dem
lokalen Speicher 434 oder dem externen Speicher 340 sein
kann. Die Anweisung 820 ist eine Kontextspeicherlöschanweisung
(xcmd), die bewirkt, dass Daten aus den Daten gelöscht werden,
die von dem Kontextspeicher 430 zu dem Ausgabepufferspeicher 700 übertragen
werden. Die Anweisung 820 spezifiziert eine Operation (d.
h., xcmd), die "Daten löschen", einen Betrag an
Daten, der gelöscht
werden soll (d. h., 2 Bytes), und eine Kontextspeicheradresse angibt,
an der die Daten gelöscht
werden (d. h., 118). Die Anweisung 830 ist eine
Kontextspeichersendeanweisung (xmt), die bewirkt, dass Daten von dem
Kontextspeicher 430 zu dem Ausgabepufferspeicher 700 übertragen
werden. Die Anweisung 830 spezifiziert eine Operation (d.
h., xmt), die Sendedaten, eine Anfangs-Kontextspeicheradresse (d.
h., 100) und einen Betrag an Daten, der übertragen
werden soll, in zum Beispiel Bytes (d. h., 64) angibt.
-
Die 9A–9C sind
Ablaufdiagramme, die eine Reihe von Schritten veranschaulichen,
die verwendet werden können,
um die Anweisungen 800 in Übereinstimmung mit der erfinderischen
Technik zu verarbeiten. Unter Bezugnahme auch auf 8 ruft
der Prozessor 450 beim Schritt 910 eine erste Anweisung 810 ab
und stellt fest, ob die Anweisung eine Kontextspeichereinfügeanweisung
ist (Schritt 920). Wenn nicht, dann geht die Sequenz weiter
zum Schritt 930. Da die Anweisung, wie oben angemerkt worden
ist, eine Kontextspeichereinfügeanweisung ist,
geht die Sequenz zum Schritt 925 weiter, bei dem der Prozessor 450 einen
Befehl zur Einfügung
von Daten in das Paket erzeugt, wie dies von der Anweisung 810 spezifiziert
ist, und den Befehl in einem Befehlstabelleneintrag 510 platziert.
Insbesondere erzeugt der Prozessor 450 den Befehl, indem
er Werte erzeugt, die den Operationscode, die Kontextspeicheradresse,
die Länge
und die Adresse der Einfügedaten
repräsentiert,
die in der Anweisung 810 spezifiziert sind. Der Prozessor 450 platziert
diese Werte dann jeweils in den Feldern OP_CODE 520, C_ADDR 540,
LEN 560 und X_ADDR 580 des Eintrags 510 in
der Befehlstabelle 500.
-
Die
Sequenz geht dann weiter zum Schritt 942, bei dem die nächste Anweisung
abgerufen wird, bevor sie zum Schritt 920 zurückkehrt.
Es sei angenommen, dass die Anweisung 820 die nächste Anweisung
ist. Beim Schritt 920 wird eine Überprüfung durchgeführt, um
festzustellen, ob die Anweisung 820 eine Kontextspeichereinfügeanweisung
ist. Da die Anweisung 820 keine Kontextspeichereinfügeanweisung
ist, geht die Sequenz weiter zum Schritt 920, bei dem eine Überprüfung durchgeführt wird,
um festzustellen, ob die Anweisung 820 eine Kontextspeicherlöschanweisung
ist.
-
Da
die Anweisung 820, wie oben angemerkt worden ist, eine
Kontextspeicherlöschanweisung
ist, geht die Sequenz weiter zum Schritt 935, bei dem der Prozessor 450 einen
Befehl zur Löschung
von Daten aus dem Paket erzeugt, wie dies von der Anweisung 820 spezifiziert
ist, und den Befehl in einem Befehlstabelleneintrag 510 platziert.
Insbesondere erzeugt der Prozessor 450 den Befehl, indem
er Werte erzeugt, die den Operationscode, die Kontextspeicheradresse
und die Länge
repräsentieren,
die in der Anweisung 820 spezifiziert sind. Der Prozessor 450 platziert
dann diese Werte jeweils in den Feldern OP_CODE 520, C_ADDR 540 und
LEN 560 des Eintrags 510 in der Befehlstabelle 500.
-
Die
Sequenz geht dann weiter zum Schritt 942, bei dem die nächste Anweisung
abgerufen wird, bevor sie wieder zurück zum Schritt 920 geht.
Es sei angenommen, dass die Anweisung 830 die nächste Anweisung
ist. Beim Schritt 920 wird, wie oben angemerkt, eine Überprüfung durchgeführt, um
festzustellen, ob die Anweisung 830 eine Kontextspeichereinfügeoperation
ist. Da die Anweisung 830 keine Kontextspeichereinfügeoperation
ist, geht die Sequenz weiter zum Schritt 930, bei dem die
Anweisung 830 überprüft wird,
um festzustellen, ob sie eine Kontextspeicherlöschanweisung ist. Da die Anweisung 830 keine
Kontextspeicherlöschanweisung
ist, geht die Sequenz weiter zum Schritt 940, bei dem eine Überprüfung durchgeführt wird,
um festzustellen, ob die Anweisung 830 eine Kontextspeichersendeanweisung
ist. Da die Anweisung 830, wie oben angemerkt, eine Kontextspeichersendeanweisung
ist, geht die Sequenz weiter zum Schritt 945 (9B), bei
dem der Prozessor den Data Mover 470 anweist, Daten aus
dem Kontextspeicher 430 zu dem Ausgabepufferspeicher 700 zu
transferieren. Insbesondere weist der Prozessor 450 den
Data Mover 470 an, 64 Bytes an Daten aus dem Kontextspeicher 470 ausgehend
von der Kontextspeicherstelle 100 zu dem Ausgabepufferspeicher 700 zu
transferieren. Beim Schritt 947 erfasst der Data Mover 470 16
Bytes an Daten aus dem Kontextspeicher ausgehend von der Adresse 100.
-
Beim
Schritt 950 durchsucht der Data Mover 470 die
Befehlstabelle 500 nach einem Eintrag 510 in der
Befehlstabelle, der mit dem Bereich von Adressen übereinstimmt,
der mit den erfassten Daten assoziiert ist. Ein Eintrag 510 passt
zu dem Bereich von Adressen, der mit den erfassten Daten assoziiert
ist, wenn der Bereich von Adressen, der durch die Kombination aus
den Inhalten des C_ADDR-Feldes 540 und des LEN-Feldes 560 spezifiziert
ist, den Bereich von Adressen überlappt,
der mit den erfassten Daten assoziiert ist. Zum Beispiel umfasst
der Bereich von Adressen, der mit den erfassten Daten assoziiert
ist, Kontextspeicheradressen in dem Bereich von 100 bis 115.
Der Adressenbereich, der von der Anweisung 810 spezifiziert
wird, überlappt
diesen Bereich; deshalb ist der Eintrag 510, der mit der
Anweisung 810 assoziiert ist, ein übereinstimmender Eintrag. Beim Schritt 955 nimmt
der Data Mover 470 dann, wenn kein übereinstimmender Eintrag gefunden
wird, an, dass die erfassten Daten nicht modifiziert sind, und die
Sequenz geht weiter zum Schritt 960, bei dem eine Bitmaske
für die
erfassten Daten erzeugt wird, wie dies oben beschrieben worden ist,
und die Bitmaske und die Daten werden zu dem Ausgabepufferspeicher
transferiert. Wenn andererseits ein übereinstimmender Eintrag gefunden
wird, geht die Sequenz zum Schritt 965. Es sei angenommen,
dass ein übereinstimmender
Eintrag 510, der mit der Anweisung 810 assoziiert
ist, gefunden worden ist.
-
Beim
Schritt 965 wird der Inhalt des OP_CODE-Feldes 520 des übereinstimmenden
Eintrags untersucht, um festzustellen, ob er eine "Datenlösch"-Operation repräsentiert. Wenn dem so ist, dann
geht die Sequenz weiter zum Schritt 970; anderenfalls geht
die Sequenz weiter zum Schritt 975 (9C). Wie
oben angegeben worden ist, gibt der Inhalt des OP_CODE-Feldes 520 in
dem übereinstimmenden
Eintrag 510 eine Dateneinfügeoperation an; deshalb geht
die Sequenz weiter zum Schritt 975.
-
Beim
Schritt 975 erzeugt der Data Mover 470 eine Bitmaske 600 für die "vorausgehenden Daten" in den erfassten
Kontextspeicherdaten und überträgt die erfassten
Daten und die Bitmaske 600 zu dem Ausgabepufferspeicher 700.
-
Wie
sie hier verwendet werden, beziehen sich die vorausgehenden Daten
auf die Daten in den erfassten Kontextspeicherdaten, die den Daten
vorausgehen, die eingefügt
werden. Wie zum Beispiel oben angemerkt worden ist, reichen die
Adressen, die von den erfassten Kontextspeicherdaten repräsentiert
werden, von 100 bis 115, und der C_ADDR-Wert des übereinstimmenden
Eintrags ist 110. Deshalb umfassen die vorausgehenden Daten die
gültigen
Datenbytes, die aus den Kontextspeicheradressstellen 100 bis 109 erfasst
wurden. Der Data Mover 470 erzeugt die Bitmaske für die vorausgehenden
Daten, indem er die Bits in der Maske 600 markiert, die
die Bytestellen 100 bis 109 repräsentieren
(d. h., BE0 620a bis BE9 620j), um anzuzeigen, dass
die Daten gültig
sind, und indem er die restlichen Bits in der Maske 600 (d.
h., BE10 620k bis BE15 620p) markiert, um anzuzeigen,
dass die restlichen Daten ungültig
sind (in Bezug darauf, dass es sich um vorausgehende Daten handelt).
Der Data Mover 470 überträgt dann
die erfassten Daten zusammen mit der Bitmaske 600 zu der
Ausgabepufferspeicher-Logik 700, die die Daten und die
Bitmaske so verarbeitet, wie dies oben beschrieben worden ist.
-
Beim
Schritt 977 erfasst der Data Mover 470 "Einfügedaten", d. h., Daten, die
in den Strom von Daten eingefügt
werden, die von dem Kontextspeicher 430 zu dem Ausgabepufferspeicher 700 übertragen
werden. Beim Schritt 980 erzeugt der Data Mover 470 eine
Bitmaske 600 für
die erfassten Einfügedaten
und transferiert die erfassten Einfügedaten und die Bitmaske 600 zu
dem Ausgabepufferspeicher 700. Insbesondere ruft der Data
Mover 470 die Inhalte des LEN-Feldes 560 und des
X_ADDR-Feldes 580 des übereinstimmenden
Eintrags 510 ab. Der Data Mover erfasst dann zum Beispiel
16 Bytes oder die Anzahl an Bytes, die von dem Inhalt des LEN-Feldes 560 spezifiziert
wird, je nachdem, welches weniger ist, der Einfügedaten ausgehend von der Adresse,
die in dem X_ADDR-Feld 580 des übereinstimmenden Eintrags spezifiziert
ist. Der Data Mover 470 erzeugt dann eine Bitmaske 600 für die erfassten
Einfügedaten,
wie dies oben beschrieben worden ist. Die Einfügedaten und die Bitmaske 600 werden
dann zu dem Ausgabepufferspeicher 700 übertragen, bei dem sie weiter
verarbeitet werden.
-
Zum
Beispiel enthält
das LEN-Feld 560 in dem übereinstimmenden Eintrag 510,
der mit der Anweisung 810 assoziiert ist, einen Wert, der
zwei Bytes an Einfügedaten
angibt. Der Data Mover 470 ruft die beiden Bytes an Einfüge daten
aus der Stelle ab, die von dem X_ADDR-Feld 580 spezifiziert
ist (d. h., 500). Die Bitmaske 600 wird dann erzeugt,
indem die Byte-Freigabe-Bits markiert werden, die zum Beispiel den
Bytes 0 und 1 entsprechen (BE0 620a und BE1 620b),
um anzuzeigen, dass sie gültig
sind, und indem die restlichen Bits, d. h. BE2 620c bis
BE15 620p, markiert werden, um anzuzeigen, dass sie ungültig sind.
Die Einfügedaten
werden dann in die Bytepositionen 0 und 1 einer 16-Byte-Dateneinheit platziert,
die zusammen mit der erzeugten Bitmaske 600 zu dem Ausgabepufferspeicher 700 übertragen wird.
-
Beim
Schritt 982 stellt der Data Mover 470 fest, ob
alle Einfügedaten,
die von dem LEN-Feld 560 des übereinstimmenden Eintrags spezifiziert
sind, übertragen
worden sind. Wenn nicht, dann geht die Sequenz weiter zum Schritt 984,
bei dem die nächsten
Einfügedaten
erfasst werden. Die Schritte 980 bis 984 werden
wiederholt, bis alle Einfügedaten,
die durch die Kombination der Inhalte der Felder X_ADDR 580 und
LEN 560 des übereinstimmenden Eintrags
repräsentiert
werden, zu dem Ausgabepufferspeicher 700 übertragen
worden sind.
-
Die
Sequenz geht dann weiter zum Schritt 985, bei dem der Data
Mover 470 eine Bitmaske 600 erzeugt, die die nachlaufenden
bzw. hinten anhängenden
Daten repräsentiert,
und zwar in einer Art und Weise, wie dies oben beschrieben ist,
und die erfassten Kontextspeicherdaten und die erzeugte Bitmaske 600 zu
dem Ausgabepufferspeicher 700 überträgt. So wie sie hier verwendet
werden, sind die nachlaufenden bzw. hinten anhängenden Daten die gültigen Daten
in den erfassten Kontextspeicherdaten, die nicht als die vorausgehenden
Daten beim Schritt 975 übertragen
worden sind. Zum Beispiel umfassen die vorausgehenden Daten, wie
dies oben angemerkt worden ist, die Bytes 0 bis 9 in den erfassten
Kontextspeicherdaten. Die restlichen gültigen Daten, d. h., die Bytes
10 bis 15 in den erfassten Kontextspeicherdaten, umfassen die hinten
anhängenden
Daten. Deshalb erzeugt der Data Mover 470 eine Bitmaske 600,
um die hinten anhängenden
Daten zu repräsentieren,
indem er anzeigt, dass in der Bitmaske die Bytes 0 bis 9 ungültige Daten
enthalten und die Bytes 10 bis 15 gültige Daten enthalten. Die
erzeugte Bitmaske 600 und die erfassten Kontextspeicherdaten
werden dann zu dem Ausgabepufferspeicher 700 übertragen.
-
Die
Sequenz geht dann weiter zum Schritt 990 (9B),
bei dem der Data Mover 470 feststellt, ob der Betrag an
Daten, der von der Sendeanweisung 830 spezifiziert ist, übertragen
worden ist. Wenn ja, dann geht die Sequenz weiter zum Schritt 994;
anderenfalls geht die Sequenz zum Schritt 992 weiter, bei
dem die nächsten
Kontextspeicherdaten erfasst werden, bevor sie zum Schritt 950 zurückkehrt.
Da die Sendeanweisung 830 64 Bytes spezifiziert und nur
18 Bytes übertragen
worden sind (d. h., 10 Bytes an vorausgehenden Daten, 2 Bytes an
Einfügedaten
und 6 Bytes an hinten anhängenden
Daten), erfasst der Data Mover 470 die nächsten 16 Bytes
der Kontextspeicherdaten und geht zum Schritt 950 weiter.
-
Beim
Schritt 950 durchsucht der Data Mover 470 die
Befehlstabelle, wie dies oben beschrieben worden ist, und lokalisiert
einen übereinstimmenden Eintrag 500 (Schritt 955),
der Informationen enthält, die
von der Anweisung 820 spezifiziert sind. Die Sequenz geht
dann weiter zum Schritt 965, bei dem der Data Mover 470 das
OP_CODE-Feld 520 des übereinstimmenden
Eintrags prüft,
um festzustellen, ob er eine Löschoperation
spezifiziert. Wie oben angemerkt worden ist, enthält das OP_CODE-Feld 520 einen
Wert, der eine Löschoperation
anzeigt, so dass die Sequenz zum Schritt 970 weitergeht,
bei dem der Data Mover 470 eine Bitmaske 600 in
einer Art und Weise erzeugt, wie dies oben beschrieben ist, die
die gelöschten
Daten repräsentiert.
Der Data Mover 470 überträgt dann
die Bitmaske 600 und die erfassten Daten zu dem Ausgabepufferspeicher.
Insbesondere untersucht der Data Mover 470 die Inhalte
des C_ADDR-Feldes 540 und des LEN-Feldes 560 des übereinstimmenden
Eintrags 500 und bestimmt die Bytes in den erfassten Kontextspeicherdaten,
die gelöscht
sind. Der Data Mover 470 erzeugt dann die Bitmaske 600,
wie oben beschrieben, was das Markieren der Bits, die den gelöschten Bytes
entsprechen, als ungültig
einschließt.
-
Es
sei zum Beispiel angenommen, dass die erfassten Kontextspeicherdaten
mit den Kontextspeicher-Adressstellen 116 bis 131 assoziiert
sind, und dass ein übereinstimmender
Eintrag 510, der in der Befehlstabelle 500 gefunden
wurde, Informationen enthält,
die von der Anweisung 820 spezifiziert werden. Der Data
Mover 470 erzeugt eine Bitmaske 600, bei der das
Bit BE2 620c und das Bit BE3 620d markiert sind,
um anzugeben, das die Daten, die von diesen Bits repräsentiert
werden, ungültig
sind. Der Data Mover 470 markiert die rest lichen Bits (d.
h., BE0 620a, BE1 620b und BE4 620e bis
BE15 620p), um anzugeben, dass die Daten, die von diesen
Bits repräsentiert
werden, gültig
sind. Die erzeugte Bitmaske 600 und die erfassten Kontextspeicherdaten
werden dann zu dem Ausgabepufferspeicher 700 transferiert,
bei dem sie weiter verarbeitet werden.
-
Die
Schritte 950 bis 992 werden wiederholt, bis alle
Daten, die in der Kontextspeichersendeanweisung spezifiziert sind, übertragen
worden sind. Die Sequenz geht dann weiter zum Schritt 994,
bei dem die Einträge 510 in
der Befehlstabelle gelöscht werden,
und geht dann weiter zum Schritt 995, bei dem die Sequenz
endet.
-
10 ist
ein Zustandsdiagramm 1000, das verwendet werden kann, um
den Zustandsautomaten 474 so zu konfigurieren, dass der
in Übereinstimung
mit der erfinderischen Technik arbeitet. Der Zustandsautomat 474 beginnt
in einem "Ruhe"-Zustand 1010.
Der Prozessor 450 führt
eine Kontextspeichersendeanweisung aus und weist den Data Mover 470 an,
die Daten von dem Kontextspeicher zu dem Ausgabepufferspeicher zu übertragen,
wie dies oben beschrieben worden ist. Der Zustandsautomat 474 geht von
dem "Ruhe"-Zustand 1010 zu dem Zustand "Kontextdaten erfassen
und Befehlstabelle durchsuchen" 1020 weiter.
Beim Zustand 1020 weist der Zustandsautomat 474 den
Data Mover 470 an, Kontextspeicherdaten (z. B. 16 Datenbytes)
aus dem Kontextspeicher 430 zu erfassen. Der Zustandsautomat 474 durchsucht
dann die Befehlstabelle 500 und stellt fest, ob die Adresse
irgendeiner der erfassten Kontextspeicherdaten in den Bereich von
Adressen fällt, der
von der Kombination der Inhalte der Felder C_ADDR 540 und
LEN 560 eines übereinstimmenden
Eintrags 510 in der Befehlstabelle 500 repräsentiert
wird. Falls nicht, dann geht der Zustandsautomat 474 weiter
zu dem Zustand "Bitmaske
erzeugen" 1030,
bei dem er eine Bitmaske 600 für die erfassten Daten erzeugt,
wie dies oben beschrieben worden ist. Der Zustandsautomat 474 überträgt dann
die Daten und die erzeugte Bitmaske zu dem Ausgabepufferspeicher
und kehrt zu dem "Kontextdaten
erfassen und Befehlstabelle durchsuchen"-Zustand 1020 zurück.
-
Wenn
die Adresse irgendeiner der erfassten Kontextspeicherdaten in den
Bereich von Adressen fällt,
der durch die Kombination der Inhalte der Fel der C_ADDR 540 und
LEN 560 in dem übereinstimmenden
Eintrag 510 repräsentiert
wird, geht der Zustandsautomat 474 weiter zu dem Zustand "OP_CODE des übereinstimmenden
Eintrags prüfen" 1040 weiter,
bei dem der Data Mover 470 das OP_CODE-Feld 520 des übereinstimmenden
Eintrags 510 prüft. Wenn
das OP_CODE-Feld 520 einen Wert enthält, der eine "Daten-Iösch"-Operation angibt, dann geht der Zustandsautomat 474 weiter
zu dem Zustand "Löschdaten-Bitmaske
erzeugen" 1050,
bei dem eine Bitmaske 600, die die gelöschten Daten repräsentiert,
erzeugt wird, wie dies oben beschrieben ist. Die Daten und die erzeugte
Bitmaske werden dann zu dem Ausgabepufferspeicher 700 übertragen,
und der Zustandsautomat 474 kehrt zu dem Zustand "Kontextdaten erfassen
und Befehlstabelle durchsuchen" 1020 zurück.
-
Wenn
das OP_CODE-Feld 520 einen Wert enthält, der eine "Dateneinfüge"-Operation angibt, dann
geht der Zustandsautomat 474 zu dem Zustand" Bitmaske für die vorausgehenden
Daten erzeugen" 1060 weiter,
bei dem die Bitmaske 600 für die vorausgehenden Daten
erzeugt wird, wie dies oben beschrieben ist. Die Daten und die erzeugte
Bitmaske werden dann zu dem Ausgabepufferspeicher 700 übertragen,
und der Zustandsautomat 474 geht zu dem Zustand "Einfügedaten
erfassen, Einfügedaten-Freigabe-Bitmaske
erzeugen, und Daten und die Bitmaske zu dem Ausgabepufferspeicher übertragen" 1070 weiter,
bei dem die Einfügedaten
erfasst werden, die Einfügebitmasken 600 erzeugt
werden und die erfassten Einfügedaten
und die assoziierten Bitmasken 600 zu dem Ausgabepufferspeicher übertragen
werden, wie dies oben beschrieben ist. Der Zustandsautomat 474 kehrt
zu diesem Zustand 1070 zurück, bis alle Einfügedaten
(die von dem Wert des LEN-Feldes 560 des übereinstimmenden
Eintrags bestimmt sind) übertragen
worden sind. Der Zustandsautomat 474 geht dann weiter zu
dem Zustand "Bitmaske
für die
hinten anhängenden
Daten erzeugen" 1080,
bei dem die Bitmaske 600 für die "hinten anhängenden Daten" erzeugt wird, wie
dies oben beschrieben worden ist. Die erzeugte Bitmaske 600 und die
hinten anhängenden
Daten werden dann zu dem Ausgabepufferspeicher 700 übertragen
und der Zustandsautomat 474 kehrt zu dem "Kontextdaten erfassen
und Befehlstabelle durchsuchen"-Zustand 1020 zurück. Nachdem
alle Daten übertragen
worden sind, die von der Sendeanweisung spezifiziert sind, kehrt
der Zustandsautomat zu dem "Ruhe"-Zustand 1010 zurück.
-
Obwohl
das oben beschriebene Ausführungsbeispiel
der Erfindung die Erfindung so beschreibt, dass sie unter Verwendung
verschiedener Hardware-Vorrichtung
implementiert ist, ist dies nicht als eine Beschränkung der
Erfindung gedacht. Vielmehr kann die Erfindung als Ganzes oder zum
Teil in Software implementiert werden, die als ein computerlesbaren
Medium, wie etwa ein Dynamic Random Access Memory (DRAM) oder eine
Diskette, gespeichert ist, das von einem Computer ausführbare Anweisungen
zur Ausführung
in einem Prozessor enthält.
Zum Beispiel kann die Befehlstabelle als eine Software-Datenstruktur, wie
etwa eine Tabelle, eine Verbundliste, eine Array, eine Variable,
ein Register oder eine Registerdatei, implementiert werden. Darüber hinaus
kann das Platzieren von Befehlen in die Befehlstabelle sowie auch
die Funktionen, die von dem Data Mover durchgeführt werden, der den Zustandsautomat
enthält,
als Software-Routinen oder -Funktionen implementiert werden.
-
Es
sollte weiter angemerkt werden, dass, obwohl das oben beschriebene
Ausführungsbeispiel der
Erfindung die erfinderische Technik verwendet, um Daten zu modifizieren,
die von einem Kontextspeicher zu einem Ausgabepufferspeicher transferiert
werden, in anderen Ausführungsbeispielen
der Erfindung die erfinderische Technik verwendet wird, um Daten
umzuwandeln (zu modifizieren), die von einer Quelle zu einem Ziel übertragen
werden. So wird in einem Ausführungsbeispiel
der Erfindung die erfinderische Technik zum Beispiel dazu verwendet,
Daten (z. B. Einfügedaten,
Löschdaten)
zu modifizieren, die von einer Quelle, wie etwa einem Knoten in
einem Netzwerk, erfasst wurden, und zu einem Ziel, wie etwa eine
Speichervorrichtung, die mit dem Netzwerk verbunden ist, transferiert
werden. Darüber
hinaus sollte es klar sein, dass die erfinderische Technik dazu
verwendet werden kann, Daten, die von einer Quelle zu einem Ziel übertragen
werden, auf andere Weise als durch das Einfügen oder das Löschen von Daten
in die bzw. aus den Daten, die übertragen
werden, umzuwandeln (zu modifizieren). Zum Beispiel kann die erfinderische
Technik bei der Verschlüsselung
von Daten, die von der Quelle zu dem Ziel übertragen werden, angewendet
werden.
-
Die
obige Beschreibung ist auf spezifische Ausführungsbeispiele der vorliegenden
Erfindung gerichtet worden. Es wird offensichtlich sein, dass andere
Variationen und Modifikationen bei den beschriebenen Ausführungsbei spielen
unter Erreichung einiger oder aller ihrer Vorteile durchgeführt werden
können.