(57)【要約】【課題】  同一のスナップショットイメージから派生するゲストＯＳを１台の実マシン上の複数の仮想マシンで実行させる場合において、著しい性能低下の可能性なく同時に実行可能な最大数を増加させる計算機装置を提供する。【解決手段】  ＣＰＵ２０１と、Ｉ／Ｏインタフェース２０２と、記憶メモリ２０３と、プログラム記憶領域２０４とを備え、同一スナップショットイメージから複数の仮想マシンを復元し実行する計算機装置２００であって、２以上の仮想マシン間で共有するスナップショットイメージをホストＯＳのメモリ領域１００に保持し、共有したスナップショットイメージ１０４に対する書き込みメモリアクセスの検出を行い、書き込みメモリアクセスを検出した場合に仮想マシンに個別に割り当てられる差分メモリ領域１０９にスナップショットイメージの部分領域を複写する。【選択図】        図１
2007066265.tif 000002
【特許請求の範囲】
【請求項１】
ＣＰＵと、Ｉ／Ｏインタフェースと、記憶メモリと、プログラム記憶領域とを備え、同一スナップショットイメージから複数の仮想マシンを復元し実行する計算機装置であって、
２以上の仮想マシン間で共有するスナップショットイメージをホストＯＳのメモリ領域に保持し、共有したスナップショットイメージに対する書き込みメモリアクセスの検出を行い、書き込みメモリアクセスを検出した場合に当該仮想マシンに個別に割り当てられる差分メモリ領域にスナップショットイメージの部分領域を複写することを特徴とする計算機装置。
【請求項２】
請求項１記載の計算機装置において、
前記仮想マシンに個別に割り当てられる差分メモリ領域に複写したスナップショットイメージの部分領域へのメモリアクセスの検出を行い、該メモリアクセスを検出した場合に該メモリアクセスを前記差分メモリ領域に対して行うことを特徴とする計算機装置。
【請求項３】
請求項１記載の計算機装置において、
スナップショットイメージと、差分メモリと仮想マシン状態をそれぞれ有する複数の仮想マシンと、仮想マシンモニタとを備えることを特徴とする計算機装置。
【請求項４】
請求項１記載の計算機装置において、
仮想マシン上でサーバアプリケーションの実行準備が完了した時点でスナップショットイメージを取得し、クライアントからの接続要求に応じて仮想マシンを復元し、クライアントへのサービスを提供し、セッションが終了した時点で仮想マシンを破棄することを特徴とする計算機装置。
【請求項５】
請求項４記載の計算機装置において、
仮想マシンとクライアントとの接続切断を元にセッションの終了を判定することを特徴とする計算機装置。
【請求項６】
請求項４記載の計算機装置において、
仮想マシンに割り当てる差分メモリ領域の容量を制限し、差分メモリ領域の容量が所定の値を超過した仮想マシンを停止することを特徴とする計算機装置。
【請求項７】
請求項４記載の計算機装置において、
仮想マシンに割り当てる差分メモリ領域の容量を制限し、差分メモリ領域の容量が所定の値を超過した仮想マシンを破棄することを特徴とする計算機装置。
【請求項８】
ＣＰＵと、Ｉ／Ｏインタフェースと、記憶メモリと、プログラム記憶領域とを備える計算機装置における同一スナップショットイメージから複数の仮想マシンを提供する方法であって、
２以上の仮想マシン間で共有するスナップショットイメージをホストＯＳのメモリ領域に保持し、共有したスナップショットイメージに対する書き込みメモリアクセスの検出を行い、書き込みメモリアクセスを検出した場合に当該仮想マシンに個別に割り当てられる差分メモリ領域にスナップショットイメージの部分領域を複写することを特徴とする仮想マシン提供方法。
【請求項９】
請求項８記載の仮想マシン提供方法において、
前記仮想マシンに個別に割り当てられる差分メモリ領域に複写したスナップショットイメージの部分領域へのメモリアクセスの検出を行い、該メモリアクセスを検出した場合に該メモリアクセスを前記差分メモリ領域に対して行うことを特徴とする仮想マシン提供方法。
【請求項１０】
請求項８記載の仮想マシン提供方法において、
ＯＳのメモリ領域に、スナップショットイメージ、差分メモリと仮想マシン状態をそれぞれ有する複数の仮想マシン、及び仮想マシンモニタとを設けることを特徴とする仮想マシン提供方法。
【請求項１１】
請求項８記載の仮想マシン提供方法において、
仮想マシン上でサーバアプリケーションの実行準備が完了した時点でスナップショットイメージを取得し、クライアントからの接続要求に応じて仮想マシンを復元し、クライアントへのサービスを提供し、セッションが終了した時点で仮想マシンを破棄することを特徴とする仮想マシン提供方法。
【請求項１２】
請求項１１記載の仮想マシン提供方法において、
仮想マシンとクライアントとの接続切断を元にセッションの終了を判定することを特徴とする仮想マシン提供方法。
【請求項１３】
請求項１１記載の仮想マシン提供方法において、
仮想マシンに割り当てる差分メモリ領域の容量を制限し、差分メモリ領域の容量が所定の値を超過した仮想マシンを停止することを特徴とする仮想マシン提供方法。
【請求項１４】
請求項１１記載の仮想マシン提供方法において、
仮想マシンに割り当てる差分メモリ領域の容量を制限し、差分メモリ領域の容量が所定の値を超過した仮想マシンを破棄することを特徴とする仮想マシン提供方法。
【発明の詳細な説明】
【技術分野】
【０００１】
本発明は、仮想マシン技術、特に、仮想マシン間でスナップショットメモリを共有する仮想サーバ提供方式に関する。
【背景技術】
【０００２】
計算機システムにおいて、ソフトウェアによって計算機のハードウェア資源をエミュレートし、仮想的な計算機環境を提供する仮想マシン技術が知られている。仮想マシン技術において、オペレーティングシステム（ＯＳ）および仮想マシンアプリケーションソフトウェアによって提供される仮想的な計算機は、現実の計算機すなわち実マシンに対して、仮想マシンと呼ばれる。通例、実マシン上で動作するＯＳはホストＯＳ、仮想マシン上で動作するＯＳはゲストＯＳと呼ばれる。ホストＯＳおよび仮想マシンアプリケーションによって実現される、仮想マシンへの実マシンのハードウェア資源割り当てを制御する機構は、仮想マシンモニタと呼ばれる。換言すれば、仮想マシンは、仮想マシンモニタによって制御される。仮想マシンモニタが管理する実マシンのハードウェア資源には、ＣＰＵ（中央処理装置）処理時間、割り込み、記憶容量等がある。
【０００３】
ホストＯＳ上で複数の仮想マシンアプリケーションを時分割（タイムシェアリング）実行機能を用いて実行し、複数の仮想マシンを提供することにより、ホストＯＳの１台の実マシン上で同時に複数のゲストＯＳを実行する方式が実施されている。また、ゲストＯＳの実行メモリ内容を仮想マシンの実行状態と共に記憶領域にスナップショットイメージとして保存し、任意のタイミングで仮想マシン環境に復元することにより、ゲストＯＳの状態をスナップショットイメージ取得時の状態から再開する方式が実施されている。例えば、前記仮想マシン技術を応用した、フォーキングおよびマイグレーションの概念を仮想マシンに適応するための方法が、特許文献１に開示されている。
【０００４】
また、ＯＳ上でアプリケーションプロセスの複製分岐（フォーク）を行う際に処理効率を向上させる方式として、コピーオンライト方式が、非特許文献１に記載されている。
【特許文献１】特開２００４−１３３８９４号公報（図４）
【非特許文献１】Uresh Vahalia著、「UNIX（登録商標）Internals: The New Frontiers」、Prentice Hall、Oct. 1995（p.452-p.472）
【発明の開示】
【発明が解決しようとする課題】
【０００５】
かかる従来の手法において、1台の実マシン上で複数の仮想マシンを構成し、複数のゲストＯＳを同時に実行させる場合、ゲストＯＳ間でお互いのメモリ内容を破壊しあわないように、各仮想マシンには実マシンの独立したメモリ領域を割り当てる必要があった。例えば、主記憶として２ＧＢのＲＡＭ（Random  Access  Memory）を搭載する実マシンにおいて、ゲストＯＳに５１２ＭＢのＲＡＭを提供する仮想マシンを構成する場合、ホストＯＳおよび仮想マシンアプリケーションが使用するメモリ領域を考慮すると、著しい性能低下の可能性なく同時に実行させることができる仮想マシンの最大数は３台である。ホストＯＳの仮想記憶機能を利用する場合、実メモリ資源以上のメモリ容量を仮想マシンに割り当てることが可能であるが、ゲストＯＳおよび実行されるアプリケーションによっては、主記憶と補助記憶でメモリ内容の退避（スワップアウト）と復帰（スワップイン）を繰り返すスラッシングが発生し、システム全体の処理性能が著しく低下する可能性がある。
【０００６】
従って、同一のゲストＯＳのスナップショットイメージを複製して複数の仮想マシンで実行する場合においても、各仮想マシンにはスナップショット取得時と同容量のメモリ資源を割り当てる必要があり、１台の実マシン上で著しい性能低下の可能性なく同時に実行させることができる仮想マシンの最大数は、高々、実メモリ資源の容量を仮想マシンに割り当てるメモリ容量で除した商に制限される。
【０００７】
本発明の目的は、同一のスナップショットイメージから派生するゲストＯＳを１台の実マシン上の複数の仮想マシンで実行させる場合において、著しい性能低下の可能性なく同時に実行可能な最大数を増加させることにある。
【課題を解決するための手段】
【０００８】
前記課題を解決するため、本発明は、スナップショットイメージに格納されるゲストＯＳを複数の異なる仮想マシンで実行する場合において、複製元となる仮想マシンの状態とゲストＯＳのメモリ内容を格納するスナップショットイメージをホストＯＳのメモリ空間に保持し、仮想マシン間で共有する。仮想マシンモニタは、各仮想マシンのメモリ書き込みアクセスを監視し、スナップショットイメージ領域に対する書き込みアクセスを検出した場合に、予め確保しておいたメモリ領域、または、ホストＯＳから新たに確保したメモリ領域に、書き込み対象となった領域の内容を複写する。複写が完了した後、仮想マシンモニタは、複製したメモリ領域に対して書き込み内容を反映し、当該仮想マシンに関連付ける。以後、当該仮想マシンによる当該領域へのメモリアクセスは、仮想マシンモニタによって複製された領域に対して行われる。従って、スナップショットイメージの内容は改変されることはない。各仮想マシンには、実行状態とともに、スナップショットイメージとの差分を格納するメモリ領域が関連付けられ、保持される。仮想マシンモニタは、各仮想マシンに割り当てる差分格納用メモリ領域の量を所定の量に制限することにより、仮想マシンの実行を制御する。差分メモリ制限を超過した仮想マシンは、実行を中断または破棄される。仮想マシンの破棄は、当該仮想マシンに関連付けられている実行状態と差分メモリの内容を破棄することで行う。従って、仮想マシンの停止により、スナップショットイメージおよび他の仮想マシンが保持する実行状態が影響を受けることはない。
【０００９】
すなわち、本発明は、ＣＰＵと、Ｉ／Ｏインタフェースと、記憶メモリと、プログラム記憶領域とを備え、同一スナップショットイメージから複数の仮想マシンを復元し実行する計算機装置であって、２以上の仮想マシン間で共有するスナップショットイメージをホストＯＳのメモリ領域に保持し、共有したスナップショットイメージに対する書き込みメモリアクセスの検出を行い、書き込みメモリアクセスを検出した場合に当該仮想マシンに個別に割り当てられる差分メモリ領域にスナップショットイメージの部分領域を複写する計算機装置である。
【発明の効果】
【００１０】
本発明によれば、同一のスナップショットイメージから派生するゲストＯＳを１台の実マシン上の複数の仮想マシンで実行させる場合において、仮想マシン間でメモリ上のスナップショットイメージを共有し、各仮想マシンには、実行状態およびスナップショットイメージに対する差分のみを格納するメモリ領域を割り当てることにより、仮想マシンあたりに必要なメモリ資源量を削減し、著しい性能低下の可能性なく同時に実行可能な最大数を増加させることができる。
【発明を実施するための最良の形態】
【００１１】
本発明を実施するための最良の形態を説明する。
本発明の計算機装置及び仮想マシン提供方法の実施例について、図面を用いて説明する。
【実施例１】
【００１２】
実施例１を説明する。本実施例は、本発明の第１の実施の形態であり、使い捨て仮想Ｗｅｂサーバシステムである。本実施例では、本発明をＷｅｂサーバシステムに適用し、仮想マシン上でＷｅｂサーバアプリケーションを実行することにより、仮想的なＷｅｂサーバを提供する。仮想マシンモニタは、Ｗｅｂサーバのサービス開始直前の状態で仮想マシンのスナップショットを取得し、取得したスナップショットをもとに複数の仮想マシンを実行することにより、ひとつの計算機装置上で互いに独立な仮想Ｗｅｂサーバを複数提供する。セッションが完了すると、仮想マシンモニタは使い終わった仮想Ｗｅｂサーバを仮想マシンごと破棄する。
【００１３】
図１は、本実施例の仮想マシンアプリケーションが動作する計算機装置のメモリ領域の内訳を示す。計算機装置すなわち実マシンのメモリ領域１００は、ホストＯＳにより管理され、ホストＯＳを使用する領域１０１と、仮想マシンアプリケーションが使用する領域１０２に分けられる。ホストＯＳ使用領域１０１には、ホストＯＳのプログラムコードおよびホストＯＳ自身の実行に必要な情報が格納される。仮想マシンアプリケーション使用領域１０２は、仮想マシンアプリケーションの本体すなわち仮想マシンモニタによって管理され、仮想マシンモニタが使用する領域１０３、仮想マシン上で実行されるゲストＯＳが使用する領域すなわちゲストＯＳのメモリ内容のスナップショットイメージ使用領域１０４、各仮想マシンが個別に使用する領域１０５が含まれる。仮想マシンモニタ使用領域１０３には、仮想マシンアプリケーションのプログラムコードおよび仮想マシンモニタの内部変数等の情報が格納される。スナップショットイメージ使用領域１０４には、ゲストＯＳ自身が使用するメモリ領域１０６と、ゲストＯＳ上で動作するＷｅｂサーバアプリケーションが使用する領域１０７が含まれる。仮想マシン個別使用領域１０５には、仮想マシンの実行状態が使用する領域１０８と、差分メモリの領域１０９が含まれる。仮想マシン状態領域１０８には、仮想マシン実行のための情報、例えば、アドレス変換テーブル等、および、仮想マシンが提供する仮想ハードウェアの状態、例えば、仮想ＣＰＵのレジスタ内容、仮想ネットワークデバイスのパケット送受信バッファの内容等が格納される。差分メモリ領域１０９には、スナップショットイメージ１０４に対するメモリ内容の差分が格納される。なお、これらのメモリ領域は、計算機装置がページング等の仮想記憶機能を備えている場合、仮想アドレス空間において論理的に連続していればよく、実メモリ上で物理的に連続している必要はない。
【００１４】
図２は、本実施例の仮想マシンアプリケーションが実行される計算機装置の構成を示す。計算機装置２００は、ＣＰＵ（Central  Processing  Unit）２０１、Ｉ／Ｏインタフェース２０２、主記憶メモリ２０３、プログラム記憶領域２０４からなる。ＣＰＵ２０１は、プログラム記憶領域２０４から主記憶メモリ２０３へプログラムコードを読み込み、実行することにより、計算機装置２００の動作を制御する。Ｉ／Ｏインタフェース２０２は、周辺機器を接続するインタフェースを提供する。Ｉ／Ｏインタフェース２０２を介して接続される周辺機器には、例えば、インターバルタイマ、キーボード、ネットワークインタフェースカード等がある。主記憶メモリ２０３は、書き換え可能なＲＡＭ（Random  Access  Memory）であり、ＣＰＵ２０１によって実行されるプログラムコードおよび実行時のデータを格納する。主記憶メモリ２０３は、図１における実マシンのメモリ領域１００に対応する。プログラム格納領域２０４は、不揮発性のＲＯＭ（Read  Only  Memory）またはハードディスクドライブ等であり、計算機装置２００上で実行されるホストＯＳプログラム２０５、仮想マシンアプリケーションプログラム２０６、仮想マシン上で実行されるゲストＯＳプログラム２０７、サーバアプリケーションプログラム２０８を格納する。
【００１５】
図３は、本実施例の仮想マシンアプリケーションすなわち仮想マシンモニタが提供する仮想マシンの構成を示す。仮想マシン３００は、仮想ＣＰＵ３０１、仮想Ｉ／Ｏインタフェース３０２、仮想主記憶メモリ３０３、仮想プログラム記憶領域３０４からなる。仮想ＣＰＵ３０１は、仮想マシンモニタよってエミュレートされる仮想的なＣＰＵであり、仮想プログラム記憶領域３０４から仮想主記憶メモリ３０３へプログラムコードを読み込み、実行する。実際には、計算機装置２００上のＣＰＵ２０１で実行される仮想マシンアプリケーションプログラム２０６によって、プログラムコードの実行がエミュレートされる。仮想Ｉ／Ｏインタフェース３０２は、仮想マシンモニタが提供する仮想的な周辺機器を接続するインタフェースを提供する。ゲストＯＳは、例えば、仮想Ｉ／Ｏインタフェース３０２を介して接続される仮想ネットワークインタフェースカードを用いて、仮想マシンモニタおよびホストＯＳと通信する。仮想マシンモニタは、仮想Ｉ／Ｏインタフェース３０２を流れる情報を監視することにより、仮想マシンと外部とのやり取りを完全に把握することができる。仮想ＣＰＵ３０１および仮想Ｉ／Ｏインタフェース３０２の状態は、仮想マシンの実行状態であり、図１における仮想マシンの実行状態１０８に格納される。仮想主記憶メモリ３０３は、仮想ＣＰＵ３０１によって実行されるプログラムコードおよび実行時のデータを格納する。実際には、仮想主記憶メモリ３０３は、図２における主記憶メモリ２０３の一部であり、図１におけるスナップショットイメージ１０４と差分メモリ１０９により構成される。仮想プログラム記憶領域３０４は、ゲストＯＳプログラム３０５およびサーバアプリケーションプログラム３０６を格納する。実際には、仮想プログラム記憶領域３０４は、図２におけるプログラム記憶領域２０４の一部であり、ゲストＯＳプログラム３０５はゲストＯＳプログラム２０７と、サーバアプリケーションプログラム３０６はサーバアプリケーションプログラム２０８と、それぞれ同一である。なお、ホストＯＳプログラム２０５および仮想マシンアプリケーションプログラム２０６は、ＣＰＵ２０１に直接実行されるため、ＣＰＵ２０１の命令セット（機械語）で記述されている必要があるが、ゲストＯＳプログラム２０７およびサーバアプリケーションプログラム２０８は、仮想マシンアプリケーションプログラムがエミュレートする仮想ＣＰＵ３０１の命令セットで記述されていればよく、必ずしもＣＰＵ２０１の命令セットで記述されている必要はない。
【００１６】
図４は、本実施例の仮想マシンサーバの処理手順を示す。まず、計算機装置上でホストＯＳを起動する（ステップ４００）。次に、ホストＯＳ上で仮想マシンアプリケーションを起動する（ステップ４０１）。このとき、仮想マシンアプリケーションは、仮想マシンモニタを初期化し、仮想マシンアプリケーション内のスナップショット領域でゲストＯＳの実行を開始する。ゲストＯＳは、起動後、サーバアプリケーションを起動し、サービス開始の準備をする。サービス開始の準備が完了すると、仮想マシンアプリケーションは、ゲストＯＳを実行する仮想マシンのスナップショットを取得する（ステップ４０２）。ここで、サーバアプリケーションのサービス開始準備の完了は、サーバアプリケーションを改変して、例えば、サービス開始準備完了時に特定のパケットを送信するようにし、仮想マシンモニタによって当該パケットの送信を検出することにより判定できる。サーバアプリケーションを改変しなくとも、例えば、ホストＯＳ上のダミークライアントアプリケーションから仮想マシンに対して接続要求を発行し、期待した応答が得られるまで一定間隔で接続要求を繰り返すことで判定できる。また、単純に、サーバアプリケーションの起動に必要な時間を測定しておき、起動に必要な時間を待つようにしてもよい。スナップショット取得後、仮想マシンアプリケーションは、サービス対象となる外部のクライアントからの接続要求を受け付ける（ステップ４０３）。接続要求を受け付けると、仮想マシンアプリケーションは、仮想マシンに個別のメモリ領域を割り当て、新たな仮想マシンのインスタンスを生成する（ステップ４０４）。以後、当該接続のパケットは、仮想マシンモニタによってネットワークアドレスが書き換えられ、当該仮想マシンに転送される。仮想マシンモニタは、スナップショットおよび仮想マシン個別のメモリ領域を用いて仮想マシンを実行する（ステップ４０５）。仮想マシンでは、ゲストＯＳの実行が再開され、クライアントからの要求が処理される。クライアントからの要求に応答を返し、セッションが終了すると、仮想マシンモニタは、当該仮想マシンを破棄し、仮想マシン個別のメモリ領域を解放する（ステップ４０６）。ここで、セッションの終了の判定には、サービス開始準備完了の判定と同様に、サーバアプリケーションを改変して、例えば、セッション終了時に特定のパケットを送信するようにし、仮想マシンモニタによって当該パケットの送信を検出することにより判定できる。サーバアプリケーションを改変しなくとも、例えば、仮想マシンモニタによって、接続切断に用いられるパケットを検出し、クライアント、仮想マシン間の接続切断を以ってセッションの終了と判定してもよい。仮想マシンアプリケーションは、仮想マシンの破棄が終了すると、接続受付処理（ステップ４０３）に戻り、次の接続を処理する。以上の処理手順において、仮想マシンモニタは時分割または並列実行を用いることによって複数の仮想マシンを同時に実行することができる。従って、仮想マシンアプリケーションは、仮想マシンの生成（ステップ４０４）後、仮想マシンモニタに対して生成した仮想マシンの実行をスケジューリング後、接続受付処理（ステップ４０３）に戻り、処理を繰り返すことにより、仮想マシンに個別に割り当てるメモリ領域の残量が許す限り、複数の仮想マシンを生成し、同時に実行させることができる。仮想マシンモニタが複数の仮想マシンを同時に実行する方式には、例えば、ホストＯＳの機能を利用し、インターバルタイマ機能を用いて時分割で次の仮想マシンの処理に移る方式、マルチスレッド機能を用いて仮想マシンを並列実行する方式がある。他にも、例えば、仮想マシンモニタで各仮想ＣＰＵの命令実行数を数え、エミュレートした命令数がある閾値を越えたのを契機に実行する仮想マシンを切り替える方式であってもよい。
【００１７】
図５は、本実施例の仮想マシンモニタがメモリアクセス命令の実行をエミュレートする際に用いるアドレス変換テーブルを示す。アドレス変換テーブル５００は、実マシン上の主記憶メモリの領域を表す実メモリアドレスとその領域が複製されたものかどうかを表す複写済みフラグを格納し、仮想マシン上の仮想主記憶メモリのアドレスをインデックスに参照される。例えば、メモリ領域を６４ＫＢ単位で管理する場合、各メモリ領域は、メモリアドレスの下位１６ビットを切り捨てた値で一意に区別することができ、５１２ＭＢのメモリ空間は１３ビットで、２ＧＢのメモリ空間は１５ビットで、それぞれ表すことができる。今、主記憶メモリとして２ＧＢのメモリを搭載する実マシン上で、仮想主記憶メモリとして５１２ＭＢのメモリを割り当てた仮想マシンを構成する場合を考える。仮想主記憶メモリは、実マシンの主記憶メモリ上に配置されるが、メモリ領域を６４ＫＢ単位に分割して管理する場合、その対応関係は、１３ビットの仮想主記憶メモリ領域のアドレスを、１５ビットの主記憶メモリ領域のアドレスに変換することで得られる。実際に２９ビットの仮想主記憶メモリアドレスから３１ビットの実メモリアドレスを得るには、仮想主記憶メモリアドレスの上位１３ビットをインデックスとしてテーブルを参照することで１５ビットの主記憶メモリ領域のアドレスを得、得られた値を上位１５ビットとして仮想主記憶メモリアドレスの下位１６ビットとあわせればよい。この変換に必要なテーブルすなわちアドレス変換テーブルは、１５ビットの実メモリアドレスに複写済みフラグ１ビットを加えた２バイトのエントリが、１３ビットの仮想主記憶メモリ領域のアドレス分すなわち８１９２個あればよく、実メモリ上に１６ＫＢの領域を占める。アドレス変換テーブルは、仮想マシンの生成時に、複写済みフラグが全てオフで仮想主記憶メモリを実メモリ上のスナップショットイメージに写像（マッピング）した状態で生成され、仮想マシンの実行状態を表す情報のひとつとして、仮想マシンに個別のメモリ領域に格納される。
【００１８】
図６は、本実施例の仮想マシンモニタが仮想マシンを実行する処理手順を示す。仮想マシンモニタは、仮想マシンに個別の領域に格納される仮想マシンの状態を読み込み、仮想マシンの実行状態を復元する（ステップ６００）。復元した仮想マシンの仮想ＣＰＵのプログラムカウンタレジスタの値を元に、次に実行をエミュレートすべき命令を読み込む（ステップ６０１）。このとき、命令は、実際にはプログラムカウンタレジスタが指し示す仮想主記憶メモリのアドレスを、アドレス変換テーブルを用いて変換した実メモリアドレスから読み込まれる。仮想マシンモニタは、読み込んだ命令がメモリアクセス命令であるかを判定する（ステップ６０２）。命令が、メモリアクセスではない演算命令等であった場合は、命令実行エミュレート（ステップ６０８）に処理を進める。命令が、メモリアクセス命令であった場合は、書き込み命令であるかどうかを判定する（ステップ６０３）。命令が、書き込み命令ではない、すなわち、読み込み命令であった場合は、アドレス変換（ステップ６０７）に処理を進める。命令が、書き込み命令であった場合は、アクセス対象の仮想主記憶メモリ領域に対応するアドレス変換テーブルの複写済みフラグを参照し、対象となるメモリ領域が仮想マシンに個別の差分メモリ領域に複写されたものであるかを判定する（ステップ６０４）。複写済みフラグがセットされている場合は、アドレス変換（ステップ６０７）に処理を進める。複写済みフラグがセットされていない場合は、仮想マシンに個別の差分メモリ領域から未使用の領域を割り当て、アドレス変換テーブルから対象となる仮想主記憶メモリ領域に対応する実メモリ領域のアドレスを参照し、スナップショットイメージの当該領域のメモリ内容を差分メモリ領域に複写する（ステップ６０５）。複写が完了すると、アドレス変換テーブルの実メモリアドレスを差分メモリ領域に差し替え、複写済みフラグをセットし、アドレス変換テーブルを更新する（ステップ６０６）。以後、当該仮想主記憶メモリ領域に対するメモリアクセスは、差分メモリ領域に対して行われることになる。次に、アドレス変換テーブルを参照し、アクセス対象の仮想主記憶メモリアドレスを、実メモリアドレスに変換する（ステップ６０７）。実際のメモリアクセスは、ここで得られた実メモリアドレスに対して行われる。最後に、命令の実行をエミュレートし、仮想マシンの状態を更新する（ステップ６０８）。当該命令の実行を完了すると、更新された仮想ＣＰＵのプログラムカウンタレジスタの値を元に、次の命令の処理に移る（ステップ６０１）。以上の処理手順により、本実施例の仮想マシンモニタによって複数の仮想マシンを同時に実行する場合においても、仮想マシン間で共有するスナップショットのメモリ内容は保護され、スナップショットに対する差分のみが各仮想マシンの差分メモリ領域に格納される。
【００１９】
図７は、本実施例の使い捨て仮想Ｗｅｂサーバの接続構成を示す。計算機装置７００は、複数のクライアント７０４と、インターネット７０５を介して接続され、ストレージ装置７０６と、ＳＡＮ（Storage  Area  Network）７０９を介して接続される。計算機装置７００上では、仮想マシンアプリケーションが動作し、仮想マシンモニタ７０１を提供する。仮想マシンモニタ７０１は、複数の仮想マシン環境を提供する。仮想マシン７０２上ではＷｅｂサーバアプリケーションが動作し、仮想Ｗｅｂサーバ７０３を提供する。仮想Ｗｅｂサーバ７０３により、Ｗｅｂサービスが提供される。ストレージ装置７０６は、記憶媒体としてディスク装置７０７を備え、ディスク装置７０７には、コンテンツ７０８が格納される。仮想マシンモニタ７０１は、図４の手順に従い、Ｗｅｂサーバアプリケーションを実行するゲストＯＳのスナップショットを取得する。仮想マシンモニタ７０１は、クライアント７０４からの接続要求がある毎にスナップショットを元に仮想マシン７０２を生成し、図６の手順に従い、仮想マシン７０２の実行を再開する。仮想マシンモニタ７０１においてＮＡＴ（Network  Address  Translation）を行うことにより、仮想マシン７０２上の仮想Ｗｅｂサーバ７０３は、インターネット７０５を介してクライアント７０４から透過的にアクセスされる。仮想マシン７０２は、必要に応じて仮想マシンモニタ７０１を介してストレージ装置７０６にアクセスし、ディスク装置７０７に格納されるコンテンツ７０８を読み込み、クライアント７０４にサービスを提供する。ここで、仮想マシン７０２からストレージ装置７０６へのアクセスは、仮想マシンモニタ７０１により完全に把握できる。仮想マシンモニタ７０１は、図４の手順に従い、セッションの終了を検知すると、使い終わった仮想Ｗｅｂサーバ７０３を仮想マシン７０２ごと破棄する。従って、仮想Ｗｅｂサーバ７０３は、セッション毎に使い捨てられることになり、仮想マシン７０２の実行を継続することによるスナップショットとの差分の肥大化を防止し、仮想マシン環境あたりの必要なメモリ資源量を抑制することができる。
【００２０】
以上に説明したように、本発明によれば、Ｗｅｂサーバアプリケーションの不具合によるサービス停止、不正侵入によるコンテンツの改竄等の影響を最小限に抑えるために、個々のクライアントに対して個別の仮想Ｗｅｂサーバを割り当てる場合においても、仮想マシン間でメモリ上のスナップショットイメージを共有し、各仮想マシンには差分メモリ領域のみを割り当てることにより、仮想マシンあたりに必要なメモリ資源量を削減し、ひとつの計算機装置で同時にサービス提供可能なクライアント数の最大値を増加させることができる。
【００２１】
なお、上記実施例では、本発明が特定の計算機アーキテクチャに依存しないことを示すため、実マシンのメモリアクセス保護機能を特に利用せずに仮想マシンを構成し、実マシンのＣＰＵが採用するのと異なる命令セットで記述されたプログラムコードの実行を仮想マシンモニタによってエミュレートする場合について説明した。計算機装置が対応しているならば、本発明を、計算機装置が提供するメモリアクセス保護機能、ＣＰＵエミュレーション補助機能等を用いて実施してもよい。
【００２２】
また、スナップショットイメージは、１つに限られず、複数の仮想マシンのうちの２以上の仮想マシン間で共有する毎に、別なスナップショットイメージとすることも可能である。
【００２３】
以上実施例で説明したが、本発明の他の実施形態１は、前記仮想マシンに個別に割り当てられる差分メモリ領域に複写したスナップショットイメージの部分領域へのメモリアクセスの検出を行い、該メモリアクセスを検出した場合に該メモリアクセスを前記差分メモリ領域に対して行う計算機装置である。
【００２４】
また、本発明の他の実施形態２は、スナップショットイメージと、差分メモリと仮想マシン状態をそれぞれ有する複数の仮想マシンと、仮想マシンモニタとを備える計算機装置である。
【００２５】
そして、本発明の他の実施形態３は、仮想マシン上でサーバアプリケーションの実行準備が完了した時点でスナップショットイメージを取得し、クライアントからの接続要求に応じて仮想マシンを復元し、クライアントへのサービスを提供し、セッションが終了した時点で仮想マシンを破棄する計算機装置である。
【００２６】
更に、本発明の他の実施形態４は、仮想マシンとクライアントとの接続切断を元にセッションの終了を判定する計算機装置である。
【００２７】
また、本発明の他の実施形態５は、仮想マシンに割り当てる差分メモリ領域の容量を制限し、差分メモリ領域の容量が所定の値を超過した仮想マシンを停止することを特徴とする計算機装置である。
【００２８】
そして、本発明の他の実施形態６は、仮想マシンに割り当てる差分メモリ領域の容量を制限し、差分メモリ領域の容量が所定の値を超過した仮想マシンを破棄する計算機装置である。
【００２９】
更に、本発明の他の実施形態７は、ＣＰＵと、Ｉ／Ｏインタフェースと、記憶メモリと、プログラム記憶領域とを備える計算機装置における同一スナップショットイメージから複数の仮想マシンを提供する方法であって、２以上の仮想マシン間で共有するスナップショットイメージをホストＯＳのメモリ領域に保持し、共有したスナップショットイメージに対する書き込みメモリアクセスの検出を行い、書き込みメモリアクセスを検出した場合に当該仮想マシンに個別に割り当てられる差分メモリ領域にスナップショットイメージの部分領域を複写する仮想マシン提供方法である。
【００３０】
また、本発明の他の実施形態８は、前記仮想マシンに個別に割り当てられる差分メモリ領域に複写したスナップショットイメージの部分領域へのメモリアクセスの検出を行い、該メモリアクセスを検出した場合に該メモリアクセスを前記差分メモリ領域に対して行う仮想マシン提供方法である。
【００３１】
そして、本発明の他の実施形態９は、ＯＳのメモリ領域に、スナップショットイメージ、差分メモリと仮想マシン状態をそれぞれ有する複数の仮想マシン、及び仮想マシンモニタとを設ける仮想マシン提供方法である。
【００３２】
更に、本発明の他の実施形態１０は、仮想マシン上でサーバアプリケーションの実行準備が完了した時点でスナップショットイメージを取得し、クライアントからの接続要求に応じて仮想マシンを復元し、クライアントへのサービスを提供し、セッションが終了した時点で仮想マシンを破棄する仮想マシン提供方法である。
【００３３】
また、本発明の他の実施形態１１は、仮想マシンとクライアントとの接続切断を元にセッションの終了を判定する仮想マシン提供方法である。
【００３４】
そして、本発明の他の実施形態１２は、仮想マシンに割り当てる差分メモリ領域の容量を制限し、差分メモリ領域の容量が所定の値を超過した仮想マシンを停止する仮想マシン提供方法である。
【００３５】
更に、本発明の他の実施形態１３は、仮想マシンに割り当てる差分メモリ領域の容量を制限し、差分メモリ領域の容量が所定の値を超過した仮想マシンを破棄する仮想マシン提供方法である。
【図面の簡単な説明】
【００３６】
【図１】実施例１の計算機装置のメモリ領域の内訳の説明図。
【図２】実施例１の計算機装置の構成の説明図。
【図３】実施例１における仮想マシンモニタが提供する仮想マシンの構成の説明図。
【図４】実施例１における仮想マシンサーバの処理手順の説明図。
【図５】実施例１における仮想マシンモニタがメモリアクセス命令の実行をエミュレートする際に用いるアドレス変換テーブルの説明図。
【図６】実施例１における仮想マシンモニタが仮想マシンを実行する処理手順の説明図。
【図７】実施例１における使い捨て仮想Ｗｅｂサーバの接続構成の説明図。
【符号の説明】
【００３７】
１００  計算機装置の実メモリ領域
１０１  ホストＯＳが使用するメモリ領域
１０２  仮想マシンアプリケーションが使用するメモリ領域
１０３  仮想マシンモニタが使用するメモリ領域
１０４  スナップショットイメージが格納されるメモリ領域
１０５  仮想マシンが使用するメモリ領域
１０６  ゲストＯＳが使用するメモリ領域
１０７  サーバアプリケーションが使用するメモリ領域
１０８  仮想マシンの状態が格納されるメモリ領域
１０９  スナップショットイメージとの差分が格納されるメモリ領域
２００  計算機装置
２０１  ＣＰＵ
２０２  Ｉ／Ｏインタフェース
２０３  主記憶メモリ
２０４  プログラム記憶領域
２０５  ホストＯＳプログラム
２０６  仮想マシンアプリケーションプログラム
２０７  ゲストＯＳプログラム
２０８  サーバアプリケーションプログラム
３００  仮想マシン
３０１  仮想ＣＰＵ
３０２  仮想Ｉ／Ｏインタフェース
３０３  仮想主記憶メモリ
３０４  仮想プログラム記憶領域
３０５  ゲストＯＳプログラム
３０６  サーバアプリケーションプログラム
５００  アドレス変換テーブル
７００  計算機装置
７０１  仮想マシンモニタ
７０２  仮想マシン
７０３  仮想Ｗｅｂサーバ
７０４  クライアント
７０５  インターネット
７０６  ストレージ装置
７０７  ディスク装置
７０８  コンテンツ
７０９  ＳＡＮ
【図１】
2007066265.tif 000003
【図２】
2007066265.tif 000004
【図３】
2007066265.tif 000005
【図４】
2007066265.tif 000006
【図５】
2007066265.tif 000007
【図６】
2007066265.tif 000008
【図７】
2007066265.tif 000009