JP2004260839A - データ圧縮方法及びシステム - Google Patents

データ圧縮方法及びシステム Download PDF

Info

Publication number
JP2004260839A
JP2004260839A JP2004095910A JP2004095910A JP2004260839A JP 2004260839 A JP2004260839 A JP 2004260839A JP 2004095910 A JP2004095910 A JP 2004095910A JP 2004095910 A JP2004095910 A JP 2004095910A JP 2004260839 A JP2004260839 A JP 2004260839A
Authority
JP
Japan
Prior art keywords
sequence
history buffer
match
bytes
packet
Prior art date
Legal status (The legal status is an assumption and is not a legal conclusion. Google has not performed a legal analysis and makes no representation as to the accuracy of the status listed.)
Granted
Application number
JP2004095910A
Other languages
English (en)
Other versions
JP4128152B6 (ja
JP4128152B2 (ja
Inventor
Thomas J Dimitri
ジェイ ディミトリ トーマス
Current Assignee (The listed assignees may be inaccurate. Google has not performed a legal analysis and makes no representation or warranty as to the accuracy of the list.)
Microsoft Corp
Original Assignee
Microsoft Corp
Priority date (The priority date is an assumption and is not a legal conclusion. Google has not performed a legal analysis and makes no representation as to the accuracy of the date listed.)
Filing date
Publication date
Application filed by Microsoft Corp filed Critical Microsoft Corp
Publication of JP2004260839A publication Critical patent/JP2004260839A/ja
Application granted granted Critical
Publication of JP4128152B2 publication Critical patent/JP4128152B2/ja
Publication of JP4128152B6 publication Critical patent/JP4128152B6/ja
Expired - Lifetime legal-status Critical Current

Links

Images

Classifications

    • HELECTRICITY
    • H03ELECTRONIC CIRCUITRY
    • H03MCODING; DECODING; CODE CONVERSION IN GENERAL
    • H03M7/00Conversion of a code where information is represented by a given sequence or number of digits to a code where the same, similar or subset of information is represented by a different sequence or number of digits
    • H03M7/30Compression; Expansion; Suppression of unnecessary data, e.g. redundancy reduction
    • H03M7/3084Compression; Expansion; Suppression of unnecessary data, e.g. redundancy reduction using adaptive string matching, e.g. the Lempel-Ziv method
    • H03M7/3086Compression; Expansion; Suppression of unnecessary data, e.g. redundancy reduction using adaptive string matching, e.g. the Lempel-Ziv method employing a sliding window, e.g. LZ77
    • GPHYSICS
    • G06COMPUTING; CALCULATING OR COUNTING
    • G06TIMAGE DATA PROCESSING OR GENERATION, IN GENERAL
    • G06T9/00Image coding
    • G06T9/005Statistical coding, e.g. Huffman, run length coding

Landscapes

  • Engineering & Computer Science (AREA)
  • Theoretical Computer Science (AREA)
  • Multimedia (AREA)
  • Physics & Mathematics (AREA)
  • General Physics & Mathematics (AREA)
  • Compression, Expansion, Code Conversion, And Decoders (AREA)

Abstract

【課題】入力データストリームを圧縮する方法及びシステムを提供する。
【解決手段】データバイトの入力ストリームがLZ77ベースの機構を用いてエンコードされたストリームに圧縮される。既に処理されたデータバイトの一致シーケンスがサーチされる。リテラル又は一致コードのシーケンスが、リテラル又は一致コードの数を示すカウント値によって識別される。エンコードされたストリームは第1コンピュータから第2コンピュータへ送られ、そこで圧縮解除される。圧縮及び圧縮解除には一致円形ヒストリバッファが使用され、コヒレンスバイトを用いて同期される。エンコードされたフレームが圧縮解除装置によって受け取られない場合は、圧縮装置へフラッシュ要求を送信する。圧縮装置は、そのフラッシュ要求に応答してヒストリバッファをフラッシュし、ヒストリバッファに記憶された既に処理されたバイトを一致シーケンスの部分にならないようにする。
【選択図】図1

Description

本発明は一般にデータ圧縮方法及びシステムに係り、より詳細には、コンピュータ内通信環境においてLZ77ベースの圧縮を使用してデータを圧縮する方法及びシステムに係る。
1977年5月のIEEEトランザクションズ・オン・インフォーメーション・セオリ23(3):第337ないし343ページに掲載されたジブ・ジャコブ及びレンペル・アブラハム著の「逐次データ圧縮用の汎用アルゴリズム(A Universal Algorithm for Sequential Data Compression)」に述べられた研究から種々のデータ圧縮アルゴリズムが導出される。これらのアルゴリズムは、一般に、LZ77圧縮機構と称する。このLZ77圧縮機構は、キャラクタの繰り返しストリングを、そのストリングの以前の発生を指すポインタと置き換えられるという原理に基づいている。ポインタは、通常、以前の発生の位置の指示(典型的に繰り返しストリングのスタートからのオフセット)と、一致するキャラクタの数(長さ)とによって表される。ポインタは、通常、<オフセット、長さ>対として表される。例えば、次のストリング”abcdabcdacdacdacdaeaaaaaa”は、圧縮形態では次のように表される。
”abcd<4,5><3,9>ea<1,5>”
最初のキャラクタ”abcd”はその手前のいずれのキャラクタにも一致しないので、リテラルとして非圧縮形態で出力される。対<4,5>は、オフセット4でスタートして5キャラクタ分だけ延びるストリングが”abcda”と繰り返されることを指示する。対<3,9>は、オフセット3でスタートして9キャラクタ分だけ延びるストリングが繰り返されることを指示する。”ea”はリテラルとして出力され、そして対<1,5>は、オフセット1でスタートして5キャラクタ分だけ延びるストリング(”aaaaa”)を指示する。
圧縮は、繰り返されるストリングを、そのストリングを繰り返すのに要するよりも少数のビットをもつポインタとして表すことにより行われる。典型的に、リテラルとして知られている非一致の単一バイトは、ポインタとして表されない。むしろ、リテラルは、バイト自体が後に続くリテラルエンコードを指示するフラグと共に出力される。ポインタは、典型的に、オフセット及び長さが後に続く相違フラグによってリテラルエンコードとは区別される。オフセット及び長さは、種々の仕方でエンコードすることができる。各リテラル及び各ポインタにフラグを追加することにより、公知のLZベースのシステムは、最適な圧縮に及ぶことがなく、拡張を生じることすらある。
公知の圧縮システムの大部分は、フロッピー(登録商標)ディスク又はコンピュータハードドライブのような単一の媒体に記憶されたデータの圧縮に関するものである。しかしながら、ネットワーク又はモデム通信の場合のように信頼性のないリンクを経てロスのない一般的なデータ圧縮を行う分野については、ほとんど研究が行われていない。このような場合には、圧縮装置及び圧縮解除装置が物理的に取り外され、圧縮装置が圧縮解除装置に送信する情報が経路に沿って失われることがある。
近代的なネットワークは層構成で動作する。ネットワークの上位の層の1つにおいては、レダイレクタ又はリクエスタが、データベース又はファイルのような均質なデータのブロックを送信する。これらのデータブロックは、通常、搬送層へ送られ、この層は、データブロックを、1.5キロバイト(K)以下のような限定されたサイズのパケットに分割する。次いで、この搬送層は、搬送ヘッダをパケットに追加し、そしてこれらパケットをメディアアクセスコントローラ(MAC)へ送り、該コントローラはパケットにフレームヘッダを追加してフレームを形成し、これがネットワークを経て送信される。搬送層から送られるパケットはしばしば単一データブロックの連続部分であるが、2つの異なる送信が同時に保留となっている場合には、搬送層が、異なるバッファに記憶された2つ以上のブロックからパケットを送ることがある。
搬送層においてデータの均質性が与えられると、搬送層をイネーブルしてデータを圧縮することにより最適な圧縮が得られる。しかしながら、搬送層は非常に複雑であって、DOS、ウインドウズ、OS/2及びUNIX(登録商標)のような既存のオペレーティングシステムとインターフェイスする必要があり、従って、圧縮を伴う新たな搬送層を形成するタスクは非常に膨大となる。更に、既存の搬送層は、既に幅広く使用されているので、新たな搬送層を形成しても、既存の搬送層の多数のユーザに自動的に圧縮を与えることにはならない。
ある開発者は、MACレベルで圧縮を使用するよう試みている。ある努力は、各パケットごとに搬送ヘッダを圧縮することに限定される。他のものは各パケットにおいてデータを圧縮するが、手前のフレームのデータを使用せずに各パケットを別々に圧縮する。公知システムの中で、信頼性のないリンクを経て手前のフレームのデータに基づいてフレームを圧縮するものはない。更に、公知システムの中で、LZ77ベースの圧縮を用いて、信頼性のない通信リンクを経て送られるフレームを圧縮するものもない。
本発明の目的は、LZ77に基づく機構を使用してデータの入力ストリームを圧縮する方法及びシステムを提供することである。
本発明の別の目的は、第1コンピュータにおいて入力ストリームを圧縮し、その圧縮された入力ストリームを第2コンピュータへ送り、そして第2コンピュータにおいてその圧縮されたストリームを圧縮解除する方法及びシステムを提供することである。
本発明のこれら及び他の目的は、以下の詳細な説明から明らかとなるデータ圧縮方法及びシステムによって達成される。好ましい実施例においては、データバイトの入力ストリームが、LZ77ベースの機構を用いてエンコードされたストリームへと圧縮される。好ましい方法は、バイトの現在シーケンスと同一の既に処理されたデータバイトの一致シーケンスをサーチする。このような同一シーケンスの部分を形成しない各データバイトは、エンコードされたストリームに付加され、このようなデータバイトはリテラルである。一致シーケンスが見つかったときは、この方法は、一致シーケンスの入力ストリームにおける位置と、一致シーケンスにおけるデータバイトの数との両方を識別する一致コードをエンコードされたデータストリームに付加する。この方法は、エンコードされたデータストリームにおける所定数のリテラルのシーケンスを識別し、そしてその識別されたリテラルのシーケンスに、その識別されたシーケンスにおけるリテラルの数を指示するカウント値を付加する。この方法は、エンコードされたデータストリームにおける所定数の一致コードのシーケンスを識別し、そしてその識別された一致コードシーケンスに、その識別された一致コードシーケンスにおける一致コードの数を指示するカウント値を付加する。
好ましくは、入力ストリームは、圧縮装置の円形ヒストリバッファに記憶される。前記方法は、エンコードされたデータストリームを複数のエンコードされたフレームに分割しそして各々のエンコードされたフレームにコヒレンスコードを付加する。前記方法は、各エンコードされたフレームを圧縮解除するための円形ヒストリバッファを有するリモート圧縮解除装置に各エンコードされたフレームを送信する。前記方法は、コヒレンスコードを使用して、圧縮解除装置のヒストリバッファを圧縮装置のヒストリバッファと同期させる。エンコードされたフレームが圧縮解除装置によって受け取られない場合には、その圧縮解除装置はフラッシュ要求を圧縮装置に送信する。圧縮装置は、そのフラッシュ要求に応答してヒストリバッファをフラッシュし、そのフラッシュ段階は、ヒストリバッファに記憶された既に処理されたバイトが一致シーケンスの部分とならないようにする。圧縮装置は、次のエンコードされたフレームのコヒレンスコードに、フラッシュ要求が圧縮装置によって受け取られたかどうかを指示する制御コードを備えている。
好ましい実施例においては、圧縮解除装置は、エンコードされたデータストリームを、入力ストリームと同一の圧縮解除されたストリームへと圧縮解除する。この圧縮解除段階は、一致カウント値を位置決めし、その一致カウント値に等しい多数の一致コードをデコードし、そしてそのデコードされた一致コードを圧縮解除されたストリームに付加するという段階を備えている。又、圧縮解除段階は、リテラルカウント値を位置決めし、そして圧縮解除されたストリームに、そのリテラルカウント値に等しい多数のリテラルを付加することも含む。
(実施例)
本発明は、LZ77ベースのエンコードを用いて入力データストリームを圧縮データストリームに圧縮するための方法及びシステムを提供する。又、本発明は、圧縮されたストリームを圧縮解除して、入力ストリームと同一の圧縮解除ストリームを形成する方法及びシステムも提供する。好ましい実施例では、入力ストリームは、各バイトが分析された後に円形ヒストリバッファへ順次に挿入される。圧縮システムは、ヒストリバッファをサーチし、現在バイトシーケンスに一致するバイトシーケンスの以前の発生を含んでいるかどうか判断する。ヒストリバッファがこのような一致バイトシーケンスを含んでいる場合には、圧縮システムは、その現在バイトシーケンスを、一致バイトシーケンス及び一致の長さに対するポインタとしてエンコードし、これは、そのエンコードが一致シーケンスを表すことを示す一致フラグを伴う。ヒストリバッファがこのような一致シーケンスを含まないときには、圧縮システムは、現在バイトシーケンスの最初のバイトを、そのバイトが非一致リテラルバイトであることを示すリテラルフラグとともに出力する。好ましくは、圧縮システムは、連続リテラル又は連続一致コードのストリングを識別し、そして一致又はリテラルフラグを各一致又はリテラルと共に出力するのではなく、連続リテラル又は一致コードの数を示すカウント値を出力する。好ましい実施例では、圧縮システムは、ローカルエリアネットワーク(LAN)又はワイドエリアネットワーク(WAN)のようなコンピュータネットワークに関連して使用される。好ましいネットワークの実施例では、入力ストリームは、限定されたサイズのパケットに分割され、そしてパケットをフレームへと形成するときに各圧縮されたパケットにコヒレンスバイトが付加され、パケットが圧縮されたのと同じ順序でフレームが圧縮解除されるようにする。手前のパケットの後にヒストリバッファの終わりにパケットを完全に適合できない場合には、ラップアラウンドの問題を回避するためにそのパケットはヒストリバッファの始めに挿入されるのが好ましい。
図1は、本発明の好ましい実施例によるデータ圧縮システム10の全体的なブロック図である。このデータ圧縮システムは、サーバコンピュータ12を備え、これは、通信リンク16を経てクライエントコンピュータ14に接続され、通信リンクは、これらコンピュータ間で圧縮データを搬送する。通信リンク16は、コンピュータ間にデータを通す任意のリンクでよく、LAN用のケーブル或いはWAN用の電話又はサテライト接続を含む。サーバ及びクライエントコンピュータの各々は、中央処理ユニット(CPU)17A、17Bと、メモリ18A、18Bと、ネットワークコネクタ20A、20Bとを備えており、これらはデータバス22A、22Bによって相互接続される。ネットワークコネクタは各コンピュータを通信リンク16に物理的に接続し、例えば、モデムは各コンピュータを電話線に物理的に接続する。別のシステムでは、一連の1つ以上のコンピュータが種々の通信リンクを経て物理的に接続され、データは通信リンクを経てあるコンピュータから別のコンピュータへと送られる。従って、このデータ圧縮システムの精神は、2つのコンピュータ又は2つのエンドポイントのみに限定されるものではない。2つ以上の通信リンクがコンピュータへ接続されるかのように1つ以上のコンピュータが通信リンクを経て接続されてもよい。
各メモリ18A、18Bは、ネットワークコネクタ20A、20Bを経、通信リンク16を経て送られるデータを制御するネットワークコントローラ23A、23Bを記憶する。各ネットワークコントローラ23A、23Bはレディレクタサーバ24A、24Bを備え、これは従来の搬送部26A、26Bに接続され、そしてこの搬送部はメディアアクセスコントローラ(MAC)28A、28Bに接続される。レディレクタは、CPU16A、16B及びメモリ18A、18Bとインターフェイスして、ファイル入力及び出力を与える。搬送部は、サーバコンピュータ12とクライエントコンピュータ14との間の確実なデータ通信を確保するもので、TCP/IP、IPX/SPX及びNETBEUIのような従来の搬送部(トランスポート)でよい。又、この搬送部は、コンピュータ間で搬送されるデータを1.5キロバイト以下のような限定されたサイズのパケットに分割する。各パケットに含まれるのは、データを送信するコンピュータのアドレスと、データを受信するように意図されたコンピュータのアドレスとを含む搬送ヘッダである。MACは、データ送信を同期すると共に、フレームヘッダをパケットに追加してコンピュータ間に送信するフレームを形成する役目を果たす。フレームヘッダは、同期、フレーム形式、フレーム長さ、及び繰り返し冗長チェック(CRC)のためのバイトを含む。良く知られたように、CRCは、フレーム内のデータに基づいて計算された値であり、受信側MACはこれを用いてコンピュータ間の送信中にデータが失われたか又は崩壊したかどうかを決定する。各MACは、フレームを形成して送信する前にパケットを圧縮するための圧縮装置30A、30Bと、フレームを圧縮解除するための圧縮解除装置32A、32Bとを備えている。
図2及び3は、図1に示された圧縮装置30A、30Bにより制御される圧縮システム10のフローチャートである。以下の説明は、入力データストリームがサーバコンピュータ12において圧縮フレームへと圧縮されそしてその圧縮フレームがクライエントコンピュータ14へと通されて、そこで、クライエントコンピュータ14によって圧縮解除される例に向けられる。入力ストリームがクライエントコンピュータにおいて圧縮されて、圧縮解除のためにサーバコンピュータへ通されるときにも同じストリームが生じる。
入力ストリームは、搬送部26Aによりメモリ18Aに形成された搬送バッファに記憶される。圧縮システム10は、入力ストリームの第1パケットが圧縮する価値のあるものかどうか判断する(ステップ34)ことによって開始する。小さなフレームは、典型的に、それらを圧縮するに要する処理時間及び努力を正当化する程度にまで圧縮することはできない。更に、マルチキャスト及びブロードキャスト(放送)フレームは、好ましい実施例では、圧縮されない。というのは、通常は、これらフレームがユーザデータを含まずそして送信又は受信されているフレームの現在データストリームとインターフェイスされるからである。パケットが圧縮する価値のないものである場合には、以下に述べるように、非圧縮フレームとしてフレーム構成されて出力される。
ステップ34においてパケットが圧縮する価値のあるものであると判断された場合に、ステップ36において、圧縮システムは、パケットの限定された数のバイト(好ましくは2バイト)のシーケンスを現在バイトシーケンスとして選択する。ステップ38において、圧縮システムは、バイトシーケンスを記憶するサーチデータ構造において入力ストリームに既に生じている一致シーケンスが見つかるかどうかを判断する。既に生じているバイトシーケンスは、現在バイトシーケンスと同じパケットの一部であるか又は既に処理されたパケットの一部である。サーチ構造において一致シーケンスが見つかった場合には、ステップ40において、現在バイトシーケンスの第1バイトがメモリ18Aに維持された円形ヒストリバッファに挿入される。このヒストリバッファは、8キロバイトのサイズであるのが好ましいが、良好な圧縮を得るためにはそれより大きくすることができ、又はメモリの消費を少なくするためにはそれより小さくすることができる。ステップ41において、ステップ41において、ヒストリバッファにおける一致シーケンスに続くバイトが、現在バイトシーケンスに続くバイトと比較され、より長い一致を見つけるように試みられる。
現在バイトシーケンスに続くバイトが、一致シーケンスに続くバイトに一致する場合には、ステップ40において、現在バイトシーケンスの第2のバイトがヒストリバッファに挿入される。バイトの一致が見つかるたびに、一致シーケンス及び現在バイトシーケンスが一致バイトと共に増大される。ステップ40及び41は、現在バイトシーケンスに続くバイトが一致シーケンスに続く対応バイトに一致しないことがステップ41で決定されるまで繰り返される。ステップ41で次のバイトが比較される前にステップ40において各次々のバイトをヒストリバッファに挿入することにより、圧縮システム10は、一致シーケンスを現在バイトシーケンスに重畳させることができる。
例えば、バイトA及びBがヒストリバッファにおいて位置1及び2に記憶されそして入力ストリームの次の3つのバイトがA、B及びAであると仮定する。ステップ38において、圧縮システム10は、入力ストリームの現在バイトシーケンスにおけるABと一致させるようにヒストリバッファにおけるシーケンスABを見つける。ステップ40において、現在バイトシーケンスのAが、一致シーケンスABに続いて位置3においてヒストリバッファに挿入される。ステップ41において、圧縮システムは、現在バイトシーケンスに続くAが、ヒストリバッファにちょうど挿入されたAに一致することを決定する。その結果、一致シーケンスはABAとなりそして一致シーケンスのA(位置3)は現在バイトシーケンスの最初のAと同じであり、従って、シーケンスが重畳される。ステップ41において次の比較がなされる前に、ステップ40において現在バイトシーケンスの最初のAがヒストリバッファに挿入されなかった場合には、一致シーケンスABAは見つけられることがない。
ステップ41において、現在バイトシーケンスに続く次のバイトが、一致シーケンスに続く次のバイトに一致しないことが決定された場合には、ステップ42において、圧縮システムは、ステップ41のバイトごとの比較により生じる最も長い一致をエンコードする。使用するエンコード機構は、可変であるのが好ましく、即ち短い一致は、長い一致よりも少数のビットでエンコードされる。このような可変エンコード機構は公知であり、その例は、参考としてここに取り上げる1987年ニュージーランドのPh.D. Thesis、University of Canterburyのベル氏著の「ユニフィケーション理論及びテキスト圧縮のための既存の解決策に対する改良(A Unifying Theory and Improvement for Existing Approaches to Text Compression)」に見ることができる。ステップ43において、一致した現在バイトシーケンスの最後のバイトがヒストリバッファに挿入される。
公知の圧縮システムにおいては、各エンコードされた一致は、次に続くデータがエンコードされた一致を表すことを示す一致フラグと共にエンコードデータストリームに付加される。各一致フラグの目的は、エンコードされた一致と、一致シーケンスが見つからないときに出力される生のバイト又はリテラルバイトとの間を区別することである。多数の連続するエンコードされた一致がある場合には、各エンコードされた一致間に一致フラグを使用する必要はない。本発明の好ましい実施例では、不必要な一致フラグの少なくとも幾つかが、置き換えられる一致フラグの数を指示するカウント値と置き換えられる。好ましい実施例において、一致カウントをエンコードするのに使用する記憶量は、一致カウントと置き換えられる一致フラグをエンコードするのに使用される記憶量よりも典型的に少ない。
図2のフローチャートに戻ると、圧縮システム10は、連続するエンコードされた一致の数が所定値X(例えば、Xは好ましい実施例では6に等しい)に達したかどうかをステップ44において決定する。連続する一致の数がX未満の場合には、圧縮システムは、ステップ46においてエンコードされたデータストリームに一致フラグを付加し、そしてステップ48においてエンコードされたストリームにエンコードされた一致を付加する。連続する一致の数がX以上である場合には、ステップ50において、圧縮システムは、連続する一致の数がXに等しいかどうかを決定する。もしそうであれば、ステップ52において一致カウント0がエンコードされたストリームに付加されそしてステップ48においてエンコードされた一致がエンコードされたストリームに付加される。一致の値がXより大きい場合には、ステップ54において、圧縮システムは、エンコードされたストリームにもっとも最新に(most recently)付加された一致カウントを増加する。ステップ48において、圧縮システムは、もっとも最新にエンコードされた一致の直後に、エンコードされたストリームにエンコードされた一致を付加する。
好ましい実施例においては、各一致カウントごとに5ビットが指定される。これら5ビットでは、32の一致カウント値しか考えられず、従って、0から31までの一致カウントが考えられる。31より多い一致が最初のx個の一致に続く場合には、31番目の一致の直後に第2の一致カウントが続く。このように、31個の一致の各次々のストリングの後に新たな一致カウントが続く。
現在バイトシーケンスに対して一致シーケンスが見つからないときには、公知の圧縮システムは、現在バイトシーケンスの最初のバイトを、一致シーケンスが見つからなかったことを示すリテラルフラグと共に、生のバイト又はリテラルとして出力する。連続する一致により生じる冗長度と同様に、リテラルのストリングの各リテラルと共にリテラルフラグを含むことは不要であり且つ無駄である。好ましい実施例において、リテラルフラグの少なくとも幾つかは、置き換えられるリテラルフラグの数を指示するリテラルカウント値と置き換えられる。好ましい実施例では、リテラルカウントをエンコードするのに使用される記憶量は、典型的に、リテラルカウントにより置き換えられるリテラルフラグをエンコードするのに使用される記憶量よりも少ない。
図2のフローチャートに戻ると、ステップ38において現在バイトシーケンスのサーチ構造に一致シーケンスが見つからない場合には、圧縮システムは、ステップ56において連続するリテラルの数が所定値Y(例えば、Yは好ましい実施例では6に等しい)より小さいかどうかを判断する。もしそうであれば、ステップ58においてエンコードされたストリームにリテラルフラグが付加され、そしてステップ60においてエンコードされたストリームにリテラルが付加される。連続するリテラルの数がY未満であることがステップ56において決定された場合には、圧縮システムは、ステップ62において連続するリテラルの数がYに等しいかどうかを決定する。もしそうであれば、リテラルカウント0がステップ64においてエンコードされたストリームに付加され、そしてリテラルがステップ60においてエンコードされたストリームに付加される。もしそうでなければ、リテラルの数はYより大きくなければならず、従って、既に付加されたリテラルカウントがステップ66において増加されて、Yを越える連続リテラルの数を反映するようにする。一致カウントと同様に、好ましい実施例では、各リテラルカウントが0ないし31(5ビット)に限定され、31個のリテラルの各次々のストリングの後に新たなリテラルカウントが続く。ステップ60において、直前のリテラルに続くエンコードされたストリームにリテラルが付加される。ステップ67では、ステップ60においてエンコードされたストリームに付加された各リテラルがヒストリバッファに付加されて各リテラルの将来の一致をイネーブルする。
フローチャートは、ステップ68において図3へと続き、サーチ構造体のエントリがデータバイトのもっとも最新の発生を指すよう確保するためにサーチ構造体が更新される。この更新は、好ましいサーチ構造体の以下の例の説明から容易に理解されよう。
図4は、好ましい実施例の例示的サーチデータ構造体70を円形ヒストリバッファ72に関連して示すブロック図である。円形ヒストリバッファ72は、この例において文字で表されたデータバイトの入力ストリームの1つ以上のパケットを含んでいる。ヒストリバッファの各文字の上の数字は、ヒストリバッファ内における文字の位置を示している。例えば、文字「f」は、ヒストリバッファ内の10番目の位置である。
サーチデータ構造体70は、各々の考えられるバイト値ごとにエントリを含む多次元直接アドレステーブルである。従って、バイトが8ビットを含むときは、このテーブルは256個のエントリを含む。例えば、ASCII”a”のバイト値は61hである。61hによって指示されたエントリは、ASCII”a”即ちバイト値61hで始まるバイトシーケンスに関するサーチ情報を含む。各エントリは多数のスロットを含む。1つのスロットは、ヒストリバッファにおけるバイトシーケンスの手前の発生を識別する情報を含んでいる。図4の例では、各エントリが4つのスロットを含む。好ましい実施例では、各エントリが8つのスロットを含む。別の実施例では、各エントリは、入力ストリームにおけるバイト値の予想される頻度に基づいて可変数のスロットを有する。当業者に明らかなように、より多くのスロットを使用することにより、より多量の圧縮を得ることができるが、一般的には、より長い圧縮時間がかかることになる。エントリが4つのスロットを含むときには、サーチデータ構造体は、インデックスされたバイト値で始まる4バイトシーケンスに対する情報を含むことができる。各スロットは、次のバイトフィールド70A及び位置フィールド70Bを含む。次のバイトフィールドはインデックスバイトの後の次のバイトのバイト値を含む。位置フィールドは、ヒストリバッファにおける次のバイトの位置を含む。当業者に明らかなように、次のバイトフィールドは、スピードサーチのために含まれている。次のバイトのバイト値は、位置フィールドをヒストリバッファへのインデックスとして使用することにより得ることができる。
図4に示すように、サーチデータ構造70は、現在バイトシーケンスが矢印で示すようにヒストリバッファの9番目の位置でスタートするときに手前のバイトシーケンスの情報を含む。ヒストリバッファの最初の8バイトは、一致バイトシーケンスを含まない。”a”のサーチデータ構造体は、”a”で始まる4つの手前のバイトシーケンスの各々、即ち”ad”、”ac”、”ab”及び ”ae”を識別するスロットを含んでいる。位置9及び10の”af”である現在バイトシーケンスが処理されるときには、サーチデータ構造体70は、”af”が手前のバイトシーケンスとして識別されるかどうか判断するためにサーチされる(図2のステップ38)。この例において、”a”によりインデックスされたエントリに対するスロットで、次のバイト値として”f”を含むものはない。従って、圧縮システムは、未参照(未使用)な時間が最長(least recently)の更新文字”a”に対するスロットをオーバーライトする。この場合に、バイトシーケンス”ad”を識別するスロットは、現在バイトシーケンス”af”を識別する情報と置き換えられる。より詳細には、次のバイトフィールドは”f”でオーバーライトされ、そして位置フィールドは10でオーバーライトされる。”a”で始まる次のバイトシーケンス、位置11の”ae”、に遭遇すると、圧縮システムは、一致シーケンス、即ち手前のバイトシーケンス”ae”を識別する”a”でインデックスされたエントリの入力をサーチする。第4のスロットは "e”を含むので、一致シーケンスが見つかる。第4のスロットは、一致シーケンスの最後のバイト(”e”)の位置として位置8を指す。圧縮システムは、位置12のバイトを位置9のバイトと比較することにより一致シーケンスを拡張するように試み、そして一致シーケンス”aea”を見つける(図2のステップ40)。圧縮システムは、位置13のバイトを位置10のバイトと比較するが、一致シーケンスを拡張することはできない。圧縮システムは、現在バイトシーケンス”aea”を一致コードとして表し、この一致コードは、(7、3)と表された一致コードの場合に、位置7で始まる位置シーケンス”aea”に対するポインタと、一致シーケンスの長さのカウント値とを含む(図2のステップ42)。繰り返し一致コードをチェックした後(ステップ44)、圧縮システムは、一致コード及び一致フラグをエンコードされたストリームに付加する(ステップ46、48)。圧縮システムは、4番目のスロットの位置を位置12と置き換えることによりサーチ構造体70を更新し、現在バイトシーケンスを識別する(ステップ68)。
LRU(最長時間末参照法)のデータ構造体74は、各バイト値ごとにエントリを含み、そしてバイト値によってインデックスされる。エントリは、サーチデータ構造体における対応エントリに対して最長時間末参照法で更新されたスロットを識別する。LRU構造体(図示された)は、実際には、もっとも最新に更新されたスロットのスロット番号(0・・・3)を含む。最長時間末参照法で更新されたスロットは、LRUエントリの値に1を加えることによって得られる。例えば、”a”に対する最長時間末参照法更新されたスロットは、スロット0であり、従って、LRUデータ構造体は3(3+1 mod4=0)を含む。現在バイトシーケンスがサーチデータ構造体におけるいずれのバイトシーケンスにも一致しない場合には、LRUは、次のスロットを指すように更新され(円形の形態で)、そして次のスロットは、現在バイトシーケンスの第1バイト及び位置でオーバーライトされる。当業者に明らかなように、最長時間末参照法で更新されたスロットの推定は、位置の値が最も小さいスロットを選択し、ひいては、LRUデータ構造体を不要とすることによって行うことができる。
別の実施例では、バイトシーケンスは、いかなる数のバイトでもよい。サーチデータ構造体は、2つのバイトによってインデックスされる直接アクセステーブルとして実施することができ、従って、216のエントリを有する。或いは又、サーチデータ構造体は、ハッシュテーブルとして実施することもできる。ハッシュテーブルが使用されるときには、異なる第1バイトをもつバイトシーケンスを同じエントリに対してハッシュし、衝突を生じることがある。衝突が生じると、スロットによって識別された各バイトシーケンスの第1バイトをチェックして一致を判断することが必要である。別の実施例では、各エントリに対するスロットをリンクされたリストとして維持することができる。リンクされたリストは、入力ストリームにおける各バイトごとにスロットをもつ入力ストリームに平行なアレーとして実施することができる。サーチデータ構造体の各エントリは、次のバイト値を識別するスロットのリンクされたリストを指す。リンクされたリストにおけるスロットは、同じ第1バイトに対して次のバイト値を一緒にリンクする。リンクされたリストをサーチするときには、ある数のスロットのみが一致に対してチェックされる。一致が見つからなかったときには、リンクされたリストの開始に新たなスロットが付加され、現在バイトシーケンスを識別する。一致スロットが見つかったときには、リンクされたリストからそれが除去され、そしてリンクされたリストの始めに新たなスロットが加えられて、現在バイトシーケンスを識別するのが好ましい。
図3に戻ると、ステップ76において、圧縮システム10は、パケットに端に達したかどうかを判断する。もしそうでなければ、圧縮システムは、新たな現在バイトシーケンスでステップ36ないし68をループする。もっとも最新の現在バイトシーケンスが一致を生じない場合は、新たな現在バイトシーケンスが手前の現在バイトシーケンスの第2バイトで開始する。手前の現在バイトシーケンスが一致を生じた場合には、現在バイトシーケンスは、手前の現在バイトシーケンスに続く第1バイトで始まる(ステップ41のバイトごとに比較で見つかった一致バイトによって増大される)。
圧縮システムの好ましい実施例は、ネットワークに関連して使用されるので、特に、WANを使用するときには、サーバコンピュータ12からクライエントコンピュータ14への送信中に、エンコードされたフレームの全部又は一部分が失われるという明らかなおそれがある。公知のネットワーク圧縮システムは、圧縮プログラムと共にメディアアクセスコントローラ(MAC)に保証された付与機構を設けることにより、フレーム脱落の問題を軽減すると考えられている。このような公知の機構は、1つ以上のフレームを受け取った後に受信側MACが送信側MACに確認を返送することを必要とする。このような付与保証機構は、著しい送信時間を浪費し、MACを不必要に複雑にする。更に、ネットワーク搬送部は、既に付与を保証しており、従って、MAC付与保証は冗長となる。このように、搬送部は、フレームを再送するが、メディアアクセスコントローラも同じことを行うように試み、従って、フレームは2回送信される。
MAC28Aに付与保証機構を含ませるのではなくて、圧縮システム10は、単に搬送部26A、26Bに基づいて付与を確保する。これは、各フレームが手前のフレームのデータに基づいて圧縮されるという点で問題を生じるが、搬送部26AはMAC28Aの上に置かれているので、搬送部がMAC28AからMAC28Bへの付与を保証する方法はなく、搬送部26Aから搬送部26Bへ保証するだけである。従って、何の手段もとらない場合には、圧縮解除装置がその後のフレームを圧縮するように試みるが、脱落したフレームは圧縮解除装置のヒストリバッファに入っていないので、圧縮解除装置はその後のフレームを正確に圧縮解除することはできない。この潜在的な問題を補償するために、圧縮システム10は、コヒレンスバイトを各フレームに追加し、圧縮解除装置のヒストリバッファが圧縮装置のヒストリバッファと同期されたままにする。
図3に戻ると、圧縮システム10がステップ76においてパケットの終わりに達したと判断した場合には、圧縮システムは、ステップ78においてCRC及びコヒレンスバイトを含むフレームバッファを追加することによってパケットをフレーム構成し、フレームを形成する。ステップ80において、フレームは、通信リンク16を経てクライエントコンピュータの圧縮解除装置32Bへ送られる。ステップ82において、圧縮装置10は、全てのパケットが処理されたかどうかを判断する。もしそうならば、圧縮システムは終了となり、システムがデータをコンピュータ間に送信させるところに実行復帰する。
処理すべきパケットが更にある場合には、圧縮システム10は、ステップ86において、圧縮解除装置からフラッシュ要求が受け取られたどうかを判断する。このようなフラッシュ要求は、フレームが乱れた状態で受け取られた場合に圧縮解除装置32Bによって発生され、これは、フレームが送信中に脱落したことを示す非順次コヒレンスバイトによって指示される。このようなフラッシュ要求を受け取った場合には、圧縮装置30Aは、ステップ88において、ヒストリバッファに現在あるバイトを無効化することによりそのヒストリバッファをフラッシュする。ステップ90において、圧縮システムは次のコヒレンスバイトをセットし、フラッシュ要求が受け取られたことを指示すると共に、コヒレンスバイトと共に送られるべきフレームがリセットヒストリバッファで圧縮されたことを指示する。ステップ92において、圧縮システムはフラグをセットし、次のパケットの各バイトを、それが一致に対して分析された後に、ヒストリバッファの始めに挿入し、手前のパケットを参照せずに次のパケットが圧縮されるようにすべきであることを指示する。
ステップ86においてフラッシュ要求が受け取られない場合には、次いで、ステップ94において、圧縮システム10は、直前のパケットの後の次のパケットのためにヒストリバッファに充分なスペースがあるかどうかを判断する。もしそうならば、ステップ96において、圧縮システムはフラグをセットして、次のパケットの各バイトを、それが一致に対して分析された後に、その手前のパケットの直後にヒストリバッファに挿入しなければならないことを指示する。もしそうでなければ、ステップ92において、フラグがセットされて、次のパケットの各バイトを、それが一致に対して分析された後に、ヒストリバッファの開始に挿入しなければならないことを指示する。次のパケットを、それがバッファの終わりに完全に適合できないときにバッファの始めに挿入することにより、圧縮システムは、一致シーケンスをヒストリバッファの終わりから始めへと続けることに関連したラップアラウンドの問題を回避する。このようなラップアラウンドの問題は、ヒストリバッファ内に留めるために圧縮及び圧縮解除中にバッファの終わりに達したかどうかを常にチェックしなければならないことを含む。次のパケットをヒストリバッファに挿入した後に、プロセスは、入力ストリームの全てのパケットが処理されてしまうまでステップ36ないし92を経てループする。
図5及び6は、圧縮解除装置32Bによって制御される圧縮システム10の圧縮解除セクションを示すフローチャートである。ステップ98において、圧縮解除装置32Bは、圧縮装置30Aからフレームを受け取る。ステップ100において、圧縮解除装置は、圧縮装置30Aからフラッシュ要求が受け取られたかどうかを判断する。このようなフラッシュ要求が受け取られた場合には、ステップ102において、圧縮解除装置は、ヒストリバッファに現在あるバイトを無効化することによりヒストリバッファをフラッシュする。ステップ104では、圧縮解除装置は、次のコヒレンスバイトをセットして、フラッシュ要求が受け取られたことを指示すると共に、コヒレンスバイトと共に送られたフレームがリセットヒストリバッファで圧縮解除されたことを指示する。ステップ106において、圧縮解除装置はフラグをセットし、次のフレームの各バイトを、それが圧縮解除された後に、ヒストリバッファの始めに挿入して、手前のフレームを参照せずに次のフレームが圧縮解除されるようにすべきであることを指示する。
ステップ100においてフラッシュ要求が受け取られない場合には、ステップ108において、圧縮解除装置32Bは、その直前のフレームの後の次のフレームに対しヒストリバッファに充分なスペースがあるかどうか判断する。もしそうであれば、ステップ110において、圧縮解除装置はフラグをセットし、次のパケットの各バイトを、それが圧縮解除された後に、その手前のフレームの直後にヒストリバッファに挿入しなければならないことを指示する。もしそうでなければ、ステップ106では、フラグがセットされて、次のパケットの各バイトを、それが圧縮解除された後に、ヒストリバッファの始めに挿入しなければならないことを指示する。このようなバッファチェックは、圧縮解除装置のヒストリバッファを圧縮装置のヒストリバッファと同期状態に保持する。
ステップ112において、圧縮解除装置は、フレームのコヒレンスバイトの逐次番号をチェックすることにより、受け取ったフレームが正しい逐次の順序にあるかどうかを判断する。逐次番号が正しくない場合には、圧縮解除装置は、サーバコンピュータ12とクライエントコンピュータ14との間の送信中にフレームが脱落したかどうか判断する。ステップ114において、圧縮解除装置は、圧縮装置にフラッシュ要求を発生し、これは、圧縮装置に、次のパケットを圧縮する前にそのヒストリバッファをリセットするように告げる。次いで、圧縮解除装置は、ステップ98において次のフレームを受け取るように復帰する。
図7は、サーバコンピュータ12とクライエントコンピュータ14との間で送信されるフレームの例を示すタイミング図である。フレーム1ないし4は、各々逐次コヒレンスバイト00ないし03と共に送信される。フレーム1及び2は、クライエントコンピュータにより誤りなく受け取られるが、フレーム3は、クライエントコンピュータによって正しく受け取られない。クライエントコンピュータは、指定の時間内にフレームを受け取らないか、又はフレームは受け取るが、CRCがそのフレーム内のデータに一致しないと判断することにより、フレームが脱落したことを検出する。脱落したフレームに応答して、クライエントコンピュータは、FFのようなフラッシュ要求コヒレンスバイトをもつ制御フレームを送信することにより、サーバコンピュータにフラッシュ要求を送信する。送信遅延があるために、クライエントコンピュータから送られたフラッシュ要求は、サーバコンピュータがフレーム4をクライエントコンピュータに送信した後まで、サーバコンピュータによって受け取られない。このように、クライエントコンピュータは、コヒレントバイト(03)をもつフレーム4を受け取り、これは、サーバコンピュータの圧縮ヒストリバッファがフラッシュされたことを確認するものではない。その結果、クライエントコンピュータは、フレーム4が乱れていると判断し、これを圧縮解除しない。サーバコンピュータは、コヒレンスバイトの上位ニブルが1に変化したフレーム5を送信し、これは、サーバの圧縮ヒストリバッファがフラッシュされたことを指示すると共に、フレーム5がフレーム1ないし4を参照せずに圧縮されたことを指示する。クライエントコンピュータは、フレーム5を受け取ると、コヒレンスバイトの上位ニブルの1を、バッファフラッシュの指示として確認し、そしてクライエントコンピュータは、サーバコンピュータのフラッシュされた圧縮ヒストリバッファに一致するようにその圧縮解除ヒストリバッファがフラッシュされた状態でフレーム5を圧縮解除する。
コヒレンスバイトは常に厳密な逐字の順序ではないことを理解されたい。図7に示すように、フレーム7は、コヒレンスバイト12ではなくてコヒレンスバイト7Eと共に送信され、これは、フレーム6のコヒレンスバイト11の後に順次に続くものである。このコヒレンスバイト7Eは、小さなマルチキャスト及びブロードキャストフレームのような好ましくは圧縮されないフレームに対して指定されるものである。
又、図7は、フレームがクライエントコンピュータからサーバコンピュータへ送信される間にフレームをサーバコンピュータ12からクライエントコンピュータ14へ送信する好ましい圧縮システムの能力も示している。クライエントコンピュータへ送られるフレームは、通常、フレームが脱落したとき以外は、サーバコンピュータによって受け取られるフレームとは個別に処理される。例えば、サーバコンピュータは、時にはフレーム10が送信される前に、クライエントコンピュータからサーバコンピュータへの送信中にフレームBが脱落したと判断する。逐次コヒレンスバイト14と共にフレーム10を送信しそしてフラッシュ要求コヒレンスバイトと共に個別の制御フレームを送信するのではなく、サーバコンピュータは、フレーム10のコヒレンスバイトをフラッシュ要求コヒレンスバイトと合成して、コヒレンスバイト94を発生する。クライエントコンピュータはフレーム10を受け取り、そしてフレーム10が適切な逐次順序にあること及びそれがフラッシュ要求と結合されたことを検出する。その結果、クライエントコンピュータは、その圧縮ヒストリバッファをフラッシュし、そしてフレームCをコヒレンスバイト10と共に送信する。その上位ニブルの1は、バッファがフラッシュされたことを指示し、そしてその下位ニブルの0は、フレームの新たな数字順序のスタートを指示する。
圧縮解除のフローチャートは、図6へと続き、フレームが適切な順序で受け取られた場合に、圧縮解除装置は、ステップ116において所定数(Y)のリテラル(好ましい実施例では、Yは6に等しい)のシーケンスを既に処理したかどうかを判断する。リテラルのシーケンスが処理された場合には、ステップ118において、圧縮解除装置は、リテラルのシーケンスにおいてYを越えるリテラルの数を指示するカウント値(L)を得る。ステップ120において、圧縮解除装置は、次のLバイトをリテラルとして出力する。ステップ122において、圧縮解除装置は、Lリテラルの直後の一致をデコードする。一致フラグをもたない一致は常にリテラルのストリングに続くことを想起されたい。というのは、別のリテラルがリテラルのストリングに続く場合に、そのリテラルがリテラルのストリングの一部となるからである。ステップ124において、圧縮解除装置は、デコードされた一致を出力する。
長さYのリテラルのシーケンスがない場合は、ステップ126において、圧縮解除装置は、所定数(X)の一致コードのシーケンスがあるかどうかを判断する(好ましい実施例では、Xは6に等しい)。もしあれば、ステップ128において、圧縮解除装置は、一致コードのシーケンスにおいてXより大きな一致コードの数を指示するカウント値(m)を得る。ステップ130において、圧縮解除装置は、サーバコンピュータ12の圧縮ヒストリバッファと同一に維持された圧縮解除ヒストリバッファにおける一致シーケンスをサーチすることにより、M個の連続する一致コードをデコードする。圧縮解除ヒストリバッファにおける各一致シーケンスの開始部を見つけた際に、圧縮解除装置は、各エンコードによって示されたバイトの数を単にカウントし、そしてステップ132においてデコードされた一致を出力する。ステップ134において、圧縮解除装置は、M個の一致の直後のリテラルを出力する。
一致コード又はリテラルのシーケンスがない場合には、圧縮解除装置は、ステップ136において、次のビット(1つ又は複数)にリテラルフラグが見つかったかどうか(各フラグにおけるビットの数に基づいて)判断する。もしそうであれば、ステップ134において、圧縮解除装置はリテラルを出力する。もしそうでなければ、次のビットは一致フラグでなければならず、ステップ122において、圧縮解除装置は、一致フラグに続く一致コードをデコードし、そしてステップ124においてそのデコードされた一致を出力する。
ステップ120、124、132及び134においてリテラル又は一致を出力した後に、圧縮解除装置は、ステップ138において現在フレームの終わりに達したかどうか判断する。もしそうでなければ、エンコードされたフレームの次のセクションに対しステップ116ないし138を経て実行がループする。フレームの終わりに達すると、圧縮解除装置は、全てのフレームが処理されたかどうか判断する(ステップ140)。受け取るべきフレームがもっとある場合は、圧縮解除装置は、次のフレームに対しステップ98ないし140を経てループする。全てのフレームが処理されたときには、圧縮解除装置は終了となり、ステップ142において、クライエントコンピュータのオペレーティングシステムに実行を復帰する。
前記したように、圧縮システム10は、手前のパケットの後に新たなパケットをヒストリバッファの終わりに適合できないときにその新たなパケットをヒストリバッファの始めに挿入するのが好ましい。別の実施例では、バッファの終わりに適合しない新たなパケットの部分のみがバッファの始めに挿入される。圧縮システムは、ヒストリバッファの終わりの直後に続く拡張バッファセクションを予め割り当てる。パケットがヒストリバッファに完全に適合しない場合には、その適合しないパケットの部分がその拡張されたバッファセクションに挿入される。これは、ヒストリバッファの終わりに生じる現在バイトシーケンスをその拡張されたバッファセクションへと延ばして、圧縮装置が現在バイトシーケンスを圧縮する間にバッファの始めへとラップアラウンドしなくてもよいようにする。拡張されたバッファへと延びるパケットの部分は、そのパケットの圧縮が完了した後に更に別の圧縮のためにヒストリバッファの始めへとコピーされる。
別の実施例が図6に示されている。図6には、8Kの円形ヒストリバッファ144と、このヒストリバッファの終わりの直後に配置された1.5K拡張バッファ146とが示されている。パケット1ないし5は、ヒストリバッファに既に挿入されており、そして前記したように圧縮されている。圧縮されるべき次のパケットは、長さが1.5Kのパケット6である。圧縮システムは、パケット6の最初の0.5Kバイトをパケット5の直後にヒストリバッファに挿入し、そしてパケット6の残りの1Kを拡張したバッファに挿入する。パケット6の最初の499バイトは前記したように正常に圧縮されると仮定する。このように、現在バイトシーケンスは、ヒストリバッファの最後のバイトで始まり、そして拡張されたバッファへと延びる。拡張されたバッファは、現在バイトシーケンスがヒストリバッファを越えて延びる事実を圧縮システムが無視できるようにすると共に、拡張された一致シーケンスが見つかった場合に現在バイトシーケンスを必要なだけ増大できるようにする。例えば、位置7999(ヒストリバッファの最終位置)及び8004から延びる現在バイトシーケンスに対して一致が見つかった場合には、ヒストリバッファの始めへラップアラウンドせずに一致を見つけてエンコードすることができる。パケット6の次の現在バイトシーケンスがヒストリバッファ内で始まらないとすれば、パケット6の最後の1Kバイトがヒストリバッファの始めへ挿入され、これにより、パケット1の最初の1Kバイトをオーバーライトする。それ故、次の現在バイトシーケンスは、ヒストリバッファ内で位置5のバイト(手前の現在バイトシーケンスの終了の直後に続くバイト)で始まり、そして圧縮は通常通りに進められる。
以上の説明から、本発明の特定の実施例について説明したが、本発明の精神及び範囲から逸脱せずに種々の変更がなされ得ることが明らかであろう。従って、本発明は、特許請求の範囲によってのみ限定されるものとする。
本発明によるデータ圧縮システムのブロック図である。 本発明によるデータ圧縮方法のフローチャートの一部分を示す図である。 本発明によるデータ圧縮方法のフローチャートの残り部分を示す図である。 図2及び3に示された圧縮方法に用いる好ましいサーチデータ構造体のブロック図である。 図1に示すデータ圧縮システムによって使用するデータ圧縮解除方法のフローチャートの一部分を示す図である。 図1に示すデータ圧縮システムによって使用するデータ圧縮解除方法のフローチャートの残り部分を示す図である。 図1に示すシステムに用いられるヒストリバッファを同期する方法を示すタイミング図である。 本発明の別の実施例に用いられるデータ記憶構造体のブロック図である。
符号の説明
10 データ圧縮システム
12 サーバコンピュータ
14 クライエントコンピュータ
16 通信リンク
17A、17B 中央処理ユニット
18A、18B メモリ
20A、20B ネットワークコネクタ
22A、22B バス
23A、23B ネットワークコントローラ
24A、24B レディレクタサーバ
26A、26B 搬送部
28A、28B メディアアクセスコントローラ(MAC)
30A、30B 圧縮装置
32A、32B 圧縮解除装置

Claims (28)

  1. データバイトの入力ストリームを受け取り、
    バイトの現在のシーケンスと同一である既に処理されたデータバイトの一致シーケンスをサーチし、
    エンコードされたデータストリームに、このような一致シーケンスの部分を形成しない各データバイトを付加し、このようなデータバイトはリテラルであり、
    前記エンコードされたデータストリームに、前記一致シーケンスの入力ストリームにおける位置と、前記一致シーケンスにおけるデータバイトの数との両方を識別する一致コードを付加し、及び、
    前記エンコードされたデータストリームにおいて一致コードの所定数のシーケンスを識別しそしてその識別された一致コードシーケンスに、当該識別された一致コードシーケンスにおける一致コードの数を指示するカウント値を付加する、
    というステップを備えたことを特徴とするデータ圧縮方法。
  2. 前記エンコードされた各データストリームをリモート圧縮解除装置へ送信し、及び、
    前記エンコードされたデータストリームを、前記入力ストリームと同一の圧縮解除されたストリームへと圧縮解除する、
    というステップを更に備えた請求項1に記載の方法。
  3. 前記圧縮解除ステップは、
    一致カウント値を位置決めし、
    前記一致カウント値に等しい多数の一致コードをデコードし、及び、
    前記デコードされた一致コードを前記圧縮解除されたストリームに付加する、
    というステップを備えた請求項2に記載の方法。
  4. 一致コードシーケンスの部分を形成しない各一致コードに隣接した前記エンコードされたデータストリームに一致コードフラグを付加し、及び、
    各一致コードシーケンスに一致コードフラグを付加する、
    というステップを更に備えた請求項1に記載の方法。
  5. 前記入力ストリームは、パケット当たりm以下のデータバイトを有する1つ以上のパケットに分割され、前記方法は、更に、
    サイズnの円形ヒストリバッファに1つ以上のパケットを順次に挿入し、nはmより大きなものであり、及び、
    前記ヒストリバッファに直前のパケットが挿入された後に前記円形ヒストリバッファの終わりに残っているバイトがx未満であるときに前記ヒストリバッファの最初のxバイトにサイズxのパケットを挿入する、
    というステップを備えた請求項1に記載の方法。
  6. 前記入力ストリームは、パケット当たりm以下のデータバイトを有する1つ以上のパケットに分割され、前記方法は、更に、
    サイズnの円形ヒストリバッファに1つ以上のパケットを順次に挿入し、nはmより大きなものであり、
    前記ヒストリバッファの終わりの直後にm−1バイトのオーバーフロー記憶スペースを設け、
    前記ヒストリバッファに前記直前のパケットが挿入された後当該ヒストリバッファに残っているスペースがyバイトであるときに、前記ヒストリバッファにxバイトのパケットのうちのyバイトを挿入し、
    前記xバイトのパケットのx−yバイトを前記オーバーフロー記憶スペースに挿入し、及び、
    前記xバイトのパケットのx−yバイトを前記ヒストリバッファの最初のx−yバイトにコピーする、
    というステップを備えた請求項1に記載の方法。
  7. データバイトの入力ストリームを圧縮装置の円形ヒストリバッファに記憶し、
    バイトの現在シーケンスと同一である既に処理されたデータバイトの一致シーケンスについて前記ヒストリバッファをサーチし、
    エンコードされたデータストリームに、同一シーケンスの部分を形成しない各データバイトを付加し、このようなデータバイトはリテラルであり、
    エンコードされたデータストリームに、前記一致シーケンスのヒストリバッファにおける位置と、前記一致シーケンスにおけるデータバイトの数との両方を識別する一致コードを付加し、
    前記エンコードされたデータストリームを複数のフレームに分割し、
    各エンコードされたフレームにコヒレンスコードを付加し、
    各エンコードされたフレームを圧縮解除するための円形ヒストリバッファを有するリモート圧縮解除装置に各エンコードされたフレームを送信し、及び、
    前記圧縮解除装置のヒストリバッファを、前記コヒレンスコードを用いて前記圧縮装置のヒストリバッファと同期させる、
    というステップを備えたことを特徴とするデータ圧縮方法。
  8. エンコードされたフレームが前記圧縮解除装置によって受け取られない場合は前記圧縮解除装置から前記圧縮装置へフラッシュ要求を送信し、及び、
    前記フラッシュ要求に応答して前記ヒストリバッファをフラッシュし、当該フラッシュするステップは、前記ヒストリバッファに記憶されている既に処理されたバイトが、一致シーケンスの部分になり得ないようにする、
    というステップを更に備えた請求項7に記載の方法。
  9. 前記コヒレンスコードの1つは、フラッシュ要求が前記圧縮装置によって受け取られたかどうかを指示する制御コードを含む請求項8に記載の方法。
  10. 入力ストリームをエンコードするためのデータ圧縮方法であって、
    前記入力ストリームがデータバイトのパケットを含んでおり、該方法が、
    前回のパケットのシーケンシャルオーダーでヒストリバッファに格納するために現在のパケットを受け取り、
    データバイトの現在のシーケンスと同一のすでに処理されたデータバイトの一致シーケンスを求めて、前記ヒストリバッファをサーチし、
    一致シーケンスが見つからなかった場合には、エンコードされたデータストリームに、同一のシーケンスを形成しない部分のそれぞれの不一致データバイトを付加し、このようなデータバイトはリテラルであり、
    一致シーケンスが見つかった場合には、エンコードされたデータストリームに、前記ヒストリバッファにおける前記一致シーケンスの入力ストリームにおける位置と、前記一致シーケンスのデータバイトの数との両方を識別する一致コードを付加し、
    前記エンコードされたデータストリームを複数のエンコードされたフレームに分割するようになった、データ圧縮方法において、
    前記現在のパケットが前記ヒストリバッファの前記前回のパケットとその終端との間に適合するかどうかを判断し、
    前記現在のパケットが前記ヒストリバッファに適合すると判断された場合には、前記現在のパケットを前記ヒストリバッファに挿入し、
    前記現在のパケットが前記ヒストリバッファに適合しないと判断された場合には、前記現在のパケットの第1の部分を前記ヒストリバッファの前回のパケットとその終端との間に挿入し、第2の部分を拡張バッファに挿入し、当該拡張バッファは前記終端の直後に論理的につながっており、そして、前記現在のパケットの第2の部分を前記最初の部分に挿入し、
    エンコードされたデータストリームにおいて所定数のリテラルのシーケンスを判断し、当該シーケンスは識別されたリテラルシーケンスとして参照され、
    前記識別されたリテラルシーケンスにおけるリテラル数を指示するカウント値を前記識別されたリテラルシーケンスに付加する、
    という、ステップを含むことを特徴とする方法。
  11. エンコードされたフレームをリモート圧縮解除装置に送信し、
    前記エンコードされたフレームが前記圧縮解除装置によって受け取られない場合は当該圧縮解除装置から前記圧縮装置へフラッシュ要求を送信し、
    前記フラッシュ要求に応答して前記ヒストリバッファをフラッシュするステップとをさらに含み、当該フラッシュステップは、前記ヒストリバッファに記憶されているバイトが、一致シーケンスの部分になり得ないことを特徴とする請求項10に記載の方法。
  12. エンコードされたフレームへコヒレンスコードを付加するステップをさらに含み、当該コヒレンスコードは、フラッシュ要求を受け取ったかどうかを指示する制御コードと、エンコードされたフレームのシーケンス中のどこに前記エンコードされたフレームが配置されているかを指示するシーケンシャルコードとを含むことを特徴とする請求項11に記載の方法。
  13. リテラルシーケンスの部分を形成しない各リテラルに隣接する前記エンコードされたデータストリームにリテラルフラグを付加し、及び、
    各リテラルシーケンスにリテラルフラグを付加するステップをさらに含むことを特徴とする請求項10に記載の方法。
  14. 前記エンコードされたデータストリームをリモート圧縮解除装置に送信し、及び、
    前記入力ストリームと同一な圧縮解除されたストリームへ前記エンコードされたデータストリームを圧縮解除するステップをさらに含むことを特徴とする請求項10に記載の方法。
  15. 前記エンコードされたデータストリームにおける所定数の一致コードのシーケンスを判断し、前記シーケンスは識別された一致コードシーケンスとして参照され、及び、
    前記識別された一致コードシーケンスにおける一致コード数を指示するカウント値を、前記識別された一致コードシーケンスに付加するステップをさらに含むことを特徴とする請求項10に記載の方法。
  16. 一致コードシーケンスの部分を形成しない各一致コードに隣接する前記エンコードされたデータストリームに一致コードフラグを付加し、
    各一致コードシーケンスに一致コードフラグを付加するステップをさらに含むことを特徴とする請求項15に記載の方法。
  17. 前記請求項15に記載の方法に従って入力ストリームを圧縮し、
    前記エンコードされたデータストリームをリモート圧縮解除装置に送信し、
    前記入力ストリームと同一な圧縮解除されたストリームへ前記エンコードされたデータストリームを圧縮解除するステップを含むことを特徴とするデータ送信方法。
  18. 前記圧縮解除ステップは、
    一致カウント値を配置し、
    前記一致カウント値に等しい一致コード数をデコードし、
    前記デコードされた一致コードを前記圧縮解除されたストリームへ付加するステップを含むことを特徴とする請求項17に記載の方法。
  19. 所定最少数のデータバイトよりも少ないパケットかどうかを判断し、
    前記パケットが前記所定最少数のデータバイトよりも少ないと判断された場合に、同一データバイトの一致シーケンスをサーチすることなく、前記エンコードされたデータストリーム上へ前記パケットを付加するステップをさらに含むことを特徴とする請求項10に記載の方法。
  20. 入力ストリングのシーケンスを受信し、各入力ストリングはデータバイト及びせいぜい1パケットあたりmデータバイトを有する1以上のパケットに分割される入力ストリングのシーケンスを含み、
    入力ストリングのシーケンスの複数の各入力ストリングのために、(1)圧縮装置のヒストリバッファに前記入力ストリングを記憶し、(2)前記ヒストリバッファに記憶されている既に処理された1以上の一致ストリングに基づいた前記入力ストリングをエンコードし、(3)前記エンコードされたストリングをリモート圧縮解除装置へ送信し、
    前記エンコードされたストリングが前記圧縮解除装置によって正しく受け取られない場合は当該圧縮解除装置からフラッシュ要求を受信し、
    前記フラッシュ要求に応答してヒストリバッファをフラッシュし、当該フラッシュステップは、前記ヒストリバッファに記憶されている入力ストリングが、一致ストリングの部分になり得ないようにし、
    前記フラッシュ要求を受信する前に任意のエンコードされた入力ストリングへの参照なしに、前記フラッシュ要求を受信した後に入力ストリングをエンコードし、
    前記エンコードされた入力ストリングを前記圧縮解除装置に送信し、
    所定最少数のデータバイトよりも少ないパケットかどうかを判断し、
    前記パケットが前記所定最少数のデータバイトよりも少ないと判断された場合に、同一データバイトのストリングをサーチすることなく、前記圧縮解除装置へ前記パケットを送信するというステップを備えたことを特徴とする入力ストリングのシーケンスを圧縮するためのデータ圧縮方法。
  21. 各エンコードされたストリングへコヒレンスコードを付加するステップをさらに含み、当該コヒレンスコードは、フラッシュ要求を受け取ったかどうかを指示する制御コードと、エンコードされたストリングのシーケンス中のどこに前記エンコードされたストリングが配置されているかを指示するシーケンシャルコードとを含むことを特徴とする請求項20に記載の方法。
  22. 各入力ストリングはデータバイトを含み、かつ、前記エンコードステップは、
    前記入力ストリングと同一な既に処理された一致ストリングについて前記ヒストリバッファをサーチし、
    同一なストリングの部分を形成しない各データバイトを、エンコードされたデータストリームに付加し、そのようなデータバイトはリテラルであり、
    前記一致ストリングの前記ヒストリバッファにおける位置と、前記一致ストリングにおけるデータバイト数との両方を識別する一致コードを前記エンコードされたデータストリームに付加し、
    前記エンコードされたデータストリームにおいて所定数の一致コードのシーケンスを識別するとともに、前記識別された一致コードシーケンスにおける一致コード数を識別するカウント値を前記識別された一致コードシーケンスに付加するステップを含むことを特徴とする請求項20に記載の方法。
  23. 一致コードシーケンスの部分を形成しない各一致コードに隣接する前記エンコードされたデータストリームに一致コードフラグを付加し、
    一致コードフラグを各一致コードシーケンスに付加するステップをさらに含むことを特徴とする請求項22に記載の方法。
  24. 前記エンコードされたデータストリームを前記圧縮解除装置に送信し、
    前記入力バイトのシーケンスと同一な圧縮解除されたストリームへ前記エンコードされたデータストリームを圧縮解除するステップをさらに含むことを特徴とする請求項22に記載の方法。
  25. 前記圧縮解除ステップは、
    一致カウント値を配置し、
    前記一致カウント値に等しい一致コード数をデコードし、
    前記デコードされた一致コードを前記圧縮解除されたストリームへ付加するステップを含むことを特徴とする請求項24に記載の方法。
  26. 各入力ストリングはデータバイトを含み、かつ前記入力ストリングのシーケンスはせいぜい1パケットあたりmデータバイトを有する1以上のパケットに分割され、
    前記方法は、1以上のパケットを、mより大きいサイズnの円形ヒストリバッファに順次挿入するステップをさらに含むことを特徴とする請求項20に記載の方法。
  27. 前記ヒストリバッファに直前のパケットが挿入された後、前記ヒストリバッファの終わりにxバイト以上残っていないときは、サイズxのパケットを前記ヒストリバッファの最初のxバイトに挿入するステップをさらに含むことを特徴とする請求項26に記載の方法。
  28. 前記ヒストリバッファの終わりの直後にm−1バイトのオーバーフロー記憶スペースを設け、
    前記ヒストリバッファに前記直前のパケットが挿入された後、当該ヒストリバッファに残っているスペースがyバイト存在するときは、xバイトのパケット中のyバイトを前記ヒストリバッファに挿入し、
    前記xバイトのパケット中のx−yバイトを前記オーバーフロー記憶スペースに挿入し、
    前記xバイトのパケットのx−yバイトを、前記ヒストリバッファの最初のx−yバイトにコピーするステップをさらに含むことを特徴とする請求項26に記載の方法。
JP2004095910A 1993-08-02 2004-03-29 データ圧縮方法及びシステム Expired - Lifetime JP4128152B6 (ja)

Applications Claiming Priority (2)

Application Number Priority Date Filing Date Title
US08/100,668 US5521597A (en) 1993-08-02 1993-08-02 Data compression for network transport
US08/100668 1993-08-02

Related Parent Applications (1)

Application Number Title Priority Date Filing Date
JP18113394A Division JP3571079B2 (ja) 1993-08-02 1994-08-02 データ圧縮方法及びシステム

Related Child Applications (1)

Application Number Title Priority Date Filing Date
JP2006062793A Division JP2006262462A (ja) 1993-08-02 2006-03-08 データ圧縮方法及びシステム

Publications (3)

Publication Number Publication Date
JP2004260839A true JP2004260839A (ja) 2004-09-16
JP4128152B2 JP4128152B2 (ja) 2008-07-30
JP4128152B6 JP4128152B6 (ja) 2009-01-07

Family

ID=

Also Published As

Publication number Publication date
DE69429482T2 (de) 2002-06-13
US5521597A (en) 1996-05-28
JP3571079B2 (ja) 2004-09-29
CA2128127C (en) 2003-02-25
CA2128127A1 (en) 1995-02-03
JP2007243959A (ja) 2007-09-20
EP0643491A1 (en) 1995-03-15
DE69429482D1 (de) 2002-01-31
JP4128152B2 (ja) 2008-07-30
EP0643491B1 (en) 2001-12-19
JP2006262462A (ja) 2006-09-28
JPH0778067A (ja) 1995-03-20

Similar Documents

Publication Publication Date Title
JP3571079B2 (ja) データ圧縮方法及びシステム
KR100333260B1 (ko) 터미널에뮬레이터데이터스트림차분시스템
US7403136B2 (en) Block data compression system, comprising a compression device and a decompression device and method for rapid block data compression with multi-byte search
US5850565A (en) Data compression method and apparatus
JP2771324B2 (ja) データ圧縮
US7167593B2 (en) System and method for incremental and continuous data compression
US8115660B2 (en) Compression of stream data using a hierarchically-indexed database
US7814284B1 (en) Redundancy elimination by aggregation of multiple chunks
US8824569B2 (en) High bandwidth decompression of variable length encoded data streams
US9002806B1 (en) Compression of data transmitted over a network
AU2001277914A1 (en) Incremental and continuous data compression
KR100353171B1 (ko) 적응형데이터압축을수행하는방법및장치
JPH08223053A (ja) 圧縮データの伸張方法
Lonardi et al. Joint source-channel LZ'77 coding
JP4128152B6 (ja) データ圧縮方法及びシステム
AU678942B2 (en) Data compression encoder/decoder and method for efficient duplicate string handling
EP0667064A1 (en) Method and apparatus for encoding and decoding compressed data in data communication
JP2765239B2 (ja) 適応的データ圧縮方式

Legal Events

Date Code Title Description
A131 Notification of reasons for refusal

Free format text: JAPANESE INTERMEDIATE CODE: A131

Effective date: 20050314

A601 Written request for extension of time

Free format text: JAPANESE INTERMEDIATE CODE: A601

Effective date: 20050614

A602 Written permission of extension of time

Free format text: JAPANESE INTERMEDIATE CODE: A602

Effective date: 20050617

A521 Written amendment

Free format text: JAPANESE INTERMEDIATE CODE: A523

Effective date: 20050913

A02 Decision of refusal

Free format text: JAPANESE INTERMEDIATE CODE: A02

Effective date: 20051107

A521 Written amendment

Free format text: JAPANESE INTERMEDIATE CODE: A523

Effective date: 20060308

A911 Transfer of reconsideration by examiner before appeal (zenchi)

Free format text: JAPANESE INTERMEDIATE CODE: A911

Effective date: 20060313

A912 Removal of reconsideration by examiner before appeal (zenchi)

Free format text: JAPANESE INTERMEDIATE CODE: A912

Effective date: 20060331

A521 Written amendment

Free format text: JAPANESE INTERMEDIATE CODE: A523

Effective date: 20080317

A01 Written decision to grant a patent or to grant a registration (utility model)

Free format text: JAPANESE INTERMEDIATE CODE: A01

A521 Written amendment

Free format text: JAPANESE INTERMEDIATE CODE: A821

Effective date: 20080513

RD02 Notification of acceptance of power of attorney

Free format text: JAPANESE INTERMEDIATE CODE: A7422

Effective date: 20080513

A61 First payment of annual fees (during grant procedure)

Free format text: JAPANESE INTERMEDIATE CODE: A61

Effective date: 20080513

FPAY Renewal fee payment (event date is renewal date of database)

Free format text: PAYMENT UNTIL: 20110523

Year of fee payment: 3

R150 Certificate of patent or registration of utility model

Free format text: JAPANESE INTERMEDIATE CODE: R150

RD04 Notification of resignation of power of attorney

Free format text: JAPANESE INTERMEDIATE CODE: A7424

Effective date: 20080513

FPAY Renewal fee payment (event date is renewal date of database)

Free format text: PAYMENT UNTIL: 20110523

Year of fee payment: 3

FPAY Renewal fee payment (event date is renewal date of database)

Free format text: PAYMENT UNTIL: 20120523

Year of fee payment: 4

FPAY Renewal fee payment (event date is renewal date of database)

Free format text: PAYMENT UNTIL: 20130523

Year of fee payment: 5

FPAY Renewal fee payment (event date is renewal date of database)

Free format text: PAYMENT UNTIL: 20130523

Year of fee payment: 5

R250 Receipt of annual fees

Free format text: JAPANESE INTERMEDIATE CODE: R250

R250 Receipt of annual fees

Free format text: JAPANESE INTERMEDIATE CODE: R250

EXPY Cancellation because of completion of term