(19)【発行国】日本国特許庁(JP)
(12)【公報種別】特許公報(B2)
(11)【特許番号】5697609
(24)【登録日】2015年2月20日
(45)【発行日】2015年4月8日
(54)【発明の名称】仮想化により導入される待ち時間の管理
(51)【国際特許分類】
G06F 9/46 20060101AFI20150319BHJP
G06F 9/48 20060101ALI20150319BHJP
【FI】
G06F9/46 350
G06F9/46 452Z
【請求項の数】28
【全頁数】17
(21)【出願番号】特願2011-553042(P2011-553042)
(86)(22)【出願日】2010年3月2日
(65)【公表番号】特表2012-519910(P2012-519910A)
(43)【公表日】2012年8月30日
(86)【国際出願番号】US2010025928
(87)【国際公開番号】WO2010101922
(87)【国際公開日】20100910
【審査請求日】2012年1月16日
(31)【優先権主張番号】12/397,914
(32)【優先日】2009年3月4日
(33)【優先権主張国】US
(73)【特許権者】
【識別番号】510108504
【氏名又は名称】ヴイエムウェア インク
【氏名又は名称原語表記】VMware, Inc.
(74)【代理人】
【識別番号】100085372
【弁理士】
【氏名又は名称】須田 正義
(72)【発明者】
【氏名】スブラマニアム,プラタプ
(72)【発明者】
【氏名】バルツプルガー,カール,エー.
(72)【発明者】
【氏名】マリュギン,ヴャチェスラーフ
(72)【発明者】
【氏名】ガーフィンケル,タル
【審査官】
井上 宏一
(56)【参考文献】
【文献】
特開2003− 5987(JP,A)
【文献】
特開2003−167747(JP,A)
【文献】
特開平10−133910(JP,A)
【文献】
Nathan J. Williams著、塩崎拓也訳,NetBSDオペレーティングシステム上でのスケジューラアクティベーション実装,BSD magazine,日本,株式会社アスキー,2002年 9月13日,2002 No.13,PP.051-062
(58)【調査した分野】(Int.Cl.,DB名)
G06F 9/46 −9/54
(57)【特許請求の範囲】
【請求項1】
仮想計算機を支援するための仮想化論理を有するコンピュータにおいて実施される方法であって、
前記仮想化論理による長い待ち時間のエミュレーション要求をトリガーした命令を現在スケジュールされているゲストプロセスが実行したと前記仮想化論理が識別する段階と、
前記仮想化論理によって、前記ゲスト・オペレーティング・システムは前記現在スケジュールされているゲストプロセスのスケジュールを一時的に中止して、現在スケジュールが中止されているゲストプロセスと異なる少なくとも1つの別のゲストプロセスをスケジュールする段階と、
前記仮想化論理は、前記少なくとも1つの別のゲストプロセスの実行と並行して前記長い待ち時間のエミュレーション要求を実行する段階と、
前記仮想化論理は、前記長い待ち時間のエミュレーション要求の前記実行を完了することに応答して、前記ゲスト・オペレーティング・システムに前記スケジュールを中止されたゲストプロセスのスケジュールを変更させる段階と、
を含み、前記長い待ち時間のエミュレーション要求は、前記仮想化論理に、遅延を有する仮想化による動作を実行させ、前記動作はゲスト・オペレーティング・システムに可視ではない方法。
【請求項2】
前記ゲスト・オペレーティング・システムに前記現在スケジュールされているゲストプロセスのスケジュールを中止させ、少なくとも1つの別のゲストプロセスをスケジュールさせる段階が、前記現在スケジュールされているゲストプロセスにコードを加え、前記加えられたコードを実行し、前記ゲスト・オペレーティング・システムが現在スケジュールされているゲストプロセスのスケジュールを中止し、少なくとも1つの別のゲストプロセスをスケジュールさせる段階を含む請求項1に記載の方法。
【請求項3】
制御を前記加えられたコードへ転送するために、前記仮想化論理がアップコールを使用する段階を更に含む請求項2に記載の方法。
【請求項4】
前記現在スケジュールされているゲストプロセスにコードを加える段階が、前記仮想化論理がアップコールを実行するために使用できるメモリページを登録する段階を更に含む請求項2に記載の方法。
【請求項5】
前記ゲスト・オペレーティング・システムに仮想装置のためのデバイス・ドライバをロードさせる段階を更に含む請求項1に記載の方法。
【請求項6】
前記ゲスト・オペレーティング・システムに前記現在スケジュールされているゲストプロセスのスケジュールを中止させて、少なくとも1つの別のゲストプロセスをスケジュールさせる段階が、
前記現在スケジュールされているゲストプロセスにコードを加え、前記加えられたコードを実行し、前記現在スケジュールされているゲストプロセスは前記仮想装置と関連したドライバを呼び出すためにシステムコールを実行する段階と、
前記ドライバは、前記ゲスト・オペレーティング・システムに前記現在スケジュールされているゲストプロセスのスケジュールを中止させて、少なくとも1つの別のゲストプロセスをスケジュールさせる動作を実行する段階と、
を更に含む請求項5に記載の方法。
【請求項7】
前記ゲスト・オペレーティング・システムに前記現在スケジュールされているゲストプロセスのスケジュールを中止させ、少なくとも1つの別のゲストプロセスをスケジュールさせる段階が、
前記仮想化論理が仮想割り込みを前記仮想装置に通知する段階と、
前記仮想割り込みに応答して、前記仮想装置と関連したドライバが、前記ゲスト・オペレーティング・システムに前記現在スケジュールされているゲストプロセスのスケジュールを中止させて、少なくとも1つの別のゲストプロセスをスケジュールさせる動作を実行する段階と、
を更に含む請求項5に記載の方法。
【請求項8】
前記仮想割り込みに応答して、前記ドライバの一部が前記現在スケジュールされているプロセスの文脈において実行し、対応するプロセス識別子を保存する段階と、
前記ドライバの一部が前記プロセス識別子を使用して、前記ゲスト・オペレーティング・システムに前記現在スケジュールされているゲストプロセスのスケジュールを中止させ、少なくとも1つの別のゲストプロセスをスケジュールさせる動作を実行する段階と、
を更に含む請求項7に記載の方法。
【請求項9】
前記ゲスト・オペレーティング・システムに前記現在スケジュールされているゲストプロセスのスケジュールを中止させ、少なくとも1つの別のゲストプロセスをスケジュールさせる段階が、前記仮想装置と関連したドライバが、前記ゲスト・オペレーティング・システムに前記現在スケジュールされているゲストプロセスのスケジュールを中止させ、少なくとも1つの別のゲストプロセスをスケジュールさせる動作を実行する段階を更に含む請求項5に記載の方法。
【請求項10】
前記ドライバが、前記ゲスト・オペレーティング・システムに前記現在スケジュールされているゲストプロセスのスケジュールを中止させ、少なくとも1つの別のゲストプロセスをスケジュールさせる動作を実行させる段階が、前記ドライバが、前記現在スケジュールされているゲストプロセスを前記仮想装置上でブロックさせる段階を更に備える請求項9に記載の方法。
【請求項11】
前記仮想化論理が仮想割り込みを前記仮想装置に通知する段階と、
前記仮想割り込みに応答して、前記ドライバが前記現在スケジュールされているゲストプロセスを前記仮想装置上でブロックさせる前記段階を完了し、前記スケジュールを中止したプロセスが前記仮想装置上でもはやブロックしない段階と、
を更に含む請求項10に記載の方法。
【請求項12】
前記ゲスト・オペレーティング・システムに前記現在スケジュールされているゲストプロセスのスケジュールを中止させ、少なくとも1つの別のゲストプロセスをスケジュールさせる段階が、
前記現在スケジュールされているゲストプロセスにコードを加え、前記加えられたコードを実行し、前記現在スケジュールされているゲストプロセスは指定された期間停止する段階と、
前記指定された期間の後に、それに応答して前記仮想化論理が前記長い待ち時間のエミュレーション要求を実行する命令を現在スケジュールされているゲストプロセスが実行したと前記仮想化論理に判断させた前記命令を再実行する段階と、
を更に含む請求項1に記載の方法。
【請求項13】
前記命令を再実行した後に、前記仮想化論理が、前記長い待ち時間のエミュレーション要求の実行を完了しなかったと判断する段階と、
前記判断に応答して、前記仮想化論理は再び、現在スケジュールされているゲストプロセスに指定された期間の間停止させる段階と、
を更に含む請求項12に記載の方法。
【請求項14】
仮想計算機を支援するための仮想化論理を有するコンピュータにおいて実行可能な命令を備えるコンピュータ・プログラムを含むコンピュータ可読記憶媒体において、
前記仮想化論理による長い待ち時間のエミュレーション要求をトリガーした命令を現在スケジュールされているゲストプロセスが実行したと識別し、前記長い待ち時間のエミュレーション要求は、前記仮想化論理に、遅延を有する仮想化による動作を実行させ、前記動作はゲスト・オペレーティング・システムに可視でなく、
前記ゲスト・オペレーティング・システムに現在スケジュールされているゲストプロセスのスケジュールを一時的に中止させ、現在スケジュールが中止されているゲストプロセスと異なる少なくとも1つの別のゲストプロセスをスケジュールさせ、
前記少なくとも1つの別のゲストプロセスの前記実行と並行して前記長い待ち時間のエミュレーション要求を実行し、
前記長い待ち時間のエミュレーション要求の前記実行を完了することに応答して、前記ゲスト・オペレーティング・システムに前記スケジュールを中止したゲストプロセスのスケジュールを変更させるようプロセッサに命令するコンピュータ・プログラムを含むコンピュータ可読記憶媒体。
【請求項15】
前記ゲスト・オペレーティング・システムに現在スケジュールされているゲストプロセスのスケジュールを中止させ、少なくとも1つの別のゲストプロセスをスケジュールさせるよう前記プロセッサに命令する命令が、前記現在スケジュールされているゲストプロセスにコードを加えるよう命令することを更に備え、前記加えられたコードを実行し、前記ゲスト・オペレーティング・システムが現在スケジュールされているゲストプロセスのスケジュールを中止する請求項14に記載のコンピュータ可読記憶媒体。
【請求項16】
前記加えられたコードへ制御を転送するために、前記仮想化論理によって、アップコールを使用するよう前記命令が前記プロセッサに命令する請求項15に記載のコンピュータ可読記憶媒体。
【請求項17】
前記ゲスト・オペレーティング・システムに仮想装置のためのデバイス・ドライバをロードさせるための命令を更に備える請求項14に記載のコンピュータ可読記憶媒体。
【請求項18】
前記ゲスト・オペレーティング・システムに前記現在スケジュールされているゲストプロセスのスケジュールを中止させ、少なくとも1つの別のゲストプロセスをスケジュールさせることが、
前記現在スケジュールされているゲストプロセスにコードを加え、前記加えられたコードを実行し、前記現在スケジュールされているゲストプロセスは前記仮想装置と関連したドライバを呼び出すためにシステムコールを実行し、
前記ゲスト・オペレーティング・システムに前記現在スケジュールされているゲストプロセスのスケジュールを中止させ、少なくとも1つの別のゲストプロセスをスケジュールさせる動作を実行することと、
を更に備える請求項17に記載のコンピュータ可読記憶媒体。
【請求項19】
前記ゲスト・オペレーティング・システムに前記現在スケジュールされているゲストプロセスのスケジュールを中止させ、少なくとも1つの別のゲストプロセスをスケジュールさせることが、
仮想割り込みを前記仮想装置に通知することと、
前記仮想割り込みに応答して、前記仮想装置と関連したドライバが、前記ゲスト・オペレーティング・システムに前記現在スケジュールされているゲストプロセスのスケジュールを中止させ、少なくとも1つの別のゲストプロセスをスケジュールさせる動作を実行することと、
を更に備える請求項17に記載のコンピュータ可読記憶媒体。
【請求項20】
前記仮想割り込みに応答して、前記ドライバの一部に前記現在スケジュールされているプロセスの文脈において実行させ、対応するプロセス識別子を保存することと、
前記ドライバの一部に、前記プロセス識別子を使用して、前記ゲスト・オペレーティング・システムに前記現在スケジュールされているゲストプロセスのスケジュールを中止させ、少なくとも1つの別のゲストプロセスをスケジュールさせる動作を実行させることと、
を前記命令が更に前記プロセッサに命令する請求項19に記載のコンピュータ可読記憶媒体。
【請求項21】
前記ゲスト・オペレーティング・システムに前記現在スケジュールされているゲストプロセスのスケジュールを中止させ、少なくとも1つの別のゲストプロセスをスケジュールさせることが、前記仮想装置と関連したドライバに、前記ゲスト・オペレーティング・システムに前記現在スケジュールされているゲストプロセスのスケジュールを中止させ、少なくとも1つの別のゲストプロセスをスケジュールさせる動作を実行させることを更に備える請求項17に記載のコンピュータ可読記憶媒体。
【請求項22】
前記ドライバが、前記ゲスト・オペレーティング・システムに前記現在スケジュールされているゲストプロセスのスケジュールを中止させ、少なくとも1つの別のゲストプロセスをスケジュールさせる動作を実行することが、前記現在スケジュールされているゲストプロセスに前記仮想装置上でブロックさせることを更に備える請求項21に記載のコンピュータ可読記憶媒体。
【請求項23】
仮想割り込みを前記仮想装置に通知することと、
前記仮想割り込みに応答して、前記現在スケジュールされているゲストプロセスに前記仮想装置上でブロックさせる段階を完了し、前記スケジュールを中止したプロセスが前記仮想装置上でもはやブロックしないことと、
を更に備える請求項22に記載のコンピュータ可読記憶媒体。
【請求項24】
前記ゲスト・オペレーティング・システムに前記現在スケジュールされているゲストプロセスのスケジュールを中止させ、少なくとも1つの別のゲストプロセスをスケジュールさせることが、
前記現在スケジュールされているゲストプロセスにコードを加え、前記加えられたコードを実行し、前記現在スケジュールされているゲストプロセスは指定された期間停止し、
前記指定された期間の後に、前記仮想化論理に現在スケジュールされているゲストプロセスが前記仮想化論理が仮想化により生じた前記動作を実行するために応答する命令を実行したと判断させた前記命令を再実行することと、
を更に備える請求項14に記載のコンピュータ可読記憶媒体。
【請求項25】
前記命令が、
仮想化により生じた前記動作が完了しなかったと判断することと、
前記判断に応答して、再び現在スケジュールされているゲストプロセスを前記指定された期間停止させることと、
を前記プロセッサに更に命令する請求項24に記載のコンピュータ可読記憶媒体。
【請求項26】
仮想計算機を支援するための仮想化論理を有するコンピュータシステムであって、
前記仮想化論理による長い待ち時間のエミュレーション要求をトリガーした命令を現在スケジュールされているゲストプロセスが実行したと識別するための手段と、
前記ゲスト・オペレーティング・システムに現在スケジュールされているゲストプロセスのスケジュールを一時的に中止させ、現在スケジュールが中止されているゲストプロセスと異なる少なくとも1つの別のゲストプロセスをスケジュールさせるための手段と、
前記少なくとも1つの別のゲストプロセスの前記実行と並行して前記長い待ち時間のエミュレーション要求を実行するための手段と、
前記長い待ち時間のエミュレーション要求の前記実行を完了することに応答して、前記ゲスト・オペレーティング・システムに前記スケジュールを中止したゲストプロセスのスケジュールを変更させるための手段と、
を備え、前記長い待ち時間のエミュレーション要求は、前記仮想化論理に、遅延を有する仮想化による動作を実行させ、前記動作はゲスト・オペレーティング・システムに可視ではない、コンピュータシステム。
【請求項27】
前記ゲスト・オペレーティング・システムに前記現在スケジュールされているゲストプロセスのスケジュールを中止させ、少なくとも1つの別のゲストプロセスをスケジュールさせる動作を実行する前記仮想装置と関連した前記ドライバが、スケジュールを中止するために前記ゲストプロセスのスケジューリング優先順位を下げる段階を更に含む請求項9に記載の方法。
【請求項28】
スケジュールを変更するために前記ドライバが前記ゲストプロセスのスケジューリング優先順位を上げる段階を更に含む請求項27に記載の方法。
【発明の詳細な説明】
【技術分野】
【0001】
[001]本発明の1つ以上の実施形態は、一般に仮想コンピューティング、より詳細には仮想化により導入される待ち時間の管理に関する。
【背景技術】
【0002】
[002]仮想化技術は市場において一般的になっている。これらの技術の少なくともいくつかは、仮想ハードウェア抽象化をゲスト・オペレーティング・システムに提供し、それらがホストコンピュータ上の機能的に分離された環境の仮想計算機での実行を可能にする。仮想化によって、1つ以上の仮想(ゲスト)計算機が単一の物理的(ホスト)コンピュータで実行することが可能になり、機能的な及びパフォーマンス分離をプロセッサ、メモリ、記憶装置等に提供する。
【0003】
[003]コンピュータサイエンスの分野において周知のように、仮想計算機は、実際の物理的コンピュータシステムの抽象化―「仮想化」―である。
図1は、仮想化を実施するコンピュータシステム(コンピュータシステム700)の1つの可能性がある配置を示す。
図1に示すように、仮想計算機又は「ゲスト」200は「ホスト・プラットフォーム」又は単に「ホスト」にインストールされ、それはシステムハードウェア、即ち、ハードウェア・プラットフォーム100、及びシステム・レベルのソフトウェア、例えばオペレーティング・システム又は類似のカーネル、又は仮想計算機モニタ又はハイパーバイザ(下記参照)、又はこれらのいくつかの組合せから成る1つ以上の層又はコ・レジデント構成要素を含む。システムハードウェアは、通常、1つ以上のプロセッサ110、メモリ130、ある形の大容量記憶装置140、及びさまざまな他の装置170を含む。
【0004】
[004]各仮想計算機200は、通常、仮想システムハードウェア201及びゲスト・システム・ソフトウェア202の両方を有する。仮想システムハードウェアは、通常、少なくとも1つの仮想CPU、仮想メモリ230、少なくとも1つの仮想ディスク240、及び1つ以上の仮想装置270を含む。ディスク―仮想又は物理的―が「装置」でもあるが、ディスクの重要な役割のため、通常、別に考慮されることに注意されたい。仮想計算機の仮想ハードウェア構成要素の全てが、対応する物理的構成要素をエミュレートするために、公知の技術を使用してソフトウェア内で実施可能である。ゲスト・システム・ソフトウェアは、さまざまな仮想装置270のために必要に応じて、ゲスト・オペレーティング・システム(OS)220及びドライバ224を含む。
【0005】
[005]単一の仮想計算機200が複数の仮想化されたプロセッサで構成されることがあることに注意されたい。コンピュータシステムがより大きい数の並行スレッドにスケール変更できるようにするために、複数のCPUを備えるシステムが開発された。これらの対称的マルチプロセッサ(SMP)システムは、PCプラットフォームの拡張として、及び他のベンダーから利用できる。基本的に、SMPシステムは、複数のプロセッサを共有主メモリ及び共有入出力装置に接続するハードウェア・プラットフォームである。仮想計算機はSMP仮想計算機としても構成されていてもよい。
図1は、例えば、仮想計算機200内の複数の仮想プロセッサ210―0、210―1、...、210−m(VCPU0、VCPU1、...、VCPUm)を例示する。
【0006】
[006]更に別の構成は、いわゆる「マルチコア」ホスト・アーキテクチャで見つかり、そこにおいて複数の物理的CPUは、それ自体の機能ユニット(例えば、浮動小数点ユニット及び算術論理演算ユニットALU)のセットによって、単一チップに製造され、独立してスレッドを実行することが可能であり、マルチコア・プロセッサは、通常、非常に制約された資源、例えばいくつかのキャッシュのみを共有する。複数のスレッドの同時実行を提供する更に別の構成は「同時マルチスレッディング」と呼ばれ、そこでは複数の論理CPU(ハードウェア・スレッド)は単一チップで同時に動作するが、しかし、そこでは論理CPUはいくつかの資源、例えばキャッシュ、バッファ、機能ユニット等を柔軟に共有する。本発明の1つ以上の実施形態は、仮想計算機に含まれるプロセッサのタイプ−物理的及び/又は論理的−又は数に関係なく使用されてもよい。
【0007】
[007]多くの場合において、アプリケーションが少なくとも部分的に間接的に、即ちゲストOS220及び仮想プロセッサを介して実行している場合であっても、仮想計算機200上で実行するアプリケーション260は、「実際の」コンピュータで実行する場合のように機能する。実行可能ファイルは仮想ディスク240又は仮想メモリ230からゲストOSによってアクセスされ、それはその仮想計算機に割り当てられた実際の物理ディスク140又はメモリ130の部分である。一旦アプリケーションが仮想計算機内にインストールされると、丁度今あたかもファイルがアプリケーションの従来のインストールの結果として格納されたかのように、ゲストOSはファイルを仮想ディスクから検索する。仮想計算機の設計及び動作は、コンピュータサイエンスの分野では周知である。
【0008】
[008]或るインタフェースが、通常、仮想計算機内のゲスト・ソフトウェアと下にあるハードウェア・プラットフォーム内のさまざまなハードウェア構成要素及び装置内で必要とされる。このインタフェース(それは一般に「仮想化ソフトウェア」又は「仮想化論理」と呼ばれることがある)は、1つ以上のソフトウェア及び/又はハードウェア構成要素及び/又は層を含むことができ、おそらく、「仮想計算機モニタ」(VMM)、「ハイパーバイザ」、又は「仮想化カーネル」のように、仮想計算機技術の分野で知られているソフトウェア構成要素の1つ以上を含んでいてもよい。仮想化用語が時間と共に進化して、完全にはまだ標準化されていないので、これらの用語は、それらが照会するソフトウェア層と構成要素との間の明白な差異を必ずしも提供するわけではない。例えば、「ハイパーバイザ」という用語は、しばしば、VMM及びカーネルを一緒に、別々であるが協同している構成要素としてか、或いは1つ以上のVMMが完全に、又は部分的にカーネル自体に組み込まれて表すために用いられるが、しかしながら、「ハイパーバイザ」という用語は、それよりも、VMMだけの或る変形を意味するために用いられることがあり、それは仮想化を支援するために、いくつかの他のソフトウェア層又は構成要素とインタフェースする。その上、いくつかのシステムにおいて、ある仮想化コードが、他の仮想計算機の動作を容易にするために、少なくとも1つの「優れた」仮想計算機に含まれる。更にまた、仮想計算機の特定のソフトウェア支援をホストOS自体に含まれていてもよい。特に明記しない限り、本願明細書において記載されている本発明の1つ以上の実施形態は、仮想化論理のいかなるタイプ又は構成も有している仮想化されたコンピュータシステムにおいて使用されてもよい。
【0009】
[009]
図1は、仮想化ソフトウェアの他の構成要素からの分離実体として現れる仮想計算機モニタを示す。更にまた、本発明の1つ以上の実施形態を実施するために用いられるいくつかのソフトウェア構成要素は、すべての仮想計算機と下にあるハードウェア・プラットフォームとの間に論理的に位置する「仮想化層」及び/又はシステム・レベルのホスト・ソフトウェア内にあるとして示されて記載される。専用ハードウェアのこの層の少なくとも一部を実施することが可能であるけれども、この仮想化層は全体の仮想化ソフトウェアの一部と考えてもよい。例示の実施形態は、簡単及び明確のために、そして実例としてだけ与えられ、--上記したように、差異は必ずしも非常に明確でない。また、他に指示がない限り、又は説明から明らかでなければ、本発明の1つ以上の実施形態が、仮想化ソフトウェアの全体の構造内のどこでも、そして仮想化のための特定のハードウェア支援を提供するシステムにおいてさえも実施できると仮定される。
【0010】
[010]仮想計算機のさまざまな仮想化されたハードウェア構成要素、例えば、仮想CPU210―0、210―1、...、210−m、仮想メモリ230、仮想ディスク240、及び仮想装置270は、概念上の簡単のために仮想計算機200の一部であるとして示される。実際には、これらの「構成要素」は、通常、VMMに含まれるソフトウェア・エミュレーション330として実施される。
【0011】
[011]いろいろなシステムは様々な程度に仮想化を実施することができ−「仮想化」は一般に明快であるよりも一連の定義に関連があり、そして一方では速度と効率との間、他方では分離と一般性の間のトレードオフに関して設計選択をしばしば反映する。例えば、「全仮想化」は、いかなる形のソフトウェア構成要素も仮想化されないコンピュータで見つかるもの以外のゲストに含まれないシステムを意味するために用いられることがあり、従って、ゲストOSは、仮想化された環境における使用を支援するために特に含まれた構成要素を有さない、即納の市販のOSであってもよい。
【0012】
[012]対照的に、まだ普遍的に認められた定義を達成していない別の用語は、「パラ仮想化」のそれである。用語が意味するように、「パラ仮想化された」システムは「完全に」仮想化されず、むしろゲストは何らかの方法で、仮想化を容易にする特定の特徴を提供するように構成される。例えば、いくつかのパラ仮想化されたシステムのゲストは、例えば、特定の特権命令、特定のメモリ・アドレス範囲などを回避すること等によって、仮想化するのが難しい動作及び構成を回避するように設計されている。別の例として、多くのパラ仮想化されたシステムは、仮想化ソフトウェアの他の構成要素への明示的な呼び出しを可能にするゲスト内にインタフェースを含む。
【0013】
[013]ある場合、用語「パラ仮想化」は、ゲストOS(特に、そのカーネル)がこの種のインタフェースを支援するように特に設計されていることを意味する。この見解によれば、例えば、ゲストOSとしてマイクロソフト・ウインドウXP(商標)の市販バージョンを有することは、パラ仮想化の概念と整合していない。他は、情報を直接仮想化ソフトウェアの他の構成要素に提供することを特に目的とするコードを有するゲストOSも含むために、用語「パラ仮想化」をより大まかに定義する。この見解によれば、このようなゲストOSが仮想化されたコンピュータシステムを支援するように特に設計されていない即納の市販OSである場合であっても、他の仮想化構成要素と通信するように設計されているドライバのようなモジュールをロードすることはシステムをパラ仮想化する。他に示されるか明らかでない限り、本発明の実施形態は仮想化の特定の「程度」を有するシステムの使用にも制限されずに、完全又は部分的な(「パラ」)仮想化の特定の概念にも限られていないことになっている。
【0014】
[014]完全な仮想化と部分的な(パラ)仮想化との間の時々あいまいである差異に加え、中間システム・レベルソフトウェア層の2つの配列―「ホスト型」構成及び非ホスト型構成(それは
図1に示される)が一般に使用される。ホスト型の仮想化されたコンピュータシステムにおいて、既存の多目的オペレーティング・システムは、同時に又は時々VMMの要求により、特定の入出力(I/O)動作を実行するために用いる「ホスト」OSを形成する。
【0015】
[015]
図1に示したように、多くの場合、仮想計算機を支援するために特に構成されたソフトウェア層―カーネル600―のトップにVMMを配置することが有益であることがある。この構成はしばしば「非ホスト型」と呼ばれる。カーネル600はまた、いくつかのアーキテクチャにおいて、システムを起動し、仮想化ソフトウェアとの特定のユーザ相互作用を促進するために用いるコンソール・オペレーティング・システムだけでなく、別にスケジュール可能な、その上でランするその他のアプリケーションも処理する。
【0016】
[016]カーネル600がゲストOS220内にあるであろうカーネルと同じでない−周知のように、あらゆるオペレーティング・システムがそれ自体のカーネルを有することに注意されたい。
図1に示す構成が更に「非ホスト型」と一般に称される場合であっても、カーネル600は上記の通り仮想計算機/VMMの「ホスト」プラットフォームの一部であり、カーネルは、ホストの一部及び仮想化ソフトウェア又は「ハイパーバイザ」の一部の両方かもしれないことにも注意されたい。用語の違いは、仮想化の技術において、まだ進化している見通し及び定義のうちの1つである。
【発明の概要】
【発明が解決しようとする課題】
【0017】
[017]関連技術の当業者により理解されるように、仮想計算機200がランしている間に、ハイパーバイザ(又はVMM等)は、しばしば、ゲスト動作を適切に仮想化するために、些細でない量の仕事を実行する。ある場合には、ハイパーバイザが初期の動作を非同期で処理する間に、例えばゲストI/O動作、システムアーキテクチャ、及びデバイスモデルによって、ゲストが他の有用な作業を続けることができる。非同期動作が、例えば、仮想I/O完了割り込みを通知し、非仮想化されたシステム内のハードウェアの動作をエミュレートすることによって完了するときに、ハイパーバイザは通常ゲストOSに通知する。
【0018】
[018]ゲスト・オペレーティング・システムを含むオペレーティング・システムは、非同期技術を用いて公知のハイレイテンシー動作、例えば装置I/Oを許容するように通常は設計される。例えば、更なる実行(例えば、ファイルシステム・メタデータ書込み)の前に完了しなければならないディスクI/O要求を実行するプロセスは、I/Oが完了するまでスケジュールされず、他の無関係なプロセスがランすることを許容する。
【0019】
[019]仮想化は、ゲストOSによって検出可能であるか又は不可能である有意な遅延を導入することもできる。遅延を引き起こす仮想化ベースの動作がゲストOSに可視ではない場合があるので、これらの遅延はゲストOSにより予想されない場合がある。例えば、ハイパーバイザは、他のVMのためのメモリを使用可能にするために、ディスクにゲストの「物理的な」メモリのページをスワップアウトすることができる。ゲストプロセスが後でこの「物理的な」メモリにアクセスするときに、ハイパーバイザは、プロセスが実行を続けることができる前にディスクからその内容を復元しなければならない。既存のシステムにおいて、ハイパーバイザは、全てのVM、又は少なくともアクセスを実行したVCPUをスケジュールしない。スワップインが完了するまで、これはゲストが更に進行することを効果的にブロックする。
【0020】
[020]具体例をより詳細に提供するために、OSが仮想化されるときに、ゲストの物理ページ(GPPN)は、物理ホスト内のいくつかの実際の機械ページ(MPN)にマップされなければならない。ハイパーバイザがメモリ圧力の下にあるときに、それは通常はゲストからMPNを取り戻すことを必要とし、取り戻されたMPNは通常はいくつかの作業用セット・アルゴリズムに基づいて(又はランダムに)選択される。次に、ハイパーバイザはそのページをハイパーバイザレベルのスワップ装置にスワップし、MPNを、例えば、別のゲストによって使用可能にする。第1VMがそれからGPPNにアクセスすることがある場合、それはプロセッサ内のページ・フォールトを受けて、ハイパーバイザはコンテンツをスワップ装置から戻さなければならないだろう。このプロセスは非常に時間がかかることがある。より詳しくは、スワップ装置が通常はディスク・ドライブ等の機械装置であるので、典型的アクセス待ち時間は数ミリ秒であり、そこにおいて最新のCPUは数百万の命令を実行できる。残念なことに、ハイパーバイザ及びその動作がゲストに可視ではないので、ゲストはその間に前進することができない。これは、ゲストが待ち時間の間に別のプロセスをスケジュールすることができずにハイパーバイザが長い動作を実行する多くの状況のわずかに1つの実施例である。
【0021】
[021]ゲストが、ハイパーバイザがゲストに可視ではない仮想化タスクを実行している有用な作業を実行し続けることができることが望ましい。
【課題を解決するための手段】
【0022】
[022]仮想化論理は、現在スケジュールされているゲストプロセスが、仮想化論理がゲスト・オペレーティング・システムに可視ではない仮想化ベースの動作を実行するために応答する機能を実行したことを判断する。仮想化論理によって、ゲスト・オペレーティング・システムは現在スケジュールされているゲストプロセスのスケジュールを中止せず、少なくとも1つの別のゲストプロセス(それはゲストOSアイドルループであってもよく、必ずしもならないわけではない)をスケジュールする。仮想化論理はそれから、少なくとも1つの別のゲストプロセスの実行と並行して、仮想化ベースの動作を実行する。仮想化ベースの動作の実行を完了することに応答して、仮想化論理によって、ゲスト・オペレーティング・システムはスケジュールを中止したゲストプロセスのスケジュールを変更する(即ち、(1)仮想化論理はランの準備をしているプロセスをマークし、(2)ある後の時点で、ゲストOSは、すべてのラン可能なプロセスの中からプロセスを選択し、実際にそれを実行する)。
【0023】
[023]この概要及び以下の詳細な説明に記載されている特徴及び利点は全てを含むわけではなく、特に、多くの付加的な特徴及び利点が、図面、明細書、及びこの請求項を考慮して関連技術の当業者にとって明らかである。更に、本明細書において使用する用語が主に読みやすさ及び教育目的のために選択され、発明の主題を詳細に描写するか又は制限し、この種の発明の内容を決定するのに必要である請求項を用いるように選択されなかった点に留意する必要がある。
【図面の簡単な説明】
【0024】
【
図1】[024]従来技術の仮想化技術の実施例を示しているブロック図である。
【
図2】[025]本発明のいくつかの実施形態による、仮想化により導入される待ち時間の管理を例示しているブロック図である。
【
図3】[026]本発明の他の実施形態による、仮想化により導入される待ち時間の管理を例示しているブロック図である。
【
図4】[027]本発明の更に他の実施形態による、仮想化により導入される待ち時間の管理を例示しているブロック図である。
【発明を実施するための形態】
【0025】
[028]図は説明の目的のみに本発明の実施形態を示す。当業者は、以下の説明から、本願明細書において例示される構成及び方法の別の実施形態が本願明細書において記載されている本発明の原理を逸脱しない範囲で使用できることが容易に分かるだろう。
【0026】
[029]
図2は、本発明のいくつかの実施形態による、ハイパーバイザ201(又はVMM等)が仮想化により導入される待ち時間を管理するシステム200を例示する。各種の構成要素が個体として
図2に示されているけれども、各図示の構成要素は、ソフトウェア、ハードウェア、ファームウェア、又はこれらのいかなる組合せとしても実施可能な機能の一群を表すことを理解すべきである。構成要素がソフトウェアとして実行される場合、それはスタンドアロン・プログラムとして実行できるが、例えば、より大きいプログラムの一部として、複数の別々のプログラムとして、カーネル・ロード可能なモジュールとして、1つ以上のデバイス・ドライバとして、あるいは1つ以上の静的又は動的に連係されたライブラリとして、他の方法で実行できる。
【0027】
[030]
図2に示される実施形態において、ハイパーバイザ201は現在スケジュールされているゲストプロセス260にコード203を注入するためにアップコール技法を使用し、それにより、注入されたコード203がゲストプロセス260文脈において実行されるときに、そのゲストプロセス260はブロックし、ゲスト・オペレーティング・システム220に別のプロセス260をスケジュールさせる。ゲストプロセス260にコード203を注入するためにアップコール技法を使用する実施機構は、2008年10月30日に出願された、現在出願番号第12/261,623号が付されている、「透過なVMM支援ユーザモード実行制御転送」というタイトルの同一出願人による特許出願に詳述されていて、それはその内容全体を参照によって本願明細書に引用したものとする。引用された出願で詳細に説明されているように、このアップコールベースの方法は、例えば、ハイパーバイザ201がアップコールを実行するために使用できるメモリの1つ以上のページを登録しているゲストによって、又は既存のゲストコードページを修正しているハイパーバイザ201によって、ゲスト文脈へのコード203の注入を必要とする。
【0028】
[031]一実施形態において、ハイパーバイザ201によって、ゲスト・オペレーティング・システム220は、例えばブート時間に、仮想装置205(例えば、周辺構成要素相互接続(PCI)装置)をロードする。ハイパーバイザ201がゲストOS220が読取るBIOSの動作を制御するので、それはゲストOS220にこの種のロード動作を実行させることが可能である。仮想装置205用のドライバ207は、装置205を開く少量のコード(例えば、ページ)のみを含み、単純なブロッキング動作(例えば、装置205から1バイトを読取る)を実行して、ブロッキング動作から戻ると、呼び出し側に制御を戻す。もちろん、書込み、アイオクトル(ioctl)等の、いかなるブロッキング動作も読取りの代わりに使用できる。
【0029】
[032]現在スケジュールされているゲストプロセス260がハイパーバイザ201内の長い待ち時間のエミュレーション活動をトリガーするときに、上記の通りに、ハイパーバイザ201はゲストプロセス260にアップコールを実行する。アップコールは、ドライバ207を呼び出すゲストコード203(例えば、特別な事前に配列されたゲストページから)を実行する。より詳しくは、プロセス260は、それに渡されるファイル記述子に基づいて装置205に向けられるシステムコール(例えば、リナックス(登録商標)「読取り」又は「アイオクトル」)を実行できる。システムコールは制御をゲストOS220へ転送し、それは要求されたブロッキング動作を実行するためにドライバ207内のコードを呼び出す。このように、ドライバ207は、実質的に、現在スケジュールされているゲストプロセス260によって呼び出される。上述の通り、ドライバ207は仮想装置205をオープンし、例えば、それから1バイトを読取る。この読取りはブロッキング動作であり、読取り要求が満たされるまで、それはゲストOS220にプロセス260のスケジュールを中止させる。換言すれば、現在スケジュールされているゲストプロセス260はブロックし、単にスケジュールされているままであるよりはむしろ、ハイパーバイザ201がその長い待ち時間タスクを実行する間に有用な作業を実行しない。ゲストプロセス260がブロックするので、ゲストOS220は有用な作業を実行するために別のプロセスを自動的にスケジュールする。並行して、ハイパーバイザ201は初期の高い待ち時間エミュレーション要求を満たし続ける。本特許における説明は、「プロセス」がスケジュールされる、スケジュールを中止するなどに関して行われる。しかしながら、当業者は、本発明が「スレッド」、「タスク」、「ジョブ」、「文脈」、「スケジュール可能な実体」、及び使用可能な他の類似の用語に関してもあてはまることを理解するだろう。従って、用語「プロセス」は通常、その用語が本願明細書において使われるように、OS又は他のシステム・レベルのソフトウェアによって、「スケジュールされた」いかなる実体として本願明細書において広く解釈されなければならない。
【0030】
[033]ハイパーバイザがなされて高い待ち時間動作を実行しているときに、それは、例えば、装置205がブート時間にゲストと共に登録されたときに事前に決定されたIRQ番号を用いて、ゲスト装置205に仮想割り込みを発する。割り込みに応答して、ドライバ207は、読取られた呼び出しを「完了し」、呼び出しプロセス260に制御を戻す。これによって、ブロックされたゲストプロセス260はスリープを解除し、実行を再開する。
【0031】
[034]最適化として、第1アップコールは仮想装置205を開き/読取ることができ、装置205を開いたままにする。このようにして、次のアップコールは単に装置205を再開せずに読取ることができる。この場合には、仮想装置205のためのファイル記述子はプロセス出口で自動的に閉じる。別の実施形態では、セマフォベースの技法がブロッキング動作の使用の代わりに実施される。セマフォベースの技法は下記の
図4に関連してより詳細に説明される。一実施形態において、ドライバ207によって、プロセス260は、ゲストOS220内でそのスケジューリング優先順位を下げることによって、スケジュールを中止される。同様に、ドライバ207は、ゲストOS220にそれのスケジュールを変更させる待ち時間を減らすためにプロセス260のスケジューリング優先順位を上げる(即ち、それを実行可能であるとマークすることと、ゲストOSスケジューラに実行のためにそれを実際に選択させることとの間の時間を減らす)。
【0032】
[035]ここで
図3に戻ると、特別な装置205を利用しない他の実施形態が例示されている。
図2に示される実施形態と同様に、現在スケジュールされているゲストプロセス260がハイパーバイザ201内の長い待ち時間エミュレーション活動をトリガーするときに、ハイパーバイザ201はゲストプロセス260にアップコールを実行する。しかしながら、
図3に示したように、本実施形態において、アップコールは、指定された期間にスリープ動作を実行するコード203を実行するだけであり(例えば、リナックス(登録商標)の下でnanosleep()システム・コールを呼び出すことによって)、次に呼び出し側に戻る。スリープしようとしている現在スケジュールされているゲストプロセス260によって、指定された時間が経過するまで、ゲストOS220はそのプロセス260のスケジュールを中止し、別のものをスケジュールする。その時、ゲストOS220はスリーピングプロセス260のスリープを解除し、それは、スリープ解除すると、初期の長い待ち時間仮想化動作を生じた命令を再実行する。ハイパーバイザ201がその動作をまだ完了しなかった場合は、それはプロセス260をスリープに戻すためにアップコールを再び利用する。ゲストプロセス260のスリープ解除の後、仮想化動作が完了するまで、同じシーケンスが繰り返される。各繰り返しの間、ゲストOS220はスリーピングプロセス260以外の何かをスケジュールし、ハイパーバイザ201が長い待ち時間仮想化動作を実行している間に、有用な作業がゲストレベルで実行可能である。別の実施形態では、スリーピングプロセス260をスリープ解除させるよりはむしろ、ハイパーバイザ201は高い待ち時間動作が完了したスリープループ内のコードに指示する(例えば、フラグをプロセスに可視であるように設定することによって、又はアップコール・コード・ページのコードを変えることによって)。場合によっては、例えば、高い待ち時間動作に副作用がある場合、再実行は可能ではないかもしれないことに注意されたい。この場合には、コードはフラグを点検して、実行を続けるべきであるか又は他の繰り返しのためにスリープするべきかどうか決めることができる。
【0033】
[036]上記のサイクルが、ゲストプロセス260をスリープさせるために選択される時間、及びそれがハイパーバイザ201がそのタスクを完了するためにかかる時間に依存して、複数回繰り返されることがあることに注意されたい。加えて、スリープ時間がそれがハイパーバイザがその作業を完了するためにかかる時間にどれだけ密接にマッチしているかに依存して、ハイパーバイザ201の仮想化動作が完了した後、プロセス260はしばらくの間スリープしたままであってもよい。いくつかの実施形態では、デフォルト期間が使われ、その場合、使用する特定のデフォルト値は可変的な設計パラメータである。いくつかの実施形態では、ハイパーバイザ201は、それがその仮想化動作を実行するために必要とする時間の長さの評価に基づいたパラメータを有するスリープコマンドを出すことができる。評価がより正確であるほど、関連するポーリング動作の計算費用はより低い。それらの状況の下で、プロセス260がスリープ解除した後にしばらくの間ゲストラン待ち行列に留まる可能性があるので、ゲストOS220が重いCPU負荷の下にある場合、反復ポーリングのコストが低下できる点にも注意されたい。
【0034】
[037]
図2に関連して説明されている方法によって、ハイパーバイザ201は、仮想装置205及び割り込みベースの通知を使用して、ゲストプロセス260依存を非常に明確に表す。例えば、遅延が長いか予測不可能であると思われるとき、これはよく機能する。この割り込みベースのシナリオの負の側面は、それが少しヘビーウエイトであるということであり、仮想装置205はゲストOS220にインストールされ、ブロックされたゲストプロセス260が再開する前に、完全な仮想割り込み経路は実行されることを必要とする。割り込み経路自体の実行は計算的に高価な場合がある。対照的に、
図3に関連して説明されているシナリオは明確な依存を表さずに、その代わりにポーリング・ベースの技術を使用する。このポーリング方法は、仮想装置205の使用と関連するオーバーヘッドを有さずに、割り込む。しかしながら、それは割り込みベースの方法と同じ時間的管理のレベルを提供しないので、例えば、遅延が短いか又は予測可能である場合には適切である。これらの2つの方法は両方共、いろいろな状況の下で有用である。
【0035】
[038]
図4は他の実施形態を例示する。
図4に示すように、ハイパーバイザ201は、2つのIRQと共に、一般的なドライバ401をゲストOS220にインストールすることができる。現在実行中のゲストプロセス260が高い待ち時間動作を開始するときに、ハイパーバイザ201は第1IRQをゲストに出し、それはドライバ401によってインターセプトされる。関連技術の当業者により理解されるように、ゲストのIRQハンドラは割り込み時に現在実行中であったゲストプロセス260の文脈において実行する。換言すれば、標準割り込み処理に従って、これらの状況の下で、スケジュールを変更する事象がIRQ送出経路に沿ってはない。関連技術の当業者に知られているように、一般的なドライバ401の「上半分」403は割り込みされたゲストプロセス260の文脈を実行し、実行制御をゲストOS220に引き渡す前に、そのプロセス260の識別子(ID)405をセーブし、それは、割り込みされたプロセス260に制御を戻す前に、(ゲスト)OS空間のドライバ401の「下半分」407を実行する。
【0036】
[039]下半分407は、ゲストOS220に割り込みされたプロセス260にスケジュールを中止させる措置をとる。一実施形態において、下半分407は、実行可能であることからセマフォ409上で待つことにゲストプロセス260の状態を変え、そこにおいてセマフォ409はドライバ401の広域変数である。別の実施形態では、
図2に関連して上述したように、下半分は、ブロッキング動作がプロセス260の空間において実行されることによって、ゲストプロセス260とドライバ401に関連した仮想装置411との間の明確な依存関係を確立する。どちらにしても、上半分403がプロセスID405を格納していたので、それがその文脈で実行していない場合であっても、下半分407はゲストプロセス260の一致を知っていることを理解すべきである。セマフォ409ベースのシナリオ及びブロッキングシナリオの両方において、ドライバ401の下半分407の動作によって、ゲストOS220は割り込みされたプロセス260のスケジュールを中止し、有用な作業をするために他のものをスケジュールする。セマフォ409が同期のために使用可能なデータ構造のわずかに1つの実施例であることを理解すべきである。
【0037】
[040]ハイパーバイザ201が後でその動作を完了するときに、それは別のIRQを出し、IRQハンドラ(又は下半分407)は関連したゲストプロセス260を再開させるために適切な措置をとる。セマフォ409ベースの方法において、セマフォ409は効果的に信号を送られ、それは機能を停止したプロセス260のスリープを解除する。ブロッキング実施形態において、ブロックされたプロセス260と仮想装置411との間の明確な依存は終わり、ゲストOS220にプロセス260のスケジュールを変更させる。
【0038】
[041]一実施形態において、2つのIRQ方式は、仮想装置401の状態レジスタを用いて単一IRQに最適化される。別の実施形態では、「しばらくスリープ(sleep for a while)」セマンティックが、純粋にIRQベースの方法の代わりに使われ、それは所定の短時間の後に機能を停止したプロセス260のスリープを解除する。「上半分、下半分」装置アーキテクチャは、リナックス(登録商標)及びウインドウ(商標)のようなオペレーティング・システム特有であると更に理解される。他のオペレーティング・システム・アーキテクチャの下で、類似の技法は、ドライバ401から割り込みされたプロセス260へ制御を戻す前に、同じブロッキング及び/又はセマフォ409ベースの機能を提供するために利用でき、それによりゲストOS220は別のプロセス260をスケジュールする。
【0039】
[042]上記の実施形態はかなり一般的であり、いかなる任意のプロセス260のゲストOS内での実行をストールするために、ハイパーバイザ201により使用可能である。関連技術の当業者により理解されるように、ハイパーバイザ201が特定の感知可能な段階でプロセス260を止めた場合には、それはゲスト内での実行課題を引き起こす可能性がある。例えば、カーネル・スレッドを中断することは、良くない面倒な問題を引き起こすことがある。一般に、上記の実施形態は、いかなるユーザ・モード・プロセス260もストールすることに適している(即ち、ゲストOS220は、いかなる点でもユーザ・モード・プロセス260を先取りすることができる)。しかしながら、さまざまな実施形態によれば、カーネルがスピンロックを保持しているか、又はある割り込み不可能な危険地域を実行していることがあるので、ハイパーバイザ201は通常はアップコールをゲスト・カーネルモード・コードにしない。ハイパーバイザ201がアップコールをゲスト・カーネルモード・コードにする場合に、それは、この種の課題を考慮するために、オペレーティング・システム・インターナル及び割り込み処理の分野の当業者に公知の特別な処理技術を使用する。
【0040】
[043]前記説明が「ハイパーバイザ」201という用語を全体を通して使用するが、しかし、上記の如く、用語ハイパーバイザ201はVMMのような他の用語によって、いわば取り換えられて使用でき、いずれの種類の仮想化構成要素の使用も本発明の範囲内であることを理解すべきである。更にまた、本発明のさまざまな実施形態は、上の背景セクションで述べたさまざまな仮想化シナリオの下で実施可能である。本発明の実施形態はマルチコア・アーキテクチャのコンテンツに非常に有用でありえて、それによりハイパーバイザ201は1つのコアでその長い待ち時間動作を実行することができ、その一方でゲストOS220は別のプロセス260をスケジュールし、別のコアにおいて並行して実行する点に留意する必要がある。
【0041】
[044]当業者により理解されるように、本発明はその精神又は基本的な特徴を逸脱しない範囲で他の特定の形で実施可能である。同様に、部分、モジュール、エージェント、管理者、構成要素、機能、手順、動作、層、特徴、属性、技法、及び他の態様についての特定の名前付け及び区分は必須又は重要でなく、本発明を実施する機構又はその特徴は異なる名前、区分、及び/又はフォーマットを有していてもよい。更に、関連技術の当業者にとって明らかであるように、本発明の部分、モジュール、エージェント、管理者、構成要素、機能、手順、動作、層、特徴、属性、技法、及び他の態様は、ソフトウェア、ハードウェア、ファームウェア、又は3つのいかなる組合せとしても実施可能である。もちろん、本発明の構成要素がソフトウェアとして実施される場合はいつでも、構成要素は、スクリプトとして、スタンドアロン・プログラムとして、より大きいプログラムの一部として、複数の個別スクリプト及び/又はプログラムとして、静的又は動的に連係されたライブラリとして、カーネル・ロード可能なモジュールとして、デバイス・ドライバとして、及び/又はコンピュータ・プログラミングの当業者に現在又は将来周知のあらゆるその他の方法で実施可能である。加えて、本発明は、いかなる特定のプログラミング言語の実施にも、或いはいかなる特定のオペレーティング・システム又は環境のためにも決して制限されていない。更にまた、本発明がソフトウェアで全体的に或いは部分的に実施される場合に、そのソフトウェア構成要素がコンピュータ・プログラム製品としてコンピュータ可読の媒体に格納可能なことは、関連技術の当業者にとって容易に明らかである。磁気又は光学記憶媒体のような、コンピュータ可読の媒体のいかなる形も、この文脈で使用可能である。従って、本発明の開示は、以下の特許請求の範囲に記載される本発明の範囲について例証を示すが、制限することを目的としない。