(57)【要約】【課題】不正な電源断やデータ破壊を簡便かつ確実に検出することが可能なメモリシステムを提供する。【解決手段】実施形態のメモリシステムは、揮発性の第１の記憶部と、不揮発性の第２の記憶部と、データ管理部と、復元制御部と、を備える。前記データ管理部は、前記第１の記憶部に記憶されている前記管理テーブルの更新前後の差分情報である差分ログを並列書き込み処理によって多重化して前記第２の記憶部に記憶させた後、書き込み単位分の所定データを最終書き込み単位分データとして多重化して前記第２の記憶部に記憶させる。前記復元制御部は、前記第２の記憶部に記憶された差分ログおよび前記最終書き込み単位分データのデータ記憶状態に基づいて、前記差分ログを前記第２の記憶部に記憶させる際に不正電源断が発生したか、または前記第２の記憶部でデータ破壊が発生したかの状態判断をシステム起動時に行う。【選択図】図３
2012128643.tif 000002
【特許請求の範囲】
【請求項１】
揮発性の第１の記憶部と、
ホスト装置から指定された論理アドレスと物理的なデータの記憶位置とを対応付ける管理情報を管理するための管理テーブルを記憶することが可能な不揮発性の第２の記憶部と、
前記第１の記憶部を介してホスト装置と前記第２の記憶部との間のデータ転送を行うデータ転送制御部と、
前記第２の記憶部に記憶された管理テーブルをシステム起動時に前記第１の記憶部に転送し、前記管理テーブルを更新すべき事象が発生した際、前記第１の記憶部に記憶されている前記管理テーブルの更新前後の差分情報を差分ログとして前記第１の記憶部に記憶させ、所定の条件が成立したときに前記第１の記憶部に記憶された差分ログを前記第２の記憶部に順次追記記憶させるとともに前記第１の記憶部に記憶された差分ログの内容を前記第１の記憶部に記憶されている前記管理テーブルに反映するデータ管理部と、
前記第２の記憶部に記憶された差分ログに基づいて、前記差分ログが前記第２の記憶部に正常に記憶されているか、前記差分ログを前記第２の記憶部に記憶させる際に不正電源断が発生したか、または前記差分ログを前記第２の記憶部に記憶させた後に前記第２の記憶部でデータ破壊が発生したかの状態判断をシステム起動時に行う復元制御部と、
を備え、
前記データ管理部は、
前記差分ログを並列書き込み処理によって多重化して前記第２の記憶部に記憶させた後、書き込み単位分の所定データを最終書き込み単位分データとして多重化して前記第２の記憶部に記憶させ、
前記復元制御部は、前記第２の記憶部に記憶された差分ログおよび前記最終書き込み単位分データのデータ記憶状態に基づいて、前記状態判断を行うことを特徴とするメモリシステム。
【請求項２】
前記データ管理部は、
書き込み単位毎に前記第２の記憶部に記憶される差分ログのうち最後に記憶された書き込み単位分のデータを、前記最終書き込み単位分データとして、前記第２の記憶部に記憶させることを特徴とする請求項１に記載のメモリシステム。
【請求項３】
前記復元制御部は、
前記差分ログおよび前記最終書き込み単位分データのうち、第１の書き込み単位内のデータおよび前記第１の書き込み単位に続く次の書き込み単位に書き込まれた第２の書き込み単位内のデータのデータ記憶状態に基づいて、前記状態判断を行うことを特徴とする請求項１または２に記載のメモリシステム。
【請求項４】
前記復元制御部は、
前記第１の書き込み単位および前記第２の書き込み単位で記憶されている各データが、それぞれ消去済みデータ、エラーデータまたは正常なデータの何れであるかを判断することによって、前記状態判断を行うことを特徴とする請求項３に記載のメモリシステム。
【請求項５】
前記データ管理部は、
前記第１の記憶部に記憶された差分ログを前記第２の記憶部に順次追記記憶させる際に、前記差分ログを構成するデータの書き込み単位の数を、前記差分ログとともに前記第２の記憶部に記憶させ、
前記復元制御部は、
前記第２の記憶部で記憶されている前記書き込み単位の数と、前記差分ログのうち読み出しに成功した書き込み単位の数と、が一致しているか否かに基づいて、前記状態判断を行うことを特徴とする請求項１〜４のいずれか１つに記載のメモリシステム。
【請求項６】
前記データ管理部は、
前記差分ログおよび前記最終書き込み単位分データのうちの何れかの書き込み単位が前記第２の記憶部に未書き込みである場合に、前記不正電源断が発生したと判断することを特徴とする請求項１〜５のいずれか１つに記載のメモリシステム。
【請求項７】
前記データ管理部は、
前記最終書き込み単位分データが前記第２の記憶部に書き込まれていて、且つ前記差分ログのうちの何れかの書き込み単位がエラーデータである場合に、前記データ破壊が発生したと判断することを特徴とする請求項１〜５のいずれか１つに記載のメモリシステム。
【請求項８】
前記データ管理部は、
前記差分ログおよび前記最終書き込み単位分データのうちの何れかの書き込み単位が連続して２単位エラーデータである場合に、前記データ破壊が発生したと判断することを特徴とする請求項１〜５のいずれか１つに記載のメモリシステム。
【請求項９】
前記書き込み単位は、ページであり、
前記差分ログは、複数のブロックに並列書き込みされることを特徴とする請求項１〜８のいずれか１つに記載のメモリシステム。
【発明の詳細な説明】
【技術分野】
【０００１】
本発明の実施形態は、メモリシステムに関する。
【背景技術】
【０００２】
近年、不揮発性半導体記憶装置であるＮＡＮＤ型フラッシュメモリの大容量化が進行し、このＮＡＮＤ型フラッシュメモリを搭載したメモリシステムとしてのＳＳＤ（Solid  State  Drive）が注目されている。
【先行技術文献】
【特許文献】
【０００３】
【特許文献１】特開２０１０−１５７１３９号公報
【特許文献２】特開２００９−２１７３９１号公報
【発明の概要】
【発明が解決しようとする課題】
【０００４】
本発明の一つの実施形態は、不正な電源断やデータ破壊を簡便かつ確実に検出することが可能なメモリシステムを提供することを目的とする。
【課題を解決するための手段】
【０００５】
本発明の一つの実施形態によれば、メモリシステムが提供される。メモリシステムは、揮発性の第１の記憶部と、ホスト装置から指定された論理アドレスと物理的なデータの記憶位置とを対応付ける管理情報を管理するための管理テーブルを記憶することが可能な不揮発性の第２の記憶部と、を備える。また、メモリシステムは、前記第１の記憶部を介してホスト装置と前記第２の記憶部との間のデータ転送を行うデータ転送制御部を備える。また、メモリシステムは、データ管理部を備える。前記データ管理部は、前記第２の記憶部に記憶された管理テーブルをシステム起動時に前記第１の記憶部に転送する。また、前記データ管理部は、前記管理テーブルを更新すべき事象が発生した際、前記第１の記憶部に記憶されている前記管理テーブルの更新前後の差分情報を差分ログとして前記第１の記憶部に記憶させる。また、前記データ管理部は、所定の条件が成立したときに前記第１の記憶部に記憶された差分ログを前記第２の記憶部に順次追記記憶させるとともに前記第１の記憶部に記憶された差分ログの内容を前記第１の記憶部に記憶されている前記管理テーブルに反映する。また、メモリシステムは、前記第２の記憶部に記憶された差分ログに基づいて、前記差分ログが前記第２の記憶部に正常に記憶されているか、前記差分ログを前記第２の記憶部に記憶させる際に不正電源断が発生したか、または前記差分ログを前記第２の記憶部に記憶させた後に前記第２の記憶部でデータ破壊が発生したかの状態判断をシステム起動時に行う復元制御部を備える。そして、前記データ管理部は、前記差分ログを並列書き込み処理によって多重化して前記第２の記憶部に記憶させた後、書き込み単位分の所定データを最終書き込み単位分データとして多重化して前記第２の記憶部に記憶させる。また、前記復元制御部は、前記第２の記憶部に記憶された差分ログおよび前記最終書き込み単位分データのデータ記憶状態に基づいて、前記状態判断を行う。
【図面の簡単な説明】
【０００６】
【図１】図１は、ＳＳＤの構成例を示すブロック図である。
【図２】図２は、スナップショットとログの生成形態を概念的に示す図である。
【図３】図３は、差分ログの並列書き込みタイミングを説明するための図である。
【図４】図４は、差分ログを並列で書き込まず、連続処理で２回書き込む場合の書き込みタイミングを説明するための図である。
【図５】図５は、差分ログの並列書き込み位置を説明するための図である。
【図６】図６は、差分ログのＮＡＮＤメモリからの読み出し処理を説明するための図である。
【図７】図７は、ＮＡＮＤメモリに保存された差分ログのデータ状態を説明するための図である。
【図８】図８は、不正電源断が発生した場合の差分ログのデータ状態の一例を示す図である。
【図９】図９は、データ破壊が発生した場合の差分ログのデータ状態の一例を示す図である。
【図１０】図１０は、不正電源断とデータ破壊の分類処理手順を示す図である。
【図１１】図１１は、差分ログの読み出し状態の分類例を示す図である。
【図１２】図１２は、２重化されたページの取り扱い例を説明するための図である。
【図１３】図１３は、ActiveログおよびStandbyログの書き込み手順を示す図である。
【図１４】図１４は、ＳＳＤを搭載したパーソナルコンピュータの一例を示す斜視図である。
【図１５】図１５は、ＳＳＤを搭載したパーソナルコンピュータのシステム構成例を示す図である。
【発明を実施するための形態】
【０００７】
以下に添付図面を参照して、実施形態に係るメモリシステムを詳細に説明する。なお、この実施形態により本発明が限定されるものではない。
【０００８】
（実施形態）
図１は、ＳＳＤの構成例を示すブロック図である。ＮＡＮＤ型フラッシュメモリ（以下、ＮＡＮＤメモリと略す）１０を用いた半導体記憶装置の一例であるＳＳＤ（Solid  State  Drive）１００は、メモリシステムなどに適用される。本実施形態のＳＳＤ１００は、不揮発に保存したい重要なデータ（管理データ）を書き込む際に、信頼性を確保するために管理データ（後述する差分ログ２３Ｎ）の多重化（例えば２重化）記憶を行なう。このとき、ＳＳＤ１００では、管理データを並列で書き込むことによって書き込み時間の短時間化を図る。また、ＳＳＤ１００は、管理データを書き込んだ後、管理データの最後のページを再度、書き込んでおくことにより、書き込み処理中の不正な電源断などを認識できるようにしておく。例えば、ＳＳＤ１００では、書き込まれたデータの一部または全部を読み出せなかった場合に、ＮＡＮＤメモリ１０内のデータ記憶状態に基づいて、データ書き込み中の不正な電源断と、データ書き込み後のデータ破壊の何れが発生したかを判断する。そして、ＳＳＤ１００は、復元可能なデータのみを復元する。
【０００９】
ＳＳＤ１００は、ＡＴＡインタフェース（ＡＴＡ  Ｉ／Ｆ）などのメモリ接続インタフェースであるホストＩ／Ｆ２を介してパーソナルコンピュータあるいはＣＰＵコアなどのホスト装置（以下、ホストと略す）１と接続され、ホスト１の外部メモリとして機能する。
【００１０】
ＳＳＤ１００は、揮発性半導体メモリとしてのＤＲＡＭ２０と、データ管理などを行うコントローラ３０と、データの記憶処理を制御するとともにデータを記憶するデータ記憶部１２と、を備えている。
【００１１】
データ記憶部１２は、不揮発性半導体メモリとしてのＮＡＮＤメモリ１０と、ＮＡＮＤメモリ１０を制御するＮＡＮＤコントローラ１１と、を有している。
【００１２】
ＮＡＮＤメモリ１０は、例えば、４並列動作を行う４つの並列動作要素１０ａ〜１０ｄを有し、４つの並列動作要素１０ａ〜１０ｄは、４つのチャネルなどによってＮＡＮＤコントローラ１１に接続されている。
【００１３】
各並列動作要素１０ａ〜１０ｄは、バンクインターリーブが可能な複数のバンク（例えば４バンク）によって構成されており、各バンクは、複数のＮＡＮＤメモリチップ（例えば２メモリチップ）によって構成されている。各メモリチップは、例えば、それぞれ複数の物理ブロックを含むプレーン０、プレーン１の２つの領域（District）に分割されている。プレーン０およびプレーン１は、互いに独立した周辺回路（例えば、ロウデコーダ、カラムデコーダ、ページバッファ、データキャッシュ等）を備えており、倍速モードを使用することで、同時に消去／書き込み／読み出しを行うことが可能である。
【００１４】
このように、ＮＡＮＤメモリ１０の各ＮＡＮＤメモリチップは、複数のチャネルによる並列動作、複数のバンクによるバンクインターリーブ動作、複数のプレーンを用いた倍速モードによる並列動作が可能である。なお、各メモリチップは、４つのプレーンに分割された構成であってもよいし、あるいは、全く分割されていなくてもよい。本実施形態では、並列アクセスできる２つのブロックに対して、データの並列書き込みを行う場合について説明する。
【００１５】
ＤＲＡＭ２０は、ホスト１とＮＡＮＤメモリ１０との間でのデータ転送用キャッシュおよび作業領域用メモリなどとして機能する。ＤＲＡＭ２０の作業領域用メモリに記憶されるものとしては、管理テーブル２１、ユーザデータ２２、差分ログ２３Ｄがある。
【００１６】
管理テーブル２１は、ＮＡＮＤメモリ１０に記憶されている管理テーブル２１が起動時などに展開されたマスターテーブル（スナップショット）である。管理テーブル２１は、ホスト１から指定された論理アドレスと物理的なデータの記憶位置とを対応付ける管理情報を管理するための情報テーブルである。
【００１７】
また、差分ログ２３Ｄは、管理テーブル２１の変更差分である。ユーザデータ２２の書き込みや、管理テーブル２１へのデータの読み書きを行う際には、ＤＲＡＭ２０上に管理テーブル２１や差分ログ２３Ｄが展開される。
【００１８】
管理テーブル２１の差分である差分ログ２３Ｄは、ユーザデータ２２の書き込みや保存先ブロックの変更などがあった場合にＤＲＡＭ２０上にいったん保存されるが、一定量たまったところで、差分ログ２３ＮとしてＮＡＮＤメモリ１０に書き込まれる。これをログのコミットという。換言すると、ＳＳＤ１００は、ＳＳＤ１００が動作している間、ログのコミットとして、所定のタイミングで、差分ログ２３Ｄを管理テーブル２１に反映するとともに、差分ログ２３ＮとしてＮＡＮＤメモリ１０に保存する。また、ＳＳＤ１００は、ＳＳＤ１００が動作している間、所定のタイミングで管理テーブル２１をＮＡＮＤメモリ１０に保存する。
【００１９】
具体的には、ＤＲＡＭ２０上では、差分ログ２３Ｄとなる各ログデータが順番に時系列で並ぶよう記憶される。そして、コミットの処理タイミング毎に、差分ログ２３Ｄが差分ログ２３ＮとしてＮＡＮＤメモリ１０に書き込まれる。ＮＡＮＤメモリ１０では、差分ログ２３Ｎが順番に時系列で並ぶよう記憶される。そして、管理テーブル２１（スナップショット）のＮＡＮＤメモリ１０への保存が終了すると、管理テーブル２１を保存する前にＮＡＮＤメモリ１０に書き込まれた差分ログ２３Ｎは、復元処理で不要になる。
【００２０】
本実施形態では、例えば、最新の差分ログ２３Ｎと、１つ前に記憶した差分ログ２３Ｎと、をＮＡＮＤメモリ１０に記憶しておく。そして、最新の差分ログ２３ＮをＮＡＮＤメモリ１０に記憶させたことが確定した時点で、１つ前に記憶した差分ログ２３Ｎを記憶していた記憶領域を、新たなデータ記憶領域として開放する。
【００２１】
なお、ＤＲＡＭ２０の代わりに、ＦｅＲＡＭ（Ferroelectric  Random  Access  Memory）、ＭＲＡＭ（Magnetoresistive  Random  Access  Memory）、ＰＲＡＭ（Phase  change  Random  Access  Memory）などを使用してもよい。
【００２２】
ＮＡＮＤコントローラ１１は、ホスト１とＮＡＮＤメモリ１０との間でＤＲＡＭ２０を介してデータ転送制御を行う。また、ＮＡＮＤコントローラ１１は、ＮＡＮＤメモリ１０内でのデータの消去、書き込み、読み出し、読み出しエラー判定、消去済み判定などを行う。本実施形態のＮＡＮＤコントローラ１１は、ＮＡＮＤメモリ１０のデータの並列書き込みを行なう機能を有している。
【００２３】
データ管理部であるコントローラ３０は、ＤＲＡＭ２０内のデータをＮＡＮＤメモリ１０に記憶させる機能や、ＮＡＮＤメモリ１０内のデータをＤＲＡＭ２０上に復元する機能を有する。コントローラ３０は、ＮＡＮＤメモリ１０に記憶された管理テーブル２１をシステム起動時にＤＲＡＭ２０に転送する。また、コントローラ３０は、管理テーブル２１を更新すべき事象が発生した際、ＤＲＡＭ２０に記憶されている管理テーブル２１の更新前後の差分情報を差分ログ２３ＤとしてＤＲＡＭ２０に記憶させる。また、コントローラ３０は、所定の条件が成立したときにＤＲＡＭ２０に記憶された差分ログ２３ＮをＮＡＮＤメモリ１０に順次追記記憶させるとともにＤＲＡＭ２０に記憶された差分ログ２３Ｄの内容をＤＲＡＭ２０に記憶されている管理テーブル２１に反映する。
【００２４】
また、本実施形態のコントローラ３０は、差分ログ２３Ｎを並列書き込み処理によって多重化してＮＡＮＤメモリ１０に記憶させた後、ＤＲＡＭ２０に記憶される差分ログ２３Ｄのうち、ＮＡＮＤメモリ１０に最後に記憶されたページを再度、並列書き込み処理によって多重化してＮＡＮＤメモリ１０に記憶させる。また、コントローラ３０は、ＳＳＤ１００内の各構成要素を制御する。コントローラ３０は、書き込み制御部３１と、復元制御部３２と、を備えている。
【００２５】
書き込み制御部３１は、管理テーブル２１に基づいてデータの読み書き制御を行う。書き込み制御部３１は、例えば、ＤＲＡＭ２０内のデータをＮＡＮＤメモリ１０内に保存するための書き込み制御を行う。
【００２６】
復元制御部３２は、ＮＡＮＤメモリ１０に書き込まれた差分ログ２３Ｎのデータ状態に基づいて、（１）前回正常なシステム停止が行われたか、（２）不正な電源断が行われたか、（３）データ破壊が発生しているかの状態判断を行う。復元制御部３２は、前回正常なシステム停止が行われた場合に、ＮＡＮＤメモリ１０内の差分ログ２３ＮをＤＲＡＭ２０上に復元する。また、復元制御部３２は、不正な電源断が行われたと判断した場合またはデータ破壊が発生したと判断した場合に、ＮＡＮＤメモリ１０内で復元可能なデータのみを復元させる。
【００２７】
不揮発にデータを保持するためには、データをどこにどのように保存しているかといった内容を持つ管理テーブル２１自体も不揮発に保存しておく必要がある。この管理テーブル２１は、起動時に、不揮発性のＮＡＮＤメモリ１０から揮発性のＤＲＡＭ１０に展開され、展開された管理テーブル２１はデータの書き込みによって更新される。記憶容量の大容量化とともに、管理テーブル２１も大きくなるので、書き込みデータに変更が発生するたびに管理テーブル２１全体をＮＡＮＤメモリ１０に保存していては、ＮＡＮＤメモリ１０の書き込み効率、ＮＡＮＤメモリ１０の寿命、保存に伴う処理時間といった影響が発生してしまう。
【００２８】
そのため、管理テーブル２１は、ある時点での管理テーブル２１全体のスナップショットと、スナップショットを保存した時点からの変更差分ログ（差分ログ２３Ｎ）という形式で保存しておく。そして、通常は変更差分としての差分ログ２３ＮだけをＮＡＮＤメモリ１０に記憶していく。本実施形態では、ＮＡＮＤメモリ１０の書き込み効率が向上するよう、差分ログ２３Ｎを並列書き込みによってＮＡＮＤメモリ１０に２重化記憶させる。
【００２９】
ところで、動作中に不意の電源断が行なわれた場合（不正な電源断が発生した場合）であっても、記憶したデータを保持（復元）することが望まれる。例えば、ＤＲＡＭ２０上に展開された管理テーブル２１（マスターテーブル）は、電源が切れても、電源が切れる以前の状態に復元する必要があり、このためマスターテーブルを不揮発性のＮＡＮＤメモリ１０に保存する仕組みが必要となる。スナップショットは、ＮＡＮＤメモリ１０上の不揮発性の管理テーブル２１の全体を指し、ＤＲＡＭ２０に展開されたマスターテーブルをそのままＮＡＮＤメモリ１０に保存することを、スナップショットをとるとも表現する。
【００３０】
また、記憶したデータを復元する際には、管理テーブル２１の整合性を取るために、正常な電源断シーケンスが行なわれたか、不正な電源断が行なわれたかを判断する必要がある。また、管理テーブル２１にデータ破壊がある場合、データを適切に読み書きできないだけでなく、ＳＳＤ１００またはＳＳＤ１００を搭載するシステムに２次的な故障を誘引する可能性がある。このため、管理テーブル２１にデータ破壊が有る状態でＳＳＤ１００を動作させることは回避する。
【００３１】
例えば、メモリなどは、データのWrite/Erase回数の増大による劣化、Readの繰り返しによる劣化、経年劣化などによって不良率が増加する傾向にある。このため、書き込み時にデータの書き込みが成功していてもデータ破壊が発生する場合がある。そこで、管理テーブル２１においてデータ破壊が発生した場合は、データ破壊を検出して通常動作しないようにする。特に、差分ログ２３Ｎは時系列で保存されるので、途中のデータが不正なデータである場合や、差分ログ２３Ｎに抜けがあると整合性が取れなくなる。このため、本実施形態では、システム起動処理で管理テーブル２１の復元を行なう際（電源オン後の初期化処理時）に、不正な電源断の発生およびデータ破壊を検出することによってＳＳＤ１００の信頼性を高める。
【００３２】
ＮＡＮＤメモリ１０は、データを書き込むためにはその前に消去を必要とする。また、ＮＡＮＤメモリ１０では、消去単位と書き込み単位が異なる。ＮＡＮＤメモリ１０は、例えば、消去単位がブロック単位であり、かつ書き込み単位がページ単位であり、かつ書き込み順序が連続するよう規定されている。
【００３３】
ＳＳＤ１００に搭載されているＮＡＮＤコントローラ１１は、バンク単位やチャネル単位で並列にデータの書き込み、または書き込みと読み出しを行なうことができるインタフェースを有している。ＮＡＮＤコントローラ１１は、並列にアクセスできるブロックへの書き込みを並列で行なうことで書き込み時間を短縮する。本実施形態では、これらのＮＡＮＤメモリ１０のデバイス特性（並列書き込み）およびＮＡＮＤコントローラ１１の仕組みを利用して差分ログ２３Ｎの書き込み状態（不正な電源断の発生など）を判定する。
【００３４】
図２は、スナップショットとログの生成形態を概念的に示す図である。図２では、データ更新時に、スナップショットとログがどのように更新されるかを示している。コントローラ（データ管理部）３０がデータ更新する際に、マスターテーブル（ＤＲＡＭ上の管理テーブル）に加えた変更内容をＤＲＡＭ２０上の差分ログ２３Ｄに蓄積する。管理テーブルの種類によっては、マスターテーブルを直接更新し、更新内容を差分ログ２３Ｄに蓄積したり、マスターテーブルには直接変更を加えず、変更領域を差分ログ２３Ｄ上に確保して、その領域に更新内容を記憶したりする。データの読み書き処理の際には、マスターテーブルの他に蓄積された差分ログ２３Ｄも参照する。
【００３５】
コントローラ３０は、データの更新が安定したら、ログのコミットを行う。コミット処理では、差分ログ２３Ｄの内容を必要に応じてマスターテーブルに反映させ、さらに差分ログ２３Ｄの内容を差分ログ２３ＮとしてＮＡＮＤメモリ１０に保存して不揮発化する。これにより、前回のコミットまでのデータが保証される。
【００３６】
スナップショットをＮＡＮＤメモリ１０に保存するのは、正常な電源断シーケンスの際、ログの保存領域が不足した場合などとする。差分ログ２３ＮまたはスナップショットをＮＡＮＤメモリ１０に書き終わった時点で、管理テーブルの不揮発化が完了する。
【００３７】
図３は、差分ログの並列書き込みタイミングを説明するための図である。ＳＳＤ１００では、差分ログ２３Ｎを２重化して書き込む先のブロックを、並列書き込み可能なブロックから採用して同時に書き込みを行なう。
【００３８】
例えば、ＳＳＤ１００は、差分ログ２３Ｎとして、最後のページ以外の第１のデータ５１Ａと、最後のページ（末尾のページ）である最終ページ５２Ａと、最終ページ５２Ａと同じデータである最終ページ５３Ａと、をＮＡＮＤメモリ１０に書き込む。同様に、ＳＳＤ１００は、差分ログ２３Ｎとして、最後のページ以外の第１のデータ５１Ｂと、最後のページである最終ページ５２Ｂと、最終ページ５２Ｂと同じデータである最終ページ５３Ｂと、をＮＡＮＤメモリ１０に書き込む。ＳＳＤ１００では、第１のデータ５１Ａと、最終ページ５２Ａと、を領域５０Ａに書き込み、第１のデータ５１Ｂと、最終ページ５２Ｂと、を領域５０Ｂに書き込む。このとき、ＳＳＤ１００では、領域５０Ａへの書き込みと、領域５０Ｂへの書き込みと、をページ単位で同時に行う。
【００３９】
ＮＡＮＤメモリ１０に対して単純に同時にデータを書くと、書き込み中に不正な電源断が発生した場合にどこまで書いた状態であったかの判断が難しくなり、読めないページについて劣化などによるデータ破壊との区別が困難となる。そのため、本実施形態では、書き込み予定データ（差分ログ２３Ｎ）の最後のページにあたる最終ページを、タイミングをずらして２回書き込むことにより、冗長化のための２重化と不正電源断判定のための２重化を行う。
【００４０】
具体的には、領域５０Ａ内に最終ページ５２Ａを書き込んだ後、最終ページ５３Ａを書き込む。また、領域５０Ｂ内に最終ページ５２Ｂを書き込んだ後、最終ページ５３Ｂを書き込む。換言すると、最後のページ以外は並列に書き込み、最後のページについては時間差で最終ページ５２Ａおよび最終ページ５３Ａに合計２回書き込むとともに、時間差で最終ページ５２Ｂおよび最終ページ５３Ｂに合計２回書き込む。ＳＳＤ１００では、例えば、最終ページ５３Ａの書き込みと、最終ページ５３Ｂの書き込みと、を同時に行う。これにより、差分ログ２３Ｎのうち最終ページに対応するデータは、４重化されることとなる。このような書き込みは、書き込み制御部３１によって行なわれる。
【００４１】
なお、以下の説明では、説明の便宜上、第１のデータ５１Ａの直後に書き込まれる最終ページ５２Ａや第２のデータ５１Ｂの直後に書き込まれる最終ページ５２Ｂを、１回目の最終ページという場合がある。また、最終ページ５２Ａの後に書き込まれる最終ページ５３Ａや最終ページ５２Ｂの後に書き込まれる最終ページ５３Ｂを、２回目の最終ページという場合がある。
【００４２】
領域５０Ａ，５０Ｂへの第１のデータ５１Ａ，５１Ｂおよび最終ページ５２Ａ，５２Ｂの書き込み時間がｔ１であり、１回目の最終ページを書き込んでから２回目の最終ページを書き終わるまでの時間がｔ２である場合、差分ログ２３Ｎの書き込みに要する時間はｔ１＋ｔ２となる。
【００４３】
図４は、差分ログを並列で書き込まず、連続処理で２回書き込む場合の書き込みタイミングを説明するための図である。ＤＲＡＭ２０上の差分ログ２３ＤをＮＡＮＤメモリ１０へ並列で書き込まず、連続処理で２回書き込む場合、ＳＳＤ１００では、差分ログ２３Ｄを領域５０Ａに書き込む。その後、ＳＳＤ１００は、もう１度差分ログ２３Ｄを領域５０Ｂに書き込む。このように、差分ログ２３Ｄを２回に渡ってＮＡＮＤメモリ１０に書き込む場合、差分ログ２３Ｄの書き込みに要する時間は２×ｔ１となる。換言すると、ログ保存の２重化のために連続処理で差分ログ２３Ｄを２回書き込む場合、データサイズあたりの書き込み時間の倍の時間がかかることとなる。
【００４４】
ｔ２は、ｔ１よりも短い時間なので、差分ログ２３Ｎを並列書き込みによってＮＡＮＤメモリ１０に書き込むことにより、差分ログ２３Ｄを連続処理で２回書き込む場合よりも短時間で差分ログ２３Ｎを保存することが可能となる。このように、ＳＳＤ１００は、差分ログ２３Ｎの並列書き込みにより、書き込みデータサイズが大きい場合であっても短時間で差分ログ２３Ｎを保存することが可能となる。
【００４５】
図５は、差分ログの並列書き込み位置を説明するための図である。ＳＳＤ１００は、ＮＡＮＤメモリ１０内で並列書き込み可能なバンク、チップ、チャネルなどの単位から並列書き込み可能なブロックを２つ選択し、各ブロックに差分ログ２３Ｎを書き込む。図５では、並列書き込み可能なブロックとして、ブロック５５Ａとブロック５５Ｂが選択された場合を示している。
【００４６】
ＳＳＤ１００は、ＤＲＡＭ２０上の差分ログ２３Ｄをページ単位でブロック５５Ａ，５５Ｂに保存する。ブロック５５Ａには、第１のデータ５１Ａ、１回目の最終ページ５２Ａ、２回目の最終ページ５３Ａの順番で、ページ単位でデータの書き込みが行われる。同様に、ブロック５５Ｂには、第２のデータ５１Ｂ、１回目の最終ページ５２Ｂ、２回目の最終ページ５３Ｂの順番で、ページ単位でデータの書き込みが行われる。なお、２回目の最終ページ５３Ａ，５３Ｂよりも後のページは、未書き込み（Erase）のページ（未書き込みページ５６）のままである。
【００４７】
つぎに、コミット時における差分ログ２３ＮのＮＡＮＤメモリ１０への書き込み手順について説明する。
（ステップ１）書き込み制御部３１は、コミット対象となるＤＲＡＭ２０上の差分ログ２３Ｄのサイズを求める。
（ステップ２）書き込み制御部３１は、差分ログ２３Ｄのログサイズから、ＮＡＮＤメモリ１０へのデータの書き込みページ数Ｘとして、２回目の最終ページを除いた差分ログ２３Ｎの書き込みページ数を求める。
（ステップ３）書き込み制御部３１は、ＮＡＮＤメモリ１０に保存する差分ログ２３Ｎのヘッダ部に、書き込みページ数Ｘを格納して、ログデータとしての差分ログ２３Ｎを作成する。
（ステップ４）書き込み制御部３１は、書き込み先のＮＡＮＤメモリ１０のブロックであるＮＡＮＤブロックを未確保であれば確保する。確保するＮＡＮＤブロックは並列書き込み可能なブロックとする。
（ステップ５）書き込み制御部３１は、書き込み先のＮＡＮＤブロックに対し未書き込みであれば、確保したＮＡＮＤブロックをブロック単位で消去する。
（ステップ６）書き込み制御部３１は、書き込み先のＮＡＮＤブロックの書き込み先ページを確認する。
（ステップ７）書き込み制御部３１は、ページ（Ｘ−１）までは並列に差分ログ２３Ｎのデータを書き込む。
（ステップ８）書き込み制御部３１は、ページ（Ｘ−１）までの書き込みから時間をずらしてページＸへのデータをＮＡＮＤブロックに書き込む。
【００４８】
つぎに、２重化されて保存された差分ログ２３Ｎの読み出し処理について説明する。図６は、差分ログのＮＡＮＤメモリからの読み出し処理を説明するための図である。差分ログ２３Ｎのデータは、ページ単位でＮＡＮＤメモリ１０に追記されていく。例えば、１回目のコミットＴ１として、ブロック５５Ａに第１のデータ５１Ａとしてのページｐ０、ページｐ１、ページｐ２がこの順番で書き込まれ、その後、最終ページとしてのｐ３，ｐ３’が書き込まれる。このとき、ブロック５５Ｂには、第１のデータ５１Ｂとしてのページｐ０、ページｐ１、ページｐ２がこの順番で書き込まれ、その後、最終ページとしてのｐ３，ｐ３’が書き込まれる。
【００４９】
この後、次のコミットタイミングになると、２回目のコミットＴ２として、ブロック５５Ａに第１のデータ５１Ａとしてのページｐ１０、ページｐ１１、ページｐ１２がこの順番で書き込まれ、その後、最終ページとしてのｐ１３，ｐ１３’が書き込まれる。このとき、ブロック５５Ｂには、第１のデータ５１Ｂとしてのページｐ１０、ページｐ１１、ページｐ１２がこの順番で書き込まれ、その後、最終ページとしてのｐ１３，ｐ１３’が書き込まれる。
【００５０】
ログのコミットは、管理テーブル２１の整合性の取れる区切りのよいタイミングで行なわれ、ＳＳＤ１００が起動中は随時、差分ログ２３Ｎが追記されていくことになる。このため、図６のように連続して書かれたブロック５５Ａ，５５Ｂでは、どこまでが一区切りのコミットデータなのかを判別する必要となる。一度に書き込む差分ログ２３Ｎ（ログデータ）の量は、目的に応じて固定サイズ、固定ページでもよいが、一般的にはどのような動作を行なうかによって管理テーブル２１の変更差分が変わるので、可変サイズになる。そのため、差分ログ２３Ｎのフォーマットのヘッダ領域に、ログコミットサイズまたは書き込みページ数、あるいはその両方を保持するものとする。これにより、先頭ページを読み出してヘッダ部に格納されたデータサイズまたは書き込みページ数を読み出せば、該当のコミットログの書き込みページ数を認識することが可能となる。
【００５１】
差分ログ２３Ｎは、追記されていくので、システム起動時に差分ログ２３Ｎを読み出す際には、１度の書き込み単位のサイズ毎に差分ログ２３Ｎのデータを読み出していく。例えば、一度に書き込む差分ログ２３Ｎの量が１０ページ分である場合、差分ログ２３Ｎの読み出しは、１０ページ分のデータ毎に行われる。そして、差分ログ２３Ｎを読み出す際には、１回目の最終ページの次のページである２回目の最終ページまで読み出す。これにより、書き込み処理中の不正電源断を認識できるようにする。
【００５２】
つぎに、ＮＡＮＤメモリに保存された差分ログのデータ状態について説明する。図７は、ＮＡＮＤメモリ１０に保存された差分ログ２３Ｎのデータ状態を説明するための図である。
【００５３】
ＳＳＤ１００では、システム起動時に、差分ログ２３Ｎを順次、読み出して、差分ログ２３Ｎの変更内容をマスターテーブルである管理テーブル２１に順次反映していくことで、パワーサイクルをまたいだ継続動作を実現する。差分ログ２３Ｎの読み出し単位は、ページ単位で行なわれ、読み出しエラーの発生状態などに基づいて書き込み時の状況が判断される。
【００５４】
図７は、差分ログ２３Ｎが正常に書かれた状態を示している。すなわち、差分ログ２３Ｎが正常に書かれた場合、ブロック５５Ａ，５５Ｂにそれぞれ、読み出し可能なページ（ページｐ０，ｐ１，ｐ２，ｐ３，ｐ３’）が保存される。そして、２回目の最終ページであるページｐ３’の次のページ以降は、消去済みのページであり、この消去済みのページを読み出そうとすると、読み出しエラー（Read  Error）が発生する。
【００５５】
ＮＡＮＤメモリ１０では、決められたブロック単位で消去を行う必要があるので、最初のページの書き込み前にブロックが消去されている必要がある。また、ページｐ０から順番に書き込みを行なう必要があり、ページｐ０を書いた後にページ１００から続きを書く、というような使い方ができない。そのため、図７に示すように、例えば、ページｐ０からページｐ３までの４ページ分のログデータを書き込んだ場合、タイミングをずらして書いた最終ページｐ３’を含めた５ページ分のデータが書かれていることになる。そして、最終ページｐ３’以降のデータ未書き込みのページは消去済みの状態となっている。消去済みのページかどうかは、通常の読み出しと異なる方法で読み出しを行うことによって判定できる。ここでは、その判定処理を消去済み判定と呼ぶ。ＳＳＤ１００では、ＮＡＮＤコントローラ１１が消去済み判定の機能を有しているとする。消去済み判定の機能については、特開２００９−２１７３９１号公報に開示されている。なお、ＳＳＤ１００は、各ブロックの最終書き込みページを別途管理する機能を有していてもよく、この場合消去済み判定の機能は不要となる。
【００５６】
ここで、ＮＡＮＤメモリ１０による差分ログ２３Ｎの記憶が記憶異常である場合の、差分ログ２３Ｎのデータ状態（記憶状態）について説明する。差分ログ２３Ｎの記憶異常状態は、差分ログ２３ＮをＮＡＮＤメモリ１０に記憶させる際に不正電源断発生した場合、または差分ログ２３ＮをＮＡＮＤメモリ１０に記憶させた後にＮＡＮＤメモリ１０でデータ破壊が発生した場合に発生する。図８は、不正電源断が発生した場合の差分ログのデータ状態の一例を示す図である。また、図９は、データ破壊が発生した場合の差分ログのデータ状態の一例を示す図である。
【００５７】
図８に示すように、差分ログ２３Ｎ（ページｐ１）の書き込み中に不正電源断が発生した場合、不正電源断によりデータ書き込みが正常に行なえなかったページｐ１はエラーページＰｘとなる。この場合、書き込み失敗のエラーページＰｘの次のページは未書き込みのため消去済みページＰｙとなる。
【００５８】
なお、エラーページとなるページが、先頭のページとなる場合や末尾のページとなる場合もある。この場合であっても、ページ単位で追記していくので、書き込み失敗のエラーページの次のページは未書き込みのため消去済みページになるという状況は同じである。
【００５９】
また、図９に示すように、差分ログ２３Ｎの書き込み時にはそのコミットの書込みが正常終了したにも関わらずＮＡＮＤメモリ１０のデータ破壊が発生した場合、書き込みの最後のページ位置までデータが書かれているが途中のどこかのページで読み出しエラーが発生することになる。この場合、エラーページＰｘの次のページはデータが書かれている状態である。もちろん、末尾のページを正常に書いたにも関わらず末尾のページでデータ破壊による異常が発生することもありえる。
【００６０】
そのため、本実施形態では、末尾のページである最終ページを２回書くことにより、最後のコミットログを反映してよいのか、起動時にエラーとすべきなのかを判別する。換言すると、復元制御部３２は、末尾のページを２重化することにより、不正電源断による読み出しエラーであるのか、データ破壊による読み出しエラーであるのかを判別する。なお、末尾の２重化のうちどちらか一方がデータ破壊により失われていても、もう一方が正しく書かれている場合には、正しく書かれているページまでのコミットログを反映することが可能である。
【００６１】
図１０は、不正電源断とデータ破壊の分類処理手順を示す図である。図１０では、読み出し状態のパターン分類処理手順を示している。ここでは、１コミットあたりの読み出しの処理について示しており、このフローの終了状態は、差分ログ２３ＮのＤＲＡＭ２０への反映である。
【００６２】
ＮＡＮＤコントローラ１１は、１コミットあたりの差分ログ２３Ｎを読み出し、その差分ログ２３Ｎの変更内容を管理テーブル２１へ反映する処理を繰り返す。このとき、復元制御部３２は、差分ログ２３Ｎの保存されているＮＡＮＤブロックのページ末尾が消去済みページであるか否かに基づいて、差分ログ２３Ｎの終端を判断する。
【００６３】
復元制御部３２は、ＳＳＤ１００を起動する際に、Stage１の処理として、読み出し対象となるＮＡＮＤブロックのページ位置を確認する。そして、復元制御部３２は、ＮＡＮＤコントローラ１１を介して、ＮＡＮＤメモリ１０内から差分ログ２３Ｎの第１ページを読み出す（１page  Read）。
【００６４】
読み出したページが、消去済みページ（Erase）である場合（Ｓ１）、差分ログ２３Ｎがそれ以前のコミットで終端となっているか、または差分ログ２３が保存されていない状態である。この場合、復元制御部３２は、差分ログ２３Ｎには続きがないと判断する。そして、復元制御部３２は、差分ログ２３Ｎは正常区切りされてDATE  END（正常な電源断）になっていると判断し（Ｓ２）、差分ログ２３Ｎの管理テーブル２１への反映処理を終了する。
【００６５】
また、読み出したページが、エラーページ（Error）である場合（Ｓ３）、復元制御部３２は、コミットログヘッダからコミットページサイズＥを取得することができず、読み出し継続不能となる（Ｓ４）。このため、読み出し処理を終了する。
【００６６】
また、読み出したページが正常なデータ（Data）である場合（Ｓ５）、復元制御部３２は、コミットログヘッダからコミットページサイズＥを取得する。これにより、差分ログ２３ＮのページEndが分かる（Ｓ６）。この後、ＳＳＤ１００では、Stage２の処理が行われる。
【００６７】
復元制御部３２は、Stage２の処理として、読み出し対象となるＮＡＮＤブロックのページ位置を確認する。そして、復元制御部３２は、ＮＡＮＤコントローラ１１を介して、ＮＡＮＤメモリ１０内から差分ログ２３Ｎの第２ページを読み出す（１page  Read）。
【００６８】
読み出したページに、エラーの疑いがある場合、ＮＡＮＤコントローラ１１は、読み出したページの消去済み判定を行う。これにより、エラーの疑いがあるページが消去済みページ（Erase）であるか、エラーページ（Error）であるかが判定される。
【００６９】
読み出したページが、消去済みページ（Erase）である場合（Ｓ７）、復元制御部３２は、読み出したページの箇所で不正電源断が発生したと判断する（Ｓ８−１）。また、復元制御部３２は、読み出したページのページ数Ｒが、コミットページサイズＥと一致するか否かを判定する。
【００７０】
そして、現在読み出ししたページ数ＲがコミットページサイズＥと一致する場合（読み出ししたページがページEndである場合）、復元制御部３２は、末尾２重化のうちの１つ目（１回目の最終ページ）が書かれたところまでで不正電源断が発生したと判断し、反映処理に移行する。具体的には、復元制御部３２は、ＮＡＮＤメモリ１０内の差分ログ２３Ｎのうち、最終ページまで読み出すことのできた差分ログ２３Ｎを管理テーブル２１に反映する（Ｓ８−２）。
【００７１】
一方、現在読み出ししたページ数ＲがコミットページサイズＥと一致しない場合、復元制御部３２は、差分ログ２３の途中までＮＡＮＤメモリ１０に書かれた状態で不正電源断が発生したと判断し、ログの終端であると判断する。
【００７２】
また、読み出したページが、消去済みページ（Erase）でなければ、読み出したページは、エラーページ（Error）である。読み出したページが、エラーページ（Error）である場合（ｓ９）、復元制御部３２は、前回の読み出しページ（LAST_PAGE）が読み出し成功か否かを判定する。換言すると、前のページがエラーページであるか否かが判定される（Ｓ１０）。
【００７３】
前回の読み出しページ（LAST_PAGE）がエラーページでない場合（Ｓ１０、Ｎｏ）、復元制御部３２は、２ページ目以降の読み込みを行う。この場合、復元制御部３２は、続きを読む処理として、Stage２の処理（第３ページ以降の読み出し処理）を最初から実行する。一方、前回の読み出しページ（LAST_PAGE）がエラーページである場合（Ｓ１０、Ｙｅｓ）、２ページ連続でエラーページとなっているので、復元制御部３２は、データ破壊が発生していると判断し（Ｓ１１）、故障状態に移行する。
【００７４】
また、読み出したページが正常なデータ（Data）である場合（ｓ１２）、復元制御部３２は、前回の読み出しページ（LAST_PAGE）が読み出し成功か否かを判定する。前回の読み出しページが読み出し成功の場合（前のページ＝データページの場合）（Ａ）、復元制御部３２は、現在読み出ししたページのページ数ＲがコミットページサイズＥと一致するか否かを判定する（Ｓ１３）。
【００７５】
現在読み出ししたページ数ＲがコミットページサイズＥと一致する場合（読み出ししたページがページEndである場合）（Ｓ１３、Ｙｅｓ）、復元制御部３２は、ページの読み出しが、コミットログの一区切りまで到達したと判断する。そして、復元制御部３２は、読み出したデータを管理テーブル２１に反映する処理へ移行する（Ｓ１４）。
【００７６】
一方、現在読み出ししたページ数ＲがコミットページサイズＥと一致しない場合（読み出ししたページがページEndでない場合）（Ｓ１３、Ｎｏ）、復元制御部３２は、コミットログに続きがあると判断する。そして、復元制御部３２は、続きを読む処理として、Stage２の処理を最初から実行する。
【００７７】
また、読み出したページが正常なデータ（Data）であって（Ｓ１２）、且つ前回の読み出しページが読み出し不成功の場合（前のページ＝エラーページの場合）（Ｂ）、復元制御部３２は、現在読み出ししたページのページ数ＲがコミットページサイズＥと一致するか否かを判定する（Ｓ１５）。
【００７８】
現在読み出ししたページ数ＲがコミットページサイズＥと一致する場合（読み出ししたページがページEndである場合）（Ｓ１５、Ｙｅｓ）、復元制御部３２は、末尾２重化分のもう一方のデータ（１回目の最終ページ）（時差２重化分）で管理テーブル２１を復元可能なので（Ｓ１６）、復元制御部３２は、１回目の最終ページを用いて、反映処理へ移行する（Ｓ１７）。換言すると、差分ログ２３Ｎを用いて管理テーブル２１を復元する際に、２回目の最終ページを、１つ前のページにコピーする（１回目の最終ページの位置に２回目の最終ページ書き込む）ことによって、管理テーブル２１を復元する。
【００７９】
一方、現在読み出ししたページ数ＲがコミットページサイズＥと一致しない場合（読み出ししたページがページEndでない場合）（Ｓ１５、Ｎｏ）、復元制御部３２は、差分ログ２３Ｎの途中でエラー（故障）が発生していると判断する（Ｓ１８）。この場合、復元制御部３２は、データ破壊が発生していると判断し、故障状態に移行する。故障状態となった場合、ＳＳＤ１００は、差分ログ２３ＮをＤＲＡＭ２０上に復元させない。
【００８０】
このように、本実施形態では、読み出しエラーとなった場合の不正電源断とＮＡＮＤメモリ１０のデータ破壊の判別を、エラーページの次のページを読み出してエラー判定および消去済み判定することにより実現する。
【００８１】
上述した図１０の処理によって、不正電源断が発生した場合の差分ログ２３Ｎの読み出し状態と、データ破壊が発生した場合の差分ログ２３Ｎの読み出し状態と、が種々分類される。そして、分類された差分ログ２３Ｎの読み出し状態毎に、管理テーブル２１の復元、故障状態への遷移などが行われる。
【００８２】
図１１は、差分ログの読み出し状態の分類例を示す図である。図１１では、データの書き込まれたページを「データ」（written）で示し、データの読み出せないエラーページを「エラー」（Error）で示し、消去済みのページを「消去」（Erased）で示している。また、データの読み出しを行っていないページを「未読」で示している。
【００８３】
図１１の（ａ）〜（ｃ）は、２回目の最終ページを除いた差分ログ２３Ｎのページ数が、差分ログ２３Ｎのヘッダ部に格納されている書き込みページ数Ｘよりも少ない場合の読み出し状態（データ状態）を示している。また、図１１の（ｄ）〜（ｊ）は、２回目の最終ページを除いた差分ログ２３Ｎのページ数が、書き込みページ数Ｘと同数である場合の読み出し状態を示している。また、図１１の（ｋ）〜（ｍ）は、先頭のページｐ０を読み出せず、書き込みページ数Ｘを差分ログ２３Ｎのヘッダ部から読み出せなかった場合の読み出し状態を示している。
【００８４】
図１１の（ａ）は、１回目の最終ページｐ３よりも前のページであるページｐ２が消去済みページであり、且つ１回目の最終ページｐ３が消去済みページである場合を示している。この場合、ページｐ２にデータが書き込まれる前（ページｐ１にデータが書き込まれた後）に、不正電源断が発生したと判断される。
【００８５】
図１１の（ｂ）は、１回目の最終ページｐ３よりも前のページであるページｐ２がエラーページであり、且つ１回目の最終ページｐ３が消去済みページである場合を示している。この場合、ページｐ２へのデータを書き込み中に、不正電源断が発生したと判断される。このように、図１１の（ａ）、（ｂ）の場合、消去済みページまたはエラーページの次のページが消去済みページ（未書き込み）であるので、不正電源断が発生したと判断される。
【００８６】
図１１の（ｃ）は、ページｐ２がエラーページであり、且つ１回目の最終ページｐ３がエラーページである場合を示している。この場合、エラーページが２ページ連続しているので、ページｐ２と１回目の最終ページｐ３でデータ破壊が発生したと判断される。
【００８７】
図１１の（ｄ）は、１回目の最終ページｐ３が消去済みページであり、且つ２回目の最終ページｐ３’が消去済みページである場合を示している。この場合、１回目の最終ページｐ３にデータが書き込まれる前（ページｐ２にデータが書き込まれた後）に、不正電源断が発生したと判断される。
【００８８】
図１１の（ｅ）は、１回目の最終ページｐ３がエラーページであり、且つ２回目の最終ページｐ３’が消去済みページである場合を示している。この場合、１回目の最終ページｐ３へのデータを書き込み中に、不正電源断が発生したと判断される。このように、図１１の（ｄ）、（ｅ）の場合、消去済みページまたはエラーページの次のページが消去済みページであるので、不正電源断が発生したと判断される。
【００８９】
図１１の（ｆ）は、１回目の最終ページｐ３がエラーページであり、且つ２回目の最終ページｐ３’がエラーページである場合を示している。この場合、エラーページが２ページ連続しているので、１回目の最終ページｐ３と２回目の最終ページｐ３’でデータ破壊が発生したと判断される。
【００９０】
図１１の（ｇ）は、１回目の最終ページｐ３までは、正常なデータページであり、且つ２回目の最終ページｐ３’が消去済みページである場合を示している。この場合、２回目の最終ページｐ３’にデータが書き込まれる前（１回目の最終ページｐ３にデータが書き込まれた後）に、不正電源断が発生したと判断される。図１１の（ｈ）は、全てのページが正常なデータページである場合を示している。
【００９１】
図１１の（ｉ）は、１回目の最終ページｐ３がエラーページであり、且つ２回目の最終ページｐ３’が正常なデータページである場合を示している。この場合、１回目の最終ページｐ３でデータ破壊が発生したと判断される。この場合であっても、２回目の最終ページｐ３’が正常なデータページであるので、差分ログ２３Ｄに対応するログデータは、全てＮＡＮＤメモリ１０上に保存されていることになる。
【００９２】
図１１の（ｊ）は、１回目の最終ページｐ３よりも前のページであるページｐ２がエラーページであり、且つ１回目の最終ページｐ３が正常なデータページである場合を示している。この場合、差分ログ２３Ｎの途中ページ（最終ページ以外のページ）であるページｐ２でデータ破壊が発生したと判断される。
【００９３】
図１１の（ｋ）は、先頭ページであるページｐ１，ｐ２が消去済みページである場合を示している。この場合、ページｐ１にデータ書き込まれる前に、不正電源断が発生したと判断される。
【００９４】
図１１の（ｌ）は、先頭ページであるページｐ１がエラーページであり、且つその次のページであるページｐ２が消去済みページである場合を示している。この場合、ページｐ１でデータ破壊が発生したと判断される。
【００９５】
図１１の（ｍ）は、先頭ページであるページｐ１がエラーページであり、且つその次のページであるページｐ２がエラーページである場合を示している。この場合、エラーページが２ページ連続しているので、ページｐ１とページｐ２でデータ破壊が発生したと判断される。
【００９６】
図１１の（ａ），（ｂ），（ｄ），（ｅ），（ｋ），（ｌ）の場合、読み出せないページがあるので、復元制御部３２は、１つ前に保存しておいた差分ログ２３Ｎを用いて管理テーブル２１の復元を行う。
【００９７】
また、図１１の（ｃ），（ｆ），（ｊ），（ｍ）の場合、データ破壊が発生しているので、管理テーブル２１の復元は行われない。また、図１１の（ｇ），（ｈ），（ｉ）の場合、復元制御部３２は、図１１の（ｇ），（ｈ），（ｉ）に示した差分ログ２３Ｎを用いて管理テーブル２１の復元を行う。例えば、図１１の（ｇ）の場合、１回目の最終ページｐ３’を用いて管理テーブル２１の復元が行われ、図１１の（ｉ）の場合、２回目の最終ページｐ３’を用いて管理テーブル２１の復元が行われる。
【００９８】
例えば、図１１の（ｂ）に示した差分ログ２３Ｎの場合、図１０に示した処理手順に従うと、Stage１の処理でページｐ０が読み出される。ページｐ０は、正常なデータ（Data）であるので（ｓ５）、Stage２の処理を開始して、ページｐ１が読み出される。
【００９９】
ページｐ１は、正常なデータ（Data）であり（ｓ１２）、且つ前のページｐ０が正常なデータ（Data）であり（Ａ）、且つページｐ１はページEndではない（ｓ１３、Ｎｏ）。このため、Stage２の処理を再び開始して、ページｐ２が読み出される。
【０１００】
ページｐ２は、エラーページ（Error）であり（ｓ９）、且つ前のページｐ１がエラーページ（Error）ではない（ｓ１０、Ｎｏ）。このため、Stage２の処理を再び開始して、ページｐ３が読み出される。ページｐ３は、消去済みページ（Erase）であるので（ｓ７）、不正電源断であると判定される（ｓ８−１）。なお、ページｐ３は、ページEndではないので、復元は行われない。
【０１０１】
また、図１１の（ｊ）に示した差分ログ２３Ｎの場合、図１０に示した処理手順に従うと、Stage１の処理でページｐ０が読み出される。ページｐ０は、正常なデータ（Data）であるので（ｓ５）、Stage２の処理を開始して、ページｐ１が読み出される。
【０１０２】
ページｐ１は、正常なデータ（Data）であり（ｓ１２）、且つ前のページｐ０が正常なデータ（Data）であり（Ａ）、且つページｐ１はページEndではない（ｓ１３、Ｎｏ）。このため、Stage２の処理を再び開始して、ページｐ２が読み出される。
【０１０３】
ページｐ２は、エラーページ（Error）であり（ｓ９）、且つ前のページｐ１がエラーページ（Error）ではない（ｓ１０、Ｎｏ）。このため、Stage２の処理を再び開始して、ページｐ３が読み出される。ページｐ３は正常なデータ（Data）であり（ｓ１２）、且つ前のページｐ２はエラーページ（Error）であり（Ｂ）、且つページｐ３はページEndではない（ｓ１５、Ｎｏ）。このため、データ破壊（故障）と判断される（ｓ１８）。
【０１０４】
なお、書き込みページ数Ｘを確認することなく、不正電源断の発生かデータ破壊の発生かを区別して判断することができる場合は、書き込みページ数Ｘを確認することなく、不正電源断の発生かデータ破壊の発生かを区別して判断してもよい。
【０１０５】
このように、差分ログ２３Ｎのうち、連続する２ページの読み出し状態によって、不正電源断の発生かデータ破壊の発生かを区別して判断することができる。なお、本実施形態では、図５に示したように、差分ログ２３Ｎを２つのブロック５５Ａ，５５Ｂに並列書き込みして２重化している。このため、２重化された差分ログ２３Ｎのうち、一方のデータを読み出せない場合であっても、他方のデータを読み出せる場合には、読み出せたデータを用いて管理テーブル２１の復元を行う。
【０１０６】
図１２は、２重化されたページの取り扱い例を説明するための図である。図１２では、ｃｈ０（第１のブロック）に書き込まれた差分ログ２３Ｎの読み出し状態（並列書き込みされた一方のページのデータ状態）と、ｃｈ１（第２のブロック）に書き込まれた差分ログ２３Ｎの読み出し状態（並列書き込みされた他方のページのデータ状態）と、の組み合わせを示している。差分ログ２３Ｎの読み出し状態は、データの書き込まれたデータページ（written）、データの読み出せないエラーページ（Error）、消去済みの消去ページ（Erased）の何れかである。
【０１０７】
例えば、ｃｈ０のページまたはｃｈ１のページの少なくとも一方がデータページ（Written）である場合、データページ（Written）であるとして取り扱う。また、ｃｈ０のページまたはｃｈ１のページの両方がデータページ（written）でない場合であって、かつｃｈ０のページまたはｃｈ１のページの少なくとも一方がエラーページ（Error）である場合、エラーページ（Error）であるとして取り扱う。そして、ｃｈ０のページまたはｃｈ１のページの両方がデータページ（Written）でない場合であって、かつｃｈ０のページまたはｃｈ１のページの両方がエラーページ（Error）でない場合、消去ページ（Erased）として取り扱う。換言すると、ｃｈ０のページおよびｃｈ１のページの両方が消去ページである場合に、消去ページとして取り扱う。このように、ｃｈ０のページまたはｃｈ１のページの少なくとも一方にデータがあれば、データがあるものとして取り扱う。
【０１０８】
なお、本実施形態では、ログコミット時に書き込まれた差分ログ２３Ｎに基づいて、ログコミット時の不正電源断などを検出したが、差分ログ２３Ｎ以外のログ情報を用いて不正電源断を検出してもよい。この場合、システム起動後最初の差分ログ２３ＮがＮＡＮＤメモリ１０に記憶される前に、システムが動作中であることを示すActiveログをＮＡＮＤメモリ１０に記憶させる。その後、差分ログ２３ＮをＮＡＮＤメモリ１０に記憶させる。さらに、正常なシステム停止時に、システムが停止することを示すStandbyログを差分ログ２３Ｎに続いてＮＡＮＤメモリ１０に追記記憶させる。これにより、不正な電源断検出のためのログ記憶処理が実行される。そして、システム起動時、ＮＡＮＤメモリ１０内のActiveログおよびStandbyログの記憶状態に基づき、前回正常なシステム停止が行われたか不正な電源断が行われたかを判断する。
【０１０９】
ここで、ActiveログおよびStandbyログの書き込み手順について説明する。図１３は、ActiveログおよびStandbyログの書き込み手順を示す図である。図１３の（ａ）では、正常な電源断が行われた場合の、次のシステム起動時のＮＡＮＤログ（ＮＡＮＤメモリ１０に保存されたログ）の状態を示しており、図１３の（ｂ）では、不正な電源断が発生した場合の次のシステム起動時のＮＡＮＤログの状態を示している。
【０１１０】
図１３の（ａ）に示すように、正常な電源断の場合は、ＮＡＮＤログとして、最初にActiveログが記憶され、つぎに差分ログが記憶され（差分ログは存在しない場合もある）、最後にStandbyログが記憶されている。このように、正常なシーケンスの場合は、Standby状態でのデータ更新はなくなる。また、正常な電源断は、ホストから停止要求を受けてから行われるため、Active状態での電源断もなくなる。復元制御部３２は、電源オン後の初期化処理で、ＮＡＮＤメモリ１０からＮＡＮＤログを読み出し、その内容を前方から走査する。通常は、Activeログから始まり、差分ログ、Standbyログとなり、以降これらが繰り返され、最後はStandbyログで終わるはずである。復元制御部３２は、最初にActiveログが記憶され、最後にStandbyログが記憶されている場合に正常な電源断が行われたと判断する。
【０１１１】
これに対し、図１３の（ｂ）に示すように、不正な電源断の場合は、Activeログのみが存在し、最後にStandbyログが記憶されていない。すなわち、Activeログを書くことによって、ＮＡＮＤメモリ１０には書き込みを行ったが、ログのコミットが終了していない状態の不正な電源断を検出することができる。復元制御部３２は、最後のログが、Standbyログでないこと(Activeログ、または差分ログ)を認識したら、不正な電源断があったと判定する。
【０１１２】
なお、本実施形態では、差分ログ２３Ｎの多重化記憶として、差分ログ２３Ｎを２重化記憶する場合について説明したが、差分ログ２３Ｎを３重化以上で多重化して記憶してもよい。
【０１１３】
また、本実施形態では、２回目の最終ページが１回目の最終ページと同じデータである場合について説明したが、２回目の最終ページは、任意のデータページであってもよい。この場合も、復元制御部３２は、２回目の最終ページに、所望のデータが書き込まれているか否かを判定する。そして、所望のデータが書き込まれていない場合には、２回目の最終ページがエラーページであるか、消去済みページであるかが判定され、この判定結果を用いて、不正な電源断やデータ破壊を検出する。
【０１１４】
また、本実施形態では、２回目の最終ページを並列書き込み処理によって多重化する場合について説明したが、２回目の最終ページは、並列書き込み以外の書き込みによって多重化してもよい。
【０１１５】
図１４は、ＳＳＤ１００を搭載したパーソナルコンピュータの一例を示す斜視図である。パーソナルコンピュータ１２００は、本体１２０１、及び表示ユニット１２０２を備えている。表示ユニット１２０２は、ディスプレイハウジング１２０３と、このディスプレイハウジング１２０３に収容された表示装置１２０４と、を備えている。
【０１１６】
本体１２０１は、筐体１２０５と、キーボード１２０６と、ポインティングデバイスであるタッチパッド１２０７とを備えている。筐体１２０５内部には、メイン回路基板、ＯＤＤ（optical  disk  device）ユニット、カードスロット、及びＳＳＤ１００等が収容されている。
【０１１７】
カードスロットは、筐体１２０５の周壁に隣接して設けられている。周壁には、カードスロットに対向する開口部１２０８が設けられている。ユーザは、この開口部１２０８を通じて筐体１２０５の外部から追加デバイスをカードスロットに挿抜することが可能である。
【０１１８】
ＳＳＤ１００は、従来のＨＤＤの置き換えとして、パーソナルコンピュータ１２００内部に実装された状態として使用してもよいし、パーソナルコンピュータ１２００が備えるカードスロットに挿入した状態で、追加デバイスとして使用してもよい。
【０１１９】
図１５は、ＳＳＤを搭載したパーソナルコンピュータのシステム構成例を示している。パーソナルコンピュータ１２００は、ＣＰＵ１３０１、ノースブリッジ１３０２、主メモリ１３０３、ビデオコントローラ１３０４、オーディオコントローラ１３０５、サウスブリッジ１３０９、ＢＩＯＳ−ＲＯＭ１３１０、ＳＳＤ１００、ＯＤＤユニット１３１１、エンベデッドコントローラ／キーボードコントローラＩＣ（ＥＣ／ＫＢＣ）１３１２、及びネットワークコントローラ１３１３等を備えている。
【０１２０】
ＣＰＵ１３０１は、パーソナルコンピュータ１２００の動作を制御するために設けられたプロセッサであり、ＳＳＤ１００から主メモリ１３０３にロードされるオペレーティングシステム（ＯＳ）を実行する。更に、ＯＤＤユニット１３１１が、装填された光ディスクに対して読出し処理及び書込み処理の少なくとも１つの処理の実行を可能にした場合に、ＣＰＵ１３０１は、それらの処理の実行をする。
【０１２１】
また、ＣＰＵ１３０１は、ＢＩＯＳ−ＲＯＭ１３１０に格納されたシステムＢＩＯＳ（Basic  Input  Output  System）も実行する。尚、システムＢＩＯＳは、パーソナルコンピュータ１２００内のハードウェア制御のためのプログラムである。
【０１２２】
ノースブリッジ１３０２は、ＣＰＵ１３０１のローカルバスとサウスブリッジ１３０９との間を接続するブリッジデバイスである。ノースブリッジ１３０２には、主メモリ１３０３をアクセス制御するメモリコントローラも内蔵されている。
【０１２３】
また、ノースブリッジ１３０２は、ＡＧＰ（Accelerated  Graphics  Port）バス等を介してビデオコントローラ１３０４との通信、及びオーディオコントローラ１３０５との通信を実行する機能も有している。
【０１２４】
主メモリ１３０３は、プログラムやデータを一時的に記憶し、ＣＰＵ１３０１のワークエリアとして機能する。主メモリ１３０３は、例えばＤＲＡＭから構成される。
【０１２５】
ビデオコントローラ１３０４は、パーソナルコンピュータ１２００のディスプレイモニタとして使用される表示ユニット１２０２を制御するビデオ再生コントローラである。
【０１２６】
オーディオコントローラ１３０５は、パーソナルコンピュータ１２００のスピーカ１３０６を制御するオーディオ再生コントローラである。
【０１２７】
サウスブリッジ１３０９は、ＬＰＣ（Low  Pin  Count）バス１３１４上の各デバイス、及びＰＣＩ（Peripheral  Component  Interconnect）バス１３１５上の各デバイスを制御する。また、サウスブリッジ１３０９は、各種ソフトウェア及びデータを格納する記憶装置であるＳＳＤ１００を、ＡＴＡインタフェースを介して制御する。
【０１２８】
パーソナルコンピュータ１２００は、セクタ単位でＳＳＤ１００へのアクセスを行う。ＡＴＡインタフェース（Ｉ／Ｆ）を介して、書き込みコマンド、読出しコマンド、フラッシュコマンド等がＳＳＤ１００に入力される。
【０１２９】
また、サウスブリッジ１３０９は、ＢＩＯＳ−ＲＯＭ１３１０、及びＯＤＤユニット１３１１をアクセス制御するための機能も有している。
【０１３０】
ＥＣ／ＫＢＣ１３１２は、電力管理のためのエンベデッドコントローラと、キーボード（ＫＢ）１２０６及びタッチパッド１２０７を制御するためのキーボードコントローラとが集積された１チップマイクロコンピュータである。
【０１３１】
このＥＣ／ＫＢＣ１３１２は、ユーザによるパワーボタンの操作に応じてパーソナルコンピュータ１２００の電源をＯＮ／ＯＦＦする機能を有している。ネットワークコントローラ１３１３は、例えばインターネット等の外部ネットワークとの通信を実行する通信装置である。
【０１３２】
パーソナルコンピュータ１２００は、ＳＳＤ１００に電源供給を行い、また、ＳＳＤ１００に停止要求（Standby要求）を発行する。仮にパーソナルコンピュータ１２００からＳＳＤ１００への電源供給が不正に断たれた場合であっても、書き込みエラーの発生を未然に防ぐことができる。
【０１３３】
このように実施形態によれば、差分ログ２３Ｎを並列書き込み処理によって多重化して記憶しているので、短時間で差分ログ２３Ｎを保存することが可能となる。また最終ページ５２Ａ，５２Ｂと、この最終ページ５２Ａ，５２Ｂと同じデータである最終ページ５３Ａ，５３Ｂと、を、差分ログ２３ＮとしてＮＡＮＤメモリ１０に書き込むので、不正な電源断やデータ破壊を簡便かつ確実に検出することが可能となる。
【０１３４】
本発明のいくつかの実施形態を説明したが、これらの実施形態は、例として提示したものであり、発明の範囲を限定することは意図していない。これら新規な実施形態は、その他の様々な形態で実施されることが可能であり、発明の要旨を逸脱しない範囲で、種々の省略、置き換え、変更を行うことができる。これら実施形態やその変形は、発明の範囲や要旨に含まれるとともに、特許請求の範囲に記載された発明とその均等の範囲に含まれる。
【符号の説明】
【０１３５】
１…ホスト、１０…ＮＡＮＤメモリ、１０ａ〜１０ｄ…並列動作要素、１１…ＮＡＮＤコントローラ、２０…ＤＲＡＭ、２１…管理テーブル、２３Ｄ，２３Ｎ…差分ログ、３０…コントローラ、３１…書き込み制御部、３２…復元制御部、５２Ａ，５２Ｂ，５３Ａ，５３Ｂ…最終ページ、５５Ａ，５５Ｂ…ブロック、１００…ＳＳＤ。 
【図１】
2012128643.tif 000003
【図２】
2012128643.tif 000004
【図３】
2012128643.tif 000005
【図４】
2012128643.tif 000006
【図５】
2012128643.tif 000007
【図６】
2012128643.tif 000008
【図７】
2012128643.tif 000009
【図８】
2012128643.tif 000010
【図９】
2012128643.tif 000011
【図１０】
2012128643.tif 000012
【図１１】
2012128643.tif 000013
【図１２】
2012128643.tif 000014
【図１３】
2012128643.tif 000015
【図１４】
2012128643.tif 000016
【図１５】
2012128643.tif 000017