-
Die Erfindung betrifft ein Verfahren
und eine Vorrichtung zur Kompression einer Zeichenkette aus aufeinanderfolgenden
Zeichen, insbesondere gemäß dem LZ77-Standard bzw. dem
GZIP-Standard, bei dem eine längste Übereinstimmung
zu kodierender Zeichen mit dem Dateninhalt eines inhaltsadressierbaren
Speicherbausteines gesucht wird und im Fall der Übereinstimmung die übereinstimmenden
Zeichen wenigstens in Abhängigkeit
ihrer Adresse im Speicherbaustein und der Länge der Übereinstimmung kodiert werden.
-
Zur Komprimierung von Daten z.B.
aus einer Zeichenkette kommen oftmals unterschiedliche Verfahren
zum Einsatz, die sowohl einzeln als auch in Kombination miteinander
genutzt werden können.
Zu nennen sind hierbei beispielsweise die Huffman-Kodierung und
eine wörterbuchbasierte
Kompression, die in ihrer Grundidee der LZ77-Kompression folgt.
-
Der kombinierte Einsatz solcher Verfahren ist
durch die im Internet verbreitete Kompression nach dem GZIP-Standard
bekannt, der eine Realisierung in Software vorsieht. Hierbei wird
zunächst
eine wörterbuchbasierte
Kompression gemäß dem LZ77-Standard
durchgeführt,
wonach anschließend die
kodierten Daten weiterhin einer Huffman-Kodierung unterzogen werden.
-
Hierbei fällt bei einer Lösung auf üblichen Rechnersystemen
der sehr hohe Rechenbedarf und der damit einhergehende große Zeitbedarf
als nachteilig auf.
-
Neben der bereits genannten Kompression nach
dem LZ77-Standard sind auch weitere Verfahren gemäß dem LZ78-Standard
sowie Weiterentwicklungen bekannt, wie beispielsweise die LZW-Kompression,
wobei diese Verfahren auf Ideen von Lempel und Ziv bzw. Welch basieren.
Bei diesen Arten der Kodierung wird auf Wörterbücher zurückgegriffen, die aus den zu
komprimierenden Daten selbst gebildet werden. Im Zusammenhang mit
der vorliegenden Erfindung werden unter Worten bzw. Datenworten
sequentielle Kombinationen beliebiger Zeichen, z.B. Bytes, verstanden.
Die Datenworte können
somit beliebige Länge
aufweisen.
-
Grundlegender Gedanke der genannten Kompressionsstandards
ist es, ein zu komprimierendes Datenwort innerhalb des Wörterbuches
zu suchen und bei einer gefundenen Übereinstimmung das zu komprimierende
Wort durch seine Adresse, d.h. im Wesentlichen seine Position im
Wörterbuch zu
ersetzen, wodurch sich eine Kompression erreichen lässt, wenn
sich die Adresse eines zu komprimierenden Wortes im Wörterbuch
mit weniger Zeichen darstellen lässt,
als zur Darstellung des Datenwortes selbst erforderlich wären.
-
Bei einer Kompression nach dem LZ78-Standard
wird dazu das Wörterbuch
aus einem zu komprimierenden, insbesondere sequentiellen Datenstrom
selbst gebildet. Den Ausgangspunkt bildet ein Wörterbuch, in dem zunächst nur
alle möglichen
Einzelzeichen als Wörter
verzeichnet sind. Anschließend
werden dann im Datenstrom sequentiell auftretende Kombinationen
von bereits im Wörterbuch
verzeichneten Wörtern
und Einzelzeichen als neu gefundene längere Wörter in das Wörterbuch aufgenommen.
Auf diese Weise werden zunächst zwei
Zeichen umfassende Wörter
aufgenommen. Die Länge
der als Wörter
aufzunehmenden Zeichenketten nimmt dabei immer mehr zu, so dass
nach und nach auch längere
Wörter
und Wortketten in das Wörterbuch
aufgenommen werden. Somit können insbesondere
komplexe lange Wortketten nach einem Auffinden im Wörterbuch
durch eine deutlich kürzere
Adressierung ersetzt und damit komprimiert werden.
-
Bei dem LZ77-Standard besteht demgegenüber das
Wörterbuch
aus bereits verarbeiteten Daten. Trat eine Zeichenkombination mit
einer Länge von
drei oder mehr Zeichen in zurückliegenden,
bereits verarbeiteten Daten schon einmal auf, so wird durch ein
Abspeichern der Länge
und der Position der Zeichenkette relativ zum aktuell zu verarbeitenden
Zeichen eine Datenreduktion erreicht. Das Wörterbuch hat bei dem LZ77-Standard
eine konstante Größe und besteht üblicherweise
aus einem über
die zu kodierenden Zeichen bzw. Daten zu verschiebenden Suchfenster,
welches bezogen auf die aktuelle Position eine konstante Anzahl
zurückliegender
Zeichen umfasst. Ein solches Suchfenster kann dementsprechend beispielsweise
32.768 zurückliegende Zeichen
umfassen.
-
Der LZ78- und der LZ77-Standard unterscheiden
sich mithin als signifikant dadurch, dass beim LZ78-Standard neu
aufzunehmende Wörter
lediglich kontinuierlich angefügt
werden, wobei alle bestehenden Einträge inklusive ihrer Adressen
bestehen bleiben, während
der LZ77-Standard auf einem sich dynamisch ändernden Wörterbuch konstanter Größe aufbaut,
bei dem sich die Adressen der Wörter durch
das verschiebende Fenster permanent ändern.
-
Die genannten verschiedenen Kompressionsstandards
und auch die Huffman-Kodierung
sind dem einschlägigen
Fachmann hinlänglich
bekannt, so dass eine nähere
Erörterung
hier entbehrlich ist.
-
Die Datenkompression insbesondere
nach dem LZ77-Standard wird bislang vorwiegend in Software auf Mikroprozessoren
durchgeführt,
wobei die größte Zeit
bei der Suche nach möglichst
langen Übereinstimmungen
der nächsten
zu verarbeitenden Zeichen mit den im Suchfenster enthaltenen Zeichenfolgen
benötigt
wird. Gerade diese Suche lässt sich
durch eine spezielle Form eines Speicherbausteines, nämlich eines
inhaltsadressierbaren Speichers realisieren. Ein solcher Speicherbaustein
wird auch als CAM bezeichnet (content addressable memory). Häufig wird
ein derartiger Speicher auch als assoziativer Speicher benannt.
Diese Art von Speicher kann benutzt werden, um zu einer gegebenen Zeichenkette,
die an den Datenbus dieses Speichers angelegt wird, deren Position
im Speicher zu erhalten, d.h. ein CAM-Speicherbaustein besitzt eine
zu einem üblichen
RAM (random access memory) umgekehrte Kausalitätsfolge. Während an den Adressbus eines
RAM-Speichers eine Adresse angelegt wird, um diese auszulesen, wird
an dem CAM-Speicher ein Inhalt angelegt, um die zugehörige Adresse, sofern
diese existent ist, zu erhalten. Das Beschreiben eines CAM-Speichers mit Dateninhalten
geschieht jedoch prinzipiell auf die gleiche Weise wie bei üblichen
bekannten RAM-Speicherbausteinen.
-
Ein hardwarebasiertes Kompressionsverfahren
nach dem LZW-Standard ist beispielsweise aus der Patentschrift
US 5,838,264 bekannt. Bei
dem dort bekannten Verfahren werden einzelne Daten, insbesondere
Zeichen, von der Größe eines
Bytes an den Datenbus eines oben genannten inhaltsadressierbaren
CAM-Speicherbausteines angelegt, um sodann durch die hardwareseitige Überprüfung innerhalb
des CAM-Bausteines eine eventuelle Adresse innerhalb des Speichers
zu erhalten. Um eine auch bei dem LZW-Verfahren längste Übereinstimmung
von Zeichenketten mit dem Inhalt des im CAM-Baustein abgelegten
Wörterbuchs
zu erhalten, ist es in dem bekannten Verfahren vorgesehen, solange
nacheinander immer weitere einzelne Zeichen an den Datenbus des
CAM-Bausteines anzulegen, bis dass keine Übereinstimmung mehr mit dem
Inhalt des Speicherbausteines festgestellt werden kann. So kann
durch die jeweils nach einem angelegten Zeichen erhaltenen Adressen
und die Anzahl der angelegten Zeichen, bis dass keine Übereinstimmung
mehr gefunden wurde, eine Kompression nach dem LZW-Standard erfolgen.
-
Bei dem bekannten Verfahren wird
es als störend
und nachteilig empfunden, dass sukzessive an den CAM-Speicherbaustein
jeweils einzelne Zeichen angelegt werden müssen, um nacheinander die Übereinstimmungen
zu prüfen,
bis keine weitere Übereinstimmung
mehr auftritt. Dies erfordert trotz einer Hardwarerealisierung der
Adresssuche eines einzelnen Zeichens einen erheblichen Softwareaufwand,
da nacheinander von einem Eingangsdatenstrom jeweils einzelne Zeichen
an das Datenregister des CAMs angelegt und überprüft werden müssen.
-
Aufgabe der Erfindung ist es ein
Verfahren und eine Vorrichtung bereitzustellen, mit denen auf einfache
Art und Weise mehrere zu komprimierende Zeichen (also Datenworte)
auf eine eventuelle vollständige
oder teilweise Übereinstimmung
mit dem Inhalt eines in einem CAM-Baustein abgelegten Wörterbuches überprüft werden
kann, insbesondere wobei auch die Ermittlung von Übereinstimmungen
einer Länge
größer als
1 hardwarebasiert erfolgt.
-
Diese Aufgabe wird erfindungsgemäß dadurch
gelöst,
dass an einen Datenbus eines maskierbaren inhaltsadressierbaren
Speicherbausteines mehrere zu komprimierende Zeichen gleichzeitig
als wenigstens ein Datenwort angelegt werden und Übereinstimmungen
wenigstens einer Teilmenge oder aller dieser Zeichen mit dem Dateninhalt
dieses Speicherbausteins durch eine Maskierung des Datenbusses gesucht
werden.
-
Eine Vorrichtung mit einem inhaltsadressierbaren
Speicherbaustein und einer Kontrollelektronik zur entsprechenden
Ansteuerung und Durchführung des
Verfahrens weist dementsprechend erfindungsgemäß einen inhaltsadressierbaren
Speicherbaustein bekannter Art auf, der erfindungsgemäß maskierbar
ist, d.h. eine Maskierung des Datenbusses zulässt, was im Rahmen dieser Erfindung
bedeutet, dass durch eine Maskierung die Stellen eines den Datenbus
angelegten Datenwortes ausgesucht werden können, deren Übereinstimmung
mit den Daten innerhalb des Speicherbausteines geprüft werden soll.
Bei einem Datenwort aus mehreren Zeichen kann also eine Signifikanz
der bei der Suche zu berücksichtigenden
Zeichen bestimmt werden.
-
Eine Maskierung des Datenbusses kann hierbei
beispielsweise über
einen separat vorgesehenen Maskierungsbus, ein Maskierungsregister oder
andere Maskierungseinrichtungn an dem erfindungsgemäßen CAM-Speicherbaustein vorgesehen sein.
Eine Maskierungseinrichtung gibt dementsprechend an, welche der
für eine
Suche an den Datenbus angelegten Zeichen eine zu berücksichtigende Signifikanz
besitzen sollen und kann hardwaremäßig durch eine Steuerlogik
oder eine Software programmiert werden.
-
Gegenüber dem oben genannten Stand
der Technik, bei dem lediglich die Übereinstimmung eines einzelnen
Zeichens oder bei Anlage eines längeren
Datenwortes nur eine vollständige Übereinstimmung
des Datenwortes mit dem Speicherinhalt festgestellt werden kann,
bietet die erfindungsgemäße Lösung den
besonderen Vorteil, dass durch eine reduzierte Signifikanz, d.h.
eine Reduzierung von allen zu suchenden Zeichen innerhalb eines
Datenwortes auf nur einen Teil von Zeichen innerhalb des Datenwortes
auch nur das Auftreten einer Teilzeichenkette im Speicherbaustein
festgestellt werden kann.
-
Mit einer derartigen erfindungsgemäßen Vorrichtung
und dem erfindungsgemäßen Verfahren
besteht daher eine besonders einfache Möglichkeit eine längste Übereinstimmung
der an den Datenbus angelegten Zeichen mit denen innerhalb des Speicherbaussteins
aufzufinden.
-
Neben der Adresse, die ein inhaltsadressierbarer
CAM-Speicherbaustein nach der Anlage eines Datenwortes zur Verfügung stellt,
können
auch weitere, insbesondere binäre
Signale ausgegeben werden, bei denen es sich z.B. um ein sogenanntes „Match
Flag" und ein „Multiple
Match Flag" handelt. Während das
Match Flag die Existenz irgendeiner Übereinstimmung anzeigt, informiert
das Multiple Match Flag darüber,
ob Übereinstimmungen
an mehreren Speicheradressen auftreten.
-
Mit dem Verfahren und der Vorrichtung
können
hardwaremäßig alle
Kompressionsstandards durchgeführt
werden, bei denen eine längste Übereinstimmung
gefunden werden muss.
-
Um mit dem erfindungsgemäßen Verfahren und
der erfindungsgemäßen Vorrichtung
beispielsweise eine Komprimierung nach dem LZ77-Standard zu realisieren,
kann es vorgesehen sein, dass zur Komprimierung in einer dem Fachmann
bekannten Weise ein Suchfenster vorgegebener Datenwortbreite sukzessive über die
zu verarbeitende Zeichenkette verschoben wird, wobei jedoch nunmehr
erfindungsgemäß in Abkehr
von einer reinen softwareseitigen Lösung hardwarebasiert die Zeichen
innerhalb des Suchfensters in den Speicherbaustein abgelegt werden
und eine wenigstens teilweise Übereinstimmung einer
Anzahl von vor dem Suchfenster angeordneten Zeichen mit den im Speicherbaustein
abgelegten Zeichen gesucht wird.
-
Die Ausführung einer Kompression nach dem
LZ77-Standard kann dementsprechend mit dem erfindungsgemäßen Verfahren
und der Vorrichtung hardwarebasiert durchgeführt werden, da sämtliche Daten
bzw. Zeichen innerhalb des Suchfensters, die als variables Wörterbuch
dienen, in den inhaltsadressierbaren Speicherbaustein eingeschrieben
werden und dort für
einen hardwareseitigen Vergleich mit Zeichen, die vor dem Suchfenster
angeordnet sind, zur Verfügung
stehen. Hierbei wird bevorzugt für
einen Vergleichsschritt die Anzahl von Zeichen aus vor dem Suchfenster
angeordneten Zeichen derart gewählt, dass
sie der Datenwortbreite des inhaltsadressierbaren Speicherbausteines
entspricht.
-
Wird ein solches Datenwort an den
Datenbus des Speicherbausteins angelegt kann keine, eine vollständige und
alle dazwischen liegenden Übereinstimmungen
gemäß der gewählten Maskierung
gefunden werden.
-
In diesem Fall ist es besonders vorteilhaft, wenn
jedes im Suchfenster befindliche Zeichen zusammen mit N-1 nachfolgenden
Zeichen in je einer Speicherstelle, insbesondere in aufeinanderfolgenden
Speicherstellen des Speicherbausteines abgelegt wird, wobei der
Speicherbaustein eine Datenwortbreite von N aufweist. Insofern kann
bei der Auswahl von beispielsweise N zu komprimierenden Zeichen
eine teilweise Übereinstimmung
bei einer entsprechenden Maskierung bis zu einer vollständigen Übereinstimmung
an einer einzigen Adresse des Speicherbausteines aufgefunden werden.
-
Um nun hardwaremäßig eine Komprimierung eines
oder mehrerer Zeichen zu erreichen, können dementsprechend eines
oder mehrere Zeichen als ein Datenwort aus einer der Datenwortlänge des Speicherbausteines
entsprechenden Anzahl von Zeichen aus der Zeichenkette vor dem Suchfenster
an den Datenbus des Speicherbausteines zur Prüfung wenigstens einer Teilübereinstimmung
mittels einer entsprechenden Maskierung angelegt werden.
-
So kann beispielsweise bei einem
Datenwort aus insgesamt N Zeichen zunächst eine Teilübereinstimmung
in lediglich einem, nämlich
z.B. dem ersten Zeichen, dadurch geprüft werden, dass eine Maskierung
des Maskierungsbusses bzw. des Maskierungsregisters derart gewählt wird,
dass lediglich dieses erste Zeichen als signifikant gewählt wird
und die N-1 verbleibenden Zeichen als nicht signifikant gewählt werden.
-
Wird schon bei dieser Prüfung mit
der geringsten Signifikanz keine Übereinstimmung dieses einzelnen
Zeichens mit einem Zeichen an der ersten Stelle irgendeiner Adresse
des Speicherbausteines gefunden, so muss dieses erste Zeichen als
Zeichen selbst kodiert werden und eine Kompression ist nicht möglich. In
diesem Fall wird, insbesondere nach der Prüfung das Zeichen zusammen mit
N-1 nachfolgenden Zeichen in eine Speicherstelle des Speicherbausteines
abgelegt und das Suchfenster um eine Position weiter verschoben.
Somit steht erneut der gesamte jetzt verschobene Inhalt des Suchfensters
im Speicherbaustein zur Verfügung.
-
Wird eine Übereinstimmung in den signifikanten
Stellen gefunden, so wird nach weiteren längeren Übereinstimmungen dadurch gesucht,
dass die Signifikanz durch eine ausgewählte Maskierung erhöht wird,
beispielsweise dadurch, dass auch das zweite Zeichen am Datenbus
auf Signifikanz geschaltet wird, wohingegen N-2 weitere folgende
Zeichen als nicht signifikant gewählt bleiben. Auf diese Art
und Weise kann durch sukzessives Erhöhen der Signifikanz nach einer
längsten Übereinstimmung wenigstens
einer Teilzeichenkette aus den angelegten Zeichen an dem Datenbus
festgestellt werden.
-
Bei der gefundenen Übereinstimmung
zumindest einer Teilzeichenkette der an den Datenbus angelegten
N Zeichen kann so hardwaremäßig durch den
CAM-Speicherbaustein
die Adresse dieser Teilzeichenkette innerhalb des Speicherbausteines
ermittelt werden, wobei die Länge
der Übereinstimmung
automatisch implizit durch die gewählte Maskierung bekannt ist.
-
Gemäß dem erfindungsgemäßen Verfahren wird
aus der ermittelten Adresse die Position der Teilzeichenkette relativ
zum Suchfenster ermittelt, um eine Konformität mit dem LZ77-Standard zu
erreichen. Die in dem Speicherbaustein aufgefundene Teilzeichenkette
kann somit gemäß den Regeln
des LZ77-Standards kodiert werden, d.h. wenigstens durch die Position
innerhalb des Suchfensters und die Länge der Übereinstimmung.
-
Nach der Feststellung der längsten Übereinstimmung
wird erfindungsgemäß das Suchfenster um
die Länge
der Übereinstimmung
auf der zu kodierenden Zeichenkette weiter verschoben, wobei in
einer Schreiboperation jedes der einzelnen Zeichen aus der übereinstimmenden
Teilzeichenkette zusammen mit N-1
nachfolgenden Zeichen wiederum in aufeinanderfolgende Adressen des
Speicherbausteines abgelegt wird, wobei die bisherigen Zeicheninhalte
an diesen Adressen überschrieben
werden.
-
Innerhalb des CAM-Speicherbausteines
wird dementsprechend wiederum vollständig der Inhalt des Suchfensters
abgebildet, wobei jedoch das Suchfenster jeweils bei einer Verschiebung
gemäß dem LZ77-Standard
an unterschiedlichen Adressen innerhalb des CAM-Bausteines beginnt.
Da der Beginn des Suchfensters innerhalb des CAM-Bausteines durch
eine Elektronik oder Software kontrolliert wird, besteht ohne weiteres
die Möglichkeit
aus der ermittelten Adresse einer Zeichenkette innerhalb des CAM-Bausteines
auf die Position innerhalb des Suchfensters zurückzuschließen.
-
Da der Speicherbaustein üblicherweise
nur eine begrenzte Anzahl von Speicherstellen hat, wobei diese Anzahl
bevorzugt mindestens der Länge insbesondere
genau der Länge
des Suchfensters entspricht, ist es vorgesehen, dass beim Einschreiben
eines neuen Datenwortes in den Speicherbaustein ein altes Datenwort
aus dem Speicherbaustein überschrieben
wird. Hierzu wird bevorzugt der Speicherbaustein im Sinne eines
Ringspeichers beschrieben.
-
Wird mit dem erfindungsgemäßen Verfahren eine Übereinstimmung
aller Zeichen aus dem an den Datenbus angelegten Datenwort festgestellt,
so wird aus der ermittelten Adresse der Zeichen im Speicherbaustein
wiederum die Position der Zeichen im Suchfenster ermittelt und die
Zeichen wenigstens durch diese Position und die Datenwortbreite
(=Länge
der vollständigen Übereinstimmung)
kodiert, wonach das Suchfenster um die Datenwortbreite weiter verschoben
wird und wobei jedes der einzelnen Zeichen aus dem Datenwort zusammen
mit N-1 nachfolgenden Zeichen in aufeinanderfolgenden Adressen des Speicherbausteines
abgelegt wird. Es werden dementsprechend N neue Datenworte in den
Speicherbaustein eingeschrieben, wobei N alte Datenworte im Sinne
des Ringspeicheraufbaus aus dem Speicherbaustein entfallen.
-
Bei einer aufgefundenen Übereinstimmung aller
Zeichen besteht weiterhin eine Wahrscheinlichkeit, dass bei dem
folgenden Datenwort innerhalb der Zeichenkette ebenfalls eine Teil-
oder vollständige Übereinstimmung
besteht, so dass in diesem Fall bei einer festgestellten Übereinstimmung
wenigstens einer Teilzeichenkette im Anschluss an eine vollständige Übereinstimmung
die Länge
der vorherigen vollständigen Übereinstimmung
um die Länge
der aktuell festgestellten Übereinstimmung
inkrementiert wird und die festgestellte aktuelle Adresse z.B. verworfen wird.
-
Weiterhin wird das Suchfenster wiederum um
die Länge
der Übereinstimmung
weiterverschoben und jedes einzelne der übereinstimmenden Zeichen zusammen
mit N-1 nachfolgenden Zeichen in einer Adresse des Speicherbausteines
abgelegt.
-
Sofern aufeinanderfolgend mehrfach
vollständige Übereinstimmungen
des gesamten an den Datenbus angelegten Datenwortes mit dem Inhalt des
Speicherbausteines festgestellt wird, wird der Verfahrensschritt
der Inkrementierung der jeweils festgestellten Länge mehrfach nacheinander wiederholt,
wobei zur Kodierung die Position relativ zum Suchfenster bei der
erstmaligen vollständigen Übereinstimmung
erhalten bleibt.
-
Werden mit dem erfindungsgemäßen Verfahren
und der Vorrichtung mehrere längste Übereinstimmungen
an verschiedenen Adressen festgestellt, was beispielsweise durch
das Multiple Match Flag des CAM-Speicherbausteines angezeigt werden kann,
so ist es bevorzugt vorgesehen, dass eine Übereinstimmung mit der geringsten
Position innerhalb des Suchfensters zur Kodierung ausgewählt wird.
Dies begründet
sich darin, dass bei einer späteren,
eventuell weiteren folgenden Huffman-Kodierung eine bessere ergänzende Kompression
erreicht werden kann.
-
Gemäß dem erfindungsgemäßen Verfahren und
der Vorrichtung kann es auch vorgesehen sein, dass die Zeichen innerhalb
des Suchfensters lediglich unter einer einzigen Adresse innerhalb
des CAM-Speicherbausteines abgelegt wird, wobei dieser eine Datenwortbreite
aufweist, die der Suchfensterbreite entspricht. In diesem Fall kann
eine Kodierung nicht durch eine Adresse und eine Länge im eigentlichen,
oben genannten Sinn festgestellt werden, jedoch besteht weiterhin
die Möglichkeit
durch eine ausgewählte
spezielle Maskierung des Datenbusses eine Prüfung auf zumindest Teilübereinstimmungen durchzuführen. Hierbei
kann eine Maskierung beginnend mit jeder einzelnen Stelle innerhalb
eines Datenwortes programmiert werden. Hierdurch ergibt sich auch
ein besonderer Geschwindigkeitsvorteil, da der CAM-Baustein nur
einmal beschrieben werden muss und anschließend mehrere Prüfungen durchführbar sind.
-
Beispielsweise kann zunächst die
erste Stelle innerhalb des Datenwortes als signifikant maskiert werden,
woraufhin bei einer gefundenen Übereinstimmung
sukzessive auch die weiteren Stellen auf eine hohe Signifikanz geschaltet
werden, bis dass keine weitere Übereinstimmung
festgestellt wird. Da an der ersten Stelle des Datenwortes mit der
Programmierung einer hohen Signifikanz begonnen wurde, kann bei
einer aufgefundenen Teilübereinstimmung
die aufgefundene Teilzeichenkette vor dem Suchfenster kodiert werden
unter der Adresse 1 und der Länge
der programmierten Signifikanzmaskierung. Weiterhin muss dann gemäß dem erfindungsgemäßen Verfahren
gesucht werden, ob beispielsweise auch Übereinstimmungen beginnend
ab der zweiten und auch weiterer folgender Stellen innerhalb des
Suchfensters bzw. der Adresse des Speicherbausteines vorliegen und
ob die Übereinstimmung
größer ist
als die zuvor ermittelte.
-
Hierzu wird, wenn beispielsweise
ab der zweiten Stelle innerhalb des Suchfensters die Suche beginnen
soll, zunächst
die erste Stelle ausmaskiert, d.h. auf keine Signifikanz geschaltet,
wohin die zweite Stelle einmaskiert bzw. auf hohe Signifikanz geschaltet
wird. Bei einer gefundenen Übereinstimmung
setzt sich das Verfahren der sukkessiven Erhöhung der Signifikanz ab der
zweiten Stelle weiter fort, bis dass die längste Übereinstimmung ab der zweiten Stelle
gefunden wurde. Dementsprechend wird dann eine aufgefundene Teilzeichenkette
durch die Adresse 2 und die Länge
der Signifikanzprogrammierung kodiert. Dieses Verfahren kann dementsprechend weiter
geführt
werden für
alle weiteren Stellen innerhalb des Suchfensters. Aus allen gefundenen Übereinstimmungen
bezüglich
jeder Stelle wird die mit der größten Länge zur
Kodierung ausgewählt.
-
Zu einer Optimierung der erfindungsgemäßen hardwaremäßigen Komprimierung
kann es vorgesehen sein, die Maskierung in Abhängigkeit von statistischen
Eigenschaften der Zeichenkette durchzuführen. Beispielsweise kann es vorgesehen
sein, dass häufiger
vorkommende Zeichenlängen
bei der Programmierung der Maskierung eher geprüft werden, als beispielsweise
nicht so häufig
vorkommende Zeichenlängen.
-
Ein Geschwindigkeitsvorteil kann
auch dadurch erreicht werden, dass eine Schreiboperation, bei der
wenigstens ein Zeichen zusammen mit N-1 nachfolgenden Zeichen in
einer Adresse des Speicherbausteines abgelegt wird, schon vor Abschluss
einer Suche nach Übereinstimmungen
in der Art begonnen wird, dass die in den Speicherbaustein geschriebenen
Zeichen bereits direkt nach Abschluss der Suche für die nächste Suche
zur Verfügung
stehen.
-
Dieser Optimierung liegt zugrunde,
dass üblicherweise
erst nach einer abgeschlossenen Prüfung auf maximale Übereinstimmungen
die übereinstimmende
Zeichenkette in den Speicherbaustein eingeschrieben wird, was jedoch
mehrere Taktzyklen der steuernden Elektronik benötigt, so dass vor Beginn einer
neuen Suche normalerweise diese Anzahl von Taktzyklen abgewartet
werden muss, da erst dann das neu eingeschriebene Datenwort bzw.
das verschobene Suchfenster im Speicher zur Verfügung steht für die nächste Suche
nach Übereinstimmungen.
Um dies zu optimieren, ist es gemäß dem erfindungsgemäßen Verfahren
weiterhin vorgesehen diese Schreiboperation schon eine entsprechende
Anzahl von Taktzyklen vor Abschluss der Suche zu beginnen, so dass
das neu in den Speicherbaustein eingeschriebene Wort am Ende der
durchgeführten
Suche sofortig zur Verfügung
steht, ohne dass hier eine bestimmte Anzahl von Taktzyklen abgewartet
werden muss.
-
Zwar kann hierdurch der Fehlerfall
auftreten, dass vor dem eigentlichen Abschluss der Suche nach Übereinstimmung
ein Datenwort aus dem Speicher herausfällt, welches eine Übereinstimmung
gezeigt hätte,
jedoch ergeben sich trotz dieses eventuellen dadurch hervorgerufenen
Kompressionsverlustes erhebliche Zeitvorteile bei der Suche.
-
Das erfindungsgemäße Verfahren kann vorteilhaft
mit einer Vorrichtung durchgeführt
werden, die einen bereits beschriebenen inhaltsadressierbaren Speicherbaustein
und eine Kontrollelektronik zur Ansteuerung des Speicherbausteines
zur Verfügung stellt.
Eine derartige Vorrichtung kann beispielsweise eine Schnittstelle
zur Datenkommunikation mit einer Datenverarbeitungsanlage aufweisen,
die die zu komprimierenden Daten an die Vorrichtung zur Verfügung stellt
und gemäß dem Verfahren
anschließend als
komprimierte Daten zurück
erhält.
-
Auf diese Art und Weise kann z.B.
eine Steckkarte für übliche Computersysteme
realisiert werden, so dass eine LZ77-Kompression innerhalb eines
Computersystems hardwareseitig realisiert werden kann. Eine GZIP-Komprimierung kann
dementsprechend dadurch realisiert werden, dass zunächst hardwareseitig
die LZ77-Kompression durchgeführt
wird und anschließend
entweder softwarebasiert oder ebenfalls hardwarebasiert die Huffman-Kodierung
erfolgt. Es ergeben sich dementsprechend aufgrund der hardwarebasierten
Realisierung der Kompression erhebliche Geschwindigkeitsvorteile, die
gerade bei der Versendung von Daten über Telekommunikationsnetzwerke,
wie beispielsweise dem Internet vorteilhaft sind.
-
In einer Anwendung kann beispielsweise
ein Hostcomputer, wie z.B. ein Webserver, zu komprimierende Daten
bereitstellen. Der Datenstrom kann über den PCI-Bus dieses Computers
zu einer erfindungsgemäßen Vorrichtung
transportiert und in dieser komprimiert werden. Hierzu können von
einer jeglichen Software die zu komprimierenden Daten über die
Schnittstelle in die erfindungsgemäße Vorrichtung transferiert
werden, wonach die Software die komprimierten Daten zurück erhält. Der
Ablauf des Schreibens und des Lesens der Daten zu und von der erfindungsgemäßen Vorrichtung
kann auf übliche Arten
und Weisen realisiert werden, die dem Fachmann der Elektrotechnik
und der Computertechnik bekannt sind.
-
Wie erwähnt, ist es gemäß dem erfindungsgemäßen Verfahren
und gemäß der erfindungsgemäßen Vorrichtung
vorgesehen nach einer durchgeführten
LZ77-Kompression
eventuelle weitere Kompressionsverfahren auf den Ausgangsdatenstrom anzuwenden.
Durch eine anschließend
erfolgte Huffman-Kodierung
kann dementsprechend eine Kompression gemäß des GZIP-Standards erreicht
werden.
-
Ausführungsbeispiele der Erfindung
sind in den nachfolgenden Abbildungen dargestellt. Es zeigen:
-
1:
eine schematische Darstellung eines CAM-Speicherbausteines mit verschiedenen
Eingangsdaten zur Prüfung
auf Übereinstimmung;
-
2:
eine schematische Darstellung eines CAM-Speicherbausteines mit Maskierungsmöglichkeit
mit verschiedenen Eingangsdaten zur Prüfung auf Teil-Übereinstimmung
durch Auswahl der Signifikanzstelle im angelegten Datenwort;
-
3:
ein Beispiel einer Kodierung durch Suche nach eine längsten Übereinstimmung;
-
4:
ein Beispiel einer fortgesetzten Kodierung nach einer vorherigen
vollständigen Übereinstimmung;
-
5:
ein Beipiel eines Verfahrens zur Einsparung von Speicheradressen
im CAM-Speicherbaustein und zur Geschwindigkeitserhöhung Die
Datenkompression nach dem LZ77-Standard wird bisher vorwiegend in
Software auf Mikroprozessoren durchgeführt, wobei die größte Zeit
bei der Suche nach möglichst
langen Übereinstimmungen
der nächsten
zu verarbeitenden Zeichen mit den im Suchfenster enthaltenen Zeichenfolgen
benötigt wird.
-
Für
diese Suche nach einem Datenwort kann gemäß der Erfindung an einen inhaltsadressierbaren Speicherbaustein
ein Datenwort an den Datenbus angelegt werden. Neben der gefundenen
Adresse können
wenigstens zwei weitere binäre Signale
ausgegeben werden, das „Match
Flag" und das „Multiple Match
Flag". Ein derartiger
CAM-Baustein ist vereinfacht in der 1 skizziert.
-
In der 1 links
oben sind die Speicheradressen mit deren Inhalt markiert. Darunter
sind zeilenweise die Reaktionen des CAM-Speicherbausteins auf z.B.
drei unterschiedliche Eingangsdaten angegeben. Die binären Signalzustände „Wahr" und „Falsch" sind entsprechend
durch „+", bzw. „–" markiert.
-
Die üblichen CAM-Speicherbausteine
besitzen dabei nur die Möglichkeit
eine einzige Match-Adresse auszugeben. Stimmen mehrere Speicherinhalte
mit dem angelegten Datenwort überein,
kann folglich auch nur eine Adresse direkt ausgegeben werden. Die
Adressen der verbleibenden übereinstimmenden
Speicherzellen müssen
dann durch gesonderte Verfahren ermittelt werden. Im einfachsten
Fall kann das beispielsweise durch sukzessives Löschen von Speicherstellen erfolgen,
deren Adressen bereits ermittelt wurden. Um den Ausgangszustand
später
wiederherzustellen müssten dazu
abschließend
die zuvor überschriebenen
Speicherstellen wieder hergestellt werden. Teilweise kann eine solche
Funktionalität
zum Auffinden mehrfacher Adressen auch im CAM-Baustein selbst implementiert
sein.
-
Ein CAM-Speicherbaustein gemäß der Erfindung
besitzt z.B. einen zusätzlichen
Mask-Bus, der erlaubt, die eingegebenen Daten des Datenbus zu „maskieren". Der Mask-Bus gibt
dabei an, welche der für
eine Suche an den Datenbus angelegten Zeichen Signifikanz hinsichtlich
einer Suche nach Übereinstimmung
besitzen sollen. Die Vorgehensweise ist in der 2 verdeutlicht. Wieder sind zeilenweise
die Reaktionen des CAM auf die links unten angegebenen Eingangssignale
dargestellt.
-
Teilweise wird der Mask-Bus seitens
eines CAM-Speicherbausteins auch als Register zur Verfügung gestellt,
d.h. innerhalb des CAM-Speicherbausteines existiert ein Satz programmierbarer
Register, die zur Maskierung genutzt werden und die auf verschiedene
Arten ausgewählt
werden können.
So können
die Register einmal programmiert und anschließend der gewünschten
Maskierung entsprechend ausgewählt
werden. Ebenso können
andere Realisierungsmöglichkeiten
zur Maskierung vorgesehen sein.
-
Durch die Möglichkeit der Maskierung kann erfindungsgemäß auch das
Auftreten von Teil-Zeichenketten, wie hier im Beispiel „abcd" in der zweiten Zeile
der angelegten Daten gemäß 2 detektiert werden. Hier
ist das letzte Zeichen „c" des Gesamtdatenwortes „abcdc" als nicht signifikant
ausmaskiert. Die Übereinstimmung
kann jedoch nur gefunden werden, wenn diese Zeichenkette an der
ersten Position des Datenwortes auftritt. Die Teilzeichenkette „acde" des letzten Suchbeispiels
wird ausschließlich
an erster Position beginnend gesucht, das Vorkommen bei Speicherstelle/Adresse
3 mit zweiter Position beginnend wird hingegen nicht gefunden.
-
Um diesem Problem zu begegnen wird
bei dem erfindungsgemäßen Verfahren
jedes im Suchfenster befindliche Zeichen, zusammen mit den nachfolgenden
Zeichen in einer Speicherstelle des CAM-Speicherbausteins abgelegt,
d.h. das gesamte Suchfenster selbst ist in der ersten Spalte S1
der CAM-Speicherstellen enthalten. In den weiteren Spalten befinden
sich die jeweils nachfolgenden Zeichen, um auch längere Zeichenketten-Übereinstimmungen
detektieren zu können.
Der Ablauf wird im Folgenden anhand des Beispiels in der 3 erläutert:
Zu Codieren ist
beispielsweise der Text „ABCDEFGHIJKGHIABCDE", in dem die Zeichenfolge
GHI an 7. und an 12. Stelle auftaucht. Das Suchfenster umfasst hier
beispielsweise 10 Zeichen, jede Speicherstelle des CAM umfasst in
Beispiel 4 Zeichen. Der Text wird bevorzugt von links nach rechts
vom Suchfenster durchlaufen.
-
In diesem Beispiel hat der CAM-Speicherbaustein
eine Adressierungsbreite von 10, d.h. die Adressbreite entspricht
der Datenbreite des Suchfensters. Dabei wurden die 10 Speicherstellen
des CAM wie in der 3 oben
links dargestellt befüllt. Das
folgende zu codierende Zeichen in das „K". Die Arbeitsweise zur Detektion von
zumindest teilweise Zeichen-Übereinstimmungen
ist in der gleichen 3 darunter
skizziert.
-
Links (Spalten SchreibAdresse und
Inhalt) ist die Veränderung
der CAM-Daten, daneben (Spalten MatchData und MaskReg) die Steuerung
der Vergleichs-Funktionalität des CAM
angegeben. Die Spalten Match, MultMatch und MatchAddr geben die CAM-Reaktionen
(-Ausgaben) wieder. Die Spalte Length zeigt die implizit aus der
gewählten
Maskierung vorhandene Information über die Länge der gefundenen Übereinstimmung.
-
Im mit 1. bezeichneten Schritt wird
eine der Datenwortlänge
(hier 4) des CAM entsprechende Zeichenanzahl aus dem Text gelesen,
d.h. an der bezeichneten Position die Zeichen „KGHI". Diese werden dem CAM als Vergleichsdaten
zur Verfügung
gestellt, indem diese Zeichen als Datenwort an den Datenbus des
CAM angelegt werden. Das Mask-Register, wird in diesem Beispiel
zur Erkennung zweier übereinstimmender
Zeichen, hier also der Zeichen „KG" programmiert, indem die ersten beiden
Stellen (++––) auf Signifikanz
gesetzt werden.
-
Da die Zeichenfolge im CAM bisher
nicht an erster Stelle beginnend enthalten ist, wird also keine Übereinstimmung
gefunden. Folglich muss das „K" an der aktuellen
Position als Zeichen und nicht als Kombination von Adresse und Länge codiert
werden.
-
Außerdem wird im 2. Schritt das
Zeichen „K" mit N-1 nachfolgenden
Zeichen „GHI", also die Zeichenkette „KGHI" in den CAM aufgenommen.
Wobei hier N=4 der Datenwortbreite des CAM entspricht. Im vorliegenden
Fall wird dazu die Speicherstelle 0 benutzt, wodurch einerseits
das nun nicht mehr relevante Zeichen A aus dem Suchfenster entfernt
und andererseits die erforderliche Anzahl an Speicherstellen im
CAM minimal, nämlich
gerade der Größe des Suchfenster
entspricht. Der CAM-Speicherbaustein wird somit als eine Art Ringspeicher
eingesetzt der von vorne neu beschrieben wird, wenn das Adressende
erreicht ist.
-
Das Suchfenster wird um die eine
Position des nicht kodierten „K" verschoben und für die Codierung
des nächsten
Zeichens „G" wird nun im ordnungsgemäß verschobenen
Suchfenster beginnend mit „B" und endend mit dem
zuletzt geschriebenen „K" nach einer Übereinstimmung
gesucht. Die Daten im Suchfenster befinden weiterhin vollständig im CAM,
jedoch nun beginnend mit der Speicherposition 1 und endend mit der
Speicherposition 0, d.h. es muss bei einer evtl. gefundenen Übereinstimmung immer
die ermittelte Adresse des CAM in eine Position im Suchfenster umgesetzt
werden, was sich jedoch z.B. durch einen einfachen Adresszähler realisieren
lässt.
-
Für
den mit 3. bezeichneten Schritt werden dem CAM wiederum die nächsten uncodierten
Zeichen „GHIA" zum Vergleich zur
Verfügung
gestellt und es wird durch Maskierung nach der Zeichenfolge „GH" an erster Stelle
beginnend gesucht.
-
Die mit Speicherstelle 6 vorliegende Übereinstimmung
wird vom CAM erkannt und als solche ausgegeben (Match und MatchAddr).
Die Länge
der Übereinstimmung
ist wieder durch die gewählte
Maskierung bekannt.
-
Nachfolgend wird durch Veränderung
der Maskierung (MaskReg) mittels einer Erhöhung der Signifikanzstellen
die genaue maximale Länge
der Übereinstimmung
gesucht. Im vorliegenden Beispiel werden dazu sukzessiv von links
nach rechts mit Signifikanzen „+" aufgefüllte Mask-Register
ausgewählt
oder eingesetzt, wodurch nach und nach immer längere Übereinstimmungen jeweils beginnend
an der ersten Stelle gefunden werden. Andere Reihenfolgen beim Auswählen der
Mask-Register sind
dabei ebenfalls denkbar, um beispielsweise die Suchzeit bzw. den
Suchaufwand nach der längsten Übereinstimmung
zu minimieren.
-
Die gefundene Speicherstelle (hier
6) muss in Abhängigkeit
der Positionierung des Suchfenster im CAM in eine Adresse bzw. Position
des Suchfenster umgewandelt werden, hier 5, da das Suchfenster im
betrachteten Zeitpunkt an Speicherstelle 1 des CAM beginnt und an
Speicherstelle 0 endet. Die Zeichenfolge „GHI" würde
im vorliegenden Fall also durch die Zahlenkombination [5,3] ( [Position,Länge]) kodiert.
-
Außerdem müssen in den Schritten 6-8 die zu
den nun codierten Zeichen gehörenden
Zeichenketten in den CAM aufgenommen werden, was für eine exakte
Suche nach der längsten Übereinstimmung
erst nach Abschluss dieser Suche durchgeführt werden darf. Zum Zwecke
der Optimierung des erreichbaren Datendurchsatzes kann es jedoch
sinnvoll sein von der exakten Suche abzusehen und diese Zeichenketten
(Schritte 6-8) bereits vor Abschluss der Suche (Schritte 3-5) in den CAM aufzunehmen um
so eine geringe Schwankungsbreite der Datenrate für die in
den CAM aufzunehmenden Daten zu erreichen.
-
Das Suchfenster wird auf die beschriebene Weise
(Schritte 6-8) um 3 Positionen weiterbewegt. Es beginnt nun bei
CAM-Adresse 4 und endet bei 3.
-
Zum Vergleich werden anschließend vier weitere
Zeichen „ABCD", beginnend mit dem
ersten uncodierten Zeichen herangezogen und der Vorgang beginnt
von vorn mit den Schritten 9 und 10.
-
Im hier vorgestellten Beispiel wird
zur besseren Übersichtlichkeit
die Datenwortbreite des CAM mit 4 Zeichen angenommen und mit der
Suche nach übereinstimmenden
Zeichenketten der Länge
2 begonnen. Beides sind variierbare Parameter. Bevorzugt kann eine
Hardware zur Realisierung einer Daten-Kompression mit Datenwortbreiten von
18 Byte (Zeichen) eingesetzt werden, wobei gemäß GZIP- Standard mit der Suche
nach übereinstimmenden Zeichenketten
der Länge
drei begonnen wird. Dies ist sinnvoll, da erst bei einer Übereinstimmung
von 3 Zeichen die Speicherung von Adresse und Länge weniger Speicherplatz in
Anspruch nimmt als die Speicherung der Zeichen selbst.
-
Zeichenketten, deren Länge die
der Datenwortbreite des CAM überschreiten
werden z.B. auf die im Folgenden beschriebene Weise detektiert.
-
Der im obigen Beispiel zur Kodierung
eingesetzte Text wird im Beispiel der 4 zu „ABCDEFGHIJKGHIJKGHABCD" abgewandelt. Die
zu detektierende Zeichenkette ist nun beispielsweise „GHIJKGH". Nach der Detektion
der Übereinstimmung des
gesamten an den CAM zum Vergleich angelegten Datenwortes „GHIJ" im mit 5. bezeichneten Schritt
wird zunächst
die erkannte CAM-Adresse „6" wie oben beschrieben
in die Suchfenster-Adresse „5" überführt und zusammen mit der Längeninformation für die spätere Ausgabe
z.B. zwischengespeichert.
-
Die entsprechenden Zeichenketten
werden anschließend
gemäß obiger
Darstellung in den CAM aufgenommen, wodurch virtuell auch die Grenzen des
Suchfensters innerhalb des CAM ordnungsgemäß verschoben werden. Die Verarbeitung
beginnt auf die bekannte Weise von vorn, wobei diesmal auch Übereinstimmungen
die lediglich ein einzelnes Zeichen umfassen erkannt werden müssen, weshalb im
vorliegenden Beispiel die weitere Verarbeitung mit der Maskierung
eines einzelnen Zeichens in Schritt 10 begonnen wird. Übereinstimmungen,
die nach der Verschiebung des Suchfenster an gleicher Adresse des
vorherigen unverschobenen Suchfensters (im vorliegenden Beispiel
also 5) beginnen, können durch
Addition der dabei gefundenen Längeninformation
zu der zuvor abgespeicherten berücksichtigt werden.
-
Im vorliegenden Beispiel wird die
Zeichenkette „GHIJKGH" folglich durch die
Zahlenkombination [5,7] kodiert, wobei sich die Positionsangabe
auf das noch unverschobene Suchfenster (wie bei Schritt 3 bestehend)
bezieht. Auf diese Weise lassen sich übereinstimmende Zeichenketten
beliebiger Länge detektieren,
indem lediglich die Position der Speicherstelle überwacht und die Längeninformation
zur bestehenden hinzuaddiert wird. Die Überwachung der Verschiebung
des Suchfenster innerhalb des CAM wird dabei von zusätzlichen
Verarbeitungseinheiten gewährleistet.
Dieser Verfahrensschritt kann sich bei einer erneut gefundenen vollständigen Übereinstimmung
wiederholen.
-
Die bisher gezeigten Beispiele haben
sich ausschließlich
mit einfach vorkommenden Übereinstimmungen
beschäftigt.
Beim Auftreten von Übereinstimmungen
an mehreren Speicherstellen (MultMatch=+) im CAM kann durch eine
zusätzliche
Kontrolllogik die entsprechend günstigste
Alternative ausgewählt
werden. Da z.B. die Grundform der hier genannten CAM-Bausteine lediglich über die
Möglichkeit
verfügt
genau eine Adresse (MatchAddress) auszugeben, müssen dazu zunächst nacheinander alle
möglichen
Adressen aus dem CAM ausgelesen werden um anschließend die
Entscheidung über
die Auswahl der geeigneten Alternative durchzuführen. Dies kann dadurch geschehen,
dass nach der Feststellung einer Übereinstimmung die Daten an
dieser Adresse gelöscht
und mit der Adressinformation zwischengespeichert werden, um dann
eine nächste Überprüfung auf Übereinstimmung
vorzunehmen. Nachdem alle Mehrfachübereinstimmungen z.B. so ermittelt
wurden können
die Daten wieder an ihre ursprünglichen
Adressen zurückgeschrieben
werden. Teilweise kann eine solche Funktionalität zum Auffinden mehrfacher
Adressen auch im CAM-Baustein selbst implementiert sein. Nach Auffinden
aller Mehrfachübereinstimmungen
wird nach weiteren Kriterien die günstigste Auswahl aus allen Übereinstimmungen
getroffen.
-
Bei der Suche nach der längsten Übereinstimmung
innerhalb eines CAM-Datenwortes
spielt die Untersuchung der Mehrfachübereinstimmungen zunächst keine
Rolle. Erst wenn mehrere längste Übereinstimmungen
bestehen, wird sinnvollerweise diejenige ausgewählt, die die geringste Position (Adresse)
innerhalb des Suchfenster besitzt, da so z.B. eine vorteilhaftere
Möglichkeit
zu einer späteren Kodierung
mittels Huffmann-Kodierung gegeben ist.
-
Falls die Übereinstimmungen über die
Länge eines
CAM-Datenwortes hinausgehen, müssen
zusätzlich,
gemäß dem oben
beschriebenen Verfahren zur Detektion längerer Übereinstimmungen, mehrere Positionen
innerhalb des Suchfenster bezüglich
einer Verlängerung
der bereits gefundenen Übereinstimmung überwacht
werden. Die gesamte hierzu notwendige Verarbeitungsfunktionalität kann von
zusätzlicher
Kontrolllogik in der Hardware gewährleistet werden.
-
Neben der bisher beschriebenen exakten Durchführung des
Verfahrens ergeben sich durch das Zulassen nicht 100%ig optimierter
Kompression verschiedene Möglichkeiten
den Ablauf zu vereinfachen. So wird beispielsweise, wie bereits
weiter oben erwähnt,
zur Erlangung einer möglichst
konstanten Schreibgeschwindigkeit in CAM-Speicherstellen die gezeigte
Reihenfolge nicht exakt eingehalten. Die mit 3., 4. und 5. bezeichneten
Schritte werden mit den mit 6., 7. und 8. bezeichneten verschachtelt,
so dass möglicherweise
noch benötigte
Speicherstellen am Ende des Suchfenster bereits zu früh überschrieben werden.
-
Das kann dazu führen, dass in diesen ungünstigen
Konstellationen nicht die größtmögliche Übereinstimmung
gefunden wird, d.h. es wird eine kürzere Zeichenfolge durch die
zu erzeugende Zahlenkombination [Position,Länge] beschrieben, als im Optimalfall
möglich
gewesen wäre.
Da dieser Fall, insbesondere bei großem Suchfenster (bei GZIP 32768
Zeichen) jedoch äußerst selten
auftritt, kann durch eine Vernachlässigung derartiger Fehler eine erhebliche
Steigerung der Verarbeitungsgeschwindigkeit erreicht werden.
-
Ähnliches
gilt für
eine unzulängliche
Behandlung beim Auftreten mehrfacher Übereinstimmungen. Wird hier
lediglich die einzige direkt vom CAM ausgegebene Adresse genutzt,
so kann es vorkommen, dass nicht die längste im Suchfenster vorkommende Übereinstimmung
gefunden wird, oder dass die Adresse innerhalb des Suchfenster zu
groß gewählt wird,
also günstigere
Position-Längen-Paare
existieren.
-
Der Einfluss dieser Unzulänglichkeit
hängt dabei
von der Datenwortbreite des gewählten CAM-Bausteines
ab. Je größer die
Datenwortbreite ist, desto geringer ist die Wahrscheinlichkeit des
Auftretens von Mehrfachübereinstimmungen.
Bei ausreichend großer
Datenwortbreite kann der Einfluss dieser Unzulänglichkeiten vernachlässigt werden.
Insbesondere in Anbetracht der dabei einzusparenden Hardware-Ressourcen
werden so günstige
Realisierungen ermöglicht.
-
Die oben genannten Datenwortbreiten
von z.B. 4 beim CAM und 10 im Suchfenster sind lediglich exemplarisch
angegeben. Die beispielhaft beschriebenen Ausführungen gelten ebenso für beliebige
andere Datenwortbreiten des CAM bzw. des Suchfensters.
-
In einer vorteilhaften Weiterentwicklung
können
CAM-Adressen durch eine gezieltere spezielle Mask-Programmierung
eingespart werden wodurch ebenfalls ein Geschwindigkeitsvorteil
erreicht wird.
-
Die bisherige Beschreibung der Erfindung geht
von der Bereitstellung einer Speicheradresse für jedes Zeichen des Suchfenster
aus, wodurch letzteres in der ersten Spalte der CAM-Speicherstellen
auftritt und die Anzahl benötigter
Speicherstellen der Größe des Suchfenster
entspricht.
-
Werden die ersten beiden Spalten
auf diese Weise zur Speicherung des Suchfensters genutzt, so reduziert
sich diese Anzahl der benötigten
Adressen auf die Hälfte.
In der ersten Spalte finden sich demnach die geraden und in der
zweiten Spalte die ungeraden Zeichen-Positionen innerhalb des Suchfenster. Zur
Detektion von Übereinstimmungen
muss dazu allerdings eine komplexere Maskierung vorgenommen werden.
Die 5 zeigt die Vorgehensweise
anhand des zuerst vorgestellten Beispiels.
-
Diesmal wird nur jede zweite auftretende Kombination
von vier-elementigen Zeichenketten im CAM abgespeichert. Dies läßt sich
verallgemeinern auf jede m-te Kombination von k-elementigen Zeichenketten.
Folglich ist das Suchfenster nun in diesem Beispiel in den ersten
beiden Spalten der CAM-Speicherstellen enthalten. Zur Detektion
muss das Mask-Register einmal an erster und einmal an zweiter (m-te) Stelle beginnend
programmiert werden. Die Reihenfolge der Überprüfung, d.h. die Programmierung
des Mask-Registers geschieht dabei so, dass unter Berücksichtigung
der bereits überprüften Übereinstimmungen
ausschließlich überhaupt noch
mögliche
Positionen überprüft werden.
-
Im angegebenen Beispiel kann in dem
mit 3. bezeichneten Schritt direkt die Maskierung „–+++" gewählt werden,
ohne „+++–" testen zu müssen, da das
Ergebnis des letzteren nach der Überprüfung von „++––„ im mit
1. bezeichneten Schritt bereits bekannt ist.
-
Diese Vorgehensweise zur Reduktion
des CAM-Speicherbedarfs lässt
sich beliebig fortsetzen, bis nur noch eine einzelne Speicherzelle
im CAM genutzt wird, die das gesamte Suchfenster als ein langes
Datenwort aufnimmt, wobei die Maskierung zur Überprüfung von Übereinstimmungen mit jeder
Stelle im langen Datenwort beginnend programmiert werden muss.
-
In einer weiteren bevorzugten Ausbildung kann
es vorgesehen sein die aufwendige Programmierung der Maskierung
zur Detektion der längsten Übereinstimmung
entfallen zu lassen, wenn ein CAM benutzt wird, der die Funktionalität einer
Detektion der längsten Übereinstimmung
hardwareseitig besitzt, d.h. wenn der CAM angewiesen werden kann direkt
die Speicherstelle mit der längsten Übereinstimmung
auszugeben.
-
Weiterhin kann die Suchreihenfolge
auf Basis statistischer Eigenschaften des zu komprimierenden Textes
optimiert werden.
-
Durch Berücksichtigung der statistischen
Eigenschaften des Textes, ob dieser beispielsweise vorwiegend längere oder
kürzere übereinstimmende Zeichenketten
besitzt, kann eine weitere Optimierung erreicht werden. Die im ersten
Beispiel vorgestellte sukzessive Auffüllung der Maskierung von links
nach rechts könnte
beispielsweise dahingehend abgewandelt werden, dass häufig vorkommende
Längen schneller überprüft werden
als seltener vorkommende. Die Reihenfolge der Überprüfung wird dabei durch Anpassung
an die gegebenen oder ermittelten statistischen Zusammenhänge festgelegt.
-
In einer anderen Weiterbildung ist
es vorgesehen die Datenübertragungsrate
in den CAM zu maximieren.
-
Durch den speziellen Aufbau eines
CAM vergehen üblicherweise
von der Eingabe von Daten zur Speicherung (Anlegen der Information
an den Dateneingang) bis zur Möglichkeit,
diese Daten bei der Suche zu berücksichtigen
mehrere Taktperioden, wobei in aufeinander folgenden Takten eingegebene
Daten auch in aufeinander folgenden Takten zur Suche zur Verfügung stehen.
Suchoperationen können
gleichzeitig dazu durchgeführt
werden.
-
Für
eine bestmögliche
Erkennung von Zeichenübereinstimmungen,
wie sie im ersten Beispiel durchgeführt wurde, muss dabei eine
Speicherung von Daten (Schritte 6-8) so vorgenommen werden, dass
die laufende Suche (Schritte 3-5) ordnungsgemäß abgeschlossen wird, bevor
relevante CAM-Speicherstellen durch die Schreiboperation überschrieben
werden.
-
Für
eine optimierte Verarbeitungsgeschwindigkeit muss die durch die
Schreiboperation verursachte Verzögerung möglichst durch antizipierte
Initiierung der Schreiboperation kompensiert werden, d.h die Schreiboperation
wird um so viele Takte im Voraus initiiert, dass die Wirksamkeit
der geschriebenen Daten direkt nach Abschluss der Suche sichergestellt wird.
Letzteres ist nur möglich, wenn
der Zeitpunkt für den
Abschluss der Suche a priori bekannt ist, was dem Ziel der Verkürzung der
zur Suche benötigten Zeit
widerspricht.
-
Wird vom Erfordernis der korrekten
Suche abgegangen, so kann die zeitliche Abfolge durch frühzeitige
Initiierung des Schreibvorgangs optimiert werden, wodurch dann allerdings
teilweise CAM-Speicherstellen zu früh überschrieben werden können, so
dass sich ein kleineres effektives Suchfenster ergibt. Diese fehlerhafte
Behandlung tritt allerdings nur dann in Erscheinung, wenn eine im Suchfenster
weit zurück,
genauer am Ende des Suchfenster liegende Zeichenkette im aktuellen
Text auftaucht. Da dieser Fall in der Realität nur sehr selten auftaucht
können
entsprechende Fehler, insbesondere im Hinblick auf die gesteigerte
Verarbeitungsgeschwindigkeit toleriert werden.
-
Die Anwendung des GZIP-Algorithmus
geschieht softwaremäßig sehr
häufig
auf Basis der so genannten zlib-Library, d.h. zur Nutzung GZIP-basierter
Datenkompression muss der Kompressionsalgorithmus selbst nicht in
einer Software implementiert werden, sondern es kann auf eine bestehende Realisierung
der benötigten
Algorithmen in dieser Library zurückgegriffen werden.
-
Viele bekannte Softwareprodukte bedienen sich
entsprechend der zlib-Library. Durch eine Modifikation dieser Library,
so dass die Datenkompression in Hardstatt in Software durchgeführt wird
falls GZIP-Accelerator Hardware zur Verfügung steht profitiert jegliche
auf der zlib-Basierende Software ohne Modifikation vom Einsatz der
GZIP-Hardwarebeschleunigung. Da sich in Multitasking-Umgebungen die
Hardware nicht wie Software beliebig duplizieren lässt, wird
dazu eine Kontrollinstanz eingeführt,
die die Reihenfolge verschiedener Kompressionsaufträge durch
die zlib-Library festlegt.