(57)【要約】【課題】ホストによるストレージ管理を支援することができるメモリシステムを実現する。【解決手段】メモリシステムは、不揮発性メモリを第１記憶領域と第２記憶領域とを含む複数の記憶領域に論理的に分割する。メモリシステムは、書き込み可能なデータの総量を記憶領域毎に指定する前記ホストからの要求に基づいて、前記第１記憶領域に書き込み可能なデータの総量の上限を示す第１上限値と、前記第２記憶領域に書き込み可能なデータの総量の上限を示す第２上限値とを管理し、前記第１記憶領域に書き込まれたデータの総量、および前記第２記憶領域に書き込まれたデータの総量を測定する。メモリシステムは、前記第１記憶領域に書き込まれたデータの前記測定された総量が前記第１上限値に達した場合、前記ホストからの前記第１記憶領域へのデータの書き込みを制限する。【選択図】図１
2018101334.tif 000002
【特許請求の範囲】
【請求項１】
ホストに接続可能なメモリシステムであって、
不揮発性メモリと、
前記不揮発性メモリに電気的に接続されたコントローラであって、
前記不揮発性メモリを第１記憶領域と第２記憶領域とを含む複数の記憶領域に論理的に分割し、
書き込み可能なデータの総量を記憶領域毎に指定する前記ホストからの要求に基づいて、前記第１記憶領域に書き込み可能なデータの総量の上限を示す第１上限値と、前記第２記憶領域に書き込み可能なデータの総量の上限を示す第２上限値とを管理し、
前記ホストからの前記第１記憶領域向けのデータを前記第１記憶領域に書き込み、前記ホストからの前記第２記憶領域向けのデータを前記第２記憶領域に書き込み、
前記第１記憶領域に書き込まれたデータの総量、および前記第２記憶領域に書き込まれたデータの総量を測定し、
前記第１記憶領域に書き込まれたデータの前記測定された総量が前記第１上限値に達した場合、前記ホストからの前記第１記憶領域へのデータの書き込みを制限し、前記第２記憶領域に書き込まれたデータの前記測定された総量が前記第２上限値に達した場合、前記ホストからの前記第２記憶領域へのデータの書き込みを制限するように構成されたコントローラとを具備するメモリシステム。
【請求項２】
前記コントローラは、前記ホストから前記第１記憶領域に書き込まれたデータの総量と前記第１記憶領域のガベージコレクションによって前記第１記憶領域に書き込まれたデータの総量との合計量を、前記第１記憶領域に書き込まれたデータの総量として測定し、前記ホストから前記第２記憶領域に書き込まれたデータの総量と前記第２記憶領域のガベージコレクションによって前記第２記憶領域に書き込まれたデータの総量との合計量を、前記第２記憶領域に書き込まれたデータの総量として測定するように構成されている請求項１記載のメモリシステム。
【請求項３】
前記コントローラは、前記ホストから前記第１記憶領域に書き込まれたデータの総量を、前記第１記憶領域に書き込まれたデータの総量として測定し、前記ホストから前記第２記憶領域に書き込まれたデータの総量を、前記第２記憶領域に書き込まれたデータの総量として測定するように構成されている請求項１記載のメモリシステム。
【請求項４】
前記メモリシステムは、
前記第１記憶領域に書き込まれたデータの前記測定された総量が前記第１上限値に達した場合、前記ホストからの前記第１記憶領域へのデータの書き込みを禁止するかまたは前記ホストからの前記第１記憶領域へのデータの書き込み性能を低下させることによって、前記ホストからの前記第１記憶領域へのデータの書き込みを制限し、
前記第２記憶領域に書き込まれたデータの前記測定された総量が前記第２上限値に達した場合、前記ホストからの前記第２記憶領域へのデータの書き込みを禁止するかまたは前記ホストからの前記第２記憶領域へのデータの書き込みの性能を低下させることによって、前記ホストからの前記第２記憶領域へのデータの書き込みを制限するように構成されている請求項１記載のメモリシステム。
【請求項５】
前記コントローラは、ユーザ容量とオーバープロビジョニング容量との組を記憶領域毎に指定する前記ホストからの要求に基づいて、前記第１記憶領域に第１ユーザ容量と第１オーバープロビジョニング容量との合計の容量を割り当て、前記第２記憶領域に第２ユーザ容量と第２オーバープロビジョニング容量との合計の容量を割り当てるように構成されている請求項１記載のメモリシステム。
【請求項６】
前記コントローラは、
単位時間当たりの前記不揮発性メモリの消去、書き込みまたは読み出し動作の実行時間を記憶領域毎に指定する前記ホストからの要求に基づいて、単位時間当たりの前記第１記憶領域の消去、書き込みまたは読み出し動作の実行時間の上限を示す第３上限値と、単位時間当たりの前記第２記憶領域の消去、書き込みまたは読み出し動作の実行時間の上限を示す第４上限値とを管理し、
単位時間当たりの前記第１記憶領域の消去、書き込みまたは読み出し動作の実行時間が前記第３上限値に収まるように前記ホストからの前記第１記憶領域に向けたコマンドそれぞれを実行し、単位時間当たりの前記第２記憶領域の消去、書き込みまたは読み出し動作の実行時間が前記第４上限値に収まるように前記ホストからの前記第２記憶領域に向けたコマンドそれぞれを実行するように構成されている請求項１記載のメモリシステム。
【請求項７】
前記コントローラは、
前記ホストとの通信のためのバンド幅を記憶領域毎に指定する前記ホストからの要求に基づいて、前記ホストと前記第１記憶領域との間のバンド幅を第１のバンド幅に設定し、前記ホストと前記第２記憶領域との間のバンド幅を第２のバンド幅に設定するように構成されている請求項１記載のメモリシステム。
【請求項８】
ランダムアクセスメモリをさらに具備し、
前記コントローラは、
前記ランダムアクセスメモリのメモリ資源の量を記憶領域毎に指定する前記ホストからの要求に基づいて、前記ランダムアクセスメモリ内の第１サイズの第１メモリ領域を前記第１記憶領域の管理データの少なくとも一部を格納するメモリ領域として確保し、前記ランダムアクセスメモリ内の第２サイズの第２メモリ領域を前記第２記憶領域のための管理データの少なくとも一部を格納するメモリ領域として確保するように構成されている請求項１記載のメモリシステム。
【請求項９】
第１仮想マシンおよび第２仮想マシンを含む複数の仮想マシンが実行される仮想化環境を含むサーバに接続可能なメモリシステムであって、
不揮発性メモリと、
前記不揮発性メモリに電気的に接続されたコントローラであって、
前記不揮発性メモリを前記第１仮想マシンからアクセスされる第１記憶領域と前記第２仮想マシンからアクセスされる第２記憶領域とを含む複数の記憶領域に論理的に分割し、
書き込み可能なデータの総量を記憶領域毎に指定する前記サーバからの要求に基づいて、前記第１記憶領域に書き込み可能なデータの総量の上限を示す第１上限値と、前記第２記憶領域に書き込み可能なデータの総量の上限を示す第２上限値とを管理し、
前記第１仮想マシンからのデータを前記第１記憶領域に書き込み、前記第２仮想マシンからのデータを前記第２記憶領域に書き込み、
前記第１記憶領域に書き込まれたデータの総量、および前記第２記憶領域に書き込まれたデータの総量を測定し、
前記第１記憶領域に書き込まれたデータの前記測定された総量が前記第１上限値に達した場合、前記第１仮想マシンからの前記第１記憶領域へのデータの書き込みを制限し、前記第２記憶領域に書き込まれたデータの前記測定された総量が前記第２上限値に達した場合、前記第２仮想マシンからの前記第２記憶領域へのデータの書き込みを制限するように構成されているコントローラとを具備するメモリシステム。
【請求項１０】
前記コントローラは、前記第１仮想マシンから前記第１記憶領域に書き込まれたデータの総量と前記第１記憶領域のガベージコレクションによって前記第１記憶領域に書き込まれたデータの総量との合計量を、前記第１記憶領域に書き込まれたデータの総量として測定し、前記第２仮想マシンから前記第２記憶領域に書き込まれたデータの総量と前記第２記憶領域のガベージコレクションによって前記第２記憶領域に書き込まれたデータの総量との合計量を、前記第２記憶領域に書き込まれたデータの総量として測定するように構成されている請求項９記載のメモリシステム。
【請求項１１】
前記コントローラは、前記第１仮想マシンから前記第１記憶領域に書き込まれたデータの総量を、前記第１記憶領域に書き込まれたデータの総量として測定し、前記第２仮想マシンから前記第２記憶領域に書き込まれたデータの総量を、前記第２記憶領域に書き込まれたデータの総量として測定するように構成されている請求項９記載のメモリシステム。
【請求項１２】
不揮発性メモリを制御する制御方法であって、
前記不揮発性メモリを第１記憶領域と第２記憶領域とを含む複数の記憶領域に分割することと、
書き込み可能なデータの総量を記憶領域毎に指定するホストからの要求に基づいて、前記第１記憶領域に書き込み可能なデータの総量の上限を示す第１上限値と、前記第２記憶領域に書き込み可能なデータの総量の上限を示す第２上限値とを管理することと、
前記ホストからの前記第１記憶領域向けのデータを前記第１記憶領域に書き込み、前記ホストからの前記第２記憶領域向けのデータを前記第２記憶領域に書き込むことと、
前記第１記憶領域に書き込まれたデータの総量、および前記第２記憶領域に書き込まれたデータの総量を測定することと、
前記第１記憶領域に書き込まれたデータの前記測定された総量が前記第１上限値に達した場合、前記ホストからの前記第１記憶領域へのデータの書き込みを制限することと、
前記第２記憶領域に書き込まれたデータの前記測定された総量が前記第２上限値に達した場合、前記ホストからの前記第２記憶領域へのデータの書き込みを制限することとを具備する制御方法。
【請求項１３】
前記測定することは、
前記ホストから前記第１記憶領域に書き込まれたデータの総量と前記第１記憶領域のガベージコレクションによって前記第１記憶領域に書き込まれたデータの総量との合計量を、前記第１記憶領域に書き込まれたデータの総量として測定することと、
前記ホストから前記第２記憶領域に書き込まれたデータの総量と前記第２記憶領域のガベージコレクションによって前記第２記憶領域に書き込まれたデータの総量との合計量を、前記第２記憶領域に書き込まれたデータの総量として測定することとを含む請求項１２記載の制御方法。
【請求項１４】
前記測定することは、
前記ホストから前記第１記憶領域に書き込まれたデータの総量を、前記第１記憶領域に書き込まれたデータの総量として測定することと、
前記ホストから前記第２記憶領域に書き込まれたデータの総量を、前記第２記憶領域に書き込まれたデータの総量として測定することとを含む請求項１２記載の制御方法。
【発明の詳細な説明】
【技術分野】
【０００１】
本発明の実施形態は、不揮発性メモリを制御する技術に関する。
【背景技術】
【０００２】
近年、不揮発性メモリを備えるメモリシステムが広く普及している。
【０００３】
このようなメモリシステムの一つとして、ＮＡＮＤフラッシュ技術ベースのソリッドステートドライブ（ＳＳＤ）が知られている。ＳＳＤは、その低電力消費、高性能という特徴により、様々なコンピュータのストレージとして使用されている。
【０００４】
最近では、データセンターのサーバにおいても、大容量データを格納するためのストレージとしてＳＳＤが使用されている。ＳＳＤによって提供される高速アクセス性能は、サーバ（ホスト）のＩ／Ｏ性能を向上させることができる。
【先行技術文献】
【特許文献】
【０００５】
【特許文献１】特開２０１６−０９１０５０号公報
【発明の概要】
【発明が解決しようとする課題】
【０００６】
データセンターにおいては、個々のユーザのストレージ要件に適した柔軟なストレージサービスを提供することが必要とされる。このため、ストレージの運用および管理のためにサーバ側で実行することが必要とされる処理量は、増加する傾向にある。
【０００７】
したがって、データセンター向けＳＳＤのようなメモリシステムにおいては、サーバ（ホスト）によるストレージ管理を支援するための新たな機能の実現が求められる。
【０００８】
本発明が解決しようとする課題は、ホストによるストレージ管理を支援することができるメモリシステムおよび制御方法を提供することである。
【課題を解決するための手段】
【０００９】
実施形態によれば、ホストに接続可能なメモリシステムは、不揮発性メモリと、前記不揮発性メモリに電気的に接続されたコントローラとを具備する。前記コントローラは、前記不揮発性メモリを第１記憶領域と第２記憶領域とを含む複数の記憶領域に論理的に分割する。前記コントローラは、書き込み可能なデータの総量を記憶領域毎に指定する前記ホストからの要求に基づいて、前記第１記憶領域に書き込み可能なデータの総量の上限を示す第１上限値と、前記第２記憶領域に書き込み可能なデータの総量の上限を示す第２上限値とを管理する。前記コントローラは、前記ホストからの前記第１記憶領域向けのデータを前記第１記憶領域に書き込み、前記ホストからの前記第２記憶領域向けのデータを前記第２記憶領域に書き込む。前記コントローラは、前記第１記憶領域に書き込まれたデータの総量、および前記第２記憶領域に書き込まれたデータの総量を測定する。前記コントローラは、前記第１記憶領域に書き込まれたデータの前記測定された総量が前記第１上限値に達した場合、前記ホストからの前記第１記憶領域へのデータの書き込みを制限し、前記第２記憶領域に書き込まれたデータの前記測定された総量が前記第２上限値に達した場合、前記ホストからの前記第２記憶領域へのデータの書き込みを制限する。
【図面の簡単な説明】
【００１０】
【図１】実施形態のメモリシステムの構成例を示すブロック図。
【図２】同実施形態のメモリシステム内のＮＡＮＤインタフェースと複数のＮＡＮＤ型フラッシュメモリチップとの関係を示すブロック図。
【図３】従来型ＳＳＤを使用した仮想化環境と、同実施形態に係るメモリシステム（仮想化支援機構を含むＳＳＤ）を使用した仮想化環境とを説明するためのブロック図。
【図４】同実施形態に係るメモリシステム内の記憶領域（仮想ＳＳＤ（ＶＳＳＤ））の数とホスト（サーバ）側の仮想マシンの数との関係の例を示す図。
【図５】同実施形態に係るメモリシステム内の各記憶領域（ＶＳＳＤ）を説明するためのブロック図。
【図６】同実施形態のメモリシステムの記憶領域（ＶＳＳＤ）管理を説明するための図。
【図７】同実施形態のメモリシステムに適用される記憶領域（ＶＳＳＤ）管理コマンドを説明するための図。
【図８】同実施形態のメモリシステムによって管理される記憶領域（ＶＳＳＤ）管理テーブルを示す図。
【図９】ユーザ容量とオーバープロビジョニング容量との組を記憶領域（ＶＳＳＤ）毎に指定するホストからの要求に基づいて、個々の記憶領域（ＶＳＳＤ）にユーザ容量およびオーバープロビジョニング容量を割り当てる動作を説明するための図。
【図１０】同実施形態のメモリシステムによって実行されるＮＡＮＤ処理実行時間制御処理を説明するための図。
【図１１】同実施形態のメモリシステムによって実行される記憶領域（ＶＳＳＤ）作成処理のシーケンスを示す図。
【図１２】同実施形態のメモリシステムによって実行されるライトデータ量カウント処理を説明するための図。
【図１３】同実施形態のメモリシステムによって実行されるライトデータ量カウント処理の手順を示すフローチャート。
【図１４】同実施形態のメモリシステムによって実行される、個々の記憶領域（ＶＳＳＤ）に書き込まれるデータの総量を制限する処理の手順を示すフローチャート。
【図１５】同実施形態のメモリシステムによって実行されるＮＡＮＤ処理実行時間制御処理の手順を示すフローチャート。
【図１６】同実施形態のメモリシステムによって実行されるトークン配布／回収処理の例を説明するための図。
【図１７】同実施形態のメモリシステムによって実行されるトークン配布／回収処理の別の例を説明するための図。
【図１８】ホストの構成例を示すブロック図。
【図１９】同実施形態のメモリシステムとホストとを含むコンピュータの構成例を示す図。
【発明を実施するための形態】
【００１１】
以下、図面を参照して、実施形態を説明する。  
まず、図１を参照して、一実施形態に係るメモリシステムを含む情報処理システム１の構成を説明する。
【００１２】
このメモリシステムは、不揮発性メモリにデータを書き込み、不揮発性メモリからデータを読み出すように構成された半導体ストレージデバイスである。このメモリシステムは、例えば、ＮＡＮＤフラッシュ技術ベースのソリッドステートドライブ（ＳＳＤ）３として実現されている。
【００１３】
情報処理システム１は、ホスト（ホストデバイス）２と、ＳＳＤ３とを含む。ホスト２は、サーバ、パーソナルコンピュータのような情報処理装置である。ホスト２として機能するサーバの典型例としては、データセンター内のサーバが挙げられる。
【００１４】
ホスト２がデータセンター内のサーバによって実現されるケースにおいては、このホスト（サーバ）２は、ネットワーク５０を介して複数のエンドユーザ端末９０に接続されてもよい。ホスト２は、これらエンドユーザ端末９０に対して様々なサービスを提供することができる。
【００１５】
ホスト（サーバ）２によって提供可能なサービスの例には、（１）システム開発プラットフォームを各クライアント（エンドユーザ端末９０）に提供するプラットホーム・アズ・ア・サービス、（２）仮想サーバのようなインフラストラクチャをクライアント（エンドユーザ端末９０）に提供するインフラストラクチャ・アズ・ア・サービス、等がある。
【００１６】
複数の仮想マシン４１、４２、４３、…４７が、このホスト（サーバ）２として機能する物理サーバ上で実行されてもよい。これら仮想マシン４１、４２、４３、…４７は、対応するクライアント（エンドユーザ端末９０）に各種サービスを提供するように構成された仮想サーバとして機能することができる。
【００１７】
なお、コンテナ型仮想化環境がホスト（サーバ）２に適用されてもよい。この場合には、ホスト（サーバ）２のオペレーティングシステム上に複数のコンテナ（複数のユーザ空間）それぞれが配置される。これらコンテナの各々はアプリケーションを実行するための独立したリソースを含み、仮想マシン（仮想サーバ）と同等の機能を実行することができる。
【００１８】
ＳＳＤ３は、ホスト２として機能する情報処理装置のメインストレージとして使用され得る。ＳＳＤ３は、情報処理装置に内蔵されてもよいし、情報処理装置にケーブルまたはネットワークを介して接続されてもよい。
【００１９】
ホスト２とＳＳＤ３とを相互接続するためのインタフェースとしては、ＳＣＳＩ、Ｓｅｒｉａｌ  Ａｔｔａｃｈｅｄ  ＳＣＳＩ（ＳＡＳ）、ＡＴＡ、Ｓｅｒｉａｌ  ＡＴＡ（ＳＡＴＡ）、ＰＣＩ  Ｅｘｐｒｅｓｓ（ＰＣＩｅ）、Ｅｔｈｅｒｎｅｔ（登録商標），Ｆｉｂｒｅ  ｃｈａｎｎｅｌ、ＮＶＭ  Ｅｘｐｒｅｓｓ（ＮＶＭｅ）（登録商標）等を使用し得る。
【００２０】
ＳＳＤ３は、コントローラ４および不揮発性メモリ（ＮＡＮＤ型フラッシュメモリ）５を備える。ＳＳＤ３は、ランダムアクセスメモリ、例えば、ＤＲＡＭ６も備えていてもよい。
【００２１】
ＮＡＮＤ型フラッシュメモリ５は、マトリクス状に配置された複数のメモリセルを含むメモリセルアレイを含む。ＮＡＮＤ型フラッシュメモリ５は、２次元構造のＮＡＮＤ型フラッシュメモリであってもよいし、３次元構造のＮＡＮＤ型フラッシュメモリであってもよい。
【００２２】
ＮＡＮＤ型フラッシュメモリ５のメモリセルアレイは、複数の物理ブロックＢ０〜Ｂｍ−１を含む。物理ブロックＢ０〜Ｂｍ−１の各々は多数のページ（ここではページＰ０〜Ｐｎ−１）によって編成される。物理ブロックＢ０〜Ｂｍ−１は、アドレス指定可能な最小の消去単位として機能する。物理ブロックは、「消去ブロック」、「物理消去ブロック」、または単に「ブロック」と称されることもある。ページＰ０〜Ｐｎ−１の各々は、同一ワード線に接続された複数のメモリセルを含む。ページＰ０〜Ｐｎ−１は、データ書き込み動作およびデータ読み込み動作の単位である。
【００２３】
コントローラ４は、Ｔｏｇｇｌｅ、ＯＮＦＩのようなＮＡＮＤインタフェース１３を介して、不揮発性メモリであるＮＡＮＤ型フラッシュメモリ５に電気的に接続されている。ＮＡＮＤインタフェース１３は、ＮＡＮＤ型フラッシュメモリ５を制御するように構成されたＮＡＮＤ制御回路として機能する。
【００２４】
ＮＡＮＤ型フラッシュメモリ５は、図２に示すように、複数のＮＡＮＤ型フラッシュメモリチップを含んでいてもよい。個々のＮＡＮＤ型フラッシュメモリチップは独立して動作可能である。このため、ＮＡＮＤ型フラッシュメモリチップは、並列動作可能な最小単位として機能する。図２においては、ＮＡＮＤインタフェース１３に８個のチャンネルＣｈ．１〜Ｃｈ．８が接続されており、８個のチャンネルＣｈ．１〜Ｃｈ．８の各々に４つのＮＡＮＤ型フラッシュメモリチップが接続されている場合が例示されている。この場合、最大３２個のＮＡＮＤ型フラッシュメモリチップを並列動作させることができる。
【００２５】
本実施形態では、ＳＳＤ３内のコントローラ４は、ホスト２によるストレージ管理を支援するために仮想化支援機構を有している。この仮想化支援機構は、ホスト２によるストレージ仮想化を支援するための機構である。この仮想化支援機構は、仮想マシン４１、４２、４３、…４７のような複数の仮想サーバがＳＳＤ３の物理リソースを共有することを可能にし、さらにまた仮想マシン４１、４２、４３、…４７のような複数の仮想サーバが直接的にＳＳＤ３の物理リソースをアクセスすることを可能にする。
【００２６】
この仮想化支援機構は、容量／性能／可用性／個数を自由に設定できる複数の記憶領域をＳＳＤ３内に配置し、これら記憶領域をホスト（サーバ）２上の仮想マシンそれぞれに提供する。これら記憶領域は、ＮＡＮＤ型フラッシュメモリ５を論理的に分割することによって得られる。仮想マシンとＳＳＤ３内記憶領域との間のマッピングは１：１であってよいし、１：ｎ（ｎは２以上）であってもよい。つまり、一つの仮想マシンに対してＳＳＤ３内の１つの以上の記憶領域が、この仮想マシンに専用のストレージリソース（仮想ディスク）として割り当てられてもよい。
【００２７】
ここで、仮想ディスクとは、仮想マシン上で実行されるゲストオペレーティングシステムが物理ディスクとして認識する一種のファイルを意味する。各仮想マシンは、この仮想マシンに割り当てられた仮想ディスクを物理ディスクとして扱うことができる。
【００２８】
仮想化支援機構を有するＳＳＤ３は、容量／性能／可用性等に関する特徴が互いに異なる様々な記憶領域（以下、仮想ＳＳＤ（ＶＳＳＤ）とも称する）を作成および管理することができる。また、仮想化支援機構を有するＳＳＤ３は、ホスト２によって削除（リムーブ）が要求された仮想ＳＳＤ（ＶＳＳＤ）を削除することもできる。仮想ＳＳＤ（ＶＳＳＤ）の削除によって増加されるＮＡＮＤ型フラッシュメモリ５内のフリーエリアは、新たな仮想ＳＳＤ（ＶＳＳＤ）の作成に利用され得る。
【００２９】
仮想ＳＳＤ（ＶＳＳＤ）は、仮想ディスクと同等の機能を有する。したがって、仮想化支援機構を有するＳＳＤ３は、仮想ディスクを作成および管理するためのエミュレーション機能をホスト２からＳＳＤ３にオフロードすることを可能にする。これによって、ホスト２がストレージ管理のために実行することが必要な処理量を低減でき、この結果、ホスト２のＩ／Ｏ性能の向上を図ることができる。
【００３０】
また、コントローラ４は、ＮＡＮＤ型フラッシュメモリ５のデータ管理とＮＡＮＤ型フラッシュメモリ５のブロック管理とを実行するように構成されたフラッシュトランスレーション層（ＦＴＬ）としても機能することができる。
【００３１】
このＦＴＬによって実行されるデータ管理には、（１）論理アドレスそれぞれとＮＡＮＤ型フラッシュメモリ５の物理アドレスそれぞれとの間の対応関係を示すマッピング情報の管理、（２）ページ単位のリード／ライトと物理ブロック単位の消去動作とを隠蔽するための処理、等が含まれる。論理アドレスは、ＳＳＤ３をアドレス指定するためにホスト２によって使用されるアドレスである。この論理アドレスとしては、通常、論理ブロックアドレス（ＬＢＡ）が使用される。
【００３２】
論理ブロックアドレス（ＬＢＡ）それぞれと物理アドレスそれぞれとの間のマッピングの管理は、アドレス変換テーブル（論理物理アドレス変換テーブル）として機能するルックアップテーブル（ＬＵＴ）を用いて実行される。
【００３３】
本実施形態では、コントローラ４は、複数の仮想ＳＳＤ（ＶＳＳＤ＃１、ＶＳＳＤ＃２、…ＶＳＳＤ＃ｎ）にそれぞれ対応する複数のルックアップテーブル（ＬＵＴ）３１Ｃ、３２Ｃ、…３７Ｃを使用して、仮想ＳＳＤ（ＶＳＳＤ）毎に、ＬＢＡそれぞれと物理アドレスそれぞれとの間のマッピングを管理する。
【００３４】
あるＬＢＡに対応する物理アドレスは、このＬＢＡのデータがライトされたＮＡＮＤ型フラッシュメモリ５内の物理記憶位置を示す。ルックアップテーブル（ＬＵＴ）３１Ｃ、３２Ｃ、…３７Ｃは、ＳＳＤ３の電源オン時にＮＡＮＤ型フラッシュメモリ５からＤＲＡＭ６にロードされてもよい。一般に、各ルックアップテーブル（アドレス変換テーブル）のサイズは、比較的大きい。したがって、各ルックアップテーブルの少なくとも一部がＤＲＡＭ６にアドレス変換テーブルキャッシュとして格納されてもよい。
【００３５】
ホスト２からのリードコマンドによって指定される論理アドレスに対応する目的の物理アドレスを含むキャッシュラインがアドレス変換テーブルキャッシュに存在するならば（キャッシュヒット）、この目的の物理アドレスによって指定されるＮＡＮＤ型フラッシュメモリ５内の物理記憶位置からデータが即座にリードされる。
【００３６】
一方、目的の物理アドレスを含むキャッシュラインがアドレス変換テーブルキャッシュに存在しないならば（キャッシュミス）、目的の物理アドレスを含むルックアップテーブル内の一部分（アドレス変換テーブル部）がＮＡＮＤ型フラッシュメモリ５から読み出される。そしてアドレス変換テーブルキャッシュ内の置換対象キャッシュラインの内容がアドレス変換テーブルキャッシュから追い出され、代わりに、ＮＡＮＤ型フラッシュメモリ５から読み出されたアドレス変換テーブル部がこのキャッシュラインに格納される。そして、この目的の物理アドレスによって指定されるＮＡＮＤ型フラッシュメモリ５内の物理記憶位置からデータがリードされる。
【００３７】
各仮想ＳＳＤ（ＶＳＳＤ）において、ページへのデータ書き込みは、１消去サイクル当たり１回のみ可能である。このため、コントローラ４は、あるＬＢＡに対応する更新データを、このＬＢＡに対応する以前のデータが格納されている物理記憶位置ではなく、別の物理記憶位置に書き込む。そして、コントローラ４は、このＶＳＳＤに対応するルックアップテーブル（ＬＵＴ）を更新してこのＬＢＡをこの別の物理記憶位置に関連付け、そして以前のデータを無効化する。
【００３８】
ブロック管理には、バッドブロックの管理と、ウェアレベリングと、ガベージコレクション等が含まれる。
【００３９】
ウェアレベリングは、物理ブロックそれぞれの消耗を均一化するための動作である。
【００４０】
ガベージコレクションは、データを書き込むことが可能なフリーブロックの個数を増やすため、有効データと無効データとが混在する幾つかの対象ブロック（対象物理ブロック）内の有効データを別の物理ブロック（例えばフリーブロック）にコピーする。ここで、有効データとは、後に参照される可能性があるデータを意味する。無効データとは、もはや参照されることが無いデータを意味する。例えば、あるＬＢＡに関連付けられているデータは有効データであり、どのＬＢＡにも関連付けられていないデータは無効データである。そして、ガベージコレクションは、コピーされた有効データのＬＢＡそれぞれを正しい物理アドレスにマッピングする。有効データが別の物理ブロックにコピーされることによって無効データのみになった物理ブロックは、フリーブロックとして解放される。これによって、この物理ブロックはその消去動作が実行された後に再利用することが可能となる。
【００４１】
本実施形態では、ガベージコレクションは、仮想ＳＳＤ（ＶＳＳＤ）毎に独立して実行され得る。これにより、たとえある仮想ＳＳＤ（ＶＳＳＤ）のガベージコレクションが実行中であっても、このガベージコレクションが、他の仮想ＳＳＤ（ＶＳＳＤ）に対する通常のアクセスに悪影響を及ぼす可能性を大幅に低減することができる。この結果、いわゆるノイジーネイバー問題を解決することができる。
【００４２】
次に、コントローラ４の構成について説明する。
【００４３】
コントローラ４は、ホストインタフェース１１、ＣＰＵ１２、ＮＡＮＤインタフェース１３、およびＤＲＡＭインタフェース１４等を含む。これらＣＰＵ１２、ＮＡＮＤインタフェース１３、ＤＲＡＭインタフェース１４は、バス１０を介して相互接続される。
【００４４】
このホストインタフェース１１は、ホスト２との通信を実行するように構成されたホストインタフェース回路である。このホストインタフェース１１は、例えば、ＰＣＩｅコントローラ（ＮＶＭｅコントローラ）であってよい。ホストインタフェース１１は、ホスト２から様々なコマンド（ライトコマンド、リードコマンド、ＶＳＳＤ管理コマンド、アンマップ（ＵＮＭＡＰ）コマンド、等）を受信する。
【００４５】
ライトコマンドは、ＳＳＤ３に対し、このライトコマンドによって指定されたデータをライトするように要求する。ライトコマンドは、開始ＬＢＡ、転送長、およびＶＳＳＤＩＤを含んでいてもよい。ライトコマンド内のＶＳＳＤＩＤは、データが書き込まれるべきＶＳＳＤを一意に識別するための識別子である。リードコマンドは、ＳＳＤ３に対し、このリードコマンドによって指定されたデータをリードするように要求する。リードコマンドは、開始ＬＢＡ、転送長、およびＶＳＳＤＩＤを含んでいてもよい。リードコマンド内のＶＳＳＤＩＤは、データが読み出されるべきＶＳＳＤを一意に識別するための識別子である。
【００４６】
なお、複数のＶＳＳＤそれぞれがホスト２上の仮想マシンそれぞれと予め関連付けられているケースにおいては、ライトコマンド／リードコマンドは、ＶＳＳＤのＩＤの代わりに、仮想マシンＩＤを含んでいてもよい。仮想マシンＩＤは、ライト要求（ライトコマンド）／リード要求（リードコマンド）を発行した仮想マシンの識別子である。コントローラ４が、ある仮想マシンＩＤを含むライトコマンドを受信した時、コントローラ４は、この仮想マシンＩＤに関連づけられたＶＳＳＤにデータを書き込む。
【００４７】
ＶＳＳＤ管理コマンドは、ＳＳＤ３に対し、ＶＳＳＤの作成または削除を要求するコマンドである。ＶＳＳＤ管理コマンドは、個々のユーザ（エンドユーザ）のストレージ要件に適合したＶＳＳＤを仮想マシンに提供するための様々なパラメータを含む。これらパラメータは、ＶＳＳＤそれぞれのＱｏＳ制御のための機能をホスト２に提供することを可能にする。より詳しくは、これらパラメータは、ＶＳＳＤの容量／性能／可用性等を自由に設定するために使用される。ホスト２は、このＶＳＳＤ管理コマンドを使用することによって、作成すべきＶＳＳＤの容量／性能／可用性に関する要件を指定することができる。ＳＳＤ３は、ホスト２によって指定された容量／性能／可用性に関する要件を満たすＶＳＳＤを作成することができる。よって、データセンター事業者は、個々のエンドユーザのニーズに応じて、これらエンドユーザに提供するストレージ（ＶＳＳＤ）の性能等を自由に設定することができる。
【００４８】
ＣＰＵ１２は、ホストインタフェース１１、ＮＡＮＤインタフェース１３、ＤＲＡＭインタフェース１４を制御するように構成されたプロセッサである。ＣＰＵ１２は、上述のＦＴＬの処理に加え、ホスト２からの様々なコマンドを処理するためのコマンド処理等を実行する。
【００４９】
これらＦＴＬ処理およびコマンド処理は、ＣＰＵ１２によって実行されるファームウェアによって制御されてもよい。このファームウェアは、ＣＰＵ１２を、ＶＳＳＤ作成部２１、書き込みデータ総量測定部２２、書き込み制限部２３、ＮＡＮＤ処理実行時間制御部２４、ホスト側アクセスバンド幅制御部２５、およびメモリ資源量割り当て部２６として機能させる。
【００５０】
ＶＳＳＤ作成部２１は、複数のＶＳＳＤを管理するためのマルチＶＳＳＤ管理機能を有する。各ＶＳＳＤは、不揮発性メモリであるＮＡＮＤ型フラッシュメモリ５内の一種の記憶領域に相当する。各ＶＳＳＤは、このＶＳＳＤ用に割り当てられた幾つかの物理ブロックから構成される。あるＶＳＳＤ用に割り当てられた物理ブロックの各々には、このＶＳＳＤに関連付けられたデータ（このＶＳＳＤに関連付けられた仮想マシンからのデータ）のみが格納され、他のＶＳＳＤに関連付けられたデータ（他の仮想マシンからのデータ）は格納されない。換言すれば、ＮＡＮＤ型フラッシュメモリ５内の個々の物理ブロックは、単一のＶＳＳＤに対応するデータのみを格納する。
【００５１】
ＶＳＳＤ作成部２１は、ホスト２からのＶＳＳＤそれぞれの作成要求に基づいて、複数のＶＳＳＤ、つまり複数の記憶領域を作成する。換言すれば、ＶＳＳＤ作成部２１は、ホスト２からのＶＳＳＤそれぞれの作成要求に基づいて、ＮＡＮＤ型フラッシュメモリ５を複数の記憶領域（ＶＳＳＤ）に論理的に分割する。
【００５２】
ホスト２は、上述のＶＳＳＤ管理コマンドを使用してＶＳＳＤそれぞれの作成をＳＳＤ３に要求することができる。ＶＳＳＤ作成部２１は、ホスト２によって指定された容量／性能／可用性等に関する要件を満たすＶＳＳＤそれぞれを作成することができる。
【００５３】
ホスト２は、幾つかのＶＳＳＤ管理コマンドをＳＳＤ３に発行することにより、容量／性能／可用性等に関するパラメータをＶＳＳＤ毎に指定することができる。
【００５４】
ＶＳＳＤの可用性等に関するパラメータの例には、ＶＳＳＤに書き込み可能なデータの総量が含まれていてもよい。ＶＳＳＤに書き込み可能なデータの総量は、ＶＳＳＤに書き込み可能なデータの総量の上限値を示す。
【００５５】
通常、あるＶＳＳＤに書き込まれるデータの総量の増加は、このＶＳＳＤ内の物理ブロックそれぞれの書き換え回数（プログラム／イレーズサイクルの数）の増加を引き起こす。つまり、ＶＳＳＤに書き込まれるデータの総量が大きい程、このＶＳＳＤの消耗度を増加させる。なぜなら、ＶＳＳＤに書き込まれるデータの総量が大きい程、このＶＳＳＤ内の各物理ブロックのプログラム／イレーズサイクルの数が増加しやすくなり、これによってこのＶＳＳＤの消耗度が増加するからである。
【００５６】
したがって、もし書き込まれるデータの総量を全く制限しなかったならば、特定のＶＳＳＤの消耗度の過度な増加によって、利用できない物理ブロック（「バッドブロック」と称される）が増え、これによってＳＳＤ３の寿命の劣化が引き起こされる場合がある。
【００５７】
また、もし書き込まれるデータの総量を全く制限しなかったならば、ＳＳＤ３とホスト２との間の通信のためのバンド幅が、特定の仮想マシンから特定のＶＳＳＤに向けた大量のＩ／Ｏによって専有されてしまい、これによって他の仮想マシンそれぞれのＩ／Ｏ性能が低下される場合もある、
ホスト２は、書き込み可能なデータの総量をＶＳＳＤそれぞれに配分することにより、個々のＶＳＳＤのＱｏＳ制御を行うことができる。
【００５８】
例えば、ホスト２は、頻繁に更新されるタイプのデータ（ホットデータ）を扱う仮想マシン用のＶＳＳＤの作成を要求する場合、大きな書き込み可能データ総量を指定してもよい。高い更新頻度を有するデータが書き込まれるＶＳＳＤに関しては、このＶＳＳＤに書き込まれるデータの総量が増える可能性が高いからである。一方、ホスト２は、例えば、更新の頻度が低いタイプのデータ（コールドデータ）を扱う仮想マシン用のＶＳＳＤの作成を要求する場合、小さい書き込み可能データ総量を指定してもよい。なお、データセンター事業者は、書き込み可能なデータの総量が大きいＶＳＳＤ、つまり大きな書き込み総量が許容されるＶＳＳＤを要求するエンドユーザには高いＶＳＳＤ利用料（レンタル料）を課し、書き込み可能なデータの総量が少ないＶＳＳＤ、つまり少ない書き込み総量しか許容されないＶＳＳＤを要求するエンドユーザには安いＶＳＳＤ利用料（レンタル料）を課してもよい。各エンドユーザは、自身のワークロードに適した書き込み総量を有するＶＳＳＤを利用することができる。
【００５９】
ＶＳＳＤ作成部２１は、書き込み可能なデータの総量（書き込み総量）をＶＳＳＤ毎に指定するホスト２からの要求に基づいて、個々のＶＳＳＤ毎に、書き込み可能なデータの総量の上限（書き込み総量の上限）を示す上限値を管理する。
【００６０】
書き込みデータ総量測定部２２は、各ＶＳＳＤに書き込まれたデータの総量を測定する。ＶＳＳＤ＃１、ＶＳＳＤ＃２、…ＶＳＳＤ＃ｎがＳＳＤ３内に作成されている場合においては、書き込みデータ総量測定部２２は、ＶＳＳＤ＃１に書き込まれたデータの総量、ＶＳＳＤ＃２に書き込まれたデータの総量、そして、ＶＳＳＤ＃ｎに書き込まれたデータの総量をそれぞれ別個に測定する。
【００６１】
例えば、書き込みデータ総量測定部２２は、ホスト２からＶＳＳＤ＃１に書き込まれたデータの総量とＶＳＳＤ＃１のガベージコレクションによってＶＳＳＤ＃１に書き込まれたデータの総量との合計量を、ＶＳＳＤ＃１に書き込まれたデータの総量として測定してもよい。同様に、書き込みデータ総量測定部２２は、ホスト２からＶＳＳＤ＃２に書き込まれたデータの総量とＶＳＳＤ＃２のガベージコレクションによってＶＳＳＤ＃２に書き込まれたデータの総量との合計量を、ＶＳＳＤ＃２に書き込まれたデータの総量として測定してもよい。これにより、各ＶＳＳＤのガベージコレクションをも考慮して、各ＶＳＳＤに書き込み可能なデータの総量の上限を制限することができる。
【００６２】
なお、書き込みデータ総量測定部２２は、ホスト２からＶＳＳＤ＃１に書き込まれたデータの総量を、ＶＳＳＤ＃１に書き込まれたデータの総量として測定し、ホスト２からＶＳＳＤ＃２に書き込まれたデータの総量を、ＶＳＳＤ＃２に書き込まれたデータの総量として測定してもよい。
【００６３】
また、ＶＳＳＤ管理コマンドは、ＶＳＳＤに書き込み可能なデータの総量の上限値を指定可能な以下の２つのパラメータを選択的に使用してもよい。
【００６４】
（１）ＳＳＤ内総書き込み量を指定するパラメータ
（２）書き込み要求総量を指定するパラメータ
ＳＳＤ内総書き込み量を指定するパラメータは、ホスト２からこのＶＳＳＤに書き込み可能なデータの総量とこのＶＳＳＤのガベージコレクションによってこのＶＳＳＤに書き込み可能なデータの総量との合計の上限値を指定する。このパラメータは、各ＶＳＳＤのガベージコレクションをも考慮して、各ＶＳＳＤに書き込み可能なデータの総量の上限を制限するために使用される。あるＶＳＳＤに対するＳＳＤ内総書き込み量が指定された場合にのみ、書き込みデータ総量測定部２２は、ホスト２からこのＶＳＳＤに書き込まれたデータの総量とこのＶＳＳＤのガベージコレクションによってこのＶＳＳＤに書き込まれたデータの総量との合計量を、このＶＳＳＤに書き込まれたデータの総量として測定してもよい。
【００６５】
書き込み要求総量を指定するパラメータは、ホスト２からこのＶＳＳＤに書き込み可能なデータの総量の上限値を指定する。このパラメータは、ホスト２から各ＶＳＳＤに書き込み可能なデータの総量の上限を制限するために使用される。あるＶＳＳＤに対する書き込み要求総量が指定された場合にのみ、書き込みデータ総量測定部２２は、ホスト２からこのＶＳＳＤに書き込まれたデータの総量を、このＶＳＳＤに書き込まれたデータの総量として測定してもよい。
【００６６】
ＶＳＳＤ＃１に書き込まれたデータの測定された総量が、ＶＳＳＤ＃１の書き込み可能データの総量の上限値に達した場合、書き込み制限部２３は、ホスト２からＶＳＳＤ＃１へのデータの書き込み（さらなる書き込み）を制限する。これにより、ホスト２によって指定されたＶＳＳＤ＃１用の書き込み総量を超える量のデータが、このＶＳＳＤ＃１に書き込まれることを防止することができる。ＶＳＳＤ＃１を使用している仮想マシンに対応するエンドユーザは、データセンター事業者に対して、書き込み可能データの総量の増加を要求してもよい。データセンター事業者は、追加の使用料をこのエンドユーザに課し、そして、ＶＳＳＤ＃１に書き込むことが可能データの総量が増えるようにＶＳＳＤ＃１を再設定するためのＶＳＳＤ管理コマンドをＳＳＤ３に送信してもよい。
【００６７】
ＶＳＳＤ＃２に書き込まれたデータの測定された総量が、ＶＳＳＤ＃２の書き込み可能データの総量の上限値に達した場合、書き込み制限部２３は、ホスト２からＶＳＳＤ＃２へのデータの書き込みを制限する。これにより、ホスト２によって指定されたＶＳＳＤ＃２の書き込み総量を超える量のデータがＶＳＳＤ＃２に書き込まれることを防止することができる。
【００６８】
同様に、ＶＳＳＤ＃ｎに書き込まれたデータの測定された総量が、ＶＳＳＤ＃ｎの書き込み可能なデータの総量の上限値に達した場合、書き込み制限部２３は、ホスト２からＶＳＳＤ＃ｎへのデータの書き込みを制限する。これにより、ホスト２によって指定されたＶＳＳＤ＃ｎの書き込み総量を超える量のデータがＶＳＳＤ＃ｎに書き込まれることを防止することができる。
【００６９】
なお、ＳＳＤ３のコントローラ４は、ＶＳＳＤ毎に測定された書き込み総量（ＳＳＤ内総書き込み量および／または書き込み要求総量）をホスト２に報告することもできる。例えば、ホスト２からあるＶＳＳＤの書き込み総量（ＳＳＤ内総書き込み量および／または書き込み要求総量）の取得が要求された場合、コントローラ４は、書き込み総量（ＳＳＤ内総書き込み量および／または書き込み要求総量）をホスト２に報告する。
【００７０】
ＶＳＳＤの容量に関するパラメータの例には、ユーザ容量およびオーバープロビジョニング容量が含まれる。ユーザ容量は、ユーザアクセス可能ＬＢＡスペースに相当する。オーバープロビジョニングは、ホスト２には利用可能なユーザスペース（ユーザアクセス可能ＬＢＡスペース）として見えないＳＳＤ３内のストレージ容量を割り当てることを意味する。オーバープロビジョニング容量は、ホスト２には利用可能なユーザスペースとして見えないＳＳＤ３内のストレージ容量である。エンドユーザがアクセス可能なユーザスペースは、ユーザ容量が増加するほど大きくなる。また、ＶＳＳＤの性能および耐久性は、ユーザ容量に対するオーバープロビジョニング容量の割合が高くなるほど向上する。
【００７１】
ホスト２は、高い耐久性を必要とするＶＳＳＤの作成を要求する場合、ユーザ容量に対して例えば５０〜１００パーセントの容量を有するオーバープロビジョニング容量を指定してもよい。一方、ホスト２は、高い耐久性を必要としないＶＳＳＤの作成を要求する場合、ユーザ容量に対して例えばゼロ〜数パーセントの容量を有するオーバープロビジョニング容量を指定してもよい。
【００７２】
ホスト２は、ＶＳＳＤのユーザ容量とこのＶＳＳＤのオーバープロビジョニング容量との組を指定するために、ＶＳＳＤのユーザ容量と、このユーザ容量に対するオーバープロビジョニング容量の割合を示すパーセンテージとを指定してもよい。あるいは、ホスト２は、ＶＳＳＤのユーザ容量とＶＳＳＤのオーバープロビジョニング容量との組を指定するために、ＶＳＳＤのユーザ容量と、このＶＳＳＤに割り当てるべき物理ブロックの個数とを指定してもよい。後者の場合においては、ＶＳＳＤに割り当てられた物理ブロックの個数に相当する容量からユーザ容量を引くことによって得られる残り容量が実際のオーバープロビジョニング容量となる。
【００７３】
データセンター事業者は、高い耐久性を有するＶＳＳＤを要求するエンドユーザには高いＶＳＳＤレンタル料を課し、高い耐久性を必要としないＶＳＳＤを要求するエンドユーザには安いＶＳＳＤレンタル料を課してもよい。
【００７４】
ＶＳＳＤ作成部２１は、ユーザ容量とオーバープロビジョニング容量との組をＶＳＳＤ毎に指定するホスト２からの要求に基づいて、個々のＶＳＳＤに、ユーザ容量とオーバープロビジョニング容量との合計の容量を割り当てる。ホスト２がＶＳＳＤに割り当てるべき物理ブロックの個数を指定した場合には、ＶＳＳＤ作成部２１は、指定された個数の物理ブロックをこのＶＳＳＤ用に確保（予約）すればよい。確保（予約）された物理ブロックの個数に対応する総容量が、このＶＳＳＤに割り当てられる、ユーザ容量とオーバープロビジョニング容量との合計の容量となる。
【００７５】
ＶＳＳＤの性能に関するパラメータの例には、ＮＡＮＤ処理実行時間（ＮＡＮＤバンド幅）が含まれる。ＮＡＮＤ処理実行時間とは、単位時間当たりのＮＡＮＤ型フラッシュメモリ５の消去、書き込みまたは読み出し動作の実行時間の上限値である。ホスト２は、高速アクセス性能が必要とされるＶＳＳＤの作成を要求する場合、長い上限値（長いＮＡＮＤ処理実行時間）を指定し、高速アクセス性能が必要とされないＶＳＳＤの作成を要求する場合、短い上限値（短いＮＡＮＤ処理実行時間）を指定してもよい。
【００７６】
データセンター事業者は、高速アクセス性能を有するＶＳＳＤを要求するエンドユーザには高いＶＳＳＤレンタル料を課し、高速アクセス性能を必要としないＶＳＳＤを要求するエンドユーザには安いＶＳＳＤレンタル料を課してもよい。
【００７７】
ＶＳＳＤ作成部２１は、ＮＡＮＤ処理実行時間の上限値をＶＳＳＤ毎に指定するホスト２からの要求に基づいて、個々のＶＳＳＤ毎に、ＮＡＮＤ処理実行時間の上限値、つまり、単位時間あたりのＮＡＮＤ型フラッシュメモリ５の消去、書き込みまたは読み出し動作の時間の上限値、を管理する。
【００７８】
ＮＡＮＤ処理実行時間制御部２４は、単位時間当たりの各ＶＳＳＤの消去、書き込みまたは読み出し動作の実行時間が、指定された各ＶＳＳＤのＮＡＮＤ処理実行時間の上限値に収まるように各ＶＳＳＤに向けたコマンドそれぞれを実行する
ＶＳＳＤの性能に関するパラメータの例には、ホスト２と各ＶＳＳＤとの間のバンド幅（ホスト側アクセスバンド幅）も含まれる。
【００７９】
ホスト２は、ホスト２との通信のためのバンド幅をＶＳＳＤ毎に指定することができる。例えば、ホスト２とＳＳＤ３とを接続するインタフェースがＰＣＩｅである場合、ホスト２とＳＳＤ３との間の最大バンド幅は、３．２Ｇｂｐｓである。いま、３つのＶＳＳＤ＃１、＃２、＃３をＳＳＤ３内に作成する場合を想定する。例えば、ホスト２は、２Ｇｂｐｓのバンド幅をＶＳＳＤ＃１とホスト２（ＶＳＳＤ＃１に関連付けられた仮想マシン＃１）との間のバンド幅として指定し、１．２Ｇｂｐｓのバンド幅をＶＳＳＤ＃２とホスト２（ＶＳＳＤ＃２に関連付けられた仮想マシン＃２）との間のバンド幅として指定し、１Ｇｂｐｓのバンド幅をＶＳＳＤ＃３とホスト２（ＶＳＳＤ＃３に関連付けられた仮想マシン＃３）との間のバンド幅として指定してもよい。
【００８０】
ホスト側アクセスバンド幅制御部２５は、ホスト２との通信のためのバンド幅をＶＳＳＤ毎に指定するホスト２からの要求に基づいて、ＶＳＳＤ毎に、ホスト２と通信のためのバンド幅を設定する。この場合、ホスト側アクセスバンド幅制御部２５は、各ＶＳＳＤとホスト２との間の実際のアクセスバンド幅が、指定された各ＶＳＳＤのホスト側アクセスバンド幅に収まるように各ＶＳＳＤに向けたコマンドそれぞれを実行する。
【００８１】
例えば、ホストインタフェース１１（例えばＰＣＩｅコントローラ）は、ホスト２と連携することによって、一つのＶＳＳＤと一つの仮想マシンとの間のパスを介した伝送レートを制御してもよい。あるいは、コントローラ４は、ホスト２のメモリ上に置かれた複数のＶＳＳＤに対応する複数のコマンド発行キューからのコマンドを取得するレートを、個々のＶＳＳＤ毎に制御してもよい。あるいは、コントローラ４は、ホスト２から受信されるコマンドが格納されるコマンドキュー内のコマンドを実行するレートを、個々のＶＳＳＤ毎に制御してもよい。
【００８２】
ＶＳＳＤの性能に関するパラメータの例には、個々のＶＳＳＤの管理データの格納のために使用可能なＤＲＡＭ６のメモリ資源量も含まれる。例えば、複数のＶＳＳＤ（ＶＳＳＤ＃１、ＶＳＳＤ＃２、…ＶＳＳＤ＃ｎ）が作成された場合には、ＤＲＡＭ６においては、これら複数のＶＳＳＤに対応する複数のメモリ領域３１、３２、…３７が確保される。
【００８３】
メモリ領域３１には、ＶＳＳＤ＃１用の管理データの少なくとも一部が格納される。ＶＳＳＤ＃１用の管理データには、ＶＳＳＤ＃１用のルックアップテーブル（論理物理アドレス変換テーブル）３１Ｃが含まれる。メモリ領域３１は、ＮＡＮＤ型フラッシュメモリ５内のルックアップテーブル３１Ｃの少なくとも一部を格納するキャッシュ領域として機能する。したがって、メモリ領域３１のサイズが大きいほど、キャッシュヒット率が向上し、ＶＳＳＤ＃１に対するアクセス速度が速くなる。また、メモリ領域３１は、ホスト２からのＶＳＳＤ＃１に向けたライトデータを一時的に格納するためのライトバッファ３１Ａ、およびＶＳＳＤ＃１からリードされたデータを一時的に格納するためのリードバッファ３１Ｂを含んでもよい。
【００８４】
メモリ領域３２には、ＶＳＳＤ＃２用の管理データの少なくとも一部が格納される。ＶＳＳＤ＃２用の管理データには、ＶＳＳＤ＃２用のルックアップテーブル（論理物理アドレス変換テーブル）３２Ｃが含まれる。メモリ領域３２は、ＮＡＮＤ型フラッシュメモリ５内のルックアップテーブル３２Ｃの少なくとも一部を格納するキャッシュ領域として機能する。したがって、メモリ領域３２のサイズが大きいほど、キャッシュヒット率が向上し、ＶＳＳＤ＃２に対するアクセス速度が速くなる。また、メモリ領域３２は、ホスト２からのＶＳＳＤ＃２に向けたライトデータを一時的に格納するためのライトバッファ３２Ａ、およびＶＳＳＤ＃２からリードされたデータを一時的に格納するためのリードバッファ３２Ｂを含んでもよい。
【００８５】
メモリ領域３７には、ＶＳＳＤ＃ｎ用の管理データの少なくとも一部が格納される。ＶＳＳＤ＃ｎ用の管理データには、ＶＳＳＤ＃ｎ用のルックアップテーブル（論理物理アドレス変換テーブル）３７Ｃが含まれる。メモリ領域３７は、ＮＡＮＤ型フラッシュメモリ５内のルックアップテーブル３７Ｃの少なくとも一部を格納するキャッシュ領域として機能する。したがって、メモリ領域３７のサイズが大きいほど、キャッシュヒット率が向上し、ＶＳＳＤ＃ｎに対するアクセス速度が速くなる。また、メモリ領域３７は、ホスト２からのＶＳＳＤ＃ｎに向けたライトデータを一時的に格納するためのライトバッファ３７Ａ、およびＶＳＳＤ＃ｎからリードされたデータを一時的に格納するためのリードバッファ３７Ｂを含んでもよい。
【００８６】
メモリ資源量割り当て部２６は、ＤＲＡＭ６のメモリ資源の量をＶＳＳＤ毎に指定するホスト２からの要求に基づいて、ＤＲＡＭ６内の第１サイズのメモリ領域３１をＶＳＳＤ＃１の管理データの少なくとも一部を格納するメモリ領域として確保し、ＤＲＡＭ６内の第２サイズのメモリ領域３２をＶＳＳＤ＃２の管理データの少なくとも一部を格納するメモリ領域として確保する。
【００８７】
ＮＡＮＤインタフェース１３は、ＣＰＵ１２の制御の下、ＮＡＮＤ型フラッシュメモリ５を制御する。ＤＲＡＭインタフェース１４は、ＣＰＵ１２の制御の下、ＤＲＡＭ６を制御するように構成されたＤＲＡＭコントローラである。ＤＲＡＭ６の記憶領域の一部は、複数のＶＳＳＤそれぞれを管理するためのＶＳＳＤ管理テーブル３０の格納のために使用される。
【００８８】
図３は、従来型ＳＳＤを使用した仮想化環境と、仮想化支援機構３Ａを含むＳＳＤ３を使用した仮想化環境とを示す。
【００８９】
図３の左部は従来型ＳＳＤを使用した仮想化環境を示す。従来型ＳＳＤを使用した仮想化環境においては、ホスト（サーバ）側ＣＰＵ上で動作するソフトウェアには仮想ディスクサービスソフトウェアが含まれており、この仮想ディスクサービスソフトウェアが、エミュレーションによって物理ストレージ（ここではＳＳＤ）から仮想ディスク＃１、＃２、＃３を生成する。つまり、仮想ディスクサービスソフトウェアは、物理ストレージ（ここではＳＳＤ）の資源を論理的なストレージプールとして管理し、このストレージプールを使用して仮想ディスク＃１、＃２、＃３を生成し、これら仮想ディスク＃１、＃２、＃３を仮想マシン＃１、＃２、＃３にそれぞれに提供する。
【００９０】
図３の右部は仮想化支援機構３Ａを含むＳＳＤ３を使用した仮想化環境を示す。
【００９１】
仮想化支援機構３Ａを含むＳＳＤ３を使用した仮想化環境においては、ＳＳＤ３内の仮想化支援機構３ＡによってＶＳＳＤ５１、ＶＳＳＤ５２、ＶＳＳＤ５３がＳＳＤ３内に作成される。
【００９２】
これらＶＳＳＤ５１、ＶＳＳＤ５２、ＶＳＳＤ５３は、仮想ディスク＃１、＃２、＃３と同等の機能を有している。したがって、仮想ディスク＃１、＃２、＃３を作成するエミュレーション機能をホスト（サーバ）側ＣＰＵ上で動作するソフトウェアから取り除くことが可能となる。この結果、ホスト（サーバ）側ＣＰＵ上で動作するソフトウェアの構成を簡単化することができるので、ソフトウェア内の処理の遅延を短くでき、これによってホスト（サーバ）のＩ／Ｏ性能の向上を図ることができる。ＳＳＤ３の物理リソースは、仮想マシン４１、４２、４３によって共有される。仮想マシン４１、４２、４３は、デバイスドライバ４０を介してＳＳＤ３内のＶＳＳＤ５１、ＶＳＳＤ５２、ＶＳＳＤ５３を直接的にアクセスすることができる。
【００９３】
図４は、ＳＳＤ３内のＶＳＳＤの数とホスト（サーバ）側の仮想マシンの数との関係を示す。
【００９４】
図４では、ホスト（サーバ）側では６つの仮想マシン４１〜４６が実行され、ＳＳＤ３においては仮想マシン４１〜４６に対応する６つのＶＳＳＤ５１〜５６が作成されている場合が想定されている。仮想化支援機構３Ａを含むＳＳＤ３を使用した仮想化環境においては、ホスト（サーバ）側ＣＰＵ上で動作するソフトウェアの構成を簡単化することができるので、ホスト（サーバ）側の仮想マシンの数を容易に増やすことができる。これにより、一つのホスト（サーバ）当たりのユーザの数を容易に増やすことが可能となる。
【００９５】
次に、図５を参照して、ＳＳＤ３内に作成されるＶＳＳＤについて説明する。
【００９６】
ＳＳＤ３の仮想化支援機構３Ａは、仮想マシン４１、４２、…４７にそれぞれ対応する複数のＶＳＳＤ５１、５２、…５７を作成する。この場合、仮想化支援機構３Ａは、複数のＶＳＳＤ５１、５２、…５７それぞれに対応する複数の論理アドレス空間（ＬＢＡ空間）を管理することができる。
【００９７】
各ＶＳＳＤは、ネームスペースによって実現されてもよい。この場合、ＮＡＮＤ型フラッシュメモリ５の記憶領域を論理的に複数の領域に分割するために、複数のネームスペースが利用される。各ネームスペースは、ＮＡＮＤ型フラッシュメモリ５内の記憶領域であり、論理アドレス範囲（ＬＢＡ範囲）が割り当てられる。個々のネームスペースは、これらネームスペースの識別子によって識別される。各ＶＳＳＤがネームスペースによって実現された場合、各ＶＳＳＤには、ＬＢＡ範囲（ＬＢＡ０〜ＬＢＡｎ−１）が割り当てられる。ＬＢＡ範囲のサイズ（つまりＬＢＡの数）は、ＶＳＳＤ（ネームスペース）毎に可変である。各ＬＢＡ範囲は、ＬＢＡ０から始まる。
【００９８】
図６は、ＳＳＤ３によって実行されるＶＳＳＤ管理を示す。
【００９９】
ここでは、複数のＶＳＳＤが複数のネームスペースによって実現されている場合を想定する。ＶＳＳＤ５１には、０〜ｎ−１の論理アドレス空間（ＬＢＡ空間）Ａ１が割り当てられている。ＶＳＳＤ５２には、０〜ｎ−１の論理アドレス空間（ＬＢＡ空間）Ａ２が割り当てられている。同様に、ＶＳＳＤ５７には、０〜ｎ−１の論理アドレス空間（ＬＢＡ空間）Ａｎが割り当てられている。
【０１００】
本実施形態では、ルックアップテーブルＬＵＴは、ＶＳＳＤ毎に分割されている。つまり、ＶＳＳＤ５１〜５７に対応するルックアップテーブルＬＵＴ３１Ｃ〜３７ＣがＳＳＤ３のコントローラ４によって管理される。
【０１０１】
ルックアップテーブルＬＵＴ３１Ｃは、ＶＳＳＤ５１のＬＢＡ空間Ａ１とＮＡＮＤ型フラッシュメモリ５の物理アドレスとの間のマッピングを管理する。ルックアップテーブルＬＵＴ３２は、ＶＳＳＤ５２のＬＢＡ空間Ａ２とＮＡＮＤ型フラッシュメモリ５の物理アドレスとの間のマッピングを管理する。ルックアップテーブルＬＵＴ３７Ｃは、ＶＳＳＤ５７のＬＢＡ空間ＡｎとＮＡＮＤ型フラッシュメモリ５の物理アドレスとの間のマッピングを管理する。
【０１０２】
コントローラ４は、ルックアップテーブルＬＵＴ３１Ｃ〜３７Ｃを使用することによって、ＶＳＳＤ（記憶領域）毎に独立してガベージコレクションを行うことができる。あるＶＳＳＤのガベージコレクションにおいては、このＶＳＳＤに割り当てられている物理ブロックそれぞれからガベージコレクション対象の１以上の物理ブロックが選択され、この選択された各物理ブロック内の有効データが、このＶＳＳＤに割り当てられた物理ブロック（フリーブロック）にコピーされる。そして、ＶＳＳＤに対応するルックアップテーブルＬＵＴが更新されて、コピーされたデータに対応するＬＢＡそれぞれに正しい物理アドレスが関連付けられる。このＶＳＳＤ（記憶領域）毎に独立したガベージコレクションにより、異なるＶＳＳＤに関連付けられたデータがガベージコレクションによって同じ物理ブロックに格納されてしまうことを防止することができる。
【０１０３】
管理データ１００は、ＶＳＳＤ５１〜５７とこれらＶＳＳＤ５１〜５７に割り当てられた物理ブロックの個数との間の関係を示す情報を保持してもよい。
【０１０４】
本実施形態においては、ガベージコレクションによって生成されたフリーブロックは、ＶＳＳＤ５１〜５７間で共有されるフリーブロックプールに入れられる。これにより、フリーブロックそれぞれはＶＳＳＤ５１〜５７間で共有することができる。
【０１０５】
図７は、ＶＳＳＤ管理コマンドを示す。
【０１０６】
ＶＳＳＤ管理コマンドは、ＶＳＳＤの作成および削除を含むＶＳＳＤ管理のために使用されるコマンドである。ＶＳＳＤ管理コマンドは、以下のパラメータを含んでもよい。
【０１０７】
（１）作成（クリエイト）／削除（リムーブ）
（２）ｃａｐａｃｉｔｙ
（３）ｏｖｅｒ−ｐｒｏｖｉｓｉｏｎｉｎｇ
（４）ＮＡＮＤ処理実行時間
（５）メモリ資源量
（６）ＳＳＤ内書き込み総量
（７）書き込み要求総量
（８）ホスト側アクセスバンド幅
作成／削除のパラメータの値０ｈは、ＶＳＳＤの作成をＳＳＤ３に要求する。作成／削除のパラメータの値１ｈは、ＶＳＳＤの削除をＳＳＤ３に要求する。ＶＳＳＤの削除を要求する場合には、削除対象のＶＳＳＤの識別子（ＶＳＳＤＩＤ）を指定するパラメータがＶＳＳＤ管理コマンドに設定されてもよい。
【０１０８】
ｃａｐａｃｉｔｙ、ｏｖｅｒ−ｐｒｏｖｉｓｉｏｎｉｎｇ、ＮＡＮＤ処理実行時間、メモリ資源量、ＳＳＤ内書き込み総量、書き込み要求総量、ホスト側アクセスバンド幅は、ＶＳＳＤの容量／性能／可用性を自由に設定するためのパラメータである。ＶＳＳＤ管理コマンドは、これらパラメータの全てを指定することもできるし、これらパラメータの少なくとも一つを指定することもできる。
【０１０９】
ｃａｐａｃｉｔｙのパラメータは、作成対象のＶＳＳＤに割り当てるべき容量（ユーザ容量）を指定する。ユーザ容量は、上述したように、ユーザアクセス可能ＬＢＡスペースに相当する。このユーザ容量は、このＶＳＳＤに割り当てるべきＬＢＡの数に相当する。このユーザ容量はバイトによって指定されてもよいし、このＶＳＳＤに割り当てるべきＬＢＡの数によって指定されてもよい。
【０１１０】
ｏｖｅｒ−ｐｒｏｖｉｓｉｏｎｉｎｇのパラメータは、作成対象のＶＳＳＤに割り当てるべきオーバープロビジョニング容量を指定する。
【０１１１】
ＮＡＮＤ処理実行時間のパラメータは、ＮＡＮＤ型フラッシュメモリ５内の処理の実行時間の上限値、つまり単位時間当たりの作成対象ＶＳＳＤの消去、書き込みまたは読み出し動作の実行時間の上限値を指定する。
【０１１２】
メモリ資源量のパラメータは、作成対象のＶＳＳＤに割り当てるべきメモリ資源（ＤＲＡＭ６）の量を指定する。
【０１１３】
ＳＳＤ内書き込み総量のパラメータおよび書き込み要求総量のパラメータは、作成対象のＶＳＳＤに書き込み可能なデータの総量の上限値を指定するためのパラメータである。書き込み可能なデータの総量は、例えば、設定された期間（例えば、一日、一ヶ月、等）当たりに書き込み可能なデータの総量であってもよい。
【０１１４】
ホスト２は、作成対象のＶＳＳＤに書き込み可能なデータの総量の上限値を指定するために、ＳＳＤ内書き込み総量のパラメータおよび書き込み要求総量のパラメータの双方を指定してもよいし、ＳＳＤ内書き込み総量のパラメータおよび書き込み要求総量のパラメータの一方のみを指定してもよい。
【０１１５】
ＳＳＤ内書き込み総量のパラメータは、ホスト２から作成対象ＶＳＳＤに書き込み可能なデータの総量と、このＶＳＳＤのガベージコレクションによって当該ＶＳＳＤに書き込み可能なデータの総量との合計の上限値を指定する。
【０１１６】
書き込み要求総量のパラメータは、ホスト２から作成対象のＶＳＳＤに書き込み可能なデータの総量の上限値を指定する。
【０１１７】
ホスト側アクセスバンド幅のパラメータは、ホスト２との通信のために使用されるホスト２と作成対象ＶＳＳＤとの間のバンド幅を指定する。
【０１１８】
図８は、記憶領域（ＶＳＳＤ）管理テーブル３０を示す。
【０１１９】
ＶＳＳＤ管理テーブル３０は、ＶＳＳＤ作成部２１によって作成されたＶＳＳＤ５１〜５７に対応する複数のエントリを含む。各エントリは、「ＶＳＳＤＩＤ」フィールド、「ｃａｐａｃｉｔｙ」フィールド、「ｏｖｅｒ−ｐｒｏｖｉｓｉｏｎｉｎｇ」フィールド、「ＮＡＮＤ処理実行時間」フィールド、「メモリ資源量」フィールド、「ＳＳＤ内書き込み総量」フィールド、「書き込み要求総量」フィールド、「ホスト側アクセスバンド幅」フィールドを含む。
【０１２０】
「ＶＳＳＤＩＤ」フィールドには、対応するＶＳＳＤの識別子（ＶＳＳＤＩＤ）が格納される。
【０１２１】
「ｃａｐａｃｉｔｙ」フィールドには、対応するＶＳＳＤのｃａｐａｃｉｔｙ（ユーザ容量）が格納される。
【０１２２】
「ｏｖｅｒ−ｐｒｏｖｉｓｉｏｎｉｎｇ」フィールドには、対応するＶＳＳＤのオーバープロビジョニング容量が格納される。
【０１２３】
「ＮＡＮＤ処理実行時間」フィールドには、対応するＶＳＳＤの処理実行時間の上限値が格納される。
【０１２４】
「メモリ資源量」フィールドには、対応するＶＳＳＤに割り当てるべきＤＲＡＭ６のメモリ資源の量が格納される。
【０１２５】
「ＳＳＤ内書き込み総量」フィールドには、対応するＶＳＳＤに書き込み可能なデータの総量の上限値が格納される。
【０１２６】
「書き込み要求総量」フィールドには、ホスト２によって対応するＶＳＳＤに書き込み可能なデータの総量の上限値が格納される。
【０１２７】
「ホスト側アクセスバンド幅」フィールドには、対応するＶＳＳＤとホスト２との間のバンド幅が格納される。
【０１２８】
次に、図９を参照して、ユーザ容量とオーバープロビジョニング容量との組をＶＳＳＤ毎に指定するホスト２からの要求に基づいて、個々のＶＳＳＤにユーザ容量およびオーバープロビジョニング容量を割り当てる動作を説明する。
【０１２９】
コントローラ４のＶＳＳＤ作成部２１は、ユーザ容量とオーバープロビジョニング容量との組をＶＳＳＤ毎に指定するホスト２からの要求に基づいて、指定されたユーザ容量と指定されたオーバープロビジョニング容量との合計の容量を個々のＶＳＳＤに割り当てる。
【０１３０】
ホスト２が、あるＶＳＳＤ（ここではＶＳＳＤ＃ｎ）の作成をＳＳＤ３に要求する場合、ホスト２は、このＶＳＳＤ＃ｎ用に割り当てるべきユーザ容量とこのＶＳＳＤ＃ｎ用に割り当てるべきオーバープロビジョニング容量とを指定する。コントローラ４のＶＳＳＤ作成部２１は、指定されたユーザ容量と指定されたオーバープロビジョニング容量との合計の容量をこのＶＳＳＤ＃ｎ用に割り当てる。図９に示すように、割り当てられたユーザ容量とオーバープロビジョニング容量との合計がこのＶＳＳＤ＃ｎの総容量となる。常時したように、ユーザ容量に対するオーバープロビジョニング容量の割合が大きいほど、このＶＳＳＤ＃ｎの性能および耐久性が向上する。ホスト２は、ｃａｐａｃｉｔｙのパラメータおよびｏｖｅｒ−ｐｒｏｖｉｓｉｏｎｉｎｇのパラメータを使用することによって、ユーザの要件に合った性能および耐久性を有するＶＳＳＤの作成をＳＳＤ３に要求することができる。ＳＳＤ３は、ｃａｐａｃｉｔｙのパラメータによって指定されるユーザ容量とｏｖｅｒ−ｐｒｏｖｉｓｉｏｎｉｎｇのパラメータによって指定されるオーバープロビジョニング容量との合計の容量をＶＳＳＤに割り当てることによって、ユーザの要件に合った性能および耐久性を有するＶＳＳＤを作成する。
【０１３１】
なお、ホスト２は、ＶＳＳＤ＃ｎに割り当てるべき物理ブロックの個数を、ＶＳＳＤ＃ｎのオーバープロビジョニング容量として指定してもよい。この場合においては、ＶＳＳＤ作成部２１は、指定された物理ブロックの個数をＶＳＳＤ＃ｎ用に確保（予約）し、これら物理ブロックの個数に対応する容量をＶＳＳＤ＃ｎにその総容量として割り当ててもよい。総容量からユーザ容量を引くことによって得られる残り容量が、オーバープロビジョニング容量となる。
【０１３２】
図１０は、コントローラ４によって実行される、ＮＡＮＤ処理実行時間制御処理を示す。
【０１３３】
ＮＡＮＤ型フラッシュメモリ５においては、ブロック単位の消去動作、ページ単位の書き込み動作、およびページ単位の読み出し動作が実行される。ＳＳＤ３のコントローラ４は、ホスト２から受信されるリード要求（リードコマンド）／ライト要求（ライトコマンド）に従ってＮＡＮＤ型フラッシュメモリ５の読み出し動作および書き込み動作を制御する。また、コントローラ４は、ＮＡＮＤ型フラッシュメモリ５のガベージコレクション（ＧＣ）を実行するために、ＮＡＮＤ型フラッシュメモリ５の消去動作、書き込み動作、読み出し動作を制御する。
【０１３４】
本実施形態では、ホスト２からのデータを書き込み先ブロックに書き込む書き込み動作（ホスト書き込み動作）とガベージコレクションためのデータコピー動作は同期して進行される。例えば、ある設定された量のデータコピーが完了すると、ある設定された量のホスト書き込み動作が許可される。また、ホスト２からのデータが書き込まれる書き込み先ブロックがデータで満たされると、ＳＳＤ３内では、あるフリーブロックの消去動作が実行され、このフリーブロックが新たな書き込み先ブロックとして割り当てられる。したがって、ホスト２からのコマンドそれぞれの実行の進行に応じて、必要なＮＡＮＤ型フラッシュメモリ５の消去動作、書き込み動作、読み出し動作がそれぞれ実行される。
【０１３５】
ＮＡＮＤ型フラッシュメモリ５の消去動作に要される消去時間は、例えば２ｍｓである。ＮＡＮＤ型フラッシュメモリ５の読み出し動作に要されるリード時間は、例えば１００μｓである。ＮＡＮＤ型フラッシュメモリ５の書き込み動作に要されるプログラム時間は、例えば１ｍｓである。
【０１３６】
コントローラ４は、ホスト２からＶＳＳＤ毎に指定されたＮＡＮＤ処理実行時間に基づいて、単位時間当たりのＮＡＮＤ型フラッシュメモリ５の消去、書き込みまたは読み出し動作の実行時間の上限値をＶＳＳＤ毎に管理する。
【０１３７】
単位時間当たりのＮＡＮＤ型フラッシュメモリ５の消去、書き込みまたは読み出し動作の実行時間の上限値とは、単位時間（例えば１秒）当たりに、ある一つのＮＡＮＤ型フラッシュメモリチップを占有することが許可される時間（ＮＡＮＤ処理実行時間）を意味する。
【０１３８】
図１０では、ホスト２によって指定されたＶＳＳＤ＃１用のＮＡＮＤ処理実行時間が１００ｍｓであり、ホスト２によって指定されたＶＳＳＤ＃２用のＮＡＮＤ処理実行時間が２００ｍｓであり、ホスト２によって指定されたＶＳＳＤ＃ｎ用のＮＡＮＤ処理実行時間が１５０ｍである場合が想定されている。
【０１３９】
ＶＳＳＤ＃１に関しては、１サイクル（例えば１秒）当たりの消去、書き込みまたは読み出し動作の総実行時間の上限は最大１００ｍｓまでに制限される。この場合、ＶＳＳＤ＃１に関しては、例えば、１回の消去動作と９８回の書き込み動作を１サイクル（１秒）当たりに実行することができる。あるいは、例えば、１回の消去動作と９８０回のリード動作とを１サイクル（１秒）当たりに実行することもできる。
【０１４０】
コントローラ４のＮＡＮＤ処理実行時間制御部２４は、１サイクル（例えば１秒）当たりのＶＳＳＤ＃１の消去、書き込みまたは読み出し動作の実行時間が１００ｍｓの範囲内に収まるように、ホスト２からのＶＳＳＤ＃１に向けたコマンドそれぞれの実行を制御する。換言すれば、ＮＡＮＤ処理実行時間制御部２４は、１サイクル（例えば１秒）当たりのＶＳＳＤ＃１の消去、書き込みまたは読み出し動作の実行時間が１００ｍｓの範囲内に収まるように、キューイングされているＶＳＳＤ＃１向けのコマンド群内の所定数のコマンドそれぞれを１サイクル当たりに実行する。
【０１４１】
例えば、ＮＡＮＤ処理実行時間制御部２４は、１００ｍｓの実行時間に対応する１００個のトークンをＶＳＳＤ＃１にサイクル毎に配布してもよい。ＶＳＳＤ＃１の１回の消去動作が実行される度に、消去時間に対応する数のトークン（例えば２０個のトークン）がＶＳＳＤ＃１から回収される。また、ＶＳＳＤ＃１の１回の読み出し動作が実行される度に、読み出し時間に対応する数のトークン（例えば１個のトークン）がＶＳＳＤ＃１から回収される。また、ＶＳＳＤ＃１の１回の書き込み動作が実行される度に、プログラム時間に対応する数のトークン（例えば１０個のトークン）がＶＳＳＤ＃１から回収される。ＶＳＳＤ＃１用の残りトークンが無くなると、ＶＳＳＤ＃１向けのコマンドの実行は停止される。そして、次のサイクルの開始時に、ＮＡＮＤ処理実行時間制御部２４は、１００ｍｓの実行時間に対応する１００個のトークンをＶＳＳＤ＃１に再び配布する。これにより、１サイクル（例えば１秒）当たりのＶＳＳＤ＃１の消去、書き込みまたは読み出し動作の実行時間を１００ｍｓの範囲内に収まるように、キューイングされているＶＳＳＤ＃１向けのコマンド群の実行タイミングをスケジューリングすることができる。
【０１４２】
ＶＳＳＤ＃２に関しては、１サイクル（例えば１秒）当たりの消去、書き込みまたは読み出し動作の総実行時間の上限は最大２００ｍｓまでに制限される。コントローラ４のＮＡＮＤ処理実行時間制御部２４は、１サイクル（例えば１秒）当たりのＶＳＳＤ＃２の消去、書き込みまたは読み出し動作の実行時間が２００ｍｓの範囲内に収まるように、ホスト２からのＶＳＳＤ＃２に向けたコマンドそれぞれの実行を制御する。換言すれば、ＮＡＮＤ処理実行時間制御部２４は、１サイクル（例えば１秒）当たりのＶＳＳＤ＃２の消去、書き込みまたは読み出し動作の実行時間が２００ｍｓの範囲内に収まるように、キューイングされているＶＳＳＤ＃２向けのコマンド群内の所定数のコマンドそれぞれを１サイクル当たりに実行する。
【０１４３】
例えば、ＮＡＮＤ処理実行時間制御部２４は、２００ｍｓの実行時間に対応する２００個のトークンをＶＳＳＤ＃２にサイクル毎に配布してもよい。ＶＳＳＤ＃２の１回の消去動作が実行される度に、消去時間に対応する数のトークン（例えば２０個のトークン）がＶＳＳＤ＃２から回収される。また、ＶＳＳＤ＃２の１回の読み出し動作が実行される度に、読み出し時間に対応する数のトークン（例えば１個のトークン）がＶＳＳＤ＃２から回収される。また、ＶＳＳＤ＃２の１回の書き込み動作が実行される度に、プログラム時間に対応する数のトークン（例えば１０個のトークン）がＶＳＳＤ＃２から回収される。ＶＳＳＤ＃２用の残りトークンが無くなると、ＶＳＳＤ＃２向けのコマンドの実行は停止される。そして、次のサイクルの開始時に、ＮＡＮＤ処理実行時間制御部２４は、２００ｍｓの実行時間に対応する２００個のトークンをＶＳＳＤ＃２に再び配布する。これにより、１サイクル（例えば１秒）当たりのＶＳＳＤ＃２の消去、書き込みまたは読み出し動作の実行時間が２００ｍｓの範囲内に収まるように、キューイングされているＶＳＳＤ＃２向けのコマンド群を実行することができる。
【０１４４】
ＶＳＳＤ＃ｎに関しては、１サイクル（例えば１秒）当たりの消去、書き込みまたは読み出し動作の総実行時間の上限は最大１５０ｍｓまでに制限される。コントローラ４のＮＡＮＤ処理実行時間制御部２４は、１サイクル（例えば１秒）当たりのＶＳＳＤ＃ｎの消去、書き込みまたは読み出し動作の実行時間が１５０ｍｓの範囲内に収まるように、ホスト２からのＶＳＳＤ＃ｎに向けたコマンドそれぞれの実行を制御する。換言すれば、ＮＡＮＤ処理実行時間制御部２４は、１サイクル（例えば１秒）当たりのＶＳＳＤ＃ｎの消去、書き込みまたは読み出し動作の実行時間が１５０ｍｓの範囲内に収まるように、キューイングされているＶＳＳＤ＃ｎ向けのコマンド群内の所定数のコマンドそれぞれを１サイクル当たりに実行する。
【０１４５】
例えば、ＮＡＮＤ処理実行時間制御部２４は、１５０ｍｓの実行時間に対応する１５０個のトークンをＶＳＳＤ＃ｎにサイクル毎に配布してもよい。ＶＳＳＤ＃ｎの１回の消去動作が実行される度に、消去時間に対応する数のトークン（例えば２０個のトークン）がＶＳＳＤ＃ｎから回収される。また、ＶＳＳＤ＃２の１回の読み出し動作が実行される度に、読み出し時間に対応する数のトークン（例えば１個のトークン）がＶＳＳＤ＃ｎから回収される。また、ＶＳＳＤ＃ｎの１回の書き込み動作が実行される度に、プログラム時間に対応する数のトークン（例えば１０個のトークン）がＶＳＳＤ＃ｎから回収される。ＶＳＳＤ＃ｎ用の残りトークンが無くなると、ＶＳＳＤ＃ｎ向けのコマンドの実行は停止される。そして、次のサイクルの開始時に、ＮＡＮＤ処理実行時間制御部２４は、１５０ｍｓの実行時間に対応する１５０個のトークンをＶＳＳＤ＃ｎに再び配布する。これにより、１サイクル（例えば１秒）当たりのＶＳＳＤ＃ｎの消去、書き込みまたは読み出し動作の実行時間が１５０ｍｓの範囲内に収まるように、キューイングされているＶＳＳＤ＃ｎ向けのコマンド群を実行することができる。
【０１４６】
上述のトークン配布および回収処理は、ホスト２のメモリ上の複数のコマンドキュー（コマンド発行キュー）からのコマンドを取得するレートを個々のＶＳＳＤ毎に制御するために使用されてもよい。この場合、ホスト２のメモリ上には、複数のＶＳＳＤに対応する複数のコマンドキュー（コマンド発行キュー）が配置される。仮想マシン＃１からのコマンドはＶＳＳＤ＃１に対応するコマンドキューに置かれ、仮想マシン＃２からのコマンドはＶＳＳＤ＃２に対応するコマンドキューに置かれ、仮想マシン＃ｎからのコマンドはＶＳＳＤ＃ｎに対応するコマンドキューに置かれる。トークン配布および回収処理では、ＶＳＳＤそれぞれに対応する処理実行時間の上限値に対応する個数のトークンがこれらＶＳＳＤに分配される。個々のＶＳＳＤにおいては、このＶＳＳＤ向けのコマンドがホスト２のメモリ上のコマンドキューから取得されて実行される。このコマンドの実行に伴って実行することが必要となるＮＡＮＤ動作（書き込み動作、読み出し動作、または消去動作）の実行時間の長さに応じた数のトークンが、このＶＳＳＤから回収される。残りトークンが無くなると、ホスト２のメモリ上のコマンドキューからのこのＶＳＳＤ向けのコマンドの取得及び実行は停止される。そして、次のサイクルの開始時に、ＶＳＳＤそれぞれに対応する処理実行時間の上限値に対応する個数のトークンがこれらＶＳＳＤに再び分配される。
【０１４７】
ホスト側アクセスバンド幅制御部２５も、上述のトークン配布および回収処理と同様の仕組みを使用することによって、各ＶＳＳＤに対するバンド幅が指定されたホスト側アクセスバンド幅に収まれように各ＶＳＳＤ向けのコマンドそれぞれを実行してもよい。
【０１４８】
図１１は、ＶＳＳＤ作成処理のシーケンスを示す。
【０１４９】
ＶＳＳＤ作成部２１は、ホスト２から受信した最初のＶＳＳＤ管理コマンドに基づいてＶＳＳＤ５１（ＶＳＳＤ＃１）を作成し、このＶＳＳＤ管理コマンドによって指定されたＶＳＳＤ５１（ＶＳＳＤ＃１）用の設定パラメータをＶＳＳＤ管理テーブル３０に格納する（ステップＳ１０１）。
【０１５０】
次に、ＶＳＳＤ作成部２１は、ＶＳＳＤ管理テーブル３０を参照し、ＮＡＮＤ型フラッシュメモリ５の全容量の中から、ｃａｐａｃｉｔｙのパラメータによって指定されるユーザ容量とｏｖｅｒ−ｐｒｏｖｉｓｉｏｎｉｎｇのパラメータによって指定されるオーバープロビジョニング容量との合計の容量を確保し、その確保された容量をＶＳＳＤ５１（ＶＳＳＤ＃１）に割り当てる（ステップＳ１０２）。ステップＳ１０２では、ＶＳＳＤ作成部２１は、ｏｖｅｒ−ｐｒｏｖｉｓｉｏｎｉｎｇのパラメータによって指定された個数の物理ブロックを確保（予約）し、この確保（予約）された数の物理ブロックをＶＳＳＤ５１（ＶＳＳＤ＃１）に割り当ててもよい。
【０１５１】
続いて、コントローラ４のメモリ資源量割り当て部２６は、ＶＳＳＤ管理テーブル３０を参照し、ＶＳＳＤ５１（ＶＳＳＤ＃１）のための管理データの格納のためのメモリ領域（ＶＳＳＤ＃１用メモリ領域３１）をＤＲＡＭ６上に確保し、その確保したメモリ領域（ＶＳＳＤ＃１用メモリ領域３１）をＶＳＳＤ５１（ＶＳＳＤ＃１）に割り当てる（ステップＳ１０３）。
【０１５２】
ステップＳ１０１〜ステップＳ１０３の処理が完了した後、コントローラ４は、ホスト２にコマンド完了のレスポンスを返す。コマンド完了のレスポンスには、ＶＳＳＤ＃１のＩＤが含まれている。ホスト２においては、仮想マシン４１は、このＶＳＳＤ＃１のＩＤを含むコマンドをＳＳＤ３に送信する。ＶＳＳＤ＃１のＩＤを含むコマンドの受信に応答して、コントローラ４は、ＶＳＳＤ＃１に対するアクセスを実行する。
【０１５３】
ＶＳＳＤ作成部２１は、２番目にホスト２から受信したＶＳＳＤ管理コマンドに基づいてＶＳＳＤ５２（ＶＳＳＤ＃２）を作成し、ＶＳＳＤ５２（ＶＳＳＤ＃２）用の設定パラメータをＶＳＳＤ管理テーブル３０に格納する（ステップＳ１０４）。
【０１５４】
次に、ＶＳＳＤ作成部２１は、ＶＳＳＤ管理テーブル３０を参照し、ＮＡＮＤ型フラッシュメモリ５の全容量の中から、ｃａｐａｃｉｔｙのパラメータによって指定されるユーザ容量とｏｖｅｒ−ｐｒｏｖｉｓｉｏｎｉｎｇのパラメータによって指定されるオーバープロビジョニング容量との合計の容量を確保し、その確保された容量をＶＳＳＤ５２（ＶＳＳＤ＃２）に割り当てる（ステップＳ１０５）。ステップＳ１０５では、ＶＳＳＤ作成部２１は、ｏｖｅｒ−ｐｒｏｖｉｓｉｏｎｉｎｇのパラメータによって指定された個数の物理ブロックを確保（予約）し、この確保（予約）された数の物理ブロックをＶＳＳＤ５２（ＶＳＳＤ＃２）に割り当ててもよい。
【０１５５】
続いて、メモリ資源量割り当て部２６は、ＶＳＳＤ管理テーブル３０を参照し、ＶＳＳＤ５２（ＶＳＳＤ＃２）のための管理データの格納のためのメモリ領域（ＶＳＳＤ＃２用メモリ領域３２）をＤＲＡＭ６上に確保し、その確保したメモリ領域（ＶＳＳＤ＃２用メモリ領域３２）をＶＳＳＤ５２（ＶＳＳＤ＃２）に割り当てる（ステップＳ１０６）。
【０１５６】
ステップＳ１０４〜ステップＳ１０６の処理が完了した後、コントローラ４は、ホスト２にコマンド完了のレスポンスを返す。コマンド完了のレスポンスには、ＶＳＳＤ＃２のＩＤが含まれている。ホスト２においては、仮想マシン４２は、このＶＳＳＤ＃２のＩＤを含むコマンドをＳＳＤ３に送信する。ＶＳＳＤ＃２のＩＤを含むコマンドの受信に応答して、コントローラ４は、ＶＳＳＤ＃２に対するアクセスを実行する。
【０１５７】
同様に、ＶＳＳＤ作成部２１は、ｎ番目にホスト２から受信したＶＳＳＤ管理コマンドに基づいてＶＳＳＤ５７（ＶＳＳＤ＃ｎ）を作成し、ＶＳＳＤ５７（ＶＳＳＤ＃ｎ）用の設定パラメータをＶＳＳＤ管理テーブル３０に格納する（ステップＳ１０７）。
【０１５８】
次に、ＶＳＳＤ作成部２１は、ＶＳＳＤ管理テーブル３０を参照し、ＮＡＮＤ型フラッシュメモリ５の全容量の中から、ｃａｐａｃｉｔｙのパラメータによって指定されるユーザ容量とｏｖｅｒ−ｐｒｏｖｉｓｉｏｎｉｎｇのパラメータによって指定されるオーバープロビジョニング容量との合計の容量を確保し、その確保された容量をＶＳＳＤ５７（ＶＳＳＤ＃ｎ）に割り当てる（ステップＳ１０８）。ステップＳ１０８では、ＶＳＳＤ作成部２１は、ｏｖｅｒ−ｐｒｏｖｉｓｉｏｎｉｎｇのパラメータによって指定された個数の物理ブロックを確保（予約）し、この確保（予約）された数の物理ブロックをＶＳＳＤ５７（ＶＳＳＤ＃ｎ）に割り当ててもよい。
【０１５９】
続いて、メモリ資源量割り当て部２６は、ＶＳＳＤ管理テーブル３０を参照し、ＶＳＳＤ５７（ＶＳＳＤ＃ｎ）のための管理データの格納のためのメモリ領域（ＶＳＳＤ＃ｎ用メモリ領域３７）をＤＲＡＭ６上に確保し、その確保したメモリ領域（ＶＳＳＤ＃ｎ用メモリ領域３７）をＶＳＳＤ５７（ＶＳＳＤ＃ｎ）に割り当てる（ステップＳ１０９）。
【０１６０】
ステップＳ１０７〜ステップＳ１０９の処理が完了した後、コントローラ４は、ホスト２にコマンド完了のレスポンスを返す。コマンド完了のレスポンスには、ＶＳＳＤ＃ｎのＩＤが含まれている。ホスト２においては、仮想マシン４７は、このＶＳＳＤ＃ｎのＩＤを含むコマンドをＳＳＤ３に送信する。ＶＳＳＤ＃ｎのＩＤを含むコマンドの受信に応答して、コントローラ４は、ＶＳＳＤ＃ｎに対するアクセスを実行する。
【０１６１】
次に、図１２を参照して、コントローラ４によって実行されるライトデータ量カウント処理を説明する。
【０１６２】
コントローラ４は、ホスト２によって書き込まれたデータの量をカウントするためのカウンタとガベージコレクション動作によって書き込まれたデータの量をカウントするためのカウンタとの２種類のカウンタを、ＶＳＳＤ毎に備える。
【０１６３】
ホスト２からのＶＳＳＤ５１（ＶＳＳＤ＃１）向けのライトデータはライトバッファ３１Ａに書き込まれる。カウンタ６１は、ライトバッファ３１ＡからＶＳＳＤ５１（ＶＳＳＤ＃１）に書き込まれるデータの量をカウントする。カウンタ６２は、ＶＳＳＤ５１（ＶＳＳＤ＃１）のガベージコレクションによってＶＳＳＤ５１（ＶＳＳＤ＃１）に書き込まれるデータの総量をカウントする。ＶＳＳＤ５１（ＶＳＳＤ＃１）のガベージコレクションによって生成されるフリーブロックは、ＶＳＳＤ間で共有されるフリーブロックプール６０に置かれてもよい。
【０１６４】
ホスト２からのＶＳＳＤ５２（ＶＳＳＤ＃２）向けのライトデータはライトバッファ３２Ａに書き込まれる。カウンタ６３は、ライトバッファ３２ＡからＶＳＳＤ５２（ＶＳＳＤ＃２）に書き込まれるデータの量をカウントする。カウンタ６４は、ＶＳＳＤ５２（ＶＳＳＤ＃２）のガベージコレクションによってＶＳＳＤ５２（ＶＳＳＤ＃２）に書き込まれるデータの総量をカウントする。ＶＳＳＤ５２（ＶＳＳＤ＃２）のガベージコレクションによって生成されるフリーブロックは、ＶＳＳＤ間で共有されるフリーブロックプール６０に置かれてもよい。
【０１６５】
ホスト２からのＶＳＳＤ５７（ＶＳＳＤ＃ｎ）向けのライトデータはライトバッファ３７Ａに書き込まれる。カウンタ６５は、ライトバッファ３７ＡからＶＳＳＤ５７（ＶＳＳＤ＃ｎ）に書き込まれるデータの量をカウントする。カウンタ６６は、ＶＳＳＤ５７（ＶＳＳＤ＃ｎ）のガベージコレクションによってＶＳＳＤ５７（ＶＳＳＤ＃ｎ）に書き込まれるデータの総量をカウントする。ＶＳＳＤ５７（ＶＳＳＤ＃ｎ）のガベージコレクションによって生成されるフリーブロックは、ＶＳＳＤ間で共有されるフリーブロックプール６０に置かれてもよい。
【０１６６】
図１３のフローチャートは、コントローラ４によって実行されるライトデータ量カウント処理の手順を示す。
【０１６７】
ＳＳＤ３のコントローラ４がホスト２からライトコマンドを受信した時、コントローラ４は、ライトコマンド内に含まれるＶＳＳＤＩＤに基づいて、ライトデータが書き込まれるべき対象ＶＳＳＤを決定する。そして、コントローラ４は、ライトデータを対象ＶＳＳＤに書き込むと共に（ステップＳ２０１、ステップＳ２０３、ステップＳ２０５）、書き込まれるデータの量をカウントする（ステップＳ２０２、ステップＳ２０４、ステップＳ２０６）。
【０１６８】
ＶＳＳＤ５１（ＶＳＳＤ＃１）へのデータの書き込みが行われる場合（ステップＳ２０１のＹＥＳ）、コントローラ４は、ＶＳＳＤ５１（ＶＳＳＤ＃１）へデータを書き込むと共に、カウンタ６１を使用して、ＶＳＳＤ５１（ＶＳＳＤ＃１）に書き込まれたデータの量をカウントする（ステップＳ２０２）。
【０１６９】
ＶＳＳＤ５２（ＶＳＳＤ＃２）へのデータの書き込みが行われる場合（ステップＳ２０３のＹＥＳ）、コントローラ４は、ＶＳＳＤ５２（ＶＳＳＤ＃２）へデータを書き込むと共に、カウンタ６３を使用して、ＶＳＳＤ５２（ＶＳＳＤ＃２）に書き込まれたデータの量をカウントする（ステップＳ２０４）。
【０１７０】
ＶＳＳＤ５７（ＶＳＳＤ＃ｎ）へのデータの書き込みが行われる場合（ステップＳ２０５のＹＥＳ）、コントローラ４は、ＶＳＳＤ５７（ＶＳＳＤ＃ｎ）へデータを書き込むと共に、カウンタ６５を使用して、ＶＳＳＤ５７（ＶＳＳＤ＃ｎ）に書き込まれたデータの量をカウントする（ステップＳ２０６）。
【０１７１】
また、ガベージコレクションが実行されると、コントローラ４は、ガベージコレクションによって書き込まれるデータの量をＶＳＳＤ毎にカウントする。
【０１７２】
ＶＳＳＤ５１（ＶＳＳＤ＃１）のガベージコレクションが実行される場合（ステップＳ２０７のＹＥＳ）、コントローラ４は、カウンタ６２を使用して、このガベージコレクションによってＶＳＳＤ５１（ＶＳＳＤ＃１）に書き込まれるデータの量をカウントする（ステップＳ２１０）。
【０１７３】
ＶＳＳＤ５２（ＶＳＳＤ＃２）のガベージコレクションが実行される場合（ステップＳ２０８のＹＥＳ）、コントローラ４は、カウンタ６４を使用して、このガベージコレクションによってＶＳＳＤ５２（ＶＳＳＤ＃２）に書き込まれるデータの量をカウントする（ステップＳ２１１）。
【０１７４】
ＶＳＳＤ５７（ＶＳＳＤ＃ｎ）のガベージコレクション動作が実行される場合（ステップＳ２０９のＹＥＳ）、コントローラ４は、カウンタ６６を使用して、このガベージコレクションによってＶＳＳＤ５７（ＶＳＳＤ＃ｎ）に書き込まれるデータの量をカウントする（ステップＳ２１２）。
【０１７５】
図１４のフローチャートは、コントローラ４によって実行される、個々のＶＳＳＤに書き込まれるデータの総量（書き込み総量）を制限する処理の手順を示す。
【０１７６】
コントローラ４の書き込み制限部２３は、ＶＳＳＤ５１（ＶＳＳＤ＃１）の書き込み総量の測定値が、ＶＳＳＤ５１（ＶＳＳＤ＃１）用の書き込み総量の上限値に達したか否かを判定する（ステップＳ３０１）。ＶＳＳＤ５１（ＶＳＳＤ＃１）の書き込み総量の測定値が、ＶＳＳＤ５１（ＶＳＳＤ＃１）用の書き込み総量の上限値に達した場合（ステップＳ３０１のＹＥＳ）、書き込み制限部２３は、ホスト２からＶＳＳＤ５１へのデータの書き込みを制限する（ステップＳ３０２）。ステップＳ３０２では、書き込み制限部２３は、ホスト２からＶＳＳＤ５１（ＶＳＳＤ＃１）へのデータの書き込みを禁止してもよいし、あるいは、ホスト２からＶＳＳＤ５１（ＶＳＳＤ＃１）へのデータの書き込み性能を低下させてもよい。
【０１７７】
書き込み制限部２３は、ＶＳＳＤ５２（ＶＳＳＤ＃２）の書き込み総量の測定値が、ＶＳＳＤ５２（ＶＳＳＤ＃２）用の書き込み総量の上限値に達したか否かを判定する（ステップＳ３０３）。ＶＳＳＤ５２（ＶＳＳＤ＃２）の書き込み総量の測定値が、ＶＳＳＤ５２（ＶＳＳＤ＃２）用の書き込み総量の上限値に達した場合（ステップＳ３０３のＹＥＳ）、書き込み制限部２３は、ホスト２からＶＳＳＤ５２（ＶＳＳＤ＃２）へのデータの書き込みを制限する（ステップＳ３０４）。ステップＳ３０４では、書き込み制限部２３は、ホスト２からＶＳＳＤ５２（ＶＳＳＤ＃２）へのデータの書き込みを禁止してもよいし、あるいは、ホスト２からＶＳＳＤ５２（ＶＳＳＤ＃２）へのデータの書き込み性能を低下させてもよい。
【０１７８】
書き込み制限部２３は、ＶＳＳＤ５７（ＶＳＳＤ＃ｎ）の書き込み総量の測定値が、ＶＳＳＤ５７（ＶＳＳＤ＃ｎ）用の書き込み総量の上限値に達したか否かを判定する（ステップＳ３０５）。ＶＳＳＤ５７（ＶＳＳＤ＃ｎ）の書き込み総量の測定値が、ＶＳＳＤ５７（ＶＳＳＤ＃ｎ）用の書き込み総量の上限値に達した場合（ステップＳ３０５のＹＥＳ）、書き込み制限部２３は、ホスト２からＶＳＳＤ５７（ＶＳＳＤ＃ｎ）へのデータの書き込みを制限する（ステップＳ３０６）。ステップＳ３０６では、書き込み制限部２３は、ホスト２からＶＳＳＤ５７（ＶＳＳＤ＃ｎ）へのデータの書き込みを禁止してもよいし、あるいは、ホスト２からＶＳＳＤ５７（ＶＳＳＤ＃ｎ）へのデータの書き込み性能を低下させてもよい。
【０１７９】
図１５のフローチャートは、コントローラ４によって実行されるＮＡＮＤ処理実行時間制御処理の手順を示す。
【０１８０】
コントローラ４がホスト２からコマンドを受信した場合（ステップＳ４０１のＹＥＳ）、コントローラ４は、このコマンド内に含まれるＶＳＳＤＩＤに基づいて、このコマンドが実行されるべき対象のＶＳＳＤを決定する（ステップＳ４０２、ステップＳ４０６、ステップＳ４１０）。
【０１８１】
対象のＶＳＳＤがＶＳＳＤ５１（ＶＳＳＤ＃１）であった場合、つまり、受信されたコマンドがＶＳＳＤ５１（ＶＳＳＤ＃１）向けのコマンドであった場合（ステップＳ４０２のＹＥＳ）、コントローラ４は、現在のサイクルにおけるＶＳＳＤ５１（ＶＳＳＤ＃１）の処理実行時間の累計がＶＳＳＤ５１（ＶＳＳＤ＃１）用の処理実行時間の上限値に達しているか否かを判定する（ステップＳ４０３）。現在のサイクルにおけるＶＳＳＤ５１（ＶＳＳＤ＃１）の処理実行時間の累計は、現在のサイクルにおいてＶＳＳＤ＃１の消去、書き込みまたは読み出し動作に使用された総時間を示す。また、ＶＳＳＤ５１（ＶＳＳＤ＃１）用の処理実行時間の上限値は、ＶＳＳＤ管理コマンドによって指定されるＶＳＳＤ＃１用の「ＮＡＮＤ処理実行時間」を示す。
【０１８２】
現在のサイクルにおけるＶＳＳＤ５１（ＶＳＳＤ＃１）の処理実行時間の累計がＶＳＳＤ５１（ＶＳＳＤ＃１）用の処理実行時間の上限値に達していない場合（ステップＳ４０３のＮＯ）、コントローラ４は、受信されたＶＳＳＤ５１（ＶＳＳＤ＃１）向けのコマンドを実行する（ステップＳ４０４）。一方、現在のサイクルにおけるＶＳＳＤ５１（ＶＳＳＤ＃１）の処理実行時間の累計がＶＳＳＤ５１（ＶＳＳＤ＃１）用の処理実行時間の上限値に達している場合（ステップＳ４０４のＹＥＳ）、コントローラ４は、受信されたＶＳＳＤ５１（ＶＳＳＤ＃１）向けのコマンドを実行せず（ステップＳ４０５）、次のサイクルまで待機してから当該コマンドを実行する。
【０１８３】
ステップＳ４０３〜Ｓ４０５の処理は、例えば、上述のトークン配布および回収によって実現してもよい。この場合、コントローラ４は、ＶＳＳＤ＃１用の処理実行時間の上限値に対応する数のトークンをＶＳＳＤ＃１用に割り当てる。そして、ホスト２（仮想マシン＃１）からのＶＳＳＤ＃１向けのコマンドを実行する度に、このコマンドの種類に対応する数のトークンをＶＳＳＤ＃１から回収する。ＶＳＳＤ＃１用の残りトークンが無くなった時にあるいはある数以下にまで減少した時に、コントローラ４は、現在のサイクルにおけるＶＳＳＤ＃１の処理実行時間の累計がＶＳＳＤ＃１用の処理実行時間の上限値に達したと判定する。
【０１８４】
対象のＶＳＳＤがＶＳＳＤ５２（ＶＳＳＤ＃２）であった場合、つまり、受信されたコマンドがＶＳＳＤ５２（ＶＳＳＤ＃２）向けのコマンドであった場合（ステップＳ４０６のＹＥＳ）、コントローラ４は、現在のサイクルにおけるＶＳＳＤ５２（ＶＳＳＤ＃２）の処理実行時間の累計がＶＳＳＤ５２（ＶＳＳＤ＃２）用の処理実行時間の上限値に達しているか否かを判定する（ステップＳ４０７）。現在のサイクルにおけるＶＳＳＤ５２（ＶＳＳＤ＃２）の処理実行時間の累計は、現在のサイクルにおいてＶＳＳＤ＃２の消去、書き込みまたは読み出し動作に使用された総時間を示す。また、ＶＳＳＤ５２（ＶＳＳＤ＃２）用の処理実行時間の上限値は、ＶＳＳＤ管理コマンドによって指定されるＶＳＳＤ＃２用の「ＮＡＮＤ処理実行時間」を示す。
【０１８５】
現在のサイクルにおけるＶＳＳＤ５２（ＶＳＳＤ＃２）の処理実行時間の累計がＶＳＳＤ５２（ＶＳＳＤ＃２）用の処理実行時間の上限値に達していない場合（ステップＳ４０７のＮＯ）、コントローラ４は、受信されたＶＳＳＤ５２（ＶＳＳＤ＃２）向けのコマンドを実行する（ステップＳ４０８）。一方、現在のサイクルにおけるＶＳＳＤ５２（ＶＳＳＤ＃２）の処理実行時間の累計がＶＳＳＤ５２（ＶＳＳＤ＃２）用の処理実行時間の上限値に達している場合（ステップＳ４０７のＹＥＳ）、コントローラ４は、受信されたＶＳＳＤ５２（ＶＳＳＤ＃２）向けのコマンドを実行せず（ステップＳ４０９）、次のサイクルまで待機してから当該コマンドを実行する。
【０１８６】
ステップＳ４０７〜Ｓ４０９の処理は、例えば、上述のトークン配布および回収によって実現してもよい。この場合、コントローラ４は、ＶＳＳＤ＃２用の処理実行時間の上限値に対応する数のトークンをＶＳＳＤ＃２用に割り当てる。そして、ホスト２（仮想マシン＃２）からのＶＳＳＤ＃２向けのコマンドを実行する度に、このコマンドの種類に対応する数のトークンをＶＳＳＤ＃２から回収する。ＶＳＳＤ＃２用の残りトークンが無くなった時にあるいはある数以下にまで減少した時に、コントローラ４は、現在のサイクルにおけるＶＳＳＤ＃２の処理実行時間の累計がＶＳＳＤ＃２用の処理実行時間の上限値に達したと判定する。
【０１８７】
対象のＶＳＳＤがＶＳＳＤ５７（ＶＳＳＤ＃ｎ）であった場合、つまり、受信されたコマンドがＶＳＳＤ５７（ＶＳＳＤ＃ｎ）向けのコマンドであった場合（ステップＳ４１０のＹＥＳ）、コントローラ４は、現在のサイクルにおけるＶＳＳＤ５７（ＶＳＳＤ＃ｎ）の処理実行時間の累計がＶＳＳＤ５７（ＶＳＳＤ＃ｎ）用の処理実行時間の上限値に達しているか否かを判定する（ステップＳ４１１）。現在のサイクルにおけるＶＳＳＤ５７（ＶＳＳＤ＃ｎ）の処理実行時間の累計は、現在のサイクルにおいてＶＳＳＤ＃ｎの消去、書き込みまたは読み出し動作に使用された総時間を示す。また、ＶＳＳＤ５７（ＶＳＳＤ＃ｎ）用の処理実行時間の上限値は、ＶＳＳＤ管理コマンドによって指定されるＶＳＳＤ＃ｎ用の「ＮＡＮＤ処理実行時間」を示す。
【０１８８】
現在のサイクルにおけるＶＳＳＤ５７（ＶＳＳＤ＃ｎ）の処理実行時間の累計がＶＳＳＤ５７（ＶＳＳＤ＃ｎ）用の処理実行時間の上限値に達していない場合（ステップＳ４１１のＮＯ）、コントローラ４は、受信されたＶＳＳＤ５７（ＶＳＳＤ＃ｎ）向けのコマンドを実行する（ステップＳ４１２）。一方、現在のサイクルにおけるＶＳＳＤ５７（ＶＳＳＤ＃ｎ）の処理実行時間の累計がＶＳＳＤ５７（ＶＳＳＤ＃ｎ）用の処理実行時間の上限値に達している場合（ステップＳ４１１のＹＥＳ）、コントローラ４は、受信されたＶＳＳＤ５７（ＶＳＳＤ＃ｎ）向けのコマンドを実行せず（ステップＳ４１３）、次のサイクルまで待機してから当該コマンドを実行する。
【０１８９】
ステップＳ４１１〜Ｓ４１３の処理は、例えば、上述のトークン配布および回収によって実現してもよい。この場合、コントローラ４は、ＶＳＳＤ＃ｎ用の処理実行時間の上限値に対応する数のトークンをＶＳＳＤ＃ｎ用に割り当てる。そして、ホスト２（仮想マシン＃ｎ）からのＶＳＳＤ＃ｎ向けのコマンドを実行する度に、このコマンドの種類に対応する数のトークンをＶＳＳＤ＃ｎから回収する。ＶＳＳＤ＃ｎ用の残りトークンが無くなった時にあるいはある数以下にまで減少した時に、コントローラ４は、現在のサイクルにおけるＶＳＳＤ＃ｎの処理実行時間の累計がＶＳＳＤ＃ｎ用の処理実行時間の上限値に達したと判定する。
【０１９０】
次に、図１６、図１７を参照して、上述のトークン配布および回収処理の例を説明する。
【０１９１】
トークン配布および回収処理では、ＶＳＳＤそれぞれに対応する処理実行時間の上限値に対応する個数のトークンがこれらＶＳＳＤに分配される。個々のＶＳＳＤにおいては、このＶＳＳＤ向けのコマンドが実行される度に、このコマンドの実行に伴って実行することが必要となるＮＡＮＤ動作（書き込み動作、読み出し動作、または消去動作）の実行時間の長さに応じた数のトークンが、このＶＳＳＤから回収される。残りトークンが無くなると、このＶＳＳＤ向けのコマンドの実行は停止される。そして、次のサイクルの開始時に、ＶＳＳＤそれぞれに対応する処理実行時間の上限値に対応する個数のトークンがこれらＶＳＳＤに再び分配される。
【０１９２】
図１６、図１７の処理例では、ライトコマンド用のトークンとリードコマンド用のトークンがそれぞれ独立している場合が想定されている。ライトコマンド用のトークンはＧＣ用のトークンと共用されてもよい。
【０１９３】
図１６は、ライトコマンド（ホスト書き込み動作）またはＧＣコマンド（データコピーのための書き込み動作、または消去動作）を実行するためのトークン配布および回収処理の例を示している。
【０１９４】
ホスト２からのＶＳＳＤ５１（ＶＳＳＤ＃１）向けのコマンドそれぞれは、ＶＳＳＤ＃１用のコマンドキュー７１Ａに格納されてもよい。ホスト２からのＶＳＳＤ５２（ＶＳＳＤ＃２）向けのコマンドそれぞれは、ＶＳＳＤ＃２用のコマンドキュー７２Ａに格納されてもよい。ホスト２からのＶＳＳＤ５３（ＶＳＳＤ＃３）向けのコマンドそれぞれは、ＶＳＳＤ＃３用のコマンドキュー７３Ａに格納される。同様に、ホスト２からのＶＳＳＤ５７（ＶＳＳＤ＃ｎ）向けのコマンドそれぞれは、ＶＳＳＤ＃ｎ用のコマンドキュー７７Ａに格納されてもよい。
【０１９５】
上述したように、各ＶＳＳＤには、そのＶＳＳＤの処理実行時間に対応する個数のトークンが配布される。コントローラ４のトークン分配部７９は、ＶＳＳＤ＃１用のトークン管理部７１Ｃに、ＶＳＳＤ＃１の処理実行時間の上限値に対応する個数のトークンを配布する。同様に、トークン分配部７９は、ＶＳＳＤ＃２用のトークン管理部７２Ｃに、ＶＳＳＤ＃２の処理実行時間の上限値に対応する個数のトークンを配布し、ＶＳＳＤ＃３用のトークン管理部７３Ｃに、ＶＳＳＤ＃３の処理実行時間の上限値に対応する個数のトークンを配布し、ＶＳＳＤ＃ｎ用のトークン管理部７７Ｃに、ＶＳＳＤ＃ｎの処理実行時間の上限値に対応する個数のトークンを配布する。
【０１９６】
ＶＳＳＤ＃１用のトークン管理部７１Ｃがライト（またはＧＣ）の実行に必要な個数のトークンを有している場合、トークン管理部７１Ｃは、ＶＳＳＤ＃１用のコマンド発行部７１ＢがライトコマンドまたはＧＣコマンドを発行することを許可してもよい。ライトコマンドまたはＧＣコマンドの発行が許可される度に、コントローラ４のトークン回収部８０は、ライト（またはＧＣ）の実行に必要な個数のトークンをトークン管理部７１Ｃから回収してもよい。トークン管理部７１Ｃにトークンが無くなると、ＶＳＳＤ＃１用のコマンドの発行は禁止される。
【０１９７】
ＶＳＳＤ＃１用のライトコマンドまたはＧＣコマンドの発行が許可された場合、ＶＳＳＤ＃１用のコマンド発行部７１Ｄは、フリー管理部７１Ｅによって管理されるＶＳＳＤ＃１用の現在のフリーブロックの個数等に基づいて、ライトコマンドまたはＧＣコマンドのいずれを発行するかを決定してもよく、そして、ライトコマンドまたはＧＣコマンドのいずれかを発行してもよい。これにより、ＶＳＳＤ＃１に対する書き込み動作、消去動作等が実行される。発行されたコマンドは発行済みキュー７８に入れられてもよい。
【０１９８】
ＶＳＳＤ＃２用のトークン管理部７２Ｃがライト（またはＧＣ）の実行に必要な個数のトークンを有している場合、トークン管理部７２Ｃは、ＶＳＳＤ＃２用のコマンド発行部７２ＢがライトコマンドまたはＧＣコマンドを発行することを許可してもよい。ライトコマンドまたはＧＣコマンドの発行が許可される度に、コントローラ４のトークン回収部８０は、ライト（またはＧＣ）の実行に必要な個数のトークンをトークン管理部７２Ｃから回収してもよい。トークン管理部７２Ｃにトークンが無くなると、ＶＳＳＤ＃２用のコマンドの発行は禁止される。
【０１９９】
ＶＳＳＤ＃２用のライトコマンドまたはＧＣコマンドの発行が許可された場合、ＶＳＳＤ＃２用のコマンド発行部７２Ｄは、フリー管理部７２Ｅによって管理されるＶＳＳＤ＃２用の現在のフリーブロックの個数等に基づいて、ライトコマンドまたはＧＣコマンドのいずれを発行するかを決定してもよく、そして、ライトコマンドまたはＧＣコマンドのいずれかを発行してもよい。これにより、ＶＳＳＤ＃２に対する書き込み動作、消去動作等が実行される。発行されたコマンドは発行済みキュー７８に入れられてもよい。
【０２００】
ＶＳＳＤ＃３用のトークン管理部７３Ｃがライト（またはＧＣ）の実行に必要な個数のトークンを有している場合、トークン管理部７３Ｃは、ＶＳＳＤ＃３用のコマンド発行部７３ＢがライトコマンドまたはＧＣコマンドを発行することを許可してもよい。ライトコマンドまたはＧＣコマンドの発行が許可される度に、コントローラ４のトークン回収部８０は、ライト（またはＧＣ）の実行に必要な個数のトークンをトークン管理部７３Ｃから回収してもよい。トークン管理部７３Ｃにトークンが無くなると、ＶＳＳＤ＃３用のコマンドの発行は禁止される。
【０２０１】
ＶＳＳＤ＃３用のライトコマンドまたはＧＣコマンドの発行が許可された場合、ＶＳＳＤ＃３用のコマンド発行部７３Ｄは、フリー管理部７３Ｅによって管理されるＶＳＳＤ＃３用の現在のフリーブロックの個数等に基づいて、ライトコマンドまたはＧＣコマンドのいずれを発行するかを決定してもよく、そして、ライトコマンドまたはＧＣコマンドのいずれかを発行してもよい。これにより、ＶＳＳＤ＃３に対する書き込み動作、消去動作等が実行される。発行されたコマンドは発行済みキュー７８に入れられてもよい。
【０２０２】
ＶＳＳＤ＃ｎ用のトークン管理部７７Ｃがライト（またはＧＣ）の実行に必要な個数のトークンを有している場合、トークン管理部７７Ｃは、ＶＳＳＤ＃ｎ用のコマンド発行部７７ＢがライトコマンドまたはＧＣコマンドを発行することを許可してもよい。ライトコマンドまたはＧＣコマンドの発行が許可される度に、コントローラ４のトークン回収部８０は、ライト（またはＧＣ）の実行に必要な個数のトークンをトークン管理部７７Ｃから回収してもよい。トークン管理部７７Ｃにトークンが無くなると、ＶＳＳＤ＃ｎ用のコマンドの発行は禁止される。
【０２０３】
ＶＳＳＤ＃ｎ用のライトコマンドまたはＧＣコマンドの発行が許可された場合、ＶＳＳＤ＃ｎ用のコマンド発行部７７Ｄは、フリー管理部７７Ｅによって管理されるＶＳＳＤ＃ｎ用の現在のフリーブロックの個数等に基づいて、ライトコマンドまたはＧＣコマンドのいずれを発行するかを決定してもよく、そして、ライトコマンドまたはＧＣコマンドのいずれかを発行してもよい。これにより、ＶＳＳＤ＃ｎに対する書き込み動作、消去動作等が実行される。発行されたコマンドは発行済みキュー７８に入れられてもよい。
【０２０４】
図１７は、リードコマンドを実行するためのトークン配布および回収処理の例を示している。
【０２０５】
ＶＳＳＤ＃１用のトークン管理部７１Ｃがリードの実行に必要な個数のトークンを有している場合、トークン管理部７１Ｃは、ＶＳＳＤ＃１用のコマンド発行部７１Ｂがリードコマンドを発行することを許可してもよい。リードコマンドの発行が許可される度に、コントローラ４のトークン回収部８０は、リードの実行に必要な個数のトークンをトークン管理部７１Ｃから回収してもよい。トークン管理部７１Ｃにトークンが無くなると、ＶＳＳＤ＃１用のコマンドの発行は禁止される。
【０２０６】
ＶＳＳＤ＃２用のトークン管理部７２Ｃがリードの実行に必要な個数のトークンを有している場合、トークン管理部７２Ｃは、ＶＳＳＤ＃２用のコマンド発行部７２Ｂがリードコマンドを発行することを許可してもよい。リードコマンドの発行が許可される度に、コントローラ４のトークン回収部８０は、リードの実行に必要な個数のトークンをトークン管理部７２Ｃから回収してもよい。トークン管理部７２Ｃにトークンが無くなると、ＶＳＳＤ＃２用のコマンドの発行は禁止される。
【０２０７】
ＶＳＳＤ＃３用のトークン管理部７３Ｃがリードの実行に必要な個数のトークンを有している場合、トークン管理部７３Ｃは、ＶＳＳＤ＃３用のコマンド発行部７３Ｂがリードコマンドを発行することを許可してもよい。リードコマンドの発行が許可される度に、コントローラ４のトークン回収部８０は、リードの実行に必要な個数のトークンをトークン管理部７３Ｃから回収してもよい。トークン管理部７３Ｃにトークンが無くなると、ＶＳＳＤ＃３用のコマンドの発行は禁止される。
【０２０８】
ＶＳＳＤ＃ｎ用のトークン管理部７７Ｃがリードの実行に必要な個数のトークンを有している場合、トークン管理部７７Ｃは、ＶＳＳＤ＃ｎ用のコマンド発行部７７Ｂがリードコマンドを発行することを許可してもよい。リードコマンドの発行が許可される度に、コントローラ４のトークン回収部８０は、リードの実行に必要な個数のトークンをトークン管理部７７Ｃから回収してもよい。トークン管理部７７Ｃにトークンが無くなると、ＶＳＳＤ＃ｎ用のコマンドの発行は禁止される。
【０２０９】
図１８は、ホスト２として機能する情報処理装置（コンピューティングデバイス）のハードウェア構成例を示す。
【０２１０】
この情報処理装置は、サーバのようなコンピューティングデバイスとして実現される。この情報処理装置は、プロセッサ（ＣＰＵ）１０１、メインメモリ１０２、ＢＩＯＳ−ＲＯＭ１０３、ネットワークコントローラ１０５、周辺インタフェースコントローラ１０６、コントローラ１０７、およびエンベデッドコントローラ（ＥＣ）１０８等を含む。
【０２１１】
プロセッサ１０１は、この情報処理装置の各コンポーネントの動作を制御するように構成されたＣＰＵである。このプロセッサ１０１は、複数のＳＳＤ３のいずれか１つからメインメモリ１０２にロードされる様々なプログラムを実行する。メインメモリ１０２は、ＤＲＡＭのようなランダムアクセスメモリから構成される。プロセッサ１０１によって実行されるプログラムは、上述の仮想マシン、デバイスドライバ等を含む。また、このプログラムには、上述のＶＳＳＤ管理コマンドを発行することによって個々のＶＳＳＤの容量／性能／可用性を設定するための設定プログラムが含まれていてもよい。この設定プログラムは、個々のユーザ（エンドユーザ）のストレージ要件にマッチするＶＳＳＤの作成をＳＳＤ３に要求する。
【０２１２】
また、プロセッサ１０１は、不揮発性メモリであるＢＩＯＳ−ＲＯＭ１０３に格納された基本入出力システム（ＢＩＯＳ）も実行する。ＢＩＯＳはハードウェア制御のためのシステムプログラムである。
【０２１３】
ネットワークコントローラ１０５は、有線ＬＡＮコントローラ、無線ＬＡＮコントローラのような通信デバイスである。周辺インタフェースコントローラ１０６は、ＵＳＢデバイスのような周辺デバイスとの通信を実行するように構成されている。
【０２１４】
コントローラ１０７は、複数のコネクタ１０７Ａにそれぞれ接続されるデバイスとの通信を実行するように構成されている。複数のＳＳＤ３が複数のコネクタ１０７Ａにそれぞれ接続されてもよい。コントローラ１０７は、ＳＡＳ  ｅｘｐａｎｄｅｒ、ＰＣＩｅ  Ｓｗｉｔｃｈ、ＰＣＩｅ  ｅｘｐａｎｄｅｒ、フラッシュアレイコントローラ、またはＲＡＩＤコントローラ等である。
【０２１５】
ＥＣ１０８は、情報処理装置の電力管理を実行するように構成されたシステムコントローラとして機能する。
【０２１６】
図１９は、複数のＳＳＤ３とホスト２とを含む情報処理装置（サーバ）の構成例を示す。
【０２１７】
この情報処理装置（サーバ）は、ラックに収容可能な薄い箱形の筐体２０１を備える。多数のＳＳＤ３は筐体２０１内に配置されてもよい。この場合、各ＳＳＤ３は筐体２０１の前面２０１Ａに設けられたスロットに取り外し可能に挿入されてもよい。
【０２１８】
システムボード（マザーボード）２０２は筐体２０１内に配置される。システムボード（マザーボード）２０２上においては、ＣＰＵ１０１、メモリ１０２、ネットワークコントローラ１０５、コントローラ１０７を含む様々な電子部品が実装されている。これら電子部品がホスト２として機能する。
【０２１９】
以上説明したように、本実施形態によれば、ＳＳＤ３内のＮＡＮＤ型フラッシュメモリ５が複数の記憶領域（ＶＳＳＤ＃１、ＶＳＳＤ＃２、…）に論理的に分割され、さらに、書き込み可能なデータの総量（書き込み総量）をＶＳＳＤ毎に指定するホスト２からの要求に基づいて、指定された書き込み総量の上限値がＶＳＳＤ毎に管理される。さらに、ＶＳＳＤ＃１に書き込まれたデータの総量、およびＶＳＳＤ＃２に書き込まれたデータの総量がＳＳＤ３内のコントローラ４によって測定される。そして、ＶＳＳＤ＃１に書き込まれたデータの総量の測定値が、ＶＳＳＤ＃１用の書き込み総量の上限値に達した場合、ホスト２からのＶＳＳＤ＃１へのデータの書き込みがコントローラ４によって制限される。また、ＶＳＳＤ＃２に書き込まれたデータの総量の測定値が、ＶＳＳＤ＃２用の書き込み総量の上限値に達した場合、ホスト２からのＶＳＳＤ＃２へのデータの書き込みがコントローラ４によって制限される。
【０２２０】
よって、ホスト２が個々のＶＳＳＤへの書き込み総量を全く制御すること無く、個々のエンドユーザのニーズに応じて、大きな書き込み総量が許容されるＶＳＳＤ、少ない書き込み総量のみが許容されるＶＳＳＤといった様々な記憶領域（様々なＶＳＳＤ）を１台のＳＳＤ３内に実現することができる。よって、個々のユーザのストレージ要件に適した柔軟なストレージサービスを１台のＳＳＤ３によって実現することができる。
【０２２１】
データセンター事業者は、データ書き込みが制限されたＶＳＳＤを使用しているエンドユーザに対して追加の利用料を課金することを条件に、このＶＳＳＤの書き込み総量の上限値が高くなるようにこのＶＳＳＤの書き込み総量の上限値を再設定してもよい。
【０２２２】
あるいは、データセンター事業者は、データの書き込みが制限されたＶＳＳＤを使用しているユーザに対して追加の利用料を課金することを条件に、このＶＳＳＤのオーバープロビジョニング容量を増加してもよい。
【０２２３】
また、本実施形態では、ユーザ容量とオーバープロビジョニング容量との組、ＮＡＮＤ処理実行時間、またはホスト側アクセスバンド幅についても、個々のＶＳＳＤ毎に設定することができる。したがって、個々のユーザのストレージ要件に適した柔軟なストレージサービスを容易に提供することがとできる。
【０２２４】
なお、本実施形態では、不揮発性メモリとしてＮＡＮＤ型フラッシュメモリを例示した。しかし、本実施形態の機能は、例えば、ＭＲＡＭ（Ｍａｇｎｅｔｏｒｅｓｉｓｔｉｖｅ  Ｒａｎｄｏｍ  Ａｃｃｅｓｓ  Ｍｅｍｏｒｙ）、ＰＲＡＭ（Ｐｈａｓｅ  ｃｈａｎｇｅ  Ｒａｎｄｏｍ  Ａｃｃｅｓｓ  Ｍｅｍｏｒｙ）、ＲｅＲＡＭ（Ｒｅｓｉｓｔｉｖｅ  Ｒａｎｄｏｍ  Ａｃｃｅｓｓ  Ｍｅｍｏｒｙ）、又は、ＦｅＲＡＭ（Ｆｅｒｒｏｅｌｅｃｔｒｉｃ  Ｒａｎｄｏｍ  Ａｃｃｅｓｓ  Ｍｅｍｏｒｙ）のような他の様々な不揮発性メモリにも適用できる。
【０２２５】
本発明のいくつかの実施形態を説明したが、これらの実施形態は、例として提示したものであり、発明の範囲を限定することは意図していない。これら新規な実施形態は、その他の様々な形態で実施されることが可能であり、発明の要旨を逸脱しない範囲で、種々の省略、置き換え、変更を行うことができる。これら実施形態やその変形は、発明の範囲や要旨に含まれるとともに、特許請求の範囲に記載された発明とその均等の範囲に含まれる。
【符号の説明】
【０２２６】
２…ホスト、３…ＳＳＤ、４…コントローラ、５…ＮＡＮＤ型フラッシュメモリ、５１、５２、５３、５４、５５、５６、５７…記憶領域（仮想ＳＳＤ）、２１…ＶＳＳＤ作成部、２２…書き込みデータ総量測定部、２３…書き込み制限部、２４…ＮＡＮＤ処理実行時間制御部、２５…ホスト側アクセスバンド幅制御部、２６…メモリ資源量割り当て部。
【図１】
2018101334.tif 000003
【図２】
2018101334.tif 000004
【図３】
2018101334.tif 000005
【図４】
2018101334.tif 000006
【図５】
2018101334.tif 000007
【図６】
2018101334.tif 000008
【図７】
2018101334.tif 000009
【図８】
2018101334.tif 000010
【図９】
2018101334.tif 000011
【図１０】
2018101334.tif 000012
【図１１】
2018101334.tif 000013
【図１２】
2018101334.tif 000014
【図１３】
2018101334.tif 000015
【図１４】
2018101334.tif 000016
【図１５】
2018101334.tif 000017
【図１６】
2018101334.tif 000018
【図１７】
2018101334.tif 000019
【図１８】
2018101334.tif 000020
【図１９】
2018101334.tif 000021