(57)【要約】【課題】不揮発性メモリへのアクセス速度の低下を抑制する。【解決手段】ストレージ装置１０（読出制御部２２）は、変換部２２Ａと、読出部２２Ｂと、解析部２２Ｃと、を備える。変換部２２Ａは、読出対象の圧縮クラスタの論理アドレスを、ＮＡＮＤ型フラッシュメモリ１８（不揮発性メモリ）の物理アドレスに変換する。読出部２２Ｂは、ＮＡＮＤ型フラッシュメモリ１８から、該物理アドレスによって示される位置のパッキングユニットに含まれるデータを読出す。解析部２２Ｃは、パッキングユニットに含まれるデータの読出に並行して、パッキングユニットに含まれるヘッダ情報を解析し、パッキングユニットにおける、読出対象の圧縮クラスタの位置情報を取得する。【選択図】図１
2018156137.tif 000002
【特許請求の範囲】
【請求項１】
読出対象の圧縮クラスタの論理アドレスを、不揮発性メモリの物理アドレスに変換する変換部と、
前記不揮発性メモリから、前記物理アドレスによって示される位置のパッキングユニットに含まれるデータを読出す読出部と、
前記パッキングユニットに含まれるデータの読出に並行して、前記パッキングユニットに含まれるヘッダ情報を解析し、前記パッキングユニットにおける、前記読出対象の前記圧縮クラスタの位置情報を取得する解析部と、
を備える、読出制御装置。
【請求項２】
前記読出部は、前記パッキングユニットにおける前記位置情報によって示される位置の前記圧縮クラスタを、前記読出対象の前記圧縮クラスタとして出力する、
請求項１に記載の読出制御装置。
【請求項３】
前記変換部は、前記圧縮クラスタの論理アドレスと、前記不揮発性メモリにおける前記圧縮クラスタを含むパッキングユニットの位置を示す前記物理アドレスと、を対応づけた管理情報を用いて、前記圧縮クラスタの論理アドレスを前記物理アドレスに変換する、請求項１または請求項２に記載の読出制御装置。
【請求項４】
前記読出部は、
前記位置情報が第１条件を満たすと判定した場合、前記パッキングユニットから、少なくとも前記位置情報によって示される位置の前記圧縮クラスタの読出しを終了するまで、データの読出を継続し、
前記位置情報が第２条件を満たすと判定した場合、前記パッキングユニットにおける前記位置情報に示される位置へ読出位置を変更し、該読出位置から前記圧縮クラスタを読出す、
請求項１〜請求項３の何れか１項に記載の読出制御装置。
【請求項５】
前記読出部は、
前記解析部で取得した前記位置情報によって示される位置が前記ヘッダ情報に隣接する位置である場合、または、前記解析部で取得した前記位置情報によって示される位置が前記ヘッダ情報に非隣接の位置であって、且つ、前記ヘッダ情報の末尾から前記位置情報によって示される位置までの間隔が閾値以下の場合、前記第１条件を満たすと判定し、
前記解析部で取得した前記位置情報によって示される位置が前記ヘッダ情報に非隣接の位置であって、且つ、前記間隔が前記閾値を超える場合、前記第２条件を満たすと判定する、
請求項４に記載の読出制御装置。
【請求項６】
前記読出部によって読み出されたデータにおける、第１単位ごとに付与されたエラー訂正符号を用いて、エラー訂正を行う訂正部を備え、
前記解析部は、エラー訂正された前記ヘッダ情報を解析する、
請求項１〜請求項５の何れか１項に記載の読出制御装置。
【請求項７】
前記訂正部は、
前記読出部によって読み出されたデータにおける、前記ヘッダ情報に付与されたエラー訂正符号を用いて、該ヘッダ情報のエラー訂正を行う第１訂正部と、
前記ヘッダ情報より大きいデータサイズの前記第１単位ごとに付与されたエラー訂正符号を用いてエラー訂正を行う第２訂正部と、
を有し、
前記解析部は、
前記第１訂正部による前記ヘッダ情報のエラー訂正が成功した場合、エラー訂正された前記ヘッダ情報を解析し、前記第１訂正部による前記ヘッダ情報のエラー訂正が失敗した場合、前記第２訂正部によってエラー訂正された前記第１単位のデータに含まれる前記ヘッダ情報を解析する、
請求項６に記載の読出制御装置。
【請求項８】
前記ヘッダ情報は、該ヘッダ情報を含む前記パッキングユニットに含まれる、前記圧縮クラスタの前記位置情報と、前記圧縮クラスタの前記論理アドレスと、を含む、
請求項１〜請求項７の何れか１項に記載の読出制御装置。
【請求項９】
前記ヘッダ情報は、前記パッキングユニットに含まれる前記圧縮クラスタの数と、前記圧縮クラスタのサイズと、の少なくとも一方を更に含む、
請求項８に記載の読出制御装置。
【請求項１０】
書込制御部と、読出制御部と、を含むストレージコントローラであって、
前記書込制御部は、
書込みデータを圧縮した圧縮クラスタ、および、前記圧縮クラスタの論理アドレスと位置情報とを対応づけたヘッダ情報と、を含むパッキングユニットを生成するパッキング処理部と、
前記パッキングユニットを不揮発性メモリへ書込み、前記圧縮クラスタの論理アドレスと物理アドレスとを対応づけた管理情報を更新する書込部と、
を備え、
前記読出制御部は、
読出対象の圧縮クラスタの論理アドレスを、不揮発性メモリの前記物理アドレスに変換する変換部と、
前記不揮発性メモリから、前記物理アドレスによって示される位置の前記パッキングユニットに含まれるデータを読出す読出部と、
前記パッキングユニットに含まれるデータの読出に並行して、前記パッキングユニットに含まれるヘッダ情報を解析し、前記パッキングユニットにおける、前記読出対象の前記圧縮クラスタの位置情報を取得する解析部と、
を備える、
ストレージコントローラ。
【請求項１１】
読出対象の圧縮クラスタの論理アドレスを、不揮発性メモリの物理アドレスに変換するステップと、
前記不揮発性メモリから、前記物理アドレスによって示される位置のパッキングユニットに含まれるデータを読出すステップと、
前記パッキングユニットに含まれるデータの読出に並行して、前記パッキングユニットに含まれるヘッダ情報を解析し、前記パッキングユニットにおける、前記読出対象の前記圧縮クラスタの位置情報を取得するステップと、
をコンピュータに実行させるためのプログラム。
【発明の詳細な説明】
【技術分野】
【０００１】
本発明の実施の形態は、読出制御装置、ストレージコントローラ、およびプログラムに関する。
【背景技術】
【０００２】
ＮＡＮＤフラッシュなどの不揮発性メモリを用いた記憶装置が用いられている。これら記憶装置では、外部から入力されたデータを不揮発性メモリに記憶するとともに、記憶先の物理アドレスと外部から参照可能な論理アドレスとの対応関係を記憶する。情報を読み出す場合、読出対象のデータの論理アドレスに対応する物理アドレスを用いて、不揮発性メモリに記憶されたデータを読み出し、外部へ出力する。データは、所定サイズのクラスタ単位で不揮発性メモリに記憶され、クラスタ単位で物理アドレスの対応付けが行われている。
【０００３】
このような記憶装置において、データを圧縮した圧縮クラスタを、不揮発性メモリに記憶する手法が知られている。また、圧縮クラスタの位置およびサイズ情報の一部を、ＥＣＣ（Ｅｒｒｏｒ−Ｃｏｒｒｅｃｔｉｎｇ  Ｃｏｄｅ）を適用するデータ単位であるＥＣＣユニットに保持する方法も示されている。しかし、従来では、読出対象のＥＣＣユニットを読出し、読出したＥＣＣユニットに含まれる圧縮クラスタの位置およびサイズ情報を取得した後に、必要数のＥＣＣユニットをさらに読み出す、と言った処理が必要であった。このため、従来では、特にランダムアクセス時の読出しの遅延時間が大きくなり、不揮発性メモリへのアクセス速度が低下するという問題があった。
【先行技術文献】
【特許文献】
【０００４】
【特許文献１】特許５９７８２５９号公報
【発明の概要】
【発明が解決しようとする課題】
【０００５】
本発明が解決しようとする課題は、不揮発性メモリへのアクセス速度の低下を抑制することができる、読出制御装置、ストレージコントローラ、およびプログラムを提供することである。
【課題を解決するための手段】
【０００６】
実施の形態の読出制御装置は、変換部と、読出部と、解析部と、を備える。変換部は、読出対象の圧縮クラスタの論理アドレスを、不揮発性メモリの物理アドレスに変換する。読出部は、不揮発性メモリから、物理アドレスによって示される位置のパッキングユニットに含まれるデータを読出す。解析部は、パッキングユニットに含まれるデータの読出に並行して、パッキングユニットに含まれるヘッダ情報を解析し、パッキングユニットにおける読出対象の圧縮クラスタの位置情報を取得する。
【図面の簡単な説明】
【０００７】
【図１】ストレージ装置の模式図。
【図２】パッキングユニットのデータ構成を示す模式図。
【図３】ヘッダ情報のデータ構成を示す模式図。
【図４】ヘッダ情報のデータ構成を示す模式図。
【図５】ヘッダ情報のデータ構成を示す模式図。
【図６】読出制御の説明図。
【図７】データの読出および解析の説明図。
【図８】データの読出および解析の説明図。
【図９】書込処理の手順を示すフローチャート。
【図１０】読出処理の手順を示すフローチャート。
【図１１】ストレージ装置の模式図。
【図１２】データの読出および解析の説明図。
【図１３】データの読出および解析の説明図。
【図１４】ハードウェア構成図。
【発明を実施するための形態】
【０００８】
以下に添付図面を参照して、読出制御装置、ストレージコントローラ、および読出プログラムを詳細に説明する。
【０００９】
（第１の実施の形態）
図１は、本実施の形態のストレージ装置１０の一例を示す模式図である。
【００１０】
ストレージ装置１０は、不揮発性メモリを用いた記憶装置である。ストレージ装置１０は、例えば、ＳＳＤ（Ｓｏｌｉｄ  Ｓｔａｔｅ  Ｄｒｉｖｅ）である。
【００１１】
ストレージ装置１０は、ホスト装置１２と通信可能に接続されている。ストレージ装置１０とホスト装置１２とは、例えば、ＳＡＴＡ（Ｓｅｒｉａｌ  ＡＴ  Ａｔｔａｃｈｍｅｎｔ）、ＳＡＳ（Ｓｅｒｉａｌ  Ａｔｔａｃｈｅｄ  ＳＣＳＩ）、またはＰＣＩｅ（Ｐｅｒｉｐｈｅｒａｌ  Ｃｏｍｐｏｎｅｎｔ  Ｉｎｔｅｒｃｏｎｎｅｃｔ  Ｅｘｐｒｅｓｓ）などのインターフェース規格で接続されている。
【００１２】
ホスト装置１２は、ＰＣ（Ｐｅｒｓｏｎａｌ  Ｃｏｍｐｕｔｅｒ）、ワークステーション、またはサーバ装置などの情報処理装置である。ホスト装置１２は、ストレージ装置１０に対して、データの書込要求や、データの読出要求などを行う。
【００１３】
ストレージ装置１０は、ホスト・インターフェース部１４と、ストレージコントローラ２０と、メモリ・インターフェース部１６と、ＮＡＮＤ型フラッシュメモリ１８と、を備える。
【００１４】
ホスト・インターフェース部１４は、ストレージコントローラ２０とホスト装置１２とを接続するためのインターフェースである。ストレージコントローラ２０は、ホスト・インターフェース部１４を介してホスト装置１２に接続される。
【００１５】
メモリ・インターフェース部１６は、ストレージコントローラ２０とＮＡＮＤ型フラッシュメモリ１８とを接続するためのインターフェースである。ストレージコントローラ２０は、メモリ・インターフェース部１６を介してＮＡＮＤ型フラッシュメモリ１８に接続される。
【００１６】
ＮＡＮＤ型フラッシュメモリ１８は、不揮発性メモリの一例である。
【００１７】
ＮＡＮＤ型フラッシュメモリ１８には、ストレージコントローラ２０によって、書込制御や読出制御が行われる。
【００１８】
ＮＡＮＤ型フラッシュメモリ１８は、記憶素子（セルと称される）を備える。ＮＡＮＤ型フラッシュメモリ１８の記憶素子による領域（セル・アレイ）は、１ビットまたは多ビットの情報を記憶する。
【００１９】
ＮＡＮＤ型フラッシュメモリ１８に対するデータの読出制御や書込制御は、物理ページ単位で行われる。物理ページは、予め定めた数の複数のセルを含む。また、ＮＡＮＤ型フラッシュメモリ１８に対する消去は、物理ブロック単位で行われる。物理ブロックは、予め定めた数の複数の物理ページを含む。物理ページのサイズは、例えば、４ｋｙｔｅ、８ｋｂｙｔｅ、１６ｋｂｙｔｅなどである。
【００２０】
ＮＡＮＤ型フラッシュメモリ１８は、データ・バッファを有する。データ・バッファは、ページ・レジスタと称される場合もある。
【００２１】
ＮＡＮＤ型フラッシュメモリ１８からデータを読出す場合、まずセル・アレイから、指定された物理ページのデータが、データ・バッファへと読みだされる。そして、データ・バッファ上のデータが、データバスおよびメモリ・インターフェース部１６を介して、ストレージコントローラ２０へ出力される。
【００２２】
例えば、ＮＡＮＤ型フラッシュメモリ１８における物理ページ内の一部のデータを読み出す場合でも、セル・アレイからデータ・バッファへの読出しは、物理ページ単位で実施される。一方、データ・バッファからストレージコントローラ２０へのデータの出力は、データバスを経由したシーケンシャルな転送処理であり、所定の一部分のみを転送することが可能である。
【００２３】
ＮＡＮＤ型フラッシュメモリ１８へのデータの書込みについても、データ・バッファを経由して実施される。書込みを行う場合、ストレージコントローラ２０からメモリ・インターフェース部１６およびＮＡＮＤ型フラッシュメモリ１８におけるデータ・ポートを経由して、書込みデータがデータ・バッファへと転送される。その後、データ・バッファの内容が、セル・アレイ中の指定された物理ページに対して書込まれる。
【００２４】
次に、ストレージコントローラ２０について説明する。ストレージコントローラ２０は、ＮＡＮＤ型フラッシュメモリ１８へのデータの書込制御および読出制御を行う制御装置である。ストレージコントローラ２０は、１個または複数個のＬＳＩ（Ｌａｒｇｅ  Ｓｃａｌｅ  Ｉｎｔｅｇｒａｔｅｄ  Ｃｉｒｃｕｉｔ）で構成されている。
【００２５】
ストレージコントローラ２０は、書込制御部２４と、読出制御部２２と、を備える。ホスト・インターフェース部１４、メモリ・インターフェース部１６、読出制御部２２、および書込制御部２４は、アドレスバスおよびデータバスなどのバスによって互いに通信可能に接続されている。
【００２６】
書込制御部２４は、圧縮部２４Ａと、パッキング処理部２４Ｂと、書込部２４Ｃと、を備える。読出制御部２２は、変換部２２Ａと、読出部２２Ｂと、解析部２２Ｃと、伸長部２２Ｄと、を備える。読出制御部２２、変換部２２Ａ、読出部２２Ｂ、解析部２２Ｃ、伸長部２２Ｄ、書込制御部２４、圧縮部２４Ａ、パッキング処理部２４Ｂ、および書込部２４Ｃは、例えば、１または複数のプロセッサにより実現される。例えば上記各部は、ＣＰＵ（Ｃｅｎｔｒａｌ  Ｐｒｏｃｅｓｓｉｎｇ  Ｕｎｉｔ）などのプロセッサにプログラムを実行させること、すなわちソフトウェアにより実現してもよい。上記各部は、専用のＩＣ（Ｉｎｔｅｇｒａｔｅｄ  Ｃｉｒｃｕｉｔ）などのプロセッサ、すなわちハードウェアにより実現してもよい。上記各部は、ソフトウェアおよびハードウェアを併用して実現してもよい。複数のプロセッサを用いる場合、各プロセッサは、各部のうち１つを実現してもよいし、各部のうち２以上を実現してもよい。
【００２７】
なお、本実施の形態および後述する実施の形態において用いる「プロセッサ」との文言は、例えば、ＣＰＵ、ＧＰＵ（Ｇｒａｐｈｉｃａｌ  Ｐｒｏｃｅｓｓｉｎｇ  Ｕｎｉｔ）或いは、特定用途向け集積回路（Ａｐｐｌｉｃａｔｉｏｎ  Ｓｐｅｃｉｆｉｃ  Ｉｎｔｅｇｒａｔｅｄ  Ｃｉｒｃｕｉｔ：ＡＳＩＣ）、プログラマブル論理デバイス（例えば、単純プログラマブル論理デバイス（Ｓｉｍｐｌｅ  Ｐｒｏｇｒａｍｍａｂｌｅ  Ｌｏｇｉｃ  Ｄｅｖｉｃｅ：ＳＰＬＤ）、複合プログラマブル論理デバイス（Ｃｏｍｐｌｅｘ  Ｐｒｏｇｒａｍｍａｂｌｅ  Ｌｏｇｉｃ  Ｄｅｖｉｃｅ：ＣＰＬＤ）、およびフィールドプログラマブルゲートアレイ（Ｆｉｅｌｄ  Ｐｒｏｇｒａｍｍａｂｌｅ  Ｇａｔｅ  Ａｒｒａｙ：ＦＰＧＡ））の回路を意味する。
【００２８】
プロセッサは、記憶部に保存されたプログラムを読出し実行することで、上記各部を実現する。なお、記憶部にプログラムを保存する代わりに、プロセッサの回路内にプログラムを直接組込むよう構成してもよい。この場合、プロセッサは回路内に組込まれたプログラムを読出し実行することで、上記各部を実現する。
【００２９】
書込制御部２４は、ホスト装置１２から受付けた書込みデータを、圧縮およびパッキングし、ＮＡＮＤ型フラッシュメモリ１８へ書込む、書込制御を行う。
【００３０】
書込制御部２４は、圧縮部２４Ａと、パッキング処理部２４Ｂと、書込部２４Ｃと、を有する。
【００３１】
書込制御部２４は、ホスト装置１２から書込要求を受付ける。書込要求は、書込み対象のデータと、論理アドレス（Ｌｏｇｉｃａｌ  Ｂｌｏｃｋ  Ａｄｄｒｅｓｓ：ＬＢＡ）と、を含む。ＬＢＡは、外部（例えば、ホスト装置１２）から参照可能な論理ブロックアドレスである。ＬＢＡは、例えば、５１２バイトのセクタを単位とするアドレスである。
【００３２】
圧縮部２４Ａは、書込要求に含まれる、書込み対象のデータを取得する。なお、本実施の形態では、書込要求には、所定の単位（クラスタ）の、書込み対象のデータが含まれるものとする。クラスタとは、予め定めたサイズ（例えば、４ｋｂｙｔｅ）ごとにデータをまとめたものである。なお、クラスタの単位が１つのセクタである場合には、クラスタとセクタは同じであり、ＬＣＡとＬＢＡは同じである。
【００３３】
圧縮部２４Ａは、書込み対象のデータを、クラスタごとに圧縮し、圧縮クラスタを生成する。
【００３４】
なお、書込要求に含まれる、書込み対象のデータのサイズが、クラスタより大きい場合がある。この場合、圧縮部２４Ａは、書込み対象のデータをクラスタ毎に分割し、分割したクラスタの各々の圧縮クラスタを生成すればよい。
【００３５】
圧縮部２４Ａは、クラスタについて、可逆的な圧縮方法による圧縮処理を行う。圧縮処理は、例えば、Ｌｅｍｐｅｌ−Ｚｉｖ（ＬＺ７７，ＬＺ７８等）、Ｄｅｆｌａｔｅ、あるいは、その他各種の辞書式圧縮、などである。また、圧縮部２４Ａは、ブロックソートに基づく符号化（例えばｂｚｉｐ２等）や、各種のエントロピー符号化等により、圧縮処理を行ってもよい。圧縮部２４Ａは、クラスタを圧縮処理することで生成した圧縮クラスタを、パッキング処理部２４Ｂへ出力する。
【００３６】
なお、圧縮処理によって生成された圧縮クラスタは、圧縮前のクラスタに比べて、データサイズが小さくなる（圧縮率が閾値以上）。
【００３７】
しかし、クラスタのデータの特性や圧縮方式により、クラスタに対する、圧縮後の圧縮クラスタの圧縮率が、閾値未満の場合がある。すなわち、圧縮処理しても、データサイズが小さくならない、または、データサイズが大きくなる場合がある。
【００３８】
このため、圧縮率が閾値未満である場合、圧縮部２４Ａは、圧縮クラスタに代えて、元のクラスタと、非圧縮であることを示すフラグと、をパッキング処理部２４Ｂへ出力してもよい。圧縮率の閾値には、例えば、ＮＡＮＤ型フラッシュメモリ１８からのデータの読出しの遅延量増減の合計が負（減少）となる圧縮率を、予め設定すればよい。このようにすることで、圧縮によりデータサイズが増大してしまうことを防ぐことができる。
【００３９】
次に、パッキング処理部２４Ｂについて説明する。
【００４０】
パッキング処理部２４Ｂは、圧縮部２４Ａから圧縮クラスタを取得する。また、パッキング処理部２４Ｂは、圧縮クラスタの論理アドレスを取得する。パッキング処理部２４Ｂは、書込要求に含まれる論理アドレスを読取ることで、論理アドレスを取得する。
【００４１】
パッキング処理部２４Ｂは、パッキングユニットを生成する。パッキングユニットは、１または複数の圧縮クラスタと、ヘッダ情報と、を含む。
【００４２】
図２は、パッキングユニットのデータ構成の一例を示す模式図である。なお、図２には、ＮＡＮＤ型フラッシュメモリ１８の物理ページに含まれる、複数のパッキングユニットを一例として示した。
【００４３】
パッキングユニットは、ヘッダ情報と、１以上の圧縮クラスタ（またはその一部分）と、から構成される。パッキングユニットのデータサイズは、予め定めればよい。パッキングユニットのデータサイズは、例えば、物理ページと同一、または、物理ページ以下のサイズであればよい。また、物理ページは、１以上のパッキングユニットを含む構成であればよい。また、例えば、パッキングユニットは、クラスタ（圧縮前のクラスタ）と同じサイズであってもよい。
【００４４】
パッキング処理部２４Ｂは、圧縮部２４Ａから取得した圧縮クラスタを、パッキングユニットのヘッダ情報の直後から、順に配置する。例えば、配置対象のパッキングユニットに既に圧縮クラスタが配置されている場合、パッキング処理部２４Ｂは、今回取得した圧縮クラスタを、前回取得した圧縮クラスタの直後に配置する。そして、パッキング処理部２４Ｂは、配置した圧縮クラスタの末尾が、配置対象のパッキングユニットからはみ出す場合、当該はみ出した部分については、次のパッキングユニットの先頭（ヘッダ情報の直後）に配置する。
【００４５】
また、パッキング処理部２４Ｂは、パッキングユニット内に先頭位置を含む圧縮クラスタに関する情報を、該パッキングユニットのヘッダ情報に登録する。
【００４６】
詳細には、ヘッダ情報は、該ヘッダ情報を含むパッキングユニットに含まれる、圧縮クラスタの論理アドレスと、該パッキングユニット内における圧縮クラスタの位置を示す位置情報（以下、オフセットと称する場合がある）と、を、少なくとも対応づけたものである。この位置情報は、物理アドレスの一種である。
【００４７】
ヘッダ情報に、圧縮クラスタの論理アドレス（ＬＣＡ：Ｌｏｇｉｃａｌ  Ｃｌｕｓｔｅｒ  Ａｄｄｒｅｓｓ）と、該圧縮クラスタのオフセットと、を対応付けて保持することで、パッキングユニット内に複数の圧縮クラスタが含まれる場合であっても、論理アドレス（ＬＣＡ）から、目的とする圧縮クラスタの位置情報（オフセット）を用意に取得可能とすることができる。
【００４８】
本実施の形態では、パッキング処理部２４Ｂは、ＬＣＡを、圧縮クラスタの論理アドレスとして、ヘッダ情報に格納する。ＬＣＡは、圧縮クラスタのＬＢＡの、先頭アドレスに対応する部分（ＬＢＡの上位ビット部分）である。
【００４９】
パッキング処理部２４Ｂは、ヘッダ情報と、圧縮クラスタと、を含むパッキングユニットを、書込部２４Ｃへ出力する。
【００５０】
なお、パッキング処理部２４Ｂは、圧縮部２４Ａから取得した圧縮クラスタを、バイト単位で隙間なく詰めて、パッキングユニットに配置してもよい。また、パッキング処理部２４Ｂは、パッキングユニットにおける、所定サイズ（例えば、６４Ｂｙｔｅ、５１２Ｂｙｔｅなど）の単位に相当する位置ごとに、圧縮クラスタの先頭を合わせて配置することで、パッキングユニットを生成してもよい。
【００５１】
また、所定サイズの単位に相当する位置ごとに、圧縮クラスタの先頭を併せて配置するときに、圧縮クラスタのサイズが該単位未満である場合がある。この場合、パッキング処理部２４Ｂは、圧縮クラスタの末尾から次の単位に相当する位置までの間を、パディング処理すればよい。パディング処理とは、０または任意データによって不足領域を埋める処理である。
【００５２】
パッキング処理部２４Ｂが、該所定サイズの単位として、バイト単位、または、より小さいサイズの単位を用いると、パッキングによるデータ増加を抑制することができる。一方パッキング処理部２４Ｂが、より大きいサイズの該所定サイズの単位を用いると、ヘッダ情報のデータ量の削減を図ることができる。
【００５３】
なお、パッキング処理部２４Ｂは、１つのパッキングユニットに詰め込み可能な圧縮クラスタ数の最大値を予め設定してもよい。そして、パッキング処理部２４Ｂは、この最大値に相当する数の圧縮クラスタを、１つのパッキングユニットとして生成してもよい。そして、最大値の数の圧縮クラスタを１つのパッキングユニットとして生成した後に、次に取得した圧縮クラスタは、次のパッキングユニットに割当てればよい。
【００５４】
なお、ＮＡＮＤ型フラッシュメモリ１８における物理ブロックの末尾に位置するパッキングユニットの、末尾に配置された圧縮クラスタの末尾が、該パッキングユニットからはみ出す場合がある。
【００５５】
ＮＡＮＤ型フラッシュメモリ１８に対する消去は、物理ブロック単位で行われる。このため、１つの圧縮クラスタが、複数の物理ブロックに跨いで配置されていると、物理ブロックの消去効率や、物理ブロックの再利用（ＧＣ（Ｇａｒｂａｇｅ  Ｃｏｌｌｅｃｔｉｏｎ）処理）の処理効率が低下する。
【００５６】
そこで、この場合、パッキング処理部２４Ｂは、該パッキングユニットに該圧縮クラスタを詰め込まずに、該圧縮クラスタを、次の物理ブロックのパッキングユニットに配置してもよい。なお、次の物理ブロックは、次の書込み先となる他の物理ブロックである。なお、次の物理ブロックは、ＧＣ処理の関係上、アドレス順に限定されない。
【００５７】
このように圧縮クラスタをパッキング処理することで、パッキング効率は低下するものの、ＮＡＮＤ型フラッシュメモリ１８へのランダムアクセス速度の低下を防ぐことができる。
【００５８】
また、ＮＡＮＤ型フラッシュメモリ１８における物理ページの末尾に位置するパッキングユニットの、末尾に配置された圧縮クラスタの末尾が、該パッキングユニットからはみ出す場合がある。
【００５９】
１つの圧縮クラスタが、複数の物理ページに跨いで配置されていると、当該圧縮クラスタを読出すためには、２つの物理ページをセル・アレイから読み出す必要が生じる。このため、ＮＡＮＤ型フラッシュメモリ１８へのランダムアクセス時の読出速度が低下する場合がある。
【００６０】
そこで、この場合、パッキング処理部２４Ｂは、該パッキングユニットに該圧縮クラスタを詰め込まずに、該圧縮クラスタを、次の物理ページのパッキングユニットに配置してもよい。このように圧縮クラスタをパッキング処理することで、パッキング効率は低下するものの、ＮＡＮＤ型フラッシュメモリ１８へのランダムアクセス速度の低下を防ぐことができる。
【００６１】
なお、パッキングユニットに含まれるヘッダ情報は、該パッキングユニットに含まれる圧縮クラスタの長さ（データ長）を示す長さ情報、および、該パッキングユニットに先頭が含まれる圧縮クラスタの数、の少なくとも一方を、更に含んでいてもよい。
【００６２】
具体的には、パッキングユニットに含まれるヘッダ情報は、該パッキングユニットに先頭が含まれる圧縮クラスタの数を含む。また、該ヘッダ情報は、該パッキングユニットに先頭が含まれる圧縮クラスタの各々の、ＬＣＡ（論理アドレス）と、オフセット（パッキングユニット内における圧縮クラスタの位置情報）と、圧縮クラスタの長さ情報と、を対応づけた情報である。
【００６３】
圧縮クラスタのサイズは、圧縮前のクラスタや圧縮方法によって異なるものとなる。このため、ヘッダ情報に、圧縮クラスタの長さ情報を含めることで、圧縮クラスタの読出し時には、該長さ情報の長さごとに圧縮クラスタを抽出することができる。このため、データの読出時には、ＮＡＮＤ型フラッシュメモリ１８から読出したデータから、圧縮データを容易に抽出することができる。
【００６４】
図３〜図５は、ヘッダ情報のデータ構成の一例を示す模式図である。
【００６５】
例えば、図３に示すように、ヘッダ情報は、圧縮クラスタの数（ｎｕｍ＿ｅｎｔｒｙ）を含む。また、ヘッダ情報は、該ヘッダ情報を含むパッキングユニットに含まれる圧縮クラスタの各々の、ＬＣＡ（論理アドレス）と、オフセット（位置情報：ｃｏｍｐ＿ｃｌｓｔ＿ｏｆｆｓｅｔ［ｉ］）と、圧縮クラスタの長さ情報（ｃｏｍｐ＿ｃｌｓｔ＿ｌｅｎ［ｉ］）と、を含む。
【００６６】
なお、ヘッダ情報は、図４に示すデータ構成であってもよい。図４に示すように、ヘッダ情報は、図３に示すヘッダ情報における圧縮クラスタの長さ情報（ｃｏｍｐ＿ｃｌｓｔ＿ｌｅｎ［ｉ］）に代えて、パッキングユニットの末尾に配置された圧縮クラスタの長さ情報（ｃｏｍｐ＿ｃｌｓｔ＿ｌｅｎ［ｎｕｍ＿ｅｎｔｒｙ］）を含む構成であってもよい。
【００６７】
また、ヘッダ情報は、パッキングユニットの末尾に配置された圧縮クラスタの長さ情報（ｃｏｍｐ＿ｃｌｓｔ＿ｌｅｎ［ｎｕｍ＿ｅｎｔｒｙ］）に代えて、パッキングユニットの末尾に配置された圧縮クラスタの末尾の位置を示す位置情報を含む構成であってもよい。
【００６８】
パッキングユニットに含まれる圧縮データの末尾の位置は、次に配置された圧縮クラスタの先頭の位置に一致する。そして、パッキングユニットに含まれる圧縮データの長さは、これらの末尾の位置と先頭の位置とから算出可能である。このため、図４に示すデータ構成のヘッダ情報とすることで、パッキングユニットに含まれる各圧縮クラスタの位置と長さ情報を、効率的にヘッダ情報として保持することができる。
【００６９】
なお、ヘッダ情報に含まれる、圧縮クラスタの数（ｎｕｍ＿ｅｎｔｒｙ）を示す情報は、所定のビット数による整数で符号化してもよいし、任意の可変長符号（例えばユーナリー符号等）を用いて符号化してもよい。この所定のビット数は、パッキングユニットに割り当てられる圧縮クラスタの最大値に基づいて、設定すればよい。また、可変長符号を用いて符号化する場合、パッキングユニットに割当てられる最大値までの整数を表現可能なトランケーテッド符号（例えばトランケーテッド・ユーナリー符号等）を用いてもよい。
【００７０】
また、上記位置情報（オフセット）や長さ情報は、バイト数によって示してもよい。圧縮クラスタの位置情報（オフセット）は、例えば、該圧縮クラスタを含むパッキングユニットの先頭から該圧縮クラスタの先頭位置までのバイト数で表せばよい。また、圧縮クラスタの位置情報（オフセット）は、例えば、該圧縮クラスタを含むパッキングユニットの末尾から該圧縮クラスタの先頭位置までのバイト数であってもよい。
【００７１】
また、上述したように、パッキング処理部２４Ｂが、バイト単位ではなく、所定のサイズ（８Ｂｙｔｅ、５１２Ｂｙｔｅなど）の単位で、圧縮クラスタをパッキングする場合がある。この場合、パッキング処理部２４Ｂは、圧縮クラスタの位置情報（オフセット）や圧縮クラスタの長さ情報として、この所定のサイズに対応する上位ビット部分のみをヘッダ情報に登録してもよい。
【００７２】
例えば、５１２Ｂｙｔｅを所定のサイズの単位とすると仮定する。５１２Ｂｙｔｅ＝２９Ｂｙｔｅである。この場合、パッキング処理部２４Ｂは、バイト数によって示される位置情報（オフセット）の下位９ビット分を除いた部分を、位置情報（オフセット）として、ヘッダ情報に登録してもよい。これにより、パッキングの単位が大きい場合であっても、ヘッダ情報のデータ量を削減することができる。
【００７３】
なお、上述したヘッダ情報のデータ構成は、一例であり、類似の範囲で変更・並び替えを行ってもよい。
【００７４】
また、上述したように、圧縮部２４Ａが圧縮処理しても、データサイズが小さくならない、または、データサイズが大きくなる場合がある。この場合、パッキング処理部２４Ｂは、圧縮部２４Ａから、圧縮クラスタに代えて、元のクラスタと、非圧縮であることを示すフラグと、を受付ける。
【００７５】
パッキング処理部２４Ｂは、非圧縮であることを示すフラグを受付けた場合、該フラグと共に受付けたクラスタを、次のパッキングユニットの先頭に配置してもよい。
【００７６】
例えば、パッキングユニットのサイズが、（非圧縮の）クラスタのサイズと同一である場合がある。この場合、パッキング処理部２４Ｂは、単一のパッキングユニットに、このクラスタを配置すればよい。
【００７７】
この場合には、パッキング処理部２４Ｂは、図５に示すヘッダ情報を生成すればよい。例えば、図５の“ｎｏ＿ｃｏｍｐｒｅｓｓｉｏｎ＿ｆｌａｇ”が真である場合、パッキング処理部２４Ｂは、当該パッキングユニットのデータ部分に、非圧縮のクラスタを格納する。
【００７８】
なお、パッキング処理部２４Ｂは、生成中のパッキングユニットに空き領域が有る場合であっても、該フラグを受付けた場合には、該フラグと共に受付けた非圧縮のクラスタを、次のパッキングユニットに割当てればよい。
【００７９】
この場合、該パッキングユニットの前の、空き領域の有るパッキングユニットについて、パッキング処理部２４Ｂは、空き領域をそのままとしてもよいし、該空き領域内に収まる他の圧縮クラスタを新たに取得した場合に、該圧縮クラスタを該パッキングユニットに配置してもよい。
【００８０】
次に、書込部２４Ｃについて説明する。書込部２４Ｃは、パッキング処理部２４Ｂから受け付けたパッキングユニットを、ＮＡＮＤ型フラッシュメモリ１８へ書込む。また、書込部２４Ｃは、管理情報を更新する。
【００８１】
書込部２４Ｃは、パッキング処理部２４Ｂからパッキングユニットを受付ける。書込部２４Ｃは、物理ページに相当する１以上のパッキングユニットを蓄積する。書込部２４Ｃは、物理ページに相当するパッキングユニットを蓄積すると、ＮＡＮＤ型フラッシュメモリ１８に、該物理ページを書込む。
【００８２】
詳細には、書込部２４Ｃは、該物理ページの書込み命令を、メモリ・インターフェース部１６を介してＮＡＮＤ型フラッシュメモリ１８へ送信する。これによって、ＮＡＮＤ型フラッシュメモリ１８では、受付けた物理ページをＮＡＮＤ型フラッシュメモリ１８のセル・アレイに書込む。
【００８３】
また、書込部２４Ｃは、ＮＡＮＤ型フラッシュメモリ１８における、該パッキングユニットの書込まれた物理アドレスを用いて、ＬＵＴ（ルックアップテーブル）１８Ａを更新する。
【００８４】
ＬＵＴ１８Ａは、管理情報の一例である。ＬＵＴ１８Ａは、圧縮クラスタの論理アドレス（ＬＣＡ）と、ＮＡＮＤ型フラッシュメモリ１８における、該圧縮クラスタを含むパッキングユニットの物理アドレス（以下、ユニットアドレスと称する場合がある）と、を対応づけたものである。
【００８５】
なお、ＮＡＮＤ型フラッシュメモリ１８には、追記処理を行うことが出来ない。このため、書込部２４Ｃは、圧縮クラスタの論理アドレスに対応するセルに対して直接書込みを実施する代わりに、書込みタイミングにおいて書込み可能な位置に、書込みを実施する。そして、書込部２４Ｃは、圧縮クラスタの論理アドレス（ＬＣＡ）と、ＮＡＮＤ型フラッシュメモリ１８における書込位置であるユニットアドレスと、の対応を示す管理情報（ＬＵＴ１８Ａ）を更新する。
【００８６】
ＬＵＴ１８Ａは、ＮＡＮＤ型フラッシュメモリ１８の領域の一部に格納される。そして、本実施の形態では、ＬＵＴ１８Ａには、圧縮クラスタの論理アドレスに対応する、ＮＡＮＤ型フラッシュメモリ１８における書込位置として、該圧縮クラスタを含むパッキングユニットの物理アドレス（ユニットアドレス）が、格納される。
【００８７】
書込部２４Ｃは、ＬＵＴ１８Ａについて、ＮＡＮＤ型フラッシュメモリ１８に書込んだパッキングユニットに含まれる、圧縮クラスタの各々の論理アドレス（ＬＣＡ）に対応するユニットアドレスを、該圧縮クラスタを含むパッキングユニットの最新の物理アドレス（ユニットアドレス）に更新する。
【００８８】
書込制御部２４による、上述した書込制御により、ホスト装置１２から受け付けた書込対象のデータを圧縮した、圧縮クラスタのパッキングユニットが、ＮＡＮＤ型フラッシュメモリ１８に記憶される。そして、書込制御部２４によって、ＬＵＴ１８Ａが更新される。
【００８９】
ここで、クラスタを圧縮せずにＮＡＮＤ型フラッシュメモリ１８へ記憶する場合、クラスタサイズは固定である。このため、この場合、ＬＵＴ１８Ａで管理する物理アドレスは、固定のクラスタサイズに応じた位置を参照可能なものであればよい。
【００９０】
一方、本実施の形態のストレージ装置１０では、圧縮クラスタを、ＮＡＮＤ型フラッシュメモリ１８へ記憶する。クラスタの圧縮率は、クラスタや圧縮方法などに応じて異なる。このため、ＮＡＮＤ型フラッシュメモリ１８における圧縮クラスタの位置（先頭位置）は不規則である。このため、圧縮クラスタの位置情報には、非圧縮のクラスタをＮＡＮＤ型フラッシュメモリ１８へ記憶する場合に比べて、より詳細な情報が必要となる。
【００９１】
本実施の形態のストレージ装置１０では、上述したように、ＮＡＮＤ型フラッシュメモリ１８における、圧縮クラスタを含むパッキングユニットの物理アドレス（ユニットアドレス）を、圧縮クラスタの論理アドレスに対応づけて管理する。そして、パッキングユニットのヘッダ情報に、圧縮クラスタの論理アドレスと、パッキングユニット内における圧縮クラスタの位置を示す位置情報（以下、オフセットと称する場合がある）と、を対応づけて格納する。
【００９２】
このため、ＬＵＴ１８Ａのデータサイズの増加や、ＬＵＴ１８Ａに書換えるデータ量の増加、を抑制することができる。このため、ＮＡＮＤ型フラッシュメモリ１８の劣化を抑制することができる。
【００９３】
次に、読出制御部２２について説明する。読出制御部２２は、読出制御部、および、読出制御装置の一例である。
【００９４】
読出制御部２２は、ホスト装置１２から受付けた、読出対象のデータの論理アドレス（ＬＢＡ）に対応する圧縮クラスタを、ＮＡＮＤ型フラッシュメモリ１８から読出し、伸長した後に、ホスト装置１２へ出力する。
【００９５】
読出制御部２２は、変換部２２Ａと、読出部２２Ｂと、解析部２２Ｃと、伸長部２２Ｄと、を含む。
【００９６】
図６は、読出制御の概略の説明図である。
【００９７】
変換部２２Ａは、ホスト装置１２から、読出要求を受付ける。読出要求は、読出対象の圧縮クラスタの論理アドレス（ＬＢＡ）を含む。変換部２２Ａは、受付けた論理アドレス（ＬＢＡ）を、ＮＡＮＤ型フラッシュメモリ１８の物理アドレスに変換する。
【００９８】
変換部２２Ａは、ＬＵＴ１８Ａを用いて、論理アドレス（ＬＢＡ）を物理アドレスに変換する。
【００９９】
上述したように、ＬＵＴ１８Ａには、圧縮クラスタの論理アドレス（ＬＣＡ）に対応する、該圧縮クラスタを含むパッキングユニットの物理アドレス（ユニットアドレス）が、格納されている。このため、変換部２２Ａは、ＮＡＮＤ型フラッシュメモリ１８からＬＵＴ１８Ａを読取る。そして、変換部２２Ａは、ホスト装置１２から取得したＬＢＡの上位ビット部分であるＬＣＡに対応する、ユニットアドレス（パッキングユニットの物理アドレス）を、ＬＵＴ１８Ａから特定する。これにより、変換部２２Ａは、受付けた論理アドレス（ＬＢＡ）を、ＮＡＮＤ型フラッシュメモリ１８の物理アドレス（ユニットアドレス）に変換する。
【０１００】
変換部２２Ａは、圧縮クラスタの論理アドレス（ＬＣＡ）と、変換した物理アドレス（ユニットアドレス）と、を読出部２２Ｂへ出力する。
【０１０１】
読出部２２Ｂは、ＮＡＮＤ型フラッシュメモリ１８における、変換部２２Ａから受付けた物理アドレス（ユニットアドレス）によって示される位置の、パッキングユニットに含まれるデータを読出す。
【０１０２】
図１に戻り、説明を続ける。解析部２２Ｃは、読出部２２Ｂによって読み出されたパッキングユニットに含まれるデータの内、ヘッダ情報を解析する。そして、解析部２２Ｃは、該パッキングユニットにおける、読出対象の圧縮クラスタの位置情報（オフセット）を取得する。
【０１０３】
そして、読出部２２Ｂは、パッキングユニットにおける、解析部２２Ｃで取得した位置情報によって示される位置の圧縮クラスタを、読出対象の圧縮クラスタとして、伸長部２２Ｄへ出力する。
【０１０４】
ここで、本実施の形態では、解析部２２Ｃは、読出部２２Ｂによる、パッキングユニットに含まれるデータの読出しに並行して、ヘッダ情報の解析を行う。
【０１０５】
そして、読出部２２Ｂは、解析部２２Ｃで取得した位置情報が第１条件を満たすと判定した場合、パッキングユニットから、少なくとも該位置情報によって示される位置の圧縮クラスタの読出しを終了するまで、データの読出しを継続する。一方、読出部２２Ｂは、解析部２２Ｃで取得した位置情報が第２条件を満たすと判定した場合、パッキングユニットにおける該位置情報に示される位置へ読出位置を変更し、該読出位置から圧縮クラスタを読出す。
【０１０６】
読出部２２Ｂおよび解析部２２Ｃの処理について、図７および図８を用いて説明する。
【０１０７】
図７は、読出部２２Ｂによるデータの読出、および、解析部２２Ｃによる解析、の説明図である。図７は、解析部２２Ｃで取得した位置情報が第１条件を満たす場合を示した。
【０１０８】
第１条件は、解析部２２Ｃで取得した位置情報（オフセット）によって示される位置が、ヘッダ情報に隣接する位置である場合である。また、第１条件は、解析部２２Ｃで取得した位置情報（オフセット）によって示される位置がヘッダ情報に非隣接の位置であって、且つ、ヘッダ情報の末尾から該位置情報によって示される位置までの間隔が閾値以下の場合である。
【０１０９】
例えば、読出部２２Ｂは、ＮＡＮＤ型フラッシュメモリ１８へ、読出し命令を発行する（ステップＳ１）。読出し命令は、ＮＡＮＤ型フラッシュメモリ１８における、変換部２２Ａから受付けた、圧縮クラスタの論理アドレス（ＬＣＡ）と、変換した物理アドレス（ユニットアドレス）と、読出信号と、を含む。
【０１１０】
読出し命令を受付けたＮＡＮＤ型フラッシュメモリ１８は、読出し命令に含まれるユニットアドレスに位置するパッキングユニットを含む、物理ページを、セル・アレイからデータ・バッファへ読出す（ステップＳ２）。そして、ＮＡＮＤ型フラッシュメモリ１８は、データ・バッファに読出した物理ページに含まれる、読出し命令に含まれるユニットアドレスに位置するパッキングユニットのデータの、読出部２２Ｂへの順次出力を開始する（ステップＳ３）。すなわち、ステップＳ３では、読出部２２Ｂが、パッキングユニットのデータを、順次読出す。
【０１１１】
読出部２２Ｂは、ＮＡＮＤ型フラッシュメモリ１８から順次出力される、パッキングユニットのデータと、変換部２２Ａから受付けた圧縮クラスタの論理アドレス（ＬＣＡ）と、を解析部２２Ｃへ出力する。
【０１１２】
解析部２２Ｃは、読出部２２Ｂによるパッキングユニットのデータの読出し（ステップＳ３）に並行して、読出部２２Ｂによって読み出されたデータの内のヘッダ情報を解析する（ステップＳ４）。詳細には、解析部２２Ｃは、読出部２２Ｂから受け付けたヘッダ情報から、読出部２２Ｂから受け付けた論理アドレス（ＬＣＡ）に対応する、圧縮クラスタの位置情報（オフセット）を読取る。このとき、解析部２２Ｃは、該論理アドレス（ＬＣＡ）に対応する他の情報（例えば、圧縮クラスタのデータ長など）を、併せて該ヘッダ情報から読取ってもよい。
【０１１３】
そして、読出部２２Ｂは、解析部２２Ｃから、読出対象の圧縮クラスタの位置情報（オフセット）を受付ける。なお、読出部２２Ｂは、少なくとも、読出対象の圧縮クラスタの位置情報を解析部２２Ｃから受付けるまでの間、パッキングユニットのデータの読取りを継続してよい。
【０１１４】
そして、読出部２２Ｂは、解析部２２Ｃから受付けた位置情報が、第１条件を満たすと判定したとする。この場合、該パッキングユニットから、少なくとも該位置情報によって示される位置の圧縮クラスタの読出しを終了するまで、データの読出を継続する（ステップＳ３’）。
【０１１５】
このため、読出対象の圧縮クラスタの、パッキングユニットにおける位置情報（オフセット）によって示される位置が、該パッキングユニットのヘッダ情報に隣接する位置である場合、読出部２２Ｂは、データの読出を継続する。また、読出対象の圧縮クラスタの、パッキングユニットにおける位置情報（オフセット）によって示される位置がヘッダ情報に非隣接の位置であって、且つ、ヘッダ情報の末尾から該位置情報によって示される位置までの間隔が閾値以下の場合、読出部２２Ｂは、データの読出を継続する。この閾値には、後述する第２条件で用いる閾値と同じ閾値を用いればよい。
【０１１６】
そして、読出部２２Ｂは、解析部２２Ｃから取得した位置情報によって示される位置の圧縮クラスタを読出すと、読出した圧縮クラスタを、伸長部２２Ｄへ出力する（ステップＳ５）。伸長部２２Ｄは、圧縮クラスタを伸長したデータを、ホスト装置１２へ出力する（ステップＳ６）。
【０１１７】
次に、第２条件を満たす場合を説明する。図８は、読出部２２Ｂによるデータの読出、および、解析部２２Ｃによる解析、の説明図である。図８には、解析部２２Ｃで取得した位置情報が第２条件を満たす場合を示した。
【０１１８】
第２条件は、解析部２２Ｃで取得した位置情報（オフセット）によって示される位置がヘッダ情報に非隣接の位置であって、且つ、ヘッダ情報の末尾から該位置情報によって示される位置までの間隔が閾値を超える場合である。
【０１１９】
この閾値には、予め定めた値を用いればよい。具体的には、第１条件および第２条件で用いる閾値には、解析部２２Ｃがヘッダ情報の解析に要する時間(例えば平均時間)と、読出部２２Ｂが読出位置の変更に要する時間と、の合計時間の間に、読出部２２Ｂが読出すデータ量を用いればよい。
【０１２０】
読出部２２Ｂは、ＮＡＮＤ型フラッシュメモリ１８へ、読出し命令を発行する（ステップＳ１０）。読出し命令は、ＮＡＮＤ型フラッシュメモリ１８における、変換部２２Ａから受付けた、圧縮クラスタの論理アドレス（ＬＣＡ）と、変換した物理アドレス（ユニットアドレス）と、読出信号と、を含む。
【０１２１】
読出し命令を受付けたＮＡＮＤ型フラッシュメモリ１８は、読出し命令に含まれるユニットアドレスに位置するパッキングユニットを含む物理ページを、セル・アレイからデータ・バッファへ読出す（ステップＳ１１）。そして、ＮＡＮＤ型フラッシュメモリ１８は、データ・バッファに読出した物理ページに含まれる、読出し命令に含まれるユニットアドレスに位置するパッキングユニットのデータの、読出部２２Ｂへの順次出力を開始する（ステップＳ１２）。すなわち、ステップＳ１２では、読出部２２Ｂが、パッキングユニットのデータを、順次読出す。
【０１２２】
読出部２２Ｂは、ＮＡＮＤ型フラッシュメモリ１８から順次出力される、パッキングユニットのデータと、変換部２２Ａから受付けた圧縮クラスタの論理アドレス（ＬＣＡ）と、を解析部２２Ｃへ出力する。
【０１２３】
解析部２２Ｃは、読出部２２Ｂによるパッキングユニットのデータの読出し（ステップＳ１２）に並行して、読出部２２Ｂによって読み出されたデータの内のヘッダ情報を解析する（ステップＳ１３）。詳細には、解析部２２Ｃは、読出部２２Ｂから受け付けたヘッダ情報から、読出部２２Ｂから受け付けた論理アドレス（ＬＣＡ）に対応する、圧縮クラスタの位置情報（オフセット）を読取る。このとき、解析部２２Ｃは、該論理アドレス（ＬＣＡ）に対応する他の情報（例えば、圧縮クラスタのデータ長など）を、併せて該ヘッダ情報から読取ってもよい。
【０１２４】
そして、読出部２２Ｂは、解析部２２Ｃから、読出対象の圧縮クラスタの位置情報（オフセット）を受付ける。なお、読出部２２Ｂは、少なくとも、読出対象の圧縮クラスタの位置情報を解析部２２Ｃから受付けるまでの間、パッキングユニットのデータの読出しを継続してよい。
【０１２５】
そして、読出部２２Ｂは、解析部２２Ｃから受付けた位置情報が、第２条件を満たすと判定した場合、該パッキングユニットにおける、該位置情報に示される位置へ読出位置を変更し（ステップＳ１４）、該読出位置から圧縮クラスタを読出す（ステップＳ１５）。
【０１２６】
そして、読出部２２Ｂは、読出した圧縮クラスタを、伸長部２２Ｄへ出力する（ステップＳ１６）。伸長部２２Ｄは、圧縮クラスタを伸長し、ホスト装置１２へ出力する（ステップＳ１７）。
【０１２７】
なお、図７および図８に示す動作は、ストレージコントローラ２０からＮＡＮＤ型フラッシュメモリ１８に対し、各種の命令を発行することで行われる。具体的な命令は、利用するＮＡＮＤ型フラッシュメモリ１８の仕様に依存してよい。例えば、ＪＥＤＥＣ  ２３０Ｂ標準に対応したＮＡＮＤ型フラッシュメモリ１８を用いる場合、セル・アレイからデータ・バッファへのデータ読出しと、バッファからストレージコントローラ２０へのデータ読出しには、Ｐａｇｅ  Ｒｅａｄ命令（００ｈ−３０ｈ）を用いればよい。また、読出位置の変更には、Ｃｈａｎｇｅ  Ｒｅａｄ  Ｃｏｌｕｍｎ命令（０５ｈ−Ｅ０ｈ）を用いればよい。その他の使用のＮＡＮＤ型フラッシュメモリ１８を用いる場合には、これらの命令と同一または類似の機能の命令を、ストレージコントローラ２０からＮＡＮＤ型フラッシュメモリ１８へ発行することで、上記動作を実現すればよい。
【０１２８】
なお、上述したように、パッキングユニットのヘッダ情報が、圧縮クラスタの長さ情報を含む場合がある。この場合、読出部２２Ｂは、解析部２２Ｃから取得した、読出対象の圧縮クラスタの位置情報（オフセット）の位置から、該圧縮クラスタの長さ情報に相当する位置（すなわち末尾）までを読出たときに、ＮＡＮＤ型フラッシュメモリ１８からのデータ読出しを終了すればよい。
【０１２９】
また、パッキングユニットのヘッダ情報に、圧縮クラスタの長さ情報が含まれていない場合がある。この場合、読出部２２Ｂは、所定のワースト符号量までの読出しと、伸長部２２Ｄによる圧縮クラスタの伸長処理の完了と、の内の早い方のタイミングで、読出しを終了すればよい。
【０１３０】
ワースト符号量とは、圧縮部２４Ａによって圧縮された圧縮クラスタの内、サイズの最も大きい圧縮クラスタの符号量である。ワースト符号量は、圧縮部２４Ａで用いる圧縮方式に応じて規定される。なお、上述したように、圧縮部２４Ａが、圧縮率が閾値未満である場合に、圧縮クラスタに代えて、元のクラスタと、非圧縮であることを示すフラグと、を出力する場合がある。この場合には、ワースト符号量は、このクラスタのサイズ（または、クラスタのサイズ＋フラグのビット数）とすればよい。
【０１３１】
また、読出対象となる圧縮クラスタが、２つのパッキングユニットに跨って配置されている場合がある。この場合、後段のパッキングユニットの先頭部分にヘッダ情報が位置している。このため、読出部２２Ｂは、前段のパッキングユニットの末尾まで、読出し対象の圧縮クラスタを読出し、次のパッキングユニットの先頭部分を解析部２２Ｃへ出力する。ここでも、解析部２２Ｃによるヘッダ情報の解析に並行して、読出部２２Ｂは、パッキングユニットのデータの読出を継続する。そして、読出部２２Ｂは、後段のパッキングユニットのヘッダ情報に含まれるヘッダサイズに基づいて、ヘッダ情報を除去し、圧縮クラスタの後段を前段に続けて伸長部２２Ｄへ出力すればよい。
【０１３２】
次に、伸長部２２Ｄについて説明する。伸長部２２Ｄは、読出部２２Ｂから圧縮クラスタを受付ける。伸長部２２Ｄは、圧縮クラスタを伸長し、クラスタ（すなわち、読出対象のデータ）を生成する。そして、伸長部２２Ｄは、クラスタを、ホスト・インターフェース部１４を介してホスト装置１２へ出力する。
【０１３３】
なお、伸長部２２Ｄによる伸長処理は、圧縮部２４Ａが行う圧縮処理と対になるものであればよい。例えば、圧縮部２４ＡがＤｅｆｌａｔｅによる圧縮処理を実施すると仮定する。この場合、伸長部２２Ｄは、Ｄｅｆｌａｔｅによる伸長処理を圧縮クラスタに適用することで、伸長処理を行えばよい。
【０１３４】
次に、ストレージ装置１０で実行する書込処理の手順の一例を説明する。図９は、書込処理の手順の一例を示す、フローチャートである。
【０１３５】
まず、書込制御部２４が、ホスト・インターフェース部１４を介してホスト装置１２から、書込み対象のデータ（クラスタ）と、論理アドレス（ＬＢＡ）と、を含む書込要求を取得する（ステップＳ２００）。
【０１３６】
次に、圧縮部２４Ａが、ステップＳ２００で取得した書込対象のデータ（クラスタ）を圧縮し、圧縮クラスタを生成する（ステップＳ２０２）。次に、パッキング処理部２４Ｂが、ステップＳ２０２で生成された圧縮クラスタと、ヘッダ情報と、を含むパッキングユニットを生成する（ステップＳ２０４）。
【０１３７】
次に、書込部２４Ｃが、ステップＳ２０４で生成したパッキングユニットをＮＡＮＤ型フラッシュメモリ１８へ書込み（ステップＳ２０６）、ＬＵＴ１８Ａを更新する（ステップＳ２０８）。そして、本ルーチンを終了する。
【０１３８】
次に、ストレージ装置１０で実行する読出処理の手順の一例を説明する。図１０は、読出処理の手順の一例を示す、フローチャートである。
【０１３９】
まず、変換部２２Ａが、読出し対象の圧縮クラスタの論理アドレス（ＬＢＡ）を取得する（ステップＳ３００）。次に、変換部２２Ａが、ステップＳ３００で取得した論理アドレス（ＬＢＡの上位ビット部分であるＬＣＡ）を、ＮＡＮＤ型フラッシュメモリ１８における物理アドレス（ユニットアドレス）に変換する（ステップＳ３０２）。
【０１４０】
次に、読出部２２Ｂが、ステップＳ３０２で変換された物理アドレスの位置のパッキングユニットのデータの読出しを開始する（ステップＳ３０４）。解析部２２Ｃは、ステップＳ３０４で開始されたデータの読出に並行して、該データに含まれるヘッダ情報を解析する（ステップＳ３０６）。ステップＳ３０６の処理によって、解析部２２Ｃは、読出し対象の圧縮クラスタの位置情報（オフセット）を取得する。上述したように、このとき、解析部２２Ｃは、該圧縮クラスタのデータ長情報も取得してもよい。
【０１４１】
次に、読出部２２Ｂは、ステップＳ３０６で解析された位置情報が第１条件を満たすか第２条件を満たすかを判定する（ステップＳ３０８）。第１条件を満たすと判定した場合（ステップＳ３０８：Ｙｅｓ）、ステップＳ３１０へ進む。
【０１４２】
ステップＳ３１０では、読出部２２Ｂは、パッキングユニットのデータの読出を継続し（ステップＳ３１０）、ステップＳ３１４へ進む。
【０１４３】
一方、ステップＳ３０８で第２条件を満たすと判定した場合（ステップＳ３０８：Ｎｏ）、ステップＳ３１２へ進む。ステップＳ３１２では、読出部２２Ｂは、パッキングユニットにおける該位置情報に示される位置へ読出位置を変更し、該読出位置から圧縮クラスタのデータを順次読出す（ステップＳ３１２）。そして、ステップＳ３１４へ進む。
【０１４４】
読出部２２Ｂによって、ステップＳ３０６で取得した位置情報によって示される位置の圧縮クラスタが読み出されると（ステップＳ３１４）、伸長部２２Ｄは、該圧縮クラスタを伸長する（ステップＳ３１６）。
【０１４５】
伸長部２２Ｄは、伸長処理によって得られたクラスタを、ホスト・インターフェース部１４を介してホスト装置１２へ出力する（ステップＳ３１８）。そして、本ルーチンを終了する。
【０１４６】
以上説明したように、本実施の形態のストレージ装置１０（読出制御部２２）は、変換部２２Ａと、読出部２２Ｂと、解析部２２Ｃと、を備える。変換部２２Ａは、読出対象の圧縮クラスタの論理アドレスを、ＮＡＮＤ型フラッシュメモリ１８（不揮発性メモリ）の物理アドレスに変換する。読出部２２Ｂは、ＮＡＮＤ型フラッシュメモリ１８から、該物理アドレスによって示される位置のパッキングユニットに含まれるデータを読出す。解析部２２Ｃは、パッキングユニットに含まれるデータの読出に並行して、パッキングユニットに含まれるヘッダ情報を解析し、パッキングユニットにおける、読出対象の圧縮クラスタの位置情報を取得する。
【０１４７】
このように、本実施の形態のストレージ装置１０では、読出部２２ＢによるＮＡＮＤ型フラッシュメモリ１８からのデータの読出しに並行して、解析部２２Ｃが、パッキングユニットのヘッダ情報を解析する。言い換えると、本実施の形態のストレージ装置１０では、ＮＡＮＤ型フラッシュメモリ１８から読出したデータの解析中に、並行して、ＮＡＮＤ型フラッシュメモリ１８からのデータの読出しを継続する。
【０１４８】
このため、解析部２２Ｃによるヘッダ情報の解析に起因する、読出部２２Ｂによるランダムアクセス性能の低下を抑制することができる。また、本実施の形態では、ＮＡＮＤ型フラッシュメモリ１８には、クラスタを圧縮した圧縮クラスタが記憶される。このため、ＮＡＮＤ型フラッシュメモリ１８から読出すデータ量の削減を図ることができ、読出速度の向上を図ることができる。すなわち、本実施の形態のストレージ装置１０では、ＮＡＮＤ型フラッシュメモリ１８からのデータ読出し時の遅延量の削減と、ランダム読出し性能の改善を実現することができる。
【０１４９】
従って、本実施の形態の読出制御部２２（ストレージ装置１０）は、不揮発性メモリ（ＮＡＮＤ型フラッシュメモリ１８）へのアクセス速度の低下を抑制することができる。
【０１５０】
また、本実施の形態のストレージ装置１０の変換部２２Ａは、ＬＵＴ１８Ａ（管理情報）を用いて、読出対象の圧縮クラスタの論理アドレスを、ＮＡＮＤ型フラッシュメモリ１８（不揮発性メモリ）における該圧縮クラスタを含むパッキングユニットの位置を示す物理アドレスに変換する。また、パッキングユニットに含まれるヘッダ情報は、該ヘッダ情報を含むパッキングユニットに含まれる、圧縮クラスタの位置情報（オフセット）と、圧縮クラスタの論理アドレスと、を含む。このため、ＬＵＴ１８Ａに記憶するデータ量の削減を図ることができる。
【０１５１】
ここで、ＬＵＴ１８Ａのサイズが大きくなるほど、キャッシュとして保持されるエントリ数が少なくなるため、ＮＡＮＤ型フラッシュメモリ１８へのアクセス速度、特に、ランダムリード時のアクセス速度が低下する場合があった。
【０１５２】
一方、本実施の形態のストレージ装置１０では、ＬＵＴ１８Ａとヘッダ情報に、上記情報を格納することから、上記効果に加えて、特に、ランダムリード時のアクセス速度の低下を抑制することができる。
【０１５３】
また、本実施の形態のストレージ装置１０では、特に圧縮効率の高い圧縮クラスタをＮＡＮＤ型フラッシュメモリ１８に記憶した場合に、特に効果的に、ＮＡＮＤ型フラッシュメモリ１８からのデータ読出速度の向上を図ることができる。
【０１５４】
また、本実施の形態のストレージ装置１０では、読出部２２Ｂは、位置情報（オフセット）が第１条件を満たすと判定した場合、パッキングユニットから、少なくとも位置情報によって示される位置の圧縮クラスタの読出しを終了するまで、データの読出を継続する。一方、読出部２２Ｂは、位置情報（オフセット）が第２条件を満たすと判定した場合、パッキングユニットにおける位置情報に示される位置へ読出位置を変更し、該読出位置から圧縮クラスタを読出す。
【０１５５】
このため、読出対象の圧縮クラスタがヘッダ情報に連続して配置されている場合、および、ヘッダ情報から離れて配置されている場合、の何れの場合であっても、ＮＡＮＤ型フラッシュメモリ１８からのデータ読出速度の低下を抑制することができる。また、ストレージ装置１０では、ヘッダ情報の解析に起因する遅れを低減することができ、ＮＡＮＤ型フラッシュメモリ１８からのデータの読出速度の低下を抑制することができる。
【０１５６】
また、上述したように、本実施の形態では、パッキング処理部２４Ｂは、非圧縮であることを示すフラグを受付けた場合（すなわち、圧縮率が閾値未満の場合）、該フラグと共に受付けた非圧縮のクラスタを、次のパッキングユニットの先頭に配置する。上述したように、例えば、パッキングユニットのサイズが、（非圧縮の）クラスタのサイズと同一である場合がある。この場合、パッキング処理部２４Ｂは、単一のパッキングユニットに、このクラスタを配置する。
【０１５７】
このような処理を行う場合、非圧縮のクラスタをＮＡＮＤ型フラッシュメモリ１８へ記憶する従来のストレージ装置と同様の形態で、クラスタが、ＮＡＮＤ型フラッシュメモリ１８へ書込まれる。ここで、上述したように、本実施の形態では、ヘッダ情報と圧縮クラスタとが隣接して配置されている場合、ヘッダ情報の解析に並行して、パッキングユニットに含まれるデータの読出しが行われる。
【０１５８】
このため、本実施の形態では、ヘッダ情報の解析による遅延を、抑制することができる。よって、圧縮率が閾値以下の圧縮クラスタに対応する、圧縮前のクラスタがＮＡＮＤ型フラッシュメモリ１８に記憶される場合であっても、従来技術に比べて、読出しに要する時間の遅延を抑制することができる。
【０１５９】
一方、書込部２４Ｃが、圧縮クラスタをＮＡＮＤ型フラッシュメモリ１８へ記憶する場合には、ＮＡＮＤ型フラッシュメモリ１８へ書込むデータ量、および、ＮＡＮＤ型フラッシュメモリ１８から読出すデータ量の削減を図ることができる。
【０１６０】
このため、本実施の形態のストレージ装置１０では、ＮＡＮＤ型フラッシュメモリ１８へのアクセス速度（書込み速度、読出し速度）の低下を抑制することができる。
【０１６１】
なお、書込制御部２４は、圧縮クラスタを、間隔を隔てずに詰めて、パッキングユニット内に配置することが好ましい。また、書込制御部２４は、１つの物理ページ内のパッキングユニットを、間隔を隔てずに詰めて配置することが好ましい（図２参照）。
【０１６２】
このように圧縮クラスタを配置することで、例えば、ＮＡＮＤ型フラッシュメモリ１８の規定容量に相当する書込み対象のデータを書き込む場合であっても、実際にＮＡＮＤ型フラッシュメモリ１８に書込まれる物理ページ数の削減を図ることができる。このため、圧縮クラスタに代えて、クラスタをＮＡＮＤ型フラッシュメモリ１８に書込む場合に比べて、ＮＡＮＤ型フラッシュメモリ１８内で余る、余剰領域が増加する。
【０１６３】
ＮＡＮＤ型フラッシュメモリ１８には、予備領域が設けられている。このため、ＮＡＮＤ型フラッシュメモリ１８は、実際には、規定容量を上回る記憶容量を有する。
【０１６４】
ストレージ装置１０では、上記余剰領域が発生した場合、該余剰領域を、上記予備領域として用いることが好ましい。
【０１６５】
予備領域は、不良ブロックなどに対する代替領域として用いたり、エラー訂正符号を示す情報を記憶する領域として用いたりすることが可能である。不良ブロックとは、例えば、読出し、書込み、または消去を正しく行うことができない、またはできなくなったブロックを示す。ストレージ装置１０は、上記余剰領域を予備領域として用いることで、ストレージ装置１０の信頼性向上を図ることができる。
【０１６６】
また、ストレージ装置１０は、予備領域を、ガベージ・コレクション（ＧＣ）の効率向上に用いてもよい。この場合、ストレージ装置１０は、ストレージ装置１０の信頼性や寿命の向上と、ＮＡＮＤ型フラッシュメモリ１８への書込みなどの処理速度の向上と、を図ることができる。
【０１６７】
ＧＣは、追記処理が出来ないＮＡＮＤ型フラッシュメモリ１８において、書込み可能な物理ブロックが不足した場合に、書込み済みのブロックから有効な（上書きされていない）クラスタを退避した上で消去し、書込み可能ブロックを新たに生成する処理である。ＧＣの対象となるブロックから退避された有効データは、書込み可能なブロックへ、再度書き込まれる。
【０１６８】
一般に、ＧＣ等に起因する書き込みを含めた、ＮＡＮＤ型フラッシュメモリ１８への総書き込み量（ホスト装置１２から取得した書込み対象のデータのデータ量と、ＧＣデータのデータ量と、の合計量）と、ホスト装置１２から取得した書込み対象のデータのデータ量と、の比を、Ｗｒｉｔｅ  Ａｍｐｌｉｆｉｃａｔｉｏｎ（ＷＡ）と称する。そして、このＷＡの値が大きいと、ＮＡＮＤ型フラッシュメモリ１８に対する総書き込み量が増加する。このため、ＷＡの値が大きいほど、ホスト装置１２からＮＡＮＤ型フラッシュメモリ１８への書込み速度の低下や、書込みストレスによるＮＡＮＤ型フラッシュメモリ１８の劣化速度の上昇、などが生じる。
【０１６９】
本実施の形態のストレージ装置１０では、上述のように、書込み対象のデータをクラスタ単位で圧縮した圧縮クラスタを、ＮＡＮＤ型フラッシュメモリ１８へ書込む。このため、ホスト装置１２からＮＡＮＤ型フラッシュメモリ１８へ書込まれるデータのデータサイズが、圧縮により小さくなる。そして、ＮＡＮＤ型フラッシュメモリ１８における、クラスタの圧縮により増加した予備領域についても、書込み可能な領域として用いることで、ＧＣの対象のブロックに含まれる有効データ数の期待値を小さくすることができる。このため、本実施の形態のストレージ装置１０では、ＷＡ値を小さくすることが可能となる。よって、ストレージ装置１０は、上記効果に加えて、ＮＡＮＤ型フラッシュメモリ１８の劣化抑止と、書込み速度の向上と、を図ることができる。
【０１７０】
（第２の実施の形態）
本実施の形態では、ＮＡＮＤ型フラッシュメモリ１８に、エラー訂正符号を付与したデータを書込む場合を説明する。
【０１７１】
図１１は、本実施の形態のストレージ装置１０Ａの一例を示す模式図である。なお、本実施の形態では、第１の実施の形態と同様の機能を示す構成には、同じ符号を付与し、詳細な説明を省略する場合がある。
【０１７２】
ストレージ装置１０Ａは、ホスト装置１２と通信可能に接続されている。ホスト装置１２は、第１の実施の形態と同様である。
【０１７３】
ストレージ装置１０Ａは、ホスト・インターフェース部１４と、ストレージコントローラ２１と、メモリ・インターフェース部１６と、ＮＡＮＤ型フラッシュメモリ１８と、を備える。ストレージ装置１０Ａは、ストレージコントローラ２０に代えてストレージコントローラ２１を備えた点以外は、第１の実施の形態のストレージ装置１０と同様である。
【０１７４】
ストレージコントローラ２１は、書込制御部２５と、読出制御部２３と、を備える。書込制御部２５は、圧縮部２４Ａと、パッキング処理部２４Ｂと、書込部２４Ｃと、符号化部２５Ｄと、を備える。ストレージコントローラ２１は、第１の実施の形態の書込制御部２４および読出制御部２２に代えて、書込制御部２５および読出制御部２３を備える。
【０１７５】
書込制御部２５は、圧縮部２４Ａと、パッキング処理部２４Ｂと、符号化部２５Ｄと、書込部２４Ｃと、を含む。読出制御部２３は、変換部２２Ａと、読出部２３Ｂと、解析部２３Ｃと、訂正部２３Ｅと、伸長部２２Ｄと、を含む。読出制御部２３、変換部２２Ａ、読出部２３Ｂ、解析部２３Ｃ、訂正部２３Ｅ、伸長部２２Ｄ、書込制御部２５、圧縮部２４Ａ、パッキング処理部２４Ｂ、符号化部２５Ｄ、および書込部２４Ｃは、例えば、１または複数のプロセッサにより実現される。例えば上記各部は、ＣＰＵなどのプロセッサにプログラムを実行させること、すなわちソフトウェアにより実現してもよい。上記各部は、専用のＩＣなどのプロセッサ、すなわちハードウェアにより実現してもよい。上記各部は、ソフトウェアおよびハードウェアを併用して実現してもよい。複数のプロセッサを用いる場合、各プロセッサは、各部のうち１つを実現してもよいし、各部のうち２以上を実現してもよい。
【０１７６】
プロセッサは、記憶部に保存されたプログラムを読み出し実行することで、上記各部を実現する。なお、記憶部にプログラムを保存する代わりに、プロセッサの回路内にプログラムを直接組み込むよう構成してもよい。この場合、プロセッサは回路内に組み込まれたプログラムを読み出し実行することで、上記各部を実現する。
【０１７７】
まず、書込制御部２５について説明する。書込制御部２５は、圧縮部２４Ａと、パッキング処理部２４Ｂと、符号化部２５Ｄと、書込部２４Ｃと、を備える。圧縮部２４Ａ、パッキング処理部２４Ｂ、および書込部２４Ｃは、第１の実施の形態と同様である。
【０１７８】
符号化部２５Ｄは、パッキング処理部２４Ｂから、パッキングユニットを受付ける。符号化部２５Ｄは、パッキングユニット毎、あるいはそのサブブロック毎に、エラー訂正符号を算出し、付与する。
【０１７９】
エラー訂正符号を適用するデータ単位は、第１単位の一例である。エラー訂正符号を付与するデータ単位は、ＥＣＣフレームと称される場合もある。第１単位は、圧縮クラスタに対応する非圧縮のクラスタのサイズより小さいことが好ましい。
【０１８０】
エラー訂正符号は、例えば、ＬＤＰＣ  （Ｌｏｗ−Ｄｅｎｓｉｔｙ  Ｐａｒｉｔｙ  Ｃｈｅｃｋ）符号、ＢＣＨ符号、リード・ソロモン符号、などである。
【０１８１】
なお、エラー訂正符号を適用するデータ単位である第１単位は、固定長であってもよいし、可変長であってもよい。
【０１８２】
例えば、符号化部２５Ｄは、パッキングユニットの先頭付近については、該先頭付近以外に比べて小さい第１単位を設定してもよい。パッキングユニットの先頭付近とは、例えば、パッキングユニットに含まれるヘッダ情報の最大サイズに相当する部分である。
【０１８３】
符号化部２５Ｄが、パッキングユニットの先頭付近については、該先頭付近以外に比べて小さい第１単位でエラー訂正符号を付与することで、読出制御部２３がヘッダ情報を解析するためにパッキングユニットから読出すデータ量の、削減を図ることができる。
【０１８４】
なお、この場合、符号化部２５Ｄは、パッキングユニットの先頭付近に付与するエラー訂正符号（例えば、パリティビット）のビット数の割合を、該先頭以外に比べて増やす、などの処理を行うことが好ましい。この処理を行うことで、第１単位の大きい領域に比べて、第１単位の小さい部分に付与されたエラー訂正符号の、エラー訂正能力の低下を抑制することができる。なお、符号化部２５Ｄは、パリティビットのビット数を増やすために、例えば、他の第１単位で本来用いていた部分を流用すればよい。
【０１８５】
また、符号化部２５Ｄは、パッキングユニットにおけるヘッダ情報の部分（例えば、ヘッダ情報の最大サイズに相当する部分）に、独立に、エラー検出符号またはエラー訂正符号を付与してもよい。
【０１８６】
これにより、読出制御部２３は、パッキングユニットにおけるヘッダ情報の部分のみを読出して、エラー検出またはエラー訂正や、ヘッダ情報の解析を行うことができる。このため、ストレージ装置１０Ａでは、ヘッダ情報解析の遅延を低減することができる。
【０１８７】
なお、第１の実施の形態で説明したように、ヘッダ情報には、パッキングユニットに先頭が含まれる圧縮クラスタの数や、圧縮クラスタの長さ（データ長）や、圧縮クラスタの位置情報（オフセット）や、圧縮クラスタの論理アドレス（ＬＣＡ）、などの種類のデータが含まれる（図３〜図５参照）。
【０１８８】
このため、例えば、符号化部２５Ｄは、各種類のデータごとに、エラー検出符号やエラー訂正符号（例えばパリティ検査符号等）を付与してもよい。
【０１８９】
このように、ヘッダ情報に含まれる各種類のデータごとに、エラー検出符号やエラー訂正符号を付与すると、読出制御部２３は、各種類のデータごとに、エラー検出またはエラー訂正と解析を行うことができる。
【０１９０】
なお、ヘッダ情報の部分と、ヘッダ情報全体を含み、且つヘッダ情報よりデータ長の長い第１単位との各々について、エラー訂正符号を付与してもよい。
【０１９１】
このように、パッキングユニットに対して、段階的にサイズの大きい第１単位ごとにエラー訂正符号を付与することで、最も小さいサイズの第１単位に付与されたエラー訂正符号でエラー訂正が出来なかった場合であっても、より大きいサイズの第１単位に付与されたエラー訂正符号により、エラー訂正が可能となる。
【０１９２】
例えば、ヘッダ情報に付与されたエラー訂正符号を用いたエラー訂正が出来なかった場合、該ヘッダ情報より大きいサイズの第１単位に付与されたエラー訂正符号を用いてエラー訂正を行うことで、ヘッダ情報を復元することができる。
【０１９３】
また、符号化部２５Ｄで用いる第１単位を固定とし、パッキング処理部２４Ｂは、符号化部２５Ｄで用いる該第１単位ごとに、圧縮クラスタをパッキングし、パッキングユニットを生成してもよい。すなわち、パッキング処理部２４Ｂで生成されるパッキングユニットと、符号化部２５Ｄでエラー訂正符号を付与する第１単位と、を同一としてもよい。
【０１９４】
例えば、第１単位よりデータ長の短い圧縮クラスタが、２つの第１単位（ＥＣＣフレーム）に跨って配置される場合がある。この場合、読出制御部２３では、この圧縮クラスタを読出すためには、少なくとも２つのＥＣＣフレームを読出す必要が生じる。このため、パッキング処理部２４Ｂが、上述したように、圧縮クラスタを、第１単位ごとにパッキングする。これにより、読出制御部２３では、読出し対象の圧縮クラスタを読出すために、複数のＥＣＣフレームを読出すといった処理が削減され、読出速度の向上を図ることができる。
【０１９５】
なお、圧縮クラスタを第１単位ごとにパッキングする場合、第１単位のデータサイズが大きいほど、パッキング効率が低下する。このため、パッキング処理部２４Ｂは、圧縮クラスタの圧縮率が閾値以上（例えば９０％）の場合には、圧縮クラスタを第１単位ごとにパッキングする。そして、パッキング処理部２４Ｂは、圧縮クラスタの圧縮率が閾値未満（例えば、５０％）の場合には、圧縮クラスタが２つのパッキングユニットに跨る場合であっても、予め定めた単位毎に圧縮クラスタをパッキングしてもよい。
【０１９６】
符号化部２５Ｄは、エラー訂正符号を付与したパッキングユニットを、書込部２４Ｃへ出力する。書込部２４Ｃは、第１の実施の形態と同様に、該パッキングユニットのＮＡＮＤ型フラッシュメモリ１８への書込み、および、ＬＵＴ１８Ａの更新を行う。
【０１９７】
次に、読出制御部２３について説明する。
【０１９８】
読出制御部２３は、変換部２２Ａと、読出部２３Ｂと、解析部２３Ｃと、訂正部２３Ｅと、伸長部２２Ｄと、を含む。変換部２２Ａおよび伸長部２２Ｄは、第１の実施の形態と同様である。
【０１９９】
読出部２３Ｂは、第１の実施の形態の読出部２２Ｂと同様に、ＮＡＮＤ型フラッシュメモリ１８における、変換部２２Ａから受付けた物理アドレス（ユニットアドレス）によって示される位置のパッキングユニットに含まれるデータを、順次読出す。そして、読出部２３Ｂは、読出したデータを、訂正部２３Ｅへ順次出力する。
【０２００】
訂正部２３Ｅは、読出部２３Ｂによって読み出されたデータにおける、第１単位ごとに付与されたエラー訂正符号を用いて、エラー訂正を行う。
【０２０１】
訂正部２３Ｅは、符号化部２５Ｄによって付与されたエラー訂正符号に応じた訂正方法を用いて、エラー訂正を行う。
【０２０２】
そして、訂正部２３Ｅは、エラー訂正したデータを、解析部２３Ｃへ出力する。
【０２０３】
解析部２３Ｃは、第１の実施の形態の解析部２２Ｃと同様に、読出部２３Ｂによって読み出されたパッキングユニットに含まれるデータの内、ヘッダ情報を解析する。すなわち、解析部２３Ｃは、訂正部２３Ｅによってエラー訂正されたヘッダ情報を解析する。そして、解析部２３Ｃは、第１の実施の形態の解析部２２Ｃと同様に、該パッキングユニットにおける、読出対象の圧縮クラスタの位置情報（オフセット）を取得し、読出部２３Ｂへ出力する。
【０２０４】
そして、読出部２３Ｂは、パッキングユニットにおける、解析部２３Ｃで取得した位置情報によって示される位置の圧縮クラスタを、読出対象の圧縮クラスタとして、訂正部２３Ｅへ出力する。訂正部２３Ｅは、読出部２３Ｂから取得した圧縮クラスタについてエラー訂正を行い、伸長部２２Ｄへ出力する。伸長部２２Ｄは、第１の実施の形態と同様に、圧縮クラスタを伸長し、ホスト・インターフェース部１４を介してホスト装置１２へ出力する。
【０２０５】
ここで、第１の実施の形態と同様に、解析部２３Ｃは、読出部２３Ｂによる、パッキングユニットに含まれるデータの読出に並行して、ヘッダ情報の解析を行う。
【０２０６】
そして、読出部２３Ｂは、解析部２３Ｃで取得した位置情報が第１条件を満たすと判定した場合にはデータの読出を継続する。一方、読出部２３Ｂは、解析部２３Ｃで取得した位置情報が第２条件を満たすと判定した場合、パッキングユニットにおける該位置情報に示される位置へ読出位置を変更し、該読出位置から圧縮クラスタを読出す。第１条件および第２条件は、第１の実施の形態と同様である。
【０２０７】
読出部２３Ｂおよび解析部２３Ｃの処理について、図１２および図１３を用いて説明する。
【０２０８】
図１２は、読出部２３Ｂによるデータの読出、および、解析部２３Ｃによる解析、の説明図である。図１２は、解析部２３Ｃで取得した位置情報が第１条件を満たす場合を示した。
【０２０９】
例えば、読出部２３Ｂは、ＮＡＮＤ型フラッシュメモリ１８へ、読出し命令を発行する（ステップＳ２０）。読出し命令は、ＮＡＮＤ型フラッシュメモリ１８における、変換部２２Ａから受付けた、圧縮クラスタの論理アドレス（ＬＣＡ）と、変換した物理アドレス（ユニットアドレス）と、読出し信号と、を含む。
【０２１０】
読出し命令を受付けたＮＡＮＤ型フラッシュメモリ１８は、読出し命令に含まれるユニットアドレスに位置するパッキングユニットを含む物理ページを、セル・アレイからデータ・バッファへ読出す（ステップＳ２１）。そして、ＮＡＮＤ型フラッシュメモリ１８は、データ・バッファに読出した物理ページに含まれる、読出し命令に含まれるユニットアドレスに位置するパッキングユニットのデータの、読出部２３Ｂへの順次出力を開始する（ステップＳ２２）。すなわち、ステップＳ２２では、読出部２３Ｂが、パッキングユニットのデータを順次読出す。
【０２１１】
読出部２３Ｂは、ＮＡＮＤ型フラッシュメモリ１８から順次出力される、パッキングユニットのデータを、順次、訂正部２３Ｅへ出力する。訂正部２３Ｅは、エラー訂正符号の付与された単位である第１単位（ＥＣＣフレーム）に相当するデータを受付けた段階で、エラー訂正を行う（ステップＳ２３）。
【０２１２】
解析部２３Ｃは、読出部２３Ｂによるパッキングユニットのデータの読出し（ステップＳ２２、ステップＳ２２’）に並行して、訂正部２３Ｅでエラー訂正されたヘッダ情報を解析する（ステップＳ２４）。この解析により、解析部２３Ｃは、読出対象の圧縮クラスタの位置情報を、読出部２３Ｂへ出力する。なお、解析部２３Ｃは、解析前に、読出部２３Ｂから、圧縮クラスタの論理アドレス（ＬＣＡ）を受付け、位置情報の特定に用いる。
【０２１３】
なお、ヘッダ情報のデータサイズは、圧縮クラスタのサイズに比べて小さい。また、ヘッダ情報は、エラー訂正符号の付与された単位である第１単位内に収まることが多い。このため、読出部２３Ｂが、パッキングユニットの最初の１単位分のデータを読出し（ステップＳ２２）、訂正部２３Ｅがエラー訂正を行うことで（ステップＳ２３）、解析部２３Ｃはヘッダ情報を解析することができる（ステップＳ２４）。
【０２１４】
なお、ヘッダ情報のサイズには、パッキングフレームに含むことの可能な、圧縮クラスタの最大数を設定することが好ましい。この設定により、ヘッダ情報の最大サイズを規定することができる。
【０２１５】
そして、読出部２３Ｂは、解析部２３Ｃから受付けた位置情報が、第１条件を満たすと判定したとする。この場合、読出制御部２３はデータの読出を継続する（ステップＳ２２’）。
【０２１６】
このため、読出対象の圧縮クラスタの、パッキングユニットにおける位置情報（オフセット）によって示される位置が、該パッキングユニットのヘッダ情報に隣接する位置である場合、読出部２３Ｂは、データの読出を継続する。また、読出対象の圧縮クラスタの、パッキングユニットにおける位置情報（オフセット）によって示される位置がヘッダ情報に非隣接の位置であって、且つ、ヘッダ情報の末尾から該位置情報によって示される位置までの間隔が閾値以下の場合、読出部２３Ｂは、データの読出を継続する。この閾値には、予め定めた値を用いればよい。
【０２１７】
そして、読出部２３Ｂは、解析部２３Ｃから取得した位置情報によって示される位置の圧縮クラスタを含む第１単位（ＥＣＣフレーム）を読出すと、読出した第１単位を、訂正部２３Ｅへ出力する。訂正部２３Ｅは、エラー訂正を行い、エラー訂正した圧縮クラスタを、伸長部２２Ｄへ出力する（ステップＳ２５）。伸長部２２Ｄは、圧縮クラスタを伸長し、ホスト装置１２へ出力する（ステップＳ２６）。
【０２１８】
次に、第２条件を満たす場合を説明する。図１３は、読出部２３Ｂによるデータの読出、および、解析部２３Ｃによる解析、の説明図である。図１３には、解析部２３Ｃで取得した位置情報が第２条件を満たす場合を示した。
【０２１９】
読出部２３Ｂは、ＮＡＮＤ型フラッシュメモリ１８へ、読出し命令を発行する（ステップＳ３１）。読出し命令は、ＮＡＮＤ型フラッシュメモリ１８における、変換部２２Ａから受付けた、圧縮クラスタの論理アドレス（ＬＣＡ）と、変換した物理アドレス（ユニットアドレス）と、読出し信号と、を含む。
【０２２０】
読出し命令を受付けたＮＡＮＤ型フラッシュメモリ１８は、読出し命令に含まれるユニットアドレスに位置するパッキングユニットを含む物理ページを、セル・アレイからデータ・バッファへ読出す（ステップＳ３２）。そして、ＮＡＮＤ型フラッシュメモリ１８は、データ・バッファに読出した物理ページに含まれる、読出し命令に含まれるユニットアドレスに位置するパッキングユニットのデータの、読出部２３Ｂへの順次出力を開始する（ステップＳ３３、Ｓ３３’）。すなわち、ステップＳ３３、Ｓ３３’では、読出部２３Ｂが、パッキングユニットのデータを順次読出す。
【０２２１】
読出部２３Ｂは、ＮＡＮＤ型フラッシュメモリ１８から順次出力される、パッキングユニットのデータを、順次、訂正部２３Ｅへ出力する。訂正部２３Ｅは、エラー訂正符号の付与された単位である第１単位（ＥＣＣフレーム）に相当するデータを受付けた段階で、エラー訂正を行う（ステップＳ３４）。
【０２２２】
そして、読出部２３Ｂは、解析部２３Ｃから受付けた位置情報が、第２条件を満たすと判定したとする。この場合、読出部２３Ｂは、該パッキングユニットにおける、該位置情報に示される位置を含む、第１単位（ＥＣＣフレーム）の先頭位置へ読出位置を変更する（ステップＳ３６）。すなわち、読出部２３Ｂは、該位置情報に示される位置に記憶されている圧縮クラスタの先頭を含む、第１単位（ＥＣＣフレーム）の先頭位置へ、読出位置を変更する。そして、読出部２３Ｂは、変更後の該読出位置から圧縮クラスタを読出す（ステップＳ３７）。
【０２２３】
そして、読出部２３Ｂは、解析部２３Ｃから取得した位置情報によって示される位置の圧縮クラスタを含む第１単位（ＥＣＣフレーム）を読出すと、読出した第１単位を、訂正部２３Ｅへ出力する。訂正部２３Ｅは、エラー訂正を行い、エラー訂正した圧縮クラスタを、伸長部２２Ｄへ出力する（ステップＳ３８）。伸長部２２Ｄは、圧縮クラスタを伸長し、ホスト装置１２へ出力する（ステップＳ３９）。
【０２２４】
なお、上述したように、符号化部２５Ｄが、パッキングユニットにおけるヘッダ情報の部分に、独立にエラー訂正符号を付与し、且つ、ヘッダ情報より大きいデータサイズの第１単位ごとにエラー訂正符号を付与する場合がある。
【０２２５】
この場合、符号化部２５Ｄは、第１訂正部２３Ｆと、第２訂正部２３Ｇと、を有する構成とすることが好ましい。
【０２２６】
第１訂正部２３Ｆは、読出部２３Ｂによって読み出されたデータにおける、ヘッダ情報に付与されたエラー訂正符号を用いて、該ヘッダ情報のエラー訂正を行う。第２訂正部２３Ｇは、ヘッダ情報より大きいデータサイズの第１単位ごとに付与されたエラー訂正符号を用いてエラー訂正を行う。
【０２２７】
そして、解析部２３Ｃは、第１訂正部２３Ｆによるヘッダ情報のエラー訂正が成功した場合、第１訂正部２３Ｆによってエラー訂正されたヘッダ情報を解析する。また、解析部２３Ｃは、第１訂正部２３Ｆによるヘッダ情報のエラー訂正が失敗した場合、第２訂正部２３Ｇによってエラー訂正された第１単位のデータに含まれるヘッダ情報を解析すればよい。
【０２２８】
以上説明したように、本実施の形態のストレージ装置１０Ａでは、符号化部２５Ｄが第１単位毎にエラー訂正符号を付与する。そして、ＮＡＮＤ型フラッシュメモリ１８には、エラー訂正符号の付与されたパッキングユニットが記憶される。そして、読出制御部２３は、訂正部２３Ｅが、付与されたエラー訂正符号を用いてエラー訂正を行う。
【０２２９】
ここで、ＮＡＮＤ型フラッシュメモリ１８では、メモリ・セルの内部状態の時間変化や、読出時のノイズなどにより、読出しデータの一部が、書込み時とは異なる値を示す場合がある。このため、ストレージ装置１０Ａは、符号化部２５Ｄおよび訂正部２３Ｅを用いることで、第１の実施の形態の効果に加えて、ＮＡＮＤ型フラッシュメモリ１８に記憶されたデータのエラー訂正を行うことができる。
【０２３０】
また、本実施の形態のストレージ装置１０Ａによれば、第１の実施の形態と同様に、圧縮クラスタを用いることによる読出し速度の向上や、ＮＡＮＤ型フラッシュメモリ１８の寿命向上を図ることができる。
【０２３１】
次に、上記実施の形態のストレージ装置１０、１０Ａのハードウェア構成の一例を説明する。図１４は、上記実施の形態のストレージ装置１０、１０Ａのハードウェア構成図の一例である。
【０２３２】
上記実施の形態のストレージ装置１０、１０Ａは、ＣＰＵ３００などの制御装置と、ＲＡＭ（Ｒａｎｄｏｍ  Ａｃｃｅｓｓ  Ｍｅｍｏｒｙ）３０２などの記憶装置と、圧縮・伸長回路３０４と、メモリＩ／Ｆ３０８と、ホストＩ／Ｆ３１０と、各部を接続するバス３０６と、を備える。
【０２３３】
ホストＩ／Ｆ３１０は、上記ホスト・インターフェース部１４に相当する。ホストＩ／Ｆ３１０は、ホスト装置１２に接続されている。メモリＩ／Ｆ３０８は、上記メモリ・インターフェース部１６に相当する。メモリＩ／Ｆ３０８は、ＮＡＮＤ型フラッシュメモリ１８に接続されている。圧縮・伸長回路３０４は、上記圧縮部２４Ａ、伸長部２２Ｄ、に相当する。
【０２３４】
ＲＡＭ３０２は、ホスト装置１２から取得またはホスト装置１２へ送信するデータ（クラスタ）、圧縮クラスタ、論理アドレス（ＬＣＡ、ＬＢＡ）などを一次記憶する揮発性の記憶装置である。なお、ＲＡＭ３０２は、ＬＵＴ１８Ａの一部または全部をキャッシュするために用いてもよい。ＲＡＭ３０２は、例えば、ＳＲＡＭ（Ｓｔａｔｉｃ  ＲＡＭ）またはＤＲＡＭ（Ｄｙｎａｍｉｃ  ＲＡＭ）である。
【０２３５】
上記実施の形態のストレージ装置１０、１０Ａでは、ＣＰＵ３００が、ＲＯＭからプログラムをＲＡＭ３０２上に読み出して実行することにより、上記各部がコンピュータ上で実現される。
【０２３６】
なお、上記実施の形態のストレージ装置１０、１０Ａで実行される上記各処理を実行するためのプログラムは、ＨＤＤに記憶されていてもよい。また、上記実施の形態のストレージ装置１０、１０Ａで実行される上記各処理を実行するためのプログラムは、ＲＯＭに予め組み込まれて提供されていてもよい。
【０２３７】
また、上記実施の形態のストレージ装置１０、１０Ａで実行される上記処理を実行するためのプログラムは、インストール可能な形式または実行可能な形式のファイルでＣＤ−ＲＯＭ、ＣＤ−Ｒ、メモリカード、ＤＶＤ（Ｄｉｇｉｔａｌ  Ｖｅｒｓａｔｉｌｅ  Ｄｉｓｋ）、フレキシブルディスク（ＦＤ）等のコンピュータで読み取り可能な記憶媒体に記憶されてコンピュータプログラムプロダクトとして提供されるようにしてもよい。また、上記実施の形態のストレージ装置１０、１０Ａで実行される上記処理を実行するためのプログラムを、インターネットなどのネットワークに接続されたコンピュータ上に格納し、ネットワーク経由でダウンロードさせることにより提供するようにしてもよい。また、上記実施の形態のストレージ装置１０、１０Ａで実行される上記処理を実行するためのプログラムを、インターネットなどのネットワーク経由で提供または配布するようにしてもよい。
【０２３８】
なお、図１４に示したハードウェア構成は、一例であり、ストレージ装置１０、１０Ａを、その他のハードウェア構成によって実現してもよい。例えば、ＣＰＵ３００および圧縮・伸長回路３０４は、その一部または全部の処理を専用の回路で行ってもよいし、汎用の演算装置（ＣＰＵなど）で行ってもよい。
【０２３９】
なお、上記には、本発明の実施の形態を説明したが、上記実施の形態は、例として提示したものであり、発明の範囲を限定することは意図していない。この新規な実施の形態は、その他の様々な形態で実施されることが可能であり、発明の要旨を逸脱しない範囲で、種々の省略、置き換え、変更を行うことができる。この実施の形態は、発明の範囲や要旨に含まれるとともに、特許請求の範囲に記載された発明とその均等の範囲に含まれる。
【符号の説明】
【０２４０】
１０、１０Ａ  ストレージ装置
１８  ＮＡＮＤ型フラッシュメモリ
１８Ａ  ＬＵＴ
２０、２１  ストレージコントローラ
２２、２３  読出制御部
２２Ａ  変換部
２２Ｂ、２３Ｂ  読出部
２２Ｃ、２３Ｃ  解析部
２３Ｅ  訂正部
２４、２５  書込制御部
２４Ａ  圧縮部
２４Ｂ  パッキング処理部
２４Ｃ  書込部
２５Ｄ  符号化部
【図１】
2018156137.tif 000003
【図２】
2018156137.tif 000004
【図３】
2018156137.tif 000005
【図４】
2018156137.tif 000006
【図５】
2018156137.tif 000007
【図６】
2018156137.tif 000008
【図７】
2018156137.tif 000009
【図８】
2018156137.tif 000010
【図９】
2018156137.tif 000011
【図１０】
2018156137.tif 000012
【図１１】
2018156137.tif 000013
【図１２】
2018156137.tif 000014
【図１３】
2018156137.tif 000015
【図１４】
2018156137.tif 000016