(57)【要約】【課題】ストレージ容量の利用効率を改善することができるメモリシステムを実現する。【解決手段】実施形態によれば、メモリシステムは、書き込むべきライトデータがシステムデータ特性を有するか否かを示すシステムデータタグを、ホストから受信する。メモリシステムは、受信されたシステムデータタグによってシステムデータ特性を有するデータであると指定された第１のライトデータを、第１レベルの更新頻度を有する第１タイプのデータを書き込むための第１のブロックに書き込む。メモリシステムは、受信されたシステムデータタグによってシステムデータ特性を有するデータであると指定されなかった第２のライトデータを、第１タイプのデータよりも低い第２レベルの更新頻度を有する第２タイプのデータを書き込むための第２のブロックに書き込む。【選択図】図１１
2019148913.tif 000002
【特許請求の範囲】
【請求項１】
ホストに接続可能なメモリシステムであって、
複数のブロックを含む不揮発性メモリと、
前記不揮発性メモリに電気的に接続され、前記不揮発性メモリを制御するコントローラとを具備し、
前記コントローラは、
書き込むべきライトデータがシステムデータ特性を有するか否かを示すシステムデータタグを、前記ホストから受信し、
前記受信されたシステムデータタグによって前記システムデータ特性を有するデータであると指定された第１のライトデータを、前記複数のブロックのうち、第１レベルの更新頻度を有する第１タイプのデータを書き込むための第１のブロックに書き込み、
前記受信されたシステムデータタグによって前記システムデータ特性を有するデータであると指定されなかった第２のライトデータを、前記複数のブロックのうち、前記第１タイプのデータよりも低い第２レベルの更新頻度を有する第２タイプのデータを書き込むための第２のブロックに書き込むように構成されている、メモリシステム。
【請求項２】
前記コントローラは、さらに、
前記第２のライトデータのサイズが第１閾値以下であるか否かを判定し、
前記第２のライトデータのサイズが前記第１閾値よりも大きい場合、前記第２のライトデータを前記第２のブロックに書き込み、
前記第２のライトデータのサイズが前記第１閾値以下である場合、前記第２のライトデータを前記第１のブロックに書き込むように構成されている請求項１記載のメモリシステム。
【請求項３】
前記メモリシステムは、ユニバーサルフラッシュストレージ（ＵＦＳ）規格に準拠するストレージデバイスであり、
前記システムデータタグは、前記ユニバーサルフラッシュストレージ（ＵＦＳ）規格で規定されたライトコマンドに含まれるグループナンバーフィールドによって表される請求項１記載のメモリシステム。
【請求項４】
前記メモリシステムは、エンベデッド・マルチメディア・カード（ｅＭＭＣ）規格に準拠するストレージデバイスであり、
前記システムデータタグは、前記エンベデッド・マルチメディア・カード（ｅＭＭＣ）規格で規定されたセット・ブロック・カウント・コマンド内のタグ・リクエストによって表される請求項１記載のメモリシステム。
【請求項５】
前記コントローラは、
前記第１のブロックへのデータ書き込みを、メモリセル当たりにｍビットのデータを書き込む第１のプログラムモードによって実行し、
前記第２のブロックへのデータ書き込みを、メモリセル当たりにｎビットのデータを書き込む第２のプログラムモードによって実行するように構成され、
前記ｍは前記ｎよりも小さい整数である請求項１記載のメモリシステム。
【請求項６】
前記コントローラは、
前記第１のブロックとして使用され且つ有効データを各々が保持している複数のブロックを含む第１のブロック群と、前記第２のブロックとして使用され且つ有効データを各々が保持している複数のブロックを含む第２のブロック群とから、有効データ量が少ない一つ以上のブロックをガベージコレクションが施されるべきガベージコレクションソースブロックとして選択し、
前記ガベージコレクションソースブロックとして選択された前記一つ以上のブロック内の有効データを、一つ以上のガベージコレクションディスティネーションブロックにコピーするように構成されている請求項５記載のメモリシステム。
【請求項７】
ホストに接続可能なメモリシステムであって、
複数のブロックを含む不揮発性メモリと、
前記不揮発性メモリに電気的に接続され、前記不揮発性メモリを制御するコントローラとを具備し、
前記コントローラは、
書き込むべきライトデータがシステムデータ特性を有するか否かを示すシステムデータタグを、前記ホストから受信し、
前記ライトデータが、前記受信されたシステムデータタグによってシステムデータ特性を有するデータであると指定された場合、前記ライトデータを、前記複数のブロックのうち、第１レベルの更新頻度を有する第１タイプのデータを格納するための第１のブロックに書き込み、
前記ライトデータが、前記受信されたシステムデータタグによって前記システムデータ特性を有するデータであると指定されなかった場合、前記ライトデータのサイズが第１閾値以下であるか否かを判定し、
前記ライトデータのサイズが前記第１閾値以下である場合、前記ライトデータを前記第１のブロックに書き込み、
前記ライトデータのサイズが前記第１閾値よりも大きい場合、前記ライトデータを、前記複数のブロックのうち、前記第１タイプのデータよりも低い第２レベルの更新頻度を有する第２タイプのデータを書き込むための第２のブロックに書き込むように構成されている、メモリシステム。
【請求項８】
前記メモリシステムは、ユニバーサルフラッシュストレージ（ＵＦＳ）規格に準拠するストレージデバイスであり、
前記システムデータタグは、前記ユニバーサルフラッシュストレージ（ＵＦＳ）規格で規定されたライトコマンドに含まれるグループナンバーフィールドの値によって表される請求項７記載のメモリシステム。
【請求項９】
前記メモリシステムは、エンベデッド・マルチメディア・カード（ｅＭＭＣ）規格に準拠するストレージデバイスであり、
前記システムデータタグは、前記エンベデッド・マルチメディア・カード（ｅＭＭＣ）規格で規定されたセット・ブロック・カウント・コマンド内のタグ・リクエストの値によって表される請求項７記載のメモリシステム。
【請求項１０】
ホストに接続可能なメモリシステムであって、
複数のメモリセルを含む不揮発性メモリと、
前記不揮発性メモリに電気的に接続され、前記不揮発性メモリを制御するコントローラとを具備し、
前記コントローラは、
書き込むべきライトデータがシステムデータ特性を有するか否かを示す通知を、前記ホストから受信し、
前記ライトデータが前記システムデータ特性を有するデータである場合、前記ライトデータを、メモリセル当たりにｍビットのデータを書き込む第１のプログラムモードで前記不揮発性メモリに書き込み、
前記ライトデータが前記システムデータ特性を有するデータではない場合、前記ライトデータを、メモリセル当たりにｎビットのデータを書き込む第２のプログラムモードで前記不揮発性メモリに書き込むように構成され、前記ｍは前記ｎよりも小さい整数である、メモリシステム。
【請求項１１】
前記コントローラは、
前記ライトデータが前記システムデータ特性を有するデータではない場合、前記ライトデータのサイズが第１閾値以下であるか否かを判定し、
前記ライトデータのサイズが前記第１閾値以下である場合、前記ライトデータを、前記第１のプログラムモードで前記不揮発性メモリに書き込み、
前記ライトデータのサイズが前記第１閾値よりも大きい場合、前記ライトデータを、前記第２のプログラムモードで前記不揮発性メモリに書き込む請求項１０記載のメモリシステム。
【発明の詳細な説明】
【技術分野】
【０００１】
本発明の実施形態は、不揮発性メモリを制御する技術に関する。
【背景技術】
【０００２】
近年、不揮発性メモリを備えるメモリシステムが広く普及している。
【０００３】
このようなメモリシステムの一つとして、ＮＡＮＤ型フラッシュメモリを備えるフラッシュストレージデバイスが知られている。
【０００４】
ＮＡＮＤ型フラッシュメモリにおいては、データが既に書き込まれているブロック内の領域上に新たなデータを直接上書きすることができない。そのため、既に書き込まれているデータを更新する場合には、そのブロック内または別ブロックの未書き込み領域に新たなデータを書き込み、そして以前のデータを無効データとして扱う、という動作が実行される。
【０００５】
したがって、ＮＡＮＤ型フラッシュメモリにおいては、データが更新されるに連れて無効データを含むブロックの数が増加し、この結果、これらブロックにおいてフラグメンテーションがそれぞれ起こる場合がある。
【先行技術文献】
【特許文献】
【０００６】
【特許文献１】特開２０１５−１８４８５６号公報
【特許文献２】特開２００９−３０１４９１号公報
【特許文献３】特許第６１２１８５７号公報
【特許文献４】特開２０１４−５９８７２号公報
【非特許文献】
【０００７】
【非特許文献１】NVM Express Revision 1.3, May 1, 2017, p.182-184
【発明の概要】
【発明が解決しようとする課題】
【０００８】
このようなフラグメンテーションは各ブロックに書き込み可能な有効データ量を低下させ、これによってストレージ容量の利用効率を下げる。また、ストレージ容量の利用効率の低下は、ガベージコレクションの実行頻度を高くする要因となる。このため、ストレージ容量の利用効率の低下は、フラッシュストレージデバイスの性能低下、ライトアンプリフィケーションファクタの増大を引き起こす要因となる。
【０００９】
本発明が解決しようとする課題は、ストレージ容量の利用効率を改善することができるメモリシステムを提供することである。
【課題を解決するための手段】
【００１０】
実施形態によれば、ホストに接続可能なメモリシステムは、複数のブロックを含む不揮発性メモリと、前記不揮発性メモリに電気的に接続され、前記不揮発性メモリを制御するコントローラとを具備する。前記コントローラは、書き込むべきライトデータがシステムデータ特性を有するか否かを示すシステムデータタグを、前記ホストから受信する。前記コントローラは、前記受信されたシステムデータタグによって前記システムデータ特性を有するデータであると指定された第１のライトデータを、前記複数のブロックのうち、第１レベルの更新頻度を有する第１タイプのデータを書き込むための第１のブロックに書き込む。前記コントローラは、前記受信されたシステムデータタグによって前記システムデータ特性を有するデータであると指定されなかった第２のライトデータを、前記複数のブロックのうち、前記第１タイプのデータよりも低い第２レベルの更新頻度を有する第２タイプのデータを書き込むための第２のブロックに書き込む。
【図面の簡単な説明】
【００１１】
【図１】第１実施形態に係るメモリシステムの構成例を示すブロック図。
【図２】ホストから受信されるライトコマンドによって指定されるデータサイズに基づいて、ホストから受信されるライトデータが書き込まれるべき書き込み先ブロックを決定する処理の手順を示すフローチャート。
【図３】ライトデータのサイズに基づいて、更新頻度が高いデータ用のブロックまたは更新頻度が低いデータ用のブロックにライトデータを選択的に書き込む動作の例を示す図。
【図４】更新頻度の高いデータ用のブロックにフラグメンテーションが起こる例を示す図。
【図５】データの実際の更新頻度とコントローラ内の判定基準との間のミスマッチにより、更新頻度が低いデータ用のブロックに更新頻度が高いデータが書き込まれる例を示す図。
【図６】図５で書き込まれたデータの更新データが、更新頻度が低いデータ用のブロックに書き込まれることによって、更新頻度が低いデータ用のブロックにフラグメンテーションが起こる例を示す図。
【図７】更新頻度が高いデータ用のブロックと更新頻度が低いデータ用のブロックとの双方に対して実行されるガベージコレクション動作の例を示す図。
【図８】第１実施形態に係るメモリシステムが準拠するＵＦＳ規格で規定されたライトコマンド（ＷＲＩＴＥ（１０）コマンド）を示す図。
【図９】図８のライトコマンドに含まれるグループナンバーフィールドを説明するための図。
【図１０】特定の値を有するシステムデータタグがグループナンバーフィールドに設定されているか否かに基づいて第１実施形態のメモリシステムによって実行される書き込み処理の手順を示すフローチャート。
【図１１】グループナンバーフィールドの最上位ビットの値に基づいて第１実施形態のメモリシステムによって実行される書き込み処理の手順を示すフローチャート。
【図１２】グループナンバーフィールドの５ビットの値に基づいて第１実施形態のメモリシステムによって実行される書き込み処理の手順を示すフローチャート。
【図１３】第１実施形態のメモリシステムによって実行され、更新頻度が高く且つデータサイズが大きいデータを更新頻度が高いデータ用のブロックに書き込む動作を示す図。
【図１４】図１３で書き込まれたデータを更新する動作を示す図。
【図１５】第１実施形態のメモリシステムによって実行される、更新頻度が低いデータ用のブロック群のみに対するガベージコレクション動作を示す図。
【図１６】第１実施形態のメモリシステムによって管理される、アクティブブロックプールとフリーブロックプールと２つの書き込み先ブロックとの関係を示す図。
【図１７】第１実施形態のメモリシステムによって実行されるガベージコレクション動作の手順を示すフローチャート。
【図１８】第２実施形態のメモリシステムにおいてシステムデータタグとして使用されるリザーブ領域の例を示す図。
【図１９】リザーブ領域の値に基づいて、第２実施形態のメモリシステムによって実行される書き込み処理の手順を示すフローチャート。
【図２０】第３実施形態のメモリシステムが準拠するｅＭＭＣ規格で規定された拡張デバイス・スペシフィック・データ・レジスタ（Extended Device Specific Data register：Extended CSD）内のデータタグサポートフィールドを説明するための図。
【図２１】図２０のデータタグサポートフィールドの値を説明するための図。
【図２２】ｅＭＭＣ規格で規定されたセット・ブロック・カウント・コマンド（CMD23）内のタグ・リクエストを説明するための図。
【図２３】ホストと第３実施形態のメモリシステムとによって実行されるデータ書き込み処理の手順を示すシーケンス図。
【図２４】CMD23内のタグ・リクエストの値に基づいて、第３実施形態のメモリシステムによって実行される書き込み処理の手順を示すフローチャート。
【図２５】第４実施形態のメモリシステムとホストとの間を相互接続するインタフェース内に定義された通知信号線を示す図。
【図２６】通知信号線の値に基づいて、第４実施形態のメモリシステムによって実行される書き込み処理の手順を示すフローチャート。
【発明を実施するための形態】
【００１２】
以下、図面を参照して、実施形態を説明する。  
【００１３】
（第１実施形態）
まず、図１を参照して、第１実施形態に係るメモリシステムを含む情報処理システム１の構成を説明する。
【００１４】
このメモリシステムは、不揮発性メモリにデータを書き込み、不揮発性メモリからデータを読み出すように構成された半導体ストレージデバイスである。このメモリシステムは、例えば、ＮＡＮＤ型フラッシュメモリを備えたフラッシュストレージデバイス３として実現されている。
【００１５】
情報処理システム１は、ホスト（ホストデバイス）２と、フラッシュストレージデバイス３とを含む。ホスト２は、フラッシュストレージデバイス３をアクセスする情報処理装置である。ホスト２として機能する情報処理装置の例には、パーソナルコンピュータ、サーバコンピュータ、様々な電子機器（携帯電話、スマートフォン、デジタルカメラ、等）が含まれる。
【００１６】
フラッシュストレージデバイス３は、ホスト２として機能する情報処理装置のストレージとして使用され得る。フラッシュストレージデバイス３は、ユニバーサルフラッシュストレージ（ＵＦＳ）デバイスであってもよいし、エンベデッド・マルチメディア・カード（ｅＭＭＣ）デバイスであってもよいし、あるいはソリッドステートドライブ（ＳＳＤ）であってもよい。
【００１７】
ＵＦＳデバイスはＵＦＳ規格に準拠するストレージデバイスであり、例えば、組み込みストレージデバイス、メモリカードデバイスとして実現される。
【００１８】
ｅＭＭＣデバイスはｅＭＭＣ規格に準拠するストレージデバイスである。ｅＭＭＣデバイスも、例えば、組み込みストレージデバイスとして実現される。
【００１９】
フラッシュストレージデバイス３が組み込みストレージデバイスとして実現されているケースにおいては、フラッシュストレージデバイス３は、情報処理装置に内蔵される。フラッシュストレージデバイス３がカードデバイスとして実現されているケースにおいては、フラッシュストレージデバイス３は、情報処理装置のカードスロットに挿入される。フラッシュストレージデバイス３がＳＳＤとして実現されているケースにおいては、フラッシュストレージデバイス３は、情報処理装置に内蔵されてもよいし、情報処理装置にケーブルまたはネットワークを介して接続されてもよい。
【００２０】
ホスト２とフラッシュストレージデバイス３とを相互接続するためのインタフェースとしては、ＳＣＳＩ、Ｓｅｒｉａｌ  Ａｔｔａｃｈｅｄ  ＳＣＳＩ（ＳＡＳ）、ＡＴＡ、Ｓｅｒｉａｌ  ＡＴＡ（ＳＡＴＡ）、ＰＣＩ  Ｅｘｐｒｅｓｓ（ＰＣＩｅ）（登録商標）、Ｅｔｈｅｒｎｅｔ（登録商標）、Ｆｉｂｒｅ  ｃｈａｎｎｅｌ、ＮＶＭ  Ｅｘｐｒｅｓｓ（ＮＶＭｅ）（登録商標）、ユニバーサルシリアルバス（ＵＳＢ）、Ｍｏｂｉｌｅ  Ｉｎｄｕｓｔｒｙ  Ｐｒｏｃｅｓｓｏｒ  Ｉｎｔｅｒｆａｃｅ（ＭＩＰＩ）、ＵｎｉＰｒｏ等を使用し得る。
【００２１】
フラッシュストレージデバイス３は、コントローラ４および不揮発性メモリ（例えばＮＡＮＤ型フラッシュメモリ）５を備える。ＮＡＮＤ型フラッシュメモリ５は、複数のＮＡＮＤ型フラッシュメモリチップを含んでいてもよい。コントローラ４は、ＮＡＮＤ型フラッシュメモリ５に電気的に接続され、ＮＡＮＤ型フラッシュメモリ５を制御するように構成されたメモリコントローラとして動作する。このコントローラ４は、Ｓｙｓｔｅｍ−ｏｎ−ａ−ｃｈｉｐ（ＳｏＣ）のような回路によって実現されてもよい。
【００２２】
フラッシュストレージデバイス３は、ランダムアクセスメモリ、例えば、ＤＲＡＭ６も備えていてもよい。
【００２３】
ＮＡＮＤ型フラッシュメモリ５は、マトリクス状に配置された複数のメモリセルを含むメモリセルアレイを含む。ＮＡＮＤ型フラッシュメモリ５は、２次元構造のＮＡＮＤ型フラッシュメモリであってもよいし、３次元構造のＮＡＮＤ型フラッシュメモリであってもよい。
【００２４】
ＮＡＮＤ型フラッシュメモリ５のメモリセルアレイは、複数のブロックＢＬＫ０〜ＢＬＫｍ−１を含む。ブロックＢＬＫ０〜ＢＬＫ（ｍ−１）の各々は複数のページ（ここではページＰ０〜Ｐ（ｎ−１））を含む。ブロックＢＬＫ０〜ＢＬＫ（ｍ−１）は、消去単位として機能する。ページＰ０〜Ｐ（ｎ−１）の各々は、同一ワード線に接続された複数のメモリセルを含む。ページＰ０〜Ｐ（ｎ−１）は、データ書き込み動作およびデータ読み出し動作の単位である。
【００２５】
コントローラ４は、ＮＡＮＤ型フラッシュメモリ５のデータ管理およびブロック管理を実行するように構成されたフラッシュトランスレーション層（ＦＴＬ）として機能し得る。このＦＴＬによって実行されるデータ管理には、（１）論理アドレスそれぞれとＮＡＮＤ型フラッシュメモリ５の物理アドレスそれぞれとの間の対応関係を示すマッピング情報の管理、（２）ＮＡＮＤ型フラッシュメモリ５の制約（例えば、ページ単位のリード／ライト動作とブロック単位の消去動作）を隠蔽するための処理、等が含まれる。論理アドレスは、フラッシュストレージデバイス３の論理空間内の位置をアドレス指定するためにホスト２によって使用されるアドレスである。この論理アドレスとしては、ＬＢＡ（logical block address(addressing)）が使用され得る。
【００２６】
論理アドレスそれぞれと物理アドレスそれぞれとの間のマッピングの管理は、アドレス変換テーブル（論理物理アドレス変換テーブル）３２を用いて実行される。コントローラ４は、アドレス変換テーブル３２を使用して、論理アドレスそれぞれと物理アドレスそれぞれとの間のマッピングを所定の管理サイズ単位で管理する。ある論理アドレスに対応する物理アドレスは、この論理アドレスに対応するデータがライトされたＮＡＮＤ型フラッシュメモリ５内の最新の物理記憶位置を示す。アドレス変換テーブル３２は、フラッシュストレージデバイス３の電源オン時にＮＡＮＤ型フラッシュメモリ５からＤＲＡＭ６にロードされてもよい。
【００２７】
ＮＡＮＤ型フラッシュメモリ５においては、ページへのデータ書き込みは１消去サイクル当たり１回のみ可能である。つまり、データが既に書き込まれているブロック内の領域に新たなデータを直接上書きすることができない。このため、既に書き込まれているデータを更新する場合には、コントローラ４はそのブロック内または別ブロックの未書き込み領域に新たなデータを書き込み、そして以前のデータを無効データとして扱う。換言すれば、コントローラ４は、ある論理アドレスに対応する更新データを、この論理アドレスに対応する以前のデータが格納されている物理記憶位置ではなく、別の物理記憶位置に書き込む。そして、コントローラ４は、アドレス変換テーブル３２を更新してこの論理アドレスをこの別の物理記憶位置に関連付けると共に、以前のデータを無効化する。
【００２８】
ブロック管理には、バッドブロック（不良ブロック）の管理と、ウェアレベリングと、ガベージコレクション（ＧＣ）等が含まれる。ウェアレベリングは、ブロックそれぞれの書き換え回数（プログラム／イレーズサイクルの数）を均一化するための動作である。
【００２９】
ＧＣは、フリーブロックの個数を増やすための動作である。フリーブロックとは、有効データを含まないブロックを意味する。
【００３０】
ＧＣにおいては、コントローラ４は、有効データと無効データとが混在する幾つかのブロック内の有効データを別のブロック（例えばフリーブロック）にコピーする。ここで、有効データとは、ある論理アドレスに関連付けられているデータを意味する。例えば、アドレス変換テーブル３２から参照されているデータ（すなわち論理アドレスから最新のデータとして紐付けられているデータ）は有効データであり、後にホスト２からリードされる可能性がある。無効データとは、どの論理アドレスにも関連付けられていないデータを意味する。どの論理アドレスにも関連付けられていないデータは、もはやホスト２からリードされる可能性が無いデータである。そして、コントローラ４は、アドレス変換テーブル３２を更新して、コピーされた有効データの論理アドレスそれぞれをコピー先の物理アドレスにマッピングする。有効データが別のブロックにコピーされることによって無効データのみになったブロックはフリーブロックとして解放される。これによって、このブロックは、このブロックに対する消去動作が実行された後に再利用することが可能となる。
【００３１】
コントローラ４は、ホストインタフェース１１、ＣＰＵ１２、ＮＡＮＤインタフェース１３、ＤＲＡＭインタフェース１４等を含んでもよい。これらホストインタフェース１１、ＣＰＵ１２、ＮＡＮＤインタフェース１３、ＤＲＡＭインタフェース１４は、バス１０を介して相互接続されていてもよい。
【００３２】
ホストインタフェース１１は、ホスト２から様々なコマンド（例えば、ライトコマンド、リードコマンド、アンマップ（ＵＮＭＡＰ）（ＳＡＳ）／トリム（Ｔｒｉｍ）（ＳＡＴＡ）／アンマップ（Ｕｎｍａｐ）（ＵＦＳ）／イレーズ（Ｅｒａｓｅ）（ｅＭＭＣ）コマンド、他の様々なコマンド）を受信する。
【００３３】
ＣＰＵ１２は、ホストインタフェース１１、ＮＡＮＤインタフェース１３、およびＤＲＡＭインタフェース１４を制御するように構成されたプロセッサである。ＣＰＵ１２は、フラッシュストレージデバイス３の電源オンに応答して、ＮＡＮＤ型フラッシュメモリ５または図示しないＲＯＭに格納されている制御プログラム（ファームウェア）をＤＲＡＭ６上にロードし、このファームウェアを実行することによって様々な処理を行う。このＣＰＵ１２は、例えば、上述のＦＴＬの処理に加え、ホスト２からの様々なコマンドを処理するためのコマンド処理等を実行することができる。ＣＰＵ１２の動作は、ＣＰＵ１２によって実行される上述のファームウェアによって制御される。なお、ＦＴＬ処理およびコマンド処理の一部または全部は、コントローラ４内のハードウェアによって実行してもよい。また、フラッシュストレージデバイス３はＤＲＡＭ６を含まない構成であってもよい。この場合、コントローラ４に内蔵されたＳＲＡＭがＤＲＡＭ６の代わりに使用されてもよい。
【００３４】
ＣＰＵ１２は、上述のファームウェアを実行することによって、システムデータタグチェック部２１、データサイズチェック部２２、ライト制御部２３、ガベージコレクション（ＧＣ）制御部２４として機能することができる。なお、これらシステムデータタグチェック部２１、データサイズチェック部２２、ライト制御部２３、ＧＣ制御部２４も、コントローラ４内のハードウェアによって実現してもよい。
【００３５】
システムデータタグチェック部２１は、ホスト２から受信されるシステムデータタグの値をチェックする。システムデータタグは、書き込むべきライトデータがシステムデータ特性（ｓｙｓｔｅｍ  ｄａｔａ  ｃｈａｒａｃｔｅｒｉｓｔｉｃｓ）を有するか否かを示す情報である。ホスト２は、特定の値にセットされたシステムデータタグをフラッシュストレージデバイス３に送信することによって、ライトデータがシステムデータ特性を有するデータであることをフラッシュストレージデバイス３に通知することができる。
【００３６】
ホスト２によってフラッシュストレージデバイス３に書き込まれるデータの種類は、ユーザデータとシステムデータとに大別される。このシステムデータは、システムデータ特性を有するデータと称される。システムデータ（つまり、システムデータ特性を有するデータ）の例には、ログ、ファイルシステムメタデータ、オペレーティングシステムデータ、タイムスタンプ、設定パラメータ、等が含まれる。
【００３７】
コントローラ４は、システムデータタグによってシステムデータ特性を有するデータであると指定されたライトデータを更新頻度が高いデータとして取り扱う、という更新頻度判定機能を有する。ここで、あるデータの更新頻度とは、ホストによってこのデータが更新される頻度を意味する。例えば、ある論理アドレスのデータの更新頻度は、この論理アドレスを指定するライトコマンドがホスト２から発行される頻度によって表されてもよい。
【００３８】
コントローラ４は、システムデータタグによってシステムデータ特性を有するデータであると指定されたライトデータを更新頻度が高いデータであると判定し、更新頻度が高いデータを書き込むためのブロックにこのライトデータを書き込む。更新頻度が高いデータを書き込むためのブロックとは、更新頻度が高いデータを書き込むことを目的とした書き込み先ブロックを意味する。
【００３９】
また、コントローラ４は、システムデータタグによってシステムデータ特性を有するデータであると指定されなかったライトデータを更新頻度が低いデータであると判定し、更新頻度が低いデータを書き込むための別のブロックにこのライトデータを書き込む。更新頻度が低いデータを書き込むためのブロックとは、更新頻度が低いデータを書き込むことを目的とした書き込み先ブロックを意味する。
【００４０】
データサイズチェック部２２は、ホスト２から受信するライトデータのサイズが閾値以下であるか否かを判定する。ライトデータのサイズは、ホスト２から受信するライトコマンドによって指定される。
【００４１】
ライト制御部２３は、２種類の書き込み先ブロック（更新頻度が高いデータを書き込むためのブロックと、更新頻度が低いデータを書き込むためのブロック）を管理する。更新頻度が高いデータを書き込むためのブロックは、第１レベルの更新頻度を有する第１タイプのデータを書き込むためのブロック（更新頻度が高いデータ用のブロック）として利用される。更新頻度が低いデータを書き込むためのブロックは、第１タイプのデータよりも低い第２レベルの更新頻度を有するデータを書き込むためのブロック（更新頻度が低いデータ用のブロック）として利用される。
【００４２】
例えば、第１レベルの更新頻度を有する第１タイプのデータはある閾値よりも高い更新頻度をそれぞれ有するデータの集合であり、第２レベルの更新頻度を有する第２タイプのデータはこの閾値以下の更新頻度をそれぞれ有するデータの集合である。
【００４３】
ライト制御部２３は、ホスト２から受信するシステムデータタグによってシステムデータ特性を有するデータであると指定されたライトデータを更新頻度が高いデータ用のブロックに書き込み、ホスト２からのシステムデータタグによってシステムデータ特性を有するデータであると指定されなかったライトデータを更新頻度が低いデータ用のブロックに書き込む。
【００４４】
なお、システムデータタグによってシステムデータ特性を有するデータであると指定されなかったライトデータが、更新頻度が低いデータ用のブロックに常に無条件に書き込まれる必要はない。例えば、システムデータ特性を有するデータであると指定されなかったライトデータであっても、このライトデータが閾値以下のサイズを有する小さいデータである場合には、ライト制御部２３は、このライトデータを更新頻度が高いデータであると判定し、更新頻度が高いデータ用のブロックにこのライトデータを書き込んでもよい。
【００４５】
さらに、ライト制御部２３は、更新頻度が高いデータ用のブロックへのデータ書き込みを、メモリセル当たりにｍビットのデータを書き込む第１のプログラムモードによって実行し、更新頻度が低いデータ用のブロックへのデータ書き込みを、メモリセル当たりにｎビットのデータを書き込む第２のプログラムモードによって実行してもよい。ここで、ｍはｎよりも小さい整数である。例えば、ｍ（ｍ＜ｎ）は１以上の整数であってもよいし、ｎは２以上の整数であってもよい。
【００４６】
例えば、第１のプログラムモードはメモリセル当たりに１ビットのデータを書き込むシングルレベルセル（ＳＬＣ）モードであってもよく、第２プログラムモードはメモリセル当たりに２ビットのデータを書き込むマルチレベルセル（ＭＬＣ）モード、またはメモリセル当たりに３ビットのデータを書き込むトリプルレベルセル（ＴＬＣ）モード、またはメモリセル当たりに４ビットのデータを書き込むクワッドレベルセル（ＱＬＣ）モードであってもよい。
【００４７】
あるいは、第１のプログラムモードがＭＬＣモードで、第２のプログラムモードがＴＬＣモードまたはＱＬＣモードであってもよい。
【００４８】
更新頻度が高いデータ用のブロックにおいては、同じ論理アドレスに対応する更新データが頻繁に書き込まれる。このため、更新頻度が高いデータ用のブロックは、更新頻度が低いデータ用のブロックに比べ、高い頻度で書き込み／消去の動作が行われる可能性がある。この場合、更新頻度が高いデータ用のブロックそれぞれのプログラム／イレーズサイクルの数は増加し易くなる。メモリセル当たりに書き込まれるビットの数が増えるほど、許容されるプログラム／イレーズサイクルの数は減少する。
【００４９】
したがって、ライト制御部２３は、メモリセル当たりに書き込まれるビットの数が少ないプログラムモードを更新頻度が高いデータ用のブロックに対して適用する。
【００５０】
つまり、ライト制御部２３は、ライトデータがシステムデータ特性を有するデータであるか否かを示す通知（システムデータタグ）をホスト２から受信し、ライトデータがシステムデータ特性を有するデータであるならば、更新頻度が高いデータ用のブロックにライトデータを第１のプログラムモード（例えばＳＬＣモード）で書き込み、ライトデータがシステムデータ特性を有するデータでないならば、更新頻度が低いデータ用のブロックにライトデータを第２のプログラムモード（例えばＴＬＣモード）で書き込む。
【００５１】
これにより、更新頻度が高いデータ用の各ブロックに書き込み可能なデータの総量は、更新頻度が低いデータ用の各ブロックに書き込み可能なデータの総量よりも減少するものの、更新頻度が高いデータ用の各ブロックの許容プログラム／イレーズサイクルの数を増やすことができ、これらブロックに書き込まれたデータの信頼性を改善することができる。
【００５２】
ＧＣ制御部２４は、更新頻度が高いデータ用のブロックとして使用され且つ有効データを保持しているブロック群と、更新頻度が低いデータ用のブロックとして使用され且つ有効データを保持しているブロック群とから、有効データ量が少ない一つ以上のブロックをＧＣが施されるべきＧＣソースブロックとして選択する。そして、ＧＣ制御部２４は、ＧＣソースブロックとして選択された上述の一つ以上のブロック内の有効データを、一つ以上のＧＣディスティネーションブロックにコピーする。
【００５３】
ＮＡＮＤインタフェース１３は、ＮＡＮＤ型フラッシュメモリ５を制御するように構成されたＮＡＮＤ制御回路として機能する。ＮＡＮＤインタフェース１３とＮＡＮＤ型フラッシュメモリ５との間を相互接続するインタフェースとしては、Ｔｏｇｇｌｅ、またはＯｐｅｎ  ＮＡＮＤ  Ｆｌａｓｈ  Ｉｎｔｅｒｆａｃｅ（ＯＮＦＩ）が使用されてもよい。ＮＡＮＤインタフェース１３は、複数のチャンネルを介して、ＮＡＮＤ型フラッシュメモリ５内の複数のＮＡＮＤ型フラッシュメモリチップにそれぞれ接続されていてもよい。
【００５４】
ＤＲＡＭインタフェース１４は、ＤＲＡＭ６を制御するように構成されたＤＲＡＭ制御回路である。ＤＲＡＭ６の記憶領域の一部は、ライトバッファ（ＷＢ）３１として機能する。また、ＤＲＡＭ６の記憶領域の他の部分は、アドレス変換テーブル３２、システム管理情報３３等を格納するために利用される。システム管理情報３３は、例えば、ＮＡＮＤ型フラッシュメモリ５内のブロック毎に有効データ量を示す情報、等を含んでいてもよい。フラッシュストレージデバイス３がＤＲＡＭ６を有さない構成である場合には、コントローラ４のＳＲＡＭ内の記憶領域の一部がライトバッファ（ＷＢ）３１として機能してもよく、またＳＲＡＭ内の記憶領域の他の部分がアドレス変換テーブル３２、システム管理情報３３等を格納するために利用されてもよい。
【００５５】
次に、ホスト２の構成について説明する。
【００５６】
ホスト２は、ホストソフトウェアを実行するプロセッサ（ＣＰＵ）を含む。このホストソフトウェアには、アプリケーションソフトウェアレイヤ４１、オペレーティングシステム（ＯＳ）４２、ファイルシステム４３等が含まれていてもよい。
【００５７】
一般に知られているように、オペレーティングシステム（ＯＳ）４２は、ホスト２全体を管理し、ホスト２内のハードウェアを制御し、アプリケーションがハードウェアおよびフラッシュストレージデバイス３を使用することを可能にするための制御を実行するように構成されたソフトウェアである。
【００５８】
ファイルシステム４３は、ファイルの操作（作成、保存、更新、削除等）のための制御を行うために使用される。ファイルシステム４３は、システムデータ管理部４３Ａを含む。
【００５９】
システムデータ管理部４３Ａは、システムデータタグを特定の値に設定することによって、ライトデータがシステムデータ特性を有することをフラッシュストレージデバイス３に通知する。
【００６０】
様々なアプリケーションソフトウェアがアプリケーションソフトウェアレイヤ４１上で走ることができる。アプリケーションソフトウェアレイヤ４１がデータのリードまたはライトのようなリクエストをフラッシュストレージデバイス３に送出することが必要な時、アプリケーションソフトウェアレイヤ４１は、ＯＳ４２にそのリクエストを送出する。ＯＳ４２はそのリクエストをファイルシステム４３に送出する。ファイルシステム４３は、そのリクエストを、コマンド（リードコマンド、ライトコマンド等）にトランスレートする。ファイルシステム４３は、コマンドを、フラッシュストレージデバイス３に送出する。
【００６１】
フラッシュストレージデバイス３に書き込むべきライトデータがシステムデータであるならば、ファイルシステム４３のシステムデータ管理部４３Ａは、ライトデータがシステムデータ特性を有するデータであることを示す特定の値のシステムデータタグをフラッシュストレージデバイス３に送出する。
【００６２】
フラッシュストレージデバイス３に送出されるシステムデータタグは、ホスト２からフラッシュストレージデバイス３に送出されるライトコマンド内に含まれていてもよいし、ライトコマンドの直前にホスト２からフラッシュストレージデバイス３に送出される特定のコマンド内に含まれていてもよい。
【００６３】
フラッシュストレージデバイス３からのレスポンスが受信された際、ファイルシステム４３は、そのレスポンスをＯＳ４２に送出する。ＯＳ４２は、そのレスポンスをアプリケーションソフトウェアレイヤ４１に送出する。
【００６４】
ホスト２から受信されるライトデータの更新頻度は、データ毎に個々に異なっている。コントローラ４は、このコントローラ４内部の独自の判定基準のみを使用して、個々のライトデータの更新頻度を判定することもできる。
【００６５】
しかし、もしコントローラ４が独自の判定基準のみを使用してライトデータの更新頻度を判定したならば、ライトデータの実際の更新頻度とコントローラ４内の判定基準との間のミスマッチが生じる場合がある。この場合、例えば、更新頻度が高いデータが、コントローラ４によって更新頻度が低いデータであると判定されてしまい、更新頻度が低いデータ用のブロックに書き込まれてしまう場合もある。
【００６６】
以下、図２〜図７を参照して、コントローラ４が独自の判定基準のみを使用して個々のデータの更新頻度を判定する場合の処理の例について説明する。
【００６７】
以下では、ホスト２から受信されるライトデータのサイズが閾値以下であるか否かに基づいて、このライトデータが、更新頻度が高いデータであるか否かを判定する場合を例示する。
【００６８】
図２のフローチャートは、ホスト２から受信されるライトコマンドによって指定されるデータサイズに基づいて、ホスト２から受信されるライトデータが書き込まれるべき書き込み先ブロックを決定する処理の手順を示す。以下では、閾値が６４Ｋバイト（６４ＫＢ）である場合を例示して説明する。
【００６９】
コントローラ４は、ライトコマンドによって指定されるデータサイズに基づき、ホスト２から受信されたライトデータのサイズが６４ＫＢ以下であるか否かを判定する（ステップＳ１１）。
【００７０】
ライトデータのサイズが６４ＫＢ以下であるならば（ステップＳ１１のＹＥＳ）、コントローラ４は、このライトデータは更新頻度が高いデータであると判定し、更新頻度が高いデータ用のブロック（書き込み先ブロック）にこのライトデータを書き込む（ステップＳ１２）。
【００７１】
一方、ライトデータのサイズが６４ＫＢを超えているならば（ステップＳ１１のＮＯ）、コントローラ４は、このライトデータは更新頻度が低いデータであると判定し、更新頻度が低いデータ用の別のブロック（別の書き込み先ブロック）にこのライトデータを書き込む（ステップＳ１２）。
【００７２】
図３は、ライトデータのサイズに基づいて、更新頻度が高いデータ用のブロックまたは更新頻度が低いデータ用のブロックにライトデータを選択的に書き込む動作の例を示す。書き込み先ブロックＢＬＫ１、ＢＬＫ１１の各々における１マスは、３２Ｋバイト（３２ＫＢ）の記憶領域を表している。
【００７３】
ホスト２は、書き込むべきライトデータのサイズを示す情報を含むライトコマンドをコントローラ４に送出する。コントローラ４は、ホスト２から受信するライトコマンドによって指定されるライトデータのサイズに基づいて、このライトデータの更新頻度を判定する。例えば、コントローラ４は、６４ＫＢ以下のサイズを有するライトデータを更新頻度が高いデータであると判定し、６４ＫＢを超えるサイズを有するライトデータを更新頻度が低いデータであると判定する。
【００７４】
そして、コントローラ４は、更新頻度が高いデータであると判定されたライトデータを、更新頻度が高いデータ用のブロック（ここでは、書き込み先ブロックＢＬＫ１）に書き込み、更新頻度が低いデータであると判定されたライトデータを、更新頻度が低いデータ用のブロック（ここでは、書き込み先ブロックＢＬＫ１１）に書き込む。
【００７５】
ＮＡＮＤ型フラッシュメモリ５においては、データが既に書き込まれているブロック内の領域に新たなデータを直接上書きすることができない。そのため、上述したように、コントローラ４は、既に書き込まれているデータを更新する場合には、そのブロック内または別ブロックの未書き込み領域に新たなデータを書き込み、そして以前のデータを無効データとして扱う、という動作を実行する。
【００７６】
したがって、更新頻度が高いデータ用のブロックにおいては、データ更新によって無効データの量が増える。
【００７７】
図４には、更新頻度の高いデータ用のブロックにフラグメンテーションが起こる例を示す。上述したように、書き込み先ブロックＢＬＫ１、ＢＬＫ１１の各々における１マスは、３２ＫＢの記憶領域を表している。
【００７８】
図４では、コントローラ４が、３２ＫＢのデータサイズを有するライトデータの書き込みを要求するライトコマンドをホスト２から受信した場合が想定されている。コントローラ４は、この３２ＫＢのデータサイズを有するライトデータを更新頻度が高いデータであると判定する。そして、コントローラ４、更新頻度が高いデータ用のブロック（ここでは、書き込み先ブロックＢＬＫ１）にこの３２ＫＢのデータサイズを有するライトデータを書き込む。このライトデータが、既に書き込まれているデータの更新データである場合、以前のデータ、つまりこのライトデータの論理アドレスと同じ論理アドレスを有する３２ＫＢ分のデータは、無効データとなる。更新頻度の高いデータについては、そのデータの書き換えが頻繁に発生する。したがって、書き込み先ブロックＢＬＫ１においては、データ更新によって無効データの量が増え、フラグメンテーションが起こりやすくなる。
【００７９】
一方、更新頻度が低いデータ用のブロック（ここでは、書き込み先ブロックＢＬＫ１１）に関しては、更新頻度が低いデータだけが書き込み先ブロックＢＬＫ１１に書き込まれる限り、ブロックＢＬＫ１に比べて無効化されるデータの量は少ないので、ブロックＢＬＫ１に比べてフラグメンテーションは起こりにくい。
【００８０】
しかし、まれに、データサイズが大きいにも関わらず、更新頻度が高いデータがホスト２から受信され、更新頻度が低いデータ用のブロックに書き込まれる場合がある。
【００８１】
図５は、更新頻度が低いデータ用のブロックに更新頻度が高いデータが書き込まれる例を示す。
【００８２】
図５では、１２８ＫＢのサイズを有し且つ更新頻度が高いライトデータがホスト２から受信された場合が想定されている。
【００８３】
この場合、コントローラ４は、このライトデータを更新頻度が低いデータであると判定し、更新頻度が低いデータ用のブロック（ここでは、書き込み先ブロックＢＬＫ１１）に書き込む。
【００８４】
図６は、図５で書き込まれた１２８ＫＢのデータサイズを有するデータの更新データが、更新頻度が低いデータ用のブロック（ここでは、書き込み先ブロックＢＬＫ１１）に書き込まれることによって、フラグメンテーションが起こる例を示す。
【００８５】
図６では、コントローラが、１２８ＫＢのデータサイズを有するライトデータの書き込みを要求するライトコマンドをホスト２から受信した場合が想定されている。コントローラ４は、この１２８ＫＢのデータサイズを有するライトデータを更新頻度が低いデータであると判定する。そして、コントローラ４、更新頻度が低いデータ用のブロック（ここでは、書き込み先ブロックＢＬＫ１１）にこの１２８ＫＢのデータサイズを有するライトデータを書き込む。このライトデータは図５で書き込まれた１２８ＫＢのデータサイズを有するデータの更新データであるので、つまりこのライトデータは図５で書き込まれたデータと同じ論理アドレスを有しているので、このライトデータが書き込み先ブロックＢＬＫ１１に書き込まれることによって、図５で書き込まれた１２８ＫＢのデータサイズを有するデータは無効データとなる。
【００８６】
このように、更新頻度が低いデータ用のブロックに更新頻度が高いデータが書き込まれると、更新頻度が低いデータ用のブロックに既に書き込まれている以前のデータが無効データとなり、更新頻度が低いデータ用のブロックにフラグメンテーションが起こる。このため、更新頻度が低いデータ用のブロックに更新頻度が高いデータが書き込まれると、更新頻度が低いデータ用のブロックに書き込むことが可能な有効データの量が減少する結果となる。加えて、ブロック内の有効データを新しいブロックにコピーする動作（例えばＧＣ動作）が実行される頻度も増加されるので、フラッシュストレージデバイス３の性能低下、ライトアンプリフィケーションファクタの増大が引き起こされる。ライトアンプリフィケーションファクタ（ＷＡＦ）は、以下のように定義される。
【００８７】
ＷＡＦ=「フラッシュストレージデバイスにライトされたデータの総量」 ／ 「ホストからフラッシュストレージデバイスにライトされたデータの総量」
「フラッシュストレージデバイスにライトされたデータの総量」は、ホストからフラッシュストレージデバイスにライトされたデータの総量とＧＣ等によって内部的にフラッシュストレージデバイスにライトされたデータの総量との和に相当する。
【００８８】
ＷＡＦの増加は、ＮＡＮＤ型フラッシュメモリ５内のブロックそれぞれの書き換え回数（プログラム／イレーズサイクルの数）の増加を引き起こし、フラッシュストレージデバイス３の寿命低下の要因となる。
【００８９】
一般に、システムデータのサイズは比較的小さいが、最近では、例えば、多様な情報を含む大きなサイズを有するログ、または多様な情報を含む大きなサイズを有するメタデータといった、大きなサイズのシステムデータが使用されるケースもある。また、システムデータの多くは頻繁に更新されるケースが多い。
【００９０】
したがって、このような大きなサイズを有するシステムデータは、データサイズが大きく且つ更新頻度が高いデータの一種類である。
【００９１】
図７は、更新頻度が高いデータ用のブロックと更新頻度が低いデータ用のブロックとの双方に対して実行されるＧＣ動作の例を示す。
【００９２】
図７の左部は、更新頻度が高いデータ用の幾つかのブロックに対して施されるＧＣ動作を示している。
【００９３】
ここでは、更新頻度が高いデータ用のブロックとして使用されていたブロックＢＬＫ１、ＢＬＫ２がＧＣ動作が施されるべきブロック（ＧＣソースブロック）として選択され、これらブロックＢＬＫ１、ＢＬＫ２内の有効データが、ＧＣディスティネーションブロックとして選択された新しいブロック（ここでは、ブロックＢＬＫ１０１）にコピーされる場合が例示されている。
【００９４】
図７の右部は、更新頻度が低いデータ用の幾つかのブロックに対して施されるＧＣ動作を示している。
【００９５】
更新頻度が低いデータ用のブロックそれぞれに更新頻度が高いデータが書き込まれると、これらブロック内の有効データ量が減少してフラグメンテーションが起こる。このため、これらブロックもＧＣ動作が施されるべきＧＣソースブロックとして選択される可能性がある。
【００９６】
図７の右部では、更新頻度が低いデータ用のブロックＢＬＫ１１および更新頻度が低いデータ用のブロックＢＬＫ１２がＧＣソースブロックとして選択され、これらブロックＢＬＫ１１、ＢＬＫ１２内の有効データが、ＧＣディスティネーションブロックとして選択された新しいブロック（ここでは、ブロックＢＬＫ２０１、ブロックＢＬＫ２０２）にコピーされる場合が例示されている。
【００９７】
図２〜図７に関する説明から理解されるように、もしコントローラ４が独自の判定基準のみを使用してライトデータの更新頻度を判定したならば、データサイズが大きいにも関わらず更新頻度が高いデータが、更新頻度が低いデータ用のブロックに書き込まれてしまう。この結果、更新頻度が低いデータ用のブロックにフラグメンテーションが起き、更新頻度が低いデータ用のブロックに書き込むことが可能な有効データの量が減少する。
【００９８】
また、更新頻度が高いデータは、更新頻度が低いデータ用のブロックに本来書き込まれるべきでないデータである。したがって、更新頻度が高いデータが更新頻度が低いデータ用のブロックに書き込まれたならば、このデータが更新頻度が高いデータ用のブロックに書き込まれた場合に比し、更新頻度が低いデータ用のブロックへのデータ書き込み量が増加される結果となる。これにより、更新頻度が低いデータ用の現在の書き込み先ブロックがより速く消費されてしまうことになる。
【００９９】
更新頻度が低いデータ用のブロックに書き込み可能なデータ量の減少、更新頻度が低いデータ用のブロックへのデータ書き込み量の増加はＧＣやウェアレベリングが実行される頻度を増加させ、フラッシュストレージデバイス３の性能低下を引き起こす要因となる。
【０１００】
第１実施形態では、コントローラ４は、ホスト２からのシステムデータタグによってシステムデータ特性を有するデータであると指定されたライトデータを、そのデータサイズとは無関係に、更新頻度が高いデータであると判定する。したがって、たとえ大きなデータサイズを有し且つ更新頻度が高いライトデータ（例えば大きなサイズを有するシステムデータ等）の書き込みがホスト２によって要求された場合であっても、コントローラ４は、このライトデータを更新頻度が高いデータ用のブロックに書き込むことができる。このため、更新頻度が低いデータ用のブロックに本来書き込まれるべきでないデータ（例えば大きなサイズを有するシステムデータ等）が更新頻度が低いデータ用のブロックに書き込まれることを防止することができる。よって、更新頻度が低いデータ用のブロックに書き込み可能なデータ量の減少、更新頻度が低いデータ用のブロックへのデータ書き込み量の増加を防ぐことができので、ストレージ容量の利用効率を改善でき、またフラッシュストレージデバイス３の性能低下を防ぐことができる。
【０１０１】
次に、システムデータタグを実装するための構成について説明する。
【０１０２】
第１実施形態のフラッシュストレージデバイス３は、ユニバーサルフラッシュストレージ（ＵＦＳ）規格に準拠するストレージデバイスとして実現され得る。この場合、上述のシステムデータタグは、ＵＦＳ規格で規定されたライトコマンドに含まれるグループナンバーフィールドによって表される。グループナンバーフィールドは、「グループナンバー」または「グループナンバー領域」と称されることもある。コントローラ４は、このグループナンバーフィールドの値をチェックすることによって、ホスト２からのライトデータが、システムデータ特性を有するデータであるか否か、つまり更新頻度が高いデータであるか否か、を判定する。
【０１０３】
図８は、第１実施形態のフラッシュストレージデバイス３が準拠するＵＦＳ２．１規格で規定されたライトコマンド（例えばＷＲＩＴＥ（１０）コマンド）を示す。
【０１０４】
フラッシュストレージデバイス３はＵＦＳ２．１規格に準拠したストレージデバイスと機能し得、ＵＦＳ２．１規格で規定された様々なコマンドを処理することができる。
【０１０５】
図８に示されるＷＲＩＴＥ（１０）コマンドは、フラッシュストレージデバイス３にデータの書き込みを要求するコマンドである。ＷＲＩＴＥ（１０）コマンドは、オペレーションコード（OPERATION CODE）、論理ブロックアドレス（LOGICAL BLOCK ADDRESS）、転送長（TRANSFER LENGTH）に加え、グループナンバー（GROUP NUMBER）フィールドを含む。
【０１０６】
グループナンバー（GROUP NUMBER）フィールドは、書き込むべきライトデータがシステムデータ特性を有する、またはコンテクストＩＤに関連付けられていることをターゲットデバイスに通知するために使用される。
【０１０７】
なお、論理ブロックアドレス（LOGICAL BLOCK ADDRESS）はライトデータが書き込まれるべき最初の論理アドレスを示し、転送長（TRANSFER LENGTH）はライトデータのサイズ（長さ）を示す。
【０１０８】
図９は、図８のライトコマンドに含まれるグループナンバーフィールドに設定されるシステムデータタグを示す。
【０１０９】
グループナンバーフィールドのサイズは５ビットである。グループナンバーフィールドの値０００００ｂはデフォルトの値であり、コンテクストＩＤまたはシステムデータ特性がライトデータに関連付けられていないことを示す。グループナンバーフィールドの値１００００ｂは、ライトデータがシステムデータ特性を有することを示すシステムデータタグとして使用される。グループナンバーフィールドの値１０００１ｂから１１１１１ｂはリザーブ値（定義されていない値）である。
【０１１０】
図１０のフローチャートは、特定の値を有するシステムデータタグがグループナンバーフィールドに設定されているか否かに基づいてフラッシュストレージデバイス３によって実行される書き込み処理の手順を示す。
【０１１１】
この特定の値を有するシステムデータタグは、ライトデータがシステムデータ特性を有するデータであることを示す。
【０１１２】
フラッシュストレージデバイス３のコントローラ４がホスト２からライトコマンドを受信した場合、コントローラ４は、このライトコマンドに含まれるシステムデータタグの値をチェックする。ＵＦＳ規格においては、システムデータタグは、ＵＦＳ規格で規定されたライトコマンドに含まれるグループナンバーフィールドによって表される。したがって、コントローラ４は、受信されたライトコマンド内のグループナンバーフィールドを参照し、特定の値（例えば１００００ｂ）を有するシステムデータタグがグループナンバーフィールドに設定されているか否かを判定する（ステップＳ２１）。
【０１１３】
特定の値（例えば１００００ｂ）を有するシステムデータタグがグループナンバーフィールドに設定されているならば、つまりシステムデータタグによってライトデータがシステムデータ特性を有するデータであると指定されたならば（ステップＳ２１のＹＥＳ）、コントローラ４は、このライトコマンドに対応するライトデータが更新頻度が高いデータであると判定する。そして、コントローラ４は、更新頻度が高いデータ用のブロックにライトデータを書き込む（ステップＳ２２）。ステップＳ２２では、コントローラ４は、更新頻度が高いデータ用のブロックにライトデータをＳＬＣモードで書き込んでもよい。
【０１１４】
特定の値（例えば１００００ｂ）を有するシステムデータタグがグループナンバーフィールドに設定されていないならば、つまりシステムデータタグによってライトデータがシステムデータ特性を有するデータであると指定されなかったならば（ステップＳ２１のＮＯ）、コントローラ４は、ライトコマンドによって指定されるデータサイズに基づいて、ライトデータのサイズが閾値（ここでは、６４ＫＢ）以下であるか否かを判定する（ステップＳ２３）。
【０１１５】
ライトデータのサイズが６４ＫＢ以下であるならば（ステップＳ２３のＹＥＳ）、コントローラ４は、このライトデータは更新頻度が高いデータであると判定し、更新頻度が高いデータ用のブロックにこのライトデータを書き込む（ステップＳ２２）。上述したように、ステップＳ２２では、コントローラ４は、更新頻度が高いデータ用のブロックにライトデータをＳＬＣモードで書き込んでもよい。
【０１１６】
一方、ライトデータのサイズが６４ＫＢを超えているならば（ステップＳ２３のＮＯ）、コントローラ４は、このライトデータは更新頻度が低いデータであると判定し、更新頻度が低いデータ用のブロックにこのライトデータを書き込む（ステップＳ２４）。ステップＳ２４では、コントローラ４は、更新頻度が低いデータ用のブロックにライトデータをＴＬＣモードで書き込んでもよい。
【０１１７】
このように、コントローラ４は、ホスト２からのシステムデータタグによってシステムデータ特性を有するデータであると指定されたライトデータを更新頻度が高いデータとして扱い、更新頻度が高いデータ用のブロックに書き込むことで、更新頻度が低いデータ用のブロックに書き込み可能なデータ量の減少、更新頻度が低いデータ用のブロックへのデータ書き込み量の増加を防ぐことができる。 
【０１１８】
なお、図１０のフローチャートでは、システムデータタグによってライトデータがシステムデータ特性を有するデータであると指定されなかったならば、ライトコマンドによって指定されるデータサイズに基づいて、このライトデータを、更新頻度が低いデータ用のブロックまたは更新頻度が低いデータ用のブロックに振り分ける処理を実行する場合について説明したが、このデータサイズに基づく振り分ける処理は必ずしも実行しなくてもよい。この場合、コントローラ４は、システムデータタグによってシステムデータ特性を有するデータであると指定されなかったライトデータを、更新頻度が低いデータ用のブロックに書き込めばよい。
【０１１９】
図１１のフローチャートは、グループナンバーフィールドの最上位ビットの値に基づいてフラッシュストレージデバイス３によって実行される書き込み処理の手順を示す。
【０１２０】
上述したように、グループナンバーフィールドのデフォルト値は０００００ｂであり、グループナンバーフィールドの値１００００ｂがシステムデータタグを示し、且つグループナンバーフィールドのリザーブ値１０００１ｂ〜１１１１１ｂは基本的には使用されないので、コントローラ４は、グループナンバーフィールドの最上位ビットのみをチェックすることによって、書き込むべきライトデータがシステムデータ特性を有するか否かを判定してもよい。
【０１２１】
すなわち、コントローラ４がホスト２からライトコマンドを受信した場合、コントローラ４は、このライトコマンドに含まれるシステムデータタグの値をチェックする。この場合、コントローラ４は、受信されたライトコマンド内のグループナンバーフィールドの最上位ビットが１であるか否かを判定する（ステップＳ２１’）。
【０１２２】
最上位ビットが１であるならば、つまりシステムデータタグによってライトデータがシステムデータ特性を有するデータであると指定されたとみなすことができるならば（ステップＳ２１’のＹＥＳ）、コントローラ４は、このライトコマンドに対応するライトデータが更新頻度が高いデータであると判定し、図１０で説明したステップＳ２２の処理を実行する。
【０１２３】
最上位ビットが１でないならば、つまりシステムデータタグによってライトデータがシステムデータ特性を有するデータであると指定されたとみなすことができないならば（ステップＳ２１’のＮＯ）、コントローラ４は、図１０で説明したステップＳ２３の処理を実行し、そしてライトデータのサイズに応じて図１０で説明したステップＳ２２またはステップＳ２４の処理を実行する。
【０１２４】
なお、図１１のフローチャートでは、ライトデータがシステムデータ特性を有するデータであると指定されたとみなすことができなかったならば、ライトコマンドによって指定されるデータサイズに基づいて、このライトデータを、更新頻度が低いデータ用のブロックまたは更新頻度が低いデータ用のブロックに振り分ける処理を実行する場合について説明したが、このデータサイズに基づく振り分ける処理は必ずしも実行しなくてもよい。この場合、コントローラ４は、システムデータ特性を有するデータであると指定されたとみなすことができなかったライトデータを、更新頻度が低いデータ用のブロックに書き込めばよい。
【０１２５】
図１２のフローチャートは、グループナンバーフィールドの５ビットの値に基づいてフラッシュストレージデバイス３によって実行される書き込み処理の手順を示す。
【０１２６】
コントローラ４がホスト２からライトコマンドを受信した場合、コントローラ４は、このライトコマンドに含まれるシステムデータタグの値をチェックする。この場合、コントローラ４は、受信されたライトコマンド内のグループナンバーフィールドの５ビットの値が１００００ｂであるか否かを判定する（ステップＳ２１”）。
【０１２７】
グループナンバーフィールドの５ビットの値が１００００ｂであるならば、つまりシステムデータタグによってライトデータがシステムデータ特性を有するデータであると指定されたとみなすことができるならば（ステップＳ２１”のＹＥＳ）、コントローラ４は、このライトコマンドに対応するライトデータが更新頻度が高いデータであると判定し、図１０で説明したステップＳ２２の処理を実行する。
【０１２８】
グループナンバーフィールドの５ビットの値が１００００ｂでないならば、つまりシステムデータタグによってライトデータがシステムデータ特性を有するデータであると指定されたとみなすことができないならば（ステップＳ２１”のＮＯ）、コントローラ４は、図１０で説明したステップＳ２３の処理を実行し、そしてライトデータのサイズに応じて図１０で説明したステップＳ２２またはステップＳ２４の処理を実行する。
【０１２９】
なお、図１２のフローチャートでは、ライトデータがシステムデータ特性を有するデータであると指定されたとみなすことができなかったならば、ライトコマンドによって指定されるデータサイズに基づいて、このライトデータを、更新頻度が低いデータ用のブロックまたは更新頻度が低いデータ用のブロックに振り分ける処理を実行する場合について説明したが、このデータサイズに基づく振り分ける処理は必ずしも実行しなくてもよい。この場合、コントローラ４は、システムデータ特性を有するデータであると指定されたとみなすことができなかったライトデータを、更新頻度が低いデータ用のブロックに書き込めばよい。
【０１３０】
図１３は、更新頻度が高く且つデータサイズが大きいデータを更新頻度が高いデータ用のブロックに書き込む動作を示す。
【０１３１】
ここでは、グループナンバーフィールドの最上位ビットに基いてデータの更新頻度を判定する場合を例示する。
【０１３２】
１２８ＫＢのサイズを有するシステムデータをホスト２がフラッシュストレージデバイス３に書き込むことを望む場合、ホスト２は、このデータがシステムデータ特性を有することをフラッシュストレージデバイス３に通知するために、グループナンバーフィールドの最上位ビットを“１”にする。コントローラ４は、グループナンバーフィールドの最上位ビットが“１”である場合、ホスト２からのライトデータは更新頻度の高いデータであると判定する。そして、コントローラ４は、更新頻度が高いデータ用のブロック（ここでは、書き込み先ブロックＢＬＫ１）にこのライトデータを書き込む。
【０１３３】
図１４は、図１３で書き込まれたデータを更新する動作を示す。
【０１３４】
ホスト２が、図１３で書き込まれたデータの更新データ（例えば、１２８ＫＢのサイズを有するシステムデータ）をフラッシュストレージデバイス３に書き込むことを望む場合、ホスト２は、グループナンバーフィールドの最上位ビットを“１”にする。コントローラ４は、グループナンバーフィールドの最上位ビットが“１”である場合、ホスト２からのライトデータ（更新データ）は更新頻度の高いデータであると判定する。そして、コントローラ４は、更新頻度が高いデータ用のブロック（ここでは、書き込み先ブロックＢＬＫ１）にこのライトデータを書き込む。
【０１３５】
このライトデータは図１３で書き込まれたデータの更新データであるので、図１３で書き込まれたデータは無効データとなる。
【０１３６】
図１５は、更新頻度が高いデータ用のブロック群にフラグメンテーションが起こり且つ更新頻度が低いデータ用のブロックにフラグメンテーションが起こらなかったケースに対応するＧＣ動作を示す。
【０１３７】
第１実施形態では、ライトデータのサイズに関係なく、ホスト２によってシステムデータ特性を有することが指定されたライトデータは、更新頻度が高いデータ用のブロックに書き込まれる。したがって、たとえライトデータが大きなサイズを有する場合であっても、このライトデータがシステムデータ特性を有するならば、このライトデータは、更新頻度が高いデータ用のブロックに書き込まれる。したがって、更新頻度が低いデータ用のブロック（ここでは、ブロックＢＬＫ１１）においては、データ更新に伴うデータの無効化によるフラグメンテーションが起こりにくくなる。よって、更新頻度が高いデータ用のブロック群（ここでは、ブロックＢＬＫ１、ＢＬＫ２）はＧＣの対象となるものの、更新頻度が低いデータ用のブロック（ここでは、ブロックＢＬＫ１１）はＧＣの対象となりにくくなる。
【０１３８】
図１６は、アクティブブロックプールとフリーブロックプールと２つの書き込み先ブロックとの関係を示す。
【０１３９】
ブロックの状態は、有効データを格納しているアクティブブロックと、有効データを格納していないフリーブロックとに大別される。アクティブブロックである各ブロックは、アクティブブロックプール７１と称されるリストによって管理される。一方、フリーブロックである各ブロックは、フリーブロックプール７２と称されるリストによって管理される。
【０１４０】
コントローラ４は、フリーブロックプール７２から選択された一つのフリーブロックを更新頻度が高いデータ用の書き込み先ブロックＢＬＫ１として割り当て、フリーブロックプール７２から選択された別の一つのフリーブロックを更新頻度が低いデータ用の書き込み先ブロックＢＬＫ１１として割り当てる。この場合、コントローラ４は、まず、選択された各フリーブロックに対する消去動作を実行し、選択された各フリーブロックを、データの書き込みが可能な消去状態にする。
【０１４１】
コントローラ４は、更新頻度が高いデータ用の書き込み先ブロックＢＬＫ１にデータを例えばＳＬＣモードで書き込み、更新頻度が低いデータ用の書き込み先ブロックＢＬＫ１１にデータを例えばＴＬＣモードで書き込む。
【０１４２】
更新頻度が高いデータ用の現在の書き込み先ブロックＢＬＫ１の全体がホスト２からのライトデータで満たされて書き込み先ブロックＢＬＫ１に未書き込み領域がなくなると、コントローラ４は、この書き込み先ブロックＢＬＫ１をアクティブブロックプール７１によって管理する。そして、コントローラ４は、フリーブロックプール７２から新たな一つのフリーブロックを選択し、この選択したフリーブロックを更新頻度が高いデータ用の新たな書き込み先ブロックとして割り当てる。
【０１４３】
同様に、更新頻度が低いデータ用の現在の書き込み先ブロックＢＬＫ１１の全体がホスト２からのライトデータで満たされて書き込み先ブロックＢＬＫ１１に未書き込み領域がなくなると、コントローラ４は、更新頻度が低いデータ用の現在の書き込み先ブロックＢＬＫ１１をアクティブブロックプール７１によって管理する。そして、コントローラ４は、フリーブロックプール７２から新たな一つのフリーブロックを選択し、この選択したフリーブロックを更新頻度が低いデータ用の新たな書き込み先ブロックとして割り当てる。
【０１４４】
アクティブブロックプール７１内の各ブロック内の少なくとも一部の記憶領域には有効データが保持されている。このアクティブブロックプール７１には、第１のブロック群（ブロックグループ＃１）と、第２のブロック群（ブロックグループ＃２）とが存在する。第１のブロック群は更新頻度が高いデータ用の書き込み先ブロックとして使用されていたブロックの集合であり、第２のブロック群は更新頻度が低いデータ用の書き込み先ブロックとして使用されていたブロックの集合である。アクティブブロックプール７１内のあるブロック内の全ての有効データが、データ更新、アンマップ／トリム／イレーズコマンド、ＧＣ等によって無効化されると、コントローラ４は、このブロックをフリーブロックプール７２によって管理する。
【０１４５】
図１７のフローチャートは、ＧＣ動作の手順を示す。
【０１４６】
コントローラ４は、例えばフリーブロックプール７２内の残りフリーブロックの数が閾値以下である場合、ＧＣ動作を実行する。
【０１４７】
ＧＣ動作では、コントローラ４は、アクティブブロックプール７１内のブロック（アクティブブロック）から、ＧＣが施されるべき幾つかのＧＣソースブロックを選択する。この場合、コントローラ４は、アクティブブロックプール７１によって管理されているブロックの中から、有効データ量が少ない一つ以上のブロックをＧＣソースブロックとして選択する（ステップＳ３１）。ステップＳ３１では、コントローラ４は、最も有効データ量の少ない一つ以上のブロックをＧＣソースブロックとして選択してもよい。アクティブブロックプール７１には第１のブロック群と第２のブロック群とが含まれているが、コントローラ４は、第１のブロック群／第２のブロック群を区別することなく、最も有効データ量の少ない一つ以上のブロックを探せばよい。
【０１４８】
上述したように、第１実施形態では、更新頻度が高いデータ用の各ブロックに対するデータ書き込みはメモリセル当たりにｍビットのデータを書き込むプログラムモード（例えばＳＬＣモード）を用いて実行され、更新頻度が低いデータ用の各ブロックに対するデータ書き込みはメモリセル当たりにｎ（ｎ＞ｍ）ビットのデータを書き込むプログラムモード（例えばＴＬＣ）を用いて実行される。
【０１４９】
したがって、更新頻度が高いデータ用の各ブロックに書き込み可能なデータの総量は更新頻度が低いデータ用の各ブロックに書き込み可能なデータの総量よりも少ない。この結果、基本的には、更新頻度が高いデータ用の各ブロックの有効データ量も、更新頻度が低いデータ用の各ブロックより少なくなる。よって、更新頻度が高いデータ用のブロックが優先的にＧＣソースブロックとして選択されるので、更新頻度が低いデータ用のブロックを、よりＧＣの対象となりにくくすることができる。
【０１５０】
そして、コントローラ４は、これら選択されたＧＣソースブロック内の有効データのみを、コピー先ブロックであるＧＣディスティネーションブロックにコピーする（ステップＳ３２）。ＧＣ動作によって無効データのみとなったＧＣソースブロックはフリーブロックプール７２によって管理される。
【０１５１】
以上のように、本第１実施形態によれば、ホスト２からのシステムデータタグによってシステムデータ特性を有するデータであると指定されたライトデータは、更新頻度が高いデータ用のブロックに書き込まれる。また、ホスト２からのシステムデータタグによってシステムデータ特性を有するデータであると指定されなかったライトデータは、更新頻度が低いデータ用のブロックに書き込まれる。このように、ホスト２からのシステムデータタグによって指定されるシステムデータ特性を有するデータを更新頻度が高いデータであると認識することにより、更新頻度が高いデータと更新頻度が低いデータとを異なるブロックにそれぞれ書き込むことが可能となる。この結果、更新頻度が低いデータ用のブロックに本来書き込まれるべきでない高更新頻度のデータ（例えば、大きなサイズを有し且つ更新頻度が高いデータ等）が、更新頻度が低いデータ用のブロックに書き込まれてしまう、ということを防止することができる。よって、更新頻度が低いデータ用のブロックに書き込み可能なデータ量の減少、更新頻度が低いデータ用のブロックへのデータ書き込み量が増加を防ぐことができので、ストレージ容量の利用効率を改善でき、またフラッシュストレージデバイス３の性能低下を防ぐことができる。
【０１５２】
また、ＵＦＳ規格のライトコマンド内のグループナンバーフィールドの値をシステムタグとして使用できるので、ＵＦＳ規格に準拠したシステムにおけるストレージ容量の利用効率を改善することができる。
【０１５３】
また、第１実施形態では、ホスト２からのシステムデータタグによってシステムデータ特性を有するデータ（システムデータ）であると指定されたライトデータは、第１のプログラムモード（例えばＳＬＣモード）でＮＡＮＤ型フラッシュメモリ５に書き込まれてもよく、またシステムデータ特性を有するデータであると指定されなかったライトデータは、第２のプログラムモード（例えばＴＬＣモード）でＮＡＮＤ型フラッシュメモリ５に書き込まれてもよい。この構成は、例えば、システムデータ用の書き込み先ブロックに第１のプログラムモードを適用し、他のデータ用の書き込み先ブロックに第２のプログラムモードを適用することによって実現することができる。このような構成により、システムデータが書き込まれた各ブロックの許容プログラム／イレーズサイクルの数を増やすことができるので、システムデータの信頼性を高めることができる。
【０１５４】
なお、WRITE(10)コマンドとは別に、システムデータ特性を有するライトデータを指定するシステムデータタグを通知するための新規コマンドを定義し、このコマンドを使用して、ライトデータがシステムデータ特性を有するデータであるか否かをホスト２からフラッシュストレージデバイス３に通知してもよい。
【０１５５】
（第２実施形態）
第１実施形態では、ＵＦＳ規格で指定されたライトコマンド内のグループナンバーフィールドをシステムデータタグとして使用する場合を説明したが、第２実施形態では、未定義のリザーブ領域がシステムデータタグとして使用される。
【０１５６】
第２実施形態に係るフラッシュストレージデバイス３のハードウェア構成は第１実施形態のフラッシュストレージデバイス３と同様であり、第２実施形態と第１実施形態とでは、システムデータタグ（高更新頻度／低更新頻度を通知するための更新頻度情報）の実装形態のみが異なる。以下、第１実施形態と異なる点のみを説明する。
【０１５７】
図１８は、システムデータタグとして使用されるリザーブ領域の例を示す。
【０１５８】
図１８に示されているように、ＵＦＳ２．１規格で規定されたライトコマンド（例えばＷＲＩＴＥ（１０）コマンド）は、未定義のリザーブ（Ｒｅｓｅｒｖｅｄ）領域を含む。例えば、ホスト２がシステムデータの書き込みを要求する場合、ホスト２は、例えば、リザーブ領域の最上位ビットを“１”にセットする。リザーブ領域の最上位ビットは、システムデータタグとして使用されうる。換言すれば、リザーブ領域の最上位ビットは、ライトデータがシステムデータであるか否かを指定する情報として使用される。
【０１５９】
コントローラ４は、ライトコマンド内のこのリザーブ領域の最上位ビットが“１”である場合、このライトデータをシステムデータ特性を有するデータとして、つまり更新頻度が高いデータとして扱う。
【０１６０】
図１９のフローチャートは、リザーブ領域の値に基づいて実行される書き込み処理の手順を示す。
【０１６１】
コントローラ４がホスト２からライトコマンドを受信した場合、コントローラ４は、このライトコマンドに含まれるリザーブ領域の値をチェックする。この場合、コントローラ４は、受信されたライトコマンド内のリザーブ領域の最上位ビットが１であるか否かを判定する（ステップＳ４１）。
【０１６２】
リザーブ領域の最上位ビットが１であるならば、つまりシステムデータタグによってライトデータがシステムデータ特性を有するデータであると指定されたならば（ステップＳ４１のＹＥＳ）、コントローラ４は、このライトコマンドに対応するライトデータが更新頻度が高いデータであると判定する。そして、コントローラ４は、更新頻度が高いデータ用のブロックにライトデータを書き込む（ステップＳ４２）。ステップＳ４２では、コントローラ４は、更新頻度が高いデータ用のブロックにライトデータをＳＬＣモードで書き込んでもよい。
【０１６３】
リザーブ領域の最上位ビットが１ではないならば、つまりシステムデータタグによってライトデータがシステムデータ特性を有するデータであると指定されなかったならば（ステップＳ４１のＮＯ）、コントローラ４は、ライトデータのサイズが閾値（ここでは、６４ＫＢ）以下であるか否かを判定する（ステップＳ４３）。
【０１６４】
ライトデータのサイズが６４ＫＢ以下であるならば（ステップＳ４３のＹＥＳ）、コントローラ４は、このライトデータは更新頻度が高いデータであると判定し、更新頻度が高いデータ用のブロックにこのライトデータを書き込む（ステップＳ４２）。上述したように、ステップＳ４２では、コントローラ４は、更新頻度が高いデータ用のブロックにライトデータをＳＬＣモードで書き込んでもよい。
【０１６５】
一方、ライトデータのサイズが６４ＫＢを超えているならば（ステップＳ４３のＮＯ）、コントローラ４は、このライトデータは更新頻度が低いデータであると判定し、更新頻度が低いデータ用のブロックにこのライトデータを書き込む（ステップＳ４４）。ステップＳ４４では、コントローラ４は、更新頻度が低いデータ用のブロックにライトデータをＴＬＣモードで書き込んでもよい。
【０１６６】
なお、図１９のフローチャートでは、ライトデータがシステムデータ特性を有するデータであると指定されなかったならば、ライトコマンドによって指定されるデータサイズに基づいて、このライトデータを、更新頻度が低いデータ用のブロックまたは更新頻度が低いデータ用のブロックに振り分ける処理を実行する場合について説明したが、このデータサイズに基づく振り分ける処理は必ずしも実行しなくてもよい。この場合、コントローラ４は、システムデータ特性を有するデータであると指定されなかったライトデータを、更新頻度が低いデータ用のブロックに書き込めばよい。
【０１６７】
この第２実施形態においても、第１実施形態と同様に、更新頻度が高いデータが更新頻度が低いデータ用のブロックに書き込まれてしまう確率を低減でき、ストレージ容量の利用効率を改善することができる。
【０１６８】
また、第２実施形態においても、第１実施形態で説明したＧＣ動作を実行することができる。
【０１６９】
（第３実施形態）
第１実施形態では、ＵＦＳ規格で指定されたライトコマンド内のグループナンバーフィールドをシステムデータタグとして使用する場合を説明したが、第３実施形態では、ｅＭＭＣ規格で規定されたセット・ブロック・カウント・コマンド（CMD23）内のタグ・リクエストがシステムデータタグとして使用される。
【０１７０】
第３実施形態に係るフラッシュストレージデバイス３のハードウェア構成は基本的には第１実施形態のフラッシュストレージデバイス３と同様であり、第３実施形態と第１実施形態とでは、第３実施形態に係るフラッシュストレージデバイス３がｅＭＭＣ規格に準拠するストレージデバイスとして実現されており、CMD23内のタグ・リクエストがシステムデータタグとして使用される点が異なる。以下、第１実施形態と異なる点のみを説明する。
【０１７１】
図２０は、ｅＭＭＣ４．５規格で規定された拡張デバイス・スペシフィック・データ・レジスタ（Extended Device Specific Data register：Extended CSD）内のデータタグサポートフィールドを示す。
【０１７２】
第３実施形態のフラッシュストレージデバイス３はｅＭＭＣ４．５規格に準拠したストレージデバイスと機能し得、ｅＭＭＣ４．５規格で規定された様々なコマンドを処理することができる。
【０１７３】
フラッシュストレージデバイス３は、図２０に示されるExtended CSDを保持する。このExtended CSDには、ライトデータがシステムデータ特性を有することを指定する機能（システムデータタグメカニズム）を有効にするためのデータタグサポート（DATA_TAG_SUPPORT）フィールドを含む。ホスト２は、このデータタグサポート（DATA_TAG_SUPPORT）フィールドの値をチェックすることによって、システムデータタグメカニズムが有効であることを確認することができる。
【０１７４】
図２２は、ｅＭＭＣ規格で規定されたセット・ブロック・カウント・コマンド（CMD23）内のタグ・リクエストを示す。
【０１７５】
CMD23は、例えば、ライトデータに関する情報をフラッシュストレージデバイス３に通知するために使用される。CMD23は、ライトコマンド（例えばCMD25）の直前にフラッシュストレージデバイス３に送出される。
【０１７６】
CMD23は３２ビットのサイズを有しており、その３０ビット目のフィールド（Bit [29]）がタグ・リクエストとして使用される。タグ・リクエストは、ライトデータがシステムデータ特性を有するデータであるか否かを示すシステムデータタグとして使用される。“１”のタグ・リクエストは、ライトデータがシステムデータ特性を有することを示す。
【０１７７】
コントローラ４は、タグ・リクエスト（システムデータタグ）に基づいて、ホスト２からのライトデータが高い更新頻度を有するか否かを判定する。タグ・リクエスト（システムデータタグ）によってシステムデータ特性を有するデータであると指定されたライトデータに関しては、コントローラ４は、更新頻度が高いデータとして取り扱う。すなわち、コントローラ４は、タグ・リクエスト（システムデータタグ）によってシステムデータ特性を有するデータであると指定されたライトデータを更新頻度が高いデータであると判定し、更新頻度が高いデータを書き込むためのブロックにこのライトデータを書き込む。また、コントローラ４は、タグ・リクエスト（システムデータタグ）によってシステムデータ特性を有するデータであると指定されなかったライトデータを更新頻度が低いデータであると判定し、更新頻度が低いデータを書き込むための別のブロックにこのライトデータを書き込む。
【０１７８】
図２３のシーケンス図は、ホスト２とフラッシュストレージデバイス３とによって実行されるデータ書き込み処理の手順を示す。
【０１７９】
フラッシュストレージデバイス３の電源がオンされた後、ホスト２は、フラッシュストレージデバイス３内のExtended CSDのデータタグサポート（DATA_TAG_SUPPORT）フィールドのBit[0](SYSTEM_DATA_TAG_SUPORT)をチェックして、システムデータタグメカニズムが有効であることを確認する。
【０１８０】
ホスト２がシステムデータの書き込みを要求する場合、ホスト２は、タグ・リクエストが“１”に設定されたCMD23をフラッシュストレージデバイス３に送出し、そしてライトコマンド（例えばCMD25）をフラッシュストレージデバイス３に送出する。
【０１８１】
フラッシュストレージデバイス３のコントローラ４がライトコマンド（例えばCMD25）を受信した後、コントローラ４は、CMD23のタグ・リクエストが“１”にセットされているか否かをチェックし、CMD23のタグ・リクエストが“１”にセットされているならば、ライトコマンドに応じて、ライトデータを更新頻度が高いデータ用のブロックに書き込む（ステップＳ５２）。なお、CMD23のタグ・リクエストが“１”にセットされているか否かを判定する処理は、ライトコマンド（例えばCMD25）の受信前または受信後のどちらで実行してもよい。
【０１８２】
図２４のフローチャートは、CMD23内のタグ・リクエストの値に基づいて実行される書き込み処理の手順を示す。
【０１８３】
コントローラ４はCMD23をホスト２から受信し（ステップＳ６１）、そしてライトコマンド（例えばCMD25）をホスト２から受信する（ステップＳ６２）。コントローラ４は、このライトコマンドの直前に受信したCMD23に含まれるタグ・リクエストの値をチェックする。この場合、コントローラ４は、タグ・リクエストの値が１であるか否かを判定する（ステップＳ６３）。
【０１８４】
タグ・リクエストの値が１であるならば、つまりタグ・リクエスト（システムデータタグ）によってライトデータがシステムデータ特性を有するデータであると指定されたならば（ステップＳ６３のＹＥＳ）、コントローラ４は、ライトデータが更新頻度が高いデータであると判定する。そして、コントローラ４は、更新頻度が高いデータ用のブロックにライトデータを書き込む（ステップＳ６４）。ステップＳ６４では、コントローラ４は、更新頻度が高いデータ用のブロックにライトデータをＳＬＣモードで書き込んでもよい。
【０１８５】
タグ・リクエストの値が１ではないならば、つまりタグ・リクエスト（システムデータタグ）によってライトデータがシステムデータ特性を有するデータであると指定されなかったならば（ステップＳ６３のＮＯ）、コントローラ４は、ライトデータのサイズが閾値（ここでは、６４ＫＢ）以下であるか否かを判定する（ステップＳ６５）。
【０１８６】
ライトデータのサイズが６４ＫＢ以下であるならば（ステップＳ６５のＹＥＳ）、コントローラ４は、このライトデータは更新頻度が高いデータであると判定し、更新頻度が高いデータ用のブロックにこのライトデータを書き込む（ステップＳ６４）。上述したように、ステップＳ６４では、コントローラ４は、更新頻度が高いデータ用のブロックにライトデータをＳＬＣモードで書き込んでもよい。
【０１８７】
一方、ライトデータのサイズが６４ＫＢを超えているならば（ステップＳ６５のＮＯ）、コントローラ４は、このライトデータは更新頻度が低いデータであると判定し、更新頻度が低いデータ用のブロックにこのライトデータを書き込む（ステップＳ６６）。ステップＳ６６では、コントローラ４は、更新頻度が低いデータ用のブロックにライトデータをＴＬＣモードで書き込んでもよい。
【０１８８】
なお、図２４のフローチャートでは、タグ・リクエスト（システムデータタグ）によってライトデータがシステムデータ特性を有するデータであると指定されなかったならば、ライトコマンドによって指定されるデータサイズに基づいて、このライトデータを、更新頻度が低いデータ用のブロックまたは更新頻度が低いデータ用のブロックに振り分ける処理を実行する場合について説明したが、このデータサイズに基づく振り分ける処理は必ずしも実行しなくてもよい。この場合、コントローラ４は、タグ・リクエスト（システムデータタグ）によってシステムデータ特性を有するデータであると指定されなかったライトデータを、更新頻度が低いデータ用のブロックに書き込めばよい。
【０１８９】
第３実施形態においても、第１実施形態と同様に、更新頻度が高いデータが更新頻度が低いデータ用のブロックに書き込まれてしまう確率を低減でき、ストレージ容量の利用効率を改善することができる。また、第３実施形態においては、ｅＭＭＣ規格のセット・ブロック・カウント・コマンド（CMD23）内のタグ・リクエストの値をシステムタグとして使用できるので、ｅＭＭＣ規格に準拠したシステムにおけるストレージ容量の利用効率を改善することができる。
【０１９０】
また、第３実施形態においても、第１実施形態で説明したＧＣ動作を実行することができる。
【０１９１】
（第４実施形態）
第１、第２、第３実施形態では、コントローラ４が、ホスト２からのコマンド（ライトコマンド、またはCMD23）に含まれるシステムデータタグに基づいてライトデータがシステムデータであるか否かを判定する場合を説明したが、第４実施形態では、コントローラ４は、ホスト２とフラッシュストレージデバイス３との間を相互接続するインタフェースに追加された信号線の値に基づいてライトデータがシステムデータであるか否かを判定する。
【０１９２】
図２５は、フラッシュストレージデバイス３とホスト２との間を相互接続するインタフェース内に定義された信号線（通知信号線）を示す。
【０１９３】
すなわち、このインタフェースにおいては、クロック、コマンド（CMD）、データを転送するための複数の信号線に加え、通知信号線６１が追加されている。
【０１９４】
ホスト２のデバイスインタフェース５１は、ファイルシステム４３のようなホストソフトウェアからの指示に基づき、通知信号線６１をハイレベル（論理“１”）またはローレベル（論理“０”）に設定する回路を含む。
【０１９５】
フラッシュストレージデバイス３のコントローラ４は、ホストインタフェース１１を使用して通知信号線６１の値（論理“１”または論理“０”）をチェックし、この通知信号線６１の値に基づいてライトデータがシステムデータであるか否かを判定し、この判定結果に基づいて、更新頻度が高いデータ用のブロックまたは更新頻度が低いデータ用のブロックにライトデータを選択的に書き込む。
【０１９６】
例えば、ホスト２は、システムデータを書き込むべき時は通知信号線６１をハイレベル（論理“１”）に設定し、システムデータ以外のデータを書き込むべき時は通知信号線６１をローレベル（論理“０”）に設定することで、ライトデータがシステムデータであるか否かをフラッシュストレージデバイス３に通知することができる。
【０１９７】
図２６のフローチャートは、通知信号線６１の値に基づいて実行される書き込み処理の手順を示す。
【０１９８】
コントローラ４がホスト２からライトコマンドを受信した時、コントローラ４は、通知信号線６１がハイレベル（論理“１”）またはローレベル（論理“０”）のいずれであるかを判定する（ステップＳ７１）。
【０１９９】
通知信号線６１がハイレベル（論理“１”）であるならば、コントローラ４は、ライトデータがシステムデータであると判定する。そして、コントローラ４は、更新頻度が高いデータ用のブロックにライトデータを書き込む（ステップＳ７２）。ステップＳ７２では、コントローラ４は、更新頻度が高いデータ用のブロックにライトデータをＳＬＣモードで書き込んでもよい。
【０２００】
通知信号線６１がローレベル（論理“０”）であるならば、コントローラ４は、ライトデータがシステムデータではないと判定する。そして、コントローラ４は、更新頻度が低いデータ用のブロックにライトデータを書き込む（ステップＳ７３）。ステップＳ７３では、コントローラ４は、更新頻度が低いデータ用のブロックにライトデータをＴＬＣモードで書き込んでもよい。
【０２０１】
第４実施形態においても、第１実施形態と同様に、更新頻度が高いデータが更新頻度が低いデータ用のブロックに書き込まれてしまう確率を低減でき、ストレージ容量の利用効率を改善することができる。また、第４実施形態においても、第１実施形態で説明したＧＣ動作を実行することができる。
【０２０２】
なお、通知信号線６１がローレベル（論理“０”）である場合には、コントローラ４は、ライトデータのサイズに応じて、更新頻度が高いデータ用のブロックまたは更新頻度が低いデータ用のブロックにライトデータを選択的に書き込んでもよい。この場合、コントローラ４は、ライトデータのサイズが閾値（例えば６４ＫＢ）以下であるか否かを判定し、ライトデータのサイズが閾値以下であれば、更新頻度が高いデータ用のブロックにライトデータを書き込み、ライトデータのサイズが閾値を超えるならば、更新頻度が低いデータ用のブロックにライトデータを書き込む。
【０２０３】
また、第４実施形態では、この通知信号線６１は、ライトデータがシステムデータであることをＳＳＤ３に通知する信号線として説明したが、この通知信号線６１は、ライトデータの更新頻度をＳＳＤ３に通知する信号線として利用されてもよい。
【０２０４】
フラッシュストレージデバイス３のコントローラ４は、ホストインタフェース１１を使用して通知信号線６１の値（論理“１”または論理“０”）をチェックし、この通知信号線６１の値に基づいてライトデータが、更新頻度が高いデータであるか否かを判定し、この判定結果に基づいて、更新頻度が高いデータ用のブロックまたは更新頻度が低いデータ用のブロックにライトデータを選択的に書き込む。
【０２０５】
例えば、ホスト２は、更新頻度が高いデータを書き込むべき時は通知信号線６１をハイレベル（論理“１”）に設定し、更新頻度が低いデータを書き込むべき時は通知信号線６１をローレベル（論理“０”）に設定することで、ライトデータが、更新頻度が高いデータであるか、更新頻度が低いデータであるかを、フラッシュストレージデバイス３に通知することができる。
【０２０６】
コントローラ４がホスト２からライトコマンドを受信した時、コントローラ４は、通知信号線６１がハイレベル（論理“１”）またはローレベル（論理“０”）のいずれであるかを判定する。通知信号線６１がハイレベル（論理“１”）であるならば、コントローラ４は、ライトデータが、更新頻度が高いデータであると判定する。そして、コントローラ４は、更新頻度が高いデータ用のブロックにライトデータを書き込む。この場合、コントローラ４は、更新頻度が高いデータ用のブロックにライトデータをＳＬＣモードで書き込んでもよい。
【０２０７】
通知信号線６１がローレベル（論理“０”）であるならば、コントローラ４は、ライトデータが、更新頻度が低いデータであると判定する。そして、コントローラ４は、更新頻度が低いデータ用のブロックにライトデータを書き込む。この場合、コントローラ４は、更新頻度が低いデータ用のブロックにライトデータをＴＬＣモードで書き込んでもよい。
【０２０８】
（変形例）
上述した第１〜４実施形態では、不揮発性メモリとしてＮＡＮＤ型フラッシュメモリを例示した。しかし、各実施形態の機能は、例えば、ＭＲＡＭ（Ｍａｇｎｅｔｏｒｅｓｉｓｔｉｖｅ  Ｒａｎｄｏｍ  Ａｃｃｅｓｓ  Ｍｅｍｏｒｙ）、ＰＲＡＭ（Ｐｈａｓｅ  ｃｈａｎｇｅ  Ｒａｎｄｏｍ  Ａｃｃｅｓｓ  Ｍｅｍｏｒｙ）、ＲｅＲＡＭ（Ｒｅｓｉｓｔｉｖｅ  Ｒａｎｄｏｍ  Ａｃｃｅｓｓ  Ｍｅｍｏｒｙ）、又は、ＦｅＲＡＭ（Ｆｅｒｒｏｅｌｅｃｔｒｉｃ  Ｒａｎｄｏｍ  Ａｃｃｅｓｓ  Ｍｅｍｏｒｙ）のような他の様々な不揮発性メモリにも適用できる。
【０２０９】
本発明のいくつかの実施形態を説明したが、これらの実施形態は、例として提示したものであり、発明の範囲を限定することは意図していない。これら新規な実施形態は、その他の様々な形態で実施されることが可能であり、発明の要旨を逸脱しない範囲で、種々の省略、置き換え、変更を行うことができる。これら実施形態やその変形は、発明の範囲や要旨に含まれるとともに、特許請求の範囲に記載された発明とその均等の範囲に含まれる。
【符号の説明】
【０２１０】
２…ホスト、３…フラッシュストレージデバイス、４…コントローラ４…ＮＡＮＤ型フラッシュメモリ、２１…システムデータタグチェック部、２２…データサイズチェック部、２３…ライト制御部、２４…ガベージコレクション制御部。
【図１】
2019148913.tif 000003
【図２】
2019148913.tif 000004
【図３】
2019148913.tif 000005
【図４】
2019148913.tif 000006
【図５】
2019148913.tif 000007
【図６】
2019148913.tif 000008
【図７】
2019148913.tif 000009
【図８】
2019148913.tif 000010
【図９】
2019148913.tif 000011
【図１０】
2019148913.tif 000012
【図１１】
2019148913.tif 000013
【図１２】
2019148913.tif 000014
【図１３】
2019148913.tif 000015
【図１４】
2019148913.tif 000016
【図１５】
2019148913.tif 000017
【図１６】
2019148913.tif 000018
【図１７】
2019148913.tif 000019
【図１８】
2019148913.tif 000020
【図１９】
2019148913.tif 000021
【図２０】
2019148913.tif 000022
【図２１】
2019148913.tif 000023
【図２２】
2019148913.tif 000024
【図２３】
2019148913.tif 000025
【図２４】
2019148913.tif 000026
【図２５】
2019148913.tif 000027
【図２６】
2019148913.tif 000028