(57)【要約】【課題】利便性の高いメモリシステムを得ること。【解決手段】一つの実施形態によれば、メモリシステムはホストに接続可能である。前記メモリシステムは、不揮発性のメモリと、メモリコントローラと、を備える。前記メモリは、前記ホストから送られてきたデータが格納される記憶領域を有する。前記メモリコントローラは、前記ホストと前記メモリとの間のデータ転送を実行し、前記記憶領域の空き領域の量が閾値より小さい場合にガベージコレクションを実行する。前記メモリコントローラは、前記閾値が余裕容量を超えないように前記閾値を調整する。【選択図】図４
2018156600.tif 000002
【特許請求の範囲】
【請求項１】
ホストに接続可能なメモリシステムであって、
前記ホストから送られてきたデータが格納される記憶領域を有する不揮発性のメモリと、
前記ホストと前記メモリとの間のデータ転送を実行し、前記記憶領域の空き領域の量が閾値より小さい場合にガベージコレクションを実行し、前記閾値が余裕容量を超えないように前記閾値を調整する、メモリコントローラと、
を備えることを特徴とするメモリシステム。
【請求項２】
前記メモリコントローラは、前記余裕容量に０より大きく１以下の固定値を乗算し、乗算によって得られた値を前記閾値として設定する、
ことを特徴とする請求項１に記載のメモリシステム。
【請求項３】
前記メモリコントローラは、前記記憶領域の空き領域の量が前記閾値より小さい場合に前記データ転送と前記ガベージコレクションとを並行して実行し、前記記憶領域の空き領域の量が小さいほど前記ガベージコレクションの実行比率を大きくし、前記記憶領域の空き領域の量が大きいほど前記ガベージコレクションの実行比率を小さくする、
ことを特徴とする請求項１に記載のメモリシステム。
【請求項４】
前記メモリコントローラは、前記記憶領域の空き領域の量に応じて前記ガベージコレクションの実行比率を段階的または連続的に変化させる、
ことを特徴とする請求項３に記載のメモリシステム。
【請求項５】
前記メモリコントローラは、前記記憶領域の空き領域の量が前記閾値より大きい場合に前記ガベージコレクションを実行しない、
ことを特徴とする請求項１に記載のメモリシステム。
【請求項６】
ホストに接続可能なメモリシステムであって、
前記ホストから送られてきたデータが格納される記憶領域を有する不揮発性のメモリと、
前記ホストと前記メモリとの間のデータ転送を実行し、前記記憶領域の空き領域の量が閾値より小さい場合にガベージコレクションを実行し、前記閾値が前記記憶領域の容量から前記記憶領域に格納された有効データの量である第１量を減算して得られる第２量を超えないように前記閾値を調整する、メモリコントローラと、
を備えることを特徴とするメモリシステム。
【請求項７】
前記メモリコントローラは、前記第２量に０より大きく１以下の固定値を乗算し、乗算によって得られた値を前記閾値として設定する、
ことを特徴とする請求項６に記載のメモリシステム。
【請求項８】
前記メモリコントローラは、前記記憶領域の空き領域の量が前記閾値より小さい場合に前記データ転送と前記ガベージコレクションとを並行して実行し、前記記憶領域の空き領域の量が小さいほど前記ガベージコレクションの実行比率を大きくし、前記記憶領域の空き領域の量が大きいほど前記ガベージコレクションの実行比率を小さくする、
ことを特徴とする請求項６に記載のメモリシステム。
【請求項９】
前記メモリコントローラは、前記ガベージコレクションの実行比率を段階的または連続的に変化させる、
ことを特徴とする請求項８に記載のメモリシステム。
【請求項１０】
前記メモリコントローラは、前記記憶領域の空き領域の量が前記閾値より大きい場合に前記ガベージコレクションを実行しない、
ことを特徴とする請求項６に記載のメモリシステム。
【請求項１１】
ホストから送られてきたデータが格納される記憶領域を有する不揮発性のメモリを制御するメモリコントローラによる制御方法であって、
前記ホストと前記メモリとの間のデータ転送を実行し、
前記記憶領域の空き領域の量が閾値より小さい場合にガベージコレクションを実行し、
前記閾値が余裕容量を超えないように前記閾値を調整する、
を備えることを特徴とする制御方法。
【発明の詳細な説明】
【技術分野】
【０００１】
本実施形態は、メモリシステムおよび制御方法に関する。
【背景技術】
【０００２】
従来、ＳＳＤ（Solid  State  Drive）と呼ばれるメモリシステムが知られている。ＳＳＤは、ＮＡＮＤ型フラッシュメモリ等の不揮発性の半導体メモリを用いたデバイスである。
【０００３】
ＳＳＤでは、原則的に、データを上書きできない。また、ＳＳＤは、データの消去をブロック単位でしか実行できない。このため、ＳＳＤでは、ガベージコレクションと呼ばれる処理を実行することによって、空き領域を有するブロックを生成する。
【発明の概要】
【発明が解決しようとする課題】
【０００４】
従来のメモリシステムでは、利便性の点で改良の余地がある。
【０００５】
一つの実施形態は、利便性の高いメモリシステムを得ることを目的とする。
【課題を解決するための手段】
【０００６】
一つの実施形態によれば、メモリシステムはホストに接続可能である。前記メモリシステムは、不揮発性のメモリと、メモリコントローラと、を備える。前記メモリは、前記ホストから送られてきたデータが格納される記憶領域を有する。前記メモリコントローラは、前記ホストと前記メモリとの間のデータ転送を実行し、前記記憶領域の空き領域の量が閾値より小さい場合にガベージコレクションを実行する。前記メモリコントローラは、前記閾値が余裕容量を超えないように前記閾値を調整する。
【図面の簡単な説明】
【０００７】
【図１】図１は、第１の実施形態のメモリシステムの構成例を示す図である。
【図２】図２は、ＮＡＮＤメモリの構成例を示す図である。
【図３】図３は、第１の実施形態のガベージコレクションの開始タイミングを説明するための図である。
【図４】図４は、第１の実施形態の閾値Ｔｈを設定する動作を説明するフローチャートである。
【図５】図５は、第１の実施形態のガベージコレクションの開始および停止の動作を説明するフローチャートである。
【図６】図６は、第２の実施形態のガベージコレクションの開始タイミングを説明するための図である。
【発明を実施するための形態】
【０００８】
以下に添付図面を参照して、実施形態にかかるメモリシステムおよび制御方法を詳細に説明する。なお、これらの実施形態により本発明が限定されるものではない。
【０００９】
（第１の実施形態）
図１は、第１の実施形態のメモリシステムの構成例を示す図である。メモリシステム１は、ホスト（Host）２と所定の通信インタフェースで接続される。ホスト２は、例えばパーソナルコンピュータ、携帯情報端末、またはサーバなどが該当する。メモリシステム１は、ホスト２からアクセス要求（リード要求およびライト要求）を受け付けることができる。各アクセス要求は、アクセス先を示す論理アドレスを伴う。論理アドレスは、メモリシステム１がホスト２に提供する論理アドレス空間内の位置を示す。メモリシステム１は、ライト要求とともに、書き込み対象のデータを受け付ける。
【００１０】
メモリシステム１は、ＮＡＮＤ型のフラッシュメモリ（ＮＡＮＤメモリ）１０と、ホスト２とＮＡＮＤメモリ１０との間のデータ転送を実行するメモリコントローラ２０と、を備えている。なお、メモリシステム１は、ＮＡＮＤメモリ１０の代わりに任意の不揮発性メモリを具備することができる。例えば、メモリシステム１は、ＮＡＮＤメモリ１０の代わりにＮＯＲ型のフラッシュメモリを具備することができる。
【００１１】
ＮＡＮＤメモリ１０は、１以上のメモリチップ（Chip）１１を含む。ここでは一例として、ＮＡＮＤメモリ１０は４つのメモリチップ１１を含む。各メモリチップ１１は、複数のブロックを備える。ブロックは、例えばデータのイレースが実行され得る最小の記憶領域である。ブロックは、複数のページを備える。ページは、例えばデータのリードまたはデータのライトが実行され得る最小の記憶領域である。
【００１２】
図２は、ＮＡＮＤメモリ１０の構成例を示す図である。図示するように、ＮＡＮＤメモリ１０は、ユーザデータが格納されるユーザ領域１２を備える。ユーザデータは、ホスト２から送られてきたデータである。ユーザ領域１２は、複数のブロックによって構成される。ユーザ領域１２の容量を、ユーザ領域サイズ、と表記する。
【００１３】
なお、メモリコントローラ２０は、容量、サイズ、データの量を、任意の単位で扱うことが可能である。メモリコントローラ２０は、ページ数、クラスタ数、ブロック数など、任意の単位で、容量、サイズ、およびデータの量を扱うことができる。
【００１４】
図１に説明を戻す。メモリコントローラ２０は、ＣＰＵ（Central  Processing  Unit）２１と、ホストインタフェース（Host  I/F）２２と、ＲＡＭ（Random  Access  Memory）２３と、ＮＡＮＤＣ２４と、を備える。
【００１５】
ＣＰＵ２１は、ファームウェアプログラムに基づいてメモリコントローラ２０の制御を実行する。ファームウェアプログラムは、例えばＮＡＮＤメモリ１０などの不揮発性メモリに予め格納されており、起動時にＮＡＮＤメモリ１０から読み出されてＣＰＵ２１によって実行される。
【００１６】
ＲＡＭ２３は、バッファ、あるいはＣＰＵ２１のワークエリアとして使用されるメモリである。ＲＡＭ２３を構成するメモリの種類は、特定の種類に限定されない。例えば、ＲＡＭ２３は、ＤＲＡＭ（Dynamic  Random  Access  Memory）、ＳＲＡＭ（Static  Random  Access  Memory）、またはこれらの組み合わせによって構成される。
【００１７】
ホストインタフェース２２は、ホスト２との間の通信インタフェースの制御を実行する。ホストインタフェース２２は、ＣＰＵ２１による制御の下で、ホスト２とＲＡＭ２３との間のデータ転送を実行する。ＮＡＮＤＣ２４は、ＣＰＵ２１による制御の下で、ＮＡＮＤメモリ１０とＲＡＭ２３との間のデータ転送を実行したりする。
【００１８】
ＣＰＵ２１は、ホスト２からのデータをＮＡＮＤメモリ１０に転送する際には、当該データをいったんＲＡＭ２３にバッファし、ＲＡＭ２３にバッファされたデータをＮＡＮＤメモリ１０に送る。また、ＣＰＵ２１は、ホスト２からデータのリードが要求された場合には、要求されたデータをＮＡＮＤメモリ１０からＲＡＭ２３に読み出し、ＲＡＭ２３に読み出されたデータをホスト２に送信する。
【００１９】
ＣＰＵ２１は、データをＮＡＮＤメモリ１０に送る際には、空き領域からそのデータの書き込み位置を決定する。空き領域とは、いずれのデータもプログラムされていない領域であり、新たなデータのプログラムが可能な領域である。ＣＰＵ２１は、当該データの位置を示す論理アドレスに、決定されたプログラム位置をマッピングする。
【００２０】
ここで、当該データ（新しいデータ）の位置を示す論理アドレスに別のデータ（古いデータ）のプログラム位置がマッピングされていた場合、マッピングの更新により、当該古いデータのプログラム位置は、いずれの論理アドレスもマッピングされていない状態となる。その結果、ホスト２は、新しいデータをメモリシステム１からリードすることが可能であるが、古いデータをリードすることができなくなる。論理アドレスにマッピングされている位置に格納されているユーザデータを、有効データと表記する。論理アドレスにマッピングされていない位置に格納されているユーザデータを、無効データと表記する。
【００２１】
このように、ユーザ領域１２には、有効データと無効データとが保持され得る。ユーザ領域１２が記憶可能な有効データの最大量は、表記容量（user  capacity）と呼ばれる。ユーザ領域サイズは、表記容量よりも大きく、ユーザ領域サイズと表記容量との差分は、余裕容量（over-provisioning  capacity）と呼ばれる。
【００２２】
なお、余裕容量は、バイト数、ページ数、クラスタ数、ブロック数など、任意の単位で表記され得る。また、余裕容量は、ユーザ領域サイズまたは表記容量など、他の容量に対する割合（パーセント）によっても表記され得る。
【００２３】
空き領域の消費が進むと、空き領域を有するブロックが枯渇する。ＣＰＵ２１は、無効なデータをイレースすることによって、空き領域を有するブロックを生成する。１つのブロックに記憶される全てのデータが無効であることは稀であるため、実際には、ＣＰＵ２１は、ブロック内に残っている有効データを別のブロックに転記（コピー）し、その後、転記元のブロックに記憶される全てのデータをイレースする。この有効データを転記するプロセスは、ガベージコレクションと呼ばれる。有効データの転記によって有効データを全く含まなくなったブロックは、フリーブロックと呼ばれる。
【００２４】
図３は、第１の実施形態のガベージコレクションの開始タイミングを説明するための図である。ここでは説明をわかりやすくするために、シーケンシャルライトが実行される例について説明する。シーケンシャルライトとは、書き込み先として指定される論理アドレスが連続するように複数のライト要求が発行されるアクセスパターンをいう。
【００２５】
図３において、横軸は経過時間を示している。紙面左側の縦軸は、ユーザ領域１２内の空き領域の量を示しており、実線は、ユーザ領域１２内の空き領域の量の推移を示している。紙面右側の縦軸は、ＮＡＮＤメモリ１０に保持される有効データの量を示しており、太い点線は、ＮＡＮＤメモリ１０に保持される有効データの量の推移を示している。なお、本図以降の説明では、空き領域とは、いずれのデータもプログラムされていない領域だけでなく、ガベージコレクションによって有効なデータを全く含まなくなった領域を含むものとする。
【００２６】
図３に示されるように、有効データが書き込まれるとともに空き領域の量が減少する。ＮＡＮＤメモリ１０に保持される有効データの量が表記容量に達すると、その後は、ライト先として指定される論理アドレスが重複するデータの書き込みが行われる。その結果、有効データの量は表記容量で一定となり、無効データの量のみが増加する。よって、空き領域の量の減少は、有効データの量が表記容量に達した後も続く。
【００２７】
その後、空き領域の量が、第１の実施形態の閾値Ｔｈを下回ると、ＣＰＵ２１は、ガベージコレクションを開始する。ＣＰＵ２１は、空き領域の量が閾値Ｔｈまで回復した場合、ガベージコレクションを停止する。
【００２８】
図３の例では、余裕容量に０．９を掛けて得られる値が閾値Ｔｈとして用いられている。ここで、ユーザ領域１２に不良ブロックが発生すると、ユーザ領域サイズが目減りする。表記容量は一定であるので、ユーザ領域サイズの目減りにより、余裕容量が減少する。余裕容量が減少した場合、減少後の余裕容量を用いて閾値Ｔｈが再計算される。即ち、減少後の余裕容量に０．９を掛けて得られる値が閾値Ｔｈとして用いられる。このように、余裕容量に応じて閾値Ｔｈが逐次変更、即ち調整される。よって、閾値Ｔｈは、余裕容量を越えることがない。
【００２９】
ここで、仮に、閾値Ｔｈとして固定値が使用される場合、余裕容量が減少することにより、閾値Ｔｈが余裕容量よりも大きくなる。その場合において有効データの量が表記容量に至ると、空き領域の量が閾値Ｔｈまで回復することがないので、常にガベージコレクションが行われ、ＮＡＮＤメモリ１０の疲弊が進む。
【００３０】
第１の実施形態では、閾値Ｔｈが余裕容量以下の値に維持される。よって、有効データの量が表記容量に至っている場合であっても、ガベージコレクションが停止できなくなることが防止される。
【００３１】
なお、余裕容量に０．９など０より大きく１以下の固定値を掛けて得られる値が閾値Ｔｈとして設定されることは、閾値Ｔｈを余裕容量を越えない値に維持する方法の一例である。閾値Ｔｈが余裕容量を越えない値に維持される限り、閾値Ｔｈの設定方法は余裕容量に固定値を掛ける方法だけに限定されない。
【００３２】
また、余裕容量が減少するケースは、不良ブロックが発生するケースだけに限定されない。
【００３３】
例えば、ワードラインを構成する各メモリセルは、ｎ（ｎ≧１）ビット以上の値を保持可能である場合がある。ｎが１である方式を、ＳＬＣ（Single  Level  Cell）モードと表記する。各メモリセルにｎビットの値が保持される場合、ワード線ＷＬ当たりの記憶容量はｎページ分のサイズに等しくなる。ｎが２であるモードを、ＭＬＣ（Multi-Level  Cell）モードと表記する。ｎが３以上であるモードがあってもよい。１メモリセルにｎビットの値を保持するこれらのモードを、記憶モードと表記する。
【００３４】
例えば、ＣＰＵ２１が、ユーザ領域１２を構成する或るブロックの記憶モードを、ＳＬＣモードからＭＬＣモードに変更した場合、ユーザ領域１２のサイズが１ブロック分増加し、余裕容量も１ブロック分増加する。反対に、ＣＰＵ２１が、ユーザ領域１２を構成する或るブロックの記憶モードを、ＭＬＣモードからＳＬＣモードに変更した場合、ユーザ領域１２のサイズが１ブロック分減少し、余裕容量も１ブロック分減少する。
【００３５】
このように、記憶モードの変更によっても余裕容量が増減し得る。
【００３６】
なお、記憶モードの変更方法は、特定の方法だけに限定されない。ＣＰＵ２１は、フリーブロックをイレースし、イレースされたブロックをデータの書き込み先として設定する際に、そのブロックをＳＬＣモードで動作させるかＭＬＣモードで動作させるかを、任意の方法で決定することができる。ＳＬＣモードにおいては、ＭＬＣモードに比べ、格納可能なデータの量が減少する反面、データのプログラムにかかる時間がより短い。よって、イレース後のブロックの記憶モードをＳＬＣモードに設定することによって、瞬間的な書き込み速度を向上させることができる。逆に、イレース後のブロックの記憶モードをＭＬＣモードに設定することによって、瞬間的な書き込み速度は遅くなるものの、ガベージコレクションの開始タイミングを遅らせることができる。
【００３７】
なお、ＣＰＵ２１は、空き領域の量が閾値Ｔｈより小さい場合、ホスト２とＮＡＮＤメモリ１０との間のユーザデータの転送とガベージコレクションとを並行して実行する。よって、ガベージコレクションの実行が開始された後であっても、本図に示されるように、空き領域の量は減少し得る。ＣＰＵ２１は、ガベージコレクションが開始した後は、ホスト２とＮＡＮＤメモリ１０との間のユーザデータの転送とガベージコレクションとを調停してもよい。また、ＣＰＵ２１は、空き領域の量に応じて調停の比率を変化させてもよい。一例では、空き領域の量が多いほど、ＣＰＵ２１は、ガベージコレクションの実行の比率を小さくする。空き領域の量が少ないほど、ＣＰＵ２１は、ガベージコレクションの実行の比率を大きくする。ガベージコレクションの実行の比率は、空き領域の量に応じて段階的に変化してもよいし、連続的に変化してもよい。
【００３８】
なお、ホスト２とＮＡＮＤメモリ１０との間のユーザデータの転送とガベージコレクションとを並行して実行するとは、ホスト２とＮＡＮＤメモリ１０との間のユーザデータの転送とガベージコレクションとを時分割方式で切り替えながら実行したり、ホスト２とＮＡＮＤメモリ１０との間のユーザデータの転送のうちの一部の処理（例えばホスト２とのユーザデータまたはコマンドの送受信）のバックグラウンドでガベージコレクションを実行したりすることである。
【００３９】
次に、第１の実施形態のメモリシステム１の動作を説明する。図４は、第１の実施形態の閾値Ｔｈを設定する動作を説明するフローチャートである。
【００４０】
まず、ＣＰＵ２１は、閾値Ｔｈを設定するタイミングに至ったか否かを判定する（Ｓ１０１）。閾値Ｔｈを設定するタイミングに至っていない場合（Ｓ１０１、Ｎｏ）、ＣＰＵ２１は、Ｓ１０１の処理を再び実行する。
【００４１】
閾値Ｔｈを設定するタイミングは、任意に設定され得る。一例では、ＣＰＵ２１は、前回に閾値Ｔｈを設定したタイミングから例えば１０ｍｓｅｃなどの所定の時間が経過した場合に、閾値Ｔｈを設定するタイミングに至ったと判定する。まだ一度も閾値Ｔｈを設定していない場合には、即座に閾値Ｔｈを設定するタイミングに至ったと判定する。
【００４２】
別の例では、ＣＰＵ２１は、余裕容量を監視し、余裕容量が変動した場合に、閾値Ｔｈを設定するタイミングに至ったと判定する。
【００４３】
閾値Ｔｈを設定するタイミングに至った場合（Ｓ１０１、Ｙｅｓ）、ＣＰＵ２１は、余裕容量を取得する（Ｓ１０２）。
【００４４】
余裕容量の取得方法は、特定の方法に限定されない。一例では、ＣＰＵ２１は、余裕容量を常時監視する。ＣＰＵ２１は、余裕容量を例えばＲＡＭ２３などに記憶し、不良ブロックが発生した場合、記憶している余裕容量から不良ブロック分の記憶容量を減算する。このように、ＣＰＵ２１は、余裕容量を常時記憶し、Ｓ１０２では、記憶している余裕容量を読み出す。
【００４５】
別の例では、Ｓ１０２において、ＣＰＵ２１は、ユーザ領域１２に割り当てられたブロックの数から不良ブロックの数を減算することによって、余裕容量を演算する。
【００４６】
Ｓ１０２に続いて、ＣＰＵ２１は、余裕容量に、定数αを乗算し、得られた値を閾値Ｔｈとして設定する（Ｓ１０３）。そして、ＣＰＵ２１は、Ｓ１０１の処理を再び実行する。なお、定数αは、０より大きくかつ１以下の値である。
【００４７】
図５は、第１の実施形態のガベージコレクションの開始および停止の動作を説明するフローチャートである。
【００４８】
ＣＰＵ２１は、空き領域の量が閾値Ｔｈより小さいか否かを判定する（Ｓ２０１）。空き領域の量が閾値Ｔｈより小さくない場合（Ｓ２０１、Ｎｏ）、ＣＰＵ２１は、Ｓ２０１の処理を再び実行する。
【００４９】
空き領域の量が閾値Ｔｈより小さい場合（Ｓ２０１、Ｙｅｓ）、ＣＰＵ２１は、ガベージコレクションを開始する（Ｓ２０２）。そして、ＣＰＵ２１は、空き領域の量が閾値Ｔｈより小さいか否かを再び判定する（Ｓ２０３）。空き領域の量が閾値Ｔｈより小さい場合（Ｓ２０３、Ｙｅｓ）、ＣＰＵ２１は、Ｓ２０３の処理を再び実行する。
【００５０】
空き領域の量が閾値Ｔｈより小さくない場合（Ｓ２０３、Ｎｏ）、ＣＰＵ２１は、ガベージコレクションを停止する（Ｓ２０４）。そして、ＣＰＵ２１は、Ｓ２０１の処理を再び実行する。
【００５１】
なお、本図の例では、空き領域の量が閾値Ｔｈと等しい場合の処理は、上記に限定されない。例えばＳ２０１において空き領域の量が閾値Ｔｈと等しいと判断された場合には、Ｓ２０２の処理が実行されてもよい。Ｓ２０３において空き領域の量が閾値Ｔｈと等しいと判断された場合、Ｓ２０４の処理に進まなくてもよい。
【００５２】
以上述べたように、第１の実施形態によれば、ＣＰＵ２１は、ユーザ領域１２の空き領域の量が閾値Ｔｈより小さい場合にガベージコレクションを実行する。また、ＣＰＵ２１は、閾値Ｔｈが余裕容量を超えないように閾値Ｔｈを調整する。調整するとは、逐次変更することである。
【００５３】
このように、余裕容量が変動しても閾値Ｔｈが余裕容量を超えないので、有効データの量が表記容量に至っている場合であってもガベージコレクションが停止できなくなることが防止されるので、ＮＡＮＤメモリ１０の疲弊の進行が抑制される。その結果、メモリシステム１の寿命が延命され、メモリシステム１の利便性が向上する。
【００５４】
また、ＣＰＵ２１は、余裕容量に０より大きく１以下の固定値を乗算し、乗算によって得られた値を閾値Ｔｈとして設定する。
【００５５】
これにより、余裕容量を超えない閾値Ｔｈを簡単なアルゴリズムで求めることが可能となる。
【００５６】
また、ＣＰＵ２１は、ユーザ領域１２の空き領域の量が閾値Ｔｈより小さい場合に、ホスト２とＮＡＮＤメモリ１０との間のデータ転送とガベージコレクションとを並行して実行する。そして、ＣＰＵ２１は、ユーザ領域１２の空き領域の量が小さいほどガベージコレクションの実行比率を大きくし、ユーザ領域１２の空き領域の量が大きいほどガベージコレクションの実行比率を小さくする。
【００５７】
これにより、ガベージコレクションの開始の際にホスト２に対する応答性能が急落することが抑制される。
【００５８】
なお、ＣＰＵ２１は、ガベージコレクションの実行比率を段階的に変化させてもよいし、連続的に変化させてもよい。
【００５９】
なお、ＣＰＵ２１は、ユーザ領域１２の空き領域の量が閾値Ｔｈより大きい場合にはガベージコレクションを実行しない。
【００６０】
（第２の実施形態）
第２の実施形態のメモリシステム１の動作は、ＣＰＵ２１が、余裕容量に代えて、ユーザ領域サイズから有効データの量を減算して得られる量を用いて閾値Ｔｈを演算する点を除き、第１の実施形態と同様である。第２の実施形態では、ユーザ領域サイズから有効データの量を減算して得られる量に応じて閾値Ｔｈを設定する。
【００６１】
図６は、第２の実施形態のガベージコレクションの開始タイミングを説明するための図である。本図において、横軸は経過時間を示している。紙面左側の縦軸は、ユーザ領域１２内の空き領域の量を示しており、実線は、ユーザ領域１２内の空き領域の量の推移を示している。紙面右側の縦軸は、ＮＡＮＤメモリ１０に保持される有効データの量を示しており、太い点線は、ＮＡＮＤメモリ１０に保持される有効データの量の推移を示している。
【００６２】
ユーザ領域サイズは、第１の実施形態と同様に、変動し得る。
【００６３】
また、有効データの量は、変動し得る。例えば、有効データの量は、ホスト２からの書き込みによって増加する。また、有効データの量は、トリムによって減少し得る。トリムとは、ＮＡＮＤメモリ１０内の位置への論理アドレスのマッピングを解消することである。トリムは、ホスト２からの要求（例えばトリム要求）に応じて実行される。
【００６４】
本図の例では、ユーザ領域サイズから有効データの量を減算して得られる量に対して０．９を乗じて得られる値が閾値Ｔｈとして設定される。よって、ユーザ領域サイズおよび有効データの量が変動したとしても、閾値Ｔｈの値は、ユーザ領域サイズから有効データの量を減算して得られる量を超えることがない。
【００６５】
上述のように閾値Ｔｈが設定されることにより、例えば余裕容量が表記容量を下回っている場合であっても、有効データの量が表記容量より少なければ、メモリシステム１は、ガベージコレクションを実行したり停止したりしながらホスト２とＮＡＮＤメモリ１０との間のデータ転送を継続することができる。
【００６６】
なお、有効データの量が表記容量に達している場合、ユーザ領域サイズから有効データの量を減算して得られる量は、余裕容量と一致する。よって、メモリシステム１の挙動は第１の実施形態と同じになる。即ち、有効データの量が表記容量に至っている場合であっても、ガベージコレクションが停止できなくなることが防止される。
【００６７】
なお、ユーザ領域サイズから有効データの量を減算して得られる量に０．９など０より大きく１以下の固定値を掛けて得られる値が閾値Ｔｈとして設定されることは、閾値Ｔｈをユーザ領域サイズから有効データの量を減算して得られる量を越えない値に維持する方法の一例である。閾値Ｔｈがユーザ領域サイズから有効データの量を減算して得られる量を越えない値に維持される限り、閾値Ｔｈの設定方法は余裕容量に固定値を掛ける方法だけに限定されない。
【００６８】
以上述べたように、第２の実施形態によれば、ＣＰＵ２１は、ユーザ領域１２の空き領域の量が閾値Ｔｈより小さい場合にガベージコレクションを実行する。また、ＣＰＵ２１は、閾値Ｔｈがユーザ領域サイズから有効データの量を減算して得られる量を超えないように閾値Ｔｈを調整する。
【００６９】
よって、余裕容量が表記容量を下回っている場合であっても、有効データの量が表記容量より少なければ、メモリシステム１を使用することが可能である。即ち、メモリシステム１の利便性が向上する。
【００７０】
また、有効データの量が表記容量に至った場合であっても、ガベージコレクションが停止できなくなることが防止されるので、ＮＡＮＤメモリ１０の疲弊の進行が抑制される。その結果、メモリシステム１の寿命が延命され、メモリシステム１の利便性が向上する。
【００７１】
また、ＣＰＵ２１は、ユーザ領域サイズから有効データの量を減算して得られる量に０より大きく１以下の固定値を乗算し、乗算によって得られた値を閾値Ｔｈとして設定する。
【００７２】
これにより、ユーザ領域サイズから有効データの量を減算して得られる量を超えない閾値Ｔｈを簡単なアルゴリズムで求めることが可能となる。
【００７３】
また、ＣＰＵ２１は、ユーザ領域１２の空き領域の量が閾値Ｔｈより小さい場合に、ホスト２とＮＡＮＤメモリ１０との間のデータ転送とガベージコレクションとを並行して実行し、ユーザ領域１２の空き領域の量が小さいほどガベージコレクションの実行比率が大きくなるように、ガベージコレクションの実行比率を段階的または連続的に変化させてもよい。
【００７４】
これにより、ガベージコレクションの開始の際にホスト２に対する応答性能が急落することが抑制される。
【００７５】
なお、ＣＰＵ２１は、ユーザ領域１２の空き領域の量が閾値Ｔｈより大きい場合にはガベージコレクションを実行しない。
【００７６】
なお、以上の実施形態において、図４および図５に例示された動作はＣＰＵ２１がファームウェアを実行することによって実現する、として説明した。図４および図５に例示された動作の一部または全部は、ハードウェア回路によって実現されてもよい。例えば、メモリコントローラ２０は、FPGA（field-programmable  gate  array）またはASIC（application  specific  integrated  circuit）を備え、ＣＰＵ２１の機能のうちの一部または全部は、FPGAまたはASICによって実現されてもよい。
【００７７】
本発明のいくつかの実施形態を説明したが、これらの実施形態は、例として提示したものであり、発明の範囲を限定することは意図していない。これら新規な実施形態は、その他の様々な形態で実施されることが可能であり、発明の要旨を逸脱しない範囲で、種々の省略、置き換え、変更を行うことができる。これら実施形態やその変形は、発明の範囲や要旨に含まれるとともに、特許請求の範囲に記載された発明とその均等の範囲に含まれる。
【符号の説明】
【００７８】
１  メモリシステム、２  ホスト、１０  ＮＡＮＤメモリ、１１  メモリチップ、１２  ユーザ領域、２０  メモリコントローラ、２１  ＣＰＵ、２２  ホストインタフェース、２３  ＲＡＭ、２４  ＮＡＮＤＣ。
【図１】
2018156600.tif 000003
【図２】
2018156600.tif 000004
【図３】
2018156600.tif 000005
【図４】
2018156600.tif 000006
【図５】
2018156600.tif 000007
【図６】
2018156600.tif 000008