(57)【要約】【課題】ＳＬＣフラッシュメモリとＭＬＣフラッシュメモリとのそれぞれのメリットを状況に応じて得る。【解決手段】実施の形態によるメモリシステム１は、ＭＬＣフラッシュメモリ１１２と、ブロック管理部１０２と、転記部（１０７、１０８および１０９）と、を備える。ＭＬＣフラッシュメモリ１１２は、ＳＬＣモードおよびＭＬＣモードのいずれでもデータの書込みが可能な複数のブロックを含む。ブロック管理部１０２は、有効データを格納しないブロックをフリーブロックとして管理する。転記部は、ブロック管理部１０２が管理するフリーブロックの数が所定の閾値Ｔｂｆ以下である場合、有効データを格納する１つ以上の使用ブロックを転記元ブロックとして選択し、転記元ブロックに格納されている有効データをフリーブロックにＭＬＣモードで転記する。【選択図】図５
2012068986.tif 000002
【特許請求の範囲】
【請求項１】
複数の第１記憶領域を有し、前記複数の第１記憶領域のうち有効データが記憶されていない領域である第２記憶領域と、前記複数の第１記憶領域のうちホストから書き込み要求を受けたデータが書き込まれた領域である第３記憶領域と、前記複数の第１記憶領域のうち前記第３記憶領域に記憶されたデータが書込まれた領域である第４記憶領域とを持つことが可能な不揮発性の半導体メモリと、
前記複数の第１記憶領域のうちいずれが前記第２記憶領域であるかを示す情報である第１管理情報を記憶する第１記憶部と、
前記複数の第１記憶領域のうちいずれが前記第３記憶領域であるかを示す情報である第２管理情報を記憶する第２記憶部と、
前記複数の第１記憶領域のうちいずれが前記第４記憶領域であるかを示す情報である第３管理情報を記憶する第３記憶部と、
ホストから書き込み要求を受けたデータである書込要求データを受け付ける第１受付部と、
前記第１管理情報に基づいて、１以上の第２記憶領域からいずれか１つを取得する取得部と、
前記書込要求データを前記取得部で取得された前記第２記憶領域に第１モードで書込む第１書込部と、
前記第１記憶領域の数が第１閾値以下の場合に、前記第２管理情報に基づいて、複数の前記第３記憶領域から１以上の記憶領域を選択するか、または、前記第３管理情報に基づいて、複数の前記第４記憶領域から１以上の記憶領域を選択する選択部と、
前記選択部によって選択された前記記憶領域に記憶された有効データを、前記取得部によって取得された前記第２記憶領域に第２モードで書込む第２書込部と、
前記第２書込部が書き込んだ場合に、前記選択された記憶領域を前記第２管理情報または前記第３管理情報から削除し、当該選択された記憶領域を前記第１管理情報に追加する管理情報更新部と、
ホストからデータの読み出し要求を受ける第２受付部と、
前記読み出し要求を受けたデータが前記第３記憶領域に書き込まれている場合は、前記第１モードで読み出し、前記読み出し要求を受けたデータが前記第４記憶領域に書き込まれている場合は、前記第２モードで読み出す読出部と、
を有し、
前記有効データとは、論理アドレスに対応付けられた物理アドレスに記憶されたデータであり、
前記論理アドレスとは、ホストから指定されたアドレスであり、
前記物理アドレスとは、半導体メモリの記憶領域でのデータの記憶位置を示し、
前記第１モードは、前記第２モードよりも、書込みまたは読み出しが速く、
前記第１モードは、前記第２モードよりも、同一記憶領域に書込みされうる情報の最大量が少ないことを特徴とするメモリシステム。
【請求項２】
第５記憶領域は、複数の第３記憶領域を含む領域であり、
第６記憶領域は、複数の第４記憶領域を含む領域であり、
前記選択部は、前記複数の第３記憶領域を前記第５記憶領域から選択、または、前記複数の第４記憶領域を前記第６記憶領域から選択し、
前記第２書込部は、選択された記憶領域に記憶された有効データを、１つの第２記憶領域に書込み、
前記第２書込部で書き込まれる有効データは、第３記憶領域に記憶されたデータから構成されるか、または、第４記憶領域に記憶されたデータから構成されることを特徴とする請求項１に記載のメモリシステム。
【請求項３】
前記選択部は、前記第６記憶領域の総有効データ率が所定の閾値より小さい場合、当該第６記憶領域内の第４記憶領域を選択し、
前記第６記憶領域の総有効データ率は、当該第６記憶領域の総容量に対する当該第６記憶領域に格納された有効データの総データ量の率であることを特徴とする請求項２に記載のメモリシステム。
【請求項４】
前記選択部は、前記第５記憶領域と前記第６記憶領域のうち、総有効データ率が小さい記憶領域である前記第５記憶領域に含まれる前記第３記憶領域、または、前記第６記憶領域に含まれる前記第４記憶領域を選択し、
前記第５記憶領域の総有効データ率は、当該第５記憶領域の総容量に対する当該第５記憶領域に格納された有効データの総データ量の率であり、
前記第６記憶領域の総有効データ率は、当該第６記憶領域の総容量に対する当該第６記憶領域に格納された有効データの総データ量の率であることを特徴とする請求項２に記載のメモリシステム。
【請求項５】
各ブロックの動作モードに応じたブロック容量を元に前記第５記憶領域の前記総有効データ率または前記第６記憶領域の前記総有効データ率を算出するデータ量管理部とを有することを特徴とする請求項４に記載のメモリシステム。
【請求項６】
前記半導体メモリは、複数の記憶セルを有するＭＬＣ（Ｍｕｌｔｉ−Ｌｅｖｅｌ  Ｃｅｌｌ）フラッシュメモリであり、
前記ＭＬＣフラッシュメモリは、１セル当たり１ビットのデータを記憶し、または、１セル当たり複数ビットのデータを記憶し、
前記第１モードは、２値モードで１セル当たり１ビットのデータを前記ＭＬＣフラッシュメモリに書込み、
前記第２モードは、多値モードで１セル当たり複数ビットのデータを前記ＭＬＣフラッシュメモリに書き込むことを特徴とする請求項１に記載のメモリシステム。
【発明の詳細な説明】
【技術分野】
【０００１】
本発明の実施形態は、メモリシステムに関する。
【背景技術】
【０００２】
ＮＡＮＤフラッシュメモリの容量を大きくする技術として多値記録（ＭＬＣ：Ｍｕｌｔｉ  −Ｌｅｖｅｌ  Ｃｅｌｌ）方式がある。本開示では、ＭＬＣ方式のフラッシュメモリをＭＬＣフラッシュメモリといい、２値記録（ＳＬＣ：Ｓｉｎｇｌｅ−Ｌｅｖｅｌ  Ｃｅｌｌ）方式のフラッシュメモリをＳＬＣフラッシュメモリという。ＳＬＣ方式（以下、ＳＬＣモードという）では、記録単位である１つのセルに１ビットが記録されるのに対し、ＭＬＣ方式（以下、ＭＬＣモードという）では、１つのセルにＮビット（Ｎ＞１）を記録することができる。したがって、例えば２ビット記録のＭＬＣフラッシュメモリでは、１つのセルが４値を表すことができ、３ビット記録のＭＬＣフラッシュメモリでは、１つのセルが８値を表すことができる。
【０００３】
このような同じ記憶領域で比較的記憶する情報量が多いフラッシュメモリは、同じ記憶領域で比較的記憶する情報量が少ないフラッシュメモリよりも体積あたりの記録容量を大きくでき、また、記録容量あたりのコストを抑えられるというメリットがある。一方、同じ記憶領域で比較的記憶する情報量が少ないフラッシュメモリは、同じ記憶領域で比較的記憶する情報量が多いフラッシュメモリに比べ、書込みや読出しのアクセス時間が短く、また、信頼性が高いというメリットがある。
【先行技術文献】
【特許文献】
【０００４】
【特許文献１】特開２００８−２７６７３３号公報
【特許文献２】特開２０１０−１５２７７８号公報
【特許文献３】特開２００８−２５７７７３号公報
【発明の概要】
【発明が解決しようとする課題】
【０００５】
そこで、本発明の実施の形態では、同じ記憶領域で比較的記憶する情報量が少ないフラッシュメモリと同じ記憶領域で比較的記憶する情報量が多いフラッシュメモリとのそれぞれのメリットを状況に応じて得ることができるメモリシステムを開示する。
【課題を解決するための手段】
【０００６】
実施の形態によるメモリシステムは、複数の第１記憶領域を有し、前記複数の第１記憶領域のうち有効データが記憶されていない領域である第２記憶領域と、前記複数の第１記憶領域のうちホストから書き込み要求を受けたデータが書き込まれた領域である第３記憶領域と、前記複数の第１記憶領域のうち前記第３記憶領域に記憶されたデータが書込まれた領域である第４記憶領域とを持つことが可能な不揮発性の半導体メモリと、前記複数の第１記憶領域のうちいずれが前記第２記憶領域であるかを示す情報である第１管理情報を記憶する第１記憶部と、前記複数の第１記憶領域のうちいずれが前記第３記憶領域であるかを示す情報である第２管理情報を記憶する第２記憶部と、前記複数の第１記憶領域のうちいずれが前記第４記憶領域であるかを示す情報である第３管理情報を記憶する第３記憶部と、ホストから書き込み要求を受けたデータである書込要求データを受け付ける第１受付部と、前記第１管理情報に基づいて、１以上の第２記憶領域からいずれか１つを取得する取得部と、前記書込要求データを前記取得部で取得された前記第２記憶領域に第１モードで書込む第１書込部と、前記第１記憶領域の数が第１閾値以下の場合に、前記第２管理情報に基づいて、複数の前記第３記憶領域から１以上の記憶領域を選択するか、または、前記第３管理情報に基づいて、複数の前記第４記憶領域から１以上の記憶領域を選択する選択部と、前記選択部によって選択された前記記憶領域に記憶された有効データを、前記取得部によって取得された前記第２記憶領域に第２モードで書込む第２書込部と、前記第２書込部が書き込んだ場合に、前記選択された記憶領域を前記第２管理情報または前記第３管理情報から削除し、当該選択された記憶領域を前記第１管理情報に追加する管理情報更新部と、ホストからデータの読み出し要求を受ける第２受付部と、前記読み出し要求を受けたデータが前記第３記憶領域に書き込まれている場合は、前記第１モードで読み出し、前記読み出し要求を受けたデータが前記第４記憶領域に書き込まれている場合は、前記第２モードで読み出す読出部と、を有する。前記有効データとは、論理アドレスに対応付けられた物理アドレスに記憶されたデータである。記論理アドレスとは、ホストから指定されたアドレスである。前記物理アドレスとは、半導体メモリの記憶領域でのデータの記憶位置を示す。前記第１モードは、前記第２モードよりも、書込みまたは読み出しが速い。前記第１モードは、前記第２モードよりも、同一記憶領域に書込みされうる情報の最大量が少ない。
【図面の簡単な説明】
【０００７】
【図１】実施形態のブロックの使用例を示す図（１）。
【図２】実施形態のブロックの使用例を示す図（２）。
【図３】実施形態のブロックの使用例を示す図（３）。
【図４】実施形態のパーソナルコンピュータの外観図。
【図５】実施形態のメモリシステムのブロック図。
【図６】実施形態のアドレス変換テーブルのデータ構造例。
【図７】実施形態の逆引きテーブルの例。
【図８】実施形態のデータ書込時のマッピング更新の説明図（更新前）。
【図９】実施形態のデータ書込時のマッピング更新の説明図（更新後）。
【図１０】実施形態のデータ削除時のマッピング更新の説明図（削除前）。
【図１１】実施形態のデータ削除時のマッピング更新の説明図（削除後）。
【図１２】実施形態のデータ転記時のマッピング更新の説明図（転記前）。
【図１３】実施形態のデータ転記時のマッピング更新の説明図（転記後）。
【図１４】実施形態のデータ書込み要求時の概略フローチャート。
【図１５】実施形態の使用ブロック数削減処理の概略フローチャート（１）。
【図１６Ａ】実施形態の使用ブロック数削減処理の概略フローチャート（２）。
【図１６Ｂ】実施形態の使用ブロック数削減処理の概略フローチャート（３）。
【図１７】実施形態の転記元ブロック群選択処理の概略フローチャート（１）。
【図１８】実施形態の転記元ブロック群選択処理の概略フローチャート（２）。
【図１９】実施形態の転記元ブロック群選択処理の概略フローチャート（３）。
【図２０】実施形態のランダムライトのシミュレーション結果。
【図２１】実施形態のメモリシステムのブロック図。
【図２２】実施形態の使用ブロック数削減処理実行の概略フローチャート。
【発明を実施するための形態】
【０００８】
以下、例示する実施の形態にかかるメモリシステムについて、図面を参照して詳細に説明する。
【０００９】
まず、実施の形態１にかかるメモリシステム１について、図面を参照して詳細に説明する。図１〜図３は、本実施の形態１にかかるブロックの使用例を示す図である。
【００１０】
本実施の形態１で使用するＮＡＮＤフラッシュメモリは、データ書込みの動作モードを変更可能なフラッシュメモリ１１２である。例えば、データ書込みの動作モードを変更可能なＭＬＣフラッシュメモリである。動作モードとしては、第１の動作モードと第２の動作モードとを用いる。第１の動作モードは、第２の動作モードよりも同一の記憶領域に書き込む情報量が少ない（つまり、第２の動作モードは、第１の動作モードよりも同一の記憶領域に書き込む情報量が多い）。例えば、第２の動作モードは、第１の動作モードよりも１つのセルに書き込めるビット数が大きなモードである。さらに詳細例としては、第１の動作モードは、ＳＬＣモードもしくはＭＬＣモードである。第２の動作モードは、第１の動作モードよりも１つのセルに書き込めるビット数が大きなＭＬＣモードである。以下の説明では、第１の動作モードをＳＬＣモードとし、第２の動作モードをＭＬＣモードとして説明する。ただし、ＭＬＣモードは、１つに限らず、複数であってもよい。すなわち、４値モードと８値モードとで変更可能であってもよい。
【００１１】
ＭＬＣフラッシュメモリ１１２に限らず、１つのＮＡＮＤフラッシュメモリの記憶領域は、複数のブロック（第１記憶領域）で構成されている。ブロックとは、所定の単位の記憶領域であり、データの消去単位である。したがって、あるブロックへ新たにデータを書込む際、その前に、そのブロック内のデータを一括して消去する必要がある。
【００１２】
各ブロックは、複数のページというから構成される。データの書込みと読出しは、ページ単位で行う。データを書き込むページの順序には規則がある。このため、ブロック単位でデータ消去後、特定のページ順序でデータをブロックに書き込む必要がある。すなわち、ブロックにデータを書き込んだ後は、ブロック内のデータを消去せずに特定のページだけを上書きすることや、ブロックのデータを消去後であってもブロック内でランダムのページにデータを書き込むことはできない。
【００１３】
また、各ＮＡＮＤフラッシュメモリの動作モードは、ブロック毎に独立して設定することが可能である。ただし、１ブロック内での各ページの動作モードが同じである必要がある。このため、ページ単位で動作モードを切り替えることはできない。すなわち、あるブロックに対してページ書込みを行った後は、その後、ブロック内データの一括消去をするまでの間、そのブロックの動作モードを切り替えることができない。
【００１４】
各動作モードでは、ブロックに対して書き込めるデータ量が異なる。言い換えれば、ブロックの容量（以下、ブロック容量という）が動作モードに応じて変化する。具体的には、各ページのページサイズは同じで、ページ数が変化する。例えば２ビット記録方式のＭＬＣフラッシュメモリの場合、４値モードのＭＬＣブロックに対して２値モードのＳＬＣブロックでは、ページ数およびブロック容量が１／２倍となる。
【００１５】
本実施の形態１では、図１〜図３に示すように、ブロックの種類として、有効データが格納されていないフリーブロックＢ＿ｆｒｅｅと、有効データが格納されている使用ブロック（第２記憶領域）とが存在する。使用ブロックには、第１の動作モードで書き込まれた有効データを保持するブロックＢ＿ｓｌｃと、第２の動作モードで書き込まれたデータを保持するブロックＢ＿ｍｌｃとが存在する。そこで、ブロックＢ＿ｓｌｃをＳＬＣブロックＢ＿ｓｌｃ（第３記憶領域）とし、ブロックＢ＿ｍｌｃをＭＬＣブロックＢ＿ｍｌｃ（第４記憶領域）と称する。
【００１６】
また、各ブロックは、グループに分類されて管理される。たとえば、フリーブロックＢ＿ｆｒｅｅは、フリーブロック群Ｇ＿ｆｒｅｅに分類されて管理され、ＳＬＣブロックＢ＿ｓｌｃは、ＳＬＣブロック群Ｇ＿ｓｌｃ（第５記憶領域）に分類されて管理され、ＭＬＣブロックＢ＿ｍｌｃは、ＭＬＣブロック群Ｇ＿ｍｌｃ（第６記憶領域）に分類されて管理される。
【００１７】
本実施の形態１において、図１に示すように、ホスト機器からデータＤ１の書込みが要求されると、そのデータＤ１は、予め新規データ書き込み用のブロックとして割り当てられたフリーブロックＢ＿ｆｒｅｅに、ＳＬＣモードで書き込まれる。データＤ１が書き込まれた新規データ書込ブロックＢ＿Ｄ１は、ＳＬＣブロック群Ｇ＿ｓｌｃに登録される。この結果、フリーブロック群Ｇ＿ｆｒｅｅで管理されるフリーブロックＢ＿ｆｒｅｅの数が１つ減少し、代わりに、ＳＬＣブロック群Ｇ＿ｓｌｃで管理されるＳＬＣブロックＢ＿ｓｌｃが１つ増加する。このＳＬＣモードでのデータ書込みは、ＳＬＣブロック群Ｇ＿ｓｌｃにおいて管理されるＳＬＣブロックＢ＿ｓｌｃの総データ容量に制限されることなく行われる。言い換えれば、本実施の形態１では、ＳＬＣブロックＢ＿ｓｌｃの数に上限がなく、可変である。これにより、本実施の形態１では、可変長のＳＬＣバッファが実現される。さらには、本実施の形態１では、総容量がＭＬＣフラッシュメモリの総記憶容量からホスト機器に対して提供する最大容量である表記容量を引算することで得られる余剰容量以上となる数のブロックを、ＳＬＣブロックＢ＿ｓｌｃとして管理することが可能である。ただし、後述するように、フリーブロック群Ｇ＿ｆｒｅｅによって管理されるフリーブロックＢ＿ｆｒｅｅの数には、下限が設定されてもよい。
【００１８】
その後、たとえばホスト機器からのデータ書込みによってフリーブロック群Ｇ＿ｆｒｅｅに属するフリーブロックＢ＿ｆｒｅｅの数が予め設定しておいた閾値Ｔｂｆ以下となると、本実施の形態１では、図２に示すように、ＳＬＣブロック群Ｇ＿ｓｌｃに属するＳＬＣブロックＢ＿ｓｌｃのいくつかを選択し、これらに有効なデータとして格納されているデータ（以下、有効データという）を予め転記先用のブロックとして割り当てられたフリーブロックＢ＿ｆｒｅｅに、ＭＬＣモードで書き込む（転記）。この有効データが書き込まれた転記先ブロックＢ＿Ｄｔｓは、ＭＬＣブロック群Ｇ＿ｍｌｃに登録される。この結果、使用ブロックの数が削減されて、フリーブロックＢ＿ｆｒｅｅの数が増加する。ここで、転記対象のＳＬＣブロックＢ＿ｓｌｃには、ブロック容量に対する有効データ量（有効データ率）の小さいものや、更新頻度の高いデータを格納しないものが選択されるとよい。
【００１９】
その後、データ転記によってＭＬＣブロック群Ｇ＿ｍｌｃに属するＭＬＣブロックＢ＿ｍｌｃの数が増加した状態で、フリーブロックＢ＿ｆｒｅｅの数が予め設定しておいた閾値Ｔｂｆ以下となると、本実施の形態１では、図３に示すように、ＳＬＣブロック群Ｇ＿ｓｌｃとＭＬＣブロック群Ｇ＿ｍｌｃとのいずれかを選択し、これに属するブロックをいくつか選択し、これらの有効データを予め転記先用のブロックとして割り当てられたフリーブロックＢ＿ｆｒｅｅに、ＭＬＣモードで書き込む（転記）。この有効データが書き込まれた転記先ブロックＢ＿ＤｔｓまたはＢ＿Ｄｔｍは、ＭＬＣブロック群Ｇ＿ｍｌｃに登録される。この結果、使用ブロックの数が削減されて、フリーブロックＢ＿ｆｒｅｅの数が増加する。ここで、転記対象の使用ブロックには、ブロック容量に対する有効データ量（有効データ率）の小さいものや、更新頻度の高いデータを格納しないものが選択されるとよい。また、転記対象のブロックには、たとえば同一の動作モードのブロックが選択される。具体的には、ＳＬＣブロックＢ＿ｓｌｃ同士、または、ＭＬＣブロックＢ＿ｍｌｃ同士が選択される。
【００２０】
なお、いずれのブロック群が選択されるかは、各ブロック群に属するブロックの総有効データ量や総有効データ率など、種々のパラメータに基づいて決定することが可能である。例えば、図１や図２のように総有効データ量が少ない場合には、ブロック容量の合計が小さくても全てのデータを記録可能なので、ＳＬＣブロックＢ＿ｓｌｃの比率を高くすることが可能である。逆に、図３のように総有効データ量が多くなった場合には、ＭＬＣブロックＢ＿ｍｌｃの比率を高くしてブロック容量の合計を大きくする必要がある。
【００２１】
更に、ホストから書き込まれるデータのＬＢＡ（Ｌｏｇｉｃａｌ  Ｂｌｏｃｋ  Ａｄｄｒｅｓｓ）に局所性がある、すなわち特定のＬＢＡの範囲に書込みが集中する場合には、当該データがＳＬＣブロックＢ＿ｓｌｃからＭＬＣブロックＢ＿ｍｌｃに転記される前にホストから上書きされてＳＬＣブロックＢ＿ｓｌｃ上の古いデータが無効データになる確率が高い。このようにＳＬＣブロック群Ｇ＿ｓｌｃの総有効データ率が低下した場合にはＳＬＣブロック群Ｇ＿ｓｌｃが転記対象として選択されると良い。また例えば、局所性が移動する、すなわち書込みが集中するＬＢＡ範囲が別の範囲に移動した直後には、当該データがＭＬＣブロックＢ＿ｍｌｃに転記された後にホストから上書されてＭＬＣブロックＢ＿ｍｌｃ上の古いデータが無効データになる確率が高い。このようにＭＬＣブロック群Ｇ＿ｍｌｃの総有効データ率が低下した場合にはＭＬＣブロック群Ｇ＿ｍｌｃが転記対象として選択されると良い。
【００２２】
ここで、閾値Ｔｂｆは、ホスト機器からの効率的なデータアクセス等を鑑みて、実験や経験やシミュレーションによって求められる値である。たとえば閾値Ｔｂｆが大きすぎると、ある時点で実際にデータを記録しているブロック数が少なくなり、総有効データ率が高くなるため、転記の効率が悪化する。また、閾値Ｔｂｆは、最低でも転記処理で一度に確保するフリーブロック数以上の必要がある。
【００２３】
さらに、データ転記を実行する際のトリガは、閾値Ｔｂｆを用いた方法に限定されない。たとえば、定期的にデータ転記を実行してもよいし、ホスト機器からのアクセスがない期間に基づいてデータ転記を実行してもよい。
【００２４】
つぎに、メモリシステム１の構成および動作を説明する。図４は、本実施の形態１によるメモリシステムを搭載可能な情報処理装置の一例を示す概観図である。図４に例示されるパーソナルコンピュータ１０は、主として、本体１１と、表示ユニット１２とから構成される。本体１１は、たとえば、筐体１５、キーボード装置１６、ポインティングデバイスであるタッチパッド１７、メモリカード１９などが着脱可能なカードスロットやＵＳＢ（Ｕｎｉｖｅｒｓａｌ  Ｓｅｒｉａｌ  Ｂｕｓ）などの外部インタフェース１８、メイン回路基板、およびＳＳＤ（Ｓｏｌｉｄ  Ｓｔａｔｅ  Ｄｒｉｖｅ）であるメモリシステム１を備える。
【００２５】
メイン回路基板には、ＣＰＵ（Ｃｅｎｔｒａｌ  Ｐｒｏｃｅｓｓｉｎｇ  Ｕｎｉｔ）やＲＯＭ（Ｒｅａｄ  Ｏｎｌｙ  Ｍｅｍｏｒｙ）やＲＡＭ（Ｒａｎｄｏｍ  Ａｃｃｅｓｓ  Ｍｅｍｏｒｙ）やノースブリッジやサウスブリッジなどの主要部品が搭載される。本体１１は、その他にも、ＯＤＤ（Ｏｐｔｉｃａｌ  Ｄｉｓｋ  Ｄｒｉｖｅ）ユニットや各種外部インタフェースなどを備えてもよい。
【００２６】
表示ユニット１２は、ディスプレイハウジング１３と、このディスプレイハウジング１３に収容された表示装置１４と、を備える。なお、図４では、所謂ノート型パーソナルコンピュータを例に挙げたが、これに限定されるものではない。すなわち、本実施の形態１ならびに以下の実施の形態にかかるメモリシステムは、フラッシュメモリをストレージとして搭載または装着可能なあらゆるコンピュータに対して適用することが可能である。
【００２７】
図４において、メモリシステム１は、記録媒体として書き換え可能な不揮発性メモリを用いた記憶装置である。このメモリシステム１は、パーソナルコンピュータ１０に内蔵されても、外部インタフェース１８を介してパーソナルコンピュータ１０に外付けされてもよい。以下に、本実施の形態１によるメモリシステム１を、図面を参照して詳細に説明する。
【００２８】
図５に示すように、メモリシステム１は、大別して、コントローラ部１００、不揮発性メモリ部１１０、バッファメモリ部１２０、および、インタフェース部１３０を備える。各部１００〜１３０は、共通バスや専用線等の信号線１４０を介して相互に接続され得る。また、信号線１４０には、パーソナルコンピュータやワークステーションなど、不揮発性メモリ部１１０へのデータの書込み／読出しを要求するホスト機器１５０も接続され得る。
【００２９】
インタフェース部１３０は、たとえばＳＡＴＡ（Ｓｅｒｉａｌ  ＡＴＡ）インタフェースであり、信号線１４０を介してホスト機器１５０と通信する。ただし、ＳＡＴＡインタフェースに限らず、パラレルＡＴＡインタフェースなど、記憶装置に対する種々のインタフェースを適用可能である。このインタフェース部１３０は、ホスト機器１５０からリード、ライト、フラッシュ、データ削除等のコマンドを受信し（第１受付部／第２受付部）、このコマンド受信をコントローラ部１００に通知する。また、インタフェース部１３０は、コントローラ部１００からの指示に従い、ホスト機器１５０との間でデータを送受信する。
【００３０】
バッファメモリ部１２０には、ランダムアクセス性が高く高速なメモリ、例えばＳＲＡＭやＤＲＡＭ等が用いられる。不揮発性メモリである必要はない。バッファメモリ部１２０は、インタフェース部１３０がホスト機器１５０との間で送受信したデータや、不揮発性メモリ部１１０に対して読出し／書込みを行うデータを一時的に格納する。また、バッファメモリ部１２０は、データ以外にも、各種管理用の情報を格納してもよい。
【００３１】
不揮発性メモリ部１１０は、１つ以上のＭＬＣフラッシュメモリ１１２およびＮＡＮＤコントローラ１１１から構成される。ＭＬＣフラッシュメモリ１１２は、たとえばＮＡＮＤフラッシュメモリである。１つのＭＬＣフラッシュメモリ１１２は、１つのチップで構成されてもよい。通常、不揮発性メモリ部１１０の総記憶容量は、表記容量（ホスト機器に対して提供する最大容量）よりも大きな容量である必要がある。そこで不揮発性メモリ部１１０は、総記憶容量に応じて複数のＭＬＣフラッシュメモリ１１２を搭載し得る。また、ＮＡＮＤコントローラ１１１は、複数のＭＬＣフラッシュメモリ１１２に対して並列にデータ転送が可能であるとよい。これは、たとえば１つのＭＬＣフラッシュメモリ１１２ではＳＳＤとして要求されるデータ転送性能を満たせない場合に有効である。
【００３２】
図５に戻り説明する。コントローラ部１００は、ユーザデータの管理や各部の制御を行う機能を備える。コントローラ部１００は、これらの機能が回路として組み込まれたＳｏＣ（Ｓｙｓｔｅｍ  ｏｎ  ａ  Ｃｈｉｐ）であってもよい。また、コントローラ部１００は、ハードウェアとしての汎用プロセッサがこれらの機能を具現するためのソフトウェアを実行することで実現されてもよい。
【００３３】
コントローラ部１００は、その機能ブロックとして、アドレス変換テーブル記憶部１０１と、ブロック管理部１０２と、有効データ量管理部１０３と、読出コマンド処理部１０４と、書込コマンド処理部１０５と、削除コマンド処理部１０６と、ブロック数削減処理部１０７、転記元ブロック群選択部１０８および転記元ブロック選択部１０９（転記部）と、を備える。
【００３４】
アドレス変換テーブル記憶部１０１は、ホスト機器１５０から指定される論理アドレスとメモリシステム１内でのデータの記録位置とのマッピングを保持するアドレス変換テーブル１０１Ａを記憶する。ある論理アドレスのデータに関して、ホスト機器１５０からの書込み若しくは削除、または、メモリシステム１内での転記があると、アドレス変換テーブル１０１Ａの論理アドレスのマッピングが更新される。この結果、新しい記録位置のデータが有効データとなり、古い記録位置にあるデータは無効データとなる。マッピングの更新時には、各ブロック内の有効データ量の更新が有効データ量管理部１０３に通知される。
【００３５】
ブロック管理部１０２は、ブロックを分類して管理するためのブロック群を管理する。ブロックは、有効データを格納するか否かに応じて、フリーブロックと使用ブロックとのいずれかに分類することができる。また、使用ブロックは、そのブロックに対する有効データの書込み動作モード等に応じて、ＳＬＣブロックとＭＬＣブロックとのいずれかに分類することできる。ブロック管理部１０２は、有効データが格納されていないブロックをフリーブロック群に登録し、ＳＬＣモードで書き込まれた有効データを格納しているブロックをＳＬＣブロック群、ＭＬＣモードで書き込まれた有効データを格納するブロックをＭＬＣブロック群に、それぞれ登録する。ブロック管理部１０２は、各ブロック群の管理情報として、各ブロック群に含まれるブロックの情報とブロック数とを保持する。なお、フリーブロックの動作モードは未定であり、フリーブロックをＳＬＣブロック群とＭＬＣブロック群とのいずれかに割当てた後に決定される。また、各ブロック群の管理情報は、特定のブロック群に全ブロックが集中して登録されることを可能にするデータ構造を持つ。例えば、全てのブロックがＳＬＣモードで使用された場合であっても、全てのブロックをＳＬＣブロック群に登録可能である。ブロック管理部１０２は、ブロックがどのブロック群（フリー、ＳＬＣ、ＭＬＣ）に属するかの情報を更新する（管理情報更新部）。
【００３６】
有効データ量管理部１０３は、アドレス変換テーブル１０１Ａから各ブロックの有効データ量の更新通知を受けると、ＳＬＣブロック群およびＭＬＣブロック群に含まれるブロックの総有効データ量を算出する。
【００３７】
読出コマンド処理部１０４は、インタフェース部１３０から読出しコマンド受信の通知を受けると、読出しコマンドで指定された論理アドレスに対応する不揮発性メモリ部１１０内の記録位置をアドレス変換テーブル１０１Ａから検索し、その記録位置に記録されたデータをバッファメモリ部１２０に読み出す（読出部）。これにより、バッファメモリ部１２０には、読出しコマンドで指定された範囲のデータが一時的に格納される。その後、読出しコマンド処理部１０４は、バッファメモリ部１２０に一時的に格納されたデータをホスト機器１５０に送信するようにインタフェース部１３０を制御する。
【００３８】
書込コマンド処理部１０５は、インタフェース部１３０から書込みコマンド受信の通知を受けると、バッファメモリ部１２０上に空き領域を確保するとともに、ホスト機器１５０からデータを受信するようにインタフェース部１３０を制御する。その後、バッファメモリ部１２０に十分な量のデータが蓄積されると、新規データ書込み用のブロックにバッファメモリ部１２０内のデータを書き込む。その後、書込コマンド処理部１０５は、書き込んだデータの論理アドレスに対応する記録位置をアドレス変換テーブル１０１Ａに登録することで、マッピングを更新する。なお、書込コマンド処理部１０５は、ブロック管理部１０２からフリーブロックを新規データ書込み用のブロックとして取得し（取得部）、この新規データ書込み用のブロックをＳＬＣブロックとして使用する（第１書込部）。また、書込コマンド処理部１０５は、ブロック管理部１０２からフリーブロックを新規データ書込み用のブロックとして取得した結果、残りのフリーブロック数が所定の閾値を下回る場合には、ブロック数削減処理部１０７に使用ブロック数削減要求を出す。
【００３９】
削除コマンド処理部１０６は、インタフェース部１３０から削除コマンド受信の通知を受けると、アドレス変換テーブル１０１Ａに対して、指定された論理アドレスに対応する記録位置のデータを無効化するように、マッピングを更新する。
【００４０】
ブロック数削減処理部１０７は、有効データを格納する使用ブロックのうち、１つ以上の使用ブロック（以下、これを転記元ブロックという）を選択し（選択部）、選択した転記元ブロック中の有効データをフリーブロックに転記する（第２書込部）。いずれのブロック群のブロック数を削減するかは、転記元ブロック群選択部１０８によって選択される。また、転記元ブロックは、転記元ブロック選択部１０９によって選択される。
【００４１】
ブロック数削減処理部１０７は、有効データの転記の結果、フリーブロックとなった転記元ブロック、すなわち有効データ量が‘０’となった転記元ブロックを新たなフリーブロックとして回収する。転記したデータについては、転記先の論理アドレスに対応する記録位置をアドレス変換テーブル１０１Ａに登録することでマッピングを更新する。ここで、新たにフリーブロックとして回収された転記元ブロックの数と転記先のブロック（以下、転記先ブロックという）として割り当てられたフリーブロックの数との差が、使用ブロックの削減数となる。なお、転記元ブロックには、同じ動作モードの使用ブロック同士を選択するとよい。また、転記先ブロックとして割り当てられたフリーブロックは、ＭＬＣモードで使用されるとよい。
【００４２】
転記元ブロック群選択部１０８は、ＳＬＣブロック群またはＭＬＣブロック群のどちらのブロック数を削減するかを選択する。転記元ブロック群選択部１０８は、たとえば各ブロック群内またはいずれかのブロック群内の有効データ率に基づいて、削減対象のブロック群を選択する。転記元ブロック群選択部１０８は、ブロック群内の有効データ率を、ブロック管理部１０２から参照した各ブロック群のブロック数と、有効データ量管理部１０３から参照した各ブロックまたは各ブロック群の有効データ量と、から算出することができる。すなわち、転記元ブロック群選択部１０８は、ブロック群内の有効データ率を、各ブロック群の動作モードとブロック数とから各ブロック群の総容量を算出し、これで各ブロック群の有効データ量を除算することで求めることができる。
【００４３】
転記元ブロック選択部１０９は、転記元ブロック群選択部１０８によって選択された転記元ブロック群の中から１つ以上の使用ブロックを転記元ブロックとして選択する。転記元ブロック選択部１０９は、たとえば転記元ブロック群に属する使用ブロックのうち、有効データ率が低いブロックを優先的に選択する。もしくは、転記元ブロック選択部１０９は、転記元ブロック群選択部１０８が転記元ブロック群の選択に用いたＭＬＣブロック群の有効データ率の閾値を基準とし、この閾値よりも有効データ率がより低い使用ブロックを優先的に選択するように構成されてもよい。さらには、転記元ブロック群がＳＬＣブロック群の場合には、単純にＦＩＦＯ順にブロックを選択する、すなわち書込みの古い順にＳＬＣブロックを選択してもよい。
【００４４】
つぎに、データ管理単位およびアドレス変換テーブルについて、図面を参照して詳細に説明する。一般に、ホスト機器１５０から記憶装置にアクセスする際のデータ管理単位はセクタと呼ばれ、そのサイズは５１２バイトである。ＨＤＤやＳＳＤ等の記憶装置からホスト機器１５０に提供される記憶領域には、セクタ単位で先頭から順に連続した論理アドレスが付けられている。この論理アドレスは、一般にはＬＢＡ（Ｌｏｇｉｃａｌ  Ｂｌｏｃｋ  Ａｄｄｒｅｓｓ）と呼ばれる。
【００４５】
それに対し、本実施の形態１にかかるメモリシステム１内部でのデータ管理単位は、クラスタと呼ばれる。クラスタのサイズは、セクタよりも大きなサイズとすることが可能である。クラスタのサイズをセクタのサイズよりも大きくした場合、アドレス変換テーブル１０１Ａ上のエントリ数や処理量を削減することが可能となる。例えば、１クラスタを８セクタで構成した場合、各クラスタには論理アドレスが８の倍数から始まる連続した８つのセクタが含まれる。この結果、クラスタのサイズは、４ｋＢ（キロバイト）となる。以下の説明では、メモリシステム１内部でのデータ管理単位をクラスタとし、論理アドレスを各クラスタの先頭セクタのＬＢＡとし、クラスタサイズを４ｋＢとした場合を例に挙げる。ただし、クラスタサイズは、目的等に応じて種々変形することが可能である。もちろん、データの管理情報を格納する領域が十分に確保できるのであれば、クラスタサイズとセクタサイズを等しくしてもよい。この場合、セクタ単位でデータを管理することが可能になる。
【００４６】
ブロック内の各ページには、複数のデータがクラスタ単位で記録される。クラスタ内のデータは、前述した通り、連続した論理アドレスのセクタデータである。ただし、ブロック内の複数のクラスタデータが連続した論理アドレスのクラスタデータであるとは限らない。論理アドレスとメモリシステム１内部での記録位置とのマッピングは、後述するように、ホスト機器１５０からの書込み順序やメモリシステム１内部での転記順序に依存して動的に定まる。
【００４７】
そこで、論理アドレスと記録位置とのマッピングを管理するアドレス変換テーブル１０１Ａが設けられる。アドレス変換テーブル１０１Ａが備える機能には、論理アドレスに対する記録位置の登録機能、無効化機能、および、マッピングの検索機能が挙げられる。また、アドレス変換テーブル１０１Ａは、マッピングが更新された際に、その記録位置に対応するブロックのブロック番号と、ブロック内の有効データ量の差分とを、有効データ量管理部１０３に通知する機能を備える。
【００４８】
マッピング情報を保持するアドレス変換テーブル１０１Ａのデータ構造としては、様々なものが適用可能である。図６は、アドレス変換テーブルの単純なデータ構造の一例である。図６に示すデータ構造は、表記容量分の全クラスタの記録位置を格納可能なアドレス変換テーブル１０１Ａが、論理アドレス順に各クラスタの記録位置を保持する構造である。このテーブル構造は、たとえばメモリ上に予め用意されている。図６に示す例では、クラスタサイズが４ＫＢ、各クラスタデータの先頭論理アドレスが８の倍数であり、記録位置としてブロック番号、ページ番号、および、ページ内オフセット位置を保持している。
【００４９】
なお、図６に示すデータ構造の例では、記録位置から論理アドレスを検索する際に、アドレス変換テーブル１０１Ａ内の全エントリから記録位置が一致するエントリを検索する必要がある。このため、コストが非常に大きい。そこでアドレス変換テーブル１０１Ａは、記録位置から論理アドレスを高速に検索することが可能な逆引きテーブルを別途保持してもよい。図７に逆引きテーブルの例を示す。図７に示す例では、逆引きテーブルは、各ブロック内の全記録位置に対応する論理アドレスを記録したサブテーブル１０１ｂ−１，１０１ｂ−２，…と、各ブロックに対応するサブテーブル１０１ｂ−１，１０１ｂ−２，…へのポインタをもつメインテーブル１０１ａと、から構成される。
【００５０】
つづいて、ホスト機器１５０からの要求に応じたデータ書込みおよび削除、ならびに、メモリシステム１内でのデータの転記の際に、それぞれアドレス変換テーブル１０１Ａ上のマッピングがどのように更新されるかを、図面を用いて詳細に説明する。なお、この説明において、ホスト機器１５０から指定された書込みデータの論理アドレスを１６とする。
【００５１】
図８および図９は、データ書込み時のマッピングの更新を説明するための図である。図８に示す例では、データ書込み前の状態のアドレス変換テーブル１０１Ａに、論理アドレス“１６”に対する記録位置として、ブロック“Ｃ”、ページ番号“２”、および、ページ内オフセット位置“１”が登録されている。そこで、他の論理アドレスへの書込みデータも含めてページサイズ分のデータがホスト機器１５０からバッファメモリ部１２０に蓄えられると、書込コマンド処理部１０５は、バッファメモリ部１２０に蓄積された１ページ分のデータを新規データ書込み用のブロックとして選択されたブロック“Ａ”の未書込みページ“１”にページ単位で書き込む。
【００５２】
このようなデータ書込み後、図９に示すように、アドレス変換テーブル１０１Ａには、論理アドレス“１６”に対する記録位置として、新しいデータが記録されたブロック“Ａ”、ページ“１”、および、ページ内オフセット位置“０”が、書込コマンド処理部１０５によって登録される。これにより、アドレス変換テーブル１０１Ａが管理するマッピングが更新される。この結果、古い記録位置のデータが無効データとなり、新しい記録位置のデータが有効データとなる。
【００５３】
図１０および図１１は、データ削除時のマッピングの更新を説明するための図である。データ削除時のマッピングの更新では、データ書込み時のマッピングの更新と異なり、ブロックへのデータ書込みは発生せず、アドレス変換テーブル１０１Ａに対して論理アドレスに対応する記録位置の無効化のみが行われる。図１０および図１１に示す例では削除コマンド処理部１０６が、データ削除前の状態のアドレス変換テーブル１０１Ａ（図１０参照）に対し、論理アドレス“１６”に対応するエントリの記録位置に無効値（例えばどのブロックも意味しないブロック番号）を登録することで、マッピングを無効にしている（図１１参照）。これにより、ブロック“Ｃ”上の古い記録位置のデータが無効データとなる。
【００５４】
図１２および図１３は、ＳＳＤ内でのデータ転記時のマッピングの更新を説明するための図である。データ書込み時のマッピング更新とデータ転記時のマッピング更新とで異なる点は、対象のデータがメモリシステム１内部に記録されているか否かの点にある。
【００５５】
図１２に示す例では、データ転記前に、論理アドレス“０”、“８”および“１６”に対する有効データが、転記元ブロック“Ｅ”および“Ｆ”に記録されている。ブロック数削減処理部１０７は、転記元ブロックとして選択された使用ブロックを先頭ページから順に、アドレス変換テーブル１０１Ａを用いて各記録位置のデータが有効データであるか否かをチェックする。また、ブロック数削減処理部１０７は、転記元ブロック“Ｅ”および“Ｆ”内のチェックされた有効データをバッファメモリ部１２０に順次読み出し、その後、ページサイズ分のデータがバッファメモリ部１２０に溜まると、このデータを転記先ブロック“Ｄ”にページ単位で記録することで、対象の有効データを転記する。
【００５６】
このようなデータ転記後、図１３に示すように、アドレス変換テーブル１０１Ａには、転記したデータの論理アドレスに対応する記録位置が、ブロック数削減処理部１０７によって登録される。図１２および図１３に示す例では、論理アドレス“０”、“８”および“１６”に対する有効データが転記先ブロック“Ｄ”に転記されたため、それらの論理アドレスの記録位置としてブロック“Ｄ”上の位置がアドレス変換テーブル１０１Ａに登録される。この結果、転記元ブロック“Ｅ”および“Ｆ”上の古い記録位置のデータは、無効データとなる。
【００５７】
なお、図７に示したように、アドレス変換テーブル１０１Ａ内に逆引きテーブルを保持する場合、上記のマッピング更新時に、この逆引きテーブルも同様に更新される。
【００５８】
つぎに、本実施の形態１によるブロック管理について、図５を参照して詳細に説明する。上述したように、ブロックは、フリーブロックと使用ブロックとに分類できる。フリーブロックには有効データが全く記録されていないため、以降のデータ書込みにおける書込み対象のブロックに割り当てることが可能である。一方、使用ブロックには有効なデータが存在する。この使用ブロックは、その動作モードに応じてＳＬＣブロックとＭＬＣブロックとに分類できる。
【００５９】
ブロック管理部１０２は、各ブロックを管理するブロック管理情報１０２ｄの他、いずれのブロックがフリーブロックであるかの情報であるフリーブロック群管理情報１０２ａ（第１管理情報）、いずれのブロックがＳＬＣブロックであるかの情報であるＳＬＣブロック群管理情報１０２ｂ（第２管理情報）、およびいずれのブロックがＭＬＣブロックであるかの情報であるＭＬＣブロック群管理情報１０２ｃ（第３管理情報）を保持する。各ブロック群の管理情報（１０２ａ〜１０２ｃ）は、各ブロック群に含まれるブロックの情報と、そのブロック数と、を含む。
【００６０】
ブロック管理部１０２は、フリーブロック群管理情報を記憶する記憶装置（第１記憶部）、ＳＬＣブロック群管理情報１０２ｂを記憶する記憶装置（第２記憶部）、ＭＬＣブロック群管理情報１０２ｃを記憶する記憶装置（第３記憶部）を有しても良く、各管理情報は、ブロック管理部１０２が有する１つの記憶装置に記憶されていても良く、また、ブロック管理部１０２が複数の記憶装置を有し、各管理情報をいずれかの記憶装置（記憶部）を設けて記憶されていても良い。
【００６１】
ブロック管理部１０２は、フリーブロックの割当、フリーブロックの登録、使用ブロックの登録、ブロック群内のブロック数の参照、およびブロック情報の参照をそれぞれ実行するための機能を持つ。
【００６２】
使用ブロックの登録機能は、登録を指定されたブロックの動作モードに応じ、ＳＬＣブロック群管理情報１０２ｂまたはＭＬＣブロック群管理情報１０２ｃにそのブロックの情報を追加し、そのブロック群のブロック数を１つ増加する。
【００６３】
フリーブロックの割当機能は、フリーブロック群管理情報１０２ａを参照し、フリーブロック群に含まれるブロックを１つ選択して、この選択したフリーブロックの情報を書込コマンド処理部１０５またはブロック数削減処理部１０７に返す。また、フリーブロックの割当機能は、この選択したブロックの情報をフリーブロック群管理情報１０２ａから削除するとともに、フリーブロック群のブロック数を１つ削減する。
【００６４】
フリーブロックの登録機能は、登録を指定されたブロックの動作モードに応じ、ＳＬＣブロック群管理情報１０２ｂまたはＭＬＣブロック群管理情報１０２ｃからそのブロックの情報を削除し、そのブロック群のブロック数を１つ削減する。その後、フリーブロックの登録機能は、フリーブロック群管理情報１０２ａにそのブロックの情報を追加し、そのブロック群のブロック数を１増加する。この機能は、データの転記により有効データが‘０’になった使用ブロックをフリーブロックとして回収する際に、ブロック数削減処理部１０７によって使用される。
【００６５】
ここで、各ブロック群の管理情報のデータ構造としては、様々な形態が考えられる。ただし、本実施の形態１では、上述したように、メモリシステム１に搭載されている全ブロックが１つのブロック群に集中しても管理が可能なデータ構造である必要がある。これは、同時に全てのブロックをＳＬＣブロックとして使用することを可能にするためである。そこで、たとえば最も単純なデータ構造の１つとしては、ブロック番号を格納したノードを連結するリスト構造が挙げられる。
【００６６】
なお、本実施の形態１では、ＮＡＮＤフラッシュメモリが提供する物理的な１つのブロックをそのまま１つのブロックとして使用してもよいし、複数の物理ブロックを組にして１つの論理的なブロックを構成してもよい。例えば、１つの物理ブロック（ＭＬＣモード）のブロック容量が１ＭＢ、ページサイズが８ＫＢ、ページ数が１２８ページであるとした場合、その物理ブロックを３２つ集めて論理ブロックを構成すると、その論理ブロックは、ブロック容量が３２ＭＢ、ページサイズが２５６ＫＢ、ページ数が１２８ページのブロックとして扱うことができる。この場合、各機能ブロックで使用されるブロック番号は、論理ブロックの番号となる。
【００６７】
複数の物理ブロックを組にして論理的な１つのブロックとして扱うことのメリットの１つとしては、全ブロック数が少なくなることにより管理すべきブロックの情報が少なくなることである。例えば総記憶容量が１２８ＧＢのＳＳＤでは、物理ブロックの数が１３１０７２（＝１２８×１０２４）つである。これに対し、３２つの物理ブロックを組にした論理ブロックの数は４０９６つとなる。また、全て並列アクセス可能な物理ブロックを組にして論理ブロックを構成した場合、１つの論理ブロックのアクセス速度を向上させることが可能である。
【００６８】
つぎに、本実施の形態１による有効データ量管理部１０３について、図面を参照して詳細に説明する。有効データ量管理部１０３は、ＳＬＣブロック群およびＭＬＣブロック群に含まれるブロックの総有効データ量を算出する。また、有効データ量管理部１０３は、アドレス変換テーブル１０１Ａからの更新通知をトリガとして、マッピングが更新されたブロックが属するブロック群をブロック管理部１０２から検索し、更新通知に含まれる差分情報を用いて該当ブロック群の有効データ量を加算または減算する。ここで、有効データ量管理部１０３は、ブロック毎の有効データ量を保持してもよい。このブロック毎の有効データ量は、ブロック群毎の有効データ量と同様に、該当ブロックの有効データの差分情報を用いて加算または減算される。
【００６９】
なお、有効データ量管理部１０３は、独立した１つの機能部で無くてもよい。たとえば、有効データ量管理部１０３の機能を、アドレス変換テーブル１０１Ａに持たせることも可能である。具体的には、アドレス変換テーブル１０１Ａが図７に示すような逆引きテーブルを備える場合、各サブテーブル１０１ｂ−１，１０１ｂ−２，…内に各ブロックの有効データ量が登録される構成であってもよい。または、ブロック管理部１０２に有効データ量管理部１０３の機能を持たせることも可能である。この場合、ブロック管理部１０２内に、各ブロックとブロック群との有効データ量に関する情報が登録される。
【００７０】
つづいて、本実施の形態によるメモリシステム１の動作について、図面を参照して詳細に説明する。図１４は、ホスト機器１５０からデータの書込み要求があった際の概略動作を示すフローチャートである。なお、図１４に示す動作では、初期状態として、新規データ書込みブロックが割り当て済みであるとする。
【００７１】
図１４に示すように、書込コマンド処理部１０５は、まず、インタフェース部１３０へホスト機器１５０からの新規データの書込みコマンドが入力されるのを待機する（ステップＳ１０１のＮＯ）。書込みコマンドを受けると（ステップＳ１０１のＹＥＳ）、書込コマンド処理部１０５は、バッファメモリ部１２０上にデータ格納領域を確保し（ステップＳ１０２）、つづいて、ホスト機器１５０から送信された新規データをバッファメモリ部１２０に確保しておいたデータ格納領域に格納する（ステップＳ１０３）。
【００７２】
つぎに、書込コマンド処理部１０５は、バッファメモリ部１２０に格納された未書込みの新規データのデータ量を確認し（ステップＳ１０４）、データ量がページサイズ未満である場合（ステップＳ１０４のＮＯ）、ステップＳ１０１へ帰還して、次の書込みコマンドを待機する。一方、データ量がページサイズ以上である場合（ステップＳ１０４のＹＥＳ）、書込コマンド処理部１０５は、バッファメモリ部１２０内の未書込みデータからページサイズ分のデータを選択し、この選択されたデータを不揮発性メモリ部１１０内の割り当てておいた新規データ書込みブロックにＳＬＣモードでページ書込みする（ステップＳ１０５）。
【００７３】
つづいて、書込コマンド処理部１０５は、書き込んだデータの論理アドレスと記録位置（ブロック番号、ページ番号およびページ内オフセット）とをアドレス変換テーブル１０１Ａに登録することで（ステップＳ１０６）、マッピングを更新する。この時、有効データ量の変化がアドレス変換テーブル１０１Ａから有効データ量管理部１０３に通知される。その後、書込コマンド処理部１０５は、バッファメモリ部１２０における書き込んだデータが格納されていた領域を解放する（ステップＳ１０７）。
【００７４】
つぎに、書込コマンド処理部１０５は、新規データ書込みブロックにデータが書き込まれていないページ、すなわち未書込みページが存在するか否かを判断する（ステップＳ１０８）。なお、新規書込みブロックの動作モードは、ＳＬＣモードである。未書込みページが存在する場合（ステップＳ１０８のＮＯ）、ステップＳ１０４へ帰還して、バッファメモリ部１２０上の残りの未書込データ量をチェックする。一方、未書込みページが存在しない場合（ステップＳ１０８のＹＥＳ）、すなわち新規データ書込みブロックの最大ページまでデータの書込みが完了していたら、書込コマンド処理部１０５は、ブロック管理部１０２のＳＬＣブロック群管理情報１０２ｂに、この新規データ書込みブロックを登録する（ステップＳ１０９）。つづいて、書込コマンド処理部１０５は、ブロック管理部１０２のフリーブロック群管理情報１０２ａにおいて管理されているフリーブロックを１つ取得し、このフリーブロックを次の新規データ書込みブロックに割り当てる（ステップＳ１１０）。
【００７５】
つぎに、書込コマンド処理部１０５は、ブロック管理部１０２のフリーブロック群管理情報１０２ａからフリーブロック群のブロック数を参照し、フリーブロック数が所定の閾値Ｔｂｆ以下であるか否かを判定する（ステップＳ１１１）。フリーブロック数が所定の閾値Ｔｂｆより大きい場合（ステップＳ１１１のＮＯ）、書込コマンド処理部１０５は、ステップＳ１０４へ帰還する。一方、フリーブロック数が所定の閾値Ｔｂｆ以下である場合（ステップＳ１１１のＹＥＳ）、書込コマンド処理部１０５は、ブロック数削減処理部１０７に使用ブロック数削減の要求を出して、使用ブロック数削減処理を実行する（ステップＳ１１２）。その後、書込コマンド処理部１０５は、ステップＳ１０４へ帰還する。
【００７６】
ここで、所定の閾値Ｔｂｒは、ブロック数削減処理部１０７で転記先ブロックとして同時に確保するブロック数以上であることが必要である。転記先ブロックには、少なくとも１ブロックが必要となるので、所定の閾値Ｔｂｒは１以上であることが必要である。
【００７７】
なお、図１４において、ステップＳ１０１〜Ｓ１０３の処理と、ステップＳ１０４以降の処理とは、並列に実行することが可能である。ただし、ページ書込みを行うステップＳ１０５以降の処理に比較的長い時間を要する場合、バッファメモリ部１２０上にデータ格納領域を確保するステップＳ１０２の際にまだ十分なサイズの領域が解放されていない場合がある。そこで、ステップＳ１０１〜Ｓ１０３の処理とステップＳ１０４以降の処理とを並列に行う場合では、バッファメモリ部１２０上に十分なサイズの領域が解放されるのを待つステップを設けるとよい。
【００７８】
また、ステップＳ１０４以降の処理においても、新規データ書込み処理を行うステップＳ１０４〜Ｓ１１０までの処理と、使用ブロック数削減処理を行うステップＳ１１１〜Ｓ１１２は、並列に実行することが可能である。ただし、不揮発性メモリ部へのデータアクセスが並列に実行できないページ読出しやページ書込みが存在する場合には、それらの処理を適宜逐次的に実行する必要がある。
【００７９】
ここで、図１４のステップＳ１１２に示す使用ブロック数削減処理について説明する。使用ブロック数削減処理では、いくつかの使用ブロックに散在する有効データをまとめて他のブロックに転記することで、使用ブロック数を削減してフリーブロック数を増やす。たとえば、転記元ブロックをＭ個とし、このＭ個の転記元ブロック内に格納されている有効データ量がＮ個の転記先ブロックに格納可能な場合、（Ｍ−Ｎ）個の使用ブロック数を削減することができる。この際、本実施の形態１では、転記元ブロックに、同一の動作モード（ＳＬＣモードまたはＭＬＣモード）の使用ブロックを選択する。また、転記先ブロックには、ＭＬＣモードでデータを転記する。
【００８０】
以下では、２通りの使用ブロック数削減処理を例に挙げる。図１５は、転記元ブロックと転記先ブロックとを複数ブロックまとめて設定する場合の例である。図１６Ａは、転記元ブロックと転記先ブロックとを１つずつ設定する場合の例である。図１６Ｂは、図１６Ａの変形例である。
【００８１】
図１５に示すように、ブロック数削減処理部１０７は、書込コマンド処理部１０５から使用ブロック数削減の要求を受けると、まず、ブロック管理部１０２において管理されているＳＬＣブロック群とＭＬＣブロック群とのうち転記元とする、すなわち削減対象とするブロック群を選択する転記元ブロック群選択処理を転記元ブロック群選択部１０８に実行させる（ステップＳ１２１）。つづいて、ブロック数削減処理部１０７は、転記元ブロック選択部１０９に、選択ブロック群のうち転記元とするＭ（≧１）個の使用ブロックを転記元ブロックとして選択する処理を実行させる（ステップＳ１２２）。ここで、たとえば転記元ブロック群にＭＬＣブロック群が選択され、このＭＬＣブロック群の総有効データ率がＶであるとすると、Ｍ×Ｖ個の転記先ブロックに有効データを納めることが可能なＭ個の転記元ブロックを選択することが可能である。この場合、Ｍ≧１／（１−Ｖ）となる整数Ｍを選択することで、Ｍ−１以下の整数Ｎ個のＭＬＣブロックに有効データが転記される。
【００８２】
つづいて、ブロック数削減処理部１０７は、選択されたＭ個の転記元ブロックの有効データをＭＬＣブロックに格納する場合に必要となるブロック数Ｎを求め、求めたＮ個のフリーブロックをブロック管理部１０２のフリーブロック群管理情報１０２ａにおいて管理されているフリーブロック群から取得して、これを転記先ブロックに割り当てる（ステップＳ１２３）。ブロック数Ｎは、たとえば、選択されたＭ個の転記元ブロックそれぞれの有効データ量を有効データ量管理部１０３から取得し、この有効データ量を合算して全ての転記元ブロックの総有効データ量Ｄを算出し、得られた有効データ量ＤをＭＬＣブロックのブロック容量Ｓｍで除算し、この値の小数点以下を切り上げることで求めることができる。
【００８３】
つぎに、ブロック数削減処理部１０７は、バッファメモリ部１２０上に少なくとも１ページ分のデータ格納領域を確保し、つづいて、選択されたＭ個の転記元ブロックに格納されている１ページ分の有効データをバッファメモリ部１２０に確保されたデータ格納領域に読み出す（ステップＳ１２４）。つづいて、ブロック数削減処理部１０７は、バッファメモリ部１２０上に読み出した有効データを転記先ブロックとして選択されているフリーブロックにＭＬＣモードでページ書込みする（ステップＳ１２５）。
【００８４】
つぎに、ブロック数削減処理部１０７は、Ｍ個全ての転記元ブロックの有効データを転記し終えたか否かを判定し（ステップＳ１２６）、転記し終えていない場合（ステップＳ１２６のＮＯ）、ステップＳ１２４へ帰還して、残りの有効データをページ単位で転記する。一方、転記し終えている場合（ステップＳ１２６のＹＥＳ）、ブロック数削減処理部１０７は、転記した有効データについて、論理アドレスに対応する転記先の記録位置をアドレス変換テーブル１０１Ａに登録することで、マッピングを更新する（ステップＳ１２７）。これにより、選択されたＭ個の転記元ブロック内の有効データが全て無効データとなる。つづいて、ブロック数削減処理部１０７は、データ転記済みの転記元ブロックをブロック管理部１０２のフリーブロック群管理情報１０２ａに登録するとともに（ステップＳ１２８）、新たに有効データが格納された転記先ブロックをブロック管理部１０２のＭＬＣブロック群管理情報１０２ｃに登録し（ステップＳ１２９）、図１４に示す動作へリターンする。これにより、データ転記済みの転記元ブロックがフリーブロックとして回収される。この結果、（Ｍ−Ｎ）個の使用ブロック数が削減される。
【００８５】
一方、転記元ブロックと転記先ブロックとを１つずつ設定する場合、図１６Ａに示すような処理の流れとなる。ブロック数削減処理部１０７は、書込コマンド処理部１０５から使用ブロック数削減の要求を受けると、まず、図１５のステップＳ１２１と同様の転記元ブロック群選択処理を転記元ブロック群選択部１０８に実行させ（ステップＳ１４１）、つづいて、ブロック容量分のデータの転記が完了した転記先ブロックの総数Ｂｄｓｔに‘０’を設定する（ステップＳ１４２）。つぎに、ブロック数削減処理部１０７は、転記元ブロック選択部１０９に、転記元に選択されたブロック群から１つの使用ブロックを転記元ブロックとして選択させるとともに（ステップＳ１４３）、ブロック内の有効データの転記が完了した転記元ブロックの総数Ｂｓｒｃに‘０’を設定する（ステップＳ１４４）。
【００８６】
つぎに、ブロック数削減処理部１０７は、ブロック管理部１０２のフリーブロック群管理情報１０２ａにおいて管理されているフリーブロック群から１つのフリーブロックを取得し、これを転記先ブロックに割り当てるとともに（ステップＳ１４５）、転記完了した転記先ブロックの総数Ｂｄｓｔを１つインクリメントする（ステップＳ１４６）。なお、バッファメモリ部１２０上には、ブロック数削減処理部１０７が使用するデータ格納領域が少なくとも１ページ分確保されているものとする。
【００８７】
つぎに、ブロック数削減処理部１０７は、選択中の転記元ブロックに格納されている有効データをバッファメモリ部１２０に確保されたデータ格納領域に読み出す（ステップＳ１４７）。つぎに、選択中の転記元ブロックの全ての有効データをバッファメモリ部１２０上に読み出したか否かを判定し（ステップＳ１４８）、読み出し済みでない場合（ステップ１４８のＮＯ）、ステップ１５０へ移行する。
【００８８】
また、ステップＳ１４８の判定の結果、転記元ブロックの全ての有効データを読出し済みである場合（ステップＳ１４８のＹＥＳ）、ステップＳ１４３と同様に、転記元ブロック選択部１０９に、転記元に選択されたブロック群から１つの使用ブロックを転記元ブロックとして選択させ（ステップＳ１４９）、ステップＳ１５０へ移行する。なお、ステップＳ１４９での新しい転記元ブロックの選択時には、その直前に選択されていた転記元ブロックが再び選択されないようにすることが好ましい。
【００８９】
つぎに、ブロック数削減処理部１０７は、バッファメモリ部１２０上に読み出されたデータがページサイズ以上となったか否かを判定し（ステップＳ１５０）、ページサイズ以上でない場合（ステップＳ１５０のＮＯ）、ステップＳ１４７へ帰還する。一方、ページサイズ以上である場合（ステップＳ１５０のＹＥＳ）、ブロック数削減処理部１０７は、バッファメモリ部１２０上に読み出した有効データを転記先ブロックとして選択されているフリーブロックにＭＬＣモードでページ書込みする（ステップＳ１５１）。
【００９０】
つぎに、転記した有効データについて、論理アドレスに対応する転記先の記録位置をアドレス変換テーブル１０１Ａに登録することで、マッピングを更新する（ステップＳ１５２）。
【００９１】
つぎに、ステップＳ１５１で書き込んだ有効データの元になっている転記元ブロックのうち、有効データ量が０になった転記元ブロックを全てフリーブロック群に登録する（ステップＳ１５３）。つづいて、転記が完了した転記元ブロックの総数Ｂｓｒｃに、ステップＳ１５３でフリーブロックとなった転記元ブロック数（フリーブロック増加数）を加算する（ステップＳ１５４）。
【００９２】
つぎに、ブロック数削減処理部１０７は、転記先ブロックにＭＬＣモードの最大ページまで書込みが完了したか否かを判定し（ステップＳ１５５）、書込みが完了していない場合（ステップＳ１５５のＮＯ）、ステップＳ１４７へ帰還する。
【００９３】
また、ステップＳ１５５の判定の結果、転記先ブロックにＭＬＣモードの最大ページまで書込みが完了している場合（ステップＳ１５５のＹＥＳ）、ブロック数削減処理部１０７は、転記先ブロックをブロック管理部１０２のＭＬＣブロック管理情報１０２ｃに登録する（ステップＳ１５６）。つづいて、ブロックの削減数が予め定めておいた削減予定数以上となったか否か、すなわち転記済みの転記元ブロックの総数Ｂｓｒｃから転記済みの転記先ブロックの総数Ｂｄｓｔを減算した値が予め定めておいた削減予定数以上となったか否かを判定し（ステップＳ１５７）、削減予定数以上となっていない場合（ステップＳ１５７のＮＯ）、ステップＳ１４５へ帰還する。一方、削減予定数以上となっている場合（ステップＳ１５７のＹｅｓ）、ブロック数削減処理部１０７は、図１４に示す動作へリターンする。以上のようにしても、目的の数の使用ブロックを削減することができる。
【００９４】
転記中に何らかの不具合により転記先ブロックのデータの読出しが不可能になった場合に備えて、有効データとアドレス変換テーブルをロールバックできるように転記前の状態を残しておく構成も可能である。図１６Ｂは、図１６Ａを変形した例である。図１６Ｂでは、ブロック内の有効データのコピーが完了した転記元ブロックを即座にフリーブロックとして回収せず、転記先ブロックにブロック容量分の転記が完了するまでの間、一時的にフリー化準備ブロック群として保護する。転記先ブロックの転記が完了した時点で転記前の状態は残しておく必要がなくなるため、転記済みのデータについてアドレス変換テーブルを更新した後、転記が完了した転記元ブロックをフリー化準備ブロック群からまとめてフリーブロックとして回収する。
【００９５】
図１６ＢのステップＳ１４１からＳ１５１までは、図１６Ａと同じである。以降ではステップ１６０以降について説明する。
【００９６】
ブロック数削減処理部１０７は、ステップＳ１５１で書き込んだ有効データの元になっている転記元ブロックのうち、有効データを全てコピーした転記元ブロックを全てフリー化準備ブロック群に登録する（ステップＳ１６０）。
【００９７】
つぎに、ブロック数削減処理部１０７は、転記先ブロックにＭＬＣモードの最大ページまで書込みが完了したか否かを判定し（ステップＳ１６１）、書込みが完了していない場合（ステップＳ１６１のＮＯ）、ステップＳ１４７へ帰還する。
【００９８】
また、ステップＳ１６１の判定の結果、転記先ブロックにＭＬＣモードの最大ページまで書込みが完了している場合（ステップＳ１６１のＹＥＳ）、ブロック数削減処理部１０７は、転記先ブロックをブロック管理部１０２のＭＬＣブロック管理情報１０２ｃに登録する（ステップＳ１６２）。
【００９９】
つぎに、転記先ブロックに転記した有効データについて、論理アドレスに対応する転記先の記録位置をアドレス変換テーブル１０１Ａに登録することで、マッピングを更新する（ステップＳ１６３）。つづいて、フリー化準備ブロック群に含まれるブロックをフリーブロックに登録する（ステップ１６４）。つづいて、転記が完了した転記元ブロックの総数Ｂｓｒｃに、ステップＳ１６４でフリーブロックとなった転記元ブロック数を加算する（ステップＳ１６５）。
【０１００】
つぎに、ステップＳ１６６に移行し、図１６ＡのステップＳ１５７と同じく、ブロックの削減数が所定の削減予定数以上となっていない場合（ステップＳ１６６のＮＯ）は、ステップＳ１４５へ帰還する。一方、削減予定数以上となっている場合（ステップＳ１６６のＹＥＳ）は、図１４に示す動作へリターンする。
【０１０１】
もし、図１６Ａのように、転記先ブロックが埋まる前に転記元ブロックをフリーブロックに登録し、フリーブロックが再利用されて消去されてしまうと、その後に転記先ブロックに不具合が生じてデータが読めない状態になった場合、データが失われてしまう。それに対して、図１６Ｂの処理の流れによれば、転記先ブロックが埋まるまでは同一データが転記元ブロックと転記先ブロックに二重化されている。これにより、たとえ転記中に不具合が発生して転記先ブロックのデータが読めない状態になったとしても、元データが転記元ブロックに残っているため、データを失うことがない。このように、図１６Ｂに示した処理の流れでは、耐障害性を高めることができる。
【０１０２】
つぎに、図１５ならびに図１６Ａおよび図１６ＢのステップＳ１２１およびＳ１４１に示す転記元ブロック群選択処理について説明する。転記元ブロック群選択処理には、いくつかの方法が考えられる。以下では、そのうちの３つを例に挙げて説明する。
【０１０３】
図１７は、ＭＬＣブロック群の有効データ率が所定の閾値より低い場合にはＭＬＣブロック群を優先的に転記元のブロック群として選択する場合の例である。図１８は、ＳＬＣブロック群とＭＬＣブロック群とのうち有効データ率の低いブロック群を転記元のブロック群として選択する場合の例である。図１９は、図１８に示す例に図１７に示すＭＬＣブロック群のブロック数Ｂｍと有効データ率Ｖｍとの制約を設けた場合の例である。
【０１０４】
図１７に示すように、転記元ブロック群選択部１０８は、ブロック管理部１０２のＭＬＣブロック管理情報１０２ｃを参照してＭＬＣブロック群の総ブロック数Ｂｍを取得し（ステップＳ２０１）、ＭＬＣブロック群に属するＭＬＣブロックそれぞれの有効データ量を有効データ量管理部１０３から取得し、この有効データ量を合算して全てのＭＬＣブロックの総有効データ量Ｄｍを算出し（ステップＳ２０２）、つづいて、以下の式１に示すように、ステップＳ２０２で取得した総有効データ量ＤｍをステップＳ２０１で取得した総ブロック数Ｂｍに１つのＭＬＣブロックの容量Ｓｍを乗算した値で除算することで、ＭＬＣブロック群の総有効データ率Ｖｍを算出する（ステップＳ２０３）。
Ｖｍ＝Ｄｍ／（Ｂｍ＊Ｓｍ）  ・・・（式１）
【０１０５】
つぎに、転記元ブロック群選択部１０８は、ＭＬＣブロック群の総ブロック数Ｂｍが予め定めておいた閾値Ｔｂｍ以下であるか否かを判定し（ステップＳ２０４）、閾値Ｔｂｍより大きい場合（ステップＳ２０４のＮＯ）、つづいて、ＭＬＣブロック群の総有効データ率Ｖｍが予め定めておいた閾値Ｔｖｍより大きいか否かを判定する（ステップＳ２０５）。
【０１０６】
総ブロック数Ｂｍが閾値Ｔｂｍ以下である場合（ステップＳ２０４のＹＥＳ）、または、総有効データ率Ｖｍが閾値Ｔｖｍより大きい場合（ステップＳ２０５のＹＥＳ）、転記元ブロック群選択部１０８は、ＳＬＣブロック群を転記元のブロック群として選択する（ステップＳ２０６）。一方、総ブロック数Ｂｍが閾値Ｔｂｍより大きく、且つ、総有効データ率Ｖｍが閾値Ｔｖｍ以下である場合（ステップＳ２０４のＮＯ、および、ステップＳ２０５のＮＯ）、転記元ブロック群選択部１０８は、ＭＬＣブロック群を転記元のブロック群として選択する（ステップＳ２０７）。以上のようにして、転記元のブロック群を選択すると、転記元ブロック群選択部１０８は、図１５、図１６Ａまたは図１６Ｂに示す動作へリターンし、処理をブロック数削減処理部１０７へ返す。
【０１０７】
例えば閾値Ｔｖｍの値としては、全てのブロックがＭＬＣブロックであった場合より転記の効率が悪くならない値とすることが望ましい。転記の効率が最悪となるのは、ホストに提供する表記容量分の有効データが全て記録されており、かつ有効データが全ブロックに平均的に分散して格納されている場合である。この時、総記憶容量をＳａｌｌ、表記容量をＳｍａｘとすると、各ブロックの有効データ率Ｖ＝Ｓｍａｘ／Ｓａｌｌとなっている。ここで転記を行うと、Ｍ＝１／（１−Ｖ）個の転記元ブロックをＮ＝Ｍ−１個の転記先ブロックに転記することで、使用ブロックを１個削減可能である。したがって閾値Ｔｖｍ＝Ｖとすれば、ＭＬＣブロック群の総有効データ率Ｖｍが閾値Ｔｖｍ以下である場合、少なくともＭ個の転記元ブロックを転記すれば使用ブロックを１個削減可能であり、上記の最悪ケースよりも転記の効率が悪くなることはない。
【０１０８】
このように、図１７で示した転記元ブロック群選択部１０８によれば、転記の効率が閾値Ｔｖｍで定まる値より悪くならない範囲でＭＬＣブロック群のブロック数を減らすことができ、その分をＳＬＣブロックに割り当てることができる。
【０１０９】
また、ＳＬＣブロック群とＭＬＣブロック群とのうち有効データ率の低いブロック群を転記元のブロック群として選択する場合、図１８に示すように、転記元ブロック群選択部１０８は、図１７のステップＳ２０１〜Ｓ２０３と同様にして、総有効データ率Ｖｍを算出する。
【０１１０】
また、転記元ブロック群選択部１０８は、ブロック管理部１０２のＳＬＣブロック管理情報１０２ｂを参照してＳＬＣブロック群の総ブロック数Ｂｓを取得し（ステップＳ２２１）、ＳＬＣブロック群に属するＭＬＣブロックそれぞれの有効データ量を有効データ量管理部１０３から取得し、この有効データ量を合算して全てのＳＬＣブロックの総有効データ量Ｄｓを算出し（ステップＳ２２２）、つづいて、以下の式２に示すように、ステップＳ２２２で取得した総有効データ量ＤｓをステップＳ２２１で取得した総ブロック数Ｂｓに１つのＳＬＣブロックの容量Ｓｓを乗算した値で除算することで、ＳＬＣブロック群の総有効データ率Ｖｓを算出する（ステップＳ２２３）。ここで、ＳＬＣモードを２値、ＭＬＣモードを４値とした場合、ＳＬＣブロックの容量Ｓｓは、ＭＬＣブロックの容量Ｓｍの１／２である。
Ｖｓ＝Ｄｓ／（Ｂｓ＊Ｓｓ）  ・・・（式２）
【０１１１】
つぎに、転記元ブロック群選択部１０８は、ステップＳ２０３で算出したＭＬＣブロック群の総有効データ率Ｖｍと、ステップＳ２２３で算出したＳＬＣブロック群の総有効データ率Ｖｓとを比較し（ステップＳ２２４）、ＳＬＣブロック群の総有効データ率ＶｓがＭＬＣブロック群の総有効データ率Ｖｍ以下である場合（ステップＳ２２４のＹＥＳ）、ＳＬＣブロック群を転記元のブロック群として選択する（ステップＳ２０６）。一方、総有効データ率Ｖｓが総有効データ率Ｖｍより大きい場合（ステップＳ２２４のＮＯ）、転記元ブロック群選択部１０８は、ＭＬＣブロック群を転記元のブロック群として選択する（ステップＳ２０７）。以上のようにして、転記元のブロック群を選択すると、転記元ブロック群選択部１０８は、図１５、図１６Ａまたは図１６Ｂに示す動作へリターンし、処理をブロック数削減処理部１０７へ返す。
【０１１２】
このように、図１８で示した転記元ブロック群選択部１０８の処理の流れによれば、ＳＬＣブロック群とＭＬＣブロック群とのうち有効データ率の低いブロック群を転記元のブロック群として選択するので、図１７で示した処理の流れに比べて、総有効データ率の計算量は増加するが、転記の効率を良くすることが可能である。
【０１１３】
また、単純にＳＬＣブロックとＭＬＣブロックの容量を同じとして両ブロック群の総有効データ率を算出した場合、元々有効データが半分しか格納されないＳＬＣブロック群が選択されやすい。それに対し、ＳＬＣブロックの容量ＳｓをＭＬＣブロックの容量Ｓｍの１／２としてＳＬＣブロック群の総有効データ率を算出することにより、ＳＬＣブロック群が選択されやすい傾向を防ぐことができる。
【０１１４】
さらに、図１８に示す例に図１７に示すＭＬＣブロック群のブロック数Ｂｍと有効データ率Ｖｍとの制約を設けた場合、図１９に示すように、転記元ブロック群選択部１０８は、図１７に示すステップＳ２０１〜Ｓ２０３と同様にしてＭＬＣブロック群の総有効データ率Ｖｍを算出すると、つづいて、図１７に示すステップＳ２０４およびＳ２０５と同様にして、ＭＬＣブロック群の総ブロック数Ｂｍが予め定めておいた閾値Ｔｂｍ以下であるか否かを判定し（ステップＳ２０４）、閾値Ｔｂｍより大きい場合（ステップＳ２０４のＮＯ）、つづいて、ＭＬＣブロック群の総有効データ率Ｖｍが予め定めておいた閾値Ｔｖｍより大きいか否かを判定する（ステップＳ２０５）。
【０１１５】
総ブロック数Ｂｍが閾値Ｔｂｍ以下である場合（ステップＳ２０４のＹＥＳ）、または、総有効データ率Ｖｍが閾値Ｔｖｍより大きい場合（ステップＳ２０５のＹＥＳ）、転記元ブロック群選択部１０８は、ＳＬＣブロック群を転記元のブロック群として選択する（ステップＳ２０６）。一方、総ブロック数Ｂｍが閾値Ｔｂｍより大きく、且つ、総有効データ率Ｖｍが閾値Ｔｖｍ以下である場合（ステップＳ２０４のＮＯ、および、ステップＳ２０５のＮＯ）、転記元ブロック群選択部１０８は、図１８に示すステップＳ２２１〜Ｓ２２３と同様にしてＳＬＣブロック群の総有効データ率Ｖｓを算出し、つづいて、ステップＳ２０３で算出したＭＬＣブロック群の総有効データ率Ｖｍと、ステップＳ２２３で算出したＳＬＣブロック群の総有効データ率Ｖｓとを比較し（ステップＳ２２４）、ＳＬＣブロック群の総有効データ率ＶｓがＭＬＣブロック群の総有効データ率Ｖｍ以下である場合（ステップＳ２２４のＹＥＳ）、ＳＬＣブロック群を転記元のブロック群として選択する（ステップＳ２０６）。一方、総有効データ率Ｖｓが総有効データ率Ｖｍより大きい場合（ステップＳ２２４のＮＯ）、転記元ブロック群選択部１０８は、ＭＬＣブロック群を転記元のブロック群として選択する（ステップＳ２０７）。以上のようにして、転記元のブロック群を選択すると、転記元ブロック群選択部１０８は、図１５、図１６Ａまたは図１６Ｂに示す動作へリターンし、処理をブロック数削減処理部１０７へ返す。
【０１１６】
図１８に示す転記元ブロック群選択処理では、例えばＭＬＣブロック群の総ブロック数Ｂｍが１であり且つ総有効データ量Ｄｍが１クラスタである場合、ＭＬＣブロック群の総有効データ率Ｖｍが非常に低くなるため、ＭＬＣブロック群が転記元に選択される場合がある。このようなケースでは、ＭＬＣブロック群を転記元として選択しても使用ブロック数を削減することはできない。また、総有効データ率ＶｓおよびＶｍのいずれもが略１００％となる状況も起こり得る。極端な例を挙げると、たとえばブロック数ＢｓおよびＢｍがそれぞれ１００個であって、総有効データ率Ｖｓが１００％で且つ総有効データ率Ｖｍが９９％である場合がある。このような場合でも、図１８に示す転記元ブロック群選択処理では、ＭＬＣブロック群が転記元として選択されてしまう。この結果、１ブロックを削減するために、１００個のＭＬＣブロックを転記元として選択し、９９個のフリーブロックを転記先として選択する必要がある。そこで図１９のように、ＭＬＣブロック群のブロック数Ｂｍと有効データ率Ｖｍとに制約を設けることで、Ｖｓ＞Ｖｍであっても、ＳＬＣブロック群が転記元として選択されるようにする。
【０１１７】
図２０に、ランダムライトのシミュレーション結果を示す。図２０のＸ軸は、アクセス範囲の広さ、すなわち局所性（Ｌｏｃａｌｉｔｙ）を示し、その範囲は、０〜表記容量である。また、Ｙ軸は、４ｋＢのデータに関するランダムライト性能を示し、その単位は、ＩＯＰＳである。また、図２０において、実線Ｌ１は、メモリシステム１のランダムライト性能を示す曲線であり、破線Ｌ２は、全ブロックをＭＬＣモードで使用する従来のメモリシステムのランダムライト性能を示す曲線である。図２０を参照すると明らかなように、メモリシステム１は、特に局所性の高い範囲において、従来のメモリシステムよりも優れたランダムライト性能が得られた。
【０１１８】
このように本実施の形態１によれば、局所性の強いアクセスパターンでは更新頻度の低いデータはＭＬＣブロック、更新頻度の高いデータはＳＬＣブロックに分離し、長期的な転記の効率を向上させることが可能である。また、総有効データ量が少ない場合には、ＳＬＣブロックの無駄な転記を減らし、アクセスの速いＳＬＣブロックのキャッシュとしての効果を大きくすることが可能である。また、フリーブロックの動作モードを状況に応じて動的に選択可能な構成とすることで、ＳＬＣフラッシュメモリとＭＬＣフラッシュメモリとのそれぞれのメリットを状況に応じて得ることが可能となる。
【０１１９】
つぎに、実施の形態２にかかるメモリシステム２について、図面を参照して詳細に説明する。本実施の形態２では、フリーブロック数が所定の閾値Ｔｂｆ以下となったこと（図１４のステップＳ１１１のＹＥＳ）の他に、一定時間、ホスト機器１５０からリード、ライト、フラッシュ、データ削除等のコマンドを受信しなかったこと、および、ホスト機器１５０からデータの転記が要求されたことを、図１４のステップＳ１１２に示す使用ブロック数削減処理を実行するトリガに用いる。
【０１２０】
図２１と図５とを比較すると明らかなように、本実施の形態２によるメモリシステム２は、図５に示すメモリシステム１と同様の構成に加え、タイマ２０１が設けられている。タイマ２０１は、たとえばアップカウンタで構成され、カウント値が所定の値以上になると、ブロック数削減処理部１０７に使用ブロック数削減要求を出す。ブロック数削減処理部１０７は、この要求に応じて、図１５、図１６Ａまたは図１６Ｂに示す使用ブロック数削減処理を実行する。
【０１２１】
図２２は、タイマのカウント値に基づいて使用ブロック数削減処理を実行する際の概略動作を示すフローチャートである。図２２に示すように、ブロック数削減処理部１０７は、タイマ２０１を起動後（ステップＳ３０１）、ホスト機器１５０からコマンドを受信したか否かをたとえば定期的に判定し（ステップＳ３０２）、コマンドを受信していない場合（ステップＳ３０２のＮＯ）、タイマ２０１のカウント値Ｈが予め定めておいた閾値Ｔｔ以上であるか否かを判定する（ステップＳ３０３）。カウント値Ｈが閾値Ｔｔ未満である場合（ステップＳ３０３のＮＯ）、ブロック数削減処理部１０７は、そのままステップＳ３０２へ帰還する。一方、カウント値Ｈが閾値Ｔｔ以上である場合（ステップＳ３０３のＹＥＳ）、ブロック数削減処理部１０７は、タイマ２０１をリセットし（ステップＳ３０４）、その後、図１４のステップＳ１１２と同様に、使用ブロック数削減処理を実行した後（ステップＳ３０７）、ステップＳ３０２へ帰還する。
【０１２２】
また、ホスト機器１５０からコマンドを受信した場合（ステップＳ３０２のＹＥＳ）、ブロック数削減処理部１０７は、タイマ２０１をリセットし（ステップＳ３０５）、つづいて、受信したコマンドが使用ブロック数削減要求であるか否かを判定する（ステップＳ３０６）。使用ブロック数削減要求でない場合（ステップＳ３０６のＮＯ）、ブロック数削減処理部１０７は、そのままステップＳ３０２へ帰還する。一方、使用ブロック数削減要求である場合（ステップＳ３０６のＹＥＳ）、ブロック数削減処理部１０７は、図１４のステップＳ１１２と同様に、使用ブロック数削減処理を実行し（ステップＳ３０７）、ステップＳ３０２へ帰還する。
【０１２３】
このように本実施の形態２によれば、ホストからのコマンドが一定時間来ない場合には今後もコマンドが来ない期間が続くと予想し、その間に使用ブロック数の削減処理を進めておくことが可能となる。また、使用ブロック数削減を指示するコマンドについても、ホスト自身がその後しばらくデータにアクセスしない期間であることを認識した上で前期コマンドを出していることを期待できる。したがって、トータルとしての使用ブロック数削減処理を減らすことはできないが、ホストがデータにアクセスしない期間にあらかじめ使用ブロック数削減処理を進めておくことにより、ホストからの書込みと並行して進めるべき使用ブロック数削減処理を減らし、ホストからの書込み時の転送性能の劣化を抑えることができる。その他の構成、動作および効果は、実施の形態１と同様であるため、ここでは詳細な説明を省略する。
【０１２４】
なお、本発明は、上記実施の形態そのままに限定されるものではなく、実施段階ではその要旨を逸脱しない範囲で構成要素を変形して具体化することができる。また、上記実施の形態に開示されている複数の構成要素の適宜な組み合わせにより、種々の発明を形成することができる。例えば、実施の形態に示される全構成要素からいくつかの構成要素を削除してもよい。さらに、異なる実施の形態にわたる構成要素を適宜組み合わせても良い。
【符号の説明】
【０１２５】
１  メモリシステム、１０  パーソナルコンピュータ、１００  コントローラ部、１０１  アドレス変換テーブル記憶部、１０１Ａ  アドレス変換テーブル、１０１ａ  メインテーブル、１０１ｂ−１，１０１ｂ−２，…  サブテーブル、１０２  ブロック管理部、１０２ａ  フリーブロック群管理情報、  １０２ｂ  ＳＬＣブロック群管理情報、  １０２ｃ  ＭＬＣブロック群管理情報、  １０２ｄ  ブロック管理情報、  １０３  有効データ量管理部、  １０４  読出コマンド処理部、  １０５  書込コマンド処理部、  １０６  削除コマンド処理部、  １０７  ブロック数削減処理部、  １０８  転記元ブロック群選択部、  １０９  転記元ブロック選択部、  １１０  不揮発性メモリ部、  １１１  ＮＡＮＤコントローラ、  １１２  ＭＬＣフラッシュメモリ、  １２０  バッファメモリ部、  １３０  インタフェース部、  １４０  信号線、  １５０  ホスト機器、  ２０１  タイマ、  Ｂ＿ｓｌｃ  ＳＬＣブロック、  Ｂ＿ｍｌｃ  ＭＬＣブロック、  Ｂ＿ｆｒｅｅ  フリーブロック、  Ｄ１  データ、  Ｇ＿ｓｌｃ  ＳＬＣブロック群、  Ｇ＿ｍｌｃ  ＭＬＣブロック群、  Ｇ＿ｆｒｅｅ  フリーブロック群、  Ｄｔｓ、Ｄｔｍ  データ
【図１】
2012068986.tif 000003
【図２】
2012068986.tif 000004
【図３】
2012068986.tif 000005
【図４】
2012068986.tif 000006
【図５】
2012068986.tif 000007
【図６】
2012068986.tif 000008
【図７】
2012068986.tif 000009
【図８】
2012068986.tif 000010
【図９】
2012068986.tif 000011
【図１０】
2012068986.tif 000012
【図１１】
2012068986.tif 000013
【図１２】
2012068986.tif 000014
【図１３】
2012068986.tif 000015
【図１４】
2012068986.tif 000016
【図１５】
2012068986.tif 000017
【図１６Ａ】
2012068986.tif 000018
【図１６Ｂ】
2012068986.tif 000019
【図１７】
2012068986.tif 000020
【図１８】
2012068986.tif 000021
【図１９】
2012068986.tif 000022
【図２０】
2012068986.tif 000023
【図２１】
2012068986.tif 000024
【図２２】
2012068986.tif 000025