(57)【特許請求の範囲】
【請求項１】
情報処理装置に、
前記情報処理装置上に複数の仮想マシンを稼動させ、
前記複数の仮想マシンのうち少なくとも１つの第１仮想マシンは仮想マシンの通信を実現させる機能を有し、
前記仮想マシンを識別する情報と該仮想マシンの仮想ネットワークインターフェースを識別する情報とを関連付けた第１管理テーブルと、前記第１仮想マシンを識別する情報、前記第１仮想マシンが中継する２台の仮想マシンそれぞれの仮想ネットワークインターフェースを識別する情報、および、前記第１仮想マシンが使用する仮想ブリッジに関する情報とを含む第２管理テーブルを保持し、
前記仮想マシンからの通信要求を取得したときに、前記通信要求に対応するパケットから送信元および送信先の仮想マシンを識別する情報を抽出し、前記第１管理テーブルおよび前記第２管理テーブルに基づいて、抽出した前記送信元および送信先の仮想マシンが同じ仮想ブリッジを使用するかを判断し、
同じ仮想ブリッジを使用すると判断した場合に、前記仮想ブリッジに関する情報に基づいて前記仮想ブリッジの処理を実行して前記通信要求に対応するパケットを送信先の仮想マシンに中継し、
同じ仮想ブリッジを使用しないと判断した場合に、前記送信元の仮想マシンの仮想ネットワークインターフェースを中継する第１仮想マシンにパケットの到着を通知する
処理を実行させることを特徴とする仮想マシン制御プログラム。
【請求項２】
前記中継する処理は、同じ仮想ブリッジを使用すると判断した場合に、前記仮想ブリッジの処理を実行するプログラムを実行し、実行した仮想ブリッジを介して、前記パケットを送信先の仮想マシンに中継することを特徴とする請求項１に記載の仮想マシン制御プログラム。
【請求項３】
前記通知する処理は、同じ仮想ブリッジを使用しないと判断した場合に、前記送信先の仮想マシンの受信対象となるパケットが格納されるバッファを呼び出すプログラムを実行し、呼び出したバッファに、前記パケットを書き込むことで、前記パケットの到着を通知することを特徴とする請求項１に記載の仮想マシン制御プログラム。
【請求項４】
前記第２管理テーブルは、前記仮想ブリッジを実行するプログラムの格納先をさらに保持し、
前記判断する処理は、前記パケットから、前記送信元の仮想マシンに対応する仮想ネットワークインターフェースの識別子と、前記送信先の仮想マシンに対応する仮想ネットワークインターフェースの識別子とを抽出し、前記第２管理テーブルを参照して、各仮想マシンが使用する仮想ネットワークインターフェースの識別子に対応付けられる、前記仮想ブリッジを実行するプログラムの格納先が一致するか否かによって、前記送信元および送信先の仮想マシンが同じ仮想ブリッジを使用するかを判断することを特徴とする請求項１に記載の仮想マシン制御プログラム。
【請求項５】
前記複数の仮想マシンのいずれかの仮想マシンから割込み要求が発生した場合に、前記割込み要求の発生元の仮想マシンが動作するプロセッサと前記割込み要求の実行先の仮想マシンが動作するプロセッサとが同じであるか否かを判定し、
同じでないと判定した場合に、割込みハンドラの格納先を記憶する割込み記憶部から、前記割込みハンドラの格納先を読み出し、
読み出した格納先に記憶される前記割込みハンドラを実行する処理を前記情報処理装置にさらに実行させることを特徴とする請求項１に記載の仮想マシン制御プログラム。
【請求項６】
情報処理装置が、
前記情報処理装置上に複数の仮想マシンを稼動させ、
前記複数の仮想マシンのうち少なくとも１つの第１仮想マシンは仮想マシンの通信を実現させる機能を有し、
前記仮想マシンを識別する情報と該仮想マシンの仮想ネットワークインターフェースを識別する情報とを関連付けた第１管理テーブルと、前記第１仮想マシンを識別する情報、前記第１仮想マシンが中継する２台の仮想マシンそれぞれの仮想ネットワークインターフェースを識別する情報、および、前記第１仮想マシンが使用する仮想ブリッジに関する情報とを含む第２管理テーブルを保持し、
前記仮想マシンからの通信要求を取得したときに、前記通信要求に対応するパケットから送信元および送信先の仮想マシンを識別する情報を抽出し、前記第１管理テーブルおよび前記第２管理テーブルに基づいて、抽出した前記送信元および送信先の仮想マシンが同じ仮想ブリッジを使用するかを判断し、
同じ仮想ブリッジを使用すると判断した場合に、前記仮想ブリッジに関する情報に基づいて前記仮想ブリッジの処理を実行して前記通信要求に対応するパケットを送信先の仮想マシンに中継し、
同じ仮想ブリッジを使用しないと判断した場合に、前記送信元の仮想マシンの仮想ネットワークインターフェースを中継する第１仮想マシンにパケットの到着を通知する
処理を含んだことを特徴とする仮想マシン制御方法。
【請求項７】
仮想マシンの通信を実現させる機能を有する第１仮想マシンを含む複数の仮想マシンを稼動させる仮想制御部を有し、
前記仮想制御部は、
前記仮想マシンを識別する情報と該仮想マシンの仮想ネットワークインターフェースを識別する情報とを関連付けた第１記憶部と、
前記第１仮想マシンを識別する情報、前記第１仮想マシンが中継する２台の仮想マシンそれぞれの仮想ネットワークインターフェースを識別する情報、および、前記第１仮想マシンが使用する仮想ブリッジに関する情報を含む第２記憶部と、
前記仮想マシンからの通信要求を取得したときに、前記通信要求に対応するパケットから送信元および送信先の仮想マシンを識別する情報を抽出し、前記第１記憶部および前記第２記憶部に基づいて、抽出した前記送信元および送信先の仮想マシンが同じ仮想ブリッジを使用するかを判断する判断部と、
前記判断部が同じ仮想ブリッジを使用すると判断した場合に、前記仮想ブリッジに関する情報に基づいて前記仮想ブリッジの処理を実行して前記通信要求に対応するパケットを送信先の仮想マシンに中継する中継部と、
前記判断部が同じ仮想ブリッジを使用しないと判断した場合に、前記送信元の仮想マシンの仮想ネットワークインターフェースを中継する第１仮想マシンにパケットの到着を通知する通知部と
を有することを特徴とする情報処理装置。
【発明の詳細な説明】
【技術分野】
【０００１】
本発明は、仮想マシン制御プログラム、仮想マシン制御方法および情報処理装置に関する。
【背景技術】
【０００２】
従来から、情報処理装置などの物理サーバ上でＶＭ（Virtual  Machine：仮想マシン）といわれる仮想的なサーバを動作させるサーバ仮想化技術が知られている。物理サーバでは、ＶＭの生成などＶＭに関する各種制御を実行するＶＭＭ（Virtual  Machine  Monitor）などと呼ばれるソフトウェアを動作させている。一般的に、ＶＭ上で動作しているＯＳ（Operating  System）をゲストＯＳと呼ぶ。【０００３】
ＶＭＭの一例としては、ハイパーバイザが知られている。このハイパーバイザは、モノリシック型のハイパーバイザと、マイクロカーネル型のハイパーバイザに分類される。【０００４】
モノリシック型は、デバイスドライバをハイパーバイザ層に実装する形態である。したがって、モノリシック型では、デバイスドライバを実行したり、レイヤ２スイッチと同等の処理を実行したりするので、ゲストＯＳ間の通信を高速に処理することができる場合がある反面、不安定になる場合もある。【０００５】
マイクロカーネル型は、ハイパーバイザ層の他に、ゲストＯＳとは異なる特別な権限を持った管理ＯＳを実装する形態である。この管理ＯＳは、ＶＭ上で動作するゲストＯＳの１つであり、デバイスドライバを管理する。したがって、マイクロカーネル型では、ゲストＯＳで発生したＩ／Ｏ（Input／Output：入出力）は、管理ＯＳが管理するデバイスドライバを介して処理される。
【先行技術文献】
【特許文献】
【０００６】
【特許文献１】特開２００７−１０９０４０号公報
【特許文献２】特開２００７−１９３４２９号公報
【発明の概要】
【発明が解決しようとする課題】
【０００７】
しかしながら、従来技術では、ゲストＯＳ間の通信が高速ではないという問題がある。【０００８】
例えば、マイクロカーネル型では、ゲスト間通信を実行するためには管理ＯＳによるブリッジ処理を実行することになる。このため、管理ＯＳのコンテキストが切り替わるのを待つことになり、オーバヘッドが発生するので、ゲストＯＳ間の通信に時間がかかる。【０００９】
第１の側面では、ゲストＯＳ間の通信を高速化することができる仮想マシン制御プログラム、仮想マシン制御方法および情報処理装置を提供することを目的とする。
【課題を解決するための手段】
【００１０】
第１の案では、コンピュータに、複数の仮想マシンを稼動させる処理を実行させる。また、コンピュータに、前記複数の仮想マシンのいずれかの仮想マシンからパケットが送信された場合に、前記仮想マシンと他の仮想マシンとの通信を中継する中継処理を実行するプログラムの格納先を記憶する記憶部から、前記プログラムの格納先を特定する処理を実行させる。また、コンピュータに、特定した格納先から読み出したプログラムを実行して、前記パケットを宛先の仮想マシンに中継する処理を実行させる。
【発明の効果】
【００１１】
ゲストＯＳ間の通信を高速化することができる。
【図面の簡単な説明】
【００１２】
【図１】図１は、実施例１に係る情報処理装置の全体構成例を示す図である。
【図２】図２は、仮想制御部１４が仮想ブリッジを実行する例を示す図である。
【図３】図３は、実施例２に係る情報処理装置の構成を示す機能ブロック図である。
【図４】図４は、ＭＡＣ管理テーブル３２に記憶される情報の例を示す図である。
【図５】図５は、ゲストＩＤ管理テーブル３３に記憶される情報の例を示す図である。
【図６】図６は、ハンドラ管理テーブル３４に記憶される情報の例を示す図である。
【図７】図７は、実施例２に係る情報処理装置２０が実行する初期化処理の流れを示すシーケンス図である。
【図８】図８は、実施例２に係る情報処理装置２０が実行する中継処理の流れを示すシーケンス図である。
【図９】図９は、実施例３に係る情報処理装置２０の全体構成例を示す図である。
【図１０】図１０は、実施例３に係るゲストＩＤ管理テーブル３３に記憶される情報の例を示す図である。
【図１１】図１１は、実施例３に係る情報処理装置２０が実行する初期化処理の流れを示すシーケンス図である。
【図１２】図１２は、実施例３に係る情報処理装置２０が実行する中継処理の流れを示すシーケンス図である。
【図１３】図１３は、仮想マシン制御プログラムを実行するコンピュータのハードウェア構成の例を示す図である。
【発明を実施するための形態】
【００１３】
以下に、本発明にかかる仮想マシン制御プログラム、仮想マシン制御方法および情報処理装置の実施例を図面に基づいて詳細に説明する。なお、この実施例によりこの発明が限定されるものではない。
【実施例１】
【００１４】
図１は、実施例１に係る情報処理装置の全体構成例を示す図である。図１に示すように、情報処理装置１０は、仮想制御部１４を実行し、仮想マシン（Virtual  Machine：ＶＭ）として管理ＯＳ（Operating  System）１１とゲストＯＳ（Ａ）１２とゲストＯＳ（Ｂ）１３とを実行する。なお、ここで示したゲストＯＳの数は一例であり、任意の数のゲストＯＳを実行することができる。また、本実施例では、マイクロカーネル型のハイパーバイザを用いてＶＭを動作させる例で説明する。【００１５】
管理ＯＳ１１は、仮想制御部１４によって各種制御が実行されるゲストＯＳの１つであり、他のゲストＯＳとは異なる権限を有するＶＭである。例えば、管理ＯＳ１１は、ゲストＯＳ（Ａ）１２とゲストＯＳ（Ｂ）１３との通信を中継する仮想ブリッジデバイスを提供する。具体的には、管理ＯＳ１１は、ネットバックなどと呼ばれる仮想ネットワークインタフェースである「vif1.0」と「vif2.0」とを有し、「vif1.0」と「vif2.0」とを接続するブリッジインタフェースである「br0」を有する。【００１６】
ゲストＯＳ（Ａ）１２は、仮想制御部１４によって各種制御が実行されるゲストＯＳの１つであり、ネットフロントなどと呼ばれる仮想ネットワークインタフェースである「eth0」を有するＶＭである。この「eth0」は、管理ＯＳ１１の「vif1.0」と接続される。【００１７】
ゲストＯＳ（Ｂ）１３は、仮想制御部１４によって各種制御が実行されるゲストＯＳの１つであり、ネットフロントなどと呼ばれる仮想ネットワークインタフェースである「eth0」を有するＶＭである。この「eth0」は、管理ＯＳ１１の「vif2.0」と接続される。【００１８】
仮想制御部１４は、ハイパーバイザなどのソフトウェアを実行してＶＭが動作する仮想空間を提供し、ＶＭの生成や削除など各種制御を実行する。この仮想制御部１４は、記憶部１４ａと特定部１４ｂと中継部１４ｃとを有する。【００１９】
記憶部１４ａは、ゲストＯＳと他のゲストＯＳとの通信を中継する中継処理を実行するプログラムの格納先を記憶する。例えば、記憶部１４ａは、「vif1.0」と「vif2.0」と「br0」とから構成される仮想ブリッジデバイスを実行するプログラムの格納先を記憶する。なお、格納先の一例としては、アドレス情報などが該当する。【００２０】
特定部１４ｂは、情報処理装置１０上で稼動するゲストＯＳのいずれかのゲストＯＳからパケットが送信された場合に、記憶部１４ａから、中継処理を実行するプログラムの格納先を特定する。中継部１４ｃは、特定部１４ｂによって特定された格納先からプログラムを読み出して実行し、ゲストＯＳから送信されたパケットを宛先の仮想マシンに中継する。【００２１】
ここで、図２を用いて、仮想制御部１４が実行する処理の例を説明する。図２は、仮想制御部１４が仮想ブリッジデバイスを実行する例を示す図である。図２に示す情報処理装置が実行するＶＭ等の構成は、図１と同様である。ここでは、ゲストＯＳ（Ａ）１２がゲストＯＳ（Ｂ）１３にパケットを送信する例について説明する。【００２２】
まず、一般的なゲストＯＳ間通信について説明する。ゲストＯＳ（Ａ）１２は、ゲストＯＳ（Ｂ）１３のＩＰアドレスを宛先としたパケットを送信する。すると、ゲストＯＳ（Ａ）１２のネットフロント「eth0」は、管理ＯＳ１１のネットバック「vif1.0」にパケットの到着を通知する。続いて、ネットバック「vif1.0」に届いたパケットは、管理ＯＳ１１によって読み込まれ、「br0」を介して、ネットバック「vif2.0」に書き込まれる。その後、ネットバック「vif2.0」は、ゲストＯＳ（Ｂ）１３のネットフロント「eth0」にパケットが到着したことを通知する。このようにして、ゲストＯＳ（Ｂ）１３は、ゲストＯＳ（Ａ）１２から送信されたパケットを、管理ＯＳ１１の仮想ブリッジを介して受信する。【００２３】
次に、図２を用いて、実施例１に係る情報処理装置が実行するパケットの送受信の例を説明する。ゲストＯＳ（Ａ）１２は、ゲストＯＳ（Ｂ）１３のＩＰアドレスを宛先としたパケットを送信する。すると、ゲストＯＳ（Ａ）１２のネットフロント「eth0」は、仮想制御部１４に対して、管理ＯＳ１１のネットバック「vif1.0」にパケットが到着したことを通知する。仮想制御部１４は、ネットバック「vif1.0」と「vif2.0」とが「br0」でブリッジ接続されて構成されるブリッジハンドラ１１ａの格納先を記憶部１４ａから特定する。そして、仮想制御部１４は、管理ＯＳ１１に代って、特定した格納先から読み出したブリッジハンドラ１１ａを実行する。そして、仮想制御部１４は、ネットバックにマッピングされるゲストＯＳ（Ｂ）１３のネットフロント「eth0」に、パケットが到着したことを通知する。このようにして、ゲストＯＳ（Ｂ）１３は、ゲストＯＳ（Ａ）１２から送信されたパケットを、管理ＯＳ１１を介することなく受信する。【００２４】
このように、情報処理装置１０の仮想制御部１４は、仮想ブリッジデバイスを提供するブリッジハンドラ１１ａを管理ＯＳ１１に代って実行する。すなわち、仮想制御部１４は、管理ＯＳ１１のカーネル内で動作していたブリッジハンドラ１１ａを、仮想制御部１４などのハイパーバイザのコンテキストで読み出して実行することができる。この結果、情報処理装置１０は、ゲストＯＳと管理ＯＳとの通信を削減することができ、ゲストＯＳ間の通信を高速化することができる。
【実施例２】
【００２５】
次に、実施例２に係る情報処理装置について説明する。実施例２では、実施例２に係る情報処理装置の構成、処理の流れ等について説明する。【００２６】
［情報処理装置の構成］
図３は、実施例２に係る情報処理装置の構成を示す機能ブロック図である。図３に示すように、情報処理装置２０は、仮想領域２１と制御部３０とを有する。なお、ここで示した機能部はあくまで例示であり、図示した機能部以外として、例えばメモリなどの記憶部や入出力インタフェース、通信インタフェースなどを有していてもよい。【００２７】
仮想領域２１は、制御部３０のハイパーバイザ３１によって管理される領域であり、任意の数のＶＭを動作させることができる。図３では、ＶＭとして、管理ＯＳ（Ａ）２２、管理ＯＳ（Ｂ）２３、ゲストＯＳ（Ａ）２４、ゲストＯＳ（Ｂ）２５、ゲストＯＳ（Ｃ）２６、ゲストＯＳ（Ｄ）２７が動作している。【００２８】
ここでは、管理ＯＳ（Ａ）２２には、ＶＭを識別するゲストＩＤとして「０」が割当てられており、管理ＯＳ（Ｂ）２３には、ゲストＩＤとして「１」が割当てられている。また、ゲストＯＳ（Ａ）２４には、ＭＡＣ（Media  Access  Control）アドレスとしてＭＡＣ（Ａ）が設定されており、ゲストＯＳ（Ｂ）２５には、ＭＡＣアドレスとしてＭＡＣ（Ｂ）が設定されている。同様に、ゲストＯＳ（Ｃ）２６には、ＭＡＣアドレスとしてＭＡＣ（Ｃ）が設定されており、ゲストＯＳ（Ｄ）２７には、ＭＡＣアドレスとしてＭＡＣ（Ｄ）が設定されている。【００２９】
また、管理ＯＳ（Ａ）２２は、仮想ネットワークインタフェースであるネットバック「vif1.0」とネットバック「vif2.0」とを有し、「vif1.0」と「vif2.0」とを接続するブリッジインタフェースである「br0」を有する。管理ＯＳ（Ｂ）２３は、仮想ネットワークインタフェースであるネットバック「vif3.0」とネットバック「vif4.0」とを有し、「vif3.0」と「vif4.0」とを接続するブリッジインタフェースである「br1」を有する。【００３０】
ゲストＯＳ（Ａ）２４は、仮想ネットワークインタフェースであるネットフロント「eth0」を有するＶＭである。このゲストＯＳ（Ａ）２４の「eth0」は、管理ＯＳ（Ａ）２２の「vif1.0」と接続される。ゲストＯＳ（Ｂ）２５は、仮想ネットワークインタフェースであるネットフロント「eth0」を有するＶＭである。このゲストＯＳ（Ｂ）２５の「eth0」は、管理ＯＳ（Ａ）２２の「vif2.0」と接続される。ゲストＯＳ（Ｃ）２６は、仮想ネットワークインタフェースであるネットフロント「eth0」を有するＶＭである。このゲストＯＳ（Ｃ）２６の「eth0」は、管理ＯＳ（Ｂ）２３の「vif3.0」と接続される。ゲストＯＳ（Ｄ）２７は、仮想ネットワークインタフェースであるネットフロント「eth0」を有するＶＭである。このゲストＯＳ（Ｄ）２７の「eth0」は、管理ＯＳ（Ｂ）２３の「vif4.0」と接続される。【００３１】
すなわち、管理ＯＳ（Ａ）２２は、ゲストＯＳ（Ａ）２４とゲストＯＳ（Ｂ）２５との通信を中継する仮想ブリッジデバイスを提供する。管理ＯＳ（Ｂ）２３は、ゲストＯＳ（Ｃ）２６とゲストＯＳ（Ｄ）２７との通信を中継する仮想ブリッジデバイスを提供する。【００３２】
この仮想領域２１で動作する各ゲストＯＳや管理ＯＳには、ハイパーバイザ３１によって仮想プロセッサと仮想メモリとが割り当てられ、各ゲストＯＳや管理ＯＳは、この仮想プロセッサと仮想メモリによりＶＭとして動作し、各種処理を実行する。なお、仮想メモリは、情報処理装置２０のメモリにおける所定領域をゲストＯＳや管理ＯＳが使用するメモリとして割り当てることで実現された仮想的なメモリである。仮想プロセッサは、情報処理装置２０のプロセッサにおける所定処理能力をゲストＯＳや管理ＯＳが使用するプロセッサとして割り当てることで実現された仮想的なプロセッサである。【００３３】
制御部３０は、処理制御部３０ａとハイパーバイザ３１とを有し、これらによってゲストＯＳ間の通信を制御する処理部であり、例えばＣＰＵ（Central  Processing  Unit）などの電子回路である。なお、制御部３０は、内部メモリ等を有していてもよい。【００３４】
処理制御部３０ａは、ゲストＯＳや管理ＯＳに関する処理以外の処理を実行する処理部である。例えば、処理制御部３０ａは、情報処理装置２０に搭載されるＯＳの起動停止、ハイパーバイザ３１の起動停止を実行する。【００３５】
ハイパーバイザ３１は、ＶＭの生成や削除などＶＭに関する各種処理を実行する処理部であり、ゲストＯＳ間の通信を制御する処理部である。このハイパーバイザ３１は、ＭＡＣ管理テーブル３２、ゲストＩＤ管理テーブル３３、ハンドラ管理テーブル３４、情報格納部３５、ゲスト特定部３６、ハンドラ特定部３７、実行制御部３８を有する。なお、各テーブルは、メモリ等の記憶装置に設けられ、管理者や後述する情報格納部３５によって更新される。【００３６】
ＭＡＣ管理テーブル３２は、各ゲストＯＳのＭＡＣアドレスに対応付けて、各ゲストＯＳのネットフロントにマッピングされるネットバックを特定する情報を記憶する。図４は、ＭＡＣ管理テーブル３２に記憶される情報の例を示す図である。図４に示すように、ＭＡＣ管理テーブル３２は、「ＭＡＣアドレス」と「デバイスＩＤ」とを対応付けて記憶する。ここで記憶される「ＭＡＣアドレス」は、各ゲストＯＳに設定されたＭＡＣアドレスを示す。「デバイスＩＤ」は、管理ＯＳのネットバックを特定する情報を示し、例えばネットバックの名称や識別子、ネットバックが使用するデバイスＩＤなどが記憶される。なお、ここでは、「デバイスＩＤ」としてネットバックの識別子が記憶される例を図示している。【００３７】
図４の場合、ＭＡＣ（Ａ）を有するゲストＯＳ（Ａ）２４は、管理ＯＳ（Ａ）２２のネットバック「vif1.0」に接続されることを示す。また、ＭＡＣ（Ｂ）を有するゲストＯＳ（Ｂ）２５は、管理ＯＳ（Ａ）２２のネットバック「vif2.0」に接続されることを示す。ＭＡＣ（Ｃ）を有するゲストＯＳ（Ｃ）２６は、管理ＯＳ（Ｂ）２３のネットバック「vif3.0」に接続されることを示す。また、ＭＡＣ（Ｄ）を有するゲストＯＳ（Ｄ）２７は、管理ＯＳ（Ｂ）２３のネットバック「vif4.0」に接続されることを示す。【００３８】
ゲストＩＤ管理テーブル３３は、各管理ＯＳが使用する仮想的なブリッジデバイスに関する情報を記憶する。図５は、ゲストＩＤ管理テーブル３３に記憶される情報の例を示す図である。図５に示すように、ゲストＩＤ管理テーブル３３は、「ゲストＩＤ、デバイスＩＤ、ブリッジデバイスアドレス」を記憶する。【００３９】
ここで記憶される「ゲストＩＤ」は、管理ＯＳを識別する識別子を示す。「デバイスＩＤ」は、管理ＯＳが使用する仮想ネットワークインタフェースを識別する識別子を示す。「ブリッジデバイスアドレス」は、管理ＯＳが使用する仮想的なブリッジデバイス自身を指すアドレス情報を示し、例えば構造体の先頭アドレスが格納される。なお、ゲストＩＤ管理テーブル３３は、ネットフロントのＭＡＣアドレスとネットバックの名称との対応表を記憶してもよい。また、デバイスＩＤにネットフロントの識別等を使用してもよい。【００４０】
図５の場合、構造体における「net＿deviceA」を先頭アドレスとする位置に、ゲストＩＤが「０」の管理ＯＳ（Ａ）２２のネットバック「vif1.0」および「vif2.0」を有する仮想的なブリッジデバイスが格納されることを示す。同様に、構造体における「net＿deviceB」を先頭アドレスとする位置に、ゲストＩＤが「１」の管理ＯＳ（Ｂ）２３のネットバック「vif3.0」および「vif4.0」を有する仮想的なブリッジデバイスが格納されることを示す。【００４１】
ハンドラ管理テーブル３４は、各管理ＯＳが実行するブリッジハンドラの格納先を記憶する。すなわち、ハンドラ管理テーブル３４は、仮想的なブリッジデバイスのエントリポイントを記憶する。図６は、ハンドラ管理テーブル３４に記憶される情報の例を示す図である。図６に示すように、ハンドラ管理テーブル３４は、「ゲストＩＤ、割込みベクタ、ブリッジハンドラ、構造体識別子、ゲストページテーブル」を対応付けて記憶する。【００４２】
ここで記憶される「ゲストＩＤ」は、管理ＯＳを識別する識別子を示す。「割込みベクタ」は、割込みの要因を識別する識別子である。「ブリッジハンドラ」は、管理ＯＳが使用する物理アドレスの形式、言い換えると、ハイパーバイザ３１によって提供される仮想アドレス空間のアドレス形式で格納され、ブリッジハンドラが格納される格納先の先頭アドレスを示す。「構造体識別子」は、構造体の種別を特定する情報である。「ゲストページテーブル」は、管理ＯＳの仮想空間に変換するために使用するページテーブルであり、管理ＯＳが保持している物理アドレス空間の先頭アドレス、つまり、ハイパーバイザ３１が提供する仮想アドレス空間の先頭アドレスを示す。【００４３】
図６の場合、管理ＯＳ（Ａ）２２が実行するブリッジハンドラは、br＿netdev＿ops0構造体に格納されていることを示す。そして、ゲストＩＤが「０」の管理ＯＳ（Ａ）２２に対する割込みベクタが「０」である割込みが発生した場合、ＰＴ０を用いて、管理ＯＳ（Ａ）２２の物理アドレス「br＿netdev＿ops0」を仮想アドレスに変換することを示す。さらに、管理ＯＳ（Ｂ）２３が実行するブリッジハンドラは、br＿netdev＿ops1構造体に格納されていることを示す。そして、ゲストＩＤが「１」の管理ＯＳ（Ｂ）２３に対する割込みベクタが「０」である割込みが発生した場合、ＰＴ１を用いて、管理ＯＳ（Ｂ）２３の物理アドレス「br＿netdev＿ops1」を仮想アドレスに変換することを示す。【００４４】
このように、ハンドラ管理テーブル３４には、構造体のアドレスを登録したときに、通常の関数へのアドレスと区別するために構造体であることを示す構造体を登録する。この結果、ハイパーバイザ３１は、ブリッジハンドラ全体の格納先を特定することができる。なお、構造体識別子は、単純なフラグでもよいし、構造体のメンバへのオフセットを格納してもよい。また、割込みベクタが「０」である割込みの一例としては、ゲストＯＳ間のパケット通信が該当する。【００４５】
情報格納部３５は、ＭＡＣ管理テーブル３２、ゲストＩＤ管理テーブル３３、ハンドラ管理テーブル３４に各種情報を格納する処理部である。なお、情報格納部３５は、管理ＯＳの設定情報やアドレス情報を自動でメモリや管理ＯＳ等から取得して格納してもよく、管理者等から受け付けた情報を格納してもよい。【００４６】
例えば、情報格納部３５は、ゲストＯＳが作成された場合またはゲストＯＳが稼動した場合に、ゲストＯＳのＭＡＣアドレスとゲストＯＳが接続する管理ＯＳのネットバックとを対応付けて、ＭＡＣ管理テーブル３２に格納する。また、情報格納部３５は、管理ＯＳが作成された場合または管理ＯＳが稼動した場合に、ゲストＩＤとデバイスＩＤとブリッジデバイスアドレスとを対応付けて、ゲストＩＤ管理テーブル３３に格納する。また、情報格納部３５は、管理ＯＳが作成された場合または管理ＯＳが稼動した場合に、ゲストＩＤと割込みベクタとブリッジハンドラと構造体識別子とゲストページテーブルとを対応付けて、ハンドラ管理テーブル３４に格納する。【００４７】
ゲスト特定部３６は、ゲストＯＳからパケットが送信された場合に、当該パケットを中継するブリッジデバイスのアドレスや当該ブリッジデバイスを実行する管理ＯＳを特定する処理部である。一例として、ゲストＯＳ（Ａ）２４がゲストＯＳ（Ｂ）２５に対してパケットを送信した例で説明する。【００４８】
この場合、ゲスト特定部３６は、送信元であるゲストＯＳ（Ａ）２４のＭＡＣアドレス「ＭＡＣ（Ａ）」と、宛先であるゲストＯＳ（Ｂ）２５のＭＡＣアドレス「ＭＡＣ（Ｂ）」とを、送信されたパケットのヘッダ等から特定する。そして、ゲスト特定部３６は、特定した「ＭＡＣ（Ａ）」に対応するデバイスＩＤ「vif1.0」をＭＡＣ管理テーブル３２から特定する。同様に、ゲスト特定部３６は、特定した「ＭＡＣ（Ｂ）」に対応するデバイスＩＤ「vif2.0」をＭＡＣ管理テーブル３２から特定する。【００４９】
続いて、ゲスト特定部３６は、「vif1.0」に対応付けられたゲストＩＤ「０」とブリッジアドレス「net＿deviceA」とをゲストＩＤ管理テーブル３３から特定する。同様に、ゲスト特定部３６は、「vif2.0」に対応付けられたゲストＩＤ「０」とブリッジアドレス「net＿deviceA」とをゲストＩＤ管理テーブル３３から特定する。このとき、ゲスト特定部３６は、特定したブリッジアドレス「net＿deviceA」が一致するか否かを判定する。つまり、ゲスト特定部３６は、送信元のゲストＯＳが接続されるブリッジデバイスと、宛先のゲストＯＳが接続されるブリッジデバイスとが一致するか否かを判定する。【００５０】
そして、ゲスト特定部３６は、宛先のＭＡＣアドレスから特定したゲストＩＤとブリッジアドレスとともに、判定結果をハンドラ特定部３７に通知する。なお、ゲスト特定部３６は、ゲストＯＳ（Ａ）２４がゲストＯＳ（Ｂ）２５に対してパケットを送信したことを示す割込みベクタとして「０」をハンドラ特定部３７に通知する。【００５１】
ハンドラ特定部３７は、送信されたパケットを中継する仮想的なブリッジデバイスを呼び出すブリッジハンドラを特定する処理部である。具体的には、ハンドラ特定部３７は、送信されたパケットを宛先に届けるために、パケットの中継処理を実行するブリッジハンドラの格納先であるアドレス情報を特定する。【００５２】
上記例で説明すると、ハンドラ特定部３７は、割込みベクタ「０」とゲストＩＤ「０」とブリッジアドレス「net＿deviceA」と判定結果とをゲスト特定部３６から取得する。そして、ハンドラ特定部３７は、割込みベクタ「０」とゲストＩＤ「０」とブリッジアドレス「net＿deviceA」とをキーにして、ハンドラ管理テーブル３４を参照し、ブリッジハンドラ「br＿netdev＿ops0」と構造体識別子「BRIDGE」とゲストページテーブル「ＰＴ０」とを特定する。その後、ハンドラ特定部３７は、特定した情報およびブリッジアドレスを実行制御部３８に通知する。【００５３】
また、ハンドラ特定部３７は、ゲスト特定部３６から通知された判定結果が「一致」であった場合に、上記各処理を実行してもよい。また、ハンドラ特定部３７は、ゲスト特定部３６から通知された判定結果が「不一致」であった場合に、上記各処理を実行することなく、ゲストＯＳからパケットが送信されたことを管理ＯＳに通知することもできる。【００５４】
実行制御部３８は、ブリッジハンドラを実行する処理部である。具体的には、実行制御部３８は、管理ＯＳのカーネル内で動作していたブリッジハンドラを、ハイパーバイザ３１のコンテキストで読み出して実行する。【００５５】
上記例で説明すると、実行制御部３８は、ブリッジハンドラ「br＿netdev＿ops0」と構造体識別子「BRIDGE」とゲストページテーブル「ＰＴ０」とブリッジアドレス「net＿deviceA」とをハンドラ特定部３７から取得する。そして、実行制御部３８は、ゲストページテーブル「ＰＴ０」を用いて、「br＿netdev＿ops0」を管理ＯＳ（Ａ）２２が管理する物理アドレス空間の物理アドレスから、管理ＯＳ（Ａ）２２が管理する論理アドレス空間の論理アドレスに変換する。その後、実行制御部３８は、ブリッジアドレス「net＿deviceA」を引数にして、変換した仮想アドレスからブリッジハンドラを読み出して実行する。このようにして、実行制御部３８は、実行したブリッジハンドラ内のネットバック「eth0」にパケットが到着したことを、宛先のゲストＯＳ（Ｂ）２５に通知する。【００５６】
［処理の流れ］
次に、情報処理装置２０が実行する処理の流れを説明する。ここでは、初期化処理とパケット中継処理について説明する。【００５７】
（初期化処理）
図７は、実施例２に係る情報処理装置２０が実行する初期化処理の流れを示すシーケンス図である。図７に示すように、オペレータや管理者等によってゲストＯＳが仮想領域２１に作成される、または、ゲストＯＳが使用するＮＩＣ（ネットワークインタフェースカード）デバイスが追加されると（Ｓ１０１とＳ１０２）、管理ＯＳはＳ１０３とＳ１０４を実行する。すなわち、管理ＯＳは、ゲストＯＳの作成指示やＮＩＣの追加指示をハイパーバイザ３１に出力する。【００５８】
そして、ハイパーバイザ３１の情報格納部３５は、作成されたゲストＯＳや追加されたＮＩＣデバイスに対応する情報を格納したレコードを、ゲストＩＤ管理テーブル３３に登録する（Ｓ１０５）。このとき、情報格納部３５は、作成されたゲストＯＳや追加されたＮＩＣデバイスに対応する情報を格納したレコードを、ＭＡＣ管理テーブル３２にも登録する。【００５９】
その後、管理ＯＳは、ブリッジハンドラの登録指示をハイパーバイザ３１に出力する（Ｓ１０６とＳ１０７）。つまり、管理ＯＳは、生成されたゲストＯＳのネットフロントと管理ＯＳのネットバックとが接続されたことを検出して、仮想的なブリッジデバイスを確立させる。そして、管理ＯＳは、確立した仮想的なブリッジデバイスを実行するプログラムの格納先をハイパーバイザ３１に通知する。【００６０】
その後、ハイパーバイザ３１の情報格納部３５は、管理ＯＳから通知されたプログラムの格納先をハンドラ管理テーブル３４に登録する（Ｓ１０８）。このとき、情報格納部３５は、管理ＯＳのゲストＩＤ、割込みベクタ、ゲストページテーブル等を管理ＯＳ等から取得して、プログラムの格納先とともにハンドラ管理テーブル３４に登録する。【００６１】
（中継処理）
図８は、実施例２に係る情報処理装置２０が実行する中継処理の流れを示すシーケンス図である。図８に示すように、ゲストＯＳ（Ａ）２４は、ゲストＯＳ（Ｂ）２５への通信要求が発生すると（Ｓ２０１）、ハイパーバイザ３１に対して、通信要求が発生したことを通知する（Ｓ２０２）。つまり、ゲストＯＳ（Ａ）２４の仮想インタフェースである「eth0」が、自身と接続される管理ＯＳ（Ａ）２２のネットバック「vif1.0」にパケットが到着したことをハイパーバイザ３１に通知する。【００６２】
すると、ハイパーバイザ３１のゲスト特定部３６は、ネットバック「vif1.0」に到着したパケットに基づいてＳ２０３を実行する。すなわち、ゲスト特定部３６は、送信元であるゲストＯＳ（Ａ）２４のＭＡＣアドレスと、宛先であるゲストＯＳ（Ｂ）２５のＭＡＣアドレスとをパケットから抽出する。そして、ゲスト特定部３６は、各ＭＡＣアドレスをキーにしてＭＡＣ管理テーブル３２を参照して、送信元のゲストＯＳ（Ａ）２４に接続されるネットバックのデバイスＩＤと、宛先のゲストＯＳ（Ｂ）２５に接続されるネットバックのデバイスＩＤとを特定する。【００６３】
その後、ゲスト特定部３６は、送信元のデバイスＩＤをキーにして、ゲストＩＤ管理テーブル３３から、送信元のデバイスＩＤに対応するゲストＩＤとブリッジデバイスアドレスとを取得する（Ｓ２０４）。同様に、ゲスト特定部３６は、宛先のデバイスＩＤをキーにして、ゲストＩＤ管理テーブル３３から、宛先のデバイスＩＤに対応するゲストＩＤとブリッジデバイスアドレスとを取得する（Ｓ２０５）。【００６４】
続いて、ゲスト特定部３６は、Ｓ２０４で特定したブリッジデバイスアドレスと、Ｓ２０５で特定したブリッジデバイスアドレスとが一致するかを判定する（Ｓ２０６）。なお、ここでは、一致したとする。【００６５】
その後、ハンドラ特定部３７は、宛先のゲストＯＳ（Ｂ）２５に接続されるネットバックのデバイスＩＤをキーにして、ハンドラ管理テーブル３４からブリッジハンドラ、構造体識別子、ゲストページテーブルを取得する（Ｓ２０７）。【００６６】
そして、実行制御部３８は、特定されたブリッジデバイスアドレスを引数にして、特定したブリッジハンドラのアドレスから、ブリッジハンドラを読み出して実行する（Ｓ２０８とＳ２０９）。【００６７】
その後、実行制御部３８は、ネットバック「vif1.0」と「br0」でブリッジ接続されるネットバック「vif2.0」にマッピングされるネットフロント「eth0」を有するゲストＯＳ（Ｂ）２５に、パケットが到着したことを通知する（Ｓ２１０とＳ２１１）。【００６８】
そして、ゲストＯＳ（Ｂ）２５は、パケットが到着したこと、すなわちパケットを受信したことを確認し（Ｓ２１２）、正常に受信したことをハイパーバイザ３１に通知する（Ｓ２１３）。そして、ハイパーバイザ３１の実行制御部３８は、パケットが宛先に正常に受信されたことを示す応答を送信元のゲストＯＳ（Ａ）２４に通知する（Ｓ２１４とＳ２１５）。【００６９】
このように、実施例２に係る情報処理装置２０では、ハイパーバイザ３１が、管理ＯＳで設定されたネットワーク情報を受け取って、仮想ブリッジデバイスの構成情報や呼び出すべきハンドラを格納し、登録されたハンドラを呼び出すことができる。このため、管理ＯＳの実行を待つことなく、管理ＯＳの処理を直接呼び出すことができるため、高速にゲスト間の通信を実現することができる。
【実施例３】
【００７０】
ところで、実施例２では、ハイパーバイザが、ネットバックとブリッジインタフェースとから構成されるブリッジハンドラ全体を管理ＯＳに代って実行する例について説明したが、これに限定されるものではない。例えば、ハイパーバイザは、宛先のゲストＯＳに接続されるネットバックのキューイングバッファに、パケットを格納することで、パケットの中継処理を実行することもできる。そこで、実施例３では、キューイングバッファにパケットを格納するキューイングハンドラを管理ＯＳに代って実行する例について説明する。【００７１】
［全体構成］
図９は、実施例３に係る情報処理装置２０の全体構成例を示す図である。図９に示すように、実施例３に係る情報処理装置２０は、実施例２に係る情報処理装置と同様の構成を有する。なお、ここでは、図３に示した実施例２に係る情報処理装置２０の一部を抜粋して図示している。また、実施例３に係る情報処理装置１０は、実施例２と同様のテーブルを保持するとする。そして、実施例１や実施例２等と異なる点は、ゲストＩＤ管理テーブル３３にバッファキューの先頭アドレスが格納されている点である。図１０は、実施例３に係るゲストＩＤ管理テーブル３３に記憶される情報の例を示す図である。【００７２】
図１０に示すように、実施例３に係るゲストＩＤ管理テーブル３３は、「ゲストＩＤ、デバイスＩＤ、ブリッジデバイスアドレス、バッファキュー」を対応付けて記憶する。ここで記憶される「ゲストＩＤ、デバイスＩＤ、ブリッジデバイスアドレス」は、図５と同様なので詳細な説明は省略する。「バッファキュー」は、パケットを格納してキューを形成させるバッファの先頭アドレスを示す。なお、ゲストＩＤ管理テーブル３３は、「ブリッジデバイスアドレス」を記憶していなくてもよい。【００７３】
図１０を用いて一例を説明すると、構造体における「net＿deviceA」を先頭アドレスとする位置に、ゲストＩＤが「０」の管理ＯＳ（Ａ）２２のネットバック「vif1.0」および「vif2.0」を有する仮想的なブリッジデバイスが格納されることを示す。また、ネットバック「vif1.0」に到着したパケットを格納するバッファのアドレスが「queue1」であることを示す。同様に、構造体における「net＿deviceB」を先頭アドレスとする位置に、ゲストＩＤが「１」の管理ＯＳ（Ｂ）２３のネットバック「vif3.0」および「vif4.0」を有する仮想的なブリッジデバイスが格納されることを示す。また、ネットバック「vif3.0」に到着したパケットを格納するバッファのアドレスが「queue3」であることを示す。【００７４】
このような状態において、ゲストＯＳ（Ａ）２４がゲストＯＳ（Ｂ）２５にパケットを送出する例について説明する。ゲストＯＳ（Ａ）２４は、ゲストＯＳ（Ｂ）２５のＩＰアドレスを宛先としたパケットを送出する。そして、ゲストＯＳ（Ａ）２４のネットフロント「eth0」は、ハイパーバイザ３１に対して、管理ＯＳ２２のネットバック「vif1.0」にパケットが到着したことを通知する。【００７５】
すると、図９に示すように、ハイパーバイザ３１は、パケットが到着したネットバック「vif1.0」にブリッジ接続されるネットバック「vif2.0」のキューイングハンドラ３１ａの格納位置を特定する。すなわち、ハイパーバイザ３１は、ゲストＩＤ管理テーブル３３に記憶されるバッファキューを引数にして、ハンドラ管理テーブル３４に記憶されるキューイングハンドラ３１ａを実行して、キューイングバッファを読み出す。そして、ハイパーバイザ３１は、読み出したネットバック「vif2.0」のキューイングバッファに、送信されたパケットを書き込む。そして、ハイパーバイザ３１は、ネットバックにマッピングされるゲストＯＳ（Ｂ）２５のネットフロント「eth0」にパケットが到着したことを通知する。このようにして、ゲストＯＳ（Ｂ）２５は、ネットバック「vif2.0」に対応するキューイングバッファからパケット読み出すことで、管理ＯＳ（Ａ）２２を介することなく、ゲストＯＳ（Ａ）２４から送信されたパケットを受信する。【００７６】
［処理の流れ］
次に、実施例３に係る情報処理装置２０が実行する処理の流れを説明する。ここでは、初期化処理とパケット中継処理について説明する。【００７７】
（初期化処理）
図１１は、実施例３に係る情報処理装置２０が実行する初期化処理の流れを示すシーケンス図である。図１１に示すように、Ｓ３０１からＳ３０８までの処理は、図７で説明したＳ１０１からＳ１０８までの処理と同様なので、ここでは詳細な説明を省略する。【００７８】
Ｓ３０１からＳ３０８までを実行後、管理ＯＳは、キューイングハンドラの登録指示をハイパーバイザ３１に出力する（Ｓ３０９とＳ３１０）。つまり、管理ＯＳは、生成されたゲストＯＳのネットフロントにネットバックをマッピングし、ネットバックに対応するバッファを呼び出すプログラムのアドレスをハイパーバイザ３１に通知する。【００７９】
その後、ハイパーバイザ３１の情報格納部３５は、管理ＯＳから通知されたキューイングハンドラを呼び出すプログラムの格納先をハンドラ管理テーブル３４に登録する（Ｓ３１１）。なお、ブリッジハンドラを登録する処理と、キューイングハンドラを登録する処理とは、図１１に示した順番に実行されなくてよい。例えば、並行して実行してもよく、キューイングハンドラを登録する処理を、ブリッジハンドラを登録する処理より先に実行してもよい。【００８０】
（中継処理）
図１２は、実施例３に係る情報処理装置２０が実行する中継処理の流れを示すシーケンス図である。図１３に示すように、ゲストＯＳ（Ａ）２４は、ゲストＯＳ（Ｂ）２５への通信要求が発生すると（Ｓ４０１）、ハイパーバイザ３１に対して、通信要求が発生したことを通知する（Ｓ４０２）。つまり、ゲストＯＳ（Ａ）２４の仮想インタフェースである「eth0」が、自身と接続される管理ＯＳ（Ａ）２２のネットバック「vif1.0」にパケットが到着したことをハイパーバイザ３１に通知する。【００８１】
すると、ハイパーバイザ３１のゲスト特定部３６は、ネットバック「vif1.0」に到着したパケットに基づいてＳ４０３を実行する。すなわち、ゲスト特定部３６は、送信元であるゲストＯＳ（Ａ）２４のＭＡＣアドレスと宛先であるゲストＯＳ（Ｂ）２５のＭＡＣアドレスをパケットから抽出する。そして、ゲスト特定部３６は、各ＭＡＣアドレスをキーにしてＭＡＣ管理テーブル３２を参照して、送信元のゲストＯＳ（Ａ）２４と接続されるネットバックのデバイスＩＤと、宛先のゲストＯＳ（Ｂ）２５と接続されるネットバックのデバイスＩＤとを特定する。【００８２】
その後、ゲスト特定部３６は、送信元のデバイスＩＤをキーにして、ゲストＩＤ管理テーブル３３から、送信元のデバイスＩＤに対応するゲストＩＤとブリッジデバイスアドレスとバッファキューとを取得する（Ｓ４０４）。同様に、ゲスト特定部３６は、宛先のデバイスＩＤをキーにして、ゲストＩＤ管理テーブル３３から、宛先のデバイスＩＤに対応するゲストＩＤとブリッジデバイスアドレスとバッファキューとを取得する（Ｓ４０５）。【００８３】
続いて、ゲスト特定部３６は、Ｓ３０４で特定したバッファキューと、Ｓ３０５で特定したバッファキューとが一致するかを判定する（Ｓ４０６）。なお、ここでは、一致したとする。【００８４】
その後、ハンドラ特定部３７は、宛先のゲストＯＳ（Ｂ）２５と接続されるネットバックのデバイスＩＤをキーにして、ハンドラ管理テーブル３４からキューイングハンドラ、構造体識別子、ゲストページテーブルを取得する（Ｓ４０７）。【００８５】
そして、実行制御部３８は、特定されたバッファキューを引数にして、特定したブリッジハンドラのアドレスから、キューイングハンドラを読み出して実行する（Ｓ４０８とＳ４０９）。こうして、実行制御部３８は、キューイングハンドラを実行することで特定したバッファに、パケットを追加する。【００８６】
その後、実行制御部３８は、ネットバック「vif1.0」と「br0」でブリッジ接続されるネットバック「vif2.0」にマッピングされるネットフロント「eth0」を有するゲストＯＳ（Ｂ）２５に、パケットが到着したことを通知する（Ｓ４１０とＳ４１１）。【００８７】
そして、ゲストＯＳ（Ｂ）２５は、パケットが到着したこと、すなわちパケットを受信したことを確認し（Ｓ４１２）、正常に受信したことをハイパーバイザ３１に通知する（Ｓ４１３）。そして、ハイパーバイザ３１の実行制御部３８は、パケットが宛先に正常に受信されたことを示す応答を送信元のゲストＯＳ（Ａ）２４に通知する（Ｓ４１４とＳ４１５）。【００８８】
このようにすることで、ハイパーバイザ３１は、ネットバック内でパケットをキューに追加するルーチンを、キューイングハンドラとしてハンドラ管理テーブル３４に登録することができる。そして、ハイパーバイザ３１は、宛先のゲストＯＳの受信対象のパケットがキューを形成するバッファへパケットを格納する処理を、管理ＯＳに代って実行することができる。この結果、ハイパーバイザ３１は、仮想的なブリッジデバイス全体を管理ＯＳに代って実行する場合に比べて、代行して読み出すアドレス領域等を少なくすることができるので、ゲストＯＳ間の通信をより高速化することができる。
【実施例４】
【００８９】
さて、これまで本発明の実施例について説明したが、本発明は上述した実施例以外にも、種々の異なる形態にて実施されてよいものである。そこで、以下に異なる実施例を説明する。【００９０】
（管理ＯＳとの併用）
例えば、開示する情報処理装置は、管理ＯＳに代ってブリッジハンドラを実行する場合と、管理ＯＳにブリッジハンドラの実行を依頼する場合とを併用することができる。例えば、開示する情報処理装置のハイパーバイザ３１は、図８のＳ２０６において、ブリッジデバイスアドレスが一致しない場合には、従来技術と同様、管理ＯＳにパケット中継を依頼するようにしてもよい。つまり、開示する情報処理装置のハイパーバイザ３１は、送信元のゲストＯＳと接続されるネットバックと、宛先のゲストＯＳと接続されるネットバックとがブリッジ接続されていない場合に、管理ＯＳにパケット中継を依頼する。【００９１】
すなわち、ハイパーバイザ３１は、送信元と宛先とが同一ブリッジに接続されていない場合に、管理ＯＳにパケット中継を依頼する。このように、管理ＯＳや仮想的なブリッジデバイスを跨るために、ハイパーバイザ３１が管理する情報が増える場合には、従来技術を用いることができる。この結果、ハイパーバイザ３１が使用するメモリ容量等を抑制でき、ゲストＯＳ間の通信も高速化できる。また、管理ＯＳを跨ってブリッジデバイスの設定情報などハイパーバイザ３１に組み込むことなく、ゲストＯＳ間の通信の高速化が期待でき、ハイパーバイザ３１を開発するコストを抑制することもできる。なお、上記処理は、図１２のＳ４０６においても適用することができる。その場合、上記ブリッジデバイスアドレスに変えて、バッファキューの一致を判定することもできる。【００９２】
（プロセッサ間通信）
また、開示する情報処理装置は、異なるプロセッサへの通信の場合には、割込みハンドラから、登録されたハンドラを呼び出すこともできる。例えば、情報処理装置２０は、割込みの宛先となるゲストＯＳを識別するゲストＩＤ、ゲストＯＳのＭＡＣアドレス、ゲストＯＳを実行するプロセッサを識別する識別子を対応付けて記憶する割込みターゲットレジスタを保持する。また、情報処理装置２０は、ハンドラ管理テーブル３４に、ゲストＩＤ等に対応付けて割込みハンドラの先頭アドレスを記憶する。【００９３】
このような構成において、情報処理装置２０のハイパーバイザ３１は、ゲストＯＳ間の通信などの割込みが発生した場合に、割込み要求元のゲストＯＳと割込み要求先のゲストＯＳが同じプロセッサで動作しているかを、割込みターゲットレジスタを参照して判定する。そして、ハイパーバイザ３１は、同一プロセッサであると判定した場合に、従来技術と同様に、割込み処理を発生させる。一方、ハイパーバイザ３１は、異なるプロセッサであると判定した場合に、ハンドラ管理テーブル３４から該当する割込みハンドラを読み出して、割込みコントローラ等に代って割込みハンドラを実行する。このようにすることで、異なるプロセッサへの通信が発生した場合に、プロセッサ間の通信を削減することができるので、プロセッサを跨った割込み処理を高速に実行することができる。【００９４】
（システム）
また、本実施例において説明した各処理のうち、自動的におこなわれるものとして説明した処理の全部または一部を手動的におこなうこともできる。あるいは、手動的におこなわれるものとして説明した処理の全部または一部を公知の方法で自動的におこなうこともできる。この他、上記文書中や図面中で示した処理手順、制御手順、具体的名称、各種のデータやパラメータを含む情報については、特記する場合を除いて任意に変更することができる。【００９５】
また、図示した各装置の各構成要素は機能概念的なものであり、必ずしも物理的に図示の如く構成されていることを要しない。すなわち、各装置の分散・統合の具体的形態は図示のものに限られない。つまり、その全部または一部を、各種の負荷や使用状況などに応じて、任意の単位で機能的または物理的に分散・統合して構成することができる。さらに、各装置にて行なわれる各処理機能は、その全部または任意の一部が、ＣＰＵおよび当該ＣＰＵにて解析実行されるプログラムにて実現され、あるいは、ワイヤードロジックによるハードウェアとして実現され得る。【００９６】
（ハードウェア）
ところで、上記の実施例で説明した各種の処理は、あらかじめ用意されたプログラムをパーソナルコンピュータやワークステーションなどのコンピュータシステムで実行することによって実現することができる。そこで、以下では、上記の実施例と同様の機能を有するプログラムを実行するコンピュータシステムの一例を説明する。【００９７】
図１３は、仮想マシン制御プログラムを実行するコンピュータのハードウェア構成の例を示す図である。図１３に示すように、コンピュータ１００は、ＣＰＵ１０２、入力装置１０３、出力装置１０４、通信インタフェース１０５、媒体読取装置１０６、ＨＤＤ（Hard  Disk  Drive）１０７、ＲＡＭ（Random  Access  Memory）１０８を有する。また、図１３に示した各部は、バス１０１で相互に接続される。【００９８】
入力装置１０３は、マウスやキーボードであり、出力装置１０４は、ディスプレイなどであり、通信インタフェース１０５は、ＮＩＣなどのインタフェースである。ＨＤＤ１０７は、仮想マシン制御プログラム１０７ａととともに、図４から図６に示した各テーブルの情報を記憶する。記録媒体の例としてＨＤＤ１０７を例に挙げたが、ＲＯＭ（Read  Only  Memory）、ＲＡＭ（Random  Access  Memory）、ＣＤ−ＲＯＭ等の他のコンピュータ読み取り可能な記録媒体に各種プログラムを格納しておき、コンピュータに読み取らせることとしてもよい。なお、記憶媒体を遠隔地に配置し、コンピュータが、その記憶媒体にアクセスすることでプログラムを取得して利用してもよい。また、その際、取得したプログラムをそのコンピュータ自身の記録媒体に格納して用いてもよい。【００９９】
ＣＰＵ１０２は、仮想マシン制御プログラム１０７ａを読み出してＲＡＭ１０８に展開することで、図３等で説明した各機能を実行する仮想マシン制御プロセス１０８ａを動作させる。すなわち、仮想マシン制御プロセス１０８ａは、図３に記載した格納制御部３５、ゲスト特定部３６、ハンドラ特定部３７、実行制御部３８と同様の機能を実行する。このようにコンピュータ１００は、プログラムを読み出して実行することで仮想マシン制御方法を実行する情報処理装置として動作する。【０１００】
また、コンピュータ１００は、媒体読取装置１０６によって記録媒体から仮想マシン制御プログラム１０７ａを読み出し、読み出された仮想マシン制御プログラム１０７ａを実行することで上記した実施例と同様の機能を実現することもできる。なお、この他の実施例でいうプログラムは、コンピュータ１００によって実行されることに限定されるものではない。例えば、他のコンピュータまたはサーバがプログラムを実行する場合や、これらが協働してプログラムを実行するような場合にも、本発明を同様に適用することができる。
【符号の説明】
【０１０１】
１０  情報処理装置
１１  管理ＯＳ
１２  ゲストＯＳ（Ａ）
１３  ゲストＯＳ（Ｂ）
１４  仮想制御部
１４ａ  記憶部
１４ｂ  特定部
１４ｃ  中継部
２０  情報処理装置
２１  仮想領域
２２  管理ＯＳ（Ａ）
２３  管理ＯＳ（Ｂ）
２４  ゲストＯＳ（Ａ）
２５  ゲストＯＳ（Ｂ）
２６  ゲストＯＳ（Ｃ）
２７  ゲストＯＳ（Ｄ）
３０  制御部
３０ａ  処理制御部
３１  ハイパーバイザ
３２  ＭＡＣ管理テーブル
３３  ゲストＩＤ管理テーブル
３４  ハンドラ管理テーブル
３５  情報格納部
３６  ゲスト特定部
３７  ハンドラ特定部
３８  実行制御部
【図１】
0005907179.tif 000002
【図２】
0005907179.tif 000003
【図３】
0005907179.tif 000004
【図４】
0005907179.tif 000005
【図５】
0005907179.tif 000006
【図６】
0005907179.tif 000007
【図７】
0005907179.tif 000008
【図８】
0005907179.tif 000009
【図９】
0005907179.tif 000010
【図１０】
0005907179.tif 000011
【図１１】
0005907179.tif 000012
【図１２】
0005907179.tif 000013
【図１３】
0005907179.tif 000014