(57)【要約】【課題】仮想マシンにおいて動的バイナリ変換を効率的に適用する。【解決手段】特定のゲスト仮想ページへのアクセスの際に、特定のゲスト仮想ページのアドレスに対応するゲスト物理ページアドレスを特定し、ゲスト物理ページの数分エントリを有しており且つ各ゲスト物理ページアドレスにゲスト仮想ページアドレスと対応するホスト物理ページへのポインタと当該ホスト物理ページに格納されているコードをホストマシン向けに変換したコードである変換コードへのポインタとを格納するための変換テーブルから、特定されたゲスト物理ページアドレスについてのエントリを読み出し、変換コードへのポインタが含まれているか判断する。変換コードへのポインタが含まれている場合には、読み出されたエントリに含まれるゲスト仮想ページアドレスと特定のゲスト仮想ページのアドレスとを比較し、一致すれば、ポインタにより変換コードを読み出して実行する。【選択図】図３
2010257049.tif 000002
【特許請求の範囲】
【請求項１】
ホストマシンに、仮想的なコンピュータであるゲストマシンを実行させるための仮想化プログラムであって、
特定のゲスト仮想ページへのアクセスの際に、前記特定のゲスト仮想ページのアドレスに対応するゲスト物理ページアドレスを特定するステップと、
ゲスト物理ページの数分エントリを有しており且つ各ゲスト物理ページアドレスにゲスト仮想ページアドレスと対応するホスト物理ページへのポインタと当該ホスト物理ページに格納されているコードを前記ホストマシン向けに変換したコードである変換コードへのポインタとを格納するための変換テーブルから、特定された前記ゲスト物理ページアドレスについてのエントリを読み出し、前記変換コードへのポインタが含まれているか判断するステップと、
前記変換コードへのポインタが含まれている場合には、読み出された前記エントリに含まれるゲスト仮想ページアドレスと前記特定のゲスト仮想ページのアドレスとを比較する比較ステップと、
読み出された前記エントリに含まれるゲスト仮想ページアドレスと前記特定のゲスト仮想ページのアドレスとが一致する場合には、読み出された前記エントリに含まれる前記変換コードへのポインタにより当該変換コードを読み出して実行するステップと、
を実行させるための仮想化プログラム。
【請求項２】
読み出された前記エントリに含まれるゲスト仮想ページアドレスと前記特定のゲスト仮想ページのアドレスとが不一致である場合には、読み出された前記エントリに含まれる前記変換コードへのポインタを削除すると共に、当該ポインタで指定されたページに格納されている当該変換コードを削除するステップ
をさらに含む請求項１記載の仮想化プログラム。
【請求項３】
読み出された前記エントリに含まれるゲスト仮想ページアドレスと前記特定のゲスト仮想ページのアドレスが不一致である場合又は読み出された前記エントリに前記変換コードへのポインタが含まれていない場合、読み出された前記エントリに含まれる前記ホスト物理ページへのポインタにより当該ホスト物理ページに格納されているコードを読み出して、コード変換処理を実施するステップと、
特定された前記ゲスト物理ページアドレスについてのエントリに、前記特定のゲスト仮想ページのアドレスと前記コード変換処理によって生成された変換コードが格納されているホスト物理ページのアドレスを格納するステップと、
前記コード変換処理によって生成された変換コードを実行するステップと、
をさらに実行させるための請求項１又は２記載の仮想化プログラム。
【請求項４】
前記変換テーブルにおける前記有効なゲスト仮想ページアドレスが、ページ共有判定ビットと空間識別子とページアドレスとを含み、
前記比較ステップにおいて、
前記ページ共有判定ビットがセットされている場合には、読み出された前記エントリに含まれる前記ゲスト仮想ページアドレスのうち前記ページアドレスと、前記特定のゲスト仮想ページのアドレスのうち前記空間識別子以外の部分とを比較し、
前記ページ共有判定ビットがセットされていない場合には、読み出された前記エントリに含まれる前記ゲスト仮想ページアドレスのうち前記空間識別子及び前記ページアドレスと前記特定のゲスト仮想ページのアドレスとを比較する
請求項１乃至３のいずれか１つ記載の仮想化プログラム。
【請求項５】
ホストマシンに、仮想的なコンピュータであるゲストマシンを実行させる仮想化処理方法であって、
特定のゲスト仮想ページへのアクセスの際に、前記特定のゲスト仮想ページのアドレスに対応するゲスト物理ページアドレスを特定するステップと、
ゲスト物理ページの数分エントリを有しており且つ各ゲスト物理ページアドレスにゲスト仮想ページアドレスと対応するホスト物理ページへのポインタと当該ホスト物理ページに格納されているコードを前記ホストマシン向けに変換したコードである変換コードへのポインタとを格納するための変換テーブルから、特定された前記ゲスト物理ページアドレスについてのエントリを読み出し、前記変換コードへのポインタが含まれているか判断するステップと、
前記変換コードへのポインタが含まれている場合には、読み出された前記エントリに含まれるゲスト仮想ページアドレスと前記特定のゲスト仮想ページのアドレスとを比較する比較ステップと、
読み出された前記エントリに含まれるゲスト仮想ページアドレスと前記特定のゲスト仮想ページのアドレスとが一致する場合には、読み出された前記エントリに含まれる前記変換コードへのポインタにより当該変換コードを読み出して実行するステップと、
を含む仮想化処理方法。
【請求項６】
仮想的なコンピュータであるゲストマシンを実行させるホストマシンであって、
特定のゲスト仮想ページへのアクセスの際に、前記特定のゲスト仮想ページのアドレスに対応するゲスト物理ページアドレスを特定する手段と、
ゲスト物理ページの数分エントリを有しており且つ各ゲスト物理ページアドレスにゲスト仮想ページアドレスと対応するホスト物理ページへのポインタと当該ホスト物理ページに格納されているコードを前記ホストマシン向けに変換したコードである変換コードへのポインタとを格納するための変換テーブルを格納するメモリと、
前記変換テーブルから、特定された前記ゲスト物理ページアドレスについてのエントリを読み出し、前記変換コードへのポインタが含まれているか判断し、前記変換コードへのポインタが含まれている場合には、読み出された前記エントリに含まれるゲスト仮想ページアドレスと前記特定のゲスト仮想ページのアドレスとを比較し、読み出された前記エントリに含まれるゲスト仮想ページアドレスと前記特定のゲスト仮想ページのアドレスとが一致する場合には、読み出された前記エントリに含まれる前記変換コードへのポインタにより当該変換コードを読み出して実行する手段と、
を有するホストマシン。
【発明の詳細な説明】
【技術分野】
【０００１】
本技術は、動的バイナリ変換を伴う仮想化技術に関する。
【背景技術】
【０００２】
現在のコンピュータの多くは動的アドレス変換（ＤＡＴ：Dynamic Address Translation。仮想メモリとも呼ぶ。) を適用して動作しており、実用的な仮想マシンは、ホストマシン上で仮想的に構成されたコンピュータであるゲストマシン上でＤＡＴ機能をサポートする必要がある。
【０００３】
また、仮想マシンで動的バイナリ変換（仮想マシンがゲストマシンをエミュレーションするにあたって、ゲストマシンにおける機械語をホストマシンにおける機械語に動的にコンパイルする技術。これはＪＩＴ（Just In Time）コンパイリング（compiling）とも呼ばれる。）を適用する場合、ゲストマシン上のＤＡＴ機能が問題になる。これは、ゲストマシン上のＤＡＴ機能によって、物理メモリ以上の広いメモリ空間を使えるため、動的バイナリ変換の対象となるメモリ空間がゲストマシンの動作状態によって動的に変動してしまうことによって生じる。
【０００４】
またＤＡＴテーブルの書き替えによって、ゲストマシンにおける仮想ページであるゲスト仮想ページと、ゲストマシンにおける物理ページであるゲスト物理ページとの写像関係が動的に変更される。この変更によって、動的バイナリ変換の結果である変換コードが不正となることがあるため、変換コードを無効化、削除する必要が生じる。そのためＤＡＴと変換コード管理の連動が必要となる。
【０００５】
通常、ゲストマシンはＤＡＴを有効にして動作しており、実用的な仮想マシンはＤＡＴ機能を有効にしたゲストマシンをエミュレーションする必要がある。この際に、シャドウページ方式が用いられることが多い。
【０００６】
シャドウページ方式は、ゲストマシンのＤＡＴテーブルと同期したシャドウ・ページ・テーブルを仮想マシンが動的に作成する方式である。シャドウページ方式では、以下のような管理が行われる。
（１）最初に、シャドウ・ページ・テーブルは空である。
（２）仮想マシンがゲストマシンのＴＬＢ（Translation Lookaside Buffer）フォルトを検出すると、ＤＡＴをエミュレートする。その結果をシャドウ・ページ・テーブルに登録する。
（３）ゲストマシンのＤＡＴテーブルが更新された場合やＴＬＢの削除操作（例えば、ＩＢＭ社のSystem/370のINVALIDATE PAGE TABLE ENTRY（ＩＰＴＥ）命令やPURGE TLB（ＰＴＬＢ）命令などがあげられる。）が行われた場合には、シャドウ・ページ・テーブルの該当部分を削除する。
【０００７】
また、動的バイナリ変換は、ゲスト仮想ページに対して変換コードを作成する方式とゲスト物理ページに対して変換コードを作成する方式の２種類があるが、前者の方が主流である。前者の方式の場合、ＤＡＴテーブルが更新を受けたりＴＬＢ操作が行われた場合にはゲスト仮想ページが削除されるので、そのゲスト仮想ページを基にして翻訳された変換コードもまた削除する必要がある。そのためシャドウページ方式を用いた場合、このシャドウ・ページ・テーブルと連動して変換コードを管理する必要がある。
【０００８】
図１は、シャドウページ方式で動的バイナリ変換された変換コードを管理する様子を模式的に表している。シャドウテーブルには、ホスト仮想ページアドレスと、このホスト仮想ページアドレスに係るコードが格納されているホスト物理ページへのポインタと、このようなコードのコード変換の結果である変換コードが格納されているホスト物理ページへのポインタとが登録されている。ゲスト仮想ページは仮想マシン内でホスト仮想ページに変換される（ステップ（１０１））。このホスト仮想ページのアドレスをキーにしてシャドウテーブル内の検索が行われ（ステップ（１０２））、該当するエントリのポインタにより、ＤＡＴが写像すべきホスト物理ページ１００１と翻訳を行った変換コード１００２に到達することができる。シャドウテーブルはＤＡＴに従い動的にサイズが変わっていく。図１ではシャドウテーブルを線形的なテーブルで表しているが、実際には階層テーブルやハッシュテーブルであることもある。またホスト仮想ページアドレスとホスト物理ページ、ホスト仮想ページアドレスと変換コードの管理表は分れている場合もある。
【先行技術文献】
【特許文献】
【０００９】
【特許文献１】米国特許第７２９９３３７号公報
【非特許文献】
【００１０】
【非特許文献１】Keith Adams et al: A Comparison of Software and Hardware Techniques for x86 Virtualization, ASPLOS' 06 October 21-25, 2006, San Jose, California
【発明の概要】
【発明が解決しようとする課題】
【００１１】
シャドウページ方式において、ゲスト仮想ページからゲスト物理ページへの写像関係は多対１になるため、シャドウ・ページ・テーブルのサイズは固定的には決まらない。このため、実行に先立ってシャドウ・ページ・テーブルを静的に割り付けることができないという問題がある。
【００１２】
また、ＤＡＴテーブルの書き替えによって動的バイナリ変換によって生成した変換コードの内容が不正になったり、変換コードが使用されなくなって不要になることがある。このようなタイミングはゲストマシン上のプログラムに明示的に示されることが少ないため、変換コードを破棄するタイミングの判定が困難で、またシャドウ・ページ・テーブルのメンテナンスも難しい。
【００１３】
すなわち、シャドウ・ページ・テーブルの利用は、仮想マシンにおいて動的バイナリ変換を適用する上で必ずしも効率的ではない。
【００１４】
よって、本技術の目的は、仮想マシンにおいて動的バイナリ変換を適用する上で効率的なメモリ管理技術を提供することである。
【課題を解決するための手段】
【００１５】
本仮想化処理方法は、ホストマシンに、仮想的なコンピュータであるゲストマシンを実行させるための方法である。そして、特定のゲスト仮想ページへのアクセスの際に、特定のゲスト仮想ページのアドレスに対応するゲスト物理ページアドレスを特定するステップと、ゲスト物理ページの数分エントリを有しており且つ各ゲスト物理ページアドレスにゲスト仮想ページアドレスと対応するホスト物理ページへのポインタと当該ホスト物理ページに格納されているコードをホストマシン向けに変換したコードである変換コードへのポインタとを格納するための変換テーブルから、特定されたゲスト物理ページアドレスについてのエントリを読み出し、変換コードへのポインタが含まれているか判断するステップと、変換コードへのポインタが含まれている場合には、読み出されたエントリに含まれるゲスト仮想ページアドレスと特定のゲスト仮想ページのアドレスとを比較する比較ステップと、読み出されたエントリに含まれるゲスト仮想ページアドレスと特定のゲスト仮想ページのアドレスとが一致する場合には、読み出されたエントリに含まれる変換コードへのポインタにより当該変換コードを読み出して実行するステップとを含む。
【発明の効果】
【００１６】
仮想マシンにおいて動的バイナリ変換を適用する上で効率的なメモリ管理が可能となる。
【図面の簡単な説明】
【００１７】
【図１】図１は、従来技術を説明するための図である。
【図２】図２は、メモリ空間の関係を説明するための図である。
【図３】図３は、本実施の形態の概要を説明するための模式図である。
【図４】図４は、本実施の形態の概要を説明するための模式図である。
【図５】図５は、本実施の形態の概要を説明するための模式図である。
【図６】図６は、ホストマシンのシステム構成図である。
【図７】図７は、本実施の形態におけるメインの処理フローを示す図である。
【図８】図８は、αテーブル検索処理の第１の処理フローを示す図である。
【図９】図９は、登録処理の処理フローを示す図である。
【図１０】図１０は、共有メモリについて説明するための図である。
【図１１】図１１は、共有メモリに対応するためのαテーブルの概要を示す図である。
【図１２】図１２は、αテーブル検索処理の第２の処理フローを示す図である。
【図１３】図１３は、コンピュータの機能ブロック図である。
【発明を実施するための形態】
【００１８】
［実施の形態の概要］
ホストマシンのＣＰＵ（Central Processing Unit）が以下で述べるＣＰＵエミュレータを実行することで、ゲストマシンのＣＰＵを仮想的にエミュレートする。このＣＰＵエミュレータが動作するホストマシンにおける仮想及び物理メモリ空間の配置と、ＣＰＵエミュレータが仮想的に実行するゲストマシンにおける仮想メモリ空間と物理メモリ空間との対応関係を図２に示す。
【００１９】
図２の左側がエミュレーションされるゲストマシンにおけるメモリアクセスを模式的に示しており、図２の右側がこのメモリアクセスをホストマシン上でエミュレートした様子を模式的に示す。
【００２０】
まず、ゲストマシン起動時に、ホスト物理空間上に当該ゲストマシンの物理メモリ用の領域Ａを確保する。ＣＰＵエミュレータは、ホスト仮想空間上で動作しており、ホスト仮想空間上には、ゲストマシンのゲスト仮想空間に対応する窓（すなわち、ゲスト仮想メモリアクセス領域Ｂ）を設けるものとする。
【００２１】
また、ゲストマシン起動時には、ホスト物理空間に、確保されたゲスト物理メモリ用の領域Ａに含まれるページ数分のエントリを固定的に有するαテーブルの領域も確保され、ＣＰＵエミュレータにより、各エントリには各ページへのポインタが設定される。さらに、ホスト物理空間には、ゲスト物理メモリ用の領域Ａに格納されているコードをホストマシン用にコード変換（翻訳とも呼ぶ）した結果である変換コードを格納する変換コード管理領域も含まれる。
【００２２】
このような状況において、ゲスト仮想ページPage1がゲスト物理ページPage2に写像されるものとする（図２のゲストＤＡＴ）。この動作をエミュレートするため、ＣＰＵエミュレータはゲスト仮想メモリアクセス領域Ｂ上で、Page1に対応するホスト仮想ページPage4にアクセスする。そして、ホストマシンのＤＡＴでホスト仮想ページPage4をホスト物理ページPage3に写像できれば、ゲストマシンのメモリアクセスをホストマシンがエミュレートしたことになる。本実施の形態では、ゲストＤＡＴとホストＤＡＴとの整合性については、従来技術によって担保することとし、これ以上述べないこととする。
【００２３】
本実施の形態では、上で述べたαテーブルを導入することによって、例えばゲスト仮想ページPage1にアクセスする際に、対応するホスト物理ページPage3に効率的にアクセスできるようにすると共に、対応するホスト物理ページPage3に格納されているコードのコード変換の結果である変換コードに効率的にアクセスできるようにする。
【００２４】
図３に、αテーブルを用いたメモリアクセスを模式的に示す。αテーブルは、ゲスト物理ページ数分のエントリを固定的に有するテーブルであり、ゲスト物理ページ番号順にエントリは並べられている。このαテーブルは、ゲスト仮想ページアドレスの列Ｘと、対応するホスト物理ページへのポインタの列Ｙと、対応するホスト物理ページに格納されているコードのコード変換の結果である変換コードへのポインタの列Ｚとを有する。
【００２５】
ゲスト仮想ページアドレスの列Ｘには、ゲスト物理ページに格納されているコードに対して動的バイナリ変換を実施した時のゲスト仮想ページのアドレス値が格納される。すなわち、変換コードの列Ｚのアドレスに格納されている変換コードが有効であるゲスト仮想ページアドレスが登録されている。また、エントリの位置とホスト物理ページへのポインタへの列Ｙとで、ゲスト物理ページとホスト物理ページの対応関係を表している。
【００２６】
このようなαテーブルを用いてゲスト仮想ページアドレスからホストマシン用に翻訳されている変換コードを検索する場合、まずゲスト仮想ページアドレスをＤＡＴを用いてゲスト物理ページアドレスへ変換する。但し、この変換にはシャドウ・ページ・テーブル等の他の手法を用いても良い。
【００２７】
そして、ゲスト物理ページアドレスをキーにしてαテーブルを検索し、当該αテーブルから該当するエントリを特定する。αテーブルはゲスト物理ページ番号順に並んでいるので、この検索は単純な一次変換となる。この検索によって特定されたエントリにより、ホスト物理ページへのポインタ及び変換コードへのポインタが得られ、それらに容易にアクセスすることができる。しかしながら、シャドウページ方式と異なり、ゲスト仮想ページとゲスト物理ページが多対一となってしまっている場合には、同一のエントリに重複してヒットしてしまう。そのため、あるゲスト仮想ページアドレスからαテーブルで辿って変換コードを特定できても、この変換コードが検索元のゲスト仮想ページを翻訳したものとは限らない。このため検索元となるゲスト仮想ページのアドレスとαテーブル内のゲスト仮想ページアドレスの列Ｘのアドレス値とを比較することでチェックを行う。これが一致する場合には、変換コードは有効であり実行可能である。不一致の場合には変換コードは無効であり、削除する必要がある。同様に、αテーブルにおける該当エントリに含まれるポインタも破棄すべきである。
【００２８】
例えば図４に示すように、最初に、ゲスト仮想ページアドレスａａａがαテーブルの列Ｘに登録されてものとする。そうすると、ゲスト仮想ページアドレスａａａにアクセスした際、ＤＡＴ等によりゲスト物理ページアドレスＡＡＡを得て、当該ゲスト物理ページアドレスＡＡＡで、αテーブルにアクセスすると、ゲスト仮想ページアドレスの列Ｘにはゲスト仮想ページアドレスａａａが登録されているので、列Ｚに変換コードへのポインタが登録されていれば、変換コードを得ることができる。
【００２９】
しかし、その後ＤＡＴテーブル等が書き換えられ、図５に示すように、ゲスト仮想ページアドレスａａａがＤＡＴ等によりゲスト物理ページアドレスＢＢＢに写像され、ゲスト仮想ページアドレスｂｂｂがＤＡＴ等によりゲスト物理ページアドレスＡＡＡに写像されるようになったとする。
【００３０】
このとき、ＤＡＴテーブル等が書き換えられた後に別途変換コードを削除するような処理を実施しなければ、図５に示すように、ゲスト物理ページアドレスＡＡＡのエントリの列Ｘには、ゲスト仮想ページアドレスａａａが残っており、列Ｚには、元の変換コードへのポインタが残ってしまっている。
【００３１】
そうすると、ゲスト仮想ページアドレスｂｂｂにアクセスする際には、ＤＡＴ等によりゲスト物理ページアドレスＡＡＡが得られて、当該ゲスト物理ページアドレスＡＡＡにアクセスしても、αテーブルの列Ｘのアドレス値ａａａと一致しないので、列Ｚに格納されている変換コードへのポインタ及び変換コード自体無効である。従って、このタイミングで変換コードを削除し、αテーブルの列Ｚの変換コードへのポインタも削除する。
【００３２】
一方、ゲスト仮想ページアドレスａａａにアクセスする際には、ＤＡＴ等によりゲスト物理ページアドレスＢＢＢが得られてゲスト物理ページアドレスＢＢＢにアクセスしても、αテーブルの列Ｘには初期値が登録されているだけで、列Ｚには変換コードへのポインタも登録されていない状態である。
【００３３】
図４の場合も図５の場合も、ここでαテーブルの列Ｙに格納されているホスト物理ページアドレスにアクセスして、格納されているコードに対してコード変換処理を実施し、新たに変換コードを生成する。そして、αテーブルの列Ｚに、当該変換コードのアドレスを登録すると共に、αテーブルの列Ｘに、今回有効となったゲスト仮想ページアドレスを登録する。このようにすれば、同じゲスト仮想ページにアクセスする際今後適正な変換コードの実行速度を速くすることができる。
【００３４】
以下、本実施の形態で導入されたαテーブルを用いてどのように処理を実施するのかについて具体的に述べる。
【００３５】
［本実施の形態の具体的内容］
図６に、本実施の形態のαテーブルに関わるシステム構成を示す。ホストマシン１のホストＣＰＵがＣＰＵエミュレータ１００を実行することで、ゲストマシンのＣＰＵを仮想的にエミュレートする。ＣＰＵエミュレータ１００は、命令インタプリタ１０１と、変換コード検索部１０３と、動的バイナリ変換部１０５とを有する。また、ホストマシン１のホスト主記憶２００には、ゲスト主記憶領域２０１と、αテーブル２０３と、変換コード管理領域２０５とが設けられている。ゲスト主記憶領域２０１には、ゲストマシンのプログラムであるゲストプログラム２０１１が格納されており、αテーブル２０３には、ゲスト仮想ページ数分のエントリ２０３１が含まれており、変換コード管理領域２０５にはゲストプログラム２０１１のコード変換の結果である変換コード２０５１が格納されている。上で述べたように、エントリ２０３１は、変換コード２０５１を指し示している場合がある。
【００３６】
ＣＰＵエミュレータ１００は、最初命令インタプリタ１０１を用いて、ゲスト主記憶領域２０１上のゲストプログラム２０１１の実行を行う（図６（１））。これはゲスト主記憶領域２０１上に格納されているゲストマシン命令の逐語解釈実行となる。しかし命令インタプリタ１０１の実行速度は遅い。その性能を改善するために、動的バイナリ変換部１０５により、ゲストマシンの命令列をホストマシン１用のコードに変換することによって変換コード２０５１を生成し、変換コード管理領域２０５に登録する。さらに、αテーブル２０３の該当エントリ２０３１の更新も行う（図６（６））。変換コード２０５１の登録後に、ＣＰＵエミュレータ１００の変換コード検索部１０３は、本実施の形態の概要の欄で述べたように、αテーブル２０３の検索を実施し（図６（４））、適正な変換コード２０５１が変換コード管理領域２０５に格納されていることが分かれば、ＣＰＵエミュレータ１００は、ゲストプログラム２０１１の逐語解釈実行ではなく変換コード２０５１を実行する（図６（５））。これによって処理の高速化が図られる。
【００３７】
また、命令インタプリタ１０１がＤＡＴテーブルの一部を無効化するゲストマシン命令（例えばＩＰＴＥ命令等）を逐語解釈実行する場合には、変換コード管理領域２０５に格納されている該当変換コード２０５１を削除する（図６（２））。また、図４及び図５で説明したように、αテーブル２０３の検索を行った結果、無効な変換コード２０５１を検出した場合には、変換コード検索部１０３が、αテーブル２０３の該当エントリ２０３１における変換コード２０５１へのポインタを削除すると共に、変換コード管理領域２０５に格納されている該当変換コード２０５１を削除する（図６（３））。
【００３８】
なお、命令インタプリタ１０１が、ＴＬＢをフラッシュするゲストマシン命令（例えばＩＢＭ社のSystem/370のＰＴＬＢ命令など）を逐語解釈実行する場合や、ＤＡＴテーブルの無効化命令なしでＤＡＴテーブルを書き換えた場合、αテーブル２０３に登録されている仮想ページ−物理ページの写像関係と実際のＤＡＴテーブルとの間の一貫性が崩れることになる。これは図４及び図５で述べたような処理にて検出可能なため、ＴＬＢフラッシュ操作やＤＡＴテーブルの書き替え操作のタイミングではαテーブル２０３の更新は行わない。これによって、メモリ管理に必要な処理の効率化が図られる。
【００３９】
次に、図７乃至図１２を用いて、図６のシステムの処理内容について詳細に説明する。まず、命令インタプリタ１０１が特定のゲスト仮想ページへのアクセスを行う際には、命令インタプリタ１０１は、変換コード検索部１０３にアクセス先のゲスト仮想ページのアドレスを出力し、変換コード検索部１０３は、ＤＡＴテーブル等により当該特定のゲスト仮想ページアドレスからゲスト物理ページアドレスを特定する（図７：ステップＳ１）。そして、変換コード検索部１０３は、特定されたゲスト物理ページアドレスによるαテーブル検索処理を実施する（ステップＳ３）。このαテーブル検索処理については、図８を用いて説明する。
【００４０】
まず、変換コード検索部１０３は、特定されたゲスト物理ページアドレスでαテーブル２０３を検索し、当該ゲスト物理ページアドレスのエントリを読み出す（ステップＳ２１）。そして、変換コード検索部１０３は、読み出したエントリに変換コードへのポインタが登録済みであるか判断する（ステップＳ２３）。読み出したエントリに変換コードへのポインタが登録されていない場合には、そのまま元の処理に戻る。
【００４１】
一方、読み出したエントリに変換コードへのポインタが登録されていれば、変換コード検索部１０３は、特定のゲスト仮想ページアドレスと、当該エントリに含まれているゲスト仮想ページアドレスとが一致するか判断する（ステップＳ２５）。一致しない場合には、変換コード検索部１０３は、読み出したエントリに含まれる変換コードへのポインタで指し示されている変換コードを削除し（ステップＳ２９）、当該エントリにおける変換コードへのポインタを削除する（ステップＳ３０）。そして、元の処理に戻る。
【００４２】
一方、特定のゲスト仮想ページアドレスと、当該エントリに含まれているゲスト仮想ページアドレスとが一致する場合には、有効な変換コードが得られることを意味するので、変換コード検索部１０３は、読み出されたエントリにおける変換コードへのポインタを特定し、保持する（ステップＳ２７）。そして元の処理に戻る。
【００４３】
このように２つの条件を満たしていれば有効な変換コードを用いることができ、２つの条件のうち少なくともいずれかを満たさない場合には、有効な変換コードを用いることができない。
【００４４】
図７の処理の説明に戻って、変換コード検索部１０３は、ステップＳ３の結果、変換コードへのポインタを特定して保持しているか判断する（ステップＳ５）。変換コードへのポインタを特定して保持している場合には、ＣＰＵエミュレータ１００は、変換コードへのポインタで変換コード管理領域２０５から該当する変換コードを読み出して、実行する（ステップＳ１１）。
【００４５】
一方、変換コードへのポインタを特定していない場合には、変換コード検索部１０３は、動的バイナリ変換部１０５に、αテーブル２０３において該当するエントリに含まれるホスト物理ページへのポインタと、ゲスト仮想ページアドレス及びゲスト物理ページアドレスとを出力し、動的バイナリ変換部１０５は、当該ポインタで指し示されるホスト物理ぺージに格納されているコードに対して周知のコード変換処理を実施し、生成された変換コードを変換コード管理領域２０５に格納する（ステップＳ７）。そして、動的バイナリ変換部１０５は、αテーブル２０３への登録処理を実施する（ステップＳ９）。本登録処理については図９を用いて説明する。
【００４６】
動的バイナリ変換部１０５は、変換コード検索部１０３から受け取ったゲスト物理ページアドレスでαテーブル２０３の該当エントリを特定する（ステップＳ３１）。そして、当該エントリに、ゲスト仮想ページアドレスを上書き保存すると共に、今回生成した変換コードへのポインタも登録する（ステップＳ３３）。これによって、正しいデータが、αテーブル２０３の該当エントリに登録されるようになって、当該エントリのデータを利用することで、ゲストプログラム２０１１が高速に実行されるようになる。そして元の処理に戻る。
【００４７】
図７の処理の説明に戻って、ステップＳ９の後には、ＣＰＵエミュレータ１００は、動的バイナリ変換部１０５が保持する変換コードへのポインタで新たに生成した変換コードを取得して、変換コードを実行する（ステップＳ１１）。
【００４８】
以上のような処理を、処理終了まで繰り返し（ステップＳ１３）、動的バイナリ変換を利用して高速な実行が可能な仮想マシンが実現される。
【００４９】
なお、ステップＳ７及びＳ９の代わりに、より高速にするために動的バイナリ変換を非同期に別プロセッサに任せ、未だ変換されていない場合は変換コードではなくインタプリタで実行する方式を採用する場合もある。
【００５０】
なお、上で述べた処理を実施することにより、αテーブル２０３の各エントリはゲスト仮想ページと一対一の写像関係を持つという一貫性を維持することが可能である。
【００５１】
但し、共有メモリに対しても同様の処理を行うと、変換コードの削除が頻発し性能低下が問題になる可能性がある。共有メモリとは一般的なＯＳ（Operating System）で使用される技術で、図１０に示すように複数の仮想アドレス空間１乃至３から同一の物理アドレス空間への写像を許す技術である。特に一般的なＯＳはカーネルに関するコードを共有メモリに配置することが多いため、これまで述べたαテーブル方式をそのまま適用すると、ＯＳカーネルに対する動的バイナリ変換で性能が向上しない。
【００５２】
このため、共有メモリに関しては、ゲスト物理ページに対して複数のゲスト仮想ページを対応させることを許すように構成する。具体的には、図１１に示すように、αテーブル２０３のゲスト仮想ページアドレスの列Ｘを、ページ共有の判定ビット、仮想空間を区別する空間識別子及びページアドレスに細分化する。そして、アクセス先のページが仮想空間間で共有されているかどうかはページ共有判定ビットで区別する。アクセス先のページが非共有ページの場合は、空間識別子とページアドレスの両方を用いて、図８のステップＳ２５の判断を実施する。一方、共有メモリの場合には空間識別子を無視してページアドレスのみを比較すればよい。
【００５３】
一般に、あるページが共有メモリとして使用されているか否かは、ゲストマシンのハードウェア特性（例えばＩＢＭ社のSystem/370におけるcommon segment bit、Intel 386のＰＴＥにおけるglobal bitなど）やゲストＯＳの特性（i386/Linuxの場合、各仮想アドレス空間４ＧＢの後半１ＧＢがカーネルの使用と決まっている）から定まる。従って、このような情報を基に用意される動的バイナリ変換部１０５は、変換対象となったページが共有メモリかどうかの情報をαテーブルエントリの登録時にページ共有判定ビットに反映させる。
【００５４】
具体的には、図８の代わりに、図１２のαテーブル検索処理を実施する。
【００５５】
まず、変換コード検索部１０３は、特定されたゲスト物理ページアドレスでαテーブル２０３を検索し、当該ゲスト物理ページアドレスのエントリを読み出す（ステップＳ４１）。そして、変換コード検索部１０３は、読み出したエントリに変換コードへのポインタが登録済みであるか判断する（ステップＳ４３）。読み出したエントリに変換コードへのポインタが登録されていない場合には、そのまま元の処理に戻る。
【００５６】
一方、読み出したエントリに変換コードへのポインタが登録されていれば、変換コード検索部１０３は、読み出したエントリに含まれるページ共有判定ビットがオンであるか判断する（ステップＳ４５）。ページ共有判定ビットがオンであれば、共有ページであるから、変換コード検索部１０３は、命令インタプリタ１０１から受け取ったゲスト仮想ページアドレスのページアドレス部分と、読み出したエントリにおけるゲスト仮想ページアドレスのページアドレス部分とが一致するか判断する（ステップＳ４７）。すなわち、空間識別子部分を除外して比較する。一致する場合には、変換コード検索部１０３は、読み出したエントリにおける変換コードへのポインタを特定し、保持する（ステップＳ４９）。そして元の処理に戻る。一方、一致しない場合には、変換コード検索部１０３は、変換コード検索部１０３は、読み出したエントリに含まれる変換コードへのポインタで指し示されている変換コードを削除し（ステップＳ５３）、当該エントリにおける変換コードへのポインタを削除する（ステップＳ５５）。そして、元の処理に戻る。
【００５７】
また、読み出したエントリにおけるページ共有判定ビットがオフであれば、非共有ページであるから、変換コード検索部１０３は、命令インタプリタ１０１から受け取ったゲスト仮想ページアドレスと、読み出したエントリにおける空間識別子とページアドレスを含むゲスト仮想ページアドレスとが一致するか判断する（ステップＳ５１）。非共有メモリについては空間識別子をも含めて一致するか判断する。一致する場合には、変換コード検索部１０３は、ステップＳ４９に移行する。一方、不一致の場合には、ステップＳ５３に移行する。
【００５８】
以上のような処理を実施すれば、共有メモリが存在する場合においても、αテーブルを問題なく活用することができるようになる。
【００５９】
以上本技術の実施の形態を説明したが、本技術はこれに限定されるものではない。例えば、上で述べた具体的な命令名は、一例であって、他のＯＳにおける実質的に同一の機能を果たす命令であれば該当する。さらに、上でも述べたが、動的バイナリ変換部１０５を別のＣＰＵなどに設けて、ゲストプログラム２０１１に対して別スレッドで変換処理を実施して、変換完了ページについて随時変換コードへのポインタをαテーブル２０３に登録するようにしても良い。このような場合には、図７のステップＳ７及びＳ９の代わりに、命令インタプリタ１０１により、αテーブル２０３から得られたホスト物理ページへのポインタで得られるコードを逐次実行する。後に同一のゲスト仮想ページアドレスにアクセスする際に、変換コードが生成済みであれば、ステップＳ１１に移行して変換コードを得て実行することができる。
【００６０】
また、処理フローについても一例であって、同一の機能を果たすことができれば、順番を入れ替えたり、並列実行される場合もある。
【００６１】
なお、上で述べたホストマシン１は、コンピュータ装置であって、図１３に示すように、メモリ２５０１とＣＰＵ２５０３とハードディスク・ドライブ（ＨＤＤ）２５０５と表示装置２５０９に接続される表示制御部２５０７とリムーバブル・ディスク２５１１用のドライブ装置２５１３と入力装置２５１５とネットワークに接続するための通信制御部２５１７とがバス２５１９で接続されている。オペレーティング・システム（ＯＳ：Operating System）及び本実施例における処理を実施するためのアプリケーション・プログラムは、ＨＤＤ２５０５に格納されており、ＣＰＵ２５０３により実行される際にはＨＤＤ２５０５からメモリ２５０１に読み出される。必要に応じてＣＰＵ２５０３は、表示制御部２５０７、通信制御部２５１７、ドライブ装置２５１３を制御して、必要な動作を行わせる。また、処理途中のデータについては、メモリ２５０１に格納され、必要があればＨＤＤ２５０５に格納される。本技術の実施例では、上で述べた処理を実施するためのアプリケーション・プログラムはコンピュータ読み取り可能なリムーバブル・ディスク２５１１に格納されて頒布され、ドライブ装置２５１３からＨＤＤ２５０５にインストールされる。インターネットなどのネットワーク及び通信制御部２５１７を経由して、ＨＤＤ２５０５にインストールされる場合もある。このようなコンピュータ装置は、上で述べたＣＰＵ２５０３、メモリ２５０１などのハードウエアとＯＳ及び必要なアプリケーション・プログラムとが有機的に協働することにより、上で述べたような各種機能を実現する。
【００６２】
以上本実施の形態をまとめると以下のようになる。
【００６３】
本仮想化処理方法は、ホストマシンに、仮想的なコンピュータであるゲストマシンを実行させるための方法である。そして、特定のゲスト仮想ページへのアクセスの際に、特定のゲスト仮想ページのアドレスに対応するゲスト物理ページアドレスを特定するステップと、ゲスト物理ページの数分エントリを有しており且つ各ゲスト物理ページアドレスにゲスト仮想ページアドレスと対応するホスト物理ページへのポインタと当該ホスト物理ページに格納されているコードをホストマシン向けに変換したコードである変換コードへのポインタとを格納するための変換テーブルから、特定されたゲスト物理ページアドレスについてのエントリを読み出し、変換コードへのポインタが含まれているか判断するステップと、変換コードへのポインタが含まれている場合には、読み出されたエントリに含まれるゲスト仮想ページアドレスと特定のゲスト仮想ページのアドレスとを比較する比較ステップと、読み出されたエントリに含まれるゲスト仮想ページアドレスと特定のゲスト仮想ページのアドレスとが一致する場合には、読み出されたエントリに含まれる変換コードへのポインタにより当該変換コードを読み出して実行するステップとを含む。
【００６４】
上で述べたような変換テーブルを用いることによって、変換テーブルのエントリ数をホスト物理ページ数に限定でき、メンテナンスも容易で、仮想マシンにおいて動的バイナリ変換を効率的に行うことができるようになる。
【００６５】
また、本仮想化処理方法では、読み出されたエントリに含まれるゲスト仮想ページアドレスと特定のゲスト仮想ページのアドレスとが不一致である場合には、読み出されたエントリに含まれる変換コードへのポインタを削除すると共に、当該ポインタで指定されたページに格納されている当該変換コードを削除するステップをさらに含むようにしても良い。上で述べたような条件が成立すれば、動的アドレス変換（ＤＡＴ）テーブルの書き換えやＴＬＢ（Translation Lookaside Buffer）のフラッシュが発生したことが分かるので、不要な変換コードを破棄することができるようになる。なお、ＤＡＴテーブルの一部を無効化するゲストマシン命令を実行することが分かれば、この際にも該当する変換コードを削除して、変換テーブルにおける該当エントリの変換コードへのポインタを破棄すればよい。
【００６６】
また、本仮想化処理方法では、読み出されたエントリに含まれるゲスト仮想ページアドレスと特定のゲスト仮想ページのアドレスが不一致である場合又は読み出されたエントリに変換コードへのポインタが含まれていない場合、読み出されたエントリに含まれるホスト物理ページへのポインタにより当該ホスト物理ページに格納されているコードを読み出して、コード変換処理を実施するステップと、特定されたゲスト物理ページアドレスについてのエントリに、特定のゲスト仮想ページのアドレスとコード変換処理によって生成された変換コードが格納されているホスト物理ページのアドレスを格納するステップと、コード変換処理によって生成された変換コードを実行するステップとをさらに含むようにしても良い。このように直ぐに変換コードを実行できない場合においても、変換テーブルの該当エントリから、コード変換処理を実施すべきコードの格納場所が特定できるので、コード変換処理をスムーズに実行することができる。
【００６７】
さらに、変換テーブルにおける有効なゲスト仮想ページアドレスが、ページ共有判定ビットと空間識別子とページアドレスとを含むようにしてもよい。この場合、上で述べた比較ステップにおいて、ページ共有判定ビットがセットされている場合には、読み出されたエントリに含まれるゲスト仮想ページアドレスのうちページアドレスと、特定のゲスト仮想ページのアドレスのうち空間識別子以外の部分とを比較し、ページ共有判定ビットがセットされていない場合には、読み出されたエントリに含まれる有効なゲスト仮想ページアドレスのうち空間識別子及びページアドレスと特定のゲスト仮想ページのアドレスとを比較するようにしてもよい。例えば、複数のゲストマシンで共有するメモリ領域以外の部分については、上で述べたような構成にてゲスト仮想ページアドレスとホスト物理アドレスとの一対一関係を表すことができる。しかしながら、複数のゲストマシンで共有するメモリ領域については、多対一の写像関係を有効に表す必要があるので、上で述べたような構成を採用すれば、変換コードを効率よく利用できるようになる。
【００６８】
なお、上で述べたような処理をホストマシンに実施させるためのプログラムを作成することができ、当該プログラムは、例えばフレキシブル・ディスク、ＣＤ−ＲＯＭ、光磁気ディスク、半導体メモリ、ハードディスク等のコンピュータ読み取り可能な記憶媒体又は記憶装置に格納される。なお、処理途中のデータについては、コンピュータのメモリ等の記憶装置に一時保管される。
【００６９】
以上の実施例を含む実施形態に関し、さらに以下の付記を開示する。
【００７０】
（付記１）
ホストマシンに、仮想的なコンピュータであるゲストマシンを実行させるための仮想化プログラムであって、
特定のゲスト仮想ページへのアクセスの際に、前記特定のゲスト仮想ページのアドレスに対応するゲスト物理ページアドレスを特定するステップと、
ゲスト物理ページの数分エントリを有しており且つ各ゲスト物理ページアドレスにゲスト仮想ページアドレスと対応するホスト物理ページへのポインタと当該ホスト物理ページに格納されているコードを前記ホストマシン向けに変換したコードである変換コードへのポインタとを格納するための変換テーブルから、特定された前記ゲスト物理ページアドレスについてのエントリを読み出し、前記変換コードへのポインタが含まれているか判断するステップと、
前記変換コードへのポインタが含まれている場合には、読み出された前記エントリに含まれるゲスト仮想ページアドレスと前記特定のゲスト仮想ページのアドレスとを比較する比較ステップと、
読み出された前記エントリに含まれるゲスト仮想ページアドレスと前記特定のゲスト仮想ページのアドレスとが一致する場合には、読み出された前記エントリに含まれる前記変換コードへのポインタにより当該変換コードを読み出して実行するステップと、
を実行させるための仮想化プログラム。
【００７１】
（付記２）
読み出された前記エントリに含まれるゲスト仮想ページアドレスと前記特定のゲスト仮想ページのアドレスとが不一致である場合には、読み出された前記エントリに含まれる前記変換コードへのポインタを削除すると共に、当該ポインタで指定されたページに格納されている当該変換コードを削除するステップ
をさらに含む付記１記載の仮想化プログラム。
【００７２】
（付記３）
読み出された前記エントリに含まれるゲスト仮想ページアドレスと前記特定のゲスト仮想ページのアドレスが不一致である場合又は読み出された前記エントリに前記変換コードへのポインタが含まれていない場合、読み出された前記エントリに含まれる前記ホスト物理ページへのポインタにより当該ホスト物理ページに格納されているコードを読み出して、コード変換処理を実施するステップと、
特定された前記ゲスト物理ページアドレスについてのエントリに、前記特定のゲスト仮想ページのアドレスと前記コード変換処理によって生成された変換コードが格納されているホスト物理ページのアドレスを格納するステップと、
前記コード変換処理によって生成された変換コードを実行するステップと、
をさらに実行させるための付記１又は２記載の仮想化プログラム。
【００７３】
（付記４）
前記変換テーブルにおける前記有効なゲスト仮想ページアドレスが、ページ共有判定ビットと空間識別子とページアドレスとを含み、
前記比較ステップにおいて、
前記ページ共有判定ビットがセットされている場合には、読み出された前記エントリに含まれる前記ゲスト仮想ページアドレスのうち前記ページアドレスと、前記特定のゲスト仮想ページのアドレスのうち前記空間識別子以外の部分とを比較し、
前記ページ共有判定ビットがセットされていない場合には、読み出された前記エントリに含まれる前記ゲスト仮想ページアドレスのうち前記空間識別子及び前記ページアドレスと前記特定のゲスト仮想ページのアドレスとを比較する
付記１乃至３のいずれか１つ記載の仮想化プログラム。
【００７４】
（付記５）
ホストマシンに、仮想的なコンピュータであるゲストマシンを実行させる仮想化処理方法であって、
特定のゲスト仮想ページへのアクセスの際に、前記特定のゲスト仮想ページのアドレスに対応するゲスト物理ページアドレスを特定するステップと、
ゲスト物理ページの数分エントリを有しており且つ各ゲスト物理ページアドレスにゲスト仮想ページアドレスと対応するホスト物理ページへのポインタと当該ホスト物理ページに格納されているコードを前記ホストマシン向けに変換したコードである変換コードへのポインタとを格納するための変換テーブルから、特定された前記ゲスト物理ページアドレスについてのエントリを読み出し、前記変換コードへのポインタが含まれているか判断するステップと、
前記変換コードへのポインタが含まれている場合には、読み出された前記エントリに含まれるゲスト仮想ページアドレスと前記特定のゲスト仮想ページのアドレスとを比較する比較ステップと、
読み出された前記エントリに含まれるゲスト仮想ページアドレスと前記特定のゲスト仮想ページのアドレスとが一致する場合には、読み出された前記エントリに含まれる前記変換コードへのポインタにより当該変換コードを読み出して実行するステップと、
を含む仮想化処理方法。
【００７５】
（付記６）
仮想的なコンピュータであるゲストマシンを実行させるホストマシンであって、
特定のゲスト仮想ページへのアクセスの際に、前記特定のゲスト仮想ページのアドレスに対応するゲスト物理ページアドレスを特定する手段と、
ゲスト物理ページの数分エントリを有しており且つ各ゲスト物理ページアドレスにゲスト仮想ページアドレスと対応するホスト物理ページへのポインタと当該ホスト物理ページに格納されているコードを前記ホストマシン向けに変換したコードである変換コードへのポインタとを格納するための変換テーブルを格納するメモリと、
前記変換テーブルから、特定された前記ゲスト物理ページアドレスについてのエントリを読み出し、前記変換コードへのポインタが含まれているか判断し、前記変換コードへのポインタが含まれている場合には、読み出された前記エントリに含まれるゲスト仮想ページアドレスと前記特定のゲスト仮想ページのアドレスとを比較し、読み出された前記エントリに含まれるゲスト仮想ページアドレスと前記特定のゲスト仮想ページのアドレスとが一致する場合には、読み出された前記エントリに含まれる前記変換コードへのポインタにより当該変換コードを読み出して実行する手段と、
を有するホストマシン。
【符号の説明】
【００７６】
１  ホストマシン    １００  ＣＰＵエミュレータ
２００  ホスト主記憶
１０１  命令インタプリタ    １０３  変換コード検索部
１０５  動的バイナリ変換部
２０１  ゲスト主記憶領域    ２０３  αテーブル
２０５  変換コード管理領域
２０１１  ゲストプログラム
２０５１  変換コード
【図１】
2010257049.tif 000003
【図２】
2010257049.tif 000004
【図３】
2010257049.tif 000005
【図４】
2010257049.tif 000006
【図５】
2010257049.tif 000007
【図６】
2010257049.tif 000008
【図７】
2010257049.tif 000009
【図８】
2010257049.tif 000010
【図９】
2010257049.tif 000011
【図１０】
2010257049.tif 000012
【図１１】
2010257049.tif 000013
【図１２】
2010257049.tif 000014
【図１３】
2010257049.tif 000015