(57)【要約】【課題】ＮＡＮＤデバイスに対するアクセス性能を改善する情報処理装置、制御回路、制御プログラム、および制御方法を提供する。【解決手段】ＮＡＮＤコントローラ６ａは、ＮＡＮＤデバイス７ａ〜１０ａに含まれる物理ブロックのうち、書込まれたデータが無効とされた物理ページを含む移動候補ブロックの数を計数する。また、ＮＡＮＤコントローラ６ａは、物理ブロックのうち、各物理ページにデータが書込まれていない予備ブロックの数を計数する。そして、ＮＡＮＤコントローラ６ａは、移動候補ブロックの数と予備ブロックの数との比較結果に応じて、移動候補ブロックから予備ブロックへデータを移動させる移動処理を開始するか否かを判定する。その後、ＮＡＮＤコントローラ６ａは、移動処理を開始すると判定した場合は、移動候補ブロックの各物理ページに書込まれたデータのうち、有効なデータのみを予備ブロックに移動させる。【選択図】図６
2015001909.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）などを介して他のコンピュータまたはサーバ装置などに記憶させた各プログラムを取得して実行するようにしてもよい。
【符号の説明】
【０２０８】
１  情報処理装置
２ａ、２ｂ  メモリ
３ａ、３ｂ、４０  ＣＰＵ
４  Ｉ／Ｏハブ
５ａ、５ｂ  ＳＳＤ
６ａ〜６ｄ  ＮＡＮＤコントローラ
７ａ〜１０ａ、７ｂ〜１０ｂ  ＮＡＮＤデバイス
１１  テーブル記憶部
１２、１２ａ  リクエスタインターフェース部
１３、３２  リクエスト調停部
１４、３１  テーブル制御部
１５  デバイスアクセス制御部
１６、１６ｄ、３５  移動領域計測部
１６ａ  予備カウンタ
１６ｂ  候補カウンタ
１６ｃ、１６ｅ  判定部
１７、３３  巡回参照制御部
１８、３４  データ移動制御部
１９  アドレス変換テーブル
２０  管理情報テーブル
３０  制御プログラム
【図１】
2015001909.tif 000003
【図２】
2015001909.tif 000004
【図３】
2015001909.tif 000005
【図４】
2015001909.tif 000006
【図５】
2015001909.tif 000007
【図６】
2015001909.tif 000008
【図７】
2015001909.tif 000009
【図８】
2015001909.tif 000010
【図９】
2015001909.tif 000011
【図１０】
2015001909.tif 000012
【図１１】
2015001909.tif 000013
【図１２】
2015001909.tif 000014
【図１３】
2015001909.tif 000015
【図１４】
2015001909.tif 000016
【図１５】
2015001909.tif 000017
【図１６】
2015001909.tif 000018