JP4897578B2 - 仮想計算機の制御プログラムおよび仮想計算機システム - Google Patents

仮想計算機の制御プログラムおよび仮想計算機システム Download PDF

Info

Publication number
JP4897578B2
JP4897578B2 JP2007150973A JP2007150973A JP4897578B2 JP 4897578 B2 JP4897578 B2 JP 4897578B2 JP 2007150973 A JP2007150973 A JP 2007150973A JP 2007150973 A JP2007150973 A JP 2007150973A JP 4897578 B2 JP4897578 B2 JP 4897578B2
Authority
JP
Japan
Prior art keywords
data group
bit
field
memory
cpu
Prior art date
Legal status (The legal status is an assumption and is not a legal conclusion. Google has not performed a legal analysis and makes no representation as to the accuracy of the status listed.)
Expired - Fee Related
Application number
JP2007150973A
Other languages
English (en)
Other versions
JP2008305106A (ja
Inventor
直也 服部
俊臣 森木
雄次 對馬
Current Assignee (The listed assignees may be inaccurate. Google has not performed a legal analysis and makes no representation or warranty as to the accuracy of the list.)
Hitachi Ltd
Original Assignee
Hitachi Ltd
Priority date (The priority date is an assumption and is not a legal conclusion. Google has not performed a legal analysis and makes no representation as to the accuracy of the date listed.)
Filing date
Publication date
Application filed by Hitachi Ltd filed Critical Hitachi Ltd
Priority to JP2007150973A priority Critical patent/JP4897578B2/ja
Priority to US12/030,498 priority patent/US8099575B2/en
Publication of JP2008305106A publication Critical patent/JP2008305106A/ja
Priority to US13/338,806 priority patent/US8650375B2/en
Application granted granted Critical
Publication of JP4897578B2 publication Critical patent/JP4897578B2/ja
Expired - Fee Related legal-status Critical Current
Anticipated expiration legal-status Critical

Links

Images

Classifications

    • GPHYSICS
    • G06COMPUTING; CALCULATING OR COUNTING
    • G06FELECTRIC DIGITAL DATA PROCESSING
    • G06F9/00Arrangements for program control, e.g. control units
    • G06F9/06Arrangements for program control, e.g. control units using stored programs, i.e. using an internal store of processing equipment to receive or retain programs
    • G06F9/44Arrangements for executing specific programs
    • G06F9/455Emulation; Interpretation; Software simulation, e.g. virtualisation or emulation of application or operating system execution engines
    • G06F9/45533Hypervisors; Virtual machine monitors
    • G06F9/45558Hypervisor-specific management and integration aspects
    • GPHYSICS
    • G06COMPUTING; CALCULATING OR COUNTING
    • G06FELECTRIC DIGITAL DATA PROCESSING
    • G06F9/00Arrangements for program control, e.g. control units
    • G06F9/06Arrangements for program control, e.g. control units using stored programs, i.e. using an internal store of processing equipment to receive or retain programs
    • G06F9/44Arrangements for executing specific programs
    • G06F9/455Emulation; Interpretation; Software simulation, e.g. virtualisation or emulation of application or operating system execution engines
    • G06F9/45533Hypervisors; Virtual machine monitors
    • G06F9/45558Hypervisor-specific management and integration aspects
    • G06F2009/45579I/O management, e.g. providing access to device drivers or storage
    • GPHYSICS
    • G06COMPUTING; CALCULATING OR COUNTING
    • G06FELECTRIC DIGITAL DATA PROCESSING
    • G06F9/00Arrangements for program control, e.g. control units
    • G06F9/06Arrangements for program control, e.g. control units using stored programs, i.e. using an internal store of processing equipment to receive or retain programs
    • G06F9/44Arrangements for executing specific programs
    • G06F9/455Emulation; Interpretation; Software simulation, e.g. virtualisation or emulation of application or operating system execution engines
    • G06F9/45533Hypervisors; Virtual machine monitors
    • G06F9/45558Hypervisor-specific management and integration aspects
    • G06F2009/45587Isolation or security of virtual machine instances

Landscapes

  • Engineering & Computer Science (AREA)
  • Software Systems (AREA)
  • Theoretical Computer Science (AREA)
  • Physics & Mathematics (AREA)
  • General Engineering & Computer Science (AREA)
  • General Physics & Mathematics (AREA)
  • Memory System Of A Hierarchy Structure (AREA)

Description

本発明は仮想計算機の制御プログラムおよび仮想計算機システムに関し、特に、ゲストによるメモリ操作に対してエミュレーション要否判定を行う制御プログラムおよびこの制御プログラムによって動作する仮想計算機システムに適用して有益な技術に関する。
近年、サーバ台数の増加と共に運用に関する複雑さが増加しており、運用コストが問題化し、運用コストを低減する技術として複数サーバを1台にまとめるサーバ統合が注目を集めている。サーバ統合を実現する技術として、一つのコンピュータを任意の割合で論理的に分割する仮想計算機技術が知られている。仮想計算機技術では、例えば、ハイパバイザなどのファームウェア(またはミドルウェア)が、物理計算機を複数の論理区画(LPAR:Logical PARtition)に分割し、各LPARに対して計算機資源(CPU、主記憶、I/O)を割り当て、各LPAR上でそれぞれOSを動作させる。あるいは、一つのサーバ上で一つのホストOS(物理計算機を直接使用するOS)を実行し、このホストOS上で稼動するハイパバイザが同様の分割処理を行って、複数のゲストOS(ホストOS上で稼動するOS)を稼動させる。
このように、仮想計算機技術は、従来複数のサーバで稼動していたOS及びOS上で稼動するソフトウェアを、1台のサーバで稼動させることを可能にしており、サーバ統合を実現している。仮想計算機技術は、従来では汎用機(MainFrame)等の大型計算機で用いられてきた技術であるが、近年ではマイクロプロセッサの性能向上に伴いローエンドサーバおよびパーソナルコンピュータでも普及しつつある。なお、仮想計算機技術に関しては、一般的に以下のような技術が知られている。
例えば、特許文献1には、x86互換のCPUを用いて、メモリ特権命令をエミュレーションするソフトウェア技術が記載されている。この技術では、仮想計算機モニタ(Virtual Machine Monitor、以下VMMとする)上にシャドウページテーブル(アクティブ・トランスレーション・データ・ストラクチャ)が設けられ、エミュレーションの要否判定を行うために、このシャドウページテーブルのPビットが‘0’に設定される。
特許文献2には、一般にVT−x(Virtualization Technology for x86)と呼ばれている仮想化技術におけるハードウェア機能(Page Fault Error Code Mask/Match)が示されている。近年、x86互換のCPUにはVMMを支援する機能が追加される傾向にある。このPage Fault Error Code Mask/Match機能を用いることで、ページ例外に対するエミュレーション要否判定を効率化できる。
特許文献3には、x86互換CPUを用いて、仮想化ソフトを実現するソフトウェア技術が記載されている。具体的には、レジスタ特権命令/メモリ特権命令のエミュレーション方法が示されている。
非特許文献1には、インテル社のCPUの基本アーキテクチャが記載されており、非特許文献2には、AMD社のCPUの基本アーキテクチャが記載されている。
米国特許第6,907,600号明細書 米国特許第6,996,748号明細書 米国特許第6,397,242号明細書 Intel(R) 64 and IA-32 Architectures Software Developer’s Manual AMD64 Architecture Programmer’s Manual
前述したような仮想計算機技術を採用したサーバ等の計算機は、ゲスト(ゲストOS及び、ゲストOS上で稼動するソフトウェアの総称)を稼動させる複数の仮想計算機(VM:Virtual Machine)と、仮想計算機の制御を行う仮想計算機モニタ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(AMD Virtualization)機能といった、VMM支援機能を用いれば高速にエミュレーション可能である。一方で、メモリ特権命令に関しては、エミュレーションの方法次第でオーバヘッドが大きく変化するため、メモリ特権命令のエミュレーション方法が重要になる。
x86互換CPUを搭載する計算機を用いて第2のOSを複数稼動させる場合で、メモリ特権命令のエミュレーションを行うために必要と考えられる仮想計算機システムの構成例を図1および図2に示す。図1において、エミュレーションには、物理計算機10に搭載されたCPU60が提供するページ例外検出機能71を利用する。VMM20は、エミュレーションに伴うオーバヘッドを抑制するために、エミュレーションの要否判定を行い、必要と判定した場合のみエミュレーションを行う。
ページ例外検出機能71には、メモリ領域毎のアクセス可否情報を保持するTLB73と、メモリ領域毎のアクセス可否情報を保持するページテーブル(PT)のメモリアドレスを保持するPTアドレスレジスタ72が含まれる。アクセス可否情報には、読み書きの一切を禁止するPresentビット(Pビット)、書き込みを禁止するRead/Writeビット(R/Wビット)と、読み書きの一切を禁止するReservedビット(RSVビット)が含まれる。アクセス可否情報に違反するメモリ操作を検出した場合、ページ例外検出機能71はページ例外を発生させて、プログラムの実行をイベントハンドラ80に遷移させる。またイベントハンドラ80に、アクセス可否情報のどのビットに違反したかを示す原因コードを渡す。
VMM20は仮想計算機25を構築し、VMM20上で稼動する第2のOS40は、第2のPT170と第2のイベントハンドラ172を有し、第2のPT170にメモリ領域毎のアクセス可否情報を設定する。また第2のOS40上ではアプリケーション(AP)50が動作する。
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に示されるようなPage Fault Error Code Mask/Match機能と、Nested Paging機能が追加されている。Page Fault Error Code Mask/Match機能は、ページ例外の原因コードに応じて、ページ例外発生時に分岐するイベントハンドラを選択する機能である。本機能を用いると、エミュレーションが必要な可能性のあるPビット違反又はR/Wビット違反のページ例外の場合だけイベントハンドラ80に分岐させ、エミュレーションが不要なそれ以外のページ例外の場合には第2のイベントハンドラ172に分岐させることで高速化が可能となる。
Nested Paging機能は、ページ例外の検出に2つのページテーブル(PT)を使用し、ページ例外の原因となったページテーブルに応じて、ページ例外発生時に分岐するイベントハンドラを選択する機能である。本機能を用いると、エミュレーションが必要な可能性のあるシャドウPTの設定に違反した場合だけイベントハンドラ80に分岐させ、エミュレーションが不要な第2のPTの設定に違反した場合だけ第2のイベントハンドラ172に分岐させることで高速化が可能となる。
Nested Paging機能のように、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上ではアプリケーション(AP)50が動作する。
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や、リザーブビット(RSV)1119や、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アダプタ、SAN470(Storage Area Network)に接続されるファイバーチャネルアダプタなどで構成され、各I/Oデバイスに接続される。
CPU60は、ノースブリッジ420を介してメモリにアクセスし、ノースブリッジ420からI/Oインターフェース440を介してI/Oデバイスにアクセスして所定の処理を行う。なお、ノースブリッジ420は、主記憶215を制御するとともに、グラフィックコントローラを含んでコンソール430にも接続され、画像の表示を行うことができる。
主記憶215には、仮想計算機モニタ(VMM)20がロードされ、このVMM20が実現する仮想計算機25が、第1のOS30又は第2のOS40を実行する。第1のOS30は仮想計算機25上で、任意の第2のOSを実行する。また第2のOSは仮想計算機25上で、任意のアプリケーション(AP)50を実行する。
<2.ソフトウェア構成>
次に、物理計算機10上で仮想計算機25を実現するソフトウェア構成の主要部について、図4を参照しながら詳述する。
物理計算機10上では、複数の仮想計算機25を管理するVMM20が稼動している。各仮想計算機25では、第1のOS30または第2のOS40が1つ以上稼動する。第1のOS30の上では、第2のOS40が1つ以上稼動する。また第2のOS40の上では、アプリケーション(AP)50が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装置の制御に使用するMMIO(Memory Mapped I/O)メモリアドレスに対して読み書きの一切を禁止するために、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のPT160及び第2のPT170)とゲストイベントハンドラ(第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(Page Map Level 4)テーブル1001、PDP(Page Directory Pointer)テーブル1002、PDE(Page Directory Entry)テーブル1003、PTE(Page Table Entry)テーブル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(Page Size Extension)を利用する場合は、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が非Intel64(IA-32)として動作する場合の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つのいずれかの条件を満たすメモリ領域である。(条件1)IO装置の制御に使用する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には、仮想計算機モニタ(VMM)20がロードされ、この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装置の制御に使用するMMIO(Memory Mapped I/O)メモリアドレスに対して読み書きの一切を禁止するために、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とpage-fault error code mask/match機能76を有する。TLB73はメモリ領域に対するアクセスの可否を保持する。PTアドレスレジスタ72はシャドウPT140の先頭アドレスを保持する。TLB73には、シャドウPT140に於けるアクセス可否の設定がコピーされる。page-fault error code mask/match機能76は、ページ例外の原因コードとページ例外発生時に呼び出すイベントハンドラの対応を保持する。
1つのPTのみを用いるページ例外検出機能71は、シャドウPT140で禁止されたメモリ操作を検出した場合は、原因コードと操作対象メモリアドレスを保存し、page-fault error code mask/match機能76の設定に従って、VMM20内のイベントハンドラ80または第2のイベントハンドラ172に分岐する。第2のOS40は、第2のPT170と第2のイベントハンドラ172を有し、1つ以上のAP50を稼動させる。
図30は、page-fault error code mask/match機能76に設定するpage-fault error code mask77、page-fault error code match78、exception bitmap79のフォーマットである。上記に対する設定よって、ページ例外の原因コードと呼び出すイベントハンドラが対応付けられる。page-fault error code mask77及び、page-fault error code match78は、原因コードと同じフォーマットである。exception bitmap79は32ビットの値であり、各ビットがx86互換CPUの例外の番号に対応している。ビット14(1260)がページ例外に対応する。
page-fault error code mask/match機能76は、ページ例外の発生時に、ページ例外の原因コードとpage-fault error code mask77の論理和を計算し、当該論理和とpage-fault error code match78が一致する場合は、ビット14(1260)の0/1に従って第2のイベントハンドラ172/イベントハンドラ80をそれぞれ呼び出す。当該論理和とpage-fault error code match78が不一致の場合は、ビット14(1260)の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に示すように、page-fault error code mask/match機能の設定を行う点と、操作対象のレジスタのみが実施例1と異なる。
S2100は、実施例1と同一である。
S2110では、VMM20が、第2のPTの特性データ102内の初期化中のゲストの番号に対応するエントリに対して、第2のPTアドレスを0に設定し、第2のPTのフォーマットをPTなしに設定し、予約ビット使用履歴を0に設定する。
S2120では、VMM20が、初期化したシャドウPT140の先頭アドレスを、CPU60が有するPTアドレスレジスタ72に登録する。
S2130では、VMM20が、page-fault error code mask/match機能76を、Pビット違反のページ例外が発生した場合に第2のイベントハンドラ172が呼ばれるように設定する。設定の内容は、page-fault error code mask77を1に設定しpage-fault error code match78を1に設定しビット14(1260)を1に設定しても良いし、page-fault error code mask77を1に設定しpage-fault error code match78を0に設定しビット14(1260)を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つのいずれかの条件を満たすメモリ領域である。(条件1)IO装置の制御に使用する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ビットの設定に違反する操作が行われた場合に、エミュレーションが不要であることを高速に判断できるため、オーバヘッドを抑制することができる。
以上、本発明者によってなされた発明を実施の形態に基づき具体的に説明したが、本発明は前記実施の形態に限定されるものではなく、その要旨を逸脱しない範囲で種々変更可能であることはいうまでもない。
本発明の仮想計算機システムは、x86互換のCPUを備えた仮想計算機システムに適用して特に有益な技術であり、これに限らず、仮想計算機システム全般に対して広く適用可能である。
本発明の前提として検討した仮想計算機システムの構成例を示すブロック図である。 本発明の前提として検討した仮想計算機システムの他の構成例を示すブロック図である。 本発明の実施例1において、仮想計算機システムのハードウェア構成例を示す概略図である。 本発明の実施例1において、仮想計算機システムのソフトウェアとハードウェアの要部の構成例を示すブロック図である。 本発明の実施例1において、主記憶のメモリマップの一例を示す図である。 Intel64を用いた場合のページテーブルの構成を示す図である。 Intel64を用いた場合のページテーブルのエントリのフォーマットを示す図である。 Intel64を用いた場合のページ例外発生時の原因コードのフォーマットを示す図である。 本発明の実施例1において、第1のPTの特性データの構成例を示す図である。 本発明の実施例1及び2において、ゲスト及びVMMの動作概要の一例を示すフローチャートである。 本発明の実施例1において、シャドウPTの初期化処理の一例を示すフローチャートである。 本発明の実施例1及び2において、シャドウPTの再初期化処理の一例を示すフローチャートである。 本発明の実施例1において、ページ例外に対するVMMの処理の一例を示すフローチャートである。 本発明の実施例1において、シャドウPTエントリの生成処理の一例を示すフローチャートである。 本発明の実施例1において、シャドウPML4エントリの生成処理の一例を示すフローチャートである。 本発明の実施例1において、シャドウPDPエントリの生成処理の一例を示すフローチャートである。 本発明の実施例1において、シャドウPDEエントリの生成処理の一例を示すフローチャートである。 本発明の実施例1において、シャドウPTEエントリの生成処理の一例を示すフローチャートである。 本発明の実施例2において、仮想計算機システムのハードウェア構成例を示す概略図である。 本発明の実施例2において、仮想計算機システムのソフトウェアとハードウェアの要部の構成例を示すブロック図である。 本発明の実施例2において、主記憶のメモリマップの一例を示す図である。 本発明の実施例2において、第2のPTの特性データの構成例を示す図である。 本発明の実施例2において、ページ例外に対するVMMの処理の一例を示すフローチャートである。 本発明の実施例2において、シャドウPTエントリの生成処理の一例を示すフローチャートである。 本発明の実施例2において、シャドウPML4エントリの生成処理の一例を示すフローチャートである。 本発明の実施例2において、シャドウPDPエントリの生成処理の一例を示すフローチャートである。 本発明の実施例2において、シャドウPDEエントリの生成処理の一例を示すフローチャートである。 本発明の実施例2において、シャドウPTEエントリの生成処理の一例を示すフローチャートである。 本発明の実施例2において、シャドウPTの初期化処理の一例を示すフローチャートである。 VT−x対応CPUを用いた場合の、page-fault error code mask/match機能の制御に用いるデータ構造である。 仮想計算機内のOSに含まれるページテーブル(PT)の構成例を示す図である。 本発明の前提として検討した仮想計算機システムにおいて、それに含まれるシャドウPTの構成例を示す図である。 本発明の一実施の形態による仮想計算機システムにおいて、それに含まれるシャドウPTの構成例を示す図である。
符号の説明
10 物理計算機
20 VMM
25 仮想計算機
30 第1のOS
40 第2のOS
50 AP
60 CPU
70 2つのPTを用いるページ例外検出機能
71 1つのPTのみを用いるページ例外検出機能
72 PTアドレスレジスタ
73 TLB
74 PTアドレスレジスタA
75 PTアドレスレジスタB
76 page-fault error code mask/match機能
80 イベントハンドラ
85 障害処理部
90 ページ例外の原因コード解析部
100 第1のPT履歴管理部
101 第1のPTの特性データ
102 第2のPTの特性データ
105 第2のPT履歴管理部
110 第1のPT解析部
115 第2のPT解析部
120 イベント報告部
130 エミュレータ
140 シャドウPT
160 第1のPT
162 第1のイベントハンドラ
170 第2のPT
172 第2のイベントハンドラ
215 主記憶
216 MMIOアドレス
218 物理メモリ空間

Claims (16)

  1. CPUとメモリを有する計算機を用いて複数のOSを稼動させる仮想計算機の制御プログラムであって、
    前記CPUは、メモリ領域毎の操作可否情報を格納する第2のデータ群に基づいて制御されるメモリ保護機能を有し、
    前記第2のデータ群には、操作の可否の制御に使用できるフィールドとして、メモリアドレスの有効性の判定に用いられるフィールドである第1のフィールドと、用途が未設定のフィールドである第2のフィールドが備わり、
    前記OSは、前記第2のデータ群と同じデータ構造を持つ第1のデータ群を前記メモリ上で管理し、
    前記メモリ保護機能は、前記第2のデータ群における前記第1または前記第2のフィールドが操作禁止設定である場合に、当該メモリ領域の操作命令に対して保護例外を発生し、当該保護例外の発生理由となったフィールドを示す原因コードを生成し
    前記第2のデータ群は、前記第1のデータ群を基準として、IO装置の制御に用いられるメモリ領域に対応する前記第2のフィールドが操作禁止の設定に変更されたものであり、
    記制御プログラムは、
    前記第1のデータ群を参照して前記第2のデータ群を生成する手順と、
    前記メモリ保護機能に前記第2のデータ群を参照させる手順と、
    前記保護例外の発生時に前記原因コードを参照して、前記原因コードが示す当該保護例外の発生理由が前記第1のフィールドである場合に、IO装置の制御に伴うエミュレーションを不要と判断し、前記原因コードが示す当該保護例外の発生理由が前記第2のフィールドである場合に、IO装置の制御に伴うエミュレーションを要と判断する手順と、を前記計算機に実行させることを特徴とする仮想計算機の制御プログラム。
  2. 請求項1記載の仮想計算機の制御プログラムにおいて、
    前記第1および前記第2のデータ群のそれぞれは、アドレス変換に用いるデータ群であることを特徴とする仮想計算機の制御プログラム。
  3. 請求項記載の仮想計算機の制御プログラムにおいて、
    前記制御プログラムは、前記第2のデータ群を初期化する際に、前記第2のデータ群に於ける前記第2のフィールドを操作禁止設定にする手順を前記計算機に実行させることを特徴とする仮想計算機の制御プログラム。
  4. 請求項記載の仮想計算機の制御プログラムにおいて、
    前記制御プログラムは、
    前記第2のデータ群の初期化時に、前記第1のデータ群中の前記第2のフィールドの利用履歴を示す利用フラグをリセットする手順と、
    前記第1のデータ群中の前記第2のフィールドの設定を読み、操作禁止が設定されている場合に前記利用フラグをセットする手順と、
    前記保護例外の発生時に、前記原因コードを読む手順と、
    前記原因コードが前記第2のフィールドを示し、かつ前記利用フラグがリセットされている場合に、前記エミュレーション要と判断する手順と、を前記計算機に実行させることを特徴とする仮想計算機の制御プログラム。
  5. 請求項記載の仮想計算機の制御プログラムにおいて、
    前記CPUは、VT−xに対応したx86互換CPUであり
    記第1のフィールドはPresentビットであり、
    前記第2のフィールドはReservedビットであり、
    前記原因コードは、ページフォルトのエラーコードであり、
    前記OSは、OSのイベントハンドラを有し、
    前記制御プログラムは、前記CPUが有するpage-fault error-code maskとpage-fault error-code matchとexception bitmapを、Presentビットが0であるメモリ領域の操作に起因するページフォルトの発生時に前記OSのイベントハンドラに直接分岐する設定にする手順を前記計算機に実行させることを特徴とする仮想計算機の制御プログラム。
  6. 請求項記載の仮想計算機の制御プログラムにおいて、
    前記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に参照させる手順と、を前記計算機に実行させることを特徴とする仮想計算機の制御プログラム。
  7. CPUとメモリを有し、複数のOSおよび前記複数のOSを稼動する制御プログラムが実装された仮想計算機システムであって、
    前記CPUは、メモリ領域毎の操作可否情報を格納する第2のデータ群に基づいて制御されるメモリ保護機能を有し、
    前記第2のデータ群には、操作の可否の制御に使用できるフィールドとして、メモリアドレスの有効性の判定に用いられるフィールドである第1のフィールドと、用途が未設定のフィールドである第2のフィールドが備わり、
    前記OSは、前記第2のデータ群と同じデータ構造を持つ第1のデータ群を前記メモリ上で管理し、
    前記メモリ保護機能は、前記第2のデータ群における前記第1または前記第2のフィールドが操作禁止設定である場合に、当該メモリ領域の操作命令に対して保護例外を発生し、当該保護例外の発生理由となったフィールドを示す原因コードを生成し
    前記第2のデータ群は、前記第1のデータ群を基準として、IO装置の制御に用いられるメモリ領域に対応する前記第2のフィールドが操作禁止の設定に変更されたものであり、
    記制御プログラムは、
    前記第1のデータ群を参照して前記第2のデータ群を生成する機能と、
    前記メモリ保護機能に前記第2のデータ群を参照させる機能と、
    前記保護例外の発生時に前記原因コードを参照して、前記原因コードが示す当該保護例外の発生理由が前記第1のフィールドである場合に、IO装置の制御に伴うエミュレーションを不要と判断し、前記原因コードが示す当該保護例外の発生理由が前記第2のフィールドである場合に、IO装置の制御に伴うエミュレーションを要と判断する機能と、を有することを特徴とする仮想計算機システム。
  8. 請求項7記載の仮想計算機システムにおいて、
    前記第1および前記第2のデータ群のそれぞれは、アドレス変換に用いるデータ群であることを特徴とする仮想計算機システム。
  9. 請求項記載の仮想計算機システムにおいて、
    前記制御プログラムは、前記第2のデータ群を初期化する際に、前記第2のデータ群に於ける前記第2のフィールドを操作禁止設定にする機能を有することを特徴とする仮想計算機システム。
  10. 請求項記載の仮想計算機システムにおいて、
    前記制御プログラムは、
    前記第2のデータ群の初期化時に、前記第1のデータ群中の前記第2のフィールドの利用履歴を示す利用フラグをリセットする機能と、
    前記第1のデータ群中の前記第2のフィールドの設定を読み、操作禁止が設定されている場合に前記利用フラグをセットする機能と、
    前記保護例外の発生時に、前記原因コードを読む機能と、
    前記原因コードが前記第2のフィールドを示し、かつ前記利用フラグがリセットされている場合に、前記エミュレーション要と判断する機能とを有することを特徴とする仮想計算機システム。
  11. 請求項記載の仮想計算機システムにおいて、
    前記CPUは、VT−xに対応したx86互換CPUであり
    記第1のフィールドはPresentビットであり、
    前記第2のフィールドはReservedビットであり、
    前記原因コードは、ページフォルトのエラーコードであり、
    前記OSは、OSのイベントハンドラを有し、
    前記制御プログラムは、前記CPUが有するpage-fault error-code maskとpage-fault error-code matchとexception bitmapを、Presentビットが0であるメモリ領域の操作に起因するページフォルトの発生時に前記OSのイベントハンドラに直接分岐する設定にする機能を有することを特徴とする仮想計算機システム。
  12. 請求項記載の仮想計算機システムにおいて、
    前記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に参照させる機能とを有することを特徴とする仮想計算機システム。
  13. CPUおよびメモリを含むコンピュータシステムを用いたプログラム処理によって実現され、複数のOSと、前記複数のOSを駆動する制御プログラムとが実装された仮想計算機システムであって、
    前記複数のOSのそれぞれは、
    第1のイベントハンドラと、
    前記メモリを複数のメモリ領域に分割して、各メモリ領域毎のメモリアドレスやアクセス可否を管理する第1のデータ群とを備え、
    前記制御プログラムは、
    第2のイベントハンドラと、
    前記複数のOSのそれぞれが発生した命令に対応してI/O装置の制御に伴うエミュレーションを実行する第1機能と、
    前記第1のデータ群を反映して第2のデータ群を生成する第2機能とを備え、
    前記第1および前記第2のデータ群のそれぞれには、操作の可否の制御に使用できるフィールドとして、メモリアドレスの有効性の判定に用いられるフィールドである第1のフィールドと、用途が未設定のフィールドである第2のフィールドが備わり、
    前記第2機能は、IO装置の制御に用いるメモリ領域に対して、前記第2のデータ群の前記第2のフィールドをアクセス禁止に設定し、
    記CPUは、前記第2のデータ群の前記第1のフィールドがアクセス禁止に設定されている場合に前記第1のイベントハンドラへ通知を行い、前記第2のデータ群の前記第2のフィールドがアクセス禁止に設定されている場合に前記第2のイベントハンドラへ通知を行い、
    前記制御プログラムは、前記第2のイベントハンドラへ通知が行われた際に前記エミュレーションを実行することを特徴とする仮想計算機システム。
  14. 請求項13記載の仮想計算機システムにおいて、
    前記第1および前記第2のデータ群のそれぞれは、アドレス変換に用いるデータ群であることを特徴とする仮想計算機システム。
  15. 請求項14記載の仮想計算機システムにおいて、
    前記第2機能は、初期状態として前記第2のデータ群の前記第2のフィールドをアクセス禁止に設定し、その後、前記複数のOSが前記第1のデータ群に基づいて前記メモリに対するアクセス命令を発生した際に、このアクセス命令を前記第2のイベントハンドラを介して検出し、このアクセス命令に対応して前記第2のデータ群を生成することを特徴とする仮想計算機システム。
  16. 請求項14記載の仮想計算機システムにおいて、
    前記制御プログラムは、更に、前記第1のデータ群の前記第2のフィールドの利用有無を管理する第3機能を備え、前記CPUより前記第2のイベントハンドラへ通知があった際に、前記第1のデータ群の前記第2のフィールドの利用が無い場合に前記エミュレーションを実行することを特徴とする仮想計算機システム。
JP2007150973A 2007-06-06 2007-06-06 仮想計算機の制御プログラムおよび仮想計算機システム Expired - Fee Related JP4897578B2 (ja)

Priority Applications (3)

Application Number Priority Date Filing Date Title
JP2007150973A JP4897578B2 (ja) 2007-06-06 2007-06-06 仮想計算機の制御プログラムおよび仮想計算機システム
US12/030,498 US8099575B2 (en) 2007-06-06 2008-02-13 Virtual machine control program and virtual machine system
US13/338,806 US8650375B2 (en) 2007-06-06 2011-12-28 Virtual machine control program and virtual machine system

Applications Claiming Priority (1)

Application Number Priority Date Filing Date Title
JP2007150973A JP4897578B2 (ja) 2007-06-06 2007-06-06 仮想計算機の制御プログラムおよび仮想計算機システム

Related Child Applications (1)

Application Number Title Priority Date Filing Date
JP2011280974A Division JP2012118996A (ja) 2011-12-22 2011-12-22 仮想計算機の制御プログラム、計算機システム、および仮想計算機の制御方法

Publications (2)

Publication Number Publication Date
JP2008305106A JP2008305106A (ja) 2008-12-18
JP4897578B2 true JP4897578B2 (ja) 2012-03-14

Family

ID=40096937

Family Applications (1)

Application Number Title Priority Date Filing Date
JP2007150973A Expired - Fee Related JP4897578B2 (ja) 2007-06-06 2007-06-06 仮想計算機の制御プログラムおよび仮想計算機システム

Country Status (2)

Country Link
US (2) US8099575B2 (ja)
JP (1) JP4897578B2 (ja)

Families Citing this family (16)

* Cited by examiner, † Cited by third party
Publication number Priority date Publication date Assignee Title
JP2009134565A (ja) * 2007-11-30 2009-06-18 Hitachi Ltd 仮想計算機システム及び仮想計算機システムの制御方法
JP4934642B2 (ja) 2008-06-11 2012-05-16 株式会社日立製作所 計算機システム
US20100017026A1 (en) * 2008-07-21 2010-01-21 Honeywell International Inc. Robotic system with simulation and mission partitions
US8763015B1 (en) * 2008-09-30 2014-06-24 Emc Corporation Efficient multi-node system for providing event information to event handling components
KR101540798B1 (ko) * 2008-11-21 2015-07-31 삼성전자 주식회사 가상화 환경에서 보안 정보를 제공하기 위한 장치 및 방법
US8161260B2 (en) * 2009-02-09 2012-04-17 Oracle International Corporation Optimal memory allocation for guested virtual machine(s)
US8205050B2 (en) * 2009-04-14 2012-06-19 Novell, Inc. Data backup for virtual machines
JP2011118578A (ja) * 2009-12-02 2011-06-16 Renesas Electronics Corp 情報処理装置
JP5574230B2 (ja) * 2010-04-28 2014-08-20 株式会社日立製作所 障害処理方法および計算機
US20130326519A1 (en) * 2011-12-30 2013-12-05 Andrew V. Anderson Virtual machine control structure shadowing
US9983893B2 (en) 2013-10-01 2018-05-29 Red Hat Israel, Ltd. Handling memory-mapped input-output (MMIO) based instructions using fast access addresses
US9916173B2 (en) * 2013-11-25 2018-03-13 Red Hat Israel, Ltd. Facilitating execution of MMIO based instructions
US9846610B2 (en) 2016-02-08 2017-12-19 Red Hat Israel, Ltd. Page fault-based fast memory-mapped I/O for virtual machines
DE102016105136B4 (de) * 2016-03-18 2023-10-26 Abb Schweiz Ag Maskierung des Einflusses nichtunterstützter Feldbuskommandos
EP3355188B1 (en) 2017-01-31 2021-08-25 OpenSynergy GmbH Instrument display on a car dashboard by checking frames of a gui by a realtime os
CN108363726A (zh) * 2018-01-10 2018-08-03 郑州云海信息技术有限公司 一种改进的cpu和os的兼容性数据查询的方法及***

Family Cites Families (8)

* Cited by examiner, † Cited by third party
Publication number Priority date Publication date Assignee Title
US6397242B1 (en) 1998-05-15 2002-05-28 Vmware, Inc. Virtualization system including a virtual machine monitor for a computer with a segmented architecture
US6907600B2 (en) 2000-12-27 2005-06-14 Intel Corporation Virtual translation lookaside buffer
US6996748B2 (en) 2002-06-29 2006-02-07 Intel Corporation Handling faults associated with operation of guest software in the virtual-machine architecture
US7409487B1 (en) * 2003-06-30 2008-08-05 Vmware, Inc. Virtualization system for computers that use address space indentifiers
US7310721B2 (en) * 2003-10-30 2007-12-18 Microsoft Corporation Shadow page tables for address translation control
US7886126B2 (en) * 2005-01-14 2011-02-08 Intel Corporation Extended paging tables to map guest physical memory addresses from virtual memory page tables to host physical memory addresses in a virtual machine system
US7395405B2 (en) * 2005-01-28 2008-07-01 Intel Corporation Method and apparatus for supporting address translation in a virtual machine environment
JP4322232B2 (ja) * 2005-06-14 2009-08-26 株式会社ソニー・コンピュータエンタテインメント 情報処理装置、プロセス制御方法、並びにコンピュータ・プログラム

Also Published As

Publication number Publication date
US8650375B2 (en) 2014-02-11
US20080307180A1 (en) 2008-12-11
JP2008305106A (ja) 2008-12-18
US8099575B2 (en) 2012-01-17
US20120124575A1 (en) 2012-05-17

Similar Documents

Publication Publication Date Title
JP4897578B2 (ja) 仮想計算機の制御プログラムおよび仮想計算機システム
US11681639B2 (en) Direct access to a hardware device for virtual machines of a virtualized computer system
Kivity et al. kvm: the Linux virtual machine monitor
Fraser et al. Safe hardware access with the Xen virtual machine monitor
US7376949B2 (en) Resource allocation and protection in a multi-virtual environment
US9207939B2 (en) Performing shadowing function by virtual machine manager in two-level virtual machine environment
Mergen et al. Virtualization for high-performance computing
US8612633B2 (en) Virtual machine fast emulation assist
US7818808B1 (en) Processor mode for limiting the operation of guest software running on a virtual machine supported by a virtual machine monitor
US7127548B2 (en) Control register access virtualization performance improvement in the virtual-machine architecture
JP5731642B2 (ja) アダプタのアドレス・スペースへのゲスト・アクセスのための方法、システム、およびコンピュータ・プログラム
US8458387B2 (en) Converting a message signaled interruption into an I/O adapter event notification to a guest operating system
US7725894B2 (en) Enhanced un-privileged computer instruction to store a facility list
US9213661B2 (en) Enable/disable adapters of a computing environment
KR20130032358A (ko) 메시지 시그널 인터럽션을 i/o 어댑터 이벤트 통지로 변환
US20230205713A1 (en) Computer device, exception processing method, and interrupt processing method
US10489185B2 (en) Hypervisor-assisted approach for locating operating system data structures based on attribute matching
JP7386882B2 (ja) セキュア仮想マシン環境におけるゲスト命令の透過的解釈
US20180267818A1 (en) Hypervisor-assisted approach for locating operating system data structures based on notification data
Tian et al. {coIOMMU}: A virtual {IOMMU} with cooperative {DMA} buffer tracking for efficient memory management in direct {I/O}
JP5925288B2 (ja) 計算機、アクセス管理方法およびアクセス管理プログラム
Grinberg et al. Architectural virtualization extensions: A systems perspective
Huang et al. Ally: OS-transparent packet inspection using sequestered cores
JP2012118996A (ja) 仮想計算機の制御プログラム、計算機システム、および仮想計算機の制御方法
JPH06332803A (ja) 仮想計算機システムにおけるtlb制御方法

Legal Events

Date Code Title Description
A621 Written request for application examination

Free format text: JAPANESE INTERMEDIATE CODE: A621

Effective date: 20100303

A977 Report on retrieval

Free format text: JAPANESE INTERMEDIATE CODE: A971007

Effective date: 20110727

A131 Notification of reasons for refusal

Free format text: JAPANESE INTERMEDIATE CODE: A131

Effective date: 20110830

A521 Written amendment

Free format text: JAPANESE INTERMEDIATE CODE: A523

Effective date: 20111028

TRDD Decision of grant or rejection written
A01 Written decision to grant a patent or to grant a registration (utility model)

Free format text: JAPANESE INTERMEDIATE CODE: A01

Effective date: 20111122

A01 Written decision to grant a patent or to grant a registration (utility model)

Free format text: JAPANESE INTERMEDIATE CODE: A01

A61 First payment of annual fees (during grant procedure)

Free format text: JAPANESE INTERMEDIATE CODE: A61

Effective date: 20111222

R150 Certificate of patent or registration of utility model

Free format text: JAPANESE INTERMEDIATE CODE: R150

FPAY Renewal fee payment (event date is renewal date of database)

Free format text: PAYMENT UNTIL: 20150106

Year of fee payment: 3

LAPS Cancellation because of no payment of annual fees