(57)【要約】【課題】管理情報の保存中における性能の低下を防止できるコントローラ、データ記憶装置、及び復元方法を提供する。【解決手段】揮発性の管理メモリ３０は、フラッシュメモリ１１の使用状態を管理する管理情報を記憶する。管理情報保存部５３は、管理情報を複数の分割片に分割し、各分割片をフラッシュメモリに個別に保存する。主制御部３２は、複数の分割片の保存中にホスト装置２から命令を受け付け、各分割片が保存される合間に命令に従ってフラッシュメモリに対するデータ処理を行い、管理情報をデータ処理の内容に応じて更新し、管理情報の更新内容を示すログを作成する。ログ保存部５１はログをフラッシュメモリに保存する。復元部５４は、フラッシュメモリに保存された複数の分割片を管理情報として管理メモリに読み出し、フラッシュメモリに保存されたログに従って管理情報を更新し、更新後の管理情報を復元する。【選択図】図１
2011059866.tif 000002
【特許請求の範囲】
【請求項１】
記憶媒体の使用状態を管理する管理情報を記憶する揮発性の管理メモリと、
前記管理情報を複数の分割片に分割し、各分割片を前記記憶媒体に個別に保存する管理情報保存部と、
前記複数の分割片の保存中にホスト装置から命令を受け付け、各分割片が保存される合間に前記命令に従って前記記憶媒体に対するデータ処理を行い、前記複数の分割片に分割された前記管理情報を前記データ処理の内容に応じて更新するとともに、前記管理情報の更新内容を示すログを作成する主制御部と、
前記ログを前記記憶媒体に保存するログ保存部と、
前記記憶媒体に保存された前記複数の分割片を前記管理情報として前記管理メモリに読み出し、前記記憶媒体に保存された前記ログに従って前記管理情報を更新し、更新後の管理情報を復元する復元部と、
を備えることを特徴とするコントローラ。
【請求項２】
前記ログ保存部は、前記複数の分割片の保存前に前記管理情報の保存を開始することを示す保存開始ログを作成して前記記憶媒体のログ領域に保存するとともに、前記保存開始ログの保存後に前記主制御部により作成された複数のログを時系列の順に前記ログ領域に保存し、
前記復元部は、前記保存開始ログ以降に前記ログ領域に保存された前記複数のログそれぞれが示す更新内容を時系列の順に前記管理情報に反映して、更新後の管理情報を復元することを特徴とする請求項１に記載のコントローラ。
【請求項３】
前期記憶媒体は、フラッシュメモリであり、
前記ログ領域には、最小書き込み単位であるページから構成されるブロックが複数割り当てられ、
前記ログ保存部は、新たなブロックにログを保存する場合、前回ログを保存した前ブロックのブロック番号を前記新たなブロックに保存することを特徴とする請求項２に記載のコントローラ。
【請求項４】
前記ログ保存部は、前記新たなブロックの先頭に前記前ブロックのブロック番号を保存し、前記新たなブロックにログを保存する前に前記新たなブロックの次に使用する次ブロックの消去処理を行い、消去処理に成功した場合に前記新たなブロックにログを保存するとともに、前記新たなブロックの末尾に前記次ブロックのブロック番号を保存することを特徴とする請求項３に記載のコントローラ。
【請求項５】
前記ログ保存部は、最新のログを保存したブロックを識別するブロック識別情報を、前記フラッシュメモリに保存することを特徴とする請求項３又は４に記載のコントローラ。
【請求項６】
前記復元部は、前記ブロック識別情報を参照して前記最新のログを保存した前記ブロックを探索し、前記ブロックを含む前記ログ領域に割り当てられた各ブロックに保存された前記ブロック番号を参照して前記各ブロックに保存されているログの時系列を遡り、前記保存開始ログを探索することを特徴とする請求項５に記載のコントローラ。
【請求項７】
前記管理情報保存部は、前記複数の分割片を前記フラッシュメモリの管理情報保存領域に保存し、
前記ログ保存部は、前記複数の分割片の保存後に、前記管理情報の保存を終了したことを示すとともに前記管理情報保存領域上における前記複数の分割片それぞれの位置を特定する保存終了ログを作成して、前記フラッシュメモリのログ領域に保存し、
前記復元部は、前記保存終了ログを参照して、前記管理情報保存領域から前記複数の分割片を前記管理情報として前記管理メモリに読み出すことを特徴とする請求項５に記載のコントローラ。
【請求項８】
前記復元部は、前記ブロック識別情報を参照して前記最新のログを保存した前記ブロックを探索し、前記ブロックを含む前記ログ領域に割り当てられた各ブロックに保存された前記ブロック番号を参照して、前記各ブロックに保存されているログの時系列を遡り、前記保存終了ログを探索することを特徴とする請求項７に記載のコントローラ。
【請求項９】
前記ログ保存部は、前記保存終了ログが保存されたブロックを含む前記ログ領域に割り当てられた各ブロックに保存された前記ブロック番号を参照して、前記各ブロックに保存されているログの時系列を遡り、前回の保存終了ログを探索し、
前記管理情報保存部は、前記前回の保存終了ログを参照して、前記管理情報保存領域から前回の管理情報の各分割片を開放することを特徴とする請求項７に記載のコントローラ。
【請求項１０】
前記ログ保存部は、前記保存終了ログが保存されたブロックを含む前記ログ領域に割り当てられた各ブロックに保存された前記ブロック番号を参照して、前記各ブロックに保存されているログの時系列を遡り、前回の保存開始ログと前記保存開始ログとを探索し、前記前回の保存開始ログから前記保存開始ログまでのログを前記ログ保存領域から開放することを特徴とする請求項９に記載のコントローラ。
【請求項１１】
前記管理情報保存領域には、前記ブロックが複数割り当てられ、
前記管理情報保存部は、前記分割片のサイズを前記ブロックのサイズの整数倍に設定して、分割することを特徴とする請求項７〜１０のいずれか１つに記載のコントローラ。
【請求項１２】
請求項１〜１１のいずれか１つに記載のコントローラと、
前記コントローラによりデータ処理が行われる記憶媒体と、
を備えることを特徴とするデータ記憶装置。
【発明の詳細な説明】
【技術分野】
【０００１】
本発明は、コントローラ、及びデータ記憶装置に関する。
【背景技術】
【０００２】
従来から、ＨＤＤ（Hard Disk Drive）やＳＳＤ（Solid State Drive）のようなデータ記憶装置では、記憶媒体の論理番地と物理番地とを対応付けた変換テーブルなど種々の管理情報を用いて記憶媒体の使用状態を管理している。特に近年では、データ記憶装置の大容量化に伴い、管理情報のサイズが増大する傾向にある。
【０００３】
例えば特許文献１には、不揮発性メモリ上に記憶した変換テーブルの一部を必要に応じて揮発性メモリ上に読み出して使用する技術が開示されているが、特許文献１に開示されて技術では、不揮発性メモリから揮発性メモリに変換テーブルの一部を読み出す処理がオーバーヘッドとなってしまう。
【０００４】
このため、管理情報のサイズが増大しても、管理情報の全てを揮発性メモリ上に記憶しておく必要がある。
【先行技術文献】
【特許文献】
【０００５】
【特許文献１】特開２００１−１４２７７４号公報
【発明の概要】
【発明が解決しようとする課題】
【０００６】
ところで、上記のようなデータ記憶装置では、管理情報を消失するとデータ記憶装置として機能できなくなるため、任意のタイミングで管理情報を記憶媒体に保存する必要がある。しかしながら、管理情報のサイズが増大すると、管理情報の保存に従来よりも多くの時間が必要となり、管理情報の保存中にホスト装置からの命令を全て遮断してしまうと、著しい性能の低下を招いてしまう。
【０００７】
本発明は、上記事情に鑑みてなされたものであり、管理情報の保存中における性能の低下を防止できるコントローラ、及びデータ記憶装置を提供することを目的とする。
【課題を解決するための手段】
【０００８】
上述した課題を解決し、目的を達成するために、本発明の一態様にかかるコントローラは、記憶媒体の使用状態を管理する管理情報を記憶する揮発性の管理メモリと、前記管理情報を複数の分割片に分割し、各分割片を前記記憶媒体に個別に保存する管理情報保存部と、前記複数の分割片の保存中にホスト装置から命令を受け付け、各分割片が保存される合間に前記命令に従って前記記憶媒体に対するデータ処理を行い、前記複数の分割片に分割された前記管理情報を前記データ処理の内容に応じて更新するとともに、前記管理情報の更新内容を示すログを作成する主制御部と、前記ログを前記記憶媒体に保存するログ保存部と、前記記憶媒体に保存された前記複数の分割片を前記管理情報として前記管理メモリに読み出し、前記記憶媒体に保存された前記ログに従って前記管理情報を更新し、更新後の管理情報を復元する復元部と、を備えることを特徴とする。
【０００９】
また、本発明の別の態様にかかるデータ記憶装置は、上記コントローラと、前記コントローラによりデータ処理が行われる記憶媒体と、を備えることを特徴とする。
【発明の効果】
【００１０】
本発明によれば、管理情報の保存中における性能の低下を防止できるという効果を奏する。
【図面の簡単な説明】
【００１１】
【図１】図１は、本実施形態のデータ記憶装置のブロック図。
【図２】図２は、本実施形態の管理メモリに記憶されるデータの構成図。
【図３】図３は、変換テーブルを示す図。
【図４】図４は、バッドブロックリストを示す図。
【図５】図５は、書き込みログを示す図。
【図６】図６は、バッドブロックログを示す図。
【図７】図７は、本実施形態のログ保存動作を示すフローチャート。
【図８】図８は、本実施形態のログ保存処理を示すフローチャート。
【図９】図９は、本実施形態の書込バッファの状態を示す模式図。
【図１０】図１０は、本実施形態のログ領域の状態を示す模式図。
【図１１】図１１は、本実施形態の書込バッファの状態を示す模式図。
【図１２】図１２は、本実施形態のログ領域の状態を示す模式図。
【図１３】図１３は、本実施形態の書込バッファの状態を示す模式図。
【図１４】図１４は、本実施形態の管理情報保存処理を示すフローチャート。
【図１５】図１５は、保存終了ログを示す図。
【図１６】図１６は、本実施形態の開放処理を示すフローチャート。
【図１７】図１７は、本実施形態のログ領域の状態を示す模式図。
【図１８】図１８は、本実施形態の管理情報領域の状態を示す模式図。
【図１９】図１９は、本実施形態の書込バッファの状態を示す模式図。
【図２０】図２０は、本実施形態の管理情報保存処理の時系列を示す図。
【図２１】図２１は、本実施形態のログ領域の状態を示す模式図。
【図２２】図２２は、本実施形態の管理情報領域の状態を示す模式図。
【図２３】図２３は、管理情報Ａの保存終了ログを示す図。
【図２４】図２４は、本実施形態の管理情報領域の状態を示す模式図。
【図２５】図２５は、本実施形態のログ領域の状態を示す模式図。
【図２６】図２６は、本実施形態の管理情報復元処理を示すフローチャート。
【図２７】図２７は、本実施形態のログ領域の状態を示す模式図。
【図２８】図２８は、本実施形態の管理情報領域の状態を示す模式図。
【図２９】図２９は、管理情報Ｂの保存終了ログを示す図。
【図３０】図３０は、書き込みログを示す図。
【図３１】図３１は、バッドブロックログを示す図。
【図３２】図３２は、変形例のログ保存処理を示すフローチャート。
【図３３】図３３は、変形例のログ領域の状態を示す模式図。
【発明を実施するための形態】
【００１２】
以下、添付図面を参照しながら、本発明にかかるコントローラ、及びデータ記憶装置の実施の形態を詳細に説明する。なお、本実施形態では、データ記憶装置としてＳＳＤ（Solid State Drive）を例にとり説明するが、これに限定されるものではない。
【００１３】
まず、本実施形態のデータ記憶装置の構成について説明する。
【００１４】
図１は、本実施形態のデータ記憶装置１の構成の一例を示すブロック図である。図１に示すように、データ記憶装置１は、サーバやＰＣ（Personal Computer）などのホスト装置２と外部バス３を介して接続されている。またデータ記憶装置１は、コントローラ１０と複数のフラッシュメモリ１１（記憶媒体の一例）とを備えており、コントローラ１０と複数のフラッシュメモリ１１とは、専用バス１２を介して接続されている。また、ホスト装置２と複数のフラッシュメモリ１１とは、外部バス３、コントローラ１０内部のデータバス１５、及び専用バス１２を介して接続されている。なお、フラッシュメモリ１１は、ＮＡＮＤ型フラッシュメモリである。
【００１５】
コントローラ１０は、ホスト装置２からの各種命令（コマンド）を受け付けて、フラッシュメモリ１１に対する各種データ処理を行う。そしてコントローラ１０は、命令制御部２２と、フラッシュメモリ制御部２４と、転送制御部２６と、転送メモリ２８と、管理メモリ３０と、主制御部３２と、管理部４０とを備える。
【００１６】
命令制御部２２は、ホスト装置２と外部バス３を介して接続されており、ホスト装置２から送られてくる読出命令や書込命令などの各種命令を受け付けるとともに、その応答をホスト装置２に返却する。
【００１７】
フラッシュメモリ制御部２４は、複数のフラッシュメモリ１１と専用バス１２を介して接続されており、命令制御部２２により受け付けられた各種命令や後述の管理部４０からの命令に応じてデータの読み出しや書き込みなどのデータ処理をフラッシュメモリ１１に対して行う。
【００１８】
転送制御部２６は、データバス１５に接続されており、ホスト装置２及びフラッシュメモリ１１間でのデータ転送を行う。具体的には、転送制御部２６は、命令制御部２２又はフラッシュメモリ制御部２４からの指示を受け、データバス１５に接続された転送メモリ２８に蓄えられているデータを、ホスト装置２又はフラッシュメモリ１１に転送する。なお、転送制御部２６は、例えば、ＤＭＡＣ（Direct Memory Access Controller）などにより実現できる。
【００１９】
転送メモリ２８は、転送制御部２６によるデータ転送が行われるまで、転送用のデータを一時的に蓄える。具体的には、転送メモリ２８は、ホスト装置２から書き込まれるデータやフラッシュメモリ１１から読み出されるデータを一時的に蓄える。なお、転送メモリ２８は、例えば、ＤＲＡＭ（Dynamic Random Access Memory）などの揮発性メモリにより実現できる。
【００２０】
なお、本実施形態では、転送メモリ２８が、命令制御部２２用のデータ及びフラッシュメモリ制御部２４用のデータの両データを蓄えているが、命令制御部２２用のデータを蓄えるデータ転送用メモリと、フラッシュメモリ制御部２４用のデータを蓄えるデータ転送用メモリとを別々に備えるようにしてもよい。
【００２１】
管理メモリ３０は、フラッシュメモリ１１の使用状態を管理する管理情報を記憶するものであり、例えば、ＤＲＡＭなどの揮発性メモリにより実現できる。
【００２２】
図２は、本実施形態の管理メモリ３０に記憶されるデータの構成例を示す図である。図２に示すように、管理メモリ３０には、管理情報として、変換テーブル、アクティブブロックリスト、フリーブロックリスト、バッドブロックリスト、及び統計情報などの情報が記憶されている。なお、情報が記憶されていない領域は未使用領域となっている。
【００２３】
変換テーブルは、フラッシュメモリ１１上の領域の仮想的な位置を示す論理番地と、フラッシュメモリ１１上の領域の物理的な位置を示す物理番地とを対応付けたテーブル（情報）である。アクティブブロックリストは、有効なデータを記憶しているフラッシュメモリ１１のブロックを管理するためのリスト（情報）である。フリーブロックリストは、新たなデータを記憶可能なフラッシュメモリ１１のブロックを管理するためのリスト（情報）である。バッドブロックリストは、使用不可能になったフラッシュメモリ１１のブロックを管理するためのリスト（情報）である。統計情報は、ホスト装置２から送られてきた命令などの統計を示す情報である。
【００２４】
本実施形態では、管理情報を構成する各情報のサイズは増減するため、事前に各情報の最大サイズを見積っておき、情報毎に最大サイズ分の領域を管理メモリ３０上に確保している。なお、管理情報のデータ形式はどのようなものでも構わない。
【００２５】
図３は、変換テーブルの一例を示す図である。図３に示す例では、物理番地は、フラッシュメモリ１１のチップ番号、ブロック番号、及びページ番号から構成されている。なお、物理番地にまだデータが書き込まれていない場合、物理番地には、未書き込み状態であることを示すデータが格納される。
【００２６】
図４は、バッドブロックリストの一例を示す図である。図４に示す例では、チップ番号及びブロック番号を用いて、使用不可能になったフラッシュメモリ１１のブロックを特定している。なお、アクティブブロックリスト及びフリーブロックリストの説明は省略するが、バッドブロックリストと同様に、チップ番号及びブロック番号を用いて、対象となるブロックを特定すればよい。
【００２７】
図１に戻り、主制御部３２は、命令制御部２２、フラッシュメモリ制御部２４、及び転送制御部２６の動作を制御するものであり、これらの制御部の動作を制御することにより、ホスト装置２及びフラッシュメモリ１１間でのデータ転送を制御する。
【００２８】
また、主制御部３２は、管理メモリ３０に記憶されている管理情報を用いて、フラッシュメモリ１１に記憶されているデータを管理する。具体的には、ホスト装置２から送られてくる命令の内容に応じて、管理情報を参照したり更新したりして、複数のフラッシュメモリ１１に記憶されているデータを管理する。
【００２９】
また、主制御部３２は、後述の管理部４０に管理情報や管理情報の更新内容を示すログのフラッシュメモリ１１への保存を指示したり、フラッシュメモリ１１に保存された管理情報やログから管理情報を復元することを指示したりする。
【００３０】
管理部４０は、管理メモリ３０に記憶されている管理情報をフラッシュメモリ１１へ保存したり、フラッシュメモリ１１から管理メモリ３０に管理情報を復元したりするものである。管理部４０は、内部バスを介して管理メモリ３０やフラッシュメモリ制御部２４と接続され、また、データバス１５を介してフラッシュメモリ１１と接続されている。そして管理部４０は、書込バッファ４２と、読出バッファ４４と、第１タイマ部４６と、第２タイマ部４８と、保存部５０と、復元部５４を備える。
【００３１】
書込バッファ４２は、データバス１５を介してフラッシュメモリ１１と接続されており、フラッシュメモリ１１へ保存する前にログを一時的に蓄える。書込バッファ４２は、例えば、ＤＲＡＭなどの揮発性メモリにより実現できる。
【００３２】
読出バッファ４４は、データバス１５を介してフラッシュメモリ１１と接続されており、フラッシュメモリ１１から読み出したログを一時的に蓄える、読出バッファ４４は、例えば、ＤＲＡＭなどの揮発性メモリにより実現できる。
【００３３】
第１タイマ部４６は、書込バッファ４２に記憶されている全てのログをフラッシュメモリ１１に保存するログ保存処理用のタイマであり、後述の保存部５０からの指示により時間を設定して動作を開始する。そして、第１タイマ部４６は、保存部５０により動作が停止されずに設定された時間が経過すると、設定された時間が経過したことを保存部５０に通知することで、ログ保存処理の実行を指示する。
【００３４】
第２タイマ部４８は、管理メモリ３０に記憶されている管理情報をフラッシュメモリ１１に保存する管理情報保存処理用のタイマであり、後述の保存部５０からの指示により時間を設定して動作を開始する。そして、第２タイマ部４８は、保存部５０により動作が停止されずに設定された時間が経過すると、設定された時間が経過したことを保存部５０に通知することで、管理情報保存処理の実行を指示する。
【００３５】
なお、第１タイマ部４６及び第２タイマ部４８の使い分けの方法は、これに限定されるものではない。また、第１タイマ部４６及び第２タイマ部４８を省略するようにしてもよい。
【００３６】
保存部５０は、主制御部３２と内部バスを介して接続されており、主制御部３２からログ保存要求や管理情報保存要求を受け付け、ログや管理情報をフラッシュメモリ１１へ保存するための命令（コマンド）をフラッシュメモリ制御部２４に送信する。これにより、ログや管理情報がフラッシュメモリ１１へ保存される。そして、保存部５０は、ログ保存部５１と、管理情報保存部５３とを備える。
【００３７】
ログ保存部５１は、主制御部３２からログ保存要求を受け付けると、書込バッファ４２にログを書き込む。このため、ログ保存部５１は、書込バッファ４２の全体サイズ、使用サイズ、及び空きサイズを管理しており、また、次にログを書き込む書込バッファ４２上の位置をポインタ（以下、「書込バッファ４２用のポインタ」と称する）で管理している。
【００３８】
また、ログ保存部５１は、書込バッファ４２に書き込まれたログが直ちにフラッシュメモリ１１へ保存するログである場合や、第１タイマ部４６からログ保存処理の実行が指示されると、書込バッファ４２に書き込まれているログをフラッシュメモリ１１上のログを保存する領域（以下、「ログ領域」と称する）に保存する。
【００３９】
このため、ログ保存部５１は、ログ領域の物理的位置、全体サイズ、使用サイズ、及び空きサイズを管理しており、また、次にログを書き込むログ領域上の位置をポインタ（以下、「ログ領域用のポインタ」と称する）で管理している。具体的には、フラッシュメモリ１１のようなＮＡＮＤ型フラッシュメモリでは、最小書き込み単位はページであり、消去の単位はブロックであるため、ログ保存部５１は、ログ領域に割り当てられたフラッシュメモリ１１のブロックの物理的位置や全体サイズを管理する。また、ログ保存部５１は、ログ領域に割り当てられたフラッシュメモリ１１の書き込み可能な残りブロック数及びページ数からログ領域の空きサイズを管理する。
【００４０】
なお、ログ保存部５１が保存するログには、フラッシュメモリ１１にデータを書き込んだ際に作成される書き込みログや、ブロックがバッドブロック化した際に作成されるバッドブロックログなどがある。
【００４１】
書き込みログは、フラッシュメモリ１１のどの領域にデータを書き込んだかを示すログであり、変換テーブルに対する更新内容を示す。図５は、書き込みログの一例を示す図である。図５に示すように、書き込みログは、書き込みログであることを示すログ種別と、対象ブロックのチップ番号及びブロック番号と、対象ブロックの各ページに書いたデータの論理番地とを含む。なお、書き込みログは、直ちにフラッシュメモリ１１に保存する必要はないが、なるべく早い段階でフラッシュメモリ１１に保存することが好ましい。
【００４２】
バッドブロックは、ブロックのＥＲＡＳＥの失敗、書き込みの失敗、又は読み出し時の誤り訂正の失敗などが原因で生じるものであり、ＮＡＮＤ型のフラッシュメモリの場合、バッドブロックの発生はシステムの寿命を想定する上で重要な情報となる。図６は、バッドブロックログの一例を示す図である。バッドブロックログは、バッドブロックログであることを示すログ種別と、対象ブロックのチップ番号及びブロック番号と、バッドブロック化した原因と、その付随情報とを含む。なお、バッドブロックログは、直ちにフラッシュメモリ１１に保存することが好ましい。
【００４３】
管理情報保存部５３は、主制御部３２から管理情報保存要求を受け付けたり、第２タイマ部４８から管理情報保存処理の実行が指示されたりすると、管理メモリ３０に記憶されている管理情報を複数の分割片に分割し、各分割片をフラッシュメモリ１１上の管理情報を保存する領域（以下、「管理情報領域」と称する）に個別に保存する。
【００４４】
このため、管理情報保存部５３は、管理情報領域の物理的位置、全体サイズ、使用サイズ、及び空きサイズを管理しており、また、次に管理情報を書き込む管理情報領域上の位置をポインタ（以下、「管理情報領域用のポインタ」と称する）で管理している。具体的には、管理情報保存部５３は、管理情報領域に割り当てられたフラッシュメモリ１１のブロックの物理的位置や全体サイズを管理する。また、管理情報保存部５３は、管理情報領域に割り当てられたフラッシュメモリ１１の書き込み可能な残りブロック数及びページ数から管理情報領域の空きサイズを管理する。
【００４５】
復元部５４は、主制御部３２と内部バスを介して接続されており、主制御部３２から管理情報復元要求を受け付け、ログや管理情報をフラッシュメモリ１１から読み出すための命令（コマンド）をフラッシュメモリ制御部２４に送信する。そして、復元部５４は、フラッシュメモリ１１に保存された複数の分割片を管理情報として管理メモリ３０に読み出すとともに、フラッシュメモリ１１から読出バッファ４４にログを読み出し、読み出したログに従って管理情報を更新し、更新後の管理情報を復元する。
【００４６】
次に、本実施形態のデータ記憶装置で行われるログ保存動作について説明する。
【００４７】
図７は、本実施形態のデータ記憶装置１で行われるログ保存動作の手順の流れの一例を示すフローチャートである。
【００４８】
まず、主制御部３２により管理情報の更新などが行われると、ログ保存部５１は、主制御部３２からログ保存要求を受け付ける（ステップＳ１００）。なお、ログ保存要求には、少なくとも、管理情報の更新内容を示すログ、ログのサイズ、及びフラッシュメモリ１１に直ちに保存するか否かを判別する判別情報が含まれる。
【００４９】
続いて、第１タイマ部４６は、ログ保存部５１からの指示を受け、ログ保存処理用タイマを停止する（ステップＳ１０２）。これにより、ログ保存動作中に、第１タイマ部４６からログ保存部５１にログ保存処理が指示されることを防止する。
【００５０】
続いて、ログ保存部５１は、ログ保存要求からログを抽出して加工し、加工したログを書込バッファ４２用のポインタが示す位置から書き込む（ステップＳ１０４）。例えば、ログ保存部５１は、ログ保存要求から抽出したログにサイズ調整用のデータを付加することにより、ページと同一サイズとなるログに加工したり、ブロックと同一サイズとなるログに加工したりする。
【００５１】
続いて、ログ保存部５１は、ログ保存要求に含まれる判別情報を用いて、書込バッファ４２に書き込まれたログがフラッシュメモリ１１に直ちに保存するログであるか否かを判別する（ステップＳ１０６）。
【００５２】
書込バッファ４２に書き込まれたログが直ちに保存するログでない場合（ステップＳ１０６でＮｏ）、ログ保存部５１は、書込バッファ４２の空きサイズが第１閾値よりも小さいか否かを判定する（ステップＳ１０８）。第１閾値には、例えば、書込バッファ４２に書き込まれるログの最大サイズを設定できる。これにより、書込バッファ４２にログを書き込む前に空きサイズを確認する必要がなくなる。
【００５３】
書込バッファ４２に書き込まれたログが直ちに保存するログである場合（ステップＳ１０６でＹｅｓ）、又は書込バッファ４２の空きサイズが第１閾値よりも小さい場合（ステップＳ１０８でＹｅｓ）、ログ保存部５１は、書込バッファ４２に書き込まれている全てのログをフラッシュメモリ１１のログ領域に保存するログ保存処理を行う（ステップＳ１１０）。なお、ログ保存処理の詳細については後述する。
【００５４】
続いて、ログ保存部５１は、ログ保存処理が終了すると、書込バッファ４２に書き込まれている全てのログをクリアする（ステップＳ１１２）。なお本実施形態のように、書込バッファ４２をＤＲＡＭなどの揮発性のメモリで実現している場合には、ステップＳ１１２の処理を省略してもよい。
【００５５】
続いて、ログ保存部５１は、書込バッファ４２用のポインタが示す位置を初期化する（ステップＳ１１４）。本実施形態では、書込バッファ４２を先頭から使用しているため、ログ保存部５１は、書込バッファ４２用のポインタが示す位置を書込バッファ４２の先頭位置に戻す。
【００５６】
続いて、ログ保存部５１は、フラッシュメモリ１１のログ領域の空きサイズが第２閾値よりも小さいか否かを判定する（ステップＳ１１６）。本実施形態では、ログ領域に一度に書き込まれるログの最大サイズは、書込バッファ４２のサイズ分のログとなっているため、第２閾値には、例えば、書込バッファ４２のサイズを設定できる。
【００５７】
続いて、ログ領域の空きサイズが第２閾値よりも小さい場合（ステップＳ１１６でＹｅｓ）、ログ保存部５１は、管理情報保存処理を強制的に行う（ステップＳ１１８）。管理情報保存処理の詳細については後述するが、管理情報保存処理により、ログ領域に保存されている不要なログが開放されるため、ログ領域の空きサイズを増やすことができる。一方、ログ領域の空きサイズが第２閾値よりも大きい場合（ステップＳ１１６でＮｏ）、ログ保存部５１は、ステップＳ１１８の管理情報保存処理を行わない。
【００５８】
続いて、第１タイマ部４６は、ログ保存部５１からの指示を受け、ログ保存処理用タイマの時間を再設定して、起動する（ステップＳ１２０）。
【００５９】
なお、ステップＳ１０８において、書込バッファ４２の空きサイズが第１閾値よりも大きい場合（ステップＳ１０８でＮｏ）、ログ保存部５１は、書込バッファ４２用のポインタが示す位置を、書込バッファ４２に書き込んだログのサイズ分進めて、次の書き込み位置に更新する（ステップＳ１２２）。そして、ログ保存部５１は、書込バッファ４２の使用サイズ及び空きサイズの更新などを行い、処理を終了する。
【００６０】
なお、ログ保存処理用タイマに設定された時間が経過して、第１タイマ部４６からログ保存部５１にログ保存処理が指示された場合、ログ保存部５１は、ステップＳ１１０のログ保存処理以降の処理を順次行う。同様に、主制御部３２によりデータ記憶装置１の電源が切れることが検知され、主制御部３２からログ保存部５１にログ保存処理が指示された場合、ログ保存部５１は、ステップＳ１１０のログ保存処理以降の処理を順次行う。
【００６１】
図８は、図７のステップＳ１１０に示すログ保存処理の手順の流れの一例を示すフローチャートである。
【００６２】
まず、ログ保存部５１は、フラッシュメモリ１１へのログの書き込みが初めてか否かを判定する（ステップＳ２００）。例えば、ログ保存部５１は、フラッシュメモリ１１のログ領域用のポインタがログ領域上のいずれかの位置を示していれば初めてのログの書き込みでないと判定し、ログ領域用のポインタがログ領域上の位置を示していなければ初めてのログの書き込みと判定する。
【００６３】
初めてのログの書き込みでない場合（ステップＳ２００でＮｏ）、ログ保存部５１は、フラッシュメモリ１１へ書き込むログの残りサイズが０か否かを判定する（ステップＳ２０２）。
【００６４】
ログの残りサイズが０でない場合（ステップＳ２０２でＮｏ）、ログ保存部５１は、ログの残りサイズが、ログ領域用のポインタが示す位置のブロックの空きサイズよりも小さいか否かを判定する（ステップＳ２０４）。フラッシュメモリ１１のようなＮＡＮＤ型フラッシュメモリでは、新たなブロックにデータを書き込む場合、当該ブロックのＥＲＡＳＥ処理が必要となる。このため本実施形態では、ログの残りサイズが、ログ領域用のポインタが示す位置のブロックの空きサイズよりも小さいか否かを判定することにより、新たなブロックのＥＲＡＳＥ処理が必要か否かを判別している。
【００６５】
ログの残りサイズが、ログ領域用のポインタが示す位置のブロックの空きサイズよりも大きい場合（ステップＳ２０４でＮｏ）、続いてログ保存部５１は、ログ領域用のポインタが示す位置からブロックの空きサイズ分のログを書き込む（ステップＳ２０６）。
【００６６】
続いて、ログ保存部５１は、次に使用するブロックをＥＲＡＳＥする（ステップＳ２０８）。これにより、ＥＲＡＳＥしたブロックへのログの書き込みが可能となる。
【００６７】
続いて、ログ保存部５１は、ＥＲＡＳＥしたブロックの先頭位置に、前ブロックのブロック番号、即ち、ステップＳ２０６でログを書き込んだブロックのブロック番号を書き込む（ステップＳ２１０）。なお、このブロック番号は、管理情報の復元時に使用される。
【００６８】
続いて、ログ保存部５１は、ログ領域用のポインタが示す位置を、次の書き込み位置に更新し（ステップＳ２１２）、ステップＳ２０２に戻る。通常、ブロック番号のサイズはページのサイズよりも小さくなるため、ログ保存部５１は、例えば、ログ領域用のポインタが示す位置を、ブロック番号を書き込んだページの次のページを示す位置に更新する。
【００６９】
なお、ステップＳ２００において、初めてのログの書き込みである場合（ステップＳ２００でＹｅｓ）、ログ保存部５１は、ステップＳ２０８に進み、次に使用するブロック（最初に使用するブロック）をＥＲＡＳＥする。この場合、ステップＳ２１０では、ログ保存部５１は、ＥＲＡＳＥしたブロックの先頭位置に、有効でないブロックのブロック番号を書き込む。これにより、最初のログが保存されているブロックを判別することができる。なお、最初のログが保存されているブロックを判別することができれば、ＥＲＡＳＥしたブロックの先頭位置に書き込む情報はどのような情報であってもよい。
【００７０】
また、ステップＳ２０２において、ログの残りサイズが０の場合（ステップＳ２０２でＹｅｓ）、フラッシュメモリ１１へのログの書き込みが完了しているので、ログ保存部５１は、最新のログを保存したブロックを識別するブロック識別情報をフラッシュメモリ１１に保存し（ステップＳ２１８）、ログ保存処理を終了する。
【００７１】
また、ステップＳ２０４において、ログの残りサイズが、ログ領域用のポインタが示す位置のブロックの空きサイズよりも小さい場合（ステップＳ２０４でＹｅｓ）、ログ保存部５１は、ログ領域用のポインタが示す位置からログを書き込む（ステップＳ２１４）。そして、ログ保存部５１は、ログ領域用のポインタが示す位置を、ログ領域に書き込んだログのサイズ分進めて、次の書き込み位置に更新し（ステップＳ２１６）、最新のログを保存したブロックを識別するブロック識別情報をフラッシュメモリ１１に保存し（ステップＳ２１８）、ログ保存処理を終了する。
【００７２】
このように本実施形態では、フラッシュメモリ１１のログ領域へログを保存する際に、ログを書き込んだブロックに次に使用するブロックのブロック番号を書き込むのではなく、次に使用するＥＲＡＳＥに成功したブロックに前回ログを書き込んだブロックのブロック番号を書き込む。これにより、次に使用するブロックのＥＲＡＳＥに失敗した場合の対処が容易になる。
【００７３】
フラッシュメモリ１１のようなＮＡＮＤ型フラッシュメモリでは、通常、ＥＲＡＳＥに失敗したブロックは、バッドブロックに設定される。このため、ＥＲＡＳＥ処理に失敗した場合には、別のブロックをＥＲＡＳＥして使用する。
【００７４】
しかしながら、次に使用するブロックをＥＲＡＳＥする前に、ログを書き込んだブロックに次に使用するブロックのブロック番号を書き込んでしまうと、ＥＲＡＳＥに失敗した場合、ログを書き込んだブロックにはＥＲＡＳＥに失敗したブロックのブロック番号が登録されてしまうことになる。
【００７５】
ＮＡＮＤ型フラッシュメモリでは、既に書き込まれたデータを書き換えるためには、当該データを書き込んだブロックのＥＲＡＳＥ処理が必要となるため、次に使用するブロックのブロック番号のみを書き換えることは容易ではない。
【００７６】
これに対し、本実施形態では、次に使用するブロックのＥＲＡＳＥに失敗した場合であても、別のブロックをＥＲＡＳＥして前回ログを書き込んだブロックのブロック番号を書き込めばよいため、上記のような問題は生じず、ＥＲＡＳＥに失敗した場合であっても容易に対処できる。
【００７７】
また、ログを書き込んだブロックに次に使用するブロックのブロック番号を書き込む場合、通常、ログを書き込んだブロックの末尾に次に使用するブロックのブロック番号を書き込む。この際、ブロック番号の書き込みに失敗してしまうと、ログを書き込んだブロックには書き込み可能な領域は残っていないため、ログを書き込んだブロックに次に使用するブロックのブロック番号を書き込むことができない。この場合、ログを書き込んだブロックに書き込み済みのログとともに次に使用するブロックのブロック番号を、新たなブロックに書き込まなければならない。更に、ログを書き込んだブロックのブロック番号が書き込まれているブロックでは、このブロック番号を新たなブロックのブロック番号に書き換える必要があるが、上述したように容易ではない。
【００７８】
これに対し、本実施形態では、ＥＲＡＳＥに成功したブロックの先頭に前回ログを書き込んだブロックのブロック番号を書き込むため、ブロック番号の書き込みに失敗した場合であっても、ＥＲＡＳＥに成功した別のブロックの先頭に前回ログを書き込んだブロックのブロック番号を書き込めば足りる。特に、ＥＲＡＳＥに成功した別のブロックの先頭にブロック番号を書き込むだけなので、エラーからの復帰にかかる時間を抑制できる。
【００７９】
次に、本実施形態のデータ記憶装置で行われるログ保存動作の具体例について説明する。
【００８０】
図９は、書込バッファ４２の状態の一例を示す模式図である。図９に示す例では、書込バッファ４２には、先頭位置から順にログ９とログ１０が書き込まれている。なお、ログ９及びログ１０は、フラッシュメモリ１１に直ちに保存する必要のないログである。また、書込バッファ４２用のポインタは、次の書き込み位置を示している。
【００８１】
図１０は、フラッシュメモリ１１のログ領域の状態の一例を示す模式図である。図１０に示す例では、ブロック１にログ１〜ログ３が書き込まれ、ブロック２にログ４〜ログ７が書き込まれ、ブロック３にログ８が書き込まれている。なお、ブロック４はまだ使用されていない。また、ブロック１、ブロック２、ブロック３には、それぞれブロックＸＸ、ブロック１、ブロック２が前ブロックのブロック番号として書き込まれている。なお、ブロックＸＸは、有効でないブロックのブロック番号であり、これにより、ブロック１に保存されたログ１が最初のログであることを判別できる。また、ログ領域用のポインタは、次の書き込み位置を示している。
【００８２】
以下では、図９及び図１０に示す状態において、主制御部３２からログ保存要求が送信された場合のログ保存動作について、図７及び図８のフローチャートを参照しながら説明する。
【００８３】
まず、ログ保存部５１は、主制御部３２からログ保存要求を受け付け、第１タイマ部４６は、ログ保存処理用タイマを停止する（図７のステップＳ１００、Ｓ１０２）。ここでは、ログ保存要求に含まれる判別情報は、フラッシュメモリ１１に直ちに保存することを示しているものとする。
【００８４】
続いて、ログ保存部５１は、ログ保存要求からログを抽出して加工し、加工したログ１１を図９に示す書込バッファ４２用のポインタが示す位置から書き込む（図７のステップＳ１０４）。ログ１１書き込み後の書込バッファ４２の状態は、図１１に示す通りである。
【００８５】
続いて、ログ保存部５１は、書込バッファ４２に書き込まれたログ１１はフラッシュメモリ１１に直ちに保存するログであると判定し、書込バッファ４２に書き込まれているログ９〜ログ１１をフラッシュメモリ１１のログ領域に保存するログ保存処理を行う（図７のステップＳ１０６でＹｅｓ、ステップＳ１１０）。
【００８６】
続いて、ログ保存部５１は、図１０に示すように、フラッシュメモリ１１のログ領域用のポインタがログ領域上の位置を示しているため、初めてのログの書き込みでないと判定する（図８のステップＳ２００でＮｏ）。
【００８７】
続いて、ログ保存部５１は、図１０に示すように、ログ９〜ログ１１はフラッシュメモリ１１のログ領域にまだ書き込まれていないため、ログの残りサイズが０でないと判定する（図８のステップＳ２０２でＮｏ）。
【００８８】
続いて、ログ保存部５１は、ログ９〜ログ１１の合計サイズが、ログ領域用のポインタが示す位置のブロック３（図１０参照）の空きサイズよりも小さいか否かを判定する（図８のステップＳ２０４）。ここでは、ログ９〜ログ１１の合計サイズが、図１０に示すブロック３の空きサイズよりも大きいものとし、ログ保存部５１は、ログ９〜ログ１１のサイズが、ログ領域用のポインタが示す位置のブロック３の空きサイズよりも大きいと判定するものとする（図８のステップＳ２０４でＮｏ）。
【００８９】
続いて、ログ保存部５１は、図１０に示すログ領域用のポインタが示す位置からブロック３の空きサイズ分のログを書き込む（図８のステップＳ２０６）。ここでは、ログ保存部５１は、ログ９とログ１０の一部とを書き込むものとする。
【００９０】
続いて、ログ保存部５１は、図１０に示すブロック４を次に使用するブロックに決定してＥＲＡＳＥし、ブロック４の先頭位置にブロック３のブロック番号を書き込む（図８のステップＳ２０８、Ｓ２１０）。
【００９１】
続いて、ログ保存部５１は、ログ領域用のポインタが示す位置を、ブロック３のブロック番号を書き込んだページの次のページを示す位置に更新して（図８のステップＳ２１２）、図８のステップＳ２０２に戻る。
【００９２】
続いて、ログ保存部５１は、フラッシュメモリ１１のログ領域にログ１０の残りとログ１１がまだ書き込まれていないため、ログの残りサイズが０でないと判定する（図８のステップＳ２０２でＮｏ）。
【００９３】
続いて、ログ保存部５１は、ログ１０の残りとログ１１の合計サイズが、ログ領域用のポインタが示す位置のブロック４の空きサイズよりも小さいか否かを判定する（図８のステップＳ２０４）。ここでは、ログ１０の残りとログ１１の合計サイズが、ブロック４の空きサイズよりも小さいものとし、ログ保存部５１は、ログ１０の残りとログ１１の合計サイズが、ログ領域用のポインタが示す位置のブロック４の空きサイズよりも小さいと判定するものとする（図８のステップＳ２０４でＹｅｓ）。
【００９４】
続いて、ログ保存部５１は、ログ領域用のポインタが示す位置からログ１０の残りとログ１１を書き込み、ログ領域用のポインタが示す位置をログ１０の残りとログ１１の合計サイズ分進めて、次の書き込み位置に更新し（図８のステップＳ２１４、Ｓ２１６）、ログ保存処理を終了する。図１２は、ログ保存処理終了後のログ領域の状態の一例を示す模式図である。
【００９５】
続いて、ログ保存部５１は、ログ保存処理が終了すると、書込バッファ４２に書き込まれているログ９〜ログ１１をクリアし、書込バッファ４２用のポインタが示す位置を書込バッファ４２の先頭位置に戻す（図７のステップＳ１１２、Ｓ１１４）。
【００９６】
図１３は、初期化後の書込バッファ４２の状態の一例を示す模式図である。点線で示されたログ９〜ログ１１はクリアされていることを示す。また、書込バッファ４２用のポインタは、次の書き込み位置として、書込バッファ４２の先頭位置を示している。
【００９７】
続いて、ログ保存部５１は、フラッシュメモリ１１のログ領域の空きサイズが第２閾値よりも小さいか否かを判定する（ステップＳ１１６）。ここでは、フラッシュメモリ１１のログ領域の空きサイズが、第２閾値、即ち書込バッファ４２のサイズよりも大きいものとし、ログ保存部５１は、フラッシュメモリ１１のログ領域の空きサイズが第２閾値よりも大きいと判定するものとする（図７のステップＳ１１６でＮｏ）。
【００９８】
続いて、第１タイマ部４６は、ログ保存部５１からの指示を受け、ログ保存処理用タイマの時間を再設定して、起動する（図７のステップＳ１２０）。
【００９９】
本実施形態では、このような処理をして、管理情報の更新内容を示すログをフラッシュメモリ１１へ保存する。特に本実施形態では、ログ保存要求が行われたログ９、ログ１０、ログ１１の順にフラッシュメモリ１１へログを保存しているため、管理情報の復元時に正しく整合性の取れた状態で管理情報を復元することができる。
【０１００】
次に、本実施形態のデータ記憶装置で行われる管理情報保存処理について説明する。
【０１０１】
図１４は、本実施形態のデータ記憶装置１で行われる管理情報保存処理の手順の流れの一例を示すフローチャートである。なお、管理情報保存処理は、主制御部３２から管理情報保存要求された場合、管理情報保存処理用タイマに設定された時間が経過して、第２タイマ部４８から管理情報保存処理が指示された場合、及びログ保存動作中にフラッシュメモリ１１のログ領域の空きサイズが第２閾値よりも小さいとログ保存部５１に判定された場合（図７のステップＳ１１６でＹｅｓ、ステップＳ１１８）に行われる。
【０１０２】
まず、第２タイマ部４８は、管理情報保存部５３からの指示を受け、管理情報保存処理用タイマを停止する（ステップＳ３００）。
【０１０３】
続いて、管理情報保存部５３は、管理情報を確定する（ステップＳ３０２）。具体的には、管理情報保存部５３は、管理メモリ３０上での管理情報の先頭位置及びサイズから管理情報を確定する。なお、主制御部３２からの管理情報保存要求に管理メモリ３０上での管理情報の先頭位置及びサイズを含める場合には、管理情報保存部５３は、これらの情報を用いて管理情報を確定する。
【０１０４】
続いて、管理情報保存部５３は、管理情報の分割数を決定する（ステップＳ３０４）。具体的には、管理情報保存部５３は、管理情報の分割片のサイズを決定し、管理情報のサイズを分割片のサイズで除算することにより、管理情報の分割数を決定する。なお、管理情報保存部５３は、フラッシュメモリ１１に管理情報を効率的に保存するため、管理情報の分割片のサイズをフラッシュメモリ１１のブロックのサイズの整数倍の値などに決定する。
【０１０５】
続いて、管理情報保存部５３は、管理情報の保存に使用する全てのブロックをＥＲＡＳＥする（ステップＳ３０６）。なお、ブロックのＥＲＡＳＥに失敗した場合には、管理情報保存部５３は、代わりのブロックを用意してＥＲＡＳＥする。この際、ログ保存部５１は、必要であれば、そのログを作成する。つまり、管理情報保存部５３は、管理情報をフラッシュメモリ１１に保存する前に、ＥＲＡＳＥ済みのブロックを管理情報の保存に必要な数用意する。但し、管理情報をブロックへ書き込む際にエラーが生じ、当該ブロックがバッドブロック化する可能性もあるので、管理情報保存部５３は、管理情報の保存に使用するブロック数よりも多めにブロックを用意してＥＲＡＳＥすることが好ましい。
【０１０６】
続いて、ログ保存部５１は、管理情報の保存を開始することを示す保存開始ログを作成し、作成した保存開始ログをフラッシュメモリ１１のログ領域に保存する（ステップＳ３０８）。なお、保存開始ログは、保存開始ログであることを示すログ種別と、どの管理情報の保存開始ログであるかを示す管理情報識別子と、を含むログである。また、フラッシュメモリ１１のログ領域に保存開始ログが書き込まれた後でなければ、管理情報保存部５３は、管理情報の保存を開始できないため、ログ保存部５１は、保存開始ログをフラッシュメモリ１１のログ領域に直ちに書き込む。つまり、保存開始ログは、フラッシュメモリ１１に直ちに保存するログとして扱われ、ログ保存部５１は、ステップＳ１１０のログ保存処理以降の処理を順次行う。
【０１０７】
続いて、管理情報保存部５３は、ログ保存部５１により保存開始ログがフラッシュメモリ１１のログ領域に保存されたことを確認すると、管理情報の分割片をカウントするカウンタＮを１に設定し、管理メモリ３０上の位置を示すアドレスＡを管理情報の先頭位置に設定し、管理情報の分割片のサイズを示す変数Ｍに分割片のサイズを設定する（ステップＳ３１０）。
【０１０８】
続いて、管理情報保存部５３は、フラッシュメモリ１１の管理情報領域用のポインタが示す位置から、管理メモリ３０上のアドレスＡからサイズＭ分の管理情報、即ち管理情報の分割片を書き込む（ステップＳ３１２）。なお、管理情報領域用のポインタが示す位置のブロックの空きサイズが小さい場合、ステップＳ３０６でＥＲＡＳＥしたブロックを取得し、取得したブロックの先頭位置に管理情報領域用のポインタが示す位置を更新してから、管理情報の分割片を書き込むようにしてもよい。フラッシュメモリ１１のようなＮＡＮＤ型フラッシュメモリでは、ブロックの途中からデータを書き込む場合、ページ単位の書き込みになるが、ブロックの先頭からであれば、ブロック単位での書き込みができ、書き込み時間を短縮できるためである。
【０１０９】
続いて、管理情報保存部５３は、管理情報領域への分割片の書き込みが終了したことを確認すると、カウンタＮの値が管理情報の分割数以上であるか否かを判定し、全ての分割片の書き込みが終了したか否かを確認する（ステップＳ３１４）。
【０１１０】
カウンタＮの値が管理情報の分割数未満であり、未書き込みの分割片が残っている場合（ステップＳ３１４でＮｏ）、カウンタＮをインクリメントし、アドレスＡを分割片のサイズＭ分進める（ステップＳ３１６）。
【０１１１】
続いて、管理情報保存部５３は、管理情報領域用のポインタが示す位置を、サイズＭ分進めて、次の書き込み位置に更新する（ステップＳ３１８）。なお、ステップＳ３１２での分割片の書き込みによりブロックに空きサイズがなくなった場合には、ステップＳ３０６でＥＲＡＳＥしたブロックを取得し、取得したブロックの先頭位置に管理情報領域用のポインタが示す位置を更新する。
【０１１２】
続いて、管理情報保存部５３は、管理情報保存処理が強制的に行われたか否かを確認する（ステップＳ３２０）。例えば、ログ保存動作中にフラッシュメモリ１１のログ領域の空きサイズが第２閾値よりも小さいとログ保存部５１に判定された場合（図７のステップＳ１１６でＹｅｓ、ステップＳ１１８）、管理情報保存処理は強制的に行われる。
【０１１３】
管理情報保存処理が強制的に行われていない場合（ステップＳ３２０でＮｏ）、第２タイマ部４８は、管理情報保存部５３からの指示を受け、管理情報保存処理用タイマの時間を再設定して、起動する（ステップＳ３２２）。なお、管理情報保存部５３は、管理情報の保存に必要とする時間、管理情報の保存中にホスト装置２からデータ記憶装置１へのアクセスが行われる頻度、ログ領域のサイズなどを考慮して、管理情報保存処理用タイマに再設定する時間を第２タイマ部４８に指示する。管理情報保存処理用タイマに再設定する時間は、管理情報の分割片を保存する毎、又は管理情報の保存毎に設定できるようにすることが好ましい。
【０１１４】
続いて、管理情報保存部５３は、管理情報保存処理用タイマに設定された時間が経過して、第２タイマ部４８から管理情報保存部５３に管理情報保存処理の再開が指示されるまで待機し（ステップＳ３２４）、ステップＳ３１２に戻る。
【０１１５】
一方、ステップＳ３２０において、管理情報保存処理が強制的に行われていた場合（ステップＳ３２０でＹｅｓ）、ステップＳ３２２〜Ｓ３２４の処理を行わずに、ステップＳ３１２に戻る。
【０１１６】
ステップＳ３１４において、カウンタＮの値が管理情報の分割数以上であり、全ての分割片の書き込みが終了した場合（ステップＳ３１４でＹｅｓ）、ログ保存部５１は、管理情報の保存を終了したことを示すとともに管理情報保存領域上における複数の分割片それぞれの位置を特定する保存終了ログを作成し、作成した保存終了ログをフラッシュメモリ１１のログ領域に保存する（ステップＳ３２６）。
【０１１７】
図１５は、保存終了ログの一例を示す図である。図１５に示すように、保存終了ログは、保存終了ログであることを示すログ種別と、どの管理情報の保存終了ログであるかを示す管理情報識別子と、管理情報の分割数と、管理情報の各分割片のサイズと、各分割片を保存したフラッシュメモリ１１の管理情報領域上の位置と、を含むログである。なお、管理情報識別子は、保存開始ログの管理情報識別子と同一である。また、フラッシュメモリ１１のログ領域に保存終了ログが書き込まれた後でなければ、管理情報保存部５３は、管理情報の保存を終了できないため、ログ保存部５１は、保存終了ログをフラッシュメモリ１１のログ領域に直ちに書き込む。つまり、保存終了ログは、フラッシュメモリ１１に直ちに保存するログとして扱われ、ログ保存部５１は、ステップＳ１１０のログ保存処理以降の処理を順次行う。
【０１１８】
図１４に戻り、続いて、管理情報保存部５３は、ログ保存部５１により保存終了ログがフラッシュメモリ１１のログ領域に保存されたことを確認すると、管理情報領域用のポインタが示す位置を、サイズＭ分進めて、次の書き込み位置に更新する（ステップＳ３２８）。なお、ステップＳ３０６でＥＲＡＳＥしたブロックが余っている場合には、ＥＲＡＳＥしたブロックを取得し、取得したブロックの先頭位置に管理情報領域用のポインタが示す位置を更新してもよい。
【０１１９】
続いて、管理情報保存部５３は、最新の管理情報を識別する識別情報の値を保存終了ログに含まれる管理情報識別子の値に更新する（ステップＳ３３０）。これにより、識別情報を参照すれば、いつでも最新の管理情報を取得することができる。
【０１２０】
続いて、管理情報保存部５３は、今回の管理情報保存処理により不要となった管理情報、ログを、それぞれ管理情報領域、ログ領域から開放して再利用可能な状態にする開放処理を行う（ステップＳ３３２）。なお、開放処理の詳細については後述する。
【０１２１】
続いて、第２タイマ部４８は、管理情報保存部５３からの指示を受け、管理情報保存処理用タイマの時間を再設定して、起動する（ステップＳ３３４）。なお、管理情報保存処理用タイマに再設定する時間は、管理情報の保存毎、又は随時設定できるようにすることが好ましい。
【０１２２】
このように本実施形態では、管理情報保存部５３は、管理情報の分割片を保存する毎に分割片の保存を一定時間待機するため、主制御部３２は、分割片の保存の合間にホスト装置２から受け付けた命令を処理することができる。
【０１２３】
なお、管理情報保存処理が強制的に行われた場合には、ログ領域用の空きサイズが少ないため、管理情報保存部５３は待機せずに全ての分割片を保存する。これにより、ログ領域の空きサイズが足りなくなり、ログが保存できなくなることを防止するとともに、早期にログ領域の不要なログを開放することができる。
【０１２４】
図１６は、図１４のステップＳ３３２に示す開放処理の手順の流れの一例を示すフローチャートである。
【０１２５】
まず、ログ保存部５１は、最新の管理情報の保存開始ログの書込開始位置Ｕを、フラッシュメモリ１１のログ領域から探索する（ステップＳ４００）。なお、書込開始位置Ｕは、図１４のステップＳ３０８で保存開始ログを書き込んだログ領域の位置であるため、予め覚えていても良い。
【０１２６】
続いて、ログ保存部５１は、書込開始位置Ｕから遡り、前回の管理情報の保存終了ログの書込開始位置Ｖを探索する（ステップＳ４０２）。具体的には、ログ保存部５１は、前回の管理情報の保存終了ログの管理情報識別子を探索することで、書込開始位置Ｖを探索する。例えば、管理情報識別子に単調増加整数を使用している場合であれば、最新の管理情報を識別する識別情報の値をデクリメントした値の管理情報識別子を探索すればよい。なお、ログ領域に使用しているブロックには、前回のブロックのブロック番号が書き込まれているため、ログ保存部５１は、このブロック番号を利用することで順番に古いブロックを遡ることができる。
【０１２７】
続いて、ログ保存部５１は、書込開始位置Ｖから遡り、前回の管理情報の保存開始ログの書込開始位置Ｗを探索する（ステップＳ４０４）。具体的には、ログ保存部５１は、前回の管理情報の保存開始ログの管理情報識別子を探索することで、書込開始位置Ｗを探索する。例えば、管理情報識別子に単調増加整数を使用している場合であれば、最新の管理情報を識別する識別情報の値をデクリメントした値の管理情報識別子を探索すればよい。
【０１２８】
続いて、ログ保存部５１は、書込開始位置Ｖに書き込まれている前回の管理情報の保存終了ログから、前回の管理情報の分割数と、前回の管理情報の各分割片のサイズと、各分割片を保存した管理情報領域上の位置とを取得する（ステップＳ４０６）。
【０１２９】
続いて、管理情報保存部５３は、ログ保存部５１により取得された前回の管理情報の分割数、前回の管理情報の各分割片のサイズ、及び各分割片を保存した管理情報領域上の位置を参照して、管理情報領域から前回の管理情報を開放する（ステップＳ４０８）。これにより、前回の管理情報が書き込まれていた領域を、再利用可能な状態にすることができる。なお、前回の管理情報の分割片のサイズがブロックのサイズの整数倍であれば、ブロック単位で管理情報領域の再利用が可能となり、効率が良い。
【０１３０】
続いて、ログ保存部５１は、書込開始位置Ｗから書込開始位置Ｕまでに書き込まれているログをログ領域から開放する（ステップＳ４１０）。これにより、書込開始位置Ｗから書込開始位置Ｕまでの領域を、再利用可能な状態にすることができる。なお、開放するログ領域のサイズがブロックのサイズの整数倍であれば、ブロック単位で管理情報領域の再利用が可能となり、効率が良い。
【０１３１】
次に、本実施形態のデータ記憶装置で行われる管理情報保存処理の具体例について説明する。
【０１３２】
図１７は、フラッシュメモリ１１のログ領域の状態の一例を示す模式図である。図１７に示す例では、位置Ｌａには管理情報Ａの保存開始ログが書き込まれ、位置Ｌｂ〜Ｌｄにはログ２１〜ログ２３が書き込まれ、位置Ｌｅには管理情報Ａの保存終了ログが書き込まれ、位置Ｌｆ〜Ｌｊにはログ２４〜ログ２８が書き込まれている。また、ログ領域用のポインタは、次の書き込み位置Ｌｋを示している。なお、図１７に示す例では、説明を簡略化するためブロックやページという単位を省略してログ領域を示している。
【０１３３】
図１８は、フラッシュメモリ１１の管理情報領域の状態の一例を示す模式図である。図１８に示す例では、位置Ｓａ〜Ｓｄには管理情報Ａの分割片１〜４が書き込まれている。また、管理情報領域用のポインタは、次の書き込み位置Ｓｅを示している。なお、図１８に示す例においても、説明を簡略化するためブロックやページという単位を省略して管理情報領域を示している。
【０１３４】
図１９は、書込バッファ４２の状態の一例を示す模式図である。図１９に示す例では、書込バッファ４２には、先頭位置にログ２９が書き込まれている。なお、ログ２９は、フラッシュメモリ１１に直ちに保存する必要のないログである。また、書込バッファ４２用のポインタは、次の書き込み位置を示している。
【０１３５】
以下では、図１７〜図１９に示す状態での管理情報保存処理について、図１４及び図１６のフローチャートを参照しながら説明する。
【０１３６】
まず、第２タイマ部４８は、管理情報保存部５３からの指示を受け、管理情報保存処理用タイマを停止し、管理情報保存部５３は、管理情報を確定し、分割数を決定する（図１４のステップＳ３００〜Ｓ３０４）。ここでは、管理情報保存部５３は、管理情報Ｂを４つに分割するものとする。
【０１３７】
続いて、管理情報保存部５３は、管理情報Ｂの保存に使用する全てのブロックをＥＲＡＳＥし、ログ保存部５１は、管理情報Ｂの保存開始ログを作成し、作成した保存開始ログをフラッシュメモリ１１のログ領域に保存する（図１４のステップＳ３０６、Ｓ３０８）。ここで、保存開始ログは、フラッシュメモリ１１に直ちに保存するログである。このため、ログ保存部５１は、図１９に示す書込バッファ４２用のポインタが示す位置から保存開始ログを書き込むと、図２０に示すように、書込バッファ４２に書き込まれているログ２９及び管理情報Ｂの保存開始ログを直ちにフラッシュメモリ１１のログ領域に保存する。なお、図２０は、図１７〜図１９に示す状態での管理情報保存処理におけるログ及び管理情報の保存順序を時系列で示す図である。
【０１３８】
続いて、管理情報保存部５３は、ログ保存部５１により管理情報Ｂの保存開始ログがフラッシュメモリ１１のログ領域に保存されたことを確認すると、管理情報Ｂの分割片をカウントするカウンタＮを１に設定し、管理メモリ３０上の位置を示すアドレスＡを管理情報Ｂの先頭位置に設定し、管理情報Ｂの分割片のサイズを示す変数Ｍに分割片のサイズを設定する（図１４のステップＳ３１０）。
【０１３９】
続いて、管理情報保存部５３は、図２０に示すように、管理メモリ３０上のアドレスＡからサイズＭ分の管理情報、即ち管理情報Ｂの分割片１を、図１８に示すフラッシュメモリ１１の管理情報領域用のポインタが示す位置Ｓｅから書き込む（図１４のステップＳ３１２）。
【０１４０】
続いて、管理情報保存部５３は、管理情報領域への管理情報Ｂの分割片１の書き込みが終了したことを確認すると、カウンタＮの値が管理情報Ｂの分割数以上であるか否かを判定し、全ての分割片の書き込みが終了したか否かを確認する（図１４のステップＳ３１４）。今回の管理情報保存処理では、管理情報Ｂを４分割しているため、管理情報保存部５３は、ステップＳ３１２において管理情報領域に分割片を４回書き込むまで、図１４のステップＳ３１２〜ステップＳ３２４の処理を繰り返す。
【０１４１】
カウンタＮの値が管理情報の分割数未満であり、未書き込みの分割片が残っている場合、管理情報保存部５３は、カウンタＮをインクリメントし、アドレスＡを分割片のサイズＭ分進める（図１４のステップＳ３１４でＮｏ、ステップＳ３１６）。
【０１４２】
続いて、管理情報保存部５３は、管理情報領域用のポインタが示す位置を、サイズＭ分進めて、次の書き込み位置に更新する（図１４のステップＳ３１８）。
【０１４３】
続いて、管理情報保存部５３は、管理情報保存処理が強制的に行われたか否かを確認する（図１４のステップＳ３２０）。なお、今回の管理情報保存処理は、強制的に行われるものではないものとする。
【０１４４】
続いて、管理情報保存処理が強制的に行われていないため、第２タイマ部４８は、管理情報保存部５３からの指示を受け、管理情報保存処理用タイマの時間を再設定して、起動する（図１４のステップＳ３２０でＮｏ、Ｓ３２２）。
【０１４５】
続いて、管理情報保存部５３は、管理情報保存処理用タイマに設定された時間が経過して、第２タイマ部４８から管理情報保存部５３に管理情報保存処理の再開が指示されるまで待機し（図１４のステップＳ３２４）、ステップＳ３１２に戻る。なお、管理情報保存部５３が管理情報Ｂを管理情報領域に保存している間に、主制御部３２がホスト装置２から命令を受け付けた場合には、主制御部３２は、管理情報保存部５３の待機中、即ち、分割片の保存の合間に命令に従ってフラッシュメモリ１１に対するデータ処理を行う。そして、主制御部３２は、管理メモリ３０上の管理情報をデータ処理の内容に応じて更新するとともに、管理情報の更新内容を示すログを作成する。そして、ログ保存部５１は、作成されたログをログ領域に保存する。ここでは、図２０に示すように、ログ保存部５１によりログ３０〜ログ３２がログ領域に保存されたものとする。ログは、管理情報の更新の履歴であるため、管理情報の保存中に行われた管理情報の更新の内容を保存しておくことで、管理情報の復元時に、最新の管理情報を正しく復元することができる。
【０１４６】
そして、管理情報保存部５３は、ステップＳ３１２の処理を４回繰り返し、ステップＳ３１４において、カウンタＮの値が管理情報の分割数４以上となり、全ての分割片の書き込みが終了したものとする。この間、図２０に示すように、管理情報Ｂの分割片２、ログ３３〜ログ３４、管理情報Ｂの分割片３、ログ３５、管理情報Ｂの分割片４の順序でフラッシュメモリ１１に保存されたものとする。
【０１４７】
そして、全ての分割片の書き込みが終了すると、ログ保存部５１は、管理情報Ｂの保存終了ログを作成し、作成した保存終了ログをフラッシュメモリ１１のログ領域に保存する（図１４のステップＳ３１４でＹｅｓ、Ｓ３２６）。ここで、保存終了ログは、フラッシュメモリ１１に直ちに保存するログである。このため、ログ保存部５１は、書込バッファ４２用のポインタが示す位置から保存終了ログを書き込むと、図２０に示すように、書込バッファ４２に書き込まれているログ３６及び管理情報Ｂの保存終了ログを直ちにフラッシュメモリ１１のログ領域に保存する。
【０１４８】
続いて、管理情報保存部５３は、ログ保存部５１により保存終了ログがフラッシュメモリ１１のログ領域に保存されたことを確認すると、管理情報領域用のポインタが示す位置を、サイズＭ分進めて、次の書き込み位置に更新する（図１４のステップＳ３２８）。
【０１４９】
図２１は、管理情報Ｂの保存終了ログを保存した後のログ領域の状態の一例を示す模式図である。図２１に示す例では、位置Ｌｋにはログ２９が書き込まれ、位置Ｌｌには管理情報Ｂの保存開始ログが書き込まれ、位置Ｌｍ〜Ｌｓにはログ３０〜ログ３６が書き込まれ、位置Ｌｔには管理情報Ｂの保存終了ログが書き込まれている。また、ログ領域用のポインタは、次の書き込み位置Ｌｕを示している。
【０１５０】
図２２は、管理情報Ｂの保存後の管理情報領域の状態の一例を示す模式図である。図２２に示す例では、位置Ｓｅ〜Ｓｈには管理情報Ｂの分割片１〜４が書き込まれている。また、管理情報領域用のポインタは、次の書き込み位置Ｓｉを示している。
【０１５１】
続いて、管理情報保存部５３は、最新の管理情報を識別する識別情報の値を保存終了ログに含まれる管理情報Ｂの管理情報識別子の値に更新する（図１４のステップＳ３３０）。
【０１５２】
続いて、管理情報保存部５３は、今回の管理情報保存処理により不要となった管理情報Ａとログとを、それぞれ管理情報領域、ログ領域から開放して再利用可能な状態にする開放処理を行う（図１４のステップＳ３３２）。
【０１５３】
続いて、ログ保存部５１は、最新の管理情報である管理情報Ｂの保存開始ログの書込開始位置Ｕを、フラッシュメモリ１１のログ領域から探索する（図１６のステップＳ４００）。図２１に示す例では、書込開始位置Ｕは、位置Ｌｌとなる。
【０１５４】
続いて、ログ保存部５１は、書込開始位置Ｕから遡り、前回の管理情報である管理情報Ａの保存終了ログの書込開始位置Ｖを探索する（図１６のステップＳ４０２）。図２１に示す例では、書込開始位置Ｖは、位置Ｌｅとなる。
【０１５５】
続いて、ログ保存部５１は、書込開始位置Ｖから遡り、前回の管理情報である管理情報Ａの保存開始ログの書込開始位置Ｗを探索する（図１６のステップＳ４０４）。図２１に示す例では、書込開始位置Ｗは、位置Ｌａとなる。
【０１５６】
続いて、ログ保存部５１は、書込開始位置Ｖに書き込まれている管理情報Ａの保存終了ログから、管理情報Ａの分割数と、管理情報Ａの各分割片のサイズと、各分割片を保存した管理情報領域上の位置とを取得する（図１６のステップＳ４０６）。
【０１５７】
図２３は、管理情報Ａの保存終了ログの一例を示す図である。図２３に示す例では、管理情報Ａの分割数は４であり、管理情報Ａの各分割片のサイズはそれぞれ５ブロックであり、各分割片を保存した管理情報領域上の位置は、Ｓａ、Ｓｂ、Ｓｃ、Ｓｄとなっている。
【０１５８】
続いて、管理情報保存部５３は、ログ保存部５１により取得された管理情報Ａの分割数、管理情報Ａの各分割片のサイズ、及び各分割片を保存した管理情報領域上の位置を参照して、管理情報領域から管理情報Ａを開放する（図１６のステップＳ４０８）。
【０１５９】
図２４は、管理情報Ａの開放後の管理情報領域の状態の一例を示す模式図である。図２４に示す例では、点線で示された管理情報Ａの分割片１〜４が開放されたことを示しており、詳細には、位置Ｓａ、Ｓｂ、Ｓｃ、Ｓｄそれぞれから５ブロック分のブロック、即ち、位置Ｓａ〜Ｓｅまでの２０ブロック分のブロックが開放されている。
【０１６０】
続いて、ログ保存部５１は、書込開始位置Ｗから書込開始位置Ｕまでに書き込まれているログをログ領域から開放する（図１６のステップＳ４１０）。
【０１６１】
図２５は、ログ開放後のログ領域の状態の一例を示す模式図である。図２５に示す例では、点線で示された管理情報Ａの保存開始ログ、保存終了ログ、及びログ２１〜ログ２９が開放されたことを示しており、詳細には、位置Ｌａ〜Ｌｋに書き込まれているログが開放されている。
【０１６２】
続いて、第２タイマ部４８は、管理情報保存部５３からの指示を受け、管理情報保存処理用タイマの時間を再設定して、起動する（図１４のステップＳ３３４）。なお、管理情報保存処理用タイマに再設定する時間は、管理情報の保存毎、又は随時設定できるようにすることが好ましい。
【０１６３】
このように本実施形態では、管理情報保存部５３は、管理情報の分割片を保存する毎に分割片の保存を一定時間待機するため、主制御部３２は、分割片の保存の合間にホスト装置２から受け付けた命令を処理することができ、管理情報の保存中における性能の低下を防止できる。
【０１６４】
また本実施形態では、管理情報の保存後に、管理情報領域から前回の管理情報が開放されるとともに、ログ領域から不要なログが開放されるため、管理情報領域及びログ領域の空きサイズを増やすことができる。
【０１６５】
次に、本実施形態のデータ記憶装置で行われる管理情報復元動作について説明する。
【０１６６】
図２６は、本実施形態のデータ記憶装置１で行われる管理情報復元動作の手順の流れの一例を示すフローチャートである。
【０１６７】
まず、復元部５４は、最新の管理情報を識別する識別情報から、最新の管理情報の管理情報識別子を取得する（ステップＳ５００）。
【０１６８】
続いて、復元部５４は、最新のログの書込開始位置Ｘを、フラッシュメモリ１１のログ領域から探索する（ステップＳ５０２）。具体的には、復元部５４は、フラッシュメモリ１１からブロック識別情報（図８のステップＳ２１８参照）を取得して最新のログを書き込んだブロックを探索し、最新のログを書き込んだブロックのページを順番に調べていくことで、最新のログの書込開始位置Ｘを探索する。
【０１６９】
続いて、復元部５４は、書込開始位置Ｘから遡り、最新の管理情報の保存終了ログの書込開始位置Ｙを探索する（ステップＳ５０４）。ログ領域に使用しているブロックには、前回のブロックのブロック番号が書き込まれているため、復元部５４は、このブロック番号を利用することで順番に古いブロックを遡ることができる。そして、復元部５４は、ステップＳ５００で取得した管理情報識別子を探索することで、書込開始位置Ｙを探索する。
【０１７０】
続いて、復元部５４は、書込開始位置Ｙから遡り、最新の管理情報の保存開始ログの書込開始位置Ｚを探索する（ステップＳ５０６）。ログ領域に使用しているブロックには、前回のブロックのブロック番号が書き込まれているため、復元部５４は、このブロック番号を利用することで順番に古いブロックを遡ることができる。そして、復元部５４は、ステップＳ５００で取得した管理情報識別子を探索することで、書込開始位置Ｚを探索する。
【０１７１】
続いて、復元部５４は、書込開始位置Ｙに書き込まれている最新の管理情報の保存終了ログから、最新の管理情報の分割数と、最新の管理情報の各分割片のサイズと、各分割片を保存した管理情報領域上の位置とを取得する（ステップＳ５０８）。
【０１７２】
続いて、復元部５４は、取得した最新の管理情報の分割数、最新の管理情報の各分割片のサイズ、及び各分割片を保存した管理情報領域上の位置を参照して、管理情報領域から最新の管理情報の分割片を順番に読み出し、管理メモリ３０に書き込む（ステップＳ５１０）。
【０１７３】
続いて、復元部５４は、書込開始位置Ｚを、最新の管理情報の保存開始ログの次のログの書込開始位置に更新する（ステップＳ５１２）。
【０１７４】
続いて、復元部５４は、書込開始位置Ｚに書き込まれているログを読出バッファ４４に読み出す（ステップＳ５１４）。
【０１７５】
続いて、復元部５４は、読出バッファ４４に読み出したログが有効なログであるか否かを確認する（ステップＳ５１６）。なお、読出バッファ４４に読み出したログが有効なログでない場合や、書込開始位置Ｚにログが書き込まれておらずログを読み出せなかった場合には（ステップＳ５１６でＮｏ）、管理情報復元処理を終了する。
【０１７６】
読出バッファ４４に読み出したログが有効なログである場合（ステップＳ５１６でＹｅｓ）、復元部５４は、読み出したログの内容を管理メモリ３０上の管理情報に反映する（ステップＳ５１８）。
【０１７７】
続いて、復元部５４は、書込開始位置Ｚを、読み出したログの次のログの書込開始位置に更新し（ステップＳ５２０）、ステップＳ５１４に戻る。
【０１７８】
以上の処理で、ログ領域に保存したログを、保存した順番に管理情報に反映させることができ、最新の管理情報を復元することができる。特に本実施形態では、ログ領域に保存されているログは、管理情報の更新処理が行われた時系列に従って保存しているので、古いログから時系列の順に管理情報に反映させることで、更新処理が行われた結果の状態を再現することができる。
【０１７９】
次に、本実施形態のデータ記憶装置で行われる管理情報復元処理の具体例について説明する。
【０１８０】
図２７は、フラッシュメモリ１１のログ領域の状態の一例を示す模式図である。図２７に示す例では、位置Ｌｌには管理情報Ｂの保存開始ログが書き込まれ、位置Ｌｍ〜Ｌｓにはログ３０〜ログ３６が書き込まれ、位置Ｌｔには管理情報Ｂの保存終了ログが書き込まれ、位置Ｌｕ〜Ｌｙにはログ３７〜ログ４１が書き込まれている。
【０１８１】
図２８は、フラッシュメモリ１１の管理情報領域の状態の一例を示す模式図である。図２８に示す例では、位置Ｓｅ〜Ｓｈには管理情報Ｂの分割片１〜４が書き込まれている。
【０１８２】
以下では、図２７及び図２８に示す状態における管理情報復元処理について、図２６のフローチャートを参照しながら説明する。
【０１８３】
まず、復元部５４は、最新の管理情報を識別する識別情報から、最新の管理情報である管理情報Ｂの管理情報識別子を取得する（図２６のステップＳ５００）。
【０１８４】
続いて、復元部５４は、最新のログの書込開始位置Ｘを、フラッシュメモリ１１のログ領域から探索する（図２６のステップＳ５０２）。図２７に示す例では、書込開始位置Ｘは、位置Ｌｚとなる。
【０１８５】
続いて、復元部５４は、書込開始位置Ｘから遡り、管理情報Ｂの保存終了ログの書込開始位置Ｙを探索する（図２６のステップＳ５０４）。図２７に示す例では、書込開始位置Ｙは、位置Ｌｔとなる。
【０１８６】
続いて、復元部５４は、書込開始位置Ｙから遡り、管理情報Ｂの保存開始ログの書込開始位置Ｚを探索する（図２６のステップＳ５０６）。図２７に示す例では、書込開始位置Ｚは、位置Ｌｌとなる。
【０１８７】
続いて、復元部５４は、書込開始位置Ｙに書き込まれている管理情報Ｂの保存終了ログを読出バッファ４４に読み出し、管理情報Ｂの分割数と、管理情報Ｂの各分割片のサイズと、各分割片を保存した管理情報領域上の位置とを取得する（図２６のステップＳ５０８）。
【０１８８】
図２９は、管理情報Ｂの保存終了ログの一例を示す図である。図２９に示す例では、管理情報Ｂの分割数は４であり、管理情報Ｂの各分割片のサイズはそれぞれ５ブロックであり、各分割片を保存した管理情報領域上の位置は、Ｓｅ、Ｓｆ、Ｓｇ、Ｓｈとなっている。
【０１８９】
続いて、復元部５４は、取得した管理情報Ｂの分割数、管理情報Ｂの各分割片のサイズ、及び各分割片を保存した管理情報領域上の位置を参照して、管理情報領域から管理情報Ｂの分割片１〜４を順番に読み出し、管理メモリ３０に書き込む（図２６のステップＳ５１０）。
【０１９０】
続いて、復元部５４は、書込開始位置Ｚを、最新の管理情報の保存開始ログの次のログの書込開始位置に更新する（図２６のステップＳ５１２）。図２７に示す例では、書込開始位置Ｚは、位置Ｌｍとなる。
【０１９１】
続いて、復元部５４は、書込開始位置Ｚに書き込まれているログ３０を読出バッファ４４に読み出す（図２６のステップＳ５１４）。ここでは、ログ３０は有効なログであるものとする。
【０１９２】
続いて、読出バッファ４４に読み出したログ３０が有効なログであるため、復元部５４は、読み出したログの内容を管理メモリ３０上の管理情報に反映する（図２６のステップＳ５１６でＹｅｓ、Ｓ５１８）。
【０１９３】
例えば、ログ３０が図３０に示すような書き込みログだった場合、図３０に示す書き込みログに従って、管理メモリ３０上の管理情報の変換テーブルを更新する。例えば、復元部５４は、論理番地９８のデータが、チップ番号９、ブロック番号９８７のブロックの０ページ目に書き込まれたという内容に従って、変換テーブルを更新する。
【０１９４】
また例えば、ログ３０が図３１に示すようなバッドブロックログだった場合、図３１に示すバッドブロックログに従って、管理メモリ３０上の管理情報のバッドブロックリストを更新する。例えば、復元部５４は、チップ番号１２、ブロック番号１１２２のブロックがＥＲＡＳＥエラーによってバッドブロックになったという内容を、バッドブロックリストに登録する。
【０１９５】
このように、管理情報へのログの反映は、ログの内容によって処理が異なるため、復元部５４は、ログ種別を参照して処理を切り替えることが好ましい。
【０１９６】
続いて、復元部５４は、書込開始位置Ｚを、読み出したログ３０の次のログ３１の書込開始位置に更新し（ステップＳ５２０）、ステップＳ５１４に戻る。
【０１９７】
この処理をログ４１まで繰り返すと、有効なログがなくなるため、管理情報復元処理は終了となる。
【０１９８】
このように本実施形態では、管理情報Ｂの保存が開始されてから終了するまでの間に行われた管理情報更新内容がログ３０からログ３６に保存されているが、管理情報復元処理により、これらの更新内容も管理情報に正しく反映させることができる。
【０１９９】
例えば、図２７に示すログ３６に保存された管理情報の更新内容が、既に保存が終了している管理情報Ｂの分割片１に対する処理だったとしても、管理情報Ｂの分割片１を展開してからログ３６の内容を反映させれば更新処理を行ったのと同じことになる。
【０２００】
また例えば、図２７に示すログ３０に保存された管理情報の更新内容が、ログ３０を保存した時点ではまだ保存されていない管理情報Ｂの分割片４に対する処理だったとしても、管理情報Ｂの分割片４を展開した時点でログ３０の内容が反映されているので、ログ３０の更新処理を繰り返しても何ら問題はない。
【０２０１】
また例えば、図２７に示すログ３３とログ４０が同じ管理情報に対する更新処理を保存したものだった場合でも、保存された順番、つまり更新処理が行われた順番にログが保存されているから、正しく更新処理の内容を反映させることができる。
【０２０２】
以上のように本実施の形態によれば、管理情報保存部５３は、管理情報の分割片を保存する毎に分割片の保存を一定時間待機するため、主制御部３２は、分割片の保存の合間にホスト装置２から受け付けた命令を処理することができ、管理情報の保存中における性能の低下を防止できる。
【０２０３】
また、本実施の形態によれば、ログ領域に保存されているログは、管理情報の更新処理が行われた時系列に従って保存されているので、古いログから時系列の順に管理情報に反映させることで、更新処理が行われた結果の状態を再現することができる。
【０２０４】
（変形例）
なお、本発明は、上記実施の形態そのままに限定されるものではなく、実施段階ではその要旨を逸脱しない範囲で構成要素を変形して具体化することができる。また、上記実施の形態に開示されている複数の構成要素の適宜な組み合わせにより、種々の発明を形成することができる。例えば、実施の形態に示される全構成要素からいくつかの構成要素を削除してもよい。さらに、異なる実施の形態にわたる構成要素を適宜組み合わせても良い。
【０２０５】
上記実施の形態で説明したように、ＮＡＮＤ型フラッシュメモリでは、既に書き込まれたデータを書き換えるためには、当該データを書き込んだブロックのＥＲＡＳＥ処理が必要となるため、次に使用するブロックのブロック番号のみなど、ページ単位でデータを書き換えることは容易ではない。このため、上記実施の形態では、フラッシュメモリ１１のログ領域へログを保存する際に、ブロックへのログの書き込み後に次に使用するブロックをＥＲＡＳＥし、ＥＲＡＳＥに成功したブロックに直前にログを書き込んだブロックのブロック番号を書き込む例について説明した。変形例では、フラッシュメモリ１１のログ領域へログを保存する際に、ブロックへログを書き込む前に次に使用するブロックをＥＲＡＳＥし、ＥＲＡＳＥに成功したブロックのブロック番号と前回ログを書き込んだブロックのブロック番号とを書き込む例について説明する。
【０２０６】
図３２は、変形例のデータ記憶装置で行われるログ保存処理の手順の流れの一例を示すフローチャートである。
【０２０７】
まず、ログ保存部５１は、フラッシュメモリ１１へのログの書き込みが初めてか否かを判定する（ステップＳ６００）。
【０２０８】
初めてのログの書き込みでない場合（ステップＳ６００でＮｏ）、ログ保存部５１は、ステップＳ６０８へ進む。一方、初めてのログの書き込みである場合（ステップＳ６００でＹｅｓ）、ログ保存部５１は、最初に使用するブロックをＥＲＡＳＥし（ステップＳ６０２）、ＥＲＡＳＥしたブロックの先頭位置に有効でないブロックのブロック番号を書き込む（ステップＳ６０４）。そしてログ保存部５１は、ログ領域用のポインタが示す位置を、次の書き込み位置に更新する（ステップＳ６０６）。
【０２０９】
続いて、ログ保存部５１は、フラッシュメモリ１１へ書き込むログの残りサイズが０か否かを判定する（ステップＳ６０８）。
【０２１０】
ログの残りサイズが０でない場合（ステップＳ６０８でＮｏ）、ログ保存部５１は、ログの残りサイズが、ログ領域用のポインタが示す位置のブロックの空きサイズからブロック番号のサイズを減じたものよりも小さいか否かを判定する（ステップＳ６１０）。
【０２１１】
ログの残りサイズが、ログ領域用のポインタが示す位置のブロックの空きサイズからブロック番号のサイズを減じたものよりも大きい場合（ステップＳ６１０でＮｏ）、ログ保存部５１は、次に使用するブロックをＥＲＡＳＥする（ステップＳ６１２）。
【０２１２】
続いて、ログ保存部５１は、ＥＲＡＳＥしたブロックの先頭位置に、前ブロックのブロック番号、即ち、ログ領域用のポインタが示す位置のブロックのブロック番号を書き込む（ステップＳ６１４）。
【０２１３】
続いて、ログ保存部５１は、残りのログから、ログ領域用のポインタが示す位置のブロックの空きサイズからブロック番号のサイズを減じたサイズ分のログを用意し、その末尾にＥＲＡＳＥしたブロックのブロック番号を追加する（ステップＳ６１６）。
【０２１４】
続いて、ログ保存部５１は、ログ領域用のポインタが示す位置から、末尾にブロック番号が追加されたログを書き込む（ステップＳ６１８）。
【０２１５】
続いて、ログ保存部５１は、ログ領域用のポインタが示す位置を、次の書き込み位置に更新し（ステップＳ６２０）、ステップＳ６０８に戻る。具体的には、ログ保存部５１は、ログ領域用のポインタが示す位置を、ＥＲＡＳＥしたブロックのブロック番号を書き込んだページの次のページを示す位置に更新する。
【０２１６】
なお、ステップＳ６０８において、ログの残りサイズが０の場合（ステップＳ６０８でＹｅｓ）に行われるステップＳ６２６の処理は、図８に示すログ保存処理のステップＳ２１８の処理と同様である。
【０２１７】
また、ステップＳ６１０において、ログの残りサイズが、ログ領域用のポインタが示す位置のブロックの空きサイズからブロック番号のサイズを減じたものよりも小さい場合（ステップＳ６１０でＹｅｓ）に行われるステップＳ６２２〜Ｓ６２６の処理は、図８に示すログ保存処理のステップＳ２１４〜Ｓ２１８の処理と同様である。
【０２１８】
図３３は、変形例のログ保存処理終了後のログ領域の状態の一例を示す模式図である。変形例のログ保存処理では、図３３に示すように、各ブロックに前ブロックのブロック番号と次ブロックのブロック番号が書き込まれるため、新しいブロックから古いブロックを辿るだけでなく、古いブロックから新しいブロックを辿ることもできる。このように、各ブロックに書き込まれるブロック番号の冗長度を増加させることにより、ＮＡＮＤ型フラッシュメモリのような読み出し時のエラー対策が必要なメモリを使用する上での対処になっている。
【符号の説明】
【０２１９】
１  データ記憶装置
２  ホスト装置
３  外部バス
１０  コントローラ
１１  フラッシュメモリ
１２  専用バス
１５  データバス
２２  命令制御部
２４  フラッシュメモリ制御部
２６  転送制御部
２８  転送メモリ
３０  管理メモリ
３２  主制御部
４０  管理部
４２  書込バッファ
４４  読出バッファ
４６  第１タイマ部
４８  第２タイマ部
５０  保存部
５１  ログ保存部
５３  管理情報保存部
５４  復元部
【図１】
2011059866.tif 000003
【図２】
2011059866.tif 000004
【図３】
2011059866.tif 000005
【図４】
2011059866.tif 000006
【図５】
2011059866.tif 000007
【図６】
2011059866.tif 000008
【図７】
2011059866.tif 000009
【図８】
2011059866.tif 000010
【図９】
2011059866.tif 000011
【図１０】
2011059866.tif 000012
【図１１】
2011059866.tif 000013
【図１２】
2011059866.tif 000014
【図１３】
2011059866.tif 000015
【図１４】
2011059866.tif 000016
【図１５】
2011059866.tif 000017
【図１６】
2011059866.tif 000018
【図１７】
2011059866.tif 000019
【図１８】
2011059866.tif 000020
【図１９】
2011059866.tif 000021
【図２０】
2011059866.tif 000022
【図２１】
2011059866.tif 000023
【図２２】
2011059866.tif 000024
【図２３】
2011059866.tif 000025
【図２４】
2011059866.tif 000026
【図２５】
2011059866.tif 000027
【図２６】
2011059866.tif 000028
【図２７】
2011059866.tif 000029
【図２８】
2011059866.tif 000030
【図２９】
2011059866.tif 000031
【図３０】
2011059866.tif 000032
【図３１】
2011059866.tif 000033
【図３２】
2011059866.tif 000034
【図３３】
2011059866.tif 000035