以下、本発明の一実施形態を添付図面に基づいて説明する。
図1は、第1の実施形態を示し、本発明を適用する仮想計算機システムのブロック図である。物理サーバ(物理計算機)101は、仮想化支援機能を備えて演算処理を実行する物理CPU(プロセッサ)104と、データやプログラムを格納するメモリ105と、物理サーバ101の外部の装置とデータの送受信を行うためのI/O装置106と、を含んで構成される。なお、I/O装置106は、ネットワークインターフェースやホストバスアダプタ等で構成される。また、物理CPU104は、複数のCPUで構成しても良いし、複数の演算コアを備えたCPUで構成しても良い。また、物理CPU104の仮想化支援機能(VMX:Virtual Machine Extensions)は、上述のVT−x(Virtualization Technology for IA−32 Processors)またはAMD−V(AMD Virtualization technology)あるいはVT−i(Virtualization Technology for Itanium architecture processors)を含むものである。なお、仮想化支援機能を利用する動作モードをVMXモードとし、仮想化支援機能を利用しない通常の特権レベルによる動作モードは通常動作モードとする。
物理サーバ101では、複数の仮想サーバ102a〜102nを稼動させるため、物理サーバ101の物理的な計算機資源を仮想化した計算機資源に変換し、各仮想サーバ102a〜102nへ仮想計算機資源を割り当てるホストVMM(仮想マシンマネージャ:Virtual Machine Manager)10が実行される。このホストVMMは、メモリ105に読み込まれて物理CPU104で実行されるプログラムとして提供される。ホストVMM10は、各仮想サーバ102a〜102nに対して、仮想CPU108a〜108nを提供し、また、メモリ105とI/O装置106を各仮想サーバ102a〜102nに割り当てる。なお、各仮想サーバ102a〜102nに、物理サーバ101の計算機資源を割り当てる手法については、周知または公知のものを適宜用いればよいので、ここでは詳述しない。
物理サーバ101は、ユーザーインターフェース301を提供する管理コンソール300に接続され、管理者などが計算機資源の割り当てなどの設定をユーザーインターフェース301を介してホストVMM10へ入力する。また、ユーザーインターフェース301は、ホストVMM10から受信した設定状態等を管理コンソール300の表示装置へ出力する。
物理サーバ101のホストVMM10上で稼動する仮想サーバ102a〜102nは、ユーザプログラム110a〜110nとして、ゲストOS111a〜111nがそれぞれ稼動し、各ゲストOS111a〜111n上ではアプリケーション112a〜112nが実行されている。各ゲストOS111a〜111nは、ホストVMM10が提供する仮想CPU108a〜108nで実行される。なお、仮想CPU108a〜108nは、一つの仮想サーバに対して複数の仮想CPUを割り当てるようにすることができる。
そして、仮想サーバ102aでは、ゲストOS111aとして仮想化機能(ゲストVMM20)を統合した次世代OSが実行され、仮想サーバ102nでは、ゲストOS111nとして仮想化機能を利用しない既存のOS(例えば、NTサーバ)が実行される。
ホストVMM10は、既存のOSを実行する仮想サーバ102nに対しては、仮想CPU108nと、管理コンソール300から設定された計算機資源を割り当て、既存のゲストOS111nと、アプリケーション112nを実行する。
一方、ホストVMM10は、次世代OSを実行する仮想サーバ102aへ割り当てる仮想CPU108aに、仮想化支援機能を提供する。仮想CPU108a上ではゲストVMM(第2仮想マシンマネージャ)20が稼働し、このゲストVMM20は仮想CPU208a〜208iを提供する。次世代OSが稼働する仮想サーバ102aでは、第1の仮想CPU108a上で第2の仮想CPU208a〜208iが複数提供され、各仮想CPU208a〜208iでは、複数のユーザプログラム110a(ゲストOS111a及びアプリケーション112a)〜110i(ゲストOS111i及びアプリケーション112i)が実行される。
以下、本第1実施形態では、物理CPU104にVT−x機能を備え、仮想サーバ102aのゲストOS111aが仮想化機能を統合した次世代OSの例について説明する。
VT−x機能を利用するホストVMM10は、メモリ105の所定の領域に仮想サーバ102a〜102nの状態と物理CPU104を制御するための制御情報を格納するホストVMM保持データ11を格納する。そして、ホストVMM保持データ11には、物理CPU104を制御するための物理CPU制御データ13が格納される。物理CPU制御データ13は、仮想化支援機能を利用する仮想CPU108a〜108nのステータスを示すデータ構造で、VMCB(Virtual Machine Control Block)またはVMCS(Virtual Machine Control Structure)という。なお、本実施形態では、ホストVMM保持データ11内の物理CPU制御データ13を、図2で示すようにシャドウVMCB#0〜#nとし、ゲストVMM20が操作する仮想CPU制御データ21をゲストVMCBとして区別する。また、物理CPU104は、物理CPU制御データ13のシャドウVMCB#0〜#nを参照するためのポインタ115を備える。
ホストVMM10は、物理CPU制御データ13内のシャドウVMCB#0〜#nを書き換えることで、物理CPU104の動作モードを、ユーザプログラム110aまたはゲストVMM20を実行する動作モード(VMXノンルートモード)と、ホストVMM10を実行する動作モード(VMXルートモード)の何れかに設定する。
仮想サーバ102aでは、ホストVMM10が提供する仮想CPU108a上で、次世代OSであるゲストOS111aに統合された仮想化機能(仮想化ソフトウェア)が、ゲストVMM20として稼動する。ゲストVMM20には、仮想CPU108aの仮想化支援機能を制御するためのVMCB(ゲストVMCB22)を含む仮想CPU制御データ21が格納される。ゲストVMCB22は、ホストVMM10によって割り当てられたメモリ105上の所定の領域に格納される。
また、仮想CPU108aは、ゲストVMM20の仮想CPU制御データ21(ゲストVMCB22)を参照するためのポインタ116を備える。このポインタ116は、VT−x機能に対応するゲストOS111aが保持する仮想CPU108aの制御データ構造(ゲストVMCB22)へのポインタであり、ゲストOS111aからのVMPTRLD命令発行時に初期化される。なお、ポインタ116の初期化は、ゲストVMM20が実行する。
図1において、次世代OSが稼動する仮想サーバ102aの仮想CPU208a〜208iは、次世代OSに統合されたゲストVMM20が提供するものであり、各仮想CPU208a〜208i上でユーザプログラム110a〜110iを実行することができる。なお、仮想サーバ102aのゲストVMM20は、ゲストOS111aのアドインソフトウェアとして機能するものであっても良い。
<本発明の概要>
仮想化を支援するVT−x機能では、ホストVMM10が物理サーバ101のメモリ105上に確保するシャドウVMCBを用いて、物理CPU104の動作モードを制御する。仮想化支援機能としてVT−x機能を備えた物理CPU104は、通常の動作モードと仮想化支援機能を提供するVMX(Virtual Machine Extensions)モードを備え、VMXモードでは、ホストVMM10が動作するホストモード(以下、VMXルートモード)と、ゲストVMM20またはユーザプログラム(ゲストOS111aまたはアプリケーション112a)が動作するゲストモード(以下、VMXノンルートモード)の何れかに切り替える。
物理CPU制御データ13のシャドウVMCB中には仮想サーバ102a上のユーザプログラム110aの動作状態を規定するフィールド(ゲスト状態エリア131)が1種類しかなく、単純には次世代OSの仮想化機能であるゲストVMM20と、ユーザプログラム110a(ゲストOS111aまたはアプリケーション112a)を区分できない。
そこで、本発明では、1つの仮想CPUが、ゲストVMM20とユーザプログラム110aを同時に実行することがないことに着目し、ホストVMM10が仮想化機能を統合したゲストOS111aを実行する仮想サーバ102aのゲストVMM20と、ユーザプログラム110aの実行の切替を監視して、動作モードの切替時にホストVMM保持データ11のシャドウVMCB#0〜#n内のゲスト状態エリア131を書き換えることにより、仮想サーバ102a上で仮想化機能を稼動させるものである。
このため、ホストVMM10は、仮想化機能を統合した次世代OSであるゲストOS111aを監視して、物理CPU104の動作モードを、ホストVMM10が動作するVMXルートモードと、ゲストVMM20またはユーザプログラム110aが動作するVMXノンルートモードモードに切り替え、所定の条件(VM−exit)でVMXルートモードではホストVMM10がゲストVMM20やゲストOSの命令をエミュレートする。これにより、ゲストOS111aに対して、仮想CPU108aが仮想化支援機能を提供するように見せかける。
<ホストVMMの構成>
ホストVMM10は、上述のホストVMM保持データ11の他に、仮想サーバ102a〜102nを監視して、物理CPU104の動作モードをVMXルートモードとVMXノンルートモードの何れかに切り替えるCPU制御部12を備える。
さらに、ホストVMM10は、CPU制御部12が仮想サーバ102a〜102nの状態を取得し、各仮想サーバ102a〜102nへ指令を送信するためのインターフェースである制御・通信インターフェース14と、CPU制御部12が物理CPU104へ命令を発行するための命令発行インターフェース15と、物理CPU104が物理CPU制御データ13を参照または更新するための参照・更新インターフェース16と、I/O装置106からの割り込み要求などを受け付けて、この要求に応答するためのI/O要求・応答インターフェース17を備える。
図2は、ホストVMM10とゲストVMM20の機能を示すブロック図である。ホストVMM10は、物理CPU104の仮想化支援機能(VT−x機能)を利用するため、メモリ105の所定の領域にホストVMM保持データ11を設定する。
ホストVMM保持データ11は、ゲストOS111a〜111nの仮想化支援機能の利用の有無や、仮想CPU108a〜108nの状態を示すフラグ類を格納する領域と、仮想CPU108a〜108n毎のステータス等を格納するシャドウVMCB#0〜#nを保持する物理CPU制御データ13の領域を含んで構成される。
ホストVMM保持データ11のゲストOSや仮想CPUの状態を示すフラグとしては、例えば、ゲストOS111a〜111n毎に物理CPU104の仮想化支援機能を利用可能か否かを識別する仮想化機能有効フラグ141と、仮想CPU108a〜108n毎に仮想化支援機能を利用中か否かを設定するVMXONフラグ142と、仮想CPU108a〜108n仮想化支援機能がVMXルートモードまたはVMXノンルートモードの何れで動作しているのかを示す動作モードフラグ143が挙げられる。
仮想化機能有効フラグ141は、ゲストOS111a〜111n毎に設定されて「1」であれば該当するゲストOSが仮想化支援機能を利用可能であることを示し、「0」であればゲストOSが仮想化支援機能を利用しないことを示す。この仮想化機能有効フラグ141は、ゲストOS111a〜111n毎に管理コンソール300から設定したり、あるいは、予め設定したファイルなどから設定する。
VMXONフラグ142は、各仮想CPU108a〜108n毎にVMXモードの動作状態を示すフラグで、「1」のときには該当する仮想CPU108a〜108nの動作モードがVMXモードであることを示し、「0」のときには該当する仮想CPU108a〜108nの動作モードが仮想化支援機能を利用しない通常動作モードであることを示す。VMXONフラグ142は、ゲストOS111a〜111nがVMXON命令を発行したときにホストVMM10が「1」をセットし、ゲストOS111a〜111nがVMXOFF命令を発行したときにホストVMM10が「0」にリセットする。
動作モードフラグ143は、仮想CPU108a〜108n上で動作するプログラムの動作モードを追跡するフラグである。この動作モードフラグ143は、ゲストOS111a〜111nのVM−entry時にホストVMM10が「1」にセットし、ゲストOSのVM−exit時にホストVMM10が「0」にリセットする。つまり、この動作モードフラグ143は、VMXONフラグ142が「1」のときに各仮想CPU108a〜108n毎のVMXモードの種別を示すもので、動作モードフラグ143が「0」のときには仮想CPU108a〜108nがゲストVMM20を実行する状態(仮想CPUのVMXルートモード)を示し、動作モードフラグ143が「1」のときには仮想CPUがユーザプログラム110a(ゲストOS111aまたはアプリケーション112a)を実行する状態(仮想CPUのVMXノンルートモード)を示す。
ここで、VMXモードのVMXルートモードとVMXノンルートモードの遷移については、上記非特許文献1に記載されるとおりである。ここでは、概要のみについて説明する。通常動作モードからVMXモードへ移行する際には、ホストVMM10がVMXON命令を発行し、物理CPU104の動作モードをVMXモードに移行させる。そして、VMXモードへ移行したホストVMM10は、該当する仮想CPU108a〜108nのシャドウVMCB#0〜#n−1にユーザプログラム110aを実行させるための情報を書き込んでからVM−entry命令(VMLAUNCH命令またはVMRESUME命令)を発行し、VMXルートモードからVMXノンルートモードへ移行する。このVMXルートモードからVMXノンルートモードへの遷移をVM−entryという。
逆に、VMXノンルートモードからVMXルートモードへの遷移は、VM−exitという。このVM−exitは、ゲストOS111a〜111nが特権命令を発行したときなどの所定の要因で物理CPU104がホストVMM10へVM−exitを通知する。ホストVMM10のCPU制御部12がVM−exitを検知すると、所定のエミュレーションを行ってゲストVMM20またはゲストOSの処理を完了した後、シャドウVMCBを必要に応じて書き換えてからVM−entry命令(第1制御命令)を発行してVMXノンルートモードからVMXルートモードへ切り替える。
本発明では、次世代OSであるゲストOS111aのVM−entryの際に、ホストVMM10がゲストVMCB22のゲスト状態エリア221とホスト状態エリア222を読み込んで、ゲストOS111aの動作に応じた一方のエリアの内容をシャドウVMCB#0のゲスト状態エリア131へ設定することで、仮想サーバ102aでゲストOS111aの仮想化機能を実現するのである。
VT−x機能では以上のような、VM−entryとVM−exitの遷移により、ホストVMM10とゲストVMM20またはユーザプログラム110aを切り替える。このため、VM−entryとVM−exitの前後の物理CPU104のステータス等を保持するために、物理CPU制御データ13のデータ構造であるシャドウVMCB#0〜#nを使用する。
物理CPU制御データ13は、仮想CPU108a〜108n毎にシャドウVMCB#0〜#nが設定され、各シャドウVMCBには次のようなデータが格納される。
ゲスト状態エリア131には、図3で示すように、仮想CPU108a〜108nのレジスタ状態などのステータスが格納される。すなわち、後述するように、ゲストVMM20のステータスまたはユーザプログラム110aのステータスが選択的に格納される。
ホスト状態エリア132には、図3で示すように、ホストVMM10の物理CPU104のレジスタ状態などのステータスが格納される。VM実行制御領域133には、仮想サーバ102a〜102nの設定情報が格納され、例えば、例外ビットマップやI/Oビットマップなどの情報が含まれる。VM−exit制御領域134には、VM−exitの要因などの情報が格納される。VM−entry制御領域135には、VM−entryの動作を制御するための情報が格納される。そして、VM−exit情報領域136には、VM−exitを発生する要因(命令またはイベント)を格納する。VM−exitを発生させる要因としては、例えば、図4に示す「description」に示すものがVM−exit情報領域136に設定される。
以上のようなシャドウVMCB#0〜#nにより、ホストVMM10は各仮想サーバ102a〜102nの制御を行う。
一方、仮想サーバ102aのゲストVMM20が管理する仮想CPU制御データ21には、上記物理CPU制御データ13のシャドウVMCB#0と同様のデータ構造であるゲストVMCB22が格納される。
ゲストVMM20は、ユーザプログラム110a(ゲストOS111aまたはアプリケーション112a)を実行する仮想CPU108aのレジスタ状態などのステータス等を格納するゲスト状態エリア221と、ゲストVMM20を実行する仮想CPU108aのレジスタ状態などのステータスを格納するホスト状態エリア222と、仮想サーバ102aの設定情報を格納するVM実行制御領域223と、仮想サーバ102aにおけるVM−exitの要因などの情報を格納するVM−exit制御領域224と、仮想サーバ102aにおけるVM−entryの動作を制御するための情報を格納するVM−entry制御領域225と、仮想サーバ102aにおけるVM−exitの原因を特定する情報を格納するVM−exit情報領域226とを備える。
ゲスト状態エリア221には、上記図3と同様に、仮想CPU108aのレジスタ状態などのステータスが格納される。すなわち、後述するように、ゲストOS111aのステータスまたはアプリケーション112aのステータスが選択的に格納される。
仮想サーバ102aの状態を制御するホストVMM10のシャドウVMCB#0では、ゲスト状態エリア131にゲストVMM20のステータスまたはユーザプログラム110a(ゲストOS111aまたはアプリケーション112a)のステータスが格納され、ホスト状態エリア132にはホストVMM10のステータスが格納される。
一方、ゲストVMM20のゲストVMCB22では、ゲスト状態エリア221にゲストOS111aのステータスまたはアプリケーション112aのステータスが格納され、ホスト状態エリア222にはゲストVMM20のステータスが格納される点でシャドウVMCB#0と相違する。
次に、ホストVMM10のCPU制御部12の構成について説明する。CPU制御部12は、管理コンソール300からの入力などに基づいて各仮想サーバ102a〜102nへ物理サーバ101の計算機資源を割り当てるリソース管理部(図示省略)に加えて、ゲストOS111aの仮想化機能(ゲストVMM20)を稼動させるため、仮想CPUのステータスの読み込み先を選択する状態エリア選択部121と、エミュレータ122と、シャドウVMCB参照・更新部123と、VM−exitハンドラ124と、VM−entry命令発行部125と、ユーザーインターフェース301とを備える。なお、リソース管理部については、上述のように公知または周知の技術を適用すればよいので、本実施形態では詳述しない。
VM−exitハンドラ124は、物理CPU104からVM−exitを受信して、エミュレータ122を起動する。
エミュレータ122は、VM−exitハンドラ124から受信したVM−exitの発生要因となった命令またはイベントを特定し、後述するように特定した発生要因に対応するモジュールを起動してゲストVMM20やユーザプログラム110aに代わって処理を実行する。
エミュレータ122が、仮想CPU108aの動作モードの変更(VMXルートとVMXノンルートの切り替え)を検出した場合は、特定した要因に応じたモジュール(VM−entry命令実行モジュール、VMCLEAR命令実行モジュール、CPUID命令実行モジュール、VM−exit条件検出モジュール)を起動して、状態エリア選択部121を起動する。
ここで、VM−exitの発生要因は、図4に示すように、シャドウVMCB#0のVM−exit情報領域136の「Exit reason」に設定されたものである。図4に示すVM−exitの要因リストには、VM−entry命令の発行に起因する要因1361と、VMCLEAR命令(第4制御命令)の発行に起因する要因1362と、ゲストVMM20へのVM−exit通知の有無を設定した通知条件1363が予め設定される。
例えば、仮想CPU108aの動作モードを切り替える際のVM−exitの要因として、VM−entry命令(VMLAUNCH命令またはVMRESUME命令)を検出した場合には、図4の要因1361に該当するので、ホストVMM10はVM−entry命令実行モジュールでエミュレーションを行い、ゲストVMM20またユーザプログラム110aに代わって処理を行う。
あるいは、VM−exitの要因が、図4の通知条件1363に該当するゲストVMMへの通知条件の場合には、VM−exit条件検出モジュールを起動して同様にエミュレーションを行う。
状態エリア選択部121は、ホストVMM保持データ11からVM−exitを発生した仮想CPU(この例では108a)の動作モードフラグ143を読み込んで、VMXルートモードとVMXノンルートモードの何れであるかを判定する。動作モードフラグ143が「0」のVMXルートモードであればゲストVMM20が動作していたので、状態エリア選択部121は、VM−exitを発生した仮想サーバ(この例では102a)のゲストVMCB22からホスト状態エリア222を読み込む。
一方、動作モードフラグ143が「1」のVMXノンルートモードであればユーザプログラム110aが動作していたので、状態エリア選択部121は、該当する仮想サーバ102aのゲストVMCB22からゲスト状態エリア221を読み込む。
ゲストVMCB22からの読み込みが完了すると、CPU制御部12ではシャドウVMCB参照・更新モジュール123を起動する。シャドウVMCB参照・更新モジュール123は、状態エリア選択部121が読み込んだゲストVMCB22の情報を、VM−exitの処理対象である仮想CPU108aに対応するシャドウVMCB#0のゲスト状態エリア131に書き込んでシャドウVMCBを更新する。
シャドウVMCB#0のゲスト状態エリア131の更新が完了すると、CPU制御部12は仮想CPU108aの動作モードをVMXルートモードからVMXノンルートモードへ切り替えるため、動作モードフラグ143を「1」に更新し、物理CPU104のポインタ115に操作対象の仮想CPU108aのシャドウVMCB#0のアドレスをセットする。
そして、CPU制御部12は、VM−entry命令発行モジュール125を起動して、物理CPU104に対してVM−entry命令(VMRESUME命令)を発行する。
物理CPU104はVM−entry命令を受け付けると、ポインタ115が指し示すシャドウVMCB#0のゲスト状態エリア131を読み込んで、状態エリア選択部121が選択した仮想サーバ102aのゲストVMM20またはユーザプログラム110aを実行する。
以上のように、仮想サーバ102aで仮想化機能を統合した次世代OSのゲストOS111aが稼動している場合、ホストVMM10のCPU制御部12は、物理CPU104のVM−exitを検出すると、シャドウVMCB#0の動作モードフラグ143を参照して、仮想CPU108aで実行中のプログラムがゲストVMM20とユーザプログラム110aの何れであるかを判定する。そして、CPU制御部12は、仮想CPU108aで実行していたプログラムに応じてゲスト状態エリア221またはホスト状態エリア222の内容をホストVMM10のシャドウVMCB#0のゲスト状態エリア131へ書き込んでからVM−entry命令を実行する。
こうして、仮想サーバ102aのゲストVMM20が保持するゲストVMCB22の情報で、ホストVMM10が保持するシャドウVMCB#0のゲスト状態エリア131を更新することにより、ゲストOS111aの仮想化機能を稼働させる仮想サーバ102aと、仮想化機能を用いない既存のOSを実行する仮想サーバ102nをひとつの物理サーバ101に統合することが可能となる。
<ホストVMMの処理の詳細>
次に、ホストVMM10で行われる処理について、図5を参照しながら以下に説明する。図5は、仮想サーバ102a〜102nの稼働中に物理CPU104からのVM−exitを受信したときにホストVMM10のCPU制御部12が行う処理の一例を示すフローチャートである。なお、この例では、VM−exitの要因がVM−entry命令である場合を示す。
まず、S1では、ホストVMM10のCPU制御部12は、VM−exitの要因となった操作対象のゲストOS111a〜111n(以下、ゲストOSとする)に対応するホストVMM保持データ11の仮想化機能有効フラグ141を参照し、VM−exitを発生したゲストOSがVT−x機能を利用可能であるか否かを判定する。操作対象のゲストOSがVT−x機能を利用可能である場合にはS2ヘ進む。一方、操作対象のゲストOSがVT−x機能を利用しない場合(NTサーバまたは2000サーバなど)には、S15へ進んで、ホストVMM10は前記従来例に示した特許文献1または非特許文献1に記載されるような仮想マシン処理を行う。
S2では、ホストVMM10がVM−exitの要因となった仮想CPU108a〜108n(以下、仮想CPUとする)のVMXONフラグ142を参照し、この操作対象の仮想CPUがVMXモードであるか否かを判定する。VMXONフラグ142が「1」であれば仮想CPUはVMXモードであるのでS3へ進む。一方、VMXONフラグ142が「0」の場合には、仮想CPUが通常の動作モードであるので、上記と同様にS15ヘ進み、ホストVMM10は既存の仮想マシン処理を実行する。
S3では、ホストVMM10のCPU制御部12が、操作対象の仮想CPUの動作モードフラグ143を参照し、仮想CPUの動作モードがVMXルートモードとVMXノンルートモードの何れであるかを判定する。動作モードフラグ143が「0」の場合には仮想CPUがVMXルートモードであると判定してS4へ進む。一方、動作モードフラグ143が「1」の場合には、仮想CPUがVMXノンルートモードであると判定してS11へ進む。
S4では、CPU制御部12が物理CPU104から受信したVM−exitの発生要因を特定する。この例では、仮想CPUの動作モードがVMXルートモードであるので、CPU制御部12は、ゲストVMM20の状態(ステータス)を格納したゲスト状態エリア131を参照し、ゲストVMM20が発行したVM−entry命令をVM−exitの要因として特定する。
次に、S5ではCPU制御部12は、エミュレータ122からVM−entry命令実行モジュールを実行し、操作対象の仮想CPUをVMXノンルートモードへ切り替えるのに必要な所定の処理(状態エリア選択部121の起動など)をゲストVMM20に代わってエミュレートする。
次に、S6ではホストVMM10のCPU制御部12は、仮想CPUの動作モードをVMXルートモードからVMXノンルートモードへ移行させるので、操作対象の仮想CPUの動作モードフラグ143を「1」に更新する。そして、S7では、CPU制御部12が操作対象のゲストVMM20の仮想CPU制御データ21からゲスト状態エリア221に格納されているゲストOSまたはアプリケーションのステータスを読み込む。
次に、S8において、CPU制御部12は、物理CPU104に対してVMPTLDR命令を発行して、操作対象の仮想CPUに対応するシャドウVMCBをアクティブに設定し、アクティブにしたシャドウVMCBのアドレスをポインタ115に設定する。このVMPTLDR命令(第2制御命令)により、ホストVMM10は、複数のシャドウVMCB#0〜#n−1の中から操作対象の仮想CPU(仮想サーバ)のシャドウVMCBを選択する。
S9では、CPU制御部12が、上記S7で読み込んだゲスト状態エリア221の情報で操作対象のシャドウVMCB#0のゲスト状態エリア131を更新する。そして、S10でCPU制御部12は、物理CPU104に対してVM−entry命令を発行する。
VM−entry命令を受け付けた物理CPU104は、ポインタ115で指定されたシャドウVMCBのゲスト状態エリア131の内容に基づいて、操作対象の仮想サーバのユーザプログラム(ゲストOSまたはアプリケーション)を実行する。なお、物理CPU104は、VM−entry命令を受け付けると、実行していたホストVMM10のステータスをシャドウVMCBのホスト状態エリア132へ格納し、次回の呼び出しに備える。
一方、上記S3で動作モードフラグ143が「1」と判定された場合は、操作対象の仮想CPUがユーザプログラムを実行中のVMXノンルートモードであるので、S11の処理を行う。
S11では、CPU制御部12が図4のVM−exitの要因リストを参照し、通知条件1363からゲストVMMへのVM−exit通知条件を検索する。この例では、VM−exitの要因となったVM−entry命令(VMLAUNCH、VMRESUME命令)であるので、VM−exit通知条件に一致する。
そして、CPU制御部12は、S12で図2のVM−exit条件検出モジュールを実行し、操作対象の仮想CPUをVMXルートモードへ切り替えるのに必要な所定の処理(状態エリア選択部121の起動など)をユーザプログラムに代わってエミュレートする。
次に、S13では、操作対象の仮想CPUの動作モードをVMXノンルートモードからVMXルートモードへ移行させるため、CPU制御部12が操作対象の仮想CPUの動作モードフラグ143を「0」にリセットする。そして、S14では、CPU制御部12が操作対象のゲストVMM20の仮想CPU制御データ21からホスト状態エリア221に格納されているゲストVMM20のステータスを読み込む。
S14の処理が完了すると、上記S8〜S10を実行し、CPU制御部12は、上記S14で読み込んだホスト状態エリア222の情報で操作対象のシャドウVMCBのゲスト状態エリア131を更新し、ゲストVMM20のステータスをセットしてから物理CPU104に対してVM−entry命令を発行する。
この結果、VM−entry命令を受け付けた物理CPU104は、ポインタ115で指定されたシャドウVMCBのゲスト状態エリア131の内容に基づいて、操作対象の仮想サーバのゲストVMM20を実行する。
このように、ゲストOSが仮想化機能を統合した次世代OSである場合、ホストVMM10は、仮想CPUの動作モードと、発生したVM−exitの要因に応じてシャドウVMCBのゲスト状態エリア131に書き込むステータスを、ゲストVMMまたはユーザプログラムの何れか一方から選択する。そして、ホストVMM10が物理CPU104(第1の仮想CPU)に対してVM−entry命令を発行することで、仮想サーバ上でゲストVMMと、このゲストVMMが提供する第2の仮想CPU上で稼動するユーザプログラムを切り替えて実行することが可能となり、ゲストVMMは仮想サーバ上に複数の仮想化環境(ユーザプログラム)を提供することができる。
なお、上記S1の判定でゲストOSが仮想化機能を利用しない場合、または上記S2の判定で、仮想CPUが物理CPU104のVT−x機能を利用しない場合は、S15において、前記従来例に示した特許文献1または非特許文献1の記載に準じた仮想マシン処理をホストVMM10で行えばよい。
S15の仮想マシン処理は、例えば、図1に示した仮想サーバ102nのゲストOS111nは、既存のOSであり、このゲストOS111nまたはアプリケーション112n(ユーザプログラム110n)が特権命令などの所定の命令を実行すると、上述したように物理CPU104はVM−exitの発生をホストVMM10に通知する。
ホストVMM10は、物理CPU104からのVM−exitの通知を受けると、ユーザプログラム110n(仮想CPU108n)のステータスをシャドウVMCB#n−1のゲスト状態エリア131に格納する。そして、ホストVMM10は、ポインタ115のアドレスをホストVMM10のステータスを格納したホスト状態エリアに設定して、所定の処理を実行する。
ホストVMM10は、特権命令など所定の処理が完了すると、ホストVMM10のステータスをホスト状態エリア132へ格納し、ポインタ115のアドレスにゲスト状態エリア131を設定してから、VM−entry命令(VMRESUME命令)を発行して、制御を仮想CPU108nに移動してユーザプログラム110nの実行を再開する。
このように、本発明によれば、仮想化機能を統合した次世代OSと、既存のOSをひとつの物理サーバ101へ統合することが可能となって、物理サーバの数を削減してサーバの運用管理コストを削減することが可能となる。
さらに、上述のように、ホストVMM10は次世代OSに対して仮想CPUがVT−x機能を提供するように見せかけることができ、仮想化ソフトウェアを統合したOSを確実に稼働させることが可能となる。また、本発明のホストVMM10によれば、前記従来例のシミュレータのように、命令列の変換などのオーバーヘッドがなく、仮想計算機の性能を低下させることなく、仮想化機能を統合したOSを仮想サーバで実行することが可能となるのである。
また、本発明では、複数の仮想CPU108a〜108nに対応して、複数のシャドウVMCB#0〜#n−1を設けたので、物理サーバ101で複数のゲストVMM20を実行する場合でも、シャドウVMCB#0〜#n−1を切り替えるだけで迅速に処理を切り替えることが可能となる。これにより、物理サーバ101に複数の次世代OSを統合した場合でも、仮想サーバの性能を維持することが可能となる。
図6は、仮想サーバの稼働中にVMCLEAR命令の実行に起因して、物理CPU104からのVM−exitを受信したときにホストVMM10のCPU制御部12が行う処理の一例を示すフローチャートである。
S21〜S23は、上記図5のS1〜S3と同様であり、ホストVMM10のCPU制御部12が、VM−exitの要因となった操作対象のゲストOSがVT−x機能を利用可能であるか否かを判定し、操作対象の仮想CPUのVMXONフラグ142を参照して、操作対象の仮想CPUがVT−x機能を使用中か否かを判定する。操作対象のゲストOSがVT−x機能を利用しない場合や、VMXONフラグ142が「0」である仮想CPUが通常の動作モードの場合は、S35ヘ進み、ホストVMM10は既存の仮想マシン処理を実行する。
さらに、CPU制御部12は、操作対象の仮想CPUの動作モードフラグ143を参照し、仮想CPUの動作モードがVMXルートモードとVMXノンルートモードの何れであるかを判定し、VMXルートモードであればS24へ進み、VMXノンルートモードであればS30へ進む。
S24では、CPU制御部12は、物理CPU104から受信したVM−exitから要因を特定する。この例では、CPU制御部12がゲスト状態エリア131を参照して、VM−exitの要因としてゲストVMM20のVMCLEAR命令を特定する。
次に、S25ではCPU制御部12のエミュレータ122からVMCLEAR命令実行モジュールを起動してエミュレーションを行う。S26では、エミュレーションにより、物理CPU104の動作状態(ステータス)を読み込んで、操作対象の仮想CPUに対応するシャドウVMCBを更新する。これにより、物理CPU104のステータスをシャドウVMCBに反映させる。
S27では、CPU制御部12が操作対象の仮想CPUに対応するシャドウVMCBのゲスト状態エリア131に格納されているステータスを読み込む。
次に、S28において、CPU制御部12は、シャドウVMCBのゲスト状態エリア131から読み込んだステータスをゲストVMM20のゲスト状態エリア221へ書き込んで更新する。これにより、ゲストVMM20のゲスト状態エリア221は、物理CPU104のステータスと同期する。
S29では、CPU制御部12が、ポインタ115のアドレスを操作対象の仮想CPUに対応するシャドウVMCBのゲスト状態エリア131に設定してから、物理CPU104に対してVM−entry命令を発行する。
VM−entry命令を受け付けた物理CPU104は、ポインタ115で指定されたシャドウVMCBのゲスト状態エリア131の内容に基づいて、操作対象の仮想サーバのユーザプログラム(ゲストOSまたはアプリケーション)を実行する。
一方、上記S23で動作モードフラグ143が「1」と判定された場合は、操作対象の仮想CPUがVMXノンルートモードであるので、S30の処理を行う。S30では、図4のVM−exitの要因リストを参照し、VM−exitの要因を解析する。CPU制御部12は、通知条件1363からゲストVMMへのVM−exit通知条件を検索する。この例では、VM−exitの要因となったVMCLEAR命令は、VM−exit通知条件に一致する。
そして、S31ではCPU制御部12がゲストVMM20に対して規定外命令エラーを通知する。すなわち、ユーザプログラムの権限ではVMCLEAR命令を実行できなかったことを、ゲストVMM20へ通知する。
次に、S32ではCPU制御部12が、操作対象の仮想CPUの動作モードをVMXノンルートモードからVMXルートモードへ移行させるので、操作対象の仮想CPUの動作モードフラグ143を「0」にリセットする。
S33では、CPU制御部12が操作対象のゲストVMM20の仮想CPU制御データ21から、ホスト状態エリア221に格納されているゲストVMM20のステータスを読み込む。
S34では、CPU制御部12が、上記S33で読み込んだホスト状態エリア222のステータスを、操作対象のシャドウVMCBのゲスト状態エリア131に書き込んでシャドウVMCBを更新する。その後、上記S29では、CPU制御部12がポインタ115のアドレスをゲスト状態エリア131に設定してから、物理CPU104に対してVM−entry命令を発行する。
この結果、VM−entry命令を受け付けた物理CPU104は、ポインタ115で指定されたシャドウVMCBのゲスト状態エリア131の内容に基づいて、操作対象の仮想サーバのゲストVMM20を実行する。
なお、上記S21の判定でゲストOSが仮想化機能を利用しない場合、または上記S22の判定で、仮想CPUが物理CPU104のVT−x機能を利用しない場合は、S35において、前記図5のS15と同様にして、従来例に示した特許文献1または非特許文献1の記載に準じた仮想マシン処理をホストVMM10で行えばよい。
このように、ゲストVMM20がVMCLEAR命令を発行した場合には、ホストVMM10は、物理CPU104の動作状態(ステータス)を取得してシャドウVMCBのゲスト状態エリア131を、取得した動作状態で更新する。そして、ホストVMM10は、シャドウVMCBのゲスト状態エリア131のステータスを、ゲストVMCBのゲスト状態エリア221に反映させることで、物理CPU104のステータスとホストVMM10のゲスト状態エリア131及びゲストVMM20上のゲスト状態エリア221のステータスを同期させることができる。
これにより、仮想化機能を統合した次世代OSは、仮想サーバ上で仮想環境を円滑に提供することが可能となる。
図7は、仮想サーバの稼働中にCPUID命令(第3制御命令)の実行に起因して、物理CPU104からのVM−exitを受信したときにホストVMM10のCPU制御部12が行う処理の一例を示すフローチャートである。
まず、S41では、図5のS3と同様に、ホストVMM10のCPU制御部12は、VM−exitの要因となった操作対象の仮想CPUの動作モードフラグ143を参照し、仮想CPUの動作モードがVMXルートモードとVMXノンルートモードの何れであるかを判定する。動作モードフラグ143が「0」の場合には仮想CPUがVMXルートモードであると判定してS42へ進む。一方、動作モードフラグ143が「1」の場合には、仮想CPUがVMXノンルートモードであると判定してS41へ進む。
S42では、図5のS4と同様にして、CPU制御部12が物理CPU104から受信したVM−exitの発生要因をゲスト状態エリア131の値から特定する。この例では、VMXルートモードであるので、CPU制御部12は、ゲストVMM20のCPUID命令をVM−exitの発生要因として特定する。
S43では、図5のS1と同様に、CPU制御部12は、VM−exitの要因となった操作対象のゲストOSに対応するホストVMM保持データ11の仮想化機能有効フラグ141を参照し、VM−exitを発生したゲストOSがVT−x機能を利用可能であるか否かを判定する。操作対象のゲストOSがVT−x機能を利用可能である場合にはS44ヘ進む。一方、操作対象のゲストOSがVT−x機能を利用しない場合には、S45へ進む。
S44では、CPUID命令の戻り値を示すリターンレジスタ(IA−32の場合ECX)の所定のビット(CPUID.1.ECX[5]=1)を1に設定して、VT−x機能が有効であることを設定する。
一方、S45では、CPUID命令の戻り値を示すリターンレジスタ(IA−32の場合ECX)の所定のビットを0に設定して、VT−x機能が無効であることを設定する。
次に、S46においてCPU制御部12は、エミュレータ122からCPUID命令実行モジュールを起動して、ゲストVMM20もしくはユーザプログラムへ通知すべき例外のチェック等を行い、チェック結果をゲスト状態エリア131に格納する。
S47では、CPU制御部12が物理CPU104に対してVM−entry命令を発行して、仮想サーバに制御を移す。
一方、上記S41の判定で、動作モードフラグ143が「1」となるユーザプログラムを実行していた場合(VMXノンルートモード)にはS48ヘ進み、ユーザプログラムを実行している期間中のVM−exitの要因を解析する。S48では、CPU制御部12が物理CPU104から受信したVM−exitの発生要因をゲスト状態エリア131の値から特定する。この例では、VMXノンルートモードであるので、CPU制御部12は、ゲストOSまたはアプリケーションのCPUID命令をVM−exitの発生要因として特定する。
S49では、CPU制御部12が、ユーザプログラム実行中のCPUID命令に起因するVM−exitについて、ゲストVMM20への通知が必要であるか否かを判定する。この判定は、CPU制御部12が、仮想CPU制御データ21のゲストVMCB22のVM実行制御領域223に予め設定された情報を参照して、判定を行う。CPUID命令に伴うVM−exitをゲストVMM20へ通知する必要があればS50へ進む。一方、ゲストVMM20へのVM−exitの通知が不要であればS43へ進み、上述のS43移行の処理を実行する。
S50では、ゲストVMM20へVM−exitの通知を行うため、CPU制御部12はVM−exitエミュレータを実行し、S51で操作対象の仮想CPUの動作モードフラグ143を「0」にリセットしてVMXルートモードへ切り替える。
次に、S52でCPU制御部12は、操作対象のゲストVMCB22のホスト状態エリア222のステータスを読み込む。S53ではCPU制御部12が、上記読み込んだステータスを、操作対象の仮想CPUのシャドウVMCBのゲスト状態エリア131に書き込んで更新を行う。その後、S47で、CPU制御部12が物理CPU104に対してVM−entry命令を発行して制御をゲストVMM20へ移す。
以上のように、ゲストVMM20がCPUID命令を発行した場合と、CPUID命令に起因するVM−exitをゲストVMM20へ通知しない場合では、仮想化機能有効フラグ141の設定に応じてリターンレジスタの値を設定した後、CPU制御部12は、VM−entry命令を発行して、ゲストVMM20またはユーザプログラムへ制御を戻すことができる。また、ユーザプログラムがCPUID命令を発行し、ゲストVMM20へVM−exitの通知が必要な場合では、シャドウVMCBのゲスト状態エリア131を、ゲストVMCB22のホスト状態エリア222の内容で更新して、制御をゲストVMM20へ移すことができる。
以上のように、本第1実施形態によれば、ホストVMM10がゲストOSやアプリケーションの状態と仮想CPUの状態を監視してシャドウVMCBのゲスト状態エリア131を書き換えることで、仮想サーバの性能を低下させることなく、仮想化ソフトウェアを統合したOSを確実に稼働させることが可能となる。そして、ひとつの物理サーバ101で仮想化機能を統合した次世代OSと、既存のOSを共存させることが可能となって、サーバ統合を効率よく行うことで、サーバの運用コストを削減することが可能となる。
なお、ホストVMM10が管理コンソール300に提供するユーザーインターフェースとしては、例えば、図8に示すようなGUIで構成される。図8は、各仮想サーバ毎に仮想化機能を有効にするか無効にするかを設定するユーザーインターフェースを示す。図中「VM#」は、仮想サーバの識別子を示し、「現在設定」は「ON」であれば仮想化機能が有効出ることを示し、「OFF」であれば仮想化機能が無効であることを示す。そして、「新規設定」に「ON」または「OFF」を設定してから、画面左下の「OK」をクリックすることにより、所望の仮想サーバについて仮想化機能の有効または無効を切り替えることができる。すなわち、ホストVMM10は、ユーザーインターフェース301から入力された「新規設定」の値に基づいて、ホストVMM保持データ11のうち、該当する仮想サーバの仮想化機能有効フラグ141に「1」または「0」を設定する。これにより、ユーザーインターフェース301から入力された設定値を任意の仮想サーバへ反映させることができる。
<第2実施形態>
図9は、第2の実施形態を示し、前記第1実施形態に示した物理CPU104のVT−x機能を、前記従来例(非特許文献2)に示したAMD−V(Virtualization)に置き換えたものである。
図9において、AMD−Vを実装した物理CPU104aは、前記第1実施形態に示したホストVMM10のシャドウVMCBのアドレスを指し示すポインタ115に加えて、ホスト状態エリア132のアドレスを指し示すポインタ118を備える。
AMD−Vを備える物理CPU104aは、VM−entry命令に代わって、VMRUN命令を実行するとホストVMM10を実行するホストモードからゲストVMM20またはユーザプログラムを実行するゲストモードへの切り換え行う。そして、ホストVMM10は、AMD−Vの仕様に応じて、次の点が前記第1実施形態のVT−x機能と相違する。
ホストVMM保持データ11のうち、前記第1実施形態のVMXONフラグ142を削除し、仮想サーバ毎の仮想化機能有効フラグ141と、仮想CPU108a〜n毎の動作モードフラグ143を備える。そして、ホストVMM保持データ11の物理CPU制御データは、図10で示すように、仮想CPU毎のホスト状態エリア132と、仮想CPU毎のシャドウVMCB#0〜#n−1に、ゲスト状態エリア131と制御エリア137を備える。なお、シャドウVMCB#0〜#n−1の制御エリア137は、前記第1実施形態のVM−exit情報領域136に相当する情報を格納する。
すなわち、制御エリア137には、図11で示すように、予め設定された#VMEXIT(前記第1実施形態のVM−exitに相当)の発生要因のコードを示すEXITCODE1371と、コードの名称1372と、このコードがVMRUN命令に起因することを示す判定結果1373と、#VMEXITをゲストVMM20へ通知することを示す通知条件1374が含まれている。
CPU制御部12のエミュレータ122は、VM−entry命令に代わって、VMRUN命令実行モジュールを備え、VMCLEAR命令実行モジュールを削除した。また、CPU制御部12は、前記第1実施形態のVM−entry命令発行部に代わって、物理CPU104にVMRUN命令を発行するVMRUN命令発行部125Aを備える。
次に、ホストVMM10が仮想サーバ102a〜102nへ提供する仮想CPU108a〜108nも、物理CPU104aの構成の変更に応じて、ゲストVMM20内のゲスト状態エリア221のアドレスを指し示すポインタ116に加えて、ホスト状態エリア222のアドレスを指し示すポインタ117を備える。なお、ゲストVMM20は、前記第1実施形態の仮想サーバ102aと同じく、仮想化機能を統合した次世代OSをゲストOS111aに採用した場合に仮想サーバ102aで稼働するものである。
ゲストVMM20の仮想CPU制御データ21は、ホストVMM10のホストVMM保持データ11と同様に、AMD−Vの仕様に応じてゲストVMM20のステータスを保持するホスト状態エリア222と、ユーザプログラムのステータスを格納するゲスト状態エリア221及び制御エリア226を備えたゲストVMCB22から構成される。
以上のような構成により、ホストVMM10は、物理CPU104aから#VMEXITを受信すると、シャドウVMCB#0〜#n−1のゲスト状態エリア131に、ゲストVMM20のゲスト状態エリア221またはホスト状態エリア222の内容を書き込むことで、仮想サーバ102aで稼働する次世代OSに統合されたゲストVMM20と、このゲストVMM20上で稼動するユーザプログラムを切り替えることができる。
次に、ホストVMM10で行われる処理について、図12を参照しながら以下に説明する。図12は、仮想サーバ102aの稼働中に物理CPU104aからの#VMEXITを受信したときにホストVMM10のCPU制御部12が行う処理の一例を示すフローチャートである。なお、この例では、#VMEXITの要因がVMRUN命令である場合を示す。
まず、S61では、ホストVMM10のCPU制御部12は、#VMEXITの要因となった操作対象のゲストOS111a(以下、ゲストOSとする)に対応するホストVMM保持データ11の仮想化機能有効フラグ141を参照し、#VMEXITを発生したゲストOSがAMD−V機能を利用可能であるか否かを判定する。仮想化機能有効フラグ141が「1」であれば操作対象のゲストOSがAMD−V機能を利用可能であると判定してS62ヘ進む。一方、仮想化機能有効フラグ141が「0」であれば操作対象のゲストOSがAMD−V機能を利用しないと判定してS73へ進む。S73では前記第1実施形態の図5に示したS15と同様に、ホストVMM10が前記従来例に示した仮想マシン処理を行う。
S62では、ホストVMM10のCPU制御部12が、操作対象の仮想CPUの動作モードフラグ143を参照し、仮想CPUの動作モードがホストモード(前記第1実施形態のVMXルートモード)とゲストモード(前記第1実施形態のVMXノンルートモード)の何れであるかを判定する。動作モードフラグ143が「0」の場合には仮想CPUがホストモードであると判定してS63へ進む。一方、動作モードフラグ143が「1」の場合には、仮想CPUがゲストモードであると判定してS69へ進む。
S63では、CPU制御部12が物理CPU104aから受信した#VMEXITの発生要因を特定する。この例では、ホストモードであるので、CPU制御部12は、ゲストVMM20の状態(ステータス)を格納したゲスト状態エリア131を参照し、ゲストVMM20が発行したVMRUN命令を#VMEXITの要因として特定する。
次に、S64ではCPU制御部12のエミュレータ122からVMRUN命令実行モジュールを実行し、操作対象の仮想CPUをゲストモードへ切り替えるのに必要な所定の処理(状態エリア選択部121の起動など)をゲストVMM20に代わってエミュレートする。
次に、S65ではホストVMM10のCPU制御部12は、仮想CPUの動作モードをホストモードからゲストモードへ移行させるので、操作対象の仮想CPUの動作モードフラグ143を「1」に更新する。
そして、S66では、CPU制御部12が操作対象のゲストVMM20のゲストVMCB22からゲスト状態エリア221に格納されているユーザプログラム(ゲストOSまたはアプリケーション)のステータスを読み込む。
S67では、CPU制御部12が、上記S66で読み込んだゲスト状態エリア221の情報で操作対象のシャドウVMCB#0のゲスト状態エリア131を更新する。そして、S68でCPU制御部12は、物理CPU104a(操作対象の仮想CPU108a)に対してVMRUN命令を発行する。
VMRUN命令を受け付けた物理CPU104aは、ポインタ115で指定されたシャドウVMCBのゲスト状態エリア131の内容に基づいて、操作対象の仮想サーバのユーザプログラム(ゲストOSまたはアプリケーション)を実行する。なお、物理CPU104aは、VMRUN命令を受け付けると、ホストVMM10のステータスをホストVMM保持データ11のホスト状態エリア132へ格納し、次回の呼び出しに備える。
一方、上記S62で動作モードフラグ143が「1」と判定されたゲストモードの場合は、操作対象の仮想CPUがユーザプログラムを実行中であるので、S69の処理を行う。S69では、CPU制御部12がEXITCODEを取得して、図11に示した#VMEXITの要因リストを参照し、操作対象の仮想サーバでユーザプログラムを実行中であるので、通知条件1374からゲストVMMへの#VMEXIT通知条件を検索する。この例では、#VMEXITの要因はVMRUN命令が、#VMEXIT通知条件に一致する。そして、S70ではCPU制御部12がエミュレータ122から図9の#VMEXIT条件検出モジュールを実行し、操作対象の仮想CPUをホストモードへ切り替えるのに必要な所定の処理(状態エリア選択部121の起動など)をユーザプログラムに代わってエミュレートする。
次に、S71ではCPU制御部12が、操作対象の仮想CPUの動作モードをゲストモードからホストモードへ移行させるので、操作対象の仮想CPUの動作モードフラグ143を「0」にリセットする。
そして、S72では、CPU制御部12が操作対象のゲストVMM20から仮想CPU制御データ21のホスト状態エリア221に格納されているゲストVMM20のステータスを読み込む。
S72の処理が完了すると、上記S67〜S68を実行し、CPU制御部12は、上記S72で読み込んだホスト状態エリア222の情報で操作対象のシャドウVMCBのゲスト状態エリア131を更新し、物理CPU104a(操作対象の仮想CPU108a)に対してVMRUN命令を発行する。この結果、VMRUN命令を受け付けた物理CPU104aは、ポインタ115で指定されたシャドウVMCBのゲスト状態エリア131の内容に基づいて、操作対象の仮想サーバのゲストVMM20を実行する。
このように、仮想サーバで稼働するゲストOSが仮想化機能を統合した次世代OSである場合、ホストVMM10は、仮想CPUの動作モードと、発生した#VMEXITの要因に応じてシャドウVMCBのゲスト状態エリア131に書き込むステータスを、ゲストVMMまたはユーザプログラムの何れか一方から選択する。そして、ホストVMM10が物理CPU104aに対してVMRUN命令を発行することで、仮想サーバ上で第1の仮想CPU上で稼動するゲストVMMと、このゲストVMMが提供する第2の仮想CPU上で稼動するユーザプログラムを切り替えて実行することが可能となり、ゲストVMMは仮想サーバ上で仮想化環境を提供することができる。
なお、上記S61の判定でゲストOSが仮想化機能を利用しない場合は、S15において、前記従来例に示した特許文献1または非特許文献1の記載に準じた仮想マシン処理をホストVMM10で行えばよい。
S73の仮想マシン処理は、例えば、図1に示した仮想サーバ102nのゲストOS111nは既存のOSであり、このゲストOS111nまたはアプリケーション112n(ユーザプログラム110n)が特権命令などの所定の命令を実行すると、上述したように物理CPU104aは#VMEXITの発生をホストVMM10に通知する。
ホストVMM10は、物理CPU104aからの#VMEXITの通知を受けると、ユーザプログラム110n(仮想CPU108n)のステータスをシャドウVMCB#n−1のゲスト状態エリア131に格納する。
ホストVMM10は、特権命令など所定の処理が完了すると、ホストVMM10のステータスをホスト状態エリア132へ格納し、ポインタ115のアドレスにゲスト状態エリア131を設定してから、VMRUN命令を発行して、制御を仮想CPU108nに移動してユーザプログラム110nの実行を再開する。
このように、第2の実施形態によれば、前記第1実施形態と同様に、仮想化機能を統合した次世代OSをホストVMM10上で稼動させることが可能となる。そして、仮想化機能を統合した次世代OSと、既存のOSをひとつの物理サーバ101へ統合することが可能となって、物理サーバの数を削減してサーバの運用管理コストを削減することが可能となる。
さらに、上述のように、ホストVMM10は第1の仮想CPU上で稼動するゲストVMMに対して第1の仮想CPUがAMD−V機能を提供するように見せかけることができ、仮想化ソフトウェアを統合したOSを確実に稼働させることが可能となる。また、本発明のホストVMM10によれば、前記従来例のシミュレータのように、命令列の変換などのオーバーヘッドがなく、仮想計算機の性能を低下させることなく、仮想化機能を統合したOSを仮想サーバで実行することが可能となるのである。
<第3実施形態>
図13は、第3の実施形態を示し、前記第1実施形態に示した物理CPU104の仮想化支援機能を、VT−x機能から前記従来例(非特許文献3)に示したIPF(Itanium Processor Family)のVT−i機能に置き換えたものである。
図13において、VT−i機能を実装した物理CPU104bでは、ゲスト(ゲストVMM20またはユーザプログラム110a)を実行中に予め設定した命令やイベントがあると仮想化例外(Virtualization Fault)を発生し、ホストVMM10に制御を移す。ホストVMM10では、仮想化例外を検知すると、予め設定された仮想化プロシジャ(PAL_VPS_RESUMEプロシジャなど)を実行(エミュレーション)し、仮想CPU108aから08nを制御するためのシャドウVPD(Virtual Processor Descriptor)を更新してから物理CPU104bへ仮想化プロシジャ(PAL_VPS_RESUMEプロシジャ)を発行し、ゲストに制御を移す。なお、PAL_VPS_RESUMEプロシジャは、PAL_VPS_RESUME_NORMALプロシジャ呼び出し、またはPAL_VPS_RESUME_HANDLERプロシジャ呼び出しの総称とする。
すなわち、物理CPU104bは、前記第1実施形態のVM−exitに代わって仮想化例外を発生し、VM−entry命令に代わって仮想化プロシジャを実行することで、ホストVMM10とゲストの制御を切り替えるアーキテクチャである。詳細については前記非特許文献3に詳しいので、本アーキテクチャの詳細な説明は省略する。
ホストVMM10のホストVMM保持データ11には、前記第1実施形態と同様の仮想化機能有効フラグ141と動作モードフラグ143に加え、仮想CPU108a〜108nのステータスを格納するアーキテクチャ状態151を含む仮想CPU制御データB150を設ける。
そして、物理CPU制御データ13は、VT−i機能の仕様に応じて以下の情報を格納する。物理CPU制御データ13には、仮想CPU108a〜108n毎のステータスを格納するアーキテクチャ状態1310を含むシャドウVPD#0〜#n−1と、仮想CPU108a〜108n毎に仮想化例外の発生の抑止を設定するVDC(Virtualization Disable Control)領域#0〜#n−1(1320)と、仮想CPU108a〜108nが実行する命令またはイベントのうち、物理CPU104bで仮想化例外を発生する命令またはイベントを予め定義した仮想化例外要因1330と、を備える。
ホストVMM保持データ11に格納されるアーキテクチャ状態は、図14で示すようになる。すなわち、仮想CPU制御データB150のアーキテクチャ状態151には、仮想CPU108a〜108nが実行するゲスト(ゲストVMM20またはユーザプログラム)のステータスが格納され、シャドウVPDのアーキテクチャ状態1310には、物理CPU104bで実行されるゲストまたはホストVMM10のステータスが格納される。
また、ホストVMM保持データ11の物理CPU制御データ13に格納される仮想化例外要因1330は、例えば、図15の仮想化例外要因リストで示すように設定される。図15において、仮想化例外要因リストには、仮想化例外の要因を示すコード1331と、コードに対応する仮想化例外の内容1332と、制御をゲストへ移すためのPAL_VPS_RESUMEプロシジャの呼び出し設定1333と、ゲストVMM20への仮想化例外の通知設定1334から構成される。設定1333では、図中「○」が設定された命令のときに、制御をゲストへ移すPAL_VPS_RESUMEプロシジャを呼び出すことを意味する。また、通知設定1334は、図中「○」が設定された命令のときに、ゲストVMM20へ通知を行うことを意味し、ゲストVMM20のVDC領域2202が仮想化例外の発生を抑止していないときにゲストVMM20への通知を行うことを意味する。
ゲストVMM20が保持する仮想CPU108aの状態は、仮想CPU制御データA210に格納される。仮想CPU制御データA210は、仮想CPU108aのステータスを格納するアーキテクチャ状態2210を含むゲストVPD220と、ゲストOSまたはアプリケーションが実行した命令またはイベントのうち、仮想CPU108aで仮想化例外を発生する命令またはイベントを定義した仮想化例外要因2201と、ゲストVMM20を実行する仮想CPU108aがVT−i機能を利用するか否かを示すVDC領域2202とを含む。
CPU制御部12は、物理CPU104bからの仮想化例外を検知し、エミュレータ122へ通知する仮想化例外ハンドラ1240と、物理CPU104bが提供するPAL(Processor Abstraction Layer)で仮想化例外となった処理を実行させるエミュレータ122と、仮想CPU108aの稼働状態基づいて、ゲストVPDのアーキテクチャ状態2210と、ホストVMM保持データ11の仮想CPU制御データB150のアーキテクチャ状態151の何れかを選択する状態エリア選択部121と、状態エリア選択部121で選択された情報でシャドウVPDのアーキテクチャ状態1310を更新するシャドウVPD更新部1250と、ホストVMM10からゲストVMM20またはゲストVMM20上の第2の仮想CPU208a上で稼動するユーザプログラムへ制御を切り替えるため、物理CPU104bへ所定のプロシジャの実行を指令する仮想化プロシジャ指令部1250と、を備える。
次に、ホストVMM10のCPU制御部12で行われる処理の一例について、図16のフローチャートを参照しながら以下に説明する。なお、以下の説明では、前記第1実施形態の図1に示した仮想サーバ102aで次世代OSのゲストOS111aとアプリケーション112a及びゲストVMM20が稼働している例について説明する。
図16は、仮想サーバ102aの稼働中に物理CPU104bからの仮想化例外を受信したときにホストVMM10のCPU制御部12が行う処理の一例を示すフローチャートである。なお、この例では、仮想化例外の要因がPAL_VPS_RESUMEプロシジャからのvmsw命令である場合を示す。
まず、S81では、ホストVMM10のCPU制御部12が、仮想化例外の要因となった操作対象のゲストOS111a(以下、ゲストOSとする)に対応するホストVMM保持データ11の仮想化機能有効フラグ141を参照し、仮想化例外を発生したゲストOSがVT−i機能を利用可能であるか否かを判定する。仮想化機能有効フラグ141が「1」であれば操作対象のゲストOSがVT−i機能を利用可能であると判定してS82ヘ進む。一方、仮想化機能有効フラグ141が「0」であれば操作対象のゲストOSがVT−i機能を利用しないと判定してS94へ進む。S94では、ホストVMM10が前記従来例の非特許文献3に示したVT−i機能を用いて仮想マシン処理を行う。
S82では、ホストVMM10のCPU制御部12が、操作対象の仮想CPUの動作モードフラグ143を参照し、仮想CPUの動作モードがホストモード(前記第1実施形態のVMXルートモード)とゲストモード(前記第1実施形態のVMXノンルートモード)の何れであるかを判定する。動作モードフラグ143が「0」の場合には仮想CPUがゲストVMM20を実行するホストモードであると判定してS83へ進む。一方、動作モードフラグ143が「1」の場合には、仮想CPUがユーザプログラムを実行するゲストモードであると判定してS90へ進む。
S83では、CPU制御部12が物理CPU104bから受信した仮想化例外の発生要因を特定する。この例では、ホストモードであるので、CPU制御部12は、ゲストVMM20の状態(ステータス)を格納したホストVMM保持データ11内の仮想CPU制御データB150のアーキテクチャ状態151を参照し、ゲストVMM20がPAL_VPS_RESUMEプロシジャから発行したvmsw命令を仮想化例外の要因として特定する。
次に、S84ではCPU制御部12が、仮想化例外の要因となったPAL_VPS_RESUMEプロシジャモジュールを実行し、所定の処理をゲストVMM20に代わって実行し、操作対象の仮想CPUをゲストモードへ切り替えるのに必要な所定の処理(状態エリア選択部121の起動など)を実行する。
次に、S85ではCPU制御部12が、仮想CPUの動作モードをホストモードからゲストモードへ移行させるので、操作対象の仮想CPUの動作モードフラグ143を「1」に更新する。
そして、S86では、CPU制御部12が操作対象のゲストVMM20の仮想CPU制御データA210内のゲストVPD220からアーキテクチャ状態2210に格納されているユーザプログラム(ゲストOSまたはアプリケーション)のステータスを読み込む。
S87では、CPU制御部12が物理CPU104bに対してPAL_VPS_SAVE/RESTOREプロシジャを発行し、仮想化例外の発行要因となったシャドウVPD#0を選択する。
次に、S88では、CPU制御部12が、上記S86で読み込んだアーキテクチャ状態2210のステータスを、上記S87で選択した操作対象のシャドウVPD#0のアーキテクチャ状態1310に書き込んで更新する。そして、S88においてCPU制御部12は、物理CPU104bに対してPAL_VPS_RESUMEプロシジャを発行する。
PAL_VPS_RESUMEプロシジャを受け付けた物理CPU104bは、S87で選択されたシャドウVPDのアーキテクチャ状態1310の内容に基づいて、操作対象の仮想サーバのユーザプログラム(ゲストOSまたはアプリケーション)を実行する。
一方、上記S82で動作モードフラグ143が「1」と判定されたゲストモードの場合は、操作対象の仮想CPUがユーザプログラムを実行中であるので、S90の処理を行う。S90では、CPU制御部12が仮想化例外の要因を取得して、図15に示した仮想化例外の要因リストを参照し、通知条件1334からゲストVMMへの仮想化例外通知条件を検索する。この例では、仮想化例外の要因がvmsw命令であるので、仮想化例外通知条件はゲストVMM20のVDC領域2202の設定によるものとなる。ここでは、ゲストVMM20へ仮想化例外を通知するものとして扱う。そして、S91では図13の仮想化例外条件検出モジュールを実行し、操作対象の仮想CPUをホストモードへ切り替えるのに必要な所定の処理(状態エリア選択部121の起動など)をゲストVMM20に代わってエミュレートする。
次に、S92ではCPU制御部12が、操作対象の仮想CPUの動作モードをゲストモードからホストモードへ移行させるので、操作対象の仮想CPUの動作モードフラグ143を「0」にリセットする。
そして、S93では、CPU制御部12がホストVMM保持データ11内の操作対象の仮想CPUに対応する仮想CPU制御データB150のアーキテクチャ状態151に格納されているゲストVMM20のステータスを読み込む。
S93の処理が完了すると、上記S87〜S89を実行し、CPU制御部12は、上記S93で読み込んだホストVMM保持データ11の仮想CPU制御データB150のアーキテクチャ状態151の情報で操作対象のシャドウVPDのアーキテクチャ状態1310を更新し、物理CPU104bに対してPAL_VPS_RESUMEプロシジャを発行する。この結果、PAL_VPS_RESUMEプロシジャを受け付けた物理CPU104bは、シャドウVPD#0のアーキテクチャ状態1310の内容に基づいて、操作対象の仮想サーバのゲストVMM20を実行する。
このように、仮想サーバで稼働するゲストOSが仮想化機能を統合した次世代OSである場合、ホストVMM10は、仮想CPUの動作モードと、発生した仮想化例外の要因に応じて、シャドウVPDのアーキテクチャ状態1310に書き込むステータスを、ゲストVMMまたはユーザプログラムの何れか一方から選択する。そして、ホストVMM10が物理CPU104bに対してPAL_VPS_RESUMEプロシジャを発行することで、仮想サーバ上でゲストVMMと、このゲストVMMが提供する第2の仮想CPU208a上で稼動するユーザプログラムを切り替えて実行することが可能となり、ゲストVMMは仮想サーバ上で仮想化環境を提供することができる。
なお、上記S81の判定でゲストOSが仮想化機能を利用しない場合は、S94において、前記従来例に示した特許文献1または非特許文献3の記載に準じた仮想マシン処理をホストVMM10で行えばよい。
S94の仮想マシン処理は、例えば、図1に示した仮想サーバ102nのゲストOS111nは既存のOSであり、このゲストOS111nまたはアプリケーション112n(ユーザプログラム110n)が仮想化例外要因の命令を実行すると、上述したように物理CPU104bは仮想化例外の発生をホストVMM10に通知する。
ホストVMM10は、物理CPU104bからの仮想化例外の通知を受けると、ユーザプログラム110n(仮想CPU108n)のステータスを仮想CPU制御データB150のアーキテクチャ状態151に格納する。
ホストVMM10は、仮想化例外の要因となった命令をエミュレートした後、PAL_VPS_RESUMEプロシジャを発行して、制御を仮想CPU108nに移動してユーザプログラム110nの実行を再開する。
このように、第3の実施形態によれば、前記第1実施形態と同様に、仮想化機能を統合した次世代OSと、既存のOSをひとつの物理サーバ101へ統合することが可能となって、物理サーバの数を削減してサーバの運用管理コストを削減することが可能となる。
さらに、上述のように、ホストVMM10は次世代OSに対して仮想CPUがVT−i機能を提供するように見せかけることができ、仮想化ソフトウェアを統合したOSを確実に稼働させることが可能となる。また、本発明のホストVMM10によれば、前記従来例のシミュレータのように、命令列の変換などのオーバーヘッドがなく、仮想計算機の性能を低下させることなく、仮想化機能を統合したOSを仮想サーバで実行することが可能となるのである。
なお、上記各実施形態において、物理CPU104、104a、104bとして記載したプロセッサは、マルチコアプロセッサの構成でも良く、また、ホモジニアスなプロセッサやヘテロジニアスのプロセッサを採用することができる。すなわち、物理CPU104、104a、104bとして複数の汎用プロセッサコア(CPU)と特定用途プロセッサコアを含むヘテロジニアス・マルチコア・プロセッサを用いる場合は、汎用プロセッサコアが仮想化支援機能を備えていれば本発明を適用することができる。
1.
物理プロセッサとメモリを備えた物理計算機で実行されて、複数の仮想プロセッサを提供する仮想化プログラムにおいて、
第1の仮想マシンマネージャが第1の仮想プロセッサを生成する手順と、
前記第1の仮想プロセッサ上で実行される第2の仮想マシンマネージャが第2の仮想プロセッサを生成する手順と、
前記第2の仮想プロセッサがユーザプログラムを実行する手順と、
前記第1の仮想マシンマネージャが、前記物理プロセッサから当該第1の仮想マシンマネージャの呼び出しを受信する手順と、
前記第1の仮想マシンマネージャが、前記第1の仮想マシンマネージャ呼び出しの要因を解析する手順と、
前記第1の仮想マシンマネージャが、前記解析の結果に基づいて前記第2の仮想マシンマネージャと、前記ユーザプログラムのいずれを実行するかを判定する手順と、
前記第1の仮想マシンマネージャが、前記判定の結果に基づいて前記第1の仮想プロセッサに前記第2の仮想マシンマネージャまたは前記ユーザプログラムの一方を実行させる手順と、
を前記物理プロセッサに実行させることを特徴とする仮想化プログラム。
2.
前記第1の仮想マシンマネージャが、前記ユーザプログラムを実行する際の第1の仮想プロセッサの状態を規定する第1の制御情報を前記メモリに設定する手順と、
前記第1の仮想マシンマネージャが、前記第2の仮想マシンマネージャを実行する際の前記第1の仮想プロセッサの状態を規定する第2の制御情報を前記メモリに設定する手順と、
前記第1の仮想マシンマネージャが、前記第2の仮想マシンマネージャまたは前記ユーザプログラムを実行する際の前記物理プロセッサの状態を規定する第3の制御情報を前記メモリに設定する手順と、
をさらに含み、
前記第1の仮想マシンマネージャが、判定の結果に基づいて前記第1の仮想プロセッサに前記第2の仮想マシンマネージャまたは前記ユーザプログラムの一方を実行させる手順は、
前記第1の仮想マシンマネージャが、前記第1の仮想プロセッサに前記ユーザプログラムの実行を開始させるときには、前記第1の制御情報を参照する手順と、
前記第1の仮想マシンマネージャが、前記第1の仮想プロセッサに前記第2の仮想マシンマネージャの実行を開始させるときには、前記第2の制御情報を参照する手順と、
前記第1の仮想マシンマネージャが、前記参照した前記第1の制御情報または第2の制御情報の一方で前記第3の制御情報を更新する手順と、
前記第1の仮想マシンマネージャが、前記物理プロセッサに対して前記第3の制御情報に従って命令の実行を開始するよう指示する第1の制御命令を発行する手順と、
を含むことを特徴とする上記1.に記載の仮想化プログラム。
3.
前記物理プロセッサは、インテル・アーキテクチャー32の命令セットに準拠するプロセッサであって、
前記第1の仮想マシンマネージャが、前記解析の結果に基づいて前記第2の仮想マシンマネージャと、前記ユーザプログラムのいずれを実行するかを判定する手順は、
前記呼び出し要因の解析の結果が、前記第2の仮想マシンマネージャからのVM−entry命令の発行である場合に、前記ユーザプログラムの実行開始と判定し、
前記呼び出し要因の解析の結果が、前記第1の仮想プロセッサから第2の仮想マシンマネージャに対してVM−exitを通知する場合に、前記第2の仮想マシンマネージャの実行開始と判定することを特徴とする上記2.に記載の仮想化プログラム。
4.
前記物理プロセッサは、AMD64の命令セットに準拠するプロセッサであって、
前記第1の仮想マシンマネージャが、前記解析の結果に基づいて前記第2の仮想マシンマネージャと、前記ユーザプログラムのいずれを実行するかを判定する手順は、
前記呼び出し要因の解析の結果が、前記第2の仮想マシンマネージャからのVMRUN命令の発行である場合に、前記ユーザプログラムの実行開始と判定し、
前記呼び出し要因の解析の結果が、前記第1の仮想プロセッサから第2の仮想マシンマネージャに対して#VMEXITを通知する場合に、前記第2の仮想マシンマネージャの実行開始と判定することを特徴とする上記2.に記載の仮想化プログラム。
5.
前記物理プロセッサは、アイテニウム・プロセッサ・ファミリの命令セットに準拠するプロセッサであって、
前記第1の仮想マシンマネージャが、前記解析の結果に基づいて前記第2の仮想マシンマネージャと、前記ユーザプログラムのいずれを実行するかを判定する手順は、
前記呼び出し要因の解析の結果が、前記第2の仮想マシンマネージャからのPAL_VPS_RESUME_HANDLERプロシジャ呼び出しの発行である場合に、前記ユーザプログラムの実行開始と判定し、
前記呼び出し要因の解析の結果が、前記第1の仮想プロセッサから第2の仮想マシンマネージャに対して仮想化例外を通知する場合に、前記第2の仮想マシンマネージャの実行開始と判定することを特徴とする上記2.に記載の仮想化プログラム。
6.
前記第1の仮想マシンマネージャが第1の仮想プロセッサを生成する手順は、
前記第1の仮想プロセッサを複数生成する手順を含み、
前記物理プロセッサの状態を規定する第3の制御情報を前記メモリに設定する手順は、
前記第1の仮想プロセッサ毎に、前記第3の制御情報をそれぞれ前記メモリに設定する手順を含み、
前記第1の仮想マシンマネージャが、前記物理プロセッサに対して前記第3の制御情報に従って命令の実行を開始するよう指示する第1の制御命令を発行する手順は、
前記複数の第3の制御情報のうちの一つを選択する第2の制御命令を発行する手順を含むことを特徴とする上記2.に記載の仮想化プログラム。
7.
前記第2の仮想マシンマネージャが、前記第1の仮想プロセッサで前記第1の制御命令を受付可能か否かを確認する第3の制御命令を発行する手順をさらに含み、
前記第1の仮想マシンマネージャが、前記第1の仮想マシンマネージャ呼び出しの要因を解析する手順は、
前記第1の仮想マシンマネージャ呼び出しの要因が、前記第2の仮想マシンマネージャからの前記第3の制御命令であるときに、予め設定された応答可否情報を参照する手順と、
前記応答可否情報に応じて、前記第3の制御命令に対する応答を決定する手順と、
を含むことを特徴とする上記2.に記載の仮想化プログラム。
8.
前記第1の仮想マシンマネージャが、前記第1の仮想プロセッサに対する設定要求を受信する手順と、
前記第1の仮想マシンマネージャは、前記設定要求に基づいて前記応答可否情報を設定する手順と、
をさらに含むことを特徴とする上記7.に記載の仮想化プログラム。
9.
前記物理プロセッサは、インテル・アーキテクチャー32の命令セットに準拠するプロセッサであって、
前記第3の制御命令は、CPUID命令であることを特徴とする上記7.に記載の仮想化プログラム。
10.
前記第2の仮想マシンマネージャが、前記第1の仮想マシンマネージャから前記第3の制御命令に対する応答を受信する手順と、
前記第2の仮想マシンマネージャが、前記第1の制御命令が前記第1の仮想プロセッサにて受付可能である場合に、前記第1の仮想プロセッサに対して前記第1の制御命令を受付可能に設定する命令を発行する手順と、
を含むことを特徴とする上記9.に記載の仮想化プログラム。
11.
前記第1の仮想マシンマネージャが、前記ユーザプログラムを実行する際の第1の仮想プロセッサの状態を規定する第1の制御情報を前記メモリに設定する手順と、
前記第1の仮想マシンマネージャが、前記第2の仮想マシンマネージャを実行する際の前記第1の仮想プロセッサの状態を規定する第2の制御情報を前記メモリに設定する手順と、
前記第1の仮想マシンマネージャが、前記第2の仮想マシンマネージャまたは前記ユーザプログラムを実行する際の前記物理プロセッサの状態を規定する第3の制御情報を前記メモリに設定する手順と、
をさらに含み、
前記第1の仮想マシンマネージャが、前記解析の結果に基づいて前記第2の仮想マシンマネージャと、前記ユーザプログラムのいずれを実行するかを判定する手順は、
前記解析の結果が、前記第2の仮想マシンマネージャから前記第1の制御情報に対して前記第1の仮想プロセッサの動作状態を反映させる第4の制御命令を第1の仮想マシンマネージャ呼び出しの要因のときに、
前記第1の仮想マシンマネージャが前記物理プロセッサに対して、前記第3の制御情報に前記物理プロセッサの動作状態を反映させる第4の制御命令を発行し、
前記第1の仮想マシンマネージャが前記物理プロセッサの動作状態を反映した前記第3の制御情報を参照し、
前記第1の仮想マシンマネージャが、前記参照した第3の制御情報に基づいて、前記第1の制御情報を更新した後に、前記第2の仮想マシンマネージャの実行を判定することを特徴とする上記1.に記載の仮想化プログラム。
12.
前記物理プロセッサは、インテル・アーキテクチャー32の命令セットに準拠するプロセッサであって、
前記第4の制御命令がVMCLEAR命令であることを特徴とする上記11.に記載の仮想化プログラム。
13.
物理プロセッサとメモリを備えた物理計算機上で複数の仮想プロセッサを提供する仮想計算機システムにおいて、
前記物理プロセッサ上で動作して、第1の仮想プロセッサを提供する第1の仮想マシンマネージャと、
前記第1の仮想プロセッサ上で動作して、ユーザプログラムを実行する第2の仮想プロセッサを提供する第2の仮想マシンマネージャと、を備え、
前記第2の仮想マシンマネージャは、
前記ユーザプログラムを実行する際の第1の仮想プロセッサの状態を規定する第1の制御情報と、前記第2の仮想マシンマネージャを実行する際の前記第1の仮想プロセッサの状態を規定する第2の制御情報とを格納する仮想プロセッサ制御データを有し、
前記第1の仮想マシンマネージャは、
前記第2の仮想マシンマネージャまたは前記ユーザプログラムを実行する際の前記物理プロセッサの状態を規定する第3の制御情報を前記メモリに格納する物理プロセッサ制御データと、
前記物理プロセッサから当該第1の仮想マシンマネージャの呼び出しを受信する受信部と、
前記第1の仮想マシンマネージャ呼び出しの要因を解析し、前記第2の仮想マシンマネージャと、前記ユーザプログラムのいずれを実行するかを判定する判定部と、
前記判定の結果に基づいて、前記仮想プロセッサ制御データの第1の制御情報と第2の制御情報の何れかを選択する選択部と、
前記選択された第1の制御情報または第2の制御情報で、前記物理プロセッサ制御データの第3の制御情報を更新する更新部と、
前記第3の制御情報に基づいて、前記第1の仮想プロセッサに前記第2の仮想マシンマネージャまたは前記ユーザプログラムの一方を実行させる命令を発行する命令発行部と、
を有することを特徴とする仮想計算機システム。
14.
前記物理プロセッサは、インテル・アーキテクチャー32の命令セットに準拠するプロセッサであって、
前記判定部は、
前記第1の仮想マシンマネージャの呼び出し要因の解析の結果が、前記第2の仮想マシンマネージャからのVM−entry命令の発行である場合に、前記ユーザプログラムの実行開始と判定し、
前記第1の仮想マシンマネージャの呼び出し要因の解析の結果が、前記第1の仮想プロセッサから第2の仮想マシンマネージャに対してVM−exitを通知する場合に、前記第2の仮想マシンマネージャの実行開始と判定することを特徴とする上記13.に記載の仮想計算機システム。
15.
前記物理プロセッサは、AMD64の命令セットに準拠するプロセッサであって、
前記判定部は、
前記第1の仮想マシンマネージャの呼び出し要因の解析の結果が、前記第2の仮想マシンマネージャからのVMRUN命令の発行である場合に、前記ユーザプログラムの実行開始と判定し、
前記第1の仮想マシンマネージャの呼び出し要因の解析の結果が、前記第1の仮想プロセッサから第2の仮想マシンマネージャに対して#VMEXITを通知する場合に、前記第2の仮想マシンマネージャの実行開始と判定することを特徴とする上記13.に記載の仮想計算機システム。
16.
前記物理プロセッサは、アイテニウム・プロセッサ・ファミリの命令セットに準拠するプロセッサであって、
前記判定部は、
前記第1の仮想マシンマネージャの呼び出し要因の解析の結果が、前記第2の仮想マシンマネージャからのPAL_VPS_RESUME_HANDLERプロシジャ呼び出しの発行である場合に、前記ユーザプログラムの実行開始と判定し、
前記第1の仮想マシンマネージャの呼び出し要因の解析の結果が、前記第1の仮想プロセッサから第2の仮想マシンマネージャに対して仮想化例外を通知する場合に、前記第2の仮想マシンマネージャの実行開始と判定することを特徴とする上記13.に記載の仮想計算機システム。