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