(57)【特許請求の範囲】
【請求項１】
第１層の仮想マシンモニタにより構築された仮想マシン上で動作する上位仮想マシンモニタにより上位仮想マシンが構築され、前記第１層の仮想マシンモニタが特権モードで動作し、前記上位仮想マシンモニタ及び前記上位仮想マシン上のゲストプログラムが非特権モードで動作する入れ子の仮想化環境において、前記ゲストプログラムの処理で発生した非特権モードから特権モードへの遷移の要因を特定する特定部と、
前記特定部により特定された要因が、前記上位仮想マシンに割り当てられた入出力装置によるＤＭＡのアドレス変換を設定された変換テーブルを用いて行うハードウェアのアドレス変換機構を仮想化して前記ゲストプログラムに提供される仮想変換機構で用いる仮想変換テーブルの設定または更新の場合に、前記仮想変換テーブル、及び前記ゲストプログラムが動作するゲストメモリ空間と前記第１層の仮想マシンモニタが動作するホストメモリ空間との対応関係に基づいて、前記アドレス変換機構で用いる前記変換テーブルを設定する設定部と、
を含む情報処理装置。
【請求項２】
前記設定部は、前記ゲストプログラムの処理が、前記仮想変換テーブルの設定または更新の場合に、非特権モードから特権モードへの遷移が発生するように、前記仮想変換機構及び前記仮想変換テーブルに対する処理が例外処理となるように設定する請求項１記載の情報処理装置。
【請求項３】
前記設定部は、前記ゲストメモリ空間のアドレスによる前記仮想変換テーブルを取得し、取得した前記仮想変換テーブルを、前記対応関係に基づいて、前記ホストメモリ空間のアドレスによる変換テーブルに変換して、前記アドレス変換機構で用いる前記変換テーブルとして設定する請求項１または請求項２記載の情報処理装置。
【請求項４】
コンピュータに、
第１層の仮想マシンモニタにより構築された仮想マシン上で動作する上位仮想マシンモニタにより上位仮想マシンが構築され、前記第１層の仮想マシンモニタが特権モードで動作し、前記上位仮想マシンモニタ及び前記上位仮想マシン上のゲストプログラムが非特権モードで動作する入れ子の仮想化環境において、前記ゲストプログラムの処理で発生した非特権モードから特権モードへの遷移の要因を特定し、
特定された要因が、前記上位仮想マシンに割り当てられた入出力装置によるＤＭＡのアドレス変換を設定された変換テーブルを用いて行うハードウェアのアドレス変換機構を仮想化して前記ゲストプログラムに提供される仮想変換機構で用いる仮想変換テーブルの設定または更新の場合に、前記仮想変換テーブル、及び前記ゲストプログラムが動作するゲストメモリ空間と前記第１層の仮想マシンモニタが動作するホストメモリ空間との対応関係に基づいて、前記アドレス変換機構で用いる前記変換テーブルを設定する
ことを含む処理を実行させる情報処理方法。
【請求項５】
コンピュータに、
第１層の仮想マシンモニタにより構築された仮想マシン上で動作する上位仮想マシンモニタにより上位仮想マシンが構築され、前記第１層の仮想マシンモニタが特権モードで動作し、前記上位仮想マシンモニタ及び前記上位仮想マシン上のゲストプログラムが非特権モードで動作する入れ子の仮想化環境において、前記ゲストプログラムの処理で発生した非特権モードから特権モードへの遷移の要因を特定し、
特定された要因が、前記上位仮想マシンに割り当てられた入出力装置によるＤＭＡのアドレス変換を設定された変換テーブルを用いて行うハードウェアのアドレス変換機構を仮想化して前記ゲストプログラムに提供される仮想変換機構で用いる仮想変換テーブルの設定または更新の場合に、前記仮想変換テーブル、及び前記ゲストプログラムが動作するゲストメモリ空間と前記第１層の仮想マシンモニタが動作するホストメモリ空間との対応関係に基づいて、前記アドレス変換機構で用いる前記変換テーブルを設定する
ことを含む処理を実行させるための情報処理プログラム。
【発明の詳細な説明】
【技術分野】
【０００１】
開示の技術は、情報処理装置、情報処理方法、及び情報処理プログラムに関する。
【背景技術】
【０００２】
近年、コンピュータ上に仮想的なコンピュータ（仮想マシン）を構築する仮想化技術において、入れ子の仮想化技術が提案されている。入れ子の仮想化技術とは、仮想マシン上で仮想マシンを動かす仮想化技術であり、例えば、ＢＩＯＳ（Basic Input Output System）が仮想マシンを立ち上げる。そして、その仮想マシン上でＸｅｎ（登録商標）などの既存の仮想化ソフト（仮想マシンモニタ）を動かすような技術である。【０００３】
また、仮想マシンを構築する仮想マシンモニタは、基本的にはソフトウェアによる処理を行っているが、仮想マシンモニタの処理の一部をハードウェアにより担う仮想化支援機構を利用した仮想マシンモニタも存在する。【０００４】
さらに、上記の入れ子の仮想化技術における第２層の仮想化に対して、ハードウェアによる仮想化支援機構を仮想化して提供する技術が提案されている。例えば、仮想化支援機構を備えたＣＰＵが、通常モードと仮想化支援機構を提供するモードとで動作する仮想化技術が提案されている。この技術では、仮想化支援機構を提供するモードでは、ホストＶＭＭ（Virtual Machine Monitor）が、ゲストＯＳ（Operating System）を監視する。そして、ＣＰＵの動作モードを、ホストＶＭＭが動作するホストモードと、ゲストＶＭＭまたはユーザプログラムが動作するユーザモードとに切り替える。そして、所定の条件でホストＶＭＭがゲストＶＭＭ及びゲストＯＳの命令をエミュレートする。これにより、ゲストＯＳが稼働する仮想マシンに割り当てられた仮想ＣＰＵが、ゲストＯＳに対して、仮想化支援機構を提供するように見せかける。【０００５】
また、仮想マシンに割り当てられたＩ／Ｏ（Input/Output）デバイス（入出力装置）がメモリ空間へアクセスすることをＤＭＡ（Direct Memory Access）という。このＩ／ＯデバイスによるＤＭＡのアドレス変換を行う仮想化支援機構として、ＤＭＡＲ（ＤＭＡ Remapping）という技術が提案されている。このＤＭＡＲの仮想化支援機構を提供するハードウェアをＤＭＡＲ−ＨＷ（hardware）という。
【先行技術文献】
【特許文献】
【０００６】
【特許文献１】特開２００９−３７４９号公報
【非特許文献】
【０００７】
【非特許文献１】「Intel Virtualization Technology for Directed I/O Architecture Specification」、［online］、Intel corp．発行、［平成２５年３月１９日検索］、インターネット＜ＵＲＬ：http://software.intel.com/en-us/articles/intel-virtualization-technology-for-directed-io-vt-d-enhancing-intel-platforms-for-efficient-virtualization-of-io-devices＞
【発明の概要】
【発明が解決しようとする課題】
【０００８】
従来技術のＤＭＡＲ−ＨＷのような入出力装置のＤＭＡのアドレス変換を行うハードウェアによる変換機構は、１階層の仮想化のみに対応している。従って、入れ子の仮想化技術における第２層より上位の仮想マシンモニタやゲストプログラムでは使用できない、という問題がある。【０００９】
上述の入れ子の仮想化における第２層の仮想化に仮想化支援機構を提供する従来技術を、ＤＭＡＲ−ＨＷの仮想化に対して適用することも考えられる。しかし、処理が煩雑であるため、オーバヘッドが大きくなり、ゲストプログラムに提供するためのＤＭＡＲ−ＨＷの仮想化に時間を要する、という問題がある。【００１０】
開示の技術は、一つの側面として、入れ子の仮想化環境におけるゲストプログラムに、入出力装置によるＤＭＡのアドレス変換を行うハードウェアによる変換機構を提供する際の仮想化を高速化することが目的である。
【課題を解決するための手段】
【００１１】
開示の技術は、入れ子の仮想化環境において、ゲストプログラムの処理で発生した非特権モードから特権モードへの遷移の要因を特定する特定部を備えている。入れ子の仮想化環境とは、第１層の仮想マシンモニタにより構築された仮想マシン上で動作する上位仮想マシンモニタにより上位仮想マシンが構築された仮想化環境である。また、前記第１層の仮想マシンモニタが特権モードで動作し、前記上位仮想マシンモニタ及び前記上位仮想マシン上のゲストプログラムが非特権モードで動作する。また、開示の技術は、前記特定部により特定された要因が、仮想変換テーブルの設定または更新の場合に、変換機構で用いる変換テーブルを設定する設定部を備えている。仮想変換テーブルは、前記上位仮想マシンに割り当てられた入出力装置によるＤＭＡのアドレス変換を設定された変換テーブルを用いて行うハードウェアの変換機構を仮想化して前記ゲストプログラムに提供される仮想変換機構で用いる。設定部は、前記仮想変換テーブル、及び前記ゲストプログラムが動作するゲストメモリ空間と前記第１層の仮想マシンモニタが動作するホストメモリ空間との対応関係に基づいて、前記変換機構で用いる前記変換テーブルを設定する。
【発明の効果】
【００１２】
開示の技術は、一つの側面として、入れ子の仮想化環境におけるゲストプログラムに、入出力装置によるＤＭＡのアドレス変換を行うハードウェアによる変換機構を提供する際の仮想化を高速化することができる、という効果を有する。
【図面の簡単な説明】
【００１３】
【図１】ＤＭＡＲ−ＨＷによるアドレス変換を示す概略図である。
【図２】ＤＭＡＲテーブルの一例を示す図である。
【図３】ＤＭＡＲ−ＨＷの仮想化の概略を示す構成図である。
【図４】ＨＰＡとＧＰＡとにおけるＤＭＡＲテーブルの関係を示す図である。
【図５】ＤＭＡＲテーブルの更新を説明するための図である。
【図６】入れ子の仮想化構成でのＣＰＵの仮想化支援機構の概略を示す構成図である。
【図７】比較例の概略を示す構成図である。
【図８】比較例のメモリ構成を示す概略図である。
【図９】比較例におけるＶＭＭの機能ブロック図である。
【図１０】比較例におけるＶＭ−Ｅｘｉｔハンドラの処理を示すフローチャートである。
【図１１】比較例におけるＶＭ−Ｅｘｉｔ要因毎の処理を示すフローチャートである。
【図１２】比較例におけるＤＭＡＲ仮想化処理を示すフローチャートである。
【図１３】比較例における非特権モードと特権モードとの遷移を説明するための図である。
【図１４】比較例におけるＨＰＡとＧＰＡ１とＧＰＡ２とにおけるＤＭＡＲテーブルの関係を示す図である。
【図１５】開示の技術の概要を示す図である。
【図１６】第１実施形態の構成を示す概略図である。
【図１７】第１実施形態におけるＶＭＭの機能ブロック図である。
【図１８】第１実施形態のメモリ構成を示す概略図である。
【図１９】情報処理装置として機能するサーバの一例を示す概略ブロック図である。
【図２０】第１実施形態におけるＶＭ−Ｅｘｉｔハンドラの処理を示すフローチャートである。
【図２１】第１実施形態におけるＤＭＡＲ仮想化処理を示すフローチャートである。
【図２２】第１実施形態における非特権モードと特権モードとの遷移を説明するための図である。
【図２３】第１実施形態におけるＨＰＡとＧＰＡ１とＧＰＡ２とにおけるＤＭＡＲテーブルの関係を示す図である。
【図２４】第２実施形態の構成を示す概略図である。
【図２５】第２実施形態におけるメモリの割り当てを示す図である。
【図２６】第２実施形態のメモリ構成を示す概略図である。
【図２７】第２実施形態におけるＤＭＡＲテーブルを示す図である。
【図２８】第２実施形態におけるＤＭＡＲテーブルの設定を示す図である。
【図２９】第２実施形態におけるＤＭＡＲテーブルの設定を示す図である。
【図３０】第２実施形態におけるＤＭＡＲテーブルの更新を示す図である。
【図３１】第２実施形態におけるＤＭＡＲテーブルの設定の削除を示す図である。
【図３２】第３実施形態の構成を示す概略図である。
【図３３】第３実施形態のメモリ構成を示す概略図である。
【図３４】第３実施形態におけるＶＭＭの機能ブロック図である。
【図３５】第３実施形態におけるＶＭ−Ｅｘｉｔハンドラの処理を示すフローチャートである。
【図３６】第３実施形態におけるＶＭＭ１２０からのＶＭ−Ｅｘｉｔ処理を示すフローチャートである。
【図３７】第３実施形態におけるＶＭＭ１３０からのＶＭ−Ｅｘｉｔ処理を示すフローチャートである。
【図３８】第３実施形態におけるＤＭＡＲ仮想化処理を示すフローチャートである。
【図３９】第３実施形態における非特権モードと特権モードとの遷移を説明するための図である。
【発明を実施するための形態】
【００１４】
まず、第１実施形態の詳細を説明する前に、従来の入れ子の仮想化技術と、従来のＤＭＡＲ−ＨＷ（Direct Memory Access Remapping - hardware）の仮想化技術とをそのまま組み合わせた場合の問題点を、以下の各項目に従って説明する。
【００１５】
＜ＤＭＡＲ−ＨＷの概要＞
仮想マシンモニタ（ＶＭＭ：Virtual Machine Monitor）により構築された仮想マシン（ＶＭ：Virtual Machine）上のゲストＯＳ（Operating System）は、使用するＩ／Ｏ（Input/Output）デバイスにゲストメモリ空間上のメモリリソースを割り当てる。Ｉ／Ｏデバイスがこの割り当てられたメモリリソースへアクセスする際には、ゲストメモリ空間上のアドレス（ＧＰＡ：Guest Physical Address）からホストメモリ空間上のアドレス（ＨＰＡ：Host Physical Address）へ変換する必要がある。この変換を行うのがＤＭＡＲであり、ＤＭＡＲを行うハードウェアをＤＭＡＲ−ＨＷという。
【００１６】
例えば、図１に示すように、Ｉ／Ｏデバイス８０１、８０２にゲストメモリ空間の０〜２ＧＢの領域が割り当てられており、このゲストメモリ空間の０〜２ＧＢの領域が、ホストメモリ空間の４ＧＢ〜６ＧＢの領域に対応するとする。Ｉ／Ｏデバイス８０１または８０２が、ゲストメモリ空間の０〜２ＧＢの領域内のアドレスにアクセスする。すると、Ｉ／Ｏデバイスがアクセスしたゲストメモリ空間のアドレス（ＧＰＡ）が、ＤＭＡＲ−ＨＷ２００により、ホストメモリ空間のアドレス（ＨＰＡ）に変換される。
【００１７】
Ｉ／Ｏデバイスがアクセスしたアドレスを、ＧＰＡからＨＰＡへ変換するためには、どのような変換を行うかを示した変換表（ＤＭＡＲテーブル）を、ＤＭＡＲ−ＨＷ２００に設定しておく必要がある。この変換表は、メモリ上に作成されて、その先頭のアドレスがＤＭＡＲ−ＨＷ２００のレジスタに設定される。
【００１８】
例えば、インテル（登録商標）のＤＭＡＲ−ＨＷによる仮想化支援機構であるＶＴ−ｄにおけるＤＭＡＲテーブル５００の構成例を、図２に示す。図２の例では、ＤＭＡＲ−ＨＷ２００のレジスタは、メモリ上の特定の領域にマップされている。ＤＭＡＲテーブル５００へのＩ／Ｏデバイスに対応したエントリは、バス番号（Ｂｕｓ）、デバイス番号（Ｄｅｖ）、及びファンクション番号（Ｆｕｎ）を含む。ＤＭＡＲテーブル５００は階層構造になっており、第１階層のルートエントリテーブル５００ＡでＩ／Ｏデバイスのバス番号を分類し、第２階層のコンテキストエントリテーブル５００ＢでＩ／Ｏデバイスのデバイス番号及びファンクション番号を分類する。第３階層以降はアドレス変換テーブル５００Ｃと呼ばれ、Ｉ／ＯデバイスがアクセスするＧＰＡをＨＰＡに変換するための変換方法が設定されている。複数のＩ／Ｏデバイスで同じ変換方法を適用する場合には、アドレス変換テーブルを共有して使用することが可能である。
すなわち、ＤＭＡＲテーブル５００は、Ｉ／Ｏデバイスに対応したエントリと、ＧＰＡ−ＨＰＡの変換方法との対応付けを定めるものである。
【００１９】
ＤＭＡＲ−ＨＷが、このような変換表を用いてＧＰＡをＨＰＡに変換することにより、ＶＭ上で動作するゲストＯＳに、直接Ｉ／Ｏデバイスを割り当てることができる。
【００２０】
なお、ＤＭＡＲ−ＨＷは、ＶＭＭ以外の通常のＯＳにも使用することができる。例えば、特定のメモリ領域を保護したい場合に、Ｉ／Ｏデバイスからその領域へのＤＭＡができないようにＤＭＡＲテーブルを設定すればよい。
【００２１】
＜ＤＭＡＲ−ＨＷの仮想化＞
ＶＭ上で動作するゲストＯＳがＤＭＡＲ−ＨＷを使用できるように、ＶＭＭはＤＭＡＲ−ＨＷを仮想化してゲストＯＳに提供する必要がある。この仮想化には、例えば、インテル（登録商標）ＶＴ−ｘのようなＣＰＵの仮想化支援機構を利用することができる。
【００２２】
図３に、情報処理装置１５１で実現されるＤＭＡＲ−ＨＷの仮想化の一例を示す。情報処理装置１５１は、ハードウェアリソースであるＣＰＵ４００、メモリ３００、ＤＭＡＲ−ＨＷ２００、及びＩ／Ｏデバイス８０１、８０２を備えている。ＣＰＵ４００は、例えばインテル（登録商標）ＶＴ−ｘのようなハードウェアによる仮想化支援機構４９０を備えている。情報処理装置１５１において、ＶＭＭ１１０を動作させ、ＶＭ１１１、１１２を構築し、ＶＭ１１１上でゲストＯＳ１４０を動作させている。
【００２３】
ＶＭＭ１１０は、ＶＭ−Ｅｘｉｔハンドラ１０と、ＤＭＡＲ仮想化部１１とを備えている。ＤＭＡＲ仮想化部１１は、ＤＭＡＲ−ＨＷ２００を仮想化してＶＭ１１１に提供し、ｖ（virtual）ＤＭＡＲ−ＨＷ２１１としてゲストＯＳ１４０に見せる。同様に、ＶＭ１１２には、ｖＤＭＡＲ−ＨＷ２１２が提供される。また、ＤＭＡＲ仮想化部１１は、ゲストＯＳ１４０によるｖＤＭＡＲ−ＨＷ２１１のレジスタへのアクセスを監視する。ＤＭＡＲ−ＨＷ２００のレジスタは、メモリ空間の特定のアドレスにマップされているので、ＤＭＡＲ仮想化部１１は、ｖＤＭＡＲ−ＨＷ２１１のレジスタも同じ位置にマップされているようにゲストＯＳ１４０に見せる。ゲストＯＳ１４０がそのマップされたレジスタにアクセスした場合に、例外が発生するようにＣＰＵ４００の仮想化支援機構４９０へ設定する。ＶＭ  Ｅｘｉｔハンドラ１０は、例外が発生した場合に、その要因を特定し、それがゲストＯＳ１４０によるそのマップされたレジスタへのアクセスである場合に、ＤＭＡＲ仮想化部１１を呼び出す。
【００２４】
ＤＭＡＲ仮想化部１１は、ゲストＯＳ１４０がｖＤＭＡＲ−ＨＷ２１１のレジスタに設定しようとしたアドレスから、ゲストＯＳ１４０が作成したＤＭＡＲテーブル５１０の場所を特定する。ＤＭＡＲテーブル５１０は、ＶＭＭ１１０により割り当てられたＩ／ＯデバイスをゲストＯＳ１４０が初期化する際に、ｖＤＭＡＲ−ＨＷ２１１へ設定されるＤＭＡＲテーブルである。ＤＭＡＲテーブル５１０は、ゲストＯＳ１４０により、ＧＰＡ上に作成されており、Ｉ／Ｏデバイスに割り当てられたＧＰＡ空間上の領域に関する設定が含まれる。ＶＭＭ１１０は、ＶＭＭ１１０が管理するＧＰＡ空間からＨＰＡ空間へのアドレス変換方法に基づいて、ＤＭＡＲテーブル５１０の内容をＨＰＡ空間上へ変換したＤＭＡＲテーブル５０１を作成する。
【００２５】
ＤＭＡＲ−ＨＷ２００には、予めＤＭＡＲテーブル５００が設定される。例えば、ＶＭ１１１へＩ／Ｏデバイス８０１が割り振られ、ＶＭ１１２へＩ／Ｏデバイス８０２が割り振られているとする。この場合、ＤＭＡＲテーブル５００には、ＶＭ１１１へ割り振られたＩ／Ｏデバイス８０１のＤＭＡを変換する設定と、ＶＭ１１２へ割り振られたＩ／Ｏデバイス８０２のＤＭＡを変換する設定とが含まれる。
【００２６】
ＤＭＡＲ仮想化部１１は、ＤＭＡＲテーブル５００の内、ゲストＯＳ１４０が動作するＶＭ１１１に割り振られたＩ／Ｏデバイス８０１に関する設定を、ＤＭＡＲテーブル５０１の内容で更新する。なお、ＤＭＡＲテーブルの更新方法については、後述する。
【００２７】
また、ＤＭＡＲ仮想化部１１は、ＣＰＵ４００の仮想化支援機構４９０を使用して、ＤＭＡＲテーブル５１０の置かれた領域をＷＰ（Write Protect）に設定する。これはゲストＯＳ１４０によるＤＭＡＲテーブル５１０の更新を検出するためである。ＤＭＡＲテーブル５１０の更新を検出した場合には、その更新内容をＤＭＡＲテーブル５０１へ反映するようにエミュレーションすることも可能である。
【００２８】
図４に、図３に示すＤＭＡＲ−ＨＷの仮想化でのＨＰＡとＧＰＡとにおけるＤＭＡＲテーブルの関係を示す。図４の例では、ＨＰＡのアドレス範囲４ＧＢ〜６ＧＢが、ＧＰＡの０ＧＢ〜２ＧＢとして割り当てられている。ゲストＯＳ１４０により、ＧＰＡ上に作成されたＤＭＡＲテーブル５１０には、ＧＰＡのアドレス範囲１ＧＢ〜２ＧＢがＩ／Ｏデバイス８０１に割り当てられた領域であるとの設定が含まれる。ＤＭＡＲテーブル５１０をＨＰＡ上に変換したものがＤＭＡＲテーブル５０１であり、ＤＭＡＲテーブル５０１には、ＨＰＡのアドレス範囲５ＧＢ〜６ＧＢがＩ／Ｏデバイス８０１に割り当てられた領域であるとの設定が含まれる。このように変換されたＤＭＡＲテーブル５０１に基づいて、予め設定されていた（初期状態の）ＤＭＡＲテーブル５００を更新する。
【００２９】
＜ＤＭＡＲテーブルの更新＞
図５に、ＤＭＡＲテーブル５００の更新の一例を示す。例えばＩ／Ｏデバイス８０１に対応するエントリが、バス番号（Ｂｕｓ）Ｎ、デバイス番号（Ｄｅｖ）ｉ、及びファンクション番号（Ｆｕｎ）ｊであるとする。バス番号Ｎは、ルートエントリテーブル５００ＡのRoot entry Ｎに該当し、デバイス番号ｉ及びファンクション番号ｊは、Root entry Ｎに対応するコンテキストエントリテーブル５００ＢのContext entry Ｍに該当するものとする。初期状態のＤＭＡＲテーブル５００では、このエントリがアドレス変換テーブル５００Ｃ１を参照していたとする。この場合、ＤＭＡＲテーブル５０１の一部で、ゲストＯＳ１４０がＩ／Ｏデバイス８０１に与えた設定をＨＰＡ上へ変換したものがアドレス変換テーブル５００Ｃ２であるとする。ＤＭＡＲテーブル５００の更新は、Root entry Ｎ及びContext entry Ｍのエントリ、すなわちＩ／Ｏデバイス８００のエントリの参照を、アドレス変換テーブル５００Ｃ１からアドレス変換テーブル５００Ｃ２へ変更することで行われる。
【００３０】
＜入れ子の仮想化構成でのＣＰＵの仮想化支援機構の動作＞
例えばインテル（登録商標）のＣＰＵの仮想化支援機構であるＶＴ−ｘでは、ＣＰＵに特権モードと非特権モードという２つの動作モードを与えている。ＣＰＵが非特権モードにあるときには、使用可能な機能が限られており、特権命令の実行などの許されていない処理を行うと、例外が発生し、特権モードへ遷移する。一方、ＣＰＵが特権モードにあるときは、全ての特権命令を実行することが可能であり、非特権モードで起きた例外を監視及び捕捉する役割を持つ。ＣＰＵの動作モードが、特権モードから非特権モードへ遷移することをＶＭ−Ｅｎｔｒｙといい、非特権モードから特権モードへ遷移することをＶＭ−Ｅｘｉｔという。
【００３１】
図６に、情報処理装置１５２で実現される入れ子の仮想化の一例を示す。なお、図３に示す従来技術のＤＭＡＲ−ＨＷの仮想化の例と同一の部分については、同一符号を付して、詳細な説明を省略する。
【００３２】
情報処理装置１５２は、ハードウェアリソースであるＣＰＵ４００及びメモリ３００を備えている。情報処理装置１５２において、第１層のＶＭＭ１１０を動作させ、第１層のＶＭ１１１を構築している。さらに、ＶＭ１１１上で第２層のＶＭＭ１２０を動作させ、第２層のＶＭ１２１を構築し、ＶＭ１２１上でゲストＯＳ１４０を動作させている。ＶＭＭ１１０は特権モードで動作し、ＶＭＭ１２０及びゲストＯＳ１４０は非特権モードで動作する。なお、ＶＭＭ１１０が動作するホストメモリ空間をＨＰＡ、ＶＭＭ１２０が動作するゲストメモリ空間をＧＰＡ１、及びゲストＯＳ１４０が動作するゲストメモリ空間をＧＰＡ２とする。
【００３３】
また、ＶＭ１１１には、ｖ（virtual）メモリ３１０及びｖ（virtual）ＣＰＵ４１０が割り当てられている。また、ＶＭ１２１には、ｖ（virtual）メモリ３２０及びｖ（virtual）ＣＰＵ４２０が割り当てられている。
【００３４】
図３の場合と同様、ＣＰＵ４００は、例えばインテル（登録商標）ＶＴ−ｘのようなハードウェアによる仮想化支援機構４９０を備えている。ＶＴ−ｘでは、ＶＭＣＳ（Virtual Machine Control Structure）というＣＰＵの状態を保持する領域をメモリ上に作成し、ＶＭＣＳのアドレスを仮想化支援機構４９０に参照させて、ＣＰＵ４００の状態（特権モード、非特権モード等）を管理する。
【００３５】
ＶＭＣＳ７００は、特権モードで動作するホストの状態を保持するホスト状態保持部７０１、非特権モードで動作するゲストの状態を保持するゲスト状態保持部７０２、及びその他の設定や状態などの制御情報を保持する制御情報保持部７０３を備えている。
【００３６】
特権モードから非特権モードへの遷移であるＶＭ−Ｅｎｔｒｙが発生すると、ホスト上のＣＰＵ４００の状態がホスト状態保持部７０１へ保持され、ゲスト状態保持部７０２に保持されていた内容がＣＰＵ４００にロードされる。一方、非特権モードから特権モードへの遷移であるＶＭ−Ｅｘｉｔが発生すると、ゲストのＣＰＵ（ｖＣＰＵ４１０）の状態がゲスト状態保持部７０２に保持されて、ホスト状態保持部７０１に保持されていた内容がＣＰＵ４００にロードされる。また、制御情報保持部７０３へは、例えばどういった要因でＶＭ−Ｅｘｉｔさせるかといった設定や、実際にＶＭ−Ｅｘｉｔした場合の要因の特定、後述するＣＰＵのＧＰＡ−ＨＰＡ変換を行うＥＰＴ（Extended Page Table）の設定などを行う。
【００３７】
入れ子の仮想化では、ＶＭ１１１に割り当てられたｖＣＰＵ４１０の状態を保持するためのｖ（virtual）ＶＭＣＳ７１０が存在する。ｖＶＭＣＳ７１０は、ＶＭ１１１に割り当てられたｖメモリ３１０に設けられ、ＶＭＣＳ７００と同様に、ホスト状態保持部７１１、ゲスト状態保持部７１２、及び制御情報保持部７１３を備えている。ｖＶＭＣＳ７１０のホスト状態保持部７１１には、ＶＭＭ１２０を動作させているｖＣＰＵ４１０の状態が、ゲスト状態保持部７１２には、ゲストＯＳ１４０を動作させているｖＣＰＵ４２０の状態が格納される。
【００３８】
また、メモリ３００には、ＶＭＣＳ７００の退避領域であるＶＭＣＳ−Ｃ（Copy）６００も置かれる。ＶＭＣＳ−Ｃ６００も、ＶＭＣＳ７００と同様に、ホスト状態保持部６０１、ゲスト状態保持部６０２、及び制御情報保持部６０３を備えている。ＶＭＣＳ−Ｃ６００の使い方については、後述する。
【００３９】
ＶＭＣＳに対して読み書きを実行する場合には、特権命令であるＶＭＲＥＡＤ命令やＶＭＷＲＩＴＥ命令を使用する。例えば、第２層のＶＭＭ１２０がｖＶＭＣＳ７１０のゲスト状態保持部７１２へゲストＯＳ１４０を動作させるための設定を行いたい場合は、ＶＭＷＲＩＴＥ命令を実行する。しかし特権命令であるＶＭＷＲＩＴＥ命令を、非特権モードで動作しているＶＭＭ１２０が実行しようとすると、例外が発生し、ＶＭ−ＥｘｉｔしてＶＭＭ１１０へ処理が移る。ＶＭＭ１１０は、ＶＭ−Ｅｘｉｔした要因（以下、「ＶＭ−Ｅｘｉｔ要因」という）がＶＭＷＲＩＴＥ命令の実行であることを特定する。そして、ＶＭＷＲＩＴＥ命令で書かれようとした内容をｖＶＭＣＳ７１０のゲスト状態保持部７１２へ反映し、ＶＭ−Ｅｎｔｒｙして、ＶＭＭ１２０へ処理を戻す。
【００４０】
ＶＭＭ１２０へ処理が戻ると、ＶＭＭ１２０では、ゲストＯＳ１４０へ処理を移すために、ＶＭ−Ｅｎｔｒｙ命令を実行する。しかし非特権モードで動作しているＶＭＭ１２０が、特権命令であるＶＭ−Ｅｎｔｒｙ命令を実行しようとすると、例外が発生し、ＶＭＭ１１０へＶＭ−Ｅｘｉｔする。
【００４１】
ＶＭＭ１１０は、ＶＭ−Ｅｘｉｔ要因がＶＭ−Ｅｎｔｒｙ命令の実行であることを特定すると、ＶＭＣＳ７００のゲスト状態保持部７０２に保持されているｖＣＰＵ４１０の状態をｖＶＭＣＳ７１０のホスト状態保持部７１１へコピーする。そして、ｖＶＭＣＳ７１０のゲスト状態保持部７１２に保持されているｖＣＰＵ４２０の状態をＶＭＣＳ７００のゲスト状態保持部７０２へ設定する。
【００４２】
次に、ＶＭＣＳ７００の制御情報保持部７０３に保持されているＶＭＭ１２０を監視及び制御していた設定を、ＶＭＣＳ−Ｃ６００の制御情報保持部６０３へ退避する。そして、ゲストＯＳ１４０を監視及び制御するための設定を、ＶＭＣＳ７００の制御情報保持部７０３へ行う。この設定は、ＶＭＣＳ−Ｃ６００の制御情報保持部６０３に保持されたＶＭＭ１１０がＶＭＭ１２０を監視及び制御するための設定と、ｖＶＭＣＳ７１０の制御情報保持部７１３に保持されたＶＭＭ１２０がゲストＯＳ１４０を監視及び制御するための設定とから作成される。
【００４３】
ＶＭＭ１１０がゲストＯＳ１４０を監視及び制御するための設定を、ＶＭＭ１１０がＶＭＭ１２０を監視及び制御するための設定とＶＭＭ１２０がゲストＯＳ１４０を監視及び制御するための設定とを組み合わせて作成する理由を説明する。例えば、ＶＭＭ１１０が特定のハードウェアリソースを仮想化して、ＶＭＭ１２０に見せていたとする。ＶＭＭ１１０は、このハードウェアリソースをエミュレーションするために、ＶＭＭ１２０がハードウェアリソースにアクセスしたら、ＶＭ−Ｅｘｉｔするように、ＶＭＣＳ７００の制御情報保持部７０３を設定する。一方、ＶＭＭ１２０は、このハードウェアリソースを仮想化せずにそのままゲストＯＳ１４０に見せるとする。すると、ｖＶＭＣＳ７１０の制御情報保持部７１３には、ゲストＯＳ１４０がこのハードウェアリソースにアクセスしてもＶＭ−Ｅｘｉｔするような設定はされない。しかし、実際にゲストＯＳ１４０を監視及び制御するのはＶＭＭ１１０であるため、ゲストＯＳ１４０がこのハードウェアリソースにアクセスしたら、ＶＭ−Ｅｘｉｔするように設定する必要がある。そのため、ＶＭＭ１１０がＶＭＭ１２０を監視及び制御するための設定と、ＶＭＭ１２０がゲストＯＳ１４０を監視及び制御するための設定とから、ＶＭＭ１１０がゲストＯＳ１４０を監視及び制御するための設定を作成することになる。
【００４４】
以上の処理が終わると、ＶＭＭ１１０は、ＶＭ−Ｅｎｔｒｙ命令を実行し、ゲストＯＳ１４０へ処理を移す。
【００４５】
逆に、ゲストＯＳ１４０で例外が発生してＶＭ−Ｅｘｉｔすると、ＶＭＭ１１０へ処理が戻る。ＶＭＭ１１０は、ＶＭ−Ｅｘｉｔ要因を特定し、ｖＶＭＣＳ７１０の制御情報保持部７１３に、ＶＭＭ１２０で処理するＶＭ−Ｅｘｉｔ要因として設定されたＶＭ−Ｅｘｉｔ要因と照合する。ＶＭＭ１２０で処理するＶＭ−Ｅｘｉｔ要因であった場合には、処理をＶＭＭ１２０へ移して、ＶＭＭ１２０に例外（ＶＭ−Ｅｘｉｔ要因に応じた処理）を処理させる。
【００４６】
ＶＭＭ１２０へ例外を渡すために、ゲスト状態保持部７０２に保持されているｖＣＰＵ４２０の状態をｖＶＭＣＳ７１０のゲスト状態保持部７１２へコピーする。そして、ｖＶＭＣＳ７１０のホスト状態保持部７１１に保持されたｖＣＰＵ４１０の状態を、ＶＭＣＳ７００のゲスト状態保持部７０２へ設定する。制御情報保持部６０３に退避していた設定、及びＶＭ−Ｅｘｉｔに関する情報を、ＶＭＣＳ７００の制御情報保持部７０３へ設定する。最後に、ＶＭ−Ｅｎｔｒｙ命令を実行して、ＶＭＭ１２０へ処理を移す。
【００４７】
ＶＭＭ１２０は、ＶＭＭ１１０からのＶＭ−Ｅｎｔｒｙにより、ゲストＯＳ１４０からＶＭ−Ｅｘｉｔした処理が移されたと判断し、そのＶＭ−Ｅｘｉｔ要因に応じた処理を行う。その処理が完了すると、処理をゲストＯＳ１４０へ戻すためのｖＶＭＣＳ７１０の設定及びＶＭ−Ｅｎｔｒｙ命令の実行を行う。これらは既に説明したように、ＶＭＭ１１０によるエミュレーションによってなされる。
【００４８】
このように第２層のＶＭＭ１２０とゲストＯＳ１４０との間の状態遷移は、一度、第１層のＶＭＭ１１０を経由することで行われる。
【００４９】
＜ＣＰＵのＧＰＡ−ＨＰＡ変換＞
ＣＰＵの仮想化支援機構には、ＣＰＵによるメモリアクセスのためのＧＰＡ−ＨＰＡ変換機能が用意されている。ＣＰＵのＧＰＡ−ＨＰＡ変換は、ＤＭＡＲと同様に、変換テーブルを用いて行われる。この変換テーブルは、ＧＰＡ−ＨＰＡ変換の他に、ＧＰＡの特定の領域をＷＰに設定するなどのメモリ属性の設定も行える。例えばインテル（登録商標）のＣＰＵの仮想化支援機構であるＶＴ−ｘでは、この変換テーブルをＥＰＴ（Extended Page Table）と呼ぶ。ＶＭＣＳ７００の制御情報保持部７０３には、このＥＰＴを登録する場所が用意されている。
【００５０】
ＶＭＭ１１０がＶＭ１１１を動かす場合には、ＶＭ１１１のゲストメモリ空間のアドレスＧＰＡ１とホストメモリ空間のアドレスＨＰＡとの変換テーブルであるＥＰＴ９０１を作成して、ＶＭＣＳ７００の制御情報保持部７０３に設定する。一方、ＶＭＭ１２０がＶＭ１２１を動かす場合には、ＶＭ１２１のゲストメモリ空間のアドレスＧＰＡ２とＶＭＭ１２０のゲストメモリ空間ＧＰＡ１との変換テーブルであるＥＰＴ９１２を作成して、ｖＶＭＣＳ７１０の制御情報保持部７１３に設定する。
【００５１】
ＶＭＭ１１０は、ＧＰＡ１−ＨＰＡの変換テーブルであるＥＰＴ９０１と、ＧＰＡ２−ＧＰＡ１の変換テーブルであるＥＰＴ９１２とから、ＧＰＡ２−ＨＰＡの変換テーブルであるＥＰＴ９０２を作成することが可能である。つまり、ＥＰＴ９０２は、ＶＭＭ１１０からゲストＯＳ１４０へＶＭ−Ｅｎｔｒｙする際に、制御情報保持部７０３に設定される変換テーブルとなる。
【００５２】
＜ＤＭＡＲ−ＨＷの入れ子の仮想化＞
前述した１階層でのＤＭＡＲ−ＨＷの仮想化とＣＰＵの仮想化支援機構の入れ子の仮想化とを組み合わせることにより、ＤＭＡＲ−ＨＷの入れ子の仮想化を実現できる。
【００５３】
図７に、従来技術の入れ子の仮想化とＤＭＡＲ−ＨＷの仮想化とをそのまま組み合わせた場合のＤＭＡＲ−ＨＷの入れ子の仮想化の一例を示す。なお、図３に示す従来技術のＤＭＡＲ−ＨＷの仮想化、及び図６に示す入れ子の仮想化の例と同一の部分については、同一符号を付して、詳細な説明を省略する。以下、図７に示す構成を比較例という。
【００５４】
図７の比較例に係る情報処理装置１５０は、ハードウェアリソースであるＣＰＵ４００、メモリ３００、ＤＭＡＲ−ＨＷ２００、及びＩ／Ｏデバイス８０１、８０２を備えている。情報処理装置１５０において、第１層のＶＭＭ１１０を動作させ、第１層のＶＭ１１１、１１２を構築している。さらに、ＶＭ１１１上で第２層のＶＭＭ１２０を動作させ、第２層のＶＭ１２１を構築し、ＶＭ１２１上でゲストＯＳ１４０を動作させている。なお、ＶＭＭ１１０が動作するホストメモリ空間をＨＰＡ、ＶＭＭ１２０が動作するゲストメモリ空間をＧＰＡ１、及びゲストＯＳ１４０が動作するゲストメモリ空間をＧＰＡ２とする。
【００５５】
また、ＶＭ１１１には、ｖＤＭＡＲ−ＨＷ２１１が提供されると共に、ｖメモリ３１１及びｖＣＰＵ４１０が割り当てられている。また、ＶＭ１２１には、ｖＤＭＡＲ−ＨＷ２２１が提供されると共に、ｖメモリ３２１及びｖＣＰＵ４２０が割り当てられている。
【００５６】
また、図８に、図７の構成のおけるメモリ３００の構成の一例を示す。メモリ３００のｖメモリ３１１に割り当てられた領域は、ｖメモリ３２１に割り当てられた領域を含む。ｖメモリ３２１に割り当てられた領域には、ゲストＯＳ１４０により作成されたＧＰＡ２基準のＤＭＡＲテーブル５２０が記憶される。また、ｖメモリ３１１に割り当てられた領域には、ＤＭＡＲテーブル５２０をＧＰＡ１基準に変換したＤＭＡＲテーブル５１２、ＶＭＭ１２０により作成されたＧＰＡ１基準のＤＭＡＲテーブル５１０が記憶される。さらに、ｖメモリ３１１に割り当てられた領域には、ｖＣＰＵ４１０の状態が保持されるｖＶＭＣＳ７１０、及びＧＰＡ２-ＧＰＡ１間の変換テーブルであるＥＰＴ９１２が記憶される。また、メモリ３００には、ＶＭＭ１１０によりＨＰＡ基準で作成されたＤＭＡＲテーブル５００、ＤＭＡＲテーブル５１０をＨＰＡ基準に変換したＤＭＡＲテーブル５０１、ＤＭＡＲテーブル５２０をＨＰＡ基準に変換したＤＭＡＲテーブル５０２が記憶される。また、メモリ３００には、ＣＰＵ４００の状態を保持するＶＭＣＳ７００、ＶＭＣＳ７００の状態が退避されるＶＭＣＳ−Ｃ６００が記憶される。また、メモリ３００には、ＧＰＡ１−ＨＰＡ間の変換テーブルであるＥＰＴ９０１、及びＧＰＡ２−ＨＰＡ間の変換テーブルであるＥＰＴ９０２が記憶される。
【００５７】
また、図７に示すように、ＶＭＭ１１０は、ＶＭ−Ｅｘｉｔハンドラ１０、及びＤＭＡＲ仮想化部１１を備えている。さらに、ＤＭＡＲ仮想化部１１は、図９に示すように、ＧＰＡ１ＤＭＡＲテーブル取得部１２、ＧＰＡ１−ＨＰＡ変換部１３、ＷＰ設定部１４、ＤＭＡＲテーブル作成部１５、及びホストＤＭＡＲテーブル更新部１６を備えている。なお、ＶＭＭ１２０も、同様に、ＶＭ−Ｅｘｉｔハンドラ２０、及びＤＭＡＲ仮想化機能２１を備えており、ＶＭＭ１１０のＶＭ−Ｅｘｉｔハンドラ１０、及びＤＭＡＲ仮想化部１１と同様の機能が提供される。
【００５８】
ＶＭ−Ｅｘｉｔハンドラ１０は、ゲストＯＳ１４０またはＶＭＭ１２０からのＶＭ−Ｅｘｉｔを捕捉し、ＶＭ−Ｅｘｉｔ要因を特定し、ＶＭ−Ｅｘｉｔ要因に応じた処理を行う。ＶＭ−Ｅｘｉｔ要因に応じた処理とは、例えば、ゲストＯＳ１４０またはＶＭＭ１２０へＶＭ−Ｅｎｔｒｙする際のＶＭＣＳに対する設定などである。また、ＶＭ−Ｅｘｉｔハンドラ１０は、ＶＭＭ１２０が、ゲストＯＳ１４０が作成したＤＭＡＲテーブル５２０の領域をＷＰに設定するために、ＥＰＴ９１２を変更した際に、変更内容をＥＰＴ９０２へ反映する。
【００５９】
ＧＰＡ１ＤＭＡＲテーブル取得部１２は、ＶＭＭ１２０が管理するＤＭＡＲテーブル５１０及びＤＭＡＲテーブル５１２を取得する。ＧＰＡ１−ＨＰＡ変換部１３は、ＧＰＡ１をＨＰＡへ変換する。ＷＰ設定部１４は、ＤＭＡＲテーブル５１０、５１２の領域をＷＰに設定する。ＤＭＡＲテーブル作成部１５は、ＧＰＡ１ＤＭＡＲテーブル取得部１２により取得されたＤＭＡＲテーブルをＧＰＡ１−ＨＰＡ変換したＤＭＡＲテーブルを作成する。ホストＤＭＡＲテーブル更新部１６は、ＤＭＡＲテーブル作成部１５により作成されたＤＭＡＲテーブルの内容でＤＭＡＲテーブル５００を更新する。
【００６０】
次に、図１０〜図１２を参照して、比較例におけるＤＭＡＲ−ＨＷの入れ子の仮想化処理について説明する。図１０は、ＶＭ−Ｅｘｉｔハンドラ１０による処理フローを示す。図１１は、ＶＭ−Ｅｘｉｔハンドラ１０による処理フロー内のＶＭ−Ｅｘｉｔ要因毎の処理（１）フローを示す。図１２は、ＤＭＡＲ仮想化部１１によるＤＭＡＲ仮想化処理フローを示す。
【００６１】
図１０に示すＶＭ−Ｅｘｉｔハンドラ１０の処理フローのステップＳ１で、ＶＭ−Ｅｘｉｔハンドラ１０が、ゲストＯＳ１４０またはＶＭＭ１２０からのＶＭ−Ｅｘｉｔの要因を、ＶＭＣＳ７００の制御情報保持部７０３に仮想化支援機構４９０により自動で格納されるＶＭ−Ｅｘｉｔ要因を参照することにより、特定する。例えば、ゲストＯＳ１４０が、ｖＤＭＡＲ−ＨＷ２２１へＤＭＡＲテーブル５２０を設定する際には、ｖＤＭＡＲ−ＨＷ２２１のレジスタがマップされたアドレスへアクセスする。このアドレスへのアクセスで例外が発生するように、ＥＰＴ９０２に予め設定しておく。これにより、ＶＭ−Ｅｘｉｔ要因が特定のアドレスへのアクセス例外である場合に、ＶＭＣＳ７００の制御情報保持部７０３に格納される情報から、例外を起こしたアドレスを取得し、このアドレスがｖＤＭＡＲ−ＨＷ２２１のレジスタがマップされたアドレスに一致すれば、「ｖＤＭＡＲ−ＨＷ２２１への設定」と判定することができる。
【００６２】
次に、ステップＳ２で、ＶＭ−Ｅｘｉｔハンドラ１０が、捕捉したＶＭ−ＥｘｉｔがゲストＯＳ１４０からのＶＭ−Ｅｘｉｔか、またはＶＭＭ１２０からのＶＭ−Ｅｘｉｔかを判定する。ゲストＯＳ１４０のＶＭ−Ｅｘｉｔの場合には、ステップＳ５５へ移行し、ＶＭＭ１２０からのＶＭ−Ｅｘｉｔの場合には、ステップＳ１０へ移行する。
【００６３】
ステップＳ５５では、ＶＭ−Ｅｘｉｔハンドラ１０が、ＶＭ−Ｅｘｉｔ要因に応じた処理を、そのままＶＭＭ１１０で行うか、またはＶＭＭ１２０へ任せるか、すなわち処理先を判定する。この判定は、ｖＶＭＣＳ７１０の制御情報保持部７１３に、ＶＭＭ１２０が処理するＶＭ−Ｅｘｉｔ要因を予め設定しておき、この設定を参照することにより行う。ＶＭ−Ｅｘｉｔ要因をＶＭＭ１１０で処理する場合には、ステップＳ２０へ移行し、ＶＭＭ１２０で処理する場合には、ステップＳ６１へ移行する。
【００６４】
ステップＳ６１では、ＶＭ−Ｅｘｉｔハンドラ１０が、ＶＭＭ１２０へ処理を移すための各種設定をＶＭＣＳへ行う。次に、ステップＳ６２で、ＶＭ−Ｅｘｉｔハンドラ１０が、ＶＭＭ１２０へ処理を移すために、ＶＭＭ１２０へＶＭ−Ｅｎｔｒｙする。
【００６５】
一方、ステップＳ２０では、ＶＭ−Ｅｘｉｔハンドラ１０が、ＶＭ−Ｅｘｉｔ要因毎の処理（２）を実行する。ＶＭ−Ｅｘｉｔ要因毎の処理（２）とは、レジスタへの値の読み書きや命令の実行など、ＶＭＭ１１０が行うべき処理である。ＶＭ−Ｅｘｉｔ要因毎の処理（２）が終わると、ステップＳ２２へ移行し、ＶＭ−Ｅｘｉｔハンドラ１０が、ゲストＯＳ１４０へ処理を返すために、ゲストＯＳ１４０へＶＭ−Ｅｎｔｒｙする。
【００６６】
また、ステップＳ１０では、ＶＭ−Ｅｘｉｔハンドラ１０が、ステップＳ１で特定したＶＭ−Ｅｘｉｔ要因が、ＶＭ−Ｅｎｔｒｙ命令か否かを判定する。ＶＭ−Ｅｘｉｔ要因が、ＶＭ−Ｅｎｔｒｙ命令の場合には、ステップＳ２１へ移行し、ＶＭ−Ｅｘｉｔハンドラ１０が、ゲストＯＳ１４０へ処理を移すための各種設定をＶＭＣＳへ行う。次に、ステップＳ２２で、ＶＭ−Ｅｘｉｔハンドラ１０が、ゲストＯＳ１４０に処理を移すために、ゲストＯＳ１４０へＶＭ−Ｅｎｔｒｙする。
【００６７】
一方、上記ステップＳ１０で、ＶＭ−Ｅｘｉｔハンドラ１０が、ＶＭ−Ｅｘｉｔ要因がＶＭ−Ｅｎｔｒｙ命令ではないと判定すると、ステップＳ３０へ移行し、図１１に示すＶＭ−Ｅｘｉｔ要因毎の処理（１）を実行する。
【００６８】
図１１に示すＶＭ−Ｅｘｉｔ要因毎の処理（１）のステップＳ３１で、ＶＭ−Ｅｘｉｔハンドラ１０が、ＶＭ−Ｅｘｉｔ要因がｖＤＭＡＲ−ＨＷ２１１への設定か否かを判定する。ＶＭ−Ｅｘｉｔ要因がｖＤＭＡＲ−ＨＷ２１１への設定の場合には、ステップＳ１００へ移行し、ｖＤＭＡＲ−ＨＷ２１１への設定ではない場合には、ステップＳ３２へ移行する。
【００６９】
ステップＳ３２では、ＶＭ−Ｅｘｉｔハンドラ１０が、ＶＭ−Ｅｘｉｔ要因がＷＰ設定されたＤＭＡＲテーブル５１０の更新か否かを判定する。ＶＭ−Ｅｘｉｔ要因がＷＰ設定されたＤＭＡＲテーブル５１０の更新の場合には、ステップＳ１００へ移行し、ＷＰ設定されたＤＭＡＲテーブル５１０の更新ではない場合には、ステップＳ３３へ移行する。
【００７０】
ステップＳ１００では、ＤＭＡＲ仮想化部１１が、図１２に示すＤＭＡＲ仮想化処理を実行する。
【００７１】
図１２に示すＤＭＡＲ仮想化処理のステップＳ１０１で、ＶＭ−Ｅｘｉｔハンドラ１０が、ＶＭ−Ｅｘｉｔ要因がｖＤＭＡＲ−ＨＷ２１１への設定か否かを判定する。ＶＭ−Ｅｘｉｔ要因がｖＤＭＡＲ−ＨＷ２１１への設定の場合には、ステップＳ１０２へ移行し、ＶＭ−Ｅｘｉｔ要因がＷＰ設定されたＤＭＡＲテーブル５１０の更新の場合には、ステップＳ１１１へ移行する。
ステップＳ１０２では、ＧＰＡ１ＤＭＡＲテーブル取得部１２が、ＶＭＭ１２０が作成したＤＭＡＲテーブル５１０を取得する。ＤＭＡＲテーブル５１０は、ＧＰＡ１基準に作成されている。そこで、次のステップＳ１０３で、ＤＭＡＲテーブル作成部１５が、ＧＰＡ１−ＨＰＡ変換部１３を利用して、ＧＰＡ１基準のＤＭＡＲテーブル５１０をＨＰＡ基準に変換したＤＭＡＲテーブル５０１を作成する。
【００７２】
次に、ステップＳ１０４で、ホストＤＭＡＲテーブル更新部１６が、ＤＭＡＲテーブル５００のＩ／Ｏデバイス８０１に対する設定を、ＤＭＡＲテーブル５０１の内容で更新する。ステップＳ１０５で、ＶＭＭ１２０によるＤＭＡＲテーブル５１０の更新を検出できるように、ＷＰ設定部１４が、ＤＭＡＲテーブル５１０が記憶されたメモリ領域のＷＰ設定を、ＣＰＵ４００のＧＰＡ１−ＨＰＡ変換を行うＥＰＴ９０１に反映する。設定が終了すると、図１１に示すＶＭ−Ｅｘｉｔ要因毎の処理（１）へリターンする。
一方、ステップＳ１１１では、ＧＰＡ１ＤＭＡＲテーブル取得部１２が、ＶＭＭ１２０が作成したＤＭＡＲテーブル５１２を取得する。ＤＭＡＲテーブル５１２は、ＧＰＡ１基準に作成されている。そこで、次のステップＳ１１２で、ＤＭＡＲテーブル作成部１５が、ＧＰＡ１−ＨＰＡ変換部１３を利用して、ＧＰＡ１基準のＤＭＡＲテーブル５１２をＨＰＡ基準に変換したＤＭＡＲテーブル５０２を作成する。
【００７３】
次に、ステップＳ１１３で、ホストＤＭＡＲテーブル更新部１６が、ＤＭＡＲテーブル５００のＩ／Ｏデバイス８０１に対する設定を、ＤＭＡＲテーブル５０２の内容で更新する。次に、ステップＳ１１４で、ＶＭＭ１２０によるＤＭＡＲテーブル５１２の更新を検出できるように、ＷＰ設定部１４が、ＤＭＡＲテーブル５１２が記憶されたメモリ領域のＷＰ設定を、ＣＰＵ４００のＧＰＡ１−ＨＰＡ変換を行うＥＰＴ９０１に反映する。設定が終了すると、図１１に示すＶＭ−Ｅｘｉｔ要因毎の処理（１）へリターンする。
【００７４】
上記ステップＳ３２で否定判定された場合は、ステップＳ３３へ移行し、ＶＭ−Ｅｘｉｔハンドラ１０が、ＶＭ−Ｅｘｉｔ要因に応じた処理を実行して、図１０に示すＶＭ−Ｅｘｉｔハンドラ１０による処理へリターンする。
【００７５】
図１３に、ＤＭＡＲ−ＨＷの入れ子の仮想化処理における非特権モードと特権モードとの遷移を示す。なお、ここでは、ゲストＯＳ１４０にＩ／Ｏデバイス８０１が割り当てられ、ゲストＯＳ１４０が、ｖＤＭＡＲ−ＨＷ２２１に、Ｉ／Ｏデバイス８０１に対する設定を行う場合を示している。また、非特権モードから特権モードへのＶＭ−Ｅｘｉｔを一点鎖線の矢印、特権モードから非特権モードへのＶＭ−Ｅｎｔｒｙを二点鎖線の矢印で示している。
【００７６】
図１３のステップＳ５００で、ゲストＯＳ１４０が、ｖＤＭＡＲ−ＨＷ２２１へのＤＭＡＲテーブル５２０の設定を行うため、ｖＤＭＡＲ−ＨＷ２２１のレジスタにアクセスすると、ＶＭＭ１１０へＶＭ−Ｅｘｉｔする。本来なら、ｖＤＭＡＲ−ＨＷ２２１を管理する第２層のＶＭＭ１２０へ処理を移したいが、ゲストＯＳ１４０及びＶＭＭ１２０は共に非特権モードであり、直接ＶＭ−Ｅｘｉｔすることはできないため、ゲストＯＳ１４０からＶＭＭ１１０へＶＭ−Ｅｘｉｔされる。
【００７７】
次に、ステップＳ５０１で、ＶＭ−Ｅｘｉｔハンドラ１０が、ＶＭ−Ｅｘｉｔ要因を特定する。ＶＭ−Ｅｘｉｔ要因は、ゲストＯＳ１４０によるｖＤＭＡＲ−ＨＷ２２１への設定であり、これは本来ＶＭＭ１２０の処理であるため、ステップＳ５０２で、ＶＭＭ１２０へ処理を移す。ステップＳ５０１→Ｓ５０２は、図１０のステップＳ１→Ｓ２→Ｓ５５→Ｓ６１→Ｓ６２に相当する。
【００７８】
次に、ステップＳ５０３で、ＶＭＭ１２０のＶＭ−Ｅｘｉｔハンドラ２０が、ＶＭ−Ｅｘｉｔ要因を、ゲストＯＳ１４０によるｖＤＭＡＲ−ＨＷ２２１への設定であると特定する。次に、ステップＳ５０４で、ＶＭＭ１２０のＤＭＡＲ仮想化機能２１が、ＧＰＡ２空間を基準にして作成されたＤＭＡＲテーブル５２０を、ＧＰＡ１空間を基準に変換したＤＭＡＲテーブル５１２を作成する。次に、ステップＳ５０５で、ＤＭＡＲ仮想化機能２１が、ＤＭＡＲテーブル５１０をＤＭＡＲテーブル５１２の内容で更新する。ＤＭＡＲテーブル５１０が記憶されたメモリ領域はＷＰが設定されているため、ＤＭＡＲテーブル５１０の更新により例外が発生し、ＶＭＭ１１０へＶＭ−Ｅｘｉｔする。
【００７９】
次に、ステップＳ５０６で、ＶＭ−Ｅｘｉｔハンドラ１０が、ＶＭ−Ｅｘｉｔ要因を、ＷＰ設定されたＤＭＡＲテーブル５１０の更新であると特定する。次に、ステップＳ５０７で、ＧＰＡ１ＤＭＡＲテーブル取得部１２が、ＤＭＡＲテーブル５１２を取得する。そして、ＤＭＡＲテーブル作成部１５が、ＧＰＡ１−ＨＰＡ変換部１３を利用して、ＧＰＡ１基準のＤＭＡＲテーブル５１２をＨＰＡ基準に変換したＤＭＡＲテーブル５０２を作成する。
【００８０】
次に、ステップＳ５０８で、ホストＤＭＡＲテーブル更新部１６が、ＤＭＡＲテーブル５００を、ＤＭＡＲテーブル５０２の内容で更新する。次に、ステップＳ５０９で、ＷＰ設定部１４が、ＤＭＡＲテーブル５１２が記憶されたメモリ領域をＷＰに設定する。次に、ステップＳ５１０で、ＶＭ−Ｅｘｉｔハンドラ１０が、ＶＭＭ１２０に処理を移すために、ＶＭＭ１２０へＶＭ−Ｅｎｔｒｙする。
【００８１】
ステップＳ５０６→Ｓ５０７→Ｓ５０８→Ｓ５０９→Ｓ５１０は、図１０のステップＳ１→Ｓ２→Ｓ１０→Ｓ３０→図１１のＳ３１→Ｓ３２→Ｓ１００→図１２のＳ１０１→Ｓ１１１→Ｓ１１２→Ｓ１１３→Ｓ１１４→図１０のＳ６２に相当する。
【００８２】
次に、ステップＳ５１１で、ＶＭＭ１２０が、ｖＣＰＵ４１０のＧＰＡ２−ＧＰＡ１変換を行うＥＰＴ９１２に、ゲストＯＳ１４０の作成したＤＭＡＲテーブル５２０が記憶されたメモリ領域のＷＰを設定する。
【００８３】
次に、ステップＳ５１２で、ＶＭＭ１２０は、ゲストＯＳ１４０へＶＭ−Ｅｎｔｒｙするための設定を、ｖＣＰＵ４１０のｖＶＭＣＳ７１０へ行う。ｖＶＭＣＳ７１０への設定は、特権命令であるＶＭＷＲＩＴＥまたはＶＭＲＥＡＤの実行を伴うため、ＶＭＭ１１０へＶＭ−Ｅｘｉｔする。
【００８４】
次に、ステップＳ５１３で、ＶＭ−Ｅｘｉｔハンドラ１０が、ＶＭ−Ｅｘｉｔ要因を、ｖＶＭＣＳ７１０へのＶＭＷＲＩＴＥまたはＶＭＲＥＡＤであると特定する。次に、ステップＳ５１４で、ＶＭ−Ｅｘｉｔハンドラ１０が、ｖＶＭＣＳ７１０及びＥＰＴ９０２への設定を行う。次に、ステップＳ５１５で、ＶＭ−Ｅｘｉｔハンドラ１０が、ＶＭＭ１２０に処理を移すために、ＶＭＭ１２０へＶＭ−Ｅｎｔｒｙする。ｖＶＭＣＳ７１０及びＥＰＴ９０２への設定では、ＶＭＭ１１０とＶＭＭ１２０との間で、ＶＭ−Ｅｘｉｔ及びＶＭ−Ｅｎｔｒｙが複数回繰り返されることになる。その設定の中で、ＶＭ−Ｅｘｉｔハンドラ１０は、ＥＰＴ９１２が変更されていることを検出すると、ＧＰＡ２−ＨＰＡ変換を行うＥＰＴ９０２へその変更を反映する。
【００８５】
上記ステップＳ５１３→Ｓ５１４→Ｓ５１５は、図１０のステップＳ１→Ｓ２→Ｓ１０→Ｓ３０→図１１のＳ３１→Ｓ３２→Ｓ３３→図１０のＳ６１に相当する。
【００８６】
次に、ステップＳ５１６で、ＶＭＭ１２０が、ゲストＯＳ１４０へ処理を戻すためにＶＭ−Ｅｎｔｒｙ命令を実行する。非特権モードのＶＭＭ１２０による特権命令ＶＭ−Ｅｎｔｒｙの実行により、例外が発生し、ＶＭＭ１１０へＶＭ−Ｅｘｉｔする。
【００８７】
次に、ステップＳ５１７で、ＶＭ−Ｅｘｉｔハンドラ１０が、ＶＭ−Ｅｘｉｔ要因を、ＶＭＭ１２０からゲストＯＳ１４０へのＶＭ−Ｅｎｔｒｙ命令であると特定する。次に、ステップＳ５１８で、ゲストＯＳ１４０へ処理を移す。上記のステップＳ５１７→Ｓ５１８は、図１０のステップＳ１→Ｓ２→Ｓ１０→Ｓ２１→Ｓ２２に相当する。
【００８８】
図１４に、ＤＭＡＲ−ＨＷの入れ子の仮想化におけるＤＭＡＲテーブルの関係の一例を示す。ＨＰＡのアドレス範囲４ＧＢ〜１０ＧＢが、ＧＰＡ１の０ＧＢ〜６ＧＢとして割り当てられている。さらにＧＰＡ１のアドレス範囲４ＧＢ〜６ＧＢが、ＧＰＡ２の０ＧＢ〜２ＧＢとして割り当てられている。ＧＰＡ２上に作成されたＤＭＡＲテーブル５２０には、ＧＰＡ２のアドレス範囲１ＧＢ〜２ＧＢがＩ／Ｏデバイス８０１に割り当てられた領域であるとの設定が含まれる。ＤＭＡＲテーブル５２０をＧＰＡ１上に変換したものがＤＭＡＲテーブル５１２であり、ＤＭＡＲテーブル５１２をＨＰＡ上に変換したものがＤＭＡＲテーブル５０２である。ＤＭＡＲテーブル５０２には、ＨＰＡのアドレス範囲９ＧＢ〜１０ＧＢがＩ／Ｏデバイス８０１に割り当てられた領域であるとの設定が含まれる。
【００８９】
また、ＶＭＭ１２０により、ＧＰＡ１上に作成されたＤＭＡＲテーブル５１０をＨＰＡ上に変換したものがＤＭＡＲテーブル５０１である。
【００９０】
＜問題点＞
以上説明したように、従来技術をそのまま組み合わせた比較例によるＤＭＡＲ−ＨＷの入れ子の仮想化では、図１３に示すように、特権モードと非特権モードとの間の遷移（ＶＭ−Ｅｎｔｒｙ及びＶＭ−Ｅｘｉｔ）が多いことが分かる。特権モードと非特権モードとの間の遷移回数が多い場合には、オーバヘッドが大きくなり、ゲストＯＳにＤＭＡＲ−ＨＷを提供する際の仮想化に時間を要することになる。
【００９１】
＜開示の技術の概要＞
まず、上記の問題点を解決するための開示の技術の概念について説明する。比較例におけるＤＭＡＲ−ＨＷの入れ子の仮想化における第２層のＶＭＭ１２０の役割を考える。図１５の左図に示すように、ＶＭＭ１２０の役割は、ゲストＯＳ１４０の作成したＧＰＡ２基準のＤＭＡＲテーブル５２０をＧＰＡ１基準のＤＭＡＲテーブル５１２に変換して、ｖＤＭＡＲ−ＨＷ２１１へ設定することである。ｖＤＭＡＲ−ＨＷ２１１へ行われた設定は、第１層のＶＭＭ１１０が、ＤＭＡＲテーブル５１２をＨＰＡ基準のＤＭＡＲテーブル５０２に変換して、ＤＭＡＲ−ＨＷ２００へ反映する。
【００９２】
つまり、ＶＭＭ１２０は、ゲストＯＳ１４０が作成したＤＭＡＲテーブル５２０がＤＭＡＲ−ＨＷ２００へ設定されるまでの中継点にすぎない。ＶＭＭ１１０が直接ゲストＯＳ１４０のＤＭＡＲテーブル５２０をＤＭＡＲ−ＨＷ２００へ設定することができれば、第２層のＶＭＭ１２０を中継させる必要がない。
【００９３】
この場合、ゲストＯＳ１４０がｖＤＭＡＲ−ＨＷ２２１を使用していることを、第２層のＶＭＭ１２０は知らないことになる。別の言い方をすれば、ＶＭＭ１２０は、ゲストＯＳ１４０がｖＤＭＡＲ−ＨＷ２２１を使用していないと認識することになる。つまり、第２層のＶＭＭ１２０は、上位のゲストＯＳ１４０の設定を意識することなく、自分の設定だけをｖＤＭＡＲ−ＨＷ２１１へ行えばよい。そして、ゲストＯＳ１４０及び第２層のＶＭＭ１２０のそれぞれが行ったＤＭＡＲの設定を、最終的に第１層のＶＭＭ１１０によりＤＭＡＲ−ＨＷ２００へ反映する。すなわち、図１５の右図に示すように、ＧＰＡ２基準のＤＭＡＲテーブル５２０を、ＶＭＭ１１０Ｂ（開示の技術の第１層のＶＭＭ）により直接ＨＰＡ基準のＤＭＡＲテーブル５０２へ変換する。
【００９４】
＜第１実施形態＞
以下、開示の技術の第１実施形態の一例を、図面を参照して詳細に説明する。
【００９５】
図１６に本第１実施形態に係る情報処理装置１００を示す。以下、図７に示す比較例と異なる点について説明する。図１６に示す第１実施形態では、情報処理装置１００で動作する第１層のＶＭＭ１１０Ｂが、ＶＭ−Ｅｘｉｔハンドラ１０Ｂ及びＤＭＡＲ仮想化部１１Ｂを備えている。なお、ＶＭ−Ｅｘｉｔハンドラ１０Ｂは、開示の技術の特定部の一例である。また、ＤＭＡＲ仮想化部１１Ｂは、開示の技術の設定部の一例である。
【００９６】
ＶＭ−Ｅｘｉｔハンドラ１０Ｂは、ゲストＯＳ１４０またはＶＭＭ１２０からのＶＭ−Ｅｘｉｔを捕捉し、ＶＭ−Ｅｘｉｔ要因を特定する。ＶＭ−Ｅｘｉｔハンドラ１０Ｂは、ゲストＯＳ１４０からのＶＭ−Ｅｘｉｔについて、ＶＭ−Ｅｘｉｔ要因が「ＤＭＡＲ−ＨＷ２２１への設定」か、または「ＷＰ設定されたＤＭＡＲテーブル５２０の更新」であるかを判定する。ＶＭ−Ｅｘｉｔ要因が「ＤＭＡＲ−ＨＷ２２１への設定」または「ＷＰ設定されたＤＭＡＲテーブル５２０の更新」の場合は、処理をＶＭＭ１２０へ任せずにＶＭＭ１１０Ｂで実行する。
【００９７】
上述したように、ＤＭＡＲ−ＨＷへのＤＭＡＲテーブルの設定は、メモリにマップされたＤＭＡＲ−ＨＷのレジスタへのアクセスにより行われる。ゲストＯＳ１４０によるメモリへのアクセスで例外が発生し、ＶＭ−Ｅｘｉｔした場合に、アクセスしたアドレスがゲストＯＳ１４０に見せているｖＤＭＡＲ−ＨＷ２２１のレジスタのアドレスに一致すれば、ＤＭＡＲ−ＨＷ２２１へのアクセスであると判定できる。すなわち、ｖＤＭＡＲ−ＨＷ２２１へのＤＭＡＲテーブル５２０の設定により、ＶＭ−Ｅｘｉｔしたと判定することができる。
【００９８】
ここで、レジスタのアドレスへのアクセスを検出する場合には、第２層のＶＭＭ１２０がゲストＯＳ１４０に見せているｖＤＭＡＲ−ＨＷ２２１のレジスタのアドレスは、ＤＭＡＲ−ＨＷ２００のレジスタがマップされたアドレスと同じである必要がある。第２層のＶＭＭ１２０がゲストＯＳ１４０へ見せるｖＤＭＡＲ−ＨＷ２２１のレジスタのアドレスを自由に変えてしまうと、第１層のＶＭＭ１１０はそのアドレスを知るすべを持たないため、ｖＤＭＡＲ−ＨＷ２２１へのアクセスを検出することができない。
【００９９】
ただし、ＶＭＭは、物理ＤＭＡＲ−ＨＷのレジスタのアドレスをそのまま上位のゲストに見せる（仮想化する）ことが一般的であるため、上記の制限は特に問題にはならない。
【０１００】
また、ＷＰ設定されたＤＭＡＲテーブル５２０の更新は、メモリアクセスにより例外が発生した場合に、そのアドレスがＤＭＡＲテーブル５２０が記憶されている領域に一致するか否かにより判定することができる。
【０１０１】
図１７に示すように、ＤＭＡＲ仮想化部１１Ｂは、図９に示す比較例のＤＭＡＲ仮想化部１１の各機能部に、ＧＰＡ２ＤＭＡＲテーブル取得部１７及びＧＰＡ２−ＨＰＡ変換部１８が追加されている。
【０１０２】
ＧＰＡ２ＤＭＡＲテーブル取得部１７は、ＶＭ−Ｅｘｉｔ要因がゲストＯＳ１４０によるｖＤＭＡＲ−ＨＷ２２１への設定またはＤＭＡＲテーブル５２０の更新の場合に、ゲストＯＳ１４０が作成したＤＭＡＲテーブル５２０を取得する。
【０１０３】
ＧＰＡ２−ＨＰＡ変換部１８は、ＧＰＡ２をＨＰＡへ変換する。ＧＰＡ２−ＨＰＡ変換部１８は、ＤＭＡＲテーブル作成部１５が、ゲストＯＳ１４０の作成したＤＭＡＲテーブル５２０をＨＰＡ基準に変換したＤＭＡＲテーブル５０２を作成する際に使用される。ＧＰＡ２−ＨＰＡ変換部１８は、ＣＰＵの仮想化支援機構のために作成したＧＰＡ２−ＨＰＡ変換を行うＥＰＴ９０２を使用する。
【０１０４】
また、本第１実施形態では、ＤＭＡＲテーブル５２０をＧＰＡ１基準に変換したＤＭＡＲテーブル５１２は作成されないため、図１８に示すように、メモリ３００には、図８の比較例のメモリ構成と異なり、ＤＭＡＲテーブル５１２を記憶する領域は設けられない。
【０１０５】
情報処理装置１００は、例えば図１９に示すように、ＣＰＵ４００、メモリ３００、及びＤＭＡＲ−ＨＷ２００に加え、不揮発性の記憶部６００、及び入出力インターフェース（Ｉ／Ｆ）８００を備えたサーバ４０で実現することができる。ＣＰＵ４００、メモリ３００、ＤＭＡＲ−ＨＷ２００、記憶部６００、及び入出力Ｉ／Ｆ８００は、バス４２を介して互いに接続されている。Ｉ／Ｏデバイス８０１、８０２は、入出力Ｉ／Ｆ８００を介してサーバ４０と接続されている。
【０１０６】
記憶部６００はＨＤＤ、フラッシュメモリ等によって実現できる。記録媒体としての記憶部６００には、サーバ４０を情報処理装置１００として機能させるための情報処理プログラム５０が記憶されている。ＣＰＵ４００は、情報処理プログラム５０を記憶部６００から読み出してメモリ３００に展開し、情報処理プログラム５０が有するプロセスを順次実行する。
【０１０７】
情報処理プログラム５０は、ＶＭ−Ｅｘｉｔハンドラプロセス５１、及びＤＭＡＲ仮想化プロセス５２を有する。ＣＰＵ４００は、ＶＭ−Ｅｘｉｔハンドラプロセス５１を実行することで、図１７に示すＶＭ−Ｅｘｉｔハンドラ１０Ｂとして動作する。また、ＣＰＵ４００は、ＤＭＡＲ仮想化プロセス５２を実行することで、図１７に示すＤＭＡＲ仮想化部１１Ｂとして動作する。これにより、情報処理プログラム５０を実行したサーバ４０が、情報処理装置１００として機能することになる。
【０１０８】
なお、ＣＰＵ４００により実現される各機能は、例えば半導体集積回路、より詳しくはＡＳＩＣ（Application Specific Integrated Circuit）等で実現することも可能である。
【０１０９】
次に、図２０及び図２１を参照して、本第１実施形態に係る情報処理装置１００の作用として、ＤＭＡＲ−ＨＷの入れ子の仮想化処理について説明する。図２０は、ＶＭ−Ｅｘｉｔハンドラ１０Ｂによる処理フローを示す。図２１は、ＤＭＡＲ仮想化部１１ＢによるＤＭＡＲ仮想化処理Ｂフローを示す。なお、図１０〜図１２に示す比較例におけるＤＭＡＲ−ＨＷの入れ子の仮想化処理と同様の処理については、同一符号を付して、詳細な説明を省略する。
【０１１０】
図２０に示すＶＭ−Ｅｘｉｔハンドラ１０Ｂの処理フローのステップＳ１で、ＶＭ−Ｅｘｉｔハンドラ１０Ｂが、ＶＭ−Ｅｘｉｔを捕捉し、ＶＭ−Ｅｘｉｔ要因を特定する。
【０１１１】
次に、ステップＳ２で、ＶＭ−Ｅｘｉｔハンドラ１０が、トラップしたＶＭ−ＥｘｉｔがゲストＯＳ１４０からのＶＭ−Ｅｘｉｔか、またはＶＭＭ１２０からのＶＭ−Ｅｘｉｔかを判定する。ゲストＯＳ１４０のＶＭ−Ｅｘｉｔの場合には、ステップＳ５１へ移行し、ＶＭＭ１２０からのＶＭ−Ｅｘｉｔの場合には、ステップＳ１０へ移行する。
【０１１２】
ステップＳ５１では、ＶＭ−Ｅｘｉｔハンドラ１０Ｂが、上記ステップＳ１で判定したＶＭ−Ｅｘｉｔ要因が、ゲストＯＳ１４０によるｖＤＭＡＲ−ＨＷ２２１への設定であるか否かを判定する。ｖＤＭＡＲ−ＨＷ２２１への設定の場合には、ＶＭＭ１１０で処理を続けるために、ステップＳ２０Ｂへ移行し、ｖＤＭＡＲ−ＨＷ２２１への設定ではない場合には、ステップＳ５２へ移行する。
【０１１３】
ステップＳ５２では、ＶＭ−Ｅｘｉｔハンドラ１０Ｂが、上記ステップＳ１で判定したＶＭ−Ｅｘｉｔ要因が、ゲストＯＳ１４０によるＷＰ設定されたＤＭＡＲテーブル５２０の更新か否かを判定する。ＷＰ設定されたＤＭＡＲテーブル５２０の更新の場合には、ＶＭＭ１１０で処理を続けるために、ステップＳ２０Ｂへ移行する。ＷＰ設定されたＤＭＡＲテーブル５２０の更新ではない場合には、ステップＳ５５へ移行する。
【０１１４】
ステップＳ２０Ｂでは、ＶＭ−Ｅｘｉｔハンドラ１０Ｂが、ＶＭ−Ｅｘｉｔ要因毎の処理（２Ｂ）を実行する。ＶＭ−Ｅｘｉｔ要因毎の処理（２Ｂ）は、図１１に示すＶＭ−Ｅｘｉｔ要因毎の処理（１）と同様である。ただし、ステップＳ３１の「ｖＤＭＡＲ−ＨＷ２１１への設定」を「ｖＤＭＡＲ−ＨＷ２２１への設定」と読み替える。また、ステップＳ３２の「ＷＰ設定されたＤＭＡＲテーブル５１０の更新」を「ＷＰ設定されたＤＭＡＲテーブル５２０の更新」と読み替える。また、ステップＳ１００の「ＤＭＡＲ仮想化処理」を「ＤＭＡＲ仮想化処理Ｂ」と読み替える。さらに、Ｓ３０で実行される図１１に示すＶＭ−Ｅｘｉｔ要因毎の処理（１）においても、ステップＳ１００の「ＤＭＡＲ仮想化処理」を「ＤＭＡＲ仮想化処理Ｂ」と読み替える。
【０１１５】
図２１に示すＤＭＡＲ仮想化処理ＢのステップＳ１１０では、ＶＭ−Ｅｘｉｔハンドラ１０Ｂが、ＶＭ−Ｅｘｉｔ要因がゲストＯＳ１４０によるｖＤＭＡＲ−ＨＷ２２１への設定、またはＷＲ設定されたＤＭＡＲテーブル５２０の更新か否かを判定する。肯定判定の場合は、ステップＳ１２１へ移行する。一方、ＶＭ−Ｅｘｉｔ要因がＶＭＭ１２０によるｖＤＭＡＲ−ＨＷ２１１への設定、またはＷＰ設定されたＤＭＡＲテーブル５１０の更新の場合、ステップＳ１３１へ移行する。
【０１１６】
ステップＳ１２１では、ＧＰＡ２ＤＭＡＲテーブル取得部１７が、ゲストＯＳ１４０がアクセスしたアドレスに基づいて、ゲストＯＳ１４０が作成したＤＭＡＲテーブル５２０を取得する。ＤＭＡＲテーブル５２０は、ＧＰＡ２基準で作成されている。そこで、次のステップＳ１２２で、ＤＭＡＲテーブル作成部１５が、ＧＰＡ２−ＨＰＡ変換部１８を利用して、ＧＰＡ２基準のＤＭＡＲテーブル５２０をＨＰＡ基準に変換したＤＭＡＲテーブル５０２を作成する。
【０１１７】
次に、ステップＳ１２３で、ホストＤＭＡＲテーブル更新部１６が、ＤＭＡＲテーブル５００のＩ／Ｏデバイス８０１に対する設定を、ＤＭＡＲテーブル５０２の内容で更新する。次に、ステップＳ１２４で、ゲストＯＳ１４０によるＤＭＡＲテーブル５２０の更新を検出できるように、ＷＰ設定部１４が、ＤＭＡＲテーブル５２０が記憶されたメモリ領域のＷＰ設定を、ＣＰＵ４００のＧＰＡ２−ＨＰＡ変換を行うＥＰＴ９０２に反映する。
【０１１８】
一方、ステップＳ１３１へ移行した場合には、ＧＰＡ１ＤＭＡＲテーブル取得部１２が、ＶＭＭ１２０がアクセスしたアドレスに基づいて、ＶＭＭ１２０が作成したＤＭＡＲテーブル５１０を取得する。ＤＭＡＲテーブル５１０は、ＧＰＡ１基準で作成されている。そこで、次のステップＳ１３２で、ＤＭＡＲテーブル作成部１５が、ＧＰＡ１−ＨＰＡ変換部１３を利用して、ＧＰＡ１基準のＤＭＡＲテーブル５１０をＨＰＡ基準に変換したＤＭＡＲテーブル５０１を作成する。
【０１１９】
次に、ステップＳ１３３で、ホストＤＭＡＲテーブル更新部１６が、ＤＭＡＲテーブル５００のＩ／Ｏデバイス８０１に対する設定を、ＤＭＡＲテーブル５０１の内容で更新する。次に、ステップＳ１３４で、ＶＭＭによるＤＭＡＲテーブル５１０の更新を検出できるように、ＷＰ設定部１４が、ＤＭＡＲテーブル５１０が記憶されたメモリ領域のＷＰ設定を、ＣＰＵ４００のＧＰＡ１−ＨＰＡ変換を行うＥＰＴ９０１に反映する。設定が終了すると、図１１に示すＶＭ−Ｅｘｉｔ要因毎の処理（２Ｂ）へリターンする。
【０１２０】
図２２に、本第１実施形態でのＤＭＡＲ−ＨＷの入れ子の仮想化処理における非特権モードと特権モードとの遷移を示す。なお、ここでは、ゲストＯＳ１４０にＩ／Ｏデバイス８０１が割り当てられ、ゲストＯＳ１４０が、ｖＤＭＡＲ−ＨＷ２２１に、Ｉ／Ｏデバイス８０１に対する設定であるＤＭＡＲテーブル５２０を設定する場合を示している。また、非特権モードから特権モードへのＶＭ−Ｅｘｉｔを一点鎖線の矢印、特権モードから非特権モードへのＶＭ−Ｅｎｔｒｙを二点鎖線の矢印で示している。また、図１３に示す比較例でのＤＭＡＲ−ＨＷの入れ子の仮想化処理における非特権モードと特権モードとの遷移と同様の部分については、同一符号を付して、詳細な説明を省略する。
【０１２１】
図２２のステップＳ５００で、ゲストＯＳ１４０が、ｖＤＭＡＲ−ＨＷ２２１へのＤＭＡＲテーブル５２０の設定を行うため、ｖＤＭＡＲ−ＨＷ２２１のレジスタにアクセスすると、ＶＭＭ１１０へＶＭ−Ｅｘｉｔする。次に、ステップＳ５０１で、ＶＭ−Ｅｘｉｔハンドラ１０Ｂが、ＶＭ−Ｅｘｉｔ要因を特定する。
【０１２２】
次に、ステップＳ５２１で、ＶＭ−Ｅｘｉｔハンドラ１０Ｂが、ＶＭ−Ｅｘｉｔ要因が、ゲストＯＳ１４０によるｖＤＭＡＲ−ＨＷ２２１への設定か、またはＷＰ設定されたＤＭＡＲテーブル５２０の更新か否かを判定する。ＶＭ−Ｅｘｉｔ要因がいずれかである場合には、処理をＶＭＭ１２０へ移すことなく、次のステップＳ５２２へ移行する。
【０１２３】
ステップＳ５２２では、ＧＰＡ２ＤＭＡＲテーブル取得部１７が、ＤＭＡＲテーブル５２０を取得する。そして、ＤＭＡＲテーブル作成部１５が、ＧＰＡ２−ＨＰＡ変換部１８を利用して、ＧＰＡ２基準のＤＭＡＲテーブル５２０をＨＰＡ基準に変換したＤＭＡＲテーブル５０２を作成する。
【０１２４】
次に、ステップＳ５０８で、ホストＤＭＡＲテーブル更新部１６が、ＤＭＡＲテーブル５００を、ＤＭＡＲテーブル５０２の内容で更新する。次に、ステップＳ５２３で、ＷＰ設定部１４が、ＤＭＡＲテーブル５２０が記憶されたメモリ領域のＷＰ設定をＥＰＴ９０２へ反映する。次に、ステップＳ５１８で、ゲストＯＳ１４０へ処理を移す。
【０１２５】
上記のステップＳ５０１→Ｓ５２１→Ｓ５２２→Ｓ５０８→Ｓ５２３→Ｓ５１８は、図２０のＳ１→Ｓ２→Ｓ５１（→Ｓ５２）→Ｓ２０Ｂ→図１１のＳ３１（→Ｓ３２）→Ｓ１００→図２１のＳ１２１→Ｓ１２２→Ｓ１２３→Ｓ１２４→図２０のＳ２２に相当する。
【０１２６】
図２３に、本第１実施形態でのＤＭＡＲ−ＨＷの入れ子の仮想化におけるＤＭＡＲテーブルの関係の一例を示す。図１４に示す比較例でのＤＭＡＲ−ＨＷの入れ子の仮想化におけるＤＭＡＲテーブルの関係と、メモリ領域の割り当ては同様である。ただし、本第１実施形態においては、ＤＭＡＲテーブル５２０をＧＰＡ１上に変換したＤＭＡＲテーブル５１２が作成されない点で相違する。
【０１２７】
以上説明したように、本第１実施形態の情報処理装置によれば、上位のゲストＯＳからのＶＭ−Ｅｘｉｔが、ＤＭＡＲ−ＨＷへのＤＭＡＲテーブルの設定または更新の場合には、第２層のＶＭＭに処理を移すことなく、第１層のＶＭＭで処理を行う。これにより、図２２を見ても明らかなように、非特権モードと特権モードとの遷移を減らすことができる。このため、入れ子の仮想化環境におけるゲストＯＳに、ＤＭＡＲ−ＨＷを提供する際の仮想化を高速化することができる。
【０１２８】
＜第２実施形態＞
次に、第２実施形態に係る情報処理装置について説明する。なお、第１実施形態に係る情報処理装置と同一の部分については、同一符号を付して、詳細な説明を省略する。
【０１２９】
図２４に示すように、第２実施形態に係る情報処理装置１０１は、ハードウェアリソースであるＣＰＵ４００、メモリ３００、ＤＭＡＲ−ＨＷ２００、及びＩ／Ｏデバイス８０１、８０２、８０３、８０４を備えている。ＣＰＵ４００は、８個のコア（コア４０１、４０２、・・・、４０８）を備えている。ＤＭＡＲ−ＨＷ２００は、Ｉ／Ｏデバイス８０１、８０２、８０３、８０４からのＤＭＡを制御する。
【０１３０】
ＶＭＭ１１０Ｂは、ＶＭ１１１、１１２を構築し、情報処理装置１０１のハードウェアリソースをＶＭ１１１とＶＭ１１２とに分割して割り当て、その状態を監視及び制御する。
【０１３１】
ＶＭ１１１には、コア４０１、・・・、４０４が割り当てられ、ＶＭ１１１のｖＣＰＵ４１１、・・・、４１４として動作させる。また、ＶＭ１１１には、メモリ３００の一部が、ｖメモリ３１１として割り当てられる。また、ＶＭ１１１には、Ｉ／Ｏデバイス８０１、８０２も直接割り当てられる。また、ＶＭ１１１には、ｖＤＭＡＲ−ＨＷ２１１が提供される。ＶＭ１１２には、コア４０５、・・・、４０８が割り当てられ、ＶＭ１１２のｖＣＰＵ４１５、・・・、４１８として動作させる。また、ＶＭ１１２には、メモリ３００の一部が、ｖメモリ３１２として割り当てられる。また、ＶＭ１１２には、Ｉ／Ｏデバイス８０３、８０４も直接割り当てられる。また、ＶＭ１１２には、ｖＤＭＡＲ−ＨＷ２１２が提供される。ｖＤＭＡＲ−ＨＷ２１１、２１２は、ＶＭＭ１１０Ｂによりエミュレーションされており、ｖＤＭＡＲ−ＨＷ２１１、２１２へのＤＭＡＲテーブルの設定は、ＤＭＡＲ−ＨＷ２００へ反映される。
【０１３２】
ＶＭ１１１の上では、第２層のＶＭＭ１２０が動作しており、ＶＭＭ１２０は、ＶＭ１１１上で動作するＶＭ１２１の状態を監視及び制御する。
【０１３３】
ＶＭ１２１には、ｖＣＰＵ４１１が割り当てられ、ＶＭ１２１のｖＣＰＵ４２１として動作する。また、ＶＭ１２１には、ｖメモリ３１１の一部が、ｖメモリ３２１として割り当てられる。また、ＶＭ１２１には、Ｉ／Ｏデバイス８０１も直接割り当てられる。また、ＶＭ１２１には、ｖＤＭＡＲ−ＨＷ２２１が提供される。なお、詳細は後述するが、ｖＤＭＡＲ−ＨＷ２２１は、ＶＭＭ１１０Ｂによりエミュレーションされており、ｖＤＭＡＲ−ＨＷ２２１へのＤＭＡＲテーブル５２０の設定は、ＤＭＡＲ−ＨＷ２００へ反映される。さらに、ＶＭ１２１の上では、ゲストＯＳ１４０が動作している。
【０１３４】
図２５にＶＭ１１１、１１２、１２１へのメモリの割り当てを示す。メモリ３００のメモリ空間（ＨＰＡ）の内、４ＧＢ〜１２ＧＢの範囲をＶＭ１１１へ割り当て、１２ＧＢ〜１６ＧＢの範囲をＶＭ１１２へ割り当てる。ＶＭ１１１に割り当てられたメモリ空間をＧＰＡ１１、ＶＭ１１２へ割り当てられたメモリ空間をＧＰＡ１２とする。また、ＨＰＡの０ＧＢ〜２ＧＢの範囲は、ＶＭＭ１１０Ｂが使用し、２ＧＢ〜４ＧＢの範囲は、ハードウェアのレジスタ等がマップされる領域とする。さらに、ＶＭ１１１のメモリ空間（ＧＰＡ１１）の内、４ＧＢ〜８ＧＢの範囲をＶＭ１２１へ割り当てる。ＶＭ１２１へ割り当てられたメモリ空間をＧＰＡ２１とする。
【０１３５】
初めに、ＶＭＭ１１０ＢがＶＭ１１１、１１２を構築する際のＥＰＴ及びＤＭＡＲテーブルの設定について説明する。ＶＭＭ１１０Ｂは、ＶＭ上で動作するｖＣＰＵがメモリへアクセスする際に必要なＥＰＴ、及びＶＭに割り当てられたＩ／Ｏデバイスがメモリへアクセスする際に必要なＤＭＡＲテーブルをメモリ上に作成する。ＥＰＴ及びＤＭＡＲテーブルが記憶されるメモリ領域は、ＶＭＭ１１０Ｂ用に割り当てられた０〜２ＧＢの範囲である。
【０１３６】
図２６に、メモリ３００に記憶されるＥＰＴ及びＤＭＡＲテーブルを示す。なお、メモリ３００には、上述したＶＭＣＳ等も記憶されるが、ここでは記載を省略している。ＥＰＴ９０１は、ＧＰＡ１１からＨＰＡへの変換を行うＥＰＴであり、ＶＭ１１１で動作するコア４０１、・・・、４０４のＶＭＣＳへ設定される。ＥＰＴ９２０は、ＧＰＡ１２からＨＰＡへの変換を行うＥＰＴであり、ＶＭ１１２で動作するコア４０５、・・・、コア４０８のＶＭＣＳへ設定される。
【０１３７】
図２７に、ＤＭＡＲ−ＨＷ２００に設定されるＤＭＡＲテーブル５００を示す。ここでは、Ｉ／Ｏデバイス８０１を、バス番号１０、デバイス番号１、及びファンクション番号０とする。この場合、Ｉ／Ｏデバイス８０１に対応するエントリは、ルートエントリテーブル５００Ａのバス番号１０のRoot entry１０を参照する。次に、Root entry１０からコンテキストエントリトテーブル５００Ｂ（Ｂｕｓ１０）を参照する。コンテキストエントリトテーブル５００Ｂ（Ｂｕｓ１０）のデバイス番号１及びファンクション番号０はContext entry ８に対応する。そして、Context entry ８はアドレス変換テーブル５００Ｃ１を参照している。アドレス変換テーブル５００Ｃ１は、ＧＰＡ１１からＨＰＡへ変換するテーブルである。
【０１３８】
同様に、Ｉ／Ｏデバイス８０２を、バス番号２０、デバイス番号２、及びファンクション番号０とする。また、Ｉ／Ｏデバイス８０３を、バス番号３０、デバイス番号３、及びファンクション番号０とする。また、Ｉ／Ｏデバイス８０４を、バス番号４０、デバイス番号４、及びファンクション番号０とする。さらに、アドレス変換テーブル５００Ｃ２を、ＧＰＡ１２からＨＰＡへ変換するテーブルであるとする。図２７の例では、ＶＭ１１１に割り当てられたＩ／Ｏデバイス８０１、８０２がアドレス変換テーブル５００Ｃ１を参照し、ＶＭ１１２に割り当てられたＩ／Ｏデバイス８０３、８０４がアドレス変換テーブル５００Ｃ２を参照していることが分かる。
【０１３９】
次に、ＶＭ１１１上で動作する第２層のＶＭＭ１２０が、ＶＭ１２１を構築する際に、ＥＰＴ及びＤＭＡＲテーブルの設定について説明する。具体的には、ＶＭＭ１２０は、ＶＭ１２１上で動作するｖＣＰＵ４２１によるｖメモリ３２１へのアクセスがｖメモリ３１１へのアクセスへ変換されるようにＥＰＴ９１２を作成する。ＥＰＴ９１２はＧＰＡ２１からＧＰＡ１１への変換を行うテーブルであり、ｖメモリ３１１上に作成される。ＥＰＴ９１２は、ｖＣＰＵ４１１のｖＶＭＣＳへ設定される。このｖＶＭＣＳへＥＰＴ９１２を設定するために、ＶＭＭ１２０は特権命令であるＶＭＷＲＩＴＥ命令を呼ぶ。しかし非特権モードで動作しているＶＭＭ１２０がＶＭＷＲＩＴＥ命令を呼ぶと、ＶＭ−Ｅｘｉｔが発生しＶＭＭ１１０Ｂへ処理が移る。
【０１４０】
ＶＭ１１０Ｂは、ＶＭ−Ｅｘｉｔ要因が、ｖＶＭＣＳへのＥＰＴ９１２の設定であることを特定すると、ＥＰＴ９０２を作成する。ＥＰＴ９０２はＧＰＡ２１からＨＰＡへの変換を行うテーブルである。ＥＰＴ９０２はＧＰＡ２１からＧＰＡ１１への変換を行うＥＰＴ９１２とＧＰＡ１１からＨＰＡへの変換を行うＥＰＴ９０１とを利用して作成される。
【０１４１】
また、ＶＭＭ１２０がｖＤＭＡＲ−ＨＷ２１１にＤＭＡＲテーブル５１０を設定する。ＤＭＡＲテーブル５１０は、ＶＭ１２１へ割り当てたＩ／Ｏデバイス８０１によるＤＭＡを、ＧＰＡ２１からＧＰＡ１１へ変換するためのものである。ＶＭＭ１２０が、ＤＭＡＲテーブル５１０を設定するために、ｖＤＭＡＲ−ＨＷ２１１のレジスタへアクセスすると、ＶＭ−Ｅｘｉｔが発生しＶＭＭ１１０Ｂへ処理が移る。
【０１４２】
ＶＭＭ１１０Ｂは、ＶＭ−Ｅｘｉｔ要因が、ｖＤＭＡＲ−ＨＷ２１１へのＤＭＡＲテーブル５１０の設定であることを特定すると、ＤＭＡＲテーブル５０１を作成する。図２８に、ＤＭＡＲテーブル５０１で更新したＤＭＡＲテーブル５００を示す。ＶＭＭ１２０が作成したＤＭＡＲテーブル５１０では、ＶＭ１２１へ割り当てられたＩ／Ｏデバイス８０１のＤＭＡをＧＰＡ２１からＧＰＡ１１へ変換する。一方、Ｉ／Ｏデバイス８０２は、ＶＭ１１１から他のＶＭへ割り当てられていないため、ＤＭＡＲテーブル５１０内のＩ／Ｏデバイス８０２に対応するエントリはパススルー設定である（ＶＭ１１１のメモリ空間を向いている）。ＤＭＡＲテーブル５０１では、Ｉ／Ｏデバイス８０１のＤＭＡをＧＰＡ２１からＨＰＡへ変換する。ＤＭＡＲテーブル５０１はＧＰＡ２１からＧＰＡ１１への変換を行うＤＭＡＲテーブル５１０内のアドレス変換テーブル５００Ｃ４とＧＰＡ１１からＨＰＡへの変換を行うＥＰＴ９０１とを利用して作成される。ＤＭＡＲテーブル５００のうち、ＶＭ１１１へ割り当てられたＩ／Ｏデバイス８０１、８０２の設定をＤＭＡＲテーブル５０１の内容で更新する。ＤＭＡＲテーブル５００内のＩ／Ｏデバイス８０１に対応するエントリは、アドレス変換テーブル５００Ｃ３を参照するように更新される。一方、ＤＭＡＲテーブル５００内のＩ／Ｏデバイス８０２に対応するエントリは、ＤＭＡＲテーブル５０１内のＩ／Ｏデバイス８０２に対応するエントリがパススルー設定であるため、アドレス変換テーブル５００Ｃ１を参照したままで、変更されない。
【０１４３】
ＤＭＡＲテーブル５００の更新が終わると、ＶＭＭ１２０によりＤＭＡＲテーブル５１０が更新されたことを検出できるように、ＶＭ１１０Ｂは、ＤＭＡＲテーブル５１０の作成されたメモリ領域のＷＰ設定をＥＰＴ９０１へ反映する。これらの設定が終わると、処理を戻すためにＶＭＭ１２０へＶＭ−Ｅｎｔｒｙする。
【０１４４】
ＶＭＭ１２０では、ｖＣＰＵ４２１を動かすための設定をｖＣＰＵ４１１のｖＶＭＣＳへ行う。上述したように、ｖＶＭＣＳへの設定は特権命令であるＶＭＲＥＡＤ／ＶＭＷＲＩＴＥの実行を伴うため、ＶＭ−ＥｘｉｔしてＶＭＭ１１０Ｂにより処理される。これらの設定が終了すると、ゲストＯＳ１４０へ処理を移すために、ＶＭ−Ｅｎｔｒｙ命令を実行する。
【０１４５】
非特権モードで動作しているＶＭＭ１２０が特権命令であるＶＭ−Ｅｎｔｒｙを呼び出すと、ＶＭ−Ｅｘｉｔし、処理がＶＭＭ１１０Ｂへ移る。ＶＭ１１０Ｂは、ＶＭ−Ｅｘｉｔ要因がＶＭ−Ｅｎｔｒｙ命令の呼び出しであることを特定すると、コア４０１のＶＭＣＳへＶＭ１２１を動作させるための設定を行い、ゲストＯＳ１４０へＶＭ−Ｅｎｔｒｙする。
【０１４６】
ＶＭ１２１上で動作するゲストＯＳ１４０は、Ｉ／Ｏデバイス８０１のＤＭＡを制限するために、ｖＤＭＡＲ−ＨＷ２２１へＤＭＡＲテーブル５２０を設定する。例えば、図２９を参照して、Ｉ／Ｏデバイス８０１にＧＰＡ２１の０〜２ＧＢの領域のみへのアクセスを許可するとの制限を設定する場合について説明する。ＤＭＡＲテーブル５２０のアドレス変換テーブル５００Ｃ６は、ＧＰＡ２１の０〜２ＧＢ以外の範囲へのアクセスを拒絶する設定となる。
【０１４７】
ゲストＯＳ１４０は、ＤＭＡＲテーブル５２０をｖＤＭＡＲ−ＨＷ５２０へ設定するために、ｖＤＭＡＲ−ＨＷ２２１のレジスタへアクセスする。このアクセスで、ＶＭ−Ｅｘｉｔが発生する。ＶＭＭ１１０Ｂは、ＶＭ−Ｅｘｉｔ要因がｖＤＭＡＲ−ＨＷ２２１へのＤＭＡＲテーブル５２０の設定であることを特定すると、ＶＭＭ１２０へ処理を移すことなく、そのまま処理を進める。ＶＭＭ１１０Ｂは、ＧＰＡ２１空間のＤＭＡＲテーブル５２０をＨＰＡ空間へ変換したＤＭＡＲテーブル５０２を作成する。ＤＭＡＲテーブル５２０のアドレス変換テーブル５００Ｃ６は、ＧＰＡ２１からＨＰＡへの変換を行うＥＰＴ９０２を利用して、アドレス変換テーブル５００Ｃ５へ変換される。図２５に示すように、ＧＰＡ２１の０〜２ＧＢの領域は、ＨＰＡの６ＧＢ〜８ＧＢの領域に変換される。従って、アドレス変換テーブル５００Ｃ５は、ＧＰＡ２１の０〜２ＧＢの領域にアクセスされた場合は、ＨＰＡの６ＧＢ〜８ＧＢの領域へ変換し、それ以外の範囲へのアクセスを拒絶する設定となる。ＶＭＭ１１０Ｂは、ＤＭＡＲテーブル５００内のＩ／Ｏデバイス８０１に対応するエントリを、ＤＭＡＲテーブル５０２のアドレス変換テーブル５００Ｃ５を参照するように変更する。
【０１４８】
ＤＭＡＲテーブル５００の更新が終わると、ゲストＯＳ１４０によりＤＭＡＲテーブル５２０が更新されたことを検出できるように、ＶＭ１１０Ｂは、ＤＭＡＲテーブル５２０の作成されたメモリ領域のＷＰ設定をＥＰＴ９０２へ反映する。
【０１４９】
ＶＭＭ１１０Ｂは、処理をゲストＯＳ１４０へ戻すために、ＶＭ−Ｅｎｔｒｙ命令を実行する。
【０１５０】
以上のように、ＶＭ１２１上のゲストＯＳ１４０により、ＤＭＡＲ−ＨＷ２００が初期設定される。
【０１５１】
次に、ゲストＯＳ１４０によるＤＭＡＲ−ＨＷ２００に設定されているＤＭＡＲテーブル５００の更新について説明する。ここでは、図３０に示すように、ゲストＯＳ１４０が、Ｉ／Ｏデバイス８０１のアクセス可能なアドレス範囲をＧＰＡ２１の０〜２ＧＢの範囲から、４ＧＢ〜６ＧＢの範囲へ変更する場合を例に説明する。ＤＭＡＲテーブル５２０内のアドレス変換テーブル５００Ｃ８は、ＧＰＡ２１のアドレス範囲４ＧＢ〜６ＧＢのみアクセス可能であることを示す設定である。ゲストＯＳ１４０は、アドレス変換テーブル５００Ｃ８を作成し、ＤＭＡＲテーブル５２０内のＩ／Ｏデバイス８０１に対応するエントリに参照させるように更新する。このとき、更新前のＤＭＡＲテーブル５２０の領域はＷＰ設定されているため、この更新によりＶＭ−Ｅｘｉｔが発生する。
【０１５２】
処理が移ったＶＭＭ１１０Ｂでは、ＶＭ−Ｅｘｉｔ要因が、ＤＭＡＲテーブル５２０内のＩ／Ｏデバイス８０１に対応するエントリの更新であることを特定すると、ＶＭＭ１２０へ処理を移すことなく、そのまま処理を進める。ＶＭＭ１１０Ｂは、ＤＭＡＲテーブル５２０内のＩ／Ｏデバイス８０１に対応するエントリが新しいアドレス変換テーブル５００Ｃ８を参照していることを特定する。そして、ＧＰＡ２１空間のアドレス変換テーブル５００Ｃ８をＨＰＡ空間へ変換したアドレス変換テーブル５００Ｃ７を作成し、ＤＭＡＲテーブル５０２内のＩ／Ｏデバイス８０１に対応するエントリに参照させる。また、ＤＭＡＲテーブル５００内のＩ／Ｏデバイス８０１に対応するエントリからも、アドレス変換テーブル５００Ｃ７を参照させる。アドレス変換テーブル５００Ｃ５がどのエントリからも参照されなくなった場合には、削除してもよい。そして、アドレス変換テーブル５００Ｃ６の使用していたメモリ領域のＷＰ設定を解除し、新たにアドレス変換テーブル５００Ｃ８の領域のＷＰ設定をＥＰＴ９０２へ反映する。
【０１５３】
以上のように、ＶＭ１２１上のゲストＯＳ１４０により、ＤＭＡＲ−ＨＷ２００に設定されたＤＭＡＲテーブル５００が更新される。
【０１５４】
最後に、ＶＭＭ１２０がＶＭ１２１を削除する場合のＤＭＡＲ−ＨＷ２００へのＤＭＡＲテーブル５００の設定について説明する。ＶＭ１２１を削除する際には、ＶＭ１２１に割り当てていたリソースを開放する。ＶＭ１２１に割り当てていたＩ／Ｏデバイス８０１も開放し、ＶＭＭ１２０の管理化へ置く。図３１に示すように、ＶＭＭ１２０の管理するＤＭＡＲテーブル５１０内のＩ／Ｏデバイス８０１に対応するエントリは、アドレス変換テーブル５００Ｃ４を参照している。そこで、この参照をパススルー設定に戻すために、ＤＭＡＲテーブル５１０内のＩ／Ｏデバイス８０１に対応するエントリを更新する。ＤＭＡＲテーブル５１０の領域はＷＰされているので、この更新によりＶＭ−Ｅｘｉｔが発生する。
【０１５５】
処理が移ったＶＭＭ１１０Ｂでは、ＶＭ−Ｅｘｉｔ要因がＤＭＡＲテーブル５１０内のＩ／Ｏデバイス８０１に対応するエントリの更新であることを特定し、このエントリがパススルー設定であることを検出する。そこで、ＶＭＭ１１０Ｂは、ＤＭＡＲテーブル５００内のＩ／Ｏデバイス８０１に対応するエントリに、ＧＰＡ１１−ＨＰＡ変換を行うアドレス変換テーブル５００Ｃ１を再び参照させる。もしアドレス変換テーブル５００Ｃ３がどのエントリからも参照されなくなった場合には、削除してもよい。そして、アドレス変換テーブル５００Ｃ４の使用していたメモリ領域のＷＰを解除するようにＥＰＴ９０１へ反映する。また、ＤＭＡＲテーブル５０２も、ＤＭＡＲテーブル５００から参照されなくなるため、削除してもよい。さらに、ＤＭＡＲテーブル５２０の使用していたメモリ領域のＷＰ設定を解除するようにＥＰＴ９０２へ反映する。
【０１５６】
以上のように、ＶＭ１２１の削除に伴う、ＤＭＡＲテーブル５００の更新が行われる。
【０１５７】
＜第３実施形態＞
次に、第３実施形態に係る情報処理装置について説明する。なお、第１実施形態及び第２実施形態に係る情報処理装置と同一の部分については、同一符号を付して、詳細な説明を省略する。
【０１５８】
図３２に示すように、第３実施形態に係る情報処理装置１０２のハードウェアリソースは第２実施形態に係る情報処理装置１０１と同様である。第３実施形態では、３層の仮想化を構成している。図２４に示す第２実施形態の構成と比較して、ＶＭ１２１上にＶＭＭ１３０が存在し、さらにＶＭＭ１３０上にＶＭ１３１が構築され、ＶＭ１３１上でゲストＯＳ１４０が動作している。ＶＭ１３１には、ｖＣＰＵ４３１及びｖメモリ３３１が割り当てられており、また、Ｉ／Ｏデバイス８０１も直接割り当てられている。さらに、ＶＭ１３１には、ｖＤＭＡＲ−ＨＷ２３１が提供されている。また、ゲストＯＳ１４０が動作するメモリ空間をＧＰＡ３とする。
【０１５９】
図３３に、図３２の構成のおけるメモリ３００に記憶されるＤＭＡＲテーブル及びＥＰＴを示す。なお、メモリ３００には、上述のＶＭＣＳも記憶されるが、ここでは記載を省略している。メモリ３００において、ｖメモリ３２１に割り当てられた領域の一部が、ｖメモリ３３１に割り当てられている点が、図１７に示す第１実施形態におけるメモリ３００構成と異なる。さらに、ｖメモリ３３１に割り当てられた領域には、ゲストＯＳ１４０により作成されたＧＰＡ３基準のＤＭＡＲテーブル５３０が記憶される。また、メモリ３００には、ＤＭＡＲテーブル５３０をＨＰＡ基準に変換したＤＭＡＲテーブル５０３が記憶される。また、メモリ３００には、ＧＰＡ３−ＨＰＡ間の変換テーブルであるＥＰＴ９０３が記憶される。
【０１６０】
ＶＭＭ１１０Ｃは、図３４に示すように、ＶＭ−Ｅｘｉｔハンドラ１０Ｃ、及びＤＭＡＲ仮想化部１１Ｃを備えている。さらに、ＤＭＡＲ仮想化部１１Ｃは、ＧＰＡ＃ｎＤＭＡＲテーブル取得部１７Ｃ、ＧＰＡ＃ｎ−ＨＰＡ変換部１８Ｃ、ＷＰ設定部１４、ＤＭＡＲテーブル作成部１５、及びホストＤＭＡＲテーブル更新部１６を備えている。
【０１６１】
ＧＰＡ＃ｎＤＭＡＲテーブル取得部１７Ｃは、指定されたＧＰＡ＃ｎ（ｎ＝１，２，３）基準で作成されたＤＭＡＲテーブル（ＤＭＡＲテーブル５１０、５２０、５３０）を取得する。ＧＰＡ＃ｎ−ＨＰＡ変換部１８Ｃは、指定されたＧＰＡ＃ｎ（ｎ＝１，２，３）を、ＧＰＡ＃ｎに対応するＥＰＴ９０１、９０２、９０３を使用して、ＨＰＡ基準のアドレスに変換する。
【０１６２】
次に、図３５〜図３８を参照して、第３実施形態におけるＤＭＡＲ−ＨＷの入れ子の仮想化処理について説明する。図３５は、ＶＭ−Ｅｘｉｔハンドラ１０Ｃによる処理フローを示す。図３６は、ＶＭ−Ｅｘｉｔハンドラ１０Ｃによる処理フロー内のＶＭＭ１２０からのＶＭ−Ｅｘｉｔ処理フローを示す。図３７は、ＶＭ−Ｅｘｉｔハンドラ１０Ｃによる処理フロー内のＶＭＭ１３０からのＶＭ−Ｅｘｉｔ処理フローを示す。図３８は、ＤＭＡＲ仮想化部１１ＣによるＤＭＡＲ仮想化処理Ｃフローを示す。なお、図２０及び図２１に示す第１実施形態におけるＤＭＡＲ−ＨＷの入れ子の仮想化処理と同様の処理については、同一符号を付して、詳細な説明を省略する。
【０１６３】
図３５に示すＶＭ−Ｅｘｉｔハンドラ１０Ｃの処理フローのステップＳ１で、ＶＭ−Ｅｘｉｔハンドラ１０Ｃが、ゲストＯＳ１４０、ＶＭＭ１２０、またはＶＭＭ１３０からのＶＭ−Ｅｘｉｔを捕捉する。そして、ＶＭ−Ｅｘｉｔハンドラ１０Ｃが、捕捉したＶＭ−ＥｘｉｔのＶＭ−Ｅｘｉｔ要因を特定する。
【０１６４】
次に、ステップＳ２で、ＶＭ−Ｅｘｉｔハンドラ１０Ｃが、捕捉したＶＭ−ＥｘｉｔがゲストＯＳ１４０からのＶＭ−Ｅｘｉｔか否かを判定する。ゲストＯＳ１４０からのＶＭ−Ｅｘｉｔの場合には、ステップＳ５３へ移行し、ＶＭＭ１２０またはＶＭＭ１３０からのＶＭ−Ｅｘｉｔの場合には、ステップＳ３へ移行する。
【０１６５】
ステップＳ５３では、ＶＭ−Ｅｘｉｔハンドラ１０Ｃが、上記ステップＳ１で判定したＶＭ−Ｅｘｉｔ要因が、ゲストＯＳ１４０によるｖＤＭＡＲ−ＨＷ２３１への設定であるか否かを判定する。ｖＤＭＡＲ−ＨＷ２３１への設定の場合には、ＶＭＭ１１０Ｃで処理を続けるために、ステップＳ２０Ｃへ移行し、ｖＤＭＡＲ−ＨＷ２３１への設定ではない場合には、ステップＳ５４へ移行する。
【０１６６】
ステップＳ５４では、ＶＭ−Ｅｘｉｔハンドラ１０Ｃが、上記ステップＳ１で判定したＶＭ−Ｅｘｉｔ要因が、ゲストＯＳ１４０によるＷＰ設定されたＤＭＡＲテーブル５３０の更新か否かを判定する。ＤＭＡＲテーブル５３０の更新の場合には、ＶＭＭ１１０Ｃで処理を続けるために、ステップＳ２０Ｃへ移行し、ＤＭＡＲテーブル５３０の更新ではない場合には、ステップＳ５５へ移行する。
【０１６７】
ステップＳ２０Ｃでは、ＶＭ−Ｅｘｉｔハンドラ１０Ｃが、ＶＭ−Ｅｘｉｔ要因毎の処理（２Ｃ）を実行する。ＶＭ−Ｅｘｉｔ要因毎の処理（２Ｃ）は、図１１に示すＶＭ−Ｅｘｉｔ要因毎の処理（１）と同様である。ただし、ステップＳ３１の「ｖＤＭＡＲ−ＨＷ２１１への設定」を「ｖＤＭＡＲ−ＨＷ２３１への設定」と読み替える。また、ステップＳ３２の「ＷＰ設定されたＤＭＡＲテーブル５１０の更新」を「ＷＰ設定されたＤＭＡＲテーブル５３０の更新」と読み替える。また、ステップＳ１００の「ＤＭＡＲ仮想化処理」を「ＤＭＡＲ仮想化処理Ｃ」と読み替える。
【０１６８】
一方、ステップＳ３では、ＶＭ−Ｅｘｉｔハンドラ１０Ｃが、トラップしたＶＭ−ＥｘｉｔがＶＭＭ１２０からのＶＭ−Ｅｘｉｔか否かを判定する。ＶＭＭ１２０からのＶＭ−Ｅｘｉｔの場合には、ステップＳ８０へ移行し、図３６に示すＶＭＭ１２０からのＶＭ−Ｅｘｉｔ処理を実行する。ＶＭＭ１３０からのＶＭ−Ｅｘｉｔの場合には、ステップＳ９０へ移行し、図３７に示すＶＭＭ１３０からのＶＭ−Ｅｘｉｔ処理を実行する。
【０１６９】
図３６に示すＶＭＭ１２０からのＶＭ−Ｅｘｉｔ処理のステップＳ１０では、ＶＭ−Ｅｘｉｔハンドラ１０Ｃが、ステップＳ１で特定したＶＭ−Ｅｘｉｔ要因が、ＶＭ−Ｅｎｔｒｙ命令か否かを判定する。ＶＭ−Ｅｘｉｔ要因が、ＶＭ−Ｅｎｔｒｙ命令の場合には、ステップＳ４１で、ＶＭ−Ｅｘｉｔハンドラ１０が、ＶＭＭ１３０へ処理を移すための各種設定をＶＭＣＳへ行う。次に、ステップＳ４２で、ＶＭ−Ｅｘｉｔハンドラ１０Ｃが、ＶＭＭ１３０に処理を移すために、ＶＭＭ１３０へＶＭ−Ｅｎｔｒｙし、図３５に示すＶＭ−Ｅｘｉｔハンドラ１０Ｃの処理にリターンする。
【０１７０】
一方、上記ステップＳ１０で、ＶＭ−Ｅｘｉｔハンドラ１０Ｃが、ＶＭ−Ｅｘｉｔ要因がＶＭ−Ｅｎｔｒｙ命令ではないと判定すると、ステップＳ３０へ移行し、図１１に示すＶＭ−Ｅｘｉｔ要因毎の処理（１）を実行する。なお、ステップＳ１００の「ＤＭＡＲ仮想化処理」を「ＤＭＡＲ仮想化処理Ｃ」と読み替える。
次に、ステップＳ６２で、ＶＭ−Ｅｘｉｔハンドラ１０Ｃが、ＶＭＭ１２０に処理を移すために、ＶＭＭ１２０へＶＭ−Ｅｎｔｒｙし、図３５に示すＶＭ−Ｅｘｉｔハンドラ１０Ｃの処理にリターンする。
【０１７１】
図３７に示すＶＭＭ１３０からのＶＭ−Ｅｘｉｔ処理のステップＳ１０では、ＶＭ−Ｅｘｉｔハンドラ１０Ｃが、ステップＳ１で特定したＶＭ−Ｅｘｉｔ要因が、ＶＭ−Ｅｎｔｒｙ命令か否かを判定する。ＶＭ−Ｅｘｉｔ要因が、ＶＭ−Ｅｎｔｒｙ命令の場合には、ステップＳ２１で、ＶＭ−Ｅｘｉｔハンドラ１０Ｃが、ゲストＯＳ１４０へ処理を移すための各種設定をＶＭＣＳへ行う。次に、ステップＳ２２で、ＶＭ−Ｅｘｉｔハンドラ１０Ｃが、ゲストＯＳ１４０に処理を移すために、ゲストＯＳ１４０へＶＭ−Ｅｎｔｒｙし、図３５に示すＶＭ−Ｅｘｉｔハンドラ１０Ｃの処理にリターンする。
【０１７２】
一方、上記ステップＳ１０で、ＶＭ−Ｅｘｉｔハンドラ１０Ｃが、ＶＭ−Ｅｘｉｔ要因がＶＭ−Ｅｎｔｒｙ命令ではないと判定すると、ステップＳ５５へ移行する。ステップＳ５５では、ＶＭ−Ｅｘｉｔハンドラ１０Ｃが、ＶＭ−Ｅｘｉｔ要因に応じた処理を、そのままＶＭＭ１１０Ｃで行うか、またはＶＭＭ１２０へ任せるかを判定する。ＶＭＭ１１０Ｃで処理する場合には、ステップＳ４０へ移行し、ＶＭＭ１２０で処理する場合には、ステップＳ６１へ移行する。
【０１７３】
ステップＳ６１では、ＶＭ−Ｅｘｉｔハンドラ１０Ｃが、ＶＭＭ１２０へ処理を移すための各種設定をＶＭＣＳへ行う。次に、ステップＳ６２で、ＶＭ−Ｅｘｉｔハンドラ１０Ｃが、ＶＭＭ１２０に処理を移すために、ＶＭＭ１２０へＶＭ−Ｅｎｔｒｙし、図３５に示すＶＭ−Ｅｘｉｔハンドラ１０Ｃの処理にリターンする。
【０１７４】
一方、ステップＳ４０では、ＶＭ−Ｅｘｉｔハンドラ１０Ｃが、ＶＭ−Ｅｘｉｔ要因毎の処理（３）を実行する。ＶＭ−Ｅｘｉｔ要因毎の処理（３）は、図１１に示すＶＭ−Ｅｘｉｔ要因毎の処理（１）と同様である。ただし、ステップＳ３１の「ＤＭＡＲ−ＨＷ２１１への設定」を「ＤＭＡＲ−ＨＷ２２１への設定」と読み替える。また、ステップＳ３２の「ＷＰ設定されたＤＭＡＲテーブル５１０の更新」を「ＷＰ設定されたＤＭＡＲテーブル５２０の更新」と読み替える。また、ステップＳ１００の「ＤＭＡＲ仮想化処理」を「ＤＭＡＲ仮想化処理Ｃ」と読み替える。
【０１７５】
次に、ステップＳ４２で、ＶＭ−Ｅｘｉｔハンドラ１０Ｃが、ＶＭＭ１３０に処理を移すために、ＶＭＭ１３０へＶＭ−Ｅｎｔｒｙし、図３５に示すＶＭ−Ｅｘｉｔハンドラ１０Ｃの処理にリターンする。
【０１７６】
次に、図３８に示すＤＭＡＲ仮想化処理ＣのステップＳ１１０で、ＶＭ−Ｅｘｉｔハンドラ１０Ｃが、ＶＭ−Ｅｘｉｔ要因がゲストＯＳ１４０によるｖＤＭＡＲ−ＨＷ２３１への設定、またはＷＲ設定されたＤＭＡＲテーブル５３０の更新か否かを判定する。肯定判定の場合は、ステップＳ１４１へ移行し、否定判定の場合は、ステップＳ１２０へ移行する。
【０１７７】
ステップＳ１４１では、ＧＰＡ＃ｎＤＭＡＲテーブル取得部１７Ｃが、ゲストＯＳ１４０が作成したＤＭＡＲテーブル５３０を取得する。ＤＭＡＲテーブル５３０は、ＧＰＡ３基準で作成されている。そこで、次のステップＳ１４２で、ＤＭＡＲテーブル作成部１５が、ＧＰＡ＃ｎ−ＨＰＡ変換部１８Ｃを利用して、ＧＰＡ３基準のＤＭＡＲテーブル５２０をＨＰＡ基準に変換したＤＭＡＲテーブル５０３を作成する。
【０１７８】
次に、ステップＳ１４３で、ホストＤＭＡＲテーブル更新部１６が、ＤＭＡＲテーブル５００のＩ／Ｏデバイス８０１に対する設定を、ＤＭＡＲテーブル５０３の内容で更新する。次に、ステップＳ１４４で、ゲストＯＳ１４０によるＤＭＡＲテーブル５３０の更新を検出できるように、ＷＰ設定部１４が、ＤＭＡＲテーブル５３０が記憶されたメモリ領域のＷＰ設定を、ＣＰＵ４００のＧＰＡ３−ＨＰＡ変換を行うＥＰＴ９０３に反映する。
【０１７９】
一方、ステップＳ１２０へ移行した場合には、ＶＭ−Ｅｘｉｔハンドラ１０Ｃが、ＶＭ−Ｅｘｉｔ要因がＶＭＭ１３０によるｖＤＭＡＲ−ＨＷ２２１への設定、またはＷＲ設定されたＤＭＡＲテーブル５２０の更新か否かを判定する。肯定判定の場合は、ステップＳ１２１へ移行し、ＶＭ−Ｅｘｉｔ要因がＶＭＭ１２０によるｖＤＭＡＲ−ＨＷ２１１への設定、またはＷＲ設定されたＤＭＡＲテーブル５１０の更新の場合には、否定されて、ステップＳ１３１へ移行する。
【０１８０】
以下、図２１に示す第１実施形態におけるＤＭＡＲ仮想化処理Ｂと同様に、ステップＳ１２１〜１２４、及び１３１〜１３４を実行し、図３５に示すＶＭ−Ｅｘｉｔハンドラ１０Ｃの処理へリターンする。
【０１８１】
図３９に、第３実施形態でのＤＭＡＲ−ＨＷの入れ子の仮想化処理における非特権モードと特権モードとの遷移を示す。なお、ここでは、ゲストＯＳ１４０にＩ／Ｏデバイス８０１が割り当てられ、ゲストＯＳ１４０が、ｖＤＭＡＲ−ＨＷ２３１に、Ｉ／Ｏデバイス８０１に対する設定を行う場合を示している。また、非特権モードから特権モードへのＶＭ−Ｅｘｉｔを一点鎖線の矢印、特権モードから非特権モードへのＶＭ−Ｅｎｔｒｙを二点鎖線の矢印で示している。また、図２２に示す第１実施形態でのＤＭＡＲ−ＨＷの入れ子の仮想化処理における非特権モードと特権モードとの遷移と同様の部分については、同一符号を付して、詳細な説明を省略する。
【０１８２】
図３９に示すように、第３実施形態における非特権モードと特権モードとの遷移は、図２２に示す第１実施形態での非特権モードと特権モードとの遷移と同様である。４層以上の仮想化であっても、同様に開示の技術を適用することができる。４層以上の仮想化の場合も、上位のゲストＯＳによるＧＰＡ＃ｎ基準のＤＭＡＲテーブルの設定または更新を検出する。これらが検出された場合には、処理を上位のＶＭＭへ移すことなく、第１層のＶＭＭで、ＧＰＡ＃ｎ基準で作成されたＤＭＡＲテーブルをＨＰＡ基準のＤＭＡＲテーブルに変換すればよい。
【０１８３】
なお、上記では、ＣＰＵの仮想化支援機構及びＤＭＡＲ−ＨＷの仮想化支援機構の例として、インテル（登録商標）のＶＴ−ｘ及びＶＴ−ｄを例に説明したがこれに限定されない。ＣＰＵの仮想化支援機構は、ＣＰＵが特権モードと非特権モードとで動作するものであればよい。また、ＤＭＡＲ−ＨＷの仮想化支援機構は、変換表を用いてＤＭＡを行う機構であればよい。
【０１８４】
また、上記では開示の技術における情報処理プログラムの一例である情報処理プログラム５０が記憶部６００に予め記憶（インストール）されている態様を説明した。しかし、開示の技術における情報処理プログラムは、ＣＤ−ＲＯＭやＤＶＤ−ＲＯＭ等の記録媒体に記録されている形態で提供することも可能である。
【図１】
0005962853.tif 000002
【図３】
0005962853.tif 000003
【図６】
0005962853.tif 000004
【図７】
0005962853.tif 000005
【図８】
0005962853.tif 000006
【図９】
0005962853.tif 000007
【図１０】
0005962853.tif 000008
【図１１】
0005962853.tif 000009
【図１２】
0005962853.tif 000010
【図１３】
0005962853.tif 000011
【図１５】
0005962853.tif 000012
【図１６】
0005962853.tif 000013
【図１７】
0005962853.tif 000014
【図１８】
0005962853.tif 000015
【図１９】
0005962853.tif 000016
【図２０】
0005962853.tif 000017
【図２１】
0005962853.tif 000018
【図２２】
0005962853.tif 000019
【図２４】
0005962853.tif 000020
【図２６】
0005962853.tif 000021
【図３２】
0005962853.tif 000022
【図３３】
0005962853.tif 000023
【図３４】
0005962853.tif 000024
【図３５】
0005962853.tif 000025
【図３６】
0005962853.tif 000026
【図３７】
0005962853.tif 000027
【図３８】
0005962853.tif 000028
【図３９】
0005962853.tif 000029
【図２】
0005962853.tif 000030
【図４】
0005962853.tif 000031
【図５】
0005962853.tif 000032
【図１４】
0005962853.tif 000033
【図２３】
0005962853.tif 000034
【図２５】
0005962853.tif 000035
【図２７】
0005962853.tif 000036
【図２８】
0005962853.tif 000037
【図２９】
0005962853.tif 000038
【図３０】
0005962853.tif 000039
【図３１】
0005962853.tif 000040