(57)【要約】【課題】不揮発メモリの領域毎の書き換え回数を小さい記憶容量で精度良く管理する。【解決手段】管理装置は、カウンタ記憶部と、第１管理情報記憶部と、更新部とを有する。第１管理情報記憶部は、所定個の第１領域のそれぞれについての第１管理情報を格納可能な第１管理テーブルを記憶する。第１管理情報は、対応する第１領域に含まれる複数の第２領域のそれぞれが書き込み済みか未書き込みかを示す。不揮発メモリに対する第１データの書き込みに応じて、更新部は、第１データが書き込まれる第１領域である対象第１領域についての第１管理情報に示された、第１データが書き込まれる第２領域である対象第２領域の状態が、未書き込みの場合、書き込み済みに変更する。更新部は、第１管理情報に示された対象第２領域の状態が書き込み済みの場合、対象第１領域についてのカウンタ値を更新する。【選択図】図５
2018147191.tif 000002
【特許請求の範囲】
【請求項１】
不揮発メモリを管理する管理装置であって、
前記不揮発メモリは、複数の第１領域を含み、
前記複数の第１領域のそれぞれは、複数の第２領域を含み、
前記管理装置は、
前記複数の第１領域のそれぞれについて、カウンタ値を記憶するカウンタ記憶部と、
所定個の第１領域のそれぞれについての第１管理情報を格納可能な第１管理テーブルを記憶する第１管理情報記憶部と、
前記カウンタ値および前記第１管理テーブルを更新する更新部と、
を有し、
前記第１管理情報は、対応する第１領域に含まれる複数の第２領域のそれぞれが書き込み済みか未書き込みかを示し、
前記不揮発メモリに対する第１データの書き込みに応じて、前記更新部は、
前記第１データが書き込まれる第１領域である対象第１領域についての前記第１管理情報に示された、前記第１データが書き込まれる第２領域である対象第２領域の状態が、未書き込みの場合、書き込み済みに変更し、
前記第１管理情報に示された前記対象第２領域の状態が書き込み済みの場合、前記対象第１領域についての前記カウンタ値を更新する
管理装置。
【請求項２】
前記第１管理テーブルは、前記不揮発メモリに含まれる前記複数の第１領域の数より少ない数の第１領域についての前記第１管理情報を格納可能である
請求項１に記載の管理装置。
【請求項３】
前記更新部は、前記第１管理テーブルに前記対象第１領域についての前記第１管理情報が存在しない場合、管理情報生成処理を実行し、
前記管理情報生成処理において、前記更新部は、
前記第１管理テーブルに未使用エントリが有る場合、未使用エントリに前記対象第１領域についての前記第１管理情報を書き込み、
前記第１管理テーブルに未使用エントリが無い場合、何れかの使用中エントリに書き込まれている前記第１管理情報を消去して、前記対象第１領域についての前記第１管理情報を書き込み、
消去した前記第１管理情報により管理されていた第１領域についての前記カウンタ値を更新する
請求項１または２に記載の管理装置。
【請求項４】
前記更新部は、前記第１管理テーブルに未使用エントリが無い場合、最も古い前記第１管理情報を消去する
請求項３に記載の管理装置。
【請求項５】
前記複数の第１領域のそれぞれは、処理回路によるデータの管理単位であり、
前記複数の第２領域のそれぞれは、前記処理回路による前記不揮発メモリに対するデータの書き換え単位である
請求項１から４の何れか１項に記載の管理装置。
【請求項６】
前記処理回路は、前記不揮発メモリから読み出したデータを一時的に記憶するキャッシュメモリを有し、
前記複数の第２領域のそれぞれは、前記キャッシュメモリのキャッシュラインの大きさである
請求項５に記載の管理装置。
【請求項７】
前記不揮発メモリは、第１領域の単位でのデータの一括書き込みまたは第２領域の単位でのデータの書き込みがされ、
前記更新部は、第１領域の単位でのデータの一括書き込みが実行された場合、データが書き込まれた第１領域についての前記カウンタ値を更新する
請求項１から６の何れか１項に記載の管理装置。
【請求項８】
前記第１管理テーブルは、論理アドレスと物理アドレスとの対応を示す対応関係情報を記憶する仮想記憶機構により管理されている第１領域についての前記第１管理情報を格納し、
前記更新部は、前記仮想記憶機構により前記対応関係情報が追い出された場合に、前記第１管理テーブルに記憶されている対応する前記第１管理情報を消去し、消去した前記第１管理情報により管理されていた第１領域についての前記カウンタ値を更新する
請求項１から７の何れか１項に記載の管理装置。
【請求項９】
前記複数の第２領域のそれぞれは、複数の第３領域を含み、
前記管理装置は、
所定個の第２領域のそれぞれについての第２管理情報を格納可能な第２管理テーブルを記憶する第２管理情報記憶部をさらに備え、
前記第２管理情報は、対応する第２領域に含まれる複数の第３領域のそれぞれが書き込み済みか未書き込みかを示し、
前記不揮発メモリに対する前記第１データの書き込みに応じて、前記更新部は、
前記対象第２領域についての前記第２管理情報に示された、前記第１データが書き込まれる第３領域である対象第３領域の状態が、未書き込みの場合、書き込み済みに変更し、
前記第２管理情報に示された前記対象第３領域の状態が書き込み済みの場合、前記対象第２領域を含む第１領域についての前記第１管理情報に示された、前記対象第２領域の状態を更新する状態更新処理を実行する
請求項１から８の何れか１項に記載の管理装置。
【請求項１０】
前記更新部は、前記第２管理テーブルに前記対象第２領域についての前記第２管理情報が存在しない場合、第２管理情報生成処理を実行し、
前記第２管理情報生成処理において、前記更新部は、
前記第２管理テーブルに未使用エントリが有る場合、未使用エントリに前記対象第２領域についての前記第２管理情報を書き込み、
前記第２管理テーブルに未使用エントリが無い場合、何れかの使用中エントリに書き込まれている前記第２管理情報を消去して、前記対象第２領域についての前記第２管理情報を書き込み、
消去対象の前記第２管理情報により管理されていた第２領域である消去第２領域を含む第１領域についての前記第１管理情報に示された、前記消去第２領域の状態を更新する状態更新処理を実行する
請求項９に記載の管理装置。
【請求項１１】
前記状態更新処理において、前記更新部は、
前記対象第２領域または前記消去第２領域を含む更新対象第１領域についての前記第１管理情報に示された、前記対象第２領域または前記消去第２領域の状態が未書き込みの場合、書き込み済みに変更し、
前記更新対象第１領域についての前記第１管理情報に示された前記対象第２領域または前記消去第２領域の状態が書き込み済みの場合、前記更新対象第１領域についての前記カウンタ値を更新する
請求項１０に記載の管理装置。
【請求項１２】
前記更新部は、前記第１管理テーブルに、前記更新対象第１領域についての前記第１管理情報が存在しない場合、第１管理情報生成処理を実行し、
前記第１管理情報生成処理において、前記更新部は、
前記第２管理テーブルに未使用エントリが有る場合、未使用エントリに、前記更新対象第１領域についての前記第１管理情報を書き込み、
前記第２管理テーブルに未使用エントリが無い場合、何れかの使用中エントリに書き込まれている前記第２管理情報を消去して、前記更新対象第１領域についての前記第１管理情報を書き込み、
消去対象の前記第１管理情報により管理されていた第１領域についての前記カウンタ値を更新する
請求項１１に記載の管理装置。
【請求項１３】
処理回路と、不揮発メモリと、前記不揮発メモリを管理する管理装置とを備える情報処理装置であって、
前記不揮発メモリは、複数の第１領域を含み、
前記複数の第１領域のそれぞれは、複数の第２領域を含み、
前記管理装置は、
前記複数の第１領域のそれぞれについて、カウンタ値を記憶するカウンタ記憶部と、
所定個の第１領域のそれぞれについての第１管理情報を格納可能な第１管理テーブルを記憶する第１管理情報記憶部と、
前記カウンタ値および前記第１管理テーブルを更新する更新部と、
を有し、
前記第１管理情報は、対応する第１領域に含まれる複数の第２領域のそれぞれが書き込み済みか未書き込みかを示し、
前記不揮発メモリに対する第１データの書き込みに応じて、前記更新部は、
前記第１データが書き込まれる第１領域である対象第１領域についての前記第１管理情報に示された、前記第１データが書き込まれる第２領域である対象第２領域の状態が、未書き込みの場合、書き込み済みに変更し、
前記第１管理情報に示された前記対象第２領域の状態が書き込み済みの場合、前記対象第１領域についての前記カウンタ値を更新する
情報処理装置。
【請求項１４】
不揮発メモリを管理する管理装置において実行される管理方法であって、
前記不揮発メモリは、複数の第１領域を含み、
前記複数の第１領域のそれぞれは、複数の第２領域を含み、
前記管理装置は、
前記複数の第１領域のそれぞれについて、カウンタ値を記憶するカウンタ記憶部と、
所定個の第１領域のそれぞれについての第１管理情報を格納可能な第１管理テーブルを記憶する第１管理情報記憶部と、
を有し、
前記第１管理情報は、対応する第１領域に含まれる複数の第２領域のそれぞれが書き込み済みか未書き込みかを示し、
前記不揮発メモリに対する第１データの書き込みに応じて、前記管理装置が、
前記第１データが書き込まれる第１領域である対象第１領域についての前記第１管理情報に示された、前記第１データが書き込まれる第２領域である対象第２領域の状態が、未書き込みの場合、書き込み済みに変更し、
前記第１管理情報に示された前記対象第２領域の状態が書き込み済みの場合、前記対象第１領域についての前記カウンタ値を更新する
管理方法。
【発明の詳細な説明】
【技術分野】
【０００１】
本発明の実施形態は、管理装置、情報処理装置および管理方法に関する。
【背景技術】
【０００２】
ＮＡＮＤフラッシュ等の不揮発メモリは、書き換え可能回数が少ない。このため、不揮発メモリを管理する情報処理装置は、ウェアレベリング制御を実行している。具体的には、情報処理装置は、不揮発メモリの消去単位毎に書き換え回数（消去回数と同一）をカウントしてテーブルに格納する。そして、情報処理装置は、テーブルに格納した値を参照して、不揮発メモリの記憶領域の全体に平均的にデータが書き込まれるように、書き込み位置を制御する。情報処理装置は、このようなウェアレベリング制御を実行することにより、不揮発メモリの寿命を延ばすことができる。
【０００３】
ところで、近年、ストレージクラスメモリとも呼ばれる高速不揮発メモリが開発されている。ストレージクラスメモリは、バイト単位またはキャッシュライン単位でデータが書き込まれる。このため、情報処理装置は、ウェアレベリング制御を精度良く実行するために、バイト単位またはキャッシュメモリ単位で書き換え回数を管理しなければならなかった。しかし、このように書き換え回数を管理した場合、テーブルのサイズが非常に大きくなってしまい、情報処理装置は、非常に大きなメモリを備えなければならなかった。
【０００４】
一方、例えば、ページ単位でのみ書き換え回数をカウントし、バイト単位またはキャッシュメモリ単位での書き換え回数をカウントしない方法も考えられる。しかし、このような方法で書き換え回数を管理した場合、情報処理装置は、ページ内の異なるバイトまたはキャッシュラインに対するデータの書き込みか、同一のバイトまたはキャッシュラインに対するデータの書き込みかを区別できず、ウェアレベリング制御を精度良く実現することができなかった。
【先行技術文献】
【特許文献】
【０００５】
【特許文献１】特開２００８−１６２５５号公報
【発明の概要】
【発明が解決しようとする課題】
【０００６】
本発明が解決しようとする課題は、不揮発メモリの領域毎の書き換え回数を、小さい記憶容量で精度良く管理することにある。
【課題を解決するための手段】
【０００７】
実施形態の管理装置は、不揮発メモリを管理する。前記不揮発メモリは、複数の第１領域を含む。前記複数の第１領域のそれぞれは、複数の第２領域を含む。前記管理装置は、カウンタ記憶部と、第１管理情報記憶部と、更新部とを有する。前記カウンタ記憶部は、前記複数の第１領域のそれぞれについて、カウンタ値を記憶する。前記第１管理情報記憶部は、所定個の第１領域のそれぞれについての第１管理情報を格納可能な第１管理テーブルを記憶する。前記更新部は、前記カウンタ値および前記第１管理テーブルを更新する。前記第１管理情報は、対応する第１領域に含まれる複数の第２領域のそれぞれが書き込み済みか未書き込みかを示す。前記不揮発メモリに対する第１データの書き込みに応じて、前記更新部は、前記第１データが書き込まれる第１領域である対象第１領域についての前記第１管理情報に示された、前記第１データが書き込まれる第２領域である対象第２領域の状態が、未書き込みの場合、書き込み済みに変更する。前記更新部は、前記第１管理情報に示された前記対象第２領域の状態が書き込み済みの場合、前記対象第１領域についての前記カウンタ値を更新する。
【図面の簡単な説明】
【０００８】
【図１】情報処理装置のハードウェア構成の一例を示す図。
【図２】メモリコントローラが有するアクセス制御装置の構成を示す図。
【図３】第１実施形態に係る不揮発メモリの構成を示す図。
【図４】第１実施形態に係るアドレス情報の一例を示す図。
【図５】第１実施形態に係る管理装置の構成を示す図。
【図６】第１実施形態に係るカウンタテーブルの一例を示す図。
【図７】第１実施形態に係る管理テーブルの一例を示す図。
【図８】第１実施形態に係る更新部による処理の流れを示すフローチャート。
【図９】第１実施形態に係る管理情報生成処理の流れを示すフローチャート。
【図１０】第２実施形態に係る不揮発メモリの構成を示す図。
【図１１】第２実施形態に係るアドレス情報の一例を示す図。
【図１２】第２実施形態に係る管理装置の機能構成を示す図。
【図１３】第２実施形態に係るカウンタテーブルの一例を示す図。
【図１４】第２実施形態に係る第１管理テーブルの一例を示す図。
【図１５】第２実施形態に係る第２管理テーブルの一例を示す図。
【図１６】第２実施形態に係る更新部による処理の流れを示すフローチャート。
【図１７】第２実施形態に係る第２管理情報生成処理の流れを示すフローチャート。
【図１８】第２実施形態に係る状態更新処理の流れを示すフローチャート。
【図１９】第２実施形態に係る第１管理情報生成処理の流れを示すフローチャート。
【図２０】一括書き込み可能な場合における、管理装置のフローチャート。
【図２１】識別情報の変形例を示す図。
【図２２】情報処理装置の構成の第１変形例を示す図。
【図２３】情報処理装置の構成の第２変形例を示す図。
【図２４】情報処理装置の構成の第３変形例を示す図。
【発明を実施するための形態】
【０００９】
以下、図面を参照しながら実施形態に係る情報処理装置１０について詳細に説明する。本実施形態に係る情報処理装置１０は、不揮発メモリ１４における領域毎の書き換え回数を小さい記憶容量で精度良く管理することを目的とする。
【００１０】
（第１実施形態）
図１は、情報処理装置１０のハードウェア構成の一例を示す図である。情報処理装置１０は、処理回路１２と、不揮発メモリ１４と、メモリコントローラ１６とを備える。
【００１１】
処理回路１２は、１または複数のプロセッサを有する。プロセッサは、例えば、ＣＰＵ（Ｃｅｎｔｒａｌ  Ｐｒｏｃｅｓｓｉｎｇ  Ｕｎｉｔ）である。プロセッサは、１または複数のＣＰＵコアを含んでいてもよい。処理回路１２は、プログラムを実行して、データを処理する。処理回路１２は、プログラムの実行に応じて、不揮発メモリ１４からデータを読み出したり、不揮発メモリ１４にデータを書き込んだりする。
【００１２】
また、処理回路１２は、キャッシュメモリを有する。処理回路１２は、不揮発メモリ１４に記憶されているデータを一時的に記憶する。
【００１３】
不揮発メモリ１４は、電源の供給を停止してもデータを記憶し続けるメモリである。不揮発メモリ１４は、例えば、処理回路１２のメインメモリとして機能する。不揮発メモリ１４は、バイト単位等の小領域の単位でデータが書き込み可能であり、バイト単位よりも大きな消去単位（例えば、６４Ｋバイトのブロック単位）でデータが一括して消去される。不揮発メモリ１４は、データを消去した後、同一の小領域にデータを１回書き込みすることが可能である。すなわち、不揮発メモリ１４は、同一の小領域にデータを追記する場合、その小領域を含む消去単位の全体を消去した後に、データを書き込む。
【００１４】
不揮発メモリ１４は、例えば、ＭＲＡＭ（Ｍａｇｎｅｔｏｒｅｓｉｓｔｉｖｅ  Ｒａｎｄｏｍ  Ａｃｃｅｓｓ  Ｍｅｍｏｒｙ）、ＰＣＭ（Ｐｈａｓｅ  Ｃｈａｎｇｅ  Ｍｅｍｏｒｙ）、ＰＲＡＭ（Ｐｈａｓｅ  Ｒａｎｄｏｍ  Ａｃｃｅｓｓ  Ｍｅｍｏｒｙ）、ＰＣＲＡＭ（Ｐｈａｓｅ  Ｃｈａｎｇｅ  Ｒａｎｄｏｍ  Ａｃｃｅｓｓ  Ｍｅｍｏｒｙ）、ＲｅＲＡＭ（Ｒｅｓｉｓｔａｎｃｅ  Ｒａｎｄｏｍ  Ａｃｃｅｓｓ  Ｍｅｍｏｒｙ）、ＦｅＲＡＭ（Ｆｅｒｒｏｅｌｅｃｔｒｉｃ    Ｒａｎｄｏｍ  Ａｃｃｅｓｓ  Ｍｅｍｏｒｙ）、３ＤＸＰｏｉｎｔまたはＭｅｍｒｉｓｔｏｒ等である。不揮発メモリ１４は、いわゆるストレージクラスメモリ（ＳＣＭ）と呼ばれるメモリであってもよい。また、不揮発メモリ１４は、複数の半導体装置を１つの基板または筐体等に設けたモジュールであってもよい。
【００１５】
メモリコントローラ１６は、アクセス制御装置１８と、管理装置２０とを有する。アクセス制御装置１８は、処理回路１２からの不揮発メモリ１４に対するアクセス要求を処理する。アクセス制御装置１８は、処理回路１２からの書込命令に応じて、データを不揮発メモリ１４に書き込む。また、アクセス制御装置１８は、処理回路１２からの読出命令に応じて、データを不揮発メモリ１４から読み出す。
【００１６】
管理装置２０は、不揮発メモリ１４に対するウェアレベリング制御を実行する。具体的には、管理装置２０は、不揮発メモリ１４に対するデータの書き込み時にデータが書き込まれるアドレス情報を受け取る。管理装置２０は、受け取ったアドレス情報に基づき、不揮発メモリ１４における第１領域毎のデータの書き換え回数を管理する。第１領域は、例えば、処理回路１２によるデータの管理単位（例えば、ページ）である。また、第１領域は、データの消去単位（ブロック）であってもよい。また、第１領域は、処理回路１２によるデータの管理単位の所定数倍の単位等であってもよい。
【００１７】
そして、管理装置２０は、不揮発メモリ１４における第１領域毎のデータの書き換え回数をアクセス制御装置１８に与える。アクセス制御装置１８は、取得した書き換え回数に基づき、不揮発メモリ１４における全体の領域に平均的にデータが書き込まれるように、データの書き込み位置を制御する。また、管理装置２０は、書き換え回数をメモリコントローラ１６の外部に設けられた装置または処理回路１２により実行されるオペレーティングシステム等に与えてもよい。この場合、書き換え回数を受け取った装置は、取得した書き換え回数に基づき、不揮発メモリ１４における全体の領域に平均的にデータが書き込まれるように、データの書き込み位置を制御する。
【００１８】
図２は、メモリコントローラ１６が有するアクセス制御装置１８の構成を、管理装置２０とともに示す図である。アクセス制御装置１８は、要求受付部２８と、要求キュー３０と、要求実行部３２とを含む。
【００１９】
要求受付部２８は、処理回路１２からの不揮発メモリ１４への書込命令および読出命令を受け取る。要求受付部２８は、受け取った書込命令および読出命令を、要求キュー３０に記憶させる。要求キュー３０は、例えば先入れ先出し型のメモリである。
【００２０】
要求実行部３２は、要求キュー３０に記憶されている書込命令および読出命令を取り出す。要求実行部３２は、書込命令を取り出した場合、不揮発メモリ１４における指定されたアドレスにデータを書き込む。要求実行部３２は、読出命令を取り出した場合、不揮発メモリ１４における指定されたアドレスからデータを読み出して、要求受付部２８に与える。要求受付部２８は、不揮発メモリ１４から読み出されたデータを受け取った場合、受け取ったデータを処理回路１２に返す。
【００２１】
管理装置２０は、処理回路１２から書込命令が与えられた場合、不揮発メモリ１４におけるデータが書き込まれる位置を示すアドレス情報を取得する。管理装置２０は、例えば、要求受付部２８からアドレス情報を受け取り、データが書き込まれる位置を検出する。また、管理装置２０は、例えばページ等にデータが一括して書き込まれる場合、先頭の書き込み位置を表すアドレス情報と、データサイズとを受け取って、データが書き込まれる位置を検出してもよい。また、管理装置２０は、要求キュー３０または要求実行部３２からアドレス情報等を取得してもよい。
【００２２】
図３は、第１実施形態に係る不揮発メモリ１４の構成を示す図である。不揮発メモリ１４は、複数の第１領域を含む。第１実施形態において、第１領域は、ページと呼ばれる単位である。ページは、処理回路１２によるデータの管理単位である。ページは、例えば、オペレーティングシステムが管理する仮想記憶装置のページに対応している。ページは、例えば、４Ｋバイトであってよい。不揮発メモリ１４は、複数のページを含むブロック単位でデータを消去する。
【００２３】
また、複数の第１領域のそれぞれは、複数の第２領域を含む。第１実施形態において、第２領域は、キャッシュラインと呼ばれる単位である。キャッシュラインは、処理回路１２内のキャッシュメモリに対するデータの書き換え単位に対応する。処理回路１２は、キャッシュラインの単位で、不揮発メモリ１４に対してデータを書き換える。
【００２４】
キャッシュラインは、例えば、６４バイトである。なお、第２領域は、キャッシュラインよりも小さい単位（例えば、バイト単位）であってもよい。
【００２５】
図４は、第１実施形態に係る不揮発メモリ１４に対するデータの書き込み先を指定するためのアドレス情報の一例を示す図である。管理装置２０は、アクセス制御装置１８から図４に示すような、３つのビットフィールドに分割されたアドレス情報を取得する。
【００２６】
アドレス情報の上位のビットフィールドは、データが書き込まれるページ（対象第１領域）の位置を示す。アドレス情報の中位のビットフィールドは、対象第１領域における、データが書き込まれるキャッシュライン（対象第２領域）の位置を示す。また、アドレス情報の下位のビットフィールドは、対象第２領域における、データが書き込まれるバイトの位置を示す。
【００２７】
従って、管理装置２０は、取得したアドレス情報における特定のビットフィールドの値を取得することにより、データが書き込まれるページ（対象第１領域）およびキャッシュライン（対象第２領域）を特定することができる。
【００２８】
図５は、第１実施形態に係る管理装置２０の構成を示す図である。管理装置２０は、カウンタ記憶部３６と、管理情報記憶部３８と、更新部４０とを含む。
【００２９】
カウンタ記憶部３６は、カウンタテーブルを記憶する。カウンタテーブルは、不揮発メモリ１４に含まれる複数の第１領域のそれぞれについての、データの書き換え回数を表すカウンタ値を格納する。カウンタテーブルについては、図６を参照してさらに説明する。
【００３０】
管理情報記憶部３８は、管理テーブルを記憶する。管理テーブルは、所定個のエントリを有する。それぞれのエントリには、管理情報を格納することができる。すなわち、管理テーブルは、所定個の第１領域のそれぞれについての管理情報を格納可能である。管理テーブルが格納できる管理情報の数は、不揮発メモリ１４に含まれる第１領域の数より少ない。管理テーブルは、処理回路１２が不揮発メモリ１４に最近アクセスした第１領域（アクティブな第１領域）についての管理情報を格納する。管理テーブルは、エントリが一杯となった場合、例えば最も古い管理情報（アクセスしてから最も時間が経過した管理情報）を消去して、新しい管理情報を格納する。
【００３１】
管理情報は、対応する第１領域に含まれる複数の第２領域のそれぞれが、書き込み済みか未書き込みかを示す。例えば、管理情報は、対応する第１領域に記憶されたデータが消去された直後には、対応する第１領域に含まれている複数の第２領域の全ての状態が、未書き込みに変更される。管理情報は、対応する第１領域に記憶されてデータが消去された後、何れかの第２領域にデータが書き込まれた場合、その第２領域の状態が書き込み済みとされ、他の書き込み領域の状態が未書き込みとされる。なお、管理テーブルおよび管理情報については、図７を参照してさらに説明する。
【００３２】
更新部４０は、カウンタテーブルに格納されたそれぞれのカウンタ値、および、管理テーブルに格納されたそれぞれの管理情報を更新する。更新部４０は、処理回路１２が不揮発メモリ１４にデータを書き込んだ場合、書き込んだデータのアドレス情報を取得し、取得したアドレス情報に基づきカウンタ値およびアドレス情報を更新する。更新部４０の具体的な処理手順については、図８および図９を参照してさらに説明する。
【００３３】
図６は、第１実施形態に係るカウンタテーブルの一例を示す図である。カウンタテーブルは、不揮発メモリ１４に含まれる複数の第１領域（ページ）を識別する識別情報（例えばページ番号）のそれぞれに対応させて、カウンタ値を格納する。
【００３４】
それぞれのカウンタ値は、対応する第１領域が書き換えられた回数（対応する第１領域が消去された回数と同一）の推定値を表す。それぞれのカウンタ値は、工場出荷時等の初期時には、例えば０とされている。それぞれのカウンタ値は、更新部４０により１ずつ増加（インクリメント）されていく。
【００３５】
アクセス制御装置１８またはオペレーティングシステム等は、カウンタテーブルに格納されたカウンタ値を参照して、全てのページのカウンタ値が平均的となるようにウェアレベリング制御を実行する。
【００３６】
図７は、第１実施形態に係る管理テーブルの一例を示す図である。管理テーブルは、管理情報を格納するための所定個のエントリを有する。例えば、図７の例において、管理テーブルは、６４個のエントリを有する。
【００３７】
それぞれのエントリは、管理情報を格納する。管理情報は、識別情報と、マップ情報とを含む。
【００３８】
識別情報は、その管理情報が管理する第１領域（ページ）を識別するための番号（ページ番号）である。更新部４０は、識別情報を参照することにより、そのエントリが何れの第１領域を管理している管理情報を格納しているかを判断することができる。
【００３９】
マップ情報は、対応する第１領域（ページ）に含まれる複数の第２領域（キャッシュライン）のそれぞれが、書き込み済みか未書き込みかを示す。マップ情報は、第１領域（ページ）に含まれる複数の第２領域（キャッシュライン）のそれぞれに対応したビットを含む。
【００４０】
例えば、マップ情報は、キャッシュライン番号に対応したビットを含む。例えば、１ページ内に６４個のキャッシュラインが含まれる場合、マップ情報は、６４個のビットを含む。それぞれのビットは、例えば１である場合、対応するキャッシュラインが、書き込み済みであることを示す。また、それぞれのビットは、例えば０である場合、対応するキャッシュラインが、未書き込みであることを示す。
【００４１】
なお、管理テーブルは、全てのエントリに管理情報が格納されていなくてよい。つまり、管理テーブルは、未使用エントリが有ってもよい。
【００４２】
図８は、第１実施形態に係る更新部４０による処理の流れを示すフローチャートである。更新部４０は、図８および図９に示すフローチャートに従って、カウンタテーブルおよび管理テーブルを更新する。
【００４３】
まず、Ｓ１１において、更新部４０は、不揮発メモリ１４にデータの書き込みがされるか否かを検出する。更新部４０は、書き込みがされない場合（Ｓ１１のＮｏ）、処理をＳ１１で待機し、書き込みがされる場合（Ｓ１１のＹｅｓ）、処理をＳ１２に進める。
【００４４】
Ｓ１２において、更新部４０は、書き込み対象のデータ（第１データ）が書き込まれる第１領域である対象第１領域についての管理情報が、管理テーブルに存在するか否かを判断する。例えば、更新部４０は、アドレス情報に含まれるページ番号と同一のページ番号を含む管理情報が、管理テーブルに格納されているか否かを判断する。
【００４５】
管理テーブルに対象第１領域についての管理情報が存在しない場合、例えば、アドレス情報に含まれるページ番号と同一のページ番号を含む管理情報が、管理テーブルに格納されていない場合（Ｓ１２のＮｏ）、更新部４０は、処理をＳ１３に進める。Ｓ１３において、更新部４０は、管理情報生成処理を実行する。管理情報生成処理については、図９を参照して説明する。更新部４０は、管理情報生成処理を終了した場合、本フローを終了し、次の書込を待機する。
【００４６】
管理テーブルに対象第１領域についての管理情報が存在する場合、例えば、アドレス情報に含まれるページ番号と同一のページ番号を含む管理情報が管理テーブルに格納されている場合（Ｓ１２のＹｅｓ）、更新部４０は、処理をＳ１４に進める。
【００４７】
Ｓ１４において、更新部４０は、対象第１領域についての管理情報に示された第１データが書き込まれる第２領域である対象第２領域の状態が、書き込み済みであるか否かを判断する。例えば、更新部４０は、アドレス情報に含まれるページ番号に対応する管理情報におけるマップ情報を参照して、アドレス情報に含まれるキャッシュライン番号に対応するビットが１であるか否かを判断する。
【００４８】
更新部４０は、対象第２領域の状態が未書き込みの場合、例えば、アドレス情報に含まれるキャッシュライン番号に対応するビットが０である場合（Ｓ１４のＮｏ）、処理をＳ１５に進める。Ｓ１５において、更新部４０は、対象第１領域についての管理情報に示された対象第２領域の状態を、未書き込みから、書き込み済みに変更する。例えば、更新部４０は、対応するビットを、０から１に変更する。これにより、更新部４０は、第１データが書き込まれた後の不揮発メモリ１４の状態を、管理テーブルに反映することができる。更新部４０は、Ｓ１５の処理を終了した場合、本フローを終了し、次の書込を待機する。
【００４９】
更新部４０は、対象第１領域についての管理情報に示された対象第２領域の状態が書き込み済みの場合、例えば、アドレス情報に含まれるキャッシュライン番号に対応するビットが１である場合（Ｓ１４のＹｅｓ）、処理をＳ１６に進める。Ｓ１６において、更新部４０は、対象第１領域についての管理情報に示された対象第２領域以外の第２領域の状態を、未書き込みに変更する。つまり、更新部４０は、対象第１領域についての管理情報に示された対象第２領域のみを書き込み済みとし、他の第２領域を未書き込みとする。例えば、更新部４０は、対応するビットのみを１とし、他のビットを０とする。
【００５０】
これにより、更新部４０は、対象第１領域を消去してから、対象第２領域に対して第１データを書き込んだ後の不揮発メモリ１４の状態を、管理テーブルに反映することができる。
【００５１】
更新部４０は、Ｓ１６を終了すると、Ｓ１７に処理を進める。Ｓ１７において、更新部４０は、対象第１領域についてのカウンタ値を更新する。例えば、更新部４０は、カウンタテーブルにおける、アドレス情報に含まれるページ番号に対応するカウンタ値を、１増加させる。これにより、更新部４０は、対象第１領域を消去した場合に、対象第１領域の書き換え回数（消去回数）を更新することができる。
【００５２】
なお、更新部４０は、Ｓ１６とＳ１７の処理を逆に実行してもよい。更新部４０は、Ｓ１６およびＳ１７の処理を終了した場合、本フローを終了し、次の書込を待機する。
【００５３】
図９は、第１実施形態に係る更新部４０による管理情報生成処理の流れを示すフローチャートである。更新部４０は、図８のＳ１３における管理情報生成処理において、図９に示すＳ２１からＳ２５の処理を実行する。
【００５４】
まず、Ｓ２１において、更新部４０は、管理テーブルに未使用エントリが有るか否かを判断する。つまり、更新部４０は、管理情報が格納されていないエントリが、管理テーブルに存在するか否かを判断する。
【００５５】
未使用エントリが有る場合（Ｓ２１のＹｅｓ）、更新部４０は、処理をＳ２２に進める。Ｓ２２において、更新部４０は、未使用エントリに対象第１領域についての管理情報を書き込む。つまり、更新部４０は、対象第１領域を識別する識別情報と、対象第２領域のみを書き込み済みとし、他の領域を未書き込みとしたマップ情報とを含む管理情報を、未使用エントリに書き込む。例えば、更新部４０は、アドレス情報に含まれるページ番号と、アドレス情報に含まれるキャッシュライン番号に対応するビットのみを１とし、他のビットを０としたマップ情報とを、未使用エントリに書き込む。
【００５６】
これにより、更新部４０は、第１データが書き込まれた後の不揮発メモリ１４の状態を管理テーブルに反映することができる。更新部４０は、Ｓ２２の処理を終了した場合、処理を図８のフローに戻す。
【００５７】
未使用エントリが無い場合（Ｓ２１のＮｏ）、更新部４０は、処理をＳ２３に進める。Ｓ２３において、更新部４０は、管理テーブルから、何れかの使用中エントリを選択する。例えば、更新部４０は、最も古い管理情報を格納した使用中エントリを選択する。なお、更新部４０は、他のアルゴリズムに従って何れかの使用中エントリを選択してもよい。
【００５８】
更新部４０は、Ｓ２３を終了すると、Ｓ２４に処理を進める。Ｓ２４において、更新部４０は、選択した使用中エントリに書き込まれている管理情報を消去して、対象第１領域についての管理情報を書き込む。つまり、更新部４０は、選択した使用中エントリに、対象第１領域を識別する識別情報と、対象第２領域のみを書き込み済みとし、他の領域を未書き込みとしたマップ情報とを含む管理情報を、上書きする。例えば、更新部４０は、アドレス情報に含まれるページ番号と、アドレス情報に含まれるキャッシュライン番号に対応するビットのみを１とし、他のビットを０としたマップ情報とを、選択した使用中エントリに上書きする。
【００５９】
これにより、更新部４０は、選択した管理情報（例えば最も古い管理情報）を管理テーブルから消去して、新たな管理情報を管理テーブルに格納することができる。そして、更新部４０は、第１データが書き込まれた後の不揮発メモリ１４の状態を管理テーブルに反映することができる。
【００６０】
更新部４０は、Ｓ２４を終了すると、Ｓ２５に処理を進める。Ｓ２５において、更新部４０は、管理テーブルから消去した管理情報により管理されていた第１領域についてのカウンタ値を更新する。例えば、更新部４０は、カウンタテーブルにおける、消去する管理情報に含まれていたページ番号に対応するカウンタ値を、１増加させる。
【００６１】
Ｓ２５の処理を実行することにより、更新部４０は、管理テーブルを用いた管理を終了した第１領域について、データを追記したと仮定して、書き換え回数（消去回数）を更新することができる。これにより、更新部４０は、管理テーブルによりアクティブに管理がされていない第１領域について、書き換え回数を推定することができる。
【００６２】
なお、更新部４０は、Ｓ２４とＳ２５の処理を逆に実行してもよい。更新部４０は、Ｓ２４およびＳ２５の処理を終了した場合、処理を図８のフローに戻す。
【００６３】
以上のように、本実施形態に係る情報処理装置１０は、不揮発メモリ１４に含まれる第１領域の数より少ない数の管理情報を記憶する。これにより、本実施形態に係る情報処理装置１０によれば、管理テーブルのエントリ数を少なくすることができるので、管理情報記憶部３８の記憶容量を少なくすることができる。
【００６４】
さらに、本実施形態に係る情報処理装置１０は、管理テーブルにより管理されていない第１領域については、管理テーブルから管理情報が消去されたタイミングでカウンタ値を更新する。これにより、本実施形態に係る情報処理装置１０によれば、不揮発メモリ１４に含まれる全ての第１領域についての書き換え回数を精度良く推定することができる。
【００６５】
（第２実施形態）
つぎに、第２実施形態に係る情報処理装置１０について説明する。第２実施形態に係る情報処理装置１０は、第１実施形態と略同一の機能および構成を有するので、同一の機能および構成を有するブロックについては同一の符号を付けて詳細な説明を省略する。
【００６６】
図１０は、第２実施形態に係る不揮発メモリ１４の構成を示す図である。第２実施形態に係る不揮発メモリ１４は、複数の第１領域を含む。第２実施形態において、第１領域は、ブロックと呼ばれる単位である。ブロックは、例えば、１Ｍバイトであってよい。ブロックは、例えば不揮発メモリ１４の消去単位である。
【００６７】
複数の第１領域のそれぞれは、複数の第２領域を含む。第２実施形態において、第２領域は、ページと呼ばれる単位である。ページは、例えば、４Ｋバイトである。
【００６８】
複数の第２領域のそれぞれは、複数の第３領域を含む。第２実施形態において、第３領域は、キャッシュラインと呼ばれる単位である。キャッシュラインは、例えば、６４バイトである。なお、第１領域は、キャッシュラインよりも小さい単位（例えば、バイト単位）であってもよい。
【００６９】
図１１は、第２実施形態に係る不揮発メモリ１４に対してデータの書き込み先を指定するためのアドレス情報の一例を示す図である。第２実施形態において、管理装置２０は、アクセス制御装置１８から図１１に示すような、４つのビットフィールドに分割されたアドレス情報を取得する。
【００７０】
アドレス情報の上位から１番目のビットフィールドは、データが書き込まれるブロック（対象第１領域）の位置を示す。アドレス情報の上位から２番目のビットフィールドは、対象第１領域における、データが書き込まれるページ（対象第２領域）の位置を示す。アドレス情報の上位から３番目のビットフィールドは、対象第２領域における、データが書き込まれるキャッシュライン（対象第３領域）の位置を示す。アドレス情報の上位から４番目のビットフィールドは、対象第３領域における、データが書き込まれるバイトの位置を示す。
【００７１】
従って、管理装置２０は、取得したアドレス情報における特定のビットフィールドの値を取得することにより、データが書き込まれるブロック（対象第１領域）、ページ（対象第２領域）およびキャッシュライン（対象第３領域）を特定することができる。
【００７２】
図１２は、第２実施形態に係る管理装置２０の機能構成を示す図である。管理装置２０は、カウンタ記憶部３６と、第１管理情報記憶部５２と、第２管理情報記憶部５４と、更新部４０とを含む。
【００７３】
カウンタ記憶部３６は、カウンタテーブルを記憶する。カウンタテーブルについては、図１３を参照してさらに説明する。
【００７４】
第１管理情報記憶部５２は、第１管理テーブルを記憶する。第１管理テーブルは、所定個のエントリを有する。それぞれのエントリには、第１管理情報を格納することができる。すなわち、第１管理テーブルは、所定個の第１領域のそれぞれについての第１管理情報を格納可能である。第１管理テーブルが格納できる第１管理情報の数は、不揮発メモリ１４に含まれる第１領域の数より少ない。第１管理テーブルは、処理回路１２が不揮発メモリ１４に最近アクセスした第１領域（アクティブな第１領域）についての第１管理情報を格納する。第１管理テーブルは、エントリが一杯となった場合、例えば最も古い第１管理情報を消去して、新しい第１管理情報を格納する。
【００７５】
第１管理情報は、対応する第１領域に含まれる複数の第２領域のそれぞれが書き込み済みか未書き込みかを示す。なお、第１管理テーブルおよび第１管理情報については、図１４を参照してさらに説明する。
【００７６】
第２管理情報記憶部５４は、第２管理テーブルを記憶する。第２管理テーブルは、所定個のエントリを有する。それぞれのエントリには、第２管理情報を格納することができる。すなわち、第２管理テーブルは、所定個の第２領域のそれぞれについての第２管理情報を格納可能である。第２管理テーブルが格納できる第２管理情報の数は、不揮発メモリ１４に含まれる第２領域の数より少ない。第２管理テーブルは、処理回路１２が最近アクセスした第２領域（アクティブな第２領域）についての第２管理情報を格納する。第２管理テーブルは、エントリが一杯となった場合、例えば最も古い第２管理情報を消去して、新しい第２管理情報を格納する。
【００７７】
第２管理情報は、対応する第２領域に含まれる複数の第３領域のそれぞれが書き込み済みか未書き込みかを示す。なお、第２管理テーブルおよび第２管理情報については、図１５を参照してさらに説明する。
【００７８】
更新部４０は、カウンタテーブルに格納されたそれぞれのカウンタ値、第１管理テーブルに格納されたそれぞれの第１管理情報および第２管理テーブルに格納されたそれぞれの第２管理情報を更新する。更新部４０の具体的な処理手順については、図１６から図１９を参照してさらに説明する。
【００７９】
図１３は、第２実施形態に係るカウンタテーブルの一例を示す図である。カウンタテーブルは、不揮発メモリ１４に含まれる複数の第１領域（ブロック）を識別する第１識別情報（例えばブロック番号）のそれぞれに対応させて、カウンタ値を格納する。
【００８０】
図１４は、第２実施形態に係る第１管理テーブルの一例を示す図である。第１管理テーブルは、第１管理情報を格納するための所定個のエントリを有する。例えば、図１４の例において、第１管理テーブルは、６４個のエントリを有する。
【００８１】
それぞれのエントリは、第１管理情報を格納する。第１管理情報は、第１識別情報と、第１マップ情報とを含む。
【００８２】
第１識別情報は、その第１管理情報が管理する第１領域（ブロック）を識別するための番号（ブロック番号）である。第１マップ情報は、対応する第１領域（ブロック）に含まれる複数の第２領域（ページ）のそれぞれが、書き込み済みか未書き込みかを示す。第１マップ情報は、第１領域（ブロック）に含まれる複数の第２領域（ページ）のそれぞれに対応したビットを含む。
【００８３】
例えば、第１マップ情報は、ブロックに含まれるページ番号に対応したビットを含む。それぞれのビットは、例えば１である場合、対応するページが、書き込み済みであることを示す。また、それぞれのビットは、例えば０である場合、対応するページが、未書き込みであることを示す。
【００８４】
なお、第１管理テーブルは、全てのエントリに第１管理情報が格納されていなくてよい。つまり、第１管理テーブルは、未使用エントリが有ってもよい。
【００８５】
図１５は、第２実施形態に係る第２管理テーブルの一例を示す図である。第２管理テーブルは、第２管理情報を格納するための所定個のエントリを有する。例えば、図１５の例において、第２管理テーブルは、６４個のエントリを有する。
【００８６】
それぞれのエントリは、第２管理情報を格納する。第２管理情報は、第２識別情報と、第２マップ情報とを含む。
【００８７】
第２識別情報は、その第２管理情報が管理する第２領域（ページ）およびその第２領域を含む第１領域（ブロック）を識別するための番号（ブロック番号およびページ番号）である。第２マップ情報は、対応する第２領域（ページ）に含まれる複数の第３領域（キャッシュライン）のそれぞれが、書き込み済みか未書き込みかを示す。第２マップ情報は、第２領域（ページ）に含まれる複数の第３領域（キャッシュライン）のそれぞれに対応したビットを含む。
【００８８】
例えば、第２マップ情報は、ページに含まれるキャッシュライン番号に対応したビットを含む。それぞれのビットは、例えば１である場合、対応するキャッシュラインが、書き込み済みであることを示す。また、それぞれのビットは、例えば０である場合、対応するキャッシュラインが、未書き込みであることを示す。
【００８９】
なお、第２管理テーブルは、全てのエントリに第２管理情報が格納されていなくてよい。つまり、第２管理テーブルは、未使用エントリが有ってもよい。
【００９０】
図１６は、第２実施形態に係る更新部４０による処理の流れを示すフローチャートである。更新部４０は、図１６から図１９に示すフローチャートに従って、カウンタテーブル、第１管理テーブルおよび第２管理テーブルを更新する。
【００９１】
まず、Ｓ４１において、更新部４０は、不揮発メモリ１４にデータの書き込みがされるか否かを検出する。更新部４０は、書き込みがされない場合（Ｓ４１のＮｏ）、処理をＳ４１で待機し、書き込みがされる場合（Ｓ４１のＹｅｓ）、処理をＳ４２に進める。
【００９２】
Ｓ４２において、更新部４０は、書き込み対象のデータ（第１データ）が書き込まれる第２領域である対象第２領域についての第２管理情報が、第２管理テーブルに存在するか否かを判断する。
【００９３】
第２管理テーブルに対象第２領域についての第２管理情報が存在しない場合（Ｓ４２のＮｏ）、更新部４０は、処理をＳ４３に進める。Ｓ４３において、更新部４０は、第２管理情報生成処理を実行する。第２管理情報生成処理については、図１７を参照して説明する。更新部４０は、第２管理情報生成処理を終了した場合、本フローを終了し、次の書込を待機する。
【００９４】
第２管理テーブルに対象第２領域についての第２管理情報が存在する場合（Ｓ４２のＹｅｓ）、更新部４０は、処理をＳ４４に進める。Ｓ４４において、更新部４０は、対象第２領域についての第２管理情報を参照して、第１データが書き込まれる第３領域である対象第３領域が、書き込み済みであるか否かを判断する。
【００９５】
更新部４０は、対象第３領域の状態が未書き込みの場合（Ｓ４４のＮｏ）、処理をＳ４５に進める。Ｓ４５において、更新部４０は、対象第２領域についての第２管理情報に示された対象第３領域の状態を、未書き込みから、書き込み済みに変更する。これにより、更新部４０は、第１データを書き込んだ後の不揮発メモリ１４の状態を、第２管理テーブルに反映することができる。更新部４０は、Ｓ４５の処理を終了した場合、本フローを終了し、次の書込を待機する。
【００９６】
更新部４０は、対象第３領域が書き込み済みの場合（Ｓ４４のＹｅｓ）、処理をＳ４６に進める。Ｓ４６において、更新部４０は、対象第２領域についての第２管理情報に示された対象第３領域以外の状態を、未書き込みに変更する。つまり、更新部４０は、対象第２領域についての第２管理情報に示された対象第３領域のみを書き込み済みとし、他の領域を未書き込みとする。
【００９７】
これにより、更新部４０は、対象第２領域を消去してから対象第３領域に第１データを書き込んだ後の不揮発メモリ１４の状態を、第２管理テーブルに反映することができる。
【００９８】
更新部４０は、Ｓ４６を終了すると、Ｓ４７に処理を進める。Ｓ４７において、更新部４０は、対象第２領域を含む第１領域についての第１管理情報に示された、対象第２領域に対する状態を更新する状態更新処理を実行する。対象第２領域に対する状態を更新する状態更新処理については、図１８を参照してさらに説明する。これにより、更新部４０は、対象第２領域に対してデータを追記した後の状態を、第１管理テーブルに反映することができる。
【００９９】
なお、更新部４０は、Ｓ４６とＳ４７の処理を逆に実行してもよい。更新部４０は、Ｓ４６およびＳ４７の処理を終了した場合、本フローを終了し、次の書込を待機する。
【０１００】
図１７は、第２実施形態に係る更新部４０による第２管理情報生成処理の流れを示すフローチャートである。更新部４０は、図１６のＳ４３における第２管理情報生成処理において、図１７に示すＳ５１からＳ５５の処理を実行する。
【０１０１】
まず、Ｓ５１において、更新部４０は、第２管理テーブルに未使用エントリが有るか否かを判断する。
【０１０２】
未使用エントリが有る場合（Ｓ５１のＹｅｓ）、更新部４０は、処理をＳ５２に進める。Ｓ５２において、更新部４０は、未使用エントリに対象第２領域についての第２管理情報を書き込む。つまり、更新部４０は、対象第２領域を識別する第２識別情報と、対象第３領域のみを書き込み済みとし、他の領域を未書き込みとした第２マップ情報とを含む第２管理情報を、未使用エントリに書き込む。
【０１０３】
これにより、更新部４０は、第１データが書き込まれた後の不揮発メモリ１４の状態を第２管理テーブルに反映することができる。更新部４０は、Ｓ５２の処理を終了した場合、処理を図１６のフローに戻す。
【０１０４】
未使用エントリが無い場合（Ｓ５１のＮｏ）、更新部４０は、処理をＳ５３に進める。Ｓ５３において、更新部４０は、第２管理テーブルから、何れかの使用中エントリを選択する。例えば、更新部４０は、最も古い第２管理情報を格納した使用中エントリを選択する。なお、更新部４０は、他のアルゴリズムに従って何れかの使用中エントリを選択してもよい。
【０１０５】
更新部４０は、Ｓ５３を終了すると、Ｓ５４に処理を進める。Ｓ５４において、更新部４０は、選択した使用中エントリに書き込まれている第２管理情報を消去して、対象第２領域についての第２管理情報を書き込む。つまり、更新部４０は、選択した使用中エントリに、対象第２領域を識別する第２識別情報と、対象第３領域のみを書き込み済みとし、他の領域を未書き込みとした第２マップ情報とを含む第２管理情報を、上書きする。
【０１０６】
これにより、更新部４０は、選択した第２管理情報を第２管理テーブルから消去して、新たな第２管理情報を第２管理テーブルに格納することができる。そして、更新部４０は、第１データが書き込まれた後の不揮発メモリ１４の状態を第２管理テーブルに反映することができる。
【０１０７】
更新部４０は、Ｓ５４を終了すると、Ｓ５５に処理を進める。Ｓ５５において、更新部４０は、消去第２領域を含む第１領域についての第１管理情報における、消去第２領域に対する状態を更新する状態更新処理を実行する。消去第２領域は、Ｓ５４での消去対象の第２管理情報により管理されていた第２領域である。消去第２領域に対する状態を更新する状態更新処理については、図１８を参照してさらに説明する。
【０１０８】
Ｓ５５の処理を実行することにより、更新部４０は、第２管理テーブルを用いた管理を終了した第２領域について、データを追記したと仮定して、書き込みをしたか否かを示す状態を更新することができる。これにより、更新部４０は、第２管理テーブルによりアクティブに管理がされていない第２領域について、書き込みをしているか未書き込みかを推定することができる。
【０１０９】
なお、更新部４０は、Ｓ５４とＳ５５の処理を逆に実行してもよい。更新部４０は、Ｓ５４およびＳ５５の処理を終了した場合、処理を図１６のフローに戻す。
【０１１０】
図１８は、第２実施形態に係る更新部４０による状態更新処理の流れを示すフローチャートである。更新部４０は、図１６のＳ４７および図１７のＳ５５における状態更新処理において、図１８に示すＳ６２からＳ６７の処理を実行する。
【０１１１】
Ｓ６２において、更新部４０は、対象第２領域または消去第２領域を含む第１領域（更新対象第１領域）についての第１管理情報が、第１管理テーブルに存在するか否かを判断する。
【０１１２】
更新対象第１領域についての第１管理情報が存在しない場合（Ｓ６２のＮｏ）、更新部４０は、処理をＳ６３に進める。Ｓ６３において、更新部４０は、第１管理情報生成処理を実行する。第１管理情報生成処理については、図１９を参照して説明する。更新部４０は、第１管理情報生成処理を終了した場合、本フローを終了し、処理を図１６または図１７のフローに戻す。
【０１１３】
更新対象第１領域についての第１管理情報が存在する場合（Ｓ６２のＹｅｓ）、更新部４０は、処理をＳ６４に進める。
【０１１４】
Ｓ６４において、更新部４０は、更新対象第１領域についての第１管理情報に示された、対象第２領域または消去第２領域の状態が、書き込み済みであるか否かを判断する。
【０１１５】
更新部４０は、対象第２領域または消去第２領域の状態が未書き込みの場合（Ｓ６４のＮｏ）、処理をＳ６５に進める。Ｓ６５において、更新部４０は、更新対象第１領域についての第１管理情報に示された、対象第２領域または消去第２領域の状態を、未書き込みから、書き込み済みに変更する。
【０１１６】
これにより、更新部４０は、第１データを書き込んだ後の不揮発メモリ１４の状態を、第１管理テーブルに反映することができる。または、更新部４０は、消去第２領域にデータを書き込んだと仮定した場合における不揮発メモリ１４の推定状態を、第１管理テーブルに反映することができる。更新部４０は、Ｓ６５の処理を終了した場合、本フローを終了し、処理を図１６または図１７のフローに戻す。
【０１１７】
更新部４０は、対象第２領域または消去第２領域の状態が書き込み済みの場合（Ｓ６４のＹｅｓ）、処理をＳ６６に進める。Ｓ６６において、更新部４０は、更新対象第１領域についての第１管理情報における対象第２領域または消去第２領域以外の状態を、未書き込みに変更する。つまり、更新部４０は、更新対象第１領域についての第１管理情報における対象第２領域または消去第２領域のみを書き込み済みとし、他の領域を未書き込みとする。
【０１１８】
これにより、更新部４０は、更新対象第１領域を消去してから、対象第２領域に第１データを書き込んだ後の不揮発メモリ１４の状態を、第１管理テーブルに反映することができる。または、更新部４０は、更新対象第１領域を消去してから、消去第２領域にデータを書き込んだと仮定した場合における不揮発メモリ１４の推定状態を第１管理テーブルに反映することができる。
【０１１９】
更新部４０は、Ｓ６６を終了すると、Ｓ６７に処理を進める。Ｓ６７において、更新部４０は、更新対象第１領域についてのカウンタ値を更新する。例えば、更新部４０は、カウンタテーブルにおける、更新対象第１領域についてのカウンタ値を、１増加させる。これにより、更新部４０は、更新対象第１領域を消去した場合、または、更新対象第１領域を消去したと仮定した場合に、更新対象第１領域の書き換え回数（消去回数）を更新することができる。
【０１２０】
なお、更新部４０は、Ｓ６６とＳ６７の処理を逆に実行してもよい。更新部４０は、Ｓ６６およびＳ６７の処理を終了した場合、本フローを終了し、処理を図１６または図１７のフローに戻す。
【０１２１】
図１９は、第２実施形態に係る更新部４０による第１管理情報生成処理の流れを示すフローチャートである。更新部４０は、図１８のＳ６３における第１管理情報生成処理において、図１９に示すＳ７１からＳ７５の処理を実行する。
【０１２２】
まず、Ｓ７１において、更新部４０は、第１管理テーブルに未使用エントリが有るか否かを判断する。
【０１２３】
未使用エントリが有る場合（Ｓ７１のＹｅｓ）、更新部４０は、処理をＳ７２に進める。Ｓ７２において、更新部４０は、未使用エントリに、更新対象第１領域についての第１管理情報を書き込む。つまり、更新部４０は、更新対象第１領域を識別する第１識別情報と、対象第２領域または消去第２領域のみを書き込み済みとし、他の領域を未書き込みとした第１マップ情報とを含む第１管理情報を、未使用エントリに書き込む。
【０１２４】
これにより、更新部４０は、対象第３領域に第１データが書き込まれた後の不揮発メモリ１４の状態、または、消去第２領域の管理を終了したことに伴い消去第２領域にデータを書き込んだと仮定した状態を、第１管理テーブルに反映することができる。更新部４０は、Ｓ７２の処理を終了した場合、処理を図１８のフローに戻す。
【０１２５】
未使用エントリが無い場合（Ｓ７１のＮｏ）、更新部４０は、処理をＳ７３に進める。Ｓ７３において、更新部４０は、第１管理テーブルから、何れかの使用中エントリを選択する。例えば、更新部４０は、最も古い第１管理情報を格納した使用中エントリを選択する。なお、更新部４０は、他のアルゴリズムに従って何れかの使用中エントリを選択してもよい。
【０１２６】
更新部４０は、Ｓ７３を終了すると、Ｓ７４に処理を進める。Ｓ７４において、更新部４０は、選択した使用中エントリに書き込まれている第１管理情報を消去して、更新対象第１領域についての第１管理情報を書き込む。例えば、更新部４０は、選択した使用中エントリに、更新対象第１領域を識別する第１識別情報と、対象第３領域または消去第２領域のみを書き込み済みとし、他の領域を未書き込みとした第１マップ情報とを含む第１管理情報を、上書きする。
【０１２７】
これにより、更新部４０は、選択した第１管理情報を第１管理テーブルから消去することができる。そして、更新部４０は、対象第３領域に第１データが書き込まれた後の不揮発メモリ１４の状態、または、消去第２領域にデータを書き込んだと仮定した場合における不揮発メモリ１４の推定状態を第１管理テーブルに反映することができる。
【０１２８】
更新部４０は、Ｓ７４を終了すると、Ｓ７５に処理を進める。Ｓ７５において、更新部４０は、消去対象の第１管理情報により管理されていた第１領域についてのカウンタ値を更新する。例えば、更新部４０は、消去対象の第１管理情報により管理されていた第１領域についてのカウンタ値を、１増加させる。
【０１２９】
Ｓ７５を実行することにより、更新部４０は、第１管理テーブルを用いた管理を終了した第１領域について、データを追記したと仮定して、書き換え回数（消去回数）を更新することができる。これにより、更新部４０は、第１管理テーブルによりアクティブに管理がされていない第１領域について、書き換え回数を推定することができる。
【０１３０】
なお、更新部４０は、Ｓ７４とＳ７５の処理を逆に実行してもよい。更新部４０は、Ｓ７４およびＳ７５の処理を終了した場合、処理を図１８のフローに戻す。
【０１３１】
以上のように、第２実施形態に係る情報処理装置１０は、不揮発メモリ１４を、サイズの異なる２個の領域を用いて、木構造で分割して、ウェアレベリングに必要な第１領域毎の書き換え回数を管理する。これにより、情報処理装置１０によれば、第３領域（キャッシュライン）のデータサイズと消去単位（ブロック）のデータサイズとの差が大きい場合であっても、効率良く書き換え回数を管理することができる。
【０１３２】
また、情報処理装置１０は、サイズの異なる２個の領域に限らず、サイズの異なる３個以上の領域を用いて、ウェアレベリングに必要な第１領域毎の書き換え回数を管理してもよい。
【０１３３】
(変形例)
以下、第１実施形態および第２実施形態に対する変形例を説明する。
【０１３４】
図２０は、ページ等の単位でデータを一括書き込みをすることが可能な場合における、管理装置２０のフローチャートである。処理回路１２は、ＤＭＡ（Ｄｉｒｅｃｔ  Ｍｅｍｏｒｙ  Ａｃｃｓｓ）等を用いて、第１領域（例えばページまたはブロック）の単位でデータを一括して書き込んでもよい。このように第１領域に対してデータを一括して書き込み可能な場合、管理装置２０は、図２０に示すフローに従って処理を行ってよい。
【０１３５】
まず、Ｓ８１において、更新部４０は、不揮発メモリ１４にデータの書き込みがされるか否かを判断する。更新部４０は、書き込みがされない場合（Ｓ８１のＮｏ）、処理をＳ８１で待機し、書き込みがされる場合（Ｓ８１のＹｅｓ）、処理をＳ８２に進める。
【０１３６】
Ｓ８２において、更新部４０は、第１領域（例えばページまたはブロック）の単位でデータが一括して書き込みされるか否かを判断する。データが一括して書き込まれない場合、すなわち、第３領域（キャッシュライン）の単位でデータが書き込まれる場合（Ｓ８２のＮｏ）、更新部４０は、図８のＳ１２または図１６のＳ４１に処理を進める。そして、以後、更新部４０は、第１実施形態または第２実施形態で説明した処理を実行する。
【０１３７】
データが一括して書き込まれる場合、すなわち、第１領域（例えばページまたはブロック）の単位でデータが書き込まれる場合（Ｓ８２のＹｅｓ）、更新部４０は、処理をＳ８３に進める。
【０１３８】
Ｓ８３において、更新部４０は、カウンタテーブルにおける、データが書き込まれる第１領域に対応するカウンタ値を更新する。例えば、更新部４０は、対応するカウンタ値を１増加させる。この場合において、複数の第１領域にわたって連続してデータが書き込まれる場合、更新部４０は、それぞれの第１領域の書き込み開始タイミング等に同期させて、対応するカウンタ値を更新する。
【０１３９】
続いて、Ｓ８４において、更新部４０は、データを書き込んだ第１領域（または第１領域および第２領域）を管理する管理情報（または第１管理情報および第２管理情報）が、管理テーブル（または第１管理テーブルおよび第２管理テーブル）に存在するか否かを判断する。対応する管理情報（または第１管理情報および第２管理情報）が存在しない場合（Ｓ８４のＮｏ）、更新部４０は、本フローを終了して、次の書込を待機する。
【０１４０】
対応する管理情報（または第１管理情報および第２管理情報）が存在する場合（Ｓ８４のＹｅｓ）、更新部４０は、処理をＳ８５に進める。Ｓ８５において、更新部４０は、対応する管理情報（または第１管理情報および第２管理情報）を消去する。そして、Ｓ８５を終了すると、更新部４０は、本フローを終了して、次の書込を待機する。
【０１４１】
以上の処理を実行することにより、管理装置２０は、第１領域（例えばページまたはブロック）の単位でデータが一括して書き込まれる場合に、容易にカウンタテーブルおよび管理テーブルを更新することができる。
【０１４２】
図２１は、識別情報の変形例を示す図である。第１実施形態および第２実施形態において、管理装置２０は、ページ番号を用いて管理情報を識別していた。これに代えて、管理装置２０は、ＴＬＢ（Ｔｒａｎｓｌａｔｉｏｎ  Ｌｏｏｋａｓｉｄｅ  Ｂｕｆｆｅｒ）により管理されるアドレスに対応させて、管理情報を記憶してもよい。
【０１４３】
処理回路１２は、ＴＬＢと呼ばれる仮想記憶機構を有する。ＴＬＢは、仮想アドレスから物理アドレスへアドレス変換を行うために、ページにおける論理アドレスと物理アドレスとの対応を示す対応関係情報を記憶する。しかし、ＴＬＢは、保有しているエントリが限られているので、対応関係情報を必要に応じて入れ替える。ＴＬＢは、例えば、直近において高い頻度でアクセスされるページについての対応関係情報を優先して記憶する。
【０１４４】
そこで、管理装置２０は、ＴＬＢに対応関係情報が記憶されているページについて、管理テーブルに記憶させてもよい。例えば、管理装置２０は、ＴＬＢのエントリの数と同一の数のエントリを有する管理テーブル（または第２管理テーブル）を記憶する。そして、更新部４０は、ＴＬＢのエントリから対応関係情報が追い出されたタイミングにおいて、対応する管理テーブル（または第２管理テーブル）に記憶されている管理情報（または第２管理情報）を消去する。この場合、更新部４０は、管理情報（または第２管理情報）が他の管理情報に上書きされた場合と同様の処理を実行する。なお、管理テーブル（または第２管理テーブル）は、ＴＬＢのエントリと同一のエントリを有するので、識別情報を格納するエントリを含まなくてもよい。
【０１４５】
管理装置２０は、このように管理テーブルに管理情報を格納することにより、処理回路１２に同期して効率良くウェアレベリングに必要な第１領域毎の書き換え回数を管理することができる。
【０１４６】
図２２は、情報処理装置１０の構成の第１変形例を示す図である。例えば、処理回路１２がメモリコントローラ１６を内部に備えていてもよい。この場合、管理装置２０は、メモリコントローラ１６とともに、処理回路１２の内部に備えられる。また、管理装置２０は、処理回路１２の内部において、メモリコントローラ１６とは別個に設けられていてもよい。
【０１４７】
図２３は、情報処理装置１０の構成の第２変形例を示す図である。また、例えば、情報処理装置１０は、処理回路１２と、不揮発メモリモジュール７０とを備えてもよい。この場合、不揮発メモリモジュール７０は、不揮発メモリ１４と、メモリコントローラ１６とを有する。この場合、管理装置２０は、メモリコントローラ１６とともに、不揮発メモリモジュール７０の内部に備えられる。なお、管理装置２０は、不揮発メモリモジュール７０の内部において、メモリコントローラ１６とは別個に設けられていてもよい。
【０１４８】
図２４は、情報処理装置１０の構成の第３変形例を示す図である。また、例えば、情報処理装置１０は、処理回路１２、不揮発メモリ１４およびメモリコントローラ１６とは別個に、管理装置２０をさらに備えていてもよい。この場合、管理装置２０は、不揮発メモリ１４に対する書き込みアドレスを取得可能に接続されたハードウェア装置として実現される。
【０１４９】
以上、本発明のいくつかの実施形態を説明したが、これらの実施形態は、例として提示したものであり、発明の範囲を限定することは意図していない。これら新規な実施形態は、その他の様々な形態で実施されることが可能であり、発明の要旨を逸脱しない範囲で、種々の省略、置き換え、変更を行うことができる。これら実施形態やその変形は、発明の範囲や要旨に含まれるとともに、請求の範囲に記載された発明とその均等の範囲に含まれる。
【符号の説明】
【０１５０】
１０  情報処理装置
１２  処理回路
１４  不揮発メモリ
１６  メモリコントローラ
１８  アクセス制御装置
２０  管理装置
２８  要求受付部
３０  要求キュー
３２  要求実行部
３６  カウンタ記憶部
３８  管理情報記憶部
４０  更新部
５２  第１管理情報記憶部
５４  第２管理情報記憶部
７０  不揮発メモリモジュール
【図１】
2018147191.tif 000003
【図２】
2018147191.tif 000004
【図３】
2018147191.tif 000005
【図４】
2018147191.tif 000006
【図５】
2018147191.tif 000007
【図６】
2018147191.tif 000008
【図７】
2018147191.tif 000009
【図８】
2018147191.tif 000010
【図９】
2018147191.tif 000011
【図１０】
2018147191.tif 000012
【図１１】
2018147191.tif 000013
【図１２】
2018147191.tif 000014
【図１３】
2018147191.tif 000015
【図１４】
2018147191.tif 000016
【図１５】
2018147191.tif 000017
【図１６】
2018147191.tif 000018
【図１７】
2018147191.tif 000019
【図１８】
2018147191.tif 000020
【図１９】
2018147191.tif 000021
【図２０】
2018147191.tif 000022
【図２１】
2018147191.tif 000023
【図２２】
2018147191.tif 000024
【図２３】
2018147191.tif 000025
【図２４】
2018147191.tif 000026
【手続補正書】
【提出日】平成29年3月22日(2017.3.22)
【手続補正１】
【補正対象書類名】明細書
【補正対象項目名】全文
【補正方法】変更
【補正の内容】
【発明の詳細な説明】
【技術分野】
【０００１】
本発明の実施形態は、管理装置、情報処理装置および管理方法に関する。
【背景技術】
【０００２】
ＮＡＮＤフラッシュ等の不揮発メモリは、書き換え可能回数が少ない。このため、不揮発メモリを管理する情報処理装置は、ウェアレベリング制御を実行している。具体的には、情報処理装置は、不揮発メモリの書き換え回数をカウントしてテーブルに格納する。そして、情報処理装置は、テーブルに格納した値を参照して、不揮発メモリの記憶領域の全体に平均的にデータが書き込まれるように、書き込み位置を制御する。情報処理装置は、このようなウェアレベリング制御を実行することにより、不揮発メモリの寿命を延ばすことができる。
【０００３】
ところで、近年、ストレージクラスメモリとも呼ばれる高速不揮発メモリが開発されている。ストレージクラスメモリは、バイト単位またはキャッシュライン単位でデータが書き込まれる。このため、情報処理装置は、ウェアレベリング制御を精度良く実行するために、バイト単位またはキャッシュメモリ単位で書き換え回数を管理しなければならなかった。しかし、このように書き換え回数を管理した場合、テーブルのサイズが非常に大きくなってしまい、情報処理装置は、非常に大きなメモリを備えなければならなかった。
【０００４】
一方、例えば、ページ単位でのみ書き換え回数をカウントし、バイト単位またはキャッシュメモリ単位での書き換え回数をカウントしない方法も考えられる。しかし、このような方法で書き換え回数を管理した場合、情報処理装置は、ページ内の異なるバイトまたはキャッシュラインに対するデータの書き込みか、同一のバイトまたはキャッシュラインに対するデータの書き込みかを区別できず、ウェアレベリング制御を精度良く実現することができなかった。
【先行技術文献】
【特許文献】
【０００５】
【特許文献１】特開２００８−１６２５５号公報
【発明の概要】
【発明が解決しようとする課題】
【０００６】
本発明が解決しようとする課題は、不揮発メモリの領域毎の書き換え回数を、小さい記憶容量で精度良く管理することにある。
【課題を解決するための手段】
【０００７】
実施形態の管理装置は、不揮発メモリを管理する。前記不揮発メモリは、複数の第１領域を含む。前記複数の第１領域のそれぞれは、複数の第２領域を含む。前記管理装置は、カウンタ記憶部と、第１管理情報記憶部と、更新部とを有する。前記カウンタ記憶部は、前記複数の第１領域のそれぞれについて、カウンタ値を記憶する。前記第１管理情報記憶部は、所定個の第１領域のそれぞれについての第１管理情報を格納可能な第１管理テーブルを記憶する。前記更新部は、前記カウンタ値および前記第１管理テーブルを更新する。前記第１管理情報は、対応する第１領域に含まれる複数の第２領域のそれぞれが書き込み済みか未書き込みかを示す。前記不揮発メモリに対する第１データの書き込みに応じて、前記更新部は、前記第１データが書き込まれる第１領域である対象第１領域についての前記第１管理情報に示された、前記第１データが書き込まれる第２領域である対象第２領域の状態が、未書き込みの場合、書き込み済みに変更する。前記更新部は、前記第１管理情報に示された前記対象第２領域の状態が書き込み済みの場合、前記対象第１領域についての前記カウンタ値を更新する。
【図面の簡単な説明】
【０００８】
【図１】情報処理装置のハードウェア構成の一例を示す図。
【図２】メモリコントローラが有するアクセス制御装置の構成を示す図。
【図３】第１実施形態に係る不揮発メモリの構成を示す図。
【図４】第１実施形態に係るアドレス情報の一例を示す図。
【図５】第１実施形態に係る管理装置の構成を示す図。
【図６】第１実施形態に係るカウンタテーブルの一例を示す図。
【図７】第１実施形態に係る管理テーブルの一例を示す図。
【図８】第１実施形態に係る更新部による処理の流れを示すフローチャート。
【図９】第１実施形態に係る管理情報生成処理の流れを示すフローチャート。
【図１０】第２実施形態に係る不揮発メモリの構成を示す図。
【図１１】第２実施形態に係るアドレス情報の一例を示す図。
【図１２】第２実施形態に係る管理装置の機能構成を示す図。
【図１３】第２実施形態に係るカウンタテーブルの一例を示す図。
【図１４】第２実施形態に係る第１管理テーブルの一例を示す図。
【図１５】第２実施形態に係る第２管理テーブルの一例を示す図。
【図１６】第２実施形態に係る更新部による処理の流れを示すフローチャート。
【図１７】第２実施形態に係る第２管理情報生成処理の流れを示すフローチャート。
【図１８】第２実施形態に係る状態更新処理の流れを示すフローチャート。
【図１９】第２実施形態に係る第１管理情報生成処理の流れを示すフローチャート。
【図２０】一括書き込み可能な場合における、管理装置のフローチャート。
【図２１】識別情報の変形例を示す図。
【図２２】情報処理装置の構成の第１変形例を示す図。
【図２３】情報処理装置の構成の第２変形例を示す図。
【図２４】情報処理装置の構成の第３変形例を示す図。
【発明を実施するための形態】
【０００９】
以下、図面を参照しながら実施形態に係る情報処理装置１０について詳細に説明する。本実施形態に係る情報処理装置１０は、不揮発メモリ１４における領域毎の書き換え回数を小さい記憶容量で精度良く管理することを目的とする。
【００１０】
（第１実施形態）
図１は、情報処理装置１０のハードウェア構成の一例を示す図である。情報処理装置１０は、処理回路１２と、不揮発メモリ１４と、メモリコントローラ１６とを備える。
【００１１】
処理回路１２は、１または複数のプロセッサを有する。プロセッサは、例えば、ＣＰＵ（Ｃｅｎｔｒａｌ  Ｐｒｏｃｅｓｓｉｎｇ  Ｕｎｉｔ）である。プロセッサは、１または複数のＣＰＵコアを含んでいてもよい。処理回路１２は、プログラムを実行して、データを処理する。処理回路１２は、プログラムの実行に応じて、不揮発メモリ１４からデータを読み出したり、不揮発メモリ１４にデータを書き込んだりする。
【００１２】
また、処理回路１２は、キャッシュメモリを有する。処理回路１２は、不揮発メモリ１４に記憶されているデータを一時的に記憶する。
【００１３】
不揮発メモリ１４は、電源の供給を停止してもデータを記憶し続けるメモリである。不揮発メモリ１４は、例えば、処理回路１２のメインメモリとして機能する。不揮発メモリ１４は、バイト単位等の小領域の単位でデータが書き込み可能である。
【００１４】
不揮発メモリ１４は、例えば、ＭＲＡＭ（Ｍａｇｎｅｔｏｒｅｓｉｓｔｉｖｅ  Ｒａｎｄｏｍ  Ａｃｃｅｓｓ  Ｍｅｍｏｒｙ）、ＰＣＭ（Ｐｈａｓｅ  Ｃｈａｎｇｅ  Ｍｅｍｏｒｙ）、ＰＲＡＭ（Ｐｈａｓｅ  Ｒａｎｄｏｍ  Ａｃｃｅｓｓ  Ｍｅｍｏｒｙ）、ＰＣＲＡＭ（Ｐｈａｓｅ  Ｃｈａｎｇｅ  Ｒａｎｄｏｍ  Ａｃｃｅｓｓ  Ｍｅｍｏｒｙ）、ＲｅＲＡＭ（Ｒｅｓｉｓｔａｎｃｅ  Ｒａｎｄｏｍ  Ａｃｃｅｓｓ  Ｍｅｍｏｒｙ）、ＦｅＲＡＭ（Ｆｅｒｒｏｅｌｅｃｔｒｉｃ    Ｒａｎｄｏｍ  Ａｃｃｅｓｓ  Ｍｅｍｏｒｙ）、３ＤＸＰｏｉｎｔまたはＭｅｍｒｉｓｔｏｒ等である。不揮発メモリ１４は、いわゆるストレージクラスメモリ（ＳＣＭ）と呼ばれるメモリであってもよい。また、不揮発メモリ１４は、複数の半導体装置を１つの基板または筐体等に設けたモジュールであってもよい。
【００１５】
メモリコントローラ１６は、アクセス制御装置１８と、管理装置２０とを有する。アクセス制御装置１８は、処理回路１２からの不揮発メモリ１４に対するアクセス要求を処理する。アクセス制御装置１８は、処理回路１２からの書込命令に応じて、データを不揮発メモリ１４に書き込む。また、アクセス制御装置１８は、処理回路１２からの読出命令に応じて、データを不揮発メモリ１４から読み出す。
【００１６】
管理装置２０は、不揮発メモリ１４に対するウェアレベリング制御を実行する。具体的には、管理装置２０は、不揮発メモリ１４に対するデータの書き込み時にデータが書き込まれるアドレス情報を受け取る。管理装置２０は、受け取ったアドレス情報に基づき、不揮発メモリ１４における第１領域毎のデータの書き換え回数を管理する。第１領域は、例えば、処理回路１２によるデータの管理単位（例えば、ページ）である。また、第１領域は、処理回路１２によるデータの管理単位の所定数倍の単位等であってもよい。
【００１７】
そして、管理装置２０は、不揮発メモリ１４における第１領域毎のデータの書き換え回数をアクセス制御装置１８に与える。アクセス制御装置１８は、取得した書き換え回数に基づき、不揮発メモリ１４における全体の領域に平均的にデータが書き込まれるように、データの書き込み位置を制御する。また、管理装置２０は、書き換え回数をメモリコントローラ１６の外部に設けられた装置または処理回路１２により実行されるオペレーティングシステム等に与えてもよい。この場合、書き換え回数を受け取った装置は、取得した書き換え回数に基づき、不揮発メモリ１４における全体の領域に平均的にデータが書き込まれるように、データの書き込み位置を制御する。
【００１８】
図２は、メモリコントローラ１６が有するアクセス制御装置１８の構成を、管理装置２０とともに示す図である。アクセス制御装置１８は、要求受付部２８と、要求キュー３０と、要求実行部３２とを含む。
【００１９】
要求受付部２８は、処理回路１２からの不揮発メモリ１４への書込命令および読出命令を受け取る。要求受付部２８は、受け取った書込命令および読出命令を、要求キュー３０に記憶させる。要求キュー３０は、例えば先入れ先出し型のメモリである。
【００２０】
要求実行部３２は、要求キュー３０に記憶されている書込命令および読出命令を取り出す。要求実行部３２は、書込命令を取り出した場合、不揮発メモリ１４における指定されたアドレスにデータを書き込む。要求実行部３２は、読出命令を取り出した場合、不揮発メモリ１４における指定されたアドレスからデータを読み出して、要求受付部２８に与える。要求受付部２８は、不揮発メモリ１４から読み出されたデータを受け取った場合、受け取ったデータを処理回路１２に返す。
【００２１】
管理装置２０は、処理回路１２から書込命令が与えられた場合、不揮発メモリ１４におけるデータが書き込まれる位置を示すアドレス情報を取得する。管理装置２０は、例えば、要求受付部２８からアドレス情報を受け取り、データが書き込まれる位置を検出する。また、管理装置２０は、例えばページ等にデータが一括して書き込まれる場合、先頭の書き込み位置を表すアドレス情報と、データサイズとを受け取って、データが書き込まれる位置を検出してもよい。また、管理装置２０は、要求キュー３０または要求実行部３２からアドレス情報等を取得してもよい。
【００２２】
図３は、第１実施形態に係る不揮発メモリ１４の構成を示す図である。不揮発メモリ１４は、複数の第１領域を含む。第１実施形態において、第１領域は、ページと呼ばれる単位である。ページは、処理回路１２によるデータの管理単位である。ページは、例えば、オペレーティングシステムが管理する仮想記憶装置のページに対応している。ページは、例えば、４Ｋバイトであってよい。
【００２３】
また、複数の第１領域のそれぞれは、複数の第２領域を含む。第１実施形態において、第２領域は、キャッシュラインと呼ばれる単位である。キャッシュラインは、処理回路１２内のキャッシュメモリに対するデータの書き換え単位に対応する。処理回路１２は、キャッシュラインの単位で、不揮発メモリ１４に対してデータを書き換える。
【００２４】
キャッシュラインは、例えば、６４バイトである。なお、第２領域は、キャッシュラインよりも小さい単位（例えば、バイト単位）であってもよい。
【００２５】
図４は、第１実施形態に係る不揮発メモリ１４に対するデータの書き込み先を指定するためのアドレス情報の一例を示す図である。管理装置２０は、アクセス制御装置１８から図４に示すような、３つのビットフィールドに分割されたアドレス情報を取得する。
【００２６】
アドレス情報の上位のビットフィールドは、データが書き込まれるページ（対象第１領域）の位置を示す。アドレス情報の中位のビットフィールドは、対象第１領域における、データが書き込まれるキャッシュライン（対象第２領域）の位置を示す。また、アドレス情報の下位のビットフィールドは、対象第２領域における、データが書き込まれるバイトの位置を示す。
【００２７】
従って、管理装置２０は、取得したアドレス情報における特定のビットフィールドの値を取得することにより、データが書き込まれるページ（対象第１領域）およびキャッシュライン（対象第２領域）を特定することができる。
【００２８】
図５は、第１実施形態に係る管理装置２０の構成を示す図である。管理装置２０は、カウンタ記憶部３６と、管理情報記憶部３８と、更新部４０とを含む。
【００２９】
カウンタ記憶部３６は、カウンタテーブルを記憶する。カウンタテーブルは、不揮発メモリ１４に含まれる複数の第１領域のそれぞれについての、データの書き換え回数を表すカウンタ値を格納する。カウンタテーブルについては、図６を参照してさらに説明する。
【００３０】
管理情報記憶部３８は、管理テーブルを記憶する。管理テーブルは、所定個のエントリを有する。それぞれのエントリには、管理情報を格納することができる。すなわち、管理テーブルは、所定個の第１領域のそれぞれについての管理情報を格納可能である。管理テーブルが格納できる管理情報の数は、不揮発メモリ１４に含まれる第１領域の数より少ない。管理テーブルは、処理回路１２が不揮発メモリ１４に最近アクセスした第１領域（アクティブな第１領域）についての管理情報を格納する。管理テーブルは、エントリが一杯となった場合、例えば最も古い管理情報（アクセスしてから最も時間が経過した管理情報）を消去して、新しい管理情報を格納する。
【００３１】
管理情報は、対応する第１領域に含まれる複数の第２領域のそれぞれが、書き込み済みか未書き込みかを示す。例えば、管理情報は、対応する第１領域にデータが記憶されていない場合には、対応する第１領域に含まれている複数の第２領域の全ての状態が、未書き込みに変更される。管理情報は、対応する第１領域にデータが記憶されていない状態から、何れかの第２領域にデータが書き込まれた場合、その第２領域の状態が書き込み済みとされ、他の書き込み領域の状態が未書き込みとされる。なお、管理テーブルおよび管理情報については、図７を参照してさらに説明する。
【００３２】
更新部４０は、カウンタテーブルに格納されたそれぞれのカウンタ値、および、管理テーブルに格納されたそれぞれの管理情報を更新する。更新部４０は、処理回路１２が不揮発メモリ１４にデータを書き込んだ場合、書き込んだデータのアドレス情報を取得し、取得したアドレス情報に基づきカウンタ値およびアドレス情報を更新する。更新部４０の具体的な処理手順については、図８および図９を参照してさらに説明する。
【００３３】
図６は、第１実施形態に係るカウンタテーブルの一例を示す図である。カウンタテーブルは、不揮発メモリ１４に含まれる複数の第１領域（ページ）を識別する識別情報（例えばページ番号）のそれぞれに対応させて、カウンタ値を格納する。
【００３４】
それぞれのカウンタ値は、対応する第１領域が書き換えられた回数の推定値を表す。それぞれのカウンタ値は、工場出荷時等の初期時には、例えば０とされている。それぞれのカウンタ値は、更新部４０により１ずつ増加（インクリメント）されていく。
【００３５】
アクセス制御装置１８またはオペレーティングシステム等は、カウンタテーブルに格納されたカウンタ値を参照して、全てのページのカウンタ値が平均的となるようにウェアレベリング制御を実行する。
【００３６】
図７は、第１実施形態に係る管理テーブルの一例を示す図である。管理テーブルは、管理情報を格納するための所定個のエントリを有する。例えば、図７の例において、管理テーブルは、６４個のエントリを有する。
【００３７】
それぞれのエントリは、管理情報を格納する。管理情報は、識別情報と、マップ情報とを含む。
【００３８】
識別情報は、その管理情報が管理する第１領域（ページ）を識別するための番号（ページ番号）である。更新部４０は、識別情報を参照することにより、そのエントリが何れの第１領域を管理している管理情報を格納しているかを判断することができる。
【００３９】
マップ情報は、対応する第１領域（ページ）に含まれる複数の第２領域（キャッシュライン）のそれぞれが、書き込み済みか未書き込みかを示す。マップ情報は、第１領域（ページ）に含まれる複数の第２領域（キャッシュライン）のそれぞれに対応したビットを含む。
【００４０】
例えば、マップ情報は、キャッシュライン番号に対応したビットを含む。例えば、１ページ内に６４個のキャッシュラインが含まれる場合、マップ情報は、６４個のビットを含む。それぞれのビットは、例えば１である場合、対応するキャッシュラインが、書き込み済みであることを示す。また、それぞれのビットは、例えば０である場合、対応するキャッシュラインが、未書き込みであることを示す。
【００４１】
なお、管理テーブルは、全てのエントリに管理情報が格納されていなくてよい。つまり、管理テーブルは、未使用エントリが有ってもよい。
【００４２】
図８は、第１実施形態に係る更新部４０による処理の流れを示すフローチャートである。更新部４０は、図８および図９に示すフローチャートに従って、カウンタテーブルおよび管理テーブルを更新する。
【００４３】
まず、Ｓ１１において、更新部４０は、不揮発メモリ１４にデータの書き込みがされるか否かを検出する。更新部４０は、書き込みがされない場合（Ｓ１１のＮｏ）、処理をＳ１１で待機し、書き込みがされる場合（Ｓ１１のＹｅｓ）、処理をＳ１２に進める。
【００４４】
Ｓ１２において、更新部４０は、書き込み対象のデータ（第１データ）が書き込まれる第１領域である対象第１領域についての管理情報が、管理テーブルに存在するか否かを判断する。例えば、更新部４０は、アドレス情報に含まれるページ番号と同一のページ番号を含む管理情報が、管理テーブルに格納されているか否かを判断する。
【００４５】
管理テーブルに対象第１領域についての管理情報が存在しない場合、例えば、アドレス情報に含まれるページ番号と同一のページ番号を含む管理情報が、管理テーブルに格納されていない場合（Ｓ１２のＮｏ）、更新部４０は、処理をＳ１３に進める。Ｓ１３において、更新部４０は、管理情報生成処理を実行する。管理情報生成処理については、図９を参照して説明する。更新部４０は、管理情報生成処理を終了した場合、本フローを終了し、次の書込を待機する。
【００４６】
管理テーブルに対象第１領域についての管理情報が存在する場合、例えば、アドレス情報に含まれるページ番号と同一のページ番号を含む管理情報が管理テーブルに格納されている場合（Ｓ１２のＹｅｓ）、更新部４０は、処理をＳ１４に進める。
【００４７】
Ｓ１４において、更新部４０は、対象第１領域についての管理情報に示された第１データが書き込まれる第２領域である対象第２領域の状態が、書き込み済みであるか否かを判断する。例えば、更新部４０は、アドレス情報に含まれるページ番号に対応する管理情報におけるマップ情報を参照して、アドレス情報に含まれるキャッシュライン番号に対応するビットが１であるか否かを判断する。
【００４８】
更新部４０は、対象第２領域の状態が未書き込みの場合、例えば、アドレス情報に含まれるキャッシュライン番号に対応するビットが０である場合（Ｓ１４のＮｏ）、処理をＳ１５に進める。Ｓ１５において、更新部４０は、対象第１領域についての管理情報に示された対象第２領域の状態を、未書き込みから、書き込み済みに変更する。例えば、更新部４０は、対応するビットを、０から１に変更する。これにより、更新部４０は、第１データが書き込まれた後の不揮発メモリ１４の状態を、管理テーブルに反映することができる。更新部４０は、Ｓ１５の処理を終了した場合、本フローを終了し、次の書込を待機する。
【００４９】
更新部４０は、対象第１領域についての管理情報に示された対象第２領域の状態が書き込み済みの場合、例えば、アドレス情報に含まれるキャッシュライン番号に対応するビットが１である場合（Ｓ１４のＹｅｓ）、処理をＳ１６に進める。Ｓ１６において、更新部４０は、対象第１領域についての管理情報に示された対象第２領域以外の第２領域の状態を、未書き込みに変更する。つまり、更新部４０は、対象第１領域についての管理情報に示された対象第２領域のみを書き込み済みとし、他の第２領域を未書き込みとする。例えば、更新部４０は、対応するビットのみを１とし、他のビットを０とする。
【００５０】
これにより、更新部４０は、対象第２領域に対して第１データを書き込んだ後の不揮発メモリ１４の状態を、管理テーブルに反映することができる。
【００５１】
更新部４０は、Ｓ１６を終了すると、Ｓ１７に処理を進める。Ｓ１７において、更新部４０は、対象第１領域についてのカウンタ値を更新する。例えば、更新部４０は、カウンタテーブルにおける、アドレス情報に含まれるページ番号に対応するカウンタ値を、１増加させる。これにより、更新部４０は、対象第１領域の書き換え回数を更新することができる。
【００５２】
なお、更新部４０は、Ｓ１６とＳ１７の処理を逆に実行してもよい。更新部４０は、Ｓ１６およびＳ１７の処理を終了した場合、本フローを終了し、次の書込を待機する。
【００５３】
図９は、第１実施形態に係る更新部４０による管理情報生成処理の流れを示すフローチャートである。更新部４０は、図８のＳ１３における管理情報生成処理において、図９に示すＳ２１からＳ２５の処理を実行する。
【００５４】
まず、Ｓ２１において、更新部４０は、管理テーブルに未使用エントリが有るか否かを判断する。つまり、更新部４０は、管理情報が格納されていないエントリが、管理テーブルに存在するか否かを判断する。
【００５５】
未使用エントリが有る場合（Ｓ２１のＹｅｓ）、更新部４０は、処理をＳ２２に進める。Ｓ２２において、更新部４０は、未使用エントリに対象第１領域についての管理情報を書き込む。つまり、更新部４０は、対象第１領域を識別する識別情報と、対象第２領域のみを書き込み済みとし、他の領域を未書き込みとしたマップ情報とを含む管理情報を、未使用エントリに書き込む。例えば、更新部４０は、アドレス情報に含まれるページ番号と、アドレス情報に含まれるキャッシュライン番号に対応するビットのみを１とし、他のビットを０としたマップ情報とを、未使用エントリに書き込む。
【００５６】
これにより、更新部４０は、第１データが書き込まれた後の不揮発メモリ１４の状態を管理テーブルに反映することができる。更新部４０は、Ｓ２２の処理を終了した場合、処理を図８のフローに戻す。
【００５７】
未使用エントリが無い場合（Ｓ２１のＮｏ）、更新部４０は、処理をＳ２３に進める。Ｓ２３において、更新部４０は、管理テーブルから、何れかの使用中エントリを選択する。例えば、更新部４０は、最も古い管理情報を格納した使用中エントリを選択する。なお、更新部４０は、他のアルゴリズムに従って何れかの使用中エントリを選択してもよい。
【００５８】
更新部４０は、Ｓ２３を終了すると、Ｓ２４に処理を進める。Ｓ２４において、更新部４０は、選択した使用中エントリに書き込まれている管理情報を消去して、対象第１領域についての管理情報を書き込む。つまり、更新部４０は、選択した使用中エントリに、対象第１領域を識別する識別情報と、対象第２領域のみを書き込み済みとし、他の領域を未書き込みとしたマップ情報とを含む管理情報を、上書きする。例えば、更新部４０は、アドレス情報に含まれるページ番号と、アドレス情報に含まれるキャッシュライン番号に対応するビットのみを１とし、他のビットを０としたマップ情報とを、選択した使用中エントリに上書きする。
【００５９】
これにより、更新部４０は、選択した管理情報（例えば最も古い管理情報）を管理テーブルから消去して、新たな管理情報を管理テーブルに格納することができる。そして、更新部４０は、第１データが書き込まれた後の不揮発メモリ１４の状態を管理テーブルに反映することができる。
【００６０】
更新部４０は、Ｓ２４を終了すると、Ｓ２５に処理を進める。Ｓ２５において、更新部４０は、管理テーブルから消去した管理情報により管理されていた第１領域についてのカウンタ値を更新する。例えば、更新部４０は、カウンタテーブルにおける、消去する管理情報に含まれていたページ番号に対応するカウンタ値を、１増加させる。
【００６１】
Ｓ２５の処理を実行することにより、更新部４０は、管理テーブルを用いた管理を終了した第１領域について、データを追記したと仮定して、書き換え回数を更新することができる。これにより、更新部４０は、管理テーブルによりアクティブに管理がされていない第１領域について、書き換え回数を推定することができる。
【００６２】
なお、更新部４０は、Ｓ２４とＳ２５の処理を逆に実行してもよい。更新部４０は、Ｓ２４およびＳ２５の処理を終了した場合、処理を図８のフローに戻す。
【００６３】
以上のように、本実施形態に係る情報処理装置１０は、不揮発メモリ１４に含まれる第１領域の数より少ない数の管理情報を記憶する。これにより、本実施形態に係る情報処理装置１０によれば、管理テーブルのエントリ数を少なくすることができるので、管理情報記憶部３８の記憶容量を少なくすることができる。
【００６４】
さらに、本実施形態に係る情報処理装置１０は、管理テーブルにより管理されていない第１領域については、管理テーブルから管理情報が消去されたタイミングでカウンタ値を更新する。これにより、本実施形態に係る情報処理装置１０によれば、不揮発メモリ１４に含まれる全ての第１領域についての書き換え回数を精度良く推定することができる。
【００６５】
（第２実施形態）
つぎに、第２実施形態に係る情報処理装置１０について説明する。第２実施形態に係る情報処理装置１０は、第１実施形態と略同一の機能および構成を有するので、同一の機能および構成を有するブロックについては同一の符号を付けて詳細な説明を省略する。
【００６６】
図１０は、第２実施形態に係る不揮発メモリ１４の構成を示す図である。第２実施形態に係る不揮発メモリ１４は、複数の第１領域を含む。第２実施形態において、第１領域は、ブロックと呼ばれる単位である。ブロックは、例えば、１Ｍバイトであってよい。
【００６７】
複数の第１領域のそれぞれは、複数の第２領域を含む。第２実施形態において、第２領域は、ページと呼ばれる単位である。ページは、例えば、４Ｋバイトである。
【００６８】
複数の第２領域のそれぞれは、複数の第３領域を含む。第２実施形態において、第３領域は、キャッシュラインと呼ばれる単位である。キャッシュラインは、例えば、６４バイトである。なお、第１領域は、キャッシュラインよりも小さい単位（例えば、バイト単位）であってもよい。
【００６９】
図１１は、第２実施形態に係る不揮発メモリ１４に対してデータの書き込み先を指定するためのアドレス情報の一例を示す図である。第２実施形態において、管理装置２０は、アクセス制御装置１８から図１１に示すような、４つのビットフィールドに分割されたアドレス情報を取得する。
【００７０】
アドレス情報の上位から１番目のビットフィールドは、データが書き込まれるブロック（対象第１領域）の位置を示す。アドレス情報の上位から２番目のビットフィールドは、対象第１領域における、データが書き込まれるページ（対象第２領域）の位置を示す。アドレス情報の上位から３番目のビットフィールドは、対象第２領域における、データが書き込まれるキャッシュライン（対象第３領域）の位置を示す。アドレス情報の上位から４番目のビットフィールドは、対象第３領域における、データが書き込まれるバイトの位置を示す。
【００７１】
従って、管理装置２０は、取得したアドレス情報における特定のビットフィールドの値を取得することにより、データが書き込まれるブロック（対象第１領域）、ページ（対象第２領域）およびキャッシュライン（対象第３領域）を特定することができる。
【００７２】
図１２は、第２実施形態に係る管理装置２０の機能構成を示す図である。管理装置２０は、カウンタ記憶部３６と、第１管理情報記憶部５２と、第２管理情報記憶部５４と、更新部４０とを含む。
【００７３】
カウンタ記憶部３６は、カウンタテーブルを記憶する。カウンタテーブルについては、図１３を参照してさらに説明する。
【００７４】
第１管理情報記憶部５２は、第１管理テーブルを記憶する。第１管理テーブルは、所定個のエントリを有する。それぞれのエントリには、第１管理情報を格納することができる。すなわち、第１管理テーブルは、所定個の第１領域のそれぞれについての第１管理情報を格納可能である。第１管理テーブルが格納できる第１管理情報の数は、不揮発メモリ１４に含まれる第１領域の数より少ない。第１管理テーブルは、処理回路１２が不揮発メモリ１４に最近アクセスした第１領域（アクティブな第１領域）についての第１管理情報を格納する。第１管理テーブルは、エントリが一杯となった場合、例えば最も古い第１管理情報を消去して、新しい第１管理情報を格納する。
【００７５】
第１管理情報は、対応する第１領域に含まれる複数の第２領域のそれぞれが書き込み済みか未書き込みかを示す。なお、第１管理テーブルおよび第１管理情報については、図１４を参照してさらに説明する。
【００７６】
第２管理情報記憶部５４は、第２管理テーブルを記憶する。第２管理テーブルは、所定個のエントリを有する。それぞれのエントリには、第２管理情報を格納することができる。すなわち、第２管理テーブルは、所定個の第２領域のそれぞれについての第２管理情報を格納可能である。第２管理テーブルが格納できる第２管理情報の数は、不揮発メモリ１４に含まれる第２領域の数より少ない。第２管理テーブルは、処理回路１２が最近アクセスした第２領域（アクティブな第２領域）についての第２管理情報を格納する。第２管理テーブルは、エントリが一杯となった場合、例えば最も古い第２管理情報を消去して、新しい第２管理情報を格納する。
【００７７】
第２管理情報は、対応する第２領域に含まれる複数の第３領域のそれぞれが書き込み済みか未書き込みかを示す。なお、第２管理テーブルおよび第２管理情報については、図１５を参照してさらに説明する。
【００７８】
更新部４０は、カウンタテーブルに格納されたそれぞれのカウンタ値、第１管理テーブルに格納されたそれぞれの第１管理情報および第２管理テーブルに格納されたそれぞれの第２管理情報を更新する。更新部４０の具体的な処理手順については、図１６から図１９を参照してさらに説明する。
【００７９】
図１３は、第２実施形態に係るカウンタテーブルの一例を示す図である。カウンタテーブルは、不揮発メモリ１４に含まれる複数の第１領域（ブロック）を識別する第１識別情報（例えばブロック番号）のそれぞれに対応させて、カウンタ値を格納する。
【００８０】
図１４は、第２実施形態に係る第１管理テーブルの一例を示す図である。第１管理テーブルは、第１管理情報を格納するための所定個のエントリを有する。例えば、図１４の例において、第１管理テーブルは、６４個のエントリを有する。
【００８１】
それぞれのエントリは、第１管理情報を格納する。第１管理情報は、第１識別情報と、第１マップ情報とを含む。
【００８２】
第１識別情報は、その第１管理情報が管理する第１領域（ブロック）を識別するための番号（ブロック番号）である。第１マップ情報は、対応する第１領域（ブロック）に含まれる複数の第２領域（ページ）のそれぞれが、書き込み済みか未書き込みかを示す。第１マップ情報は、第１領域（ブロック）に含まれる複数の第２領域（ページ）のそれぞれに対応したビットを含む。
【００８３】
例えば、第１マップ情報は、ブロックに含まれるページ番号に対応したビットを含む。それぞれのビットは、例えば１である場合、対応するページが、書き込み済みであることを示す。また、それぞれのビットは、例えば０である場合、対応するページが、未書き込みであることを示す。
【００８４】
なお、第１管理テーブルは、全てのエントリに第１管理情報が格納されていなくてよい。つまり、第１管理テーブルは、未使用エントリが有ってもよい。
【００８５】
図１５は、第２実施形態に係る第２管理テーブルの一例を示す図である。第２管理テーブルは、第２管理情報を格納するための所定個のエントリを有する。例えば、図１５の例において、第２管理テーブルは、６４個のエントリを有する。
【００８６】
それぞれのエントリは、第２管理情報を格納する。第２管理情報は、第２識別情報と、第２マップ情報とを含む。
【００８７】
第２識別情報は、その第２管理情報が管理する第２領域（ページ）およびその第２領域を含む第１領域（ブロック）を識別するための番号（ブロック番号およびページ番号）である。第２マップ情報は、対応する第２領域（ページ）に含まれる複数の第３領域（キャッシュライン）のそれぞれが、書き込み済みか未書き込みかを示す。第２マップ情報は、第２領域（ページ）に含まれる複数の第３領域（キャッシュライン）のそれぞれに対応したビットを含む。
【００８８】
例えば、第２マップ情報は、ページに含まれるキャッシュライン番号に対応したビットを含む。それぞれのビットは、例えば１である場合、対応するキャッシュラインが、書き込み済みであることを示す。また、それぞれのビットは、例えば０である場合、対応するキャッシュラインが、未書き込みであることを示す。
【００８９】
なお、第２管理テーブルは、全てのエントリに第２管理情報が格納されていなくてよい。つまり、第２管理テーブルは、未使用エントリが有ってもよい。
【００９０】
図１６は、第２実施形態に係る更新部４０による処理の流れを示すフローチャートである。更新部４０は、図１６から図１９に示すフローチャートに従って、カウンタテーブル、第１管理テーブルおよび第２管理テーブルを更新する。
【００９１】
まず、Ｓ４１において、更新部４０は、不揮発メモリ１４にデータの書き込みがされるか否かを検出する。更新部４０は、書き込みがされない場合（Ｓ４１のＮｏ）、処理をＳ４１で待機し、書き込みがされる場合（Ｓ４１のＹｅｓ）、処理をＳ４２に進める。
【００９２】
Ｓ４２において、更新部４０は、書き込み対象のデータ（第１データ）が書き込まれる第２領域である対象第２領域についての第２管理情報が、第２管理テーブルに存在するか否かを判断する。
【００９３】
第２管理テーブルに対象第２領域についての第２管理情報が存在しない場合（Ｓ４２のＮｏ）、更新部４０は、処理をＳ４３に進める。Ｓ４３において、更新部４０は、第２管理情報生成処理を実行する。第２管理情報生成処理については、図１７を参照して説明する。更新部４０は、第２管理情報生成処理を終了した場合、本フローを終了し、次の書込を待機する。
【００９４】
第２管理テーブルに対象第２領域についての第２管理情報が存在する場合（Ｓ４２のＹｅｓ）、更新部４０は、処理をＳ４４に進める。Ｓ４４において、更新部４０は、対象第２領域についての第２管理情報を参照して、第１データが書き込まれる第３領域である対象第３領域が、書き込み済みであるか否かを判断する。
【００９５】
更新部４０は、対象第３領域の状態が未書き込みの場合（Ｓ４４のＮｏ）、処理をＳ４５に進める。Ｓ４５において、更新部４０は、対象第２領域についての第２管理情報に示された対象第３領域の状態を、未書き込みから、書き込み済みに変更する。これにより、更新部４０は、第１データを書き込んだ後の不揮発メモリ１４の状態を、第２管理テーブルに反映することができる。更新部４０は、Ｓ４５の処理を終了した場合、本フローを終了し、次の書込を待機する。
【００９６】
更新部４０は、対象第３領域が書き込み済みの場合（Ｓ４４のＹｅｓ）、処理をＳ４６に進める。Ｓ４６において、更新部４０は、対象第２領域についての第２管理情報に示された対象第３領域以外の状態を、未書き込みに変更する。つまり、更新部４０は、対象第２領域についての第２管理情報に示された対象第３領域のみを書き込み済みとし、他の領域を未書き込みとする。
【００９７】
これにより、更新部４０は、対象第３領域に第１データを書き込んだ後の不揮発メモリ１４の状態を、第２管理テーブルに反映することができる。
【００９８】
更新部４０は、Ｓ４６を終了すると、Ｓ４７に処理を進める。Ｓ４７において、更新部４０は、対象第２領域を含む第１領域についての第１管理情報に示された、対象第２領域に対する状態を更新する状態更新処理を実行する。対象第２領域に対する状態を更新する状態更新処理については、図１８を参照してさらに説明する。これにより、更新部４０は、対象第２領域に対してデータを追記した後の状態を、第１管理テーブルに反映することができる。
【００９９】
なお、更新部４０は、Ｓ４６とＳ４７の処理を逆に実行してもよい。更新部４０は、Ｓ４６およびＳ４７の処理を終了した場合、本フローを終了し、次の書込を待機する。
【０１００】
図１７は、第２実施形態に係る更新部４０による第２管理情報生成処理の流れを示すフローチャートである。更新部４０は、図１６のＳ４３における第２管理情報生成処理において、図１７に示すＳ５１からＳ５５の処理を実行する。
【０１０１】
まず、Ｓ５１において、更新部４０は、第２管理テーブルに未使用エントリが有るか否かを判断する。
【０１０２】
未使用エントリが有る場合（Ｓ５１のＹｅｓ）、更新部４０は、処理をＳ５２に進める。Ｓ５２において、更新部４０は、未使用エントリに対象第２領域についての第２管理情報を書き込む。つまり、更新部４０は、対象第２領域を識別する第２識別情報と、対象第３領域のみを書き込み済みとし、他の領域を未書き込みとした第２マップ情報とを含む第２管理情報を、未使用エントリに書き込む。
【０１０３】
これにより、更新部４０は、第１データが書き込まれた後の不揮発メモリ１４の状態を第２管理テーブルに反映することができる。更新部４０は、Ｓ５２の処理を終了した場合、処理を図１６のフローに戻す。
【０１０４】
未使用エントリが無い場合（Ｓ５１のＮｏ）、更新部４０は、処理をＳ５３に進める。Ｓ５３において、更新部４０は、第２管理テーブルから、何れかの使用中エントリを選択する。例えば、更新部４０は、最も古い第２管理情報を格納した使用中エントリを選択する。なお、更新部４０は、他のアルゴリズムに従って何れかの使用中エントリを選択してもよい。
【０１０５】
更新部４０は、Ｓ５３を終了すると、Ｓ５４に処理を進める。Ｓ５４において、更新部４０は、選択した使用中エントリに書き込まれている第２管理情報を消去して、対象第２領域についての第２管理情報を書き込む。つまり、更新部４０は、選択した使用中エントリに、対象第２領域を識別する第２識別情報と、対象第３領域のみを書き込み済みとし、他の領域を未書き込みとした第２マップ情報とを含む第２管理情報を、上書きする。
【０１０６】
これにより、更新部４０は、選択した第２管理情報を第２管理テーブルから消去して、新たな第２管理情報を第２管理テーブルに格納することができる。そして、更新部４０は、第１データが書き込まれた後の不揮発メモリ１４の状態を第２管理テーブルに反映することができる。
【０１０７】
更新部４０は、Ｓ５４を終了すると、Ｓ５５に処理を進める。Ｓ５５において、更新部４０は、消去第２領域を含む第１領域についての第１管理情報における、消去第２領域に対する状態を更新する状態更新処理を実行する。消去第２領域は、Ｓ５４での消去対象の第２管理情報により管理されていた第２領域である。消去第２領域に対する状態を更新する状態更新処理については、図１８を参照してさらに説明する。
【０１０８】
Ｓ５５の処理を実行することにより、更新部４０は、第２管理テーブルを用いた管理を終了した第２領域について、データを追記したと仮定して、書き込みをしたか否かを示す状態を更新することができる。これにより、更新部４０は、第２管理テーブルによりアクティブに管理がされていない第２領域について、書き込みをしているか未書き込みかを推定することができる。
【０１０９】
なお、更新部４０は、Ｓ５４とＳ５５の処理を逆に実行してもよい。更新部４０は、Ｓ５４およびＳ５５の処理を終了した場合、処理を図１６のフローに戻す。
【０１１０】
図１８は、第２実施形態に係る更新部４０による状態更新処理の流れを示すフローチャートである。更新部４０は、図１６のＳ４７および図１７のＳ５５における状態更新処理において、図１８に示すＳ６２からＳ６７の処理を実行する。
【０１１１】
Ｓ６２において、更新部４０は、対象第２領域または消去第２領域を含む第１領域（更新対象第１領域）についての第１管理情報が、第１管理テーブルに存在するか否かを判断する。
【０１１２】
更新対象第１領域についての第１管理情報が存在しない場合（Ｓ６２のＮｏ）、更新部４０は、処理をＳ６３に進める。Ｓ６３において、更新部４０は、第１管理情報生成処理を実行する。第１管理情報生成処理については、図１９を参照して説明する。更新部４０は、第１管理情報生成処理を終了した場合、本フローを終了し、処理を図１６または図１７のフローに戻す。
【０１１３】
更新対象第１領域についての第１管理情報が存在する場合（Ｓ６２のＹｅｓ）、更新部４０は、処理をＳ６４に進める。
【０１１４】
Ｓ６４において、更新部４０は、更新対象第１領域についての第１管理情報に示された、対象第２領域または消去第２領域の状態が、書き込み済みであるか否かを判断する。
【０１１５】
更新部４０は、対象第２領域または消去第２領域の状態が未書き込みの場合（Ｓ６４のＮｏ）、処理をＳ６５に進める。Ｓ６５において、更新部４０は、更新対象第１領域についての第１管理情報に示された、対象第２領域または消去第２領域の状態を、未書き込みから、書き込み済みに変更する。
【０１１６】
これにより、更新部４０は、第１データを書き込んだ後の不揮発メモリ１４の状態を、第１管理テーブルに反映することができる。または、更新部４０は、消去第２領域にデータを書き込んだと仮定した場合における不揮発メモリ１４の推定状態を、第１管理テーブルに反映することができる。更新部４０は、Ｓ６５の処理を終了した場合、本フローを終了し、処理を図１６または図１７のフローに戻す。
【０１１７】
更新部４０は、対象第２領域または消去第２領域の状態が書き込み済みの場合（Ｓ６４のＹｅｓ）、処理をＳ６６に進める。Ｓ６６において、更新部４０は、更新対象第１領域についての第１管理情報における対象第２領域または消去第２領域以外の状態を、未書き込みに変更する。つまり、更新部４０は、更新対象第１領域についての第１管理情報における対象第２領域または消去第２領域のみを書き込み済みとし、他の領域を未書き込みとする。
【０１１８】
これにより、更新部４０は、対象第２領域に第１データを書き込んだ後の不揮発メモリ１４の状態を、第１管理テーブルに反映することができる。または、更新部４０は、消去第２領域にデータを書き込んだと仮定した場合における不揮発メモリ１４の推定状態を第１管理テーブルに反映することができる。
【０１１９】
更新部４０は、Ｓ６６を終了すると、Ｓ６７に処理を進める。Ｓ６７において、更新部４０は、更新対象第１領域についてのカウンタ値を更新する。例えば、更新部４０は、カウンタテーブルにおける、更新対象第１領域についてのカウンタ値を、１増加させる。これにより、更新部４０は、更新対象第１領域の書き換え回数を更新することができる。
【０１２０】
なお、更新部４０は、Ｓ６６とＳ６７の処理を逆に実行してもよい。更新部４０は、Ｓ６６およびＳ６７の処理を終了した場合、本フローを終了し、処理を図１６または図１７のフローに戻す。
【０１２１】
図１９は、第２実施形態に係る更新部４０による第１管理情報生成処理の流れを示すフローチャートである。更新部４０は、図１８のＳ６３における第１管理情報生成処理において、図１９に示すＳ７１からＳ７５の処理を実行する。
【０１２２】
まず、Ｓ７１において、更新部４０は、第１管理テーブルに未使用エントリが有るか否かを判断する。
【０１２３】
未使用エントリが有る場合（Ｓ７１のＹｅｓ）、更新部４０は、処理をＳ７２に進める。Ｓ７２において、更新部４０は、未使用エントリに、更新対象第１領域についての第１管理情報を書き込む。つまり、更新部４０は、更新対象第１領域を識別する第１識別情報と、対象第２領域または消去第２領域のみを書き込み済みとし、他の領域を未書き込みとした第１マップ情報とを含む第１管理情報を、未使用エントリに書き込む。
【０１２４】
これにより、更新部４０は、対象第３領域に第１データが書き込まれた後の不揮発メモリ１４の状態、または、消去第２領域の管理を終了したことに伴い消去第２領域にデータを書き込んだと仮定した状態を、第１管理テーブルに反映することができる。更新部４０は、Ｓ７２の処理を終了した場合、処理を図１８のフローに戻す。
【０１２５】
未使用エントリが無い場合（Ｓ７１のＮｏ）、更新部４０は、処理をＳ７３に進める。Ｓ７３において、更新部４０は、第１管理テーブルから、何れかの使用中エントリを選択する。例えば、更新部４０は、最も古い第１管理情報を格納した使用中エントリを選択する。なお、更新部４０は、他のアルゴリズムに従って何れかの使用中エントリを選択してもよい。
【０１２６】
更新部４０は、Ｓ７３を終了すると、Ｓ７４に処理を進める。Ｓ７４において、更新部４０は、選択した使用中エントリに書き込まれている第１管理情報を消去して、更新対象第１領域についての第１管理情報を書き込む。例えば、更新部４０は、選択した使用中エントリに、更新対象第１領域を識別する第１識別情報と、対象第３領域または消去第２領域のみを書き込み済みとし、他の領域を未書き込みとした第１マップ情報とを含む第１管理情報を、上書きする。
【０１２７】
これにより、更新部４０は、選択した第１管理情報を第１管理テーブルから消去することができる。そして、更新部４０は、対象第３領域に第１データが書き込まれた後の不揮発メモリ１４の状態、または、消去第２領域にデータを書き込んだと仮定した場合における不揮発メモリ１４の推定状態を第１管理テーブルに反映することができる。
【０１２８】
更新部４０は、Ｓ７４を終了すると、Ｓ７５に処理を進める。Ｓ７５において、更新部４０は、消去対象の第１管理情報により管理されていた第１領域についてのカウンタ値を更新する。例えば、更新部４０は、消去対象の第１管理情報により管理されていた第１領域についてのカウンタ値を、１増加させる。
【０１２９】
Ｓ７５を実行することにより、更新部４０は、第１管理テーブルを用いた管理を終了した第１領域について、データを追記したと仮定して、書き換え回数を更新することができる。これにより、更新部４０は、第１管理テーブルによりアクティブに管理がされていない第１領域について、書き換え回数を推定することができる。
【０１３０】
なお、更新部４０は、Ｓ７４とＳ７５の処理を逆に実行してもよい。更新部４０は、Ｓ７４およびＳ７５の処理を終了した場合、処理を図１８のフローに戻す。
【０１３１】
以上のように、第２実施形態に係る情報処理装置１０は、不揮発メモリ１４を、サイズの異なる２個の領域を用いて、木構造で分割して、ウェアレベリングに必要な第１領域毎の書き換え回数を管理する。これにより、情報処理装置１０によれば、第３領域（キャッシュライン）のデータサイズとブロックのデータサイズとの差が大きい場合であっても、効率良く書き換え回数を管理することができる。
【０１３２】
また、情報処理装置１０は、サイズの異なる２個の領域に限らず、サイズの異なる３個以上の領域を用いて、ウェアレベリングに必要な第１領域毎の書き換え回数を管理してもよい。
【０１３３】
(変形例)
以下、第１実施形態および第２実施形態に対する変形例を説明する。
【０１３４】
図２０は、ページ等の単位でデータを一括書き込みをすることが可能な場合における、管理装置２０のフローチャートである。処理回路１２は、ＤＭＡ（Ｄｉｒｅｃｔ  Ｍｅｍｏｒｙ  Ａｃｃｓｓ）等を用いて、第１領域（例えばページまたはブロック）の単位でデータを一括して書き込んでもよい。このように第１領域に対してデータを一括して書き込み可能な場合、管理装置２０は、図２０に示すフローに従って処理を行ってよい。
【０１３５】
まず、Ｓ８１において、更新部４０は、不揮発メモリ１４にデータの書き込みがされるか否かを判断する。更新部４０は、書き込みがされない場合（Ｓ８１のＮｏ）、処理をＳ８１で待機し、書き込みがされる場合（Ｓ８１のＹｅｓ）、処理をＳ８２に進める。
【０１３６】
Ｓ８２において、更新部４０は、第１領域（例えばページまたはブロック）の単位でデータが一括して書き込みされるか否かを判断する。データが一括して書き込まれない場合、すなわち、第３領域（キャッシュライン）の単位でデータが書き込まれる場合（Ｓ８２のＮｏ）、更新部４０は、図８のＳ１２または図１６のＳ４１に処理を進める。そして、以後、更新部４０は、第１実施形態または第２実施形態で説明した処理を実行する。
【０１３７】
データが一括して書き込まれる場合、すなわち、第１領域（例えばページまたはブロック）の単位でデータが書き込まれる場合（Ｓ８２のＹｅｓ）、更新部４０は、処理をＳ８３に進める。
【０１３８】
Ｓ８３において、更新部４０は、カウンタテーブルにおける、データが書き込まれる第１領域に対応するカウンタ値を更新する。例えば、更新部４０は、対応するカウンタ値を１増加させる。この場合において、複数の第１領域にわたって連続してデータが書き込まれる場合、更新部４０は、それぞれの第１領域の書き込み開始タイミング等に同期させて、対応するカウンタ値を更新する。
【０１３９】
続いて、Ｓ８４において、更新部４０は、データを書き込んだ第１領域（または第１領域および第２領域）を管理する管理情報（または第１管理情報および第２管理情報）が、管理テーブル（または第１管理テーブルおよび第２管理テーブル）に存在するか否かを判断する。対応する管理情報（または第１管理情報および第２管理情報）が存在しない場合（Ｓ８４のＮｏ）、更新部４０は、本フローを終了して、次の書込を待機する。
【０１４０】
対応する管理情報（または第１管理情報および第２管理情報）が存在する場合（Ｓ８４のＹｅｓ）、更新部４０は、処理をＳ８５に進める。Ｓ８５において、更新部４０は、対応する管理情報（または第１管理情報および第２管理情報）を消去する。そして、Ｓ８５を終了すると、更新部４０は、本フローを終了して、次の書込を待機する。
【０１４１】
以上の処理を実行することにより、管理装置２０は、第１領域（例えばページまたはブロック）の単位でデータが一括して書き込まれる場合に、容易にカウンタテーブルおよび管理テーブルを更新することができる。
【０１４２】
図２１は、識別情報の変形例を示す図である。第１実施形態および第２実施形態において、管理装置２０は、ページ番号を用いて管理情報を識別していた。これに代えて、管理装置２０は、ＴＬＢ（Ｔｒａｎｓｌａｔｉｏｎ  Ｌｏｏｋａｓｉｄｅ  Ｂｕｆｆｅｒ）により管理されるアドレスに対応させて、管理情報を記憶してもよい。
【０１４３】
処理回路１２は、ＴＬＢと呼ばれる仮想記憶機構を有する。ＴＬＢは、仮想アドレスから物理アドレスへアドレス変換を行うために、ページにおける論理アドレスと物理アドレスとの対応を示す対応関係情報を記憶する。しかし、ＴＬＢは、保有しているエントリが限られているので、対応関係情報を必要に応じて入れ替える。ＴＬＢは、例えば、直近において高い頻度でアクセスされるページについての対応関係情報を優先して記憶する。
【０１４４】
そこで、管理装置２０は、ＴＬＢに対応関係情報が記憶されているページについて、管理テーブルに記憶させてもよい。例えば、管理装置２０は、ＴＬＢのエントリの数と同一の数のエントリを有する管理テーブル（または第２管理テーブル）を記憶する。そして、更新部４０は、ＴＬＢのエントリから対応関係情報が追い出されたタイミングにおいて、対応する管理テーブル（または第２管理テーブル）に記憶されている管理情報（または第２管理情報）を消去する。この場合、更新部４０は、管理情報（または第２管理情報）が他の管理情報に上書きされた場合と同様の処理を実行する。なお、管理テーブル（または第２管理テーブル）は、ＴＬＢのエントリと同一のエントリを有するので、識別情報を格納するエントリを含まなくてもよい。
【０１４５】
管理装置２０は、このように管理テーブルに管理情報を格納することにより、処理回路１２に同期して効率良くウェアレベリングに必要な第１領域毎の書き換え回数を管理することができる。
【０１４６】
図２２は、情報処理装置１０の構成の第１変形例を示す図である。例えば、処理回路１２がメモリコントローラ１６を内部に備えていてもよい。この場合、管理装置２０は、メモリコントローラ１６とともに、処理回路１２の内部に備えられる。また、管理装置２０は、処理回路１２の内部において、メモリコントローラ１６とは別個に設けられていてもよい。
【０１４７】
図２３は、情報処理装置１０の構成の第２変形例を示す図である。また、例えば、情報処理装置１０は、処理回路１２と、不揮発メモリモジュール７０とを備えてもよい。この場合、不揮発メモリモジュール７０は、不揮発メモリ１４と、メモリコントローラ１６とを有する。この場合、管理装置２０は、メモリコントローラ１６とともに、不揮発メモリモジュール７０の内部に備えられる。なお、管理装置２０は、不揮発メモリモジュール７０の内部において、メモリコントローラ１６とは別個に設けられていてもよい。
【０１４８】
図２４は、情報処理装置１０の構成の第３変形例を示す図である。また、例えば、情報処理装置１０は、処理回路１２、不揮発メモリ１４およびメモリコントローラ１６とは別個に、管理装置２０をさらに備えていてもよい。この場合、管理装置２０は、不揮発メモリ１４に対する書き込みアドレスを取得可能に接続されたハードウェア装置として実現される。
【０１４９】
以上、本発明のいくつかの実施形態を説明したが、これらの実施形態は、例として提示したものであり、発明の範囲を限定することは意図していない。これら新規な実施形態は、その他の様々な形態で実施されることが可能であり、発明の要旨を逸脱しない範囲で、種々の省略、置き換え、変更を行うことができる。これら実施形態やその変形は、発明の範囲や要旨に含まれるとともに、請求の範囲に記載された発明とその均等の範囲に含まれる。
【符号の説明】
【０１５０】
１０  情報処理装置
１２  処理回路
１４  不揮発メモリ
１６  メモリコントローラ
１８  アクセス制御装置
２０  管理装置
２８  要求受付部
３０  要求キュー
３２  要求実行部
３６  カウンタ記憶部
３８  管理情報記憶部
４０  更新部
５２  第１管理情報記憶部
５４  第２管理情報記憶部
７０  不揮発メモリモジュール