(57)【要約】【課題】圧縮データのブロック単位でのランダムアクセスを可能にし、圧縮率を低く抑えながら、エラーを小さくすることができるデータ格納方法を提供する。【解決手段】データ格納方法は、ブロックデータを圧縮した圧縮ブロックデータを取得し、圧縮ブロックデータの圧縮ブロックサイズが期待圧縮ブロックサイズを超えているか否かを判定する。判定の結果、期待圧縮ブロックサイズを超えていないと判定された場合、期待圧縮ブロックサイズを超えていないことを示すフラグ情報と、圧縮ブロックデータとを圧縮ブロックに格納し、期待圧縮ブロックサイズを超えていると判定された場合、期待圧縮ブロックサイズを超えていることを示すフラグ情報と、期待圧縮ブロックサイズを超えた圧縮ブロックデータを格納するための圧縮ブロックの場所を指定するポインタ情報と、圧縮ブロックデータとを圧縮ブロックに格納する。【選択図】図４
2010287114.tif 000002
【特許請求の範囲】
【請求項１】
ブロックデータを圧縮した圧縮ブロックデータを取得し、
前記圧縮ブロックデータの圧縮ブロックサイズが期待圧縮ブロックサイズを超えているか否かを判定し、
判定の結果、前記圧縮ブロックサイズが前記期待圧縮ブロックサイズを超えていないと判定された場合、前記圧縮ブロックサイズが前記期待圧縮ブロックサイズを超えていないことを示す第１の情報と、前記圧縮ブロックデータとを圧縮ブロックに格納し、前記圧縮ブロックサイズが前記期待圧縮ブロックサイズを超えていると判定された場合、前記圧縮ブロックサイズが前記期待圧縮ブロックサイズを超えていることを示す第２の情報と、前記期待圧縮ブロックサイズを超えた前記圧縮ブロックデータを格納するための圧縮ブロックの場所を指定するポインタ情報と、前記圧縮ブロックデータとを前記圧縮ブロックに格納することを特徴とするデータ格納方法。
【請求項２】
ブロックデータを圧縮した圧縮ブロックデータを取得する圧縮部と、
前記圧縮ブロックデータの圧縮ブロックサイズが期待圧縮ブロックサイズを超えているか否かを判定する判定部と、
前記判定部による判定の結果、前記圧縮ブロックサイズが前記期待圧縮ブロックサイズを超えていないと判定された場合、前記圧縮ブロックサイズが前記期待圧縮ブロックサイズを超えていないことを示す第１の情報と、前記圧縮ブロックデータとを圧縮ブロックに格納し、前記圧縮ブロックサイズが前記期待圧縮ブロックサイズを超えていると判定された場合、前記圧縮ブロックサイズが前記期待圧縮ブロックサイズを超えていることを示す第２の情報と、前記期待圧縮ブロックサイズを超えた前記圧縮ブロックデータを格納するための圧縮ブロックの場所を指定するポインタ情報と、前記圧縮ブロックデータとを前記圧縮ブロックに格納するデータ格納部と、
を有することを特徴とするデータ格納装置。
【請求項３】
バスマスタからのアクセス要求に従って、記憶装置へのブロックデータの書き込みまたは前記記憶装置からの前記ブロックデータの読み出しの制御を行うメモリコントローラに、
前記書き込みにかかる前記ブロックデータを圧縮した圧縮ブロックデータを取得する圧縮部と、
前記圧縮ブロックデータの圧縮ブロックサイズが期待圧縮ブロックサイズを超えているか否かを判定する判定部と、
前記判定部による判定の結果、前記圧縮ブロックサイズが前記期待圧縮ブロックサイズを超えていないと判定された場合、前記圧縮ブロックサイズが前記期待圧縮ブロックサイズを超えていないことを示す第１の情報と、前記圧縮ブロックデータとを前記記憶装置の圧縮ブロックに格納し、前記圧縮ブロックサイズが前記期待圧縮ブロックサイズを超えていると判定された場合、前記圧縮ブロックサイズが前記期待圧縮ブロックサイズを超えていることを示す第２の情報と、前記期待圧縮ブロックサイズを超えた前記圧縮ブロックデータを格納するための圧縮ブロックの場所を指定するポインタ情報と、前記圧縮ブロックデータとを前記記憶装置の前記圧縮ブロックに格納するデータ格納部と、
を有することを特徴とするデータ格納装置。
【請求項４】
記憶装置からキャッシュメモリへのブロックデータの読み込みまたは前記キャッシュメモリから前記記憶装置への前記ブロックデータの書き込みの制御を行うキャッシュコントローラに、
前記キャッシュメモリからの前記ブロックデータを圧縮した圧縮ブロックデータを取得する圧縮部と、
前記圧縮ブロックデータの圧縮ブロックサイズが期待圧縮ブロックサイズを超えているか否かを判定する判定部と、
前記判定部による判定の結果、前記圧縮ブロックサイズが前記期待圧縮ブロックサイズを超えていないと判定された場合、前記圧縮ブロックサイズが前記期待圧縮ブロックサイズを超えていないことを示す第１の情報と、前記圧縮ブロックデータとを前記記憶装置の圧縮ブロックに格納し、前記圧縮ブロックサイズが前記期待圧縮ブロックサイズを超えていると判定された場合、前記圧縮ブロックサイズが前記期待圧縮ブロックサイズを超えていることを示す第２の情報と、前記期待圧縮ブロックサイズを超えた前記圧縮ブロックデータを格納するための圧縮ブロックの場所を指定するポインタ情報と、前記圧縮ブロックデータとを前記記憶装置の前記圧縮ブロックに格納するデータ格納部と、
を有することを特徴とするデータ格納装置。
【請求項５】
前記判定部により前記ブロックサイズが前記期待圧縮ブロックサイズを超えていると判定され、前記圧縮ブロックデータが複数の圧縮ブロックに格納された場合、前記複数の圧縮ブロックにうち１番目に読み出される前記圧縮ブロックに格納された前記圧縮ブロックデータのみを伸長し、前記ブロックデータに復元する伸長部を有することを特徴とする請求項２から４のいずれか１項に記載のデータ格納装置。
【発明の詳細な説明】
【技術分野】
【０００１】
本発明は、データ格納方法及びデータ格納装置に関し、特に、ブロックデータの圧縮及び伸長を行うデータ格納方法及びデータ格納装置に関する。
【背景技術】
【０００２】
近年、データ処理装置が扱うデータ量の増大に伴い、メインメモリあるいはデータストレージの容量が増大している。この容量及び転送バンド幅を削減するために、圧縮によりデータ量を削減することが望ましい。データ圧縮には、伸長操作により圧縮データが完全に元のデータに復元できる可逆圧縮と、圧縮データが完全に元のデータに復元できない非可逆圧縮とがある。非可逆圧縮方式では、データと圧縮率との双方に依存して、データを復元した際の元データとの差が変化する。ここでは、データを復元した際の元データとの差をエラーと呼ぶ。データが画像データである場合は、このエラーが画質の低下になる。どの程度のエラー、即ち、画質の低下が許容できるかは、設計仕様により決まる。以下では画像データを例に説明するが、特に、画像データに限定するものではなく、他のデータ、例えば、音声データ等であってもよい。
【０００３】
ブロック圧縮は、非圧縮データを固定サイズのブロックに分け、各ブロックを独立に即ち、他のブロックの影響を受けずに圧縮する方式である。このブロック圧縮では、圧縮したブロックの圧縮ブロックサイズが圧縮率で決まる一定量以下になるようにしておけば、メモリ中にはブロック毎にその一定量の領域を確保しておくことで、ブロック単位のランダムアクセスが可能なる。
【０００４】
例えば、ブロック単位でのランダムアクセスを可能にするデータ処理装置が提案されている（例えば、特許文献１参照）。この提案のデータ処理装置は、ブロックを圧縮した圧縮ブロックサイズが圧縮ブロックのサイズを超えてしまう場合、圧縮率を高くして圧縮した圧縮ブロックサイズを小さくし、圧縮ブロックに収まるようにしている。
【０００５】
一般に圧縮率を高くするとエラーは増加する。エラーは元データにも依存し、ほとんどの場合はエラーが小さいあるいは０であるような圧縮率であっても、あるブロック、例えば、圧縮率を高くしたブロックでは、大きなエラーが出るということがある。
【０００６】
そのため、上述した提案のデータ処理装置は、ブロック単位の非可逆圧縮では、圧縮率を高くすると、大部分のデータに対してはエラーが十分に小さいにも関わらず、データによっては、大きなエラーを発生するという問題があった。また、大きなエラーの発生を避けようとすると、圧縮率を高くできないという問題があった。
【先行技術文献】
【特許文献】
【０００７】
【特許文献１】特表２００６−５２４８５８号公報
【発明の概要】
【発明が解決しようとする課題】
【０００８】
本発明は、圧縮データのブロック単位でのランダムアクセスを可能にし、圧縮率を低く抑えながら、エラーを小さくすることができるデータ格納方法及びデータ格納装置を提供することを目的とする。
【課題を解決するための手段】
【０００９】
本発明の一態様によれば、ブロックデータを圧縮した圧縮ブロックデータを取得し、前記圧縮ブロックデータの圧縮ブロックサイズが期待圧縮ブロックサイズを超えているか否かを判定し、判定の結果、前記圧縮ブロックサイズが前記期待圧縮ブロックサイズを超えていないと判定された場合、前記圧縮ブロックサイズが前記期待圧縮ブロックサイズを超えていないことを示す第１の情報と、前記圧縮ブロックデータとを圧縮ブロックに格納し、前記圧縮ブロックサイズが前記期待圧縮ブロックサイズを超えていると判定された場合、前記圧縮ブロックサイズが前記期待圧縮ブロックサイズを超えていることを示す第２の情報と、前記期待圧縮ブロックサイズを超えた前記圧縮ブロックデータを格納するための圧縮ブロックの場所を指定するポインタ情報と、前記圧縮ブロックデータとを前記圧縮ブロックに格納することを特徴とするデータ格納方法を提供することができる。
【発明の効果】
【００１０】
本発明のデータ格納方法及びデータ格納装置によれば、圧縮データのブロック単位でのランダムアクセスを可能にし、圧縮率を低く抑えながら、エラーを小さくすることができる。
【図面の簡単な説明】
【００１１】
【図１】本発明の第１の実施の形態に係る情報処理システムの構成を説明するための説明図である。
【図２】圧縮前の非圧縮データ及び記憶装置１０２の構成の例を説明するための説明図である。
【図３】圧縮ブロックのデータ形式の例を説明するための説明図である。
【図４】データ格納方法におけるデータ書き込み処理の流れの例を説明するためのフローチャートである。
【図５】データ格納方法におけるデータ読み出し処理の流れの例を説明するためのフローチャートである。
【図６】圧縮ブロックのデータ形式の例を説明するための説明図である。
【図７】本発明の第２の実施の形態に係る情報処理システムの構成を説明するための説明図である。
【図８】本発明の第３の実施の形態に係る情報処理システムの構成を説明するための説明図である。
【発明を実施するための形態】
【００１２】
以下、図面を参照して本発明の実施の形態について詳細に説明する。  
（第１の実施の形態）  
まず、図１に基づき、本発明の第１の実施の形態に係る情報処理システムの構成について説明する。図１は、本発明の第１の実施の形態に係る情報処理システムの構成を説明するための説明図である。
【００１３】
図１に示すように、情報処理システム１００は、中央処理装置（以下、CPUという）１０１ａを有する本体装置１０１と、メモリとしての記憶装置１０２と、表示装置１０３と、キーボード１０４と、マウス１０５とを有して構成されている。記憶装置１０２には、データ格納プログラム１０６が記憶されている。データ格納プログラム１０６は、CPU１０１ａ上で実行されるソフトウエアである。
【００１４】
情報処理システム１００は、本実施の形態のデータ格納方法を実現するための構成であり、ユーザが、キーボード１０４またはマウス１０５を操作し、データ格納プログラム１０６をCPU１０１ａにおいて実行することで、本実施の形態のデータ格納方法が実現される。
【００１５】
図２は、圧縮前の非圧縮データ及び記憶装置１０２の構成の例を説明するための説明図である。
【００１６】
図２に示すように、圧縮前の非圧縮データは、ブロックサイズAのブロックの集合であり、各ブロックはブロック番号により識別される。なお、非圧縮データは画像データを例に説明するが、特に、画像データに限定するものではなく、他のデータ、例えば、音声データ等であってもよい。また、データの圧縮は、完全に元のデータに復元できない非可逆圧縮方式であるが、圧縮データが完全に元のデータに復元できる可逆圧縮方式であってもよい。
【００１７】
記憶装置１０２は、ブロックサイズA×圧縮率から算出される圧縮ブロックサイズBの圧縮ブロック領域である圧縮ブロックの集合であり、各圧縮ブロックは、圧縮ブロック番号により識別される。ここで圧縮率は、ブロックサイズAを圧縮した結果、大部分の圧縮データが圧縮ブロックサイズBに収まり、圧縮ブロックサイズBを超える圧縮データの割合が十分小さくなるように決められている。この圧縮率は、予め決められている。
【００１８】
記憶装置１０２は、所定の記憶領域を有する第１の記憶領域と、第１の記憶領域より小さい記憶領域を有する第２の記憶領域とにより構成される。第１の記憶領域は、非圧縮のブロックサイズA×圧縮率のサイズを有し、圧縮したデータを格納する。第２の記憶領域は、圧縮したデータが溢れた場合に、その溢れたデータを格納する。
【００１９】
ブロック番号ｎのブロックサイズAである非圧縮ブロックのデータが圧縮手段によって圧縮されて、圧縮ブロックサイズCになったものとする。以下では、非圧縮ブロックのデータをブロックデータともいう。即ち、ブロックデータは、非圧縮データを固定サイズのブロックに分けて得られたデータである。圧縮ブロックサイズCのデータが（圧縮ブロックサイズB−１ビット）以下の場合、第１の記憶領域の圧縮ブロック番号ｎの圧縮ブロックに、後述する図３（ａ）に示すデータ形式により格納される。以下では、所定の圧縮ブロック、ここでは（圧縮ブロックサイズB−１ビット）を期待圧縮ブロックサイズともいう。
【００２０】
一方、圧縮ブロックサイズCが期待圧縮ブロックサイズよりも大きい場合、第１の記憶領域の圧縮ブロック番号ｎの圧縮ブロックには、後述する図３（ｂ）に示すデータ形式により格納される。第２の記憶領域から空いている圧縮ブロックが取得され、残りのデータを第２の記憶領域の圧縮ブロック番号ｍの場所に格納する。
【００２１】
図３は、圧縮ブロックのデータ形式の例を説明するための説明図である。
【００２２】
図３（ａ）は、圧縮ブロックデータが期待圧縮ブロックサイズ以下である場合のデータ形式を示している。図３（ａ）に示すように、各圧縮ブロックには、１ビットのフラグ情報と、（圧縮ブロックサイズB−１ビット）のサイズの圧縮データとが格納される。
【００２３】
このフラグ情報は、ブロックデータを圧縮した圧縮ブロックデータが期待圧縮ブロックサイズ以下であるか否かを示す情報である。図３（ａ）では、フラグ情報として０が格納されている。フラグ情報として０が格納されている場合、圧縮ブロックデータが期待圧縮ブロックサイズ以下であることを示す。
【００２４】
図３（ｂ）は、圧縮ブロックデータが期待圧縮ブロックサイズより大きい場合のデータ形式を示している。図３（ｂ）に示すように、各圧縮ブロックには、１ビットのポインタ情報と、ポインタ情報と、（圧縮ブロックサイズB−１ビット−ポインタ情報サイズ）のサイズの圧縮データとが格納される。
【００２５】
図３（ｂ）では、フラグ情報格納部にフラグ情報として１が格納されている。フラグ情報格納部にフラグ情報として１が格納されている場合、圧縮ブロックデータが期待圧縮ブロックサイズより大きいことを示す。上述したように、圧縮ブロックデータが期待圧縮ブロックサイズより大きい場合、第２の記憶領域から空いている圧縮ブロックが取得され、取得された圧縮ブロックに残りのデータを格納する。ポインタ情報は、第２の記憶領域内において取得された圧縮ブロックの場所を指し示す情報が格納される。
【００２６】
ここで、残りのデータが期待圧縮ブロックサイズ以下の場合、ポインタ情報により指し示された圧縮ブロックには、図３（ａ）に示すデータが格納される。
【００２７】
一方、残りの圧縮データが期待圧縮ブロックサイズより大きい場合、ポインタ情報により指し示された圧縮ブロックには、図３（ｂ）に示すデータが格納される。即ち、再度、第２の記憶領域から空いている圧縮ブロックを取得し、その圧縮ブロックを指し示すポインタを得る。
【００２８】
このように、データが記憶装置１０２に書き込まれる場合、圧縮データが、そのデータ量に応じて、１あるいは複数の圧縮ブロックに格納される。
【００２９】
なお、フラグ情報及びポインタ情報は、圧縮ブロックに格納するものとして説明したが、例えば、テーブルを用意して、そのテーブルにフラグ情報及びポインタ情報を格納するようにしてもよい。
【００３０】
データを記憶装置１０２から読み出す場合、ブロック番号に対応する圧縮ブロックを読み出す。そして、読み出された圧縮ブロックに格納されているフラグ情報が０の場合、読み出した圧縮ブロックに格納されている圧縮データを、圧縮手段に対応する伸長手段によって伸長する。一方、読み出された圧縮ブロックに格納されているフラグ情報が１の場合、ポインタ情報を辿ることによって、残りの圧縮データを全て取得した後、取得した全ての圧縮データを、伸長手段によって伸長する。
【００３１】
ここで、データを書き込む場合の処理について説明する。図４は、データ格納方法におけるデータ書き込み処理の流れの例を説明するためのフローチャートである。
【００３２】
圧縮前のブロックデータが圧縮され（ステップＳ１）、圧縮ブロックデータの圧縮ブロックサイズが得られる（ステップＳ２）。圧縮ブロックサイズが期待圧縮ブロックサイズ（B−１ビット）以下か否かが判定される（ステップＳ３）。即ち、ステップＳ３では、圧縮ブロックサイズCが（圧縮ブロックサイズB−１ビット）以下か否かが判定される。期待圧縮ブロックサイズ以下でない場合、NOとなり、第２の記憶領域から空いている圧縮ブロックが取得され、取得された圧縮ブロックの場所を指し示すポインタが得られる（ステップＳ４）。圧縮ブロックにフラグ情報、ここでは１と、ポインタ情報と、圧縮ブロックサイズB−１ビット−ポインタサイズの圧縮データとが書き込まれる（ステップＳ５）。残りの圧縮ブロックサイズが取得され（ステップＳ６）、ステップＳ３に戻り、残りの圧縮ブロックサイズが期待圧縮ブロックサイズ以下か否かが判定される。一方、期待圧縮ブロックサイズ以下の場合、圧縮ブロックにフラグ情報、ここでは０と、期待圧縮ブロックサイズ以下の圧縮データとが書き込まれ（ステップＳ７）、処理を終了する。
【００３３】
なお、ステップＳ４において、第２の記憶領域から空きブロックを取得できない場合は、圧縮率を再設定し、上述した処理を再度実行するようにしてもよい。
【００３４】
次に、データを読み出す場合の処理について説明する。図５は、データ格納方法におけるデータ読み出し処理の流れの例を説明するためのフローチャートである。
【００３５】
まず、読み出し要求のあった圧縮ブロックが読み出される（ステップＳ１１）。読み出された圧縮ブロックの最初のビットが０か否かが判定される（ステップＳ１２）。即ち、ステップＳ１２では、フラグ情報格納部に格納されているフラグ情報が０か否かが判定される。最上位ビットが０でない場合、読み出された圧縮ブロック内の圧縮データが取得され、バッファに格納される（ステップＳ１３）。ポインタ情報が指し示す場所の圧縮ブロックが読み出される（ステップＳ１４）。そして、ステップＳ１２に戻り、読み出された圧縮ブロックの最上位ビットが０か否かが判定される。一方、ステップＳ１２において、読み出された圧縮ブロックの最上位ビットが０の場合、読み出された圧縮ブロック内の圧縮データが取得され、バッファに格納される（ステップＳ１５）。最後に、バッファに格納された圧縮データが伸長され（ステップＳ１６）、処理を終了する。
【００３６】
以上のように、データ格納方法は、圧縮データが圧縮ブロックより大きい場合、圧縮ブロックにフラグ情報とポインタ情報を付加してデータを格納し、超えてしまったデータを第２の記憶領域に格納するようにした。この結果、圧縮データが圧縮ブロックより大きい場合、従来では、圧縮率を高くしデータを圧縮していたため、エラーが大きくなっていたが、本実施の形態では、圧縮データのブロック単位でのランダムアクセスできるとともに、圧縮率を高くする必要がなくなり、エラーを小さくすることが可能となる。
【００３７】
よって、本実施の形態のデータ格納方法によれば、圧縮データのブロック単位でのランダムアクセスを可能にし、圧縮率を低く抑えながら、エラーを小さくすることができる。
【００３８】
（変形例１）
第１の実施の形態の変形例１のデータ格納装置は、画像データまたは音声データ等により最適な圧縮アルゴリズムが違うため、ブロックデータを圧縮する際に、データの特質に応じた圧縮アルゴリズムを選ぶようにしている。このため、圧縮ブロックには、圧縮アルゴリズムを表すビットフィールドを有している。
【００３９】
図６は、圧縮ブロックのデータ形式の例を説明するための説明図である。  
図６（ａ）及び（ｂ）に示すように、データを書き込む場合、圧縮ブロックには、データの特質に応じて選ばれた圧縮アルゴリズム情報が格納される。
【００４０】
データを読み出す場合、圧縮ブロックに格納された圧縮アルゴリズム情報に基づいて、対応した伸長アルゴリズムにより圧縮データの伸長が行われる。即ち、伸長時には、圧縮時に用いた圧縮アルゴリズムに対応した伸長アルゴリズムでデータが伸長される。
【００４１】
以上のように、第１の実施の形態の変形例１のデータ格納装置は、圧縮アリゴリズム情報を圧縮ブロックに格納することにより、データの特性に応じた圧縮及び伸長が可能となる。
【００４２】
（変形例２）
第１の実施の形態の変形例２のデータ格納装置は、圧縮したブロックの圧縮ブロックサイズが、期待圧縮ブロックサイズを超える場合、圧縮アルゴリズムを階層的に構成する。
【００４３】
例えば、圧縮したブロックの圧縮ブロックサイズが、期待圧縮ブロックサイズを超える場合、圧縮データの前半部分を第１の記憶領域の圧縮ブロックに格納し、圧縮データの後半部分を第２の記憶領域に格納する。この場合、第１の記憶領域の圧縮ブロックに格納された圧縮データのみから、全体の画像データの伸長を行うことができない。
【００４４】
そのため、データ格納装置は、最初の圧縮ブロック、言い換えると、第１の記憶領域の圧縮ブロックに格納された圧縮データのみを用いて伸長しても、ある程度エラーが大きくなるが、全体の画像データの伸長できるようにする。さらに、データ格納装置は、２つ目以降、言い換えると、第２の記憶領域の圧縮ブロックに格納された圧縮データも用いて伸長すると、よりエラーの少ない伸長結果が得られるような圧縮アルゴリズムを選択する。
【００４５】
以上のように、第１の実施の形態の変形例２のデータ格納装置は、圧縮アルゴリズムを階層的に構成することで、圧縮ブロックの最初のブロックのみから、データの復元が可能になる。
【００４６】
（第２の実施の形態）
次に、第２の実施の形態について説明する。図７は、本発明の第２の実施の形態に係る情報処理システムの構成を説明するための説明図である。なお、図７において、図１と同様の構成については同一の符号を付して説明を省略する。本実施の形態のデータ格納装置は、第１の実施の形態のデータ格納方法をハードウエアで実現した例である。
【００４７】
図７に示すように、情報処理システム１００ａは、１チップの半導体装置であるデータ格納装置１と、記憶装置１０２とを有して構成されている。データ格納装置１は、CPU１０１ａと、ハードウエアモジュール１１１と、メモリコントローラ１１２と、バス１１３とを有して構成されている。CPU１０１ａ、ハードウエアモジュール１１１及びメモリコントローラ１１２は、互いに、バス１１３を介して接続されている。
【００４８】
メモリコントローラ１１２は、バスインターフェイス（以下、バスI/Fという）１０と、圧縮部１１と、伸長部１２と、バッファ１３、１４及び１５と、フォーマッタ１６と、制御部１７と、記憶領域管理部１８と、メモリインターフェイス（以下、メモリI/Fという）１９とを有して構成されている。
【００４９】
第２の実施の形態では、メモリコントローラ１１２がデータを圧縮及び伸長する機能を有している。そのため、バス１１３上を通るデータは、圧縮されていない非圧縮データであり、記憶装置１０２に書き込まれるデータまたは記憶装置１０２から読み出されるデータは、圧縮された圧縮データである。メモリコントローラ１１２は、通常のアドレス変換機能を有している。
【００５０】
バスマスタであるCPU１０１ａまたはハードウエアモジュール１１１は、このメモリコントローラ１１２対して、圧縮前のブロックサイズでブロック転送要求、即ち、アクセス要求を出力する。メモリコントローラ１１２は、バスマスタからのアクセス要求に従って、記憶装置１０２へのブロックデータの書き込みまたは記憶装置１０２からのブロックデータの読み出しの制御を行う。
【００５１】
まず、データを書き込む場合について説明する。  
圧縮前のブロックデータがバスI/F２１を介して、圧縮部１１に供給される。圧縮部１１は、このブロックデータを圧縮する。圧縮部１１は、圧縮ブロックデータをバッファ１３及び制御部１７に出力する。
【００５２】
制御部１７は、メモリコントローラ１１２全体の動作を制御しており、メモリコントローラ１１２全体のデータ転送を管理する。また、制御部１７は、圧縮部１１から供給される圧縮ブロックデータが期待圧縮ブロックデータ以下か否かを判定する。このように、制御部１７は、圧縮ブロックデータが期待圧縮ブロックデータ以下か否かを判定する判定部を構成する。制御部１７は、期待圧縮ブロックデータ以下であると判定した場合、フォーマッタ１６に図３（ａ）のデータ形式とするように指示を出力する。
【００５３】
フォーマッタ１６は、この指示に基づいて、圧縮ブロックデータを図３（ａ）のデータ形式に変換し、バッファ１５に出力する。
【００５４】
一方、制御部１７は、圧縮ブロックデータが期待圧縮ブロックデータ以下でないと判定した場合、記憶領域管理部１８に空きブロックを取得するための指示を出力する。
【００５５】
記憶領域管理部１８は、この指示に基づいて、記憶装置１０２の第２の記憶領域から空いている圧縮ブロックの番号を取得し、その空いている圧縮ブロックの番号を制御部１７に出力する。制御部１７は、その空いている圧縮ブロックの番号を出力するとともに、フォーマッタ１６に図３（ｂ）のデータ形式となるように指示を出力する。
【００５６】
フォーマッタ１６は、この指示に基づいて、圧縮ブロックデータを図３（ｂ）のデータ形式に変換し、バッファ１５に出力する。また、フォーマッタ１６は、残りの圧縮データを制御部１７に出力する。制御部１７は、この残りの圧縮データが期待圧縮ブロックサイズ以下か否かを判定する。制御部１７は、期待圧縮ブロックデータ以下であると判定した場合、フォーマッタ１６に図３（ａ）のデータ形式とするように指示を出力する。
【００５７】
フォーマッタ１６は、この指示に基づいて、圧縮ブロックデータを図３（ａ）のデータ形式に変換し、バッファ１５に出力する。このように、フォーマッタ１６は、圧縮ブロックにフラグ情報と、圧縮データと、必要に応じてポインタ情報を格納するデータ格納部を構成する。
【００５８】
なお、制御部１７は、データの書き込みを行う場合は、圧縮部１１による圧縮結果のデータ量から、圧縮ブロックが何個必要かを決定し、記憶領域管理部１８から必要な圧縮ブロックの個数分の空き圧縮ブロック番号を得て、フォーマッタ１６に指示を出力するようにしてもよい。
【００５９】
また、フラグ情報及びポインタ情報は、圧縮ブロックデータに格納するものとして説明したが、例えば、メモリコントローラ１１２にテーブル２０を用意して、そのテーブル２０にフラグ情報及びポインタ情報を格納するようにしてもよい。
【００６０】
次に、データを読み出す場合について説明する。  
まず、読み出し要求のあった圧縮ブロックデータが第１の記憶領域から読み出され、読み出しデータがメモリI/F２２を介してバッファ１５に格納される。バッファ１５は、このデータをフォーマッタ１６に出力する。
【００６１】
フォーマッタ１６は、圧縮ブロックにフラグ情報及びポインタ情報が格納されている場合、そのフラグ情報及びポインタ情報を抽出し、抽出したフラグ情報及びポインタ情報を制御部１７に出力する。また、フォーマッタ１６は、圧縮ブロックに格納されている圧縮データをバッファ１４に出力する。制御部１７は、ポインタ情報に基づいて、第２の記憶領域から圧縮ブロックを読み出す。
【００６２】
伸長部１２には、バッファ１４に格納されたデータが供給される。伸長部１２は、このデータを伸長し、伸長したデータをバスI/F２１を介してバス１１３に出力する。バス１１３に出力された伸長したデータは、読み出し要求のあったCPU１０１ａまたはハードウエアモジュール１１１に供給される。
【００６３】
なお、第１の実施の形態の変形例１及び変形例２のそれぞれを本実施の形態のデータ格納装置に適用してもよい。
【００６４】
また、メモリコントローラ１１２がデータを圧縮及び伸長する機能を有しているとして説明したが、ハードウエアモジュール１１１がデータを圧縮及び伸長する機能を有していてもよい。
【００６５】
以上のように、データ格納装置１は、圧縮データが圧縮ブロックより大きい場合、圧縮ブロックにフラグ情報とポインタ情報を付加してデータを格納し、超えてしまったデータを第２の記憶領域に格納するようにした。この結果、圧縮データが圧縮ブロックより大きい場合、従来では、圧縮率を高くしデータを圧縮していたため、エラーが大きくなっていたが、本実施の形態では、圧縮データのブロック単位でのランダムアクセスできるとともに、圧縮率を高くする必要がなくなり、エラーを小さくすることが可能となる。
【００６６】
よって、本実施の形態のデータ格納装置によれば、圧縮データのブロック単位でのランダムアクセスを可能にし、圧縮率を低く抑えながら、エラーを小さくすることができる。
【００６７】
（第３の実施の形態）
次に、第３の実施の形態について説明する。図８は、本発明の第３の実施の形態に係る情報処理システムの構成を説明するための説明図である。なお、図８において、図７と同様の構成については同一の符号を付して説明を省略する。
【００６８】
図８に示すように、CPU１０１ａは、キャッシュコントローラ３１と、キャッシュメモリ３２と、CPUコア３３と、ローカルバス３４とを有して構成されている。キャッシュメモリ３２及びCPUコア３３は、互いに、ローカルバス３４を介して接続されている。
【００６９】
キャッシュコントローラ３１は、記憶装置１０２からキャッシュメモリ３２へのブロックデータの読み込みまたはキャッシュメモリ３２から記憶装置１０２へのブロックデータの書き込みの制御を行う。
【００７０】
このキャッシュコントローラ３１は、図７のメモリコントローラ１１２からメモリI/F１９を省いた構成となっている。このように、第３の実施の形態では、キャッシュコントローラ３１がデータを圧縮及び伸長する機能を有している。なお、CPU１０１ａがキャッシュコントローラ３１を有している場合について説明するが、例えば、ハードウエアモジュール１１１内の図示しないキャッシュメモリに対して、キャッシュコントローラ３１を適用してもよい。
【００７１】
CPUコア３３あるいは他のハードウエアモジュール１１１と接続されるローカルバス３４からは、このキャッシュコントローラ３１に対して、圧縮前のデータのアクセス要求が出力される。データの圧縮は、CPUコア３３あるいは他のハードウエアモジュール１１１には、透過的で、圧縮を行わない場合と同様にアクセスが可能である。ただし、データに応じて、圧縮の有無、圧縮のアルゴリズムを変えたい場合は、それを通知する手段が必要である。この手段として、一番簡単なのは、アドレスの上位ビットを用いることであるが、本発明はこれに限定するものではない。
【００７２】
圧縮を行わない場合のローカルアドレスと、外部メモリのアクセスがある場合にバス１１３に出力されるアドレスとは一致するが、圧縮がある場合は、ローカルアドレスとバス１１３に出力されるアドレスとは一致しない。キャッシュメモリ３２のブロックサイズ＝圧縮ブロックサイズとする。キャッシュメモリ３２にはデータは非圧縮で格納し、圧縮前のブロックのサイズで転送要求が発生する。
【００７３】
記憶装置１０２から圧縮データを読み出す際に、データ格納装置１ａにより第２の実施の形態と同様の伸長動作により、圧縮データの伸長を行い、伸長したデータをキャッシュメモリ３２へ読み出す。
【００７４】
キャッシュミスによりリフィルを行う場合、キャッシュメモリ３２内の不要なデータを記憶装置１０２に書き戻す。このとき、データ格納装置１ａは、このデータを第２の実施の形態と同様の圧縮動作により、データの圧縮を行い、圧縮データをバスI/F２１を介してバス１１３に出力する。この圧縮データはデータ量に応じて、１つあるいは複数の圧縮ブロックに格納される。
【００７５】
なお、第１の実施の形態の変形例１及び変形例２のそれぞれを本実施の形態のデータ格納装置に適用してもよい。
【００７６】
以上のように、データ格納装置１ａは、圧縮データが圧縮ブロックより大きい場合、圧縮ブロックにフラグ情報とポインタ情報を付加してデータを格納し、超えてしまったデータを第２の記憶領域に格納するようにした。この結果、圧縮データが圧縮ブロックより大きい場合、従来では、圧縮率を高くしデータを圧縮していたため、エラーが大きくなっていたが、本実施の形態では、圧縮データのブロック単位でのランダムアクセスできるとともに、圧縮率を高くする必要がなくなり、エラーを小さくすることが可能となる。
【００７７】
よって、本実施の形態のデータ格納装置によれば、圧縮データのブロック単位でのランダムアクセスを可能にし、圧縮率を低く抑えながら、エラーを小さくすることができる。
【００７８】
本明細書における各「部」は、実施の形態の各機能に対応する概念的なもので、必ずしも特定のハードウエアやソフトウエア・ルーチンに１対１には対応しない。従って、本明細書では、以上、実施の形態の各機能を有する仮想的回路ブロック（部）を想定して実施の形態を説明した。また、本明細書におけるフローチャート中の各ステップは、その性質に反しない限り、実行順序を変更し、複数同時に実行し、あるいは実行毎に異なった順序で実行してもよい。
【００７９】
なお、以上説明した動作を実行するプログラムは、コンピュータプログラム製品として、フレキシブルディスク、ＣＤ−ＲＯＭ等の可搬媒体や、ハードディスク等の記憶媒体に、その全体あるいは一部が記録され、あるいは記憶されている。そのプログラムコードがコンピュータにより読み取られて、動作の全部あるいは一部が実行される。あるいは、そのプログラムの全体あるいは一部を通信ネットワークを介して流通または提供することができる。利用者は、通信ネットワークを介してそのプログラムをダウンロードしてコンピュータにインストールしたり、あるいは記録媒体からコンピュータにインストールすることで、容易に本発明のデータ格納装置を実現することができる。
【００８０】
本発明は、上述した実施の形態に限定されるものではなく、本発明の要旨を変えない範囲において、種々の変更、改変等が可能である。
【符号の説明】
【００８１】
１…データ格納装置、１０…バスI/F、１１…圧縮部、１２…伸長部、１３〜１５…バッファ、１６…フォーマッタ、１７…制御部、１８…記憶領域管理部、１９…メモリI/F、３１…キャッシュコントローラ、３２、キャッシュメモリ、３３…CPUコア、３４…ローカルバス、１００…情報処理システム、１０１…本体装置、１０１ａ…CPU、１０２…記憶装置、１０３…表示装置、１０４…キーボード、１０５…マウス、１０６…データ格納プログラム、１１１…ハードウエアモジュール、１１２…メモリコントローラ、１１３…バス。
【図１】
2010287114.tif 000003
【図２】
2010287114.tif 000004
【図３】
2010287114.tif 000005
【図４】
2010287114.tif 000006
【図５】
2010287114.tif 000007
【図６】
2010287114.tif 000008
【図７】
2010287114.tif 000009
【図８】
2010287114.tif 000010