(57)【要約】【課題】Ｉ／Ｏ性能の改善を図ることができるメモリシステムを実現する。【解決手段】メモリシステムは、論理アドレスを指定するライト要求をホストから受信した場合、前記ホストからのデータを書き込むべき、第１のブロックと前記第１のブロックの第１の位置との双方を決定し、前記ホストからのデータを前記第１のブロックの前記第１の位置に書き込む。前記メモリシステムは、前記第１の論理アドレスと、前記第１のブロックを指定する第１のブロック番号と、前記第１のブロックの先頭から前記第１の位置までのオフセットをページサイズとは異なるサイズを有する粒度の倍数で示す第１のブロック内オフセットとを前記ホストに通知する。【選択図】図２
2019057151.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 >
【発明の概要】
【発明が解決しようとする課題】
【０００６】
しかし、一般に、ＮＡＮＤ型フラッシュメモリの制御は複雑であるため、Ｉ／Ｏ性能を改善するための新たなインタフェースの実現に際しては、ホストとストレージ（メモリシステム）との間の適切な役割分担を考慮することが必要とされる。
【０００７】
本発明が解決しようとする課題は、Ｉ／Ｏ性能の改善を図ることができるメモリシステムおよび制御方法を提供することである。
【課題を解決するための手段】
【０００８】
実施形態によれば、ホストに接続可能なメモリシステムは、各々が複数のページを含む複数のブロックを含む不揮発性メモリと、前記不揮発性メモリに電気的に接続され、前記不揮発性メモリを制御するコントローラとを具備する。前記コントローラは、第１の論理アドレスを指定するライト要求を前記ホストから受信した場合、前記ホストからのデータを書き込むべき、第１のブロックと前記第１のブロックの第１の位置との双方を決定し、前記ホストからのデータを前記第１のブロックの前記第１の位置に書き込み、前記第１の論理アドレスと、前記第１のブロックを指定する第１のブロック番号と、前記第１のブロックの先頭から前記第１の位置までのオフセットをページサイズとは異なるサイズを有する粒度の倍数で示す第１のブロック内オフセットとを前記ホストに通知する動作を実行する。前記コントローラは、前記不揮発性メモリのガベージコレクションを実行する場合、前記ガベージコレクションのためのコピー元ブロックおよびコピー先ブロックを前記複数のブロックから選択し、前記コピー元ブロック内に格納されている有効データを書き込むべき前記コピー先ブロックの第２の位置を決定し、前記有効データを前記コピー先ブロックの前記第２の位置にコピーし、前記有効データの論理アドレスと、前記コピー先ブロックを指定する第２のブロック番号と、前記コピー先ブロックの先頭から前記第２の位置までのオフセットを前記粒度の倍数で示す第２のブロック内オフセットとを前記ホストに通知する動作を実行する。
【図面の簡単な説明】
【０００９】
【図１】ホストと実施形態のメモリシステム（フラッシュストレージデバイス）との関係を示すブロック図。
【図２】従来型ＳＳＤとホストとの間の役割分担と、同実施形態のフラッシュストレージデバイスとホストとの間の役割分担とを説明するための図。
【図３】複数のホストと複数のフラッシュストレージデバイスとの間のデータ転送がネットワーク機器を介して実行される計算機システムの構成例を示すブロック図。
【図４】同実施形態のメモリシステムの構成例を示すブロック図。
【図５】同実施形態のメモリシステムに設けられたＮＡＮＤインタフェースと複数のＮＡＮＤ型フラッシュメモリダイとの関係を示すブロック図。
【図６】複数のブロックの集合によって構築されるスーパーブロックの構成例を示す図。
【図７】同実施形態のメモリシステムに適用されるライトコマンドを説明するための図。
【図８】図７のライトコマンドに対するレスポンスを説明するための図。
【図９】同実施形態のメモリシステムに適用されるＴｒｉｍコマンドを説明するための図。
【図１０】図８のレスポンスに含まれる物理アドレスを規定するブロック番号およびオフセットを説明するための図。
【図１１】ライトコマンドに応じて実行される書き込み動作とこのライトコマンドに対するレスポンスに含まれる返値との関係を説明するための図。
【図１２】不良ページをスキップする書き込み動作を説明するための図。
【図１３】不良ページをスキップする書き込み動作の別の例を説明するための図。
【図１４】論理アドレスとデータのペアをブロック内のページに書き込む動作を説明するための図。
【図１５】データをブロック内のページのユーザデータ領域に書き込み、このデータの論理アドレスをこのページの冗長領域に書き込む動作を説明するための図。
【図１６】スーバーブロックが使用される場合におけるブロック番号とオフセットとの関係を説明するための図。
【図１７】ホストと同実施形態のメモリシステムとによって実行される書き込み動作処理のシーケンスを示すシーケンスチャート。
【図１８】すでに書き込まれているデータに対する更新データを書き込むデータ更新動作を示す図。
【図１９】同実施形態のメモリシステムによって管理されるブロック管理テーブルを更新する動作を説明するための図。
【図２０】ホストによって管理されるルックアップテーブル（論理物理アドレス変換テーブル）を更新する動作を説明するための図。
【図２１】無効化すべきデータに対応する物理アドレスを示すホストからの通知に応じてブロック管理テーブルを更新する動作を説明するための図。
【図２２】同実施形態のメモリシステムに適用されるリードコマンドを説明するための図。
【図２３】同実施形態のメモリシステムによって実行されるリード動作を説明するための図。
【図２４】ホストからのリードコマンドに応じて、異なる物理記憶位置にそれぞれ格納されているデータ部をリードする動作を説明するための図。
【図２５】ホストと同実施形態のメモリシステムとによって実行されるリード処理のシーケンスを示すシーケンスチャート。
【図２６】同実施形態のメモリシステムに適用されるガベージコレクション（ＧＣ）制御コマンドを説明するための図。
【図２７】同実施形態のメモリシステムに適用されるＧＣ用コールバックコマンドを説明するための図。
【図２８】同実施形態のメモリシステムによって実行されるガベージコレクション（ＧＣ）動作の手順を示すシーケンスチャート。
【図２９】ガベージコレクション（ＧＣ）のために実行されるデータコピー動作の例を説明するための図。
【図３０】図２９のデータコピー動作の結果に基づいて更新されるホストのルックアップテーブルの内容を説明するための図。
【図３１】ライトコマンドに対するレスポンスとＧＣ用コールバック処理との関係を説明するための図。
【図３２】同実施形態のメモリシステムに適用されるガベージコレクション（ＧＣ）制御コマンドの別の例を説明するための図。
【図３３】同実施形態のメモリシステムに適用されるＧＣ用コールバックコマンドの別の例を説明するための図。
【図３４】同実施形態のメモリシステムによって実行される書き込み／リード／ＧＣ動作を説明するための図。
【図３５】参照カウントを管理するためのブロック管理テーブルの構成例を示す図。
【図３６】同実施形態のメモリシステムに適用されるデュプリケートコマンドを説明するための図。
【図３７】参照カウントを１減らすためのＴｒｉｍコマンドを説明するための図。
【図３８】ホストと同実施形態のメモリシステムとによって実行される参照カウントインクリメント／デクリメント処理を示すシーケンスチャート。
【発明を実施するための形態】
【００１０】
以下、図面を参照して、実施形態を説明する。  
【００１１】
まず、図１を参照して、一実施形態に係るメモリシステムを含む計算機システムの構成を説明する。
【００１２】
このメモリシステムは、不揮発性メモリにデータを書き込み、不揮発性メモリからデータを読み出すように構成された半導体ストレージデバイスである。このメモリシステムは、ＮＡＮＤフラッシュ技術ベースのフラッシュストレージデバイス３として実現されている。
【００１３】
この計算機システムは、ホスト（ホストデバイス）２と、複数のフラッシュストレージデバイス３とを含んでいてもよい。ホスト２は、複数のフラッシュストレージデバイス３によって構成されるフラッシュアレイをストレージとして使用するように構成されたサーバであってもよい。ホスト（サーバ）２と複数のフラッシュストレージデバイス３は、インタフェース５０を介して相互接続される（内部相互接続）。この内部相互接続のためのインタフェース５０としては、これに限定されないが、ＰＣＩ  Ｅｘｐｒｅｓｓ（ＰＣＩｅ）（登録商標）、ＮＶＭ  Ｅｘｐｒｅｓｓ（ＮＶＭｅ）（登録商標）、Ｅｔｈｅｒｎｅｔ（登録商標）、ＮＶＭｅ  ｏｖｅｒ  Ｆａｂｒｉｃｓ（ＮＶＭｅＯＦ）等を使用し得る。
【００１４】
ホスト２として機能するサーバの典型例としては、データセンター内のサーバが挙げられる。
【００１５】
ホスト２がデータセンター内のサーバによって実現されるケースにおいては、このホスト（サーバ）２は、ネットワーク５１を介して複数のエンドユーザ端末（クライアント）６１に接続されてもよい。ホスト２は、これらエンドユーザ端末６１に対して様々なサービスを提供することができる。
【００１６】
ホスト（サーバ）２によって提供可能なサービスの例には、（１）システム開発プラットフォームを各クライアント（各エンドユーザ端末６１）に提供するプラットホーム・アズ・ア・サービス（ＰａａＳ）、（２）仮想サーバのようなインフラストラクチャを各クライアント（各エンドユーザ端末６１）に提供するインフラストラクチャ・アズ・ア・サービス（ＩａａＳ）、等がある。
【００１７】
複数の仮想マシンが、このホスト（サーバ）２として機能する物理サーバ上で実行されてもよい。ホスト（サーバ）２上で走るこれら仮想マシンの各々は、対応する幾つかのクライアント（エンドユーザ端末６１）に各種サービスを提供するように構成された仮想サーバとして機能することができる。
【００１８】
ホスト（サーバ）２は、フラッシュアレイを構成する複数のフラッシュストレージデバイス３を管理するストレージ管理機能と、エンドユーザ端末６１それぞれに対してストレージアクセスを含む様々なサービスを提供するフロントエンド機能とを含む。
【００１９】
従来型ＳＳＤにおいては、ＮＡＮＤ型フラッシュメモリのブロック／ページの階層構造はＳＳＤ内のフラッシュトランスレーション層（ＦＴＬ）によって隠蔽されている。つまり、従来型ＳＳＤのＦＴＬは、（１）論理物理アドレス変換テーブルとして機能するルックアップテーブルを使用して、論理アドレスそれぞれとＮＡＮＤ型フラッシュメモリの物理アドレスそれぞれとの間のマッピングを管理する機能、（２）ページ単位のリード／ライトとブロック単位の消去動作とを隠蔽するための機能と、（３）ＮＡＮＤ型フラッシュメモリのガベージコレクション（ＧＣ）を実行する機能、等を有している。論理アドレスそれぞれとＮＡＮＤ型フラッシュメモリの物理アドレスの間のマッピングは、ホストからは見えない。ＮＡＮＤ型フラッシュメモリのブロック／ページ構造もホストからは見えない。
【００２０】
一方、ホストにおいても、一種のアドレス変換（アプリケーションレベルアドレス変換）が実行されることがある。このアドレス変換は、アプリケーションレベルアドレス変換テーブルを使用して、アプリケーション用の論理アドレスそれぞれとＳＳＤ用の論理アドレスそれぞれとの間のマッピングを管理する。また、ホストにおいても、ＳＳＤ用の論理アドレス空間上に生じるフラグメントの解消のために、この論理アドレス空間上のデータ配置を変更するための一種のＧＣ（アプリケーションレベルＧＣ）が実行される。
【００２１】
しかし、ホストおよびＳＳＤがそれぞれアドレス変換テーブルを有するという冗長な構成（ＳＳＤは論理物理アドレス変換テーブルとして機能するルックアップテーブルを有し、ホストはアプリケーションレベルアドレス変換テーブルを有する）においては、これらアドレス変換テーブルを保持するために膨大なメモリリソースが消費される。さらに、ホスト側のアドレス変換とＳＳＤ側のアドレス変換とを含む２重のアドレス変換は、Ｉ／Ｏ性能を低下させる要因にもなる。
【００２２】
さらに、ホスト側のアプリケーションレベルＧＣは、ＳＳＤへのデータ書き込み量を実際のユーザデータ量の数倍（例えば２倍）程度に増やす要因となる。このようなデータ書き込み量の増加は、ＳＳＤのライトアンプリフィケーションを増加させてはいないが、システム全体のストレージ性能を低下させ、またＳＳＤの寿命も短くする。
【００２３】
このような問題点を解消するために、従来型ＳＳＤのＦＴＬの機能の全てをホストに移すという対策も提案されている。
【００２４】
しかし、この対策を実装するためには、ＮＡＮＤ型フラッシュメモリのブロックおよびページをホストが直接的にハンドリングすることが必要となる。ＮＡＮＤ型フラッシュメモリの容量はＮＡＮＤ型フラッシュメモリの世代毎に増加しており、これに伴ってＮＡＮＤ型フラッシュメモリのブロックサイズ／ページサイズも世代毎に異なる。このためホスト２では異なるブロックサイズ・ページサイズのＮＡＮＤ型フラッシュメモリを混在して使用することが想到される。異なるブロックサイズ／ページサイズを扱うことはホストにとっては困難である。また、様々な製造上の理由などにより発生する予測不可能な数の不良ページ（バッドページ）が存在することがありうるので、ブロック内の実質的に利用可能なページ数がブロック毎に異なることが想定され、そのＮＡＮＤ型フラッシュメモリ内のブロックサイズがブロック毎に異なる場合もあり得る。バッドページおよび不均一なブロックサイズをハンドリングすることは、ホストにとってはなおさら困難である。
【００２５】
そこで、本実施形態では、ＦＴＬの役割はホスト２とフラッシュストレージデバイス３との間で分担される。ホスト２は論理物理アドレス変換テーブルとして機能するルックアップテーブルを管理するが、書き込みに使用すべきブロックの選択は、ホスト２ではなく、フラッシュストレージデバイス３によって実行される。また、ＧＣも、ホスト２ではなく、フラッシュストレージデバイス３によって実行される。以下では、ホスト２に移されたＦＴＬ機能をグローバルＦＴＬと称する。
【００２６】
ホスト２のグローバルＦＴＬは、ストレージサービスを実行する機能、ルックアップテーブル（ＬＵＴ）を管理する機能、ウェアー制御機能、高可用性を実現するための機能、同じ内容を有する複数の重複データ部がストレージに格納されることを防止する重複排除（Ｄｅ−ｄｕｐｌｉｃａｔｉｏｎ）機能、等を有していてもよい。
【００２７】
一方、フラッシュストレージデバイス３は、ローレベルアブストラクション（ＬＬＡ）を実行することができる。ＬＬＡはＮＡＮＤ型フラッシュメモリのアブストラクションのための機能である。ＬＬＡは、ブロックサイズの不均一性の吸収、ブロック／ページ構造の吸収、データ配置を補助する機能等を含む。データ配置を補助する機能には、ガベージコレクションのためのコピー元ブロックとコピー先ブロックとを決定する機能、有効データのコピー先位置を上位階層（ホスト２）に通知する機能、ユーザデータの書き込み先位置（ブロック番号、このブロック内の位置）を決定する機能、ユーザデータが書き込まれたこの書き込み先位置（ブロック番号、このブロック内の位置）を上位階層（ホスト２）に通知する機能、等を含む。また、ＬＬＡは、ＧＣを実行する機能を有する。さらに、ＬＬＡは、フラッシュストレージデバイス３のリソース管理をドメイン（ＱｏＳドメイン）毎に実行するＱｏＳ制御機能も有している。
【００２８】
ＱｏＳ制御機能には、ＱｏＳドメイン毎（またはブロック毎）にアクセス単位を決める機能が含まれる。アクセス単位は、ホスト２がライト／リードすることが可能な最小データサイズ（Ｇｒａｉｎ）を示す。フラッシュストレージデバイス３は単一、あるいは複数のアクセス単位（Ｇｒａｉｎ）をサポートしており、ホスト２は、フラッシュストレージデバイス３が複数のアクセス単位をサポートしている場合にはＱｏＳドメイン毎（またはブロック毎）に、使用すべきアクセス単位をフラッシュストレージデバイス３に指示することができる。
【００２９】
また、ＱｏＳ制御機能には、ＱｏＳドメイン間の性能干渉をできるだけ防ぐための機能が含まれている。この機能は、基本的には、安定したレイテンシを保つための機能である。
【００３０】
これを実現するために、フラッシュストレージデバイス３は、ＮＡＮＤ型フラッシュメモリ内の多数のブロックの各々が一つのグループのみに属するようにＮＡＮＤ型フラッシュメモリ内の多数のブロックを複数のグループに分類してもよい。この場合、各グループは複数のブロックを含むが、同じブロックが異なるグループによって共有されることはない。これら複数のグループは上述の複数のＱｏＳドメインとして機能する。
【００３１】
あるいは、フラッシュストレージデバイス３は、フラッシュストレージデバイス３内の複数のＮＡＮＤ型フラッシュメモリダイの各々が一つのグループ（一つのＱｏＳドメイン）のみに属するようにフラッシュストレージデバイス３内の複数のＮＡＮＤ型フラッシュメモリダイを複数のグループ（複数のＱｏＳドメイン）に分類してもよい。この場合、各グループ（ＱｏＳドメイン）は複数のダイを含むが、同じダイが異なるＱｏＳドメインによって共有されることはない。
【００３２】
図２は、従来型ＳＳＤとホストとの間の役割分担と、本実施形態のフラッシュストレージデバイス３とホスト２との間の役割分担とを示す。
【００３３】
図２の左部は、従来型ＳＳＤと仮想ディスクサービスを実行するホストとを含む計算機システム全体の階層構造を表している。
【００３４】
ホスト（サーバ）においては、複数のエンドユーザに複数の仮想マシンを提供するための仮想マシンサービス１０１が実行される。仮想マシンサービス１０１上の各仮想マシンにおいては、対応するエンドユーザによって使用されるオペレーティングシステムおよびユーザアプリケーション１０２が実行される。
【００３５】
また、ホスト（サーバ）においては、複数のユーザアプリケーション１０２に対応する複数の仮想ディスクサービス１０３が実行される。各仮想ディスクサービス１０３は、従来型ＳＳＤ内のストレージリソースの容量の一部を、対応するユーザアプリケーション１０２用のストレージリソース（仮想ディスク）として割り当てる。各仮想ディスクサービス１０３においては、アプリケーションレベルアドレス変換テーブルを使用して、アプリケーションレベルの論理アドレスをＳＳＤ用の論理アドレスに変換するアプリケーションレベルアドレス変換も実行される。さらに、ホストにおいては、アプリケーションレベルＧＣ１０４も実行される。
【００３６】
ホスト（サーバ）から従来型ＳＳＤへのコマンドの送信および従来型ＳＳＤからホスト（サーバ）へのコマンド完了のレスポンスの返送は、ホスト（サーバ）および従来型ＳＳＤの各々に存在するＩ／Ｏキュー２００を介して実行される。
【００３７】
従来型ＳＳＤは、ライトバッファ（ＷＢ）３０１、ルックアップテーブル（ＬＵＴ）３０２、ガベージコレクション機能３０３、ＮＡＮＤ型フラッシュメモリ（ＮＡＮＤフラッシュアレイ）３０４を含む。従来型ＳＳＤは、一つのルックアップテーブル（ＬＵＴ）３０２のみを管理しており、ＮＡＮＤ型フラッシュメモリ（ＮＡＮＤフラッシュアレイ）３０４のリソースは複数の仮想ディスクサービス１０３によって共有される。
【００３８】
この構成においては、仮想ディスクサービス１０３下のアプリケーションレベルＧＣ１０４と従来型ＳＳＤ内のガベージコレクション機能３０３（ＬＵＴレベルＧＣ）とを含む重複したＧＣにより、ライトアンプリフィケーションが大きくなる。また、従来型ＳＳＤにおいては、あるエンドユーザまたはある仮想ディスクサービス１０３からのデータ書き込み量の増加によってＧＣの頻度が増加し、これによって他のエンドユーザまたは他の仮想ディスクサービス１０３に対するＩ／Ｏ性能が劣化するというノイジーネイバー問題が生じうる。
【００３９】
また、各仮想ディスクサービス内のアプリケーションレベルアドレス変換テーブルと従来型ＳＳＤ内のＬＵＴ３０２とを含む重複したリソースの存在により、多くのメモリリソースが消費される。
【００４０】
図２の右部は、本実施形態のフラッシュストレージデバイス３とホスト２とを含む計算機システム全体の階層構造を表している。
【００４１】
ホスト（サーバ）２においては、複数のエンドユーザに複数の仮想マシンを提供するための仮想マシンサービス４０１が実行される。仮想マシンサービス４０１上の各仮想マシンにおいては、対応するエンドユーザによって使用されるオペレーティングシステムおよびユーザアプリケーション４０２が実行される。
【００４２】
また、ホスト（サーバ）２においては、複数のユーザアプリケーション４０２に対応する複数のＩ／Ｏサービス４０３が実行される。これらＩ／Ｏサービス４０３には、ＬＢＡベースのブロックＩ／Ｏサービス、キー・バリュー・ストアサービスなどが含まれてもよい。各Ｉ／Ｏサービス４０３は、論理アドレスそれぞれとフラッシュストレージデバイス３の物理アドレスそれぞれとの間のマッピングを管理するルックアップテーブル（ＬＵＴ）を含む。ここで、論理アドレスとは、アクセス対象のデータを識別可能な識別子を意味する。この論理アドレスは、論理アドレス空間上の位置を指定する論理ブロックアドレス（ＬＢＡ）であってもよいし、あるいは、キー・バリュー・ストアのキー（タグ）であってもよい。
【００４３】
ＬＢＡベースのブロックＩ／Ｏサービスにおいては、論理アドレス（ＬＢＡ）それぞれとフラッシュストレージデバイス３の物理アドレスそれぞれとの間のマッピングを管理するＬＵＴが使用されてもよい。
【００４４】
キー・バリュー・ストアサービスにおいては、論理アドレス（つまり、キーのようなタグ）それぞれとこれら論理アドレス（つまり、キーのようなタグ）に対応するデータが格納されているフラッシュストレージデバイス３の物理アドレスそれぞれとの間のマッピングを管理するＬＵＴが使用されてもよい。このＬＵＴにおいては、タグと、このタグによって識別されるデータが格納されている物理アドレスと、このデータのデータ長との対応関係が管理されてもよい。
【００４５】
各エンドユーザは、使用すべきアドレッシング方法（ＬＢＡ、キー・バリュー・ストアのキー、等）を選択することができる。
【００４６】
これら各ＬＵＴは、ユーザアプリケーション４０２からの論理アドレスそれぞれをフラッシュストレージデバイス３用の論理アドレスそれぞれに変換するのではなく、ユーザアプリケーション４０２からの論理アドレスそれぞれをフラッシュストレージデバイス３の物理アドレスそれぞれに変換する。つまり、これら各ＬＵＴは、フラッシュストレージデバイス３用の論理アドレスを物理アドレスに変換するテーブルとアプリケーションレベルアドレス変換テーブルとが統合（マージ）されたテーブルである。
【００４７】
ホスト（サーバ）２においては、上述のＱｏＳドメイン毎にＩ／Ｏサービス４０３が存在する。あるＱｏＳドメインに属するＩ／Ｏサービス４０３は、対応するＱｏＳドメイン内のユーザアプリケーション４０２によって使用される論理アドレスそれぞれと対応するＱｏＳドメインに割り当てられたリソースグループに属するブロック群の物理アドレスそれぞれとの間のマッピングを管理する。
【００４８】
ホスト（サーバ）２からフラッシュストレージデバイス３へのコマンドの送信およびフラッシュストレージデバイス３からホスト（サーバ）２へのコマンド完了のレスポンス等の返送は、ホスト（サーバ）２およびフラッシュストレージデバイス３の各々に存在するＩ／Ｏキュー５００を介して実行される。これらＩ／Ｏキュー５００も、複数のＱｏＳドメインに対応する複数のキューグループに分類されていてもよい。
【００４９】
フラッシュストレージデバイス３は、複数のＱｏＳドメインに対応する複数のライトバッファ（ＷＢ）６０１、複数のＱｏＳドメインに対応する複数のガベージコレクション（ＧＣ）機能６０２、ＮＡＮＤ型フラッシュメモリ（ＮＡＮＤフラッシュアレイ）６０３を含む。
【００５０】
この図２の右部に示す構成においては、従来型ＳＳＤ内のＬＵＴ３０２とアプリケーションレベルアドレス変換テーブルとがＩ／Ｏサービス４０３内の一つのＬＵＴとしてマージされているので、アドレス変換情報の格納のために消費されるメモリリソースの量を低減できる。また、アドレス変換ステージの数が減少するので、Ｉ／Ｏ性能を向上することが可能となる。
【００５１】
さらに、アプリケーションレベルＧＣとＬＵＴレベルＧＣを含む重複したＧＣではなく、フラッシュストレージデバイス３のみがＧＣ（ユニファイドＧＣ）のためのデータコピーを実行する。したがって、重複したＧＣが実行される構成に比し、システム全体のライトアンプリフィケーションを大幅に低減することが可能となる。この結果、Ｉ／Ｏ性能を改善することができ、且つフラッシュストレージデバイス３の寿命を最大化することが可能となる。
【００５２】
図３は、図１のシステム構成の変形例を示す。
【００５３】
図３においては、複数のホスト２Ａと複数のフラッシュストレージデバイス３との間のデータ転送がネットワーク機器（ここでは、ネットワークスイッチ１）を介して実行される。
【００５４】
すなわち、図３の計算機システムにおいては、図１のサーバ２のストレージ管理機能がマネージャ２Ｂに移され、且つサーバ２のフロントエンド機能が複数のホスト（エンドユーザサービス用ホスト）２Ａに移されている。
【００５５】
マネージャ２Ｂは、複数のフラッシュストレージデバイス３を管理し、各ホスト（エンドユーザサービス用ホスト）２Ａからの要求に応じて、これらフラッシュストレージデバイス３のストレージリソースを各ホスト（エンドユーザサービス用ホスト）２Ａに割り当てる。
【００５６】
各ホスト（エンドユーザサービス用ホスト）２Ａは、ネットワークを介して一つ以上のエンドユーザ端末６１に接続される。各ホスト（エンドユーザサービス用ホスト）２Ａは、上述の統合（マージ）された論理物理アドレス変換テーブルであるルックアップテーブル（ＬＵＴ）を管理する。各ホスト（エンドユーザサービス用ホスト）２Ａは、自身のＬＵＴを使用して、対応するエンドユーザによって使用される論理アドレスそれぞれと自身に割り当てられたリソースの物理アドレスそれぞれとの間のマッピングのみを管理する。したがって、この構成は、システムを容易にスケールアウトすることを可能にする。
【００５７】
各ホスト２ＡのグローバルＦＴＬは、ルックアップテーブル（ＬＵＴ）を管理する機能、高可用性を実現するための機能、重複排除（Ｄｅ−ｄｕｐｌｉｃａｔｉｏｎ）機能、ＱｏＳポリシー制御機能等を有する。
【００５８】
マネージャ２Ｂは、複数のフラッシュストレージデバイス３を管理するための専用のデバイス（計算機）である。マネージャ２Ｂは、各ホスト２Ａから要求された容量分のストレージリソースを予約するグローバルリソース予約機能を有する。さらに、マネージャ２Ｂは、各フラッシュストレージデバイス３の消耗度を監視するためのウェアー監視機能、予約されたストレージリソース（ＮＡＮＤリソース）を各ホスト２Ａに割り当てるＮＡＮＤリソース割り当て機能、ＱｏＳポリシー制御機能、グローバルクロック管理機能、等を有する。
【００５９】
各フラッシュストレージデバイス３は、ローカルＦＴＬを有する。このローカルＦＴＬは、各ホスト２ＡのグローバルＦＴＬと連携するための機能である。このローカルＦＴＬは、ＱｏＳ制御機能、各ＱｏＳドメインのライトバッファを管理する機能、ＱｏＳドメイン内でまたはＱｏＳドメイン間でＧＣデータコピーを実行する機能、リカバリのためのＬＵＴコピー機能、重複排除（Ｄｅ−ｄｕｐｌｉｃａｔｉｏｎ）のために使用される参照カウントを管理する機能、ワークロード解析機能、ハウスキーピング機能、等を含んでいてもよい。
【００６０】
図３のシステム構成によれば、各フラッシュストレージデバイス３の管理はマネージャ２Ｂによって実行されるので、各ホスト２Ａは、自身に割り当てられた一つ以上のフラッシュストレージデバイス３にＩ／Ｏ要求を送信する動作と、フラッシュストレージデバイス３からのレスポンスを受信するという動作とのみを実行すればよい。つまり、複数のホスト２Ａと複数のフラッシュストレージデバイス３との間のデータ転送はスイッチ１のみを介して実行され、マネージャ２Ｂはこのデータ転送には関与しない。また、上述したように、ホスト２Ａそれぞれによって管理されるＬＵＴの内容は互いに独立している。よって、容易にホスト２Ａの数を増やすことができるので、スケールアウト型のシステム構成を実現することができる。
【００６１】
図４は、フラッシュストレージデバイス３の構成例を示す。
【００６２】
フラッシュストレージデバイス３は、コントローラ４および不揮発性メモリ（ＮＡＮＤ型フラッシュメモリ）５を備える。フラッシュストレージデバイス３は、ランダムアクセスメモリ、例えば、ＤＲＡＭ６も備えていてもよい。
【００６３】
ＮＡＮＤ型フラッシュメモリ５は、マトリクス状に配置された複数のメモリセルを含むメモリセルアレイを含む。ＮＡＮＤ型フラッシュメモリ５は、２次元構造のＮＡＮＤ型フラッシュメモリであってもよいし、３次元構造のＮＡＮＤ型フラッシュメモリであってもよい。
【００６４】
ＮＡＮＤ型フラッシュメモリ５のメモリセルアレイは、複数のブロックＢＬＫ０〜ＢＬＫｍ−１を含む。ブロックＢＬＫ０〜ＢＬＫｍ−１の各々は多数のページ（ここではページＰ０〜Ｐｎ−１）によって編成される。ブロックＢＬＫ０〜ＢＬＫｍ−１は、消去単位として機能する。ブロックは、「消去ブロック」、「物理ブロック」、または「物理消去ブロック」と称されることもある。ページＰ０〜Ｐｎ−１の各々は、同一ワード線に接続された複数のメモリセルを含む。ページＰ０〜Ｐｎ−１は、データ書き込み動作およびデータ読み込み動作の単位である。
【００６５】
コントローラ４は、Ｔｏｇｇｌｅ、オープンＮＡＮＤフラッシュインタフェース（ＯＮＦＩ）のようなＮＡＮＤインタフェース１３を介して、不揮発性メモリであるＮＡＮＤ型フラッシュメモリ５に電気的に接続されている。コントローラ４は、ＮＡＮＤ型フラッシュメモリ５を制御するように構成されたメモリコントローラ（制御回路）である。
【００６６】
ＮＡＮＤ型フラッシュメモリ５は、図５に示すように、複数のＮＡＮＤ型フラッシュメモリダイを含む。各ＮＡＮＤ型フラッシュメモリダイは、複数のブロックＢＬＫを含むメモリセルアレイとこのメモリセルアレイを制御する周辺回路とを含む不揮発性メモリダイである。個々のＮＡＮＤ型フラッシュメモリダイは独立して動作可能である。このため、ＮＡＮＤ型フラッシュメモリダイは、並列動作単位として機能する。ＮＡＮＤ型フラッシュメモリダイは、「ＮＡＮＤ型フラッシュメモリチップ」または「不揮発性メモリチップ」とも称される。図５においては、ＮＡＮＤインタフェース１３に１６個のチャンネルＣｈ１、Ｃｈ２、…Ｃｈ１６が接続されており、これらチャンネルＣｈ１、Ｃｈ２、…Ｃｈ１６の各々に、同数（例えばチャンネル当たり２個のダイ）のＮＡＮＤ型フラッシュメモリダイそれぞれが接続されている場合が例示されている。各チャンネルは、対応するＮＡＮＤ型フラッシュメモリダイと通信するための通信線（メモリバス）を含む。
【００６７】
コントローラ４は、チャンネルＣｈ１、Ｃｈ２、…Ｃｈ１６を介してＮＡＮＤ型フラッシュメモリダイ＃１〜＃３２を制御する。コントローラ４は、チャンネルＣｈ１、Ｃｈ２、…Ｃｈ１６を同時に駆動することができる。
【００６８】
チャンネルＣｈ１〜Ｃｈ１６に接続された１６個のＮＡＮＤ型フラッシュメモリダイ＃１〜＃１６は第１のバンクとして編成されてもよく、またチャンネルＣｈ１〜Ｃｈ１６に接続された残りの１６個のＮＡＮＤ型フラッシュメモリダイ＃１７〜＃３２は第２のバンクとして編成されてもよい。バンクは、複数のメモリモジュールをバンクインタリーブによって並列動作させるための単位として機能する。図５の構成例においては、１６チャンネルと、２つのバンクを使用したバンクインタリーブとによって、最大３２個のＮＡＮＤ型フラッシュメモリダイを並列動作させることができる。
【００６９】
本実施形態では、コントローラ４は、各々が複数のブロックＢＬＫから構成される複数のブロック（以下、スーパーブロックと称する）を管理してもよく、スーパーブロックの単位で消去動作を実行してもよい。
【００７０】
スーパーブロックは、これに限定されないが、ＮＡＮＤ型フラッシュメモリダイ＃１〜＃３２から一つずつ選択される計３２個のブロックＢＬＫを含んでいてもよい。なお、ＮＡＮＤ型フラッシュメモリダイ＃１〜＃３２の各々はマルチプレーン構成を有していてもよい。例えば、ＮＡＮＤ型フラッシュメモリダイ＃１〜＃３２の各々が、２つのプレーンを含むマルチプレーン構成を有する場合には、一つのスーパーブロックは、ＮＡＮＤ型フラッシュメモリダイ＃１〜＃３２に対応する６４個のプレーンから一つずつ選択される計６４個のブロックＢＬＫを含んでいてもよい。図６には、一つのスーパーブロックＳＢが、ＮＡＮＤ型フラッシュメモリダイ＃１〜＃３２から一つずつ選択される計３２個のブロックＢＬＫ（図５においては太枠で囲まれているブロックＢＬＫ）から構成される場合が例示されている。
【００７１】
図４に示されているように、コントローラ４は、ホストインタフェース１１、ＣＰＵ１２、ＮＡＮＤインタフェース１３、およびＤＲＡＭインタフェース１４等を含む。これらＣＰＵ１２、ＮＡＮＤインタフェース１３、ＤＲＡＭインタフェース１４は、バス１０を介して相互接続される。
【００７２】
このホストインタフェース１１は、ホスト２との通信を実行するように構成されたホストインタフェース回路である。このホストインタフェース１１は、例えば、ＰＣＩｅコントローラ（ＮＶＭｅコントローラ）であってよい。ホストインタフェース１１は、ホスト２から様々な要求（コマンド）を受信する。これら要求（コマンド）には、ライト要求（ライトコマンド）、リード要求（リードコマンド）、他の様々な要求（コマンド）が含まれる。
【００７３】
ＣＰＵ１２は、ホストインタフェース１１、ＮＡＮＤインタフェース１３、ＤＲＡＭインタフェース１４を制御するように構成されたプロセッサである。ＣＰＵ１２は、フラッシュストレージデバイス３の電源オンに応答してＮＡＮＤ型フラッシュメモリ５または図示しないＲＯＭから制御プログラム（ファームウェア）をＤＲＡＭ６にロードし、そしてこのファームウェアを実行することによって様々な処理を行う。なお、ファームウェアはコントローラ４内の図示しないＳＲＡＭ上にロードされてもよい。このＣＰＵ１２は、ホスト２からの様々なコマンドを処理するためのコマンド処理等を実行することができる。ＣＰＵ１２の動作は、ＣＰＵ１２によって実行される上述のファームウェアによって制御される。なお、コマンド処理の一部または全部は、コントローラ４内の専用ハードウェアによって実行してもよい。
【００７４】
ＣＰＵ１２は、ライト動作制御部２１、リード動作制御部２２、およびＧＣ動作制御部２３として機能することができる。これらライト動作制御部２１、リード動作制御部２２、およびＧＣ動作制御部２３においては、図２の右部に示すシステム構成を実現するためのアプリケーションプログラムインタフェース（ＡＰＩ）が実装されている。
【００７５】
ライト動作制御部２１は、論理アドレスを指定するライト要求（ライトコマンド）をホスト２から受信する。論理アドレスは、書き込むべきデータ（ユーザデータ）を識別可能な識別子であり、例えば、ＬＢＡであってもよいし、あるいはキー・バリュー・ストアのキーのようなタグであってもよい。ライトコマンドを受信した場合、ライト動作制御部２１は、まず、ホスト２からのデータを書き込むべきブロック（書き込み先ブロック）およびこのブロック内の位置（書き込み先位置）を決定する。次いで、ライト動作制御部２１は、ホスト２からのデータ（ライトデータ）を、この書き込み先ブロックの書き込み先位置に書き込む。この場合、ライト動作制御部２１は、ホスト２からのデータのみならず、このデータとこのデータの論理アドレスの双方を書き込み先ブロックに書き込むことができる。
【００７６】
そして、ライト動作制御部２１は、指定された論理アドレスと、データ（ライトデータ）が書き込まれたＮＡＮＤ型フラッシュメモリ５内の位置（物理記憶位置）を示す物理アドレスとをホスト２に返す。
【００７７】
この場合、この物理アドレスは、（１）この書き込み先ブロックのブロック番号と、（２）この書き込み先ブロック内の書き込み先位置を示すブロック内オフセットとによって表される。ブロック番号は、データが書き込まれたブロックを指定する識別子である。ブロック番号としては、複数のブロック内の任意の一つを一意に識別可能な様々な値を使用し得る。
【００７８】
ブロック内オフセットは、書き込み先ブロックの先頭から書き込み先位置までのオフセット、つまり書き込み先ブロックの先頭に対する書き込み先位置のオフセットを示す。書き込み先ブロックの先頭から書き込み先位置までのオフセットのサイズは、ページサイズとは異なるサイズを有する粒度（Ｇｒａｉｎ）の倍数で示される。粒度（Ｇｒａｉｎ）は、上述のアクセス単位である。粒度（Ｇｒａｉｎ）のサイズの最大値は、ブロックサイズまでに制限される。換言すれば、ブロック内オフセットは、書き込み先ブロックの先頭から書き込み先位置までのオフセットをページサイズとは異なるサイズを有する粒度の倍数で示す。
【００７９】
粒度（Ｇｒａｉｎ）は、ページサイズよりも小さいサイズを有していてもよい。例えば、ページサイズが１６Ｋバイトである場合、粒度（Ｇｒａｉｎ）は、そのサイズが４Ｋバイトであってもよい。この場合、ある一つのブロックにおいては、各々サイズが４Ｋバイトである複数のオフセット位置が規定される。ブロック内の最初のオフセット位置に対応するブロック内オフセットは、例えば０であり、ブロック内の次のオフセット位置に対応するブロック内オフセットは、例えば１である、ブロック内のさらに次のオフセット位置に対応するブロック内オフセットは、例えば２である。
【００８０】
あるいは、粒度（Ｇｒａｉｎ）は、ページサイズよりも大きなサイズを有していてもよい。例えば、粒度（Ｇｒａｉｎ）は、ページサイズの数倍のサイズであってもよい。ページサイズが１６Ｋバイトである場合、粒度は、３２Ｋバイトのサイズであってもよい。
【００８１】
このように、ライト動作制御部２１は、データを書き込むべきブロックおよびこのブロック内の位置の双方を自身で決定し、そしてホスト２からのデータ（ユーザデータ）が書き込まれた位置を示す物理アドレスとして、ブロック番号およびページ番号ではなく、ブロック番号およびブロック内オフセットをホスト２に通知する。これにより、ホスト２は、ブロックサイズ、ページ書き込み順序制約、バッドページ、ページサイズ等を意識することなく、ユーザデータをＮＡＮＤ型フラッシュメモリ５に書き込むことができ、さらに、ブロック番号およびブロック内オフセットによって表された物理アドレスを、このユーザデータの論理アドレスにマッピングすることができる。
【００８２】
リード動作制御部２２は、物理アドレス（すなわち、ブロック番号およびブロック内オフセット）を指定するリード要求（リードコマンド）をホスト２から受信した場合、これらブロック番号およびブロック内オフセットに基づいてＮＡＮＤ型フラッシュメモリ５からデータをリードする。リード対象のブロックは、ブロック番号によって特定される。このブロック内のリード対象の物理記憶位置は、ブロック内オフセットによって特定される。このブロック内オフセットを使用することにより、ホスト２は、ＮＡＮＤ型フラッシュメモリの世代毎の異なるページサイズをハンドリングする必要がない。
【００８３】
リード対象の物理記憶位置を得るために、リード動作制御部２２は、まず、このブロック内オフセットを、ページサイズを表す粒度の数（ここでは、４）で除算し、そしてこの除算によって得られる商および余りを、リード対象のページ番号およびリード対象のページ内オフセットとしてそれぞれ決定してもよい。
【００８４】
ＧＣ動作制御部２３は、ＮＡＮＤ型フラッシュメモリ５のガベージコレクションを実行する場合、このガベージコレクションのためのコピー元ブロック（ＧＣソースブロック）およびコピー先ブロック（ＧＣデスティネーションブロック）をＮＡＮＤ型フラッシュメモリ５内の多数のブロックから選択する。この場合、ＧＣ動作制御部２３は、通常、複数のコピー元ブロック（ＧＣソースブロック）と、一つ以上のコピー先ブロック（ＧＣデスティネーションブロック）とを選択する。コピー元ブロック（ＧＣソースブロック）を選択するための条件（ＧＣポリシー）は、ホスト２によって指定されてもよい。例えば、有効データ量が最も少ないブロックをコピー元ブロック（ＧＣソースブロック）として優先的に選択するというＧＣポリシーが使用されてもよいし、別のＧＣポリシーが使用されてもよい。このように、コピー元ブロック（ＧＣソースブロック）およびコピー先ブロック（ＧＣデスティネーションブロック）の選択は、ホスト２ではなく、フラッシュストレージデバイス３のコントローラ４（ＧＣ動作制御部２３）によって実行される。コントローラ４は、各ブロック管理テーブルを使用して、各ブロックの有効データ量を管理してもよい。
【００８５】
ガベージコレクションのコピー元グループ（ソースＱｏｓドメイン）およびコピー先グループ（デスティネーションＱｏｓドメイン）を指定するコマンド（ＧＣ制御コマンド）をホスト２から受信した場合、ＧＣ動作制御部２３は、コピー元グループに属するブロック群からガベージコレクションのコピー元ブロックを選択し、コピー先グループに属するブロック群からガベージコレクションのコピー先ブロックを選択する。
【００８６】
有効データ／無効データの管理は、ブロック管理テーブル３２を使用して実行されてもよい。このブロック管理テーブル３２は、例えば、ブロック毎に存在してもよい。あるブロックに対応するブロック管理テーブル３２においては、このブロック内のデータそれぞれの有効／無効を示すビットマップフラグが格納されている。ここで、有効データとは、ＬＵＴから参照されているデータ（すなわち論理アドレスから最新のデータとして紐付けられているデータ）であって、後にホスト２からリードされる可能性があるデータを意味する。無効データとは、もはやホスト２からリードされる可能性が無いデータを意味する。例えば、ある論理アドレスに関連付けられているデータは有効データであり、どの論理アドレスにも関連付けられていないデータは無効データである。
【００８７】
ＧＣ動作制御部２３は、コピー元ブロック（ＧＣソースブロック）内に格納されている有効データを書き込むべきコピー先ブロック（ＧＣデスティネーションブロック）内の位置（コピー先位置）を決定し、有効データをコピー先ブロック（ＧＣデスティネーションブロック）のこの決定された位置（コピー先位置）にコピーする。この場合、ＧＣ動作制御部２３は、有効データとこの有効データの論理アドレスの双方を、コピー先ブロック（ＧＣデスティネーションブロック）にコピーしてもよい。ＧＣ動作制御部２３は、コピー元ブロック（ＧＣソースブロック）に対応するブロック管理テーブル３２を参照することによってＧＣソースブロック内の有効データを特定してもよい。あるいは、別の実施形態では、有効データ／無効データの管理がホスト２によって実行されてもよい。この場合には、ＧＣ動作制御部２３は、ＧＣソースブロック内の各データの有効／無効を示す情報をホスト２から受信し、この受信した情報に基づいて、ＧＣソースブロック内の有効データを特定してもよい。
【００８８】
そして、ＧＣ動作制御部２３は、コピーされた有効データの論理アドレスと、コピー先ブロック（ＧＣデスティネーションブロック）のブロック番号と、コピー先ブロック（ＧＣデスティネーションブロック）の先頭からコピー先位置までのオフセットを上述の粒度の倍数で示すブロック内オフセットとをホスト２に通知する。
【００８９】
本実施形態では、上述したように、ライト動作制御部２１は、ホスト２からのデータ（ライトデータ）とホスト２からの論理アドレスの双方を書き込み先ブロックに書き込むことができる。このため、ＧＣ動作制御部２３は、コピー元ブロック（ＧＣソースブロック）内の各データの論理アドレスをこのコピー元ブロック（ＧＣソースブロック）から容易に取得することができるので、コピーされた有効データの論理アドレスをホスト２に容易に通知することができる。
【００９０】
ＮＡＮＤインタフェース１３は、ＣＰＵ１２の制御の下、ＮＡＮＤ型フラッシュメモリ５を制御するように構成されたメモリ制御回路である。ＤＲＡＭインタフェース１４は、ＣＰＵ１２の制御の下、ＤＲＡＭ６を制御するように構成されたＤＲＡＭ制御回路である。ＤＲＡＭ６の記憶領域の一部は、ライトバッファ（ＷＢ）３１の格納のために使用される。また、ＤＲＡＭ６の記憶領域の他の一部は、ブロック管理テーブル３２の格納のために使用される。なお、これらライトバッファ（ＷＢ）３１およびブロック管理テーブル３２は、コントローラ４内の図示しないＳＲＡＭに格納されてもよい。
【００９１】
図７は、フラッシュストレージデバイス３に適用されるライトコマンドを示す。
【００９２】
ライトコマンドは、フラッシュストレージデバイス３にデータの書き込みを要求するコマンドである。このライトコマンドは、コマンドＩＤ、ＱｏＳドメインＩＤ、論理アドレス、長さ、等を含んでもよい。
【００９３】
コマンドＩＤはこのコマンドがライトコマンドであることを示すＩＤ（コマンドコード）であり、ライトコマンドにはライトコマンド用のコマンドＩＤが含まれる。
【００９４】
ＱｏＳドメインＩＤは、データが書き込まれるべきＱｏＳドメインを一意に識別可能な識別子である。あるエンドユーザからのライト要求に応じてホスト２から送信されるライトコマンドは、このエンドユーザに対応するＱｏＳドメインを指定するＱｏＳドメインＩＤを含んでもよい。ネームスペースＩＤがＱｏＳドメインＩＤとして扱われてもよい。
【００９５】
論理アドレスは、書き込まれるべきライトデータを識別するための識別子である。この論理アドレスは、上述したように、ＬＢＡであってもよいし、キー・バリュー・ストアのキーであってもよい。論理アドレスがＬＢＡである場合には、このライトコマンドに含まれる論理アドレス（開始ＬＢＡ）は、ライトデータが書き込まれるべき論理位置（最初の論理位置）を示す。
【００９６】
長さは、書き込まれるべきライトデータの長さを示す。この長さ（データ長）は、粒度（Ｇｒａｉｎ）の数によって指定されてもよいし、ＬＢＡの数によって指定されてもよいし、あるいはそのサイズがバイトによって指定されてもよい。
【００９７】
上述したように、コントローラ４は、ＮＡＮＤ型フラッシュメモリ５内の多数のブロックの各々が一つのグループのみに属するようにＮＡＮＤ型フラッシュメモリ５内の多数のブロックを複数のグループ（複数のＱｏＳドメイン）に分類することができる。そして、コントローラ４は、グループ（ＱｏＳドメイン）毎に、フリーブロックリスト（フリーブロックプール）とアクティブブロックリスト（アクティブブロックプール）とを管理することができる。
【００９８】
各ブロックの状態は、有効データを格納しているアクティブブロックと、有効データを格納していないフリーブロックとに大別される。アクティブブロックである各ブロックは、アクティブブロックリストによって管理される。一方、フリーブロックである各ブロックは、フリーブロックリストによって管理される。
【００９９】
ホスト２からライトコマンドを受信した時、コントローラ４は、ホスト２からのデータが書き込まれるべきブロック（書き込み先ブロック）およびこの書き込み先ブロック内の位置（書き込み先位置）を決定する。コントローラ４は、ＱｏＳドメインＩＤに対応するＱｏＳドメインに属するフリーブロック群の一つを書き込み先ブロックとして決定してもよい。書き込み先位置は、ページ書き込み順序の制約およびバッドページ等を考慮して決定される。そして、コントローラ４は、ホスト２からのデータを、書き込み先ブロック内の書き込み先位置に書き込む。
【０１００】
なお、この書き込み先ブロック全体がユーザデータで満たされたならば、コントローラ４は、この書き込み先ブロックをアクティブブロックリスト（アクティブブロックプール）に移動する。そして、コントローラ４は、このＱｏＳドメインに対応するフリーブロックリストからフリーブロックを再び選択し、この選択したフリーブロックを新たな書き込み先ブロックとして割り当てる。
【０１０１】
もしフリーブロックリストによって管理されている残りフリーブロックの数が所定のポリシーによって定められる閾値以下に低下した場合あるいはホスト２からガベージコレクションを実施する指示があった場合、コントローラ４は、このＱｏＳドメインのガベージコレクションを開始してもよい。
【０１０２】
このＱｏＳドメインのガベージコレクションでは、コントローラ４は、このＱｏＳドメインに対応するアクティブブロック群からコピー元ブロック（ＧＣソースブロック）とコピー先ブロック（ＧＣデスティネーションブロック）を選択する。どのブロックをＧＣ候補（コピー元ブロック）として選択するかは、ホスト２によって指定される上述のポリシーに従って決定されてもよいし、ホスト２から指定されても良い。ポリシーも基づく場合には例えば、有効データ量が最も少ないブロックがＧＣ候補（コピー元ブロック）として選択されてもよい。
【０１０３】
図８は、図７のライトコマンドに対するレスポンスを示す。
【０１０４】
このレスポンスは、論理アドレス、物理アドレス、長さを含む。
【０１０５】
論理アドレスは、図７のライトコマンドに含まれていた論理アドレスである。
【０１０６】
物理アドレスは、図７のライトコマンドに応じてデータが書き込まれたＮＡＮＤ型フラッシュメモリ５内の物理記憶位置を示す。本実施形態では、この物理アドレスは、ブロック番号とページ番号との組み合わせではなく、上述したように、ブロック番号とオフセット（ブロック内オフセット）との組み合わせによって指定される。ブロック番号は、フラッシュストレージデバイス３内の全てのブロックの任意の一つを一意に識別可能な識別子である。全てのブロックに異なるブロック番号が付与されている場合には、これらブロック番号を直接使用してもよい。あるいは、ブロック番号は、ダイ番号と、ダイ内ブロック番号との組み合わせによって表現されてもよい。長さは、書き込まれるべきライトデータの長さを示す。この長さ（データ長）は、粒度（Ｇｒａｉｎ）の数によって指定されてもよいし、ＬＢＡの数によって指定されてもよいし、あるいはそのサイズがバイトによって指定されてもよい。
【０１０７】
図９は、フラッシュストレージデバイス３に適用されるＴｒｉｍコマンドを示す。
【０１０８】
このＴｒｉｍコマンドは、無効にすべきデータが格納されている物理記憶位置を示すブロック番号およびブロック内オフセットを含むコマンドである。つまり、このＴｒｉｍコマンドは、ＬＢＡのような論理アドレスではなく、物理アドレスを指定可能である。このＴｒｉｍコマンドは、コマンドＩＤ、物理アドレス、長さを含む。
【０１０９】
コマンドＩＤはこのコマンドがＴｒｉｍコマンドであることを示すＩＤ（コマンドコード）であり、ＴｒｉｍコマンドにはＴｒｉｍコマンド用のコマンドＩＤが含まれる。
【０１１０】
物理アドレスは、無効化すべきデータが格納されている最初の物理記憶位置を示す。本実施形態では、この物理アドレスは、ブロック番号とオフセット（ブロック内オフセット）との組み合わせによって指定される。
【０１１１】
長さは、無効化すべきデータの長さを示す。この長さ（データ長）は、粒度（Ｇｒａｉｎ）の数によって指定されてもよいし、バイトによって指定されてもよい。
【０１１２】
コントローラ４は、複数のブロックの各々に含まれるデータそれぞれの有効／無効を示すフラグ（ビットマップフラグ）をブロック管理テーブル３２を使用して管理する。無効にすべきデータが格納されている物理記憶位置を示すブロック番号およびオフセット（ブロック内オフセット）を含むＴｒｉｍコマンドをホスト２から受信した場合、コントローラ４は、ブロック管理テーブル３２を更新して、Ｔｒｉｍコマンドに含まれるブロック番号およびブロック内オフセットに対応する物理記憶位置のデータに対応するフラグ（ビットマップフラグ）を無効を示す値に変更する。
【０１１３】
図１０は、物理アドレスを規定するブロック番号およびオフセットを示す。
【０１１４】
ブロック番号はある一つのブロックＢＬＫを指定する。各ブロックＢＬＫは、図１０に示されているように、複数のページ（ここでは、ページ０〜ページｎ）を含む。
【０１１５】
ページサイズ（各ページのユーザデータ格納領域）が１６Ｋバイトであり、粒度（Ｇｒａｉｎ）が４ＫＢのサイズであるケースにおいては、このブロックＢＬＫは、４×（ｎ＋１）個の領域に論理的に分割される。
【０１１６】
オフセット＋０はページ０の最初の４ＫＢ領域を示し、オフセット＋１はページ０の２番目の４ＫＢ領域を示し、オフセット＋２はページ０の３番目の４ＫＢ領域を示し、オフセット＋３はページ０の４番目の４ＫＢ領域を示す。
【０１１７】
オフセット＋４はページ１の最初の４ＫＢ領域を示し、オフセット＋５はページ１の２番目の４ＫＢ領域を示し、オフセット＋６はページ１の３番目の４ＫＢ領域を示し、オフセット＋７はページ１の４番目の４ＫＢ領域を示す。
【０１１８】
図１１は、ライトコマンドに応じて実行される書き込み動作とこのライトコマンドに対するレスポンスに含まれる返値との関係を示す。
【０１１９】
フラッシュストレージデバイス３のコントローラ４は、有効データを含まないフリーブロック群をフリーブロックリストによって管理しており、これらフリーブロック群から一つのブロック（フリーブロック）を選択し、選択したブロックを書き込み先ブロックとして割り当てる。いま、ブロックＢＬＫ＃１が書き込み先ブロックとして割り当てられた場合を想定する。コントローラ４は、ページ０、ページ１、ページ２、…ページｎという順序で、データをページ単位でブロックＢＬＫ＃１に書き込む。
【０１２０】
図１１においては、ブロックＢＬＫ＃１のページ０に１６Ｋバイト分のデータがすでに書き込まれている状態で、論理アドレス（ＬＢＡｘ）および長さ（＝４）を指定するライトコマンドがホスト２から受信された場合が想定されている。コントローラ４は、ブロックＢＬＫ＃１のページ１を書き込み先位置として決定し、ホスト２から受信される１６Ｋバイト分のライトデータをブロックＢＬＫ＃１のページ１に書き込む。そして、コントローラ４は、このライトコマンドに対するレスポンス（論理アドレス、ブロック番号、オフセット（ブロック内オフセット）、長さ）をホスト２に返す。このケースにおいては、論理アドレスはＬＢＡｘであり、ブロック番号はＢＬＫ＃１であり、オフセット（ブロック内オフセット）は＋５であり、長さは４である。
【０１２１】
図１２は、不良ページ（バッドページ）をスキップする書き込み動作を示す。
【０１２２】
図１２においては、ブロックＢＬＫ＃１のページ０、ページ１にデータがすでに書き込まれている状態で、論理アドレス（ＬＢＡｘ＋１）および長さ（＝４）を指定するライトコマンドがホスト２から受信された場合が想定されている。もしブロックＢＬＫ＃１のページ２が不良ページであるならば、コントローラ４は、ブロックＢＬＫ＃１のページ３を書き込み先位置として決定し、ホスト２から受信される１６Ｋバイト分のライトデータをブロックＢＬＫ＃１のページ３に書き込む。そして、コントローラ４は、このライトコマンドに対するレスポンス（論理アドレス、ブロック番号、オフセット（ブロック内オフセット）、長さ）をホスト２に返す。このケースにおいては、論理アドレスはＬＢＡｘ＋１であり、ブロック番号はＢＬＫ＃１であり、オフセット（ブロック内オフセット）は＋１２であり、長さは４である。
【０１２３】
図１３は、不良ページをスキップする書き込み動作の別の例を示す。
【０１２４】
図１３においては、不良ページを挟む２つのページに跨がってデータが書き込まれる場合が想定されている。いま、ブロックＢＬＫ＃２のページ０、ページ１にデータがすでに書き込まれており、且つライトバッファ３１に未書き込みの８Ｋバイト分のライトデータが残っている場合を想定する。この状態で、論理アドレス（ＬＢＡｙ）および長さ（＝６）を指定するライトコマンドが受信されたならば、コントローラ４は、未書き込みの８Ｋバイトライトデータと、ホスト２から新たに受信される２４Ｋバイトライトデータ内の最初の８Ｋバイトライトデータとを使用して、ページサイズに対応する１６Ｋバイトライトデータを準備する。そして、コントローラ４は、この準備した１６ＫバイトライトデータをブロックＢＬＫ＃２のページ２に書き込む。
【０１２５】
もしブロックＢＬＫ＃２の次のページ３が不良ページであるならば、コントローラ４は、ブロックＢＬＫ＃２のページ４を次の書き込み先位置として決定し、ホスト２から受信された２４Ｋバイトライトデータ内の残りの１６Ｋバイトライトデータを、ブロックＢＬＫ＃２のページ４に書き込む。
【０１２６】
そして、コントローラ４は、このライトコマンドに対するレスポンス（論理アドレス、ブロック番号、オフセット（ブロック内オフセット）、長さ）をホスト２に返す。このケースにおいては、このレスポンスは、ＬＢＡｙ、ブロック番号（＝ＢＬＫ＃２）、オフセット（＝＋１０）、長さ（＝２）、ブロック番号（＝ＢＬＫ＃２）、オフセット（＝＋１６）、長さ（＝４）を含んでもよい。
【０１２７】
図１４、図１５は、論理アドレスとデータのペアをブロック内のページに書き込む動作を示す。
【０１２８】
各ブロックにおいて、各ページは、ユーザデータを格納するためのユーザデータ領域と管理データを格納するための冗長領域とを含んでもよい。ページサイズは１６ＫＢ＋アルファである。
【０１２９】
コントローラ４は、４ＫＢユーザデータとこの４ＫＢユーザデータに対応する論理アドレス（例えばＬＢＡ）との双方を書き込み先ブロックＢＬＫに書き込む。この場合、図１４に示すように、各々がＬＢＡと４ＫＢユーザデータとを含む４つのデータセットが同じページに書き込まれてもよい。ブロック内オフセットは、セット境界を示してもよい。
【０１３０】
あるいは、図１５に示されているように、４つの４ＫＢユーザデータがページ内のユーザデータ領域に書き込まれ、これら４つの４ＫＢユーザデータに対応する４つのＬＢＡがこのページ内の冗長領域に書き込まれてもよい。
【０１３１】
図１６は、スーバーブロックが使用されるケースにおけるブロック番号とオフセット（ブロック内オフセット）との関係を示す。以下では、ブロック内オフセットは単にオフセットとしても参照される。
【０１３２】
ここでは、図示を簡単化するために、ある一つのスーパーブロックＳＢ＃１が４つのブロックＢＬＫ＃１１、ＢＬＫ＃２１、ＢＬＫ＃３１、ＢＬＫ＃４１から構成されている場合が想定されている。コントローラ４は、ブロックＢＬＫ＃１１のページ０、ブロックＢＬＫ＃２１のページ０、ブロックＢＬＫ＃３１のページ０、ブロックＢＬＫ＃４１のページ０、ブロックＢＬＫ＃１１のページ１、ブロックＢＬＫ＃２１のページ１、ブロックＢＬＫ＃３１のページ１、ブロックＢＬＫ＃４１のページ１、…という順序でデータを書き込む。
【０１３３】
オフセット＋０はブロックＢＬＫ＃１１のページ０の最初の４ＫＢ領域を示し、オフセット＋１はブロックＢＬＫ＃１１のページ０の２番目の４ＫＢ領域を示し、オフセット＋２はブロックＢＬＫ＃１１のページ０の３番目の４ＫＢ領域を示し、オフセット＋３はブロックＢＬＫ＃１１のページ０の４番目の４ＫＢ領域を示す。
【０１３４】
オフセット＋４はブロックＢＬＫ＃２１のページ０の最初の４ＫＢ領域を示し、オフセット＋５はブロックＢＬＫ＃２１のページ０の２番目の４ＫＢ領域を示し、オフセット＋６はブロックＢＬＫ＃２１のページ０の３番目の４ＫＢ領域を示し、オフセット＋７はブロックＢＬＫ＃２１のページ０の４番目の４ＫＢ領域を示す。
【０１３５】
同様に、オフセット＋１２はブロックＢＬＫ＃４１のページ０の最初の４ＫＢ領域を示し、オフセット＋１３はブロックＢＬＫ＃４１のページ０の２番目の４ＫＢ領域を示し、オフセット＋１４はブロックＢＬＫ＃４１のページ０の３番目の４ＫＢ領域を示し、オフセット＋１５はブロックＢＬＫ＃４１のページ０の４番目の４ＫＢ領域を示す。
【０１３６】
オフセット＋１６はブロックＢＬＫ＃１１のページ１の最初の４ＫＢ領域を示し、オフセット＋１７はブロックＢＬＫ＃１１のページ１の２番目の４ＫＢ領域を示し、オフセット＋１８はブロックＢＬＫ＃１１のページ１の３番目の４ＫＢ領域を示し、オフセット＋１９はブロックＢＬＫ＃１１のページ１の４番目の４ＫＢ領域を示す。
【０１３７】
オフセット＋２０はブロックＢＬＫ＃２１のページ１の最初の４ＫＢ領域を示し、オフセット＋２１はブロックＢＬＫ＃２１のページ１の２番目の４ＫＢ領域を示し、オフセット＋２２はブロックＢＬＫ＃２１のページ１の３番目の４ＫＢ領域を示し、オフセット＋２３はブロックＢＬＫ＃２１のページ１の４番目の４ＫＢ領域を示す。
【０１３８】
同様に、オフセット＋２８はブロックＢＬＫ＃４１のページ１の最初の４ＫＢ領域を示し、オフセット＋２９はブロックＢＬＫ＃４１のページ１の２番目の４ＫＢ領域を示し、オフセット＋３０はブロックＢＬＫ＃４１のページ１の３番目の４ＫＢ領域を示し、オフセット＋３１はブロックＢＬＫ＃４１のページ１の４番目の４ＫＢ領域を示す。
【０１３９】
例えば、あるＬＢＡ（ＬＢＡｘ）を指定するライトコマンドに対応する４Ｋバイトデータをオフセット＋８に対応する位置に書き込んだ場合には、コントローラ４は、論理アドレス（＝ＬＢＡｘ）、ブロック番号（＝ＳＢ＃１）、オフセット（＝＋８）、長さ（＝１）をこのライトコマンドに対するレスポンスとしてホスト２に返してもよい。
【０１４０】
図１７は、ホスト２とフラッシュストレージデバイス３とによって実行される書き込み動作処理のシーケンスを示す。
【０１４１】
ホスト２は、ＱｏＳドメインＩＤ、ＬＢＡ、長さを含むライトコマンドをフラッシュストレージデバイス３に送信する。フラッシュストレージデバイス３のコントローラ４がこのライトコマンドを受信した時、コントローラ４は、ホスト２からのライトデータを書き込むべき書き込み先ブロックおよびこの書き込み先ブロック内の位置を決定する。より詳しくは、コントローラ４は、フリーブロックリストから一つのフリーブロックを選択し、選択したフリーブロックを書き込み先ブロックとして割り当てる（ステップＳ１２）。つまり、この選択されたフリーブロックおよびこの選択されたフリーブロック内の利用可能な最初のページが、ホスト２からのライトデータを書き込むべき書き込み先ブロックおよびこの書き込み先ブロック内の位置として決定される。もし書き込み先ブロックがすでに割り当てられている場合には、このステップ１２における書き込み先ブロック割り当て処理を実行する必要は無い。すでに割り当てられている書き込み先ブロック内の利用可能な次のページが、ホスト２からのライトデータを書き込むべき書き込み先ブロック内の位置として決定される。
【０１４２】
コントローラ４は、複数のＱｏＳドメインに対応する複数のフリーブロックリストを管理してもよい。あるＱｏＳドメインに対応するフリーブロックリストにおいては、このＱｏＳドメインに対して予約されたブロック群のみが登録されてもよい。この場合、ステップＳ１２では、コントローラ４は、ライトコマンドのＱｏＳドメインＩＤによって指定されるＱｏＳドメインに対応するフリーブロックリストを選択し、この選択したフリーブロックリストから一つのフリーブロックを選択し、この選択したフリーブロックを書き込み先ブロックとして割り当ててもよい。これにより、異なるＱｏＳドメインに対応するデータが同じブロックに混在されてしまうことを防止することができる。
【０１４３】
コントローラ４は、ホスト２から受信されるライトデータを書き込み先ブロックに書き込む（ステップＳ１２）。ステップＳ１２では、コントローラ４は、論理アドレス（ここではＬＢＡ）とライトデータの双方を書き込み先ブロックに書き込む。
【０１４４】
コントローラ４は、ブロック管理テーブル３２を更新して、書き込まれたデータに対応するビットマップフラグ（つまり、このデータが書き込まれた物理記憶位置の物理アドレスに対応するビットマップフラグ）を０から１に変更する（ステップＳ１３）。例えば、図１８に示されているように、開始ＬＢＡがＬＢＡｘである１６Ｋバイト更新データがブロックＢＬＫ＃１のオフセット＋４〜＋７に対応する物理記憶位置に書き込まれた場合を想定する。この場合、図１９に示されているように、ブロックＢＬＫ＃１用のブロック管理テーブルにおいては、オフセット＋４〜＋７に対応するビットマップフラグそれぞれが０から１に変更される。
【０１４５】
コントローラ４は、このライトコマンドに対するレスポンスをホスト２に返す（ステップＳ１４）。例えば、図１８に示されているように、開始ＬＢＡがＬＢＡｘである１６Ｋバイト更新データがブロックＢＬＫ＃１のオフセット＋４〜＋７に対応する物理記憶位置に書き込まれたならば、ＬＢＡｘ、ブロック番号（＝ＢＬＫ１）、オフセット（＝＋４）、長さ（＝４）を含むレスポンスがコントローラ４からホスト２に送信される。
【０１４６】
ホスト２がこのレスポンスを受信した時、ホスト２は、ホスト２によって管理されているＬＵＴを更新して、書き込まれたライトデータに対応する論理アドレスそれぞれに物理アドレスをマッピングする。図２０に示されているように、ＬＵＴは、複数の論理アドレス（例えばＬＢＡ）それぞれに対応する複数のエントリを含む。ある論理アドレス（例えばあるＬＢＡ）に対応するエントリには、このＬＢＡに対応するデータが格納されているＮＡＮＤ型フラッシュメモリ５内の位置（物理記憶位置）を示す物理アドレスＰＢＡ、つまりブロック番号、オフセット（ブロック内オフセット）が格納される。図１８に示されているように、開始ＬＢＡがＬＢＡｘである１６Ｋバイト更新データがブロックＢＬＫ＃１のオフセット＋４〜＋７に対応する物理記憶位置に書き込まれたならば、図２０に示されているように、ＬＵＴが更新されて、ＬＢＡｘに対応するエントリにＢＬＫ＃１、オフセット＋４が格納され、ＬＢＡｘ＋１に対応するエントリにＢＬＫ＃１、オフセット＋５が格納され、ＬＢＡｘ＋２に対応するエントリにＢＬＫ＃１、オフセット＋６が格納され、ＬＢＡｘ＋３に対応するエントリにＢＬＫ＃１、オフセット＋７が格納される。
【０１４７】
この後、ホスト２は、上述の更新データの書き込みによって不要になった以前のデータを無効化するためのＴｒｉｍコマンドをフラッシュストレージデバイス３に送信する（ステップＳ２１）。図１８に示されているように、以前のデータがブロックＢＬＫ＃０のオフセット＋０、オフセット＋１、オフセット＋２、オフセット＋３に対応する位置に格納されている場合には、図２１に示すように、ブロック番号（＝ＢＬＫ＃０）、オフセット（＝＋０）、長さ（＝４）を指定するＴｒｉｍコマンドがホスト２からフラッシュストレージデバイス３に送信される。フラッシュストレージデバイス３のコントローラ４は、このＴｒｉｍコマンドに応じて、ブロック管理テーブル３２を更新する（ステップＳ１５）。ステップＳ１５においては、図２１に示すように、ブロックＢＬＫ＃０用のブロック管理テーブルにおいて、オフセット＋０〜＋３に対応するビットマップフラグそれぞれが１から０に変更される。
【０１４８】
図２２は、フラッシュストレージデバイス３に適用されるリードコマンドを示す。
【０１４９】
リードコマンドは、フラッシュストレージデバイス３にデータの読み出しを要求するコマンドである。このリードコマンドは、コマンドＩＤ、物理アドレスＰＢＡ、長さ、転送先ポインタを含む。
【０１５０】
コマンドＩＤはこのコマンドがリードコマンドであることを示すＩＤ（コマンドコード）であり、リードコマンドにはリードコマンド用のコマンドＩＤが含まれる。
【０１５１】
物理アドレスＰＢＡは、データが読み出されるべき最初の物理記憶位置を示す。物理アドレスＰＢＡは、ブロック番号、オフセット（ブロック内オフセット）によって指定される。
【０１５２】
長さは、リードすべきデータの長さを示す。このデータ長は、Ｇｒａｉｎの数によって指定可能である。
【０１５３】
転送先ポインタは、読み出されたデータが転送されるべきホスト２内のメモリ上の位置を示す。
【０１５４】
一つのリードコマンドは、物理アドレスＰＢＡ（ブロック番号、オフセット）と長さの組を複数指定することができる。
【０１５５】
図２３は、リード動作を示す。
【０１５６】
ここでは、ブロック番号（＝ＢＬＫ＃２）、オフセット（＝＋５）、長さ（＝３）を指定するリードコマンドがホスト２から受信された場合が想定されている。フラッシュストレージデバイス４のコントローラ５は、ブロック番号（＝ＢＬＫ＃２）、オフセット（＝＋５）、長さ（＝３）に基づいて、ＢＬＫ＃２からデータｄ１〜ｄ３をリードする。この場合、コントローラ４は、ＢＬＫ＃２のページ１から１ページサイズ分のデータをリードし、このリードデータからデータｄ１〜データｄ３を抽出する。次いで、コントローラ４は、データｄ１〜データｄ３を、転送先ポインタによって指定されるホストメモリ上に転送する。
【０１５７】
図２４は、ホスト２からのリードコマンドに応じて、異なる物理記憶位置にそれぞれ格納されているデータ部をリードする動作を示す。
【０１５８】
ここでは、ブロック番号（＝ＢＬＫ＃２）、オフセット（＝＋１０）、長さ（＝２）、ブロック番号（＝ＢＬＫ＃２）、オフセット（＝＋１６）、長さ（＝４）を指定するリードコマンドがホスト２から受信された場合が想定されている。フラッシュストレージデバイス４のコントローラ５は、ブロック番号（＝ＢＬＫ＃２）、オフセット（＝＋１０）、長さ（＝２）に基づいて、ＢＬＫ＃２のページ２から１ページサイズ分のデータをリードし、このリードデータからデータｄ１〜データｄ２を抽出する。次いで、コントローラ５は、ブロック番号（＝ＢＬＫ＃２）、オフセット（＝＋１６）、長さ（＝４）に基づいて、ＢＬＫ＃２のページ４から１ページサイズ分のデータ（データｄ３〜データｄ４）をリードする。そして、コントローラ５は、データｄ１〜データｄ２とデータｄ３〜データｄ４とを結合することによって得られる長さ（＝６）のリードデータを、リードコマンド内の転送先ポインタによって指定されるホストメモリ上に転送する。
【０１５９】
これにより、たとえブロック内に不良ページが存在する場合であっても、リードエラーを引き起こすことなく、別個の物理記憶位置からデータ部をリードすることができる。また、たとえデータが２つのブロックに跨がって書き込まれている場合であっても、このデータを一つのリードコマンドの発行によってリードすることができる。
【０１６０】
図２５は、ホスト２とフラッシュストレージデバイス３とによって実行されるリード処理のシーケンスを示す。
【０１６１】
ホスト２は、ホスト２によって管理されているＬＵＴを参照して、ユーザアプリケーションからのリード要求に含まれる論理アドレスをブロック番号、オフセットに変換する。そして、ホスト２は、このブロック番号、オフセット、長さを指定するリードコマンドをフラッシュストレージデバイス３に送信する。
【０１６２】
フラッシュストレージデバイス３のコントローラ４がリードコマンドをホスト２から受信した時、コントローラ４は、このリードコマンドによって指定されたブロック番号に対応するブロックをリード対象のブロックとして決定するとともに、このリードコマンドによって指定されたオフセットに基づいてリード対象のページを決定する（ステップＳ３１）。ステップＳ３１では、コントローラ４は、まず、リードコマンドによって指定されたオフセットを、ページサイズを表す粒度の数（ここでは、４）で除算してもよい。そして、コントローラ４は、この除算によって得られる商および余りを、リード対象のページ番号およびリード対象のページ内オフセット位置としてそれぞれ決定してもよい。
【０１６３】
コントローラ４は、ブロック番号、オフセット、長さによって規定されるデータをＮＡＮＤ型フラッシュメモリ５からリードし（ステップＳ３２）、このリードデータをホスト２に送信する。
【０１６４】
図２６は、フラッシュストレージデバイス３に適用されるＧＣ制御コマンドを示す。
【０１６５】
ＧＣ制御コマンドは、コマンドＩＤ、ポリシー、ソースＱｏＳドメインＩＤ、デスティネーションＱｏＳドメインＩＤ、等を含んでもよい。
【０１６６】
コマンドＩＤはこのコマンドがＧＣ制御コマンドであることを示すＩＤ（コマンドコード）であり、ＧＣ制御コマンドにはＧＣ制御コマンド用のコマンドＩＤが含まれる。
【０１６７】
ポリシーは、ＧＣ候補ブロック（ＧＣソースブロック）を選択するための条件（ＧＣポリシー）を指定するパラメータである。フラッシュストレージデバイス３のコントローラ４は、複数のＧＣポリシーをサポートしている。
【０１６８】
コントローラ４によってサポートされているＧＣポリシーには、有効データ量が少ないブロックを優先的にＧＣ候補ブロック（ＧＣソースブロック）として選択するというポリシー（Ｇｒｅｅｄｙ）が含まれてもよい。
【０１６９】
また、コントローラ４によってサポートされているＧＣポリシーには、低い更新頻度を有するデータ（コールドデータ）が集められているブロックを、高い更新頻度を有するデータ（ホットデータ）が集められているブロックよりも優先的にＧＣ候補ブロック（ＧＣソースブロック）として選択するというポリシーが含まれていてもよい。
【０１７０】
さらに、ＧＣポリシーは、ＧＣ開始条件を指定してもよい。ＧＣ開始条件は、例えば、残りフリーブロックの個数を示してもよい。
【０１７１】
コントローラ４は、有効データを含むブロック群をアクティブブロックリストによって管理しており、ＧＣを実行する場合には、ＧＣ制御コマンドによって指定されたＧＣポリシーに基づいて、アクティブブロックリストによって管理されているブロック群から一つ以上のＧＣ候補ブロック（ＧＣソースブロック）を選択する。
【０１７２】
ソースＱｏＳドメインＩＤは、どのＱｏＳドメインをＧＣソースとすべきかを指定するパラメータである。コントローラ４は、ソースＱｏＳドメインＩＤによって指定されるＱｏＳドメインに属するブロック群、つまりこのＱｏＳドメインに対応するアクティブブロックリストから、一つ以上のＧＣ候補ブロック（ＧＣソースブロック）を選択する。
【０１７３】
デスティネーションＱｏＳドメインＩＤは、どのＱｏＳドメインをＧＣデスティネーションとすべきかを指定するパラメータである。コントローラ４は、デスティネーションＱｏＳドメインＩＤによって指定されるＱｏＳドメインに属するフリーブロック群内の一つ以上のフリーブロックをＧＣデスティネーションブロックとして選択することができる。
【０１７４】
ソースＱｏＳドメインＩＤおよびデスティネーションＱｏＳドメインＩＤは、同じＱｏＳドメインを指定してもよいし、互いに異なるＱｏＳドメインを指定してもよい。つまり、ソースＱｏＳドメインＩＤおよびデスティネーションＱｏＳドメインＩＤの各々は、複数のＱｏＳドメインの任意の一つを指定するパラメータである。
【０１７５】
コントローラ４は、ソースＱｏＳドメインに対応する残りフリーブロックの数がポリシーによって指定される閾値以下になった場合に、ＧＣを開始してもよい。もしＧＣの強制実行を指定するポリシーを含むＧＣ制御コマンドを受信したならば、コントローラ４は、ホスト２からこのＧＣ制御コマンドを受信した時にＧＣを即座に開始してもよい。
【０１７６】
図２７は、ＧＣ用コールバックコマンドを示す。
【０１７７】
ＧＣ用コールバックコマンドは、ＧＣによってコピーされた有効データの論理アドレスとこの有効データのコピー先位置を示すブロック番号およびオフセットとをホスト２に通知するために使用される。
【０１７８】
ＧＣ用コールバックコマンドは、コマンドＩＤ、論理アドレス、長さ、デスティネーション物理アドレス、ソース物理アドレス（オプショナル）を含んでよい。
【０１７９】
コマンドＩＤはこのコマンドがＧＣ用コールバックコマンドであることを示すＩＤ（コマンドコード）であり、ＧＣ用コールバックコマンドにはＧＣ用コールバックコマンド用のコマンドＩＤが含まれる。
【０１８０】
論理アドレスは、ＧＣによってＧＣソースブロックからＧＣデスティネーションブロックにコピーされた有効データの論理アドレスを示す。
【０１８１】
長さは、このコピーされたデータの長さを示す。このデータ長は、粒度（Ｇｒａｉｎ）の数によって指定されてもよい。
【０１８２】
デスティネーション物理アドレスは、有効データがコピーされたＧＣデスティネーションブロック内の位置を示す。デスティネーション物理アドレスは、ブロック番号、オフセット（ブロック内オフセット）によって指定される。
【０１８３】
ソース物理アドレス（オプショナル）は、有効データが格納されていたＧＣソースブロック内の位置を示す。ソース物理アドレスは、ブロック番号、オフセット（ブロック内オフセット）によって指定される。
【０１８４】
図２８は、ガベージコレクション（ＧＣ）動作の手順を示す。
【０１８５】
フラッシュストレージデバイス３のコントローラ４は、ホスト２によって指定されたポリシーに基づいて、ソースＱｏＳドメインＩＤによって指定されるＱｏＳドメインに属するブロック群から、有効データと無効データとが混在する一つ以上のＧＣソースブロック（コピー元ブロック）を選択する（ステップＳ４１）。次いで、コントローラ４は、デスティネーションＱｏＳドメインＩＤによって指定されるＱｏＳドメインに属するフリーブロック群から一つ以上のフリーブロックを選択し、選択したフリーブロックをＧＣデスティネーションブロック（コピー先ブロック）として割り当てる（ステップＳ４２）。
【０１８６】
コントローラ４は、ＧＣソースブロック（コピー元ブロック）内の全ての有効データをＧＣデスティネーションブロック（コピー先ブロック）にコピーする（ステップＳ４４）。ステップＳ４４では、コントローラ４は、ＧＣソースブロック（コピー元ブロック）内の有効データのみならず、この有効データとこの有効データに対応する論理アドレスの双方を、ＧＣソースブロック（コピー元ブロック）からＧＣデスティネーションブロック（コピー先ブロック）にコピーする。これにより、ＧＣデスティネーションブロック（コピー先ブロック）内にデータと論理アドレスとのペアを保持することができる。
【０１８７】
そして、コントローラ４は、コピーされた有効データの論理アドレスと、この有効データがコピーされたＧＣデスティネーションブロック（コピー先ブロック）内の位置を示すデスティネーション物理アドレス（ブロック番号、オフセット（ブロック内オフセット））を、ＧＣ用コールバックコマンドを使用してホスト２に通知する（ステップＳ４４）。なお、ステップＳ４４では、コントローラ４は、コピーされた有効データの論理アドレスとデスティネーション物理アドレスとみならず、ソース物理アドレスもホスト２に通知してもよい。
【０１８８】
ホスト２がこのＧＣ用コールバックコマンドを受信した時、ホスト２は、ホスト２によって管理されているＬＵＴを更新して、コピーされた有効データに対応する論理アドレスそれぞれにデスティネーション物理アドレスをマッピングする（ステップＳ５１）。
【０１８９】
図２９は、ＧＣのために実行されるデータコピー動作の例を示す。
【０１９０】
図２９では、ＧＣソースブロック（ここではブロックＢＬＫ＃５０）のオフセット＋４に対応する位置に格納されている有効データ（ＬＢＡ＝１０）が、ＧＣデスティネーションブロック（ここではブロックＢＬＫ＃１００）のオフセット＋０に対応する位置にコピーされ、ＧＣソースブロック（ここではブロックＢＬＫ＃５０）のオフセット＋１０に対応する位置に格納されている有効データ（ＬＢＡ＝２０）が、ＧＣデスティネーションブロック（ここではブロックＢＬＫ＃１００）のオフセット＋１に対応する位置にコピーされた場合が想定されている。この場合、コントローラ４は、｛ＬＢＡ１０、ＢＬＫ＃１００、オフセット（＝＋０）、ＬＢＡ２０、ＢＬＫ＃１００、オフセット（＝＋１）｝をホストに通知する（ＧＣ用コールバック処理）。
【０１９１】
図３０は、図２９のデータコピー動作の結果に基づいて更新されるホスト２のＬＵＴの内容を示す。
【０１９２】
このＬＵＴにおいては、ＬＢＡ１０に対応するブロック番号およびオフセットは、ＢＬＫ＃５０、オフセット（＝＋４）から、ＢＬＫ＃１００、オフセット（＝＋０）に更新される。同様に、ＬＢＡ２０に対応するブロック番号およびオフセットは、ＢＬＫ＃５０、オフセット（＝＋１０）から、ＢＬＫ＃１００、オフセット（＝＋１）に更新される。
【０１９３】
ＬＵＴが更新された後、ホスト２は、ＢＬＫ＃５０およびオフセット（＝＋４）を指定するＴｒｉｍコマンドをフラッシュストレージデバイス３に送信して、ＢＬＫ＃５０のオフセット（＝＋４）に対応する位置に格納されているデータを無効化してもよい。さらに、ホスト２は、ＢＬＫ＃５０およびオフセット（＝＋１０）を指定するＴｒｉｍコマンドをフラッシュストレージデバイス３に送信して、ＢＬＫ＃５０のオフセット（＝＋１０）に対応する位置に格納されているデータを無効化してもよい。
【０１９４】
図３１は、ライトコマンドに対するレスポンスとＧＣ用コールバック処理との関係を示す。
【０１９５】
コントローラ４がある論理アドレスに対応する有効データをコピーしている間に、この論理アドレスを指定するライトコマンドがホスト２から受信されるというケースが起こる場合がある。
【０１９６】
図３１では、図２９のデータコピー動作（ＬＢＡ１０に対応するデータコピー動作）の実行中に、ＬＢＡ１０を指定するライトコマンドがホスト２から受信された場合が想定されている。
【０１９７】
コントローラ４は、ホスト２から受信されるライトデータを書き込み先ブロックに書き込む（ここではＢＬＫ＃３のオフセット＋０に対応する位置に書き込まれる）。そして、コントローラ４は、｛ＬＢＡ１０、ＢＬＫ＃３、オフセット（＝＋０）｝をホスト２に通知する。
【０１９８】
ホスト２は、ＬＵＴを更新して、ＬＢＡ１０に対応するブロック番号およびオフセットを、ＢＬＫ＃５０、オフセット（＋４）から、ＢＬＫ＃３、オフセット（＋０）に変更する。
【０１９９】
もしこの後に、ＬＢＡ１０のデスティネーション物理アドレスがコントローラ４からホスト２に通知されたならば、ＬＢＡ１０に対応する最新データが格納されている位置を示すブロック番号およびオフセット（ＢＬＫ＃３、オフセット（＋０））が、ＬＢＡ１０に対応するデスティネーション物理アドレス（ここでは、ＢＬＫ＃１００、オフセット（＝＋０））に誤って変更されてしまう可能性がある。
【０２００】
本実施形態では、コントローラ４は、ＬＢＡ１０とデスティネーション物理アドレス（ＢＬＫ＃１００、オフセット（＝＋０））のみならず、ソース物理アドレス（ＢＬＫ＃５０、オフセット（＝＋４））もホスト２に通知することができる。ホスト２は、ソース物理アドレス（ＢＬＫ＃５０、オフセット（＝＋４））が、ＬＵＴによってＬＢＡ１０に現在マッピングされているブロック番号、オフセットに一致しない場合には、ＬＵＴを更新しない。これにより、ＬＢＡ１０に対応する最新データが格納されている位置を示すブロック番号およびオフセット（ＢＬＫ＃３、オフセット（＋０））が、ＬＢＡ１０に対応するデスティネーション物理アドレス（ここでは、ＢＬＫ＃１００、オフセット（＝＋０））に誤って変更されてしまうことを防止することができる。
【０２０１】
図３２は、ＧＣ制御コマンドの別の例を示す。
【０２０２】
この図３２のＧＣ制御コマンドは、ソースＱｏＳドメインＩＤの代わりに、ソースデバイスＩＤとソースＱｏＳドメインＩＤのペアを指定してもよい。さらに、この図３２のＧＣ制御コマンドは、デスティネーションＱｏＳドメインＩＤの代わりに、デスティネーションデバイスＩＤとデスティネーションＱｏＳドメインＩＤのペアを指定してもよい。これにより、あるフラッシュストレージデバイス３をＧＣソースとして動作させ、別のフラッシュストレージデバイス３をＧＣデスティネーションとして動作させることが可能となる。ソースデバイスＩＤとデスティネーションデバイスＩＤが同じである場合には、一つのフラッシュストレージデバイス３内でＧＣが実行される。
【０２０３】
図３３は、図３２のＧＣ制御コマンドに対応するＧＣ用コールバックコマンドの例を示す。
【０２０４】
図３３のＧＣ用コールバックコマンドは、デスティネーション物理アドレスの代わりに、デスティネーションデバイスＩＤとデスティネーション物理アドレスのペアを含む。また、図３３のＧＣ用コールバックコマンドは、ソース物理アドレス（オプショナル）の代わりに、ソースデバイスＩＤとソース物理アドレスのペア（オプショナル）を含んでもよい。
【０２０５】
いま、デバイスＩＤが１のフラッシュストレージデバイス３をＧＣソースとして動作させ、デバイスＩＤが２のフラッシュストレージデバイス３をＧＣデスティネーションとして動作させる場合を想定する。ホスト２は、ソースデバイスＩＤ＃１およびデスティネーションデバイスＩＤ＃２を指定するＧＣ制御コマンドを、デバイスＩＤ＃１のフラッシュストレージデバイス３と、デバイスＩＤ＃２のフラッシュストレージデバイス３に送信してもよい。
【０２０６】
デバイスＩＤ＃１のフラッシュストレージデバイス３は、ソースＱｏＳドメインＩＤによって指定されるＱｏＳドメインに属するブロック群からＧＣソースブロックを選択し、ＧＣソースブロック内の有効データとこの有効データの論理アドレスとを、デスティネーションデバイスＩＤによって指定されるフラッシュストレージデバイス（デバイスＩＤ＃２のフラッシュストレージデバイス）宛てに送信する。ＧＣソースブロック内の有効データとこの有効データの論理アドレスは、例えば、図３のスイッチ１を介して、デバイスＩＤ＃１のフラッシュストレージデバイス３からデバイスＩＤ＃２のフラッシュストレージデバイス３に転送される。
【０２０７】
デバイスＩＤ＃２のフラッシュストレージデバイス３は、デスティネーションＱｏＳドメインＩＤによって指定されるＱｏＳドメインに属するフリーブロック群からＧＣデスティネーションブロックを選択し、スイッチ１を介して受信される有効データおよび論理ドレスをＧＣデスティネーションブロックに書き込む（コピーする）。
【０２０８】
デバイスＩＤ＃２のフラッシュストレージデバイス３は、コピーされた有効データの論理アドレスと、この有効データがコピーされたデスティネーション物理アドレス（ブロック番号、オフセット）を、ＧＣ用コールバックコマンドによってホスト２に通知する。
【０２０９】
デバイスＩＤ＃１のフラッシュストレージデバイス３は、コピーされた有効データの論理アドレスと、この有効データが格納されているソース物理アドレス（ブロック番号、オフセット）を、ＧＣ用コールバックコマンドによってホスト２に通知する。
【０２１０】
図３４は、書き込み／リード／ＧＣ動作を示す。
【０２１１】
まず、ホスト２からのデータを書き込むホストライト動作について説明する。  
【０２１２】
（１）コントローラ４は、ホスト２からＬＢＡとライトデータを受信する。  
【０２１３】
（２）コントローラ４は、ＬＢＡとライトデータの双方を書き込み先ブロックに書き込む。書き込み先ブロックが割り当てられていない場合には、コントローラ４は、フリーブロックリストから一つのフリーブロックを選択し、この選択したフリーブロックを新たな書き込み先ブロックとして割り当てる。そして、コントローラ４は、ＬＢＡとライトデータの双方をこの新たな書き込み先ブロックに書き込む。
【０２１４】
（３）コントローラ４は、このＬＢＡと、このライトデータが書き込まれた書き込み先ブロック内の位置を示す物理アドレスＰＢＡをホスト２に通知する。この物理アドレスＰＢＡは、ブロック番号およびオフセットによって表される。書き込み先ブロック全体がデータで満たされると、コントローラ４は、この書き込み先ブロックをアクティブブロックリストに登録する。
【０２１５】
次に、リード動作について説明する。
【０２１６】
（４）ホスト２は、ホスト２によって管理されているＬＵＴを参照して、ユーザアプリケーションからのリード要求に含まれるＬＢＡをリード用物理アドレスＰＢＡ（ブロック番号、オフセット）に変換する。
【０２１７】
（５）ホスト２から受信されるリード用物理アドレスＰＢＡ（ブロック番号、オフセット）に基づいて、コントローラ４は、このブロック番号を有するブロックをリード対象のブロックとして決定する。リード対象のブロックは、アクティブブロックリストによって管理されているブロック群（アクティブブロック）のいずれか一つ、または現在のＧＣソースブロック、または現在の書き込み先ブロックである。そして、コントローラ４は、オフセットに基づいて、リード対象のブロックからデータをリードする。
【０２１８】
次に、ＧＣ動作について説明する。
【０２１９】
（６）コントローラ４は、ＧＣソースブロック（コピー元ブロック）およびＧＣデスティネーションブロック（コピー先ブロック）を選択し、ＧＣソースブロック内に格納されている有効データとこの有効データのＬＢＡの双方をＧＣデスティネーションブロックにコピーする。
【０２２０】
（７）コントローラ４は、コピーされた有効データのＬＢＡと、この有効データがコピーされたＧＣデスティネーションブロック内の位置を示すＰＢＡ（ブロック番号、オフセット）の双方を、ホスト２に通知する。
【０２２１】
あるいは、コントローラ４は、コピーされた有効データのＬＢＡと、この有効データがコピーされたＧＣデスティネーションブロック内の位置を示すＰＢＡ（ブロック番号、オフセット）と、この有効データが格納されているＧＣソースブロック内の位置を示すＰＢＡ（ブロック番号、オフセット）とを、ホスト２に通知してもよい。
【０２２２】
図３５は、参照カウントを管理するためのブロック管理テーブルの構成例を示す。
【０２２３】
ホスト２は重複排除機能をサポートしている。したがって、ユーザアプリケーションから書き込み要求されたデータと一致する重複データがフラッシュストレージデバイス３（ＮＡＮＤ型フラッシュメモリ５）にすでに存在する場合には、ホスト２は、このデータをフラッシュストレージデバイス３に書き込まず、このデータが格納されている位置（ブロック番号、オフセット）を指すポインタのみを、書き込み要求されたデータのＬＢＡに関連付ける。このため、フラッシュストレージデバイス３（ＮＡＮＤ型フラッシュメモリ５）に格納されている各４Ｋバイトデータは、一つの論理アドレスから参照されるだけでなく、複数の論理アドレスから参照される可能性がある。
【０２２４】
本実施形態においては、フラッシュストレージデバイス３は、４Ｋバイトデータ毎に参照カウントを管理する機能を有している。ここで、あるデータに対応する参照カウントは、このデータを参照している論理アドレスの数を示す。
【０２２５】
図３５では、ブロックＢＬＫ＃１用のブロック管理テーブルが例示されている。
【０２２６】
ブロックＢＬＫ＃１用のブロック管理テーブルは、ブロックＢＬＫ＃１の複数のオフセット値それぞれに対応する複数のエントリを含む。
【０２２７】
例えば、オフセット＋０に対応するエントリには、ブロックＢＬＫ＃１のオフセット＋０に対応する位置に格納されている４ＫＢデータに対応する参照カウントが格納される。同様に、オフセット＋１に対応するエントリには、ブロックＢＬＫ＃１のオフセット＋１に対応する位置に格納されている４ＫＢデータに対応する参照カウントが格納される。
【０２２８】
参照カウントが１以上であるデータは有効データであり、参照カウントが０のデータは無効データである。
【０２２９】
フラッシュストレージデバイス３は、ホスト２から受信されるデュプリケートコマンド／Ｔｔｉｍコマンドに基づいて、参照カウントをインクリメント／デクリメントする。
【０２３０】
図３６は、参照カウントの管理のためにフラッシュストレージデバイス３に適用されるデュプリケートコマンドを示す。
【０２３１】
デュプリケートコマンドは、ある物理アドレス（ブロック番号、オフセット）に格納されているデータの参照カウントを１増やすことをフラッシュストレージデバイス３に要求するコマンドである。
【０２３２】
このデュプリケートコマンドは、コマンドＩＤ、物理アドレスＰＢＡ、長さ、等を含んでもよい。
【０２３３】
コマンドＩＤはこのコマンドがデュプリケートコマンドであることを示すＩＤ（コマンドコード）であり、デュプリケートコマンドにはデュプリケートコマンド用のコマンドＩＤが含まれる。
【０２３４】
物理アドレスＰＢＡは、参照カウントを１だけ増やすべきデータが格納されている最初の物理記憶位置を示す。物理アドレスＰＢＡは、ブロック番号、オフセット（ブロック内オフセット）によって指定される。
【０２３５】
長さは、参照カウントを１だけ増やすべきデータの長さを示す。このデータ長は、粒度（Ｇｒａｉｎ）の数によって指定可能である。
【０２３６】
コントローラ４は、参照カウントを増やすべきデータが格納されている物理記憶位置を示すブロック番号およびブロック内オフセットを含むデュプリケートコマンドをホスト２から受信した場合、ブロック管理テーブル３２を更新して、デュプリケートコマンドに含まれるブロック番号およびブロック内オフセットに対応する物理記憶位置のデータに対応する参照カウントを１増やす。
【０２３７】
図３７は、参照カウントの管理のためにフラッシュストレージデバイス３に適用されるＴｒｉｍコマンドを示す。
【０２３８】
このＴｒｉｍコマンドは、ある物理アドレス（ブロック番号、オフセット）に格納されているデータの参照カウントを１減らすことをフラッシュストレージデバイス３に要求するコマンドである。
【０２３９】
このＴｒｉｍコマンドは、コマンドＩＤ、物理アドレスＰＢＡ、長さ、等を含んでもよい。
【０２４０】
コマンドＩＤはこのコマンドがＴｒｉｍコマンドであることを示すＩＤ（コマンドコード）であり、ＴｒｉｍコマンドにはＴｒｉｍコマンド用のコマンドＩＤが含まれる。
【０２４１】
物理アドレスＰＢＡは、参照カウントを１だけ減らすべきデータが格納されている最初の物理記憶位置を示す。物理アドレスＰＢＡは、ブロック番号、オフセット（ブロック内オフセット）によって指定される。
【０２４２】
長さは、参照カウントを１だけ減らすべきデータの長さを示す。このデータ長は、粒度（Ｇｒａｉｎ）の数によって指定可能である。
【０２４３】
コントローラ４は、参照カウントを減らすべきデータが格納されている物理記憶位置を示すブロック番号およびブロック内オフセットを含むＴｒｉｍコマンドをホスト２から受信した場合、ブロック管理テーブル３２を更新して、Ｔｒｉｍコマンドに含まれるブロック番号およびブロック内オフセットに対応する物理記憶位置のデータに対応する参照カウントを１減らす。
【０２４４】
図３８は、参照カウントインクリメント／デクリメント処理を示す。
【０２４５】
フラッシュストレージデバイス３のコントローラ４がホスト２からデュプリケートコマンドを受信した時、コントローラ４は、デュプリケートコマンドによって指定される物理アドレスＰＢＡ（ブロック番号、オフセット）に対応する参照カウント、つまり、このブロック番号およびオフセットによって指定されるＮＡＮＤ型フラッシュメモリ５内の物理記憶位置に格納されているデータに対応する参照カウントを１増やす（ステップＳ６１）。この場合、コントローラ４は、デュプリケートコマンドによって指定されるブロック番号を有するブロックに対応するブロック管理テーブル３２を更新する。このブロック管理テーブル３２の更新では、デュプリケートコマンドによって指定されるオフセットに対応するブロック管理テーブル３２内のエントリに格納されている参照カウントが１増やされる。デュプリケートコマンドによって指定される長さが２以上の場合には、デュプリケートコマンドによって指定されるオフセットに対応する参照カウントのみならず、このオフセットに後続する幾つかのオフセットに対応する参照カウントも１増やされる。
【０２４６】
フラッシュストレージデバイス３のコントローラ４がホスト２からＴｒｉｍコマンドを受信した時、コントローラ４は、Ｔｒｉｍコマンドによって指定される物理アドレスＰＢＡ（ブロック番号、オフセット）に対応する参照カウント、つまり、このブロック番号およびオフセットによって指定されるＮＡＮＤ型フラッシュメモリ５内の物理記憶位置に格納されているデータに対応する参照カウントを１減らす（ステップＳ６２）。この場合、コントローラ４は、Ｔｒｉｍコマンドによって指定されるブロック番号を有するブロックに対応するブロック管理テーブル３２を更新する。このブロック管理テーブル３２の更新では、Ｔｒｉｍコマンドによって指定されるオフセットに対応するブロック管理テーブル３２内のエントリに格納されている参照カウントが１減らされる。Ｔｒｉｍコマンドによって指定される長さが２以上の場合には、Ｔｒｉｍコマンドによって指定されるオフセットに対応する参照カウントのみならず、このオフセットに後続する幾つかのオフセットに対応する参照カウントも１減らされる。
【０２４７】
ＧＣにおいては、コントローラ４は、ＧＣソースブロックに対応するブロック管理テーブルを参照して、サイズが４ＫＢであるデータ単位で、ＧＣソースブロック内のデータが有効データであるか無効データであるかを判定する。コントローラ４は、参照カウントが０であるデータは無効データであると判定し、参照カウントが１以上であるデータは有効データであると判定する。そして、コントローラ４は、有効データ（参照カウントが１以上のデータ）とこの有効データに対応する論理アドレスをＧＣソースブロックからＧＣデスティネーションブロックにコピーする。
【０２４８】
より詳しくは、コントローラ４は、ＮＡＮＤ型フラッシュメモリ５のガベージコレクションを実行する場合、ガベージコレクションのためのコピー元ブロックおよびコピー先ブロックを選択する。コントローラ４は、コピー元ブロック内に格納されている、参照カウントが１以上の第１のデータ（有効データ）と第１のデータの論理アドレスの双方をコピー先ブロックにコピーする。そして、コントローラ４は、第１のデータの論理アドレスと、コピー先ブロックのブロック番号と、第１のデータがコピーされた、コピー先ブロックの先頭からのオフセット位置を粒度の倍数で示すブロック内オフセットとを、ホスト２に通知する。
【０２４９】
以上説明したように、本実施形態によれば、ホスト２ではなく、フラッシュストレージデバイス３が、ホスト２からのデータ（ユーザデータ）を書き込むべき書き込み先ブロックおよびこの書き込み先ブロック内の位置（書き込み先位置）を決定する。フラッシュストレージデバイス３は、ユーザデータを書き込み先ブロック内の書き込み先位置に書き込み、そして、書き込み先ブロックのブロック番号と、書き込み先ブロックの先頭から書き込み先位置までのオフセットをページサイズとは異なるサイズを有する粒度の倍数で示すブロック内オフセットとをホスト２に通知する。これにより、ホスト２は、ブロックサイズ、ページ書き込み順序制約、バッドページ、ページサイズ等を意識を意識することなく、ユーザデータをＮＡＮＤ型フラッシュメモリ５に書き込むことができ、さらに、ブロック番号およびブロック内オフセットによって表される物理アドレス（抽象化された物理アドレス）をこのユーザデータの論理アドレスにマッピングすることができる。
【０２５０】
このように、フラッシュストレージデバイス３が、書き込み先ブロックおよびこの書き込み先ブロック内の位置を決定し、且つブロック番号とブロック内オフセットとをホスト２に返すという構成により、上位階層（ホスト２）のアプリケーションレベルアドレス変換テーブルと従来型ＳＳＤのＬＵＴレベルアドレス変換テーブルとのマージを実現することが可能となり、しかも、フラッシュストレージデバイス３が、ＮＡＮＤ型フラッシュメモリ５の特徴／制約を考慮してＮＡＮＤ型フラッシュメモリ５を制御することが可能となる。したがって、ホスト２とフラッシュストレージデバイス３との間の適切な役割分担を実現でき、これによってホスト２とフラッシュストレージデバイス３とを含むシステム全体のＩ／Ｏ性能の向上を図ることができる。
【０２５１】
また、本実施形態によれば、アドレス変換テーブルを管理するホスト２ではなく、フラッシュストレージデバイス３がガベージコレクションのためのコピー元ブロックおよびコピー先ブロックを選択し、コピー元ブロック内に格納されている有効データをコピー先ブロックにコピーする。そして、フラッシュストレージデバイス３が、コピーされた有効データの論理アドレスと、コピー先ブロックのブロック番号と、有効データがコピーされたコピー先ブロック内の位置を示すブロック内オフセットとを、ホスト２に通知する。このように、ガベージコレクションはフラッシュストレージデバイス３によって実行され、しかも論理アドレス、ブロック番号、ブロック内オフセットがフラッシュストレージデバイス３からホスト２に通知されるので、ホスト２は、論理アドレスそれぞれとＮＡＮＤ型フラッシュメモリ５の物理アドレス（つまり、ブロック番号とブロック内オフセットとのペア）それぞれとの間のマッピングをアドレス変換テーブル（ＬＵＴ）を使用して正しい管理することができる。また、アプリケーションレベルＧＣをフラッシュストレージデバイス３のＧＣとマージすることができので、ライトアンプリフィケーションを大幅に低減することができる。
【０２５２】
なお、フラッシュストレージデバイス３は、ストレージアレイ内に設けられる複数のフラッシュストレージデバイス３の一つとして利用されてもよい。ストレージアレイは、サーバ計算機のような情報処理装置にケーブルまたはネットワークを介して接続されてもよい。ストレージアレイは、このストレージアレイ内の複数のフラッシュストレージデバイス３を制御するコントローラを含む。フラッシュストレージデバイス３がストレージアレイに適用された場合には、このストレージアレイのコントローラが、フラッシュストレージデバイス３のホスト２として機能してもよい。
【０２５３】
また、本実施形態では、不揮発性メモリとしてＮＡＮＤ型フラッシュメモリを例示した。しかし、本実施形態の機能は、例えば、ＭＲＡＭ（Ｍａｇｎｅｔｏｒｅｓｉｓｔｉｖｅ  Ｒａｎｄｏｍ  Ａｃｃｅｓｓ  Ｍｅｍｏｒｙ）、ＰＲＡＭ（Ｐｈａｓｅ  ｃｈａｎｇｅ  Ｒａｎｄｏｍ  Ａｃｃｅｓｓ  Ｍｅｍｏｒｙ）、ＲｅＲＡＭ（Ｒｅｓｉｓｔｉｖｅ  Ｒａｎｄｏｍ  Ａｃｃｅｓｓ  Ｍｅｍｏｒｙ）、又は、ＦｅＲＡＭ（Ｆｅｒｒｏｅｌｅｃｔｒｉｃ  Ｒａｎｄｏｍ  Ａｃｃｅｓｓ  Ｍｅｍｏｒｙ）のような他の様々な不揮発性メモリにも適用できる。
【０２５４】
本発明のいくつかの実施形態を説明したが、これらの実施形態は、例として提示したものであり、発明の範囲を限定することは意図していない。これら新規な実施形態は、その他の様々な形態で実施されることが可能であり、発明の要旨を逸脱しない範囲で、種々の省略、置き換え、変更を行うことができる。これら実施形態やその変形は、発明の範囲や要旨に含まれるとともに、特許請求の範囲に記載された発明とその均等の範囲に含まれる。
【符号の説明】
【０２５５】
２…ホスト、３…フラッシュストレージデバイス、４…コントローラ、５…ＮＡＮＤ型フラッシュメモリ、２１…ライト動作制御部、２２…リード動作制御部、２３…ＧＣ動作制御部。
【図１】
2019057151.tif 000003
【図２】
2019057151.tif 000004
【図３】
2019057151.tif 000005
【図４】
2019057151.tif 000006
【図５】
2019057151.tif 000007
【図６】
2019057151.tif 000008
【図７】
2019057151.tif 000009
【図８】
2019057151.tif 000010
【図９】
2019057151.tif 000011
【図１０】
2019057151.tif 000012
【図１１】
2019057151.tif 000013
【図１２】
2019057151.tif 000014
【図１３】
2019057151.tif 000015
【図１４】
2019057151.tif 000016
【図１５】
2019057151.tif 000017
【図１６】
2019057151.tif 000018
【図１７】
2019057151.tif 000019
【図１８】
2019057151.tif 000020
【図１９】
2019057151.tif 000021
【図２０】
2019057151.tif 000022
【図２１】
2019057151.tif 000023
【図２２】
2019057151.tif 000024
【図２３】
2019057151.tif 000025
【図２４】
2019057151.tif 000026
【図２５】
2019057151.tif 000027
【図２６】
2019057151.tif 000028
【図２７】
2019057151.tif 000029
【図２８】
2019057151.tif 000030
【図２９】
2019057151.tif 000031
【図３０】
2019057151.tif 000032
【図３１】
2019057151.tif 000033
【図３２】
2019057151.tif 000034
【図３３】
2019057151.tif 000035
【図３４】
2019057151.tif 000036
【図３５】
2019057151.tif 000037
【図３６】
2019057151.tif 000038
【図３７】
2019057151.tif 000039
【図３８】
2019057151.tif 000040