(57)【要約】【課題】寿命と性能のバランスを保つことができるメモリシステムを実現する。【解決手段】実施形態によれば、メモリシステムは、不揮発性メモリに書き込まれたデータ量が許容データ量に達するまで、ホストから受信されるライトコマンドに応じてデータを第１モードで不揮発性メモリに書き込む。不揮発性メモリに書き込まれたデータ量が許容データ量に達した場合、メモリシステムは、書き込みモードを第２モードに変更し、ホストから受信されるライトコマンドに応じてデータを第２モードで不揮発性メモリに書き込む。メモリシステムは、アイドル状態の検出に応答して、許容データ量を第１データ量だけ増やし、アイドル状態の検出の後に不揮発性メモリに書き込まれたデータ量が第１データ量に達するまで、ホストから受信されるライトコマンドに応じてデータを第１モードで不揮発性メモリに書き込む。【選択図】図２３
2018120439.tif 000002
【特許請求の範囲】
【請求項１】
ホストに接続可能なメモリシステムであって、
不揮発性メモリと、
前記不揮発性メモリに電気的に接続され、メモリセル当たりにｎビットデータが書き込まれる第１モードまたはメモリセル当たりにｍビットデータが書き込まれる第２モードを書き込みモードとして選択し、データを前記不揮発性メモリに書き込むように構成されたコントローラとを具備し、前記ｎは１以上の整数であり、前記ｍは前記ｎよりも大きい整数であり、
前記コントローラは、
前記書き込みモードとして前記第１モードを選択し、前記不揮発性メモリに書き込まれたデータ量が前記第１モードで書き込み可能なデータの量を示す許容データ量に達するまで、前記ホストから受信されるライトコマンドに応じてデータを前記第１モードで前記不揮発性メモリに書き込み、
前記不揮発性メモリに書き込まれた前記データ量が前記許容データ量に達した場合、前記書き込みモードを前記第２モードに変更し、前記ホストから受信されるライトコマンドに応じてデータを前記第２モードで前記不揮発性メモリに書き込み、
前記ホストからコマンドが閾時間以上の期間中受信されないアイドル状態を検出し、
前記アイドル状態の検出に応答して、前記許容データ量を第１データ量だけ増やし、
前記アイドル状態の検出の後に前記不揮発性メモリに書き込まれたデータ量が前記第１データ量に達するまで、前記アイドル状態の検出の後に前記ホストから受信されるライトコマンドに応じてデータを前記第１モードで前記不揮発性メモリに書き込むように構成されている、メモリシステム。
【請求項２】
前記コントローラは、前記不揮発性メモリ内のフリーブロックの数が第１閾値以上である場合、前記許容データ量を前記第１データ量だけ増やすように構成されている請求項１記載のメモリシステム。
【請求項３】
前記コントローラは、増やされた前記許容データ量が、前記第１モードで書き込み可能なデータの最大量に達していない場合、前記アイドル状態の検出の度に前記許容データ量を第１データ量だけ増やすように構成されている請求項１記載のメモリシステム。
【請求項４】
前記コントローラは、前記不揮発性メモリの全ブロックのプログラム／イレーズサイクル数の合計を示す現在の総プログラム／イレーズサイクル数が第２閾値以下である場合、前記許容データ量を前記第１データ量だけ増やすように構成されている請求項１記載のメモリシステム。
【請求項５】
前記コントローラは、前記現在の総プログラム／イレーズサイクル数が前記第２閾値以下である場合、プログラム／イレーズサイクル数が第３閾値以下のフリーブロックを前記第１モードでデータが書き込まれるべき書き込み先ブロックとして割り当てるように構成されている請求項４記載のメモリシステム。
【請求項６】
前記コントローラは、前記不揮発性メモリの全ブロックそれぞれのプログラム／イレーズサイクル数のうちの最大値が第４閾値以下である場合、前記許容データ量を前記第１データ量だけ増やすように構成されている請求項１記載のメモリシステム。
【請求項７】
前記コントローラは、前記不揮発性メモリの全ブロックそれぞれのプログラム／イレーズサイクルの平均が第５閾値以下である場合、前記許容データ量を前記第１データ量だけ増やすように構成されている請求項１記載のメモリシステム。
【請求項８】
前記コントローラは、前記不揮発性メモリの全ブロックそれぞれのプログラム／イレーズサイクルのうちの最小値が第６閾値以下である場合、前記許容データ量を前記第１データ量だけ増やすように構成されている請求項１記載のメモリシステム。
【請求項９】
前記コントローラは、前記ホストからライトコマンドが前記閾時間以上の期間中受信されない第１状態を前記アイドル状態として検出するように構成されている請求項１記載のメモリシステム。
【請求項１０】
前記コントローラは、前記ホストからＩ／Ｏコマンドが前記閾時間以上の期間中受信されない第２状態を前記アイドル状態として検出するように構成されている請求項１記載のメモリシステム。
【請求項１１】
前記コントローラは、前記ホストからＩ／Ｏコマンドおよび制御コマンドが前記閾時間以上の期間中受信されない第３状態を前記アイドル状態として検出するように構成されている請求項１記載のメモリシステム。
【請求項１２】
前記コントローラは、ローパワーステートへの遷移を要求するパワー管理コマンドを前記ホストから受信したことを前記アイドル状態として検出するように構成されている請求項１記載のメモリシステム。
【請求項１３】
ホストに接続可能なメモリシステムであって、
不揮発性メモリと、
前記不揮発性メモリに電気的に接続され、メモリセル当たりにｎビットデータが書き込まれる第１モードまたはメモリセル当たりにｍビットデータが書き込まれる第２モードを書き込みモードとして選択し、選択された書き込みモードで、データを前記不揮発性メモリに書き込むように構成されたコントローラとを具備し、前記ｎは１以上の整数であり、前記ｍは前記ｎよりも大きい整数であり、
前記コントローラは、
前記書き込みモードとして前記第１モードを選択し、前記不揮発性メモリに書き込まれたデータ量が前記第１モードで書き込み可能なデータの量を示す許容データ量に達するまで、前記ホストから受信されるライトコマンドに応じてデータを前記第１モードで前記不揮発性メモリに書き込み、
前記不揮発性メモリに書き込まれた前記データ量が前記許容データ量に達した場合、前記書き込みモードを前記第２モードに変更し、前記ホストから受信されるライトコマンドに応じてデータを前記第２モードで前記不揮発性メモリに書き込み、
前記ホストからコマンドが閾時間以上の期間中受信されないアイドル状態を検出し、
前記アイドル状態の検出の度に、前記許容データ量を増やすことを許可するための条件が満たされているか否かを判定し、
前記条件が満たされている場合、前記許容データ量を第１データ量だけ増やし、検出された前記アイドル状態の後に前記ホストから受信されるライトコマンドに応じて前記第１データ量分のデータを前記第１モードで前記不揮発性メモリに書き込み、
前記条件が満たされていない場合、前記書き込みモードを前記第２モードに維持するように構成され、
前記条件は、増やされた前記許容データ量が前記第１モードで書き込み可能なデータの最大量未満であるという第１条件、前記不揮発性メモリの全ブロックのプログラム／イレーズサイクル数の合計を示す総プログラム／イレーズサイクル数、前記全ブロックのプログラム／イレーズサイクル数のうちの最大値、前記全ブロックのプログラム／イレーズサイクル数のうちの最小値、または前記全ブロックのプログラム／イレーズサイクル数の平均が、対応する閾値以下であるという第２条件、または前記増やされた後の前記許容データ量が前記最大量未満であり且つ前記現在の総プログラム／イレーズサイクル数、前記最大値、前記最小値、または前記平均が前記対応する閾値以下であるという第３条件のいずれかを含む、メモリシステム。
【請求項１４】
メモリセル当たりにｎビットデータが書き込まれる第１モードまたはメモリセル当たりにｍビットデータが書き込まれる第２モードを書き込みモードとして選択し、選択された書き込みモードで、データを不揮発性メモリに書き込む制御方法であって、前記ｎは１以上の整数であり、前記ｍは前記ｎよりも大きい整数であり、
前記書き込みモードとして前記第１モードを選択し、前記不揮発性メモリに書き込まれたデータ量が前記第１モードで書き込み可能なデータの量を示す許容データ量に達するまで、前記ホストから受信されるデータを前記第１モードで前記不揮発性メモリに書き込み、
前記不揮発性メモリに書き込まれた前記データ量が前記許容データ量に達した場合、前記書き込みモードを前記第２モードに変更し、前記ホストから受信されるライトコマンドに応じてデータを前記第２モードで前記不揮発性メモリに書き込み、
前記ホストからコマンドが閾時間以上の期間中受信されないアイドル状態を検出し、
前記アイドル状態の検出に応答して、前記許容データ量を第１データ量だけ増やし、
前記アイドル状態の検出の後に前記不揮発性メモリに書き込まれたデータ量が前記第１データ量に達するまで、前記アイドル状態の検出の後に前記ホストから受信されるライトコマンドに応じてデータを前記第１モードで前記不揮発性メモリに書き込む制御方法。
【発明の詳細な説明】
【技術分野】
【０００１】
本発明の実施形態は、不揮発性メモリを備えるメモリシステムおよびその制御方法に関する。
【背景技術】
【０００２】
近年、不揮発性メモリを備えるメモリシステムが広く普及している。
【０００３】
このようなメモリシステムの一つとして、ＮＡＮＤ型フラッシュメモリを備えるソリッドステートドライブ（ＳＳＤ）が知られている。ＳＳＤは、様々なコンピューティングデバイスのメインストレージとして使用されている。
【０００４】
ＮＡＮＤ型フラッシュメモリのような不揮発性メモリにおいては、そのプログラム／イレーズサイクル数が制限されており、実行されたプログラム／イレーズサイクル数がその制限値に達すると不揮発性メモリに障害が起きる。
【０００５】
また、不揮発性メモリにおいては、メモリセル当たりに格納されるビットの数が増えれば増えるほど、そのメモリ容量（記憶密度）は増加し、一方、その不揮発性メモリへデータを書き込むために要する時間およびその不揮発性メモリからデータを読み出すために要する時間は長くなる。
【０００６】
最近では、シングルレベルセル（ＳＬＣ）モードとマルチレベルセル（ＭＬＣ）モードとを選択的に使用してデータを不揮発性メモリに書き込むことが可能なメモリシステムも開発されている。
【先行技術文献】
【特許文献】
【０００７】
【特許文献１】米国特許第８９９０４５８号明細書
【発明の概要】
【発明が解決しようとする課題】
【０００８】
ＳＬＣモードでデータを不揮発性メモリに書き込むことにより、書き込み性能（書き込み速度）および読み出し性能（読み出し速度）を改善することができる。
【０００９】
しかし、ＳＬＣモードを使用した場合には、不揮発性メモリ内の一つのブロックに格納可能なデータ量はＭＬＣモードを使用した場合より減少される。
【００１０】
したがって、ＳＬＣモードを使用した場合においては、ＭＬＣモードを使用した場合よりも高い頻度でブロックそれぞれの書き込み／消去動作が行われ、これによってプログラム／イレーズサイクル数が増加し易くなる。
【００１１】
上述したように不揮発性メモリは制限されたプログラム／イレーズサイクル数を有しているので、プログラム／イレーズサイクル数の増加は、メモリシステムの寿命期間中に書き込み可能な総データ量を表す指標であるＴＢＷ（Ｔｏｔａｌ  Ｂｙｔｅ  Ｗｒｉｔｔｅｎ）を低下させ、これによってメモリシステムの寿命低下が引き起こされる。
【００１２】
本発明が解決しようとする課題は、寿命と性能のバランスを保つことができるメモリシステムおよび制御方法を提供することである。
【課題を解決するための手段】
【００１３】
実施形態によれば、ホストに接続可能なメモリシステムは、不揮発性メモリと、前記不揮発性メモリに電気的に接続され、メモリセル当たりにｎビットデータが書き込まれる第１モードまたはメモリセル当たりにｍビットデータが書き込まれる第２モードを書き込みモードとして選択し、選択された書き込みモードで、データを前記不揮発性メモリに書き込むように構成されたコントローラとを具備する。前記ｎは１以上の整数であり、前記ｍは前記ｎよりも大きい整数である。前記コントローラは、前記書き込みモードとして前記第１モードを選択し、前記不揮発性メモリに書き込まれたデータ量が前記第１モードで書き込み可能なデータの量を示す許容データ量に達するまで、前記ホストから受信されるライトコマンドに応じてデータを前記第１モードで前記不揮発性メモリに書き込む。前記不揮発性メモリに書き込まれた前記データ量が前記許容データ量に達した場合、前記コントローラは、前記書き込みモードを前記第２モードに変更し、前記ホストから受信されるライトコマンドに応じてデータを前記第２モードで前記不揮発性メモリに書き込む。前記コントローラは、前記ホストからコマンドが閾時間以上の期間中受信されないアイドル状態を検出する。前記アイドル状態の検出に応答して、前記コントローラは、前記許容データ量を第１データ量だけ増やす。前記コントローラは、前記アイドル状態の検出の後に前記不揮発性メモリに書き込まれたデータ量が前記第１データ量に達するまで、前記アイドル状態の検出の後に前記ホストから受信されるライトコマンドに応じてデータを前記第１モードで前記不揮発性メモリに書き込む。
【図面の簡単な説明】
【００１４】
【図１】実施形態に係るメモリシステムの構成例を示すブロック図。
【図２】アイドル状態が検出されない場合に同実施形態のメモリシステムによって実行される書き込み動作の例を示す図。
【図３】同実施形態のメモリシステムによってアイドル状態を挟んで実行される書き込み動作の例を示す図。
【図４】同実施形態のメモリシステムによってアイドル状態を挟んで実行される書き込み動作の別の例を示す図。
【図５】同実施形態のメモリシステムによってアイドル状態を挟んで実行される書き込み動作のさらに別の例を示す図。
【図６】同実施形態のメモリシステムによって実行される書き込み動作の手順を示すフローチャート。
【図７】同実施形態のメモリシステムに適用される書き込み動作制御パラメータセットの例を示す図。
【図８】同実施形態のメモリシステムによって実行されるＳＬＣバッファブロック追加／解放／割り当て処理の手順を示すフローチャート。
【図９】同実施形態のメモリシステムによって管理されるフリーブロックプールとＳＬＣブロックプールとＭＬＣアクティブブロックプールとの関係を示す図。
【図１０】同実施形態のメモリシステムによって実行されるブロック管理動作の例を示す図。
【図１１】同実施形態のメモリシステムによって実行されるＳＬＣバッファブロック追加処理の手順を示すフローチャート。
【図１２】同実施形態のメモリシステムによって実行されるＳＬＣバッファブロック追加処理の別の手順を示すフローチャート。
【図１３】同実施形態のメモリシステムによって実行されるＳＬＣバッファブロック追加処理のさらに別の手順を示すフローチャート。
【図１４】同実施形態のメモリシステムによって実行されるＳＬＣバッファブロック追加処理のさらに別の手順を示すフローチャート。
【図１５】同実施形態のメモリシステムによって実行されるＳＬＣバッファブロック追加処理のさらに別の手順を示すフローチャート。
【図１６】同実施形態のメモリシステムによって実行されるＳＬＣバッファブロック追加処理のさらに別の手順を示すフローチャート。
【図１７】同実施形態のメモリシステムによって実行されるＳＬＣバッファブロック追加処理のさらに別の手順を示すフローチャート。
【図１８】同実施形態のメモリシステムによって実行されるＳＬＣバッファブロック追加処理のさらに別の手順を示すフローチャート。
【図１９】同実施形態のメモリシステムによって実行されるＳＬＣバッファブロック解放処理の手順を示すフローチャート。
【図２０】同実施形態のメモリシステムによって実行されるＳＬＣバッファブロック解放処理の別の手順を示すフローチャート。
【図２１】同実施形態のメモリシステムによって実行されるＳＬＣバッファブロック解放処理のさらに別の手順を示すフローチャート。
【図２２】アイドル状態が検出されない場合に同実施形態のメモリシステムによって実行される書き込み動作を示すタイミングチャート。
【図２３】同実施形態のメモリシステムによってアイドル状態を挟んで実行される書き込み動作を示すタイミングチャート。
【図２４】ホストの構成例を示すブロック図。
【図２５】ホストと同実施形態のメモリシステムとを含むコンピュータの構成例を示す図。
【発明を実施するための形態】
【００１５】
以下、図面を参照して、実施形態を説明する。  
まず、図１を参照して、実施形態に係るメモリシステムを含む情報処理システム１の構成を説明する。
【００１６】
このメモリシステムは、不揮発性メモリにデータを書き込み、不揮発性メモリからデータを読み出すように構成された半導体ストレージデバイスである。このメモリシステムは、例えば、ＮＡＮＤ型フラッシュメモリを備えたソリッドステートドライブ（ＳＳＤ）３として実現されている。
【００１７】
情報処理システム１は、ホスト（ホストデバイス）２と、ＳＳＤ３とを含む。ホスト２は、ＳＳＤ３をアクセスする情報処理装置（コンピューティングデバイス）である。ホスト２は、大量且つ多様なデータをＳＳＤ３に保存するサーバ（ストレージサーバ）であってもよいし、パーソナルコンピュータであってもよい。
【００１８】
ＳＳＤ３は、ホスト２として機能する情報処理装置のメインストレージとして使用され得る。ＳＳＤ３は、この情報処理装置に内蔵されてもよいし、この情報処理装置にケーブルまたはネットワークを介して接続されてもよい。
【００１９】
ホスト２とＳＳＤ３とを相互接続するためのインタフェースとしては、ＳＣＳＩ、Ｓｅｒｉａｌ  Ａｔｔａｃｈｅｄ  ＳＣＳＩ（ＳＡＳ）、ＡＴＡ、Ｓｅｒｉａｌ  ＡＴＡ（ＳＡＴＡ）、ＰＣＩ  Ｅｘｐｒｅｓｓ（ＰＣＩｅ）、Ｅｔｈｅｒｎｅｔ（登録商標）、Ｆｉｂｒｅ  ｃｈａｎｎｅｌ、ＮＶＭ  Ｅｘｐｒｅｓｓ（ＮＶＭｅ）（登録商標）等を使用し得る。
【００２０】
ＳＳＤ３は、コントローラ４および不揮発性メモリ（ＮＡＮＤ型フラッシュメモリ）５を備える。ＳＳＤ３は、ランダムアクセスメモリ、例えば、ＤＲＡＭ６も備えていてもよい。あるいは、ＳＲＡＭのようなランダムアクセスメモリがコントローラ４に内蔵されていてもよい。
【００２１】
ＮＡＮＤ型フラッシュメモリ５は、複数のＮＡＮＤ型フラッシュメモリチップ（複数のＮＡＮＤ型フラッシュメモリダイ）を含んでいてもよい。各チップは、メモリセル当たりに複数ビットを格納可能に構成されたマルチレベルセル（ＭＬＣ）フラッシュメモリとして実現されている。
【００２２】
ＭＬＣフラッシュメモリの例には、メモリセル当たりに２ビットのデータを格納可能な４レベル−ＭＬＣフラッシュメモリ、メモリセル当たりに３ビットのデータを格納可能な８レベル−ＭＬＣ（ＴＬＣ：トリプルレベルセル）フラッシュメモリ、メモリセル当たりに４ビットのデータを格納可能な１６レベル−ＭＬＣ（ＱＬＣ：クワッドレベルセル）フラッシュメモリ、等が含まれる。
【００２３】
ＮＡＮＤ型フラッシュメモリ５は、マトリクス状に配置された複数のメモリセルを含むメモリセルアレイを含む。このＮＡＮＤ型フラッシュメモリ５は、２次元構造のＮＡＮＤ型フラッシュメモリであってもよいし、３次元構造のＮＡＮＤ型フラッシュメモリであってもよい。
【００２４】
ＮＡＮＤ型フラッシュメモリ５のメモリセルアレイは、複数のブロックＢ０〜Ｂｍ−１を含む。ブロックＢ０〜Ｂｍ−１の各々は多数のページ（ここではページＰ０〜Ｐｎ−１）を含む。ブロックＢ０〜Ｂｍ−１は、最小の消去単位として機能する。ブロックは、「消去ブロック」、または「物理ブロック」と称されることもある。ページＰ０〜Ｐｎ−１の各々は、同一ワード線に接続された複数のメモリセルを含む。ページＰ０〜Ｐｎ−１は、データ書き込み動作およびデータ読み込み動作の単位である。
【００２５】
ＮＡＮＤ型フラッシュメモリ５は、メモリセル当たりに１ビットが書き込まれるシングルレベルセル（ＳＬＣ）モード、またはメモリセル当たりに複数ビットが書き込まれるマルチレベルセル（ＭＬＣ）モードのいずれかで、書き込み動作を実行することができる。
【００２６】
例えば、ＮＡＮＤ型フラッシュメモリ５は、メモリセル当たりに２ビットを格納可能な４レベル−ＭＬＣフラッシュメモリとして実現されていてもよい。
【００２７】
この場合、通常は、２ページ分のデータ（下位ページデータおよび上位ページデータ）が、同一ワード線に接続された複数のメモリセルに書き込まれる。これにより、メモリセル当たりに２ビットを書き込むことができる。この４レベル−ＭＬＣフラッシュメモリ内の任意の領域（例えば、一つ以上の任意のブロック）は、メモリセル当たりに１ビットのみを格納可能な領域（ＳＬＣ領域）として使用することができる。
【００２８】
このＳＬＣ領域にデータを書き込む書き込み動作においては、１ページ分のデータ（下位ページデータ）のみが同一ワード線に接続された複数のメモリセルに書き込まれてもよい。これにより、ＳＬＣ領域として使用される各ブロックにおいては、ＳＬＣフラッシュメモリ内の各ブロック（ＳＬＣブロック）と同様に、メモリセル当たりに１ビットのみを書き込むことができる。この結果、ＳＬＣ領域として使用される各ブロックは、擬似的なＳＬＣブロックとして機能する。
【００２９】
あるいは、ＮＡＮＤ型フラッシュメモリ５は、メモリセル当たりに３ビットを格納可能な８レベル−ＭＬＣフラッシュメモリ（トリプルレベルセル（ＴＬＣ）フラッシュメモリ）であってもよい。
【００３０】
この場合、通常は、３ページ分のデータ（下位ページデータ、ミドルページデータ、および上位ページデータ）が、同一ワード線に接続された複数のメモリセルに書き込まれる。これにより、メモリセル当たりに３ビットを書き込むことができる。このＴＬＣフラッシュメモリ内の任意の領域（例えば、一つ以上の任意のブロック）は、上述のＳＬＣ領域として使用されてもよいし、メモリセル当たりに２ビットを格納可能な４レベル−ＭＬＣ領域として使用されてもよい。この４レベル−ＭＬＣ領域においては、２ページ分のデータのみが同一ワード線に接続された複数のメモリセルに書き込まれる。これにより、４レベル−ＭＬＣ領域においては、メモリセル当たりに２ビットのみを書き込むことができる。
【００３１】
あるいは、ＮＡＮＤ型フラッシュメモリ５は、メモリセル当たりに４ビットを格納可能な１６レベル−ＭＬＣフラッシュメモリ（クワッドレベルセル（ＱＬＣ）フラッシュメモリ）であってもよい。
【００３２】
この場合、通常、４ページ分のデータが、同一ワード線に接続された複数のメモリセルに書き込まれる。これにより、メモリセル当たりに４ビットを書き込むことができる。このＱＬＣフラッシュメモリ内の任意の領域（例えば、一つ以上の任意のブロック）は、上述のＳＬＣ領域として使用されてもよいし、上述の４レベル−ＭＬＣ領域として使用されてもよいし、あるいは、メモリセル当たりに３ビットを格納可能な８レベル−ＭＬＣ領域として使用されてもよい。８レベル−ＭＬＣ領域においては、３ページ分のデータのみが、同一ワード線に接続された複数のメモリセルに書き込まれる。これにより、８レベル−ＭＬＣ領域においては、メモリセル当たりに３ビットを書き込むことができる。
【００３３】
なお、ＮＡＮＤ型フラッシュメモリ５は、メモリセル当たりに５ビット以上を格納可能に構成されていてもよい。この場合においても、ＮＡＮＤ型フラッシュメモリ５内の任意の領域は、メモリセル当たりに４ビット以下のデータのみが書き込まれる領域として使用され得る。
【００３４】
ブロックＢ０〜Ｂｍ−１の各々は、限られたプログラム／イレーズサイクル数を有している。あるブロックの１回のプログラム／イレーズサイクルは、このブロック内の全てのメモリセルを消去状態にするための消去動作と、このブロックのページそれぞれにデータを書き込む書き込み動作（プログラム動作）とを含む。
【００３５】
コントローラ４は、Ｔｏｇｇｌｅ、Ｏｐｅｎ  ＮＡＮＤ  Ｆｌａｓｈ  Ｉｎｔｅｒｆａｃｅ（ＯＮＦＩ）のようなＮＡＮＤインタフェース１３を介して、不揮発性メモリであるＮＡＮＤ型フラッシュメモリ５に電気的に接続されている。ＮＡＮＤインタフェース１３は、ＮＡＮＤ型フラッシュメモリ５を制御するように構成されたＮＡＮＤ制御回路として機能する。ＮＡＮＤインタフェース１３は、複数のチャンネルを介して、ＮＡＮＤ型フラッシュメモリ５内の複数のチップにそれぞれ接続されていてもよい。
【００３６】
コントローラ４は、ＮＡＮＤ型フラッシュメモリ５を制御するように構成されたメモリコントローラとして機能する。
【００３７】
コントローラ４は、ＮＡＮＤ型フラッシュメモリ５のデータ管理およびブロック管理を実行するように構成されたフラッシュトランスレーション層（ＦＴＬ）として機能してもよい。このＦＴＬによって実行されるデータ管理には、（１）論理アドレスそれぞれとＮＡＮＤ型フラッシュメモリ５の物理アドレスそれぞれとの間の対応関係を示すマッピング情報の管理、（２）ページ単位のリード／ライトとブロック単位の消去動作とを隠蔽するための処理、等が含まれる。論理アドレスは、ＳＳＤ３をアドレス指定するためにホスト２によって使用されるアドレスである。この論理アドレスとしては、通常、論理ブロックアドレス（ＬＢＡ）が使用される。
【００３８】
論理ブロックアドレス（ＬＢＡ）それぞれと物理アドレスそれぞれとの間のマッピングの管理は、アドレス変換テーブル（論理物理アドレス変換テーブル）として機能するルックアップテーブル（ＬＵＴ）３２を用いて実行される。コントローラ４は、ルックアップテーブル（ＬＵＴ）３２を使用して、ＬＢＡそれぞれと物理アドレスそれぞれとの間のマッピングを所定の管理サイズ単位で管理する。あるＬＢＡに対応する物理アドレスは、このＬＢＡのデータがライトされたＮＡＮＤフラッシュメモリ５内の物理記憶位置を示す。アドレス変換テーブル（ＬＵＴ３２）は、ＳＳＤ３の電源オン時にＮＡＮＤフラッシュメモリ５からＤＲＡＭ６にロードされてもよい。
【００３９】
ページへのデータ書き込みは、一つのプログラム／イレーズサイクル当たり１回のみ可能である。このため、コントローラ４は、あるＬＢＡに対応する更新データを、このＬＢＡに対応する以前のデータが格納されている物理記憶位置ではなく、別の物理記憶位置に書き込む。そして、コントローラ４は、ルックアップテーブル（ＬＵＴ）３２を更新してこのＬＢＡをこの別の物理記憶位置に関連付けると共に、以前のデータを無効化する。
【００４０】
ブロック管理には、バッドブロックの管理と、ウェアレベリングと、ガベージコレクション、等が含まれる。
【００４１】
コントローラ４は、ホストインタフェース１１、ＣＰＵ１２、ＮＡＮＤインタフェース１３、ＤＲＡＭインタフェース１４等を含んでもよい。これらＣＰＵ１２、ＮＡＮＤインタフェース１３、ＤＲＡＭインタフェース１４は、バス１０を介して相互接続されていてもよい。
【００４２】
ホストインタフェース１１は、ホスト２から様々なコマンド、例えば、Ｉ／Ｏコマンド（ライトコマンド、リードコマンド）、各種制御コマンド、等を受信する。
【００４３】
ＣＰＵ１２は、ホストインタフェース１１、ＮＡＮＤインタフェース１３、およびＤＲＡＭインタフェース１４を制御するように構成されたプロセッサである。ＣＰＵ１２は、図示しないＲＯＭ等に格納されている制御プログラム（ファームウェア）を実行することによって様々な処理を行う。このＣＰＵ１２は、上述のＦＴＬの処理に加え、ホスト２からの様々なコマンドを処理するためのコマンド処理等を実行することができる。ＣＰＵ１２の動作は、ＣＰＵ１２によって実行される上述のファームウェアによって制御される。なお、ＦＴＬ処理およびコマンド処理の一部または全部は、コントローラ４内の専用ハードウェアによって実行してもよい。
【００４４】
ＣＰＵ１２は、書き込み制御部２１、アイドル状態検出部２２、ＳＬＣカウント部２３、およびガベージコレクション動作制御部２４として機能することができる。
【００４５】
書き込み制御部２１は、ＳＳＤ３の寿命の低下を招くこと無くＳＳＤ３の性能をできるだけ改善できるようにするために、ホスト２から受信されるデータ（書き込みデータ）をＮＡＮＤ型フラッシュメモリ５に書き込むための書き込みモードを適応的に制御する。つまり、書き込み制御部２１は、書き込みモードを、メモリセル当たりにｎビットデータが書き込まれる第１モードと、メモリセル当たりにｍビットデータが書き込まれる第２モードとの間で動的に切り換えるように構成されている。ここで、ｎは１以上の整数であり、ｍはｎよりも大きい整数である。
【００４６】
第１モードは、メモリセル当たりに格納可能なビット数を減らすことによってＳＳＤ３の書き込み性能および読み出し性能を改善するための性能重視の書き込みモードである。一方、第２モードは、メモリセル当たりに格納可能なビット数を増やすことによって第１モードを使用した場合よりも上述のＴＢＷを増やすことが可能な寿命重視の書き込みモードである。
【００４７】
第１モードと第２モードの組み合わせの例は、以下の通りである。
【００４８】
組み合わせ＃１：  メモリセル当たりに１ビットが書き込まれるＳＬＣモードが第１モードとして使用され、メモリセル当たりに複数ビットが書き込まれるＭＬＣモードが第２モードとして使用される。ＭＬＣモードは、メモリセル当たりに２ビットが書き込まれる４レベル−ＭＬＣモードであってもよいし、メモリセル当たりに３ビットが書き込まれる８レベル−ＭＬＣモード（ＴＬＣモード）であってもよいし、メモリセル当たりに４ビットが書き込まれる１６レベル−ＭＬＣモード（ＱＬＣモード）であってもよい。
【００４９】
組み合わせ＃２：  ４レベル−ＭＬＣモードが第１モードとして使用され、８レベル−ＭＬＣモード（ＴＬＣモード）または１６レベル−ＭＬＣモード（ＱＬＣモード）が第２モードとして使用される。
【００５０】
組み合わせ＃３：  ８レベル−ＭＬＣモード（ＴＬＣモード）が第１モードとして使用され、１６レベル−ＭＬＣモード（ＱＬＣモード）が第２モードとして使用される。
【００５１】
以下では、組み合わせ＃１（メモリセル当たりに１ビットが書き込まれるＳＬＣモード、メモリセル当たりに複数ビットが書き込まれるＭＬＣモード）を使用する場合を例示して、書き込みモードを動的に切り換える処理について説明する。
【００５２】
ＳＳＤ３の工場出荷後のＳＳＤ３の初回の電源オン時に、書き込み制御部２１は、書き込みモードとしてＳＬＣモードを選択する。そして、書き込み制御部２１は、ＮＡＮＤ型フラッシュメモリ５に書き込まれたデータ量がＳＬＣモードで書き込み可能なデータの量を示す許容データ量に達するまで、ホスト２から受信されるデータをＳＬＣモードでＮＡＮＤ型フラッシュメモリ５に書き込む。許容データ量は、予め設定されたデータ量である。例えば、ＮＡＮＤ型フラッシュメモリ５の容量の１パーセントあるいは数パーセントが、許容データ量として予め設定されていてもよい。
【００５３】
ＳＳＤ３の工場出荷後の初回の電源オンから許容データ量分のデータがホスト２によってＳＳＤ３に書き込まれるまでの期間においては、ホスト２からのデータは、ＳＬＣモードでＮＡＮＤ型フラッシュメモリ５に高速で書き込まれる（性能重視）。
【００５４】
書き込みモードがＳＬＣモードである間、ホスト２から受信されるデータ（書き込みデータ）は、ＳＬＣ領域（ＳＬＣバッファとも云う）として割り当てられたＮＡＮＤ型フラッシュメモリ５内の記憶領域に書き込まれる。ＳＬＣ領域として割り当て可能な記憶領域の最小単位は、ＳＬＣバッファユニットと称される。一つのＳＬＣバッファユニットを構成するブロックの個数は、１でもよいし、２以上の任意の個数であってもよい。あるいは、一つのＳＬＣバッファユニットを構成するブロックの個数は、並列動作可能なフラッシュメモリチップの個数と同数であってもよい。
【００５５】
なお、ページが、ＳＬＣバッファユニットとして使用されてもよい。あるいは、一つのブロックが幾つかのサブブロックによって構成されている場合には、一つのサブブロックが、ＳＬＣバッファユニットとして使用されてもよい。
【００５６】
以下では、一つ以上のブロックから構成されるＳＬＣバッファユニットが、ＳＬＣ領域として割り当て可能な記憶領域の最小単位として使用される場合を主に想定する。上述の許容データ量は、ＳＬＣバッファユニットの数によって指定される。また、以下では、ＳＬＣモードでデータを書き込むために使用されるブロックを「ＳＬＣバッファブロック」または「ＳＬＣブロック」と称し、ＭＬＣモードでデータを書き込むために使用されるブロックを「ＭＬＣブロック」と称する。
【００５７】
書き込みモードがＳＬＣモードである間、ホスト２から受信されるデータ（書き込みデータ）は、ＳＬＣ領域に、つまりＳＬＣバッファブロックとして割り当てられたＮＡＮＤ型フラッシュメモリ５内の一つ以上のブロックに、書き込まれる。換言すれば、書き込み制御部２１は、ホスト２から受信されるライトコマンドに応じてデータをＮＡＮＤ型フラッシュメモリ５にＳＬＣモードで書き込む。
【００５８】
ＮＡＮＤ型フラッシュメモリ５にＳＬＣモードで書き込まれたデータ量が許容データ量に達した場合、書き込み制御部２１は、書き込みモードをＭＬＣモードに変更する。そして、書き込み制御部２１は、ホスト２から受信されるライトコマンドに応じてデータをＭＬＣモードでＮＡＮＤ型フラッシュメモリ５に書き込む。書き込みモードがＭＬＣモードである間、ホスト２から受信されるデータ（書き込みデータ）は、ＭＬＣ領域に、つまりＭＬＣブロックとして割り当てられたＮＡＮＤ型フラッシュメモリ５内の一つ以上のブロックに、書き込まれる。
【００５９】
これにより、許容データ量を超える分のデータは、基本的には、ＭＬＣモードでＮＡＮＤ型フラッシュメモリ５に書き込まれる（寿命重視）。
【００６０】
例えば、許容データ量が３０Ｍバイトであり、ホスト２から受信される幾つかのライトコマンドによって９０Ｍバイトのデータの書き込みが要求された場合には、最初の３０Ｍバイト分のデータはＳＬＣモードでＮＡＮＤ型フラッシュメモリ５に書き込まれる。後続する６０Ｍバイトのデータは、ＭＬＣモードでＮＡＮＤ型フラッシュメモリ５に書き込まれる。
【００６１】
ここで、一つのブロック当たりにＭＬＣモードで書き込み可能なデータ量が２０Ｍバイトであり、一つのブロック当たりにＳＬＣモードで書き込み可能なデータ量が１０Ｍバイトである場合を想定する。
【００６２】
この場合、最初の３０Ｍバイト分のデータは３つのＳＬＣバッファブロックにＳＬＣモードで高速で書き込まれるが、後続する６０Ｍバイトのデータは、３つのＭＬＣブロックにＭＬＣモードで書き込まれる。
【００６３】
このように、連続的に書き込み動作を実行することが必要な期間中、つまり書き込むべきデータ量が多い期間中においては、書き込み動作はＭＬＣモードで実行される。書き込み動作がＭＬＣモードで実行される期間中の総ブログラム／イレーズサイクル数の増加は、この書き込み動作がＳＬＣモードで実行される場合よりも低く抑えることができる。総ブログラム／イレーズサイクル数は、ＮＡＮＤ型フラッシュメモリ５において実行されたブログラム／イレーズサイクルの総数、つまりＮＡＮＤ型フラッシュメモリ５内の全ブロックそれぞれのブログラム／イレーズサイクル数の合計値である。
【００６４】
この後、書き込み制御部２１は、アイドル状態の検出に応答して、アイドル状態の直後の書き込みモードをＳＬＣモードに戻すために、許容データ量をあるデータ量だけ増やす（追加する）。ここで、アイドル状態とは、ホスト２からコマンドが閾時間以上の期間中受信されない状態を意味する。換言すれば、このアイドル状態はホストインタフェース１１のアイドル状態である。
【００６５】
そして、書き込み制御部２１は、アイドル状態の検出の後にＳＬＣモードでＮＡＮＤ型フラッシュメモリ５に書き込まれたデータ量が、追加されたデータ量に達するまで、アイドル状態の検出の後にホスト２から受信されるライトコマンドに応じてデータをＳＬＣモードでＮＡＮＤ型フラッシュメモリ５に書き込む。
【００６６】
このように、アイドル状態が検出された時、書き込み制御部２１は、現在の期間が、連続的に書き込み動作を実行することが必要とされない期間、つまり書き込むべきデータ量が多くない期間であると判定する。このような期間中においては、たとえＳＬＣモードが使用されたとしても、総ブログラム／イレーズサイクル数が短期間の間に著しく増加するという現象は起こらない。したがって、アイドル状態の直後の書き込みモードをＭＬＣモードからＳＬＣモードに戻すことにより、総ブログラム／イレーズサイクル数の著しい増加を招くこと無く、アイドル状態直後の書き込み性能を一時的に向上させることができる。また、アイドル状態の直後にＳＬＣモードで書き込み可能なデータ量は、追加されたデータ量までに制限される。したがって、たとえ書き込みデータの量が増え始めたとしても、データ書き込みのために使用可能なＳＬＣバッファブロックの数を追加されたデータ量に対応する個数までに制限することができ、これによって総ブログラム／イレーズサイクル数の著しい増加を防止することができる。
【００６７】
ＳＬＣカウント部２３は、現在使用可能なＳＬＣバッファユニット数を示す値（ＳＬＣバッファブロックカウンタ値）をカウントする。許容データ量が一つのＳＬＣバッファユニットに対応するデータ量だけ増やされたならば、ＳＬＣカウント部２３は、ＳＬＣバッファブロックカウンタ値を１だけ増やす。一つのＳＬＣバッファユニットに対応する一つ以上のＳＬＣバッファブロックが書き込み先ブロックとして割り当てられてデータがこのＳＬＣバッファブロックに書き込まれた場合には、ＳＬＣカウント部２３は、ＳＬＣバッファブロックカウンタ値を１だけ減らす。
【００６８】
ガベージコレクション動作制御部２４は、データを書き込むことが可能なフリーブロックの個数を増やすためにガベージコレクション動作を実行する。ガベージコレクション動作では、ガベージコレクション動作制御部２４は、有効データと無効データとが混在する幾つかのブロック内の有効データを別のブロック（例えばフリーブロック）にコピーする動作を含む。ここで、有効データとは、ルックアップテーブル（ＬＵＴ）３２から参照されている（すなわち論理アドレスから最新のデータとして紐付けられている）、後にホスト２からリードされる可能性があるデータを意味する。無効データとは、もはやホスト２からリードされることが無いデータを意味する。例えば、あるＬＢＡに関連付けられているデータは有効データであり、どのＬＢＡにも関連付けられていないデータは無効データである。そして、ガベージコレクション動作制御部２４は、ルックアップテーブル（ＬＵＴ）３２を更新して、コピーされた有効データのＬＢＡそれぞれをコピー先の物理アドレス（正しい物理アドレス）にマッピングする。有効データが別のブロックにコピーされることによって無効データのみになったブロックは、有効データを含まないフリーブロックとして解放される。このブロックはその消去動作が実行された後に再利用することが可能となる。
【００６９】
図２は、アイドル状態が検出されない場合にＳＳＤ３のコントローラ４によって実行される書き込み動作の例を示す。
【００７０】
ここでは、説明の簡単化のために、上述の許容データ量が一つのＳＬＣバッファブロック（一つのＳＬＣバッファブロック）分のデータ量である場合を想定する。
【００７１】
（１）最初に、書き込み制御部２１は、ＳＬＣモードを書き込みモードとして選択する。そして、書き込み制御部２１は、フリーブロック７１をＳＬＣモード用の書き込み先ブロック（ＳＬＣバッファブロック）４１として割り当て、ホスト２から受信されるデータをＳＬＣバッファブロック４１にＳＬＣモードで書き込む。
【００７２】
（２）ＳＬＣバッファブロック４１がデータで満たされると、つまり許容データ量分のデータがＳＬＣモードで書き込まれると、書き込み制御部２１は、書き込みモードをＭＬＣモードに変更する。そして、書き込み制御部２１は、次のフリーブロック７２をＭＬＣモード用の書き込み先ブロック（ＭＬＣブロック）５１として割り当て、ホスト２から受信されるデータをＭＬＣブロック５１にＭＬＣモードで書き込む。
【００７３】
（３）ＭＬＣブロック５１がデータで満たされると、書き込み制御部２１は、次のフリーブロック７３をＭＬＣモード用の書き込み先ブロック（ＭＬＣブロック）５２として割り当て、ホスト２から受信されるデータをＭＬＣブロック５２にＭＬＣモードで書き込む。
【００７４】
（４）ＭＬＣブロック５２がデータで満たされると、書き込み制御部２１は、次のフリーブロック７４をＭＬＣモード用の書き込み先ブロック（ＭＬＣブロック）５３として割り当て、ホスト２から受信されるデータをＭＬＣブロック５３にＭＬＣモードで書き込む。
【００７５】
図３は、コントローラ４によってアイドル状態を挟んで実行される書き込み動作の例を示す。
【００７６】
（１）最初に、書き込み制御部２１は、ＳＬＣモードを書き込みモードとして選択する。そして、書き込み制御部２１は、フリーブロック７１をＳＬＣモード用の書き込み先ブロック（ＳＬＣバッファブロック）４１として割り当て、ホスト２から受信されるデータをＳＬＣバッファブロック４１にＳＬＣモードで書き込む。
【００７７】
（２）ＳＬＣバッファブロック４１がデータで満たされると、つまり許容データ量分のデータがＳＬＣモードで書き込まれると、書き込み制御部２１は、書き込みモードをＭＬＣモードに変更する。そして、書き込み制御部２１は、次のフリーブロック７２をＭＬＣモード用の書き込み先ブロック（ＭＬＣブロック）５１として割り当て、ホスト２から受信されるデータをＭＬＣブロック５１にＭＬＣモードで書き込む。
【００７８】
（３）アイドル状態検出部２２によってアイドル状態が検出された場合、書き込み制御部２１は、許容データ量を一つのＳＬＣバッファユニット分のデータ量（ここでは、一つのＳＬＣバッファブロック分のデータ量）だけ追加し、書き込みモードをＳＬＣモードに戻す。これにより、許容データ量が一つのＳＬＣバッファブロック分のデータ量だけ増やされるので、さらに一つのフリーブロックをＳＬＣバッファブロックとして利用することが可能となる。この場合、一つのフリーブロックが、ＳＬＣバッファブロックとして割り当て可能なブロックとして追加（確保）されてもよい。
【００７９】
（４）そして、書き込み制御部２１は、次のフリーブロック７３をＳＬＣモード用の書き込み先ブロック（ＳＬＣバッファブロック）４２として割り当て、アイドル状態の検出の後にホスト２から受信されるデータをＳＬＣバッファブロック４２にＳＬＣモードで書き込む。フリーブロック７３は、（３）でＳＬＣバッファブロック用に割り当て可能なブロックとして追加（確保）されたブロックに相当する。
【００８０】
（５）ＳＬＣバッファブロック４２がデータで満たされると、つまり、アイドル状態の検出の後にＳＬＣモードで書き込まれたデータ量が一つのＳＬＣバッファブロック分のデータ量に達すると、書き込み制御部２１は、書き込みモードを再びＭＬＣモードに変更する。そして、書き込み制御部２１は、次のフリーブロック７４をＭＬＣモード用の書き込み先ブロック（ＭＬＣブロック）５２として割り当て、ホスト２から受信されるデータをＭＬＣブロック５２にＭＬＣモードで書き込む。
【００８１】
図４は、コントローラ４によってアイドル状態を挟んで実行される書き込み動作のさらに別の例を示す。
【００８２】
（１）最初に、書き込み制御部２１は、ＳＬＣモードを書き込みモードとして選択する。そして、書き込み制御部２１は、フリーブロック７１をＳＬＣモード用の書き込み先ブロック（ＳＬＣバッファブロック）４１として割り当て、ホスト２から受信されるデータをＳＬＣバッファブロック４１にＳＬＣモードで書き込む。
【００８３】
（２）ＳＬＣバッファブロック４１がデータで満たされると、つまり許容データ量分のデータがＳＬＣモードで書き込まれると、書き込み制御部２１は、書き込みモードをＭＬＣモードに変更する。そして、書き込み制御部２１は、次のフリーブロック７２をＭＬＣモード用の書き込み先ブロック（ＭＬＣブロック）５１として割り当て、ホスト２から受信されるデータをＭＬＣブロック５１にＭＬＣモードで書き込む。
【００８４】
（３）アイドル状態検出部２２によってアイドル状態が検出された場合、書き込み制御部２１は、許容データ量を一つのＳＬＣバッファユニット分のデータ量（ここでは、一つのＳＬＣバッファブロック分のデータ量）だけ追加し、書き込みモードをＳＬＣモードに戻す。
【００８５】
（４）そして、書き込み制御部２１は、次のフリーブロック７３をＳＬＣモード用の書き込み先ブロック（ＳＬＣバッファブロック）４２として割り当て、アイドル状態の検出の後にホスト２から受信されるデータをＳＬＣバッファブロック４２にＳＬＣモードで書き込む。
【００８６】
（５）ＳＬＣバッファブロック４２がデータで満たされる前に、アイドル状態検出部２２によってアイドル状態が再び検出された場合、書き込み制御部２１は、許容データ量を一つのＳＬＣバッファユニット分のデータ量（ここでは、一つのＳＬＣバッファブロック分のデータ量）だけ再び追加し、書き込みモードをＳＬＣモードに維持する。これにより、許容データ量が一つのＳＬＣバッファブロック分のデータ量だけ再び増やされるので、さらにもう一つのフリーブロックをＳＬＣバッファブロックとして利用することが可能となる。この場合、一つのフリーブロックが、ＳＬＣバッファブロックとして割り当て可能なブロックとして追加（確保）されてもよい。
【００８７】
なお、許容データ量を一つのバッファブロック全体に対応するデータ量だけ追加せずに、許容データ量を、一つのバッファブロック分のデータ量からＳＬＣバッファブロック４２の空き領域を引いた残りのデータ量（つまり、一つのＳＬＣバッファユニットに不足している分のデータ量）だけ追加してもよい。ＳＬＣバッファブロック４２の空き領域は、まだデータが書き込まれていないＳＬＣバッファブロック４２内の利用可能領域である。
【００８８】
（６）書き込み制御部２１は、２回目のアイドル状態の検出の後にホスト２から受信されるデータを、ＳＬＣバッファブロック４２の空き領域にＳＬＣモードで書き込む。
【００８９】
（７）ＳＬＣバッファブロック４２がデータで満たされると、書き込み制御部２１は、次のフリーブロック７４をＳＬＣモード用の書き込み先ブロック（ＳＬＣバッファブロック）４３として割り当てる。このフリーブロック７４は、（５）でＳＬＣバッファブロック用に割り当て可能なブロックとして追加（確保）されたブロックに相当する。書き込み制御部２１は、ホスト２から受信されるデータをＳＬＣバッファブロック４３にＳＬＣモードで書き込む。なお、２回目のアイドル状態の検出の後にホスト２から受信されるデータは、最初に、ＳＬＣバッファブロック４３にＳＬＣモードで書き込まれてもよく、そして、ＳＬＣバッファブロック４３がデータで満たされた後に、後続のデータがＳＬＣバッファブロック４２の空き領域にＳＬＣモードで書き込まれてもよい。
【００９０】
図５は、コントローラ４によってアイドル状態を挟んで実行される書き込み動作のさらに別の例を示す。
【００９１】
（１）最初に、書き込み制御部２１は、ＳＬＣモードを書き込みモードとして選択する。そして、書き込み制御部２１は、フリーブロック７１をＳＬＣモード用の書き込み先ブロック（ＳＬＣバッファブロック）４１として割り当て、ホスト２から受信されるデータをＳＬＣバッファブロック４１にＳＬＣモードで書き込む。
【００９２】
（２）ＳＬＣバッファブロック４１がデータで満たされると、つまり許容データ量分のデータがＳＬＣモードで書き込まれると、書き込み制御部２１は、書き込みモードをＭＬＣモードに変更する。そして、書き込み制御部２１は、次のフリーブロック７２をＭＬＣモード用の書き込み先ブロック（ＭＬＣブロック）５１として割り当て、ホスト２から受信されるデータをＭＬＣブロック５１にＭＬＣモードで書き込む。
【００９３】
（３）ＭＬＣブロック５１がデータで満たされる前にアイドル状態検出部２２によってアイドル状態が検出された場合、書き込み制御部２１は、まず、許容データ量を一つのＳＬＣバッファユニット分のデータ量（ここでは、一つのＳＬＣバッファブロック分のデータ量）だけ追加し、書き込みモードをＳＬＣモードに戻す。これにより、許容データ量が一つのＳＬＣバッファブロック分のデータ量だけ再び増やされるので、さらに一つのフリーブロックをＳＬＣバッファブロックとして利用することが可能となる。この場合、一つのフリーブロックが、ＳＬＣバッファブロックとして割り当て可能なブロックとして追加（確保）されてもよい
（４）そして、書き込み制御部２１は、次のフリーブロック７３をＳＬＣモード用の書き込み先ブロック（ＳＬＣバッファブロック）４２として割り当て、アイドル状態の検出の後にホスト２から受信されるデータをＳＬＣバッファブロック４２にＳＬＣモードで書き込む。このフリーブロック７３は、（３）でＳＬＣバッファブロック用に割り当て可能なブロックとして追加（確保）されたブロックに相当する。
【００９４】
（５）ＳＬＣバッファブロック４２がデータで満たされると、つまり、アイドル状態の検出の後にＳＬＣモードで書き込まれたデータ量が一つのＳＬＣバッファブロック分のデータ量に達すると、書き込み制御部２１は、書き込みモードを再びＭＬＣモードに変更する。そして、書き込み制御部２１は、ホスト２から受信されるデータをＭＬＣブロック５１の空き領域にＭＬＣモードで書き込む。ＭＬＣブロック５１の空き領域は、まだデータが書き込まれていない利用可能領域である。
【００９５】
なお、最初に、ＭＬＣブロック５１の空き領域にデータを書き込んでもよく、そしてＭＬＣブロック５１の空き領域がデータで満たされた後に、後続のデータをＳＬＣバッファブロック４２に書き込んでもよい。
【００９６】
（６）ＭＬＣブロック５１がデータで満たされると、書き込み制御部２１は、次のフリーブロック７４をＭＬＣモード用の書き込み先ブロック（ＭＬＣブロック）５２として割り当て、ホスト２から受信されるデータをＭＬＣブロック５２にＭＬＣモードで書き込む。
【００９７】
図６のフローチャートは、コントローラ４によって実行される書き込み動作の手順を示す。
【００９８】
本実施形態では、許容データ量分のホスト２からのデータは優先的にＳＬＣモードでＮＡＮＤ型フラッシュメモリ５に書き込まれる。許容データ量は、「ＳＬＣバッファユニットの最小数」と称されるパラメータによって予め指定される。
【００９９】
すなわち、コントローラ４の書き込み制御部２１は、最初に、ＳＬＣモードを選択し、ホスト２から受信されるデータ（書き込みデータ）をＳＬＣモードでＮＡＮＤ型フラッシュメモリ５に書き込む（ステップＳ１０１）。
【０１００】
ＮＡＮＤ型フラッシュメモリ５に書き込まれたデータ量がＳＬＣバッファユニットの最小数に相当するデータ量（許容データ量）に達した場合（ステップＳ１０２のＹＥＳ）、書き込み制御部２１は、アイドル状態検出部２２によってホストインタフェース１１のアイドル状態が検出されたか否かを判定する（ステップＳ１０３）。
【０１０１】
アイドル状態が検出されないならば、つまり書き込み動作が現在連続的に実行されているならば（ステップＳ１０３のＮＯ）、書き込み制御部２１は、書き込みモードをＭＬＣモードに変更し、ホスト２から受信されるデータをＭＬＣモードでＮＡＮＤ型フラッシュメモリ５に書き込む（ステップＳ１０４）。
【０１０２】
書き込み動作が連続的に実行されている間は、書き込みモードはＭＬＣモードに維持される。そして、もしＭＬＣモードで書き込み動作が実行されている間にアイドル状態が検出されたならば（ステップＳ１０３のＹＥＳ）、書き込み制御部２１は、ＳＬＣモードで書き込み可能なデータ量（許容データ量）を例えば一つのＳＬＣバッファユニット分のデータ量だけ増加し、これによって書き込みモードをＳＬＣモードに戻す（ステップＳ１０５）。書き込み可能なデータ量（許容データ量）が増加される単位は、一つのＳＬＣバッファユニットに対応するデータ量に限定されず、例えば、２ＳＬＣバッファユニットに対応するデータ量の単位で許容データ量が増加されてもよいし、３以上のＳＬＣバッファユニットに対応するデータ量の単位で許容データ量が増加されてもよい。このアイドル状態の後、書き込み制御部２１は、ホスト２から受信されるデータをＳＬＣモードでＮＡＮＤ型フラッシュメモリに書き込む（ステップＳ１０６）。
【０１０３】
書き込み制御部２１は、ステップＳ１０５において増加されたデータ量分のデータがＳＬＣモードでＮＡＮＤ型フラッシュメモリに書き込まれたか否かを判定する（ステップＳ１０７）。
【０１０４】
増加されたデータ量分のデータの書き込みが完了する前にアイドル状態が検出されたならば（ステップＳ１０７のＮＯ、ステップＳ１０８のＹＥＳ）、書き込み制御部２１は、ＳＬＣモードで書き込み可能なデータ量（許容データ量）を例えば一つのＳＬＣバッファユニット分のデータ量だけ増加する（ステップＳ１０９）。
【０１０５】
増加された総データ量分のデータの書き込みが完了したならば（ステップＳ１０７のＹＥＳ）、書き込み制御部２１は、ステップＳ１０４の処理に進み、書き込みモードをＭＬＣモードに変更する。
【０１０６】
図７は、コントローラ４によって使用される書き込み動作制御パラメータセットの例を示す。
【０１０７】
書き込み動作制御パラメータセットは、ＳＬＣモードまたはＭＬＣモードを選択的に使用するためにコントローラ４によって使用されるパラメータ群である。書き込み動作制御パラメータセットは、例えば、図示しないＲＯＭに上述のファームウェアと一緒に保存されていてもよい。書き込み動作制御パラメータセットは、以下のパラメータを含んでもよい。
【０１０８】
（１）ＳＬＣバッファユニット
（２）ＳＬＣバッファユニットの最小数
（３）ＳＬＣバッファユニットの最大数
（４）インターバルタイム
（５）プログラム／イレーズサイクルカウント閾値
「ＳＬＣバッファユニット」のパラメータは、一つのＳＬＣバッファユニットのデータ量を示す。一つのＳＬＣバッファユニットは、ＳＬＣモードで書き込み可能なデータ量（許容データ量）を増加（追加）するための単位である。つまり、アイドル状態が検出される度に、許容データ量は、一つのＳＬＣバッファユニット分のデータ量だけ、または一つのＳＬＣバッファユニットに不足している分だけのデータ量だけ増やされる。
【０１０９】
「ＳＬＣバッファユニットの最小数」のパラメータは、上述の許容データ量として最低限割り当てられるＳＬＣバッファユニットの数を示す。このパラメータは、ＳＳＤ３の初期状態（例えば出荷直後）においてＳＬＣ領域として割り当てられるＳＬＣバッファのデータ量、つまり上述の許容データ量の初期値に相当する。
【０１１０】
「ＳＬＣバッファユニットの最大数」のパラメータは、割り当て可能なＳＬＣバッファユニット数の最大値を示す。この値は、ＳＬＣモードで書き込み可能なデータの最大量に相当する。初期状態から増やされた後の許容データ量の最大量は、ＳＬＣモードで書き込み可能なデータの最大量以下に制限され、ＳＬＣバッファユニット数の最大値を超えることはない。つまり、本実施形態では、アイドル状態の検出の度に許容データ量（ＳＬＣバッファの量）は、例えば一つのＳＬＣバッファユニット分だけ増やされるが、増やされた許容データ量（現在のＳＬＣバッファユニットのデータ量：ＳＬＣバッファユニットの最小数と既に追加されたＳＬＣバッファユニット数との合計に対応するデータ量）が「ＳＬＣバッファユニットの最大数」に達した後は、たとえアイドル状態が検出されても、ＳＬＣバッファの量は増やされず、書き込みモードはＭＬＣモードに維持される。換言すれば、書き込み制御部２１は、増やされた許容データ量がＳＬＣバッファユニットの最大数に達していない場合、アイドル状態の検出の度に、許容データ量を第１データ量だけ増やす。これにより、ホスト２によって利用可能な実際のストレージ容量が、ＳＳＤ３によってホスト２に報告されるストレージ容量（ユーザ容量）よりも減少してしまうことを防止することができる。
【０１１１】
「インターバルタイム」のパラメータは、アイドル状態を検出するために使用される閾時間を示す。ホスト２からコマンドが受信されない期間がインターバルタイムによって指定される時間以上継続した時、現在の状態が、アイドル状態であることが検出され、ＳＬＣバッファが例えば一つのＳＬＣバッファユニット分だけ増量される。
【０１１２】
「プログラム／イレーズサイクルカウント閾値」のパラメータは、「ＳＬＣバッファユニットの最大数」と同様に、許容データ量を増やすことを許可するための条件（必要条件）として利用される。ＮＡＮＤ型フラッシュメモリ５のプログラム／イレーズサイクル数が「プログラム／イレーズサイクルカウント閾値」に達するまでは、許容データ量（ＳＬＣバッファ）を増やすことが許可される。ＮＡＮＤ型フラッシュメモリ５のプログラム／イレーズサイクル数が「プログラム／イレーズサイクルカウント閾値」に達した後は、たとえアイドル状態が検出されても、ＳＬＣバッファの量は増やされず、書き込みモードはＭＬＣモードに維持される。これにより、ＳＳＤ３の寿命低下を防止することができる。
【０１１３】
ＮＡＮＤ型フラッシュメモリ５の現在のプログラム／イレーズサイクル数が「プログラム／イレーズサイクルカウント閾値」に達すると、たとえ増やされた許容データ量（現在のＳＬＣバッファのデータ量）が「ＳＬＣバッファユニットの最大数」未満であっても、許容データ量（ＳＬＣバッファ）の増加は禁止される。
【０１１４】
ＮＡＮＤ型フラッシュメモリ５のプログラム／イレーズサイクル数の増加の割合は、ホスト２からの書き込みデータのパターンに依存する。したがって、増やされた許容データ量（現在のＳＬＣバッファのデータ量）が「ＳＬＣバッファユニットの最大数」未満である期間内であっても、ホスト２からの書き込みデータのパターンによっては、ＮＡＮＤ型フラッシュメモリ５のプログラム／イレーズサイクル数が過度に増加する場合がある。本実施形態では、「プログラム／イレーズサイクルカウント閾値」を許容データ量を増やすことを許可するための条件として使用することによって、ＳＳＤ３の寿命の低下をより確実に抑制することができ、ストレージ寿命を達成することができる。
【０１１５】
許容データ量を増やすことを許可するための条件としては、「ＳＬＣバッファユニットの最大数」、「プログラム／イレーズサイクルカウント閾値」のいずれか一方が使用されてもよいし、「ＳＬＣバッファユニットの最大数」と「プログラム／イレーズサイクルカウント閾値」の双方が使用されてもよい。
【０１１６】
換言すれば、許容データ量を増やすことを許可するための条件としては、増やされた許容データ量（現在のＳＬＣバッファのデータ量）が「ＳＬＣバッファユニットの最大数」未満であるという第１条件のみが使用されてもよい。あるいは、許容データ量を増やすことを許可するための条件としては、ＮＡＮＤ型フラッシュメモリ５の現在のプログラム／イレーズサイクル数が「プログラム／イレーズサイクルカウント閾値」以下であるという第２条件のみが使用されてもよい。あるいは、許容データ量を増やすことを許可するための条件としては、増やされた許容データ量（現在のＳＬＣバッファのデータ量）が「ＳＬＣバッファユニットの最大数」未満であり、且つＮＡＮＤ型フラッシュメモリ５の現在のプログラム／イレーズサイクル数が「プログラム／イレーズサイクルカウント閾値」以下であるという第３条件が使用されてもよい。
【０１１７】
なお、「プログラム／イレーズサイクルカウント閾値」は、ＮＡＮＤ型フラッシュメモリ５の全てのブロックの現在の総プログラム／イレーズサイクル数と比較するための閾値Ｙ１であってもよいし、ＮＡＮＤ型フラッシュメモリ５の現在の最大プログラム／イレーズサイクル数と比較するための閾値Ｙ２であってもよいし、ＮＡＮＤ型フラッシュメモリ５の現在の平均プログラム／イレーズサイクル数と比較するための閾値Ｙ３であってもよいし、ＮＡＮＤ型フラッシュメモリ５の現在の最小プログラム／イレーズサイクル数と比較するための閾値Ｙ４であってもよい。
【０１１８】
「プログラム／イレーズサイクルカウント閾値」がＮＡＮＤ型フラッシュメモリ５の現在の総プログラム／イレーズサイクル数と比較するための閾値Ｙ１であるならば、ＮＡＮＤ型フラッシュメモリ５の現在の総プログラム／イレーズサイクル数が閾値Ｙ１以下である場合にのみ、ＳＬＣバッファを増量する処理が許可される。
【０１１９】
ＮＡＮＤ型フラッシュメモリ５の現在の総プログラム／イレーズサイクル数は、ＮＡＮＤ型フラッシュメモリ５において実行されたプログラム／イレーズサイクルの総数、つまり、ＮＡＮＤ型フラッシュメモリ５内の全てのブロックのプログラム／イレーズサイクル数の合計値を示す。なお、現在の総プログラム／イレーズサイクル数は、一部のブロックのプログラム／イレーズサイクル数のみをサンプリングすることによって求めることもできる。
【０１２０】
「プログラム／イレーズサイクルカウント閾値」がＮＡＮＤ型フラッシュメモリ５の現在の最大プログラム／イレーズサイクル数と比較するための閾値Ｙ２であるならば、ＮＡＮＤ型フラッシュメモリ５の現在の最大プログラム／イレーズサイクル数が閾値Ｙ２以下である場合にのみ、ＳＬＣバッファを増量する処理が許可される。ＮＡＮＤ型フラッシュメモリ５の現在の最大プログラム／イレーズサイクル数は、ＮＡＮＤ型フラッシュメモリ５内の全てのブロックそれぞれのプログラム／イレーズサイクル数の内の最大値を示す。なお、現在の最大プログラム／イレーズサイクル数も、一部のブロックのプログラム／イレーズサイクル数のみをサンプリングすることによって求めることもできる。
【０１２１】
「プログラム／イレーズサイクルカウント閾値」がＮＡＮＤ型フラッシュメモリ５の現在の平均プログラム／イレーズサイクル数と比較するための閾値Ｙ３であるならば、ＮＡＮＤ型フラッシュメモリ５の現在の平均プログラム／イレーズサイクル数が閾値Ｙ３以下である場合にのみ、ＳＬＣバッファを増量する処理が許可される。ＮＡＮＤ型フラッシュメモリ５の現在の平均プログラム／イレーズサイクル数は、ＮＡＮＤ型フラッシュメモリ５内の全てのブロックそれぞれのプログラム／イレーズサイクル数の平均を示す。なお、現在の平均プログラム／イレーズサイクル数も、一部のブロックのプログラム／イレーズサイクル数のみをサンプリングすることによって求めることもできる。
【０１２２】
「プログラム／イレーズサイクルカウント閾値」がＮＡＮＤ型フラッシュメモリ５の現在の最小プログラム／イレーズサイクル数と比較するための閾値Ｙ４であるならば、ＮＡＮＤ型フラッシュメモリ５の現在の最小プログラム／イレーズサイクル数が閾値Ｙ４以下である場合にのみ、ＳＬＣバッファを増量する処理が許可される。ＮＡＮＤ型フラッシュメモリ５の現在の最小プログラム／イレーズサイクル数は、ＮＡＮＤ型フラッシュメモリ５内の全てのブロックそれぞれのプログラム／イレーズサイクル数の内の最小値を示す。なお、現在の最小プログラム／イレーズサイクル数も、一部のブロックのプログラム／イレーズサイクル数のみをサンプリングすることによって求めることもできる。
【０１２３】
以下では、「プログラム／イレーズサイクル数」を「Ｐ／Ｅサイクル数」と称する。
【０１２４】
図８のフローチャートは、コントローラ４によって実行されるＳＬＣバッファブロック追加／解放／割り当て処理の手順を示す。
【０１２５】
コントローラ４は、ＳＬＣバッファブロック追加条件が満たされるか否かを判定する（ステップＳ２０１）。ＳＬＣバッファブロック追加条件は、ＳＬＣバッファブロックを追加することを許可するための必要条件を示す。ＳＬＣバッファブロック追加条件の例は、少なくともアイドル状態の検出を含む。さらに、ＳＬＣバッファブロック追加条件の例は、（１）ストレージ寿命を達成可能であること（ＮＡＮＤ型フラッシュメモリ５の現在のプログラム／イレーズサイクル数がプログラム／イレーズサイクルカウント閾値以下であること）、または（２）増やされた許容データ量（現在のＳＬＣバッファのデータ量）が予め設定された最大量を超えないこと、の内の少なくとも一つをＳＬＣバッファブロックを追加することを許可するための追加の必要条件として含んでもよい。
【０１２６】
なお、通常は、ＳＬＣバッファブロックの追加はアイドル状態の検出の度に実行されるが、現在利用可能なＳＬＣバッファが無いか、あるいはＳＬＣモードで書き込み可能な現在のデータ量が一つのＳＬＣバッファユニットに満たない場合にのみ、ＳＬＣバッファブロックの追加を実行するというモードを使用することも可能である。
【０１２７】
ＳＬＣバッファブロック追加条件が満たされるならば（ステップＳ２０１のＹＥＳ）、コントローラ４は、一つのＳＬＣバッファユニット分の一つ以上のＳＬＣバッファブロックをＳＬＣバッファとして追加する（ステップＳ２０２）。この場合、ＳＬＣカウント部２３は、ＳＬＣバッファブロックカウンタ値を「１」だけ増加させる。
【０１２８】
次に、コントローラ４は、ＳＬＣバッファブロック解放条件が満たされるか否かを判定する（ステップＳ２０３）。ＳＬＣバッファブロック解放条件は、有効データを含むＳＬＣバッファブロックを有効データを含まないフリーブロックにすることを許可するための必要条件を示す。
【０１２９】
ＳＬＣバッファブロック解放条件を満たすＳＬＣバッファブロックが存在するならば（ステップＳ２０３のＹＥＳ）、コントローラ４は、このＳＬＣバッファブロックを解放する（ステップＳ２０４）。ステップＳ２０４では、例えば、コントローラ４は、このＳＬＣバッファブロック内の有効データを他のブロックにコピーすることによってこのＳＬＣバッファブロックをフリーブロックにする。フリーブロックとして解放されたこのブロックは、ＳＬＣモードでデータ書き込み可能なＳＬＣバッファブロックとして維持されてもよいし、フリーブロック群を管理するためのフリーブロックプールに移動されてもよい。前者の場合には、ＳＬＣカウント部２３は、ＳＬＣバッファブロックカウンタ値を「１」だけ増加させる。
【０１３０】
次に、コントローラ４は、新規ＳＬＣバッファブロックへのデータ書き込み動作が必要か否かを判定する（ステップＳ２０５）。現在の書き込み先ブロックがデータで満たされ、且つＳＬＣバッファブロックカウンタ値が１以上であるならば、新規ＳＬＣバッファブロックへのデータ書き込み動作が必要であると判定される。新たなフリーブロックをＳＬＣモード用の新たな書き込み先ブロックとして割り当てることが必要だからである。
【０１３１】
新規ＳＬＣバッファブロックへのデータ書き込み動作が必要ならば（ステップＳ２０５のＹＥＳ）、コントローラ４は、新規ＳＬＣバッファブロックをＳＬＣモード用の新たな書き込み先ブロックとして割り当て、ホスト２からのデータをこの書き込み先ブロックにＳＬＣモードで書き込む（ステップＳ２０６）。ＳＬＣカウント部２３は、ＳＬＣバッファブロックカウンタ値を「１」だけ減少させる。なお、ＳＬＣモードで書き込み可能なデータ量を追加する単位（最小ＳＬＣバッファ単位）は、一つのＳＬＣバッファユニットよりも小さい単位であってもよい。この場合、ＳＬＣバッファブロックカウンタ値は、例えば、追加された最小ＳＬＣバッファ単位の数だけインクリメントされてもよく、データ書き込みに使用された最小ＳＬＣバッファ単位の数だけデクリメントされてもよい。
【０１３２】
図９は、コントローラ４によって管理されるフリーブロックプール６０とＳＬＣブロックプール６１とＭＬＣアクティブブロックプール６２との関係を示す。
【０１３３】
ブロックは、有効データを格納しているブロック（アクティブブロック）と、有効データを格納しておらず新たなデータの書き込みに利用可能なブロック（フリーブロック）とに大別される。
【０１３４】
また、アクティブブロックは、以下に示す（１）、（２）に分けられる。
【０１３５】
（１）データがＳＬＣモードで書き込まれたブロック（ＳＬＣアクティブブロック）
（２）データがＭＬＣモードで書き込まれたブロック（ＭＬＣアクティブブロック）
さらに、フリーブロックは、以下に示す（３）、（４）に分けられる。
【０１３６】
（３）ＳＬＣモードで書き込まれることが予定されているフリーブロック（ＳＬＣフリーブロック）
（４）ＳＬＣモード、ＭＬＣモードのいずれのモードで書き込みが行われるかについて確定していないフリーブロック（コンプリートフリーブロック）
ＳＬＣアクティブブロック及びＳＬＣフリーブロックは、ＳＬＣブロックプール６１と称されるリストによって管理される。
【０１３７】
ＳＬＣブロックプール６１は、ＳＬＣアクティブブロックプール６１ＡとＳＬＣフリーブロックプール６１Ｂとを有している。
【０１３８】
各ＳＬＣアクティブブロックは、ＳＬＣアクティブブロックプール６１Ａで管理される。各ＳＬＣフリーブロックは、ＳＬＣフリーブロックプール６１Ｂで管理される。
【０１３９】
ＭＬＣアクティブブロックは、ＭＬＣアクティブブロックプール６２と称されるリストによって管理される。コンプリートフリーブロックは、フリーブロックプール６０と称されるリストによって管理される。
【０１４０】
なお、ＳＬＣカウント部２３は、ＳＬＣフリーブロックプール６１Ｂ内に存在するブロックの数をカウントする。
【０１４１】
前述した「ＳＬＣバッファブロックの追加」とは、フリーブロックプール６０のブロックをＳＬＣフリーブロックプール６１Ｂに移動させることに相当する。
【０１４２】
また、前述した「ＳＬＣバッファブロックの解放」とは、ＳＬＣアクティブブロックプール６１Ａ内のＳＬＣアクティブブロックに格納された有効データを他のブロックにコピー（移動）することで、このＳＬＣアクティブブロックを、無効データのみを含むフリーブロックにすることに相当する。ＳＬＣバッファブロックを解放する処理では、あるＳＬＣバッファブロック内の有効データをＭＬＣブロックに移動する処理が実行されてもよいし、幾つかのＳＬＣバッファブロック内の有効データを一つのブロックに集めるガベージコレクション処理が実行されてもよい。
【０１４３】
解放されたブロックは、ＳＬＣアクティブブロックプール６１ＡからＳＬＣフリーブロックプール６１Ｂに移動されてもよいし、ＳＬＣアクティブブロックプール６１Ａからフリーブロックプール６０に移動されてもよい。解放されたブロックがＳＬＣアクティブブロックプール６１ＡからＳＬＣフリーブロックプール６１Ｂに移動された場合には、ＳＬＣカウント部２３によってＳＬＣバッファブロックカウンタ値が「１」だけ増加される。
【０１４４】
図１０は、コントローラ４によって実行されるブロック管理動作の例を示す。
【０１４５】
ここでは、書き込み動作を中心に説明する。
【０１４６】
書き込み制御部２１は、ＳＬＣカウント部２３によってカウントされているＳＬＣバッファブロックカウンタ値を基に、ＳＬＣモードまたはＭＬＣモードを書き込みモードとして選択する。ＳＬＣバッファブロックカウンタ値が１以上の場合、書き込み制御部２１は、ＳＬＣモードを書き込みモードとして選択し、ＳＬＣフリーブロックプール６１Ｂのブロックを書き込み先ブロックとして割り当て、その割り当てられたブロックにホスト２からのデータをＳＬＣモードで書き込む。この割り当てられたブロックがホスト２からのデータで満たされると、このブロックは、ＳＬＣアクティブブロックプール６１Ａに移動する。
【０１４７】
一方、ＳＬＣバッファブロックカウンタ値が０の場合、書き込み制御部２１は、ＭＬＣモードを書き込みモードとして選択し、フリーブロックプール６０のブロックを書き込み先ブロックとして割り当て、その割り当てられたブロックにホスト２からのデータをＭＬＣモードで書き込む。この割り当てられたブロックがホスト２からのデータで満たされると、このブロックは、ＭＬＣアクティブブロックプール６２に移動する。
【０１４８】
ガベージコレクション動作制御部２４は、データを書き込むことが可能なブロック（コンプリートフリーブロック、ＳＬＣフリーブロック）の個数を増やすためにガベージコレクションを実行する。
【０１４９】
ガベージコレクションでは、ガベージコレクション動作制御部２４は、有効データと無効データとが混在する、幾つかのＳＬＣアクティブブロックまたはＭＬＣアクティブブロックをコピー元ブロックとして選択し、これらコピー元ブロック内の有効データのみをコピー先ブロック（フリーブロック）にコピーする。コピー先ブロックは、フリーブロックプール６０内のフリーブロックであってもよいし、ＳＬＣフリーブロックプール６１Ｂ内のＳＬＣフリーブロックであってもよい。例えば、有効データがフリーブロックプール６０内のフリーブロックにＭＬＣモードで書き込まれた場合には、有効データがＭＬＣモードで書き込まれたこのブロックは、ＭＬＣアクティブブロックプール６２によって管理される。一方、有効データがＳＬＣフリーブロックプール６１Ｂ内のＳＬＣフリーブロックにＳＬＣモードで書き込まれた場合には、有効データがＳＬＣモードで書き込まれたこのブロックは、ＳＬＣアクティブブロックプール６１Ａによって管理される。
【０１５０】
なお、コントローラ４は、ＳＳＤ３の電源オフによってＳＬＣバッファブロックカウンタ値が消失されるのを防止するために、ＳＳＤ３の電源オフの直前に、現在のＳＬＣバッファブロックカウンタ値をＮＡＮＤ型フラッシュメモリ５に保存する不揮発化処理を実行してもよいし、この不揮発化処理を実行しなくてもよい。不揮発化処理を実行したケースにおいては、次回ＳＳＤ３が電源オンされた時に、保存されたＳＬＣバッファブロックカウンタ値がＮＡＮＤ型フラッシュメモリ５からリードされ、このリードされたＳＬＣバッファブロックカウンタ値に基づいて、使用すべき書き込みモードが決定される。
【０１５１】
不揮発化処理が実行されないケースにおいては、ＳＳＤ３の電源オフによって現在のＳＬＣバッファブロックカウンタ値はゼロにリセットされる。この場合、ＳＬＣフリーブロックプール６１Ｂによって管理されている各ブロックはコンプリートフリーブロックとなる。次回ＳＳＤ３が電源オンされた時、ＳＬＣバッファブロックカウンタ値はゼロであるので、書き込みモードとしてＭＬＣモードが選択される。そして、アイドル状態が検出された時にＳＬＣバッファブロックが追加され、ＳＬＣバッファブロックカウンタ値が１だけ増加される。
【０１５２】
図１１のフローチャートは、コントローラ４によって実行されるＳＬＣバッファブロック追加処理の手順を示す。
【０１５３】
ここでは、ＳＬＣバッファブロックを追加することを許可するための必要条件がアイドル状態の検出のみである場合を想定する。
【０１５４】
アイドル状態検出部２２は、ホストインタフェース１１を介してホスト２から受信されるコマンドを監視し、ホスト２からコマンドが上述のインターバルタイム以上の期間中受信されない状態を、アイドル状態（アイドルタイム）として検出する。
【０１５５】
アイドル状態であるか否かを判定するために監視されるコマンドの種類は、ライトコマンドのみであってもよい。この場合、アイドル状態検出部２２は、ホスト２からライトコマンドがインターバルタイム以上の期間中受信されない第１状態をアイドル状態として検出する。
【０１５６】
アイドル状態であるか否かを判定するために監視されるコマンドの種類は、Ｉ／Ｏコマンド（ライトコマンドおよびリードコマンド）であってもよい。この場合、アイドル状態検出部２２は、ホスト２からＩ／Ｏコマンドがインターバルタイム以上の期間中受信されない第２状態をアイドル状態として検出する。この第２状態は、ライトコマンド、リードコマンドのどちらも、インターバルタイム以上の期間中受信されない状態である。ホスト２によってＩ／Ｏコマンド（ライトコマンド、またはリードコマンド）がＳＳＤ３に送出された時、ライトコマンド、リードコマンドのどちらも、コントローラ４内のＩ／Ｏコマンドキューに格納される。したがって、アイドル状態検出部２２は、Ｉ／Ｏコマンドキューを監視するだけで、ホスト２からＩ／Ｏコマンドが受信されたか否かを容易に判定することができる。
【０１５７】
アイドル状態であるか否かを判定するために監視されるコマンドの種類は、Ｉ／Ｏコマンド（ライトコマンドおよびリードコマンド）および制御コマンドの双方であってもよい。制御コマンドは、ＳＳＤ３の管理のためのＡＤＭＩＮコマンドであってもよい。この場合、アイドル状態検出部２２は、ホスト２からＩ／Ｏコマンドおよび制御コマンドがインターバルタイム以上の期間中受信されない第３状態をアイドル状態として検出する。この第３状態は、Ｉ／Ｏコマンド、制御コマンドのどちらも、インターバルタイム以上の期間中受信されない状態である。ホスト２によって制御コマンド（ＡＤＭＩＮコマンド）がＳＳＤ３に送出された時、この制御コマンド（ＡＤＭＩＮコマンド）は、コントローラ４内の制御（ＡＤＭＩＮ）コマンドキューに格納される。したがって、アイドル状態検出部２２は、制御（ＡＤＭＩＮ）コマンドキューを監視するだけで、ホスト２から制御コマンド（ＡＤＭＩＮコマンド）コマンドが受信されたか否かを容易に判定することができる。
【０１５８】
なお、ホスト２は、コマンドをＳＳＤ３に一定期間以上送出する予定が無い場合に、ＳＳＤ３をローパワーステート（低消費電力状態）に遷移させるためのパワー管理コマンドを送信する場合がある。このパワー管理コマンドの受信に応答して、コントローラ４は、コントローラ４の状態をローパワーステート（低消費電力状態）に遷移させる制御を実行する。したがって、アイドル状態検出部２２は、パワー管理コマンドをホスト２から受信したことをアイドル状態として検出してもよい。換言すれば、パワー管理コマンドが受信されると、その時点で、直ちに、現在の状態がアイドル状態であると検出されてもよい。
【０１５９】
アイドル状態検出部２２によってアイドル状態が検出されると（ステップＳ３０１のＹＥＳ）、書き込み制御部２１は、ＳＬＣバッファブロックを追加する（ステップＳ３０２）。これにより、ＳＬＣモードで書き込むことができる許容データ量が増加し、書き込みモードとしてＳＬＣモードを使用することが可能となる。
【０１６０】
図１２のフローチャートは、コントローラ４によって実行されるＳＬＣバッファブロック追加処理の別の手順を示す。
【０１６１】
ここでは、ＳＬＣバッファブロックを追加することを許可するための必要条件が、アイドル状態が検出され且つフリーブロックの数が閾値Ｘ１以上である場合を想定する。
【０１６２】
アイドル状態検出部２２によってアイドル状態が検出されると（ステップＳ４０１のＹＥＳ）、コントローラ４は、残りのフリーブロックの数が閾値Ｘ１以上であるか否かを判定する（ステップＳ４０２）。残りのフリーブロックの数は、フリーブロックプール６０によって管理されているフリーブロックの現在の数を示す。
【０１６３】
残りのフリーブロックの数が閾値Ｘ１以上であるならば（ステップＳ４０２のＹＥＳ）、書き込み制御部２１は、ＳＬＣバッファブロックを追加する（ステップＳ４０３）。これにより、ＳＬＣモードで書き込むことができる許容データ量が増加し、書き込みモードとしてＳＬＣモードを使用することが可能となる。
【０１６４】
一方、フリーブロックの数が閾値Ｘ１よりも少ないならば（ステップＳ４０２のＮＯ）、書き込み制御部２１は、ＳＬＣバッファブロックを追加しない。
【０１６５】
なお、ステップＳ４０３では、書き込み制御部２１は、ＳＬＣバッファブロックが追加された後の残りのフリーブロックの数が閾値Ｘ１以上となるようにＳＬＣバッファブロックを追加してもよい。
【０１６６】
もし残りのフリーブロックの数が少ない場合にＳＬＣモードで書き込み動作が実行されたならば、残りのフリーブロックの数は、ガベージコレクションが開始される閾値まで早期に低下する。ホスト２からのデータの書き込みと並行してガベージコレクションが実行されると、書込み性能が低下してしまう。しかし、残りのフリーブロックの数が多い場合には、ＳＬＣモードで書き込み動作を実行しても、残りのフリーブロックの数は、ガベージコレクションが開始される閾値まですぐには低下しない。ゆえに、残りのフリーブロックの数が多い場合にのみ、ＳＬＣバッファブロックの追加を許可することが有効である。
【０１６７】
なお、ガベージコレクションの実行直後の期間中においては、書き込み制御部２１は、ステップＳ４０２において、閾値Ｘ１よりも大きい閾値Ｘ１’を選択し、残りのフリーブロックの数が閾値Ｘ１’以上であるか否かを判定してもよい。残りのフリーブロックの数が閾値Ｘ１’以上である場合にのみ、ＳＬＣバッファブロックの追加が許可される。この制御により、ガベージコレクションによってせっかく増やされたフリーブロックが、ＳＬＣモードを使用した書き込み動作によって速い速度で消費されてしまうことを防止することができる。
【０１６８】
図１３のフローチャートは、コントローラ４によって実行されるＳＬＣバッファブロック追加処理のさらに別の手順を示す。
【０１６９】
ここでは、ＳＬＣバッファブロックを追加することを許可するための必要条件が、アイドル状態が検出され、且つ増やされた許容データ量（現在のＳＬＣバッファのデータ量）がＳＬＣバッファユニットの最大数未満である場合を想定する。
【０１７０】
増やされた許容データ量（現在のＳＬＣバッファのデータ量）を表す値として、ＳＬＣブロックプール６１に存在するＳＬＣバッファブロックの総数、つまりＳＬＣアクティブブロックプール６１Ａ内に存在するＳＬＣバッファブロックの数とＳＬＣフリーブロックプール６１Ｂ内に存在するＳＬＣバッファブロックの数との合計を使用してもよい。
【０１７１】
アイドル状態検出部２２によってアイドル状態が検出されると（ステップＳ５０１のＹＥＳ）、コントローラ４は、ＳＬＣブロックプール６１内に存在するＳＬＣバッファブロックの総数がＳＬＣバッファユニットの最大数未満か否か、つまり増やされた許容データ量（現在のＳＬＣバッファのデータ量）がＳＬＣバッファユニットの最大数未満か否かを判定する（ステップＳ５０２）。このＳＬＣバッファブロックの総数がＳＬＣバッファユニットの最大数未満であるならば（ステップＳ５０２のＹＥＳ）、書き込み制御部２１は、ＳＬＣバッファブロックを追加する（ステップＳ５０３）。
【０１７２】
ＳＬＣバッファブロックの総数が増えすぎてしまうと、ＳＬＣバッファブロックの総数が少ない場合と比べて、ＳＬＣモードによる書き込みが多くなり、ＮＡＮＤ型フラッシュメモリ５のＰ／Ｅサイクル数が増加する割合が高まる。これにより、ＳＳＤ３が早期に寿命に達してしまう場合がある。ゆえに、ＳＬＣバッファユニットの最大数（ＳＬＣモードで書き込み可能なデータの最大量に相当）という上限値を設け、ＳＬＣモードで書き込むことが可能な許容データ量の増加を制限することが有効である。
【０１７３】
図１４のフローチャートは、コントローラ４によって実行されるＳＬＣバッファブロック追加処理のさらに別の手順を示す。
【０１７４】
ここでは、ＳＬＣバッファブロックを追加することを許可するための必要条件が、アイドル状態が検出され、且つＮＡＮＤ型フラッシュメモリ５のＰ／Ｅサイクル数が閾値以下であることとする場合を想定する。以下では、ＮＡＮＤ型フラッシュメモリ５のＰ／Ｅサイクル数としてＮＡＮＤ型フラッシュメモリ５の総Ｐ／Ｅサイクル数を使用する場合について説明するが、総Ｐ／Ｅサイクル数の代わりに、ＮＡＮＤ型フラッシュメモリ５の最大Ｐ／Ｅサイクル数、ＮＡＮＤ型フラッシュメモリ５の最小Ｐ／Ｅサイクル数、またはＮＡＮＤ型フラッシュメモリ５の平均Ｐ／Ｅサイクル数、等を使用してもよい。すなわち、ＳＬＣバッファブロックを追加することを許可するための必要条件としては、ＮＡＮＤ型フラッシュメモリ５のＰ／Ｅサイクル数に限らず、ＮＡＮＤ型フラッシュメモリ５の寿命を判断し得る他の任意の指標を使用してもよい。
【０１７５】
アイドル状態検出部２２によってアイドル状態が検出されると（ステップＳ６０１のＹＥＳ）、コントローラ４は、ＮＡＮＤ型フラッシュメモリ５の現在の総Ｐ／Ｅサイクル数が閾値Ｙ１以下であるか否かを判定する（ステップＳ６０２）。
【０１７６】
現在の総Ｐ／Ｅサイクル数が閾値Ｙ１以下であるならば（ステップＳ６０２のＹＥＳ）、書き込み制御部２１は、フリーブロックプール６０からＰ／Ｅサイクル数が閾値Ｚ１（例えば、Ｚ１＜Ｙ１）以下のフリーブロックを選択し、その選択されたブロックをＳＬＣバッファブロックとして追加する（ステップＳ６０３）。
【０１７７】
ＳＬＣモードで書き込むことができる許容データ量を増加させると、総Ｐ／Ｅサイクル数が増加する割合が高まる。このため、総Ｐ／Ｅサイクル数が多い場合に当該許容データ量を増加させると、ＳＳＤ３が早期に寿命に達してしまう。ゆえに、総Ｐ／Ｅサイクル数が多い場合には、ＳＬＣモードで書き込むことが可能な許容データ量を増加することを禁止することが有効である。
【０１７８】
また、ステップＳ６０３において、Ｐ／Ｅサイクル数が少ないフリーブロックをＳＬＣモードで書き込まれるべきブロックにしている。つまり、ブロック同士でのＰ／Ｅサイクル数の偏りを小さくしているため、ＳＳＤ３の寿命を延ばすことができる。
【０１７９】
なお、ステップＳ６０２では、ＮＡＮＤ型フラッシュメモリ５の現在の総Ｐ／Ｅサイクル数に基づいてＳＬＣバッファブロックを追加するか否かを決定しているが、以下に示す方法を用いてもよい。
【０１８０】
（Ａ）ＮＡＮＤ型フラッシュメモリ５の現在の最大Ｐ／Ｅサイクル数が閾値Ｙ２以下である場合に、ＳＬＣバッファブロックを追加する処理を許可する。
【０１８１】
（Ｂ）ＮＡＮＤ型フラッシュメモリ５の現在の平均Ｐ／Ｅサイクル数が閾値Ｙ３以下である場合に、ＳＬＣバッファブロックを増量する処理を許可する。
【０１８２】
（Ｃ）ＮＡＮＤ型フラッシュメモリ５の現在の最小Ｐ／Ｅサイクル数が閾値Ｙ４以下である場合に、ＳＬＣバッファブロックを追加する処理を許可する。
【０１８３】
図１５のフローチャートは、コントローラ４によって実行されるＳＬＣバッファブロック追加処理のさらに別の手順を示す。
【０１８４】
ここでは、ＳＬＣバッファブロックを追加することを許可するための必要条件が、アイドル状態が検出され、且つフリーブロックの数が閾値Ｘ１以上であり、且つ増やされた許容データ量（現在のＳＬＣバッファのデータ量）がＳＬＣバッファユニットの最大数未満である場合を想定する。
【０１８５】
アイドル状態検出部２２によってアイドル状態が検出されると（ステップＳ７０１のＹＥＳ）、コントローラ４は、残りのフリーブロックの数が閾値Ｘ１以上であるか否かを判定する（ステップＳ７０２）。残りのフリーブロックの数は、フリーブロックプール６０によって管理されているフリーブロックの現在の数を示す。
【０１８６】
残りのフリーブロックの数が閾値Ｘ１以上であるならば（ステップＳ７０２のＹＥＳ）、コントローラ４は、ＳＬＣブロックプール６１内に存在するＳＬＣバッファブロックの総数がＳＬＣバッファユニットの最大数未満か否か、つまり増やされた許容データ量（現在のＳＬＣバッファのデータ量）がＳＬＣバッファユニットの最大数未満か否かを判定する（ステップＳ７０３）。このＳＬＣバッファブロックの総数がＳＬＣバッファユニットの最大数未満であるならば（ステップＳ７０３のＹＥＳ）、書き込み制御部２１は、ＳＬＣバッファブロックを追加する（ステップＳ７０４）。
【０１８７】
このように、アイドル状態が検出され、且つフリーブロックの数が閾値Ｘ１以上であり、且つ増やされた許容データ量（現在のＳＬＣバッファのデータ量）がＳＬＣバッファユニットの最大数未満であることをＳＬＣバッファブロック追加条件に設定し、ＳＬＣバッファブロックの追加を制限してもよい。
【０１８８】
図１６のフローチャートは、コントローラ４によって実行されるＳＬＣバッファブロック追加処理のさらに別の手順を示す。
【０１８９】
ここでは、ＳＬＣバッファブロックを追加することを許可するための必要条件が、アイドル状態が検出され、且つフリーブロックの数が閾値Ｘ１以上であり、且つＮＡＮＤ型フラッシュメモリ５のＰ／Ｅサイクル数が閾値以下であることとする場合を想定する。以下では、ＮＡＮＤ型フラッシュメモリ５のＰ／Ｅサイクル数としてＮＡＮＤ型フラッシュメモリ５の総Ｐ／Ｅサイクル数を使用する場合について説明するが、総Ｐ／Ｅサイクル数の代わりに、ＮＡＮＤ型フラッシュメモリ５の最大Ｐ／Ｅサイクル数、ＮＡＮＤ型フラッシュメモリ５の最小Ｐ／Ｅサイクル数、またはＮＡＮＤ型フラッシュメモリ５の平均Ｐ／Ｅサイクル数を使用してもよい。
【０１９０】
アイドル状態検出部２２によってアイドル状態が検出されると（ステップＳ８０１のＹＥＳ）、コントローラ４は、残りのフリーブロックの数が閾値Ｘ１以上であるか否かを判定する（ステップＳ８０２）。残りのフリーブロックの数は、フリーブロックプール６０によって管理されているフリーブロックの現在の数を示す。
【０１９１】
残りのフリーブロックの数が閾値Ｘ１以上であるならば（ステップＳ８０２のＹＥＳ）、コントローラ４は、ＮＡＮＤ型フラッシュメモリ５の現在の総Ｐ／Ｅサイクル数が閾値Ｙ１以下であるか否かを判定する（ステップＳ８０３）。なお、ステップＳ８０３において、上述した（Ａ）、（Ｂ）、（Ｃ）のいずれかの方法を用いてもよい。
【０１９２】
現在の総Ｐ／Ｅサイクル数が閾値Ｙ１以下であるならば（ステップＳ８０３のＹＥＳ）、書き込み制御部２１は、フリーブロックプール６０からＰ／Ｅサイクル数が閾値Ｚ１以下のフリーブロックを選択し、その選択されたブロックをＳＬＣバッファブロックとして追加する（ステップＳ８０４）。
【０１９３】
このように、アイドル状態が検出され、且つフリーブロックの数が閾値Ｘ１以上であり、且つＮＡＮＤ型フラッシュメモリ５のＰ／Ｅサイクル数が閾値以下であることをＳＬＣバッファブロック追加条件に設定し、ＳＬＣバッファブロックの追加を制限してもよい。
【０１９４】
図１７のフローチャートは、コントローラ４によって実行されるＳＬＣバッファブロック追加処理のさらに別の手順を示す。
【０１９５】
ここでは、ＳＬＣバッファブロックを追加することを許可するための必要条件が、アイドル状態が検出され、且つ増やされた許容データ量（現在のＳＬＣバッファのデータ量）がＳＬＣバッファユニットの最大数未満であり、且つＮＡＮＤ型フラッシュメモリ５のＰ／Ｅサイクル数が閾値以下であることとする場合を想定する。以下では、ＮＡＮＤ型フラッシュメモリ５のＰ／Ｅサイクル数としてＮＡＮＤ型フラッシュメモリ５の総Ｐ／Ｅサイクル数を使用する場合について説明するが、総Ｐ／Ｅサイクル数の代わりに、ＮＡＮＤ型フラッシュメモリ５の最大Ｐ／Ｅサイクル数、ＮＡＮＤ型フラッシュメモリ５の最小Ｐ／Ｅサイクル数、またはＮＡＮＤ型フラッシュメモリ５の平均Ｐ／Ｅサイクル数を使用してもよい。
【０１９６】
アイドル状態検出部２２によってアイドル状態が検出されると（ステップＳ９０１のＹＥＳ）、コントローラ４は、ＳＬＣブロックプール６１Ａ内に存在するＳＬＣバッファブロックの総数がＳＬＣバッファユニットの最大数未満か否か、つまり増やされた許容データ量（現在のＳＬＣバッファのデータ量）がＳＬＣバッファユニットの最大数未満か否かを判定する（ステップＳ９０２）。
【０１９７】
このＳＬＣバッファブロックの総数がＳＬＣバッファユニットの最大数未満であるならば（ステップＳ９０２のＹＥＳ）、コントローラ４は、ＮＡＮＤ型フラッシュメモリ５の現在の総Ｐ／Ｅサイクル数が閾値Ｙ１以下であるか否かを判定する（ステップＳ９０３）。なお、ステップＳ９０３において、上述した（Ａ）、（Ｂ）、（Ｃ）のいずれかの方法を用いてもよい。
【０１９８】
現在の総Ｐ／Ｅサイクル数が閾値Ｙ１以下であるならば（ステップＳ９０３のＹＥＳ）、書き込み制御部２１は、フリーブロックプール６０からＰ／Ｅサイクル数が閾値Ｚ１以下のフリーブロックを選択し、その選択されたブロックをＳＬＣバッファブロックとして追加する（ステップＳ９０４）。
【０１９９】
このように、アイドル状態が検出され、且つ増やされた許容データ量（現在のＳＬＣバッファのデータ量）がＳＬＣバッファユニットの最大数未満であり、且つＮＡＮＤ型フラッシュメモリ５のＰ／Ｅサイクル数が閾値以下であることをＳＬＣバッファブロック追加条件に設定し、ＳＬＣバッファブロックの追加を制限してもよい。
【０２００】
図１８のフローチャートは、コントローラ４によって実行されるＳＬＣバッファブロック追加処理のさらに別の手順を示す。
【０２０１】
ここでは、ＳＬＣバッファブロックを追加することを許可するための必要条件が、アイドル状態が検出され、且つフリーブロックの数が閾値Ｘ１以上であり、且つ増やされた許容データ量（現在のＳＬＣバッファのデータ量）がＳＬＣバッファユニットの最大数未満であり、且つＮＡＮＤ型フラッシュメモリ５のＰ／Ｅサイクル数が閾値以下であることとする場合を想定する。以下では、ＮＡＮＤ型フラッシュメモリ５のＰ／Ｅサイクル数としてＮＡＮＤ型フラッシュメモリ５の総Ｐ／Ｅサイクル数を使用する場合について説明するが、総Ｐ／Ｅサイクル数の代わりに、ＮＡＮＤ型フラッシュメモリ５の最大Ｐ／Ｅサイクル数、ＮＡＮＤ型フラッシュメモリ５の最小Ｐ／Ｅサイクル数、またはＮＡＮＤ型フラッシュメモリ５の平均Ｐ／Ｅサイクル数を使用してもよい。
【０２０２】
アイドル状態検出部２２によってアイドル状態が検出されると（ステップＳ１００１のＹＥＳ）、コントローラ４は、残りのフリーブロックの数が閾値Ｘ１以上であるか否かを判定する（ステップＳ１００２）。残りのフリーブロックの数は、フリーブロックプール６０によって管理されているフリーブロックの現在の数を示す。
【０２０３】
残りのフリーブロックの数が閾値Ｘ１以上であるならば（ステップＳ１００２のＹＥＳ）、コントローラ４は、ＳＬＣブロックプール６１内に存在するＳＬＣバッファブロックの総数がＳＬＣバッファユニットの最大数未満か否か、つまり増やされた許容データ量（現在のＳＬＣバッファのデータ量）がＳＬＣバッファユニットの最大数未満か否かを判定する（ステップＳ１００３）。このＳＬＣバッファブロックの総数がＳＬＣバッファユニットの最大数未満であるならば（ステップＳ１００３のＹＥＳ）、コントローラ４は、ＮＡＮＤ型フラッシュメモリ５の現在の総Ｐ／Ｅサイクル数が閾値Ｙ１以下であるか否かを判定する（ステップＳ１００４）。なお、ステップＳ１００４において、上述した（Ａ）、（Ｂ）、（Ｃ）のいずれかの方法を用いてもよい。
【０２０４】
現在の総Ｐ／Ｅサイクル数が閾値Ｙ１以下であるならば（ステップＳ１００５のＹＥＳ）、書き込み制御部２１は、フリーブロックプール６０からＰ／Ｅサイクル数が閾値Ｚ１以下のフリーブロックを選択し、その選択されたブロックをＳＬＣバッファブロックとして追加する（ステップＳ１００５）。
【０２０５】
このように、アイドル状態が検出され、且つフリーブロックの数が閾値Ｘ１以上であり、且つ増やされた許容データ量（現在のＳＬＣバッファのデータ量）がＳＬＣバッファユニットの最大数未満であり、且つＮＡＮＤ型フラッシュメモリ５のＰ／Ｅサイクル数が閾値以下であることをＳＬＣバッファブロック追加条件に設定し、ＳＬＣバッファブロックの追加を制限してもよい。
【０２０６】
図１９のフローチャートは、コントローラ４によって実行されるＳＬＣバッファブロック解放処理の手順を示す。
【０２０７】
コントローラ４は、ＳＬＣバッファブロック解放条件を満たすＳＬＣバッファブロックを解放する処理を実行する。ＳＬＣバッファブロック解放条件は、有効データを含むＳＬＣバッファブロックを有効データを含まないフリーブロックにすることを許可するための必要条件である。ＳＬＣバッファブロック解放条件の例としては、以下の条件が挙げられる。
【０２０８】
（１）ＳＬＣバッファブロック内の有効データの量が閾値以下
（２）ＳＬＣバッファブロック内のデータのリード回数が閾値以下
（３）ＳＬＣバッファブロックのＰ／Ｅサイクル数が閾値以下
（１）の条件は、ＳＬＣバッファブロックを解放するためにコピーすることが必要なデータの量が少ないＳＬＣバッファブロックを解放対象ブロック（ガベージコレクション対象ブロック）として選択するために使用される。
【０２０９】
（２）の条件は、ホスト２によってリードされる頻度が低いデータを格納しているＳＬＣバッファブロックを解放対象ブロック（ガベージコレクション対象ブロック）として選択するために使用される。リードされる頻度が低いデータを格納しているＳＬＣバッファブロックを解放してフリーブロックにすることにより、このＳＬＣバッファブロックを、ホスト２によってリードされる頻度が高いデータのような新たなデータの格納に利用することができる。
【０２１０】
（３）の条件は、低い更新頻度を有するデータ（コールドデータ）を格納しているＳＬＣバッファブロックを解放対象ブロック（ガベージコレクション対象ブロック）として選択するために使用される。コールドデータを格納しているＳＬＣバッファブロックを解放してフリーブロックにすることにより、このＳＬＣバッファブロックを、新たな書き込み先ブロックとして積極的に利用することが可能となる。この結果、全てのブロックのＰ／Ｅサイクル数を均一化するためのウェアレベリングを行うことができる。
【０２１１】
なお、各ＳＬＣバッファブロックのＰ／Ｅサイクル数と比較される閾値は、全ブロックの平均Ｐ／Ｅサイクル数であってもよいし、全ブロックのＰ／Ｅサイクル数の最小値（つまりＮＡＮＤ型フラッシュメモリ５の現在の最小プログラム／イレーズサイクル数）であってもよい。後者の場合には、最小プログラム／イレーズサイクル数を有するＳＬＣバッファブロックが解放対象として選択される。
【０２１２】
まず、コントローラ４は、（１）の条件を満たすＳＬＣバッファブロックが存在するかいなかを判定するために、ＳＬＣアクティブブロックプール６１Ａ内の各ＳＬＣバッファブロックの有効データ量と閾値Ａ１とを比較する（ステップＳ１１０１）。
【０２１３】
有効データ量が閾値Ａ１以下のＳＬＣバッファブロックが存在するならば（ステップＳ１１０２のＹＥＳ）、コントローラ４は、このＳＬＣバッファブロックを解放対象ブロックとして選択し、この選択されたＳＬＣバッファブロックを解放する（ステップＳ１１０３）。ステップＳ１１０３では、選択されたＳＬＣバッファブロック内の有効データは、ＭＬＣブロックに移動されてもよいし、他のＳＬＣバッファブロックに移動されてもよい。選択されたＳＬＣバッファブロックの有効データをＭＬＣブロックに移動する処理では、ＳＬＣバッファブロック内の有効データをＭＬＣモードでフリーブロックに書き込む処理が実行され、これによって有効データがＭＬＣブロックに移動される。選択されたＳＬＣバッファブロックの有効データを他のＳＬＣバッファブロックに移動する処理では、選択されたＳＬＣバッファブロック内の有効データをＳＬＣモードでコンプリートフリーブロック（またはＳＬＣフリーブロック）に書き込む処理が実行され、これによって有効データが他のＳＬＣバッファブロックに移動される。
【０２１４】
次に、コントローラ４は、ＳＬＣアクティブブロックプール６１Ａ内の各ＳＬＣバッファブロックのリード回数と閾値Ｂ１とを比較する（ステップＳ１１０４）。
【０２１５】
リード回数が閾値Ｂ１以下のＳＬＣバッファブロックが存在するならば（ステップＳ１１０５のＹＥＳ）、コントローラ４は、リード回数が閾値Ｂ１以下のＳＬＣバッファブロックを解放対象ブロックとして選択し、この選択されたＳＬＣバッファブロックを解放する（ステップＳ１１０６）。ステップＳ１１０６では、選択されたＳＬＣバッファブロック内の有効データは、ＭＬＣブロックに移動されてもよいし、他のＳＬＣバッファブロックに移動されてもよい。
【０２１６】
次に、コントローラ４は、ＳＬＣアクティブブロックプール６１Ａ内の各ＳＬＣバッファブロックのＰ／Ｅサイクル数と閾値Ｃ１とを比較する（ステップＳ１１０７）。
【０２１７】
Ｐ／Ｅサイクル数が閾値Ｃ１以下のＳＬＣバッファブロックが存在するならば（ステップＳ１１０８のＹＥＳ）、コントローラ４は、Ｐ／Ｅサイクル数が閾値Ｃ１以下のＳＬＣバッファブロックを解放対象ブロックとして選択し、この選択されたＳＬＣバッファブロックを解放する（ステップＳ１１０９）。ここで、閾値Ｃ１としてＮＡＮＤ型フラッシュメモリ５の現在の平均Ｐ／Ｅサイクル数、またはＮＡＮＤ型フラッシュメモリ５の現在の最小Ｐ／Ｅサイクル数を用いてもよい。閾値Ｃ１として最小Ｐ／Ｅサイクル数が使用された場合には、ＳＬＣアクティブブロックプール６１Ａから、最小Ｐ／Ｅサイクル数を有するＳＬＣバッファブロックが解放対象ブロックとして選択される。
【０２１８】
また、ステップＳ１１０９では、選択されたＳＬＣバッファブロック内の有効データは、ＭＬＣブロックに移動されてもよいし、他のＳＬＣバッファブロックに移動されてもよい。
【０２１９】
図２０のフローチャートは、コントローラ４によって実行されるＳＬＣバッファブロック解放処理の別の手順を示す。
【０２２０】
コントローラ４は、ＳＬＣアクティブブロックプール６１Ａ内の各ＳＬＣバッファブロックの有効データ量と閾値Ａ１とを比較する（ステップＳ１２０１）。
【０２２１】
有効データ量が閾値Ａ１以下のＳＬＣバッファブロックが存在するならば（ステップＳ１２０２のＹＥＳ）、コントローラ４は、その有効データ量が閾値Ａ１以下のＳＬＣバッファブロックを解放対象のＳＬＣバッファブロックとして選択し、この選択したＳＬＣバッファブロックのリード回数が閾値Ｂ１以下であるか否かを判定する（ステップＳ１２０３）。
【０２２２】
選択したＳＬＣバッファブロックのリード回数が閾値Ｂ１以下であるならば（ステップＳ１２０３のＹＥＳ）、コントローラ４は、選択したＳＬＣバッファブロックの有効データをＭＬＣブロックに移動させる（ステップＳ１２０４）。
【０２２３】
一方、選択されたＳＬＣバッファブロックのリード回数が閾値Ｂ１を超えているならば（ステップＳ１２０３のＮＯ）、コントローラ４は、選択されたＳＬＣバッファブロックの有効データを他のＳＬＣバッファブロックに移動させる（ステップＳ１２０５）。
【０２２４】
選択されたＳＬＣバッファブロックのリード回数が多い場合には、この選択されたＳＬＣバッファブロックに格納されているデータの読み出し頻度は多いため、このデータをＭＬＣブロックに移動してしまうと、このデータの読み出し性能が低下してしまう。他方、選択されたＳＬＣバッファブロックのリード回数が少ない場合には、この選択されたＳＬＣバッファブロックに格納されているデータの読み出し頻度は少ないため、このデータをＭＬＣブロックに移動したとしても、このデータの読み出し性能の低下による影響はほとんどない。
【０２２５】
図２１のフローチャートは、コントローラ４によって実行されるＳＬＣバッファブロック解放処理のさらに別の手順を示す。
【０２２６】
コントローラ４は、ＳＬＣアクティブブロックプール６１Ａ内の各ＳＬＣバッファブロックのＰ／Ｅサイクル数と閾値Ｃ１とを比較する（ステップＳ１３０１）。
【０２２７】
Ｐ／Ｅサイクル数が閾値Ｃ１以下のＳＬＣバッファブロックが存在するならば（ステップＳ１３０２のＹＥＳ）、コントローラ４は、そのＰ／Ｅサイクル数が閾値Ｃ１以下のＳＬＣバッファブロックを解放対象のＳＬＣバッファブロックとして選択し、選択されたＳＬＣバッファブロックのリード回数が閾値Ｂ１以下であるか否かを判定する（ステップＳ１３０３）。
【０２２８】
選択されたＳＬＣバッファブロックのリード回数が閾値Ｂ１以下であるならば（ステップＳ１３０３のＹＥＳ）、コントローラ４は、選択されたＳＬＣバッファブロックの有効データをＭＬＣブロックに移動させる（ステップＳ１２０４）。
【０２２９】
選択されたＳＬＣバッファブロックのリード回数が閾値Ｂ１を超えているならば（ステップＳ１３０３のＮＯ）、コントローラ４は、選択されたＳＬＣバッファブロックの有効データを他のＳＬＣバッファブロックに移動させる（ステップＳ１３０５）。
【０２３０】
なお、閾値Ｃ１の値としては、ＮＡＮＤ型フラッシュメモリ５の現在の平均Ｐ／Ｅサイクル数を使用してもよい。この場合、平均Ｐ／Ｅサイクル数以下のＰ／Ｅサイクル数を有するＳＬＣバッファブロックが解放対象のＳＬＣバッファブロックとして選択される。あるいは、閾値Ｃ１の値としては、ＮＡＮＤ型フラッシュメモリ５の現在の最小Ｐ／Ｅサイクル数を使用してもよい。この場合、ＳＬＣアクティブブロックプール６１Ａから、最小Ｐ／Ｅサイクル数を有するＳＬＣバッファブロックが解放対象のＳＬＣバッファブロックとして選択される。
【０２３１】
図２２のタイミングチャートは、アイドル状態が検出されない場合にＳＳＤ３のコントローラ４によって実行される書き込み動作を示す。
【０２３２】
ここでは、説明の簡単化のために、上述の許容データ量が一つのＳＬＣバッファブロック分のデータ量である場合を想定する。
【０２３３】
（１）最初に、書き込み制御部２１は、ＳＬＣモードを書き込みモードとして選択する。そして、書き込み制御部２１は、ホスト２から受信されるデータをＳＬＣバッファブロックにＳＬＣモードで書き込む。このとき、ＭＬＣモードによる書き込みよりも書き込み速度が速い（書き込み性能が高い）。
【０２３４】
（２）ＳＬＣバッファユニットがデータで満たされると、つまり許容データ量分のデータがＳＬＣモードで書き込まれると、書き込み制御部２１は、書き込みモードをＭＬＣモードに変更する。そして、書き込み制御部２１は、ホスト２から受信されるデータをＭＬＣブロックにＭＬＣモードで書き込む。このとき、ＳＬＣモードによる書き込み時よりも書き込み速度が遅くなる（書き込み性能が低くなる）。その反面、ＳＬＣモードによる書き込み時よりも総Ｐ／Ｅサイクル数が増加する割合が低くなるため、ＳＬＣモードで書き込みを行っている場合に比べ、ＳＳＤ３の寿命の短縮を防ぐことができる。
【０２３５】
このまま、データの書き込みが行われていくと、残りのフリーブロックの数がある閾値まで低下する。そうなると、ガベージコレクション動作制御部２４は、フリーブロックの数を増やすために、ガベージコレクションを実行する。ガベージコレクションが実行されると、データのコピーが行われるため、ホスト２からのデータの書き込み性能が、ガベージコレクションを実行していないときに比べて低下する。
【０２３６】
図２３のタイミングチャートは、コントローラ４によってアイドル状態を挟んで実行される書き込み動作を示す。
【０２３７】
ここでは、説明の簡単化のために、上述の許容データ量が一つのＳＬＣバッファブロック分のデータ量である場合を想定する。
【０２３８】
（１）最初に、書き込み制御部２１は、ＳＬＣモードを書き込みモードとして選択する。そして、書き込み制御部２１は、ホスト２から受信されるデータをＳＬＣバッファブロックにＳＬＣモードで書き込む。このとき、ＭＬＣモードによる書き込みよりも書き込み速度が速い（書き込み性能が高い）。
【０２３９】
（２）ＳＬＣバッファユニットがデータで満たされると、つまり許容データ量分のデータがＳＬＣモードで書き込まれると、書き込み制御部２１は、書き込みモードをＭＬＣモードに変更する。そして、書き込み制御部２１は、ホスト２から受信されるデータをＭＬＣブロックにＭＬＣモードで書き込む。このとき、ＳＬＣモードによる書き込み時よりも書き込み速度が遅くなる（書き込み性能が低くなる）。その反面、ＳＬＣモードによる書き込み時よりもＰ／Ｅサイクル数の増加する割合が低くなるため、ＳＬＣモードで書き込みを行っている場合に比べ、ＳＳＤ３の寿命の短縮を防ぐことができる。
【０２４０】
（３）アイドル状態検出部２２によって１回目のアイドル状態が検出された場合、書き込み制御部２１は、許容データ量を一つのＳＬＣバッファユニット分のデータ量（ここでは、一つのＳＬＣバッファブロック分のデータ量）だけ追加し、書き込みモードをＳＬＣモードに戻す。
【０２４１】
（４）そして、書き込み制御部２１は、１回目のアイドル状態の検出の後にホスト２から受信されるデータをＳＬＣバッファブロックにＳＬＣモードで書き込む。
【０２４２】
（５）ＳＬＣバッファブロックがデータで満たされると、つまり、１回目のアイドル状態の検出の後にＳＬＣモードで書き込まれたデータ量が一つのＳＬＣバッファユニット分のデータ量（ここでは、一つのＳＬＣバッファブロック分のデータ量）に達すると、書き込み制御部２１は、書き込みモードを再びＭＬＣモードに変更する。そして、書き込み制御部２１は、ホスト２から受信されるデータをＭＬＣブロックにＭＬＣモードで書き込む。
【０２４３】
（６）アイドル状態検出部２２によって２回目のアイドル状態が検出された場合、書き込み制御部２１は、許容データ量を一つのＳＬＣバッファユニット分のデータ量（ここでは、一つのＳＬＣバッファブロック分のデータ量）だけ追加し、書き込みモードをＳＬＣモードに戻す。
【０２４４】
（７）そして、書き込み制御部２１は、２回目のアイドル状態の検出の後にホスト２から受信されるデータをＳＬＣバッファブロックにＳＬＣモードで書き込む。
【０２４５】
（８）２回目のアイドル状態検出時に追加されたＳＬＣバッファブロックがデータで満たされる前に、アイドル状態検出部２２によってアイドル状態が再び検出された場合（３回目）、書き込み制御部２１は、許容データ量を一つのＳＬＣバッファユニット分のデータ量（ここでは、一つのＳＬＣバッファブロック分のデータ量）だけ追加し、書き込みモードをＳＬＣモードに維持する。
【０２４６】
（９）そして、書き込み制御部２１は、３回目のアイドル状態の検出の後にホスト２から受信されるデータをＳＬＣバッファブロックにＳＬＣモードで書き込む。
【０２４７】
（１０）３回目のアイドル状態検出時に追加されたＳＬＣバッファブロックがデータで満たされる前に、アイドル状態検出部２２によってアイドル状態が再び検出された場合（４回目）、書き込み制御部２１は、許容データ量を一つのＳＬＣバッファユニット分のデータ量（ここでは、一つのＳＬＣバッファブロック分のデータ量）だけ追加し、書き込みモードをＳＬＣモードに維持する。
【０２４８】
（１１）そして、書き込み制御部２１は、４回目のアイドル状態の検出の後にホスト２から受信されるデータをＳＬＣバッファブロックにＳＬＣモードで書き込む。
【０２４９】
（１２）４回目のアイドル状態検出時に追加されたＳＬＣバッファブロックがデータで満たされると、書き込み制御部２１は、書き込みモードをＭＬＣモードに変更する。そして、書き込み制御部２１は、ホスト２から受信されるデータをＭＬＣブロックにＭＬＣモードで書き込む。このとき、ＳＬＣモードによる書き込み時よりも書き込み速度が遅くなる（書き込み性能が低くなる）。その反面、ＳＬＣモードによる書き込み時よりもＰ／Ｅサイクル数が増加する割合が低くなるため、ＳＬＣモードで書き込みを行っている場合に比べ、ＳＳＤ３の寿命の短縮を防ぐことができる。
【０２５０】
このまま、データの書き込みが行われていくと、残りのフリーブロックの数がある閾値まで低下する。そうなると、ガベージコレクション動作制御部２４は、フリーブロックの数を増やすために、ガベージコレクションを実行する。ガベージコレクションが実行されると、データのコピーが行われるため、ホスト２からのデータの書き込み性能が、ガベージコレクションを実行していないときに比べて低下する。
【０２５１】
このように、アイドル状態が検出される度に、許容データ量が一つのＳＬＣバッファユニット分のデータ量だけ追加されるので、アイドル状態の直後の書き込み動作をＳＬＣモードで実行することができる。この結果、アイドル状態が検出される度に、その検出されたアイドル状態の直後の書き込み性能を向上させることができる。また、アイドル状態の直後にＳＬＣモードで書き込み可能なデータ量は、追加されたデータ量までに制限される。したがって、データ書き込みのために使用可能なＳＬＣバッファブロックの数を追加されたデータ量に対応する個数までに制限することができ、これによって総ブログラム／イレーズサイクル数の著しい増加を防止することができる。
【０２５２】
図２４は、ホスト２として機能する情報処理装置（コンピューティングデバイス）のハードウェア構成例を示す。
【０２５３】
この情報処理装置は、サーバのようなコンピューティングデバイスとして実現される。この情報処理装置は、プロセッサ（ＣＰＵ）１０１、メインメモリ１０２、ＢＩＯＳ−ＲＯＭ１０３、ネットワークコントローラ１０５、周辺インタフェースコントローラ１０６、コントローラ１０７、およびエンベデッドコントローラ（ＥＣ）１０８等を含む。
【０２５４】
プロセッサ１０１は、この情報処理装置の各コンポーネントの動作を制御するように構成されたＣＰＵである。このプロセッサ１０１は、複数のＳＳＤ３のいずれか１つからメインメモリ１０２にロードされる様々なプログラムを実行する。メインメモリ１０２は、ＤＲＡＭのようなランダムアクセスメモリから構成される。また、プロセッサ１０１は、不揮発性メモリであるＢＩＯＳ−ＲＯＭ１０３に格納された基本入出力システム（ＢＩＯＳ）も実行する。ＢＩＯＳはハードウェア制御のためのシステムプログラムである。
【０２５５】
ネットワークコントローラ１０５は、有線ＬＡＮコントローラ、無線ＬＡＮコントローラのような通信デバイスである。周辺インタフェースコントローラ１０６は、ＵＳＢデバイスのような周辺デバイスとの通信を実行するように構成されている。
【０２５６】
コントローラ１０７は、複数のコネクタ１０７Ａにそれぞれ接続されるデバイスとの通信を実行するように構成されている。複数のＳＳＤ３が複数のコネクタ１０７Ａにそれぞれ接続されてもよい。コントローラ１０７は、ＳＡＳ  ｅｘｐａｎｄｅｒ、ＰＣＩｅ  Ｓｗｉｔｃｈ、ＰＣＩｅ  ｅｘｐａｎｄｅｒ、フラッシュアレイコントローラ、またはＲＡＩＤコントローラ等である。
【０２５７】
ＥＣ１０８は、情報処理装置の電力管理を実行するように構成されたシステムコントローラとして機能する。
【０２５８】
図２５は、複数のＳＳＤ３とホスト２とを含む情報処理装置（サーバ）の構成例を示す。
【０２５９】
この情報処理装置（サーバ）は、ラックに収容可能な薄い箱形の筐体２０１を備える。多数のＳＳＤ３は筐体２０１内に配置されてもよい。この場合、各ＳＳＤ３は筐体２０１の前面２０１Ａに設けられたスロットに取り外し可能に挿入されてもよい。
【０２６０】
システムボード（マザーボード）２０２は筐体２０１内に配置される。システムボード（マザーボード）２０２上においては、ＣＰＵ１０１、メモリ１０２、ネットワークコントローラ１０５、コントローラ１０７を含む様々な電子部品が実装されている。これら電子部品がホスト２として機能する。
【０２６１】
以上説明したように、本実施形態によれば、書き込みモードとしてＳＬＣモードが選択され、ＮＡＮＤ型フラッシュメモリ５に書き込まれたデータ量が最小ＳＬＣバッファユニット分のデータ量（許容データ量）に達するまで、ホスト２から受信されるライトコマンドに応じてデータがＳＬＣモードでＮＡＮＤ型フラッシュメモリ５に書き込まれる。
【０２６２】
そして、ＮＡＮＤ型フラッシュメモリ５に書き込まれたデータ量が許容データ量に達した場合、書き込みモードがＭＬＣモードに変更され、ホスト２から受信されるライトコマンドに応じてデータがＭＬＣモードでＮＡＮＤ型フラッシュメモリ５に書き込まれる。また、ホスト２からコマンドがインターバル時間以上の期間中受信されないアイドル状態が検出されると、書き込みモードをＳＬＣモードに戻すために許容データ量がＳＬＣバッファユニット分のデータ量（第１データ量）だけ増加される。
【０２６３】
そして、アイドル状態の検出の後にＮＡＮＤ型フラッシュメモリ５に書き込まれたデータ量が第１データ量に達するまで、アイドル状態の検出後にホスト２から受信されるライトコマンドに応じてデータがＳＬＣモードでＮＡＮＤ型フラッシュメモリ５に書き込まれる。
【０２６４】
これにより、アイドル状態の検出の直後の書き込み性能を向上させることができる。また、アイドル状態の直後にＳＬＣモードで書き込み可能なデータ量は、追加されたデータ量（第１データ量）までに制限される。したがって、たとえ書き込みデータの量が増え始めたとしても、ＳＬＣモードで書き込まれるデータ量を追加された第１データ量までに制限することができるので、ＮＡＮＤ型フラッシュメモリ５の総ブログラム／イレーズサイクル数の著しい増加を防止することができる。よって、ＳＳＤ３の寿命と性能とのバランスを保つことができる。
【０２６５】
さらに、本実施形態では、アイドル状態の検出の度に、許容データ量の増加を許可する条件が満たされているか否かが判定される。許容データ量の増加を許可する条件としては、増やされた許容データ量がＳＬＣモードで書き込み可能なデータの最大量未満であるという条件、ＮＡＮＤ型フラッシュメモリ５の現在のＰ／Ｅサイクル数（総Ｐ／Ｅサイクル数、最大総Ｐ／Ｅサイクル数、最小Ｐ／Ｅサイクル数、または平均Ｐ／Ｅサイクル数）が対応する閾値以下であるという条件、等を使用することができる。あるいは、これら条件を適宜組み合わせることも可能である。許容データ量の増加を許可する条件が満たされている場合、書き込みモードをＳＬＣモードに戻すために許容データ量が第１データ量だけ増加され、ホスト２から受信される第１データ量分のデータがＳＬＣモードでＮＡＮＤ型フラッシュメモリ５に書き込まれる。一方、許容データ量の増加を許可する条件が満たされていない場合、書き込みモードはＭＬＣモードに維持される。
【０２６６】
これにより、ＳＬＣモードとＭＬＣモードの比率を適正化することが可能となり、ＳＬＣモードで書き込むことが可能なデータ量（許容データ量）が増加しすぎることによるＳＳＤ３の寿命の短縮を防ぐことができる。
【０２６７】
なお、本実施形態では、不揮発性メモリとしてＮＡＮＤ型フラッシュメモリを例示した。しかし、本実施形態の機能は、例えば、ＭＲＡＭ（Ｍａｇｎｅｔｏｒｅｓｉｓｔｉｖｅ  Ｒａｎｄｏｍ  Ａｃｃｅｓｓ  Ｍｅｍｏｒｙ）、ＰＲＡＭ（Ｐｈａｓｅ  ｃｈａｎｇｅ  Ｒａｎｄｏｍ  Ａｃｃｅｓｓ  Ｍｅｍｏｒｙ）、ＲｅＲＡＭ（Ｒｅｓｉｓｔｉｖｅ  Ｒａｎｄｏｍ  Ａｃｃｅｓｓ  Ｍｅｍｏｒｙ）、又は、ＦｅＲＡＭ（Ｆｅｒｒｏｅｌｅｃｔｒｉｃ  Ｒａｎｄｏｍ  Ａｃｃｅｓｓ  Ｍｅｍｏｒｙ）のような他の様々な不揮発性メモリにも適用できる。
【０２６８】
本発明のいくつかの実施形態を説明したが、これらの実施形態は、例として提示したものであり、発明の範囲を限定することは意図していない。これら新規な実施形態は、その他の様々な形態で実施されることが可能であり、発明の要旨を逸脱しない範囲で、種々の省略、置き換え、変更を行うことができる。これら実施形態やその変形は、発明の範囲や要旨に含まれるとともに、特許請求の範囲に記載された発明とその均等の範囲に含まれる。
【符号の説明】
【０２６９】
２…ホスト、３…ＳＳＤ、４…コントローラ、５…ＮＡＮＤ型フラッシュメモリ、２１…書き込み制御部、２２…アイドル状態検出部、２３…ＳＬＣカウント部、２４…ガベージコレクション動作制御部。
【図１】
2018120439.tif 000003
【図２】
2018120439.tif 000004
【図３】
2018120439.tif 000005
【図４】
2018120439.tif 000006
【図５】
2018120439.tif 000007
【図６】
2018120439.tif 000008
【図７】
2018120439.tif 000009
【図８】
2018120439.tif 000010
【図９】
2018120439.tif 000011
【図１０】
2018120439.tif 000012
【図１１】
2018120439.tif 000013
【図１２】
2018120439.tif 000014
【図１３】
2018120439.tif 000015
【図１４】
2018120439.tif 000016
【図１５】
2018120439.tif 000017
【図１６】
2018120439.tif 000018
【図１７】
2018120439.tif 000019
【図１８】
2018120439.tif 000020
【図１９】
2018120439.tif 000021
【図２０】
2018120439.tif 000022
【図２１】
2018120439.tif 000023
【図２２】
2018120439.tif 000024
【図２３】
2018120439.tif 000025
【図２４】
2018120439.tif 000026
【図２５】
2018120439.tif 000027