(57)【要約】【課題】圧縮データの伸長を高速に行う。【解決手段】データの圧縮と伸長を行う圧縮伸長システムにおいて、圧縮装置１００が圧縮データとしてバイトコード列を生成し、伸長装置２００がバイトコード列を実行して圧縮データの伸長を行う。バイトコードには８バイト単位のコピー命令、直データ処理命令が含まれ、圧縮装置１００は、伸長時に８バイト単位のコピー命令、直データ処理命令を使用するかバイト単位のコピー命令、直データ処理命令を使用するかを圧縮時に判定してバイトコードを生成する。【選択図】図１
2013214832.tif 000002
【特許請求の範囲】
【請求項１】
データを圧縮して得られる圧縮データに基づいて、実行されることにより前記データを生成可能なコード列を含み、前記データに対してデータ量が少ない圧縮データを生成する圧縮装置と、
前記圧縮データに含まれる前記コード列を実行して、前記データを生成する伸長装置と、
を備えたことを特徴とする圧縮及び伸長システム。
【請求項２】
前記圧縮装置は、伸長時に単位長の複数倍のデータの処理命令が用いられるか単位長のデータの処理命令が用いられるかを判定し、判定結果に基づいて前記コード列を生成し、
前記伸長装置は、単位長の複数倍のデータの処理命令及び単位長のデータの処理命令を含むコード列を実行することを特徴とする請求項１に記載の圧縮及び伸長システム。
【請求項３】
前記圧縮装置は、前記コード列に含まれる命令として、伸長されたデータを格納する範囲をずらしながら該データの一部を格納するスライドバッファの読み出し位置を示す読出ポインタを操作するポインタ操作命令、スライドバッファで前記読出ポインタにより指された位置から指定された長さのデータを書込ポインタにより指された位置にコピーするコピー命令、前記スライドバッファで書込ポインタにより指された位置に命令内で指定されたデータをコピーする直データ処理命令を生成し、
前記伸長装置は、前記ポインタ操作命令、前記コピー命令、前記直データ処理命令を含むコード列を実行することを特徴とする請求項２に記載の圧縮及び伸長システム。
【請求項４】
前記伸長装置は、スライドバッファとは異なる記憶装置を有し、
前記圧縮装置は、コピーしたデータの長さと同じ長さのデータをスライドバッファから前記記憶装置に吐き出すか否かを判定し、前記コピー命令及び直データ処理命令で判定結果を指定することを特徴とする請求項３に記載の圧縮及び伸長システム。
【請求項５】
前記圧縮装置は、単位長の複数倍のデータの処理命令を生成する前に、前記書込ポインタの値が単位長の複数倍になるように、単位長のデータの処理命令を生成することを特徴とする請求項３に記載の圧縮及び伸長システム。
【請求項６】
データを圧縮して圧縮データを生成する圧縮装置において、
データを圧縮して得られる圧縮データに基づいて、実行されることにより前記データを生成可能なコード列を含み、前記データに対してデータ量が少ない圧縮データを生成する生成部
を有することを特徴とする圧縮装置。
【請求項７】
圧縮装置により圧縮されたデータである圧縮データを伸長する伸長装置において、
前記データに対してデータ量が少ない圧縮データに含まれるコード列を実行して、前記データを生成する伸長部
を有することを特徴とする伸長装置。
【請求項８】
データを圧縮して得られる圧縮データに基づいて、実行されることにより前記データを生成可能なコード列を含み、前記データに対してデータ量が少ない圧縮データを生成し、
前記圧縮データに含まれる前記コード列を実行して、前記データを生成する
ことを特徴とする圧縮及び伸長方法。
【請求項９】
データを圧縮して圧縮データを生成する圧縮プログラムにおいて、
データを圧縮して得られる圧縮データに基づいて、実行されることにより前記データを生成可能なコード列を含み、前記データに対してデータ量が少ない圧縮データを生成する処理をコンピュータに実行させることを特徴とする圧縮プログラム。
【請求項１０】
圧縮装置により圧縮されたデータである圧縮データを伸長する伸長プログラムにおいて、
前記データに対してデータ量が少ない圧縮データに含まれるコード列を実行して、前記データを生成する
処理をコンピュータに実行させることを特徴とする伸長プログラム。
【発明の詳細な説明】
【技術分野】
【０００１】
本発明は、圧縮及び伸長システム、圧縮装置、伸長装置、圧縮及び伸長方法、圧縮プログラム及び伸長プログラムに関する。
【背景技術】
【０００２】
従来、データの圧縮方式として、符号列の繰り返しに着目したＬＺ７７がある。ＬＺ７７では、圧縮プログラムは、現在注目している位置から始まる符号列が、それ以前に出現していたかを探し、出現していた場合には、符号列をその出現位置と長さに置き換える。ここで、符号列を探す範囲はスライドウィンドウと呼ばれる。
【０００３】
スライドウィンドウは、８Ｋバイト、６４Ｋバイトなどの所定の大きさを有し、データの圧縮処理の進行とともにデータ上でずらされる。したがって、圧縮データは、基本的には（スライドウィンドウでのコピー開始位置、コピー長）の組の羅列である。
【０００４】
また、伸長プログラムは、（スライドウィンドウでのコピー開始位置、コピー長）の組に基づいて、スライドウィンドウのコピー開始位置からコピー長の符号列をコピーすることでデータを伸長する。
【０００５】
図１８は、ＬＺ７７圧縮データの伸長を説明するための図である。図１８（ａ）に示すスライドウィンドウ１、コピー開始位置、コピー長の状態で伸長が行われると、図１８（ｂ）に示すように、コピー開始位置からコピー長の文字列”abcdef”がスライドウィンドウ１の最後尾にコピーされる。そして、スライドウィンドウ１がコピー長分ずらされる。ＬＺ７７圧縮データの伸長処理は、基本的にこの処理の繰り返しである。
【０００６】
ここで、各コピーに必要な処理は、コンピュータで処理される命令のレベルでは、次のようになる。
（１）コピー開始位置に基づいてコピー元となるアドレスを計算し
（２）コピー元アドレス、コピー先アドレスや、コピー長等に応じて最適なコピー処理を選択して実行し
（３）コピーを実行後、スライドウィンドウ１をずらす。
【０００７】
なお、関連する先行技術として、ＲＩＳＣによるマシン語のプログラムデータでは、データ長が３２ビットの固定フォーマットで決められた所定領域に対して同じ意味のコードが格納されるため、４バイト毎に小さい値の変換アドレス値を割り当てる技術がある。
【先行技術文献】
【特許文献】
【０００８】
【特許文献１】特開２０１１−１９３４０６号公報
【発明の概要】
【発明が解決しようとする課題】
【０００９】
ＬＺ７７圧縮データの伸長処理で繰り返されるコピー処理において、コンピュータで処理される命令のレベルでは、コピー元アドレス、コピー先アドレスや、コピー長等に応じて最適なコピー処理を選択して実行することが重要となる。すなわち、コピー長が数バイト程度ときわめて短い場合には、バイト単位のコピーを必要な回数だけ繰り返すことが適切である。一方、コピー長が長い場合には、端数部分をバイト単位で処理し、８バイト単位で処理できる部分は８バイト単位のロード・ストア命令を用いてコピーすることが適切である。
【００１０】
図１９は、コピー処理最適化の一例を示す図である。図１９に示すように、伸長プログラムが１０バイトデータをコピーする場合に、バイト単位でコピーすると、１０回のコピーが必要になる。一方、伸長プログラムが１０バイトデータのコピーを、２回のバイト単位のコピーと１回の８バイト単位のコピーに分解すると、３回のコピーだけですむ。
【００１１】
しかしながら、このようにコピー処理をきめ細かく選択するためには、アドレスやコピー長に基づいた分岐処理が必要となり、分岐処理のオーバーヘッドが性能向上の妨げとなる。すなわち、コンピュータは、パイプライン処理において、分岐命令については分岐方向を予測して後続命令を投機実行するが、予測ミスがあると投機実行した命令を破棄する必要がある。したがって、分岐命令が多いと、伸長プログラムの性能が低下する。
【００１２】
本発明は、１つの側面では、圧縮データを伸長する処理の性能向上を図ることを目的とする。
【課題を解決するための手段】
【００１３】
本願の開示する圧縮及び伸長システムは、１つの態様において、データを圧縮して得られる圧縮データに基づいて、実行されることにより前記データを生成可能なコード列を含み、前記データに対してデータ量が少ない圧縮データを生成する圧縮装置と、前記圧縮データに含まれる前記コード列を実行して、前記データを生成する伸長装置と、を有する。
【発明の効果】
【００１４】
１実施態様によれば、圧縮データを伸長する処理の性能向上を図ることができる。
【図面の簡単な説明】
【００１５】
【図１】図１は、実施例１に係る圧縮伸長システムの構成を示す図である。
【図２】図２は、圧縮装置が生成するバイトコードを示す図である。
【図３】図３は、圧縮装置の構成を示す図である。
【図４】図４は、圧縮装置による圧縮処理の手順を示すフローチャートである。
【図５】図５は、最長一致検索の手順を示すフローチャートである。
【図６】図６は、保留直データ出力の手順を示すフローチャートである。
【図７】図７は、一致データ列出力の手順を示すフローチャートである。
【図８】図８は、圧縮データの一例を示す図である。
【図９】図９は、伸長装置の構成を示す図である。
【図１０】図１０は、伸長装置として使用されるコンピュータの構成を示す図である。
【図１１】図１１は、８バイトデータを主記憶装置に書き込む場合のコンピュータの処理を示すフローチャートである。
【図１２】図１２は、伸長プログラムの機能構成を示す図である。
【図１３】図１３は、８バイト単位のコピー処理におけるロード及びストアの回数を説明するための図である。
【図１４】図１４は、伸長プログラムによる伸長処理の手順を示すフローチャートである。
【図１５】図１５は、コピー処理の手順を示すフローチャートである。
【図１６】図１６は、直データ処理の手順を示すフローチャートである。
【図１７】図１７は、本実施例に係る圧縮プログラムを実行するコンピュータの構成を示す機能ブロック図である。
【図１８】図１８は、ＬＺ７７圧縮データの伸長を説明するための図である。
【図１９】図１９は、コピー処理最適化の一例を示す図である。
【発明を実施するための形態】
【００１６】
以下に、本願の開示する圧縮及び伸長システム、圧縮装置、伸長装置、圧縮及び伸長方法、圧縮プログラム及び伸長プログラムの実施例を図面に基づいて詳細に説明する。なお、この実施例は開示の技術を限定するものではない。
【実施例１】
【００１７】
まず、実施例１に係る圧縮伸長システムについて説明する。図１は、実施例１に係る圧縮伸長システムの構成を示す図である。図１に示すように、圧縮伸長システムは、圧縮装置１００、伸長装置２００を有する。
【００１８】
圧縮装置１００は、データを入力して圧縮し、圧縮データを生成する。ここで、圧縮装置１００は、（スライドウィンドウでのコピー開始位置、コピー長）の組の羅列による圧縮データを生成するのではなく、バイトコード列による圧縮データを生成する。すなわち、圧縮装置１００は、データを読み込んでバイトコード列にコンパイルすることにより圧縮データを生成する。
【００１９】
伸長装置２００は、圧縮装置１００が生成したバイトコード列を実行して圧縮データから元のデータを生成するコンピュータである。すなわち、実施例１に係る圧縮伸長システムでは、伸長装置２００は、バイトコードを実行するという単純な処理を繰り返すことにより圧縮データを伸長する。
【００２０】
逆に、圧縮装置１００は、伸長処理で繰り返されるコピー処理において、コンピュータで処理される命令コードレベルで処理性能が向上するように、最適なバイトコードを生成する。具体的には、圧縮装置１００は、伸長時に８バイト単位命令が用いられるか１バイト単位命令が用いられるかを圧縮時に判定して、バイトコードを生成する。
【００２１】
このように、実施例１に係る圧縮伸長システムでは、伸長処理が高速に実行されるように、伸長時にコンピュータで処理される命令コードレベルで圧縮装置１００がデータの圧縮時に最適化を行う。したがって、実施例１に係る圧縮伸長システムは、圧縮時に必要な処理量を増加させるが、伸長時の処理を高速化することができる。
【００２２】
なお、図１では、圧縮装置１００と伸長装置２００とが直接接続されているが、実施例１に係る圧縮伸長システムでは、圧縮装置１００により圧縮された圧縮データを図示しない記憶装置に記憶し、記憶装置から読み出した圧縮データを伸長装置２００で伸長する。また、図１に示すように、伸長装置２００は、記憶装置を経由することなく、圧縮装置１００により圧縮された圧縮データを直接入力するようにすることもできる。
【００２３】
図２は、圧縮装置１００が生成するバイトコードを示す図である。図２に示すように、バイトコードには、「読出ポインタ更新」、「読出ポインタ設定」、「ドレイン＆コピー」、「ドレイン＆直データ」、「倍長語ドレイン」がある。
【００２４】
「読出ポインタ更新」は、読出ポインタをｂｃ［５：０］＝ｘを用いて更新する命令である。ここで、読出ポインタは、スライドウィンドウ１でコピー元の符号列の開始位置を指定するポインタである。また、ｂｃ［ｂ２：ｂ１］は、バイトコードのビットｂ１からビットｂ２までを表す。ただし、ｘ＝０〜６３に対して、読出ポインタの更新値は−３１〜３２が対応する。すなわち、読出ポインタ＝読出ポインタ＋ｘ−３１である。「読出ポインタ更新」では、ｂｃ［７：６］＝００である。
【００２５】
「読出ポインタ設定」は２バイト長のバイトコードであり、１バイト目のｂｃ［７：６］＝０１である。「読出ポインタ設定」は、１バイト目のｂｃ［５：０］を上位６ビット、２バイト目の８ビットを下位８ビットとする値ａ［１３：０］を読出ポインタに設定する命令である。すなわち、読出ポインタ＝ａ［１３：０］である。
【００２６】
なお、以下では、バイトコード「読出ポインタ更新」及びバイトコード「読出ポインタ設定」を合わせて「読出ポインタコード」と呼ぶこととする。
【００２７】
「ドレイン＆コピー」は、スライドバッファにおけるデータのコピーとドレインを指示する命令である。ここで、スライドバッファは、スライドウィンドウ１内のデータを格納するバッファである。コピー元は読出ポインタで指定され、コピー先は書込ポインタで指定される。書込ポインタは、これまでに生成されたデータの次を指す。
【００２８】
「ドレイン＆コピー」では、ｂｃ［７：６］＝１０である。また、「ドレイン」とは、スライドバッファの先頭から一部のデータをメモリに吐き出すことである。伸長処理により生成されたデータはスライドバッファに順次格納されるが、スライドバッファがオーバーフローしないように、データは先頭からメモリに吐き出される。
【００２９】
ｂｃ［５］＝Ｔは、コピー単位を示し、Ｔ＝０は、バイト単位を示し、Ｔ＝１は、倍長語単位を示す。ここで、ｂｃ［ｂ３］はバイトコードのビットｂ３を示す。また、倍長語の長さは８バイトである。ｂｃ［４：１］＝ｎは、コピー単位数を示す。ｂｃ［０］＝ｄは、ドレイン量を示し、Ｔ＝０の場合は、ドレイン量はｄバイトであり、Ｔ＝１の場合は、ドレイン量はｎ＊ｄ倍長語である。なお、「＊」は乗算を示す。
【００３０】
また、以下では、Ｔ＝０の場合、バイトコード「ドレイン＆コピー」を「ＣＯＰＹＢコード」と呼び、Ｔ＝１の場合、バイトコード「ドレイン＆コピー」を「ＣＯＰＹＤコード」と呼ぶこととする。
【００３１】
「ドレイン＆直データ」は、スライドバッファへの直データの格納とドレインを指示する命令である。直データは、圧縮データ中このバイトコードに後続するデータである。データの格納先は書込ポインタで指定される。
【００３２】
ｂｃ［５］＝Ｔは、直データの単位を示し、Ｔ＝０は、バイト単位を示し、Ｔ＝１は、倍長語単位を示す。ｂｃ［４：１］＝ｎは、データ単位数を示す。ｂｃ［０］＝ｄは、ドレイン量を示し、Ｔ＝０の場合は、ドレイン量はｄバイトであり、Ｔ＝１の場合は、ドレイン量はｎ＊ｄ倍長語である。「ドレイン＆直データ」では、ｂｃ［７：６］＝１１である。「ドレイン＆直データ」は、伸長処理の最初などで、スライドバッファに直データを格納する場合に用いられる。
【００３３】
また、以下では、Ｔ＝０の場合、バイトコード「ドレイン＆直データ」を「ＲＡＷ１コード」と呼び、Ｔ＝１の場合、バイトコード「ドレイン＆直データ」を「ＲＡＷ８コード」と呼ぶこととする。
【００３４】
「倍長語ドレイン」は、１倍長語のドレインを指示する命令である。「倍長語ドレイン」では、ｂｃ［７：０］＝１ｘ０００００１である。なお、「ｘ」は０と１のいずれでもよいことを示す。
【００３５】
次に、圧縮装置１００の構成について説明する。図３は、圧縮装置１００の構成を示す図である。図３に示すように、圧縮装置１００は、読出ポインタ１０１、書込ポインタ１０２、データ入力部１１０、入力データ記憶部１２０、保留直データ記憶部１３０、最長一致列検索部１４０、保留直データ出力部１５０、一致データ列出力部１６０を有する。また、圧縮装置１００は、制御部１７０を有する。
【００３６】
読出ポインタ１０１は、伸長時におけるスライドバッファからのデータの読み出し位置を記憶し、書込ポインタ１０２、伸長時におけるスライドバッファへのデータの書き込み位置を記憶する。
【００３７】
データ入力部１１０は、圧縮対象のデータをファイルから読み込んで、入力データ記憶部１２０に書き込む。入力データ記憶部１２０は、圧縮対象のデータを記憶し、一部がスライドバッファとして用いられる。
【００３８】
保留直データ記憶部１３０は、ＲＡＷ１コード又はＲＡＷ８コードに後続する直データ（ＲＡＷ  データ）として圧縮コードの一部となるデータを記憶する。すなわち、保留直データ記憶部１３０は、スライドバッファ中に一致する符号列が検索されなかった符号列を記憶する。
【００３９】
最長一致列検索部１４０は、圧縮装置１００がある時点で圧縮しようとする符号列と一致する符号列のうち最長の符号列を最長一致符号列としてスライドバッファから検索する。
【００４０】
保留直データ出力部１５０は、ＲＡＷ１コード又はＲＡＷ８コードをファイルに出力し、保留直データ記憶部１３０が記憶する直データをＲＡＷ１コード又はＲＡＷ８コードに後続する直データとしてファイルに出力する。
【００４１】
一致データ列出力部１６０は、最長一致列検索部１４０により検索された最長一致符号列をコピーするバイトコードをファイルに出力する。また、一致データ列出力部１６０は、スライドバッファにおける最長一致符号列の開始位置と読出ポインタ１０１の現在値に差がある場合には、読出ポインタ命令をファイルに出力し、伸長時に読出ポインタ１０１の値を最長一致符号列の開始位置に合わせる。
【００４２】
制御部１７０は、圧縮装置１００全体の制御を行い、具体的には、機能部間の制御の移動や機能部と記憶部の間のデータの受け渡しなどを行うことによって、圧縮装置１００を一つの装置として機能させる。
【００４３】
次に、圧縮装置１００による圧縮処理の手順について説明する。図４は、圧縮装置１００による圧縮処理の手順を示すフローチャートである。図４に示すように、圧縮装置１００は、データ入力部１１０が圧縮対象のデータをファイルから入力し（ステップＳ１１）、入力データ記憶部１２０に書き込む。
【００４４】
そして、制御部１７０が、入力データ記憶部１２０からデータを読み出し、データの有無を判定する（ステップＳ１２）。その結果、データがある場合には、最長一致列検索部１４０が、最長一致列検索を実行する（ステップＳ１３）。すなわち、最長一致列検索部１４０は、圧縮しようとする符号列と一致する最長の符号列をスライドバッファから検索する。
【００４５】
そして、制御部１７０が、一致する符号列が見つかったか否かを判定し（ステップＳ１４）、見つかった場合には、保留直データ出力部１５０が保留直データ出力を行う（ステップＳ１５）。すなわち、保留直データ出力部１５０は、ＲＡＷ１コード又はＲＡＷ８コードを出力し、保留直データ記憶部１３０が記憶する直データをＲＡＷ１コード又はＲＡＷ８コードに後続する直データとして出力する。そして、一致データ列出力部１６０が、一致データ列出力を行う（ステップＳ１６）。すなわち、最長一致列検索部１４０により検索された最長一致符号列をコピーするバイトコードを出力する。そして、制御部１７０は、入力データ記憶部１２０からの読み出し位置を、一致したバイト数分ずらし、スライドウィンドウを再設定する（ステップＳ１７）。そして、制御部１７０は、ステップＳ１２に制御を戻す。
【００４６】
一方、一致する符号列が見つからなかった場合には、制御部１７０は、入力データ記憶部１２０から１バイト読み出し、保留直データ記憶部１３０に追加する。また、制御部１７０は、入力データ記憶部１２０からの読み出し位置を１バイト分ずらし、スライドウィンドウを再設定する（ステップＳ１８）。制御部１７０は、ステップＳ１２に制御を戻す。
【００４７】
これに対して、入力データ記憶部１２０にデータがない場合には、保留直データ出力部１５０が保留直データ出力を行い（ステップＳ１９）、制御部１７０は圧縮処理を終了する。
【００４８】
次に、最長一致列検索の手順について説明する。図５は、最長一致列検索の手順を示すフローチャートである。図５に示すように、最長一致列検索部１４０は、longest＿match＿idx、longest＿match＿sizeを０で初期化する（ステップＳ２１）。ここで、longest＿match＿idxは、スライドバッファでの最長一致した符号列の開始位置であり、longest＿match＿sizeは、最長一致した符号列の長さである。
【００４９】
そして、最長一致列検索部１４０は、idxを０で初期化する（ステップＳ２２）。ここで、idxは、スライドバッファ内で検索される符号列の先頭位置を示す。そして、最長一致列検索部１４０は、idxがlengthより小さいか否かを判定する（ステップＳ２３）。ここで、lengthはスライドバッファのサイズである。
【００５０】
そして、idxがlengthより小さくない場合には、スライドバッファの検索が終了したので、最長一致列検索部１４０は、処理を終了し、検索結果として、longest＿match＿idx、longest＿match＿sizeを返す。
【００５１】
一方、idxがlengthより小さい場合には、最長一致列検索部１４０は、i、match＿sizeを０で初期化する（ステップＳ２４）。ここで、iは、スライドバッファ内で検索中の符号列の先頭からのオフセットであり、match＿sizeは、これまでに一致している文字列の長さである。
【００５２】
そして、最長一致列検索部１４０は、iがin＿sizeより小さく、かつ、idx+iがlengthより小さく、かつ、Slide＿buf[idx+i]とin＿data[idx+i]とが等しいか否かを判定する（ステップＳ２５）。ここで、in＿sizeは、未圧縮データの長さであり、Slide＿bufはスライドバッファであり、in＿dataは、入力データ記憶部１２０の未圧縮部分である。
【００５３】
その結果、iがin＿sizeより小さく、かつ、idx+iがlengthより小さく、かつ、Slide＿buf[idx+i]とin＿data[idx+i]とが等しい場合には、最長一致列検索部１４０は、i、match＿sizeに１を加え（ステップＳ２６）、ステップＳ２５に戻る。ここで、iがin＿sizeより小さく、かつ、idx+iがlengthより小さく、かつ、Slide＿buf[idx+i]とin＿data[idx+i]とが等しい場合とは、スライドバッファ内で現在検索中の符号列がi+1番目まで非圧縮符号列と一致する場合である。
【００５４】
一方、ステップＳ２５における判定が否である場合には、最長一致列検索部１４０は、match＿sizeが３より大きく、かつ、match＿sizeがlongest＿match＿sizeより大きいか否かを判定する（ステップＳ２７）。ここで、ステップＳ２５における判定が否である場合とは、スライドバッファ内で現在検索中の符号列のi+1番目が非圧縮符号列のi+1番目と一致しない場合である。
【００５５】
その結果、match＿sizeが３より大きく、かつ、match＿sizeがlongest＿match＿sizeより大きい場合には、最長一致列検索部１４０は、match＿sizeをlongest＿match＿sizeの新たな値とし、idxをlongest＿match＿idxの新たな値とする（ステップＳ２８）。ここで、match＿sizeが３より大きく、かつ、match＿sizeがlongest＿match＿sizeより大きい場合とは、新たに最長一致符号列が見つかった場合である。そして、最長一致列検索部１４０は、idxに１を加え（ステップＳ２９）、ステップＳ２３に戻り、スライドバッファ内で１つずらした位置から新たな最長一致符号列を検索する。
【００５６】
一方、match＿sizeが３より大きくないか、又は、match＿sizeがlongest＿match＿sizeより大きくない場合には、最長一致列検索部１４０は、idxに１を加え（ステップＳ２９）、ステップＳ２３に戻る。ここで、match＿sizeが３より大きくないか、又は、match＿sizeがlongest＿match＿sizeより大きくない場合とは、一致した符号列の長さが３以下であるか、これまで検索された最長一致符号列よりも短い場合である。
【００５７】
このように、最長一致列検索部１４０が、スライドバッファから最長一致符号列を検索することで、圧縮装置１００は、繰り返される符号列を効率良く圧縮することができる。
【００５８】
次に、保留直データ出力の手順について説明する。図６は、保留直データ出力の手順を示すフローチャートである。図６に示すように、保留直データ出力部１５０は、保留直データ記憶部１３０に保留直データがあるか否かを判定する（ステップＳ３１）。その結果、保留直データがない場合には、保留直データ出力部１５０は、処理を終了する。
【００５９】
一方、保留直データがある場合には、保留直データ出力部１５０は、書込ポインタ１０２が８バイト境界にあるか否かを判定する（ステップＳ３２）。その結果、書込ポインタ１０２が８バイト境界にない場合には、保留直データ出力部１５０は、８バイト境界か、保留直データの最後に達するまでＲＡＷ１コード及び１バイト直データを繰り返し出力し（ステップＳ３３）、ステップＳ３１に戻る。
【００６０】
一方、書込ポインタ１０２が８バイト境界にある場合には、保留直データ出力部１５０は、保留直データは８バイト以上の長さであるか否かを判定する（ステップＳ３４）。その結果、８バイト以上の長さである場合には、保留直データ出力部１５０は、保留直データの残りが８バイト未満になるまでＲＡＷ８コード、８バイト直データを繰り返し出力する（ステップＳ３５）。これに対して、８バイト以上の長さでない場合には、保留直データ出力部１５０は、保留直データの最後に達するまでＲＡＷ１コード、１バイト直データを繰り返し出力する（ステップＳ３６）。そして、保留直データ出力部１５０は、ステップＳ３１に戻る。
【００６１】
なお、保留直データ出力部１５０は、ＲＡＷ１コード、ＲＡＷ８コードを出力する際、スライドバッファの残り容量が一定量以下である場合には、ドレインビットｄを１に設定して、ＲＡＷ１コード、ＲＡＷ８コードを出力する。
【００６２】
このように、保留直データ出力部１５０が保留直データを出力することで、圧縮処理の初期などスライドバッファから一致する符号列が検索されない場合に、スライドバッファから検索されなかった符号列を圧縮データに含めることができる。
【００６３】
次に、一致データ列出力の手順について説明する。図７は、一致データ列出力の手順を示すフローチャートである。図７に示すように、一致データ列出力部１６０は、最長一致列検索によるスライドバッファ内の符号列の一致箇所と読出ポインタの現在値とに差がある場合には、読出ポインタコードを出力する（ステップＳ４１）。
【００６４】
そして、一致データ列出力部１６０は、未出力の一致データが残っているか否かを判定する（ステップＳ４２）。その結果、未出力の一致データが残っていない場合には、一致データ列出力部１６０は、処理を終了する。
【００６５】
一方、未出力の一致データが残っている場合には、一致データ列出力部１６０は、書込ポインタ１０２が８バイト境界にあるか否かを判定する（ステップＳ４３）。その結果、書込ポインタ１０２が８バイト境界にない場合には、一致データ列出力部１６０は、８バイト境界か、一致データの最後に達するまでＣＯＰＹＢコードを繰り返し出力し（ステップＳ４４）、ステップＳ４２に戻る。
【００６６】
一方、書込ポインタ１０２が８バイト境界にある場合には、一致データ列出力部１６０は、一致データは８バイト以上の長さであるか否かを判定する（ステップＳ４５）。その結果、８バイト以上の長さである場合には、一致データ列出力部１６０は、一致データの残りが８バイト未満になるまでＣＯＰＹＤコードを繰り返し出力する（ステップＳ４６）。これに対して、８バイト以上の長さでない場合には、一致データ列出力部１６０は、一致データの最後に達するまでＣＯＰＹＢコードを繰り返し出力する（ステップＳ４７）。そして、一致データ列出力部１６０は、ステップＳ４２に戻る。
【００６７】
なお、一致データ列出力部１６０は、ＣＯＰＹＢコード、ＣＯＰＹＤコードを出力する際、スライドバッファの残り容量が一定量以下である場合には、ドレインビットｄを１に設定して、ＣＯＰＹＢコード、ＣＯＰＹＤコードを出力する。
【００６８】
このように、一致データ列出力部１６０が一致データに対応してＣＯＰＹＢコード、ＣＯＰＹＤコードを出力することで、入力データ中に繰り返し表れる符号列を圧縮することができる。
【００６９】
図８は、圧縮データの一例を示す図である。図８は、文字列”abcdabcd”を圧縮した場合の圧縮データを示し、”０ｘＸＸ”は”ＸＸ”が１６進数であることを示す。図８において、”０ｘＣ８”は直データ長が４バイトのＲＡＷ１コードを示し、４バイトの直データ’a’、’b’、’c’、’d’がスライドバッファに格納される。ドレインは行われない。また、”０ｘ８８”は４バイト長のＣＯＰＹＢコードを示し、ドレインは行われない。ここでは、読出ポインタ＝０の位置から４バイト分コピーするだけでよいため、読出ポインタコードは出力されない。なお、各行において、”#”以降の文字列はコメントである。
【００７０】
次に、伸長装置２００の構成について説明する。図９は、伸長装置２００の構成を示す図である。図９に示すように、伸長装置２００は、プロセッサ２１０、主記憶装置２２０を有するコンピュータである。
【００７１】
プロセッサ２１０は、バイトコードを実行して圧縮データを伸長し、主記憶装置２２０は、圧縮データ及び伸長されたデータを記憶する。プロセッサ２１０は、スライドバッファ格納ＲＡＭ２１１、バイトコード実行器２１２、入出力部２１３、バス制御部２１４、を有する。スライドバッファ格納ＲＡＭ２１１は、スライドバッファとして機能するメモリであり、例えば６４Ｋバイトの容量を備える。
【００７２】
バイトコード実行器２１２は、主記憶装置２２０からバス制御部２１４を介してバイトコードを読み出し、読み出したバイトコードを実行することによって圧縮データを伸長する。バイトコード実行器２１２は、読出ポインタ２１２ａ、書込ポインタ２１２ｂを有する。バイトコード実行器２１２は、読出ポインタ２１２ａ及び書込ポインタ２１２ｂを用いてスライドバッファ格納ＲＡＭ２１１にアクセスする。また、バイトコード実行器２１２は、レイン指定があるバイトコードを実行すると、スライドバッファ格納ＲＡＭ２１１に記憶されたデータを主記憶装置に吐き出す。
【００７３】
入出力部２１３は、ファイルから圧縮データを読み込んで主記憶装置２２０に格納する。また、入出力部２１３は、伸長されたデータを主記憶装置２２０から読み出してファイルに出力する。
【００７４】
バス制御部２１４は、バイトコード実行器２１２による主記憶装置２２０からのバイトコードの読み出し、及び、スライドバッファ格納ＲＡＭ２１１から主記憶装置２２０へのデータの吐き出しに用いられるバスを制御する。また、バス制御部２１４は、入出力部２１３と主記憶装置２２０との間のデータ転送に用いられるバスを制御する。
【００７５】
上述してきたように、実施例１では、圧縮装置１００が圧縮データとしてバイトコード列を生成し、伸長装置２００がバイトコードを実行して圧縮データの伸長を行う。したがって、圧縮伸長システムは、圧縮データの伸長処理を命令の実行で実現することができ、高速に圧縮データの伸長を行うことができる。
【実施例２】
【００７６】
ところで、上記実施例１では、伸長装置２００がバイトコードを実行するコンピュータである場合について説明した。しかしながら、主記憶装置と８バイト単位でデータを転送するコンピュータとコンピュータで実行されるプログラムとで伸長装置を実現することもできる。そこで、実施例２では、伸長装置を、主記憶装置と８バイト単位でデータを転送するコンピュータとコンピュータで実行される伸長プログラムとで実現する場合について説明する。
【００７７】
まず、伸長装置として使用されるコンピュータについて説明する。図１０は、伸長装置として使用されるコンピュータの構成を示す図である。図１０に示すように、伸長装置として使用されるコンピュータ３００は、コア３１０、キャッシュメモリ３２０、主記憶装置３３０を有する。
【００７８】
コア３１０は、命令を処理する処理装置であり、演算器３１１、命令制御部３１２、レジスタファイル３１３を有する。演算器３１１は、命令制御部３１２の指示に基づいて、四則演算、論路演算などの演算を行う。命令制御部３１２は、コア３１０を制御し、演算器３１１、レジスタファイル３１３を用いて命令を処理する。レジスタファイル３１３は、演算器３１１で用いられるデータや演算結果を記憶するレジスタの集まりである。各レジスタの長さは８バイトである。
【００７９】
キャッシュメモリ３２０は、主記憶装置３３０へのアクセスを高速化するためのメモリであり、バッファ３２１、データＲＡＭ３２２を有する。バッファ３２１は、レジスタファイル３１３とデータＲＡＭ３２２との間で転送されるデータを一時的に格納する。バッファ３２１の長さは８バイトであり、レジスタファイル３１３とバッファ３２１との間のデータ転送及びバッファ３２１とデータＲＡＭ３２２との間のデータ転送は８バイト単位である。
【００８０】
データＲＡＭ３２２は、主記憶装置３３０に記憶されるデータの一部を記憶する。データＲＡＭ３２２と主記憶装置３３０との間のデータ転送は６４バイト単位である。主記憶装置３３０は、コア３１０で使用されるデータ、コア３１０での演算結果等を記憶する。
【００８１】
次に、８バイトデータを主記憶装置３３０に書き込む場合のコンピュータ３００の処理について説明する。図１１は、８バイトデータを主記憶装置３３０に書き込む場合のコンピュータ３００の処理を示すフローチャートである。
【００８２】
図１１に示すように、８バイトデータを主記憶装置３３０に書き込む場合、まず演算器３１１からレジスタファイル３１３のいずれかのレジスタに８バイトデータが転送される（ステップＳ６１）。
【００８３】
そして、レジスタから８バイト幅バスを用いてバッファ３２１に８バイトデータが転送される（ステップＳ６２）。そして、バッファ３２１から８バイト幅バスを用いてデータＲＡＭ３２２へ８バイトデータが転送される（ステップＳ６３）。
【００８４】
そして、データＲＡＭ３２２において、８バイトデータが主記憶装置３３０での格納先アドレスに基づいて適切な位置に部分書き込みされる（ステップＳ６４）。
【００８５】
このように、コンピュータ３００では、８バイト単位のメモリアクセスが最も効率良く処理される。逆に、１バイト単位のアクセスは、８バイト幅のレジスタ、バスの一部にのみ有効なデータを流すことになり、非効率である。したがって、圧縮装置１００ができるだけ８バイト単位でデータのコピーを行うバイトコードを生成することによって、コンピュータ３００は、効率良く伸長処理を行うことができる。
【００８６】
次に、伸長プログラムの機能構成について説明する。図１２は、伸長プログラムの機能構成を示す図である。図１２に示すように、伸長プログラム１０は、読出ポインタ１１、書込ポインタ１２、スライドバッファ１３、圧縮データ読込部１４、圧縮データ記憶部１５、命令制御部１６、ｒｐｔ更新部１７、ｒｐｔ設定部１８、コピー部１９、直データ処理部２０を有する。
【００８７】
読出ポインタ１１は、スライドバッファ１３からデータを読み出す位置を指定する。書込ポインタ１２はスライドバッファ１３にデータを書き込む位置を指定する。スライドバッファ１３は、圧縮データに基づいて伸長されたデータを記憶する。スライドバッファ１３は主記憶装置３３０上の領域であり、データの伸長にともなって、スライドバッファ１３の大きさや主記憶装置３３０上での位置が変化する。
【００８８】
圧縮データ読込部１４は、ファイルから圧縮データを読み込み、圧縮データ記憶部１５に書き込む。圧縮データ記憶部１５は、圧縮データを記憶する。命令制御部１６は、圧縮データ記憶部１５から圧縮データを読み込み、伸長処理を制御する。すなわち、命令制御部１６は、圧縮データとしてバイトコードを圧縮データ記憶部１５から順番に読み出してバイトコードの種別を判定し、種別に応じた処理部に制御を渡す。
【００８９】
ｒｐｔ更新部１７は、バイトコード「読出ポインタ更新」を処理する。すなわち、ｒｐｔ更新部１７は、読出ポインタ１１にｂｃ［５：０］−３１を加える。
【００９０】
ｒｐｔ設定部１８は、バイトコード「読出ポインタ設定」を処理する。すなわち、ｒｐｔ設定部１８は、１バイト目のｂｃ［５：０］を上位６ビット、２バイト目のｂｃ［７：０］を下位８ビットとする値を読出ポインタ１１に設定する。
【００９１】
コピー部１９は、バイトコード「ドレイン＆コピー」を処理する。すなわち、コピー部１９は、ｂｃ［５］＝Ｔ＝０の場合には、スライドバッファ１３で、読出ポインタ１１で指定される位置からｂｃ［４：１］で指定される数のバイトを書込ポインタ１２で指定される位置にコピーする。また、コピー部１９は、ｂｃ［５］＝Ｔ＝１の場合には、スライドバッファ１３で、読出ポインタ１１で指定される位置からｂｃ［４：１］で指定される数の倍長語を書込ポインタ１２で指定される位置にコピーする。そして、コピー部１９は、読出ポインタ１１及び書込ポインタ１２をコピーしたバイト数で更新する。ただし、ここでは、主記憶装置３３０上にスライドバッファ１３があるため、ドレインは不要となる。
【００９２】
図１３は、８バイト単位のコピー処理におけるロード及びストアの回数を説明するための図である。図１３（ａ）は、読出ポインタ１１が主記憶装置３３０の８バイト境界にある場合を示し、図１３（ｂ）は、読出ポインタ１１が主記憶装置３３０の８バイト境界にない場合を示す。なお、８バイト単位のコピー処理が行われるときは、書込ポインタ１２は常に主記憶装置３３０の８バイト境界にあるように圧縮装置１００がバイトコードを生成する。
【００９３】
図１３（ａ）に示すように、読出ポインタ１１が主記憶装置３３０の８バイト境界にある場合には、コピー部１９は、読出ポインタ１１が指す位置からレジスタに８バイトロードして、書込ポインタ１２が指す位置へ８バイトストアする。したがって、ｎ単位処理するために必要な命令実行回数は、８バイトロード命令がｎ回、８バイトストア命令がｎ回である。
【００９４】
一方、図１３（ｂ）に示すように、読出ポインタ１１が主記憶装置３３０の８バイト境界にない場合には、コピー部１９は、８バイトロード命令を２回実行して、コピー対象の８バイトを含む１６バイトを主記憶装置３３０から２つのレジスタに読み出す。そして、コピー部１９は、コピー対象の先頭を含むレジスタをコピー対象の先頭が左端になり、右端から０が埋められるように左シフトし、コピー対象の最後尾を含むレジスタをコピー対象の最後尾が右端になり、左端から０が埋められるように右シフトする。そして、コピー部１９は、２つのレジスタの論理和をとり、書込ポインタ１２が指す位置へ８バイトストアする。
【００９５】
ここで、コピー対象の最後尾を含むレジスタには次のコピー対象データが含まれるため、コピー部１９は、コピー対象の最後尾を含むレジスタを右シフトしたとき、シフトアウトしたデータをゼロクリアされた別のレジスタにシフトインし、次のコピーで使用する。したがって、コピー部１９は、次のコピーでは、コピー対象の最後尾を含む８バイトをレジスタにロードするだけでコピー対象データを得ることができる。すなわち、コピー部１９が８バイト単位コピーをｎ回実行する場合に、最初の回だけは８バイトロードが２回必要となるが、他のｎ−１回は８バイトロードは１回ですむ。したがって、ｎ単位処理するために必要な命令実行回数は、８バイトロード命令がｎ＋１回、８バイトストア命令がｎ回である。一方、１バイト単位でｎ単位処理する場合の命令実行回数は、ロード命令及びストア命令がそれぞれ８ｎ回となる。
【００９６】
したがって、コピー部１９は、読出ポインタ１１が主記憶装置３３０の８バイト境界以外を指す場合にも、８バイト単位コピーを行うことにより、１バイト単位でコピーを行う場合と比較して、ロード命令及びストア命令の実行回数を減らすことができる。
【００９７】
直データ処理部２０は、バイトコード「ドレイン＆直データ」を処理する。すなわち、直データ処理部２０は、ｂｃ［５］＝Ｔ＝０の場合には、圧縮データの次のバイトからｂｃ［４：１］で指定される数のバイトをスライドバッファ１３で書込ポインタ１２が指定する位置に書き込む。また、直データ処理部２０は、ｂｃ［５］＝Ｔ＝１の場合には、圧縮データの次の倍長語からｂｃ［４：１］で指定される数の倍長語をスライドバッファ１３で書込ポインタ１２が指定する位置に書き込む。そして、直データ処理部２０は、書込ポインタ１２を書き込んだバイト数で更新する。ただし、ここでは、主記憶装置３３０上にスライドバッファ１３があるため、ドレインは不要となる。
【００９８】
次に、伸長プログラム１０による伸長処理の手順について説明する。図１４は、伸長プログラム１０による伸長処理の手順を示すフローチャートである。図１４に示すように、伸長プログラム１０は、まず圧縮データ読込部１４が、ファイルから圧縮データを読み込んで（ステップＳ７１）、圧縮データ記憶部１５に書き込む。
【００９９】
そして、命令制御部１６が、バイドコードの実行に必要な初期化処理を行う（ステップＳ７２）。初期化処理としては、読出ポインタ１１、書込ポインタ１２、スライドバッファ１３の初期設定などがある。
【０１００】
そして、命令制御部１６が、圧縮データ記憶部１５からバイトコードを読み出し（ステップＳ７３）、全バイトコードの読み出しが完了したか否かを判定する（ステップＳ７４）。その結果、全バイトコードの読み出しが完了した場合には、命令制御部１６は、伸長処理を終了する。
【０１０１】
一方、全バイトコードの読み出しが完了していない場合には、命令制御部１６は、読み出したバイトコードの種別を判定する（ステップＳ７５）。その結果、バイトコードが「読出ポインタ更新」である場合には、ｒｐｔ更新部１７が読出ポインタ１１を更新する（ステップＳ７６）。また、バイトコードが「読出ポインタ設定」である場合には、ｒｐｔ設定部１８が読出ポインタ１１に値を設定する（ステップＳ７７）。また、バイトコードが「ドレイン＆コピー」である場合には、コピー部１９がコピー処理を行う（ステップＳ７８）。また、バイトコードが「ドレイン＆直データ」である場合には、直データ処理部２０が直データ処理を行う（ステップＳ７９）。
【０１０２】
そして、命令制御部１６はステップＳ７３に戻り、次のバイトコードを処理する。このように、命令制御部１６がバイトコードの種別に基づく処理を実行することにより、伸長プログラム１０は圧縮データを伸長することができる。
【０１０３】
次に、コピー処理の手順について説明する。図１５は、コピー処理の手順を示すフローチャートである。図１５に示すように、コピー部１９は、まずバイトコピーであるか否か、すなわちｂｃ［５］＝Ｔの値が０であるか１であるかを判定する（ステップＳ８１）。
【０１０４】
その結果、バイトコピーであると判定した場合には、コピー部１９は、スライドバッファ１３で、読出ポインタ１１により指定される位置から書込ポインタ１２で指定される位置へｎバイトコピーする（ステップＳ８２）。ここで、ｎはｂｃ［４：１］で指定される数である。そして、コピー部１９は、読出ポインタ１１及び書込ポインタ１２にｎを加え、スライドウィンドウを再設定する（ステップＳ８３）。
【０１０５】
一方、バイトコピーでないと判定した場合には、コピー部１９は、スライドバッファ１３で、読出ポインタ１１により指定される位置から書込ポインタ１２で指定される位置へ８バイト単位コピーをｎ回実行する（ステップＳ８４）。そして、コピー部１９は、読出ポインタ１１及び書込ポインタ１２に８×ｎを加え、スライドウィンドウを再設定する（ステップＳ８５）。
【０１０６】
このように、コピー部１９は、読出ポインタ１１により指定される位置から書込ポインタ１２で指定される位置へデータをコピーすることにより、スライドバッファ１３内に伸長データを生成していくことができる。
【０１０７】
次に、直データ処理の手順について説明する。図１６は、直データ処理の手順を示すフローチャートである。図１６に示すように、直データ処理部２０は、まず直データがバイトデータであるか否か、すなわちｂｃ［５］＝Ｔの値が０であるか１であるかを判定する（ステップＳ９１）。
【０１０８】
その結果、直データがバイトデータであると判定した場合には、直データ処理部２０は、スライドバッファ１３で書込ポインタ１２により指定される位置に圧縮データ記憶部１５からｎバイトコピーする（ステップＳ９２）。ここで、ｎはｂｃ［４：１］で指定される数である。そして、直データ処理部２０は、書込ポインタ１２にｎを加え、スライドウィンドウを再設定する（ステップＳ９３）。
【０１０９】
一方、直データがバイトデータでないと判定した場合には、直データ処理部２０は、スライドバッファ１３で書込ポインタ１２により指定される位置に圧縮データ記憶部１５からｎ倍長語コピーする（ステップＳ９４）。そして、直データ処理部２０は、書込ポインタ１２に８×ｎを加え、スライドウィンドウを再設定する（ステップＳ９５）。
【０１１０】
このように、直データ処理部２０は、書込ポインタ１２で指定される位置へ圧縮データ記憶部１５からデータをコピーすることにより、スライドバッファ１３に伸長データを生成していくことができる。
【０１１１】
上述してきたように、実施例２では、伸長プログラム１０がバイトコードを解釈して実行することにより圧縮データの伸長を行うので、圧縮装置１００はバイトコードを圧縮データとすることができる。
【０１１２】
なお、実施例１及び２では、圧縮装置１００について説明したが、圧縮装置１００が有する構成をソフトウェアによって実現することで、同様の機能を有する圧縮プログラムを得ることができる。そこで、圧縮プログラムを実行するコンピュータについて説明する。
【０１１３】
図１７は、本実施例に係る圧縮プログラムを実行するコンピュータの構成を示す機能ブロック図である。図１７に示すように、コンピュータ４００は、ＲＡＭ４１０と、ＣＰＵ４２０と、ＨＤＤ４３０と、ＬＡＮインタフェース４４０と、入出力インタフェース４５０と、ＤＶＤドライブ４６０とを有する。
【０１１４】
ＲＡＭ４１０は、プログラムやプログラムの実行途中結果などを記憶するメモリであり、ＣＰＵ４２０は、ＲＡＭ４１０からプログラムを読み出して実行する中央処理装置である。ＨＤＤ４３０は、プログラムやデータを格納するディスク装置であり、ＬＡＮインタフェース４４０は、コンピュータ４００をＬＡＮ経由で他のコンピュータに接続するためのインタフェースである。入出力インタフェース４５０は、マウスやキーボードなどの入力装置及び表示装置を接続するためのインタフェースであり、ＤＶＤドライブ４６０は、ＤＶＤの読み書きを行う装置である。
【０１１５】
そして、コンピュータ４００において実行される圧縮プログラム４１１は、ＤＶＤに記憶され、ＤＶＤドライブ４６０によってＤＶＤから読み出されてコンピュータ４００にインストールされる。あるいは、圧縮プログラム４１１は、ＬＡＮインタフェース４４０を介して接続された他のコンピュータシステムのデータベースなどに記憶され、これらのデータベースから読み出されてコンピュータ４００にインストールされる。そして、インストールされた圧縮プログラム４１１は、ＨＤＤ４３０に記憶され、ＲＡＭ４１０に読み出されてＣＰＵ４２０によって実行される。なお、コンピュータ４００は、伸長プログラム１０を実行することもできる。
【０１１６】
また、実施例１及び２では、圧縮伸長システムがバイトコードを用いる場合について説明した。しかしながら、本発明はこれに限定されるものではなく、バイト単位でデータをコピーするか８バイト単位でデータをコピーするかなど伸長時の処理を指定する形式のデータを圧縮データとして圧縮伸長システムが用いる場合にも同様に適用することができる。
【０１１７】
また、実施例１及び２では、伸長処理を行うコンピュータ内部でのデータ転送が８バイト単位で行われる場合について説明した。しかしながら、本発明はこれに限定されるものではなく、データ転送が例えば１６バイト単位など８バイト以外の単位で行われる場合にも同様に適用することができる。
【符号の説明】
【０１１８】
１    スライドウィンドウ
１０    伸長プログラム
１１    読出ポインタ
１２    書込ポインタ
１３    スライドバッファ
１４    圧縮データ読込部
１５    圧縮データ記憶部
１６    命令制御部
１７    ｒｐｔ更新部
１８    ｒｐｔ設定部
１９    コピー部
２０    直データ処理部
１００    圧縮装置
１０１    読出ポインタ
１０２    書込ポインタ
１１０    データ入力部
１２０    入力データ記憶部
１３０    保留直データ記憶部
１４０    最長一致列検索部
１５０    保留直データ出力部
１６０    一致データ列出力部
１７０    制御部
２００    伸長装置
２１０    プロセッサ
２１１    スライドバッファ格納ＲＡＭ
２１２    バイトコード実行器
２１３    入出力部
２１４    バス制御部
２２０    主記憶装置
３００，４００    コンピュータ
３１０    コア
３１１    演算器
３１２    命令制御部
３１３    レジスタファイル
３２０    キャッシュメモリ
３２１    バッファ
３２２    データＲＡＭ
３３０    主記憶装置
４１０    ＲＡＭ
４１１    圧縮プログラム
４２０    ＣＰＵ
４３０    ＨＤＤ
４４０    ＬＡＮインタフェース
４５０    入出力インタフェース
４６０    ＤＶＤドライブ
【図１】
2013214832.tif 000003
【図２】
2013214832.tif 000004
【図３】
2013214832.tif 000005
【図４】
2013214832.tif 000006
【図５】
2013214832.tif 000007
【図６】
2013214832.tif 000008
【図７】
2013214832.tif 000009
【図８】
2013214832.tif 000010
【図９】
2013214832.tif 000011
【図１０】
2013214832.tif 000012
【図１１】
2013214832.tif 000013
【図１２】
2013214832.tif 000014
【図１３】
2013214832.tif 000015
【図１４】
2013214832.tif 000016
【図１５】
2013214832.tif 000017
【図１６】
2013214832.tif 000018
【図１７】
2013214832.tif 000019
【図１８】
2013214832.tif 000020
【図１９】
2013214832.tif 000021