CPUとメモリを有する計算機を用いて複数のOSを稼動させる仮想計算機の制御プログラムであって、前記CPUは、メモリ領域毎の操作可否情報を格納する第2のデータ群に基づいて制御されるメモリ保護機能を有し、前記第2のデータ群には、メモリアドレスの有効性の判定に用いられるフィールドである第1のフィールドと、用途が未設定のフィールドである第2のフィールドが備わり、前記OSは、前記第2のデータ群と同じデータ構造を持つ第1のデータ群を前記メモリ上で管理し、前記メモリ保護機能は、前記第2のデータ群における前記第1または前記第2のフィールドが操作禁止の設定である場合に、当該メモリ領域の操作命令に対して保護例外を発生し、当該保護例外の発生理由となったフィールドを示す原因コードを生成し、前記第2のデータ群は、前記第1のデータ群を基準として、前記第2のフィールドが操作禁止の設定に変更されたものであり、前記制御プログラムは、前記第1のデータ群を参照して前記第2のデータ群を生成する手順と、前記メモリ保護機能に前記第2のデータ群を参照させる手順と、前記第2のデータ群の初期化時に、前記第1のデータ群中の前記第2のフィールドの利用履歴を示す利用フラグをリセットする手順と、前記第1のデータ群中の前記第2のフィールドの設定を読み、操作禁止が設定されている場合に前記利用フラグをセットする手順と、前記保護例外の発生時に、前記原因コードと、前記利用フラグと、に基づいて、IO装置の制御に伴うエミュレーションの要否判定を行う手順と、を前記計算機に実行させることを特徴とする仮想計算機の制御プログラム。請求項1記載の仮想計算機の制御プログラムであって、前記エミュレーションの要否判定を行う手順は、前記利用フラグがリセットされているか否かに基づいて前記エミュレーションの要否判定を行う、ことを特徴とする仮想計算機の制御プログラム。請求項2記載の仮想計算機の制御プログラムであって、前記エミュレーションの要否判定を行う手順は、前記保護例外の発生時に、前記原因コードが前記第2のフィールドを示し、かつ前記利用フラグがリセットされている場合に、前記エミュレーションを要と判断する、ことを特徴とする仮想計算機の制御プログラム。請求項1記載の仮想計算機の制御プログラムであって、前記第1および前記第2のデータ群のそれぞれは、アドレス変換に用いるデータ群である、ことを特徴とする仮想計算機の制御プログラム。請求項1記載の仮想計算機の制御プログラムであって、前記エミュレーションの要否判定を行う手順は、前記原因コードが示す当該保護例外の発生理由が前記第1のフィールドである場合には、前記エミュレーションを不要と判断する、ことを特徴とする仮想計算機の制御プログラム。請求項1記載の仮想計算機の制御プログラムであって、前記CPUは、VT-xに対応したx86互換CPUであり、前記第1のフィールドはPresentビットであり、前記第2のフィールドはReservedビットであり、前記原因コードは、ページフォルトのエラーコードであり、前記OSは、OSのイベントハンドラを有し、前記制御プログラムは、前記CPUが有するpagefaulterrorcodemaskとpagefaulterrorcodematchとexceptionbitmapを、Presentビットが0であるメモリ領域の操作に起因するページフォルトの発生時に前記OSのイベントハンドラに直接分岐する設定にする手順を前記計算機に実行させることを特徴とする仮想計算機の制御プログラム。請求項1記載の仮想計算機の制御プログラムであって、前記OSは、当該OS上で複数の第2のOSを稼動させる機能を有する第1のOSであり、前記第2のOSは、前記第2のデータ群と同じデータ構造を持つ第3のデータ群と、第2のイベントハンドラとを有し、前記CPUは、x86互換CPUであり、前記第1のフィールドはPresentビットであり、前記第2のフィールドはReservedビットであり、前記原因コードは、ページフォルトのエラーコードであり、前記CPUは、前記第2のイベントハンドラを呼び出すページフォルトの条件を規定する第4のデータ群と、前記仮想計算機の制御プログラムが有するイベントハンドラに報告するページフォルトの条件を規定する第5のデータ群を用いるCPUであって、前記制御プログラムは、前記第3のデータ群を、前記第4のデータ群として、前記CPUに参照させる手順と、前記第2のデータ群を、前記第5のデータ群として、前記CPUに参照させる手順と、を前記計算機に実行させることを特徴とする仮想計算機の制御プログラム。請求項1記載の仮想計算機の制御プログラムであって、前記第2のデータ群は、IO装置の制御に用いられるメモリ領域に対応する前記第2のフィールドが操作禁止の設定に変更されたものである、ことを特徴とする仮想計算機の制御プログラム。CPUとメモリを有し、複数のOSおよび前記複数のOSを稼動する制御プログラムが実装された計算機システムであって、前記CPUは、メモリ領域毎の操作可否情報を格納する第2のデータ群に基づいて制御されるメモリ保護機能を有し、前記第2のデータ群には、メモリアドレスの有効性の判定に用いられるフィールドである第1のフィールドと、用途が未設定のフィールドである第2のフィールドが備わり、前記OSは、前記第2のデータ群と同じデータ構造を持つ第1のデータ群を前記メモリ上で管理し、前記メモリ保護機能は、前記第2のデータ群における前記第1または前記第2のフィールドが操作禁止の設定である場合に、当該メモリ領域の操作命令に対して保護例外を発生し、当該保護例外の発生理由となったフィールドを示す原因コードを生成し、前記第2のデータ群は、前記第1のデータ群を基準として、前記第2のフィールドが操作禁止の設定に変更されたものであり、前記制御プログラムは、前記第1のデータ群を参照して前記第2のデータ群を生成する機能と、前記メモリ保護機能に前記第2のデータ群を参照させる機能と、前記第2のデータ群の初期化時に、前記第1のデータ群中の前記第2のフィールドの利用履歴を示す利用フラグをリセットする機能と、前記第1のデータ群中の前記第2のフィールドの設定を読み、操作禁止が設定されている場合に前記利用フラグをセットする機能と、前記保護例外の発生時に、前記原因コードと、前記利用フラグと、に基づいて、IO装置の制御に伴うエミュレーションの要否判定を行う機能、を有することを特徴とする計算機システム。請求項9記載の計算機システムであって、前記エミュレーションの要否判定を行う機能は、前記利用フラグがリセットされているか否かに基づいて前記エミュレーションの要否判定を行う、ことを特徴とする計算機システム。請求項10記載の計算機システムであって、前記エミュレーションの要否判定を行う機能は、前記保護例外の発生時に、前記原因コードが前記第2のフィールドを示し、かつ前記利用フラグがリセットされている場合に、前記エミュレーションを要と判断する、ことを特徴とする計算機システム。請求項9記載の計算機システムであって、前記第1および前記第2のデータ群のそれぞれは、アドレス変換に用いるデータ群である、ことを特徴とする計算機システム。請求項9記載の計算機システムであって、前記エミュレーションの要否判定を行う機能は、前記原因コードが示す当該保護例外の発生理由が前記第1のフィールドである場合には、前記エミュレーションを不要と判断する、ことを特徴とする計算機システム。請求項9記載の計算機システムであって、前記CPUは、VT-xに対応したx86互換CPUであり、前記第1のフィールドはPresentビットであり、前記第2のフィールドはReservedビットであり、前記原因コードは、ページフォルトのエラーコードであり、前記OSは、OSのイベントハンドラを有し、前記制御プログラムは、前記CPUが有するpagefaulterrorcodemaskとpagefaulterrorcodematchとexceptionbitmapを、Presentビットが0であるメモリ領域の操作に起因するページフォルトの発生時に前記OSのイベントハンドラに直接分岐する設定にする機能を有する、ことを特徴とする計算機システム。請求項9記載の計算機システムであって、前記OSは、当該OS上で複数の第2のOSを稼動させる機能を有する第1のOSであり、前記第2のOSは、前記第2のデータ群と同じデータ構造を持つ第3のデータ群と、第2のイベントハンドラとを有し、前記CPUは、x86互換CPUであり、前記第1のフィールドはPresentビットであり、前記第2のフィールドはReservedビットであり、前記原因コードは、ページフォルトのエラーコードであり、前記CPUは、前記第2のイベントハンドラを呼び出すページフォルトの条件を規定する第4のデータ群と、前記仮想計算機の制御プログラムが有するイベントハンドラに報告するページフォルトの条件を規定する第5のデータ群を用いるCPUであって、前記制御プログラムは、前記第3のデータ群を、前記第4のデータ群として、前記CPUに参照させる機能と、前記第2のデータ群を、前記第5のデータ群として、前記CPUに参照させる機能とを有する、ことを特徴とする計算機システム。請求項9記載の計算機システムであって、前記第2のデータ群は、IO装置の制御に用いられるメモリ領域に対応する前記第2のフィールドが操作禁止の設定に変更されたものである、ことを特徴とする計算機システム。CPUとメモリを有する計算機を用いて複数のOSを稼動させる仮想計算機の制御方法であって、前記CPUは、メモリ領域毎の操作可否情報を格納する第2のデータ群に基づいて制御されるメモリ保護機能を有し、前記第2のデータ群には、メモリアドレスの有効性の判定に用いられるフィールドである第1のフィールドと、用途が未設定のフィールドである第2のフィールドが備わり、前記OSは、前記第2のデータ群と同じデータ構造を持つ第1のデータ群を前記メモリ上で管理し、前記メモリ保護機能は、前記第2のデータ群における前記第1または前記第2のフィールドが操作禁止の設定である場合に、当該メモリ領域の操作命令に対して保護例外を発生し、当該保護例外の発生理由となったフィールドを示す原因コードを生成し、前記第1のデータ群を基準として、前記第2のフィールドが操作禁止の設定に変更して前記第2のデータ群を構成し、前記第1のデータ群を参照して前記第2のデータ群を生成し、前記メモリ保護機能に前記第2のデータ群を参照させ、前記第2のデータ群の初期化時に、前記第1のデータ群中の前記第2のフィールドの利用履歴を示す利用フラグをリセットし、前記第1のデータ群中の前記第2のフィールドの設定を読み、操作禁止が設定されている場合に前記利用フラグをセットし、前記保護例外の発生時に、前記原因コードと、前記利用フラグと、に基づいて、IO装置の制御に伴うエミュレーションの要否判定を行う、ことを特徴とする仮想計算機の制御方法。請求項17記載の仮想計算機の制御方法であって、前記エミュレーションの要否判定を行う際に、前記利用フラグがリセットされているか否かに基づいて前記エミュレーションの要否判定を行う、ことを特徴とする仮想計算機の制御方法。請求項18記載の仮想計算機の制御方法であって、前記エミュレーションの要否判定を行う際に、前記保護例外の発生時に、前記原因コードが前記第2のフィールドを示し、かつ前記利用フラグがリセットされている場合に、前記エミュレーションを要と判断する、ことを特徴とする仮想計算機の制御方法。前述したような仮想計算機技術を採用したサーバ等の計算機は、ゲストゲストOS及び、ゲストOS上で稼動するソフトウェアの総称を稼動させる複数の仮想計算機VM:VirtualMachineと、仮想計算機の制御を行う仮想計算機モニタVMMとを有する。VMM上で稼動するOSの一部は、Xen対応LinuxやWindows登録商標Hypervisorのように、当該OS上で別のOSを稼動させる機能を有する。以下では、別のOSを稼動させる機能を備えたOSを第1のOSと呼ぶ。一方で、別のOSを稼動させる機能を備えないOSを第2のOSと呼ぶ。一般に、ゲストは計算機のハードウェアを占有する前提で作られている。従って、仮想計算機技術によってサーバ統合を実現する上では、各仮想計算機に、各ゲストが計算機を占有する場合と同じ動作をさせる必要がある。本要件を満たすためにVMMは、ゲストに含まれる特権命令ハードウェアを操作する命令のエミュレーションを行う。本エミュレーションは、性能低下を招くため、エミュレーションには高速性が求められる。ハードウェアの操作は、IO装置の制御に用られる特権メモリに対する操作と、CPU内の特権レジスタに対する操作に大別される。従って、特権命令は、特権メモリの操作を伴うメモリ特権命令と、特権メモリの操作を伴わないレジスタ特権命令に分類できる。レジスタ特権命令は、インテル社製のx86互換CPUに搭載されたVT-x機能やAMD社製のx86互換CPUに搭載されたAMD-V機能といった、VMM支援機能を用いれば高速にエミュレーション可能である。一方で、メモリ特権命令に関しては、エミュレーションの方法次第でオーバヘッドが大きく変化するため、メモリ特権命令のエミュレーション方法が重要になる。x86互換CPUを搭載する計算機を用いて第2のOSを複数稼動させる場合で、メモリ特権命令のエミュレーションを行うために必要と考えられる仮想計算機システムの構成例を図1および図2に示す。図1において、エミュレーションには、物理計算機10に搭載されたCPU60が提供するページ例外検出機能71を利用する。VMM20は、エミュレーションに伴うオーバヘッドを抑制するために、エミュレーションの要否判定を行い、必要と判定した場合のみエミュレーションを行う。ページ例外検出機能71には、メモリ領域毎のアクセス可否情報を保持するTLB73と、メモリ領域毎のアクセス可否情報を保持するページテーブルのメモリアドレスを保持するPTアドレスレジスタ72が含まれる。アクセス可否情報には、読み書きの一切を禁止するPresentビット、書き込みを禁止するRead/Writeビットと、読み書きの一切を禁止するReservedビットRSVビットが含まれる。アクセス可否情報に違反するメモリ操作を検出した場合、ページ例外検出機能71はページ例外を発生させて、プログラムの実行をイベントハンドラ80に遷移させる。またイベントハンドラ80に、アクセス可否情報のどのビットに違反したかを示す原因コードを渡す。VMM20は仮想計算機25を構築し、VMM20上で稼動する第2のOS40は、第2のPT170と第2のイベントハンドラ172を有し、第2のPT170にメモリ領域毎のアクセス可否情報を設定する。また第2のOS40上ではアプリケーションAP50が動作する。VMM20は、第2のPT170を参照し、特権メモリに対してPビットやR/Wビットを用いてアクセス禁止を追加したシャドウPT140を生成し、PTアドレスレジスタ72に登録する。ページ例外検出機能71は、シャドウPT140の設定をTLB73にコピーし、シャドウPT140の設定に従ってページ例外を判定する。ページ例外を契機に、イベントハンドラ80が呼び出されると、VMM20は当該ページ例外が特権メモリの操作に起因するのか、第2のPT170でアクセス不可に指定されたメモリの操作ゲスト例外に起因するのかを判定するために、ページ例外の原因コード解析部90や第2のPT解析部115を呼び出す。ページ例外の原因コード解析部90では、ページ例外検出機能71から渡された原因コードを参照する。原因コードに於いてPビット及びR/Wビットのいずれにも違反がない場合は、VMM20は、当該ページ例外はゲスト例外に起因すると判断し、イベント報告部120を呼び出す。イベント報告部120は、ゲストに渡す原因コードを生成して、第2のイベントハンドラ172に分岐する。原因コードに於いてPビットまたはR/Wビットのいずれかに違反がある場合のみ、VMM20は、第2のPT解析部115を呼び出す。第2のPT解析部115は、第2のPT170を参照して、原因コードに示されたビットに関して、第2のPT170でアクセス禁止設定がなされているかを解析する。VMM20は、第2のPT170に於いてアクセス禁止設定がなされている場合に、当該ページ例外がゲスト例外に起因すると判断し、イベント報告部120を呼び出す。VMM20は、第2のPT170に於いてアクセス禁止設定がなされていない場合に、当該ページ例外が特権メモリ操作に起因すると判断し、エミュレータ130を呼び出してエミュレーションを行う。エミュレータ130は必要に応じてシャドウPT140を変更する。近年、x86互換のCPUにはVMMを支援する機能が追加される傾向にある。ページ例外に対するエミュレーション要否の判定に関しては、特許文献2に示されるようなPageFaultErrorCodeMaskMatch機能と、NestedPaging機能が追加されている。PageFaultErrorCodeMaskMatch機能は、ページ例外の原因コードに応じて、ページ例外発生時に分岐するイベントハンドラを選択する機能である。本機能を用いると、エミュレーションが必要な可能性のあるPビット違反又はR/Wビット違反のページ例外の場合だけイベントハンドラ80に分岐させ、エミュレーションが不要なそれ以外のページ例外の場合には第2のイベントハンドラ172に分岐させることで高速化が可能となる。NestedPaging機能は、ページ例外の検出に2つのページテーブルPTを使用し、ページ例外の原因となったページテーブルに応じて、ページ例外発生時に分岐するイベントハンドラを選択する機能である。本機能を用いると、エミュレーションが必要な可能性のあるシャドウPTの設定に違反した場合だけイベントハンドラ80に分岐させ、エミュレーションが不要な第2のPTの設定に違反した場合だけ第2のイベントハンドラ172に分岐させることで高速化が可能となる。NestedPaging機能のように、2つのPTを用いるページ例外検出機能を備えたx86互換CPUを用いると、第1のOSと第2のOSを混在させて複数稼動させる構成が可能となる。以下では図2を用いて、本構成を説明する。物理計算機10に搭載されるCPU60は、2つのPTを用いるページ例外検出機能70を備える。2つのPTを用いるページ例外検出機能70には、メモリ領域毎のアクセス可否情報を保持するTLB73と、第2のPT170のメモリアドレスを保持するPTアドレスレジスタA74と、シャドウPT140のメモリアドレスを保持するPTアドレスレジスタB75が含まれる。VMM20は仮想計算機25を構築し、VMM20上で稼動する第1のOS30は、第1のPT160と第1のイベントハンドラ162を有し、第1のPT160にメモリ領域毎のアクセス可否情報を設定する。また第1のOS30上では第2のOS40が動作する。VMM20上または第1のOS30上で稼動する第2のOS40は、第2のPT170と第2のイベントハンドラ172を有し、第2のPT170にメモリ領域毎のアクセス可否情報を設定する。また第2のOS40上ではアプリケーションAP50が動作する。VMM20は、第1のPT160を参照し、ハードウェア操作に使用するメモリアドレス特権メモリに対してPビットやR/Wビットを用いてアクセス禁止を追加したシャドウPT140を生成し、PTアドレスジスタB75に登録する。また、第2のPTのアドレスをPTアドレスレジスタA74に登録する。2つのPTを用いるページ例外検出機能70は、第2のPT170の設定とシャドウPT140の設定をTLB73にコピーし、ページ例外を判定する。シャドウPT140の設定に違反するページ例外を契機に、イベントハンドラ80が呼び出されると、VMMは当該ページ例外が特権メモリの操作に起因するのか、第1のPT160でアクセス不可に指定されたメモリの操作ゲスト例外に起因するのかを判定するために、ページ例外の原因コード解析部90や第1のPT解析部110を呼び出す。ページ例外の原因コード解析部90では、2つのPTを用いるページ例外検出機能70から渡された原因コードを参照する。原因コードに於いてPビット及びR/Wビットのいずれにも違反がない場合は、VMM20は、当該ページ例外はゲスト例外に起因すると判断し、イベント報告部120を呼び出す。イベント報告部120は、ゲストに渡す原因コードを生成して、第1のイベントハンドラ162に分岐する。原因コードに於いてPビットまたはR/Wビットのいずれかに違反がある場合のみ、VMM20は、第1のPT解析部110を呼び出す。第1のPT解析部110は、第1のPT160を参照して、原因コードに示されたビットに関して、第1のPT160でアクセス禁止設定がなされているかを解析する。VMM20は、第1のPT160に於いてアクセス禁止設定がなされている場合に、当該ページ例外がゲスト例外に起因すると判断し、イベント報告部120を呼び出す。VMM20は、第1のPT160に於いてアクセス禁止設定がなされていない場合に、当該ページ例外が特権メモリ操作に起因すると判断し、エミュレータ130を呼び出してエミュレーションを行う。エミュレータ130は必要に応じてシャドウPT140を変更する。以上に述べたようなエミュレーション動作は、VMMにとって本質的に必要な処理である。従って、エミュレーションに起因する性能低下オーバヘッドは止むを得ない。一方で、エミュレーション要否の判定は、本質的には不要な処理である。従って、オーバヘッドを抑制するためには、エミュレーションの要否判定を高速化する必要がある。仮想計算機システムに於いては以下の理由で、Pビットによるページ例外が、エミュレーション要否判定の処理がオーバヘッドを招く。一般にOSは、仮想記憶を実現するために、ページテーブルPTのPビットを用いる。特に新しいプロセスの開始時には、広範なメモリ領域に対してPビットをリセットし、読み書きの一切を禁止する。以降は、当該プロセスが新しいメモリ領域を操作する毎に、ページ例外が起きる。OSは当該ページ例外を契機に、当該プロセス用のメモリを確保して割り当てる。1つのPTだけを用いるページ例外検出機能を有するCPUを用いて、VMM上で第2のOSを稼動させる場合には、第2のOSがメモリ使用量の多いプロセスを実行する場合などに、ゲスト例外に起因するページ例外が多発する。本ページ例外に対して、VMMがエミュレーションの要否を判定する際には、本質的には不要なページ例外の原因コード解析部90と第2のPT解析部115の実行に伴って、大きなオーバヘッドが生じる問題がある。また、2つのPTを用いるページ例外検出機能を有するCPUを用いる場合は、VMM上で第1のOSを稼動させると、VMMがエミュレーションの要否を判定する際に、ページ例外の原因コード解析部90と第1のPT解析部110の実行を省略できないため、オーバヘッドが大きくなる問題がある。上記問題点を鑑みて、本発明の目的の一つは、エミュレーションに伴うオーバヘッドを抑制可能な仮想計算機システムおよびその制御プログラムを提供することにある。また、特に、メモリ使用量の多いプログラムを稼動させる場合のオーバヘッド抑制と、VMM上で第1のOSを稼動させる場合のオーバヘッド抑制の、両立を課題とする。本発明の前記ならびにその他の目的と新規な特徴は、本明細書の記述および添付図面から明らかになるであろう。本願において開示される発明のうち、代表的なものの概要を簡単に説明すれば、次のとおりである。2つのPTを用いるページ例外検出機能を備えたx86互換CPUを1つ以上有し、かつメモリを有する仮想計算機システムに実装され、第1のOS及び第2のOSを複数稼動させる機能を備えた制御プログラムに対して、a一般に第1のOS及び第2のOSのページテーブルで使用されない常時‘0’が設定されるRSVビットを活用することでIO装置の制御に用いるメモリ領域の操作を禁止したシャドウPTを生成する手順と、b第2のOSのPTとシャドウPTをそれぞれPTアドレスレジスタAとPTアドレスレジスタBに登録する手順と、cページ例外の発生時に原因コードを参照してエミュレーションの要否を判定する手順を実行させる。また、シャドウPTを初期化する際には、シャドウPTの各エントリのRSVビットを非0に設定し、第1のPTでのRSV利用状況を示す利用フラグをリセットする。ページ例外の発生時に、原因コードがPビット違反の発生を示す場合には、エミュレーションが不要と判断する。ページ例外の発生時に、原因コードがRSVビット違反の発生を示し、かつ利用フラグがリセットされている場合にはエミュレーション要と判断する。ページ例外の発生時に、上記のいずれの条件も満たさない場合は第1のOSが管理する第1のPTを解析して、第1のPTの設定に違反するメモリ操作が行われたか否かを判定し、エミュレーションの要否を判断する。なお、エミュレーションの過程で、第1のPTの設定を参照してシャドウPTを設定する際に、第1のPTでRSVビットが非0の場合には、利用フラグをセットする。本願において開示される発明のうち、代表的なものによって得られる効果を簡単に説明すれば、第1のPTに関するPビット違反のページ例外が生じた場合に、エミュレーション要否の判定のために第1のPTを解析する必要が無くなるため、オーバヘッドが抑制可能となる。以下の実施の形態において、要素の数等個数、数値、量、範囲等を含むに言及する場合、特に明示した場合および原理的に明らかに特定の数に限定される場合等を除き、その特定の数に限定されるものではなく、特定の数以上でも以下でも良い。さらに、以下の実施の形態において、その構成要素要素ステップ等も含むは、特に明示した場合および原理的に明らかに必須であると考えられる場合等を除き、必ずしも必須のものではないことは言うまでもない。同様に、以下の実施の形態において、構成要素等の形状、位置関係等に言及するときは、特に明示した場合および原理的に明らかにそうでないと考えられる場合等を除き、実質的にその形状等に近似または類似するもの等を含むものとする。このことは、上記数値および範囲についても同様である。以下、本発明の実施の形態を図面に基づいて詳細に説明する。なお、実施の形態を説明するための全図において、同一の部材には原則として同一の符号を付し、その繰り返しの説明は省略する。本実施の形態の仮想計算機システムは、仮想計算機モニタVMM内のシャドウPT上でリザーブビットRSVビットを活用することでエミュレーションの要否判定を高速化することが主要な特徴の一つとなっている。まず、この特徴の概要について以下に説明を行い、詳細な構成例および動作例等については、それ以降の実施例で説明する。図31は、仮想計算機内のOSに含まれるページテーブルPTの構成例を示す図である。図32は、本発明の前提として検討した仮想計算機システムにおいて、それに含まれるシャドウPTの構成例を示す図であり、図33は、本発明の一実施の形態による仮想計算機システムにおいて、それに含まれるシャドウPTの構成例を示す図である。例えば、便宜上、図1の構成例を使って説明を行うと、図31は、仮想計算機25の第2のOS40に含まれる第2のPT170に該当し、図32および図33は、VMM20内のシャドウPT140に該当する。図31~図33のページテーブルは、それぞれ同一のフォーマットとなっており、複数のページエントリ毎に、それぞれ、アクセス対象となるページの先頭アドレス1114や、リザーブビットRSV1119や、Pビット1116等が定義されている。各先頭アドレス1114は、メモリに対応するアドレスや、IO装置に対応するアドレスMMIOアドレス等となっている。まず、図31に示すように、第2のPT170では、例えば仮想メモリなどの制御のためPビット1116の値が設定される。例えば、Pビット1116の値が‘1’の場合は、当該ページが物理メモリ上に存在することを意味し、逆に‘0’の場合は、当該ページが物理メモリ上に存在せず、外部記憶装置などに存在することを意味する。したがって、Pビットが‘0’の場合には、ページ例外の処理を行う必要がある。図31の例では、先頭アドレス1114に0x00000000が設定されているページエントリのPビットが‘0’となっており、第2のOS40が当該ページにアクセスする際にページ例外の処理が必要となる。ここで、図32に示すように、本発明の前提として検討した仮想計算機システムにおけるシャドウPT140は、この図31のページテーブルをコピーし、更に、MMIOアドレスに対応するページエントリのPビット1116を‘0’に書き換えたような構成となっている。図1の物理計算機10のCPU60は、この図32のシャドウPT140を参照してページ例外の検出を行う。したがって、第2のOS40がMMIOアドレスにアクセスした場合には、CPU60のページ例外検出機能71がシャドウPT140のPビット=‘0’に基づいてページ例外を検出し、このページ例外の原因コードをVMM20に通知することで、VMM20に当該IOアクセスのエミレーションを行わせることが可能となる。ただし、ページ例外検出機能71がページ例外を検出する場合は、このMMIOアドレスへのアクセスに伴いPビット違反が生じた場合の他に、第2のPTに起因してPビット違反が生じた場合前述した例では第2のOSが先頭アドレス0x00000000のページにアクセスした場合もある。前者の場合には、エミュレーションを行う必要があり、後者の場合には、第2のOS40のゲストイベントハンドラ172にイベントを通知する必要がある。前者のPビット違反か後者のPビット違反かを判別するためには、VMM20が、第2のPT解析部115を用いて第2のPT170の内容を参照しなければならず、VMM20は、この判別結果を用いることでエミレーションの要否を判定できる。しかしながら、このような判別処理はオーバヘッドが大きく、動作効率の低下を招くことになる。そこで、本実施の形態の仮想計算機システムでは、図33に示すようなシャドウPT140を用いる。図33のシャドウPT140は、図31のページテーブルをコピーし、更に、MMIOアドレスに対応するページエントリのリザーブビットRSVビット1119を非0=‘1’に書き換えたような構成となっている。CPU60のページ例外検出機能71が、このリザーブビット1119が‘1’の場合をPビット違反の場合とは異なるページ例外として検出する機能を備えていれば、MMIOアドレスへのアクセスが生じた場合に、第2のPT170を解析することなくエミュレーションを行わせることが可能となる。また、第2のPT170に伴うPビット違反が生じた場合も、第2のPT170を解析することなく第2のOS40のゲストイベントハンドラ172へ通知を行うことができる。このようなことから、エミュレーションに伴うオーバヘッドを小さくでき、動作効率の向上が実現可能となる。なお、これまでの説明では、第2のPT170でリザーブビット1119が使用されない即ち‘0’固定である場合を前提とした。通常、殆どの場合でこのような前提が成り立つものと考えられるが、第2のOS40の仕様等によっては何らかの目的で第2のPT170でリザーブビット1119が使用されることも想定し得る。本実施の形態の仮想計算機システムでは、このような場合を想定して、VMM20上に、第2のPT170でのリザーブビット1119の使用履歴を管理する機能を備えることが望ましい。すなわち、第2のPT170のリザーブビット1119が使用されたことが無いのであれば、前述したようにシャドウPT140上のリザーブビット1119の‘1’を受けて第2のPT170を解析することなくエミレーションを行えばよい。一方、リザーブビット1119が使用されたことが有るのであれば、第2のPT170の内容を解析した上で、第2のPT170に起因するリザーブビット違反なのかMMIOアドレスへのアクセスに起因するリザーブビット違反なのかを区別すればよい。この際にはオーバヘッドが生じることになるが、仮に第2のPT170でリザーブビット1119が使用される即ち‘1’に設定されるとしても、その頻度は、仮想メモリ制御に伴いPビットが使用される頻度即ち‘0’に設定される頻度に比べて非常に低いと予想される。言い換えれば、第2のPT170のリザーブビット1119によってアクセスが禁止されるメモリ領域は、第2のPT170のPビットによってアクセスが禁止されるメモリ領域よりも非常に狭いと予想される。したがって、図32のようにPビット違反の原因を切り分ける場合よりはオーバヘッドは小さいと考えられる。また、本実施の形態の仮想計算機システムでは、シャドウPT140を生成する際に、その初期状態のシャドウPT140における各ページエントリのリザーブビット1119を‘1’に設定することが望ましい。そうすると、第2のOS40が第2のPT170に基づきページアクセスを行った際に、初期状態ではシャドウPT140のリザーブビット1119が‘1’であるためページ例外が発生する。そこで、VMM20は、このページ例外を受け、対象となっているページアクセスに対応するページエントリすなわち第2のPT170における対象ページエントリのコピーに該当をシャドウPT140内に生成する。この際に、当該ページアクセスがエミュレーション不要なものであればシャドウPT140に生成した当該ページエントリのリザーブビットを‘0’に書き換え、また、Pビットの値は、第2のPT170と同一の値をコピーすればよい。これによって、第2のPT170内の複数のページエントリ中から、第2のOS40が実際にページアクセスで使用した分のみをシャドウPT140にコピーすることができるため、シャドウPT140に必要なメモリ容量を低減可能となる。以下、このような特徴を含む仮想計算機システムおよびその制御プログラムの詳細な構成例および動作例について説明する。また、これまでに説明した以外の特徴に関しても、以下の実施例から明らかになるであろう。<1.ハードウェア構成>図3は、本発明の実施例1において、仮想計算機システムのハードウェア構成例を示す概略図である。図3に示す仮想計算機システムは、物理計算機10と、その他各種周辺装置から構成される。物理計算機10は、1つ以上のCPU60を有し、これらのCPU60は、フロントサイドバス425を介してノースブリッジ420またはメモリコントローラに接続される。ノースブリッジ420には、メモリバス435を介して主記憶215が接続され、また、バス445を介してI/Oインターフェース440が接続される。I/Oインターフェース440は、LAN450に接続されるネットワークアダプタ、ディスク装置460等に接続されるSCSIアダプタ、SAN470StorageAreaNetworkに接続されるファイバーチャネルアダプタなどで構成され、各I/Oデバイスに接続される。CPU60は、ノースブリッジ420を介してメモリにアクセスし、ノースブリッジ420からI/Oインターフェース440を介してI/Oデバイスにアクセスして所定の処理を行う。なお、ノースブリッジ420は、主記憶215を制御するとともに、グラフィックコントローラを含んでコンソール430にも接続され、画像の表示を行うことができる。主記憶215には、仮想計算機モニタVMM20がロードされ、このVMM20が実現する仮想計算機25が、第1のOS30又は第2のOS40を実行する。第1のOS30は仮想計算機25上で、任意の第2のOSを実行する。また第2のOSは仮想計算機25上で、任意のアプリケーションAP50を実行する。<2.ソフトウェア構成>次に、物理計算機10上で仮想計算機25を実現するソフトウェア構成の主要部について、図4を参照しながら詳述する。物理計算機10上では、複数の仮想計算機25を管理するVMM20が稼動している。各仮想計算機25では、第1のOS30または第2のOS40が1つ以上稼動する。第1のOS30の上では、第2のOS40が1つ以上稼動する。また第2のOS40の上では、アプリケーションAP50が1つ以上稼動する。VMM20は、各第1のOS30に対してメモリ領域毎のアクセス可否を定めたシャドウPT140と、ゲストによるハードウェア操作をエミュレーションするエミュレータ130と、第1のOS30に対してページ例外などのイベントを報告するイベント報告部120と、CPU60で生じたイベントを処理するイベントハンドラ80と、ページ例外の発生時にイベントハンドラ80に渡される原因コードを参照してイベントの発生原因を解析するページ例外の原因コード解析部90と、第1のOS30が保持する第1のPT160に於けるRSVビットによるメモリ領域のアクセス禁止設定履歴を保持する第1のPT履歴管理部100と、ページ例外を生じさせたメモリ操作が第1のPTの設定に違反しているか解析する第1のPT解析部110を有する。シャドウPT140は、IO装置の制御に使用するMMIOMemoryMappedIOメモリアドレスに対して読み書きの一切を禁止するために、RSVビットを非0に設定したエントリを有する。またシャドウPT140は、第1のPT160が存在するメモリアドレスに対して書き込みを禁止するために、R/Wビットを0に設定したエントリを有する。またシャドウPT140は、ゲストが未操作のメモリ領域の一部又は全部に対して、読み書き又は書き込みを禁止するためにRSVビットを非0に設定又はR/Wビットを0に設定したエントリを有する。以上のいずれにも該当しないメモリ領域に対しては、第1のPT160で指定されたアクセス可否を継承した設定を保持する。エミュレータ130は、ゲストによるハードウェア操作をエミュレーションする。エミュレータ130が第1のPT160に対する操作をエミュレーションする場合は、対応するシャドウPT140をゲストの設定に合わせて更新する。また、エミュレータ130がゲストに対するイベントの発生を検出した場合は、イベント報告部120を呼び出す。イベント報告部120は、第1のOS30に対してページ例外などのイベントを報告するために、イベント発生直後のメモリ及びCPUの状態を生成して第1のOS30が有する第1のイベントハンドラ162に分岐する。イベントハンドラ80は、CPU60がページ例外などのイベントを検出した場合に呼び出され、イベントの種類に応じてVMM20内のコードに分岐する。ページ例外の原因コード解析部90は、ページ例外の発生時に渡された原因コードから、ページ例外の要因を大別し、大別した要因に基づいて次に実行するコードを決定する。ページ例外がPビット違反に起因する場合は、イベント報告部120を呼び出す。ページ例外がRSVビット違反に起因する場合は、第1のPT履歴管理部100を呼び出す。ページ例外がR/Wビット違反に起因する可能性がある場合は、第1のPT解析部110を呼び出す。ページ例外が上記のいずれにも該当しない場合は、イベント報告部120を呼び出す。第1のPT履歴管理部100は、第1のPT160の特性を第1のPTの特性データ101に保持する。第1のPTの特性データ101は、第1のPT160のフォーマットと、第1のPTに於いてRSVビットを非0にしてメモリ領域に関する読み書き一切を禁止した経歴の有無を管理する。第1のPT履歴管理部100は、第1のPTでRSVビットが非0になった経歴のない場合にエミュレータ130を呼び出し、第1のPTでRSVビットが非0になった経歴がある場合に第1のPT解析部110を呼び出す。第1のPT解析部110は、第1のPT160に於ける設定で、ページ例外の発生時にイベントハンドラ80に渡された原因コードが生じ得るか否かを解析し、次に実行するコードを決定する。第1のPT160に於ける設定で、ページ例外の発生時にイベントハンドラ80に渡された原因コードが生じ得る場合には、イベント報告部120を呼び出し、生じ得ない場合にはエミュレータ130を呼び出す。物理計算機10は、x86互換のCPU60を有し、CPU60は2つのPTを用いるページ例外検出機能70を有する。2つのPTを用いるページ例外検出機能70は、TLB73とPTアドレスレジスタA74とPTアドレスレジスタB75を有する。TLB73はメモリ領域に対するアクセスの可否を保持する。PTアドレスレジスタA74は第2のPT170の先頭アドレスを保持する。PTアドレスレジスタB75はシャドウPT140の先頭アドレスを保持する。TLB73には、第2のPT170に於けるアクセス可否の設定と、シャドウPT140に於けるアクセス可否の設定がコピーされる。2つのPTを用いるページ例外検出機能70は、第2のPT170で禁止されたメモリ操作を検出した場合は、原因コードと操作対象のメモリアドレスを保存して第2のイベントハンドラ172に分岐する。一方、シャドウPT140で禁止されたメモリ操作を検出した場合は、原因コードと操作対象のメモリアドレスを保存してイベントハンドラ80に分岐する。第2のPT170及びシャドウPT140のいずれも禁止していないメモリ操作に対しては、当該メモリ操作を許可する。第1のOS30は、第1のPT160と第1のイベントハンドラ162を有し、1つ以上の第2のOSを稼動させる。第2のOS40は、第2のPT170と第2のイベントハンドラ172を有し、1つ以上のAP50を稼動させる。第2のOSは、VMM20の上で直接稼動しても良いし、第1のOS30の上で稼動しても良い。図5は、VMM20が管理する物理メモリ空間218の一例を示す図である。物理メモリ空間218は、主記憶215とMMIOアドレス216から構成される。VMM20は、主記憶215上に自身を配置するメモリ領域と、仮想計算機25が使用するメモリ領域を割り当てる。例えば図5のように、VMM20は、自身にアドレスAD0~AD1を割り当て、仮想計算機25-1にアドレスAD1~AD2を、仮想計算機25-nにアドレスAD3~AD4を割り当てる。各仮想計算機25のメモリ領域には、各ゲストOS第1のOS30及び第2のOS40が生成したゲストPTとゲストイベントハンドラ第1のイベントハンドラ162と第2のイベントハンドラ172が含まれる。VMM20が使用するメモリ領域には、イベントハンドラ80と、ページ例外の原因コード解析部90と、第1のPT履歴管理部100と、第1のPTの特性データ101と、第1のPT解析部110と、イベント報告部120と、エミュレータ130と、シャドウPT140が割り当てられる。シャドウPT140、第1のPT160、第2のPT170の構造は同一であり、CPU60がIntel64として動作する場合には図6に示すように構成される。PTの構造は、PML4テーブル1001、PDPテーブル1002、PDEテーブル1003、PTEテーブル1004の4種のテーブルをポインタで接続した形態である。更に、PDE1003又はPTE1004は、物理メモリ空間218の一部であるページフレーム1005をポインタで接続する。PML4テーブル1001は、仮想アドレス空間と物理アドレス空間で変換を行うページ変換階層内でPDPテーブル1002の上位に位置し、各PML4エントリ1101がPDPテーブル1002を指す。PDPテーブル1002は、PDEテーブル1003の上位に位置し、各PDPエントリ1102がPDEテーブル1003を指す。PDEテーブル1003は、各PDEエントリ1103がPTEテーブル1004を指す。そして、PTEテーブル1004は各PTEエントリ1104がページフレーム1005を指す。尚、x86互換CPUの機能であるPSEを利用する場合は、PDEテーブル1003のエントリPDEのPSビットをセットすると、PDEエントリ1103が直接、ページフレームを指す。CPU60がIntel64として動作する場合のPTに関する、各エントリのフォーマットを図7に示す。PML4エントリ1101は512Gバイトのメモリ領域に対して、禁止するアクセスの種類を規定する。同様にPDPエントリ1102は上位のPML4エントリで規定されたアクセス可否に対して、メモリ領域1Gバイト毎に禁止するアクセスの種類を追加する。PDEエントリ1103は上位のエントリで規定されたアクセス可否に対して、メモリ領域2Mバイト毎に禁止するアクセスの種類を追加する。PTEエントリ1104は上位のエントリで規定されたアクセス可否に対して、メモリ領域4Kバイト毎に禁止するアクセスの種類を追加する。各エントリには、下位のテーブルまたはページの先頭を指すアドレスフィールド1111、1112、1113、1114、1115が存在する。各エントリには、エントリの有効/無効を規定するPビット1116、将来の拡張のために予約されたRSVビット1119、書き込みの可否を規定するR/Wビット1117が存在する。Pビット1116を0にすると当該エントリの情報がTLB73に読み込まれる際、つまり各エントリに対応するメモリ領域を操作する際にページ例外が発生する。RSVビット1119を非0にすると当該エントリの情報がTLBに読み込まれる際、つまり各エントリに対応するメモリ領域を操作する際にページ例外が発生する。R/Wビット1117を0にすると当該エントリに対応するメモリ領域に書き込みを行う際にページ例外が発生する。PML4エントリ1101、PDPエントリ1102、PTEエントリ1104のフォーマットは1種類であり、PDEエントリ1103に関してはPSビット1121の設定によって2種類のフォーマット1103-1、1103-2が存在する。各エントリには、アクセスの履歴を示すAビット1118が存在する。Aビットは、対応するメモリ領域への読み書きが行われた場合に1に変化する。同様に、PTEエントリ1104とPS=1の場合のPDEエントリ1103-2には、書き込みの履歴を示すDビット1120が存在する。Dビットは、対応するメモリ領域への書き込みが行われた場合に1に変化する。なお、CPU60が非Intel64IA32として動作する場合のPTに関しても、図7とほぼ同様のフォーマットが規定されている。シャドウPT140と第1のPT160の設定値は、アドレスフィールド1111、1112、1113、1114、1115とRSVビット1119とR/Wビット1117が異なる。VMM20は、仮想計算機25に割り当てたメモリ空間に合わせて、シャドウPT140のアドレスフィールド1111、1112、1113、1114、1115を設定する。またVMM20は、シャドウPT140と対応付けられた第1のPT160に関して、ゲストによる第1のPT160のエントリ更新を検出するために、第1のPT160のエントリ更新に使用されるシャドウPT140のR/Wビットを0に設定し、ライトプロテクトを行う。VMM20は、IO装置の制御に使用するMMIOアドレスに対して読み書きを禁止するために、シャドウPT140のPビット1116を1に設定し、RSVビット1119を非0に設定する。また、VMM20は、第1のPT160でAビット1118が0であるエントリに対応するメモリ領域に対しては、第1のPT160のAビット1118の更新動作をエミュレーションするために、シャドウPT140のPビット1116を1に設定し、RSVビット1119を非0に設定する。またVMM20は、第1のPT160でDビット1120が0であるエントリに対応するメモリ領域に対しては、第1のPT160のDビット1120の更新動作をエミュレーションするために、シャドウPT140のR/Wビット1117を0に設定する。ページ例外発生時に生成される原因コードのフォーマットを図8に示す。原因コードは、Reservedフィールド1250、I/Dフィールド1240、RSVDフィールド1230、U/Sフィールド1220、W/Rフィールド1210、Pフィールド1200から構成される。Reservedフィールド1250は将来のために予約されており、有益な情報は示さない。I/Dフィールド1240は、命令の読み出し中にページ例外が生じた場合のみ1となる。RSVDフィールド1230は、RSVビット1119が非0に設定されたメモリ領域を操作する場合のみ1となる。U/Sフィールド1220は、AP50の実行中にページ例外が生じた場合のみ1となる。W/Rフィールド1210は、メモリへの書き込み時にページ例外が生じた場合のみ1となる。Pフィールド1200は、Pビット1116が0に設定されたメモリ領域を操作する場合のみ1となる。第1のPTの特性データ101のフォーマットを図9に示す。第1のPTの特性データ101は、ゲスト番号1300、第1のPTのアドレス1310、第1のPTのフォーマット1315、予約ビット使用履歴1320から成るエントリで構成される表である。ゲスト番号1300は、仮想計算機25を識別する番号である。第1のPTのアドレス1310は、第1のPT160の先頭メモリアドレスである。第1のPTのフォーマット1315は、PTフォーマットを区別する識別子である。予約ビット使用履歴1320は、当該第1のPTで一度でもRSVビットが非0に設定された場合にのみ1となる変数である。<3.VMMによるシャドウPT操作>次に、ゲストの動作に合わせてVMMが行うシャドウPT操作の一例について、以下、フローチャートを参照しながら説明する。<3.1.VMMによるシャドウPT操作の概要>図10は、VMM20上でゲストを実行するときの全体的な処理を示すフローチャートで、図中破線の右側はVMM20が行う処理であり、同じく破線の左側はゲストが行う処理である。S2000では、VMM20がゲストの実行開始要求を受け付け、仮想計算機25の初期状態に合わせてシャドウPT140を初期化する。そして、VMM20は、CPU60のPTアドレスレジスタB75に、シャドウPT140のアドレスを書き込んだ後、制御をゲストOSに渡す。S2010では、CPU60がゲストを実行する。S2020では、ゲスト側でVMM20の介入を必要とするイベントが発生したか否かを判定する。すなわち、割り込みや例外イベント、ゲストの終了などVMM20の介入が必要なイベントがあればS2030に進み、制御をVMM20に渡す。VMM20の介入が不要であればS2010に進み、ゲスト側の処理を実行する。本判定には、VT-xやAMD-VなどのVMM支援機能を使用しても良い。S2030では、VMM20がイベントの種類を解析し、介入要因がページ例外であるかを判定する。介入要因がページ例外である場合にはS2070に進み、ページ要因でなければS2040に進む。S2040では、ページ例外以外の介入要因に対して、対応するエミュレーションを実施する。S2050では、VMM20が、第1のPTに関連するレジスタが更新されたか否かを検出する。x86互換CPUには、CR0、CR3、CR4、IA32EFERといった、PTのフォーマットやアドレスを規定するレジスタが存在する。VMM20が、ゲストによるCR0、CR3、CR4、IA32EFERの更新を検出した場合は、第1のPTの特性データ101の該当するエントリを更新し、S2060に進む。上記以外はS2080に進む。S2060では、ゲストによる第1のPTフォーマット又は第1のPTアドレスの変更を受けて、VMM20が変更後の第1のPTに合わせてシャドウPT140を再初期化する。S2070では、ページ例外の要因を解析し、必要に応じて第1のOSにイベントを報告する、又はエミュレーションを行う。更に、必要に応じて、シャドウPT140の更新も行う。S2080では、ゲストによる仮想計算機のシャットダウンゲストの終了要求の有無をVMM20が判定する。ゲストが終了した場合にはゲストの実行を終了させる。ゲストの終了要求が発生していない場合はS2010へ進む。上記処理によりVMM20は、ゲストの実行開始から終了までの間、第1のPT160に対応したシャドウPT140がCPU60に登録されている状態を保ち続け、ゲストによる特権メモリ操作に対してページ例外を発生させ、メモリ特権命令をエミュレーションすることができる。<3.2.シャドウPTの初期化処理>上記図10のS2000で行うシャドウPT初期化に関して、図11を用いて説明する。S2100では、VMM20が、シャドウPT140の各エントリを初期化する。初期化の際に、各エントリのPビットを1に設定し、RSVビットを非0に設定する。S2110では、VMM20が、第1のPTの特性データ101内の初期化中のゲストの番号に対応するエントリに対して、第1のPTアドレスを0に設定し、第1のPTのフォーマットをPTなしに設定し、予約ビット使用履歴を0に設定する。S2120では、VMM20が、初期化したシャドウPT140の先頭アドレスを、CPU60が有するPTアドレスレジスタB75に登録する。<3.3.シャドウPTの再初期化処理>上記図10のS2010で行うシャドウPTの再初期化に関して、図12を用いて説明する。S2200では、VMM20が、シャドウPT140の各エントリを再初期化する。再初期化の際に、各エントリのPビットを1に設定し、RSVビットを非0に設定する。<3.4.ページ例外処理>上記図10のS2070で行うページ例外処理に関して、図13を用いて説明する。S2300では、イベントハンドラに渡された原因コードのPフィールド1200とRSVDフィールド1230を参照する。Pビットに違反するメモリ操作が行われた場合、つまりPフィールドが0の場合にはS2325に進む。RSVビットに違反するメモリ操作が行われた場合、つまりRSVDフィールドが1の場合はS2310に進む。上記以外はS2355へ進む。S2355では、原因コードのW/Rフィールド1210を参照し、1であればS2305へ、0であればS2325へ進む。S2310では、第1のPTの特性データ101を参照して、稼動中のゲストのゲスト番号と第1のPTのアドレスに対応した予約ビット使用履歴を読み出す。予約ビット使用履歴が1であれば、S2305へ進み、予約ビット使用履歴が0であれば、2315へ進む。S2305では、第1のPTの設定を解析して、第1のPTの設定によって、操作対象メモリアドレスに対するページ例外が生じ得るか否かを判定する。第1のPTの設定によってページ例外が生じ得る場合はS2325へ進み、ページ例外が生じ得ない場合はS2315へ進む。S2315では、操作対象メモリアドレスが特権メモリであるか否かを調べる。対象が特権メモリである場合には2335へ進み、対象が特権メモリ以外の場合は2350へ進む。S2335では、特権メモリ操作のエミュレーションを行い、S2340へ進む。S2340では、操作対象となった特権メモリの分類を調べ、操作対象が第1のPTである場合はS2345に進み、操作対象が第1のPTでない場合はページ例外処理を終了する。S2345では、第1のPTの更新に合わせて、対応するシャドウPT140のエントリを更新する。更新の手段としては、Pビットを1に設定しRSVビットを非0に設定してメモリの読み書き一切を禁止しても良いし、更新後の第1のPTで規定されたアクセス可否に反せずエミュレーションを要するメモリ領域に対する操作を禁止できる範囲でシャドウPTエントリにアクセス許可を設定しても良い。S2350では、ゲストによるメモリ操作に対応してシャドウPTエントリを更新する。S2325では、第1のOS30にページ例外を報告する際の、CPUレジスタ及びメモリの状態を生成する。S2330では、次に実行するゲスト命令のアドレスを、第1のイベントハンドラ162の先頭アドレスに変更する。<3.5.シャドウPTエントリの生成処理>上記図13のS2350で行うシャドウPTエントリの生成に関して、図14を用いて説明する。S2400では、第1のPTのフォーマットがIntel64用のフォーマットであるかを調査し、Intel64用のフォーマットであればS2410へ進み、非Intel64用のフォーマットであればS2430に進む。S2410では、シャドウPT140に於いて、ページ例外が生じたメモリ領域に対応するPML4エントリ1101が生成済みであるかを調べる。生成済みとは、メモリ操作を許可された状態のことで、メモリ領域の読み込みに対してページ例外が生じた場合はPビット=1かつRSVビット=0であることを指し、メモリ領域の書き込みに対してページ例外が生じた場合はPビット=1かつRSVビット=0かつR/Wビット=1であることを指す。PML4エントリ1101が生成済みの場合はS2430に進み、生成済みでない未生成の場合はS2420に進む。S2420では、ページ例外が生じたメモリ領域に対応するシャドウPT140のPML4エントリ1101を、第1のPT160の設定に基づいて、生成済みの状態に変更する。本処理に於いては、ページ例外が生じたメモリ領域とは異なるメモリ領域に対応するPML4エントリ1101を、追加で生成しても構わない。S2430では、シャドウPT140に於いて、ページ例外が生じたメモリ領域に対応するPDPエントリ1102が生成済みであるかを調べる。PDPエントリ1102が生成済みの場合はS2450に進み、未生成の場合はS2440に進む。S2440では、ページ例外が生じたメモリ領域に対応するシャドウPT140のPDPエントリ1102を、第1のPT160の設定に基づいて、生成済みの状態に変更する。本処理に於いては、ページ例外が生じたメモリ領域とは異なるメモリ領域に対応するPDPエントリ1102を、追加で生成しても構わない。S2450では、シャドウPT140に於いて、ページ例外が生じたメモリ領域に対応するPDEエントリ1103が生成済みであるかを調べる。PDEエントリ1103が生成済みの場合はS2470に進み、未生成の場合はS2460に進む。S2460では、ページ例外が生じたメモリ領域に対応するシャドウPT140のPDEエントリ1103を、第1のPT160の設定に基づいて、生成済みの状態に変更する。本処理に於いては、ページ例外が生じたメモリ領域とは異なるメモリ領域に対応するPDEエントリ1103を、追加で生成しても構わない。S2470では、シャドウPT140に於いて、ページ例外が生じたメモリ領域に対応するPTEエントリ1104が生成済みであるかを調べる。PTEエントリ1104が生成済みの場合は本処理を終了し、未生成の場合はS2480に進む。S2480では、ページ例外が生じたメモリ領域に対応するシャドウPT140のPTEエントリ1104を、第1のPT160の設定に基づいて、生成済みの状態に変更する。本処理に於いては、ページ例外が生じたメモリ領域とは異なるメモリ領域に対応するPTEエントリ1104を、追加で生成しても構わない。上記図14のS2420で行うPML4エントリの生成に関して、図15を用いて説明する。S2500からS2548のループでは、生成対象となるPML4エントリ1101を順次生成する。生成対象となるPML4エントリ1101が1つのみの場合は、単に、本ループを1度だけ実行する。S2504では、生成するシャドウPT140のPML4エントリ1101に対応する第1のPT160のPML4エントリ1101に関して、RSVビットが0であるかを判定する。RSVビットが0である場合はS2512へ進み、RSVビットが非0である場合はS2508へ進む。S2508では、第1のPTの特性データ101に含まれる、稼動中のゲストのゲスト番号と第1のPTに対応するエントリに対して、予約ビット使用履歴を1に変更する。S2512では、生成するシャドウPT140のPML4エントリ1101に対応する第1のPT160のPML4エントリ1101に関して、Pビットが0であるかを判定する。Pビットが0である場合はS2528へ進み、Pビットが非0である場合はS2516へ進む。S2516では、生成するシャドウPT140のPML4エントリ1101に対応するメモリ領域が読み書きに対してエミュレーションを要するか否かを判定する。本処理に於いて、読み書きに対してエミュレーションを要するメモリ領域とは、第1のPTに於いてAビットが0に設定されたメモリ領域である。当該メモリ領域が、読み書きに対してエミュレーションを要する場合にはS2520へ進み、読み書きに対してエミュレーションを必要としない場合にはS2524へ進む。S2520では、生成するシャドウPT140のPML4エントリ1101に、Pビット=1を設定し、RSVビット=非0を設定する。S2524では、生成するシャドウPT140のPML4エントリ1101に、Pビット=1を設定し、RSVビット=0を設定する。S2528では、生成するシャドウPT140のPML4エントリ1101に、Pビット=0を設定し、RSVビット=0を設定する。S2532では、生成するシャドウPT140のPML4エントリ1101に対応する第1のPT160のPML4エントリ1101に関して、R/Wビットが0であるかを判定する。R/Wビットが0である場合はS2544へ進み、R/Wビットが非0である場合はS2536へ進む。S2536では、生成するシャドウPT140のPML4エントリ1101に対応するメモリ領域が書き込みに対してエミュレーションを要するか否かを判定する。本処理に於いて、書き込みに対してエミュレーションを要するメモリ領域とは、第1のPTに於いてDビットが0に設定されたメモリ領域である。当該メモリ領域が、書き込みに対してエミュレーションを要する場合にはS2544へ進み、読み書きに対してエミュレーションを必要としない場合にはS2540へ進む。S2540では、生成するシャドウPT140のPML4エントリ1101に、R/Wビット=1を設定する。S2544では、生成するシャドウPT140のPML4エントリ1101に、R/Wビット=0を設定する。上記図14のS2440で行うPDPエントリの生成に関して、図16を用いて説明する。S2600では、稼動中のゲストに第1のPTが存在するか否かを調べる。VMM20上で第2のOS40が直接稼動する場合には第1のPTが存在しない。第1のPTの存在は、第1のPTの特性データ101を参照して第1のPTのフォーマットから判断する。第1のPTが存在する場合はS2604へ進み、第1のPTが存在しない場合はS2660へ進む。S2604では、PDPエントリ1102の生成対象となるメモリ領域に対して、第1のPTにPDPテーブル1002が存在するか否かを調べる。x86互換CPUでは、PTのフォーマットにPDPテーブル1002が存在しない。従って第1のPTに於けるPDPテーブル1002の存在は、第1のPTの特性データ101を参照して第1のPTのフォーマットから判断する。第1のPTに、対応するPDPテーブル1002が存在する場合にはS2608へ進み、対応するPDPテーブル1002が存在しない場合にはS2660へ進む。S2608からS2656のループでは、生成対象となるPDPエントリ1102を順次生成する。生成対象となるPDPエントリ1102が1つのみの場合は、単に、本ループを1度だけ実行する。S2612では、生成するシャドウPT140のPDPエントリ1102に対応する第1のPT160のPDPエントリ1102に関して、RSVビットが0であるかを判定する。RSVビットが0である場合はS2620へ進み、RSVビットが非0である場合はS2616へ進む。S2616では、第1のPTの特性データ101に含まれる、稼動中のゲストのゲスト番号と第1のPTに対応するエントリに対して、予約ビット使用履歴を1に変更する。S2620では、生成するシャドウPT140のPDPエントリ1102に対応する第1のPT160のPDPエントリ1102に関して、Pビットが0であるかを判定する。Pビットが0である場合はS2636へ進み、Pビットが非0である場合はS2624へ進む。S2624では、生成するシャドウPT140のPDPエントリ1102に対応するメモリ領域が読み書きに対してエミュレーションを要するか否かを判定する。本処理に於いて、読み書きに対してエミュレーションを要するメモリ領域とは、第1のPTに於いてAビットが0に設定されたメモリ領域である。当該メモリ領域が、読み書きに対してエミュレーションを要する場合にはS2628へ進み、読み書きに対してエミュレーションを必要としない場合にはS2632へ進む。S2628では、生成するシャドウPT140のPDPエントリ1102に、Pビット=1を設定し、RSVビット=非0を設定する。S2632では、生成するシャドウPT140のPDPエントリ1102に、Pビット=1を設定し、RSVビット=0を設定する。S2636では、生成するシャドウPT140のPDPエントリ1102に、Pビット=0を設定し、RSVビット=0を設定する。S2640では、生成するシャドウPT140のPDPエントリ1102に対応する第1のPT160のPDPエントリ1102に関して、R/Wビットが0であるかを判定する。R/Wビットが0である場合はS2652へ進み、R/Wビットが非0である場合はS2644へ進む。S2644では、生成するシャドウPT140のPDPエントリ1102に対応するメモリ領域が書き込みに対してエミュレーションを要するか否かを判定する。本処理に於いて、書き込みに対してエミュレーションを要するメモリ領域とは、第1のPTに於いてDビットが0に設定されたメモリ領域である。当該メモリ領域が、書き込みに対してエミュレーションを要する場合にはS2652へ進み、読み書きに対してエミュレーションを必要としない場合にはS2648へ進む。S2648では、生成するシャドウPT140のPDPエントリ1102に、R/Wビット=1を設定する。S2652では、生成するシャドウPT140のPDPエントリ1102に、R/Wビット=0を設定する。S2660からS2668のループでは、生成対象となるPDPエントリ1102を順次生成する。生成対象となるPDPエントリ1102が1つのみの場合は、単に、本ループを1度だけ実行する。S2664では、生成するシャドウPT140のPDPエントリ1102に、Pビット=1を設定し、RSVビット=0を設定し、R/Wビット=1を設定する。上記図14のS2460で行うPDEエントリの生成に関して、図17を用いて説明する。S2700では、稼動中のゲストに第1のPTが存在するか否かを調べる。VMM20上で第2のOS40が直接稼動する場合には第1のPTが存在しない。第1のPTの存在は、第1のPTの特性データ101を参照して第1のPTのフォーマットから判断する。第1のPTが存在する場合はS2704へ進み、第1のPTが存在しない場合はS2756へ進む。S2704からS2752のループでは、生成対象となるPDEエントリ1103を順次生成する。生成対象となるPDEエントリ1103が1つのみの場合は、単に、本ループを1度だけ実行する。S2708では、生成するシャドウPT140のPDEエントリ1103に対応する第1のPT160のPDEエントリ1103に関して、RSVビットが0であるかを判定する。RSVビットが0である場合はS2716へ進み、RSVビットが非0である場合はS2712へ進む。S2712では、第1のPTの特性データ101に含まれる、稼動中のゲストのゲスト番号と第1のPTに対応するエントリに対して、予約ビット使用履歴を1に変更する。S2716では、生成するシャドウPT140のPDEエントリ1103に対応する第1のPT160のPDEエントリ1103に関して、Pビットが0であるかを判定する。Pビットが0である場合はS2732へ進み、Pビットが非0である場合はS2720へ進む。S2720では、生成するシャドウPT140のPDEエントリ1103に対応するメモリ領域が読み書きに対してエミュレーションを要するか否かを判定する。本処理に於いて、読み書きに対してエミュレーションを要するメモリ領域とは、第1のPTに於いて、Aビットが0に設定されたメモリ領域である。当該メモリ領域が、読み書きに対してエミュレーションを要する場合にはS2724へ進み、読み書きに対してエミュレーションを必要としない場合にはS2728へ進む。S2724では、生成するシャドウPT140のPDEエントリ1103に、Pビット=1を設定し、RSVビット=非0を設定する。S2728では、生成するシャドウPT140のPDEエントリ1103に、Pビット=1を設定し、RSVビット=0を設定する。S2732では、生成するシャドウPT140のPDEエントリ1103に、Pビット=0を設定し、RSVビット=0を設定する。S2736では、生成するシャドウPT140のPDEエントリ1103に対応する第1のPT160のPDEエントリ1103に関して、R/Wビットが0であるかを判定する。R/Wビットが0である場合はS2748へ進み、R/Wビットが非0である場合はS2740へ進む。S2740では、生成するシャドウPT140のPDEエントリ1103に対応するメモリ領域が書き込みに対してエミュレーションを要するか否かを判定する。本処理に於いて、書き込みに対してエミュレーションを要するメモリ領域とは、第1のPTに於いてDビットが0に設定されたメモリ領域である。当該メモリ領域が、書き込みに対してエミュレーションを要する場合にはS2748へ進み、読み書きに対してエミュレーションを必要としない場合にはS2744へ進む。S2744では、生成するシャドウPT140のPDEエントリ1103に、R/Wビット=1を設定する。S2748では、生成するシャドウPT140のPDEエントリ1103に、R/Wビット=0を設定する。S2756からS2764のループでは、生成対象となるPDEエントリ1103を順次生成する。生成対象となるPDEエントリ1103が1つのみの場合は、単に、本ループを1度だけ実行する。S2760では、生成するシャドウPT140のPDEエントリ1103に、Pビット=1を設定し、RSVビット=0を設定し、R/Wビット=1を設定する。上記図14のS2480で行うシャドウPTEエントリの生成に関して、図18を用いて説明する。S2800では、稼動中のゲストに第1のPTが存在するか否かを調べる。VMM20上で第2のOS40が直接稼動する場合には第1のPTが存在しない。第1のPTの存在は、第1のPTの特性データ101を参照して第1のPTのフォーマットから判断する。第1のPTが存在する場合はS2804へ進み、第1のPTが存在しない場合はS2856へ進む。S2804では、PTEエントリ1104の生成対象となるメモリ領域に対して、第1のPTにPTEテーブル1004が存在するか否かを調べる。第1のPTに於いて、当該メモリ領域に対応するPDEエントリ1103がPS=1である場合のみ、対応するPTEテーブル1004は存在しない。第1のPTに、対応するPTEテーブル1004が存在する場合にはS2808へ進み、対応するPTEテーブル1004が存在しない場合にはS2856へ進む。S2808からS2852のループでは、生成対象となるPTEエントリ1104を順次生成する。生成対象となるPTEエントリ1104が1つのみの場合は、単に、本ループを1度だけ実行する。S2812では、生成するシャドウPT140のPTEエントリ1104に対応する第1のPT160のPTEエントリ1104に関して、RSVビットが0であるかを判定する。RSVビットが0である場合はS2820へ進み、RSVビットが非0である場合はS2816へ進む。S2816では、第1のPTの特性データ101に含まれる、稼動中のゲストのゲスト番号と第1のPTに対応するエントリに対して、予約ビット使用履歴を1に変更する。S2820では、生成するシャドウPT140のPTEエントリ1104に対応する第1のPT160のPTEエントリ1104に関して、Pビットが0であるかを判定する。Pビットが0である場合はS2836へ進み、Pビットが非0である場合はS2824へ進む。S2824では、生成するシャドウPT140のPTEエントリ1104に対応するメモリ領域が読み書きに対してエミュレーションを要するか否かを判定する。本処理に於いて、読み書きに対してエミュレーションを要するメモリ領域とは、以下2つのいずれかの条件を満たすメモリ領域である。条件1IO装置の制御に使用するMMIOメモリ領域。条件2第1のPTに於いて、Aビットが0に設定されたメモリ領域。当該メモリ領域が、読み書きに対してエミュレーションを要する場合にはS2828へ進み、読み書きに対してエミュレーションを必要としない場合にはS2832へ進む。S2828では、生成するシャドウPT140のPTEエントリ1104に、Pビット=1を設定し、RSVビット=非0を設定する。S2832では、生成するシャドウPT140のPTEエントリ1104に、Pビット=1を設定し、RSVビット=0を設定する。S2836では、生成するシャドウPT140のPTEエントリ1104に、Pビット=0を設定し、RSVビット=0を設定する。S2892では、生成するシャドウPT140のPTEエントリ1104に対応する第1のPT160のPTEエントリ1104に関して、R/Wビットが0であるかを判定する。R/Wビットが0である場合はS2848へ進み、R/Wビットが非0である場合はS2840へ進む。S2840では、生成するシャドウPT140のPTEエントリ1104に対応するメモリ領域が書き込みに対してエミュレーションを要するか否かを判定する。本処理に於いて、書き込みに対してエミュレーションを要するメモリ領域とは、以下2つのいずれかの条件を満たすメモリ領域である。条件1第1のPTが存在するメモリ領域。条件2第1のPTに於いて、Dビットが0に設定されたメモリ領域。当該メモリ領域が、書き込みに対してエミュレーションを要する場合にはS2848へ進み、読み書きに対してエミュレーションを必要としない場合にはS2844へ進む。S2844では、生成するシャドウPT140のPTEエントリ1104に、R/Wビット=1を設定する。S2848では、生成するシャドウPT140のPTEエントリ1104に、R/Wビット=0を設定する。S2856からS2884のループでは、生成対象となるPTEエントリ1104を順次生成する。生成対象となるPTEエントリ1104が1つのみの場合は、単に、本ループを1度だけ実行する。S2860では、生成するシャドウPT140のPTEエントリ1104に対応するメモリ領域が読み書きに対してエミュレーションを要するか否かを判定する。本処理に於いて、読み書きに対してエミュレーションを要するメモリ領域とは、IO装置の制御に使用するMMIOメモリ領域である。当該メモリ領域が、読み書きに対してエミュレーションを要する場合にはS2864へ進み、読み書きに対してエミュレーションを必要としない場合にはS2868へ進む。S2864では、生成するシャドウPT140のPTEエントリ1104に、Pビット=1を設定し、RSVビット=非0を設定する。S2868では、生成するシャドウPT140のPTEエントリ1104に、Pビット=1を設定し、RSVビット=0を設定し、R/Wビット=1を設定する。<4.まとめ>以上に示した実施例によれば、シャドウPT140のRSVビットを用いて特権メモリに対する読み書き操作を禁止することで、VMM20上で第1のOS30を稼動させた状態でPビットの設定に違反する操作が行われた場合に、エミュレーションが不要であることを高速に判断できるため、オーバヘッドを抑制することができる。以下では、本発明を1つのPTだけを用いるページ例外検出機構を備えたVT-x対応のCPUに対して適用し、VMM上で第2のOSのみを複数稼動させる実施形態を説明する。以下では、添付図面に基づいて実施例1との違いを説明する。<1.ハードウェア構成>ハードウェア構成は図19に示すように、主記憶215の内容のみが実施例1と異なる。主記憶215には、仮想計算機モニタVMM20がロードされ、このVMM20が実現する仮想計算機25が、1つ以上の第2のOS40を実行する。また第2のOSは仮想計算機25上で、任意のAP50を実行する。<2.ソフトウェア構成>ソフトウェア構成は、図20に示すように、VMM20上で稼動するOSとCPU60に関連する部位が実施例1と異なる。物理計算機10上では、複数の仮想計算機25を管理するVMM20が稼動している。各仮想計算機25では、第2のOS40が稼動する。また第2のOS40の上では、アプリケーションAP50が1つ以上稼動する。VMM20は、各第2のOS40に対してメモリ領域毎のアクセス可否を定めたシャドウPT140と、ゲストによるハードウェア操作をエミュレーションするエミュレータ130と、第2のOS40に対してページ例外などのイベントを報告するイベント報告部120と、CPU60で生じたイベントを処理するイベントハンドラ80と、VMM20内で発生した障害に対応する障害処理部85と、ページ例外の発生時にイベントハンドラ80に渡される原因コードを参照してイベントの発生原因を解析するページ例外の原因コード解析部90と、第2のOS40が保持する第2のPT170に於けるRSVビットによるメモリ領域のアクセス禁止設定履歴を保持する第2のPT履歴管理部105と、ページ例外を生じさせたメモリ操作が第2のPTの設定に違反しているか解析する第2のPT解析部115を有する。シャドウPT140は、IO装置の制御に使用するMMIOMemoryMappedIOメモリアドレスに対して読み書きの一切を禁止するために、RSVビットを非0に設定したエントリを有する。またシャドウPT140は、第2のPT170が存在するメモリアドレスに対して書き込みを禁止するために、R/Wビットを0に設定したエントリを有する。またシャドウPT140は、ゲストが未操作のメモリ領域の一部又は全部に対して、読み書き又は書き込みを禁止するためにRSVビットを非0に設定又はR/Wビットを0に設定したエントリを有する。以上のいずれにも該当しないメモリ領域に対しては、第2のPT170で指定されたアクセス可否を継承した設定を保持する。エミュレータ130は、ゲストによるハードウェア操作をエミュレーションする。エミュレータ130が第2のPTに対する操作をエミュレーションする場合は、対応するシャドウPT140をゲストの設定に合わせて更新する。また、エミュレータ130がゲストに対するイベントの発生を検出した場合は、イベント報告部120を呼び出す。イベント報告部120は、第2のOS40に対してページ例外などのイベントを報告するために、イベント発生直後のメモリ及びCPUの状態を生成して第2のOSが有する第2のイベントハンドラ172に分岐する。イベントハンドラ80は、CPUがページ例外などのイベントを検出した場合に呼び出され、イベントの種類に応じてVMM内のコードに分岐する。ページ例外の原因コード解析部90は、ページ例外の発生時に渡された原因コードから、ページ例外の要因を大別し、大別した要因に基づいて次に実行するコードを決定する。ページ例外がPビット違反に起因する場合は、障害処理部85を呼び出す。ページ例外がRSVビット違反に起因する場合は、第2のPT履歴管理部105を呼び出す。ページ例外がR/Wビット違反に起因する可能性がある場合は、第2のPT解析部115を呼び出す。ページ例外が上記のいずれにも該当しない場合は、イベント報告部120を呼び出す。障害処理部85は、コンソール430などの外部出力装置を用いて、VMM20内で発生した障害の情報を出力する。第2のPT履歴管理部105は、第2のPT170の特性を第2のPTの特性データ102に保持する。第2のPTの特性データ102は、第2のPT170のフォーマットと、第2のPTに於いてRSVビットを非0にしてメモリ領域に関する読み書き一切を禁止した経歴の有無を管理する。第2のPT履歴管理部105は、第2のPTでRSVビットを非0になった経歴のない場合にエミュレータ130を呼び出し、第2のPTでRSVビットが非0になった経歴がある場合に第2のPT解析部115を呼び出す。第2のPT解析部115は、第2のPT170に於ける設定で、ページ例外の発生時にイベントハンドラ80に渡された原因コードが生じ得るか否かを解析し、次に実行するコードを決定する。第2のPT170に於ける設定で、ページ例外の発生時にイベントハンドラ80に渡された原因コードが生じ得る場合には、イベント報告部120を呼び出し、生じ得ない場合にはエミュレータ130を呼び出す。物理計算機10は、x86互換のCPU60を有し、CPU60は1つのPTのみを用いるページ例外検出機能71を有する。1つのPTのみを用いるページ例外検出機能71はTLB73とPTアドレスレジスタ72とpagefaulterrorcodemaskmatch機能76を有する。TLB73はメモリ領域に対するアクセスの可否を保持する。PTアドレスレジスタ72はシャドウPT140の先頭アドレスを保持する。TLB73には、シャドウPT140に於けるアクセス可否の設定がコピーされる。pagefaulterrorcodemaskmatch機能76は、ページ例外の原因コードとページ例外発生時に呼び出すイベントハンドラの対応を保持する。1つのPTのみを用いるページ例外検出機能71は、シャドウPT140で禁止されたメモリ操作を検出した場合は、原因コードと操作対象メモリアドレスを保存し、pagefaulterrorcodemaskmatch機能76の設定に従って、VMM20内のイベントハンドラ80または第2のイベントハンドラ172に分岐する。第2のOS40は、第2のPT170と第2のイベントハンドラ172を有し、1つ以上のAP50を稼動させる。図30は、pagefaulterrorcodemaskmatch機能76に設定するpagefaulterrorcodemask77、pagefaulterrorcodematch78、exceptionbitmap79のフォーマットである。上記に対する設定よって、ページ例外の原因コードと呼び出すイベントハンドラが対応付けられる。pagefaulterrorcodemask77及び、pagefaulterrorcodematch78は、原因コードと同じフォーマットである。exceptionbitmap79は32ビットの値であり、各ビットがx86互換CPUの例外の番号に対応している。ビット141260がページ例外に対応する。pagefaulterrorcodemaskmatch機能76は、ページ例外の発生時に、ページ例外の原因コードとpagefaulterrorcodemask77の論理和を計算し、当該論理和とpagefaulterrorcodematch78が一致する場合は、ビット141260の0/1に従って第2のイベントハンドラ172/イベントハンドラ80をそれぞれ呼び出す。当該論理和とpagefaulterrorcodematch78が不一致の場合は、ビット141260の0/1に従ってイベントハンドラ80/第2のイベントハンドラ172をそれぞれ呼び出す。物理メモリ空間218は、図21に示すように、仮想計算機25に割り当てたメモリの中身と、VMM20に割り当てたメモリ内の第2のPT管理部105と第2のPT解析部と障害処理部85のみが異なる。各仮想計算機25のメモリ領域には、各第2のゲストOS40が生成した第2のPT170と第2のイベントハンドラ172が含まれる。VMM20が使用するメモリ領域には、イベントハンドラ80と、障害処理部85と、ページ例外の原因コード解析部90と、第2のPT履歴管理部105と、第2のPTの特性データ102と、第2のPT解析部115と、イベント報告部120と、エミュレータ130と、シャドウPT140が割り当てられる。シャドウPT140と第2のPT170の構造は実施例1と同一である。シャドウPT140と第2のPT170の設定値は、アドレスフィールド1111、1112、1113、1114、1115とRSVビット1119とR/Wビット1117が異なる。VMM20は、仮想計算機25に割り当てたメモリ空間に合わせて、シャドウPT140のアドレスフィールド1111、1112、1113、1114、1115を設定する。またVMM20は、シャドウPT140と対応付けられた第2のPT170に関して、ゲストによる第2のPT170のエントリ更新を検出するためにするために、第2のPT170のエントリ更新に使用されるシャドウPT140のR/Wビットを0に設定し、ライトプロテクトを行う。VMM20は、IO装置の制御に使用するMMIOアドレスに対して読み書きを禁止するために、シャドウPT140のPビット1116を1に設定し、RSVビット1119を非0に設定する。また、VMM20は、第2のPT170でAビット1118が0であるエントリに対応するメモリ領域に対しては、第2のPT170のAビット1118の更新動作をエミュレーションするために、シャドウPT140のPビット1116を1に設定し、RSVビット1119を非0に設定する。またVMM20は、第2のPT170でDビット1120が0であるエントリに対応するメモリ領域に対しては、第2のPT170のDビット1120の更新動作をエミュレーションするために、シャドウPT140のR/Wビット1117を0に設定する。ページ例外発生時に生成される原因コードのフォーマットは、実施例1と同一である。第2のPTの特性データ102のフォーマットは、図22に示すように、対象が第2のPTである点のみが、実施例1と異なる。第2のPTの特性データ102は、ゲスト番号1300、第2のPTのアドレス1350、第2のPTのフォーマット1355、予約ビット使用履歴1320から成るエントリで構成される。ゲスト番号1300は、仮想計算機25を識別する番号である。第2のPTのアドレス1350は、第2のPT170の先頭メモリアドレスである。第2のPTのフォーマット1355は、PTフォーマットを区別する識別子である。予約ビット使用履歴1320は、当該第2のPTの中に一度でもRSVビットが非0に設定された場合にのみ1となる変数である。<3.VMMによるシャドウPT操作>次に、ゲストの動作に合わせてVMMが行うシャドウPT操作の一例について、以下、フローチャートを参照しながら説明する。<3.1.VMMによるシャドウPT操作の概要>VMM20上でゲストを実行するときの全体的な処理の流れは、実施例1で説明した図10と同一である。以下では、図10における各ステップの中での実施例1との違いを説明する。S2000では、VMM20がゲストの実行開始要求を受け付け、仮想計算機25の初期状態に合わせてシャドウPT140を初期化する。そして、VMM20は、CPU60のPTアドレスレジスタ72に、シャドウPT140のアドレスを書き込んだ後、制御をゲストOSに渡す。S2010、S2020、S2030、S2040は、実施例1と同一である。S2050では、VMM20が、第2のPTに関連するレジスタが更新されたか否かを検出する。x86互換CPUには、CR0、CR3、CR4、IA32EFERといった、PTのフォーマットやアドレスを規定するレジスタが存在する。VMM20が、ゲストによるCR0、CR3、CR4、IA32EFERの更新を検出した場合は、第2のPTの特性データ102の該当するエントリを更新し、S2060に進む。上記以外はS2080に進む。S2060では、ゲストによる第2のPTフォーマット又は第2のPTアドレスの変更を受けて、VMM20が変更後の第2のPTに合わせてシャドウPT140を再初期化する。S2070では、ページ例外の要因を解析し、必要に応じて第2のOSにイベントを報告する、又はエミュレーションを行う。更に、必要に応じて、シャドウPT140の更新も行う。S2080は、実施例1と同一である。上記処理によりVMM20は、ゲストの実行開始から終了までの間、第2のPT170に対応したシャドウPT140がCPU60に登録されている状態を保ち続け、ゲストによる特権メモリ操作に対してページ例外を発生させ、メモリ特権命令をエミュレーションすることができる。<3.2.シャドウPTの初期化処理>上記図10のS2000で行うシャドウPT初期化の流れは、図29に示すように、pagefaulterrorcodemaskmatch機能の設定を行う点と、操作対象のレジスタのみが実施例1と異なる。S2100は、実施例1と同一である。S2110では、VMM20が、第2のPTの特性データ102内の初期化中のゲストの番号に対応するエントリに対して、第2のPTアドレスを0に設定し、第2のPTのフォーマットをPTなしに設定し、予約ビット使用履歴を0に設定する。S2120では、VMM20が、初期化したシャドウPT140の先頭アドレスを、CPU60が有するPTアドレスレジスタ72に登録する。S2130では、VMM20が、pagefaulterrorcodemaskmatch機能76を、Pビット違反のページ例外が発生した場合に第2のイベントハンドラ172が呼ばれるように設定する。設定の内容は、pagefaulterrorcodemask77を1に設定しpagefaulterrorcodematch78を1に設定しビット141260を1に設定しても良いし、pagefaulterrorcodemask77を1に設定しpagefaulterrorcodematch78を0に設定しビット141260を0に設定しても良い。<3.3.シャドウPTの再初期化処理>上記図10のS2010で行うシャドウPTの再初期化は、図12に示すように実施例1と同一である。<3.4.ページ例外処理>上記図10のS2070で行うページ例外処理に関して、図23を用いて説明する。S3300では、イベントハンドラ80に渡された原因コードのPフィールドとRSVフィールドを参照する。Pビットに違反するメモリ操作が行われた場合、つまりPフィールドが0の場合にはS3360に進む。RSVビットに違反するメモリ操作が行われた場合、つまりRSVDフィールドが1の場合はS3310に進む。上記以外はS3355へ進む。S3355では、原因コードのW/Rフィールドを参照し、1であればS3305へ、0であればS3325へ進む。S3310では、第2のPTの特性データ102を参照して、稼動中のゲストのゲスト番号と第2のPTのアドレスに対応した予約ビット使用履歴を読み出す。予約ビット使用履歴が1であれば、S3305へ進み、予約ビット使用履歴が0であれば、3315へ進む。S3305では、第2のPTの設定を解析して、第2のPTの設定によって、操作対象メモリアドレスに対するページ例外が生じ得るか否かを判定する。第2のPTの設定によってページ例外が生じ得る場合はS3325へ進み、ページ例外が生じ得ない場合はS3315へ進む。S3315では、操作対象メモリアドレスが特権メモリであるか否かを調べる。対象が特権メモリである場合には3335へ進み、対象が特権メモリ以外の場合は3350へ進む。S3335では、特権メモリ操作のエミュレーションを行い、S3340へ進む。S3340では、操作対象となった特権メモリの分類を調べ、操作対象が第2のPTである場合はS3345に進み、操作対象が第2のPTでない場合はページ例外処理を終了する。S3345では、第2のPTの更新に合わせて、対応するシャドウPT140のエントリを更新する。更新の手段としては、Pビットを1に設定しRSVビットを非0に設定してメモリの読み書き一切を禁止しても良いし、更新後の第2のPTで規定されたアクセス可否に反せずエミュレーションを要するメモリ領域に対する操作を禁止できる範囲でシャドウPTエントリにアクセス許可を設定しても良い。S3350では、ゲストによるメモリ操作に対応してシャドウPTエントリを更新する。S3325では、第2のOSにページ例外を報告する際の、CPUレジスタ及びメモリの状態を生成する。S3330では、次に実行するゲスト命令のアドレスを、第2のイベントハンドラの先頭アドレスに変更する。S3360では、コンソール430などの外部出力装置を用いて、VMM20内で発生した障害の情報を出力する。<3.5.シャドウPTエントリの生成処理>上記図23のS3350で行うシャドウPTエントリの生成は、図24に示すように、第2のPTのフォーマット及びデータを参照する点のみが実施例1と異なる。S3400では、第2のPTのフォーマットがIntel64用のフォーマットであるかを調査し、Intel64用のフォーマットであればS2410へ進み、非Intel64用のフォーマットであればS2430に進む。S2410は、実施例1と同一である。S2420では、ページ例外が生じたメモリ領域に対応するシャドウPT140のPML4エントリ1101を、第2のPT170の設定に基づいて、生成済みの状態に変更する。本処理に於いては、ページ例外が生じたメモリ領域とは異なるメモリ領域に対応するPML4エントリ1101を、追加で生成しても構わない。S2430は、実施例1と同一である。S2440では、ページ例外が生じたメモリ領域に対応するシャドウPT140のPDPエントリ1102を、第2のPT170の設定に基づいて、生成済みの状態に変更する。本処理に於いては、ページ例外が生じたメモリ領域とは異なるメモリ領域に対応するPDPエントリ1102を、追加で生成しても構わない。S2450は、実施例1と同一である。S2460では、ページ例外が生じたメモリ領域に対応するシャドウPT140のPDEエントリ1103を、第2のPT170の設定に基づいて、生成済みの状態に変更する。本処理に於いては、ページ例外が生じたメモリ領域とは異なるメモリ領域に対応するPDEエントリ1103を、追加で生成しても構わない。S2470は、実施例1と同一である。S2480では、ページ例外が生じたメモリ領域に対応するシャドウPT140のPTEエントリ1104を、第2のPT170の設定に基づいて、生成済みの状態に変更する。本処理に於いては、ページ例外が生じたメモリ領域とは異なるメモリ領域に対応するPTEエントリ1104を、追加で生成しても構わない。上記図24のS2420で行うPML4エントリの生成は、図25に示すように、第2のPT170を参照する点のみが実施例1と異なる。S2500からS2548のループでは、生成対象となるPML4エントリ1101を順次生成する。生成対象となるPML4エントリ1101が1つのみの場合は、単に、本ループを1度だけ実行する。S3504では、生成するシャドウPT140のPML4エントリ1101に対応する第2のPT170のPML4エントリ1101に関して、RSVビットが0であるかを判定する。RSVビットが0である場合はS3512へ進み、RSVビットが非0である場合はS3508へ進む。S3508では、第2のPTの特性データ102に含まれる、稼動中のゲストのゲスト番号と第2のPTに対応するエントリに対して、予約ビット使用履歴を1に変更する。S3512では、生成するシャドウPT140のPML4エントリ1101に対応する第2のPT170のPML4エントリ1101に関して、Pビットが0であるかを判定する。Pビットが0である場合はS2528へ進み、Pビットが非0である場合はS2516へ進む。S2516では、生成するシャドウPT140のPML4エントリ1101に対応するメモリ領域が読み書きに対してエミュレーションを要するか否かを判定する。本処理に於いて、読み書きに対してエミュレーションを要するメモリ領域とは、第2のPTに於いてAビットが0に設定されたメモリ領域である。当該メモリ領域が、読み書きに対してエミュレーションを要する場合にはS2520へ進み、読み書きに対してエミュレーションを必要としない場合にはS2524へ進む。S2520、S2524、S2528は、実施例1と同一である。S3532では、生成するシャドウPT140のPML4エントリ1101に対応する第2のPT170のPML4エントリ1101に関して、R/Wビットが0であるかを判定する。R/Wビットが0である場合はS2544へ進み、R/Wビットが非0である場合はS2536へ進む。S2536では、生成するシャドウPT140のPML4エントリ1101に対応するメモリ領域が書き込みに対してエミュレーションを要するか否かを判定する。本処理に於いて、書き込みに対してエミュレーションを要するメモリ領域とは、第2のPTに於いてDビットが0に設定されたメモリ領域である。当該メモリ領域が、書き込みに対してエミュレーションを要する場合にはS2544へ進み、読み書きに対してエミュレーションを必要としない場合にはS2540へ進む。S2540、S2544は、実施例1と同一である。上記図24のS2440で行うPDPエントリの生成は、図26に示すように、第2のPT170を参照する点のみが実施例1と異なる。S3600では、稼動中のゲストに第2のPTが存在するか否かを調べる。第2のPTの存在は、第2のPTの特性データ102を参照して第2のPTのフォーマットから判断する。第2のPTが存在する場合はS3604へ進み、第2のPTが存在しない場合はS2660へ進む。S3604では、PDPエントリ1102の生成対象となるメモリ領域に対して、第2のPTにPDPテーブル1002が存在するか否かを調べる。x86互換CPUでは、PTのフォーマットによってはPDPテーブル1002が存在しない。従って第2のPTに於けるPDPテーブル1002の存在は、第2のPTの特性データ102を参照して第2のPTのフォーマットから判断する。第2のPTに、対応するPDPテーブル1002が存在する場合にはS2608へ進み、対応するテーブル1002が存在しない場合にはS2660へ進む。S2608からS2656のループでは、生成対象となるPDPエントリ1102を順次生成する。生成対象となるPDPエントリ1102が1つのみの場合は、単に、本ループを1度だけ実行する。S3612では、生成するシャドウPT140のPDPエントリ1102に対応する第2のPT170のPDPエントリ1102に関して、RSVビットが0であるかを判定する。RSVビットが0である場合はS3620へ進み、RSVビットが非0である場合はS3616へ進む。S3616で、第2のPTの特性データ102に含まれる、稼動中のゲストのゲスト番号と第2のPTに対応するエントリに対して、予約ビット使用履歴を1に変更する。S3620では、生成するシャドウPT140のPDPエントリ1102に対応する第2のPT170のPDPエントリ1102に関して、Pビットが0であるかを判定する。Pビットが0である場合はS2636へ進み、Pビットが非0である場合はS2624へ進む。S2624では、生成するシャドウPT140のPDPエントリ1102に対応するメモリ領域が読み書きに対してエミュレーションを要するか否かを判定する。本処理に於いて、読み書きに対してエミュレーションを要するメモリ領域とは、第2のPTに於いてAビットが0に設定されたメモリ領域である。当該メモリ領域が、読み書きに対してエミュレーションを要する場合にはS2628へ進み、読み書きに対してエミュレーションを必要としない場合にはS2632へ進む。S2628、S2632、S2636は、実施例1と同一である。S3640では、生成するシャドウPT140のPDPエントリ1102に対応する第2のPT170のPDPエントリ1102に関して、R/Wビットが0であるかを判定する。R/Wビットが0である場合はS2652へ進み、Pビットが非0である場合はS2644へ進む。S2644では、生成するシャドウPT140のPDPエントリ1102に対応するメモリ領域が書き込みに対してエミュレーションを要するか否かを判定する。本処理に於いて、書き込みに対してエミュレーションを要するメモリ領域とは、第2のPTに於いてDビットが0に設定されたメモリ領域である。当該メモリ領域が、書き込みに対してエミュレーションを要する場合にはS2652へ進み、読み書きに対してエミュレーションを必要としない場合にはS2648へ進む。S2648、S2852は、実施例1と同一である。S2660からS2668のループは、実施例1と同一である。S2664は、実施例1と同一である。上記図24のS2460で行うPDEエントリの生成は、図27に示すように、第2のPT170を参照する点のみが実施例1と異なる。S3700では、稼動中のゲストに第2のPTが存在するか否かを調べる。第2のPTの存在は、第2のPTの特性データ102を参照して第2のPTのフォーマットから判断する。第2のPTが存在する場合はS2704へ進み、第2のPTが存在しない場合はS2756へ進む。S2704からS2752のループでは、生成対象となるPDEエントリ1103を順次生成する。生成対象となるPDEエントリ1103が1つのみの場合は、単に、本ループを1度だけ実行する。S3708では、生成するシャドウPT140のPDEエントリ1103に対応する第2のPT170のPDEエントリ1103に関して、RSVビットが0であるかを判定する。RSVビットが0である場合はS3716へ進み、RSVビットが非0である場合はS3712へ進む。S3712では、第2のPTの特性データ102に含まれる、稼動中のゲストのゲスト番号と第2のPTに対応するエントリに対して、予約ビット使用履歴を1に変更する。S3716では、生成するシャドウPT140のPDEエントリ1103に対応する第2のPT170のPDEエントリ1103に関して、Pビットが0であるかを判定する。Pビットが0である場合はS2732へ進み、Pビットが非0である場合はS2720へ進む。S2720では、生成するシャドウPT140のPDEエントリ1103に対応するメモリ領域が読み書きに対してエミュレーションを要するか否かを判定する。本処理に於いて、読み書きに対してエミュレーションを要するメモリ領域とは、第2のPTに於いて、Aビットが0に設定されたメモリ領域である。当該メモリ領域が、読み書きに対してエミュレーションを要する場合にはS2724へ進み、読み書きに対してエミュレーションを必要としない場合にはS2728へ進む。S2724、S2728、S2732は、実施例1と同一である。S2736では、生成するシャドウPT140のPDEエントリ1103に対応する第2のPT170のPDEエントリ1103に関して、R/Wビットが0であるかを判定する。R/Wビットが0である場合はS2748へ進み、R/Wビットが非0である場合はS2740へ進む。S2740では、生成するシャドウPT140のPDEエントリ1103に対応するメモリ領域が書き込みに対してエミュレーションを要するか否かを判定する。本処理に於いて、書き込みに対してエミュレーションを要するメモリ領域とは、第2のPTに於いてDビットが0に設定されたメモリ領域である。当該メモリ領域が、書き込みに対してエミュレーションを要する場合にはS2748へ進み、読み書きに対してエミュレーションを必要としない場合にはS2744へ進む。S2744、S2748は、実施例1と同一である。S2756からS2764のループは、実施例1と同一である。S2760は、実施例1と同一である。上記図24のS2480で行うPTEエントリの生成は、図28に示すように、第2のPT170を参照する点のみが実施例1と異なる。S3800では、稼動中のゲストに第2のPTが存在するか否かを調べる。第2のPTの存在は、第2のPTの特性データ102を参照して第2のPTのフォーマットから判断する。第2のPTが存在する場合はS3804へ進み、第2のPTが存在しない場合はS2856へ進む。S3804では、PTEエントリ1104の生成対象となるメモリ領域に対して、第2のPTにPTEテーブル1004が存在するか否かを調べる。第2のPTに於いて、当該メモリ領域に対応するPDEエントリ1103がPS=1である場合のみ、対応するPTEテーブル1004は存在しない。第2のPTに、対応するPTEテーブル1004が存在する場合にはS2808へ進み、対応するPTEテーブル1004が存在しない場合にはS2856へ進む。S2808からS2852のループでは、生成対象となるPTEエントリ1104を順次生成する。生成対象となるPTEエントリ1104が1つのみの場合は、単に、本ループを1度だけ実行する。S3812では、生成するシャドウPT140のPTEエントリ1104に対応する第2のPT170のPTEエントリ1104に関して、RSVビットが0であるかを判定する。RSVビットが0である場合はS3820へ進み、RSVビットが非0である場合はS3816へ進む。S3816では、第2のPTの特性データ102に含まれる、稼動中のゲストのゲスト番号と第2のPTに対応するエントリに対して、予約ビット使用履歴を1に変更する。S3820では、生成するシャドウPT140のPTEエントリ1104に対応する第2のPT170のPTEエントリ1104に関して、Pビットが0であるかを判定する。Pビットが0である場合はS2836へ進み、Pビットが非0である場合はS2824へ進む。S2824では、生成するシャドウPT140のPTEエントリ1104に対応するメモリ領域が読み書きに対してエミュレーションを要するか否かを判定する。本処理に於いて、読み書きに対してエミュレーションを要するメモリ領域とは、以下2つのいずれかの条件を満たすメモリ領域である。条件1IO装置の制御に使用するMMIOメモリ領域。条件2第2のPTに於いて、Aビットが0に設定されたメモリ領域。当該メモリ領域が、読み書きに対してエミュレーションを要する場合にはS2828へ進み、読み書きに対してエミュレーションを必要としない場合にはS2832へ進む。S2828、S2832、S2836は、実施例1と同一である。S3892では、生成するシャドウPT140のPTEエントリ1104に対応する第2のPT170のPTEエントリ1104に関して、R/Wビットが0であるかを判定する。R/Wビットが0である場合はS2848へ進み、R/Wビットが非0である場合はS2840へ進む。S2840では、生成するシャドウPT140のPTEエントリ1104に対応するメモリ領域が書き込みに対してエミュレーションを要するか否かを判定する。本処理に於いて、書き込みに対してエミュレーションを要するメモリ領域とは、以下2つのいずれかの条件を満たすメモリ領域である。条件1第2のPTが存在するメモリ領域。条件2第2のPTに於いて、Dビットが0に設定されたメモリ領域。当該メモリ領域が、書き込みに対してエミュレーションを要する場合にはS2848へ進み、読み書きに対してエミュレーションを必要としない場合にはS2844へ進む。S2844、S2848は、実施例1と同一である。S2856からS2884のループでは、生成対象となるPTEエントリ1104を順次生成する。生成対象となるPTEエントリ1104が1つのみの場合は、単に、本ループを1度だけ実行する。S2860では、生成するシャドウPT140のPTEエントリ1104に対応するメモリ領域が読み書きに対してエミュレーションを要するか否かを判定する。本処理に於いて、読み書きに対してエミュレーションを要するメモリ領域とは、IO装置の制御に使用するMMIOメモリ領域である。当該メモリ領域が、読み書きに対してエミュレーションを要する場合にはS2864へ進み、読み書きに対してエミュレーションを必要としない場合にはS2868へ進む。S2864、S2868は、実施例1と同一である。<4.まとめ>以上に示した実施例によれば、シャドウPT140のRSVビットを用いて特権メモリに対する読み書き操作を禁止することで、VMM20上で第2のOS40を稼動させた状態でPビットの設定に違反する操作が行われた場合に、エミュレーションが不要であることを高速に判断できるため、オーバヘッドを抑制することができる。以上、本発明者によってなされた発明を実施の形態に基づき具体的に説明したが、本発明は前記実施の形態に限定されるものではなく、その要旨を逸脱しない範囲で種々変更可能であることはいうまでもない。