(57)【要約】【課題】ある領域に格納されているデータを他の領域の論理アドレスを通して利用することができるメモリシステムを実現する。【解決手段】メモリシステムは、不揮発性メモリの第１の領域に対応する第１の論理物理アドレス変換テーブルの内容を、不揮発性メモリの第２の領域に対応する第２の論理物理アドレス変換テーブルにコピーする。メモリシステムは、第２の領域の論理アドレスを指定するリード要求に応じて、第２の論理物理アドレス変換テーブルに基づいて、第１のデータの一部を第１の領域から読み出して前記ホスト計算機に返す。メモリシステムは、第１の領域に割り当てられている前記不揮発性メモリの第１のブロック群からリフレッシュ条件を満たすブロックを検出し、検出されたブロック内のデータの誤りを訂正し、誤りが訂正されたデータを、前記検出されたブロックと同じブロックに書き戻す。【選択図】図６
2019008730.tif 000002
【特許請求の範囲】
【請求項１】
ホスト計算機に接続可能なメモリシステムであって、
複数のブロックを含む不揮発性メモリと、
前記不揮発性メモリに電気的に接続されたコントローラとを具備し、
前記コントローラは、
前記不揮発性メモリ内の複数の領域を管理し、前記複数の領域は、他の領域から参照される第１のデータを格納している第１の領域と、前記第１のデータを参照する第２の領域とを含み、
前記ホスト計算機からの要求に応じて、前記第１の領域に対応する第１の論理物理アドレス変換テーブルの内容を、前記第２の領域に対応する第２の論理物理アドレス変換テーブルにコピーし、
前記ホスト計算機からの前記第２の領域の論理アドレスを指定するリード要求に応じて、前記第２の論理物理アドレス変換テーブルに基づいて、前記第１のデータの一部を前記第１の領域から読み出して前記ホスト計算機に返し、
前記ホスト計算機からの前記第２の領域の論理アドレスを指定するライト要求に応じて、書き込まれるべき第２のデータを前記第２の領域に書き込むと共に、前記第２のデータが書き込まれた前記第２の領域内の物理記憶位置を示す物理アドレスが前記ライト要求によって指定された前記論理アドレスにマッピングされるように前記第２の論理物理アドレス変換テーブルを更新し、
前記第１の領域に割り当てられている前記不揮発性メモリの第１のブロック群からリフレッシュ条件を満たすブロックを検出し、前記検出されたブロック内のデータの誤りを訂正し、誤りが訂正されたデータを、前記検出されたブロックと同じブロックに書き戻す、メモリシステム。
【請求項２】
前記第１の領域は、オペレーティングシステムを前記第１のデータとして格納しており、
前記第２の領域は、前記ホスト計算機上の仮想マシンによってアクセスされる仮想ストレージとして利用され、前記仮想マシンは前記オペレーティングシステムを実行する請求項１記載のメモリシステム。
【請求項３】
前記第１の領域は、オペレーティングシステムおよびアプリケーションプログラムを前記第１のデータとして格納しており、
前記第２の領域は、前記ホスト計算機上の仮想マシンによってアクセスされる仮想ストレージとして利用され、前記仮想マシンは前記オペレーティングシステムおよび前記アプリケーションプログラムを実行する請求項１記載のメモリシステム。
【請求項４】
前記コントローラは、前記第２のデータが前記第２の領域に書き込まれた後に前記第２のデータに対するリード要求を前記ホスト計算機から受信した場合、前記更新された第２のアドレス変換テーブルに基づいて、前記第２のデータを前記第２の領域から読み出して前記ホスト計算機に返す請求項１記載のメモリシステム。
【請求項５】
前記複数の領域は、前記第１のデータを参照する第３の領域をさらに含み、
前記コントローラは、
前記ホスト計算機からの要求に応じて、前記第１の論理物理アドレス変換テーブルの内容を、前記第３の領域に対応する第３の論理物理アドレス変換テーブルにコピーし、
前記ホスト計算機からの前記第３の領域の論理アドレスを指定するリード要求に応じて、前記第３の論理物理アドレス変換テーブルに基づいて、前記第１のデータの一部を前記第１の領域から読み出して前記ホスト計算機に返し、
前記ホスト計算機からの前記第３の領域の論理アドレスを指定するライト要求に応じて、書き込まれるべき第３のデータを前記第３の領域に書き込むと共に、前記第３のデータが書き込まれた前記第３の領域内の物理記憶位置を示す物理アドレスが前記ライト要求によって指定された前記論理アドレスにマッピングされるように前記第３の論理物理アドレス変換テーブルを更新する請求項１記載のメモリシステム。
【請求項６】
前記コントローラは、
前記ホスト計算機からの要求に応じて、前記第１のデータを前記第１の領域に書き込み、
前記第１のデータの書き込みの完了の後に、前記第１の領域を、前記第１の領域への書き込みが禁止されるリードオンリーモードに設定する請求項１記載のメモリシステム。
【請求項７】
前記コントローラは、
前記検出されたブロックのビット誤り率またはリード回数が閾値以上である場合、前記誤りが訂正されたデータを前記検出されたブロックとは異なる別のブロックに書き込み、
前記第１の論理物理アドレス変換テーブルまたは前記第２の論理物理アドレス変換テーブルから取得された物理アドレス内に含まれる前記検出されたブロックのブロックアドレスが前記別のブロックのブロックアドレスに変換されるように、変換前のブロックアドレスそれぞれと変換後のブロックアドレスそれぞれとの間のマッピングを管理するブロックアドレス変換テーブルに前記別のブロックのブロックアドレスを格納する請求項１記載のメモリシステム。
【請求項８】
前記第１の領域に割り当てられている前記第１のブロック群は、メモリセル当たりに１ビットのデータを格納可能な第１のタイプのブロック群であり、
前記第２の領域に割り当てられている前記不揮発性メモリの第２のブロック群は、メモリセル当たりに複数ビットのデータを格納可能な第２のタイプのブロック群である請求項１記載のメモリシステム。
【請求項９】
前記コントローラは、
メモリセル当たりに１ビットのデータが書き込まれる第１の書き込みモードを使用して前記第１の領域へのデータ書き込みを実行し、
メモリセル当たりに複数ビットのデータが書き込まれる第２の書き込みモードを使用して前記第２の領域へのデータ書き込みを実行する請求項１記載のメモリシステム。
【請求項１０】
ホスト計算機に接続可能なメモリシステムであって、
複数のブロックを含む不揮発性メモリと、
前記不揮発性メモリに電気的に接続されたコントローラとを具備し、
前記コントローラは、
前記不揮発性メモリ内の複数の領域を管理し、前記複数の領域は、他の領域から参照される第１のデータを格納している第１の領域と、前記第１のデータを参照する第２の領域とを含み、
前記ホスト計算機からの要求に応じて、前記第１の領域に対応する第１の論理物理アドレス変換テーブルの内容を、前記第２の領域に対応する第２の論理物理アドレス変換テーブルにコピーし、
前記ホスト計算機からの前記第２の領域の論理アドレスを指定するリード要求に応じて、前記第２の論理物理アドレス変換テーブルに基づいて、前記第１のデータの一部を前記第１の領域から読み出して前記ホスト計算機に返し、
前記ホスト計算機からの前記第２の領域の論理アドレスを指定するライト要求に応じて、書き込まれるべき第２のデータを前記第２の領域に書き込むと共に、前記第２のデータが書き込まれた前記第２の領域内の物理記憶位置を示す物理アドレスが前記ライト要求によって指定された前記論理アドレスにマッピングされるように前記第２の論理物理アドレス変換テーブルを更新し、
前記第１の領域に割り当てられている前記不揮発性メモリの第１のブロック群からリフレッシュ条件を満たすブロックを検出し、前記検出されたブロック内のデータの誤りを訂正し、誤りが訂正されたデータを、前記検出されたブロックとは異なる別のブロックに書き込み、
前記第１の論理物理アドレス変換テーブルまたは前記第２の論理物理アドレス変換テーブルから取得された物理アドレス内に含まれる前記検出されたブロックのブロックアドレスが前記別のブロックのブロックアドレスに変換されるように、変換前のブロックアドレスそれぞれと変換後のブロックアドレスそれぞれとの間のマッピングを管理するブロックアドレス変換テーブルに前記別のブロックのブロックアドレスを格納する、メモリシステム。
【請求項１１】
前記第１の領域は、オペレーティングシステムを前記第１のデータとして格納しており、
前記第２の領域は、前記ホスト計算機上の仮想マシンによってアクセスされる仮想ストレージとして利用され、前記仮想マシンは前記オペレーティングシステムを実行する請求項１０記載のメモリシステム。
【請求項１２】
前記第１の領域は、オペレーティングシステムおよびアプリケーションプログラムを前記第１のデータとして格納しており、
前記第２の領域は、前記ホスト計算機上の仮想マシンによってアクセスされる仮想ストレージとして利用され、前記仮想マシンは前記オペレーティングシステムおよび前記アプリケーションプログラムを実行する請求項１０記載のメモリシステム。
【請求項１３】
仮想マシンが実行される仮想化環境を含むサーバに接続可能なメモリシステムであって、
複数のブロックを含む不揮発性メモリと、
前記不揮発性メモリに電気的に接続されたコントローラとを具備し、
前記コントローラは、
前記不揮発性メモリ内の複数の領域を管理し、前記複数の領域は、前記仮想マシン用のゲストオペレーティングシステムとして利用されるオペレーティングシステムを格納している第１の領域と、前記仮想マシンによってアクセスされる仮想ストレージとして利用される第２の領域とを含み、
前記第１の領域に対応する第１の論理物理アドレス変換テーブルの内容を、前記第２の領域に対応する第２の論理物理アドレス変換テーブルにコピーし、
前記仮想マシンからの前記第２の領域の論理アドレスを指定するリード要求に応じて、前記第２の論理物理アドレス変換テーブルに基づいて、前記オペレーティングシステムの一部を前記第１の領域から読み出して前記仮想マシンに返し、
前記仮想マシンからの前記第２の領域の論理アドレスを指定するライト要求に応じて、書き込まれるべき第２のデータを前記第２の領域に書き込むと共に、前記第２のデータが書き込まれた前記第２の領域内の物理記憶位置を示す物理アドレスが前記ライト要求によって指定された前記論理アドレスにマッピングされるように前記第２の論理物理アドレス変換テーブルを更新し、
前記第１の領域に割り当てられている前記不揮発性メモリの第１のブロック群からリフレッシュ条件を満たすブロックを検出し、前記検出されたブロック内のデータの誤りを訂正し、誤りが訂正されたデータを、前記検出されたブロックと同じブロックに書き戻す、メモリシステム。
【請求項１４】
前記第１の領域は、前記オペレーティングシステムおよびアプリケーションプログラムを格納しており、
前記仮想マシンは、前記オペレーティングシステムおよび前記アプリケーションプログラムを実行する請求項１３記載のメモリシステム。
【請求項１５】
前記コントローラは、
前記検出されたブロックのビット誤り率またはリード回数が閾値以上である場合、前記誤りが訂正されたデータを前記検出されたブロックとは異なる別のブロックに書き込み、
前記第１の論理物理アドレス変換テーブルまたは前記第２の論理物理アドレス変換テーブルから取得された物理アドレス内に含まれる前記検出されたブロックのブロックアドレスが前記別のブロックのブロックアドレスに変換されるように、変換前のブロックアドレスそれぞれと変換後のブロックアドレスそれぞれとの間のマッピングを管理するブロックアドレス変換テーブルに前記別のブロックのブロックアドレスを格納する請求項１３記載のメモリシステム。
【発明の詳細な説明】
【技術分野】
【０００１】
本発明の実施形態は、不揮発性メモリを制御する技術に関する。
【背景技術】
【０００２】
近年、不揮発性メモリを備えるメモリシステムが広く普及している。
【０００３】
このようなメモリシステムの一つとして、ＮＡＮＤフラッシュ技術ベースのソリッドステートドライブ（ＳＳＤ）が知られている。
【０００４】
ＳＳＤのようなメモリシステムにおいては、ある領域に格納されているデータを他の領域にコピーすることが必要とされる場合がある。
【先行技術文献】
【特許文献】
【０００５】
【特許文献１】特開２０１５−１６２００１号公報
【発明の概要】
【発明が解決しようとする課題】
【０００６】
しかし、このようなコピーには比較的多くの時間を要する場合が多い。
【０００７】
本発明が解決しようとする課題は、ある領域に格納されているデータを他の領域の論理アドレスを通して利用することができるメモリシステムを提供することである。
【課題を解決するための手段】
【０００８】
実施形態によれば、ホスト計算機に接続可能なメモリシステムは、複数のブロックを含む不揮発性メモリと、前記不揮発性メモリに電気的に接続されたコントローラとを具備する。前記コントローラは、前記不揮発性メモリ内の複数の領域を管理する。前記複数の領域は、他の領域から参照される第１のデータを格納している第１の領域と、前記第１のデータを参照する第２の領域とを含む。前記コントローラは、前記ホスト計算機からの要求に応じて、前記第１の領域に対応する第１の論理物理アドレス変換テーブルの内容を、前記第２の領域に対応する第２の論理物理アドレス変換テーブルにコピーする。前記コントローラは、前記ホスト計算機からの前記第２の領域の論理アドレスを指定するリード要求に応じて、前記第２の論理物理アドレス変換テーブルに基づいて、前記第１のデータの一部を前記第１の領域から読み出して前記ホスト計算機に返す。前記コントローラは、前記ホスト計算機からの前記第２の領域の論理アドレスを指定するライト要求に応じて、書き込まれるべき第２のデータを前記第２の領域に書き込むと共に、前記第２のデータが書き込まれた前記第２の領域内の物理記憶位置を示す物理アドレスが前記ライト要求によって指定された前記論理アドレスにマッピングされるように前記第２の論理物理アドレス変換テーブルを更新する。前記コントローラは、前記第１の領域に割り当てられている前記不揮発性メモリの第１のブロック群からリフレッシュ条件を満たすブロックを検出し、前記検出されたブロック内のデータの誤りを訂正し、誤りが訂正されたデータを、前記検出されたブロックと同じブロックに書き戻す。
【図面の簡単な説明】
【０００９】
【図１】サーバ（ホスト計算機）の構成例を示すブロック図。
【図２】図１のサーバの各仮想マシンに設けられるアクセス先切り換え部の動作を説明するためのブロック図。
【図３】実施形態のメモリシステムの不揮発性メモリを論理的に分割することによって得られる複数の領域を説明するための図。
【図４】同実施形態のメモリシステム内の複数の領域とこれら領域に対応する論理アドレス空間とこれら領域に対応するルックアップテーブルとの関係を示すブロック図。
【図５】同実施形態のメモリシステム内の領域＃１にオペレーティングシステムのバイナリイメージを書き込む動作と領域＃１を書き込み禁止モード（リードオンリーモード）に設定する動作とを説明するための図。
【図６】同実施形態のメモリシステム内の領域＃３１を制御する動作を説明するための図。
【図７】同実施形態のメモリシステム内の領域＃３２を制御する動作を説明するための図。
【図８】領域＃１に対するリフレッシュ動作の例を説明するための図。
【図９】領域＃１に対応するルックアップテーブル＃１の内容の例と領域＃３１に対応するルックアップテーブル＃３１の内容の例とを示す図。
【図１０】領域＃３１（または領域＃３２）の或る論理アドレスを指定するリード要求に応じて実行されるリード動作と領域＃３１（または領域＃３２）の或る論理アドレスを指定するライト要求に応じて実行されるライト動作とを説明するための図。
【図１１】領域＃１に割り当てられるＳＬＣブロック群と領域＃３１（または領域＃３２）に割り当てられるＭＬＣ／ＴＬＣブロック群とを示す図。
【図１２】領域＃１に対するリフレッシュ動作の他の例を説明するための図。
【図１３】領域＃１に対応するルックアップテーブルと領域＃３１に対応するルックアップテーブル（または領域＃３２に対応するルックアップテーブル）とによって共有されるブロックアドレス変換テーブルを説明するための図。
【図１４】ホスト計算機と同実施形態のメモリシステムとを含む情報処理システムの構成例を示すブロック図。
【図１５】同実施形態のメモリシステム内のＮＡＮＤインタフェースと複数のＮＡＮＤ型フラッシュメモリダイとの関係を示す図。
【図１６】同実施形態のメモリシステムによって実行される、領域＃１に仮想マシンイメージを書き込む処理の手順を示すシーケンスチャート。
【図１７】同実施形態のメモリシステムによって実行される、仮想マシン用の仮想ストレージ（領域＃３１または領域＃３２）を作成する処理の手順を示すシーケンスチャート。
【図１８】同実施形態のメモリシステムによって実行されるリード／ライト処理の手順を示すフローチャート。
【図１９】同実施形態のメモリシステムによって実行されるリフレッシュ処理の手順を示すフローチャート。
【図２０】同実施形態のメモリシステムによって実行されるリフレッシュ処理の別の手順を示すフローチャート。
【図２１】同実施形態のメモリシステムによって実行されるデータ書き込み処理の手順を示すフローチャート。
【図２２】同実施形態のメモリシステムを含むサーバ（ホスト計算機）の構成例を示す図。
【発明を実施するための形態】
【００１０】
以下、図面を参照して、実施形態を説明する。  
【００１１】
図１は、一実施形態に係るメモリシステムが適用可能な計算機の構成例を示す。この計算機は、サーバ、パーソナルコンピュータのような、様々なプログラムを実行する情報処理装置である。以下では、この計算機が、サーバ１００として実現されている場合を想定する。
【００１２】
サーバ１００は、ネットワークを介して複数のユーザ（複数の端末）に対して様々なサービスを提供する計算機（「物理サーバ」とも云う）である。
【００１３】
このサーバ１００は、データセンター内に設置されていてもよい。このサーバ１００によって提供されるサービスの例には、仮想サーバのようなインフラストラクチャを多数のユーザ（多数のテナント）に提供するインフラストラクチャ・アズ・ア・サービス（ＩａａＳ）、等がある。
【００１４】
サーバ１００は、複数の仮想マシンが実行される仮想化環境を含み、これら複数の仮想マシンがこのサーバ１００上で実行される。図１では、３つの仮想マシンＶＭ１、ＶＭ２、ＶＭ３がサーバ１００上で実行される場合が例示されている。
【００１５】
これら仮想マシンＶＭ１、ＶＭ２、ＶＭ３は、仮想マシンＶＭ１、ＶＭ２、ＶＭ３にそれぞれ対応するユーザＡ、ユーザＢ、ユーザＣに対して各種サービスを提供するように構成された仮想サーバとして機能する。
【００１６】
これら仮想マシンＶＭ１、ＶＭ２、ＶＭ３は、サーバ１００内の物理リソース１０１を共有する。物理リソース１０１は、通常、一つ以上の物理ＣＰＵ、一つ以上の物理メモリモジュールを含む物理メモリ、一つ以上の物理ストレージ、一つ以上の物理ネットワークインタフェースカード（物理ＮＩＣ）、等を含む。各物理ストレージは、ＮＡＮＤ型フラッシュメモリのような不揮発性メモリを記憶媒体として利用するストレージデバイスであってもよい。このストレージデバイスは、ソリッドステートドライブ（ＳＳＤ）であってもよいし、不揮発性メモリを各々が含む複数のストレージを含むフラッシュアレイであってもよい。
【００１７】
各仮想マシンＶＭは、仮想ＣＰＵ、仮想メモリ、仮想ストレージ（仮想ディスクとも云う）、および仮想ＮＩＣによって構成されてもよい。
【００１８】
図１においては、ユーザＡに提供される仮想マシンＶＭ１が、仮想ＣＰＵ２０１、仮想メモリ２０２、仮想ストレージ２０３、仮想ＮＩＣ２０４を含み、ユーザＢに提供される仮想マシンＶＭ２が、仮想ＣＰＵ２１１、仮想メモリ２１２、仮想ストレージ２１３、仮想ＮＩＣ２１４を含み、ユーザＣに提供される仮想マシンＶＭ３が、仮想ＣＰＵ２２１、仮想メモリ２２２、仮想ストレージ２２３、仮想ＮＩＣ２２４を含むケースが例示されている。
【００１９】
仮想マシン（仮想サーバ）を利用することを望むユーザは、利用したい仮想マシン（仮想サーバ）の性能、プロパティ等を指定することができる。より詳しくは、ユーザは、所望の性能（例えば、ＣＰＵスピード、ＣＰＵコア数）、所望のメモリ（ＤＲＡＭ）容量、所望のネットワーク性能（例えばＮＩＣの数）、所望のストレージ容量、使用すべきオペレーティングシステムの種類、使用すべきアプリケーションプログラムの種類、等を、指定することができる。
【００２０】
例えば、仮想マシンＶＭ１の作成時にユーザＡがある種類のオペレーティングシステムを選択したならば、この選択されたオペレーティングシステムのバイナリイメージが仮想マシンＶＭ１用の仮想ストレージ２０３にインストールされてもよい。
【００２１】
しかし、通常、仮想ストレージ２０３へのオペレーティングシステムのインストールには比較的多くの時間を要する。
【００２２】
したがって、サーバ１００においては、何種類かの仮想マシンイメージがテンプレートとして予め用意されていてもよい。
【００２３】
図１においては、ある種類のオペレーティングシステム（ＯＳ＃１）が仮想マシンイメージＡ（つまりテンプレート）としてインストールされたディスク１１５と、別の種類のオペレーティングシステム（ＯＳ＃２）が仮想マシンイメージＢ（つまり別のテンプレート）としてインストールされたディスク１１６とが予め用意されているケースが例示されている。
【００２４】
ユーザＡが仮想マシンイメージＡを選択したならば、オペレーティングシステム（ＯＳ＃１）のバイナリイメージ、つまりオペレーティングシステム（ＯＳ＃１）のインストール・イメージが、ディスク１１５から仮想マシンＶＭ１の仮想ストレージ２０３にコピーされる。
【００２５】
仮想マシンイメージＡは、オペレーティングシステム（ＯＳ＃１）のインストール・イメージのみならず、幾つかのアプリケーションプログラム（ＡＰＬ＃１、＃２、＃３）のインストール・イメージを含んでいてもよい。
【００２６】
仮想マシンイメージＢも、オペレーティングシステム（ＯＳ＃２）のインストール・イメージのみならず、幾つかのアプリケーションプログラム（ＡＰＬ＃４、＃５、＃６）のインストール・イメージを含んでいてもよい。
【００２７】
各ユーザは、テンプレートとして用意されている複数の仮想マシンイメージ（ここでは、仮想マシンイメージＡ、Ｂ）から任意の仮想マシンイメージを選択することができる。
【００２８】
例えば、もしユーザＡによって仮想マシンイメージＡが選択されたならば、仮想マシンイメージＡのクローン（オペレーティングシステム（ＯＳ＃１）、アプリケーションプログラム（ＡＰＬ＃１、＃２、＃３））がディスク１１５から仮想マシンＶＭ１の仮想ストレージ２０３にコピーされる。仮想ストレージ２０３にコピーされたオペレーティングシステム（ＯＳ＃１）は、仮想マシンＶＭ１用のゲストオペレーティングシステムとして実行される。換言すれば、仮想マシンＶＭ１は、仮想ストレージ２０３をアクセスして、仮想ストレージ２０３内のオペレーティングシステム（ＯＳ＃１）を実行する。
【００２９】
同様に、もしユーザＢによって仮想マシンイメージＡが選択されたならば、仮想マシンイメージＡのクローン（オペレーティングシステム（ＯＳ＃１）、アプリケーションプログラム（ＡＰＬ＃１、＃２、＃３））がディスク１１５から仮想マシンＶＭ２の仮想ストレージ２１３にコピーされる。仮想ストレージ２１３にコピーされたオペレーティングシステム（ＯＳ＃１）は、仮想マシンＶＭ２用のゲストオペレーティングシステムとして実行される。換言すれば、仮想マシンＶＭ２は、仮想ストレージ２１３をアクセスして、仮想ストレージ２１３内のオペレーティングシステム（ＯＳ＃１）を実行する。
【００３０】
もし、ユーザＣによって仮想マシンイメージＢが選択されたならば、仮想マシンイメージＢのクローン（オペレーティングシステム（ＯＳ＃２）、アプリケーションプログラム（ＡＰＬ＃４、＃５、＃６））がディスク１１６から仮想マシンＶＭ３の仮想ストレージ２２３にコピーされる。仮想ストレージ２２３にコピーされたオペレーティングシステム（ＯＳ＃２）は、仮想マシンＶＭ３用のゲストオペレーティングシステムとして実行される。換言すれば、仮想マシンＶＭ３は、仮想ストレージ２２３をアクセスして、仮想ストレージ２２３内のオペレーティングシステム（ＯＳ＃２）を実行する。
【００３１】
このように、仮想マシンイメージのクローンを仮想ストレージにコピーするという仕組みを利用することにより、オペレーティングシステムを仮想ストレージに実際にインストールする作業を行う場合よりも短い時間で仮想マシンＶＭのセットアップを完了することが可能となる。
【００３２】
しかし、通常、各仮想マシンイメージは、例えば数１０Ｇバイトといった比較的大きなサイズを有する。したがって、仮想マシンイメージのクローンをディスク１１５（またはディスク１１６）から仮想ストレージにコピーする処理にもある程度の時間を要する。
【００３３】
このため、あるユーザが仮想マシンのレンタルサービスを契約してからこの仮想マシンが実際に利用できるようになるまでの時間をさらに短縮するための新たな機能が要求される。
【００３４】
そこで、図２に示されているように、各仮想マシンがアクセス先切り換え部を含む構成が、図１のサーバ１００に適用されてもよい。
【００３５】
図２のサーバ１００の構成においては、仮想マシンＶＭ１は、アクセス先切り換え部２０５を含む。同様に、仮想マシンＶＭ２は、アクセス先切り換え部２１５を含み、仮想マシンＶＭ３は、アクセス先切り換え部２２５を含む。
【００３６】
各アクセス先切り換え部は、対応する仮想ＣＰＵによって要求されたデータが対応する仮想ストレージに存在しない場合には、この仮想ストレージの代わりに、ディスク１１５またはディスク１１６をアクセスする。
【００３７】
例えば、仮想マシンＶＭ１においては、仮想ストレージ２０３内にアクセス対象のデータ（例えば、オペレーティングシステム（ＯＳ＃１）のバイナリイメージ）が存在しない場合には、アクセス先切り換え部２０５は、仮想ＣＰＵ２０１からのリード要求に応じて、ディスク１１５からアクセス対象のデータ（例えば、オペレーティングシステム（ＯＳ＃１）のバイナリイメージの一部）を読み出す。
【００３８】
これにより、ディスク１１５内のデータを仮想ストレージにコピーすること無く、ディスク１１５内のデータを利用することが可能となる。換言すれば、オペレーティングシステムのバイナリイメージを仮想ストレージにコピーすること無く、仮想マシンの利用を即座に開始することが可能となる。
【００３９】
本実施形態においては、ディスク１１５（またはディスク１１６）と、仮想ストレージそれぞれに対応する複数の領域と、アクセス先切り換え部に対応する機能とを、サーバ１００に接続されたメモリシステムによって提供することができる。
【００４０】
このメモリシステムは、不揮発性メモリにデータを書き込み、不揮発性メモリからデータを読み出すように構成された半導体ストレージデバイスである。このメモリシステムは、ソリッドステートドライブ（ＳＳＤ）であってもよいし、不揮発性メモリを各々が含む複数のストレージを含むフラッシュアレイであってもよい。以下では、この例に限定されないが、メモリシステムが、図３に示されているように、例えば、ＮＡＮＤフラッシュ技術ベースのソリッドステートドライブ（ＳＳＤ）３として実現されている場合を想定する。
【００４１】
このＳＳＤ３は、図２のサーバ１００にこのサーバ１００の物理ストレージとして適用される。サーバ１００は、ＳＳＤ３に対してリード要求、ライト要求、他の様々な要求を送出するホスト計算機（「ホスト」または「ホストデバイス」とも云う）として機能する。
【００４２】
ＳＳＤ３は、不揮発性メモリを含み、この不揮発性メモリ内の複数の領域を管理する。例えば、ＳＳＤ３においては、不揮発性メモリは、領域＃１、領域＃２、…領域＃３１、領域＃３２、領域＃３３に論理的に分割されてもよい。
【００４３】
領域＃１は、他の領域によって参照されるデータ（オリジナルデータ）を格納するための領域である。
【００４４】
オリジナルデータは、上述の仮想マシンイメージＡであってもよい。この場合、この領域＃１においては、少なくとも、オペレーティングシステム（ＯＳ＃１）のバイナリイメージが格納される。このオペレーティングシステム（ＯＳ＃１）は、ある一つ以上の仮想マシン用のゲストオペレーティングシステムとして利用される。さらに、アプリケーションプログラム（ＡＰＬ＃１、＃２、＃３）のバイナリイメージも領域＃１に格納されてもよい。
【００４５】
領域＃２も、他の領域によって参照される別のデータ（別のオリジナルデータ）を格納するための領域である。
【００４６】
別のオリジナルデータは、上述の仮想マシンイメージＢであってもよい。この場合、この領域＃２においては、少なくとも、オペレーティングシステム（ＯＳ＃２）のバイナリイメージが格納される。このオペレーティングシステム（ＯＳ＃２）も、ある一つ以上の仮想マシン用のゲストオペレーティングシステムとして利用される。さらに、アプリケーションプログラム（ＡＰＬ＃４、＃５、＃６）のバイナリイメージも領域＃２に格納されてもよい。
【００４７】
領域＃３１は、領域＃１のデータ（オリジナルデータ）を参照する領域である。
【００４８】
領域＃１がオペレーティングシステム（ＯＳ＃１）をオリジナルデータとして格納している場合には、領域＃３１は、オペレーティングシステム（ＯＳ＃１）を実行する仮想マシンＶＭ１によってアクセスされる仮想ストレージ（仮想ディスク）として利用される。
【００４９】
領域＃１がオペレーティングシステム（ＯＳ＃１）およびアプリケーションプログラム（ＡＰＬ＃１、＃２、＃３）をオリジナルデータとして格納している場合には、領域＃３１は、オペレーティングシステム（ＯＳ＃１）およびアプリケーションプログラム（ＡＰＬ＃１、＃２、＃３）を実行する仮想マシンＶＭ１によってアクセスされる仮想ストレージ（仮想ディスク）として利用される。
【００５０】
領域＃３２も、領域＃１のデータ（オリジナルデータ）を参照する領域である。
【００５１】
領域＃１がオペレーティングシステム（ＯＳ＃１）をオリジナルデータとして格納している場合には、領域＃３２は、オペレーティングシステム（ＯＳ＃１）を実行する仮想マシンＶＭ２によってアクセスされる仮想ストレージ（仮想ディスク）として利用される。
【００５２】
領域＃１がオペレーティングシステム（ＯＳ＃１）およびアプリケーションプログラム（ＡＰＬ＃１、＃２、＃３）をオリジナルデータとして格納している場合には、領域＃３２は、オペレーティングシステム（ＯＳ＃１）およびアプリケーションプログラム（ＡＰＬ＃１、＃２、＃３）を実行する仮想マシンＶＭ２によってアクセスされる仮想ストレージ（仮想ディスク）として利用される。
【００５３】
このように、領域＃１に存在するオリジナルデータ（テンプレート）は、他の複数の領域（ここでは、領域＃３１、領域＃３２）によって共有可能である。
【００５４】
領域＃３３は、領域＃２のデータ（別のオリジナルデータ）を参照する領域である。
【００５５】
領域＃２がオペレーティングシステム（ＯＳ＃２）を別のオリジナルデータとして格納している場合には、領域＃３３は、オペレーティングシステム（ＯＳ＃２）を実行する仮想マシンＶＭ３によってアクセスされる仮想ストレージ（仮想ディスク）として利用される。
【００５６】
領域＃２がオペレーティングシステム（ＯＳ＃２）およびアプリケーションプログラム（ＡＰＬ＃４、＃５、＃６）をオリジナルデータとして格納している場合には、領域＃３３は、オペレーティングシステム（ＯＳ＃２）およびアプリケーションプログラム（ＡＰＬ＃４、＃５、＃６）を実行する仮想マシンＶＭ３によってアクセスされる仮想ストレージ（仮想ディスク）として利用される。
【００５７】
これら複数の領域（領域＃１、領域＃２、…領域＃３１、領域＃３２、領域＃３３）には、複数の論理アドレス空間がそれぞれ割り当てられる。論理アドレスとしては、論理ブロックアドレス（ＬＢＡ）が使用されてもよい。
【００５８】
仮想マシンＶＭ１は、領域＃３１の論理アドレス空間を通して領域＃３１をアクセスする。仮想マシンＶＭ２は、領域＃３２の論理アドレス空間を通して領域＃３２をアクセスする。仮想マシンＶＭ３は、領域＃３３の論理アドレス空間を通して領域＃３３をアクセスする。
【００５９】
各領域は、ネームスペースによって実現されてもよい。この場合、ＮＡＮＤ型フラッシュメモリのような不揮発性メモリを論理的に複数の領域に分割するために、複数のネームスペースが利用される。各ネームスペースは、不揮発性メモリ内の一種の領域（記憶領域）であり、論理アドレス空間（ＬＢＡ空間）が割り当てられる。
【００６０】
個々のネームスペースは、これらネームスペースの識別子によって識別される。各領域がネームスペースによって実現された場合、各領域には、ＬＢＡ範囲（ＬＢＡ０〜ＬＢＡｎ−１）が割り当てられる。ＬＢＡ範囲のサイズ（つまりＬＢＡの数）は、領域（ネームスペース）毎に可変である。各ＬＢＡ範囲は、ＬＢＡ０から始まる。
【００６１】
図４は、複数の領域とこれら領域に対応する論理アドレス空間（ＬＢＡ空間）とこれら領域に対応するルックアップテーブルとの関係を示す。
【００６２】
ネームスペースＮＳ＃１に対応する領域＃１には、０〜ｎ−１の論理アドレス空間（ＬＢＡ空間）Ａ１が割り当てられている。ネームスペースＮＳ＃２に対応する領域＃２には、０〜ｎ−１の論理アドレス空間（ＬＢＡ空間）Ａ２が割り当てられている。ネームスペースＮＳ＃３１に対応する領域＃３１には、０〜ｎ−１の論理アドレス空間（ＬＢＡ空間）Ａ３１が割り当てられている。ネームスペースＮＳ＃３２に対応する領域＃３２には、０〜ｎ−１の論理アドレス空間（ＬＢＡ空間）Ａ３２が割り当てられている。ネームスペースＮＳ＃３３に対応する領域＃３３には、０〜ｎ−１の論理アドレス空間（ＬＢＡ空間）Ａ３３が割り当てられている。
【００６３】
本実施形態では、ルックアップテーブルＬＵＴは、領域毎に、つまりネームスペース毎に分割されている。つまり、領域＃１、領域＃２、…領域＃３１、領域＃３２、領域＃３３にそれぞれ対応するルックアップテーブルＬＵＴ＃１、ＬＵＴ＃２、…ＬＵＴ＃３１、ＬＵＴ＃３２、ＬＵＴ＃３３が、ＳＳＤ３によって管理される。
【００６４】
ルックアップテーブルＬＵＴ＃１は、領域＃１の論理アドレス（ＬＢＡ）それぞれに対応する不揮発性メモリ内の物理記憶位置の物理アドレスそれぞれを管理するための論理物理アドレス変換テーブル（ｌｏｇｉｃａｌ−ｔｏ−ｐｈｙｓｉｃａｌ  ａｄｄｒｅｓｓ  ｔｒａｎｓｌａｔｉｏｎ  ｔａｂｌｅ）である。このルックアップテーブルＬＵＴ＃１は、領域＃１の論理アドレス（ＬＢＡ）それぞれと領域＃１に割り当てられた不揮発性メモリ内の物理記憶位置の物理アドレスそれぞれとの間のマッピングを管理するために使用される。
【００６５】
領域＃１のある論理アドレス（あるＬＢＡ）を指定するライト要求（ライトコマンド）をサーバ１００（ホスト計算機）から受信した場合、ＳＳＤ３は、書き込むべきデータ（ライトデータ）を領域＃１に書き込む。そして、ＳＳＤ３は、ライトデータが書き込まれた領域＃１内の物理記憶位置を示す物理アドレスがこのＬＢＡにマッピングされるように、ルックアップテーブルＬＵＴ＃１を更新する。
【００６６】
領域＃１のある論理アドレス（あるＬＢＡ）を指定するリード要求（リードコマンド）をサーバ１００（ホスト計算機）から受信した場合、ＳＳＤ３は、ルックアップテーブルＬＵＴ＃１を参照してこのＬＢＡに対応する物理アドレスをルックアップテーブルＬＵＴ＃１から取得する。そして、ＳＳＤ３は、この取得された物理アドレスによって指定される物理記憶位置からデータを読み出す。
【００６７】
また、ルックアップテーブルＬＵＴ＃１は、領域＃１のフリースペースを増やすためのガベージコレクションにおいても利用される。領域＃１のガベージコレクションにおいては、ＳＳＤ３は、この領域＃１に割り当てられている不揮発性メモリ内のブロックそれぞれからガベージコレクション対象の１以上のブロックを選択し、この選択された各ブロック内の有効データを、この領域＃１に割り当てられた別のブロック（フリーブロック）にコピーする。そして、ＳＳＤ３は、コピーされたデータに対応するＬＢＡそれぞれにコピー先物理記憶位置を示す物理アドレスがマッピングされるように、ルックアップテーブルＬＵＴ＃１を更新する。
【００６８】
ルックアップテーブルＬＵＴ＃２は、領域＃２の論理アドレス（ＬＢＡ）それぞれに対応する不揮発性メモリ内の物理記憶位置の物理アドレスそれぞれを管理するための論理物理アドレス変換テーブルである。このルックアップテーブルＬＵＴ＃２は、領域＃２の論理アドレス（ＬＢＡ）それぞれと領域＃２に割り当てられた不揮発性メモリ内の物理記憶位置の物理アドレスそれぞれとの間のマッピングを管理するために使用される。
【００６９】
領域＃２のある論理アドレス（あるＬＢＡ）を指定するライト要求（ライトコマンド）をサーバ１００（ホスト計算機）から受信した場合、ＳＳＤ３は、書き込むべきデータ（ライトデータ）を領域＃２に書き込む。そして、ＳＳＤ３は、ライトデータが書き込まれた領域＃２内の物理記憶位置を示す物理アドレスがこのＬＢＡにマッピングされるように、ルックアップテーブルＬＵＴ＃２を更新する。
【００７０】
領域＃２のある論理アドレス（あるＬＢＡ）を指定するリード要求（リードコマンド）をサーバ１００（ホスト計算機）から受信した場合、ＳＳＤ３は、ルックアップテーブルＬＵＴ＃２を参照してこのＬＢＡに対応する物理アドレスをルックアップテーブルＬＵＴ＃２から取得する。そして、ＳＳＤ３は、この取得された物理アドレスによって指定される物理記憶位置からデータを読み出す。
【００７１】
また、ルックアップテーブルＬＵＴ＃２は、領域＃２のフリースペースを増やすためのガベージコレクションにおいても利用される。領域＃２のガベージコレクションにおいては、ＳＳＤ３は、この領域＃２に割り当てられている不揮発性メモリ内のブロックそれぞれからガベージコレクション対象の１以上のブロックを選択し、この選択された各ブロック内の有効データを、この領域＃２に割り当てられた別のブロック（フリーブロック）にコピーする。そして、ＳＳＤ３は、コピーされたデータに対応するＬＢＡそれぞれにコピー先物理記憶位置を示す物理アドレスがマッピングされるように、ルックアップテーブルＬＵＴ＃２を更新する。
【００７２】
ルックアップテーブルＬＵＴ＃３１は、領域＃３１の論理アドレス（ＬＢＡ）それぞれに対応する不揮発性メモリ内の物理記憶位置の物理アドレスそれぞれを管理するための論理物理アドレス変換テーブルである。このルックアップテーブルＬＵＴ＃３１は、領域＃３１の論理アドレス（ＬＢＡ）それぞれと領域＃３１に割り当てられた不揮発性メモリ内の物理記憶位置の物理アドレスそれぞれとの間のマッピングを管理するために使用される。
【００７３】
領域＃３１のある論理アドレス（あるＬＢＡ）を指定するリード要求（リードコマンド）をサーバ１００（ホスト計算機の仮想マシンＶＭ１）から受信した場合、ＳＳＤ３は、ルックアップテーブルＬＵＴ＃３１を参照してこのＬＢＡに対応する物理アドレスをルックアップテーブルＬＵＴ＃３１から取得する。そして、ＳＳＤ３は、この取得された物理アドレスによって指定される物理記憶位置からデータを読み出す。
【００７４】
本実施形態では、仮想マシンＶＭ１内の上述のアクセス先切り換え部２０５を実現するために、仮想マシンＶＭ１の作成時に、ルックアップテーブルＬＵＴ＃１の内容がルックアップテーブルＬＵＴ＃３１にコピーされる。したがって、仮想マシンＶＭ１の作成直後の初期状態においては、ルックアップテーブルＬＵＴ＃３１は、ルックアップテーブルＬＵＴ＃１の内容と同じ内容を保持する。つまり、ルックアップテーブルＬＵＴ＃３１内の物理アドレスそれぞれは、領域＃３１内の物理記憶位置ではなく、領域＃１内の物理記憶位置を指す。このため、領域＃３１の各論理アドレスへのリードアクセスは、領域＃１へ向け直される。
【００７５】
したがって、領域＃３１のある論理アドレス（あるＬＢＡ）を指定するリード要求（リードコマンド）をサーバ１００（仮想マシンＶＭ１）から受信した場合、ＳＳＤ３は、ルックアップテーブルＬＵＴ＃３１に基づいて、オリジナルデータ（例えば、オペレーティングシステム（ＯＳ＃１）の一部）を領域＃１から読み出してサーバ１００（仮想マシンＶＭ１）に返す。したがって、領域＃１内のオリジナルデータ（例えば、オペレーティングシステム（ＯＳ＃１）等）を領域＃３１にコピーすること無く、領域＃３１の論理アドレス空間を通して領域＃１内に格納されているオリジナルデータ全てを利用することが可能となる。
【００７６】
領域＃３１のある論理アドレス（あるＬＢＡ）を指定するライト要求（ライトコマンド）をサーバ１００（ホスト計算機の仮想マシンＶＭ１）から受信した場合、ＳＳＤ３は、書き込むべきデータ（ライトデータ）を領域＃３１（領域＃３１に割り当てられたブロック）に書き込む。そして、ＳＳＤ３は、ライトデータが書き込まれた領域＃３１内の物理記憶位置を示す物理アドレスがこのＬＢＡにマッピングされるように、ルックアップテーブルＬＵＴ＃３１を更新する。
【００７７】
このように、領域＃３１へのデータ書き込みは、領域＃１へ向け直されず、領域＃３１にデータが書き込まれる。したがって、領域＃１内のオリジナルデータは更新されず、領域＃３１のデータのみが更新される。領域＃１内のオリジナルデータは元の状態に維持され続ける。よって、たとえ領域＃１内のオリジナルデータ（例えば、仮想マシンイメージのテンプレート）が複数のユーザによって参照（共有）されている場合であっても、あるユーザに対応する領域内のデータ更新が、他のユーザに対応する領域のデータに影響を与えてしまうという矛盾（問題）が生じることはない。
【００７８】
ルックアップテーブルＬＵＴ＃３１においては、この書き込まれたデータに対応する論理アドレスには領域＃３１内の物理記憶位置の物理アドレスがマッピングされる。したがって、この論理アドレスを指定する後続のリード要求は、領域＃１へ向け直されず、領域＃３１からこの書き込まれたデータが読み出される。
【００７９】
したがって、領域＃３１に存在しないデータ（オリジナルデータ、例えば、オペレーティングシステム（ＯＳ＃１））を領域＃１から読み出すことができ、且つ、新たなライトデータを、またはオリジナルデータの一部を書き替えるための更新データを、領域＃３１に書き込むことができる。例えば、仮想マシンＶＭ１によって実行されるオペレーティングシステム（ＯＳ＃１）の一部（ファイル等）をアップデートする必要がある場合には、オペレーティングシステム（ＯＳ＃１）の更新データ部分、つまり更新されたファイルが、領域＃３１に書き込まれる。また、仮想マシンＶＭ１よって実行されるアプリケーションによって作成されたユーザデータも領域＃３１に書き込まれる。
【００８０】
また、領域＃３１にデータが書き込まれると、このデータに対応する論理アドレスには領域＃３１内の物理記憶位置の物理アドレスがマッピングされる。したがって、あるデータが領域＃３１に書き込まれた後にこのデータの論理アドレスを指定する後続のリード要求（リードコマンド）をサーバ１００（ホスト計算機の仮想マシンＶＭ１）から受信した場合、ＳＳＤ３は、ルックアップテーブルＬＵＴ＃３１に基づいて、このデータを領域＃３１から読み出してサーバ１００（仮想マシンＶＭ１）に返す。よって、領域＃３１に新たに書き込まれたデータ、および領域＃３１内の更新されたデータを、領域＃３１から正しく読み出すことができる。
【００８１】
ルックアップテーブルＬＵＴ＃３１は、領域＃３１のフリースペースを増やすためのガベージコレクションにおいても利用される。領域＃３１のガベージコレクションにおいては、ＳＳＤ３は、この領域＃３１に割り当てられている不揮発性メモリ内のブロックそれぞれからガベージコレクション対象の１以上のブロックを選択し、この選択された各ブロック内の有効データを、この領域＃３１に割り当てられた別のブロック（フリーブロック）にコピーする。そして、ＳＳＤ３は、コピーされたデータに対応するＬＢＡそれぞれにコピー先物理記憶位置を示す物理アドレスがマッピングされるように、ルックアップテーブルＬＵＴ＃３１を更新する。
【００８２】
ルックアップテーブルＬＵＴ＃３２は、領域＃３２の論理アドレス（ＬＢＡ）それぞれに対応する不揮発性メモリ内の物理記憶位置の物理アドレスそれぞれを管理するための論理物理アドレス変換テーブルである。このルックアップテーブルＬＵＴ＃３２は、領域＃３２の論理アドレス（ＬＢＡ）それぞれと領域＃３２に割り当てられた不揮発性メモリ内の物理記憶位置の物理アドレスそれぞれとの間のマッピングを管理するために使用される。
【００８３】
領域＃３２のある論理アドレス（あるＬＢＡ）を指定するリード要求（リードコマンド）をサーバ１００（ホスト計算機の仮想マシンＶＭ２）から受信した場合、ＳＳＤ３は、ルックアップテーブルＬＵＴ＃３２を参照してこのＬＢＡに対応する物理アドレスをルックアップテーブルＬＵＴ＃３２から取得する。そして、ＳＳＤ３は、この取得された物理アドレスによって指定される物理記憶位置からデータを読み出す。
【００８４】
仮想マシンＶＭ２内の上述のアクセス先切り換え部２１５を実現するために、仮想マシンＶＭ２の作成時には、ルックアップテーブルＬＵＴ＃１の内容がルックアップテーブルＬＵＴ＃３２にコピーされる。したがって、仮想マシンＶＭ２の初期状態においては、ルックアップテーブルＬＵＴ＃３２も、ルックアップテーブルＬＵＴ＃１の内容と同じ内容を保持する。つまり、ルックアップテーブルＬＵＴ＃３２内の物理アドレスそれぞれは、領域＃３２内の物理記憶位置ではなく、領域＃１内の物理記憶位置を指す。このため、領域＃３２へのリードアクセスは、領域＃１へ向け直される。
【００８５】
したがって、領域＃３２のある論理アドレス（あるＬＢＡ）を指定するリード要求（リードコマンド）をサーバ１００（ホスト計算機の仮想マシンＶＭ２）から受信した場合、ＳＳＤ３は、ルックアップテーブルＬＵＴ＃３２に基づいて、オリジナルデータ（例えば、オペレーティングシステム（ＯＳ＃１）の一部）を領域＃１から読み出してサーバ１００（仮想マシンＶＭ２）に返す。したがって、領域＃１内のオリジナルデータ（例えば、オペレーティングシステム（ＯＳ＃１）等）を領域＃３２にコピーすること無く、領域＃３２の論理アドレス空間を通して領域＃１内のオリジナルデータ全てを利用することが可能となる。
【００８６】
領域＃３２のある論理アドレス（あるＬＢＡ）を指定するライト要求（ライトコマンド）をサーバ１００（ホスト計算機の仮想マシンＶＭ１）から受信した場合、ＳＳＤ３は、書き込むべきデータ（ライトデータ）を領域＃３２（領域＃３２に割り当てられたブロック）に書き込む。そして、ＳＳＤ３は、ライトデータが書き込まれた領域＃３２内の物理記憶位置を示す物理アドレスがこのＬＢＡにマッピングされるように、ルックアップテーブルＬＵＴ＃３２を更新する。
【００８７】
このように、領域＃３２へのデータ書き込みは、領域＃１へ向け直されず、領域＃３２にデータが書き込まれる。ルックアップテーブルＬＵＴ＃３２においては、この書き込まれたデータに対応する論理アドレスには領域＃３２内の物理記憶位置の物理アドレスがマッピングされる。したがって、この論理アドレスを指定する後続のリード要求は、領域＃１へ向け直されず、領域＃３２からこの書き込まれたデータが読み出される。
【００８８】
したがって、領域＃３２に存在しないデータ（オリジナルデータ、例えば、オペレーティングシステム（ＯＳ＃１））を領域＃１から読み出すことができ、且つ、新たなライトデータを、またはオリジナルデータの一部を書き替えるための更新データを、領域＃３２に書き込むことができる。例えば、仮想マシンＶＭ２によって実行されるオペレーティングシステム（ＯＳ＃１）の一部（ファイル等）をアップデートする必要がある場合には、オペレーティングシステム（ＯＳ＃１）の更新データ部分、つまり更新されたファイルが、領域＃３２に書き込まれる。また、仮想マシンＶＭ２よって実行されるアプリケーションによって作成されたユーザデータも領域＃３２に書き込まれる。
【００８９】
また、領域＃３２にデータが書き込まれると、このデータに対応する論理アドレスには領域＃３２内の物理記憶位置の物理アドレスがマッピングされる。したがって、あるデータが領域＃３２に書き込まれた後にこのデータの論理アドレスを指定する後続のリード要求（リードコマンド）をサーバ１００（ホスト計算機の仮想マシンＶＭ２）から受信した場合、ＳＳＤ３は、ルックアップテーブルＬＵＴ＃３２に基づいて、このデータを領域＃３２から読み出してサーバ１００（仮想マシンＶＭ２）に返す。
【００９０】
ルックアップテーブルＬＵＴ＃３２は、領域＃３２のフリースペースを増やすためのガベージコレクションにおいても利用される。領域＃３２のガベージコレクションにおいては、ＳＳＤ３は、この領域＃３２に割り当てられている不揮発性メモリ内のブロックそれぞれからガベージコレクション対象の１以上のブロックを選択し、この選択された各ブロック内の有効データを、この領域＃３２に割り当てられた別のブロック（フリーブロック）にコピーする。そして、ＳＳＤ３は、コピーされたデータに対応するＬＢＡそれぞれにコピー先物理記憶位置を示す物理アドレスがマッピングされるように、ルックアップテーブルＬＵＴ＃３２を更新する。
【００９１】
ルックアップテーブルＬＵＴ＃３３は、領域＃３３の論理アドレス（ＬＢＡ）それぞれに対応する不揮発性メモリ内の物理記憶位置の物理アドレスそれぞれを管理するための論理物理アドレス変換テーブルである。このルックアップテーブルＬＵＴ＃３３は、領域＃３３の論理アドレス（ＬＢＡ）それぞれと領域＃３３に割り当てられた不揮発性メモリ内の物理記憶位置の物理アドレスそれぞれとの間のマッピングを管理するために使用される。
【００９２】
領域＃３３のある論理アドレス（あるＬＢＡ）を指定するリード要求（リードコマンド）をサーバ１００（ホスト計算機の仮想マシンＶＭ３）から受信した場合、ＳＳＤ３は、ルックアップテーブルＬＵＴ＃３３を参照してこのＬＢＡに対応する物理アドレスをルックアップテーブルＬＵＴ＃３３から取得する。そして、ＳＳＤ３は、この取得された物理アドレスによって指定される物理記憶位置からデータを読み出す。
【００９３】
仮想マシンＶＭ３内の上述のアクセス先切り換え部２２５を実現するために、仮想マシンＶＭ３の作成時には、ルックアップテーブルＬＵＴ＃２の内容がルックアップテーブルＬＵＴ＃３３にコピーされる。したがって、仮想マシンＶＭ３の初期状態においては、ルックアップテーブルＬＵＴ＃３３は、ルックアップテーブルＬＵＴ＃２の内容と同じ内容を保持する。つまり、ルックアップテーブルＬＵＴ＃３３内の物理アドレスそれぞれは、領域＃３３内の物理記憶位置ではなく、領域＃２内の物理記憶位置を指す。このため、領域＃３３へのリードアクセスは、領域＃２へ向け直される。
【００９４】
したがって、領域＃３３のある論理アドレス（あるＬＢＡ）を指定するリード要求（リードコマンド）をサーバ１００（ホスト計算機の仮想マシンＶＭ３）から受信した場合、ＳＳＤ３は、ルックアップテーブルＬＵＴ＃３３に基づいて、別のオリジナルデータ（例えば、オペレーティングシステム（ＯＳ＃２）の一部）を領域＃２から読み出してサーバ１００（仮想マシンＶＭ３）に返す。したがって、領域＃２内のオリジナルデータ（例えば、オペレーティングシステム（ＯＳ＃２）等）を領域＃３３にコピーすること無く、領域＃３３の論理アドレス空間を通して領域＃２内のオリジナルデータ全てを利用することが可能となる。
【００９５】
領域＃３３のある論理アドレス（あるＬＢＡ）を指定するライト要求（ライトコマンド）をサーバ１００（ホスト計算機の仮想マシンＶＭ３）から受信した場合、ＳＳＤ３は、書き込むべきデータ（ライトデータ）を領域＃３３（領域＃３３に割り当てられたブロック）に書き込む。そして、ＳＳＤ３は、ライトデータが書き込まれた領域＃３３内の物理記憶位置を示す物理アドレスがこのＬＢＡにマッピングされるように、ルックアップテーブルＬＵＴ＃３３を更新する。
【００９６】
このように、領域＃３３へのデータ書き込みは、領域＃２へ向け直されず、領域＃３３にデータが書き込まれる。ルックアップテーブルＬＵＴ＃３３においては、この書き込まれたデータに対応する論理アドレスには領域＃３３内の物理記憶位置の物理アドレスがマッピングされる。したがって、この論理アドレスを指定する後続のリード要求は、領域＃２へ向け直されず、領域＃３３からこの書き込まれたデータが読み出される。
【００９７】
したがって、領域＃３３に存在しないデータ（別のオリジナルデータ、例えば、オペレーティングシステム（ＯＳ＃２））を領域＃２から読み出すことができ、且つ、新たなライトデータを、または別のオリジナルデータの一部を書き替えるための更新データを、領域＃３３に書き込むことができる。例えば、仮想マシンＶＭ３によって実行されるオペレーティングシステム（ＯＳ＃２）の一部（ファイル等）をアップデートする必要がある場合には、オペレーティングシステム（ＯＳ＃２）の更新データ部分、つまり更新されたファイルが、領域＃３３に書き込まれる。また、仮想マシンＶＭ３よって実行されるアプリケーションによって作成されたユーザデータも領域＃３３に書き込まれる。
【００９８】
また、領域＃３３にデータが書き込まれると、このデータに対応する論理アドレスには領域＃３３内の物理記憶位置の物理アドレスがマッピングされる。したがって、あるデータが領域＃３３に書き込まれた後にこのデータの論理アドレスを指定する後続のリード要求（リードコマンド）をサーバ１００（ホスト計算機の仮想マシンＶＭ３）から受信した場合、ＳＳＤ３は、ルックアップテーブルＬＵＴ＃３３に基づいて、このデータを領域＃３３から読み出してサーバ１００（仮想マシンＶＭ３）に返す。
【００９９】
ルックアップテーブルＬＵＴ＃３３は、領域＃３３のフリースペースを増やすためのガベージコレクションにおいても利用される。領域＃３３のガベージコレクションにおいては、ＳＳＤ３は、この領域＃３３に割り当てられている不揮発性メモリ内のブロックそれぞれからガベージコレクション対象の１以上のブロックを選択し、この選択された各ブロック内の有効データを、この領域＃３３に割り当てられた別のブロック（フリーブロック）にコピーする。そして、ＳＳＤ３は、コピーされたデータに対応するＬＢＡそれぞれにコピー先物理記憶位置を示す物理アドレスがマッピングされるように、ルックアップテーブルＬＵＴ＃３３を更新する。
【０１００】
なお、領域＃１（または領域＃２）に書き込まれるデータは仮想マシンイメージに限定されず、他の領域から参照される任意のデータが領域＃１（または領域＃２）に書き込まれてもよい。例えば、共有ファイルのような共有データが領域＃１（または領域＃２）に書き込まれてもよい。
【０１０１】
図５は、領域＃１にオペレーティングシステム（ＯＳ＃１）のバイナリイメージを書き込む動作と領域＃１を書き込み禁止モード（リードオンリーモード）に設定する動作とを示す。
【０１０２】
（１）サーバ１００（ホスト計算機）の管理者の操作に基づいて、サーバ１００は、ネームスペースＮＳ＃１に対応する領域＃１にオリジナルデータ（例えば、仮想マシンイメージＡ）を書き込むための幾つかのライト要求をＳＳＤ３に送出する。これらライト要求の各々は、ネームスペースＮＳ＃１の識別子（ＮＳＩＤ１）、開始ＬＢＡ、転送長とを含む。開始ＬＢＡは、ライトデータが書き込まれるべき最初のＬＢＡを示す。転送長は、ライトデータのデータ長を示す。
【０１０３】
ＳＳＤ３は、オリジナルデータ、例えば、仮想マシンイメージＡ（オペレーティングシステム（ＯＳ＃１）のバイナリイメージ、アプリケーションプログラム（ＡＰＬ＃１〜＃３）のバイナリイメージ）を領域＃１に書き込む。この場合、オペレーティングシステム（ＯＳ＃１）およびアプリケーションプログラム（ＡＰＬ＃１〜＃３）のインストール・イメージが、あるディスクから領域＃１にコピーされてもよいし、オペレーティングシステム（ＯＳ＃１）およびアプリケーションプログラム（ＡＰＬ＃１〜＃３）を領域＃１にインストールする動作が実行されてもよい。
【０１０４】
（２）ＳＳＤ３は、オリジナルデータ（例えば、仮想マシンイメージＡ）が書き込まれた領域＃１内の複数の物理記憶位置を示す複数の物理アドレスがこの仮想マシンイメージＡに対応する複数のＬＢＡにマッピングされるように、ＮＳＩＤ１に対応するＬＵＴ＃１を更新する。
【０１０５】
（３）オリジナルデータ（例えば、仮想マシンイメージＡ）の書き込み（インストール）が完了した後、ＳＳＤ３は、領域＃１を、領域＃１への書き込みが禁止されるリードオンリーモード（書き込み禁止モード）に設定してもよい。この場合、領域＃１は、読み出しおよび書き込みの双方が許可されたモードから、リードオンリーモード（書き込み禁止モード）に遷移する。これにより、オリジナルデータ（例えば、仮想マシンイメージＡ）の書き込み（インストール）が完了した後は、領域＃１への新たなデータの書き込み／領域＃１内のデータの書き換えは実行されない。したがって、領域＃１に割り当てられた不揮発性メモリ内のブロックそれぞれの書き換え回数（プログラム／イレーズサイクルの数）は、仮想ストレージとして利用される他の領域よりも少ない値に維持される。
【０１０６】
図６は、領域＃３１を制御する動作を示す。
【０１０７】
（４）サーバ１００（ホスト計算機）の管理者の操作に基づいて、サーバ１００は、論理物理アドレス変換テーブルをコピーするためのコピー要求（コピーコマンド）をＳＳＤ３に送出する。このコピー要求は、コピー元領域（コピー元ＬＵＴ）を指定するコピー元パラメータと、コピー先領域（コピー先ＬＵＴ）を指定するコピー先パラメータとを含む。オリジナルデータ（ここでは、仮想マシンイメージＡ）を参照する仮想マシンＶＭ１用の仮想ストレージをネームスペース＃３１に対応する領域＃３１に作成すべきケースにおいては、サーバ１００は、ネームスペース＃１の識別子（ＮＳＩＤ１）を指定するコピー元パラメータと、ネームスペース＃３１の識別子（ＮＳＩＤ３１）を指定するコピー先パラメータとを含むコピー要求（コピーコマンド）を、ＳＳＤ３に送信する。このコピーコマンドを受信すると、ＳＳＤ３は、コピー元パラメータによって指定されるＬＵＴ＃１の内容（領域＃１の論理アドレスそれぞれにマッピングされている物理アドレスの集合）を、コピー先パラメータによって指定されるＬＵＴ＃３１にコピーする。このコピーが完了すると、仮想マシンＶＭ１の利用が可能となる。通常、各ＬＵＴの容量は、対応する領域の容量の１／１０００程度である。したがって、ＬＵＴのコピーに要する時間は仮想マシンイメージＡをコピーに要する時間の１／１０００程度であり、ＬＵＴのコピーは瞬時に完了する。したがって、仮想マシンＶＭ１の利用を即座に開始することが可能となる。
【０１０８】
（５）サーバ１００（ホスト計算機の仮想マシンＶＭ１）は、その仮想マシンＶＭ１用の仮想ストレージからオペレーティングシステム（ＯＳ＃１）をブートするために、領域＃３１のＬＢＡを各々指定する多数のリード要求（リードコマンド）をＳＳＤ３に送出する。これら各リード要求は、ネームスペースＮＳ＃３１の識別子（ＮＳＩＤ３１）、開始ＬＢＡ、転送長とを含む。
【０１０９】
（６）一つのリード要求を受信すると、ＳＳＤ３は、ＮＳＩＤ３１に対応するＬＵＴ＃３１を参照して、リード要求に含まれる開始ＬＢＡに対応する物理アドレスをＬＵＴ＃３１から取得する。
【０１１０】
（７）そして、ＳＳＤ３は、この取得された物理アドレスを使用して、データ読み出し動作を実行する。この物理アドレスは領域＃１内の物理記憶位置を示すので、オリジナルデータの一部、つまりオペレーティングシステム（ＯＳ＃１）の一部が領域＃１から読み出されて、サーバ１００（ホスト計算機の仮想マシンＶＭ１）に返される。多数のリード要求に応じて実行される領域＃１からのデータ読み出し動作によってオペレーティングシステム（ＯＳ＃１）がブートされ、このオペレーティングシステム（ＯＳ＃１）が仮想マシンＶＭ１のためのゲストオペレーティングシステムとして実行される。この結果、仮想マシンＶＭ１は、様々なサービスを実行可能な稼動状態となる。
【０１１１】
なお、このオペレーティングシステム（ＯＳ＃１）上でアプリケーションプログラムを実行することが必要な場合には、仮想マシンＶＭ１（オペレーティングシステム（ＯＳ＃１））は、アプリケーションプログラムを実行するために、領域＃３１のＬＢＡを各々指定する多数のリード要求（リードコマンド）をＳＳＤ３に送出する。これら各リード要求も、ネームスペースＮＳ＃３１の識別子（ＮＳＩＤ３１）、開始ＬＢＡ、転送長とを含む。一つのリード要求を受信すると、ＳＳＤ３は、ＮＳＩＤ３１に対応するＬＵＴ＃３１を参照して、開始ＬＢＡに対応する物理アドレスをＬＵＴ＃３１から取得する。そして、ＳＳＤ３は、この取得された物理アドレスを使用して、データ読み出し動作を実行する。この物理アドレスは領域＃１内の物理記憶位置を示すので、アプリケーションプログラムの一部が領域＃１から読み出されて、サーバ１００（ホスト計算機の仮想マシンＶＭ１）に返される。多数のリード要求に応じて実行される領域＃１からのデータ読み出し動作によってアプリケーションプログラムが実行される。
【０１１２】
（８）仮想マシンＶＭ１が稼動状態の間、サーバ１００（仮想マシンＶＭ１）は、ユーザデータの新規書き込み、このユーザデータの書き換え、オペレーティングシステム（ＯＳ＃１）のアップデート等のために、領域＃３１のＬＢＡを各々指定する多数のライト要求（ライトコマンド）をＳＳＤ３に送出する。
【０１１３】
（９）一つのライト要求を受信すると、ＳＳＤ３は、サーバ１００（仮想マシンＶＭ１）から受信されるデータ（ライトデータ）を領域＃３１に書き込む。
【０１１４】
（１０）データ（ライトデータ）が領域＃３１に書き込まれると、ＳＳＤ３は、このデータが書き込まれた領域＃３１内の物理記憶位置を示す物理アドレスがこのデータのＬＢＡにマッピングされるようにＬＵＴ＃３１を更新する。これにより、このデータに対する後続のリード要求が受信された場合には、このデータは領域＃３１から読み出され、そしてサーバ１００（仮想マシンＶＭ１）に返される。また、このデータの更新データも領域＃３１に書き込まれる。
【０１１５】
図７は、領域＃３２を制御する動作を示す。
【０１１６】
（４）サーバ１００の管理者の操作に基づいて、サーバ１００は、論理物理アドレス変換テーブルをコピーするためのコピー要求（コピーコマンド）をＳＳＤ３に送出する。オリジナルデータ（例えば、仮想マシンイメージＡ）を参照する仮想マシンＶＭ２用の仮想ストレージをネームスペース＃３２に対応する領域＃３２に作成すべきケースにおいては、サーバ１００は、このコピー要求は、コピー元領域（コピー元ＬＵＴ）を指定するコピー元パラメータと、コピー先領域（コピー先ＬＵＴ）を指定するコピー先パラメータとを含む。このコピーコマンドを受信すると、ＳＳＤ３は、ＬＵＴ＃１の内容を、ＬＵＴ＃３２にコピーする。このコピーが完了すると、仮想マシンＶＭ２の利用が可能となる。
【０１１７】
（５）サーバ１００（仮想マシンＶＭ２）は、その仮想マシンＶＭ２用の仮想ストレージからオペレーティングシステム（ＯＳ＃１）をブートするために、領域＃３２のＬＢＡを各々指定する多数のリード要求（リードコマンド）をＳＳＤ３に送出する。これら各リード要求は、ネームスペースＮＳ＃３２の識別子（ＮＳＩＤ３２）、開始ＬＢＡ、転送長とを含む。
【０１１８】
（６）一つのリード要求を受信すると、ＳＳＤ３は、ＮＳＩＤ３２に対応するＬＵＴ＃３２を参照して、開始ＬＢＡに対応する物理アドレスをＬＵＴ＃３２から取得する。
【０１１９】
（７）そして、ＳＳＤ３は、この取得された物理アドレスを使用して、データ読み出し動作を実行する。この物理アドレスは領域＃１内の物理記憶位置を示すので、オペレーティングシステム（ＯＳ＃１）の一部が、領域＃１から読み出される。多数のリード要求に応じて実行される領域＃１からのデータ読み出し動作によってオペレーティングシステム（ＯＳ＃１）がブートされ、このオペレーティングシステム（ＯＳ＃１）が仮想マシンＶＭ２のためのゲストオペレーティングシステムとして実行される。この結果、仮想マシンＶＭ２は、様々なサービスを実行可能な稼動状態となる。
【０１２０】
なお、このオペレーティングシステム（ＯＳ＃１）上でアプリケーションプログラムを実行することが必要な場合には、仮想マシンＶＭ２（オペレーティングシステム（ＯＳ＃１））は、アプリケーションプログラムを実行するために、領域＃３２のＬＢＡを各々指定する多数のリード要求（リードコマンド）をＳＳＤ３に送出する。これら各リード要求も、ネームスペースＮＳ＃３２の識別子（ＮＳＩＤ３２）、開始ＬＢＡ、転送長とを含む。一つのリード要求を受信すると、ＳＳＤ３は、ＮＳＩＤ３２に対応するＬＵＴ＃３２を参照して、開始ＬＢＡに対応する物理アドレスをＬＵＴ＃３２から取得する。そして、ＳＳＤ３は、この取得された物理アドレスを使用して、データ読み出し動作を実行する。この物理アドレスは領域＃１内の物理記憶位置を示すので、アプリケーションプログラムの一部が、領域＃１から読み出される。多数のリード要求に応じて実行される領域＃１からのデータ読み出し動作によってアプリケーションプログラムが実行される。
【０１２１】
（８）仮想マシンＶＭ２が稼動状態の間、サーバ１００（仮想マシンＶＭ２）は、ユーザデータの新規書き込み、このユーザデータの書き換え、オペレーティングシステム（ＯＳ＃１）のアップデート等のために、領域＃３２のＬＢＡを各々指定する多数のライト要求（ライトコマンド）をＳＳＤ３に送出する。
【０１２２】
（９）一つのライト要求を受信すると、ＳＳＤ３は、サーバ１００（仮想マシンＶＭ２）から受信されるデータ（ライトデータ）を領域＃３１に書き込む。
【０１２３】
（１０）データ（ライトデータ）が領域＃３２に書き込まれると、ＳＳＤ３は、このデータが書き込まれた領域＃３２内の物理記憶位置を示す物理アドレスがこのデータのＬＢＡにマッピングされるようにＬＵＴ＃３２を更新する。これにより、このデータに対する後続のリード要求が受信された場合には、このデータは領域＃３２から読み出される。また、このデータの更新データも領域＃３２に書き込まれる。
【０１２４】
図８は、ＳＳＤ３によって実行される、領域＃１に対するリフレッシュ動作の例を示す。
【０１２５】
上述したように、領域＃１のオリジナルデータは、領域＃３１、領域＃３２から参照される。したがって、領域＃１からのデータ読み出しは非常に高い頻度で実行される。つまり、領域＃１に割り当てられた各ブロックの書き換え回数は非常に少ないが、これら各ブロックのデータ読み出しの回数は非常に多くなる。データ読み出しの回数の増加は、リードディスターブエラーを増やす要因になる。リードディスターブエラーは、データ読み出し動作に起因してメモリセル（特に、非選択メモリセル）の閾値電圧レベルが変動（上昇）する現象である。このリードディスターブエラーにより、領域＃１に割り当てられた各ブロックからリードされるデータのビット誤り率が増加する可能性がある。
【０１２６】
そこで、ＳＳＤ３は、領域＃１に割り当てられた各ブロックの書き換え回数が少ないことに着目して、以下のリフレッシュ動作を実行する。
【０１２７】
ＳＳＤ３は、領域＃１に割り当てられているブロック群からリフレッシュ条件を満たすブロックを検出する（ステップＳ１１）。リフレッシュ条件を満たすブロックとは、ビット誤り率が閾値Ｘ以上であるブロックであってもよいし、または総読み出し回数が閾値Ｙ以上であるブロックであってもよい。ＳＳＤ３は、検出されたブロック内のデータの誤りを訂正する（ステップＳ１２）。ステップＳ１２では、ＳＳＤ３は、検出されたブロック内のデータに付加されているエラー訂正コード（ＥＣＣ）を使用してこのデータの誤りを訂正する。そして、ＳＳＤ３は、誤りが訂正されたデータを、検出されたブロックと同じブロックに書き戻す（ステップＳ１３）。例えば、領域＃１に割り当てられているブロックＢＬＫ２がビット誤り率が閾値Ｘ以上であるならば、このブロックＢＬＫ２が、リフレッシュ条件を満たすブロック、つまりリフレッシュ動作を施すべきブロックとして検出されてもよい。そして、このブロックＢＬＫ２内の全てのデータ部の誤りが訂正される。ブロックＢＬＫ２の消去動作が実行された後、誤りが訂正されたこれらデータ部が、このブロックＢＬＫ２に書き戻される。
【０１２８】
通常のリフレッシュ動作では、リフレッシュ対象のブロックＢＬＫ２から読み出されたデータは、このブロックＢＬＫ２とは異なるブロック（移動先ブロック）に移動される。そして、移動先ブロックの物理アドレスそれぞれがこの移動されたデータの論理アドレスそれぞれにマッピングされるようにＬＵＴ＃１が更新される。
【０１２９】
しかし、本実施形態では、ＬＵＴ＃１の内容（物理アドレスの集合）は、ＬＵＴ＃３１内にコピーされており、さらには、ＬＵＴ＃３２内にもコピーされている。したがって、もしリフレッシュ動作によってデータがブロックＢＬＫ２から別のブロックに移動されたならば、ＬＵＴ＃１のみならず、ＬＵＴ＃３１、ＬＵＴ＃３２も更新することが必要となる。したがって、更新が必要な論理物理アドレス変換情報の量が非常に増大する。このことは、ＳＳＤ３の性能を低下させる要因となり得る。
【０１３０】
本実施形態では、誤りが訂正されたデータ部それぞれはブロックＢＬＫ２に書き戻されるので、ＬＵＴ＃１、ＬＵＴ＃３１、ＬＵＴ＃３２を更新する必要は無い。また、領域＃１に割り当てられた各ブロックの書き換え回数は非常に少ない。したがって、誤りが訂正されたこれらデータ部がブロックＢＬＫ２に書き戻されても、ブロックＢＬＫ２の書き替え回数（プログラム／イレーズサイクルの数）が制限値に近づくことはない。よって、誤りが訂正されたデータを元のブロックＢＬＫ２に書き戻すという改良されたリフレッシュ動作は、領域＃１（ネームスペースＮＳ＃１）のリードディスターブエラーを低減でき、領域＃１（ネームスペースＮＳ＃１）に割り当てられた各ブロックの信頼性を効率良く改善することができる。
【０１３１】
図９は、領域＃１に対応するＬＵＴ＃１の内容の例と領域＃３１に対応するＬＵＴ＃３１の内容の例とを示す。
【０１３２】
領域＃１（ネームスペースＮＳ＃１）には、不揮発性メモリ内のブロックＢＬＫ１、ＢＬＫ２、ＢＬＫ３、…ＢＬＫ５０が割り当てられ、領域＃３１（ネームスペースＮＳ＃３１）には、不揮発性メモリ内のブロックＢＬＫ５１、ＢＬＫ５２、ＢＬＫ５３、…ＢＬＫ１００が割り当てられている。領域＃１に割り当てられるＢＬＫ１、ＢＬＫ２、ＢＬＫ３、…ＢＬＫ５０の各々は、仮想マシンイメージＡの格納のためにのみ使用され、他の領域（他のネームスペース）用のデータの格納には使用されない。これにより、これらＢＬＫ１、ＢＬＫ２、ＢＬＫ３、…ＢＬＫ５０の各々の書き替え回数を低い値に維持することができる。
【０１３３】
ＬＵＴ＃１は、ネームスペース＃１に対応するＬＢＡ０、ＬＢＡ１、ＬＢＡ２、ＬＢＡ３、ＬＢＡ４、ＬＢＡ５、ＬＢＡ６、ＬＢＡ７、ＬＢＡ８、ＬＢＡ９、ＬＢＡ１０、ＬＢＡ１１、ＬＢＡ１２、ＬＢＡ１３、ＬＢＡ１４、ＬＢＡ１５、…にそれぞれ対応する複数のエントリを含む。データ書き込みに利用された各ＬＢＡに対応するエントリは、このデータが実際に書き込まれた不揮発性メモリ内の物理記憶位置を示す物理アドレスを保持する。データ書き込みにまだ利用されていない各ＬＢＡに対応するエントリは、物理アドレスを保持しない。このエントリは、このエントリが物理アドレスを保持しない空きエントリであることを示すヌル値を保持してもよい。
【０１３４】
同様に、ＬＵＴ＃３１も、ネームスペース＃３１に対応するＬＢＡ０、ＬＢＡ１、ＬＢＡ２、ＬＢＡ３、ＬＢＡ４、ＬＢＡ５、ＬＢＡ６、ＬＢＡ７、ＬＢＡ８、ＬＢＡ９、ＬＢＡ１０、ＬＢＡ１１、ＬＢＡ１２、ＬＢＡ１３、ＬＢＡ１４、ＬＢＡ１５、…にそれぞれ対応する複数のエントリを含む。
【０１３５】
図９では、ＬＵＴ＃１において、ネームスペース＃１に対応するＬＢＡ０、ＬＢＡ１、ＬＢＡ２、ＬＢＡ３、ＬＢＡ４、ＬＢＡ５、ＬＢＡ６、ＬＢＡ７、ＬＢＡ８、ＬＢＡ９、ＬＢＡ１０、ＬＢＡ１１、ＬＢＡ１２、ＬＢＡ１３、ＬＢＡ１４、ＬＢＡ１５、…に、領域＃１の物理アドレス“１００”、“１０１”、“１０２”、“１０３”、“１０４”、“１０５”、“１０６”、“１０７”、“２００”、“２０１”、“２０２”、“２０３”、“２０４”、“２０５”、“２０６”、“２０７”、…がマッピングされている場合が例示されている。
【０１３６】
ＬＵＴ＃１の内容がＬＵＴ＃３１にコピーされると、ＬＵＴ＃３１においては、ネームスペース＃３１に対応するＬＢＡ０、ＬＢＡ１、ＬＢＡ２、ＬＢＡ３、ＬＢＡ４、ＬＢＡ５、ＬＢＡ６、ＬＢＡ７、ＬＢＡ８、ＬＢＡ９、ＬＢＡ１０、ＬＢＡ１１、ＬＢＡ１２、ＬＢＡ１３、ＬＢＡ１４、ＬＢＡ１５、…にそれぞれ対応するエントリに、領域＃１の物理アドレス“１００”、“１０１”、“１０２”、“１０３”、“１０４”、“１０５”、“１０６”、“１０７”、“２００”、“２０１”、“２０２”、“２０３”、“２０４”、“２０５”、“２０６”、“２０７”、…が格納される。この結果、ネームスペース＃３１に対応するＬＢＡ０、ＬＢＡ１、ＬＢＡ２、ＬＢＡ３、ＬＢＡ４、ＬＢＡ５、ＬＢＡ６、ＬＢＡ７、ＬＢＡ８、ＬＢＡ９、ＬＢＡ１０、ＬＢＡ１１、ＬＢＡ１２、ＬＢＡ１３、ＬＢＡ１４、ＬＢＡ１５、…に、領域＃１の物理アドレス“１００”、“１０１”、“１０２”、“１０３”、“１０４”、“１０５”、“１０６”、“１０７”、“２００”、“２０１”、“２０２”、“２０３”、“２０４”、“２０５”、“２０６”、“２０７”、…がマッピングされる。
【０１３７】
したがって、ルックアップテーブルＬＵＴ＃３１内の物理アドレスそれぞれは、領域＃３１内の物理記憶位置ではなく、領域＃１内の物理記憶位置を指す。このため、領域＃３１の各論理アドレス（ネームスペース＃３１の各論理アドレス）へのリードアクセスは、領域＃１へ向け直される。
【０１３８】
ＳＳＤ３が、領域＃３１のＬＢＡｘを指定するライト要求（一度もデータが書き込まれていないＬＢＡｘへの新規の書き込み要求、またはＬＢＡｘに既に書き込まれているデータの書き換え要求）をサーバ１００から受信すると、ＳＳＤ３は、書き込むべきデータ（ライトデータ）を領域＃３１に書き込む。例えば、このライトデータが書き込まれた領域＃３１内の物理記憶位置が物理アドレス“５００”によって指定される物理記憶位置であったならば、ＬＵＴ＃３１は、領域＃３１内の物理記憶位置を示す物理アドレス“５００”がＬＢＡｘにマッピングされるように更新される。
【０１３９】
この場合、ＬＵＴ＃３１において、もしＬＢＡｘに対応するエントリ内の値がヌル値であったならば、つまり受信されたライト要求がＬＢＡｘへの新規の書き込み要求であったならば、物理アドレス“５００”が、ＬＢＡｘに対応するエントリに新たに格納される。この結果、ＬＢＡｘに対応するエントリの内容はヌル値から物理アドレス“５００”に変更される。
【０１４０】
あるいは、もしＬＢＡｘに対応するエントリに領域＃１内のある物理記憶位置を示す物理アドレスが既に格納されていたならば、つまり受信されたライト要求がＬＢＡｘに既に書き込まれている旧データの書き換え要求であったならば、ＬＵＴ＃３１においては、ＬＢＡｘに対応するエントリの内容は、ＬＢＡｘの旧データが格納されていた物理記憶位置を示す物理アドレスから物理アドレス“５００”に変更される。
【０１４１】
本実施形態では、複数のネームスペースが使用される環境を説明したが、本実施形態は、複数のネームスペースが使用される環境にのみ限定されず、例えば、領域＃１のＬＢＡ空間と異なるＬＢＡ空間が領域＃３１に割り当てられる環境にも適用され得る。例えば、領域＃１のＬＢＡ空間がＬＢＡ０、ＬＢＡ１、ＬＢＡ２、ＬＢＡ３、ＬＢＡ４、ＬＢＡ５、ＬＢＡ６、ＬＢＡ７、ＬＢＡ８、ＬＢＡ９、ＬＢＡ１０、ＬＢＡ１１、ＬＢＡ１２、ＬＢＡ１３、ＬＢＡ１４、ＬＢＡ１５、…ＬＢＡｎ−１であり、領域＃３１のＬＢＡ空間がＬＢＡｎ、ＬＢＡｎ＋１、ＬＢＡｎ＋２、ＬＢＡｎ＋３、ＬＢＡｎ＋４、ＬＢＡｎ＋５、ＬＢＡｎ＋６、ＬＢＡｎ＋７、ＬＢＡｎ＋８、ＬＢＡｎ＋９、ＬＢＡｎ＋１０、ＬＢＡｎ＋１１、ＬＢＡｎ＋１２、ＬＢＡｎ＋１３、ＬＢＡｎ＋１４、ＬＢＡｎ＋１５、…ＬＢＡ２ｎ−１であってもよい。
【０１４２】
この場合、ＬＵＴ＃１の内容がＬＵＴ＃３１にコピーされると、ネームスペース＃３１に対応するＬＢＡｎ、ＬＢＡｎ＋１、ＬＢＡｎ＋２、ＬＢＡｎ＋３、ＬＢＡｎ＋４、ＬＢＡｎ＋５、ＬＢＡｎ＋６、ＬＢＡｎ＋７、ＬＢＡｎ＋８、ＬＢＡｎ＋９、ＬＢＡｎ＋１０、ＬＢＡｎ＋１１、ＬＢＡｎ＋１２、ＬＢＡｎ＋１３、ＬＢＡｎ＋１４、ＬＢＡｎ＋１５、…に、領域＃１の物理アドレス“１００”、“１０１”、“１０２”、“１０３”、“１０４”、“１０５”、“１０６”、“１０７”、“２００”、“２０１”、“２０２”、“２０３”、“２０４”、“２０５”、“２０６”、“２０７”…がマッピングされる。この場合においても、ネームスペース＃３１のあるＬＢＡを指定するリード要求を、領域＃１に向け直すことができる。
【０１４３】
なお、領域＃１（ネームスペース＃１）に対するデータの書き換えはほとんど実行されないので、領域＃１（ネームスペース＃１）にはシン・プロビジョニングが適用されてもよい。この場合、領域＃１（ネームスペース＃１）においては、領域＃１のサイズ（ＬＢＡの数に対応する容量）よりも少ない容量に相当する数のブロック群のみが確保（予約）される。同様に、領域＃２（ネームスペース＃２）にもシン・プロビジョニングが適用されてもよい。
【０１４４】
領域＃３１（ネームスペース＃３１）には、シン・プロビジョニング、オーバー・プロビジョニングのどちらが適用されてもよい。同様に、領域＃３２（ネームスペース＃３２３）、領域＃３３（ネームスペース＃３３）の各々には、シン・プロビジョニング、オーバー・プロビジョニングのどちらが適用されてもよい。
【０１４５】
図１０は、領域＃３１（または領域＃３２）の或る論理アドレスを指定するリード要求に応じて実行されるリード動作と、領域＃３１（または領域＃３２）の或る論理アドレスを指定するライト要求に応じて実行されるライト動作とを示す。
【０１４６】
本実施形態では、ＬＵＴ＃１の内容は、ＬＵＴ＃３１、ＬＵＴ＃３２の各々にコピーされる。この結果、領域＃３１の各ＬＢＡへのリードアクセスは、領域＃１へ向け直される。同様に、領域＃３２の各ＬＢＡへのリードアクセスも、領域＃１へ向け直される。
【０１４７】
ＳＳＤ３が、領域＃３１のあるＬＢＡ（例えばＬＢＡｘ）を指定するライト要求をサーバ１００から受信した時、ＳＳＤ３は、サーバ１００から受信されるデータ（ＤＡＴＡｘ）を領域＃３１内の利用可能な物理記憶位置に書き込む。そして、ＬＵＴ＃３１が更新されて、ＤＡＴＡｘが書き込まれた物理記憶位置を示す物理アドレスが、ＬＵＴ＃３１内のＬＢＡｘに対応するエントリに格納される。
【０１４８】
ＳＳＤ３が、領域＃３１のあるＬＢＡ（例えばＬＢＡｙ）を指定するライト要求をサーバ１００から受信した時、ＳＳＤ３は、サーバ１００から受信されるデータ（ＤＡＴＡｙ）を領域＃３１内の利用可能な物理記憶位置に書き込む。そして、ＬＵＴ＃３１が更新されて、ＤＡＴＡｙが書き込まれた物理記憶位置を示す物理アドレスが、ＬＵＴ＃３１内のＬＢＡｙに対応するエントリに格納される。
【０１４９】
ＳＳＤ３が、領域＃３２のあるＬＢＡ（例えばＬＢＡｚ）を指定するライト要求をサーバ１００から受信した時、ＳＳＤ３は、サーバ１００から受信されるデータ（ＤＡＴＡｚ）を領域＃３２内の利用可能な物理記憶位置に書き込む。そして、ＬＵＴ＃３２が更新されて、ＤＡＴＡｚが書き込まれた物理記憶位置を示す物理アドレスが、ＬＵＴ＃３２内のＬＢＡｚに対応するエントリに格納される。
【０１５０】
図１１は、領域＃１に割り当てられるシングルレベルセル（ＳＬＣ）ブロック群と領域＃３１（または領域＃３２）に割り当てられるマルチレベルセル（ＭＬＣ）／トリプルレベルセル（ＴＬＣ）ブロック群とを示す。
【０１５１】
ＳＬＣブロックにおいては、メモリセル当たりに１ビットが格納される。各メモリセルは２つの状態（一つの消去状態、一つのプログラム状態）に対応する２つの閾値電圧分布のいずれかに設定される。したがって、ＳＬＣブロックにおいては、これら状態（消去状態、プログラム状態）間を分離するためのマージンの量が比較的大きいので、リードディスターブエラーが発生しにくい。
【０１５２】
一方、ＭＬＣブロックにおいては、メモリセル当たりに２ビットが格納される。各メモリセルは４つの状態（一つの消去状態、三つのプログラム状態）に対応する４つの閾値電圧分布のいずれかに設定される。したがって、ＭＬＣブロックにおいては、これら４つの状態が比較的狭い閾値電圧間隔で並べられるので、隣接する２つの状態間を分離するためのマージンの量がＳＬＣブロックよりも狭く、ＳＬＣブロックよりもリードディスターブエラーが発生しやすい。
【０１５３】
ＴＬＣブロックにおいては、メモリセル当たりに３ビットが格納される。各メモリセルは８つの状態（一つの消去状態、七つのプログラム状態）に対応する８つの閾値電圧分布のいずれかに設定される。したがって、ＴＬＣブロックにおいては、隣接する２つの状態間を分離するためのマージンの量がさらに狭くなり、リードディスターブエラーがより発生しやすくなる。
【０１５４】
本実施形態においては、図１１に示されているように、頻繁にデータ読み出しが実行され且つデータ書き換えはほとんど実行されない領域＃１（ネームスペースＮＳ＃１）には、ＳＬＣブロック群（ＳＬＣ−ＢＬＫ１、ＳＬＣ−ＢＬＫ２、ＳＬＣ−ＢＬＫ３、…ＳＬＣ−ＢＬＫ５０）が物理リソースとして割り当てられる。これは、領域＃１については、容量コストよりも、リードディスターブエラーに対する耐性を重視するためである。
【０１５５】
一方、領域＃３１（ネームスペースＮＳ＃３１）においては、データ読み出し回数は領域＃１（ネームスペースＮＳ＃１）よりも少ないが、時間が経過するにつれて、多くの量のデータが領域＃３１に書き込まれる可能性がある。したがって、領域＃３１（ネームスペースＮＳ＃３１）には、ＭＬＣ（またはＴＬＣ）ブロック群（ＭＬＣ／ＴＬＣ−ＢＬＫ５１、ＭＬＣ／ＴＬＣ−ＢＬＫ５２、ＭＬＣ／ＴＬＣ−ＢＬＫ５３、…ＭＬＣ／ＴＬＣ−ＢＬＫ１００）が物理リソースとして割り当てられる。これは、領域＃３１については、リードディスターブエラーに対する耐性よりも、容量コストを重視するためである。
【０１５６】
同様に、領域＃３２（ネームスペースＮＳ＃３２）にも、ＭＬＣ（またはＴＬＣ）ブロック群（ＭＬＣ／ＴＬＣ−ＢＬＫ１０１、ＭＬＣ／ＴＬＣ−ＢＬＫ１０２、ＭＬＣ／ＴＬＣ−ＢＬＫ１０３、…ＭＬＣ／ＴＬＣ−ＢＬＫ２００）が物理リソースとして割り当てられる。
【０１５７】
ＳＳＤ３が、メモリセル当たりに１ビットのデータを格納可能なＳＬＣ−ＮＡＮＤフラッシュメモリと、メモリセル当たりに複数ビットのデータを格納可能なＭＬＣ／ＴＬＣ−ＮＡＮＤフラッシュメモリとを内蔵する場合には、ＳＬＣ−ＮＡＮＤフラッシュメモリ内のＳＬＣブロック群を領域＃１に割り当て、ＭＬＣ／ＴＬＣ−ＮＡＮＤフラッシュメモリ内のＭＬＣ／ＴＬＣブロック群を領域＃３１および領域＃３２に割り当ててもよい。
【０１５８】
あるいは、ＳＳＤ３がメモリセル当たりに複数ビットのデータを格納可能なＭＬＣ／ＴＬＣ−ＮＡＮＤフラッシュメモリを内蔵する場合には、ＭＬＣ／ＴＬＣ−ＮＡＮＤフラッシュメモリから領域＃１に割り当てられた各ＭＬＣ／ＴＬＣブロックをＳＬＣモードに設定し、ＭＬＣ／ＴＬＣ−ＮＡＮＤフラッシュメモリから領域＃３１（または領域＃３２）に割り当てられた各ＭＬＣ／ＴＬＣブロックをＭＬＣ／ＴＬＣモードに設定してもよい。
【０１５９】
ＳＬＣモードに設定されたＭＬＣ／ＴＬＣブロックに関しては、ＳＳＤ３は、メモリセル当たりに１ビットのデータが書き込まれる第１の書き込みモードで、データ（ここでは、オペレーティングシステムのバイナリイメージ、等）をＭＬＣ／ＴＬＣブロックに書き込む。換言すれば、ＳＳＤ３は、メモリセル当たりに１ビットのデータが書き込まれる第１の書き込みモードを使用して、領域＃１へのデータ書き込みを実行する。例えば、第１の書き込みモードでは、同一ワード線に接続されたメモセル群にロアページデータのみが書き込まれてもよい。
【０１６０】
ＭＬＣ／ＴＬＣモードに設定されたＭＬＣ／ＴＬＣブロックに関しては、ＳＳＤ３は、メモリセル当たりに複数ビットのデータが書き込まれる第２の書き込みモードで、データをＭＬＣ／ＴＬＣブロックに書き込む。換言すれば、ＳＳＤ３は、メモリセル当たりに複数ビットのデータが書き込まれる第２の書き込みモードを使用して、領域＃３１または領域＃３２へのデータ書き込みを実行する。例えば、第２の書き込みモードでは、同一ワード線に接続されたメモセル群にロアページデータとアッパーページデータとが書き込まれてもよいし（ＭＬＣモード）、ロアページデータとミドルページデータとアッパーページデータとが書き込まれてもよい（ＴＬＣモード）。
【０１６１】
図１２は、領域＃１に対するリフレッシュ動作の他の例を示す。
【０１６２】
図１２のリフレッシュ動作は、図１３に示されているような２段階のアドレス変換が実行される構成に適用される。
【０１６３】
まず、２段階のアドレス変換について説明する。
【０１６４】
図１３に示されているように、ＬＵＴ＃１、…ＬＵＴ＃３１、ＬＵＴ＃３２の各々の後段には、ブロックアドレス変換テーブルＴ１が設けられる。ブロックアドレス変換テーブルＴ１は、変換前のブロックアドレスそれぞれと変換後のブロックアドレスそれぞれとの間のマッピングを管理する。このブロックアドレス変換テーブルＴ１は、例えば、変換前の複数のブロックアドレスに対応する複数のエントリを含んでいてもよい。各エントリには、対応する変換前のブロックアドレスに対応する変換後のブロックアドレスが格納される。
【０１６５】
ＬＵＴ＃１、ＬＵＴ＃３１またはＬＵＴ＃３２から取得される物理アドレスは、ブロックアドレスＢＬＫ−ａｄｄｒと、ページアドレスＰａｇｅ−ａｄｄｒとを含む。取得される物理アドレス内のブロックアドレスＢＬＫ−ａｄｄｒに応じて、ブロックアドレス変換テーブルＴ１内の複数のエントリの一つが選択される。そして、選択されたエントリに保持されているブロックアドレスＢＬＫ−ａｄｄｒ’がブロックアドレス変換テーブルＴ１から読み出され、このブロックアドレスＢＬＫ−ａｄｄｒ’と取得された物理アドレス内のページアドレスＰａｇｅ−ａｄｄｒとによって新たな物理アドレス（ブロックアドレスＢＬＫ−ａｄｄｒ’，ページアドレスＰａｇｅ−ａｄｄｒ）が生成される。
【０１６６】
このような２段階のアドレス変換により、たとえ領域＃１に割り当てられているブロック内のデータが別のブロック（移動先ブロック）に移動されても、ＬＵＴ＃１、ＬＵＴ＃３１、ＬＵＴ＃３２を更新することなく、単にブロックアドレス変換テーブルＴ１のみを更新するだけで、移動先ブロックに対応する物理アドレスを得ることができる。
【０１６７】
図１２のリフレッシュ動作においては、以下の処理が実行される。
【０１６８】
ＳＳＤ３は、領域＃１に割り当てられているブロック群からリフレッシュ条件を満たすブロックを検出する（ステップＳ２１）。リフレッシュ条件を満たすブロックとは、ビット誤り率が閾値Ｘ以上であるブロックであってもよいし、または総読み出し回数が閾値Ｙ以上であるブロックであってもよい。ＳＳＤ３は、検出されたブロック内のデータの誤りを訂正する（ステップＳ２２）。ステップＳ２２では、ＳＳＤ３は、検出されたブロック内のデータに付加されているエラー訂正コード（ＥＣＣ）を使用してこのデータの誤りを訂正する。そして、ＳＳＤ３は、誤りが訂正されたデータを、検出されたブロックとは異なる別のブロック（移動先ブロック）に書き戻す（ステップＳ２３）。移動先ブロックは、読み出し回数の少ないフリーブロックであってもよい。そして、ＳＳＤ３は、検出されたブロックへのアクセスが移動先ブロックへ向け直されるように、ブロックアドレス変換テーブルＴ１を更新する（ステップＳ２４）。ステップＳ２４では、ＳＳＤ３は、ＬＵＴ＃１、ＬＵＴ＃３１、またはＬＵＴ＃３２から取得された物理アドレス内に含まれる検出されたブロックのブロックアドレスが移動先ブロックのブロックアドレスに変換されるように、ブロックアドレス変換テーブルＴ１に、移動先ブロックのブロックアドレスを格納する。この場合、移動先ブロックのブロックアドレスは、検出されたブロックのブロックアドレスに対応するエントリに格納される。
【０１６９】
図１４は、ＳＳＤ３とサーバ（ホスト計算機）１００とを含む情報処理システム１を示す。
【０１７０】
サーバ（ホスト計算機）１００は、ネットワーク５０を介して複数の端末５１に接続されていてもよい。これら端末５１は、図１、図２で説明したユーザＡ、ユーザＢ、ユーザＣに対応する。サーバ１００は、これら端末５１に対してＩａａＳのようなサービスを提供する。
【０１７１】
ＳＳＤ３は、サーバ１００の物理ストレージとして使用され得る。ＳＳＤ３は、サーバ１００として機能する計算機に内蔵されてもよいし、この計算機にケーブルまたはネットワークを介して接続されてもよい。
【０１７２】
サーバ１００とＳＳＤ３とを相互接続するためのインタフェースとしては、ＳＣＳＩ、Ｓｅｒｉａｌ  Ａｔｔａｃｈｅｄ  ＳＣＳＩ（ＳＡＳ）、ＡＴＡ、Ｓｅｒｉａｌ  ＡＴＡ（ＳＡＴＡ）、ＰＣＩ  Ｅｘｐｒｅｓｓ（ＰＣＩｅ）、Ｅｔｈｅｒｎｅｔ（登録商標），Ｆｉｂｒｅ  ｃｈａｎｎｅｌ、ＮＶＭ  Ｅｘｐｒｅｓｓ（ＮＶＭｅ）（登録商標）等を使用し得る。
【０１７３】
ＳＳＤ３は、コントローラ（メモリコントローラ）４および不揮発性メモリ（ＮＡＮＤ型フラッシュメモリ）５を備える。ＳＳＤ３は、ランダムアクセスメモリ、例えば、ＤＲＡＭ６も備えていてもよい。
【０１７４】
ＮＡＮＤ型フラッシュメモリ５は、マトリクス状に配置された複数のメモリセルを含むメモリセルアレイを含む。ＮＡＮＤ型フラッシュメモリ５は、２次元構造のＮＡＮＤ型フラッシュメモリであってもよいし、３次元構造のＮＡＮＤ型フラッシュメモリであってもよい。
【０１７５】
ＮＡＮＤ型フラッシュメモリ５のメモリセルアレイは、複数のブロックＢＬＫ０〜ＢＬＫｍ−１を含む。ブロックＢＬＫ０〜ＢＬＫｍ−１の各々は多数のページ（ここではページＰ０〜Ｐｎ−１）によって編成される。ブロックＢＬＫ０〜ＢＬＫｍ−１は、消去単位として機能する。ブロックは、「消去ブロック」または「物理ブロック」と称されることもある。ページＰ０〜Ｐｎ−１の各々は、同一ワード線に接続された複数のメモリセルを含む。ページＰ０〜Ｐｎ−１は、データ書き込み動作およびデータ読み込み動作の単位である。
【０１７６】
コントローラ４は、Ｔｏｇｇｌｅ、オープンＮＡＮＤインタフェース（ＯＮＦＩ）のようなＮＡＮＤインタフェース１３を介して、不揮発性メモリであるＮＡＮＤ型フラッシュメモリ５に電気的に接続されている。ＮＡＮＤインタフェース１３は、ＮＡＮＤ型フラッシュメモリ５を制御するように構成されたＮＡＮＤ制御回路として機能する。
【０１７７】
ＮＡＮＤ型フラッシュメモリ５は、図１５に示すように、複数のＮＡＮＤ型フラッシュメモリダイを含んでいてもよい。個々のＮＡＮＤ型フラッシュメモリダイは独立して動作可能である。このため、ＮＡＮＤ型フラッシュメモリダイは、並列動作可能な最小単位として機能する。図１５においては、ＮＡＮＤインタフェース１３に８個のチャンネルＣｈ．１〜Ｃｈ．８が接続されており、８個のチャンネルＣｈ．１〜Ｃｈ．８の各々に４つのＮＡＮＤ型フラッシュメモリダイが接続されている場合が例示されている。この場合、最大３２個のＮＡＮＤ型フラッシュメモリダイ＃１、＃２、…＃３２を並列動作させることができる。
【０１７８】
ＳＳＤ３内のコントローラ４は、ＮＡＮＤ型フラッシュメモリ５のデータ管理とＮＡＮＤ型フラッシュメモリ５のブロック管理とを実行するように構成されたフラッシュトランスレーション層（ＦＴＬ）として機能することができる。
【０１７９】
このＦＴＬによって実行されるデータ管理には、（１）論理アドレスそれぞれとＮＡＮＤ型フラッシュメモリ５の物理アドレスそれぞれとの間の対応関係を示すマッピング情報の管理、（２）ページ単位のリード／ライトとブロック単位の消去動作とを隠蔽するための処理、等が含まれる。
【０１８０】
論理ブロックアドレス（ＬＢＡ）それぞれと物理アドレスそれぞれとの間のマッピングの管理は、アドレス変換テーブル（論理物理アドレス変換テーブル）として機能するルックアップテーブル（ＬＵＴ）を用いて実行される。
【０１８１】
本実施形態では、コントローラ４は、上述したように、複数の領域にそれぞれ対応する複数のルックアップテーブルＬＵＴ＃１、ＬＵＴ＃２、…ＬＵＴ＃３１、ＬＵＴ＃３２、ＬＵＴ＃３３を使用して、領域（ネームスペース）毎に、ＬＢＡそれぞれと物理アドレスそれぞれとの間のマッピングを管理する。
【０１８２】
あるＬＢＡに対応する物理アドレスは、このＬＢＡのデータがライトされたＮＡＮＤ型フラッシュメモリ５内の物理記憶位置を示す。ＬＵＴ＃１、ＬＵＴ＃２、…ＬＵＴ＃３１、ＬＵＴ＃３２、ＬＵＴ＃３３は、ＳＳＤ３の電源オン時にＮＡＮＤ型フラッシュメモリ５からＤＲＡＭ６にロードされてもよい。一般に、各ＬＵＴのサイズは、比較的大きい。したがって、各ＬＵＴの少なくとも一部がＤＲＡＭ６に論理物理アドレス変換テーブルキャッシュとして格納されてもよい。
【０１８３】
サーバ１００からのリード要求（リードコマンド）によって指定される論理アドレスに対応する目的の物理アドレスを含むキャッシュラインが論理物理アドレス変換テーブルキャッシュに存在するならば（キャッシュヒット）、この目的の物理アドレスによって指定されるＮＡＮＤ型フラッシュメモリ５内の物理記憶位置からデータが即座にリードされる。
【０１８４】
一方、目的の物理アドレスを含むキャッシュラインが論理物理アドレス変換テーブルキャッシュに存在しないならば（キャッシュミス）、目的の物理アドレスを含むルックアップテーブル内の一部分（アドレス変換テーブル部）がＮＡＮＤ型フラッシュメモリ５から読み出される。そして論理物理アドレス変換テーブルキャッシュ内の置換対象キャッシュラインの内容が論理物理アドレス変換テーブルキャッシュから追い出され、代わりに、ＮＡＮＤ型フラッシュメモリ５から読み出されたアドレス変換テーブル部がこのキャッシュラインに格納される。そして、この目的の物理アドレスによって指定されるＮＡＮＤ型フラッシュメモリ５内の物理記憶位置からデータがリードされる。
【０１８５】
ＮＡＮＤ型フラッシュメモリ５の各領域において、ページへのデータ書き込みは、１消去サイクル当たり１回のみ可能である。このため、コントローラ４は、あるＬＢＡに対応する更新データを、このＬＢＡに対応する以前のデータが格納されている物理記憶位置ではなく、別の物理記憶位置に書き込む。そして、コントローラ４は、この領域に対応するルックアップテーブルＬＵＴを更新してこのＬＢＡにこの別の物理記憶位置の物理アドレスを関連付け、そして以前のデータを無効化する。
【０１８６】
ブロック管理には、バッドブロックの管理と、ウェアレベリングと、ガベージコレクション等が含まれる。
【０１８７】
ウェアレベリングは、物理ブロックそれぞれの消耗を均一化するための動作である。
【０１８８】
ガベージコレクションにおいては、コントローラ４は、データを書き込むことが可能なフリーブロックの個数を増やすため、有効データと無効データとが混在する幾つかの対象ブロック内の有効データを別のブロック（例えばフリーブロック）にコピーする。ここで、有効データとは、ＬＵＴから参照されているデータ（すなわち論理アドレスから最新のデータとして紐付けられているデータ）であって、後にサーバ（ホスト計算機）１００からリードされる可能性があるデータを意味する。無効データとは、もはやサーバ（ホスト計算機）１００からリードされる可能性が無いデータを意味する。例えば、ある論理アドレスに関連付けられているデータは有効データであり、どの論理アドレスにも関連付けられていないデータは無効データである。そして、コントローラ４は、コピーされた有効データの論理アドレスそれぞれをコピー先の物理アドレスにマッピングする。有効データが別のブロックにコピーされることによって無効データのみになったブロックは、フリーブロックとして解放される。これによって、このブロックはその消去動作が実行された後に再利用することが可能となる。
【０１８９】
次に、コントローラ４の構成について説明する。
【０１９０】
コントローラ４は、例えば、一つのＬＳＩによって実現されてもよい。コントローラ４は、少なくともハードウェアロジックを含む。このハードウェアロジックは、ホストインタフェース１１、ＣＰＵ１２、ＮＡＮＤインタフェース１３、ＤＲＡＭインタフェース１４、およびＥＣＣ回路１５等を含む。これらＣＰＵ１２、ＮＡＮＤインタフェース１３、ＤＲＡＭインタフェース１４、ＥＣＣ回路１５は、バス１０を介して相互接続される。
【０１９１】
このホストインタフェース１１は、サーバ（ホスト計算機）１００との通信を実行するように構成されたホストインタフェース回路である。ホストインタフェース１１は、サーバ（ホスト計算機）１００から様々なコマンド（ライトコマンド、リードコマンド、ネームスペース作成コマンド、コピーコマンド、等）を受信する。
【０１９２】
ライトコマンドは、ＳＳＤ３に対し、このライトコマンドによって指定されたデータをライトするように要求する。ライトコマンドは、開始ＬＢＡ、転送長、およびネームスペースＩＤを含んでいてもよい。ライトコマンド内のネームスペースＩＤは、データが書き込まれるべき領域（ネームスペース）を一意に識別するための識別子である。リードコマンドは、ＳＳＤ３に対し、このリードコマンドによって指定されたデータをリードするように要求する。リードコマンドは、開始ＬＢＡ、転送長、およびネームスペースＩＤを含んでいてもよい。リードコマンド内のネームスペースＩＤは、データが読み出されるべき領域（ネームスペース）を一意に識別するための識別子である。
【０１９３】
ネームスペース作成コマンドは、ＳＳＤ３に対し、ネームスペースの作成を要求するコマンドである。コピーコマンドは、ＳＳＤ３に対し、あるネームスペースの内容を別のネームスペースにコピーすることを要求する。より詳しくは、コピーコマンドは、ＳＳＤ３に対し、あるネームスペースのＬＵＴの内容を別のネームスペースのＬＵＴにコピーすることを要求する。
【０１９４】
ＣＰＵ１２は、ホストインタフェース１１、ＮＡＮＤインタフェース１３、ＤＲＡＭインタフェース１４、ＥＣＣ回路１５を制御するように構成されたプロセッサである。ＣＰＵ１２は、上述のＦＴＬの処理に加え、サーバ（ホスト計算機）１００からの様々なコマンドを処理するためのコマンド処理等を実行する。
【０１９５】
これらＦＴＬ処理およびコマンド処理は、ＣＰＵ１２によって実行されるファームウェアによって制御されてもよい。このファームウェアは、ＣＰＵ１２を、ネームスペース管理部２１、ＬＵＴコピー制御部２２、ライト禁止制御部２３、リード／ライト制御部２４、およびリフレッシュ制御部２５として機能させる。なお、ネームスペース管理部２１、ＬＵＴコピー制御部２２、ライト禁止制御部２３、リード／ライト制御部２４、およびリフレッシュ制御部２５はハードウェアによって実現されてもよい。
【０１９６】
ネームスペース管理部２１は、複数のネームスペースを管理するためのマルチネームスペース管理機能を有する。各ネームスペースは、不揮発性メモリであるＮＡＮＤ型フラッシュメモリ５内の一種の領域に相当する。ネームスペース管理部２１は、サーバ（ホスト計算機）１００からのネームスペース作成コマンドそれぞれに基づいて、複数のネームスペース、つまり複数の領域を作成する。換言すれば、ネームスペース管理部２１は、サーバ（ホスト計算機）１００からの領域それぞれのネームスペース作成コマンドに基づいて、ＮＡＮＤ型フラッシュメモリ５を複数の領域（ネームスペース）に論理的に分割する。
【０１９７】
ＬＵＴコピー制御部２２は、サーバ（ホスト計算機）１００からのＬＵＴコピーコマンドに基づいて、コピー元ネームスペースに対応するＬＵＴの内容を、コピー先ネームスペースに対応するＬＵＴにコピーする。このＬＵＴコピーコマンドは、コピー元ネームスペースに格納されているデータをコピー先ネームスペースにコピーするためのコピーコマンドである。
【０１９８】
ライト禁止制御部２３は、領域＃１（ネームスペース＃ＮＳ１）への仮想マシンイメージＡの書き込みの完了の後に、領域＃１（ネームスペース＃ＮＳ１）を、領域＃１（ネームスペース＃ＮＳ１）への書き込みが禁止されるリードオンリーモード（書き込み禁止モード）に設定する。同様に、ライト禁止制御部２３は、領域＃２（ネームスペース＃ＮＳ２）への仮想マシンイメージＢの書き込みの完了の後に、領域＃２（ネームスペース＃ＮＳ２）を、領域＃３（ネームスペース＃ＮＳ２）への書き込みが禁止されるリードオンリーモード（書き込み禁止モード）に設定する。
【０１９９】
領域＃３１（ネームスペース＃ＮＳ３１）に対するリードコマンドをサーバ（ホスト計算機）１００から受信した場合、リード／ライト制御部２４は、ネームスペース＃ＮＳ３１に対応するＬＵＴ＃３１を参照することによって、リード対象の論理アドレスに対応する物理アドレスをＬＵＴ＃３１から取得する。そして、リード／ライト制御部２４は、この取得された物理アドレスによって指定されるＮＡＮＤ型フラッシュメモリ５の物理記憶位置からデータを読み出し、この読み出したデータをサーバ（ホスト計算機）１００に返す。領域＃３１（ネームスペース＃ＮＳ３１）は、仮想マシンＶＭ１の仮想ストレージ（仮想ディスク）として機能する。仮想マシンＶＭ１は、ネームスペース＃ＮＳ３１のＮＳＩＤ３１を含むリード要求（リードコマンド）をデバイスドライバ等を介して発行するだけで領域＃３１を自身の仮想ストレージとしてリードアクセスすることができる。
【０２００】
領域＃３１（ネームスペース＃ＮＳ３１）に対するライトコマンドをサーバ（ホスト計算機）１００から受信した場合、リード／ライト制御部２４は、書き込むべきデータを領域＃３１（ネームスペース＃ＮＳ３１）に書き込み、そして、ＬＵＴ＃３１を更新して、このデータが書き込まれた領域＃３１内の物理記憶位置を示す物理アドレスを、このデータの論理アドレスにマッピングする。仮想マシンＶＭ１は、ネームスペース＃ＮＳ３１のＮＳＩＤ３１を含むライト要求（ライトコマンド）をデバイスドライバ等を介して発行するだけで領域＃３１を自身の仮想ストレージとしてライトアクセスすることができる。
【０２０１】
領域＃３２（ネームスペース＃ＮＳ３２）に対するリードコマンドをサーバ（ホスト計算機）１００から受信した場合、リード／ライト制御部２４は、ネームスペース＃ＮＳ３２に対応するＬＵＴ＃３２を参照することによって、リード対象の論理アドレスに対応する物理アドレスをＬＵＴ＃３２から取得する。そして、リード／ライト制御部２４は、この取得された物理アドレスによって指定されるＮＡＮＤ型フラッシュメモリ５の物理記憶位置からデータを読み出し、この読み出したデータをサーバ（ホスト計算機）１００に返す。領域＃３２（ネームスペース＃ＮＳ３２）は、仮想マシンＶＭ２の仮想ストレージ（仮想ディスク）として機能する。仮想マシンＶＭ２は、ネームスペース＃ＮＳ３２のＮＳＩＤ３２を含むリード要求（リードコマンド）をデバイスドライバ等を介して発行するだけで領域＃３２を自身の仮想ストレージとしてリードアクセスすることができる。
【０２０２】
領域＃３２（ネームスペース＃ＮＳ３２）に対するライトコマンドをサーバ（ホスト計算機）１００から受信した場合、リード／ライト制御部２４は、書き込むべきデータを領域＃３２（ネームスペース＃ＮＳ３２）に書き込み、そして、ＬＵＴ＃３２を更新して、このデータが書き込まれた領域＃３２内の物理記憶位置を示す物理アドレスを、このデータの論理アドレスにマッピングする。仮想マシンＶＭ２は、ネームスペース＃ＮＳ３２のＮＳＩＤ３２を含むライト要求（ライトコマンド）をデバイスドライバ等を介して発行するだけで領域＃３２を自身の仮想ストレージとしてライトアクセスすることができる。
【０２０３】
リフレッシュ制御部２５は、領域＃３１（ネームスペース＃ＮＳ３１）に割り当てられているブロック群からリフレッシュ条件を満たすブロックを検出する。そして、リフレッシュ制御部２５は、検出されたブロック内のデータの誤りを訂正し、誤りが訂正されたデータを、検出されたブロックと同じブロックに書き戻す。
【０２０４】
なお、図１２、図１３で説明したように、リフレッシュ制御部２５は、誤りが訂正されたデータを、検出されたブロックとは異なる別のブロック（移動先ブロック）に書き込むこともできる。この場合、リフレッシュ制御部２５は、検出されたブロックを指定するブロックアドレスが移動先ブロックのブロックアドレスに変換されるように、ブロックアドレス変換テーブルＴ１に移動先ブロックのブロックアドレスを格納する。
【０２０５】
ＮＡＮＤインタフェース１３は、ＣＰＵ１２の制御の下、ＮＡＮＤ型フラッシュメモリ５を制御する。ＤＲＡＭインタフェース１４は、ＣＰＵ１２の制御の下、ＤＲＡＭ６を制御するように構成されたＤＲＡＭコントローラである。ＤＲＡＭ６の記憶領域の一部は、サーバ（ホスト計算機）１００からのライトデータを一時的に格納するライトバッファ（ＷＢ）３１を格納するために使用される。また、ＤＲＡＭ６の記憶領域の他の一部は、ＬＵＴ＃１、ＬＵＴ＃２、…ＬＵＴ＃３１、ＬＵＴ＃３２、ＬＵＴ＃３３を格納するために使用される。
【０２０６】
ＥＣＣ回路１５は、ＥＣＣエンコーダとＥＣＣデコーダとを含む。ＥＣＣエンコーダは、書き込むべきデータ（ユーザデータ）を符号化して、ユーザデータと誤り訂正符号（ＥＣＣ）とを含むメモリ書き込みデータを生成する。ＥＣＣデコーダは、ユーザデータと誤り訂正符号（ＥＣＣ）とを含むメモリ読み出しデータを復号して、ユーザデータの誤りを訂正する。
【０２０７】
図１６は、領域＃１に仮想マシンイメージを書き込む処理の手順を示す。
【０２０８】
サーバ（ホスト計算機）１００は、領域＃１（ネームスペース＃ＮＳ１）に仮想マシンイメージＡを書き込むためのライト要求をＳＳＤ３に送出する。ＳＳＤ３のコントローラ４は、仮想マシンイメージＡを領域＃１（ネームスペース＃ＮＳ１）に書き込む（ステップＳ１０１）。そして、コントローラ４は、ＬＵＴ＃１を更新して、仮想マシンイメージＡに対応する複数のＬＢＡに、仮想マシンイメージＡが書き込まれた領域＃１内の物理記憶位置を示す物理アドレスそれぞれをマッピングする（ステップＳ１０２）。
【０２０９】
仮想マシンイメージＡの全てが領域＃１に書き込まれた後、サーバ１００（ホスト計算機）の管理者の操作に基づいて、サーバ（ホスト計算機）１００は、仮想マシンイメージＡの書き込み完了をＳＳＤ３に通知してもよい。この通知に応答して、コントローラ４は、領域＃１（ネームスペース＃ＮＳ１）を書き込み禁止モード（書き込みが禁止され且つリードだけが許可されたリードオンリーモード）に設定する（ステップＳ１０３）。なお、ステップＳ１０３では、領域＃１（ネームスペース＃ＮＳ１）をリードオンリーモードに設定するだけでなく、領域＃１（ネームスペース＃ＮＳ１）に対するガベージコレクションの実行を禁止してもよい。
【０２１０】
図１７は、仮想ストレージ（領域＃３１または領域＃３２）を作成する処理の手順を示す。
【０２１１】
新たな仮想ストレージを作成することが必要な時、サーバ（ホスト計算機）１００は、仮想ストレージの作成するために、ネームスペース作成コマンドをＳＳＤ３に送出する。ＳＳＤ３のコントローラ４は、ネームスペースを作成し、幾つかの数のブロックをこのネームスペースのために予約する（ステップＳ１１１）。そして、コントローラ４は、作成されたネームスペースにＩＤを割り当て、このネームスペースのＩＤをサーバ（ホスト計算機）１００に返す（ステップＳ１１２）。
【０２１２】
サーバ（ホスト計算機）１００は、コピーコマンド（アドレス変換テーブルコピーコマンド）をＳＳＤ３に送出する。ＳＳＤ３のコントローラ４は、コピーコマンド内のコピー元パラメータによって指定されたＮＳＩＤに対応するＬＵＴの内容を、コピーコマンド内のコピー先パラメータによって指定されたＮＳＩＤに対応するＬＵＴにコピーする（ステップＳ１１３）。
【０２１３】
図１８のフローチャートは、リード／ライト処理の手順を示す。
【０２１４】
サーバ（ホスト計算機）１００からリード要求（リードコマンド）を受信すると（ステップＳ１２１のＹＥＳ）、ＳＳＤ３のコントローラ４は、リードコマンド内のＮＳＩＤによって指定されるネームスペースに対応するＬＵＴを参照して、リードコマンド内の論理アドレス（ＬＢＡ）に対応する物理アドレスをこのＬＵＴから取得する（ステップＳ１２２）。換言すれば、ある領域の論理アドレスを指定するリードコマンドを受信した時、コントローラ４は、この領域に対応するＬＵＴを参照して、リードコマンド内の論理アドレスに対応する物理アドレスを取得する。
【０２１５】
コントローラ４は、この取得された物理アドレスに対応するＮＡＮＤ型フラッシュメモリ５内の物理記憶位置からデータを読み出し、この読み出したデータをサーバ（ホスト計算機）１００に返す（ステップＳ１２３）。本実施形態では、例えば、仮想ストレージ用の領域＃３１に対応するＬＵＴ＃３１には領域＃１のＬＵＴ＃１の内容がコピーされている。したがって、領域＃３１のある論理アドレスを指定するリードコマンドが受信された場合には、ＬＵＴ＃３１が参照され、そして、領域＃１内の物理記憶位置を示す物理アドレスがＬＵＴ＃３１から取得される。この結果、ＬＵＴ＃１の物理記憶位置からデータが読み出される。
【０２１６】
サーバ（ホスト計算機）１００からライト要求（ライトコマンド）を受信すると（ステップＳ１２４のＹＥＳ）、ＳＳＤ３のコントローラ４は、ライトコマンド内のＮＳＩＤによって指定される書き込み先ネームスペースが書き込み禁止モード（リードオンリーモード）であるか否かを判定する（ステップＳ１２５）。換言すれば、ある領域の論理アドレスを指定するライトコマンドを受信した時、コントローラ４は、この領域が書き込み禁止モード（リードオンリーモード）であるか否かを判定する。
【０２１７】
書き込み先ネームスペースが書き込み禁止モード（リードオンリーモード）に設定されているならば（ステップＳ１２４のＹＥＳ）、コントローラ４は、書き込み先ネームスペースへの書き込みが禁止されていることを示すエラー通知をサーバ（ホスト計算機）１００に返す（ステップＳ１２８）。
【０２１８】
書き込み先ネームスペースが書き込み禁止モード（リードオンリーモード）ではないならば（ステップＳ１２４のＮＯ）、コントローラ４は、書き込み先ネームスペースに対応する領域にデータ（ライトデータ）を書き込む（ステップＳ１２６）。そして、コントローラ４は、ライトデータが書き込まれた物理記憶位置を示す物理アドレスがこのライトデータの論理アドレス（ＬＢＡ）にマッピングされるように、書き込み先ネームスペースに対応するＬＵＴを更新する（ステップＳ１２７）。
【０２１９】
図１９のフローチャートは、リフレッシュ処理の手順を示す。
【０２２０】
ＳＳＤ３のコントローラ４は、仮想マシンイメージが格納されているネームスペースに対応するブロック群、つまり仮想マシンイメージを格納しているブロック群から、リフレッシュ条件を満たすブロックを検出する（ステップＳ１３１）。コントローラ４は、この検出されたブロックからページ単位でデータを読み出し、読み出したデータの誤りをＥＣＣ回路１５を使用して訂正する（ステップＳ１３２）。ステップＳ１３２では、検出されたブロックの全てのページのデータの誤りが訂正される。コントローラ４は、検出されたブロックに消去動作を施して検出されたブロックの全てのメモリセルを消去状態にする（ステップＳ１３３）。そして、コントローラ４は、誤りが訂正された全てのページのデータを、検出されたブロックと同じブロックに書き戻す（ステップＳ１３４）。
【０２２１】
図２０のフローチャートは、リフレッシュ処理の別の手順を示す。
【０２２２】
ＳＳＤ３のコントローラ４は、仮想マシンイメージが格納されているネームスペースに対応するブロック群、つまり仮想マシンイメージを格納しているブロック群から、リフレッシュ条件を満たすブロックを検出する（ステップＳ１４１）。コントローラ４は、この検出されたブロックからページ単位でデータを読み出し、読み出したデータの誤りをＥＣＣ回路１５を使用して訂正する（ステップＳ１４２）。ステップＳ１４２では、検出されたブロックの全てのページのデータの誤りが訂正される。
【０２２３】
コントローラ４は、検出されたブロックのビット誤り率またはリード回数がデータ移動用の閾値以上であるか否かを判定する（ステップＳ１４３）。この閾値は、誤りが訂正されたデータを検出されたブロックとは異なる別のブロックに移動すべきか否かを判定するための閾値である。
【０２２４】
検出されたブロックのビット誤り率またはリード回数が閾値未満であるならば（ステップＳ１４３のＮＯ）、コントローラ４は、検出されたブロックに消去動作を施して検出されたブロックの全てのメモリセルを消去状態にする（ステップＳ１４４）。そして、コントローラ４は、誤りが訂正された全てのページのデータを、検出されたブロックと同じブロックに書き戻す（ステップＳ１４５）。
【０２２５】
検出されたブロックのビット誤り率またはリード回数が閾値以上であるならば（ステップＳ１４３のＹＥＳ）、コントローラ４は、誤りが訂正された全てのページのデータを、検出されたブロックとは異なる別のブロック（移動先ブロック）に書き込む（ステップＳ１４６）。そして、コントローラ４は、検出されたブロックのブロックアドレスが移動先ブロックのブロックアドレスに変換されるように、ブロックアドレス変換テーブルＴ１を更新して、ブロックアドレス変換テーブルＴ１に移動先ブロックのブロックアドレスを格納する（ステップＳ１４７）。ステップＳ１４７では、移動先ブロックのブロックアドレスは、検出されたブロックのブロックアドレスに対応するエントリに格納される。
【０２２６】
なお、ここでは、検出されたブロックのビット誤り率またはリード回数が閾値以上である場合にのみ、エラーが訂正されたデータを検出されたブロックとは異なる別のブロック（移動先ブロック）に書き込み、ブロックアドレス変換テーブルＴ１を更新する場合を説明したが、検出されたブロックのビット誤り率またはリード回数とは無関係に、エラーが訂正されたデータを、検出されたブロックとは異なる別のブロック（移動先ブロック）に書き込み、ブロックアドレス変換テーブルＴ１を更新してもよい。また、検出されたブロックに消去動作を施した結果、このブロックが不良ブロック（バッドブロック）となる場合もあり得る。この場合にも、エラーが訂正されたデータを、検出されたブロックとは異なる別のブロック（移動先ブロック）に書き込み、ブロックアドレス変換テーブルＴ１を更新してもよい。
【０２２７】
図２１のフローチャートは、メモリセル当たりに１ビットのデータが書き込まれる第１の書き込みモードでデータを領域＃１（オリジナルの仮想マシンイメージを格納するオリジナルネームスペース）に書き込み、メモリセル当たりに複数のビットのデータが書き込まれる第２の書き込みモードでデータを領域＃３１（または領域＃３２）に書き込む処理の手順を示す。
【０２２８】
ＳＳＤ３のコントローラ４は、書き込み先のネームスペースがオリジナルの仮想マシンイメージを格納すべきオリジナルネームスペース（領域＃１、または領域＃２）であるか否かを判定する（ステップＳ１５１）。
【０２２９】
書き込み先のネームスペースがオリジナルネームスペース（領域＃１、または領域＃２）であるならば、コントローラ４は、メモリセル当たりに１ビットのデータが書き込まれる書き込みモード（ＳＬＣモード）で、データ（ここでは、オペレーティングシステムのバイナリイメージ、等）をオリジナルネームスペース（領域＃１、または領域＃２）に書き込む（ステップＳ１５２）。換言すれば、コントローラ４は、メモリセル当たりに１ビットのデータが書き込まれる書き込みモード（ＳＬＣモード）を使用して、領域＃１または領域＃２へのデータ書き込みを実行する。
【０２３０】
一方、書き込み先のネームスペースが仮想マシン用の仮想ストレージとして利用されるネームスペース（領域＃３１、領域＃３２、または領域＃３３）であるならば、コントローラ４は、メモリセル当たりに複数ビットのデータが書き込まれる書き込みモード（ＭＬＣモードまたはＴＬＣモード）で、データを、仮想ストレージとして利用されるネームスペース（領域＃３１、領域＃３２、または領域＃３３）に書き込む（ステップＳ１５３）。換言すれば、コントローラ４は、メモリセル当たりに複数ビットのデータが書き込まれる書き込みモード（ＭＬＣモードまたはＴＬＣモード）を使用して、領域＃３１または領域＃３２へのデータ書き込みを実行する。
【０２３１】
図２２は、複数のＳＳＤ３を含むサーバ（ホスト計算機）１００の構成例を示す。
【０２３２】
このサーバ（ホスト計算機）１００として機能する情報処理装置は、ラックに収容可能な薄い箱形の筐体３０１を備える。多数のＳＳＤ３は筐体３０１内に配置されてもよい。この場合、各ＳＳＤ３は筐体３０１の前面３０１Ａに設けられたスロットに取り外し可能に挿入されてもよい。
【０２３３】
システムボード（マザーボード）３０２は筐体３０１内に配置される。システムボード（マザーボード）３０２上においては、物理ＣＰＵ、物理メモリ、物理ＮＩＣを含む様々な電子部品が実装されている。
【０２３４】
以上説明したように、本実施形態によれば、サーバ（ホスト計算機）１００からの要求に応じて、オリジナルデータ（第１のデータ）を格納している領域＃１に対応するＬＵＴ＃１の内容が、領域＃３１に対応するＬＵＴ＃３１にコピーされる。そして、サーバ（ホスト計算機）１００からの領域＃３１の論理アドレスを指定するリード要求の受信の度、ＬＵＴ＃３１に基づいて、第１のデータの一部が領域＃１から読み出されてサーバ（ホスト計算機）１００に返される。したがって、領域＃１に格納されている第１のデータを領域＃３１にコピーすることなく、領域＃１に格納されている第１のデータを、領域＃３１の論理アドレスそれぞれを介してリードアクセスすることができる。
【０２３５】
また、領域＃３１の論理アドレスを指定するライト要求がサーバ（ホスト計算機）１００から受信された場合、書き込まれるべき第２のデータが領域＃３１に書き込まれると共に、第２のデータが書き込まれた領域＃３１内の物理記憶位置を示す物理アドレスがライト要求によって指定された論理アドレスにマッピングされるようにＬＵＴ＃３１が更新される。このように、ＬＵＴ＃３１が更新されるので、第２のデータが領域＃３１に書き込まれた後に第２のデータに対するリード要求がサーバ（ホスト計算機）１００から受信された場合には、この更新されたＬＵＴ＃３１に基づいて、第２のデータを領域＃３１から読み出してサーバ（ホスト計算機）１００に返すことができる。このように、書き込まれるべきデータは領域＃３１に書き込まれ、領域＃３１に書き込まれたデータは領域＃３１から読み出される。したがって、領域＃１のオリジナルデータ（第１のデータ）が複数の領域（領域＃３１、＃３２、…）によって共有されている場合であっても、矛盾が発生することはない。また、領域＃１はもっぱらリードに使用されることになるので、領域＃１の書き替え回数を低い値に維持することができる。
【０２３６】
また、第１の領域に割り当てられているブロック群からリフレッシュ条件を満たすブロックが検出され、検出されたブロック内のデータの誤りが訂正され、誤りが訂正されたデータが、検出されたブロックと同じブロックに書き戻される。したがって、ＬＵＴ＃１、ＬＵＴ＃３１を更新することなく、第１の領域のリフレッシュ動作を実行することができる。領域＃１に割り当てられた各ブロックの書き換え回数は非常に少ない。したがって、たとえ誤りが訂正されたデータが検出されたブロックと同じブロックに書き戻されても、このブロックの書き替え回数（プログラム／イレーズサイクルの数）が制限値に近づくことはない。よって、誤りが訂正されたデータを検出されたブロックと同じブロックに書き戻すという改良されたリフレッシュ動作は、領域＃１に割り当てられた各ブロックの信頼性を効率良く改善することができる。
【０２３７】
なお、本実施形態では、不揮発性メモリとしてＮＡＮＤ型フラッシュメモリを例示した。しかし、本実施形態の機能は、例えば、ＭＲＡＭ（Ｍａｇｎｅｔｏｒｅｓｉｓｔｉｖｅ  Ｒａｎｄｏｍ  Ａｃｃｅｓｓ  Ｍｅｍｏｒｙ）、ＰＲＡＭ（Ｐｈａｓｅ  ｃｈａｎｇｅ  Ｒａｎｄｏｍ  Ａｃｃｅｓｓ  Ｍｅｍｏｒｙ）、ＲｅＲＡＭ（Ｒｅｓｉｓｔｉｖｅ  Ｒａｎｄｏｍ  Ａｃｃｅｓｓ  Ｍｅｍｏｒｙ）、又は、ＦｅＲＡＭ（Ｆｅｒｒｏｅｌｅｃｔｒｉｃ  Ｒａｎｄｏｍ  Ａｃｃｅｓｓ  Ｍｅｍｏｒｙ）のような他の様々な不揮発性メモリにも適用できる。
【０２３８】
本発明のいくつかの実施形態を説明したが、これらの実施形態は、例として提示したものであり、発明の範囲を限定することは意図していない。これら新規な実施形態は、その他の様々な形態で実施されることが可能であり、発明の要旨を逸脱しない範囲で、種々の省略、置き換え、変更を行うことができる。これら実施形態やその変形は、発明の範囲や要旨に含まれるとともに、特許請求の範囲に記載された発明とその均等の範囲に含まれる。
【符号の説明】
【０２３９】
３…ＳＳＤ、４…コントローラ、５…ＮＡＮＤ型フラッシュメモリ、２１…ネームスペース管理部、２２…ＬＵＴコピー制御部、２３…ライト禁止制御部、２４…リード／ライト制御部、２５…リフレッシュ制御部、１００…サーバ（ホスト計算機）。
【図１】
2019008730.tif 000003
【図２】
2019008730.tif 000004
【図３】
2019008730.tif 000005
【図４】
2019008730.tif 000006
【図５】
2019008730.tif 000007
【図６】
2019008730.tif 000008
【図７】
2019008730.tif 000009
【図８】
2019008730.tif 000010
【図９】
2019008730.tif 000011
【図１０】
2019008730.tif 000012
【図１１】
2019008730.tif 000013
【図１２】
2019008730.tif 000014
【図１３】
2019008730.tif 000015
【図１４】
2019008730.tif 000016
【図１５】
2019008730.tif 000017
【図１６】
2019008730.tif 000018
【図１７】
2019008730.tif 000019
【図１８】
2019008730.tif 000020
【図１９】
2019008730.tif 000021
【図２０】
2019008730.tif 000022
【図２１】
2019008730.tif 000023
【図２２】
2019008730.tif 000024