(57)【要約】【課題】データ記憶の信頼性を容易に高めることができるメモリシステムを提供する。【解決手段】実施形態のメモリシステムは、揮発性の第１の記憶部を介してホスト装置と不揮発性の第２の記憶部との間のデータ転送を行うコントローラを備えている。前記コントローラは、前記第２の記憶部に記憶されたデータの格納位置を含む管理情報を前記第１および第２の記憶部で更新しながら前記管理情報に基づいてデータ管理を行う。前記コントローラは、最新状態の管理情報と、当該管理情報の前記第２の記憶部での保存位置を示すポインタと、前記ポインタの書込みが成功したか否かを示すログとを、前記ポインタを多重化して前記第２の記憶部に記憶させる。前記コントローラは、起動時に前記ポインタが所望数だけ多重化されていなければ、前記ポインタおよび／または前記ログに基づいて、前記ポインタの多重化をリカバリ処理する。【選択図】図１２
2012128645.tif 000002
【特許請求の範囲】
【請求項１】
揮発性の第１の記憶部と、
不揮発性の第２の記憶部と、
前記第１の記憶部を介してホスト装置と前記第２の記憶部との間のデータ転送を行うとともに、起動時に前記第２の記憶部に記憶されたデータの格納位置を含む管理情報を前記第１の記憶部に取込み、前記データ転送の際には前記管理情報を前記第１および第２の記憶部で更新しながら前記管理情報に基づいて前記第１および第２の記憶部でのデータ管理を行うコントローラと、
を備え、
前記コントローラは、前記第１の記憶部に取り込まれた最新状態の管理情報と、前記最新状態の管理情報の保存位置を示すポインタと、前記ポインタの書込みが成功したか否かを示すログと、を前記第２の記憶部に記憶させるとともに、前記ポインタを多重化して前記第２の記憶部に記憶させておき、起動時に前記ポインタが所望の数だけ多重化されていないことを検出した場合、前記ポインタおよび／または前記ログに基づいて、前記ポインタの多重化をリカバリ処理することを特徴とするメモリシステム。
【請求項２】
前記コントローラは、前記ログを多重化して前記第２の記憶部に記憶させることを特徴とする請求項１に記載のメモリシステム。
【請求項３】
前記ポインタは、前記第２の記憶部内のうちデータの格納領域が静的に割り当てられる固定領域に格納されることを特徴とする請求項１または２に記載のメモリシステム。
【請求項４】
前記ログは、前記固定領域に格納されることを特徴とする請求項３に記載のメモリシステム。
【請求項５】
前記ログは、前記第２の記憶部内のうち前記固定領域を除いた領域であってデータの格納領域が動的に割り当てられる可変領域に格納されることを特徴とする請求項３に記載のメモリシステム。
【請求項６】
前記コントローラは、ウエアレベリングを考慮して、前記可変領域に前記ログの格納領域を動的に割り当てることを特徴とする請求項５に記載のメモリシステム。
【発明の詳細な説明】
【技術分野】
【０００１】
本発明の実施形態は、メモリシステムに関する。
【背景技術】
【０００２】
近年、不揮発性半導体記憶装置であるＮＡＮＤ型フラッシュメモリの大容量化が進行し、このＮＡＮＤ型フラッシュメモリを搭載したメモリシステムとしてのＳＳＤ（Solid  State  Drive）が注目されている。このような、メモリシステムでは、データ記憶の信頼性を高めることが望まれている。
【先行技術文献】
【特許文献】
【０００３】
【特許文献１】特開平５−２８２８８８号公報
【特許文献２】特開２００９−２１１２０２号公報
【特許文献３】特開２０１０−１５７１３９号公報
【発明の概要】
【発明が解決しようとする課題】
【０００４】
データ記憶の信頼性を容易に高めることができるメモリシステムを提供することを目的とする。
【課題を解決するための手段】
【０００５】
本発明の一つの実施形態によれば、メモリシステムが提供される。メモリシステムは、揮発性の第１の記憶部と、不揮発性の第２の記憶部と、前記第１の記憶部を介してホスト装置と前記第２の記憶部との間のデータ転送を行うコントローラと、を備えている。前記コントローラは、起動時に前記第２の記憶部に記憶されたデータの格納位置を含む管理情報を前記第１の記憶部に取込み、前記データ転送の際には前記管理情報を前記第１および第２の記憶部で更新しながら前記管理情報に基づいて前記第１および第２の記憶部でのデータ管理を行う。また、前記コントローラは、前記第１の記憶部に取り込まれた最新状態の管理情報と、前記最新状態の管理情報の保存位置を示すポインタと、前記ポインタの書込みが成功したか否かを示すログと、を前記第２の記憶部に記憶させる。また、前記コントローラは、前記ポインタを多重化して前記第２の記憶部に記憶させておく。そして、前記コントローラは、起動時に前記ポインタが所望の数だけ多重化されていないことを検出した場合、前記ポインタおよび／または前記ログに基づいて、前記ポインタの多重化をリカバリ処理する。
【図面の簡単な説明】
【０００６】
【図１】図１は、ＳＳＤの構成例を示すブロック図である。
【図２】図２は、第１の実施形態に係る管理情報とポインタ＆ログ情報の格納位置を模式的に示す図である。
【図３】図３は、第１の実施形態に係るポインタ＆ログ情報の構成例を示す図である。
【図４】図４は、第１の実施形態に係るポインタの内容およびログの内容を示す図である。
【図５】図５は、第１の実施形態に係るポインタおよびログの読み出し手順を説明するための図である。
【図６】図６は、何れの位置にリカバリ処理を行うかの判定処理手順を示すフローチャートである。
【図７】図７は、何れの位置にリカバリ処理を行うかの判定処理結果を示す図である。
【図８】図８は、第２の実施形態に係るポインタ情報およびログ情報の格納位置を模式的に示す図である。
【図９】図９は、第２の実施形態に係るポインタ情報とログ情報の構成例を示す図である。
【図１０】図１０は、第２の実施形態に係るポインタの内容およびログの内容を示す図である。
【図１１】図１１は、第２の実施形態に係るポインタおよびログの読み出し手順を説明するための図である。
【図１２】図１２は、第３の実施形態に係るポインタ情報およびログ情報の格納位置を模式的に示す図である。
【図１３】図１３は、第３の実施形態に係るポインタ情報とログ情報の構成例を示す図である。
【図１４】図１４は、ＳＳＤを搭載したパーソナルコンピュータの一例を示す斜視図である。
【図１５】図１５は、ＳＳＤを搭載したパーソナルコンピュータのシステム構成例を示す図である。
【発明を実施するための形態】
【０００７】
以下に添付図面を参照して、実施形態に係るメモリシステムを詳細に説明する。なお、これらの実施形態により本発明が限定されるものではない。
【０００８】
（第１の実施形態）
図１は、ＳＳＤの構成例を示すブロック図である。ＮＡＮＤ型フラッシュメモリ（以下、ＮＡＮＤメモリと略す）１０を用いた半導体記憶装置の一例であるＳＳＤ（Solid  State  Drive）１００は、メモリシステムなどに適用される。本実施形態のＳＳＤ１００は、不揮発に保存したい重要なデータ（管理情報）と、管理情報の格納位置を示すポインタに関する情報（後述のポインタ＆ログ情報４など）とを、信頼性を確保するために多重化（例えば４重化）してＮＡＮＤメモリ１０内に記憶しておく。
【０００９】
ＮＡＮＤメモリ１０内で保存される管理情報は、ある時点における不揮発性テーブルの内容であるスナップショットと、不揮発性テーブルの内容に変化があった場合に内容を変更した後の不揮発性テーブルとスナップショット（後述のスナップショット２１０）との差分情報であるログ（後述のスナップショット用ログ２２０）と、を有している。
【００１０】
また、ＮＡＮＤメモリ１０内で保存されるポインタ＆ログ情報４は、管理情報のＮＡＮＤメモリ１０内における格納位置を示すポインタと、このポインタが正しく書込まれたか否かを示すログと、を有している。ポインタは、管理情報の保存場所にアクセスするための情報である。また、ログは、ポインタの書き込み（更新）が成功したか否かを示す処理記録（ポインタのログ）である。本実施形態では、ポインタと、ログと、を多重化してＮＡＮＤメモリ１０に保存しておく。
【００１１】
メモリシステムでは、システム起動時に、多重化されていたポインタの何れかがブロックの故障などによって読み出せなかった場合、読み出せなかったポインタを書き直すことによって、ポインタの多重化を維持する。本実施形態では、読み出せなかったポインタの書き直し処理を、リカバリ処理という。本実施形態では、ポインタとともにログを記憶しておくことにより、ログを用いてリカバリ処理を行う。これにより、リカバリ処理を効率良く行う。なお、リカバリ処理の際には、ポインタの書き直し処理後に、ログの書き直し処理も行われる。
【００１２】
ＳＳＤ１００は、ＡＴＡインタフェース（ＡＴＡ  Ｉ／Ｆ）などのメモリ接続インタフェースであるホストＩ／Ｆ（図示せず）を介してパーソナルコンピュータあるいはＣＰＵコアなどのホスト装置（以下、ホストと略す）１と接続され、ホスト１の外部メモリとして機能する。
【００１３】
ＳＳＤ１００は、ホスト１の２次記憶装置として使用され、ホスト１から書込要求が出されたデータを記憶するとともに、ホスト１から読出要求のあったデータを読出してホスト１に出力する機能を有している。
【００１４】
ＳＳＤ１００は、揮発性半導体メモリとしてのＤＲＡＭ２０と、データ管理などを行うコントローラ３０と、不揮発性半導体メモリとしてのＮＡＮＤメモリ１０と、を備えている。
【００１５】
ＮＡＮＤメモリ１０は、複数のＮＡＮＤメモリチップを有する。個々のＮＡＮＤメモリチップは、後述する複数のブロックを有する。また、各ＮＡＮＤメモリチップは、チャネルを介してそれぞれ並列にコントローラ３０に接続されている。１つのチャネルに接続されるＮＡＮＤメモリの数は１個に限らず、複数のＮＡＮＤメモリが入出力線を共有した状態で接続されていてもよい。
【００１６】
ＮＡＮＤメモリ１０の各ＮＡＮＤメモリチップは、例えば、複数のチャネルによる並列動作、複数のLaneによるインターリーブ動作が可能である。本実施形態では、並列動作できる２つのチャネル（１つのLane）にそれぞれ接続されたＮＡＮＤメモリに含まれるブロック対して、データの並列書き込みを行う場合について説明する。各ブロックは、多重化の効果を高めるため、異なるＮＡＮＤメモリチップに配置されているものとする。なお、本実施形態では複数（例えば２個）のチャネルでLaneを構成してデータの並列書き込みを行い、Lane間でインターリーブ動作を行う場合を想定するが、全てのチャネルが並列動作する構成であってもよい。
【００１７】
ＮＡＮＤメモリ１０は、データを書き込むためにはその前に消去を必要とする。また、ＮＡＮＤメモリ１０では、消去単位と書き込み単位が異なる。ＮＡＮＤメモリ１０は、例えば、消去単位がブロック単位であり、かつ書き込み単位がページ単位である。また、ＮＡＮＤメモリ１０は、書き込み順序が連続するよう規定されている。換言すると、書き込みについてはページに上書きは出来ず、１ページずつページ昇順に追記するよう規定されている。
【００１８】
ＤＲＡＭ２０は、ホスト１とＮＡＮＤメモリ１０との間でのデータ転送用キャッシュおよび作業領域用メモリなどとして機能する。ＤＲＡＭ２０の作業領域用メモリに記憶されるものとしては、管理テーブル、ＤＲＡＭ上ログ、ポインタ＆ログ情報４、ユーザデータなどがある。
【００１９】
管理テーブルは、ＮＡＮＤメモリ１０に記憶されている管理情報が起動時などに展開されたマスターテーブル（スナップショット用ログ２２０を反映したスナップショット２１０）である。管理テーブルは、ホスト１から指定された論理アドレスと物理的なデータの記憶位置とを対応付ける管理情報を管理するための情報テーブルである。
【００２０】
ＤＲＡＭ上ログは、ＮＡＮＤメモリ１０に格納されるスナップショット用ログ２２０と同様のデータであり、管理テーブルの変更差分である。ユーザデータの書き込みや、管理テーブルへのデータの読み書きを行う際には、ＤＲＡＭ２０上に管理テーブルが展開される。
【００２１】
管理テーブルの差分であるＤＲＡＭ上ログは、ユーザデータの書き込みや保存先ブロックの変更などがあった場合にＤＲＡＭ２０上にいったん保存されるが、一定量たまったところで、スナップショット用ログ２２０としてＮＡＮＤメモリ１０に書き込まれる。換言すると、ＳＳＤ１００は、ＳＳＤ１００が動作している間、所定のタイミングで、スナップショット用ログ２２０を管理テーブルに反映するとともに、スナップショット用ログ２２０としてＮＡＮＤメモリ１０に保存する。また、ＳＳＤ１００は、ＳＳＤ１００が動作している間、所定のタイミングで管理テーブルを、スナップショット２１０としてＮＡＮＤメモリ１０に保存する。
【００２２】
具体的には、ＤＲＡＭ２０上では、ＤＲＡＭ上ログとなる各ログデータが順番に時系列で並ぶよう記憶される。そして、データの更新が安定したら、ＤＲＡＭ上ログがスナップショット用ログ２２０としてＮＡＮＤメモリ１０に書き込まれる。ＮＡＮＤメモリ１０では、スナップショット用ログ２２０が順番に時系列で並ぶよう記憶される。そして、スナップショットのＮＡＮＤメモリ１０への保存が終了すると、管理テーブルを保存する前にＮＡＮＤメモリ１０に書き込まれたスナップショット用ログ２２０は不要になる。
【００２３】
なお、ＤＲＡＭ２０の代わりに、ＦｅＲＡＭ（Ferroelectric  Random  Access  Memory）、ＭＲＡＭ（Magnetoresistive  Random  Access  Memory）、ＰＲＡＭ（Phase  change  Random  Access  Memory）などを使用してもよい。
【００２４】
データ管理部であるコントローラ３０は、ホスト１とＮＡＮＤメモリ１０との間でＤＲＡＭ２０を介してデータ転送制御を行う。また、コントローラ３０は、ＮＡＮＤメモリ１０内でのデータの消去、書き込み、読み出し、多重化が成功しているかの判定などを行う。本実施形態のコントローラ３０は、ＮＡＮＤメモリ１０のデータの並列書き込みを行なう機能を有している。
【００２５】
コントローラ３０は、ブロック管理部３１、システム管理部３２、ＡＴＡコマンド処理部３３、データ転送部３４を有している。ブロック管理部３１は、ＮＡＮＤメモリ１０内の各ブロックを管理する。本実施形態のブロック管理部３１は、管理情報の格納位置が更新されると、ポインタの更新要求をシステム管理部３２に行う。また、ブロック管理部３１は、システム管理部３２からポインタの更新処理結果を受けると、ログの更新（ＮＡＮＤメモリ１０上への追記）を行うとともに、次回のシステム起動時にシステム管理部３２へのリカバリ要求を行う。
【００２６】
システム管理部３２は、ポインタの更新とリカバリ処理を行う。システム管理部３２は、ブロック管理部３１による管理情報の再構築完了後に、ブロック管理部３１からポインタの更新要求を受けると、ポインタの更新処理を行い、更新処理結果をシステム管理部３２に送る。システム管理部３２は、次回のシステム起動時にログをブロック管理部３１から得るとともに、ログを用いてポインタのリカバリ処理を実行する。
【００２７】
ＡＴＡコマンド処理部３３は、ホスト１とのコマンドインターフェースを行なう。データ転送部３４は、ＤＲＡＭ２０を介してＮＡＮＤメモリ１０とホスト１との間のデータインターフェース（データ転送）を行なう。
【００２８】
また、コントローラ３０は、ＮＡＮＤメモリ１０に記憶された管理情報を、管理テーブルとしてシステム起動時にＤＲＡＭ２０に転送する。また、コントローラ３０は、管理情報を更新すべき事象が発生した際、ＤＲＡＭ２０に記憶されている管理テーブルの更新前後の差分情報をＤＲＡＭ上ログとしてＤＲＡＭ２０に記憶させる。また、コントローラ３０は、所定の条件が成立したときにＤＲＡＭ上ログをＮＡＮＤメモリ１０に順次追記記憶させるとともに、ＤＲＡＭ上ログの内容をＤＲＡＭ２０に記憶されている管理情報に反映する。
【００２９】
また、本実施形態のコントローラ３０は、管理情報のＮＡＮＤメモリ１０内での格納位置を示すポインタと、ポインタのログと、をポインタ＆ログ情報４としてＮＡＮＤメモリ１０に記憶させる。ポインタは、管理情報が更新されることによってその保存場所が変わる場合に更新する必要がある。更新の際は、ＮＡＮＤメモリ１０の特性から、別のページに新しいポインタを書き込むことになる。また、更新途中のシステム電源遮断やＮＡＮＤメモリ１０のページ書き込み失敗によって更新処理が正常に完了しない場合が有りうるので、更新の際にはポインタのログも同時にＮＡＮＤメモリ１０内に保存しておく。これにより、次回のシステム起動時に、ポインタおよびログに基づいて、更新処理が正常に行なわれたか否かを判断できるようにしておく。
【００３０】
ところで、メモリなどは、データのWrite／Erase回数の増大による劣化、Readの繰り返しによる劣化、経年劣化などによって不良率が増加する傾向にある。このため、書き込み時にデータの書き込みが成功していてもデータ破壊が発生する場合がある。また、データの書き込み中に不正な電源断が発生する場合がある。この場合であっても、システムの信頼性を向上させるためには、ポインタやログの多重化を維持しておくことが望まれる。そこで、本実施形態では、多重化されていたポインタの何れかをシステム起動時に読み出せなかった場合（更新処理が正しく行なわれていなかった場合）にリカバリ処理を行う。これにより、ＳＳＤ１００の信頼性を高める。
【００３１】
そのため、ＮＡＮＤメモリ１０へは、ある時点でのポインタ全体と、ポインタを保存した時点でのログという形式でポインタ＆ログ情報４を保存しておく。そして、ポインタを更新する条件が成立した場合に、ポインタをＮＡＮＤメモリ１０に記憶させ、その後、ポインタの記憶が成功した否かを示すログをＮＡＮＤメモリ１０に記憶させる。
【００３２】
図２は、第１の実施形態に係る管理情報とポインタ＆ログ情報の格納位置を模式的に示す図である。ＮＡＮＤメモリ１０のうち、管理情報４５およびポインタ＆ログ情報４が保存される管理情報保存領域４００には、固定領域４０Ａと、可変領域４１Ａと、がある。
【００３３】
固定領域４０Ａは、静的に確保されたブロックで構成される領域であり、可変領域４１Ａは、動的に確保されたブロックで構成される領域である。固定領域４０Ａには、ポインタ＆ログ情報４が格納されている。ポインタ＆ログ情報４は、メモリシステムの起動時に固定的に参照できる情報である必要があるので、静的に割り当てられたブロックで構成される固定領域４０Ａに格納される。また、可変領域４１Ａには、管理情報４５が格納される。管理情報４５は、スナップショット２１０と、スナップショット用ログ２２０と、を有している。
【００３４】
固定領域４０Ａは、ＮＡＮＤメモリ１０において、論理ブロックと物理ブロックとの関係が固定化している領域であり、書換えや書込みがほとんど発生しない更新頻度の低い領域である。このため、固定領域４０Ａは、メモリシステムを稼働させるのに必要な情報が格納される領域として用いられる。たとえば、固定領域４０Ａでは、現在書込み中のブロックがすべて満たされた場合には、固定領域４０Ａ内の他のブロックにデータを書込むのではなく、ブロック内のデータを消去した後に消去したブロックの先頭ページから書込むように設定されている。
【００３５】
一方の可変領域４１Ａは、固定領域４０Ａを除くＮＡＮＤメモリ１０の領域において、論理ブロックと物理ブロックとの関係が変化する領域である。たとえば、可変領域４１Ａでは、現在書込み中のブロックがすべて満たされた場合には、可変領域４１Ａ内で書込可能なフリーブロックとなっている他のブロックに次の情報を書込むように設定された領域である。なお、この可変領域４１Ａは、上記したようにＮＡＮＤメモリ１０中の固定領域４０Ａを除いた領域であり、管理情報４５が格納される領域のほかに、ホスト１から書込要求のあったデータが格納されるデータ格納領域も含まれる。つまり、固定領域４０Ａを除いたＮＡＮＤメモリ１０中の物理的な領域を可変領域４１Ａとし、この中で、データ格納領域と、管理情報が格納される領域とが機能的に分離されている。
【００３６】
ブロック管理部３１には、システム起動時にアクセスする位置として固定領域４０Ａ内の所定位置（ポインタ＆ログ情報４の格納位置）を保存しておく。そして、システム起動時には、ブロック管理部３１がポインタ＆ログ情報４にアクセスして、ポインタ＆ログ情報４を取得する。
【００３７】
なお、ＮＡＮＤメモリ１０が多値メモリで構成される場合であっても、固定領域４０Ａは、ポインタ＆ログ情報４のデータの信頼性を高めるために、２値モードで使用することが望ましい。
【００３８】
つぎに、ポインタ＆ログ情報４の保存方法について説明する。図３は、第１の実施形態に係るポインタ＆ログ情報の構成例を示す図である。図３では、ポインタ＆ログ情報４が、ブロック０，１からなるLane０とブロック２，３からなるLane１とを用いて、固定領域４０Ａ内に保存される場合について説明する。
【００３９】
ポインタ＆ログ情報４は、ＮＡＮＤメモリ１０の故障が原因で読み出しに失敗した場合、システムが起動できなくなるので、図３に示すように複数のブロック（ブロック０〜３）に同一のポインタＡ１をコピーして保存しておく。これにより、１ブロックが故障した場合であっても他ブロックからポインタＡ１を読めるようにしておく。具体的には、ブロック０〜３の同一ページにポインタＡ１を保存することによって、ポインタＡ１の多重化を行う。
【００４０】
同様に、複数のブロック（ブロック０〜３）に同一のログＢ１をコピーして保存しておく。これにより、１ブロックが故障した場合であっても他ブロックからログＢ１を読めるようにしておく。具体的には、ブロック０〜３の同一ページにログＢ１を保存することによって、ログＢ１の多重化を行う。
【００４１】
本実施形態では、ポインタＡ１とログＢ１とを、同一のブロックに保存する。例えば、ブロック０のページ０には、ポインタＡ１が保存され、ブロック０のページ１には、ログＢ１が保存される。同様に、ブロック１〜３の各ページ０には、それぞれポインタＡ１が保存され、ブロック１〜３の各ページ１には、それぞれログＢ１が保存される。換言すると、ＮＡＮＤメモリ１０内では、ポインタを格納する領域にログも含めて記憶しておく。これにより、各ページには、ポインタとログの何れかが保存されることになる。
【００４２】
ポインタ＆ログ情報４では、ブロック０〜３の第１のページ（例えばページ０）にポインタＡ１が保存された後、次のページである第２のページ（例えばページ１）にログＢ１が保存される。そして、第２のページの次のページである第３のページ（例えばページ２）にポインタＡ２（図示せず）が保存された後、次のページである第４のページ（例えばページ３）にログＢ２（図示せず）が保存される。このように、ポインタ＆ログ情報４では、若いブロック番号から順番に各ブロックの同じページ番号のページに、同一のポインタまたはログが書き込まれる。これにより、ポインタ＆ログ情報４では、ポインタとログとが交互に保存される。
【００４３】
リカバリ処理を行う場合には、ポインタおよびログに基づいて、多重化が正しく行なわれていないブロックを含むLaneにポインタを書き直す。例えば、ブロック０またはブロック１に書込んだはずのポインタＡ１を、ブロック０またはブロック１から読出せない場合、Lane０（ブロック０および１）に対してリカバリ処理が行なわれる。
【００４４】
つぎに、ポインタ内に格納される情報の内容例およびログ内に格納される情報の内容例について説明する。図４は、第１の実施形態に係るポインタの内容およびログの内容を示す図である。図４の（ａ）では、ポインタＡ１の構成例を示し、図４の（ｂ）では、ログＢ１の構成例を示している。
【００４５】
図４の（ａ）に示すように、ポインタＡ１は、ポインタＡ１の情報先頭からの位置（オフセット位置）を示す情報と、情報内容と、が対応付けされて構成されている。情報先頭からの位置が「０」の位置（先頭）には、ポインタＡ１とログＢ１の何れを格納しているか判定するための情報として、ポインタ／ログ判別フラグが格納されている。ここでは、ポインタを示す情報が格納されている。
【００４６】
また、情報先頭からの位置が「１」の位置には、ポインタＡ１が何回目の更新であるかを示すシーケンス番号が格納されている。例えば、ポインタＡ１が、Ｎ回目（Ｎは自然数）の更新処理で格納されるポインタである場合、Ｎ回目の更新であることを示すシーケンス番号が格納される。また、情報先頭からの位置が「２」の位置には、管理情報４５へのポインタ（ＮＡＮＤメモリ１０内での格納位置を示す情報）が格納される。
【００４７】
また、図４の（ｂ）に示すように、ログＢ１は、ログＢ１の情報先頭からの位置（オフセット位置）を示す情報と、情報内容と、が対応付けされて構成されている。情報先頭からの位置が「０」の位置（先頭）には、ポインタ／ログ判別フラグが格納されている。ここでは、ログを示す情報が格納されている。
【００４８】
また、情報先頭からの位置が「１」の位置には、ログＢ１（ポインタＡ１）が何回目の更新であるかを示すシーケンス番号が格納されている。例えば、スナップショット２１０を保存した後、Ｎ回目（Ｎは自然数）の更新処理で格納されるログの場合、Ｎ回目の更新であることを示すシーケンス番号が格納される。
【００４９】
また、情報先頭からの位置が「２」以降の位置には、各ブロックへのページ書込みが成功したか、失敗したかを示す情報（書込み成否情報）が格納される。例えば、情報先頭からの位置が「２」の位置には、ブロック０へのページ書込みが成功したか、失敗したかを示す情報が格納される。また、情報先頭からの位置が「３」の位置には、ブロック１へのページ書込みが成功したか、失敗したかを示す情報が格納される。
【００５０】
つぎに、ポインタＡ１およびログＢ１の読み出し手順について説明する。図５は、第１の実施形態に係るポインタおよびログの読み出し手順を説明するための図である。ポインタ＆ログ情報４内からポインタＡ１またはログＢ１を読み出す際には、ブロック管理部３１が、ＮＡＮＤメモリ１０内からポインタ＆ログ情報４を抽出して、システム管理部３２に送る。
【００５１】
システム管理部３２は、ポインタ＆ログ情報４内の各ブロック０〜３の中から一番後に更新されたページ（最新ページ）を検索する。換言すると、システム管理部３２は、各ブロック内の書き込み済みページのうち、ページ番号が一番大きなページからデータを読み出す。このページには、ログまたは最新のポインタの何れかが保存されていることになる。
【００５２】
システム管理部３２は、読み出しに成功するまで、ブロック番号が若いブロックから順番に、最新ページのポインタまたはログを読み出す。ここでは、ブロック０、ブロック１、ブロック２、ブロック３の順番で、最新ページであるページ１内のデータが読み出される。
【００５３】
システム管理部３２は、ブロック０からのデータ読み出しに失敗して読み出しができなかった場合、ブロック１の同じページ番号のページからデータを読み出す。以降、読み出しができるまでブロックを移動して同じページ番号のページを読み出す処理を繰り返す。このように、多重化により複数ブロックの同じページ番号のページに同じポインタが書き込まれているので、１つのブロックのあるページからデータを読み出せない場合であっても他ブロックの同じページ番号のページから読み出せばよい。これにより、システムが起動できなくなるリスクを軽減している。
【００５４】
読み出された情報は、ポインタ／ログ判別フラグにより、ポインタなのか、ログなのかの判断が可能である。読み出された情報がログである場合、１つページ番号が若いページにポインタが記録されていると判断できる。
【００５５】
正常にポインタ＆ログ情報４が更新されている場合、最後に書き込まれたページはログ情報である。図５に示すポインタ＆ログ情報４の場合、ブロック０の最新ページであるページ１からログＢ１が読み出される（１）。この読み出しに失敗すると、ブロック１のページ１からログＢ１が読み出される（２）。さらに、この読み出しに失敗すると、ブロック２のページ１からログＢ１が読み出され（３）、この読み出しにも失敗すると、ブロック３のページ１からログＢ１が読み出される（４）。
【００５６】
ブロック０〜３の何れかからログＢ１を読み出すことができた場合、ポインタＡ１の読み出し処理が行われる。このとき、システム管理部３２は、ログＢ１内に格納されている、ブロック毎の書込み成否情報を読み出す。そして、システム管理部３２は、読み出した書込み成否情報を参照して適切なブロック（ポインタの書き込みに成功しているブロック）からポインタの読み出しを行なう。このとき、システム管理部３２は、読み出しに成功したブロックの中から最新ページの次に新しいページ（ここではページ０）からデータ（ポインタＡ１）を読み出す（５）。
【００５７】
システム管理部３２は、書込み成否情報に基づいて、複数のブロックに対してポインタＡ１の書込みが成功していると判断できた場合、書込みが成功しているブロックの中からブロック番号が最も若いブロックの２番目に新しいページ（ページ０）からデータを読み出す。そして、読み出しに失敗すると、ブロック番号が若い順番で次のブロックのページ０からポインタＡ１を読み出す処理が、読み出しに成功するまで繰り返される。システム管理部３２は、読み出したログＢ１と、読み出したポインタＡ１と、に基づいて、リカバリ処理の必要性を判断する。
【００５８】
なお、ポインタを書き込む途中でシステム電源遮断などにより、ログの書き込みに至る前に書き込みが終了している可能性がある。このため、最新ページから必ずしもログが読み出されるとは限らない。
【００５９】
最新ページにポインタＡ１が格納されている場合、システム管理部３２は、ブロック番号が若いブロックから順番に最新ページ内のポインタＡｙを読み出す。さらに、ブロック番号が若いブロックから最新ページの次のページ内のログＢ（ｙ−１）を読み出す。システム管理部３２は、読み出したログＢ（ｙ−１）と、読み出した各ポインタＡｙと、に基づいて、リカバリ処理の必要性を判断する。
【００６０】
図６は、何れの位置にリカバリ処理を行うかの判定処理手順を示すフローチャートである。システム管理部３２は、読み出したポインタＡ１のシーケンス番号と、読み出したログＢ１のシーケンス番号と、が同じ番号であるか否かを判定する（ステップＳ１０）。
【００６１】
ポインタＡ１のシーケンス番号とログＢ１のシーケンス番号が同じ番号である場合（ステップＳ１０、Ｙｅｓ）、システム管理部３２は、読み出しに成功たポインタＡ１のLane位置（ブロック番号）がLane０であるか否かを判定する（ステップＳ２０）。
【００６２】
読み出したポインタＡ１のLane位置がLane０である場合（ステップＳ２０、Ｙｅｓ）、システム管理部３２は、ポインタ＆ログ情報４へのリカバリ処理は不要であると判定する（ステップＳ３０）。
【００６３】
読み出したポインタＡ１のLane位置がLane１である場合（ステップＳ２０、Ｎｏ）、Lane０が劣化している。このため、システム管理部３２は、Lane０に対してリカバリ処理を行う（ステップＳ４０）。具体的には、Lane１（ブロック２またはブロック３）で記憶されているポインタＡ１をコピーして、Lane０（ブロック０およびブロック１）の新しいページに記憶させる。このとき、システム管理部３２は、Lane１（ブロック２およびブロック３）へのリカバリ処理を行わなくてもよい。この場合、ブロック０およびブロック１の新しいページにポインタＡ１が保存され、ブロック２およびブロック３の新しいページは、未書込み状態（消去済みページ）のままである。
【００６４】
Lane０にポインタＡ１を書込んだ後、システム管理部３２は、ブロック０およびブロック１へのポインタＡ１の書き込み完了に対応する新たなログＢ１をポインタ＆ログ情報４に書込む。このとき、新たなログＢ１は、全てのブロック０〜３に書込まれることにより多重化される。
【００６５】
例えば、最新のページがページＸ（Ｘは自然数）であってログＢ１が書込まれている場合、次に新しいページ（Ｘ−１）には、ポインタＡ１が書込まれている。この場合、ページ（Ｘ＋１）にポインタＡ１の書込み（リカバリ処理）が行われる。また、新たなログＢ１は、ページ（Ｘ＋２）に書込まれる。このとき、リカバリ処理としてページ（Ｘ＋１）に書込むポインタＡ１のシーケンス番号は、ページ（Ｘ−１）に書込まれたポインタＡ１のシーケンス番号と同じ番号としておく。また、ページ（Ｘ＋２）に書込む新たなログＢ１のシーケンス番号は、ページＸに書込まれたログＢ１のシーケンス番号と同じ番号としておく。
【００６６】
ポインタＡ１のシーケンス番号とログＢ１のシーケンス番号が異なる番号である場合（ログＢ１の方が古い場合）（ステップＳ１０、Ｎｏ）、システム管理部３２は、読み出しに成功したポインタＡ１のLane位置がLane０であるか否かを判定する（ステップＳ５０）。読み出したポインタＡ１のLane位置がLane１である場合（ステップＳ５０、Ｎｏ）、ログＢ１を書込む直前に電源断し、且つLane０が劣化している。このため、システム管理部３２は、Lane０に対してリカバリ処理を行う（ステップＳ４０）。
【００６７】
また、ポインタＡ１のシーケンス番号とログＢ１のシーケンス番号が異なる番号であり、且つ読み出したポインタＡ１のLane位置がLane０である場合（ステップＳ５０、Ｙｅｓ）、Lane１にポインタＡ１を書込む途中で電源断している。このため、システム管理部３２は、Lane１に対してリカバリ処理を行う（ステップＳ６０）。
【００６８】
ステップＳ３０，Ｓ４０，Ｓ６０の後、メモリシステムが起動され、メモリシステムが管理テーブル、ＤＲＡＭ上ログ、ポインタ＆ログ情報４、管理情報、ユーザデータなどを更新しながら動作する。
【００６９】
図７は、何れの位置にリカバリ処理を行うかの判定処理結果を示す図である。読み出したポインタＡ１のシーケンス番号と、読み出したログＢ１のシーケンス番号と、が同じ番号であり（ＹＥＳ）、且つ読み出したポインタＡ１のLane位置がLane０である場合、リカバリ処理は不要であると判定される（Ｄ１）。
【００７０】
読み出したポインタＡ１のシーケンス番号と、読み出したログＢ１のシーケンス番号と、が同じ番号であり（ＹＥＳ）、且つ読み出したポインタＡ１のLane位置がLane１である場合、Lane０を対象としてリカバリ処理を行うと判定される（Ｄ２）。
【００７１】
読み出したポインタＡ１のシーケンス番号と、読み出したログＢ１のシーケンス番号と、が異なる番号であり（ＮＯ）、且つ読み出したポインタＡ１のLane位置がLane０である場合、Lane１を対象としてリカバリ処理を行うと判定される（Ｄ３）。
【００７２】
読み出したポインタＡ１のシーケンス番号と、読み出したログＢ１のシーケンス番号と、が異なる番号であり（ＮＯ）、且つ読み出したポインタＡ１のLane位置がLane１である場合、Lane０を対象としてリカバリ処理を行うと判定される（Ｄ４）。
【００７３】
なお、システム管理部３２は、最新ページから読み出したデータがログＢ１である場合、ログＢ１内の書込み成否情報に基づいて、リカバリ処理の必要性を判断してもよい。この場合、書込み成否情報内で書込みが失敗したことが示されているブロックを含むLaneに対してリカバリ処理が行われる。
【００７４】
また、システム管理部３２は、最新ページから読み出したデータがポインタＡ１である場合、ポインタＡ１を読み出すことができたLane位置に基づいて、リカバリ処理の必要性を判断してもよい。
【００７５】
この場合、システム管理部３２は、最新ページから読み出したデータ内のポインタ／ログ判別フラグに基づいて、最新ページから読み出したデータがポインタＡ１であるか否かを判断する。また、この場合、システム管理部３２は、全てのブロックからポインタＡ１を読み出す。システム管理部３２が、最新ページから読み出したデータはポインタＡ１であると判断した場合、ポインタＡ１を読み出すことができたLane位置を確認する。読み出したポインタＡ１のLane位置がLane０のみである場合、システム管理部３２は、Lane１を対象としてリカバリ処理を行うと判定する。一方、読み出したポインタＡ１のLane位置がLane１のみである場合、システム管理部３２は、Lane０を対象としてリカバリ処理を行うと判定する。
【００７６】
なお、本実施の形態では、ポインタ／ログ判別フラグに基づいて、ポインタ＆ログ情報４から読み出したデータがポインタＡ１であるかログＢ１であるかのデータ判別を行ったが、シーケンス番号に基づいてデータ判別を行ってもよい。この場合、最新ページから読み出したデータのシーケンス番号と、次に新しいページから読み出したデータのシーケンス番号と、が異なる番号であれば、最新ページのデータはポインタであり、次に新しいページのデータはログであると判断される。
【００７７】
また、本実施形態では、管理情報の格納位置を示すポインタを複数段階のポインタとしてもよい。例えば、ポインタを２段階にする場合、固定領域４０Ａに格納されるポインタＡ１を第１のルートポインタとする。第１のルートポインタは、第２のルートポインタが格納される位置（ブロック）を示すポインタであり、第２のルートポインタは、管理情報が格納される位置（ブロック）を示すポインタである。第１のルートポインタは、第２のルートポインタが格納されるブロックが変わった場合に更新される。また、第１のルートポインタおよび第２のルートポインタは、それぞれ異なるブロックに格納される。このため、第２のルートポインタは、固定領域４０Ａに保存してもよいし、可変領域４１Ａに保存してもよい。
【００７８】
また、本実施形態では、多重化していたポインタＡ１の何れかが読み出せなかった場合に、Lane０とLane１の何れか一方に対して、リカバリ処理を行う場合について説明したが、Lane０とLane１の両方に対してリカバリ処理を行ってもよい。また、多重化していたポインタＡ１の何れかが読み出せなかった場合に、読み出せなかったブロックに対してのみリカバリ処理を行ってもよい。
【００７９】
また、本実施形態では、ログを多重化してＮＡＮＤメモリ１０に記憶しておく場合について説明したが、ログを多重化することなくＮＡＮＤメモリ１０に記憶しておいてもよい。
【００８０】
このように、第１の実施形態によれば、ポインタのログを保存しておくので、多重化して記憶しておくポインタの多重化数が不十分であった場合に、ポインタの多重化をリカバリ処理する際に、何れの位置にリカバリ処理を行うべきかの判定処理を容易に行うことが可能となる。これにより、ポインタの多重化を容易に維持することが可能となり、その結果、データ記憶の信頼性を容易に高めることが可能となる。また、ポインタおよびログを多重化して記憶しておくので、システム起動ができなくなることを防止できる。
【００８１】
（第２の実施形態）
つぎに、図８〜図１１を用いてこの発明の第２の実施形態について説明する。第２の実施形態では、ポインタとポインタのログとを固定領域内で別々に保存しておく。
【００８２】
図８は、第２の実施形態に係るポインタ情報およびログ情報の格納位置を模式的に示す図である。図８の各構成要素のうち図２に示す第１の実施形態の管理情報保存領域４００と同一機能を達成する構成要素については同一番号を付しており、重複する説明は省略する。
【００８３】
ＮＡＮＤメモリ１０のうち、管理情報４５、ポインタ情報５Ａおよびログ情報５Ｂが保存される管理情報保存領域４００には、固定領域４０Ｂと、可変領域４１Ｂと、がある。固定領域４０Ｂは、第１の実施形態で説明した固定領域４０Ａと同様の領域であり、ポインタ情報５Ａとログ情報５Ｂが格納される。可変領域４１Ｂは、第１の実施形態で説明した可変領域４１Ａと同様の領域であり、管理情報４５が格納される。本実施形態では、固定領域４０Ｂ内で、ポインタ情報５Ａと、ログ情報５Ｂと、を別々に記憶する。ポインタ情報５Ａは、ポインタＡ１などのポインタが時系列で格納された情報であり、ログ情報５Ｂは、ログＢ１などのログが時系列で格納された情報である。
【００８４】
つぎに、ポインタ情報５Ａとログ情報５Ｂの保存方法について説明する。図９は、第２の実施形態に係るポインタ情報とログ情報の構成例を示す図である。ポインタ情報５Ａは、例えば、ブロック０，１からなるLane０とブロック２，３からなるLane１とを用いて、固定領域４０Ｂ内に保存される。また、ログ情報５Ｂは、例えば、ブロック４，５からなるLane２とブロック６，７からなるLane３とを用いて、固定領域４０Ｂ内に保存される。
【００８５】
ポインタ情報５Ａの各ブロック０〜３へは、同一のポインタをコピーして保存しておく。例えば、１回目に記憶するポインタがポインタＣ１である場合、各ブロック０〜３のページ０にポインタＣ１がそれぞれ保存される。そして、次に記憶するポインタがポインタＣ２である場合、各ブロック０〜３のページ１にポインタＣ２がそれぞれ保存される。
【００８６】
また、ログ情報５Ｂの各ブロック４〜７へは、同一のログをコピーして保存しておく。例えば、１回目に記憶するログがログＤ１である場合、各ブロック４〜７のページ０にログＤ１がそれぞれ保存される。そして、次に記憶するログがログＤ２である場合、各ブロック４〜７のページ１にログＤ２がそれぞれ保存される。
【００８７】
つぎに、ポインタ内に格納される情報の内容例およびログ内に格納される情報の内容例について説明する。図１０は、第２の実施形態に係るポインタの内容およびログの内容を示す図である。図１０の（ａ）では、ポインタＣ１の構成例を示し、図１０の（ｂ）では、ログＤ１の構成例を示している。図１０の各構成要素のうち図４に示す第１の実施形態のポインタやログと同様の構成要素については、重複する説明を省略する。
【００８８】
図１０の（ａ）に示すように、ポインタＣ１は、ポインタＣ１の情報先頭からの位置（オフセット位置）を示す情報と、情報内容と、が対応付けされて構成されている。情報先頭からの位置が「０」の位置（先頭）には、ポインタＣ１が何回目の更新であるかを示すシーケンス番号が格納されている。また、情報先頭からの位置が「１」の位置には、管理情報４５へのポインタ（ＮＡＮＤメモリ１０内での格納位置を示す情報）が格納される。
【００８９】
また、図１０の（ｂ）に示すように、ログＤ１は、ログＤ１の情報先頭からの位置（オフセット位置）を示す情報と、情報内容と、が対応付けされて構成されている。情報先頭からの位置が「０」の位置（先頭）には、ログＤ１（ポインタＣ１）が何回目の更新であるかを示すシーケンス番号が格納されている。また、情報先頭からの位置が「１」以降の位置には、各ブロックへのページ書込みが成功したか、失敗したかを示す情報（書込み成否情報）が格納される。
【００９０】
つぎに、最新のポインタであるポインタＣ２および最新のログであるログＤ２の読み出し手順について説明する。図１１は、第２の実施形態に係るポインタおよびログの読み出し手順を説明するための図である。なお、図５で説明した第１の実施形態のポインタＡ１およびログＢ１の読み出し処理と同様の処理については、重複する説明を省略する。
【００９１】
ポインタＣ２およびログＤ２の読み出す際には、ログ情報５Ｂ内からログＤ２が読み出され、その後、ポインタ情報５Ａ内からポインタＣ２が読み出される。ログ情報５ＢからログＤ２を読み出す際には、ブロック管理部３１が、ＮＡＮＤメモリ１０内からログ情報５Ｂを抽出してシステム管理部３２に送る。
【００９２】
システム管理部３２は、ログ情報５Ｂ内の各ブロック４〜７の中から一番後に更新されたページ（最新ページ）を検索する。システム管理部３２は、読み出しに成功するまでブロック番号が若いブロックから順番にそのページのログを読み出す。ここでは、ブロック４、ブロック５、ブロック６、ブロック７の順番で最新ページであるページ１内のログＤ２が読み出される。
【００９３】
システム管理部３２は、ブロック４からのデータ読み出しに失敗して読み出しができなかった場合、ブロック４の同じページ番号のページからデータを読み出す。以降、読み出しができるまでブロックを移動して同じページ番号のページを読み出す処理を繰り返す。
【００９４】
ブロック４〜７の何れかからログＤ２を読み出すことができた場合、ポインタＣ２の読み出し処理が行われる。ポインタ情報５ＡからポインタＣ２を読み出す際には、ブロック管理部３１が、ＮＡＮＤメモリ１０内からポインタ情報５Ａを抽出してシステム管理部３２に送る。
【００９５】
システム管理部３２は、ログＤ２内に格納されている、ブロック毎の書込み成否情報を読み出す。そして、システム管理部３２は、読み出した書込み成否情報を参照して適切なブロック（書き込みに成功しているブロック）からポインタの読み出しを行なう。このとき、システム管理部３２は、読み出しに成功したブロックの最新ページ（ここではページ１）からデータ（ポインタＣ２）を読み出す（１５）。
【００９６】
システム管理部３２は、書込み成否情報に基づいて、複数のブロックに対してポインタＡ１の書込みが成功していると判断できた場合、書込みが成功しているブロックの中からブロック番号が最も若いブロックの最新ページ（ページ１）からデータを読み出す。読み出しに失敗すると、ブロック番号が若い順番で次のブロックのページ１からポインタＣ２を読み出す処理が、読み出しに成功するまで繰り返される。システム管理部３２は、読み出したログＤ２、読み出したポインタＣ２と、に基づいて、リカバリ処理の必要性を判断する。本実施形態では、図６で説明した第１の実施形態と同様の方法によって、何れの位置にリカバリ処理を行うかの判定処理を行う。
【００９７】
なお、ＮＡＮＤメモリ１０が多値メモリで構成される場合であっても、固定領域４０Ｂは、ポインタ情報５Ａのデータの信頼性を高めるために、２値モードで使用することが望ましい。
【００９８】
このように、第２の実施形態によれば、ポインタ情報とログ情報を別々に保存しておくので、最新のログの読み出し処理と、最新のポインタの読み出し処理を、容易に行うことが可能となる。
【００９９】
（第３の実施形態）
つぎに、図１２〜図１５を用いてこの発明の第３の実施形態について説明する。第３の実施形態では、ポインタ情報を固定領域に保存するとともに、ログ情報を可変領域に保存しておく。
【０１００】
図１２は、第３の実施形態に係るポインタ情報およびログ情報の格納位置を模式的に示す図である。図１２の各構成要素のうち図２または図８に示す第１または第２の実施形態の管理情報保存領域４００と同一機能を達成する構成要素については同一番号を付しており、重複する説明は省略する。
【０１０１】
ＮＡＮＤメモリ１０のうち、管理情報４５、ポインタ情報６Ａおよびログ情報６Ｂが保存される管理情報保存領域４００には、固定領域４０Ｃと、可変領域４１Ｃと、がある。固定領域４０Ｃは、第１または第２の実施形態で説明した固定領域４０Ａ，４０Ｂと同様の領域であり、ポインタ情報６Ａが格納される。可変領域４１Ｂは、第１または第２の実施形態で説明した可変領域４１Ａ，４１Ｂと同様の領域であり、管理情報４５およびログ情報６Ｂが格納される。
【０１０２】
本実施形態では、固定領域４０Ｃ内でポインタ情報６Ａを記憶し、可変領域４１Ｃ内でログ情報６Ｂを記憶することにより、ポインタ情報６Ａとログ情報６Ｂと、を別々に記憶する。ポインタ情報６Ａは、ポインタ情報５Ａと同様の情報であり、ログ情報６Ｂは、ログ情報５Ｂと同様の情報である。
【０１０３】
つぎに、ポインタ情報６Ａとログ情報６Ｂの保存方法について説明する。図１３は、第３の実施形態に係るポインタ情報とログ情報の構成例を示す図である。ポインタ情報６Ａは、例えば、ブロック０，１からなるLane０とブロック２，３からなるLane１とを用いて、固定領域４０Ｃ内に保存される。また、ログ情報６Ｂは、例えば、ブロック４，５からなるLane２とブロック６，７からなるLane３とを用いて、可変領域４１Ｃ内に保存される。ポインタ情報６Ａの各ブロック０〜３へは、同一のポインタをコピーして保存しておく。また、ログ情報６Ｂの各ブロック４〜７へは、同一のログをコピーして保存しておく。
【０１０４】
例えば、ポインタ情報６Ａの更新は、管理情報４５が読み出されてブロック管理部３１が初期化され動作可能となった後に行なわれる。なぜなら、ポインタ情報６Ａの更新は、メモリシステムが起動して利用可能となり、ユーザデータの書き込みが発生することによって管理情報４５が更新されない限り発生しないからである。ブロック管理部３１が動作可能になった後は、ブロック管理部３１が有しているウエアレベリング（ブロックの均一化による書き込み回数平準化）機構を用いて動的にブロックを割り当てる。換言すると、ログ情報６Ｂは、ウエアレベリングを考慮して動的にブロックを割り当てられたブロックに記録される。
【０１０５】
ポインタ内に格納される情報およびログ内に格納される情報は、第２の実施形態で説明した情報と同じ情報であるので、その説明を省略する。また、最新のポインタであるポインタＣ２および最新のログであるログＤ２の読み出し手順は、第２の実施形態で説明した手順と同じであるので、その説明を省略する。また、何れの位置にリカバリ処理を行うかの判定処理は、第１の実施形態と同様の方法によって行われるので、その説明を省略する。
【０１０６】
本実施形態では、ブロック管理部３１がログ情報６Ｂの格納位置に関する情報を持っている。そして、システム起動時には、ブロック管理部３１がログ情報６Ｂの格納位置に関する情報に基づいて、ログ情報６Ｂを抽出し、システム管理部３２に送る。
【０１０７】
このように、本実施形態では、ポインタ情報６Ａを固定領域４０Ｃに保存し、ログ情報６Ｂを可変領域４１Ｃに保存している。このため、固定領域４０Ｃに書込むデータ量を少なくすることが可能となり、静的に割り当てるブロックの使用を必要最小限とすることが可能になる。換言すると、ログ情報６Ｂを動的に割り当てられたブロックに記録することにより、ログ情報６Ｂのためにブロックを別途静的に割り当てるは必要がなくなる。このように、ログ情報６Ｂのために静的にブロックを確保する必要がないので、ウエアレベリング機構を用いて動的に確保できるブロックが多くなる。したがって、メモリシステムとして自由に使えるメモリ容量を多く確保できる。
【０１０８】
また、ログ情報６Ｂを可変領域４１Ｃに記憶させているので、ログ情報６Ｂの記録のために固定領域４０Ｃ内のブロックの疲弊が早く進むことはない。このため、固定領域４０Ｃを構成するブロックの劣化を防ぐことが可能となる。
【０１０９】
また、固定領域４０Ｃにログ情報６Ｂを記憶させないことにより、重要な情報が読み出せなくなるリスクを低減できる。静的に確保したブロックはウエアレベリングの対象ではなく、固定領域４０Ｃに多くの情報を記憶させると、同じブロックを何度も使うことになるからである。
【０１１０】
なお、ＮＡＮＤメモリ１０が多値メモリで構成される場合であっても、固定領域４０Ｃは、ポインタ情報５Ａのデータの信頼性を高めるために、２値モードで使用することが望ましい。
【０１１１】
このように、第３の実施形態によれば、ログ情報６Ｂを可変領域４１Ｃに記憶させているので、メモリシステムの低寿命化を抑制することが可能になるとともに、ＮＡＮＤメモリ１０を効率良く使用することが可能となる。
【０１１２】
図１４は、ＳＳＤ１００を搭載したパーソナルコンピュータの一例を示す斜視図である。パーソナルコンピュータ１２００は、本体１２０１、及び表示ユニット１２０２を備えている。表示ユニット１２０２は、ディスプレイハウジング１２０３と、このディスプレイハウジング１２０３に収容された表示装置１２０４と、を備えている。
【０１１３】
本体１２０１は、筐体１２０５と、キーボード１２０６と、ポインティングデバイスであるタッチパッド１２０７とを備えている。筐体１２０５内部には、メイン回路基板、ＯＤＤ（optical  disk  device）ユニット、カードスロット、及びＳＳＤ１００等が収容されている。
【０１１４】
カードスロットは、筐体１２０５の周壁に隣接して設けられている。周壁には、カードスロットに対向する開口部１２０８が設けられている。ユーザは、この開口部１２０８を通じて筐体１２０５の外部から追加デバイスをカードスロットに挿抜することが可能である。
【０１１５】
ＳＳＤ１００は、従来のＨＤＤの置き換えとして、パーソナルコンピュータ１２００内部に実装された状態として使用してもよいし、パーソナルコンピュータ１２００が備えるカードスロットに挿入した状態で、追加デバイスとして使用してもよい。
【０１１６】
図１５は、ＳＳＤを搭載したパーソナルコンピュータのシステム構成例を示している。パーソナルコンピュータ１２００は、ＣＰＵ１３０１、ノースブリッジ１３０２、主メモリ１３０３、ビデオコントローラ１３０４、オーディオコントローラ１３０５、サウスブリッジ１３０９、ＢＩＯＳ−ＲＯＭ１３１０、ＳＳＤ１００、ＯＤＤユニット１３１１、エンベデッドコントローラ／キーボードコントローラＩＣ（ＥＣ／ＫＢＣ）１３１２、及びネットワークコントローラ１３１３等を備えている。
【０１１７】
ＣＰＵ１３０１は、パーソナルコンピュータ１２００の動作を制御するために設けられたプロセッサであり、ＳＳＤ１００から主メモリ１３０３にロードされるオペレーティングシステム（ＯＳ）を実行する。更に、ＯＤＤユニット１３１１が、装填された光ディスクに対して読出し処理及び書込み処理の少なくとも１つの処理の実行を可能にした場合に、ＣＰＵ１３０１は、それらの処理の実行をする。
【０１１８】
また、ＣＰＵ１３０１は、ＢＩＯＳ−ＲＯＭ１３１０に格納されたシステムＢＩＯＳ（Basic  Input  Output  System）も実行する。尚、システムＢＩＯＳは、パーソナルコンピュータ１２００内のハードウェア制御のためのプログラムである。
【０１１９】
ノースブリッジ１３０２は、ＣＰＵ１３０１のローカルバスとサウスブリッジ１３０９との間を接続するブリッジデバイスである。ノースブリッジ１３０２には、主メモリ１３０３をアクセス制御するメモリコントローラも内蔵されている。
【０１２０】
また、ノースブリッジ１３０２は、ＡＧＰ（Accelerated  Graphics  Port）バス等を介してビデオコントローラ１３０４との通信、及びオーディオコントローラ１３０５との通信を実行する機能も有している。
【０１２１】
主メモリ１３０３は、プログラムやデータを一時的に記憶し、ＣＰＵ１３０１のワークエリアとして機能する。主メモリ１３０３は、例えばＤＲＡＭから構成される。
【０１２２】
ビデオコントローラ１３０４は、パーソナルコンピュータ１２００のディスプレイモニタとして使用される表示ユニット１２０２を制御するビデオ再生コントローラである。
【０１２３】
オーディオコントローラ１３０５は、パーソナルコンピュータ１２００のスピーカ１３０６を制御するオーディオ再生コントローラである。
【０１２４】
サウスブリッジ１３０９は、ＬＰＣ（Low  Pin  Count）バス１３１４上の各デバイス、及びＰＣＩ（Peripheral  Component  Interconnect）バス１３１５上の各デバイスを制御する。また、サウスブリッジ１３０９は、各種ソフトウェア及びデータを格納する記憶装置であるＳＳＤ１００を、ＡＴＡインタフェースを介して制御する。
【０１２５】
パーソナルコンピュータ１２００は、セクタ単位でＳＳＤ１００へのアクセスを行う。ＡＴＡインタフェース（Ｉ／Ｆ）を介して、書き込みコマンド、読出しコマンド、フラッシュコマンド等がＳＳＤ１００に入力される。
【０１２６】
また、サウスブリッジ１３０９は、ＢＩＯＳ−ＲＯＭ１３１０、及びＯＤＤユニット１３１１をアクセス制御するための機能も有している。
【０１２７】
ＥＣ／ＫＢＣ１３１２は、電力管理のためのエンベデッドコントローラと、キーボード（ＫＢ）１２０６及びタッチパッド１２０７を制御するためのキーボードコントローラとが集積された１チップマイクロコンピュータである。
【０１２８】
このＥＣ／ＫＢＣ１３１２は、ユーザによるパワーボタンの操作に応じてパーソナルコンピュータ１２００の電源をＯＮ／ＯＦＦする機能を有している。ネットワークコントローラ１３１３は、例えばインターネット等の外部ネットワークとの通信を実行する通信装置である。
【０１２９】
パーソナルコンピュータ１２００は、ＳＳＤ１００に電源供給を行い、また、ＳＳＤ１００に停止要求（Standby要求）を発行する。仮にパーソナルコンピュータ１２００からＳＳＤ１００への電源供給が不正に断たれた場合であっても、書き込みエラーの発生を未然に防ぐことができる。
【０１３０】
このように第１〜第３の実施形態によれば、データ記憶の信頼性を容易に高めることが可能となる。
【０１３１】
本発明のいくつかの実施形態を説明したが、これらの実施形態は、例として提示したものであり、発明の範囲を限定することは意図していない。これら新規な実施形態は、その他の様々な形態で実施されることが可能であり、発明の要旨を逸脱しない範囲で、種々の省略、置き換え、変更を行うことができる。これら実施形態やその変形は、発明の範囲や要旨に含まれるとともに、特許請求の範囲に記載された発明とその均等の範囲に含まれる。
【符号の説明】
【０１３２】
１…ホスト、５Ａ，６Ａ…ポインタ情報、５Ｂ，６Ｂ…ログ情報、１０…ＮＡＮＤメモリ、２０…ＤＲＡＭ、３０…コントローラ、３１…ブロック管理部、３２…システム管理部、３３…コマンド処理部、３４…データ転送部、４０Ａ〜４０Ｃ…固定領域、４１Ａ〜４１Ｃ…可変領域、４５…管理情報、１００…ＳＳＤ。
【図１】
2012128645.tif 000003
【図２】
2012128645.tif 000004
【図３】
2012128645.tif 000005
【図４】
2012128645.tif 000006
【図５】
2012128645.tif 000007
【図６】
2012128645.tif 000008
【図７】
2012128645.tif 000009
【図８】
2012128645.tif 000010
【図９】
2012128645.tif 000011
【図１０】
2012128645.tif 000012
【図１１】
2012128645.tif 000013
【図１２】
2012128645.tif 000014
【図１３】
2012128645.tif 000015
【図１４】
2012128645.tif 000016
【図１５】
2012128645.tif 000017