(57)【特許請求の範囲】
【請求項１】
ハイパーバイザ上で第１の仮想マシンおよび第２の仮想マシンを実行する情報処理装置であって、
前記第１の仮想マシンは、
前記第２の仮想マシンで使用するポートの数を要求し、前記第２の仮想マシンに割り当てられる複数の第１のポート番号を前記第２の仮想マシンに通知する仮想マシン管理エージェントと、
前記仮想マシン管理エージェントにより要求されるポートの数に応じて、前記第２の仮想マシンで使用する複数の前記第１のポート番号を割り当てる第１のオペレーティングシステムと、
第１のＭＡＣアドレスを示す送信元ＭＡＣアドレスを含むＭＡＣヘッダ、トランスポート層のプロトコルを示すプロトコル値と宛先ＩＰアドレスとを含むＩＰヘッダ、および前記第１のポート番号以外のポート番号を示す送信元ポート番号と宛先ポート番号とを含むＴＣＰ／ＵＤＰヘッダを含む送信パケットを送信する第１の送信手段とを具備し、
前記第２の仮想マシンは、
前記仮想マシン管理エージェントにより通知された前記第１のポート番号に、パケットの送信元ポート番号を制限する第２のオペレーティングシステムと、
前記第１のＭＡＣアドレスを示す送信元ＭＡＣアドレスを含むＭＡＣヘッダ、トランスポート層のプロトコルを示すプロトコル値と宛先ＩＰアドレスとを含むＩＰヘッダ、および前記第１のポート番号を示す送信元ポート番号を含むＴＣＰ／ＵＤＰヘッダを含む送信パケットを送信する第２の送信手段と、
前記第１の送信手段あるいは前記第２の送信手段により前記送信パケットが送信された場合に、前記送信パケットをネットワークに送信し、かつ前記第１のＭＡＣアドレスを示す宛先ＭＡＣアドレスを含むＭＡＣヘッダ、トランスポート層のプロトコルを示すプロトコル値と宛先ＩＰアドレスとを含むＩＰヘッダ、および宛先ポート番号を含むＴＣＰ／ＵＤＰヘッダを含む受信パケットを、前記ネットワークを介して受信した場合に、前記受信パケット内の宛先ポート番号が示すポート番号に応じて、前記受信パケットを前記第１の仮想マシンまたは前記第２の仮想マシンに振り分ける振分手段とを具備する情報処理装置。
【請求項２】
前記ネットワークと通信を行い、前記第１のＭＡＣアドレスを示すＭＡＣアドレスが割り当てられているネットワークコントローラを更に具備する請求項１に記載の情報処理装置。
【請求項３】
前記振分手段は、
前記第１の送信手段または前記第２の送信手段から送信された前記送信パケットに含まれる送信元ポート番号を示すポート番号と、前記送信パケットに含まれるプロトコル値を示す第１のプロトコル値とを含むエントリを送受信情報テーブルに登録する登録手段と、
前記受信パケットに含まれる宛先ポート番号と一致する送信元ポート番号と、前記受信パケットに含まれる前記プロトコル値と一致する第１のプロトコル値とを含むエントリが前記送受信情報テーブル内にあるかを判定する判定手段と、
前記エントリがあると判定した場合、前記エントリに含まれる前記送信元ポート番号に対応する、前記第１のオペレーティングシステムまたは前記第２のオペレーティングシステムに前記受信パケットを送信する第３の送信手段とを具備する請求項１に記載の情報処理装置。
【請求項４】
前記登録手段は、前記エントリ内に時間を示す時間情報を格納し、
前記時間情報が示す時間を一定時間毎に減算し、この減算により時間が０になった場合に、前記エントリを前記送受信情報テーブルから削除する削除手段を更に具備する請求項３に記載の情報処理装置。
【請求項５】
前記振分手段は、前記プロトコル値がアドレス解決プロトコルを示す場合、全ポートに前記受信パケットを送信する請求項１に記載の情報処理装置。
【請求項６】
ハイパーバイザ上で第１の仮想マシンおよび第２の仮想マシンを実行する情報処理装置の通信制御方法であって、
前記第１の仮想マシンによって、仮想マシン管理エージェントとして前記第２の仮想マシンで使用するポートの数を要求し、
前記第１の仮想マシンによって、前記仮想マシン管理エージェントにより要求されるポートの数に応じて、前記第１の仮想マシン内の第１のオペレーティングシステムによって前記第２の仮想マシンで使用する複数の第１のポート番号を割り当て、
前記第１の仮想マシンによって、前記第２の仮想マシンに割り当てられる複数の前記第１のポート番号を前記第２の仮想マシンに通知し、
前記第１の仮想マシンによって、第１のＭＡＣアドレスを示す送信元ＭＡＣアドレスを含むＭＡＣヘッダ、トランスポート層のプロトコルを示すプロトコル値と宛先ＩＰアドレスとを含むＩＰヘッダ、および前記第１のポート番号以外のポート番号を示す送信元ポート番号と宛先ポート番号とを含むＴＣＰ／ＵＤＰヘッダを含む第１送信パケットを送信し、
前記第２の仮想マシンによって、前記第２の仮想マシン内の第２のオペレーティングシステムによって前記仮想マシン管理エージェントにより通知された前記第１のポート番号に、パケットの送信元ポート番号を制限し、
前記第２の仮想マシンによって、前記第１のＭＡＣアドレスを示す送信元ＭＡＣアドレスを含むＭＡＣヘッダ、トランスポート層のプロトコルを示すプロトコル値と宛先ＩＰアドレスとを含むＩＰヘッダ、および前記第１のポート番号を示す送信元ポート番号を含むＴＣＰ／ＵＤＰヘッダを含む第２送信パケットを送信し、
前記第１送信パケットあるいは前記第２送信パケットが送信された場合に、前記第２の仮想マシンによって、前記送信パケットをネットワークに送信し、
前記第２の仮想マシンによって、前記第１のＭＡＣアドレスを示す宛先ＭＡＣアドレスを含むＭＡＣヘッダ、トランスポート層のプロトコルを示すプロトコル値と宛先ＩＰアドレスとを含むＩＰヘッダ、および宛先ポート番号を含むＴＣＰ／ＵＤＰヘッダを含む受信パケットを前記ネットワークを介して受信した場合に、前記受信パケット内の宛先ポート番号が示すポート番号に応じて、前記受信パケットを前記第１の仮想マシンまたは前記第２の仮想マシンに振り分ける通信制御方法。
【発明の詳細な説明】
【技術分野】
【０００１】
本発明の実施形態は、複数の仮想マシンを実行する情報処理装置および通信制御方法に関する。
【背景技術】
【０００２】
従来の複数の仮想マシンを実行するコンピュータは、各仮想マシン毎の仮想ＬＡＮ−Ｉ／Ｆにそれぞれ異なるＭＡＣアドレスを割り当て、そのＩ／Ｆ同士を仮想ブリッジまたは仮想スイッチで仮想的に接続し、その間で、送受信のＭＡＣアドレスで送受信先のＩ／Ｆを振り分ける。１つの物理ＬＡＮ−ＩＦから受信したパケットは、そのパケットの宛先ＭＡＣアドレスがブロードキャストの場合には、すべての仮想マシンのＬＡＮ−Ｉ／Ｆに受信し、ユニキャストの場合には、同じＭＡＣアドレスを持つ仮想マシンのＬＡＮ−Ｉ／Ｆに受信させるようにしていた。
【０００３】
ＭＡＣアドレスをすべて異なるようにセットするため、予め指定されたＭＡＣアドレスを設定しておくか、動的に生成する場合には、指定された範囲から選択して採るようにしていた。そのため、各仮想マシンのＭＡＣアドレスで一意に決まったＩＰアドレスもそれぞれ異なることになり、クライアントＰＣを仮想化する場合、複数のＭＡＣアドレスと複数のＩＰアドレスが必要であった。そのため、クライアントＰＣが多く存在するとＩＰアドレスが不足する。
【０００４】
ＭＡＣアドレスを複数持ち、代表のIPアドレスを１つで共有し、内部でローカルなＩＰアドレスを割り当てて使用する、アドレス変換方式の場合には、アドレス変換に対応できないプロトコルなどがあり、使用できるネットワークプロトコルに制限が発生していた。
【先行技術文献】
【特許文献】
【０００５】
【特許文献１】特開２００８−２９９７９１号公報
【特許文献２】特開２００９−２１１６４０号公報
【特許文献３】特開２００８−２２５６５５号公報
【発明の概要】
【発明が解決しようとする課題】
【０００６】
コンピュータ（情報処理装置）で複数の仮想マシンを実行する場合、コンピュータで使用されるＭＡＣアドレスとＩＰアドレスの数を抑制することが望まれている。
【０００７】
本発明の目的は、複数の仮想マシンを実行する場合、使用されるＭＡＣアドレスとＩＰアドレスの数を抑制することが可能な情報処理装置および通信制御方法を提供することにある。
【課題を解決するための手段】
【０００８】
実施形態によれば、情報処理装置は、ハイパーバイザ上で第１の仮想マシンおよび第２の仮想マシンを実行する。前記第１の仮想マシンは、前記第２の仮想マシンで使用するポートの数を要求し、前記第２の仮想マシンに割り当てられる複数の第１のポート番号を前記第２の仮想マシンに通知する仮想マシン管理エージェントと、前記仮想マシン管理エージェントにより要求されるポートの数に応じて、前記第２の仮想マシンで使用する複数の前記第１のポート番号を割り当てる第１のオペレーティングシステムと、第１のＭＡＣアドレスを示す送信元ＭＡＣアドレスを含むＭＡＣヘッダ、トランスポート層のプロトコルを示すプロトコル値と宛先ＩＰアドレスとを含むＩＰヘッダ、および前記第１のポート番号以外のポート番号を示す送信元ポート番号と宛先ポート番号とを含むＴＣＰ／ＵＤＰヘッダを含む送信パケットを送信する第１の送信手段とを具備する。前記第２の仮想マシンは、前記仮想マシン管理エージェントにより通知された前記第１のポート番号に、パケットの送信元ポート番号を制限する第２のオペレーティングシステムと、前記第１のＭＡＣアドレスを示す送信元ＭＡＣアドレスを含むＭＡＣヘッダ、トランスポート層のプロトコルを示すプロトコル値と宛先ＩＰアドレスとを含むＩＰヘッダ、および前記第１のポート番号を示す送信元ポート番号を含むＴＣＰ／ＵＤＰヘッダを含む送信パケットを送信する第２の送信手段と、前記第１の送信手段あるいは前記第２の送信手段により前記送信パケットが送信された場合に、前記送信パケットをネットワークに送信し、かつ前記第１のＭＡＣアドレスを示す宛先ＭＡＣアドレスを含むＭＡＣヘッダ、トランスポート層のプロトコルを示すプロトコル値と宛先ＩＰアドレスとを含むＩＰヘッダ、および宛先ポート番号を含むＴＣＰ／ＵＤＰヘッダを含む受信パケットを、前記ネットワークを介して受信した場合に、前記受信パケット内の宛先ポート番号が示すポート番号に応じて、前記受信パケットを前記第１の仮想マシンまたは前記第２の仮想マシンに振り分ける振分手段とを具備する。
【図面の簡単な説明】
【０００９】
【図１】実施形態のシステム構成の一例を示すブロック図。
【図２】クライアントコンピュータのソフトウェア構成の一例を示すブロック図。
【図３】仮想ディスクの構成の一例を示すブロック図。
【図４】仮想マシンマネージャの状態遷移の一例を示す図
【図５】セットアップモード時のクライアントコンピュータの構成および動作の説明に用いる図。
【図６】ログイン前のクライアントコンピュータの構成および動作の説明に用いる図。
【図７】ユーザのログイン時のクライアントコンピュータの構成および動作の説明に用いる図。
【図８】ログインユーザの切り替え時のクライアントコンピュータの構成および動作の説明に用いる図。
【図９】システム全体の動作を説明するためのシーケンス図。
【図１０】システム全体の動作を説明するためのシーケンス図。
【図１１】システム全体の動作を説明するためのシーケンス図。
【図１２】システム全体の動作を説明するためのシーケンス図。
【図１３】管理エージェントの動作の一例を示すフローチャート。
【図１４】メモリ内のデータの差分データの作成の説明に用いる図。
【図１５】クライアントコンピュータ内でのパケットデータの流れの一例を示す図。
【図１６】ネットワーク内に流れるパケットの構造の一例を示す図。
【図１７】ポートスイッチの構成の一例を示す図。
【図１８】ポートスイッチが管理するテーブルの構造の一例を示す図。
【図１９】パケット送信時のポートスイッチの動作の一例を示すフローチャート。
【図２０】パケット受信時のポートスイッチの動作の一例を示すフローチャート。
【図２１】クライアントコンピュータ内のパケットデータの送受信時の処理の一例を示すシーケンス図。
【図２２】クライアントコンピュータ内のパケットデータの送受信時の処理の一例を示すシーケンス図。
【発明を実施するための形態】
【００１０】
図１は、システム構成を示すブロック図である。
【００１１】
システムは、クライアントコンピュータ（クライアントＰＣ）１００、管理サーバ２０１、配信サーバ２０２、Network Attached Storage（ＮＡＳ）２２０等から構成されている。
【００１２】
管理サーバ２０１および配信サーバ２０２に、システムプール２１０が接続されている。システムプール２１０内には、ゲスト仮想マシンのディスクイメージファイルが保存されている。ディスクイメージファイルは、配信サーバ２０２を経由して、クライアントコンピュータに転送される。管理サーバ２０１は、各クライアントに対応するディスクイメージファイルの管理、設定を行う。
【００１３】
クライアントコンピュータ１００内では、ハイパーバイザ（仮想化ソフトウェア）１０１によってハードウェアが仮想化され、ハイパーバイザ１０１上で複数の仮想マシンが動作する。このシステムでは、ゲスト仮想マシン（デスクトップＯＳ、アプリ）と仮想マシン制御ドメインの仮想マシン制御用のＯＳが同時実行する。
【００１４】
クライアントコンピュータ１００内のストレージ（ＨＤＤまたはＳＤＤ）１３１内には、配信サーバ２０２から配信されたディスクイメージファイルが格納される。ＬＡＮコントローラ１３２に接続されたネットワークには、ファイルサーバ（ＮＡＳ）２２０が接続される。ファイルサーバ（ＮＡＳ）２２０には、各ユーザが更新したアプリケーションのデータ、設定値が保存される。
【００１５】
また、ＮＡＳ２２０内には、ＳＹＳ−ＵＳＥＲ−Ａファイル２２１Ａ、ＳＹＳ−ＵＳＥＲ−Ｂファイル２２１Ｂ、ＭＥＭ−ＵＳＥＲ−Ａファイル２２２Ａ、ＭＥＭ−ＵＳＥＲ−Ｂファイル２２２Ｂが格納されている。ＳＹＳ−ＵＳＥＲ−Ａファイル２２１ＡおよびＭＥＭ−ＵＳＥＲ−Ａファイル２２２Ａは、ゲスト仮想マシン１２０のユーザＡの使用環境を再現するためのファイルである。また、ＳＹＳ−ＵＳＥＲ−Ｂファイル２２１ＢおよびＭＥＭ−ＵＳＥＲ−Ｂファイル２２２Ｂは、ゲスト仮想マシン１２０のユーザＢの使用環境を再現するためのファイルである。使用するユーザに応じて、ＳＹＳ−ＵＳＥＲ−Ａファイル２２１ＡおよびＭＥＭ−ＵＳＥＲ−Ａファイル２２２Ａ、またはＳＹＳ−ＵＳＥＲ−Ｂファイル２２１ＢおよびＭＥＭ−ＵＳＥＲ−Ｂファイル２２２Ｂがクライアントコンピュータ１００に転送される。
【００１６】
Ｉ／Ｏデバイスの仮想化にはいくつかの手法があるが、本装置では、パススルー・モデルを用いて、Ｉ／Ｏデバイスを仮想化する。パススルー・モデルでは、仮想マシンモニタがＩ／Ｏデバイスを直接仮想マシンに割り当てることができる。例えば、仮想マシンごとに専用のＳＣＳＩカードやネットワーク・カードなどを用意し、それらを１つずつ仮想マシンに割り当てる。また、デバイスマネージャは、ＰＣＩデバイスの初期化制御を行う。
【００１７】
次に、図２を参照して、クライアントコンピュータ１００のソフトウェア構成を説明する。
【００１８】
ハイパーバイザ１０１上で、仮想マシン制御ドメイン１１０およびゲスト仮想マシン１２０が動作する。
【００１９】
ハイパーバイザ１０１は、ＣＰＵ２３１のリソースを調停し、スケジューラ１０５によるスケジューリングに従って、ＣＰＵ２３１のリソースを仮想ＣＰＵとして、各ドメイン（仮想マシン制御ドメインおよびゲスト仮想マシン）に配分する。メモリ１０２のリソースは、ハイパーバイザ１０１内で動作するメモリマネージャ１０４によって、各ドメインのＯＳに割り当てられる。ディスクコントローラ２３６とＬＡＮコントローラ１３２を除いたＧＰＵ（Graphics Processing Unit）２３３、ＵＳＢコントローラ（USB Cont.）２３４やＡｕｄｉｏ、ＵＳＢ、ＩＥＥＥ１３９４などのデバイスの場合、ゲスト仮想マシン１２０内のゲストＯＳ１２１は、ドライバ１２４，１２５等によって、デバイスのＩ／Ｏに直接アクセスできる（パススルー方式）。ディスクコントローラ２３６とＬＡＮコントローラ１３２の場合、ゲスト仮想マシン内のゲストＯＳ１２１は、フロントエンド仮想ドライバ１２６経由で、仮想マシン制御ドメイン１１０のバックエンドドライバ１１２にアクセスする（サービスＶＭ方式）。バックエンドドライバ１１２は、制御ドメインＯＳ１１１のアクセスとゲストＯＳ１２１のアクセスとの調停をとって、ディスクコントローラ２３６およびＬＡＮコントローラ１３２にアクセスする。この時、ゲストＯＳ１２１から見えるディスクは１つであるが、ゲストＯＳは複数の仮想ディスクファイルで構成された仮想ディスクをディスクとして利用する（図３）。
【００２０】
図３は、仮想ディスクの構成の一例を示すブロック図である。例えば、図３に示すように、仮想ディスクは、マスター（原本）になる基本仮想ディスクファイル３０１と、基本仮想ディスクファイル３０１が示すデータに対する変更箇所及び変更されたデータを示す差分情報を格納するシステム差分仮想ディスクファイル３０２，ユーザ差分仮想ディスクファイル３０３とから構成される。本実施形態では、差分仮想ディスクファイルが使用される。例えば、ユーザ差分仮想ディスクファイル３０３に、書き込みデータが格納される。
【００２１】
ゲストＯＳ１２１上で動作するゲスト仮想マシン管理エージェントプログラム（以下、管理エージェントと記す）１２３が、ゲスト仮想マシン１２０の状態を監視する。
【００２２】
管理エージェント１２３は、ハイパーバイザ１０１内で動作するＩ／Ｏマネージャ１０３経由で制御ドメイン１１０内の仮想マシンマネージャ（ＶＭマネージャ）１１８と通信する。仮想マシンマネージャ１１８は、ハイパーバイザ１０１のコントロールＩ／Ｆを使用して、ゲスト仮想マシン１２０の起動、終了、スリープ復帰などの指示を行うことができる。制御ドメイン１１０の仮想ＡＣＰＩ１１７は、ゲストＯＳ１２１からの電源コントロール（ＡＣＰＩ）に対して、直接クライアントコンピュータ１００のＡＣＰＩを制御しない。仮想ＡＣＰＩ１１７は、ゲスト仮想マシン１２０のドメイン内のみの電源制御となるように動作する。例えば、ゲストＯＳ１２１をスリープした場合、ゲストＯＳ１２１上でのみスリープ状態となり、ハイパーバイザ１０１、制御ドメインＯＳ１１１は通常の状態で動作する。
【００２３】
このクライアントコンピュータ１００では、いくつかのモード（状態）がある。以下に、クライアントコンピュータ１００のモードについて説明する。
【００２４】
１．配信イメージ受信モード：配信サーバ２０２から基本仮想ディスクファイル３０１および差分仮想ディスクファイル３０２，３０３を受信して、基本仮想ディスクファイル３０１および差分仮想ディスクファイル３０２，３０３をクライアントコンピュータ１００のストレージ１３１に保存するモード。
【００２５】
２．セットアップモード：ストレージ１３１に保存したディスクイメージファイルをゲストＯＳ１２１として起動し、ユーザがログイン可能な状態までのセットアップ（ドライバのインストール、設定）を行う。
【００２６】
３．運用モード：ユーザがゲストＯＳ１２１にログインして実行している状態。
【００２７】
４．ユーザ切り替えモード：ユーザのアカウントが変わり、仮想マシンを切り替えている状態。
【００２８】
５．ゲストＯＳ保存モード：ゲストＯＳ１２１の環境が使用していたメモリ（ＲＡＭ）の内容をＮＡＳ２２０に保存する状態。
【００２９】
図４を参照して、上述したモードの遷移を説明する。  
仮想マシンマネージャ１１８は、開始すると初期状態（ＩＮＩＴ）となる。ここで、非運用モードの通知を受けると、待機状態となる（ＷＡＩＴ）。待機時、仮想マシンマネージャ１１８は、管理サーバ２０１へモード確認要求を送信する。送信してからＴ１時間経過するまでに、管理サーバ２０１からの応答が無ければ、仮想マシンマネージャ１１８は、再度管理サーバ２０１へのモード確認要求を送信する。
【００３０】
モード確認要求に応じて管理サーバ２０１から配信受信モードであることが指示されれば、「配信受信モード」に移行する。そして、仮想マシンマネージャ１１８は、イメージ送信開始要求を配信サーバに送信する。仮想マシンマネージャ１１８は、配信サーバからデータを受信すると、ストレージ１３１にイメージファイルを格納する。必要があれば、仮想マシンマネージャ１１８は、次のイメージファイルをストレージに格納するためのデータの送信要求を、配信サーバに対して送信する。配信サーバから送信完了が通知されたら、仮想マシンマネージャ１１８は、イメージファイルをハイパーバイザ１０１に登録する。そして、仮想マシンマネージャ１１８は、配信受信モードの終了を管理サーバ２０１に通知し、待機状態（ＷＡＩＴ）となる。管理サーバ２０１は、セットアップモードに移行するよう指示する。
【００３１】
管理サーバ２０１からセットアップモードの通知を受信した場合、「セットアップモード」に移行する。仮想マシンマネージャ１１８は、セットアップモード開始通知を管理サーバ２０１に送信する。仮想マシンマネージャ１１８は、ハイパーバイザ１０１にゲスト仮想マシンの起動要求を発行する。
【００３２】
セットアップモードの場合、仮想マシンマネージャ１１８は、Ｔ２時間毎にゲストＯＳのセットアップ状態を確認する。ゲストＯＳのセットアップ状態が、セットアップの終了を確認したら、仮想マシンマネージャ１１８は、管理サーバ２０１にセットアップの終了を通知し、システムをシャットダウンする。
【００３３】
図５を参照して、セットアップモード時の処理について説明する。配信サーバ２０２から基本仮想ディスクファイル３０１を各クライアントコンピュータ１００に配布する。同じ基本仮想ディスクファイル（ＳＹＳ−ＣＯＭ）３０１が、各クライアントコンピュータ１００のストレージ１３１に保存される。
【００３４】
各クライアントコンピュータ１００は、配信イメージの受信後、セットアップモードとなる。各クライアントコンピュータ１００は、ストレージ１３１から基本仮想ディスクファイル（ＳＹＳ−ＣＯＭ）３０１を読み出して仮想マシンを起動する。この時、仮想ディスク１２７には、配信された基本仮想ディスクファイル３０１のほかに、さらに１段の空のシステム差分仮想ディスクファイル（ＳＹＳ−ＤＩＦＦ）３０２をストレージ１３１内に作成して、差分仮想ディスクファイル（ＳＹＳ−ＤＩＦＦ）３０２が仮想ディスク１２７に組み込まれる。これによりゲスト仮想マシンからの仮想ディスク１２７への書き込みは、すべてその空のシステム差分仮想ディスクファイル（ＳＹＳ−ＤＩＦＦ）３０２に対して行われる。
【００３５】
ゲストＯＳ１２１が起動すると、最初のクライアントコンピュータ１００上での起動であるため、ドライバのインストール、ネットワーク等の設定が行われる。また、各クライアント個別ＩＤ（マシン名等）の設定も行われる。システム差分仮想ディスクファイル（ＳＹＳ−ＤＩＦＦ）３０２は、各クライアント毎に用意される。各システム差分仮想ディスクファイル（ＳＹＳ−ＤＩＦＦ）３０２には、対応するクライアントで用いられるデータが格納されることになる。
【００３６】
セットアップが終了すると、ゲスト仮想マシン管理エージェント１２３が、セットアップの終了を認識する。ゲスト仮想マシン管理エージェント１２３は、セットアップが終了した旨を、仮想マシン制御ドメイン１１０の仮想マシンマネージャ１１８に通知する。そして、ゲスト仮想マシン管理エージェント１２３は、ゲストＯＳ１２１に対してスリープ要求を発行する。
【００３７】
ゲストＯＳ１２１は、ＡＣＰＩに準拠したＯＳＰＭ（OS Directed Power Management)モジュールを有している。ゲストＯＳ１２１が、ゲスト仮想マシン管理エージェント１２３からスリープ（Ｓ３：Suspend to RAM）の要求を受けると、ゲストＯＳ１２１内のＯＳＰＭモジュールが、物理レイヤ２３０の各種デバイスをそれらデバイスに対応するデバイスドライバによってＤ３状態（停止状態）にする。
【００３８】
ＯＳＰＭモジュールは、すべてのデバイスが停止になったことを確認すると、ゲスト仮想マシン１２０の仮想ＢＩＯＳに対して、システムをＳ３（スリープ）に移行するようＩ／Ｏを出力する。例えば、特定のＩ／Ｏアドレスに対してアクセスを行うことによって（例えばこの特定のＩ／Ｏアドレスに対する出力命令を発行することによって）、ＯＳＰＭモジュールは、仮想ＢＩＯＳにＳ３（スリープ）状態へ移行するように指示する。
【００３９】
仮想環境の場合、このＩ／Ｏ（例えば、特定のＩ／Ｏアドレスに対してアクセス）は、ハイパーバイザ１０１のＩ／Ｏマネージャ１０３によって捕捉される。Ｉ／Ｏマネージャ１０３は、補足したＩ／Ｏを制御ドメインＯＳ１１１上のＩ／Ｏエミュレータ１１６に渡す。渡されたＩ／ＯがＡＣＰＩのＩ／Ｏアドレスであるので、Ｉ／Ｏエミュレータ１１６は、渡されたＩ／Ｏを仮想ＡＣＰＩの処理に通知する。そこで、仮想マシンマネージャ１１８(VM Manager)は、ゲスト仮想マシンがＳ３（スリープ）状態に移行したことを認識し、ゲストＯＳが使用していた（ゲスト仮想マシンに割り当てられていた）メモリ（RAM）２０２Ａのデータを保存するように、ゲストメモリコントローラ（GuestMemCntl）１１９に対して指示する。
【００４０】
ゲストメモリコントローラ１１９は、ゲストＯＳ１２１が使用していたメモリ（RAM）２０２Ａをページ(４ＫＢ)またはスーパページ（２ＭＢ）単位に抜き出し、ストレージ１３１内にイメージファイル（ＭＥＭ−ＣＯＭ）４１１として保存する。保存後、仮想マシンマネージャ１１８は、ハイパーバイザ１０１に対して、ゲスト仮想マシン１２０の終了を指示し、システムをシャットダウンさせ、セットアップは終了する。この時、管理サーバ２０１にはセットアップモードの完了を通知、運用モードにセットする。
【００４１】
ユーザが、仮想化環境がセットアップ済みのクライアントコンピュータ１００の電源を投入し起動した後（ＩＮＩＴ）、セットされたモードが運用モードであれば、仮想マシンマネージャ１１８は、「運用モード」になる。
【００４２】
図６を用いて、運用モードについて、説明する。運用モードでは、クライアントコンピュータ１００はハイパーバイザ１０１の起動、制御ドメインＯＳ１１１の起動を行う。そして、図６に示すように、制御ドメインＯＳ１１１上で仮想マシンマネージャ１１８が起動し、配信された基本仮想ディスクファイル(ＳＹＳ−ＣＯＭ)３０１とセットアップ時に保存したシステム差分仮想ディスクファイル(ＳＹＳ−ＤＩＦＦ)３０２とを仮想ディスク１２７としてハイパーバイザに割り当てる。そして、仮想マシンマネージャ１１８は、さらにデータが格納されていない仮想ディスクファイル（ＳＹＳ−ＵＳＥＲ−ＮＵＬＬ）を仮想ディスク１２７に設定する。
【００４３】
仮想マシンマネージャ１１８は、ゲスト仮想マシンを起動するためにゲストドメインの生成をハイパーバイザ１０１に指示する。そして、仮想マシンマネージャ１１８は、ゲストメモリコントローラ（GuestMemCntl）１１９に対して、ゲスト仮想マシン１２０に割り当てられるゲストメモリ（RAM）に、セットアップ時に保存されたＭＥＭ−ＣＯＭファイル４１１に基づいて、データをリストアするように指示する。ハイパーバイザ１０１は、ＭＥＭ−ＣＯＭファイル４１１の保存時と同じアドレスにデータをマッピングして、ゲストＯＳからメモリ内のデータを使用できるように、メモリの記憶領域をゲスト仮想マシンにゲストメモリ（RAM）２０２Ａとして割り当てる。ゲストメモリコントローラ１１９は、割り当てたメモリの記憶領域にＭＥＭ−ＣＯＭファイル４１１に基づいてデータをリストアする。リストア完了後、仮想マシンマネージャ１１８は、Ｓ０（通電動作）状態への復帰をゲスト仮想マシンに指示する。
【００４４】
これにより、ゲストＯＳ１２１は、セットアップモードの最後の状態に戻り、画面上にはログイン入力画面が表示される。
【００４５】
ユーザは、自分のアカウントＩＤとパスワードを入力してログインしようとする。ゲストＯＳ１２１は、このログイン時に入力されたＩＤとパスワードを元に指定された認証を行い、認証がとれたならば、ログオン処理に入る。
【００４６】
ゲスト仮想マシン１２０のゲスト仮想マシン管理エージェント１２３は、このログオンイベントを受信し、ユーザＩＤを仮想マシンマネージャ１１８に送信し、直ちにＳ３（スリープ）状態に入るようゲストＯＳ１２１に指示する。ゲストＯＳ１２１は、セットアップ時と同じ様に各デバイスをＤ３（停止）状態にし、Ｓ３（スリープ）状態に移行するようＩ／Ｏを出力する。
【００４７】
運用モード時に、管理エージェント１２３からログアウトまたは環境の保存イベントを示す情報を受信すると、仮想マシンマネージャ１１８は、保存モードになる。保存モードでは、クライアントコンピュータ１００がＳ３（スリープ）状態に移行すると、ゲスト仮想マシンに割り当てられているメモリの記憶領域のデータを、仮想マシン制御ドメイン１１０に割り当てられているストレージ１３１の記憶領域に保存する。仮想マシンマネージャ１１８は、ＭＥＭ−ＣＯＭファイル４１１とメモリ２０２内のデータとの差分を抽出し、変更位置および変更データを示す差分情報を生成する。仮想マシンマネージャ１１８は、生成された差分情報をＮＡＳ２２０に保存する。
【００４８】
仮想マシンマネージャ１１８は、ＮＡＳ２２０からＳＹＳ−ＵＳＥＲ−Ａファイル２２１Ａを取得し、ＳＹＳ−ＵＳＥＲ−Ａファイル２２１Ａに含まれる差分情報と仮想ディスクファイル（ＳＹＳ−ＵＳＥＲ−ＮＵＬＬ）４０３に含まれる差分情報とを比較する。そして、ＳＹＳ−ＵＳＥＲ−Ａファイル２２１Ａの作成時から変更された新たな変更位置および変更データを示すデータを含むように、ＳＹＳ−ＵＳＥＲ−Ａファイル２２１Ａを更新する。そして、仮想マシンマネージャ１１８は、仮想ディスクファイル（ＳＹＳ−ＵＳＥＲ−ＮＵＬＬ）４０３の中身を空にする。そして、仮想マシンマネージャ１１８は、Ｓ３状態からＳ０（通電動作）状態への復帰をゲスト仮想マシンに指示する。そして、仮想マシンマネージャ１１８は「運用モード」に戻る。
【００４９】
図７を参照して、保存モード時の動作を説明する。  
ログイン中に、保存の指示またはログアウトの指示を検出すると、ゲスト仮想マシン管理エージェント１２３はそれらの指示を検出し、ゲストドメインをＳ３（スリープ）状態にする。そして、図７に示すように、Ｓ３（スリープ）状態になったところで、仮想マシンマネージャ１１８は、現在のＲＡＭの内容（ＭＥＭ−ＵＳＥＲ−Ａファイル２０２Ｂ）とセットアップ時の内容（ＭＥＭ−ＣＯＭファイル４１１）とを比較し、ページあるいはスーパページ単位で差分をとる。仮想マシンマネージャ１１８は、変更位置および変更データを示す差分情報をＭＥＭ−ＵＳＥＲ−Ａファイル２２２ＡとしてＮＡＳ２２０に保存し、ＮＡＳ２２０内のＭＥＭ−ＵＳＥＲ−Ａファイル２２２Ａを更新する。ＭＥＭ−ＵＳＥＲ−Ｂファイル２２２Ｂも同様に保存されたものである。
【００５０】
仮想マシンマネージャ１１８は、仮想ディスクファイルを構成するＳＹＳ−ＵＳＥＲ−ＮＵＬＬファイル４０３をＳＹＳ−ＵＳＥＲ−Ａファイル２２１ＡとしてＮＡＳ２２０に格納し、ＮＡＳ２２０内のＳＹＳ−ＵＳＥＲ−Ａファイル２２１Ａを更新する。
【００５１】
ＳＹＳ−ＵＳＥＲ−Ａファイル２２１ＡおよびＭＥＭ−ＵＳＥＲ−Ａファイル２２２Ａが更新された後、仮想マシンマネージャ１１８は、先ほどのユーザＩＤ情報から、そのユーザの差分ディスクファイル(ＳＹＳ−ＵＳＥＲ−Ｂ)と差分メモリデータファイル(ＭＥＭ−ＵＳＥＲ−Ｂ)を、ネットワーク上のＮＡＳ２２０から取得できるよう設定する。
【００５２】
管理エージェント１２３からログインイベントを受信したら、仮想マシンマネージャ１１８は運用モードからユーザ切替モードになる。クライアントコンピュータ１００がＳ３（スリープ）状態に移行すると、仮想マシンマネージャ１１８は、配信サーバ２０２から基本仮想ディスクファイル３０１、システム差分仮想ディスクファイル３０２、および基本メモリイメージファイル４１１を受信し、ＮＡＳからログインするユーザに対応する差分メモリイメージファイルおよびユーザ差分仮想ディスクファイルを受信する。そして、仮想マシンマネージャ１１８は、メモリ２０２の記憶領域にデータをリストアし、イメージファイルをクライアントコンピュータ１００のストレージ１３１に格納する。そして、仮想マシンマネージャ１１８は、Ｓ３状態からＳ０（通電動作）状態への復帰をゲスト仮想マシン１２０に指示する。そして、仮想マシンマネージャ１１８は「運用モード」に戻る。
【００５３】
図８を参照して、「ユーザ切替モード」時の処理を説明する。以下では、ユーザＢの使用環境を再現する場合について説明する。  
仮想マシンマネージャ１１８は、ＭＥＭ−ＵＳＥＲ−Ｂファイル２２２Ｂと、クライアントコンピュータ１００にあるＭＥＭ−ＣＯＭファイル４１１とを結合したデータを生成する。ゲストメモリコントローラ１１９は、生成されたデータをゲスト仮想マシン１２０に割り当てられたメモリ２０２Ｃに配置（リストア）する。また、ＳＹＳ−ＵＳＥＲ−ＮＵＬＬファイル４０３としてＳＹＳ−ＵＳＥＲ−Ｂファイル２２１Ｂが用いられる。リストア終了後、仮想マシンマネージャ１１８は、ハイパーバイザ１０１にドメインのＳ０（復帰）を指示して、ゲストＯＳを復帰させる。
【００５４】
ログイン中に画面が変わって、ユーザＢのデスクトップ環境が表示された後、ユーザＢは、作業を開始できる。
【００５５】
コンピュータが運用モードで起動してからのユーザの切替の動作を、図９〜図１２のシーケンス図を参照して説明する。
【００５６】
図９において、クライアントコンピュータ１００の電源がオンされると、ハイパーバイザ１０１が実行される。ハイパーバイザ１０１は、ＶＭ制御ドメインＯＳ１１１を起動する（１．１）。制御ドメインＯＳ１１１は、仮想マシンマネージャ１１８を起動する。仮想マシンマネージャ１１８は、ゲストメモリコントローラ１１９を起動する（１．１．１）。仮想マシンマネージャ１１８は、基本仮想ディスクファイル３０１およびシステム差分仮想ディスクファイル３０２をストレージ１３１から参照し、基本仮想ディスクファイル３０１およびシステム差分仮想ディスクファイル３０２から構成される仮想ディスクを制御ドメインＯＳ１１１に設定する（１．１．１．２）。仮想マシンマネージャ１１８は、ハイパーバイザ１０１に仮想マシンを実行するためのドメインの生成を指示する（１．１．１．３）。ハイパーバイザ１０１は、ドメインを生成する（１．１．１．３．１）。
【００５７】
仮想マシンマネージャ１１８は、Ｉ／Ｏエミュレータ１１６を起動する（１．１．１．４）。仮想マシンマネージャ１１８は、ゲストメモリコントローラ１１９にメモリ２０２に共通データのリストアを指示する。ゲストメモリコントローラ１１９は、ハイパーバイザ１０１が管理する、メモリ２０２の物理アドレスと仮想マシンで管理される仮想メモリの論理アドレスとの変換テーブルの論理アドレスに対して、ＭＥＭ−ＣＯＭファイル４１１の保存時と同じ論理アドレスをマッピングする（１．１．１．５．１）。ゲストメモリコントローラ１１９は、ＭＥＭ−ＣＯＭファイル４１１に基づいて、メモリ２０２にデータを格納する（１．１．１．５．２）。
【００５８】
仮想マシンマネージャ１１８は、ハイパーバイザ１０１にＳ０状態への復帰を指示する（１．１．１．６）。ハイパーバイザ１０１は、ゲストＯＳ１２１に対してＳ０状態への復帰を指示する（１．１．１．６．１）。ゲストＯＳ１２１は、Ｓ０状態への復帰処理を開始する（１．１．１．６．１．１）。管理エージェント１２３は、ゲストＯＳがＳ３状態に復帰したら、仮想マシンマネージャ１１８に復帰処理が完了したことを通知する（１．１．１．６．１．１．１）。ゲストＯＳ１２１は、ストレージ１３１にアクセスする場合、ＶＭ制御ドメインＯＳ１１１上のバックエンドドライバ１１２にアクセス要求を発行する（１．１．１．６．１．１．２）。ここまでの説明した処理によって、コンピュータは、図６に示す状態になる。
【００５９】
図１０において、オペレータがログインすると（２）、ゲストＯＳ１２１がユーザ認証を行う（２．１）ゲストＯＳ１２１は、ログインイベントを受信した旨を管理エージェント１２３に通知する（２．１．１）。管理エージェント１２３は、ゲストＯＳ１２１にＳ３状態への移行を要求する（３）。ゲストＯＳ１２１のＯＳＰＭは、パススルーしている各種I/OデバイスとＩ／Ｏエミュレータ１１６に対して、デバイスのＤ３状態への移行を指示する（３．１）。
【００６０】
ゲストＯＳ１２１のＯＳＰＭは、全てのデバイスが停止状態になったことを確認すると、仮想ＢＩＯＳに対して、システムをＳ３状態に移行するようＩ／Ｏを出力する。ゲストＯＳ１２１からのＩ／Ｏへの出力は、Ｉ／Ｏエミュレータ１１６によって捕捉される（３．２）。Ｉ／Ｏエミュレータ１１６は、ハイパーバイザ１０１に対して、ゲストＯＳ１２１が稼働しているドメインをＳ３状態に移行するように指示する(３．２．１)。
【００６１】
仮想マシンマネージャ１１８は、ドメインの状態を取得する（４）。ドメインがＳ３状態に移行したら、仮想マシンマネージャ１１８は、ゲストＯＳが稼働していた仮想マシンに割り当てられていたメモリの記憶領域に格納されていたデータの保存をゲストメモリコントローラに指示する（５）。先に図７を参照して説明したように、ゲストメモリコントローラは、仮想マシンに割り当てられていたメモリの記憶領域に格納されていたデータと、ＭＥＭ−ＣＯＭファイル４１１が示すデータとの差分を抽出する（５．１）。抽出された差分データと、差分データの格納位置とを示す差分情報を例えばＮＡＳ２２０に格納する（５．２）。
【００６２】
仮想マシンマネージャ１１８は、ドメインの終了をハイパーバイザ１０１に指示する（６）。ハイパーバイザ１０１は、ドメインを終了させる(６．１)。仮想マシンマネージャ１１８は、Ｉ／Ｏエミュレータ１１６を終了させる（７)。
【００６３】
図１１において、仮想マシンマネージャ１１８は、ＭＥＭ−ＣＯＭファイル４１１およびログインユーザに対応するＭＥＭ−ＵＳＥＲファイルを用いてメモリ内のデータのリストアを行うようにゲストメモリコントローラに指示する（８）。
【００６４】
仮想マシンマネージャ１１８は、ハイパーバイザ１０１に仮想マシンを実行するためのドメインの生成を指示する（９）。ハイパーバイザ１０１は、ドメインを生成する（９．１）。
【００６５】
先に図８を用いて説明したように、仮想マシンマネージャ１１８は、基本仮想ディスクファイル３０１、システム差分仮想ディスクファイル（ＳＹＳ−ＤＩＦＦ）３０２、およびユーザ差分仮想ディスクファイル（ＳＹＳ−ＵＳＥＲファイル）３０３に基づいてゲスト仮想マシンを実行するための仮想ディスクをハイパーバイザに設定し、ゲスト仮想マシンを起動させる（１０）。仮想マシンマネージャ１１８は、Ｉ／Ｏエミュレータ１１６を起動する（１１）。
【００６６】
ゲストメモリコントローラ１１９は、ＭＥＭ−ＣＯＭファイル４１１とログインユーザに対応するＭＥＭ−ＵＳＥＲファイルとの読み出し要求をＶＭ制御ドメインＯＳ１１１に発行する（８．１）。ゲストメモリコントローラは、ハイパーバイザ１０１が管理する、メモリの物理アドレスと仮想マシンで管理される仮想メモリの論理アドレスとの変換テーブルの論理アドレスに対して、ＭＥＭ−ＣＯＭファイルの保存時と同じ論理アドレスをマッピングする（８．２）。ゲストメモリコントローラは、ＭＥＭ−ＣＯＭファイル４１１およびＭＥＭ−ＵＳＥＲファイルに基づいて、メモリ２０２にデータを格納する（８．３）。
【００６７】
仮想マシンマネージャ１１８は、ハイパーバイザ１０１にオペレーティングシステムのＳ０状態への復帰を指示する（１２）。ハイパーバイザ１０１は、ゲストＯＳ１２１に対してＳ０状態への復帰を指示する（１２．１）。ゲストＯＳ１２１は、Ｓ０状態への復帰処理を開始する（１２．１．１）。管理エージェント１２３は、ゲストＯＳ１２１がＳ３状態に復帰したら、仮想マシンマネージャ１１８に復帰処理が完了したことを通知する（１２．１．１．１）。
【００６８】
図１２において、Ｓ０状態に復帰すると、オペレータが操作を開始する(１３)。ゲストＯＳは、ストレージにアクセスする場合、ＶＭ制御ドメインＯＳ１１１上のバックエンドドライバにアクセス要求を発行する（１３．１）。
【００６９】
オペレータがログアウトの操作を行うと（１４）、ゲストＯＳ１２１がログアウトイベントを管理エージェント１２３に送信する。管理エージェント１２３は、ログアウトイベントを受信した旨を仮想マシンマネージャ１１８に通知する。
【００７０】
管理エージェント１２３は、ゲストＯＳにＳ３状態への移行を要求する（１５）。ゲストＯＳは、Ｉ／Ｏエミュレータ１１６に対して、デバイスのＤ３状態への移行を指示する（１５．１）。
【００７１】
ゲストＯＳ１２１は、全てのデバイスが停止状態になったことを確認すると、仮想ＢＩＯＳに対して、システムをＳ３状態に移行するようＩ／Ｏを出力する。ゲストＯＳからのＩ／Ｏへの出力は、Ｉ／Ｏエミュレータ１１６によって補足される（１５．２）。Ｉ／Ｏエミュレータ１１６は、ハイパーバイザ１０１に対して、ゲストＯＳが稼働しているドメイン（ゲスト仮想マシン）をＳ３状態に移行するように指示する(１５．２．１)。
【００７２】
仮想マシンマネージャ１１８は、ドメインの状態を取得する（１６）。ドメインがＳ３状態に移行したら、仮想マシンマネージャ１１８は、ゲストＯＳ１２１が稼働していた仮想マシンに割り当てられていたメモリの記憶領域に格納されていたデータの保存をゲストメモリコントローラに指示する（１７）。ゲストメモリコントローラ１１９は、仮想マシンに割り当てられていたメモリの記憶領域に格納されていたデータと、ＭＥＭ−ＣＯＭファイルが示すデータとの差分を抽出する（１７．１）。抽出された差分データに基づいて、ＭＥＭ−ＵＳＥＲファイルを更新する（１７．２）。
【００７３】
仮想マシンマネージャ１１８は、ハイパーバイザ１０１にドメインの終了を指示する（１８）。ハイパーバイザ１０１は、仮想マシンマネージャ１１８からの指示に応じて、ドメインを終了する（１８．１）。そして、仮想マシンマネージャ１１８は、Ｉ／Ｏエミュレータ１１６を終了する（１９）。
【００７４】
次に、図１３のフローチャートを参照して運用モード時の管理エージェント１２３の動作を説明する。
【００７５】
管理エージェント１２３は、ゲストＯＳからのイベントを待っている（ステップＢ９０１）。イベントを受信したら、管理エージェント１２３は、ログインイベントであるかを判定する（ステップＢ９０２）。ログインイベントであると判定した場合（ステップＢ９０２のＹｅｓ）、管理エージェント１２３は、ログインイベントを受信した旨を仮想マシンマネージャ１１８に通知する（ステップＢ９０５）。ログインイベントでは無いと判定した場合（ステップＢ９０２のＮｏ）、管理エージェント１２３は、ログアウトイベントであるかを判定する（ステップＢ９０３）。ログアウトイベントであると判定した場合（ステップＢ９０３のＹｅｓ）、管理エージェント１２３は、ログアウトイベントを受信した旨を仮想マシンマネージャ１１８に通知する（ステップＢ９０６）。ログアウトイベントでは無いと判定した場合（ステップＢ９０３のＮｏ）、管理エージェント１２３は、デスクトップ環境の保存指示イベントであるかを判定する（ステップＢ９０４）。デスクトップ環境の保存指示イベントであると判定した場合（ステップＢ９０４のＹｅｓ）、管理エージェント１２３は、デスクトップ環境の保存指示イベントを受信した旨を仮想マシンマネージャ１１８に通知する（ステップＢ９０７）。ステップＢ９０５、Ｂ９０６、Ｂ９０７の後、管理エージェント１２３は、オペレーティングシステムのＯＳＰＭにＳ３状態への移行を要求する（ステップＢ９０８）。オペレーティングシステムは、各デバイスをＤ３状態に遷移させ、ＡＣＰＩのＩ／ＯにＳ３状態を設定する（ステップＢ９０９）。
【００７６】
図１４は、メモリの差分データの作成を説明するための図である。ゲスト仮想マシンが１つ（制御ドメインＯＳ１１１は除く）である場合には、ゲスト仮想マシンの使用するメモリ領域は、セットアップ時と同等になる。ハイパーバイザ１０１には、分断されたメモリ領域のブロックのマッピング情報（物理アドレスとサイズ）を有する。マッピング情報は、ユーザログイン後の状態もセットアップ時と同じであるため、差分をとることができる。通常、ゲストＯＳが固定で使用するメモリの記憶領域とアプリケーションが動的に使用するメモリ記憶領域とがある。固定で使用される記憶領域は内容の変化がないことが多い。したがって、それらの領域のセットアップ時の差分を取ることによって、保存するメモリ量が減少する。
【００７７】
このコンピュータによれば、ゲスト仮想マシン内で動作するゲストＯＳにログアウトが要求された場合に、ゲストＯＳに通常状態からスリープ状態への移行を要求し、ゲストＯＳがスリープ状態に移行した場合に、ゲストＯＳが使用するメモリの記憶領域内のデータを示すメモリイメージファイルを作成し、ゲスト仮想マシンの起動が要求された場合に、メモリイメージファイルの作成時の仮想マシンに割り当てられていた記憶装置の記憶領域内のデータを示すディスクイメージファイルをハイパーバイザに設定し、メモリイメージファイルに基づいて、仮想マシンに割り当てられたメモリの第２の記憶領域に第１の記憶領域に格納されていたデータを復元し、第２の記憶領域にデータが復元された場合、オペレーティングシステムをスリープ状態から通常状態へ復帰させることをハイパーバイザに要求することで、ゲスト仮想マシンの起動時やログインユーザの切り替え時に、ゲスト仮想マシンが使用できるようになるまでに待つ時間を短縮することが可能になります。
【００７８】
ところで、上述した図２のゲストＯＳ上で動作する管理エージェント１２３は、ゲスト仮想マシン１２０の状態を監視する。管理エージェント１２３は、ハイパーバイザ１０１のＩ／Ｏマネージャ経由で制御ドメイン内の仮想マシンマネージャと通信ができるようになっている。この管理エージェント１２３は、起動時に、ゲストＯＳ１２１に対して予め指定された数の通信ポートの開放（オープン）を要求する。管理エージェント１２３は、要求に応じてゲストＯＳ１２１から割り当てられたポートのポート番号を、制御ドメインＯＳ１１１上で動作する仮想マシンマネージャ１１８に通知する。仮想マシンマネージャ１１８は、制御ドメインＯＳ１１１に通知されたポート番号を送信元ポート番号として使用するよう要求する。制御ドメインＯＳ１１１は、要求に応じて送信元ポート番号の制限を行う。
【００７９】
図１５は、クライアントコンピュータ内でのパケットデータの流れを示している。制御ドメイン１１０のネットワークドライバ１１３が、ＬＡＮコントローラ２３５で受信したパケットを受信処理する。受信したパケットは制御ドメインＯＳ１１１内のポートスイッチ１００１に送られる。ポートスイッチ１００１は、パケットがゲスト仮想マシン１２０の受信パケットであるかを判定する。ゲスト仮想マシン１２０の受信パケットであると判定した場合、パケットが、バックエンドドライバ１１２およびハイパーバイザ１０１を経由して、ゲスト仮想マシン１２０内のフロントエンド仮想ドライバ１２６に送信される。フロントエンド仮想ドライバ１２６が受信したパケットは、ゲストＯＳ１２１によって処理され、データがゲスト仮想マシン内のアプリケーションに渡される。
【００８０】
逆に、ゲスト仮想マシン１２０から送信されたパケットは、ゲスト仮想マシン１２０内のフロントエンド仮想ドライバ１２６およびハイパーバイザ１０１を経由して、制御ドメインＯＳ１１１のバックエンドドライバ１１２に渡される。そして、パケットは、制御ドメインＯＳ１１１のポートスイッチ１００１を経由して実際のネットワークのデバイスに送信される。
【００８１】
図１６は、ネットワーク内に流れるパケットの構造を示す。このパケットは、ＬＡＮで使用されているＩＥＥＥ８０２．３のＭＡＣヘッダとＴＣＰ／ＩＰプロトコルで規定され、トランスポート層のプロトコルがＴＣＰ／ＵＤＰの場合のものである。パケットは、ＭＡＣヘッダ１１１０、ＩＰヘッダ１１２０、ＴＣＰ／ＵＤＰヘッダ１１３０、データ１１４０等を含む。
【００８２】
ＭＡＣヘッダ１１１０は、送信元ＭＡＣアドレス１１１１、および宛先ＭＡＣアドレス１１１２等を含む。ＩＰヘッダ１１２０は、トランスポート層のプロトコルを示すプロトコル番号１１２１、送信元ＩＰアドレス１１２２、および宛先ＩＰアドレス１１１３等を含む。ＴＣＰ／ＵＤＰヘッダ１１３０は、送信元ポート番号１１３１、宛先ポート番号１１１３２を含む。
【００８３】
次に、図１７を参照して、ポートスイッチ１００１の構成を説明する。ポートスイッチ１００１は、送信パケット解析部１２０１、テーブル検索／登録部１２０２、送信処理部１２０３、受信処理部１２０４、受信パケット解析部１２０５、テーブル検索／ポート判定部１２０６、受信通知／パケットデータ引渡部１２０７、およびタイマ部１２０８等を有する。
【００８４】
制御ドメイン１１０およびゲスト仮想マシン１２０は、それぞれ仮想のＬＡＮ−Ｉ／Ｆとして制御ドメインＯＳ−Ｉ／Ｆ１２１１、ゲストＯＳ−Ｉ／Ｆ１２１２を有する。それぞれのＬＡＮ−Ｉ／Ｆ１２１１、１２１２からの送信パケットは、送信パケット解析部１２０１に送られる。
【００８５】
また、ポートスイッチ１００１は、テーブル１２０９を管理する。図１８を参照して、テーブル１２０９の構造を説明する。Ｉ／Ｆ番号には、仮想マシンのＬＡＮ−Ｉ／Ｆ番号が入力される（０以上の整数）。ポート番号には、パケット送信時には送信元ポート番号（ＳＰ）を入力される。パケット受信時には宛先ポート番号（ＤＰ）と送信元ポート番号（ＳＰ）とが一致するかが確認される。プロトコル番号は、パケット送信時のプロトコル番号が入力される。パケット受信時には、受信のプロトコル番号と一致する、パケット送信時のプロトコル番号があるか検索される。
【００８６】
タイマ部１２０８により各エントリ毎の生存時間が一定時間ごとに減算され、０になった時点でそのエントリは無効、削除される。生存時間の初期値として“−１”にしたエントリは、タイマ部１２０８による減算はされず、無効とはならず残る。これは、予めそのポート番号を宛先ポート番号（ＤＰ）として持つパケットを受信するためである。通常はクライアント側から通信を開始することで、各エントリは登録されるが、通信の起動がクライアント外からである場合には、ポートスイッチ１００１で制御ドメインＯＳ側に受信することができないため、予め生存時間を−１としたエントリをセットし、そのエントリは必ず残るようにする。これにより、通信の起動がクライアント外からである場合でも正常に通信できるようになる。
【００８７】
送信パケット解析部１２０１は、パケットがＴＣＰ／ＩＰパケットであるかを判定する。パケットがＴＣＰ／ＩＰパケットであれば、テーブル検索／登録部１２０２は、プロトコル番号、送信元ポート番号（ＳＰ）、および宛先ポート番号（ＤＰ）を取り出す。テーブル検索／登録部１２０２は、取り出されたプロトコル番号および送信元ポート番号（ＳＰ）と一致するエントリをテーブル１２０９から検索する。ＴＣＰ／ＩＰパケット以外であれば、パケット解析部は、テーブル１２０９内のエントリを検索せずに、パケットを送信処理部１２０３に渡す。
【００８８】
取り出されたプロトコル番号および送信元ポート番号（ＳＰ）と一致するエントリがなければ、テーブル検索／登録部１２０２は、プロトコル番号と送信元ポート番号（ＳＰ）、受信した仮想ＬＡＮ−Ｉ／Ｆ番号を新規のエントリに登録する。テーブル１２０９内に既にエントリがあれば、テーブル検索／登録部１２０２は、そのエントリの生存時間をデフォルト値に再設定して、パケットを送信処理部１２０３に渡す。送信処理部１２０３は送信処理を実行し、パケットをＬＡＮコントローラ２３５に送信する。ＬＡＮコントローラ２３５は、ＬＡＮポート（LAN-PHY）１２２１に接続されたネットワーク上に存在するデバイスにデータを送信する。
【００８９】
次に、データの受信について説明する。ネットワークケーブルが接続されるＬＡＮポート（LAN-PHY）１２２１に接続されたネットワーク上に存在するデバイスから送信されたデータをＬＡＮコントローラ２３５が受信する。ＬＡＮコントローラ２３５は、受信したパケットを受信処理部１２０４に渡す。受信処理部１２０４は、データ内からパケットを取り出す。受信パケット解析部１２０５は、取り出されたパケットがＴＣＰ／ＩＰパケットであれば、プロトコル番号、送信元ポート番号（ＳＰ）、および宛先ポート番号（ＤＰ）を取り出す。テーブル検索／ポート判定部１２０６は、テーブル１２０９から取り出されたプロトコル番号および宛先ポート番号（ＤＰ）と一致するエントリを検索する。テーブル１２０９内に一致するエントリがあれば、テーブル検索／ポート判定部１２０６は、受信通知／パケットデータ引渡部１２０７にそのエントリのポート番号のＬＡＮ−Ｉ／Ｆに対して受信通知を行うように指示する。一致するエントリがなければ、受信通知／パケットデータ引渡部１２０７にゲスト仮想マシンのＬＡＮ−Ｉ／Ｆに対して受信通知とパケットデータの引渡しを行うように指示する。受信したパケットがＴＣＰ／ＩＰ以外であるならば、受信通知／パケットデータ引渡部１２０７によってゲスト仮想マシンのゲストＯＳ−Ｉ／Ｆ１２１２に受信させる。特にＡＲＰ（Address Resolution Protocol、アドレス解決プロトコル）パケット（ＩＰアドレスとＭＡＣアドレスの対応付けを行うプロトコル）ならば受信通知／パケットデータ引渡部１２０７によって全ポートに受信させる。これにより、適切なポート番号によって、ＭＡＣアドレス、ＩＰアドレスが同じＬＡＮ−Ｉ／Ｆであっても適切な仮想マシンのＬＡＮ−Ｉ／Ｆに受信できるようになる。
【００９０】
タイマ部１２０８は、テーブル１２０９の各エントリの生存時間を一定間隔おきに減算し、０になった時点でそのエントリを削除する。
【００９１】
図１９のフローチャートを参照して、パケット送信時のポートスイッチ１００１の動作を説明する。  
送信パケット解析部１２０１は、送信されるパケットが、ＴＣＰ／ＩＰパケットであるかを判定する（ステップＢ１４０１）。ＴＣＰ／ＩＰパケットであると判定した場合（ステップＢ１４０１のＹｅｓ）、テーブル検索／登録部１２０２は、パケットからプロトコル番号、送信元ポート番号（ＳＰ）、および宛先ポート番号（ＤＰ）を取り出す（ステップＢ１４０２）。テーブル検索／登録部１２０２は、送信要求元の仮想ＬＡＮ−Ｉ／Ｆ番号、プロトコル番号、送信元ポート番号（ＳＰ）を有するエントリがテーブル１２０９内に登録されているかを判定する（ステップＢ１４０３）。
【００９２】
登録されていると判定した場合（ステップＢ１４０３のＹｅｓ）、登録されているエントリ内の生存時間をデフォルト値に設定する（ステップＢ１４０４）。
【００９３】
登録されていないと判定した場合（ステップＢ１４０３のＮｏ）、テーブル検索／登録部１２０２が、送信要求元の仮想ＬＡＮ−Ｉ／Ｆ番号、プロトコル番号、送信元ポート番号（ＳＰ）、生存時間を有するエントリをテーブル１２０９に設定する（ステップＢ１４０６）。
【００９４】
ＴＣＰ／ＩＰパケットではないと判定された場合（ステップＢ１４０１のＮｏ）、およびステップＢ１４０４、Ｂ１４０５の後、送信処理部１２０３が、ＬＡＮコントローラに対して、パケットの送信を要求する（ステップＢ１４０５）。
【００９５】
次に、図２０を参照して、パケット受信時のポートスイッチ１００１の動作を説明する。  
受信パケット解析部１２０５は、受信したパケットがＡＲＰパケットであるかを判定する（ステップＢ１５０１）。ＡＲＰパケットであると判定した場合（ステップＢ１５０１のＹｅｓ）、受信通知／パケットデータ引渡部１２０７が全ポートにパケットを渡す（ステップＢ１５０８）。ＡＲＰパケットではないと判定した場合（ステップＢ１５０１のＮｏ）、受信パケット解析部１２０５は、パケットが、ＴＣＰ／ＩＰパケットであるかを判定する（ステップＢ１５０２）。ＴＣＰ／ＩＰパケットではないと判定した場合（ステップＢ１５０２のＮｏ）、受信通知／パケットデータ引渡部１２０７がゲストＯＳ−Ｉ／Ｆ１２１２にパケットを引き渡す（ステップＢ１５０９）。
【００９６】
ＴＣＰ／ＩＰパケットであると判定した場合（ステップＢ１５０３のＹｅｓ）、テーブル検索／ポート判定部１２０６は、パケットからプロトコル番号、送信元ポート番号（ＳＰ）、および宛先ポート番号（ＤＰ）を取り出す（ステップＢ１５０３）。テーブル検索／登録部１２０２は、プロトコル番号、宛先ポート番号（ＤＰ）を有するエントリがテーブル１２０９内を検索する（ステップＢ１５０４）。
【００９７】
検索の結果、登録されているエントリがない場合（ステップＢ１５０５のＮｏ）、受信通知／パケットデータ引渡部１２０７は、パケットをゲストＯＳ−Ｉ／Ｆ１２１２に渡す（ステップＢ１５１０）。登録されているエントリがあった場合（ステップＢ１５０５のＹｅｓ）、テーブル検索／ポート判定部１２０６は、登録済みのエントリの生存時間をデフォルト値に再設定する（ステップＢ１５０６）。受信通知／パケットデータ引渡部１２０７は、ポート番号に対応する送信元Ｉ／Ｆにパケットを渡す（ステップＢ１５０７）。
【００９８】
図２１，図２２のシーケンス図を参照して、クライアントコンピュータ内のパケットデータの送受信時の処理を説明する。
【００９９】
まず、ゲストＯＳ１２１が起動すると、管理エージェント１２３も起動する。他の仮想マシンが使用するポート番号を自ゲストマシン内の他の通信アプリケーションやサービスが使用しないよう、管理エージェント１２３は、設定された数の複数のポートのオープンをゲストＯＳに対して要求し、ゲストＯＳ１２１からポート番号を割り当ててもらう（１〜３）。このオープンしたポートはこのゲストＯＳ１２１および管理エージェント１２３からは使用せず、ゲストＯＳ１２１はポートをオープンするのみとする。そうすることで、このゲストＯＳ１２１上の通信アプリケーションやサービスが使用することはできなくなる。
【０１００】
管理エージェント１２３は、仮想マシンマネージャ１１８にゲストＯＳ１２１から割り当てられたポートのポート番号を通知する（４）。仮想マシンマネージャ１１８は、通知されたポート番号を送信元ポート番号として使用するよう要求する（４．１）。仮想マシンマネージャ１１８は、ポートの開放を要求する（５）。仮想マシンマネージャ１１８は、データを送信する場合、制御ドメインＯＳ１１１にデータを送信する旨を通知し（６）、仮想マシンマネージャ１１８は制御ドメインＯＳ１１１にデータを送信する（７）。制御ドメインＯＳ１１１は、ポートスイッチ１００１にパケットを送信する（７．１）。ポートスイッチ１００１は、テーブル１２０９にパケットの送信に用いられたポートの番号を登録する（７．１．１）。ポートスイッチ１００１は、ＬＡＮコントローラ２３５にパケットの送信を要求する（７．１．２）。ＬＡＮコントローラ２３５は、パケットを送信する（７．１．２．１）。
【０１０１】
ＬＡＮコントローラ２３５がパケットを受信した場合（８）、ＬＡＮコントローラ２３５は、パケットをポートスイッチ１００１に渡す（８．１）。ポートスイッチ１００１は、テーブル１２０９からパケットに含まれるプロトコル番号、宛先ポート番号（ＤＰ）を有するエントリを検索する（８．１．１）。パケットに含まれるプロトコル番号および宛先ポート番号（ＤＰ）を有するエントリがテーブル１２０９内にあり、エントリに含まれるポート番号が制御ドメインＯＳ−Ｉ／Ｆ１２１１に対応していれば（８．１．１．１）、ポートスイッチ１００１は、パケットを制御ドメインＯＳ１１１に送る（８．１．１．２）。制御ドメインＯＳ１１１は、仮想マシンマネージャにパケットを渡す（９）。
【０１０２】
ＬＡＮコントローラ２３５がパケットを受信した場合（１０）、ＬＡＮコントローラ２３５は、パケットをポートスイッチ１００１に渡す（１０．１）。ポートスイッチ１００１は、テーブル１２０９からパケットに含まれるプロトコル番号、宛先ポート番号（ＤＰ）を有するエントリを検索する（１０．１．１）。パケットに含まれるプロトコル番号および宛先ポート番号（ＤＰ）を有するエントリがテーブル１２０９内にあり、エントリに含まれるポート番号がゲストＯＳ−Ｉ／Ｆ１２１２に対応している、あるいはプロトコル番号および宛先ポート番号（ＤＰ）を有するエントリがテーブル１２０９内にない場合（１０．１．１．１）、ポートスイッチ１００１は、パケットをゲストＯＳ１２１に送る（１０．１．１．２）。
【０１０３】
制御ドメインＯＳ１１１がパケットの返信があった場合（１１）、ポートスイッチ１００１は、送信要求元の仮想ＬＡＮ−Ｉ／Ｆ番号、プロトコル番号、送信元ポート番号（ＳＰ）、生存時間を有するエントリをテーブル１２０９に設定する（１１．１）。そして、ポートスイッチ１００１は、ＬＡＮコントローラ２３５にパケットの送信を要求する（１１．２）。ＬＡＮコントローラは、パケットを送信する（１１．２．１）。
【０１０４】
以上説明した、通信方法によれば、ゲストＯＳ１２１から管理エージェント１２３に割り当てられた複数のポート番号を、制御ドメイン１１０の仮想マシンマネージャ１１８に通知し、制御ドメインＯＳ１１１の使用可能なポート番号の範囲を、管理エージェント１２３から通知された範囲の番号に設定する。これにより、制御ドメインＯＳ１１１上の通信サービスは、このポート番号の範囲のなかで使用されることとなる。これにより、ゲスト仮想マシン１２０と制御ドメイン１１０とのポート番号の衝突はなくなる。後は、各マシンから通信が起動され、そのパケットを前述のポートスイッチ１００１によって、受信パケットを適切な仮想マシンのＬＡＮ−Ｉ／Ｆに受信させることで、同じＭＡＣアドレス、同じＩＰアドレスを持つＬＡＮ−Ｉ／Ｆが存在しても通信が可能となる。
【０１０５】
管理エージェント１２３のポート予約と、ポートスイッチ１００１により、仮想マシン毎に異なるＭＡＣアドレスを割り当てる必要がなくグローバルＭＡＣアドレスを１つ割り当て、それに割り当てられる使用ＩＰアドレスも１つになる。
【０１０６】
また、セキュリティのためにＭＡＣアドレスフィルタリングを行っているネットワーク環境においても、クライアントＰＣのＭＡＣアドレスの許可のみで、使用できるようになった。
【０１０７】
本発明のいくつかの実施形態を説明したが、これらの実施形態は、例として提示したものであり、発明の範囲を限定することは意図していない。これら新規な実施形態は、その他の様々な形態で実施されることが可能であり、発明の要旨を逸脱しない範囲で、種々の省略、置き換え、変更を行うことができる。これら実施形態やその変形は、発明の範囲や要旨に含まれるとともに、特許請求の範囲に記載された発明とその均等の範囲に含まれる。
【符号の説明】
【０１０８】
１００…クライアントコンピュータ、１０１…ハイパーバイザ、１０２…メモリ、１１０…仮想マシン制御ドメイン、１１１…制御ドメインＯＳ、１１２…バックエンドドライバ、１１３…ネットワークドライバ、１１８…仮想マシンマネージャ、１２０…ゲスト仮想マシン、１２１…ゲストＯＳ、１２３…ゲスト仮想マシン管理エージェントプログラム、２３５…ＬＡＮコントローラ、１００１…ポートスイッチ、１２０１…送信パケット解析部、１２０２…登録部、１２０３…送信処理部、１２０４…受信処理部、１２０５…受信パケット解析部、１２０６…ポート判定部、１２０７…パケットデータ引渡部、１２０８…タイマ部。
【図１】
0005784482.tif 000002
【図２】
0005784482.tif 000003
【図３】
0005784482.tif 000004
【図４】
0005784482.tif 000005
【図５】
0005784482.tif 000006
【図６】
0005784482.tif 000007
【図７】
0005784482.tif 000008
【図８】
0005784482.tif 000009
【図９】
0005784482.tif 000010
【図１０】
0005784482.tif 000011
【図１１】
0005784482.tif 000012
【図１２】
0005784482.tif 000013
【図１３】
0005784482.tif 000014
【図１４】
0005784482.tif 000015
【図１５】
0005784482.tif 000016
【図１６】
0005784482.tif 000017
【図１７】
0005784482.tif 000018
【図１８】
0005784482.tif 000019
【図１９】
0005784482.tif 000020
【図２０】
0005784482.tif 000021
【図２１】
0005784482.tif 000022
【図２２】
0005784482.tif 000023