(57)【要約】【課題】データを書込んだ時刻を示す情報の情報量を削減する情報処理装置、制御回路、制御プログラム、および制御方法を提供する。【解決手段】情報処理装置は、ＮＡＮＤデバイス７ａ〜１０ａが有する複数の記憶領域の各々に記憶されたデータが移動の対象であるか判定する処理が、ＮＡＮＤデバイス７ａ〜１０ａが記憶する全てのデータに対して実行されるとカウント値を更新する巡回回数カウンタ１６を有する。また、情報処理装置は、ＮＡＮＤデバイス７ａ〜１０ａにデータが書込まれる際に、巡回回数カウンタ１６のカウント値をデータと対応付けて記憶するデーブル記憶部１１を有する。また、情報処理装置は、ＮＡＮＤデバイス７ａ〜１０ａが記憶するデータごとに、テーブル記憶部１１が記憶する値と巡回回数カウンタ１６のカウント値とを比較して、各データが移動の対象であるか判定する巡回参照制御部１７を有する。【選択図】図６
2014220021.tif 000002
【特許請求の範囲】
【請求項１】
記憶装置と、
前記記憶装置が有する複数の記憶領域の各々に記憶されたデータが移動の対象であるか判定する処理が、前記記憶装置が記憶する全てのデータに対して実行されるとカウント値を更新する計数部と、
前記記憶装置にデータが書込まれる際に、前記計数部のカウント値を前記データと対応付けて記憶する計数値記憶部と、
前記記憶装置が記憶するデータごとに、前記計数値記憶部が記憶する値と前記計数部のカウント値とを比較して、各データが移動の対象であるか判定する判定部と
を有することを特徴とする情報処理装置。
【請求項２】
前記計数値記憶部は、前記記憶領域を識別する領域識別子と、前記領域識別子が示す記憶領域にデータが書込まれる際に、前記計数部のカウント値を前記データと対応付けて記憶し、
前記判定部は、前記領域識別子ごとに、前記計数値記憶部が記憶する値と前記計数部のカウント値とを比較して、前記領域識別子が示す記憶領域に書込まれたデータが移動の対象であるか判定することを特徴とする請求項１に記載の情報処理装置。
【請求項３】
前記判定部は、前記記憶装置が記憶する各データが移動の対象であるか判定する処理を開始してから所定の時間が経過した場合は、最後に移動の対象であるか判定したデータが書込まれた記憶領域を示す領域識別子を記憶して前記処理を中断し、前記処理を再開する場合は、記憶した前記領域識別子の次番の領域識別子が示す記憶領域に書込まれたデータから前記処理を再開することを特徴とする請求項１または２に記載の情報処理装置。
【請求項４】
前記判定部は、前記記憶装置が有する複数の記憶領域を複数のグループに分割し、当該グループごとに、前記グループに含まれる記憶領域に書込まれたデータが移動の対象であるか判定する処理を実行することを特徴とする請求項１または２に記載の情報処理装置。
【請求項５】
前記計数部は、更新の結果、前記カウント値が所定の値となった場合は、カウント値を初期値に戻し、
前記判定部は、前記計数部のカウント値に１を加算した値と、前記計数値記憶部が記憶する値とが一致する場合は、当該値と対応付けられたデータが移動の対象であると判定することを特徴とする請求項１〜４のいずれか１つに記載の情報処理装置。
【請求項６】
前記記憶装置に対して発行されたデータの読出し要求、または、前記記憶装置に対して発行されたデータの書込み要求の数を計数する要求計数部と、
前記要求計数部が計数した前記読出し要求の数、または、前記書込み要求の数に応じて、前記データが移動の対象であるか判定するための閾値を設定する設定部と、
を有し、
前記判定部は、前記計数部のカウント値に前記設定部が設定した閾値を加算した値が、前記計数値記憶部が記憶する値以上となる場合は、当該値と対応付けて前記計数値記憶部が記憶するデータが移動の対象であると判定することを特徴とする請求項１〜４のいずれか１つに記載の情報処理装置。
【請求項７】
前記要求計数部は、前記読出し要求が発行された数、または、前記書込み要求が発行された数を、前記記憶領域ごとに計数し、
前記設定部は、前記要求計数部が計数した前記読出し要求の数、または、前記書込み要求の数に応じて、前記閾値を前記記憶領域ごとに設定し、
前記判定部は、前記記憶装置が有する記憶領域ごとに、前記設定部が設定した閾値と前記計数部のカウント値とを加算した値が、前記記憶領域に書込まれたデータと対応付けて前記計数値記憶部が記憶する値以上となる場合は、前記記憶領域に書込まれたデータが移動の対象であると判定することを特徴とする請求項６に記載の情報処理装置。
【請求項８】
記憶装置が有する複数の記憶領域の各々に記憶されたデータが移動の対象であるか判定する処理が、前記記憶装置が記憶する全てのデータに対して実行されるとカウント値を更新する計数部と、
前記記憶装置にデータが書込まれる際に、前記計数部のカウント値を前記データと対応付けて記憶する計数値記憶部と、
前記記憶装置が記憶するデータごとに、前記計数値記憶部が記憶する値と前記計数部のカウント値とを比較して、各データが移動の対象であるか判定する判定部と
を有することを特徴とする前記記憶装置の制御回路。
【請求項９】
コンピュータに、
記憶装置が有する複数の記憶領域の各々に記憶されたデータが移動の対象であるか判定する処理が、前記記憶装置が記憶する全てのデータに対して実行されるとカウント値を更新し、
前記記憶装置にデータが書込まれる際に、カウント値と前記データとを対応付けて所定の記憶部に記憶し、
前記記憶装置が記憶するデータごとに、前記所定の記憶部が記憶する値と前記カウント値とを比較して、各データが移動の対象であるか判定する
処理を実行させることを特徴とする制御プログラム。
【請求項１０】
情報処理装置が、
記憶装置が有する複数の記憶領域の各々に記憶されたデータが移動の対象であるか判定する処理が、前記記憶装置が記憶する全てのデータに対して実行されるとカウント値を更新し、
前記記憶装置にデータが書込まれる際に、カウント値と前記データとを対応付けて所定の記憶部に記憶し、
前記記憶装置が記憶するデータごとに、前記所定の記憶部が記憶する値と前記カウント値とを比較して、各データが移動の対象であるか判定する
処理を実行することを特徴とする前記記憶装置の制御方法。
【請求項１１】
記憶装置が記憶するデータが移動の対象であるか判定する処理が前記記憶装置が記憶する全てのデータに対して実行された後で、前記記憶装置にデータが書込まれた場合は、当該データが前記処理の後で書込まれたデータである旨を示す書込情報を前記データと対応付けて記憶する記憶部と、
前記記憶装置が記憶するデータごとに、前記記憶部が記憶する書込情報に応じて、各データが移動の対象であるか判定する判定部と
を有することを特徴とする情報処理装置。
【発明の詳細な説明】
【技術分野】
【０００１】
本発明は、情報処理装置、制御回路、制御プログラム、および制御方法に関する。
【背景技術】
【０００２】
従来、磁気ディスクよりも高速に動作する不揮発性メモリを用いた情報処理装置が知られている。このような情報処理システムの一例として、ＮＡＮＤフラッシュメモリデバイスをストレージ等の記憶装置として使用する情報処理装置が知られている。なお、以下の説明では、ＮＡＮＤフラッシュメモリデバイスをＮＡＮＤデバイスと記載する。
【０００３】
ここで、ＮＡＮＤデバイスの各記憶領域は、情報を消去する際に劣化する。このため、頻繁に更新される情報が書込まれた記憶領域と、あまり更新されない情報が書込まれた記憶領域とでは、劣化する速度にばらつきが存在する。また、ＮＡＮＤデバイスは、情報を書込んだままにしておくと、データを書込んだ記憶領域の素子から電荷が抜け、ビット化けを発生させる場合がある。
【０００４】
かかる記憶領域の劣化を平準化したり、各記憶領域の素子から電荷が抜けることによるビット化けを防ぐため、情報を書込んだ際の時刻を記憶し、記憶した時刻と現在の時刻との比較結果に応じて情報の再書込みを行う技術が知られている。例えば、情報処理装置は、記憶領域ごとに、情報を書込んだ際の時刻を記憶する。そして、情報処理装置は、記憶した時刻と現在の時刻とを比較し、情報を書込んでから経過した経過時間を演算する。その後、情報処理装置は、経過時間と所定の閾値との比較結果に応じて、情報の再書込みを実行するか否か判定する。
【先行技術文献】
【特許文献】
【０００５】
【特許文献１】特開平０８−１４７９８８号公報
【特許文献２】特開平０５−１９８１９８号公報
【特許文献３】特開２００６−２５２６９５号公報
【発明の概要】
【発明が解決しようとする課題】
【０００６】
しかしながら、上述した情報の再書込みを実行する技術では、記憶領域ごとに、情報を書込んだ時刻をそのまま記憶するので、経過時間を演算するために記憶する時刻の総情報量が増大するという問題がある。
【０００７】
例えば、時刻の総情報量が増大した場合は、時刻を記憶する記憶装置の規模が増大するので、情報処理装置の回路規模が増大する。また、時刻の総情報量が増大すると、判定対象となる記憶領域にデータを書込んだ際の時刻を検索する時間が増大するので、ＮＡＮＤデバイスに対するアクセス性能が低下する。
【０００８】
１つの側面では、データを書込んだ時刻を示す情報の情報量を削減する情報処理装置、制御回路、制御プログラム、および制御方法を提供することを目的とする。
【課題を解決するための手段】
【０００９】
一態様の情報処理装置は、記憶装置を有する。また、情報処理装置は、記憶装置が有する複数の記憶領域の各々に記憶されたデータが移動の対象であるか判定する処理が、記憶装置が記憶する全てのデータに対して実行されるとカウント値を更新する計数部を有する。また、情報処理装置は、記憶装置にデータが書込まれる際に、計数部のカウント値をデータと対応付けて記憶する計数値記憶部を有する。また、情報処理装置は、記憶装置が記憶するデータごとに、計数値記憶部が記憶する値と計数部のカウント値とを比較して、各データが移動の対象であるか判定する判定部を有する。
【発明の効果】
【００１０】
一実施形態によれば、データを書込んだ時刻を示す情報の情報量を削減できる。
【図面の簡単な説明】
【００１１】
【図１】図１は、実施例１に係る情報処理装置を説明する図である。
【図２】図２は、メモリアクセスの一例を説明する図である。
【図３】図３は、従来のＮＡＮＤコントローラが実行する処理の一例を説明する図である。
【図４】図４は、従来のタイムスタンプを用いた処理を説明する図である。
【図５】図５は、従来のタイムスタンプを用いた処理の問題を説明する図である。
【図６】図６は、実施例１に係るＮＡＮＤコントローラの機能構成を説明する図である。
【図７】図７は、実施例１に係るアドレス変換テーブルに格納された情報の一例を説明する図である。
【図８】図８は、実施例１に係る管理情報テーブルに格納された情報の一例を説明する図である。
【図９】図９は、ＮＡＮＤコントローラが実行する処理を説明する図である。
【図１０】図１０は、データ移動制御を説明する図である。
【図１１】図１１は、実施例１に係るＮＡＮＤコントローラが実行する処理の流れを説明するフローチャートである。
【図１２】図１２は、実施例２に係るＮＡＮＤコントローラの機能構成を説明する図である。
【図１３】図１３は、実施例２に係るＮＡＮＤコントローラが実行する処理の流れを説明する第１のフローチャートである。
【図１４】図１４は、実施例２に係るＮＡＮＤコントローラが実行する処理の流れを説明する第２のフローチャートである。
【図１５】図１５は、実施例３に係るＮＡＮＤコントローラの機能構成を説明する図である。
【図１６】図１６は、平均要求発行数に応じた閾値の一例を説明する図である。
【図１７】図１７は、実施例３に係るＮＡＮＤコントローラが実行する処理の流れを説明するフローチャートである。
【図１８】図１８は、書込ビットを用いた処理の一例を説明する図である。
【図１９】図１９は、制御プログラムを実行するＮＡＮＤコントローラの一例を説明する図である。
【発明を実施するための形態】
【００１２】
以下に添付図面を参照して本願に係る情報処理装置、制御回路、制御プログラム、および制御方法の実施例を図面に基づいて詳細に説明する。なお、以下の実施例により開示技術が限定されるものではない。また、各実施例は、矛盾しない範囲で適宜組みあわせてもよい。
【実施例１】
【００１３】
以下の実施例１では、図１を用いて、本願に係る情報処理装置の一例を説明する。図１は、実施例１に係る情報処理装置を説明する図である。図１に示す例では、情報処理装置１は、複数のメモリ２ａ、２ｂ、複数のＣＰＵ（Central  Processing  Unit）３ａ、３ｂ、Ｉ／Ｏ（Input  Output）ハブ４、複数のＳＳＤ（Solid  State  Drive）５ａ、５ｂを有する。また、ＳＳＤ５ａは、ＮＡＮＤコントローラ６ａ、および複数のＮＡＮＤデバイス７ａ〜１０ａを有する。
【００１４】
また、ＳＳＤ５ｂは、ＮＡＮＤコントローラ６ｂ、および複数のＮＡＮＤデバイス７ｂ〜１０ｂを有する。なお、以下の説明では、ＮＡＮＤコントローラ６ｂ、および複数のＮＡＮＤデバイス７ｂ〜１０ｂは、ＮＡＮＤコントローラ６ａ、および複数のＮＡＮＤデバイス７ａ〜１０ａと同様の機能を発揮するものとして、説明を省略する。
【００１５】
各メモリ２ａ、２ｂは、各ＣＰＵ３ａ、３ｂが演算処理に用いるデータを記憶する記憶装置である。また、各ＣＰＵ３ａ、３ｂは、メモリ２ａ、２ｂが記憶するデータを用いて、各種演算処理を行う演算処理装置である。例えば、ＣＰＵ３ａ、３ｂは、ＮＵＭＡ（Non-Uniform  Memory  Access）の技術を用いて、メモリ２ａ、２ｂが記憶するデータを取得し、取得したデータを用いて演算処理を実行する。
【００１６】
また、ＣＰＵ３ａ、３ｂは、Ｉ／Ｏハブ４を介して、各ＳＳＤ５ａ、５ｂが記憶するデータを取得し、取得したデータを用いて演算処理を実行する。詳細には、ＣＰＵ３ａは、ＳＳＤ５ａに対し、データの読出し要求や書込み要求を発行し、各ＮＡＮＤデバイス７ａ〜１０ａからデータの読出しや書込みを行う。例えば、ＣＰＵ３ａは、ＳＳＤ５ａに対し、読出し対象となるデータを指定する論理アドレスが格納された読出し要求を発行する。また、ＣＰＵ３ａは、データの書込み先を指定する論理アドレスと、書込み対象となるデータとが格納された書込み要求を発行する。
【００１７】
ＮＡＮＤデバイス７ａは、各種データを記憶する不揮発性メモリである。詳細には、ＮＡＮＤデバイス７ａは、データの記憶領域であるページを複数有し、ページ単位でデータの書込みを行う。また、ＮＡＮＤデバイス７ａは、複数のページを有するブロックを複数有し、ブロック単位でデータの消去を行う。
【００１８】
ＮＡＮＤコントローラ６ａは、各ＮＡＮＤデバイス７ａ〜１０ａに対してアクセスし、データの読出しや書込みを行う。例えば、ＮＡＮＤコントローラ６ａは、各ＣＰＵ３ａ、３ｂがデータが記憶された記憶領域を指定する際に用いる論理アドレスと、データが格納されたＮＡＮＤデバイス７ａ〜１０ａの記憶領域を示す物理アドレスとを対応付けたアドレス変換テーブルを有する。
【００１９】
そして、ＮＡＮＤコントローラ６ａは、読出し要求とともに論理アドレスを受信すると、アドレス変換テーブルを用いて、論理アドレスと対応付けられた物理アドレスを識別し、識別した物理アドレスが示す記憶領域からデータの読出しを行う。その後、ＮＡＮＤコントローラ６ａは、Ｉ／Ｏハブ４を介して、読出したデータをＣＰＵ３ａに送信する。
【００２０】
なお、以下の説明では、理解を容易にするため、各ページの先頭アドレスとなる論理アドレスを単に論理アドレスと記載し、各ページの先頭アドレスとなる物理アドレスを単に物理アドレスと記載する。また、情報処理装置１が実行するシステムは、各ページの先頭アドレスとなる論理アドレスに対する読出し要求や書込み要求を発行するものとする。
【００２１】
例えば、ＮＡＮＤコントローラ６ａは、ＮＡＮＤデバイス７ａ〜１０ａが、複数のブロックを有し、各ブロックに２ｑ個のページが含まれている場合は、以下の処理を行う。まず、ＮＡＮＤコントローラ６ａは、論理アドレスの下位ｑビットを論理的な１つのブロック内において、ページを識別するための論理ページ番号とし、残りの論理アドレスの上位ｐビットを論理的な１つのブロックを示す論理ブロックアドレスとする。
【００２２】
また、ＮＡＮＤコントローラ６ａは、物理アドレスの上位ｐビットを物理的な１つのブロックを示す物理ブロックアドレスとし、物理アドレスの下位ｑビットを物理的な１つのブロック内において、各ページを識別するための物理ページ番号とする。つまり、ＮＡＮＤコントローラ６ａは、論理アドレスを、論理ブロックを示す論理ブロックアドレスと、論理ページを論理ブロックごとに示す論理ページ番号とに分割する。また、ＮＡＮＤコントローラ６ａは、物理アドレスを、物理ブロックを示す物理ブロックアドレスと、物理ページを物理ブロックごとに示す物理ページ番号とに分割する。
【００２３】
例えば、図２は、メモリアクセスの一例を説明する図である。なお、図２に示す例では、理解を容易にするため、ブロック数を「８」とし、各ブロック内のページ数が「４」のＮＡＮＤデバイス７ａについて記載した。また、図２に示す例では、論理ブロックアドレスと物理ブロックアドレスとを対応付けたアドレス変換テーブルを有するＮＡＮＤコントローラ６ａが実行する処理について記載した。
【００２４】
例えば、ＣＰＵ３ａが実行するファイルシステムは、図２中（ａ）に示すように、論理ブロックアドレス「Ｌ４」に含まれる論理ページのうち、論理ページ番号「１」が示す論理ページに対する書込み要求を発行する。すなわち、ファイルシステムは、論理アドレス「Ｌ４−１」に対する書込み要求を発行する。すると、ＮＡＮＤコントローラ６ａは、図２中（ｂ）に示すように、論理ブロックアドレス「Ｌ４」に対応付けられた物理ブロックアドレス「Ｐ７」を取得し、図２中（ｃ）に示すように、書込み対象となるページを含むブロックを識別する。
【００２５】
続いて、ＮＡＮＤコントローラ６ａは、図２中（ｄ）に示すように、物理ブロックアドレス「Ｐ７」が示す物理ブロックの全データを予備ブロックにコピーする。この際、ＮＡＮＤコントローラ６ａは、書込み要求の対象となる論理ページ番号「１」と同じ物理ページ番号「１」のデータを書込み対象となるデータで更新する。その後、ＮＡＮＤコントローラ６ａは、図２中（ｅ）に示すように、論理ブロックアドレス「Ｌ４」と対応付けられていた物理ブロックアドレス「Ｐ７」を予備ブロックの物理ブロックアドレス「Ｐ８」に更新する。そして、ＮＡＮＤコントローラ６ａは、物理ブロックアドレス「Ｐ７」が示すブロックのデータを消去する。
【００２６】
ここで、従来のＮＡＮＤコントローラは、劣化速度のばらつきを平準化したり、電荷が素子から抜けることで発生するビット化けを防ぐため、ＮＡＮＤデバイスの各ブロックにデータを書込んだ際の時刻をタイムスタンプとして記憶する。そして、従来のＮＡＮＤコントローラは、各ブロックについて、記憶したタイムスタンプと現在の時刻との差が所定の閾値よりも大きい場合は、ブロックに格納されたデータを他のブロックに移動することで、データの再書込みを行う。
【００２７】
以下、図３を用いて、従来のＮＡＮＤコントローラが実行する処理の一例を説明する。図３は、従来のＮＡＮＤコントローラが実行する処理の一例を説明する図である。例えば、ＮＡＮＤコントローラは、図３中（ｆ）に示すように、Ｉ／Ｏハブから読出し又は書込み要求を受信する。すると、ＮＡＮＤコントローラは、読出し／書込み制御を実行する。例えば、ＮＡＮＤコントローラは、図３中（ｇ）に示すように、アドレス変換テーブルを用いて論理アドレスを物理アドレスに変換する。そして、ＮＡＮＤコントローラは、図３中（ｈ）に示すように、変換後の論理アドレスを用いて、ＮＡＮＤデバイスに対する読出しや書込み処理を実行する。
【００２８】
ここで、ＮＡＮＤコントローラは、ＮＡＮＤデバイスが有する各ブロックの物理アドレスと、データの書込みを行ったか否かを示すバリッドビットと、データの書込みを行った時刻を示すタイムスタンプとを対応付けた管理情報テーブルを有する。そして、ＮＡＮＤコントローラは、ＮＡＮＤデバイスに対する書込み処理を実行した場合は、図３中（ｉ）に示すように、書込み処理を行った時刻と、データを書込んだブロックと、バリッドビットとを対応付けて管理情報テーブルに格納する。例えば、ＮＡＮＤコントローラは、図３中（ｊ）に示すように、データの書込みを行った際に時刻カウンタがカウントしていた時刻と、データの書込みを行ったブロックの物理ブロックアドレスと、バリッドビット「１」とを対応付けて管理情報テーブルに格納する。
【００２９】
また、ＮＡＮＤコントローラは、データ移動制御を実行する。例えば、ＮＡＮＤコントローラは、図３中（ｋ）に示すように、管理情報テーブルに格納された時刻と、時刻カウンタがカウントする現在の時刻とを比較し、書込まれてから所定の時間が経過したデータを識別する。そして、ＮＡＮＤコントローラは、図３中（ｌ）に示すように、識別したデータを他のブロックに移動させる。その後、ＮＡＮＤコントローラは、図３中（ｍ）に示すように、データの移動に応じて、アドレス変換テーブルを更新し、図３中（ｎ）に示すように、管理情報テーブルを更新する。
【００３０】
次に、図４を用いて、従来のＮＡＮＤコントローラが、タイムスタンプを用いて移動するデータを識別する処理について説明する。図４は、従来のタイムスタンプを用いた処理を説明する図である。なお、図４には、従来のＮＡＮＤコントローラが有する管理情報テーブルの内容と、時刻カウンタがカウントする値とを記載した。
【００３１】
例えば、ＮＡＮＤコントローラは、時刻カウント値が「１２」の際に、物理ブロックアドレス「Ｐ１」が示すブロックにデータを書込んだ場合は、以下の処理を実行する。すなわち、ＮＡＮＤコントローラは、図４中（ｏ）に示すように、物理ブロックアドレス「Ｐ１」とバリッドビット「１」とタイムスタンプ「１２」を対応付けて格納する。
【００３２】
また、ＮＡＮＤコントローラは、時刻カウント値が「８１０」の際に物理ブロックアドレス「Ｐ５」が示すブロックにデータを書込んだ場合は、以下の処理を実行する。すなわち、ＮＡＮＤコントローラは、図４中（ｐ）に示すように、物理ブロックアドレス「Ｐ５」とバリッドビット「１」とタイムスタンプ「８１０」とを対応付けて管理情報テーブルに格納する。
【００３３】
また、ＮＡＮＤコントローラは、時刻カウント値が「５２００」の際に物理ブロックアドレス「Ｐ６」が示すブロックにデータを書込んだ場合は、以下の処理を実行する。すなわち、ＮＡＮＤコントローラは、図４中（ｑ）に示すように、物理ブロックアドレス「Ｐ６」とバリッドビット「１」とタイムスタンプ「５２００」とを対応付けて管理情報テーブルに格納する。
【００３４】
また、ＮＡＮＤコントローラは、所定の時間間隔で、管理情報テーブルに格納された各タイムスタンプの値を参照し、タイムスタンプの値と現在の時刻カウンタの値との差が所定の閾値よりも大きい物理ブロックを識別する。例えば、図４に示す例では、ＮＡＮＤコントローラは、現在の時刻カウンタの値「５５１０」との差分が大きいタイムスタンプ「１２」が対応付けられた物理ブロックアドレス「Ｐ１」を識別する。そして、ＮＡＮＤコントローラは、物理ブロックアドレス「Ｐ１」が示すブロックのデータを、例えば、物理ブロックアドレス「Ｐ７」が示すブロックに移動させる。
【００３５】
その後、ＮＡＮＤコントローラは、図４中（ｒ）に示すように、物理ブロックアドレス「Ｐ７」と対応付けられたバリッドビットを「１」に更新し、タイムスタンプとして現在の時刻の値「５５１０」を対応付ける。また、ＮＡＮＤコントローラは、図４中（ｓ）に示すように、物理ブロックアドレス「Ｐ１」と対応付けられたバリッドビットを「０」に更新し、タイムスタンプの値を削除する。
【００３６】
しかしながら、従来のＮＡＮＤコントローラは、各物理ブロックアドレスごとに、タイムスタンプを記憶するので、管理情報テーブルのデータサイズを増大させてしまう。例えば、ＮＡＮＤコントローラは、１ページの大きさが８キロバイトで、１つのブロックに１２８ページが含まれる場合は、１メガバイトごとに複数桁のタイムスタンプを管理情報テーブルに格納する。このため、ＮＡＮＤデバイス７ａ〜１０ａの容量が多くなるほど、管理情報テーブルのサイズが大きくなる。この結果、従来のＮＡＮＤコントローラは、管理情報テーブルを記憶するために回路規模が増大したり、タイムスタンプを参照する際の時間が増大し、ＮＡＮＤデバイスに対するアクセス性能を低下させてしまう。
【００３７】
なお、管理情報テーブルのデータサイズを減少させるため、所定の桁数で時刻カウンタの値を初期値に戻す方法が考えられる。しかしながら、所定の桁数で時刻カウンタの値を初期値に戻した場合は、時刻カウンタの値が一巡した際に、誤動作が発生する場合がある。以下、図５を用いて、時刻カウンタの値が一巡した際に発生する誤動作の一例について説明する。
【００３８】
図５は、従来のタイムスタンプを用いた処理の問題を説明する図である。なお、図５に示す例では、時刻カウンタの値が「９９９９」で桁あふれを起こし、初期値「０」に戻る例について説明する。例えば、ＮＡＮＤコントローラは、図５中（ｔ）に示すように、時刻カウンタの値が「１２」、「８１０」、「５２００」の際に、物理ブロックアドレス「Ｐ１」、「Ｐ５」、「Ｐ６」が示すブロックにデータを書込んだ旨を管理情報テーブルに格納する。
【００３９】
続いて、ＮＡＮＤコントローラは、図５中（ｕ）に示すように、時刻カウンタの値が「８１００」の際に、物理ブロックアドレス「Ｐ２」が示すブロックにデータを書込んだ旨を管理情報テーブルに格納する。また、ＮＡＮＤコントローラは、時刻カウンタの値が一巡し、「３５」となった際に、物理ブロックアドレス「Ｐ３」が示すブロックにデータを書込んだ旨を管理情報テーブルに格納する。
【００４０】
そして、ＮＡＮＤコントローラは、図５中（ｖ）に示すように、時刻カウンタの値が「５０」の際に、各タイムスタンプの値を参照し、時刻カウンタの値が一巡することを考慮して、時刻カウンタの値「５０」と差分が大きいタイムスタンプを検索する。ここで、ＮＡＮＤデバイス７ａ〜１０ａが記憶するデータのうち、最も古いデータは、タイムスタンプ「１２」と対応付けられた物理ブロックアドレス「Ｐ１」が示すブロックに格納されたデータである。
【００４１】
しかしながら、ＮＡＮＤコントローラは、優先度が高い読出し要求や書込み要求が集中して発行された際に、データの移動処理が延期された場合や、移動処理の完了が遅れた場合等には、時刻カウンタの値がタイムスタンプの値を追い越す場合がある。かかる場合は、ＮＡＮＤコントローラは、タイムスタンプの値が、時刻カウンタの値が一巡する前の値であるか否かを判別できない。
【００４２】
この結果、ＮＡＮＤコントローラは、図５中（ｗ）に示すように、物理ブロックアドレス「Ｐ５」と対応付けられたタイムスタンプの値「８１０」が最も古いタイムスタンプの値であると判定する。そして、ＮＡＮＤコントローラは、物理ブロックアドレス「Ｐ５」と対応付けられたタイムスタンプの値「８１０」を削除する。また、ＮＡＮＤコントローラは、図５中（ｘ）に示すように、物理ブロックアドレス「Ｐ５」が示すブロックに格納されていたデータを、物理ブロックアドレス「Ｐ７」が示すブロックに移動させる。
【００４３】
このように、従来のＮＡＮＤコントローラは、図５中（ｙ）に示すように、物理ブロックアドレス「Ｐ１」が示すブロックに格納されたデータが最も古いデータであるにもかかわらず、古いデータであると検出できない。そこで、実施例１に係るＮＡＮＤコントローラ６ａは、以下の処理を実行する。
【００４４】
まず、ＮＡＮＤコントローラ６ａは、ＮＡＮＤデバイス７ａ〜１０ａが記憶するデータが移動の対象であるか判定する処理が、全てのデータに対して実行されると、カウント値を更新する巡回回数カウンタを有する。また、ＮＡＮＤコントローラ６ａは、ＮＡＮＤデバイス７ａ〜１０ａにデータを書込む際に、巡回回数カウンタのカウント値を記憶する。詳細には、ＮＡＮＤコントローラ６ａは、データの書込み先となるブロックの物理ブロックアドレスと巡回回数カウンタのカウント値とを対応付けて記憶する。
【００４５】
そして、ＮＡＮＤコントローラ６ａは、データごとに、データが格納された物理ブロックアドレスと対応付けて記憶するカウント値と、巡回回数カウンタのカウント値とを比較して、各ブロックのデータが移動の対象であるか判定する。この結果、ＮＡＮＤコントローラ６ａは、巡回回数カウンタが計数するカウント値の桁数を少なくしても、データ書込み時やデータ移動時に記憶したカウント値を追越す状態を防ぐことができる。
【００４６】
次に、図６を用いて、ＮＡＮＤコントローラ６ａが有する機能構成の一例について説明する。図６は、実施例１に係るＮＡＮＤコントローラの機能構成を説明する図である。図６に示す例では、ＮＡＮＤコントローラ６ａは、テーブル記憶部１１、リクエスタインターフェース部１２、リクエスト調停部１３、テーブル制御部１４、デバイスアクセス制御部１５を有する。また、ＮＡＮＤコントローラ６ａは、巡回回数カウンタ１６、巡回参照制御部１７、データ移動制御部１８を有する。また、テーブル記憶部１１は、アドレス変換テーブル１９、管理情報テーブル２０を記憶する。
【００４７】
まず、図７、図８を用いて、テーブル記憶部１１が記憶するアドレス変換テーブル１９と、管理情報テーブル２０に格納された情報について説明する。図７は、実施例１に係るアドレス変換テーブルに格納された情報の一例を説明する図である。図７に示すように、アドレス変換テーブル１９には、論理ブロックアドレスと、物理ブロックアドレスとが対応付けて格納されている。
【００４８】
例えば、図７に示す例では、アドレス変換テーブル１９には、論理ブロックアドレス「Ｌ０」と物理ブロックアドレス「Ｐ４」とが対応付けて格納されている。すなわち、アドレス変換テーブル１９は、物理ブロックアドレス「Ｐ４」が示すブロックに論理ブロックアドレス「Ｌ０」が指定するデータが格納されている旨を示す。
【００４９】
同様に、図７に示す例では、アドレス変換テーブル１９には、論理ブロックアドレス「Ｌ１」と物理ブロックアドレス「Ｐ２」とが対応付けて格納され、論理ブロックアドレス「Ｌ２」と物理ブロックアドレス「Ｐ３」とが対応付けて格納される。また、アドレス変換テーブル１９には、論理ブロックアドレス「Ｌ３」と物理ブロックアドレス「Ｐ６」とが対応付けて格納され、論理ブロックアドレス「Ｌ４」と物理ブロックアドレス「Ｐ７」とが対応付けて格納される。
【００５０】
また、アドレス変換テーブル１９には、論理ブロックアドレス「Ｌ５」と物理ブロックアドレス「Ｐ１」とが対応付けて格納され、論理ブロックアドレス「Ｌ６」と物理ブロックアドレス「Ｐ０」とが対応付けて格納される。また、アドレス変換テーブル１９には、論理ブロックアドレス「Ｌ７」と物理ブロックアドレス「Ｐ５」とが対応付けて格納される。
【００５１】
次に、図８を用いて、管理情報テーブル２０に格納される情報について説明する。図８は、実施例１に係る管理情報テーブルに格納された情報の一例を説明する図である。図８に示すように、管理情報テーブル２０には、物理ブロックアドレスと、バリッドビットと、タイムスタンプとが対応付けて格納される。ここで、バリッドビットとは、対応付けられた物理ブロックアドレスが示すブロックにデータが書込まれているか否かを示す情報である。また、タイムスタンプとは、対応付けられた物理ブロックアドレスが示すブロックにデータを書込んだ際に、巡回回数カウンタ１６がカウントしていたカウント値である。すなわち、ＮＡＮＤコントローラ６ａは、データを書込んだ際のカウント値を物理ブロックアドレスと対応付けて記憶する。
【００５２】
例えば、図８に示す例では、管理情報テーブル２０には、物理ブロックアドレス「Ｐ０」と、バリッドビット「１」と、タイムスタンプ「２」とが対応付けて格納される。すなわち、管理情報テーブル２０は、物理ブロックアドレス「Ｐ０」が示す記憶領域に対し、巡回回数カウンタ１６のカウント値が「２」であったことを示す。
【００５３】
同様に、図８に示す例では、管理情報テーブル２０には、物理ブロックアドレス「Ｐ１」と、バリッドビット「１」と、タイムスタンプ「７」とが対応付けて格納される。また、管理情報テーブル２０には、物理ブロックアドレス「Ｐ５」と、バリッドビット「１」と、タイムスタンプ「７」とが対応付けて格納される。このように、管理情報テーブル２０には、データが書込まれた際の巡回回数カウンタ１６の値が格納される。なお、管理情報テーブル２０を記憶するテーブル記憶部１１は、特許請求の範囲に記載の計数値記憶部の一例である。
【００５４】
図６に戻り、リクエスタインターフェース部１２は、ＣＰＵ３ａ、３ｂからＮＡＮＤデバイス７ａ〜１０ａに対するリクエストのインターフェースである。例えば、リクエスタインターフェース部１２は、ＣＰＵ３ａ、３ｂからＩ／Ｏハブ４を介して、論理アドレスを含む読出し要求を受信する。かかる場合は、リクエスタインターフェース部１２は、読出し要求をリクエスト調停部１３に出力する。また、リクエスタインターフェース部１２は、ＮＡＮＤデバイス７ａ〜１０ａから読出したデータをリクエスト調停部１３から受信すると、読出し要求の発行元となるＣＰＵ３ａ、３ｂに対して、データを送信する。
【００５５】
また、リクエスタインターフェース部１２は、ＣＰＵ３ａ、３ｂから、ＮＡＮＤデバイス７ａ〜１０ａに対して書込むデータと、書込み対象となるデータの論理アドレスとを含む書込み要求を受信する。かかる場合は、リクエスタインターフェース部１２は、受信した書込み要求をリクエスト調停部１３に出力する。また、リクエスタインターフェース部１２は、リクエスト調停部１３から、データ書込みが完了した旨の応答を受信すると、受信した応答を、書込み要求の発行元となるＣＰＵ３ａ、３ｂに対して、応答を送信する。
【００５６】
リクエスト調停部１３は、リクエスタインターフェース部１２、データ移動制御部１８、巡回参照制御部１７が発行する各種リクエストの調停を行う。詳細には、リクエスト調停部１３は、リクエスタインターフェース部１２から受信する読出し要求、又は、書込み要求を受信する。また、リクエスト調停部１３は、データ移動制御部１８から、ＮＡＮＤデバイス７ａ〜１０ａが記憶するデータを、現在記憶するブロックから他のブロックに移動するよう要求する移動要求を受信する。また、リクエスト調停部１３は、巡回参照制御部１７から、管理情報テーブル２０の参照を要求するテーブル参照要求を受信する。
【００５７】
そして、リクエスト調停部１３は、リクエスタインターフェース部１２、データ移動制御部１８、巡回参照制御部１７から受信する読出し要求、書込み要求、移動要求、テーブル参照要求の調停を行う。例えば、リクエスト調停部１３は、ＣＰＵ３ａ、３ｂからＮＡＮＤデバイス７ａ〜１０ａに対するデータの読出しや書込みが阻害されないよう、リクエスタインターフェース部１２が発行する読出し要求、および、書込み要求を最優先で実行する。また、例えば、リクエスト調停部１３は、移動要求をテーブル参照要求よりも優先して実行する。なお、リクエスト調停部１３が各要求を調停するルールについては、上述した処理に限定されるものではなく、任意のルールを適用してよい。
【００５８】
以下、リクエスト調停部１３が読出し要求、書込み要求、移動要求、テーブル参照要求を受信した際に実行する処理の一例を説明する。例えば、リクエスト調停部１３は、読出し要求を受信すると、読出し要求に含まれる論理アドレスをテーブル制御部１４に出力する。そして、リクエスト調停部１３は、テーブル制御部１４から、読出し対象となる物理アドレスを受信すると、受信した物理アドレスを格納した読出し要求をデバイスアクセス制御部１５に発行する。その後、リクエスト調停部１３は、読出し対象となるデータをデバイスアクセス制御部１５から受信すると、受信したデータをリクエスタインターフェース部１２に出力する。
【００５９】
また、リクエスト調停部１３は、書込み要求を受信すると、書込み要求に含まれる論理アドレスをテーブル制御部１４に出力する。この結果、リクエスト調停部１３は、書込み対象のデータが新たなデータである場合は、データが格納されていない予備ブロックのうち、データの書込み先となるページの物理アドレスをテーブル制御部１４から受信する。
【００６０】
その後、リクエスト調停部１３は、テーブル制御部１４から受信した物理アドレスと、書込み対象のデータとを含む書込み要求をデバイスアクセス制御部１５に発行する。また、リクエスト調停部１３は、データの書込み先となるページの物理アドレスと、書込み要求に含まれる論理アドレスとを含むテーブル更新要求をテーブル制御部１４に出力する。
【００６１】
また、リクエスト調停部１３は、書込みがデータの更新を目的とする場合は、更新元のデータが格納されたページの物理アドレスを更新元物理アドレスとしてテーブル制御部１４から受信する。また、リクエスト調停部１３は、テーブル制御部１４から、予備ブロックに含まれるページの物理アドレス、すなわちデータの書込み先となるページの物理アドレスを更新先物理アドレスとして受信する。
【００６２】
そして、リクエスト調停部１３は、更新元物理アドレスと、更新先物理アドレスとをテーブル制御部１４から受信した場合は、データの更新を要求する更新要求をデバイスアクセス制御部１５に発行する。詳細には、リクエスト調停部１３は、更新元物理アドレスと、更新先物理アドレスと、書込むデータとを含む更新要求をデバイスアクセス制御部１５に発行する。
【００６３】
また、リクエスト調停部１３は、更新元物理アドレスと、更新先物理アドレスと、書込み要求に含まれる論理アドレスとを含むテーブル更新要求をテーブル制御部１４に出力する。その後、リクエスト調停部１３は、デバイスアクセス制御部１５からデータの書込みが完了した旨の応答を受信すると、受信した応答をリクエスタインターフェース部１２に出力する。
【００６４】
また、リクエスト調停部１３は、移動対象のデータが格納されたブロックの物理ブロックアドレスを含む移動要求を受信する。以下、移動対象のデータが格納されたブロックの物理ブロックアドレスを移動元物理ブロックアドレスと記載する。また、リクエスト調停部１３は、テーブル制御部１４に問い合わせる等して、予備ブロックの物理ブロックアドレス、すなわちデータの移動先となるブロックの物理ブロックアドレスを移動先物理ブロックアドレスとして取得する。
【００６５】
そして、リクエスト調停部１３は、移動元物理ブロックアドレスと、移動先物理ブロックアドレスとを含む移動要求をデバイスアクセス制御部１５に発行する。また、リクエスト調停部１３は、移動元物理ブロックアドレスと、移動先物理ブロックアドレスとを含むテーブル更新要求をテーブル制御部１４に出力する。その後、リクエスト調停部１３は、デバイスアクセス制御部１５からデータの移動が完了した旨の応答を受信すると、データ移動制御部１８に対して、データの移動が完了した旨の応答を出力する。
【００６６】
また、リクエスト調停部１３は、テーブル参照要求を受信した場合は、テーブル制御部１４に対し、管理情報テーブル２０の参照要求を送信する。そして、リクエスト調停部１３は、テーブル制御部１４から管理情報テーブル２０を受信すると、受信した情報を巡回参照制御部１７に出力する。
【００６７】
テーブル制御部１４は、論理アドレスを物理アドレスに変換する。例えば、テーブル制御部１４は、リクエスト調停部１３から読出し要求に格納された論理アドレスを受信すると、受信した論理アドレスに含まれる論理ブロックアドレスを抽出する。また、テーブル制御部１４は、アドレス変換テーブル１９を参照し、抽出した論理ブロックアドレスと対応付けられた物理ブロックアドレスを取得する。
【００６８】
そして、テーブル制御部１４は、受信した論理アドレスに含まれる論理ページ番号と、取得した物理ブロックアドレスとを組み合わせて物理アドレスを生成する。つまり、テーブル制御部１４は、論理アドレスの上位ビットを物理ブロックアドレスに変換し、物理ブロックアドレスと、論理アドレスの下位ビットとを組み合わせて物理アドレスを生成する。そして、テーブル制御部１４は、生成した物理アドレスをリクエスト調停部１３に出力する。
【００６９】
また、テーブル制御部１４は、リクエスト調停部１３から書込み要求に格納された論理アドレスを受信すると、論理ブロックアドレスと対応付けられた物理ブロックアドレスをアドレス変換テーブル１９から検索する。そして、テーブル制御部１４は、論理ブロックアドレスと対応付けられた物理ブロックアドレスがアドレス変換テーブル１９に格納されていない場合、すなわち、書込み対象のデータが新たなデータである場合は、以下の処理を実行する。
【００７０】
まず、テーブル制御部１４は、管理情報テーブル２０を参照し、データが格納されていない物理ブロックアドレス、すなわち、予備ブロックの物理ブロックアドレスを識別する。例えば、テーブル制御部１４は、管理情報テーブル２０を参照し、バリッドビット「０」と対応付けられた物理ブロックアドレスを検索し、検出した物理ブロックアドレスを予備ブロックの物理ブロックアドレスとする。そして、テーブル制御部１４は、識別した物理ブロックアドレスと、受信した論理アドレスの論理ページ番号とを組み合わせた物理アドレスをリクエスト調停部１３に出力する。
【００７１】
一方、テーブル制御部１４は、受信した論理ブロックアドレスと対応付けられた物理ブロックアドレスがアドレス変換テーブル１９に格納されている場合、すなわち、書込みがデータの更新を目的とする場合は、以下の処理を実行する。まず、テーブル制御部１４は、受信した論理ブロックアドレスと対応付けられた物理ブロックアドレスを取得し、取得した物理ブロックアドレスに論理ページ番号を組み合わせた物理アドレスを更新元物理アドレスとしてリクエスト調停部１３に出力する。また、テーブル制御部１４は、予備ブロックの物理ブロックアドレスと、受信した論理アドレスの論理ページ番号とを組み合わせた物理アドレスを更新先物理アドレスとしてリクエスト調停部１３に出力する。
【００７２】
また、テーブル制御部１４は、リクエスト調停部１３が移動要求を受信した際には、リクエスト調停部１３から予備ブロックの物理ブロックアドレスの問い合わせを受ける。かかる場合は、テーブル制御部１４は、管理情報テーブル２０を参照し、バリッドビット「０」と対応付けられた物理ブロックアドレスを識別する。そして、テーブル制御部１４は、識別した物理ブロックアドレスを移動先物理ブロックアドレスとしてリクエスト調停部１３に出力する。
【００７３】
また、テーブル制御部１４は、データの書込みや移動に応じて、アドレス変換テーブル１９、および、管理情報テーブル２０の更新を行う。例えば、テーブル制御部１４は、リクエスト調停部１３が新たなデータの書込みを行う場合は、データの書込み先となるページの物理アドレスと、書込み要求に含まれる論理アドレスとを含むテーブル更新要求を受信する。
【００７４】
かかる場合は、テーブル制御部１４は、書込み要求に含まれる論理アドレスから論理ブロックアドレスを抽出し、書込み要求に含まれる物理アドレスから物理ブロックアドレスを抽出する。そして、テーブル制御部１４は、抽出した論理ブロックアドレスと抽出した物理ブロックアドレスとを対応付けてアドレス変換テーブル１９に格納する。
【００７５】
また、テーブル制御部１４は、管理情報テーブル２０のエントリのうち、抽出した物理ブロックアドレスが格納されたエントリを抽出し、抽出したエントリに格納されたバリッドビットを「１」に更新する。また、テーブル制御部１４は、巡回回数カウンタ１６の値を取得し、取得した値をタイムスタンプとして、抽出したエントリに格納する。
【００７６】
例えば、テーブル制御部１４は、巡回回数カウンタ１６のカウント値が「７」である際に、物理ブロックアドレス「Ｐ１」を含む物理アドレスが格納されたテーブル更新要求を受信する。かかる例では、テーブル制御部１４は、物理ブロックアドレス「Ｐ１」が格納されたエントリを管理情報テーブル２０から抽出する。
【００７７】
そして、テーブル制御部１４は、抽出したエントリの、バリッドビットを「１」に更新し、タイムスタンプ「７」を格納する。この結果、管理情報テーブル２０は、物理ブロックアドレス「Ｐ１」と、バリッドビット「１」と、タイムスタンプ「７」とを対応付けて記憶する。
【００７８】
また、テーブル制御部１４は、リクエスト調停部１３がデータの更新を行う場合は、更新元物理アドレスと、更新先物理アドレスと、書込み要求に含まれる論理アドレスとを含むテーブル更新要求を受信する。かかる場合は、テーブル制御部１４は、更新元物理アドレスに含まれる物理ブロックアドレスを更新元物理ブロックアドレスとして抽出し、更新先物理アドレスに含まれる物理ブロックアドレスを更新先物理ブロックアドレスとして抽出する。また、テーブル制御部１４は、テーブル更新要求に含まれる論理アドレスから論理ブロックアドレスを抽出する。
【００７９】
また、テーブル制御部１４は、論理ブロックアドレスが格納されたエントリをアドレス変換テーブル１９から抽出する。そして、テーブル制御部１４は、抽出したエントリに格納された物理ブロックアドレスを、更新先物理ブロックアドレスに更新する。
【００８０】
また、テーブル制御部１４は、管理情報テーブル２０から、更新元物理ブロックアドレスが格納されたエントリを抽出し、抽出したエントリに格納されたバリッドビットを「０」に更新し、タイムスタンプの値を削除する。また、テーブル制御部１４は、管理情報テーブル２０から、更新先物理ブロックアドレスが格納されたエントリを抽出し、抽出したエントリに格納されたバリッドビットを「１」に更新する。そして、テーブル制御部１４は、巡回回数カウンタ１６の値を取得し、取得した値をタイムスタンプとして、抽出したエントリに格納する。
【００８１】
また、テーブル制御部１４は、リクエスト調停部１３がデータの移動を行う場合は、移動元物理ブロックアドレスと、移動先物理ブロックアドレスとを含むテーブル更新要求を受信する。かかる場合は、テーブル制御部１４は、移動元物理ブロックアドレスが格納されたエントリをアドレス変換テーブル１９から抽出する。そして、テーブル制御部１４は、抽出したエントリに格納された移動元物理ブロックアドレスを、移動先物理ブロックアドレスに更新する。
【００８２】
また、テーブル制御部１４は、管理情報テーブル２０から、移動元物理ブロックアドレスが格納されたエントリを抽出し、抽出したエントリに格納されたバリッドビットを「０」に更新し、タイムスタンプの値を削除する。そして、テーブル制御部１４は、管理情報テーブル２０から、移動先物理ブロックアドレスが格納されたエントリを抽出し、抽出したエントリに格納されたバリッドビットを「１」に更新する。また、テーブル制御部１４は、巡回回数カウンタ１６の値を取得し、取得した値をタイムスタンプとして、抽出したエントリに格納する。
【００８３】
例えば、テーブル制御部１４は、巡回回数カウンタ１６のカウント値が「７」である際に、移動元物理ブロックアドレス「Ｐ０」、移動先物理ブロックアドレス「Ｐ４」が格納されたテーブル更新要求を受信する。かかる例では、テーブル制御部１４は、論理アドレスブロック「Ｐ０」が格納されたエントリをアドレス変換テーブル１９から抽出し、抽出したエントリの物理ブロックアドレス「Ｐ０」を移動先物理ブロックアドレス「Ｐ４」に更新する。
【００８４】
また、テーブル制御部１４は、移動元物理ブロックアドレス「Ｐ０」が格納されたエントリを管理情報テーブル２０から抽出する。そして、テーブル制御部１４は、抽出したエントリのバリッドビット「１」を「０」に更新し、タイムスタンプの値を削除する。また、テーブル制御部１４は、移動先物理ブロックアドレス「Ｐ４」が格納されたエントリを管理情報テーブル２０から抽出し、抽出したエントリのバリッドビットを「１」に更新する。そして、テーブル制御部１４は、抽出したエントリに、巡回回数カウンタ１６の値「７」をタイムスタンプとして格納する。
【００８５】
また、テーブル制御部１４は、テーブル参照要求を受信した場合は、テーブル記憶部１１から管理情報テーブル２０を取得する。そして、テーブル制御部１４は、取得した管理情報テーブル２０をリクエスト調停部１３に出力する。
【００８６】
デバイスアクセス制御部１５は、リクエスト調停部１３からの各種リクエストに従って、ＮＡＮＤデバイス７ａ〜１０ａに対するデバイスアクセスを実行する。例えば、デバイスアクセス制御部１５は、リクエスト調停部１３から、物理アドレスを含む読出し要求を受信する。かかる場合は、デバイスアクセス制御部１５は、ＮＡＮＤデバイス７ａ〜１０ａが有するページのうち、読出し要求に格納されていた物理アドレスが示すページに格納されたデータの読み出しを実行する。そして、デバイスアクセス制御部１５は、読み出したデータをリクエスト調停部１３に出力する。
【００８７】
また、例えば、デバイスアクセス制御部１５は、リクエスト調停部１３から、物理アドレスと、書込み対象のデータとを含む書込み要求を受信する。係る場合は、デバイスアクセス制御部１５は、書込み要求に含まれる物理アドレスが示すページに書込み対象のデータを格納する。その後、デバイスアクセス制御部１５は、データの書込みを終了した旨の応答をリクエスト調停部１３に出力する。
【００８８】
また、例えば、デバイスアクセス制御部１５は、更新元物理アドレスと、更新先物理アドレスと、書込むデータとを含む更新要求をリクエスト調停部１３から受信する。かかる場合は、デバイスアクセス制御部１５は、更新元物理アドレスが示すページを含むブロックのデータを読み出す。続いて、デバイスアクセス制御部１５は、読み出したデータのうち、更新元物理アドレスが示すページに格納されたデータを更新要求に含まれるデータに更新する。
【００８９】
そして、デバイスアクセス制御部１５は、更新したデータを含む各データを、更新先物理アドレスが示すページを含むブロックに格納する。なお、デバイスアクセス制御部１５は、データ更新元に各データが格納されたページのページ番号と、データ更新先に各データが格納されるページのページ番号とが同一となるように、データを格納する。その後、デバイスアクセス制御部１５は、データの書込みを終了した旨の応答をリクエスト調停部１３に出力する。
【００９０】
また、デバイスアクセス制御部１５は、移動元物理ブロックアドレスと、移動先物理ブロックアドレスとを含む移動要求をリクエスト調停部１３から受信する。かかる場合は、デバイスアクセス制御部１５は、移動元物理ブロックアドレスが示すブロックからデータの読み出しを行う。そして、デバイスアクセス制御部１５は、移動先物理ブロックアドレスが示すブロックに、読み出したデータを格納する。なお、デバイスアクセス制御部１５は、移動元と移動先とで、各データが格納されたページのページ番号が同一となるように、データを格納する。その後、デバイスアクセス制御部１５は、データの移動を終了した旨の応答をリクエスト調停部１３に出力する。
【００９１】
巡回回数カウンタ１６は、ＮＡＮＤデバイス７ａ〜１０ａの全ブロックについて、データが書込まれてから所定の期間が経過したか否かを判定する巡回参照処理をＮＡＮＤコントローラ６ａが実行した回数をカウントする。つまり、巡回回数カウンタ１６は、時間等の独立したタイミングでカウントを行うカウンタではなく、ＮＡＮＤコントローラ６ａが実行する巡回参照処理が終了した際にカウント値を更新するカウンタである。また、巡回回数カウンタ１６は、所定の桁数、例えば１桁のみのカウンタであり、桁あふれが発生した場合には、カウント値が初期値「０」に戻るカウンタである。なお、巡回回数カウンタ１６は、特許請求の範囲に記載の計数部の一例である。
【００９２】
巡回参照制御部１７は、所定のタイミングで、巡回参照制御を実行する。例えば、巡回参照制御部１７は、所定の時間間隔、所定の時刻、情報処理装置１が実行するアプリケーションプログラムの指示等を契機として、巡回参照制御を実行する。
【００９３】
以下、巡回参照制御部１７が実行する巡回参照制御の処理内容について説明する。例えば、巡回参照制御部１７は、管理情報テーブル２０の参照要求をリクエスト調停部１３に出力する。また、巡回参照制御部１７は、巡回回数カウンタ１６のカウント値を取得する。また、巡回参照制御部１７は、リクエスト調停部１３から管理情報テーブル２０を受信すると、管理情報テーブル２０から先頭のエントリを抽出し、以下の判定処理を実行する。
【００９４】
まず、巡回参照制御部１７は、抽出したエントリのバリッドビットが「１」であるか否かを判定する。また、巡回参照制御部１７は、抽出したエントリのバリッドビットが「１」ではない場合は、管理情報テーブル２０から、次のエントリを抽出する。一方、巡回参照制御部１７は、抽出したエントリのバリッドビットが「１」である場合は、抽出したエントリに格納されたタイムスタンプの値と、巡回回数カウンタ１６のカウント値とを比較する。
【００９５】
そして、巡回参照制御部１７は、比較結果に応じて、データの移動を行うか否かを判定する。例えば、巡回参照制御部１７は、データが書き込まれてから所定の期間が経過するまでの間、データが更新されていない場合は、データの移動を行うと判定する。その後、巡回参照制御部１７は、データの移動を行うと判定した場合は、抽出したエントリの物理ブロックアドレスをデータ移動制御部１８に出力する。そして、巡回参照制御部１７は、データの移動が終了した旨の応答をデータ移動制御部１８から受信した場合は、管理情報テーブル２０から次のエントリを抽出し、抽出したエントリに対して、判定処理を実行する。
【００９６】
例えば、巡回参照制御部１７は、巡回回数カウンタ１６の値に１を加算した値と抽出したエントリに格納されたタイムスタンプの値とが一致した場合は、抽出したエントリに格納された物理ブロックアドレスをデータ移動制御部１８に出力する。すなわち、巡回参照制御部１７は、抽出したエントリに格納された物理ブロックアドレスが示すブロックにデータを書込んでから、巡回回数カウンタ１６が一巡するまでの間、移動や更新が行われなかった場合は、データの移動をデータ移動制御部１８に依頼する。
【００９７】
また、巡回参照制御部１７は、移動すると判定した全てのデータについて、データ移動制御部１８から移動が終了した旨の応答を受信した場合は、巡回回数カウンタ１６の値を１つインクリメントする。つまり、巡回回数カウンタ１６の値は、管理情報テーブル２０の全てのエントリについて、判定処理を実行した場合には、巡回回数カウンタ１６の値を１インクリメントする。このため、ＮＡＮＤコントローラ６ａは、移動対象のデータを確実に移動させるので、巡回回数カウンタ１６のカウント値が管理情報テーブル２０に格納されるタイムスタンプの値を追い越すことが無い。この結果、情報処理装置１は、巡回回数カウンタ１６の桁数を削減することができる。
【００９８】
詳細な例を挙げると、巡回参照制御部１７は、図８に示す管理情報テーブル２０から、物理ブロックアドレス「Ｐ０」が格納されたエントリを抽出し、抽出したエントリのタイムスタンプの値と、巡回回数カウンタ１６のカウント値、例えば「１」、とを比較する。この結果、巡回参照制御部１７は、巡回回数カウンタ１６のカウント値「１」に１を加算した値「２」と、物理ブロックアドレス「Ｐ０」が格納されたエントリのタイムスタンプ「２」とが一致するので、物理ブロック「Ｐ０」をデータ移動制御部１８に出力する。
【００９９】
その後、巡回参照制御部１７は、データ移動制御部１８から応答を受信すると、管理情報テーブル２０から物理ブロックアドレス「Ｐ１」が格納されたエントリを抽出し、抽出したエントリについて、判定処理を実行する。また、巡回参照制御部１７は、管理情報テーブル２０の最後のエントリについて判定処理を行い、データの移動を行わないと判定した場合や、データの移動が完了した旨の応答を受信した場合は、巡回回数カウンタ１６のカウント値「１」を「２」に更新する。
【０１００】
なお、巡回参照制御部１７は、設定に応じて、書込まれてから任意の期間が経過したデータが格納されているブロックの物理ブロックアドレスをデータ移動制御部１８に出力することができる。例えば、巡回参照制御部１７は、任意の閾値「Ｎ」を巡回回数カウンタ１６のカウント値に加算した値よりも、管理情報テーブル２０に格納されたタイムスタンプの値が小さい場合は、データを移動すると判定してよい。なお、巡回参照制御部１７は、特許請求の範囲に記載の判定部の一例である。
【０１０１】
データ移動制御部１８は、書込まれてから所定の期間が経過したデータを他のブロックに移動させる。すなわち、データ移動制御部１８は、書込まれてから所定の期間が経過したデータの移動を行う。例えば、データ移動制御部１８は、巡回参照制御部１７から物理ブロックアドレスを受信した場合は、受信した物理ブロックアドレスを含む移動要求をリクエスト調停部１３に出力する。
【０１０２】
また、データ移動制御部１８は、データの移動が終了した場合は、リクエスト調停部１３から、データの移動が終了した旨の応答を受信する。かかる場合は、データ移動制御部１８は、巡回参照制御部１７に対し、データの移動が終了した旨の応答を出力する。
【０１０３】
なお、例えば、リクエスタインターフェース部１２、リクエスト調停部１３、テーブル制御部１４、デバイスアクセス制御部１５、巡回回数カウンタ１６、巡回参照制御部１７、データ移動制御部１８とは、電子回路である。ここで、電子回路の例として、ＡＳＩＣ（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）などを介して他のコンピュータまたはサーバ装置などに記憶させた各プログラムを取得して実行するようにしてもよい。
【符号の説明】
【０１８８】
１  情報処理装置
２ａ、２ｂ  メモリ
３ａ、３ｂ、４０  ＣＰＵ
４  Ｉ／Ｏハブ
５ａ、５ｂ  ＳＳＤ
６ａ〜６ｅ  ＮＡＮＤコントローラ
７ａ〜１０ａ、７ｂ〜１０ｂ  ＮＡＮＤデバイス
１１  テーブル記憶部
１２  リクエスタインターフェース部
１３、３２  リクエスト調停部
１４、３１  テーブル制御部
１５  デバイスアクセス制御部
１６  巡回回数カウンタ
１７、３３  巡回参照制御部
１８、３４  データ移動制御部
１９  アドレス変換テーブル
２０  管理情報テーブル
２１  巡回済対象記憶部
２２  リクエスト数計測部
３０  制御プログラム
【図１】
2014220021.tif 000003
【図２】
2014220021.tif 000004
【図３】
2014220021.tif 000005
【図４】
2014220021.tif 000006
【図５】
2014220021.tif 000007
【図６】
2014220021.tif 000008
【図７】
2014220021.tif 000009
【図８】
2014220021.tif 000010
【図９】
2014220021.tif 000011
【図１０】
2014220021.tif 000012
【図１１】
2014220021.tif 000013
【図１２】
2014220021.tif 000014
【図１３】
2014220021.tif 000015
【図１４】
2014220021.tif 000016
【図１５】
2014220021.tif 000017
【図１６】
2014220021.tif 000018
【図１７】
2014220021.tif 000019
【図１８】
2014220021.tif 000020
【図１９】
2014220021.tif 000021