(57)【要約】【課題】仮想計算機上でメモリ使用量の多いプログラムを稼動させる場合のページ例外処理に伴うオーバヘッドの抑制と、仮想計算機上で他のＯＳを稼動させる機能を有する第１のＯＳを稼動させる場合のページ例外処理に伴うオーバヘッドの抑制を両立すること。【解決手段】ＶＭＭ２０が、読み書きのエミュレーションを要する特権メモリに対してＲＳＶビットを用いて読み書きを禁止したシャドウＰＴ１４０を生成し、２つのＰＴを用いるページ例外検出機能を備えたｘ８６互換ＣＰＵに、当該シャドウＰＴ１４０と、第１のＯＳ３０上で稼動する第２のＯＳ４０が有する第２のＰＴ１７０を登録する。ページ例外が発生した場合にＶＭＭ２０は、ページ例外の原因コードを参照し、原因コードのＰフィールドが０の場合には直ちにエミュレーション不要と判断する。【選択図】図４
2008305106.tif 000002
【特許請求の範囲】
【請求項１】
ＣＰＵとメモリを有する計算機を用いて複数のＯＳを稼動させる仮想計算機の制御プログラムであって、
前記ＣＰＵは、データ構造に基づいて制御されるメモリ保護機能を有し、
前記データ構造には、メモリ領域毎にメモリ操作の可否を制御する第１のフィールドと第２のフィールドが備わり、
前記メモリ保護機能は、前記第１または前記第２のフィールドが操作禁止設定である場合に、当該メモリ領域の操作に対して保護例外を発生し、当該保護例外の発生理由となったフィールドを示す原因コードを生成し、
前記ＯＳは、前記メモリ上に前記データ構造からなる第１のデータ構造を管理し、
前記第１のデータ構造の前記第１のフィールドによって操作禁止とされるメモリ領域は、前記第１のデータ構造の前記第２のフィールドによって操作禁止とされるメモリ領域よりも広く、
前記制御プログラムは、
前記第１のデータ構造を参照する手順と、
前記データ構造からなり、読み書きのエミュレーションを要するメモリ領域のメモリ操作が前記第２のフィールドよって禁止された第２のデータ構造を生成する手順と、
前記メモリ保護機能に前記第２のデータ構造を参照させる手順と、
前記保護例外の発生時に前記原因コードを参照して、エミュレーションの要否を判断する手順と、を前記計算機に実行させることを特徴とする仮想計算機の制御プログラム。
【請求項２】
請求項１記載の仮想計算機の制御プログラムにおいて、
前記制御プログラムは、ＩＯ装置の制御に用いるメモリ領域に対して、前記第２のデータ構造に於ける前記第２のフィールドを操作禁止設定にする手順を前記計算機に実行させることを特徴とする仮想計算機の制御プログラム。
【請求項３】
請求項１記載の仮想計算機の制御プログラムにおいて、
前記制御プログラムは、前記第２のデータ構造を初期化する際に、前記第２のデータ構造に於ける前記第２のフィールドを操作禁止設定にする手順を前記計算機に実行させることを特徴とする仮想計算機の制御プログラム。
【請求項４】
請求項１記載の仮想計算機の制御プログラムにおいて、
前記制御プログラムは、前記保護例外の発生時に、前記原因コードが示す当該保護例外発生の理由が前記第１のフィールドである場合に、エミュレーションが不要と判断する手順を前記計算機に実行させることを特徴とする仮想計算機の制御プログラム。
【請求項５】
請求項１記載の仮想計算機の制御プログラムにおいて、
前記制御プログラムは、
前記第２のデータ構造の初期化時に、前記第１のデータ構造中の前記第２のフィールドの利用状況を示す利用フラグをリセットする手順と、
前記第１のデータ構造中の前記第２のフィールドの設定を読み、操作禁止が設定されている場合に前記利用フラグをセットする手順と、
前記保護例外の発生時に、前記原因コードを読む手順と、
前記原因コードが前記第２のフィールドを示し、かつ前記利用フラグがリセットされている場合に、エミュレーションが要と判断する手順と、を前記計算機に実行させることを特徴とする仮想計算機の制御プログラム。
【請求項６】
請求項１記載の仮想計算機の制御プログラムにおいて、
前記ＣＰＵは、ＶＴ−ｘに対応したｘ８６互換ＣＰＵであり、
前記データ構造は、ページテーブルであり、
前記第１のフィールドはＰｒｅｓｅｎｔビットであり、
前記第２のフィールドはＲｅｓｅｒｖｅｄビットであり、
前記原因コードは、ページフォルトのエラーコードであり、
前記ＯＳは、ＯＳのイベントハンドラを有し、
前記制御プログラムは、前記ＣＰＵが有するpage-fault error-code maskとpage-fault error-code matchとexception bitmapを、Ｐｒｅｓｅｎｔビットが０であるメモリ領域の操作に起因するページフォルトの発生時に前記ＯＳのイベントハンドラに直接分岐する設定にする手順を前記計算機に実行させることを特徴とする仮想計算機の制御プログラム。
【請求項７】
請求項１記載の仮想計算機の制御プログラムにおいて、
前記ＯＳは、当該ＯＳ上で複数の第２のＯＳを稼動させる機能を有する第１のＯＳであり、
前記第２のＯＳは、前記データ構造からなる第３のデータ構造と、第２のイベントハンドラとを有し、
前記ＣＰＵは、ｘ８６互換ＣＰＵであり、
前記データ構造は、ページテーブルであり、
前記第１のフィールドはＰｒｅｓｅｎｔビットであり、
前記第２のフィールドはＲｅｓｅｒｖｅｄビットであり、
前記原因コードは、ページフォルトのエラーコードであり、
前記ＣＰＵは、前記第２のイベントハンドラを呼び出すページフォルトの条件を規定する第４のページテーブルと、前記仮想計算機の制御プログラムが有するイベントハンドラに報告するページフォルトの条件を規定する第５のページテーブルを用いるＣＰＵであって、
前記制御プログラムは、
前記第３のデータ構造を、前記第４のページテーブルとして、前記ＣＰＵに参照させる手順と、
前記第２のデータ構造を、前記第５のページテーブルとして、前記ＣＰＵに参照させる手順と、を前記計算機に実行させることを特徴とする仮想計算機の制御プログラム。
【請求項８】
請求項１記載の仮想計算機の制御プログラムにおいて、
前記第１のフィールドは、対応するメモリ領域の記憶データが前記メモリ上に存在するか否かを示すことを特徴とする仮想計算機の制御プログラム。
【請求項９】
ＣＰＵとメモリを有し、複数のＯＳおよび前記複数のＯＳを稼動する制御プログラムが実装された仮想計算機システムであって、
前記ＣＰＵは、データ構造に基づいて制御されるメモリ保護機能を有し、
前記データ構造は、メモリ領域毎に、メモリ操作の可否を制御する第１のフィールドと第２のフィールドを含み、
前記メモリ保護機能は、前記第１または前記第２のフィールドが操作禁止設定である場合に、当該メモリ領域の操作に対して保護例外を発生し、当該保護例外の発生理由となったフィールドを示す原因コードを生成し、
前記ＯＳは、前記メモリ上に前記データ構造からなる第１のデータ構造を管理し、
前記第１のデータ構造は、前記第１のフィールドによって操作禁止とされるメモリ領域が、前記第２のフィールドによって操作禁止とされるメモリ領域よりも広く、
前記制御プログラムは、
前記第１のデータ構造を参照する機能と、
前記データ構造からなり、前記第２のフィールドを用いて読み書きのエミュレーションを要するメモリ領域のメモリ操作が禁止された第２のデータ構造を生成する機能と、
前記メモリ保護機能に前記第２のデータ構造を参照させる機能と、
前記保護例外の発生時に前記原因コードを参照して、エミュレーションの要否を判断する機能とを有することを特徴とする仮想計算機システム。
【請求項１０】
請求項９記載の仮想計算機システムにおいて、
前記制御プログラムは、ＩＯ装置の制御に用いるメモリ領域に対して、前記第２のデータ構造に於ける前記第２のフィールドを操作禁止設定にする機能を有することを特徴とする仮想計算機システム。
【請求項１１】
請求項９記載の仮想計算機システムにおいて、
前記制御プログラムは、前記第２のデータ構造を初期化する際に、前記第２のデータ構造に於ける前記第２のフィールドを操作禁止設定にする機能を有することを特徴とする仮想計算機システム。
【請求項１２】
請求項９記載の仮想計算機システムにおいて、
前記制御プログラムは、前記保護例外の発生時に、前記原因コードが示す当該保護例外発生の理由が前記第１のフィールドである場合に、エミュレーションが不要と判断する機能を有することを特徴とする仮想計算機システム。
【請求項１３】
請求項９記載の仮想計算機システムにおいて、
前記制御プログラムは、
前記第２のデータ構造の初期化時に、前記第１のデータ構造中の前記第２のフィールドの利用状況を示す利用フラグをリセットする機能と、
前記第１のデータ構造中の前記第２のフィールドの設定を読み、操作禁止が設定されている場合に前記利用フラグをセットする機能と、
前記保護例外の発生時に、前記原因コードを読む機能と、
前記原因コードが前記第２のフィールドを示し、かつ前記利用フラグがリセットされている場合に、エミュレーションが要と判断する機能とを有することを特徴とする仮想計算機システム。
【請求項１４】
請求項９記載の仮想計算機システムにおいて、
前記ＣＰＵは、ＶＴ−ｘに対応したｘ８６互換ＣＰＵであり、
前記データ構造は、ページテーブルであり、
前記第１のフィールドはＰｒｅｓｅｎｔビットであり、
前記第２のフィールドはＲｅｓｅｒｖｅｄビットであり、
前記原因コードは、ページフォルトのエラーコードであり、
前記ＯＳは、ＯＳのイベントハンドラを有し、
前記制御プログラムは、前記ＣＰＵが有するpage-fault error-code maskとpage-fault error-code matchとexception bitmapを、Ｐｒｅｓｅｎｔビットが０であるメモリ領域の操作に起因するページフォルトの発生時に前記ＯＳのイベントハンドラに直接分岐する設定にする機能を有することを特徴とする仮想計算機システム。
【請求項１５】
請求項９記載の仮想計算機システムにおいて、
前記ＯＳは、当該ＯＳ上で複数の第２のＯＳを稼動させる機能を有する第１のＯＳであり、
前記第２のＯＳは、前記データ構造からなる第３のデータ構造と、第２のイベントハンドラとを有し、
前記ＣＰＵは、ｘ８６互換ＣＰＵであり、
前記データ構造は、ページテーブルであり、
前記第１のフィールドはＰｒｅｓｅｎｔビットであり、
前記第２のフィールドはＲｅｓｅｒｖｅｄビットであり、
前記原因コードは、ページフォルトのエラーコードであり、
前記ＣＰＵは、前記第２のイベントハンドラを呼び出すページフォルトの条件を規定する第４のページテーブルと、前記仮想計算機の制御プログラムが有するイベントハンドラに報告するページフォルトの条件を規定する第５のページテーブルを用いるＣＰＵであって、
前記制御プログラムは、
前記第３のデータ構造を、前記第４のページテーブルとして、前記ＣＰＵに参照させる機能と、
前記第２のデータ構造を、前記第５のページテーブルとして、前記ＣＰＵに参照させる機能とを有することを特徴とする仮想計算機システム。
【請求項１６】
請求項９記載の仮想計算機システムにおいて、
前記第１のフィールドは、対応するメモリ領域の記憶データが前記メモリ上に存在するか否かを示すことを特徴とする仮想計算機システム。
【請求項１７】
ＣＰＵおよびメモリを含むコンピュータシステムを用いたプログラム処理によって実現され、複数のＯＳと、前記複数のＯＳを駆動する制御プログラムとが実装された仮想計算機システムであって、
前記複数のＯＳのそれぞれは、
第１のイベントハンドラと、
前記メモリを複数のメモリ領域に分割して、各メモリ領域毎のメモリアドレスやアクセス可否を管理する第１のデータ構造とを備え、
前記制御プログラムは、
第２のイベントハンドラと、
前記複数のＯＳのそれぞれが発生した命令に対応してエミュレーションを実行する第１機能と、
前記第１のデータ構造を反映して第２のデータ構造を生成する第２機能とを備え、
前記第１および前記第２のデータ構造のそれぞれには、前記各メモリ領域毎のアクセス可否を定める第１のフィールドと第２のフィールドが備わり、
前記ＣＰＵは、前記第２のデータ構造の前記第１のフィールドがアクセス禁止に設定されている場合に前記第１のイベントハンドラへ通知を行い、前記第２のデータ構造の前記第２のフィールドがアクセス禁止に設定されている場合に前記第２のイベントハンドラへ通知を行い、
前記制御プログラムは、前記第２のイベントハンドラへ通知が行われた際に前記エミュレーションを実行することを特徴とする仮想計算機システム。
【請求項１８】
請求項１７記載の仮想計算機システムにおいて、
前記第２機能は、ＩＯ装置の制御に用いるメモリ領域に対して、前記第２のデータ構造の前記第２のフィールドをアクセス禁止に設定にすることを特徴とする仮想計算機システム。
【請求項１９】
請求項１７記載の仮想計算機システムにおいて、
前記第２機能は、初期状態として前記第２のデータ構造の前記第２のフィールドをアクセス禁止に設定し、その後、前記複数のＯＳが前記第１のデータ構造に基づいて前記メモリに対するアクセス命令を発生した際に、このアクセス命令を前記第２のイベントハンドラを介して検出し、このアクセス命令に対応する前記第２のデータ構造を生成することを特徴とする仮想計算機システム。
【請求項２０】
請求項１７記載の仮想計算機システムにおいて、
前記制御プログラムは、更に、前記第１のデータ構造の前記第２のフィールドの利用有無を管理する第３機能を備え、前記ＣＰＵより前記第２のイベントハンドラへ通知があった際に、前記第１のデータ構造の前記第２のフィールドの利用が無い場合に前記エミュレーションを実行することを特徴とする仮想計算機システム。
【発明の詳細な説明】
【技術分野】
【０００１】
本発明は仮想計算機の制御プログラムおよび仮想計算機システムに関し、特に、ゲストによるメモリ操作に対してエミュレーション要否判定を行う制御プログラムおよびこの制御プログラムによって動作する仮想計算機システムに適用して有益な技術に関する。
【背景技術】
【０００２】
近年、サーバ台数の増加と共に運用に関する複雑さが増加しており、運用コストが問題化し、運用コストを低減する技術として複数サーバを１台にまとめるサーバ統合が注目を集めている。サーバ統合を実現する技術として、一つのコンピュータを任意の割合で論理的に分割する仮想計算機技術が知られている。仮想計算機技術では、例えば、ハイパバイザなどのファームウェア（またはミドルウェア）が、物理計算機を複数の論理区画（ＬＰＡＲ：Logical PARtition）に分割し、各ＬＰＡＲに対して計算機資源（ＣＰＵ、主記憶、Ｉ／Ｏ）を割り当て、各ＬＰＡＲ上でそれぞれＯＳを動作させる。あるいは、一つのサーバ上で一つのホストＯＳ（物理計算機を直接使用するＯＳ）を実行し、このホストＯＳ上で稼動するハイパバイザが同様の分割処理を行って、複数のゲストＯＳ（ホストＯＳ上で稼動するＯＳ）を稼動させる。
【０００３】
このように、仮想計算機技術は、従来複数のサーバで稼動していたＯＳ及びＯＳ上で稼動するソフトウェアを、１台のサーバで稼動させることを可能にしており、サーバ統合を実現している。仮想計算機技術は、従来では汎用機（MainFrame）等の大型計算機で用いられてきた技術であるが、近年ではマイクロプロセッサの性能向上に伴いローエンドサーバおよびパーソナルコンピュータでも普及しつつある。なお、仮想計算機技術に関しては、一般的に以下のような技術が知られている。
【０００４】
例えば、特許文献１には、ｘ８６互換のＣＰＵを用いて、メモリ特権命令をエミュレーションするソフトウェア技術が記載されている。この技術では、仮想計算機モニタ（Virtual Machine Monitor、以下ＶＭＭとする）上にシャドウページテーブル（アクティブ・トランスレーション・データ・ストラクチャ）が設けられ、エミュレーションの要否判定を行うために、このシャドウページテーブルのＰビットが‘０’に設定される。
【０００５】
特許文献２には、一般にＶＴ−ｘ（Virtualization Technology for x86）と呼ばれている仮想化技術におけるハードウェア機能（Page Fault Error Code Mask/Match）が示されている。近年、ｘ８６互換のＣＰＵにはＶＭＭを支援する機能が追加される傾向にある。このPage Fault Error Code Mask/Match機能を用いることで、ページ例外に対するエミュレーション要否判定を効率化できる。
【０００６】
特許文献３には、ｘ８６互換ＣＰＵを用いて、仮想化ソフトを実現するソフトウェア技術が記載されている。具体的には、レジスタ特権命令／メモリ特権命令のエミュレーション方法が示されている。
【０００７】
非特許文献１には、インテル社のＣＰＵの基本アーキテクチャが記載されており、非特許文献２には、ＡＭＤ社のＣＰＵの基本アーキテクチャが記載されている。
【特許文献１】米国特許第６，９０７，６００号明細書
【特許文献２】米国特許第６，９９６，７４８号明細書
【特許文献３】米国特許第６，３９７，２４２号明細書
【非特許文献１】Intel(R) 64 and IA-32 Architectures Software Developer’s Manual
【非特許文献２】AMD64 Architecture Programmer’s Manual
【発明の開示】
【発明が解決しようとする課題】
【０００８】
前述したような仮想計算機技術を採用したサーバ等の計算機は、ゲスト（ゲストＯＳ及び、ゲストＯＳ上で稼動するソフトウェアの総称）を稼動させる複数の仮想計算機（ＶＭ：Virtual Machine）と、仮想計算機の制御を行う仮想計算機モニタＶＭＭとを有する。ＶＭＭ上で稼動するＯＳの一部は、Xen対応LinuxやWindows（登録商標） Hypervisorのように、当該ＯＳ上で別のＯＳを稼動させる機能を有する。以下では、別のＯＳを稼動させる機能を備えたＯＳを第１のＯＳと呼ぶ。一方で、別のＯＳを稼動させる機能を備えないＯＳを第２のＯＳと呼ぶ。
【０００９】
一般に、ゲストは計算機のハードウェアを占有する前提で作られている。従って、仮想計算機技術によってサーバ統合を実現する上では、各仮想計算機に、各ゲストが計算機を占有する場合と同じ動作をさせる必要がある。本要件を満たすためにＶＭＭは、ゲストに含まれる特権命令（ハードウェアを操作する命令）のエミュレーションを行う。本エミュレーションは、性能低下(オーバヘッド)を招くため、エミュレーションには高速性が求められる。
【００１０】
ハードウェアの操作は、ＩＯ装置の制御に用られる特権メモリに対する操作と、ＣＰＵ内の特権レジスタに対する操作に大別される。従って、特権命令は、特権メモリの操作を伴うメモリ特権命令と、特権メモリの操作を伴わないレジスタ特権命令に分類できる。レジスタ特権命令は、インテル社製のｘ８６互換ＣＰＵに搭載されたＶＴ−ｘ機能やＡＭＤ社製のｘ８６互換ＣＰＵに搭載されたＡＭＤ−Ｖ(AMD Virtualization)機能といった、ＶＭＭ支援機能を用いれば高速にエミュレーション可能である。一方で、メモリ特権命令に関しては、エミュレーションの方法次第でオーバヘッドが大きく変化するため、メモリ特権命令のエミュレーション方法が重要になる。
【００１１】
ｘ８６互換ＣＰＵを搭載する計算機を用いて第２のＯＳを複数稼動させる場合で、メモリ特権命令のエミュレーションを行うために必要と考えられる仮想計算機システムの構成例を図１および図２に示す。図１において、エミュレーションには、物理計算機１０に搭載されたＣＰＵ６０が提供するページ例外検出機能７１を利用する。ＶＭＭ２０は、エミュレーションに伴うオーバヘッドを抑制するために、エミュレーションの要否判定を行い、必要と判定した場合のみエミュレーションを行う。
【００１２】
ページ例外検出機能７１には、メモリ領域毎のアクセス可否情報を保持するＴＬＢ７３と、メモリ領域毎のアクセス可否情報を保持するページテーブル(ＰＴ)のメモリアドレスを保持するＰＴアドレスレジスタ７２が含まれる。アクセス可否情報には、読み書きの一切を禁止するＰｒｅｓｅｎｔビット(Ｐビット)、書き込みを禁止するＲｅａｄ／Ｗｒｉｔｅビット(Ｒ／Ｗビット)と、読み書きの一切を禁止するＲｅｓｅｒｖｅｄビット（ＲＳＶビット）が含まれる。アクセス可否情報に違反するメモリ操作を検出した場合、ページ例外検出機能７１はページ例外を発生させて、プログラムの実行をイベントハンドラ８０に遷移させる。またイベントハンドラ８０に、アクセス可否情報のどのビットに違反したかを示す原因コードを渡す。
【００１３】
ＶＭＭ２０は仮想計算機２５を構築し、ＶＭＭ２０上で稼動する第２のＯＳ４０は、第２のＰＴ１７０と第２のイベントハンドラ１７２を有し、第２のＰＴ１７０にメモリ領域毎のアクセス可否情報を設定する。また第２のＯＳ４０上ではアプリケーション（ＡＰ）５０が動作する。
【００１４】
ＶＭＭ２０は、第２のＰＴ１７０を参照し、特権メモリに対してＰビットやＲ／Ｗビットを用いてアクセス禁止を追加したシャドウＰＴ１４０を生成し、ＰＴアドレスレジスタ７２に登録する。ページ例外検出機能７１は、シャドウＰＴ１４０の設定をＴＬＢ７３にコピーし、シャドウＰＴ１４０の設定に従ってページ例外を判定する。
【００１５】
ページ例外を契機に、イベントハンドラ８０が呼び出されると、ＶＭＭ２０は当該ページ例外が特権メモリの操作に起因するのか、第２のＰＴ１７０でアクセス不可に指定されたメモリの操作（ゲスト例外）に起因するのかを判定するために、ページ例外の原因コード解析部９０や第２のＰＴ解析部１１５を呼び出す。ページ例外の原因コード解析部９０では、ページ例外検出機能７１から渡された原因コードを参照する。原因コードに於いてＰビット及びＲ／Ｗビットのいずれにも違反がない場合は、ＶＭＭ２０は、当該ページ例外はゲスト例外に起因すると判断し、イベント報告部１２０を呼び出す。イベント報告部１２０は、ゲストに渡す原因コードを生成して、第２のイベントハンドラ１７２に分岐する。
【００１６】
原因コードに於いてＰビットまたはＲ／Ｗビットのいずれかに違反がある場合のみ、ＶＭＭ２０は、第２のＰＴ解析部１１５を呼び出す。第２のＰＴ解析部１１５は、第２のＰＴ１７０を参照して、原因コードに示されたビットに関して、第２のＰＴ１７０でアクセス禁止設定がなされているかを解析する。ＶＭＭ２０は、第２のＰＴ１７０に於いてアクセス禁止設定がなされている場合に、当該ページ例外がゲスト例外に起因すると判断し、イベント報告部１２０を呼び出す。ＶＭＭ２０は、第２のＰＴ１７０に於いてアクセス禁止設定がなされていない場合に、当該ページ例外が特権メモリ操作に起因すると判断し、エミュレータ１３０を呼び出してエミュレーションを行う。エミュレータ１３０は必要に応じてシャドウＰＴ１４０を変更する。
【００１７】
近年、ｘ８６互換のＣＰＵにはＶＭＭを支援する機能が追加される傾向にある。ページ例外に対するエミュレーション要否の判定に関しては、特許文献２に示されるようなPage Fault Error Code Mask/Match機能と、Nested Paging機能が追加されている。Page Fault Error Code Mask/Match機能は、ページ例外の原因コードに応じて、ページ例外発生時に分岐するイベントハンドラを選択する機能である。本機能を用いると、エミュレーションが必要な可能性のあるＰビット違反又はＲ／Ｗビット違反のページ例外の場合だけイベントハンドラ８０に分岐させ、エミュレーションが不要なそれ以外のページ例外の場合には第２のイベントハンドラ１７２に分岐させることで高速化が可能となる。
【００１８】
Nested Paging機能は、ページ例外の検出に２つのページテーブル（ＰＴ）を使用し、ページ例外の原因となったページテーブルに応じて、ページ例外発生時に分岐するイベントハンドラを選択する機能である。本機能を用いると、エミュレーションが必要な可能性のあるシャドウＰＴの設定に違反した場合だけイベントハンドラ８０に分岐させ、エミュレーションが不要な第２のＰＴの設定に違反した場合だけ第２のイベントハンドラ１７２に分岐させることで高速化が可能となる。
【００１９】
Nested Paging機能のように、２つのＰＴを用いるページ例外検出機能を備えたｘ８６互換ＣＰＵを用いると、第１のＯＳと第２のＯＳを混在させて複数稼動させる構成が可能となる。以下では図２を用いて、本構成を説明する。
【００２０】
物理計算機１０に搭載されるＣＰＵ６０は、２つのＰＴを用いるページ例外検出機能７０を備える。２つのＰＴを用いるページ例外検出機能７０には、メモリ領域毎のアクセス可否情報を保持するＴＬＢ７３と、第２のＰＴ１７０のメモリアドレスを保持するＰＴアドレスレジスタＡ７４と、シャドウＰＴ１４０のメモリアドレスを保持するＰＴアドレスレジスタＢ７５が含まれる。ＶＭＭ２０は仮想計算機２５を構築し、ＶＭＭ２０上で稼動する第１のＯＳ３０は、第１のＰＴ１６０と第１のイベントハンドラ１６２を有し、第１のＰＴ１６０にメモリ領域毎のアクセス可否情報を設定する。また第１のＯＳ３０上では第２のＯＳ４０が動作する。ＶＭＭ２０上または第１のＯＳ３０上で稼動する第２のＯＳ４０は、第２のＰＴ１７０と第２のイベントハンドラ１７２を有し、第２のＰＴ１７０にメモリ領域毎のアクセス可否情報を設定する。また第２のＯＳ４０上ではアプリケーション（ＡＰ）５０が動作する。
【００２１】
ＶＭＭ２０は、第１のＰＴ１６０を参照し、ハードウェア操作に使用するメモリアドレス（特権メモリ）に対してＰビットやＲ／Ｗビットを用いてアクセス禁止を追加したシャドウＰＴ１４０を生成し、ＰＴアドレスジスタＢ７５に登録する。また、第２のＰＴのアドレスをＰＴアドレスレジスタＡ７４に登録する。２つのＰＴを用いるページ例外検出機能７０は、第２のＰＴ１７０の設定とシャドウＰＴ１４０の設定をＴＬＢ７３にコピーし、ページ例外を判定する。
【００２２】
シャドウＰＴ１４０の設定に違反するページ例外を契機に、イベントハンドラ８０が呼び出されると、ＶＭＭは当該ページ例外が特権メモリの操作に起因するのか、第１のＰＴ１６０でアクセス不可に指定されたメモリの操作（ゲスト例外）に起因するのかを判定するために、ページ例外の原因コード解析部９０や第１のＰＴ解析部１１０を呼び出す。ページ例外の原因コード解析部９０では、２つのＰＴを用いるページ例外検出機能７０から渡された原因コードを参照する。原因コードに於いてＰビット及びＲ／Ｗビットのいずれにも違反がない場合は、ＶＭＭ２０は、当該ページ例外はゲスト例外に起因すると判断し、イベント報告部１２０を呼び出す。イベント報告部１２０は、ゲストに渡す原因コードを生成して、第１のイベントハンドラ１６２に分岐する。
【００２３】
原因コードに於いてＰビットまたはＲ／Ｗビットのいずれかに違反がある場合のみ、ＶＭＭ２０は、第１のＰＴ解析部１１０を呼び出す。第１のＰＴ解析部１１０は、第１のＰＴ１６０を参照して、原因コードに示されたビットに関して、第１のＰＴ１６０でアクセス禁止設定がなされているかを解析する。ＶＭＭ２０は、第１のＰＴ１６０に於いてアクセス禁止設定がなされている場合に、当該ページ例外がゲスト例外に起因すると判断し、イベント報告部１２０を呼び出す。ＶＭＭ２０は、第１のＰＴ１６０に於いてアクセス禁止設定がなされていない場合に、当該ページ例外が特権メモリ操作に起因すると判断し、エミュレータ１３０を呼び出してエミュレーションを行う。エミュレータ１３０は必要に応じてシャドウＰＴ１４０を変更する。
【００２４】
以上に述べたようなエミュレーション動作は、ＶＭＭにとって本質的に必要な処理である。従って、エミュレーションに起因する性能低下（オーバヘッド）は止むを得ない。一方で、エミュレーション要否の判定は、本質的には不要な処理である。従って、オーバヘッドを抑制するためには、エミュレーションの要否判定を高速化する必要がある。仮想計算機システムに於いては以下の理由で、Ｐビットによるページ例外が、エミュレーション要否判定の処理がオーバヘッドを招く。
【００２５】
一般にＯＳは、仮想記憶を実現するために、ページテーブル（ＰＴ）のＰビットを用いる。特に新しいプロセスの開始時には、広範なメモリ領域に対してＰビットをリセットし、読み書きの一切を禁止する。以降は、当該プロセスが新しいメモリ領域を操作する毎に、ページ例外が起きる。ＯＳは当該ページ例外を契機に、当該プロセス用のメモリを確保して割り当てる。
【００２６】
１つのＰＴだけを用いるページ例外検出機能を有するＣＰＵを用いて、ＶＭＭ上で第２のＯＳを稼動させる場合には、第２のＯＳがメモリ使用量の多いプロセスを実行する場合などに、ゲスト例外に起因するページ例外が多発する。本ページ例外に対して、ＶＭＭがエミュレーションの要否を判定する際には、本質的には不要なページ例外の原因コード解析部９０と第２のＰＴ解析部１１５の実行に伴って、大きなオーバヘッドが生じる問題がある。
【００２７】
また、２つのＰＴを用いるページ例外検出機能を有するＣＰＵを用いる場合は、ＶＭＭ上で第１のＯＳを稼動させると、ＶＭＭがエミュレーションの要否を判定する際に、ページ例外の原因コード解析部９０と第１のＰＴ解析部１１０の実行を省略できないため、オーバヘッドが大きくなる問題がある。
【００２８】
上記問題点を鑑みて、本発明の目的の一つは、エミュレーションに伴うオーバヘッドを抑制可能な仮想計算機システムおよびその制御プログラムを提供することにある。また、特に、メモリ使用量の多いプログラムを稼動させる場合のオーバヘッド抑制と、ＶＭＭ上で第１のＯＳを稼動させる場合のオーバヘッド抑制の、両立を課題とする。本発明の前記ならびにその他の目的と新規な特徴は、本明細書の記述および添付図面から明らかになるであろう。
【課題を解決するための手段】
【００２９】
本願において開示される発明のうち、代表的なものの概要を簡単に説明すれば、次のとおりである。
【００３０】
２つのＰＴを用いるページ例外検出機能を備えたｘ８６互換ＣＰＵを１つ以上有し、かつメモリを有する仮想計算機システムに実装され、第１のＯＳ及び第２のＯＳを複数稼動させる機能を備えた制御プログラムに対して、（ａ）一般に第１のＯＳ及び第２のＯＳのページテーブルで使用されない（常時‘０’が設定される）ＲＳＶビットを活用することでＩＯ装置の制御に用いるメモリ領域の操作を禁止したシャドウＰＴを生成する手順と、（ｂ）第２のＯＳのＰＴとシャドウＰＴをそれぞれＰＴアドレスレジスタＡとＰＴアドレスレジスタＢに登録する手順と、（ｃ）ページ例外の発生時に原因コードを参照してエミュレーションの要否を判定する手順を実行させる。
【００３１】
また、シャドウＰＴを初期化する際には、シャドウＰＴの各エントリのＲＳＶビットを非０に設定し、第１のＰＴでのＲＳＶ利用状況を示す利用フラグをリセットする。
【００３２】
ページ例外の発生時に、原因コードがＰビット違反の発生を示す場合には、エミュレーションが不要と判断する。ページ例外の発生時に、原因コードがＲＳＶビット違反の発生を示し、かつ利用フラグがリセットされている場合にはエミュレーション要と判断する。ページ例外の発生時に、上記のいずれの条件も満たさない場合は第１のＯＳが管理する第１のＰＴを解析して、第１のＰＴの設定に違反するメモリ操作が行われたか否かを判定し、エミュレーションの要否を判断する。なお、エミュレーションの過程で、第１のＰＴの設定を参照してシャドウＰＴを設定する際に、第１のＰＴでＲＳＶビットが非０の場合には、利用フラグをセットする。
【発明の効果】
【００３３】
本願において開示される発明のうち、代表的なものによって得られる効果を簡単に説明すれば、第１のＰＴに関するＰビット違反のページ例外が生じた場合に、エミュレーション要否の判定のために第１のＰＴを解析する必要が無くなるため、オーバヘッドが抑制可能となる。
【発明を実施するための最良の形態】
【００３４】
以下の実施の形態において、要素の数等（個数、数値、量、範囲等を含む）に言及する場合、特に明示した場合および原理的に明らかに特定の数に限定される場合等を除き、その特定の数に限定されるものではなく、特定の数以上でも以下でも良い。
【００３５】
さらに、以下の実施の形態において、その構成要素（要素ステップ等も含む）は、特に明示した場合および原理的に明らかに必須であると考えられる場合等を除き、必ずしも必須のものではないことは言うまでもない。同様に、以下の実施の形態において、構成要素等の形状、位置関係等に言及するときは、特に明示した場合および原理的に明らかにそうでないと考えられる場合等を除き、実質的にその形状等に近似または類似するもの等を含むものとする。このことは、上記数値および範囲についても同様である。
【００３６】
以下、本発明の実施の形態を図面に基づいて詳細に説明する。なお、実施の形態を説明するための全図において、同一の部材には原則として同一の符号を付し、その繰り返しの説明は省略する。
【００３７】
本実施の形態の仮想計算機システムは、仮想計算機モニタ（ＶＭＭ）内のシャドウＰＴ上でリザーブビット（ＲＳＶ）ビットを活用することでエミュレーションの要否判定を高速化することが主要な特徴の一つとなっている。まず、この特徴の概要について以下に説明を行い、詳細な構成例および動作例等については、それ以降の実施例で説明する。
【００３８】
図３１は、仮想計算機内のＯＳに含まれるページテーブル（ＰＴ）の構成例を示す図である。図３２は、本発明の前提として検討した仮想計算機システムにおいて、それに含まれるシャドウＰＴの構成例を示す図であり、図３３は、本発明の一実施の形態による仮想計算機システムにおいて、それに含まれるシャドウＰＴの構成例を示す図である。例えば、便宜上、図１の構成例を使って説明を行うと、図３１は、仮想計算機２５の第２のＯＳ４０に含まれる第２のＰＴ１７０に該当し、図３２および図３３は、ＶＭＭ２０内のシャドウＰＴ１４０に該当する。
【００３９】
図３１〜図３３のページテーブルは、それぞれ同一のフォーマットとなっており、複数のページエントリ毎に、それぞれ、アクセス対象となるページの先頭アドレス１１１４や、リザーブビット（ＲＳＶ）１１１９や、Ｐビット１１１６等が定義されている。各先頭アドレス１１１４は、メモリに対応するアドレスや、ＩＯ装置に対応するアドレス（ＭＭＩＯアドレス）等となっている。
【００４０】
まず、図３１に示すように、第２のＰＴ１７０では、例えば仮想メモリなどの制御のためＰビット１１１６の値が設定される。例えば、Ｐビット１１１６の値が‘１’の場合は、当該ページが物理メモリ上に存在することを意味し、逆に‘０’の場合は、当該ページが物理メモリ上に存在せず、外部記憶装置などに存在することを意味する。したがって、Ｐビットが‘０’の場合には、ページ例外の処理を行う必要がある。図３１の例では、先頭アドレス１１１４に「０ｘ００００００００」が設定されているページエントリのＰビットが‘０’となっており、第２のＯＳ４０が当該ページにアクセスする際にページ例外の処理が必要となる。
【００４１】
ここで、図３２に示すように、本発明の前提として検討した仮想計算機システムにおけるシャドウＰＴ１４０は、この図３１のページテーブルをコピーし、更に、ＭＭＩＯアドレスに対応するページエントリのＰビット１１１６を‘０’に書き換えたような構成となっている。図１の物理計算機１０のＣＰＵ６０は、この図３２のシャドウＰＴ１４０を参照してページ例外の検出を行う。したがって、第２のＯＳ４０がＭＭＩＯアドレスにアクセスした場合には、ＣＰＵ６０のページ例外検出機能７１がシャドウＰＴ１４０のＰビット（＝‘０’）に基づいてページ例外を検出し、このページ例外の原因コードをＶＭＭ２０に通知することで、ＶＭＭ２０に当該ＩＯアクセスのエミレーションを行わせることが可能となる。
【００４２】
ただし、ページ例外検出機能７１がページ例外を検出する場合は、このＭＭＩＯアドレスへのアクセスに伴いＰビット違反が生じた場合の他に、第２のＰＴに起因してＰビット違反が生じた場合（前述した例では第２のＯＳが先頭アドレス「０ｘ００００００００」のページにアクセスした場合）もある。前者の場合には、エミュレーションを行う必要があり、後者の場合には、第２のＯＳ４０のゲストイベントハンドラ１７２にイベントを通知する必要がある。前者のＰビット違反か後者のＰビット違反かを判別するためには、ＶＭＭ２０が、第２のＰＴ解析部１１５を用いて第２のＰＴ１７０の内容を参照しなければならず、ＶＭＭ２０は、この判別結果を用いることでエミレーションの要否を判定できる。しかしながら、このような判別処理はオーバヘッドが大きく、動作効率の低下を招くことになる。
【００４３】
そこで、本実施の形態の仮想計算機システムでは、図３３に示すようなシャドウＰＴ１４０を用いる。図３３のシャドウＰＴ１４０は、図３１のページテーブルをコピーし、更に、ＭＭＩＯアドレスに対応するページエントリのリザーブビット（ＲＳＶビット）１１１９を非０（＝‘１’）に書き換えたような構成となっている。ＣＰＵ６０のページ例外検出機能７１が、このリザーブビット１１１９が‘１’の場合をＰビット違反の場合とは異なるページ例外として検出する機能を備えていれば、ＭＭＩＯアドレスへのアクセスが生じた場合に、第２のＰＴ１７０を解析することなくエミュレーションを行わせることが可能となる。また、第２のＰＴ１７０に伴うＰビット違反が生じた場合も、第２のＰＴ１７０を解析することなく第２のＯＳ４０のゲストイベントハンドラ１７２へ通知を行うことができる。このようなことから、エミュレーションに伴うオーバヘッドを小さくでき、動作効率の向上が実現可能となる。
【００４４】
なお、これまでの説明では、第２のＰＴ１７０でリザーブビット１１１９が使用されない（即ち‘０’固定）である場合を前提とした。通常、殆どの場合でこのような前提が成り立つものと考えられるが、第２のＯＳ４０の仕様等によっては何らかの目的で第２のＰＴ１７０でリザーブビット１１１９が使用されることも想定し得る。本実施の形態の仮想計算機システムでは、このような場合を想定して、ＶＭＭ２０上に、第２のＰＴ１７０でのリザーブビット１１１９の使用履歴を管理する機能を備えることが望ましい。
【００４５】
すなわち、第２のＰＴ１７０のリザーブビット１１１９が使用されたことが無いのであれば、前述したようにシャドウＰＴ１４０上のリザーブビット１１１９の‘１’を受けて第２のＰＴ１７０を解析することなくエミレーションを行えばよい。一方、リザーブビット１１１９が使用されたことが有るのであれば、第２のＰＴ１７０の内容を解析した上で、第２のＰＴ１７０に起因するリザーブビット違反なのかＭＭＩＯアドレスへのアクセスに起因するリザーブビット違反なのかを区別すればよい。
【００４６】
この際にはオーバヘッドが生じることになるが、仮に第２のＰＴ１７０でリザーブビット１１１９が使用される（即ち‘１’に設定される）としても、その頻度は、仮想メモリ制御に伴いＰビットが使用される頻度（即ち‘０’に設定される頻度）に比べて非常に低いと予想される。言い換えれば、第２のＰＴ１７０のリザーブビット１１１９によってアクセスが禁止されるメモリ領域は、第２のＰＴ１７０のＰビットによってアクセスが禁止されるメモリ領域よりも非常に狭いと予想される。したがって、図３２のようにＰビット違反の原因を切り分ける場合よりはオーバヘッドは小さいと考えられる。
【００４７】
また、本実施の形態の仮想計算機システムでは、シャドウＰＴ１４０を生成する際に、その初期状態のシャドウＰＴ１４０における各ページエントリのリザーブビット１１１９を‘１’に設定することが望ましい。そうすると、第２のＯＳ４０が第２のＰＴ１７０に基づきページアクセスを行った際に、初期状態ではシャドウＰＴ１４０のリザーブビット１１１９が‘１’であるためページ例外が発生する。そこで、ＶＭＭ２０は、このページ例外を受け、対象となっているページアクセスに対応するページエントリ（すなわち第２のＰＴ１７０における対象ページエントリのコピーに該当）をシャドウＰＴ１４０内に生成する。この際に、当該ページアクセスがエミュレーション不要なものであればシャドウＰＴ１４０に生成した当該ページエントリのリザーブビットを‘０’に書き換え、また、Ｐビットの値は、第２のＰＴ１７０と同一の値をコピーすればよい。これによって、第２のＰＴ１７０内の複数のページエントリ中から、第２のＯＳ４０が実際にページアクセスで使用した分のみをシャドウＰＴ１４０にコピーすることができるため、シャドウＰＴ１４０に必要なメモリ容量を低減可能となる。
【００４８】
以下、このような特徴を含む仮想計算機システムおよびその制御プログラムの詳細な構成例および動作例について説明する。また、これまでに説明した以外の特徴に関しても、以下の実施例から明らかになるであろう。
【実施例１】
【００４９】
＜１．ハードウェア構成＞
図３は、本発明の実施例１において、仮想計算機システムのハードウェア構成例を示す概略図である。図３に示す仮想計算機システムは、物理計算機１０と、その他各種周辺装置から構成される。物理計算機１０は、１つ以上のＣＰＵ６０を有し、これらのＣＰＵ６０は、フロントサイドバス４２５を介してノースブリッジ４２０（またはメモリコントローラ）に接続される。
【００５０】
ノースブリッジ４２０には、メモリバス４３５を介して主記憶２１５が接続され、また、バス４４５を介してＩ／Ｏインターフェース４４０が接続される。Ｉ／Ｏインターフェース４４０は、ＬＡＮ４５０に接続されるネットワークアダプタ、ディスク装置４６０等に接続されるＳＣＳＩアダプタ、ＳＡＮ４７０（Storage  Area  Network）に接続されるファイバーチャネルアダプタなどで構成され、各Ｉ／Ｏデバイスに接続される。
【００５１】
ＣＰＵ６０は、ノースブリッジ４２０を介してメモリにアクセスし、ノースブリッジ４２０からＩ／Ｏインターフェース４４０を介してＩ／Ｏデバイスにアクセスして所定の処理を行う。なお、ノースブリッジ４２０は、主記憶２１５を制御するとともに、グラフィックコントローラを含んでコンソール４３０にも接続され、画像の表示を行うことができる。
【００５２】
主記憶２１５には、仮想計算機モニタ（ＶＭＭ）２０がロードされ、このＶＭＭ２０が実現する仮想計算機２５が、第１のＯＳ３０又は第２のＯＳ４０を実行する。第１のＯＳ３０は仮想計算機２５上で、任意の第２のＯＳを実行する。また第２のＯＳは仮想計算機２５上で、任意のアプリケーション（ＡＰ）５０を実行する。
【００５３】
＜２．ソフトウェア構成＞
次に、物理計算機１０上で仮想計算機２５を実現するソフトウェア構成の主要部について、図４を参照しながら詳述する。
【００５４】
物理計算機１０上では、複数の仮想計算機２５を管理するＶＭＭ２０が稼動している。各仮想計算機２５では、第１のＯＳ３０または第２のＯＳ４０が１つ以上稼動する。第１のＯＳ３０の上では、第２のＯＳ４０が１つ以上稼動する。また第２のＯＳ４０の上では、アプリケーション（ＡＰ）５０が１つ以上稼動する。
【００５５】
ＶＭＭ２０は、各第１のＯＳ３０に対してメモリ領域毎のアクセス可否を定めたシャドウＰＴ１４０と、ゲストによるハードウェア操作をエミュレーションするエミュレータ１３０と、第１のＯＳ３０に対してページ例外などのイベントを報告するイベント報告部１２０と、ＣＰＵ６０で生じたイベントを処理するイベントハンドラ８０と、ページ例外の発生時にイベントハンドラ８０に渡される原因コードを参照してイベントの発生原因を解析するページ例外の原因コード解析部９０と、第１のＯＳ３０が保持する第１のＰＴ１６０に於けるＲＳＶビットによるメモリ領域のアクセス禁止設定履歴を保持する第１のＰＴ履歴管理部１００と、ページ例外を生じさせたメモリ操作が第１のＰＴの設定に違反しているか解析する第１のＰＴ解析部１１０を有する。
【００５６】
シャドウＰＴ１４０は、ＩＯ装置の制御に使用するＭＭＩＯ（Memory Mapped I/O）メモリアドレスに対して読み書きの一切を禁止するために、ＲＳＶビットを非０に設定したエントリを有する。またシャドウＰＴ１４０は、第１のＰＴ１６０が存在するメモリアドレスに対して書き込みを禁止するために、Ｒ／Ｗビットを０に設定したエントリを有する。またシャドウＰＴ１４０は、ゲストが未操作のメモリ領域の一部又は全部に対して、読み書き又は書き込みを禁止するためにＲＳＶビットを非０に設定又はＲ／Ｗビットを０に設定したエントリを有する。以上のいずれにも該当しないメモリ領域に対しては、第１のＰＴ１６０で指定されたアクセス可否を継承した設定を保持する。
【００５７】
エミュレータ１３０は、ゲストによるハードウェア操作をエミュレーションする。エミュレータ１３０が第１のＰＴ１６０に対する操作をエミュレーションする場合は、対応するシャドウＰＴ１４０をゲストの設定に合わせて更新する。また、エミュレータ１３０がゲストに対するイベントの発生を検出した場合は、イベント報告部１２０を呼び出す。イベント報告部１２０は、第１のＯＳ３０に対してページ例外などのイベントを報告するために、イベント発生直後のメモリ及びＣＰＵの状態を生成して第１のＯＳ３０が有する第１のイベントハンドラ１６２に分岐する。
【００５８】
イベントハンドラ８０は、ＣＰＵ６０がページ例外などのイベントを検出した場合に呼び出され、イベントの種類に応じてＶＭＭ２０内のコードに分岐する。ページ例外の原因コード解析部９０は、ページ例外の発生時に渡された原因コードから、ページ例外の要因を大別し、大別した要因に基づいて次に実行するコードを決定する。ページ例外がＰビット違反に起因する場合は、イベント報告部１２０を呼び出す。ページ例外がＲＳＶビット違反に起因する場合は、第１のＰＴ履歴管理部１００を呼び出す。ページ例外がＲ／Ｗビット違反に起因する可能性がある場合は、第１のＰＴ解析部１１０を呼び出す。ページ例外が上記のいずれにも該当しない場合は、イベント報告部１２０を呼び出す。
【００５９】
第１のＰＴ履歴管理部１００は、第１のＰＴ１６０の特性を第１のＰＴの特性データ１０１に保持する。第１のＰＴの特性データ１０１は、第１のＰＴ１６０のフォーマットと、第１のＰＴに於いてＲＳＶビットを非０にしてメモリ領域に関する読み書き一切を禁止した経歴の有無を管理する。第１のＰＴ履歴管理部１００は、第１のＰＴでＲＳＶビットが非０になった経歴のない場合にエミュレータ１３０を呼び出し、第１のＰＴでＲＳＶビットが非０になった経歴がある場合に第１のＰＴ解析部１１０を呼び出す。
【００６０】
第１のＰＴ解析部１１０は、第１のＰＴ１６０に於ける設定で、ページ例外の発生時にイベントハンドラ８０に渡された原因コードが生じ得るか否かを解析し、次に実行するコードを決定する。第１のＰＴ１６０に於ける設定で、ページ例外の発生時にイベントハンドラ８０に渡された原因コードが生じ得る場合には、イベント報告部１２０を呼び出し、生じ得ない場合にはエミュレータ１３０を呼び出す。
【００６１】
物理計算機１０は、ｘ８６互換のＣＰＵ６０を有し、ＣＰＵ６０は２つのＰＴを用いるページ例外検出機能７０を有する。２つのＰＴを用いるページ例外検出機能７０は、ＴＬＢ７３とＰＴアドレスレジスタＡ７４とＰＴアドレスレジスタＢ７５を有する。ＴＬＢ７３はメモリ領域に対するアクセスの可否を保持する。ＰＴアドレスレジスタＡ７４は第２のＰＴ１７０の先頭アドレスを保持する。ＰＴアドレスレジスタＢ７５はシャドウＰＴ１４０の先頭アドレスを保持する。ＴＬＢ７３には、第２のＰＴ１７０に於けるアクセス可否の設定と、シャドウＰＴ１４０に於けるアクセス可否の設定がコピーされる。
【００６２】
２つのＰＴを用いるページ例外検出機能７０は、第２のＰＴ１７０で禁止されたメモリ操作を検出した場合は、原因コードと操作対象のメモリアドレスを保存して第２のイベントハンドラ１７２に分岐する。一方、シャドウＰＴ１４０で禁止されたメモリ操作を検出した場合は、原因コードと操作対象のメモリアドレスを保存してイベントハンドラ８０に分岐する。第２のＰＴ１７０及びシャドウＰＴ１４０のいずれも禁止していないメモリ操作に対しては、当該メモリ操作を許可する。
【００６３】
第１のＯＳ３０は、第１のＰＴ１６０と第１のイベントハンドラ１６２を有し、１つ以上の第２のＯＳを稼動させる。第２のＯＳ４０は、第２のＰＴ１７０と第２のイベントハンドラ１７２を有し、１つ以上のＡＰ５０を稼動させる。第２のＯＳは、ＶＭＭ２０の上で直接稼動しても良いし、第１のＯＳ３０の上で稼動しても良い。
【００６４】
図５は、ＶＭＭ２０が管理する物理メモリ空間２１８の一例を示す図である。物理メモリ空間２１８は、主記憶２１５とＭＭＩＯアドレス２１６から構成される。ＶＭＭ２０は、主記憶２１５上に自身を配置するメモリ領域と、仮想計算機２５が使用するメモリ領域を割り当てる。例えば図５のように、ＶＭＭ２０は、自身にアドレスＡＤ０〜ＡＤ１を割り当て、仮想計算機２５−１にアドレスＡＤ１〜ＡＤ２を、仮想計算機２５−ｎにアドレスＡＤ３〜ＡＤ４を割り当てる。
【００６５】
各仮想計算機２５のメモリ領域には、各ゲストＯＳ（第１のＯＳ３０及び第２のＯＳ４０）が生成したゲストＰＴ(第１のＰＴ１６０及び第２のＰＴ１７０)とゲストイベントハンドラ（第１のイベントハンドラ１６２と第２のイベントハンドラ１７２）が含まれる。ＶＭＭ２０が使用するメモリ領域には、イベントハンドラ８０と、ページ例外の原因コード解析部９０と、第１のＰＴ履歴管理部１００と、第１のＰＴの特性データ１０１と、第１のＰＴ解析部１１０と、イベント報告部１２０と、エミュレータ１３０と、シャドウＰＴ１４０が割り当てられる。
【００６６】
シャドウＰＴ１４０、第１のＰＴ１６０、第２のＰＴ１７０の構造は同一であり、ＣＰＵ６０がIntel64として動作する場合には図６に示すように構成される。ＰＴの構造は、ＰＭＬ４(Page Map Level 4)テーブル１００１、ＰＤＰ(Page Directory Pointer)テーブル１００２、ＰＤＥ(Page Directory Entry)テーブル１００３、ＰＴＥ(Page Table Entry)テーブル１００４の４種のテーブルをポインタで接続した形態である。更に、ＰＤＥ１００３又はＰＴＥ１００４は、物理メモリ空間２１８の一部であるページフレーム１００５をポインタで接続する。
【００６７】
ＰＭＬ４テーブル１００１は、仮想アドレス空間と物理アドレス空間で変換を行うページ変換階層内でＰＤＰテーブル１００２の上位に位置し、各ＰＭＬ４エントリ１１０１がＰＤＰテーブル１００２を指す。ＰＤＰテーブル１００２は、ＰＤＥテーブル１００３の上位に位置し、各ＰＤＰエントリ１１０２がＰＤＥテーブル１００３を指す。ＰＤＥテーブル１００３は、各ＰＤＥエントリ１１０３がＰＴＥテーブル１００４を指す。そして、ＰＴＥテーブル１００４は各ＰＴＥエントリ１１０４がページフレーム１００５を指す。尚、ｘ８６互換ＣＰＵの機能であるＰＳＥ(Page Size Extension)を利用する場合は、ＰＤＥテーブル１００３のエントリ（ＰＤＥ）のＰＳビットをセットすると、ＰＤＥエントリ１１０３が直接、ページフレームを指す。
【００６８】
ＣＰＵ６０がIntel64として動作する場合のＰＴに関する、各エントリのフォーマットを図７に示す。ＰＭＬ４エントリ１１０１は５１２Ｇバイトのメモリ領域に対して、禁止するアクセスの種類を規定する。同様にＰＤＰエントリ１１０２は上位のＰＭＬ４エントリで規定されたアクセス可否に対して、メモリ領域１Ｇバイト毎に禁止するアクセスの種類を追加する。ＰＤＥエントリ１１０３は上位のエントリで規定されたアクセス可否に対して、メモリ領域２Ｍバイト毎に禁止するアクセスの種類を追加する。ＰＴＥエントリ１１０４は上位のエントリで規定されたアクセス可否に対して、メモリ領域４Ｋバイト毎に禁止するアクセスの種類を追加する。
【００６９】
各エントリには、下位のテーブルまたはページの先頭を指すアドレスフィールド（１１１１、１１１２、１１１３、１１１４、１１１５）が存在する。各エントリには、エントリの有効／無効を規定するＰビット１１１６、将来の拡張のために予約されたＲＳＶビット１１１９、書き込みの可否を規定するＲ／Ｗビット１１１７が存在する。Ｐビット１１１６を０にすると当該エントリの情報がＴＬＢ７３に読み込まれる際、つまり各エントリに対応するメモリ領域を操作する際にページ例外が発生する。ＲＳＶビット１１１９を非０にすると当該エントリの情報がＴＬＢに読み込まれる際、つまり各エントリに対応するメモリ領域を操作する際にページ例外が発生する。Ｒ／Ｗビット１１１７を０にすると当該エントリに対応するメモリ領域に書き込みを行う際にページ例外が発生する。
【００７０】
ＰＭＬ４エントリ１１０１、ＰＤＰエントリ１１０２、ＰＴＥエントリ１１０４のフォーマットは１種類であり、ＰＤＥエントリ１１０３に関してはＰＳビット１１２１の設定によって２種類のフォーマット（１１０３−１、１１０３−２）が存在する。
【００７１】
各エントリには、アクセスの履歴を示すＡビット１１１８が存在する。Ａビットは、対応するメモリ領域への読み書きが行われた場合に１に変化する。同様に、ＰＴＥエントリ１１０４とＰＳ＝１の場合のＰＤＥエントリ１１０３−２には、書き込みの履歴を示すＤビット１１２０が存在する。Ｄビットは、対応するメモリ領域への書き込みが行われた場合に１に変化する。なお、ＣＰＵ６０が非Intel64（IA-32）として動作する場合のＰＴに関しても、図７とほぼ同様のフォーマットが規定されている。
【００７２】
シャドウＰＴ１４０と第１のＰＴ１６０の設定値は、アドレスフィールド（１１１１、１１１２、１１１３、１１１４、１１１５）とＲＳＶビット１１１９とＲ／Ｗビット１１１７が異なる。ＶＭＭ２０は、仮想計算機２５に割り当てたメモリ空間に合わせて、シャドウＰＴ１４０のアドレスフィールド（１１１１、１１１２、１１１３、１１１４、１１１５）を設定する。またＶＭＭ２０は、シャドウＰＴ１４０と対応付けられた第１のＰＴ１６０に関して、ゲストによる第１のＰＴ１６０のエントリ更新を検出するために、第１のＰＴ１６０のエントリ更新に使用されるシャドウＰＴ１４０のＲ／Ｗビットを０に設定し、ライトプロテクトを行う。ＶＭＭ２０は、ＩＯ装置の制御に使用するＭＭＩＯアドレスに対して読み書きを禁止するために、シャドウＰＴ１４０のＰビット１１１６を１に設定し、ＲＳＶビット１１１９を非０に設定する。
【００７３】
また、ＶＭＭ２０は、第１のＰＴ１６０でＡビット１１１８が０であるエントリに対応するメモリ領域に対しては、第１のＰＴ１６０のＡビット１１１８の更新動作をエミュレーションするために、シャドウＰＴ１４０のＰビット１１１６を１に設定し、ＲＳＶビット１１１９を非０に設定する。またＶＭＭ２０は、第１のＰＴ１６０でＤビット１１２０が０であるエントリに対応するメモリ領域に対しては、第１のＰＴ１６０のＤビット１１２０の更新動作をエミュレーションするために、シャドウＰＴ１４０のＲ／Ｗビット１１１７を０に設定する。
【００７４】
ページ例外発生時に生成される原因コードのフォーマットを図８に示す。原因コードは、Reservedフィールド１２５０、Ｉ／Ｄフィールド１２４０、ＲＳＶＤフィールド１２３０、Ｕ／Ｓフィールド１２２０、Ｗ／Ｒフィールド１２１０、Ｐフィールド１２００から構成される。Reservedフィールド１２５０は将来のために予約されており、有益な情報は示さない。Ｉ／Ｄフィールド１２４０は、命令の読み出し中にページ例外が生じた場合のみ１となる。ＲＳＶＤフィールド１２３０は、ＲＳＶビット１１１９が非０に設定されたメモリ領域を操作する場合のみ１となる。Ｕ／Ｓフィールド１２２０は、ＡＰ５０の実行中にページ例外が生じた場合のみ１となる。Ｗ／Ｒフィールド１２１０は、メモリへの書き込み時にページ例外が生じた場合のみ１となる。Ｐフィールド１２００は、Ｐビット１１１６が０に設定されたメモリ領域を操作する場合のみ１となる。
【００７５】
第１のＰＴの特性データ１０１のフォーマットを図９に示す。第１のＰＴの特性データ１０１は、ゲスト番号１３００、第１のＰＴのアドレス１３１０、第１のＰＴのフォーマット１３１５、予約ビット使用履歴１３２０から成るエントリで構成される表である。ゲスト番号１３００は、仮想計算機２５を識別する番号である。第１のＰＴのアドレス１３１０は、第１のＰＴ１６０の先頭メモリアドレスである。第１のＰＴのフォーマット１３１５は、ＰＴフォーマットを区別する識別子である。予約ビット使用履歴１３２０は、当該第１のＰＴで一度でもＲＳＶビットが非０に設定された場合にのみ１となる変数である。
【００７６】
＜３．ＶＭＭによるシャドウＰＴ操作＞
次に、ゲストの動作に合わせてＶＭＭが行うシャドウＰＴ操作の一例について、以下、フローチャートを参照しながら説明する。
【００７７】
＜３．１．ＶＭＭによるシャドウＰＴ操作の概要＞
図１０は、ＶＭＭ２０上でゲストを実行するときの全体的な処理を示すフローチャートで、図中破線の右側はＶＭＭ２０が行う処理であり、同じく破線の左側はゲストが行う処理である。
【００７８】
Ｓ２０００では、ＶＭＭ２０がゲストの実行開始要求を受け付け、仮想計算機２５の初期状態に合わせてシャドウＰＴ１４０を初期化する。そして、ＶＭＭ２０は、ＣＰＵ６０のＰＴアドレスレジスタＢ７５に、シャドウＰＴ１４０のアドレスを書き込んだ後、制御をゲストＯＳに渡す。
【００７９】
Ｓ２０１０では、ＣＰＵ６０がゲストを実行する。
【００８０】
Ｓ２０２０では、ゲスト側でＶＭＭ２０の介入を必要とするイベントが発生したか否かを判定する。すなわち、割り込みや例外イベント、ゲストの終了などＶＭＭ２０の介入が必要なイベントがあればＳ２０３０に進み、制御をＶＭＭ２０に渡す。ＶＭＭ２０の介入が不要であればＳ２０１０に進み、ゲスト側の処理を実行する。本判定には、ＶＴ−ｘやＡＭＤ−ＶなどのＶＭＭ支援機能を使用しても良い。
【００８１】
Ｓ２０３０では、ＶＭＭ２０がイベントの種類を解析し、介入要因がページ例外であるかを判定する。介入要因がページ例外である場合にはＳ２０７０に進み、ページ要因でなければＳ２０４０に進む。
【００８２】
Ｓ２０４０では、ページ例外以外の介入要因に対して、対応するエミュレーションを実施する。
【００８３】
Ｓ２０５０では、ＶＭＭ２０が、第１のＰＴに関連するレジスタが更新されたか否かを検出する。ｘ８６互換ＣＰＵには、ＣＲ０、ＣＲ３、ＣＲ４、ＩＡ３２ＥＦＥＲといった、ＰＴのフォーマットやアドレスを規定するレジスタが存在する。ＶＭＭ２０が、ゲストによるＣＲ０、ＣＲ３、ＣＲ４、ＩＡ３２ＥＦＥＲの更新を検出した場合は、第１のＰＴの特性データ１０１の該当するエントリを更新し、Ｓ２０６０に進む。上記以外はＳ２０８０に進む。
【００８４】
Ｓ２０６０では、ゲストによる第１のＰＴフォーマット又は第１のＰＴアドレスの変更を受けて、ＶＭＭ２０が変更後の第１のＰＴに合わせてシャドウＰＴ１４０を再初期化する。
【００８５】
Ｓ２０７０では、ページ例外の要因を解析し、必要に応じて第１のＯＳにイベントを報告する、又はエミュレーションを行う。更に、必要に応じて、シャドウＰＴ１４０の更新も行う。
【００８６】
Ｓ２０８０では、ゲストによる仮想計算機のシャットダウン（ゲストの終了）要求の有無をＶＭＭ２０が判定する。ゲストが終了した場合にはゲストの実行を終了させる。ゲストの終了要求が発生していない場合はＳ２０１０へ進む。
【００８７】
上記処理によりＶＭＭ２０は、ゲストの実行開始から終了までの間、第１のＰＴ１６０に対応したシャドウＰＴ１４０がＣＰＵ６０に登録されている状態を保ち続け、ゲストによる特権メモリ操作に対してページ例外を発生させ、メモリ特権命令をエミュレーションすることができる。
【００８８】
＜３．２．シャドウＰＴの初期化処理＞
上記図１０のＳ２０００で行うシャドウＰＴ初期化に関して、図１１を用いて説明する。
【００８９】
Ｓ２１００では、ＶＭＭ２０が、シャドウＰＴ１４０の各エントリを初期化する。初期化の際に、各エントリのＰビットを１に設定し、ＲＳＶビットを非０に設定する。
【００９０】
Ｓ２１１０では、ＶＭＭ２０が、第１のＰＴの特性データ１０１内の初期化中のゲストの番号に対応するエントリに対して、第１のＰＴアドレスを０に設定し、第１のＰＴのフォーマットをＰＴなしに設定し、予約ビット使用履歴を０に設定する。
【００９１】
Ｓ２１２０では、ＶＭＭ２０が、初期化したシャドウＰＴ１４０の先頭アドレスを、ＣＰＵ６０が有するＰＴアドレスレジスタＢ７５に登録する。
【００９２】
＜３．３．シャドウＰＴの再初期化処理＞
上記図１０のＳ２０１０で行うシャドウＰＴの再初期化に関して、図１２を用いて説明する。
【００９３】
Ｓ２２００では、ＶＭＭ２０が、シャドウＰＴ１４０の各エントリを再初期化する。再初期化の際に、各エントリのＰビットを１に設定し、ＲＳＶビットを非０に設定する。
【００９４】
＜３．４．ページ例外処理＞
上記図１０のＳ２０７０で行うページ例外処理に関して、図１３を用いて説明する。
【００９５】
Ｓ２３００では、イベントハンドラに渡された原因コードのＰフィールド１２００とＲＳＶＤフィールド１２３０を参照する。Ｐビットに違反するメモリ操作が行われた場合、つまりＰフィールドが０の場合にはＳ２３２５に進む。ＲＳＶビットに違反するメモリ操作が行われた場合、つまりＲＳＶＤフィールドが１の場合はＳ２３１０に進む。上記以外はＳ２３５５へ進む。
【００９６】
Ｓ２３５５では、原因コードのＷ／Ｒフィールド１２１０を参照し、１であればＳ２３０５へ、０であればＳ２３２５へ進む。
【００９７】
Ｓ２３１０では、第１のＰＴの特性データ１０１を参照して、稼動中のゲストのゲスト番号と第１のＰＴのアドレスに対応した予約ビット使用履歴を読み出す。予約ビット使用履歴が１であれば、Ｓ２３０５へ進み、予約ビット使用履歴が０であれば、２３１５へ進む。
【００９８】
Ｓ２３０５では、第１のＰＴの設定を解析して、第１のＰＴの設定によって、操作対象メモリアドレスに対するページ例外が生じ得るか否かを判定する。第１のＰＴの設定によってページ例外が生じ得る場合はＳ２３２５へ進み、ページ例外が生じ得ない場合はＳ２３１５へ進む。
【００９９】
Ｓ２３１５では、操作対象メモリアドレスが特権メモリであるか否かを調べる。対象が特権メモリである場合には２３３５へ進み、対象が特権メモリ以外の場合は２３５０へ進む。
【０１００】
Ｓ２３３５では、特権メモリ操作のエミュレーションを行い、Ｓ２３４０へ進む。
【０１０１】
Ｓ２３４０では、操作対象となった特権メモリの分類を調べ、操作対象が第１のＰＴである場合はＳ２３４５に進み、操作対象が第１のＰＴでない場合はページ例外処理を終了する。
【０１０２】
Ｓ２３４５では、第１のＰＴの更新に合わせて、対応するシャドウＰＴ１４０のエントリを更新する。更新の手段としては、Ｐビットを１に設定しＲＳＶビットを非０に設定してメモリの読み書き一切を禁止しても良いし、更新後の第１のＰＴで規定されたアクセス可否に反せずエミュレーションを要するメモリ領域に対する操作を禁止できる範囲でシャドウＰＴエントリにアクセス許可を設定しても良い。
【０１０３】
Ｓ２３５０では、ゲストによるメモリ操作に対応してシャドウＰＴエントリを更新する。
【０１０４】
Ｓ２３２５では、第１のＯＳ３０にページ例外を報告する際の、ＣＰＵレジスタ及びメモリの状態を生成する。
【０１０５】
Ｓ２３３０では、次に実行するゲスト命令のアドレスを、第１のイベントハンドラ１６２の先頭アドレスに変更する。
【０１０６】
＜３．５．シャドウＰＴエントリの生成処理＞
上記図１３のＳ２３５０で行うシャドウＰＴエントリの生成に関して、図１４を用いて説明する。
【０１０７】
Ｓ２４００では、第１のＰＴのフォーマットがIntel64用のフォーマットであるかを調査し、Intel64用のフォーマットであればＳ２４１０へ進み、非Intel64用のフォーマットであればＳ２４３０に進む。
【０１０８】
Ｓ２４１０では、シャドウＰＴ１４０に於いて、ページ例外が生じたメモリ領域に対応するＰＭＬ４エントリ１１０１が生成済みであるかを調べる。生成済みとは、メモリ操作を許可された状態のことで、メモリ領域の読み込みに対してページ例外が生じた場合はＰビット＝１かつＲＳＶビット＝０であることを指し、メモリ領域の書き込みに対してページ例外が生じた場合はＰビット＝１かつＲＳＶビット＝０かつＲ／Ｗビット＝１であることを指す。ＰＭＬ４エントリ１１０１が生成済みの場合はＳ２４３０に進み、生成済みでない（未生成）の場合はＳ２４２０に進む。
【０１０９】
Ｓ２４２０では、ページ例外が生じたメモリ領域に対応するシャドウＰＴ１４０のＰＭＬ４エントリ１１０１を、第１のＰＴ１６０の設定に基づいて、生成済みの状態に変更する。本処理に於いては、ページ例外が生じたメモリ領域とは異なるメモリ領域に対応するＰＭＬ４エントリ１１０１を、追加で生成しても構わない。
【０１１０】
Ｓ２４３０では、シャドウＰＴ１４０に於いて、ページ例外が生じたメモリ領域に対応するＰＤＰエントリ１１０２が生成済みであるかを調べる。ＰＤＰエントリ１１０２が生成済みの場合はＳ２４５０に進み、未生成の場合はＳ２４４０に進む。
【０１１１】
Ｓ２４４０では、ページ例外が生じたメモリ領域に対応するシャドウＰＴ１４０のＰＤＰエントリ１１０２を、第１のＰＴ１６０の設定に基づいて、生成済みの状態に変更する。本処理に於いては、ページ例外が生じたメモリ領域とは異なるメモリ領域に対応するＰＤＰエントリ１１０２を、追加で生成しても構わない。
【０１１２】
Ｓ２４５０では、シャドウＰＴ１４０に於いて、ページ例外が生じたメモリ領域に対応するＰＤＥエントリ１１０３が生成済みであるかを調べる。ＰＤＥエントリ１１０３が生成済みの場合はＳ２４７０に進み、未生成の場合はＳ２４６０に進む。
【０１１３】
Ｓ２４６０では、ページ例外が生じたメモリ領域に対応するシャドウＰＴ１４０のＰＤＥエントリ１１０３を、第１のＰＴ１６０の設定に基づいて、生成済みの状態に変更する。本処理に於いては、ページ例外が生じたメモリ領域とは異なるメモリ領域に対応するＰＤＥエントリ１１０３を、追加で生成しても構わない。
【０１１４】
Ｓ２４７０では、シャドウＰＴ１４０に於いて、ページ例外が生じたメモリ領域に対応するＰＴＥエントリ１１０４が生成済みであるかを調べる。ＰＴＥエントリ１１０４が生成済みの場合は本処理を終了し、未生成の場合はＳ２４８０に進む。
【０１１５】
Ｓ２４８０では、ページ例外が生じたメモリ領域に対応するシャドウＰＴ１４０のＰＴＥエントリ１１０４を、第１のＰＴ１６０の設定に基づいて、生成済みの状態に変更する。本処理に於いては、ページ例外が生じたメモリ領域とは異なるメモリ領域に対応するＰＴＥエントリ１１０４を、追加で生成しても構わない。
【０１１６】
上記図１４のＳ２４２０で行うＰＭＬ４エントリの生成に関して、図１５を用いて説明する。
【０１１７】
Ｓ２５００からＳ２５４８のループでは、生成対象となるＰＭＬ４エントリ１１０１を順次生成する。生成対象となるＰＭＬ４エントリ１１０１が１つのみの場合は、単に、本ループを１度だけ実行する。
【０１１８】
Ｓ２５０４では、生成するシャドウＰＴ１４０のＰＭＬ４エントリ１１０１に対応する第１のＰＴ１６０のＰＭＬ４エントリ１１０１に関して、ＲＳＶビットが０であるかを判定する。ＲＳＶビットが０である場合はＳ２５１２へ進み、ＲＳＶビットが非０である場合はＳ２５０８へ進む。
【０１１９】
Ｓ２５０８では、第１のＰＴの特性データ１０１に含まれる、稼動中のゲストのゲスト番号と第１のＰＴに対応するエントリに対して、予約ビット使用履歴を１に変更する。
【０１２０】
Ｓ２５１２では、生成するシャドウＰＴ１４０のＰＭＬ４エントリ１１０１に対応する第１のＰＴ１６０のＰＭＬ４エントリ１１０１に関して、Ｐビットが０であるかを判定する。Ｐビットが０である場合はＳ２５２８へ進み、Ｐビットが非０である場合はＳ２５１６へ進む。
【０１２１】
Ｓ２５１６では、生成するシャドウＰＴ１４０のＰＭＬ４エントリ１１０１に対応するメモリ領域が読み書きに対してエミュレーションを要するか否かを判定する。本処理に於いて、読み書きに対してエミュレーションを要するメモリ領域とは、第１のＰＴに於いてＡビットが０に設定されたメモリ領域である。当該メモリ領域が、読み書きに対してエミュレーションを要する場合にはＳ２５２０へ進み、読み書きに対してエミュレーションを必要としない場合にはＳ２５２４へ進む。
【０１２２】
Ｓ２５２０では、生成するシャドウＰＴ１４０のＰＭＬ４エントリ１１０１に、Ｐビット＝１を設定し、ＲＳＶビット＝非０を設定する。
【０１２３】
Ｓ２５２４では、生成するシャドウＰＴ１４０のＰＭＬ４エントリ１１０１に、Ｐビット＝１を設定し、ＲＳＶビット＝０を設定する。
【０１２４】
Ｓ２５２８では、生成するシャドウＰＴ１４０のＰＭＬ４エントリ１１０１に、Ｐビット＝０を設定し、ＲＳＶビット＝０を設定する。
【０１２５】
Ｓ２５３２では、生成するシャドウＰＴ１４０のＰＭＬ４エントリ１１０１に対応する第１のＰＴ１６０のＰＭＬ４エントリ１１０１に関して、Ｒ／Ｗビットが０であるかを判定する。Ｒ／Ｗビットが０である場合はＳ２５４４へ進み、Ｒ／Ｗビットが非０である場合はＳ２５３６へ進む。
【０１２６】
Ｓ２５３６では、生成するシャドウＰＴ１４０のＰＭＬ４エントリ１１０１に対応するメモリ領域が書き込みに対してエミュレーションを要するか否かを判定する。本処理に於いて、書き込みに対してエミュレーションを要するメモリ領域とは、第１のＰＴに於いてＤビットが０に設定されたメモリ領域である。当該メモリ領域が、書き込みに対してエミュレーションを要する場合にはＳ２５４４へ進み、読み書きに対してエミュレーションを必要としない場合にはＳ２５４０へ進む。
【０１２７】
Ｓ２５４０では、生成するシャドウＰＴ１４０のＰＭＬ４エントリ１１０１に、Ｒ／Ｗビット＝１を設定する。
【０１２８】
Ｓ２５４４では、生成するシャドウＰＴ１４０のＰＭＬ４エントリ１１０１に、Ｒ／Ｗビット＝０を設定する。
【０１２９】
上記図１４のＳ２４４０で行うＰＤＰエントリの生成に関して、図１６を用いて説明する。
【０１３０】
Ｓ２６００では、稼動中のゲストに第１のＰＴが存在するか否かを調べる。ＶＭＭ２０上で第２のＯＳ４０が直接稼動する場合には第１のＰＴが存在しない。第１のＰＴの存在は、第１のＰＴの特性データ１０１を参照して第１のＰＴのフォーマットから判断する。第１のＰＴが存在する場合はＳ２６０４へ進み、第１のＰＴが存在しない場合はＳ２６６０へ進む。
【０１３１】
Ｓ２６０４では、ＰＤＰエントリ１１０２の生成対象となるメモリ領域に対して、第１のＰＴにＰＤＰテーブル１００２が存在するか否かを調べる。ｘ８６互換ＣＰＵでは、ＰＴのフォーマットにＰＤＰテーブル１００２が存在しない。従って第１のＰＴに於けるＰＤＰテーブル１００２の存在は、第１のＰＴの特性データ１０１を参照して第１のＰＴのフォーマットから判断する。第１のＰＴに、対応するＰＤＰテーブル１００２が存在する場合にはＳ２６０８へ進み、対応するＰＤＰテーブル１００２が存在しない場合にはＳ２６６０へ進む。
【０１３２】
Ｓ２６０８からＳ２６５６のループでは、生成対象となるＰＤＰエントリ１１０２を順次生成する。生成対象となるＰＤＰエントリ１１０２が１つのみの場合は、単に、本ループを１度だけ実行する。
【０１３３】
Ｓ２６１２では、生成するシャドウＰＴ１４０のＰＤＰエントリ１１０２に対応する第１のＰＴ１６０のＰＤＰエントリ１１０２に関して、ＲＳＶビットが０であるかを判定する。ＲＳＶビットが０である場合はＳ２６２０へ進み、ＲＳＶビットが非０である場合はＳ２６１６へ進む。
【０１３４】
Ｓ２６１６では、第１のＰＴの特性データ１０１に含まれる、稼動中のゲストのゲスト番号と第１のＰＴに対応するエントリに対して、予約ビット使用履歴を１に変更する。
【０１３５】
Ｓ２６２０では、生成するシャドウＰＴ１４０のＰＤＰエントリ１１０２に対応する第１のＰＴ１６０のＰＤＰエントリ１１０２に関して、Ｐビットが０であるかを判定する。Ｐビットが０である場合はＳ２６３６へ進み、Ｐビットが非０である場合はＳ２６２４へ進む。
【０１３６】
Ｓ２６２４では、生成するシャドウＰＴ１４０のＰＤＰエントリ１１０２に対応するメモリ領域が読み書きに対してエミュレーションを要するか否かを判定する。本処理に於いて、読み書きに対してエミュレーションを要するメモリ領域とは、第１のＰＴに於いてＡビットが０に設定されたメモリ領域である。当該メモリ領域が、読み書きに対してエミュレーションを要する場合にはＳ２６２８へ進み、読み書きに対してエミュレーションを必要としない場合にはＳ２６３２へ進む。
【０１３７】
Ｓ２６２８では、生成するシャドウＰＴ１４０のＰＤＰエントリ１１０２に、Ｐビット＝１を設定し、ＲＳＶビット＝非０を設定する。
【０１３８】
Ｓ２６３２では、生成するシャドウＰＴ１４０のＰＤＰエントリ１１０２に、Ｐビット＝１を設定し、ＲＳＶビット＝０を設定する。
【０１３９】
Ｓ２６３６では、生成するシャドウＰＴ１４０のＰＤＰエントリ１１０２に、Ｐビット＝０を設定し、ＲＳＶビット＝０を設定する。
【０１４０】
Ｓ２６４０では、生成するシャドウＰＴ１４０のＰＤＰエントリ１１０２に対応する第１のＰＴ１６０のＰＤＰエントリ１１０２に関して、Ｒ／Ｗビットが０であるかを判定する。Ｒ／Ｗビットが０である場合はＳ２６５２へ進み、Ｒ／Ｗビットが非０である場合はＳ２６４４へ進む。
【０１４１】
Ｓ２６４４では、生成するシャドウＰＴ１４０のＰＤＰエントリ１１０２に対応するメモリ領域が書き込みに対してエミュレーションを要するか否かを判定する。本処理に於いて、書き込みに対してエミュレーションを要するメモリ領域とは、第１のＰＴに於いてＤビットが０に設定されたメモリ領域である。当該メモリ領域が、書き込みに対してエミュレーションを要する場合にはＳ２６５２へ進み、読み書きに対してエミュレーションを必要としない場合にはＳ２６４８へ進む。
【０１４２】
Ｓ２６４８では、生成するシャドウＰＴ１４０のＰＤＰエントリ１１０２に、Ｒ／Ｗビット＝１を設定する。
【０１４３】
Ｓ２６５２では、生成するシャドウＰＴ１４０のＰＤＰエントリ１１０２に、Ｒ／Ｗビット＝０を設定する。
【０１４４】
Ｓ２６６０からＳ２６６８のループでは、生成対象となるＰＤＰエントリ１１０２を順次生成する。生成対象となるＰＤＰエントリ１１０２が１つのみの場合は、単に、本ループを１度だけ実行する。
【０１４５】
Ｓ２６６４では、生成するシャドウＰＴ１４０のＰＤＰエントリ１１０２に、Ｐビット＝１を設定し、ＲＳＶビット＝０を設定し、Ｒ／Ｗビット＝１を設定する。
【０１４６】
上記図１４のＳ２４６０で行うＰＤＥエントリの生成に関して、図１７を用いて説明する。
【０１４７】
Ｓ２７００では、稼動中のゲストに第１のＰＴが存在するか否かを調べる。ＶＭＭ２０上で第２のＯＳ４０が直接稼動する場合には第１のＰＴが存在しない。第１のＰＴの存在は、第１のＰＴの特性データ１０１を参照して第１のＰＴのフォーマットから判断する。第１のＰＴが存在する場合はＳ２７０４へ進み、第１のＰＴが存在しない場合はＳ２７５６へ進む。
【０１４８】
Ｓ２７０４からＳ２７５２のループでは、生成対象となるＰＤＥエントリ１１０３を順次生成する。生成対象となるＰＤＥエントリ１１０３が１つのみの場合は、単に、本ループを１度だけ実行する。
【０１４９】
Ｓ２７０８では、生成するシャドウＰＴ１４０のＰＤＥエントリ１１０３に対応する第１のＰＴ１６０のＰＤＥエントリ１１０３に関して、ＲＳＶビットが０であるかを判定する。ＲＳＶビットが０である場合はＳ２７１６へ進み、ＲＳＶビットが非０である場合はＳ２７１２へ進む。
【０１５０】
Ｓ２７１２では、第１のＰＴの特性データ１０１に含まれる、稼動中のゲストのゲスト番号と第１のＰＴに対応するエントリに対して、予約ビット使用履歴を１に変更する。
【０１５１】
Ｓ２７１６では、生成するシャドウＰＴ１４０のＰＤＥエントリ１１０３に対応する第１のＰＴ１６０のＰＤＥエントリ１１０３に関して、Ｐビットが０であるかを判定する。Ｐビットが０である場合はＳ２７３２へ進み、Ｐビットが非０である場合はＳ２７２０へ進む。
【０１５２】
Ｓ２７２０では、生成するシャドウＰＴ１４０のＰＤＥエントリ１１０３に対応するメモリ領域が読み書きに対してエミュレーションを要するか否かを判定する。本処理に於いて、読み書きに対してエミュレーションを要するメモリ領域とは、第１のＰＴに於いて、Ａビットが０に設定されたメモリ領域である。当該メモリ領域が、読み書きに対してエミュレーションを要する場合にはＳ２７２４へ進み、読み書きに対してエミュレーションを必要としない場合にはＳ２７２８へ進む。
【０１５３】
Ｓ２７２４では、生成するシャドウＰＴ１４０のＰＤＥエントリ１１０３に、Ｐビット＝１を設定し、ＲＳＶビット＝非０を設定する。
【０１５４】
Ｓ２７２８では、生成するシャドウＰＴ１４０のＰＤＥエントリ１１０３に、Ｐビット＝１を設定し、ＲＳＶビット＝０を設定する。
【０１５５】
Ｓ２７３２では、生成するシャドウＰＴ１４０のＰＤＥエントリ１１０３に、Ｐビット＝０を設定し、ＲＳＶビット＝０を設定する。
【０１５６】
Ｓ２７３６では、生成するシャドウＰＴ１４０のＰＤＥエントリ１１０３に対応する第１のＰＴ１６０のＰＤＥエントリ１１０３に関して、Ｒ／Ｗビットが０であるかを判定する。Ｒ／Ｗビットが０である場合はＳ２７４８へ進み、Ｒ／Ｗビットが非０である場合はＳ２７４０へ進む。
【０１５７】
Ｓ２７４０では、生成するシャドウＰＴ１４０のＰＤＥエントリ１１０３に対応するメモリ領域が書き込みに対してエミュレーションを要するか否かを判定する。本処理に於いて、書き込みに対してエミュレーションを要するメモリ領域とは、第１のＰＴに於いてＤビットが０に設定されたメモリ領域である。当該メモリ領域が、書き込みに対してエミュレーションを要する場合にはＳ２７４８へ進み、読み書きに対してエミュレーションを必要としない場合にはＳ２７４４へ進む。
【０１５８】
Ｓ２７４４では、生成するシャドウＰＴ１４０のＰＤＥエントリ１１０３に、Ｒ／Ｗビット＝１を設定する。
【０１５９】
Ｓ２７４８では、生成するシャドウＰＴ１４０のＰＤＥエントリ１１０３に、Ｒ／Ｗビット＝０を設定する。
【０１６０】
Ｓ２７５６からＳ２７６４のループでは、生成対象となるＰＤＥエントリ１１０３を順次生成する。生成対象となるＰＤＥエントリ１１０３が１つのみの場合は、単に、本ループを１度だけ実行する。
【０１６１】
Ｓ２７６０では、生成するシャドウＰＴ１４０のＰＤＥエントリ１１０３に、Ｐビット＝１を設定し、ＲＳＶビット＝０を設定し、Ｒ／Ｗビット＝１を設定する。
【０１６２】
上記図１４のＳ２４８０で行うシャドウＰＴＥエントリの生成に関して、図１８を用いて説明する。
【０１６３】
Ｓ２８００では、稼動中のゲストに第１のＰＴが存在するか否かを調べる。ＶＭＭ２０上で第２のＯＳ４０が直接稼動する場合には第１のＰＴが存在しない。第１のＰＴの存在は、第１のＰＴの特性データ１０１を参照して第１のＰＴのフォーマットから判断する。第１のＰＴが存在する場合はＳ２８０４へ進み、第１のＰＴが存在しない場合はＳ２８５６へ進む。
【０１６４】
Ｓ２８０４では、ＰＴＥエントリ１１０４の生成対象となるメモリ領域に対して、第１のＰＴにＰＴＥテーブル１００４が存在するか否かを調べる。第１のＰＴに於いて、当該メモリ領域に対応するＰＤＥエントリ１１０３がＰＳ＝１である場合のみ、対応するＰＴＥテーブル１００４は存在しない。第１のＰＴに、対応するＰＴＥテーブル１００４が存在する場合にはＳ２８０８へ進み、対応するＰＴＥテーブル１００４が存在しない場合にはＳ２８５６へ進む。
【０１６５】
Ｓ２８０８からＳ２８５２のループでは、生成対象となるＰＴＥエントリ１１０４を順次生成する。生成対象となるＰＴＥエントリ１１０４が１つのみの場合は、単に、本ループを１度だけ実行する。
【０１６６】
Ｓ２８１２では、生成するシャドウＰＴ１４０のＰＴＥエントリ１１０４に対応する第１のＰＴ１６０のＰＴＥエントリ１１０４に関して、ＲＳＶビットが０であるかを判定する。ＲＳＶビットが０である場合はＳ２８２０へ進み、ＲＳＶビットが非０である場合はＳ２８１６へ進む。
【０１６７】
Ｓ２８１６では、第１のＰＴの特性データ１０１に含まれる、稼動中のゲストのゲスト番号と第１のＰＴに対応するエントリに対して、予約ビット使用履歴を１に変更する。
【０１６８】
Ｓ２８２０では、生成するシャドウＰＴ１４０のＰＴＥエントリ１１０４に対応する第１のＰＴ１６０のＰＴＥエントリ１１０４に関して、Ｐビットが０であるかを判定する。Ｐビットが０である場合はＳ２８３６へ進み、Ｐビットが非０である場合はＳ２８２４へ進む。
【０１６９】
Ｓ２８２４では、生成するシャドウＰＴ１４０のＰＴＥエントリ１１０４に対応するメモリ領域が読み書きに対してエミュレーションを要するか否かを判定する。本処理に於いて、読み書きに対してエミュレーションを要するメモリ領域とは、以下２つのいずれかの条件を満たすメモリ領域である。（条件１）ＩＯ装置の制御に使用するＭＭＩＯメモリ領域。（条件２）第１のＰＴに於いて、Ａビットが０に設定されたメモリ領域。当該メモリ領域が、読み書きに対してエミュレーションを要する場合にはＳ２８２８へ進み、読み書きに対してエミュレーションを必要としない場合にはＳ２８３２へ進む。
【０１７０】
Ｓ２８２８では、生成するシャドウＰＴ１４０のＰＴＥエントリ１１０４に、Ｐビット＝１を設定し、ＲＳＶビット＝非０を設定する。
【０１７１】
Ｓ２８３２では、生成するシャドウＰＴ１４０のＰＴＥエントリ１１０４に、Ｐビット＝１を設定し、ＲＳＶビット＝０を設定する。
【０１７２】
Ｓ２８３６では、生成するシャドウＰＴ１４０のＰＴＥエントリ１１０４に、Ｐビット＝０を設定し、ＲＳＶビット＝０を設定する。
【０１７３】
Ｓ２８９２では、生成するシャドウＰＴ１４０のＰＴＥエントリ１１０４に対応する第１のＰＴ１６０のＰＴＥエントリ１１０４に関して、Ｒ／Ｗビットが０であるかを判定する。Ｒ／Ｗビットが０である場合はＳ２８４８へ進み、Ｒ／Ｗビットが非０である場合はＳ２８４０へ進む。
【０１７４】
Ｓ２８４０では、生成するシャドウＰＴ１４０のＰＴＥエントリ１１０４に対応するメモリ領域が書き込みに対してエミュレーションを要するか否かを判定する。本処理に於いて、書き込みに対してエミュレーションを要するメモリ領域とは、以下２つのいずれかの条件を満たすメモリ領域である。（条件１）第１のＰＴが存在するメモリ領域。（条件２）第１のＰＴに於いて、Ｄビットが０に設定されたメモリ領域。当該メモリ領域が、書き込みに対してエミュレーションを要する場合にはＳ２８４８へ進み、読み書きに対してエミュレーションを必要としない場合にはＳ２８４４へ進む。
【０１７５】
Ｓ２８４４では、生成するシャドウＰＴ１４０のＰＴＥエントリ１１０４に、Ｒ／Ｗビット＝１を設定する。
【０１７６】
Ｓ２８４８では、生成するシャドウＰＴ１４０のＰＴＥエントリ１１０４に、Ｒ／Ｗビット＝０を設定する。
【０１７７】
Ｓ２８５６からＳ２８８４のループでは、生成対象となるＰＴＥエントリ１１０４を順次生成する。生成対象となるＰＴＥエントリ１１０４が１つのみの場合は、単に、本ループを１度だけ実行する。
【０１７８】
Ｓ２８６０では、生成するシャドウＰＴ１４０のＰＴＥエントリ１１０４に対応するメモリ領域が読み書きに対してエミュレーションを要するか否かを判定する。本処理に於いて、読み書きに対してエミュレーションを要するメモリ領域とは、ＩＯ装置の制御に使用するＭＭＩＯメモリ領域である。当該メモリ領域が、読み書きに対してエミュレーションを要する場合にはＳ２８６４へ進み、読み書きに対してエミュレーションを必要としない場合にはＳ２８６８へ進む。
【０１７９】
Ｓ２８６４では、生成するシャドウＰＴ１４０のＰＴＥエントリ１１０４に、Ｐビット＝１を設定し、ＲＳＶビット＝非０を設定する。
【０１８０】
Ｓ２８６８では、生成するシャドウＰＴ１４０のＰＴＥエントリ１１０４に、Ｐビット＝１を設定し、ＲＳＶビット＝０を設定し、Ｒ／Ｗビット＝１を設定する。
【０１８１】
＜４．まとめ＞
以上に示した実施例によれば、シャドウＰＴ１４０のＲＳＶビットを用いて特権メモリに対する読み書き操作を禁止することで、ＶＭＭ２０上で第１のＯＳ３０を稼動させた状態でＰビットの設定に違反する操作が行われた場合に、エミュレーションが不要であることを高速に判断できるため、オーバヘッドを抑制することができる。
【実施例２】
【０１８２】
以下では、本発明を１つのＰＴだけを用いるページ例外検出機構を備えたＶＴ−ｘ対応のＣＰＵに対して適用し、ＶＭＭ上で第２のＯＳのみを複数稼動させる実施形態を説明する。以下では、添付図面に基づいて実施例１との違いを説明する。
【０１８３】
＜１．ハードウェア構成＞
ハードウェア構成は図１９に示すように、主記憶２１５の内容のみが実施例１と異なる。主記憶２１５には、仮想計算機モニタ（ＶＭＭ）２０がロードされ、このＶＭＭ２０が実現する仮想計算機２５が、１つ以上の第２のＯＳ４０を実行する。また第２のＯＳは仮想計算機２５上で、任意のＡＰ５０を実行する。
【０１８４】
＜２．ソフトウェア構成＞
ソフトウェア構成は、図２０に示すように、ＶＭＭ２０上で稼動するＯＳとＣＰＵ６０に関連する部位が実施例１と異なる。
【０１８５】
物理計算機１０上では、複数の仮想計算機２５を管理するＶＭＭ２０が稼動している。各仮想計算機２５では、第２のＯＳ４０が稼動する。また第２のＯＳ４０の上では、アプリケーション（ＡＰ５０）が１つ以上稼動する。
【０１８６】
ＶＭＭ２０は、各第２のＯＳ４０に対してメモリ領域毎のアクセス可否を定めたシャドウＰＴ１４０と、ゲストによるハードウェア操作をエミュレーションするエミュレータ１３０と、第２のＯＳ４０に対してページ例外などのイベントを報告するイベント報告部１２０と、ＣＰＵ６０で生じたイベントを処理するイベントハンドラ８０と、ＶＭＭ２０内で発生した障害に対応する障害処理部８５と、ページ例外の発生時にイベントハンドラ８０に渡される原因コードを参照してイベントの発生原因を解析するページ例外の原因コード解析部９０と、第２のＯＳ４０が保持する第２のＰＴ１７０に於けるＲＳＶビットによるメモリ領域のアクセス禁止設定履歴を保持する第２のＰＴ履歴管理部１０５と、ページ例外を生じさせたメモリ操作が第２のＰＴの設定に違反しているか解析する第２のＰＴ解析部１１５を有する。
【０１８７】
シャドウＰＴ１４０は、ＩＯ装置の制御に使用するＭＭＩＯ（Memory Mapped I/O）メモリアドレスに対して読み書きの一切を禁止するために、ＲＳＶビットを非０に設定したエントリを有する。またシャドウＰＴ１４０は、第２のＰＴ１７０が存在するメモリアドレスに対して書き込みを禁止するために、Ｒ／Ｗビットを０に設定したエントリを有する。またシャドウＰＴ１４０は、ゲストが未操作のメモリ領域の一部又は全部に対して、読み書き又は書き込みを禁止するためにＲＳＶビットを非０に設定又はＲ／Ｗビットを０に設定したエントリを有する。以上のいずれにも該当しないメモリ領域に対しては、第２のＰＴ１７０で指定されたアクセス可否を継承した設定を保持する。
【０１８８】
エミュレータ１３０は、ゲストによるハードウェア操作をエミュレーションする。エミュレータ１３０が第２のＰＴに対する操作をエミュレーションする場合は、対応するシャドウＰＴ１４０をゲストの設定に合わせて更新する。また、エミュレータ１３０がゲストに対するイベントの発生を検出した場合は、イベント報告部１２０を呼び出す。イベント報告部１２０は、第２のＯＳ４０に対してページ例外などのイベントを報告するために、イベント発生直後のメモリ及びＣＰＵの状態を生成して第２のＯＳが有する第２のイベントハンドラ１７２に分岐する。イベントハンドラ８０は、ＣＰＵがページ例外などのイベントを検出した場合に呼び出され、イベントの種類に応じてＶＭＭ内のコードに分岐する。
【０１８９】
ページ例外の原因コード解析部９０は、ページ例外の発生時に渡された原因コードから、ページ例外の要因を大別し、大別した要因に基づいて次に実行するコードを決定する。ページ例外がＰビット違反に起因する場合は、障害処理部８５を呼び出す。ページ例外がＲＳＶビット違反に起因する場合は、第２のＰＴ履歴管理部１０５を呼び出す。ページ例外がＲ／Ｗビット違反に起因する可能性がある場合は、第２のＰＴ解析部１１５を呼び出す。ページ例外が上記のいずれにも該当しない場合は、イベント報告部１２０を呼び出す。障害処理部８５は、コンソール４３０などの外部出力装置を用いて、ＶＭＭ２０内で発生した障害の情報を出力する。
【０１９０】
第２のＰＴ履歴管理部１０５は、第２のＰＴ１７０の特性を第２のＰＴの特性データ１０２に保持する。第２のＰＴの特性データ１０２は、第２のＰＴ１７０のフォーマットと、第２のＰＴに於いてＲＳＶビットを非０にしてメモリ領域に関する読み書き一切を禁止した経歴の有無を管理する。第２のＰＴ履歴管理部１０５は、第２のＰＴでＲＳＶビットを非０になった経歴のない場合にエミュレータ１３０を呼び出し、第２のＰＴでＲＳＶビットが非０になった経歴がある場合に第２のＰＴ解析部１１５を呼び出す。
【０１９１】
第２のＰＴ解析部１１５は、第２のＰＴ１７０に於ける設定で、ページ例外の発生時にイベントハンドラ８０に渡された原因コードが生じ得るか否かを解析し、次に実行するコードを決定する。第２のＰＴ１７０に於ける設定で、ページ例外の発生時にイベントハンドラ８０に渡された原因コードが生じ得る場合には、イベント報告部１２０を呼び出し、生じ得ない場合にはエミュレータ１３０を呼び出す。
【０１９２】
物理計算機１０は、ｘ８６互換のＣＰＵ６０を有し、ＣＰＵ６０は１つのＰＴのみを用いるページ例外検出機能７１を有する。１つのＰＴのみを用いるページ例外検出機能７１はＴＬＢ７３とＰＴアドレスレジスタ７２とpage-fault error code mask/match機能７６を有する。ＴＬＢ７３はメモリ領域に対するアクセスの可否を保持する。ＰＴアドレスレジスタ７２はシャドウＰＴ１４０の先頭アドレスを保持する。ＴＬＢ７３には、シャドウＰＴ１４０に於けるアクセス可否の設定がコピーされる。page-fault error code mask/match機能７６は、ページ例外の原因コードとページ例外発生時に呼び出すイベントハンドラの対応を保持する。
【０１９３】
１つのＰＴのみを用いるページ例外検出機能７１は、シャドウＰＴ１４０で禁止されたメモリ操作を検出した場合は、原因コードと操作対象メモリアドレスを保存し、page-fault error code mask/match機能７６の設定に従って、ＶＭＭ２０内のイベントハンドラ８０または第２のイベントハンドラ１７２に分岐する。第２のＯＳ４０は、第２のＰＴ１７０と第２のイベントハンドラ１７２を有し、１つ以上のＡＰ５０を稼動させる。
【０１９４】
図３０は、page-fault error code mask/match機能７６に設定するpage-fault error code mask７７、page-fault error code match７８、exception bitmap７９のフォーマットである。上記に対する設定よって、ページ例外の原因コードと呼び出すイベントハンドラが対応付けられる。page-fault error code mask７７及び、page-fault error code match７８は、原因コードと同じフォーマットである。exception bitmap７９は３２ビットの値であり、各ビットがｘ８６互換ＣＰＵの例外の番号に対応している。ビット１４（１２６０）がページ例外に対応する。
【０１９５】
page-fault error code mask/match機能７６は、ページ例外の発生時に、ページ例外の原因コードとpage-fault error code mask７７の論理和を計算し、当該論理和とpage-fault error code match７８が一致する場合は、ビット１４（１２６０）の０／１に従って第２のイベントハンドラ１７２／イベントハンドラ８０をそれぞれ呼び出す。当該論理和とpage-fault error code match７８が不一致の場合は、ビット１４（１２６０）の０／１に従ってイベントハンドラ８０／第２のイベントハンドラ１７２をそれぞれ呼び出す。
【０１９６】
物理メモリ空間２１８は、図２１に示すように、仮想計算機２５に割り当てたメモリの中身と、ＶＭＭ２０に割り当てたメモリ内の第２のＰＴ管理部１０５と第２のＰＴ解析部と障害処理部８５のみが異なる。各仮想計算機２５のメモリ領域には、各第２のゲストＯＳ４０が生成した第２のＰＴ１７０と第２のイベントハンドラ１７２が含まれる。
【０１９７】
ＶＭＭ２０が使用するメモリ領域には、イベントハンドラ８０と、障害処理部８５と、ページ例外の原因コード解析部９０と、第２のＰＴ履歴管理部１０５と、第２のＰＴの特性データ１０２と、第２のＰＴ解析部１１５と、イベント報告部１２０と、エミュレータ１３０と、シャドウＰＴ１４０が割り当てられる。
【０１９８】
シャドウＰＴ１４０と第２のＰＴ１７０の構造は実施例１と同一である。シャドウＰＴ１４０と第２のＰＴ１７０の設定値は、アドレスフィールド（１１１１、１１１２、１１１３、１１１４、１１１５）とＲＳＶビット１１１９とＲ／Ｗビット１１１７が異なる。
【０１９９】
ＶＭＭ２０は、仮想計算機２５に割り当てたメモリ空間に合わせて、シャドウＰＴ１４０のアドレスフィールド（１１１１、１１１２、１１１３、１１１４、１１１５）を設定する。またＶＭＭ２０は、シャドウＰＴ１４０と対応付けられた第２のＰＴ１７０に関して、ゲストによる第２のＰＴ１７０のエントリ更新を検出するためにするために、第２のＰＴ１７０のエントリ更新に使用されるシャドウＰＴ１４０のＲ／Ｗビットを０に設定し、ライトプロテクトを行う。ＶＭＭ２０は、ＩＯ装置の制御に使用するＭＭＩＯアドレスに対して読み書きを禁止するために、シャドウＰＴ１４０のＰビット１１１６を１に設定し、ＲＳＶビット１１１９を非０に設定する。
【０２００】
また、ＶＭＭ２０は、第２のＰＴ１７０でＡビット１１１８が０であるエントリに対応するメモリ領域に対しては、第２のＰＴ１７０のＡビット１１１８の更新動作をエミュレーションするために、シャドウＰＴ１４０のＰビット１１１６を１に設定し、ＲＳＶビット１１１９を非０に設定する。またＶＭＭ２０は、第２のＰＴ１７０でＤビット１１２０が０であるエントリに対応するメモリ領域に対しては、第２のＰＴ１７０のＤビット１１２０の更新動作をエミュレーションするために、シャドウＰＴ１４０のＲ／Ｗビット１１１７を０に設定する。
【０２０１】
ページ例外発生時に生成される原因コードのフォーマットは、実施例１と同一である。第２のＰＴの特性データ１０２のフォーマットは、図２２に示すように、対象が第２のＰＴである点のみが、実施例１と異なる。第２のＰＴの特性データ１０２は、ゲスト番号１３００、第２のＰＴのアドレス１３５０、第２のＰＴのフォーマット１３５５、予約ビット使用履歴１３２０から成るエントリで構成される。ゲスト番号１３００は、仮想計算機２５を識別する番号である。第２のＰＴのアドレス１３５０は、第２のＰＴ１７０の先頭メモリアドレスである。第２のＰＴのフォーマット１３５５は、ＰＴフォーマットを区別する識別子である。予約ビット使用履歴１３２０は、当該第２のＰＴの中に一度でもＲＳＶビットが非０に設定された場合にのみ１となる変数である。
【０２０２】
＜３．ＶＭＭによるシャドウＰＴ操作＞
次に、ゲストの動作に合わせてＶＭＭが行うシャドウＰＴ操作の一例について、以下、フローチャートを参照しながら説明する。
【０２０３】
＜３．１．ＶＭＭによるシャドウＰＴ操作の概要＞
ＶＭＭ２０上でゲストを実行するときの全体的な処理の流れは、実施例１で説明した図１０と同一である。以下では、図１０における各ステップの中での実施例１との違いを説明する。
【０２０４】
Ｓ２０００では、ＶＭＭ２０がゲストの実行開始要求を受け付け、仮想計算機２５の初期状態に合わせてシャドウＰＴ１４０を初期化する。そして、ＶＭＭ２０は、ＣＰＵ６０のＰＴアドレスレジスタ７２に、シャドウＰＴ１４０のアドレスを書き込んだ後、制御をゲストＯＳに渡す。
【０２０５】
Ｓ２０１０、Ｓ２０２０、Ｓ２０３０、Ｓ２０４０は、実施例１と同一である。
【０２０６】
Ｓ２０５０では、ＶＭＭ２０が、第２のＰＴに関連するレジスタが更新されたか否かを検出する。ｘ８６互換ＣＰＵには、ＣＲ０、ＣＲ３、ＣＲ４、ＩＡ３２ＥＦＥＲといった、ＰＴのフォーマットやアドレスを規定するレジスタが存在する。ＶＭＭ２０が、ゲストによるＣＲ０、ＣＲ３、ＣＲ４、ＩＡ３２ＥＦＥＲの更新を検出した場合は、第２のＰＴの特性データ１０２の該当するエントリを更新し、Ｓ２０６０に進む。上記以外はＳ２０８０に進む。
【０２０７】
Ｓ２０６０では、ゲストによる第２のＰＴフォーマット又は第２のＰＴアドレスの変更を受けて、ＶＭＭ２０が変更後の第２のＰＴに合わせてシャドウＰＴ１４０を再初期化する。
【０２０８】
Ｓ２０７０では、ページ例外の要因を解析し、必要に応じて第２のＯＳにイベントを報告する、又はエミュレーションを行う。更に、必要に応じて、シャドウＰＴ１４０の更新も行う。
【０２０９】
Ｓ２０８０は、実施例１と同一である。
【０２１０】
上記処理によりＶＭＭ２０は、ゲストの実行開始から終了までの間、第２のＰＴ１７０に対応したシャドウＰＴ１４０がＣＰＵ６０に登録されている状態を保ち続け、ゲストによる特権メモリ操作に対してページ例外を発生させ、メモリ特権命令をエミュレーションすることができる。
【０２１１】
＜３．２．シャドウＰＴの初期化処理＞
上記図１０のＳ２０００で行うシャドウＰＴ初期化の流れは、図２９に示すように、page-fault error code mask/match機能の設定を行う点と、操作対象のレジスタのみが実施例１と異なる。
【０２１２】
Ｓ２１００は、実施例１と同一である。
【０２１３】
Ｓ２１１０では、ＶＭＭ２０が、第２のＰＴの特性データ１０２内の初期化中のゲストの番号に対応するエントリに対して、第２のＰＴアドレスを０に設定し、第２のＰＴのフォーマットをＰＴなしに設定し、予約ビット使用履歴を０に設定する。
【０２１４】
Ｓ２１２０では、ＶＭＭ２０が、初期化したシャドウＰＴ１４０の先頭アドレスを、ＣＰＵ６０が有するＰＴアドレスレジスタ７２に登録する。
【０２１５】
Ｓ２１３０では、ＶＭＭ２０が、page-fault error code mask/match機能７６を、Ｐビット違反のページ例外が発生した場合に第２のイベントハンドラ１７２が呼ばれるように設定する。設定の内容は、page-fault error code mask７７を１に設定しpage-fault error code match７８を１に設定しビット１４（１２６０）を１に設定しても良いし、page-fault error code mask７７を１に設定しpage-fault error code match７８を０に設定しビット１４（１２６０）を０に設定しても良い。
【０２１６】
＜３．３．シャドウＰＴの再初期化処理＞
上記図１０のＳ２０１０で行うシャドウＰＴの再初期化は、図１２に示すように実施例１と同一である。
【０２１７】
＜３．４．ページ例外処理＞
上記図１０のＳ２０７０で行うページ例外処理に関して、図２３を用いて説明する。
【０２１８】
Ｓ３３００では、イベントハンドラ８０に渡された原因コードのＰフィールドとＲＳＶフィールドを参照する。Ｐビットに違反するメモリ操作が行われた場合、つまりＰフィールドが０の場合にはＳ３３６０に進む。ＲＳＶビットに違反するメモリ操作が行われた場合、つまりＲＳＶＤフィールドが１の場合はＳ３３１０に進む。上記以外はＳ３３５５へ進む。
【０２１９】
Ｓ３３５５では、原因コードのＷ／Ｒフィールドを参照し、１であればＳ３３０５へ、０であればＳ３３２５へ進む。
【０２２０】
Ｓ３３１０では、第２のＰＴの特性データ１０２を参照して、稼動中のゲストのゲスト番号と第２のＰＴのアドレスに対応した予約ビット使用履歴を読み出す。予約ビット使用履歴が１であれば、Ｓ３３０５へ進み、予約ビット使用履歴が０であれば、３３１５へ進む。
【０２２１】
Ｓ３３０５では、第２のＰＴの設定を解析して、第２のＰＴの設定によって、操作対象メモリアドレスに対するページ例外が生じ得るか否かを判定する。第２のＰＴの設定によってページ例外が生じ得る場合はＳ３３２５へ進み、ページ例外が生じ得ない場合はＳ３３１５へ進む。
【０２２２】
Ｓ３３１５では、操作対象メモリアドレスが特権メモリであるか否かを調べる。対象が特権メモリである場合には３３３５へ進み、対象が特権メモリ以外の場合は３３５０へ進む。
【０２２３】
Ｓ３３３５では、特権メモリ操作のエミュレーションを行い、Ｓ３３４０へ進む。
【０２２４】
Ｓ３３４０では、操作対象となった特権メモリの分類を調べ、操作対象が第２のＰＴである場合はＳ３３４５に進み、操作対象が第２のＰＴでない場合はページ例外処理を終了する。
【０２２５】
Ｓ３３４５では、第２のＰＴの更新に合わせて、対応するシャドウＰＴ１４０のエントリを更新する。更新の手段としては、Ｐビットを１に設定しＲＳＶビットを非０に設定してメモリの読み書き一切を禁止しても良いし、更新後の第２のＰＴで規定されたアクセス可否に反せずエミュレーションを要するメモリ領域に対する操作を禁止できる範囲でシャドウＰＴエントリにアクセス許可を設定しても良い。
【０２２６】
Ｓ３３５０では、ゲストによるメモリ操作に対応してシャドウＰＴエントリを更新する。
【０２２７】
Ｓ３３２５では、第２のＯＳにページ例外を報告する際の、ＣＰＵレジスタ及びメモリの状態を生成する。
【０２２８】
Ｓ３３３０では、次に実行するゲスト命令のアドレスを、第２のイベントハンドラの先頭アドレスに変更する。
【０２２９】
Ｓ３３６０では、コンソール４３０などの外部出力装置を用いて、ＶＭＭ２０内で発生した障害の情報を出力する。
【０２３０】
＜３．５．シャドウＰＴエントリの生成処理＞
上記図２３のＳ３３５０で行うシャドウＰＴエントリの生成は、図２４に示すように、第２のＰＴのフォーマット及びデータを参照する点のみが実施例１と異なる。
【０２３１】
Ｓ３４００では、第２のＰＴのフォーマットがIntel64用のフォーマットであるかを調査し、Intel64用のフォーマットであればＳ２４１０へ進み、非Intel64用のフォーマットであればＳ２４３０に進む。
【０２３２】
Ｓ２４１０は、実施例１と同一である。
【０２３３】
Ｓ２４２０では、ページ例外が生じたメモリ領域に対応するシャドウＰＴ１４０のＰＭＬ４エントリ１１０１を、第２のＰＴ１７０の設定に基づいて、生成済みの状態に変更する。本処理に於いては、ページ例外が生じたメモリ領域とは異なるメモリ領域に対応するＰＭＬ４エントリ１１０１を、追加で生成しても構わない。
【０２３４】
Ｓ２４３０は、実施例１と同一である。
【０２３５】
Ｓ２４４０では、ページ例外が生じたメモリ領域に対応するシャドウＰＴ１４０のＰＤＰエントリ１１０２を、第２のＰＴ１７０の設定に基づいて、生成済みの状態に変更する。本処理に於いては、ページ例外が生じたメモリ領域とは異なるメモリ領域に対応するＰＤＰエントリ１１０２を、追加で生成しても構わない。
【０２３６】
Ｓ２４５０は、実施例１と同一である。
【０２３７】
Ｓ２４６０では、ページ例外が生じたメモリ領域に対応するシャドウＰＴ１４０のＰＤＥエントリ１１０３を、第２のＰＴ１７０の設定に基づいて、生成済みの状態に変更する。本処理に於いては、ページ例外が生じたメモリ領域とは異なるメモリ領域に対応するＰＤＥエントリ１１０３を、追加で生成しても構わない。
【０２３８】
Ｓ２４７０は、実施例１と同一である。
【０２３９】
Ｓ２４８０では、ページ例外が生じたメモリ領域に対応するシャドウＰＴ１４０のＰＴＥエントリ１１０４を、第２のＰＴ１７０の設定に基づいて、生成済みの状態に変更する。本処理に於いては、ページ例外が生じたメモリ領域とは異なるメモリ領域に対応するＰＴＥエントリ１１０４を、追加で生成しても構わない。
【０２４０】
上記図２４のＳ２４２０で行うＰＭＬ４エントリの生成は、図２５に示すように、第２のＰＴ１７０を参照する点のみが実施例１と異なる。
【０２４１】
Ｓ２５００からＳ２５４８のループでは、生成対象となるＰＭＬ４エントリ１１０１を順次生成する。生成対象となるＰＭＬ４エントリ１１０１が１つのみの場合は、単に、本ループを１度だけ実行する。
【０２４２】
Ｓ３５０４では、生成するシャドウＰＴ１４０のＰＭＬ４エントリ１１０１に対応する第２のＰＴ１７０のＰＭＬ４エントリ１１０１に関して、ＲＳＶビットが０であるかを判定する。ＲＳＶビットが０である場合はＳ３５１２へ進み、ＲＳＶビットが非０である場合はＳ３５０８へ進む。
【０２４３】
Ｓ３５０８では、第２のＰＴの特性データ１０２に含まれる、稼動中のゲストのゲスト番号と第２のＰＴに対応するエントリに対して、予約ビット使用履歴を１に変更する。
【０２４４】
Ｓ３５１２では、生成するシャドウＰＴ１４０のＰＭＬ４エントリ１１０１に対応する第２のＰＴ１７０のＰＭＬ４エントリ１１０１に関して、Ｐビットが０であるかを判定する。Ｐビットが０である場合はＳ２５２８へ進み、Ｐビットが非０である場合はＳ２５１６へ進む。
【０２４５】
Ｓ２５１６では、生成するシャドウＰＴ１４０のＰＭＬ４エントリ１１０１に対応するメモリ領域が読み書きに対してエミュレーションを要するか否かを判定する。本処理に於いて、読み書きに対してエミュレーションを要するメモリ領域とは、第２のＰＴに於いてＡビットが０に設定されたメモリ領域である。当該メモリ領域が、読み書きに対してエミュレーションを要する場合にはＳ２５２０へ進み、読み書きに対してエミュレーションを必要としない場合にはＳ２５２４へ進む。
【０２４６】
Ｓ２５２０、Ｓ２５２４、Ｓ２５２８は、実施例１と同一である。
【０２４７】
Ｓ３５３２では、生成するシャドウＰＴ１４０のＰＭＬ４エントリ１１０１に対応する第２のＰＴ１７０のＰＭＬ４エントリ１１０１に関して、Ｒ／Ｗビットが０であるかを判定する。Ｒ／Ｗビットが０である場合はＳ２５４４へ進み、Ｒ／Ｗビットが非０である場合はＳ２５３６へ進む。
【０２４８】
Ｓ２５３６では、生成するシャドウＰＴ１４０のＰＭＬ４エントリ１１０１に対応するメモリ領域が書き込みに対してエミュレーションを要するか否かを判定する。本処理に於いて、書き込みに対してエミュレーションを要するメモリ領域とは、第２のＰＴに於いてＤビットが０に設定されたメモリ領域である。当該メモリ領域が、書き込みに対してエミュレーションを要する場合にはＳ２５４４へ進み、読み書きに対してエミュレーションを必要としない場合にはＳ２５４０へ進む。
【０２４９】
Ｓ２５４０、Ｓ２５４４は、実施例１と同一である。
【０２５０】
上記図２４のＳ２４４０で行うＰＤＰエントリの生成は、図２６に示すように、第２のＰＴ１７０を参照する点のみが実施例１と異なる。
【０２５１】
Ｓ３６００では、稼動中のゲストに第２のＰＴが存在するか否かを調べる。第２のＰＴの存在は、第２のＰＴの特性データ１０２を参照して第２のＰＴのフォーマットから判断する。第２のＰＴが存在する場合はＳ３６０４へ進み、第２のＰＴが存在しない場合はＳ２６６０へ進む。
【０２５２】
Ｓ３６０４では、ＰＤＰエントリ１１０２の生成対象となるメモリ領域に対して、第２のＰＴにＰＤＰテーブル１００２が存在するか否かを調べる。ｘ８６互換ＣＰＵでは、ＰＴのフォーマットによってはＰＤＰテーブル１００２が存在しない。従って第２のＰＴに於けるＰＤＰテーブル１００２の存在は、第２のＰＴの特性データ１０２を参照して第２のＰＴのフォーマットから判断する。第２のＰＴに、対応するＰＤＰテーブル１００２が存在する場合にはＳ２６０８へ進み、対応するテーブル１００２が存在しない場合にはＳ２６６０へ進む。
【０２５３】
Ｓ２６０８からＳ２６５６のループでは、生成対象となるＰＤＰエントリ１１０２を順次生成する。生成対象となるＰＤＰエントリ１１０２が１つのみの場合は、単に、本ループを１度だけ実行する。
【０２５４】
Ｓ３６１２では、生成するシャドウＰＴ１４０のＰＤＰエントリ１１０２に対応する第２のＰＴ１７０のＰＤＰエントリ１１０２に関して、ＲＳＶビットが０であるかを判定する。ＲＳＶビットが０である場合はＳ３６２０へ進み、ＲＳＶビットが非０である場合はＳ３６１６へ進む。
【０２５５】
Ｓ３６１６で、第２のＰＴの特性データ１０２に含まれる、稼動中のゲストのゲスト番号と第２のＰＴに対応するエントリに対して、予約ビット使用履歴を１に変更する。
【０２５６】
Ｓ３６２０では、生成するシャドウＰＴ１４０のＰＤＰエントリ１１０２に対応する第２のＰＴ１７０のＰＤＰエントリ１１０２に関して、Ｐビットが０であるかを判定する。Ｐビットが０である場合はＳ２６３６へ進み、Ｐビットが非０である場合はＳ２６２４へ進む。
【０２５７】
Ｓ２６２４では、生成するシャドウＰＴ１４０のＰＤＰエントリ１１０２に対応するメモリ領域が読み書きに対してエミュレーションを要するか否かを判定する。本処理に於いて、読み書きに対してエミュレーションを要するメモリ領域とは、第２のＰＴに於いてＡビットが０に設定されたメモリ領域である。当該メモリ領域が、読み書きに対してエミュレーションを要する場合にはＳ２６２８へ進み、読み書きに対してエミュレーションを必要としない場合にはＳ２６３２へ進む。
【０２５８】
Ｓ２６２８、Ｓ２６３２、Ｓ２６３６は、実施例１と同一である。
【０２５９】
Ｓ３６４０では、生成するシャドウＰＴ１４０のＰＤＰエントリ１１０２に対応する第２のＰＴ１７０のＰＤＰエントリ１１０２に関して、Ｒ／Ｗビットが０であるかを判定する。Ｒ／Ｗビットが０である場合はＳ２６５２へ進み、Ｐビットが非０である場合はＳ２６４４へ進む。
【０２６０】
Ｓ２６４４では、生成するシャドウＰＴ１４０のＰＤＰエントリ１１０２に対応するメモリ領域が書き込みに対してエミュレーションを要するか否かを判定する。本処理に於いて、書き込みに対してエミュレーションを要するメモリ領域とは、第２のＰＴに於いてＤビットが０に設定されたメモリ領域である。当該メモリ領域が、書き込みに対してエミュレーションを要する場合にはＳ２６５２へ進み、読み書きに対してエミュレーションを必要としない場合にはＳ２６４８へ進む。
【０２６１】
Ｓ２６４８、Ｓ２８５２は、実施例１と同一である。
【０２６２】
Ｓ２６６０からＳ２６６８のループは、実施例１と同一である。Ｓ２６６４は、実施例１と同一である。
【０２６３】
上記図２４のＳ２４６０で行うＰＤＥエントリの生成は、図２７に示すように、第２のＰＴ１７０を参照する点のみが実施例１と異なる。
【０２６４】
Ｓ３７００では、稼動中のゲストに第２のＰＴが存在するか否かを調べる。第２のＰＴの存在は、第２のＰＴの特性データ１０２を参照して第２のＰＴのフォーマットから判断する。第２のＰＴが存在する場合はＳ２７０４へ進み、第２のＰＴが存在しない場合はＳ２７５６へ進む。
【０２６５】
Ｓ２７０４からＳ２７５２のループでは、生成対象となるＰＤＥエントリ１１０３を順次生成する。生成対象となるＰＤＥエントリ１１０３が１つのみの場合は、単に、本ループを１度だけ実行する。
【０２６６】
Ｓ３７０８では、生成するシャドウＰＴ１４０のＰＤＥエントリ１１０３に対応する第２のＰＴ１７０のＰＤＥエントリ１１０３に関して、ＲＳＶビットが０であるかを判定する。ＲＳＶビットが０である場合はＳ３７１６へ進み、ＲＳＶビットが非０である場合はＳ３７１２へ進む。
【０２６７】
Ｓ３７１２では、第２のＰＴの特性データ１０２に含まれる、稼動中のゲストのゲスト番号と第２のＰＴに対応するエントリに対して、予約ビット使用履歴を１に変更する。
【０２６８】
Ｓ３７１６では、生成するシャドウＰＴ１４０のＰＤＥエントリ１１０３に対応する第２のＰＴ１７０のＰＤＥエントリ１１０３に関して、Ｐビットが０であるかを判定する。Ｐビットが０である場合はＳ２７３２へ進み、Ｐビットが非０である場合はＳ２７２０へ進む。
【０２６９】
Ｓ２７２０では、生成するシャドウＰＴ１４０のＰＤＥエントリ１１０３に対応するメモリ領域が読み書きに対してエミュレーションを要するか否かを判定する。本処理に於いて、読み書きに対してエミュレーションを要するメモリ領域とは、第２のＰＴに於いて、Ａビットが０に設定されたメモリ領域である。当該メモリ領域が、読み書きに対してエミュレーションを要する場合にはＳ２７２４へ進み、読み書きに対してエミュレーションを必要としない場合にはＳ２７２８へ進む。
【０２７０】
Ｓ２７２４、Ｓ２７２８、Ｓ２７３２は、実施例１と同一である。
【０２７１】
Ｓ２７３６では、生成するシャドウＰＴ１４０のＰＤＥエントリ１１０３に対応する第２のＰＴ１７０のＰＤＥエントリ１１０３に関して、Ｒ／Ｗビットが０であるかを判定する。Ｒ／Ｗビットが０である場合はＳ２７４８へ進み、Ｒ／Ｗビットが非０である場合はＳ２７４０へ進む。
【０２７２】
Ｓ２７４０では、生成するシャドウＰＴ１４０のＰＤＥエントリ１１０３に対応するメモリ領域が書き込みに対してエミュレーションを要するか否かを判定する。本処理に於いて、書き込みに対してエミュレーションを要するメモリ領域とは、第２のＰＴに於いてＤビットが０に設定されたメモリ領域である。当該メモリ領域が、書き込みに対してエミュレーションを要する場合にはＳ２７４８へ進み、読み書きに対してエミュレーションを必要としない場合にはＳ２７４４へ進む。
【０２７３】
Ｓ２７４４、Ｓ２７４８は、実施例１と同一である。
【０２７４】
Ｓ２７５６からＳ２７６４のループは、実施例１と同一である。Ｓ２７６０は、実施例１と同一である。
【０２７５】
上記図２４のＳ２４８０で行うＰＴＥエントリの生成は、図２８に示すように、第２のＰＴ１７０を参照する点のみが実施例１と異なる。
【０２７６】
Ｓ３８００では、稼動中のゲストに第２のＰＴが存在するか否かを調べる。第２のＰＴの存在は、第２のＰＴの特性データ１０２を参照して第２のＰＴのフォーマットから判断する。第２のＰＴが存在する場合はＳ３８０４へ進み、第２のＰＴが存在しない場合はＳ２８５６へ進む。
【０２７７】
Ｓ３８０４では、ＰＴＥエントリ１１０４の生成対象となるメモリ領域に対して、第２のＰＴにＰＴＥテーブル１００４が存在するか否かを調べる。第２のＰＴに於いて、当該メモリ領域に対応するＰＤＥエントリ１１０３がＰＳ＝１である場合のみ、対応するＰＴＥテーブル１００４は存在しない。第２のＰＴに、対応するＰＴＥテーブル１００４が存在する場合にはＳ２８０８へ進み、対応するＰＴＥテーブル１００４が存在しない場合にはＳ２８５６へ進む。
【０２７８】
Ｓ２８０８からＳ２８５２のループでは、生成対象となるＰＴＥエントリ１１０４を順次生成する。生成対象となるＰＴＥエントリ１１０４が１つのみの場合は、単に、本ループを１度だけ実行する。
【０２７９】
Ｓ３８１２では、生成するシャドウＰＴ１４０のＰＴＥエントリ１１０４に対応する第２のＰＴ１７０のＰＴＥエントリ１１０４に関して、ＲＳＶビットが０であるかを判定する。ＲＳＶビットが０である場合はＳ３８２０へ進み、ＲＳＶビットが非０である場合はＳ３８１６へ進む。
【０２８０】
Ｓ３８１６では、第２のＰＴの特性データ１０２に含まれる、稼動中のゲストのゲスト番号と第２のＰＴに対応するエントリに対して、予約ビット使用履歴を１に変更する。
【０２８１】
Ｓ３８２０では、生成するシャドウＰＴ１４０のＰＴＥエントリ１１０４に対応する第２のＰＴ１７０のＰＴＥエントリ１１０４に関して、Ｐビットが０であるかを判定する。Ｐビットが０である場合はＳ２８３６へ進み、Ｐビットが非０である場合はＳ２８２４へ進む。
【０２８２】
Ｓ２８２４では、生成するシャドウＰＴ１４０のＰＴＥエントリ１１０４に対応するメモリ領域が読み書きに対してエミュレーションを要するか否かを判定する。本処理に於いて、読み書きに対してエミュレーションを要するメモリ領域とは、以下２つのいずれかの条件を満たすメモリ領域である。（条件１）ＩＯ装置の制御に使用するＭＭＩＯメモリ領域。（条件２）第２のＰＴに於いて、Ａビットが０に設定されたメモリ領域。当該メモリ領域が、読み書きに対してエミュレーションを要する場合にはＳ２８２８へ進み、読み書きに対してエミュレーションを必要としない場合にはＳ２８３２へ進む。
【０２８３】
Ｓ２８２８、Ｓ２８３２、Ｓ２８３６は、実施例１と同一である。
【０２８４】
Ｓ３８９２では、生成するシャドウＰＴ１４０のＰＴＥエントリ１１０４に対応する第２のＰＴ１７０のＰＴＥエントリ１１０４に関して、Ｒ／Ｗビットが０であるかを判定する。Ｒ／Ｗビットが０である場合はＳ２８４８へ進み、Ｒ／Ｗビットが非０である場合はＳ２８４０へ進む。
【０２８５】
Ｓ２８４０では、生成するシャドウＰＴ１４０のＰＴＥエントリ１１０４に対応するメモリ領域が書き込みに対してエミュレーションを要するか否かを判定する。本処理に於いて、書き込みに対してエミュレーションを要するメモリ領域とは、以下２つのいずれかの条件を満たすメモリ領域である。（条件１）第２のＰＴが存在するメモリ領域。（条件２）第２のＰＴに於いて、Ｄビットが０に設定されたメモリ領域。当該メモリ領域が、書き込みに対してエミュレーションを要する場合にはＳ２８４８へ進み、読み書きに対してエミュレーションを必要としない場合にはＳ２８４４へ進む。
【０２８６】
Ｓ２８４４、Ｓ２８４８は、実施例１と同一である。
【０２８７】
Ｓ２８５６からＳ２８８４のループでは、生成対象となるＰＴＥエントリ１１０４を順次生成する。生成対象となるＰＴＥエントリ１１０４が１つのみの場合は、単に、本ループを１度だけ実行する。
【０２８８】
Ｓ２８６０では、生成するシャドウＰＴ１４０のＰＴＥエントリ１１０４に対応するメモリ領域が読み書きに対してエミュレーションを要するか否かを判定する。本処理に於いて、読み書きに対してエミュレーションを要するメモリ領域とは、ＩＯ装置の制御に使用するＭＭＩＯメモリ領域である。当該メモリ領域が、読み書きに対してエミュレーションを要する場合にはＳ２８６４へ進み、読み書きに対してエミュレーションを必要としない場合にはＳ２８６８へ進む。
【０２８９】
Ｓ２８６４、Ｓ２８６８は、実施例１と同一である。
【０２９０】
＜４．まとめ＞
以上に示した実施例によれば、シャドウＰＴ１４０のＲＳＶビットを用いて特権メモリに対する読み書き操作を禁止することで、ＶＭＭ２０上で第２のＯＳ４０を稼動させた状態でＰビットの設定に違反する操作が行われた場合に、エミュレーションが不要であることを高速に判断できるため、オーバヘッドを抑制することができる。
【０２９１】
以上、本発明者によってなされた発明を実施の形態に基づき具体的に説明したが、本発明は前記実施の形態に限定されるものではなく、その要旨を逸脱しない範囲で種々変更可能であることはいうまでもない。
【産業上の利用可能性】
【０２９２】
本発明の仮想計算機システムは、ｘ８６互換のＣＰＵを備えた仮想計算機システムに適用して特に有益な技術であり、これに限らず、仮想計算機システム全般に対して広く適用可能である。
【図面の簡単な説明】
【０２９３】
【図１】本発明の前提として検討した仮想計算機システムの構成例を示すブロック図である。
【図２】本発明の前提として検討した仮想計算機システムの他の構成例を示すブロック図である。
【図３】本発明の実施例１において、仮想計算機システムのハードウェア構成例を示す概略図である。
【図４】本発明の実施例１において、仮想計算機システムのソフトウェアとハードウェアの要部の構成例を示すブロック図である。
【図５】本発明の実施例１において、主記憶のメモリマップの一例を示す図である。
【図６】Intel64を用いた場合のページテーブルの構成を示す図である。
【図７】Intel64を用いた場合のページテーブルのエントリのフォーマットを示す図である。
【図８】Intel64を用いた場合のページ例外発生時の原因コードのフォーマットを示す図である。
【図９】本発明の実施例１において、第１のＰＴの特性データの構成例を示す図である。
【図１０】本発明の実施例１及び２において、ゲスト及びＶＭＭの動作概要の一例を示すフローチャートである。
【図１１】本発明の実施例１において、シャドウＰＴの初期化処理の一例を示すフローチャートである。
【図１２】本発明の実施例１及び２において、シャドウＰＴの再初期化処理の一例を示すフローチャートである。
【図１３】本発明の実施例１において、ページ例外に対するＶＭＭの処理の一例を示すフローチャートである。
【図１４】本発明の実施例１において、シャドウＰＴエントリの生成処理の一例を示すフローチャートである。
【図１５】本発明の実施例１において、シャドウＰＭＬ４エントリの生成処理の一例を示すフローチャートである。
【図１６】本発明の実施例１において、シャドウＰＤＰエントリの生成処理の一例を示すフローチャートである。
【図１７】本発明の実施例１において、シャドウＰＤＥエントリの生成処理の一例を示すフローチャートである。
【図１８】本発明の実施例１において、シャドウＰＴＥエントリの生成処理の一例を示すフローチャートである。
【図１９】本発明の実施例２において、仮想計算機システムのハードウェア構成例を示す概略図である。
【図２０】本発明の実施例２において、仮想計算機システムのソフトウェアとハードウェアの要部の構成例を示すブロック図である。
【図２１】本発明の実施例２において、主記憶のメモリマップの一例を示す図である。
【図２２】本発明の実施例２において、第２のＰＴの特性データの構成例を示す図である。
【図２３】本発明の実施例２において、ページ例外に対するＶＭＭの処理の一例を示すフローチャートである。
【図２４】本発明の実施例２において、シャドウＰＴエントリの生成処理の一例を示すフローチャートである。
【図２５】本発明の実施例２において、シャドウＰＭＬ４エントリの生成処理の一例を示すフローチャートである。
【図２６】本発明の実施例２において、シャドウＰＤＰエントリの生成処理の一例を示すフローチャートである。
【図２７】本発明の実施例２において、シャドウＰＤＥエントリの生成処理の一例を示すフローチャートである。
【図２８】本発明の実施例２において、シャドウＰＴＥエントリの生成処理の一例を示すフローチャートである。
【図２９】本発明の実施例２において、シャドウＰＴの初期化処理の一例を示すフローチャートである。
【図３０】ＶＴ−ｘ対応ＣＰＵを用いた場合の、page-fault error code mask/match機能の制御に用いるデータ構造である。
【図３１】仮想計算機内のＯＳに含まれるページテーブル（ＰＴ）の構成例を示す図である。
【図３２】本発明の前提として検討した仮想計算機システムにおいて、それに含まれるシャドウＰＴの構成例を示す図である。
【図３３】本発明の一実施の形態による仮想計算機システムにおいて、それに含まれるシャドウＰＴの構成例を示す図である。
【符号の説明】
【０２９４】
１０  物理計算機
２０  ＶＭＭ
２５  仮想計算機
３０  第１のＯＳ
４０  第２のＯＳ
５０  ＡＰ
６０  ＣＰＵ
７０  ２つのＰＴを用いるページ例外検出機能
７１  １つのＰＴのみを用いるページ例外検出機能
７２  ＰＴアドレスレジスタ
７３  ＴＬＢ
７４  ＰＴアドレスレジスタＡ
７５  ＰＴアドレスレジスタＢ
７６  page-fault error code mask/match機能
８０  イベントハンドラ
８５  障害処理部
９０  ページ例外の原因コード解析部
１００  第１のＰＴ履歴管理部
１０１  第１のＰＴの特性データ
１０２  第２のＰＴの特性データ
１０５  第２のＰＴ履歴管理部
１１０  第１のＰＴ解析部
１１５  第２のＰＴ解析部
１２０  イベント報告部
１３０  エミュレータ
１４０  シャドウＰＴ
１６０  第１のＰＴ
１６２  第１のイベントハンドラ
１７０  第２のＰＴ
１７２  第２のイベントハンドラ
２１５  主記憶
２１６  ＭＭＩＯアドレス
２１８  物理メモリ空間
【図１】
2008305106.tif 000003
【図２】
2008305106.tif 000004
【図３】
2008305106.tif 000005
【図４】
2008305106.tif 000006
【図５】
2008305106.tif 000007
【図６】
2008305106.tif 000008
【図７】
2008305106.tif 000009
【図８】
2008305106.tif 000010
【図９】
2008305106.tif 000011
【図１０】
2008305106.tif 000012
【図１１】
2008305106.tif 000013
【図１２】
2008305106.tif 000014
【図１３】
2008305106.tif 000015
【図１４】
2008305106.tif 000016
【図１５】
2008305106.tif 000017
【図１６】
2008305106.tif 000018
【図１７】
2008305106.tif 000019
【図１８】
2008305106.tif 000020
【図１９】
2008305106.tif 000021
【図２０】
2008305106.tif 000022
【図２１】
2008305106.tif 000023
【図２２】
2008305106.tif 000024
【図２３】
2008305106.tif 000025
【図２４】
2008305106.tif 000026
【図２５】
2008305106.tif 000027
【図２６】
2008305106.tif 000028
【図２７】
2008305106.tif 000029
【図２８】
2008305106.tif 000030
【図２９】
2008305106.tif 000031
【図３０】
2008305106.tif 000032
【図３１】
2008305106.tif 000033
【図３２】
2008305106.tif 000034
【図３３】
2008305106.tif 000035