(57)【要約】  被圧縮データから繰返し部分が順次検出され、その繰返し部分の相対一致位置が命令ワード長の倍数に相当する位置であるワード繰返しの状態か、そうではないバイト繰返しの状態かが判定される。ワード繰返し状態である場合には、相対一致位置を命令ワード長で割って得られる値と一致長を示す値とを少なくとも含むワード繰返し符号が生成され圧縮データとして出力される。バイト繰返し状態である場合には、相対一致位置を示す値と一致長を示す値とを少なくとも含むバイト繰返し符号が生成され圧縮データとして出力される。同時に、ワード繰返し符号とバイト繰返し符号を切り替えるための切替え符号が生成され、圧縮データとして出力される。
2009095956.tif 000002
【特許請求の範囲】
【請求項１】
命令コードを含む被圧縮データを圧縮して圧縮データを生成する方法であって、
前記被圧縮データから繰返し部分を順次検出し、該繰返し部分の相対一致位置が前記命令コードを表すバイト数である命令ワード長の倍数に相当する位置である第一の繰返しの状態か、そうではない第二の繰返しの状態かを判定する繰返し状態判定ステップと、
前記繰返し部分が前記第一の繰返し状態である場合には、該繰返し部分に対応する前記相対一致位置を前記命令ワード長で割って得られる圧縮相対一致位置を示す値と、該繰返し部分の前記相対一致位置における一致長を示す値とを少なくとも含む第一の繰返し符号を生成し、それを前記圧縮データとして出力する第一の繰返し符号生成ステップと、
前記繰返し部分が前記第二の繰返し状態である場合には、該繰返し部分に対応する前記相対一致位置を示す値と、該繰返し部分の前記相対一致位置における一致長を示す値とを少なくとも含む第二の繰返し符号を生成し、それを前記圧縮データとして出力する第二の繰返し符号生成ステップと、
前記第一及び第二の繰返し符号を切り替えるための切替え符号を生成し、それを前記圧縮データとして出力する切替え符号生成ステップと、
を含むことを特徴とするデータ圧縮方法。
【請求項２】
前記第二の繰返し状態の後前記第一の繰返し状態が所定回数連続して続いた場合に、前記第一の繰返し符号への切替えを行うステップと、
前記第一の繰返し状態の後前記第二の繰返し状態に１回でもなった場合に、前記第二の繰返し符号への切替えを行うステップと、
を更に含むことを特徴とする請求項１に記載のデータ圧縮方法。
【請求項３】
前記第一の繰返し符号生成ステップ又は前記第二の繰返し符号生成ステップにおいて、前記一致長が所定バイト数よりも小さい場合には、前記第一の繰返し符号又は前記第二の繰返し符号として前記被圧縮データのバイトデータをそのまま示す値を出力し、前記第一の繰返し符号又は前記第二の繰返し符号は前記被圧縮データのバイトデータをそのまま示す値が出力されているか否かを示すためのフラグを含む、
ことを特徴とする請求項１又は２の何れか１項に記載のデータ圧縮方法。
【請求項４】
命令コードを含む被圧縮データを圧縮して生成された圧縮データから前記被圧縮データを復元する方法であって、
相対一致位置を前記命令コードを表すバイト数である命令ワード長で割って得られる圧縮相対一致位置を示す値と、前記相対一致位置における一致長を示す値とを少なくとも含み前記圧縮データを構成する第一の繰返し符号から、前記圧縮相対一致位置と前記一致長を抽出し、該圧縮相対一致位置に前記命令ワード長を乗算して前記相対一致位置を算出し、既に復元されている前記被圧縮データから前記算出した相対一致位置と前記抽出した一致長とに対応する第一の繰返し部分を復元し、前記被圧縮データとして出力する第一の繰返し部分復元ステップと、
前記相対一致位置を示す値と、前記相対一致位置における一致長を示す値とを少なくとも含み前記圧縮データを構成する第二の繰返し符号から、前記相対一致位置と前記一致長を抽出し、既に復元されている前記被圧縮データから前記抽出した相対一致位置と前記抽出した一致長とに対応する第二の繰返し部分を復元し、前記被圧縮データとして出力する第二の繰返し部分復元ステップと、
前記第一及び第二の繰返し符号を切り替えるための切替え符号を前記圧縮データから抽出し、その抽出タイミングに基づいて前記第一の繰返し部分復元ステップと前記第二の繰返し部分復元ステップとを切り替えて実行させる切替えステップと、
を含むことを特徴とするデータ復元方法。
【請求項５】
前記第一の繰返し部分復元ステップ又は前記第二の繰返し部分復元ステップにおいて、前記第一の繰返し符号又は前記第二の繰返し符号に含まれるフラグが前記被圧縮データのバイトデータをそのまま示す値が出力されていることを示している場合に、前記第一の繰返し符号又は前記第二の繰返し符号に含まれるデータから前記被圧縮データのバイトデータをそのまま抽出し、前記被圧縮データとして出力する、
ことを特徴とする請求項４に記載のデータ復元方法。
【請求項６】
命令コードを含む被圧縮データを圧縮して圧縮データを生成するコンピュータに、
前記被圧縮データから繰返し部分を順次検出し、該繰返し部分の相対一致位置が前記命令コードを表すバイト数である命令ワード長の倍数に相当する位置である第一の繰返しの状態か、そうではない第二の繰返しの状態かを判定する繰返し状態判定機能と、
前記繰返し部分が前記第一の繰返し状態である場合には、該繰返し部分に対応する前記相対一致位置を前記命令ワード長で割って得られる圧縮相対一致位置を示す値と、該繰返し部分の前記相対一致位置における一致長を示す値とを少なくとも含む第一の繰返し符号を生成し、それを前記圧縮データとして出力する第一の繰返し符号生成機能と、
前記繰返し部分が前記第二の繰返し状態である場合には、該繰返し部分に対応する前記相対一致位置を示す値と、該繰返し部分の前記相対一致位置における一致長を示す値とを少なくとも含む第二の繰返し符号を生成し、それを前記圧縮データとして出力する第二の繰返し符号生成機能と、
前記第一及び第二の繰返し符号を切り替えるための切替え符号を生成し、それを前記圧縮データとして出力する切替え符号生成機能と、
を実行させるためのプログラム。
【請求項７】
前記第二の繰返し状態の後前記第一の繰返し状態が所定回数連続して続いた場合に、前記第一の繰返し符号への切替えを行う機能と、
前記第一の繰返し状態の後前記第二の繰返し状態に１回でもなった場合に、前記第二の繰返し符号への切替えを行う機能と、
を更に実行させるためのプログラム。
【請求項８】
命令コードを含む被圧縮データを圧縮して生成された圧縮データから前記被圧縮データを復元するコンピュータに、
相対一致位置を前記命令コードを表すバイト数である命令ワード長で割って得られる圧縮相対一致位置を示す値と、前記相対一致位置における一致長を示す値とを少なくとも含み前記圧縮データを構成する第一の繰返し符号から、前記圧縮相対一致位置と前記一致長を抽出し、該圧縮相対一致位置に前記命令ワード長を乗算して前記相対一致位置を算出し、既に復元されている前記被圧縮データから前記算出した相対一致位置と前記抽出した一致長とに対応する第一の繰返し部分を復元し、前記被圧縮データとして出力する第一の繰返し部分復元機能と、
前記相対一致位置を示す値と、前記相対一致位置における一致長を示す値とを少なくとも含み前記圧縮データを構成する第二の繰返し符号から、前記相対一致位置と前記一致長を抽出し、既に復元されている前記被圧縮データから前記抽出した相対一致位置と前記抽出した一致長とに対応する第二の繰返し部分を復元し、前記被圧縮データとして出力する第二の繰返し部分復元機能と、
前記第一及び第二の繰返し符号を切り替えるための切替え符号を前記圧縮データから抽出し、その抽出タイミングに基づいて前記第一の繰返し部分復元ステップと前記第二の繰返し部分復元ステップとを切り替えて実行させる切替え機能と、
を実行させるためのプログラム。
【発明の詳細な説明】
【技術分野】
【０００１】
本発明は、コンパクトに電子データを格納・通信するシステムを実現するためのデータ圧縮・復元技術に関する。
【背景技術】
【０００２】
組込み機器におけるアプリケーションのリッチ化に伴い、アプリケーションの格納・通信において、データ量の増加が問題となっている。
このような場合に、データ圧縮技術を用い、データのロスなしに符号化を実施することでデータ量を削減する技術が知られている。【０００３】
データ量削減により、メモリコスト削減、通信コスト削減及び省電力の効果がある。また、メモリバスや通信路に流すデータ量が減ることでシステム全体の高速化にも効果がある。【０００４】
従来のデータ圧縮技術の一方式を図１に示す。この方式は、処理負荷が低くリーズナブルにデータ量を削減できる、ＬＺ７７方式と呼ばれる辞書型圧縮方式である。この方式では、データバッファから同じ文字列の繰返しであってできるだけ一致部分の長い繰返しが見つけられ、その繰返しが位置及び一致長で符号化される。【０００５】
一方、アプリケーションは命令コードとデータとの混在から成っている。命令コードの部分は、複数バイト（例えば４バイト）で１ワードが表される。このため、例えば図２に示されるように、繰返しが見つかる箇所が、命令コード及びデータとも１ワード中の１バイト目及び３バイト目など、ワード中の同じ位置であることが多い。つまり、バイト単位での相対位置で見ると、４の倍数になることが多い（４バイトコードの場合）。【０００６】
しかし、ＬＺ７７方式等の従来技術では、計算機処理がしやすいように、命令コード部分もデータ部分も一律に処理されているため、この規則性を取り込んだより効率的なデータ圧縮を行えなかった。【０００７】
下記特許文献１に記載の従来技術は、文字列の繰り返しを、一致長と一致位置で符号化するＬＺ７７タイプの符号化において、一致長が１の繰返しに対して相対位置が閾値以下のものを特別に符号化する点を特徴とするものである。【０００８】
しかし、この従来技術は、状況に応じて符号化方式を切り替える機能は有しているが、命令コードとデータとが混在するようなアプリケーションを効率的に圧縮することはできない。【０００９】
下記特許文献２に記載の従来技術は、ＬＺ７７タイプの符号化において、バイト表現上同じ数値列であっても解析部により意味が異なること(数字なのか文字なのか等)を検出し意味も考慮して一致を検出することを特徴とするものである。【００１０】
しかし、この従来技術は、繰返し検索の前に意味論的に解析するためのパーサを使用しており、比較的重い処理とパーサ辞書が必要なため、携帯用アプリケーションのデータ圧縮には適さない。
【特許文献１】特開２００７−３７１１５号公報
【特許文献２】特開平８−６９３７０号公報
【発明の開示】
【００１１】
本発明の課題は、命令コードを含む被圧縮データを効率よく圧縮して圧縮データを生成し、その圧縮データから被圧縮データを効率よく復元することにある。
本発明の第一の態様は、命令コードを含む被圧縮データを圧縮して圧縮データを生成する方法又はプログラムを前提とする。
【００１２】
まず、被圧縮データから繰返し部分を順次検出し、その繰返し部分の相対一致位置が命令コードを表すバイト数である命令ワード長の倍数に相当する位置である第一の繰返しの状態か、そうではない第二の繰返しの状態かを判定する繰返し状態判定ステップが実行される。
【００１３】
繰返し部分が第一の繰返し状態である場合には、その繰返し部分に対応する相対一致位置を命令ワード長で割って得られる圧縮相対一致位置を示す値と、その繰返し部分の相対一致位置における一致長を示す値とを少なくとも含む第一の繰返し符号を生成し、それを圧縮データとして出力する第一の繰返し符号（ワード繰返し符号）生成ステップが実行される。
【００１４】
繰返し部分が第二の繰返し状態である場合には、その繰返し部分に対応する相対一致位置を示す値と、その繰返し部分の相対一致位置における一致長を示す値とを少なくとも含む第二の繰返し符号を生成し、それを圧縮データとして出力する第二の繰返し符号（バイト繰返し符号）生成ステップが実行される。
【００１５】
そして、第一及び第二の繰返し符号を切り替えるための切替え符号を生成し、それを圧縮データとして出力する切替え符号生成ステップが実行される。
上述の本発明の第一の態様において、第二の繰返し状態の後第一の繰返し状態が所定回数（Ｔ回）連続して続いた場合に、第一の繰返し符号への切替えを行うステップと、第一の繰返し状態の後第二の繰返し状態に１回でもなった場合に、第二の繰返し符号への切替えを行うステップとを、更に含むように構成することができる。
【００１６】
上述の本発明の第一の態様において、第一の繰返し符号生成ステップ又は第二の繰返し符号生成ステップにおいて、一致長が所定バイト数よりも小さい場合には、第一の繰返し符号又は第二の繰返し符号として被圧縮データのバイトデータをそのまま示す値を出力し、第一の繰返し符号又は第二の繰返し符号は被圧縮データのバイトデータをそのまま示す値が出力されているか否かを示すためのフラグを含むように構成することができる。
【００１７】
本発明の第二の態様は、命令コードを含む被圧縮データを圧縮して生成された圧縮データから被圧縮データを復元する方法又はプログラムを前提とする。
第一及び第二の繰返し符号を切り替えるための切替え符号を圧縮データから抽出し、その抽出タイミングに基づいて下記の第一の繰返し部分復元ステップと第二の繰返し部分復元ステップとを切り替えて実行させる切替えステップが実行される。
【００１８】
第一の繰返し部分復元ステップは、相対一致位置を命令コードを表すバイト数である命令ワード長で割って得られる圧縮相対一致位置を示す値と、相対一致位置における一致長を示す値とを少なくとも含み圧縮データを構成する第一の繰返し符号から、圧縮相対一致位置と一致長を抽出し、その圧縮相対一致位置に命令ワード長を乗算して相対一致位置を算出し、既に復元されている被圧縮データから算出した相対一致位置と抽出した一致長とに対応する第一の繰返し部分を復元し、被圧縮データとして出力する。
【００１９】
第二の繰返し部分復元ステップは、相対一致位置を示す値と、相対一致位置における一致長を示す値とを少なくとも含み圧縮データを構成する第二の繰返し符号から、相対一致位置と一致長を抽出し、既に復元されている被圧縮データから抽出した相対一致位置と抽出した一致長とに対応する第二の繰返し部分を復元し、被圧縮データとして出力する。
【００２０】
上述の本発明の第二の態様において、第一の繰返し部分復元ステップ又は第二の繰返し部分復元ステップにおいて、第一の繰返し符号又は第二の繰返し符号に含まれるフラグが被圧縮データのバイトデータをそのまま示す値が出力されていることを示している場合に、第一の繰返し符号又は第二の繰返し符号に含まれるデータから被圧縮データのバイトデータをそのまま抽出し、被圧縮データとして出力するように構成することができる。
【００２１】
上述した本発明の第一及び第二の態様の構成により、ＣＰＵに対する命令コードの命令ワード長の特性を利用し、少ない処理負荷で命令コードの効率的な圧縮・復元が可能となる。これにより、例えば携帯端末や組込機器等のシステム起動時にＣＰＵがＲＡＭ等から命令コードを読み出す時間を短縮できるので、ひいてはブート時間を短縮することができる。
【図面の簡単な説明】
【００２２】
【図１】データの繰返しをその位置と一致長で符号化する、従来のデータ圧縮技術の一方式の説明図である。
【図２】命令コードにおけるデータの規則性の説明図である。
【図３】本発明の実施形態の機能ブロック図である。
【図４】本発明の実施形態のプログラムが実行されるハードウェアの構成図である。
【図５】本発明の実施形態のデータ圧縮プログラムに対応する動作フローチャートである。
【図６】本発明の実施形態のデータ復元プログラムに対応する動作フローチャートである。
【図７】ワード繰返し符号とバイト繰返し符号の符号フォーマットを示す図である。
【図８】命令データエリアとデータエリアが混在する元データのバイト列の例に対して圧縮データの符号が生成される動作の説明図である。
【図９】符号出力部から出力される圧縮データの符号の例を示す図である。
【発明を実施するための最良の形態】
【００２３】
以下、図面を参照しながら、本発明を実施するための最良の形態を詳細に説明する。
図３は、本発明の実施形態の機能ブロック図であり、図３（ａ）はデータ圧縮を行うための実施形態の機能ブロック図、図３（ｂ）はデータ復元を行うための実施形態の機能ブロック図である。【００２４】
まず、図３（ａ）のデータ圧縮側の機能ブロック図について説明する。
繰返し検出部３０２は、アプリケーション等の命令コードとデータが混在した被圧縮データである元データ３０１を例えば８キロバイト（８１９２バイト）分を順次一時保持し、その元データ３０１中の繰返しを検出する。【００２５】
切替え判定部３０３は、繰返し検出部３０２が検出した繰返しが、命令コード部分に対応するワード繰返しなのか、データ部分に対応するバイト繰返しなのかを判定する。
切替え部３０４は、切替え判定部３０３の判定結果に基づいて、ワード繰返し符号生成部３０５による処理かバイト繰返し符号生成部３０６による処理かを切り替える。【００２６】
ワード繰返し符号生成部３０５は、繰返し検出部３０２が検出した繰返し部分に対して、命令コード分に対応するワード単位での繰返し符号を生成する。
バイト繰返し符号生成部３０６は、繰返し検出部３０２が検出した繰返し部分に対して、データ部分に対応するバイト単位での繰返し符号を生成する。【００２７】
切替え符号生成部３０７は、切替え部３０４が繰返し符号の切替えを行う境界部分において、切替え符号を生成する。
符号出力部３０８は、ワード繰返し符号生成部３０５、バイト繰返し符号生成部３０６、及び切替え符号生成部３０７が生成された各符号を合わせて、圧縮データ３０９として出力する。【００２８】
以上のようにして得られた圧縮データ３０９は、例えば携帯電話や組込機器のＲＯＭ記録媒体等に記憶される。
次に、図３（ｂ）のデータ復元側の機能ブロック図について説明する。【００２９】
例えば携帯電話や組込機器のＲＯＭ記録媒体等から読み出された圧縮データ３０９は、符号入力部３１０に入力し、そこで符号が取り出される。
切替え符号検出部３１１は、ワード繰返し復号部３１３及びバイト繰返し復号部３１４が復号した符号中から、切替え符号を検出する。【００３０】
切替え部３１２は、切替え符号検出部３１１が検出された切替え符号に基づいて、ワード繰返し復号部３１３又はバイト繰返し復号部３１４の何れかを動作させる。
ワード繰返し復号部３１３は、符号入力部３１０から入力されるワード繰返し符号を復号して命令コード部分を取り出し、それを元データ３０１として出力する。【００３１】
バイト繰返し復号部３１４は、符号入力部３１０から入力されるバイト繰返し符号を復号してデータ部分を取り出し、それを元データ３０１として出力する。
図４は、図３（ａ）及び（ｂ）に示される各機能ブロック構成が、図５及び図６に示される動作フローチャートの各動作に対応する各コンピュータプログラムによって実現される場合における、その各プログラムを実行する各コンピュータのハードウェア構成の一例を示す図である。【００３２】
図４に示されるコンピュータは、ＣＰＵ４０１、メモリ４０２、入力装置４０３、出力装置４０４、外部記憶装置４０５、可搬記録媒体４０９が挿入される可搬記録媒体駆動装置４０６、及びネットワーク接続装置４０７を有し、これらがバス４０８によって相互に接続された構成を有する。同図に示される構成は上記システムを実現できるコンピュータの一例であり、そのようなコンピュータはこの構成に限定されるものではない。【００３３】
図４に示されるコンピュータは、それに搭載されるプログラムが、図３（ａ）に対応する図５の動作フローチャートの動作を実行する場合には、データ圧縮機能を実行するワークステーションやサーバ等のデータ圧縮作業用コンピュータであり、図３（ｂ）に対応する図６の動作フローチャートの動作を実行する場合には、データ復元機能を実行する携帯電話やモバイル端末、或いは組込機器等のコンピュータである。【００３４】
ＣＰＵ４０１は、当該コンピュータ全体の制御を行う。メモリ４０２は、プログラムの実行、データ更新等の際に、外部記憶装置４０５（或いは可搬記録媒体４０９）に記憶されているプログラム又はデータを一時的に格納するＲＡＭ等のメモリである。メモリ４０２は、図４がデータ圧縮作業用コンピュータの構成である場合には、図５の動作フローチャートに対応するデータ圧縮プログラムとそれによって生成される圧縮データ３０９等を一時的に記憶し、図４が携帯電話や組込機器等のコンピュータの構成である場合には、図６の動作フローチャートに対応するデータ復元プログラムとそれが復元する圧縮データ３０９及び復元によって得られるアプリケーションプログラム＋データ等の元データ３０１を一時的に記憶する。ＣＵＰ４０１は、上記プログラムをメモリ４０２に読み出して実行することにより、全体の制御を行う。【００３５】
入力装置４０３は、図４がデータ圧縮作業用コンピュータの構成である場合には、例えば、キーボード、マウス等及びそれらのインタフェース制御装置とからなり、図４が携帯電話や組込機器等のコンピュータの構成である場合には、携帯電話や組込機器等のテンキーとポインタデバイス等及びそれらのインタフェース制御装置とからなる。入力装置４０３は、ユーザによるキーボードやマウス等による入力操作を検出し、その検出結果をＣＰＵ４０１に通知する。【００３６】
出力装置４０４は、図４がデータ圧縮作業用コンピュータの構成である場合には、ディスプレイ表示装置、印刷装置等及びそれらのインタフェース制御装置とからなり、図４が携帯電話や組込機器等のコンピュータの構成である場合には、携帯電話や組込機器等の画面表示装置及びインタフェース制御装置とかなる。出力装置４０４は、ＣＰＵ４０１の制御によって送られてくるデータを表示装置や印刷装置に出力する。【００３７】
外部記憶装置４０５は、図４がデータ圧縮作業用コンピュータの構成である場合には、例えばハードディスク記憶装置であり、図４が携帯電話や組込機器等のコンピュータの構成である場合には、ＲＯＭメモリディスク装置やＲＡＭメモリディスク装置である。同装置４０５は、前述したプログラムや圧縮データ３０９、元データ３０１等の保存に用いられる。【００３８】
可搬記録媒体駆動装置４０６は、図４がデータ圧縮作業用コンピュータの構成である場合には、光ディスクやＣＤ、ＤＶＤ等の可搬記録媒体４０９、図４が携帯電話や組込機器等のコンピュータの構成である場合には、ＳＤＲＡＭ／マイクロＳＤＲＡＭ等の可搬記録媒体４０９を収容するもので、外部記憶装置４０５の補助の役割を有する。【００３９】
ネットワーク接続装置４０７は、図４がデータ圧縮作業用コンピュータの構成である場合には、例えばＬＡＮ（ローカルエリアネットワーク）又はＷＡＮ（ワイドエリアネットワーク）の通信回線を接続するための装置であり、図４が携帯電話や組込機器等のコンピュータの構成である場合には、携帯電話通信回線やＷＡＮの通信回線を接続するための装置である。【００４０】
本実施形態によるシステムは、図３（ａ）に示されるデータ圧縮機能を搭載した図５に示される動作フローチャートに対応するプログラム、又は図３（ｂ）に示されるデータ復元機能を搭載した図６に示される動作フローチャートに対応するプログラムを、ＣＰＵ４０１が実行することで実現される。そのプログラムは、例えば外部記憶装置４０５や可搬記録媒体４０９に記録して配布してもよく、或いはネットワーク接続装置４０７によりネットワークから取得できるようにしてもよい。【００４１】
上述のハードウェア構成によって実現され、図３（ａ）に示されるデータ圧縮機能を搭載したプログラム、及び図３（ｂ）に示されるデータ復元機能を搭載したプログラムの各動作について、図５及び図６の動作フローチャート、及び図７〜図９の動作説明図に沿って、以下に順次説明する。【００４２】
上述の実施形態の構成において、まず、図３（ａ）又は図５のデータ圧縮機能の実行時には、切替え判定部３０３が、繰返し検出部３０２によって求められる相対一致位置の値を判定することにより、切替え部３０４に、ワード繰返し符号生成部３０５とバイト繰返し符号生成部３０６を切替えてさせて、各生成部に符号化を行わせる。【００４３】
図２で説明したように、元データ３０１が命令コードとデータが混在したものである場合、命令コードの部分は例えば４バイトで１命令ワードが表され、その１命令ワードの単位で繰返しが見つかる可能性が高い。【００４４】
そこで、本実施形態では、図３の繰返し検出部３０２が、現在符号化を行っているデータ部分と同じデータ部分即ち繰返し部分を、過去分８キロバイトのデータ中から探索する。そして、繰返し検出部３０２が、命令ワード長Ｎの倍数の位置で繰返しを見つけたときには、ワード繰返し符号生成部３０５が、ワード繰返し符号を生成する。【００４５】
ワード繰返し符号生成部３０５は、図７の７０１として示されるように、命令ワード長Ｎの倍数位置の繰返し部分を、繰返しを示す値１を有する１ビットフラグと、相対一致位置と、一致長とからなるワード繰返し／繰返し符号７０１−１によって表現する。【００４６】
図５の動作フローチャートでは、ステップＳ５０１で命令ワード長Ｎ＝４がセットされた後（切替回数条件については後述する）、ステップＳ５０２−＞Ｓ５０３−＞Ｓ５０４−＞Ｓ５０５−＞Ｓ５０７−＞Ｓ５０２のループ処理になる。【００４７】
また、ワード繰返し符号生成部３０５は、ワード繰返しの探索中に、一致長が２バイトよりも小さいデータ部分を見つけたときには、その部分は非繰返し部分として、非繰返しを示す値０を有する１ビットフラグと、元データ３０１そのもの＝生データとかなるワード繰返し／非繰返し符号７０１−２によって表現する。【００４８】
図５の動作フローチャートでは、ステップＳ５０２−＞Ｓ５０３−＞Ｓ５０４−＞Ｓ５０７−＞Ｓ５０２のループ処理になる。
一方、図３の切替え判定部３０３が、繰返し検出部３０２における繰返しの検出動作において、過去分８キロバイトのデータ中から、命令ワード長Ｎの倍数位置以外の位置で繰返しを見つけたことを検知したときには、元データ３０１が命令コード部分からデータ部分に変化したと判定し、その検知結果に基づいて切替え部３０４が、ワード繰返し符号生成部３０５の動作からバイト繰返し符号生成部３０６の動作に切替えを行う。この結果、バイト繰返し符号生成部３０６が、バイト繰返し符号を生成する。【００４９】
このとき、切替え部３０４は、バイト繰返し符号生成部３０６による符号生成動作に先立って、ワード繰返し符号生成部３０５に、ワード繰返し／繰返し符号７０１−１と同じ符号フォーマットで、ワード繰返し／切替え符号７０１−３を出力させる。この切替え符号は、例えば、１ビットフラグ＝１、相対一致位置＝０、一致長＝０を有する特別な符号である。【００５０】
図５の動作フローチャートでは、ステップＳ５０４−＞Ｓ５０５−＞Ｓ５０６−＞Ｓ５０８の流れになる。
バイト繰返し符号生成部３０６は、図７の７０２として示されるように、命令ワード長Ｎの倍数位置以外の位置での繰返し部分を、繰返しを示す値１を有する１ビットフラグと、相対一致位置と、一致長とからなるバイト繰返し／繰返し符号７０２−１によって表現する。【００５１】
図５の動作フローチャートでは、ステップＳ５０８−＞Ｓ５０９の処理の後、Ｓ５１０−＞Ｓ５１１−＞Ｓ５１２−＞Ｓ５１３−＞Ｓ５１５−＞Ｓ５１９−＞Ｓ５１０のループ処理になる。【００５２】
また、バイト繰返し符号生成部３０６は、バイト繰返しの探索中に、一致長が２バイトよりも小さいデータ部分を見つけたときには、その部分は非繰返し部分として、非繰返しを示す値０を有する１ビットフラグと、元データ３０１の生データとかなるワード繰返し／非繰返し符号７０２−２によって表現する。【００５３】
図５の動作フローチャートでは、ステップＳ５１０−＞Ｓ５１１−＞Ｓ５１２−＞Ｓ５１９−＞Ｓ５１０のループ処理になる。
更に続いて、図３の切替え判定部３０３が、繰返し検出部３０２における繰返しの検出動作において、過去分８キロバイトのデータ中から、命令ワード長Ｎの倍数の位置で繰返しを見つけることができた状態が、切替え条件回数Ｔ回（例えば４回）続いたことを検知したときには、元データ３０１がデータ部分から再び命令コード部分に変化したと判定し、その検知結果に基づいて切替え部３０４が、バイト繰返し符号生成部３０６の動作からワード繰返し符号生成部３０５の動作に切替えを行う。この結果、ワード繰返し符号生成部３０５が、再びワード繰返し符号を生成する。【００５４】
なお、切替え条件回数Ｔ回を判定する理由は、データ部分であるにもかかわらず、たまたま命令ワード長Ｎの倍数の位置で繰返しが検出される場合がある。このため、Ｔの数字を適切に設定することで、この誤認識による切替え符号の増大を抑制することができる。【００５５】
図５の動作フローチャートでは、ステップＳ５０１とＳ５０９とＳ５１５の初期設定処理、及びステップＳ５１０−＞Ｓ５１１−＞Ｓ５１２−＞Ｓ５１３−＞Ｓ５１４−＞Ｓ５１６−＞Ｓ５１９−＞Ｓ５１０のループ処理の後、ステップＳ５１０−＞Ｓ５１１−＞Ｓ５１２−＞Ｓ５１３−＞Ｓ５１４−＞Ｓ５１６−＞Ｓ５１７の流れになる。【００５６】
このとき、切替え部３０４は、ワード繰返し符号生成部３０５による符号生成動作に先立って、バイト繰返し符号生成部３０６に、バイト繰返し／繰返し符号７０２−１と同じ符号フォーマットで、バイト繰返し／切替え符号７０２−３を出力させる。この切替え符号は、ワード繰返し符号からバイト繰返し符号への切替時の切替え符号と同様に、例えば、１ビットフラグ＝１、相対一致位置＝０、一致長＝０を有する符号である。【００５７】
図５の動作フローチャートでは、ステップＳ５１７−＞Ｓ５１８−＞Ｓ５０２の流れになる。
上述の実施形態の動作において、図７に示されるように、ワード繰返し／繰返し符号７０１−１及びバイト繰返し／繰返し符号７０２−１ともに、一致長は、例えば８バイトまでの一致を表現するために３ビットの符号で表現する。また、相対一致位置については、バイト繰返し／繰返し符号７０２−１では、従来のＬＺ７７方式と同様に、過去８キロバイト分の中の相対一致位置を表現するために１３ビット（２の１３乗＝８１９２バイト、８キロバイト）の符号で表現する。これに対して、ワード繰返し／繰返し符号７０１−１では、相対一致位置はかならず命令ワード長Ｎ、例えば４バイトの倍数位置となるため、過去８キロバイト分の中の相対一致位置を表現するために、４バイトよりも細かいバイト位置を表現するために必要な２ビット分を削減することができ、相対一致位置は１１ビットの符号で表現することができる。一般的には、ワード繰返し／繰返し符号７０１−１では、相対一致位置を表現するのに必要なビット数は、次式で求めることができる。
ｌｏｇ2 （探索過去データサイズ）−ｌｏｇ2 （命令ワード長）
従って、元データ３０１が命令コードとデータが混在するような性質のデータである場合には、本実施形態のデータ圧縮方式により、命令コード部分の繰返しの相対一致位置を表現するために必要なビット数を、従来よりも｛ｌｏｇ2 （命令ワード長）｝ビットだけ削減することが可能となる。また同時に、命令コードの繰返しに着目することにより、繰返しのヒット率も向上する。これらが、本発明に関連する大きな特徴である。【００５８】
なお、図７に示されるように、繰返しの一致長が２バイトよりも小さい場合のワード繰返し／非繰返し符号７０１−２及びバイト繰返し／非繰返し符号７０２−２については、ともに生データが元データ３０１と同じ８ビット（＝１バイト）で表現される。【００５９】
図８は、命令データエリアとデータエリアが混在する元データ３０１のバイト列の例に対して圧縮データ３０９の符号が生成される動作の説明図である。
初めて、ワード繰返し符号生成部３０５による動作からスタートし、元データ３０１として命令コードエリアが入力される。【００６０】
バイト番号の１〜６バイト目までは、過去データのワード繰返し部分がないため、ワード繰返し／非繰返し符号Ｃ１〜Ｃ６（図７の７０１−２に対応）として、元データ３０１の生データが出力される。なお、図７の１ビットフラグは省略されている。【００６１】
図５の動作フローチャートでは、ステップＳ５０２−＞Ｓ５０３−＞Ｓ５０４−＞Ｓ５０７−＞Ｓ５０２のループ処理になる。
次に、バイト番号７及び８バイト目の（００，１Ｃ）は、命令ワード長Ｎ＝４の倍数位置である４バイト前のバイト番号３及び４バイト目と一致する。そこで、ワード繰返し／繰返し符号Ｃ７（図７の７０１−１に対応）として、相対一致位置＝４、一致長＝２からなる符号が出力される。これを＜４，２＞と表記する。なお、図７の１ビットフラグは省略されている。【００６２】
続くバイト番号９及び１０バイト目の（Ｅ５，９Ｄ）は、命令ワード長Ｎ＝４の倍数位置である４バイト前のバイト番号５及び６バイト目と一致する。そこで、ワード繰返し／繰返し符号Ｃ８＝＜４，２＞が出力される。【００６３】
図５の動作フローチャートでは、ステップＳ５０２−＞Ｓ５０３−＞Ｓ５０４−＞Ｓ５０５−＞Ｓ５０７−＞Ｓ５０２のループ処理になる。
次のバイト番号１１及び１２バイト目は、ワード繰返し部分が検出できないため、ワード繰返し／非繰返し符号Ｃ９及びＣ１０として、元データ３０１の生データが出力される。【００６４】
図５の動作フローチャートでは、ステップＳ５０２−＞Ｓ５０３−＞Ｓ５０４−＞Ｓ５０７−＞Ｓ５０２のループ処理になる。
次のバイト番号１３〜１６バイト目の（Ｅ５，９Ｄ，００，１Ｃ）は、命令ワード長Ｎ＝４の倍数位置である８バイト前のバイト番号５〜８バイト目と一致する。そこで、ワード繰返し／繰返し符号Ｃ１１として、相対一致位置＝８、一致長＝４からなる符号＜８，４＞が出力される。【００６５】
図５の動作フローチャートでは、ステップＳ５０２−＞Ｓ５０３−＞Ｓ５０４−＞Ｓ５０５−＞Ｓ５０７−＞Ｓ５０２のループ処理になる。
次に、バイト番号１７及び１８バイト目の（９Ｄ，００）は、３バイト手前の１４及び１５バイト目と一致するが、これは命令ワード長Ｎ＝４の倍数位置ではない。【００６６】
そこで、切替え判定部３０３がバイト繰返し符号への切替えを判定し、これにより切替え部３０４がワード繰返し符号生成部３０５の動作からバイト繰返し符号生成部３０６の動作へ切替えを行う。【００６７】
このとき、切替え部３０４は、バイト繰返し符号生成部３０６による符号生成動作に先立って、ワード繰返し符号生成部３０５に、ワード繰返し／繰返し符号７０１−１と同じ符号フォーマットで、ワード繰返し／切替え符号Ｃ１２（図７の７０１−３に対応）として、相対一致位置＝０、一致長＝０を有する特別な符号＜０，０＞を出力させる。【００６８】
図５の動作フローチャートでは、ステップＳ５０４−＞Ｓ５０５−＞Ｓ５０６−＞Ｓ５０８の流れになる。
これに続いてバイト繰返し符号生成部３０６が動作を開始する。【００６９】
バイト番号１７及び１８バイト目の（９Ｄ，００）は、３バイト手前の１４及び１５バイト目と一致する。そこで、バイト繰返し／繰返し符号Ｃ１３（図７の７０２−１に対応）として、相対一致位置＝３、一致長＝２からなる符号が出力される。これを［３，２］と表記する。なお、図７の１ビットフラグは省略されている。【００７０】
図５の動作フローチャートでは、ステップＳ５０８の処理である。
続くバイト番号１９及び２０バイト目の（９Ｄ，１０）は、９バイト前のバイト番号１０及び１１バイト目と一致する。そこで、バイト繰返し／繰返し符号Ｃ１４＝［９，２］が出力される。【００７１】
図５の動作フローチャートでは、ステップＳ５０８−＞Ｓ５０９の処理の後、Ｓ５１０−＞Ｓ５１１−＞Ｓ５１２−＞Ｓ５１３−＞Ｓ５１５−＞Ｓ５１９−＞Ｓ５１０のループ処理になる。【００７２】
図９は、図８で説明した動作及び図７の符号フォーマットに基づいて実際に図３の符号出力部３０８から出力される圧縮データ３０９の符号の例を示す図である。
図７の符号フォーマットでは、ワード繰返し符号７０１及びバイト繰返し符号７０２ともに、先頭に１ビットフラグが付加されているが、図９の符号出力例では、先頭の１６ビット＝２バイトからなる符号Ｃ０に、Ｃ１〜Ｃ１６の１６符号分の１ビットフラグがまとめて格納される。そして、それに続いて、Ｃ１〜Ｃ１６の各符号が出力される。図９には図示していないが、１６個の符号が出力されると再び、その次の１６符号分の１ビットフラグがまとめて格納された１６ビット＝２バイトからなる符号が出力され、次の１６個の符号が出力される。【００７３】
１ビットフラグ群を格納した２バイトの符号Ｃ０に続いて、図８に示したワード繰返し／非繰返し符号Ｃ１とＣ２、図９には図示しないが符号Ｃ３〜Ｃ６（図８参照）、及び符号Ｃ９とＣ１０が、それぞれ８ビット＝１バイト幅で出力される。Ｃ１〜Ｃ６、Ｃ９、Ｃ１０の各８ビットには、元データ３０１の１〜６バイト目、及び１１及び１２バイト目の生データ（図８参照）が格納される。【００７４】
次に、符号Ｃ７、Ｃ８、及びＣ１１は、ワード繰返し／繰返し符号であるため、Ｃ７、Ｃ８、及びＣ１１の各相対一致位置４、４、及び８（図８参照）を命令ワード長Ｎ＝４で割って得られる値＝１、１、及び２が、各１１ビットのデータとして格納され、Ｃ７、Ｃ８、及びＣ１１の各一致長＝２、２、及び４（図８参照）が、３ビットのデータとして格納される。【００７５】
ただし、実際には、符号Ｃ７、Ｃ８、及びＣ１１は、相対一致位置１１ビット＋一致長３ビット＝１４ビットではなく、メモリアクセスのしやすさを考慮して、それぞれ１６ビット＝２バイトのデータとして処理される。このため、図９に示されるように、各符号には、２ビットずつの保留ビットが存在することになる。【００７６】
これらの２ビット×３＝６ビット分の保留ビットは、ワード繰返し／繰返し符号の４符号目Ｃ１２の相対一致位置を構成する１１ビットの一部として使用される。即ち、符号Ｃ１２を構成する８ビット＝１バイトのデータのうち、５ビットと上記６ビット分の保留ビットとを会わせた１１ビットによってＣ１２の相対一致位置が表現され、残りの３ビットでＣ１２の一致長が表現される。【００７７】
ここで、Ｃ１２は、図８に示されるように、ワード繰返し／切替え符号＜０，０＞を形成している。即ち、相対一致位置＝０、一致長＝０である。
符号Ｃ１３は、バイト繰返し／繰返し符号であるため、Ｃ１３の相対一致位置３（図８参照）が、１３ビットのデータとして格納され、Ｃ１３の一致長＝２（図８参照）が、３ビットのデータとして格納される。これにより、符号Ｃ１３は、１６ビット＝２バイトのデータを構成する。【００７８】
図９に示されるようにして図３（ａ）又は図５のデータ圧縮機能によって生成された圧縮データ３０９は、図３（ｂ）又は図６のデータ復元機能によって復元することができる。【００７９】
まず、図３（ｂ）の符号入力部３１０は、図９に示される圧縮データ３０９を、符号Ｃ０から順に入力し、ワード繰返し復号部３１３及びバイト繰返し復号部３１４にそれぞれ与える。【００８０】
始めにワード繰返し復号部３１３が動作し、符号入力部３１０から始めに入力した１６ビット＝２バイトからなる１ビットフラグ群符号Ｃ０において、１〜６ビット目が値０であることを認識することによって、符号Ｃ０に続いて入力する６バイト分が、それぞれワード繰返し／非繰返し符号Ｃ１〜Ｃ６の各８ビット＝１バイト（図９参照）であることを認識し、それぞれ各バイトに格納されている生データを元データ３０１として出力する。【００８１】
図６の動作フローチャートでは、ステップＳ６０１−＞Ｓ６０２−＞Ｓ６０３−＞Ｓ６０６−＞Ｓ６０１のループ処理になる。
出力された元データ３０１は、最新の８キロバイト（８１９２バイト）分がメモリに常に保持される。【００８２】
続いて、ワード繰返し復号部３１３は、符号入力部３１０から始めに入力した１ビットフラグ群符号Ｃ０において、７ビット目が値１であることを認識することによって、符号Ｃ６に続いて入力する１６ビット＝２バイトが、ワード繰返し／繰返し符号Ｃ７（図９参照）であることを認識し、その１６ビットに格納されているデータのうち、下位３ビットを一致長として抽出し、その次の下位１１ビットを相対一致位置として抽出し、残りの上位２ビットは後述する４符号目のワード繰返し／繰返し符号Ｃ１２の復号のために、特には図示しないレジスタ等に保持する。そして、ワード繰返し復号部３１３は、前述のメモリに保持されている最新の８キロバイト分のデータのうち、上記抽出した相対一致位置を命令ワード長Ｎ＝４倍して得られる実際の相対一致位置のデータから、上記抽出した一致長バイト分のデータを読み出して、それらを符号Ｃ７に対応する元データ３０１として出力する。【００８３】
図６の動作フローチャートでは、ステップＳ６０１−＞Ｓ６０２−＞Ｓ６０３−＞Ｓ６０４−＞Ｓ６０６−＞Ｓ６０１のループ処理になる。
ワード繰返し復号部３１３は、符号入力部３１０から始めに入力した１ビットフラグ群符号Ｃ０において、８ビット目が値１であることを認識することによって、符号Ｃ７に続いて入力する１６ビット＝２バイトが、ワード繰返し／繰返し符号Ｃ８（図９参照）であることを認識し、符号Ｃ７の場合と同様にして元データ３０１を復元して出力する。【００８４】
図６の動作フローチャートでは、ステップＳ６０１−＞Ｓ６０２−＞Ｓ６０３−＞Ｓ６０４−＞Ｓ６０６−＞Ｓ６０１のループ処理になる。
ワード繰返し復号部３１３は、符号入力部３１０から始めに入力した１ビットフラグ群符号Ｃ０において、９及び１０ビット目が値０であることを認識することによって、符号Ｃ８に続いて入力する２バイト分が、それぞれワード繰返し／非繰返し符号Ｃ９及びＣ１０の各８ビット＝１バイト（図９参照）であることを認識し、それぞれ各バイトに格納されている生データを元データ３０１として出力する。【００８５】
図６の動作フローチャートでは、ステップＳ６０１−＞Ｓ６０２−＞Ｓ６０３−＞Ｓ６０６−＞Ｓ６０１のループ処理になる。
ワード繰返し復号部３１３は、符号入力部３１０から始めに入力した１ビットフラグ群符号Ｃ０において、１１ビット目が値１であることを認識することによって、符号Ｃ１０に続いて入力する１６ビット＝２バイトが、ワード繰返し／繰返し符号Ｃ１１（図９参照）であることを認識し、符号Ｃ７の場合と同様にして元データ３０１を復元して出力する。【００８６】
図６の動作フローチャートでは、ステップＳ６０１−＞Ｓ６０２−＞Ｓ６０３−＞Ｓ６０４−＞Ｓ６０６−＞Ｓ６０１のループ処理になる。
ワード繰返し復号部３１３は、符号入力部３１０から始めに入力した１ビットフラグ群符号Ｃ０において、１２ビット目が値１であることを認識することによって、符号Ｃ１１に続いて入力する１バイト分が、ワード繰返し／繰返し符号Ｃ１２（図９参照）であることを認識する。この場合に、２バイト分ではなく１バイト分が入力されるのは、図９に示されるように、ワード繰返し／繰返し符号は、４符号に１符号は、直前の３符号によって生じる２ビット×３＝６ビットの保留ビットと会わせて、８ビット＝１バイトで符号化されるためである。この場合、ワード繰返し復号部３１３は、その８ビットに格納されているデータのうち、下位３ビットを一致長として抽出し、残りの上位５ビットと、直前の３符号の復号時にレジスタ等に保持してあった２ビット×３＝６ビットの保留ビットとを会わせた１１ビットを相対一致位置として検出する。【００８７】
図９の例では、ワード繰返し符号Ｃ１２は、相対一致位置＝０、一致長＝０のワード繰返し／切替え符号である。この状態が、図３（ｂ）の切替え符号検出部３１１によって検出され、切替え部３１２に通知される。【００８８】
この結果、切替え部３１２が、ワード繰返し復号部３１３からバイト繰返し復号部３１４に、復号動作を切り替える。
図６の動作フローチャートでは、ステップＳ６０１−＞Ｓ６０２−＞Ｓ６０３−＞Ｓ６０４−＞Ｓ６０５−＞Ｓ６０７の処理になる。【００８９】
バイト繰返し復号部３１４は、符号入力部３１０から始めに入力した１ビットフラグ群符号Ｃ０において、ワード繰返し復号部３１３から引き継がれた１３ビット目が値１であることを認識することによって、符号Ｃ１２に続いて入力する１６ビット＝２バイトが、バイト繰返し／繰返し符号Ｃ１３（図９参照）であることを認識し、その１６ビットに格納されているデータのうち、下位３ビットを一致長として抽出し、残りの上位１３ビットを相対一致位置として抽出する。そして、バイト繰返し復号部３１４は、前述のメモリに保持されている最新の８キロバイト分のデータのうち、上記抽出した相対一致位置のデータから、上記抽出した一致長バイト分のデータを読み出して、それらを符号Ｃ１３に対応する元データ３０１として出力する。【００９０】
図６の動作フローチャートでは、ステップＳ６０７の処理の後、Ｓ６０８−＞Ｓ６０９−＞Ｓ６１０−＞Ｓ６１１−＞Ｓ６１４−＞Ｓ６０８のループ処理になる。
図９には特には図示されていないが、バイト繰返し復号部３１４は、符号入力部３１０から入力した１ビットフラグ群符号において、値０であることを認識した１ビットフラグについては、それに対応して入力する８ビット＝１バイトのデータがバイト繰返し／非繰返し符号であることを認識し、その１バイトに格納されている生データを元データ３０１として出力する。【００９１】
図６の動作フローチャートでは、Ｓ６０８−＞Ｓ６０９−＞Ｓ６１０−＞Ｓ６１４−＞Ｓ６０８のループ処理になる。
また、バイト繰返し復号部３１４は、復号したバイト繰返し／繰返し符号から抽出された相対一致位置と一致長がそれぞれ値０である場合には、図３（ｂ）の切替え符号検出部３１１によって、その符号がバイト繰返し／切替え符号（図７の７０２−３に対応）であると検出され、切替え部３１２に通知される。【００９２】
この結果、切替え部３１２が、バイト繰返し復号部３１４からワード繰返し復号部３１３に、復号動作を切り替える。
図６の動作フローチャートでは、Ｓ６０８−＞Ｓ６０９−＞Ｓ６１０−＞Ｓ６１１−＞Ｓ６１２−＞Ｓ６１３−＞Ｓ６０１の処理になる。【００９３】
ワード繰返し復号部３１３及びバイト繰返し復号部３１４は、１６個分の符号を処理したら、次に符号入力部３１０から入力した１６ビット＝２バイトのデータを、図９の符号Ｃ０と同様の１ビットフラグ群符号として処理し、その次に入力する１６個分の符号の処理のために前述の符号Ｃ０の場合と同様の処理を行う。【００９４】
従って、元データ３０１が命令コードとデータが混在するような性質のデータである場合には、本実施形態のデータ圧縮方式により、命令コード部分の繰返しの相対一致位置を表現するために必要なビット数を、従来よりも｛ｌｏｇ2 （命令ワード長）｝ビットだけ削減することが可能となる。これらが、本発明に関連する大きな特徴である。【００９５】
以上説明した実施形態では、符号化にあたって、相対一致位置や一致長及び生データ等をそのままビット表現しているが、これらをハフマン符号や算術符号で符号化してもよい。【００９６】
以上の実施形態により、元データが命令コードとデータが混在するような性質のデータである場合に、本実施形態のデータ圧縮方式により命令ワード長の倍数位置で符号化を行うことにより、命令コード部分の繰返しの相対一致位置を表現するために必要なビット数を、従来よりも｛ｌｏｇ2 （命令ワード長）｝ビットだけ削減することが可能となる。【００９７】
また、切替え符号を利用することで、復元時の処理負荷をあげることなく、圧縮率改善を得ることが可能となる。
【図１】
2009095956.tif 000003
【図２】
2009095956.tif 000004
【図３】
2009095956.tif 000005
【図４】
2009095956.tif 000006
【図５】
2009095956.tif 000007
【図６】
2009095956.tif 000008
【図７】
2009095956.tif 000009
【図８】
2009095956.tif 000010
【図９】
2009095956.tif 000011
【国際調査報告】
2009095956.tif 000012
2009095956.tif 000013