(57)【特許請求の範囲】
【請求項１】
インストラクションを含むコンピュータープログラムであって、インストラクションがプロセッサによって実行されると、前記プロセッサは、
仮想ディスクエクステントを含む仮想ディスクをインスタンス化し、前記仮想ディスクエクステントは仮想ディスクファイルから分離されているものであり、
前記仮想ディスクに関連付けられた状態情報に基づいて、前記仮想ディスクファイルのセクションの中に既に存在するビットパターンを上書きすることなく、前記仮想ディスクエクステントを記述するために、ファイルのセクションを割り当て、
前記仮想ディスクエクステントが、前記仮想ディスクファイルによって記述されていることを示すために、前記仮想ディスクエクステントと関連付けられた前記状態情報を変更し、
前記仮想ディスクエクステントに対する読出しリクエストに応じて、状態情報に基づいて、仮想ディスクファイルのチェインを最後の仮想ディスクファイルからベース仮想ディスクファイルまで検索し、前記状態情報は、前記仮想ディスクエクステントが、前記最後の仮想ディスクファイルのセクションによって定められるか、もしくは、前記チェインに沿った更に異なる仮想ディスクファイルによって定義されるものかを示すものであり、前記チェインのそれぞれの仮想ディスクファイルは、親仮想ディスクファイルの識別子と前記親仮想ディスクファイルの場所を記述する値を含んでおり、かつ、
前記仮想ディスクエクステントに対する書込みリクエストに応じて、前記チェインにおける前記最後の仮想ディスクファイルに対して書込みを行う、
ことを特徴とするコンピュータープログラム。
【請求項２】
前記コンピュータープログラムは、さらに、インストラクションを含み、インストラクションが実行されると、前記プロセッサは、
前記仮想ディスクファイルをコントロールしているファイルシステムに対して、トリムコマンド、非マップコマンド、ゼロのライトセイムコマンド、および、ゼロトークンのオフロード書込みコマンド、を含むコマンドのグループから選択された少なくとも一つのコマンドを発行するためのリクエストを送付する、
請求項１に記載のコンピュータープログラム。
【請求項３】
プロセッサと、
前記プロセッサに接続されたメモリーと、を含むコンピューターシステムであって、
前記プロセッサと前記メモリーが電源オンされる場合に、
前記メモリーは、インストラクションを含み、インストラクションがプロセッサによって実行されると、前記コンピューターシステムは、請求項１または２に記載のコンピュータプログラムを実施する、
ことを特徴とするコンピューターシステム。
【請求項４】
前記メモリーは、さらに、インストラクションを含み、インストラクションが実行されると、前記コンピューターシステムは、
前記仮想ディスクエクステントと関連するオフロード読出しリクエストの受け取りに応じて、前記仮想ディスクエクステントがゼロ化されたことを示す状態情報に基づいて、リクエスターに対してゼロを表すトークンを送付する、
請求項３に記載のコンピューターシステム。
【請求項５】
前記メモリーは、さらに、インストラクションを含み、インストラクションが実行されると、前記コンピューターシステムは、
前記仮想ディスクファイルから前記仮想ディスクエクステントを分離し、かつ、
前記仮想ディスクエクステントがゼロ化されたとの判断に応じて前記仮想ディスクエクステントがゼロにされたことを示すために、前記仮想ディスクエクステントに関連付けられた状態情報を変更する、
請求項３に記載のコンピューターシステム。
【請求項６】
仮想マシンのためのデータを保管するコンピューター実装方法であって、
仮想ディスクエクステントを含む仮想ディスクをインスタンス化する段階であり、前記仮想ディスクエクステントは仮想ディスクファイルから分離されている段階と、
前記仮想ディスクに関連付けられた状態情報に基づいて、前記仮想ディスクファイルのセクションの中に既に存在するビットパターンを上書きすることなく、前記仮想ディスクエクステントを記述するために、ファイルのセクションを割り当てる段階と、
前記仮想ディスクエクステントが、前記仮想ディスクファイルによって記述されていることを示すために、前記仮想ディスクエクステントと関連付けられた前記状態情報を変更する段階と、
前記仮想ディスクエクステントに対する読出しリクエストに応じて、状態情報に基づいて、仮想ディスクファイルのチェインを最後の仮想ディスクファイルからベース仮想ディスクファイルまで検索する段階であり、前記状態情報は、前記仮想ディスクエクステントが、前記最後の仮想ディスクファイルのセクションによって定められるか、もしくは、前記チェインに沿った更に異なる仮想ディスクファイルによって定義されるものかを示すものであり、前記チェインのそれぞれの仮想ディスクファイルは、親仮想ディスクファイルの識別子と前記親仮想ディスクファイルの場所を記述する値を含んでいる段階と、
前記仮想ディスクエクステントに対する書込みリクエストに応じて、前記チェインにおける前記最後の仮想ディスクファイルに対して書込みを行う段階と、
を含む、ことを特徴とする方法。
【請求項７】
前記コンピューター実装方法は、さらに、
前記仮想ディスクファイルから前記仮想ディスクエクステントを切り離す段階と、
ファイルシステムからの前記仮想ディスクエクステントがフリースペースであるものと特定する信号の受け取りに応じて、前記仮想ディスクエクステントが任意のデータを含むことを示すために、前記仮想ディスクエクステントに関連付けられた前記状態情報を変更する段階と、
を含む請求項６に記載の方法。
【請求項８】
前記コンピューター実装方法は、さらに、
前記仮想ディスクファイルから前記仮想ディスクエクステントを切り離す段階と、
前記仮想ディスクエクステントの全てのセクターをトリムするリクエストの受け取りに応じて、前記仮想ディスクエクステントが情報を開示しないビットパターンを含むことを示すために、前記仮想ディスクエクステントに関連付けられた前記状態情報を変更する段階と、
を含む請求項６に記載の方法。
【発明の詳細な説明】
【技術分野】
【０００１】
本発明開示は、仮想ディスクに対するデータを一つまたはそれ以上の仮想ディスクファイルに保管する技術について記載する。
【背景技術】
【０００２】
ストレージ仮想化技術によって、物理的ストレージから論理的ストレージを切り離すことができる。ストレージ仮想化の一つの実施例は、仮想マシン内で行われる。仮想化ソフトウェア層（典型的には、ハイパーバイザー（ｈｙｐｅｒｖｉｓｏｒ）または仮想マシンモニター、と呼ばれるもの）が、コンピューターシステム上にインストールされ、仮想マシンがどのように物理的ハードウェアとインタラクト（ｉｎｔｅｒａｃｔ）するかをコントロールする。ゲストオペレーティグシステムは、典型的には、物理的ハードウェアに対して排他的なコントロールを実施するようにコード化されており、仮想化ソフトウェアは、物理的ハードウェアのリソースを再分割し、仮想マシンの中で物理的ハードウェアの存在をエミュレート（ｅｍｕｌａｔｅ）するように構成されてよい。ストレージ仮想化の別の実施例は、ストレージアレイ（ｓｔｏｒａｇｅ  ａｒｒａｙ）を実行するように構成されたコンピューターシステム内で行われる。この場合、物理的コンピューターシステムまたは仮想マシンは、ｉＳＣＳＩプロトコルまたは類似のものを使用して、ストレージアレイに接続され得る。
【０００３】
仮想的または物理的マシンのいずれかに対するストレージをエミュレート（ｅｍｕｌａｔｅ）するために、ストレージハンドリングモジュールが使用できる。例えば、ストレージハンドリングモジュールは、一つまたはそれ以上の仮想化ディスクファイルを読出し、または書込みすることによって、仮想化または物理的マシンにより発行された入出力（ＩＯ）ジョブを扱うことができる。それらは、仮想ディスクのエクステント（ｅｘｔｅｎｔ）、つまり、ブロック（ｂｌｏｃｋ）といったストレージの隣接した領域、を記述、つまり、保管するために使用され得る。このように、ストレージハンドリングプログラムは、一つまたはそれ以上の仮想ディスクファイルに対して、仮想ディスクのためのビットパターンデータを書き込むことにより書込みリクエストに対応し、そして、一つまたはそれ以上の仮想ディスクファイルの中に保管されたビットパターンデータを読み出すことにより読出しリクエストに対応することができる。
【先行技術文献】
【特許文献】
【０００４】
【特許文献１】米国特許出願第１２／８８８４３３号明細書
【特許文献２】米国特許出願第１２／９３８３８３号明細書
【発明の概要】
【発明が解決しようとする課題】
【０００５】
本発明開示は、仮想ディスクに対するデータを一つまたはそれ以上の仮想ディスクファイルに保管する技術について記載する。
【課題を解決するための手段】
【０００６】
典型的な構成において、仮想ディスクエクステントは、仮想ディスクファイルによってその仮想ディスクエクステントが記述されているかどうかを示す状態情報と関連付けされ得る。特定の条件の下で、仮想ディスクエクステントを記述するために使用されたスペース（ｓｐａｃｅ）は、リクレーム（ｒｅｃｌａｉｍ）され得るし、状態情報は、その仮想ディスクエクステントに対して指示された後続の読出し及び／又は書込みオペレーションをどのように扱うかを決定するために使用され得る。リクレームされたスペース、例えば一つまたはそれ以上のレンジ（ｒａｎｇｅ）から成るエクステント、は、同一または別の仮想ディスクエクステントを記述するために使用され得る。上述に加えて、他の技術が、特許請求の範囲、発明の詳細な説明、および図面において説明される。
【０００７】
本発明開示の一つまたはそれ以上の種々の態様は、これらに限定されるわけではないが、ここにおいて参照される態様をもたらすための回路及び／又はプログラムを含むことが、当業者によって正しく理解されよう。回路及び／又はプログラムは、システム設計者のデザイン選択に基づいて、ここにおいて参照される態様をもたらすように構成されたハードウェア、ソフトウェアプログラム、及び／又は、ファームウェアの仮想的なあらゆる組み合わせであり得る。
【０００８】
上述は概要であり、従って、必要に応じて、詳細部の簡素化、一般化、そして、省略を含んでいる。概要は、説明のためだけのものであり、どのような方法においても本発明を限定することを意図するものではないことが、当業者によって正しく理解されよう。
【図面の簡単な説明】
【０００９】
【図１】図１は、コンピューターシステムのハイレベルなダイヤグラムを示している。
【図２】図２は、ソフトウェアプログラムの仮想化のための典型的な構成についてハイレベルなダイヤグラムを示している。
【図３】図３は、ソフトウェアプログラムの仮想化のための別の構成についてハイレベルなダイヤグラムを示している。
【図４】図４は、仮想ディスクを遂行するために構成されたコンピューターシステムのローレベルなダイヤグラムを示している。
【図５Ａ】図５Ａは、仮想ディスクを遂行するために構成されたコンピューターシステムのローレベルなダイヤグラムを示している。
【図５Ｂ】図５Ｂは、仮想ディスクを遂行するために構成されたコンピューターシステムのローレベルなダイヤグラムを示している。
【図６】図６は、異なるディスクのハイレベルなダイヤグラムを示している。
【図７】図７は、仮想ディスクと仮想ディスクファイルとの関係のハイレベルな説明図である。
【図８】図８は、仮想ディスクと仮想ディスクファイルとの関係のハイレベルな説明図である。
【図９】図９は、仮想ディスクと仮想ディスクファイルとの関係のハイレベルな説明図である。
【図１０】図１０は、仮想ディスクと仮想ディスクファイルとの関係のハイレベルな説明図である。
【図１１】図１１は、コンピューターで読み取り可能なストレージ媒体において実施され、及び／又は、コンピューターシステムによって実行される、オペレーション工程を示している。
【図１２】図１２は、図１１で説明された工程と併せて実行され得る追加のオペレーションを示している。
【図１３】図１３は、図１２で説明された工程と併せて実行され得る追加のオペレーションを示している。
【図１４】図１４は、コンピューターで読み取り可能なストレージ媒体において実施され、及び／又は、コンピューターシステムによって実行される、オペレーション工程を示している。
【図１５】図１５は、図１４で説明された工程と併せて実行され得る追加のオペレーションを示している。
【図１６】図１６は、コンピューターで読み取り可能なストレージ媒体において実施され、及び／又は、コンピューターシステムによって実行される、オペレーション工程を示している。
【図１７】図１７は、図１６で説明された工程と併せて実行され得る追加のオペレーションを示している。
【発明を実施するための形態】
【００１０】
開示された技術的事項は一つまたはそれ以上のコンピューターシステムにおいて使用されてよい。図１および以降の説明は、開示された技術的事項が実行され得る好適なコンピューター環境の簡潔で一般的な説明を提供することを意図したものである。
【００１１】
至る所で使用される用語である回路（ｃｉｒｃｕｉｔｒｙ）は、ハードウェアインタラプトコントローラー、ハードドライブ、ネットワークアダプター、グラフィックプロセッサ、ハードウェアベースのビデオ／オーディオコード、といったハードウェアコンポーネント、および、そうしたハードウェアを動作するために使用されるファームウェアを含み得る。回路は、また、マイクロプロセッサ、特定アプリケーション集積回路（ＡＳＩＣ）、および、例えば、ファームウェア及び／又はソフトウェアによって構成され、インストラクションの読出しと実行を実施するマルチコア汎用処理装置のコア、といったプロセッサ、も含み得る。プロセッサは、例えば、ＲＡＭ、ＲＯＭ、ファームウェア、及び／又は、マスストレージ、といったメモリーからロードされたインストラクションによって構成され、プロセッサが機能を実行するための構成をするように動作可能なロジックを具現化する。回路がハードウェアとソフトウェアの組合わせを含む、一つの典型的な実施例において、実施者は、ハードウェアによって実行され得る、マシンで読み取り可能なコードの中に後でコンパイルされるロジックを具現化するソースコードを書き込んでもよい。当業者であれば、最先端の技術はハードウェアで実施される機能とソフトウェアで実行される機能との違いがほとんどないところまで進化してきたことを理解しているので、ここにおいて説明される機能を遂行するためのハードウェア対ソフトウェアの選択は、単なるデザイン選択に過ぎない。別の言い方をすれば、当業者であれば、ソフトウェアによるプロセスは同等なハードウェア構成に変換することができ、ハードウェア構成自身は同等なソフトウェアによるプロセスに変換することができることを理解しているので、ハードウェアによる実施対ソフトウェアによる実施の選択は、実施者に任されている。
【００１２】
図１を参照すると、典型的なコンピューティングシステム１００が示されている。コンピューターシステム１００は、例えば、実行コアである、プロセッサ１０２を含んでよい。一つのプロセッサが示されているが、別の実施例において、コンピューターシステム１００は、マルチプロセッサを有してもよい。例えば、プロセッササブストレート（ｓｕｂｓｔｒａｔｅ）あたりにマルチな実行コアプロセッサ、及び／又は、マルチな実行コアをそれぞれが有し得るマルチプロセッササブストレートである。図に示されるように、種々のコンピューターで読み取り可能なストレージ媒体１１０が、種々のシステムコンポーネントをプロセッサ１０２に接続する一つまたはそれ以上のシステムバスによって、相互に接続され得る。システムバスは、バス構成のいくつかのタイプのどれでもよく、メモリーバス、メモリーコントローラー、ペリフェラルバス、および、種々のバス構成のうちいずれかを使用するローカルバス、を含んでいる。典型的な実施例において、コンピューターで読み取り可能なストレージ媒体１１０は、例えば、ランダムアクセスメモリー（ＲＡＭ）１０４、例えば、電子機械的ハードドライブ、半導体ハードドライブ、等のストレージデバイス１０６、例えば、ＦＬＡＨ  ＲＡＭまたはＲＯＭといったファームウェア１０８、例えば、ＣＤ−ＲＯＭ、フロッピー(登録商標)ディスク、ＤＶＤ、フラッシュドライブ、外部ストレージデバイス、等といった、取外し可能なストレージデバイス１１８、を含んでよい。当業者によって、磁気カセット、フラッシュメモリーカード、及び／又は、デジタルビデオディスク、といった、他のタイプのコンピューターで読み取り可能なストレージ媒体が使用され得ることが正しく理解されるべきである。
【００１３】
コンピューターで読み取り可能なストレージ媒体１１０は、実行可能なインストラクションといったコンピューターシステム１００のための、プロセッサが実行可能なインストラクション１２２、データ構造、プログラムモジュール、および、他のデータについて、不揮発性および揮発性のストレージを提供する。スタートアップの最中といった、コンピューターシステム１００の中のエレメント間で情報を伝送するのを助ける基本的なルーチンを含む、ベーシック入力／出力システム（ＢＩＯＳ）１２０は、ファームウェア１０８の中に保管され得る。多くのプログラムが、ファームウェア１０８、ストレージデバイス１０６、ＲＡＭ１０４、及び／又は、取外し可能なストレージデバイス１１８、に保管され、オペレーティグシステム及び／又はアプリケーションプログラムを含んでプロセッサによって実行される。典型的な実施例において、コンピューターで読み取り可能なストレージ媒体１１０は、仮想ディスクパーサ（ｐａｒｓｅｒ）４０４を保管することができるが、詳しくは以降のパラグラフにおいて説明される。そして、コンピューターシステム１００を、特定の目的のために構成されたコンピューターシステム、つまり、この発明開示において説明される技術に従って構成されたコンピューターシステム、へと変換することによってプロセッサ１０２により実行され得る。
【００１４】
コマンドと情報は、これらに限定されるわけではないが、キーボードおよびポインティングデバイスを含む、入力デバイスを介してコンピューターシステム１００によって受取ることができる。他の入力デバイスとして、マイクロフォン、ジョイスティック、ゲームパッド、スキャナー、といったものが含まれてよい。これら、および、他の入力デバイスは、しばしば、システムバスに接続されたシリアルポートインターフェイスを通じてプロセッサ１０２に接続される。しかし、パラレルポート、ゲームポート、または、ユニバーサルシリアルポート（ＵＳＢ）といった他のインターフェイスによって接続されてもよい。ディスプレイまたは他のタイプのディスプレイ装置も、また、グラフィックプロセッサユニット１１２の一部であり、もしくは接続されるビデオアダプターといったインターフェイスを介してシステムバスに接続され得る。ディスプレイに加えて、コンピューターは、典型的には、スピーカーおよびプリンター（図示なし）といった、他のペリフェラル出力デバイスを含んでいる。図１の典型的なシステムは、また、ホストアダプター、スモールコンピューターシステムインターフェイス（ＳＣＳＩ）、および、ＳＣＳＩバスに接続された外部ストレージデバイスを含み得る。
【００１５】
コンピューターシステム１００は、離れたコンピューターといった、一つまたはそれ以上の離れたコンピューターに対するロジカル接続を使用して、ネットワーク化された環境において動作し得る。離れたコンピューターは、別のコンピューター、サーバー、ルーター、ネットワークＰＣ、ピア（ｐｅｅｒ）デバイス、または、他の共通ネットワークノードであり得るし、典型的には、コンピューターシステム１００に関して上述された多くのまたは全てのエレメントを含んでもよい。
【００１６】
ＬＡＮまたはＷＡＮのネットワーク環境において使用される場合、コンピューターシステム１００は、ネットワークインターフェイスカード（ＮＩＣ）１１４を通じて、そのＬＡＮまたはＷＡＮに接続され得る。ＮＩＣ１１４は、内部または外部のカードでよいが、システムバスに接続され得る。ネットワーク環境において、コンピューターシステム１００に関して示されたプログラムモジュール、または、その一部は、離れたメモリーストレージデバイスに保管され得る。ここにおいて説明されるネットワーク接続は典型的なものであり、コンピューター間の通信リンクを確立する他の手段が使用され得るということが、正しく理解されよう。さらに、本発明開示の数多くの実施例がコンピューター化されたシステムに対して特によく適応していることが描かれている一方で、この文書においては、本発明開示をそうした実施例に限定することは全く意図されていない。
【００１７】
図２に移ると、仮想マシンを生成するために使用することができる典型的な仮想化プラットフォームが示されている。この実施例において、マイクロカーネルハイパーバイザー（ｍｉｃｒｏｋｅｒｎｅｌ  ｈｙｐｅｒｖｉｓｏｒ）２０２は、コンピューターシステム２００のハードウェアに対するアクセスをコントロールし、調整するように構成され得る。マイクロカーネルハイパーバイザー２０２は、パーティション（ｐａｒｔｉｔｉｏｎ）と呼ばれる実行環境を生成することができる。子パーティション１から子パーティションＮ（Ｎは、１以上の整数）といったものである。ここにおいて、子パーティションは、マイクロカーネルハイパーバイザー２０２によってサポートされた、分離の基本単位である。マイクロカーネルハイパーバイザー２０２は、一つのパーティションにおけるプロセスを別のパーティションのリソースにアクセスすることから分離することができる。特に、マイクロカーネルハイパーバイザー２０２は、カーネルモードのゲストオペレーティグシステムのコードを、別のパーティションのリソースにアクセスすることから分離することができ、ユーザーモードのプロセスも同様である。それぞれの子パーティションは、例えば、メモリー、デバイス、プロセッササイクル、等といった、マイクロカーネルハイパーバイザー２０２のコントロールの下にある一式のハードウェアリソースに対してマップされ得る。実施例において、マイクロカーネルハイパーバイザー２０２は、スタンドアロンのソフトウェアプロダクト、オペレーティグシステムの一部、マザーボードのファームウェアの中にエンベットされたもの、特別な集積回路、または、これらの組み合わせであり得る。
【００１８】
マイクロカーネルハイパーバイザー２０２は、物理的コンピューターシステムにおけるゲストオペレーティグシステムのメモリーのビュー（ｖｉｅｗ）を制限することによって、パーティション化を執行することができる。マイクロカーネルハイパーバイザー２０２が、仮想マシンをインスタンス化（ｉｎｓｔａｎｔｉａｔｅ）する場合には、システムの物理的メモリー（ＳＰＭ）のページ（例えば、開始および終了アドレスを伴なうメモリーの固定長ブロック）を、ゲストの物理的メモリー（ＧＰＭ）として仮想マシンに割り当てることができる。ここで、ゲストの制限されたシステムメモリーのビューは、マイクロカーネルハイパーバイザー２０２によってコントロールされる。ゲストの物理的メモリー、という用語は、仮想マシンの観点からメモリーのページを記述する簡潔な方法であり、システムの物理的メモリー、という用語は、物理的システムの観点からメモリーのページを記述する簡潔な方法である。従って、仮想マシンに割り当てられたメモリーのページは、ゲストの物理アドレス（仮想マシンによって使用されるアドレス）と、システムの物理アドレス（ページの現実のアドレス）を有することになる。
【００１９】
ゲストオペレーティグシステムは、ゲスト物理的メモリーを仮想化してもよい。仮想メモリーは、オペレーティグシステムがメモリーをオーバーコミット（ｏｖｅｒ  ｃｏｍｍｉｔ）できるようにし、物理的に連続したワーキングメモリ（ｗｏｒｋｉｎｇ  ｍｅｍｏｒｙ）に対してアプリケーションが唯一のアクセスを与えるようにする、マネージメント技術である。仮想化環境において、ゲストオペレーティグシステムは、仮想ゲストアドレスとして知られる仮想アドレスをゲスト物理アドレスに変換するために、この文書においてゲストページと呼ばれる、一つまたはそれ以上のページテーブルを使用することができる。この実施例において、メモリーアドレスは、ゲスト仮想アドレス、ゲスト物理アドレス、および、システム物理アドレスを有してよい。
【００２０】
示された実施例において、親パーティションコンポーネントは、Ｘｅｎのオープンソースハイパーバイザー（ｏｐｅｎ  ｓｏｕｒｃｅ  ｈｙｐｅｒｖｉｓｏｒ）のドメイン０と類似していると考えられるものであるが、ホスト環境２０４を含むことができる。ホスト環境２０４は、オペレーティグシステム（または、一式のコンフィグレーションユーティリティ）であり得るし、ホスト環境２０４は、仮想化サービスプロバイダー２２８（ＶＳＰ）を使用して、子パーティション１からＮを実行しているゲストオペレーティグシステムに対してリソースを提供するように構成され得る。ＶＳＰ２２８は、典型的にはオープンソースコミュニティにおいてバックエンドのドライバーとして言及されるが、仮想化サービスクライアント（ＶＳＣ）によってハードウェアリソースに対するインターフェイスを多重化するために使用することができる（ＶＳＣは、典型的には、オープンソースコミュニティにおけるフロントクエンドのドライバー、または、パラ（ｐａｒａ）仮想デバイスとして言及される）。図に示すように、視覚化サービスクライアントは、ゲストオペレーティグシステムの状況の中で実行される。しかしながら、これらのドライバーはゲストにおける他のドライバーとは異なり、ハードウェアまたはエミュレートされたハードウェアと通信する代わりに、ＶＳＰを介してホスト環境２０４と通信する。典型的な実施例において、仮想化サ−ビスクライアント２１６および２１８と通信するために仮想化サ−ビスプロバイダー２２８によって使用されるパス（ｐａｔｈ）は、エンライトＩＯ（ｅｎｌｉｇｈｔｅｎｅｄ  ＩＯ）パスとして考えられ得る。
【００２１】
図に示すように、エミュレーター２３４、例えば、仮想ＩＤＥデバイス、仮想ビデオアダプター、仮想ＮＩＣ、等は、ホスト環境２０４の中で実行するように構成することができ、エミュレートされたハードウェアリソース、例えば、ＩＯポート、ゲスト物理アドレス領域、仮想ＶＲＡＭ、エミュレートされたＲＯＭ領域、等のゲストオペレーティグシステム２２０および２２２に対して利用可能なもの、に接続される。例えば、ゲストＯＳが、デバイスのレジスターがメモリのマップされたデバイスであるであろうところのゲスト物理アドレスにマップされたゲスト仮想アドレスにタッチする場合は、マイクロカーネルハイパーバイザー２０２が、リクエストをインターセプト（ｉｎｔｅｒｃｅｐｔ）し、ゲストが関連のエミュレーターに書き込もうと試みた値を伝える。ここで、この実施例におけるエミュレートされたハードウェアリソースは、ゲスト物理アドレス空間に配置された仮想デバイスであるとして考えられ得る。エミュレーション使用のこうした方法は、考えられたエミュレーションパス（ｐａｔｈ）であり得る。エミュレーションパスは、エンライトＩＯパスと比較して効率がよくない。ＶＳＰとＶＳＣとの間にメッセージを伝えるよりも、デバイスをエミュレートするためにより多くのＣＰＵ時間を要するからである。例えば、エミュレーションパスを介してディスクに対してバッファーを書き込むために、レジスターにマップされたメモリー上のいくつかのアクションが必要である。一方で、このことは、エンライトＩＯパスにおけるＶＳＣからＶＳＰに伝えられる一つのメッセージに削減され得る。ＶＭにおけるドライバーは、ハードウェアにアクセスするための設計よりむしろ、仮想化システムによって提供されるＩＯサービスにアクセスするように設計されているからである。
【００２２】
それぞれの子パーティションは、一つまたはそれ以上の仮想プロセッサ（２３０と２３２）を含み得る。ゲストオペレーティグシステム（２２０と２２２）は、その上で実行されるスレッド（ｔｈｒｅａｄ）を管理し、スケジュールすることができる。一般的に、仮想プロセッサは、実行可能なインストラクション、および関連の状態情報であり、物理的プロセッサの表現に特定のアーキテキチャーを提供している。例えば、一つの仮想マシンは、インテルｘ８６プロセッサの特性をもった仮想プロセッサを有し得る一方で、別の仮想プロセッサがパワーＰＣプロセッサの特性を有してもよい。この実施例における仮想プロセッサは、コンピューターシステムのプロセッサに対してマップされてもよい。仮想プロセッサを遂行するインストラクションが、物理的プロセッサによって直接的に実行されるようにである。従って、マルチプロセッサを含む実施例において、例えば、他のプロセッサがハイパーバイザーインストラクションを実行する一方で、プロセッサによって、同時に仮想プロセッサが実行され得る。パーティションにおける仮想プロセッサとメモリーの組合わせは、仮想マシンであると考えられる。
【００２３】
ゲストオペレーティグシステム（２２０と２２２）は、例えば、マイクロソフト、アップル、オープンソースコミュニティ、等からのオペレーティグシステムであってよい。ゲストオペレーティグシステムは、オペレーションのユーザー／カーネルモードを含み得るし、スケジューラー、メモリーマネージャー、等を含むカーネルを有し得る。一般的に言えば、カーネルモードは、プロセッサにおいて、少なくとも特権のあるプロセッサのインストラクションへのアクセスを保証する実行モードを含み得る。それぞれのオペレーティグシステムは、ターミナルサーバー、ｅコマースサーバー、ｅメールサーバー、等、といったものに保管されたアプリケーションを有することができる関連のファイルシステム、および、ゲストオペレーティグシステム自身を、有し得る。ゲストオペレーティグシステムは、仮想プロセッサ上で実行されるスレッド、および、そうしたアプリケーションが遂行され得るインスタンスをスケジュールすることができる。
【００２４】
図３を参照すると、図２において説明されたものに対する代替的な仮想化プラットフォームが示されている。図３は、図２と類似のコンポーネントを示している。しかしながら、この実施例において、ハイパーバイザー３０２は、マイクロカーネルコンポーネント、および、仮想化サービスプロバイダー２２８やデバイスドライバー２２４といった図２のホスト環境２０４におけるものと類似のコンポーネントを含み得る。一方で、マネージメントオペレーティグシステム３０４は、例えば、ハイパーバイザー３０２を構成するために使用されるコンフィグレーションユーティリティを含み得る。このアーキテクチャーにおいて、ハイパーバイザー３０２は、図２のマイクロカーネルハイパーバイザー２０２と同一または類似の機能を実行することができる。しかしながら、このアーキテクチャーにおいて、ハイパーバイザー３０４は、エンライトＩＯパスを遂行し、コンピューターシステムの物理的ハードウェアのためのドライバーを含み得る。図３のハイパーバイザーは、スタンドアロンのソフトウェアプロダクト、オペレーティグシステムの一部、マザーボードのファームウェアの中にエンベッドされたもの、であってよく、ハイパーバイザー３０２の一部は、特別の集積回路によって遂行されてもよい。
【００２５】
図４に移ると、コンピューターシステム４００が示されており、この文書において説明される従来技術を達成するために使用され得るハイレベルのブロックダイヤグラムを示している。簡潔には、コンピューターシステム４００は、図１から図３に関して説明されたものと類似のコンポーネントを含み得る。図４は、仮想化システム４２０を示しており、図２または図３によって説明された仮想化プラットフォームのハイレベルな表現として考えられ得る。例えば、仮想化システム４２０は、マイクロカーネルハイパーバイザー２０２とホスト環境２０４によって提供される特徴の組合せのハイレベルな表現として考えられ得る。代替的に、仮想化システム４２０は、ハイパーバイザー３０２とマネージメントＯＳ３０４のハイレベルな表現として考えられ得る。従って、この文書の至る所にある用語「仮想化システム４２０」の使用は、以降のパラグラフで説明される仮想ディスク技術が、あらゆるタイプの仮想化ソフトウェア層の中、または、あらゆるタイプの仮想化プラットフォームの中で実行され得ることを示している。
【００２６】
仮想化システム４２０は、オフロード（ｏｆｆｌｏａｄ）プロバイダーエンジン４２２を含み得る。簡潔には、オフロードプロバイダーエンジン４２２は、例えば、アプリケーションから発行されたオフロード書込み及びオフロード読出しリクエスト（ときどき、ＰＲＯＸＹ  ＲＥＡＤおよびＰＲＯＸＹ  ＷＲＩＴＥと呼ばれるもの）をサービスするように構成され得る。オフロード読出しリクエストは、オフロード読出しがノーマルリード（ｎｏｒｍａｌ  ｒｅａｄ）であった場合に読み出されるであろうデータを表すトークンを創出するリクエストである。オフロード書込みリクエストは、宛先ロケーションに対するトークンによって表されるデータを書き込むためのリクエストである。一つの実施例では、オフロード読出しとそれに続くオフロード書込みは、データを一つのロケーションから別のロケーションにコピーするために使用され得る。例えば、ローカルＲＡＭを通じて移動することを避けるためのデータを表すトークンを使用した、コンピューターシステム４００からドメインの中の宛先コンピューターシステムへのコピーである。例えば、コンピューターシステム４００と宛先コンピューターシステム（図示なし）が共通のデータレポジトリ（ｒｅｐｏｓｉｔｏｒｙ）にアクセスでき、コンピューターシステムからその宛先にデータをコピーするリクエストを受取った場合を想定してみよ。データを宛先にコピーする代わりに、アプリケーション４２４は、オフロードプロバイダーエンジン４２２に対して、トークンを発行するリクエストを発行してもよい。トークンは、トークンがそのデータと関連するときに存在するがままのデータを表すものである。トークンは、宛先に送付され、共通のストレージレポジトリからデータを獲得し、宛先にデータを書き込むために、宛先において実行されているプログラムによって使用され得る。コピー−オフロード技術の詳細は、タイトル“Ｏｆｆｌｏａｄ  Ｒｅａｄｓ  ａｎｄ  Ｗｒｉｔｅｓ”の米国特許出願第１２／８８８４３３号明細書と、タイトル“Ｖｉｒｔｕａｌｉｚａｔｉｏｎ  ａｎｄ  Ｏｆｆｌｏａｄ  Ｒｅａｄｓ  ａｎｄ  Ｗｒｉｔｅ”の米国特許出願第１２／９３８３８３号明細書に説明されている。これらの内容は、それらがこの文書において説明される技術と一致している限り、それらの全体がここにおいて参照として包含されている。
【００２７】
仮想ディスクパーサ４０４は、特定の実施例において実行可能なインストラクションのモジュールであり得るが、仮想ディスクを仮想ディスクファイルからインスタンス化し、仮想マシンに変わってストレージＩＯを扱うために使用され得る。図に示されるように、仮想ディスクパーサ４０４は、仮想ディスクファイル４０６といった、一つまたはそれ以上の仮想ディスクファイルをオープンし、仮想ディスク４０２を生成することができる。
【００２８】
仮想ディスクパーサ４０４は、仮想化システムファイルシステム４０８を介して、ストレージデバイス１０６から仮想ディスクファイル４０６を獲得し得る。簡潔には、仮想化システムファイルシステム４０８は、コンピューターファイル、および、仮想ディスクファイル４０６といった仮想システム４２０のデータを体系づけるソフトウェアモジュールを表している。仮想化システムファイルシステム４０８は、このデータを、固定サイズの物理的エクステントのアレイ（ａｒｒａｙ）の中、つまり、物理的ストレージデバイスの連続した領域、に保管することができる。特定の実施例において、エクステントはクラスター（ｃｌｕｓｔｅｒ）であり、設定された長さを有するビット（ｂｉｔ）に係るバイト（ｂｙｔｅ）の配列であり得る。典型的なクラスターサイズは、５１２バイトと６４キロバイトの間の２乗の数である。特定の構成において、クラスターサイズは６４キロバイトであってよい。
【００２９】
仮想ディスクファイル４０６をオープンするためのリクエストを受取った場合に、仮想化システムファイルシステム４０８は、そのファイルがディスク上でどこに位置しているかを判断し、ディスクデバイスドライバーに対して、一つまたはそれ以上のディスクの物理的エクステントからデータを読み出すようにＩＯジョブを発行する。ファイルシステム４０８によって発行されたＩＯジョブは、ストレージデバイス１０６上での仮想ディスクファイルのパーシスタントコピー（ｐｅｒｓｉｓｔｅｎｔ  ｃｏｐｙ）の位置を表すディスクのオフセットと長さを決定し、ストレージデバイス１０６に対してＩＯジョブを発行する。ストレージデバイスがどのように動作するかの意味論のために、書込みＩＯジョブは、ストレージデバイス１０６の回路が、例えば、円板、フラッシュメモリー、等の固定ストレージユニット４６０上の場所にアクセスすることを決定するまで、キャッシュ４５４で表される、揮発性メモリーの一つまたはそれ以上のキャッシュのレベルの中にバッファーされ、固定ストレージユニット４６０に対して仮想ディスファイル４０６のパーシスタントコピーの新たな内容を表すバッファーされたビットパターンを書き込むことができる。
【００３０】
仮想ディスクパーサ４０４は、仮想ディスクファイル４０６を示すビットパターンを獲得することができ、複数の仮想ディスクエクステントを含むディスクとして、仮想ディスクファイル４０６におけるペイロード（ｐａｙｌｏａｄ）、例えばユーザーデータ、を公開することができる。一つの実施例において、これらの仮想ディスクエクステントは、５１２キロバイトから上は６４メガバイトまでの固定サイズのブロックで、複数のセクターにパーティション化されたものであってよい。しかしながら、別の実施例においては、仮想ディスクエクステントは、可変サイズのエクステントであり得る。典型的な構成では、ゲストオペレーティグシステム４１２をブートする前に、エミュレートまたはエンライトされたストレージコントローラーに関するリソースと、エミュレートまたはエンライトされた仮想ディスクの態様が設定される。レジスターにマップされたメモリーを伴なうエミュレートされたストレージコントローラーが、仮想マシン４１０のゲスト物理アドレス空間の中で有効なようにである。ブートコードが実行され、ゲストオペレーティグシステム４１２がブートされる。仮想化システム４２０は、ゲスト物理アドレス空間のこの領域にアクセスしようとする試みを検知し、結果を返すことができ、それにより、ゲストオペレーティグシステム４１２は、ストレージデバイスがエミュレートされたストレージコントローラーに接続されていると判断できる。応答として、ゲストオペレーティグシステム４１２は、ドライバー（パラ（ｐａｒａ）仮想化ドライバーまたは標準のドライバーのいずれか）をロードし、検知されたストレージデバイスに対してストレージＩＯリクエストを発行するためにそのドライバーを使用する。仮想化システム４２０は、ストレージＩＯリクエストを仮想ディスクパーサ４０４に対して伝えることができる。
【００３１】
ゲストオペレーティグシステム４１２は、実行されると、ファイルシステム４１４を介して仮想ディスク４０２に対してＩＯジョブを発行することができる。このことは、コンピューターファイルとゲストオペレーティグシステム４１２のデータ、および、ゲストオペレーティグシステム４１２上にインストールされたアプリケーションを体系付けることにおいて、仮想化システムのファイルシステム４１４と類似している。ゲストオペレーティグシステム４１２は、オペレーティグシステムが物理的ストレージデバイスとインタラクトするやり方と類似の方法において、仮想ディスク４０２とインタラクトすることができ、ついには、ＩＯジョブが仮想ディスクパーサ４０４へ伝えられる。仮想ディスクパーサ４０４は、物理的ストレージデバイスをエミュレートするやり方で、ＩＯジョブにどのように対応するかを決定するためのロジックを含んでよい。例えば、仮想ディスクパーサ４０４は、仮想ディスクファイル４０６からデータを読み出し、仮想ディスクファイル４０６にデータを書き込むことができる。次に、仮想ディスクファイル４０６に書き込まれたデータは、仮想化システムのファイルシステム４０８を通じて伝送され、固定ストレージユニット４６０上または中に保管された仮想ディスクファイルのパーシスタントコピーに引き渡される。
【００３２】
簡潔に図５Ａを参照すると、この文書において説明される技術を実行するための代替的なアーキテクチャーが示されている。図５に示すように、仮想ディスクパーサ４０４は、また、マイクロソフトから提供されるオペレーティグシステムといった、オペレーティグシステム５０２の中で実行され得る。この実施例において、仮想ディスクパーサ４０４は、ストレージサーバー５００上で実行されるように構成され得る。ストレージサーバーは、図１のコンピューターシステム１００に類似のコンポーネントを含み得る。この実施例において、ストレージサーバー５００は、物理的ストレージデバイス５１０のアレイを含み、ストレージがオペレーティグシステム５０８に対してローカルで接続されているように見えるように、サーバーに対してストレージを利用可能にすることができる。仮想ディスクパーサ４０４は、図４に関して説明したのと同様に動作できる。この構成における相違は、ファイルシステム４１４によって発行されたＩＯジョブが、ネットワーク接続を通じて仮想ディスクパーソナルコンピューターさ４０４に伝送され得ることである。
【００３３】
簡潔に図５Ｂを参照すると、この文書において説明される技術を実行するためのさらなる別のアーキテクチャーが示されている。図５Ｂは、仮想ディスクパーサ４０４がオペレーティグシステム５０２において実行されること、および、コンピューターシステム５１２が図１のコンピューターシステム１００に類似するコンポーネントを含み得るという点で、図５Ａと類似している。しかしながら、この実施例における相違は、ループバック接続（ｌｏｏｐｂａｃｋ−ａｔｔａｃｈｅｄ）の仮想ディスク４０２が記載されていることである。ファイルシステム４１４は、アプリケーション４２４といったアプリケーションを含むが、仮想ディスク４０２の中に保管され得るし、仮想ディスクファイル４０６は、コンピューターシステムのファイルシステム５１４の中に保管され得る。
【００３４】
ここで仮想ディスク４０２に注目すると、仮想ディスクは単一の仮想ディスクファイルによって作用され得る一方で、別の構成においては、仮想ディスク４０２をもたらすために、差分仮想ディスクファイル（ｄｉｆｆｅｒｅｎｃｉｎｇ  ｖｉｒｔｕａｌ  ｄｉｓｋ  ｆｉｌｅ）のグループが使用され得る。図６は、仮想ディスク４０２が差分ディスクとして作用するために、仮想ディスクパーソナルコンピュータパーサ４０４によって使用され得る典型的な仮想ディスクのチェインを示している。一般的に、差分仮想ディスクファイルは、親イメージとの比較において変更された一式のエクステントとしての、仮想ディスクの現在の状態を表す。親イメージは、別の差分仮想ディスクファイルであるか、または、ベース仮想ディスクファイルであり得る。
【００３５】
典型的な構成においては、親仮想ディスクファイルと子仮想ディスクファイルとの間のリンクは、子の中に保管することができる。特に、子は、親の識別子と親の場所を示す値を含み得る。仮想マシンを開始すると、仮想ディスクパーサ４０４は、チェインにおける最後の仮想ディスクファイルを示す情報を受け取る。つまり、仮想ディスクファイル６１２は、仮想ディスクファイル６１２、６１０、６０６、および、６００を含むチェインの最後であり、このファイルをオープンする。このファイルは、その親の識別子を含み得る。つまり、仮想ディスクファイル６１０と、そこへのパスである。仮想ディスクパーサ４０４は、ベース仮想ディスクファイルが配置され、オープンされるまで、親を配置し、オープンする、といったようなことができる。
【００３６】
仮想ディスクパーサ４０４は、データが親仮想ディスクファイルの中に存在しているか、保管されているかどうかを示す情報を使用することができる。典型的に、チェインにおける最後の仮想ディスクファイルは、読出し／変更としてオープンされ、他の仮想ディスクファイルは、読出し専用としてオープンされる。従って、書込みは、チェインにおける最後の仮想ディスクファイルに対して行われる。読出しオペレーションは、同様に、最初に、チェインにおける最後の仮想ディスクファイルに向けられる。そして、仮想ディスクパーサ４０４は、論理的順序において、最後の仮想ディスクファイルからベース仮想ディスクファイルまでを検索し、そのデータがどこに配置されているかの情報はキャッシュされていないというデータが見つけられるまで続ける。特定の実施例において、仮想ディスクファイル、例えば仮想ディスクファイル６１２、のためのブロックアロケーション（ｂｌｏｃｋ  ａｌｌｏｃａｔｉｏｎ）テーブル（図示なし）は、仮想ディスクエクステントが仮想ディスクファイルのセクションによって定められるかどうか、または、この仮想ディスクエクステントがトランスペアレント（ｔｒａｎｓｐａｒｅｎｔ）であるかを示す状態情報を含み得る。例えば、さらなるチェインに沿った異なる仮想ディスクファイルによって定められる。一つの実施例においては、仮想ディスクパーサ４０４は、この仮想ディスクエクステントがトランスペアレントであるかどうかを判断すること、チェインにおける次の仮想ディスクファイル、例えば仮想ディスクファイル６１０、に対するブロックアロケーションテーブルにアクセスすること、などといったことができ、そのデータを定めるチェインにおける仮想ディスクファイルが配置されるまで続ける。
【００３７】
図７を参照すると、図は、仮想ディスクファイル７０２によって、少なくとも部分的に説明された仮想ディスク４０２を示している。仮想ディスクは、図６において説明された書込み／変更可能なあらゆる仮想ディスクファイル、例えば、仮想ディスクファイル６０２、６０８、または６１２、に、もしくは、単一の仮想ディスクファイルに類似している。図に示されるように、仮想ディスク４１２は、Ｎ個のストレージに係るエクステントを含み得る（ここで、Ｎは０より大きい整数である）。そして、この特定の実施例では、仮想ディスク４０２は、１０個のエクステントを含んでいる。仮想ディスク４０２は、異なるファイルに対するビットパターンおよびゲストオペレーティグシステム４１２に対するデータを含んでいるように示されており、仮想ディスクエクステントの中の異なるパターンによって差別化される。
【００３８】
仮想ディスク４０２は物理的ストレージデバイスではないので、仮想ディスクエクステントに対して基礎をなすペイロードデータは、仮想ディスクファイル７０２の中の異なるセクションによって”記述される“、つまり、保管される。例えば、仮想ディスクエクステント１は、仮想ディスクファイルオフセット値０、または、ペイロードデータを保管するために使用できる最初のオフセットにより定められるセクションによって記述される。アロケーションテーブル４１６は、コンピューターシステム４００の動作中はランダムアクセスメモリーの中に保管され得るが、あらゆるセクションにおいて仮想ディスクファイル７０２の中で固定され得るし、複数のセクションを拡張し得る。簡潔には、アロケーションテーブル４１６は、仮想ディスクエクステントを仮想ディスクファイル７０２のセクションに対してリンクする情報を含んでいる。例えば、アロケーションテーブル４１６は、データを保管する仮想ディスクファイル７０２のセクションを定める仮想ディスクのファイルバイトオフセットを決定する情報を保管することができる。矢印は、アロケーションテーブル４１６に保管された関係を示している。
【００３９】
以降のパラグラフにおいてより詳細が説明されるが、アロケーションテーブル４１６は、また、状態情報も含み得る。しかしながら、この構成は典型的なものである。代替的な構成において、この情報は、仮想ディスクファイル７０２の異なるセクションに保管され、ＲＡＭ１０４の中にロードされ得る。アロケーションテーブル４１６は、それぞれの仮想ディスクエクステントに対するエントリーを含み得る。どの状態にそれぞれのエクステントが入っているかを示す状態情報、および、仮想ディスクファイル７０２においてそれぞれの仮想ディスクエクステントがどこに記述されているか(図示なし)を示すファイルオフセットである。代替的な実施例において、エクステントは、また、複数の既にマップされ（ファイルオフセットにおいて）連続したテーブルエントリーによっても定められ得る。この構成においては、ブロックペイロードがファイルにおいて連続である場合に、ブロック境界をまたぐ読出し及び書込みは、仮想ディスクファイル７０２に対する単一の読出し／書込みとしてサービスされ得る。特定の実施例において、仮想ディスクパーサ４０４は、また、どのタイプのビットパターンが、仮想ディスクファイルの使用されていないそれぞれのセクションに保管されているかを示す情報、つまり、フリースペースマップ、を保管することができる。上述に加えて、フリースペースマップは、仮想ディスクファイル４０６のどのセクターが使用され、どれがフリーであるかを判断するために、仮想ディスクパーサ４０４によって使用されることを許可する。この実施例におけるフリースペースマップは、非ゼロ（ｎｏｎ−ｚｅｒｏ）であるファイルにおけるフリースペースをトラックするように構成され得る。一つの典型的な実施例においては、仮想ディスク４０２の一部分を記述するためにフリースペースの非ゼロ領域を使用しているので、ゼロであり、または、他の仮想ディスクオフセットからの情報を開示してはならず、フリースペースは、ゼロまたは情報を開示しないパターン（典型的にはゼロ）で、それぞれ上書きされる。仮想ディスクパーサ４０４は、仮想ディスクファイルのどのセクションを仮想ディスクエクステントに割り当てるかを定めるために、この情報を使用することができる。例えば、ゼロ状態にある仮想ディスクエクステントに書き込む場合、仮想ディスクパーサ４０４は、仮想ディスクエクステントに戻るために、既に中にゼロを有しているセクションを割り当てることができる。
【００４０】
ゲストオペレーティグシステム４１２またはオペレーティグシステム５０８は、実行されると、データとファイルを生成し、仮想ディスク４０２に対して、データを保管するようにディスク書込みを発行する。仮想ディスクファイル７０２が、追加の使用されていないスペースを有しない場合、仮想ディスクパーサ４０４は、ファイルの終わりを延長し、その仮想ディスクエクステントを記述するために新たなスペースを使用することができる。ゲストオペレーティグシステム４１２またはオペレーティグシステム５０８は、仮想ディスク４０２のセクションを使用、削除、および、再使用することができる。しかしながら、仮想ディスクパーサ４０４は、単に、ファイルシステム４１４のためだけにデータを保管しているので、仮想ディスクパーサ４０４は、ゲストオペレーティグシステム４１２によって、仮想ディスクファイルのセクションが未だに使用されているかどうかを判断することができない。従って、仮想ディスクパーサ４０４は、もはやファイルシステム４１４によって使用されていない仮想ディスクエクステントを記述するために、仮想ディスクファイル７０２において割り当てられたスペースを保持する。この結果として、仮想ディスクファイル７０２のサイズは、仮想ディスク４０２のサイズに到達するまで増加し得る。
【００４１】
典型的な実施例において、仮想ディスクパーサ４０４は、仮想ディスクファイルの使用されていないセクションをリクレーム（ｒｅｃｌａｉｍ）し、任意的にそれらを再使用するように構成され得る。そのように、仮想ディスクファイルが拡張されるべき頻度は減り、仮想ディスクファイルの全体のサイズが削減される。一つの典型的な実施例において、ファイルシステムが、仮想ディスクエクステントをもはや使用していないことを知らせる場合、仮想ディスクパーサ４０４は、仮想ディスクファイルからの仮想ディスクエクステントの割り当てを解除し、つまりリンクをはずし、仮想ディスクエクステントを、その仮想ディスクエクステントに対する読出しオペレーションがどのように扱われるべきかを記述する情報に関連付けることができる。そして、仮想ディスクファイルのセクションは、同一または別の仮想ディスクエクステントを記述するために再使用され得る。
【００４２】
一つの典型的な構成において、仮想ディスクパーサ４０４は、ＴＲＩＭ、ＵＮＭＡＰ、及び／又は、仮想ディスクエクステントが、いつ仮想ディスクファイル４０６からの割り当てを解除できるかを判断するために、ファイルシステムによって発行されるゼロコマンドに係るＷＲＩＴＥ  ＳＡＭＥを使用することができる。ＴＲＩＭコマンドは、ゲストオペレーティグシステム４１２またはオペレーティグシステム５０８によって発行され得る。例えば、ゲストオペレーティグシステム４１２またはオペレーティグシステム５０８が実行されると、ファイルシステム４１４は、いくつかのセクターがもはや必要ではないと判断し、ＴＲＩＭコマンドを発行することがある。代替的に、または、追加的に、仮想ディスクパーサ４０４は、規定のインターバルにおいて、または、規定のクライテリアが満足された場合に、ファイルシステム４１４がＴＭＲコマンドを発行することをリクエストするように構成され得る。例えば、仮想マシン４１０がインスタンス化された場合、仮想マシン４１０がシャットダウンした場合、軽度の使用下、等である。
【００４３】
簡潔には、ＴＲＩＭコマンドは、データストレージデバイスに、どのセクターが使用中であるともはや考えられていないか、について、そのデータストレージデバイスに知らせるために使用される。そこに保管されたデータが、データストレージデバイスによって、任意的に消去され得るようにである。ＴＲＩＭコマンドの一つのタイプは、フリースペースＴＲＩＭコマンドと呼ばれるが、セクターがファイルシステム４１４によってもはや使用されていないことを知らせるために、ファイルシステム４１４によって使用され得る。スタンダードＴＲＩＭコマンドと呼ばれる他のコマンドはそうできない。ＴＲＩＭコマンドの２つのタイプ間の違いは、セクターがフリースペースＴＲＩＭの対象である場合に、ユーザースペースアプリケーション及びそういったものが、セクターから読出すことを防ぐことによって、ファイルシステム４１４が、セクターに対する安全を提供することである。この方法でトリム（ｔｒｉｍ）されたセクターへのアクセスをファイルシステム４１４が保証するという事実は、仮想ディスクファイルスペースを効率的に割り当てる能力を増大するために使用することができる。この特定の実施態様は、以降のパラグラフにおいてより詳細に説明される。
【００４４】
一つの典型的な構成において、仮想ディスクパーサ４０４は、仮想ディスクエクステントがＴＲＩＭコマンドによって完全にカバーされる場合に、再生オペレーションを実行するように構成され得る。また、他の方法としては、仮想ディスクパーサ４０４は、仮想ディスクエクステントにおける全てのセクターを特定する仮想ディスクのセクター領域を定めるＴＲＩＭコマンドの受け取りに応じて、仮想ディスクファイルから仮想ディスクエクステントの割り当てを解除することができる。同一または代替的な実施例において、仮想ディスクエクステントの一部をカバーするＴＲＩＭコマンドを受取った場合、仮想ディスクパーサ４０４は、消去されたセクターに対応するのは仮想ディスクファイルのどの領域であるかを判断することができ、ストレージデバイス１０６に対する仮想ディスクファイルの領域に対してＴＲＩＭコマンドを送付することができる。この実施例において、基礎をなすファイルシステム、例えば仮想化システムのファイルシステム４０８、ストレージサーバーのファイルシステム５０４、またはコンピューターシステムのファイルシステム５１４は、ＴＲＩＭコマンドを変換し、かつ、変換されたオフセットをストレージデバイス１０６に送付し、内部データ構成の変更を介してスペースを直接的にリクレームし、または、キャッシュからのデータをクリアする、ことができる。
【００４５】
同一または別の実施例においては、仮想ディスクエクステントの一部をカバーするＴＲＩＭコマンドを受取った場合、仮想ディスクパーサ４０４は、どのセクターがＴＲＩＭコマンドの対象であるか、そして、ＴＲＩＭコマンドがフリースペーストリムであったか否か、を示す情報を保管するように構成されてよい。仮想ディスクエクステントの残りが消去されたインスタンスにおいて、仮想ディスクパーサ４０４は、仮想ディスクファイルからの仮想ディスクエクステントの割り当てを解除することができる。
【００４６】
仮想ディスクファイルを割り当てを解除する場合、仮想ディスクパーサ４０４は、仮想ディスクエクステントを、その仮想ディスクエクステントに指示された読出しオペレーションをどのように扱うかを記述した状態情報と関連付けることができる。表１は、仮想ディスクパーサ４０４が関連付けられ、そして、仮想ディスクファイルの再生を最適化するために使用することができる典型的な状態情報を示している。仮想ディスクエクステントをリクレームする能力は、一つの実施例において、２つの状態（記述された、および、記述されない）を使用して達成される。しかしながら、データが削除された場合に、仮想ディスクファイル７０２の中に保管されたビットパターンは、典型的には消去されないので、スペースが再使用される前に、仮想ディスクエクステントを記述するために選択されたスペースが、消去される必要があるのはいつか、または、そこに保管される以前にデータを上書きすることなく再使用することができるか、を判断するために追加の状態が使用され得る。削除に際してデータが消去されない一つの理由は、データを消去するためにプロセッササイクルを要するからであり、いくつかのストレージデバイスは、ブロック単位ベースで書込みオペレーションを実行するように構成されているので、新たなデータで上書きするときに、データを消去するのが、より効率的である。以降の状態は典型的なものであり、本発明開示は、以下の表に定められた状態を使用することに限定されない。
【表１】
0006050262.tif 000002
【００４７】
図７に関して表１を参照すると、リストされている第１の状態は「マップ」状態であり、仮想ディスクエクステントが仮想ディスクファイル７０２のセクションによって記述されることを示している。例えば、仮想ディスクエクステント０は、「マップ」状態にあるものとして示されている仮想ディスクエクステントの実施例である。
【００４８】
表１の記載について続けると、仮想ディスクエクステントは、その仮想ディスクエクステントが「トランスペアレント」であることを示す状態情報と関連付けられ得る。つまり、その仮想ディスクエクステントは、異なる仮想ディスクファイルによって記述されるということである。トランスペアレント状態で、仮想ディスクエクステントに対する読出しオペレーションが仮想ディスクパーサ４０４によってが受取られるインスタンスにおいて、仮想ディスクパーサ４０４は、異なる仮想ディスクファイルを参照することができ、読出しにどのように応答するかを判断するためにアロケーションテーブルをチェックすることができる。仮想ディスクエクステントに対する読出しオペレーションを仮想ディスクパーサ４０４が受取るインスタンスにおいて、仮想ディスクパーサ４０４は、仮想ディスクエクステントを「トランスペアレント」状態から「マップ」状態に転換することができる。
【００４９】
図７に関する表１の記載について続けると、仮想ディスクエクステントは、また、「非マップ」状態と関連付けられ得る。この実施例において、仮想ディスクエクステントは、仮想ディスクファイル７０２によって記述されず、また、チェインの中のいかなる他の仮想ディスクファイルによっても記述されない。この実施例では、非マップ状態は、ＴＲＩＭコマンドに従う仮想ディスクエクステントを記述するために使用され得る。ＴＲＩＭコマンドは、ファイルシステム４１４が仮想ディスクエクステントに対するアクセスを保証するであろうことを意味しない。または、言い換えると、この仮想ディスクエクステントをこの状態に転換するために使用されたＴＲＩＭコマンドは、標準ＴＲＩＭコマンドである。仮想ディスクエクステントが非マップ状態にあり、そのエクステントに対する読出しを示すＩＯジョブが受取られるインスタンスにおいて、仮想ディスクパーサ４０４は、以下で応答することができる。０（ゼロ）、０トークン、１、全部１を表すトークン、または、ビットパターンを開示する非情報、例えば、全部０、全部１、１と０がランダムに生成されたパターン、である。この実施例において、仮想ディスクファイル７０２のセクションが、この状態での仮想ディスクエクステントの裏付けに割り当てる場合、仮想ディスクパーサ４０４は、割り当ての前に、ビットパターンを開示する非情報を仮想ディスクファイル７０２のセクションに書き込むことができ、または、仮想ディスクエクステントを記述するためのビットパターンを開示する非情報を既に含んでいるセクションを選択することができる。図７の仮想ディスクエクステント６は、非マップ状態にあるものとして示されている。
【００５０】
一つの実施例においては、非マップまたは非初期化のエクステントを定めるデータが維持される。非マップまたは非初期化状態は、２つのサブ状態（ｓｕｂ−ｓｔａｔｅ）を含んでいる。それらは、データが未だに仮想ディスクファイル７０２の中にあることを意味する、アンカー、および、データが維持されている又はいないことを意味する、非アンカー、である。これらのサブ状態が使用されるインスタンスにおいて、仮想ディスクパーサ４０４は、セクションをゼロにすることなく、データを保管するセクションを割り当てることによって、非マップだがアンカーであるエクステントをマップに転換することができる。同様に、仮想ディスクパーサ４０４は、仮想ディスク４０２の少なくとも一部に対して、非初期化エクステントをそれらが非マップであるかのように取り扱うよう構成されている一方で、仮想ディスクパーサ４０４は、セクションをゼロにすることなく、データを保管するセクションを割り当てることによって、エクステントをマップに転換する最中に、非初期化だがアンカーであるエクステントをゼロにするのを防ぐことができる。
【００５１】
表１は、加えて「ゼロ」状態を示している。この実施例において、仮想ディスクエクステントは、仮想ディスクファイル７０２によって記述されず、また、チェインの中のいかなる他の仮想ディスクファイルによっても記述されない。しかしながら、仮想ディスクエクステントは、全部０（ゼロ）であるとして読み出すことが求められる。この実施例において、ゼロ状態は、ＴＲＩＭコマンドのいずれのタイプにも従う仮想ディスクエクステントを記述するため、または、プログラムが全部を０（ゼロ）に書き込んだ仮想ディスクエクステントを記述するために使用され得る。例えば、以前に保管されていたデータが完全に上書きされたことを保証するために、削除ユーティリティープログラムが、仮想ディスクエクステント４に対して全部０（ゼロ）を書き込むことを想定してみよ。仮想ディスクエクステントがゼロ状態にあり、そのエクステントへの読出しを示すＩＯジョブが受取られるインスタンスにおいては、仮想ディスクパーサ４０４は、ゼロまたはゼロトークンで応答することができる（オフロード読出しオペレーションにおいて）。この状態において書込みが仮想ディスクエクステントに対して指示されるインスタンスにおいては、仮想ディスクパーサ４０４は、仮想ディスクファイル７０２のセクションをゼロにして、仮想ディスクエクステントを記述するために使用し、または、既にゼロである仮想ディスクファイル７０２の一部を選択して、仮想ディスクエクステントの裏付けに割り当てることができる。この実施例において、ゼロにされたスペースは、データ構成または仮想ディスクファイル７０２を使用してトラックすることができるだろう。データ構成は、仮想ディスクファイル７０２がオープンされたとき、仮想ディスクファイル７０２がクローズされたとき等、定期的に更新され得る。非マップまたは非初期化状態におけるエクステントからの読出しは、任意的に、仮想ディスクパーサ４０４に、そのエクステントをゼロ状態に転換させる。仮想ディスクパーサ４０４が、非マップまたは非初期化状態におけるエクステントに対してセクタースタビリティ（ｓｔａｂｉｌｉｔｙ）を提供するように構成されている構造におけるものである。
【００５２】
表１は、また、「非初期化」状態と呼ばれる状態を示している。非初期化状態は、仮想ディスクエクステントが仮想ディスクファイル７０２によって記述されないこと、および、ファイルシステム４１４が仮想ディスクエクステントに対するアクセスを保証していることを示している。つまり、ファイルシステム４１４は、ユーザーアプリケーションが、仮想ディスクエクステントの中のセクターを読み出すことを防ぐように構成されている。この実施例において、非初期化状態は、フリースペースのＴＲＩＭコマンドに従う仮想ディスクエクステントを記述するために使用され得る。仮想ディスクエクステントが非初期化状態であり、エクステントに対する読出しを示すＩＯジョブが受取られるインスタンスにおいて、仮想ディスクパーサ４０４は、あらゆるデータで応答することができる。つまり、仮想ディスクファイル７０２のほとんど全ての場所からのビットパターン、０、１、情報を開示しないビットパターン、等である。仮想ディスクペイロードと安全にインパクトを与えることのないメタデータだけが、仮想ディスククライアントに対して表されるという要求を超えて、仮想ディスクパーサ４０４は、仮想ディスクエクステントに対する安全を提供するものではないからである。この状態における仮想ディスクエクステントに対して書込みが指示されるインスタンスにおいて、仮想ディスクパーサ４０４は、そのセクションの中に保管されるあらゆるデータを警告することなく、単純に仮想ディスクファイル７０２のセクションを割り当てることができる。従って、事前にスペースをクリアすることなく仮想ディスクファイルの中にスペースを割り当てることができるので、この状態が最も有利である。図７の仮想ディスクエクステント５は、非初期化状態にあり、仮想ディスクファイル７０２は、その仮想ディスクエクステントを裏付けていないものとして示されている。
【００５３】
状態情報がそれぞれの仮想ディスクエクステントと関連付けられると、仮想ディスクパーサ４０４は、アドミニストレーター又はそのようなものに対して、仮想ディスク４０４がどのように配置されるかについて追加の情報を提供するように構成され得る。一つの典型的な実施例においては、仮想ディスク４０４は、状態情報に基づいた所定のパラメーターを含むオフセットクエリー（ｑｕｅｒｙ）に対して反応するように構成され得る。例えば、ユーザーは、与えられたバイトオフセットから開始して、仮想ディスク４０２を通して繰り返すクエリーを発行することができ、「マップ」、「非マップ」、「トランスペアレント」等、といった特定のクライテリアを満足する領域を配置することができる。加えて、ユーザーは、差分仮想ディスクファイルを考慮するために、クエリーがどのくらい「深く」行くべきかを選択することができる。例えば、図７を参照すると、ユーザーは深さを２に設定して、クエリーを実行し得る。それに応じて、仮想ディスクパーサ４０４は、チェインにおける最後の２つの仮想ファイルについてクエリーを実行する。例えば、仮想ディスクファイル６１０と６１２である。特定のクエリーは、次の非トランスペアレント領域、次の非ゼロ領域、次の定義された領域、次の初期化された領域、等、を獲得するためのクエリーを含み得る。簡潔には、次に定められた領域に対するクエリーは、定められたデータを含む次の領域を返すように構成され得る（例えば、マップまたはゼロ状態におけるセクターであって、そのセクターの親の仮想ディスクファイルの状態を決めるトランスペアレントセクターを伴なうもの）。次の初期化された領域に対するクエリーは、そのセクターの親の仮想ディスクファイルの状態を決めるトランスペアレントセクターを伴なって、非初期化状態以外の状態におけるデータを含む次の領域を返すことができる。
【００５４】
図８に移ると、図は、仮想ディスクパーサ４０４が、仮想ディスク４０２に保管されるファイルまたは他のデータに応じて、どのように仮想ディスクエクステントを一つの状態から別の状態へ転換するかについての特定の実施例を示している。例えば、ユーザーが仮想マシン４１０の中でデータベース管理プログラムを使用し、データベースを創出するものと想定してみよ。ユーザーは、データベースをファイルの中に保管することができ、ファイルシステム４１４は、仮想ディスク４０２上のどこにファイル８０２を保管するかを定めることができる。ファイルシステム４１４は、ファイル８０２を、例えば、仮想ディスクエクステント３から５の中に落とし込まれるセクターに書き込むように、一つまたはそれ以上のディスク書込みを発行することができる。この実施例において、仮想ディスクエクステント３は、「マップ」され、仮想ディスクパーサ４０４は、ファイル８０２の最初の部分をアロケーションテーブル４１６によって特定されたセクションへ書き込むことができる。
【００５５】
仮想ディスクエクステント４と５は、一方で、「ゼロ」と「非初期化」状態である。この実施例において、仮想ディスクパーサ４０４は、仮想ディスクエクステント４を裏付けるために仮想ディスクファイル７０２の使用されていないセクションを選択し、仮想ディスクエクステント４がゼロ状態にあることを定めることができる。この決定に応じて、仮想ディスクパーサ４０４は、仮想ディスクエクステント４を記述するために使用されようとしているセクションをゼロ化し、または、既に全部ゼロであるセクションを割り当てることができる。ゼロであるセクションを割り当て、または、セクションをゼロ化するプロセスが完了した後で、仮想ディスクパーサ４０４は、セクションの最初のバイトを示す仮想ディスクのファイルバイトオフセットを特定する情報を生成し、そして、アロケーションテーブル４１６に保管することができる。そのセクションの最初のバイトは、仮想ディスクファイル７０２において仮想ディスクエクステント４がどこに記述されるかを定めるものである。仮想ディスクパーサ４０４は、次に、「マップ」状態であることを示すために仮想ディスクエクステント４に関する状態情報を変更する。そして、エクステント４に対する書込み領域を、割り当てられたセクションに書き込むことができる。
【００５６】
代替的には、現在ゼロ状態にある仮想ディスクの全てのエクステントをカバーする書込み領域のために、仮想ディスクファイルの割り当てられたセクションが選択され、そのセクションに対して書込み領域が発行されて、書込みが完了すると、次に、仮想ディスクパーサ４０４は、そのエクステントが「マップ」状態であることを示すために、仮想ディスクエクステントに関する状態情報を変更することができる。代替的には、現在ゼロ状態にある仮想ディスクエクステントを部分的にしかカバーしない書込み領域のために、仮想ディスクファイルの割り当てられたセクションが選択され、そのセクションに対して書込み領域が発行され、そのセクションの残りに対してゼロ化書込みが発行されて、書込みが完了すると、次に、仮想ディスクパーサ４０４は、そのエクステントが「マップ」状態であることを示すために、仮想ディスクエクステントに関する状態情報を変更することができる。当業者であれば、与えられた書込み命令は、フォースユニットアクセス（ｆｏｒｃｅ−ｕｎｉｔ−ａｃｃｅｓｓ）書込みといった、フラッシュ（ｆｌｕｓｈ）またはライトスルーライト（ｗｒｉｔｅ−ｔｈｒｏｕｇｈ−ｗｒｉｔｅ）を使用して遂行できることが理解されよう。
【００５７】
同様に、仮想ディスクパーサ４０４は、仮想ディスクエクステント５を裏付けるために仮想ディスクファイル７０２の使用されていないセクションを選択し、アロケーションテーブル４１６に問い合わせることにより、仮想ディスクエクステント５が非初期化状態にあることを定めることができる。この決定に応じて、仮想ディスクパーサ４０４は、選択されたセクションの内容を変更することなく、仮想ディスクエクステント５を記述するためのセクションを割り当てることができる。仮想ディスクパーサ４０４は、セクションの最初のバイトを示す仮想ディスクのファイルバイトオフセットを特定する情報を生成し、そして、セクションのファイルバイトオフセットをアロケーションテーブル４１６に保管することができる。そのセクションの最初のバイトは、仮想ディスクファイル７０２において仮想ディスクエクステント４がどこに記述されるかを定めるものである。仮想ディスクパーサ４０４は、次に、「マップ」状態であることを示すために仮想ディスクエクステント５に関する状態情報を変更する。
【００５８】
図９は、仮想ディスクパーサ４０４が、ファイル８０２の削除オペレーションと仮想ディスクエクステント７の内容をゼロ化するオペレーションに応じて、どのように仮想ディスクエクステントを一つの状態から別の状態へ転換するかについて別の特定の実施例を示している。例えば、ユーザーはファイル８０２を削除し、ファイルシステム４１４はＴＲＩＭコマンドを発行する。この実施例において、仮想ディスクパーサ４０４は、仮想ディスクエクステント４と５を完全にカバーし、仮想ディスクエクステント３を部分的にカバーする仮想ディスクセクターの領域を含むＴＲＩＭコマンドを受け取る。仮想ディスクエクステント４と５が完全に削減されるという決定に応じて、仮想ディスクパーサ４０４は、アロケーションテーブル４１６からリンクを除去し、仮想ディスクファイル７０２がこの仮想ディスクエクステントを裏付けていないことを示す状態に仮想ディスクエクステント４を転換するように構成され得る。ユーザーが仮想マシン４１０の中でデータベース管理プログラムを使用し、データベースを創出するものと想定してみよ。ユーザーは、データベースをファイルの中に保管することができ、ファイルシステム４１４は、仮想ディスク４０２上のどこにファイル８０２を保管するかを定めることができる。ファイルシステム４１４は、ファイル８０２を、例えば、仮想ディスクエクステント３から５の中に落とし込まれるセクターに書き込むように、一つまたはそれ以上のディスク書込みを発行することができる。この実施例において、仮想ディスクエクステント３は、「マップ」され、仮想ディスクパーサ４０４は、ファイル８０２の最初の部分をアロケーションテーブル４１６によって特定されたセクションへ書き込むことができる。仮想ディスクエクステント４のためのアロケーションテーブルのエントリーに示されるように、仮想ディスクパーサ４０４が、仮想ディスクエクステントを転換する状態は、仮想ディスクパーサ４０４がどの状態を使用するように構成されているか、および、ファイルシステム４１４がフリースペースＴＲＩＭコマンドまたは標準ＴＲＩＭコマンドを発行するかどうか、に依存している。例えば、仮想ディスクパーサ４０４は、２つの状態を使用するように構成され得る。つまり、仮想ディスクエクステントを記述するためのマップとゼロである。代替的には、仮想ディスクパーサ４０４は、３つの状態を使用するように構成され得る。つまり、仮想ディスクエクステントを記述するためのマップ、ゼロ、非マップ、である。代替的には、仮想ディスクパーサ４０４は、４つの状態を使用するように構成され得る。つまり、マップ、ゼロ、非マップ、非初期化である。非マップと非初期化との相違は、標準ＴＲＩＭコマンドとフリースペースＴＲＩＭコマンドとの相違に応じたものである。パーサが非初期化状態を使用しないように構成されている場合に、フリースペースＴＲＩＭは、標準ＴＲＩＭとして扱われる。図に示すように、ファイル７０２の部分は、仮想ディスクファイル７０２の中にまだ保管されている。それらを仮想ディスクファイル７０２から消去しても効率が悪いからである。
【００５９】
仮想ディスクエクステント５は、ＴＲＩＭによって部分的にカバーされているので、仮想ディスクパーサ４０４は、このエクステントを種々の方法のうちの一つにおいて扱うことができる。一つの構成において、仮想ディスクパーサ４０４は、エクステント５をマップ状態にしておいてもよい。この構成において、仮想ディスクパーサ４０４は、エクステント全体に対するＴＲＩＭ情報が受け取られた場合に、エクステントを転換してもよい。代替的には、仮想ディスクパーサ４０４は、エクステントを記述するスペースが割り当て解除され得るとの指示を提供するより多くのＴＲＩＭ情報が受け取られることを期待して、エクステントを部分的にカバーするＴＲＩＭ情報をトレースしてもよい。
【００６０】
同様に、仮想ディスクエクステントは、また、ＴＲＩＭによって部分的にカバーされる。この実施例において、仮想ディスクパーサ４０４は、マップ状態のまま残され、もはや使用されない仮想ディスクファイル７０２の部分を記述するＴＲＩＭ情報を基礎をなすファイルシステムに対して送付するように構成され得る。例えば、ファイルシステムは、仮想化ファイルシステム４０８、ストレージサーバーのファイルシステム５０４、または、コンピューターシステムのファイルシステム５１４、である。
【００６１】
ファイル８０２の削除に加えて、図９は、仮想ディスクエクステント７がゼロ化される実施例を示している。仮想ディスクパーサ４０４は、ファイルシステム４１４によって発行され、仮想ディスクエクステント７の全ての領域がゼロ化されることを示すＩＯジョブをスキャンすることができる。この決定に応じて、仮想ディスクパーサ４０４は、エクステントアロケーションテーブル４１６からリンクを除去し、仮想ディスクエクステント７をゼロ状態に転換するように構成され得る。図に示すように、仮想ディスクエクステント７の以前の内容は、仮想ディスクファイル７０２の中に未だに保管されている。
【００６２】
図１０に移ると、図は、仮想ディスクファイルのグループ１００２、１００４、１００６によって少なくとも部分的に記述される仮想ディスク４０２を示している。それは、仮想ディスクファイル６０８、６０４、および、６００によって定まる仮想ディスクファイルのチェインに類似している。この典型的な実施例において、仮想ディスク４０２を表すデータは、複数の仮想ディスクファイルにわたって分解される。この典型的な実施例においては、仮想ディスクパーサ４０４が仮想ディスクエクステント１と２を読み出そうと試みる場合、仮想ディスクパーサ４０４は、仮想ディスクファイル１００２のためのアロケーションテーブルにアクセスし、これらのエクステントがトランスペアレントであると定めることができる。次に、仮想ディスクパーサ４０４は、仮想ディスクファイル１００４のためのアロケーションテーブルにアクセスし、これらのエクステントがトランスペアレントであると定めることができる。最後に、仮想ディスクパーサ４０４は、祖父母の仮想ディスクファイル１００６のためのアロケーションテーブルにアクセスし、これらの仮想ディスクエクステントが定義されたものと定めることができる。
【００６３】
以降は、オペレーションの工程を説明する一連のフローチャートである。理解を容易にするために、フローチャートは、最初のフローチャートが全般的で「ビックピクチャー（ｂｉｇ  ｐｉｃｔｕｒｅ）」な視点による実施を表し、以降のフローチャートは破線で示された、さらなる追加及び／又は詳細を提供する、というように体系付けられている。さらに、当業者であれば、破線で示された任意の工程は、任意的なものであると考えられることが正しく理解されよう。
【００６４】
図１１を参照すると、オペレーション１１００、１１０２、１１０４、および、１１０６を含む、仮想ディスクファイル内でスペースをリクレームするためのオペレーション工程が示されている。オペレーション１１００は、オペレーション工程を開始する。オペレーション１１０２は、仮想ディスクエクステントを含む仮想ディスクのインスタンス化を示しており、仮想ディスクエクステントは、仮想ディスクファイルから切り離されている。簡潔に図４、図５Ａ、または、図５Ｂに移ると、仮想ディスク４０２は、例えば、実行可能なインストラクションや関連付けされたインスタンスデータといった、仮想ディスクパーサ４０４によってインスタンス化され、一つまたはそれ以上の仮想ディスクファイルの中に保管されたデータが、論理的ハードドライブとして公開される。論理的ハードドライブは、ハードドライブの行為をエミュレートすることによりファイルシステム４１４からの読出し／書込みオペレーションを扱うように構成され得る。仮想ディスクファイル４０６（図６に示されるように、一つまたはそれ以上のファイルであり得る）は、物理的ハードドライブ上に典型的に見つけられるものを保管することができる。つまり、ディスクパーティション、ファイルシステム、等である。図７に移ると、仮想ディスク４０２は、複数のエクステントを含んで示されており、そのうちいくつかは、仮想ディスクファイル７０２のあらゆるセクターから分離されている。
【００６５】
特定の実施例において、エクステントがブロックであると想定してみよ。この実施例において、アロケーションテーブル４１６は、一つまたはそれ以上の仮想ディスクファイル７０２からランダムアクセスメモリーの中にロードされ得るものだが、仮想ディスク４０２における仮想ディスクブロックを仮想ディスクファイル７０２のサイズ化（例えば、ブロックサイズ）されたセクションであるエクステントにリンクする情報を保管するために使用され得る。アロケーションテーブル４１６は、また、仮想ディスク４０２におけるそれぞれの仮想ディスクブロックに対する状態情報も保管し得る。非ゼロデータを潜在的に含む仮想ブロックは、そのブロックがマップ状態に居ることを示す状態情報と関連付けられる。つまり、仮想ディスクファイル７０２は、仮想ディスク４０２のブロックを記述する（例えば、データを保管する）ために割り当てられている。仮想ディスクブロック１から３、および、７は、この状態に居るブロックの例である。図に示されるように、仮想ディスクブロック４と５、６、８、および、９は、有効な仮想ディスクブロックである。しかしながら、これらの仮想ディスクブロックは、仮想ディスクファイル７０２の中に割り当てられたいなかるスペースも有しない。典型的な実施例においては、ファイルシステム４１４がこれらのブロックに対して書き込むので、これらの仮想ディスクブロックは、それらに対する読出し及び／又は書込みオペレーションにどのように対応するかを定めるために仮想ディスクパーサ４０４によって使用される情報と関連付けられ得る。
【００６６】
簡潔に図１１に戻って参照すると、オペレーション１１０４は、コンピューターシステムは、追加的に割り当てのための回路を含み得ることを示している。仮想ディスクに関連付けられた状態情報に基づいて、仮想ディスクファイルのセクションの中に既に存在するビットパターンを上書きすることなく仮想ディスクエクステントを記述するために、仮想ディスクファイルのセクションを割り当てるものである。例えば、図８に戻ると、仮想ディスクパーサ４０４は、仮想ディスクエクステントの領域に対して書き込むためのＩＯジョブを受け取ることができる。書込みＩＯジョブの受け取りに応じて、仮想ディスクパーサ４０４は、アロケーションテーブル４１６をチェックし、仮想ディスクエクステントを記述するために仮想ディスクファイル７０２の中のスペースが割り当てられていないことを判断し、仮想ディスクエクステントを裏付けるために仮想ディスクファイル４０６のセクションを割り当てる。従って、仮想ディスクエクステントに対してファイルシステムによって書き込まれたデータは、仮想ディスクパーサ４０４によって、仮想ディスクファイル７０２のセクションに保管される。
【００６７】
この実施例において、仮想ディスクパーサ４０４は、アロケーションテーブル４１６の状態情報に基づいて仮想ディスクエクステントを記述するために使用する以前に、仮想ディスクファイル７０２のセクションに既に保管されているいかなるデータも（全部０(ゼロ)、全部１、または、ビットパターンを開示するあらゆる他の非情報、を書き込むことにより）上書きしない。典型的な実施例において、状態情報は、ファイルシステム４１４がこの仮想ディスクエクステントに対するアクセスを保証していることを示し得る。仮想ディスクエクステントは、ファイルシステムのフリースペースによってカバーされているからである。特定の実施例において、状態情報は、仮想ディスクエクステントが「非初期化」状態に居ることを示し得る。クリアすることなく仮想ディスクエクステントを割り当てることは、そうでなければ、仮想ディスクファイル７０２のセクションを上書きするのに使用されていたであろうプロセッササイクルおよびＩＯジョブを節約するという付加利益を提供する。
【００６８】
オペレーション１１０４の特定の実施例において、そして、図７に戻って、エクステントはブロックであり、ファイルシステム４１４が仮想ディスク４０２に対して、ファイル８０２をしますビットパターンを仮想ディスクのブロック３から５に書き込むようにＩＯジョブを送付することを想定してみよ。そうしたＩＯジョブの受け取りに応じて、仮想ディスクパーサ４０４は、仮想ディスクのブロック５は仮想ディスクファイル４０６のいかなるセクションによっても裏付けされておらず、非初期化であると判断する。この判断に応じて、仮想ディスクパーサ４０４は、仮想ディスクのブロック５を記述するために、そして、ＩＯジョブによってカバーされないセクションの領域に以前から保管されていたデータを上書きすることなくファイル８０２を示すビットパターンの領域を書き込むために、仮想ディスクファイル７０２を割り当てるように構成され得る。
【００６９】
図１１に再び戻ると、オペレーション１１０６は、コンピューターシステムは、仮想ディスクファイルによって仮想ディスクエクステントが記述されていることを示すために、仮想ディスクエクステントと関連付けられた状態情報を変更するように構成された回路を追加的に含むことができる。例えば、図８に戻ると、仮想ディスクパーサ４０４は、仮想ディスクファイル７０２が仮想ディスクエクステントを記述していることを反映するために、仮想ディスクエクステントと関連付けられた状態情報を変更する（例えば、メモリーを上書きする）ことができる。一つの構成において、書込みと状態情報の変更は、同時に発生し得る。例えば、仮想ディスクパーサ４０４は、アロケーションテーブル４１６の中に、仮想ディスクエクステント５は「マップ」であることを示す情報を保管することができる。従って、仮想ディスクエクステント５に向けられた後続の読出しオペレーションは、アロケーションテーブル４１６の中で特定されたバイトオフセットのところに保管されたビットパターンを返すことによって、仮想ディスクパーサ４０４により扱われる。仮想ディスクパーサ４０４は、同時に、仮想ディスクエクステントを記述するために割り当てられた仮想ディスクファイル７０２のセクションに対してデータを書込み（例えば、この工程をトリガーした書込みオペレーションに関連するビットパターン）、かつ、システムのファイルシステム４０８、ストレージサーバーのファイルシステム５０４、または、コンピューターシステムのファイルシステム５１４を仮想化するために仮想ディスク７０２のセクションに対してビットパターンを書き込むＩＯジョブを発行することができる。続いて発行されたフラッシュコマンドを完了する以前といった、ある時点において、ビットパターンは、固定のストレージユニット４６０の中に固定される。
【００７０】
図１２に移ると、図は、図１１で示されたオペレーションと併せて実行され得る追加的なオペレーションを示している。オペレーション１２０８に移ると、コンピューターシステムは、オフセットクエリーコマンドに対して情報をもって対応するための回路を含み得ることを示している。情報は、非ゼロである仮想ディスクのセクター、非トランスペアレント状態にある仮想ディスクのセクター、マップ状態にある仮想ディスクのセクター、及び／又は、初期化状態にいる仮想ディスクのセクター、を特定するものである。例えば、仮想ディスクパーサ４０４は、開始のバイトオフセット与えられて、仮想ディスク上の次のバイトオフセットといった、仮想ディスク４０２に関する情報を生成するためのコマンドを受け取るように構成され得る。仮想ディスクは、非トランスペアレント状態、つまりトランスペアレント以外の状態、マップ状態、つまり仮想ディスクファイル４０６の中のデータを含む仮想ディスク４０２のセクター、定義された状態、つまりマップまたはゼロ化された仮想ディスク４０２のセクター、及び／又は、初期化状態、つまり非初期化以外の状態、にある。コマンドは、深さ制限ができ、所定の数量の仮想ディスクファイルだけが調査される。所定の数量の仮想ディスクファイルが調査された後にトランスペアレントとして残っているあらゆる領域を、その状態クエリーによって示された領域に加えて、リクエスターに報告として返す。どの状態クエリーがリクエストされたかにかかわらずである。こうしたコマンドの受け取りに応じて、仮想ディスクパーサ４０４は、仮想ディスク４０２上の最初のバイトオフセットから開始し、コマンドに関する領域が検知されるまで、対応領域、または、領域セットを築き、望まれた情報を返すことができる。
【００７１】
図１２の説明を続けると、オペレーション１２１０は、コマンドのグループから選択された少なくとも一つのコマンドを発行するように仮想ディスクファイルをコントロールしているファイルシステムに対してリクエストを送付することを示している。コマンドは、トリムコマンド、非マップコマンド、ゼロのライトセイム（ｗｒｉｔｅ  ｓａｍｅ）コマンド、ゼロトークンのオフロード書込みコマンド、を含む。図４、図５Ａ、または、図５Ｂに戻って参照すると、仮想ディスクパーサ４０４は、ファイルシステム４１４に対してリクエストを発行するように構成され得る。この実施例におけるリクエストは、ファイルシステム４１４がＴＲＩＭコマンドを発行するためのものである。例えば、仮想ディスクパーサ４０４は、ファイルシステム４１４に対して定期的に一つまたはそれ以上のリクエストを発行することができる。仮想ディスク４０２のインスタンス化の直後、及び／又は、仮想マシン４１０のシャットダウン、ハイバーネイト、等の以前である。そうしたコマンドに応じて、ファイルシステム４１４は、仮想ディスク４０２のどのセクターがもはや使用されていないかを判断し、これらの使用されていないセクターを特定した一つまたはそれ以上のＴＲＩＭコマンドを仮想ディスクパーサ４０４に対して送付することができる。それにより、仮想ディスクパーサ４０４は、トリム情報を受け取ることができる。ファイルシステム４１４によってもはや使用されていないセクターの領域のリスト、および、ファイルシステム４１４が、それらのセクターに対するアクセスを保証するためにセクターからの読出しを禁止しているかどうかの情報である。仮想ディスクパーサ４０４は、情報を受け取り、その領域によってカバーされる仮想ディスクエクステントを、仮想ディスクファイル７０２の中のスペースがリクレームされ得る状態に転換することができる。
【００７２】
図１２の説明を続けると、オペレーション１２１２は、コンピューターシステムは、第２の仮想ディスクエクステントをトリムするリクエストの受け取りに応じて、第２の仮想ディスクエクステントの領域に対応する仮想ディスクファイルの領域を定めるための回路を含むことができる。回路は、仮想ディスクファイルの定められた領域に対するトリムコマンドを、仮想ディスクファイルをストレージデバイス上に保管するように構成されたファイルシステムに対して送付するためのものである。例えば、図８を参照すると、ファイルシステム４１４は、仮想ディスクエクステントの領域を特定するＴＲＩＭコマンドを発行する。例えば、ＴＲＩＭコマンドは、単に、一つまたはそれ以上の仮想ディスクブロックを形成するセクターの部分に対応するセクターの領域を特定する。特定の実施例において、ファイルシステム４１４がファイル８０２を保管するためのスペースをトリムすることを想定してみよ。そのように、トリムコマンドは、単に、仮想ディスクエクステント３を構成するセクターの領域を特定してもよい。この実施例において、仮想ディスクパーサ４０４は、セクターの領域が仮想ディスクエクステントのサブセクション（ｓｕｂｓｅｃｔｉｏｎ）をカバーすることを定め、仮想ディスクエクステントのトリムされた領域に対応する仮想ディスクファイル７０２の領域を定めるために、アロケーションテーブル４１６の中のマップ情報を使用することができる。仮想ディスクパーサ４０４は、システムのファイルシステム４０８、または、ストレージサバーのファイルシステム５０４を仮想化するために、仮想ディスクエクステントのトリムされたセクターに対応する仮想ディスクファイル７０２の領域をトリムするようにリクエストを発行することができる。システムのファイルシステム４０８、または、ストレージサーバーのファイルシステム５０４を仮想化は、トリムコマンドとそれによる利益を使用するように構成され得る。仮想ディスクファイル４０６を裏付けているセクターの領域をトリムすること、キャッシュからデータをフラッシュ（ｆｌｕｓｈ）すること、内部バッファーをクリアすること、等、によってである。
【００７３】
代替的には、仮想ディスクパーサ４０４は、領域がフリースペーストリムであったかどうかを示す情報と同様に、仮想ディスクエクステントの領域がトリムされたことを示す情報を保管することができる。ゲストオペレーティグシステム４１２またはオペレーション５０８が実行していると、最後には、仮想ディスクエクステントの残りをゼロ化またはトリムする。この発生に応じて、仮想ディスクパーサ４０４は、仮想ディスクエクステントを、仮想ディスクファイル７０２によって記述されていない状態へと転換することを定め、仮想ディスクエクステントの異なる領域がどのようにトリムされ、または、ゼロ化されたかに応じて、状態を選択することができる。仮想ディスクパーサ４０４は、仮想ディスクエクステントの異なる領域が異なる非記述の状態に置かれる場合に、仮想ディスクエクステントを転換するための最も制限的な状態を選択するように構成することができる。ゼロ状態は最も制限的なものであり、非初期化は最も制限的でないものであり、非マップはその中間的なところである。例えば、第１の領域がゼロであり、残りが非初期化である場合は、仮想ディスクパーサ４０４は仮想ディスクエクステントの全体をゼロ状態に転換することができる。
【００７４】
図１２の説明を続けると、オペレーション１２１４は、コンピューターシステム４００が、仮想ディスクファイルのセクションから仮想ディスクエクステントを割り当て解除するように、かつ、仮想ディスクエクステントに関する状態情報を変更するように構成された回路を追加的に含み得ることを示している。変更は、その仮想ディスクエクステントをカバーするセクターの領域をトリムするリクエストの受け取りに応じて、仮想ディスクエクステントが、仮想ディスクファイルに関連したスペースを有していないことを示すためである。例えば、図９に移ると、仮想ディスクパーサ４０４は、仮想ディスクエクステントを仮想ディスクファイル７０２のセクションに対して関連付けているアロケーションテーブル４１６のリンクを除去することができる。このオペレーションは、仮想ディスクファイル７０２から仮想ディスクエクステントを分離する効果を有している。リンクの除去に加えて、仮想ディスクパーサ４０４は、そのエクステントが仮想ディスクファイル７０２の中に関連するスペースを持っていないことを示すために、仮想ディスクエクステントと関連付けられた状態情報を変更することができる。つまり、仮想ディスクパーサ４０４は、仮想ディスクエクステントを、非マップ、非初期化、または、ゼロ状態の中へ置くことができる。
【００７５】
仮想ディスクパーサ４０４は、仮想ディスクエクステントのセクターをトリムまたはゼロ化するリクエストの受け取りに応じて、リンクを除去し、状態情報を更新することができる。例えば、セクターをトリムまたはゼロ化するリクエストが受け取られ、一つまたはそれ以上の仮想ディスクエクステントをカバーするバイトオフセットの領域を特定する。そうしたＩＯジョブの受け取りに応じて、仮想ディスクパーサ４０４は、そのリクエストが仮想ディスクエクステントのセクターをカバーすることを判断し、リンクを除去して状態情報を更新するための上述のオペレーションを実行することができる。
【００７６】
特定の実施例において、ＩＯジョブが、そのトリムがフリースペーストリムであることを示していると想定してみよ。例えば、ユーザーは、仮想ディスクエクステント３から５にわたるビットパターンとして保管されているファイル８０２を削除し得るし、ファイルシステム４１４は、そのスペースがファイシステム４１４によってもはや使用されていないことを示し得る。フリースペースＴＲＩＭコマンドの受け取りに応じて、仮想ディスクパーサ４０４は、アロケーションテーブル４１６にアクセスすることができ、ファイルシステムがエクステント３、５の一部と、エクステント４の全部をトリムしたものと判断することができる。この実施例において、仮想ディスクパーサ４０４は、仮想ディスクエクステント４を仮想ディスクファイル７０２に対してマップするリンクを除去し、その仮想ディスクエクステントは非初期化であることを示すために仮想ディスクエクステント４に関する状態情報を変更することができる。仮想ディスクファイル６０２のこのセクションは、今や、他の仮想ディスクエクステントを裏付けるために再使用され得る。加えて、仮想ディスクパーサ４０４は、仮想ディスクエクステント３と５は、部分的なＴＲＩＭコマンドの対象であると判断することができる。この実施例において、仮想ディスクパーサ４０４は、仮想ディスクエクステント３と５のトリムされた部分を記述する仮想ディスクファイル７０２の部分を記述する仮想ディスクファイルのバイトオフセットを見つけるためにアロケーションテーブル４１６を使用することができ、システムのファイルシステム４０８、ストレージシステムのファイルシステム５０４、または、コンピューターシステムのファイルシステム５１４を仮想化するための仮想ディスクファイルのバイトオフセット記述するＴＲＩＭコマンドを発行することができる。
【００７７】
別の特定の実施例において、ファイルシステム４１４によって発行されたＩＯジョブが、ファイル８０２をゼロ化することを示すものと想定してみよ。例えば、ファイル８０２は、クレジットカード番号といった、機密情報を保管しているデータベースファイルであり得るし、アドミニストレーターは、全部ゼロのバッファーを伴なって書込みコマンドを発行することにより全部ゼロを書き込むことによって、ファイルの内容をゼロ化するように定めることができる。ファイル８０２の中に存在するデータの上にゼロを書き込むのである。そうしたＩＯジョブの受け取りに応じて、仮想ディスクパーサ４０４は、仮想ディスクエクステント４がゼロ化されたこと、および、このエクステントがリクレームできること、を判断するように構成され得る。この実施例において、仮想ディスクパーサ４０４は、仮想ディスクエクステント４を仮想ディスクファイル７０２に対してマップするリンクを除去し、その仮想ディスクエクステントはゼロであることを示すために仮想ディスクエクステント４に関する状態情報を変更することができる。仮想ディスクファイル７０２のこのセクションは、今や、他の仮想ディスクエクステントを裏付けるために再使用され得るし、仮想ディスクパーサ４０４は、全部ゼロをもって回答することにより仮想ディスクエクステント４に対する後続の読出しオペレーションに応じることができる。
【００７８】
別の特定の実施例において、ユーザーは、ファイル８０２の状態を初期化するために、そこに保管されたデータを重ね書きするよりはむしろ、大量のゼロを書き込むことができる。この実施例では、仮想ディスクパーサ４０４がトリムされたセクションをゼロとして読み出し報告するインスタンスにおけるＴＲＩＭ、仮想ディスクパーサ４０４が非マップ領域がゼロであると報告する場合のＵＮＭＡＰ、ゼロのＷＲＩＴＥ  ＳＡＭＥ、及び／又は、ゼロトークンのオフロード書込み、といったコマンドが、エクステントをゼロ状態に転換するために使用され得る。
【００７９】
特定の実施例において、ＩＯジョブが、トリムは標準トリムであることを示すものと想定してみよ。例えば、ユーザーは、仮想ディスクエクステント３から５にわたるビットパターンとして保管されているファイル８０２を削除し得る。しかしながら、ＴＲＩＭコマンドは、そのスペースがファイルシステム４１４によって使用されているかどうかを示すものではない。標準ＴＲＩＭコマンドの受け取りに応じて、仮想ディスクパーサ４０４は、アロケーションテーブル４１６にアクセスすることができ、ファイルシステム４１４がエクステント３、５の一部と、エクステント４の全部をトリムしたものと判断することができる。この実施例において、仮想ディスクパーサ４０４は、仮想ディスクエクステント４を仮想ディスクファイル７０２に対してマップするリンクを除去し、その仮想ディスクエクステントは非マップまたはゼロであることを示すために仮想ディスクエクステント４に関する状態情報を変更することができる。仮想ディスクファイル７０２のこのセクションは、今や、他の仮想ディスクエクステントを裏付けるために再使用され得る。加えて、仮想ディスクパーサ４０４は、仮想ディスクエクステント３と５は、部分的なＴＲＩＭコマンドの対象であると判断することができる。この実施例において、仮想ディスクパーサ４０４は、仮想ディスクエクステント３と５のトリムされた部分を記述する仮想ディスクファイル７０２の部分を取りまとめる仮想ディスクファイルのバイトオフセットを見つけるためにアロケーションテーブル４１６を使用することができ、システムのファイルシステム４０８を仮想化するための仮想ディスクファイルのバイトオフセットを記述するＴＲＩＭコマンドを、典型的には領域の形式において、発行することができる。
【００８０】
図１３をみると、図１２のオペレーション１２１４に加えて実行され得る追加的なオペレーションが示されている。オペレーション１３１６は、コンピューターシステムが、仮想ディスクエクステントに対するデータ書込みリクエストを受け取るための回路を含み得ることを示している。回路は、仮想ディスクエクステント、その仮想ディスクエクステントがゼロ化されたことを示す状態情報、に関する状態情報に基づいて仮想ディスクファイルの使用されていないセクションをゼロにするためのものである。回路は、その仮想ディスクエクステントを記述するために仮想ディスクファイルの使用されていないセクションを割り当てるためのものである。図９の内容を参照すると、仮想ディスクパーサ４０４は、仮想ディスクエクステント、例えば図９の仮想ディスクエクステント４、に対してデータを書き込むリクエストを受け取ることができ、この実施例において、その仮想ディスクエクステントがゼロ化されことを示す状態情報と関連付けされる。例えば、仮想ディスクエクステント４が割り当て解除された場合、仮想ディスクパーサ４０４は、その仮想ディスクエクステントがゼロ化されたと判断し得る。つまり、アプリケーションが、よく知られたゼロトークン（ｗｅｌｌ−ｋｎｏｗｎ  ｚｅｒｏ  ｔｏｋｅｎ）のオフロード書込みを使用してファイル６０２に対して全部ゼロを書き込んだものである。
【００８１】
仮想ディスクエクステントがゼロ状態にあるという判断に応じて、仮想ディスクパーサ４０４は、仮想ディスク７０２の使用されていないセクションを特定することができる。つまり、仮想ディスクエクステントを記述するために動作的には使用されておらず、かつ、いかなる割り当てられたメタデータを保管するためにも動作的に使用されていないセクションである。そして、仮想ディスクパーサ４０４は、仮想ディスクエクステントを裏付けるためにそのセクションを使用することができる。仮想ディスクパーサ４０４は、さらに、新たに割り当てられたエクステントの未だ書き込まれていないセクターからのあらゆる読出しは、全部ゼロであるものとして読み出すことを保証する。仮想ディスクパーサ４０４は、セクションに対してＩＯ書込みジョブのペイロードを書き込むことができる。つまり、マップされている仮想ディスクエクステントを示すための状態情報を更新し、仮想ディスクエクステント４を保管するために使用されるセクションの始まりを特定する仮想ディスクファイルバイトオフセットを記述するためにアロケーションテーブル４１６の情報を更新する。仮想ディスクパーサ４０４は、また、ログエントリー（ｌｏｇ  ｅｎｔｒｙ）を創出することができ、システム故障およびフラッシュされる書込み以前の再起動の場合に、新たに割り当てられたエクステントの未だ書き込まれていないセクターは、いまだに全部ゼロであるものとして読み出し、新たに割り当てられたエクステントの書き込まれたセクターを、全部ゼロまたは書き込まれたデータのいずれかであるものとして読み出す。後続で最初のフラッシュコマンドの際に、仮想ディスクパーサ４０４は、フラッシュの完了の後のシステム故障は、書き込まれたデータを読み出す新たに割り当てられたエクステントの以前に書き込まれたセクターからの読出しを結果的に生じることを保証し、かつ、ゼロを読み出して、新たに割り当てられたエクステントの未だに使用されていないセクターを読み出す。
【００８２】
図１３の説明を続けると、オペレーション１３１８は、コンピューターシステムが、仮想ディスクエクステントに対する書込みリクエストを受け取るための回路を含み得ることを示している。回路は、仮想ディスクエクステントと関連付けられた状態情報に基づいて、仮想ディスクファイルの使用されていないセクションの内容を変更することなく仮想ディスクエクステントを記述するために、仮想ディスクファイルの使用されていないセクションを割り当てるためのものであり、状態情報は、ファイルシステムが仮想ディスクエクステントへのアクセスを保証していることを示している。図９を再び参照すると、仮想ディスクパーサ４０４は、仮想ディスクエクステント、例えば図９の仮想ディスクエクステント４、に対するデータ書込みＩＯジョブを受け取ることができ、この実施例において、そのエクステントは、仮想ディスクエクステントに対する安全がファイルシステム４１４によって提供されていることを示す状態情報と関連付けられている。この状態情報の検知に応じて、仮想ディスクパーサ４０４は、仮想ディスクファイル７０２の使用されていないセクションを特定することができる。そのセクションに対してＩＯジョブのペイロードを書込み、その仮想ディスクエクステントがマップされていることを示すために状態情報を更新し、仮想ディスクエクステント４を保管するために使用されるセクションの始まりを特定する仮想ディスクファイルバイトオフセットを記述するためにアロケーションテーブル４１６の情報を更新する。
【００８３】
この実施例において、エクステントはブロックであり、ＩＯジョブに対するペイロードが、その仮想ディスクブロックにおけるセクターの一部分しかカバーしないものと想定してみよ。特定的には、仮想ディスクブロックは、５１２キロバイトであり、書込みは、仮想ディスクブロックのセクターの最初の５００セクターをカバーし得る。この実施例において、仮想ディスクパーサ４０４は、仮想ディスクファイル７０２の割り当てられたセクターの最初の５００セクターにデータを書き込むことができ、残りの５２４セクターに保管されたデータを消去することはない。従って、このセクションが検査される場合には、最初の５００セクターがペイロードを含み、残りの５２４セクターは、仮想ディスクファイル７０２のセクションに対して以前に書き込まれたあらゆるビットパターンを含んでいることがわかるであろう。この実施例では、仮想ディスクパーサ４０４は、このセクションを消去することなく使用することができる。ファイルシステム４１４は、ファイルシステムのフリースペースにあるセクターに対する読出しオペレーションを拒絶するように構成されているからである。アプリケーションは、仮想ディスクブロックの残りの５２４セクターを読み出すことが禁止されるので、セクターはあらゆるデータを含むことができる。仮想ディスクに以前から保管されているものである。
【００８４】
図１３のオペレーション１３２０に移ると、図は、仮想ディスクエクステントに対する書込みリクエストを受け取るための回路を含むように構成され得ることを示している。回路は、仮想ディスクエクステントに関連付けられた状態情報に基づいて、仮想ディスクファイルの使用されていないセクションを、情報を開示しないビットパターンで論理的に上書きするためのものであり、状態情報は、ファイルシステムが、仮想ディスクエクステントに対するアクセスを保証してしないことを示している。回路は、その仮想ディスクファイルを記述するために、仮想ディスクファイルの上書きされたセクションを割り当てる。図９を再び参照すると、仮想ディスクパーサ４０４は、仮想ディスクエクステントに対するデータ書込みリクエストを受け取ることができ、エクステントは、この実施例において、ファイルシステム４１４はその仮想ディスクエクステントに対するアクセスを保証していないことを示す状態情報に関連付けられている。例えば、仮想ディスクパーサ４０４は、標準ＴＲＩＭコマンドの受け取りに応じて仮想ディスクエクステントを割り当て解除し、その仮想ディスクエクステントが非マップ、つまり、仮想ディスクファイル７０２におけるスペースによって裏付けされていないこと、を示す状態情報をアロケーションテーブル４１６の中に保管することができる。
【００８５】
仮想ディスクエクステントが非マップであるとの判断に応じて、仮想ディスクパーサ４０４は、仮想ディスクエクステントを記述するために使用する仮想ディスクファイル７０２の使用されていないセクションを特定することができ、その仮想ディスクエクステントに対する読出しが、いかなる情報もうかつに明らかにすることはないことを保証するために情報を開示しないビットパターンを論理的に書き込むことができる。好適な実施例において、情報を開示しないビットパターンは、全部ゼロまたは以前に保管されたデータであり得る。セクションがゼロ化され、または、以前に保管されたデータといった他の情報を開示しないビットパターンが論理的に書き込まれた後で、仮想ディスクパーサ４０４は、そのセクションに対してＩＯジョブのペイロードを論理的に書き込むことができる。そして、仮想ディスクエクステントがマップされていることを示すために状態情報を更新し、仮想ディスクエクステントを保管するために使用されるセクションの始まりを特定する仮想ディスクファイルのバイトオフセットを記述するためにアロケーションテーブル４１６の情報を更新する。
【００８６】
図１３の説明を続けると、オペレーション１３２２は、コンピューターシステムは、仮想ディスクエクステントがゼロであることを示す状態情報に基づいて、仮想ディスクエクステントに関連付けられたオフロード読出しリクエストの受け取りに応じて、リクエスターにゼロを表すトークンを送付するように構成された回路を含み得ることを示している。例えば、図４を参照すると、オフロードプロバイダーエンジン４２２、例えばオフロード読出し及びオフロード書込みコマンドを提供するように構成された回路、は、リクエスターによって発行されたオフロード読出しリクエストに応じて、ゼロを表すトークンをリクエスター、例えばアプリケーション４２４、に対して送付することができる。オフロード読出しリクエストは、リクエスターに対するトークンを生成し、送付することによって一つの場所から別の場所にデータを効率的にコピーするために使用することができる。トークンは、リクエスターのメモリーにデータをコピーする代わりに、リクエストされたデータを表しており、そのデータを宛先に送付する。オフロード読出しおよびオフロード書込みコマンドは、宛先場所が、発信場所によって生成されたトークンを認識して、そのトークンによって表されたデータを宛先に論理的に書き込むことができる場合に、コピーオフロードを達成するために使用することができる。発信元によって生成されたよく知られたゼロトークンの場合に、宛先は、基礎をなすストレージ、例えばストレージデバイス１０６、にアクセスする必要がない。この特定の実施例において、ストレージは、ＳＡＮターゲットであり得る。この実施例において、オフロード読出しリクエストは、一つまたはそれ以上の仮想ディスクエクステントの中に保管されたデータを有する一つまたはそれ以上のファイルに対するオフロード読出しコマンドを実行することであり得る。それらの一つは、その仮想ディスクエクステントがゼロ化されていることを示す状態情報と関連付けられている。この実施例において、オフロード読出しリクエストは、よく知られたゼロトークンを生成すること、および、よく知られたゼロトークンをリクエスターに返すことによって提供され得る。
【００８７】
オフロード読出しリクエストは、オフロードプロバイダーエンジン４２２に対してルート（ｒｏｕｔｅ）され得る。オフロードプロバイダーエンジン４２２は、リクエストを受取り、仮想ディスクパーサに対して、仮想ディスクエクステントに保管された情報のメッセージを送付することができる。仮想ディスクパーサ４０４は、リクエストを受け取り、仮想ディスクエクステントに対する状態を読出し、この実施例においては、状態情報が、その仮想ディスクエクステントはゼロ化されていることを示しているものと判断する。仮想ディスクパーサ４０４は、その仮想ディスクエクステントが全部ゼロであることを示すメッセージをオフロードプロバイダーエンジン４２２に返すことができ、オフロードプロバイダーエンジン４２２は、リクエストされたデータが全部ゼロであること、例えば、仮想ディスクブロックを記述するセクターの領域が全部ゼロであること、を示すよく知られたトークンを生成することができ、そのよく知られたトークンをリクエスターに送付することができる。
【００８８】
特定の実施例において、オフロードリクエストは、コンピューターシステム４００、ストレージサービス５００、またはコンピューターシステム５１２によって処理される代わりに、ＳＡＮに対してフォワード（ｆｏｒｗａｒｄ）され得る。この実施例において、ＳＡＮは、トークンを生成し、それを仮想ディスクパーサ４０４に対して返すことができ、次に、リクエスターに対してゼロトークンを送付することができる。さらに、別の実施例では、オフロードプロバイダーエンジン４２２が、仮想ディスクエクステントが全部ゼロであることを示すメッセージを受け取った場合、オフロードプロバイダーエンジン４２２は、よく知られたトークンを生成することができる。効果としては、データを他のあらゆるゼロのデータと同等であるとして特定することによって、リクエストされたデータを、トークンに関連する分離された領域の中に論理的にコピーすること、および、そのよく知られたゼロトークンに関連する領域を共有することを達成する。オフロードプロバイダーエンジン４２２が、以前にリクエスターに対して送付されたトークンを特定してオフロード書込みを後に受け取るインスタンスにおいて、オフロードプロバイダーエンジン４２２は、データを、トークンに関連する領域から、リクエスターによって特定されたオフセットに論理的にコピーすることができる。
【００８９】
図１４に移ると、図は、オペレーション１４００、１４０２、１４０４、および、１４０６を含む、仮想ディスクファイルスペースをリクレームするためのオペレーション工程を示している。図に示すように、オペレーション１４００がオペレーション工程を開始し、オペレーション１４０２は、仮想ディスクエクステントの領域はもはや使用されておらず、仮想ディスクエクステントは仮想ディスクの一部であり、仮想ディスクは仮想ディスクファイルの中に保管されている、ことを示す信号を受け取るための回路をコンピューターシステムが含み得ることを示している。例えば、図４に移って、仮想ディスクパーサ４０４は、仮想ディスク４０２をインスタンス化するように構成され得る。ファイルシステム４１４は、仮想ディスク４０２の一部、例えば仮想ディスクエクステントのセクターの一部、をもはや使用していないことを示す信号を仮想ディスクパーサ４０４に対して送付することができる。特定の実施例において、その信号はＴＲＩＭコマンドであり得る。特定の実施例において、仮想ディスクパーサ４０４によって受け取られた信号は、もはや使用されていないセクターの領域を定めるバイトオフセット値を特定することができ、それは仮想ディスクエクステントの最初の部分であり得る。
【００９０】
図４の説明を続けると、オペレーション１４０４は、コンピューターシステムは、また、仮想ディスクエクステントの領域を記述する仮想ディスクファイルの領域を特定するように構成された回路を含み得ることを示している。図７に戻って参照すると、仮想ディスクパーサ４０４は、信号と、例えば、仮想ディスクエクステント０の最初の領域、を特定する仮想ディスクバイトオフセット値を受け取ることができる。信号の受け取りに応じて、仮想ディスクパーサ４０４は、信号に関連する仮想ディスクバイトオフセット値に対応する仮想ファイル７０２の領域を定めるために、アロケーションテーブル４１６をチェックすることができる。
【００９１】
図１４のオペレーション１４０６に移ると、コンピューターシステムは、仮想ディスクファイルをストレージデバイス上に保管するように構成されたファイルシステムに対して、仮想ディスクファイルの特定された領域をトリムするリクエストを送付するための回路を含み得ることを示している。例えば、図７を再び参照すると、仮想ディスクパーサ４０４は、信号が仮想ディスクエクステントの全体より少ない領域を特定したものと判断することができる。例えば、信号は、仮想ディスクエクステントの全てのセクターを含むものではないセクターの領域を示すことができる。この判断に応じて、仮想ディスクパーサ４０４は、トリムされた仮想ディスクエクステントの領域に対応する仮想ディスクファイル７０２の領域をトリムするリクエストを、仮想ディスクファイル７０２をホストしているファイルシステム、例えば仮想化システムのファイルシステム４０８、に対して発行することができる。仮想化システムのファイルシステム４０８は、仮想ディスクファイル４０６をトリムすること、キャッシュからデータをフラッシュすること、内部バッファーをクリアすること、ファイルシステムデータが保管されているディスクに対してトリムを送付すること、等によってトリムコマンドを使用し、利点を得るように構成され得る。
【００９２】
特定の実施例において、仮想ディスクパーサ４０４は、仮想ディスクファイルの一部をトリムするリクエストが、エクステント全体をカバーしていないとの判断に応じて、基礎をなすファイルシステムに対してＴＲＩＭコマンドを発行するように構成され得る。例えば、仮想ディスクエクステントの最初の６００セクターがもはや使用されていないこと、および、仮想ディスクパーサ４０４は、仮想ディスクエクステントのその６００セクターは、仮想ディスクエクステントを構成する１０２４セクターより少ないと判断し得ることを、信号が特定することを想定してみよ。この判断に応じて、仮想ディスクパーサ４０４は、アロケーションテーブル４１６にアクセスし、仮想ディスクエクステントを記述する仮想ディスクファイル７０２のセクションの最初の６００セクターを記述する仮想ディスクファイルのバイトオフセットを定め、仮想ディスクファイル７０２をホストするファイルシステムに対して、仮想ディスクファイル６０２のこの部分をトリムするリクエストを送付する、ことができる。
【００９３】
図１５に移ると、図１４で説明されたオペレーションと併せて実行され得る追加的なオペレーションを示している。オペレーション１５０８に移ると、コンピューターシステムは、仮想ディスクエクステントに関連するオフロード読出しリクエストの受け取りに応じて、仮想ディスクエクステントがゼロ化されていることを示す状態情報に基づいて、ゼロを表すトークンをリクエスターに対して送付するための回路を、追加的に含み得ることを示している。例えば、図４を参照すると、オフロードプロバイダーエンジン４２２、例えばオフロード読出しおよびオフロード書込みコマンドをサービスするように構成された回路、は、リクエスターによって発行されたオフロード読出しリクエストに応じて、ゼロを表わすトークンをリクエスター、例えばアプリケーション４２４、に送付することができる。オフロード読出しリクエストは、トークンを生成し、リクエスターに対して送付することによって、データを一つの場所から別の場所に効率的にコピーするために使用され得る。トークンは、リクエスターのメモリーへのデータコピーの代わりにリクエストされたデータを表しており、データを宛先に送付する。オフロード読出し及びオフロード書込みコマンドは、宛先場所が、発信元によって生成されたトークンを認識し、そのトークンによって表されるデータを宛先に論理的に書き込むことができる場合に、コピーオフロードを達成するために使用され得る。宛先によって生成されるよく知られたゼロトークンの場合、宛先は、基礎をなすストレージ、例えばストレージでば１０６、にアクセスする必要はなく、この特定の実施例においてはＳＡＮターゲットであり得る。この実施例において、オフロード読出しリクエストは、一つまたはそれ以上の仮想ディスクエクステントに保管されたデータを有する一つまたはそれ以上のファイル上でオフロード読出しオペレーションを実行することであり得る。そのうちの一つは、仮想ディスクエクステントがゼロ化されていることを示す状態情報に関連している。この実施例において、オフロード読出しリクエストは、よく知られたゼロトークンを生成し、そのよく知られたゼロトークンをリクエスターに返すことによって、サービスされ得る。
【００９４】
図１５の説明を続けると、オペレーション１５１０は、コンピューターシステムが、仮想ディスクファイルのグループからのサブグループを選択するための回路を含み得ることを示している。回路は、データを含むサブグループのセクター及びトランスペアレントであるサブグループのセクターを特定する情報を生成する。典型的な実施例において、仮想ディスク４０２は、複数の仮想ディスクファイルからインスタンス化され得る。別の言い方をすれば、仮想ディスク４０２は、Ｍ個の仮想ディスクファイルから形成され得る（ここで、Ｍは１以上の整数である）。この典型的な実施例において、仮想ディスクパーサ４０４は、仮想ディスク４０２上の次のバイトオフセットを定めるリクエストを、例えば、アドミニストレーターから受け取るように構成され得る。与えられたバイトオフセットにおいて開始するものであり、仮想ディスクファイルのサブグループの中で定義されたセクターに関連するものである。例えば、図１０を参照すると、仮想ディスクパーサ４０４は、仮想ディスクエクステント２の最初のセクターに対応する仮想ディスクオフセットにおいて開始する、次に定められたバイトオフセットに対するリクエスト、および、そのサブグループが仮想ディスクファイル１００２と仮想ディスクファイル１００４を含むことを示す情報を受け取ることができる。この実施例において、仮想ディスクパーサ４０４は、サブグループのスキャンを開始することができ、次に定められたバイトオフセットが、仮想ディスクエクステント３の開始に対応するセクターであることを定めることができる。この実施例において、仮想ディスクエクステントにおけるデータは、仮想ディスクファイル１００６のセクターによって裏付けされており、サーチの範囲外であり、定義されたものとして返されることはない。
【００９５】
図１５の説明を続けると、オペレーション１５１２は、コンピューターシステムが、仮想ディスクエクステントを仮想ディスクファイルから切り離し、仮想ディスクエクステントがゼロ化されたとの判断に応じてその仮想ディスクエクステントがゼロにされたことを示すために、仮想ディスクエクステントに関連付けられた状態情報を変更するように構成された回路を含み得ることを示している。例えば、図７に移ると、実施例において、仮想ディスクパーサ４０４は、仮想ディスクエクステントがゼロにされたと判断することができる。例えば、仮想ディスクパーサ４０４は、よく知られたゼロトークンによって表されるデータを、仮想ディスクエクステント、例えば仮想ディスクエクステント７、に書き込むリクエストを受け取ることができる。仮想ディスクパーサ４０４は、リクエストに関連するデータ構造から、そのリクエストが仮想ディスクエクステント全体に対するものであることを判断することができる。つまり、バイトオフセット値がエクステント７の最初のセクターから始まり、エクステント７の最後のセクターで終了するのである。こうした判断に応じて、かつ、仮想ディスクファイル７０２の対応するセクションにゼロを書き込む代わりに、仮想ディスクパーサ４０４は、仮想ディスクエクステント７を仮想ディスクファイル７０２のセクションに対してマップするリンクを除去するように構成され得る。リンクは、仮想ディスクエクステント７を記述し、仮想ディスクエクステントを、その仮想ディスクエクステントは全部ゼロであることを示す情報と関連付けるために使用されていたものである。例えば、仮想ディスクパーサ４０４は、仮想ディスクエクステントが全部ゼロを含んでいることを示す、アロケーションテーブル４１６の中の８バイトの情報を書き込むことができる。このオペレーションの最後の結果として、仮想ディスクファイル７０２のセクションは、他の仮想ディスクエクステントのデータを保管するために再使用され得る。仮想ディスクエクステントは、どの仮想ディスクファイルの領域もビットごとにエクステントを記述していないにもかかわらず、その仮想ディスクエクステントが全部ゼロを含んでいるかのように読み出される。
【００９６】
図１５の説明を続けると、オペレーション１５１４は、コンピューターシステムが、仮想ディスクエクステントを仮想ディスクファイルから切り離し、仮想ディスクエクステントがファイルシステムによってフリースペースであるものと考えられているとの判断に応じてその仮想ディスクエクステントがフリースペースであることを示すために、仮想ディスクエクステントに関連付けられた状態情報を変更するように構成された回路を含み得ることを示している。例えば、再び図７に移ると、仮想ディスクパーサ４０４は、ファイルシステム４１４は、仮想ディスクエクステントを、それがフリースペースであること、つまり、スペースがファイルシステム４１４によって使用されていないこと、を示す情報と関連付けたものと判断することができる。例えば、仮想ディスクパーサ４０４は、ファイルシステム４１４から、仮想ディスクエクステント、例えば仮想ディスクエクステント３、をカバーするセクターの領域を示す信号と、そのセクターはフリースペースであると考えられていることを示す情報と、を受け取ることができる。こうした信号の受け取りに応じて、仮想ディスクパーサ４０４は、仮想ディスクエクステントを仮想ディスクファイル７０２のセクションに対してリンクしている情報を除去するように構成され得る。このオペレーションの結果として、仮想ディスクファイル７０２のセクションは、他の仮想ディスクエクステントのためにデータを保管するように再使用され得る。仮想ディスクパーサ４０４は、仮想ディスクエクステントを、その仮想ディスクエクステントが任意のデータを含んでいることを示す情報と追加的に関連付けることができる。任意のデータは、つまり、仮想ディスクエクステントのあらゆる部分に以前に保管されたデータ、全部０（ゼロ）、または、全部１である。従って、この仮想ディスクエクステントに向けられた読出しオペレーションは、以前仮想ディスクの中に保管されていた任意の情報を返すことによって扱うことができる。加えて、任意のデータは、仮想ディスクパーサ４４が、読出しオペレーションを受け取るたびに、任意のデータを変更することができるように構成されている場合に、読出しオペレーションを受け取るごとに、任意的なデータが任意に変更され得る。
【００９７】
図１５の説明を続けると、オペレーション１５１６は、コンピューターシステムが、エクステントを仮想ディスクファイルから切り離し、仮想ディスクエクステントがトリムされたとの判断に応じてその仮想ディスクエクステントが情報を開示しないビットパターンを含むことを示すために、仮想ディスクエクステントに関連付けられた状態情報を変更するように構成された回路を追加的に含み得ることを示している。例えば、再び図７に移ると、仮想ディスクパーサ４０４は、ファイルシステム４１４は、仮想ディスクエクステントを構成するセクターの領域をトリムされたものと判断することができる。そうした判断に応じて、仮想ディスクパーサ４０４は、仮想ディスクエクステントを仮想ディスクファイル７０２にリンクするアロケーションテーブル４１２の情報を除去することができる。このオペレーションの結果として、仮想ディスクファイル７０２のセクションは、他の仮想ディスクエクステントのためにデータを保管するように再使用され得る。仮想ディスクパーサ４０４は、仮想ディスクエクステントを、その仮想ディスクエクステントが情報を開示しないビットパターンを含んでいることを示す情報と追加的に関連付けることができる。情報を開示しないビットパターンは、つまり、全部０（ゼロ）、全部１、または、ランダムに生成されたビットパターンである。従って、この仮想ディスクエクステントに向けられた読出しオペレーションは、その情報を開示しない情報を返すことによって扱うことができる。特定の好適な実施例において、情報を開示しないビットパターンは、全部ゼロであり得る。しかしながら、これは、ゼロ状態は意味のあるゼロを表すために使用され得るという点で、上述のゼロ状態とは異なるものである。つまり、仮想ディスクエクステントが意図的にゼロ化されたところのインスタンスである。
【００９８】
オペレーション１５１８を参照すると、コンピューターシステムが、仮想ディスクをコントロールしているファイルシステムに対してトリムコマンドを発行するようにリクエストを送付するように構成された回路を追加的に含み得ることを示している。図７に戻ると、仮想ディスクパーサ４０４は、ファイルシステム４１４が一つまたはそれ以上のＴＲＩＭコマンドを発行するリクエストを発行するように構成され得る。典型的な構成において、仮想ディスクパーサ４０４は、そうしたリクエストを定期的に送付するように、または、既定のクライテリアに基づいてそうしたリクエストを送付するように構成され得る。例えば、ＶＭ（仮想マシン）が開始する場合、または、まもなくＶＭがシャットダウンされる以前の場合である。こうしたリクエストに応じて、ファイルシステム４１４は、仮想ディスクパーサ４０４に対して、仮想ディスク４０２の使用されていないセクターを特定する一つまたはそれ以上のＴＲＩＭコマンドを発行することができる。そして、仮想ディスクパーサ４０４は、ＴＲＩＭコマンドからトリム情報を受け取ることができる。ファイルシステム４１４によって、もはや使用されていないセクターの領域といったものや、トリムされたセクターがフリースペースとして考えられているかどうかを示す任意的な情報である。仮想ディスクパーサ４０４は、情報を受け取り、アロケーションテーブル４１６に保管された状態情報を更新するために、そして、仮想ディスクファイル７０２の使用されていないセクターをおそらくリクレームするために、その情報を使用することができる。
【００９９】
図１６に移ると、図は、仮想マシンのためのデータを保管するオペレーション工程を示している。オペレーション工程は、オペレーション１６００で開始され、オペレーション１６０２に移り、コンピューターシステムが、仮想マシンの中で、ファイルシステムを含むゲストオペレーティグシステムを実行するための回路を含むことができるインスタンスを説明している。例えば、図４を参照すると、システム４２０、つまり図３のハイパーバイザー３０２または図２のホスト環境２０４とマイクロカーネルハイパーバイザー２０２によって実行される機能の組合わせ、の仮想化は、仮想マシン４１０をインスタンス化することができ、その中でゲストオペレーティグシステム（ゲストオペレーティグシステム４１２といったもの）を実行することができる。この実施例で、ゲストオペレーティグシステム４１２は、ファイルシステム４１４を含み、ゲストオペレーティグシステム４１２のためにデータを整理し、コントロールする実行可能なインストラクションであり得る。
【０１００】
図１６の説明を続けると、オペレーション１６０４は、コンピューターシステムが、ゲストオペレーティグシステム、仮想ディスクエクステントを含む仮想ストレージデバイス、仮想ディスクファイルから分離された仮想ディスクエクステント、に対して仮想ストレージデバイスを公開するための回路を含み得ることを示している。図４に戻ると、仮想化システム４２０は、仮想ディスク４０２を、ゲストオペレーティグシステム４１２に対して公開することができる。例えば、仮想ディスクパーサ４０４は、ゲストオペレーティグシステム４１０の中で実行されているストレージ仮想化サービスクライアントと通信するように動作可能なストレージ仮想化サービスプロバイダーと通信することができる。特定の実施例において、ストレージ仮想化サービスクライアントは、ゲストに対して自身がストレージデバイスと通信できることを知らせるゲストオペレーティグシステム４１２の中にインストールされたドライバーであり得る。この実施例で、ファイルシステム４１４によって送付されたＩＯジョブは、最初にストレージ仮想化サービスクライアントに送付され、次に通信チャンネルを介してストレージ仮想化サービスプロバイダーに送付される。通信チャンネルは、例えば、メモリーの領域とクロスパーティション（ｃｒｏｓｓ−ｐａｒｔｉｔｉｏｎ）との通知機能である。仮想ディスク４０２は、仮想ディスクパーサ４０４によってオープンされ得る一つまたはそれ以上の仮想ディスクファイル４０６で構成され、仮想ディスク４０２に対するデータを保管するために使用され得る。特定の実施例において、仮想ディスク４０２は、図７の仮想ディスクファイル７０２によって、少なくとも部分的に記述することができる。別の特定の実施例において、図１０に移ると、仮想ディスク４０２は、仮想ディスクファイルのブループ（１００２から１００６）によって記述することができる。どちらの場合においても、図４に戻ると、仮想ディスク４０２は、複数の仮想ディスクエクステントを含み、仮想ディスクエクステントのうちの一つは分離され得る。つまり、仮想ディスクファイルに関連するいかなるスペースによってもビットごとには記述されない。
【０１０１】
図１６の説明を続けると、オペレーション１６０６は、コンピューターシステムが、仮想ディスクエクステントに対してデータを書き込むリクエストを受け取るための回路を含み得ることを示している。図７に戻ると、仮想ディスクパーサ４０４は、仮想ディスクファイル７０２の中に関連するスペースを有しない仮想ディスクエクステントに対してデータを書き込むリクエストを受け取ることができる。例えば、仮想ディスクエクステントの中にある、仮想ディスクセクターのアドレスを示すオフセット値を指定するＩＯジョブを受け取ることができる。
【０１０２】
図１６に戻ると、オペレーション１６０８は、コンピューターシステムが、仮想ディスクエクステントに関連付けられた状態情報は仮想ディスクエクステントがフリースペースであることを示していると判断するための回路を、追加的に含み得ることを示している。ＩＯジョブの受け取りに応じて、仮想ディスクパーサ４０４は、アロケーションテーブル４１６にアクセスして、その仮想ディスクエクステントに関連付けられた状態情報を読み出す。この実施例で、仮想ディスクエクステントは、その仮想ディスクエクステントがフリースペースであることを示す情報と関連付けられ得る。つまり、ファイルシステム４１４は、その仮想ディスクエクステントを使用しておらず、仮想ディスクエクステントに対する読出しオペレーションは、任意のデータで回答され得るものである。
【０１０３】
図１６を参照すると、オペレーション１６１０は、コンピューターシステムが、仮想ディスクファイルのセクションの中に既に存在しているビットパターンを上書きすることなくその仮想ディスクエクステントを記述するように、仮想ディスクファイルのセクションを割り当てるための回路を、追加的に含み得ることを示している。例えば、図７に戻ると、書込みＩＯジョブの受け取りに応じて、仮想ディスクパーサ４０４は、仮想ディスクファイル７０２における使用されていないセクションを、仮想ディスクエクステントのためのデータを保管するために割り当てることができる。例えば、仮想ディスクパーサ４０４は、仮想ディスクエクステントを仮想ディスクファイル７０２の割り当てられたセクションのバイトオフセット値にリンクする情報を、アロケーションテーブル４１６に書き込むことができる。
【０１０４】
この実施例において、仮想ディスクパーサ４０４は、セクションの中に存在するいかなるビットパターン、例えばいくつかの削除されたファイルからのデータ及び／又は任意のデータ、も上書きすることはない。データは、仮想ディスクエクステントを記述するためにそのセクションを使用する以前に、（全部０（ゼロ）、全部１、または、あらゆる他の情報を開示しないビットパターンを書き込むことにより）仮想ディスクファイル７０２のセクションの中に保管されたものである。仮想ディスクエクステント５がフリースペースであるとファイルシステム４１４が特定したことを、状態情報が示しているからである。このことは、そうでなければ仮想ディスクエクステントのセクションを上書きするために使用されていたであろうプロセッササイクルとＩＯジョブを節約できるという追加的な利益を提供する。
【０１０５】
図１６のオペレーション１６１２を参照すると、図は、コンピューターシステムが、仮想ディスクエクステントが仮想ディスクファイルの割り当てられたセクションにマップされていることを示すように、仮想ディスクエクステントと関連付けられた状態情報を変更するための回路を、追加的に含み得ることを示している。例えば、図７に戻ると、仮想ディスクパーサ４０４は、仮想ディスクエクステントがマップされていることを示すために関連付けられた状態情報を変更する、例えばメモリーを上書きする、ことができる。従って、仮想ディスクエクステントのセクターに向けられた後続の読出しオペレーションは、対応する割り当てられたセクションの領域に保管されたビットパターンを返すことにより、仮想ディスクパーサ４０４によって扱われる。
【０１０６】
図１６のオペレーション１６１４に移ると、図は、データを、仮想ディスクファイルの割り当てられたセクションに保管することを示している。図６に戻ると、仮想ディスクパーサ４０４は、仮想ディスクファイル７０２の中に、データ、例えばビットパターン、を書き込むことができる。仮想ディスクファイル７０２への書込みを示すＩＯジョブが、仮想ディスクファイルシステム４０８に対して発行され得る。そして、ついには、その変更は、固定ストレージユニット４６０によって固定され得る。
【０１０７】
図１７に移ると、図は、図１６で説明されたオペレーションと供に実行され得る追加的なオペレーションを示している。オペレーション１７１６をみると、コンピューターシステムが、仮想ディスクエクステントがゼロ化されたとの判断に応じて仮想ディスクエクステントがゼロにされたことを示すように、仮想ディスクファイルから仮想ディスクエクステントを分離し、仮想ディスクエクステントと関連付けられた状態情報を変更するための回路を、追加的に含み得ることを示している。例えば、図６に移ると、実施例において、仮想ディスクパーサ４０４は、仮想ディスクエクステントがゼロ化されたものと判断することができる。例えば、仮想ディスクパーサ４０４は、よく知られたゼロトークンによって表されたデータを仮想ディスクエクステント、例えば仮想ディスクエクステント７、に対して書き込むためのオフロード書込みリクエストを受け取ることができる。仮想ディスクパーサ４０４は、リクエストに関連するデータ構造から、そのリクエストが仮想ディスクエクステント全体に対するものであると判断することができる。例えば、バイトオフセット値は、仮想ディスクエクステント７の最初のセクターにおいて始まり、仮想ディスクエクステント７の最後のセクターで終了する。そうした判断に応じて、および、仮想ディスクファイル７０２の対応するセクションにゼロを書き込む代わりに、仮想ディスクパーサ４０４は、アロケーションテーブル４１６に保管された、仮想ディスクファイル７０２のセクションに対するリンクを、仮想ディスクエクステントから除去し、その仮想ディスクエクステントを、仮想ディスクエクステントが全部ゼロであることを示す情報と関連付けるように、構成され得る。
【０１０８】
図１７の説明を続けると、オペレーション１７１８は、コンピューターシステムが、仮想ディスクエクステントがフリースペースであるものと特定したファイルシステムからの信号の受け取りに応じて仮想ディスクエクステントが任意のデータを含むことを示すように、仮想ディスクファイルから仮想ディスクエクステントを分離し、仮想ディスクエクステントと関連付けられた状態情報を変更するための回路を、追加的に含み得ることを示している。例えば、再び図７に戻ると、仮想ディスクパーサ４０４は、ファイルシステム４１４が、仮想ディスクエクステントを、それがフリースペースであること、つまりファイルシステム４１４によって使用されていないこと、を示す情報と関連付けたものと判断することができる。例えば、仮想ディスクパーサ４０４は、ファイルシステム４１４から、仮想ディスクエクステント、例えば仮想ディスクエクステント３、をカバーするセクターの領域を示す信号、および、そのセクターがフリースペースであることを示す情報、を受け取ることができる。そうした判断に応じて、仮想ディスクパーサ４０４は、アロケーションテーブル４１６にある、仮想ディスクエクステントを仮想ディスクファイル７０２のセクションにリンクする情報を除去し、かつ、仮想ディスクエクステントを、読出しＩＯジョブの受け取りに応じて任意のデータを返すことができることを示す情報に関連付けるように、構成され得る。任意のデータは、例えば、以前に仮想ディスクのあらゆる部分に保管されたデータ、全部０（ゼロ）、または、全部１である。
【０１０９】
図１７のオペレーション１７２０は、コンピューターシステム４００が、仮想ディスクエクステントの全てのセクターをトリムするリクエストの受け取りに応じて仮想ディスクエクステントが情報を開示しないビットパターンを含むことを示すように、仮想ディスクファイルから仮想ディスクエクステントを分離し、仮想ディスクエクステントと関連付けられた状態情報を変更するための回路を、追加的に含み得ることを示している。例えば、再び図７に戻ると、仮想ディスクパーサ４０４は、仮想ディスクエクステントを構成するセクターがトリムされたものと判断することができる。例えば、仮想ディスクパーサ４０４は、ファイルシステム４１４から、仮想ディスクエクステントをカバーする領域を示すトリムコマンドを受け取ることができる。そうした信号の受け取りに応じて、仮想ディスクパーサ４０４は、アロケーションテーブル４１６にある、仮想ディスクエクステントを仮想ディスクファイル７０２のセクションにリンクする情報を除去し、かつ、仮想ディスクエクステントを、仮想ディスクエクステントが情報を開示しないビットパターンを有していることを示す情報に関連付けるように、構成され得る。
【０１１０】
上述の詳細な説明は、例示及び／又はオペレーションダイヤグラムを介してシステム及び／又はプロセスの種々の実施例を明らかにしてきた。そうしたブロックダイヤグラム及び／又は実施例が、一つまたはそれ以上の機能及び／又はオペレーションを含む限りにおいて、当業者であれば、そうしたブロックダイヤグラムの中のそれぞれの機能及び／又はオペレーションまたは実施例が、広い範囲のハードウェア、ソフトウェア、ファームウェア、または、それらの仮想的なあらゆる組み合わせによって、個々に及び／又は集合的に実施することができることを理解されよう。
【０１１１】
ここにおいて記載された本発明の技術的事項に係る特定の態様が示されて説明されてきたが、当業者にとっては、ここにおける教示に基づいて、ここにおいて説明された技術的事項及びそのより広い局面から逸脱することなく変更や変形をすることができること、従って、添付の請求項は、その範囲の中に、そうした変更や変形の全てを、ここにおいて説明された技術的事項の精神及び範囲内にあるものとして包含するものであること、が明らかである。
【図１】
0006050262.tif 000003
【図２】
0006050262.tif 000004
【図３】
0006050262.tif 000005
【図４】
0006050262.tif 000006
【図５Ａ】
0006050262.tif 000007
【図５Ｂ】
0006050262.tif 000008
【図６】
0006050262.tif 000009
【図７】
0006050262.tif 000010
【図８】
0006050262.tif 000011
【図９】
0006050262.tif 000012
【図１０】
0006050262.tif 000013
【図１１】
0006050262.tif 000014
【図１２】
0006050262.tif 000015
【図１３】
0006050262.tif 000016
【図１４】
0006050262.tif 000017
【図１５】
0006050262.tif 000018
【図１６】
0006050262.tif 000019
【図１７】
0006050262.tif 000020