(57)【特許請求の範囲】
【請求項１】
ゲストモードおよびホストモードのうちいずれか一方の動作モードで動作するＣＰＵと、
前記ホストモードにおける動作状態、および前記ゲストモードにおける第１および第２の動作状態を保存するメモリと、
前記ゲストモードにおける第１の動作状態において前記ＣＰＵ上で動作するゲストＯＳと、
前記ゲストモードにおける第２の動作状態において前記ＣＰＵ上で動作する仮想マシンモニタと、
前記ホストモードにおいて前記ＣＰＵ上で動作する仮想マシンモニタモニタとを有し、
前記ＣＰＵ上で、前記仮想マシンモニタモニタが、前記ゲストモードにおける第１の動作状態で例外が発生した場合にこの例外を捕捉し、前記第１の動作状態を前記メモリに待避させてその後に前記第２の動作状態を前記メモリから復元し、前記捕捉された例外を前記仮想マシンモニタにインジェクト（注入）して前記仮想マシンモニタに前記例外に対応する処理を行わせると共に、
前記仮想マシンモニタモニタが、前記仮想マシンモニタにおいて発生した例外を捕捉してこの例外が前記ゲストモードにおける動作状態を前記第１の動作状態に戻す命令に基づいて発生した例外であるか否かを判断し、前記第１の動作状態に戻す命令であれば前記ゲストモードにおける動作状態を前記第１の動作状態に戻し、前記第１の動作状態に戻す命令でなければ前記例外を捕捉して処理することを特徴とする、仮想マシンモニタをモニタするコンピュータ。
【請求項２】
前記ＣＰＵが複数個存在し、
前記メモリが、前記ホストモードにおける動作状態および前記ゲストモードにおける第１および第２の動作状態を保存する領域を、前記ＣＰＵに対応してそれぞれ複数個有し、
前記仮想マシンモニタモニタが、前記複数のＣＰＵのうちのいずれかで前記例外を捕捉した場合、前記例外を捕捉した前記ＣＰＵに対応する前記メモリ上の領域に前記動作状態を保存もしくは復元することを特徴とする、請求項１に記載の仮想マシンモニタをモニタするコンピュータ。
【請求項３】
ゲストモードおよびホストモードのうちいずれか一方の動作モードで動作するＣＰＵと、前記ゲストモードおよび前記ホストモードにおける動作状態を記憶する領域を有するメモリと、ゲストＯＳと、仮想マシンモニタと、仮想マシンモニタモニタとを有するコンピュータにおいて前記仮想マシンモニタをモニタする方法であって、
前記メモリに前記ゲストモードにおける第１および第２の動作状態を保存する領域を確保するメモリ領域確保工程と、
前記ゲストモードにおける第１の動作状態において前記ゲストＯＳを動作させるゲストＯＳ動作工程と、
前記ホストモードにおいて前記仮想マシンモニタモニタを動作させるホストＯＳ動作工程と、
前記ゲストモードにおける第１の動作状態で例外が発生した場合、前記ホストモードにおいて前記仮想マシンモニタモニタが前記例外を捕捉する第１の例外捕捉工程と、
前記第１の例外捕捉工程に反応して、前記仮想マシンモニタモニタが前記ゲストモードにおいて動作していた前記第１の動作状態を前記メモリに待避させてその後に前記第２の動作状態を前記メモリから復元し、前記ゲストモードにおける第２の動作状態において前記仮想マシンモニタを動作させる第１の動作状態切り替え工程と、
前記仮想マシンモニタモニタが前記仮想マシンモニタに対して前記捕捉された例外をインジェクト（注入）するインジェクト工程と、
前記仮想マシンモニタにおいて発生した例外を捕捉する第２の例外捕捉工程と、
前記第２の例外捕捉工程において捕捉した例外が前記ゲストモードにおける動作状態を前記第１の動作状態に戻す命令に基づいて発生した例外であるか否かを判断する判断工程と、
前記判断工程において前記第１の動作状態に戻す命令であると判断されたら、前記ゲストモードにおける動作状態を前記第１の動作状態に戻す第２の動作状態切り替え工程と、
前記判断工程において前記第１の動作状態に戻す命令でないと判断されたら、前記例外を捕捉して処理する例外処理工程とを有し、これらの各工程を前記ＣＰＵ上で実現するようにしたことを特徴とする、仮想マシンモニタをモニタする方法。
【請求項４】
前記コンピュータが複数個の前記ＣＰＵを有し、
前記メモリ領域確保工程が、前記ホストモードにおける動作状態および前記ゲストモードにおける第１および第２の動作状態を保存する領域を、前記ＣＰＵに対応してそれぞれ複数個確保し、
前記第１の例外捕捉工程が、前記例外を捕捉したＣＰＵを特定するＣＰＵ特定工程を含み、
前記第１の動作状態切り替え工程が、前記ＣＰＵ特定工程で特定されたＣＰＵに対応する前記メモリ上の領域に前記動作状態を保存もしくは復元することを特徴とする、請求項３に記載の仮想マシンモニタをモニタする方法。
【請求項５】
ゲストモードおよびホストモードのうちいずれか一方の動作モードで動作するＣＰＵと、前記ゲストモードおよび前記ホストモードにおける動作状態を記憶する領域を有するメモリと、ゲストＯＳと、仮想マシンモニタと、仮想マシンモニタモニタとを有するコンピュータに、
前記メモリに前記ゲストモードにおける第１および第２の動作状態を保存する領域を確保するメモリ領域確保処理と、
前記ゲストモードにおける第１の動作状態において前記ゲストＯＳを動作させるゲストＯＳ動作処理と、
前記ホストモードにおいて前記仮想マシンモニタモニタを動作させるホストＯＳ動作処理と、
前記ゲストモードにおける第１の動作状態で例外が発生した場合、前記ホストモードにおいて前記仮想マシンモニタモニタが前記例外を捕捉する第１の例外捕捉処理と、
前記第１の例外捕捉工程に反応して、前記仮想マシンモニタモニタが前記ゲストモードにおいて動作していた前記第１の動作状態を前記メモリに待避させてその後に前記第２の動作状態を前記メモリから復元し、前記ゲストモードにおける第２の動作状態において前記仮想マシンモニタを動作させる第１の動作状態切り替え処理と、
前記仮想マシンモニタモニタが前記仮想マシンモニタに対して前記捕捉された例外をインジェクト（注入）するインジェクト処理と、
前記ＣＰＵが前記仮想マシンモニタにおいて発生した例外を捕捉する第２の例外捕捉処理と、
前記第２の例外捕捉処理において捕捉した例外が前記ゲストモードにおける動作状態を前記第１の動作状態に戻す命令に基づいて発生した例外であるか否かを判断する判断処理と、
前記判断処理において前記第１の動作状態に戻す命令であると判断されたら、前記ゲストモードにおける動作状態を前記第１の動作状態に戻す第２の動作状態切り替え処理と、
前記判断処理において前記第１の動作状態に戻す命令でないと判断されたら、前記例外を捕捉して処理する例外処理と
を実行させることを特徴とする、仮想マシンモニタモニタプログラム。
【請求項６】
前記コンピュータが複数個の前記ＣＰＵを有し、
前記メモリ領域確保処理が、前記ホストモードにおける動作状態および前記ゲストモードにおける第１および第２の動作状態を保存する領域を、前記ＣＰＵに対応してそれぞれ複数個確保し、
前記第１の例外捕捉処理が、前記例外を捕捉したＣＰＵを特定するＣＰＵ特定処理を含み、
前記第１の動作状態切り替え処理が、前記ＣＰＵ特定処理で特定されたＣＰＵに対応する前記メモリ上の領域に前記動作状態を保存もしくは復元することを特徴とする、請求項５に記載の仮想マシンモニタモニタプログラム。
【発明の詳細な説明】
【技術分野】
【０００１】
本発明は、コンピュータの仮想化に関し、特に仮想マシンモニタをさらに仮想化する技術に関する。
【背景技術】
【０００２】
コンピュータの仮想化技術は、コンピュータのＯＳ（オペレーティング・システム）上に仮想的なコンピュータ（仮想マシン、Virtual Machine）をソフトウェア的に構築する技術である。従来の仮想化技術では、コンピュータのＯＳ（ホストＯＳ）の上に仮想マシンモニタ（VMM、Virtual Machine Monitor）と呼ばれるソフトウェアを動作させることによって仮想マシンを構成して、構築された仮想マシンにゲストＯＳとアプリケーションソフトをインストールして動作させている。ただし、この方法だと、ホストＯＳおよびＣＰＵなどのハードウェアに多大な負担がかかる。
【０００３】
そこで、最近では、仮想マシンモニタが担っていた処理の一部をＣＰＵおよびその周辺のハードウェアが担うことにより、より効率的にコンピュータの仮想化を実現可能になっている。このような技術を仮想化支援機能という。具体的には、米国インテル・コーポレーションの「Intel Virtualization Technology（Intel VT）」、米国Advanced Micro Devices（AMD）社の「AMD Virtualization（AMD-V）」などのような技術がある。仮想化支援機能を有するＣＰＵで、ホストＯＳではなく仮想マシンモニタが直接動作し、仮想マシンの管理や、ハードウェアリソースへの調停などを行う。このような仮想マシンモニタは、ハイパーバイザ（Hypervisor）とも呼ばれる。
【０００４】
仮想化支援機能を有するＣＰＵは、仮想マシンモニタによる仮想化処理を支援する目的で、次に示す機能を持つ。ＣＰＵは、ゲストＯＳが動作するためのゲストモードと、仮想マシンモニタが動作するためのホストモードという、２段階の仮想化特権モード（仮想化専用の特権動作モード）を持つ。またＣＰＵは、ゲストＯＳが実行しうる全命令のうち、仮想化が必要な命令（センシティブ命令）の実行条件を定義する。
【０００５】
一方でＣＰＵは、仮想マシンモニタの仮想化処理を支援するための拡張命令を定義する。拡張命令は仮想マシンモニタ専用の命令であり、ゲストＯＳが実行することはない。ゲストモードにおいてセンシティブ命令または拡張命令が実行された場合、ＣＰＵは例外処理を起こしてホストモードに遷移する。
【０００６】
またＣＰＵは、仮想化特権モードごとに実行状態を保持するための領域を主記憶装置（ＲＡＭ）上にもつ。ＣＰＵは、これらの主記憶上の領域をもちいて、仮想化特権モード遷移（ゲストモードとホストモードの相互間での遷移）時の実行状態の退避および復帰を行うことができる。これによって、たとえば、ゲストモードで処理していた内容を、ＣＰＵがホストモードに移行して再びゲストモードに復帰しても失わないで継続することができる。
【０００７】
仮想化支援の技術として、たとえば以下のような技術が開示されている。特許文献１には、複数の仮想マシンモニタのうちのいずれが特権イベントを処理すべきかを判断して該仮想マシンモニタに制御を移行する仮想マシンシステムが開示されている。特許文献２にはホストとゲストがそれぞれの特権レジスタセットを持つ仮想マシンシステムが開示されている。特許文献３にはゲストＯＳが特権命令を実行した場合に例外処理プロセッサを起動する仮想マシンシステムが開示されている。
【０００８】
【特許文献１】特表２００７−５０５４０２号公報
【特許文献２】特開２００５−５６０１７号公報
【特許文献３】特開平０２−１８７８３１号公報
【発明の開示】
【発明が解決しようとする課題】
【０００９】
仮想マシンモニタをさらに仮想化する用途が、現在考えられている。たとえば、仮想マシンモニタの開発テスト環境、仮想マシンにＲＡＳ機能やセキュリティ機能といった付加価値機能を持たせること、異なる種類の複数の仮想マシンモニタを単一のマシン上で同時に稼動するなどの用途である。
【００１０】
しかし、前述のようにＣＰＵは、ゲストモードとホストモードという、２段階の仮想化特権モードしか持たないので、仮想マシンモニタをさらに仮想化する用途には対応していない。単純にソフトウェアによって仮想マシンモニタをさらに仮想化するとしても、ＣＰＵの仮想化支援機能を利用しないソフトウェアのみの仮想化技術と同様に、仮想マシンモニタおよびハードウェアに多大な負担がかかるという問題が発生する。
【００１１】
特許文献１の技術では仮想マシンモニタをさらに仮想化しているが、この処理にはたとえばＣＰＵに３段階以上の仮想化特権モードを持たせるなどのような、特殊なハードウェアおよび特殊な仮想マシンモニタが必要である。これに特許文献２〜３の技術を組み合わせても、仮想マシンモニタをさらに仮想化するには特殊なハードウェアなどが必要であるという点には変わりはない。
【００１２】
本発明の目的は、特殊なゲストＯＳや仮想マシンモニタを必要とせず、２段階の仮想化特権モードしか持たないＣＰＵにおいて仮想マシンモニタをさらに仮想化する仮想マシンモニタモニタ、仮想マシンモニタのモニタ方法、および仮想マシンモニタモニタプログラムを提供することにある。
【課題を解決するための手段】
【００１３】
上記目的を達成するため、本発明に係る仮想マシンモニタをモニタするコンピュータは、ゲストモードおよびホストモードのうちいずれか一方の動作モードで動作するＣＰＵと、ホストモードにおける動作状態、およびゲストモードにおける第１および第２の動作状態を保存するメモリと、ゲストモードにおける第１の動作状態において前記ＣＰＵ上で動作するゲストＯＳと、ゲストモードにおける第２の動作状態において前記ＣＰＵ上で動作する仮想マシンモニタと、ホストモードにおいて前記ＣＰＵ上で動作する仮想マシンモニタモニタとを有し、ＣＰＵ上で、仮想マシンモニタモニタが、ゲストモードにおける第１の動作状態で例外が発生した場合にこの例外を捕捉し、第１の動作状態をメモリに待避させてその後に第２の動作状態をメモリから復元し、捕捉された例外を仮想マシンモニタにインジェクト（注入）して仮想マシンモニタに例外に対応する処理を行わせると共に、仮想マシンモニタモニタが、仮想マシンモニタにおいて発生した例外を捕捉してこの例外がゲストモードにおける動作状態を第１の動作状態に戻す命令に基づいて発生した例外であるか否かを判断し、第１の動作状態に戻す命令であればゲストモードにおける動作状態を第１の動作状態に戻し、第１の動作状態に戻す命令でなければ例外を捕捉して処理することを特徴とする。
【００１４】
上記目的を達成するため、本発明に係る仮想マシンモニタをモニタする方法は、ゲストモードおよびホストモードのうちいずれか一方の動作モードで動作するＣＰＵと、ゲストモードおよびホストモードにおける動作状態を記憶する領域を有するメモリと、ゲストＯＳと、仮想マシンモニタと、仮想マシンモニタモニタとを有するコンピュータにおいて仮想マシンモニタをモニタする方法であって、メモリにゲストモードにおける第１および第２の動作状態を保存する領域を確保するメモリ領域確保工程と、ゲストモードにおける第１の動作状態においてゲストＯＳを動作させるゲストＯＳ動作工程と、ホストモードにおいて仮想マシンモニタモニタを動作させるホストＯＳ動作工程と、ゲストモードにおける第１の動作状態で例外が発生した場合、ホストモードにおいて仮想マシンモニタモニタが例外を捕捉する第１の例外捕捉工程と、第１の例外捕捉工程に反応して、仮想マシンモニタモニタがゲストモードにおいて動作していた第１の動作状態をメモリに待避させてその後に第２の動作状態をメモリから復元し、ゲストモードにおける第２の動作状態において仮想マシンモニタを動作させる第１の動作状態切り替え工程と、仮想マシンモニタモニタが仮想マシンモニタに対して捕捉された例外をインジェクト（注入）するインジェクト工程と、仮想マシンモニタにおいて発生した例外を捕捉する第２の例外捕捉工程と、第２の例外捕捉工程において捕捉した例外がゲストモードにおける動作状態を第１の動作状態に戻す命令に基づいて発生した例外であるか否かを判断する判断工程と、判断工程において第１の動作状態に戻す命令であると判断されたら、ゲストモードにおける動作状態を第１の動作状態に戻す第２の動作状態切り替え工程と、判断工程において第１の動作状態に戻す命令でないと判断されたら、例外を捕捉して処理する例外処理工程とを有し、これらの各工程をＣＰＵ上で実現するようにしたことを特徴とする。
【００１５】
上記目的を達成するため、本発明に係る仮想マシンモニタモニタプログラムは、ゲストモードおよびホストモードのうちいずれか一方の動作モードで動作するＣＰＵと、ゲストモードおよびホストモードにおける動作状態を記憶する領域を有するメモリと、ゲストＯＳと、仮想マシンモニタと、仮想マシンモニタモニタとを有するコンピュータに、メモリにゲストモードにおける第１および第２の動作状態を保存する領域を確保するメモリ領域確保処理と、ゲストモードにおける第１の動作状態においてゲストＯＳを動作させるゲストＯＳ動作処理と、ホストモードにおいて仮想マシンモニタモニタを動作させるホストＯＳ動作処理と、ゲストモードにおける第１の動作状態で例外が発生した場合、ホストモードにおいて仮想マシンモニタモニタが例外を捕捉する第１の例外捕捉処理と、第１の例外捕捉工程に反応して、仮想マシンモニタモニタがゲストモードにおいて動作していた第１の動作状態をメモリに待避させてその後に第２の動作状態をメモリから復元し、ゲストモードにおける第２の動作状態において仮想マシンモニタを動作させる第１の動作状態切り替え処理と、前記仮想マシンモニタモニタが前記仮想マシンモニタに対して前記捕捉された例外をインジェクト（注入）するインジェクト処理と、ＣＰＵが仮想マシンモニタにおいて発生した例外を捕捉する第２の例外捕捉処理と、第２の例外捕捉処理において捕捉した例外がゲストモードにおける動作状態を第１の動作状態に戻す命令に基づいて発生した例外であるか否かを判断する判断処理と、判断処理において第１の動作状態に戻す命令であると判断されたら、ゲストモードにおける動作状態を第１の動作状態に戻す第２の動作状態切り替え処理と、判断処理において第１の動作状態に戻す命令でないと判断されたら、例外を捕捉して処理する例外処理とを実行させることを特徴とする。
【発明の効果】
【００１６】
本発明は、上記したようにゲストモードで動作するゲストＯＳにおいて例外が発生した場合、仮想マシンモニタモニタが該例外を捕捉し、ゲストモードの動作をメモリに待避させて仮想マシンモニタをメモリから復元してから該仮想マシンモニタに捕捉した例外をインジェクトするように構成したので、仮想マシンモニタがゲストＯＳで発生した例外に対応する処理を問題なく行うことができる。これによって、特殊なゲストＯＳや仮想マシンモニタを必要とせず、２段階の仮想化特権モードしか持たないＣＰＵにおいて仮想マシンモニタをさらに仮想化する、従来にない優れた仮想マシンモニタモニタ、仮想マシンモニタのモニタ方法、および仮想マシンモニタモニタプログラムを提供することができる。
【発明を実施するための最良の形態】
【００１７】
［第１の実施の形態］
図１は、本発明の第１の実施の形態に係るコンピュータ１０内部の構成を示すブロック図である。ＣＰＵ１１は、コンピュータ１０の中枢機能を担う演算処理装置で、ＯＳ、ＢＩＯＳ、アプリケーションプログラムなどを実行する。ＣＰＵ１１は、仮想化支援機能に対応しており、ゲストモードとホストモードという２通りの動作モード（仮想化特権モード）を持つ（詳細は後述する）。ＣＰＵ１１は、外部バスを介してチップセットに接続され、そこから各デバイスに接続されて信号の送受を行っている。チップセットは、ＣＰＵブリッジ１３（ノースブリッジ）およびＩ／Ｏブリッジ１９（サウスブリッジ）とからなる。
【００１８】
ＣＰＵブリッジ１３は、メインメモリ１５へのアクセス動作を制御するためのメモリ・コントローラ機能や、バス間のデータ転送速度の差を吸収するためのデータ・バッファ機能などを含む。メインメモリ１５はＣＰＵブリッジ１３に接続され、ＣＰＵ１１が実行するプログラムの読み込み領域、処理データを書き込む作業領域として利用される書き込み可能メモリである。ビデオカード１７はＣＰＵブリッジ１３に接続され、ＣＰＵ１１からの描画命令を受けて描画すべきイメージを生成してディスプレイ（図示せず）に表示させる。
【００１９】
Ｉ／Ｏブリッジ１９は、ＩＤＥ(Integrated Device Electronics)インタフェース、ＵＳＢインタフェース、ＰＣＩバス、ＬＰＣバスなどを備え、各種周辺機器（図示せず）と接続可能である。ＩＤＥインタフェースには、ＨＤＤ（ハードディスクドライブ)２１が接続される。ＨＤＤ２１には、後述する各ソフトウェアがインストールされており、これらのソフトウェアが読み出されてＣＰＵ１１で実行される。
【００２０】
ちなみに、図１は本実施の形態を説明するために、主要なハードウェアの構成および接続関係を簡素化して記載したに過ぎないものである。コンピュータ１０を構成するためには、これら以外にも多くのデバイスが使われるが、それらは当業者には周知であるので詳しく言及しない。また、図１で記載した複数のブロックを１個の集積回路としたり、逆に１個のブロックを複数の集積回路に分割して構成したりすることも、当業者が任意に選択することができる範囲においては本発明の範囲に含まれる。
【００２１】
図２は、図１に開示したメインメモリ１５内部に確保される記憶領域について示すブロック図である。メインメモリ１５には、仮想化支援機能制御領域２３と、ゲスト状態退避領域２５といった領域が確保されている。
【００２２】
仮想化支援機能制御領域２３は、ＣＰＵ１１がゲストモードとホストモードとの間を遷移する際のふるまいを制御するために、あらかじめメインメモリ１５に確保された領域である。仮想化支援機能制御領域２３は、ゲストモード状態２３ａと、ホストモード状態２３ｂとからなる。ゲストモード状態２３ａは、ＣＰＵ１１がゲストモードである際の実行状態である。ホストモード状態２３ｂは、ＣＰＵ１１がホストモードである際の実行状態である。
【００２３】
ＣＰＵ１１がゲストモードからホストモードに遷移すると、ゲストモード状態２３ａの実行状態はそのままで保持され、ホストモード状態２３ｂの実行状態がＣＰＵ１１に操作される。ＣＰＵ１１がホストモードからゲストモードに遷移すると、実行状態はそのままで保持され、ゲストモード状態２３ａの実行状態がＣＰＵ１１に操作される。ＣＰＵ１１の仮想化特権モード遷移に伴う処理は、ＣＰＵ１１がハードウェア的に実行することができる。
【００２４】
ゲスト状態退避領域２５は、複数のゲストモード状態２３ａを書き換える際に、以前の内容を退避するため、ホストモードで動作するソフトウェア（後述の仮想マシンモニタモニタ１００）がメインメモリ１５に確保した領域である。ゲスト状態退避領域２５を有することにより、ＣＰＵ１１はゲストモードにおいて複数の動作状態を保存し、切り替えて実行することができる。なお、ＣＰＵ１１はゲストモードにおいて複数の動作状態を同時に実行することはできない。ゲスト状態退避領域２５において、動作状態の退避および復元の処理は、ホストモードで動作するソフトウェアによって実行することができる。
【００２５】
図３は、図１に開示したコンピュータ１０で実行されるソフトウェアの構成を示す概念図である。本実施の形態においては、図１〜２で述べたハードウェアにおいて、ＣＰＵ１１はホストモードで仮想マシンモニタモニタ１００を実行し、ゲストモードで仮想マシンモニタ１１０およびゲストＯＳ１２０のうちいずれか一方を実行する。
【００２６】
メインメモリ１５のホストモード状態２３ｂには、常に仮想マシンモニタモニタ１００の動作状態が保持される。ゲストモード状態２３ａには、状況に応じて仮想マシンモニタ１１０およびゲストＯＳ１２０のうちの一方の動作状態が保持される。ゲスト状態退避領域２５には、ゲストＯＳ１２０の動作状態を保持するゲストＯＳ状態２５ａと、仮想マシンモニタ１１０の動作状態を保持する仮想マシンモニタ状態２５ｂとからなる。そして仮想マシンモニタモニタ１００は、ゲストモード状態２３ａにおける仮想マシンモニタ１１０とゲストＯＳ１２０との間の動作の切り替えを制御する。
【００２７】
ゲストモードで仮想マシンモニタ１１０が動作している状態からＣＰＵ１１をホストモードに移行し、ゲストモード状態２３ａ上の仮想マシンモニタ１１０の動作状態を仮想マシンモニタ状態２５ｂに待避し、ゲストＯＳ状態２５ａに待避されていたゲストＯＳ１２０の動作状態をゲストモード状態２３ａに復元してからＣＰＵ１１をゲストモードに移行ことにより、コンピュータ１０はゲストモードでゲストＯＳ１２０が動作している状態に遷移することができる。またコンピュータ１０は、この逆の動作によって、ゲストＯＳ１２０が動作している状態から仮想マシンモニタ１１０が動作している状態に遷移することもできる。
【００２８】
以上の構成によって、ゲストＯＳ１２０の動作を仮想マシンモニタ１１０が制御している状態を、さらに仮想マシンモニタモニタ１００によって仮想化するという動作を実現する。ゲストＯＳ１２０および仮想マシンモニタ１１０は、いずれも既存のものであり、本実施の形態のために改変が必要となる部分は特にない。仮想マシンモニタ１１０は、本来はホストモードのＣＰＵで動作することを前提としたものであるが、本実施の形態においてはゲストモードで動作する。
【００２９】
仮想マシンモニタ１１０は、ゲストＯＳ１２０でセンシティブ命令が実行されたことにより発生する例外を捕捉して必要な仮想化処理を行うプログラムコードである、仮想センシティブ命令例外ハンドラ１１１を有する。仮想マシンモニタ１１０がホストモードで動作していれば、仮想センシティブ命令例外ハンドラ１１１は容易にゲストＯＳ１２０で発生した例外を捕捉することができる。しかしながら、本実施の形態においては仮想マシンモニタ１１０はゲストモードで動作し、しかもゲストＯＳ１２０と同時に動作することは不可能である。
【００３０】
そのため、常にホストモードで動作している仮想マシンモニタモニタ１００は、ゲストＯＳ１２０でセンシティブ命令が実行されて例外が発生すると、この例外を捕捉し、ゲストモードの動作状態をゲストＯＳ１２０から仮想マシンモニタ１１０に切り替え、捕捉された例外を仮想マシンモニタ１１０にインジェクト（注入）する処理を行う。これによって、仮想センシティブ命令例外ハンドラ１１１が、ゲストＯＳ１２０で発生した例外を捕捉することができるようになる。
【００３１】
仮想マシンモニタモニタ１００は、擬似ホストモード開始部１０１と、実センシティブ命令例外ハンドラ１０２と、拡張命令例外ハンドラ１０３と、擬似ホストモード終了部１０４と、仮想化支援機能制御部１０５と、ゲスト状態待避制御部１０６とを有する。
【００３２】
擬似ホストモード開始部１０１は、ゲストＯＳ１２０におけるセンシティブ命令の実行により例外が発生した際に、必要な前処理を実施し、続いて仮想マシンモニタ１１０に仮想的な例外をインジェクトするプログラムコードである。なお、ゲストモードで仮想マシンモニタ１１０が動作している状態は、疑似ホストモードとも呼ばれる。
【００３３】
実センシティブ命令例外ハンドラ１０２は、仮想マシンモニタ１１０におけるセンシティブ命令の実行により発生する例外を補足し、必要な仮想化処理をおこなうプログラムコードである。このプログラムコードの実際の処理内容は、仮想センシティブ命令例外ハンドラ１１１と同等である。ただし、ゲストＯＳ１２０で実行されたセンシティブ命令は疑似ホストモードで処理されるので仮想センシティブ命令というのに対して、仮想マシンモニタ１１０で実行されたセンシティブ命令は実際のホストモードで処理されるので実センシティブ命令という。
【００３４】
拡張命令例外ハンドラ１０３は、仮想マシンモニタ１１０における拡張命令の実行により発生する例外を補足し、必要な仮想化処理をおこなうプログラムコードである。擬似ホストモード終了部１０４は、仮想センシティブ命令例外ハンドラ１１１においてゲストＯＳ復帰の拡張命令が実行された際に、必要な後処理を実施し、続いて実際にゲストＯＳ１２０に制御を戻すプログラムコードである。
【００３５】
仮想化支援機能制御部１０５は、ＣＰＵ１１のゲストモードとホストモードとの間の遷移と、それに伴う動作状態の退避および復元の処理を制御する。ゲスト状態待避制御部１０６は、ゲストモードにおける複数の動作状態、ここではゲストＯＳ状態２５ａと仮想マシンモニタ状態２５ｂとの間の動作状態の退避および復元の処理を制御する。
【００３６】
図４および図５は、図３で示したゲストＯＳ１２０におけるセンシティブ命令の実行により例外が発生した際に、仮想マシンモニタモニタ１００および仮想マシンモニタ１１０で実行される処理を示すフローチャートである。図６は、図４で示した処理の間における、動作状態の遷移を示す概念図である。図４の処理が開始される時点では、図６の（ａ）に示すように、ＣＰＵ１１はゲストモードで、ゲストＯＳ１２０を実行している状態である。
【００３７】
ゲストＯＳ１２０が起動すると（Ｓ２０１）、ＣＰＵ１１がゲストＯＳ１２０からの例外発生を待つ状態となる（Ｓ２０２）。ゲストＯＳ１２０からの例外１５０が発生すると、ＣＰＵ１１が自らをホストモードに切り替え、仮想マシンモニタモニタ１００を実行している状態にする（Ｓ２０３）。続いて擬似ホストモード開始部１０１が発生した例外を捕捉し（Ｓ２０４）、ゲスト状態待避制御部１０６を制御して、ゲストＯＳ１２０の動作状態をゲストＯＳ状態２５ａに待避させ（Ｓ２０５）、仮想マシンモニタ状態２５ｂから仮想マシンモニタ１１０の動作状態を復元する（Ｓ２０６）。
【００３８】
続いて擬似ホストモード開始部１０１は、復元された仮想マシンモニタ１１０に対して、Ｓ２０５で捕捉した例外をインジェクトする処理を行い（Ｓ２０７）、続いて仮想化支援機能制御部１０５がＣＰＵ１１をゲストモードに復帰させる（Ｓ２０８）。
【００３９】
この時点ではＣＰＵ１１はゲストモードで、仮想マシンモニタ１１０を実行している状態である。ここで、Ｓ２０５で捕捉した例外をインジェクトされた仮想マシンモニタ１１０では、仮想センシティブ命令例外ハンドラ１１１が動作する（Ｓ２０９）。これにより、図６の（ｂ）に示すように、仮想マシンモニタ１１０はあたかもゲストＯＳ１２０から直接センシティブ命令の例外を受け取ったかのように振舞い、これに対応する処理を行うことができる。
【００４０】
ここで、仮想マシンモニタ１１０がセンシティブ命令もしくは拡張命令を実行して例外が発生した場合（Ｓ２１０）、センシティブ命令による例外であれば、ＣＰＵ１１は自らをホストモードに切り替え（Ｓ２１１）、実センシティブ命令例外ハンドラ１０２が必要な例外処理を行った後（Ｓ２１２）、再び仮想化支援機能制御部１０５がＣＰＵ１１をゲストモードに復帰させる（Ｓ２１３）。
【００４１】
拡張命令による例外であれば、ＣＰＵ１１は自らをホストモードに切り替え（Ｓ２１４）、そして拡張命令例外ハンドラ１０３が、例外の原因となった拡張命令がゲストＯＳ復帰のための拡張命令であるか否かを判断する（Ｓ２１５）。ゲストＯＳ復帰の拡張命令でなければ、拡張命令例外ハンドラ１０３が必要な例外処理を行った後（Ｓ２１６）、再び仮想化支援機能制御部１０５がＣＰＵ１１をゲストモードに復帰させる（Ｓ２１７）。
【００４２】
ゲストＯＳ復帰の拡張命令であれば、擬似ホストモード終了部１０４が、ゲスト状態待避制御部１０６を制御して、仮想マシンモニタ１１０の動作状態を仮想マシンモニタ状態２５ｂに待避させ（Ｓ２１８）、ゲストＯＳ状態２５ａからゲストＯＳ１２０の動作状態を復元する（Ｓ２１９）。その後で仮想化支援機能制御部１０５がＣＰＵ１１をゲストモードに復帰させ（Ｓ２２０）、図４のＳ２０２の状態に戻る。これによって、図６の（ｃ）に示すように、ＣＰＵ１１がゲストモードで、ゲストＯＳ１２０を実行している状態に戻る。
【００４３】
以上の動作により、ゲストＯＳ１２０において発生した例外を、仮想マシンモニタ１１０が捕捉して処理し、再びゲストＯＳ１２０に戻る一連の動作を、仮想マシンモニタ１１０をさらに仮想マシンモニタモニタ１００によって仮想化した環境において問題なく実現できる。その際、仮想マシンモニタ１１０およびゲストＯＳ１２０は、そのような環境に応じた特別な動作を含まないので、従来のものをそのまま使用できる。また、従来の２段階の仮想化特権モードしか持たない仮想化支援機能で、３段階の仮想化特権モードを有する特殊なハードウェアと同等の動作を擬似的に実現しているので、ハードウェアも従来のものをそのまま使用できる。
【００４４】
［第２の実施の形態］
図７は、本発明の第２の実施の形態に係るソフトウェアの構成を示す概念図である。本発明の第２の実施の形態に係るハードウェアは、複数のＣＰＵ３１１ａ〜ｃと、各々のＣＰＵに対応する仮想化支援機能制御領域３２３ａ〜ｃおよびゲスト状態退避領域３２５ａ〜ｃとを有する。その点を除いては、本実施の形態のハードウェアは図１〜２で説明した本発明の第１の実施の形態のものと同一であるので、詳細な説明は省略する。
【００４５】
仮想マシンモニタモニタ４００は、これらのＣＰＵ３１１ａ〜ｃ、仮想化支援機能制御領域３２３ａ〜ｃおよびゲスト状態退避領域３２５ａ〜ｃのすべての管理を受け持つが、その上で複数の仮想マシンモニタ４１０ａ〜ｂおよび複数のゲストＯＳ４２０ａ〜ｂをＣＰＵ３１１ａ〜ｃの境界で分割して、同時に稼働させる。仮想マシンモニタ４１０ａおよびゲストＯＳ４２０ａは、２つのＣＰＵ３１１ａ〜ｂによって動作する。仮想マシンモニタ４１０ｂおよびゲストＯＳ４２０ｂは、１つのＣＰＵ３１１ｃによって動作する。
【００４６】
仮想マシンモニタモニタ４００、仮想マシンモニタ４１０ａ〜ｂ、およびゲストＯＳ４２０ａ〜ｂの内部構成は、本発明の第１の実施の形態に係る仮想マシンモニタモニタ１００、仮想マシンモニタ１１０、およびゲストＯＳ１２０とそれぞれほぼ同一であるので、以下の説明では相違点のみを説明し、それ以外についての詳細な説明は省略する。
【００４７】
仮想マシンモニタモニタ４００がゲストＯＳ４２０ａ〜ｂのいずれかがセンシティブ命令を実行することによって発生した例外を捕捉したら、その例外がいずれのＣＰＵ３１１ａ〜ｃで発生したものであるかを検出し、それに該当するＣＰＵに対応する仮想化支援機能制御領域およびゲスト状態退避領域を選択して、本発明の第１の実施の形態と同一の処理を行う。
【００４８】
図７の例でいうなら、ゲストＯＳ４２０ａがＣＰＵ３１１ａに対してセンシティブ命令を実行したら、仮想マシンモニタモニタ４００はＣＰＵ３１１ａに対応する仮想化支援機能制御領域３２３ａおよびゲスト状態退避領域３２５ａを利用して、仮想マシンモニタ４１０ａの動作状態を復元して、ゲストＯＳ４２０ａで発生した例外をインジェクトする。
【００４９】
ゲストＯＳ４２０ａがＣＰＵ３１１ｂに対してセンシティブ命令を実行したら、仮想マシンモニタモニタ４００はＣＰＵ３１１ｂに対応する仮想化支援機能制御領域３２３ｂおよびゲスト状態退避領域３２５ｂを利用して、仮想マシンモニタ４１０ａの動作状態を復元して、ゲストＯＳ４２０ａで発生した例外をインジェクトする。
【００５０】
ゲストＯＳ４２０ｂがＣＰＵ３１１ｃに対してセンシティブ命令を実行したら、仮想マシンモニタモニタ４００はＣＰＵ３１１ｃに対応する仮想化支援機能制御領域３２３ｃおよびゲスト状態退避領域３２５ｃを利用して、仮想マシンモニタ４１０ｂの動作状態を復元して、ゲストＯＳ４２０ｂで発生した例外をインジェクトする。
【００５１】
以上で示した本発明の第２の実施の形態のように、仮想マシンが構築される環境として想定されることが多い、複数のＣＰＵを有するマルチプロセッサ環境に対しても、本発明は容易に拡張して適用することができる。
【００５２】
これまで本発明について図面に示した特定の実施の形態をもって説明してきたが、本発明は図面に示した実施の形態に限定されるものではなく、本発明の効果を奏する限り、これまで知られたいかなる構成であっても採用することができることは言うまでもないことである。
【産業上の利用可能性】
【００５３】
コンピュータを仮想化させて動作させる環境において利用できる。
【図面の簡単な説明】
【００５４】
【図１】本発明の第１の実施の形態に係るコンピュータ１０内部の構成を示すブロック図である。
【図２】図１に開示したメインメモリ内部に確保される記憶領域について示すブロック図である。
【図３】図１に開示したコンピュータで実行されるソフトウェアの構成を示す概念図である。
【図４】図３で示したゲストＯＳにおけるセンシティブ命令の実行により例外が発生した際に、仮想マシンモニタモニタおよび仮想マシンモニタで実行される処理を示すフローチャートである。
【図５】図４の続きである。
【図６】図４〜５で示した処理の間における、動作状態の遷移を示す概念図である。
【図７】本発明の第２の実施の形態に係るソフトウェアの構成を示す概念図である。
【符号の説明】
【００５５】
１０  コンピュータ
１１、３１１ａ、３１１ｂ、３１１ｃ  ＣＰＵ
１５  メインメモリ
２３、３２３ａ、３２３ｂ、３２３ｃ  仮想化支援機能制御領域
２３ａ  ゲストモード状態
２３ｂ  ホストモード状態
２５、３２５ａ、３２５ｂ、３２５ｃ  ゲスト状態退避領域
２５ａ  ゲストＯＳ状態
２５ｂ  仮想マシンモニタ状態
１００、４００  仮想マシンモニタモニタ
１０１  擬似ホストモード開始部
１０２  実センシティブ命令例外ハンドラ
１０３  拡張命令例外ハンドラ
１０４  擬似ホストモード終了部
１０５  仮想化支援機能制御部
１０６  ゲスト状態待避制御部
１１０、４１０ａ、４１０ｂ  仮想マシンモニタ
１１１  仮想センシティブ命令例外ハンドラ
１２０、４２０ａ、４２０ｂ  ゲストＯＳ
【図１】
0004678396.tif 000002
【図２】
0004678396.tif 000003
【図３】
0004678396.tif 000004
【図４】
0004678396.tif 000005
【図５】
0004678396.tif 000006
【図６】
0004678396.tif 000007
【図７】
0004678396.tif 000008