(57)【要約】【課題】権限レベルが２段階のマイクロプロセッサを用いた仮想計算機において、ゲストアプリケーションとゲストＯＳ及びＶＭＭ間のメモリ保護を確実に行う。【解決手段】少なくとも一つのＣＰＵとメモリを共有して複数のプログラムを切り替えて実行する仮想計算機の制御方法であって、ＣＰＵで実行される第１のプログラムがアクセス可能なメモリ領域を規定する第１のメモリ保護テーブルを設定し、前記ＣＰＵで実行される第２のプログラムがアクセス可能なメモリ領域を規定する第２のメモリ保護テーブルを設定し、第１または第２のプログラムの実行開始を検出し（Ｓ１１）、実行開始を検出した第１または第２のプログラムに対応して第１または第２のメモリ保護テーブルの何れか一方を選択して切り替えて（Ｓ１７）、前記選択した第１または第２のメモリ保護テーブルを前記ＣＰＵのメモリ管理ユニットで参照し、前記選択した第１または第２のメモリ保護テーブルに規定されたメモリ領域を保護させる（Ｓ１８、Ｓ１９）。【選択図】図１８
2007004661.tif 000002
【特許請求の範囲】
【請求項１】
少なくとも一つのＣＰＵとメモリを共有して複数のプログラムを切り替えて実行する仮想計算機の制御方法であって、
前記ＣＰＵで実行される第１のプログラムがアクセス可能なメモリ領域を規定する第１のメモリ保護テーブルを設定する処理と、
前記ＣＰＵで実行される第２のプログラムがアクセス可能なメモリ領域を規定する第２のメモリ保護テーブルを設定する処理と、
前記第１または第２のプログラムの実行開始を検出する処理と、
前記検出した第１または第２のプログラムに対応して前記第１または第２のメモリ保護テーブルの何れか一方を選択して切り替える処理と、
前記選択した第１または第２のメモリ保護テーブルを前記ＣＰＵのメモリ管理ユニットで参照し、前記選択した第１または第２のメモリ保護テーブルに規定されたメモリ領域を保護させる処理と、
を含むことを特徴とする仮想計算機の制御方法。
【請求項２】
前記第１のプログラムが前記仮想計算機を管理する仮想計算機モニタであって、
前記第２のプログラムが前記仮想計算機上で稼動するゲストプログラムであり、
前記検出する処理と、前記切り替える処理とを、前記仮想計算機モニタ自身で行うことを特徴とする請求項１に記載の仮想計算機の制御方法。
【請求項３】
前記第１のプログラムが前記仮想計算機上で稼動するゲストＯＳであって、
前記第２のプログラムが前記仮想計算機上で稼動するゲストアプリケーションであり、
前記検出する処理と、前記切り替える処理とを、前記仮想計算機を管理する仮想計算機モニタが行うことを特徴とする請求項１に記載の仮想計算機の制御方法。
【請求項４】
前記ＣＰＵは、仮想計算機を管理する仮想計算機モニタと、仮想計算機上で稼動するゲストプログラムとの切り替えを実行する機構を備え、
前記第１または第２のプログラムの実行開始を検出する処理は、
前記仮想計算機モニタまたはゲストプログラムから仮想計算機に関する制御の切り替え命令を検出したときに、前記第１または第２のプログラムの何れか一方の実行開始を検出することを特徴とする請求項２に記載の仮想計算機の制御方法。
【請求項５】
前記ＣＰＵは、前記第１または第２のメモリ保護テーブルのメモリ上の位置を示すレジスタを備え、
前記メモリ領域を保護させる処理は、
前記選択した第１または第２のメモリ保護テーブルの位置を、前記レジスタに設定することを特徴とする請求項１に記載の仮想計算機の制御方法。
【請求項６】
物理計算機上の少なくとも一つのＣＰＵとメモリを共有して複数のプログラムを切り替えて仮想計算機を提供するプログラムであって、
前記ＣＰＵで実行される第１のプログラムがアクセス可能なメモリ領域を規定する第１のメモリ保護テーブルを設定する手順と、
前記ＣＰＵで実行される第２のプログラムがアクセス可能なメモリ領域を規定する第２のメモリ保護テーブルを設定する手順と、
前記第１または第２のプログラムの実行開始を検出する手順と、
前記検出した第１または第２のプログラムに対応して前記第１または第２のメモリ保護テーブルの何れか一方を選択して切り替える手順と、
前記選択した第１または第２のメモリ保護テーブルを前記ＣＰＵのメモリ管理ユニットで参照し、前記選択した第１または第２のメモリ保護テーブルに規定されたメモリ領域を保護させる手順と、
を前記物理計算機に実行させることを特徴とする仮想計算機のプログラム。
【請求項７】
前記第１のプログラムが前記仮想計算機を管理する仮想計算機モニタであって、
前記第２のプログラムが前記仮想計算機上で稼動するゲストプログラムであることを特徴とする請求項６に記載の仮想計算機のプログラム。
【請求項８】
前記第１のプログラムが前記仮想計算機上で稼動するゲストＯＳであって、
前記第２のプログラムが前記仮想計算機上で稼動するゲストアプリケーションであることを特徴とする請求項６に記載の仮想計算機のプログラム。
【請求項９】
前記ＣＰＵは、仮想計算機を管理する仮想計算機モニタと、仮想計算機上で稼動するゲストプログラムとの切り替えを実行する機構を備え、
前記第１または第２のプログラムの実行開始を検出する手順は、
前記仮想計算機モニタまたはゲストプログラムから仮想計算機に関する制御の切り替え命令を検出したときに、前記第１または第２のプログラムの何れか一方の実行開始を検出することを特徴とする請求項７に記載の仮想計算機のプログラム。
【請求項１０】
前記ＣＰＵは、前記第１または第２のメモリ保護テーブルのメモリ上の位置を示すレジスタを備え、
前記メモリ領域を保護させる手順は、
前記選択した第１または第２のメモリ保護テーブルの位置を、前記レジスタに設定することを特徴とする請求項６に記載の仮想計算機のプログラム。
【請求項１１】
ＣＰＵとメモリを備えた物理計算機上で、少なくとも一つのＣＰＵとメモリを共有して複数のプログラムを切り替えて実行することで仮想計算機を提供する仮想計算機モニタを備えた仮想計算機システムにおいて、
前記仮想計算機は、第１のプログラムと、第２のプログラムを含み、
前記仮想計算機モニタは、
前記仮想計算機を構成する第１のプログラムがアクセス可能なメモリ領域と仮想計算機モニタがアクセス可能なメモリ領域とを規定する第１のメモリ保護テーブルと、第２のプログラムがアクセス可能なメモリ領域と仮想計算機モニタがアクセス可能なメモリ領域とを規定する第２のメモリ保護テーブルとを設定するメモリ保護テーブル設定部と、
前記第１または第２のプログラムの実行開始を検出する実行開始検出部と、
前記検出した第１または第２のプログラムに対応して前記第１または第２のメモリ保護テーブルの何れか一方を選択して切り替えるメモリ保護テーブル切換部と、
前記選択した第１または第２のメモリ保護テーブルを前記ＣＰＵに指令するメモリ保護指令部と、を備え、
前記ＣＰＵは、前記指令された第１または第２のメモリ保護テーブルに規定されたメモリ領域を保護するメモリ管理ユニットを有することを特徴とする仮想計算機システム。
【請求項１２】
ＣＰＵとメモリを備えた物理計算機上で、少なくとも一つのＣＰＵとメモリを共有して複数のプログラムを切り替えて実行することで仮想計算機を提供する仮想計算機モニタを備えた仮想計算機システムにおいて、
前記仮想計算機は、ゲストプログラムを含み、
前記仮想計算機モニタは、
前記ゲストプログラムがアクセス可能なメモリ領域を規定する第１のメモリ保護テーブルと、仮想計算機モニタがアクセス可能なメモリ領域とを規定する第２のメモリ保護テーブルとを設定するメモリ保護テーブル設定部と、
前記ゲストプログラムまたは仮想計算機モニタの実行開始を検出する実行開始検出部と、
前記検出したゲストプログラムまたは仮想計算機モニタに対応して前記第１または第２のメモリ保護テーブルの何れか一方を選択して切り替えるメモリ保護テーブル切換部と、
前記選択した第１または第２のメモリ保護テーブルを前記ＣＰＵに指令するメモリ保護指令部と、を備え、
前記ＣＰＵは、
前記指令された第１または第２のメモリ保護テーブルに規定されたメモリ領域を保護するメモリ管理ユニットと、
前記ゲストプログラムの実行開始または実行終了に基づいて、前記仮想計算機モニタと、仮想計算機上で稼動するゲストプログラムとの切り替えを実行する切り替え機構と、
を有することを特徴とする仮想計算機システム。
【発明の詳細な説明】
【技術分野】
【０００１】
本発明は、仮想計算機システムに関し、仮想計算機モニタとゲストＯＳ、ゲストアプリケーション間で制御を切り替える際のメモリ保護の技術に関する。
【背景技術】
【０００２】
サーバ台数の増加と共に運用に関する複雑さが増加しており運用コストが問題化しており、運用コストを低減する技術として複数サーバを１台にまとめるサーバ統合が注目を集めている。サーバ統合を実現する技術として、一つのコンピュータを任意の割合で論理的に分割する仮想計算機が知られている。例えば、ハイパバイザなどのファームウェア（またはミドルウェア）により、物理計算機を複数の論理区画（ＬＰＡＲ：Logical PARtition）に分割し、各ＬＰＡＲに対して計算機資源（ＣＰＵ、主記憶、Ｉ／Ｏ）を割当て、各ＬＰＡＲ上でそれぞれＯＳを動作させるもので、ＣＰＵを時分割で利用するため柔軟なサーバ統合が可能となる。あるいは、一つのサーバ上で一つのホストＯＳを実行し、このホストＯＳ上で複数のゲストＯＳを稼動させ、各ゲストＯＳをそれぞれサーバとすることで、サーバ統合を実現している。
【０００３】
また、従来、仮想計算機技術は汎用機（MainFrame）等の大型計算機で用いられてきた技術であるが、近年のマイクロプロセッサの性能向上に伴いローエンドサーバおよびパーソナルコンピュータでも普及しつつある。
【０００４】
仮想計算機技術を採用したサーバ等の計算機は、ゲストを稼動させる複数の仮想計算機（Virtual Machine）と、仮想計算機の制御を行う仮想計算機モニタ（Virtual Machine Monitor、以下ＶＭＭとする）とを有する。仮想計算機技術によってサーバ統合を実現する上では、仮想計算機間、および仮想計算機とＶＭＭ間の独立性の保証が重要である。上記の独立性を保証するためには、仮想計算機上のアプリケーション（ゲストアプリケーション）とＯＳ（ゲストＯＳ）及びＶＭＭの３者間で、アクセス可能なメモリ範囲を限定し、独立性を保護する必要がある（例えば、特許文献１、２）。
【０００５】
上記のメモリ保護を実現する機構として、ＣＰＵは一般にメモリ管理ユニット（Memory Management Unit、以下ＭＭＵとする）を有する。メモリ管理ユニットは、実行中のコードの権限レベル（１）とアクセス先のメモリ領域の権限レベル（２）を比較し、（２）の方が（１）よりも権限が強い場合にアクセスを禁止する。この権限レベルを利用して、仮想計算機とＶＭＭ間及び仮想計算機間の独立性を確保することができる。
【特許文献１】特開２００１−３１８７９７号
【特許文献２】米国特許出願公開第２００３／０１２０８５６号明細書
【発明の開示】
【発明が解決しようとする課題】
【０００６】
上記のメモリ保護を実現する機構として、ＣＰＵは一般にメモリ管理ユニット（Memory Management Unit  ＝  ＭＭＵ）を有する。メモリ管理ユニットは、実行中のコードの権限レベル（１）とアクセス先のメモリ領域の権限レベル（２）を比較し、（２）の方が（１）よりも権限が強い場合にアクセスを禁止する。この権限レベルを利用して、仮想計算機とＶＭＭ間及び仮想計算機間の独立性を確保することができる。
【０００７】
近年、マイクロプロセッサの性能向上の一手法として、既存の３２ｂｉｔアーキテクチャ（例えば、ＩＡ−３２（インテル社）、http://www.intel.co.jp/jp/developer/download/）を、６４ｂｉｔに拡張する技術が提案されている（例えば、ＥＭ６４Ｔ、インテル社、http://www.intel.co.jp/jp/developer/technology/64bitextensions/index.htm）。
【０００８】
しかしながら、上記従来例を上述のような３２ビットアーキテクチャを拡張した６４ｂｉｔマイクロプロセッサに適用する場合、次のような問題が生じる。
【０００９】
１）上述のホストＯＳ上で複数のゲストＯＳを稼動させ、各ゲストＯＳをそれぞれサーバとする仮想計算機では、ゲストアプリケーションとゲストＯＳとＶＭＭ間のアクセス保護にＩＡ−３２で構成されたＣＰＵのＭＭＵを利用してメモリの保護を行っている。
【００１０】
すなわち、ＩＡ−３２等のＣＰＵでは、ＭＭＵのメモリ保護機構としてセグメントとページングという２種類の保護機構を備えている。ここで、セグメントは、４段階の権限レベルを備えているものの、ひとつの連続したメモリ領域に対してのみ権限レベルを設定できるものの、複数のセグメントに渡って権限レベルを設定することはできない。
【００１１】
一方、ページングよる保護は、２段階の権限レベルでしかメモリの保護を行うことができないが、ページと呼ばれる仮想記憶領域の単位領域ごとに権限レベルを設定できる。つまりページングでは、単位領域が不連続であっても、複数の単位領域に同一の権限レベルを設定することができる。
【００１２】
ここで、上記ホストＯＳ上で複数のゲストＯＳを稼動させる仮想計算機では、仮想記憶領域のアドレス領域を２分しておき、ゲストＯＳとＶＭＭにセグメントによる保護（４段階の権限レベル）を適用した記憶領域を割り当て、ゲストアプリケーションとホストＯＳ間にページングによる保護（２段階の権限レベル）を適用し、メモリ領域の保護を行っている。
【００１３】
しかしながら、上記ＥＭ６４Ｔのように、ＩＡ−３２のアーキテクチャーを拡張した６４ビットＣＰＵ（ＥＭ６４Ｔなど）では、上記セグメントの仕様が変更されて保護対象の仮想記憶領域を指定できなくなった。このためホストＯＳ上で複数のゲストＯＳを稼動させる仮想計算機をＥＭ６４Ｔに適用すると、ページングによる２段階の権限レベルでしかゲストとＶＭＭ間の保護が出来ず、仮想計算機とＶＭＭ間の独立性が保証できないという問題が生じる。
【００１４】
２）上記ＬＰＡＲでは仮想計算機技術と同様に１つのサーバで複数のゲストＯＳを稼動させることができる。しかしこの従来例では、論理区画の独立性を保証するためにＣＰＵのＴＬＢ（Translation Lookaside Buffer）が拡張されており、ＴＬＢエントリにゲスト識別子が付加されている（例えば、特開平７−８４８８４号）。ＣＰＵによるメモリアクセス発生時には上記のゲスト識別子がチェックされ、メモリ保護を実現している。しかし、既存のＩＡ−３２等のマイクロプロセッサには上記に相当するＴＬＢエントリは存在しないため、本方式をＩＡ−３２、ＥＭ６４Ｔなどのマイクロプロセッサには適用することができない、という問題があった。
【００１５】
そこで本発明は、上記問題点に鑑みてなされたもので、メモリ領域の保護を行う権限レベルが２段階のマイクロプロセッサを用いた仮想計算機において、ゲストアプリケーションとゲストＯＳ及びＶＭＭ間のメモリ保護を確実に行って信頼性を確保することを目的とする。
【課題を解決するための手段】
【００１６】
本発明は、少なくとも一つのＣＰＵとメモリを共有して複数のプログラムを切り替えて実行する仮想計算機の制御方法であって、前記ＣＰＵで実行される第１のプログラムがアクセス可能なメモリ領域を規定する第１のメモリ保護テーブルを設定し、前記ＣＰＵで実行される第２のプログラムがアクセス可能なメモリ領域を規定する第２のメモリ保護テーブルを設定し、前記第１または第２のプログラムの実行開始を検出し、前記検出した第１または第２のプログラムに対応して前記第１または第２のメモリ保護テーブルの何れか一方を選択して切り替えて、前記選択した第１または第２のメモリ保護テーブルを前記ＣＰＵのメモリ管理ユニットで参照し、前記選択した第１または第２のメモリ保護テーブルに規定されたメモリ領域を保護させる。
【００１７】
また、前記第１のプログラムが前記仮想計算機を管理する仮想計算機モニタであって、前記第２のプログラムが前記仮想計算機上で稼動するゲストプログラムであり、前記検出する処理と、前記切り替える処理とを、前記仮想計算機モニタ自身で行う。
【００１８】
また、前記第１のプログラムが前記仮想計算機上で稼動するゲストＯＳであって、前記第２のプログラムが前記仮想計算機上で稼動するゲストアプリケーションであり、前記検出する処理と、前記切り替える処理とを、前記仮想計算機を管理する仮想計算機モニタが行う。
【発明の効果】
【００１９】
したがって、本発明は、２段階のアドレス保護機構（権限レベル）しか設定できないＣＰＵを用いて仮想計算機を構成した場合であっても、ゲスト側と仮想計算機モニタ側の２つのプログラムのメモリ領域を規定した第１または第２のメモリ保護テーブルを、実行するプログラムに応じて切り替えることで、仮想計算機モニタとゲストＯＳ及びゲストアプリケーション３にメモリ領域の保護を確実に行うことができ、信頼性の高い仮想計算機システムを提供することが可能となる。
【発明を実施するための最良の形態】
【００２０】
以下、本発明の一実施形態を添付図面に基づいて説明する。
【００２１】
図１は、本発明の第１実施形態を示し、仮想計算機システムを動作させる物理計算機２００の構成を示す。
【００２２】
＜１．ハードウェア構成＞
物理計算機２００は、複数のＣＰＵ２０１−０〜２０１−３を有し、これらのＣＰＵはフロントサイドバス２０２を介してノースブリッジ（またはメモリコントローラ）２０３に接続される。ここで、各ＣＰＵ２０１−０〜３は、前記したＩＡ−３２を６４ビットに拡張した演算処理機構を備える。
【００２３】
ノースブリッジ２０３には、メモリバス２０４を介してメモリ（主記憶）２０５が接続され、また、バス２０６を介してＩ／Ｏインターフェース２０７が接続される。Ｉ／Ｏインターフェース２０７はＬＡＮ２１３に接続されるネットワークアダプタ、ディスク装置２１４等に接続されるＳＣＳＩアダプタ、ＳＡＮ（Storage  Area  Network）２１５に接続されるファイバーチャネルアダプタなどで構成され、各Ｉ／Ｏデバイスに接続される。
【００２４】
ＣＰＵ２０１−０〜２０１−３はノースブリッジ２０３を介してメモリ２０５にアクセスし、ノースブリッジ２０３からＩ／Ｏインターフェース２０７を介してＩ／Ｏデバイスにアクセスして所定の処理を行う。
【００２５】
なお、ノースブリッジ２０３はメモリ２０５を制御するとともに、グラフィックコントローラを含んでコンソール２２０にも接続され、画像の表示を行うことができる。なお、物理計算機２００を構成するＣＰＵは１つでも良いし、２つ以上であっても良い。
【００２６】
メモリ２０５には、仮想計算機モニタ（Virtual Machine Monitor、以下ＶＭＭ）１０がロードされ、このＶＭＭ１０上で複数のゲストＯＳ＃０〜＃ｎ（２０−０〜２０−ｎ）が実行される。各ゲストＯＳ＃０〜＃ｎがそれぞれ仮想計算機ＶＭ０〜ＶＭｎを構成し、各ゲストＯＳ＃０〜＃ｎ上では任意の数のゲストアプリケーション３０が実行される。
【００２７】
＜２．ソフトウェア構成＞
次に、物理計算機２００上で仮想計算機ＶＭ０〜ＶＭｎを実現するソフトウェア及びハードウェア構成の主要部について、図２を参照しながら詳述する。
【００２８】
図２において、物理計算機２００上では、複数のゲストＯＳを管理するＶＭＭ（ファームウェアまたはミドルウェア）１０が稼動している。ＶＭＭ１０は、複数のゲストＯＳ＃０〜＃ｎ及びゲストアプリケーション３０がアクセスする計算機資源の割り当てを管理する制御ソフトウェアである。
【００２９】
ＶＭＭ１０は、仮想計算機ＶＭ０〜ｎを構成するゲストＯＳ＃０〜＃ｎとゲストアプリケーション３０に物理計算機２００のリソースを仮想的に提供し、各ゲストＯＳ＃０〜＃ｎ及びアプリケーション３０の実行を管理する仮想計算機実行管理部（以下、ＶＭ実行管理部）１２０と、ゲストＯＳ＃０〜＃ｎまたはＶＭＭ１０を実行するときにメモリ領域の管理を行う第１のメモリ保護テーブル（以下、ホストメモリ保護テーブル＃０）１１１、ゲストアプリケーション３０またはＶＭＭ１０を実行するときにメモリ領域の保護を行う第２のメモリ保護テーブル（以下、ホストメモリ保護テーブル＃１）１１２とを生成する二重テーブル管理部１１０を有する。
【００３０】
ＶＭ実行管理部１２０は、各仮想計算機ＶＭ０〜ＶＭｎを実行するためのメモリ２０５の領域を割り当て、ＶＭＭ１０自身を実行するためのメモリ２０５の領域を割り当てて、二重テーブル管理部１１０に生成されたホストメモリ保護テーブル＃０と＃１とを、割り当てたＣＰＵ２０１−０〜ｎで実行されるゲスト（ゲストＯＳまたはゲストアプリケーション）に応じて切り替えることで各仮想計算機ＶＭ０〜ｎを管理する。
【００３１】
なお、ＶＭ実行管理部１２０は、メモリ２０５（またはディスク装置２１４あるいはＳＡＮ２１５上のストレージ装置）の所定の領域を、後述する図５のような記憶領域（または物理アドレス空間）２５０として管理し、複数の仮想計算機ＶＭ０〜ＶＭｎで記憶領域２５０を共有する。なお、記憶領域２５０は所定のサイズのページ単位で管理される。
【００３２】
仮想計算機ＶＭ０〜ＶＭｎでは、ゲストＯＳ＃０〜ｎがそれぞれ稼動し、各ゲストＯＳ＃０〜ｎは、ＶＭＭ１０によって割り当てられた記憶領域２５０の領域内で、ゲストＯＳが使用するメモリ領域と、アプリケーション３０が使用するメモリ領域を管理するゲストメモリ保護テーブル２１−０〜ｎを有する。そして、このゲストメモリ保護テーブル２１−０〜ｎは、ＶＭＭ１０によって管理される。
【００３３】
ＶＭＭ１０及び仮想計算機ＶＭ０〜ＶＭｎを実行するＣＰＵは、記憶領域２５０の論理アドレスと、メモリ２０５及びディスク装置２１４等の物理アドレスとの対応関係を管理するメモリ管理ユニット（Memory Management Unit、以下、ＭＭＵ）２３０を有する。ＭＭＵ２３０は、記憶領域２５０上での命令の実行位置を示すテーブルポインタレジスタ２３１を含む。また、ＣＰＵ２０１−０〜３のアーキテクチャーがＩＡ−３２（またはＥＭ６４Ｔ）の場合、ＭＭＵ２３０には、図示しない特権レジスタＣＲ０、ＣＲ２、ＣＲ３、ＣＲ４やディスクリプタテーブルを制御する特権レジスタＧＤＴＲ（グローバルディスクリプタテーブルレジスタ）、特権レジスタＬＤＴＲ（ローカルディスクリプタテーブルレジスタ）等を含むものであっても良い。なお、上記テーブルポインタレジスタ２３１は、ＩＡ−３２（ＥＭ６４Ｔ）において、特権レジスタＣＲ３に相当するものである。
【００３４】
ＶＭＭ１０は、ゲストＯＳ＃０とゲストアプリケーション３０の間で制御の切替が発生すると、テーブルポインタレジスタ２３１に二重テーブル管理部１１０に生成した何れか一方のホストメモリ保護テーブル＃０または＃１に切り替えるテーブル切替指令を送る。
【００３５】
具体的には、ＶＭ実行管理部１２０は、ゲストＯＳ実行開始要求を受けると、テーブルポインタレジスタ２３１にホストメモリ保護テーブル＃０を指し示すアドレスをセットする。また、ＶＭ実行管理部１２０は、ゲストアプリケーション実行開始要求を受けると、テーブルポインタレジスタ２３１にホストメモリ保護テーブル＃１を指し示すアドレスをセットする。
【００３６】
そして、ＶＭＭ１０は、テーブルポインタレジスタ２３１にセットされたホストメモリ保護テーブルに従って、記憶領域２５０上で保護するメモリ領域を切り替えるのである。
【００３７】
後述するように、ＶＭＭ１０は、ゲストＯＳまたはゲストアプリケーションの実行開始によって２つのホストメモリ保護テーブル＃０及び＃１を生成し、ゲストアプリケーション３０が終了すると、生成したホストメモリ保護テーブル＃０、＃１を破棄する。
【００３８】
＜３．ＶＭＭの概要＞
以下、本発明の仮想計算機システムの概要を説明する。説明を簡易にするため、ＶＭＭ１０が仮想計算機ＶＭ０をＣＰＵ２０１−０に割り当てて、仮想計算機ＶＭ０（ゲストＯＳ＃０またはゲストアプリケーション３０）を実行する例について説明する。なお、メモリ２０５の記憶領域２５０は、複数の仮想計算機ＶＭ０〜ＶＭｎとＶＭＭ１０で共有されるものである。
【００３９】
図３は、ＶＭＭ１０の二重テーブル管理部１１０に設定される２つのホストメモリ保護テーブル＃０、＃１の概念を説明する図である。
【００４０】
第１のテーブルであるホストメモリ保護テーブル＃０は、ゲストＯＳ＃０がアクセス可能なアドレス領域と、ＶＭＭ１０が利用するアドレス領域を規定する。
【００４１】
第２のテーブルであるホストメモリ保護テーブル＃１は、ゲストアプリケーション３０がアクセス可能なアドレス領域と、ＶＭＭ１０が利用するアドレス領域を規定する。
【００４２】
ＶＭＭ１０は、ゲストＯＳ＃０を実行するときには、ホストメモリ保護テーブル＃０を選択し、ゲストＯＳ＃０がアクセスするメモリ領域を規制して、ＶＭＭ１０が利用するメモリ領域を保護する。
【００４３】
また、ＶＭＭ１０は、ゲストアプリケーション３０を実行するときには、ホストメモリ保護テーブル＃１を選択し、ゲストアプリケーション３０がアクセスするメモリ領域を規制して、ＶＭＭ１０が利用するメモリ領域を保護する。
【００４４】
ここで、仮想計算機ＶＭ０上で実行されるゲストＯＳ＃０とゲストアプリケーション３０及びＶＭＭ１０と時間の関係を図４に示す。
【００４５】
図４は、ＣＰＵ２０１−０が実行するプログラムと記憶領域２５０及び時間の関係を示したグラフである。
【００４６】
図４において、ＣＰＵ２０１−０は、ゲストアプリケーション３０をΔｔ１の期間だけ実行した後に、ＶＭＭ１０に制御を渡し、Δｔ２の期間だけＶＭＭ１０を実行する。その後、期間Δｔ３ではゲストＯＳ＃０に制御を移して実行する。次に、期間Δｔ４ではゲストアプリケーション３０に制御を移して実行する。
【００４７】
ここで、仮想計算機システムでは、ある任意の時点でアクセス可能でなくてはならないメモリ領域は限定的であり、本実施形態の場合、ＶＭＭ１０、ゲストＯＳ＃０またはゲストアプリケーション３０の何れかひとつが記憶領域２５０をアクセス可能であればよい。
【００４８】
そして、ＶＭＭ１０、ゲストＯＳ＃０またはゲストアプリケーション３０のうち、特定のコードを実行中にアクセスすべきメモリ領域は１種類のみであって、実行するコードの切替時では、切替前と切替後の２種類のメモリ領域のみをアクセス可能であればよい。
【００４９】
つまり、図４において、期間Δｔ１ではゲストアプリケーション３０が記憶領域２５０の所定の範囲のみをアクセス可能であれば良く、次の期間Δｔ２では、ＶＭＭ１０が所定の範囲のみをアクセスできればよい。このため、図３で示したように、ＶＭＭ１０上で実行されるアプリケーション３０とＶＭＭ１０の独立性を保つためのページテーブルとしてホストメモリ保護テーブル＃１を設ける。期間Δｔ１、Δｔ２では、ＶＭＭ１０がアクセスする領域と、ゲストアプリケーション３０がアクセスする領域の２つを分けて、独立性を確保すればよい。
【００５０】
次に、期間Δｔ３ではゲストＯＳ＃０がＶＭＭ１０上で実行されるので、期間Δｔ３ではゲストＯＳ＃０が記憶領域２５０の所定の範囲をアクセスできればよい。このため、図３で示したように、ＶＭＭ１０上で実行されるゲストＯＳ＃０とＶＭＭ１０の独立性を保つためのページテーブルとしてホストメモリ保護テーブル＃０を設ける。つまり、期間Δｔ３では、ＶＭＭ１０がアクセスする領域と、ゲストＯＳ＃０がアクセスする領域の２つを分けて独立性を確保すればよい。
【００５１】
そして、ＶＭＭ１０上で実行されるプログラムが切り替わるとき、すなわち、ゲストＯＳ＃０とゲストアプリケーション３０が切り替わるときであり、図４では期間Δｔ２が終了した時点と、期間Δｔ４が終了した時点で２つのホストメモリ保護テーブル＃０または＃１を切り替えるのである。
【００５２】
このように、ひとつのホストメモリ保護テーブルでは２段階のアクセス保護権限を設定し、このホストメモリ保護テーブルを２つ備えることで、ゲストＯＳ＃０とゲストアプリケーション３０及びＶＭＭ１０の３者の独立性を確保できるのである。すなわち、ひとつのメモリ保護テーブルでは、ＣＰＵ２０１−０に特権、非特権の２つの特権（権限）レベルがあれば、ある時点でホストとなるプログラム（ＶＭＭ１０）と、ゲストとなるプログラム（ゲストＯＳ＃０またはゲストアプリケーション３０）がアクセスする領域を分離し、保護することができるのである。
【００５３】
＜４．ＶＭＭの詳細＞
＜４．１  構成＞
図５はＶＭＭ１０が管理する記憶領域２５０の一例を示す。
【００５４】
ＶＭＭ１０は、記憶領域２５０上に自身を配置するメモリ領域と、仮想計算機ＶＭ０〜ＶＭｎが使用するメモリ領域を割り当てる。ここで、ＶＭＭ１０は、ＣＰＵ２０１−０〜３を６４ビットモード（例えば、ＥＭ６４Ｔの６４ビットモード）に設定し、記憶領域２５０をフラットなアドレス空間として使用する。
【００５５】
例えば、図示のように、ＶＭＭ１０は、仮想計算機ＶＭ０をアドレス０ｈ〜ａｄ３に割り当て、自身をアドレスａｄ４〜ｘｘｘｘｈのメモリ領域に割り当てる。
【００５６】
ＶＭＭ１０が使用するメモリ領域には、ＶＭ実行管理部１２０、二重テーブル管理部１１０が割り当てられる。二重テーブル管理部１１０には、ホストメモリ保護テーブル＃０、＃１〜＃ｍ（但しｍ≧１）が、仮想計算機ＶＭ０〜ＶＭｎ上でゲストＯＳまたはゲストアプリケーションが実行されるときに生成される。そして、ＶＭＭ１０は、仮想計算機ＶＭ０〜ｎのゲストＯＳまたはゲストアプリケーションが終了すると、対応するホストメモリ保護テーブル＃０〜＃ｍ及びゲストメモリ保護テーブル２１−０〜ｎを破棄する。
【００５７】
また、ＶＭＭ１０は、仮想計算機ＶＭ０〜ＶＭｎのメモリ領域に、ゲストＯＳ＃０〜ｎが使用するメモリ領域と、ゲストアプリケーション３０が使用するメモリ領域を規定して、２つのプログラムの独立性を確保するゲストメモリ保護テーブル２１−０〜ｎを設定する。
【００５８】
ここで、ホストメモリ保護テーブル＃０〜＃ｍ及びゲストメモリ保護テーブル２１−０〜ｎは、ページテーブルセットとディスクリプタテーブル（グローバルディスクリプタテーブル、ローカルディスクリプタテーブル）の総称である。
【００５９】
ＶＭＭ１０に生成されるホストメモリ保護テーブルは、ホストページテーブルセット１３０とホストグローバルディスクリプタテーブル１４１及びホストローカルディスクリプタテーブル１４２を含む。また、仮想計算機ＶＭ０に生成されるゲストメモリ保護テーブル２１−０〜ｎは、ゲストページテーブルセット２３３とゲストグローバルディスクリプタテーブル２４１及びゲストローカルディスクリプタテーブル２４２を含む。
【００６０】
ホストメモリ保護テーブル＃０〜＃ｍとゲストメモリ保護テーブル２１−０〜ｎの構造は同一であり、図６に示すように構成される。
【００６１】
ページテーブルセット（ホストページテーブルセット１３０、ゲストページテーブルセット２３３）は、ページマップレベル４テーブル１３１を上位として、ページディレクトリポインタテーブル１３２、ページディレクトリ１３３と、ページテーブル１３４から構成される。
【００６２】
ページマップレベル４（ＰＭＬ４）テーブル１３１は、仮想アドレス空間と物理アドレス空間で変換を行うページ変換階層内でページディレクトリポインタテーブル（ＰＤＰテーブル）１３２の上位に位置し、各エントリがＰＤＰテーブル１３２を指す。ＰＤＰテーブル１３２は、ページディレクトリ１３３の上位に位置し、各エントリがページディレクトリテーブル１３３を指す。ページディレクトリ（ＰＤＥ）テーブル１３３は、各エントリがページテーブル１３４を指す。そして、ページテーブル（ＰＴＥ）１３４は各エントリが記憶領域２５０のページを指す。
【００６３】
ディスクリプタテーブルは、グローバルディスクリプタ（ＧＤＴ）テーブル１４１（２４１）とローカルディスクリプタテーブル１４２（２４２）から構成される、グローバルディスクリプタテーブル１４１（２４１）は、各システム（ＶＭＭ１０、各仮想計算機ＶＭ０〜ｎ）に一つ設定され、ローカルディスクリプタ（ＬＤＴ）テーブル１４２（２４２）は各システムのタスク毎に生成される。
【００６４】
これらのディスクリプタテーブルは、アクセス先のベース・アドレスとアクセス権、タイプ、および使用法に関する情報を含むディスクリプタを備える。
【００６５】
なお、ＶＭＭ１０は、ゲストメモリ保護テーブルを構成するページテーブル（以下、ゲストページテーブル）にライトプロテクトを施しておく。
【００６６】
以上の構成により、ＶＭＭ１０は、仮想計算機ＶＭでゲストＯＳまたはゲストアプリケーションが開始されると、図５で示すように、第１のホストメモリ保護テーブル＃０と、第２のホストメモリ保護テーブル＃１を生成し、仮想計算機ＶＭにゲストメモリ保護テーブル２１−０〜ｎを生成する。すなわち、ＶＭＭ１０では、図６に示したメモリ保護テーブルを２つ作成し、第１のホストメモリ保護テーブル＃０の各エントリが指し示すアドレスと、第２のホストメモリ保護テーブル＃１のエントリが指し示すアドレスが、図３で示した関係となるように設定するのである。
【００６７】
そして、図４で示したように、ＶＭＭ１０は、ＣＰＵ２０１−０が実行するプログラムがゲストＯＳ＃０とゲストアプリケーション３０の間で切り替わるときに、第１のホストメモリ保護テーブル＃０と第２のホストメモリ保護テーブル＃１を切り替えて、各プログラムがアクセスするメモリ領域を保護するのである。なお、他の仮想計算機ＶＭ１〜ＶＭｎについても同様に構成される。
【００６８】
また、図６のメモリ保護テーブルをホストメモリ保護テーブルに適用した場合、ページテーブルセットはホストページテーブルセットとなり、ゲストメモリ保護テーブルに適用した場合にはページテーブルセットはゲストページテーブルセットとなる。
【００６９】
＜４．２  メモリ保護テーブルの拡張＞
次に、ホストメモリ保護テーブルとゲストメモリ保護テーブルの拡張（サイズの変更）について説明する。なお、以下では、ホストメモリ保護テーブルとゲストメモリ保護テーブルの構成は同様であるので、これらのテーブルの総称をメモリ保護テーブルとする。
【００７０】
メモリ保護テーブルの大きさは可変であり、特に、ＥＭ６４Ｔにおいてはページテーブルセットの最大サイズが５１２Ｇbyte以上になる。このため、ホストメモリ保護テーブルを固定サイズで確保するのは現実的でなく、ゲストメモリ保護テーブルの大きさに応じて確保するのが望ましい。このために、ＶＭＭ１０はゲストメモリ保護テーブルのサイズの変化を検出し、ゲストメモリ保護テーブルのサイズが変化したときには、ホストメモリ保護テーブルを更新する。
【００７１】
ここで、メモリ保護テーブルの拡張について、図７を参照しながら説明する。図７は、ＰＭＬ４テーブル１３１を根とした、ＰＤＰテーブル１３２、ＰＤＥテーブル１３３及びＰＴＥ１３４の階層構造を示す。ＩＡ−３２（ＥＭ６４Ｔ）のページテーブルセットにおいては、ＰＭＬ４テーブル１３１のエントリを起点として、図中矢印の根元側のエントリに、矢印の先端にあるテーブルのアドレスが設定される。そして、各テーブル１３１〜１３４の各エントリにはプレゼントビット（以下、Ｐビット）が設定されており、このＰビットが０の場合には、このエントリに設定されたアドレスは無効となり、Ｐビットが１の場合には、このエントリに設定されたアドレスは有効となる。
【００７２】
すなわち、Ｐビットが０から１へ変化するとエントリに設定された下位のアドレスが有効となってページテーブルが拡張され、Ｐビットが１から０に変化すれば下位のアドレスが無効となってページテーブルが縮小する。各ページテーブルのＰビットを操作することで、ページテーブルセットのサイズを変更することができる。
【００７３】
より具体的には、 ページテーブルセットのサイズを変化させる操作としては、以下の操作がある。
・操作１．ＣＰＵの特権レジスタＣＲ０（ＣＰＵの動作モードと状態を制御するシステム制御フラグが入っているレジスタ）のＰＧ（ページングビット）を変化させる。ＰＧをセットすることで、ページングが可能になり、ＰＧをクリアすることでページングを停止する。
・操作２．特権レジスタＣＲ３（ページ・ディレクトリ１３３のベースの物理アドレスを格納するレジスタ）を変化させる。
・操作３．特権レジスタＣＲ４（アーキテクチャ上の各種の拡張機能を制御するレジスタ）のＰＡＥ（物理アドレス拡張ビット）の変化。なお、ＰＡＥはページングを３６ビットで行う機能を制御する。
・操作４．特権レジスタＣＲ４のＰＳＥ（ページサイズ拡張ビット）を変化させる。ＰＳＥをセットすることで４Ｍバイトのページテーブル１３４がイネーブルになり、ＰＳＥをクリアすることで、ページテーブル１３４は４Ｋバイトに制限される。
・操作５．ＰＭＬ４テーブル１３１エントリのＰビットを変化させる。
・操作６．ＰＤＰテーブル１３２のＰビットを変化させる。
・操作７．ＰＤＥテーブル１３３のＰビットの変化させる。
・操作８．ＰＤＥテーブル１３３のＰＳビットを変化させる。なお、ＰＳビット（またはフラグ）の操作は、ＰＤＥテーブルのエントリがページ・テーブル１３４を指し、テーブルのエントリが４Ｋバイト・ページを指すか(ＰＳを０に設定)、またはページ・ディレクトリ・エントリが４Ｍバイト(ＰＳＥおよびＰＳを１にセット) または２Ｍバイトのページを直接に指すか（ＰＡＥおよびＰＳを１にセット） を指定する。
【００７４】
また、ディスクリプタテーブルのサイズを変化させる操作は、以下のとおりである。
・操作９．特権レジスタＧＤＴＲを変化させる。なお、特権レジスタＧＤＴＲにはＧＤＴのベースのリニアアドレスが含まれ、このリニアアドレスを変更する。
・操作１０．特権レジスタＬＤＴＲを変化させる。なお、特権レジスタＬＤＴＲにはＬＤＴのベースのリニアアドレスが含まれ、このリニアアドレスを変更する。
【００７５】
なお、ゲストＯＳまたはゲストアプリケーションが上記操作５〜８を行った場合について、後述の図１０で説明する。
【００７６】
また、ゲストＯＳまたはゲストアプリケーションが上記操作１を行った場合について、後述の図１１で説明する。
【００７７】
また、ゲストＯＳまたはゲストアプリケーションが上記操作２〜４、９、１０を行った場合について、後述の図１２で説明する。
【００７８】
＜４．３  処理の概要＞
次に、ＶＭＭ１０とゲストとなる仮想計算機ＶＭ０（ゲストＯＳ＃０、ゲストアプリケーション３０）で行われる処理の一例について、以下、フローチャートを参照しながら説明する。
【００７９】
図８は仮想計算機ＶＭ０でゲストＯＳ＃０またはゲストアプリケーション３０を実行するときの全体的な処理を示すフローチャートで、図中破線の右側がＶＭＭ１０で行う処理であり、同じく破線の左側がゲスト側（ゲストＯＳ＃０またはゲストアプリケーション３０）で行う処理である。
【００８０】
Ｓ１１では、ＶＭＭ１０がゲストＯＳ＃０からゲストアプリケーション３０の実行開始要求を受け付けたり、あるいはゲストアプリケーション３０からゲストＯＳ＃０の実行開始要求を受け付けると、図５で示したように、実行するゲスト側のプログラム（ゲストＯＳ＃０またはゲストアプリケーション３０）に対応する第１及び第２のメモリ保護テーブルであるホストメモリ保護テーブル＃０、＃１を、ゲストメモリ保護テーブル２１−０に基づいて、ＶＭＭ１０の二重テーブル管理部１１０に生成する。
【００８１】
そして、ＶＭＭ１０は、ＣＰＵ２０１−０のテーブルポインタレジスタ２３１に、第１のホストメモリ保護テーブル＃０のアドレスを書き込んで、制御を一旦ＶＭＭ１０に移す。その後、実行するプログラムに応じて第１または第２のホストメモリ保護テーブル＃０、＃１のアドレスをテーブルポインタレジスタ２３１に書き込んで、制御をゲスト側に渡す。すなわち、ＶＭＭ１０は、ゲストＯＳ＃０を実行する場合では、ホストメモリ保護テーブル＃０のアドレスをＣＰＵ２０１−０のテーブルポインタレジスタ２３１に設定し、ゲストアプリケーション３０を実行する場合ではホストメモリ保護テーブル＃１のアドレスをＣＰＵ２０１−０のテーブルポインタレジスタ２３１に設定する。
【００８２】
仮想計算機ＶＭ０では、Ｓ１２でゲスト（ゲストＯＳ＃０またはゲストアプリケーション３０）を実行し、Ｓ１３ではゲスト側でＶＭＭ１０の介入を必要とするイベントが発生したか否かを判定する。すなわち、割り込みや例外イベント、ゲストＯＳ＃０やゲストアプリケーション３０の終了などＶＭＭ１０の介入が必要なイベントがあればＳ１４に進んで、制御をＶＭＭ１０に返す。ＶＭＭ１０の介入が不要であればＳ１２へ戻って、ゲスト側の処理を実行する。
【００８３】
なお、仮想計算機ＶＭ０でゲストＯＳ＃０を実行する場合も、上記と同様にＳ１２、Ｓ１３を繰り返して処理する。
【００８４】
Ｓ１４では、ＶＭＭ１０が、ホストメモリ保護テーブル＃０または＃１の更新が必要であるか否かを検出する。この検出は、ゲストＯＳ＃０やゲストアプリケーション３０がゲストメモリ保護テーブル２１−０に書き込みを行おうとすると、上述のライトプロテクトが施されているため、例外イベントが発生する。ＶＭＭ１０は、この例外イベントを検知したときにメモリ保護テーブルの更新が必要と判定して、Ｓ１５に進む。なお、ゲストＯＳ＃０が特権レジスタを操作した場合にも、同様にしてＳ１５に進む。
【００８５】
Ｓ１５では、ゲストアプリケーション３０またはゲストＯＳ＃０が行ったゲストページテーブル（１３４）に対する書き込み要求を、ＶＭＭ１０のホストメモリ保護テーブル＃０または＃１に反映して更新する。また、仮想計算機ＶＭ０のゲストメモリ保護テーブル２１−０も同様に更新する。
【００８６】
次に、Ｓ１６では、ＶＭＭ１０が仮想計算機ＶＭ０上で動作中のプログラムが切り替わったか否かを検出する。すなわち、ゲストアプリケーション３０からゲストＯＳ＃０へ切り替わったり、ゲストＯＳ＃０からゲストアプリケーション３０に切り替わっていれば、切り替えがあったと判定してＳ１７に進む。
【００８７】
Ｓ１７では、第１のプログラム（ここではゲストＯＳ＃０）または第２のプログラム（ここではゲストアプリケーション３０）のいずれに切り替わったかを判定する。第１のプログラムに切り替わったときには、Ｓ１８に進んで、ＶＭＭ１０はホストメモリ保護テーブル＃０のアドレスをＣＰＵ２０１−０のテーブルポインタレジスタ２３１に設定する。あるいは、第２のプログラムに切り替わったときには、Ｓ１９に進んで、ＶＭＭ１０はホストメモリ保護テーブル＃１のアドレスをＣＰＵ２０１−０のテーブルポインタレジスタ２３１に設定する。
【００８８】
上記Ｓ１８、Ｓ１９により、保護すべきメモリ領域を指し示すホストメモリ保護テーブル＃０、＃１が、仮想計算機ＶＭ０で実行されるプログラムに応じて切り替えられる。
【００８９】
次に、Ｓ２０ではＶＭＭ１０がゲストＯＳ＃０またはゲストアプリケーション３０の終了を検出したか否かを判定し、ゲスト側が終了した場合には。ホストメモリ保護テーブル＃０及び＃１を破棄してから、ゲスト側のプログラムを完了させる。
【００９０】
上記処理により、ＶＭＭ１０はゲスト側のプログラム（ゲストＯＳ＃０またはゲストアプリケーション３０）の実行開始を検出すると、実行するプログラムに応じた第１または第２のホストメモリ保護テーブル＃０、＃１を生成する。そして、実行するプログラムに応じた第１または第２のホストメモリ保護テーブルにより、ゲスト側（仮想計算機ＶＭ０側）のプログラムが使用するメモリ領域と、ＶＭＭ１０が使用するメモリ領域の保護を行う。
【００９１】
また、ゲスト側で実行するプログラムが切り替わるときには、ＶＭＭ１０が切り替えるプログラムに対応する第１または第２のホストメモリ保護テーブルに切り替えることで、ＣＰＵ２０１−０が実行するプログラムに応じてゲスト側とＶＭＭ１０の各メモリ領域を確実に保護する。
【００９２】
＜４．４  メモリ保護テーブル作成処理＞
上記図８のＳ１１で行われるメモリ保護テーブルの作成処理について、図９のフローチャートを参照しながら説明する。
【００９３】
Ｓ３１では、ゲスト側で開始されるプログラム（ゲストＯＳ＃０またはゲストアプリケーション３０）に応じたメモリ領域を、図５で示したように仮想計算機ＶＭ０から取得する。そして、ゲストＯＳ＃０を第１のプログラムとして、第１のホストメモリ保護テーブル＃０を生成し、ゲストＯＳ＃０とＶＭＭ１０の保護すべきメモリ領域を設定する。また、ゲストアプリケーション３０を第２のプログラムとして、第２のホストメモリ保護テーブル＃１を生成して、ゲストアプリケーション３０とＶＭＭ１０の保護すべきメモリ領域を設定する。
【００９４】
Ｓ３２では、ＶＭＭ１０が、ＣＰＵ２０１−０のテーブルポインタレジスタ２３１に、第１のホストメモリ保護テーブル＃０のアドレスを書き込んで終了する。
【００９５】
以上の処理により、ゲストＯＳ＃０やゲストアプリケーション３０等の開始時には、二重テーブル管理部１１０に２つのホストメモリ保護テーブル＃０、＃１が生成される。
【００９６】
＜４．５．１  メモリ保護テーブル更新処理１＞
上記図８のＳ１５で行われるメモリ保護テーブルの更新処理の一例について、図１０のフローチャートを参照しながら説明する。図１０は、上記操作５〜８をゲストＯＳまたはゲストアプリケーションが行った場合の処理を示す。
【００９７】
上記図８のＳ１４でゲストメモリ保護テーブル２１−０に対する書き込みがあったときには、Ｓ１５に進んで図１０のサブルーチンが実行される。
【００９８】
Ｓ４１では、仮想計算機ＶＭ０で発生した例外イベントをＶＭＭ１０が取得し、ゲストＯＳが書き込みを行ったゲストメモリ保護テーブル２１−０のエントリをＶＭＭ１０が特定する。
【００９９】
次に、Ｓ４２ではＶＭＭ１０が、仮想計算機ＶＭ０のゲストページテーブルセットに対する書き込みが有効であったか否かを判定する。ゲストによる書き込みの判定は、当該書き込みが例外を発生させる場合は無効と判断して本サブルーチンを終了し、例外を発生させない場合は有効と判定してＳ４３へ進む。
【０１００】
なお、上記ゲストによるゲストページテーブルセットへの書き込みで無効となる場合は、ＩＡ−３２の場合、一般保護例外（＃ＧＰ）、スタック・フォルト例外（＃ＳＳ）、アライメント例外（＃ＡＣ）、ページ・フォルト例外（＃ＰＦ）が発生したときである。なお、上記例外については、IA-32 Intel Architecture Software Developer's Manual Volume 3: System Programming Guide Intel Extended Memory 64 Technology Software Developer's Guide Volume 1 of 2（ftp://download.intel.co.jp/jp/developer/jpdoc/ia32_arh_dev_man_vol3_i.pdf）のとおりである。
【０１０１】
Ｓ４３では、ゲストメモリ保護テーブル２１−０の拡張が行われたか否かを検出することで、第１及び第２のホストメモリ保護テーブルにエントリの追加が必要であるか否かを判定する。ＶＭＭ１０は、ゲストメモリ保護テーブルの拡張が検出された場合には、Ｓ４４に進む一方、エントリの追加が不要であるときには、Ｓ４５の処理へ進む。
【０１０２】
このゲストメモリ保護テーブルの拡張の有無は、次の条件の何れかを満足するときに、ゲストメモリ保護テーブルの拡張を検出する。
・条件１．ゲスト（ゲストＯＳまたはゲストアプリケーション）が６４ｂｉｔモードでＰＭＬ４テーブル１３１のエントリのＰビットが０⇒１に変化したとき。
・条件２．ゲストがＣＲ４．ＰＡＥ＝１かつＣＲ０．ＰＧ＝１でＰＤＰのＰビットが０⇒１に変化したとき。なお、ＣＲ４．ＰＡＥは特権レジスタＣＲ４のＰＡＥビットを意味し、ＣＲ０．ＰＧは、特権レジスタＣＲ０のＰＧビットを意味する。
・条件３．ゲスト設定に関して式  （！ＣＲ４．ＰＳＥ｜！ＰＤＥ．ＰＳ）＆ＰＤＥ．Ｐが０⇒１に変化したとき。なお、ＣＲ４．ＰＳＥは特権レジスタＣＲ４のＰＳＥビットを意味し、ＰＤＥ．ＰＳはＰＤＥテーブル１３３のＰＳビットで、ＰＤＥ．Ｐは、ＰＤＥテーブル１３３のＰビットである。
【０１０３】
また、６４ｂｉｔモードの条件はＩＡ３２ＥＦＥＲ．ＬＭＥ＝１＆＆ＣＲ４．ＰＡＥ＝１＆＆ＣＲ０．ＰＧ＝１＆＆ＣＳ．Ｌ＝１が成立するときである。ただし、ＩＡ３２ＥＦＥＲ．ＬＭＥは、拡張機能イネーブル・レジスタ（ＩＡ３２＿ＥＦＥＲ）のＩＡ−３２ｅモード・イネーブル（ＬＭＥ）ビットを意味する。
【０１０４】
次に、Ｓ４４では、ＶＭＭ１０が、ゲストメモリ保護テーブルに対応する第１、第２のホストメモリ保護テーブル＃０、＃１に新規エントリを追加する。
【０１０５】
Ｓ４５では、ゲストＯＳまたはゲストアプリケーションのゲストメモリ保護テーブルに対する書き込みを、ＶＭＭ１０がゲストメモリ保護テーブルに反映させる。すなわち。ゲストメモリ保護テーブルはライトプロテクトが施されているため、ゲスト側でゲストメモリ保護テーブルに書き込みを行うと、例外イベントが発生するだけで、実際の書き込みは完了していない。このため、ＶＭＭ１０がゲスト側の要求に応じてゲストメモリ保護テーブルを更新するのである。
【０１０６】
そして、Ｓ４６ではＶＭＭ１０が上記Ｓ４５で書き込んだ内容を、第１、第２のホストメモリ保護テーブル＃０、＃１の対応するエントリに反映させて更新を行う。これにより、ゲストメモリ保護テーブルが拡張されて場合には、ＶＭＭ１０はホストメモリ保護テーブル＃０、＃１の内容を更新し、ゲストメモリ保護テーブルとホストメモリ保護テーブルの対応するエントリを一致させる。
【０１０７】
＜４．５．２  メモリ保護テーブル更新処理２＞
上記図８のＳ１５で行われるメモリ保護テーブルの更新処理の他の例について、図１１のフローチャートを参照しながら説明する。図１１は、上記操作１（特権レジスタＣＲ０のＰＧビットを変化させる操作）をゲストＯＳまたはゲストアプリケーションが行った場合の処理を示す。
【０１０８】
まず、Ｓ５１では、ＶＭＭ１０がＣＰＵ２０１−０のＰＧビットを参照し、ページングが有効であるか無効であるか等からゲストメモリ保護テーブルが有効または無効のいずれであるかを判定する。ゲストＯＳのブート時には、特権レジスタＣＲ０のＰＧビットはＯＦＦで、アプリケーションの起動時などにＯＦＦ→ＯＮへ変化する。このとき例外イベントが発生するのでＶＭＭ１０は、この例外を捕捉し、ページングが有効（セット）であればＳ５３に進み、無効（クリア）であればＳ５２へ進む。
【０１０９】
Ｓ５２では、上記図９と同様にして、ゲストメモリ保護テーブルを参照して第１及び第２のホストメモリ保護テーブル＃０、＃１を生成する。
【０１１０】
一方、ゲストメモリ保護テーブルが有効であるＳ５３では、ゲストメモリ保護テーブルのページディレクトリ（ＰＤＥ）テーブル１３３から変更されたエントリの位置情報を取得する。
【０１１１】
Ｓ５４では、ゲストメモリ保護テーブルの全てを参照し、第１及び第２のホストメモリ保護テーブル＃０、＃１を生成する。
【０１１２】
Ｓ５５では、ゲストメモリ保護テーブルを書き込み禁止に設定し、以降、ゲスト側がゲストメモリ保護テーブルに書き込みを行うと、例外イベントを発生して上記４．５．１で述べた処理を行うように設定する。
【０１１３】
次に、Ｓ５６では本サブルーチンへ入る契機となった例外イベントを発生したゲスト側の特権（権限）レベルを所定値（０）と比較し、ゲストＯＳとＶＭＭ１０を保護するホストメモリ保護テーブル＃０と、ゲストアプリケーションとＶＭＭ１０を保護するホストメモリ保護テーブル＃１の何れかを選択する。つまり、特権レベル（ＣＰＬ：CURRENT PRIVILEGE LEVEL）が０であればゲストＯＳと判定し、特権レベルが０でなければゲストアプリケーションと判定する。
【０１１４】
特権レベルが０のＳ５７では、第１のホストメモリ保護テーブル＃０を使用するように、ＣＰＵ２０１−０のテーブルポインタレジスタ２３１に第１のホストメモリ保護テーブルを示すアドレスを設定する。
【０１１５】
特権レベルが０でないＳ５８では、第２のホストメモリ保護テーブル＃１を使用するように、ＣＰＵ２０１−０のテーブルポインタレジスタ２３１に第２のホストメモリ保護テーブルを示すアドレスを設定する。
【０１１６】
以上の処理により、ゲスト側で上記操作１による例外イベントが発生した場合には、ゲストメモリ保護テーブルに対応してのホストメモリ保護テーブル＃０、＃１の更新（生成）が行われる。
【０１１７】
＜４．５．３  メモリ保護テーブル更新処理３＞
上記図８のＳ１５で行われるメモリ保護テーブルの更新処理の他の例について、図１２のフローチャートを参照しながら説明する。図１２は、上記操作２〜４、９、１０（特権レジスタＣＲ３、４、ＧＤＴＲ、ＬＤＴＲを変化させる操作）をゲストＯＳまたはゲストアプリケーションが行った場合の処理を示す。
【０１１８】
このサブルーチンでは、特権レジスタＣＲ３のページ・ディレクトリ１３３のベースの物理アドレスの書き換えが生じた場合になどで実行される。
【０１１９】
まず、Ｓ６１では、上記図１１のＳ５１と同様にしてゲストメモリ保護テーブルが有効または無効のいずれであるかを判定する。
【０１２０】
ゲストメモリ保護テーブルが無効の場合では、ホストメモリ保護テーブルを更新する必要がないので、Ｓ６６に進む。
【０１２１】
ページングが有効であるＳ６３では、ゲストメモリ保護テーブルから新たに追加されたエントリの位置情報を取得する。
【０１２２】
Ｓ６４では、新たに追加されたエントリに関連するゲストメモリ保護テーブルを参照して第１及び第２のホストメモリ保護テーブル＃０、＃１を生成する。
【０１２３】
Ｓ６５では、ゲストメモリ保護テーブルを書き込み禁止に設定し、以降、ゲスト側がゲストメモリ保護テーブルに書き込みを行うと、例外イベントを発生して上記４．５．１で述べた処理を行うように設定する。
【０１２４】
次に、Ｓ６６では本サブルーチンへ入る契機となった例外イベントを発生したゲスト側の特権（権限）レベルを確認し、ゲストＯＳとＶＭＭ１０を保護するホストメモリ保護テーブル＃０と、ゲストアプリケーションとＶＭＭ１０を保護するホストメモリ保護テーブル＃１の何れかを選択し、特権レベルが０のＳ６７では、第１のホストメモリ保護テーブル＃０を使用するように、ＣＰＵ２０１−０のテーブルポインタレジスタ２３１に第１のホストメモリ保護テーブルを示すアドレスを設定する。特権レベルが０でないＳ６８では、第２のホストメモリ保護テーブル＃１を使用するように、ＣＰＵ２０１−０のテーブルポインタレジスタ２３１に第２のホストメモリ保護テーブルを示すアドレスを設定する。
【０１２５】
以上の処理により、特権レジスタのベースアドレスなどの変更（操作２〜４、９、１０）がゲスト側で行われた場合には、ゲストメモリ保護テーブルに対応してホストメモリ保護テーブル＃０、＃１の更新（生成）が行われる。
【０１２６】
＜４．６  第１、第２ホストメモリ保護テーブルの設定＞
次に、図８のＳ１５及び上記４．５．１〜３に示した第１及び第２のホストメモリ保護テーブル＃０、＃１の更新処理の詳細について、以下に説明する。
【０１２７】
図１３は、ページディレクトリ（ＰＤＥ）テーブル１３３のエントリの詳細を示し、図１４は、ページテーブル（ＰＴＥ）１３４のエントリの詳細を示す。各エントリには、エントリ（ディレクトリ）の有効／無効を示すＰビットと、アクセス権限がユーザまたはスーパバイザのいずれであるかを示すＵ／Ｓビットを備える。Ｐビットは、上述のように１で有効、０で無効となり、Ｕ／Ｓビットは、０が特権プログラム、１が非特権プログラムのアクセス権限を示す。なお、図示はしないが、ＰＭＬ４テーブル１３１及びＰＤＰテーブル１３２も同様にＰビットとＵ／Ｓビットを備えている。
【０１２８】
本実施形態では、第１のホストメモリ保護テーブル＃０と第２のホストメモリ保護テーブル＃１の各ページテーブルセットについて、各テーブルエントリのＰビットとＵ／Ｓビットを操作することで各ホストメモリ保護テーブルの保護、つまり、ＶＭＭ１０、ゲストＯＳ、ゲストアプリケーションのメモリ領域の保護を実現する。
【０１２９】
この保護のため、ゲストメモリ保護テーブル（ページテーブルセット、ディスクリプタテーブル（グローバルディスクリプタテーブルＧＤＴ、ローカルディスクリプタテーブルＬＤＴ））のＰビットとＵ／Ｓビットを図１５のように設定する。
【０１３０】
図１５は、ゲストメモリ保護テーブル２１−０に対するゲスト側のＰビットとＵ／Ｓビットの設定と、ＶＭＭ１０が管理する第１のホストメモリ保護テーブル＃０と第２のホストメモリ保護テーブル＃１のＰビットとＵ／Ｓビットの設定を示す。
【０１３１】
ゲスト側（ゲストＯＳ＃０またはゲストアプリケーション３０）はゲストページテーブルセット及びＧＤＴ、ＬＤＴに対してＰビットを０／１、Ｕ／Ｓビットを０／１に設定することで４通りの組み合わせがある。これに対してＶＭＭ１０は、ゲスト側のＰビットの０／１に係わらず、第１及び第２のホストメモリ保護テーブル＃０、＃１のゲストメモリ保護テーブル２１−０の領域に対してＰビットを全て０に設定する。すなわち、図中斜線のように、ＶＭＭ１０は、ゲストメモリ保護テーブルについて各テーブルのエントリがない（または無効）状態に設定する。
【０１３２】
ここで、第１のホストメモリ保護テーブル＃０において、Ｐビットが「０」の領域はＶＭＭ１０だけがアクセス可能な範囲であり、Ｐビットが「１」の領域はＶＭＭ１０及びゲストＯＳ＃０がアクセス可能な範囲である。同様に、第２のホストメモリ保護テーブル＃１において、Ｐビットが「０」の領域はＶＭＭ１０だけがアクセス可能な範囲であり、Ｐビットが「１」の領域はＶＭＭ１０及びゲストアプリケーション３０がアクセス可能な範囲である。
【０１３３】
ＶＭＭ１０が、第１のホストメモリ保護テーブルでページテーブルセットのＰビットを０に設定することにより、ゲストＯＳ＃０がゲストメモリ保護テーブル２１−０に対してアクセスを行うと、Ｐビットが０であるために必ず例外イベントが発生し、ＶＭＭ１０はゲスト側による保護すべき領域へのアクセスを検知することができ、ゲストＯＳ＃０とＶＭＭ１０の保護を行うことができる。なお、第１のホストメモリ保護テーブル＃０では、Ｕ／Ｓビットは１に設定されてゲストＯＳ＃０は非特権扱いとなる。
【０１３４】
次に、ゲストメモリ保護テーブル２１−０以外の領域（図中上記以外のメモリ領域）について、ＶＭＭ１０は、ゲストＯＳ＃０が常にＶＭＭ１０に対して非特権となるように、第１のホストメモリ保護テーブル＃０を設定する。すなわち、ゲスト側のＵ／Ｓビットの設定が０（＝特権）であっても、第１のホストメモリ保護テーブル＃０のＵ／Ｓビットを１に設定する。これにより、ＶＭＭ１０とゲストＯＳ＃０の２者のメモリ領域を保護する第１のホストメモリ保護テーブル＃０は、ゲストＯＳ＃０のアクセスを常に非特権アクセスとして扱うことができる。
【０１３５】
なお、ＶＭＭ１０とゲストアプリケーション３０の２者のメモリ領域を保護する第２のホストメモリ保護テーブル＃１では、ゲストメモリ保護テーブル２１−０以外の領域（図中上記以外のメモリ領域）について、Ｐビット及びＵ／Ｓビットともにゲスト側の設定どおりとする。
【０１３６】
次に、第１及び第２のホストメモリ保護テーブル＃０、＃１のディスクリプタテーブル（ＧＤＴ、ＬＤＴ）の設定について説明する。
【０１３７】
図１６はディスクリプタの一例を示しＬＤＴディスクリプタの例である。ＬＤＴディスクリプタには、ディスクリプタの特権（権限）レベルを示す２ビットのＤＰＬ（Description Privilege Level）を含み、ＤＰＬは０〜３の４段階の特権レベルを設定可能である。しかし、本実施形態では、実質的に０と３の２つの特権レベルを使用するものとする。
【０１３８】
図１７は、ディスクリプタテーブルに対するゲスト側の設定と、第１及び第２のホストメモリ保護テーブル＃０、＃１に対する設定を示す。
【０１３９】
まず、ゲスト側がＤＰＬを０に設定したとき、第１のホストメモリ保護テーブル＃０では、ＤＰＬを最も特権レベルの低い３に設定し、ゲストＯＳ＃０の特権レベルを下げてＶＭＭ１０が使用する領域を保護する。なお、ゲスト側のＤＰＬの設定が１〜３の場合も第１のホストメモリ保護テーブル＃０を３に設定する。
【０１４０】
第２のホストメモリ保護テーブル＃１では、ゲストアプリケーション３０の設定であるので、ゲスト側の設定が３のときのみ、第２のホストメモリ保護テーブルのＤＰＬを３に設定し、その他をＤＰＬ＝０としてＶＭＭ１０とゲストアプリケーション３０が使用するメモリ領域の保護を行う。
【０１４１】
以上のように、本実施形態では第１及び第２のホストメモリ保護テーブル＃０、＃１のページテーブルセットのＰビットを０にしておくことで、ゲスト側（ゲストＯＳ＃０、ゲストアプリケーション３０）がＶＭＭ１０の領域をアクセスするのを防ぎ、また、ゲストＯＳ＃０を常に非特権プログラムとして扱うことで、特権レベルまたはアクセス権限の高いＶＭＭ１０の領域を保護することができる。
【０１４２】
＜４．７  メモリ保護テーブル  削除処理＞
図１８は、図８のＳ２１で行われる第１及び第２のホストメモリ保護テーブル＃０、＃１の削除処理の一例を示すフローチャートである。
【０１４３】
まず、Ｓ７１では、ＶＭＭ１０が、仮想計算機ＶＭ０のゲストＯＳ＃０（第１のプログラム）とゲストアプリケーション３０（第２のプログラム）の動作を停止させる。
【０１４４】
次に、Ｓ７２では、ＣＰＵ２０１−０のＭＭＵ２３０テーブルポインタレジスタ２３１に設定されている第１のホストメモリ保護テーブル＃０または第２のホストメモリ保護テーブル＃１のアドレスを無効にする。
【０１４５】
そして、第１及び第２のホストメモリ保護テーブル＃０、＃１のメモリ領域を開放し、２つのホストメモリ保護テーブルを削除して終了する。
【０１４６】
＜５  まとめ＞
以上のように、本実施形態によれば、ＩＡ−３２等の既存の３２ビットアーキテクチャのＣＰＵを６４ビットに拡張したＥＭ６４Ｔのように、２段階のアドレス保護機構（権限レベル）しか設定できないＣＰＵを用いて仮想計算機を構成した場合であっても、ゲスト側とＶＭＭ１０側の２つのプログラムのメモリ領域を規定したホストメモリ保護テーブルをゲストに応じて切り替えることで、ＶＭＭ１０とゲストＯＳ＃０及びゲストアプリケーション３０毎にメモリ領域の保護を確実に行うことができ、信頼性の高い仮想計算機システムを提供することが可能となる。
【０１４７】
なお、上記実施形態では、ＩＡ−３２を６４ビットに拡張した６４ビットＰＵとしてＥＭ６４Ｔを備えた例を示したが、同様のＣＰＵアーキテクチャであるＡＭＤ６４（ＡＭＤ社）等を用いても上記と同様にゲストＯＳ＃０、ゲストアプリケーション３０、ＶＭＭ１０の保護を正確に行うことができるのである。
【０１４８】
＜第２実施形態＞
図１９、図２０は、第２の実施形態を示し、前記第１実施形態のＣＰＵ２０１−０〜３を、仮想化技術を実装したＣＰＵ２０１−０’〜３’に置き換えたもので、その他の構成は前記第１実施形態と同様である。なお、前記第１実施形態と同一のものには同一の図番を付して重複説明を省略する。
【０１４９】
ＣＰＵ２０１−０’〜３’は、仮想計算機ＶＭ０〜ＶＭｎ（ゲストＯＳまたはゲストアプリケーション）とＶＭＭ１０の切り換えをハードウェアで行う機構を備えたものである。この機構は、ＶＭＭ１０とゲストプログラム（ゲストＯＳまたはゲストアプリケーション）の特権レベル及びメモリ保護テーブルの切り換えをハードウェアで行う。これにより、従来のＶＭＭ１０ではソフトウェアで切り換えを行っていたために、処理のオーバーヘッドとなっていたＶＭＭ１０とゲストプログラムの切り替えをハードウェアの処理で高速化するものである。この仮想化技術を実装したＣＰＵとしては、例えば、「Intel Virtualization Technology Specification for the IA-32 Intel Architecture」（ftp://download.intel.com/technology/computing/vptech/C97063-002.pdf）などが知られている。
【０１５０】
図２０は、物理計算機２００上で仮想計算機ＶＭ０〜ＶＭｎを実現するソフトウェア及びハードウェア構成の主要部を示すブロック図である。なお、以下では、ゲスト側となる仮想計算機ＶＭ上で実行されるゲストＯＳまたはゲストアプリケーションの双方をゲストプログラムとして扱う。
【０１５１】
ＶＭＭ１０では、前記第１実施形態と同様に複数の仮想計算機ＶＭ０〜ＶＭｎが稼動する。ここで、仮想計算機ＶＭ０は、複数のゲストプログラム３００−０、１から構成され、例えば、ゲストプログラム３００−０がゲストＯＳ＃０であり、ゲストプログラム３００−１がゲストＯＳ＃０上のゲストアプリケーション３０である。以下の説明では、ＣＰＵ２０１−０’と２つのゲストプログラム３００−０（ゲストＯＳ＃０）、３００−１（ゲストアプリケーション３０）からなる仮想計算機ＶＭ０について説明を行う。
【０１５２】
ＶＭＭ１０は、ゲストプログラム３００−０、１を実行する際に、前記第１実施形態と同様にして、二重テーブル管理部１１０に実行するゲストプログラムに対応するホストメモリ保護テーブル＃０、＃１を生成する。
【０１５３】
ＶＭＭ１０は初期化処理として、ＣＰＵ２０１−０’に、ゲストプログラム３００−０に対応するホストメモリ保護テーブル＃０と、ＶＭＭ１０に対応するホストメモリ保護テーブル＃１を登録する。そして、ゲストプログラム３００−０を実行する場合、ＶＭ実行管理部１２０がＣＰＵ２０１−０’にＶＭ−ＥＮＴＲＹ命令（ＶＭＬＡＵＮＣＨ命令等）を発行する。このＶＭ−ＥＮＴＲＹ命令は、制御をＶＭＭ１０からゲストプログラムに切り替えるため、特権レベルを低く設定すると同時に、ＭＭＵ２３０のテーブルポインタレジスタ２３１に事前に指定されたテーブルをセットするものである。本実施形態では、ＶＭ−ＥＮＴＲＹ命令によって、ホストメモリ保護テーブル＃０がセットされる。
【０１５４】
仮想化技術を実装したＣＰＵ２０１−０’は、ＶＭＭ１０からのＶＭ−ＥＮＴＲＹ命令を受けると、特権レベル及びメモリ保護テーブルをゲスト側に切り替えて、制御をゲストプログラム３００−０に移す。ゲストプログラム３００−０はゲストＯＳ＃０であり、ホストメモリ保護テーブル＃０は、図２０で示すように、前記第１実施形態と同様に、ＶＭＭ１０のメモリ領域とゲストＯＳ＃０のメモリ領域を保護する。
【０１５５】
そして、ＣＰＵ２０１−０’はゲスト側からＶＭ−ＥＸＩＴ命令を受けると、制御をゲスト側からＶＭＭ１０に移す。このＶＭ−ＥＸＩＴ命令は、制御をゲストプログラムからＶＭＭ１０に切り替えるため、特権レベルを高く設定すると同時に、ＭＭＵ２３０のテーブルポインタレジスタ２３１に事前に指定されたテーブルをセットするものである。本実施形態では、ＣＰＵ２０１−０’は、ゲストプログラムからＶＭ−ＥＸＩＴ命令を受けると、特権レベルをＶＭＭ１０に切り替え、メモリ保護テーブルをＶＭＭ側に切り替えた後、制御をＶＭＭ１０に移す。
【０１５６】
次に、ＶＭＭ１０がゲストプログラム３００−１（ゲストアプリケーション３０に相当）を実行する場合、上記と同様に、ＶＭＭ１０がＣＰＵ２０１−０’にＶＭ−ＥＮＴＲＹ命令を発行する。
【０１５７】
ＶＭ−ＥＮＴＲＹ命令によりホストメモリ保護テーブルは、＃０から＃１に切り替えられて、図２０で示すように、前記第１実施形態と同様に、ＣＰＵ２０１−０’のＭＭＵ２３０は、ＶＭＭ１０のメモリ領域とゲストＯＳ＃０のメモリ領域を保護する。
【０１５８】
このように、ハードウェアによりＶＭＭ１０と仮想計算機ＶＭ０の切り替えをアシストするＣＰＵ２０１−０’を採用した場合でも、ＶＭＭ１０が、ＶＭＭ１０自身またはゲストプログラムの切り替えに伴うＣＰＵ動作をＣＰＵ２０１−０’に登録し、第１または第２のホストメモリ保護テーブルを切り替えることで前記第１実施形態と同様に、ゲストＯＳ＃０、ゲストアプリケーション３０、ＶＭＭ１０の独立性を確保して、仮想計算機の信頼性を向上させることができる。
【０１５９】
なお、ホストメモリ保護テーブルは、前記第１実施形態と同様に、記憶領域２５０上にゲストＯＳ、ゲストアプリケーション毎に生成し、実行が終了後に削除すればよい。
【０１６０】
また、仮想化技術を実装したＣＰＵ２０１−０’が、前記第１実施形態と同様の６４ビットアーキテクチャを備えるものであっても良い。
【０１６１】
＜補足＞
請求項３の発明において、前記切り替える処理は、
前記第１のプログラムと第２のプログラムの権限レベルを所定の値と比較する処理と、  前記権限レベルが高い場合には、第１のプログラムを選択して切り替え、前記権限レベルが低い場合には第２のプログラムを選択して切り替える処理と、
を含むことを特徴とする仮想計算機の制御方法。
【０１６２】
請求項８の発明において、前記切り替える手順は、
前記第１のプログラムと第２のプログラムの権限レベルを所定の値と比較する手順と、  前記権限レベルが高い場合には、第１のプログラムを選択して切り替え、前記権限レベルが低い場合には第２のプログラムを選択して切り替える手順と、
を含むことを特徴とする仮想計算機のプログラム。
【０１６３】
請求項３の発明において、前記ゲストアプリケーションはゲストＯＳ上で複数実行され、前記ＣＰＵで実行される第２のプログラムがアクセス可能なメモリ領域を規定する第２のメモリ保護テーブルを設定する処理は、
前記ゲストアプリケーションに応じて複数の前記第２のメモリ保護テーブルを設定し、前記第２のメモリ保護テーブルに対応して仮想計算機の状態のサブセットをそれぞれ有し、
前記第１のメモリ保護テーブルまたは第２のメモリ保護テーブルに切り替える処理は、更に現在の仮想計算機の状態と、前記仮想計算機の状態のサブセットとを比較する処理と、前記比較が一致した前記第２のメモリ保護テーブルの位置を取得する処理を含むことを特徴とする仮想計算機の制御方法。
【０１６４】
請求項８の発明において、前記ゲストアプリケーションはゲストＯＳ上で複数実行され、前記ＣＰＵで実行される第２のプログラムがアクセス可能なメモリ領域を規定する第２のメモリ保護テーブルを設定する手順は、
前記ゲストアプリケーションに応じて複数の前記第２のメモリ保護テーブルを設定し、前記第２のメモリ保護テーブルに対応して仮想計算機の状態のサブセットをそれぞれ有し、
前記第１のメモリ保護テーブルまたは第２のメモリ保護テーブルに切り替える手順は、更に現在の仮想計算機の状態と、前記仮想計算機の状態のサブセットとを比較する手順と、前記比較が一致した前記第２のメモリ保護テーブルの位置を取得する手順を含むことを特徴とする仮想計算機のプログラム。
【０１６５】
請求項１の発明において、前記第１または第２のメモリ保護テーブルは、複数のテーブルから構成され、各テーブルのエントリは他のテーブルの位置情報を含み、前記第１のメモリ保護テーブルまたは第２のメモリ保護テーブルに切り替える処理は、前記他のテーブルヘのポインタ情報を書き換える処理を含むことを特徴とする仮想計算機の制御方法。
【０１６６】
請求項６の発明において、前記第１または第２のメモリ保護テーブルは、複数のテーブルから構成され、各テーブルのエントリは他のテーブルの位置情報を含み、前記第１のメモリ保護テーブルまたは第２のメモリ保護テーブルに切り替える手順は、前記他のテーブルヘのポインタ情報を書き換える手順を含むことを特徴とする仮想計算機のプログラム。
【０１６７】
請求項１の発明において、前記第１のメモリ保護テーブルまたは第２のメモリ保護テーブルに切り替える処理は、前記第１または第２のメモリ保護テーブルの内容を更新する処理を含むことを特徴とする仮想計算機の制御方法。
【０１６８】
請求項６の発明において、前記第１のメモリ保護テーブルまたは第２のメモリ保護テーブルに切り替える手順は、前記第１または第２のメモリ保護テーブルの内容を更新する手順を含むことを特徴とする仮想計算機のプログラム。
【０１６９】
請求項１の発明において、前記第１のプログラムまたは第２のプログラムが終了したときには、前記終了したプログラムに対応する前記第１または第２のメモリ保護テーブルを破棄する処理を含むことを特徴とする仮想計算機の制御方法。
【０１７０】
請求項６の発明において、前記第１のプログラムまたは第２のプログラムが終了したときには、前記終了したプログラムに対応する前記第１または第２のメモリ保護テーブルを破棄する手順を含むことを特徴とする仮想計算機のプログラム。
【０１７１】
請求項１１の発明において、前記メモリ管理ユニットは、少なくとも２段階の権限レベルで前記メモリ領域を保護することを特徴とする仮想計算機システム。
【０１７２】
請求項１２の発明において、前記メモリ管理ユニットは、少なくとも２段階の権限レベルで前記メモリ領域を保護することを特徴とする仮想計算機システム。
【産業上の利用可能性】
【０１７３】
以上のように、本発明は、既存の３２ビットアーキテクチャを６４ビットに拡張したＣＰＵや仮想化技術を実装したＣＰＵを備えた仮想計算機システムに適用することができる。
【図面の簡単な説明】
【０１７４】
【図１】本発明の第１の実施形態を示し、仮想計算機システムを動作させる物理計算機のブロック図。
【図２】仮想計算機システムのソフトウェアとハードウェアの要部を示すブロック図。
【図３】ゲストＯＳ稼働時とゲストアプリケーション稼働時のメモリ領域とホストメモリ保護テーブルの切り替えの様子を示す説明図。
【図４】所定時間間隔毎の使用メモリ領域とホストメモリ保護テーブルの関係を示すグラフ。
【図５】メモリ領域のマップ。
【図６】ホストメモリ保護テーブルまたはゲストメモリ保護テーブルの構成を示すブロック図。
【図７】ページテーブルセットの構成を示すブロック図。
【図８】ＶＭＭ及びゲスト側で行われる処理の一例を示すフローチャート。
【図９】図８のＳ１１で行われるメモリ保護テーブルの作成処理の一例を示すフローチャート。
【図１０】図８のＳ１５で行われるメモリ保護テーブルの更新処理の一例を示すフローチャート。
【図１１】同じく、図８のＳ１５で行われるメモリ保護テーブルの更新処理の他の例を示すフローチャート。
【図１２】同じく、図８のＳ１５で行われるメモリ保護テーブルの更新処理のさらに他の例を示すフローチャート。
【図１３】ページディレクトリの一例を示すマップ。
【図１４】ページテーブルの一例を示すマップ。
【図１５】ゲストページテーブルセットのＰビットとＵ／Ｓビットの設定と、第１または第２のホストページテーブルセットのＰビットとＵ／Ｓビットの設定を示す説明図。
【図１６】ディスクリプタの一例を示すマップ。
【図１７】ゲスト側のディスクリプタテーブルのＤＰＬと、第１、第２のホストメモリ保護テーブルのディスクリプタテーブルのＤＰＬの関係を示す説明図。
【図１８】図８のＳ２１で行われる第１及び第２のホストメモリ保護テーブルの削除処理の一例を示すフローチャート。
【図１９】第２の実施形態を示し、仮想計算機システムのソフトウェアとハードウェアの要部を示すブロック図。
【図２０】同じく、第２の実施形態を示し、ゲスト側の稼働時とＶＭＭの稼働時のメモリ領域とホストメモリ保護テーブルの切り替えの様子を示す説明図。
【符号の説明】
【０１７５】
１０  ＶＭＭ
２０−０〜ｎ  ゲストＯＳ
２１−０〜ｎ  ゲストメモリ保護テーブル
３０  ゲストアプリケーション
１１０  二重テーブル管理部
１１１  第１のホストメモリ保護テーブル＃０
１１２  第２のホストメモリ保護テーブル＃１
１２０  ＶＭ実行管理部
１３０  ホストページテーブルセット
２０１−０〜３  ＣＰＵ
２３０  ＭＭＵ
２３１  テーブルポインタレジスタ
２３３  ゲストページテーブルセット
ＶＭ０〜ＶＭｎ  仮想計算機
【図１】
2007004661.tif 000003
【図２】
2007004661.tif 000004
【図３】
2007004661.tif 000005
【図４】
2007004661.tif 000006
【図５】
2007004661.tif 000007
【図６】
2007004661.tif 000008
【図７】
2007004661.tif 000009
【図８】
2007004661.tif 000010
【図９】
2007004661.tif 000011
【図１０】
2007004661.tif 000012
【図１１】
2007004661.tif 000013
【図１２】
2007004661.tif 000014
【図１３】
2007004661.tif 000015
【図１４】
2007004661.tif 000016
【図１５】
2007004661.tif 000017
【図１６】
2007004661.tif 000018
【図１７】
2007004661.tif 000019
【図１８】
2007004661.tif 000020
【図１９】
2007004661.tif 000021
【図２０】
2007004661.tif 000022