-
HINTERGRUND
-
Die vorliegende Anmeldung betrifft allgemein eine verbesserte Vorrichtung und ein verbessertes Verfahren zur Datenverarbeitung und insbesondere Mechanismen zum Bereitstellen von hoher Bandbreitendekomprimierung von mit variabler Länge verschlüsselten Datenströmen.
-
Verlustlose Datenkomprimierung ist eine Klasse von Datenkomprimierungsalgorithmen, die gestatten, die exakten ursprünglichen Daten aus den komprimierten Daten wiederherzustellen. Der Begriff „verlustlos” steht im Gegensatz zu verlustbehafteten Datenkomprimierungstechniken, die im Tausch gegen bessere Komprimierungsraten nur eine Näherung der wiederherzustellenden ursprünglichen Daten gestatten. Eine verlustlose Datenkomprimierung wird in vielen verschiedenen Anwendungstypen verwendet, einschließlich dem ZIP-Komprimierungsformat, der GZIP-Komprimierung in Datenverarbeitungssystemen auf der Grundlage von Unix-Betriebssystemen und dergleichen.
-
Ein Typ von verlustloser Datenkomprimierung ist der DEFLATE-Datenkomprimierungsalgorithmus, der im
U.S.-Patent Nr. 5 051 745 beschrieben wird. Der DEFLATE-Datenkomprimierungsalgorithmus verwendet eine Kombination des Lempel-Ziv LZ77-Komprimierungsalgorithmus und der Huffman-Codierung. Die LZ77-Komprimierung ist eine Gleitfenster-Komprimierungstechnik, bei der für einen Bereich (oder ein Fenster) von Daten Literal-Bytes von Zeichenfolgen gespeichert werden, die noch nicht als dupliziert erfasst wurden, und wenn eine doppelte Zeichenfolge in dem Bereich (oder dem Fenster) erfasst wird, wird stattdessen ein Zeiger auf die vorher gespeicherten Literal-Bytes gespeichert. Der Zeiger weist eine Länge und einen Rückwärtsabstand in dem Bereich (oder dem Fenster) auf. Die Huffman-Codierung wird dann auf die Literal-Bytes und Zeiger in dem LZ77-Algorithmus angewendet. Die Huffman-Codierung stellt die Fähigkeit bereit, Literal-Bytes und Zeiger unter Verwendung einer Verschlüsselung variabler Länge zu verschlüsseln. Weitere Informationen zum DEFLATE-Datenkomprimierungsalgorithmus finden sich in Deutsch, „DEFLATE Compressed Data Format Specification”, Version 1.3, Network Working Group RFC 1951, Mai 1996.
-
KURZDARSTELLUNG DER ERFINDUNG
-
In einer veranschaulichenden Ausführungsform wird ein Verfahren in einem Datenverarbeitungssystem zum Entschlüsseln eines mit variabler Länge verschlüsselten Datenstroms bereitgestellt. Das Verfahren umfasst ein Empfangen einer Daten-Eingabezeile durch eine Entschlüsselungseinheit des Datenverarbeitungssystems, wobei die Daten-Eingabezeile ein Abschnitt des mit variabler Länge verschlüsselten Datenstroms ist. Das Verfahren weist ferner ein Ermitteln einer Bit-Überlaufmenge der Daten-Eingabezeile auf eine nächste Daten-Eingabezeile zur Symbolausrichtung durch die Entschlüsselungseinheit auf. Außerdem weist das Verfahren ein Ausrichten der Daten-Eingabezeile durch die Entschlüsselungseinheit auf, sodass sie auf der Grundlage der ermittelten Bit-Überlaufmenge aus der vorherigen Daten-Eingabezeile an einer Symbolgrenze beginnt. Des Weiteren weist das Verfahren ein Zerlegen der ausgerichteten Daten-Eingabezeile in Token durch die Entschlüsselungseinheit auf, um einen Satz von Token zu erzeugen, wobei jedes Token einem mit variabler Länge verschlüsselten Symbol in der ausgerichteten nächsten Eingabezeile entspricht. Außerdem weist das Verfahren ein Erzeugen eines Daten-Ausgabeworts auf der Grundlage des Satzes von Token durch die Entschlüsselungseinheit auf, wobei das Daten-Ausgabewort einem Datenwort in dem ursprünglichen Satz von Daten entspricht.
-
In weiteren veranschaulichenden Ausführungsformen wird ein Computerprogrammprodukt bereitgestellt, das ein von einem Computer verwendbares oder lesbares Medium mit einem computerlesbaren Programm aufweist. Wenn das computerlesbare Programm auf einer Datenverarbeitungseinheit ausgeführt wird, veranlasst es die Datenverarbeitungseinheit, verschiedene der einzelnen Operationen und Kombinationen davon auszuführen, die oben in Bezug auf das Verfahren der veranschaulichenden Ausführungsform dargelegt sind.
-
In noch einer weiteren veranschaulichenden Ausführungsform wird ein System/eine Vorrichtung bereitgestellt. Das System/die Vorrichtung kann einen oder mehrere Prozessoren und einen Arbeitsspeicher aufweisen, der mit dem einen oder den mehreren Prozessoren verbunden ist. Der Arbeitsspeicher kann Anweisungen aufweisen, die, wenn sie durch den einen oder die mehreren Prozessoren ausgeführt werden, den einen oder die mehreren Prozessoren veranlassen, verschiedene der einzelnen Operationen und Kombinationen davon auszuführen, die oben in Bezug auf das Verfahren der veranschaulichenden Ausführungsform dargelegt sind.
-
Diese und andere Merkmale und Vorteile der vorliegenden Erfindung werden in der folgenden ausführlichen Beschreibung der beispielhaften Ausführungsformen der vorliegenden Erfindung beschrieben oder werden dadurch für den Fachmann offenkundig.
-
KURZBESCHREIBUNG DER VERSCHIEDENEN ANSICHTEN DER ZEICHNUNGEN
-
Die Erfindung sowie ein bevorzugter Verwendungsmodus und weitere ihrer Zielsetzungen und Vorteile lassen sich am besten unter Bezugnahme auf die folgende ausführliche Beschreibung von veranschaulichenden Ausführungsformen in Verbindung mit den begleitenden Zeichnungen verstehen, wobei:
-
1 eine bildliche Darstellung eines Beispiels für ein verteiltes Datenverarbeitungssystem ist, in dem Aspekte der veranschaulichenden Ausführungsformen umgesetzt werden können;
-
2 ein Blockschaubild eines Beispiels für ein Datenverarbeitungssystem ist, in dem Aspekte der veranschaulichenden Ausführungsformen umgesetzt werden können;
-
3 ein Beispiel-Blockschaubild einer Architektur einer Entschlüsselungseinheit/Dekomprimierungseinheit gemäß einer veranschaulichenden Ausführungsform ist;
-
4 eine beispielhafte Darstellung ist, die eine Vielzahl von Eingabezeilen veranschaulicht, die einen Bit-Überlauf eines Abschnitts von Daten von einer Eingabezeile in eine andere veranschaulichen;
-
5 ein Beispiel-Blockschaubild ist, das eine Operation der Ausrichtungslogik der Entschlüsselungseinheit/Dekomprimierungseinheit veranschaulicht, wenn die Ausrichtung einer Eingabezeile gemäß einer veranschaulichenden Ausführungsform ermittelt wird;
-
6 ein Beispiel-Blockschaubild einer Tokenizer-Logikpipeline gemäß einer veranschaulichenden Ausführungsform ist;
-
7 ein Beispiel-Blockschaubild einer Ausgabegeneratorlogik gemäß einer veranschaulichenden Ausführungsform ist; und
-
8 ein Ablaufplan ist, der eine Beispieloperation zum Verarbeiten eines mit variabler Länge verschlüsselten Datenstroms gemäß einer veranschaulichenden Ausführungsform aufgliedert.
-
AUSFÜHRLICHE BESCHREIBUNG
-
Die veranschaulichenden Ausführungsformen stellen Mechanismen zum Bereitstellen einer hohen Bandbreitendekomprimierung von mit variabler Länge verschlüsselten Datenströmen bereit. Die Mechanismen der veranschaulichenden Ausführungsformen gleichen die mit variabler Länge verschlüsselten Symbole in einem komprimierten Datenstrom aus, die durch die verwendete Komprimierungstechnik eingefügt werden, z. B. die Huffman-Codierung mit variabler Länge oder andere Verschlüsselungstechniken mit variabler Länge. Mit den Mechanismen der veranschaulichenden Ausführungsformen, die diese mit variabler Länge verschlüsselten Symbole in dem verschlüsselten Datenstrom ausgleichen, kann eine parallele Dekomprimierung an einem Datenblock in dem Datenstrom ausgeführt werden, wodurch sich der Durchsatz und die Geschwindigkeit der Dekomprimierungsoperation erhöhen. Als Ergebnis dessen wird ein Hochgeschwindigkeits-Dekomprimierungsmechanismus hoher Bandbreite bereitgestellt, der mit variabler Länge verschlüsselte Datenströme bearbeiten kann.
-
Wie einem Fachmann klar sein wird, können Aspekte der vorliegenden Erfindung als ein System, Verfahren oder Computerprogrammprodukt verkörpert werden. Dementsprechend können Aspekte der vorliegenden Erfindung in der Form einer vollständigen Hardware-Ausführungsform, einer vollständigen Software-Ausführungsform (einschließlich Firmware, residente Software, Mikrocode usw.) oder einer Ausführungsform vorliegen, die Software- und Hardware-Aspekte kombiniert, auf die alle hierin allgemein als „Schaltung”, „Modul” oder „System” Bezug genommen werden kann. Des Weiteren können Aspekte der vorliegenden Erfindung die Form eines Computerprogrammprodukts annehmen, das in einem oder mehreren beliebigen computerlesbaren Medien mit einem darin ausgeführten, von einem Computer verwendbaren Programmcode verkörpert ist.
-
Jede Kombination von einem oder mehreren computerlesbaren Medien kann verwendet werden. Das computerlesbare Medium kann ein computerlesbares Signalmedium oder ein computerlesbares Speichermedium sein. Ein computerlesbares Speichermedium kann zum Beispiel ein elektronisches, magnetisches, optisches, elektromagnetisches, Infrarot- oder Halbleitersystem, eine derartige Vorrichtung, Einheit oder jede geeignete Kombination aus dem Vorgenannten sein, ist aber nicht darauf beschränkt. Zu spezielleren Beispielen (eine nicht erschöpfende Liste) für das computerlesbare Speichermedium würde Folgendes zählen: eine elektrische Verbindung mit einer oder mehreren Drahtleitungen, eine tragbare Computerdiskette, eine Festplatte, ein Direktzugriffspeicher (RAM), ein Nur-Lese-Speicher (ROM), ein löschbarer programmierbarer Nur-Lese-Speicher (EPROM oder Flash-Speicher), ein Lichtwellenleiter, ein tragbarer CD-ROM, eine optische Speichereinheit, eine Magnetspeichereinheit oder jede geeignete Kombination des Vorgenannten. In dem Kontext dieses Dokuments kann ein computerlesbares Speichermedium jedes konkrete Medium sein, das ein Programm enthalten oder speichern kann, das von oder in Verbindung mit einem System, einer Vorrichtung oder einer Einheit zur Anweisungsausführung verwendet werden kann.
-
Ein computerlesbares Signalmedium kann ein verbreitetes Datensignal mit einem darin verkörperten computerlesbaren Programmcode enthalten, zum Beispiel in einem Basisband oder als Teil einer Trägerwelle. Ein derartiges verbreitetes Signal kann jede einer Vielfalt von Formen annehmen, einschließlich elektromagnetisch, optisch oder jede geeignete Kombination davon, es ist aber nicht darauf beschränkt. Ein computerlesbares Signalmedium kann jedes computerlesbare Medium sein, das kein computerlesbares Speichermedium ist und das ein Programm zur Verwendung durch oder in Verbindung mit einem System, einer Vorrichtung oder einer Einheit zur Anweisungsausführung übertragen, verbreiten oder transportieren kann.
-
In einem computerlesbaren Medium verkörperter Computercode kann unter Verwendung jedes geeigneten Mediums übertragen werden, einschließlich drahtlos, drahtgebunden, über ein Lichtwellenleiterkabel, Funkfrequenz (HF) usw. oder jeder geeigneten Kombination davon, ist aber nicht darauf beschränkt.
-
Computerprogrammcode zum Ausführen von Operationen für Aspekte der vorliegenden Erfindung kann in jeder Kombination von einer oder mehreren Programmiersprachen geschrieben werden, einschließlich einer objektorientierten Programmiersprache wie JavaTM, SmalltalkTM, C++ oder dergleichen und herkömmlichen prozeduralen Programmiersprachen wie der Programmiersprache „C” oder ähnlichen Programmiersprachen. Der Programmcode kann vollständig auf dem Computer des Benutzers, teilweise auf dem Computer des Benutzers, als eigenständiges Softwarepaket, teilweise auf dem Computer des Benutzers und teilweise auf einem entfernt angeordneten Computer oder vollständig auf dem entfernt angeordneten Computer oder Server ausgeführt werden. In dem letzteren Szenario kann der entfernt angeordnete Computer mit dem Computer des Benutzers über jeden Typ von Netzwerk verbunden werden, einschließlich ein lokales Netzwerk (LAN) oder ein Weitverkehrsnetz (WAN), oder die Verbindung kann zu einem externen Computer hergestellt werden (zum Beispiel über das Internet unter Nutzung eines Internet-Dienstanbieters).
-
Aspekte der vorliegenden Erfindung werden im Folgenden unter Bezugnahme auf Ablaufplanveranschaulichungen und/oder Blockschaubilder von Verfahren, Vorrichtungen (Systemen) und Computerprogrammprodukten gemäß den veranschaulichenden Ausführungsformen der Erfindung beschrieben. Es versteht sich, dass jeder Block in den Ablaufplanveranschaulichungen und/oder den Blockschaubildern und Kombinationen von Blöcken in den Ablaufplanveranschaulichungen und/oder den Blockschaubildern durch Computerprogrammanweisungen umgesetzt werden können. Diese Computerprogrammanweisungen können für einen Prozessor eines Mehrzweckcomputers, eines Spezialcomputers oder andere Vorrichtungen, die programmierbare Daten verarbeiten, bereitgestellt werden, um eine Maschine zu erzeugen, sodass die Anweisungen, die über den Prozessor des Computers oder andere Vorrichtungen, die programmierbare Daten verarbeiten, ausgeführt werden, Mittel zum Umsetzen der Funktionen/Handlungen erstellen, die in dem Ablaufplan und/oder dem Block oder den Blöcken des Blockschaubilds angegeben sind.
-
Diese Computerprogrammanweisungen können auch in einem computerlesbaren Medium gespeichert werden, das einen Computer, eine andere Vorrichtung, die programmierbare Daten verarbeitet, oder andere Einheiten so steuern kann, dass sie auf eine bestimmte Weise funktionieren, sodass die in dem computerlesbaren Medium gespeicherten Anweisungen einen Herstellungsartikel erzeugen, einschließlich Anweisungen, die die in dem Block oder den Blöcken von Ablaufplan und/oder Blockschaubild angegebene Funktion/Handlung umsetzen.
-
Die Computerprogrammanweisungen können auch auf einen Computer, eine andere Vorrichtung, die programmierbare Daten verarbeitet, oder andere Einheiten geladen werden, um die Ausführung einer Serie von Arbeitsschritten auf dem Computer, einer anderen Vorrichtung, die programmierbare Daten ausführt, oder anderen Einheiten zu veranlassen, um einen über den Computer umgesetzten Prozess zu erzeugen, sodass die Anweisungen, die auf dem Computer oder einer anderen programmierbaren Vorrichtung ausgeführt werden, Prozesse zum Umsetzen der Funktionen/Handlungen bereitstellen, die in dem Block oder den Blöcken des Ablaufplans und/oder des Blockschaubilds angegeben sind.
-
Der Ablaufplan und die Blockschaubilder in den Figuren veranschaulichen die Architektur, die Funktionalität und den Betrieb von möglichen Umsetzungen von Systemen, Verfahren und Computerprogrammprodukten gemäß verschiedenen Ausführungsformen der vorliegenden Erfindung. Diesbezüglich kann jeder Block in dem Ablaufplan oder in den Blockschaubildern ein Modul, ein Segment oder einen Codeabschnitt darstellen, der eine oder mehrere ausführbare Anweisungen zum Umsetzen der angegebenen logischen Funktion(en) aufweist. Es ist ebenfalls anzumerken, dass in einigen alternativen Umsetzungen die in dem Block angegebenen Funktionen in einer anderen Reihenfolge auftreten können als in den Figuren angegeben. Zum Beispiel können zwei nacheinander gezeigte Blöcke tatsächlich im Wesentlichen parallel ausgeführt werden, oder die Blöcke können manchmal in der umgekehrten Reihenfolge ausgeführt werden, was von der beteiligten Funktionalität abhängt. Es wird ebenfalls angemerkt, dass jeder Block in den Blockschaubildern und/oder in der Ablaufplanveranschaulichung und Kombinationen von Blöcken in den Blockschaubildern und/oder der Ablaufplanveranschaulichung durch spezielle Systeme auf der Grundlage von Hardware, die die angegebenen Funktionen oder Handlungen ausführen, oder Kombinationen von spezieller Hardware und Computeranweisungen umgesetzt werden können.
-
Somit können die veranschaulichenden Ausführungsformen in vielen verschiedenen Typen von Datenverarbeitungsumgebungen verwendet werden. Um einen Kontext für die Beschreibung der spezifischen Elemente und der Funktionalität der veranschaulichenden Ausführungsformen bereitzustellen, werden die 1 und 2 im Folgenden als Beispielumgebungen angegeben, in denen Aspekte der veranschaulichenden Ausführungsformen umgesetzt werden können. Es sollte klar sein, dass die 1 und 2 nur Beispiele sind und durch sie keinerlei Einschränkung hinsichtlich der Umgebungen festgestellt oder impliziert werden soll, in denen Aspekte oder Ausführungsformen der vorliegenden Erfindung umgesetzt werden können. Viele Modifizierungen können an den dargestellten Umgebungen vorgenommen werden, ohne von dem Erfindungsgedanken und Schutzumfang der vorliegenden Erfindung abzuweichen.
-
1 zeigt eine bildliche Darstellung eines Beispiels für ein verteiltes Datenverarbeitungssystem, in dem Aspekte der veranschaulichenden Ausführungsformen umgesetzt werden können. Ein verteiltes Datenverarbeitungssystem 100 kann ein Netzwerk von Computern enthalten, in dem Aspekte der veranschaulichenden Ausführungsformen umgesetzt werden können. Das verteilte Datenverarbeitungssystem 100 enthält mindestens ein Netzwerk 102, welches das Medium ist, das zum Bereitstellen von Datenübertragungsverbindungen zwischen verschiedenen Einheiten und Computern verwendet wird, die in dem verteilten Datenverarbeitungssystem 100 miteinander verbunden sind. Das Netzwerk 102 kann Verbindungen enthalten, wie drahtgebundene, drahtlose Datenübertragungsverbindungen oder Lichtwellenleiterkabel.
-
In dem dargestellten Beispiel sind ein Server 104 und ein Server 106 zusammen mit einer Speichereinheit 108 mit dem Netzwerk 102 verbunden. Außerdem sind auch die Clients 110, 112 und 114 mit dem Netzwerk 102 verbunden. Diese Clients 110, 112 und 114 können zum Beispiel Personal Computer, Netzwerk-Computer oder dergleichen sein. In dem dargestellten Beispiel stellt der Server 104 Daten wie beispielsweise Boot-Dateien, Betriebssystemabbilder und Anwendungen für die Clients 110, 112 und 114 bereit. Die Clients 110, 112 und 114 sind Clients für den Server 104 in dem dargestellten Beispiel. Das verteilte Datenverarbeitungssystem 100 kann zusätzliche Server, Clients und weitere nicht gezeigte Einheiten enthalten.
-
In dem dargestellten Beispiel ist das verteilte Datenverarbeitungssystem 100 das Internet, wobei das Netzwerk 102 für eine weltweite Sammlung von Netzwerken und Gateways steht, welche die Protokollgruppe Transmission Control Protocol/Internet Protocol (TCP/IP) für den Datenaustausch untereinander verwenden. Das Kernstück des Internet ist ein Backbone von Hochgeschwindigkeits-Datenübertragungsleitungen zwischen Hauptknoten oder Host-Computern, die aus Tausenden von gewerblichen, behördlichen, schulischen und anderen Computersystemen bestehen, die Daten und Nachrichten weiterleiten. Selbstverständlich kann das verteilte Datenverarbeitungssystem 100 auch so umgesetzt werden, dass es eine Anzahl von verschiedenen Typen von Netzwerken enthält, wie zum Beispiel ein Intranet, ein lokales Netzwerk (LAN), ein Weitverkehrsnetz (WAN) oder dergleichen. Wie oben ausgeführt, soll 1 als Beispiel dienen, nicht als Architektureinschränkung für verschiedene Ausführungsformen der vorliegenden Erfindung, und daher sollten die in 1 gezeigten speziellen Elemente hinsichtlich der Umgebungen, in denen die veranschaulichenden Ausführungsformen der vorliegenden Erfindung umgesetzt werden können, als nicht einschränkend betrachtet werden.
-
2 ist ein Blockschaubild eines Beispiels für ein Datenverarbeitungssystem, in dem Aspekte der veranschaulichenden Ausführungsformen umgesetzt werden können. Ein Datenverarbeitungssystem 200 ist ein Beispiel für einen Computer wie dem Client 110 in 1, in dem sich ein vom Computer verwendbarer Code oder Anweisungen befinden können, welche die Prozesse für veranschaulichende Ausführungsformen der vorliegenden Erfindung umsetzen.
-
In dem dargestellten Beispiel verwendet das Datenverarbeitungssystem 200 eine Hub-Architektur mit einem Northbridge und Arbeitsspeicher-Controller-Hub (NB/MCH) 202 und einem Southbridge und Eingabe/Ausgabe-(E/A)Controller-Hub (SB/ICH) 204. Eine Verarbeitungseinheit 206, ein Hauptarbeitsspeicher 208 und ein Grafikprozessor 210 sind mit dem NB/MCH 202 verbunden. Der Grafikprozessor 210 kann mit dem NB/MCH 202 über einen beschleunigten Grafikanschluss (AGP) verbunden sein.
-
In dem dargestellten Beispiel ist lokaler Netzwerk-(LAN)Adapter 212 mit dem SB/ICH 204 verbunden. Ein Audio-Adapter 216, ein Tastatur- und Maus-Adapter 220, ein Modem 222, ein Nur-Lese-Speicher (ROM) 224, ein Festplattenlaufwerk (HDD) 226, ein CD-ROM-Laufwerk 230, Universal-Serial-Bus-(USB)Anschlüsse und weitere Datenübertragungsanschlüsse 232 und PCI/PCIe-Einheiten 234 sind mit dem SB/ICH 204 über einen Bus 238 und einen Bus 240 verbunden. Zu PCI/PCIe-Einheiten können beispielsweise Ethernet-Adapter, Add-in-Karten und PC-Karten für Notebook-Computer gehören. PCI verwendet einen Karten-Bus-Controller, PCIe hingegen nicht. Der ROM 224 kann beispielsweise ein grundlegendes Flash-Eingabe/Ausgabe-System (BIOS) sein.
-
Das HDD 226 und das CD-ROM-Laufwerk 230 sind mit dem SB/ICH 204 über den Bus 240 verbunden. Das HDD 226 und das CD-ROM-Laufwerk 230 können zum Beispiel eine Integrated Drive Electronics-(IDE) oder Serial Advanced Technology Attachment-(SATA)Schnittstelle verwenden. Eine Super I/O-(SIO)Einheit 236 kann mit dem SB/ICH 204 verbunden sein.
-
Auf der Verarbeitungseinheit 206 wird ein Betriebssystem ausgeführt. Das Betriebssystem koordiniert und stellt eine Steuerung von verschiedenen Komponenten in dem Datenverarbeitungssystem 200 in 2 bereit. Als Client kann das Betriebssystem ein im Handel erhältliches Betriebssystem wie Microsoft® Windows 7® sein. Ein objektorientiertes Programmiersystem wie das Java-Programmiersystem kann zusammen mit dem Betriebssystem ausgeführt werden und stellt Aufrufe an das Betriebssystem aus JavaTM-Programmen oder Anwendungen bereit, die auf dem Datenverarbeitungssystem 200 ausgeführt werden.
-
Als Server kann das Datenverarbeitungssystem 200 zum Beispiel ein IBM® eServerTM System p®-Computersystem sein, welches das Advanced Interactive Executive-(AIX®)Betriebssystem oder das Linux®-Betriebssystem ausführt. Das Datenverarbeitungssystem 200 kann ein symmetrisches Multiprozessor-(SMP)System mit einer Vielzahl von Prozessoren in der Verarbeitungseinheit 206 sein. Alternativ kann ein Einzelprozessorsystem verwendet werden.
-
Anweisungen für das Betriebssystem, das objektorientierte Programmiersystem und Anwendungen oder Programme befinden sich auf Speichereinheiten wie dem HDD 226 und können zum Ausführen durch die Verarbeitungseinheit 206 in den Hauptarbeitsspeicher 208 geladen werden. Die Prozesse für veranschaulichende Ausführungsformen der vorliegenden Erfindung können durch die Verarbeitungseinheit 206 unter Verwendung von computerlesbarem Programmcode ausgeführt werden, der in sich in einem Arbeitsspeicher befinden kann wie beispielsweise dem Hauptarbeitsspeicher 208, dem ROM 224 oder zum Beispiel in einer oder mehreren Peripherie-Einheiten 226 und 230.
-
Ein Bussystem wie beispielsweise der Bus 238 oder der Bus 240, wie in 2 gezeigt, kann sich aus einem oder mehreren Bussen zusammensetzen. Selbstverständlich kann das Bussystem unter Verwendung jedes beliebigen Typs von Datenübertragungsstruktur oder -architektur umgesetzt werden, der eine Datenübertragung zwischen verschiedenen Komponenten oder Einheiten bereitstellt, die an die Struktur oder Architektur angeschlossen sind. Eine Datenübertragungseinheit wie beispielsweise der Modem 222 oder der Netzwerk-Adapter 212 von 2 kann eine oder mehrere Einheiten enthalten, die zum Senden und Empfangen von Daten verwendet werden. Ein Arbeitsspeicher kann zum Beispiel der Hauptarbeitsspeicher 208, der ROM 224 oder ein Zwischenspeicher sein, wie er im NB/MCH 202 in 2 zu finden ist.
-
Fachleuten wird klar sein, dass die Hardware in den 1 und 2 je nach Umsetzung unterschiedlich sein kann. Weitere interne Hardware- oder Peripherie-Einheiten wie Flash-Arbeitsspeicher, gleichwertiger nicht-flüchtiger Arbeitsspeicher oder optische Plattenlaufwerke und dergleichen können zusätzlich zu oder anstelle der Hardware verwendet werden, die in den 1 und 2 dargestellt ist. Des Weiteren können die Prozesse der veranschaulichenden Ausführungsformen auf ein anderes Mehrfachprozessor-Datenverarbeitungssystem als das vorher erwähnte SMP-System angewendet werden, ohne von dem Erfindungsgedanken und dem Schutzumfang der vorliegenden Erfindung abzuweichen.
-
Des Weiteren kann das Datenverarbeitungssystem 200 die Form von jedem einer Anzahl von verschiedenen Datenverarbeitungssystemen annehmen, einschließlich Client-Datenverarbeitungseinheiten, Server-Datenverarbeitungseinheiten, einem Tablet-Computer, Laptop-Computer, Telefon oder einer anderen Datenübertragungseinheit, einem Personal Digital Assistant (PDA) oder dergleichen. In einigen veranschaulichenden Beispielen kann das Datenverarbeitungssystem 200 eine tragbare Datenverarbeitungseinheit sein, die mit einem Flash-Arbeitsspeicher konfiguriert ist, um beispielsweise nicht-flüchtigen Arbeitsspeicher zum Speichern von Betriebssystemdateien und/oder vom Benutzer erzeugten Daten bereitzustellen. Im Wesentlichen kann das Datenverarbeitungssystem 200 jedes bekannte oder später entwickelte Datenverarbeitungssystem ohne Architektureinschränkung sein.
-
Unter erneuter Bezugnahme auf die 1 und 2 empfängt eine Datenverarbeitungseinheit oder ein Datenverarbeitungssystem, wie beispielsweise der Server 106 in der 1, der zum Beispiel als das Datenverarbeitungssystem von 2 umgesetzt werden kann, oder ein anderer Typ eines Datenverarbeitungssystems mit einer verschiedenen Konfiguration und Zusammensetzung von Elementen, jedoch fähig, die Mechanismen der veranschaulichenden Ausführungsformen umzusetzen, wie hierin im Folgenden beschrieben, einen verschlüsselten Datenstrom mit Abschnitten variabler Länge von komprimierten Daten, die in die ursprünglichen Daten des verschlüsselten Datenstroms entschlüsselt werden müssen, sodass das Datenverarbeitungs-/Computing-System fähig ist, die ursprünglichen Daten zu verarbeiten. Der verschlüsselte Datenstrom kann von einem bzw. einer oder mehreren der anderen Datenverarbeitungssysteme/Datenverarbeitungseinheiten übertragen werden, die mit dem Server 106 in diesem Beispiel verbunden sind, z. B. der Server 104, die Clients 110, 112 und/oder 114 oder dergleichen. Der verschlüsselte Datenstrom kann über das eine oder die mehreren Netzwerke 102 übertragen werden. Selbstverständlich kann jedes andere Szenario, in dem ein mit variabler Länge verschlüsselter Datenstrom von einem Datenverarbeitungssystem/einer Datenverarbeitungseinheit empfangen werden kann, von dem bzw. von der die Mechanismen der veranschaulichenden Ausführungsformen umgesetzt wird, ebenfalls mit den Mechanismen der veranschaulichenden Ausführungsformen verwendet werden. Das heißt, dass es nicht wichtig ist, auf welche Weise der mit variabler Länge verschlüsselte Datenstrom übertragen wird, oder die Umstände, unter denen der mit variabler Länge verschlüsselte Datenstrom an das Datenverarbeitungssystem/die Datenverarbeitungseinheit übertragen wird, sondern nur, dass ein mit variabler Länge verschlüsselter Datenstrom an dem Datenverarbeitungssystem/der Datenverarbeitungseinheit empfangen wird und anschließend von den Mechanismen der veranschaulichenden Ausführungsformen bearbeitet wird, wie hierin im Folgenden beschrieben wird.
-
Der mit variabler Länge verschlüsselte Datenstrom kann unter Verwendung jedes bekannten oder später entwickelten Verschlüsselungsalgorithmus verschlüsselt werden, der Symbole variabler Länge erzeugt, um ursprüngliche nichtverschlüsselte Daten zu verschlüsseln. Für Zwecke der vorliegenden Beschreibung wird angenommen, dass der mit variabler Länge verschlüsselte Datenstrom unter Verwendung eines DEFLATE-Algorithmus verschlüsselt wurde, und somit der mit variabler Länge verschlüsselte Datenstrom ein DEFLATE-Format hat. Es sollte jedoch klar sein, dass die vorliegende Erfindung nicht auf die Verwendung mit DEFLATE-formatierten Datenströmen begrenzt ist, und andere Datenströme mit einer Verschlüsselung variabler Länge mit den Mechanismen der veranschaulichenden Ausführungsformen verwendet werden können, ohne von dem Erfindungsgedanken und dem Schutzumfang der veranschaulichenden Ausführungsformen abzuweichen.
-
Typischerweise sind mit variabler Länge verschlüsselte Datenströme nicht geeignet für parallele Entschlüsselungsoperationen, d. h. ein Prozessor eines Datenverarbeitungssystems ist nicht fähig, Abschnitte des Datenstroms parallel zu entschlüsseln. Der Grund dafür ist, dass in dem Datenstrom keine Byte-Ausrichtungsmarkierungen vorhanden sind und daher von dem Datenstrom aus nicht ermittelt werden kann, wo ein Datenabschnitt beginnt und endet und ein anderer Datenabschnitt beginnt und endet, z. B. kann ein Datenabschnitt 7 Bit lang sein, ein anderer Abschnitt kann 9 Bit lang sein, noch ein anderer kann 16 Bit lang sein usw., und aus dem Datenstrom kann nicht ermittelt werden, wo diese Grenzen liegen. Als Ergebnis dessen kann der Datenstrom nicht einfach in Datenblöcke aufgegliedert werden, die dann parallel verarbeitet werden, weil das Aufgliedern möglicherweise innerhalb eines Symbols erfolgt, wodurch verursacht wird, dass ein falsches Dekomprimierungsergebnis erzeugt wird. Als Ergebnis dessen wird die Verarbeitung eines mit variabler Länge verschlüsselten Datenstroms im Allgemeinen unter Verwendung einer sequenziellen Entschlüsselungsoperation ausgeführt, was den Durchsatz und die Geschwindigkeit begrenzt, mit der die Entschlüsselung des mit variabler Länge verschlüsselten Datenstroms ausgeführt werden kann.
-
Die veranschaulichenden Ausführungsformen stellen Mechanismen zum Berücksichtigen der Symbole variabler Länge in einem verschlüsselten (oder komprimierten) Datenstrom bereit, wenn eine Entschlüsselungs- oder Dekomprimierungsoperation an dem verschlüsselten Datenstrom ausgeführt wird. Das heißt, die veranschaulichenden Ausführungsformen stellen einen Mechanismus einer Entschlüsselungseinheit oder Dekomprimierungseinheit bereit, der mit variabler Länge verschlüsselte Datenströme parallel bearbeitet. 3 ist ein Beispiel-Blockschaubild einer derartigen Architektur einer Entschlüsselungseinheit/Dekomprimierungseinheit gemäß einer veranschaulichenden Ausführungsform. Die in 3 gezeigten Elemente können in Hardware, Software, die von einer oder mehreren Hardware-Einheiten umgesetzt wird oder einer beliebigen Kombination von Hardware und/oder Software ausgeführt werden. In einer veranschaulichenden Ausführungsform werden die Elemente von 3 in einer Schaltungslogik umgesetzt und stellen somit eine nur Hardware veranschaulichende Ausführungsform dar. In weiteren veranschaulichenden Ausführungsformen können ein oder mehrere der in 3 gezeigten Elemente als Software, Firmware oder dergleichen umgesetzt werden, die von einer Hardware-Einheit ausgeführt werden, z. B. einem in Hardware umgesetzten Prozessor, um ihre Funktionen auszuführen. In noch weiteren veranschaulichenden Ausführungsformen können einige der Elemente in 3 als Nur-Hardware-Schaltung umgesetzt werden, wogegen andere Elemente als Software, Firmware oder dergleichen umgesetzt werden können, die auf einer oder mehreren Hardware-Einheiten ausgeführt werden.
-
Wie in 3 gezeigt, weist eine Entschlüsselungseinheit/Dekomprimierungseinheit 300 eine Ausrichtungslogik 310, eine Tokenizer-Logik 320, einen Token-Tabellendatenstrukturspeicher 325, eine Ausgabegeneratorlogik 330 und einen Datenstrom-Eingabezeilenspeicher 340 auf. Die Entschlüsselungseinheit/Dekomprimierungseinheit 300 empfängt als Eingabe einen mit variabler Länge verschlüsselten Datenstrom 350. Während jedes Prozessorzyklus empfängt die Entschlüsselungseinheit/Dekomprimierungseinheit 300 eine „Eingabezeile” des mit variabler Länge verschlüsselten Datenstroms 350, der als eine Anzahl von Datenbytes des Eingabe-Datenstroms definiert wird, der während eines Prozessorzyklus empfangen wird. Die Eingabezeile hat eine festgelegte Größe oder Anzahl von Bytes M. Für ein Komprimierungsverhältnis des mit variabler Länge verschlüsselten Datenstroms 350, das größer oder gleich 1 ist, ist die Anzahl von Bytes M in der Eingabezeile kleiner oder gleich einer Anzahl von Bytes N einer dekomprimierten Ausgabe, die in jedem Prozessorzyklus zu erzeugen versucht wird.
-
In dem mit variabler Länge verschlüsselten Datenstrom 350 werden Zeichen fester Länge in den ursprünglichen Daten als Symbole variabler Länge verschlüsselt. Wenn zum Beispiel die Huffman-Codierung verwendet wird, wie in dem spezifischen Fall des Datenstroms variabler Länge 350, der unter Verwendung eines DEFLATE-Komprimierungsalgorithmus mit statischer Huffman-Codierung erzeugt wird, kann jedes der verschlüsselten Symbole eine variable Länge zwischen einer mindesten Huffman-Codelänge Hmin (z. B. 7 Bit) bis zu einer längsten Huffman-Codelänge Hmax (z. B. 31 Bit) haben.
-
Die Ausrichtungslogik 310 der Entschlüsselungseinheit/Dekomprimierungseinheit 300 arbeitet, um die Eingabedaten in der Eingabezeile so auszurichten, dass sie an einer Grenze eines verschlüsselten Symbols beginnen, an der ein Symbol in dem verschlüsselten Datenstrom unter Verwendung einer variablen Anzahl von Bits dargestellt wird und das Symbol einem oder mehreren Bytes der ursprünglichen Daten vor der Verschlüsselung/Komprimierung entspricht. Zum Beispiel wird ein Symbol in komprimierten Daten mit der Huffman-Codierung unter Verwendung einer Huffman-Verschlüsselung variabler Länge verschlüsselt, wobei das verschlüsselte Symbol entweder ein Literal-Byte der ursprünglichen Daten oder einen Zeiger auf mehrere aufeinander folgende Bytes der vorher erfassten ursprünglichen Daten darstellt. Aufgrund der Veränderlichkeit der Länge der verschlüsselten Symbole in der Eingabezeile mit festgelegter Größe können die Eingabezeilen nicht so ausgerichtet sein, dass sie an einer Symbolgrenze beginnen, und einige verschlüsselte Symbole können mehrere Eingabezeilen umspannen, z. B. von einer Eingabezeile bis zu einer nächsten Eingabezeile.
-
Wie oben erwähnt, verweist eine Eingabezeile in dem Kontext der vorliegenden Beschreibung auf verschlüsselte Daten mit einer festgelegten Anzahl von Bytes. Eine Eingabezeile wird in jedem Prozessorzyklus empfangen und verarbeitet. Der Begriff „Symbol”, wie hierin in Bezug auf den verschlüsselten Datenstrom verwendet, verweist auf eine Darstellung einer Verschlüsselung variabler Länge in dem verschlüsselten Datenstrom, wobei jedes Symbol entschlüsselt/dekomprimiert werden kann, um ein oder mehrere Bytes von ursprünglichen Daten zu erstellen. Zum Beispiel kann eine Eingabezeile empfangen werden, die 8 Bytes (64 Bits) enthält, und die 5 Symbole mit Längen von 17, 8, 9, 21 und 11 Bit (insgesamt = 66) enthalten kann. In diesem Beispiel kann das Symbol 1 mit 17 Bit in 13 Bytes von ursprünglichen Daten entschlüsselt werden, Symbol 2 kann in 1 Byte von ursprünglichen Daten entschlüsselt werden usw. Außerdem beträgt die Gesamtanzahl von Bits in den Symbolen 1 bis 566 Bits, und damit liegt ein Bit-Überlauf von 2 Bit vor. Somit muss die nächste Zeile um 2 Bits verschoben werden, um sie so auszurichten, dass sie an einer neuen Symbolgrenze beginnt.
-
4 ist eine Beispieldarstellung, die eine Vielzahl von Eingabezeilen veranschaulicht, die einen Bit-Überlauf eines verschlüsselten Symbols von einer Eingabezeile in eine andere veranschaulichen. 4 zeigt die Symbole 410 bis 424, die verschlüsselten oder komprimierten Symbolen in den komprimierten Daten entsprechen. Eine erste Eingabezeile 430, die wiederum eine Anzahl von Bytes von komprimierten Daten ist, die in einem Prozessorzyklus empfangen wurden, weist die Symbole 410 bis 414 und einen ersten Teil eines Symbols 416 auf. Das Symbol 416 läuft in die nächste Eingabezeile 440 über, sodass Bits des Symbols 416 sowohl in der Eingabezeile 430 als auch der Eingabezeile 440 vorhanden sind. Dies wird als „Bit-Überlauf” bezeichnet. Somit hängt die Verschiebung in der Eingabezeile 440, die den Beginn eines Symbols 418 identifiziert, von der Anzahl von Bits ab, die aus der Eingabezeile 430 überlaufen. Die Mindestanzahl von Bits, die überlaufen, ist 0, wogegen der maximale Überlauf Hmax – 1 beträgt, da die Größe eines verschlüsselten Symbols höchstens die maximalen Größe des Codes Hmax ist und mindestens ein Bit in der Eingabezeile 430 vorhanden sein muss, damit ein Überlauf vorliegt.
-
Um die Eingabezeile 440 auszurichten muss somit zuerst die Überlaufmenge aus der vorherigen Eingabezeile 430 ermittelt und dieser Überlauf ausgeglichen werden. Dies ist die Funktion, die von der Ausrichtungslogik 310 der Entschlüsselungseinheit/Dekomprimierungseinheit 300 in 3 bereitgestellt wird. Um eine parallele Verarbeitung dieser Eingabezeilen auszuführen, müssen die Eingabezeilen an dem Beginn einer Symbolgrenze ausgerichtet werden, um einen Bit-Überlauf auszugleichen. Wenn eine Ausrichtung durch Ausgleichen eines derartigen Bit-Überlaufs erfolgt ist, können die Mechanismen der veranschaulichenden Ausführungsformen die ausgerichteten Eingabezeilen parallel bearbeiten.
-
Da nicht von vornherein bekannt ist, wie hoch der Bit-Überlauf für ein bestimmtes Paar von Eingabezeilen 430 und 440 ist, verwendet die Ausrichtungslogik 310 der veranschaulichenden Ausführungsformen eine Pipeline-Architektur für eine spekulative Entschlüsselung mit allen Überlaufoptionen, gefolgt von einer späteren Auswahloperation. Das spekulative Entschlüsseln weist eine spekulative Hmax-Verarbeitung jeder Zeile für alle möglichen Verschiebungen von 0 bis Hmax-1 auf. Das heißt, dass jede mögliche Verschiebung beim Entschlüsseln der Zeile parallel berücksichtigt wird, und auf der Grundlage der Ergebnisse der Entschlüsselung und eines Entschlüsselungsergebnisses einer vorherigen Zeile wird eines der entschlüsselten Ergebnisse für eine der möglichen Verschiebungen ausgewählt. Die spekulative Entschlüsselung wird für jede Verschiebung in der Eingabezeile parallel und in der Weise einer Pipeline ausgeführt.
-
Die Art und Weise, durch die der korrekte Bit-Überlauf identifiziert und die entsprechende Verschiebung ermittelt wird, wird ferner unter Betrachtung des folgenden vereinfachten Beispielfalls erklärt. Es wird angenommen, dass es nur zwei mögliche Verschiebungen gibt, die einer Verschiebung von x Bits und einer Verschiebung von y Bits entsprechen. Dann wird angenommen, dass eine Eingabezeile maximal n Symbole enthalten darf und die Datenverarbeitungseinheit höchstens ein Symbol pro Prozessorzyklus verarbeiten kann, sodass es mehrere Zyklen dauert, um die Eingabezeile zu verarbeiten. Im Zyklus 1 wird die Eingabezeile 1 empfangen, und das erste Symbol in der Eingabezeile 1 wird unter Berücksichtigung einer Verschiebung von x Bits und einer Verschiebung von y Bits verarbeitet, um die Länge des ersten Symbols in der Eingabezeile für die zwei Verschiebungsfälle zu finden. In dem nächsten Prozessorzyklus wird die Eingabezeile 2 empfangen, und auf ähnliche Weise wird das erste Symbol der Zeile 2 unter Berücksichtigung einer Verschiebung von x Bits und einer Verschiebung von y Bits verarbeitet. In demselben Prozessorzyklus wird das zweite Symbol der Eingabezeile 1 für die beiden spekulativen Szenarios verarbeitet. Dieser Prozess wird fortgesetzt und in n Zyklen werden alle möglichen n Symbole der Eingabezeile 1 verarbeitet, und die Datenverarbeitungseinheit kennt die Länge aller möglichen n Symbole in der Zeile. Die Gesamtlänge aller Symbole abzüglich der Länge der Eingabezeile gibt mögliche Werte eines Bit-Überlaufs auf die nächste Zeile an. Wenn zum Beispiel die Gesamtlängen aller Symbole für die beiden spekulativen Fälle 69 Bit und 71 Bit beträgt, und die Länge der Eingabezeile 64 Bit ist, gibt es zwei mögliche spekulative Bit-Überlaufwerte (5 Bit und 7 Bit). Ein Auswahlmechanismus wird bereitgestellt, um auf der Grundlage des aus der Entschlüsselung einer vorherigen Daten-Eingabezeile ermittelten Bit-Überlaufs bzw. der ermittelten Verschiebung auszuwählen, welcher der spekulativen Bit-Überläufe bzw. welche der Verschiebungen der korrekte Bit-Überlauf bzw. die korrekte Verschiebung ist.
-
Mit den Mechanismen der veranschaulichenden Ausführungsformen kann jede Anzahl von möglichen Bit-Überläufen oder Verschiebungen parallel berücksichtigt werden statt nur zwei mögliche Verschiebungen oder Bit-Überläufe zu berücksichtigen. Zum Beispiel werden bei einer veranschaulichenden Ausführungsform mögliche Bit-Überläufe oder Verschiebungen von 0 bis Hmax-1 Bit beim Verarbeiten jeder Eingabezeile berücksichtigt.
-
5 ist ein Beispiel-Blockschaubild, das eine Operation der Ausrichtungslogik 310 der Entschlüsselungseinheit/Dekomprimierungseinheit 300 veranschaulicht, wenn die Ausrichtung einer Eingabezeile gemäß einer veranschaulichenden Ausführungsform ermittelt wird. Wie in 5 gezeigt, empfängt die Ausrichtungslogik 310 eine Eingabezeile 510, die M Bytes von verschlüsselten/komprimierten Daten aufweist. Eine Auffülllogik 520 der Ausrichtungslogik 310 füllt die Eingabezeile 510 mit einer maximalen Überlaufanzahl von Bits aus einer vorherigen Eingabezeile auf. Somit kann zum Beispiel in einem ersten Prozessorzyklus eine erste Eingabezeile empfangen und gespeichert werden, und in dem nächsten Prozessorzyklus kann eine zweite Eingabezeile empfangen und mit der ersten Eingabezeile, die während des vorherigen Prozessorzyklus empfangen wurde, bis zu einer maximalen Überlauf-Bitanzahl kombiniert werden. Die aufgefüllte Eingabezeile wird in parallele Pipelines 530 bis 550 eingegeben. Jede der parallelen Pipelines 530 bis 550 führt eine Verschiebung der aufgefüllten Eingabezeile um eine der möglichen Verschiebungs-(Bit-Überlauf-) mengen aus. Zum Beispiel führt die erste Pipeline 530 eine Verschiebung um 0 Bit aus, eine zweite Pipeline (nicht gezeigt) kann eine Verschiebung um 1 Bit ausführen, eine dritte Pipeline (nicht gezeigt) kann eine Verschiebung um 2 Bits ausführen usw. Somit führt die Pipeline 540 eine Verschiebung von i Bits aus, und eine abschließende Pipeline 550 führt eine Verschiebung von (Hmax-1) Bits oder eine maximale Verschiebung (Bit-Überlauf) aus.
-
In jeder Pipeline 530 bis 550 speichert jede Stufe 532 bis 536, 542 bis 546 und 552 bis 556 die verschobene und aufgefüllte Eingabezeile und entschlüsselt das nächste Symbol der verschobenen und aufgefüllten Eingabezeile. Die Pipelines 530 bis 550 haben eine Pipeline-Tiefe von 8·M/Hmin, wobei Hmin die Mindestlänge des verschlüsselten Symbols ist, die in diesem speziellen Beispiel einer statischen Huffman-Verschlüsselung 7 Bit beträgt. Die Größe des Symbols beruht auf dem Symboltyp und hat eine Breite w (oder Länge), die in dem Verschlüsselungsalgorithmus angegeben ist und die der Ausrichtungslogik 310 bekannt ist. Zum Beispiel sind bei Verwendung des DEFLATE-Algorithmus und -Datenformats Längen (Breiten) für bestimmte Codes in den Symbolen in der verschobenen und aufgefüllten Eingabezeile bekannt, indem eine Verschlüsselungstabelle gelesen wird, die dem Verschlüsselungsalgorithmus zugehörig ist. Zum Beispiel hat die Verschlüsselungstabelle Einträge, die für ein bestimmtes Bitmuster definieren, welche Länge das nächste verschlüsselte Symbol haben wird. Zum Beispiel kann die Verschlüsselungstabelle definieren, dass, wenn die nächsten n Bits 1010111.. lauten, die Länge des nächsten Symbols x ist, und wenn die nächsten n Bits 111000... lauten, die Länge des nächsten Symbols y ist usw. Wenn die Länge des nächsten Symbols bekannt ist, kann die Eingabezeile um diese Anzahl von Bits verschoben werden, und die nächsten n Bits können wieder untersucht werden, um die Länge des nächsten Symbols zu finden usw.
-
Jede Stufe 532 bis 536, 542 bis 546 und 552 bis 556 weist ein oder mehrere Register und eine Entschlüsselungs-/Dekomprimierungslogik auf, auf die als Datenverarbeitungslogik (Computation Logic) (CL) verwiesen wird, die das nächste Symbol der verschobenen und aufgefüllten Eingabezeile 510 entschlüsselt/dekomprimiert und eine summierte Verschiebemenge aktualisiert, d. h. die summierte Verschiebemenge für eine Stufe 532 bis 536, 542 bis 546 und 552 bis 556 ist gleich der summierten Verschiebemenge aus der vorherigen Stufe zuzüglich der Breite des nächsten Symbols, das von der gegenwärtigen Stufe 532 bis 536, 542 bis 546 und 552 bis 556 verarbeitet wird. Diese Verschiebemenge wird summiert, bis ein Ende der Eingabezeile von ursprünglich M Bytes vorliegt. Das heißt, dass die Entschlüsselung bis zu dem Punkt ausgeführt wird, an dem die kumulative Verschiebung größer oder gleich der nicht aufgefüllten Eingabezeilenlänge ist. Dies kann an jeder der Stufen 532 bis 536, 542 bis 546 und 552 bis 556 der Pipelines 530 bis 550 abhängig von der Verschiebemenge und den Breiten der Symbole geschehen. Wenn diese summierte Verschiebemenge der Größe einer Eingabezeile entspricht oder diese überschreitet (in dem dargestellten Beispiel weist die Eingabezeile 8·M Bits auf, wobei M die Anzahl von komprimierten Bytes in der Eingabezeile ist und 8 die Anzahl von Bits pro Byte darstellt), werden die Eingabezeile und aktuelle summierte Verschiebemenge von Stufe zu Stufe ohne Aktualisierung übergeben statt damit fortzufahren, die Verschiebemenge zu summieren. Wenn die ursprüngliche Eingabezeilenlänge zum Beispiel 64 Bit beträgt und auf 94 Bit aufgefüllt wird, wird die Entschlüsselung bis zu einem Punkt ausgeführt, an dem die kumulative Verschiebung größer oder gleich 64 Bit ist. In diesem Fall wird das Auffüllen der Eingabezeile auf bis zu 94 Bit notwendig, da ein Symbol vorhanden sein kann, dass zum Beispiel bei Bit 63 beginnt und sich bis zu Bit 94 erstreckt, und dieses Symbol kann nur entschlüsselt werden, wenn alle 94 Bits bekannt sind. Die Anzahl von Bits über die ursprüngliche nicht aufgefüllte Eingabezeilenlänge von 64 Bit hinaus ist der Überlauf bzw. die Verschiebung für die nächste Eingabezeile.
-
Am Ende der Pipelines 530 bis 550 wird die Größe der Eingabezeile (8·M) von der summierten Verschiebemenge „shift” subtrahiert, um den spekulativen Bit-Überlauf auf die nächste Eingabezeile zu erhalten. Somit ist ein spekulativer Bit-Überlaufwert für jede Pipeline 530 bis 550 vorhanden, der in den Multiplexer 560 eingegeben wird. Eine der spekulativen Bit-Überlaufwerteingaben in den Multiplexer 560 wird als ein tatsächlicher Bit-Überlauf ausgewählt, der zum Ausführen einer Verschiebeoperation (z. B. einer Linksverschiebeoperation) auf der nächsten Eingabezeile verwendet werden soll, um so die nächste Eingabezeile auf die Symbolgrenze auszurichten, wodurch die ausgerichtete Eingabezeile 570 erzeugt wird.
-
Unter erneuter Bezugnahme auf das vorhergehende Beispiel, in dem zwei mögliche Bit-Überlaufwerte x oder y vorhanden sind, wird der Multiplexer 560 verwendet, um einen dieser beiden Werte als den Überlauf zum Ausrichten der nächsten Eingabezeile auszuwählen. Der Multiplexer 560 kennt die Verschiebung (oder den Bit-Überlauf) der allerersten Eingabezeile in dem komprimierten Datenstrom, und somit ist es möglich, einen der beiden Bit-Überlauf- oder Verschiebungswerte auf der Grundlage der bekannten Verschiebung der allerersten Eingabezeile, d. h. Eingabezeile 1 auszuwählen (es gibt keinen Überlauf von einer vorherigen Eingabezeile für die allererste Eingabezeile, aber sie kann einige bekannte Header-Bits enthalten). Wenn diese Auswahl getroffen worden ist, ist der tatsächliche Bit-Überlauf von der Eingabezeile 1 auf die Eingabezeile 2 bekannt. In einem nächsten Prozessorzyklus kann dieser tatsächliche Bit-Überlauf von der Eingabezeile 1 auf die Eingabezeile 2 verwendet werden, um den tatsächlichen Bit-Überlauf von der Zeile 2 auf die Zeile 3 auszuwählen. Der tatsächliche Bit-Überlauf von der Eingabezeile 2 auf die Zeile 3 kann dann verwendet werden, um den tatsächlichen Bit-Überlauf von der Zeile 3 auf die Zeile 4 auszuwählen usw.
-
Unter erneuter Bezugnahme auf 3 wird die ausgerichtete Eingabezeile 570 als Eingabe in die Tokenizer-Logik 320 bereitgestellt. Die Tokenizer-Logik 320 wurde zwar als von der Ausrichtungslogik 310 getrennt veranschaulicht, es sollte aber klar sein, dass die Pipeline-Stufen der Tokenizer-Logik 320 mit den Stufen der Pipelines in der Ausrichtungslogik 310 integriert sein können, ohne von dem Erfindungsgedanken und dem Schutzumfang der veranschaulichenden Ausführungsformen abzuweichen. Die Tokenizer-Logik 320 extrahiert Symboldaten aus den komprimierten Symbolen in der ausgerichteten Eingabezeile in der Weise einer Pipeline, wie in 6 gezeigt. Wie in 6 gezeigt, weist die Tokenizer-Logik 320 eine Vielzahl von Stufen 610 bis 640 auf, wobei jede Stufe eine Datenverarbeitungslogik (CL) und ein oder mehrere Register zum Speichern der Ergebnisse der Datenverarbeitungslogik aufweist. Die Pipeline-Tiefe ist gleich der maximalen Anzahl von gültigen Token pro Eingabezeile (t), die eine Obergrenze von 8·M/Hmin Bits hat.
-
Die Datenverarbeitungslogik an jeder Stufe 610 bis 640 extrahiert die Symboldaten für das nächste verschlüsselte Symbol, das einem oder mehreren Bytes in den ursprünglichen Daten in der ausgerichteten Eingabezeile entspricht. Die Symboldaten können ein gültiges Bit, ein Typ-Bit (z. B. entweder ein Literal oder einen Zeiger/Verweis auf eine vorher gespeicherte Folge von Bytes), einen Literalwert (wenn das Typ-Bit ein Literal angibt), einen Rückwärtsabstand (wenn das Typ-Bit einen Zeiger/Verweis angibt) und dergleichen enthalten. Die Datenverarbeitungslogik ermittelt ferner eine Anzahl von dem Symbol zugehörigen dekomprimierten Bytes (inflated bytes) (IB), d. h. eine Anzahl von Bytes von entschlüsselten/nicht komprimierten Daten, die aus dem Symbol in der ausgerichteten Eingabezeile erzeugt wurden, und verwaltet eine Gesamtanzahl von dekomprimierten Bytes (IBt) für die Eingabezeile von Stufe zu Stufe 610 bis 640 in der Pipeline der Tokenizer-Logik 320.
-
In einer abschließenden Stufe 640 der Pipeline der Tokenizer-Logik 320 wird eine Token-Tabelle 650 mit den aus den Symbolen extrahierten Informationen aktualisiert, um dadurch Token-Einträge in die Token-Tabelle 650 zu erzeugen. Wie in 6 gezeigt, weist die Token-Tabelle 650 einen oder mehrere Einträge auf, wobei jeder Eintrag einem Symbol in der Eingabezeile entspricht. Jeder Eintrag in die Token-Tabelle 650 speichert abhängig von dem Typ des Symbols (des Tokens) für das entsprechende Token das extrahierte gültige Bit, den Typ (d. h. Literal oder Zeiger/Verweis), einen Schreibzeiger (wr_ptr) und einen Rückwärtsabstand oder das tatsächliche entschlüsselte/dekomprimierte Literalsymbol. Der Schreibzeiger (wr_ptr) für ein Token zeigt auf eine Speicherposition in dem nicht komprimierten Datenstrom, an der die Bytes eingefügt werden sollten, die durch das Entschlüsseln des Tokens erzeugt werden. Der Schreibzeiger für ein Symbol/Token i wird in der abschließenden Stufe 640 auf der Grundlage des letzten Schreibzeigers wr_last aktualisiert, der den gesamten dekomprimierten Bytes entspricht, die von allen Symbolen bis zum Ende der vorherigen Eingabezeile erzeugt wurden, summiert mit einer kumulativen Anzahl von dekomprimierten Bytes bis zu dem vorherigen Symbol/Token i – 1 in der aktuellen ausgerichteten Zeile, d. h. wr_last + IBi-1. Das erste Token in der ausgerichteten Eingabezeile hat einen Schreibzeiger wr_ptr, der für die vorherige Eingabezeile auf den Wert wr_last gesetzt ist, da er das erste Symbol/Token in der ausgerichteten Eingabezeile ist. Der letzte Schreibzeiger wr_last wird in der abschließenden Stufe 640 ebenfalls aktualisiert, sodass dieser Wert für die Verwendung beim Verarbeiten der nächsten ausgerichteten Eingabezeile gespeichert wird. Die in der Token-Tabelle 650 gespeicherten Token können an die Ausgabegeneratorlogik 330 in 3 ausgegeben werden.
-
Die Ausgabegeneratorlogik 330 nimmt die von der Tokenizer-Logik 320 erzeugten Token und erzeugt in jedem Prozessorzyklus entschlüsselte/dekomprimierte Daten von N Bytes. In einer veranschaulichenden Ausführungsform weisen diese N Bytes ein Datenwort auf, das von der Ausgabegeneratorlogik 330 ausgegeben wird, wobei das Datenwort die entschlüsselten/dekomprimierten Bytes aus den ursprünglichen Daten aufweist, die die Quelle der verschlüsselten Eingabezeile waren. Die Ausgabegeneratorlogik 330 weist eine Zustandsmaschine auf, die die Token analysiert, die von der Tokenizer-Logik 320 erzeugt wurden und deren Informationen in Einträgen der Token-Tabelle 650 gespeichert werden, und erzeugt pro Prozessorzyklus die N Bytes. Die Ausgabegeneratorlogik 330 verwaltet eine aktuelle Wortposition in dem entschlüsselten/dekomprimierten Ausgabestrom (out_ctr) und identifiziert ein Quellentoken für jedes der N Bytes eines aktuellen Ausgabeworts (src_token [0:N – 1]). Zum Beispiel ist das Token X die Quelle für das Byte i, wenn wr_ptr(tokenx) ≤ (out_ctr + i) < wr_ptr(tokenx+1), d. h. wenn der Schreibzeiger, der auf den Beginn des Tokens X zeigt, kleiner oder gleich der Summe der aktuellen Wortposition und des Byte-Index ist, und die Summe der aktuellen Wortposition und des Byte-Index kleiner als der Schreibzeiger des nächsten Tokens X + 1 ist.
-
Die Ausgabegeneratorlogik 330 verarbeitet Token aus mehreren Eingabezeilen gleichzeitig, z. B. Token aus mindestens zwei Eingabezeilen gleichzeitig. Wenn ein Satz von Token von dem aktuellen Ausgabewort nicht vollständig in Anspruch genommen wird (alle Token in dem Satz werden verwendet, um das aktuelle Ausgabewort von N Bytes zu erzeugen), d. h. wr_last (Token-Satz 1) > (out_ctr + N), werden die Pipelines der Ausrichtungslogik 310 und/oder der Tokenizer-Logik 320 blockiert. Wenn das Ausgabewort erzeugt wird, ermittelt die Ausgabegeneratorlogik 330, ob das Ausgabe-Byte ein Literal ist, und im zutreffenden Fall wird der Literalwert in das Ausgabe-Byte kopiert. Wenn das Ausgabe-Byte andererseits ein Zeiger oder ein Verweis auf ein Byte in der vorher identifizierten Folge von Bytes ist, wird eine Arbeitsspeichersuchoperation unter Verwendung der Rückwärtsabstands-Informationen ausgeführt, die in der Token-Tabelle 650 gespeichert sind, um die Byte-Daten aus dem Arbeitsspeicher abzurufen und in das Ausgabewort zu kopieren. Wenn nicht genügend Token verfügbar sind, um das Ausgabewort zu erzeugen, d. h. [wr_last(Token-Satz 2) < (out_crt + N), wird ein teilweises Ausgabewort gespeichert, out_ctr wird gehalten und ein neuer Satz von Token wird abgerufen; andernfalls wird out_ctr um N erhöht und die Operation wird wiederholt.
-
7 ist ein Beispiel-Blockschaubild einer Ausgabegeneratorlogik gemäß einer veranschaulichenden Ausführungsform. Wie in 7 gezeigt, werden die zwei Token-Sätze 710 und 712, z. B. jeweils einer von zwei verschiedenen Eingabezeilen, als Eingaben in die N Multiplexer 720 bis 724 empfangen, wobei N die Anzahl von Bytes pro Prozessorzyklus der gewünschten Ausgabe für die bestimmte Architektur ist. Die Token-Sätze 710 bis 712 werden aus der Token-Tabelle 650 erhalten, die von der Tokenizer-Logik 320 erzeugt wird, und weisen somit Token-Einträge aus der Token-Tabelle 650 zusammen mit all den Informationen auf, die in diesen Einträgen gespeichert sind.
-
Jeder Multiplexer 720 bis 724 ist einem entsprechenden Quellentoken-Auswahlsignal src_token[i] für dieses Byte zugehörig, wobei i im Bereich von 0 bis N – 1 liegt. Somit wählt jeder Multiplexer ein Token aus dem Token-Satz, der dem Quellentoken-Auswahlsignal src_token[i] entspricht, welches das Quellen-Token für dieses bestimmte Byte in dem Ausgabewort identifiziert. Der Multiplexer 720 bis 724 weist zusätzliche Logik auf, um auf der Grundlage des Token-Eintrags in dem Token-Satz, der dem ausgewählten Token entspricht, den entsprechenden Token-Typ (Literal oder Zeiger/Verweis) als ein Auswahlsignal in einen weiteren Multiplexer 730 bis 734 auszugeben, die Literaldaten aus dem Token-Tabelleneintrag, falls der Token-Typ ein Literal ist, als eine Eingabe in den Multiplexer 730 bis 734 auszugeben, und eine Leseaktivierung/Leseadresse auszugeben, die auf der Grundlage eines Rückwärtsabstandsfelds des Token-Tabelleneintrags ermittelt wurde in dem Fall, dass der Token-Typ ein Zeiger/Verweis ist, der in einen weiteren Multiplexer 740 bis 744 und auch in den RAM 750 bis 754 eingegeben wird.
-
Ein separater dedizierter Arbeitsspeicher 750 bis 754 oder ein Abschnitt eines gemeinsam genutzten Arbeitsspeichers mit N Leseanschlüssen wird für jedes der Ausgabe-Bytes bereitgestellt, die pro Prozessorzyklus erstellt werden sollen. Jeder dieser Arbeitsspeicher 750 bis 754 speichert dieselben dekomprimierten/entschlüsselten Daten, d. h. jeder dieser Arbeitsspeicher 750 bis 754 ist ein Duplikat des anderen. Jeder der N Arbeitsspeicher 750 bis 754, die den N Bytes in dem Ausgabewort 760 entsprechen, ist als ein N-Byte-Wort strukturiert. Alternativ kann ein gemeinsam genutzter Arbeitsspeicher verwendet werden, der als ein N-Byte-Wort strukturiert ist und N-Leseanschlüsse hat, wobei jeder Leseanschluss eines der N Bytes in dem Ausgabewort 760 bedient. Die Arbeitsspeicher 750 bis 754 können sich einen gemeinsamen Schreibanschluss teilen. Die gesamte Arbeitsspeicherkapazität wird durch frühere Historie bestimmt, auf die durch einen Zeiger/ein Referenz-Token verwiesen werden kann. Zum Beispiel beträgt die Historie für DEFLATE-Spezifikationen 32 KB. Wenn angenommen wird, dass N = 16, ist dieser 32-KB-Arbeitsspeicher als 2-K-Arbeitsspeicherworte von jeweils 16 Bytes strukturiert. Abhängig vom Leseaktivierungs- und Leseadressensignal wird ein Arbeitsspeicherwort von 16 Byte gelesen. Die höchstwertigen Bits des Leseadressensignals werden zum Lesen eines Worts aus dem Arbeitsspeicher verwendet (11 Bits in dem Fall des 32-KB-Arbeitsspeichers), und die niedrigstwertigen Bits (4 Bits in dem Fall des 16-Byte-Worts) werden zum Auswählen von einem der N Bytes verwendet, die aus dem Arbeitsspeicher gelesen werden (die Multiplexer 740 bis 744).
-
Das aus dem Arbeitsspeicher 750 bis 754 ausgewählte Byte wird zusammen mit der Literal-Ausgabe aus dem Multiplexer 720 bis 724 als eine Eingabe in den Multiplexer 730 bis 734 eingegeben. Auf der Grundlage des Token-Typs, d. h. des Literals oder Zeigers/Verweises, wird eine dieser Eingaben als ein Ausgabe-Byte für das Ausgabewort 760 an einer entsprechenden Speicherposition 1 bis N in dem Ausgabewort ausgewählt. Wenn der Token-Typ zum Beispiel ein Literal-Typ ist, werden die in den Multiplexer 730 bis 734 eingegebenen Literaldaten ausgewählt. Wenn der Token-Typ ein Zeiger/Verweis ist, wird das aus dem Multiplexer 740 bis 744 ausgegebene Byte von dem Multiplexer 730 bis 734 zur Ausgabe ausgewählt. Somit gibt jeder der Multiplexer 730 bis 734 ein Datenbyte aus, das in das Ausgabewort 760 an der korrekten Position in das Ausgabewort aufgenommen werden soll. Dieses Ausgabewort 760 kann dann einer weiteren Logik in der Datenverarbeitungseinheit zum Verarbeiten bereitgestellt werden, z. B. einem zentralen Prozessor oder einer anderen Funktionseinheit in der Datenverarbeitungseinheit, die das Ausgabewort 760 auf der Grundlage von Software, Firmware oder dergleichen bearbeiten kann, die auf der Datenverarbeitungseinheit ausgeführt werden. Das entschlüsselte Ausgabewort wird auch als ein N-Byte-Wort in jedem der N Arbeitsspeicher an einem Arbeitsspeicherort gespeichert, der durch die aktuelle Wortposition in dem entschlüsselten/dekomprimierten Ausgabestrom ermittelt wird.
-
Somit wird mit den Mechanismen der veranschaulichenden Ausführungsformen eine parallele Verarbeitung mit hoher Bandbreite von mit variabler Länge verschlüsselten Datenströmen ermöglicht. Mit diesen Mechanismen kann ein einzelner Datenstrom parallel verarbeitet werden, selbst wenn der einzelne Datenstrom Symbole variabler Länge aufweist. Die Mechanismen der veranschaulichenden Ausführungsformen gleichen die Symbole variabler Länge aus durch Ermitteln eines Bit-Überlaufs von einer Eingabezeile zu einer anderen, durch erneutes Ausrichten der Eingabezeilen, sodass sie an einer Symbolgrenze beginnen, und durch anschließendes paralleles und in der Weise einer Pipeline ausgeführtes Verarbeiten der Zeilen und ihrer entsprechenden Symbole/Token. Dadurch werden der Durchsatz und die Geschwindigkeit in hohem Maße gesteigert, mit der mit variabler Länge verschlüsselte Datenströme verarbeitet werden können, indem die Anforderung beseitigt wird, derartige Datenströme der Reihe nach zu verarbeiten.
-
8 ist ein Ablaufplan, der eine Beispieloperation zum Verarbeiten eines mit variabler Länge verschlüsselten Datenstroms gemäß einer veranschaulichenden Ausführungsform aufgliedert. Die in 8 dargelegte Operation kann in einer Entschlüsselungseinheit/Dekomprimierungseinheit eines Datenverarbeitungssystems/einer Datenverarbeitungseinheit umgesetzt werden. Diese Entschlüsselungseinheit/Dekomprimierungseinheit kann zum Beispiel in das Datenverarbeitungssystem/die Datenverarbeitungseinheit als ein Co-Prozessor, als Teil eines Netzwerk- oder Speicheradapters, als eine separate Hardware-Einheit oder eine Kombination von einer oder mehreren dieser Hardware-Einheiten und einem oder mehreren Software-Mechanismen integriert werden, die auf einer oder mehreren Prozessoreinheiten ausgeführt werden.
-
Wie in 8 gezeigt, beginnt die Operation damit, dass die Entschlüsselungseinheit/Dekomprimierungseinheit eine Daten-Eingabezeile von Daten empfängt, die ein Abschnitt eines mit variabler Länge verschlüsselten Datenstroms ist, der zu dem Datenverarbeitungssystem/der Datenverarbeitungseinheit übertragen wird, in dem bzw. in der die Entschlüsselungseinheit/Dekomprimierungseinheit umgesetzt ist (Schritt 810). Die Entschlüsselungseinheit/Dekomprimierungseinheit ermittelt eine Bit-Überlaufmenge der Daten-Eingabezeile auf eine nächste Eingabezeile von Daten (Schritt 820) zur Symbolausrichtung. Die Entschlüsselungseinheit/Dekomprimierungseinheit richtet die Daten-Eingabezeile auf der Grundlage der ermittelten Bit-Überlaufmenge aus (Schritt 830). Die Entschlüsselungseinheit/Dekomprimierungseinheit zerlegt die ausgerichtete Daten-Eingabezeile in Token, um einen Satz von Token zu erzeugen, wobei jedes Token einem Symbol in der verschlüsselten Daten-Eingabezeile entspricht (Schritt 840). Die Entschlüsselungseinheit/Dekomprimierungseinheit erzeugt ein Daten-Ausgabewort auf der Grundlage des Satzes von Token (Schritt 850). Das Daten-Ausgabewort entspricht einem Datenwort in dem ursprünglichen Satz von Daten. Das Ausgabewort wird an weitere Elemente des Datenverarbeitungssystems/der Datenverarbeitungseinheit zur Verarbeitung ausgegeben (Schritt 860), und die Operation endet.
-
Wie oben angemerkt sollte klar sein, dass die veranschaulichenden Ausführungsformen die Form einer vollständigen Hardware-Ausführungsform, einer vollständigen Software-Ausführungsform oder einer Ausführungsform annehmen können, die Hardware- und Software-Elemente enthält. In einer beispielhaften Ausführungsform sind die Mechanismen der veranschaulichenden Ausführungsformen in Software oder einem Programmcode umgesetzt, der Firmware, residente Software, Mikrocode usw. enthält, aber nicht darauf beschränkt ist.
-
Ein Datenverarbeitungssystem, das zum Speichern und/oder Ausführen von Programmcode geeignet ist, enthält mindestens einen Prozessor, der direkt oder indirekt über einen Systembus mit Arbeitsspeicherelementen verbunden ist. Die Arbeitsspeicherelemente können einen lokalen Arbeitsspeicher, der während der tatsächlichen Ausführung des Programmcodes verwendet wird, einen Massenspeicher und Cache-Speicher enthalten, die eine vorübergehende Speicherung von mindestens einigem Programmcode bereitstellen, um die Anzahl zu verringern, wie oft Code während der Ausführung aus dem Massenspeicher abgerufen werden muss.
-
Eingabe-/Ausgabe- oder E/A-Einheiten (einschließlich Tastaturen, Anzeigen, Zeigeeinheiten usw., jedoch nicht darauf beschränkt) können entweder direkt oder über zwischengeschaltete E/A-Controller mit dem System verbunden werden. Netzwerkadapter können ebenfalls mit dem System verbunden werden, um zu ermöglichen, dass das Datenverarbeitungssystem mit anderen Datenverarbeitungssystemen oder entfernt angeordneten Druckern oder Speichereinheiten über dazwischenliegende private oder öffentliche Netzwerke verbunden werden kann. Modems, Kabelmodems oder Ethernet-Karten sind nur einige der derzeit verfügbaren Typen von Netzwerkadaptern.
-
Die Beschreibung der vorliegenden Erfindung wurde zum Zweck der Veranschaulichung und Beschreibung erstellt und soll keineswegs erschöpfend oder auf die Erfindung in der offenbarten Form eingeschränkt sein. Viele Modifizierungen und Variationen werden für den Fachmann offenkundig sein. Die Ausführungsform wurde ausgewählt und beschrieben, um die Grundgedanken der Erfindung, die praktische Anwendung optimal zu erklären und andere Fachleute in die Lage zu versetzen, die Erfindung für verschiedene Ausführungsformen mit verschiedenen Modifizierungen zu verstehen, die für die vorgesehene bestimmte Verwendung geeignet sind.