JP2007004661A - 仮想計算機の制御方法及びプログラム - Google Patents
仮想計算機の制御方法及びプログラム Download PDFInfo
- Publication number
- JP2007004661A JP2007004661A JP2005186173A JP2005186173A JP2007004661A JP 2007004661 A JP2007004661 A JP 2007004661A JP 2005186173 A JP2005186173 A JP 2005186173A JP 2005186173 A JP2005186173 A JP 2005186173A JP 2007004661 A JP2007004661 A JP 2007004661A
- Authority
- JP
- Japan
- Prior art keywords
- guest
- program
- virtual machine
- memory
- memory protection
- 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.)
- Pending
Links
Images
Classifications
-
- G—PHYSICS
- G06—COMPUTING OR CALCULATING; COUNTING
- G06F—ELECTRIC DIGITAL DATA PROCESSING
- G06F9/00—Arrangements for program control, e.g. control units
- G06F9/06—Arrangements 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/44—Arrangements for executing specific programs
- G06F9/455—Emulation; Interpretation; Software simulation, e.g. virtualisation or emulation of application or operating system execution engines
- G06F9/45533—Hypervisors; Virtual machine monitors
- G06F9/45558—Hypervisor-specific management and integration aspects
-
- G—PHYSICS
- G06—COMPUTING OR CALCULATING; COUNTING
- G06F—ELECTRIC DIGITAL DATA PROCESSING
- G06F9/00—Arrangements for program control, e.g. control units
- G06F9/06—Arrangements 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/44—Arrangements for executing specific programs
- G06F9/455—Emulation; Interpretation; Software simulation, e.g. virtualisation or emulation of application or operating system execution engines
- G06F9/45533—Hypervisors; Virtual machine monitors
- G06F9/45558—Hypervisor-specific management and integration aspects
- G06F2009/45583—Memory management, e.g. access or allocation
Landscapes
- Engineering & Computer Science (AREA)
- Software Systems (AREA)
- Theoretical Computer Science (AREA)
- Physics & Mathematics (AREA)
- General Engineering & Computer Science (AREA)
- General Physics & Mathematics (AREA)
- Storage Device Security (AREA)
Abstract
【課題】権限レベルが2段階のマイクロプロセッサを用いた仮想計算機において、ゲストアプリケーションとゲストOS及びVMM間のメモリ保護を確実に行う。
【解決手段】少なくとも一つのCPUとメモリを共有して複数のプログラムを切り替えて実行する仮想計算機の制御方法であって、CPUで実行される第1のプログラムがアクセス可能なメモリ領域を規定する第1のメモリ保護テーブルを設定し、前記CPUで実行される第2のプログラムがアクセス可能なメモリ領域を規定する第2のメモリ保護テーブルを設定し、第1または第2のプログラムの実行開始を検出し(S11)、実行開始を検出した第1または第2のプログラムに対応して第1または第2のメモリ保護テーブルの何れか一方を選択して切り替えて(S17)、前記選択した第1または第2のメモリ保護テーブルを前記CPUのメモリ管理ユニットで参照し、前記選択した第1または第2のメモリ保護テーブルに規定されたメモリ領域を保護させる(S18、S19)。
【選択図】図18
【解決手段】少なくとも一つのCPUとメモリを共有して複数のプログラムを切り替えて実行する仮想計算機の制御方法であって、CPUで実行される第1のプログラムがアクセス可能なメモリ領域を規定する第1のメモリ保護テーブルを設定し、前記CPUで実行される第2のプログラムがアクセス可能なメモリ領域を規定する第2のメモリ保護テーブルを設定し、第1または第2のプログラムの実行開始を検出し(S11)、実行開始を検出した第1または第2のプログラムに対応して第1または第2のメモリ保護テーブルの何れか一方を選択して切り替えて(S17)、前記選択した第1または第2のメモリ保護テーブルを前記CPUのメモリ管理ユニットで参照し、前記選択した第1または第2のメモリ保護テーブルに規定されたメモリ領域を保護させる(S18、S19)。
【選択図】図18
Description
本発明は、仮想計算機システムに関し、仮想計算機モニタとゲストOS、ゲストアプリケーション間で制御を切り替える際のメモリ保護の技術に関する。
サーバ台数の増加と共に運用に関する複雑さが増加しており運用コストが問題化しており、運用コストを低減する技術として複数サーバを1台にまとめるサーバ統合が注目を集めている。サーバ統合を実現する技術として、一つのコンピュータを任意の割合で論理的に分割する仮想計算機が知られている。例えば、ハイパバイザなどのファームウェア(またはミドルウェア)により、物理計算機を複数の論理区画(LPAR:Logical PARtition)に分割し、各LPARに対して計算機資源(CPU、主記憶、I/O)を割当て、各LPAR上でそれぞれOSを動作させるもので、CPUを時分割で利用するため柔軟なサーバ統合が可能となる。あるいは、一つのサーバ上で一つのホストOSを実行し、このホストOS上で複数のゲストOSを稼動させ、各ゲストOSをそれぞれサーバとすることで、サーバ統合を実現している。
また、従来、仮想計算機技術は汎用機(MainFrame)等の大型計算機で用いられてきた技術であるが、近年のマイクロプロセッサの性能向上に伴いローエンドサーバおよびパーソナルコンピュータでも普及しつつある。
仮想計算機技術を採用したサーバ等の計算機は、ゲストを稼動させる複数の仮想計算機(Virtual Machine)と、仮想計算機の制御を行う仮想計算機モニタ(Virtual Machine Monitor、以下VMMとする)とを有する。仮想計算機技術によってサーバ統合を実現する上では、仮想計算機間、および仮想計算機とVMM間の独立性の保証が重要である。上記の独立性を保証するためには、仮想計算機上のアプリケーション(ゲストアプリケーション)とOS(ゲストOS)及びVMMの3者間で、アクセス可能なメモリ範囲を限定し、独立性を保護する必要がある(例えば、特許文献1、2)。
上記のメモリ保護を実現する機構として、CPUは一般にメモリ管理ユニット(Memory Management Unit、以下MMUとする)を有する。メモリ管理ユニットは、実行中のコードの権限レベル(1)とアクセス先のメモリ領域の権限レベル(2)を比較し、(2)の方が(1)よりも権限が強い場合にアクセスを禁止する。この権限レベルを利用して、仮想計算機とVMM間及び仮想計算機間の独立性を確保することができる。
特開2001−318797号
米国特許出願公開第2003/0120856号明細書
上記のメモリ保護を実現する機構として、CPUは一般にメモリ管理ユニット(Memory Management Unit = MMU)を有する。メモリ管理ユニットは、実行中のコードの権限レベル(1)とアクセス先のメモリ領域の権限レベル(2)を比較し、(2)の方が(1)よりも権限が強い場合にアクセスを禁止する。この権限レベルを利用して、仮想計算機とVMM間及び仮想計算機間の独立性を確保することができる。
近年、マイクロプロセッサの性能向上の一手法として、既存の32bitアーキテクチャ(例えば、IA−32(インテル社)、http://www.intel.co.jp/jp/developer/download/)を、64bitに拡張する技術が提案されている(例えば、EM64T、インテル社、http://www.intel.co.jp/jp/developer/technology/64bitextensions/index.htm)。
しかしながら、上記従来例を上述のような32ビットアーキテクチャを拡張した64bitマイクロプロセッサに適用する場合、次のような問題が生じる。
1)上述のホストOS上で複数のゲストOSを稼動させ、各ゲストOSをそれぞれサーバとする仮想計算機では、ゲストアプリケーションとゲストOSとVMM間のアクセス保護にIA−32で構成されたCPUのMMUを利用してメモリの保護を行っている。
すなわち、IA−32等のCPUでは、MMUのメモリ保護機構としてセグメントとページングという2種類の保護機構を備えている。ここで、セグメントは、4段階の権限レベルを備えているものの、ひとつの連続したメモリ領域に対してのみ権限レベルを設定できるものの、複数のセグメントに渡って権限レベルを設定することはできない。
一方、ページングよる保護は、2段階の権限レベルでしかメモリの保護を行うことができないが、ページと呼ばれる仮想記憶領域の単位領域ごとに権限レベルを設定できる。つまりページングでは、単位領域が不連続であっても、複数の単位領域に同一の権限レベルを設定することができる。
ここで、上記ホストOS上で複数のゲストOSを稼動させる仮想計算機では、仮想記憶領域のアドレス領域を2分しておき、ゲストOSとVMMにセグメントによる保護(4段階の権限レベル)を適用した記憶領域を割り当て、ゲストアプリケーションとホストOS間にページングによる保護(2段階の権限レベル)を適用し、メモリ領域の保護を行っている。
しかしながら、上記EM64Tのように、IA−32のアーキテクチャーを拡張した64ビットCPU(EM64Tなど)では、上記セグメントの仕様が変更されて保護対象の仮想記憶領域を指定できなくなった。このためホストOS上で複数のゲストOSを稼動させる仮想計算機をEM64Tに適用すると、ページングによる2段階の権限レベルでしかゲストとVMM間の保護が出来ず、仮想計算機とVMM間の独立性が保証できないという問題が生じる。
2)上記LPARでは仮想計算機技術と同様に1つのサーバで複数のゲストOSを稼動させることができる。しかしこの従来例では、論理区画の独立性を保証するためにCPUのTLB(Translation Lookaside Buffer)が拡張されており、TLBエントリにゲスト識別子が付加されている(例えば、特開平7−84884号)。CPUによるメモリアクセス発生時には上記のゲスト識別子がチェックされ、メモリ保護を実現している。しかし、既存のIA−32等のマイクロプロセッサには上記に相当するTLBエントリは存在しないため、本方式をIA−32、EM64Tなどのマイクロプロセッサには適用することができない、という問題があった。
そこで本発明は、上記問題点に鑑みてなされたもので、メモリ領域の保護を行う権限レベルが2段階のマイクロプロセッサを用いた仮想計算機において、ゲストアプリケーションとゲストOS及びVMM間のメモリ保護を確実に行って信頼性を確保することを目的とする。
本発明は、少なくとも一つのCPUとメモリを共有して複数のプログラムを切り替えて実行する仮想計算機の制御方法であって、前記CPUで実行される第1のプログラムがアクセス可能なメモリ領域を規定する第1のメモリ保護テーブルを設定し、前記CPUで実行される第2のプログラムがアクセス可能なメモリ領域を規定する第2のメモリ保護テーブルを設定し、前記第1または第2のプログラムの実行開始を検出し、前記検出した第1または第2のプログラムに対応して前記第1または第2のメモリ保護テーブルの何れか一方を選択して切り替えて、前記選択した第1または第2のメモリ保護テーブルを前記CPUのメモリ管理ユニットで参照し、前記選択した第1または第2のメモリ保護テーブルに規定されたメモリ領域を保護させる。
また、前記第1のプログラムが前記仮想計算機を管理する仮想計算機モニタであって、前記第2のプログラムが前記仮想計算機上で稼動するゲストプログラムであり、前記検出する処理と、前記切り替える処理とを、前記仮想計算機モニタ自身で行う。
また、前記第1のプログラムが前記仮想計算機上で稼動するゲストOSであって、前記第2のプログラムが前記仮想計算機上で稼動するゲストアプリケーションであり、前記検出する処理と、前記切り替える処理とを、前記仮想計算機を管理する仮想計算機モニタが行う。
したがって、本発明は、2段階のアドレス保護機構(権限レベル)しか設定できないCPUを用いて仮想計算機を構成した場合であっても、ゲスト側と仮想計算機モニタ側の2つのプログラムのメモリ領域を規定した第1または第2のメモリ保護テーブルを、実行するプログラムに応じて切り替えることで、仮想計算機モニタとゲストOS及びゲストアプリケーション3にメモリ領域の保護を確実に行うことができ、信頼性の高い仮想計算機システムを提供することが可能となる。
以下、本発明の一実施形態を添付図面に基づいて説明する。
図1は、本発明の第1実施形態を示し、仮想計算機システムを動作させる物理計算機200の構成を示す。
<1.ハードウェア構成>
物理計算機200は、複数のCPU201−0〜201−3を有し、これらのCPUはフロントサイドバス202を介してノースブリッジ(またはメモリコントローラ)203に接続される。ここで、各CPU201−0〜3は、前記したIA−32を64ビットに拡張した演算処理機構を備える。
物理計算機200は、複数のCPU201−0〜201−3を有し、これらのCPUはフロントサイドバス202を介してノースブリッジ(またはメモリコントローラ)203に接続される。ここで、各CPU201−0〜3は、前記したIA−32を64ビットに拡張した演算処理機構を備える。
ノースブリッジ203には、メモリバス204を介してメモリ(主記憶)205が接続され、また、バス206を介してI/Oインターフェース207が接続される。I/Oインターフェース207はLAN213に接続されるネットワークアダプタ、ディスク装置214等に接続されるSCSIアダプタ、SAN(Storage Area Network)215に接続されるファイバーチャネルアダプタなどで構成され、各I/Oデバイスに接続される。
CPU201−0〜201−3はノースブリッジ203を介してメモリ205にアクセスし、ノースブリッジ203からI/Oインターフェース207を介してI/Oデバイスにアクセスして所定の処理を行う。
なお、ノースブリッジ203はメモリ205を制御するとともに、グラフィックコントローラを含んでコンソール220にも接続され、画像の表示を行うことができる。なお、物理計算機200を構成するCPUは1つでも良いし、2つ以上であっても良い。
メモリ205には、仮想計算機モニタ(Virtual Machine Monitor、以下VMM)10がロードされ、このVMM10上で複数のゲストOS#0〜#n(20−0〜20−n)が実行される。各ゲストOS#0〜#nがそれぞれ仮想計算機VM0〜VMnを構成し、各ゲストOS#0〜#n上では任意の数のゲストアプリケーション30が実行される。
<2.ソフトウェア構成>
次に、物理計算機200上で仮想計算機VM0〜VMnを実現するソフトウェア及びハードウェア構成の主要部について、図2を参照しながら詳述する。
次に、物理計算機200上で仮想計算機VM0〜VMnを実現するソフトウェア及びハードウェア構成の主要部について、図2を参照しながら詳述する。
図2において、物理計算機200上では、複数のゲストOSを管理するVMM(ファームウェアまたはミドルウェア)10が稼動している。VMM10は、複数のゲストOS#0〜#n及びゲストアプリケーション30がアクセスする計算機資源の割り当てを管理する制御ソフトウェアである。
VMM10は、仮想計算機VM0〜nを構成するゲストOS#0〜#nとゲストアプリケーション30に物理計算機200のリソースを仮想的に提供し、各ゲストOS#0〜#n及びアプリケーション30の実行を管理する仮想計算機実行管理部(以下、VM実行管理部)120と、ゲストOS#0〜#nまたはVMM10を実行するときにメモリ領域の管理を行う第1のメモリ保護テーブル(以下、ホストメモリ保護テーブル#0)111、ゲストアプリケーション30またはVMM10を実行するときにメモリ領域の保護を行う第2のメモリ保護テーブル(以下、ホストメモリ保護テーブル#1)112とを生成する二重テーブル管理部110を有する。
VM実行管理部120は、各仮想計算機VM0〜VMnを実行するためのメモリ205の領域を割り当て、VMM10自身を実行するためのメモリ205の領域を割り当てて、二重テーブル管理部110に生成されたホストメモリ保護テーブル#0と#1とを、割り当てたCPU201−0〜nで実行されるゲスト(ゲストOSまたはゲストアプリケーション)に応じて切り替えることで各仮想計算機VM0〜nを管理する。
なお、VM実行管理部120は、メモリ205(またはディスク装置214あるいはSAN215上のストレージ装置)の所定の領域を、後述する図5のような記憶領域(または物理アドレス空間)250として管理し、複数の仮想計算機VM0〜VMnで記憶領域250を共有する。なお、記憶領域250は所定のサイズのページ単位で管理される。
仮想計算機VM0〜VMnでは、ゲストOS#0〜nがそれぞれ稼動し、各ゲストOS#0〜nは、VMM10によって割り当てられた記憶領域250の領域内で、ゲストOSが使用するメモリ領域と、アプリケーション30が使用するメモリ領域を管理するゲストメモリ保護テーブル21−0〜nを有する。そして、このゲストメモリ保護テーブル21−0〜nは、VMM10によって管理される。
VMM10及び仮想計算機VM0〜VMnを実行するCPUは、記憶領域250の論理アドレスと、メモリ205及びディスク装置214等の物理アドレスとの対応関係を管理するメモリ管理ユニット(Memory Management Unit、以下、MMU)230を有する。MMU230は、記憶領域250上での命令の実行位置を示すテーブルポインタレジスタ231を含む。また、CPU201−0〜3のアーキテクチャーがIA−32(またはEM64T)の場合、MMU230には、図示しない特権レジスタCR0、CR2、CR3、CR4やディスクリプタテーブルを制御する特権レジスタGDTR(グローバルディスクリプタテーブルレジスタ)、特権レジスタLDTR(ローカルディスクリプタテーブルレジスタ)等を含むものであっても良い。なお、上記テーブルポインタレジスタ231は、IA−32(EM64T)において、特権レジスタCR3に相当するものである。
VMM10は、ゲストOS#0とゲストアプリケーション30の間で制御の切替が発生すると、テーブルポインタレジスタ231に二重テーブル管理部110に生成した何れか一方のホストメモリ保護テーブル#0または#1に切り替えるテーブル切替指令を送る。
具体的には、VM実行管理部120は、ゲストOS実行開始要求を受けると、テーブルポインタレジスタ231にホストメモリ保護テーブル#0を指し示すアドレスをセットする。また、VM実行管理部120は、ゲストアプリケーション実行開始要求を受けると、テーブルポインタレジスタ231にホストメモリ保護テーブル#1を指し示すアドレスをセットする。
そして、VMM10は、テーブルポインタレジスタ231にセットされたホストメモリ保護テーブルに従って、記憶領域250上で保護するメモリ領域を切り替えるのである。
後述するように、VMM10は、ゲストOSまたはゲストアプリケーションの実行開始によって2つのホストメモリ保護テーブル#0及び#1を生成し、ゲストアプリケーション30が終了すると、生成したホストメモリ保護テーブル#0、#1を破棄する。
<3.VMMの概要>
以下、本発明の仮想計算機システムの概要を説明する。説明を簡易にするため、VMM10が仮想計算機VM0をCPU201−0に割り当てて、仮想計算機VM0(ゲストOS#0またはゲストアプリケーション30)を実行する例について説明する。なお、メモリ205の記憶領域250は、複数の仮想計算機VM0〜VMnとVMM10で共有されるものである。
以下、本発明の仮想計算機システムの概要を説明する。説明を簡易にするため、VMM10が仮想計算機VM0をCPU201−0に割り当てて、仮想計算機VM0(ゲストOS#0またはゲストアプリケーション30)を実行する例について説明する。なお、メモリ205の記憶領域250は、複数の仮想計算機VM0〜VMnとVMM10で共有されるものである。
図3は、VMM10の二重テーブル管理部110に設定される2つのホストメモリ保護テーブル#0、#1の概念を説明する図である。
第1のテーブルであるホストメモリ保護テーブル#0は、ゲストOS#0がアクセス可能なアドレス領域と、VMM10が利用するアドレス領域を規定する。
第2のテーブルであるホストメモリ保護テーブル#1は、ゲストアプリケーション30がアクセス可能なアドレス領域と、VMM10が利用するアドレス領域を規定する。
VMM10は、ゲストOS#0を実行するときには、ホストメモリ保護テーブル#0を選択し、ゲストOS#0がアクセスするメモリ領域を規制して、VMM10が利用するメモリ領域を保護する。
また、VMM10は、ゲストアプリケーション30を実行するときには、ホストメモリ保護テーブル#1を選択し、ゲストアプリケーション30がアクセスするメモリ領域を規制して、VMM10が利用するメモリ領域を保護する。
ここで、仮想計算機VM0上で実行されるゲストOS#0とゲストアプリケーション30及びVMM10と時間の関係を図4に示す。
図4は、CPU201−0が実行するプログラムと記憶領域250及び時間の関係を示したグラフである。
図4において、CPU201−0は、ゲストアプリケーション30をΔt1の期間だけ実行した後に、VMM10に制御を渡し、Δt2の期間だけVMM10を実行する。その後、期間Δt3ではゲストOS#0に制御を移して実行する。次に、期間Δt4ではゲストアプリケーション30に制御を移して実行する。
ここで、仮想計算機システムでは、ある任意の時点でアクセス可能でなくてはならないメモリ領域は限定的であり、本実施形態の場合、VMM10、ゲストOS#0またはゲストアプリケーション30の何れかひとつが記憶領域250をアクセス可能であればよい。
そして、VMM10、ゲストOS#0またはゲストアプリケーション30のうち、特定のコードを実行中にアクセスすべきメモリ領域は1種類のみであって、実行するコードの切替時では、切替前と切替後の2種類のメモリ領域のみをアクセス可能であればよい。
つまり、図4において、期間Δt1ではゲストアプリケーション30が記憶領域250の所定の範囲のみをアクセス可能であれば良く、次の期間Δt2では、VMM10が所定の範囲のみをアクセスできればよい。このため、図3で示したように、VMM10上で実行されるアプリケーション30とVMM10の独立性を保つためのページテーブルとしてホストメモリ保護テーブル#1を設ける。期間Δt1、Δt2では、VMM10がアクセスする領域と、ゲストアプリケーション30がアクセスする領域の2つを分けて、独立性を確保すればよい。
次に、期間Δt3ではゲストOS#0がVMM10上で実行されるので、期間Δt3ではゲストOS#0が記憶領域250の所定の範囲をアクセスできればよい。このため、図3で示したように、VMM10上で実行されるゲストOS#0とVMM10の独立性を保つためのページテーブルとしてホストメモリ保護テーブル#0を設ける。つまり、期間Δt3では、VMM10がアクセスする領域と、ゲストOS#0がアクセスする領域の2つを分けて独立性を確保すればよい。
そして、VMM10上で実行されるプログラムが切り替わるとき、すなわち、ゲストOS#0とゲストアプリケーション30が切り替わるときであり、図4では期間Δt2が終了した時点と、期間Δt4が終了した時点で2つのホストメモリ保護テーブル#0または#1を切り替えるのである。
このように、ひとつのホストメモリ保護テーブルでは2段階のアクセス保護権限を設定し、このホストメモリ保護テーブルを2つ備えることで、ゲストOS#0とゲストアプリケーション30及びVMM10の3者の独立性を確保できるのである。すなわち、ひとつのメモリ保護テーブルでは、CPU201−0に特権、非特権の2つの特権(権限)レベルがあれば、ある時点でホストとなるプログラム(VMM10)と、ゲストとなるプログラム(ゲストOS#0またはゲストアプリケーション30)がアクセスする領域を分離し、保護することができるのである。
<4.VMMの詳細>
<4.1 構成>
図5はVMM10が管理する記憶領域250の一例を示す。
<4.1 構成>
図5はVMM10が管理する記憶領域250の一例を示す。
VMM10は、記憶領域250上に自身を配置するメモリ領域と、仮想計算機VM0〜VMnが使用するメモリ領域を割り当てる。ここで、VMM10は、CPU201−0〜3を64ビットモード(例えば、EM64Tの64ビットモード)に設定し、記憶領域250をフラットなアドレス空間として使用する。
例えば、図示のように、VMM10は、仮想計算機VM0をアドレス0h〜ad3に割り当て、自身をアドレスad4〜xxxxhのメモリ領域に割り当てる。
VMM10が使用するメモリ領域には、VM実行管理部120、二重テーブル管理部110が割り当てられる。二重テーブル管理部110には、ホストメモリ保護テーブル#0、#1〜#m(但しm≧1)が、仮想計算機VM0〜VMn上でゲストOSまたはゲストアプリケーションが実行されるときに生成される。そして、VMM10は、仮想計算機VM0〜nのゲストOSまたはゲストアプリケーションが終了すると、対応するホストメモリ保護テーブル#0〜#m及びゲストメモリ保護テーブル21−0〜nを破棄する。
また、VMM10は、仮想計算機VM0〜VMnのメモリ領域に、ゲストOS#0〜nが使用するメモリ領域と、ゲストアプリケーション30が使用するメモリ領域を規定して、2つのプログラムの独立性を確保するゲストメモリ保護テーブル21−0〜nを設定する。
ここで、ホストメモリ保護テーブル#0〜#m及びゲストメモリ保護テーブル21−0〜nは、ページテーブルセットとディスクリプタテーブル(グローバルディスクリプタテーブル、ローカルディスクリプタテーブル)の総称である。
VMM10に生成されるホストメモリ保護テーブルは、ホストページテーブルセット130とホストグローバルディスクリプタテーブル141及びホストローカルディスクリプタテーブル142を含む。また、仮想計算機VM0に生成されるゲストメモリ保護テーブル21−0〜nは、ゲストページテーブルセット233とゲストグローバルディスクリプタテーブル241及びゲストローカルディスクリプタテーブル242を含む。
ホストメモリ保護テーブル#0〜#mとゲストメモリ保護テーブル21−0〜nの構造は同一であり、図6に示すように構成される。
ページテーブルセット(ホストページテーブルセット130、ゲストページテーブルセット233)は、ページマップレベル4テーブル131を上位として、ページディレクトリポインタテーブル132、ページディレクトリ133と、ページテーブル134から構成される。
ページマップレベル4(PML4)テーブル131は、仮想アドレス空間と物理アドレス空間で変換を行うページ変換階層内でページディレクトリポインタテーブル(PDPテーブル)132の上位に位置し、各エントリがPDPテーブル132を指す。PDPテーブル132は、ページディレクトリ133の上位に位置し、各エントリがページディレクトリテーブル133を指す。ページディレクトリ(PDE)テーブル133は、各エントリがページテーブル134を指す。そして、ページテーブル(PTE)134は各エントリが記憶領域250のページを指す。
ディスクリプタテーブルは、グローバルディスクリプタ(GDT)テーブル141(241)とローカルディスクリプタテーブル142(242)から構成される、グローバルディスクリプタテーブル141(241)は、各システム(VMM10、各仮想計算機VM0〜n)に一つ設定され、ローカルディスクリプタ(LDT)テーブル142(242)は各システムのタスク毎に生成される。
これらのディスクリプタテーブルは、アクセス先のベース・アドレスとアクセス権、タイプ、および使用法に関する情報を含むディスクリプタを備える。
なお、VMM10は、ゲストメモリ保護テーブルを構成するページテーブル(以下、ゲストページテーブル)にライトプロテクトを施しておく。
以上の構成により、VMM10は、仮想計算機VMでゲストOSまたはゲストアプリケーションが開始されると、図5で示すように、第1のホストメモリ保護テーブル#0と、第2のホストメモリ保護テーブル#1を生成し、仮想計算機VMにゲストメモリ保護テーブル21−0〜nを生成する。すなわち、VMM10では、図6に示したメモリ保護テーブルを2つ作成し、第1のホストメモリ保護テーブル#0の各エントリが指し示すアドレスと、第2のホストメモリ保護テーブル#1のエントリが指し示すアドレスが、図3で示した関係となるように設定するのである。
そして、図4で示したように、VMM10は、CPU201−0が実行するプログラムがゲストOS#0とゲストアプリケーション30の間で切り替わるときに、第1のホストメモリ保護テーブル#0と第2のホストメモリ保護テーブル#1を切り替えて、各プログラムがアクセスするメモリ領域を保護するのである。なお、他の仮想計算機VM1〜VMnについても同様に構成される。
また、図6のメモリ保護テーブルをホストメモリ保護テーブルに適用した場合、ページテーブルセットはホストページテーブルセットとなり、ゲストメモリ保護テーブルに適用した場合にはページテーブルセットはゲストページテーブルセットとなる。
<4.2 メモリ保護テーブルの拡張>
次に、ホストメモリ保護テーブルとゲストメモリ保護テーブルの拡張(サイズの変更)について説明する。なお、以下では、ホストメモリ保護テーブルとゲストメモリ保護テーブルの構成は同様であるので、これらのテーブルの総称をメモリ保護テーブルとする。
次に、ホストメモリ保護テーブルとゲストメモリ保護テーブルの拡張(サイズの変更)について説明する。なお、以下では、ホストメモリ保護テーブルとゲストメモリ保護テーブルの構成は同様であるので、これらのテーブルの総称をメモリ保護テーブルとする。
メモリ保護テーブルの大きさは可変であり、特に、EM64Tにおいてはページテーブルセットの最大サイズが512Gbyte以上になる。このため、ホストメモリ保護テーブルを固定サイズで確保するのは現実的でなく、ゲストメモリ保護テーブルの大きさに応じて確保するのが望ましい。このために、VMM10はゲストメモリ保護テーブルのサイズの変化を検出し、ゲストメモリ保護テーブルのサイズが変化したときには、ホストメモリ保護テーブルを更新する。
ここで、メモリ保護テーブルの拡張について、図7を参照しながら説明する。図7は、PML4テーブル131を根とした、PDPテーブル132、PDEテーブル133及びPTE134の階層構造を示す。IA−32(EM64T)のページテーブルセットにおいては、PML4テーブル131のエントリを起点として、図中矢印の根元側のエントリに、矢印の先端にあるテーブルのアドレスが設定される。そして、各テーブル131〜134の各エントリにはプレゼントビット(以下、Pビット)が設定されており、このPビットが0の場合には、このエントリに設定されたアドレスは無効となり、Pビットが1の場合には、このエントリに設定されたアドレスは有効となる。
すなわち、Pビットが0から1へ変化するとエントリに設定された下位のアドレスが有効となってページテーブルが拡張され、Pビットが1から0に変化すれば下位のアドレスが無効となってページテーブルが縮小する。各ページテーブルのPビットを操作することで、ページテーブルセットのサイズを変更することができる。
より具体的には、 ページテーブルセットのサイズを変化させる操作としては、以下の操作がある。
・操作1.CPUの特権レジスタCR0(CPUの動作モードと状態を制御するシステム制御フラグが入っているレジスタ)のPG(ページングビット)を変化させる。PGをセットすることで、ページングが可能になり、PGをクリアすることでページングを停止する。
・操作2.特権レジスタCR3(ページ・ディレクトリ133のベースの物理アドレスを格納するレジスタ)を変化させる。
・操作3.特権レジスタCR4(アーキテクチャ上の各種の拡張機能を制御するレジスタ)のPAE(物理アドレス拡張ビット)の変化。なお、PAEはページングを36ビットで行う機能を制御する。
・操作4.特権レジスタCR4のPSE(ページサイズ拡張ビット)を変化させる。PSEをセットすることで4Mバイトのページテーブル134がイネーブルになり、PSEをクリアすることで、ページテーブル134は4Kバイトに制限される。
・操作5.PML4テーブル131エントリのPビットを変化させる。
・操作6.PDPテーブル132のPビットを変化させる。
・操作7.PDEテーブル133のPビットの変化させる。
・操作8.PDEテーブル133のPSビットを変化させる。なお、PSビット(またはフラグ)の操作は、PDEテーブルのエントリがページ・テーブル134を指し、テーブルのエントリが4Kバイト・ページを指すか(PSを0に設定)、またはページ・ディレクトリ・エントリが4Mバイト(PSEおよびPSを1にセット) または2Mバイトのページを直接に指すか(PAEおよびPSを1にセット) を指定する。
・操作1.CPUの特権レジスタCR0(CPUの動作モードと状態を制御するシステム制御フラグが入っているレジスタ)のPG(ページングビット)を変化させる。PGをセットすることで、ページングが可能になり、PGをクリアすることでページングを停止する。
・操作2.特権レジスタCR3(ページ・ディレクトリ133のベースの物理アドレスを格納するレジスタ)を変化させる。
・操作3.特権レジスタCR4(アーキテクチャ上の各種の拡張機能を制御するレジスタ)のPAE(物理アドレス拡張ビット)の変化。なお、PAEはページングを36ビットで行う機能を制御する。
・操作4.特権レジスタCR4のPSE(ページサイズ拡張ビット)を変化させる。PSEをセットすることで4Mバイトのページテーブル134がイネーブルになり、PSEをクリアすることで、ページテーブル134は4Kバイトに制限される。
・操作5.PML4テーブル131エントリのPビットを変化させる。
・操作6.PDPテーブル132のPビットを変化させる。
・操作7.PDEテーブル133のPビットの変化させる。
・操作8.PDEテーブル133のPSビットを変化させる。なお、PSビット(またはフラグ)の操作は、PDEテーブルのエントリがページ・テーブル134を指し、テーブルのエントリが4Kバイト・ページを指すか(PSを0に設定)、またはページ・ディレクトリ・エントリが4Mバイト(PSEおよびPSを1にセット) または2Mバイトのページを直接に指すか(PAEおよびPSを1にセット) を指定する。
また、ディスクリプタテーブルのサイズを変化させる操作は、以下のとおりである。
・操作9.特権レジスタGDTRを変化させる。なお、特権レジスタGDTRにはGDTのベースのリニアアドレスが含まれ、このリニアアドレスを変更する。
・操作10.特権レジスタLDTRを変化させる。なお、特権レジスタLDTRにはLDTのベースのリニアアドレスが含まれ、このリニアアドレスを変更する。
・操作9.特権レジスタGDTRを変化させる。なお、特権レジスタGDTRにはGDTのベースのリニアアドレスが含まれ、このリニアアドレスを変更する。
・操作10.特権レジスタLDTRを変化させる。なお、特権レジスタLDTRにはLDTのベースのリニアアドレスが含まれ、このリニアアドレスを変更する。
なお、ゲストOSまたはゲストアプリケーションが上記操作5〜8を行った場合について、後述の図10で説明する。
また、ゲストOSまたはゲストアプリケーションが上記操作1を行った場合について、後述の図11で説明する。
また、ゲストOSまたはゲストアプリケーションが上記操作2〜4、9、10を行った場合について、後述の図12で説明する。
<4.3 処理の概要>
次に、VMM10とゲストとなる仮想計算機VM0(ゲストOS#0、ゲストアプリケーション30)で行われる処理の一例について、以下、フローチャートを参照しながら説明する。
次に、VMM10とゲストとなる仮想計算機VM0(ゲストOS#0、ゲストアプリケーション30)で行われる処理の一例について、以下、フローチャートを参照しながら説明する。
図8は仮想計算機VM0でゲストOS#0またはゲストアプリケーション30を実行するときの全体的な処理を示すフローチャートで、図中破線の右側がVMM10で行う処理であり、同じく破線の左側がゲスト側(ゲストOS#0またはゲストアプリケーション30)で行う処理である。
S11では、VMM10がゲストOS#0からゲストアプリケーション30の実行開始要求を受け付けたり、あるいはゲストアプリケーション30からゲストOS#0の実行開始要求を受け付けると、図5で示したように、実行するゲスト側のプログラム(ゲストOS#0またはゲストアプリケーション30)に対応する第1及び第2のメモリ保護テーブルであるホストメモリ保護テーブル#0、#1を、ゲストメモリ保護テーブル21−0に基づいて、VMM10の二重テーブル管理部110に生成する。
そして、VMM10は、CPU201−0のテーブルポインタレジスタ231に、第1のホストメモリ保護テーブル#0のアドレスを書き込んで、制御を一旦VMM10に移す。その後、実行するプログラムに応じて第1または第2のホストメモリ保護テーブル#0、#1のアドレスをテーブルポインタレジスタ231に書き込んで、制御をゲスト側に渡す。すなわち、VMM10は、ゲストOS#0を実行する場合では、ホストメモリ保護テーブル#0のアドレスをCPU201−0のテーブルポインタレジスタ231に設定し、ゲストアプリケーション30を実行する場合ではホストメモリ保護テーブル#1のアドレスをCPU201−0のテーブルポインタレジスタ231に設定する。
仮想計算機VM0では、S12でゲスト(ゲストOS#0またはゲストアプリケーション30)を実行し、S13ではゲスト側でVMM10の介入を必要とするイベントが発生したか否かを判定する。すなわち、割り込みや例外イベント、ゲストOS#0やゲストアプリケーション30の終了などVMM10の介入が必要なイベントがあればS14に進んで、制御をVMM10に返す。VMM10の介入が不要であればS12へ戻って、ゲスト側の処理を実行する。
なお、仮想計算機VM0でゲストOS#0を実行する場合も、上記と同様にS12、S13を繰り返して処理する。
S14では、VMM10が、ホストメモリ保護テーブル#0または#1の更新が必要であるか否かを検出する。この検出は、ゲストOS#0やゲストアプリケーション30がゲストメモリ保護テーブル21−0に書き込みを行おうとすると、上述のライトプロテクトが施されているため、例外イベントが発生する。VMM10は、この例外イベントを検知したときにメモリ保護テーブルの更新が必要と判定して、S15に進む。なお、ゲストOS#0が特権レジスタを操作した場合にも、同様にしてS15に進む。
S15では、ゲストアプリケーション30またはゲストOS#0が行ったゲストページテーブル(134)に対する書き込み要求を、VMM10のホストメモリ保護テーブル#0または#1に反映して更新する。また、仮想計算機VM0のゲストメモリ保護テーブル21−0も同様に更新する。
次に、S16では、VMM10が仮想計算機VM0上で動作中のプログラムが切り替わったか否かを検出する。すなわち、ゲストアプリケーション30からゲストOS#0へ切り替わったり、ゲストOS#0からゲストアプリケーション30に切り替わっていれば、切り替えがあったと判定してS17に進む。
S17では、第1のプログラム(ここではゲストOS#0)または第2のプログラム(ここではゲストアプリケーション30)のいずれに切り替わったかを判定する。第1のプログラムに切り替わったときには、S18に進んで、VMM10はホストメモリ保護テーブル#0のアドレスをCPU201−0のテーブルポインタレジスタ231に設定する。あるいは、第2のプログラムに切り替わったときには、S19に進んで、VMM10はホストメモリ保護テーブル#1のアドレスをCPU201−0のテーブルポインタレジスタ231に設定する。
上記S18、S19により、保護すべきメモリ領域を指し示すホストメモリ保護テーブル#0、#1が、仮想計算機VM0で実行されるプログラムに応じて切り替えられる。
次に、S20ではVMM10がゲストOS#0またはゲストアプリケーション30の終了を検出したか否かを判定し、ゲスト側が終了した場合には。ホストメモリ保護テーブル#0及び#1を破棄してから、ゲスト側のプログラムを完了させる。
上記処理により、VMM10はゲスト側のプログラム(ゲストOS#0またはゲストアプリケーション30)の実行開始を検出すると、実行するプログラムに応じた第1または第2のホストメモリ保護テーブル#0、#1を生成する。そして、実行するプログラムに応じた第1または第2のホストメモリ保護テーブルにより、ゲスト側(仮想計算機VM0側)のプログラムが使用するメモリ領域と、VMM10が使用するメモリ領域の保護を行う。
また、ゲスト側で実行するプログラムが切り替わるときには、VMM10が切り替えるプログラムに対応する第1または第2のホストメモリ保護テーブルに切り替えることで、CPU201−0が実行するプログラムに応じてゲスト側とVMM10の各メモリ領域を確実に保護する。
<4.4 メモリ保護テーブル作成処理>
上記図8のS11で行われるメモリ保護テーブルの作成処理について、図9のフローチャートを参照しながら説明する。
上記図8のS11で行われるメモリ保護テーブルの作成処理について、図9のフローチャートを参照しながら説明する。
S31では、ゲスト側で開始されるプログラム(ゲストOS#0またはゲストアプリケーション30)に応じたメモリ領域を、図5で示したように仮想計算機VM0から取得する。そして、ゲストOS#0を第1のプログラムとして、第1のホストメモリ保護テーブル#0を生成し、ゲストOS#0とVMM10の保護すべきメモリ領域を設定する。また、ゲストアプリケーション30を第2のプログラムとして、第2のホストメモリ保護テーブル#1を生成して、ゲストアプリケーション30とVMM10の保護すべきメモリ領域を設定する。
S32では、VMM10が、CPU201−0のテーブルポインタレジスタ231に、第1のホストメモリ保護テーブル#0のアドレスを書き込んで終了する。
以上の処理により、ゲストOS#0やゲストアプリケーション30等の開始時には、二重テーブル管理部110に2つのホストメモリ保護テーブル#0、#1が生成される。
<4.5.1 メモリ保護テーブル更新処理1>
上記図8のS15で行われるメモリ保護テーブルの更新処理の一例について、図10のフローチャートを参照しながら説明する。図10は、上記操作5〜8をゲストOSまたはゲストアプリケーションが行った場合の処理を示す。
上記図8のS15で行われるメモリ保護テーブルの更新処理の一例について、図10のフローチャートを参照しながら説明する。図10は、上記操作5〜8をゲストOSまたはゲストアプリケーションが行った場合の処理を示す。
上記図8のS14でゲストメモリ保護テーブル21−0に対する書き込みがあったときには、S15に進んで図10のサブルーチンが実行される。
S41では、仮想計算機VM0で発生した例外イベントをVMM10が取得し、ゲストOSが書き込みを行ったゲストメモリ保護テーブル21−0のエントリをVMM10が特定する。
次に、S42ではVMM10が、仮想計算機VM0のゲストページテーブルセットに対する書き込みが有効であったか否かを判定する。ゲストによる書き込みの判定は、当該書き込みが例外を発生させる場合は無効と判断して本サブルーチンを終了し、例外を発生させない場合は有効と判定してS43へ進む。
なお、上記ゲストによるゲストページテーブルセットへの書き込みで無効となる場合は、IA−32の場合、一般保護例外(#GP)、スタック・フォルト例外(#SS)、アライメント例外(#AC)、ページ・フォルト例外(#PF)が発生したときである。なお、上記例外については、IA-32 Intel Architecture Software Developer's Manual Volume 3: System Programming Guide Intel Extended Memory 64 Technology Software Developer's Guide Volume 1 of 2(ftp://download.intel.co.jp/jp/developer/jpdoc/ia32_arh_dev_man_vol3_i.pdf)のとおりである。
S43では、ゲストメモリ保護テーブル21−0の拡張が行われたか否かを検出することで、第1及び第2のホストメモリ保護テーブルにエントリの追加が必要であるか否かを判定する。VMM10は、ゲストメモリ保護テーブルの拡張が検出された場合には、S44に進む一方、エントリの追加が不要であるときには、S45の処理へ進む。
このゲストメモリ保護テーブルの拡張の有無は、次の条件の何れかを満足するときに、ゲストメモリ保護テーブルの拡張を検出する。
・条件1.ゲスト(ゲストOSまたはゲストアプリケーション)が64bitモードでPML4テーブル131のエントリのPビットが0⇒1に変化したとき。
・条件2.ゲストがCR4.PAE=1かつCR0.PG=1でPDPのPビットが0⇒1に変化したとき。なお、CR4.PAEは特権レジスタCR4のPAEビットを意味し、CR0.PGは、特権レジスタCR0のPGビットを意味する。
・条件3.ゲスト設定に関して式 (!CR4.PSE|!PDE.PS)&PDE.Pが0⇒1に変化したとき。なお、CR4.PSEは特権レジスタCR4のPSEビットを意味し、PDE.PSはPDEテーブル133のPSビットで、PDE.Pは、PDEテーブル133のPビットである。
・条件1.ゲスト(ゲストOSまたはゲストアプリケーション)が64bitモードでPML4テーブル131のエントリのPビットが0⇒1に変化したとき。
・条件2.ゲストがCR4.PAE=1かつCR0.PG=1でPDPのPビットが0⇒1に変化したとき。なお、CR4.PAEは特権レジスタCR4のPAEビットを意味し、CR0.PGは、特権レジスタCR0のPGビットを意味する。
・条件3.ゲスト設定に関して式 (!CR4.PSE|!PDE.PS)&PDE.Pが0⇒1に変化したとき。なお、CR4.PSEは特権レジスタCR4のPSEビットを意味し、PDE.PSはPDEテーブル133のPSビットで、PDE.Pは、PDEテーブル133のPビットである。
また、64bitモードの条件はIA32EFER.LME=1&&CR4.PAE=1&&CR0.PG=1&&CS.L=1が成立するときである。ただし、IA32EFER.LMEは、拡張機能イネーブル・レジスタ(IA32_EFER)のIA−32eモード・イネーブル(LME)ビットを意味する。
次に、S44では、VMM10が、ゲストメモリ保護テーブルに対応する第1、第2のホストメモリ保護テーブル#0、#1に新規エントリを追加する。
S45では、ゲストOSまたはゲストアプリケーションのゲストメモリ保護テーブルに対する書き込みを、VMM10がゲストメモリ保護テーブルに反映させる。すなわち。ゲストメモリ保護テーブルはライトプロテクトが施されているため、ゲスト側でゲストメモリ保護テーブルに書き込みを行うと、例外イベントが発生するだけで、実際の書き込みは完了していない。このため、VMM10がゲスト側の要求に応じてゲストメモリ保護テーブルを更新するのである。
そして、S46ではVMM10が上記S45で書き込んだ内容を、第1、第2のホストメモリ保護テーブル#0、#1の対応するエントリに反映させて更新を行う。これにより、ゲストメモリ保護テーブルが拡張されて場合には、VMM10はホストメモリ保護テーブル#0、#1の内容を更新し、ゲストメモリ保護テーブルとホストメモリ保護テーブルの対応するエントリを一致させる。
<4.5.2 メモリ保護テーブル更新処理2>
上記図8のS15で行われるメモリ保護テーブルの更新処理の他の例について、図11のフローチャートを参照しながら説明する。図11は、上記操作1(特権レジスタCR0のPGビットを変化させる操作)をゲストOSまたはゲストアプリケーションが行った場合の処理を示す。
上記図8のS15で行われるメモリ保護テーブルの更新処理の他の例について、図11のフローチャートを参照しながら説明する。図11は、上記操作1(特権レジスタCR0のPGビットを変化させる操作)をゲストOSまたはゲストアプリケーションが行った場合の処理を示す。
まず、S51では、VMM10がCPU201−0のPGビットを参照し、ページングが有効であるか無効であるか等からゲストメモリ保護テーブルが有効または無効のいずれであるかを判定する。ゲストOSのブート時には、特権レジスタCR0のPGビットはOFFで、アプリケーションの起動時などにOFF→ONへ変化する。このとき例外イベントが発生するのでVMM10は、この例外を捕捉し、ページングが有効(セット)であればS53に進み、無効(クリア)であればS52へ進む。
S52では、上記図9と同様にして、ゲストメモリ保護テーブルを参照して第1及び第2のホストメモリ保護テーブル#0、#1を生成する。
一方、ゲストメモリ保護テーブルが有効であるS53では、ゲストメモリ保護テーブルのページディレクトリ(PDE)テーブル133から変更されたエントリの位置情報を取得する。
S54では、ゲストメモリ保護テーブルの全てを参照し、第1及び第2のホストメモリ保護テーブル#0、#1を生成する。
S55では、ゲストメモリ保護テーブルを書き込み禁止に設定し、以降、ゲスト側がゲストメモリ保護テーブルに書き込みを行うと、例外イベントを発生して上記4.5.1で述べた処理を行うように設定する。
次に、S56では本サブルーチンへ入る契機となった例外イベントを発生したゲスト側の特権(権限)レベルを所定値(0)と比較し、ゲストOSとVMM10を保護するホストメモリ保護テーブル#0と、ゲストアプリケーションとVMM10を保護するホストメモリ保護テーブル#1の何れかを選択する。つまり、特権レベル(CPL:CURRENT PRIVILEGE LEVEL)が0であればゲストOSと判定し、特権レベルが0でなければゲストアプリケーションと判定する。
特権レベルが0のS57では、第1のホストメモリ保護テーブル#0を使用するように、CPU201−0のテーブルポインタレジスタ231に第1のホストメモリ保護テーブルを示すアドレスを設定する。
特権レベルが0でないS58では、第2のホストメモリ保護テーブル#1を使用するように、CPU201−0のテーブルポインタレジスタ231に第2のホストメモリ保護テーブルを示すアドレスを設定する。
以上の処理により、ゲスト側で上記操作1による例外イベントが発生した場合には、ゲストメモリ保護テーブルに対応してのホストメモリ保護テーブル#0、#1の更新(生成)が行われる。
<4.5.3 メモリ保護テーブル更新処理3>
上記図8のS15で行われるメモリ保護テーブルの更新処理の他の例について、図12のフローチャートを参照しながら説明する。図12は、上記操作2〜4、9、10(特権レジスタCR3、4、GDTR、LDTRを変化させる操作)をゲストOSまたはゲストアプリケーションが行った場合の処理を示す。
上記図8のS15で行われるメモリ保護テーブルの更新処理の他の例について、図12のフローチャートを参照しながら説明する。図12は、上記操作2〜4、9、10(特権レジスタCR3、4、GDTR、LDTRを変化させる操作)をゲストOSまたはゲストアプリケーションが行った場合の処理を示す。
このサブルーチンでは、特権レジスタCR3のページ・ディレクトリ133のベースの物理アドレスの書き換えが生じた場合になどで実行される。
まず、S61では、上記図11のS51と同様にしてゲストメモリ保護テーブルが有効または無効のいずれであるかを判定する。
ゲストメモリ保護テーブルが無効の場合では、ホストメモリ保護テーブルを更新する必要がないので、S66に進む。
ページングが有効であるS63では、ゲストメモリ保護テーブルから新たに追加されたエントリの位置情報を取得する。
S64では、新たに追加されたエントリに関連するゲストメモリ保護テーブルを参照して第1及び第2のホストメモリ保護テーブル#0、#1を生成する。
S65では、ゲストメモリ保護テーブルを書き込み禁止に設定し、以降、ゲスト側がゲストメモリ保護テーブルに書き込みを行うと、例外イベントを発生して上記4.5.1で述べた処理を行うように設定する。
次に、S66では本サブルーチンへ入る契機となった例外イベントを発生したゲスト側の特権(権限)レベルを確認し、ゲストOSとVMM10を保護するホストメモリ保護テーブル#0と、ゲストアプリケーションとVMM10を保護するホストメモリ保護テーブル#1の何れかを選択し、特権レベルが0のS67では、第1のホストメモリ保護テーブル#0を使用するように、CPU201−0のテーブルポインタレジスタ231に第1のホストメモリ保護テーブルを示すアドレスを設定する。特権レベルが0でないS68では、第2のホストメモリ保護テーブル#1を使用するように、CPU201−0のテーブルポインタレジスタ231に第2のホストメモリ保護テーブルを示すアドレスを設定する。
以上の処理により、特権レジスタのベースアドレスなどの変更(操作2〜4、9、10)がゲスト側で行われた場合には、ゲストメモリ保護テーブルに対応してホストメモリ保護テーブル#0、#1の更新(生成)が行われる。
<4.6 第1、第2ホストメモリ保護テーブルの設定>
次に、図8のS15及び上記4.5.1〜3に示した第1及び第2のホストメモリ保護テーブル#0、#1の更新処理の詳細について、以下に説明する。
次に、図8のS15及び上記4.5.1〜3に示した第1及び第2のホストメモリ保護テーブル#0、#1の更新処理の詳細について、以下に説明する。
図13は、ページディレクトリ(PDE)テーブル133のエントリの詳細を示し、図14は、ページテーブル(PTE)134のエントリの詳細を示す。各エントリには、エントリ(ディレクトリ)の有効/無効を示すPビットと、アクセス権限がユーザまたはスーパバイザのいずれであるかを示すU/Sビットを備える。Pビットは、上述のように1で有効、0で無効となり、U/Sビットは、0が特権プログラム、1が非特権プログラムのアクセス権限を示す。なお、図示はしないが、PML4テーブル131及びPDPテーブル132も同様にPビットとU/Sビットを備えている。
本実施形態では、第1のホストメモリ保護テーブル#0と第2のホストメモリ保護テーブル#1の各ページテーブルセットについて、各テーブルエントリのPビットとU/Sビットを操作することで各ホストメモリ保護テーブルの保護、つまり、VMM10、ゲストOS、ゲストアプリケーションのメモリ領域の保護を実現する。
この保護のため、ゲストメモリ保護テーブル(ページテーブルセット、ディスクリプタテーブル(グローバルディスクリプタテーブルGDT、ローカルディスクリプタテーブルLDT))のPビットとU/Sビットを図15のように設定する。
図15は、ゲストメモリ保護テーブル21−0に対するゲスト側のPビットとU/Sビットの設定と、VMM10が管理する第1のホストメモリ保護テーブル#0と第2のホストメモリ保護テーブル#1のPビットとU/Sビットの設定を示す。
ゲスト側(ゲストOS#0またはゲストアプリケーション30)はゲストページテーブルセット及びGDT、LDTに対してPビットを0/1、U/Sビットを0/1に設定することで4通りの組み合わせがある。これに対してVMM10は、ゲスト側のPビットの0/1に係わらず、第1及び第2のホストメモリ保護テーブル#0、#1のゲストメモリ保護テーブル21−0の領域に対してPビットを全て0に設定する。すなわち、図中斜線のように、VMM10は、ゲストメモリ保護テーブルについて各テーブルのエントリがない(または無効)状態に設定する。
ここで、第1のホストメモリ保護テーブル#0において、Pビットが「0」の領域はVMM10だけがアクセス可能な範囲であり、Pビットが「1」の領域はVMM10及びゲストOS#0がアクセス可能な範囲である。同様に、第2のホストメモリ保護テーブル#1において、Pビットが「0」の領域はVMM10だけがアクセス可能な範囲であり、Pビットが「1」の領域はVMM10及びゲストアプリケーション30がアクセス可能な範囲である。
VMM10が、第1のホストメモリ保護テーブルでページテーブルセットのPビットを0に設定することにより、ゲストOS#0がゲストメモリ保護テーブル21−0に対してアクセスを行うと、Pビットが0であるために必ず例外イベントが発生し、VMM10はゲスト側による保護すべき領域へのアクセスを検知することができ、ゲストOS#0とVMM10の保護を行うことができる。なお、第1のホストメモリ保護テーブル#0では、U/Sビットは1に設定されてゲストOS#0は非特権扱いとなる。
次に、ゲストメモリ保護テーブル21−0以外の領域(図中上記以外のメモリ領域)について、VMM10は、ゲストOS#0が常にVMM10に対して非特権となるように、第1のホストメモリ保護テーブル#0を設定する。すなわち、ゲスト側のU/Sビットの設定が0(=特権)であっても、第1のホストメモリ保護テーブル#0のU/Sビットを1に設定する。これにより、VMM10とゲストOS#0の2者のメモリ領域を保護する第1のホストメモリ保護テーブル#0は、ゲストOS#0のアクセスを常に非特権アクセスとして扱うことができる。
なお、VMM10とゲストアプリケーション30の2者のメモリ領域を保護する第2のホストメモリ保護テーブル#1では、ゲストメモリ保護テーブル21−0以外の領域(図中上記以外のメモリ領域)について、Pビット及びU/Sビットともにゲスト側の設定どおりとする。
次に、第1及び第2のホストメモリ保護テーブル#0、#1のディスクリプタテーブル(GDT、LDT)の設定について説明する。
図16はディスクリプタの一例を示しLDTディスクリプタの例である。LDTディスクリプタには、ディスクリプタの特権(権限)レベルを示す2ビットのDPL(Description Privilege Level)を含み、DPLは0〜3の4段階の特権レベルを設定可能である。しかし、本実施形態では、実質的に0と3の2つの特権レベルを使用するものとする。
図17は、ディスクリプタテーブルに対するゲスト側の設定と、第1及び第2のホストメモリ保護テーブル#0、#1に対する設定を示す。
まず、ゲスト側がDPLを0に設定したとき、第1のホストメモリ保護テーブル#0では、DPLを最も特権レベルの低い3に設定し、ゲストOS#0の特権レベルを下げてVMM10が使用する領域を保護する。なお、ゲスト側のDPLの設定が1〜3の場合も第1のホストメモリ保護テーブル#0を3に設定する。
第2のホストメモリ保護テーブル#1では、ゲストアプリケーション30の設定であるので、ゲスト側の設定が3のときのみ、第2のホストメモリ保護テーブルのDPLを3に設定し、その他をDPL=0としてVMM10とゲストアプリケーション30が使用するメモリ領域の保護を行う。
以上のように、本実施形態では第1及び第2のホストメモリ保護テーブル#0、#1のページテーブルセットのPビットを0にしておくことで、ゲスト側(ゲストOS#0、ゲストアプリケーション30)がVMM10の領域をアクセスするのを防ぎ、また、ゲストOS#0を常に非特権プログラムとして扱うことで、特権レベルまたはアクセス権限の高いVMM10の領域を保護することができる。
<4.7 メモリ保護テーブル 削除処理>
図18は、図8のS21で行われる第1及び第2のホストメモリ保護テーブル#0、#1の削除処理の一例を示すフローチャートである。
図18は、図8のS21で行われる第1及び第2のホストメモリ保護テーブル#0、#1の削除処理の一例を示すフローチャートである。
まず、S71では、VMM10が、仮想計算機VM0のゲストOS#0(第1のプログラム)とゲストアプリケーション30(第2のプログラム)の動作を停止させる。
次に、S72では、CPU201−0のMMU230テーブルポインタレジスタ231に設定されている第1のホストメモリ保護テーブル#0または第2のホストメモリ保護テーブル#1のアドレスを無効にする。
そして、第1及び第2のホストメモリ保護テーブル#0、#1のメモリ領域を開放し、2つのホストメモリ保護テーブルを削除して終了する。
<5 まとめ>
以上のように、本実施形態によれば、IA−32等の既存の32ビットアーキテクチャのCPUを64ビットに拡張したEM64Tのように、2段階のアドレス保護機構(権限レベル)しか設定できないCPUを用いて仮想計算機を構成した場合であっても、ゲスト側とVMM10側の2つのプログラムのメモリ領域を規定したホストメモリ保護テーブルをゲストに応じて切り替えることで、VMM10とゲストOS#0及びゲストアプリケーション30毎にメモリ領域の保護を確実に行うことができ、信頼性の高い仮想計算機システムを提供することが可能となる。
以上のように、本実施形態によれば、IA−32等の既存の32ビットアーキテクチャのCPUを64ビットに拡張したEM64Tのように、2段階のアドレス保護機構(権限レベル)しか設定できないCPUを用いて仮想計算機を構成した場合であっても、ゲスト側とVMM10側の2つのプログラムのメモリ領域を規定したホストメモリ保護テーブルをゲストに応じて切り替えることで、VMM10とゲストOS#0及びゲストアプリケーション30毎にメモリ領域の保護を確実に行うことができ、信頼性の高い仮想計算機システムを提供することが可能となる。
なお、上記実施形態では、IA−32を64ビットに拡張した64ビットPUとしてEM64Tを備えた例を示したが、同様のCPUアーキテクチャであるAMD64(AMD社)等を用いても上記と同様にゲストOS#0、ゲストアプリケーション30、VMM10の保護を正確に行うことができるのである。
<第2実施形態>
図19、図20は、第2の実施形態を示し、前記第1実施形態のCPU201−0〜3を、仮想化技術を実装したCPU201−0’〜3’に置き換えたもので、その他の構成は前記第1実施形態と同様である。なお、前記第1実施形態と同一のものには同一の図番を付して重複説明を省略する。
図19、図20は、第2の実施形態を示し、前記第1実施形態のCPU201−0〜3を、仮想化技術を実装したCPU201−0’〜3’に置き換えたもので、その他の構成は前記第1実施形態と同様である。なお、前記第1実施形態と同一のものには同一の図番を付して重複説明を省略する。
CPU201−0’〜3’は、仮想計算機VM0〜VMn(ゲストOSまたはゲストアプリケーション)とVMM10の切り換えをハードウェアで行う機構を備えたものである。この機構は、VMM10とゲストプログラム(ゲストOSまたはゲストアプリケーション)の特権レベル及びメモリ保護テーブルの切り換えをハードウェアで行う。これにより、従来のVMM10ではソフトウェアで切り換えを行っていたために、処理のオーバーヘッドとなっていたVMM10とゲストプログラムの切り替えをハードウェアの処理で高速化するものである。この仮想化技術を実装したCPUとしては、例えば、「Intel Virtualization Technology Specification for the IA-32 Intel Architecture」(ftp://download.intel.com/technology/computing/vptech/C97063-002.pdf)などが知られている。
図20は、物理計算機200上で仮想計算機VM0〜VMnを実現するソフトウェア及びハードウェア構成の主要部を示すブロック図である。なお、以下では、ゲスト側となる仮想計算機VM上で実行されるゲストOSまたはゲストアプリケーションの双方をゲストプログラムとして扱う。
VMM10では、前記第1実施形態と同様に複数の仮想計算機VM0〜VMnが稼動する。ここで、仮想計算機VM0は、複数のゲストプログラム300−0、1から構成され、例えば、ゲストプログラム300−0がゲストOS#0であり、ゲストプログラム300−1がゲストOS#0上のゲストアプリケーション30である。以下の説明では、CPU201−0’と2つのゲストプログラム300−0(ゲストOS#0)、300−1(ゲストアプリケーション30)からなる仮想計算機VM0について説明を行う。
VMM10は、ゲストプログラム300−0、1を実行する際に、前記第1実施形態と同様にして、二重テーブル管理部110に実行するゲストプログラムに対応するホストメモリ保護テーブル#0、#1を生成する。
VMM10は初期化処理として、CPU201−0’に、ゲストプログラム300−0に対応するホストメモリ保護テーブル#0と、VMM10に対応するホストメモリ保護テーブル#1を登録する。そして、ゲストプログラム300−0を実行する場合、VM実行管理部120がCPU201−0’にVM−ENTRY命令(VMLAUNCH命令等)を発行する。このVM−ENTRY命令は、制御をVMM10からゲストプログラムに切り替えるため、特権レベルを低く設定すると同時に、MMU230のテーブルポインタレジスタ231に事前に指定されたテーブルをセットするものである。本実施形態では、VM−ENTRY命令によって、ホストメモリ保護テーブル#0がセットされる。
仮想化技術を実装したCPU201−0’は、VMM10からのVM−ENTRY命令を受けると、特権レベル及びメモリ保護テーブルをゲスト側に切り替えて、制御をゲストプログラム300−0に移す。ゲストプログラム300−0はゲストOS#0であり、ホストメモリ保護テーブル#0は、図20で示すように、前記第1実施形態と同様に、VMM10のメモリ領域とゲストOS#0のメモリ領域を保護する。
そして、CPU201−0’はゲスト側からVM−EXIT命令を受けると、制御をゲスト側からVMM10に移す。このVM−EXIT命令は、制御をゲストプログラムからVMM10に切り替えるため、特権レベルを高く設定すると同時に、MMU230のテーブルポインタレジスタ231に事前に指定されたテーブルをセットするものである。本実施形態では、CPU201−0’は、ゲストプログラムからVM−EXIT命令を受けると、特権レベルをVMM10に切り替え、メモリ保護テーブルをVMM側に切り替えた後、制御をVMM10に移す。
次に、VMM10がゲストプログラム300−1(ゲストアプリケーション30に相当)を実行する場合、上記と同様に、VMM10がCPU201−0’にVM−ENTRY命令を発行する。
VM−ENTRY命令によりホストメモリ保護テーブルは、#0から#1に切り替えられて、図20で示すように、前記第1実施形態と同様に、CPU201−0’のMMU230は、VMM10のメモリ領域とゲストOS#0のメモリ領域を保護する。
このように、ハードウェアによりVMM10と仮想計算機VM0の切り替えをアシストするCPU201−0’を採用した場合でも、VMM10が、VMM10自身またはゲストプログラムの切り替えに伴うCPU動作をCPU201−0’に登録し、第1または第2のホストメモリ保護テーブルを切り替えることで前記第1実施形態と同様に、ゲストOS#0、ゲストアプリケーション30、VMM10の独立性を確保して、仮想計算機の信頼性を向上させることができる。
なお、ホストメモリ保護テーブルは、前記第1実施形態と同様に、記憶領域250上にゲストOS、ゲストアプリケーション毎に生成し、実行が終了後に削除すればよい。
また、仮想化技術を実装したCPU201−0’が、前記第1実施形態と同様の64ビットアーキテクチャを備えるものであっても良い。
<補足>
請求項3の発明において、前記切り替える処理は、
前記第1のプログラムと第2のプログラムの権限レベルを所定の値と比較する処理と、 前記権限レベルが高い場合には、第1のプログラムを選択して切り替え、前記権限レベルが低い場合には第2のプログラムを選択して切り替える処理と、
を含むことを特徴とする仮想計算機の制御方法。
請求項3の発明において、前記切り替える処理は、
前記第1のプログラムと第2のプログラムの権限レベルを所定の値と比較する処理と、 前記権限レベルが高い場合には、第1のプログラムを選択して切り替え、前記権限レベルが低い場合には第2のプログラムを選択して切り替える処理と、
を含むことを特徴とする仮想計算機の制御方法。
請求項8の発明において、前記切り替える手順は、
前記第1のプログラムと第2のプログラムの権限レベルを所定の値と比較する手順と、 前記権限レベルが高い場合には、第1のプログラムを選択して切り替え、前記権限レベルが低い場合には第2のプログラムを選択して切り替える手順と、
を含むことを特徴とする仮想計算機のプログラム。
前記第1のプログラムと第2のプログラムの権限レベルを所定の値と比較する手順と、 前記権限レベルが高い場合には、第1のプログラムを選択して切り替え、前記権限レベルが低い場合には第2のプログラムを選択して切り替える手順と、
を含むことを特徴とする仮想計算機のプログラム。
請求項3の発明において、前記ゲストアプリケーションはゲストOS上で複数実行され、前記CPUで実行される第2のプログラムがアクセス可能なメモリ領域を規定する第2のメモリ保護テーブルを設定する処理は、
前記ゲストアプリケーションに応じて複数の前記第2のメモリ保護テーブルを設定し、前記第2のメモリ保護テーブルに対応して仮想計算機の状態のサブセットをそれぞれ有し、
前記第1のメモリ保護テーブルまたは第2のメモリ保護テーブルに切り替える処理は、更に現在の仮想計算機の状態と、前記仮想計算機の状態のサブセットとを比較する処理と、前記比較が一致した前記第2のメモリ保護テーブルの位置を取得する処理を含むことを特徴とする仮想計算機の制御方法。
前記ゲストアプリケーションに応じて複数の前記第2のメモリ保護テーブルを設定し、前記第2のメモリ保護テーブルに対応して仮想計算機の状態のサブセットをそれぞれ有し、
前記第1のメモリ保護テーブルまたは第2のメモリ保護テーブルに切り替える処理は、更に現在の仮想計算機の状態と、前記仮想計算機の状態のサブセットとを比較する処理と、前記比較が一致した前記第2のメモリ保護テーブルの位置を取得する処理を含むことを特徴とする仮想計算機の制御方法。
請求項8の発明において、前記ゲストアプリケーションはゲストOS上で複数実行され、前記CPUで実行される第2のプログラムがアクセス可能なメモリ領域を規定する第2のメモリ保護テーブルを設定する手順は、
前記ゲストアプリケーションに応じて複数の前記第2のメモリ保護テーブルを設定し、前記第2のメモリ保護テーブルに対応して仮想計算機の状態のサブセットをそれぞれ有し、
前記第1のメモリ保護テーブルまたは第2のメモリ保護テーブルに切り替える手順は、更に現在の仮想計算機の状態と、前記仮想計算機の状態のサブセットとを比較する手順と、前記比較が一致した前記第2のメモリ保護テーブルの位置を取得する手順を含むことを特徴とする仮想計算機のプログラム。
前記ゲストアプリケーションに応じて複数の前記第2のメモリ保護テーブルを設定し、前記第2のメモリ保護テーブルに対応して仮想計算機の状態のサブセットをそれぞれ有し、
前記第1のメモリ保護テーブルまたは第2のメモリ保護テーブルに切り替える手順は、更に現在の仮想計算機の状態と、前記仮想計算機の状態のサブセットとを比較する手順と、前記比較が一致した前記第2のメモリ保護テーブルの位置を取得する手順を含むことを特徴とする仮想計算機のプログラム。
請求項1の発明において、前記第1または第2のメモリ保護テーブルは、複数のテーブルから構成され、各テーブルのエントリは他のテーブルの位置情報を含み、前記第1のメモリ保護テーブルまたは第2のメモリ保護テーブルに切り替える処理は、前記他のテーブルヘのポインタ情報を書き換える処理を含むことを特徴とする仮想計算機の制御方法。
請求項6の発明において、前記第1または第2のメモリ保護テーブルは、複数のテーブルから構成され、各テーブルのエントリは他のテーブルの位置情報を含み、前記第1のメモリ保護テーブルまたは第2のメモリ保護テーブルに切り替える手順は、前記他のテーブルヘのポインタ情報を書き換える手順を含むことを特徴とする仮想計算機のプログラム。
請求項1の発明において、前記第1のメモリ保護テーブルまたは第2のメモリ保護テーブルに切り替える処理は、前記第1または第2のメモリ保護テーブルの内容を更新する処理を含むことを特徴とする仮想計算機の制御方法。
請求項6の発明において、前記第1のメモリ保護テーブルまたは第2のメモリ保護テーブルに切り替える手順は、前記第1または第2のメモリ保護テーブルの内容を更新する手順を含むことを特徴とする仮想計算機のプログラム。
請求項1の発明において、前記第1のプログラムまたは第2のプログラムが終了したときには、前記終了したプログラムに対応する前記第1または第2のメモリ保護テーブルを破棄する処理を含むことを特徴とする仮想計算機の制御方法。
請求項6の発明において、前記第1のプログラムまたは第2のプログラムが終了したときには、前記終了したプログラムに対応する前記第1または第2のメモリ保護テーブルを破棄する手順を含むことを特徴とする仮想計算機のプログラム。
請求項11の発明において、前記メモリ管理ユニットは、少なくとも2段階の権限レベルで前記メモリ領域を保護することを特徴とする仮想計算機システム。
請求項12の発明において、前記メモリ管理ユニットは、少なくとも2段階の権限レベルで前記メモリ領域を保護することを特徴とする仮想計算機システム。
以上のように、本発明は、既存の32ビットアーキテクチャを64ビットに拡張したCPUや仮想化技術を実装したCPUを備えた仮想計算機システムに適用することができる。
10 VMM
20−0〜n ゲストOS
21−0〜n ゲストメモリ保護テーブル
30 ゲストアプリケーション
110 二重テーブル管理部
111 第1のホストメモリ保護テーブル#0
112 第2のホストメモリ保護テーブル#1
120 VM実行管理部
130 ホストページテーブルセット
201−0〜3 CPU
230 MMU
231 テーブルポインタレジスタ
233 ゲストページテーブルセット
VM0〜VMn 仮想計算機
20−0〜n ゲストOS
21−0〜n ゲストメモリ保護テーブル
30 ゲストアプリケーション
110 二重テーブル管理部
111 第1のホストメモリ保護テーブル#0
112 第2のホストメモリ保護テーブル#1
120 VM実行管理部
130 ホストページテーブルセット
201−0〜3 CPU
230 MMU
231 テーブルポインタレジスタ
233 ゲストページテーブルセット
VM0〜VMn 仮想計算機
Claims (12)
- 少なくとも一つのCPUとメモリを共有して複数のプログラムを切り替えて実行する仮想計算機の制御方法であって、
前記CPUで実行される第1のプログラムがアクセス可能なメモリ領域を規定する第1のメモリ保護テーブルを設定する処理と、
前記CPUで実行される第2のプログラムがアクセス可能なメモリ領域を規定する第2のメモリ保護テーブルを設定する処理と、
前記第1または第2のプログラムの実行開始を検出する処理と、
前記検出した第1または第2のプログラムに対応して前記第1または第2のメモリ保護テーブルの何れか一方を選択して切り替える処理と、
前記選択した第1または第2のメモリ保護テーブルを前記CPUのメモリ管理ユニットで参照し、前記選択した第1または第2のメモリ保護テーブルに規定されたメモリ領域を保護させる処理と、
を含むことを特徴とする仮想計算機の制御方法。 - 前記第1のプログラムが前記仮想計算機を管理する仮想計算機モニタであって、
前記第2のプログラムが前記仮想計算機上で稼動するゲストプログラムであり、
前記検出する処理と、前記切り替える処理とを、前記仮想計算機モニタ自身で行うことを特徴とする請求項1に記載の仮想計算機の制御方法。 - 前記第1のプログラムが前記仮想計算機上で稼動するゲストOSであって、
前記第2のプログラムが前記仮想計算機上で稼動するゲストアプリケーションであり、
前記検出する処理と、前記切り替える処理とを、前記仮想計算機を管理する仮想計算機モニタが行うことを特徴とする請求項1に記載の仮想計算機の制御方法。 - 前記CPUは、仮想計算機を管理する仮想計算機モニタと、仮想計算機上で稼動するゲストプログラムとの切り替えを実行する機構を備え、
前記第1または第2のプログラムの実行開始を検出する処理は、
前記仮想計算機モニタまたはゲストプログラムから仮想計算機に関する制御の切り替え命令を検出したときに、前記第1または第2のプログラムの何れか一方の実行開始を検出することを特徴とする請求項2に記載の仮想計算機の制御方法。 - 前記CPUは、前記第1または第2のメモリ保護テーブルのメモリ上の位置を示すレジスタを備え、
前記メモリ領域を保護させる処理は、
前記選択した第1または第2のメモリ保護テーブルの位置を、前記レジスタに設定することを特徴とする請求項1に記載の仮想計算機の制御方法。 - 物理計算機上の少なくとも一つのCPUとメモリを共有して複数のプログラムを切り替えて仮想計算機を提供するプログラムであって、
前記CPUで実行される第1のプログラムがアクセス可能なメモリ領域を規定する第1のメモリ保護テーブルを設定する手順と、
前記CPUで実行される第2のプログラムがアクセス可能なメモリ領域を規定する第2のメモリ保護テーブルを設定する手順と、
前記第1または第2のプログラムの実行開始を検出する手順と、
前記検出した第1または第2のプログラムに対応して前記第1または第2のメモリ保護テーブルの何れか一方を選択して切り替える手順と、
前記選択した第1または第2のメモリ保護テーブルを前記CPUのメモリ管理ユニットで参照し、前記選択した第1または第2のメモリ保護テーブルに規定されたメモリ領域を保護させる手順と、
を前記物理計算機に実行させることを特徴とする仮想計算機のプログラム。 - 前記第1のプログラムが前記仮想計算機を管理する仮想計算機モニタであって、
前記第2のプログラムが前記仮想計算機上で稼動するゲストプログラムであることを特徴とする請求項6に記載の仮想計算機のプログラム。 - 前記第1のプログラムが前記仮想計算機上で稼動するゲストOSであって、
前記第2のプログラムが前記仮想計算機上で稼動するゲストアプリケーションであることを特徴とする請求項6に記載の仮想計算機のプログラム。 - 前記CPUは、仮想計算機を管理する仮想計算機モニタと、仮想計算機上で稼動するゲストプログラムとの切り替えを実行する機構を備え、
前記第1または第2のプログラムの実行開始を検出する手順は、
前記仮想計算機モニタまたはゲストプログラムから仮想計算機に関する制御の切り替え命令を検出したときに、前記第1または第2のプログラムの何れか一方の実行開始を検出することを特徴とする請求項7に記載の仮想計算機のプログラム。 - 前記CPUは、前記第1または第2のメモリ保護テーブルのメモリ上の位置を示すレジスタを備え、
前記メモリ領域を保護させる手順は、
前記選択した第1または第2のメモリ保護テーブルの位置を、前記レジスタに設定することを特徴とする請求項6に記載の仮想計算機のプログラム。 - CPUとメモリを備えた物理計算機上で、少なくとも一つのCPUとメモリを共有して複数のプログラムを切り替えて実行することで仮想計算機を提供する仮想計算機モニタを備えた仮想計算機システムにおいて、
前記仮想計算機は、第1のプログラムと、第2のプログラムを含み、
前記仮想計算機モニタは、
前記仮想計算機を構成する第1のプログラムがアクセス可能なメモリ領域と仮想計算機モニタがアクセス可能なメモリ領域とを規定する第1のメモリ保護テーブルと、第2のプログラムがアクセス可能なメモリ領域と仮想計算機モニタがアクセス可能なメモリ領域とを規定する第2のメモリ保護テーブルとを設定するメモリ保護テーブル設定部と、
前記第1または第2のプログラムの実行開始を検出する実行開始検出部と、
前記検出した第1または第2のプログラムに対応して前記第1または第2のメモリ保護テーブルの何れか一方を選択して切り替えるメモリ保護テーブル切換部と、
前記選択した第1または第2のメモリ保護テーブルを前記CPUに指令するメモリ保護指令部と、を備え、
前記CPUは、前記指令された第1または第2のメモリ保護テーブルに規定されたメモリ領域を保護するメモリ管理ユニットを有することを特徴とする仮想計算機システム。 - CPUとメモリを備えた物理計算機上で、少なくとも一つのCPUとメモリを共有して複数のプログラムを切り替えて実行することで仮想計算機を提供する仮想計算機モニタを備えた仮想計算機システムにおいて、
前記仮想計算機は、ゲストプログラムを含み、
前記仮想計算機モニタは、
前記ゲストプログラムがアクセス可能なメモリ領域を規定する第1のメモリ保護テーブルと、仮想計算機モニタがアクセス可能なメモリ領域とを規定する第2のメモリ保護テーブルとを設定するメモリ保護テーブル設定部と、
前記ゲストプログラムまたは仮想計算機モニタの実行開始を検出する実行開始検出部と、
前記検出したゲストプログラムまたは仮想計算機モニタに対応して前記第1または第2のメモリ保護テーブルの何れか一方を選択して切り替えるメモリ保護テーブル切換部と、
前記選択した第1または第2のメモリ保護テーブルを前記CPUに指令するメモリ保護指令部と、を備え、
前記CPUは、
前記指令された第1または第2のメモリ保護テーブルに規定されたメモリ領域を保護するメモリ管理ユニットと、
前記ゲストプログラムの実行開始または実行終了に基づいて、前記仮想計算機モニタと、仮想計算機上で稼動するゲストプログラムとの切り替えを実行する切り替え機構と、
を有することを特徴とする仮想計算機システム。
Priority Applications (2)
| Application Number | Priority Date | Filing Date | Title |
|---|---|---|---|
| JP2005186173A JP2007004661A (ja) | 2005-06-27 | 2005-06-27 | 仮想計算機の制御方法及びプログラム |
| US11/472,386 US20060294519A1 (en) | 2005-06-27 | 2006-06-22 | Virtual machine control method and program thereof |
Applications Claiming Priority (1)
| Application Number | Priority Date | Filing Date | Title |
|---|---|---|---|
| JP2005186173A JP2007004661A (ja) | 2005-06-27 | 2005-06-27 | 仮想計算機の制御方法及びプログラム |
Publications (1)
| Publication Number | Publication Date |
|---|---|
| JP2007004661A true JP2007004661A (ja) | 2007-01-11 |
Family
ID=37569115
Family Applications (1)
| Application Number | Title | Priority Date | Filing Date |
|---|---|---|---|
| JP2005186173A Pending JP2007004661A (ja) | 2005-06-27 | 2005-06-27 | 仮想計算機の制御方法及びプログラム |
Country Status (2)
| Country | Link |
|---|---|
| US (1) | US20060294519A1 (ja) |
| JP (1) | JP2007004661A (ja) |
Cited By (7)
| Publication number | Priority date | Publication date | Assignee | Title |
|---|---|---|---|---|
| WO2008146677A1 (ja) * | 2007-05-24 | 2008-12-04 | Nec Corporation | 仮想マシン管理装置、仮想マシン管理方法および仮想マシン管理プログラム |
| JP2009129394A (ja) * | 2007-11-28 | 2009-06-11 | Nec Electronics Corp | 情報処理装置及びそのプログラム実行制御方法 |
| JP2009217395A (ja) * | 2008-03-07 | 2009-09-24 | Nec Corp | 仮想サーバソフトウェア更新システム、仮想サーバソフトウェア更新方法、サーバ、及びサーバ用プログラム |
| WO2013035235A1 (ja) * | 2011-09-08 | 2013-03-14 | パナソニック株式会社 | 計算機システム、計算機システム制御方法、計算機システム制御プログラム、及び集積回路 |
| US8484452B2 (en) | 2008-03-14 | 2013-07-09 | Mitsubishi Electric Corporation | Multi-operating system (OS) booting apparatus, multi-OS booting program, recording medium, and multi-OS booting method |
| JP2014531088A (ja) * | 2011-10-19 | 2014-11-20 | グーグル・インコーポレーテッド | コンピュータセキュリティを増強する防御技術 |
| US9032174B2 (en) | 2012-03-15 | 2015-05-12 | Fujitsu Limited | Information processing apparatus for restricting access to memory area of first program from second program |
Families Citing this family (48)
| Publication number | Priority date | Publication date | Assignee | Title |
|---|---|---|---|---|
| US9354927B2 (en) | 2006-12-21 | 2016-05-31 | Vmware, Inc. | Securing virtual machine data |
| US9098347B2 (en) | 2006-12-21 | 2015-08-04 | Vmware | Implementation of virtual machine operations using storage system functionality |
| US9189265B2 (en) | 2006-12-21 | 2015-11-17 | Vmware, Inc. | Storage architecture for virtual machines |
| US8856782B2 (en) | 2007-03-01 | 2014-10-07 | George Mason Research Foundation, Inc. | On-demand disposable virtual work system |
| JP2009134565A (ja) * | 2007-11-30 | 2009-06-18 | Hitachi Ltd | 仮想計算機システム及び仮想計算機システムの制御方法 |
| US8307405B2 (en) * | 2008-04-28 | 2012-11-06 | International Business Machines Corporation | Methods, hardware products, and computer program products for implementing zero-trust policy in storage reports |
| US8336099B2 (en) * | 2008-05-08 | 2012-12-18 | International Business Machines Corporation | Methods, hardware products, and computer program products for implementing introspection data comparison utilizing hypervisor guest introspection data |
| US9286080B2 (en) * | 2008-07-02 | 2016-03-15 | Hewlett-Packard Development Company, L.P. | Memory management for hypervisor loading |
| US8327355B2 (en) * | 2008-07-15 | 2012-12-04 | International Business Machines Corporation | Method, computer program product, and hardware product for supporting virtual machine guest migration overcommit |
| US8843742B2 (en) | 2008-08-26 | 2014-09-23 | Hewlett-Packard Company | Hypervisor security using SMM |
| US9098698B2 (en) * | 2008-09-12 | 2015-08-04 | George Mason Research Foundation, Inc. | Methods and apparatus for application isolation |
| US8667187B2 (en) * | 2008-09-15 | 2014-03-04 | Vmware, Inc. | System and method for reducing communication overhead between network interface controllers and virtual machines |
| US20100083247A1 (en) * | 2008-09-26 | 2010-04-01 | Netapp, Inc. | System And Method Of Providing Multiple Virtual Machines With Shared Access To Non-Volatile Solid-State Memory Using RDMA |
| CN101753594B (zh) * | 2008-11-28 | 2014-03-12 | 国际商业机器公司 | 一种激活虚拟机的方法和装置 |
| JP4961459B2 (ja) * | 2009-06-26 | 2012-06-27 | 株式会社日立製作所 | 仮想計算機システムおよび仮想計算機システムにおける制御方法 |
| US8839422B2 (en) * | 2009-06-30 | 2014-09-16 | George Mason Research Foundation, Inc. | Virtual browsing environment |
| US8612975B2 (en) * | 2009-07-07 | 2013-12-17 | Advanced Micro Devices, Inc. | World switch between virtual machines with selective storage of state information |
| US8627112B2 (en) * | 2010-03-30 | 2014-01-07 | Novell, Inc. | Secure virtual machine memory |
| US8812400B2 (en) | 2010-07-09 | 2014-08-19 | Hewlett-Packard Development Company, L.P. | Managing a memory segment using a memory virtual appliance |
| US9529615B2 (en) * | 2010-11-24 | 2016-12-27 | International Business Machines Corporation | Virtual device emulation via hypervisor shared memory |
| US8522238B2 (en) * | 2011-01-24 | 2013-08-27 | Red Hat Israel, Ltd. | Feature driven backend switching |
| US8966084B2 (en) | 2011-06-17 | 2015-02-24 | International Business Machines Corporation | Virtual machine load balancing |
| US8949428B2 (en) | 2011-06-17 | 2015-02-03 | International Business Machines Corporation | Virtual machine load balancing |
| US8843924B2 (en) | 2011-06-17 | 2014-09-23 | International Business Machines Corporation | Identification of over-constrained virtual machines |
| US20130055243A1 (en) * | 2011-08-24 | 2013-02-28 | Dell Products, Lp | Unified Management Architecture to Support Multiple Platform-as-a-Service Workloads |
| US8782351B2 (en) | 2011-10-13 | 2014-07-15 | International Business Machines Corporation | Protecting memory of a virtual guest |
| US8788763B2 (en) | 2011-10-13 | 2014-07-22 | International Business Machines Corporation | Protecting memory of a virtual guest |
| WO2013082437A1 (en) | 2011-12-02 | 2013-06-06 | Invincia, Inc. | Methods and apparatus for control and detection of malicious content using a sandbox environment |
| US9317455B2 (en) * | 2012-01-05 | 2016-04-19 | Lenovo (Singapore) Pte. Ltd. | Virtual switching of information handling device components |
| US8789047B2 (en) * | 2012-01-26 | 2014-07-22 | Empire Technology Development Llc | Allowing world switches between virtual machines via hypervisor world switch security setting |
| US9152570B2 (en) * | 2012-02-27 | 2015-10-06 | Vmware, Inc. | System and method for supporting finer-grained copy-on-write page sizes |
| JP5914145B2 (ja) * | 2012-05-01 | 2016-05-11 | ルネサスエレクトロニクス株式会社 | メモリ保護回路、処理装置、およびメモリ保護方法 |
| US9223602B2 (en) * | 2012-12-28 | 2015-12-29 | Intel Corporation | Processors, methods, and systems to enforce blacklisted paging structure indication values |
| GB2517493A (en) * | 2013-08-23 | 2015-02-25 | Advanced Risc Mach Ltd | Handling access attributes for data accesses |
| US9430642B2 (en) * | 2013-09-17 | 2016-08-30 | Microsoft Technology Licensing, Llc | Providing virtual secure mode with different virtual trust levels each having separate memory access protections, interrupt subsystems and private processor states |
| US9411600B2 (en) * | 2013-12-08 | 2016-08-09 | Intel Corporation | Instructions and logic to provide memory access key protection functionality |
| DE102014201682A1 (de) * | 2014-01-30 | 2015-07-30 | Robert Bosch Gmbh | Verfahren zur Koexistenz von Software mit verschiedenen Sicherheitsstufen in einem Multicore-Prozessorsystem |
| US9652631B2 (en) * | 2014-05-05 | 2017-05-16 | Microsoft Technology Licensing, Llc | Secure transport of encrypted virtual machines with continuous owner access |
| US9519787B2 (en) | 2014-11-14 | 2016-12-13 | Microsoft Technology Licensing, Llc | Secure creation of encrypted virtual machines from encrypted templates |
| EP3062225B1 (en) | 2015-02-24 | 2019-07-03 | Huawei Technologies Co., Ltd. | Multi-operating system device, notification device and methods thereof |
| GB2539429B (en) | 2015-06-16 | 2017-09-06 | Advanced Risc Mach Ltd | Address translation |
| GB2539428B (en) | 2015-06-16 | 2020-09-09 | Advanced Risc Mach Ltd | Data processing apparatus and method with ownership table |
| GB2539435B8 (en) | 2015-06-16 | 2018-02-21 | Advanced Risc Mach Ltd | Data processing memory access control, in which an owning process for a region of memory is specified independently of privilege level |
| GB2539433B8 (en) * | 2015-06-16 | 2018-02-21 | Advanced Risc Mach Ltd | Protected exception handling |
| GB2539436B (en) | 2015-06-16 | 2019-02-06 | Advanced Risc Mach Ltd | Secure initialisation |
| US10924429B1 (en) * | 2019-11-29 | 2021-02-16 | Amazon Technologies, Inc. | Using edge-optimized compute instances to execute user workloads at provider substrate extensions |
| US11394614B2 (en) | 2020-05-05 | 2022-07-19 | Arista Networks, Inc. | Network device supporting multiple operating systems to enable optimized use of network device hardware |
| CN112072620B (zh) * | 2020-08-31 | 2022-09-20 | 许继集团有限公司 | 一种应用继电保护装置的继电保护出口方法 |
Family Cites Families (4)
| Publication number | Priority date | Publication date | Assignee | Title |
|---|---|---|---|---|
| US7035963B2 (en) * | 2000-12-27 | 2006-04-25 | Intel Corporation | Method for resolving address space conflicts between a virtual machine monitor and a guest operating system |
| US7111146B1 (en) * | 2003-06-27 | 2006-09-19 | Transmeta Corporation | Method and system for providing hardware support for memory protection and virtual memory address translation for a virtual machine |
| US7886293B2 (en) * | 2004-07-07 | 2011-02-08 | Intel Corporation | Optimizing system behavior in a virtual machine environment |
| US20060095690A1 (en) * | 2004-10-29 | 2006-05-04 | International Business Machines Corporation | System, method, and storage medium for shared key index space for memory regions |
-
2005
- 2005-06-27 JP JP2005186173A patent/JP2007004661A/ja active Pending
-
2006
- 2006-06-22 US US11/472,386 patent/US20060294519A1/en not_active Abandoned
Cited By (16)
| Publication number | Priority date | Publication date | Assignee | Title |
|---|---|---|---|---|
| US8250574B2 (en) | 2007-05-24 | 2012-08-21 | Nec Corporation | Virtual machine management via use of table in which virtual machine information is registered on a time basis |
| WO2008146677A1 (ja) * | 2007-05-24 | 2008-12-04 | Nec Corporation | 仮想マシン管理装置、仮想マシン管理方法および仮想マシン管理プログラム |
| JP5206674B2 (ja) * | 2007-05-24 | 2013-06-12 | 日本電気株式会社 | 仮想マシン管理装置、仮想マシン管理方法および仮想マシン管理プログラム |
| JP2009129394A (ja) * | 2007-11-28 | 2009-06-11 | Nec Electronics Corp | 情報処理装置及びそのプログラム実行制御方法 |
| JP2009217395A (ja) * | 2008-03-07 | 2009-09-24 | Nec Corp | 仮想サーバソフトウェア更新システム、仮想サーバソフトウェア更新方法、サーバ、及びサーバ用プログラム |
| US8484452B2 (en) | 2008-03-14 | 2013-07-09 | Mitsubishi Electric Corporation | Multi-operating system (OS) booting apparatus, multi-OS booting program, recording medium, and multi-OS booting method |
| US8881265B2 (en) | 2011-09-08 | 2014-11-04 | Panasonic Intellectual Property Corporation Of America | Computer system, computer system control method, computer system control program, and integrated circuit |
| CN103201750A (zh) * | 2011-09-08 | 2013-07-10 | 松下电器产业株式会社 | 计算机系统、计算机系统控制方法、计算机系统控制程序及集成电路 |
| WO2013035235A1 (ja) * | 2011-09-08 | 2013-03-14 | パナソニック株式会社 | 計算機システム、計算機システム制御方法、計算機システム制御プログラム、及び集積回路 |
| JPWO2013035235A1 (ja) * | 2011-09-08 | 2015-03-23 | パナソニック インテレクチュアル プロパティ コーポレーション オブアメリカPanasonic Intellectual Property Corporation of America | 計算機システム、計算機システム制御方法、計算機システム制御プログラム、及び集積回路 |
| CN103201750B (zh) * | 2011-09-08 | 2016-12-28 | 松下电器(美国)知识产权公司 | 计算机系统、计算机系统控制方法及集成电路 |
| JP2014531088A (ja) * | 2011-10-19 | 2014-11-20 | グーグル・インコーポレーテッド | コンピュータセキュリティを増強する防御技術 |
| JP6013640B2 (ja) * | 2011-10-19 | 2016-10-25 | グーグル インコーポレイテッド | コンピュータセキュリティを増強する防御技術 |
| JP2017037660A (ja) * | 2011-10-19 | 2017-02-16 | グーグル インコーポレイテッド | コンピュータセキュリティを増強する防御技術 |
| US9576129B2 (en) | 2011-10-19 | 2017-02-21 | Google Inc. | Defensive techniques to increase computer security |
| US9032174B2 (en) | 2012-03-15 | 2015-05-12 | Fujitsu Limited | Information processing apparatus for restricting access to memory area of first program from second program |
Also Published As
| Publication number | Publication date |
|---|---|
| US20060294519A1 (en) | 2006-12-28 |
Similar Documents
| Publication | Publication Date | Title |
|---|---|---|
| JP2007004661A (ja) | 仮想計算機の制御方法及びプログラム | |
| US7734893B2 (en) | Method for speeding up page table address update on virtual machine | |
| US10776112B2 (en) | Performing an operation absent host intervention | |
| ES2893618T3 (es) | Gestión del uso del almacenamiento por múltiples invitados localizables de un entorno de ordenador | |
| US9251089B2 (en) | System supporting multiple partitions with differing translation formats | |
| US7624240B1 (en) | Separate swap files corresponding to different virtual machines in a host computer system | |
| US6061773A (en) | Virtual memory system with page table space separating a private space and a shared space in a virtual memory | |
| US8752053B2 (en) | Facilitating processing within computing environments supporting pageable guests | |
| US6125430A (en) | Virtual memory allocation in a virtual address space having an inaccessible gap | |
| US7073042B2 (en) | Reclaiming existing fields in address translation data structures to extend control over memory accesses | |
| US9152570B2 (en) | System and method for supporting finer-grained copy-on-write page sizes | |
| US9430402B2 (en) | System and method for providing stealth memory | |
| US5835961A (en) | System for non-current page table structure access | |
| US8650375B2 (en) | Virtual machine control program and virtual machine system | |
| US20170357592A1 (en) | Enhanced-security page sharing in a virtualized computer system | |
| US20230195533A1 (en) | Prepopulating page tables for memory of workloads during live migrations | |
| JP2006155272A (ja) | 仮想計算機の制御方法及びプログラム | |
| US20150302222A1 (en) | Computing machine, access management method, and access management program | |
| US11762573B2 (en) | Preserving large pages of memory across live migrations of workloads |
Legal Events
| Date | Code | Title | Description |
|---|---|---|---|
| A621 | Written request for application examination |
Free format text: JAPANESE INTERMEDIATE CODE: A621 Effective date: 20080116 |
|
| A977 | Report on retrieval |
Free format text: JAPANESE INTERMEDIATE CODE: A971007 Effective date: 20090819 |
|
| A131 | Notification of reasons for refusal |
Free format text: JAPANESE INTERMEDIATE CODE: A131 Effective date: 20090901 |
|
| A02 | Decision of refusal |
Free format text: JAPANESE INTERMEDIATE CODE: A02 Effective date: 20100105 |