(57)【要約】【課題】通常利用時の性能を向上させることができるコントローラ、データ記憶装置、及びプログラムを提供する。【解決手段】書込指示部１５０は、書込対象データを第１物理アドレスが示すデータ記憶部１０５の記憶領域へ書き込むことをデータアクセス部１０６に指示し、アドレス変換情報の更新を管理情報アクセス部１２１に指示し、第１物理アドレスの更新を第１アクセス部１３１に指示する。コンパクション部１７０は、コンパクション対象データの物理アドレスを抽出し、物理アドレスが示すデータ記憶部１０５の記憶領域に記憶されたコンパクション対象データの読み出しをデータアクセス部１０６に指示し、第２物理アドレスが示すデータ記憶部１０５の記憶領域へのコンパクション対象データの書き込みをデータアクセス部１０６に指示し、アドレス変換情報の更新を管理情報アクセス部１２１に指示し、第２物理アドレスの更新を第２アクセス部１４１に指示する。【選択図】図２
2011197945.tif 000002
【特許請求の範囲】
【請求項１】
データを記憶するデータ記憶部にアクセスするデータアクセス部と、
前記データ記憶部の物理アドレスと論理アドレスとを対応付けたアドレス変換情報を含む管理情報を記憶する管理情報記憶部にアクセスする管理情報アクセス部と、
前記データ記憶部の第１物理アドレスを記憶する第１記憶部にアクセスする第１アクセス部と、
前記データ記憶部の第２物理アドレスを記憶する第２記憶部にアクセスする第２アクセス部と接続されたコントローラであって、
前記第１物理アドレスの読み出しを前記第１アクセス部に指示し、ホスト装置から書き込みが要求された書込対象データを、前記第１物理アドレスが示す前記データ記憶部の記憶領域へ書き込むことを前記データアクセス部に指示し、前記アドレス変換情報の更新を前記管理情報アクセス部に指示し、前記第１物理アドレスの更新を前記第１アクセス部に指示する書込指示部と、
前記管理情報の読み出しを前記管理情報アクセス部に指示し、前記管理情報に基づいて前記データ記憶部に記憶されているデータのうちコンパクション対象データの物理アドレスを抽出し、前記物理アドレスが示す前記データ記憶部の記憶領域に記憶されている前記コンパクション対象データの読み出しを前記データアクセス部に指示し、前記第２物理アドレスの読み出しを前記第２アクセス部に指示し、前記第２物理アドレスが示す前記データ記憶部の記憶領域への前記コンパクション対象データの書き込みを前記データアクセス部に指示し、前記アドレス変換情報の更新を前記管理情報アクセス部に指示し、前記第２物理アドレスの更新を前記第２アクセス部に指示するコンパクション部と、
を備えることを特徴とするコントローラ。
【請求項２】
前記コンパクション部は、前記コンパクション対象データの読み出し元の記憶領域が無効な記憶領域になっていた場合、前記アドレス変換情報の更新を前記管理情報アクセス部に指示しないことを特徴とする請求項１に記載のコントローラ。
【請求項３】
前記管理情報をスナップショットとして前記データ記憶部に保存することを前記データアクセス部に指示するスナップショット保存部と、
前記管理情報の更新情報をログとして前記データ記憶部に保存することを前記データアクセス部に指示するログ保存部と、
前記データ記憶部に保存された前記スナップショットの読み出しを前記データアクセス部に指示し、前記スナップショットを前記管理情報として復元するスナップショット復元部と、
前記データ記憶部に保存された前記ログの読み出しを前記データアクセス部に指示し、前記スナップショット復元部が復元した前記管理情報に前記ログを適用して前記管理情報を復元するログ復元部と、
を備えることを特徴とする請求項１又は２に記載のコントローラ。
【請求項４】
前記書込対象データ用に、ホスト書込用追記ブロックが割り当てられ、
前記コンパクション対象データ用に、コンパクション用追記ブロックが割り当てられ、
前記書込指示部は、前記書込対象データ及び前記書込対象データの論理アドレスを、前記ホスト書込用追記ブロック内のページに書き込むことを前記データアクセス部に指示し、
前記コンパクション部は、前記コンパクション対象データ及び前記コンパクション対象データの論理アドレスを、前記コンパクション用追記ブロック内のページに書き込むことを前記データアクセス部に指示し、
前記ホスト書込用追記ブロック内の全ページへの書き込みが完了し、かつ前記コンパクション用追記ブロック内の全ページへの書き込みが完了した場合に、前記書込対象データ用に新たなホスト書込用追記ブロックを割り当てるとともに、前記コンパクション対象データ用に新たなコンパクション用追記ブロック割り当て、コンパクション用追記ブロック、ホスト書込用追記ブロックの順に割り当て情報をログとして記録するブロック使用情報制御部を更に備えることを特徴とする請求項３に記載のコントローラ。
【請求項５】
前記ブロック使用情報制御部は、前記新たなホスト書込用追記ブロック１個に対し、前記新たなコンパクション用追記ブロックＮ（Ｎは０以上の整数）個を割り当てることを特徴とする請求項４に記載のコントローラ。
【請求項６】
前記コンパクション部は、前記アドレス変換情報を参照して、前記ページに書き込んだ前記コンパクション対象データの論理アドレスに対応付けられた物理アドレスが前記ページを示す場合、前記ページは有効であると判定し、前記ページに書き込んだ前記コンパクション対象データの論理アドレスに対応付けられた物理アドレスが前記ページを示さない場合、前記ページは無効であると判定することを特徴とする請求項４又は５に記載のコントローラ。
【請求項７】
データを記憶するデータ記憶部と、
前記データ記憶部の物理アドレスと論理アドレスとを対応付けたアドレス変換情報を含む管理情報を記憶する管理情報記憶部と、
前記データ記憶部の第１物理アドレスを記憶する第１記憶部と、
前記データ記憶部の第２物理アドレスを記憶する第２記憶部と、
前記データ記憶部にアクセスするデータアクセス部と、
前記管理情報記憶部にアクセスする管理情報アクセス部と、
前記第１記憶部にアクセスする第１アクセス部と、
前記第２記憶部にアクセスする第２アクセス部と、
前記第１物理アドレスの読み出しを前記第１アクセス部に指示し、ホスト装置から書き込みが要求された書込対象データを、前記第１物理アドレスが示す前記データ記憶部の記憶領域へ書き込むことを前記データアクセス部に指示し、前記アドレス変換情報の更新を前記管理情報アクセス部に指示し、前記第１物理アドレスの更新を前記第１アクセス部に指示する書込指示部と、
前記管理情報の読み出しを前記管理情報アクセス部に指示し、前記管理情報に基づいて前記データ記憶部に記憶されているデータのうちコンパクション対象データの物理アドレスを抽出し、前記物理アドレスが示す前記データ記憶部の記憶領域に記憶されている前記コンパクション対象データの読み出しを前記データアクセス部に指示し、前記第２物理アドレスの読み出しを前記第２アクセス部に指示し、前記第２物理アドレスが示す前記データ記憶部の記憶領域への前記コンパクション対象データの書き込みを前記データアクセス部に指示し、前記アドレス変換情報の更新を前記管理情報アクセス部に指示し、前記第２物理アドレスの更新を前記第２アクセス部に指示するコンパクション部と、
を備えることを特徴とするデータ記憶装置。
【請求項８】
データを記憶するデータ記憶部にアクセスするデータアクセス部と、
前記データ記憶部の物理アドレスと論理アドレスとを対応付けたアドレス変換情報を含む管理情報を記憶する管理情報記憶部にアクセスする管理情報アクセス部と、
前記データ記憶部の第１物理アドレスを記憶する第１記憶部にアクセスする第１アクセス部と、
前記データ記憶部の第２物理アドレスを記憶する第２記憶部にアクセスする第２アクセス部と接続されたコントローラのためのプログラムであって、
前記第１物理アドレスの読み出しを前記第１アクセス部に指示し、ホスト装置から書き込みが要求された書込対象データを、前記第１物理アドレスが示す前記データ記憶部の記憶領域へ書き込むことを前記データアクセス部に指示し、前記アドレス変換情報の更新を前記管理情報アクセス部に指示し、前記第１物理アドレスの更新を前記第１アクセス部に指示する書込指示部と、
前記管理情報の読み出しを前記管理情報アクセス部に指示し、前記管理情報に基づいて前記データ記憶部に記憶されているデータのうちコンパクション対象データの物理アドレスを抽出し、前記物理アドレスが示す前記データ記憶部の記憶領域に記憶されている前記コンパクション対象データの読み出しを前記データアクセス部に指示し、前記第２物理アドレスの読み出しを前記第２アクセス部に指示し、前記第２物理アドレスが示す前記データ記憶部の記憶領域への前記コンパクション対象データの書き込みを前記データアクセス部に指示し、前記アドレス変換情報の更新を前記管理情報アクセス部に指示し、前記第２物理アドレスの更新を前記第２アクセス部に指示するコンパクション部と、
してコンピュータを機能させるためのプログラム。
【発明の詳細な説明】
【技術分野】
【０００１】
本発明は、コントローラ、データ記憶装置、及びプログラムに関する。
【背景技術】
【０００２】
従来から、ＨＤＤ（Hard  Disk  Drive）やＳＳＤ（Solid  State  Drive）のようなデータ記憶装置では、論理アドレス（ＬＢＡ：Logical  Block  Address）と物理アドレス（ＰＢＡ：Physical  Block  Address）とを対応付けた変換テーブルなどの種々の管理情報を用いて、記憶媒体の使用状態を管理している。論理アドレスは、サーバコンピュータ、ストレージシステムのコントローラ、又はパーソナルコンピュータなどのホスト装置で認識できる記憶媒体の論理的なアドレスである。物理アドレスは、記憶媒体の物理的な記憶位置を示すアドレスである。
【０００３】
データ記憶装置の記憶媒体の１つとして、ＮＡＮＤ型フラッシュメモリのような半導体記憶素子がある。このような記憶媒体は、データのランダムな読み書きができず、ページと呼ばれる単位でデータを読み書きする必要があり、複数ページがまとまってブロックと呼ばれる単位の記憶領域を構成する。また、データ書き込み済みのページやブロックに新たなデータを書き込むためには、書き込み済みのデータをブロック単位で消去する必要がある。即ち、データ消去済みのブロックのうちまだ書き込みが行われていないページに対してページ単位で順次書き込みが可能であり、データ書き込み済みのページに対するデータの上書きが不可能な記憶媒体がある。
【０００４】
また、ホスト装置がデータ記憶装置に対してデータの読み出し及び書き込みを行う単位は、セクタと呼ばれ、ページやブロックの単位とは独立に定められている。例えば、ブロックのサイズは５１２キロバイト、ページのサイズは４キロバイトであるのに対して、セクタのサイズは、５１２バイトのように定められている。
【０００５】
上述したような制約がある記憶媒体を用いたデータ記憶装置では、管理情報におけるデータの管理サイズに、ブロックサイズの整数倍のサイズを用いるブロック管理方式が採用されている。しかし、ブロック管理方式においてホスト装置からランダムライト要求が行われた場合、このようなデータ記憶装置は、ホスト装置が書込要求を行う論理アドレスの範囲である論理アドレス領域に対応する１以上のブロックに記憶されているデータのうち当該書込要求により更新されないデータを一時記憶領域に読み込み、書込対象データとマージする。そして、データ記憶装置は、１以上の新たな書込対象ブロックの消去処理を行ってマージしたデータを書き込み、論理アドレス領域と１以上の新たな書込対象ブロックとが対応するように管理情報を更新する。
【０００６】
このようにブロック管理方式では、ホスト装置から書込要求が行われたサイズに比べて、データ記憶装置において書き込みされるサイズ及び読み込みされるサイズが非常に大きくなるため、処理時間が長くなり、ランダム書き込み性能が著しく低下してしまう。
【０００７】
このため、上述したような制約がある記憶媒体を用いたデータ記憶装置では、一般にＯＳ（Operating  System）のメモリ管理やファイルシステムで実施されているような追記方式（例えば、非特許文献１参照）を採用して、ランダム書き込み性能を向上させている。
【０００８】
追記方式のデータ記憶装置では、ホスト装置からの書込要求で指定された論理アドレスとは無関係に、書込対象データをページの昇順に順次書き込む。そしてホスト装置から、過去に指定済みの論理アドレスを再度指定した書込要求が行われると、データ記憶装置は、消去処理済みのブロックの未書込みのページに新たな書込対象データを書き込む。更にデータ記憶装置は、管理情報上、当該論理アドレスに対応するページ（当該論理アドレスが過去に指定された際に書き込みが行われたページ）を無効にし、新たな書込対象データが書き込まれたページを有効にして、当該論理アドレスと対応付ける。
【０００９】
また、追記方式のデータ記憶装置では、無効にされたページが増えてくると、書き込みが可能な新規の消去処理済みのブロック、即ち、消去処理後に書き込みが行われていないフリーブロックが少なくなり、新たな書き込みができなくなってしまうため、適当なタイミングでコンパクション（ガベージコレクションに相当）を行う。
【００１０】
コンパクションを行う場合、データ記憶装置は、無効にされたページを含むブロックの中から、無効にされていない物理アドレスに記憶されている有効データを集めて、フリーブロックにコピーすることにより有効データを移動させるとともに、コピー元のブロックに消去処理を行うことにより新たなフリーブロックを生成する。データ記憶装置は、コンパクションを行うことにより、書込不能なブロックからフリーブロックを生成でき、移動により有効データが書き込まれたブロックにおいても、未書込のページがあればそのページへの新たな書き込みが可能になる。
【００１１】
このような追記方式によれば、ホスト装置から書込要求が行われたサイズに比べて、データ記憶装置において書き込みされるサイズ及び読み込みされるサイズが大きくならないため、高いランダム書き込み性能を得ることができる。また、半導体記憶素子の寿命は、消去や書き込み回数に左右されることが知られており、データ記憶装置の設計寿命を長大化する目的においても、ホスト装置から書込要求が行われたサイズに比べて、データ記憶装置において書き込みされるサイズができるだけ小さくなることが好ましい。
【先行技術文献】
【非特許文献】
【００１２】
【非特許文献１】Ｍｅｎｄｅｌ  Ｒｏｓｅｎｂｌｕｍ  ａｎｄ  Ｊｏｈｎ  Ｋ．  Ｏｕｓｔｅｒｈｏｕｔ，  “Ｔｈｅ  ＬＦＳ  Ｓｔｏｒａｇｅ  Ｍａｎａｇｅｒ”，  Ｐｒｏｃｅｅｄｉｎｇｓ  ｏｆ  ｔｈｅ  １９９０  Ｓｕｍｍｅｒ  Ｕｓｅｎｉｘ，  Ａｎａｈｅｉｍ，  Ｃａｌｉｆｏｒｎｉａ，  Ｊｕｎｅ  １９９０，  ｐｐ．３１５−３２４
【発明の概要】
【発明が解決しようとする課題】
【００１３】
ところで、一般にデータ記憶装置へのアクセスパターンにはアドレス局所性があることが知られているが、上記のような追記方式ではアクセスパターンのアドレス局所性が考慮されていないため、通常利用時の性能が十分に向上されていなかった。
【００１４】
本発明は、上記事情に鑑みてなされたものであり、通常利用時の性能を向上させることができるコントローラ、データ記憶装置、及びプログラムを提供することを目的とする。
【課題を解決するための手段】
【００１５】
上述した課題を解決し、目的を達成するために、本発明の一態様にかかるコントローラは、データを記憶するデータ記憶部にアクセスするデータアクセス部と、前記データ記憶部の物理アドレスと論理アドレスとを対応付けたアドレス変換情報を含む管理情報を記憶する管理情報記憶部にアクセスする管理情報アクセス部と、前記データ記憶部の第１物理アドレスを記憶する第１記憶部にアクセスする第１アクセス部と、前記データ記憶部の第２物理アドレスを記憶する第２記憶部にアクセスする第２アクセス部と接続されたコントローラであって、前記第１物理アドレスの読み出しを前記第１アクセス部に指示し、ホスト装置から書き込みが要求された書込対象データを、前記第１物理アドレスが示す前記データ記憶部の記憶領域へ書き込むことを前記データアクセス部に指示し、前記アドレス変換情報の更新を前記管理情報アクセス部に指示し、前記第１物理アドレスの更新を前記第１アクセス部に指示する書込指示部と、前記管理情報の読み出しを前記管理情報アクセス部に指示し、前記管理情報に基づいて前記データ記憶部に記憶されているデータのうちコンパクション対象データの物理アドレスを抽出し、前記物理アドレスが示す前記データ記憶部の記憶領域に記憶されている前記コンパクション対象データの読み出しを前記データアクセス部に指示し、前記第２物理アドレスの読み出しを前記第２アクセス部に指示し、前記第２物理アドレスが示す前記データ記憶部の記憶領域への前記コンパクション対象データの書き込みを前記データアクセス部に指示し、前記アドレス変換情報の更新を前記管理情報アクセス部に指示し、前記第２物理アドレスの更新を前記第２アクセス部に指示するコンパクション部と、を備えることを特徴とする。
【００１６】
また、本発明の別の態様にかかるデータ記憶装置は、データを記憶するデータ記憶部と、前記データ記憶部の物理アドレスと論理アドレスとを対応付けたアドレス変換情報を含む管理情報を記憶する管理情報記憶部と、前記データ記憶部の第１物理アドレスを記憶する第１記憶部と、前記データ記憶部の第２物理アドレスを記憶する第２記憶部と、前記データ記憶部にアクセスするデータアクセス部と、前記管理情報記憶部にアクセスする管理情報アクセス部と、前記第１記憶部にアクセスする第１アクセス部と、前記第２記憶部にアクセスする第２アクセス部と、前記第１物理アドレスの読み出しを前記第１アクセス部に指示し、ホスト装置から書き込みが要求された書込対象データを、前記第１物理アドレスが示す前記データ記憶部の記憶領域へ書き込むことを前記データアクセス部に指示し、前記アドレス変換情報の更新を前記管理情報アクセス部に指示し、前記第１物理アドレスの更新を前記第１アクセス部に指示する書込指示部と、前記管理情報の読み出しを前記管理情報アクセス部に指示し、前記管理情報に基づいて前記データ記憶部に記憶されているデータのうちコンパクション対象データの物理アドレスを抽出し、前記物理アドレスが示す前記データ記憶部の記憶領域に記憶されている前記コンパクション対象データの読み出しを前記データアクセス部に指示し、前記第２物理アドレスの読み出しを前記第２アクセス部に指示し、前記第２物理アドレスが示す前記データ記憶部の記憶領域への前記コンパクション対象データの書き込みを前記データアクセス部に指示し、前記アドレス変換情報の更新を前記管理情報アクセス部に指示し、前記第２物理アドレスの更新を前記第２アクセス部に指示するコンパクション部と、を備えることを特徴とする。
【００１７】
また、本発明の別の態様にかかるプログラムは、データを記憶するデータ記憶部にアクセスするデータアクセス部と、前記データ記憶部の物理アドレスと論理アドレスとを対応付けたアドレス変換情報を含む管理情報を記憶する管理情報記憶部にアクセスする管理情報アクセス部と、前記データ記憶部の第１物理アドレスを記憶する第１記憶部にアクセスする第１アクセス部と、前記データ記憶部の第２物理アドレスを記憶する第２記憶部にアクセスする第２アクセス部と接続されたコントローラのためのプログラムであって、前記第１物理アドレスの読み出しを前記第１アクセス部に指示し、ホスト装置から書き込みが要求された書込対象データを、前記第１物理アドレスが示す前記データ記憶部の記憶領域へ書き込むことを前記データアクセス部に指示し、前記アドレス変換情報の更新を前記管理情報アクセス部に指示し、前記第１物理アドレスの更新を前記第１アクセス部に指示する書込指示部と、前記管理情報の読み出しを前記管理情報アクセス部に指示し、前記管理情報に基づいて前記データ記憶部に記憶されているデータのうちコンパクション対象データの物理アドレスを抽出し、前記物理アドレスが示す前記データ記憶部の記憶領域に記憶されている前記コンパクション対象データの読み出しを前記データアクセス部に指示し、前記第２物理アドレスの読み出しを前記第２アクセス部に指示し、前記第２物理アドレスが示す前記データ記憶部の記憶領域への前記コンパクション対象データの書き込みを前記データアクセス部に指示し、前記アドレス変換情報の更新を前記管理情報アクセス部に指示し、前記第２物理アドレスの更新を前記第２アクセス部に指示するコンパクション部と、してコンピュータを機能させるためのものである。
【発明の効果】
【００１８】
本発明によれば通常利用時の性能を向上させることができるという効果を奏する。
【図面の簡単な説明】
【００１９】
【図１】第１実施形態のデータ記憶装置のハードウェア構成例を示すブロック図。
【図２】第１実施形態のデータ記憶装置の機能構成例を示すブロック図。
【図３】管理情報の整合性の担保手法例の説明図。
【図４】管理情報の整合性の担保手法例の説明図。
【図５】管理情報の整合性の担保手法例の説明図。
【図６】管理情報の整合性の担保手法例の説明図。
【図７】第２実施形態のデータ記憶装置の機能構成例を示すブロック図。
【図８】正引きテーブルのデータ構成例を示す図。
【図９】逆引きテーブル、有効ページフラグ、及び有効ページカウンタのデータ構成例を示す図。
【図１０】ホスト書込追記ポインタのデータ構成例を示す図。
【図１１】命令の分割手法例の説明図。
【図１２】ログの一例を示す図。
【図１３】第２実施形態のデータ記憶装置の書込処理例を示すフローチャート。
【図１４】第２実施形態のデータ記憶装置の読込処理例を示すフローチャート。
【図１５】第２実施形態のデータ記憶装置のコンパクション処理例を示すフローチャート。
【図１６】第２実施形態のデータ記憶装置のスナップショット記録処理例を示すフローチャート。
【図１７】第２実施形態のデータ記憶装置の管理情報復元処理例を示すフローチャート。
【図１８】データを論理アドレス順に整列する原理の説明図。
【図１９】第３実施形態のデータ記憶装置の機能構成例を示すブロック図。
【図２０】有効ページフラグ及び有効ページカウンタのデータ構成例を示す図。
【図２１】未使用ブロックの割り当て手法の説明図。
【図２２】未使用ブロックの割り当て手法の説明図。
【図２３】未使用ブロックの割り当て手法の説明図。
【図２４】未使用ブロックの割り当て手法の説明図。
【図２５】未使用ブロックの割り当て手法の説明図。
【図２６】未使用ブロックの割り当て手法の説明図。
【図２７】ページに対するデータ書込手法の説明図。
【図２８】第３実施形態のデータ記憶装置の書込処理例を示すフローチャート。
【図２９】第３実施形態のデータ記憶装置のコンパクション処理例を示すフローチャート。
【図３０】第３実施形態のデータ記憶装置の管理情報復元処理例を示すフローチャート。
【図３１】第３実施形態のデータ記憶装置のブロック割当処理例を示すフローチャート。
【図３２】第３実施形態のデータ記憶装置のブロック追記完了処理例を示すフローチャート。
【図３３】第３実施形態のデータ記憶装置のフリーブロック回収処理例を示すフローチャート。
【図３４】制約を守らない復元処理例の説明図。
【図３５】制約を守らない復元処理例の説明図。
【図３６】制約を守らない復元処理例の説明図。
【図３７】制約を守らない復元処理例の説明図。
【図３８】制約を守らない復元処理例の説明図。
【図３９】制約を守る復元処理例の説明図。
【図４０】制約を守る復元処理例の説明図。
【図４１】制約を守る復元処理例の説明図。
【図４２】制約を守る復元処理例の説明図。
【図４３】制約を守る復元処理例の説明図。
【図４４】制約を守る復元処理例の説明図。
【図４５】ＬＢＡテーブルのデータ構成例を示す図。
【図４６】論物変換テーブルのデータ構成例を示す図。
【図４７】逆引きテーブル、有効ページフラグ、及び有効ページカウンタのデータ構成例を示す図。
【図４８】追記ポインタの進め方の一例の説明図。
【発明を実施するための形態】
【００２０】
以下、添付図面を参照しながら、本発明にかかるコントローラ、データ記憶装置及びプログラムの実施形態を詳細に説明する。なお以下の各実施形態では、データ記憶装置としてＳＳＤを例にとり説明するが、これに限定されるものではない。また以下の各実施形態では、データ記憶装置内部のデータ管理単位をページサイズと同一サイズとする場合を例にとり説明するが、これに限定されるものではない。例えば、１ページに複数のデータ管理単位を記憶する（データ管理単位をページサイズよりも小さいサイズとする）ようにしてもよいし、連続する複数のページに１つのデータ管理単位を記憶する（データ管理単位をページサイズよりも大きいサイズとする）ようにしてもよい。
【００２１】
（第１実施形態）
第１実施形態では、ホスト書込要求用の書込対象データを記憶（追記）する記憶領域とコンパクション用のコンパクション対象データを追記する記憶領域とを、それぞれ独立に確保する例について説明する。
【００２２】
まず、第１実施形態のデータ記憶装置の構成について説明する。
【００２３】
図１は、第１実施形態のデータ記憶装置１００のハードウェア構成の一例を示すブロック図である。図１に示すように、データ記憶装置１００は、プロセッサ５１と、ＢｏｏｔＲＯＭ（Read  Only  Memory）５２と、メモリインタフェース５３と、ＤＲＡＭ（Dynamic  Random  Access  Memory）５４と、ＳＡＴＡ／ＳＡＳインタフェース５５と、ＮＡＮＤインタフェース５７Ａ〜５７Ｆと、ＮＡＮＤ（半導体記憶媒体）５８Ａ〜５８Ｆと、これらを接続するバス５６とを備える。なお、以下では、ＮＡＮＤインタフェース５７Ａ〜５７Ｆを各々区別する必要がない場合は、単にＮＡＮＤインタフェース５７と称する場合がある。同様に、ＮＡＮＤ５８Ａ〜５８Ｆを各々区別する必要がない場合は、単にＮＡＮＤ５８と称する場合がある。
【００２４】
ＢｏｏｔＲＯＭ５２は、データ記憶装置１００の電源投入時に実行されるプログラムを記憶する。またＮＡＮＤ５８は、各種システムプログラムを記憶する。ＳＡＴＡ／ＳＡＳインタフェース５５は、プロセッサ５１の制御のもと、ホスト装置（図示省略）との通信を制御する。
【００２５】
プロセッサ５１は、電源投入時にＢｏｏｔＲＯＭ５２からプログラムを読み出して実行し、当該プログラムに従って、ＮＡＮＤ５８に記憶されている各種システムプログラムをＤＲＡＭ５４に転送する。そして、プロセッサ５１は、ＤＲＡＭ５４に転送されたシステムプログラムを実行することにより、データ記憶装置１００全体を制御して、各種機能を実現させる。具体的には、プロセッサ５１は、ＤＲＡＭ５４に転送されたシステムプログラムを実行することにより、ＳＡＴＡ／ＳＡＳインタフェース５５を介して、ホスト装置から送信されたコマンドを解釈し、解釈したコマンドに応じてＮＡＮＤ５８へのデータの書き込みやＮＡＮＤ５８からのデータの読み出しを制御する。またプロセッサ５１は、必要に応じてコンパクション処理を制御する。なお、各種システムプログラムによって実現される処理の全部又は一部を実現する回路で、各種プログラムの全部又は一部を代用してもよい。
【００２６】
メモリインタフェース５３は、ＤＲＡＭ５４を制御する。ＤＲＡＭ５４は、各種データや各種プログラムを記憶する。ＮＡＮＤインタフェース５７は、ＮＡＮＤ５８を制御するものであり、誤り訂正回路を含む。ＮＡＮＤ５８は、例えば、ＮＡＮＤ型フラッシュメモリで用いられる記憶素子によって構成される。
【００２７】
なお、図１に示す例では、ＮＡＮＤ５８の数を６つとしている。これは、例えば、複数のＮＡＮＤ５８を束ねてアクセスすることで、アクセス速度の高速化が図れるからである。但し、ＮＡＮＤの数はこれに限定されるものではない。第１実施形態では、ブロック単位での処理を例に取り説明するが、複数のＮＡＮＤ５８を束ねてアクセスする場合は、複数のブロックを束ねた論理ブロックと呼ばれる単位で処理を行うこともできる。
【００２８】
図２は、第１実施形態のデータ記憶装置１００の機能構成の概要の一例を示すブロック図である。図２に示すように、データ記憶装置１００は、受付部１１０と、管理情報記憶部１２０と、管理情報アクセス部１２１と、第１記憶部１３０と、第１アクセス部１３１と、第２記憶部１４０と、第２アクセス部１４１と、書込指示部１５０と、読込指示部１６０と、コンパクション部１７０と、データ記憶部１０５と、データアクセス部１０６とを、備える。
【００２９】
受付部１１０は、ホスト装置から書込要求を受け付ける。書込要求は、ホスト装置が書き込みを要求する論理アドレスの範囲である論理アドレス領域情報と、書込対象データを特定する書込データ特定情報とを、含む。論理アドレスとは、ホスト装置が認識できるデータ記憶装置１００の論理的なアドレスである。書込データ特定情報とは、書込対象データそのものや、書込対象データが記憶されている記憶場所の情報を含む情報である。
【００３０】
また、受付部１１０は、ホスト装置から読込要求を受け付ける。読込要求は、ホスト装置が読み込みを要求する論理アドレスの範囲である論理アドレス領域情報を含む。なお、読込要求には、読み込んだデータを記憶する場所を表す記憶場所情報が含まれていてもよい。
【００３１】
受付部１１０の機能は、例えば、プロセッサ５１が各種システムプログラムを実行することと、ＳＡＴＡ／ＳＡＳインタフェース５５の機能とにより実現される。
【００３２】
管理情報記憶部１２０は、管理情報を記憶する。管理情報は、データ記憶装置１００を動作させるために必要な情報で、物理アドレスと論理アドレスとを対応付けたアドレス変換情報を含む。物理アドレスは、データ記憶部１０５に記憶されたデータの物理的な記憶位置である。
【００３３】
第１記憶部１３０は、後述の書込指示部１５０がデータの書き込み先に指定すべき物理アドレスを記憶する。
【００３４】
第２記憶部１４０は、後述のコンパクション部１７０がデータの書き込み先に指定すべき物理アドレスを記憶する。
【００３５】
管理情報記憶部１２０、第１記憶部１３０、及び第２記憶部１４０はいずれも、例えば、ＤＲＡＭ５４の所定の領域により実現される。
【００３６】
管理情報アクセス部１２１は、後述の書込指示部１５０、読込指示部１６０、又はコンパクション部１７０からの読込指示を受け付け、管理情報記憶部１２０から管理情報を読み込み、読み込んだ管理情報を読込指示元（書込指示部１５０、読込指示部１６０、又はコンパクション部１７０）に応答する。また、管理情報アクセス部１２１は、書込指示部１５０又はコンパクション部１７０からの書込指示を受け付け、書き込みを指示された管理情報を管理情報記憶部１２０に書き込む。
【００３７】
第１アクセス部１３１は、後述の書込指示部１５０からの読込指示を受け、第１記憶部１３０から物理アドレスを読み込み、読み込んだ物理アドレスを書込指示部１５０に応答する。また、第１アクセス部１３１は、書込指示部１５０からの書込指示を受け、書き込みを指示された物理アドレスを第１記憶部１３０に書き込む。
【００３８】
第２アクセス部１４１は、後述のコンパクション部１７０からの読込指示を受け、第２記憶部１４０から物理アドレスを読み込み、読み込んだ物理アドレスをコンパクション部１７０に応答する。また、第２アクセス部１４１は、コンパクション部１７０からの書込指示を受け、書き込みを指示された物理アドレスを第２記憶部１４０に書き込む。
【００３９】
管理情報アクセス部１２１、第１アクセス部１３１、及び第２アクセス部１４１はいずれも、例えば、メモリインタフェース５３の機能により実現される。
【００４０】
データ記憶部１０５は、ホスト装置から書込が要求されるユーザデータなど各種データを記憶する。データ記憶部１０５は、ＮＡＮＤ５８により実現される。
【００４１】
データアクセス部１０６は、後述の書込指示部１５０、読込指示部１６０、又はコンパクション部１７０からの読込指示を受け、データ記憶部１０５からデータを読み込み、読み込んだデータを読込指示元（書込指示部１５０、読込指示部１６０、又はコンパクション部１７０）に応答する。また、データアクセス部１０６は、書込指示部１５０又はコンパクション部１７０からの書込指示を受け、書き込みを指示されたデータをデータ記憶部１０５に書き込む。データアクセス部１０６は、例えば、ＮＡＮＤインタフェース５７の機能により実現される。
【００４２】
書込指示部１５０は、受付部１１０により受け付けられた書込要求に含まれる書込データ特定情報を参照して書込対象データを取得する。書込指示部１５０は、第１記憶部１３０に記憶されている物理アドレスの読み込みを第１アクセス部１３１に指示し、物理アドレスを取得する。書込指示部１５０は、取得した書込対象データを、取得した物理アドレスが示すデータ記憶部１０５の記憶位置へ書き込むことを、データアクセス部１０６に指示する。書込指示部１５０は、データ記憶部１０５に書き込んだ書込対象データのアドレス変換情報を管理情報記憶部１２０に書き込むことを管理情報アクセス部１２１に指示する。書込指示部１５０は、第１記憶部１３０が記憶する物理アドレスを更新して書き込むことを第１アクセス部１３１に指示する。
【００４３】
読込指示部１６０は、受付部１１０により受け付けられた読込要求に含まれる読込対象データの論理アドレス領域情報を抽出する。読込指示部１６０は、管理情報記憶部１２０に記憶されている管理情報の読み込みを管理情報アクセス部１２１に指示し、管理情報を取得する。読込指示部１６０は、抽出した論理アドレス領域情報を用いて、取得した管理情報から物理アドレスを抽出する。読込指示部１６０は、抽出した物理アドレスが示すデータ記憶部１０５の記憶位置から読込対象データを読み出すことを、データアクセス部１０６に指示し、読込対象データを取得する。読込指示部１６０は、受付部１１０を介してホスト装置に読込回答を送付する。読込回答は、読込対象データそのものや、読込対象データが記憶場所情報で特定される場所に記憶した旨の情報を含む情報である。
【００４４】
コンパクション部１７０は、管理情報記憶部１２０に記憶されている管理情報の読み込みを管理情報アクセス部１２１に指示し、管理情報を取得する。コンパクション部１７０は、取得した管理情報を用いて、コンパクション対象データの物理アドレスを抽出する。書込指示部１５０により、ある論理アドレスに対して新たなデータが書き込まれた場合、以前に同じ値を示す論理アドレスに対応して書き込みが行われたデータの記憶領域は無効な記憶領域になるが、コンパクション対象データとは、無効ではない記憶領域に記憶されたデータである。
【００４５】
コンパクション部１７０は、抽出した物理アドレスが示すデータ記憶部１０５の記憶位置からコンパクション対象データを読み出すことを、データアクセス部１０６に指示し、コンパクション対象データを取得する。コンパクション部１７０は、第２記憶部１４０に記憶されている物理アドレスの読み込みを第２アクセス部１４１に指示し、物理アドレスを取得する。コンパクション部１７０は、取得したコンパクション対象データを、取得した物理アドレスが示すデータ記憶部１０５の記憶位置へ書き込むことを、データアクセス部１０６に指示する。コンパクション部１７０は、データ記憶部１０５に書き込んだコンパクション対象データのアドレス変換情報を管理情報記憶部１２０に書き込むことを管理情報アクセス部１２１に指示する。コンパクション部１７０は、第２記憶部１４０が記憶する物理アドレスを更新して書き込むことを第２アクセス部１４１に指示する。
【００４６】
書込指示部１５０、読込指示部１６０、及びコンパクション部１７０それぞれの機能は、プロセッサ５１が各種システムプログラムを実行することにより実現される。
【００４７】
このように第１実施形態では、ホスト書込要求用の書込対象データを記憶（追記）する記憶領域とコンパクション用のコンパクション対象データを追記する記憶領域とをそれぞれ独立に確保しているので、アクセスパターンのアドレス局所性を考慮することができ、通常利用時の性能を向上させることができる。
【００４８】
（第２実施形態）
第１実施形態では、ホスト書込要求用の書込対象データを記憶（追記）する記憶領域とコンパクション用のコンパクション対象データを追記する記憶領域とを、それぞれ独立に確保する例について説明した。ところで、ホスト書込処理とコンパクション処理とをそれぞれ独立して並行に行う場合、同一の論理アドレス領域に対するホスト書込処理とコンパクション処理とが重なる可能性があり、管理情報の整合性を担保する必要がある。
【００４９】
そこで第２実施形態では、同一の論理アドレス領域に対するホスト書込処理とコンパクション処理とが重なった場合に、最終的に管理情報がホスト書込処理によって書かれた新しいページを指すように更新して、管理情報の整合性を担保する例について説明する。
【００５０】
まず、管理情報の整合性の担保手法について説明する。
【００５１】
図３〜図６はいずれも、同一の論理アドレス領域に対してホスト書込処理とコンパクション処理が重なった状況を示している。このような状況では、最終的に管理情報がホスト書込処理によって書かれた新しいページを指すように更新すれば、管理情報の整合性を担保できる。
【００５２】
図３に示す例では、コンパクション処理が先に開始し、コンパクション処理中にホスト書込処理が開始し、ホスト書込処理が完了する前にコンパクション処理が完了している。この場合は、コンパクション処理及びホスト書込処理の双方で管理情報を更新することで、管理情報はホスト書込要求によって書かれた新しいページを指すようになる。
【００５３】
図４に示す例では、コンパクション処理が先に開始し、コンパクション処理中にホスト書込処理が開始し、コンパクション処理が完了する前にホスト書込処理が完了している。この場合は、コンパクション処理終了後に管理情報を更新しないことで、管理情報はホスト書込要求によって書かれた新しいページを指すようになる。
【００５４】
図５に示す例では、ホスト書込処理が先に開始し、ホスト書込処理中にコンパクション処理が開始し、コンパクション処理が完了する前にホスト書込処理が完了している。この場合は、コンパクション処理終了後に管理情報を更新しないことで、管理情報はホスト書込要求によって書かれた新しいページを指すようになる。
【００５５】
図６に示す例では、ホスト書込処理が先に開始し、ホスト書込処理中にコンパクション処理が開始し、ホスト書込処理が完了する前にコンパクション処理が完了している。この場合は、コンパクション処理及びホスト書込処理の双方で管理情報を更新することで、管理情報は、ホスト書込要求によって書かれた新しいページを指すようになる。
【００５６】
また、データ記憶装置が管理情報を消失するとデータ記憶装置として機能できなくなるため、任意のタイミングで管理情報を記憶媒体に保存し、必要に応じて保存した管理情報を復元する必要がある。
【００５７】
管理情報の保存は、管理情報が更新される度に保存する必要があるが、管理情報が更新される度に管理情報を丸ごと保存すると、保存時間が長くかかり、記憶媒体への書き込み量も多くなってしまう。従って、管理情報丸ごと（スナップショット）を所定のタイミングで保存し、管理情報が更新される度に差分情報（ログ）を保存するようにする。
【００５８】
管理情報の復元は、記憶媒体に保存されている最新のスナップショットを復元したのち、スナップショット保存後に保存したログを時系列順に、復元したスナップショットに順次適用する。これにより最後にログを記録した時点の管理情報が復元できる。
【００５９】
ところで、ホスト書込要求用の記憶領域とコンパクション用の記憶領域とをそれぞれ独立に確保し、ホスト書込処理とコンパクション処理をそれぞれ独立して並行に行うと、一般に、ホスト書込要求による書き込み先とコンパクション処理のアクセス先とが、記憶媒体上でとびとびの物理アドレスになる。しかしながら、ＳＳＤのような半導体記憶素子を記憶媒体として用いるデータ記憶装置であれば、記憶媒体にアクセスする際にとびとびの物理アドレスであっても時間的なペナルティが存在しない、又は非常に小さいため、ホスト書込要求用の記憶領域とコンパクション用の記憶領域とをそれぞれ独立に確保し、ホスト書込処理とコンパクション処理をそれぞれ独立して並行に行うことにより得られる効果が大きくなる。一方で、ＨＤＤのようなディスクを記憶媒体として用いるデータ記憶装置の場合、記憶媒体にアクセスする際にとびとびの物理アドレスであった場合、ヘッドの移動処理時間やディスク上のデータの頭出しが完了するまでの回転待ち時間などの時間的なペナルティが大きいため、ホスト書込要求用の記憶領域とコンパクション用の記憶領域とをそれぞれ独立に確保し、ホスト書込処理とコンパクション処理をそれぞれ独立して並行に行うことにより得られる効果は小さくなる。
【００６０】
次に、第２実施形態のデータ記憶装置の構成について説明する。
【００６１】
図７は、第２実施形態のデータ記憶装置２００の機能構成の詳細の一例を示すブロック図である。図７に示すように、データ記憶装置２００は、半導体記憶媒体制御部２０３と、半導体記憶媒体２０５と、変換テーブル制御部２２１と、変換テーブル記憶部２２３と、ホスト書込追記ポインタ制御部２３２と、ホスト書込追記ポインタ記憶部２３０と、コンパクション追記ポインタ制御部２４２と、コンパクション追記ポインタ記憶部２４０と、ブロック使用情報制御部２２６と、ブロック使用情報記憶部２２８と、バッファ制御部２０７と、バッファ記憶部２０９と、ホストインタフェース部２１０と、命令制御部２１５と、書込指示部２５０と、読込指示部２６０と、コンパクション部２７０と、スナップショット保存部２８２と、ログ保存部２８４と、管理情報復元部２９０と、スナップショット復元部２９２と、ログ復元部２９４とを、備える。
【００６２】
半導体記憶媒体制御部２０３は、半導体記憶媒体２０５に対するデータの読み書きを制御するものであり、書込指示部２５０、読込指示部２６０、コンパクション部２７０、スナップショット保存部２８２、ログ保存部２８４、スナップショット復元部２９２、及びログ復元部２９４による半導体記憶媒体２０５へのアクセスを補助する。半導体記憶媒体制御部２０３の機能は、例えば、プロセッサ５１が各種システムプログラムを実行することと、ＮＡＮＤインタフェース５７の機能とにより実現される。
【００６３】
半導体記憶媒体制御部２０３は、書込指示部２５０、読込指示部２６０、又はコンパクション部２７０から、指定された物理アドレス領域のデータの読込要求を受けると、半導体記憶媒体２０５の指定された物理アドレス領域からデータを読み込み、読み込んだデータを読込要求元に返却する。半導体記憶媒体制御部２０３は、書込指示部２５０、読込指示部２６０、又はコンパクション部２７０から、書込対象データ及び指定された物理アドレス領域へのデータの書込要求を受けると、受け取った書込対象データを、半導体記憶媒体２０５の指定された物理アドレス領域に書き込む。
【００６４】
半導体記憶媒体制御部２０３は、書込指示部２５０、読込指示部２６０、又はコンパクション部２７０から、連続して読込要求又は書込要求が発行されると、要求された処理を連続して実行する。このとき、書込指示部２５０、読込指示部２６０、及びコンパクション部２７０のうち連続した要求を発行した機能部以外の機能部から、単独又は連続して読込要求又は書込要求が半導体記憶媒体制御部２０３に発行される、若しくは既に発行されているとする。例えば、コンパクション部２７０が連続して要求を発行し、半導体記憶媒体制御部２０３が要求された処理を連続して実行しているときに、書込指示部２５０から書込要求が発行される、若しくは書込指示部２５０からすでに書込要求があったとする。この場合、半導体記憶媒体制御部２０３は、必要に応じて、実行中の次の連続する要求された処理を実行するのではなく、実行中の連続する要求を発行した機能部以外の機能部から要求された処理を実行する。つまり、半導体記憶媒体制御部２０３は、必要に応じて処理を切り替える。また半導体記憶媒体制御部２０３は、切り替え後の処理が完了すると必要に応じて実行中の次の連続する要求された処理を実行する。つまり、半導体記憶媒体制御部２０３は必要に応じて切り替えた処理を再開する。
【００６５】
半導体記憶媒体制御部２０３は、書込指示部２５０又はコンパクション部２７０から、指定されたブロックの消去要求を受けると、半導体記憶媒体２０５の指定されたブロックの消去処理を行う。
【００６６】
半導体記憶媒体制御部２０３は、スナップショット保存部２８２、又はログ保存部２８４から、データの保存要求を受けると、保存要求されたデータを半導体記憶媒体２０５の予め固定されている領域、又は半導体記憶媒体２０５の予め固定されている領域に記憶されている情報からたどることができる領域に保存する。
【００６７】
半導体記憶媒体制御部２０３は、スナップショット復元部２９２、又はログ復元部２９４から、データの読出要求を受けると、半導体記憶媒体２０５の予め固定されている領域又は、半導体記憶媒体２０５の予め固定されている領域に記憶されている情報からたどることができる領域から、要求されたデータを読み込む。そして、半導体記憶媒体制御部２０３は、読み込んだデータをスナップショット復元部２９２、又はログ復元部２９４に返却する。
【００６８】
半導体記憶媒体２０５は、データ記憶部１０５に対応し、例えばＮＡＮＤ型のフラッシュメモリによって構成される。ＮＡＮＤ型のフラッシュメモリのような記憶素子は、ランダムな読み書きができず、ページと呼ばれる単位で読み書きが可能で、複数ページがまとまってブロックと呼ばれる単位の記憶領域を構成する。半導体記憶媒体２０５は、このようなブロックが複数集まって構成される。半導体記憶媒体２０５は複数接続されていてもよい。
【００６９】
変換テーブル制御部２２１は、変換テーブル記憶部２２３が記憶する変換テーブルへのアクセスを制御するものであり、書込指示部２５０、読込指示部２６０、コンパクション部２７０、スナップショット保存部２８２、スナップショット復元部２９２、及びログ復元部２９４による変換テーブル記憶部２２３へのアクセスを補助する。変換テーブル制御部２２１の機能は、例えば、プロセッサ５１が各種システムプログラムを実行することと、ＮＡＮＤインタフェース５７の機能とにより実現される。
【００７０】
変換テーブル制御部２２１は、書込指示部２５０、読込指示部２６０、コンパクション部２７０、スナップショット保存部２８２、スナップショット復元部２９２、又はログ復元部２９４から、変換テーブルへのアクセス要求を受け付け、受け付けたアクセス要求に応じた処理を行う。
【００７１】
変換テーブル制御部２２１は、書込指示部２５０又はコンパクション部２７０が変換テーブルの排他制御を行うために、変換テーブルのロック処理を行う。変換テーブル制御部２２１は、書込指示部２５０又はコンパクション部２７０が変換テーブルの排他制御を終了するために、変換テーブルのロック解除処理を行う。
【００７２】
変換テーブル記憶部２２３は、管理情報記憶部１２０の一部に対応し、変換テーブルを記憶する。変換テーブルには、正引きテーブル、逆引きテーブル、有効ページフラグ、及び有効ページカウンタが含まれる。
【００７３】
正引きテーブルは、データ記憶装置２００が記憶するデータの論理アドレスと、半導体記憶媒体２０５において当該データが実際に記憶されている物理的な記憶位置を示す物理アドレスとの対応関係を示すテーブルであり、論理アドレスから物理アドレスに変換する際に用いられるテーブルである。図８は、正引きテーブルのデータ構成の一例を示す図である。図８に示すように、正引きテーブルは、論理アドレスをインデックスとし、論理アドレスと物理アドレスとをエントリとして含む。物理アドレスはブロック番号及びページ番号を含む。
【００７４】
逆引きテーブルは、データ記憶装置２００が記憶するデータの論理アドレスと、半導体記憶媒体２０５において当該データが実際に記憶されている物理的な記憶位置を示す物理アドレスとの対応関係を示すテーブルであり、正引きテーブルとは逆に、物理アドレスから論理アドレスに変換する際に用いられるテーブルである。有効ページフラグは、ブロックに含まれるページのうち有効なデータが書き込まれているページである有効ページがどのページであるかを真偽値で示すものである。有効ページカウンタは、ブロックに含まれるページのうち有効ページがいくつあるかを示すものである。
【００７５】
図９は、逆引きテーブル、有効ページフラグ、及び有効ページカウンタのデータ構成の一例を示す図である。図９に示すように、逆引きテーブル、有効ページフラグ、及び有効ページカウンタは、ブロック番号をインデックスとし、ブロック番号、有効ページカウンタ、論理アドレスの集合、及び有効ページフラグの集合をエントリとして含む。論理アドレスの集合及び有効ページフラグの集合は、ブロックの中に配置されるページの順番に並べることで、どのページの論理アドレス又は有効ページフラグであるかを特定できる。また、同一ブロックの有効ページカウンタの値と、有効ページフラグの真値の総数は一致する。なお、インデックスとなるブロック番号と正引きテーブルのエントリであるブロック番号とは、同一のブロックには同一の番号を与えるものとする。
【００７６】
ホスト書込追記ポインタ制御部２３２は、ホスト書込追記ポインタ記憶部２３０が記憶するホスト書込追記ポインタへのアクセスを制御するものであり、書込指示部２５０、スナップショット保存部２８２、スナップショット復元部２９２、及びログ復元部２９４によるホスト書込追記ポインタ記憶部２３０へのアクセスを補助する。ホスト書込追記ポインタ制御部２３２の機能は、例えば、プロセッサ５１が各種システムプログラムを実行することと、メモリインタフェース５３の機能とにより実現される。
【００７７】
ホスト書込追記ポインタ制御部２３２は、書込指示部２５０、スナップショット保存部２８２、スナップショット復元部２９２、又はログ復元部２９４から、ホスト書込追記ポインタへのアクセス要求を受け付け、受け付けたアクセス要求に応じた処理を行う。
【００７８】
ホスト書込追記ポインタ記憶部２３０は、第１記憶部１３０に対応し、ホスト書込追記ポインタを記憶する。図１０は、ホスト書込追記ポインタのデータ構成の一例を示す図である。図１０に示すように、ホスト書込追記ポインタは、ブロック番号及びページ番号を含む。これにより、次にデータを書き込むべきページの物理アドレスが分かる。
【００７９】
コンパクション追記ポインタ制御部２４２は、コンパクション追記ポインタ記憶部２４０が記憶するコンパクション追記ポインタへのアクセスを制御するものであり、コンパクション部２７０、スナップショット保存部２８２、スナップショット復元部２９２、及びログ復元部２９４によるコンパクション追記ポインタ記憶部２４０へのアクセスを補助する。コンパクション追記ポインタ制御部２４２の機能は、例えば、プロセッサ５１が各種システムプログラムを実行することと、メモリインタフェース５３の機能とにより実現される。
【００８０】
コンパクション追記ポインタ制御部２４２は、コンパクション部２７０、スナップショット保存部２８２、スナップショット復元部２９２、又はログ復元部２９４から、コンパクション追記ポインタへのアクセス要求を受け付け、受け付けたアクセス要求に応じた処理を行う。
【００８１】
コンパクション追記ポインタ記憶部２４０は、第２記憶部１４０に対応し、コンパクション追記ポインタを記憶する。コンパクション追記ポインタは、図１０に示すホスト書込追記ポインタ同様、ブロック番号及びページ番号を含む。これにより、次にデータを書き込むべきページの物理アドレスが分かる。
【００８２】
ブロック使用情報制御部２２６は、ブロック使用情報記憶部２２８が記憶するブロック使用情報へのアクセスを制御する。ブロック使用情報は、半導体記憶媒体２０５に含まれる各ブロックが未使用ブロックであるか、使用状態ブロックであるかを示す。ここで、未使用ブロックとは、まだデータが書き込まれたことがないブロックか、もしくは以前に書き込まれたデータが全てのページにおいて無効化されたことが判明し、新たな書き込み先ブロックとして回収されたブロックである。使用状態ブロックとは、以前に新たな書き込み先ブロックとして割り当てられたブロックで、書き込まれたデータがまだすべてのページにおいて無効化されたことが判明しておらず、未使用ブロックとして回収されていないブロックである。ブロック使用情報制御部２２６は、書込指示部２５０、コンパクション部２７０、スナップショット保存部２８２、スナップショット復元部２９２、及びログ復元部２９４によるブロック使用情報記憶部２２８へのアクセスを補助する。ブロック使用情報制御部２２６の機能は、例えば、プロセッサ５１が各種システムプログラムを実行することと、メモリインタフェース５３の機能とにより実現される。
【００８３】
ブロック使用情報制御部２２６は、書込指示部２５０、コンパクション部２７０、スナップショット保存部２８２、スナップショット復元部２９２、又はログ復元部２９４から、ブロック使用情報へのアクセス要求を受け付け、受け付けたアクセス要求に応じた処理を行う。
【００８４】
ブロック使用情報記憶部２２８は、管理情報記憶部１２０の一部に対応し、ブロック使用情報を記憶する。ブロック使用情報には、半導体記憶媒体２０５に含まれる各ブロックについて、未使用ブロックであるか、使用状態ブロックであるかの情報が対応付けられている。また、データ記憶装置２００の製造時又は動作時に不良と判断されたブロックについて、その旨の情報を対応付けてもよい。
【００８５】
バッファ制御部２０７は、バッファ記憶部２０９へのデータの入出力を制御するものであり、書込指示部２５０、読込指示部２６０、及びコンパクション部２７０によるバッファ記憶部２０９へのアクセスを補助する。バッファ制御部２０７の機能は、例えば、プロセッサ５１が各種システムプログラムを実行することと、メモリインタフェース５３の機能とにより実現される。
【００８６】
バッファ制御部２０７は、書込指示部２５０、読込指示部２６０、又はコンパクション部２７０から、入力すべきデータ及びデータ入力要求を受け付け、受け付けたデータをバッファ記憶部２０９に入力する。バッファ制御部２０７は、書込指示部２５０、読込指示部２６０、又はコンパクション部２７０から、データ出力要求を受け付け、受け付けた出力要求に対応するデータをバッファ記憶部２０９から出力し、データ出力要求元に返却する。
【００８７】
バッファ記憶部２０９は、データをバッファとして記憶するものであり、例えば、ＤＲＡＭ５４の所定の領域により実現される。
【００８８】
ホストインタフェース部２１０は、受付部１１０の一部機能が対応し、サーバコンピュータ、ストレージシステムのコントローラ、パーソナルコンピュータなどのホスト装置と、データ記憶装置２００との通信を制御するインタフェースである。
【００８９】
ホストインタフェース部２１０は、ホスト装置から、書込命令及び読込命令を含む命令を受け付け、命令制御部２１５に、受け付けた命令の種類に応じた処理を行うように、命令実行通知を発行する。書込命令には、データ記憶装置２００の書込先論理アドレス及び書込データサイズが含まれる。読込命令には、データ記憶装置２００の読込先論理アドレス及び読込データサイズが含まれる。
【００９０】
ホストインタフェース部２１０は、命令制御部２１５から、ホスト装置へデータを送信するように依頼する要求を受け付けると、受け付けたホスト装置へデータを送信するように依頼する要求を発行する。そしてホストインタフェース部２１０は、ホスト装置から、データ記憶装置２００が受信すべきデータの送信を受けると、命令制御部２１５に送信する。
【００９１】
ホストインタフェース部２１０は、命令制御部２１５から、ホスト装置へデータを受信するように依頼する要求を受け付けると、受け付けたホスト装置へデータを受信するように依頼する要求を発行する。そしてホストインタフェース部２１０は、ホスト装置からのデータ受信要求を受けると、受け付けたホスト装置からのデータ受信要求を命令制御部２１５に発行し、命令制御部２１５から受け取ったホスト装置が受信すべきデータを、ホスト装置に対して送信する。
【００９２】
命令制御部２１５は、受付部１１０の一部機能が対応し、ホストインタフェース部２１０から命令実行通知を受け付けると、受け付けた命令の種類に応じて、書込指示部２５０又は読込指示部２６０に処理を振り分ける。命令制御部２１５の機能は、例えば、プロセッサ５１が各種システムプログラムを実行することにより実現される。
【００９３】
命令制御部２１５は、ホストインタフェース部２１０から書込命令又は読込命令を受け取ると、当該命令の領域が管理サイズ領域（ページ）の境界をまたいでいる場合は、当該命令を管理サイズの領域の境界で分割する。例えば、セクタサイズ５１２バイト、管理サイズ４キロバイトの構成において、書き込み先論理アドレス３、書き込みデータサイズ１６の書込命令の場合における当該書込命令の書き込み領域と管理サイズの領域の境界の関係を図１１に示す。図１１に示す例の場合、命令制御部２１５は、書き込み先論理アドレス３、書き込みデータサイズ１６の書込命令を、書き込み先論理アドレス３、書き込みデータサイズ５の書込命令と、書き込み先論理アドレス８、書き込みデータサイズ８の書込命令と、書き込み先論理アドレス１６、書き込みデータサイズ３の書込命令に分割する。そして命令制御部２１５は、分割した命令が書込命令の時は書込指示部２５０に通知し、分割した命令が読込命令の時は読込指示部２６０に通知する。なお命令制御部２１５は、ホストインタフェース部２１０から受け取った書込命令又は読込命令の領域が管理サイズ領域の境界をまたいでいなかった場合は、受け取った命令が書込命令の時は書込指示部２５０に通知し、受け取った命令が読込命令の時は読込指示部２６０に通知する。
【００９４】
命令制御部２１５は、ホストインタフェース部２１０から書込命令又は読込命令以外のその他の命令の実行通知を受け付けると、適切に処理する。
【００９５】
命令制御部２１５は、書込指示部２５０から、ホスト装置へデータ送信するように依頼する要求を受け付けると、受け付けたホスト装置へデータを送信するように依頼する要求をホストインタフェース部２１０に送信し、ホスト装置が送信したデータをホストインタフェース部２１０から受け取ると、受け取ったデータを書込指示部２５０に送信する。
【００９６】
命令制御部２１５は、読込指示部２６０から、ホスト装置へデータを受信するように依頼する要求を受け付けると、受け付けたホスト装置へデータを受信するように依頼する要求をホストインタフェース部２１０に送信し、ホスト装置からのデータ受信要求をホストインタフェース部２１０から受け取ると、受け付けたホスト装置からのデータ受信要求を読込指示部２６０に送信し、読込指示部２６０から、ホスト装置が受信すべきデータを受け取ると、受け取ったデータをホストインタフェース部２１０に送信する。
【００９７】
書込指示部２５０は、書込命令に対応した処理を行う。書込指示部２５０の機能は、例えば、プロセッサ５１が各種システムプログラムを実行することにより実現される。
【００９８】
書込指示部２５０は、命令制御部２１５から書込命令（命令制御部２１５によって分割された書込命令を含む）を受け付ける。
【００９９】
書込指示部２５０は、命令制御部２１５に、ホスト装置へデータを送信するように依頼する要求を発行し、命令制御部２１５から、ホスト装置が送信したデータを受け取ると、バッファ制御部２０７に、受け取ったデータの保存要求を発行する。なお、命令制御部２１５によって分割された書込命令それぞれについて、前述のように個別にホスト装置とデータをやり取りしてもよいし、命令制御部２１５又はホストインタフェース部２１０が一旦取りまとめて、一度にデータをやり取りしてもよい。
【０１００】
書込指示部２５０は、書込命令の書き込みデータサイズが管理サイズ未満の場合（例えば、図１１に示す例のような、分割された結果、書き込み先論理アドレス３、書き込みデータサイズ５の書込命令となった命令：以降、この分割された結果書き込み先論理アドレス３、書き込みデータサイズ５の書込命令となった命令のことを、図１１に示す例と呼ぶ）は、管理サイズ分のデータとなるようにパディング処理を行う。具体的には、書込指示部２５０は、残りの論理アドレス領域（図１１に示す例では、論理アドレス０、データサイズ３の領域）が、どの物理アドレス領域に対応するか、変換テーブル制御部２２１に問い合わせ、残りの論理アドレス領域が対応する物理アドレス領域情報を取得する。そして、書込指示部２５０は、取得した残りの論理アドレス領域が対応する物理アドレス領域のデータの読込要求を半導体記憶媒体制御部２０３に発行するとともに、読み込んだデータの保存要求をバッファ制御部２０７に発行し、結果として、命令制御部２１５から受け取ったデータと合わせて管理サイズ分のデータをバッファ記憶部２０９に保存する。
【０１０１】
書込指示部２５０は、ホスト書込追記ポインタ制御部２３２に、現在のホスト書込追記ポインタを問い合わせて、ホスト書込追記ポインタを取得し、ホスト書込追記ポインタが対応する物理アドレス領域情報を取得する。
【０１０２】
書込指示部２５０は、保存した管理サイズ分のデータの取り出し要求をバッファ制御部２０７に発行し、取り出したデータと、取得したホスト書込追記ポインタが対応する物理アドレス領域情報を半導体記憶媒体制御部２０３に送信することで、取り出したデータを、取得したホスト書込追記ポインタが対応する物理アドレス領域に書き込むことを依頼する。書込指示部２５０は、取得したホスト書込追記ポインタがブロックの先頭ページを示していたときは、半導体記憶媒体制御部２０３に書き込みを依頼する前に、半導体記憶媒体制御部２０３にブロックの消去処理を依頼する。なお、ブロックの消去処理を行うタイミングはこれに限られない。例えば、ホスト書き込み用のブロックを新たに割り当てたタイミングでも良いし、未使用ブロックとして回収した時でも良いし、未使用ブロックとして回収してから半導体記憶媒体制御部２０３に書き込みを依頼するまでの間の任意のタイミングでも良い。
【０１０３】
書込指示部２５０は、変換テーブル制御部２２１に、取得したホスト書込追記ポインタが対応する物理アドレス領域が対応する逆引きテーブルに、書込命令の領域が含まれる管理サイズの領域の先頭の論理アドレス（図１１に示す例では、論理アドレス０）を登録するように依頼する。また、書込指示部２５０は、ログ保存部２８４に、更新した変換テーブルの更新情報を通知する。
【０１０４】
書込指示部２５０は、変換テーブル制御部２２１に、変換テーブルの排他制御開始処理（ロック処理）を依頼する。
【０１０５】
書込指示部２５０は、変換テーブルの排他制御中に、変換テーブルが新たに書き込んだデータを示すように更新する。より詳細には、書込指示部２５０は、変換テーブル制御部２２１に、書込命令の領域が含まれる管理サイズの領域の先頭の論理アドレス（図１１に示す例では、論理アドレス０）に、書込命令受付前に対応していた物理アドレス（更新前物理アドレス）を問い合わせる。また書込指示部２５０は、変換テーブル制御部２２１に、取得した更新前物理アドレスが対応する有効ページフラグをＯＦＦにするように依頼する。また書込指示部２５０は、変換テーブル制御部２２１に、取得した更新前物理アドレスが対応するブロックの有効ページカウンタをデクリメントするように依頼する。また書込指示部２５０は、変換テーブル制御部２２１に、取得したホスト書込追記ポインタが対応する有効ページページフラグをＯＮにするように依頼する。また書込指示部２５０は、変換テーブル制御部２２１に、取得したホスト書込追記ポインタが対応するブロックの有効ページカウンタをインクリメントするように依頼する。また書込指示部２５０は、変換テーブル制御部２２１に、正引きテーブルの書込命令の領域が含まれる管理サイズの領域の先頭の論理アドレス（図１１に示す例の場合では、論理アドレス０）が、ホスト書込追記ポインタが対応する物理アドレス領域情報を指すように更新するように依頼する。また書込指示部２５０は、ログ保存部２８４に、更新した変換テーブルの更新情報を通知する。
【０１０６】
書込指示部２５０は、変換テーブル制御部２２１に、変換テーブルの排他制御終了処理（ロック解除処理）を依頼する。
【０１０７】
書込指示部２５０は、ホスト書込追記ポインタ制御部２３２に、ホスト書込追記ポインタが次のページを指すように更新するように依頼する。書込指示部２５０は、ホスト書込追記ポインタ制御部２３２に、更新したホスト書込追記ポインタが、ブロックの最後のページを超えてしまったかを問い合わせ、最後のページを超えてしまった旨の返答を受けると、ブロック使用情報制御部２２６に、未使用状態のブロックの割り当て処理を依頼し、結果としてブロック使用情報が更新され、ホスト書込追記ポインタ制御部２３２に、ホスト書込追記ポインタが新たに割り当てられたブロックの先頭のページを指すように更新するように依頼する。また書込指示部２５０は、ログ保存部２８４に、更新したホスト書込追記ポインタの更新情報と、更新したブロック使用情報の更新情報を通知する。
【０１０８】
書込指示部２５０は、ログ保存部２８４に、ログ保存部２８４に通知した更新情報をコミットするように依頼する。
【０１０９】
読込指示部２６０は、読込命令に対応した処理を行う。読込指示部２６０の機能は、例えば、プロセッサ５１が各種システムプログラムを実行することにより実現される。
【０１１０】
読込指示部２６０は、命令制御部２１５から読込命令（命令制御部２１５によって分割されている読込命令を含む）を受け付ける。読込指示部２６０は、受け付けた読込命令の論理アドレス領域が、どの物理アドレス領域に対応するか、変換テーブル制御部２２１に問い合わせ、対応する物理アドレス領域情報を取得する。
【０１１１】
読込指示部２６０は、取得した物理アドレス領域のデータの読込要求を半導体記憶媒体制御部２０３に発行し、読み込んだデータの保存要求をバッファ制御部２０７に発行する。
【０１１２】
読込指示部２６０は、命令制御部２１５に、ホスト装置へデータを受信するように依頼する要求を発行し、命令制御部２１５から、ホスト装置からのデータ受信要求を受け取ると、バッファ制御部２０７に、読み込んだデータの取り出し要求を発行し、取り出したデータを、命令制御部２１５に渡す。なお、命令制御部２１５によって分割された読込命令それぞれについて、前述のように個別にホスト装置とデータをやり取りしてもよいし、命令制御部２１５又はホストインタフェース部２１０が一旦取りまとめて、一度にデータをやり取りしてもよい。
【０１１３】
コンパクション部２７０は、コンパクション処理が必要になったタイミング、又は任意のタイミングでコンパクション処理を行う。コンパクション部２７０の機能は、例えば、プロセッサ５１が各種システムプログラムを実行することにより実現される。
【０１１４】
コンパクション部２７０は、ブロック使用情報制御部２２６に、使用状態ブロックのブロック番号を問い合わせ、使用状態ブロックのブロック番号を取得する。
【０１１５】
コンパクション部２７０は、取得したブロックのうちコンパクション対象に適したブロックを変換テーブル制御部２２１に問い合わせ、コンパクション対象に適したブロックのブロック番号及び当該ブロックの有効ページフラグ及び有効ページカウンタを取得する。コンパクション対象に適したブロックは、例えば、有効ページカウンタの値が一番小さいブロックである。ここで、有効ページカウンタの値が０であったブロックをコンパクション対象として選んだ場合は、ブロック使用情報制御部２２６に当該ブロックを未使用状態として登録するように依頼し、結果として当該ブロックを未使用ブロックとして回収する。当該ブロックを未使用ブロックとして回収した場合は、コンパクション部２７０は、ログ保存部２８４に、更新したブロック使用情報の更新情報を通知する。
【０１１６】
コンパクション部２７０は、取得したコンパクション対象ブロック番号及び有効ページフラグ情報が対応する物理アドレス領域（コピー元ページ）の読込要求を半導体記憶媒体制御部２０３に発行し、読み込んだデータを受け取ると、受け取ったデータを保存する要求をバッファ制御部２０７に発行する。
【０１１７】
コンパクション部２７０は、コンパクション追記ポインタ制御部２４２に、現在のコンパクション追記ポインタを問い合わせ、コンパクション追記ポインタを取得し、コンパクション追記ポインタが対応する物理アドレス領域（コピー先ページ）情報を取得する。
【０１１８】
コンパクション部２７０は、保存したデータの取り出し要求をバッファ制御部２０７に発行し、取り出したデータと、取得したコンパクション追記ポインタが対応する物理アドレス領域（コピー先ページ）情報を半導体記憶媒体制御部２０３に送信することで、取り出したデータを、取得したコンパクション追記ポインタが対応する物理アドレス領域（コピー先ページ）に書き込むことを依頼する。コンパクション部２７０は、取得したコンパクション追記ポインタがブロックの先頭ページを示していたときは、半導体記憶媒体制御部２０３に書き込みを依頼する前に、半導体記憶媒体制御部２０３にブロックの消去処理を依頼する。なお、ブロックの消去処理を行うタイミングはこれに限られない。例えば、コンパクション用のブロックを新たに割り当てたタイミングでも良いし、未使用ブロックとして回収した時でも良いし、未使用ブロックとして回収してから半導体記憶媒体制御部２０３に書き込みを依頼するまでの間の任意のタイミングでも良い。
【０１１９】
コンパクション部２７０は、取得したコンパクション追記ポインタが対応する物理アドレス領域（コピー先ページ）が対応する逆引きテーブルに、取得したコンパクション対象ブロック番号及び有効ページフラグ情報が対応する物理アドレス領域（コピー元ページ）の逆引き論理アドレス情報を登録するように変換テーブル制御部２２１に依頼する。またコンパクション部２７０は、ログ保存部２８４に、更新した変換テーブルの更新情報を通知する。
【０１２０】
コンパクション部２７０は、変換テーブル制御部２２１に、変換テーブルの排他制御開始処理（ロック処理）を依頼する。
【０１２１】
コンパクション部２７０は、変換テーブルの排他制御中に、変換テーブルがコンパクション先のデータを示すように更新する。ただし、前述したように、データのコピー処理を行っている間に、書込指示部２５０によって、コピー処理中のデータが対応する論理アドレス領域と同じ論理アドレス領域の書込処理が完了した場合は、変換テーブルを更新してはならない。
【０１２２】
より詳細には、コンパクション部２７０は、変換テーブル制御部２２１に、取得したコンパクション対象ブロック番号及び有効ページフラグ情報が対応する物理アドレス領域（コピー元ページ）の逆引き論理アドレス情報で、正引きテーブルの参照要求を発行し、逆引き論理アドレス情報に対応する物理アドレスを取得する。コンパクション部２７０は、取得した逆引き論理アドレス情報に対応する物理アドレスと、取得したコンパクション対象ブロック番号及び有効ページフラグ情報が対応する物理アドレス領域（コピー元ページ）が一致しているか判断する。一致していなかった場合、データのコピー処理を行っている間に、書込指示部２５０によって、コピー処理中のデータが対応する論理アドレス領域と同じ論理アドレス領域の書込処理が完了したことを意味するため、コンパクション部２７０は、変換テーブルの排他制御中の処理を終え、変換テーブルを更新しない。一致していた場合は、データのコピー処理を行っている間に、書込指示部２５０によって、コピー処理中のデータが対応する論理アドレス領域と同じ論理アドレス領域の書込処理が実行されなかったかもしくは実行されていたとしても完了していないことを意味するため、コンパクション部２７０は、変換テーブルを更新する。
【０１２３】
より詳細には、コンパクション部２７０は、変換テーブル制御部２２１に、取得したコンパクション対象ブロック番号及び有効ページフラグ情報が対応する物理アドレス領域（コピー元ページ）の有効ページフラグをＯＦＦにするように依頼する。またコンパクション部２７０は、変換テーブル制御部２２１に、取得したコンパクション対象ブロック番号に対応するブロックの有効ページカウンタをデクリメントするように依頼する。またコンパクション部２７０は、変換テーブル制御部２２１に、取得したコンパクション追記ポインタが対応する物理アドレス領域（コピー先ページ）の有効ページページフラグをＯＮにするように依頼する。またコンパクション部２７０は、変換テーブル制御部２２１に、取得したコンパクション追記ポインタが対応するブロックの有効ページカウンタをインクリメントするように依頼する。またコンパクション部２７０は、変換テーブル制御部２２１に、取得したコンパクション対象ブロック番号及び有効ページフラグ情報が対応する物理アドレス領域（コピー元ページ）の逆引き論理アドレスが指す、正引きテーブルのエントリが、コンパクション追記ポインタが対応する物理アドレス領域情報（コピー先ページ）を指すように更新するように依頼する。またコンパクション部２７０は、ログ保存部２８４に、更新した変換テーブルの更新情報を通知する。なおコンパクション部２７０は、取得したコンパクション対象ブロックの有効ページカウンタの値が０になったら、ブロック使用情報制御部２２６に当該ブロックを未使用状態として登録するように依頼し、結果として当該ブロックを未使用ブロックとして回収する。当該ブロックを未使用ブロックとして回収した場合は、コンパクション部２７０は、ログ保存部２８４に、更新したブロック使用情報の更新情報を通知する。
【０１２４】
コンパクション部２７０は、変換テーブル制御部２２１に、変換テーブルの排他制御終了処理（ロック解除処理）を依頼する。
【０１２５】
コンパクション部２７０は、コンパクション追記ポインタ制御部２４２に、コンパクション追記ポインタが次のページを指すように更新するように依頼する。コンパクション部２７０は、コンパクション追記ポインタ制御部２４２に、更新したコンパクション追記ポインタが、ブロックの最後のページを超えてしまったかを問い合わせ、最後のページを超えてしまった旨の返答を受けると、ブロック使用情報制御部２２６に、未使用状態のブロックの割り当て処理を依頼し、結果としてブロック使用情報が更新され、コンパクション追記ポインタ制御部２４２に、コンパクション追記ポインタが新たに割り当てられたブロックの先頭のページを指すように更新するように依頼する。またコンパクション部２７０は、ログ保存部２８４に、更新したコンパクション追記ポインタの更新情報と、更新したブロック使用情報の更新情報を通知する。
【０１２６】
コンパクション部２７０は、ログ保存部２８４に、ログ保存部２８４に通知した更新情報をコミットするように依頼する。
【０１２７】
スナップショット保存部２８２は、スナップショットの保存処理が必要になったタイミング、又は任意のタイミングでスナップショットの保存処理を行う。スナップショット保存部２８２の機能は、例えば、プロセッサ５１が各種システムプログラムを実行することにより実現される。
【０１２８】
スナップショット保存部２８２は、ログ保存部２８４に、スナップショット記録開始を示す旨のログを保存するように要求する。これにより、スナップショットとログの記録時刻の順序関係が分かる。
【０１２９】
スナップショット保存部２８２は、変換テーブル制御部２２１に、変換テーブルの取り出しを依頼して、変換テーブルを取得する。スナップショット保存部２８２は、ホスト書込追記ポインタ制御部２３２に、ホスト書込追記ポインタの取り出しを依頼して、ホスト書込追記ポインタを取得する。スナップショット保存部２８２は、コンパクション追記ポインタ制御部２４２に、コンパクション追記ポインタの取り出しを依頼し、コンパクション追記ポインタを取得する。スナップショット保存部２８２は、ブロック使用情報制御部２２６に、ブロック使用情報の取り出しを依頼し、ブロック使用情報を取得する。
【０１３０】
スナップショット保存部２８２は、取得した変換テーブルと、取得したホスト書込追記ポインタと、取得したコンパクション追記ポインタと、取得したブロック使用情報を半導体記憶媒体制御部２０３に保存するように依頼し、スナップショットを記録する。なお、スナップショットやログが記録されている半導体記憶媒体２０５の物理アドレスがあらかじめ分かっていないと、例えば、データ記憶装置２００の電源が投入されたときに、管理情報を復元できない。このため、スナップショットやログを記録する半導体記憶媒体２０５の物理アドレスは、半導体記憶媒体２０５のあらかじめ固定されている領域又は、半導体記憶媒体２０５のあらかじめ固定されている領域に記録されている情報からたどることができる領域にする。
【０１３１】
スナップショット保存部２８２は、ログ保存部２８４に、スナップショット記録終了を示す旨のログを保存するように要求する。これにより、スナップショットとログの記録時刻の順序関係が分かる。
【０１３２】
ログ保存部２８４は、ログの保存処理を行う。ログ保存部２８４の機能は、例えば、プロセッサ５１が各種システムプログラムを実行することにより実現される。
【０１３３】
ログ保存部２８４は、書込指示部２５０又はコンパクション部２７０から各種情報の更新情報の通知を受け、受け付けた更新情報を一時記憶する。
【０１３４】
ログ保存部２８４は、書込指示部２５０又はコンパクション部２７０からコミット通知を受け、半導体記憶媒体制御部２０３に、一時記憶しておいた更新情報を保存するように依頼し、一時記憶しておいた更新情報をログとして記録する。ログ保存部２８４は、スナップショット保存部２８２から、スナップショット記録開始を示す旨のログを保存する通知を受け、受け付けたスナップショット記録開始を示す旨のログを保存するように半導体記憶媒体制御部２０３に依頼し、ログとして記録する。ログ保存部２８４は、スナップショット保存部２８２から、スナップショット記録終了を示す旨のログを保存する通知を受け、受け付けたスナップショット記録終了を示す旨のログを保存するように半導体記憶媒体制御部２０３に依頼し、ログとして記録する。
【０１３５】
ログ保存部２８４が、半導体記憶媒体制御部２０３を介して保存するログの一例を図１２に示す。図１２に示すように、ログ保存部２８４がログのコミット処理要求を受け付けた順番に時系列で並ぶようになる。ここで、スナップショットの記録が終了したことを検知すると、スナップショット記録開始前のログ（図１２に示す例では、ログ１及びログ２）及び以前に記録したスナップショットは、管理情報復元処理で不要になるため、ログ保存部２８４は、スナップショット記録開始前のログ及び以前に記録したスナップショットを、新たなデータ記憶領域として開放する。
【０１３６】
管理情報復元部２９０は、管理情報の復元が必要になった時に、管理情報の復元処理を行う。管理情報復元部２９０の機能は、例えば、プロセッサ５１が各種システムプログラムを実行することにより実現される。管理情報復元部２９０は、スナップショット復元部２９２に、最新のスナップショットを復元するように依頼する。管理情報復元部２９０は、ログ復元部２９４に、最新のスナップショットより後に保存されたログから管理情報を復元するように依頼する。
【０１３７】
スナップショット復元部２９２は、最新のスナップショットを復元する。スナップショット復元部２９２の機能は、例えば、プロセッサ５１が各種システムプログラムを実行することにより実現される。
【０１３８】
スナップショット復元部２９２は、管理情報復元部２９０から、最新のスナップショットを復元する依頼を受けると、半導体記憶媒体制御部２０３に、最新のスナップショットを取り出す要求を発行し、最新のスナップショットを受け取る。
【０１３９】
スナップショット復元部２９２は、受け取ったスナップショットから、変換テーブルを取り出し、取り出した変換テーブルを変換テーブル制御部２２１に保存するように依頼する。またスナップショット復元部２９２は、受け取ったスナップショットから、ホスト書込追記ポインタを取り出し、取り出したホスト書込追記ポインタをホスト書込追記ポインタ制御部２３２に保存するように依頼する。またスナップショット復元部２９２は、受け取ったスナップショットから、コンパクション追記ポインタを取り出し、取り出したコンパクション追記ポインタをコンパクション追記ポインタ制御部２４２に保存するように依頼する。またスナップショット復元部２９２は、受け取ったスナップショットから、ブロック使用情報を取り出し、取り出したブロック使用情報をブロック使用情報制御部２２６に保存するように依頼する。
【０１４０】
ログ復元部２９４は、最新のスナップショットより後に保存されたログから管理情報を復元する。ログ復元部２９４の機能は、例えば、プロセッサ５１が各種システムプログラムを実行することにより実現される。
【０１４１】
ログ復元部２９４は、管理情報復元部２９０から、最新のスナップショットより後に保存されたログから管理情報を復元する依頼を受けると、半導体記憶媒体制御部２０３に、最新のスナップショットより後に保存されたログを取り出す要求を発行し、最新のスナップショットより後に保存されたログを受け取る。ログ復元部２９４は、受け取ったログから、記録順にログを取り出し、変換テーブル制御部２２１、ホスト書込追記ポインタ制御部２３２、コンパクション追記ポインタ制御部２４２、又はブロック使用情報制御部２２６に、ログに記録されている各種情報の変更情報を反映するように依頼する。
【０１４２】
次に、第２実施形態のデータ記憶装置の動作について説明する。
【０１４３】
まず、ホスト装置からの書込命令（書込コマンド）に応じて、データ記憶装置２００が行う書込処理の手順について、図１３を参照して説明する。図１３は、データ記憶装置２００で行われる書込処理の手順の流れの一例を示すフローチャートである。なお、データ記憶装置２００は、ホスト装置からの書込命令に備えて、予めホスト装置からの書込命令用に未使用ブロックを確保しているものとする。
【０１４４】
ステップＳ１では、ホストインタフェース部２１０は、ホスト装置から、書込命令を受け付け、命令制御部２１５に、受け付けた命令の種類に応じた処理を行うように、命令実行通知を発行する。
【０１４５】
ステップＳ２では、命令制御部２１５は、ホストインタフェース部２１０から書込命令を受け取ると、当該命令の領域が管理サイズ領域（ページ）の境界をまたいでいるかを調べる。当該命令の領域が管理サイズ領域（ページ）の境界をまたいでいる場合は（ステップＳ２でＹｅｓ）、ステップＳ３に進む。一方、当該命令の領域が管理サイズ領域（ページ）の境界をまたいでいない場合は（ステップＳ２でＮｏ）、ステップＳ４に進む。
【０１４６】
ステップＳ３では、命令制御部２１５は、当該命令を管理サイズの領域の境界で分割する。例えば図１１に示すように、命令制御部２１５は、書き込み先論理アドレス３、書き込みデータサイズ１６の書込命令を、書き込み先論理アドレス３、書き込みデータサイズ５の書込命令と、書き込み先論理アドレス８、書き込みデータサイズ８の書込命令と、書き込み先論理アドレス１６、書き込みデータサイズ３の書込命令に分割する。
【０１４７】
ステップＳ４では、命令制御部２１５は、分割した命令を、書込指示部２５０に通知する。なお、命令制御部２１５は、ホストインタフェース部２１０から受け取った書込命令の領域が管理サイズ領域の境界をまたいでいなかった場合は、受け取った命令を、書込指示部２５０に通知する。従って、書込指示部２５０は、書込命令が分割された場合は、以降の処理をそれぞれ繰り返し実行することになる。
【０１４８】
ステップＳ５では、書込指示部２５０は、命令制御部２１５に、ホスト装置へデータを送信するように依頼する要求を発行する。命令制御部２１５は、書込指示部２５０から、ホスト装置へデータ送信するように依頼する要求を受け付けると、ホストインタフェース部２１０に、受け付けたホスト装置へデータを送信するように依頼する要求を送信する。ホストインタフェース部２１０は、命令制御部２１５から、ホスト装置へデータを送信するように依頼する要求を受け付けると、ホスト装置に、受け付けたホスト装置へデータを送信するように依頼する要求を発行し、ホスト装置から、データ記憶装置２００が受信すべきデータの送信を受けると、データ記憶装置２００が受信すべきデータを、命令制御部２１５に対して送信する。命令制御部２１５は、ホストインタフェース部２１０から、ホスト装置が送信したデータを受け取ると、書込指示部２５０に、受け取ったデータを送信する。書込指示部２５０は、命令制御部２１５から、ホスト装置が送信したデータを受け取ると、バッファ制御部２０７に、受け取ったデータの保存要求を発行する。なお、命令制御部２１５によって分割された書込命令それぞれについて、前述のように個別にホスト装置とデータをやり取りしてもよいし、命令制御部２１５又はホストインタフェース部２１０が一旦取りまとめて、一度にデータをやり取りしてもよい。バッファ制御部２０７は、指定されたデータをバッファ記憶部２０９に保存する。
【０１４９】
ステップＳ６では、書込指示部２５０は、書込命令の書き込みデータサイズが管理サイズ未満であるかを調べる。管理サイズ未満である場合は（ステップＳ６でＹｅｓ）、ステップＳ７に進む。管理サイズ未満でなかった（管理サイズであった）場合（ステップＳ６でＮｏ）、ステップＳ８に進む。なお、管理サイズ未満である場合とは、例えば、図１１に示す例のような、書き込み先論理アドレス３、書き込みデータサイズ５の書込命令の場合である。
【０１５０】
ステップＳ７では、書込指示部２５０は、残りの論理アドレス領域（図１１に示す例では、論理アドレス０、データサイズ３の領域）が、どの物理アドレス領域に対応するか、変換テーブル制御部２２１に問い合わせる。変換テーブル制御部２２１は、変換テーブル記憶部２２３が保存する変換テーブルを参照し、対応する物理アドレス領域を返答する。書込指示部２５０は、残りの論理アドレス領域が対応する物理アドレス領域情報を取得し、半導体記憶媒体制御部２０３に、取得した残りの論理アドレス領域が対応する物理アドレス領域のデータの読込要求を発行する。半導体記憶媒体制御部２０３は、半導体記憶媒体２０５の指定された物理アドレス領域のデータを読み込み、返答する。半導体記憶媒体制御部２０３は、読込要求が、書込指示部２５０から連続して読込要求又は書込要求が発行され、要求された処理を連続して実行しているものであった時で、読込指示部２６０又はコンパクション部２７０から読込要求又は書込要求が発行されると、又は既に発行されていたら、必要に応じて、実行中の次の連続する要求された処理を実行するのではなく、読込指示部２６０又は、コンパクション部２７０から要求された処理を実行する。つまり、半導体記憶媒体制御部２０３は必要に応じて処理を切り替える。また、半導体記憶媒体制御部２０３は、切り替え後の処理が完了すると、必要に応じて、実行中の次の連続する要求された処理を実行する。つまり、半導体記憶媒体制御部２０３は必要に応じて切り替えた処理を再開する。書込指示部２５０は、バッファ制御部２０７に、読み込んだデータの保存要求を発行し、結果として、命令制御部２１５から受け取ったデータと合わせて管理サイズ分のデータをバッファ記憶部２０９に保存する。バッファ制御部２０７は、指定されたデータをバッファ記憶部２０９に保存する。
【０１５１】
ステップＳ８では、書込指示部２５０は、ホスト書込追記ポインタ制御部２３２に、現在のホスト書込追記ポインタを問い合わせる。ホスト書込追記ポインタ制御部２３２は、ホスト書込追記ポインタ記憶部２３０が保存するホスト書込追記ポインタを返答する。書込指示部２５０は、ホスト書込追記ポインタを取得し、ホスト書込追記ポインタが対応する物理アドレス領域情報を取得する。書込指示部２５０は、バッファ制御部２０７に、保存した管理サイズ分のデータの取り出し要求を発行する。バッファ制御部２０７は、バッファ記憶部２０９が保存する指定されたデータを取り出し、返答する。書込指示部２５０は、半導体記憶媒体制御部２０３に、取り出したデータと、取得したホスト書込追記ポインタが対応する物理アドレス領域情報を送信することで、取り出したデータを、取得したホスト書込追記ポインタが対応する物理アドレス領域に書き込むことを依頼する。なお、書込指示部２５０は、取得したホスト書込追記ポインタがブロックの先頭ページを示していたときは、半導体記憶媒体制御部２０３に、書き込みを依頼する前に、半導体記憶媒体制御部２０３に、ブロックの消去処理を依頼する。なお、ブロックの消去処理を行うタイミングはこれに限られない。例えば、ホスト書き込み用のブロックを新たに割り当てたタイミングでも良いし、未使用ブロックとして回収した時でも良いし、未使用ブロックとして回収してから半導体記憶媒体制御部２０３に書き込みを依頼するまでの間の任意のタイミングでも良い。半導体記憶媒体制御部２０３は、半導体記憶媒体の指定された物理アドレス領域に、指定されたデータを書き込む。半導体記憶媒体制御部２０３は、書込要求が、書込指示部２５０から連続して読込要求又は書込要求が発行され、要求された処理を連続して実行しているものであった時で、読込指示部２６０又は、コンパクション部２７０から読込要求又は書込要求が発行されると、又は既に発行されていたら、必要に応じて、実行中の次の連続する要求された処理を実行するのではなく、読込指示部２６０又はコンパクション部２７０から要求された処理を実行する。つまり、半導体記憶媒体制御部２０３は必要に応じて処理を切り替える。また半導体記憶媒体制御部２０３は、切り替え後の処理が完了すると、必要に応じて、実行中の次の連続する要求された処理を実行する。つまり、半導体記憶媒体制御部２０３は必要に応じて切り替えた処理を再開する。
【０１５２】
ステップＳ９では、書込指示部２５０は、取得したホスト書込追記ポインタが対応する逆引きテーブルに、書込命令の領域が含まれる管理サイズの領域の先頭の論理アドレス（図１１に示す例では、論理アドレス０）を登録するように変換テーブル制御部２２１に依頼する。変換テーブル制御部２２１は、変換テーブル記憶部２２３が保存する変換テーブルであって取得したホスト書込追記ポインタが対応する逆引きテーブルに、書込命令の領域が含まれる管理サイズの領域の先頭の論理アドレス（図１１に示す例では、論理アドレス０）を登録する。書込指示部２５０は、ログ保存部２８４に、更新した変換テーブルの更新情報を通知する。ログ保存部２８４は、更新した変換テーブルの更新情報を受け付ける。
【０１５３】
ステップＳ１０では、書込指示部２５０は、変換テーブル制御部２２１に、変換テーブルの排他制御開始処理（ロック処理）を依頼する。変換テーブル制御部２２１は、変換テーブルの排他制御開始処理（ロック処理）を行う。
【０１５４】
ステップＳ１１では、書込指示部２５０は、書込命令の領域が含まれる管理サイズの領域の先頭の論理アドレス（図１１に示す例では、論理アドレス０）に書込命令受付前に対応していた物理アドレス（更新前物理アドレス）を変換テーブル制御部２２１に問い合わせる。変換テーブル制御部２２１は、変換テーブル記憶部２２３が保存する変換テーブルを参照し、書込命令の領域が含まれる管理サイズの領域の先頭の論理アドレス（図１１に示す例では、論理アドレス０）に書込命令受付前に対応していた物理アドレス（更新前物理アドレス）を取得し、返答する。書込指示部２５０は、書込命令の領域が含まれる管理サイズの領域の先頭の論理アドレス（図１１に示す例では、論理アドレス０）に書込命令受付前に対応していた物理アドレス（更新前物理アドレス）を取得する。
【０１５５】
ステップＳ１２では、書込指示部２５０は、取得した更新前物理アドレスが対応する有効ページフラグをＯＦＦにするように変換テーブル制御部２２１に依頼する。ステップＳ１３では、書込指示部２５０は、取得した更新前物理アドレスが対応するブロックの有効ページカウンタをデクリメントするように変換テーブル制御部２２１に依頼する。ステップＳ１４では、書込指示部２５０は、取得したホスト書込追記ポインタが対応する有効ページページフラグをＯＮにするように変換テーブル制御部２２１に依頼する。ステップＳ１５では、書込指示部２５０は、取得したホスト書込追記ポインタが対応するブロックの有効ページカウンタをインクリメントするように変換テーブル制御部２２１に依頼する。ステップＳ１６では、書込指示部２５０は、正引きテーブルの書込命令の領域が含まれる管理サイズの領域の先頭の論理アドレス（図１１に示す例では、論理アドレス０）が、ホスト書込追記ポインタが対応する物理アドレス領域情報を指すように更新するように変換テーブル制御部２２１に依頼する。変換テーブル制御部２２１は、変換テーブル記憶部２２３が保存する変換テーブルを指示に従って更新する。書込指示部２５０は、ログ保存部２８４に、更新した変換テーブルの更新情報を通知する。
【０１５６】
ステップＳ１７では、書込指示部２５０は、変換テーブル制御部２２１に、変換テーブルの排他制御終了処理（ロック解除処理）を依頼する。変換テーブル制御部２２１は、変換テーブルの排他制御終了処理（ロック解除処理）を行う。
【０１５７】
ステップＳ１８では、書込指示部２５０は、ホスト書込追記ポインタ制御部２３２に、ホスト書込追記ポインタが次のページを指すように更新するように依頼する。ホスト書込追記ポインタ制御部２３２は、ホスト書込追記ポインタが次のページを指すように更新する。書込指示部２５０は、ログ保存部２８４に、更新したホスト書込追記ポインタの更新情報を通知する。
【０１５８】
ステップＳ１９では、書込指示部２５０は、更新したホスト書込追記ポインタが、ブロックの最後のページを超えてしまったかをホスト書込追記ポインタ制御部２３２に問い合わせる。ホスト書込追記ポインタ制御部２３２は、更新したホスト書込追記ポインタが、ブロックの最後のページを超えてしまったかを調べ、調査結果を返答する。書込指示部２５０が、最後のページを超えてしまった旨の返答を受けると、ステップＳ２０へ進む。そうでなければステップＳ２１へ進む。
【０１５９】
ステップＳ２０では、書込指示部２５０は、ブロック使用情報制御部２２６に、未使用状態のブロックの割り当て処理を依頼し、結果としてブロック使用情報が更新される。ブロック使用情報制御部２２６は、ブロック使用情報記憶部２２８が保存するブロック使用情報から、未使用状態のブロックを選択し、未使用状態のブロックを割り当て、結果としてブロック使用情報を更新する。書込指示部２５０は、ホスト書込追記ポインタ制御部２３２に、ホスト書込追記ポインタが新たに割り当てられたブロックの先頭のページを指すように更新するように依頼する。ホスト書込追記ポインタ制御部２３２は、ホスト書込追記ポインタ記憶部２３０が保存するホスト書込追記ポインタが新たに割り当てられたブロックの先頭のページを指すように更新する。書込指示部２５０は、ログ保存部２８４に、更新したホスト書込追記ポインタの更新情報と、更新したブロック使用情報の更新情報を通知する。
【０１６０】
ステップＳ２１では、書込指示部２５０は、ログ保存部２８４に、ログ保存部２８４に通知した更新情報をコミットするように依頼する。ログ保存部２８４は、書込指示部２５０からコミット通知を受け、半導体記憶媒体制御部２０３に、一時記憶しておいた更新情報を保存するように依頼する。半導体記憶媒体制御部２０３は、一時記憶しておいた更新情報をログとして記録する。なお、ログが記録されている半導体記憶媒体２０５の物理アドレス番地があらかじめ分かっていないと、例えば、データ記憶装置２００の電源が投入されたときに、管理情報を復元できないため、ログを記録する半導体記憶媒体２０５の物理アドレス番地は、半導体記憶媒体２０５のあらかじめ固定されている領域又は、半導体記憶媒体２０５のあらかじめ固定されている領域に記録されている情報からたどることができる領域にする。
【０１６１】
ステップＳ２２では、必要に応じて、ステップＳ４から処理を繰り返す。
【０１６２】
次に、ホスト装置からの読込命令（読込コマンド）に応じて、データ記憶装置２００が行う読込処理の手順について、図１４を参照して説明する。図１４は、データ記憶装置２００で行われる読込処理の手順の流れの一例を示すフローチャートである。なお、読込要求されるデータは、あらかじめ書込命令によって書きこまれているものとする。
【０１６３】
ステップＳ３１では、ホストインタフェース部２１０は、ホスト装置から、読込命令を受け付け、命令制御部２１５に、受け付けた命令の種類に応じた処理を行うように、命令実行通知を発行する。
【０１６４】
ステップＳ３２では、命令制御部２１５は、ホストインタフェース部２１０から読込命令を受け取ると、当該命令の領域が管理サイズ領域（ページ）の境界をまたいでいるかを調べる。当該命令の領域が管理サイズ領域（ページ）の境界をまたいでいる場合は（ステップＳ３２でＹｅｓ）、ステップＳ３３に進む。当該命令の領域が管理サイズ領域（ページ）の境界をまたいでいない場合は（ステップＳ３２でＮｏ）、ステップＳ３４に進む。
【０１６５】
ステップＳ３３では、命令制御部２１５は、当該命令を管理サイズの領域の境界で分割する。この命令の分割処理は書込処理時と同じである。
【０１６６】
ステップＳ３４では、命令制御部２１５は、分割した命令を、読込指示部２６０に通知する。命令制御部２１５は、ホストインタフェース部２１０から受け取った読込命令の領域が管理サイズ領域の境界をまたいでいなかった場合は、受け取った命令を、読込指示部２６０に通知する。従って、読込指示部２６０は、読込命令が分割された場合は、以降の処理をそれぞれ繰り返し実行することになる。
【０１６７】
ステップＳ３５では、読込指示部２６０は、受け付けた読込命令の論理アドレス領域が、どの物理アドレス領域に対応するか、変換テーブル制御部２２１に問い合わせ、対応する物理アドレス領域情報を取得する。変換テーブル制御部２２１は、変換テーブル記憶部２２３が保存する変換テーブルを参照し、受け付けた読込命令の論理アドレス領域が対応する物理アドレス領域情報を返答する。読込指示部２６０は、受け付けた読込命令の論理アドレス領域が対応する物理アドレス領域情報を取得する。
【０１６８】
ステップＳ３６では、読込指示部２６０は、半導体記憶媒体制御部２０３に、取得した物理アドレス領域のデータの読込要求を発行する。半導体記憶媒体制御部２０３は、半導体記憶媒体の指定された物理アドレス領域のデータを読み込み、返答する。半導体記憶媒体制御部２０３は、読込要求が、読込指示部２６０から連続して読込要求が発行され、要求された処理を連続して実行しているものであった時で、書込指示部２５０又はコンパクション部２７０から読込要求又は書込要求が発行されると、又は既に発行されていたら、必要に応じて、実行中の次の連続する要求された処理を実行するのではなく、書込指示部２５０又はコンパクション部２７０から要求された処理を実行する。つまり、半導体記憶媒体制御部２０３は必要に応じて処理を切り替える。また半導体記憶媒体制御部２０３は、切り替え後の処理が完了すると、必要に応じて、実行中の次の連続する要求された処理を実行する。つまり、半導体記憶媒体制御部２０３は必要に応じて切り替えた処理を再開する。読込指示部２６０は、バッファ制御部２０７に、読み込んだデータの保存要求を発行する。バッファ制御部２０７は、指定されたデータをバッファ記憶部２０９に保存する。
【０１６９】
ステップＳ３７では、読込指示部２６０は、命令制御部２１５に、ホスト装置へデータを受信するように依頼する要求を発行する。命令制御部２１５は、読込指示部２６０から、ホスト装置へデータを受信するように依頼する要求を受け付けると、ホストインタフェース部２１０に、受け付けたホスト装置へデータを受信するように依頼する要求を送信する。ホストインタフェース部２１０は、命令制御部２１５から、ホスト装置へデータを受信するように依頼する要求を受け付けると、ホスト装置に、受け付けたホスト装置へデータを受信するように依頼する要求を発行し、ホスト装置からのデータ受信要求を受けると、命令制御部２１５に、受け付けたホスト装置からのデータ受信要求を発行する。命令制御部２１５は、ホストインタフェース部２１０から、ホスト装置からのデータ受信要求を受け取ると、読込指示部２６０に、受け付けたホスト装置からのデータ受信要求を送信する。読込指示部２６０は、命令制御部２１５から、ホスト装置からのデータ受信要求を受け取ると、バッファ制御部２０７に、読み込んだデータの取り出し要求を発行する。バッファ制御部２０７は、バッファ記憶部２０９が保存する指定されたデータを取り出し、返答する。読込指示部２６０は、取り出したデータを、命令制御部２１５に渡す。命令制御部２１５は、読込指示部２６０から、ホスト装置が受信すべきデータを受け取ると、ホストインタフェース部２１０に、受け取ったデータを送信する。ホストインタフェース部２１０は、命令制御部２１５から受け取ったホスト装置が受信すべきデータを、ホスト装置に対して送信する。なお、命令制御部２１５によって分割された読込命令それぞれについて、前述のように個別にホスト装置とデータをやり取りしてもよいし、命令制御部２１５又はホストインタフェース部２１０が一旦取りまとめて、一度にデータをやり取りしてもよい。
【０１７０】
ステップＳ３８では、必要に応じて、ステップＳ３４から処理を繰り返す。
【０１７１】
次に、データ記憶装置２００が行うコンパクション処理の手順について、図１５を参照して説明する。図１５は、データ記憶装置２００で行われるコンパクション処理の手順の流れの一例を示すフローチャートである。なお、データ記憶装置２００は、コンパクション処理が必要になったタイミング、又は任意のタイミングでコンパクション処理を行う。コンパクション処理が必要になるタイミングは、ブック使用情報に記録されている、未使用ブロックの数が所定の閾値を下回ったことで判断できる。
【０１７２】
ステップＳ４１では、コンパクション部２７０は、ブロック使用情報制御部２２６に、使用状態ブロックのブロック番号を問い合わせる。ブロック使用情報制御部２２６は、ブロック使用情報記憶部２２８が保存するブロック使用情報を参照し、使用状態ブロックのブロック番号を返答する。コンパクション部２７０は、使用状態ブロックのブロック番号を取得する。コンパクション部２７０は、取得したブロックのうちコンパクション対象に適したブロック、当該ブロックの有効ページフラグ、及び有効ページカウンタを変換テーブル制御部２２１に問い合わせる。コンパクション対象に適したブロックは、例えば、有効ページカウンタの値が一番小さいブロックである。変換テーブル制御部２２１は、変換テーブル記憶部２２３が保存する変換テーブルを参照し、取得したブロックのうち、コンパクション対象に適したブロックを抽出し、コンパクション対象に適したブロックのブロック番号及び当該ブロックの有効ページフラグ及び有効ページカウンタを返答する。コンパクション部２７０は、コンパクション対象に適したブロックのブロック番号及び当該ブロックの有効ページフラグ及び有効ページカウンタを取得する。
【０１７３】
ステップＳ４２では、コンパクション部２７０は、コンパクション対象として選んだブロックの有効ページカウンタの値が０であったかどうかを調べる。０であった場合はステップＳ４３に進む。０でなかった場合はステップＳ４４に進む。
【０１７４】
ステップＳ４３では、コンパクション部２７０は、ブロック使用情報制御部２２６に当該ブロックを未使用状態として登録するように依頼し、結果として、当該ブロックを未使用ブロックとして回収する。ブロック使用情報制御部２２６は、ブロック使用情報記憶部２２８が保存するブロック使用情報に、当該ブロックを未使用状態として登録し、結果として、当該ブロックを未使用ブロックとして回収する。コンパクション部２７０は、ログ保存部２８４に、更新したブロック使用情報の更新情報を通知する。そして、ステップＳ４１に戻る。
【０１７５】
ステップＳ４４では、コンパクション部２７０は、取得したコンパクション対象ブロック番号及び有効ページフラグ情報を一時記憶する。
【０１７６】
ステップＳ４５では、コンパクション部２７０は、取得した有効ページフラグ情報がＯＮのページについて、以降の処理を繰り返して実行する。
【０１７７】
ステップＳ４６では、コンパクション部２７０は、取得したコンパクション対象ブロック番号及び有効ページフラグ情報が対応する物理アドレス領域（コピー元ページ）の読込要求を半導体記憶媒体制御部２０３に発行する。半導体記憶媒体制御部２０３は、半導体記憶媒体の指定された物理アドレス領域のデータを読み込み、返答する。半導体記憶媒体制御部２０３は、読込要求が、コンパクション部２７０から連続して読込要求又は書込要求が発行され、要求された処理を連続して実行しているものであった時で、読込指示部２６０又は書込指示部２５０から読込要求又は書込要求が発行されると、又は既に発行されていたら、必要に応じて、実行中の次の連続する要求された処理を実行するのではなく、読込指示部２６０又は書込指示部２５０から要求された処理を実行する。つまり、半導体記憶媒体制御部２０３は必要に応じて処理を切り替える。また、半導体記憶媒体制御部２０３は、切り替え後の処理が完了すると、必要に応じて、実行中の次の連続する要求された処理を実行する。つまり、半導体記憶媒体制御部２０３は必要に応じて切り替えた処理を再開する。コンパクション部２７０は、読み込んだデータを受け取ると、バッファ制御部２０７に、受け取ったデータを保存する要求を発行する。バッファ制御部２０７は、指定されたデータをバッファ記憶部２０９に保存する。
【０１７８】
ステップＳ４７では、コンパクション部２７０は、取得したコンパクション対象ブロック番号及び有効ページフラグ情報が対応する物理アドレス領域（コピー元ページ）の逆引き論理アドレス情報を変換テーブル制御部２２１に問い合わせる。変換テーブル制御部２２１は、変換テーブル記憶部２２３が保存する変換テーブルを参照し、取得したコンパクション対象ブロック番号及び有効ページフラグ情報が対応する物理アドレス領域（コピー元ページ）の逆引き論理アドレス情報を返答する。コンパクション部２７０は、取得したコンパクション対象ブロック番号及び有効ページフラグ情報が対応する物理アドレス領域（コピー元ページ）の逆引き論理アドレス情報を取得する。
【０１７９】
ステップＳ４８では、コンパクション部２７０は、コンパクション追記ポインタ制御部２４２に、現在のコンパクション追記ポインタを問い合わせる。コンパクション追記ポインタ制御部２４２は、コンパクション追記ポインタ記憶部２４０が保存するコンパクション追記ポインタを返答する。コンパクション部２７０は、コンパクション追記ポインタが対応する物理アドレス領域（コピー先ページ）情報を取得する。コンパクション部２７０は、バッファ制御部２０７に、保存したデータの取り出し要求を発行する。バッファ制御部２０７は、バッファ記憶部２０９が保存する指定されたデータを取り出し、返答する。コンパクション部２７０は、保存したデータを取得する。コンパクション部２７０は、取り出したデータと、取得したコンパクション追記ポインタが対応する物理アドレス領域（コピー先ページ）情報を半導体記憶媒体制御部２０３に送信することで、取り出したデータを、取得したコンパクション追記ポインタが対応する物理アドレス領域（コピー先ページ）に書き込むことを依頼する。なお、コンパクション部２７０は、取得したコンパクション追記ポインタがブロックの先頭ページを示していたときは、半導体記憶媒体制御部２０３に、書き込みを依頼する前に、半導体記憶媒体制御部２０３に、ブロックの消去処理を依頼する。なお、ブロックの消去処理を行うタイミングはこれに限られない。例えば、コンパクション用のブロックを新たに割り当てたタイミングでも良いし、未使用ブロックとして回収した時でも良いし、未使用ブロックとして回収してから半導体記憶媒体制御部２０３に書き込みを依頼するまでの間の任意のタイミングでも良い。半導体記憶媒体制御部２０３は、半導体記憶媒体２０５の指定された物理アドレス領域に、指定されたデータを書き込む。半導体記憶媒体制御部２０３は、書込要求が、コンパクション部２７０から連続して読込要求又は書込要求が発行され、要求された処理を連続して実行しているものであった時で、読込指示部２６０又は、書込指示部２５０から読込要求又は書込要求が発行されると、又は既に発行されていたら、必要に応じて、実行中の次の連続する要求された処理を実行するのではなく、読込指示部２６０又は、書込指示部２５０から要求された処理を実行する。つまり、半導体記憶媒体制御部２０３は必要に応じて処理を切り替える。また、半導体記憶媒体制御部２０３は、切り替え後の処理が完了すると、必要に応じて、実行中の次の連続する要求された処理を実行する。つまり、半導体記憶媒体制御部２０３は必要に応じて切り替えた処理を再開する。
【０１８０】
ステップＳ４９では、コンパクション部２７０は、取得したコンパクション追記ポインタが対応する物理アドレス領域（コピー先ページ）が対応する逆引きテーブルに、取得したコンパクション対象ブロック番号及び有効ページフラグ情報が対応する物理アドレス領域（コピー元ページ）が対応する逆引き論理アドレス情報を登録するように変換テーブル制御部２２１に依頼する。変換テーブル制御部２２１は、変換テーブル記憶部２２３が保存する変換テーブルに、取得したコンパクション追記ポインタが対応する物理アドレス領域（コピー先ページ）が対応する逆引きテーブルに取得したコンパクション対象ブロック番号及び有効ページフラグ情報が対応する物理アドレス領域（コピー元ページ）が対応する逆引き論理アドレス情報を登録する。コンパクション部２７０は、ログ保存部２８４に、更新した変換テーブルの更新情報を通知する。
【０１８１】
ステップＳ５０では、コンパクション部２７０は、変換テーブル制御部２２１に、変換テーブルの排他制御開始処理（ロック処理）を依頼する。変換テーブル制御部２２１は、変換テーブルの排他制御開始処理（ロック処理）を行う。
【０１８２】
ステップＳ５１では、コンパクション部２７０は、取得したコンパクション対象ブロック番号及び有効ページフラグ情報が対応する物理アドレス領域（コピー元ページ）が対応する逆引き論理アドレス情報で、正引きテーブルの参照要求を変換テーブル制御部２２１に発行する。変換テーブル制御部２２１は、変換テーブル記憶部２２３が保存する変換テーブルを参照し、取得したコンパクション対象ブロック番号及び有効ページフラグ情報が対応する物理アドレス領域（コピー元ページ）が対応する逆引き論理アドレス情報で、正引きテーブルを参照し、逆引き論理アドレス情報に対応する物理アドレス領域を返答する。コンパクション部２７０は、逆引き論理アドレス情報に対応する物理アドレス領域を取得する。
【０１８３】
ステップＳ５２では、コンパクション部２７０は、取得した逆引き論理アドレス情報に対応する物理アドレス領域と、取得したコンパクション対象ブロック番号及び有効ページフラグ情報が対応する物理アドレス領域（コピー元ページ）が一致しているか判断する。前述したように、データのコピー処理を行っている間に、書込指示部２５０によって、コピー処理中のデータが対応する論理アドレス領域と同じ論理アドレス領域の書込処理が完了した場合は、変換テーブルを更新してはならない。一致していなかった場合（ステップＳ５２でＮｏ）、データのコピー処理を行っている間に、書込指示部２５０によって、コピー処理中のデータが対応する論理アドレス領域と同じ論理アドレス領域の書込処理が完了したことを意味するため、ステップＳ６０に進み、変換テーブルを更新しない。一致していた場合は（ステップＳ５２でＹｅｓ）、データのコピー処理を行っている間に、書込指示部２５０によって、コピー処理中のデータが対応する論理アドレス領域と同じ論理アドレス領域の書込処理が実行されていないかもしくは実行されていても完了していないことを意味するため、ステップＳ５３に進み、変換テーブルを更新する。
【０１８４】
ステップＳ５３では、コンパクション部２７０は、取得したコンパクション対象ブロック番号及び有効ページフラグ情報が対応する物理アドレス領域（コピー元ページ）の有効ページフラグをＯＦＦにするように変換テーブル制御部２２１に依頼する。ステップＳ５４では、コンパクション部２７０は、取得したコンパクション対象ブロック番号に対応するブロックの有効ページカウンタをデクリメントするように変換テーブル制御部２２１に依頼する。ステップＳ５６では、コンパクション部２７０は、取得したコンパクション対象ブロックの有効ページカウンタの値が０になったら（ステップＳ５５でＹｅｓ）、ブロック使用情報制御部２２６に当該ブロックを未使用状態として登録するように依頼し、結果として当該ブロックを未使用ブロックとして回収する。ブロック使用情報制御部２２６は、取得したコンパクション対象ブロックの有効ページカウンタの値が０になったら（ステップＳ５５でＹｅｓ）、ブロック使用情報記憶部２２８が保存するブロック使用情報に、当該ブロックを未使用状態として登録し、結果として、当該ブロックを未使用ブロックとして回収する。コンパクション部２７０は、当該ブロックを未使用ブロックとして回収した場合は、ログ保存部２８４に、更新したブロック使用情報の更新情報を通知する。ステップＳ５７では、コンパクション部２７０は、取得したコンパクション追記ポインタが対応する物理アドレス領域（コピー先ページ）が対応する有効ページフラグをＯＮにするように変換テーブル制御部２２１に依頼する。ステップＳ５８では、コンパクション部２７０は、取得したコンパクション追記ポインタが対応するブロックの有効ページカウンタをインクリメントするように変換テーブル制御部２２１に依頼する。ステップＳ５９では、コンパクション部２７０は、取得したコンパクション対象ブロック番号及び有効ページフラグ情報が対応する物理アドレス領域（コピー元ページ）が対応する逆引き論理アドレスが指す、正引きテーブルのエントリが、コンパクション追記ポインタが対応する物理アドレス領域（コピー先ページ）情報を指すように変換テーブル制御部２２１に更新するように依頼する。変換テーブル制御部２２１は、変換テーブル記憶部２２３が保存する変換テーブルを指示に従って更新する。コンパクション部２７０は、ログ保存部２８４に、更新した変換テーブルの更新情報を通知する。
【０１８５】
ステップＳ６０では、コンパクション部２７０は、変換テーブル制御部２２１に、変換テーブルの排他制御終了処理（ロック解除処理）を依頼する。変換テーブル制御部２２１は、変換テーブルの排他制御終了処理（ロック解除処理）を行う。
【０１８６】
ステップＳ６１では、コンパクション部２７０は、コンパクション追記ポインタ制御部２４２に、コンパクション追記ポインタが次のページを指すように更新するように依頼する。コンパクション追記ポインタ制御部２４２は、コンパクション追記ポインタが次のページを指すように更新する。コンパクション部２７０は、ログ保存部２８４に、更新したコンパクション追記ポインタの更新情報を通知する。
【０１８７】
ステップＳ６２では、コンパクション部２７０は、コンパクション追記ポインタ制御部２４２に、更新したコンパクション追記ポインタが、ブロックの最後のページを超えてしまったかを問い合わせる。コンパクション追記ポインタ制御部２４２は、更新したコンパクション追記ポインタが、ブロックの最後のページを超えてしまったかを調べ、調査結果を返答する。コンパクション部２７０が、最後のページを超えてしまった旨の返答を受けると、ステップＳ６３へ進む。そうでなければステップＳ６４へ進む。
【０１８８】
ステップＳ６３では、コンパクション部２７０は、ブロック使用情報制御部２２６に、未使用状態のブロックの割り当て処理を依頼し、結果としてブロック使用情報が更新される。ブロック使用情報制御部２２６は、ブロック使用情報記憶部２２８が保存するブロック使用情報から、未使用状態のブロックを選択し、未使用状態のブロックを割り当て、結果としてブロック使用情報を更新する。コンパクション部２７０は、コンパクション追記ポインタ制御部２４２に、コンパクション追記ポインタが新たに割り当てられたブロックの先頭のページを指すように更新するように依頼する。コンパクション追記ポインタ制御部２４２は、コンパクション追記ポインタ記憶部２４０が保存するコンパクション追記ポインタが新たに割り当てられたブロックの先頭のページを指すように更新する。コンパクション部２７０は、ログ保存部２８４に、更新したコンパクション追記ポインタの更新情報と、更新したブロック使用情報の更新情報を通知する。
【０１８９】
ステップＳ６４では、コンパクション部２７０は、ログ保存部２８４に、ログ保存部２８４に通知した更新情報をコミットするように依頼する。ログ保存部２８４は、コンパクション部２７０からコミット通知を受け、半導体記憶媒体制御部２０３に、一時記憶しておいた更新情報を保存するように依頼する。半導体記憶媒体制御部２０３は、一時記憶しておいた更新情報をログとして記録する。なお、ログが記録されている半導体記憶媒体２０５の物理アドレス番地があらかじめ分かっていないと、例えば、データ記憶装置２００の電源が投入されたときに、管理情報を復元できないため、ログを記録する半導体記憶媒体２０５の物理アドレス番地は、半導体記憶媒体２０５のあらかじめ固定されている領域又は、半導体記憶媒体２０５のあらかじめ固定されている領域に記録されている情報からたどることができる領域にする。
【０１９０】
ステップＳ６５では、必要に応じて、ステップＳ４５から処理を繰り返す。
【０１９１】
次に、データ記憶装置２００が行うスナップショット記録処理の手順について、図１６を参照して説明する。図１６は、データ記憶装置２００で行われるスナップショット記録処理の手順の流れの一例を示すフローチャートである。なお、データ記憶装置２００は、所定のタイミング又は任意のタイミングでスナップショットの保存処理を行う。
【０１９２】
ステップＳ７１では、スナップショット保存部２８２は、ログ保存部２８４に、スナップショット記録開始を示す旨のログを保存するように要求する。これにより、スナップショットとログの記録時刻の順序関係が分かる。ログ保存部２８４は、半導体記憶媒体制御部２０３に、スナップショット記録開始を示す旨の情報を保存するように依頼する。半導体記憶媒体制御部２０３は、スナップショット記録開始を示す旨の情報をログとして記録する。なお、ログが記録されている半導体記憶媒体２０５の物理アドレス番地があらかじめ分かっていないと、例えば、データ記憶装置２００の電源が投入されたときに、管理情報を復元できないため、ログを記録する半導体記憶媒体２０５の物理アドレス番地は、半導体記憶媒体２０５のあらかじめ固定されている領域又は、半導体記憶媒体２０５のあらかじめ固定されている領域に記録されている情報からたどることができる領域にする。
【０１９３】
ステップＳ７２では、スナップショット保存部２８２は、変換テーブル制御部２２１に、変換テーブルの取り出しを依頼し、変換テーブルを取得する。またスナップショット保存部２８２は、ホスト書込追記ポインタ制御部２３２に、ホスト書込追記ポインタの取り出しを依頼し、ホスト書込追記ポインタを取得する。またスナップショット保存部２８２は、コンパクション追記ポインタ制御部２４２に、コンパクション追記ポインタの取り出しを依頼し、コンパクション追記ポインタを取得する。またスナップショット保存部２８２は、ブロック使用情報制御部２２６に、ブロック使用情報の取り出しを依頼し、ブロック使用情報を取得する。変換テーブル制御部２２１は、変換テーブル記憶部２２３が保存する変換テーブルを取り出し、返答する。ホスト書込追記ポインタ制御部２３２は、ホスト書込追記ポインタ記憶部２３０が保存するホスト書込追記ポインタを取り出し、返答する。コンパクション追記ポインタ制御部２４２は、コンパクション追記ポインタ記憶部２４０が保存するコンパクション追記ポインタを取り出し、返答する。ブロック使用情報制御部２２６は、ブロック使用情報記憶部２２８が保存するブロック使用情報を取り出し、返答する。
【０１９４】
ステップＳ７３では、スナップショット保存部２８２は、取得した変換テーブルと、取得したホスト書込追記ポインタと、取得したコンパクション追記ポインタと、取得したブロック使用情報を保存するように半導体記憶媒体制御部２０３に依頼し、スナップショットを記録する。半導体記憶媒体制御部２０３は、取得した変換テーブルと、取得したホスト書込追記ポインタと、取得したコンパクション追記ポインタと、取得したブロック使用情報をスナップショットとして記録する。なお、スナップショットやログが記録されている半導体記憶媒体２０５の物理アドレス番地があらかじめ分かっていないと、例えば、データ記憶装置２００の電源が投入されたときに、管理情報を復元できないため、スナップショットやログを記録する半導体記憶媒体２０５の物理アドレス番地は、半導体記憶媒体２０５のあらかじめ固定されている領域又は、半導体記憶媒体２０５のあらかじめ固定されている領域に記録されている情報からたどることができる領域にする。
【０１９５】
ステップＳ７４では、スナップショット保存部２８２は、ログ保存部２８４に、スナップショット記録終了を示す旨のログを保存するように要求する。これにより、スナップショットとログの記録時刻の順序関係が分かる。ログ保存部２８４は、半導体記憶媒体制御部２０３に、スナップショット記録終了を示す旨の情報を保存するように依頼する。半導体記憶媒体制御部２０３は、スナップショット記録終了を示す旨の情報をログとして記録する。なお、ログが記録されている半導体記憶媒体２０５の物理アドレス番地があらかじめ分かっていないと、例えば、データ記憶装置２００の電源が投入されたときに、管理情報を復元できないため、ログを記録する半導体記憶媒体２０５の物理アドレス番地は、半導体記憶媒体２０５のあらかじめ固定されている領域又は、半導体記憶媒体２０５のあらかじめ固定されている領域に記録されている情報からたどることができる領域に記録する。ログ保存部２８４が、半導体記憶媒体制御部２０３を介して保存するログは、図１２に示すように、ログ保存部２８４がログのコミット処理要求を受け付けた順番に時系列で並ぶようになる。スナップショット記録開始前のログ（図１２におけるログ１及びログ２）及び以前に記録したスナップショットは、管理情報復元処理で不要になるため、ログ保存部２８４は、スナップショット記録開始前のログ及び以前に記録したスナップショットを、新たなデータ記憶領域として開放する。
【０１９６】
次に、データ記憶装置２００が行う管理情報復元処理の手順について、図１７を参照して説明する。図１７は、データ記憶装置２００で行われる管理情報復元処理の手順の流れの一例を示すフローチャートである。なお、データ記憶装置２００は、例えば、データ記憶装置２００の電源が投入されたときに管理情報を復元する。またデータ記憶装置２００は、データ記憶装置２００の電源が投入されたとき以外でも、管理情報の復元が必要になったタイミングで、管理情報を復元してもよい。例えば、ＤＲＡＭ５４に保持している管理情報のデータが化けてしまったことを検出した時に、管理情報の復元処理を実行してもよい。
【０１９７】
ステップＳ８１では、管理情報復元部２９０は、スナップショット復元部２９２に、最新のスナップショットを復元するように依頼する。スナップショット復元部２９２は、管理情報復元部２９０から、最新のスナップショットを復元する依頼を受けると、半導体記憶媒体制御部２０３に、最新のスナップショットを取り出す要求を発行する。半導体記憶媒体制御部２０３は、半導体記憶媒体２０５から、要求されたデータを読み込んで、返却する。スナップショット復元部２９２は、最新のスナップショットを受け取る。スナップショット復元部２９２は、受け取ったスナップショットから、変換テーブルを取り出し、変換テーブル制御部２２１に、取り出した変換テーブルを保存するように依頼する。変換テーブル制御部２２１は、変換テーブル記憶部２２３に、取り出した変換テーブルを保存する。スナップショット復元部２９２は、受け取ったスナップショットから、ホスト書込追記ポインタを取り出し、ホスト書込追記ポインタ制御部２３２に、取り出したホスト書込追記ポインタを保存するように依頼する。ホスト書込追記ポインタ制御部２３２は、ホスト書込追記ポインタ記憶部２３０に、取り出したホスト書込追記ポインタを保存する。スナップショット復元部２９２は、受け取ったスナップショットから、コンパクション追記ポインタを取り出し、コンパクション追記ポインタ制御部２４２に、取り出したコンパクション追記ポインタを保存するように依頼する。コンパクション追記ポインタ制御部２４２は、コンパクション追記ポインタ記憶部２４０に、取り出したコンパクション追記ポインタを保存する。スナップショット復元部２９２は、受け取ったスナップショットから、ブロック使用情報を取り出し、ブロック使用情報制御部２２６に、取り出したブロック使用情報を保存するように依頼する。ブロック使用情報制御部２２６は、ブロック使用情報記憶部２２８に、取り出したブロック使用情報を保存する。
【０１９８】
ステップＳ８２〜Ｓ８４では、管理情報復元部２９０は、ログ復元部２９４に、最新のスナップショットより後に保存されたログから管理情報を復元するように依頼する。ログ復元部２９４は、管理情報復元部２９０から、最新のスナップショットより後に保存されたログから管理情報を復元する依頼を受けると、半導体記憶媒体制御部２０３に、最新のスナップショットより後に保存されたログを取り出す要求を発行する。半導体記憶媒体制御部２０３は、半導体記憶媒体２０５から、要求されたデータを読み込んで、返却する。ログ復元部２９４は、最新のスナップショットより後に保存されたログを受け取る。ログ復元部２９４は、受け取ったログから、記録順にログを取り出し、変換テーブル制御部２２１、ホスト書込追記ポインタ制御部２３２、コンパクション追記ポインタ制御部２４２、又はブロック使用情報制御部２２６に、ログに記録されている各種情報の変更情報を反映するように依頼する。変換テーブル制御部２２１、ホスト書込追記ポインタ制御部２３２、コンパクション追記ポインタ制御部２４２、又はブロック使用情報制御部２２６は、ログに記録されている各種情報の変更情報を、変換テーブル記憶部２２３が保存する変換テーブル、ホスト書込追記ポインタ記憶部２３０が保存するホスト書込追記ポインタ、コンパクション追記ポインタ記憶部２４０が保存するコンパクション追記ポインタ、又はブロック使用情報記憶部２２８が保存するブロック使用情報に、反映する。
【０１９９】
次に、第２実施形態のデータ記憶装置２００の効果について説明する。
【０２００】
コンパクション処理では、コンパクションした結果、コンパクション元となったブロックを未使用ブロックとして回収する。従って、コンパクションでコピーするページ数が少ないほうがよい。このため、コンパクション対象ブロックを検出する際は、可能な限り有効ページ数が少ないブロックを選ぶべきであるが、さらに効率を上げるためには、アドレス局所性を利用して、コンパクション対象として検出されるブロックの有効ページ数が少なくなるようにする必要がある。
【０２０１】
一般にデータ記憶装置へのアクセスパターンにはアドレス局所性があることが知られている。アドレス局所性を前提にすると、更新頻度が高いデータは、新たな書き込みによって無効化されやすく、更新頻度が低いデータは、新たな書き込みによって無効化されにくいため、ホストから書込要求されるデータは更新頻度が高いデータであり、コンパクションされるデータは、ブロックがコンパクションされるまで更新されなかったデータであるので、コンパクションされるデータは更新頻度が低いデータであると言える。
【０２０２】
第２実施形態のデータ記憶装置２００では、ホスト書込追記ポインタとコンパクション追記ポインタを別々に持つ構成をとることで、更新頻度が高いデータと更新頻度が低いデータをそれぞれ集めることができる。更新頻度が高く無効化されやすいデータを集めると、そのブロックの有効ページ数の期待値を下げることができる。また、第２実施形態のデータ記憶装置２００における総有効ページ数は一定であるため、更新頻度が低く無効化されにくいデータを集めると、そのブロックの有効ページ数の期待値が上がり、結果として別のブロックの有効ページ数の期待値を下げることができる。
【０２０３】
一方、アドレス局所性のないランダムライト時には、ホスト書込追記ポインタとコンパクション追記ポインタを別々に持つ構成を取る場合であってもとらない場合であっても、コンパクション対象として検出されるブロックの有効ページ数の期待値は同程度であると考えられる。このため、第２実施形態のようにホスト書込追記ポインタとコンパクション追記ポインタを別々に持つ構成を取ってもランダムライトの性能を落とすことはない。
【０２０４】
以上のように第２実施形態では、アクセスパターンのアドレス局所性を利用することで、コンパクションすべきブロックの有効ページ数の期待値を下げることが可能になり、結果として、ホスト書込追記ポインタとコンパクション追記ポインタを別々に持つ構成をとらない場合と比べて、ホスト装置から書込要求されたサイズに比して、実際にデータ記憶装置において書き込みされるサイズ及び読み込みされるサイズを小さくすることができるため、より高い書き込み性能、及びより長いデータ記憶装置の設計寿命を得ることができる。
【０２０５】
また、定常状態では、常にコンパクションが実行される状態になると考えられる。従って第２実施形態のように、ホスト書込追記ポインタとコンパクション追記ポインタを別々に持つ構成をとらない場合、コンパクションが行われた結果生まれた新たに書き込める領域にホストから書込要求されたデータを書き込むことになる。この時、コンパクションの（連続した）書き込みが完了しないとホストから書込要求されたデータが書き込めなくなるため、ホスト装置からの書込要求がコンパクションの（連続した）書き込みによって阻害され、安定した書き込み性能をホスト装置に対して提供することができない。
【０２０６】
これに対し、第２実施形態では、ホスト書込追記ポインタとコンパクション追記ポインタを別々に持つ構成をとり、ホスト書込処理とコンパクション処理をそれぞれ独立して並行に行い、更に、半導体記憶媒体制御部２０３において、必要に応じて、書込指示部２５０からの半導体記憶媒体２０５への書込要求又は読込要求の処理と、コンパクション部２７０からの半導体記憶媒体２０５への書込要求又は読込要求の処理を切り替えることができる。従って第２実施形態によれば、必要に応じて、ページ単位の粒度で、ホストの書き込みとコンパクションの書き込みを切り替えることが可能になり、ホスト装置からの書込要求がコンパクションの書き込みによって阻害される割合が減少し、結果として、安定した書き込み性能をホスト装置に提供することが可能になる。
【０２０７】
また第２実施形態のように、ホスト書込追記ポインタとコンパクション追記ポインタを別々に持つ構成を取ることで、ホスト装置からの操作により、データ記憶装置２００内に記録されているデータを論理アドレス順に整列することが容易になる。より詳細には、ホスト装置から、データ記憶装置２００が提供する論理アドレス領域の全域のシーケンシャルライト要求を発行することで、データ記憶装置内に記録されているデータを論理アドレス順に整列することができる。以下、図１８を参照して説明する。
【０２０８】
ホスト装置から、データ記憶装置２００が提供する論理アドレス領域の全域のシーケンシャルライト要求を発行すると、当該シーケンシャルライトの実行中に一度データが書き込まれた論理アドレスには、当該シーケンシャルライトの実行中に再びデータが書き込まれることがない。従って、ホスト書込用の追記ブロックだったブロックで、当該シーケンシャルライトの実行を開始した時点以降に追記が完了し、使用中ブロックとして管理されているブロックのページは無効化されないことになる。つまり、ホスト書込用の追記ブロックだったブロックで、当該シーケンシャルライトの実行を開始した時点以降に追記が完了し、使用中ブロックとして管理されているブロックは、コンパクション対象として選ばれないことになる。
【０２０９】
一方、当該シーケンシャルライトを開始した時点で既に使用中ブロックとして管理されているブロックの有効ページ、又はコンパクション用の追記ブロックだったブロックで、当該シーケンシャルライトを開始した時点以降に追記が完了し、使用中ブロックとして管理されているブロックの有効ページは、まだ当該シーケンシャルライトによって書き込みされていない論理アドレスのデータである。
【０２１０】
従って、今後当該シーケンシャルライトによって無効化されるはずである。このように、当該シーケンシャルライトを開始した時点で既に使用中ブロックとして管理されているブロックの有効ページ、又はコンパクション用の追記ブロックだったブロックで、当該シーケンシャルライトを開始した時点以降に追記が完了し、使用中ブロックとして管理されているブロックの有効ページが次々に無効化されていくので、コンパクション対象として選ばれるブロックは、当該シーケンシャルライトを開始した時点で既に使用中ブロックとして管理されているブロック、又は、コンパクション用の追記ブロックだったブロックで、当該シーケンシャルライトを開始した時点以降に追記が完了し、使用中ブロックとして管理されているブロックということになる。
【０２１１】
そして、当該シーケンシャルライトが完了すると、データ記憶装置２００内に記録されているデータは、論理アドレス順に整列されている状態になる。一方、ホスト書込追記ポインタとコンパクション追記ポインタを別々に持つ構成をとらない場合は、論理アドレス上はばらばらな値を示すコンパクションされたデータと、論理アドレス上は整列された値を示すホストから書込要求されたデータがひとつのブロック内で常に混ざった状態になるため、完全に論理アドレス順に書き込まれたデータが整列された状態にすることは非常に困難である。
【０２１２】
ここで、このように、完全に論理アドレス順に書き込まれたデータが整列されている状態では、さらにホスト装置からシーケンシャルライト書込要求が来た際に、書込要求によるデータの書き込みに１ブロック使用すると、物理アドレス上で連続したデータが必ず１ブロック分無効化される。従って、論理アドレス順に整理する処理の後に、ホスト装置からシーケンシャルライト要求が発行されると、コンパクションによるコピー処理をする必要がなくなる。
【０２１３】
また、追記方式ではコンパクション先のブロックがあらかじめ確保されている必要があるため、データ記憶装置２００は、データ記憶装置２００に搭載されている記憶媒体の総容量から、所定の容量の余裕容量を差し引いた容量を、ホスト装置に提供する表記容量としている。しかし、完全に論理アドレス順に書き込まれたデータが整列されている状態では、表記容量分のブロックが全て有効ページで埋まっており、余裕容量分のブロックが全て空き状態ということになる。
【０２１４】
このため、論理アドレス順に整理する処理の後に、ホスト装置からランダムな書込要求が発行された場合であっても、少なくとも余裕容量分の書き込みデータ量になるまではコンパクションによるコピー処理は発生しない。
【０２１５】
ところで、コンパクションによるコピー処理が実行されると、記憶媒体自体に対するデータの書き込み性能に比して、ホスト装置から書込要求されたデータの書き込み性能は落ちることになる。定常状態では、常にコンパクションによるコピー処理が実行される状態になると考えられるため、一度定常状態に陥ってしまった場合は、ホスト装置から書込要求されたデータの書き込み性能は、記憶媒体自体に対するデータの書き込み性能に比して劣っていることになる。前述したように、論理アドレス順に整列する処理を行ったあとでは、少なくとも余裕容量分の書き込みデータ量になるまではコンパクションによるコピー処理が発生しなくなるため、ホスト装置から書込要求されたデータの書き込み性能は、少なくとも余裕容量分の書き込みデータ量になるまでは記憶媒体自体に対するデータの書き込み性能そのものが出ることになる。
【０２１６】
従って、ホスト書込追記ポインタとコンパクション追記ポインタを別々に持つ構成を取ることで、ホスト装置から書込要求されたデータの書き込み性能は、記憶媒体自体に対するデータの書き込み性能そのものが出る状態を、容易に作り出すことができることになる。
【０２１７】
なお、上記の説明では、論理アドレス順に整列する処理は、ホスト装置から、データ記憶装置が提供する論理アドレス領域の全域のシーケンシャルライト要求を発行することによって実現したが、データ記憶装置内部に上記の論理アドレス順に整列する処理を行う機構を組み込んでもよい。
【０２１８】
（第３実施形態）
上述したような、消去済みのブロックのうち書き込みがまだ行われていないページに対して順次ページ単位で書き込みが可能であり、既に書き込みが行われたページに対するデータの上書きは不可能であるなどの制約がある記憶媒体を用いたデータ記憶装置では、管理情報の更新情報であるログもページ単位で書き込む必要がある。
【０２１９】
第２実施形態においても、管理情報の保存と復元の処理自体は可能である。しかし、第２実施形態のようにデータの管理単位をページサイズで行った場合、ホスト装置からの書込要求又はコンパクションの書き込みにより１ページ分のデータを書き込む毎に管理情報が更新される。このため、ホスト装置からの書込要求又はコンパクションの書き込みにより１ページ分のデータを書き込む毎にログを１ページ書き込まなくてはならなくなる。これは、記憶媒体自体に対するデータの書き込み性能に比して、おおよそ半分の書き込み性能しか出ないことを意味するとともに、記憶媒体自体の寿命から計算されるデータ記憶装置の設計寿命がおおよそ半分になることを意味する。
【０２２０】
そこで第３実施形態では、ログを記録すべき回数を削減する例について説明する。以下では、第２実施形態との相違点の説明を主に行い、第２実施形態と同様の機能を有する構成要素については、第２実施形態と同様の名称・符号を付し、その説明を省略する。
【０２２１】
まず、第３実施形態のデータ記憶装置の構成について説明する。
【０２２２】
図１９は、第３実施形態のデータ記憶装置３００の機能構成の詳細の一例を示すブロック図である。第３実施形態のデータ記憶装置３００では、変換テーブル記憶部３２３、ブロック使用情報制御部３２６、書込指示部３５０、コンパクション部３７０、及びログ復元部３９４が、第２実施形態の管理装置２００と相違する。以下では、これらの各部について相違点を説明する。
【０２２３】
変換テーブル記憶部３２３は、変換テーブルを保存する。第３実施形態の変換テーブルには、正引きテーブル、有効ページフラグ、及び有効ページカウンタが含まれ、逆引きテーブルは含まれない。
【０２２４】
図２０は、有効ページフラグ、及び有効ページカウンタのデータ構成の一例を示す図である。図２０に示すように、有効ページフラグ、及び有効ページカウンタは、ブロック番号をインデックスとし、ブロック番号、有効ページカウンタ、及び有効ページフラグの集合をエントリとして含む。有効ページフラグの集合は、ブロックの中に配置されるページの順番に並べることで、どのページの有効ページフラグであるかを特定できる。また、同一ブロックの有効ページカウンタの値と、有効ページフラグの真値の総数は一致する。なお、インデックスとなるブロック番号と正引きテーブルのエントリであるブロック番号とは、同一のブロックには同一の番号を与えるものとする。なお、正引きテーブルは第２実施形態の変換テーブル記憶部２２３が含む正引きテーブルと同様である。
【０２２５】
このように、第３実施形態の変換テーブル記憶部３２３は、第２実施形態の変換テーブル記憶部２２３と異なり、逆引きテーブルを含まない。これにより、第３実施形態では、管理情報のメモリ使用量が削減できるという効果を奏する。また、管理情報のメモリ使用量が削減できるということは、スナップショットとして保存すべき容量が減ることを意味する。このため、結果としてスナップショットの保存にかかる処理時間が削減でき、また、半導体記憶媒体２０５への書き込み量が減り、データ記憶装置３００の設計寿命の長大化が実現できるという副次的な効果を奏する。
【０２２６】
ブロック使用情報制御部３２６は、書込指示部３５０から未使用ブロックの割り当て要求を受けると、コンパクション部３７０からの未使用ブロックの割り当て要求の受け付けがそろうまで、書込指示部３５０の処理を待ち合わせる。同様に、ブロック使用情報制御部３２６は、コンパクション部３７０から未使用ブロックの割り当て要求を受けると、書込指示部３５０からの未使用ブロックの割り当て要求の受け付けがそろうまで、コンパクション部３７０の処理を待ち合わせる。
【０２２７】
ブロック使用情報制御部３２６は、書込指示部３５０及びコンパクション部３７０双方からの未使用ブロックの割り当て要求がそろうと、その時点におけるホストからの書き込み量を１としたときに、データ記憶装置３００内部で処理すべきコンパクションの書き込み量をＮ（Ｎは０以上の整数）であった時、書込指示部３５０に対しては１個の未使用ブロックを割り当て、コンパクション部３７０に対してはＮ個の未使用ブロックを割り当てる。Ｎの値は、ブロック使用情報制御部３２６が、ブロック使用情報記憶部２２８が保存するブロック使用情報に含まれる使用中のブロック数の情報や、未使用のブロック数の情報などから判断できる。また、Ｎの値を、その時点におけるホスト装置からの書き込み量を１としたときに、データ記憶装置３００内部で処理すべきコンパクションの書き込み量よりも大きくすることで、例えば、ホスト装置からの書込要求の負荷が高くないときなどに、コンパクション処理を先行して実行し、将来実行すべきコンパクション処理の量を減らすことで、将来ホスト装置からの書込要求の負荷が高くなった時の応答性を向上することもできる。
【０２２８】
ブロック使用情報制御部３２６は、割り当て内容にしたがって、ブロック使用情報記憶部２２８が記憶するブロック使用情報を更新する。ブロック使用情報制御部３２６は、待ち合わせさせていた書込指示部３５０及びコンパクション部３７０双方の処理を再開させる。
【０２２９】
ここで、図２１〜図２５を参照しながら、ホスト装置からのホスト書込要求による書込処理とコンパクション処理について説明する。
【０２３０】
まず、図２１に示すように、ブロック使用情報制御部３２６は、書込指示部３５０にブロックＤ、コンパクション部３７０にブロックＡ、Ｂ、及びＣを割り当てている。なお、コンパクション部３７０がコンパクション処理によってページを書き込む順番は、ブロックＡ、Ｂ、Ｃの順番とする。ブロック使用情報制御部３２６が、待ち合わせさせていた書込指示部３５０及びコンパクション部３７０双方の処理を再開させると、図２２に示すように、ホスト書込用追記ポインタ及びコンパクション用追記ポインタに従って、ホスト装置からの書込対象データとコンパクション対象データが追記されていく。そして、図２３や図２４のように、どちらか片方の追記ポインタが、割り当てられたブロックの終端に到達した場合でも、他方の追記ポインタが割り当てられたブロックの終端に到達するまでは、処理が待ち合わせされ、新たなブロックは割り当てられない。
【０２３１】
前述のように、その時点におけるホストからの書き込み量を１としたときに、データ記憶装置３００内部で処理すべきコンパクションの書き込み量がＮ（Ｎは０以上の整数）であった時、書込指示部３５０に対しては１個の未使用ブロックを割り当て、コンパクション部３７０に対してはＮ個の未使用ブロックを割り当てる。これは、その時点における必要なコンパクション量を確保するのが目的であるのと同時に、図２３や図２４のように、どちらか片方の追記ポインタが、割り当てられたブロックの終端に到達した場合でも、他方の追記ポインタが割り当てられたブロックの終端に到達するまで、処理が待ち合わせされることをできるだけ避けるという目的がある。
【０２３２】
そして、やがて図２５のように、両方の追記ポインタが割り当てられたブロックの終端に到達すると、ブロック使用情報制御部３２６は、書込指示部３５０及びコンパクション部３７０に、新たにブロックを割り当て、待ち合わせさせていた書込指示部３５０及びコンパクション部３７０双方の処理を再開させ、例えば、図２１に示すような状態になる。なお、以降、ブロックの割り当てから次のブロックの割り当てまでの時間を「ターム」と呼ぶ。
【０２３３】
ここで、例えば、ホスト装置からのアクセスパターンにアドレス局所性がある場合などでは、その時点におけるホストからの書き込み量を１としたときに、データ記憶装置３００内部で処理すべきコンパクション量が非常に少なくなる場合があるが、そのような場合、前述のようなブロックの割り当ての規則では、図２６に示すように、コンパクション用追記ブロックが１個割り当てられるターム（ターム２、６）と、コンパクション用追記ブロックが０個割り当てられるターム（ターム１、３、４、５）とが、適宜入れ替わるような形になる。
【０２３４】
図１９に戻り、ブロック使用情報制御部３２６は、割り当てたＮ＋１個のブロックについて、ブロックの割り当て情報を、ログ保存部２８４に通知する。なお、割り当て情報の順番は、コンパクション部３７０に割り当てたブロックが時刻順では先であり、書込指示部３５０に割り当てたブロックが時刻順では後であるようにする。また、コンパクション部３７０に複数のブロックを割り当てた場合は、割り当て情報の順番は、コンパクション部３７０が使用する順番にする。例えば、図２１〜図２５のように割り当てた場合の割り当て情報は、ブロックＡ、ブロックＢ、ブロックＣ、ブロックＤの順番になり、例えば、図２６のように割り当てた場合の割り当て情報は、ターム１がブロックＡ、ターム２がブロックＢ、ブロックＣ、ターム３がブロックＤ、ターム４がブロックＥ、ターム５がブロックＦ、ターム６がブロックＧ、ブロックＨの順番になる。ブロック使用情報制御部３２６は、ログ保存部２８４に、ログ保存部２８４に通知した情報をコミットするように依頼する。
【０２３５】
書込指示部３５０は、バッファ制御部２０７に、保存した管理サイズ分のデータの取り出し要求を発行し、半導体記憶媒体制御部２０３に、取り出したデータと、取得したホスト書込追記ポインタが対応する物理アドレス領域情報を送信することで、取り出したデータを、取得したホスト書込追記ポインタが対応する物理アドレス領域に書き込むことを依頼する。書込指示部３５０は、取得したホスト書込追記ポインタがブロックの先頭ページを示していたときは、半導体記憶媒体制御部２０３に、書き込みを依頼する前に、半導体記憶媒体制御部２０３に、ブロックの消去処理を依頼する。なお、ブロックの消去処理を行うタイミングはこれに限られない。例えば、ホスト書き込み用のブロックを新たに割り当てたタイミングでも良いし、未使用ブロックとして回収した時でも良いし、未使用ブロックとして回収してから半導体記憶媒体制御部２０３に書き込みを依頼するまでの間の任意のタイミングでも良い。
【０２３６】
ここで、一般に、半導体記憶媒体２０５のページには、ユーザデータを記録する領域に加えて、冗長領域が設けられている。冗長領域は、例えば、ユーザデータに対する誤り訂正符号のデータを記録するためなどに利用されている。ログを記録すべき回数を減らす対処を施した第３実施形態では、ログを記録すべき回数を減らすために、誤り訂正符号等のデータに加えて当該ページの逆引き論理アドレスを冗長領域に記録するようにする。つまり、ページに記録するデータは、図２７に示すように、ユーザデータを記録する領域にユーザデータを記録し、冗長領域に当該ページの逆引き論理アドレスと誤り訂正符号等のデータを記録する。記録する逆引き論理アドレスは、書込命令の領域が含まれる管理サイズの領域の先頭の論理アドレス（図１１に示す例の場合では、論理アドレス０）である。
【０２３７】
書込指示部３５０は、変換テーブルの排他制御中に、変換テーブルが新たに書き込んだデータを示すように更新する。より詳細には、書込指示部３５０は、変換テーブル制御部２２１に、書込命令の領域が含まれる管理サイズの領域の先頭の論理アドレス（図１１に示す例の場合では、論理アドレス０）に書込命令受付前に対応していた物理アドレス（更新前物理アドレス）を問い合わせる。書込指示部３５０は、取得した更新前物理アドレスが対応する有効ページフラグをＯＦＦにするように変換テーブル制御部に依頼する。また書込指示部３５０は、取得した更新前物理アドレスが対応するブロックの有効ページカウンタをデクリメントするように変換テーブル制御部２２１に依頼する。また書込指示部３５０は、取得したホスト書込追記ポインタが対応する有効ページフラグをＯＮにするように変換テーブル制御部２２１に依頼する。また書込指示部３５０は、取得したホスト書込追記ポインタが対応するブロックの有効ページカウンタをインクリメントするように変換テーブル制御部２２１に依頼する。また書込指示部３５０は、正引きテーブルの書込命令の領域が含まれる管理サイズの領域の先頭の論理アドレス（図１１に示す例の場合では、論理アドレス０）が、ホスト書込追記ポインタが対応する物理アドレス領域情報を指すように更新するように変換テーブル制御部２２１に依頼する。
【０２３８】
但し、第３実施形態の書込指示部３５０は、第２実施形態の書込指示部２５０と異なり、変換テーブルの更新情報をログ保存部２８４に通知しない。これは、後述する管理情報復元時に、変換テーブルの更新情報は、ページに記録した逆引き論理アドレスに基づき、復元可能であるためである。これにより、第２実施形態の書込指示部２５０では１ページのユーザデータ書き込み毎に変換テーブルの更新情報のログを記録していたものが、第３実施形態の書込指示部３５０では不要になるため、ログの記録回数を大幅に削減できる。
【０２３９】
書込指示部３５０は、ホスト書込追記ポインタ制御部２３２に、ホスト書込追記ポインタが次のページを指すように更新するように依頼する。書込指示部３５０は、更新したホスト書込追記ポインタがブロックの最後のページを超えてしまったかをホスト書込追記ポインタ制御部２３２に問い合わせ、最後のページを超えてしまった旨の返答を受けると、当該ブロックの追記完了情報をログ保存部２８４に通知し、ログ保存部２８４に通知した情報をコミットするように依頼する。なお、後述する復元処理時間を短縮するために、ブロックが割り当てられてから追記が完了するまでに当該ブロックに追記した全てのページの逆引き論理アドレスを覚えておいて、当該ブロックの追記終了ログに、当該ブロックに追記したページの逆引き論理アドレスを含めてもよい。
【０２４０】
書込指示部３５０は、最後のページを超えてしまった旨の返答を受けると、ブロック使用情報制御部３２６に、未使用状態のブロックの割り当て処理を依頼し、結果としてブロック使用情報が更新され、ホスト書込追記ポインタ制御部２３２に、ホスト書込追記ポインタが新たに割り当てられたブロックの先頭のページを指すように更新するように依頼する。
【０２４１】
但し、第３実施形態の書込指示部３５０は、第２実施形態の書込指示部２５０と異なり、ホスト書込追記ポインタの更新情報をログ保存部２８４に通知しない。なお、第２実施形態の書込指示部２５０が通知していたブロック使用情報の更新情報は、ブロック使用情報制御部３２６が代わりに通知する。これは、後述する管理情報復元時に、ホスト書込追記ポインタは、ページに記録した逆引き論理アドレスに基づき、変換テーブル等を復元するのに合わせて復元可能であるためである。これにより、第２実施形態の書込指示部２５０では１ページのユーザデータ書き込み毎にホスト書込追記ポインタの更新情報のログを記録していたものが、第３実施形態の書込指示部３５０では不要になるため、ログの記録回数を大幅に削減できる。
【０２４２】
コンパクション部３７０は、取得したブロックのうちコンパクション対象に適したブロックを変換テーブル制御部２２１に問い合わせ、コンパクション対象に適したブロックのブロック番号及び当該ブロックの有効ページフラグ及び有効ページカウンタを取得する。コンパクション対象に適したブロックは、例えば、有効ページカウンタの値が一番小さいブロックである。ここで、有効ページカウンタの値が０であったブロックをコンパクション対象として選んだ場合は、ブロック使用情報制御部３２６に当該ブロックを未使用状態として登録するように依頼し、結果として当該ブロックを未使用ブロックとして回収する。当該ブロックを未使用ブロックとして回収した場合は、コンパクション部３７０は、ログ保存部２８４に、更新したブロック使用情報の更新情報を通知し、また、コンパクション部３７０は、ログ保存部２８４に、ログ保存部２８４に通知した情報をコミットするように依頼する。
【０２４３】
コンパクション部３７０は、取得したコンパクション対象ブロック番号及び有効ページフラグ情報が対応する物理アドレス領域（コピー元ページ）の読込要求を半導体記憶媒体制御部２０３に発行し、読み込んだデータを受け取ると、バッファ制御部２０７に、受け取ったデータを保存する要求を発行する。なお、受け取ったデータは、図２７に示したように、ユーザデータを記録する領域にユーザデータが記録され、冗長領域に当該ページの逆引き論理アドレスと誤り訂正符号等のデータが記録されたものである。また、コンパクション部３７０は、読み込んだデータの冗長領域に記録されている逆引き論理アドレスを抽出し、一時記憶する。
【０２４４】
コンパクション部３７０は、バッファ制御部２０７に、保存したデータの取り出し要求を発行し、取り出したデータと、取得したコンパクション追記ポインタが対応する物理アドレス領域（コピー先ページ）情報を半導体記憶媒体制御部２０３に送信することで、取り出したデータを、取得したコンパクション追記ポインタが対応する物理アドレス領域（コピー先ページ）に書き込むことを依頼する。コンパクション部３７０は、取得したコンパクション追記ポインタがブロックの先頭ページを示していたときは、半導体記憶媒体制御部２０３に書き込みを依頼する前に、半導体記憶媒体制御部２０３にブロックの消去処理を依頼する。なお、ブロックの消去処理を行うタイミングはこれに限られない。例えば、コンパクション用のブロックを新たに割り当てたタイミングでも良いし、未使用ブロックとして回収した時でも良いし、未使用ブロックとして回収してから半導体記憶媒体制御部２０３に書き込みを依頼するまでの間の任意のタイミングでも良い。
【０２４５】
なお、ページに記録するデータは、バッファ記憶部２０９に保存したデータであるので、図２７に示すように、ユーザデータを記録する領域にユーザデータを記録し、冗長領域に当該ページの逆引き論理アドレスと誤り訂正符号等のデータを記録したものである。このように、逆引きテーブルは、ページにデータを書いたときにのみ新規に書き込まれて、以降更新されることがなく、コンパクションの時にのみ参照されるという特徴があるため、ホストからの書込要求でページのデータを書き込むときに同時に書き込むことができ、また、コンパクションするデータを読み込むときに同時に読み込むことができるため、別途ペナルティが発生しない。
【０２４６】
コンパクション部３７０は、変換テーブルの排他制御中に、変換テーブルがコンパクション先のデータを示すように更新する。ただし、前述したように、データのコピー処理を行っている間に、書込指示部３５０によって、コピー処理中のデータが対応する論理アドレス領域と同じ論理アドレス領域の書込処理が完了した場合は、変換テーブルを更新してはならない。
【０２４７】
より詳細には、コンパクション部３７０は、変換テーブル制御部２２１に、一時記憶した逆引き論理アドレス情報で、正引きテーブルの参照要求を発行し、一時記憶した逆引き論理アドレス情報に対応する物理アドレスを取得する。コンパクション部３７０は、一時記憶した逆引き論理アドレス情報に対応する物理アドレスと、取得したコンパクション対象ブロック番号及び有効ページフラグ情報が対応する物理アドレス領域（コピー元ページ）が一致しているか判断する。一致していなかった場合、データのコピー処理を行っている間に、書込指示部３５０によって、コピー処理中のデータが対応する論理アドレス領域と同じ論理アドレス領域の書込処理が完了したことを意味するため、コンパクション部３７０は、変換テーブルの排他制御中の処理を終え、変換テーブルを更新しない。一致していた場合は、データのコピー処理を行っている間に、書込指示部３５０によって、コピー処理中のデータが対応する論理アドレス領域と同じ論理アドレス領域の書込処理が実行されなかったかもしくは実行されていても完了していないことを意味するため、コンパクション部３７０は、変換テーブルを更新する。
【０２４８】
より詳細には、コンパクション部３７０は、取得したコンパクション対象ブロック番号及び有効ページフラグ情報が対応する物理アドレス領域（コピー元ページ）の有効ページフラグをＯＦＦにするように変換テーブル制御部２２１に依頼する。またコンパクション部３７０は、取得したコンパクション対象ブロック番号に対応するブロックの有効ページカウンタをデクリメントするように変換テーブル制御部２２１に依頼する。またコンパクション部３７０は、取得したコンパクション追記ポインタが対応する物理アドレス領域（コピー先ページ）が対応する有効ページページフラグをＯＮにするように変換テーブル制御部２２１に依頼する。またコンパクション部３７０は、取得したコンパクション追記ポインタが対応するブロックの有効ページカウンタをインクリメントするように変換テーブル制御部２２１に依頼する。またコンパクション部３７０は、取得したコンパクション対象ブロック番号及び有効ページフラグ情報が対応する物理アドレス領域（コピー元ページ）が対応する逆引き論理アドレスが指す、正引きテーブルのエントリが、コンパクション追記ポインタが対応する物理アドレス領域（コピー先ページ）情報を指すように更新するように変換テーブル制御部２２１に依頼する。
【０２４９】
第３実施形態のコンパクション部３７０は、第２実施形態のコンパクション部２７０と異なり、変換テーブルの更新情報をログ保存部２８４に通知しない。これは、後述する管理情報復元時に、変換テーブルの更新情報は、ページに記録した逆引き論理アドレスに基づき、復元可能であるためである。これにより、第２実施形態のコンパクション部２７０では１ページのユーザデータ書き込み毎に変換テーブルの更新情報のログを記録していたものが、第３実施形態のコンパクション部３７０では不要になるため、ログの記録回数を大幅に削減できる。
【０２５０】
コンパクション部３７０は、取得したコンパクション対象ブロックの有効ページカウンタの値が０になったら、ブロック使用情報制御部３２６に当該ブロックを未使用状態として登録するように依頼し、結果として当該ブロックを未使用ブロックとして回収する。当該ブロックを未使用ブロックとして回収した場合は、コンパクション部３７０は、ログ保存部２８４に、更新したブロック使用情報の更新情報を通知し、また、コンパクション部３７０は、ログ保存部２８４に、ログ保存部２８４に通知した情報をコミットするように依頼する。
【０２５１】
コンパクション部３７０は、コンパクション追記ポインタ制御部２４２に、コンパクション追記ポインタが次のページを指すように更新するように依頼する。コンパクション部３７０は、コンパクション追記ポインタ制御部２４２に、更新したコンパクション追記ポインタがブロックの最後のページを超えてしまったかを問い合わせ、最後のページを超えてしまった旨の返答を受けると、コンパクション部３７０は、ログ保存部２８４に、当該ブロックの追記完了情報を通知し、また、コンパクション部３７０は、ログ保存部２８４に、ログ保存部２８４に通知した情報をコミットするように依頼する。なお、後述する復元処理時間を短縮するために、ブロックが割り当てられてから追記が完了するまでに当該ブロックに追記した全てのページの逆引き論理アドレスを覚えておいて、当該ブロックの追記終了ログに、当該ブロックに追記したページの逆引き論理アドレスを含めてもよい。
【０２５２】
コンパクション部３７０は、最後のページを超えてしまった旨の返答を受けると、コンパクション追記ポインタ制御部２４２に、ブロック使用情報制御部３２６から割り当てられた次のブロックの先頭のページを指すように更新するように依頼する。
【０２５３】
コンパクション部３７０は、最後のページを超えてしまった旨の返答を受け、かつ、ブロック使用情報制御部３２６から割り当てられたブロックをすべて使い果たしてしまった場合、ブロック使用情報制御部３２６に、未使用状態のブロックの割り当て処理を依頼し、結果としてブロック使用情報が更新され、コンパクション追記ポインタ制御部２４２に、コンパクション追記ポインタが新たに割り当てられたブロックの先頭のページを指すように更新するように依頼する。
【０２５４】
第３実施形態のコンパクション部３７０は、第２実施形態のコンパクション部２７０と異なり、コンパクション追記ポインタの更新情報をログ保存部２８４に通知しない。なお、コンパクション部２７０が通知していたブロック使用情報の更新情報は、ブロック使用情報制御部３２６が代わりに通知する。これは、後述する管理情報復元時に、コンパクション追記ポインタは、ページに記録した逆引き論理アドレスに基づき、変換テーブル等を復元するのに合わせて復元可能であるためである。これにより、第２実施形態のコンパクション部２７０では１ページのユーザデータ書き込み毎にコンパクション追記ポインタの更新情報のログを記録していたものが、第３実施形態のコンパクション部３７０では不要になるため、ログの記録回数を大幅に削減できる。
【０２５５】
ログ復元部３９４は、管理情報復元部２９０から、最新のスナップショットより後に保存されたログから管理情報を復元する依頼を受けると、半導体記憶媒体制御部２０３に、最新のスナップショットより後に保存されたログを取り出す要求を発行し、最新のスナップショットより後に保存されたログを受け取る。
【０２５６】
なお、ログには、新たに割り当てたブロックの情報と、ブロックの追記完了情報と、ブロックを未使用ブロックとして回収した情報と、のいずれかが記録されている。ここで、新たに割り当てたブロックの情報は、コンパクション部３７０が使用する順に１個以上のコンパクション追記用のブロックの情報が並んでおり、それに続いて書込指示部３５０が使用するホスト書き込み追記用のブロックの情報が並んでいる。また、あるタームで割り当てられたブロックの追記がすべて完了しない限り次のタームには進まないので、ログを記録順にたどっていき、あるタームで割り当てたすべてのブロックの追記完了情報が記録されている状態で次のタームのブロック割り当てのログが記録されていることを確認することで、ログの正当性を調べることができる。
【０２５７】
ログ復元部３９４は、割り当てたブロックの情報について、順番に従い、ブロック番号を抽出する。ログ復元部３９４は、抽出したブロック番号のブロックについて、先頭のページから順番に、半導体記憶媒体制御部２０３に、ページの読込要求を発行する。ログ復元部３９４は、半導体記憶媒体制御部２０３から、読み込んだページのデータを受け取り、受け取ったデータから、逆引き論理アドレス情報を抽出する。
【０２５８】
ログ復元部３９４は、抽出した逆引き論理アドレス情報に基づき、変換テーブルの抽出した逆引き論理アドレス情報のエントリが、読み込んだページを指すようにする。より詳細には、ログ復元部３９４は、抽出した逆引き論理アドレスにページを読み込む前に対応していた物理アドレス（更新前物理アドレス）を変換テーブル制御部２２１に問い合わせる。ログ復元部３９４は、取得した更新前物理アドレスが対応する有効ページフラグをＯＦＦにするように変換テーブル制御部２２１に依頼する。ログ復元部３９４は、取得した更新前物理アドレスが対応するブロックの有効ページカウンタをデクリメントするように変換テーブル制御部２２１に依頼する。ログ復元部３９４は、読み込んだページが対応する有効ページページフラグをＯＮにするように変換テーブル制御部２２１に依頼する。ログ復元部３９４は、読み込んだページが対応するブロックの有効ページカウンタをインクリメントするように変換テーブル制御部２２１に依頼する。ログ復元部３９４は、正引きテーブルの抽出した逆引き論理アドレスが読み込んだページが対応する物理アドレス領域情報を指すように更新するように変換テーブル制御部２２１に依頼する。
【０２５９】
なお、追記が完了していないブロックについては、途中で未記録のページを読み出すことになる。消去済みのページのデータは、例えば、図２７で示した冗長領域のデータを含めて全てのビットが１になっているなどするため、例えば、全てのビットが１になっているかどうかを判定することで、未記録のページであることが分かる。この時、ログ復元部３９４は、未記録のページを指すように、追記が完了していないブロックが書込追記用に割り当てられたブロックの場合は、ホスト書込追記ポインタを更新するように、ホスト書込追記ポインタ制御部２３２に依頼する。一方、ログ復元部３９４は、追記が完了していないブロックがコンパクション追記用に割り当てられたブロックの場合は、コンパクション追記ポインタを更新するように、コンパクション追記ポインタ制御部２４２に依頼する。
【０２６０】
ここで、同一タームにおいて、同じ論理アドレスにホスト書き込みとコンパクションが起こった場合であっても、管理情報にまずコンパクションの書き込みに伴う変更を反映させ、続いてホスト書き込みに伴う変更を反映させることで、最終的に一連の管理情報はホスト書き込みされたページを指すようになる。これにより、管理情報の整合性は担保される。
【０２６１】
なお、ブロックが割り当てられてから追記が完了するまでに当該ブロックに追記した全てのページの逆引き論理アドレスを覚えておいて、当該ブロックの追記完了ログに当該ブロックに追記したページの逆引き論理アドレスを含めた場合、当該追記完了ログを見るだけで、そのブロックに追記したページの逆引き論理アドレスがすべてわかる。これにより、半導体記憶媒体２０５からの読出処理が大幅に削減でき、最後の追記途中だったブロックのみ、先頭から順番にページを読み込むだけで良くなる。
【０２６２】
ログ復元部３９４は、ログにブロックを未使用ブロックとして回収した情報が記録されていたら、ブロック使用情報制御部３２６に、当該ブロックの使用状態を未使用状態に変更するように依頼する。
【０２６３】
次に、第３実施形態のデータ記憶装置の動作について説明する。なお、読込処理及びスナップショット記録処理は第２実施形態と同様であるため、説明を省略する。
【０２６４】
まず、ホスト装置からの書込命令（書込コマンド）に応じて、データ記憶装置３００が行う書込処理の手順について、図２８を参照して説明する。図２８は、データ記憶装置３００で行われる書込処理の手順の流れの一例を示すフローチャートである。
【０２６５】
まずステップＳ１０１〜Ｓ１０７までの処理は、図１３のステップＳ１〜Ｓ７までの処理と同様であるため、説明を省略する。
【０２６６】
ステップＳ１０８の処理も図１３のステップＳ８の処理と同様であるため詳細な説明は省略するが、図２７に示すように、ページには、ユーザデータを記録する領域にユーザデータを記録し、冗長領域に当該ページの逆引き論理アドレスと誤り訂正符号等のデータを記録する。このため、第３実施形態では、図１３のステップＳ９で示したように、書き込んだページの逆引き論理アドレスを別途登録する必要がなく、ログに記録する必要もない。
【０２６７】
ステップＳ１１０〜Ｓ１１５までの処理は、図１３のステップＳ１０〜Ｓ１５までの処理と同様であるため、説明を省略する。
【０２６８】
ステップＳ１１６の処理も図１３のステップＳ１６の処理と同様であるため詳細な説明は省略するが、ステップＳ１１６では、変換テーブルの更新情報をログ保存部２８４に通知しない。これは、後述する管理情報復元時に、変換テーブルの更新情報は、ページに記録した逆引き論理アドレスに基づき、復元可能であるためである。これにより、図１３のステップＳ１２〜Ｓ１６では、１ページのユーザデータ書き込み毎に変換テーブルの更新情報のログを記録していたが、図２８のステップＳ１１２〜Ｓ１１６では不要になるため、ログの記録回数を大幅に削減できる。
【０２６９】
ステップＳ１１７の処理は、図１３のステップＳ１７の処理と同様であるため、説明を省略する。
【０２７０】
ステップＳ１１８の処理は、図１３のステップＳ１８の処理とほぼ同様であるため詳細な説明は省略するが、ステップＳ１１８では、更新したホスト書込追記ポインタの更新情報をログ保存部２８４に通知しない。これは、後述する管理情報復元時に、ホスト書込追記ポインタの更新情報は、復元可能であるためである。これにより、図１３のステップＳ１８では１ページのユーザデータ書き込み毎にホスト書込追記ポインタの更新情報のログを記録していたものが、図２８のステップＳ１１８では不要になるため、ログの記録回数を大幅に削減できる。
【０２７１】
ステップＳ１１９の処理は、図１３のステップＳ１９の処理と同様であるため、説明を省略する。
【０２７２】
ステップＳ１１９．５では、書込指示部３５０は、ログ保存部２８４に、ブロックの追記完了情報を通知するとともに、ログ保存部２８４に通知した情報をコミットするように依頼する。なお、後述する復元処理時間を短縮するために、ブロックが割り当てられてから追記が完了するまでに当該ブロックに追記した全てのページの逆引き論理アドレスを覚えておいて、当該ブロックの追記終了ログに、当該ブロックに追記したページの逆引き論理アドレスを含めてもよい。ログ保存部２８４は、書込指示部３５０からコミット通知を受け、一時記憶しておいた更新情報を半導体記憶媒体制御部２０３に保存するように依頼する。半導体記憶媒体制御部２０３は、一時記憶しておいた更新情報をログとして記録する。なお、ログが記録されている半導体記憶媒体２０５の物理アドレスがあらかじめ分かっていないと、例えば、データ記憶装置３００の電源が投入されたときに、管理情報を復元できない。このため、ログを記録する半導体記憶媒体２０５の物理アドレスは、半導体記憶媒体２０５のあらかじめ固定されている領域又は、半導体記憶媒体２０５のあらかじめ固定されている領域に記録されている情報からたどることができる領域にする。書込指示部３５０は、ブロック使用情報制御部３２６に、未使用状態のブロックの割り当て処理を依頼する。ブロック使用情報制御部３２６は、書込指示部３５０から、未使用ブロックの割り当て要求を受けると、コンパクション部３７０からの未使用ブロックの割り当て要求の受け付けがそろうまで、書込指示部３５０の処理を待ち合わせさせる。
【０２７３】
ステップＳ１２０では、ブロック使用情報制御部３２６は、書込指示部３５０及びコンパクション部３７０双方からの未使用ブロックの割り当て要求がそろうと、その時点におけるホストからの書き込み量を１としたときに、データ記憶装置３００内部で処理すべきコンパクションの書き込み量をＮ（Ｎは０以上の整数）であった時、書込指示部３５０に対しては１個の未使用ブロックを割り当て、コンパクション部３７０に対してはＮ個の未使用ブロックを割り当てる。Ｎの値は、ブロック使用情報制御部３２６が、ブロック使用情報記憶部２２８が保存するブロック使用情報に含まれる使用中のブロック数の情報や、未使用のブロック数の情報などから判断できる。また、Ｎの値を、その時点におけるホストからの書き込み量を１としたときに、データ記憶装置３００内部で処理すべきコンパクションの書き込み量よりも大きくすることで、例えば、ホスト装置からの書込要求の負荷が高くないときなどに、コンパクション処理を先行して実行し、将来実行すべきコンパクション処理の量を減らすことで、将来ホスト装置からの書込要求の負荷が高くなった時の応答性を向上することもできる。ブロック使用情報制御部３２６は、割り当て内容にしたがって、ブロック使用情報記憶部２２８が保存するブロック使用情報を更新する。ブロック使用情報制御部３２６は、待ち合わせさせていた書込指示部３５０の処理を再開させる。ブロック使用情報制御部３２６は、割り当てたＮ＋１個のブロックについて、ブロックの割り当て情報を、ログ保存部２８４に通知する。なお、割り当て情報の順番は、コンパクション部３７０に割り当てたブロックが時刻順では先であり、書込指示部３５０に割り当てたブロックが時刻順では後であるようにする。また、コンパクション部３７０に複数のブロックを割り当てた場合は、割り当て情報の順番は、コンパクション部３７０が使用する順番にする。例えば、図２１〜図２５のように割り当てた場合の割り当て情報は、ブロックＡ、ブロックＢ、ブロックＣ、ブロックＤの順番になり、例えば、図２６のように割り当てた場合の割り当て情報は、ターム１がブロックＡ、ターム２がブロックＢ、ブロックＣ、ターム３がブロックＤ、ターム４がブロックＥ、ターム５がブロックＦ、ターム６がブロックＧ、ブロックＨの順番になる。ブロック使用情報制御部３２６は、ログ保存部２８４に、ログ保存部２８４に通知した情報をコミットするように依頼する。ログ保存部２８４は、ブロック使用情報制御部３２６からコミット通知を受け、一時記憶しておいた更新情報を半導体記憶媒体制御部２０３に保存するように依頼する。半導体記憶媒体制御部２０３は、一時記憶しておいた更新情報をログとして記録する。なお、ログが記録されている半導体記憶媒体２０５の物理アドレスがあらかじめ分かっていないと、例えば、データ記憶装置３００の電源が投入されたときに、管理情報を復元できないため、ログを記録する半導体記憶媒体２０５の物理アドレスは、半導体記憶媒体２０５のあらかじめ固定されている領域又は、半導体記憶媒体２０５のあらかじめ固定されている領域に記録されている情報からたどることができる領域にする。書込指示部３５０は、ホスト書込追記ポインタ制御部２３２に、ホスト書込追記ポインタが新たに割り当てられたブロックの先頭のページを指すように更新するように依頼する。ホスト書込追記ポインタ制御部２３２は、ホスト書込追記ポインタ記憶部２３０が保存するホスト書込追記ポインタが新たに割り当てられたブロックの先頭のページを指すように更新する。
【０２７４】
以上のように、図２８では、ブロックの割り当てのイベントでログを記録するが、ブロックの割り当てのイベントはコンパクション処理におけるブロックの割り当て処理と同時であるので、図１３のステップＳ２１のように最後にログコミット処理を行うことはできず、随時ログをコミットする必要がある。
【０２７５】
ステップＳ１２２の処理は、図１３のステップＳ２２の処理と同様であるため、説明を省略する。
【０２７６】
次に、データ記憶装置３００が行うコンパクション処理の手順について、図２９を参照して説明する。図２９は、データ記憶装置３００で行われるコンパクション処理の手順の流れの一例を示すフローチャートである。なお、データ記憶装置３００は、コンパクション処理が必要になったタイミング、又は任意のタイミングでコンパクション処理を行う。コンパクション処理が必要になるタイミングは、ブロック使用情報に記録されている未使用ブロックの数が所定の閾値を下回ったことで判断できる。
【０２７７】
まずステップＳ１４１〜Ｓ１４２までの処理は、図１５のステップＳ４１〜Ｓ４２までの処理と同様であるため、説明を省略する。
【０２７８】
ステップＳ１４３の処理は、図１５のステップＳ４３の処理とほぼ同様であるため説明は省略するが、更に以下の処理を行う。コンパクション部３７０は、更新したブロック使用情報をコミットするようにログ保存部２８４に依頼する。ログ保存部２８４は、コンパクション部３７０からコミット通知を受け、一時記憶しておいた更新情報を半導体記憶媒体制御部２０３に保存するように依頼する。半導体記憶媒体制御部２０３は、一時記憶しておいた更新情報をログとして記録する。なお、ログが記録されている半導体記憶媒体２０５の物理アドレスがあらかじめ分かっていないと、例えば、データ記憶装置３００の電源が投入されたときに、管理情報を復元できないため、ログを記録する半導体記憶媒体２０５の物理アドレスは、半導体記憶媒体２０５のあらかじめ固定されている領域又は、半導体記憶媒体２０５のあらかじめ固定されている領域に記録されている情報からたどることができる領域にする。
【０２７９】
ステップＳ１４４〜Ｓ１４６までの処理は、図１５のステップＳ４４〜Ｓ４６までの処理と同様であるため、説明を省略する。なお、ステップＳ１４６で読み込んだデータは、図２７に示すように、ユーザデータを記録する領域にユーザデータが記録され、冗長領域に当該ページの逆引き論理アドレスと誤り訂正符号等のデータが記録されたものである。
【０２８０】
ステップＳ１４７では、コンパクション部３７０は、読み込んだデータの冗長領域に記録されている逆引き論理アドレスを抽出し、一時記憶する。
【０２８１】
ステップＳ１４８の処理は、図１５のステップＳ４８の処理とほぼ同様であるため詳細な説明は省略するが、ページには、図２７に示すように、ユーザデータを記録する領域にユーザデータを記録し、冗長領域に当該ページの逆引き論理アドレスと誤り訂正符号等のデータを記録する。このため第３実施形態では、図１５のステップＳ４９で示したように、書き込んだページの逆引き論理アドレス情報を別途登録する必要がなく、また、ログに記録する必要もない。このように、逆引きテーブルは、ページにデータを書いたときにのみ新規に書き込まれて、以降更新されることがなく、コンパクションの時にのみ参照されるという特徴がある。このため、ホストからの書込要求でページのデータを書き込むときに同時に書き込むことができ、また、コンパクションするデータを読み込むときに同時に読み込むことができるため、別途ペナルティが発生しない。
【０２８２】
ステップＳ１５０〜Ｓ１５８までの処理は、図１５のステップＳ５０〜Ｓ５８までの処理とほぼ同様であるため、詳細な説明を省略する。なお、図１５のステップＳ５０〜Ｓ５８における、「取得したコンパクション対象ブロック番号及び有効ページフラグ情報が対応する物理アドレス領域（コピー元ページ）が対応する逆引き論理アドレス」は、図２９のステップＳ１５０〜Ｓ１５８においては、前記抽出した逆引き論理アドレスに対応する。
【０２８３】
ステップＳ１５９の処理は、図１５のステップＳ５９の処理とほぼ同様であるため詳細な説明は省略するが、図２９のステップＳ１５９では、図１５のステップＳ５９と異なり、変換テーブルの更新情報をログ保存部２８４に通知しない。これは、後述する管理情報復元時に、変換テーブルの更新情報は、ページに記録した逆引き論理アドレスに基づき、復元可能であるためである。これにより、図１５のステップＳ５３〜Ｓ５９では１ページのユーザデータ書き込み毎に変換テーブルの更新情報のログを記録していたものが、図２９のステップＳ１５３〜Ｓ１５９では不要になるため、ログの記録回数を大幅に削減できる。また、コンパクション部３７０は、コンパクション対象ブロックの有効ページカウンタの値が０になり、当該ブロックを未使用ブロックとして回収した場合は、コンパクション部３７０は、ログ保存部２８４に、更新したブロック使用情報の更新情報を通知するだけでなく、コンパクション部３７０は、ログ保存部２８４に、ログ保存部２８４に通知した情報をコミットするように依頼する。ログ保存部２８４は、コンパクション部３７０からコミット通知を受け、一時記憶しておいた更新情報を半導体記憶媒体制御部２０３に保存するように依頼する。半導体記憶媒体制御部２０３は、一時記憶しておいた更新情報をログとして記録する。なお、ログが記録されている半導体記憶媒体２０５の物理アドレスがあらかじめ分かっていないと、例えば、データ記憶装置３００の電源が投入されたときに、管理情報を復元できないため、ログを記録する半導体記憶媒体２０５の物理アドレスは、半導体記憶媒体２０５のあらかじめ固定されている領域又は、半導体記憶媒体２０５のあらかじめ固定されている領域に記録されている情報からたどることができる領域にする。
【０２８４】
ステップＳ１６０の処理は、図１５のステップＳ６０の処理と同様であるため、説明を省略する。
【０２８５】
ステップＳ１６１の処理は、図１５のステップＳ６１の処理とほぼ同様であるため詳細な説明は省略するが、図２９のステップＳ１６１では、図１５のステップＳ６１と異なり、更新したコンパクション追記ポインタの更新情報をログ保存部２８４に通知しない。これは、後述する管理情報復元時に、コンパクション追記ポインタの更新情報は、復元可能であるためである。これにより、図１５のステップＳ６１では１ページのコンパクション毎にコンパクション追記ポインタの更新情報のログを記録していたものが、図２９のステップＳ１６１では不要になるため、ログの記録回数を大幅に削減できる。
【０２８６】
ステップＳ１６２の処理は、図１５のステップＳ６２の処理と同様であるため、説明を省略する。
【０２８７】
ステップＳ１６２．１では、コンパクション部３７０は、ログ保存部２８４に、ブロックの追記完了情報を通知するとともに、ログ保存部２８４に通知した情報をコミットするように依頼する。なお、後述する復元処理時間を短縮するために、ブロックが割り当てられてから追記が完了するまでに当該ブロックに追記した全てのページの逆引き論理アドレスを覚えておいて、当該ブロックの追記終了ログに、当該ブロックに追記したページの逆引き論理アドレスを含めてもよい。ログ保存部２８４は、コンパクション部３７０からコミット通知を受け、一時記憶しておいた更新情報を半導体記憶媒体制御部２０３に保存するように依頼する。半導体記憶媒体制御部２０３は、一時記憶しておいた更新情報をログとして記録する。なお、ログが記録されている半導体記憶媒体２０５の物理アドレスがあらかじめ分かっていないと、例えば、データ記憶装置３００の電源が投入されたときに、管理情報を復元できないため、ログを記録する半導体記憶媒体２０５の物理アドレスは、半導体記憶媒体２０５のあらかじめ固定されている領域又は、半導体記憶媒体２０５のあらかじめ固定されている領域に記録されている情報からたどることができる領域にする。
【０２８８】
ステップＳ１６２．２では、コンパクション部３７０は、ブロック使用情報制御部３２６から割り当てられたブロックをすべて使い果たしてしまったかを調べる。すべて使い果たしてしまった場合は、ステップＳ１６２．３に進む。一方、すべて使い果たしていない場合は、ステップＳ１６２．５に進む。
【０２８９】
ステップＳ１６２．３では、コンパクション部３７０は、ブロック使用情報制御部３２６に、未使用状態のブロックの割り当て処理を依頼する。ブロック使用情報制御部３２６は、コンパクション部３７０から未使用ブロックの割り当て要求を受けると、書込指示部３５０からの未使用ブロックの割り当て要求の受け付けがそろうまで、コンパクション部３７０の処理を待ち合わせさせる。
【０２９０】
ステップＳ１６２．４では、ブロック使用情報制御部３２６は、書込指示部３５０及びコンパクション部３７０双方からの未使用ブロックの割り当て要求がそろうと、その時点におけるホストからの書き込み量を１としたときに、データ記憶装置３００内部で処理すべきコンパクションの書き込み量をＮ（Ｎは０以上の整数）であった時、書込指示部３５０に対しては１個の未使用ブロックを割り当て、コンパクション部３７０に対してはＮ個の未使用ブロックを割り当てる。Ｎの値は、ブロック使用情報制御部３２６が、ブロック使用情報記憶部２２８が保存するブロック使用情報に含まれる使用中のブロック数の情報や、未使用のブロック数の情報などから判断できる。また、Ｎの値を、その時点におけるホストからの書き込み量を１としたときに、データ記憶装置３００内部で処理すべきコンパクションの書き込み量よりも大きくすることで、例えば、ホスト装置からの書込要求の負荷が高くないときなどに、コンパクション処理を先行して実行し、将来実行すべきコンパクション処理の量を減らすことで、将来ホスト装置からの書込要求の負荷が高くなった時の応答性を向上することもできる。ブロック使用情報制御部３２６は、割り当て内容にしたがって、ブロック使用情報記憶部２２８が保存するブロック使用情報を更新する。ブロック使用情報制御部３２６は、待ち合わせさせていたコンパクション部３７０の処理を再開させる。ブロック使用情報制御部３２６は、割り当てたＮ+１個のブロックについて、ブロックの割り当て情報を、ログ保存部２８４に通知する。なお、割り当て情報の順番は、コンパクション部３７０に割り当てたブロックが時刻順では先であり、書込指示部３５０に割り当てたブロックが時刻順では後であるようにする。また、コンパクション部３７０に複数のブロックを割り当てた場合は、割り当て情報の順番は、コンパクション部３７０が使用する順番にする。例えば、図２１〜図２５のように割り当てた場合の割り当て情報は、ブロックＡ、ブロックＢ、ブロックＣ、ブロックＤの順番になり、例えば、図２６のように割り当てた場合の割り当て情報は、ターム１がブロックＡ、ターム２がブロックＢ、ブロックＣ、ターム３がブロックＤ、ターム４がブロックＥ、ターム５がブロックＦ、ターム６がブロックＧ、ブロックＨの順番になる。ブロック使用情報制御部３２６は、ログ保存部２８４に、ログ保存部２８４に通知した情報をコミットするように依頼する。ログ保存部２８４は、ブロック使用情報制御部３２６からコミット通知を受け、一時記憶しておいた更新情報を半導体記憶媒体制御部２０３に保存するように依頼する。半導体記憶媒体制御部２０３は、一時記憶しておいた更新情報をログとして記録する。なお、ログが記録されている半導体記憶媒体２０５の物理アドレスがあらかじめ分かっていないと、例えば、データ記憶装置３００の電源が投入されたときに、管理情報を復元できないため、ログを記録する半導体記憶媒体２０５の物理アドレスは、半導体記憶媒体２０５のあらかじめ固定されている領域又は、半導体記憶媒体２０５のあらかじめ固定されている領域に記録されている情報からたどることができる領域にする。
【０２９１】
以上のように、図２９では、ブロックの割り当てのイベントでログを記録するが、ブロックの割り当てのイベントは書込処理におけるブロックの割り当て処理と同時であるので、図１５のステップＳ６４のように最後にログコミット処理を行うことはできず、随時ログをコミットする必要がある。
【０２９２】
ステップＳ１６２．５では、コンパクション部３７０は、コンパクション追記ポインタ制御部２４２に、ブロック使用情報制御部３２６から割り当てられた次のブロックの先頭のページ、又は新たに割り当てられたブロックの最初のブロックの先頭のページを指すように更新するように依頼する。コンパクション追記ポインタ制御部２４２は、コンパクション追記ポインタ保存部が保存するコンパクション追記ポインタが、指定されたブロックの指定されたページを指すように更新する。
【０２９３】
ステップＳ１６５の処理は、図１５のステップＳ６５の処理と同様であるため、説明を省略する。
【０２９４】
次に、データ記憶装置３００が行う管理情報復元処理の手順について、図３０を参照して説明する。図３０は、データ記憶装置３００で行われる管理情報復元処理の手順の流れの一例を示すフローチャートである。なお、データ記憶装置３００は、例えば、データ記憶装置３００の電源が投入されたときに管理情報を復元する。またデータ記憶装置３００は、データ記憶装置３００の電源が投入されたとき以外でも、管理情報の復元が必要になったタイミングで、管理情報を復元してもよい。例えば、ＤＲＡＭ５４に保持している管理情報のデータが化けてしまったことを検出した時に、管理情報の復元処理を実行してもよい。
【０２９５】
なお、ステップＳ１８１〜Ｓ１８４までの処理は、図１７のステップＳ８１〜Ｓ８４までの処理とほぼ同様であるため、説明を省略する。但し、ステップＳ１８３のログの種類には、ブロックを未使用ブロックとして回収したフリーブロック回収情報、ブロックの追記が完了したブロック追記完了情報、及びブロックを割り当てたブロック割り当て情報がある。ステップＳ１８３の処理は、図１７のステップＳ８３のログの情報に従って復元した管理情報を更新する処理に相当し、それぞれのログの種類に応じた処理を示している。ここで、新たに割り当てたブロックの情報は、コンパクション部３７０が使用する順に１個以上のコンパクション追記用のブロックの情報が並んでおり、それに続いて書込指示部３５０が使用するホスト書き込み追記用のブロックの情報が並んでいるため、ブロックの割り当てログに関する復元処理は、割り当てられたブロック番号についてそれぞれ繰り返し実行されることになる。
【０２９６】
以下、それぞれのログの種類に応じた処理について説明する。
【０２９７】
まず、ログの種類がブロック割り当て情報であった時の復元処理の流れの手順について、図３１を参照して説明する。図３１は、ログの種類がブロック割り当て情報であった時の復元処理の手順の流れの一例を示すフローチャートである。
【０２９８】
ステップＳ２０１では、ログ復元部３９４は、ログに記録されているブロック番号のブロックについて、先頭のページから順番に、半導体記憶媒体制御部２０３に、ページの読込要求を発行する。つまり、以降の処理を繰り返して実行する。半導体記憶媒体制御部２０３は、半導体記憶媒体２０５の指定された物理アドレスのデータを読み込み、返答する。ログ復元部３９４は、読み込んだページのデータを半導体記憶媒体制御部２０３から受け取る。
【０２９９】
ステップＳ２０２では、ログ復元部３９４は、読み込んだページが未書き込みのページかを判断する。より詳細には、消去済みのページのデータは、例えば、図２７で示した冗長領域のデータを含めて全てのビットが１になっているため、全てのビットが１になっているかどうかを判定することで、未記録のページであることが分かる。未記録ページであった時は、ステップＳ２０３に進む。未記録ページでない、つまり記録済みのページであった時は、ステップＳ２０４に進む。
【０３００】
ステップＳ２０３では、ログ復元部３９４は、未記録のページを指すように、当該ブロックがホスト書込追記用に割り当てられたブロックの場合は、ホスト書込追記ポインタを更新するように、ホスト書込追記ポインタ制御部２３２に依頼する。同様に、ログ復元部３９４は、当該ブロックがコンパクション追記用に割り当てられたブロックの場合は、コンパクション追記ポインタを更新するように、コンパクション追記ポインタ制御部２４２に依頼する。ホスト書込追記ポインタ制御部２３２は、ログ復元部３９４からのホスト書込追記ポインタ更新要求を受け、ホスト書込追記ポインタ記憶部２３０が記憶するホスト書込追記ポインタを更新する。コンパクション追記ポインタ制御部２４２は、ログ復元部３９４からのコンパクション追記ポインタ更新要求を受け、コンパクション追記ポインタ記憶部２４０が記憶するコンパクション追記ポインタを更新する。
【０３０１】
ステップＳ２０４では、ログ復元部３９４は、読み込んだデータから、逆引き論理アドレス情報を抽出する。
【０３０２】
ステップＳ２０５〜Ｓ２０９では、ログ復元部３９４は、抽出した逆引き論理アドレス情報に基づき、変換テーブルの抽出した逆引き論理アドレス情報のエントリが、読み込んだページを指すようにする。より詳細には、ログ復元部３９４は、抽出した逆引き論理アドレスにページを読み込む前に対応していた物理アドレス（更新前物理アドレス）を変換テーブル制御部２２１に問い合わる。変換テーブル制御部２２１は、変換テーブル記憶部２２３が保存する変換テーブルを参照し、抽出した逆引き論理アドレスに、ページを読み込む前に対応していた物理アドレス（更新前物理アドレス）を返答する。ログ復元部３９４は、抽出した逆引き論理アドレスにページを読み込む前に対応していた物理アドレス（更新前物理アドレス）を取得する。ログ復元部３９４は、取得した更新前物理アドレスが対応する有効ページフラグをＯＦＦにするように変換テーブル制御部２２１に依頼する。ログ復元部３９４は、取得した更新前物理アドレスが対応するブロックの有効ページカウンタをデクリメントするように変換テーブル制御部２２１に依頼する。ログ復元部３９４は、読み込んだページが対応する有効ページページフラグをＯＮにするように変換テーブル制御部２２１に依頼する。ログ復元部３９４は、読み込んだページが対応するブロックの有効ページカウンタをインクリメントするように変換テーブル制御部２２１に依頼する。ログ復元部３９４は、正引きテーブルの抽出した逆引き論理アドレスが、読み込んだページが対応する物理アドレス領域情報を指すように更新するように変換テーブル制御部２２１に依頼する。変換テーブル制御部２２１は、変換テーブル記憶部３２３が保存する変換テーブルを指示に従って更新する。
【０３０３】
このように、ページの書き込み時の変換テーブルの更新処理と同等の処理を行う。つまり、第３実施形態では、管理情報の更新情報を逐一ログに記録し復元するのではなく、管理情報が更新されることになった要因を記録しておいて、その要因から管理情報が更新される様子を再現し、管理情報を復元するという処理を行う。
【０３０４】
ステップＳ２１０では、必要に応じて、ステップＳ２０１からの処理を繰り返す。
【０３０５】
ここで、同一タームにおいて、同じ論理アドレスにホスト書込処理とコンパクション処理とが起こった場合であっても、管理情報にまずコンパクションの書き込みに伴う変更を反映させ、続いてホスト書き込みに伴う変更を反映させることで、一連の管理情報はホスト書き込みされたページを指すようになる。これにより、管理情報の整合性は担保される。
【０３０６】
次に、ログの種類がブロックの追記完了情報であった時の復元処理の流れの手順について、図３２を参照して説明する。図３２は、ログの種類がブロックの追記完了情報であった時の復元処理の手順の流れの一例を示すフローチャートである。
【０３０７】
ログには、新たに割り当てたブロックの情報と、ブロックの追記完了情報と、ブロックを未使用ブロックとして回収した情報とが記録されている。また、あるタームで割り当てられたブロックの追記がすべて完了しない限り次のタームには進まないので、ステップＳ２２０では、ログ復元部３９４は、ログを記録順にたどっていき、あるタームで割り当てたすべてのブロックの追記完了情報が記録されている状態で次のタームのブロック割り当てのログが記録されていることを確認することで、ログの正当性を調べることができる。なお、ブロックが割り当てられてから追記が完了するまでに当該ブロックに追記した全てのページの逆引き論理アドレスを覚えておいて、当該ブロックの追記終了ログに、当該ブロックに追記したページの逆引き論理アドレスを含めた場合、当該追記完了ログを見るだけで、そのブロックに追記したページの逆引き論理アドレスがすべてわかる。これにより、図３１のステップＳ２０１の処理、つまり、半導体記憶媒体２０５からの読み出し処理が大幅に削減できる。このため、最後の追記途中だったブロックのみ、先頭から順番にページを読み込むだけで良くなる。結果として、管理情報復元処理の処理時間が短縮できるという効果を奏する。
【０３０８】
次に、ログの種類がフリーブロック回収情報であった時の復元処理の流れの手順について、図３３を参照して説明する。図３３は、ログの種類がフリーブロック回収情報であった時の復元処理の手順の流れの一例を示すフローチャートである。ステップＳ２３０では、ログ復元部３９４は、ブロック使用情報制御部３２６に、ブロックの使用状態を未使用状態に変更するように依頼する。ブロック使用情報制御部３２６は、ログ復元部３９４からの要求にしたがって、ブロック使用情報記憶部２２８が保存するブロック使用情報を更新する。
【０３０９】
以上の処理により、ログの記録回数を大幅に削減しつつ、管理情報が正しく復元できる。結果として、記憶媒体自体に対するデータの書き込み性能に比して、ホスト装置からの書込要求に対する書き込み性能が向上でき、また、データ記憶装置の設計寿命を長大化できるという効果を奏する。
【０３１０】
第３実施形態におけるブロックの割り当て規則の制約事項をまとめると、以下の２点となる。
【０３１１】
第１の制約は、ホストからの書込追記用のブロックと、コンパクション追記用のブロックの新しいブロックの割り当ては、ホスト書込追記ポインタ及びコンパクション追記ポインタの両書き込みポインタが、当該タームで割り当てられたブロックを使い切った時に同期して行うことである。
【０３１２】
第２の制約は、ブロックの割り当て数は、その時点でのホストからの書き込み量を１としたときに、データ記憶装置内部で処理すべきコンパクションの書き込み量をＮ（Ｎは０以上の整数）であった時に、ホストからの書き込み追記用ブロックには１個の未使用ブロックを割り当て、コンパクション追記用ブロックにはＮ個の未使用ブロックを割り当てることである。
【０３１３】
以下に、上記制約を守らないために、正しく管理情報が復元できない様子の例を、図３４〜図３８を参照し、正引きテーブルの復元に着目して説明する。なお、有効ページフラグや有効ページカウンタの復元についても同様の議論となるので、ここでは説明を省略する。
【０３１４】
それぞれホストからの書込用とコンパクション用にブロックを使用している状況で、図３４に示すようにホスト書込用追記ポインタがブロックの終端まで到達したものとする。ここで、第１の制約を守らずに新しいブロックを取得して、図３５に示すようにホストからの書込アクセスを処理し続けたとする。そして、この間処理していたホストからの書き込みアクセスにアドレスの偏りがあったために、図３５及び図３６に示すように、コンパクション用のブロックＡに記録されていたページ２のデータが無効化され、更にブロックＢがコンパクションの対象となってページ４のデータがコンパクション用のブロックＡにコピーされたとする。図３７は、この時点でのログを示す。
【０３１５】
そして、図３６に示す状況で、データ記憶装置３００の電源が落とされて再投入されたなどの理由により正引きテーブルの内容を復元するとする。この場合、図３７に示すように、「ブロックを準備した」ことを示すログの時刻的順序はブロックＡ、ブロックＢ、ブロックＣ、ブロックＤの順であるので、この順番で各ブロックのページを読み出して図３８に示す正引きテーブルを復元することになる。図３８に示す正引きテーブルでは、ページ４に対する正引きテーブルの情報が、最新ではないブロックＢのページ０を指す結果となってしまっている。
【０３１６】
次に、上記制約を守ることで、正しく管理情報が復元できる様子の例を、図３９〜図４４を参照し、正引きテーブルの復元に着目して説明する。
【０３１７】
それぞれホスト書込用とコンパクション用にブロックを使用している状況で、図３９に示すようにホスト書込用追記ポインタがブロックの終端まで到達したものとする。ここで、第１の制約を守り、図４０に示すようにコンパクション用追記ポインタがブロックの終端に到達するまで新しいブロックの取得を遅延させ、両追記ポインタが書込用に使っていたブロックの終端に到達したときにそれぞれ新しいブロックを取得する。その後、ホストからの書込要求とコンパクションによる書き込みを処理し続け、図４１に示すように、再度ブロックの取得を同期して行う。更に、図４２に示すように、ホスト書込用のブロックＢをコンパクション対象にしてコンパクションを行い、ブロックＢに存在した有効ページがブロックＥにコピーされたとする。図４３は、この時点でのログを示す。
【０３１８】
そして、図４２に示す状況で、データ記憶装置３００の電源が落とされて再投入されたなどの理由により正引きテーブルの内容を復元するとする。図４４は、復元された正引きテーブルを示す。なお、注目すべきＬＢＡ（論理アドレス）は４番目のものであるため、図４２では、ＬＢＡの１１番目から１７番目については省略している。本制約を守ると、追記ポインタが新たなブロックを取得する際に必ずホスト書込用とコンパクション用のブロックを組にして取得するため、正引きテーブルを再構築する場合にもその組単位で復元処理を行う。図４４の状態の場合、ブロックＡとＢの組、ブロックＣとＤの組、ブロックＥとＦの組の３組となる。３組の復元順序は、書込処理に使われた順序であり、まずブロックＡとＢ、次にブロックＣとＤ、最後にブロックＥとＦのページを読み出して正引きテーブルを復元する。各組では、まずコンパクション用ブロックのページを読み出して正引きテーブルを復元し、その後でホストからの書き込み用ブロックのページを読み出して正引きテーブルを復元する。例えば、ブロックＡとＢの組についてはブロックＡのページについて処理してからブロックＢのページについて処理する。
【０３１９】
図４４に示した正引きテーブル復元結果の通り、図３６におけるアクセスパターンのようにアドレスに偏りがあったためにホストから書き込まれたデータがすぐにコンパクションされているにもかかわらず、正引きテーブルの復元結果は整合性を保っていることがわかる。
【０３２０】
１番目の制約は、２種類の性質が異なるデータを書き込むためのブロックの取得を、両書き込みポインタが取得しておいたブロックを使い切ったときに同期して行うことで、各ブロックへの書き込みの履歴を正確な順序で保存及び特定することを可能にする制約である。以上により、１番目の制約を守らないとログからの正引きテーブル復元が正しく行えないことがわかる。
【０３２１】
２番目の制約は、１番目の制約を満たしながら、ホストからの書込要求頻度の変化や未使用ブロック数の変化に動的に追従するための制約である。例えば、システムの使用開始直後のようなコンパクションをする必要がない状況では、コンパクション用追記ポインタに全くブロックを取得させなければよい。一方、システムの未使用ブロックが減少してきたなどの要因によってコンパクションを集中して行う必要がある状況では、コンパクション用追記ポインタに多くのブロックを取得させ、ホストからの書き込みに対してコンパクションを多数行う状況を作り出す。
【０３２２】
このようにすることで、その時点における必要なコンパクションの書き込み量を確保するのが目的であるのと同時に、どちらか片方の追記ポインタが、割り当てられたブロックの終端に到達した場合でも、他方の追記ポインタが割り当てられたブロックの終端に到達するまで、処理が待ち合わせされることをできるだけ避けることができる。
【０３２３】
（第４実施形態）
第４実施形態では、変換テーブルに有効ページフラグを含まない例について説明する。
【０３２４】
ページに書き込んだ逆引き論理アドレスと正引きテーブルとの間では、以下の第１、第２関係が成立することを利用すれば、変換テーブルに有効ページフラグを含まない構成にすることもできる。
【０３２５】
第１関係は、「ページに書き込んだ逆引き論理アドレスで正引きテーブルを参照し、正引きテーブルに記録されている物理アドレスが当該ページを指していた場合、当該ページを書き込んだ後に当該論理アドレスへの書き込みがなされていないことを示しており、当該ページは有効である」というものである。
【０３２６】
第２関係は、「ページに書き込んだ逆引き論理アドレスで正引きテーブルを参照し、正引きテーブルに記録されている物理アドレスが当該ページを指していなかった場合、当該ページを書き込んだ後に当該論理アドレスへの書き込みがなされたことを示しており、当該ページは無効である」というものである。
【０３２７】
以上の関係を利用し、変換テーブルに有効ページフラグを含まない構成にする場合、これまでに説明した有効ページフラグのＯＮ、ＯＦＦを参照する処理は、次の処理に代える。
（１）ページのデータを読み込む。
（２）逆引き論理アドレスで正引きテーブルを参照し、正引きテーブルに記録されている物理アドレスが（１）で読み込んだページを指しているか判定する。
（３）（２）が真ならば、有効ページフラグはＯＮであると判断し、（２）が偽ならば、有効ページフラグはＯＦＦであると判断する。
【０３２８】
以上のように、変換テーブルに有効ページフラグを含まない構成にすることにより、第４実施形態では、管理情報のメモリ使用量が削減できるという副次的な効果を奏する。また、管理情報のメモリ使用量が削減できるということは、スナップショットとして保存すべき容量が減ることを意味する。このため、結果としてスナップショットの保存にかかる処理時間が削減でき、また、半導体記憶媒体への書き込み量が減り、データ記憶装置の設計寿命の長大化が実現できるという副次的な効果を奏する。なお、上述した「ページに書き込んだ逆引き論理アドレス」を、「変換テーブルにおける当該ページに対応する逆引き論理アドレス」と読み替えてもよい。
【０３２９】
（第５実施形態）
第５実施形態では、ブロックの単位で各種処理を行うのではなく、複数のブロックをたばねた論理ブロックと呼ばれる単位で各種処理を行う例について説明する。以下では、論理ブロックと区別するため、ブロックを物理ブロックと呼ぶ。
【０３３０】
論理ブロック単位で処理を行う場合、正引きテーブルは、図４５に示す１段目のＬＢＡテーブルと、図４６に示す２段目の論物変換テーブルとを有する。ＬＢＡテーブルは、論理アドレスをインデックスとし、論理アドレスと、論理ブロックに付与された論理ブロック番号と、チャネル番号と、ページに付与されたページ番号とを、含む。論理ブロック番号は、例えば、その生成順に付与される。チャネル番号は、例えば、図１に示す構成の時はＣＨ０〜ＣＨ５になり、書込対象データが書き込みされたチャネルがいずれのチャネルであるかを示す。論物変換テーブルは、論理ブロックに属する各チャネルの各物理ブロックを示す情報であり、論理ブロック番号をインデックスとし、論理ブロック番号と、論理ブロックに含まれるチャネルごとの各物理ブロックの番号を含む。
【０３３１】
逆引きテーブル、有効ページフラグ、及び有効ページカウンタを、図４７に示す。図４７に示すように、逆引きテーブル、有効ページフラグ、及び有効ページカウンタは、論理ブロック番号をインデックスとし、論理ブロック番号と、有効ページカウンタ、各チャネルの物理ブロックごとの論理アドレス、及び有効ページフラグの集合とを含む情報の集合をエントリとして含む。各チャネルの物理ブロックごとの論理アドレス、及び有効ページフラグの集合は、チャネル番号をインデックスとし、チャネル番号、論理アドレス、及び有効ページフラグを当該物理ブロックの中に配置されるページの順番に並べることで、どのページの論理アドレス情報又は有効ページフラグ情報であるかを特定できる。また、同一論理ブロックの有効ページカウンタの値と、有効ページフラグの真値の総数は一致する。なお、このインデックスとなる論理ブロック番号と、正引きテーブルのエントリである論理ブロック番号は同一の論理ブロックには同一の番号を与えるものとする。
【０３３２】
逆引きテーブルは、図９に示した逆引きテーブルと同様に、データ記憶装置が記憶するデータの論理アドレスと、半導体記憶媒体において当該データが実際に記憶されている物理的な記憶位置を示す物理アドレスとの対応関係を示すテーブルであり、正引きテーブルとは逆に、物理アドレスから論理アドレスに変換する際に用いられるテーブルである。有効ページフラグとは、物理ブロックに含まれるページのうち、有効なデータが書き込まれているページである有効ページがどのページであるかを真偽値で示すものである。有効ページカウンタとは、論理ブロックに含まれるページのうち、有効ページがいくつあるかを示すものである。
【０３３３】
ここで、論理ブロックを構成する物理ブロックのページの書き込み順、つまり、追記ポインタの進め方を、例えば、図４８に示すように定めておけば、これまで説明した（物理）ブロック単位での各種処理を、論理ブロック単位の処理で代えることができる。これにより、例えば、複数の半導体記憶媒体をたばねてアクセスすることで、アクセス速度の高速化が図れる。また、第３実施形態または第４実施形態と組み合わせて、逆引きテーブルまたは有効ページフラグを持たない構成をとってもよい。
【０３３４】
なお、本発明は、上記実施の形態そのままに限定されるものではなく、実施段階ではその要旨を逸脱しない範囲で構成要素を変形して具体化することができる。また、上記実施の形態に開示されている複数の構成要素の適宜な組み合わせにより、種々の発明を形成することができる。例えば、実施の形態に示される全構成要素からいくつかの構成要素を削除してもよい。さらに、異なる実施の形態にわたる構成要素を適宜組み合わせても良い。
【符号の説明】
【０３３５】
５１  プロセッサ
５２  ＢｏｏｔＲＯＭ
５３  メモリインタフェース
５４  ＤＲＡＭ
５５  ＳＡＴＡ／ＳＡＳインタフェース
５６  バス
５７Ａ〜５７Ｆ  ＮＡＮＤインタフェース
５８Ａ〜５８Ｆ  ＮＡＮＤ
１００、２００、３００  データ記憶装置
１０５  データ記憶部
１０６  データアクセス部
１１０  受付部
１２０  管理情報記憶部
１２１  管理情報アクセス部
１３０  第１記憶部
１３１  第１アクセス部
１４０  第２記憶部
１４１  第２アクセス部
１５０、２５０、３５０  書込指示部
１６０、２６０  読込指示部
１７０、２７０、３７０  コンパクション部
２０３  半導体記憶媒体制御部
２０５  半導体記憶媒体
２０７  バッファ制御部
２０９  バッファ記憶部
２１０  ホストインタフェース部
２１５  命令制御部
２２１  変換テーブル制御部
２２３、３２３  変換テーブル記憶部
２２６、３２６  ブロック使用情報制御部
２２８  ブロック使用情報記憶部
２３０  ホスト書込追記ポインタ記憶部
２３２  ホスト書込追記ポインタ制御部
２４０  コンパクション追記ポインタ記憶部
２４２  コンパクション追記ポインタ制御部
２８２  スナップショット保存部
２８４  ログ保存部
２９０  管理情報復元部
２９２  スナップショット復元部
２９４、３９４  ログ復元部
【図１】
2011197945.tif 000003
【図２】
2011197945.tif 000004
【図３】
2011197945.tif 000005
【図４】
2011197945.tif 000006
【図５】
2011197945.tif 000007
【図６】
2011197945.tif 000008
【図７】
2011197945.tif 000009
【図８】
2011197945.tif 000010
【図９】
2011197945.tif 000011
【図１０】
2011197945.tif 000012
【図１１】
2011197945.tif 000013
【図１２】
2011197945.tif 000014
【図１３】
2011197945.tif 000015
【図１４】
2011197945.tif 000016
【図１５】
2011197945.tif 000017
【図１６】
2011197945.tif 000018
【図１７】
2011197945.tif 000019
【図１８】
2011197945.tif 000020
【図１９】
2011197945.tif 000021
【図２０】
2011197945.tif 000022
【図２１】
2011197945.tif 000023
【図２２】
2011197945.tif 000024
【図２３】
2011197945.tif 000025
【図２４】
2011197945.tif 000026
【図２５】
2011197945.tif 000027
【図２６】
2011197945.tif 000028
【図２７】
2011197945.tif 000029
【図２８】
2011197945.tif 000030
【図２９】
2011197945.tif 000031
【図３０】
2011197945.tif 000032
【図３１】
2011197945.tif 000033
【図３２】
2011197945.tif 000034
【図３３】
2011197945.tif 000035
【図３４】
2011197945.tif 000036
【図３５】
2011197945.tif 000037
【図３６】
2011197945.tif 000038
【図３７】
2011197945.tif 000039
【図３８】
2011197945.tif 000040
【図３９】
2011197945.tif 000041
【図４０】
2011197945.tif 000042
【図４１】
2011197945.tif 000043
【図４２】
2011197945.tif 000044
【図４３】
2011197945.tif 000045
【図４４】
2011197945.tif 000046
【図４５】
2011197945.tif 000047
【図４６】
2011197945.tif 000048
【図４７】
2011197945.tif 000049
【図４８】
2011197945.tif 000050