(57)【特許請求の範囲】
【請求項１】
プロセッサにより実行されると該プロセッサに、
複数の仮想ディスクファイルのチェーンのうちの第１の仮想ディスクファイルを開き、該第１の仮想ディスクファイルは、第１の固有識別子と、仮想ディスク内のデータの少なくとも一部を形成する仮想ディスク範囲データと、を有し、前記第１の仮想ディスクファイルの割り当てテーブルは、前記仮想ディスク範囲データが前記第１の仮想ディスクファイルのセクションにより定められるか否か、又は前記仮想ディスク範囲データが前記複数の仮想ディスクファイルのチェーンのうちの第２の仮想ディスクファイルにより定められるか否かを示す状態情報を有し、
前記割り当てテーブルにアクセスし、前記仮想ディスク範囲データが前記第１の仮想ディスクファイルのセクションにより定められるか否かを決定し、
ユーザペイロード、ディスク終端識別子、又は異なるセクションに向けられるリード動作を生じる前記割り当てテーブル内のエントリを変更する情報を前記第１の仮想ディスクファイルに書き込む試みの検出に応答して、前記第１の仮想ディスクファイル内の前記第１の固有識別子を第２の固有識別子で上書きし、
前記第２の固有識別子が、物理的記憶装置に永続的に格納される、前記第１の仮想ディスクファイルのコピーに書き込まれたことに応答して、前記第１の仮想ディスクファイルに前記情報を書き込ませる、
命令を有するコンピュータ可読記憶媒体。
【請求項２】
実行されると前記プロセッサに、
正規化ビットマップ識別子を、子仮想ディスクファイルのみにより定められる仮想ディスク範囲をグループとして識別する正規化ビットマップと関連付け、
前記第１の仮想ディスクファイル内のデータが変更されたのに応答して、前記子仮想ディスクファイル内の前記正規化ビットマップ識別子のコピーを第２の正規化ビットマップ識別子に更新し、
前記正規化ビットマップが前記グループとして識別された前記仮想ディスク範囲の状態を正確に反映するのに応答して、前記情報に関連付けられた前記正規化ビットマップ識別子を前記第２の正規化ビットマップ識別子に更新させる、
命令を更に有する請求項１に記載のコンピュータ可読記憶媒体。
【請求項３】
プロセッサと、
給電されると前記プロセッサと電子的に通信するメモリと、
を有し、前記メモリは、プロセッサにより実行されると該プロセッサに、
複数の仮想ディスクファイルのチェーンのうちの第１の仮想ディスクファイルを開き、該仮想ディスクファイルは、第１の固有識別子と、仮想ディスク内のデータの少なくとも一部を形成する仮想ディスク範囲データと、を有し、前記第１の仮想ディスクファイルの割り当てテーブルは、前記仮想ディスク範囲データが前記第１の仮想ディスクファイルのセクションにより定められるか否か、又は前記仮想ディスク範囲データが前記複数の仮想ディスクファイルのチェーンのうちの第２の仮想ディスクファイルにより定められるかどうかを示す状態情報を有し、
前記割り当てテーブルにアクセスし、前記仮想ディスク範囲データが前記第１の仮想ディスクファイルのセクションにより定められるか否かを決定し、
ユーザペイロード、ディスク終端識別子、又は異なるセクションに向けられるリード動作を生じる前記割り当てテーブル内のエントリを変更する情報を前記第１の仮想ディスクファイルに書き込む試みの検出に応答して、前記第１の仮想ディスクファイル内の前記第１の固有識別子を第２の固有識別子で上書きし、
前記第２の固有識別子が、物理的記憶装置に永続的に格納される、前記第１の仮想ディスクファイルのコピーに書き込まれたことに応答して、前記第１の仮想ディスクファイルに前記情報を書き込ませる、
命令を有する、コンピュータシステム。
【請求項４】
実行されると前記プロセッサに、
前記第１の仮想ディスクファイル内の固有識別子が親仮想ディスクファイル内にある固有識別子に一致することに応答して、前記仮想ディスクをインスタンス化させる、
命令を更に有する、請求項３に記載のコンピュータシステム。
【請求項５】
実行されると前記プロセッサに、
前記第１の仮想ディスクファイルが変更されたことに応答して、前記情報と関連付けられた前記第１の固有識別子の前記コピーを前記第２の固有識別子に変更し、
前記情報に対して行われた変更のログをとらせる、
命令を更に有する、請求項３に記載のコンピュータシステム。
【請求項６】
実行されると前記プロセッサに、
ユーザペイロード、ディスク終端識別子、又は異なるセクションに向けられるリード動作を生じる前記割り当てテーブル内のエントリを変更する親仮想ディスクファイル内の情報を変更しようとする試みを検出し、
前記第１の仮想ディスクファイルを物理的記憶装置に永続的に書き込み、
前記の永続的な書き込みが完了したことを示す信号の受信に応答して、親仮想ディスクファイル内の前記情報を変更させる、
命令を更に有する、請求項３に記載のコンピュータシステム。
【請求項７】
複数の仮想ディスクファイルのチェーンのうちの親仮想ディスクファイルを開くステップであって、前記親仮想ディスクファイルは子仮想ディスクファイルにリンク付けされ、前記親仮想ディスクファイルは第１の識別子を有し、前記子仮想ディスクファイルは前記第１の識別子のコピーを有し、前記親仮想ディスクファイルの割り当てテーブルは、仮想ディスク範囲データが前記親仮想ディスクファイルのセクションにより定められるか否か、又は前記仮想ディスク範囲データが前記複数の仮想ディスクファイルのチェーンのうちの第２の仮想ディスクファイルにより定められるか否かを示す状態情報を有する、ステップと、
前記割り当てテーブルにアクセスし、前記仮想ディスク範囲データが前記親仮想ディスクファイルのセクションにより定められるか否かを決定するステップと、
前記仮想ディスク範囲データを変更する試みの検出に応答して、前記親仮想ディスクファイル内の前記第１の識別子を第２の識別子で上書きするステップと、
前記親仮想ディスクファイルのコピーを永続的に格納するよう構成される記憶装置に、前記第１の識別子を前記第２の識別子で上書きすることを示す入力／出力ジョブを発行するステップと、
前記記憶装置にフラッシュコマンドを発行するステップと、
前記記憶装置に内部キャッシュの内容が永続的に書き込まれたことを示す信号の受信に応答して、前記仮想ディスク範囲データを変更するステップと、
を有するコンピュータが実施する方法。
【請求項８】
前記仮想ディスクファイルの前記コピー内の前記第２の識別子が前記子仮想ディスクファイルに格納された前記第１の識別子と一致しないことに応答して、仮想ディスクをインスタンス化する要求を拒否するステップ、
を更に有する請求項７に記載のコンピュータが実施する方法。
【請求項９】
仮想ディスクをインスタンス化するステップであって、前記仮想ディスクは前記親仮想ディスクファイルにより定められる仮想ディスク範囲と前記子仮想ディスクファイルにより定められる仮想ディスク範囲とを有し、前記子仮想ディスクファイルはシーケンス番号を有する、ステップと、
前記子仮想ディスクファイルにより完全に記述される前記仮想ディスクファイル内の前記仮想ディスク範囲のサブセットを識別する情報を、ランダムアクセスメモリにロードするステップであって、前記情報は前記シーケンス番号のコピーと関連付けられる、ステップと、
前記子仮想ディスクファイルは変更されたことに応答して、前記子仮想ディスクファイル内の前記シーケンス番号を増大するステップと、
前記情報は前記子仮想ディスクファイル内の仮想ディスク範囲の前記サブセットの状態を正確に反映するのに応答して、前記情報と関連付けられた前記シーケンス番号を増大するステップと、
を更に有する請求項７に記載のコンピュータが実施する方法。
【請求項１０】
仮想ディスク範囲のグループのセクタビットマップを前記仮想ディスクファイルに書き込むステップであって、前記仮想ディスクファイルのセクションは、前記セクションが前記仮想ディスクファイルを格納するよう構成された記憶装置のセクタと揃えられるよう選択された仮想ディスクファイルオフセットを有する、ステップ、
を更に有する請求項７に記載のコンピュータが実施する方法。
【発明の詳細な説明】
【技術分野】
【０００１】
本発明は、仮想記憶ディスク技術に関する。
【背景技術】
【０００２】
記憶装置の仮想化技術は、物理記憶からの論理記憶の区分を可能にする。記憶装置の仮想化に関する１つの例示的な使用例は、仮想マシンに含まれる。仮想化ソフトウェアのレイヤ（通常、ハイパーバイザ又は仮想マシンモニタと呼ばれる）は、コンピュータシステムにインストールされ、仮想マシンが物理的ハードウェアとどのように相互作用するかを制御する。ゲストオペレーティングシステムは、通常、物理的ハードウェアに対して排他的制御を実行するようコーディングされるので、仮想化ソフトウェアは、物理的ハードウェアのリソースを分割し、仮想マシン内の物理的ハードウェアの存在をエミュレートするよう構成され得る。記憶装置の仮想化に関する別の使用例は、記憶装置アレイを実装するよう構成されるコンピュータシステムに含まれる。この場合、物理的コンピュータシステム又は仮想マシンは、ｉＳＣＳＩプロトコル等を用いて記憶装置アレイに接続され得る。
【０００３】
記憶処理モジュールは、仮想又は物理的機械の記憶装置をエミュレートするために用いることができる。例えば、記憶処理モジュールは、仮想又は物理的機械により発行された記憶ＩＯジョブを、仮想ディスク、つまりブロックのような連続記憶領域の範囲を記述、つまり格納するために用いることができる１又は複数の仮想ディスクファイルから読み出し及びそれに書き込むことにより、処理できる。同様に、記憶処理プログラムは、仮想ディスクのビットパターンデータを１又は複数の仮想ディスクファイルに書き込むことにより書き込み要求に応答でき、該１又は複数の仮想ディスクファイルに格納された該ビットパターンデータを読み出すことにより読み出し要求に応答できる。
【発明の概要】
【課題を解決するための手段】
【０００４】
例示的な実施形態では、仮想ディスクファイルは識別子を割り当てられ、仮想ディスクファイルに依存する仮想ディスクファイルは、該識別子のコピーを有する。仮想ディスクファイルが開かれ、データが変更されて仮想ディスク範囲の内容に変更を生じる場合には、識別子は変更され得る。仮想ディスクをインスタンス化するために仮想ディスクファイル及び従属する仮想ディスクファイルが用いられる場合、識別子同士の差分が検出される。この差分は、仮想ディスクが損傷しているという事実を示す。
【０００５】
同一の又は別の例示的な実施形態では、仮想ディスク範囲のグループの正規化ビットマップは永続的であり得る。識別子は仮想ディスクファイルに格納され、識別子のコピーは正規化ビットマップと関連付けられ得る。仮想ディスクファイルに対して変更が行われると、識別子は更新され得る。正規化ビットマップが仮想ディスク範囲のグループのセクタビットマップを正確に反映する場合には、正規化ビットマップと関連付けられた識別子のコピーが更新され得る。仮想ディスクファイルが後の時間に開かれるとき、２つの識別子の一致は、正規化ビットマップが仮想ディスク範囲のグループのセクタビットマップを正確に反映していること、及びビットマップが使用可能であることを示す。以上に加え、他の技術は、請求の範囲、詳細な説明及び図面に記載される。
【０００６】
当業者は、本開示の１又は複数の種々の態様が、限定ではなく、ここに言及される態様を達成する回路及びプログラムを有しても良く、該回路及びプログラムが、システム設計者の設計選択に依存してここに言及される態様を達成するよう構成されるハードウェア、ソフトウェア及び／又はファームウェアの実質的に如何なる組合せでもあり得ることを理解する。
【０００７】
以上は要約であり、したがって必然的に簡略化、一般化及び詳細の省略を含む。当業者は、この要約が単に説明のためであり、限定を意図しないことを理解する。
【図面の簡単な説明】
【０００８】
【図１】コンピュータシステムのハイレベルブロック図を示す。
【図２】仮想化ソフトウェアプログラムの例示的なアーキテクチャのハイレベルブロック図を示す。
【図３】仮想化ソフトウェアプログラムの別のアーキテクチャのハイレベルブロック図を示す。
【図４】仮想ディスクを達成するよう構成されるコンピュータシステムのローレベルブロック図を示す。
【図５Ａ】仮想ディスクを達成するよう構成されるコンピュータシステムのローレベルブロック図を示す。
【図５Ｂ】仮想ディスクを達成するよう構成されるコンピュータシステムのローレベルブロック図を示す。
【図６】差分仮想ディスクファイルのハイレベルブロック図を示す。
【図７】仮想ディスクと仮想ディスクファイルとの間の関係のを示す。
【図８】正規化ビットマップとセクタビットマップとの間の関係のを示す。
【図９】仮想ディスクファイルと合成セクタビットマップの間の関係のを示す。
【図１０】コンピュータ可読記憶媒体内に具現化され及び／又はコンピュータシステムにより実行され得る動作手順を示す。
【図１１】図１０に示した動作と共に実行され得る追加動作を示す。
【図１２】コンピュータ可読記憶媒体内に具現化され及び／又はコンピュータシステムにより実行され得る動作手順を示す。
【図１３】図１２に示した動作と共に実行され得る追加動作を示す。
【図１４】コンピュータ可読記憶媒体内に具現化され及び／又はコンピュータシステムにより実行され得る動作手順を示す。
【図１５】図１４に示した動作と共に実行され得る追加動作を示す。
【発明を実施するための形態】
【０００９】
本願明細書で用いられる用語、回路は、ハードウェア割り込み制御部、ハードドライバ、ネットワークアダプタ、グラフィックプロセッサ、ハードウェアベースのビデオ／オーディオコーデックのようなハードウェアコンポーネント、及びこれらのハードウェアを動作させるファームウェアを含み得る。用語、回路は、マイクロプロセッサ、特定用途向け集積回路、及びファームウェア及び／又はソフトウェアにより構成されるプロセッサ、例えば命令をリードし及び実行する実行ユニットも含み得る。プロセッサ等は、メモリ、例えばＲＡＭ、ＲＯＭ、ファームウェア及び／又は大容量記憶装置から読み込んだ命令により構成され得る。このような命令は、１又は複数の機能を実行するようプロセッサを構成するロジックを用い得る。特定の例示的な回路は、ハードウェア及びソフトウェアの組合せを含み得る。この特定例では、実装者は、プロセッサにより実行可能な機械可読コードに後にコンパイルされる、ロジックを具現化するソースコードを記述しても良い。
【００１０】
当業者は、最先端では、ハードウェアで実装される機能とソフトウェアで実装される（後にハードウェアにより実行される）機能との間に僅かな差しかないことを理解する。したがって、ハードウェア又はソフトウェアで実装されるというような機能の記載は、単に設計選択である。端的に言うと、ソフトウェア処理は等価なハードウェア構造に変換でき、ハードウェア構造はそれ自体が等価なソフトウェア処理に変換できるので、命令で具現化されるよう記載される機能は代替としてハードウェアで実装でき、逆も同様である。
【００１１】
開示の主題は、１又は複数のコンピュータシステムを用いても良い。図１及び以下の議論は、開示の主題が実施され得る適切なコンピューティング環境の簡潔な概略的説明を提供することを目的とする。
【００１２】
図１を参照すると、例示的なコンピューティングシステム１００が示される。コンピューティングシステム１００は、プロセッサ１０２、例えば実行コアを有し得る。１つのプロセッサ１０２が図示されるが、他の実施形態では、コンピュータシステム１００は、複数のプロセッサ、例えばプロセッサ基板毎に複数の実行コアを及び／又はそれぞれ複数の実行コアを有する複数のプロセッサ基板を有しても良い。図示のように、種々のコンピュータ可読記憶媒体１１０が、種々のシステムコンポーネントをプロセッサ１０２に結合する１又は複数のシステムバスにより相互接続され得る。システムバスは、メモリバス又はメモリ制御部、周辺バス、及び種々のバスアーキテクチャのうちの任意のものを用いるローカルバスを含む複数種類のバス構造のうちの任意のものであっても良い。例示的な実施形態では、コンピュータ可読記憶媒体１１０は、例えばＲＡＭ（random  access  memory）、記憶装置１０６、例えば電気機械ハードドライブ、固体ハードドライブ等、ファームウェア１０８、例えばＦＬＡＳＨ  ＲＡＭ若しくはＲＯＭ，及び取り外し可能記憶装置１１８、例えばＣＤ−ＲＯＭ，フロッピディスク、ＤＶＤ、ＦＬＡＳＨドライブ、外部記憶装置等を有し得る。当業者に理解されるべきことに、磁気カセット、フラッシュメモリカード、及び／又はデジタルビデオディスクのような他の種類のコンピュータ可読記憶媒体を用いることができる。
【００１３】
コンピュータ可読記憶媒体１１０は、プロセッサ実行可能命令１２２、データ構造、プログラムモジュール、及び実行可能命令のようなコンピュータ１００のための他のデータの不揮発性及び揮発性記憶を提供し得る。ＢＩＯＳ（basic  input/output  system）１２０は、起動中のような、コンピュータシステム１００内の要素間の情報転送を助ける基本ルーチンを含み、ファームウェア１０８に格納され得る。オペレーティングシステム及び／又はアプリケーションプログラムを含む多数のプログラムが、ファームウェア１０８、記憶装置１０６、ＲＡＭ１０４、及び／又は取り外し可能記憶装置１１８に格納され、プロセッサ１０２により実行されても良い。例示的な実施形態では、コンピュータ可読記憶媒体１１０は、以下に詳述する仮想ディスクパーサ４０４を格納し得る。仮想ディスクパーサ４０４は、プロセッサ１０２により実行されることにより、コンピュータシステム１００を、特定目的のために構成されたコンピュータシステムに変える。つまり、コンピュータシステムは、本願明細書に記載される技術に従って構成される。
【００１４】
コマンド及び情報は、キーボード及びポインティングデバイスを含むがこれらに限定されない入力装置１１６を通じて、コンピュータ１００により受信されても良い。他の入力装置は、マイクロフォン、ジョイスティック、ゲームパッド、スキャナ等を有しても良い。上述の及び他の入力装置は、システムバスに結合されるシリアルポートインタフェースを通じて、プロセッサ１０２に接続される場合が多いが、パラレルポート、ゲームポート又はＵＳＢ（universal  serial  bus）ポートのような他のインタフェースにより接続することもできる。ディスプレイ又は他の種類のディスプレイは、グラフィックプロセッサユニット１１２の一部であり又はそれに接続されるビデオアダプタのようなインタフェースを介してシステムバスにも接続され得る。ディスプレイに加え、コンピュータは、通常、スピーカ及びプリンタ（図示しない）のような他の周辺出力装置を有する。図１の例示的なシステムは、ホストアダプタ、ＳＣＳＩ（Small  Computer  System  Interface）バス、及びＳＣＳＩバスに接続される外部記憶装置も有し得る。
【００１５】
コンピュータシステム１００は、遠隔コンピュータのような１又は複数のリモートコンピュータへの論理コネクションを用いてネットワーク環境で動作しても良い。リモートコンピュータは、別のコンピュータ、サーバ、ルータ、ネットワークＰＣ、ピア装置又は他の一般的なネットワークノードであって良く、通常、コンピュータシステム１００に関して上述した要素の多く又は全てを有し得る。
【００１６】
ＬＡＮ又はＷＡＮネットワーク環境で用いられるとき、コンピュータシステム１００は、ネットワークインタフェースカード１１４を通じて、ＬＡＮ又はＷＡＮに接続され得る。ＮＩＣ１１４は、内蔵又は外付けであって良く、システムバスに接続され得る。ネットワーク環境では、コンピュータシステム１００に関連して示されたプログラムモジュール又はその部分は、遠隔メモリ記憶装置に格納されても良い。理解されるべきことに、本願明細書に記載されたネットワーク接続は例であり、コンピュータ間の通信リンクを確立する他の手段を用いることが出来る。さらに、本開示の多数の実施形態はコンピュータ化されたシステムに特に良く適すると考えられるが、本願明細書はこのような実施形態に本開示を限定するものではない。
【００１７】
図２及び３を参照すると、仮想デスクトップセッションに用いられる仮想マシンを生成するために用いることができる例示的な仮想化プラットフォームが示される。本実施形態では、ハイパーバイザマイクロカーネル２０２は、コンピュータシステム２００のハードウェアを制御し、該ハードウェアへのアクセスを調停するよう構成され得る。ハイパーバイザマイクロカーネル２０２は、Ｃｈｉｌｄパーティション１乃至Ｎ（ここで、Ｎは１より大きい整数である）のようなパーティションと呼ばれる実行環境を生成し得る。ここで、Ｃｈｉｌｄパーティションは、ハイパーバイザマイクロカーネル２０２によりサポートされる分離の基本単位である。ハイパーバイザマイクロカーネル２０２は、あるパーティションのプロセスを、別のパーティションのリソースへのアクセスから隔離できる。各Ｃｈｉｌｄパーティションは、ハイパーバイザマイクロカーネル２０２の制御下にあるハードウェアリソース、例えばメモリ、装置、プロセッササイクル等のセットにマッピングされ得る。実施形態では、ハイパーバイザマイクロカーネル２０２は、スタンドアロン型ソフトウェア、オペレーティングシステムの一部であり、マザーボードのファームウェア内に組み込まれ、専用集積回路であり、又はそれらの組合せであり得る。
【００１８】
ハイパーバイザマイクロカーネル２０２は、ゲストオペレーティングシステムの、物理コンピュータシステム内のメモリの視野（メモリビュー）を制限することにより、パーティションを実行できる。ハイパーバイザマイクロカーネル２０２は、仮想マシンのインスタンスを生成するとき、システム物理メモリ（system  physical  memory：ＳＰＭ）のページ、例えば開始アドレス及び終了アドレスを有する固定長メモリブロックを、ゲスト物理メモリ（guest  physical  memory：ＧＰＭ）として仮想マシンに割り当てることができる。ここで、ゲストの、システムメモリの制限された視野は、ハイパーバイザマイクロカーネル２０２により制御される。用語、ゲスト物理メモリは、仮想マシンの観点からメモリページを記述する省略表現である。また、用語、システム物理メモリは、物理システムの観点からメモリページを記述する省略表現である。したがって、仮想マシンに割り当てられるメモリページは、ゲスト物理アドレス（仮想マシンにより用いられるアドレス）及びシステム物理メモリ（ページの実際のアドレス）を有する。
【００１９】
ゲストオペレーティングシステムは、ゲスト物理メモリを仮想化しても良い。仮想メモリは、オペレーティングシステムに、メモリをコミットさせ、アプリケーションに連続ワーキングメモリへの単独アクセスを与えさせる管理技術である。仮想化環境では、ゲストオペレーティングシステムは、１又は複数のページテーブルを用い、仮想ゲストアドレスとして知られる仮想アドレスを、ゲスト物理アドレスに変換する。本例では、メモリアドレスは、ゲスト仮想アドレス、ゲスト物理アドレス、及びシステム物理アドレスを有しても良い。
【００２０】
図示の例では、Ｐａｒｅｎｔパーティションコンポーネントは、Ｘｅｎのオープンソースハイパーバイザのドメイン０と同様であるとも考えられ、ホスト２０４を含み得る。ホスト２０４はオペレーティングシステム（又は設定ユーティリティのセット）であり、ホスト２０４は、仮想化サービスプロバイダ２２８（ＶＳＰ）を用いることにより、Ｃｈｉｌｄパーティション１〜Ｎで実行するゲストオペレーティングシステムにリソースを提供するよう構成され得る。ＶＳＰ２２８は、通常、オーブンソースコミュニティでバックエンドドライバと呼ばれ、仮想化サービスクライアント（ＶＳＣ）（通常、オーブンソースコミュニティでフロントエンドドライバと呼ばれる、又は並列仮想化装置）を用いてハードウェアリソースへのインタフェースを多重化するために用いることができる。図示のように、仮想化サービスクライアントは、ゲストオペレーティングシステムの環境内で実行する。しかしながら、これらのドライバは、ゲストによってではなく、ハイパーバイザにより提供される点で、ゲスト内の残りのドライバと異なる。例示的な実施形態では、仮想化サービスクライアント２１６及び２１８と通信するために仮想化サービスプロバイダ２２８により用いられる経路は、仮想化パスであると考えられる。
【００２１】
図示のように、エミュレータ２３４、例えば仮想化ＩＤＥ装置、仮想化ビデオアダプタ、仮想化ＮＩＣ等は、ホスト２０４内で動作するよう構成され、ゲストオペレーティングシステム２２０、２２２に利用可能なリソースに取り付けられる。例えば、ゲストＯＳが装置のレジスタが存在する場所にマッピングされたメモリ位置又はメモリにマッピングされた装置に触れるとき、ハイパーバイザマイクロカーネル２０２は、要求を傍受し、関連するエミュレータに書き込みしようとしたゲストに値を渡す。また、本例のリソースは、仮想装置が位置する場所に存在すると考えられる。このようなエミュレータの使用は、エミュレーションパスと考えられる。エミュレーションパスは、装置をエミュレートするためにはＶＳＰとＶＳＣとの間でメッセージを渡すよりも多くのＣＰＵリソースを必要とするので、仮想化パスと比べて非効率である。例えば、エミュレーションパスを介してディスクに値を書き込むために、レジスタにマッピングされたメモリに対する何百回もの動作は、仮想化パスでは、ＶＳＣからＶＳＰに渡される単一のメッセージにまで削減されても良い。
【００２２】
各Ｃｈｉｌｄパーティションは、１又は複数の仮想プロセッサ（２３０、２３２）を有し得る。ゲストオペレーティングシステム（２２０、２２２）は、仮想プロセッサを管理し、それらで実行すべきスレッドをスケジューリングする。概して、仮想プロセッサは、実行可能命令であり、特定アーキテクチャを有する物理的プロセッサを表す関連状態情報である。例えば、ある仮想マシンは、Ｉｎｔｅｌ  ｘ８６プロセッサの特徴を有する仮想プロセッサを有しても良い。また、別の仮想プロセッサは、ＰｏｗｅｒＰＣプロセッサの特徴を有しても良い。本例の仮想プロセッサは、コンピュータシステムのプロセッサにマッピングされ、仮想プロセッサを達成する命令がプロセッサにより支援されるようにする。したがって、複数のプロセッサを有する一実施形態では、仮想プロセッサは複数のプロセッサにより同時に実行でき、同時に、例えば他のプロセッサはハイパーバイザ命令を実行する。パーティションにおける仮想プロセッサとメモリの組合せは、仮想マシンと考えられる。
【００２３】
ゲストオペレーティングシステム（２２０、２２２）は、例えばMicrosoft（登録商標）、Apple（登録商標）、オープンソースコミュニティ等によるオペレーティングシステムのような任意のオペレーティングシステムであり得る。ゲストオペレーティングシステムは、ユーザ／カーネル動作モードを有し、スケジューラ、メモリマネジャ等を含み得るカーネルを有し得る。一般的に、カーネルモードは、少なくとも特権的プロセッサ命令へのアクセスを許可する、プロセッサの実行モードを有し得る。各ゲストオペレーティングシステムは関連ファイルシステムを有し得る。ゲストオペレーティングシステムは、端末サービス、電子商取引サービス、電子メールサービス等のような関連ファイルシステムに格納されたアプリケーション、並びにゲストオペレーティングシステム自身を有し得る。ゲストオペレーティングシステムは、仮想プロセッサで実行すべきスレッドをスケジューリングでき、このようなアプリケーションのインスタンス化が達成できる。
【００２４】
図３を参照すると、図２と同様のコンポーネントを示すが、この例示的な実施形態では、ハイパーバイザ３０２が、マイクロカーネルコンポーネント、並びに仮想サービスプロバイダ２２８及びデバイスドライバ２２４のような図２のホスト２０４内のコンポーネントと同様のコンポーネントを含み得る。一方、管理オペレーティングシステム３０４は、例えばハイパーバイザ３０２を構成するために用いられる設定ユーティリティを有しても良い。このアーキテクチャでは、ハイパーバイザ３０２は、図２のハイパーバイザマイクロカーネル２０２及びホスト２０４と同じ又は同様の機能を実行できる。図３のハイパーバイザ３０２は、スタンドアロン型ソフトウェア、オペレーティングシステムの一部であり、マザーボードのファームウェア内に組み込まれ、及び／又はハイパーバイザ３０２の一部が専用集積回路により達成され得る。
【００２５】
図４を参照すると、コンピュータシステム４００を示す。図４は、本願明細書に記載する技術を実行するために用いることができるコンポーネントのハイレベルブロック図である。簡単に言うと、コンピュータシステム４００は、図１〜３に関して上述したコンポーネントと同様のコンポーネントを有し得る。図４は、図２又は３により説明した仮想プラットフォームのハイレベル表現であると考えられる仮想システム４２０を示す。例えば、仮想システム４２０は、ハイパーバイザマイクロカーネル２０２及びホスト環境２０４により提供される機能の組合せのハイレベル表現と考えられる。或いは、仮想システム４２０は、ハイパーバイザ３０２及び管理ＯＳ３０４のハイレベル表現と考えられる。したがって、本願明細書を通じて用語「仮想システム４２０」の使用は、以下の段落で説明する仮想ディスク技術が任意の種類の仮想ソフトウェア層内で又は任意の種類の仮想プラットフォームで実装され得ることを示唆する。
【００２６】
仮想ディスクパーサ４０４は、特定の例示的な実施形態では実行可能命令であり、仮想ディスクファイルから仮想ディスクをインスタンス化し、仮想マシンの代わりに記憶ＩＯを処理するために用いることができる。図示のように、仮想ディスクパーサ４０４は、仮想ディスクファイル４０６のような１又は複数の仮想ディスクファイルを開き、仮想ディスク４０２を生成できる。
【００２７】
仮想ディスクパーサ４０４は、仮想システムファイルシステム４０８を介して記憶装置１０６から仮想ディスクファイル４０６を得ることができる。簡単に言うと、仮想システムファイルシステム４０８は、仮想ディスクファイル４０６のような、仮想システム４２０のコンピュータファイル及びデータを編成する実行可能命令を表す。仮想システムファイルシステム４０８は、このデータを固定サイズの物理的範囲のアレイ、つまり物理的記憶装置の連続記憶領域に格納できる。特定の例では、１つの範囲はクラスタであり、設定された長さを有する、複数ビットのバイトシーケンスである。例示的なクラスタのサイズは、通常、２の冪乗であり、５１２バイト乃至６４キロバイトである。特定の構成では、クラスタのサイズは、４キロバイトであり得る。
【００２８】
仮想ディスクファイル４０６を開く要求を受信すると、仮想システムファイルシステム４０８は、ファイルがディスクのどこに位置するかを決定し、ディスクの１又は複数の物理的範囲からデータを読み出すためにＩＯジョブをディスクデバイスドライバへ発行する。ファイルシステム４０８により発行されたＩＯジョブは、記憶装置１０６にある仮想ディスクファイル４０６の永続的コピーの位置を記述するディスクオフセット及び長さを決定し、ＩＯジョブを記憶装置１０６へ発行する。記憶装置がどのように動作するかのセマンティクスにより、書き込みＩＯジョブは、記憶装置１０６の回路が永続的記憶ユニット４６０の位置、例えばプラッタ、フラッシュメモリセル等にアクセスし、及び仮想ディスクファイル４０６の永続的コピーの新しいコンテンツを示すバッファリングされたビットパターンを永続的記憶ユニット４６０に書き込むことを決定するまで、キャッシュ４５４により表される揮発性メモリの１又は複数レベルのキャッシュにバッファリングされる。
【００２９】
仮想ディスクパーサ４０４は、仮想ディスクファイル４０６を示すビットパターンを得て、複数の仮想ディスク範囲を有するディスクとして仮想ディスクファイル４０６内にペイロード、例えばユーザデータを置く。一実施形態では、これらの仮想ディスク範囲は、固定サイズブロック、５１２キロバイト乃至６４メガバイトのサイズであり、複数のセクタに区分され得る。しかしながら、別の実施形態では、仮想ディスク範囲は、可変サイズの範囲であり得る。例示的な構成では、ゲストオペレーティングシステム４１２をブートする前に、エミュレート又はEnlightened記憶制御部及び仮想ディスクのEnlightened特徴に関連するリソースは、メモリをマッピングされたレジスタを有するエミュレートされた記憶制御部が仮想マシン４１０のゲスト物理アドレス空間内で実行されるよう、設定される。ブートコードが実行し、ゲストオペレーティングシステム４１２をブートし得る。仮想システム４２０は、ゲスト物理アドレス空間のこの領域へのアクセスの試みを検出し、ゲストオペレーティングシステム４１２に記憶装置がエミュレートされた記憶制御部に取り付けられると決定させる結果を返す。これに応答して、ゲストオペレーティングシステム４１２は、ドライバ（並列仮想ドライバ又は通常のドライバ）をロードし、該ドライバを用いて、検出した記憶装置へ記憶ＩＯ要求を発行する。仮想システム４２０は、記憶ＩＯ要求を仮想ディスクパーサ４０４へ転送できる。
【００３０】
ゲストオペレーティングシステム４１２は、実行された後、ファイルシステム４０８を介して仮想ディスク４０２へＩＯジョブを発行できる。これは、ゲストオペレーティングシステム４１２及びゲストオペレーティングシステム４１２にインストールされたアプリケーションのコンピュータファイル及びデータを編成する仮想システムファイルシステム４１４と似ている。ゲストオペレーティングシステム４１２は、オペレーティングシステムが物理的記憶装置と相互作用するのと同様の方法で、仮想ディスク４０２と相互作用でき、最終的にＩＯジョブは仮想ディスクパーサ４０４へ転送される。仮想ディスクパーサ４０４は、物理的記憶装置をエミュレートする方法で、ＩＯジョブにどのように応答するかを決定するロジックを有し得る。例えば、仮想ディスクパーサ４０４は、仮想ディスクファイル４０６からデータを読み出し、及び仮想ディスクファイル４０６にデータを書き込むことができる。また、仮想ディスクファイル４０６に書き込まれたデータは、仮想システムファイルシステム４０８を通じて転送され、永続的記憶ユニット４６０に格納された仮想ディスクファイル４０６の永続的コピーに又は永続的記憶ユニット４６０にコミットされる。
【００３１】
図５Ａを参照すると、本願明細書に記載される技術を実施するための代替のアーキテクチャを示す。図５に示すように、仮想ディスクパーサ４０４は、Microsoft（登録商標）により提供されるオペレーティングシステムのようなオペレーティングシステム５０２に実装できる。本例では、仮想ディスクパーサ４０４は、図１のコンピュータシステム１００と同様のコンポーネントを有し得る記憶サーバ５００で実行するよう構成され得る。本例では、記憶サーバ５００は、物理的記憶装置アレイ５１０を有し、サーバが利用可能な記憶を作るよう構成され得る。したがって、記憶は、オペレーティングシステム５０８にローカルに取り付けられるように見える。仮想ディスクパーサ４０４は、図４に関して説明したのと同様に動作する。相違点は、本構成では、ファイルシステム４１４により発行されるリード／ライトＩＯジョブが、ネットワーク接続を介して仮想ディスクパーサ４０４へ転送されることである。
【００３２】
図５Ｂを参照すると、本願明細書に記載される技術を実施するための更に別のアーキテクチャを示す。図５Ｂは、図５Ａと同様に、仮想ディスクパーサ４０４がオペレーティングシステム５０２に実装され、コンピュータシステム５１２が図１のコンピュータシステム１００と同様のコンポーネントを有し得る。しかしながら、本例は、図がループバックの取り付けられた仮想ディスク４０２を示す点が異なる。アプリケーション４２４のようなアプリケーションを含み、ファイルシステム４１４は、仮想ディスク４０２に格納され、また、仮想ディスクファイル４０６はコンピュータシステムファイルシステム５１４に格納され得る。
【００３３】
仮想ディスク４０２に注意を向けると、仮想ディスク４０２は単一の仮想ディスクファイルにより達成されるが、他の構成では、仮想ディスク４０２をもたらすために、差分仮想ディスクファイルのグループを用いることができる。図６は、差分ディスクとして仮想ディスク４０２を達成するために仮想ディスクパーサ４０４により用いられ得る仮想ディスクファイルの例示的なチェーンを示す。概して、差分仮想ディスクファイルは、仮想ディスクの現在状態を、親イメージと比較した変更の程度のセットとして表す。親イメージは、別の差分仮想ディスクファイル又は基本仮想ディスクファイルであり得る。
【００３４】
例示的な構成では、親仮想ディスクファイルと子仮想ディスクファイルとの間のリンク付けは、子の中に格納され得る。特に、子は、親の識別子及び親の位置を記述する値を有し得る。仮想マシンを起動するとき、仮想ディスクパーサ４０４は、チェーンの中の最後の仮想ディスクファイルを記述する情報を受信し、このファイルを開いても良い。つまり、仮想ディスクファイル６１２は、仮想ディスクファイル６１２、６１０、６０６、６００を含むチェーンの最後である。このファイルは、このファイルの親、つまり仮想ディスクファイル６１０の識別子、及び親へのパスを有し得る。仮想ディスクパーサ４０４は親の位置を特定して親を開き、基本仮想ディスクファイルの位置が特定されそれが開かれるまで、以降同様である。
【００３５】
仮想ディスクパーサ４０４は、データが親仮想ディスクファイル内に存在するか又は格納されているか否かを示す情報を用いることができる。通常、チェーンの中の最後の仮想ディスクファイルは読み出し／変更として開かれ、他の仮想ディスクファイルは読み出しのみとして開かれる。したがって、書き込みは、通常、チェーン内の最後の仮想ディスクファイルに対して行われる。同様に、読み出し動作は、先ずチェーン内の最後の仮想ディスクファイルに向けられる。そして、仮想ディスクパーサ４０４は、最後から基本へと、データが位置する場所に関する情報がキャッシュされていないインスタンスでデータが見付かるまで、仮想ディスクファイルを論理的に検索する。特定の例では、仮想ディスクファイル、例えば仮想ディスクファイル６１２の割り当てテーブル（図示しない）は、仮想ディスク範囲が仮想ディスクファイルのセクションにより定められるか否か、又はこの仮想ディスク範囲が透過的か、例えば更にチェーンに沿って差分仮想ディスクファイルにより定められるかどうかを示す状態情報を有し得る。一実施形態では、仮想ディスクパーサ４０４は、この仮想ディスク範囲が透過的か否かを決定し、チェーン内の次の仮想ディスクファイル、例えば仮想ディスクファイル６１０の割り当てテーブルにアクセスするというように、データを定めるチェーン内の仮想ディスクファイルの位置が特定されるまで同様にする。
【００３６】
問題は、ユーザが意図的に又は不注意に親である仮想ディスクファイルを開き、ユーザペイロードに影響を与えるデータを変更し得るという点にある。これはまた、このファイルをチェーンの一部として用いる任意の仮想ディスクに影響を与え、仮想ディスクファイルを使用不可能にしてしまう可能性がある。例えば、ユーザが仮想ディスクファイル６１０を開き、パッチを適用し又はデフラグすると仮定する。本例では子仮想ディスクファイル６１２は、今や移動され又は失われた仮想ディスクファイル６１０内のデータに依存し得る。子仮想ディスクファイル６１２の割り当てテーブルが、仮想ディスクパーサ４０４に仮想ディスクファイル６１０から読み出すよう指示すると、仮想ディスクパーサ４０４は、誤ったデータを返し、仮想ディスクファイル６００、６０６、６１０、６１２の組により記述されるゲストオペレーティングシステムを使用不可能にしてしまう。
【００３７】
例示的な実施形態では、固有識別子は、仮想ディスクファイルが生成されるとき、各仮想ディスクファイルに挿入され得る。子仮想ディスクファイルが生成されるとき、子の生成と同時にその親の固有識別子のコピーも、子に挿入され得る。したがって、仮想ディスクファイル６０４は、生成されたとき、固有識別子（固有識別子３）を与えられ、その親の固有識別子（固有識別子１）も仮想ディスクファイル６０４に挿入されている。
【００３８】
例示的な実施形態では、仮想ディスクパーサ４０４は、仮想ディスクファイルへの書き込みが仮想ディスク範囲及び／又は仮想ディスクのサイズを変更し得る場合に、仮想ディスクファイルの固有識別子を変更するよう構成され得る。例えば、異なるセクションに向けられる読み出し動作を生じる、ユーザペイロード、ディスク終端識別子又は割り当てテーブル内のエントリに対する変更は、仮想ディスクパーサ４０４に固有識別子を変更させる例である。仮想ディスクパーサ４０４は、仮想ディスクファイルのチェーンを開くとき、仮想ディスクファイルの親の固有識別子を子に格納された固有識別子と比較するよう構成され得る。差は、仮想ディスク範囲及び／又は仮想ディスクのサイズに影響を与える変更が親に対して行われたことを反映する。
【００３９】
図７を参照すると、仮想ディスクファイル４０２と仮想ディスク４０２を形成する１又は複数の仮想ディスクファイルとの間の関係を示す。本例では２つの仮想ディスクファイル（７００、７０２）が示されるが、この図示の例は限定ではなく、仮想ディスク４０２を達成するためにより多くの仮想ディスクファイルを用いることができる。図７に示すように、各仮想ディスクファイルは、メタデータ７０４、７０６を有し得る。仮想ディスクファイル７０２のメタデータ７０６は、固有識別子７０８として格納された固有識別子を有し得る。仮想ディスクファイル７００のメタデータ７０４は、親の固有ＩＤ７１０として格納された仮想ディスクファイル７０２の固有識別子のコピー、及び固有ＩＤ７１２として格納された自身の固有識別子を有し得る。例示的な実施形態では、親仮想ディスクファイル７０２が開かれ、書き込まれて仮想ディスク範囲のペイロード及び／又は仮想ディスクのサイズに変更が生じた場合、仮想ディスクパーサ４０４は、固有識別子７０８として格納された識別子を新しい固有識別子に変更する。その後、仮想ディスクパーサ４０４が親の固有識別子７１０として格納された識別子を固有識別子７０８として格納された識別子と比較する場合、二者は一致せず、仮想ディスク４０２は損傷した可能性があると決定され得る。
【００４０】
また、メタデータ７０６、７０４は、ディスク識別子（７１４、７１６）として格納された識別子を有し得る。これは、ページ＃８３要求等で仮想ディスク４０２の識別子としてゲストオペレーティングシステム４１２へ返される値であり得る。子仮想ディスクファイルが生成されるとき、親のディスク識別子として格納された値のコピーは子にもコピーされ、新しいディスク識別子が子に割り当てられ得る。ディスク識別子は、仮想ディスクを識別するためにゲストオペレーティングシステム４１２により用いられ、それを固有識別子と区別するために検討され得る。ディスク、シリンダ、ヘッド及びセクタ識別子に加え、従来の情報（ＣＨＳ情報７１８、７２０）もメタデータ７０６、７０４に格納され得る。ＣＨＳ情報は、シリンダ、ヘッド及びセクタ値の観点からＩＯを表現するＩＯジョブをオフセットとして表現されたＩＯジョブに変換するために用いることができる。
【００４１】
図７の総括を続けると、図示のように、仮想ディスク４０２は、Ｎ個の記憶範囲（Ｎは１より大きい整数である）を有し、この特定の例では、仮想ディスク４０２は１０個の範囲を有する。仮想ディスク４０２は、ゲストオペレーティングシステム４１２の異なるファイル及びデータのビットパターンを有するとして示される。これらのビットパターンは、仮想ディスク範囲内の異なるハッチングにより区別される。
【００４２】
仮想ディスク４０２は物理的記憶装置ではないので、仮想ディスク範囲のための基本ペイロードデータは、仮想ディスクファイル７０２、７００内の異なるセクション「により記述され」、つまり異なるセクションに格納され得る。割り当てテーブル４１６は、コンピュータシステム４００の動作中にランダムアクセスメモリに格納され、任意のセクションにある仮想ディスクファイル７０２内に存続し、複数のセクションに及び得る。要するに、各仮想ディスクファイルは、仮想ディスク範囲を仮想ディスクファイル７０２又は７００のセクションにリンク付けする情報を含む割り当てテーブル（図示しない）と関連付けられ得る。
【００４３】
各仮想ディスク範囲は、セクタビットマップと関連付けられ得る。例示的な構成では、仮想ディスク範囲のセクタビットマップは、仮想ディスク範囲を記述するために用いられる仮想ディスクファイルのセクションの始めに格納され得る。代替の構成では、図９を説明する段落で詳述するように、複数の仮想ディスク範囲のセクタビットマップは、集約され、合成セクタビットマップに格納される。セクタビットマップは、対応する仮想ディスク範囲内のセクタ毎に１バイトを有し得る。したがって、範囲が２メガバイトであり、各セクタが４キロバイトである場合、各仮想ディスク範囲は、５１２セクタを有し、各セクタビットマップは５１２バイトを有する。１は、セクタが子仮想ディスクファイル６００により記述されることを示し、０は、セクタが親のような別の仮想ディスクファイルにより記述されることを示す。
【００４４】
ディスクからのセクタビットマップへのアクセスは性能に悪影響を与え得るので、一実施形態では、仮想ディスクパーサ４０４は、正規化ビットマップを生成するよう構成され得る。正規化ビットマップは、完全に記述される仮想ディスク範囲毎に１バイトを有し得る。ビットは、仮想ディスク範囲の各セクタが存在する場合に１に、仮想ディスク範囲内のセクタが透過的である場合に０に設定され得る。したがって、仮想ディスクパーサ４０４は、先ず、セクタビットマップを調べる必要が有るか否かを決定するために、正規化ビットマップを調べ得る。正規化ビットマップ内のエントリが１である場合、セクタビットマップを調べる必要はない。
【００４５】
例えば、図８を参照すると、セクタビットマップが仮想ディスク範囲毎にどのように生成され、正規化ビットマップを生成するために用いられるかの特定の例を示す。図８は、４個のセクタビットマップテーブル８０２、８０４、８０６、８０８を示し、各セクタビットマップは仮想ディスク範囲内のセクタ毎に１ビットを有し得る。図８に示すセクタビットマップは、本願明細書に記載する技術を説明するために実寸ではなく、８ビットを有する（また、各仮想ディスク範囲は８個のセクタを有する）。正規化ビットマップ８１０、８１２は、完全に記述される各仮想ディスク範囲が１でマーク付けされることを示す。例えば、正規化ビットマップ８１０は、仮想ディスク範囲１及び仮想ディスク範囲２のための１ビットを有し、これらの仮想ディスク範囲が子仮想ディスクファイル６００により完全に記述されることを示す。
【００４６】
問題は、全ての仮想ディスクパーサが正規化ビットマップを使用するよう構成され、これらの正規化ビットマップが永続的ではない可能性があるという点にある。この制限を克服するために、例示的な実施形態では、仮想ディスクパーサ４０４は、仮想ディスクファイルに正規化ビットマップを格納するよう構成され得る。しかしながら、全ての仮想ディスクパーサがそれらを理解し又はそれらを使用せず、仮想ディスクパーサは仮想ディスクファイル４０６に格納された正規化ビットマップを示すビットパターンを上書きし、削除し又は無効にし得るので、仮想ディスクパーサ４０４は、それらを使用する前にそれらを認証するよう構成され得る。
【００４７】
例示的な実施形態では、これらの正規化ビットマップは、仮想ディスクパーサ４０４により持続され、仮想ディスクパーサ４０４は仮想ディスクをブートするときにそれらを認証するよう構成され得る。一実施形態では、各正規化ビットマップは、メタデータ７０４に格納され得る正規化ビットマップ識別子（ＮＢ  ＩＤ）、例えばランダム値、シーケンス番号、タイムスタンプ等を割り当てられ得る。図示のように、メタデータ７０４は、ＮＢ  ＩＤ８２０として格納された識別子、及びＮＢ  ＩＤ８２２として格納された識別子を有する。さらに、正規化ビットマップの状態が関連付けられたセクタビットマップを正確に記述する場合は、識別子のコピーも各正規化ビットマップと関連して格納され得る。例えば、正規化ビットマップ８１０はＮＢ  ＩＤ８１４として格納された識別子を有するとして示され、正規化ビットマップ８１２はＮＢ  ＩＤ８１６を有するとして示される。ＮＢ  ＩＤは個々の正規化ビットマップに格納されるとして図示されるが、このように格納される必要はない。むしろ、ＮＢ  ＩＤは、ＢＡＴ内のような仮想ディスクファイル７００内のどこにでも格納できる。
【００４８】
仮想ディスクパーサ４０４は、仮想ディスクファイルを開くとき、関連する正規化ビットマップが有効か否か及び使用可能か否かを決定するために、ＮＢ  ＩＤを用いることができる。このように、正規化ビットマップを使用するよう構成される仮想ディスクパーサは、正規化ビットマップが有効か否か、及び仮想ディスクファイルが正規化ビットマップを使用しない仮想ディスクパーサにより依然として使用可能か否かを決定できる。例えば、これら２つの識別子が一致するという事実は、正規化ビットマップが有効であり再生成する必要がなく使用可能であることを示す。
【００４９】
仮想ディスクパーサ４０４が仮想ディスクファイルを書き込み／変更モードで開いた後（又は最初の書き込みが検出されたとき）、仮想ディスクパーサ４０４は、メタデータに格納された識別子を新しい識別子に変更するよう構成され得る。例えば、仮想ディスクパーサ４０４は、シーケンス番号を増大し、記憶装置１０６の更新を示すＩＯジョブを発行して、識別子に対する変更が永続的になるようにし得る。正規化ビットマップがそれらが記述するセクタビットマップの状態を正確に反映する場合には、正規化ビットマップと関連付けて格納された識別子も、メタデータと一致するよう更新され得る。識別子が一致しない場合には、仮想ディスクパーサ４０４は、正規化ビットマップを再構築し得る。
【００５０】
図９を参照すると、例示的な実施形態では、仮想ディスクファイルの複数の仮想ディスク範囲のためのセクタビットマップは、集約され、合成セクタビットマップに格納され得る。例えば、合成セクタビットマップ９００は、仮想ディスクファイル７０２の仮想ディスク範囲０〜３のためのセクタビットマップを有し、合成セクタビットマップ９０２は仮想ディスクファイル７００の仮想ディスク範囲０〜３のためのセクタビットマップを有する。また、正規化ビットマップは、上述と同じ技術を用いて合成セクタビットマップのために生成され得る。正規化ビットマップを構築するために用いられるデータが集約される点が異なる。
【００５１】
例示的な実施形態では、合成セクタビットマップ９００、９０２は、仮想ディスク範囲のペイロードを格納するために用いられるセクションの先頭からセクタビットマップを除去するために用いられ得る。これは、ペイロードを基礎となる記憶装置のセクタサイズに揃えるという効果を有する。さらに、合成セクタビットマップ９００及び／又は９０２を形成するために用いられるセクタビットマップの数は、少なくとも基礎となる記憶装置により用いられるセクタサイズの倍数に等しくなるよう選択され得る。
【００５２】
図９の構成は、例示的であり実寸ではない。むしろ、図９は、仮想ディスク範囲のためのセクタビットマップを集約し、それらを合成セクタビットマップに格納する概念を説明するために用いられる。特定の例では、仮想ディスク範囲は２ＭＢの大きさであり、各セクタは４ＫＢであるとする。これは、各仮想ディスク範囲が５１２個のセクタを有し、仮想ディスク範囲のセクタビットマップが５１２バイトを有することを意味する。合成セクタビットマップが１メガバイトに渡るよう構成される例では、合成セクタビットマップは２０４８個の仮想ディスクファイル範囲を記述するために用いることができる。合成セクタビットマップのサイズは、基礎となる記憶装置及び仮想ディスク範囲に揃えられるよう選択され得る。
【００５３】
以下に、動作手順を示す一連のフローチャートを示す。理解を容易にするために、フローチャートは、最初のフローチャートが全体的な「対局」図により実装を表し、以降のフローチャートが破線で示される更なる追加及び／又は詳細を提供するよう構成される。さらに、当業者は、破線で示した動作手順が任意と考えられることを理解する。
【００５４】
図１０を参照すると、図４のコンピュータシステムのようなコンピュータシステムにより実行され得る動作手順を示す。動作１０００は動作手順を開始する。動作１００２は、コンピュータシステム４００が、仮想ディスクファイルを開くよう構成される回路を含むことを示す。ここで、該仮想ディスクファイルは、第１の固有識別子、及び仮想ディスク内のデータの少なくとも一部を形成する仮想ディスク範囲データを有する。例えば、図４を参照すると、コンピュータシステム４００は実行可能命令であり得る仮想ディスクパーサ４０４を有し得る。例示的な実施形態では、仮想ディスクパーサ４０４は、図１のプロセッサ１０２のようなプロセッサにより実行でき、仮想化システムファイルシステム４０８に仮想ディスクファイルを開く要求を発行し得る。特定の例では、要求は、別の仮想ディスクファイルの親である仮想ディスクファイル、例えば図６の仮想ディスクファイル６００、６０４、６０６又は６１０を開くためであり得る。ここで、ユーザは、仮想ディスクファイルに格納された情報の一部を変更するために該仮想ディスクファイルを開くことを決定しても良い。例えば、ユーザは、パッチを適用するために仮想マシンの仮想ディスクとして仮想ディスクファイルを開き、彼又は彼女は該仮想ディスクの内容に別の仮想ディスクファイルが依存していることを知らないと仮定する。別の特定の例では、ユーザは、ファイルの内容を閲覧するために、テキストファイルとして仮想ディスクファイルを開いても良い。図７を参照すると、特定の例では、仮想ディスクファイルは親の仮想ディスクファイル７０２であると仮定する。本例では、仮想ディスクパーサ４０４が親の仮想ディスクファイル７０２を開くとき、仮想ディスク範囲のペイロードデータ及びメタデータ７０４（固有識別子７０８として格納された第１の識別子を含む）が検出され得る。
【００５５】
図１０を参照すると、動作１００４は、コンピュータシステム４００により実行され得る動作を示す。特に、例示的な実施形態のコンピュータシステム４００は、仮想ディスク範囲データがどのようにインタープリットされるかに影響する情報を仮想ディスクファイルに書き込む試みを検出するのに応答して、仮想ディスクファイル内の第１の固有識別子を第２の固有識別子で上書きする。仮想ディスクファイルを開いた後、仮想ディスクパーサ４０４は、プロセッサ１０２により実行され、格納するペイロードに影響を与えるデータに行われた変更を検出し得る。仮想ディスクパーサ４０４は、ペイロードに影響を与える第１の変更を行うよう指示されるときを検出できるロジックを有し得る。また、変更が行われる前に、仮想ディスクパーサ４０４は、固有ＩＤ７０８として格納された第１の固有識別子を第２の固有識別子に変更する１又は複数のＩＯジョブを記憶装置１０６に発行し得る。
【００５６】
例えば、仮想ディスクは仮想ディスクファイルからインスタンス化され、ユーザは仮想ディスクをデフラグしようと試みると仮定する。仮想ディスクパーサ４０４は、第１の仮想ディスク範囲に格納されたデータを第２の仮想ディスク範囲に移動する１又は複数のＩＯジョブを受信し得る。このＩＯジョブの受信に応答して、仮想ディスクパーサ４０４は、割り当てテーブル内の関係を変更することを決定し得る。この変更は、第１の仮想ディスク範囲を記述するために用いられる仮想ディスクファイルのセクションを第２の仮想ディスク範囲を記述するよう変更する。仮想ディスクパーサ４０４は、例えばメモリ内のビットを調べ、仮想ディスク範囲が変更されていないことを示す、ビットが設定されていないという決定により開かれるので、自身が格納する仮想ディスク範囲データが変更されたか否かを決定し得る。この決定に応答して、仮想ディスクパーサ４０４は、ランダム値又はランダム英数字値を用いて第２の値を生成し、固有ＩＤ７０８として格納された第１の固有識別子を第２の固有識別子に変更する１又は複数のＩＯジョブを記憶装置１０６に発行し得る。
【００５７】
図１０に戻ると、動作１００６は、コンピュータシステム４００が、第２の固有識別子が仮想ディスクファイルの永続的コピーに書き込まれたと決定する回路を任意的に含み得ることを示す。文脈上、図４に戻ると、コンピュータシステム４００は、第２の固有識別子がディスクに永続的になったことを決定できる回路、例えばプロセッサ１０２で動作する仮想ディスクパーサ４０４を有し得る。例えば、前段落の例を続けると、仮想ディスクパーサ４０４は、１又は複数のＩＯジョブを記憶装置１０６に送信した後に、記憶装置１０６にフラッシュを発行し得る。記憶装置１０６は、永続的記憶ユニット４６０にキャッシュ４５４をフラッシュし得る。また、仮想ディスクファイル７０２のディスク上コピーに固有識別子として格納された識別子は、第２の固有識別子に更新され得る。この動作の結果として、仮想ディスクパーサ４０４は、仮想ディスクファイル７０２から構築された仮想ディスク及び別の仮想ディスクファイルが損傷している可能性があることを決定し得る。
【００５８】
図１０に戻ると、動作１００８は、コンピュータシステム４００が、第２の固有識別子が仮想ディスクファイルの永続的コピーに書き込まれたという決定に応答して、仮想ディスクファイルに対して情報を変更する回路を追加で有し得ることを示す。図４に戻ると、仮想ディスクパーサ４０４は、仮想ディスクファイル７０２のディスク上コピーに固有識別子７０８として格納された識別子が第２の固有識別子に更新されたと決定し、仮想ディスクファイル７０２に格納された情報を変更し得る。例えば、仮想ディスクパーサ４０４は、記憶装置１０６から肯定応答を受信することにより、フラッシュ動作が完了したと決定し得る。代替で、仮想ディスクパーサ４０４は、障害メッセージが受信されなかったので、フラッシュ動作が完了したと決定し得る。フラッシュが終了した後、仮想ディスクパーサ４０４は、仮想ディスクファイル７０２に変更を行い、変更を示す１又は複数のＩＯジョブを記憶装置１０６へ送信させ得る。
【００５９】
図１１を参照すると、図１０に示した動作と共に実行され得る代替動作を示す。図１１は、動作１１１０を示す。動作１１１０は、一実施形態では、第１の固有識別子を上書きするよう構成された回路が、追加で、仮想ディスク範囲のビットパターンへの書き込みの試みを検出するのに応答して、第１の固有識別子を上書きするよう構成され得ることを示す。例えば、図７に戻り、ユーザは親仮想ディスクファイル７０２から仮想ディスク４０２をインスタンス化し、仮想ディスク範囲のビットパターンに変更を生じるデータを変更すると仮定する。例えば、ユーザは、ファイルの内容を消去すると仮定する。仮想ディスクパーサ４０４は、仮想ディスク範囲に全て０を書き込む要求を示すＩＯジョブを受信し、これが、仮想ディスクファイル７０２が開かれて以来、仮想ディスクファイル７０２に対する最初の変更であると決定し得る。この決定に応答して、仮想ディスクパーサ４０４は、１又は複数のＩＯジョブを記憶装置１０６に発行し、固有識別子７０８として格納された第１の識別子を第２の固有識別子で上書きし得る。
【００６０】
図１１に戻ると、動作１１１２は、例示的な実施形態では、コンピュータシステム４００は、仮想ディスクファイルから得た第２の固有識別子が子仮想ディスクファイルに格納された固有識別子に等しくないという決定に応答して、仮想ディスクファイルをインスタンス化する要求を拒否するよう構成される回路を任意的に有し得ることを示す。例えば、図７に戻り、ユーザが仮想ディスクファイル７００及び仮想ディスクファイル７０２の両方から仮想ディスク４０２をインスタンス化しようと試みた後のあるときを仮定する。本例では、仮想ディスクパーサ４０４は、子仮想ディスクファイル７００を開き、親仮想ディスクファイル７０２へのパス、並びに親の固有識別子７１０として格納された識別子、本例では第１の固有識別子を決定し得る。次に、仮想ディスクパーサ４０４は、親仮想ディスクファイル７０２の位置を特定し、親仮想ディスクファイル７０２を開き、固有識別子７０８として格納された識別子、本例では第２の固有識別子の位置を特定し得る。仮想ディスクパーサ４０４は、第１の識別子が第２の識別子と等しくないと決定し得る。これは、親仮想ディスクファイル７０２が変更されたという事実を示す。そして、仮想ディスクパーサ４０４は、仮想ディスク４０２をインスタンス化する要求を拒否し得る。特定の例では、仮想ディスクパーサ４０４は、基本仮想ディスクファイルが有する変更が仮想ディスク４０２を無効にしたので、仮想ディスク４０２が損傷していることを示すテキストを含むダイアログボックスを表示させても良い。
【００６１】
図１１を参照すると、動作１１１４は、例示的な実施形態では、コンピュータシステム４００は、ユーザ入力に応答して、第２の固有識別子を第１の固有識別子に変更するよう構成された回路を有し得ることを示す。例えば、図７に戻り、ユーザは仮想ディスク４０２をインスタンス化しようと試みると仮定する。先行する段落で説明したように要求を拒否するのではなく、仮想ディスクパーサ４０４は、仮想ディスク４０２が損傷しているか否かに拘わらず、選択された場合に仮想ディスクパーサ４０４に仮想ディスク４０２をインスタンス化するよう試みるよう指示する選択肢を含むダイアログボックスを生じ得る。仮想ディスク４０２を開くのに成功した場合に、仮想ディスクパーサ４０４は、永続的固有識別子７１０として格納された識別子、つまり第１の固有識別子をコピーし、固有識別子７０８として格納された識別子、つまり第２の固有識別子を上書きし、修復動作が成功したことを示し得る。
【００６２】
図１１に戻ると、動作１１１６は、例示的な実施形態では、コンピュータシステム４００は、子仮想ディスクファイルにより完全に記述されるグループ内の仮想ディスク範囲を識別する情報と数値を関連付けるよう構成される回路、仮想ディスクファイル内のデータが変更されたという決定に応答して、子仮想ディスクファイル内の数値のコピーを第２の数値に更新するよう構成される回路、及び情報がグループ内の仮想ディスク範囲の状態を正確に反映するという決定に応答して、情報に関連付けられた数値を第２の数値に更新するよう構成される回路を有し得ることを示す。例えば、仮想ディスク４０２はインスタンス化され、仮想ディスクパーサ４０４はランダムアクセスメモリ内に正規化ビットマップをロードすると仮定する。正規化ビットマップは、正規化ビットマップ識別子、例えばランダムな数値、シーケンス番号等と関連付けられ得る。特定の例では、正規化ビットマップは図８の正規化ビットマップ８１０と同様である。図示のように、正規化ビットマップは、正規化ビットマップ識別子８１４として格納された識別子と関連付けられ得る。
【００６３】
仮想ディスクパーサ４０４は、例示的な実施形態では、仮想ディスクファイル７００内のデータ、例えばメタデータ及び／又はペイロードデータを変更する要求の受信に応答して、仮想ディスクファイル７００が変更されたか否かを決定するよう構成され得る。仮想ディスクパーサ４０４は、これが仮想ディスクファイル７００が開かれて以来、最初の変更であるかどうかを知るために、メモリ内の識別子を調べ得る。この構成では、変更が、仮想ディスクファイル７００が開かれて以来最初のものであるとき、仮想ディスクパーサ４０４は、変更を示す１又は複数のＩＯジョブを記憶装置１０６に発行させることにより、ＮＢ識別子８２０として格納された識別子を第２のＮＢ識別子に変更し得る。代替の構成では、仮想ディスクパーサ４０４は、仮想ディスクファイル７００が読み出し／変更モードで開かれると直ぐに、変更を示す１又は複数のＩＯジョブを記憶装置１０６に発行させることにより、ＮＢ識別子７２０として格納された識別子を第２のＮＢ識別子に変更し得る。この時点で、仮想ディスクファイル７００のディスク上コピーは、正規化ビットマップ値７２０及び正規化ビットマップ値８１４に対して異なる識別子を有し、次に仮想ディスクファイル７００が仮想ディスクパーサ４０４により開かれたとき仮想ディスクパーサ４０４がクラッシュした場合、数値は一致しない。これは、正規化ビットマップ８１０が、正規化ビットマップ８１０がカバーするセクタビットマップの内容を正確に反映しないことを示す。
【００６４】
仮想ディスクパーサ４０４が正規化ビットマップを維持するよう、例えば仮想ディスク範囲０〜４のセクタビットマップが完全に記述された状態に遷移するときに正規化ビットマップを更新するようプログラミングされる例では、仮想ディスクパーサ４０４は、正規化ビットマップ識別子８１４を、永続的正規化ビットマップ識別子８２０に等しくなるよう変更し、変更を永続的にするために記憶装置１０６にＩＯジョブを発行するよう構成され得る。以上に詳述したように、正規化ビットマップ８１０のメモリ内バージョンに対して行われる変更が永続的記憶ユニット４６０にコミットし成功することを保証するために、トランザクションログ又は特定の他のロギングメカニズムが用いられる例では、正規化ビットマップ識別子８１４として格納された識別子に対する変更は、仮想ディスクパーサ４０４が子仮想ディスクファイル７００を閉じるとき、又は変更が永続的正規化ビットマップ数値８２０に対して行われると直ぐに行われ得る。
【００６５】
図１１に戻ると、動作１１１８は、例示的な実施形態では、コンピュータシステム４００が、限定ではないが、仮想ディスクファイルのセクションに書き込まれた仮想ディスク範囲のグループのセクタビットマップにアクセスするよう構成される回路を有し得ることを示す。仮想ディスクファイルのセクタは、セクションが仮想ディスクファイルを格納するよう構成された記憶装置のセクタと揃えられるよう選択された仮想ディスクファイルオフセットを有する。例示的な実施形態では、ＩＯジョブは、仮想ディスクパーサ４０４により受信され得る。これは、仮想ディスクパーサ４０４に、合成セクタビットマップ９００を格納する仮想ディスクファイル７０２のセクションにアクセスさせる。本例では、合成セクタビットマップ９００は、仮想ディスクファイル７０２に書き込まれるので、記憶装置１０６の基礎的セクタサイズに揃えられる。このように揃えられることは、合成セクタビットマップ９００及び仮想ディスク範囲ペイロードが記憶装置１０６に揃えられ、したがってディスクに基づく記憶装置から読み出すときにトラック境界を跨る機会が減少するので、仮想ディスク４０２の全体性能を向上させる。
【００６６】
図１２を参照すると、動作１２００、１２０２、１２０４、１２０６、１２０８を含む動作手順を示す。動作１２００を参照すると、動作の開始を示す。動作１２０２は、コンピュータシステム４００の回路により実行され得る動作、つまり仮想ディスクをインスタンス化する動作を示す。ここで、該仮想ディスクは、第１の仮想ディスクファイルにより記述される仮想ディスク範囲のグループを有し、第１の仮想ディスクファイルは第１の識別子を有する。例えば、図４を参照し、ユーザ又は管理プログラムは仮想マシン４１０を起動すると仮定する。このような信号の受信に応答して、仮想化システム４２０は、仮想マシン４１０をインスタンス化する動作処理を開始し得る。処理の一部は、仮想ディスクパーサ４０４が、ゲストオペレーティングシステム４１２を形成するビットパターンを一緒に格納する仮想ディスクファイルを開く信号であり得る。仮想ディスクパーサ４０４は、例えば、子仮想ディスクファイル７００及び親仮想ディスクファイル７０２を開き、それらを用いて図７の仮想ディスク４０２をインスタンス化すると決定し得る。図８に示すように、仮想ディスクファイル７００は、正規化ビットマップ識別子８２０として格納された識別子を有するメタデータ８０４を有し得る。
【００６７】
図１２に戻ると、動作１２０４は、コンピュータシステム４００が、仮想ディスクファイルにより完全に記述されるグループ内の仮想ディスク範囲を識別する情報をランダムアクセスメモリ内にロードする回路を含むよう構成され得ることを示す。ここで、該情報は、第１の識別子のコピーに関連付けられる。次に、仮想ディスクパーサ４０４は、正規化ビットマップをランダムアクセスメモリ１０４内にロードし得る。代替で、情報は、テーブル、又は正規化ビットマップ以外のデータ構造に編成され得る。正規化ビットマップを用いる特定の例では、正規化ビットマップは、図８の正規化ビットマップ８１０と同様であり、仮想ディスク４０２の仮想ディスク範囲のグループが子仮想ディスクファイル７００により完全に記述されるか否かを示すために用いられ得る。実行時間中、正規化ビットマップが仮想ディスク範囲は完全に永続的である、つまり全てのセクタは仮想ディスクファイル７００により記述されると示す場合には、仮想ディスクパーサ４０４は、セクタビットマップを調べることなく、ペイロードを読み出し得る。本例では、ランダムアクセス１０４内にロードされた正規化ビットマップ８１０は、ＮＢ  ＩＤ８１４として格納されたＮＢ  ＩＤ８２０として格納された同じ識別子を有し得る。仮想ディスクパーサ４０４は、識別子を比較し、正規化ビットマップ８１０が有効であると決定し、正規化ビットマップが記述する各セクタビットマップを読み出すことにより正規化ビットマップを再生成する代わりに、それを用い得る。
【００６８】
動作１２０６を参照すると、コンピュータシステム４００が、第１の仮想ディスクファイルを開いた後に、第１の仮想ディスクファイル内の第１の識別子を第２の識別子に変更するよう構成される回路も含み得ることを示す。例えば、図８を参照すると、正規化ビットマップ８１０がメモリにロードされた後に、仮想ディスクパーサ４０４は、正規化ビットマップ識別子８２０として格納された識別子を第２の識別子に、例えば第２のランダムに生成された英数字値等に変更し得る。例示的な構成では、仮想ディスクパーサ４０４は、仮想ディスクファイル７００が変更されるとき、正規化ビットマップ識別子８２０として格納された識別子を変更するよう構成され得る。
【００６９】
図１２に戻ると、動作１２０８は、コンピュータシステム４００が、情報がグループ内の仮想ディスク範囲の状態を正確に反映するという決定に応答して、情報に関連付けられた第１の識別子のコピーを第２の識別子に更新する回路を有し得ることを示す。文脈上、図８を再び参照すると、仮想ディスクパーサ４０４は、正規化ビットマップ数値８１４として格納された識別子を変更し、変更を示す１又は複数のＩＯジョブを記憶装置１０６に発行させ及び永続的記憶ユニット４６０により持続されるよう構成され得る。正規化ビットマップ８１０がそれがカバーするセクタビットマップの状態を正確に反映するという決定がなされた場合、仮想ディスクパーサ４０４は、ＮＢ  ＩＤ８１４として格納される識別子を変更し、ＮＢ  ＩＤ８２０として格納される識別子と一致させるように構成され得る。
【００７０】
図１３を参照すると、図１２に示した動作と共に実行され得る追加動作を示す。動作１３１０に注意を向けると、コンピュータシステム４００が、第１の仮想ディスクファイル内の固有識別子が親仮想ディスクファイル内にある固有識別子と一致するという決定に応答して、仮想ディスクをインスタンス化する回路を追加で含み得ることを示す。例えば、文脈上、図７を参照すると、正規化ビットマップの識別子を更新する前に、仮想ディスクパーサ４０４は、親の固有ＩＤ７１０として格納された識別子が固有ＩＤ７０８として格納された識別子と一致すると決定することにより、仮想ディスクファイル７００と７０２との間のリンクは有効であると決定し得る。この決定に応答して、仮想ディスクパーサ４０４は、仮想ディスク４０２を達成し得る。また、識別子が一致するという事実は、子仮想ディスクファイル７００が生成されて以来、親仮想ディスクファイル７０２がそのペイロードデータに影響を与えるように変更されなかったという事実を示す。
【００７１】
図１３に戻ると、動作１３１２は、例示的な実施形態では、コンピュータシステム４００は、限定ではなく、第１の仮想ディスクファイル内の固有識別子が親仮想ディスクファイル内にある固有識別子と一致しないという決定に応答して、仮想ディスクファイルをインスタンス化する要求を拒否する回路を追加で有し得ることを示す。例えば、図７に戻り、ユーザが仮想ディスクファイル７００及び仮想ディスクファイル７０２の両方から仮想ディスク４０２をインスタンス化しようと試みた後のあるときを仮定する。本例では、仮想ディスクパーサ４０４は、子仮想ディスクファイル７００を開き、親仮想ディスクファイル７０２へのパス、並びに親の固有識別子７１０として格納された識別子、本例では第１の固有識別子を決定し得る。次に、仮想ディスクパーサ４０４は、親仮想ディスクファイル７０２の位置を特定し、親仮想ディスクファイル７０２を開き、固有識別子７０８として格納された識別子、本例では第２の固有識別子の位置を特定し得る。仮想ディスクパーサ４０４は、第１の識別子が第２の識別子と等しくないと決定し得る。これは、親仮想ディスクファイル７０２が変更されたという事実を示す。そして、仮想ディスクパーサ４０４は、仮想ディスク４０２をインスタンス化する要求を拒否し得る。特定の例では、仮想ディスクパーサ４０４は、基本仮想ディスクファイルが有する変更が仮想ディスク４０２を無効にしたので、仮想ディスク４０２が損傷していることを示すテキストを含むダイアログボックスを表示させても良い。
【００７２】
図１３に戻ると、動作１３１４は、コンピュータシステム４００が、グループ内の仮想ディスク範囲が変更されたという決定に応答して、第１の仮想ディスクファイル内の第１の識別子を第２の識別子に変更するよう構成される回路を追加で有し得ることを示す。例示的な実施形態では、仮想ディスク４０２がインスタンス化されるとき、仮想ディスクパーサ４０４は、仮想ディスクパーサが仮想ディスクファイル７００の内容を変更しようとする試みを検出すると、ＮＢ  ＩＤ８２０として格納された第１の識別子を第２の識別子に変更する要求を示すＩＯジョブを発行し得る。
【００７３】
図１３の説明を続けると、動作１３１６は、例示的な実施形態では、コンピュータシステム４００が、仮想ディスクファイルと閉じる処理中に、情報と関連付けられた第１の識別子のコピーを第２の識別子に変更する回路を有し得ることを示す。再び図８を参照すると、仮想ディスクパーサ４０４は、仮想ディスクファイル４０２を閉じるとき、正規化ビットマップ数値８１４として格納された数値を変更するよう構成され得る。仮想ディスクファイル７００を閉じる前に、仮想ディスクパーサ４０４は、第１の識別子を第２の識別子に変更する変更を、仮想ディスクファイル７００に書き込み得る。これは、また、ＮＢ  ＩＤ８１０として格納されたディスク上の第１の識別子を第２の識別子に変更するために、１又は複数のＩＯジョブを記憶装置１０６に発行させる。
【００７４】
図１３に戻ると、動作１３１８は、例示的な実施形態では、コンピュータシステム４００は、仮想ディスクファイルは変更されたという決定に応答して、情報に関連付けられた第１の識別子のコピーを第２の固有識別子に変更するよう構成された回路を有し得ることを示す。例えば、再び図８を参照すると、仮想ディスクパーサ４０４は、仮想ディスク４０２の実行時間中に、正規化ビットマップ識別子８１４として格納された識別子を、第１の識別子から第２の識別子に変更して、格納された識別子が正規化ビットマップ識別子８２０と一致するようにするよう構成され得る。本例では、トランザクションログ等は、仮想ディスクパーサ４０４が正規化ビットマップ８１０を、仮想ディスク範囲０〜４のセクタビットマップの状態を反映する状態に保持するために用いられ得る。
【００７５】
図１３に戻ると、動作１３２０は、コンピュータシステム４００が、仮想ディスクファイルのセクションに書き込まれた仮想ディスク範囲のグループのセクタビットマップにアクセスするよう構成される回路を有し得ることを示す。仮想ディスクファイルのセクションは、セクションが仮想ディスクファイルを格納するよう構成された記憶装置のセクタと揃えられるよう選択された仮想ディスクファイルオフセットを有する。例示的な実施形態では、ＩＯジョブは、仮想ディスクパーサ４０４により受信され得る。これは、仮想ディスクパーサ４０４に、合成セクタビットマップ９００を格納する仮想ディスクファイル６０２のセクションにアクセスさせる。本例では、合成セクタビットマップ９００は、仮想ディスクファイル７０２に書き込まれるので、記憶装置１０６の基礎的セクタサイズに揃えられる。このように揃えられることは、合成セクタビットマップ９００及び仮想ディスク範囲ペイロードが記憶装置１０６に揃えられ、したがってディスクに基づく記憶装置から読み出すときにトラック境界を跨る機会が減少するので、仮想ディスク４０２の全体性能を向上させる。
【００７６】
図１３に戻ると、動作１３２２は、コンピュータシステム４００が、親仮想ディスクファイルに基づく仮想ディスクの仮想ディスク範囲がどのようにインタープリットされるかに影響する親仮想ディスクファイル内の情報を変更しようとする試みを検出するよう構成される回路であって、親仮想ディスクファイルは第１のランダム値を有する、回路、親仮想ディスクファイル内の第１のランダム値を第２のランダム値で上書きする回路、仮想ディスクファイルをフラッシュする回路、フラッシュが完了したことを示す信号の受信に応答して親仮想ディスクファイル内の情報を変更するよう構成される回路、を任意的に有し得ることを示す。例えば、図７を参照すると、仮想ディスクパーサ４０４は、仮想ディスクファイル７０２に適用される場合、ＩＯジョブが仮想ディスク４０２がどのように公開されるかに影響するかを決定すると仮定する。例えば、仮想ディスクパーサ４０４は、仮想ディスクパーサ４０４に親仮想ディスクファイル７０２のペイロードデータを変更させる書き込み動作、仮想ディスク４０２の終わりを記述する情報を変更する書き込み動作、割り当てテーブルエントリを変更し、該変更が親仮想ディスクファイル７０２のどのセクションが仮想ディスク範囲を記述するために用いられるかを変更する書き込み動作、等を検出するよう構成され得る。このような書き込み動作の検出に応答して、仮想ディスクパーサ４０４は、固有識別子７０８として格納された第１のランダム値を第２のランダム値に変更し、フラッシュを発行し（フラッシュは、第２のランダム値を記憶装置１０６により永続的にさせる）、次に書き込み動作を仮想ディスクファイル７０２に適用するよう構成され得る。
【００７７】
図１３に戻ると、動作１３２４は、コンピュータシステム４００が、情報が第１の数値のコピーに関連付けられ、及び第１の仮想ディスクファイルが第２の数値を有するという決定に応答して、更新された情報を引き出すよう構成される回路を任意的に有し得ることを示す。例えば、図８を参照し、仮想ディスクパーサ４０４は、例えば子仮想ディスクファイル７００及び親仮想ディスクファイル７０２から仮想ディスク４０２をインスタンス化すると仮定する。本例では、仮想ディスクパーサ４０４は、主記憶及びメタデータ７０４に正規化ビットマップ８１０をロードし得る。仮想ディスクパーサ４０４は、正規化ビットマップ識別子８１４として格納された識別子を正規化ビットマップ識別子８２０として格納された識別子と比較し、２つの識別子が一致しない、つまり正規化ビットマップ８１０は仮想ディスク範囲０〜４のセクタビットマップの状態を反映していないと決定し得る。この決定に応答して、仮想ディスクパーサ４０４は、仮想ディスク範囲０〜４のセクタビットマップを読み出すことにより、正規化ビットマップ８１０の新しい情報を引き出すよう構成され得る。対応するセクタビットマップにより完全に定められる各仮想ディスク範囲について、つまり、対応するビットマップは全て１を有し、仮想ディスクパーサ４０４は正規化ビットマップ８１０に１を格納し得る。対応するセクタビットマップにより完全に定められない各仮想ディスク範囲について、仮想ディスクパーサ４０４は正規化ビットマップ８１０に０を格納し得る。正規化ビットマップ８１０が関連する仮想ディスク範囲を反映するために更新された後、仮想ディスクパーサ４０４は、仮想ディスク４０２の実行時間中に正規化ビットマップ８１０を使用できる。
【００７８】
図１４を参照すると、動作１４００、１４０２、１４０４、１４０６、１４０８及び１４１０を含む、コンピュータシステム４００により実行可能な動作手順を示す。動作１４００は動作手順を開始する。動作１４０２は、一実施形態では、コンピュータシステム４００が、親仮想ディスクファイルを開く回路を有するよう構成され得ることを示す。ここで、該親仮想ディスクファイルは子仮想ディスクファイルにリンク付けされ、親仮想ディスクファイルは第１の識別子を有し、子仮想ディスクファイルは第１の識別子のコピーを有する。例えば、図４を参照すると、コンピュータシステム４００は実行可能命令のモジュールであり得る仮想ディスクパーサ４０４を有し得る。例示的な実施形態では、仮想ディスクパーサ４０４は、図１のプロセッサ１０２のようなプロセッサにより実行でき、仮想化システムファイルシステム４０８に仮想ディスクファイルを開く要求を発行し得る。特定の例では、要求は、別の仮想ディスクファイル親である仮想ディスクファイル、例えば図６の仮想ディスクファイル６００、６０４、６０６又は６１０を開くためであり得る。ここで、ユーザは、格納された情報の一部を変更するために仮想ディスクファイルを開くことを決定しても良い。例えば、ユーザは、パッチを適用するために仮想マシンの仮想ディスクとして仮想ディスクファイルを開き、彼又は彼女は該仮想ディスクの内容に別の仮想ディスクファイルが依存していることを知らないと仮定する。
【００７９】
図１４に戻ると、動作１４０４は、コンピュータシステム４００が、仮想ディスク範囲を記述するデータを変更する試みの検出に応答して、仮想ディスクファイル内の第１の識別子を第２の識別子で上書きする回路を追加で有し得ることを示す。仮想ディスクファイルを開いた後、仮想ディスクパーサ４０４は、プロセッサ１０２により実行され、格納するペイロードに影響を与えるデータに変更が行われたことを検出し得る。
【００８０】
図１４に戻ると、動作１４０６は、コンピュータシステム４００が、親仮想ディスクファイルの永続的コピーを格納するよう構成される記憶装置に、第１の識別子を第２の識別子で上書きすることを示す入力／出力ジョブを発行する回路を追加で有する例を示す。仮想ディスクパーサ４０４は、仮想ディスク範囲のペイロードに影響を与える変更を行うよう指示されるときを検出できるロジックを有し得る。また、変更が行われる前に、仮想ディスクパーサ４０４は、固有ＩＤ７０８として格納された第１の固有識別子のディスク上コピーを第２の固有識別子に変更する１又は複数のＩＯジョブを記憶装置１０６に発行し得る。
【００８１】
図１４の動作１４０８を参照すると、一実施形態では、コンピュータシステム４００は、記憶装置にフラッシュコマンドを発行する回路を有し得る。例えば、再び図４を参照すると、第１の識別子を第２の識別子で上書きする要求を示すＩＯジョブの後に、仮想ディスクパーサ４０４は、記憶装置１０６にフラッシュコマンドを送信し得る。記憶装置１０６は、フラッシュコマンドを受信し、キャッシュ４５４の内容を永続的記憶ユニット４６０、例えばプラッタ又は１又は複数のフラッシュメモリセルに書き込み得る。そして、第２のランダム値は永続的であり得る。
【００８２】
図１４の動作１４１０は、コンピュータシステム４００が、記憶装置が内部キャッシュの内容を持続させることを示す信号の受信に応答して、仮想ディスク範囲を記述するデータを変更する回路を追加で有し得ることを示す。フラッシュコマンドが発行され、失敗メッセージが受信されない、又はフラッシュが成功したことを示す肯定応答が受信された後、仮想ディスクパーサ４０４は、仮想ディスク範囲を記述する親仮想ディスクファイルのセクションを変更し得る。これはまた、１又は複数のＩＯジョブを記憶装置１０６へ送信させ、変更を永続的にする。
【００８３】
図１５を参照すると、図１４に示した動作と共に実行され得る追加動作を示す。動作１５１２を参照すると、コンピュータシステムが仮想ディスクファイルの永続的コピー内の第２の識別子が子仮想ディスクファイルに格納された第１の識別子に一致しないという決定に応答して、仮想ディスクをインスタンス化する要求を拒否する回路を有するよう任意的に構成され得ることを示す。例えば、図７に戻り、ユーザが仮想ディスクファイル７０２及び仮想ディスクファイル７０２の両方から仮想ディスク４０２をインスタンス化しようと試みた後のあるときを仮定する。本例では、仮想ディスクパーサ４０４は、第１の識別子が第２の識別子と等しくないと決定し得る。これは、親仮想ディスクファイル７０２が変更されたという事実を示す。そして、仮想ディスクパーサ４０４は、仮想ディスク４０２をインスタンス化する要求を拒否し得る。特定の例では、仮想ディスクパーサ４０４は、基本仮想ディスクファイルが有する変更が仮想ディスク４０２を無効にしたので、仮想ディスク４０２が損傷していることを示すテキストを含むダイアログボックスを表示させても良い。
【００８４】
図１５の説明を続けると、動作１５１４は、コンピュータシステム４００は、ユーザ入力に応答して、固有識別子を前の値に変更する回路を含み得ることを示す。例えば、図７に戻り、ユーザは仮想ディスク４０２をインスタンス化しようと試みると仮定する。先行する段落で説明したように要求を拒否するのではなく、仮想ディスクパーサ４０４は、仮想ディスク４０２が損傷しているか否かに拘わらず、仮想ディスク４０２をインスタンス化しようと試みるよう仮想ディスクパーサ４０４に指示するダイアログボックスを表示させ得る。仮想ディスク４０２を開くのに成功した場合に、仮想ディスクパーサ４０４は、親の固有識別子７１０として格納された識別子、つまり第１の固有識別子をコピーし、固有識別子７０８として格納された識別子、つまり第２の固有識別子を上書きし、修復動作が成功したことを示し得る。
【００８５】
図１５の説明を続けると、動作１５１６は、コンピュータシステム４００が、仮想ディスクをインスタンス化する回路であって、仮想ディスクは親仮想ディスクファイルにより記述される仮想ディスク範囲を有し、仮想ディスク範囲は子仮想ディスクファイルにより記述され、子仮想ディスクファイルはシーケンス番号を有する、回路、子仮想ディスクファイルにより完全に記述される子仮想ディスクファイル内の仮想ディスク範囲のサブセットを識別する情報を、ランダムアクセスメモリにロードする回路であって、該情報はシーケンス番号のコピーと関連付けられる、回路、子仮想ディスクファイルが変更されたという決定に応答して、子仮想ディスクファイル内のシーケンス番号を増大する回路、情報が子仮想ディスクファイル内の仮想ディスク範囲のサブセットの状態を正確に反映するという決定に応答して、情報に関連付けられたシーケンス番号を増大する回路、を有し得ることを示す。例えば、仮想ディスク４０２はインスタンス化され、仮想ディスクパーサ４０４はランダムアクセスメモリ内に正規化ビットマップをロードする代替で、情報は、正規化ビットマップ以外のテーブルに編成され得る。正規化ビットマップは、正規化ビットマップ識別子、例えばランダムな数値、シーケンス番号等と関連付けられ得る。また、識別子は、正規化ビットマップがそれがカバーするセクタビットマップに対して正確であるときを示し得る。特定の例では、正規化ビットマップは図８の正規化ビットマップと同様である。図示のように、正規化ビットマップは、正規化ビットマップ識別子８１４として格納された識別子と関連付けられ得る。
【００８６】
仮想ディスクパーサ４０４は、例示的な実施形態では、仮想ディスクファイル７０２内のデータ、例えばメタデータ及び／又はペイロードデータを変更する要求の受信に応答して、仮想ディスクファイル７０２が変更されたか否かを決定するよう構成され得る。仮想ディスクパーサ４０４は、これが仮想ディスクファイル７０２が開かれて以来、最初の変更であるかどうかを知るために、メモリ内の識別子を調べ得る。この構成では、変更が、仮想ディスクファイル７０２が開かれて以来最初のものであるとき、仮想ディスクパーサ４０４は、変更を示す１又は複数のＩＯジョブを記憶装置１０６に発行させることにより、ＮＢ識別子８２０として格納された識別子を第２のＮＢ識別子に変更し得る。代替の構成では、仮想ディスクパーサ４０４は、仮想ディスクファイル７０２が読み出し／変更モードで開かれると直ぐに、変更を示す１又は複数のＩＯジョブを記憶装置１０６に発行させることにより、ＮＢ識別子８２０として格納された識別子を第２のＮＢ識別子に変更し得る。この時点で、仮想ディスクファイル７０２のディスク上バージョンは、正規化値８２０及び正規化ビットマップ値８１４に対して異なる識別子を有し、次に仮想ディスクファイル６０２が仮想ディスクパーサ４０４により開かれたとき仮想ディスクパーサ４０４がクラッシュした場合、数値は一致しない。これは、正規化ビットマップ８１０が、正規化ビットマップ８１０がカバーするセクタビットマップの内容を正確に反映しないことを示す。
【００８７】
仮想ディスクパーサ４０４が正規化ビットマップを維持するよう、例えば仮想ディスク範囲０〜４のセクタビットマップが完全に記述された状態に遷移するときに正規化ビットマップを更新するようプログラミングされる例では、仮想ディスクパーサ４０４は、正規化ビットマップ識別子８１４を、永続的正規化ビットマップ識別子８２０に等しくなるよう変更し、変更を永続的にするために記憶装置１０６にＩＯジョブを発行するよう構成され得る。以上に詳述したように、正規化ビットマップ８１０のメモリ内バージョンに対して行われる変更が永続的記憶ユニット４６０にコミットし成功することを保証するために、トランザクションログ又は特定の他のロギングメカニズムが用いられる例では、正規化ビットマップ識別子８１４として格納された識別子に対する変更は、仮想ディスクパーサ４０４が子仮想ディスクファイル７００を閉じるとき、又は変更が永続的正規化ビットマップ数値８２０に対して行われると直ぐに行われ得る。
【００８８】
図１５の説明を続けると、動作１５１８は、コンピュータシステム４００が、仮想ディスク範囲のグループのセクタビットマップを仮想ディスクファイルのセクションに書き込む回路であって、仮想ディスクファイルのセクションは、セクションが仮想ディスクファイルを格納するよう構成される記憶装置のセクタに揃えられるよう選択された仮想ディスクファイルオフセットを有する、回路を含み得ることを示す。例示的な実施形態では、ＩＯジョブは、仮想ディスクパーサ４０４により受信され得る。これは、仮想ディスクパーサ４０４に、合成セクタビットマップ９００を格納する仮想ディスクファイル６０２のセクションにアクセスさせる。本例では、合成セクタビットマップ９００は、仮想ディスクファイル７０２に書き込まれるので、記憶装置１０６の基礎的セクタサイズに揃えられる。このように揃えられることは、合成セクタビットマップ９００及び仮想ディスク範囲ペイロードが記憶装置１０６に揃えられ、したがってディスクに基づく記憶装置から読み出すときにトラック境界を跨る機会が減少するので、仮想ディスク４０２の全体性能を向上させる。
【００８９】
以上の詳細な説明では、例及び／又は動作図を介してシステム及び／又は処理の種々の実施形態を説明した。このようなブロック図、及び／又は例が１又は複数の機能及び／又は動作を含む限り、当業者は、このようなブロック図又は例に含まれる各機能及び／又は動作が、広範なハードウェア、ソフトウェア、ファームウェア又は実質的にこれらの如何なる組合せにより個々に及び／又は集合的に実施され得ることを理解する。
【００９０】
本願明細書に記載された本発明の主題の特定の態様が示され説明されたが、当業者は、本願明細書の教示に基づき、本願明細書に記載された主題およびその広範な態様から逸脱することなく変更及び修正が為されても良く、したがって添付の請求の範囲が、その範囲内に、そのような全ての変更及び修正を本願明細書に記載された主題の真の精神及び範囲内にあるものとして包含することを理解する。
【図１】
0005934344.tif 000002
【図２】
0005934344.tif 000003
【図３】
0005934344.tif 000004
【図４】
0005934344.tif 000005
【図５Ａ】
0005934344.tif 000006
【図５Ｂ】
0005934344.tif 000007
【図６】
0005934344.tif 000008
【図７】
0005934344.tif 000009
【図８】
0005934344.tif 000010
【図９】
0005934344.tif 000011
【図１０】
0005934344.tif 000012
【図１１】
0005934344.tif 000013
【図１２】
0005934344.tif 000014
【図１３】
0005934344.tif 000015
【図１４】
0005934344.tif 000016
【図１５】
0005934344.tif 000017