(57)【要約】【課題】  仮想計算機上で稼動するゲストＯＳがゲストページＰＴアドレスの更新する際の、ＶＭＭによるシャドウＰＴ操作から冗長性を削減し、仮想計算機を高速化する。【解決手段】  ＶＭＭが、複数のシャドウＰＴを、基にしたゲストＰＴと対応付けて保存する。そして、ＶＭＭがゲストＰＴアドレスの更新を検出した際に、更新後のゲストＰＴに対応するシャドウＰＴを検索する。対応するシャドウＰＴが存在する場合は、ＶＭＭはシャドウＰＴの書き換えを省略し、当該シャドウＰＴのアドレスをＣＰＵに登録する。対応するシャドウＰＴが存在しない場合は、メモリを確保してシャドウＰＴを作成し、作成したシャドウＰＴのアドレスをＣＰＵに登録し、更新後のゲストＰＴと作成したシャドウＰＴの対応関係を記録する。【選択図】  図１
2007188121.tif 000002
【特許請求の範囲】
【請求項１】
１つ以上のＣＰＵとメモリを有する計算機の上で複数のＯＳを稼動させる制御プログラムであって、前記複数のＯＳの各々がメモリ上に保有する第１のアドレス変換テーブルに基づいて、前記ＣＰＵが行うアドレス変換を規定する第２のアドレス変換テーブルをメモリ上に生成し、前記第１、第２のアドレス変換テーブルの対応表を用いて第１、第２のアドレス変換テーブル対を複数管理する手段を有し、
前記ＯＳによる第１のアドレス変換テーブル切り替え要求に応じて前記対応表を検索し、切り替え後の第１のアドレス変換テーブルに対応する第２のアドレス変換テーブルを、前記ＣＰＵに設定する手順を計算機に実行させることを特徴とする仮想計算機の制御プログラム。
【請求項２】
請求項1に記載の仮想計算機の制御プログラムであって、前記ＯＳによる第１のアドレス変換テーブル切り替え要求時に、前記切り替え後の第１のアドレス変換テーブルに対応する第２のアドレス変換テーブルが前記対応表中に存在しない場合に、前記切り替え後の第１のアドレス変換テーブルに対応する第２のアドレス変換テーブルを生成する手順と、前記対応表に当該第１、第２のアドレス変換テーブルを記録する手順を計算機に実行させることを特徴とする仮想計算機の制御プログラム。
【請求項３】
請求項1に記載の仮想計算機の制御プログラムであって、前記第２のアドレス変換テーブルを保持するメモリが不足した場合に、前記ＣＰＵに設定されていない第２のアドレス変換テーブルを破棄して、該第２のアドレス変換テーブルを保持するメモリを確保する手順を計算機に実行させることを特徴とする仮想計算機の制御プログラム。
【請求項４】
請求項1に記載の仮想計算機の制御プログラムであって、前記第２のアドレス変換テーブルに対応する、第１のアドレス変換テーブルの更新を検出する設定処理を計算機に実行させることを特徴とする仮想計算機の制御プログラム。
【請求項５】
請求項４に記載の仮想計算機の制御プログラムであって、前記第1のアドレス変換テーブルの更新検出手段として、当該第1のアドレス変換テーブルを含むメモリ領域に書き込み禁止属性を設定する手順、を計算機に実行させることを特徴とする仮想計算機の制御プログラム。
【請求項６】
請求項４に記載の仮想計算機の制御プログラムであって、前記第２のアドレス変換テーブルに対応する第１のアドレス変換テーブルが更新される場合に、当該更新の影響を受ける第２のアドレス変換テーブルのエントリのみを更新する手順を計算機に実行させることを特徴とする仮想計算機の制御プログラム。
【請求項７】
請求項４に記載の仮想計算機の制御プログラムであって、前記第２のアドレス変換テーブルに対応する第１のアドレス変換テーブルが更新される場合に、当該第２のアドレス変換テーブルを無効化する手順を計算機に実行させることを特徴とする仮想計算機の制御プログラム。
【請求項８】
請求項４に記載の仮想計算機の制御プログラムであって、前記第２のアドレス変換テーブルに対応する第１のアドレス変換テーブルが更新される場合に、当該更新の影響を受ける第２のアドレス変換テーブルのエントリの識別子を記録する手順と、識別子が記録されている第２のアドレス変換テーブルのエントリがＣＰＵに参照される場合に、当該第２のアドレス変換テーブルのエントリを更新し、
当該第２のアドレス変換テーブルのエントリの識別子を削除する手順、を計算機に実行させることを特徴とする仮想計算機の制御プログラム。
【請求項９】
請求項１に記載の仮想計算機の制御プログラムであって、前記対応表の各エントリが第１、第２のアドレス変換テーブルのアドレスを有し、前記切り替え後の第１のアドレス変換テーブルに対応する、第２のアドレス変換テーブルを検索する際に、前記対応表の中から、前記切り替え後の第１のアドレス変換テーブルのアドレスを保持するエントリを検索する手順、を計算機に実行させることを特徴とする仮想計算機の制御プログラム。
【請求項１０】
１つ以上のＣＰＵとメモリを有し、複数のＯＳを稼動させる機能を有する計算機であって、
前記複数のＯＳの各々がメモリ上に保有する第１のアドレス変換テーブルに基づいて、前記ＣＰＵが行うアドレス変換を規定する第２のアドレス変換テーブルをメモリ上に生成し、前記第１、第２のアドレス変換テーブルの対応表を用いて第１、第２のアドレス変換テーブル対を複数管理する手段、及び
前記ＯＳによる第１のアドレス変換テーブル切り替え要求に応じて前記対応表を検索し、切り替え後の第１のアドレス変換テーブルに対応する第２のアドレス変換テーブルを、前記ＣＰＵに設定する手段を有することを特徴とする計算機。
【請求項１１】
１つ以上のＣＰＵとメモリを有する計算機を用いて複数のＯＳを稼動させる制御方法であって、
前記複数のＯＳの各々がメモリ上に保有する第１のアドレス変換テーブルに基づいて、前記ＣＰＵが行うアドレス変換を規定する第２のアドレス変換テーブルをメモリ上に生成する第１手順、
前記第１、第２のアドレス変換テーブルの対応表に第１、第２のアドレス変換テーブル対を登録する第２手順、及び
前記ＯＳによる第１のアドレス変換テーブル切り替え要求に応じて前記対応表を検索し、切り替え後の第１のアドレス変換テーブルに対応する第２のアドレス変換テーブルを、前記ＣＰＵに設定する第３手順を含むことを特徴とする仮想計算機の制御方法。
【請求項１２】
前記ＯＳによる第１のアドレス変換テーブル切り替え要求時に、前記切り替え後の第１のアドレス変換テーブルに対応する第２のアドレス変換テーブルが前記対応表中に存在しない場合に、前記切り替え後の第１のアドレス変換テーブルに対応する第２のアドレス変換テーブルを生成する手順と、前記対応表に当該第１、第２のアドレス変換テーブルを記録する追加記録する手順とを更に含むことを特徴とする請求項１１に記載の仮想計算機の制御方法。
【請求項１３】
前記第２のアドレス変換テーブルを生成するにあたって該第２のアドレス変換テーブルを保持するメモリが不足した場合に、前記ＣＰＵに設定されていない第２のアドレス変換テーブルを破棄して、該第２のアドレス変換テーブルを保持するメモリを確保するとを特徴とする請求項１１に記載の仮想計算機の制御方法。
【請求項１４】
前記第２のアドレス変換テーブルに対応する、第１のアドレス変換テーブルの更新を検出する設定処理を含むことを特徴とする請求項１１に記載の仮想計算機の制御方法。
【請求項１５】
前記第1のアドレス変換テーブルの更新検出手段として、当該第1のアドレス変換テーブルを含むメモリ領域に書き込み禁止属性を設定する処理を含むことを特徴とする請求項１４に記載の仮想計算機の制御方法。
【請求項１６】
前記第２のアドレス変換テーブルに対応する第１のアドレス変換テーブルが更新される場合に、当該更新の影響を受ける第２のアドレス変換テーブルのエントリのみを更新する処理を含むことを特徴とする請求項１４に記載の仮想計算機の制御方法。
【請求項１７】
前記第２のアドレス変換テーブルに対応する第１のアドレス変換テーブルが更新される場合に、当該第２のアドレス変換テーブルを無効化するとを特徴とする請求項１４に記載の仮想計算機の制御方法。
【請求項１８】
前記第２のアドレス変換テーブルに対応する第１のアドレス変換テーブルが更新される場合に、当該更新の影響を受ける第２のアドレス変換テーブルのエントリの識別子を記録し、識別子が記録されている前記第２のアドレス変換テーブルのエントリがＣＰＵに参照される場合に、当該第２のアドレス変換テーブルのエントリを更新し、当該第２のアドレス変換テーブルのエントリの識別子を削除することを特徴とする請求項１４に記載の仮想計算機の制御方法。
【請求項１９】
前記対応表の各エントリが第１、第２のアドレス変換テーブルのアドレスを有し、前記切り替え後の第１のアドレス変換テーブルに対応する、第２のアドレス変換テーブルを検索する際に、前記対応表の中から、前記切り替え後の第１のアドレス変換テーブルのアドレスを保持するエントリを検索することを特徴とする請求項１１に記載の仮想計算機の制御方法。
【発明の詳細な説明】
【技術分野】
【０００１】
本発明は、仮想計算機システムに関し、ゲストＯＳのアドレス変換テーブル切り替え処理を高速化する技術に関する。
【背景技術】
【０００２】
サーバ台数の増加と共に運用に関する複雑さが増加しており、運用コストが問題化し、運用コストを低減する技術として複数サーバを１台にまとめるサーバ統合が注目を集めている。サーバ統合を実現する技術として、一つのコンピュータを任意の割合で論理的に分割する仮想計算機技術が知られている。仮想計算機技術では、例えば、ハイパバイザなどのファームウェア（またはミドルウェア）が、物理計算機を複数の論理区画（ＬＰＡＲ：Logical PARtition）に分割し、各ＬＰＡＲに対して計算機資源（ＣＰＵ、主記憶、Ｉ／Ｏ）を割り当て、各ＬＰＡＲ上でそれぞれＯＳを動作させる。あるいは、一つのサーバ上で一つのホストＯＳ（物理計算機を直接使用するＯＳ）を実行し、このホストＯＳ上稼動するハイパバイザが同様の分割処理を行って、複数のゲストＯＳ（ホストＯＳ上で稼動するＯＳ）を稼動させる。仮想計算機技術は、従来複数のサーバで稼動していたＯＳ及びＯＳ上で稼動するソフトウェアを、１台のサーバで稼動させることを可能にしており、サーバ統合を実現している。
【０００３】
また仮想計算機技術は、汎用機（MainFrame）等の大型計算機で用いられてきた技術であるが、近年のマイクロプロセッサの性能向上に伴いローエンドサーバおよびパーソナルコンピュータでも普及しつつある。
【０００４】
仮想計算機技術を採用したサーバ等の計算機は、ゲスト（ゲストＯＳ及び、ゲストＯＳ上で稼動するソフトウェアの総称）を稼動させる複数の仮想計算機（Virtual Machine）と、仮想計算機の制御を行う仮想計算機モニタ（Virtual Machine Monitor、以下ＶＭＭとする）とを有する。
【０００５】
仮想計算機技術によってサーバ統合を実現する上では、統合対象となる複数のゲストに、独立したメモリ空間を使用させる必要がある。ゲストＯＳが仮想計算機に行う設定と、各ゲストに独立したメモリ空間を使用させるためにＶＭＭが物理計算機に行うアドレス変換設定の例を図２に示す。
【０００６】
ＶＭＭは、ホストが所有する物理メモリ空間(ホスト物理メモリ空間２１５)を分割して、ゲスト０用メモリ空間２１７〜ゲストｎ用メモリ空間２１８を作成し、各ゲストに割り当てる。ゲスト０用メモリ空間２１７のように、各ゲストに割り当てられたホスト物理メモリ空間はアドレス０が基点とは限らないが、ゲストＯＳはアドレス０を基点とする物理メモリを前提に作られている。そこでＶＭＭは、各ゲストが想定する、アドレス０を基点とするメモリ空間(ゲスト物理メモリ空間２０５)を作成し、ゲスト物理メモリ空間２０５のアドレスを、ホスト物理メモリ空間２１５のアドレスに変換する必要がある。
【０００７】
アドレス変換に関して一般にＣＰＵ（１０−ｖ，１０−ｐ）は、高速なアドレス変換を行う機構として、変換前アドレスと変換後アドレスの対応を規定するページテーブル(以下ＰＴと略称する)の位置を保持するＰＴポインタレジスタ（６０−ｖ，６０−ｐ）と、ＰＴの部分コピーを保持するＴＬＢ(Translation Lookaside Buffer)（５０−ｖ、５０−ｐ）を有する。ＣＰＵ（１０−ｖ、１０−ｐ）はＴＬＢ（５０−ｖ、５０−ｐ）内の情報を用いて、高速なアドレス変換を行う。ゲストＯＳは仮想記憶を実現するために、本機構を使用する。
【０００８】
ゲストＯＳは、ゲスト仮想メモリ空間２０１のアドレスと、ゲスト物理メモリ−ａ（２０６）のアドレスの対応を規定するゲストＰＴ−ａ（７０−ａ）を作成して、ゲストＰＴ−ａ（７０−ａ）のアドレスを仮想計算機のＣＰＵ（１０−ｖ）が有するＰＴポイントレジスタ（６０−ｖ）に登録する。そして、ゲストＯＳ及びゲストＯＳ上で稼動するプロセスは、ゲスト仮想メモリ空間２０１のアドレスを指定してメモリ操作を行う。ゲストＯＳがゲスト物理メモリ空間２０５にアクセスしたい場合は、ゲストＰＴ−ａ（７０−ａ）に恒等変換を指定した上で、ゲスト仮想メモリ空間２０１にアクセスする。
【０００９】
上記の性質を利用してＶＭＭは、ゲストの動作に必要なアドレス変換を、ＣＰＵ（１０−ｐ）が有するＴＬＢ（５０−ｐ）に処理させために、ゲストＯＳが仮想計算機のＰＴポイントレジスタ（６０−ｖ）に登録しようとしたゲストＰＴ−ａ（７０−ａ）の内容に合わせて、ゲスト仮想メモリ空間２０１のアドレスとホスト物理メモリ−ａ（２１６）のアドレスの対応を規定するＰＴである、シャドウＰＴ−ａ（８０−ａ）を作成し、シャドウＰＴ−ａ（８０−ａ）のアドレスをＰＴポインタレジスタ（６０−ｐ）に登録する。
【００１０】
ゲストＯＳは一般に、ゲストＯＳ上で稼動するプロセス毎にゲスト仮想メモリ空間を用意する。したがってゲストＯＳは、各プロセスに対応するゲストＰＴを作成する。そしてプロセス切り替えの際に、切り替え後のプロセスに対応したゲストＰＴのアドレスをＰＴポインタレジスタに登録する。
【００１１】
シャドウＰＴの内容はゲストＰＴの内容に依存するので、ゲストＯＳがゲストＰＴアドレスの更新を行う場合、ＶＭＭはシャドウＰＴを操作してＣＰＵに適切なアドレス変換を行わせる必要がある。
【００１２】
プロセス切り替え後のゲストＰＴに合わせた、物理計算機のアドレス変換設定の例を図３に示す。ゲストがＰＴポインタレジスタ（６０−ｖ）に、ゲストＰＴ−ｂ（７０−ｂ）を代入し、ゲスト仮想メモリ空間２０１とゲスト物理メモリ−ｂ（３０６）の対応が変化したため、ＶＭＭはゲスト仮想メモリ空間２０１とホスト物理メモリ−ｂ（３１６）の対応を規定するシャドウＰＴ−ｂ（８０−ｂ）を用意し、シャドウＰＴ−ｂ（８０−ｂ）のアドレスをＰＴポイントレジスタ（６０−ｐ）に登録する。
【００１３】
シャドウＰＴ−ｂ（８０−ｂ）を用意する方法として、特開２００１−０５１９００号（特許文献１）には、ゲストＰＴアドレスの更新を検出する毎に、ＶＭＭが切り替え後のゲストＰＴ−ｂ（７０−ｂ）を参照して、シャドウＰＴ−ａ（８０−ａ）の設定を全て書き換えてシャドウＰＴ−ｂ（８０−ｂ）を作成する方式が公開されている。
【００１４】
また、米国特許出願公開第２００２／００８２８２４号（特許文献２）には、書き換えるシャドウＰＴのエントリ数を削減する方式が公開されている。当該方式では、ゲストＰＴアドレスの更新を検出する毎に、ＶＭＭがシャドウＰＴ−ａ（８０−ａ）の全エントリを無効化して、仮のシャドウＰＴ−ｂ（８０−ｂ）にする。ゲストの動作継続にシャドウＰＴ−ｂ（８０−ｂ）のエントリの有効化が必要な場合は、ＣＰＵ（１０−ｐ）が例外を発生させるので、本例外を契機にＶＭＭが、ゲストのメモリ操作に必要なシャドウＰＴ−ｂ（８０−ｂ）のエントリだけを選択的に作成する。
【００１５】
【特許文献１】特開２００１−０５１９００号
【００１６】
【特許文献２】米国特許出願公開第２００２／００８２８２４号明細書
【発明の開示】
【発明が解決しようとする課題】
【００１７】
これらの既存方式では、ゲストＰＴアドレスの更新を検出する毎にＶＭＭがシャドウＰＴの書き換えを行うため、２つのゲストＰＴが交互に使用されるような、同一ゲストＰＴが何度も使用される場合に、冗長な処理を行う。一般に、ゲストＰＴは何度も繰り返し使用されることが多いため、本冗長性はゲストＰＴアドレスの更新処理に要する時間を増大させる要因となる。
【００１８】
上記問題点を鑑み、本発明は、ゲストＰＴアドレスの更新処理に要する時間を短縮すること、すなわちゲストＰＴアドレス更新処理の高速化を課題とする。
【課題を解決するための手段】
【００１９】
ある観点に従う本発明の特徴的構成は、ＯＳがメモリ上に作成するゲストＰＴに対応して、ＶＭＭはメモリ上にシャドウＰＴを作成し、当該ゲストＰＴとシャドウＰＴの対応関係をＰＴ対応表に記録する点にある。ＯＳが複数のゲストＰＴを保持している場合は、ＶＭＭは複数のシャドウＰＴを保持する。
【００２０】
ＯＳがＰＴポインタレジスタを更新して、アドレス変換に使用するゲストＰＴのアドレスを変更する場合は、ＶＭＭがＰＴ対応表を参照し、ＰＴポインタレジスタの更新後に使用されるゲストＰＴに対応する作成済みのシャドウＰＴを検索する。該当するシャドウＰＴが存在する場合は、当該シャドウＰＴのアドレスをＰＴポインタレジスタに代入する。該当するシャドウＰＴが存在しない場合は、シャドウＰＴを保持するメモリを確保し、当該ゲストＰＴに対応するシャドウＰＴを生成し、当該ゲストＰＴとシャドウＰＴをＰＴ対応表に記録する。シャドウＰＴを保持するメモリの確保に失敗した場合は、使用されていないシャドウＰＴを破棄して、メモリ資源を解放する。
【００２１】
保持しているシャドウＰＴの内容が、ゲストＰＴの内容と対応していることを把握する手段として、ゲストＰＴのエントリ更新を検出する。ゲストＰＴのエントリ更新の検出には、ゲストＰＴエントリが存在するメモリ領域に書き込み禁止属性を設定する。ゲストＰＴエントリが更新された場合には異なる３つの対応方法があり、いずれを用いても良い。１つ目の方法は、ゲストＰＴエントリの更新を契機に、対応するシャドウＰＴエントリを更新する。２つ目の方法は、ゲストＰＴエントリの更新を契機に、対応するシャドウＰＴを無効化する。３つ目の方法は、ゲストＰＴエントリの更新を契機に、対応するシャドウＰＴエントリの識別子を記録し、識別子が記録されているシャドウＰＴエントリがＴＬＢにロードされることを契機に、当該シャドウＰＴを更新する。
【００２２】
ＰＴ対応表には、ゲストＰＴのアドレスとシャドウＰＴのアドレスを記録しておき、ゲストＰＴに対応するシャドウＰＴを探す際には、当該ゲストＰＴのアドレスを含むエントリを検索してシャドウＰＴを特定する。
【発明の効果】
【００２３】
本発明では、ゲストＰＴアドレス更新によって以前使用されたゲストＰＴが指定される場合に、当該ゲストＰＴに対応する作成済みシャドウＰＴの検索とＰＴポインタレジスタの更新のみを行うことで、ゲストＰＴアドレス更新処理を高速化する。
【実施例１】
【００２４】
＜１．ハードウェア構成＞
図４は、本発明の第１実施形態（実施例１）の仮想計算機システムを動作させる物理計算機の構成を示す。物理計算機は、１つ以上のＣＰＵ（１０−０〜１０−ｎ）を有し、これらのＣＰＵ（１０−０〜１０−ｎ）はフロントサイドバス４２５を介してノースブリッジ４２０（またはメモリコントローラ）に接続される。
【００２５】
ノースブリッジ４２０には、メモリバス４３５を介してホスト物理メモリ２１５が接続され、また、バス４４５を介してＩ／Ｏインターフェース４４０が接続される。Ｉ／Ｏインターフェース４４０はＬＡＮ４５０に接続されるネットワークアダプタ、ディスク装置４６０等に接続されるＳＣＳＩアダプタ、ＳＡＮ４７０（Storage  Area  Network）に接続されるファイバーチャネルアダプタなどで構成され、各Ｉ／Ｏデバイスに接続される。
【００２６】
ＣＰＵ（１０−０〜１０−ｎ）はノースブリッジを介してメモリにアクセスし、ノースブリッジ４２０からＩ／Ｏインターフェース４４０を介してＩ／Ｏデバイスにアクセスして所定の処理を行う。
【００２７】
なお、ノースブリッジ４２０はホスト物理メモリ２１５を制御するとともに、グラフィックコントローラを含んでコンソール４２５にも接続され、画像の表示を行うことができる。
【００２８】
ホスト物理メモリ２１５には、仮想計算機モニタ（Virtual Machine Monitor、以下ＶＭＭ）２０がロードされ、このＶＭＭ２０が実現する仮想計算機ＶＭ０〜ＶＭｎ（４０−０〜４０−ｎ）が、各ゲストＯＳ０〜ＯＳｎ（３０−０〜３０−ｎ）を実行する。また、各ゲストＯＳ（３０−０〜３０−ｎ）は仮想計算機ＶＭ０〜ＶＭｎ（４０−０〜４０−ｎ）の上で、任意の数のプロセス４１０を実行する。
【００２９】
＜２．ソフトウェア構成＞
図５は実施例１の物理計算機上で仮想計算機ＶＭ０〜ＶＭｎ（４０−０〜４０−ｎ）を実現するソフトウェア構成の主要部を示す。
【００３０】
図５において、物理計算機上では、複数のゲストＯＳ（３０−０〜３０−ｎ）を管理するＶＭＭ２０が稼動している。ＶＭＭ２０は、複数のゲストＯＳ（３０−０〜３０−ｎ）及びゲストプロセスがアクセスする計算機資源の割り当てを管理する制御ソフトウェアである。ＶＭＭ２０は、ゲストＯＳ（３０−０〜３０−ｎ）に対して物理計算機のリソースの一部を提供し、各ゲストＯＳ（３０−０〜３０−ｎ）のアドレス変換に関するデータを保持するシャドウＰＴ管理部（５０５−０〜５０５−ｎ）と、各ゲストＯＳ（３０−０〜３０−ｎ）の実行を管理する仮想計算機実行管理部（以下、ＶＭ実行管理部５０９）を有する。
【００３１】
シャドウＰＴ管理部（５０５−０〜５０５−ｎ）は、ゲストＯＳ（３０−０〜３０−ｎ）毎に用意され、それぞれが、複数のシャドウＰＴ（８０−ａ〜８０−ｙ）と、単一のＰＴ対応表（５１１−０〜５１１−ｎ）を保持する。シャドウＰＴ８０はゲスト仮想メモリ空間のアドレスとホスト物理メモリ空間のアドレスの対応を規定する表であり、各シャドウＰＴ（８０−ａ〜８０−ｙ）はゲストＯＳ（３０−０〜３０−ｎ）が保有するゲストＰＴ（７０−ａ〜７０−ｙ）と１対１で対応する。ＰＴ対応表５１１は、ゲストＰＴ（７０−ａ〜７０−ｙ）とシャドウＰＴ（８０−ａ〜８０−ｙ）の対応関係を保持する表である。
【００３２】
ＶＭ実行管理部５０９は、各仮想計算機ＶＭ０〜ＶＭｎ（４０−０〜４０−ｎ）を実現するためのメモリの領域を割り当て、ＶＭＭ２０自身を実行するためのメモリの領域を割り当てる。ＶＭ実行管理部５０９の内部には、シャドウＰＴ対応判定部５１０、シャドウＰ更新部５０３、シャドウＰＴ生成部５０４が含まれる。シャドウＰＴ対応判定部５１０は、当該ゲストＯＳ用のシャドウＰＴ管理部（５０５−０〜５０５−ｎ）に生成されたシャドウＰＴ（８０−ａ〜８０−ｙ）の中から適切なシャドウＰＴ（図３の例では８０−ｂ）を選択し、ＣＰＵ１０が有するＰＴポインタレジスタ６０に当該シャドウＰＴ（図３の例では８０―ｂ）のアドレスを登録することで、各仮想計算機ＶＭ０〜ＶＭｎ（４０−０〜４０−ｎ）に必要なアドレス変換をＣＰＵ１０に実施させる。シャドウＰＴ更新部５０３は、ゲストＰＴ（７０−ａ〜７０−ｙ）とシャドウＰＴ（８０−ａ〜８０−ｙ）の対応を壊さないように、一貫性のある更新を行う。シャドウＰＴ生成部５０４は、ゲストＯＳ（３０−０〜３０−ｎ）が使用するゲストＰＴ（図３の例では７０−ｂ）に対応する、シャドウＰＴ（図３の例では８０−ｂ）を生成する。
【００３３】
仮想計算機ＶＭ０〜ＶＭｎ（４０−０〜４０−ｎ）では、ゲストＯＳ（３０−０〜３０−ｎ）がそれぞれ稼動する。各ゲストＯＳ（３０−０〜３０−ｎ）は、ゲスト仮想アドレス空間とゲスト物理メモリ空間を対応付ける、ゲストＰＴ７０を１つ以上有する。ＶＭＭ２０及び各ゲストＯＳ（３０−０〜３０−ｎ）を実行するＣＰＵ１０は、ＴＬＢ５０を用いた高速なアドレス変換機能を有する。またＣＰＵ１０は、アドレス変換の内容を規定するＰＴの、メモリアドレスを格納するＰＴポインタレジスタ６０を有する。
【００３４】
例えば、ＣＰＵ１０のアーキテクチャがＩｎｔｅｌ社の３２ビットＣＰＵであるＩＡ−３２（または６４ビット拡張されたＣＰＵであるＥＭ６４Ｔ）の場合、ＣＰＵ１０は特権レジスタＣＲ０、ＣＲ３、ＣＲ４、ＩＡ３２＿ＥＦＥＲ等を含む。なお、上記ＰＴポインタレジスタ６０は、ＩＡ−３２（またはＥＭ６４Ｔ）において、特権レジスタＣＲ３に相当する。
【００３５】
ゲストＯＳ（３０−０〜３０−ｎ）によるゲストＰＴアドレスの更新要求５０２が発生すると、ＶＭ実行管理部５０９内のシャドウＰＴ対応判定部５１０が、ゲストＰＴ７０とシャドウＰＴ８０の対応関係を保持するＰＴ対応表（５１１−０〜５１１−ｎ）を参照し、シャドウＰＴ管理部５０５に生成したシャドウＰＴ（８０−ａ〜８０−ｙ）から、更新後のゲストＰＴ（図３の例では７０−ｂ）に対応するシャドウＰＴ（図３の例では８０−ｂ）を検索する。該当するシャドウＰＴ（図３の例では８０−ｂ）が存在する場合、ＶＭＭ２０はＰＴポインタレジスタ６０に対して、テーブル切り替え指示を送り、ＰＴポインタレジスタ６０に、選択されたシャドウＰＴ（図３の例では８０−ｂ）のアドレスをセットする。該当するシャドウＰＴ（図３の例では８０−ｂ）が存在しない場合は、シャドウＰＴ生成部５０４がシャドウＰＴ管理部５０５内にシャドウＰＴ（図３の例では８０−ｂ）を生成し、ＰＴ対応表５１１に生成したシャドウＰＴ（図３の例では８０−ｂ）とゲストＰＴ（図３の例では７０−ｂの対応関係を登録し、ＰＴポインタレジスタ６０に生成したシャドウＰＴ（図３の例では８０−ｂ）のアドレスをセットする。以降ＣＰＵ１０は、ＰＴポインタレジスタ６０にセットされたシャドウＰＴ（図３の例では８０−ｂ）に従って、ゲスト仮想メモリ空間のアドレスをゲストに割り当てられたホストメモリ空間のアドレスに変換する。
【００３６】
ゲストＯＳ（３０−０〜３０−ｎ）によるゲストＰＴエントリの更新要求５０１が発生すると、ＶＭ実行管理部５０９内のシャドウＰＴ更新部５０３が対象となるゲストＰＴ７０を更新し、ＰＴ対応表５１１を用いて当該ゲストＰＴ７０に対応するシャドウＰＴ８０を特定し、特定したシャドウＰＴ８０を当該ゲストＰＴ７０の設定に合わせて更新する。
【００３７】
後述するように、ＶＭＭ２０は、ゲストＯＳ（３０−０〜３０−ｎ）の実行開始によって最初のシャドウＰＴ８０を生成し、ゲストＯＳ（３０−０〜３０−ｎ）が終了すると、生成した全てのシャドウＰＴ８０を解放する。
【００３８】
図６はＶＭＭ２０が管理するホスト物理メモリ空間２１５の一例を示す。
【００３９】
ＶＭＭ２０は、ホスト物理メモリ空間２１５上に自身を配置するメモリ領域と、仮想計算機ＶＭ０〜ＶＭｎ（４０−０〜４０−ｎ）が使用するメモリ領域を割り当てる。例えば図６のように、ＶＭＭ２０は、自身にアドレスＡＤ０〜ＡＤ１を割り当て、仮想計算機ＶＭ０にアドレスＡＤ１〜ＡＤ２を、仮想計算機ＶＭｎにアドレスＡＤ３〜ＡＤ４を割り当てる。各仮想計算機ＶＭ０〜ＶＭｎ（４０−０〜４０−ｎ）のメモリ領域には、各ゲストＯＳ（３０−０〜３０−ｎ）が生成したゲストＰＴ７０が含まれる。ＶＭＭ２０が使用するメモリ領域には、ＶＭ実行管理部５０９、シャドウＰＴ管理部５０５が割り当てられる。シャドウＰＴ管理部５０５は、仮想計算機ＶＭ０〜ＶＭｎ（４０−０〜４０−ｎ）毎に用意され、各シャドウＰＴ管理部５０５は、ＰＴ管理表５１１と、１つ以上のシャドウＰＴ８０を保持する。
【００４０】
シャドウＰＴ８０とゲストＰＴ７０の構造は同一であり、ＣＰＵ１０がＥＭ６４Ｔである場合には図７に示すように構成される。ＰＴは、ＰＭＬ４(Page Map Level 4)テーブル１００１、ＰＤＰ(Page Directory Pointer)テーブル１００２、ＰＤＥ(Page Directory Entry)テーブル１００３、ＰＴＥ(Page Table Entry)テーブル１００４の４種のテーブルをポインタで接続した形態を有する。ＰＭＬ４テーブル１００１は、仮想アドレス空間と物理アドレス空間で変換を行うページ変換階層内でＰＤＰテーブル１００２の上位に位置し、各エントリがＰＤＰテーブル１００２を指す。ＰＤＰテーブル１００２は、ＰＤＥテーブル１００３の上位に位置し、各エントリがＰＤＥテーブル１００３を指す。ＰＤＥテーブル１００３は、各エントリがＰＴＥテーブル１００４を指す。そして、ＰＴＥテーブル１００４は各エントリが物理メモリのページを指す。尚、特権レジスタＣＲ４．ＰＳＥを用いて、ＰＳＥ(Page Size Extension)機能を利用する場合は、ＰＤＥテーブル１００３のエントリ（ＰＤＥ）のＰＳビットをセットすると、ＰＤＥが直接、物理メモリのページを指す。
【００４１】
ＥＭ６４ＴのＰＴに関する、各エントリのフォーマットを図８に示す。各エントリには、下位のテーブルまたはページの先頭を指すアドレスフィールド（１１１１、１１１２、１１１３、１１１４、１１１５）が存在する。また各エントリには、エントリの有効／無効を規定するＰビット（１１１６、１１１７、１１１８、１１１９、１１２０）が存在し、Ｐビットを０にすると当該エントリの情報がＴＬＢに読み込まれる際に例外が発生する。ＰＭＬ４（１１０１）、ＰＤＰ（１１０２）、ＰＴＥ（１１０４）のフォーマットは１種類であり、ＰＤＥ（１１０３）に関しては特権レジスタＣＲ４．ＰＳＥとＰＳビット（１１２１、１１２２）の組み合わせによって２種類のフォーマット（１１０３−０、１１０３−１）が存在する。ＩＡ３２のＰＴに関しても、図８と同様のフォーマットが規定されている。
【００４２】
ＩＡ３２（またはＥＭ６４Ｔ）をサポートするＣＰＵ１０には、ＰＴの構造（以下、ＰＴフォーマット）として、４種類が規定されている。各フォーマットは図７のＰＴフォーマットを基準に説明すると、（１）ＰＴポインタレジスタ６０がＰＭＬ４テーブル１００１を指す、図７のＰＴフォーマット、（２）ＰＴポインタレジスタ６０がＰＤＰテーブル１００２を指す、図７を簡略化したＰＴフォーマット、（３）ＰＴポインタレジスタ６０がＰＤＥテーブル１００３を指す、図７を簡略化したＰＴフォーマット、（４）ＰＴポインタレジスタの設定値と無関係に、仮想アドレス＝物理アドレスが常に成立するＰＴフォーマット、である。（１）〜（４）のＰＴフォーマットは、特権レジスタＣＲ０．ＰＧ，ＣＲ４．ＰＡＥ，ＩＡ３２＿ＥＦＥＲ．ＬＭＥの組み合わせによって規定される。
【００４３】
シャドウＰＴ８０とゲストＰＴ７０の設定は、アドレスフィールドとＰビットのみが異なる。ＶＭＭ２０は、仮想計算機（４０−０〜４０−ｎ）に割り当てたメモリ空間に合わせて、シャドウＰＴ８０のアドレスフィールドを設定する。またＶＭＭ２０は、シャドウＰＴ８０と対応付けられたゲストＰＴ７０に関して、ゲストによるゲストＰＴエントリのアクセスを検出するためにするために、ゲストＰＴエントリのアクセスに使用されるシャドウＰＴ８０のＰビットを０に設定し、ライトプロテクトを行う。尚、ライトプロテクトを多用すると実行速度が低下するため、不要なライトプロテクトは行わない。
【００４４】
ＩＡ３２（またはＥＭ６４Ｔ）のＰＴでは、ＰＭＬ４（１１０１）、ＰＤＰ（１１０２）、ＰＤＥ（１１０３）がＰビット＝０（無効）の場合、当該エントリからポイントされる下位のテーブルは参照されないため、当該下位テーブルは不要になる。ＶＭＭは、可能な限り多くのシャドウＰＴ８０をシャドウＰＴ管理部５０５に保持するために、不要な下位テーブルをシャドウＰＴ８０の中に作らないことで、シャドウＰＴ８０用に確保するメモリの量を節約する。ＶＭＭ２０は、ゲストがゲストＰＴ７０内のＰＭＬ４（１１０１）、ＰＤＰ（１１０２）、ＰＤＥ（１１０３）のＰビットを更新する場合に下位テーブルの必要性を再判定し、必要になればシャドウＰＴに下位テーブルを追加し、不要になればシャドウＰＴから下位テーブルを解放する。
【００４５】
ゲストＰＴ７０とシャドウＰＴ８０の対応を記録するＰＴ対応表５１１の構成を、図９に示す。ＰＴ対応表５１１の各エントリには、エントリの有効性を意味するＶａｌｉｄビット１８０１と、ゲストがＰＴポインタレジスタ（６０−ｖ）に指定したゲストＰＴアドレス１８０３と、ＶＭＭ２０がＰＴポインタレジスタ（６０−ｐ）に指定するシャドウＰＴアドレス１８０４を記録する。ゲストがゲストＰＴアドレスを更新する際に、ＶＭＭ２０はＰＴ対応表５１１を用いて、更新後のゲストＰＴアドレスに対応するシャドウＰＴアドレスを検索する。
【００４６】
＜３．ＶＭＭによるシャドウＰＴ操作＞
次に、ゲストの動作に合わせてＶＭＭがシャドウＰＴ操作の一例について、以下、フローチャートを参照しながら説明する。
【００４７】
＜３．１．ＶＭＭによるシャドウＰＴ操作の概要＞
図１０は、ＶＭＭ２０上でゲストを実行するときの全体的な処理を示すフローチャートで、図中破線の右側はＶＭＭ２０が行う処理であり、同じく破線の左側はゲストが行う処理である。
【００４８】
Ｓ８０１では、ＶＭＭがゲストの実行開始要求を受け付けると、図６で示したように、実行する仮想計算機の初期状態に合わせたシャドウＰＴ８０を、ＶＭＭ２０のシャドウＰＴ管理部５０５に生成する。そして、ＶＭＭ２０は、ＣＰＵ１０のＰＴポインタレジスタ６０に、シャドウＰＴのアドレスを書き込んだ後、制御をゲストＯＳに渡す。尚、ＣＰＵ１０がＩＡ３２（及びＥＭ６４Ｔ）の場合は、ＣＰＵの初期状態がＰＴを一切使用しない状態（ＰＴ無効状態）であるため、ＶＭＭ２０はＰＴ無効状態に合わせたシャドウＰＴ８０を生成してＰＴポインタレジスタ６０に登録する。
【００４９】
Ｓ８０２では、ＣＰＵ１０がゲストを実行する。
Ｓ８０３ではゲスト側でＶＭＭ２０の介入を必要とするイベントが発生したか否かを判定する。すなわち、割り込みや例外イベント、ゲストの終了などＶＭＭ２０の介入が必要なイベントがあればＳ８０４に進んで、制御をＶＭＭ２０に返す。ＶＭＭ２０の介入が不要であればＳ８０２へ戻って、ゲスト側の処理を実行する。
【００５０】
Ｓ８０４では、ＶＭＭ２０が、ゲストＰＴアドレスが更新されたか否かを検出する。この検出には、ゲストを非特権レベルで稼動させ、ゲストが特権レジスタであるＰＴポインタレジスタへの書き込みを行う際に発生する、例外を利用する。ＶＭＭ２０はこの例外を検知したときに、仮想計算機の特権レベルを参照して特権レジスタ更新の有効性を判定し、有効である場合のみＳ８０５に進む。
【００５１】
Ｓ８０５では、ゲストＰＴアドレスの変更要求を受けて、変更後のゲストＰＴ７０に対応するシャドウＰＴ８０を、ＶＭＭ２０が保持するＰＴ対応表５１１を用いて検索する。該当するシャドウＰＴ８０が存在する場合は、該当するシャドウＰＴ８０のアドレスをＰＴポインタレジスタ６０に登録する。該当するシャドウＰＴ８０が存在しなければ、変更後のゲストＰＴ７０に対応するシャドウＰＴ８０を生成し、生成したシャドウＰＴ８０と変更後のゲストＰＴ７０の関係をＰＴ対応表５１１に記録し、生成したシャドウＰＴ８０のアドレスをＰＴポインタレジスタ６０に登録する。
【００５２】
次にＳ８０６では、ＶＭＭ２０が、ゲストＰＴフォーマットが更新されたか否かを検出する。ＰＴフォーマットを規定するレジスタ（ＰＴフォーマットレジスタ）は特権レジスタであるため、この検出には、ゲストを非特権レベルで稼動させ、ゲストが特権レジスタであるＰＴフォーマットレジスタへの書き込みを行う際に発生する、例外を利用する。ＶＭＭ２０はこの例外を検知したときに、仮想計算機の特権レベルを参照して特権レジスタ更新の有効性を判定し、有効な場合のみＳ８０７に進む。
【００５３】
Ｓ８０７では、ゲストＰＴフォーマットの変更要求を受けて、ＶＭＭ２０が当該ゲスト用に保有するシャドウＰＴ８０を全て解放する。続いてＳ８１７では、変更後のゲストＰＴフォーマットに合わせたシャドウＰＴ８０を生成し、生成したシャドウＰＴ８０と変更後のゲストＰＴ７０の関係をＰＴ対応表５１１に記録し、生成したシャドウＰＴ８０のアドレスをＰＴポインタレジスタ６０に登録する。次にＳ８０８では、ＶＭＭ２０が、ゲストＰＴエントリの設定値が更新されたか否かを検出する。この検出には、上述のライトプロテクトが施されていることに起因して、ゲストがメモリ中のゲストＰＴ７０に書き込みを行う際に発生する、例外を利用する。ＶＭＭはこの例外を検知したときに、ゲストＰＴ７０の設定を参照して書き込みの有効性を判定し、有効である場合のみＳ８０９に進む。尚、Ｉ／Ｏデバイスが行うＤＭＡ(Direct Memory Access)転送によってゲストＰＴ７０が変更されることも有り得るので、ＶＭＭ２０は、ゲストがＩ／Ｏデバイスに対して行うＤＭＡ転送要求の検出を行い、ＤＭＡ転送要求が検出された場合はＳ８０９に進む。
【００５４】
Ｓ８０９では、ゲストＰＴエントリの変更要求を受けて、ＶＭＭ２０が当該ゲストＰＴエントリ更新の影響を受けるシャドウＰＴエントリを特定し、影響を受けるシャドウＰＴエントリの更新を行う。ただし、ＰＴポインタレジスタ６０に対する登録を解除されているゲストＰＴ７０（待機中ゲストＰＴ）のエントリが更新される場合は、対応するシャドウＰＴ８０のエントリを更新せずに、ＰＴ対応表５１１の該当エントリを無効化して、対応するシャドウＰＴ８０自体を無効化しても良い。
【００５５】
次にＳ８１０では、ゲストによる仮想計算機のシャットダウン（ゲストの終了）要求の有無をＶＭＭ２０が判定する。ゲストが終了した場合にはＳ８１１に進み、ゲストの終了要求が発生していない場合はＳ８０２へ進む。Ｓ８１１では、当該ゲスト用に保持するシャドウＰＴ８０を全て解放してから、仮想計算機を停止させる（ゲスト実行終了）。
【００５６】
上記処理によりＶＭＭ２０は、ゲストの実行開始から終了までの間、ゲストＰＴ７０に対応したシャドウＰＴ８０がＣＰＵ１０に登録されている状態を保ち続け、ゲストに必要なアドレス変換をＣＰＵ１０に実施させることができる。
【００５７】
＜３．２．シャドウＰＴの初期化処理＞
上記図１０のＳ８０１で行うシャドウＰＴ初期化に関して、図１１を用いて説明する。
【００５８】
Ｓ９０１では、当該ゲストに割り当てられたＰＴ対応表５１１を初期化する。具体的には、当該ＰＴ対応表５１１の全エントリに関してＶａｌｉｄビットをリセットする。Ｓ９０２では、ＶＭＭ２０がゲスト毎に確保するシャドウＰＴ管理部５０５から、ゲスト開始時用のシャドウＰＴ８０を保持するためのメモリを確保する。Ｓ９０３では、ゲスト開始時のゲストＰＴ７０に対応するシャドウＰＴ８０を生成する。ＣＰＵ１０がＩＡ３２（又はＥＭ６４Ｔ）の場合は、電源投入直後のＣＰＵ１０はＰＴ無効状態であり、ゲストＰＴ７０は無効化されている。ＰＴ無効状態のＣＰＵ１０は、ゲストＰＴ７０によるアドレス変換設定を無変換（ゲスト仮想アドレスとゲスト物理アドレスが等しい）にした場合と同じ動作をする。したがってＶＭＭ２０は、無変換設定のゲストＰＴ７０に対応するシャドウＰＴ８０を生成する。Ｓ９０４では、生成したシャドウＰＴ８０のアドレスを、ＣＰＵ１０が有するＰＴポイントレジスタ６０に代入することで、当該シャドウＰＴ８０に基づいたＣＰＵ１０によるアドレス変換を有効化する。また、生成したシャドウＰＴ８０のアドレスとゲストＰＴ７０のアドレスをＰＴ対応表５１１へ記録する。
【００５９】
＜３．３．シャドウＰＴの検索・登録処理＞
上記図１０のＳ８０５で行うシャドウＰＴ検索・登録に関して、図１を用いて説明する。
【００６０】
Ｓ１０１では、ゲストＰＴアドレスの更新に対応して、ＰＴ対応表５１１の中から、更新後のゲストＰＴアドレスを含む有効なエントリを検索する。Ｓ１０２では、検索の結果に応じて、該当エントリが存在する場合はＳ１０９へ、存在しない場合はＳ１０３へ進む。Ｓ１０９では、該当エントリに記録されているシャドウＰＴ８０のアドレスを、ＣＰＵ１０が有するＰＴポインタレジスタ６０に代入し、変更後のゲストＰＴ７０に応じたアドレス変換を、ＣＰＵ１０に実施させる。Ｓ１０３では、当該ゲスト用のシャドウＰＴ管理部５０５の中から、新規シャドウＰＴ８０を保持するためのメモリの確保を試みる。Ｓ１０４では、メモリ確保の結果に応じて、メモリ確保に成功した場合はＳ１０７へ、メモリ確保に失敗した場合はＳ１０５へ進む。Ｓ１０５では、どのＣＰＵ（１０−０〜１０−ｎ）にも登録されていない、つまりどのＰＴポインタレジスタ６０にも参照されていないシャドウＰＴ８０を選択する。Ｓ１０６では、ＰＴ対応表の、選択されたシャドウＰＴ８０に関するエントリのＶａｌｉｄビットをリセットして無効化し、選択されたシャドウＰＴ８０の解放を行って空きメモリを増やす。その後Ｓ１０３へ進み、再度メモリ確保を試みる。Ｓ１０７では、更新後のゲストＰＴ７０に応じたシャドウＰＴ８０を生成し、更新後のゲストＰＴアドレスと生成したシャドウＰＴ８０のアドレスを、ＰＴ対応表５１１に記録する。そして生成したシャドウＰＴ８０のアドレスを、ＣＰＵ１０が有するＰＴポインタレジスタ６０に代入し、変更後のゲストＰＴ７０に応じたアドレス変換を、ＣＰＵ１０に実施させる。
【００６１】
＜３．４．シャドウＰＴの生成処理＞
上記図１のＳ１０７、及び上記図１１のＳ９０２で行うシャドウＰＴの生成に関して、図１２を用いて説明する。
【００６２】
Ｓ１３０１では、シャドウＰＴ８０用に確保したメモリに、シャドウＰＴエントリを設定する。シャドウＰＴのエントリは、ゲストＰＴ７０で規定されたゲスト仮想メモリ空間のアドレスとゲスト物理メモリ空間のアドレスの対応を参照し、ゲスト仮想メモリ空間のアドレスとホスト物理メモリ空間のアドレスを対応付けるように設定する。ＣＰＵ１０がＩＡ３２（又はＥＭ６４Ｔ）の場合は、ゲストＰＴ７０はポインタで接続された多段のテーブルの集合である。そのためシャドウＰＴ８０もポインタで接続された多段のテーブルの集合となる。尚、ゲストがＰＴ無効状態の場合は、ゲストＰＴ７０がアドレス無変換設定である場合の動作をＣＰＵ１０に実施させるために、ＶＭＭ２０は、無変換ゲストＰＴに対応するシャドウＰＴ８０を生成する。
【００６３】
Ｓ１３０２では、ＰＴ対応表５１１にゲストＰＴ７０と生成したシャドウＰＴ８０の対応を記録する。具体的には、Ｖａｌｉｄビットをセットし、生成したシャドウＰＴ８０のアドレスとゲストＰＴ７０のアドレスを記録する。ただしゲストがＰＴ無効状態の場合は、ゲストＰＴアドレスの代わりに０を記録する。
【００６４】
Ｓ１３０３では、ゲストがＰＴ無効状態であるかを判定し、ＰＴが有効である（ＰＴ無効状態でない）場合のみＳ１３０４へ進む。
【００６５】
Ｓ１３０４では、ゲストＰＴエントリに対するゲストの書き込みを検出するために、全てのゲストＰＴエントリに対してライトプロテクトを実施する。具体的には、ゲストＰＴエントリを含む全てのページに関して、ＶＭＭ２０がシャドウＰＴエントリのＰビットをリセットすることで、ゲストＰＴエントリに対するゲストの書き込みを禁止する。本設定により、ゲストがゲストＰＴエントリへの書き込みを試みると例外が発生するため、本例外を受けるＶＭＭ２０は、ゲストＰＴエントリの更新を検出可能となる。
【００６６】
Ｓ１３０５では、生成したシャドウＰＴ８０のアドレスを、ＣＰＵ１０が有するＰＴポインタレジスタ６０に代入し、ゲストＰＴ７０に応じたアドレス変換を、ＣＰＵ１０に実施させる。
【００６７】
＜３．５．シャドウＰＴの解放処理＞
上記図１のＳ１０５で行うシャドウＰＴの解放に関して、図１３を用いて説明する。
【００６８】
Ｓ１４０１では、解放対象となるシャドウＰＴ８０がＰＴ有効状態用のシャドウＰＴであったか否かを判定し、ＰＴ有効状態用のシャドウＰＴの場合のみ、Ｓ１４０５へ進む。本判定は、ＣＰＵ１０がＩＡ３２（又はＥＭ６４Ｔ）の場合には、特権レジスタＣＲ０のＰＧビットに対するゲスト設定値を参照して行い、設定値が１である場合のみ、ＰＴ有効状態である。
【００６９】
Ｓ１４０２では、解放対象となるシャドウＰＴ８０に対応するゲストＰＴ７０を求め、当該ゲストＰＴ７０を含むページに設定された不要なライトプロテクトを解除する。不要なライトプロテクトとは、（１）ゲストＰＴで指示されたライトプロテクト、（２）ＶＭＭが保持するシャドウＰＴに対応するゲストＰＴのエントリを含むページに設定されるライトプロテクト、のいずれにも該当しないライトプロテクトである。ＶＭＭ２０は、解放対象となるシャドウＰＴ８０に対応するゲストＰＴ７０のエントリを含む全てのページに関して、ゲストが当該ページにライトプロテクトを設定しておらず、当該ページに当該ゲストＰＴエントリ以外のゲストＰＴエントリが含まれない場合に限って、当該ページに関するシャドウＰＴエントリの書き込み許可フラグをセットし、不要なライトプロテクトを解除する。
【００７０】
Ｓ１４０３では、解放対象となるシャドウＰＴのアドレスを保持するＰＴ対応表５１１のエントリを無効化し、解放されたシャドウＰＴ８０が再利用されることを防ぐ。
【００７１】
Ｓ１４０４では、解放対象となるシャドウＰＴ８０が使用していたメモリ領域を解放し、当該メモリ領域を当該ゲスト用のシャドウＰＴ保持用に再利用可能とする。
【００７２】
＜３．６．シャドウＰＴエントリの更新処理＞
上記図１０のＳ８０９で行うシャドウＰＴエントリの更新に関して、図１４を用いて説明する。
Ｓ１６０１では、更新されるシャドウＰＴエントリに対応するシャドウＰＴエントリを特定する。
【００７３】
Ｓ１６０２では、当該シャドウＰＴエントリを含むシャドウＰＴが、ＣＰＵ１０が有するＰＴポインタレジスタ６０に設定されているか判定し、設定されている場合はＳ１６１３へ、設定されていない場合はＳ１６１１へ進む。
【００７４】
Ｓ１６０３では、ゲストＰＴエントリの追加を判定する。本ステップでは、ＣＰＵ１０がＩＡ３２（又はＥＭ６４Ｔ）の場合は、ＰビットやＰＳビットの変化に伴うゲストＰＴエントリ数の増加を判定する。ゲストＰＭＬ４（１１０１）、またはゲストＰＤＰ（１１０２）、またはゲストＰＤＥ（１１０３）のＰビットが０から１に変化すると、各エントリにポイントされる下位のテーブルが有効になるため、ゲストＰＴエントリの数が増加する。また、ＣＲ４．ＰＳＥが１の場合はＰＤＥ（１１０３）のＰＳビットが１から０に変化すると、ＰＤＥ（１１０３）がＰＴＥテーブル（１００４）をポイントするようになるため、ゲストＰＴエントリの数が増加する。
【００７５】
Ｓ１６２０では、当該ゲスト用のシャドウＰＴ管理部５０５から、シャドウＰＴ８０にエントリを追加するためのメモリ確保を試みる。
【００７６】
Ｓ１０４〜Ｓ１０６は、図１のＳ１０４〜Ｓ１０６と同じ処理であり、空きメモリを増やすために使用されていないシャドウＰＴの解放を行う。
【００７７】
Ｓ１６０４では、追加されたゲストＰＴエントリに対応するシャドウＰＴエントリを設定する。Ｓ１６０５では、追加されたゲストＰＴエントリを含むページに関連するシャドウＰＴエントリの書き込み許可ビットをリセットし、ゲストＰＴエントリに対するライトプロテクトを実施する。Ｓ１６０６では、ゲストＰＴエントリの削除を判定する。本ステップでは、ＣＰＵ１０がＩＡ３２（又はＥＭ６４Ｔ）の場合は、ＰビットやＰＳビットの変化に伴うゲストＰＴエントリ数の減少を判定する。ゲストＰＭＬ４（１１０１）、またはゲストＰＤＰ（１１０２）、またはゲストＰＤＥ（１１０３）のＰビットが１から０に変化すると、各エントリにポイントされる下位のテーブルが無効になるため、ゲストＰＴエントリの数が減少する。また、ＣＲ４．ＰＳＥが１の場合はＰＤＥ（１１０３）のＰＳビットが０から１に変化すると、ＰＤＥ（１１０３）がＰＴＥテーブル（１００４）をポイントしなくなるため、ゲストＰＴエントリの数が減少する。
【００７８】
Ｓ１６０７では、不要になったシャドウＰＴ内のテーブルを解放し、当該メモリ領域を再利用可能にする。Ｓ１６０８では、削除されたゲストＰＴエントリに不要なライトプロテクトが設定されている場合に、これを解除する。ＶＭＭ２０は、削除されたゲストＰＴのエントリが存在するページに関して、ゲストが当該ページにライトプロテクトを設定しておらず、当該ページに他のゲストＰＴエントリが存在しない場合に限って、当該ページに関するシャドウＰＴエントリの書き込み許可フラグをセットし、不要なライトプロテクトを解除する。Ｓ１６０９では、更新されるゲストＰＴエントリに対応するシャドウＰＴエントリを、更新後のゲストＰＴエントリの内容に合わせて更新する。
【００７９】
Ｓ１６１０では、ゲストＰＴエントリの更新要求に基づいて、ＶＭＭ２０がゲストＰＴエントリの更新を代行する。本ステップは、ゲストＰＴエントリがゲストからライトプロテクトされており、ＶＭＭ２０のみが更新可能であるために行う処理である。Ｓ１６１１では、当該シャドウＰＴエントリを含むシャドウＰＴの解放を行い、ＰＴ対応表の当該シャドウＰＴに関するエントリを無効化する。本処理により、旧内容を保持したシャドウＰＴが再利用されることを防ぐ。
＜４．まとめ＞
以上に示した実施例１によれば、作成したシャドウＰＴを再利用することで、ゲストＰＴが繰り返し使用される場合に、シャドウＰＴの設定処理を省略できる。一般に、ゲストＰＴ切り替えの大多数は、以前使われたことがあるゲストＰＴへの切り替えであるため、本実施形態によって、ゲストＰＴの切り替えに起因する処理から冗長性が大幅に削減され、ゲストＰＴアドレス更新処理を高速化することができる。
【実施例２】
【００８０】
本発明の実施例２では、実施例１のＰＴ対応表を拡張して、シャドウＰＴ管理部にＰＴフォーマットの異なる複数のシャドウＰＴを保持可能にする。以下に添付図面に基づいて実施例１との違いを中心に説明する。
【００８１】
＜１．ハードウェア構成＞
実施例２のハードウェア構成は図４に示すとおりであり、つまり、実施例１のハードウエア構成と同一である。
【００８２】
＜２．ソフトウェア構成＞
ソフトウェア構成は、ゲストＰＴ７０とシャドウＰＴ８０の対応を記録するＰＴ対応表の構成のみが実施例１と異なる。その実施例２に特有のＰＴ対応表５１１の構成を、図１５に示す。ＰＴ対応表５１１の各エントリには、エントリの有効性を意味するＶａｌｉｄビット１８０１と、ゲストＰＴフォーマットの識別子１８５２と、ゲストがＰＴポインタレジスタ（６０−ｖ）に指定したゲストＰＴアドレス１８０３と、ＶＭＭ２０がＰＴポインタレジスタ（６０−ｐ）に指定するシャドウＰＴアドレス１８０４を記録する。ゲストがゲストＰＴフォーマット及びゲストＰＴアドレスを更新する際に、ＶＭＭはＰＴ対応表５１１を用いて、更新後のゲストＰＴフォーマット１８５２とゲストＰＴアドレスに１８０３対応するシャドウＰＴアドレス１８０４を検索する。
【００８３】
＜３．ＶＭＭによるシャドウＰＴ操作＞
＜３．１．ＶＭＭによるシャドウＰＴ操作の概要＞
図１６は、ＶＭＭ２０上でゲストを実行するときの全体的な処理を示すフローチャートで、図中破線の右側はＶＭＭ２０が行う処理であり、同じく破線の左側はゲストが行う処理である。これらの処理のなかで、ゲストＰＴフォーマットの更新を検出した後の処理のみが図１０に示す実施例１のフローチェーと異なっており、ゲストＰＴフォーマットの更新を検出した場合はＳ８５７へ進む。
【００８４】
Ｓ８５７では、ゲストＰＴフォーマットの変更要求を受けて、変更後のゲストＰＴ７０に対応するシャドウＰＴ８０を、ＶＭＭ２０が保持するＰＴ対応表５１１を用いて検索する。該当するシャドウＰＴ８０が存在する場合は、該当するシャドウＰＴ８０のアドレスをＰＴポインタレジスタ６０に登録する。該当するシャドウＰＴ８０が存在しなければ、変更後のゲストＰＴ７０に対応するシャドウＰＴ８０を生成し、生成したシャドウＰＴ８０と変更後のゲストＰＴ７０の関係をＰＴ対応表５１１に記録し、生成したシャドウＰＴ８０のアドレスをＰＴポインタレジスタ６０に登録する。
【００８５】
＜３．２．シャドウＰＴの初期化処理＞
シャドウＰＴの初期化処理は、図１１に示すとおりであり、実施例１と同一である。
【００８６】
＜３．３．シャドウＰＴの検索・登録処理＞
上記図１６のＳ８０５及びＳ８５７で行うシャドウＰＴ検索・登録に関して、図１７を用いて説明する。図１７ではフローチャート開始直後のＳ１５１のみが、実施例１のシャドウＰＴ検索・登録のフロー（図１）と異なる。
【００８７】
Ｓ１５１では、ゲストＰＴアドレスの更新に対応して、ＰＴ対応表５１１の中から、更新後のゲストＰＴフォーマット及びゲストＰＴアドレスを含む有効なエントリを検索する。該当するエントリが存在する場合は実施例１と同様にＳ１０９に進み、更新後のゲストＰＴに対応するシャドウＰＴをＣＰＵに登録する。該当するエントリが存在しない場合は実施例１と同様にＳ１０３に進み、シャドウＰＴの生成と登録を行う。
【００８８】
＜３．４．シャドウＰＴの生成処理＞
上記図１７のＳ１０７、及び上記図１１のＳ９０２で行うシャドウＰＴの生成に関して、図１８を用いて説明する。図１８では、ＰＴ対応表５１１を更新するＳ１３５２のみが図１２で示した実施例１のシャドウ生成のフローと異なる。
【００８９】
Ｓ１３５２では、ＰＴ対応表５１１にゲストＰＴ７０と生成したシャドウＰＴ８０の対応を記録する。具体的には、Ｖａｌｉｄビットをセットし、生成したシャドウＰＴのアドレスとゲストＰＴのフォーマット及びゲストＰＴのアドレスを記録する。ただしゲストがＰＴ無効状態の場合は、ゲストＰＴアドレスの代わりに０を記録する。
【００９０】
＜３．５．シャドウＰＴの解放処理＞
シャドウＰＴの解放処理に関するフローチャートは、図１３に示すとおりであり、つまり解放処理は実施例１と同一である。ただし、Ｓ１４０１の処理に関してのみ若干の違いがあるため説明する。
【００９１】
Ｓ１４０１では、解放対象となるシャドウＰＴ８０がＰＴ有効状態用のシャドウＰＴであったか否かを判定し、ＰＴ有効状態用のシャドウＰＴの場合のみ、Ｓ１４０５へ進む。本判定は、ＰＴ対応表５１１に記録されたＰＴフォーマット識別子を参照して行う。
【００９２】
＜３．６．シャドウＰＴエントリの更新処理＞
シャドウＰＴエントリの更新処理は、図１４に示すとおりであり、つまり実施例１と同一である。
【００９３】
＜４．まとめ＞
以上に説明した実施例２によれば、ゲストのＰＴフォーマットが変化する場合でも、作成したシャドウＰＴを再利用することができるため、ゲストＰＴアドレス更新処理を高速化することができる。
【実施例３】
【００９４】
実施例３では、ＰＴ対応表を有するＣＰＵに適用したものである。このＰＴ対応表を有するＣＰＵとしては、ＶＴ−ｘ(Intel Virtualization Technology for IA-32 Processors)機能をサポートするＣＰＵを用いる。以下に図面を参照して、実施例１との違いを中心に説明する。
【００９５】
＜１．ハードウェア構成＞
ハードウェア構成は図４に示すとおりであり、つまり実施例１と同一であるが、ＣＰＵ１０はＶＴ−ｘ機能をサポートするＣＰＵに限定される。
【００９６】
＜２．ソフトウェア構成＞
ＶＴ−ｘ機能により、ゲストＰＴアドレス更新処理の一部がＣＰＵ１０によって処理されるため、ソフトウェア構成としては、ゲストＰＴアドレス更新処理に関わるモジュールのみが実施例１と異なる。
【００９７】
ゲストＰＴアドレス更新処理を、図１９を用いて説明する。
ＶＴ−ｘ機能をサポートするＣＰＵは、４エントリのＰＴ対応表６１３を有しており、本ＰＴ対応表６１３を用いてゲストＰＴ７０に対応するシャドウＰＴ８０を検索する、シャドウＰＴ対応判定支援部６１２を有する。
【００９８】
ゲストがゲストＰＴアドレス更新要求５０２を発すると、ＣＰＵ１０内のシャドウＰＴ対応判定支援部６１２が、ＣＰＵ１０内のＰＴ対応表６１３を用いて、更新後のゲストＰＴ７０に対応するシャドウＰＴ８０を検索する。該当するシャドウＰＴ８０が存在する場合は、ＣＰＵ１０が、ＰＴポインタレジスタ６０に該当するシャドウＰＴ８０のアドレスを代入する。該当するシャドウＰＴ８０が存在しない場合は、ＣＰＵ１０が、ＶＭＭ２０内のシャドウＰＴ対応判定部５１０にゲストＰＴアドレス更新要求５０２を伝え、以降の処理をＶＭＭ２０に委ねる。要求を受けたＶＭＭ２０は実施例１と同様に、更新後のゲストＰＴ７０に対応するシャドウＰＴ８０の検索・生成・登録を行う。
【００９９】
＜３．ＶＭＭによるシャドウＰＴ操作＞
次に、実施例３におけるゲストの動作に合わせたＶＭＭがシャドウＰＴ操作の一例について説明する。
【０１００】
＜３．１．ＶＭＭによるシャドウＰＴ操作の概要＞
シャドウＰＴ操作の概要は、図１０に示すとおりであり、つまり実施例１と同一である。
【０１０１】
＜３．２．シャドウＰＴの初期化処理＞
シャドウＰＴの初期化処理は、図１１に示すとおりであり、つまり実施例１と同一である。
【０１０２】
＜３．３．シャドウＰＴの検索・登録処理＞
シャドウＰＴの検索・登録処理は、図１７に示すとおりであり、つまり実施例１と同一である。
【０１０３】
＜３．４．シャドウＰＴの生成処理＞
シャドウＰＴの生成処理に関するフローチャートは、図１２に示すとおりであり、つまり実施例１と同一である。ただし、Ｓ１３０２の処理の内容に関してのみ若干の違いがあるため説明する。
【０１０４】
実施例３のシャドウＰＴ生成では、Ｓ１３０２にて、ＶＭＭ内のＰＴ対応表５１１に加えてＣＰＵ１０のＰＴ対応表６１３にも、ゲストＰＴ７０と生成したシャドウＰＴ８０の対応を記録する。Ｖａｌｉｄビットをセットし、生成したシャドウＰＴのアドレスとゲストＰＴのアドレスを記録する点は実施例１と同様である。ゲストがＰＴ無効状態の場合は、ゲストＰＴアドレスの代わりに０を記録するのも実施例１と同様である。
【０１０５】
＜３．５．シャドウＰＴの解放処理＞
シャドウＰＴの解放処理に関するフローチャートは、図１３に示すとおりであり、つまり実施例１と同一である。ただし、Ｓ１４０３の処理に関してのみ若干の違いがあるため説明する。
【０１０６】
Ｓ１４０３では、解放対象となるシャドウＰＴのアドレスを保持する、ＶＭＭ内のＰＴ対応表５１１及びＣＰＵ１０のＰＴ対応表６１３のエントリを無効化し、解放されたシャドウＰＴ８０が再利用されることを防ぐ。
【０１０７】
＜３．６．シャドウＰＴエントリの更新処理＞
シャドウＰＴエントリの更新処理は、図１４に示すとおりであり、つまり実施例１と同一である。
【０１０８】
＜４．まとめ＞
以上に示した実施形態によれば、ＶＴ−ｘ機能を利用してゲストＰＴアドレス更新処理を高速化することができる。
【実施例４】
【０１０９】
実施例４は、実施例２と同様にＰＴフォーマットの異なる複数のシャドウＰＴを保持可能とし、しかもＣＰＵはＰＴ対応表を有するＣＰＵとした実施例である。以下に実施例２との違いを中心に説明する。＜１．ハードウェア構成＞
ハードウェア構成は図４に示すとおりであり、この点では実施例２と同じである。更に、実施例３と同様にＣＰＵ１０はＶＴ−ｘ機能をサポートするＣＰＵに限定される。
【０１１０】
＜２．ソフトウェア構成＞
ＶＴ−ｘ機能により、ゲストＰＴアドレス更新処理の一部がＣＰＵ１０によって処理されるため、ソフトウェア構成としては、ゲストＰＴアドレス更新処理に関わるモジュールのみが実施例２と異なる。そのソフトウエア構成、及びゲストアドレス更新処理の手順は図１９を用いて説明した実施例３のものと全く同一である。
【０１１１】
＜３．ＶＭＭによるシャドウＰＴ操作＞
次に、実施例４におけるゲストの動作に合わせたＶＭＭがシャドウＰＴ操作の一例について説明する。
【０１１２】
＜３．１．ＶＭＭによるシャドウＰＴ操作の概要＞
図２０は、ＶＭＭ上でゲストを実行するときの全体的な処理を示すフローチャートで、図中破線の右側はＶＭＭが行う処理であり、同じく破線の左側はゲストが行う処理である。
【０１１３】
図２０は、ゲストＰＴフォーマットの更新を検出した後の処理のみが実施例２と異なっており、ゲストＰＴフォーマットの更新を検出した場合はＳ８７７へ進む。
【０１１４】
Ｓ８７７では、ＣＰＵ１０内のＰＴ対応表６１３の全エントリを無効化する。本無効化処理は、ＣＰＵ１０がＰＴフォーマットの異なるシャドウＰＴ８０を誤って再利用することを防ぐために行う。Ｓ８７７の後は、実施例２と同様にＳ８５７へ進む。
【０１１５】
＜３．２．シャドウＰＴの初期化処理＞
シャドウＰＴの初期化処理は、図１１に示すとおりであり、したがって実施例２と同一である。
【０１１６】
＜３．３．シャドウＰＴの検索・登録処理＞
シャドウＰＴの検索・登録処理は、図１７に示すとおりであり、したがって実施例２と同一である。
【０１１７】
＜３．４．シャドウＰＴの生成処理＞
シャドウＰＴの生成処理に関するフローチャートは、図１８に示すとおりであり、したがって実施例２と基本的には同一である。ただし、Ｓ１３５２にて、ＶＭＭ内のＰＴ対応表５１１に加えて、ＣＰＵ内のＰＴ対応表６１３へもゲストＰＴのフォーマット及びアドレス並びにシャドウＰＴのアドレスを記録する点では若干の違いがある。
【０１１８】
＜３．５．シャドウＰＴの解放処理＞
シャドウＰＴの解放処理に関するフローは、実施例２とほとんど同様である。具体的にいうと、基本的には図１３のフローチャートで示される処理を行うが、Ｓ１４０１の判定はＰＴ対応表５１１に記録されたＰＴフェーマット識別子を参照して行う。ただし、Ｓ１４０３の処理でＣＰＵ内のＰＴ対応表６１３のエントリ無効化も行う点は実施例３におけるシャドウＰＴの開放処理と同様である。
【０１１９】
＜３．６．シャドウＰＴエントリの更新処理＞
シャドウＰＴエントリの更新処理は、図１４に示すとおりであり、したがって実施例２と同一である。
【０１２０】
＜４．まとめ＞
以上に示した実施形態によれば、ゲストのＰＴフォーマットが変化する場合でも、作成したシャドウＰＴを再利用すること、及びＶＴ−ｘ機能を利用してゲストＰＴアドレス更新処理を高速化することができる。
【実施例５】
【０１２１】
実施例５では、実施例１のシャドウＰＴ生成オーバヘッドを削減するために、ゲストＰＴとシャドウＰＴの乖離を許容する。より具体的にはは、シャドウＰＴエントリの設定を、必要になるまで遅延させることで、不要なシャドウＰＴエントリの設定を省略することでオーバヘッドを削減している。以下に実施例１との差異を中心に実施例５を説明する。
【０１２２】
＜１．ハードウェア構成＞
実施例５のハードウェア構成は図４に示すとおりであり、したがって実施例１と同一である。
【０１２３】
＜２．ソフトウェア構成＞
次に、物理計算機上で仮想計算機ＶＭ０〜ＶＭｎを実現するソフトウェア構成の主要部を、図２１に示す。実施例１のソフトウエア構成（図５）と比較して、シャドウＰＴ管理部５０５に乖離表５５７が含まれている点と、シャドウＰＴ生成部５０４及びシャドウＰＴ更新部５０３の動作内容が異なる。乖離表５５７は、シャドウＰＴエントリとゲストＰＴエントリとの乖離状態を記録する表であり、シャドウＰＴ管理部５０５に、シャドウＰＴ８０毎に保持する。
【０１２４】
シャドウＰＴ生成部５０４は、シャドウＰＴ管理部５０５に存在しないシャドウＰＴ８０が必要になった場合に、全エントリが無効（Ｐビットが０）のシャドウＰＴ８０と、シャドウＰＴ８０の全エントリがゲストＰＴエントリと乖離していることを意味する乖離表５５７を生成する。シャドウＰＴ更新部５０３は、ゲストによるゲストＰＴエントリ操作要求５０１を受けて、ゲストＰＴエントリの更新を行い、更新されるゲストＰＴエントリを、当該ゲストＰＴに対応する乖離表５５７に記録する。また、シャドウＰＴ更新部５０３は、ゲストによるＴＬＢ操作要求５５６（ＴＬＢ５０にゲストＰＴ７０の内容をロードする要求）を受けて、ロード対象となるゲストＰＴ７０に対応する乖離表５５７を検索する。ロード対象となるゲストＰＴエントリがシャドウＰＴエントリと乖離していれば、シャドウＰＴエントリの設定を行い、乖離表５５７から当該エントリの情報を削除した後、シャドウＰＴエントリをＴＬＢ５０にロードさせる。ロード対象となるゲストＰＴエントリがシャドウＰＴエントリと同期していれば（乖離していなければ）、当該シャドウＰＴエントリをＴＬＢ５０にロードさせる。
【０１２５】
実施例５のＶＭＭが管理するホスト物理メモリ空間の一例を図２２に示す。シャドウＰＴ管理部５０５内に、各シャドウＰＴ８０に対応する乖離表５５７が存在する点が、実施例１と異なる。
【０１２６】
乖離表の構成を図２３に示す。乖離表５５７の各エントリには、Ｖａｌｉｄビット２００１とＰＴエントリ番号（ＰＴエントリの識別子）２００２を有する。乖離表５５７には、シャドウＰＴエントリとゲストＰＴエントリの内容が乖離している場合のみ、当該ＰＴエントリのＰＴエントリ番号２００２を記録し、Ｖａｌｉｄビット２００１をセットする。
【０１２７】
＜３．ＶＭＭによるシャドウＰＴ操作＞
次に、ゲストの動作に合わせてＶＭＭがシャドウＰＴ操作を行う一例について、以下、フローチャートを参照しながら実施例１との差分を説明する。
【０１２８】
＜３．１．ＶＭＭによるシャドウＰＴ操作の概要＞
図２４は、ＶＭＭ２０上でゲストを実行するときの全体的な処理を示すフローチャートで、図中破線の右側はＶＭＭ２０が行う処理であり、同じく破線の左側はゲストが行う処理である。これらのなかで、ゲストＰＴエントリの更新を検出した後の処理、及びＴＬＢ操作要求の検出以降の処理が実施例１と異なっている。
【０１２９】
Ｓ８５９では、ゲストによるゲストＰＴエントリの更新要求を受けて、更新対象のゲストＰＴが仮想ＣＰＵ（１０−ｖ）のＰＴポインタレジスタ（６０−ｖ）に参照されている場合は、更新対象のゲストＰＴエントリを更新し、対応する乖離表５５７に当該ＰＴエントリ番号を記録する。更新対象のゲストＰＴ７０が仮想ＣＰＵ（１０−ｖ）のＰＴポインタレジスタ（６０−ｖ）に参照されていない場合は、更新対象のゲストＰＴ７０に対応するシャドウＰＴ８０を解放する。
【０１３０】
Ｓ８６８ではゲストによるＴＬＢ操作（ゲストＰＴエントリの内容をＴＬＢ５０にロードする）要求を検出する。以下に検出方法を説明する。ＴＬＢ操作には、ＴＬＢ操作命令の実行と、ＴＬＢ５０にロードされていないシャドウＰＴエントリを使用するメモリアクセス命令の実行の２種が存在する。ＴＬＢ操作命令の実行には特権が必要であるため、ＴＬＢ操作命令の実行の検出には、ゲストを非特権レベルで稼動させ、ゲストが特権レジスタであるＰＴフォーマットレジスタへの書き込みを行う際に発生する、例外を利用する。ＴＬＢ５０にロードされていないシャドウＰＴエントリを使用する、メモリアクセス命令の実行の検出には、ＴＬＢ５０にロードされていないシャドウＰＴエントリのＰビットを０にしておくことで、ＴＬＢ５０にロードされる際に発生する例外を利用する。
【０１３１】
Ｓ８６９では、操作対象となるゲストＰＴ７０に対応する乖離表５５７から、操作対象となるゲストＰＴエントリのエントリ番号を検索する。操作対象となるゲストＰＴエントリが乖離している場合は、シャドウＰＴエントリの再設定を行い、乖離表５５７から当該ＰＴエントリ番号を削除し、ＴＬＢ５０にシャドウＰＴエントリの内容をロードする。操作対象となるＰＴエントリが同期している（乖離していない）場合には、単にシャドウＰＴエントリの内容をＴＬＢ５０にロードする。
【０１３２】
＜３．２．シャドウＰＴの初期化処理＞
シャドウＰＴの初期化処理は、図１１に示すように実施例１と同一である。
【０１３３】
＜３．３．シャドウＰＴの検索・登録処理＞
シャドウＰＴの検索・登録処理のフローチャートは、図１に示すとおりであり、したがって実施例１と基本的に同一である。ただしＳ１０３のメモリ確保の処理が乖離表５５７を保持するためのメモリの確保も含む点では実施例１と異なる。
【０１３４】
＜３．４．シャドウＰＴの生成処理＞
上記図１のＳ１０７、及び上記図１１のＳ９０２で行うシャドウＰＴの生成に関して、図２５を用いて説明する。図２５はシャドウＰＴエントリを生成するＳ１３１１とＳ１３１２のみが実施例１と異なる。Ｓ１３１１では、乖離表５５７に全ＰＴエントリ番号を登録する。Ｓ１３１２では、シャドウＰＴ８０の全エントリを無効（Ｐビットが０）にする。
【０１３５】
＜３．５．シャドウＰＴの解放処理＞
シャドウＰＴの解放処理に関するフローチャートは、図１３に示すとおりであり、したがって実施例１と同一である。ただし、Ｓ１４０４では、解放対象となるシャドウＰＴ８０と乖離表５５７が使用していたメモリ領域を解放し、当該メモリ領域を当該ゲスト用のシャドウＰＴ保持用に再利用可能とする。
【０１３６】
＜３．６．シャドウＰＴエントリの更新処理＞
本実施形態では、シャドウＰＴエントリの更新が、ゲストＰＴエントリ更新を受けて乖離表５５７を更新する処理と、ＴＬＢ操作要求を受けてシャドウＰＴエントリを更新する処理の２段階に分かれる。
【０１３７】
上記図２４のＳ８５９で行う乖離表５５７の更新処理に関して、図２６を用いて説明する。Ｓ２１０１では、更新されるゲストＰＴ７０に対応するシャドウＰＴ８０を特定する。Ｓ２１０２では、特定したシャドウＰＴ８０がＣＰＵ１０に登録されている、つまりＰＴポインタレジスタ６０にアドレスが保持されているか否かを判定し、保持されている場合はＳ２１０５へ、保持されていない場合はＳ２１１１へ進む。Ｓ２１０５では、更新されるゲストＰＴエントリのＰＴエントリ番号を、更新されるゲストＰＴ７０に対応する乖離表に登録する。Ｓ２１０６では、更新されるゲストＰＴエントリを、ゲストの要求に従って更新する。本処理は、ゲストＰＴエントリがゲストからライトプロテクトされており、ＶＭＭ２０のみが更新可能であるために行う処理である。 Ｓ２１１１では、特定したシャドウＰＴ８０及び乖離表５５７を解放し、ＰＴ対応表５１１から該当エントリを削除する。
【０１３８】
上記図２４のＳ８６９で行うシャドウＰＴエントリの更新に関して、図２７を用いて説明する。図２７は、シャドウＰＴ更新の前処理であるＳ１６５１とＳ１６５２、及び後処理であるＳ１６６０とＳ１６６１を除いて、実施例１の図１４と同一であるため、差分のみを説明する。尚、図２７には、Ｓ１６１０及びＳ１６１１は存在しない。Ｓ１６５１では、ＴＬＢ操作の対象となるゲストＰＴエントリを特定し、当該ゲストＰＴエントリに対応するシャドウＰＴエントリを特定する。Ｓ１６５２では、ＴＬＢ操作の対象となるゲストＰＴエントリが、乖離表５５７に登録されているか判定し、登録されている場合のみＳ１６０３に進んでシャドウＰＴの更新を行う。登録されていない場合は、Ｓ１６６１へ進む。Ｓ１６６０では、シャドウＰＴエントリの更新完了を受けて、乖離表５５７から当該ＰＴエントリ番号を削除する。Ｓ１６６１では、シャドウＰＴエントリの内容をＴＬＢ５０にロードし、以降の、ゲストの実行に必要なアドレス変換をＣＰＵ１０に実行させる。
【０１３９】
＜４．まとめ＞
以上に示した実施例５によれば、シャドウＰＴエントリの設定を必要最低限まで抑制することで、ゲストＰＴアドレス更新処理を高速化することができる。
【実施例６】
【０１４０】
実施例６は、実施例５を変形して、シャドウＰＴ管理部にＰＴフォーマットの異なる複数のシャドウＰＴを保持可能にしたものである。添付図面に基づいて実施例５との違いを中心に説明する。
【０１４１】
＜１．ハードウェア構成＞
ハードウェア構成は図４に示すとおりであり、したがって実施例５と同一である。
【０１４２】
＜２．ソフトウェア構成＞
ソフトウェア構成は、ＰＴ対応表５１１の構成のみが実施例５と異なる。すなわち実施例１を変形してシャドウＰＴ管理部にＰＴフォーマットの異なる複数のシャドウＰＴを保持可能とした実施例２と全く同様に、実施例６のＰＴ対応表５１１は図１５の構成となる。
【０１４３】
＜３．ＶＭＭによるシャドウＰＴ操作＞
次に、ゲストの動作に合わせてＶＭＭがシャドウＰＴ操作の一例について、以下、フローチャートを参照しながら説明する。
【０１４４】
＜３．１．ＶＭＭによるシャドウＰＴ操作の概要＞
図２８は、ＶＭＭ２０上でゲストを実行するときの全体的な処理を示すフローチャートで、図中破線の右側はＶＭＭ２０が行う処理であり、同じく破線の左側はゲストが行う処理である。
【０１４５】
図２８は、ゲストＰＴフォーマットの更新を検出した後の処理のみが実施例５と異なっており、ゲストＰＴフォーマットの更新を検出した場合はＳ８５７へ進む。
【０１４６】
Ｓ８５７では、ゲストＰＴフォーマットの変更要求を受けて、変更後のゲストＰＴ７０に対応するシャドウＰＴ８０を、ＶＭＭ２０が保持するＰＴ対応表５１１を用いて検索する。該当するシャドウＰＴ８０が存在する場合は、該当するシャドウＰＴ８０のアドレスをＰＴポインタレジスタ６０に登録する。該当するシャドウＰＴ８０が存在しなければ、変更後のゲストＰＴ７０に対応するシャドウＰＴ８０を生成し、生成したシャドウＰＴ８０と変更後のゲストＰＴ７０の関係をＰＴ対応表５１１に記録し、生成したシャドウＰＴ８０のアドレスをＰＴポインタレジスタ６０に登録する。
【０１４７】
＜３．２．シャドウＰＴの初期化処理＞
シャドウＰＴの初期化処理は、図１１に示すように実施例５と同一である。
【０１４８】
＜３．３．シャドウＰＴの検索・登録処理＞
上記図２８のＳ８０５及びＳ８５７で行うシャドウＰＴ検索・登録のフローは図１７に示すとおりである。したがって実施例２や実施例４のシャドウＰＴ検索・登録の処理と全く同様である。
【０１４９】
＜３．４．シャドウＰＴの生成処理＞
上記図１７のＳ１０７、及び上記図１１のＳ９０２で行うシャドウＰＴの生成に関して、図２９を用いて説明する。図２９はＰＴ対応表５１１を更新するＳ１３５２のみが実施例１と異なる。
【０１５０】
Ｓ１３５２では、ＰＴ対応表５１１にゲストＰＴ７０と生成したシャドウＰＴ８０の対応を記録する。具体的には、Ｖａｌｉｄビットをセットし、生成したシャドウＰＴのアドレスとゲストＰＴのフォーマット及びゲストＰＴのアドレスを記録する。ただしゲストがＰＴ無効状態の場合は、ゲストＰＴアドレスの代わりに０を記録する。
【０１５１】
＜３．５．シャドウＰＴの解放処理＞
シャドウＰＴの解放処理に関するフローチャートは、図１３に示すように実施例５と同一である。ただし、Ｓ１４０１の処理に関してのみ若干の違いがあるため説明する。
【０１５２】
Ｓ１４０１では、解放対象となるシャドウＰＴがＰＴ有効状態用のシャドウＰＴであったか否かを判定し、ＰＴ有効状態用のシャドウＰＴの場合のみ、Ｓ１４０５へ進む。本判定は、ＰＴ対応表５１１に記録されたＰＴフォーマット識別子を参照して行う。
【０１５３】
＜３．６．シャドウＰＴエントリの更新処理＞
シャドウＰＴエントリの更新処理は、図２６及び図２７に示すように実施例５と同一である。
【０１５４】
＜４．まとめ＞
以上に示した実施形態によれば、ゲストのＰＴフォーマットが変化する場合でも、作成したシャドウＰＴを再利用することが可能であり、またシャドウＰＴエントリの設定を必要最低限まで抑制できるため、ゲストＰＴアドレス更新処理を高速化することができる。
【実施例７】
【０１５５】
実施例７は、実施例５を変形して、ＰＴ対応表を有するＣＰＵに適用したものである。ＰＴ対応表を有するＣＰＵとしては、ＶＴ−ｘ(Intel Virtualization Technology for IA-32 Processors)機能をサポートするＣＰＵを用いる。
【０１５６】
＜１．ハードウェア構成＞
ハードウェア構成は図４に示すとおりであり、実施例５と同一であるが、ＣＰＵ１０はＶＴ−ｘ機能をサポートするＣＰＵに限定される。
【０１５７】
＜２．ソフトウェア構成＞
ＶＴ−ｘ機能により、ゲストＰＴアドレス更新処理の一部がＣＰＵ１０によって処理されるため、ソフトウェア構成としては、ゲストＰＴアドレス更新処理に関わるモジュールのみが実施例５と異なる。
【０１５８】
ゲストＰＴアドレス更新処理を、図３０を用いて説明する。
ＶＴ−ｘ機能をサポートするＣＰＵ１０は、４エントリのＰＴ対応表６１３を有しており、本ＰＴ対応表６１３を用いてゲストＰＴ７０に対応するシャドウＰＴ８０を検索する、シャドウＰＴ対応判定支援部６１２を有する。
【０１５９】
ゲストがゲストＰＴアドレス更新要求５０２を発すると、ＣＰＵ１０内のシャドウＰＴ対応判定支援部６１２が、ＣＰＵ１０内のＰＴ対応表６１３を用いて、更新後のゲストＰＴ７０に対応するシャドウＰＴ８０を検索する。該当するシャドウＰＴ８０が存在する場合は、ＣＰＵ１０が、ＰＴポインタレジスタ６０に該当するシャドウＰＴ８０のアドレスを代入する。該当するシャドウＰＴ８０が存在しない場合は、ＣＰＵ１０が、ＶＭＭ２０内のシャドウＰＴ対応判定部５１０にゲストＰＴアドレス更新要求５０２を伝え、以降の処理をＶＭＭ２０に委ねる。要求を受けたＶＭＭは２０実施例５と同様に、更新後のゲストＰＴ７０に対応するシャドウＰＴ８０の検索・生成・登録を行う。
【０１６０】
＜３．ＶＭＭによるシャドウＰＴ操作＞
次に、ゲストの動作に合わせてＶＭＭが行うシャドウＰＴ操作の一例について、以下、フローチャートを参照しながら実施例５との差分を説明する。
【０１６１】
＜３．１．ＶＭＭによるシャドウＰＴ操作の概要＞
シャドウＰＴ操作の概要は、図２４に示すとおりであり、実施例５と同一である。
【０１６２】
＜３．２．シャドウＰＴの初期化処理＞
シャドウＰＴの初期化処理は、図１１に示すとおりであり、実施例５と同一である。
【０１６３】
＜３．３．シャドウＰＴの検索・登録処理＞
シャドウＰＴの検索・登録処理は、図１に示すとおりであり、実施例５と同一である。
【０１６４】
＜３．４．シャドウＰＴの生成処理＞
シャドウＰＴの生成処理に関するフローチャートは、図２５に示すとおりであり、実施例５と同一である。ただし、Ｓ１３０２の処理に関してのみ若干の違いがある。この点は、同じくＶＴ−ｘ機能をサポートするＣＰＵを適用した実施例３と全く同様であるので、ここではその説明を省く。
【０１６５】
＜３．５．シャドウＰＴの解放処理＞
シャドウＰＴの解放処理に関するフローチャートは、図１３に示すとおろであり、実施例５と同一である。ただし、Ｓ１４０３の処理に関してのみ若干の違いがあるため説明する。
【０１６６】
Ｓ１４０３では、解放対象となるシャドウＰＴのアドレスを保持する、ＶＭＭ内のＰＴ対応表５１１及びＣＰＵ内のＰＴ対応表６１３のエントリを無効化し、解放されたシャドウＰＴ８０が再利用されることを防ぐ。
【０１６７】
＜３．６．シャドウＰＴエントリの更新処理＞
シャドウＰＴエントリの更新処理は、図２６及び図２７に示すとおりであり、実施例５と同一である。
【０１６８】
＜４．まとめ＞
以上に示した実施形態によれば、ＶＴ−ｘ機能を利用してゲストＰＴアドレスの更新処理を高速化することが可能であり、またシャドウＰＴエントリの設定を必要最低限まで抑制できるため、ゲストＰＴアドレス更新処理を高速化することができる。
【実施例８】
【０１６９】
実施例８は、実施例６を変形し、ＰＴ対応表を有するＣＰＵに適用したものである。ＰＴ対応表を有するＣＰＵとしては、ＶＴ−ｘ(Intel Virtualization Technology for IA-32 Processors)機能をサポートするＣＰＵを用いる。尚ＶＴ−ｘ機能をサポートするＣＰＵは、図１８に示した、ＰＴフォーマットのフィールドを持たないＰＴ対応表を有する。
【０１７０】
＜１．ハードウェア構成＞
ハードウェア構成は図４に示すとおりであり、実施例６と同一であるが、ＣＰＵ１０はＶＴ−ｘ機能をサポートするＣＰＵに限定される。
【０１７１】
＜２．ソフトウェア構成＞
ＶＴ−ｘ機能をサポートするＣＰＵの適用により、ゲストＰＴアドレス更新処理に関わるモジュールのみ図３０に示すように変更されるのは先の実施例７と全く同様である。
【０１７２】
＜３．ＶＭＭによるシャドウＰＴ操作＞
次に、ゲストの動作に合わせてＶＭＭが行うシャドウＰＴ操作の一例について、以下、フローチャートを参照しながら実施例６との差分を説明する。
【０１７３】
＜３．１．ＶＭＭによるシャドウＰＴ操作の概要＞
図３１は、ＶＭＭ上でゲストを実行するときの全体的な処理を示すフローチャートで、図中破線の右側はＶＭＭが行う処理であり、同じく破線の左側はゲストが行う処理である。
【０１７４】
図３１は、ゲストＰＴフォーマットの更新を検出した後の処理のみが実施例６と異なっており、ゲストＰＴフォーマットの更新を検出した場合はＳ８７７へ進む。Ｓ８７７では、ＣＰＵ１０内のＰＴ対応表６１３の全エントリを無効化する。本無効化処理は、ＣＰＵ１０がＰＴフォーマットの異なるシャドウＰＴ８０を誤って再利用することを防ぐために行う。Ｓ８７７の後は、実施例６と同様にＳ８５７へ進む。
【０１７５】
＜３．２．シャドウＰＴの初期化処理＞
シャドウＰＴの初期化処理は、図１１に示すとおりであり、実施例６と同一である。
【０１７６】
＜３．３．シャドウＰＴの検索・登録処理＞
シャドウＰＴの検索・登録処理は、図１７に示すとおりであり、実施例６と同一である。
【０１７７】
＜３．４．シャドウＰＴの生成処理＞
シャドウＰＴの生成処理に関するフローチャートは、図２９に示とおりで実施例６と同一である。ただし、そのなかでＳ１３０２の処理に関してのみ若干の違いがあるのは実施例３や実施例７と全く同様である。
【０１７８】
＜３．５．シャドウＰＴの解放処理＞
シャドウＰＴの解放処理に関するフローチャートは、図１３に示とりであり、実施例６と同一である。ただし、Ｓ１４０３の処理に関してのみ若干の違いがあるのは先の実施例と全くス用であるためその説明は省略する。
【０１７９】
＜３．６．シャドウＰＴエントリの更新処理＞
シャドウＰＴエントリの更新処理は、図２６及び図２７に示とおりであり、実施例６と同一である。
【０１８０】
＜４．まとめ＞
以上に示した実施形態によれば、ゲストのＰＴフォーマットが変化する場合でも、作成したシャドウＰＴを再利用すること、及びＶＴ−ｘ機能を利用してゲストＰＴアドレスの更新処理を高速化すること、及びシャドウＰＴエントリの設定を必要最低限まで抑制できることにより、ゲストＰＴアドレス更新処理を高速化することができる。
【実施例９】
【０１８１】
実施例９は、実施例１を変形してIPF(Itanium Processor Family) CPUに適用したものである。
＜１．ハードウェア構成＞
実施例９のハードウェア構成は図４に示とおりであり、したがって実施例１と同一であるが、ＣＰＵ１０はＩＰＦに限定される。
【０１８２】
＜２．ソフトウェア構成＞
ＩＰＦでは、ＩＡ３２（またはＥＭ６４Ｔ）と異なるＰＴを使用するため、ソフトウェア構成としては、ゲスト／シャドウＰＴのフォーマットと、ＰＴ対応表の構成のみが実施例１と異な。
【０１８３】
シャドウＰＴ８０とゲストＰＴ７０の構造は同一であり、ＣＰＵ１０がＩＰＦである場合には図３２に示すように構成される。ＰＴ３２０１は連続した複数のＰＴエントリ３２０２から成り、ＰＴポインタレジスタ６０はＰＴ３２０１の先頭アドレスを保持する。各ＰＴエントリ３２０２は、物理メモリアドレス等のアドレス変換情報を保持する。ＣＰＵ１０は、ＰＴ３２０１からアドレス変換情報を取得する際に、仮想アドレスを用いたハッシュ計算を行って、参照するＰＴエントリの番号を特定し、当該エントリに記録された情報を読み取る。
【０１８４】
ＩＰＦのＰＴに関して、ＰＴフォーマットを規定する特権レジスタＰＴＡ(Page Table Address)のフォーマットと、ＰＴエントリのフォーマットを図３３に示す。
【０１８５】
ＰＴＡは、ｂａｓｅフィールド３３１０、ｖｆフィールド３３１１、ｓｉｚｅフィールド３３１２、ｖｅフィールド３３１３を有している。ｂａｓｅフィールド３３１０はＰＴの先頭アドレスを保持し、ＩＰＦのＰＴポインタレジスタ６０に相当する。ｖｆフィールド３３１１は、ＰＴエントリのフォーマットを規定する、ＩＰＦがサポートする２種類のＰＴエントリフォーマットの一方を指定する。尚ＩＰＦでは、ＰＴ内のＰＴエントリは全て同じフォーマットが適用される。ｓｉｚｅフィールド３３１２はＰＴの大きさを規定する。ｖｅフィールドはＰＴの有効性を規定する。
【０１８６】
ＰＴエントリのフォーマットには、ショート3202-1とロング3202-2の２種類が存在する。どちらのフォーマットにも、物理メモリのアドレスを保持するアドレスフィールド（３３１４、３３１７）と、エントリの有効／無効を規定するｐフィールド（３３１５、３３１８）が存在する。
【０１８７】
ゲストＰＴ７０とシャドウＰＴ８０の対応を記録するＰＴ対応表５１１の構成を、図３４に示す。ＩＰＦでは、ＰＴのアドレスとフォーマットがＰＴＡのみで一意に特定されため、ゲストＰＴ及びシャドウＰＴの識別にＰＴＡ設定値を用いる。ＰＴ対応表５１１の各エントリには、エントリの有効性を意味するＶａｌｉｄビット３４０１と、ゲストのＰＴＡ設定値３４０３と、ＶＭＭ２０が物理計算機に設定するＰＴＡ（シャドウＰＴ用のＰＴＡ設定値３４０４）を記録する。ゲストがゲストのＰＴＡを更新する際に、ＶＭＭ２０はＰＴ対応表５１１を用いて、更新後のゲストＰＴＡ設定値３４０３に対応するシャドウＰＴ用のＰＴＡ設定値３４０４を検索する。
【０１８８】
尚、ＰＴＡ設定値にはＰＴアドレスが含まれているため、ＰＴＡ設定値を用いてシャドウＰＴを検索する操作には、ＰＴアドレスの一致比較が含まれている。
【０１８９】
＜３．ＶＭＭによるシャドウＰＴ操作＞
次に、ゲストの動作に合わせてＶＭＭがシャドウＰＴ操作の一例について、以下、フローチャートを参照しながら実施例１との差分を説明する。
【０１９０】
＜３．１．ＶＭＭによるシャドウＰＴ操作の概要＞
図３５は、ＶＭＭ２０上でゲストを実行するときの全体的な処理を示すフローチャートで、図中破線の右側はＶＭＭ２０が行う処理であり、同じく破線の左側はゲストが行う処理である。
【０１９１】
図３５は、ゲストＰＴフォーマット及びゲストＰＴアドレスの更新検出とその後の処理のみが実施例１と異なっている。
【０１９２】
Ｓ３５０１では、ゲストＰＴＡが更新されたか否かを判定する。ＩＰＦではゲストＰＴフォーマット及びゲストＰＴアドレスがゲストＰＴＡに保持されているため、本処理によってゲストＰＴＡフォーマット及びゲストＰＴアドレスを変更を一度に判定できる。ゲストＰＴＡが更新された場合はＳ８０５へ、更新されていない場合はＳ８０８へ進む。
【０１９３】
Ｓ８０５では、ゲストＰＴＡの変更要求を受けて、変更後のゲストＰＴ７０に対応するシャドウＰＴ８０を、ＶＭＭ２０が保持するＰＴ対応表５１１を用いて検索する。該当するシャドウＰＴ８０が存在する場合は、該当するシャドウＰＴ８０のアドレスをＰＴポインタレジスタ６０に登録する。該当するシャドウＰＴ８０が存在しなければ、変更後のゲストＰＴ７０に対応するシャドウＰＴ８０を生成し、生成したシャドウＰＴ８０と変更後のゲストＰＴ７０の関係をＰＴ対応表５１１に記録し、生成したシャドウＰＴ８０のアドレスをＰＴポインタレジスタ６０に登録する。
【０１９４】
＜３．２．シャドウＰＴの初期化処理＞
シャドウＰＴの初期化処理は、図１１に示すとおりであり、実施例１と同一である。
【０１９５】
＜３．３．シャドウＰＴの検索・登録処理＞
上記図３５のＳ８０５で行うシャドウＰＴ検索・登録に関して、図３６を用いて説明する。図３６はフローチャート開始直後のＳ３６０１のみが、実施例１と異なる。
【０１９６】
Ｓ３６０１では、ゲストＰＴＡの更新に対応して、ＰＴ対応表５１１の中から、更新後のゲストＰＴＡ設定値を含む有効なエントリを検索する。該当するエントリが存在する場合は実施例１と同様にＳ１０９に進み、更新後のゲストＰＴに対応するシャドウＰＴをＣＰＵに登録する。該当するエントリが存在しない場合は実施例１と同様にＳ１０３に進み、シャドウＰＴの生成と登録を行う。
【０１９７】
＜３．４．シャドウＰＴの生成処理＞
上記図３６のＳ１０７、及び上記図１１のＳ９０２で行うシャドウＰＴの生成に関して、図３７を用いて説明する。図３７はＰＴ対応表５１１を更新するＳ３７０２のみが実施例１と異なる。
【０１９８】
Ｓ３７０２では、ＰＴ対応表５１１にゲストＰＴ７０と生成したシャドウＰＴ８０の対応を記録する。具体的には、Ｖａｌｉｄビットをセットし、生成したシャドウＰＴ用のＰＴＡ設定値とゲストＰＴＡ設定値を記録する。ただしゲストがＰＴ無効状態の場合は、ゲストＰＴＡ設定値のｂａｓｅフィールドを０に変更した後で、記録を行う。
【０１９９】
＜３．５．シャドウＰＴの解放処理＞
シャドウＰＴの解放処理は、図１３に示すとおりであり、実施例１と同一である。
【０２００】
＜３．６．シャドウＰＴエントリの更新処理＞
上記図３５のＳ８０９で行うシャドウＰＴエントリの更新に関して、図３８を用いて説明する。図３８は、ゲストＰＴエントリの増減に伴うシャドウＰＴエントリの増減処理が無いことを除いて、実施例１と同一である。本増減処理が不要であるのは、ＩＰＦのＰＴが多段テーブルではなく、１段のテーブルのみで構成されるためである。
【０２０１】
本フローチャートでは、Ｓ１６０２で使用中のシャドウＰＴに対応するゲストＰＴのエントリ更新を検出した場合に、Ｓ１６０９へ進む。
＜４．まとめ＞
以上に示した実施形態によれば、ＣＰＵがＩＰＦであっても、作成したシャドウＰＴを再利用することで、ゲストＰＴが繰り返し使用される場合に、シャドウＰＴの設定処理を省略できる。一般に、ゲストＰＴ切り替えの大多数は、以前使われたことがあるゲストＰＴへの切り替えであるため、本実施形態によって、ゲストＰＴの切り替えに起因する処理から冗長性が大幅に削減され、ゲストＰＴアドレス更新処理を高速化することができる。
【実施例１０】
【０２０２】
実施例１０は、実施例９のシャドウＰＴ生成オーバヘッドを削減するために、ゲストＰＴとシャドウＰＴの乖離を許容するように変形したものである。より具体的には、実施例１０では、実施例５と同様に、シャドウＰＴエントリの設定を必要になるまで遅延させ、不要なシャドウＰＴエントリの設定を省略することでオーバヘッドを削減する。
【０２０３】
＜１．ハードウェア構成＞
ハードウェア構成は図４に示すとおりであり、実施例９と同一である。
【０２０４】
＜２．ソフトウェア構成＞
次に、物理計算機上で仮想計算機ＶＭ０〜ＶＭｎを実現するソフトウェア構成の主要部を、図２１に示すとおりであり、実施例５のソフトウエア構成と同様となる。つまり、シャドウＰＴ管理部５０５に乖離表５５７が含まれている点と、シャドウＰＴ生成部５０４及びシャドウＰＴ更新部５０３の動作内容のみが、実施例９と異なる。
【０２０５】
ＶＭＭが管理するホスト物理メモリ空間は図２２に示すとおりであり、実施例５で説明したものとまったく同様である。つまりシャドウＰＴ管理部５０５内に、各シャドウＰＴ８０に対応する乖離表５５７が存在する点のみが、実施例９と異なる。
乖離表の構成も実施例５で説明したとおりである。
【０２０６】
＜３．ＶＭＭによるシャドウＰＴ操作＞
次に、ゲストの動作に合わせてＶＭＭがシャドウＰＴ操作の一例について、以下、フローチャートを参照しながら実施例９との差分を説明する。
【０２０７】
＜３．１．ＶＭＭによるシャドウＰＴ操作の概要＞
図３９は、ＶＭＭ２０上でゲストを実行するときの全体的な処理を示すフローチャートで、図中破線の右側はＶＭＭ２０が行う処理であり、同じく破線の左側はゲストが行う処理である。
【０２０８】
図３９は、ゲストＰＴエントリの更新を検出した後の処理、及びＴＬＢ操作要求の検出以降の処理のみが実施例９と異なっている。
【０２０９】
Ｓ８５９では、ゲストによるゲストＰＴエントリの更新要求を受けて、更新対象のゲストＰＴが仮想ＣＰＵ（１０−ｖ）のＰＴポインタレジスタ（６０−ｖ）に参照されている場合は、更新対象のゲストＰＴエントリを更新し、対応する乖離表５５７に当該ＰＴエントリ番号を記録する。更新対象のゲストＰＴ７０が仮想ＣＰＵ（１０−ｖ）のＰＴポインタレジスタ（６０−ｖ）に参照されていない場合は、更新対象のゲストＰＴ７０に対応するシャドウＰＴ８０を解放する。
【０２１０】
Ｓ８６８ではゲストによるＴＬＢ操作（ゲストＰＴエントリの内容をＴＬＢ５０にロードする）要求を検出する。以下に検出方法を説明する。ＴＬＢ操作には、ＴＬＢ操作命令の実行と、ＴＬＢ５０にロードされていないシャドウＰＴエントリを使用するメモリアクセス命令の実行の２種が存在する。ＴＬＢ操作命令の実行には特権が必要であるため、ＴＬＢ操作命令の実行の検出には、ゲストを非特権レベルで稼動させ、ゲストが特権レジスタであるＰＴフォーマットレジスタへの書き込みを行う際に発生する、例外を利用する。ＴＬＢ５０にロードされていないシャドウＰＴエントリを使用する、メモリアクセス命令の実行の検出には、ＴＬＢ５０にロードされていないシャドウＰＴエントリのＰビットを０にしておくことで、ＴＬＢ５０にロードされる際に発生する例外を利用する。
【０２１１】
Ｓ８６９では、操作対象となるゲストＰＴ７０に対応する乖離表５５７から、操作対象となるゲストＰＴエントリのエントリ番号を検索する。操作対象となるゲストＰＴエントリが乖離している場合は、シャドウＰＴエントリの再設定を行い、乖離表５５７から当該ＰＴエントリ番号を削除し、ＴＬＢ５０にシャドウＰＴエントリの内容をロードする。操作対象となるＰＴエントリが同期している（乖離していない）場合には、単にシャドウＰＴエントリの内容をＴＬＢ５０にロードする。
【０２１２】
＜３．２．シャドウＰＴの初期化処理＞
シャドウＰＴの初期化処理は、図１１に示すとおりであり、実施例９と同一である。
【０２１３】
＜３．３．シャドウＰＴの検索・登録処理＞
シャドウＰＴの検索・登録処理のフローチャートは、図３６に示すように実施例９と同一であるが、Ｓ１０３の処理に関してのみ若干の違いがあるため説明する。
Ｓ１０３では、当該ゲスト用のシャドウＰＴ管理部５０５の中から、新規シャドウＰＴを保持するためのメモリと、乖離表５５７を保持するためのメモリの確保を試みる。
【０２１４】
＜３．４．シャドウＰＴの生成処理＞
上記図３６のＳ１０７、及び上記図１１のＳ９０２で行うシャドウＰＴの生成に関して、図４０を用いて説明する。図４０はシャドウＰＴエントリを生成するＳ１３１１とＳ１３１２のみが実施例１と異なる。
Ｓ１３１１では、乖離表５５７に全ＰＴエントリ番号を登録する。Ｓ１３１２では、シャドウＰＴ８０の全エントリを無効（Ｐビットが０）にする。
【０２１５】
＜３．５．シャドウＰＴの解放処理＞
シャドウＰＴの解放処理に関するフローチャートは、図１３に示すように実施例９と同一である。ただし、Ｓ１４０４の処理に関してのみ若干の違いがあるため説明する。
【０２１６】
Ｓ１４０４では、解放対象となるシャドウＰＴ８０と乖離表５５７が使用していたメモリ領域を解放し、当該メモリ領域を当該ゲスト用のシャドウＰＴ保持用に再利用可能とする。
【０２１７】
＜３．６．シャドウＰＴエントリの更新処理＞
本実施形態では、シャドウＰＴエントリの更新が、ゲストＰＴエントリ更新を受けて乖離表５５７を更新する処理と、ＴＬＢ操作要求を受けてシャドウＰＴエントリを更新する処理の２段階に分かれる。
【０２１８】
上記図３９のＳ８５９で行う乖離表５５７の更新処理に関して、図２６を用いて説明する。Ｓ２１０１では、更新されるゲストＰＴ７０に対応するシャドウＰＴ８０を特定する。Ｓ２１０２では、特定したシャドウＰＴ８０がＣＰＵ１０に登録されている、つまりＰＴポインタレジスタ６０にアドレスが保持されているか否かを判定し、保持されている場合はＳ２１０５へ、保持されていない場合はＳ２１１１へ進む。Ｓ２１０５では、更新されるゲストＰＴエントリのＰＴエントリ番号を、更新されるゲストＰＴ７０に対応する乖離表に登録する。Ｓ２１０６では、更新されるゲストＰＴエントリを、ゲストの要求に従って更新する。本処理は、ゲストＰＴエントリがゲストからライトプロテクトされており、ＶＭＭ２０のみが更新可能であるために行う処理である。Ｓ２１１１では、特定したシャドウＰＴ８０及び乖離表５５７を解放し、ＰＴ対応表５１１から該当エントリを削除する。
【０２１９】
上記図３９のＳ８６９で行うシャドウＰＴエントリの更新に関して、図４１を用いて説明する。図４１は、シャドウＰＴ更新の前処理であるＳ１６５１とＳ１６５２、及び後処理であるＳ１６６０とＳ１６６１を除いて、実施例９の図３８と同一であるため、差分のみを説明する。尚、図４１には、Ｓ１６１０及びＳ１６１１は存在しない。Ｓ１６５１では、ＴＬＢ操作の対象となるゲストＰＴエントリを特定し、当該ゲストＰＴエントリに対応するシャドウＰＴエントリを特定する。Ｓ１６５２では、ＴＬＢ操作の対象となるゲストＰＴエントリが、乖離表５５７に登録されているか判定し、登録されている場合のみＳ１６０９に進んでシャドウＰＴの更新を行う。登録されていない場合は、Ｓ１６６１へ進む。Ｓ１６６０では、シャドウＰＴエントリの更新完了を受けて、乖離表５５７から当該ＰＴエントリ番号を削除する。Ｓ１６６１では、シャドウＰＴエントリの内容をＴＬＢ５０にロードし、以降の、ゲストの実行に必要なアドレス変換をＣＰＵ１０に実行させる。
【０２２０】
＜４．まとめ＞
以上に示した実施形態によれば、シャドウＰＴエントリの設定を必要最低限まで抑制することで、ゲストＰＴアドレス更新処理を高速化することができる。
【産業上の利用可能性】
【０２２１】
以上のように、本発明は、ＩＡ３２（またはＥＭ６４Ｔ）やＩＰＦを備えた仮想計算機システムに適用することができる。
【図面の簡単な説明】
【０２２２】
【図１】実施例１、３、５、７における、シャドウＰＴの検索・登録処理を示すフローチャートである。
【図２】仮想計算機のアドレス変換設定に対応する、物理計算機のアドレス変換設定を示す概念図である。
【図３】仮想計算機のアドレス変換設定が変化した場合の、物理計算機のアドレス変換設定を示す概念図である。
【図４】実施例１〜１０における、仮想計算機システムを動作させる物理計算機のブロック図である。
【図５】実施例１、２、９における、仮想計算機システムのソフトウェアとハードウェアの要部を示すブロック図である。
【図６】実施例１、２、３、４、９における、メモリ領域のマップである。
【図７】ＩＡ３２（またはＥＭ６４Ｔ）のＰＴ構成を示すブロック図である。
【図８】ＩＡ３２（またはＥＭ６４Ｔ）のＰＴエントリフォーマットである。
【図９】実施例１、３、５、７における、ゲストＰＴとシャドウＰＴの対応情報を保持する、ＰＴ対応表の構成図である。
【図１０】実施例１、３における、ゲストの動作及びＶＭＭのシャドウＰＴ操作の概要を示すフローチャートである。
【図１１】実施例１〜１０における、シャドウＰＴの初期化処理を示すフローチャートである。
【図１２】実施例１、３における、シャドウＰＴの生成処理を示すフローチャートである。
【図１３】実施例１〜１０における、シャドウＰＴの解放処理を示すフローチャートである。
【図１４】実施例１、２、３、４における、シャドウＰＴのエントリ更新処理を示すフローチャート。
【図１５】実施例２、４、６、８における、ゲストＰＴとシャドウＰＴの対応情報を保持する、ＰＴ対応表の構成図である。
【図１６】実施例２における、ゲストの動作及びＶＭＭのシャドウＰＴ操作の概要を示すフローチャートである。
【図１７】実施例２、４、６、８における、シャドウＰＴの検索・登録処理を示すフローチャートである。
【図１８】実施例２、４における、シャドウＰＴの生成処理を示すフローチャートである。
【図１９】実施例３、４における、仮想計算機システムのソフトウェアとハードウェアの要部を示すブロック図である。
【図２０】実施例４における、ゲストの動作及びＶＭＭのシャドウＰＴ操作の概要を示すフローチャートである。
【図２１】実施例５、６、１０における、仮想計算機システムのソフトウェアとハードウェアの要部を示すブロック図である。
【図２２】実施例５、６、７、８、１０における、メモリ領域のマップである。
【図２３】実施例５、６、７、８、１０における、シャドウＰＴエントリとゲストＰＴエントリの乖離状態を保持する、乖離表の構成図である。
【図２４】実施例５、７における、ゲストの動作及びＶＭＭのシャドウＰＴ操作の概要を示すフローチャートである。
【図２５】実施例５、７における、シャドウＰＴの生成処理を示すフローチャートである。
【図２６】実施例５、６、７、８、１０における、シャドウＰＴエントリ内容とゲストＰＴエントリの内容の乖離状態を保持する、乖離表の更新処理を示すフローチャートである。
【図２７】実施例５、６、７、８における、シャドウＰＴのエントリ更新処理を示すフローチャートである。
【図２８】実施例６における、              ゲストの動作及びＶＭＭのシャドウＰＴ操作の概要を示すフローチャートである。
【図２９】実施例６、８における、シャドウＰＴの生成処理を示すフローチャートである。
【図３０】実施例７、８における、仮想計算機システムのソフトウェアとハードウェアの要部を示すブロック図である。
【図３１】実施例８における、ゲストの動作及びＶＭＭのシャドウＰＴ操作の概要を示すフローチャートである。
【図３２】ＩＰＦのＰＴ構成を示すブロック図である。
【図３３】ＩＰＦのＰＴエントリフォーマットである。
【図３４】実施例９、１０における、ゲストＰＴとシャドウＰＴの対応情報を保持する、ＰＴ対応表の構成図である。
【図３５】実施例９における、ゲストの動作及びＶＭＭのシャドウＰＴ操作の概要を示すフローチャートである。
【図３６】実施例９、１０における、シャドウＰＴの検索・登録処理を示すフローチャートである。
【図３７】実施例９における、シャドウＰＴの生成処理を示すフローチャートである。
【図３８】実施例９における、シャドウＰＴのエントリ更新処理を示すフローチャートである。
【図３９】実施例１０における、ゲストの動作及びＶＭＭのシャドウＰＴ操作の概要を示すフローチャートである。
【図４０】実施例１０における、シャドウＰＴの生成処理を示すフローチャートである。
【図４１】実施例１０における、シャドウＰＴのエントリ更新処理を示すフローチャートである。
【符号の説明】
【０２２３】
１０ ＣＰＵ
２０ ＶＭＭ
３０ ゲストＯＳ
４０ 仮想計算機（ＶＭ）
５０ ＴＬＢ
６０ ＰＴポインタレジスタ
７０ ゲストＰＴ
８０ シャドウＰＴ。
【図１】
2007188121.tif 000003
【図２】
2007188121.tif 000004
【図３】
2007188121.tif 000005
【図４】
2007188121.tif 000006
【図５】
2007188121.tif 000007
【図６】
2007188121.tif 000008
【図７】
2007188121.tif 000009
【図８】
2007188121.tif 000010
【図９】
2007188121.tif 000011
【図１０】
2007188121.tif 000012
【図１１】
2007188121.tif 000013
【図１２】
2007188121.tif 000014
【図１３】
2007188121.tif 000015
【図１４】
2007188121.tif 000016
【図１５】
2007188121.tif 000017
【図１６】
2007188121.tif 000018
【図１７】
2007188121.tif 000019
【図１８】
2007188121.tif 000020
【図１９】
2007188121.tif 000021
【図２０】
2007188121.tif 000022
【図２１】
2007188121.tif 000023
【図２２】
2007188121.tif 000024
【図２３】
2007188121.tif 000025
【図２４】
2007188121.tif 000026
【図２５】
2007188121.tif 000027
【図２６】
2007188121.tif 000028
【図２７】
2007188121.tif 000029
【図２８】
2007188121.tif 000030
【図２９】
2007188121.tif 000031
【図３０】
2007188121.tif 000032
【図３１】
2007188121.tif 000033
【図３２】
2007188121.tif 000034
【図３３】
2007188121.tif 000035
【図３４】
2007188121.tif 000036
【図３５】
2007188121.tif 000037
【図３６】
2007188121.tif 000038
【図３７】
2007188121.tif 000039
【図３８】
2007188121.tif 000040
【図３９】
2007188121.tif 000041
【図４０】
2007188121.tif 000042
【図４１】
2007188121.tif 000043