(57)【要約】【課題】データ配置に関するホスト側の負担を軽減できるメモリシステムを実現する。【解決手段】メモリシステムは、複数の領域をアクセスするための複数の識別子のうちの第１の識別子を含むライトコマンドをホストから受信した場合、共通フリーブロック群のうちの一つのブロックを第１の識別子に対応する領域用の書き込み先ブロックとして割り当てる。メモリシステムは、ライトデータを書き込み先ブロックに書き込む。メモリシステムは、第１の識別子に対応する領域に属するブロックのうちのコピー元ブロックのブロックアドレスと、第１の識別子を示すコピー先対象領域の識別子とを含むコピーコマンドをホストから受信した場合、共通フリーブロック群のうちの一つのブロックを第１の識別子に対応する領域用のコピー先ブロックとして割り当て、コピー元ブロックからコピー先ブロックにデータをコピーする。【選択図】図３
2020123039.tif 000002
【特許請求の範囲】
【請求項１】
ホストに接続可能なメモリシステムであって、
複数のブロックを含む不揮発性メモリと、
前記不揮発性メモリに電気的に接続され、前記不揮発性メモリを制御するように構成されたコントローラとを具備し、
前記コントローラは、
前記ホストから受信される領域作成コマンドそれぞれに応じて、各々が前記複数のブロックの部分集合である複数の領域を作成し、
前記複数の領域をアクセスするための複数の識別子のうちの第１の識別子を含むライトコマンドを前記ホストから受信した場合、前記複数の領域によって共有される共通フリーブロック群のうちの一つのブロックを前記第１の識別子に対応する領域用の第１の書き込み先ブロックとして割り当て、
前記ライトコマンドに関連付けられたライトデータを前記第１の書き込み先ブロックに書き込み、前記ライトデータの識別子と、前記第１の書き込み先ブロックのブロックアドレスと、前記ライトデータが書き込まれた、前記第１の書き込み先ブロック内の記憶位置を示すオフセットとをアドレス記録要求として前記ホストに通知し、
前記第１の識別子に対応する領域に属するブロックのうちのコピー元ブロックのブロックアドレスと前記第１の識別子を示すコピー先対象領域の識別子とを含むコピーコマンドを前記ホストから受信した場合、前記共通フリーブロック群のうちの一つのブロックを前記第１の識別子に対応する領域用の第１のコピー先ブロックとして割り当て、
前記コピー元ブロックから前記第１のコピー先ブロックにコピー対象データをコピーし、前記コピー対象データの識別子と、前記第１のコピー先ブロックのブロックアドレスと、前記コピー対象データがコピーされた、前記第１のコピー先ブロック内の位置を示すオフセットとをアドレス変更要求として前記ホストに通知するように構成されている、メモリシステム。
【請求項２】
前記コントローラは、前記ライトデータの一部分である第１のデータ部分の書き込みによって前記第１の書き込み先ブロック全体がデータで満たされた場合、前記共通フリーブロック群のうちの一つのブロックを前記第１の識別子に対応する領域用の第２の書き込み先ブロックとして割り当て、前記ライトデータの残り部分である第２のデータ部分を前記第２の書き込み先ブロックに書き込むように構成されている請求項１記載のメモリシステム。
【請求項３】
前記コントローラは、前記ライトデータの前記第１のデータ部分の識別子と、前記第１の書き込み先ブロックの前記ブロックアドレスと、前記第１のデータ部分が書き込まれた、前記第１の書き込み先ブロック内の記憶位置を示すオフセットと、前記ライトデータの前記第２のデータ部分の識別子と、前記第２の書き込み先ブロックのブロックアドレスと、前記第２のデータ部分が書き込まれた、前記第２の書き込み先ブロック内の記憶位置を示すオフセットとを前記アドレス記録要求として前記ホストに通知するように構成されている請求項２記載のメモリシステム。
【請求項４】
前記コピー元ブロック内の前記コピー対象データの一部分である第３のデータ部分のコピーによって前記第１のコピー先ブロック全体がデータで満たされた場合、前記共通フリーブロック群のうちの一つのブロックを前記第１の識別子に対応する領域用の第２のコピー先ブロックとして割り当て、前記コピー対象データの残り部分である第４のデータ部分を前記第２のコピー先ブロックにコピーするように構成されている請求項１記載のメモリシステム。
【請求項５】
前記コントローラは、前記コピー対象データの前記第３のデータ部分の識別子と、前記第１のコピー先ブロックの前記ブロックアドレスと、前記第３のデータ部分がコピーされた、前記第１のコピー先ブロック内の記憶位置を示すオフセットと、前記コピー対象データの前記第４のデータ部分の識別子と、前記第２のコピー先ブロックのブロックアドレスと、前記第４のデータ部分がコピーされた、前記第２のコピー先ブロック内の記憶位置を示すオフセットとを前記アドレス変更要求として前記ホストに通知するように構成されている請求項４記載のメモリシステム。
【請求項６】
前記複数のブロックの各々は前記複数の領域のいずれか一つに属し、同じブロックが異なる領域に同時に属さない請求項１記載のメモリシステム。
【請求項７】
前記コピーコマンドが前記コピー元ブロックに含まれる有効データそれぞれをコピーするための第１タイプのコピーコマンドである場合、前記コントローラは、前記ホストから通知される、前記コピー元ブロックに含まれる各データが有効データまたは無効データのいずれであるかを示すマップ情報に基づいて、前記コピー元ブロック内の有効データそれぞれを前記第１のコピー先ブロックにコピーし、コピーされた有効データ毎に、有効データの識別子と前記第１のコピー先ブロックのブロックアドレスと有効データが格納されている前記第１のコピー先ブロック内の記憶位置を示すオフセットとを示す情報を、前記アドレス変更要求として前記ホストに通知するように構成されている請求項１記載のメモリシステム。
【請求項８】
前記コピーコマンドが、前記コピー元ブロックの前記ブロックアドレスと、前記コピー対象データが格納されている、前記コピー元ブロック内の記憶位置を示すオフセットと、前記コピー対象データの長さとを指定する第２タイプのコピーコマンドである場合、前記コントローラは、前記第２タイプのコピーコマンドによって指定される前記オフセットおよび長さに基づいて、前記コピー対象データを前記コピー元ブロックから前記第１のコピー先ブロックにコピーするように構成されている請求項１記載のメモリシステム。
【請求項９】
複数のブロックを含む不揮発性メモリを制御する制御方法であって、
ホストから受信される領域作成コマンドそれぞれに応じて、各々が前記複数のブロックの部分集合である複数の領域を作成することと、
前記複数の領域をアクセスするための複数の識別子のうちの第１の識別子を含むライトコマンドを前記ホストから受信した場合、前記複数の領域によって共有される共通フリーブロック群のうちの一つのブロックを前記第１の識別子に対応する領域用の第１の書き込み先ブロックとして割り当てることと、
前記ライトコマンドに関連付けられたライトデータを前記第１の書き込み先ブロックに書き込むことと、
前記ライトデータの識別子と、前記第１の書き込み先ブロックのブロックアドレスと、前記ライトデータが書き込まれた、前記第１の書き込み先ブロック内の記憶位置を示すオフセットとをアドレス記録要求として前記ホストに通知することと、
前記第１の識別子に対応する領域に属するブロックのうちのコピー元ブロックのブロックアドレスと前記第１の識別子を示すコピー先対象領域の識別子とを含むコピーコマンドを前記ホストから受信した場合、前記共通フリーブロック群のうちの一つのブロックを前記第１の識別子に対応する領域用の第１のコピー先ブロックとして割り当てることと、
前記コピー元ブロックから前記第１のコピー先ブロックにコピー対象データをコピーすることと、
前記コピー対象データの識別子と、前記第１のコピー先ブロックのブロックアドレスと、前記コピー対象データがコピーされた、前記第１のコピー先ブロック内の位置を示すオフセットとをアドレス変更要求として前記ホストに通知することとを具備する制御方法。
【請求項１０】
前記ライトデータの一部分である第１のデータ部分の書き込みによって前記第１の書き込み先ブロック全体がデータで満たされた場合、前記共通フリーブロック群のうちの一つのブロックを前記第１の識別子に対応する領域用の第２の書き込み先ブロックとして割り当てることと、
前記ライトデータの残り部分である第２のデータ部分を前記第２の書き込み先ブロックに書き込むこととをさらに具備する請求項９記載の制御方法。
【請求項１１】
前記ライトデータの前記第１のデータ部分の識別子と、前記第１の書き込み先ブロックの前記ブロックアドレスと、前記第１のデータ部分が書き込まれた、前記第１の書き込み先ブロック内の記憶位置を示すオフセットと、前記ライトデータの前記第２のデータ部分の識別子と、前記第２の書き込み先ブロックのブロックアドレスと、前記第２のデータ部分が書き込まれた、前記第２の書き込み先ブロック内の記憶位置を示すオフセットとを前記アドレス記録要求として前記ホストに通知することをさらに具備する請求項１０記載の制御方法。
【請求項１２】
前記コピー元ブロック内の前記コピー対象データの一部分である第３のデータ部分のコピーによって前記第１のコピー先ブロック全体がデータで満たされた場合、前記共通フリーブロック群のうちの一つのブロックを前記第１の識別子に対応する領域用の第２のコピー先ブロックとして割り当てることと、
前記コピー対象データの残り部分である第４のデータ部分を前記第２のコピー先ブロックにコピーすることとをさらに具備する請求項９記載の制御方法。
【請求項１３】
前記コピー対象データの前記第３のデータ部分の識別子と、前記第１のコピー先ブロックの前記ブロックアドレスと、前記第３のデータ部分がコピーされた、前記第１のコピー先ブロック内の記憶位置を示すオフセットと、前記コピー対象データの前記第４のデータ部分の識別子と、前記第２のコピー先ブロックのブロックアドレスと、前記第４のデータ部分がコピーされた、前記第２のコピー先ブロック内の記憶位置を示すオフセットとを前記アドレス変更要求として前記ホストに通知することをさらに具備する請求項１２記載の制御方法。
【請求項１４】
前記複数のブロックの各々は前記複数の領域のいずれか一つに属し、同じブロックが異なる領域に同時に属さない請求項９記載の制御方法。
【発明の詳細な説明】
【技術分野】
【０００１】
本発明の実施形態は、不揮発性メモリを制御する技術に関する。
【背景技術】
【０００２】
近年、不揮発性メモリを備えるメモリシステムが広く普及している。このようなメモリシステムの一つとして、ＮＡＮＤフラッシュ技術ベースのソリッドステートドライブ（ＳＳＤ）が知られている。
データセンターのサーバにおいても、ストレージデバイスとしてＳＳＤが使用されている。
【０００３】
サーバのようなホスト計算機システムにおいて利用されるストレージデバイスにおいては、高いＩ／Ｏ性能が求められている。
このため、最近では、ホストがストレージデバイス内の不揮発性メモリを直接的に制御することを可能にする新たな技術が提案され始めている。
【先行技術文献】
【非特許文献】
【０００４】
【非特許文献１】Yiying Zhang, 外, "De-indirection for flash-based SSDs with nameless writes." FAST. 2012, [online], [平成29年9月13日検索], インターネット<URL: https://www.usenix.org/system/files/conference/fast12/zhang.pdf >
【発明の概要】
【発明が解決しようとする課題】
【０００５】
しかし、ストレージデバイス内の不揮発性メモリ上のデータ配置を制御するためのホスト側の負担が増加されると、これによって十分なＩ／Ｏ性能が得られなくなる場合がある。このため、ホスト側の負担を軽減できるようにするための新たな技術の実現が要求される。
【０００６】
本発明が解決しようとする課題は、データ配置に関するホスト側の負担を軽減することができるメモリシステムおよび制御方法を提供することである。
【課題を解決するための手段】
【０００７】
実施形態によれば、ホストに接続可能なメモリシステムは、複数のブロックを含む不揮発性メモリと、前記不揮発性メモリに電気的に接続され、前記不揮発性メモリを制御するように構成されたコントローラとを具備する。前記コントローラは、前記ホストから受信される領域作成コマンドそれぞれに応じて、各々が前記複数のブロックの部分集合である複数の領域を作成する。前記コントローラは、前記複数の領域をアクセスするための複数の識別子のうちの第１の識別子を含むライトコマンドを前記ホストから受信した場合、前記複数の領域によって共有される共通フリーブロック群のうちの一つのブロックを前記第１の識別子に対応する領域用の第１の書き込み先ブロックとして割り当てる。前記コントローラは、前記ライトコマンドに関連付けられたライトデータを前記第１の書き込み先ブロックに書き込み、前記ライトデータの識別子と、前記第１の書き込み先ブロックのブロックアドレスと、前記ライトデータが書き込まれた、前記第１の書き込み先ブロック内の記憶位置を示すオフセットとをアドレス記録要求として前記ホストに通知する。前記コントローラは、前記第１の識別子に対応する領域に属するブロックのうちのコピー元ブロックのブロックアドレスと前記第１の識別子を示すコピー先対象領域の識別子とを含むコピーコマンドを前記ホストから受信した場合、前記共通フリーブロック群のうちの一つのブロックを前記第１の識別子に対応する領域用の第１のコピー先ブロックとして割り当てる。前記コントローラは、前記コピー元ブロックから前記第１のコピー先ブロックにコピー対象データをコピーし、前記コピー対象データの識別子と、前記第１のコピー先ブロックのブロックアドレスと、前記コピー対象データがコピーされた、前記第１のコピー先ブロック内の位置を示すオフセットとをアドレス変更要求として前記ホストに通知する。
【図面の簡単な説明】
【０００８】
【図１】ホストと実施形態に係るメモリシステムとの関係を示すブロック図。
【図２】同実施形態のメモリシステムとホストとの間の役割分担を説明するための図。
【図３】同実施形態のメモリシステムの構成例を示すブロック図。
【図４】同実施形態のメモリシステムに設けられた、ＮＡＮＤインタフェースと複数のＮＡＮＤ型フラッシュメモリチップとの関係を示すブロック図。
【図５】複数の物理ブロックの集合によって構築される一つのブロック（スーパーブロック）の構成例を示す図。
【図６】同実施形態のメモリシステムに適用されるＱｏＳドメインクリエートコマンド（領域作成コマンド）を説明するための図。
【図７】同実施形態のメモリシステムに適用されるライトコマンドを説明するための図。
【図８】同実施形態のメモリシステムからホストに送られるアドレス記録要求を説明するための図。
【図９】同実施形態のメモリシステムに適用されるリードコマンドを説明するための図。
【図１０】同実施形態のメモリシステムに適用されるコピーコマンドを説明するための図。
【図１１】同実施形態のメモリシステムに適用されるセット・有効マップコマンドを説明するための図。
【図１２】同実施形態のメモリシステムからホストに送られるアドレス変更要求を説明するための図。
【図１３】同実施形態のメモリシステムに適用される別のタイプのコピーコマンドを説明するための図。
【図１４】アドレス記録要求、アドレス変更要求およびリードコマンドの各々に含まれる物理アドレスを規定するブロックアドレスおよびオフセットを説明するための図。
【図１５】スーパーブロックが使用される場合におけるブロックアドレスとオフセットとの関係を説明するための図。
【図１６】同実施形態のメモリシステムによって管理される複数のＱｏＳドメインを説明するための図。
【図１７】同実施形態のメモリシステムによって実行されるＱｏＳドメイン作成処理の手順を示すシーケンス図。
【図１８】ホストと同実施形態のメモリシステムとによって実行されるデータ書き込み処理を説明するためのブロック図。
【図１９】ホストと同実施形態のメモリシステムとによって実行されるデータ読み出し処理を説明するためのブロック図。
【図２０】ホストと同実施形態のメモリシステムとによって実行されるデータコピー処理を説明するためのブロック図。
【図２１】同実施形態のメモリシステムによって管理される、複数のＱｏＳドメインと共通フラッシュブロックプールとの関係を示すブロック図。
【図２２】ライトコマンドに関連付けられたライトデータの一部分の書き込みによって現在の書き込み先ブロックがデータで満たされた場合に同実施形態のメモリシステムによって実行される書き込み先ブロック割り当て動作を説明するための図。
【図２３】ホストから通知されるマップ情報に基づいて、同実施形態のメモリシステムによって実行される有効データコピー動作を説明するための図。
【図２４】コピー対象データの一部分の書き込みによって現在のコピー先ブロックがデータで満たされた場合に同実施形態のメモリシステムによって実行されるコピー先ブロック割り当て動作を説明するための図。
【図２５】同実施形態のメモリシステムによって実行される書き込み先ブロック割り当て動作およびデータ書き込み動作の手順を示すフローチャート。
【図２６】同実施形態のメモリシステムによって実行されるコピー先ブロック割り当て動作およびデータコピー動作の手順を示すフローチャート。
【発明を実施するための形態】
【０００９】
以下、図面を参照して、実施形態を説明する。  
まず、図１を参照して、本実施形態に係るメモリシステムとホストとの関係を説明する。
このメモリシステムは、不揮発性メモリにデータを書き込み、不揮発性メモリからデータを読み出すように構成された半導体ストレージデバイスである。このメモリシステムは、ＮＡＮＤフラッシュ技術ベースのフラッシュストレージデバイス３として実現されている。
【００１０】
ホスト（ホストデバイス）２は、複数のフラッシュストレージデバイス３を制御するように構成されている。ホスト２は、複数のフラッシュストレージデバイス３によって構成されるフラッシュアレイをストレージとして使用するように構成された情報処理装置によって実現される。この情報処理装置はパーソナルコンピュータであってもよいし、サーバコンピュータであってもよい。
【００１１】
なお、フラッシュストレージデバイス３は、ストレージアレイ内に設けられる複数のストレージデバイスの一つとして利用されてもよい。ストレージアレイは、サーバコンピュータのような情報処理装置にケーブルまたはネットワークを介して接続されてもよい。ストレージアレイは、このストレージアレイ内の複数のストレージ（例えば複数のフラッシュストレージデバイス３）を制御するコントローラを含む。フラッシュストレージデバイス３がストレージアレイに適用された場合には、このストレージアレイのコントローラが、フラッシュストレージデバイス３のホストとして機能してもよい。
【００１２】
以下では、サーバコンピュータのような情報処理装置がホスト２として機能する場合を例示して説明する。
ホスト（サーバ）２と複数のフラッシュストレージデバイス３は、インタフェース５０を介して相互接続される（内部相互接続）。この相互接続のためのインタフェース５０としては、これに限定されないが、ＰＣＩ  Ｅｘｐｒｅｓｓ（ＰＣＩｅ）（登録商標）、ＮＶＭ  Ｅｘｐｒｅｓｓ（ＮＶＭｅ）（登録商標）、Ｅｔｈｅｒｎｅｔ（登録商標）、ＮＶＭｅ  ｏｖｅｒ  Ｆａｂｒｉｃｓ（ＮＶＭｅＯＦ）等を使用し得る。
【００１３】
ホスト２として機能するサーバコンピュータの典型例としては、データセンター内のサーバコンピュータ（以下、サーバと称する）が挙げられる。
ホスト２がデータセンター内のサーバによって実現されるケースにおいては、このホスト（サーバ）２は、ネットワーク６０を介して複数のエンドユーザ端末（クライアント）６１に接続されてもよい。ホスト２は、これらエンドユーザ端末６１に対して様々なサービスを提供することができる。
【００１４】
ホスト（サーバ）２によって提供可能なサービスの例には、（１）システム稼働プラットフォームを各クライアント（各エンドユーザ端末６１）に提供するプラットホーム・アズ・ア・サービス（ＰａａＳ）、（２）仮想サーバのようなインフラストラクチャを各クライアント（各エンドユーザ端末６１）に提供するインフラストラクチャ・アズ・ア・サービス（ＩａａＳ）、等がある。
【００１５】
複数の仮想マシンが、このホスト（サーバ）２として機能する物理サーバ上で実行されてもよい。ホスト（サーバ）２上で走るこれら仮想マシンの各々は、この仮想マシンに対応するクライアント（エンドユーザ端末６１）に各種サービスを提供するように構成された仮想サーバとして機能することができる。各仮想マシンにおいては、この仮想マシンに対応するエンドユーザ端末６１によって使用される、オペレーティングシステムおよびユーザアプリケーションが実行される。
【００１６】
ホスト（サーバ）２においては、フラッシュトランスレーションレイヤ（ホストＦＴＬ）も実行される。このホストＦＴＬは、アクセス対象のデータを識別するためのデータ識別子（タグ）それぞれとフラッシュストレージデバイス３内の不揮発性メモリの物理アドレスそれぞれとの間のマッピングを管理するアドレス変換テーブルであるルックアップテーブル（ＬＵＴ）を含む。ホストＦＴＬは、このＬＵＴを使用することによって、フラッシュストレージデバイス３内の不揮発性メモリ上のデータ配置を知ることができる。
【００１７】
フラッシュストレージデバイス３は、ＮＡＮＤ型フラッシュメモリのような不揮発性メモリを含む。不揮発性メモリは、各々が複数のページを含む複数のブロックを含む。これらブロックの各々はデータを消去する単位であり、複数のページの各々はデータの書き込みおよび読み出しの単位である。
【００１８】
フラッシュストレージデバイス３は、ローレベルアブストラクションを実行することができる。ローレベルアブストラクションは不揮発性メモリのアブストラクションのための機能である。ローレベルアブストラクションは、データ配置を補助する機能等を含む。データ配置を補助する機能の例は、ホスト２からのユーザデータが書き込まれるべき書き込み先ブロックを割り当てる機能、ユーザデータの書き込み先位置（書き込み先ブロック、この書き込み先ブロック内の位置）を決定する機能、ユーザデータが書き込まれたこの書き込み先位置（ブロックアドレス、オフセット）を上位階層（ホスト２）に通知する機能、等を含んでいてもよい。
【００１９】
また、データ配置を補助する機能の例は、不揮発性メモリに既に書き込まれているユーザデータがコピーされるべきコピー先ブロックを割り当てる機能、ユーザデータのコピー先位置（コピー先ブロック、このコピー先ブロック内の位置）を決定する機能、ユーザデータがコピーされたこのコピー先位置（ブロックアドレス、オフセット）を上位階層（ホスト２）に通知する機能、等を含んでいてもよい。
【００２０】
フラッシュストレージデバイス３は、ホスト２から受信される様々なコマンドを実行する。これらコマンドには、フラッシュストレージデバイス３内の不揮発性メモリにデータを書き込むためのライトコマンド、不揮発性メモリからデータを読み出すためのリードコマンドが含まれる。本実施形態においては、各リードコマンドは、読み出すべきデータが格納されている記憶位置を示す物理アドレスを指定する。この物理アドレスは、読み出し対象のブロックのブロックアドレスと、この読み出し対象のブロック内の読み出し対象の記憶位置を示すオフセット（ブロック内オフセット）とによって表される。
【００２１】
フラッシュストレージデバイス３は、読み出し対象のブロックのブロックアドレスとこの読み出し対象のブロック内の読み出し対象の記憶位置を示すオフセットとを指定するリードコマンドそれぞれをホスト２から受信し、受信された各リードコマンドに応じてデータ読み出し動作を実行する。
【００２２】
図２はフラッシュストレージデバイス３とホスト２との間の役割分担を示す。
ホスト（サーバ）２においては、複数のエンドユーザにそれぞれ対応する複数の仮想マシン４０１が実行される。各仮想マシン４０１においては、対応するエンドユーザによって使用される、オペレーティングシステムおよびユーザアプリケーション４０２が実行される。
【００２３】
また、ホスト（サーバ）２においては、複数のユーザアプリケーション４０２にそれぞれ対応する複数のＩ／Ｏサービス４０３が実行される。これらＩ／Ｏサービス４０３には、論理ブロックアドレス（ＬＢＡ）ベースのブロックＩ／Ｏサービス、キー・バリュー・ストアサービスなどが含まれてもよい。各Ｉ／Ｏサービス４０３は、タグそれぞれとフラッシュストレージデバイス３の物理アドレスそれぞれとの間のマッピングを管理するルックアップテーブル（ＬＵＴ）を含む。
【００２４】
ここで、タグとは、アクセス対象のデータを識別可能な識別子を意味する。このタグの典型的な例は、これに限定されないが、ＬＢＡのような論理アドレスである。あるいは、キー・バリュー・ストアのキー、またはこのキーのハッシュ値、等がタグとして利用されてもよい。
【００２５】
フラッシュストレージデバイス３の物理アドレスは、フラッシュストレージデバイス３に含まれる不揮発性メモリ内の記憶位置（物理記憶位置）を特定するためのアドレスである。
ＬＢＡベースのブロックＩ／Ｏサービスにおいては、論理アドレス（ＬＢＡ）それぞれとフラッシュストレージデバイス３の物理アドレスそれぞれとの間のマッピングを管理するＬＵＴが使用されてもよい。
【００２６】
一方、キー・バリュー・ストアサービスにおいては、キー（またはキーのハッシュ値）それぞれとこれらキーに対応するデータが格納されているフラッシュストレージデバイス３の物理アドレスそれぞれとこれらキーに対応するデータそれぞれのデータ長との間のマッピングを管理するＬＵＴが使用されてもよい。
【００２７】
各エンドユーザは、使用すべきアドレッシング方法（ＬＢＡ、キー・バリュー・ストアのキー、このキーのハッシュ値、等）を選択することができる。
ホスト（サーバ）２においては、複数の仮想マシン４０１にそれぞれ対応する複数のライトバッファ（ＷＢ）４０４が管理されていてもよい。あるユーザアプリケーション４０２からのライトデータは、このユーザアプリケーション４０２に対応する仮想マシン４０１用のライトバッファ（ＷＢ）４０４に一時的に格納されてもよい。
【００２８】
ホスト（サーバ）２からフラッシュストレージデバイス３へのコマンドの送信およびフラッシュストレージデバイス３からホスト（サーバ）２へのコマンド完了のレスポンス等の返送は、ホスト（サーバ）２およびフラッシュストレージデバイス３の各々に存在するＩ／Ｏキュー５００を介して実行される。
【００２９】
フラッシュストレージデバイス３は、フラッシュストレージデバイス３内の不揮発性メモリを論理的に分割することによって得られる複数の領域それぞれをＱｏＳドメイン６０１として管理する。これらＱｏＳドメイン６０１の各々は、不揮発性メモリに含まれる複数のブロックの部分集合である。不揮発性メモリに含まれる複数のブロックの各々は一つのＱｏＳドメイン６０１のみに属し、同じブロックが異なるＱｏＳドメイン６０１に同時に属することはない。
【００３０】
これらＱｏＳドメイン６０１は、ＱｏＳドメインＩＤと称される識別子によってそれぞれ識別される。これらＱｏＳドメインＩＤは、これら複数の領域（複数のＱｏＳドメイン）をそれぞれアクセスするための複数の識別子として使用される。
本実施形態においては、各ライトコマンドは、データが書き込まれるべき領域（ＱｏＳドメイン）の識別子（ＱｏＳドメインＩＤ）を指定する。あるＱｏＳドメインＩＤを指定するライトコマンドをホスト２から受信した場合、フラッシュストレージデバイス３は、複数のＱｏＳドメイン６０１によって共有される共通ブロック群６０２のうちの一つのブロックを選択し、この選択したブロックを、このＱｏＳドメインＩＤを有するＱｏＳドメイン用の書き込み先ブロックとして割り当てる。
【００３１】
ここで、書き込み先ブロックとは、データが書き込まれるべきブロックを意味する。共通ブロック群６０２は、複数のＱｏＳドメイン６０１によって共有されるフリーブロックの集合を含む共通フリーブロック群である。
フリーブロックとは、新たな書き込み先ブロックとして再使用（再割り当て）可能な状態（フリー状態）のブロックを意味する。フリーブロックの典型的な例は、有効データを格納していないブロックである。有効データとは、ＬＢＡのようなタグに関連付けられている最新のデータを意味する。つまり、ホスト２のＬＵＴから最新のデータとしてリンクされているデータは有効データである。また、無効データとは、ＬＢＡのようタグに関連付けられていないデータを意味する。ホスト２のＬＵＴからリンクされていないデータは無効データである。例えば、あるＬＢＡに対応する更新データがフラッシュストレージデバイス３に書き込まれた場合には、このＬＢＡに対応する以前のデータは無効データとなる。
【００３２】
そして、フラッシュストレージデバイス３は、受信されたライトコマンドに関連付けられたデータを、このＱｏＳドメイン用に割り当てられた書き込み先ブロックに書き込む。なお、利用可能な書き込み先ブロックが既にこのＱｏＳドメイン用に割り当てられているならば、共通ブロック群６０２のうちの一つのブロック（フリーブロック）をこのＱｏＳドメイン用の書き込み先ブロックとして割り当てるという上述の動作を行う必要は無い。フラッシュストレージデバイス３は、受信されたライトコマンドに関連付けられたデータを、既に割り当てられているこの書き込み先ブロック内の次の利用可能ページに書き込む。
【００３３】
受信されたライトコマンドに関連付けられたデータが書き込み先ブロックに書き込まれると、フラッシュストレージデバイス３は、このデータのタグと、このデータが書き込まれた不揮発性メモリ内の記憶位置を示す物理アドレス（ブロックアドレス、オフセット）とをホスト２にアドレス記録要求として送出する。ブロックアドレスは、この書き込み先ブロックを識別するための識別子である。通常、不揮発性メモリは複数の不揮発性メモリチップによって構成されるので、あるブロックのブロックアドレスは、不揮発性メモリチップのチップ番号と、このチップ内のブロック番号とによって表されてもよい。オフセットは、この書き込み先ブロック内の記憶位置を示す。
【００３４】
このアドレス記録要求に応じて、ホスト２は、このデータのタグにこの物理アドレス（ブロックアドレス、オフセット）が関連付けられるようにＬＵＴを更新することができる。
各ＱｏＳドメインに含まれるブロックの各々について、ホスト２は、各ブロックに格納されているデータが有効データまたは無効データのいずれであるかを、ＬＵＴを使用して管理することができる。また、ホスト２は、既にデータが書き込まれている一つのブロックを新たな書き込み先ブロックとして再使用可能な状態（フリーブロック）に遷移させるためのコマンド（リユースコマンド）をフラッシュストレージデバイス３に送信することができる。
【００３５】
図３は、フラッシュストレージデバイス３の構成例を示す。
フラッシュストレージデバイス３は、コントローラ４および不揮発性メモリ（ＮＡＮＤ型フラッシュメモリ）５を備える。フラッシュストレージデバイス３は、ランダムアクセスメモリ、例えば、ＤＲＡＭ６も備えていてもよい。
【００３６】
ＮＡＮＤ型フラッシュメモリ５は、マトリクス状に配置された複数のメモリセルを含むメモリセルアレイを含む。ＮＡＮＤ型フラッシュメモリ５は、２次元構造のフラッシュメモリであってもよいし、３次元構造のフラッシュメモリであってもよい。
ＮＡＮＤ型フラッシュメモリ５のメモリセルアレイは、複数のブロックＢＬＫ０〜ＢＬＫｍ−１を含む。ブロックＢＬＫ０〜ＢＬＫｍ−１の各々は複数のページ（ここではページＰ０〜Ｐｎ−１）を含む。ブロックＢＬＫ０〜ＢＬＫｍ−１は、消去単位として機能する。ブロックは、「消去ブロック」、「物理ブロック」、または「物理消去ブロック」と称されることもある。ページＰ０〜Ｐｎ−１は、データ書き込み動作およびデータ読み込み動作の単位である。
【００３７】
コントローラ４は、ＴｏｇｇｌｅＮＡＮＤフラッシュインタフェース、オープンＮＡＮＤフラッシュインタフェース（ＯＮＦＩ）のような、ＮＡＮＤインタフェース１３を介して、不揮発性メモリであるＮＡＮＤ型フラッシュメモリ５に電気的に接続されている。コントローラ４は、ＮＡＮＤ型フラッシュメモリ５を制御するように構成されたメモリコントローラとして動作する。このコントローラ４は、Ｓｙｓｔｅｍ−ｏｎ−ａ−ｃｈｉｐ（ＳｏＣ）のような回路によって実現されてもよい。
【００３８】
ＮＡＮＤ型フラッシュメモリ５は、図４に示すように、複数のＮＡＮＤ型フラッシュメモリチップ（ＮＡＮＤ型フラッシュメモリダイ）を含んでいてもよい。個々のＮＡＮＤ型フラッシュメモリチップは独立して動作可能である。このため、ＮＡＮＤ型フラッシュメモリチップは、並列動作可能な単位として機能する。図４においては、ＮＡＮＤインタフェース１３に１６個のチャンネルＣｈ．１〜Ｃｈ．１６が接続されており、１６個のチャンネルＣｈ．１〜Ｃｈ．１６の各々に２つのＮＡＮＤ型フラッシュメモリチップが接続されている場合が例示されている。この場合、チャンネルＣｈ．１〜Ｃｈ．１６に接続された１６個のＮＡＮＤ型フラッシュメモリチップ＃１〜＃１６がバンク＃０として編成されてもよく、またチャンネルＣｈ．１〜Ｃｈ．１６に接続された残りの１６個のＮＡＮＤ型フラッシュメモリチップ＃１７〜＃３２がバンク＃１として編成されてもよい。バンクは、複数のメモリモジュールをバンクインタリーブによって並列動作させるための単位として機能する。図４の構成例においては、１６個のチャンネルと、２つのバンクを使用したバンクインタリーブとによって、最大３２個のＮＡＮＤ型フラッシュメモリチップを並列動作させることができる。
【００３９】
消去動作は、一つのブロック（物理ブロック）の単位で実行されてもよいし、並列動作可能な複数の物理ブロックの集合を含むブロックグループ（スーパーブロック）の単位で実行されてもよい。一つのブロックグループ（一つのスーパーブロック）は、これに限定されないが、ＮＡＮＤ型フラッシュメモリチップ＃１〜＃３２から一つずつ選択される計３２個の物理ブロックを含んでいてもよい。なお、ＮＡＮＤ型フラッシュメモリチップ＃１〜＃３２の各々はマルチプレーン構成を有していてもよい。例えば、ＮＡＮＤ型フラッシュメモリチップ＃１〜＃３２の各々が、２つのプレーンを含むマルチプレーン構成を有する場合には、一つのスーパーブロックは、ＮＡＮＤ型フラッシュメモリチップ＃１〜＃３２に対応する６４個のプレーンから一つずつ選択される計６４個の物理ブロックを含んでいてもよい。
【００４０】
図５には、３２個の物理ブロック（ここでは、ＮＡＮＤ型フラッシュメモリチップ＃１内の物理ブロックＢＬＫ２、ＮＡＮＤ型フラッシュメモリチップ＃２内の物理ブロックＢＬＫ３、ＮＡＮＤ型フラッシュメモリチップ＃３内の物理ブロックＢＬＫ７、ＮＡＮＤ型フラッシュメモリチップ＃４内の物理ブロックＢＬＫ４、ＮＡＮＤ型フラッシュメモリチップ＃５内の物理ブロックＢＬＫ６、…、ＮＡＮＤ型フラッシュメモリチップ＃３２内の物理ブロックＢＬＫ３）を含む一つのスーパーブロック（ＳＢ）が例示されている。
【００４１】
書き込み先ブロックは一つの物理ブロックであってもよいし、一つのスーパーブロックであってもよい。なお、一つのスーパーブロックが一つの物理ブロックのみを含む構成が利用されてもよく、この場合には、一つのスーパーブロックは一つの物理ブロックと等価である。
【００４２】
次に、図３のコントローラ４の構成について説明する。
コントローラ４は、ホストインタフェース１１、ＣＰＵ１２、ＮＡＮＤインタフェース１３、およびＤＲＡＭインタフェース１４、直接メモリアクセスコントローラ（ＤＭＡＣ）１５、ＥＣＣエンコード／デコード部１６等を含む。これらホストインタフェース１１、ＣＰＵ１２、ＮＡＮＤインタフェース１３、ＤＲＡＭインタフェース１４、ＤＭＡＣ１５、ＥＣＣエンコード／デコード部１６は、バス１０を介して相互接続される。
【００４３】
このホストインタフェース１１は、ホスト２との通信を実行するように構成されたホストインタフェース回路である。このホストインタフェース１１は、例えば、ＰＣＩｅコントローラ（ＮＶＭｅコントローラ）であってもよい。あるいは、フラッシュストレージデバイス３がＥｔｈｅｒｎｅｔ（登録商標）を介してホスト２に接続される構成においては、ホストインタフェース１１は、ＮＶＭｅ  ｏｖｅｒ  Ｆａｂｒｉｃｓ（ＮＶＭｅＯＦ）コントローラであってもよい。
【００４４】
ホストインタフェース１１は、ホスト２から様々なコマンドを受信する。これらコマンドには、ＱｏＳドメインクリエートコマンド、ライトコマンド、リードコマンド、コピーコマンド、イレーズコマンド、リユースコマンド、他の様々なコマンドが含まれる。
【００４５】
ＣＰＵ１２は、ホストインタフェース１１、ＮＡＮＤインタフェース１３、ＤＲＡＭインタフェース１４、ＤＭＡＣ１５、ＥＣＣエンコード／デコード部１６を制御するように構成されたプロセッサである。ＣＰＵ１２は、フラッシュストレージデバイス３の電源オンに応答してＮＡＮＤ型フラッシュメモリ５または図示しないＲＯＭから制御プログラム（ファームウェア）をＤＲＡＭ６にロードし、そしてこのファームウェアを実行することによって様々な処理を行う。なお、ファームウェアはコントローラ４内の図示しないＳＲＡＭ上にロードされてもよい。このＣＰＵ１２は、ホスト２からの様々なコマンドを実行するためのコマンド処理等を実行することができる。ＣＰＵ１２の動作は、ＣＰＵ１２によって実行される上述のファームウェアによって制御される。なお、コマンド処理の一部または全部は、コントローラ４内の専用ハードウェアによって実行してもよい。
【００４６】
ＣＰＵ１２は、ＱｏＳドメイン作成部２１、ライト制御部２２、リード制御部２３、およびコピー制御部２４として機能することができる。なお、これらＱｏＳドメイン作成部２１、ライト制御部２２、リード制御部２３、およびコピー制御部２４の各々一部または全部も、コントローラ４内の専用ハードウェアによって実現されてもよい。
【００４７】
ＱｏＳドメイン作成部２１は、ホスト２から受信される領域作成コマンド（ＱｏＳドメインクリエートコマンド）それぞれに応じて、各々が、ＮＡＮＤ型フラッシュメモリ５に含まれる複数のブロックの部分集合である複数の領域（ＱｏＳドメイン）を作成する。各ＱｏＳドメインクリエートコマンドは、作成すべき一つのＱｏＳドメインの容量を指定するパラメータを含んでいてもよい。ＱｏＳドメイン作成部２１は、受信されたＱｏＳドメインクリエートコマンドに応じて一つのＱｏＳドメインを作成し、共通ブロック群６０２のうちの所定個数のブロックをこのＱｏＳドメイン用に確保（予約）する。確保されるべきブロックの数は、受信されたＱｏＳドメインクリエートコマンドによって指定される容量によって決定される。
【００４８】
ライト制御部２２は、複数のＱｏＳドメインをアクセスするための複数のＱｏＳドメインＩＤのうちの第１のＱｏＳドメインＩＤを含むライトコマンドをホスト２から受信した場合、共通ブロック群６０２のうちの一つのブロックを第１のＱｏＳドメインＩＤに対応するＱｏＳドメイン用の書き込み先ブロックとして割り当てる。このＱｏＳドメイン用の書き込み先ブロックとして割り当てられるブロックは、物理ブロックであってもよいし、スーパーブロックであってもよい。
【００４９】
この場合、ライト制御部２２は、共通ブロック群６０２から、最小プログラム／イレーズサイクルカウントを有するブロック（物理ブロックまたはスーパーブロック）を選択してもよい。これにより、ＱｏＳドメイン間でウェアレベリングを実行することができる。利用可能な書き込み先ブロックが既にこのＱｏＳドメイン用に割り当てられているならば、共通ブロック群６０２のうちの一つのブロックをこのＱｏＳドメイン用の書き込み先ブロックとして割り当てる動作は実行されない。
【００５０】
ライト制御部２２は、ページ書き込み順序の制約、およびこの書き込み先ブロック内の不良ページ等を考慮して、データが書き込まれるべき、この書き込み先ブロック内の記憶位置を決定する。そして、ライト制御部２２は、受信されたライトコマンドに関連付けられたライトデータをこのＱｏＳドメイン用の書き込み先ブロックに書き込む。この場合、ライト制御部２２は、ホスト２からのライトデータのみならず、このライトデータとこのライトデータのタグの双方を書き込み先ブロックに書き込むことができる。
【００５１】
そして、ライト制御部２２は、ライトデータの識別子（タグ）と、この書き込み先ブロックのブロックアドレスと、ライトデータが書き込まれた、この書き込み先ブロック内の記憶位置（書き込み先位置）を示すオフセットとをホスト２に通知する。
一つの物理ブロックが書き込み先ブロックとして割り当てられたケースにおいては、ブロックアドレスは、この物理ブロックを識別するためのブロックアドレスである。このブロックアドレスはチップ番号とこのチップ内のブロック番号とによって表されてもよい。
【００５２】
一つのスーパーブロックが書き込み先ブロックとして割り当てられたケースにおいては、ブロックアドレスは、このスーパーブロックを識別するためのブロックアドレス（スーパーブロックアドレスとも云う）である。フラッシュストレージデバイス３内の全てのスーパーブロックに異なるスーパーブロックアドレスが付与されていてもよい。
【００５３】
オフセットは、書き込み先ブロックの先頭から書き込み先位置までのオフセット、つまり書き込み先ブロックの先頭に対する書き込み先位置のオフセットを示す。書き込み先ブロックの先頭から書き込み先位置までのオフセットのサイズは、あるサイズを有する粒度の倍数で表されてもよい。あるいは、オフセットは、一つのページのページアドレスと、このページ内のオフセットとによって表されてもよい。
【００５４】
同様に、ライト制御部２２は、複数のＱｏＳドメインをアクセスするための複数のＱｏＳドメインＩＤのうちの第２のＱｏＳドメインＩＤを含むライトコマンドをホスト２から受信した場合、共通ブロック群６０２のうちの一つのブロックを第２のＱｏＳドメインＩＤに対応するＱｏＳドメイン用の書き込み先ブロックとして割り当てる。ライト制御部２２は、受信されたライトコマンドに関連付けられたライトデータをこのＱｏＳドメイン用の書き込み先ブロックに書き込む。そして、ライト制御部２２は、ライトデータの識別子（タグ）と、この書き込み先ブロックのブロックアドレスと、ライトデータが書き込まれた、この書き込み先ブロック内の記憶位置を示すオフセットとをホスト２に通知する。
【００５５】
このようにして、本実施形態では、複数のＱｏＳドメインそれぞれに対応する複数の書き込み先ブロックが割り当てられる。そして、あるＱｏＳドメインＩＤを指定するライトコマンドに関連付けられたライトデータは、このＱｏＳドメインＩＤに対応するＱｏＳドメイン用の書き込み先ブロックに書き込まれる。また、別のＱｏＳドメインＩＤを指定するライトコマンドに関連付けられたライトデータは、この別のＱｏＳドメインＩＤに対応するＱｏＳドメイン用の書き込み先ブロックに書き込まれる。
【００５６】
これにより、異なるユーザアプリケーションからのライトデータを異なる書き込み先ブロックに書き込むことができる。よって、複数のユーザアプリケーションからのライトデータを互い異なるブロックに書き込むというデータ配置のためのホスト２側の負担を軽減することができる。
【００５７】
さらに、ライト制御部２２は、第１のＱｏＳドメインＩＤを含むライトコマンドの実行中にこの第１のＱｏＳドメインＩＤに対応するＱｏＳドメイン用の書き込み先ブロック全体がデータで満たされた場合、新たな書き込み先ブロックを自動的に割り当てる動作を実行する。
【００５８】
すなわち、第１のＱｏＳドメインＩＤを含むライトコマンドに関連付けられたライトデータの一部分である第１のデータ部分の書き込みによって第１のＱｏＳドメインＩＤに対応するＱｏＳドメイン用の現在の書き込み先ブロック全体がデータで満たされた場合、ライト制御部２２は、共通ブロック群６０２のうちの一つのブロックを第１のＱｏＳドメインＩＤに対応するＱｏＳドメイン用の新たな書き込み先ブロックとして割り当てる。そして、ライト制御部２２は、このライトデータの残り部分である第２のデータ部分を、この新たな書き込み先ブロックに書き込む。
【００５９】
同様に、第２のＱｏＳドメインＩＤを含むライトコマンドに関連付けられたライトデータの一部分である第１のデータ部分の書き込みによって第２のＱｏＳドメインＩＤに対応するＱｏＳドメイン用の現在の書き込み先ブロック全体がデータで満たされた場合、ライト制御部２２は、共通ブロック群６０２のうちの一つのブロックを第２のＱｏＳドメインＩＤに対応するＱｏＳドメイン用の新たな書き込み先ブロックとして割り当てる。そして、ライト制御部２２は、このライトデータの残り部分である第２のデータ部分を、この新たな書き込み先ブロックに書き込む。
【００６０】
これにより、たとえライトコマンドの実行中に現在の書き込み先ブロックが使い切られた場合であっても、ホスト２にエラーを通知することなく、このライトコマンドに対応する書き込み動作を継続することができる。よって、データが書き込まれるべきブロックを現在の書き込み先ブロックから別のブロックに変更するためのホスト２側の負担を軽減することができる。また、ホスト２はブロック境界を意識すること無く、ライトコマンドそれぞれを発行することができる。
【００６１】
なお、先行するライトコマンドによって現在の書き込み先ブロック内の複数のページの中の幾つかのページにデータが既に書き込まれている場合には、新たなライトコマンドに関連付けられたライトデータは、既にデータが書き込まれているページに後続する一つ以上のページに書き込まれる。あるライトコマンドに関連付けられたライトデータ全体が現在の書き込み先ブロックに書き込まれ、且つ現在の書き込み先ブロックが使い切られた場合には、このＱｏＳドメイン用の書き込み先ブロックが割り当てられていない状態となる。この状態で、このＱｏＳドメインを指定する新たなライトコマンドが受信されると、このＱｏＳドメイン用の新たな書き込み先ブロックが割り当てられる。
【００６２】
リード制御部２３は、リード対象のＱｏＳドメインのＱｏＳドメインＩＤと、物理アドレス（すなわち、ブロックアドレスおよびオフセット）とを指定するリードコマンドをホスト２から受信した場合、これらブロックアドレスおよびオフセットに基づいてＮＡＮＤ型フラッシュメモリ５からデータをリードする。リード対象のブロックは、ブロックアドレスによって特定される。このブロック内のリード対象の記憶位置は、オフセットによって特定される。
【００６３】
コピー制御部２４は、ホスト２から受信されるコピーコマンドに応じて、あるＱｏＳドメイン用に割り当てられているあるブロック内に格納されているデータを、このＱｏＳドメイン用のまたは別のＱｏＳドメイン用のブロック（コピー先ブロック）にコピーする。コピー先ブロックは、不揮発性メモリ内に既に書き込まれているデータが書き込まれるべき（コピーされるべき）書き込み先ブロックである。このコピーコマンドは、コピー元ＱｏＳドメインのＱｏＳドメインＩＤと、コピー元ブロックのブロックアドレスと、コピー先ＱｏＳドメインのＱｏＳドメインＩＤ（コピー先ＱｏＳドメインＩＤ）とを指定してもよい。コピー元ブロックは一つの物理ブロックであってもよいし、一つのスーパーブロックであってもよい。
【００６４】
例えば、コピー制御部２４は、第１のＱｏＳドメインＩＤに対応するＱｏＳドメインに属するブロックのうちのコピー元ブロックのブロックアドレスと、第１のＱｏＳドメインＩＤを示すコピー先ＱｏＳドメインＩＤとを含むコピーコマンドをホスト２から受信した場合、共通ブロック６０２のうちの一つのブロックを、この第１のＱｏＳドメインＩＤに対応するＱｏＳドメイン用のコピー先ブロックとして割り当てる。このＱｏＳドメイン用のコピー先ブロックとして割り当てられるブロックは、物理ブロックであってもよいし、スーパーブロックであってもよい。
【００６５】
この場合、コピー制御部２４は、共通ブロック群６０２から、最小プログラム／イレーズサイクルカウントを有するブロック（物理ブロックまたはスーパーブロック）を選択してもよい。これにより、ＱｏＳドメイン間でウェアレベリングを実行することができる。利用可能なコピー先ブロックが既にこのＱｏＳドメイン用に割り当てられているならば、共通ブロック群６０２のうちの一つのブロックをこのＱｏＳドメイン用のコピー先ブロックとして割り当てる動作は実行されない。
【００６６】
コピー制御部２４は、コピー元ブロックからコピー先ブロックにコピー対象データをコピーする。そして、コピー制御部２４は、コピー対象データの識別子（タグ）と、コピー先ブロックのブロックアドレスと、コピー対象データがコピーされた、コピー先ブロック内の位置を示すオフセットとをホスト２に通知する。
【００６７】
このように、第１のＱｏＳドメインＩＤに対応するＱｏＳドメインにおいては、書き込み先ブロックとは異なる別のブロックがコピー先ブロックとして割り当てられる。これにより、ホスト２の制御なしで、ホスト２からのデータが書き込まれる書き込み先ブロックとＮＡＮＤ型フラッシュメモリ５に既に書き込まれているデータがコピーされるコピー先ブロックとを分離するというデータ配置を実現することができる。
【００６８】
また、コピー制御部２４は、第２のＱｏＳドメインＩＤに対応するＱｏＳドメインに属するブロックのうちのコピー元ブロックのブロックアドレスと、第２のＱｏＳドメインＩＤを示すコピー先ＱｏＳドメインＩＤとを含むコピーコマンドをホスト２から受信した場合、共通ブロック６０２のうちの一つのブロックを、この第２のＱｏＳドメインＩＤに対応するＱｏＳドメイン用のコピー先ブロックとして割り当てる。
【００６９】
コピー制御部２４は、コピー元ブロックからコピー先ブロックにコピー対象データをコピーする。そして、コピー制御部２４は、コピー対象データの識別子（タグ）と、コピー先ブロックのブロックアドレスと、コピー対象データがコピーされた、コピー先ブロック内の位置を示すオフセットとをホスト２に通知する。
【００７０】
このようにして、本実施形態では、ＱｏＳドメイン毎に、書き込み先ブロックと、この書き込み先ブロックとは異なるコピー先ブロックとが割り当てられる。
一般に、ホスト２によって書き込まれた直後のデータ（新しいデータ）ほど更新されやすく、ホスト２によって書き込まれてからの経過時間が長いデータ（古いデータ）ほど、更新されにくい、という傾向がある。コピー対象のデータは、ＮＡＮＤ型フラッシュメモリ５に既に書き込まれているデータである。このため、コピー対象のデータは、通常、古いデータである場合が多い。
【００７１】
したがって、ホストライトとコピー用のライトとを分離することにより、新しいデータ（高い更新頻度を有するデータ）と古いデータ（低い更新頻度を有するデータ）とが同じブロックに混在されることを抑制することができる。
新しいデータ（高い更新頻度を有するデータ）と古いデータ（低い更新頻度を有するデータ）との混在は、フラッシュストレージデバイス３のライトアンプリフィケーションを増加させる要因となり得る。
【００７２】
なぜなら、新しいデータと古いデータとが混在するブロックにおいては、新しいデータの更新によってブロック内の一部の領域だけが早いタイミングで無効化される一方、このブロック内の残りの領域（古いデータ）は有効状態に長い間維持されるからである。
【００７３】
もし新しいデータのみによってブロックが満たされていたならば、このブロック内の全てのデータがそれらデータの更新（書き替え）によって、比較的速いタイミングで無効化される可能性が高い。したがって、このブロックは、ガベージコレクション動作を実行すること無しで、このブロックに対する消去動作を実行することのみによって、再使用することが可能となる。
【００７４】
一方、古いデータのみによってブロックが満たされているならば、このブロック内の全てのデータは、長い間、有効状態に維持される。したがって、このブロックは、長い間、ガベージコレクション動作の対象とならない可能性が高い。
ライトアンプリフィケーションの増加は、ブロックそれぞれの書き換え回数（プログラム／イレーズサイクルの数）の増加を引き起こす。つまり、ライトアンプリフィケーション（ＷＡ）が大きい程、ブロックの書き換え回数が、その書き換え回数の上限値に速く達しやすくなる。この結果、フラッシュストレージデバイス３の寿命の劣化が引き起こされる。
【００７５】
本実施形態では、ＱｏＳドメイン毎に、書き込み先ブロックと、この書き込み先ブロックとは異なるコピー先ブロックとがフラッシュストレージデバイス３によって割り当てられる。したがって、データが書き込まれるべきブロックとデータがコピーされるべきブロックとを使い分けるためのホスト２側の処理無しで、ライトアンプリフィケーションを低減することができる。
【００７６】
さらに、コピー制御部２４は、第１のＱｏＳドメインＩＤに対応するＱｏＳドメインをコピー先ＱｏＳドメインとして指定するコピーコマンドの実行中にこの第１のＱｏＳドメインＩＤに対応するＱｏＳドメイン用のコピー先ブロック全体がデータで満たされた場合、新たなコピー先ブロックを自動的に割り当てる動作を実行する。
【００７７】
すなわち、コピー元ブロック内のコピー対象データの一部分である第３のデータ部分のコピーによって第１のＱｏＳドメインＩＤに対応するＱｏＳドメイン用の現在のコピー先ブロック全体がデータで満たされた場合、コピー制御部２４は、共通ブロック群６０２のうちの一つのブロックを第１のＱｏＳドメインＩＤに対応するＱｏＳドメイン用の新たなコピー先ブロックとして割り当てる。そして、コピー制御部２４は、このコピー対象データの残り部分である第４のデータ部分を、この新たなコピー先ブロックにコピーする。
【００７８】
同様に、第２のＱｏＳドメインＩＤに対応するＱｏＳドメインをコピー先ＱｏＳドメインとして指定するコピーコマンドの実行中にこの第２のＱｏＳドメインＩＤに対応するＱｏＳドメイン用のコピー先ブロック全体がデータで満たされた場合も、コピー制御部２４は、この第２のＱｏＳドメインＩＤに対応するＱｏＳドメイン用の新たなコピー先ブロックを自動的に割り当てる動作を実行する。
【００７９】
これにより、たとえコピーコマンドの実行中に現在のコピー先ブロックが使い切られた場合であっても、ホスト２にエラーを通知することなく、このコピーコマンドに対応するコピー動作を継続することができる。よって、データがコピーされるべきブロックを現在のコピー先ブロックから別のブロックに変更するためのホスト２側の負担を軽減することができる。
【００８０】
なお、先行するコピーコマンドに基づくデータコピー動作によって現在のコピー先ブロック内の複数のページの中の幾つかのページがデータで満たされている場合には、新たなコピーコマンドに基づくコピー対象データは、既にデータが書き込まれているページに後続する一つ以上のページに書き込まれる。あるコピーコマンドに基づくコピー対象データ全体が現在のコピー先ブロックにコピーされ、且つ現在のコピー先ブロックが使い切られた場合には、このＱｏＳドメイン用のコピー先ブロックが割り当てられていない状態となる。この状態で、このＱｏＳドメインをコピー先ＱｏＳドメインとして指定する新たなコピーコマンドが受信されると、このＱｏＳドメイン用の新たなコピー先ブロックが割り当てられる。
【００８１】
ＮＡＮＤインタフェース１３は、ＣＰＵ１２の制御の下、ＮＡＮＤ型フラッシュメモリ５を制御するように構成されたメモリ制御回路である。
ＤＲＡＭインタフェース１４は、ＣＰＵ１２の制御の下、ＤＲＡＭ６を制御するように構成されたＤＲＡＭ制御回路である。ＤＲＡＭ６の記憶領域は、ブロック管理テーブル３２を格納するために使用される。また、ＤＲＡＭ６の記憶領域は、ライトデータ等を一時的に格納するための内部バッファとしても利用され得る。なお、内部バッファがフラッシュストレージデバイス３内に存在しない、または内部バッファの容量がほぼゼロに近い、というバッファレス構成がフラッシュストレージデバイス３に適用されてもよい。
【００８２】
ブロック管理テーブル３２は、ＮＡＮＤ型フラッシュメモリ５内の複数のブロックそれぞれに対応する複数の管理テーブルを含む。各管理テーブルは、この管理テーブルに対応するブロックを管理するための管理情報（メタデータ）を格納するために使用される。メタデータは、これに限定されないが、書き換え回数（プログラム／イレーズサイクルの数）、オープン／クローズ状態、書き込み先ページ範囲、等を含んでいてもよい。オープン／クローズ状態は、このブロックがオープン状態またはクローズ状態のいずれであるかを示す。オープン状態は、このブロックが書き込み先ブロックとして使用中の状態を示す。書き込み先ブロックには、ホスト２からのデータが書き込まれるホスト書き込み用の書き込み先ブロックと、不揮発性メモリ内に既に書き込まれているデータのコピー用の書き込み先ブロック（コピー先ブロック）とがある。
【００８３】
クローズ状態は、ブロックがデータで満たされてアクティブブロックとして管理されている状態を示す。書き込み先ページ範囲は、どのページからどのページまでが現在書き込み（プログラム）動作中であるかを示す。
ＤＭＡＣ１５は、ＣＰＵ１２の制御の下、ホスト２内のメモリ（ライトバッファ）とＤＲＡＭ６（内部バッファ）との間のデータ転送を実行する。ホスト２のライトバッファから内部バッファにライトデータを転送すべき場合には、ＣＰＵ１２は、ライトバッファ上の位置を示す転送元アドレス、データサイズ、内部バッファ上の位置を示す転送先アドレスをＤＭＡＣ１５に対して指定する。
【００８４】
ＥＣＣエンコード／デコード部１６は、ＮＡＮＤ型フラッシュメモリ５にデータをライトすべき時、書き込むべきライトデータをエンコード（ＥＣＣエンコード）することによってこのデータにエラー訂正コード（ＥＣＣ）を付加する。ＮＡＮＤ型フラッシュメモリ５からデータがリードされた時、ＥＣＣエンコード／デコード部１６は、リードされたデータに付加されているＥＣＣを使用して、このデータのエラー訂正を行う（ＥＣＣデコード）。
【００８５】
図６は、フラッシュストレージデバイス３に適用されるＱｏＳドメインクリエートコマンドを示す。
ＱｏＳドメインクリエートコマンドは、ＱｏＳドメインを作成するためのコマンド（領域作成コマンド）である。このＱｏＳドメインクリエートコマンドは、コマンドＩＤ、ＱｏＳドメインＩＤ、容量を含んでもよい。
【００８６】
コマンドＩＤはこのコマンド（ここではこのＱｏＳドメインクリエートコマンド）の固有の識別子である。ＱｏＳドメインＩＤは、作成すべきＱｏＳドメインの識別子である。容量は、作成すべきＱｏＳドメイン用に確保すべき容量を示す。コントローラ４は、この容量に対応する個数のブロックを共通ブロック群６０２から確保し、このＱｏＳドメインＩＤを指定するライトコマンドに応じて、この確保されたブロックのうちの一つのブロックをこのＱｏＳドメイン用の書き込み先ブロックとして割り当てる。
【００８７】
図７は、フラッシュストレージデバイス３に適用されるライトコマンドを示す。
ライトコマンドは、フラッシュストレージデバイス３にデータの書き込みを要求するコマンドである。このライトコマンドは、コマンドＩＤ、ＱｏＳドメインＩＤ、タグ、長さ、ライトバッファアドレス、等を含んでもよい。
【００８８】
コマンドＩＤはこのコマンド（ここではこのライトコマンド）の固有の識別子である。ＱｏＳドメインＩＤは、データが書き込まれるべきＱｏＳドメインを一意に識別可能な識別子である。あるエンドユーザに対応するアプリケーションからのライト要求に応じてホスト２から送信されるライトコマンドは、このエンドユーザに対応するＱｏＳドメインを指定するＱｏＳドメインＩＤを含む。
【００８９】
タグは、書き込まれるべきライトデータを識別するための識別子である。このタグは、上述したように、ＬＢＡのような論理アドレスであってもよいし、キー・バリュー・ストアのキーであってもよいし、このキーのハッシュ値であってもよい。
長さは、書き込まれるべきライトデータの長さを示す。この長さ（データ長）は、上述の粒度（Ｇｒａｉｎとしても参照される）の数によって指定されてもよいし、ＬＢＡの数によって指定されてもよいし、あるいはバイトによって指定されてもよい。
【００９０】
ライトバッファアドレスは、書き込まれるべきライトデータが格納されているホストメモリ（ホスト２のライトバッファ）内の位置を示す。ライトバッファアドレスは、データポインタとしても参照される。
コントローラ４は、共通ブロック群６０２に加え、各ＱｏＳドメインに対応するアクティブブロックリスト（アクティブブロックプール）も管理することができる。
【００９１】
各ブロックの状態は、有効データを格納しているアクティブブロック（クローズ状態のブロック）と、有効データを格納しておらず書き込み先ブロックとして再使用可能なフリーブロックとに大別される。あるＱｏＳドメインにおいては、アクティブブロックである各ブロックは、このＱｏＳドメインに対応するアクティブブロックリストによって管理される。一方、各ＱｏＳドメインの各フリーブロックは、共通ブロック群６０２によって管理される。
【００９２】
あるＱｏＳドメインＩＤを指定するライトコマンドをホスト２から受信した時、コントローラ４は、共通ブロック群６０２内の一つのブロック（フリーブロック）を選択し、選択されたブロックを、このＱｏＳドメインに書き込み先ブロックとして割り当てる。さらに、コントローラ４は、この書き込み先ブロック内の位置（書き込み先位置）を決定する。書き込み先ブロック内の書き込み先位置は、ページ書き込み順序の制約および不良ページ等を考慮して決定される。そして、コントローラ４は、ホスト２からのデータを、書き込み先ブロック内の書き込み先位置に書き込む。
【００９３】
この書き込み先ブロック全体がユーザデータで満たされたならば、コントローラ４は、この書き込み先ブロックをこのＱｏＳドメインのアクティブブロックリスト（アクティブブロックプール）に移動する。そして、コントローラ４は、共通ブロック群６０２内の一つのブロック（フリーブロック）を再び選択し、選択されたブロックをこのＱｏＳドメインに新たな書き込み先ブロックとして割り当てる。
【００９４】
あるＱｏＳドメインに割り当て可能なブロックの数の上限は、このＱｏＳドメインの容量に対応するブロックの個数までに制限される。共通ブロック群６０２から一つのブロックがこのＱｏＳドメインに割り当てられると、コントローラ４は、このＱｏＳドメインに割り当て可能なブロックの現在の個数を１だけ減らす。このＱｏＳドメインの一つのブロックを指定するリユースコマンド（またはイレーズコマンド）によってこのブロックが共通ブロック群６０２に返却されると、コントローラ４は、このＱｏＳドメインに割り当て可能なブロックの現在の個数を１だけ増やす。
【００９５】
図８は、フラッシュストレージデバイス３からホスト２に送られるアドレス記録要求を示す。
アドレス記録要求は、ライトコマンドに関連付けられたライトデータが書き込まれたＮＡＮＤ型フラッシュメモリ５内の記憶位置（物理記憶位置）を示す物理アドレスをホスト２に通知するために使用される。このアドレス記録要求は、ＱｏＳドメインＩＤ、タグ、物理アドレス、長さを含んでもよい。
【００９６】
ＱｏＳドメインＩＤは、ライトデータが書き込まれたＱｏＳドメインを識別する識別子である。タグは、図７のライトコマンドに含まれていたタグである。物理アドレスは、ライトコマンドに関連付けられたライトデータが書き込まれた物理記憶位置を示す。物理アドレスは、ブロックアドレスとオフセットとによって表される。長さは、書き込まれたライトデータの長さを示す。
【００９７】
一つのライトコマンドに関連付けられたライトデータの一部分が現在の書き込み先ブロックＢＬＫｍのオフセットｎに書き込まれ、このライトデータの残り部分が新たに割り当てられた書き込み先ブロックＢＬＫｘのオフセット０に書き込まれる場合もある。この場合には、アドレス記録要求は、物理アドレス（ＢＬＫｍ、オフセットｎ）、ＢＬＫｍに書き込まれたデータの長さＬ１、物理アドレス（ＢＬＫｘ、オフセット０）、ＢＬＫｘに書き込まれたデータの長さＬ２、を含む。また、アドレス記録要求は、２つのタグ、つまりＢＬＫｍに書き込まれたデータを識別するタグ（例えばＬＢＡｊ）およびＢＬＫｘに書き込まれたデータを識別するタグ（例えばＬＢＡｋ）を含んでいてもよい。ＬＢＡｊはライトコマンドに含まれていたタグ（ＬＢＡ）である。ＬＢＡｋは、長さＬ１に対応するＬＢＡの数をＬＢＡｋに加えることによって得られる値であってもよい。
【００９８】
フラッシュストレージデバイス３から受信されるアドレス記録要求に基づいて、ホスト２は、ライトデータが書き込まれた記憶位置を示す物理アドレス（ブロックアドレス、オフセット）がこのライトデータのタグ（例えばＬＢＡ）に関連付けられるように、ＬＵＴを更新することができる。
【００９９】
例えば、ＱｏＳドメインＩＤ＝＃１、タグ＝ＬＢＡ１０、ブロックアドレス＝ＢＬＫ１、オフセット＝０、長さ＝１を示すアドレス記録要求を受信した場合、ホスト２は、ＬＢＡ１０に物理アドレス（ブロックアドレスＢＬＫ１、オフセット０）が関連付けられるように、ＱｏＳドメインＩＤ＃１に対応するＬＵＴを更新する。
【０１００】
また、例えば、ＱｏＳドメインＩＤ＝＃１、タグ＝ＬＢＡ１０、ブロックアドレス＝ＢＬＫ１、オフセット＝０、長さ＝２を示すアドレス記録要求を受信した場合、ホスト２は、ＬＢＡ１０に物理アドレス（ブロックアドレスＢＬＫ１、オフセット０）が関連付けられ、且つＬＢＡ１１に物理アドレス（ブロックアドレスＢＬＫ１、オフセット１）が関連付けられるように、ＱｏＳドメインＩＤ＃１に対応するＬＵＴを更新する。
【０１０１】
また、ホスト２は、各ＱｏＳドメインに対応するＬＵＴの内容に基づいて、各ＱｏＳドメインで使用されているブロック毎に有効／無効管理情報を管理することができる。あるブロックに対応する有効／無効管理情報は、このブロックに格納されている複数のデータそれぞれが有効データであるか無効データであるかを示す。
【０１０２】
図９は、フラッシュストレージデバイス３に適用されるリードコマンドを示す。
リードコマンドは、フラッシュストレージデバイス３にデータの読み出しを要求するコマンドである。このリードコマンドは、コマンドＩＤ、ＱｏＳドメインＩＤ、物理アドレス、長さ、リードバッファアドレスを含んでもよい。
【０１０３】
コマンドＩＤはこのコマンド（ここではこのリードコマンド）の固有の識別子である。ＱｏＳドメインＩＤは、読み出されるべきデータが格納されているＱｏＳドメインを識別する識別子である。物理アドレスは、読み出されるべきデータが格納されている物理記憶位置を示す。物理アドレスは、ブロックアドレスとオフセットとによって表される。このブロックアドレスは、読み出し対象のブロックのブロックアドレスである。オフセットは、読み出し対象のブロック内の読み出し対象の記憶位置を示す。長さは、読み出されるべきデータの長さを示す。リードバッファアドレスは、読み出されたデータが転送されるべきホストメモリ（ホスト２のリードバッファ）内の位置を示す。
【０１０４】
図１０は、フラッシュストレージデバイス３に適用されるコピーコマンドを示す。
コピーコマンドは、ＮＡＮＤ型フラッシュメモリ５に既に書き込まれているデータをＮＡＮＤ型フラッシュメモリ５内の別の記憶位置にコピーすることをフラッシュストレージデバイス３に要求するコマンドである。本実施形態では、２種類のコピーコマンドがサポートされていてもよい。
【０１０５】
図１０のコピーコマンドは第１タイプのコピーコマンドである。第１タイプのコピーコマンドは、特定のコピー元ブロックに含まれる有効データそれぞれをコピーするために使用される。図１０のコピーコマンドは、コマンドＩＤ、ソースＱｏＳドメインＩＤ、ソース物理アドレス、ディスティネーションＱｏＳドメインＩＤを含んでもよい。さらに、このコピーコマンドは、コピーすべき有効データの数を指定するパラメータをコピー終了条件として含んでいてもよい。
【０１０６】
コマンドＩＤはこのコマンド（この第１タイプのコピーコマンド）の固有の識別子である。ソースＱｏＳドメインＩＤは、コピー元ＱｏＳドメインを識別する識別子である。ソース物理アドレスは、コピーすべきデータが格納されているコピー元ブロックのブロックアドレスを示す。ディスティネーションＱｏＳドメインＩＤはコピー先ＱｏＳドメインを識別する識別子である。コピー先ＱｏＳドメインはコピー元ＱｏＳドメインと同じＱｏＳドメインであってもよいし、コピー元ＱｏＳドメインとは異なるＱｏＳドメインであってもよい。
【０１０７】
あるディスティネーションＱｏＳドメインＩＤを指定するコピーコマンドをホスト２から受信した時、コントローラ４は、共通ブロック群６０２内の一つのブロック（フリーブロック）を選択し、選択されたブロックを、このディスティネーションＱｏＳドメインＩＤに対応するコピー先ＱｏＳドメインにコピー先ブロックとして割り当てる。コントローラ４は、コピー元ブロックからコピー先ブロックにコピー対象データをコピーする。
【０１０８】
コピー対象データは、ホスト２から通知されるマップ情報に基づいて決定される。このマップ情報（有効マップ）は、コピー元ブロックに含まれる各データが有効データまたは無効データのいずれであるかを示す。マップ情報は、コピーコマンド内に含まれていてもよいし、コピーコマンドとは別個にホスト２からフラッシュストレージデバイス２に送られてもよい。コントローラ４は、このマップ情報に基づいて、コピー元ブロック内の有効データそれぞれをコピー先ブロックにコピーする。
【０１０９】
コントローラ４は、コピー元ブロックからコピー先ブロックへの全ての有効データそれぞれのコピーが完了するまでデータコピー動作を繰り返し実行してもよい。あるいは、このコピーコマンドが、コピーすべき有効データの数を指定するパラメータを含む場合には、コントローラ４は、このパラメータによって指定された数の有効データのコピーが完了した時点でデータコピー動作を終了してもよい。
【０１１０】
このコピー先ブロック全体がデータで満たされたならば、コントローラ４は、このコピー先ブロックをこのディスティネーションＱｏＳドメインのアクティブブロックリスト（アクティブブロックプール）に移動する。そして、コントローラ４は、共通ブロック群６０２内の一つのブロック（フリーブロック）を再び選択し、選択されたブロックをこのディスティネーションＱｏＳドメインに新たなコピー先ブロックとして割り当てる。
【０１１１】
図１１は、セット・有効マップコマンドを示す。
セット・有効マップコマンドは、マップ情報（有効マップ）をフラッシュストレージデバイス３に通知するためのコマンドである。セット・有効マップコマンドは、コマンドＩＤ、ソースＱｏＳドメインＩＤ、ソース物理アドレス、ビットマップを含んでもよい。
【０１１２】
コマンドＩＤはこのコマンド（このセット・有効マップコマンド）の固有の識別子である。ソースＱｏＳドメインＩＤは、コピー元ＱｏＳドメインを識別する識別子である。ソース物理アドレスは、コピーすべきデータが格納されているコピー元ブロックのブロックアドレスを示す。ビットマップは、コピー元ブロックに含まれる各データが有効データまたは無効データのいずれであるかを示す。
【０１１３】
図１２は、フラッシュストレージデバイス３からホスト２に送られるアドレス変更要求を示す。
アドレス変更要求は、コピーされたデータの新たな物理アドレスをホストに通知するために使用される。つまり、アドレス変更要求は、コピー対象データの識別子（タグ）、コピー対象データがコピーされたコピー先ブロックのブロックアドレス、コピー対象データがコピーされた、コピー先ブロック内の位置を示すオフセット、等をホスト２に通知するために使用される。
【０１１４】
このアドレス変更要求は、旧ＱｏＳドメインＩＤ、タグ、旧物理アドレス、新ＱｏＳドメインＩＤ、新物理アドレスを含んでもよい。
旧ＱｏＳドメインＩＤは、コピー元ＱｏＳドメインを識別する識別子である。タグは、コピーされたデータの識別子である。複数のデータがコピーされた場合には、アドレス変更要求は、これら複数のデータに対応する複数のタグを含む。
【０１１５】
本実施形態では、データ書き込み動作においては、コントローラ４は、ライトデータとこのライトデータのタグの双方を書き込み先ブロックに書き込むことができる。したがって、データコピー動作においては、コントローラ４は、コピー対象データとこのコピー対象データのタグの双方をコピー元ブロックからコピー先ブロックにコピーすることができる。コントローラ４は、コピー対象データと一緒にコピー元ブロックからコピー先ブロックにコピーされたタグを、コピーされたデータのタグとしてホスト２に通知することができる。
【０１１６】
旧物理アドレスは、コピー対象データが格納されているコピー元物理記憶位置を示す。コピー元物理記憶位置は、コピー元ブロックのブロックアドレスと、コピー対象データが格納されている、コピー元ブロック内の記憶位置を示すオフセットによって表される。複数のデータがコピーされた場合には、アドレス変更要求は、これら複数のデータに対応する複数の旧物理アドレスを含む。
【０１１７】
新ＱｏＳドメインＩＤは、コピー先ＱｏＳドメインを識別する識別子である。新物理アドレスは、コピー対象データがコピーされたコピー先物理記憶位置を示す。コピー先物理記憶位置は、コピー先ブロックのブロックアドレスと、コピー対象データがコピーされた、コピー先ブロック内の記憶位置を示すオフセットとによって表される。複数のデータがコピーされた場合には、アドレス変更要求は、これら複数のデータに対応する複数の新物理アドレスを含む。
【０１１８】
図１３は、コピー元ブロックのブロックアドレスと、コピー対象データが格納されている、コピー元ブロック内の記憶位置を示すオフセットと、コピー対象データの長さとを指定する第２のタイプのコピーコマンドを示す。第２のタイプのコピーコマンドはマップ情報を使用しない。
【０１１９】
この第２のタイプのコピーコマンドは、コマンドＩＤ、ソースＱｏＳドメインＩＤ、ソース物理アドレス、長さ、ディスティネーションＱｏＳドメインＩＤを含んでいてもよい。
コマンドＩＤはこのコマンド（この第２タイプのコピーコマンド）の固有の識別子である。ソースＱｏＳドメインＩＤは、コピー元ＱｏＳドメインを識別する識別子である。ソース物理アドレスは、コピー元ブロックのブロックアドレスと、コピーすべきコピー対象データが格納されている、コピー元ブロック内の記憶位置を示すオフセットとによって表される。長さは、コピー対象データの長さを示す。ディスティネーションＱｏＳドメインＩＤはコピー先ＱｏＳドメインを識別する識別子である。コピー先ＱｏＳドメインはコピー元ＱｏＳドメインと同じＱｏＳドメインであってもよいし、コピー元ＱｏＳドメインとは異なるＱｏＳドメインであってもよい。
【０１２０】
あるディスティネーションＱｏＳドメインＩＤを指定する第２タイプのコピーコマンドをホスト２から受信した時も、コントローラ４は、共通ブロック群６０２内の一つのブロック（フリーブロック）を選択し、選択されたブロックを、このディスティネーションＱｏＳドメインＩＤに対応するコピー先ＱｏＳドメインにコピー先ブロックとして割り当てる。このコピー先ＱｏＳドメインにコピー先ブロックが既に割り当てられている場合には、この処理は不要である。各コピー先ＱｏＳドメインに割り当てられたコピー先ブロックは第１タイプコピーコマンドおよび第２タイプコピーコマンドとの間で共有されることができる。
【０１２１】
コントローラ４は、第２タイプコピーコマンドによって指定されるオフセットおよび長さに基づいて、コピー元ブロック内のコピー対象データを特定し、この特定されたコピー対象データをコピー元ブロックからコピー先ＱｏＳドメインのコピー先ブロックにコピーする。
【０１２２】
なお、第２タイプコピーコマンドは、長さの代わりに、コピー元ブロック内の複数のコピー対象データそれぞれの記憶位置を示すソース物理アドレスのリストを含んでいてもよい。
図１４は、物理アドレスを規定するブロックアドレスおよびオフセットを示す。
【０１２３】
ブロックアドレスはある一つのブロックＢＬＫを指定する。各ブロックＢＬＫは、図１４に示されているように、複数のページ（ここでは、ページ０〜ページｎ）を含む。
ページサイズ（各ページのユーザデータ格納領域）が１６Ｋバイトであり、粒度（Ｇｒａｉｎ）が４ＫＢのサイズであるケースにおいては、このブロックＢＬＫは、４×（ｎ＋１）個の領域に論理的に分割される。
【０１２４】
オフセット＋０はページ０の最初の４ＫＢ領域を示し、オフセット＋１はページ０の２番目の４ＫＢ領域を示し、オフセット＋２はページ０の３番目の４ＫＢ領域を示し、オフセット＋３はページ０の４番目の４ＫＢ領域を示す。
オフセット＋４はページ１の最初の４ＫＢ領域を示し、オフセット＋５はページ１の２番目の４ＫＢ領域を示し、オフセット＋６はページ１の３番目の４ＫＢ領域を示し、オフセット＋７はページ１の４番目の４ＫＢ領域を示す。
【０１２５】
図１５は、スーパーブロックが使用されるケースにおけるブロックアドレスとオフセットとの関係を示す。
ここでは、図示を簡単化するために、ある一つのスーパーブロックＳＢ＃１が４つのブロックＢＬＫ＃１１、ＢＬＫ＃２１、ＢＬＫ＃３１、ＢＬＫ＃４１から構成されている場合が想定されている。スーパーブロックＳＢ＃１のブロックアドレス（スーパーブロックアドレス）はＳＢ＃１である。４つのブロックＢＬＫ＃１１、ＢＬＫ＃２１、ＢＬＫ＃３１、ＢＬＫ＃４１は、異なる４個のＮＡＮＤ型フラッシュメモリチップからそれぞれ選択されたブロックであってもよい。
【０１２６】
コントローラ４は、ブロックＢＬＫ＃１１のページ０、ブロックＢＬＫ＃２１のページ０、ブロックＢＬＫ＃３１のページ０、ブロックＢＬＫ＃４１のページ０、ブロックＢＬＫ＃１１のページ１、ブロックＢＬＫ＃２１のページ１、ブロックＢＬＫ＃３１のページ１、ブロックＢＬＫ＃４１のページ１、…という順序でデータを書き込む。
【０１２７】
オフセット＋０はブロックＢＬＫ＃１１のページ０の最初の４ＫＢ領域を示し、オフセット＋１はブロックＢＬＫ＃１１のページ０の２番目の４ＫＢ領域を示し、オフセット＋２はブロックＢＬＫ＃１１のページ０の３番目の４ＫＢ領域を示し、オフセット＋３はブロックＢＬＫ＃１１のページ０の４番目の４ＫＢ領域を示す。
【０１２８】
オフセット＋４はブロックＢＬＫ＃２１のページ０の最初の４ＫＢ領域を示し、オフセット＋５はブロックＢＬＫ＃２１のページ０の２番目の４ＫＢ領域を示し、オフセット＋６はブロックＢＬＫ＃２１のページ０の３番目の４ＫＢ領域を示し、オフセット＋７はブロックＢＬＫ＃２１のページ０の４番目の４ＫＢ領域を示す。
【０１２９】
同様に、オフセット＋１２はブロックＢＬＫ＃４１のページ０の最初の４ＫＢ領域を示し、オフセット＋１３はブロックＢＬＫ＃４１のページ０の２番目の４ＫＢ領域を示し、オフセット＋１４はブロックＢＬＫ＃４１のページ０の３番目の４ＫＢ領域を示し、オフセット＋１５はブロックＢＬＫ＃４１のページ０の４番目の４ＫＢ領域を示す。
【０１３０】
オフセット＋１６はブロックＢＬＫ＃１１のページ１の最初の４ＫＢ領域を示し、オフセット＋１７はブロックＢＬＫ＃１１のページ１の２番目の４ＫＢ領域を示し、オフセット＋１８はブロックＢＬＫ＃１１のページ１の３番目の４ＫＢ領域を示し、オフセット＋１９はブロックＢＬＫ＃１１のページ１の４番目の４ＫＢ領域を示す。
【０１３１】
オフセット＋２０はブロックＢＬＫ＃２１のページ１の最初の４ＫＢ領域を示し、オフセット＋２１はブロックＢＬＫ＃２１のページ１の２番目の４ＫＢ領域を示し、オフセット＋２２はブロックＢＬＫ＃２１のページ１の３番目の４ＫＢ領域を示し、オフセット＋２３はブロックＢＬＫ＃２１のページ１の４番目の４ＫＢ領域を示す。
【０１３２】
同様に、オフセット＋２８はブロックＢＬＫ＃４１のページ１の最初の４ＫＢ領域を示し、オフセット＋２９はブロックＢＬＫ＃４１のページ１の２番目の４ＫＢ領域を示し、オフセット＋３０はブロックＢＬＫ＃４１のページ１の３番目の４ＫＢ領域を示し、オフセット＋３１はブロックＢＬＫ＃４１のページ１の４番目の４ＫＢ領域を示す。
【０１３３】
例えば、あるＬＢＡ（ＬＢＡｘ）を指定するライトコマンドに対応する４Ｋバイトデータをオフセット＋８に対応する位置に書き込む場合には、コントローラ４は、タグ（＝ＬＢＡｘ）、ブロック番号（＝ＳＢ＃１）、オフセット（＝＋８）、長さ（＝１）をこのライトコマンドに対するアドレス記録要求としてホスト２に返してもよい。
【０１３４】
図１６は、フラッシュストレージデバイス３によって管理される複数のＱｏＳドメインを示す。
図１６では、ＱｏＳドメイン＃０、ＱｏＳドメイン＃１、ＱｏＳドメイン＃２、…、ＱｏＳドメイン＃ｎ−１が既に作成されている場合が明示されている。図１６では、これらＱｏＳドメインは四角によって表されている。あるＱｏＳドメインを表す四角の縦幅は、このＱｏＳドメインの容量を表している。
【０１３５】
ユーザアプリケーション＃０は、ＱｏＳドメイン＃０のＱｏＳドメインＩＤ＃０を含むリード／ライトコマンドを使用して、ＱｏＳドメイン＃０をリード／ライトアクセスすることができる。同様に、ユーザアプリケーション＃ｎ−１は、ＱｏＳドメイン＃ｎ−１のＱｏＳドメインＩＤ＃ｎ−１を含むリード／ライトコマンドを使用して、ＱｏＳドメイン＃ｎ−１をリード／ライトアクセスすることができる。
【０１３６】
図１７のシーケンス図は、フラッシュストレージデバイス２によって実行されるＱｏＳドメイン作成処理の手順を示す。
ＱｏＳドメインＩＤ＃０を指定するＱｏＳドメインクリエートコマンドをホスト２から受信した場合、コントローラ４は、ＱｏＳドメインＩＤ＃０に関連付けられたＱｏＳドメイン＃０を作成する（ステップＳ１１）。ステップＳ１１では、コントローラ４は、共通ブロック群６０２から、このＱｏＳドメインクリエートコマンドによって指定される容量に対応する数のブロックをＱｏＳドメイン＃０用に確保（予約する）。そして、コントローラ４は、コマンド完了のレスポンスをホスト２に返す。
【０１３７】
ＱｏＳドメインＩＤ＃１を指定するＱｏＳドメインクリエートコマンドをホスト２から受信した場合、コントローラ４は、ＱｏＳドメインＩＤ＃１に関連付けられたＱｏＳドメイン＃１を作成する（ステップＳ１２）。ステップＳ１２では、コントローラ４は、共通ブロック群６０２から、このＱｏＳドメインクリエートコマンドによって指定される容量に対応する数のブロックをＱｏＳドメイン＃１用に確保（予約する）。そして、コントローラ４は、コマンド完了のレスポンスをホスト２に返す。
【０１３８】
同様に、ＱｏＳドメインＩＤ＃ｎ−１を指定するＱｏＳドメインクリエートコマンドをホスト２から受信した場合、コントローラ４は、ＱｏＳドメインＩＤ＃ｎ−１に関連付けられたＱｏＳドメイン＃ｎ−１を作成する（ステップＳ１３）。ステップＳ１３では、コントローラ４は、共通ブロック群６０２から、このＱｏＳドメインクリエートコマンドによって指定される容量に対応する数のブロックをＱｏＳドメイン＃ｎ−１用に確保（予約する）。そして、コントローラ４は、コマンド完了のレスポンスをホスト２に返す。
【０１３９】
図１８は、ホスト２とフラッシュストレージデバイス３とによって実行されるデータ書き込み処理を示す。
（１）ホスト２においては、ホストＦＴＬ７０１が実行される。このホストＦＴＬ７０１は、ＬＢＡのようなタグとフラッシュストレージデバイス３の物理アドレスそれぞれとの間のマッピングをＬＵＴを使用して管理する。あるユーザアプリケーションからのライト要求に応じて、ホストＦＴＬ７０１は、このユーザアプリケーションに対応するＱｏＳドメインのＱｏＳドメインＩＤを指定するライトコマンドをフラッシュストレージデバイス３に送信する。ホストＦＴＬ７０１は、ＱｏＳドメインＩＤのみを指定すればよく、データが書き込まれるべきブロックおよびデータが書き込まれるべきページを指定する必要は無い。このため、ホストＦＴＬ７０１は、フラッシュストレージデバイス３内の不良ブロック、不良ページなどを管理する必要がなくなる。
【０１４０】
（２）フラッシュストレージデバイス３のコントローラ４は、複数のＱｏＳドメイン６０１によって共有される共通ブロック群（フリーブロック群）６０２のうちの一つのブロックを選択する、コントローラ４は、この選択したブロックを、受信されたライトコマンドによって指定されたＱｏＳドメインＩＤを有するＱｏＳドメイン用の書き込み先ブロックとして割り当てる。共通ブロック群（フリーブロック群）６０２においては、不良ブロック以外のフリーブロック群のみが管理されていてもよい。例えば、最小プログラム／イレーズサイクル数を有するブロックが共通ブロック群６０２から選択されてもよい。そして、コントローラ４は、この書き込み先ブロックをデータが書き込まれるべきブロックとして決定し、さらに、データが書き込まれるべき、この書き込み先ブロック内の書き込み先位置を決定する。なお、上述したように、既にこのＱｏＳドメイン用の書き込み先ブロックが割り当てられているならば、コントローラ４は、この既に割り当てられている書き込み先ブロックをデータが書き込まれるべきブロックとして決定すればよく、共通ブロック群６０２から一つのブロックをこのＱｏＳドメイン用の書き込み先ブロックとして割り当てる動作を実行する必要は無い。
【０１４１】
（３）コントローラ４は、決定された書き込み先ブロックを示すブロックアドレスと決定した書き込み先位置を示すオフセットとを含む物理アドレス記録要求をホスト２に送信して、このライトコマンドに関連付けられたライトデータが書き込まれる物理アドレスをホスト２に通知する。
【０１４２】
（４）コントローラ４は、ライトコマンドに含まれるライトバッファアドレスに基づいて、ホスト２のライトバッファ７０２からライトデータを取得する。ライトバッファ７０２からのライトデータの取得はＤＭＡ転送を使用して実行されてもよい。そして、コントローラ４は、ライトデータを書き込み先ブロック内の書き込み先位置に書き込むデータ書き込み動作を実行する。
【０１４３】
（５）ライトデータの書き込みが完了してこのライトデータがＮＡＮＤ型フラッシュメモリ５から読み出し可能になった後、コントローラ４は、このライトデータが格納されているライトバッファ７０２内の領域を解放するための解放要求をホスト２に送出する。この解放要求は、書き込みが完了したライトデータに対応するライトコマンドの識別子を含んでいてもよい。あるいは、この解放要求は、このライトデータの格納位置を示すライトバッファアドレス、このライトデータの長さを含んでいてもよい。ホスト２は、この解放要求に応じて、このライトデータが格納されているライトバッファ７０２内の領域を解放する。このライトバッファ７０２内の解放された領域は他のライトデータの格納等のために利用可能となる。
【０１４４】
図１９は、ホスト２とフラッシュストレージデバイス３とによって実行されるデータ読み出し処理を示す。
（１）ホストＦＴＬ７０１があるユーザアプリケーションからのリード要求を受信した場合、ホストＦＴＬ７０１は、ホストＦＴＬ７０１内のＬＵＴを参照して、このリード要求によって指定されるＬＢＡのようなタグに対応する物理アドレスを取得する。ホストＦＴＬ７０１は、このユーザアプリケーションに対応するＱｏＳドメインのＱｏＳドメインＩＤと、取得した物理アドレス（ブロックアドレスとオフセット）と、長さと、リードバッファアドレスとを指定するリードコマンドを、フラッシュストレージデバイス３に送信する。
【０１４５】
（２）コントローラ４がこのリードコマンドを受信した場合、コントローラ４は、このリードコマンドによって指定されるブロックアドレスとオフセットに基づいて、ＮＡＮＤ型フラッシュメモリ５からデータを読み出す。そして、コントローラ４は、この読み出したデータを、ＤＭＡ転送を使用して、リードバッファアドレスによって指定されるホスト２のリードバッファ７０３内の位置に転送する。
【０１４６】
図２０は、ホスト２とフラッシュストレージデバイス３とによって実行されるデータコピー処理を示す。ここでは、第１タイプのコピーコマンドを例示してデータコピー処理を説明する。
（１）ホストＦＴＬ７０１は、セット・有効マップコマンドをフラッシュストレージデバイス３に送信することによって、コピー元ＱｏＳドメインのコピー元ブロックに対応するマップ情報をフラッシュストレージデバイス３に通知する。
【０１４７】
（２）ホストＦＴＬ７０１は、ソースＱｏＳドメインＩＤと、このソースＱｏＳドメインＩＤを有するＱｏＳドメインに属するブロックのうちのコピー元ブロックのブロックアドレスと、ディスティネーションＱｏＳドメインＩＤとを含むコピーコマンドをフラッシュストレージデバイス３に送信する。ここでは、ソースＱｏＳドメインＩＤおよびディスティネーションＱｏＳドメインＩＤの各々がＱｏＳドメインＩＤ＃０である場合を想定する。
【０１４８】
（３）フラッシュストレージデバイス３のコントローラ４は、複数のＱｏＳドメイン６０１によって共有される共通ブロック群（フリーブロック群）６０２のうちの一つのブロックを選択し、この選択したブロックを、受信されたコピーコマンドによって指定されたディスティネーションＱｏＳドメインＩＤ（ここではＱｏＳドメインＩＤ＃０）を有するＱｏＳドメイン（ここではＱｏＳドメイン＃０）用のコピー先ブロックとして割り当てる。共通ブロック群（フリーブロック群）６０２においては、不良ブロック以外のフリーブロック群のみが管理されていてもよい。例えば、最小プログラム／イレーズサイクル数を有するブロックが共通ブロック群６０２から選択されてもよい。そして、コントローラ４は、マップ情報に基づいて、ＱｏＳドメイン＃０に属するコピー元ブロックに格納されている有効データそれぞれを、ＱｏＳドメイン＃０用のコピー先ブロックにコピーする。なお、上述したように、既にこのＱｏＳドメイン＃０用のコピー先ブロックが割り当てられているならば、コントローラ４は、この既に割り当てられているコピー先ブロックを、データがコピーされるべきブロックとして決定すればよく、共通ブロック群６０２から一つのブロックをこのＱｏＳドメイン＃０用のコピー先ブロックとして割り当てる動作を実行する必要は無い。
【０１４９】
（４）コントローラ４は、アドレス変更要求をホスト２に送信することによって、コピーされた有効データ毎に、有効データの識別子（タグ）と、コピー先ブロックのブロックアドレスと、有効データが格納されている、コピー先ブロック内の記憶位置を示すオフセットとを示す情報をホスト２に通知する。
【０１５０】
図２１は、フラッシュストレージデバイス３のコントローラ４によって管理される、複数のＱｏＳドメインと共通フラッシュブロックプールとの関係を示す。
図２１においては、図示の簡単化のために、ＱｏＳドメイン＃０とＱｏＳドメイン＃ｎ−１の２つのＱｏＳドメインのみが例示されている。共通フラッシュブロックプール８０１は、複数のＱｏＳドメインによって共有される上述の共通ブロック群６０２を管理するためのリストである。
【０１５１】
ＱｏＳドメイン＃０のフラッシュブロックプール＃０は、ＱｏＳドメイン＃０に属するアクティブブロックそれぞれを管理するための上述のアクティブブロックリストである。
コントローラ４がＱｏＳドメイン＃０のＱｏＳドメインＩＤ＃０を指定するライトコマンドを受信した場合、コントローラ４は、ＱｏＳドメイン＃０用の書き込み先ブロック（オープンブロック）が割り当て済みであるか否かを判定する。
【０１５２】
書き込み先ブロック（オープンブロック）が割り当て済みでないならば、コントローラ４は、共通フラッシュブロックプール８０１の内のフリーブロックをＱｏＳドメイン＃０用の書き込み先ブロック（オープンブロック）として割り当てる。そして、コントローラ４は、この書き込み先ブロック内の書き込み先位置を決定し、このライトコマンドに関連付けられたライトデータを、この書き込み先ブロック内のこの書き込み先位置に書き込む。
【０１５３】
一方、書き込み先ブロック（オープンブロック）が既に割り当て済みならば、コントローラ４は、この書き込み先ブロック内の書き込み先位置を決定し、このライトコマンドに関連付けられたライトデータを、この書き込み先ブロック内のこの書き込み先位置に書き込む。
【０１５４】
この書き込み先ブロック全体がホストからのデータで満たされると、コントローラ４は、この書き込み先ブロックをフラッシュブロックプール＃０によって管理するとともに（クローズ）、共通フラッシュブロックプール８０１の内のフリーブロックをＱｏＳドメイン＃０用の新たな書き込み先ブロック（オープンブロック）として割り当てる。
【０１５５】
コントローラ４がＱｏＳドメインＩＤ＃０を示すコピー元ＱｏＳドメインと、コピー元ブロックのブロックアドレスと、ＱｏＳドメインＩＤ＃０を示すコピー先ＱｏＳドメインとを指定するコピーコマンドを受信した場合、コントローラ４は、ＱｏＳドメイン＃０用のコピー先ブロック（オープンブロック）が割り当て済みであるか否かを判定する。
【０１５６】
コピー先ブロック（オープンブロック）が割り当て済みでないならば、コントローラ４は、共通フラッシュブロックプール８０１の内のフリーブロックをＱｏＳドメイン＃０用のコピー先ブロック（オープンブロック）として割り当てる。コントローラ４は、コピー先ブロック内のコピー先位置を決定する。コントローラ４は、コピー元ブロックのブロックアドレスに基づいて、フラッシュブロックプール＃０内のブロックの一つをコピー元ブロックとして選択する。コントローラ４は、この選択したコピー元ブロック内のデータを、コピー先ブロック内のコピー先位置にコピーする。一方、コピー先ブロックが既に割り当て済みならば、コントローラ４は、既に割り当てられているコピー先ブロック内のコピー先位置を決定し、選択したコピー元ブロック内のデータを、既に割り当てられているコピー先ブロック内のコピー先位置にコピーする。
【０１５７】
受信されたコピーコマンドが第１タイプコピーコマンドであるならば、ホスト２から通知される上述のマップ情報に基づき、コントローラ４は、選択したコピー元ブロック内の有効データそれぞれをコピー先ブロックにコピーする。
コピー先ブロック全体がホストからのデータで満たされると、コントローラ４は、このコピー先ブロックをフラッシュブロックプール＃０によって管理するとともに（クローズ）、共通フラッシュブロックプール８０１の内のフリーブロックをＱｏＳドメイン＃０用の新たなコピー先ブロック（オープンブロック）として割り当てる。
【０１５８】
更新データの書き込みまたはデータコピー動作によってＱｏＳドメイン＃０に属する一つのブロック内のデータ全てが無効データになった場合、ホスト２は、このブロックのブロックアドレスを指定するリユースコマンドをフラッシュストレージデバイス３に送信する。
【０１５９】
コントローラ４がこのリユースコマンドをホスト２から受信した場合、コントローラ４は、このリユースコマンドによって指定されるフラッシュブロックプール＃０内のブロックを共通フラッシュブロックプール８０１に返却して、このブロックを任意のＱｏＳドメイン用の新たな書き込み先ブロック（またはコピー先ブロック）として再使用可能な状態にする。
【０１６０】
なお、更新データの書き込みまたはデータコピー動作によってＱｏＳドメイン＃０に属する一つのブロック内のデータ全てが無効データになった場合、ホスト２は、このブロックのブロックアドレスを指定するイレーズコマンドをフラッシュストレージデバイス３に送信してもよい。コントローラ４がこのイレーズコマンドをホスト２から受信した場合、コントローラ４は、このイレーズコマンドによって指定されるフラッシュブロックプール＃０内のブロックに対する消去動作を実行し、且つこのブロックを共通フラッシュブロックプール８０１に返却して、このブロックを任意のＱｏＳドメイン用の新たな書き込み先ブロック（またはコピー先ブロック）として再使用可能な状態にする。
【０１６１】
ＱｏＳドメイン＃ｎ−１においても、コントローラ４は、書き込み先ブロック／コピー先ブロックの割り当て、データで満たされた書き込み先ブロック／コピー先ブロックをフラッシュブロックプール＃ｎ−１によって管理する処理、リユースコマンド／イレーズコマンドによって指定されるブロックを共通フラッシュブロックプール８０１に返却する処理等を実行する。
【０１６２】
このように、本実施形態においては、ホストライト用の書き込み先ブロックとデータコピー用のコピー先ブロックとがコントローラ４によってＱｏＳドメイン毎に割り当てられる。
図２２は、ライトコマンドの実行中に書き込み先ブロック全体がデータで満たされた場合に、コントローラ４によって実行される書き込み先ブロック割り当て動作を示す。
【０１６３】
ブロックＢＬＫ＃１は、ＱｏＳドメイン＃０に割り当てられている現在の書き込み先ブロックである。ここでは、図示の簡単化のために、ブロックＢＬＫ＃１が４つのページから構成されており、ページサイズが１６ＫＢである場合を想定する。
いま、ＱｏＳドメインＩＤ＃０、タグ（ＬＢＡｘ）、長さ＝１６を指定するライトコマンドがホスト２から受信された場合を想定する。書き込み先ブロックＢＬＫ＃１のページ０，ページ１にはデータが既に書き込まれている。長さ＝１６は、このライトコマンドに関連付けられたライトデータのサイズが６４Ｋバイト（＝１６×４ＫＢ）であることを表している。
【０１６４】
コントローラ４は、このライトデータ（Ｄ１〜Ｄ１６）の一部分である第１のデータ部分、つまりライトデータの最初の３２ＫＢのデータ部分（Ｄ１〜Ｄ８）、を書き込み先ブロックＢＬＫ＃１のページ２，ページ３に書き込む。これにより、書き込み先ブロックＢＬＫ＃１全体がデータで満たされた状態となる。
【０１６５】
コントローラ４は、共通フラッシュブロックプール８０１から新たな書き込み先ブロックＢＬＫ＃２をＱｏＳドメイン＃０用に割り当てる。そして、コントローラ４は、ライトデータ（Ｄ１〜Ｄ１６）の残り部分である第２のデータ部分、つまりライトデータの残りの３２ＫＢのデータ部分（Ｄ９〜Ｄ１６）、を書き込み先ブロックＢＬＫ＃２のページ０，ページ１に書き込む。
【０１６６】
この場合、コントローラ４からホスト２に送られるアドレス記録要求は、ライトデータの第１のデータ部分の識別子と、２つの物理アドレスとを含む。２つの物理アドレスの一方は、ブロックアドレス＝ＢＬＫ＃１、オフセット＝＋８を示す。２つの物理アドレスの他方は、ブロックアドレス＝ＢＬＫ＃２、オフセット＝＋０を示す。
【０１６７】
より詳しくは、このアドレス記録要求は以下のパラメータを含んでいてもよい。
ＬＢＡ＝ＬＢＡｘ
ブロックアドレス＝ＢＬＫ＃１
オフセット＝＋８
長さ＝８
ＬＢＡ＝ＬＢＡｘ＋８
ブロックアドレス＝ＢＬＫ＃２
オフセット＝＋０
長さ＝８
図２３は、ホスト２から通知されるマップ情報に基づいて実行される有効データコピー動作を示す。
【０１６８】
ここでは、ＱｏＳドメイン＃０のコピー元ブロックＢＬＫ＃１１に格納されている有効データそれぞれを、ＱｏＳドメイン＃０用に割り当てられたコピー先ブロックＢＬＫ＃１００にコピーする場合を想定する。
コピー元ブロックＢＬＫ＃１１において、ｄ１〜ｄ３、ｄ８〜ｄ９、ｄ１１、ｄ１５〜ｄ１６の各々は有効データであり、ｄ４〜ｄ７、ｄ１０、ｄ１２〜ｄ１４の各々は無効データである。この場合、コピー元ブロックＢＬＫ＃１１に対応するマップ情報（ビットマップ）は「１１１００００１１０１０００１１」を示す。ビットマップ内の各ビット「１」はこのビットに対応するデータが有効データであることを示し、ビットマップ内の各ビット「０」はこのビットに対応するデータが無効データであることを示す。
【０１６９】
コピー元ブロックＢＬＫ＃１１を指定する第１タイプのコピーコマンドを受信すると、コントローラ４は、４つの有効データ（ｄ１〜ｄ３、ｄ８）をコピー先ブロックＢＬＫ＃１００のページ０にコピーし、４つの有効データ（ｄ９、ｄ１１、ｄ１５〜ｄ１６）をコピー先ブロックＢＬＫ＃１００のページ１にコピーする。そして、コントローラ４は、データｄ１の識別子、データｄ１の新物理アドレス（ＢＬＫ＃１００、オフセット＋０）、データｄ２の識別子、データｄ２の新物理アドレス（ＢＬＫ＃１００、オフセット＋１）、データｄ３の識別子、データｄ３の新物理アドレス（ＢＬＫ＃１００、オフセット＋２）、データｄ８の識別子、データｄ８の新物理アドレス（ＢＬＫ＃１００、オフセット＋３）、データｄ９の識別子、データｄ９の新物理アドレス（ＢＬＫ＃１００、オフセット＋４）、データｄ１１の識別子、データｄ１１の新物理アドレス（ＢＬＫ＃１００、オフセット＋５）、データｄ１５の識別子、データｄ１５の新物理アドレス（ＢＬＫ＃１００、オフセット＋６）、データｄ１６の識別子、データｄ１６の新物理アドレス（ＢＬＫ＃１００、オフセット＋７）、等を、アドレス変更要求としてホスト２に通知する。
【０１７０】
図２４は、コピーコマンドの実行中にコピー先ブロックＢＬＫ＃１００全体がデータで満たされた場合に、コントローラ４によって実行されるコピー先ブロック割り当て動作を示す。
ここでは、先行するコピーコマンドによってＢＬＫ＃１００のページ０〜ページ２にデータが既にコピーされている状態で、コントローラ４、コピー元ブロックＢＬＫ＃１１を指定する第１タイプのコピーコマンドをホスト２から受信した場合を想定する。
【０１７１】
コントローラ４は、４つの有効データ（ｄ１〜ｄ３、ｄ８）をコピー先ブロックＢＬＫ＃１００のページ３にコピーする。これにより、コピー先ブロックＢＬＫ＃１００全体がデータで満たされた状態となる。
コントローラ４は、共通フラッシュブロックプール８０１から新たなコピー先ブロックＢＬＫ＃２００をＱｏＳドメイン＃０用に割り当てる。そして、コントローラ４は、残りの４つの有効データ（ｄ９、ｄ１１、ｄ１５〜ｄ１６）をコピー先ブロックＢＬＫ＃２００のページ０にコピーする。
【０１７２】
そして、コントローラ４は、データｄ１の識別子、データｄ１の新物理アドレス（ＢＬＫ＃１００、オフセット＋１２）、データｄ２の識別子、データｄ２の新物理アドレス（ＢＬＫ＃１００、オフセット＋１３）、データｄ３の識別子、データｄ３の新物理アドレス（ＢＬＫ＃１００、オフセット＋１４）、データｄ８の識別子、データｄ８の新物理アドレス（ＢＬＫ＃１００、オフセット＋１５）、データｄ９の識別子、データｄ９の新物理アドレス（ＢＬＫ＃２００、オフセット＋０）、データｄ１１の識別子、データｄ１１の新物理アドレス（ＢＬＫ＃２００、オフセット＋１）、データｄ１５の識別子、データｄ１５の新物理アドレス（ＢＬＫ＃２００、オフセット＋２）、データｄ１６の識別子、データｄ１６の新物理アドレス（ＢＬＫ＃２００、オフセット＋３）、等を、アドレス変更要求としてホスト２に通知する。
【０１７３】
図２５のフローチャートは、書き込み先ブロック割り当て動作およびデータ書き込み動作の手順を示す。
コントローラ４は、ライトコマンドをホスト２から受信する（ステップＳ２１）。このライトコマンドは、作成された複数のＱｏＳドメインをアクセスするための複数のＱｏＳドメインＩＤのうちの一つを指定する。コントローラ４は、複数のＱｏＳドメインによって共有される共通フラッシュブロックプール８０１内の一つのブロック（フリーブロック）を選択する。そして、コントローラ４は、この選択したブロックを、受信されたライトコマンドによって指定されたＱｏＳドメインＩＤに対応するＱｏＳドメイン用の書き込み先ブロックとして割り当てる（ステップＳ２２）。上述したように、もしこのＱｏＳドメイン用の書き込み先ブロックが既に割り当てられているならば、この割り当て動作を実行する必要は無い。
【０１７４】
コントローラ４は、この書き込み先ブロック内の書き込み先位置を決定し、受信されたライトコマンドに関連付けられたライトデータを、この書き込み先ブロック内のこの書き込み先位置に書き込む（ステップＳ２３）。
受信されたライトコマンドに関連付けられたライトデータの一部分の書き込みによってこの書き込み先ブロック全体がデータで満たされたならば（ステップＳ２４のＮＯ、ステップＳ２５のＹＥＳ）、コントローラ４は、共通フラッシュブロックプール８０１内の一つのブロック（フリーブロック）を選択し、この選択したブロックを、このＱｏＳドメイン用の新たな書き込み先ブロックとして割り当てる（ステップＳ２２）。そして、コントローラ４は、この新たな書き込み先ブロック内の書き込み先位置（通常は先頭ページ）を決定し、このライトデータ内の残り部分を、この新たな書き込み先ブロック内のこの書き込み先位置に書き込む（ステップＳ２３）。
【０１７５】
ライトデータ全体の書き込みが完了したならば（ステップＳ２４のＹＥＳ）、コントローラ４は、このライトデータの識別子（例えば、ＬＢＡ）とこのライトデータが書き込まれた物理アドレス（ブロックアドレス、オフセット）をアドレス記録要求としてホスト２に通知する（ステップＳ２６）。
【０１７６】
ライトデータが２つの書き込み先ブロックに跨がって書き込まれた場合、つまりライトデータの一部分である第１のデータ部分が第１の書き込み先ブロックに書き込まれ、ライトデータの残り部分である第２のデータ部分が第２の書き込み先ブロックに書き込まれた場合には、コントローラ４は、第１のデータ部分のタグと、第１のデータ部分が書き込まれた物理アドレス（第１の書き込み先ブロックのブロックアドレス、第１のデータ部分が書き込まれた、第１の書き込み先ブロック内の記憶位置を示すオフセット）と、第２のデータ部分のタグと、第２のデータ部分が書き込まれた物理アドレス（第２の書き込み先ブロックのブロックアドレス、第２のデータ部分が書き込まれた、第２の書き込み先ブロック内の記憶位置を示すオフセット）とをアドレス記録要求としてホスト２に通知する（ステップＳ２６）。ライトデータのタグがＬＢＡｘである場合、第１のデータ部分のＬＢＡはＬＢＡｘであってもよく、第２のデータ部分のＬＢＡは、第１のデータ部分の長さに対応するＬＢＡの数をＬＢＡｘに加えることによって得られるＬＢＡであってもよい。
【０１７７】
図２６のフローチャートは、コピー先ブロック割り当て動作およびデータコピー動作の手順を示す。
コントローラ４は、コピーコマンドをホスト２から受信する（ステップＳ３１）。このコピーコマンドは、コピー元ブロックのブロックアドレスと、一つのＱｏＳドメインＩＤを示すコピー先対象ＱｏＳドメインの識別子とを指定する。コピー先対象ＱｏＳドメインの識別子は、ディスティネーションＱｏＳドメインＩＤである。より詳しくは、このコピーコマンドは、ソースＱｏＳドメインＩＤ、ソース物理アドレス（コピー元ブロックのブロックアドレス）、ディスティネーションＱｏＳドメインＩＤを指定する。
【０１７８】
コントローラ４は、複数のＱｏＳドメインによって共有される共通フラッシュブロックプール８０１内の一つのブロック（フリーブロック）を選択する。そして、コントローラ４は、この選択したブロックを、受信されたコピーコマンドによって指定されたディスティネーションＱｏＳドメインＩＤに対応するディスティネーションＱｏＳドメイン用のコピー先ブロックとして割り当てる（ステップＳ３２）。上述したように、もしこのディスティネーションＱｏＳドメイン用のコピー先ブロックが既に割り当てられているならば、この割り当て動作を実行する必要は無い。
【０１７９】
コントローラ４は、このコピー先ブロック内のコピー先位置を決定し、受信されたコピーコマンドによって指定されたコピー元ブロック内のデータ（コピー対象データ）を、このコピー先ブロック内のこのコピー先位置にコピーする（ステップＳ３３）。受信されたコピーコマンドが第１タイプコピーコマンドである場合には、マップ情報によって指定される有効データそれぞれがコピー元ブロック内のコピー対象データとして決定される。受信されたコピーコマンドが第２タイプコピーコマンドである場合には、第２タイプコピーコマンドによって指定されるソース物理アドレスに含まれるオフセットと、第２タイプコピーコマンドによって指定される長さとに基づいて、コピー元ブロック内のコピー対象データが決定される。
【０１８０】
コピー対象データの一部分のコピーによってディスティネーションＱｏＳドメインのコピー先ブロック全体がデータで満たされたならば（ステップＳ３４のＮＯ、ステップＳ３５のＹＥＳ）、コントローラ４は、共通フラッシュブロックプール８０１内の一つのブロック（フリーブロック）を選択し、この選択したブロックを、このディスティネーションＱｏＳドメイン用の新たなコピー先ブロックとして割り当てる（ステップＳ３２）。そして、コントローラ４は、この新たなコピー先ブロック内のコピー先位置（通常は先頭ページ）を決定し、このコピー対象データ内の残り部分を、この新たなコピー先ブロック内のこのコピー先位置にコピーする（ステップＳ３３）。
【０１８１】
コピー対象データ全体のコピーが完了したならば（ステップＳ３４のＹＥＳ）、コントローラ４は、このコピー対象データの識別子（例えば、ＬＢＡ）とこのコピー対象データがコピーされた新物理アドレス（ブロックアドレス、オフセット）をホスト２に通知する（ステップＳ３６）。
【０１８２】
コピー対象データが２つのコピー先ブロックに跨がってコピーされた場合、つまりコピー対象データの一部分である第３のデータ部分が第１のコピー先ブロックにコピーされ、コピー対象データの残り部分である第４のデータ部分が第２のコピー先ブロックにコピーされた場合には、コントローラ４は、第３のデータ部分のタグと、第３のデータ部分がコピーされた物理アドレス（第１のコピー先ブロックのブロックアドレス、第３のデータ部分がコピーされた、第１のコピー先ブロック内の記憶位置を示すオフセット）と、第４のデータ部分のタグと、第４のデータ部分がコピーされた物理アドレス（第２のコピー先ブロックのブロックアドレス、第４のデータ部分がコピーされた、第２のコピー先ブロック内の記憶位置を示すオフセット）とをアドレス変更要求としてホスト２に通知する（ステップＳ３６）。
【０１８３】
以上説明したように、本実施形態によれば、複数のＱｏＳドメインそれぞれに対応する複数の書き込み先ブロックが割り当てられる。そして、あるＱｏＳドメインＩＤを指定するライトコマンドに関連付けられたライトデータは、このＱｏＳドメインＩＤに対応するＱｏＳドメイン用の書き込み先ブロックに書き込まれる。また、別のＱｏＳドメインＩＤを指定するライトコマンドに関連付けられたライトデータは、この別のＱｏＳドメインＩＤに対応するＱｏＳドメイン用の書き込み先ブロックに書き込まれる。これにより、ホスト２によるデータ配置の制御なしで、異なるユーザアプリケーションからのライトデータを異なる書き込み先ブロックに書き込むことができる。よって、複数のユーザアプリケーションからのライトデータを互い異なるブロックに書き込むというデータ配置のためのホスト２側の負担を軽減することができる。
【０１８４】
また、ＱｏＳドメイン毎に、書き込み先ブロックとは異なる別のブロックがコピー先ブロックとして割り当てられる。これにより、ホスト２の制御なしで、ホスト２からのデータが書き込まれる書き込み先ブロックとＮＡＮＤ型フラッシュメモリ５に既に書き込まれているデータがコピーされるコピー先ブロックとを分離するというデータ配置を実現することができる。
【０１８５】
なお、本実施形態では、不揮発性メモリとしてＮＡＮＤ型フラッシュメモリを例示した。しかし、本実施形態の機能は、例えば、ＭＲＡＭ（Ｍａｇｎｅｔｏｒｅｓｉｓｔｉｖｅ  Ｒａｎｄｏｍ  Ａｃｃｅｓｓ  Ｍｅｍｏｒｙ）、ＰＲＡＭ（Ｐｈａｓｅ  ｃｈａｎｇｅ  Ｒａｎｄｏｍ  Ａｃｃｅｓｓ  Ｍｅｍｏｒｙ）、ＲｅＲＡＭ（Ｒｅｓｉｓｔｉｖｅ  Ｒａｎｄｏｍ  Ａｃｃｅｓｓ  Ｍｅｍｏｒｙ）、又は、ＦｅＲＡＭ（Ｆｅｒｒｏｅｌｅｃｔｒｉｃ  Ｒａｎｄｏｍ  Ａｃｃｅｓｓ  Ｍｅｍｏｒｙ）のような他の様々な不揮発性メモリにも適用できる。
【０１８６】
本発明のいくつかの実施形態を説明したが、これらの実施形態は、例として提示したものであり、発明の範囲を限定することは意図していない。これら新規な実施形態は、その他の様々な形態で実施されることが可能であり、発明の要旨を逸脱しない範囲で、種々の省略、置き換え、変更を行うことができる。これら実施形態やその変形は、発明の範囲や要旨に含まれるとともに、特許請求の範囲に記載された発明とその均等の範囲に含まれる。
【符号の説明】
【０１８７】
２…ホスト、３…フラッシュストレージデバイス、４…コントローラ、５…ＮＡＮＤ型フラッシュメモリ、２１…ＱｏＳドメイン作成部、２２…ライト制御部、２３…リード制御部、２４…コピー制御部。
【図１】
2020123039.tif 000003
【図２】
2020123039.tif 000004
【図３】
2020123039.tif 000005
【図４】
2020123039.tif 000006
【図５】
2020123039.tif 000007
【図６】
2020123039.tif 000008
【図７】
2020123039.tif 000009
【図８】
2020123039.tif 000010
【図９】
2020123039.tif 000011
【図１０】
2020123039.tif 000012
【図１１】
2020123039.tif 000013
【図１２】
2020123039.tif 000014
【図１３】
2020123039.tif 000015
【図１４】
2020123039.tif 000016
【図１５】
2020123039.tif 000017
【図１６】
2020123039.tif 000018
【図１７】
2020123039.tif 000019
【図１８】
2020123039.tif 000020
【図１９】
2020123039.tif 000021
【図２０】
2020123039.tif 000022
【図２１】
2020123039.tif 000023
【図２２】
2020123039.tif 000024
【図２３】
2020123039.tif 000025
【図２４】
2020123039.tif 000026
【図２５】
2020123039.tif 000027
【図２６】
2020123039.tif 000028