(57)【要約】【課題】  メモリを効率よく使用するデータ圧縮装置を提供する。【解決手段】  データの圧縮を行うデータ圧縮手段と、データ圧縮後のデータを記憶するメモリと、データ圧縮手段の出力をディスクリプタテーブルを参照してメモリに対してＤＭＡ転送するスキャッタ・ギャザ機能を有するＤＭＡ転送手段とを備えたデータ圧縮装置であって、圧縮前のデータのデータサイズを取得するサイズ取得手段と、データサイズと所望の圧縮率とに基づいて、圧縮後のデータを記憶する記憶領域をメモリ上において確保するデータ領域確保手段と、ＤＭＡ転送を行う場合の転送サイズと同サイズの補償記憶領域をメモリ上において確保する補償領域確保手段と、データ領域確保手段が確保した記憶領域を越えるデータを転送する場合は、補償記憶領域に対して繰り返し転送されるようにディスクリプタテーブルを生成するテーブル生成手段とを備える。【選択図】    図１
2006186480.tif 000002
【特許請求の範囲】
【請求項１】
圧縮前のデータを入力してデータ圧縮を行い圧縮後のデータを出力するデータ圧縮手段と、前記データ圧縮後のデータを記憶するメモリと、前記データ圧縮手段の出力をディスクリプタテーブルを参照して前記メモリに対してＤＭＡ転送するスキャッタ・ギャザ機能を有するＤＭＡ転送手段とを備えたデータ圧縮装置であって、
前記圧縮前のデータのデータサイズを取得するサイズ取得手段と、
前記データサイズと所望の圧縮率とに基づいて、圧縮後のデータを記憶する記憶領域を前記メモリ上において確保するデータ領域確保手段と、
前記ＤＭＡ転送を行う場合の転送サイズと同サイズの補償記憶領域を前記メモリ上において確保する補償領域確保手段と、
前記データ領域確保手段が確保した記憶領域を越えるデータを転送する場合は、前記補償記憶領域に対して繰り返し転送されるように前記ディスクリプタテーブルを生成するテーブル生成手段と
を備えたことを特徴とするデータ圧縮装置。
【請求項２】
前記補償領域確保手段が確保した前記補償記憶領域に対して、所定のデータを書き込むことにより初期化する初期化手段と、
前記データ圧縮手段によりデータ圧縮が終了したときに、前記補償記憶領域に書き込まれているデータが前記初期化手段によって書き込まれたデータと一致するか否かに基づいて前記所望の圧縮率が達成されたか否かを検出する検出手段と
を備えたことを特徴とする請求項１に記載のデータ圧縮装置。
【請求項３】
圧縮前のデータを入力してデータ圧縮を行い圧縮後のデータを出力するデータ圧縮手段と、前記データ圧縮後のデータを記憶するメモリと、前記データ圧縮手段の出力をディスクリプタテーブルを参照して前記メモリに対してＤＭＡ転送するスキャッタ・ギャザ機能を有するＤＭＡ転送手段とを備えたデータ圧縮装置上で動作するデータ圧縮プログラムであって、
前記圧縮前のデータのデータサイズを取得するサイズ取得処理と、
前記データサイズと所望の圧縮率とに基づいて、圧縮後のデータを記憶する記憶領域を前記メモリ上において確保するデータ領域確保処理と、
前記ＤＭＡ転送を行う場合の転送サイズと同サイズの補償記憶領域を前記メモリ上において確保する補償領域確保処理と、
前記データ領域確保処理により確保した記憶領域を越えるデータを転送する場合に、前記補償記憶領域に対して繰り返し転送されるように前記ディスクリプタテーブルを生成するテーブル生成処理と
をコンピュータに行わせることを特徴とするデータ圧縮プログラム。
【請求項４】
前記補償領域確保処理により確保した前記補償記憶領域に対して、所定のデータを書き込むことにより初期化する初期化処理と、
前記データ圧縮手段によりデータ圧縮が終了したときに、前記補償記憶領域に書き込まれているデータが前記初期化処理によって書き込まれたデータと一致するか否かに基づいて前記所望の圧縮率が達成されたか否かを検出する検出処理と
をコンピュータに行わせることを特徴とする請求項３に記載のデータ圧縮プログラム。
【発明の詳細な説明】
【技術分野】
【０００１】
本発明は、ＤＭＡ（Direct Memory Access）転送によって圧縮データをメモリに格納するデータ圧縮装置及びデータ圧縮プログラムに関する。
【背景技術】
【０００２】
従来から印刷等を行う画像形成装置内のメモリ使用量を削減するなどの理由から、画像等のデータを圧縮して保存しておき、必要が生じた時に元のデータへと伸張して使用するシステムにおいて、圧縮／伸張装置とメモリ間のデータ読み書きにＤＭＡ方式を用いたものが知られている（例えば、特許文献１参照）。ＤＭＡ転送はＣＰＵを介さずに圧縮／伸張装置とＲＡＭの間で直接データ転送を行う方式である。このＤＭＡ転送を用いる場合、各装置（ハードウェア）は物理アドレスを使用して、連続した記憶領域に対して、データの読み書きを行う必要がある。従って、メモリ・リソースが不十分なシステムなどのように大きな連続したメモリ領域が確保できない場合、転送するブロックごとに「仕切り直し」を強いられるため、コマンドオーバーヘッドが転送速度を著しく低下させてしまうことになる。このような問題を解決するために、飛び飛びのアドレスに対して連続したデータを転送することができるスキャッタ・ギャザ（Scatter-Gather）機能が使用されている。スキャッタ・ギャザ機能は、スキャッタ・ギャザ・ディスクリプタテーブルを連鎖的に参照することでメモリ空間内に散在している転送対象領域を連続領域のように取り扱うことが可能になるものである。このスキャッタ・ギャザ機能を使用して、ＤＭＡ方式によるデータ転送を行えば、転送速度を低下させることなくデータ圧縮／伸張処理を実行することができる。
【特許文献１】特開２０００−３１８２２９号公報
【発明の開示】
【発明が解決しようとする課題】
【０００３】
ところで、圧縮したデータを伸張する場合に、圧縮前のデータに完全一致するように復元することが可能な可逆型の圧縮アルゴリズム（例えばＡＬＤＣ、ＪＢＩＧ等）においては、論理的ワーストケースとして圧縮率が１００％を超える可能性がある。一般的には圧縮率が１００％を超えた場合、圧縮する必要がないため、圧縮前のデータを使用する方が合理的である。
しかしながら、データ圧縮の圧縮率は、実際にデータ圧縮処理を実行した後に分かる値であるため、圧縮実行前にワーストケースを見越して、使用する可能性のない圧縮後のデータを記憶する領域を確保しておかなければならず、メモリの使用効率が悪いという問題がある。特に、画像形成装置のように、複数の印刷ジョブを同時に処理する場合などは、１つのジョブで占有する記憶領域が小さい方が、ジョブ実行効率は良く、実行時間も短縮することができる。
【０００４】
本発明は、このような事情に鑑みてなされたもので、使用する可能性のないデータを記憶する領域を確保せずにデータ圧縮処理を行うことができるデータ圧縮装置及びデータ圧縮プログラムを提供することを目的とする。
【課題を解決するための手段】
【０００５】
本発明は、圧縮前のデータを入力してデータ圧縮を行い圧縮後のデータを出力するデータ圧縮手段と、前記データ圧縮後のデータを記憶するメモリと、前記データ圧縮手段の出力をディスクリプタテーブルを参照して前記メモリに対してＤＭＡ転送するスキャッタ・ギャザ機能を有するＤＭＡ転送手段とを備えたデータ圧縮装置であって、前記圧縮前のデータのデータサイズを取得するサイズ取得手段と、前記データサイズと所望の圧縮率とに基づいて、圧縮後のデータを記憶する記憶領域を前記メモリ上において確保するデータ領域確保手段と、前記ＤＭＡ転送を行う場合の転送サイズと同サイズの補償記憶領域を前記メモリ上において確保する補償領域確保手段と、前記データ領域確保手段が確保した記憶領域を越えるデータを転送する場合は、前記補償記憶領域に対して繰り返し転送されるように前記ディスクリプタテーブルを生成するテーブル生成手段とを備えたことを特徴とする。
【０００６】
本発明は、前記補償領域確保手段が確保した前記補償記憶領域に対して、所定のデータを書き込むことにより初期化する初期化手段と、前記データ圧縮手段によりデータ圧縮が終了したときに、前記補償記憶領域に書き込まれているデータが前記初期化手段によって書き込まれたデータと一致するか否かに基づいて前記所望の圧縮率が達成されたか否かを検出する検出手段とを備えたことを特徴とする。
【０００７】
本発明は、圧縮前のデータを入力してデータ圧縮を行い圧縮後のデータを出力するデータ圧縮手段と、前記データ圧縮後のデータを記憶するメモリと、前記データ圧縮手段の出力をディスクリプタテーブルを参照して前記メモリに対してＤＭＡ転送するスキャッタ・ギャザ機能を有するＤＭＡ転送手段とを備えたデータ圧縮装置上で動作するデータ圧縮プログラムであって、前記圧縮前のデータのデータサイズを取得するサイズ取得処理と、前記データサイズと所望の圧縮率とに基づいて、圧縮後のデータを記憶する記憶領域を前記メモリ上において確保するデータ領域確保処理と、前記ＤＭＡ転送を行う場合の転送サイズと同サイズの補償記憶領域を前記メモリ上において確保する補償領域確保処理と、前記データ領域確保処理により確保した記憶領域を越えるデータを転送する場合に、前記補償記憶領域に対して繰り返し転送されるように前記ディスクリプタテーブルを生成するテーブル生成処理とをコンピュータに行わせることを特徴とする。
【０００８】
本発明は、前記補償領域確保処理により確保した前記補償記憶領域に対して、所定のデータを書き込むことにより初期化する初期化処理と、前記データ圧縮手段によりデータ圧縮が終了したときに、前記補償記憶領域に書き込まれているデータが前記初期化処理によって書き込まれたデータと一致するか否かに基づいて前記所望の圧縮率が達成されたか否かを検出する検出処理とをコンピュータに行わせることを特徴とする。
【発明の効果】
【０００９】
本発明によれば、圧縮時に必要となる実効性のないメモリ領域を確保することなくデータ圧縮処理を行うことが可能になるため、メモリの使用効率を向上させることができるという効果が得られる。また、所望の圧縮率を超えたことを簡単な方法で検出することが可能になるという効果が得られる。
【発明を実施するための最良の形態】
【００１０】
以下、本発明の一実施形態によるデータ圧縮装置を図面を参照して説明する。図１は同実施形態の構成を示すブロック図である。この図において、符号１は、メモリとの間でＤＭＡ転送を実行するＤＭＡ転送部である。符号２は、データを記憶するメモリであり、ＤＭＡ転送部１がデータの読み書きを行う。符号３は、画像などのデータを圧縮する処理を実行するデータ圧縮部であり、メモリ２上のソースデータ記憶領域２１に記憶されているデータを読み出してデータ圧縮処理を実行する。このデータ圧縮部３は、圧縮後に復元したデータが圧縮前のデータと完全に一致する可逆型のデータ圧縮を行うものである。符号４は、スキャッタ・ギャザ機能を実現するために参照されるディスクリプタテーブルである。符号５は、ディスクリプタテーブル４を生成するテーブル生成部である。
【００１１】
符号６は、所望の圧縮率を記憶する圧縮率記憶部である。符号７は、圧縮対象のデータ（圧縮前の元データであり、ソースデータという）のサイズを取得するデータサイズ取得部である。符号８は、データ圧縮部３の出力データ（圧縮後のデータ）を格納する圧縮データ記憶領域２２をメモリ２上に確保するデータ記憶領域確保処理部である。符号９は、データ圧縮処理において所望の圧縮率を超えた場合に、圧縮率を超えた分のデータを記憶する補償記憶領域２３をメモリ２上に確保する補償記憶領域確保処理部である。符号１０は、データ圧縮処理において所望の圧縮率を超えたか否かを検出し、超えた場合に超過検出信号を出力する検出部である。
【００１２】
ここで、図４を参照して、圧縮率、ソースデータ及び圧縮後のデータについて説明する。以下の説明においては、圧縮率を百分率で表現する。圧縮率７５％とは、圧縮前のデータのサイズを１とした場合、圧縮後のデータのサイズが０．７５倍になることを意味し、圧縮率１２０％の場合は、圧縮後のデータサイズが１．２倍になることを意味する。圧縮率記憶部６には、予め所望の圧縮率が記憶されており、ここでは７５％であるものとして説明する。ここでいう所望の圧縮率とは、要求する圧縮率の最大値であり、この所望の圧縮率を超えてしまった圧縮データは使用せずに、破棄するための値である。したがって、破棄せずに使用する圧縮データの圧縮率は、７５％以下の圧縮率が得られた場合のみとなる。図４に示すように、ソースデータは、メモリ２上のソースデータ記憶領域２１に記憶されているが、スキャッタ・ギャザ機能により、いくつかのブロックデータ毎に分割されて記憶される場合がある。このソースデータをデータ圧縮部３によりデータ圧縮を行い、７５％の圧縮率が得られた場合、圧縮後のデータとして、３つのブロックデータ（データ１、データ２、データ３）が得られることになる。これら３つのデータについてもスキャッタ・ギャザ機能により、ブロックデータ毎に分割されて、圧縮データ記憶領域２２に記憶される場合がある。
【００１３】
次に、図２、図３を参照して、図１に示す装置の動作を説明する。図２は、図１に示す装置がデータ圧縮を行う動作を示すフローチャートである。図３は、図１に示すディスクリプタテーブル４の一例を示す説明図である。まず、テーブル生成部５は、データサイズ取得部７に対して、ソースデータのサイズを要求する。これを受けて、データサイズ取得部７は、ディスクリプタテーブル４を参照して、ソースデータ記憶領域２１に記憶されているソースデータのサイズを求める。図３に示すように、３つのブロックからなるソースデータ記憶領域２１のディスクリプタテーブル４１は、３つのブロックデータを関連つけるディスクリプタテーブルが定義されている。各テーブルは、記憶領域の先頭アドレス４１１と、このブロックの記憶領域のサイズ４１２と、次のブロックのテーブルを示す識別名４１３とからなる。ソースデータ記憶領域２１のサイズは、３つのテーブルの記憶領域サイズ４１２、４１４、４１５の値（０ｘ２０００，０ｘ１０００、０ｘ１０００）を加算することにより求めることができる。データサイズ取得部７は、求めたソースデータサイズをテーブル生成部５へ回答する。これにより、テーブル生成部５は、ソースデータのサイズを取得したことになる（ステップＳ１）。続いて、テーブル生成部５は、圧縮率記憶部６から所望の圧縮率を読み出すことにより、所望の圧縮率を取得する（ステップＳ２）。
【００１４】
次に、テーブル生成部５は、ソースデータのサイズと所望の圧縮率を乗算して、圧縮後のデータを記憶する圧縮データ記憶領域２２のサイズを求め、この圧縮データ記憶領域２２のサイズをデータ記憶領域確保処理部８へ通知し、データ記憶領域確保の要求を行う。これを受けて、データ記憶領域確保処理部８は、ディスクリプタテーブル４を参照して、要求されたデータ記憶領域を確保する（ステップＳ３）。そして、データ記憶領域確保処理部８は、確保した圧縮データ記憶領域２２のアドレス情報をテーブル生成部５に対して通知する。
【００１５】
次に、テーブル生成部５は、補償記憶領域確保処理部９に対して、補償記憶領域確保の要求を行う。これを受けて、補償記憶領域確保処理部９は、ＤＭＡ転送部１から転送サイズを取得する（ステップＳ４）。そして、補償記憶領域確保処理部９は、ディスクリプタテーブル４を参照して、転送サイズと同じサイズの補償記憶領域を確保し（ステップＳ５）、確保した補償記憶領域２３に特定コード（例えば、所定のビットパターンを有するデータ）を書き込む（ステップＳ６）。続いて、補償記憶領域確保処理部９は、確保した補償記憶領域２３のアドレス情報をテーブル生成部５に対して通知する。
【００１６】
次に、テーブル生成部５は、データ圧縮部３の圧縮率の理論的最悪値を取得する（ステップＳ７）。この理論的最悪値とは、データ圧縮部３が用いる圧縮アルゴリズムでデータを圧縮した場合に得られる可能性があるデータ圧縮率の最悪値のことであり、予めデータ圧縮装置内部に設定されている値である。ここでは、このデータ圧縮率の最悪値を１２０％として説明する。
【００１７】
次に、テーブル生成部５は、圧縮後のデータが圧縮データ記憶領域２２と補償記憶領域２３へ転送されるようにディスクリプタテーブル４を生成する（ステップＳ８）。データ書き込み用のディスクリプタテーブル４２の生成は、まず、ソースデータのサイズと所望の圧縮率から求められる圧縮データ記憶領域２２を構成するブロックを関連つけるテーブル４２１、４２２が定義される。このテーブルを定義する際に使用する先頭アドレス（０ｘ００００Ｅ０００，０ｘ０００１２０００）は、データ記憶領域確保処理部８から通知されたアドレスである。そして、テーブル生成部５は、所望の圧縮率を超えたデータを記憶するための補償記憶領域２３を関連つけるテーブル４２３、４２４、４２５を定義する。このとき、各テーブル４２３、４２４、４２５の先頭アドレスは、補償記憶領域確保処理部９から通知されたアドレス（０ｘ０００２２０００）であり、各テーブルの先頭アドレスが同一になるように定義する。そして、補償記憶領域を関連つけるテーブルの数は、ソースデータサイズをＳ、所望圧縮率をＲ１、理論的最悪値の圧縮率をＲ２、ＤＭＡ転送サイズをＴ、テーブルの数をＮとすると、Ｎ＝（Ｒ２−Ｒ１）×Ｓ／Ｔ（ただし、小数点以下は切り上げ）によって求める。これにより、補償記憶領域２３を定義するＮ個のディスクリプタテーブル４２３、４２４、４２５が生成される。
【００１８】
次に、データ圧縮部３は、ソースデータ記憶領域２１に記憶されているソースデータをＤＭＡ転送部１により読み出し、データ圧縮処理を実行し、圧縮後のデータをＤＭＡ転送部１によってメモリ２上の圧縮データ記憶領域２２及び補償記憶領域２３へ書き込みを行う（ステップＳ９）。このとき、ＤＭＡ転送部１は、ディスクリプタテーブル４内のデータ書き込み用のディスクリプタテーブル４２を参照して、データ転送が行うため、所望の圧縮率（７５％）以下であれば、圧縮データ記憶領域２２に書き込まれることになる。一方、圧縮率が７５％を超え、理論的な最悪値（１２０％）までのデータは、データ転送毎に同一アドレスの記憶領域（補償記憶領域２３）に繰り返し書き込まれることになる。
【００１９】
データ圧縮部３は、データ圧縮処理が終了した時点で、処理終了通知を検出部１０へ出力する。これを受けて、検出部１０は、ＤＭＡ転送部１を介して補償記憶領域２３の内容を読み出して、書き込まれている内容を検査する（ステップＳ１０）。この検査の結果、補償記憶領域２３に書き込まれていた内容が、先に書き込んでおいた特定コードと一致するか否かを判定する（ステップＳ１１）。そして、一致していなければ、補償記憶領域２３への書き込みが行われたことになるため、所望の圧縮率を超えたことを示す超過検出信号を出力する。一方、特定コードと一致していれば、所望の圧縮率内のデータ圧縮が実行されたことになるため、超過検出信号は出力しない。
【００２０】
このように、所望の圧縮率を超えるデータは、補償記憶領域２３へ繰り返し書き込むようにしたため、圧縮実行前にワーストケースを見越して、使用する可能性のない圧縮後のデータを記憶する領域を確保する必要がなくなり、メモリの使用効率を向上させることができる。また、補償記憶領域２３へ書き込みが行われたか否かに基づいて、所望の圧縮率を超えた否かを判定するようにしたため、簡単な処理で圧縮率の判定を行うことが可能となる。
【００２１】
なお、図１における処理部の機能を実現するためのプログラムをコンピュータ読み取り可能な記録媒体に記録して、この記録媒体に記録されたプログラムをコンピュータシステムに読み込ませ、実行することによりデータ圧縮処理を行ってもよい。なお、ここでいう「コンピュータシステム」とは、ＯＳや周辺機器等のハードウェアを含むものとする。また、「コンピュータシステム」は、ホームページ提供環境（あるいは表示環境）を備えたＷＷＷシステムも含むものとする。また、「コンピュータ読み取り可能な記録媒体」とは、フレキシブルディスク、光磁気ディスク、ＲＯＭ、ＣＤ−ＲＯＭ等の可搬媒体、コンピュータシステムに内蔵されるハードディスク等の記憶装置のことをいう。さらに「コンピュータ読み取り可能な記録媒体」とは、インターネット等のネットワークや電話回線等の通信回線を介してプログラムが送信された場合のサーバやクライアントとなるコンピュータシステム内部の揮発性メモリ（ＲＡＭ）のように、一定時間プログラムを保持しているものも含むものとする。
【００２２】
また、上記プログラムは、このプログラムを記憶装置等に格納したコンピュータシステムから、伝送媒体を介して、あるいは、伝送媒体中の伝送波により他のコンピュータシステムに伝送されてもよい。ここで、プログラムを伝送する「伝送媒体」は、インターネット等のネットワーク（通信網）や電話回線等の通信回線（通信線）のように情報を伝送する機能を有する媒体のことをいう。また、上記プログラムは、前述した機能の一部を実現するためのものであっても良い。さらに、前述した機能をコンピュータシステムにすでに記録されているプログラムとの組み合わせで実現できるもの、いわゆる差分ファイル（差分プログラム）であっても良い。
【図面の簡単な説明】
【００２３】
【図１】本発明の一実施形態の構成を示すブロック図である。
【図２】図１に示す装置の動作を示すフローチャートである。
【図３】図１に示すディスクリプタテーブル４の一例を示す説明図である。
【図４】圧縮前のデータと圧縮後のデータの一例を示す説明図である。
【符号の説明】
【００２４】
１・・・ＤＭＡ転送部、２・・・メモリ、２１・・・ソースデータ記憶領域、２２・・・圧縮データ記憶領域、２３・・・補償記憶領域、３・・・データ圧縮部、４・・・ディスクリプタテーブル、５・・・テーブル生成部、６・・・圧縮率記憶部、７・・・データサイズ取得部、８・・・データ記憶領域確保処理部、９・・・補償記憶領域確保処理部、１０・・・検出部
【図１】
2006186480.tif 000003
【図２】
2006186480.tif 000004
【図３】
2006186480.tif 000005
【図４】
2006186480.tif 000006