(57)【要約】【課題】エラーが検出された情報の移動に伴う性能悪化を抑止する情報処理装置、制御回路、制御プログラム、および制御方法を提供する。【解決手段】ＮＡＮＤコントローラ６ａは、ＮＡＮＤデバイス７ａ〜１０ａの各物理ページから読出したデータからエラーの検出を行う。また、ＮＡＮＤコントローラ６ａは、読出したデータからエラーを検出した場合は、エラーが検出されたデータが書込まれた物理ページを含む領域であって、エラーの発生が推定される領域に含まれる各物理ページから、データを個別に検査読出する。そして、ＮＡＮＤコントローラ６ａは、検査読出を行ったデータからエラーが検出された場合は、読出したデータを他の物理ページに移動させる。【選択図】図４
2014229216.tif 000002
【特許請求の範囲】
【請求項１】
複数の記憶領域を有する記憶装置と、
前記記憶装置が有する記憶領域から読出されたデータからエラーの検出を行う検出部と、
前記検出部がエラーを検出した場合は、エラーが検出されたデータが書込まれた記憶領域を含むエラーの発生が推定される領域を識別し、当該識別した領域内の各記憶領域から、個別にデータの読出しを行う読出部と、
前記読出部によって読み出されたデータからエラーが検出された場合は、当該データを他の記憶領域に移動させる移動部と
を有することを特徴とする情報処理装置。
【請求項２】
前記記憶装置は、複数の記憶領域を含むブロックごとに、書込まれたデータを消去し、
前記読出部は、前記検出部がエラーを検出したデータが書き込まれた記憶領域を含むブロックの各記憶領域から、データの読出しを行うことを特徴とする請求項１に記載の情報処理装置。
【請求項３】
前記移動部は、前記検出部が、前記読出部によって読み出されたデータからエラーを検出した場合は、当該データが格納された記憶領域を含むブロック以外のブロックへ、前記データを移動させることを特徴とする請求項１または２に記載の情報処理装置。
【請求項４】
前記読出部によって読み出されたデータからエラーが検出された頻度を、前記読出部がデータの読出しを行うブロックごとに算出する頻度算出部を有し、
前記読出部は、エラーが検出されたデータが書き込まれた記憶領域を含むブロックの各記憶領域からデータの読出しを行う際に、前記頻度算出部が算出する頻度が所定の閾値よりも小さくなった場合は、当該ブロックに含まれる記憶領域からデータを読み出す処理を中断することを特徴とする請求項２または３に記載の情報処理装置。
【請求項５】
前記読出部は、エラーが検出されたデータが書き込まれた記憶領域を含むブロックの各記憶領域のうち、所定の数の記憶領域からデータの読出しを行い、かつ、前記頻度算出部が算出する頻度が所定の閾値よりも小さくなった場合は、当該ブロックに含まれる記憶領域からデータを読出す処理を中断することを特徴とする請求項４に記載の情報処理装置。
【請求項６】
前記読出部は、前記ブロックに含まれる各記憶領域から、ランダムな順番で、個別にデータの読出しを行うことを特徴とする請求項２〜５のいずれか１つに記載の情報処理装置。
【請求項７】
前記検出部によってエラーが検出されたデータが書込まれた記憶領域を含み、エラーの発生が推定される領域に含まれる各記憶領域を示す情報を記憶する記憶部を有し、
前記読出部は、前記記憶部が記憶する情報が示す記憶領域から、データの読出しを行うことを特徴とする請求項１〜６のいずれか１つに記載の情報処理装置。
【請求項８】
前記読出部は、前記記憶部が記憶する情報が示す記憶領域からデータの読出しを行う処理を開始してから所定の時間が経過した場合は、前記処理を停止し、前記処理の再開時は、最後に読出しを行った各記憶領域を示す情報の次に前記記憶部が記憶する情報を識別し、識別した情報が示す各記憶領域から、データの読出しを個別に行う処理を開始することを特徴とする請求項７に記載の情報処理装置。
【請求項９】
前記読出部は、所定の数の情報について、前記記憶部が記憶する情報が示す記憶領域からデータの読出しを行う処理を実行した場合は、前記処理を停止し、前記処理の再開時は、最後に読出しを行った各記憶領域を示す情報の次に前記記憶部が記憶する情報を識別し、識別した情報が示す各記憶領域から、データの読出しを個別に行う処理を開始することを特徴とする請求項７に記載の情報処理装置。
【請求項１０】
複数の記憶領域を有する記憶装置から読出されたデータからエラーの検出を行う検出部と、
前記検出部がエラーを検出した場合は、エラーが検出されたデータが書込まれた記憶領域を含むエラーの発生が推定される領域を識別し、当該識別した領域内の各記憶領域から個別にデータの読出しを行う読出部と、
前記読出部によって読み出されたデータからエラーが検出された場合は、当該データを他の記憶領域に移動させる移動部と
を有することを特徴とする制御回路。
【請求項１１】
コンピュータに、
複数の記憶領域を有する記憶装置から読出されたデータからエラーを検出し、
前記記憶装置から読出されたデータからエラーが検出された場合は、エラーが検出されたデータが書込まれた記憶領域を含むエラーの発生が推定される領域を識別し、当該識別した領域内の各記憶領域から、データを個別に読出し、
読出されたデータからエラーが検出された場合は、当該データを他の記憶領域に移動させる
処理を実行させることを特徴とする制御プログラム。
【請求項１２】
情報処理装置が、
複数の記憶領域を有する記憶装置から読出されたデータからエラーを検出し、
前記記憶装置から読出されたデータからエラーが検出された場合は、エラーが検出されたデータが書込まれた記憶領域を含むエラーの発生が推定される領域を識別し、当該識別した領域内の各記憶領域から、データを個別に読出し、
読出されたデータからエラーが検出された場合は、当該データを他の記憶領域に移動する
処理を実行することを特徴とする制御方法。
【発明の詳細な説明】
【技術分野】
【０００１】
本発明は、情報処理装置、制御回路、制御プログラム、および制御方法に関する。
【背景技術】
【０００２】
従来、磁気ディスクよりも高速に動作する不揮発性メモリを用いた情報処理装置が知られている。このような情報処理システムの一例として、ＮＡＮＤフラッシュメモリデバイスをストレージ等の記憶装置として使用する情報処理装置が知られている。なお、以下の説明では、ＮＡＮＤフラッシュメモリデバイスをＮＡＮＤデバイスと記載する。
【０００３】
ここで、ＮＡＮＤデバイスは、情報を書込んだままにしておくと、情報を書込んだ記憶領域の素子から電荷が抜け、ビット化けを発生させる場合がある。また、ＮＡＮＤデバイスは、情報の読み出しを行う際に記憶領域の素子に電圧を印加するので、隣接する記憶領域に格納された情報にビット化けを発生させる場合がある。
【０００４】
このようなビット化けによるエラーの発生を防ぐため、ＮＡＮＤデバイスは、各記憶領域に格納する情報からエラーの検出、および、エラーの訂正を行うエラー訂正符号を記憶する。そして、ＮＡＮＤデバイスの制御を行うＮＡＮＤコントローラは、エラー訂正符号を用いて、ＮＡＮＤデバイスから読出した情報からエラーの検出や訂正を実行する。
【０００５】
また、ＮＡＮＤデバイスが有する各記憶領域の素子は、書込まれた情報を消去する際に劣化が進行し、情報を保持する能力が低下する結果、エラーを発生させやすくなる。例えば、情報の記憶領域である物理ページ単位で情報の読出しを実行し、複数の物理ページを含む物理ブロック単位で情報の書込みや消去を実行するＮＡＮＤデバイスでは、物理ブロック単位で素子の劣化が進行し、エラーが発生し易くなる。
【０００６】
このような素子が劣化した物理ブロックを情報の書込対象から除外することで、エラーの拡大を防ぐＮＡＮＤコントローラが知られている。例えば、ＮＡＮＤコントローラは、読出した情報からエラーを検出した場合は、エラーが検出された情報が格納された物理ページを含む物理ブロックを特定する。そして、ＮＡＮＤコントローラは、特定した物理ブロック内の情報を他の物理ブロックに移動し、特定した物理ブロックを情報の格納対象から除外する。
【先行技術文献】
【特許文献】
【０００７】
【特許文献１】特開２００７−３１６７７９号公報
【特許文献２】特開平０６−２０８７９９号公報
【発明の概要】
【発明が解決しようとする課題】
【０００８】
しかしながら、上述したエラーが検出された物理ブロックの情報を他の物理ブロックに移動する技術では、エラーが発生していない情報も他の物理ブロックに退避する。このため、過剰な読出処理や書込処理が発生する結果、素子の劣化やデータ移動時の時間が増大し、ＮＡＮＤデバイスの性能が悪化するという問題がある。
【０００９】
１つの側面では、エラーが検出された情報の移動に伴う性能悪化を抑止する情報処理装置、制御回路、制御プログラム、および制御方法を提供することを目的とする。
【課題を解決するための手段】
【００１０】
一態様の情報処理装置は、複数の記憶領域を有する記憶装置を有する。また、情報処理装置は、記憶装置の各記憶領域から読出されたデータからエラーの検出を行う。また、情報処理装置は、エラーを検出した場合は、エラーが検出されたデータが書込まれた記憶領域を含み、エラーの発生が推定される領域に含まれる各記憶領域から、個別にデータの読出しを行う。そして、情報処理装置は、読み出されたデータからエラーが検出された場合は、エラーが検出されたデータを他の記憶領域に移動させる。
【発明の効果】
【００１１】
一実施形態によれば、エラーが検出された情報の退避に伴う性能悪化を抑止できる。
【図面の簡単な説明】
【００１２】
【図１】図１は、実施例１に係る情報処理装置を説明する図である。
【図２】図２は、メモリアクセスの一例を説明する図である。
【図３】図３は、ＮＡＮＤコントローラが実行する処理の一例を説明する図である。
【図４】図４は、実施例１に係るＮＡＮＤコントローラの機能構成を説明する図である。
【図５】図５は、実施例１に係るアドレス変換テーブルに格納された情報の一例を説明する図である。
【図６】図６は、実施例１に係る管理情報テーブルに格納された情報の一例を説明する図である。
【図７】図７は、エラーログ記憶部の機能構成の一例を説明する図である。
【図８】図８は、ＮＡＮＤコントローラが実行する処理を説明する図である。
【図９】図９は、実施例１に係るＮＡＮＤコントローラが実行する処理の流れを説明するフローチャートである。
【図１０】図１０は、実施例２に係るＮＡＮＤコントローラの機能構成を説明する図である。
【図１１】図１１は、実施例２に係るＮＡＮＤコントローラが実行する処理の流れを説明するフローチャートである。
【図１２】図１２は、実施例３に係るＮＡＮＤコントローラの機能構成を説明する図である。
【図１３】図１３は、実施例３に係るＮＡＮＤコントローラが実行する処理の流れを説明するフローチャートである。
【図１４】図１４は、エラーログ記憶部のバリエーションを説明する図である。
【図１５】図１５は、エラーログを含む管理情報テーブルの一例を説明する図である。
【図１６】図１６は、制御プログラムを実行するＮＡＮＤコントローラの一例を説明する図である。
【発明を実施するための形態】
【００１３】
以下に添付図面を参照して本願に係る情報処理装置、制御回路、制御プログラム、および制御方法の実施例を図面に基づいて詳細に説明する。なお、以下の実施例により開示技術が限定されるものではない。また、各実施例は、矛盾しない範囲で適宜組みあわせてもよい。
【実施例１】
【００１４】
以下の実施例１では、図１を用いて、本願に係る情報処理装置の一例を説明する。図１は、実施例１に係る情報処理装置を説明する図である。図１に示す例では、情報処理装置１は、複数のメモリ２ａ、２ｂ、複数のＣＰＵ（Central  Processing  Unit）３ａ、３ｂ、Ｉ／Ｏ（Input  Output）ハブ４、複数のＳＳＤ（Solid  State  Drive）５ａ、５ｂを有する。また、ＳＳＤ５ａは、ＮＡＮＤコントローラ６ａ、および複数のＮＡＮＤデバイス７ａ〜１０ａを有する。
【００１５】
また、ＳＳＤ５ｂは、ＮＡＮＤコントローラ６ｂ、および複数のＮＡＮＤデバイス７ｂ〜１０ｂを有する。なお、以下の説明では、ＮＡＮＤコントローラ６ｂ、および複数のＮＡＮＤデバイス７ｂ〜１０ｂは、ＮＡＮＤコントローラ６ａ、および複数のＮＡＮＤデバイス７ａ〜１０ａと同様の機能を発揮するものとして、説明を省略する。
【００１６】
各メモリ２ａ、２ｂは、各ＣＰＵ３ａ、３ｂが演算処理に用いるデータを記憶する記憶装置である。また、各ＣＰＵ３ａ、３ｂは、メモリ２ａ、２ｂが記憶するデータを用いて、各種演算処理を行う演算処理装置である。例えば、ＣＰＵ３ａ、３ｂは、ＮＵＭＡ（Non-Uniform  Memory  Access）の技術を用いて、メモリ２ａ、２ｂが記憶するデータを取得し、取得したデータを用いて演算処理を実行する。
【００１７】
また、ＣＰＵ３ａ、３ｂは、Ｉ／Ｏハブ４を介して、各ＳＳＤ５ａ、５ｂが記憶するデータを取得し、取得したデータを用いて演算処理を実行する。詳細には、ＣＰＵ３ａは、ＳＳＤ５ａに対し、データの読出し要求や書込み要求を発行し、各ＮＡＮＤデバイス７ａ〜１０ａからデータの読出しや書込みを行う。例えば、ＣＰＵ３ａは、ＳＳＤ５ａに対し、読出し対象となるデータを指定する論理アドレスが格納された読出し要求を発行する。また、ＣＰＵ３ａは、データの書込み先を指定する論理アドレスと、書込み対象となるデータとが格納された書込み要求を発行する。
【００１８】
ＮＡＮＤデバイス７ａは、各種データを記憶する不揮発性メモリである。詳細には、ＮＡＮＤデバイス７ａは、データの記憶領域である物理ページを複数有し、物理ページ単位でデータの書込みを行う。また、ＮＡＮＤデバイス７ａは、複数の物理ページを有する物理ブロックを複数有し、ブロック単位でデータの消去を行う。ここで、１つの物理ページは、例えば、８キロバイトの記憶容量を有し、１つの物理ブロックは、例えば、１２８の物理ページを有する。
【００１９】
ＮＡＮＤコントローラ６ａは、各ＮＡＮＤデバイス７ａ〜１０ａに対してアクセスし、データの読出しや書込みを行う。例えば、ＮＡＮＤコントローラ６ａは、各ＣＰＵ３ａ、３ｂがデータが記憶された記憶領域を指定する際に用いる論理アドレスと、データが格納されたＮＡＮＤデバイス７ａ〜１０ａの記憶領域を示す物理アドレスとを対応付けたアドレス変換テーブルを有する。
【００２０】
そして、ＮＡＮＤコントローラ６ａは、読出し要求とともに論理アドレスを受信すると、アドレス変換テーブルを用いて、論理アドレスと対応付けられた物理アドレスを識別し、識別した物理アドレスが示す記憶領域からデータの読出しを行う。その後、ＮＡＮＤコントローラ６ａは、Ｉ／Ｏハブ４を介して、読出したデータをＣＰＵ３ａに送信する。
【００２１】
なお、以下の説明では、理解を容易にするため、各物理ページの先頭アドレスとなる論理アドレスを単に論理アドレスと記載し、各物理ページの先頭アドレスとなる物理アドレスを単に物理アドレスと記載する。また、情報処理装置１が実行するシステムは、各物理ページの先頭アドレスとなる論理アドレスに対する読出し要求や書込み要求を発行するものとする。
【００２２】
例えば、ＮＡＮＤコントローラ６ａは、ＮＡＮＤデバイス７ａ〜１０ａが、複数のブロックを有し、各ブロックに２ｑ個の物理ページが含まれている場合は、以下の処理を行う。まず、ＮＡＮＤコントローラ６ａは、論理アドレスの下位ｑビットを論理的な１つのブロック内において、物理ページと同等の大きさを持つ仮想的なページを識別するための論理ページ番号とし、残りの論理アドレスの上位ｐビットを論理的な１つのブロックを示す論理ブロックアドレスとする。
【００２３】
また、ＮＡＮＤコントローラ６ａは、物理アドレスの上位ｐビットを物理的な１つのブロックを示す物理ブロックアドレスとし、物理アドレスの下位ｑビットを物理的な１つのブロック内において、各物理ページを識別するための物理ページ番号とする。つまり、ＮＡＮＤコントローラ６ａは、論理アドレスを、論理ブロックを示す論理ブロックアドレスと、論理ページを論理ブロックごとに示す論理ページ番号とに分割する。また、ＮＡＮＤコントローラ６ａは、物理アドレスを、物理ブロックを示す物理ブロックアドレスと、物理ページを物理ブロックごとに示す物理ページ番号とに分割する。
【００２４】
以下、図２を用いて、ＮＡＮＤコントローラ６ａが実行するメモリアクセスの一例について説明する。図２は、メモリアクセスの一例を説明する図である。なお、図２に示す例では、理解を容易にするため、ブロック数を「８」とし、各ブロック内の物理ページ数が「４」のＮＡＮＤデバイス７ａについて記載した。また、図２に示す例では、ＮＡＮＤコントローラ６ａが、論理ブロックアドレスと物理ブロックアドレスとを対応付けたアドレス変換テーブルを用いて、ＮＡＮＤデバイス７ａ〜１０ａが有する物理ページ単位でデータの書込みを行う処理について記載した。
【００２５】
例えば、ＮＡＮＤコントローラ６ａは、図２中（ａ）に示すように、ＣＰＵ３ａが実行するファイルシステムから、論理ブロックアドレス「Ｌ０」の論理ページ番号「３」、すなわち論理アドレス「Ｌ０−３」に書き込み要求を発行する。すると、ＮＡＮＤコントローラ６ａは、アドレス変換テーブルを用いて、論理アドレス「Ｌ０−３」に対応付けられた物理アドレス「Ｐ４−３」を取得し、図２中（ｂ）に示すように、更新前のデータが格納されている物理ページを識別する。
【００２６】
続いて、ＮＡＮＤコントローラ６ａは、図２中（ｃ）に示すように、物理アドレス「Ｐ４−３」が示す物理ページのデータを読出し、読み出したデータを書込み対象のデータに更新し、更新後のデータを予備ブロックの空き物理ページに格納する。詳細な例を挙げると、ＮＡＮＤコントローラ６ａは、図２中（ｄ）に示すように、物理アドレス「Ｐ８−０」が示す物理ページに更新後のデータを格納する。その後、ＮＡＮＤコントローラ６ａは、図２中（ｅ）に示すように、論理アドレス「Ｌ０−３」と対応付けられていた物理アドレス「Ｐ４−３」を「Ｐ８−０」に更新し、処理を終了する。
【００２７】
また、ＮＡＮＤコントローラ６ａは、劣化速度のばらつきを平準化したり、電荷が素子から抜けることで発生するビット化けを防ぐため、ＮＡＮＤデバイスの各ブロックにデータを書込んだ際の時刻をタイムスタンプとして記憶する。そして、ＮＡＮＤコントローラ６ａは、各ブロックについて、記憶したタイムスタンプと現在の時刻との差が所定の閾値よりも大きい場合は、ブロックに格納されたデータを他のブロックに移動する。
【００２８】
以下、図３を用いて、ＮＡＮＤコントローラ６ａが実行する処理の一例を説明する。図３は、ＮＡＮＤコントローラが実行する処理の一例を説明する図である。なお、図３に示す例では、ＮＡＮＤコントローラ６ａは、論理アドレスと物理アドレスとを対応付けたアドレス変換テーブルを有するものとする。また、図３に示す例では、管理情報テーブルは、各物理ブロックにデータを書込んだ際の時刻を示すタイムスタンプと、各物理ブロックに含まれる各物理ページのデータが有効か否かを示すページバリッドとを管理する管理情報テーブルとを有するものとする。
【００２９】
まず、ＮＡＮＤコントローラ６ａが実行する読出し・書込み制御について説明する。例えば、ＮＡＮＤコントローラ６ａは、図３中（ｆ）に示すように、Ｉ／Ｏハブ４から読出し要求を受信する。すると、ＮＡＮＤコントローラ６ａは、読出し・書込み制御を実行する。まず、ＮＡＮＤコントローラ６ａは、図３中（ｇ）に示すように、アドレス変換テーブルを用いて論理アドレスを物理アドレスに変換する。
【００３０】
そして、ＮＡＮＤコントローラ６ａは、図３中（ｈ）に示すように、変換後の物理アドレスを用いて、デバイスアクセス制御を実行する。詳細には、ＮＡＮＤコントローラ６ａは、図３中（ｉ）に示すように、変換後の物理アドレスが示す記憶領域からデータの読出しを行う。この結果、ＮＡＮＤコントローラ６ａは、図３中（ｊ）に示すように、読出し対象のデータと、読出し対象のデータからエラーを検出するためのＥＣＣ（Error  Check  and  Correction）ビットとを取得する。
【００３１】
また、ＮＡＮＤコントローラ６ａは、図３中（ｋ）に示すように、取得したＥＣＣビットを用いて、読出し対象のデータからエラーの検出、および、訂正を実行する。そして、ＮＡＮＤコントローラ６ａは、図６中（ｌ）に示すように、エラーの検出、および、訂正が終了したデータを取得し、データをＩ／Ｏハブ４に出力する。
【００３２】
また、ＮＡＮＤコントローラ６ａは、Ｉ／Ｏハブ４から書込み要求を受信する。すると、ＮＡＮＤコントローラ６ａは、図３中（ｍ）に示すように、データの書込み対象となる物理ページを含む物理ブロックの物理ブロックアドレスと、現在の時刻を表すタイムスタンプとを対応付けて管理情報テーブルに格納する。そして、ＮＡＮＤコントローラ６ａは、ＮＡＮＤデバイス７ａ〜１０ａに、データの書込みを行う。
【００３３】
次に、ＮＡＮＤコントローラ６ａが実行するデータ移動制御について説明する。例えば、ＮＡＮＤコントローラ６ａは、アプリケーションプログラムの指示や、所定の時間間隔で、以下のウェアレベリング処理を実行する。詳細には、ＮＡＮＤコントローラ６ａは、図６中（ｎ）に示すように、最後にデータの書込みが行われてから所定の時間が経過した物理ブロックの物理ブロックアドレスを取得する。そして、ＮＡＮＤコントローラ６ａは、取得した物理ブロックアドレスが示す物理ブロックの各物理ページに格納されたデータを、有効なデータが格納されていない物理ブロックである予備ブロックに移動する。
【００３４】
また、ＮＡＮＤコントローラ６ａは、以下のガベージコレクション処理を実行する。詳細には、ＮＡＮＤコントローラ６ａは、図６中（ｎ）に示すように、管理情報テーブルを参照し、所定の条件を満たす物理ブロック、例えば、格納されたデータのうち、有効なデータが閾値よりも少ない物理ブロックを特定する。そして、ＮＡＮＤコントローラ６ａは、特定した物理ブロックに格納された有効なデータを予備ブロックに移動させる。その後、ＮＡＮＤコントローラ６ａは、特定した物理ブロックの各データを消去して、データを書込み可能な予備ブロックとする。
【００３５】
ここで、ＮＡＮＤデバイス７ａ〜１０ａの素子は、劣化が進むと、電荷を適切に保持することができなくなる。また、ＮＡＮＤデバイス７ａ〜１０ａは、物理ブロック単位でデータの消去を行う。このため、ＮＡＮＤデバイス７ａ〜１０ａの素子は、劣化が進んだ素子を含む物理ブロックにデータが書込まれた場合は、書込まれたデータにビット化けを発生させる場合がある。
【００３６】
そこで、従来のＮＡＮＤデバイスは、読出し対象のデータからエラーを検出した場合は、読出し対象のデータが格納された物理ページを含む物理ブロックを特定し、特定した物理ブロックに格納された全ての有効データを予備ブロックに移動する。そして、ＮＡＮＤデバイスは、特定した物理ブロックを使用しないように、データの書込み対象から除外し、あらかじめ用意した代替用の物理ブロックをデータの書込み対象に追加する。
【００３７】
しかしながら、エラーが検出されたデータが格納された物理ページを含む物理ブロックに格納された全ての有効データを他の物理ブロックに移動する技術では、ＮＡＮＤデバイス７ａ〜１０ａに対して過剰な読出し処理、および、書込み処理が実行される。特に、ＮＡＮＤデバイス７ａ〜１０ａに対するデータの書込み処理には、時間を要する。
【００３８】
このように、データの移動が行われている間は、ＮＡＮＤデバイス７ａ〜１０ａに対する通常の読出し処理や書込み処理の実行が阻害されるので、従来のＮＡＮＤコントローラは、ＮＡＮＤデバイス７ａ〜１０ａの性能を悪化させるという問題がある。また、従来のＮＡＮＤコントローラは、ＮＡＮＤデバイス７ａ〜１０ａに対して過剰な書込み処理を実行するので、ＮＡＮＤデバイス７ａ〜１０ａの素子を劣化させてしまう結果、ＮＡＮＤデバイス７ａ〜１０ａの寿命を悪化させてしまう。
【００３９】
なお、エラーが検出された物理ページを含む物理ブロック全体でエラーが発生する確率を推定して、推定した確率が所定の閾値よりも低い場合は、データの移動を行わないことで、データの移動時間を削減する手法が考えられる。しかしながら、係る処理をハードウェアで実現するのは困難である。
【００４０】
そこで、ＮＡＮＤコントローラ６ａは、以下の処理を実行する。まず、ＮＡＮＤコントローラ６ａは、読出したデータからエラーを検出した場合は、読出したデータが格納された物理ページを含む所定の領域であって、エラーの発生が推定される領域を識別する。例えば、ＮＡＮＤコントローラ６ａは、読出したデータが格納された物理ページを含む物理ブロックを識別する。
【００４１】
また、ＮＡＮＤコントローラ６ａは、識別した領域に含まれる各物理ページから、データの読出しを個別に実行する。なお、以下の説明では、エラーの発生が推定される領域に含まれる各物理ページから個別にデータの読出しを行う処理を、検査読出と記載する。そして、ＮＡＮＤコントローラ６ａは、検査読出によって読出されたデータからエラーを検出した場合は、検査読出の対象となった物理ページのデータを、他の物理ページに移動する。
【００４２】
すなわち、ＮＡＮＤコントローラ６ａは、読出したデータからエラーが検出された場合は、エラーの発生が推定される領域に含まれる各物理ページから、個別にデータの検査読出を実行する。そして、ＮＡＮＤコントローラ６ａは、検査読出の結果、エラーが検出された物理ページのデータのみを、他の物理ページに移動する。このため、ＮＡＮＤコントローラ６ａは、過剰なデータの読出し処理や書込み処理を削減できるので、ＮＡＮＤデバイス７ａ〜１０ａの性能や寿命が悪化するのを防ぐことができる。
【００４３】
次に、図４を用いて、ＮＡＮＤコントローラ６ａが有する機能構成の一例について説明する。なお、以下の説明では、ＮＡＮＤコントローラ６ａが有する機能のうち、エラーの発生が推定される領域に含まれる物理ページに対し、個別に検査読出を実施し、エラーが検出された物理ページのデータを他の物理ページに移動する処理の流れについて説明する。
【００４４】
図４は、実施例１に係るＮＡＮＤコントローラの機能構成を説明する図である。図４に示す例では、ＮＡＮＤコントローラ６ａは、テーブル記憶部１１、リクエスタインターフェース部１２、リクエスト調停部１３、テーブル制御部１４、デバイスアクセス制御部１５を有する。また、ＮＡＮＤコントローラ６ａは、エラー検出部１６、エラーログ記憶部１７、検査読出制御部１８、データ移動制御部１９を有する。また、テーブル記憶部１１は、アドレス変換テーブル２０、管理情報テーブル２１を記憶する。
【００４５】
まず、図５、図６を用いて、テーブル記憶部１１が記憶するアドレス変換テーブル２０と、管理情報テーブル２１に格納された情報について説明する。図５は、実施例１に係るアドレス変換テーブルに格納された情報の一例を説明する図である。図５に示すように、アドレス変換テーブル２０には、論理アドレスと、物理アドレスとが対応付けて格納されている。
【００４６】
例えば、図５に示す例では、アドレス変換テーブル２０には、論理アドレス「Ｌ０−０」と物理アドレス「Ｐ４−０」とが対応付けて格納されている。すなわち、アドレス変換テーブル２０は、物理アドレス「Ｐ４−０」が示す物理ページに論理アドレス「Ｌ０−０」が指定するデータが格納されている旨を示す。
【００４７】
同様に、図５に示す例では、アドレス変換テーブル２０には、論理アドレス「Ｌ０−１」と物理アドレス「Ｐ３−３」とが対応付けて格納され、論理アドレス「Ｌ０−２」と物理アドレス「Ｐ２−２」とが対応付けて格納される。また、アドレス変換テーブル２０には、論理アドレス「Ｌ０−３」と物理アドレス「Ｐ４−３」とが対応付けて格納される。なお、アドレス変換テーブル２０には、他にも、論理アドレスと物理アドレスとが対応付けて格納されているものとする。
【００４８】
次に、図６を用いて、管理情報テーブル２１に格納される情報について説明する。図６は、実施例１に係る管理情報テーブルに格納された情報の一例を説明する図である。図６に示すように、管理情報テーブル２１には、物理ブロックアドレスと、ページバリッドと、タイムスタンプとが対応付けて記憶される。
【００４９】
ここで、ページバリッドとは、対応付けられた物理ブロックアドレスが示す物理ブロックの各物理ページに格納されたデータが、有効なデータであるか否かを示すビット列である。例えば、管理情報テーブル２１は、１つの物理ブロックに、ｎ個の物理ページが含まれる場合は、ｎビットのビット列をページバリッドとする。また、管理情報テーブル２１は、物理ブロックに含まれる各物理ページとページバリッドの各ビットとを対応付け、有効なデータが格納された物理ページと対応付けたビットを「１」とする。また、管理情報テーブル２１は、有効なデータが格納されていない物理ページと対応付けたビットを「０」とする。
【００５０】
また、タイムスタンプとは、対応付けられた物理ブロックアドレスが示す物理ブロックにデータが格納された時刻を示す情報である。例えば、図６に示す例では、管理情報テーブル２１には、物理ブロックアドレス「Ｐ０」と、ページバリッド「１１０１…」と、タイムスタンプ「１０５１６」とが対応付けて格納される。すなわち、管理情報テーブル２１は、物理ブロックアドレス「Ｐ０」が示す物理ブロックに含まれる物理ページのうち、物理ページ番号が「０」、「１」、「３」等の物理ページに格納されたデータが有効データである旨を示す。また、管理情報テーブル２１は、物理ブロックアドレス「Ｐ０」が示す物理ブロックに対して、時刻が「１０５１６」である際に、データの書込みが行われた旨を示す。
【００５１】
同様に、図６に示す例では、管理情報テーブル２１には、物理ブロックアドレス「Ｐ１」と、ページバリッド「１０１０…」と、タイムスタンプ「９１２」とが対応付けて格納される。また、管理情報テーブル２１には、物理ブロックアドレス「Ｐ２」と、ページバリッド「０００１…」と、タイムスタンプ「１２２９」とが対応付けて格納される。なお、管理情報テーブル２１には、他にも、物理ブロックアドレスとページバリッドとタイムスタンプとが対応付けて格納されているものとする。
【００５２】
図４に戻り、リクエスタインターフェース部１２は、ＣＰＵ３ａ、３ｂからＮＡＮＤデバイス７ａ〜１０ａに対するリクエストのインターフェースである。例えば、リクエスタインターフェース部１２は、ＣＰＵ３ａ、３ｂからＩ／Ｏハブ４を介して、論理アドレスを含む読出し要求を受信する。かかる場合は、リクエスタインターフェース部１２は、読出し要求をリクエスト調停部１３に出力する。また、リクエスタインターフェース部１２は、ＮＡＮＤデバイス７ａ〜１０ａから読出したデータをリクエスト調停部１３から受信すると、読出し要求の発行元となるＣＰＵ３ａ、３ｂに対して、データを送信する。
【００５３】
また、リクエスタインターフェース部１２は、ＣＰＵ３ａ、３ｂから、ＮＡＮＤデバイス７ａ〜１０ａに対して書込むデータと、書込み対象となるデータの論理アドレスとを含む書込み要求を受信する。かかる場合は、リクエスタインターフェース部１２は、受信した書込み要求をリクエスト調停部１３に出力する。また、リクエスタインターフェース部１２は、リクエスト調停部１３から、データ書込みが完了した旨の応答を受信すると、書込み要求の発行元となるＣＰＵ３ａ、３ｂに対して、応答を送信する。
【００５４】
リクエスト調停部１３は、リクエスタインターフェース部１２、検査読出制御部１８、データ移動制御部１９が発行する各種リクエストの調停を行う。詳細には、リクエスト調停部１３は、リクエスタインターフェース部１２から受信する読出し要求、又は、書込み要求を受信する。また、リクエスト調停部１３は、検査読出制御部１８から、データの検査読出を要求する検査読出要求を受信する。また、リクエスト調停部１３は、データ移動制御部１９から、ＮＡＮＤデバイス７ａ〜１０ａが記憶するデータの移動を要求する移動要求を受信する。
【００５５】
そして、リクエスト調停部１３は、リクエスタインターフェース部１２、検査読出制御部１８、データ移動制御部１９から受信する読出し要求、書込み要求、検査読出要求、移動要求の調停を行う。例えば、リクエスト調停部１３は、ＣＰＵ３ａ、３ｂからＮＡＮＤデバイス７ａ〜１０ａに対するデータの読出しや書込みが阻害されないよう、リクエスタインターフェース部１２が発行する読出し要求、および、書込み要求を最優先で実行する。なお、リクエスト調停部１３が各要求を調停するルールについては、上述した処理に限定されるものではなく、任意のルールを適用してよい。
【００５６】
次に、リクエスト調停部１３が読出し要求、書込み要求、検査読出要求、移動要求を受信した際に実行する処理の一例を説明する。例えば、リクエスト調停部１３は、読出し要求を受信すると、読出し要求に含まれる論理アドレスをテーブル制御部１４に出力する。そして、リクエスト調停部１３は、テーブル制御部１４から、読出し対象となる物理アドレスを受信すると、受信した物理アドレスを格納した読出し要求をデバイスアクセス制御部１５に発行する。その後、リクエスト調停部１３は、読出し対象となるデータをエラー検出部１６から受信すると、受信したデータをリクエスタインターフェース部１２に出力する。一方、リクエスト調停部１３は、エラー検出部１６からデータの読出しに失敗した旨の通知を受信した場合は、リクエスタインターフェース部１２に対し、データの読出しに失敗した旨を通知する。
【００５７】
また、リクエスト調停部１３は、書込み要求を受信すると、書込み要求に含まれる論理アドレスをテーブル制御部１４に出力する。この結果、リクエスト調停部１３は、書込み対象のデータが新たなデータである場合は、データが格納されていない予備ブロックのうち、データの書込み先となる物理ページの物理アドレスをテーブル制御部１４から受信する。
【００５８】
その後、リクエスト調停部１３は、テーブル制御部１４から受信した物理アドレスと、書込み対象のデータとを含む書込み要求をデバイスアクセス制御部１５に発行する。また、リクエスト調停部１３は、データの書込み先となる物理ページの物理アドレスと、書込み要求に含まれる論理アドレスとを含むテーブル更新要求をテーブル制御部１４に出力する。
【００５９】
また、リクエスト調停部１３は、書込みがデータの更新を目的とする場合は、更新元のデータが格納された物理ページの物理アドレスを更新元物理アドレスとしてテーブル制御部１４から受信する。また、リクエスト調停部１３は、テーブル制御部１４から、予備ブロックに含まれる物理ページの物理アドレス、すなわちデータの書込み先となる物理ページの物理アドレスを更新先物理アドレスとして受信する。
【００６０】
そして、リクエスト調停部１３は、更新元物理アドレスと、更新先物理アドレスとをテーブル制御部１４から受信した場合は、データの更新を要求する更新要求をデバイスアクセス制御部１５に発行する。詳細には、リクエスト調停部１３は、更新元物理アドレスと、更新先物理アドレスと、書込むデータとを含む更新要求をデバイスアクセス制御部１５に発行する。
【００６１】
また、リクエスト調停部１３は、更新元物理アドレスと、更新先物理アドレスと、書込み要求に含まれる論理アドレスとを含むテーブル更新要求をテーブル制御部１４に出力する。その後、リクエスト調停部１３は、デバイスアクセス制御部１５からデータの書込みが完了した旨の応答を受信すると、受信した応答をリクエスタインターフェース部１２に出力する。
【００６２】
また、リクエスト調停部１３は、検査読出制御部１８から、読出し対象のデータが格納された物理ページの物理アドレスを含む検査読出要求を受信する。かかる場合は、リクエスト調停部１３は、受信した検査読出要求をデバイスアクセス制御部１５に出力する。また、リクエスト調停部１３は、エラー検出部１６から、検査読出を行った旨の応答を受信すると、応答を検査読出制御部１８に出力する。
【００６３】
また、リクエスト調停部１３は、データ移動制御部１９から、移動対象のデータが格納された物理ページの物理アドレスを含む移動要求を受信する。以下、移動対象のデータが格納された物理アドレスを移動元物理アドレスと記載する。また、リクエスト調停部１３は、テーブル制御部１４に問い合わせる等して、予備ブロックの物理ブロックアドレス、すなわちデータの移動先となる物理ページの物理アドレスを取得する。以下、データの移動先となる物理ページの物理アドレスを移動先物理アドレスと記載する。
【００６４】
そして、リクエスト調停部１３は、移動元物理アドレスと、移動先物理アドレスとを含む移動要求をデバイスアクセス制御部１５に発行する。また、リクエスト調停部１３は、移動元物理アドレスと、移動先物理アドレスとを含むテーブル更新要求をテーブル制御部１４に出力する。その後、リクエスト調停部１３は、デバイスアクセス制御部１５からデータの移動が完了した旨の応答を受信すると、データ移動制御部１９に対して、データの移動が完了した旨の応答を出力する。
【００６５】
テーブル制御部１４は、論理アドレスを物理アドレスに変換する。例えば、テーブル制御部１４は、リクエスト調停部１３から読出し要求に格納された論理アドレスを受信すると、受信した論理アドレスと対応付けられた物理アドレスをアドレス変換テーブル２０から取得する。そして、テーブル制御部１４は、取得した物理アドレスをリクエスト調停部１３に出力する。
【００６６】
また、テーブル制御部１４は、リクエスト調停部１３から書込み要求に格納された論理アドレスを受信すると、受信した論理アドレスと対応付けられた物理アドレスをアドレス変換テーブル２０から検索する。そして、テーブル制御部１４は、受信した論理アドレスと対応付けられた物理アドレスがアドレス変換テーブル２０に格納されていない場合、すなわち、書込み対象のデータが新たなデータである場合は、以下の処理を実行する。
【００６７】
まず、テーブル制御部１４は、管理情報テーブル２１を参照し、ページバリッドの各ビットが全て「０」であるバリッドビットと対応付けられた物理ブロックアドレスを検索し、検出した物理ブロックアドレスを予備ブロックの物理ブロックアドレスとして取得する。そして、テーブル制御部１４は、取得した物理ブロックアドレスに含まれる物理ページから、データの書込み対象とする物理ページを選択し、選択した物理ページを示す物理アドレスをリクエスト調停部１３に出力する。
【００６８】
一方、テーブル制御部１４は、受信した論理アドレスと対応付けられた物理アドレスがアドレス変換テーブル２０に格納されている場合、すなわち、書込みがデータの更新を目的とする場合は、以下の処理を実行する。まず、テーブル制御部１４は、受信した論理アドレスと対応付けられた物理アドレスを更新元物理アドレスとしてリクエスト調停部１３に出力する。
【００６９】
また、テーブル制御部１４は、管理情報テーブル２１を参照して予備ブロックの物理ブロックアドレスを取得し、予備ブロックの物理ブロックアドレスが示す物理ブロックからデータの書込み先とする物理ページを選択する。そして、テーブル制御部１４は、選択した物理ページを示す物理アドレスを更新先物理アドレスとしてリクエスト調停部１３に出力する。
【００７０】
また、テーブル制御部１４は、リクエスト調停部１３が移動要求を受信した際には、リクエスト調停部１３から予備ブロックの物理アドレスの問い合わせを受ける。かかる場合は、テーブル制御部１４は、管理情報テーブル２１を参照して予備ブロックの物理ブロックアドレスを取得し、予備ブロックの物理ブロックアドレスが示す物理ブロックからデータの書込み先とする物理ページを選択する。そして、テーブル制御部１４は、選択した物理ページを示す物理アドレスを移動先物理アドレスとしてリクエスト調停部１３に出力する。
【００７１】
また、テーブル制御部１４は、データの書込みや移動に応じて、アドレス変換テーブル２０、および、管理情報テーブル２１の更新を行う。例えば、テーブル制御部１４は、リクエスト調停部１３が新たなデータの書込みを行う場合は、データの書込み先となる物理ページの物理アドレスと、書込み要求に含まれる論理アドレスとを含むテーブル更新要求を受信する。かかる場合は、テーブル制御部１４は、テーブル更新要求に含まれる論理アドレスと物理アドレスとを対応付けてアドレス変換テーブル２０に格納する。
【００７２】
また、テーブル制御部１４は、テーブル更新要求に含まれる物理アドレスから物理ブロックアドレスと物理ページ番号とを抽出し、管理情報テーブル２１のエントリのうち、抽出した物理ブロックアドレスが格納されたエントリを識別する。そして、テーブル制御部１４は、識別したエントリのページバリッドのうち、抽出した物理ページ番号に対応するページバリッドを「１」に更新する。また、テーブル制御部１４は、現在の時刻を示すタイムスタンプを、抽出したエントリに格納する。
【００７３】
また、テーブル制御部１４は、リクエスト調停部１３がデータの更新を行う場合は、更新元物理アドレスと、更新先物理アドレスと、書込み要求に含まれる論理アドレスとを含むテーブル更新要求を受信する。かかる場合は、テーブル制御部１４は、テーブル更新要求に含まれる論理アドレスが格納されたエントリをアドレス変換テーブル２０から識別する。そして、テーブル制御部１４は、識別したエントリの物理アドレスを、更新先物理アドレスに更新する。
【００７４】
また、テーブル制御部１４は、更新元物理アドレスから更新元物理ブロックアドレスと更新元物理ページ番号とを抽出し、管理情報テーブル２１から、抽出した更新元物理ブロックアドレスが格納されたエントリを識別する。そして、テーブル制御部１４は、識別したエントリに格納されたページバリッドのうち、抽出した更新元物理ページ番号に対応するページバリッドを「０」に更新する。
【００７５】
また、テーブル制御部１４は、更新先物理アドレスから更新先物理ブロックアドレスと更新先物理ページ番号とを抽出し、管理情報テーブル２１から、抽出した更新先物理ブロックアドレスが格納されたエントリを識別する。そして、テーブル制御部１４は、識別したエントリに格納されたページバリッドのうち、抽出した更新先物理ページ番号に対応するページバリッドを「１」に更新する。
【００７６】
また、テーブル制御部１４は、リクエスト調停部１３がデータの移動を行う場合は、移動元物理アドレスと、移動先物理アドレスとを含むテーブル更新要求を受信する。かかる場合は、テーブル制御部１４は、移動元物理アドレスが格納されたエントリをアドレス変換テーブル２０から抽出する。そして、テーブル制御部１４は、抽出したエントリに格納された移動元物理アドレスを、移動先物理アドレスに更新する。
【００７７】
また、テーブル制御部１４は、移動元物理アドレスから移動元物理ブロックアドレスと移動元物理ページ番号とを抽出し、管理情報テーブル２１から、抽出した移動元物理ブロックアドレスが格納されたエントリを識別する。そして、テーブル制御部１４は、識別したエントリに格納されたページバリッドのうち、抽出した移動元物理ページ番号に対応するページバリッドを「０」に更新する。
【００７８】
また、テーブル制御部１４は、移動先物理アドレスから移動先物理ブロックアドレスと移動先物理ページ番号とを抽出し、管理情報テーブル２１から、抽出した移動先物理ブロックアドレスが格納されたエントリを識別する。そして、テーブル制御部１４は、識別したエントリに格納されたページバリッドのうち、抽出した移動先物理ページ番号に対応するページバリッドを「１」に更新する。
【００７９】
デバイスアクセス制御部１５は、リクエスト調停部１３からの各種リクエストに従って、ＮＡＮＤデバイス７ａ〜１０ａに対するデバイスアクセスを実行する。例えば、デバイスアクセス制御部１５は、リクエスト調停部１３から、物理アドレスを含む読出し要求を受信する。かかる場合は、デバイスアクセス制御部１５は、ＮＡＮＤデバイス７ａ〜１０ａが有する物理ページのうち、読出し要求に格納されていた物理アドレスが示す物理ページに格納されたデータの読み出しを実行する。そして、デバイスアクセス制御部１５は、読み出したデータを読出し対象データとして、読出し要求に含まれる物理アドレスとともに、エラー検出部１６に出力する。
【００８０】
また、例えば、デバイスアクセス制御部１５は、リクエスト調停部１３から、物理アドレスと、書込み対象のデータとを含む書込み要求を受信する。かかる場合は、デバイスアクセス制御部１５は、書込み要求に含まれる物理アドレスが示す物理ページに書込み対象のデータを格納する。その後、デバイスアクセス制御部１５は、データの書込みを終了した旨の応答をリクエスト調停部１３に出力する。
【００８１】
また、例えば、デバイスアクセス制御部１５は、更新元物理アドレスと、更新先物理アドレスと、書込むデータとを含む更新要求をリクエスト調停部１３から受信する。かかる場合は、デバイスアクセス制御部１５は、更新元物理アドレスが示す物理ページのデータを読み出す。続いて、デバイスアクセス制御部１５は、読み出したデータを更新要求に含まれるデータに更新する。
【００８２】
そして、デバイスアクセス制御部１５は、更新したデータを、更新先物理アドレスが示す物理ページに格納する。その後、デバイスアクセス制御部１５は、データの書込みを終了した旨の応答をリクエスト調停部１３に出力する。
【００８３】
また、デバイスアクセス制御部１５は、移動元物理アドレスと、移動先物理アドレスとを含む移動要求をリクエスト調停部１３から受信する。かかる場合は、デバイスアクセス制御部１５は、移動元物理アドレスが示す物理ページからデータの読み出しを行う。そして、デバイスアクセス制御部１５は、読み出したデータを移動対象データとして、エラー検出部１６に出力する。さらに、デバイスアクセス制御部１５は、移動先物理アドレスが示す物理ページに、エラー検出部１６から返送されたエラーの検出・訂正を行ったデータを格納する。その後、デバイスアクセス制御部１５は、データの移動を終了した旨の応答をリクエスト調停部１３に出力する。
【００８４】
また、デバイスアクセス制御部１５は、物理アドレスを含む検査読出要求をリクエスト調停部１３から受信する。かかる場合は、デバイスアクセス制御部１５は、ＮＡＮＤデバイス７ａ〜１０ａが有する物理ページのうち、検査読出要求に格納されていた物理アドレスが示す物理ページに格納されたデータの読み出しを実行する。そして、デバイスアクセス制御部１５は、読み出したデータと、検査読出要求に含まれる物理アドレスとを検査読出対象データとしてエラー検出部１６に出力する。
【００８５】
エラー検出部１６は、ＮＡＮＤデバイス７ａ〜１０ａから読出したデータからエラーの検出を行う。例えば、エラー検出部１６は、デバイスアクセス制御部１５から読出し対象データと物理アドレスとを受信する。かかる場合は、エラー検出部１６は、例えば、読出し対象データの末尾に付加されるＥＣＣビットを用いて、読出し対象データからエラーの検出を行う。そして、エラー検出部１６は、読出し対象データからエラーが検出されなかった場合は、リクエスト調停部１３に対し、読出し対象データを出力する。
【００８６】
一方、エラー検出部１６は、読出し対象データからエラーを検出した場合は、ＥＣＣビットを用いて、エラーの訂正を試みる。そして、エラー検出部１６は、エラーを訂正した場合は、訂正後のデータをリクエスト調停部１３に出力する。一方、エラー検出部１６は、エラーを訂正できなかった場合は、データの読出しに失敗した旨の通知をリクエスト調停部１３に出力する。
【００８７】
また、エラー検出部１６は、読出し対象データからエラーを検出した場合は、以下の処理を実行する。まず、エラー検出部１６は、エラーが検出されたデータが格納された物理ページの物理アドレスをデータ移動制御部１９に通知する。また、エラー検出部１６は、エラーが検出されたデータが格納された物理ページの物理アドレスから物理ブロックアドレスを抽出する。そして、エラー検出部１６は、物理ブロックアドレスをエラーログ記憶部１７に格納する。
【００８８】
また、エラー検出部１６は、デバイスアクセス制御部１５から移動対象データを受信した場合は、移動対象データの末尾に付加されるＥＣＣビットを用いて、移動対象データからエラーの検出を行う。そして、エラー検出部１６は、エラーが検出されなかった場合は、データを変更せずにデバイスアクセス制御部１５に返送する。
【００８９】
一方、エラー検出部１６は、移動対象データからエラーを検出した場合は、ＥＣＣビットを用いて、エラーの訂正を試みる。そして、エラー検出部１６は、エラーを訂正した場合は、訂正後のデータをデバイスアクセス制御部１５に返送する。一方、エラー検出部１６は、エラーを訂正できなかった場合は、データを変更せずにデバイスアクセス制御部１５に返送する。
【００９０】
また、エラー検出部１６は、デバイスアクセス制御部１５から検査読出対象データと物理アドレスとを受信した場合は、以下の処理を実行する。まず、エラー検出部１６は、検査読出対象データの末尾に付加されるＥＣＣビットを用いて、検査読出対象データからエラーの検出を行う。そして、エラー検出部１６は、エラーが検出されなかった場合は、検査読出を行った旨の応答をリクエスト調停部１３に出力する。一方、エラー検出部１６は、エラーが検出された場合は、受信した物理アドレスをデータ移動制御部１９に出力する。その後、エラー検出部１６は、検査読出を行った旨の応答をリクエスト調停部１３に出力する。
【００９１】
例えば、エラー検出部１６は、物理アドレス「Ｐ０−１」とともに受信した読出し対象データからエラーを検出した場合は、物理ブロックアドレス「Ｐ０」をエラーログ記憶部１７に格納し、物理アドレス「Ｐ０−１」をデータ移動制御部１９に出力する。一方、エラー検出部１６は、物理アドレス「Ｐ０−１」とともに受信した検査読出対象データからエラーを検出した場合は、物理アドレス「Ｐ０−１」をデータ移動制御部１９に出力する。
【００９２】
エラーログ記憶部１７は、エラーの発生が推定される範囲を示す情報を記憶する。例えば、エラーログ記憶部１７は、読出されたデータのうち、エラーが検出されたデータが格納されていた物理ページを含む物理ブロックの物理ブロックアドレスをエラーログとして記憶する。
【００９３】
検査読出制御部１８は、エラーの発生が推定される範囲に含まれる各物理ページに対し、データの検査読出を個別に実行する検査読出制御を実行する。例えば、検査読出制御部１８は、一定の時間間隔、または、アプリケーションプログラムからの指示を契機として、エラーログ記憶部１７に記憶された物理ブロックアドレスを取得する。また、検査読出制御部１８は、取得した物理ブロックアドレスに、物理ブロックの先頭に位置する物理ページの物理ページ番号を付加した物理アドレスを生成する。そして、検査読出制御部１８は、生成した物理アドレスを含む検査読出要求をリクエスト調停部１３に発行する。
【００９４】
また、検査読出制御部１８は、リクエスト調停部１３から検査読出を行った旨の応答を受信すると、取得した物理ブロックアドレスに、次番の物理ページ番号を付加した物理アドレスを生成する。そして、検査読出制御部１８は、生成した物理アドレスを含む検査読出要求をリクエスト調停部１３に発行する。すなわち、検査読出制御部１８は、エラーが検出されたデータが格納された物理ブロックの各物理ページから、データを個別に読出しする。
【００９５】
また、検査読出制御部１８は、取得した物理ブロックアドレスが示す物理ブロックの全物理ページに対して、検査読出要求を発行した場合は、取得した物理ブロックアドレスの次にエラーログ記憶部１７が記憶する物理ブロックアドレスを取得する。そして、検査読出制御部１８は、取得した物理ブロックアドレスが示す物理ブロックの全物理ページに対して、検査読出要求を、個別に発行する。
【００９６】
例えば、検査読出制御部１８は、エラーログ記憶部１７から、物理ブロックアドレス「Ｐ０」を取得すると、物理ページ番号「０」を付加した物理アドレス「Ｐ０−０」を含む検査読出要求を発行する。そして、検査読出制御部１８は、物理アドレス「Ｐ０−０」を含む検査読出要求に対する応答を受信した場合は、物理ページ番号「１」を付加した物理アドレス「Ｐ０−１」を含む検査読出要求を発行する。そして、検査読出制御部１８は、物理ブロックアドレス「Ｐ０」が示す全ての物理ページに対して、個別に検査読出要求を発行し、その後、応答を受信した場合は、エラーログ記憶部１７から、新たな物理ブロックアドレスを取得する。
【００９７】
なお、検査読出制御部１８は、有効なデータが格納された物理ページに対してのみ、検査読出要求を発行しても良い。例えば、検査読出制御部１８は、リクエスト調停部１３、テーブル制御部１４を介して、管理情報テーブル２１の各エントリのうち、取得した物理ブロックアドレスが格納されたエントリを取得し、取得したエントリのページバリッドを取得する。そして、検査読出制御部１８は、取得したページバリッドの各ビットのうち、値が「１」のビットと対応付けられた物理ページに対してのみ、検査読出要求を発行しても良い。
【００９８】
データ移動制御部１９は、エラーが検出されたデータを移動させる。例えば、データ移動制御部１９は、読出し対象のデータのうち、エラーが検出されたデータが格納された物理ページの物理アドレスをエラー検出部１６から受信する。また、データ移動制御部１９は、検査読出対象のデータのうち、エラーが検出されたデータが格納された物理ページの物理アドレスをエラー検出部１６から受信する。
【００９９】
かかる場合は、データ移動制御部１９は、受信した物理アドレスを含む移動要求を生成し、生成した移動要求をリクエスト調停部１３に出力する。例えば、データ移動制御部１９は、エラー検出部１６から、物理アドレス「Ｐ０−１」を受信した場合は、物理アドレス「Ｐ０−１」を移動元物理アドレスとする移動要求をリクエスト調停部１３に発行する。この結果、ＮＡＮＤコントローラ６ａは、読出し対象となるデータのうち、エラーが検出されたデータ、または、検査読出の対象となるデータのうち、エラーが検出されたデータの移動を実行する。
【０１００】
また、データ移動制御部１９は、ウェアレベリング処理およびガベージコレクション処理を実行しても良い。例えば、データ移動制御部１９は、所定の時間間隔や、アプリケーションからの指示を契機として、管理情報テーブル２１の各エントリをリクエスト調停部１３、および、テーブル制御部１４を介して取得する。そして、データ移動制御部１９は、取得したエントリに格納されたページバリッドとタイムスタンプとを用いて、取得したエントリのデータを移動させるか否か判定する。
【０１０１】
例えば、データ移動制御部１９は、取得したエントリのタイムスタンプと現在のタイムスタンプとの差分が所定の閾値よりも大きい場合は、取得したエントリのデータを移動させると判定してもよい。また、データ移動制御部１９は、取得したエントリのページバリッドに含まれるビットのうち、値が「１」となるビットの数が所定の閾値よりも少ない場合は、取得したエントリのデータを移動させると判定してもよい。また、データ移動制御部１９は、タイムスタンプの差分が所定の閾値よりも大きく、かつ、ページバリッドに含まれるビットのうち、値が「１」となるビットの数が所定の閾値よりも少ない場合は、データを移動させると判定してもよい。
【０１０２】
そして、データ移動制御部１９は、取得したエントリのデータを移動させると判定した場合は、取得したエントリに格納された物理ブロックアドレスと、ページバリッドとを用いて、有効なデータが格納された物理ページの物理アドレスを生成する。そして、データ移動制御部１９は、生成した物理アドレスを含む移動要求をリクエスト調停部１３に発行する。
【０１０３】
次に、図７を用いて、エラーログ記憶部１７の機能構成の一例について説明する。図７は、エラーログ記憶部の機能構成の一例を説明する図である。図７に示す例では、エラーログ記憶部１７は、ポインタ記憶部１７ａと、エラーログキュー記憶部１７ｄを有する。また、ポインタ記憶部１７ａには、ライトポインタ１７ｂとリードポインタ１７ｃとが格納されている。
【０１０４】
エラーログキュー記憶部１７ｄは、複数のエントリを有し、各エントリにエラーが検出されたデータが格納された物理ブロックの物理アドレスが格納されるリングバッファである。例えば、図７に示す例では、エラーログキュー記憶部１７ｄのエントリには、「Ｂｌｏｃｋ＃３９」、「Ｂｌｏｃｋ＃３８」、「Ｂｌｏｃｋ＃０１」、「Ｂｌｏｃｋ＃１３」、「Ｂｌｏｃｋ＃９５」が格納されている。なお、図７に記載の「ｅｍｐｔｙ」とは、エントリに有効な物理アドレスブロックが格納されていない旨を示す。
【０１０５】
また、ライトポインタ１７ｂは、エラーログキュー記憶部１７ｄが有する各エントリのうち、新たな物理ブロックアドレスを格納するエントリを示す値である。また、リードポインタ１７ｃとは、エラーログキュー記憶部１７ｄが有する各エントリのうち、新たな検査読出の対象となる物理ブロックアドレスが格納されたエントリを示す値である。
【０１０６】
例えば、図７に示す例では、エラー検出部１６は、ポインタ記憶部１７ａが記憶するライトポインタ１７ｂを参照し、エラーログキュー記憶部１７ｄが有する各エントリのうち、物理ブロックアドレスの書込み先となるエントリを識別する。そして、エラー検出部１６は、識別したエントリに物理ブロックアドレスの書き込みを行うとともに、ライトポインタ１７ｂの値を１つインクリメントする。なお、エラー検出部１６は、ライトポインタ１７ｂの値を所定の値までインクリメントした場合は、ライトポインタ１７ｂの値を初期値に戻す。
【０１０７】
また、図７に示す例では、検査読出制御部１８は、ポインタ記憶部１７ａが記憶するリードポインタ１７ｃを参照し、エラーログキュー記憶部１７ｄが有する各エントリのうち、物理ブロックアドレスの読出し対象となるエントリを識別する。そして、検査読出制御部１８は、識別したエントリから物理ブロックアドレスを読出すとともに、リードポインタ１７ｃの値を１つインクリメントする。なお、検査読出制御部１８は、リードポインタ１７ｃの値を所定の値までインクリメントした場合は、リードポインタ１７ｃの値を初期値に戻す。
【０１０８】
なお、エラーログキュー記憶部１７ｄの全エントリに検査読出の対象となる物理ブロックアドレスが格納された場合は、ライトポインタ１７ｂの値とリードポインタ１７ｃの値とが一致する。このため、エラー検出部１６は、ライトポインタ１７ｂの値をインクリメントした結果、ライトポインタ１７ｂの値とリードポインタ１７ｃの値とが一致した場合は、新たな物理ブロックアドレスの格納を待機する。
【０１０９】
また、検査読出制御部１８が最後のエントリまで検査読出を行った場合は、リードポインタ１７ｃの値とライトポインタ１７ｂの値とが一致する。このため、検査読出制御部１８は、リードポインタ１７ｃの値をインクリメントした結果、ライトポインタ１７ｂの値とリードポインタ１７ｃの値とが一致した場合は、検査読出要求の発行を停止する。
【０１１０】
なお、例えば、リクエスタインターフェース部１２、リクエスト調停部１３、テーブル制御部１４、デバイスアクセス制御部１５、エラー検出部１６、検査読出制御部１８、データ移動制御部１９とは、電子回路である。ここで、電子回路の例として、ＡＳＩＣ（Application  Specific  Integrated  Circuit）やＦＰＧＡ（Field  Programmable  Gate  Array）などの集積回路、またはＣＰＵ（Central  Processing  Unit）やＭＰＵ（Micro  Processing  Unit）などを適用する。
【０１１１】
また、テーブル記憶部１１、エラーログ記憶部１７、ポインタ記憶部１７ａ、エラーログキュー記憶部１７ｄとは、ＲＡＭ（Random  Access  Memory）、フラッシュメモリ（flash  memory）などの半導体メモリ素子などの記憶装置である。
【０１１２】
次に、図８を用いて、ＮＡＮＤコントローラ６ａが実行する処理の流れについて説明する。図８は、ＮＡＮＤコントローラが実行する処理を説明する図である。例えば、ＮＡＮＤコントローラ６ａは、図８中（Ａ）に示すように、Ｉ／Ｏハブ４を介して、読出し要求や書込み要求を受信すると、読出し／書込み制御を実行する。例えば、ＮＡＮＤコントローラ６ａは、読出し要求を受信すると、図８中（Ｂ）に示すように、アドレス変換テーブル２０を参照して、論理アドレスと物理アドレスとのアドレス変換を実行する。
【０１１３】
そして、ＮＡＮＤコントローラ６ａは、図８中（Ｃ）に示すように、アドレス変換した物理アドレスを取得すると、図８中（Ｄ）に示すように、デバイスアクセス制御を実行しする。そして、ＮＡＮＤコントローラ６ａは、図８中（Ｅ）に示すように、ＮＡＮＤデバイス７ａ〜１０ａに対する読出し要求を発行し、図８中（Ｆ）に示すように、読出し対象のデータを取得する。また、ＮＡＮＤコントローラ６ａは、図８中（Ｇ）に示すように、エラーの検出制御を実行し、読出し対象のデータからエラーの検出や訂正を行う。
【０１１４】
ここで、ＮＡＮＤコントローラ６ａは、エラーが検出された場合は、図８中（Ｈ）に示すように、エラーが検出されたデータが格納された物理ブロックを示す物理ブロックアドレスをエラーログとして記憶する。また、ＮＡＮＤコントローラ６ａは、検査読出制御を実行した場合は、図８中（Ｉ）に示すように、エラーログから検査読出の対象となる物理ブロックアドレスを取得する。そして、ＮＡＮＤコントローラ６ａは、取得した物理ブロックアドレスが示す物理ブロックの各物理ページに対して、個別に検査読出要求を実行する。
【０１１５】
また、ＮＡＮＤコントローラ６ａは、図８中（Ｊ）に示すように、検査読出要求を発行した結果、読み出されたデータからエラーが検出された場合は、データ移動制御を実行する。詳細には、ＮＡＮＤコントローラ６ａは、図８中（Ｋ）に示すように、管理情報テーブル２１を参照し、図８中（Ｌ）に示すように、予備ブロックの物理アドレスを取得する。
【０１１６】
そして、ＮＡＮＤコントローラ６ａは、エラーが検出されたデータを、取得した物理アドレスが示す物理ページに移動させる。このように、ＮＡＮＤコントローラ６ａは、エラーが検出されたデータが格納された物理ブロックに含まれる各物理ページを、それぞれ個別に検査読出の対象とする。このため、ＮＡＮＤコントローラ６ａは、過剰なデータの移動を防ぐ結果、ＮＡＮＤデバイス７ａ〜１０ａの性能や寿命の悪化を防ぐことができる。
【０１１７】
次に、図９を用いて、ＮＡＮＤコントローラ６ａが実行する処理の流れについて説明する。図９は、実施例１に係るＮＡＮＤコントローラが実行する処理の流れを説明するフローチャートである。例えば、ＮＡＮＤコントローラ６ａは、エラーログ記憶部１７を参照する（ステップＳ１０１）。そして、ＮＡＮＤコントローラ６ａは、エラーログ記憶部１７から検査読出を実行していない物理ブロックアドレスを１つ抽出し、抽出した物理ブロックアドレスが示す物理ブロックを検査対象ブロックとする（ステップＳ１０２）。
【０１１８】
また、ＮＡＮＤコントローラ６ａは、検査対象ブロックに含まれる物理ページを検査対象ページとして１つ選択する（ステップＳ１０３）。そして、ＮＡＮＤコントローラ６ａは、検査対象ページのデータを読出し（ステップＳ１０４）、読出したデータからエラーが検出されたか否かを判定する（ステップＳ１０５）。
【０１１９】
ここで、ＮＡＮＤコントローラ６ａは、読出したデータからエラーが検出された場合は（ステップＳ１０５肯定）、読出したデータを他の物理ブロックに移動する（ステップＳ１０６）。一方、ＮＡＮＤコントローラ６ａは、読出したデータからエラーが検出されなかった場合は（ステップＳ１０５否定）、ステップＳ１０６をスキップする。
【０１２０】
また、ＮＡＮＤコントローラ６ａは、検査対象ブロックの全ての物理ページに対して、データの読出しを完了したか判定する（ステップＳ１０７）。そして、ＮＡＮＤコントローラ６ａは、全ての物理ページに対してデータの読出しを完了していない場合は（ステップＳ１０７否定）、読出しを実行していない物理ページを検査対象ページとして選択する（ステップＳ１０３）。
【０１２１】
一方、ＮＡＮＤコントローラ６ａは、全ての物理ページに対してデータの読出しを完了した場合は（ステップＳ１０７肯定）、エラーログ記憶部１７が記憶する全エラーログに対して、検査読出を実行済みであるか判定する（ステップＳ１０８）。そして、ＮＡＮＤコントローラ６ａは、全エラーログに対して、検査読出を実行済みである場合は（ステップＳ１０８肯定）、処理を終了する。一方、ＮＡＮＤコントローラ６ａは、全エラーログの検査読出を実行していない場合は（ステップＳ１０８否定）、ステップＳ１０１を実行する。
【０１２２】
［情報処理装置１の効果］
上述したように、情報処理装置１は、ＮＡＮＤデバイス７ａ〜１０ａから読み出されたデータからエラーの検出を行う。また、情報処理装置１は、読み出されたデータからエラーが検出された場合は、エラーが検出されたデータが書き込まれた物理ページを含み、エラーの発生が推定される所定の領域に含まれる各物理ページから、個別にデータの検査読出を実行する。そして、情報処理装置１は、個別に検査読出を行った結果、読出されたデータからエラーが検出された場合は、エラーが検出されたデータを、他の物理ページに移動させる。
【０１２３】
このため、情報処理装置１は、エラーが検出されたデータの移動に伴う、過剰なデータの読出し処理や書込み処理を防ぐことができる。この結果、情報処理装置１は、エラーが検出されたデータの移動に伴うＮＡＮＤデバイス７ａ〜１０ａの性能劣化を防ぐことができる。また、情報処理装置１は、ＮＡＮＤコントローラ６ａ〜６ｂに、複雑な機能を発揮するためのハードウェアを含めずともよい。例えば、ＮＡＮＤコントローラ６ａは、エラーを検出するエラー検出部１６、検査対象ブロックに対して個別に検査読出要求を発行する検査読出制御部１８、エラーが検出されたデータを移動するデータ移動制御部１９を備えればよい。このため、情報処理装置１は、検査読出制御、および、移動制御を、ハードウェアで容易に実現することができる。
【０１２４】
ここで、データの消去は、物理ブロック単位で実行されるので、素子の劣化は、物理ブロック単位で進むと考えられる。この結果、エラーが発生したデータが格納された物理ブロックでは、エラーが発生し易いと考えられる。そこで、情報処理装置１は、読み出されたデータからエラーが検出された場合は、エラーが検出されたデータが書き込まれた物理ページを含む物理ブロックを識別し、識別した物理ブロックに含まれる各物理ページに対して、個別にデータの検査読出を実行する。この結果、情報処理装置１は、素子が劣化した物理ブロックによってエラーが拡大するのを防ぐことができる。
【０１２５】
また、情報処理装置１は、検査読出の結果、エラーが検出されたデータを、元の物理ブロックとは異なる物理ブロックに移動させる。つまり、情報処理装置１は、エラーが発生し易いと考えられる物理ブロック以外の物理ブロックへデータを移動させる。このため、情報処理装置１は、素子が劣化した物理ページによってエラーが拡大するのを防ぐことができる。
【０１２６】
また、情報処理装置１は、エラーが検出されたデータが格納された物理ブロックを示す物理ブロックアドレスをエラーログ記憶部１７に格納する。そして、情報処理装置１は、エラーログ記憶部１７に格納された物理ブロックアドレスが示す物理ブロックに含まれる各物理ページを、個別に検査読出の対象とする。このため、情報処理装置１は、任意のタイミング、例えば、読出し要求や書込み要求の発行が少ない夜間等、任意のタイミングで、エラーが検出されたデータの検査読出や移動を実行することができる。
【実施例２】
【０１２７】
上述したＮＡＮＤコントローラ６ａは、エラーログ記憶部１７が記憶する全ての物理ブロックアドレスについて、検査読出制御を行うか否か判定した。しかし、実施例はこれに限定されるものではない。例えば、実施例２に係るＮＡＮＤコントローラ６ｃは、１回の処理で、エラーログ記憶部１７が記憶する一部の物理ブロックアドレスのみについて検査読出制御を行ってもよい。
【０１２８】
以下、ＮＡＮＤコントローラ６ｃが実行する処理について説明する。まず、図１０を用いて、ＮＡＮＤコントローラ６ｃの機能構成について説明する。図１０は、実施例２に係るＮＡＮＤコントローラの機能構成を説明する図である。なお、図１０に示すＮＡＮＤコントローラ６ｃの機能構成のうち、図４に示すＮＡＮＤコントローラ６ａの機能構成と同様の機能構成については、同一の符号を付し、説明を省略する。
【０１２９】
図１０に示す例では、ＮＡＮＤコントローラ６ｃは、検査読出制御部１８ａを有する。検査読出制御部１８ａは、検査読出制御部１８と同様の機能を発揮する。また、検査読出制御部１８ａは、エラーログ記憶部１７が記憶する物理ブロックアドレスのうち、リードポインタ１７ｃが示すエントリに格納された物理ブロックアドレスから順に、検査読出制御を実行する。また、検査読出制御部１８ａは、検査読出制御を開始してから、所定の時間が経過した場合は、検査読出制御を終了する。
【０１３０】
そして、検査読出制御部１８ａは、一定時間経過後、または、アプリケーションからの指示を契機として、検査読出制御を再開し、リードポインタ１７ｃが示すエントリに格納された物理ブロックアドレスから、検査読出制御を再開する。すなわち、検査読出制御部１８ａは、最後に検査読出制御の対象とした物理ブロックアドレスの次にエラーログ記憶部１７が記憶する物理ブロックアドレスから、検査読出制御を再開する。
【０１３１】
以下、図１１を用いて、ＮＡＮＤコントローラ６ｃが実行する処理の流れについて説明する。図１１は、実施例２に係るＮＡＮＤコントローラが実行する処理の流れを説明するフローチャートである。なお、図１１に示す例では、ＮＡＮＤコントローラ６ｃが、検査読出制御の対象となる物理ブロックを、所定の時間内で区切る例について記載した。また、図１１に示す処理のうち、ステップＳ２０１〜ステップＳ２０７の処理については、図９に示すステップＳ１０１〜ステップＳ１０７と同様の処理であるものとして、説明を省略する。
【０１３２】
例えば、ＮＡＮＤコントローラ６ｃは、エラーログ記憶部１７が記憶する全エラーログに対して、検査読出を実行済みであるか判定する（ステップＳ２０８）。そして、ＮＡＮＤコントローラ６ｃは、全エラーログに対して、検査読出を実行済みである場合は（ステップＳ２０８肯定）、処理を終了する。一方、ＮＡＮＤコントローラ６ｃは、全エラーログの検査読出を実行していない場合は（ステップＳ２０８否定）、検査読出制御を開始してから所定の時間が経過したか否かを判定する（ステップＳ２０９）。
【０１３３】
そして、ＮＡＮＤコントローラ６ｃは、検査読出制御を開始してから所定の時間が経過した場合は（ステップＳ２０９肯定）、処理を終了する。一方、ＮＡＮＤコントローラ６ｃは、検査読出制御を開始してから所定の時間が経過していない場合は（ステップＳ２０９否定）、ステップＳ２０１を実行する。
【０１３４】
なお、ＮＡＮＤコントローラ６ｃは、所定の時間内で検査読出制御を区切るのではなく、他の方法で検査読出制御を区切ってもよい。例えば、検査読出制御部１８ａは、エラーログ記憶部１７が記憶する物理ブロックアドレスのうち、所定の数の物理ブロックアドレスについて、検査読出制御を実行した場合は、検査読出制御を終了する。そして、検査読出制御部１８ａは、一定時間経過後、または、アプリケーションからの指示を契機として、検査読出制御を再開してもよい。
【０１３５】
かかる処理を実行する場合は、ＮＡＮＤコントローラ６ｃは、図１１に示すステップＳ２０９にて、所定の時間が経過したか否かを判定するのではなく、所定の数の物理ブロックアドレスを検査読出制御の対象としたか否かを判定すれば良い。
【０１３６】
［ＮＡＮＤコントローラ６ｃの効果］
上述したように、ＮＡＮＤコントローラ６ｃは、エラーログ記憶部１７に格納された各物理ブロックアドレスに対して、順次検査読出制御を実行する。ここで、ＮＡＮＤコントローラ６ｃは、検査読出制御を開始してから、所定の時間が経過した場合は、検査読出制御を終了する。そして、ＮＡＮＤコントローラ６ｃは、検査読出制御の再開時は、最後に検査読出制御の対象とした物理ブロックアドレスの次に、エラーログ記憶部１７が記憶する物理ブロックアドレスから、順次検査読出制御を実行する。
【０１３７】
このため、ＮＡＮＤコントローラ６ｃは、検査読出制御を実行する際の処理時間を短縮することができる。この結果、ＮＡＮＤコントローラ６ｃは、例えば、情報処理装置１が処理を実行していない夜間等に、検査読出制御を実行する等、柔軟なスケジューリングを実現することができる。また、ＮＡＮＤコントローラ６ｃは、検査読出制御や、データの移動制御によってＮＡＮＤデバイス７ａ〜１０ａにアクセスできない時間を短縮化するので、ＮＡＮＤデバイス７ａ〜１０ａに対するアクセス性能を向上させることができる。
【０１３８】
また、ＮＡＮＤコントローラ６ｃは、エラーログ記憶部１７に格納された各物理ブロックアドレスのうち、所定の数の物理ブロックアドレスに対して、検査読出制御を実行した場合は、検査読出制御を終了する。そして、ＮＡＮＤコントローラ６ｃは、検査読出制御の再開時は、最後に検査読出制御の対象とした物理ブロックアドレスの次に、エラーログ記憶部１７が記憶する物理ブロックアドレスから、順次検査読出制御を実行する。
【０１３９】
このため、ＮＡＮＤコントローラ６ｃは、検査読出制御を実行する際の処理時間を短縮し、柔軟なスケジューリングを実現できる。また、ＮＡＮＤコントローラ６ｃは、ＮＡＮＤデバイス７ａ〜１０ａに対するアクセス性能を向上させることができる。
【実施例３】
【０１４０】
上述したＮＡＮＤコントローラ６ａ〜６ｃは、エラーログ記憶部１７が記憶する各物理ブロックアドレスが示す物理ブロックに含まれる、全ての物理ページに対して、個別に検査読出要求を発行した。しかし、実施例は、これに限定されるものではない。例えば、ＮＡＮＤコントローラ６ａ〜６ｃは、ある物理ブロックの物理ページに対して、個別に検査読出要求を発行する際に、エラーが検出される頻度が所定の閾値を下回った場合は、検査読出制御の実行をキャンセルしてもよい。
【０１４１】
以下、実施例３に係るＮＡＮＤコントローラとして、個別に検査読出要求を発行する際に、エラーが検出される頻度が所定の閾値を下回った場合は、検査読出制御の実行をキャンセルするＮＡＮＤコントローラ６ｄについて説明する。まず、図１２を用いて、ＮＡＮＤコントローラ６ｄの機能構成について説明する。図１２は、実施例３に係るＮＡＮＤコントローラの機能構成を説明する図である。なお、図１２に示すＮＡＮＤコントローラ６ｄの機能構成のうち、図４に示すＮＡＮＤコントローラ６ａの機能構成と同様の機能構成については、同一の符号を付し、説明を省略する。
【０１４２】
例えば、ＮＡＮＤコントローラ６ｄは、エラー検出部１６ａと、検査読出制御部１８ｂと、エラー頻度計算部２２とを有する。エラー検出部１６ａは、エラー検出部１６と同様の機能を発揮する。また、エラー検出部１６ａは、検査読出対象データからエラーを検出した場合は、エラー頻度計算部２２に対して、エラーが検出された旨を通知する。また、エラー検出部１６ａは、検査読出対象データからエラーが検出されなかった場合は、エラー頻度計算部２２に対して、エラーが検出されなかった旨を通知する。
【０１４３】
エラー頻度計算部２２は、ある物理ブロックについて、検査読出制御が実行されている際に、エラー検出部１６ａがエラーを検出した頻度を算出する。そして、エラー頻度計算部２２は、算出した頻度が、所定の閾値以下となった場合は、検査読出制御部１８ｂに対し、検査読出制御を打ち切り、新たな物理ブロックに対する検査読出制御を実行するよう指示する。
【０１４４】
例えば、エラー頻度計算部２２は、エラーが検出されなかった旨の通知をエラー検出部１６ａから受信した数をカウントする。そして、エラー頻度計算部２２は、カウントした数が所定の閾値を超えた場合は、検査読出制御部１８ｂに対し、新たな物理ブロックに対する検査読出制御を実行するよう指示する。
【０１４５】
また、他の例では、エラー頻度計算部２２は、エラーが検出されなかった旨の通知の数と、エラーが検出された旨の通知の数との和、すなわち、検査読出された物理ページの数を計数する。そして、エラー頻度計算部２２は、エラーが検出された旨の通知の数を検査読出要求が発行された物理ページの数で除算し、読出し１回あたりのエラー率を計算する。その後、エラー頻度計算部２２は、算出したエラー率が所定の閾値を下回った場合は、検査読出制御部１８ｂに対し、新たな物理ブロックに対する検査読出制御を実行するよう指示する。
【０１４６】
また、エラー頻度計算部２２は、検査読出制御部１８ｂから新たな物理ブロックに対する検査読出制御を実行する旨の通知を受信した場合は、エラーが検出されなかった旨の通知の数や、エラーが検出された旨の通知の数をリセットする。この結果、エラー頻度計算部２２は、検査読出制御の対象となる物理ブロックごとに、各物理ページから検査読出されたデータのエラー率を計算できる。
【０１４７】
ここで、エラー頻度は、検査読出されたデータの数が少ない場合、すなわち、サンプル数が少ない場合には、確率的誤差が増大する。そこで、エラー頻度計算部２２は、以下の処理を実行する。まず、エラー頻度計算部２２は、エラーが検出された旨の通知の数とエラーが検出された旨の通知の数とを用いて、エラー頻度を算出する。
【０１４８】
また、エラー頻度計算部２２は、検査読出された物理ページの数が所定の数を超えたか否かを判定する。そして、エラー頻度計算部２２は、検査読出された物理ページの数が所定の数を超えた場合は、計算したエラー頻度が所定の閾値を下回ったか否かを判定する。
【０１４９】
そして、エラー頻度計算部２２は、検査読出された物理ページの数が所定の数を超え、かつ、計算したエラー頻度が所定の閾値を下回った場合は、検査読出制御部１８ｂに対し、新たな物理ブロックに対する検査読出制御を実行するよう指示する。このため、エラー頻度計算部２２は、エラー頻度の確率的誤差を減少させる結果、偶発的にエラーが検出された物理ブロックに対する不要な検査読出制御をキャンセルさせることができる。
【０１５０】
なお、エラー頻度計算部２２が実行する処理のうち、検査読出された物理ページの数が所定の数を超えたか否かを判定する処理は、必ずしも必須の処理ではない。例えば、ＮＡＮＤコントローラ６ａの実装や、ＮＡＮＤデバイス７ａ〜１０ａの性能等によっては、サンプル数が少なくとも、エラー頻度の確率的誤差があまり増大しない例も考えられる。かかる場合は、エラー頻度計算部２２は、検査読出された物理ページの数が所定の数を超えたか否かを判定せずともよい。
【０１５１】
検査読出制御部１８ｂは、検査読出制御部１８、または、検査読出制御部１８ａと同様の機能を発揮する。また、検査読出制御部１８ｂは、新たな物理ブロックアドレスをエラーログ記憶部１７から読み出して、検査読出制御を実行する場合は、エラー頻度計算部２２に対して、新たな物理ブロックに対する検査読出制御を実行する旨の通知を出力する。
【０１５２】
また、検査読出制御部１８ｂは、エラー頻度計算部２２から、新たな物理ブロックに対する検査読出制御を実行するよう指示された場合は、以下の処理を実行する。まず、検査読出制御部１８ｂは、実行中の検査読出制御を打ち切り、エラーログ記憶部１７から、物理ブロックアドレスを新たに読出す。そして、検査読出制御部１８ｂは、新たに読出した物理ブロックアドレスに対し、検査読出処理を実行する。
【０１５３】
このように、検査読出制御部１８ｂは、ある物理ブロックに対する検査読出制御を実行中に、エラーの頻度が所定の閾値を下回った場合は、検査読出要求を発行していない物理ページが残っている場合にも、検査読出制御を打ち切る。そして、検査読出制御部１８ｂは、新たな物理ブロックに対する検査読出制御を実行する。このため、検査読出制御部１８ｂは、偶発的に発生したエラーにより検査読出制御の対象となった物理ブロックに対する検査読出制御をキャンセルできる。
【０１５４】
ここで、検査読出制御部１８ｂが、検査読出制御の対象となる物理ブロックに含まれる各物理ページに対し、物理ページ番号の順に、個別に検査読出要求を発行すると、エラーの分布に偏りがある際に、適切にエラー頻度を算出できなくなる場合がある。例えば、検査読出対象となる物理ブロックのうち、物理ページ番号が後半の物理ページに格納されたデータにエラーが生じている場合、物理ページ番号の順に検査読出要求を発行すると、エラーが検出される前にエラー頻度が所定の閾値を下回る。この結果、検査読出制御部１８ｂは、検査読出対象となる物理ブロックにエラーが生じたデータが格納されているにも関わらず、検査読出制御を打ち切ってしまう。
【０１５５】
そこで、検査読出制御部１８ｂは、検査読出制御の対象となる物理ブロックに含まれる各物理ページのうち、検査読出を行っていない物理ページに対し、ランダムな順番で、個別に検査読出要求を発行する。例えば、検査読出制御部１８ｂは、エラーログ記憶部１７から取得した物理ブロックアドレスに、物理ページ番号と同じ桁数の乱数を付加することで、検査読出要求の発行対象となる物理アドレスを生成する。そして、検査読出制御部１８ｂは、生成した物理アドレスを含む検査読出要求を発行する。この結果、検査読出制御部１８ｂは、エラーの分布に偏りがある場合にも、エラー頻度を適切に計算させることができるので、誤った検査読出制御のキャンセルを行うことができる。
【０１５６】
次に、図１３を用いて、ＮＡＮＤコントローラ６ｄが実行する処理の流れについて説明する。図１３は、実施例３に係るＮＡＮＤコントローラが実行する処理の流れを説明するフローチャートである。なお、図１３には、ＮＡＮＤコントローラ６ｄは、検査読出された物理ページの数が所定の数を超えたか否かを判定せずに、エラー頻度が所定の閾値を超えたか否かを判定する例について記載した。また、図１３に示す処理のうち、ステップＳ３０１〜ステップＳ３０６、Ｓ３０９、Ｓ３１０の処理については、図９に示すステップＳ１０１〜ステップＳ１０６、Ｓ１０７、Ｓ１０８と同様の処理であるものとして、説明を省略する。
【０１５７】
まず、ＮＡＮＤコントローラ６ｄは、ステップＳ３０５の処理、または、ステップＳ３０６の処理を実行すると、検査対象ブロックにおけるエラー頻度を計算する（ステップＳ３０７）。次に、ＮＡＮＤコントローラ６ｄは、計算したエラー頻度が、所定の閾値よりも小さいか否かを判定する（ステップＳ３０８）。
【０１５８】
そして、ＮＡＮＤコントローラ６ｄは、計算したエラー頻度が、所定の閾値以上と判定した場合は（ステップＳ３０８否定）、検査対象ブロックの全物理ページに対して、データの読出しを完了したか判定する（ステップＳ３０９）。一方、ＮＡＮＤコントローラ６ｄは、計算したエラー頻度が、所定の閾値よりも小さいと判定した場合は（ステップＳ３０８肯定）、ステップＳ３０９の処理をスキップする。そして、ＮＡＮＤコントローラ６ｄは、エラーログ記憶部１７が記憶する全てのエラーログについて、検査読出制御を実行したか判定する（ステップＳ３１０）。
【０１５９】
［ＮＡＮＤコントローラ６ｄの効果］
上述したように、ＮＡＮＤコントローラ６ｄは、検査読出されたデータからエラーが検出された頻度を物理ブロックごとに算出する。そして、ＮＡＮＤコントローラ６ｄは、算出した頻度が、所定の閾値を下回った場合は、実行中の検査読出制御を打ち切り、新たな物理ブロックに対する検査読出制御を開始する。このため、ＮＡＮＤコントローラ６ｄは、データ読出し時に、偶発的に発生したエラーにより検査読出制御の対象となった物理ブロックに対する検査読出制御を打ち切ることができる。この結果、ＮＡＮＤコントローラ６ｄは、検査読出制御を効率良く実行することができる。
【０１６０】
また、ＮＡＮＤコントローラ６ｄは、検査読出対象となる物理ブロックの各物理ページのうち、所定の数の物理ページからデータの検査読出を行い、かつ、エラー頻度が所定の閾値よりも小さくなった場合は、かかる物理ブロックに対する検査読出制御を打ち切る。そして、ＮＡＮＤコントローラ６ｄは、新たな物理ブロックに対する検査読出制御を開始する。このため、ＮＡＮＤコントローラ６ｄは、エラー頻度の確率的誤差を減少させる結果、物理ブロックに対する検査読出制御のスキップを適切に判定できる。
【０１６１】
また、ＮＡＮＤコントローラ６ｄは、検査読出対象となる物理ブロックの各物理ページから、ランダムな順番で、検査読出を実行する。この結果、ＮＡＮＤコントローラ６ｄは、エラーの分布に偏りが存在する場合にも、エラー頻度を適切に算出できる結果、物理ブロックに対する検査読出制御のスキップを適切に判定できる。
【実施例４】
【０１６２】
これまで本発明の実施例について説明したが実施例は、上述した実施例以外にも様々な異なる形態にて実施されてよいものである。そこで、以下では実施例４として本発明に含まれる他の実施例を説明する。
【０１６３】
（１）データ移動の粒度について
上述したＮＡＮＤコントローラ６ａ〜６ｄは、ＮＡＮＤデバイス７ａ〜１０ａが有する物理ページごとに、データを移動させるか否かを判定した。しかしながら、実施例はこれに限定されるものではない。すなわち、ＮＡＮＤコントローラ６ａ〜６ｄは、任意の単位でデータの移動を行うか否かを判定することができる。例えば、ＮＡＮＤコントローラ６ａ〜６ｄは、複数の物理ページに格納されたデータをひとまとめにして、検査読出制御や移動制御を行ってもよい。
【０１６４】
（２）検査読出制御の範囲について
上述したＮＡＮＤコントローラ６ａ〜６ｄは、読出し対象のデータからエラーが検出されると、エラーが検出されたデータが格納された物理ページを含む物理ブロックを検査読出制御の対象とした。しかしながら、実施例は、これに限定されるものではない。すなわち、ＮＡＮＤコントローラ６ａ〜６ｄは、読出し対象のデータからエラーが検出されると、データの消去単位や物理的に近接する範囲等、同様にエラーが検出されると推定される任意の範囲に含まれる物理ページを検査読出の対象とすればよい。
【０１６５】
例えば、ＮＡＮＤコントローラ６ａ〜６ｄは、ＮＡＮＤデバイス７ａ〜１０ａ内で、エラーが検出されたデータが格納された物理ページと物理的に近接する物理ページを検査読出制御の対象としてもよい。また、ＮＡＮＤコントローラ６ａ〜６ｄは、ＮＡＮＤデバイス７ａ〜１０ａがデータの消去を行う単位を検査読出制御の対象としてもよい。また、ＮＡＮＤコントローラ６ａ〜６ｄは、ＮＡＮＤデバイス７ａ〜１０ａがデータの読出しや書込みを行う粒度とは異なる粒度の範囲を検査読出制御の対象としても良い。
【０１６６】
また、ＮＡＮＤコントローラ６ａ〜６ｄは、エラーが生じた物理ページを含む物理ブロックと隣接する物理ブロックのうち、エラーが生じた物理ページの物理ページ番号と同一の物理ページ番号が示す物理ページを検査読出の対象としてもよい。例えば、ＮＡＮＤコントローラ６ａ〜６ｄは、物理アドレス「Ｐ５−５」が示す物理ページのデータからエラーを検出した場合は、物理ブロックアドレス「Ｐ５」が示す物理ブロックの各物理ページを検査読出制御の対象とする。また、ＮＡＮＤコントローラ６ａ〜６ｄは、隣接する物理ブロックに含まれる物理ページのうち、物理アドレス「Ｐ５−５」と物理ページ番号とが一致する物理アドレス「Ｐ４−５」、「Ｐ６−５」が示す物理ページを検査読出制御の対象としてもよい。
【０１６７】
また、ＮＡＮＤコントローラ６ａ〜６ｄは、エラーが生じた物理ページを含む物理ブロックのうち、エラーが生じた物理ページを中心とした所定の数の物理ページのみを検査読出の対象としてもよい。例えば、ＮＡＮＤコントローラ６ａ〜６ｄは、物理アドレス「Ｐ５−５」が示す物理ページのデータからエラーを検出した場合は、物理アドレス「Ｐ５−３」〜「Ｐ５−７」の範囲を検査読出制御の対象としてもよい。
【０１６８】
（３）ＮＡＮＤコントローラ６ａ〜６ｄの機能構成について
上述したＮＡＮＤコントローラ６ａ〜６ｄの機能構成は、あくまで一例であり、ＮＡＮＤコントローラ６ａ〜６ｄとして同様の処理を実行できるのであれば、任意の構成を採用することができる。例えば、ＮＡＮＤコントローラ６ａは、検査読出制御部１８とデータ移動制御部１９との機能をまとめた制御回路を有してもよい。
【０１６９】
また、ＮＡＮＤコントローラ６ａ〜６ｄは、エラーログ記憶部１７を備えずとも検査読出制御や移動制御を実行できる。つまり、ＮＡＮＤコントローラ６ａ〜６ｄは、エラー検出部１６がエラーを検出した際に、即座に検査読出制御を実行するのであれば、エラーログを記憶する必要はない。
【０１７０】
なお、上述した例では、ＮＡＮＤコントローラ６ａ〜６ｄがＮＡＮＤデバイス７ａ〜１０ａに格納されたデータの移動を判定する処理について記載した。しかしながら、実施例はこれに限定されるものではない。すなわち、ＮＡＮＤコントローラ６ａ〜６ｄは、データの移動を行うのであれば、任意の技術が適用された記憶媒体、例えばメモリ等のメモリコントローラとして動作してもよい。
【０１７１】
（４）エラー記憶部について
上述したエラーログ記憶部１７は、図７に例示するように、ライトポインタ１７ｂとリードポインタ１７ｃと複数のエントリを有するエラーログキュー記憶部１７ｄとを有していた。しかしながら、実施例は、これに限定されるものではない。例えば、エラーログ記憶部１７は、エラーが検出されたデータが格納された物理ブロックと、エラーが検出された旨を示すエラーフラグとを対応付けて記憶しても良い。
【０１７２】
例えば、図１４は、エラーログ記憶部のバリエーションを説明する図である。図１４に示す例では、エラーログ記憶部１７は、物理ブロックアドレスと対応付けられた複数のエントリを有する。また、エラーログ記憶部１７は、各エントリに、エラーが検出された旨を示すエラーフラグを格納する。
【０１７３】
例えば、図１４に示す例では、物理ブロックアドレス「Ｐ０」、「Ｐ３」と対応付けられたエントリに、エラーフラグ「１」が格納されており、また、物理ブロックアドレス「Ｐ１」、「Ｐ２」と対応付けられたエントリにエラーフラグ「０」が格納されている。かかる場合は、エラーログ記憶部１７は、物理ブロックアドレス「Ｐ０」、「Ｐ３」が示す物理ブロックが検査読出制御の対象であり、物理ブロックアドレス「Ｐ１」、「Ｐ２」が示す物理ブロックアドレスは、検査読出制御の対象ではない旨を示す。
【０１７４】
なお、エラーログ記憶部１７が、図１４に示すエントリを有する場合は、エラー検出部１６、および検査読出制御部１８は、以下の処理を実行する。例えば、エラー検出部１６は、読出し対象のデータからエラーを検出すると、読出し対象のデータが格納された物理ページの物理アドレスから物理ブロックアドレスを抽出する。
【０１７５】
そして、エラー検出部１６は、エラーログ記憶部１７の各エントリのうち、抽出した物理ブロックアドレスと対応付けられたエントリに格納されたエラーフラグを「１」に更新する。また、検査読出制御部１８は、エラーログ記憶部１７の各エントリに格納されたエラーフラグを順番に確認し、エラーフラグが「１」であるエントリと対応付けられた物理ブロックアドレスが示す物理ブロックを、検査読出制御の対象とする。
【０１７６】
（５）管理情報テーブルについて
例えば、ＮＡＮＤコントローラ６ａ〜６ｄは、エラーログ記憶部１７が記憶するエラーログを管理情報テーブル２１に含めてもよい。例えば、図１５は、エラーログを含む管理情報テーブルの一例を説明する図である。図１５に示す例では、管理情報テーブル２１は、物理ブロックアドレス、ページバリッド、タイムスタンプ、および、エラーフラグを対応付けて記憶する。ここで、エラーフラグは、対応付けられた物理ブロックアドレスが示す物理ブロックのデータから、エラーが検出されたか否かを示す情報であり、図１４に示すエラーフラグと同様の情報である。
【０１７７】
なお、管理情報テーブル２１が、図１５に示す情報を記憶する場合は、エラー検出部１６、および、検査読出制御部１８は、以下の処理を実行する。例えば、エラー検出部１６は、読出し対象のデータからエラーを検出すると、読出し対象のデータが格納された物理ページの物理アドレスから物理ブロックアドレスを抽出する。そして、エラー検出部１６は、抽出した物理ブロックアドレスと対応付けられたエラーフラグを「１」に更新するように、リクエスト調停部１３を介して、テーブル制御部１４に依頼する。この結果、テーブル制御部１４は、管理情報テーブル２１を更新し、エラーが検出されたデータが格納された物理ブロックの物理ブロックアドレスにエラーフラグ「１」を対応付ける。
【０１７８】
一方、検査読出制御部１８は、管理情報テーブル２１に格納された情報の閲覧要求を、エントリごとに、テーブル制御部１４に発行する。すると、テーブル制御部１４は、管理情報テーブル２１に格納された情報を、検査読出制御部１８に対して、エントリごとに応答する。そして、検査読出制御部１８は、受信したエントリのエラーフラグが「１」である場合は、受信したエントリの物理ブロックアドレスが示す物理ブロックに対し、検査読出制御を実行する。一方、検査読出制御部１８は、受信したエントリのエラーフラグが「０」である場合や、検査読出制御が終了した場合は、次のエントリに格納された情報の閲覧要求を、テーブル制御部１４に発行する。
【０１７９】
このように、ＮＡＮＤコントローラ６ａ〜６ｄは、管理情報テーブル２１に、エラーログを記憶させた場合は、エラーログ記憶部１７を不要とするので、回路規模を減少させることができる。
【０１８０】
（６）リクエストの調停について
上述したＮＡＮＤコントローラ６ａ〜６ｄは、Ｉ／Ｏハブ４から受信した読出し要求や書込み要求を優先して実行した。しかし、実施例はこれに限定されるものではなく、ＮＡＮＤコントローラ６ａ〜６ｄは、ＮＡＮＤデバイス７ａ〜１０ａの各セルの寿命が平準化するように、各リクエストの調停を行ってもよい。
【０１８１】
（７）予備ブロックについて
上述したＮＡＮＤコントローラ６ａ〜６ｄは、データが格納されていない予備ブロックをデータの移動先とした。しかしながら、実施例はこれに限定されるものではない。例えば、ＮＡＮＤコントローラ６ａ〜６ｄは、データの移動先を、移動元と異なる物理ブロックに限定せずともよい。また、ＮＡＮＤコントローラ６ａ〜６ｄは、例えば、データが格納されていない物理ページのうち、最も余命が長いブロックを識別する。そして、ＮＡＮＤコントローラ６ａ〜６ｄは、識別した物理ページにデータを移動してもよい。かかる処理を実行した場合は、ＮＡＮＤコントローラ６ａ〜６ｄは、ＮＡＮＤデバイス７ａ〜１０ａが有する各ブロックのセルの劣化を平準化し、寿命を使いきることができる。
【０１８２】
（８）プログラム
上記の実施例で説明したＮＡＮＤコントローラ６ａ〜６ｄが発揮する機能は、予め用意された制御プログラムをＮＡＮＤコントローラ内の演算処理装置が実行することで実現してもよい。そこで、以下では、図１６を用いて、上記のＮＡＮＤコントローラ６ａと同様の機能を有する制御プログラムを実行するコンピュータの一例について説明する。
【０１８３】
図１６は、制御プログラムを実行するＮＡＮＤコントローラの一例を説明する図である。図１６に示すように、ＮＡＮＤコントローラ６ｅは、ＣＰＵ４０、デバイスアクセス制御部１５を有する。また、ＣＰＵ４０は、メモリデバイス１１ａと接続される。なお、メモリデバイス１１ａは、ＮＡＮＤコントローラ６ｅに内蔵されるメモリであってもよい。
【０１８４】
メモリデバイス１１ａには、アドレス変換テーブル２０、管理情報テーブル２１、エラーログ２３があらかじめ記憶される。ここで、ＣＰＵ４０が制御プログラム３０を読出して展開して実行することにより、制御プログラム３０は、以下の様に機能する。すなわち、制御プログラム３０は、ＣＰＵ４０を、リクエスト調停部３１、テーブル制御部３２、エラー検出部３３、検査読出制御部３４、データ移動制御部３５として動作させる。ここで、図１６に示す制御プログラム３０は、図４に示すリクエスト調停部１３、テーブル制御部１４、エラー検出部１６、検査読出制御部１８、データ移動制御部１９と同様の機能をＣＰＵ４０に発揮させる。
【０１８５】
なお、上記の制御プログラム３０は、ＣＰＵ４０に、読出したデータからエラーが検出されたデータが格納された物理ブロックの物理ブロックアドレスをエラーログ２３として、メモリデバイス１１ａ上に格納させる。そして、制御プログラム３０は、ＣＰＵ４０に、エラーログ２３としてメモリデバイス１１ａに格納させた物理ブロックアドレスが示す各物理ブロックに対して、検査読出制御を実行させる。また、ＮＡＮＤコントローラ６ｅは、ＣＰＵではなく、例えばＭＰＵやＦＰＧＡ等の演算装置を用いて制御プログラム３０を実行しても良い。
【０１８６】
また、上記の制御プログラム３０については、例えば、メモリデバイス１１ａや、ＮＡＮＤデバイス７ａ〜１０ａに記憶させてもよいし、他の方法でＣＰＵ４０に実行させてもよい。例えば、フレキシブルディスク、いわゆるＦＤ（Flexible  Disk）、ＣＤ（Compact  Disk）−ＲＯＭ、ＤＶＤ（Digital  Versatile  Disk）、光磁気ディスク、ＩＣカードなどの「可搬用の物理媒体」に各プログラムを記憶させる。
【０１８７】
そして、ＮＡＮＤコントローラ６ｅが各ＣＰＵ３ａ、３ｂを介して、これらの可搬用の物理媒体から各プログラムを取得して実行するようにしてもよい。また、公衆回線、インターネット、ＬＡＮ、ＷＡＮ（Wide  Area  Network）などを介して他のコンピュータまたはサーバ装置などに記憶させた各プログラムを取得して実行するようにしてもよい。
【符号の説明】
【０１８８】
１  情報処理装置
２ａ、２ｂ  メモリ
３ａ、３ｂ、４０  ＣＰＵ
４  Ｉ／Ｏハブ
５ａ、５ｂ  ＳＳＤ
６ａ〜６ｅ  ＮＡＮＤコントローラ
７ａ〜１０ａ、７ｂ〜１０ｂ  ＮＡＮＤデバイス
１１  テーブル記憶部
１１ａ  メモリデバイス
１２  リクエスタインターフェース部
１３、３１  リクエスト調停部
１４、３２  テーブル制御部
１５  デバイスアクセス制御部
１６、１６ａ、３３  エラー検出部
１７  エラーログ記憶部
１８〜１８ｂ、３４  検査読出制御部
１９、３５  データ移動制御部
２０  アドレス変換テーブル
２１  管理情報テーブル
２２  リクエスト数計測部
２３  エラーログ
３０  制御プログラム
【図１】
2014229216.tif 000003
【図２】
2014229216.tif 000004
【図３】
2014229216.tif 000005
【図４】
2014229216.tif 000006
【図５】
2014229216.tif 000007
【図６】
2014229216.tif 000008
【図７】
2014229216.tif 000009
【図８】
2014229216.tif 000010
【図９】
2014229216.tif 000011
【図１０】
2014229216.tif 000012
【図１１】
2014229216.tif 000013
【図１２】
2014229216.tif 000014
【図１３】
2014229216.tif 000015
【図１４】
2014229216.tif 000016
【図１５】
2014229216.tif 000017
【図１６】
2014229216.tif 000018