(57)【要約】【課題】論理区画上で稼動するＯＳで例外が発生した場合に、オーバーヘッドの発生を抑制しながら他の論理区画に影響を与えることのない仮想計算機システムを提供する。【解決手段】ハイパーバイザによって物理計算機を複数の論理区画に分割し、各論理区画上でＯＳを動作させる仮想計算機のプログラムであって、前記物理計算機で発生した例外または割り込みを検知する手順Ｓ１と、前記検知した例外または割り込みの発生した論理区画上のＯＳを特定する手順Ｓ２と、前記特定されたＯＳが格納された記憶領域から、前記例外または割り込みの対象となる命令を含む所定の記憶領域を、前記ハイパーバイザが管理する記憶領域へ複写する手順Ｓ４と、前記複写した記憶領域で、前記例外または割り込みの対象となる命令を、当該命令を代行する命令に置き換える手順Ｓ６と、前記物理計算機が命令を実行する位置を、前記複写した記憶領域に移動する手順Ｓ７と、を含む。【選択図】図５
2006155272.tif 000002
【特許請求の範囲】
【請求項１】
ハイパーバイザによって物理計算機を複数の論理区画に分割し、各論理区画上でＯＳを動作させる仮想計算機のプログラムであって、
前記物理計算機で発生した例外または割り込みを検知する手順と、
前記検知した例外または割り込みの発生した論理区画上のＯＳを特定する手順と、
前記特定されたＯＳが格納された記憶領域から、前記例外または割り込みの対象となる命令を含む所定の記憶領域を、前記ハイパーバイザが管理する記憶領域へ複写する手順と、
前記複写した記憶領域で、前記例外または割り込みの対象となる命令を、当該命令を代行する命令に置き換える手順と、
前記物理計算機が命令を実行する位置を、前記複写した記憶領域に移動する手順と、
を物理計算機に機能させることを特徴とするプログラム。
【請求項２】
前記例外または割り込みの対象となる命令を代行する命令に置き換える手順は、
前記ハイパーバイザが管理する記憶領域に、前記例外または割り込みの対象となる命令を代行するエミュレータを設定する手順と、
前記複写した記憶領域で、前記例外または割り込みの対象となる命令を前記エミュレータを呼び出すＣＡＬＬ命令に置き換える手順と、を含むことを特徴とする請求項１に記載のプログラム。
【請求項３】
前記エミュレータを設定する手順は、
前記例外または割り込みの対象となる命令の種類毎に当該命令を代行する処理部をそれぞれ備えたエミュレータを、前記ハイパーバイザが管理する記憶領域に予め配置する手順と、を含み、
前記ＣＡＬＬ命令は、前記命令の種類に対応した前記処理部を呼び出す命令であることを特徴とする請求項２に記載のプログラム。
【請求項４】
前記エミュレータを設定する手順は、
前記例外または割り込みの対象となる命令を代行するエミュレータを生成する手順と、
前記生成したエミュレータをハイパーバイザが管理する記憶領域に配置する手順と、
を含むことを特徴とする請求項２に記載のプログラム。
【請求項５】
前記例外または割り込みの対象となる命令を代行する命令に置き換える手順は、
前記例外または割り込みの対象となる命令を代行する命令列を生成する手順と、
前記複写した記憶領域で、前記例外または割り込みの対象となる命令を前記生成した命令列に置き換える手順と、
を含むことを特徴とする請求項１に記載のプログラム。
【請求項６】
前記ハイパーバイザは、物理計算機の記憶装置の物理アドレス空間を所定の記憶領域をページとして管理し、物理アドレス空間と仮想アドレス空間の対応関係を設定するページテーブルを有し、
前記ハイパーバイザが管理する記憶領域へ複写する手順は、前記特定されたＯＳが格納された記憶領域から、前記例外または割り込みの対象となる命令を含むページをハイパーバイザが管理する記憶領域へ複写することを特徴とする請求項１に記載のプログラム。
【請求項７】
前記例外または割り込みを検知する手順は、
予め設定したエミュレート対象命令のみを検知することを特徴とする請求項１に記載のプログラム。
【請求項８】
前記エミュレータは、前記例外または割り込みの対象となる命令の代行中に、物理計算機を構成するＣＰＵの特定のレジスタに対する命令を代行する手順を含むことを特徴とする請求項２または請求項５に記載のプログラム。
【請求項９】
前記特定のレジスタは、前記エミュレータが使用中のレジスタであることを特徴とする請求項８に記載のプログラム。
【請求項１０】
ハイパーバイザによって物理計算機を複数の論理区画に分割し、各論理区画上でＯＳを動作させる仮想計算機の制御方法であって、
前記物理計算機で発生した例外または割り込みを前記ハイパーバイザ使用領域Ｖｍｈのコピーが検知する処理と、
前記検知した例外または割り込みの発生した論理区画上のＯＳを前記ハイパーバイザが特定する処理と、
前記特定されたＯＳが格納された記憶領域から、前記例外または割り込みの対象となる命令を含む所定の記憶領域を、前記ハイパーバイザが管理する記憶領域へ複写する処理と、
前記複写した記憶領域で、前記ハイパーバイザが、前記例外または割り込みの対象となる命令を、当該命令を代行する命令に置き換える処理と、
前記物理計算機が命令を実行する位置を、前記ハイパーバイザが前記複写した記憶領域に移動する処理と、
を含むことを特徴とする仮想計算機の制御方法。
【請求項１１】
前記例外または割り込みの対象となる命令を代行する命令に置き換える処理は、
前記ハイパーバイザが管理する記憶領域に、前記例外または割り込みの対象となる命令を代行するエミュレータを設定する処理と、
前記複写した記憶領域にで、前記例外または割り込みの対象となる命令を前記エミュレータを呼び出すＣＡＬＬ命令に置き換える処理と、
を含むことを特徴とする請求項１０に記載の仮想計算機の制御方法。
【請求項１２】
前記エミュレータを設定する処理は、
前記例外または割り込みの対象となる命令の種類毎に当該命令を代行する処理部をそれぞれ備えたエミュレータを、前記ハイパーバイザが管理する記憶領域に予め配置する処理、を含み、
前記ＣＡＬＬ命令は、前記命令の種類に対応した前記処理部を呼び出す命令であることを特徴とする請求項１１に記載の仮想計算機の制御方法。
【請求項１３】
前記エミュレータを設定する処理は、
前記例外または割り込みの対象となる命令を代行するエミュレータを生成する処理と、
前記生成したエミュレータをハイパーバイザが管理する記憶領域に配置する処理と、
を含むことを特徴とする請求項１１に記載のプログラム。
【請求項１４】
前記例外または割り込みの対象となる命令を代行する命令に置き換える処理は、
前記例外または割り込みの対象となる命令を代行する命令列を生成する処理と、
前記複写した記憶領域にで、前記例外または割り込みの対象となる命令を前記生成した命令列に置き換える処理と、
を含むことを特徴とする請求項１０に記載の仮想計算機の制御方法。
【請求項１５】
前記ハイパーバイザは、物理計算機の記憶装置の物理アドレス空間を所定の記憶領域をページとして管理し、物理アドレス空間と仮想アドレス空間の対応関係を設定するページテーブルを有し、
前記ハイパーバイザが管理する記憶領域へ複写する処理は、前記特定されたＯＳが格納された記憶領域から、前記例外または割り込みの対象となる命令を含むページをハイパーバイザが管理する記憶領域へ複写することを特徴とする請求項１０に記載の仮想計算機の制御方法。
【請求項１６】
前記例外または割り込みを検知する処理は、
予め設定したエミュレート対象命令のみを検知することを特徴とする請求項１０に記載の仮想計算機の制御方法。
【請求項１７】
前記エミュレータは、前記例外または割り込みの対象となる命令の代行中に、物理計算機を構成するＣＰＵの特定のレジスタに対する命令を代行する手順を含むことを特徴とする請求項１０または請求項１４に記載の仮想計算機の制御方法。
【請求項１８】
前記特定のレジスタは、前記エミュレータが使用中のレジスタであることを特徴とする請求項１７に記載の仮想計算機の制御方法。
【発明の詳細な説明】
【技術分野】
【０００１】
本発明は、仮想計算機システムに関し、複数の論理区画でそれぞれＯＳを実行する際に特権例外や割り込みが発生した場合の仮想計算機システムの処理技術に関する。
【背景技術】
【０００２】
インターネットや広域ネットワークを用いたビジネスの普及に伴って、ビジネスを支援する情報システムの処理能力を向上する要求が高まっている。この処理能力向上の要求に対して、複数のサーバ（計算機）を用いて情報処理が行われている。サーバの数は、処理能力の向上に応じて増加し、数千から数万台規模のサーバからなる大規模な情報システムも構築されている。このような大規模な情報システムでは、各サーバの保守に伴う運用管理コストが、サーバの使用台数に比例して増大する。
【０００３】
この運用管理コストの増大を抑制するため、複数のサーバで行っていた処理を、少数の高性能サーバに集約し、サーバの数を低減するサーバ統合という手法が注目されている。このサーバ統合を実現するために、一つのハードウェアリソースを複数の論理区画に分割し、各論理区画上でそれぞれＯＳを提供し、それぞれサーバとして利用する論理分割を用いた仮想計算機システムが知られている（例えば、特許文献１）。論理分割は、ＣＰＵを複数の論理区画で共有することで、ＣＰＵの稼働率を高めることができ、効率的にサーバ統合を実現できるという特徴がある。
【０００４】
上記特許文献１の従来例では、一つのサーバ上で一つのホストＯＳを実行し、このホストＯＳ上で複数のゲストＯＳを稼動させ、各ゲストＯＳをそれぞれサーバとすることで、サーバ統合を実現している。
【特許文献１】米国特許第６，３９７，２４２号
【発明の開示】
【発明が解決しようとする課題】
【０００５】
ところで、上記論理分割では一方の論理区画の動作により、他の論理区画に影響を与えないようにする必要がある。このため、ゲストＯＳの特権レベルは非特権あるいは特権レベルが低い値に設定され、ゲストＯＳがＣＰＵに対する特権命令を使用するのを抑制する。これにより、一方の論理区画で稼動するゲストＯＳが、他の論理区画へ影響を与えることを防止している。
【０００６】
しかし、ゲストＯＳの命令列中には、非特権あるいは低い特権レベルで動作させると正常に動作することのできない命令（特権命令）が含まれる（例えば、Page Faultや命令TLBミス等）。一般的に、特権命令を非特権あるいは低い特権レベルで実行すると、特権例外のエラーを発生する。この特権例外によりホストＯＳと他の論理区画へ影響を与えることになる。
【０００７】
ゲストＯＳの命令列中に存在する特権命令に対処するため、上記特許文献１の従来例では、ホストＯＳとゲストＯＳの中間層にゲストＯＳの命令列を解釈する仮想マシーンモニタを設けている。この仮想マシーンモニタは、命令列中に特権命令がある場合、この特権命令を新たな命令列に生成し直すバイナリトランスレーションを行う。そして、バイナリトランスレーションの結果（新たな命令列）を使用するか、ゲストＯＳの命令列を直接実行するかを決定し、何れか一方を選択してＣＰＵに実行させる。
【０００８】
しかしながら、上記特許文献１の従来例では、ゲストＯＳの命令列中に特権命令があると、バイナリトランスレーションを行って新たな命令列を生成した後に、ゲストＯＳの命令列と新たな命令列のどちらを選択するか判定していた。このため、特権命令がある場合は、ゲストＯＳの実行の際にバイナリトランスレーションの結果とゲストＯＳの命令の選択処理を行わねばならず、この選択処理はゲストＯＳのオーバーヘッドとなり、ゲストＯＳの性能が低下する場合があった。また、特権命令がゲストＯＳの命令列中に存在し、上記選択処理の結果、ゲストＯＳの命令を直接ＣＰＵに実行させる場合には、バイナリトランスレーションと選択処理が無駄になり、そのままオーバーヘッドとなってしまう、という問題があった。
【０００９】
そこで本発明は、上記問題点に鑑みてなされたもので、論理区画上で稼動するＯＳで例外や割り込みが発生した場合に、オーバーヘッドの発生を抑制しながら他の論理区画に影響を与えることのない仮想計算機システムを提供することを目的とする。
【課題を解決するための手段】
【００１０】
本発明は、ハイパーバイザによって物理計算機を複数の論理区画に分割し、各論理区画上でＯＳを動作させる仮想計算機のプログラムであって、前記物理計算機で発生した例外または割り込みを検知する手順と、前記検知した例外または割り込みの発生した論理区画上のＯＳを特定する手順と、前記特定されたＯＳが格納された記憶領域から、前記例外または割り込みの対象となる命令を含む所定の記憶領域を、前記ハイパーバイザが管理する記憶領域へ複写する手順と、前記複写した記憶領域で、前記例外または割り込みの対象となる命令を、当該命令を代行する命令に置き換える手順と、前記物理計算機が命令を実行する位置を、前記複写した記憶領域に移動する手順と、を備え、例外または割り込みの発生した論理区画上のＯＳに代わってハイパーバイザが、検知した例外または割り込みを代行する。
【発明の効果】
【００１１】
したがって、本発明は、例外や割り込みが発生すると、例外または割り込みの対象となる命令を代行する命令（エミュレータ）に置き換えて、ハイパーバイザが処理することでそれ以上の特権例外の発生を防ぐことが可能となり仮想計算機の処理速度の向上を図ることができる。
【００１２】
また、ハイパーバイザは、例外または割り込みの対象となる命令を代行する命令（エミュレータ）に置き換えるだけであるので、前記従来例のように、バイナリトランスレーション後に、実行する命令の判定等を行う必要がないので、例外や割り込み処理のオーバーヘッドを大幅に短縮でき、仮想計算機の処理速度を向上できるという顕著な効果を有するのである。
【発明を実施するための最良の形態】
【００１３】
以下、本発明の一実施形態を添付図面に基づいて説明する。
【００１４】
図１は、本発明の第１の実施形態を示し、仮想計算機システムを動作させる物理計算機２００の構成を示す。
【００１５】
物理計算機２００は、複数のＣＰＵ２０１−０〜２０１−３を有し、これらのＣＰＵはフロントサイドバス２０２を介してブリッジ（またはメモリコントローラあるいはチップセット）２０３に接続される。
【００１６】
ブリッジ２０３には、メモリバス２０４を介してメモリ（主記憶）２０５が接続され、また、バス２０６を介してＩ／Ｏインターフェース２０７が接続される。Ｉ／Ｏインターフェース２０７には、Ｉ／Ｏデバイスが接続される。このＩ／Ｏデバイスとしては、例えば、ＬＡＮ２１３に接続されるネットワークアダプタ（図示省略）、ディスク装置２１４、ＳＡＮ（Storage  Area  Network）２１５に接続されるファイバーチャネルアダプタ（図示省略）やディスプレイ（図示省略）等からなる。
【００１７】
ＣＰＵ２０１−０〜２０１−３はブリッジ２０３を介してメモリ２０５やＩ／Ｏインターフェース２０７にアクセスを行って所定の処理を行う。
【００１８】
なお、物理計算機２００を構成するＣＰＵは１つでも良いし、２つ以上であっても良い。また、同様にＣＰＵは、単一のコアで構成されていても良いし、複数のコアで構成されていても良い。
【００１９】
次に、物理計算機２００上で仮想計算機を実現するソフトウェアについて、図２を参照しながら詳述する。
【００２０】
図２において、物理計算機２００上では、ハードウェアリソース（計算機資源）を論理的に分割して論理区画（ＬＰＡＲ：Logical PARtition）を管理するハイパーバイザ（ファームウェアまたはミドルウェア）１０が稼動している。ハイパーバイザ１０は、物理計算機２００のハードウェアリソース）を複数の論理区画（ＬＰＡＲ）に分割し、計算機資源の割り当てを管理する制御ソフトウェアである。
【００２１】
ハイパーバイザ１０は、物理計算機２００の計算機資源を、ユーザに提供する論理区画であるＬＰＡＲ＃０〜＃ｎ（図中１１−０〜１１−ｎ）に分割する。ＬＰＡＲ＃０〜＃ｎでは、それぞれユーザが利用するＯＳ（以下、ユーザＯＳ）＃０〜＃ｎ（図中２０−０〜２０−ｎ）が稼動し、各ユーザＯＳ＃０〜＃ｎ上ではユーザアプリケーション２１−１〜２１−ｎがそれぞれ実行される。なお、ＬＰＡＲ＃０〜＃ｎの設定は、管理者などが図示しないコンソールなどからハイパーバイザ１０に指示して設定したものである。
【００２２】
ハイパーバイザ１０は、割り当てたＬＰＡＲ＃０〜＃ｎ上のユーザＯＳ＃０〜＃ｎでハードウェア（物理計算機２００）リソースの共有を行う。ここで、本実施形態では、複数のＣＰＵ２０１−０〜ｎを含むハードウェアリソースを複数のＬＰＡＲ＃０〜＃ｎ上のユーザＯＳ＃０〜＃ｎで共有する場合を示す。
【００２３】
ハイパーバイザ１０には、ユーザＯＳ＃０〜＃ｎの命令列を解釈し、後述する特権例外（または割り込み）が生じるときには、この特権命令を他の命令に置き換えて実行するエミュレータ１０１（図中１０１−０〜１０１−ｎ）と、物理計算機２００のメモリ２０５（またはディスク装置２１４）の物理アドレス空間を、連続した仮想アドレス（または論理アドレス）空間に置き換えて各ＬＰＡＲ＃０〜＃ｎに割り当てるＶＭＭ（Vertulal Memory Manager）１０２とを含む。
【００２４】
なお、ＣＰＵ２０１−０〜３は、それぞれ各種レジスタやバッファを備えており、例えば、次のように構成される。
【００２５】
命令ＴＬＢ（Translation Lookaside Buffer）２１１：命令に対する仮想アドレスと物理アドレスの変換結果をキャッシュし、命令ＴＬＢに存在する仮想アドレスに対応する物理アドレスを返すバッファ。なお、図示はしないが、データに対する仮想アドレスと物理アドレスの変換結果をキャッシュするデータＴＬＢを備えていても良い。
【００２６】
ＩＰ（Instruction Pointer）２１２：命令の実行位置（仮想アドレス）をカウントするレジスタ
汎用レジスタ２１３：複数のレジスタＧＲ０〜ＧＲｎより構成されて、ユーザＯＳ＃０〜＃ｎやアプリケーション２１−０〜ｎから利用可能なレジスタ
ＰＳＲ（Processor Status Register）２１４：ＣＰＵの状態を示すフラグを設定するレジスタ
以上の他、アプリケーションレジスタ、コントロールレジスタ（ＣＲ）等が設けられる。
【００２７】
そして、ＣＰＵ２０１−０〜３は、ハードウェアリソースまたはソフトウェアリソースに対するアクセスを制御するため、実行する命令の仮想アドレスなどに基づいて特権レベルを設定する。この特権レベルは、例えば、０〜３で構成され、特権レベル＝０が最も高い特権レベルを示し、特権レベル＝３が最も低い特権を示す。例えば、特権レベル０では上記ＰＳＲ２４へアクセすることができるが、特権レベル３では上記ＰＳＲ２４へアクセスすることはできず、特権例外が発生する。
【００２８】
ハイパーバイザ１０は、ユーザＯＳ＃０〜＃ｎに非特権レベルあるいは低い特権レベル（例えば、特権レベル３）を割り当てる。そして、ハイパーバイザ１０自身は、最も高い特権レベル０に割り当てて、ハードウェアリソースまたはソフトウェアリソースに自由にアクセスを行って、物理計算機２００を複数のユーザＯＳ＃０〜＃ｎで共有する。つまり、ハイパーバイザ１０は、ユーザＯＳ＃０〜＃ｎの特権レベルを低くすることで、ユーザＯＳ＃０〜＃ｎが直接的にハードウェアリソース等（例えば、ＣＰＵのレジスタ）を操作するのを防ぐことで、あるユーザＯＳがハードウェアリソースの設定を変更した結果、他のユーザＯＳが正常に作動できなくなるのを防いだり、あるユーザＯＳに障害が生じた場合に、他のユーザＯＳに影響が波及するのを回避するのである。
【００２９】
ここで、仮想アドレス空間と物理アドレス空間の関係を図３に示す。
【００３０】
ハイパーバイザ１０のＶＭＭ１０２は、図３のように、物理アドレス空間２０５０を連続した仮想アドレス空間２０６０に置き換えるページテーブル１１０を備える。ページテーブル１１０は、予め設定したページサイズ（例えば、４Ｋbyte）を単位として仮想アドレス空間２０６０と物理アドレス空間２０５０の対応関係を管理する。
【００３１】
例えば、図示のように、仮想アドレス空間２０６０を仮想アドレスが連続した複数の仮想記憶領域Ｖｍ０〜Ｖｍｎ及びＶｍｈに分割し、仮想記憶領域Ｖｍ０をＬＰＡＲ＃０に割り当て、仮想記憶領域Ｖｍ１をＬＰＡＲ＃１に、仮想記憶領域ＶｍｎをＬＰＡＲ＃ｎに割り当て、さらに、ハイパーバイザ１０が使用する領域として仮想記憶領域Ｖｍｈを割り当てる。図中、仮想記憶領域Ｖｍ０には、ユーザＯＳ＃０が格納され、仮想記憶領域Ｖｍ１にはユーザＯＳ＃１が格納されており、仮想記憶領域Ｖｍｈはハイパーバイザ１０が使用する領域（以下、ハイパーバイザ使用領域）として割り当てられている。
【００３２】
そして、上記ページテーブル１１０は、例えば、ハイパーバイザ１０がワーク領域や後述するエミュレータ１０１−０〜ｎを使用する仮想記憶領域Ｖｍｈに格納される。
【００３３】
そして、ＶＭＭ１０２は、ユーザＯＳ＃０〜＃ｎからアクセス要求があると、要求のあった仮想アドレスに対して、ページテーブル１１０からこの仮想アドレスが対応する物理アドレスを検索する。そして、ＶＭＭ１０２は、検索した物理アドレスに対してメモリアクセスを行って、ユーザＯＳ＃０〜＃ｎにアクセス結果を引き渡す。なお、仮想記憶領域は連続したアドレスで構成されるが、仮想アドレスに対応する物理アドレスは不連続な場合が多く、例えば、図３において、ユーザＯＳ＃０が格納されている仮想記憶領域Ｖｍ０は、図示のように物理アドレス空間２０５０上で４つのブロックに分かれ、不連続となっているが、仮想アドレス空間２０６０上では連続したアドレスとなっている。したがって、インストラクションポインタＩＰ２２に仮想アドレスをセットすれば、仮想アドレス空間上で連続的なアクセスを行うことになる。
【００３４】
ＣＰＵ２０１−０〜２０１−３は、図２に示したように上記ページテーブル１１０をキャッシュするＴＬＢ２１１を備えており、１度アクセスのあった仮想アドレスと物理アドレスの変換を高速に行うことができる。
【００３５】
次に、ユーザＯＳ＃０〜＃ｎと特権レベルの関係について説明する。
【００３６】
ハイパーバイザ１０は、上述のようにユーザＯＳ＃０〜＃ｎに非特権あるいは低い特権レベルを割り当てて、ユーザＯＳ＃０〜＃ｎが直接ハードウェアリソース等を操作するのを防ぎ、あるユーザＯＳで障害が発生した場合に、他のユーザＯＳに影響を与えるのを防止している。
【００３７】
しかしながら、ユーザＯＳ＃０〜＃ｎの命令列中には、特権レベル０でなければ実行できない命令（特権命令）が存在する場合がある。ユーザＯＳ＃０〜＃ｎに割り当てられた特権レベルは非特権あるいは低い特権レベルであるので、このままユーザＯＳ＃０〜＃ｎが特権命令を実行しようとすると、特権例外が発生する。
【００３８】
そこで、本発明のハイパーバイザ１０では、ユーザＯＳ＃０〜＃ｎが特権命令を実行するときに、エミュレータ１０１（図３の１０１０〜１０１−ｎがこの特権命令を他の命令（例えば、エミュレータ１０１のCALL命令）に置き換えてＣＰＵ２０１−０〜３に実行させる。このエミュレータ１０１は、図３で示すように、仮想記憶領域のうちハイパーバイザ使用領域ＶｍｈでユーザＯＳ＃０〜＃ｎ毎にそれぞれ設定されたもので、各ユーザＯＳ＃０〜＃ｎ毎にエミュレータ１０１−０〜１０１−ｎが割り当てられる。すなわち、ユーザＯＳ＃０の特権命令はエミュレータ１０１−０〜ｎで処理を行い、ユーザＯＳ＃１の特権命令はエミュレータ１０１−１で処理する。つまり、エミュレータ１０１−０〜１０１−ｎはユーザＯＳ毎（ＬＰＡＲ毎）に独立しており、特権命令を同時に処理する場合の変数状態などの混乱を回避する。なお、以下では、エミュレータの総称をエミュレータ１０１とし、ユーザＯＳ毎のエミュレータを１０１−０〜ｎの添え字を付して示す。
【００３９】
また、各エミュレータ１０１−０〜１０１−ｎは、仮想記憶領域のハイパーバイザ使用領域Ｖｍｈに予め格納されていても良いし、ユーザＯＳが特権命令を実行しようとする度に、ハイパーバイザ１０がこのユーザＯＳに対応するエミュレータ１０１を、ハイパーバイザ使用領域Ｖｍｈに生成するようにしてもよい。なお、以下の説明では、図３で示したように、各ユーザＯＳ＃０〜＃ｎに対応したエミュレータ１０１−０〜１０１−ｎは、ハイパーバイザ使用領域Ｖｍｈに予め格納されている場合を示す。
【００４０】
ここで、エミュレータ１０１は、図４で示すように、特権命令の種類や割り込みに応じた処理部を有しており、エミュレータ１０１の呼び出しアドレスＡ〜Ｇに応じて異なる処理部が起動する。ハイパーバイザ１０は、エミュレータ１０１の呼び出しアドレスを、特権例外や割り込み命令の種類に応じたアドレスに設定し、エミュレータ１０１を呼び出す。
【００４１】
呼び出しアドレスの一例としては、例えば、呼び出しアドレスＡの場合には、命令ＴＬＢミス処理部１０１１が起動して、特権例外のひとつである命令ＴＬＢがヒットしなかった場合の処理が、予め設定された手順により実行される。また、呼び出しアドレスＢの場合には、PageFault処理部１０１２が起動して、特権例外のひとつであるページ違反が発生したときの処理が、予め設定された手順により実行される。呼び出しアドレスＣの場合には、ＰＳＲ（Processor Status Register）処理部１０１３が起動して、特権例外のひとつであるＰＳＲ２４に対する操作をエミュレートする処理が、予め設定された手順により実行される。
【００４２】
呼び出しアドレスＤ〜Ｆは、ＰＳＲ２４と同様に特権レベルでのみ操作可能なＣＰＵの各レジスタ操作をエミュレートする処理が起動する。例えば、呼び出しアドレスＤはページテーブルのアドレスや割り込みアドレスなどを管理するContorol Registerに対する操作をエミュレートする処理（ＣＲ処理部１０１４）が起動し、呼び出しアドレスＥはデバッグ操作を管理するDebug Brakepoint Registerに対する操作をエミュレートする処理（ＤＢＲ処理部１０１５）５起動し、呼び出しアドレスＦは、命令ＴＬＢの検索を行うために使用されるRegion Registerに対する操作をエミュレートする処理（ＲＲ処理部１０１６）が起動する。
【００４３】
また、呼び出しアドレスＧは予め設定された割り込み命令をエミュレートする処理（割り込み処理部１０１６）が起動する。
【００４４】
ここで、ハイパーバイザ１０は、エミュレートするユーザＯＳと、エミュレートする命令とを予め設定し、エミュレートの条件が成立したときにエミュレータ１０１を呼び出す。例えば、エミュレートするユーザＯＳについては、ページテーブル１１０（あるいはＶＭＭ１０２）に予めフラグなどを立てて設定しておくことができる。
【００４５】
次に、ハイパーバイザ１０がエミュレータ１０１を起動する手順について、図５のフローチャートを参照しながら説明する。
【００４６】
図５は、命令ＴＬＢミスやページ違反などの特権例外が発生したときに、ハイパーバイザ１０が実行するエミュレート処理の一例を示す。なお、ハイパーバイザ１０は、上述のようにハードウェアリソースを各ＬＰＡＲに分配し、各ＬＰＡＲ上のユーザＯＳ＃０〜＃ｎにハードウェアリソースを共有させるため、予め設定した例外や割り込みを検知する機能を有している。
【００４７】
ハイパーバイザ１０は、予め設定した特権例外が発生すると、Ｓ１で特権例外が発生した仮想アドレスを取得する。なお、ＣＰＵ２０１−０〜３等から特権例外が発生した物理アドレスを取得した場合には、この物理アドレスをページテーブル１１０で仮想アドレスに変換する。
【００４８】
Ｓ２では、ハイパーバイザ１０は、ページテーブル１１０を参照し、上記Ｓ１で取得した仮想アドレスにユーザＯＳが存在するか否かを判定する。ハイパーバイザ１０が管理する仮想アドレス空間の該当アドレスにユーザＯＳが存在すればＳ３へ進み、存在しない場合にはＳ９に進む。このＳ９では、各ユーザＯＳ＃０〜ｎに特権例外が発生したことを通知して処理を終了する。
【００４９】
Ｓ３では、ユーザＯＳが存在する仮想アドレスが、エミュレータ１０１によるエミュレート対象に設定されているか否かを判定する。特権例外が発生した仮想アドレスがエミュレート対象であればＳ４へ進み、エミュレート対象でなければＳ１０に進む。Ｓ１０では、ハイパーバイザ１０はエミュレートを行わず、ＴＬＢ２１１に特権例外が発生したアドレスをセットして実行する。
【００５０】
Ｓ４では、ハイパーバイザ１０が該当するユーザＯＳに代わって発生した特権例外のエミュレートを実行する。
【００５１】
ハイパーバイザ１０は、ページテーブル１１０を参照して特権例外が発生した仮想アドレスが含まれるページを、ハイパーバイザ使用領域Ｖｍｈの空き領域にコピーする。
【００５２】
次に、Ｓ５において、ハイパーバイザ１０は、ハイパーバイザ使用領域Ｖｍｈにコピーした上記ページの命令列を検索し、予め設定したエミュレート対象の命令を抽出する。この抽出は、例えば、エミュレート対象命令を予め設定したバイナリコードのテーブルとして設定しておき、コピーしたページの該当アドレスの命令と比較すればよい。
【００５３】
Ｓ６では、抽出した命令に対応するエミュレータ１０１内部の呼び出しアドレスを設定し、このアドレスをエミュレータ１０１の呼び出し先とする。この、呼び出しアドレスは、上記図４で示したように、命令の種類に対応して異なる呼び出しアドレスＡ〜Ｇの中から、エミュレート対象命令に該当するアドレスを選択する。
【００５４】
そして、図３で示したように、エミュレータ１０１−０〜１０１−ｎは、ユーザＯＳ＃０〜＃ｎ毎に設定されているので、エミュレートを行うユーザＯＳのエミュレータ１０１のアドレスに、エミュレータ内部の上記呼び出しアドレスＡ〜Ｇを加味したものをエミュレータ１０１−０〜１０１−ｎの呼び出し先とする。
【００５５】
呼び出すエミュレータ１０１−０〜１０１−ｎが決定すると、ハイパーバイザ１０は、ハイパーバイザ使用領域Ｖｍｈにコピーしたページのエミュレート対象命令を、エミュレータ１０１−０〜１０１−ｎのＣＡＬＬ命令に置き換える。
【００５６】
次に、Ｓ７では、ハイパーバイザ使用領域Ｖｍｈにコピーしたエミュレート対象ページをＣＰＵ２０１−０〜３に実行させるため、このページの物理アドレスを後述するように命令ＴＬＢ２１１に設定する。
【００５７】
そして、Ｓ８では、命令ＴＬＢ２１１にセットしたエミュレート対象ページを実行させ、ユーザＯＳに代わってエミュレータ１０１−０〜１０１−ｎにより、特権例外となった命令をＣＰＵ２０１−０〜３に実行させる。エミュレータ１０１−０〜１０１−ｎは、このエミュレータ１０１−０〜１０１−ｎの実行結果を、各エミュレータに対応するユーザＯＳ＃０〜＃ｎに返す。
【００５８】
なお、エミュレートの実行が終了すると、ハイパーバイザ１０は制御を元のユーザＯＳ＃０〜＃ｎに戻す。例えば、命令ＴＬＢ２１１の内容を、ユーザＯＳ＃０〜＃ｎのコピー元のページの次のページに設定し、命令の実行位置をユーザＯＳ＃０〜＃ｎに戻す。
【００５９】
以上の処理により、特権例外となった命令を、ユーザＯＳ＃０〜＃ｎに代わってハイパーバイザ１０のエミュレータ１０１−０〜１０１−ｎが、エミュレート対象命令を含むユーザＯＳ＃０〜＃ｎの該当ページをハイパーバイザ使用領域Ｖｍｈにコピーし、所定の命令へ置き換えて実行する。
【００６０】
なお、上記図５では、特権例外が発生した場合について述べたが、ハイパーバイザ１０は、特権例外だけではなく割り込みも検知するので、ユーザＯＳ＃０〜＃ｎに対して割り込みが発生した場合も、上記特権例外と同様にして、割り込み命令をエミュレータ１０１−０〜１０１−ｎに置き換えて実行すればよい。
【００６１】
次に、上記図５で示した特権例外が発生した場合の具体的な例について、図６を参照しながら説明する。
【００６２】
図６は、上記図３に示したＬＰＡＲ＃１上のユーザＯＳ＃１で、特権例外が発生したとき、ハイパーバイザ１０の動作を示す仮想アドレス空間のマップである。
【００６３】
この例では、ユーザＯＳ＃１が非特権あるいは低い特権レベルで実行され、ユーザＯＳ＃１の命令列中にＰＳＲ２１４の操作命令（以下、ＰＳＲ操作命令）があったものとする。ＰＳＲ操作命令は、特権レベル０でなければ実行できないため、ＣＰＵ２０１−０〜３はハイパーバイザ１０に特権例外を通知する。
【００６４】
ハイパーバイザ１０は、特権例外が発生した仮想アドレスをページテーブル１１０を参照して決定し、当該命令のあったユーザＯＳ＃１を特定する。このユーザＯＳ＃１がエミュレート対象であると判定すると、ハイパーバイザ１０は、特権例外が発生した仮想アドレスを含む１ページを、ハイパーバイザ使用領域Ｖｍｈの空き領域にコピーする。
【００６５】
図６において、特権例外が発生した仮想アドレスを含むページの先頭アドレスをＰ１とし、この先頭アドレスから所定の範囲（例えば、４ｋＢ）の領域である１ページを、ハイパーバイザ使用領域Ｖｍｈの仮想アドレスＰ２にコピーする。
【００６６】
次に、ハイパーバイザ１０は、仮想アドレスＰ２にコピーしたユーザＯＳ＃１の１部を検索し、特権例外が発生した命令を抽出する。この命令の抽出は、上記Ｓ１で取得した仮想アドレスに対応するコピー後のハイパーバイザ使用領域Ｖｍｈのアドレスを読み込んで、予め設定したエミュレート対象命令と比較し、エミュレート対象命令と一致する命令を抽出する。ここでは、ハイパーバイザ１０が上述したＰＳＲ操作命令を抽出する。
【００６７】
ハイパーバイザ１０は、ハイパーバイザ使用領域Ｖｍｈに予め設定されたユーザＯＳ＃１に対応するエミュレータ１０１−１から、抽出したＰＳＲ操作命令に対応する呼び出しアドレスを選択する。エミュレータ１０１−１が、例えば、図４で示したように構成される場合、ＰＳＲ操作命令に対応するエミュレータ１０１−１の呼び出しアドレスはＣであるから、ハイパーバイザ１０は、エミュレータ１０１−１のＣＡＬＬ先を、エミュレータ１０１−１の仮想アドレスに呼び出しアドレスＣを加味したアドレスに設定する。
【００６８】
そして、ハイパーバイザ１０は仮想アドレスＰ２にコピーした領域で、特権例外となった命令をエミュレータ１０１−１のＣＡＬＬ命令に書き換える。
【００６９】
次に、ハイパーバイザ１０は、現在、ＬＰＡＲ＃１上の該当ページＰ１を指している命令ＴＬＢ２１１の内容を、ハイパーバイザ使用領域Ｖｍｈにコピーしたページの仮想アドレスＰ２に置き換えて、命令を実行させる仮想アドレス空間を変更する。
【００７０】
ここで、実行する命令のページを指定する命令ＴＬＢ２１１は、図７で示すように、仮想アドレスを格納する領域（仮想アドレス領域）２１１１と、仮想アドレスに対応する物理アドレスを格納する領域（物理アドレス領域）２１１２を含んで構成される。そして、ハイパーバイザ１０が仮想アドレスＰ１のページをコピーした段階では、図７（ａ）のように物理アドレス領域２１１２には、仮想アドレスＰ１に対応する物理アドレスＰＰ１が格納されている。
【００７１】
ハイパーバイザ１０は、エミュレート対象ページを仮想アドレスＰ２にコピーし、呼び出しアドレスを決定してエミュレート対象命令をエミュレータ１０１−１のＣＡＬＬ命令に置き換えると、命令ＴＬＢ２１１の仮想アドレスＰ１に対応する物理アドレス領域２１１２を、コピー先の仮想アドレスＰ２に対応する物理アドレスＰＰ２を挿入する。
【００７２】
なお、コントロールレジスタＣＲがページテーブル１１０のポインタ（Page Table Address）を管理する場合、このポインタを示すレジスタの値を物理アドレスＰＰ２に対応する値に書き換えればよい。
【００７３】
そして、ハイパーバイザ１０は、ＣＰＵ２０１−０〜３に仮想アドレスＰ２からの処理を実行させる。ＣＰＵ２０１−０〜３は、仮想アドレスＰ２にコピーされたページの命令列を順次実行し、エミュレータ１０１−１のＣＡＬＬ命令で、特権例外となった命令を代行することができる。
【００７４】
このように、ハイパーバイザ１０は、特権例外が発生したユーザＯＳ＃１の一部のページを、自らが管理する領域にコピーし、エミュレート対象命令をエミュレータ１０１−１のＣＡＬＬ命令に置き換えて、特権命令をユーザＯＳ＃１に代わって実行する。
【００７５】
エミュレータ１０１−１の実行が完了すると、ハイパーバイザ１０は、上述のようにＴＬＢ２１１を操作して、命令の実行位置（仮想アドレス）をコピー元のユーザＯＳ＃１の次のページとなる図中Ｐ３に設定し、ユーザＯＳ＃１の実行を再開する。
【００７６】
エミュレータ１０１−１の動作の一例としては、上記特権例外となったユーザＯＳ＃１の命令がＰＳＲ２１１に割り込み禁止を設定する命令（Rsm PSR、i）の場合、図８のようになる。図８は、ユーザＯＳ＃１から抽出した命令をエミュレータ１０１−１で実行する際の、命令の変換の様子を示す。
【００７７】
まず、ハイパーバイザ１０は、ＰＳＲ２１１に割り込み禁止を設定する命令（Rsm PSR、i）を、コピーしたページ（Ｐ２）から抽出する。次に、このＰＳＲ操作命令をエミュレータ１０１−１のＰＳＲ命令処理部（図４の１０１３）へのＣＡＬＬ命令に書き換える。そして、エミュレータ１０１−１を実行する。
【００７８】
割り込み禁止命令の場合、ユーザＯＳ＃１の命令をそのままＣＰＵに設定してしまうと、他のユーザＯＳで割り込みを受けられなくなるので、エミュレータはこれを防ぐため、ユーザＯＳ＃０〜＃ｎ毎に用意した環境変数Shadow PSRを物理的なレジスタの代用とする。各ユーザＯＳ＃０〜＃ｎは、この環境変数Shadow PSRを、ＰＳＲとして扱う。
【００７９】
エミュレータ１０１−１では、次のような処理が行われる。
【００８０】
LD GRx,[Shadow PSR]  :環境変数Shadow  PSRを汎用レジスタＧＲｘに読み込む
AND GRx,~0x2000      ：汎用レジスタＧＲｘの環境変数ShadowPSRと所定値の論理積を演算する(~0x2000は0x2000のbit反転を示す)
ST GRx,[Shadow PSR]  :環境変数Shadow PSRの演算結果を返す
ret                  ：エミュレータ１０１−１の完了
以上により、エミュレータ１０１−１は、ユーザＯＳ＃１がＰＳＲ２１１として扱う環境変数Shadow PSRを設定することで、ユーザＯＳ＃１に対して特権例外となったＰＳＲ操作命令を擬似的に代行する。また、Shadow PSR.iがリセットされていると、物理割込みは発生するが、割り込みや例外はハイパーバイザ１０が一旦全て受け取るので、ユーザＯＳへの通知は行わない。したがって、ユーザＯＳ＃１から見ると、物理的なレジスタPSR.iがリセットされたのと同様の効果がもたらされるように制御される。
【００８１】
ここでは、割り込み禁止命令の場合について述べたが、ユーザＯＳ＃０〜＃ｎからの命令が、他のユーザＯＳに対して影響を及ぼす場合、エミュレータ１０１は、物理的なレジスタの代わりに上記のような変数への値の出し入れによって動作をエミュレートする。
【００８２】
以上のように、特権例外（ＣＰＵの例外処理）や割り込みが発生しても、ハイパーバイザ１０は、ユーザＯＳの該当ページのコピーと、該当命令をエミュレータ１０１へのＣＡＬＬ命令への置き換えを行い、命令の実行位置をページのコピー先に移すだけでよいので、特権例外や割り込み処理のオーバーヘッドを大幅に低減することが可能となる。これにより、ハイパーバイザ１０の処理速度を大幅に向上させることができるのである。
【００８３】
また、一旦、特権例外や割り込みが発生すると、エミュレータ１０１の起動によってそれ以上の特権例外の発生を防ぐことが可能となりハイパーバイザ１０の処理速度の向上を図ることができる。
【００８４】
また、本発明のハイパーバイザ１０では、前記従来例のように、バイナリトランスレーション後に、実行する命令の判定を行う必要がないので、特権例外や割り込み処理のオーバーヘッドを大幅に短縮できる、という顕著な効果を有するのである。
【００８５】
さらに、命令の置き換えは、ハイパーバイザ使用領域Ｖｍｈにコピーしたページ単位で行うため、ユーザＯＳ＃０〜＃ｎの種類にかかわらず、幅広く適用することができる。
【００８６】
＜第２実施形態＞
図９、図１０は第２の実施形態を示し、前記第１実施形態のエミュレータ１０１に汎用レジスタに対する操作をエミュレートするレジスタエミュレート部１０２０を加えたものである。
【００８７】
ＣＰＵ２０１−０〜３のアーキテクチャによっては、エミュレータ１０１を実行する際に、汎用レジスタ２１３を少なくとも一つ確保しなければならない場合がある（例えば、ＩＡ６４）。この種のＣＰＵ２０１−０〜３を採用した場合、ハイパーバイザ１０は、汎用レジスタ２１３を確保してエミュレータ１０１を実行する。エミュレータ１０１の実行期間中に、他のユーザＯＳ＃０〜＃ｎ等から使用中の汎用レジスタ２１３に対する操作命令があった場合、ハードウェアリソースの競合を回避する必要がある。
【００８８】
このため、ハイパーバイザ１０のエミュレータ１０１には、図９で示すように、汎用レジスタ２１３のエミュレートを行うレジスタエミュレート部１０２０を設け、エミュレータ１０１の実行中に他のユーザＯＳ＃０〜＃ｎ等から使用中の汎用レジスタ２１３に対する操作があったときには、一旦、現在実行中のエミュレートをハイパーバイザ使用領域Ｖｍｈなどに待避させ、この汎用レジスタ２１３に対する命令をエミュレータ１０１で実行する。そして、汎用レジスタ２１３に対する他のユーザＯＳ＃０〜＃ｎ等からの命令が完了すると、待避していたエミュレートの内容を汎用レジスタ２１３に戻してエミュレータ１０１を再開する。
【００８９】
このハイパーバイザ１０の汎用レジスタ２１３のエミュレート処理の一例について、図１０のフローチャートを参照しながら説明する。この処理は、ハイパーバイザ１０が所定の周期で実行するものである。
【００９０】
Ｓ２１では、エミュレータ１０１−１〜ｎの何れかが実行中であるか否かを判定し、エミュレータ１０１−１〜ｎの実行中であればＳ２２へ進む。エミュレータ１０１−１〜ｎを実行していなければそのまま処理を終了する。
【００９１】
Ｓ２２では、ハイパーバイザ１０がユーザＯＳ＃０〜＃ｎ等から汎用レジスタ２１３に対する操作要求があったか否かを判定する。
【００９２】
汎用レジスタ２１３の操作要求があった場合にはＳ２３へ進み、そうでない場合には処理を終了する。
【００９３】
Ｓ２３では、現在実行中のエミュレータ１０１−１〜ｎが使用している汎用レジスタ２１３の名称をそれぞれ取得する。次に、Ｓ２４において、エミュレータ１０１−１〜ｎで使用中の汎用レジスタ２１３の名称と、要求のあった汎用レジスタ２１３の名称が一致するか否かを判定する。一致した場合にはＳ２５に進んで、汎用レジスタ２１３の名称が一致したエミュレータ１０１−１〜ｎで、ハイパーバイザ１０は汎用レジスタ２１３のエミュレートを実行する。
【００９４】
例えば、図９において、エミュレータ１０１が汎用レジスタＧＲ３１を使用しているときに、他のユーザＯＳ＃０〜＃ｎ等がこの汎用レジスタＧＲ３１を使用する命令を発効した場合、ハイパーバイザ１０は、上記図１０の手順に従って、汎用レジスタＧＲ３１を使用している当該エミュレータ１０１を決定する。
【００９５】
そして、ハイパーバイザ１０は、上記のように汎用レジスタＧＲ３１のデータをハイパーバイザ使用領域Ｖｍｈ等の空き領域に一旦待避させる。その後、レジスタエミュレート部１０２０を起動して、他のユーザＯＳ＃０〜＃ｎ等からの汎用レジスタＧＲ３１に対する操作を実行する。この操作が終了すると、待避させたエミュレータ１０１のデータを汎用レジスタＧＲ３１に戻し、エミュレートを再開する。
【００９６】
このように、エミュレータ１０１の実行時に汎用レジスタ２１３を確保する必要のあるＣＰＵ２０１−０〜３を採用した場合では、特権例外や割り込み処理などをエミュレータ１０１で処理している期間に、エミュレータ１０１で使用中の特定のレジスタに対する操作要求が発生すると、ハイパーバイザ１０は、この操作要求をエミュレートすることで、ハードウェアリソースの競合を防いで、論理分割を円滑に実行することができるのである。
【００９７】
＜変形例１＞
図１１は、前記第１実施形態に示したエミュレータの変形例を示す。エミュレータ１０１ａは、エミュレート対象命令が予め設定した命令の内、いずれに一致するかを解釈する命令解釈部１０２１と、命令解釈部１０２１で特定した命令のエミュレータをハイパーバイザ使用領域Ｖｍｈの空き領域などに生成するエミュレータ生成部１０２２と、生成されたエミュレータでエミュレート対象命令を実行するエミュレート実行部１０２３から構成される。
【００９８】
エミュレータ１０１ａは、ハイパーバイザ１０がエミュレート対象命令を取得すると、この命令に対応したエミュレータをハイパーバイザ使用領域Ｖｍｈに生成し、エミュレートを実行する。ここで、生成するエミュレータは、図４に示す処理部１０１１〜１０１７のうち、特定した命令に対応するもののみを生成すればよい。
【００９９】
この変形例１の場合では、前記第１実施形態のエミュレータ１０１のように、全てのエミュレート対象命令に対する処理部１０１１〜１０１７をハイパーバイザ使用領域Ｖｍｈに格納する必要がなくなり、仮想アドレス空間を有効に利用することができる。
【０１００】
とくに、ＬＰＡＲの数が多い場合には、ＬＰＡＲ上のユーザＯＳ＃０〜＃ｎに対応してエミュレータが必要になるので、エミュレータ１０１ａのように、エミュレートが必要なときにのみエミュレータをハイパーバイザ使用領域Ｖｍｈに生成することで、ユーザに提供するＬＰＡＲに割り当てる仮想アドレス空間を拡大することができる。
【０１０１】
＜変形例２＞
図１２は、前記第１実施形態に示したエミュレータの変形例を示す。エミュレータ１０１ｂは、エミュレート対象命令が予め設定した命令の内、いずれに一致するかを解釈する命令解釈部１０２１と、命令解釈部１０２１で特定した命令を代行する命令列を生成する命令列生成部１０２４と、ハイパーバイザ使用領域Ｖｍｈにコピーされたエミュレート対象命令に代わって、生成された命令列を挿入する命令列置換部１０２５から構成される。
【０１０２】
エミュレータ１０１ｂは、ハイパーバイザ１０がエミュレート対象命令を取得すると、この命令に対応した命令列を生成する。そして、ハイパーバイザ使用領域Ｖｍｈにコピーしたエミュレート対象命令を、生成した命令列に置き換えて実行する。
【０１０３】
例えば、エミュレート対象命令が上記図８に示したＰＳＲ２１４に対する命令の場合、図８に示したエミュレータ１０１−１の命令列を生成する。そして、生成した命令列をハイパーバイザ使用領域Ｖｍｈにコピーしたエミュレート対象命令の位置に挿入する。
【０１０４】
この変形例２の場合も、前記第１実施形態のエミュレータ１０１のように、全てのエミュレート対象命令に対する処理部１０１１〜１０１７をハイパーバイザ使用領域Ｖｍｈに格納する必要がなくなり、仮想アドレス空間を有効に利用することができる。
【０１０５】
なお、上記各実施形態及び各変形例においては、ＣＰＵ２０１−０〜３からの特権例外または割り込みがあった場合について述べたが、ブリッジチップ２０３やＩ／Ｏインターフェース２０７またはＩ／Ｏデバイスからの割り込みや例外をハイパーバイザ１０が受け付けて、エミュレータ１０１−１〜ｎでエミュレートすることができる。
【０１０６】
また、上記各実施形態及び各変形例においては、命令ＴＬＢ２１１を操作することで、ＣＰＵ２０１−０〜３の命令実行位置を変更する一例を示したが、採用するＣＰＵ２０１−０〜３のアーキテクチャに応じて、適宜最適な命令に置き換えることができ、例えば、命令の実行位置をインストラクションポインタが指し示す場合、インストラクションポインタを直接または間接的に操作して、ハイパーバイザ使用領域ＶｍｈのコピーしたページＰ２を実行させるようにしても良い。
【産業上の利用可能性】
【０１０７】
以上のように、本発明はユーザＯＳ＃０〜＃ｎで特権例外や割り込み処理などが発生した場合には、エミュレータにより特定のハードウェアリソースに対する処理を代行するので、安定性と処理速度に優れた仮想計算機システムに適用することができる。
【図面の簡単な説明】
【０１０８】
【図１】本発明の第１実施形態を示し、仮想計算機を実現する物理計算機のハードウェア構成を示すブロック図である。
【図２】同じく仮想計算機システムのソフトウェア構成を示すブロック図である。
【図３】仮想アドレス空間と物理アドレス空間の関係を示すマップ。
【図４】エミュレータの一例を示すブロック図。
【図５】ハイパーバイザが実行するエミュレート処理の一例を示すフローチャート。
【図６】同じくエミュレート処理の様子を示す仮想アドレス空間のマップ。
【図７】同じくエミュレート処理の様子を示す命令ＴＬＢの説明図で、（ａ）は該当ページのコピー次の命令ＴＬＢを示し、（ｂ）はエミュレート開始時の命令ＴＬＢを示す。
【図８】同じくエミュレート処理の一例を示し、ＰＳＲ操作命令をエミュレートする場合の説明図。
【図９】第２の実施形態を示すエミュレータのブロック図。
【図１０】同じく、第２の実施形態を示し、ハイパーバイザが実行するエミュレート処理の一例を示すフローチャート。
【図１１】第１の変形例を示し、エミュレータのブロック図。
【図１２】第２の変形例を示し、エミュレータのブロック図。
【符号の説明】
【０１０９】
１０  ハイパーバイザ
１１−０〜１１−２  ＬＰＡＲ
２０−０〜２０−ｎ  ユーザＯＳ＃０〜＃ｎ
１００  物理計算機
１０１−０〜ｎ  エミュレータ
２０５  メモリ
２０５０  物理アドレス空間
２０６０  仮想アドレス空間
【図１】
2006155272.tif 000003
【図２】
2006155272.tif 000004
【図４】
2006155272.tif 000005
【図５】
2006155272.tif 000006
【図７】
2006155272.tif 000007
【図８】
2006155272.tif 000008
【図９】
2006155272.tif 000009
【図１０】
2006155272.tif 000010
【図１１】
2006155272.tif 000011
【図１２】
2006155272.tif 000012
【図３】
2006155272.tif 000013
【図６】
2006155272.tif 000014