(57)【要約】【課題】  軽負荷かつ広範囲に適用可能な仮想マシン間メモリ共有制御を実現する。【解決手段】  仮想マシンモニタ装置１のオブジェクトファイルマッピング情報生成部１１は，仮想マシンのゲストＯＳを構成するオブジェクトファイル４からテキストセグメントの仮想ページへのマッピング情報をデータベース化する。仮想マシン起動時に，仮想ページ・オブジェクト対応管理部１３は，オブジェクトファイルとその仮想ページとを対応づけて管理し，メモリマッピング時に，オブジェクト・マシンページ対応管理部１７は，オブジェクトファイルとその仮想ページがマッピングされたマシンメモリのページとを対応づけて管理する。仮想マシンのメモリアクセスに対し，共有可能マシンページ検出部１６は，アクセス先の仮想ページと同一内容のマシンページを探し出し，ページマッピング部１５は，メモリアクセスに対して探し出したマシンページをマッピングして，仮想マシン間でページを共有させる。【選択図】  図２
2010033206.tif 000002
【特許請求の範囲】
【請求項１】
物理メモリと仮想的に多重化された複数の仮想メモリとの対応を管理して複数の仮想マシンを動作させるコンピュータシステムの仮想マシンモニタ装置であって，
仮想マシンを一意に識別する仮想マシンＩＤと，前記仮想マシン上で動作するゲストＯＳを構成するオブジェクトファイルを一意に識別するオブジェクトＩＤと，前記オブジェクトファイル中のプログラム実行コード部がマッピングされる仮想メモリのページを示す仮想ページマッピング情報とを保存するマッピング情報データベースと，
前記仮想マシンＩＤと前記オブジェクトＩＤと前記仮想ページマッピング情報と，前記仮想ページがマッピングされる前記物理メモリのページを示すマシンページマッピング情報と，同一のオブジェクトＩＤの存在を示す存在フラグとを対応づける仮想ページ・オブジェクト対応テーブルと，
前記オブジェクトＩＤと，前記マシンページマッピング情報と，前記マシンページマッピング情報が示すページを参照する仮想マシン数を示す参照仮想マシン数とを対応づけるオブジェクト・マシンページ対応テーブルと，
仮想マシン上で動作するゲストＯＳを構成するオブジェクトファイルを読み込み，読み込んだオブジェクトファイル中のプログラム実行コード部がマッピングされる仮想メモリのページを示す仮想ページマッピング情報を生成し，当該オブジェクトファイルのオブジェクトＩＤと前記オブジェクトファイルが動作する仮想マシンの仮想マシンＩＤと前記生成した仮想ページマッピング情報とを前記マッピング情報データベースに登録するオブジェクトファイルマッピング情報生成部と，
前記マッピング情報データベースを参照して，前記仮想マシンの起動に対応して前記仮想ページ・オブジェクト対応テーブルに該当する仮想マシンのデータを追加し，前記仮想マシンの終了に対応して前記仮想ページ・オブジェクト対応テーブルに該当する仮想マシンのデータを削除し，前記仮想ページ・オブジェクト対応テーブルに同一のオブジェクトＩＤが複数存在する場合に，複数存在するオブジェクトＩＤの存在フラグに有効を設定し，前記存在フラグが有効となっている仮想ページに対応する前記物理メモリのページの割り当てまたは変更があった場合に，前記仮想ページ・オブジェクト対応テーブルの該当するマシンページマッピング情報を更新する仮想ページ・オブジェクト対応管理部と，
前記オブジェクトファイル中のプログラム実行コード部がマッピングされる仮想メモリのページから対応するハードウェアのページへマッピングしている仮想マシンを検出して前記オブジェクト・マシンページ対応テーブルの参照仮想マシン数を更新するオブジェクト・マシンページ対応管理部と，
前記仮想マシンの仮想メモリのページのアドレスと自装置内の物理メモリのページのアドレスとを変換する仮想ページ・マシンページ変換テーブルを備えて，当該仮想メモリのページに前記物理メモリのページを割り当てるページマッピング部と，
前記仮想メモリへのアクセス時に，アクセスする仮想マシンＩＤと仮想メモリのアクセス先ページとをキーとして前記仮想ページ・オブジェクト対応テーブルを参照し，前記アクセス先ページに対応するオブジェクトＩＤの存在フラグが有効であるかを判定し，さらに，当該判定において存在フラグが有効である場合に，前記対応するオブジェクトＩＤをキーとして前記オブジェクト・マシンページ対応テーブルを参照し，当該オブジェクトＩＤのアクセス先ページに対応する前記物理メモリのページが存在するかを判定する共有可能マシンページ検出部とを備えて，
前記ページマッピング部は，前記共有可能マシンページ検出部が，前記アクセス先ページに対応する前記物理メモリのページが存在する場合に，当該アクセス先の仮想ページに対して前記判定した物理メモリのページを参照するように前記仮想ページ・マシンページ変換テーブルを更新し，
前記オブジェクト・マシンページ対応管理部は，前記オブジェクト・マシンページ対応テーブルの該当するオブジェクトの参照仮想マシン数を更新する
ことを特徴とする仮想マシンモニタ装置。
【請求項２】
前記ページマッピング部は，前記物理メモリのページをコピーオンライトで管理し，前記仮想マシン間で共有される前記物理メモリのページに対する前記仮想マシンからの書き込み要求があった場合に，コピーオンライトによって前記物理メモリの新しいページを割り当てる
ことを特徴とする請求項１記載の仮想マシンモニタ装置。
【請求項３】
前記オブジェクトファイルマッピング情報生成部は，前記仮想マシン上で動作するゲストＯＳを構成するオブジェクトファイルの変更を検出して，変更を検出した仮想マシンの仮想メモリマッピング情報を再生成し，
前記仮想ページ・オブジェクト対応管理部は，前記再生成された仮想メモリマッピング情報をもとに前記仮想ページ・オブジェクト対応テーブルを更新する
ことを特徴とする請求項１または請求項２に記載の仮想マシンモニタ装置。
【請求項４】
前記オブジェクトファイルマッピング情報生成部は，前記仮想マシンのゲストＯＳを構成するオブジェクトファイルのプログラム実行部がマッピングされる仮想ページの候補を複数用意し，前記仮想ページの候補に対する仮想ページマッピング情報を生成し，前記マッピング情報データベースに保存する
ことを特徴とする請求項１ないし請求項３のいずれか一項に記載の仮想マシンモニタ装置。
【請求項５】
物理メモリと仮想的に多重化された複数の仮想メモリとの対応を管理して複数の仮想マシンを動作させるコンピュータを，
仮想マシンを一意に識別する仮想マシンＩＤと，前記仮想マシン上で動作するゲストＯＳを構成するオブジェクトファイルを一意に識別するオブジェクトＩＤと，前記オブジェクトファイル中のプログラム実行コード部がマッピングされる仮想メモリのページを示す仮想ページマッピング情報とを保存するマッピング情報データベースと，
前記仮想マシンＩＤと前記オブジェクトＩＤと前記仮想ページマッピング情報と，前記仮想ページがマッピングされる前記物理メモリのページを示すマシンページマッピング情報と，同一のオブジェクトＩＤの存在を示す存在フラグとを対応づける仮想ページ・オブジェクト対応テーブルと，
前記オブジェクトＩＤと，前記マシンページマッピング情報と，前記マシンページマッピング情報が示すページを参照する仮想マシン数を示す参照仮想マシン数とを対応づけるオブジェクト・マシンページ対応テーブルと，
仮想マシン上で動作するゲストＯＳを構成するオブジェクトファイルを読み込み，読み込んだオブジェクトファイル中のプログラム実行コード部がマッピングされる仮想メモリのページを示す仮想ページマッピング情報を生成し，当該オブジェクトファイルのオブジェクトＩＤと前記オブジェクトファイルが動作する仮想マシンの仮想マシンＩＤと前記生成した仮想ページマッピング情報とを前記マッピング情報データベースに登録するオブジェクトファイルマッピング情報生成部と，
前記マッピング情報データベースを参照して，前記仮想マシンの起動に対応して前記仮想ページ・オブジェクト対応テーブルに該当する仮想マシンのデータを追加し，前記仮想マシンの終了に対応して前記仮想ページ・オブジェクト対応テーブルに該当する仮想マシンのデータを削除し，前記仮想ページ・オブジェクト対応テーブルに同一のオブジェクトＩＤが複数存在する場合に，複数存在するオブジェクトＩＤの存在フラグに有効を設定し，前記存在フラグが有効となっている仮想ページに対応する前記物理メモリのページの割り当てまたは変更があった場合に，前記仮想ページ・オブジェクト対応テーブルの該当するマシンページマッピング情報を更新する仮想ページ・オブジェクト対応管理部と，
前記オブジェクトファイル中のプログラム実行コード部がマッピングされる仮想メモリのページから対応するハードウェアのページへマッピングしている仮想マシンを検出して前記オブジェクト・マシンページ対応テーブルの参照仮想マシン数を更新するオブジェクト・マシンページ対応管理部と，
前記仮想マシンの仮想メモリのページのアドレスと自装置内の物理メモリのページのアドレスとを変換する仮想ページ・マシンページ変換テーブルを備えて，当該仮想メモリのページに前記物理メモリのページを割り当てるページマッピング部と，
前記仮想メモリへのアクセス時に，アクセスする仮想マシンＩＤと仮想メモリのアクセス先ページとをキーとして前記仮想ページ・オブジェクト対応テーブルを参照し，前記アクセス先ページに対応するオブジェクトＩＤの存在フラグが有効であるかを判定し，さらに，当該判定において存在フラグが有効である場合に，前記対応するオブジェクトＩＤをキーとして前記オブジェクト・マシンページ対応テーブルを参照し，当該オブジェクトＩＤのアクセス先ページに対応する前記物理メモリのページが存在するかを判定する共有可能マシンページ検出部とを備えて，
前記ページマッピング部は，前記共有可能マシンページ検出部が，前記アクセス先ページに対応する前記物理メモリのページが存在する場合に，当該アクセス先の仮想ページに対して前記判定した物理メモリのページを参照するように前記仮想ページ・マシンページ変換テーブルを更新し，
前記オブジェクト・マシンページ対応管理部は，前記オブジェクト・マシンページ対応テーブルの該当するオブジェクトの参照仮想マシン数を更新する仮想マシンモニタ装置として機能させる
ことを特徴とする仮想マシンモニタプログラム。
【請求項６】
物理メモリと仮想的に多重化された複数の仮想メモリとの対応を管理して複数の仮想マシンを動作させるコンピュータシステムの仮想マシンモニタ装置が実行する仮想マシン間メモリ共有管理方法であって，
仮想マシン上で動作するゲストＯＳを構成するオブジェクトファイルを読み込むオブジェクトファイル読み込む処理と，
仮想マシンを一意に識別する仮想マシンＩＤと，前記仮想マシン上で動作するゲストＯＳを構成するオブジェクトファイルを一意に識別するオブジェクトＩＤと，前記オブジェクトファイル中のプログラム実行コード部がマッピングされる仮想メモリのページを示す仮想ページマッピング情報とを保存するマッピング情報データベースを備えて，前記読み込んだオブジェクトファイル中のプログラム実行コード部がマッピングされる仮想メモリのページを示す仮想ページマッピング情報を生成し，当該オブジェクトファイルのオブジェクトＩＤと前記オブジェクトファイルが動作する仮想マシンの仮想マシンＩＤと前記生成した仮想ページマッピング情報とを前記マッピング情報データベースに登録する処理過程と，
前記仮想マシンＩＤと前記オブジェクトＩＤと前記仮想ページマッピング情報と，前記仮想ページがマッピングされる前記物理メモリのページを示すマシンページマッピング情報と，同一のオブジェクトＩＤの存在を示す存在フラグとを対応づける仮想ページ・オブジェクト対応テーブルを備えて，前記マッピング情報データベースを参照して，前記仮想マシンの起動または終了に対応して前記仮想ページ・オブジェクト対応テーブルに該当する仮想マシンのデータを追加または削除する処理過程と，
前記仮想ページ・オブジェクト対応テーブルに同一のオブジェクトＩＤが複数存在する場合に，前記仮想ページ・オブジェクト対応テーブルの複数存在するオブジェクトＩＤの存在フラグに有効を設定する処理過程と，
前記存在フラグが有効となっている仮想ページに対応する前記物理メモリのページの割り当てまたは変更があった場合に，前記仮想ページ・オブジェクト対応テーブルの該当するマシンページマッピング情報を更新する処理過程と，
前記オブジェクトＩＤと，前記マシンページマッピング情報と，前記マシンページマッピング情報が示すページを参照する仮想マシン数を示す参照仮想マシン数とを対応づけるオブジェクト・マシンページ対応テーブルを備えて，前記オブジェクトファイル中のプログラム実行コード部がマッピングされる仮想メモリのページから対応するハードウェアのページへマッピングしている仮想マシンを検出した場合に，前記オブジェクト・マシンページ対応テーブルの参照仮想マシン数を更新する処理過程と，
前記仮想マシンの仮想メモリのページのアドレスと自装置内の物理メモリのページのアドレスとを変換する仮想ページ・マシンページ変換テーブルを備えて，当該仮想メモリのページに前記物理メモリのページを割り当てる処理過程と，
前記仮想メモリへのアクセス時に，アクセスする仮想マシンＩＤと仮想メモリのアクセス先ページとをキーとして前記仮想ページ・オブジェクト対応テーブルを参照し，前記アクセス先ページに対応するオブジェクトＩＤの存在フラグが有効であるかを判定する処理過程と，
前記判定において存在フラグが有効である場合に，前記対応するオブジェクトＩＤをキーとして前記オブジェクト・マシンページ対応テーブルを参照し，当該オブジェクトＩＤのアクセス先ページに対応する前記物理メモリのページが存在するかを判定する処理過程とを備えて，
前記アクセス先ページに対応する前記物理メモリのページが存在する場合に，当該アクセス先の仮想ページに対して前記判定した物理メモリのページを参照するように前記仮想ページ・マシンページ変換テーブルを更新する処理過程とを備える
ことを特徴とする仮想マシン間メモリ共有管理方法。
【発明の詳細な説明】
【技術分野】
【０００１】
本発明は，１台の実マシン上で複数の仮想マシンを動作させる仮想化技術において，仮想マシン間のメモリ共有を可能にする仮想マシンモニタ装置およびプログラム，ならびに仮想マシンモニタ装置が実行する仮想マシン間メモリ共有管理方法に関する。
【０００２】
より詳しくは，仮想マシンに割り当てられるメモリ空間を実マシンのメモリ空間にマッピングする際に，一部の実マシンのメモリ空間を複数の仮想マシンのメモリ空間から参照させることにより，仮想マシン間でメモリを共有可能とするメモリ管理機能を備える仮想マシンモニタ技術に関する。
【背景技術】
【０００３】
仮想化技術では，１台の物理計算機上に複数の仮想マシンを作成し，仮想マシンはその上で動作するＯＳ（ゲストＯＳと呼ぶ）に対し，あたかも独立したハードウェア上で動作しているかのように見せかける。複数の独立したゲストＯＳを１台のハードウェアに集約して実行し，ＣＰＵ・ストレージなどのハードウェア資源を効率的に運用できるなどのメリットがある。
【０００４】
一方で，１つのハードウェア・ＯＳ上で複数のサーバアプリケーションを動作させる場合と比較した仮想化のデメリットとしては，メモリ利用効率の悪さが挙げられる。例えば，１つのＯＳ上でＡ，Ｂという２つのサーバアプリケーションを動かす場合と，１つのＯＳ上でそれぞれＡ，Ｂを動かす２つの独立した仮想マシンとを比較すると，後者では各仮想マシンがそれぞれ個別にＯＳなどのプログラム実行コードをメモリ上に持つことになり，その分仮想マシン全体で消費するメモリ量が大きくなる。
【０００５】
仮想化においてメモリ利用効率を改善するには，仮想マシンに割り当てられているページで複数の仮想マシン間で同一内容のものを共通で参照すればよい。
【０００６】
仮想マシンに割り当てられているページから同一内容のページを探しだす従来技術として，仮想化ソフトウェアであるＶＭｗａｒｅ  ＥＳＸ  Ｓｅｒｖｅｒが行っている方法がある。このＶＭｗａｒｅ  ＥＳＸ  Ｓｅｒｖｅｒでは，ゲストＯＳのページ領域をスキャンし，実行属性または読み取り属性のページ（ＣＰＵから確認可能で一般にプログラムの実行コードが置かれるページ）のハッシュ値をインデックス化し，そのハッシュテーブルを用いてハッシュ値が一致するページを検出し，検出したページのページ内容を比較することによって共有可能なページを特定し，メモリの共有を行っている（例えば，特許文献１参照）。
【０００７】
また，別の従来技術として，１台の計算機上で動作する複数のＯＳ間で，ＯＳの構成モジュールを共有する方法がある。この方法では，ＯＳのマイクロカーネルをロードする際に，カーネルローダが，マイクロカーネルのオブジェクトを複数ＯＳで参照可能な共通領域に配置し，複数ＯＳで参照可能なオブジェクトのリスト管理とページテーブルへの設定を行う（例えば，特許文献２参照）。
【特許文献１】米国特許ＵＳ６７８９１５６号公報
【特許文献２】特開２００７−３５０６６号公報
【発明の開示】
【発明が解決しようとする課題】
【０００８】
仮想マシンに割り当てられるページから同一内容のページを探しだす従来技術では，基本的にページ内容を比較するため，ハードウェアの搭載メモリ量，仮想マシン数等が増加するにつれて，計算負荷が大きくなるという問題があった。
【０００９】
従来技術により，仮想マシン間でメモリを共用しようとする場合に，仮想マシン実行中に仮想マシンの使用する全ページ，例えば，通常のページサイズ４ＫＢの場合には１ＧＢ当たり２６２１４４ページを参照し，計算を行う必要があり，仮想マシン数や使用メモリ量に応じて計算量がリニアに増加していく。
【００１０】
また，従来のＯＳの構成モジュールを共有する方法では，共有可能なページがマイクロカーネルモジュールに限定されるうえ，共有の設定もＯＳ初期化時のみに行われる。そのため，メモリ共有対象が仮想マシン起動時に初期化されるＯＳのマイクロカーネルモジュールに制限され，共有化の適用範囲が非常に狭くなる。
【００１１】
本発明は，かかる問題に鑑みてなされたものであり，仮想マシン間で同一内容のページを少ない計算負荷で検出して，仮想マシン上のＯＳを構成する実行ファイル全般に広く適用可能な，仮想マシン間でのメモリ共有を可能とする仮想マシンモニタ装置およびプログラム，ならび仮想マシンモニタ装置が実行する仮想マシン間メモリ共有管理方法を提供することを目的とする。
【課題を解決するための手段】
【００１２】
本発明に仮想マシンモニタ装置は，仮想マシンを一意に識別する仮想マシンＩＤ，仮想マシン上で動作するゲストＯＳを構成するオブジェクトファイルを一意に識別するオブジェクトＩＤ，およびオブジェクトファイル中のプログラム実行コード部がマッピングされる仮想メモリのページを示す仮想ページマッピング情報を保存するマッピング情報データベースと，仮想マシンＩＤ，オブジェクトＩＤ，仮想ページマッピング情報，仮想ページがマッピングされる物理メモリのページを示すマシンページマッピング情報，および，同一のオブジェクトＩＤの存在を示す存在フラグを対応づける仮想ページ・オブジェクト対応テーブルと，オブジェクトＩＤ，マシンページマッピング情報，およびマシンページマッピング情報が示すページを参照する仮想マシン数を示す参照仮想マシン数を対応づけるオブジェクト・マシンページ対応テーブルとを備える。
【００１３】
そして，仮想マシンモニタ装置は，仮想マシン上で動作するゲストＯＳを構成するオブジェクトファイルを読み込むオブジェクトファイル読み込み，読み込んだオブジェクトファイル中のプログラム実行コード部がマッピングされる仮想メモリのページを示す仮想ページマッピング情報を生成し，このオブジェクトファイルのオブジェクトＩＤとオブジェクトファイルが動作する仮想マシンの仮想マシンＩＤと生成した仮想ページマッピング情報とをマッピング情報データベースに登録する。また，マッピング情報データベースを参照して，仮想マシンの起動または終了に対応して，仮想ページ・オブジェクト対応テーブルに該当する仮想マシンのデータを追加または削除する。
【００１４】
さらに，仮想ページ・オブジェクト対応テーブルに同一のオブジェクトＩＤが複数存在する場合に，仮想ページ・オブジェクト対応テーブルに複数存在するオブジェクトＩＤの存在フラグに有効を設定し，存在フラグが有効となっている仮想ページに対応する物理メモリのページの割り当てまたは変更があった場合に，仮想ページ・オブジェクト対応テーブルの該当するマシンページマッピング情報を更新し，オブジェクトファイル中のプログラム実行コード部がマッピングされる仮想メモリのページから対応するハードウェアのページへマッピングしている仮想マシンを検出した場合に，オブジェクト・マシンページ対応テーブルの参照仮想マシン数を更新する。
【００１５】
また，仮想マシンモニタ装置は，仮想マシンの仮想メモリのページのアドレスと自装置内の物理メモリのページのアドレスとを変換する仮想ページ・マシンページ変換テーブルを備えて，仮想メモリのページに前記物理メモリのページを割り当て，仮想メモリへのアクセス時に，アクセスする仮想マシンＩＤと仮想メモリのアクセス先ページとをキーとして仮想ページ・オブジェクト対応テーブルを参照し，アクセス先ページに対応するオブジェクトＩＤの存在フラグが有効であるかを判定して，この判定において存在フラグが有効である場合に，対応するオブジェクトＩＤをキーとしてオブジェクト・マシンページ対応テーブルを参照し，このオブジェクトＩＤのアクセス先ページに対応する物理メモリのページが存在するかを判定する。
【００１６】
そして，アクセス先ページに対応する物理メモリのページが存在する場合に，このアクセス先の仮想ページに対して判定した物理メモリのページを参照するように仮想ページ・マシンページ変換テーブルを更新する。
【００１７】
これにより，仮想マシン間で同一の内容のページを少ない計算負荷で検出し，仮想マシン上のゲストＯＳを構成する事項ファイル全般に広く適用可能なメモリ共有を実現することができる。
【００１８】
また，開示する装置のページマッピング部は，物理メモリのページをコピーオンライトで管理し，仮想マシン間で共有される物理メモリのページに対する仮想マシンからの書き込み要求があった場合に，コピーオンライトによって物理メモリの新しいページを割り当てることができる。
【００１９】
これにより，共有中の物理メモリのページが実行中の仮想マシン（ゲストＯＳ）によって書き換えられようとする場合に，共有中の当該ページを保持したまま，書き換えを行うゲストＯＳ用に新たな物理メモリのページを割り当てることができる。
【００２０】
また，開示する装置のオブジェクトファイルマッピング情報生成部は，仮想マシン上で動作するゲストＯＳを構成するオブジェクトファイルの変更を検出して，変更を検出した仮想マシンの仮想メモリマッピング情報を再生成し，仮想ページ・オブジェクト対応管理部は，前記再生成された仮想メモリマッピング情報をもとに前記仮想ページ・オブジェクト対応テーブルを更新することができる。
【００２１】
これにより，仮想マシンのゲストＯＳを構成するオブジェクトファイルが更新される場合に，この更新を検知して，該当するオブジェクトファイルの仮想ページ・オブジェクト対応テーブルを更新することができる。
【００２２】
また，開示する装置のオブジェクトファイルマッピング情報生成部は，仮想マシンのゲストＯＳを構成するオブジェクトファイルのプログラム実行部がマッピングされる仮想ページの候補を複数用意し，前記仮想ページの候補に対する仮想ページマッピング情報を生成し，前記マッピング情報データベースに保存することができる。
【００２３】
これにより，オブジェクトファイルのマッピングされる仮想ページが重複しているために再配置される可能性がある場合，マッピングされるアドレスに予め複数の仮想ページの候補があることが分かっている場合等にも対応することができる。
【発明の効果】
【００２４】
本発明によれば，物理メモリと仮想的に多重化された複数の仮想メモリとを有して複数の仮想マシンを動作させるコンピュータシステムにおいて，計算負荷が小さくかつ適用範囲が広い仮想マシン間のメモリ共有を実現することができる。
【発明を実施するための最良の形態】
【００２５】
図１は，本発明にかかる仮想マシンモニタ装置を備えたコンピュータのシステム構成例を示す図である。
【００２６】
仮想マシンモニタ装置（ＶＭＭ）１は，物理メモリと仮想的に多重化された複数の仮想メモリとを管理して複数の仮想マシン（ＶＭ１，…，ＶＭｎ）を動作させるコンピュータに構成される。
【００２７】
図１において，コンピュータのハードウェア資源（Ｈ／Ｗ）として，中央演算ユニット（ＣＰＵ），メモリ管理ユニット（ＭＭＵ），外部記憶装置（ＨＤＤ），メモリ（ＭＥＭ）からなる。メモリ管理ユニットは通常，中央演算ユニットに内蔵されている。
【００２８】
仮想マシンモニタ装置１は，１台のコンピュータを複数のコンピュータとして仮想的に利用するための処理手段であり，コンピュータのハードウェア資源を区分けして，複数の仮想マシンＶＭに割り当てて利用させるように管理する。
【００２９】
仮想マシンＶＭ上のゲストＯＳ（Ｇｕｅｓｔ  ＯＳ：オペレーティングシステム）のメモリアクセスは，仮想マシンモニタ装置１のメモリマッピング部２によって，実際の物理メモリＭＥＭへのアクセスに変換される。
【００３０】
仮想マシン（ＶＭ１，…，ＶＭｎ）は，仮想マシンモニタ装置１により，仮想的にあたかも独立したコンピュータのように動作する。仮想マシンの中央演算ユニット（ｖＣＰＵ），仮想マシンのメモリ管理ユニット（ｖＭＭＵ），仮想マシンの外部記憶装置（ｖＨＤＤ），仮想マシンのメモリ（ｖＭＥＭ）等で構成される仮想ハードウェア資源（ｖＨ／Ｗ）上でゲストＯＳを実行し，ゲストＯＳによりアプリケーションＡＰＰを実行する。
【００３１】
ところで，多くのＯＳは仮想メモリと呼ばれる実際の物理メモリ以上のメモリがあるかのようにふるまう機能を持ち，プロセス毎に独立した仮想メモリ空間を割り当て，プロセスの切り替え毎に仮想メモリ空間も切り替えている。仮想メモリ空間にはＯＳの実行コードとプロセスの実行コードが配置されている。
【００３２】
メモリ管理ユニットＭＭＵは，「ページング」と呼ばれる手法によって，アドレスをページ単位に分割して管理する。メモリ管理ユニットＭＭＵは，仮想メモリ空間のページ（以下「仮想ページ」と呼ぶ）を実際の物理メモリ空間のページ（以下「マシンページ」と呼ぶ）に対応づけるために，ページテーブルという変換テーブルを用いてメモリ管理を行う。
【００３３】
ＯＳは，常に全ての仮想ページを物理ページにマッピングしているわけではない。アクセス先となる仮想ページだけを物理メモリにマッピングする「デマンドページング」と呼ばれる手法を用いて，物理メモリを効率的に利用する。
【００３４】
図１に示すような仮想化されたコンピュータシステムにおいて，実際の物理メモリＭＥＭは，仮想マシンモニタ装置１が管理している。仮想マシンモニタ装置１は，仮想マシンＶＭにあたかもその仮想マシンＶＭの物理メモリがあるかのように見せかけている。
【００３５】
仮想ページへのアクセスは，仮想マシンＶＭの仮想メモリ管理ユニットｖＭＭＵと，仮想マシンモニタ装置１が管理するメモリ管理ユニットＭＭＵの二重のアドレス変換を通して，マシンページへのアクセスに変換される。
【００３６】
仮想マシンＶＭのゲストＯＳを構成するオブジェクトファイルは，実行形式ファイル（拡張子が“ｅｘｅ”のファイル），ライブラリシステムのファイル（拡張子が“ｄｌｌ”のファイル）等のプログラムコードを含む広義のオブジェクトファイルである。
【００３７】
オブジェクトファイルは，ヘッダ部分に，アーキテクチャ・バージョンなどの情報を持つファイルヘッダ，ファイルをそのオフセットでセグメントに区分しセグメントの属性と実行時にマッピングされる仮想メモリのアドレス情報を持つプログラムヘッダ等を持つ。さらに，実行時にプログラム実行コードとしてそのままメモリ上にマッピングされるテキストセグメント，プログラムの使用するデータとしてメモリ上にマッピングされるデータセグメント等を持つ。
【００３８】
オブジェクトファイルは仮想マシンＶＭの仮想外部記憶装置ｖＨＤＤ上のファイルであるが，一般に仮想外部記憶装置ｖＨＤＤは，仮想マシンモニタ装置（ＶＭＭ）１が管理する実際の外部記憶装置ＨＤＤ上のパーティションの一部やファイルであり，仮想マシンモニタ装置（ＶＭＭ）１に管理される。
【００３９】
まず，本発明にかかる仮想マシンモニタ装置の動作原理を説明する。
【００４０】
仮想マシンモニタ装置１は，仮想マシンＶＭ１のゲストＯＳを構成するオブジェクトファイルのヘッダから，オブジェクトファイルのプログラム実行コード部であるテキストセグメントの仮想ページへのマッピング情報を仮想マシン起動前に生成しておく。
【００４１】
そして，仮想マシン起動時に，オブジェクトファイルとその仮想ページとを対応づけて管理する。
【００４２】
さらに，メモリマッピング時に，オブジェクトファイルと，その仮想ページがマッピングされたマシンメモリのページとを対応づけて管理する。
【００４３】
ここで，他の仮想マシンＶＭ２に同一のオブジェクトファイルがある場合に，そのオブジェクトファイルのテキストセグメントのメモリマッピング時に，同一オブジェクトファイルのテキストセグメントがマッピングされている同一内容のページを探し出す。そして，仮想マシンＶＭ２の仮想ページに探し出したマシンページをマッピングすることによって，仮想マシンＶＭ１，ＶＭ２間でページを共有することができる。
【００４４】
以下に，本発明の実施の形態を説明する。
【００４５】
図２は，仮想マシンモニタ装置の構成例を示す図である。
【００４６】
仮想マシンモニタ装置１は，オブジェクトファイルマッピング情報生成部１１，マッピング情報データベース１２，仮想ページ・オブジェクト対応管理部１３，ページマッピング部１５，共有可能マシンページ検出部１６，およびオブジェクト・マシンページ対応管理部１７を備える。
【００４７】
オブジェクトファイルマッピング情報生成部１１は，オブジェクトファイル４を読み込み，オブジェクトファイル４のヘッダ情報を解析して，オブジェクトファイル中のテキストセグメントがマッピングされる仮想アドレスの情報を，マッピング情報データベース１２に登録する。
【００４８】
オブジェクトファイルマッピング情報生成部１１は，仮想マシンＶＭのゲストＯＳを構成するオブジェクトファイル４について，図３に示されるように，仮想マシンを一意に識別する仮想マシンＩＤ，オブジェクトファイルのファイル名，オブジェクトファイルのバージョン，オブジェクトファイルの更新日時，オブジェクトファイルのサイズ等をリストとして保持し，管理する。
【００４９】
オブジェクトファイルマッピング情報生成部１１は，オブジェクトファイル４を一意に識別するオブジェクトＩＤを生成する。オブジェクトＩＤは，図３に示すリストの各フィールドを組み合わせた文字列，または，その文字列やファイル内容から生成したハッシュ値などを用いてもよい。本実施例では説明を簡単にするため，“＜ファイル名＞−＜バージョン＞の文字列”を，オブジェクトＩＤとして用いる。
【００５０】
オブジェクトファイルマッピング情報生成部１１は，オブジェクトファイル４のヘッダ情報を解析して得た仮想ページマッピング情報を，仮想マシンＩＤとオブジェクトＩＤと対応づけて，マッピング情報データベース１２に登録する。
【００５１】
図４に，マッピング情報データベース１２に登録されるマッピング情報のデータ構成例を示す。マッピング情報は，仮想マシンＩＤ，オブジェクトＩＤ，オブジェクトファイル４のテキストセグメントがマッピングされる仮想メモリのページを示す仮想ページマッピング情報で構成される。仮想ページマッピング情報は，マッピングされる仮想アドレスの先頭アドレスおよびマッピングされるサイズの組である。
【００５２】
また，オブジェクトファイルマッピング情報生成部１１は，仮想マシンＶＭ上で動作するゲストＯＳを構成するオブジェクトファイル４の変更が検出された場合に，変更が検出された仮想マシンＶＭのマッピング情報を再生成し，マッピング情報データベース１２を更新する。
【００５３】
また，オブジェクトファイルマッピング情報生成部１１は，仮想マシンＶＭのゲストＯＳを構成するオブジェクトファイルのテキストセグメントがマッピングされる仮想ページの候補が複数ある場合に，複数の仮想ページそれぞれに対する仮想ページマッピング情報を生成して，マッピング情報データベース１２に保存する。
【００５４】
仮想ページ・オブジェクト対応管理部１３は，仮想マシンＶＭの起動時に，マッピング情報データベース１２から，該当する仮想マシンＶＭのマッピング情報を読み出し，仮想ページ・オブジェクト対応テーブル３１に登録する（テーブル管理処理）。
【００５５】
図５に，仮想ページ・オブジェクト対応テーブル３１のデータ構成例を示す。仮想ページ・オブジェクト対応テーブル３１は，オブジェクトＩＤと，仮想マシンＩＤと，仮想ページを示す仮想ページ番号と，仮想ページ番号に対応するマシンページを示すマシンページ番号と，同一オブジェクトＩＤの存在の有無を表す同一オブジェクトの存在フラグとをフィールドとして持つ。
【００５６】
仮想ページ・オブジェクト対応管理部１３は，新規に仮想ページ・オブジェクト対応テーブル３１が追加される際に，既に存在する仮想ページ・オブジェクト対応テーブル３１に同一オブジェクトＩＤが存在する場合には，該当する同一オブジェクトＩＤの「存在フラグ」に“有効（ｔｒｕｅ）”を設定する。
【００５７】
また，仮想ページに対応するマシンページが割り当て，または，変更された場合には，仮想ページ・オブジェクト対応テーブル３１のマシンページ番号を更新する（マシンページ番号更新処理）。
【００５８】
ページマッピング部１５と共有可能マシンページ検出部１６とは，メモリマッピング部２の内部に，または，メモリマッピング部２と協働可能なように構成される。メモリマッピング部２は，仮想ページ・マシンページ変換テーブル３２を用いてメモリマッピングを行う。
【００５９】
仮想マシンＶＭの物理メモリｖＭＥＭは，仮想マシンモニタ装置１が用意した仮想的なものであり，実際の物理メモリにアクセスするために，仮想マシンモニタ装置１は，仮想マシンＶＭの物理アドレスを実際の物理アドレスに変換する必要がある。
【００６０】
メモリマッピング部２では，仮想ページ・マシンページ変換テーブル３２を用いて，仮想マシンＶＭのゲストＯＳから仮想ページ・マシンページ変換テーブル３２を参照することによって，ゲストＯＳの仮想メモリのアドレスを，直接，仮想マシンモニタ装置１の物理メモリ（マシンメモリ）にアドレス変換させている。
【００６１】
「デマンドページング」によれば，仮想ページに対応するマシンページは，常に割り当てられているわけではなく，初期状態において，仮想ページ・マシンページ変換テーブル３２の物理ページのアドレスは“空”である。
【００６２】
メモリマッピング部２は，最初の仮想ページのアクセスの際には，仮想ページ・マシンページ変換テーブル３２において対応する物理ページのアドレスが“空”であるため，ページフォルトが発生する。このページフォルトが検知されて，アクセスに物理ページを割り当て，仮想ページ・マシンページ変換テーブル３２を更新し，物理ページへのアクセスが可能となる。
【００６３】
ページマッピング部１５は，仮想ページのアクセスの際に，仮想ページ・マシンページ変換テーブル３２によりマシンページの割り当てを行う（マシンページ割り当て処理）。
【００６４】
また，ページマッピング部１５は，仮想ページ・マシンページ変換テーブル３１の更新の要求に応じて，仮想ページ・オブジェクト対応管理部１３に働きかけて，仮想ページ・オブジェクト対応テーブル３３のマシンページのフィールドを更新する（テーブル管理処理）。
【００６５】
また，ページマッピング部１５は，マシンページをコピーオンライトで管理し，仮想マシンＶＭ間で共有されるマシンページに対する仮想マシンＶＭからの書き込み要求があった場合に，コピーオンライトによって新しいマシンページを割り当てる。
【００６６】
共有可能マシンページ検出部１６は，仮想ページ・オブジェクト対応テーブル３１を参照し，アクセス先の仮想ページに該当するオブジェクトが，既に他の仮想マシンＶＭの仮想ページ上に存在しているか否かを判定する（オブジェクト判定処理）。
【００６７】
さらに，オブジェクト・マシンページ対応テーブル３３を参照して，共有可能なマシンページがあるかを検出し，共有可能なマシンページがあれば，ページマッピング部１５に働きかけて，仮想マシンＶＭ間で同一オブジェクトがマッピングされたマシンページを参照するように仮想ページ・マシンページ変換テーブル３２を変更させる（共有可能ページ判定処理）。
【００６８】
オブジェクト・マシンページ対応管理部１７は，オブジェクトとマシンページとを対応づけたオブジェクト・マシンページ対応テーブル３３を持ち，オブジェクト・マシンページ対応テーブル３３を管理する（テーブル管理処理）。
【００６９】
オブジェクト・マシンページ対応テーブル３３は，図６に示されるように，オブジェクトＩＤ，そのオブジェクトファイルのテキストセグメントがマッピングされているマシンページ番号，マシンページを参照している仮想マシン数からなる。
【００７０】
また，オブジェクト・マシンページ対応管理部１７は，マシンページを共有する仮想マシン数に変動があれば，オブジェクト・マシンページ対応テーブル３３の参照仮想マシン数を更新する（参照仮想マシン数更新処理）。
【００７１】
図７は，仮想マシンモニタ装置１の処理を概説する図である。
【００７２】
仮想マシンモニタ装置１のオブジェクトファイルマッピング情報生成部１１は，仮想マシンＶＭの起動前に，仮想マシンＶＭの仮想外部記憶装置ｖＨＤＤに保存されているオブジェクトファイル４のファイルヘッダおよびプログラムヘッダを解析し，オブジェクトファイル４のテキストセグメントがゲストＯＳの仮想メモリへマッピングされる情報（仮想ページマッピング情報を生成し，マッピング情報データベース１２へ保存しておく。
【００７３】
その後，仮想マシンＶＭが起動時に，仮想ページ・オブジェクト対応管理部１３は，マッピング情報データベース１２を参照して，実行されるオブジェクトファイル４とその仮想ページとの対応づけ情報を，仮想ページ・オブジェクト対応テーブル３１に登録する。
【００７４】
ゲストＯＳの仮想ページは，仮想メモリ管理ユニットｖＭＭＵ，メモリマッピング部２，メモリ管理ユニットＭＭＵを介して，仮想マシンモニタ装置１のマシンメモリにマッピングされ，仮想マシンのゲストＯＳは，仮想ページのアクセスで，仮想マシンモニタ装置１の該当するマシンページを直接参照する。
【００７５】
仮想ページ・オブジェクト対応管理部１３は，メモリマッピング時に仮想ページのオブジェクトとそのマッピングされたマシンページとの対応づけを管理し，他の仮想マシンＶＭに同一のオブジェクトファイルがある場合に，そのメモリマッピング時に，同一のテキストセグメントがマッピングされている同一内容のページが仮想マシンモニタ装置１内のマシンメモリにあるかを判定する。マシンメモリ内に同一内容のページがあれば，共有可能なマシンページを検出したとして，そのマシンページをマッピングし，仮想マシン間でページ共有を実現する。
【００７６】
図８に，仮想マシンＶＭの仮想メモリのアクセス時の処理フローを示す。
【００７７】
仮想マシンＶＭのゲストＯＳから仮想メモリｖＭＥＭへのアクセスがあった場合に，メモリマッピング部２は，仮想ページ・マシンページ変換テーブル３２を参照して，仮想マシンＶＭのアクセス先の仮想ページに対応する仮想マシンモニタ装置１のマシンページがあるかを判定する（ステップＳ１）。仮想マシンＶＭのアクセス先の仮想ページに対応する仮想マシンモニタ装置１のマシンページがある場合は（ステップＳ１のＹＥＳ），そのままマシンメモリへアクセスして，処理が終了する。
【００７８】
一方，仮想マシンＶＭのアクセス先の仮想ページに対応するマシンページがない場合，例えば，マシンページが未割り当ての場合，初回アクセス時の場合等は（ステップＳ１のＮＯ），共有可能マシンページ検出部１６が，仮想ページ・オブジェクト対応テーブル３１を参照し，アクセス先の仮想ページに該当するオブジェクトが，既に他の仮想マシンＶＭの仮想ページ上に存在しているかを判定する（ステップＳ２）。
【００７９】
他の仮想マシンＶＭの仮想ページ上に同一のオブジェクトが存在する場合は（ステップＳ２のＹＥＳ），共有可能マシンページ検出部１６は，オブジェクト・マシンページ対応テーブル３３を参照し，該当するオブジェクトがマシンページに存在するか否かを確認する（ステップＳ３）。
【００８０】
該当するオブジェクトがマシンページに存在する場合は（ステップＳ３のＹＥＳ），メモリ共有が可能であると判定され，ページマッピング部１５は，アクセス先の仮想ページを検出したマシンページに変換するように，仮想ページ・マシンページ変換テーブル３２を更新し，検出したマシンページを割り当てるマッピング（共有マッピング）を行う（ステップＳ４）。
【００８１】
さらに，ページマッピング部１５がオブジェクト・マシンページ対応管理部１７に働きかけ，オブジェクト・マシンページ対応管理部１７が，オブジェクト・マシンページ対応テーブル３３の参照仮想マシン数を更新する（ステップＳ５）。
【００８２】
また，ページマッピング部１５が仮想ページ・オブジェクト対応管理部１３に働きかけ，仮想ページ・オブジェクト対応管理部１３が，仮想ページ・オブジェクト対応テーブル３１の該当する仮想ページの割り当てられたマシンページ番号を更新する（ステップＳ６）。
【００８３】
一方，該当するオブジェクトがマシンページに存在しない場合は（ステップＳ３のＮＯ），ページマッピング部１５が，マシンページの割り当てを行う（ステップＳ７）。さらに，オブジェクト・マシンページ対応管理部１７が，オブジェクト・マシンページ対応テーブル３３に登録する（ステップＳ８）。
【００８４】
また，ステップＳ２の処理で，他の仮想マシンＶＭの仮想ページ上に同一のオブジェクトが存在しない場合は（ステップＳ２のＮＯ），コンピュータシステムにおいて，該当オブジェクトがマシンページに存在しないため，ページマッピング部１５が，マシンページの割り当てを行い（ステップＳ７），オブジェクト・マシンページ対応管理部１７が，オブジェクト・マシンページ対応テーブル３３へオブジェクトと割り当てられたマシンページとを登録する（ステップＳ８）。
【００８５】
以上，本発明をその実施の形態により説明したが，本発明はその主旨の範囲において種々の変形が可能であることは当然である。
【図面の簡単な説明】
【００８６】
【図１】本発明にかかる仮想マシンモニタ装置を備えたコンピュータのシステム構成例を示す図である。
【図２】仮想マシンモニタ装置の構成例を示す図である。
【図３】オブジェクトファイルから抽出される情報例を示す図である。
【図４】マッピング情報データベースに登録される情報のデータ構成例を示す図である。
【図５】仮想ページ・オブジェクト対応テーブルのデータ構成例を示す図である。
【図６】オブジェクト・マシンページ対応テーブルのデータ構成例を示す図である。
【図７】仮想マシンモニタ装置の処理を概説する図である。
【図８】仮想マシンＶＭの仮想メモリのアクセス時の仮想マシンモニタ装置の処理フローを示す図である。
【符号の説明】
【００８７】
１  仮想マシンモニタ装置（ＶＭＭ）
２  メモリマッピング部
１１  オブジェクトファイルマッピング情報生成部
１２  マッピング情報データベース
１３  仮想ページ・オブジェクト対応テーブル
１５  ページマッピング部
１６  共有可能マシンページ検出部
１７  オブジェクト・マシンページ対応管理部
３１  仮想ページ・オブジェクト対応テーブル
３２  仮想ページ・マシンページ変換テーブル
３３  オブジェクト・マシンページ対応テーブル
ＶＭ  仮想マシン
Ｖｉｒｔｕａｌ  Ｈ／Ｗ  仮想マシンのハードウェア資源
ｖＭＭＵ  仮想マシンのメモリ管理ユニット
ｖＨＤＤ  仮想マシンの外部記憶装置
ｖＭＥＭ  仮想マシンのメモリ
Ｇｕｅｓｔ  ＯＳ  ゲストＯＳ（オペレーティングシステム）
Ｈ／Ｗ  ハードウェア資源
ＭＭＵ  メモリ管理ユニット
ＨＤＤ  外部記憶装置
ＭＥＭ  メモリ
【図１】
2010033206.tif 000003
【図２】
2010033206.tif 000004
【図３】
2010033206.tif 000005
【図４】
2010033206.tif 000006
【図５】
2010033206.tif 000007
【図６】
2010033206.tif 000008
【図７】
2010033206.tif 000009
【図８】
2010033206.tif 000010