(57)【特許請求の範囲】
【請求項１】
第１の仮想マシンを複製することで１以上の第２の仮想マシンを生成する仮想計算機システムであって、
前記第１の仮想マシンがアクセスし得る１以上の各メモリ領域について、前記１以上の第２の仮想マシンの生成後、前記第１の仮想マシンおよび前記１以上の第２の仮想マシンのうちいずれかの仮想マシンが書込アクセスをするまでは、各仮想マシンから共に読出アクセスし得るものとして管理する管理手段と、
前記管理手段が管理する前記各メモリ領域について、前記書込アクセスが行われる場合には、当該書込アクセス前のメモリ内容を当該書込アクセスを行った仮想マシン以外の仮想マシンが将来アクセスするときのために保持しておく必要がない特定種メモリ領域か否かの判別を行う判別手段と、
前記特定種メモリ領域への前記書込アクセスを検知する第１検知手段と、
前記第１検知手段により前記書込アクセスが検知された後に、当該書込アクセスを行った仮想マシン以外の仮想マシンが当該特定種メモリ領域にアクセスしようとしていることを検知する第２検知手段と、
前記第２検知手段により特定種メモリ領域にアクセスしようとしていることが検知された仮想マシンに対して、当該アクセスの対象として新たにメモリ領域を獲得して割当を行うメモリ割当手段とを備える
ことを特徴とする仮想計算機システム。
【請求項２】
前記判別手段は、前記第１の仮想マシンの複製により前記１以上の第２の仮想マシンを生成する際に、当該第１の仮想マシン内で使用している各メモリ領域についての使用状況を示す情報に基づいて、前記判別を行う
ことを特徴とする請求項１に記載の仮想計算機システム。
【請求項３】
各メモリ領域についての使用状況を示す前記情報は、当該メモリ領域が未使用でありかつ当該メモリ領域が初期化してアクセスされるものであるか否かを区別するものであり、
前記判別手段は、未使用でありかつ初期化してアクセスされるメモリ領域については特定種メモリ領域であると判別する
ことを特徴とする請求項２に記載の仮想計算機システム。
【請求項４】
各メモリ領域についての使用状況を示す前記情報は、当該メモリ領域の内容と同一の内容が外部の記憶手段に存在するか否かを区別するものであり、
前記判別手段は、外部の記憶手段内と同一の内容のメモリ領域については特定種メモリ領域であると判別する
ことを特徴とする請求項２に記載の仮想計算機システム。
【請求項５】
前記判別手段は、前記第１の仮想マシンおよび前記１以上の第２の仮想マシンのうちいずれかの仮想マシンが初めてアクセスするときのメモリ領域の内容が、当該アクセスを行う仮想マシン以外の仮想マシンに最後に書込アクセスされた内容であってもよいところのメモリ領域については、特定種メモリ領域であると判別する
ことを特徴とする請求項２に記載の仮想計算機システム。
【請求項６】
各メモリ領域についての使用状況を示す前記情報は、当該メモリ領域が未使用であるか否かを区別するものであり、
前記仮想計算機システムは、更に、
前記情報に基づき、第１の仮想マシンの複製により１以上の第２の仮想マシンを生成する際に、当該第１の仮想マシンに割り当てられていたメモリ領域が未使用であるか否かを判別する第２判別手段と、
前記第２判別手段により未使用と判別されたメモリ領域について、当該メモリ領域への前記第１の仮想マシンおよび前記１以上の第２の仮想マシンのうちいずれかの仮想マシンによるアクセスを検知可能に設定した上で当該メモリ領域の実体を解放し、実体が解放された当該メモリ領域への当該仮想マシンによるアクセスが後に検知された場合に当該仮想マシンに対して当該メモリ領域の実体を割り当てるメモリ割当解放手段とを備える
ことを特徴とする請求項２に記載の仮想計算機システム。
【請求項７】
仮想マシンの仮想ＯＳが、メモリ領域の解放のために、前記仮想マシンの空きメモリ領域を管理するための管理情報が格納されるメモリ領域へアクセスした場合に、当該アクセスを検知する第３検知手段と、
前記第３検知手段により前記アクセスが検知された場合に、前記仮想ＯＳが解放しようとしている前記メモリ領域の実体の解放を行うメモリ解放手段とを更に備える
ことを特徴とする請求項６に記載の仮想計算機システム。
【請求項８】
管理手段と、判別手段と、第１検知手段と、第２検知手段と、メモリ割当手段とを備え、第１の仮想マシンを複製することで１以上の第２の仮想マシンを生成する仮想計算機システムにおけるメモリ管理方法であって、
前記仮想計算機システムの管理手段が、前記第１の仮想マシンがアクセスし得る１以上の各メモリ領域について、前記１以上の第２の仮想マシンの生成後、前記第１の仮想マシンおよび前記１以上の第２の仮想マシンのうちいずれかの仮想マシンが書込アクセスをするまでは、各仮想マシンから共に読出アクセスし得るものとして管理する管理ステップと、
前記仮想計算機システムの判別手段が、前記管理手段が管理する前記各メモリ領域について、前記書込アクセスが行われる場合には、当該書込アクセス前のメモリ内容を当該書込アクセスを行った仮想マシン以外の仮想マシンが将来アクセスするときのために保持しておく必要がない特定種メモリ領域か否かの判別を行う判別ステップと、
前記仮想計算機システムの第１検知手段が、前記特定種メモリ領域への前記書込アクセスを検知する第１検知ステップと、
前記仮想計算機システムの第２検知手段が、前記第１検知手段により前記書込アクセスが検知された後に、当該書込アクセスを行った仮想マシン以外の仮想マシンが当該特定種メモリ領域にアクセスしようとしていることを検知する第２検知ステップと、
前記仮想計算機システムのメモリ割当手段が、前記第２検知手段により特定種メモリ領域にアクセスしようとしていることが検知された仮想マシンに対して、当該アクセスの対象として新たにメモリ領域を獲得して割当を行うメモリ割当ステップとを含む
ことを特徴とするメモリ管理方法。
【請求項９】
管理手段と、判別手段と、第１検知手段と、第２検知手段と、メモリ割当手段とを備え、第１の仮想マシンを複製することで１以上の第２の仮想マシンを生成する仮想計算機システムにおけるコンピュータに、
前記仮想計算機システムの管理手段が、前記第１の仮想マシンがアクセスし得る１以上の各メモリ領域について、前記１以上の第２の仮想マシンの生成後、前記第１の仮想マシンおよび前記１以上の第２の仮想マシンのうちいずれかの仮想マシンが書込アクセスをするまでは、各仮想マシンから共に読出アクセスし得るものとして管理する管理ステップと、
前記仮想計算機システムの判別手段が、前記管理手段が管理する前記各メモリ領域について、前記書込アクセスが行われる場合には、当該書込アクセス前のメモリ内容を当該書込アクセスを行った仮想マシン以外の仮想マシンが将来アクセスするときのために保持しておく必要がない特定種メモリ領域か否かの判別を行う判別ステップと、
前記仮想計算機システムの第１検知手段が、前記特定種メモリ領域への前記書込アクセスを検知する第１検知ステップと、
前記仮想計算機システムの第２検知手段が、前記第１検知手段により前記書込アクセスが検知された後に、当該書込アクセスを行った仮想マシン以外の仮想マシンが当該特定種メモリ領域にアクセスしようとしていることを検知する第２検知ステップと、
前記仮想計算機システムのメモリ割当手段が、前記第２検知手段により特定種メモリ領域にアクセスしようとしていることが検知された仮想マシンに対して、当該アクセスの対象として新たにメモリ領域を獲得して割当を行うメモリ割当ステップと
を実行させるためのメモリ管理プログラム。
【請求項１０】
管理手段と、判別手段と、第１検知手段と、第２検知手段と、メモリ割当手段とを備え、第１の仮想マシンを複製することで１以上の第２の仮想マシンを生成する仮想計算機システムにおいて用いられるメモリ管理プログラムを記録しているコンピュータ読取可能な記録媒体であって、
前記仮想計算機システムにおけるコンピュータに、
前記仮想計算機システムの管理手段が、前記第１の仮想マシンがアクセスし得る１以上の各メモリ領域について、前記１以上の第２の仮想マシンの生成後、前記第１の仮想マシンおよび前記１以上の第２の仮想マシンのうちいずれかの仮想マシンが書込アクセスをするまでは、各仮想マシンから共に読出アクセスし得るものとして管理する管理ステップと、
前記仮想計算機システムの判別手段が、前記管理手段が管理する前記各メモリ領域について、前記書込アクセスが行われる場合には、当該書込アクセス前のメモリ内容を当該書込アクセスを行った仮想マシン以外の仮想マシンが将来アクセスするときのために保持しておく必要がない特定種メモリ領域か否かの判別を行う判別ステップと、
前記仮想計算機システムの第１検知手段が、前記特定種メモリ領域への前記書込アクセスを検知する第１検知ステップと、
前記仮想計算機システムの第２検知手段が、前記第１検知手段により前記書込アクセスが検知された後に、当該書込アクセスを行った仮想マシン以外の仮想マシンが当該特定種メモリ領域にアクセスしようとしていることを検知する第２検知ステップと、
前記仮想計算機システムのメモリ割当手段が、前記第２検知手段により特定種メモリ領域にアクセスしようとしていることが検知された仮想マシンに対して、当該アクセスの対象として新たにメモリ領域を獲得して割当を行うメモリ割当ステップと
を実行させるためのメモリ管理プログラムを記録している記録媒体。
【請求項１１】
第１の仮想マシンを複製することで１以上の第２の仮想マシンを生成する仮想計算機システムを構成する集積回路であって、
前記第１の仮想マシンがアクセスし得る１以上の各メモリ領域について、前記１以上の第２の仮想マシンの生成後、前記第１の仮想マシンおよび前記１以上の第２の仮想マシンのうちいずれかの仮想マシンが書込アクセスをするまでは、各仮想マシンから共に読出アクセスし得るものとして管理する管理手段と、
前記管理手段が管理する前記各メモリ領域について、前記書込アクセスが行われる場合には、当該書込アクセス前のメモリ内容を当該書込アクセスを行った仮想マシン以外の仮想マシンが将来アクセスするときのために保持しておく必要がない特定種メモリ領域か否かの判別を行う判別手段と、
前記特定種メモリ領域への前記書込アクセスを検知する第１検知手段と、
前記第１検知手段により前記書込アクセスが検知された後に、当該書込アクセスを行った仮想マシン以外の仮想マシンが当該特定種メモリ領域にアクセスしようとしていることを検知する第２検知手段と、
前記第２検知手段により特定種メモリ領域にアクセスしようとしていることが検知された仮想マシンに対して、当該アクセスの対象として新たにメモリ領域を獲得して割当を行うメモリ割当手段とを備える
ことを特徴とする集積回路。
【発明の詳細な説明】
【技術分野】
【０００１】
本発明は、仮想計算機システムに関し、特に、アプリケーションプログラムの実行環境となるオペレーティングシステム（ＯＳ）を随時生成し動作させるシステムにおける、メモリ領域の使用量低減のための技術に関する。
【背景技術】
【０００２】
近年、パーソナルコンピュータのみならず家電機器でも、ネットワーク接続機能を有するものが普及しつつある。ところが、ネットワークにはスパイウェア等の不正動作をするプログラムが意図的に流されることがあり、これらのプログラムをダウンロードして実行してしまう危険性が高まっている。このような状況におけるセキュリティ対策として、信頼していないプログラムをダウンロードして実行する環境となるＯＳ（Operating System）を安全なＯＳとは分離して生成し、複数のＯＳ（仮想マシン）を同時に実行させる仮想計算機システム技術が研究、開発されている。【０００３】
一般に、複数の仮想マシンを同時に実行すれば、実行に必要なメモリ量は増大し、機器の製造コストが上昇する。コスト削減のために、仮想マシンの複製方式が提案されている（例えば、特許文献１、特許文献２参照）。
【先行技術文献】
【特許文献】
【０００４】
【特許文献１】特開２００８−１６５７９５号公報
【特許文献２】特開２００９−１１６９１４号公報
【発明の概要】
【発明が解決しようとする課題】
【０００５】
しかしながら、上記のように、コピーオンライト処理によって仮想マシンを複製する構成においても、さらなるメモリ領域の使用量低減が求められていた。【０００６】
そこで、本発明は、係る問題に鑑みてなされたものであり、コピーオンライト処理によって物理メモリ領域を無駄に確保することを防ぐ仮想計算機システムを提供することを目的とする。
【課題を解決するための手段】
【０００７】
上記課題を解決するために、本発明の一実施態様に係る仮想計算機システムは、第１の仮想マシンを複製することで１以上の第２の仮想マシンを生成する仮想計算機システムであって、前記第１の仮想マシンがアクセスし得る１以上の各メモリ領域について、前記１以上の第２の仮想マシンの生成後、前記第１の仮想マシンおよび前記１以上の第２の仮想マシンのうちいずれかの仮想マシンが書込アクセスをするまでは、各仮想マシンから共に読出アクセスし得るものとして管理する管理手段と、前記管理手段が管理する前記各メモリ領域について、前記書込アクセスが行われる場合には、当該書込アクセス前のメモリ内容を当該書込アクセスを行った仮想マシン以外の仮想マシンが将来アクセスするときのために保持しておく必要がない特定種メモリ領域か否かの判別を行う判別手段と、前記特定種メモリ領域への前記書込アクセスを検知する第１検知手段と、前記第１検知手段により前記書込アクセスが検知された後に、当該書込アクセスを行った仮想マシン以外の仮想マシンが当該特定種メモリ領域にアクセスしようとしていることを検知する第２検知手段と、前記第２検知手段により特定種メモリ領域にアクセスしようとしていることが検知された仮想マシンに対して、当該アクセスの対象として新たにメモリ領域を獲得して割当を行うメモリ割当手段とを備えることを特徴とする。
【発明の効果】
【０００８】
上記構成を備える本発明に係る仮想計算機システムによれば、コピーオンライト処理によって物理メモリ領域を無駄に確保することを防ぐことができる。
【図面の簡単な説明】
【０００９】
【図１】仮想計算機システム１による仮想マシン複製時の様子を模式的に表した図である。
【図２】分類値「１」が付された物理メモリ領域に、いずれかの仮想マシンが書込アクセスした時の処理を示す図であり、第１メモリ処理を模式的に示す図である。
【図３】分類値「５」が付されたメモリ領域に、仮想マシンが書込アクセスした時の処理を示す図であり、新規メモリ割当処理を模式的に示す図である。
【図４】実施の形態１に係る仮想計算機システム１の機能構成図である。
【図５】ＯＳメモリ管理テーブル１４のデータ構成および内容例を示す図である。
【図６】分類値テーブル２０１のデータ構成および内容例を示す図である。
【図７】仮想マシンメモリ管理テーブル３１１のデータ構成および内容例を示す図である。
【図８】アクセス制御テーブル３１０のデータ構成および内容例を示す図である。
【図９】メモリ割当処理部３５の機能構成図である。
【図１０】仮想マシン複製後、仮想マシンＡ１０から最初に書込アクセスがあった場合における第１メモリ処理終了後のアクセス制御テーブル３１０を示した図である。
【図１１】仮想計算機システム１のメモリ分類部２１によるメモリ分類処理を示すフローチャートである。
【図１２】仮想計算機システム１のメモリ割当処理部３５によるメモリ割当処理を示すフローチャートである。
【図１３】仮想計算機システム１の第１メモリ処理部６３による第１メモリ処理を示すフローチャートである。
【図１４】仮想計算機システム１の新規メモリ割当処理部６４による新規メモリ割当処理を示すフローチャートである。
【図１５】仮想計算機システム１の第２メモリ処理部６６による第２メモリ処理を示すフローチャートである。
【図１６】分類値「２」が付されたメモリ領域に、仮想マシンが書込アクセスした時の処理を示す図であり、第２メモリ処理を模式的に示す図である。
【図１７】仮想計算機システム１の第３メモリ処理部６７による第３メモリ処理を示すフローチャートである。
【図１８】分類値「３」が付されたメモリ領域に、仮想マシンが書込アクセスした時の処理を示す図であり、第３メモリ処理を模式的に示す図である。
【図１９】分類値「３」が付されたメモリ領域に、仮想マシンが読出アクセスした時の処理を示す図であり、第３メモリ処理を模式的に示す図である。
【図２０】実施の形態２に係る仮想計算機システム１Ｂのメモリ分類部２１Ｂによるメモリ分類処理を示すフローチャートである。
【図２１】仮想計算機システム１Ｂによる仮想マシン複製時の様子を模式的に表した図である。
【図２２】実施の形態３に係る仮想計算機システム１Ｃの機能構成図である。
【図２３】空きメモリリスト１５の一例を示す図である。
【図２４】ＯＳメモリ処理設定部７１が、仮想マシンＡ１０が起動する際に、アクセス制御テーブル３１０Ｃを更新した後の一例を示す図である。
【図２５】仮想計算機システム１ＣのＯＳメモリ処理設定部７１によるアクセス制御設定処理を示すフローチャートである。
【図２６】仮想計算機システム１Ｃのメモリ割当解放処理を示すフローチャートである。
【図２７】仮想マシン複製時の処理を説明するための図である。
【図２８】コピーオンライト処理を説明するための図である。
【発明を実施するための形態】
【００１０】
≪本発明に係る一形態を得るに至った経緯≫
本発明者は、前述した従来技術に基づき想定される仮想マシンの複製方式について詳細に検討した。
【００１１】
この仮想マシンの複製方式では、信頼していないプログラム（アプリケーションプログラム）を実行する実行環境として、実行中の仮想マシンを複製した新たな仮想マシンを生成する。このとき、ＯＳの基本プログラムやミドルウェア等を同一の物理メモリ領域に置いて、両仮想マシンで共用させる。そして、仮想マシン実行中に両仮想マシンで共用している物理メモリ領域のメモリ内容を一方の仮想マシンが変化させる時に、初めて新たに別の物理メモリ領域を獲得し、両仮想マシンにそれぞれ専用の物理メモリ領域を割り当てるようにする処理（コピーオンライト処理）を行っている。このようにすることで、メモリ使用量を削減することができる。
【００１２】
図２７および図２８は、コピーオンライト処理を説明するための図である。
【００１３】
仮想マシンＡに割り当てられたメモリ領域の論理アドレスは、物理メモリの物理アドレスへ１対１にマッピングされている（図２７(1)）。仮想マシンの複製時に、仮想マシンＡの論理アドレスが複製され、仮想マシンＢが生成される。このようにして、同じ物理アドレスを参照する複数の仮想マシンが存在するようになる（図２７(2)）。
【００１４】
図２８に示す「コピーオンライト処理」では、いずれかの仮想マシンから最初の書込アクセスがあった時に（図２８(1)）、物理メモリの物理メモリ領域を新たに獲得してコピーを作成する（図２８(2)）。そして、その最初に書込アクセスをした仮想マシンが、その新たに獲得された物理メモリ領域に書き込むようにしている（図２８(3)）。すなわち、いずれかの仮想マシンから最初の書込アクセスがあるまでは、物理メモリ領域を両仮想マシンで共用することで、メモリ使用量を削減している。そして、一方の仮想マシンから最初の書込アクセスがあったときは、他方の仮想マシンが書込アクセス前の内容を参照できるようにしている。
【００１５】
本発明者は、以上のような従来技術に基づき想定される仮想マシンの複製方式を詳細に検討した結果、コピーオンライト処理では、仮想マシン複製前の物理メモリ領域の内容が仮想マシンＢにとって必要がない場合は、物理メモリ領域を無駄に確保してしまうという問題がある点を見出した。例えば、仮想マシン複製前の仮想マシンＡにおいて、アプリケーションプログラム等があるメモリ領域を使用しておらず、未使用のメモリ領域となっている場合、そのメモリ領域に対応する物理メモリ領域には意味のある値は入っていない。前述したコピーオンライト処理では、もし一方の仮想マシンが書込アクセスした場合、当該物理メモリ領域の内容が他方の仮想マシンにとって参照する必要がないにも関わらず、物理メモリ領域を使用してその内容を保持し続けることになる。
【００１６】
そして、この点に関して、本発明者は検討を重ねた結果、仮想マシン複製前の物理メモリ領域の内容を判別し、物理メモリ領域の内容が他方の仮想マシンにとって参照する必要がない場合には新たに物理メモリ領域を獲得しないようにすることで従来技術に基づき想定される仮想マシン複製処理よりもメモリ使用量を削減可能であることを見出し、本発明に至った。
【００１７】
以下、本発明に係る仮想計算機システムの一実施の形態について図１〜図１９を参照して説明する。
≪実施の形態１≫
＜概要＞
図１は、実施の形態１に係る仮想計算機システム１による仮想マシン複製時の様子を模式的に表した図である。
【００１８】
仮想計算機システム１は、仮想マシン複製時に、仮想マシンＡのメモリ領域の使用状態に応じて、分類値を付す（図１(2)）。ここでは、例えば、仮想計算機システム１は、未使用のメモリ領域を複製する場合に、そのメモリ領域に対応する物理メモリ領域に分類値「１」を付している。
【００１９】
図２は、分類値「１」が付された物理メモリ領域に、いずれかの仮想マシンが書込アクセスした時の処理を示す図である。
【００２０】
図２に示すように、まず、分類値「１」が付された物理メモリ領域に、仮想マシンＡから最初に書込アクセスがあった時には（図２(1)）、新たに物理メモリ領域を獲得することなく（図２(2)）、仮想マシンＡは、そのままアクセス対象の物理メモリ領域に書き込む（図２(3)）。このとき、仮想計算機システム１は、仮想マシンＢに対しては、仮想的なメモリ領域をアクセスするように設定しておく（図２(3)）。
【００２１】
その後、仮想計算機システム１は、図３に示すように、他方の仮想マシンＢがその仮想的なメモリ領域をアクセスしてきた時に（図３(1)）、はじめて新たに物理メモリ領域を獲得し（図３(2)）、獲得した物理メモリ領域に、アクセスした仮想マシンＢが書き込む（または読み出す）ようにする（図３(3)）。すなわち、仮想マシンＢが物理メモリ領域へアクセスしたときに初めて新たに物理メモリ領域を獲得し、初期化する等して未使用のメモリ領域を用意すれば足りる。
【００２２】
このように、仮想計算機システム１は、仮想マシン複製後、いずれかの仮想マシンから最初に書込アクセスがあった時には、新たに物理メモリ領域を獲得しないので、コピーオンライト処理よりもメモリ使用量を削減することができる。
＜構成＞
次に、仮想計算機システム１の構成について図４〜図１０を参照して説明する。
【００２３】
図４は、実施の形態１に係る仮想計算機システム１の機能構成図である。
【００２４】
仮想計算機システム１は、仮想マシンＡ１０を複製して仮想マシンＢ５０を生成し、両仮想マシンに対するメモリ領域の割当ておよび各仮想マシンの実行を制御するものである。
【００２５】
図４に示すように、仮想計算機システム１は、仮想マシンＡ１０と、仮想マシン複製装置２０と、仮想マシンメモリ管理装置３０と、物理メモリ４０とを備えている。
【００２６】
仮想マシンＡ１０および仮想マシンＢ５０は、ＯＳ、アプリケーションプログラム等が動作する一つの仮想的な計算機として、例えばＡＶ処理、ネットワーク処理等を行うものである。
【００２７】
仮想マシン複製装置２０は、仮想マシンＡの実行中にユーザ等から新たな仮想マシンの起動要求を受けて、仮想マシンＡ１０を複製することにより、新たな仮想マシンＢ５０を生成するものである。なお、仮想マシンは、複数同時に生成されてもよい。
【００２８】
仮想マシンメモリ管理装置３０は、仮想マシンＡ１０および仮想マシンＢ５０から物理メモリ４０へのアクセス要求を受け、該当のメモリ領域へのアクセス制御を行うものである。
【００２９】
物理メモリ４０は、アドレスによりメモリ領域を特定して情報を格納するものである。
【００３０】
以下、仮想マシンＡ１０、仮想マシン複製装置２０および仮想マシンメモリ管理装置３０について説明する。
【００３１】
仮想マシンＡ１０は、アプリケーション１１と、仮想ＯＳ１２とを備える。
【００３２】
アプリケーション１１は、仮想マシンＡ１０において、例えば、ＡＶ処理、ネットワーク処理等を行うためのプログラムである。
【００３３】
仮想ＯＳ１２は、一般的なＯＳと同様な機能を備えており、仮想マシンＡ１０において、アプリケーション１１から要求を受けて、仮想マシンＡ１０内のメモリ使用状態、メモリ領域の割当て、プログラム実行の管理等を行うものである。仮想ＯＳ１２は、ＯＳメモリ管理部１３と、ＯＳメモリ管理テーブル１４とを備える。
【００３４】
ＯＳメモリ管理部１３は、仮想マシンＡ１０に割り当てられたメモリ領域の使用状態の管理を行うものである。メモリ領域の使用状態には、アプリケーションやドライバ等により使用されているかという情報、メモリ領域に格納された情報の参照元の有無が含まれる。
【００３５】
ＯＳメモリ管理テーブル１４は、ＯＳメモリ管理部１３が仮想マシンＡ１０内でのメモリ管理を行う際に用いるテーブルである。
【００３６】
図５は、ＯＳメモリ管理テーブル１４のデータ構成および内容例を示す図である。
【００３７】
ＯＳメモリ管理テーブル１４は、同図に示すように、論理メモリ領域１４ａと、使用カウント１４ｂと、参照元情報１４ｃとを対応付けて構成される情報である。論理メモリ領域１４ａは、仮想マシンＡ１０に割り当てられたメモリ領域の論理アドレスを格納する項目である。なお、論理メモリ領域各々は、例えば、４ＫＢ等のページ単位で管理される。使用カウント１４ｂは、仮想マシンＡ１０内において、当該メモリ領域を使用しているアプリケーションやドライバ等の数を格納する項目である。例えば、この使用カウントが「０」である場合、当該メモリ領域は、未使用であることを示す。参照元情報は、当該メモリ領域の内容が補助記憶装置（例えば、ハードディスク等）にも存在する場合、存在する場所を示す情報（例えば、パス等）を格納する項目である。参照元がない場合は、参照元がないことを示す値「０」を格納する。ＯＳメモリ管理部１３は、例えば、アプリケーション１１から仮想ＯＳ１２へメモリ獲得要求があった場合は、このＯＳメモリ管理テーブル１４を参照し、未使用のメモリ領域（使用カウントが「０」である論理メモリ領域）を探して、アプリケーション１１に対して当該未使用のメモリ領域の割当てを行う。そして、ＯＳメモリ管理部１３は、当該割当てを行ったメモリ領域が使用中であることを識別できるように、当該メモリ領域に対応する使用カウントを「１」加算する。
【００３８】
次に、仮想マシン複製装置２０が備える構成について説明する。
【００３９】
仮想マシン複製装置２０は、メモリ分類部２１と、メモリ複製部２２を備える。
【００４０】
メモリ分類部２１は、分類値テーブル２０１を備え、メモリ分類処理を行うものである。メモリ分類処理は、仮想マシンＡ１０を複製するに先立って、仮想マシンＡ１０が使用しているメモリ領域について、ＯＳメモリ管理テーブル１４に保持されるメモリ領域の使用状態に関する情報と分類値テーブル２０１とに基づいて、当該メモリ領域に後述する分類値を付す処理である。
【００４１】
図６は、分類値テーブル２０１のデータ構成および内容例を示す図である。
【００４２】
分類値テーブル２０１は、分類値２０１ａと使用状態２０１ｂとを対応付けて構成される情報である。分類値２０１ａは、仮想マシンメモリ管理装置３０が行うメモリ割当処理の内容を識別するための値である分類値を格納する項目である。メモリ割当処理２０１ｃは、仮想マシン複製後、いずれかの仮想マシンがアクセスしてきたときの、アクセス対象のメモリ領域を扱う処理である。詳細は、後述する。使用状態２０１ｂは、仮想マシンＡ１０が使用しているメモリ領域の使用状態を示す情報を格納する項目である。メモリ分類部２１は、ＯＳメモリ管理テーブル１４を参照して、メモリ領域の使用状態を判別し、該当する分類値テーブル２０１の使用状態に対応する分類値を定める。例えば、「一の仮想マシン専用」は、一の仮想マシンにのみ割り当てられるべき、あるいは、割り当てられたメモリ領域であることを意味する。「未使用」は、仮想マシンＡ１０において、アプリケーションやドライバ等が使用しておらず、未使用であることを意味する。例えば、ＯＳメモリ管理テーブル１４の使用カウントが「０」となっている場合が「未使用」に該当する。「参照元あり」は、仮想マシンＡ１０が当該メモリ領域に保持して使用していた内容と同じ内容が、当該メモリ領域以外の場所（例えば、ハードディスクやＯＳが別に管理しているメモリ領域等）にも保持されている状態を意味する。よって、当該メモリ領域を仮想マシンＡ１０と仮想マシンＢ５０が共用する扱いとなっているときは、一の仮想マシンが当該メモリ領域に書込アクセスしてきたときでも、他の仮想マシンのために書込アクセス前の内容を保持しておく必要がない。ＯＳメモリ管理テーブル１４の参照元情報が存在する場合や、一の仮想マシンによって書き換えられたメモリ領域の内容を他の仮想マシンが読み出しても問題のない場合が「参照元あり」に該当する。「参照元なし」は、仮想マシンＡ１０が当該メモリ領域に保持して使用していた内容と同じ内容が、当該メモリ領域以外の場所には保持されていない状態を意味する。よって、この使用状態のメモリ領域を仮想マシンＡ１０と仮想マシンＢ５０が共用する扱いとなっているときは、一の仮想マシンが当該メモリ領域に書込アクセスしてきたときには、他の仮想マシンのために書込アクセス前の内容を保持しておく必要がある。ＯＳメモリ管理テーブル１４の参照元情報に値がない場合や、一の仮想マシンによってメモリ領域の内容が書き換えられてはいけない場合が「参照元なし」に該当する。
【００４３】
本実施の形態では、使用状態が「一の仮想マシン専用」に対応する分類値は「０」、「未使用」に対応する分類値は「１」、「参照元あり」に対応する分類値は「２」、「参照元なし」に対応する分類値は「４」としている。分類値「３」および「５」は、メモリ分類部２１が付与する値ではなく、後述するメモリ割当処理の過程で付与される中間的な値である。
【００４４】
また、メモリ分類部２１は、メモリ分類処理において、メモリ領域の使用状態に対応する分類値を取得し、仮想マシンメモリ管理テーブル３１１の分類値に書き込んでいく。
【００４５】
図７は、仮想マシンメモリ管理テーブル３１１のデータ構成および内容例を示す図である。
【００４６】
同図に示すように、仮想マシンメモリ管理テーブル３１１は、物理メモリ領域３１１ａと、使用カウント３１１ｂと、分類値３１１ｃとを対応付けて構成される情報である。物理メモリ領域３１１ａは、物理メモリ４０のメモリ領域を示す物理アドレスを格納する項目である。使用カウント３１１ｂは、当該物理メモリ領域を使用している仮想マシンの数を格納する項目である。使用カウントが「０」の場合、当該物理メモリ領域は、どの仮想マシンからも使用されていないこと意味する。分類値３１１ｃは、仮想マシンメモリ管理装置３０が行うメモリ割当処理の内容を識別するための値である分類値を格納する項目である。メモリ分類部２１は、メモリ分類処理において、仮想マシンＡ１０に割り当てられたメモリ領域のすべてについて、このテーブルの分類値に値を書き込んでいく。分類値が書込まれた仮想マシンメモリ管理テーブル３１１は、後にメモリ割当処理部３５によってメモリ割当処理を行う際に参照される。
【００４７】
さらに、メモリ分類部２１は、メモリ分類処理において、後述するアクセス制御テーブル３１０に、分類値に応じて、アクセス権限を設定する。これは、仮想マシンメモリ管理装置３０が、仮想マシンがアクセスしてきたことおよび当該アクセスのアクセス種別を検知するためである。
【００４８】
図８は、アクセス制御テーブル３１０のデータ構成および内容例を示す図である。
【００４９】
アクセス制御テーブル３１０は、論理メモリ領域と物理メモリ領域との変換（マッピング）を行うためのものであり、また、各物理メモリ領域に割り当てられた仮想マシンおよびそのアクセス権限を設定するものである。
【００５０】
アクセス制御テーブル３１０は、論理メモリ領域３１０ａと、物理メモリ領域３１０ｂと、物理メモリ領域が割り当てられた仮想マシンの情報である仮想マシン３１０ｃと、当該仮想マシンのアクセス権限３１０ｄとが対応付けて構成される情報である。仮想マシンごとにみると、論理メモリ領域と物理メモリ領域は、１対１に対応付けられている。図８の内容例は、仮想マシン複製後の状態を示している。物理メモリ領域３１０ｂの「Ｐ１」、「Ｐ３」、「Ｐ４」は、仮想マシンＡ１０および仮想マシンＢ５０が共用するメモリ領域である。物理メモリ領域３１０ｂの「Ｐ２」、「Ｐ１０」は、一の仮想マシンにのみ割り当てられている。メモリ分類部２１は、仮想マシンがアクセスしてきたことを検知するために、アクセス権限３１０ｄを設定する。後述するアクセス制御部３１は、例えば、アクセス権限３１０ｄに「Ｒ/Ｗ禁止」が設定された場合、仮想マシンが読出アクセスまたは書込アクセスしてきたときに、このアクセス制御テーブル３１０を参照して例外を発生させる。また、アクセス制御部３１は、仮想マシンがアクセスしてきたことおよびアクセス種別を検知することができる。
【００５１】
メモリ複製部２２は、メモリ分類部２１からの要求を受け、後述するメモリ割当解放部３４に対して物理メモリ領域の割当てを依頼し、物理メモリ領域を獲得するものである。また、メモリ複製部２２は、獲得した物理メモリ領域に対して、指定されたメモリ領域のデータをコピーし、指定された仮想マシンが新たに獲得した物理メモリ領域へアクセスするようにアクセス制御テーブル３１０に設定する。すなわち、新たに獲得した物理メモリ領域と仮想マシンとをこのテーブルで対応付ける。さらに、メモリ複製部２２は、仮想マシンメモリ管理テーブル３１１における当該新たに獲得した物理メモリ領域に対応する分類値に「０」を設定し、使用カウントに「１」を加える。
【００５２】
次に、仮想マシンメモリ管理装置３０が備える構成について説明する。
【００５３】
仮想マシンメモリ管理装置３０は、アクセス制御部３１と、アクセス制御テーブル３１０と、アクセス検知部３２と、メモリ割当処理部３５と、仮想マシンメモリ管理テーブル３１１と、メモリ割当解放部３４とを備える。
【００５４】
アクセス制御部３１は、仮想マシン複製後、仮想マシンＡ１０または仮想マシンＢ５０からの物理メモリ領域へのアクセスを監視するものである。また、アクセス制御部３１は、書込アクセス、読出アクセスまたは両方のアクセスの監視設定がされている場合、その監視対象のアクセスがあったときに、アクセス検知部３２に通知するように構成されている。その際、アクセス制御部３１は、書込アクセスか読出アクセスかのアクセス種別、アクセスした仮想マシンの情報およびアクセスする対象の物理メモリ領域の情報をアクセス検知部３２へ渡す。
【００５５】
アクセス検知部３２は、アクセス制御部３１からアクセス種別、仮想マシンの情報および物理メモリ領域の情報を受け取ると、後述するメモリ割当処理部３５にメモリ割当処理要求を行うものである。
【００５６】
メモリ割当解放部３４は、メモリ分類部２１、メモリ複製部２２および後述するメモリ割当処理部３５から物理メモリ領域の割当要求または指定した物理メモリ領域の解放要求を受けて、仮想マシンＡ１０および仮想マシンＢ５０に対してそれぞれ物理メモリ領域の割当処理または解放処理を行うものである。メモリ割当解放部３４は、割当要求を受けると、仮想マシンメモリ管理テーブル３１１（図７参照）を参照して、使用していない物理メモリ領域（つまり、使用カウントが「０」の物理メモリ領域）を検索し、該当する物理メモリ領域に対応する使用カウントを「１」加算することにより、当該物理メモリ領域が使用中であることをセットする。また、メモリ割当解放部３４は、当該割当要求の要求元へ当該物理メモリ領域を割り当てる。メモリ割当解放部３４は、解放要求を受けると、要求時に指定された物理メモリ領域について、対応する仮想マシンメモリ管理テーブル３１１の使用カウントを「１」減じる。
【００５７】
メモリ割当処理部３５は、アクセス検知部３２からメモリ割当処理要求を受けると、メモリ分類部２１により付された分類値に基づき、必要に応じて、仮想マシンへのメモリ割当てを行うものである。具体的には、メモリ割当処理部３５は、仮想マシンメモリ管理テーブル３１１を参照し、仮想マシンがアクセスしてきた物理メモリ領域に対応する分類値を判別し、当該分類値に応じて、メモリ割当処理を行う。メモリ割当処理部３５は、必要に応じてメモリ割当解放部３４に対して新たな物理メモリ領域の割当てを依頼する。また、メモリ割当処理部３５は、必要に応じて、アクセス制御テーブル３１０の設定を行う。さらに、メモリ割当処理部３５は、必要に応じて、仮想マシンメモリ管理テーブル３１１の分類値を変更する。
【００５８】
次に、メモリ割当処理部３５の構成について説明する。
【００５９】
図９は、メモリ割当処理部３５の機能構成図である。
【００６０】
メモリ割当処理部３５は、同図に示すように、判別部６１と、コピーオンライト処理部６２と、第１メモリ処理部６３と、新規メモリ割当処理部６４と、メモリ初期化処理部６５と、第２メモリ処理部６６と、第３メモリ処理部６７とを備える。
【００６１】
判別部６１は、物理メモリ領域に付された分類値に基づいて、当該物理メモリ領域に対する処理を判別するものである。判別部６１は、アクセス検知部３２から、仮想マシンのアクセスについて書込アクセスか読出アクセスかのアクセス種別、アクセスした仮想マシンの情報およびアクセス対象の物理メモリ領域の情報を受け取る。判別部６１は、仮想マシンメモリ管理テーブル３１１を参照して、受け取った物理メモリ領域に対応する分類値を取得する。判別部６１は、分類値が「１」のときは第１メモリ処理部６３へ、分類値が「２」のときは第２メモリ処理部６６へ、分類値が「３」のときは第３メモリ処理部６７へ、分類値が「４」のときはコピーオンライト処理部６２へ、分類値が「５」のときは新規メモリ割当処理部６４へ、それぞれ処理を依頼する。
【００６２】
コピーオンライト処理部６２は、コピーオンライト処理を行うものである。コピーオンライト処理は、前述した処理（図２８参照）であり、分類値「４」に対応する処理である。分類値「４」が付されたメモリ領域のアクセス権限は、メモリ分類部２１によって、「Ｗ禁止」に設定されている。したがって、仮想マシンからの書込アクセスが検知されたときのみ判別部６１からコピーオンライト処理部６２へ処理の依頼が来ることとなる。コピーオンライト処理部６２は、判別部６１から呼び出され、メモリ割当解放部３４に対して新たな物理メモリ領域の割当てを依頼し、獲得した物理メモリ領域に対して、アクセス対象の物理メモリ領域の内容をコピーする。また、コピーオンライト処理部６２は、新たに獲得した物理メモリ領域をアクセスしてきた仮想マシンに割り当てるようにアクセス制御テーブル３１０に設定し、アクセス監視を解除する。さらに、コピーオンライト処理部６２は、仮想マシンメモリ管理テーブル３１１に対して、新たに獲得した物理メモリ領域に対応する使用カウントを「１」、分類値を「０」に設定する。コピーオンライト処理部６２は、元の物理メモリ領域についてもアクセス監視を解除し、仮想マシンメモリ管理テーブル３１１に対して、元の物理メモリ領域に対応する使用カウントを「１」減じ、分類値を「０」に設定する。
【００６３】
第１メモリ処理部６３は、第１メモリ処理を行うものである。第１メモリ処理は、前述した＜概要＞の項目で示した処理（図２参照）であり、分類値「１」に対応する処理である。第１メモリ処理部６３は、判別部６１から呼び出され、アクセスしてきた仮想マシンに対してのアクセス監視を解除するようにアクセス制御テーブル３１０に設定する。また、第１メモリ処理部６３は、仮想マシンメモリ管理テーブル３１１に対して、アクセス対象の物理メモリ領域に対応する使用カウントを「１」、分類値を「０」に設定する。それとともに、第１メモリ処理部６３は、当該物理メモリ領域を参照するように設定されている他の仮想マシンに対して、新規メモリ割当領域４１にアクセスするようにアクセス制御テーブル３１０に設定する。
【００６４】
図１０は、仮想マシン複製後、仮想マシンＡ１０から最初に書込アクセスがあった場合における第１メモリ処理終了後のアクセス制御テーブル３１０を示した図である。なお、図８は、仮想マシン複製後、第１メモリ処理開始前のアクセス制御テーブル３１０である。
【００６５】
図１０に示すように、仮想マシンＡ１０には、物理メモリ領域「Ｐ４」がそのまま割り当てられ、アクセス監視は解除されている。仮想マシンＢ５０には、新規メモリ割当領域４１である「Ｐｋ」が割り当てられ、アクセス監視は「Ｒ/Ｗ禁止」が設定されている。物理メモリ領域「Ｐｋ」は、仮想マシンメモリ管理テーブル３１１において、分類値「５」に設定されている。
【００６６】
新規メモリ割当領域４１は、特定のメモリ領域を指すものであり、仮想マシンからそのメモリ領域へのアクセスについては、アクセス制御部３１がそのアクセスを検知し、アクセス検知部３２へ通知する。この新規メモリ割当領域４１に対応する仮想マシンメモリ管理テーブル３１１の分類値は「５」としておく。なお、新規メモリ割当領域４１に対して、現実に存在する物理メモリ領域を対応付ける必要は必ずしもなく、仮想的なメモリ領域を定義する（つまり、アクセス制御テーブル３１０の物理メモリ領域３１０ｂに識別子等を設定しておき、その識別子が仮想マシンメモリ管理テーブル３１１において分類値「５」と対応づけられている）だけでよい。すなわち、仮想マシンがアクセスしたときに、分類値「５」に対応する新規メモリ割当処理を実行させることができればよい。
【００６７】
新規メモリ割当処理部６４は、新規メモリ割当処理を行うものである。新規メモリ割当処理は、前述した＜概要＞の項目で示した処理（図３参照）であり、分類値「５」に対応する処理である。新規メモリ割当処理部６４は、判別部６１から呼び出され、メモリ割当解放部３４に対して新たな物理メモリ領域の割当てを依頼し、獲得した物理メモリ領域に対して、後述するメモリ初期化処理部６５を呼び出して、初期値を書き込ませる。新規メモリ割当処理部６４は、新たに獲得した物理メモリ領域を、アクセスしてきた仮想マシンに割り当てるようにアクセス制御テーブル３１０に設定する。また、新規メモリ割当処理部６４は、新たに獲得した物理メモリ領域に対するアクセス監視を解除する。さらに、新規メモリ割当処理部６４は、仮想マシンメモリ管理テーブル３１１に対して、新たに獲得した物理メモリ領域に対応する使用カウントを「１」、分類値を「０」に設定する。
【００６８】
メモリ初期化処理部６５は、新規メモリ割当処理部６４から呼び出され、指定された物理メモリ領域について、予め定められた一定のデータ列（例えば、「００…０」のようなオールゼロ等）で初期化処理を行う。
【００６９】
第２メモリ処理部６６は、第２メモリ処理を行うものである。第２メモリ処理は、分類値「２」に対応する処理である。ここで、第２メモリ処理について説明する。分類値「２」は、仮想マシン複製時のメモリ領域の使用状態が「参照元あり」として分類されたものである。これは、仮想マシン複製前にアプリケーション等が当該メモリ領域を使用していたものであり、仮想マシン複製後において、一の仮想マシンから最初に読出アクセスがあった後、他の仮想マシンからも読出アクセスがあることが考えられる。読出アクセスがあるごとに例外を発生させると、仮想マシンシステムの性能の観点から好ましくないため、一の仮想マシンから最初に読出アクセスがあった物理メモリ領域は、読出アクセスによって例外が発生しないコピーオンライト処理の対象とする。すなわち、第２メモリ処理部６６は、仮想マシンメモリ管理テーブル３１１に対して、アクセス対象の物理メモリ領域に対応する分類値を「４」に設定する。また、第２メモリ処理部６６は、アクセスしてきた仮想マシンに対しての読出アクセス監視を解除するようにアクセス制御テーブル３１０に設定する。
【００７０】
一方、仮想マシン複製後において、一の仮想マシンから最初に書込アクセスがあったときには、第１メモリ処理と同様に、コピーオンライト処理よりもさらにメモリ使用量を削減する処理を行う。すなわち、第２メモリ処理部６６は、仮想マシンメモリ管理テーブル３１１に対して、アクセス対象の物理メモリ領域に対応する分類値を「３」に設定する。また、第２メモリ処理部６６は、アクセスしてきた仮想マシンに対しての読出／書込アクセス監視を解除するようにアクセス制御テーブル３１０に設定する。
【００７１】
第３メモリ処理部６７は、第３メモリ処理を行うものである。第３メモリ処理は、分類値「３」に対応する処理である。第３メモリ処理は、仮想マシンが読出アクセスまたは書込アクセスしてきたときに、メモリ割当解放部３４に対して新たな物理メモリ領域の割当てを依頼し、獲得した物理メモリ領域に対して、アクセス対象の物理メモリ領域の内容をコピーする。また、第３メモリ処理部６７は、新たに獲得した物理メモリ領域をアクセスしてきた仮想マシンに割り当てるようにアクセス制御テーブル３１０に設定し、アクセス監視も解除する。さらに、第３メモリ処理部６７は、仮想マシンメモリ管理テーブル３１１に対して、新たに獲得した物理メモリ領域に対応する使用カウントを「１」、分類値を「０」に設定する。さらに、第３メモリ処理部６７は、仮想マシンメモリ管理テーブル３１１に対して、コピー元の物理メモリ領域に対応する使用カウントを「１」減じる。「１」減じた結果、当該使用カウントが「１」である場合には、分類値を「０」に設定する。
＜動作＞
以下、仮想計算機システム１の動作について、図１１〜図１９（構成は適宜図１および図９）を参照して説明する。
＜メモリ分類処理＞
図１１は、仮想計算機システム１のメモリ分類部２１によるメモリ分類処理を示すフローチャートである。
【００７２】
メモリ分類処理は、複製元の仮想マシンのメモリ領域の使用状態に応じて、メモリ領域ごとに分類値を付す処理である。メモリ分類部２１は、仮想マシンを複製する際に、仮想マシンＡ１０に割り当てられた各々のメモリ領域に対してこの処理を行う。
【００７３】
メモリ分類部２１は、該当のメモリ領域についてコピー処理が必要か否かを判断する（ステップＳ１１）。ここで、コピー処理について説明する。仮想マシンＡ１０に割り当てられたメモリ領域が一の仮想マシンにのみ割り当てられる必要がある場合は、仮想マシン複製後、仮想マシンＡ１０と仮想マシンＢ５０が当該メモリ領域に対応する物理メモリ領域を共用しないようにする必要がある。そのため、仮想マシンＡ１０および仮想マシンＢ５０のそれぞれに対して物理メモリ領域を用意するため、新たに物理メモリ領域を獲得して、当該物理メモリ領域に、仮想マシンＡ１０に割り当てられていたメモリ領域の内容をコピーする。一の仮想マシンにのみ割り当てられる必要があるか否かは、メモリ領域ごとに予め定められている。
【００７４】
コピー処理が必要である場合は（ステップＳ１１・Ｙｅｓ）、メモリ分類部２１は、分類値を「０」にし（ステップＳ１２）、仮想マシンメモリ管理テーブル３１１の分類値に「０」を設定し（ステップＳ１９）、当該物理メモリ領域のコピー処理をメモリ複製部２２に依頼する（ステップＳ２１）。
【００７５】
一方、コピー処理が必要でない場合は（ステップＳ１１・Ｎｏ）、メモリ分類部２１は、ＯＳメモリ管理テーブル１４（図５参照）を参照する（ステップＳ１３）。そして、メモリ分類部２１は、当該メモリ領域の使用カウントが「０」か否かを判定する（ステップＳ１４）。
【００７６】
使用カウントが「０」である場合は（ステップＳ１４・Ｙｅｓ）、メモリ分類部２１は、分類値を「１」にする（ステップＳ１５）。
【００７７】
一方、使用カウントが「０」でない場合は（ステップＳ１４・Ｎｏ）、メモリ分類部２１は、当該メモリ領域の参照元情報が存在するか否かを判定する（ステップＳ１６）。
【００７８】
参照元情報が存在する場合は（ステップＳ１６・Ｙｅｓ）、メモリ分類部２１は、分類値を「２」にする（ステップＳ１８）。
【００７９】
一方、参照元情報が存在しない場合は（ステップＳ１６・Ｎｏ）、メモリ分類部２１は、分類値を「４」にする（ステップＳ１７）。
【００８０】
ステップＳ１９において、メモリ分類部２１は、仮想マシンメモリ管理テーブル３１１（図７参照）の分類値３１１ｃに値を書き込む。次に、メモリ分類部２１は、該当のメモリ領域に対して、分類値を検査する（ステップＳ２０）。分類値が「４」の場合は、メモリ分類部２１は、該当のメモリ領域に対して、書込アクセスを監視するようにアクセス制御テーブル３１０に設定する（ステップＳ２２）。分類値が「１」または「２」の場合は、メモリ分類部２１は、該当のメモリ領域に対して、読出アクセスおよび書込アクセスを監視するようにアクセス制御テーブル３１０に設定する（ステップＳ２３）。以上でメモリ分類処理は、終了する。
【００８１】
メモリ分類部２１は、このメモリ分類処理を仮想マシンＡ１０に割り当てられたすべてのメモリ領域に対して行う。
＜メモリ割当処理＞
図１２は、仮想計算機システム１のメモリ割当処理部３５によるメモリ割当処理を示すフローチャートである。
【００８２】
メモリ割当処理は、仮想マシン複製後、いずれかの仮想マシンから物理メモリ４０へのアクセスがあったときに開始する。具体的には、メモリ割当処理部３５がアクセス検知部３２からメモリ割当処理要求を受け取ったときに開始する。
【００８３】
判別部６１は、仮想マシンメモリ管理テーブル３１１（図７参照）を参照して、アクセス対象の物理メモリ領域に対応する分類値を読み込む（ステップＳ２１）。次に、判別部６１は、当該分類値を判定し（ステップＳ２２）、分類値が「１」の場合は（ステップＳ２２・分類値１）、第１メモリ処理部６３が、第１メモリ処理を行う（ステップＳ２３）。分類値が「２」の場合は（ステップＳ２２・分類値２）、第２メモリ処理部６６が、第２メモリ処理を行う（ステップＳ２４）。分類値が「３」の場合は（ステップＳ２２・分類値３）、第３メモリ処理部６７が、第３メモリ処理を行う（ステップＳ２５）。分類値が「４」の場合は（ステップＳ２２・分類値４）、コピーオンライト処理部６２が、コピーオンライト処理を行う（ステップＳ２６）。分類値が「５」の場合は（ステップＳ２２・分類値５）、新規メモリ割当処理部６４が、新規メモリ割当処理を行う（ステップＳ２７）。
＜第１メモリ処理（分類値「１」）＞
図１３は、仮想計算機システム１の第１メモリ処理部６３による第１メモリ処理を示すフローチャートである。
【００８４】
第１メモリ処理は、判別部６１から、アクセスした仮想マシンの情報およびアクセスする対象の物理メモリ領域の情報とともに、第１メモリ処理の依頼がきたときに、開始される。
【００８５】
第１メモリ処理部６３は、アクセスしてきた仮想マシンに対してのアクセス監視を解除するようにアクセス制御テーブル３１０（図８参照）に設定する（ステップＳ２３１）。これは、アクセス対象のメモリ領域が、以降、アクセスしてきた仮想マシン専用のメモリ領域となるため、アクセスを検知する必要がないからである。次に、第１メモリ処理部６３は、仮想マシンメモリ管理テーブル３１１に対して、アクセス対象の物理メモリ領域に対応する使用カウントを「１」、分類値を「０」に設定する（ステップＳ２３２）。次に、第１メモリ処理部６３は、当該物理メモリ領域を参照するように設定されている他の仮想マシンに対して、新規メモリ割当領域４１にアクセスするようにアクセス制御テーブル３１０に設定する（ステップＳ２３３）。以上で第１メモリ処理は、終了する。
【００８６】
図２は、分類値「１」が付された物理メモリ領域に、いずれかの仮想マシンが書込アクセスした時の処理を示す図であり、第１メモリ処理を模式的に示す図である。
【００８７】
図２に示すように、分類値「１」が付された物理メモリ領域に、一の仮想マシンから最初に書込アクセスがあった時には、新たに物理メモリ領域を獲得することなく、アクセスした仮想マシンは、そのままアクセス対象の物理メモリ領域に書き込む。このとき、仮想計算機システム１は、他の仮想マシンに対しては、新規メモリ割当領域４１をアクセスするように設定しておく。新規メモリ割当領域４１の分類値は「５」である。
＜新規メモリ割当処理（分類値「５」）＞
図１４は、仮想計算機システム１の新規メモリ割当処理部６４による新規メモリ割当処理を示すフローチャートである。
【００８８】
新規メモリ割当処理は、判別部６１から、アクセスしてきた仮想マシンの情報とともに、新規メモリ割当処理の依頼がきたときに、開始される。
【００８９】
新規メモリ割当処理部６４は、メモリ割当解放部３４に依頼して新たな物理メモリ領域を獲得する（ステップＳ２７１）。次に、新規メモリ割当処理部６４は、メモリ初期化処理部６５を呼び出して、獲得した物理メモリ領域を初期化する（ステップＳ２７２）。新規メモリ割当処理部６４は、新たに獲得した物理メモリ領域を、アクセスしてきた仮想マシンに割り当てるようにアクセス制御テーブル３１０に設定する（ステップＳ２７３）。つまり、アクセス制御テーブル３１０の物理メモリ領域３１０ｂの新規メモリ割当領域４１が設定されていたところに、新たに獲得した物理メモリ領域のアドレスをセットする。新規メモリ割当処理部６４は、仮想マシンメモリ管理テーブル３１１に対して、新たに獲得した物理メモリ領域に対応する使用カウントを「１」、分類値を「０」に設定する（ステップＳ２７４）。以上で新規メモリ割当処理は、終了する。
【００９０】
図３は、分類値「５」が付されたメモリ領域に、仮想マシンが書込アクセスした時の処理を示す図であり、新規メモリ割当処理を模式的に示す図である。
【００９１】
図３に示すように、他の仮想マシンが新規メモリ割当領域４１にアクセスしてきた時に、仮想計算機システム１は、新たに物理メモリ領域を獲得し、獲得した物理メモリ領域に当該他の仮想マシンが書き込むようにしている。
＜第２メモリ処理（分類値「２」）＞
図１５は、仮想計算機システム１の第２メモリ処理部６６による第２メモリ処理を示すフローチャートである。
【００９２】
第２メモリ処理は、判別部６１から、仮想マシンのアクセスについて書込アクセスか読出アクセスかのアクセス種別、アクセスした仮想マシンの情報およびアクセスする対象の物理メモリ領域の情報とともに、第２メモリ処理の依頼がきたときに、開始される。
【００９３】
まず、第２メモリ処理部６６は、仮想マシンからのアクセス種別を判定する（ステップＳ２４１）。
【００９４】
読出アクセスの場合は（ステップＳ２４１・読出アクセス）、第２メモリ処理部６６は、仮想マシンメモリ管理テーブル３１１に対して、アクセス対象の物理メモリ領域に対応する分類値を「４」に設定する（ステップＳ２４２）。次に、第２メモリ処理部６６は、アクセスしてきた仮想マシンに対しての読出アクセス監視を解除するようにアクセス制御テーブル３１０に設定する（ステップＳ２４３）。
【００９５】
一方、書込アクセスの場合は（ステップＳ２４１・書込アクセス）、第２メモリ処理部６６は、仮想マシンメモリ管理テーブル３１１に対して、アクセス対象の物理メモリ領域に対応する分類値を「３」に設定する（ステップＳ２４４）。次に、第２メモリ処理部６６は、アクセスしてきた仮想マシンに対しては、読出／書込アクセス監視を解除するように、また、他の仮想マシンに対しては、読出／書込アクセス監視をするように、アクセス制御テーブル３１０に設定する（ステップＳ２４５）。以上で第２メモリ処理は、終了する。
【００９６】
図１６は、分類値「２」が付されたメモリ領域に、仮想マシンが書込アクセスした時の処理を示す図であり、第２メモリ処理を模式的に示す図である。
【００９７】
図１６に示すように、分類値「２」が付された物理メモリ領域に、一の仮想マシンから最初に書込アクセスがあった時には、新たに物理メモリ領域を獲得することなく、アクセスした仮想マシンは、そのままアクセス対象の物理メモリ領域に書き込む。そして、当該物理メモリ領域の分類値は「３」に変更する。図示していないが、一の仮想マシンから最初に読出アクセスがあった時には、同様に、新たに物理メモリ領域を獲得することなく、アクセスした仮想マシンは、そのままアクセス対象の物理メモリ領域から読み出す。そして、当該物理メモリ領域の分類値は「４」に変更する。
＜第３メモリ処理（分類値「３」）＞
図１７は、仮想計算機システム１の第３メモリ処理部６７による第３メモリ処理を示すフローチャートである。
【００９８】
第３メモリ処理は、判別部６１から、アクセスした仮想マシンの情報およびアクセスする対象の物理メモリ領域の情報とともに、第３メモリ処理の依頼がきたときに、開始される。
【００９９】
第３メモリ処理部６７は、仮想マシンが読出アクセスまたは書込アクセスしてきたときに、メモリ割当解放部３４に依頼して、新たな物理メモリ領域を獲得する（ステップＳ２５１）。次に、第３メモリ処理部６７は、獲得した物理メモリ領域に対して、アクセス対象の物理メモリ領域の内容をコピーする（ステップＳ２５２）。次に、第３メモリ処理部６７は、新たに獲得した物理メモリ領域をアクセスしてきた仮想マシンに割り当てるようにアクセス制御テーブル３１０に設定する（ステップＳ２５３）。次に、第３メモリ処理部６７は、仮想マシンメモリ管理テーブル３１１に対して、新たに獲得した物理メモリ領域に対応する使用カウントを「１」、分類値を「０」に設定する（ステップＳ２５４）。次に、第３メモリ処理部６７は、仮想マシンメモリ管理テーブル３１１に対して、コピー元の物理メモリ領域に対応する使用カウントを「１」減じる（ステップＳ２５５）。第３メモリ処理部６７は、使用カウントを「１」減じた結果、当該使用カウントが「１」である場合には、分類値を「０」に設定する（ステップＳ２５７）。以上で第３メモリ処理は、終了する。
【０１００】
図１８は、分類値「３」が付されたメモリ領域に、仮想マシンが書込アクセスした時の処理を示す図であり、第３メモリ処理を模式的に示す図である。
【０１０１】
図１８に示すように、他の仮想マシンが分類値「３」の物理メモリ領域に書込アクセスしてきた時に、仮想計算機システム１は、新たに物理メモリ領域を獲得し、獲得した物理メモリ領域に、アクセス対象の物理メモリ領域の内容をコピーする。そして、仮想計算機システム１は、新たに獲得した物理メモリ領域に、アクセスした仮想マシンが書き込むようにしている。
【０１０２】
図１９は、分類値「３」が付されたメモリ領域に、仮想マシンが読出アクセスした時の処理を示す図であり、第３メモリ処理を模式的に示す図である。
【０１０３】
図１９に示すように、他の仮想マシンが分類値「３」の物理メモリ領域に読出アクセスしてきた時に、仮想計算機システム１は、新たに物理メモリ領域を獲得し、獲得した物理メモリ領域に、アクセス対象の物理メモリ領域の内容をコピーする。そして、仮想計算機システム１は、当該物理メモリ領域からその内容を読み出すようにしている。なお、この場合は、一の仮想マシンによって書き換えられたメモリ領域の内容を他の仮想マシンが読み出しても問題のない場合である。
【０１０４】
以上、実施の形態１によると、一の仮想マシンを複製して他の仮想マシンを生成する際に、未使用のメモリ領域や参照元が存在するメモリ領域に対して、いずれかの仮想マシンから最初に書込アクセスがあったときには、新たに物理メモリ領域を獲得することがないので、コピーオンライト処理よりもさらにメモリ使用量を削減することができる。
【０１０５】
また、参照元が存在するメモリ領域に対して読出／書込アクセスを監視している場合において、一の仮想マシンから最初に読出アクセスがあった場合は、その後の他の仮想マシンから当該メモリ領域へのアクセスに対しては、コピーオンライト処理を行うこととしているので、一の仮想マシンから最初に読出アクセスがあった後、他の仮想マシンから読出アクセスがあっても、例外が発生せず、仮想計算機システムの性能面を改善することができる。
≪実施の形態２≫
次に、本発明の実施の形態２について、図２０および図２１を参照して説明する。
＜概要＞
実施の形態１に係る仮想計算機システム１は、メモリ分類処理のステップＳ１４において（図１１参照）、使用カウントが「０」である場合は（ステップＳ１４・Ｙｅｓ）、分類値を「１」にすることとしている（ステップＳ１５）。すなわち、仮想マシン複製前のメモリ領域の使用状態が未使用であるときでも、物理メモリ領域は解放せずに仮想マシンＡ１０と仮想マシンＢ５０が共用するようにしている。一方、実施の形態２に係る仮想計算機システム１Ｂは、メモリ分類処理において、メモリ領域の使用状態が未使用であると判別したときは、そのメモリ領域に対応する物理メモリ領域を解放するようにする。これにより、さらにメモリ使用量を削減することができる。
＜構成＞
仮想計算機システム１Ｂの構成は、仮想計算機システム１の構成と同様である。なお、仮想計算機システム１の構成と同一の構成には同一の符号を付して、重複した説明は省略する。
＜動作＞
以下、仮想計算機システム１Ｂの動作について、図２０および図２１を参照して説明する。
【０１０６】
図２０は、仮想計算機システム１Ｂのメモリ分類部２１Ｂによるメモリ分類処理の動作を示すフローチャートである。実施の形態１と異なる点のみを説明する。
【０１０７】
ステップＳ３１〜３４は、ステップＳ１１〜１４（図１１参照）と同様である。
【０１０８】
ステップＳ３４において、使用カウントが「０」である場合は（ステップＳ３４・Ｙｅｓ）、ステップＳ３５において、メモリ分類部２１Ｂは、メモリ割当解放部３４に依頼して、当該メモリ領域に対応する物理メモリ領域を解放する。さらに、メモリ分類部２１Ｂは、当該メモリ領域に対して分類値「５」が付された新規メモリ割当領域４１が対応するようにアクセス制御テーブル３１０に設定する。そして、メモリ分類処理は、終了する。
【０１０９】
図２１は、仮想計算機システム１Ｂによる仮想マシン複製時の様子を模式的に表した図である。
【０１１０】
仮想計算機システム１Ｂは、仮想マシン複製時に、メモリ領域の使用状態が未使用であると判別したときは、そのメモリ領域に対応する物理メモリ領域を解放するようにする。そして、当該メモリ領域に対して分類値「５」が付された新規メモリ割当領域４１が対応するようにしておく。その後、いずれかの仮想マシンが当該新規メモリ割当領域４１にアクセスしてきたときは、図３に示すように、仮想計算機システム１Ｂは、新規メモリ割当処理を行う。
【０１１１】
以上、実施の形態２によると、仮想マシン複製時に、仮想マシンが未使用であるメモリ領域に対応する物理メモリ領域をすべて解放することができる。
≪実施の形態３≫
次に、本発明の実施の形態３について、図２２〜図２６を参照して説明する。
＜概要＞
一般に、仮想マシンにおけるアプリケーション等が論理メモリ領域を使用しなくなり、仮想ＯＳがその論理メモリ領域を解放する（例えば、アプリケーションと論理メモリ領域とを対応付けたメモリ管理用の情報を削除する等）と、当該論理メモリ領域は、当該仮想マシンにおける未使用の論理メモリ領域を管理する空きメモリリストにつなげられる。しかしながら、当該論理メモリ領域に対応する物理メモリ領域は解放されるわけではなく、当該仮想マシンに割り当てられたままとなっている。
【０１１２】
実施の形態３に係る仮想計算機システム１Ｃは、仮想ＯＳが論理メモリ領域を解放するために、空きメモリリストにアクセスしたことを検知した時に、当該論理メモリ領域に対応する物理メモリ領域の解放を行うことで、仮想マシンに対する物理メモリ領域の解放を即時に行うことができ、物理メモリ領域の使用効率を向上することができるようにしたものである。
＜構成＞
次に、仮想計算機システム１Ｃの構成について図２２を参照して説明する。
【０１１３】
図２２は、実施の形態３に係る仮想計算機システム１Ｃの機能構成図である。なお、仮想計算機システム１の構成と同一の構成には同一の符号を付して、重複した説明は省略する。
【０１１４】
仮想計算機システム１Ｃは、仮想マシンＡ１０Ｃにおける空きメモリリスト１５と、仮想マシン起動装置７０と、仮想マシンメモリ管理装置３０Ｃにおけるメモリリスト処理部６８と、物理メモリ４０Ｃにおけるメモリリスト監視領域４２とを備える。
【０１１５】
空きメモリリスト１５は、仮想マシン内の空きメモリ領域を管理するための管理情報であり、例えば、仮想マシンＡ１０Ｃの論理メモリ領域のうち仮想マシンＡ１０Ｃ内において未使用であるすべての論理メモリ領域各々を特定するための情報（アドレス等）を含ませたリストである。
【０１１６】
図２３は、空きメモリリスト１５の一例を示す図である。このリストの各データ「１」、「２」、…、「ｎ」は、仮想マシンＡ１０Ｃ内において未使用である論理メモリ領域のアドレスである。本実施の形態では、ＯＳメモリ管理部１３は、論理メモリ領域の割当てまたは解放をするときは、必ず空きメモリリスト１５にアクセスするようになっているものとする。ＯＳメモリ管理部１３は、アプリケーション１１から論理メモリ領域の解放要求があると、空きメモリリスト１５にアクセスし、アプリケーション１１が指定した論理メモリ領域を空きメモリリスト１５に含ませる。また、ＯＳメモリ管理部１３は、アプリケーション１１から論理メモリ領域の割当要求があると、空きメモリリスト１５にアクセスし、空きメモリリスト１５から未使用の論理メモリ領域を取得し、アプリケーション１１に当該論理メモリ領域を割り当てる。
【０１１７】
仮想マシン起動装置７０は、ＯＳメモリ処理設定部７１を備える。ＯＳメモリ処理設定部７１は、仮想マシンＡ１０Ｃが起動する際に呼び出され、アクセス制御設定処理を行うものである。アクセス制御設定処理は、ＯＳメモリ処理設定部７１が、空きメモリリスト１５が格納されている所定の論理メモリ領域について、そのメモリ領域へのアクセスがメモリリスト監視領域４２へのアクセスとなるように、アクセス制御テーブル３１０Ｃに設定することにより行われる。
【０１１８】
図２４は、ＯＳメモリ処理設定部７１が、仮想マシンＡ１０Ｃが起動する際に、アクセス制御テーブル３１０Ｃを更新した後の一例を示す図である。
【０１１９】
論理メモリ領域３１０ａ「空きメモリリストの領域」は、例えば、空きメモリリスト１５の先頭の論理アドレスである。この論理アドレスへのアクセスがメモリリスト監視領域４２へのアクセスとなるように、対応する物理メモリ領域３１０ｂに「メモリリスト監視領域」が設定されている。
【０１２０】
メモリリスト監視領域４２は、新規メモリ割当領域４１と同様、物理メモリ４０内の一部として存在する。仮想マシンからこのメモリリスト監視領域４２へのアクセスについては、図２４に示すように、アクセス権限に「Ｒ/Ｗ禁止」が設定されており、アクセスが監視される。アクセス制御部３１が、このメモリリスト監視領域４２へのアクセスを検知すると、アクセス検知部３２へ通知する。このとき、アクセス検知部３２は、メモリ割当処理部３５Ｃの後述するメモリリスト処理部６８を呼び出すように構成されている。また、アクセス制御部３１は、仮想マシンから空きメモリリスト１５へのアクセス情報を受け取り、この情報をアクセス検知部３２へ渡す。この空きメモリリスト１５へのアクセス情報は、仮想マシンがメモリ領域を解放しようとしているのか、割当てしようとしているのかを判断することができる情報である。例えば、アドレス値および空きメモリリスト１５につなぐ処理を要求する情報であるときは、仮想マシンがメモリ領域を解放しようとしていると判断する。一方、空きメモリリスト１５からメモリ領域を取得する処理を要求する情報であるときは、仮想マシンがメモリ領域を割当てしようとしていると判断する。
【０１２１】
メモリリスト処理部６８は、アクセス検知部３２から空きメモリリスト１５へのアクセス情報を受け取り、仮想マシンがメモリ領域を解放しようとしているのか、または割当てしようとしているのかを判断するものである。メモリリスト処理部６８は、仮想マシンがメモリ領域を解放しようとしていると判断すると、解放しようとしている論理メモリ領域に対応する物理メモリ領域をメモリ割当解放部３４に渡し、当該物理メモリ領域の解放を指示する。メモリリスト処理部６８は、仮想マシンがメモリ領域を割当てしようとしていると判断すると、メモリ割当解放部３４に物理メモリ領域の割当てを指示する。
＜動作＞
以下、仮想計算機システム１Ｃの動作について、図２５および図２６（構成は適宜図２２）を参照して説明する。
【０１２２】
図２５は、仮想計算機システム１ＣのＯＳメモリ処理設定部７１によるアクセス制御設定処理を示すフローチャートである。
【０１２３】
この処理は、仮想マシンが起動される際に、開始する。
【０１２４】
まず、ＯＳメモリ処理設定部７１は、空きメモリリスト１５に対する読出アクセスまたは書込アクセスがメモリリスト監視領域４２へのアクセスとなるように、アクセス制御テーブル３１０Ｃを設定する（ステップＳ４１）。次に、ＯＳメモリ処理設定部７１は、メモリリスト監視領域４２への読出アクセスおよび書込アクセス監視をアクセス制御テーブル３１０Ｃに設定をする（ステップＳ４２）。以上で、アクセス制御設定処理は、終了する。
【０１２５】
図２６は、仮想計算機システム１Ｃのメモリ割当解放処理を示すフローチャートである。
【０１２６】
この処理は、仮想計算機システム１Ｃが仮想マシンに対して物理メモリ領域を割当または解放するときの処理である。
【０１２７】
まず、ＯＳメモリ管理部１３が空きメモリリスト１５へアクセスする（ステップＳ５１）。次に、アクセス制御部３１は、当該アクセスを検知し、アクセス検知部３２へ通知する（ステップＳ５２）。次に、アクセス検知部から呼び出されたメモリリスト処理部６８は、当該アクセスが、メモリ領域の解放なのか、割当てなのかを判断する（ステップＳ５３）。メモリ領域の解放であるときは（ステップＳ５３・解放）、メモリ割当解放部３４は、メモリ解放処理を行う（ステップＳ５４）。メモリ解放処理は、メモリ割当解放部３４が、解放の対象である物理メモリ領域をメモリリスト処理部６８から受け取り、仮想マシンメモリ管理テーブル３１１において、当該物理メモリ領域に対応する使用カウントを「１」減じることにより行われる。その結果、使用カウントが「０」になれば、当該物理メモリ領域は、解放されたことになり、未使用となる。メモリ領域の割当てであるときは（ステップＳ５３・割当）、メモリ割当解放部３４は、メモリ割当処理を行う（ステップＳ５５）。メモリ割当処理は、メモリ割当解放部３４が、仮想マシンメモリ管理テーブル３１１を参照し、解放されている未使用（使用カウントが「０」）の物理メモリ領域を検索し、当該物理メモリ領域に対応する使用カウントを「１」加算することで使用中であることをセットし、当該物理メモリ領域に対応する論理メモリ領域を仮想ＯＳ１２Ｃへ渡すことにより行われる。以上で、メモリ割当解放処理は、終了する。
【０１２８】
以上、実施の形態３によると、仮想ＯＳが論理メモリ領域を解放するために、空きメモリリストにアクセスしたことを検知した時に、当該論理メモリ領域に対応する物理メモリ領域の解放が行われるので、仮想マシンに対する物理メモリ領域の解放を即時に行うことができ、物理メモリ領域の使用効率を向上することができる。
≪補足≫
以上、本発明に係る仮想計算機システムを、実施の形態に基づいて説明したが、本発明の趣旨を逸脱しない範囲で変更することができる。例えば、以下のように変形することも可能であり、本発明は上述した実施の形態で示した通りの仮想計算機システムに限らない。
（１）実施の形態では、メモリ領域の使用状態には、アプリケーションやドライバ等により使用されているかという情報、メモリ領域に格納された情報の参照元の有無が含まれるとして説明したが、これらに限るものではない。例えば、当該メモリ領域を使用中のアプリケーション以外のアプリケーションにより利用可能であるか否かという情報を含んでもよい。
【０１２９】
この場合、ＯＳメモリ管理テーブル１４（図５参照）に、プライベートメモリフラグの項目を設ける。プライベートメモリフラグは、当該メモリ領域が、使用しているアプリケーションのみで使用可能である場合に「１」を、それ以外の場合に「０」を格納するものである。プライベートメモリフラグが「１」となっている場合は、メモリ領域の使用状態を実施の形態１で説明した「参照元なし」に該当させ、プライベートメモリフラグが「０」となっている場合は、「参照元あり」に該当させることとしてもよい。
（２）実施の形態では、メモリ分類処理（図１１参照）のステップＳ１１において、当該メモリ領域についてコピー処理が必要か否かを判断するとして説明したが、次のようにしてもよい。すなわち、一の仮想マシンにのみ割り当てられる必要があるメモリ領域については、仮想マシン複製前に予め仮想マシンメモリ管理テーブル３１１（図７参照）の使用カウント３１１ｂに「１」、分類値３１１ｃに「０」を設定しておいてもよい。これにより、メモリ分類処理のステップＳ１１における判断が省略できるので、処理効率を上げることができる。
（３）実施の形態では、図１４のフローチャートに示すように、新規メモリ割当処理のステップＳ２７２において、新規メモリ割当処理部６４は、メモリ初期化処理部６５を呼び出して、獲得した物理メモリ領域を初期化するとして説明した。しかしながら、メモリ領域の割当てを受ける仮想マシンがセキュアである場合については、この初期化を行わないとしてもよい。これにより、処理の軽減化を図ることができる。例えば、割当てが行われた物理メモリ領域がもともとどの仮想マシンで使われていたかを判断し、その仮想マシンが今回割当てを受ける仮想マシンと同じである場合には、この初期化を行わないとしてもよい。
（４）実施の形態では、図１９に示すように、他の仮想マシンが分類値「３」の物理メモリ領域に読出アクセスしてきた時に、仮想計算機システム１は、新たに物理メモリ領域を獲得し、獲得した物理メモリ領域に、アクセス対象の物理メモリ領域の内容をコピーする。そして、仮想計算機システム１は、当該物理メモリ領域からその内容を読み出すようにしているとして説明した。しかしながら、一の仮想マシンの書込アクセス前のメモリ領域の内容を保持している場所（例えば、ストレージ等）から、当該内容を新たに獲得した物理メモリ領域に読み込み、アクセスした他の仮想マシンが当該内容を当該物理メモリ領域から読み出すようにしてもよい。
（５）実施の形態では、図２３に示すように、仮想マシン内の空きメモリ領域を管理するための管理情報として、リストを使用したが、これに限られない。空きメモリ領域を管理するための情報であって、メモリ領域を解放する際に必ず仮想ＯＳがアクセスするものであれば、どのような形態でもよい。例えば、空きメモリ領域を管理するための管理情報は、いわゆるビットマップ方式やメモリマップ方式でもよい。アクセス制御部３１は、これらの管理情報に仮想ＯＳがアクセスしたことを検知するように構成される。
（６）実施の形態に係る仮想計算機システム１に、上記（１）〜（５）の一部または全部の変形を組み合わせて適用してもよい。
（７）以下、さらに本発明の一実施形態に係る仮想計算機システムの構成およびその変形例と各効果について説明する。
（ａ）本発明の一実施形態に係る仮想計算機システムは、第１の仮想マシンを複製することで１以上の第２の仮想マシンを生成する仮想計算機システムであって、前記第１の仮想マシンがアクセスし得る１以上の各メモリ領域について、前記１以上の第２の仮想マシンの生成後、前記第１の仮想マシンおよび前記１以上の第２の仮想マシンのうちいずれかの仮想マシンが書込アクセスをするまでは、各仮想マシンから共に読出アクセスし得るものとして管理する管理手段と、前記管理手段が管理する前記各メモリ領域について、前記書込アクセスが行われる場合には、当該書込アクセス前のメモリ内容を当該書込アクセスを行った仮想マシン以外の仮想マシンが将来アクセスするときのために保持しておく必要がない特定種メモリ領域か否かの判別を行う判別手段と、前記特定種メモリ領域への前記書込アクセスを検知する第１検知手段と、前記第１検知手段により前記書込アクセスが検知された後に、当該書込アクセスを行った仮想マシン以外の仮想マシンが当該特定種メモリ領域にアクセスしようとしていることを検知する第２検知手段と、前記第２検知手段により特定種メモリ領域にアクセスしようとしていることが検知された仮想マシンに対して、当該アクセスの対象として新たにメモリ領域を獲得して割当を行うメモリ割当手段とを備える。
【０１３０】
この仮想計算機システムは、一の仮想マシンを複製して他の仮想マシンを生成する際に、未使用のメモリ領域や参照元が存在するメモリ領域に対して、いずれかの仮想マシンから最初に書込アクセスがあったときには、新たに物理メモリ領域を獲得することがないので、コピーオンライト処理よりもさらにメモリ使用量を削減することができる。
【０１３１】
また、動的に仮想マシンを生成・消滅させるような仮想計算機システムにおいて、動的に生成した仮想マシンと元の仮想マシンとのいずれか一方しか使わないメモリ領域について、無駄なメモリ領域の確保を防止し、全体の物理メモリ領域のメモリ使用量を削減することができる。
（ｂ）また、前記判別手段は、前記第１の仮想マシンの複製により前記１以上の第２の仮想マシンを生成する際に、当該第１の仮想マシン内で使用している各メモリ領域についての使用状況を示す情報に基づいて、前記判別を行うとしてもよい。
【０１３２】
この仮想計算機システムによれば、複製元の仮想マシン内で使用している各メモリ領域についての使用状況に基づいて、特定種メモリ領域か否かを判定するので、動的に仮想マシンを生成させ、それぞれの仮想マシンが動作しても、不必要なメモリ領域の割当てを行うことなく仮想マシンを動作させることができる。
（ｃ）また、各メモリ領域についての使用状況を示す前記情報は、当該メモリ領域が未使用でありかつ当該メモリ領域が初期化してアクセスされるものであるか否かを区別するものであり、前記判別手段は、未使用でありかつ初期化してアクセスされるメモリ領域については特定種メモリ領域であると判別するとしてもよい。
【０１３３】
この仮想計算機システムは、複製元の仮想マシン内で使用している各メモリ領域についての使用状況が、当該メモリ領域が未使用でありかつ当該メモリ領域が初期化してアクセスされるものであるか否かを区別するので、これらのメモリ領域について無駄なメモリ領域の確保を防止し、全体の物理メモリ領域のメモリ使用量を削減することができる。
（ｄ）また、各メモリ領域についての使用状況を示す前記情報は、当該メモリ領域の内容と同一の内容が外部の記憶手段に存在するか否かを区別するものであり、前記判別手段は、外部の記憶手段内と同一の内容のメモリ領域については特定種メモリ領域であると判別するとしてもよい。
【０１３４】
この仮想計算機システムによれば、複製元の仮想マシン内で使用している各メモリ領域についての使用状況が、当該メモリ領域の内容と同一の内容が外部の記憶手段に存在するか否かを区別するので、これらのメモリ領域について無駄なメモリ領域の確保を防止し、全体の物理メモリ領域のメモリ使用量を削減することができる。
（ｅ）また、前記判別手段は、前記第１の仮想マシンおよび前記１以上の第２の仮想マシンのうちいずれかの仮想マシンが初めてアクセスするときのメモリ領域の内容が、当該アクセスを行う仮想マシン以外の仮想マシンに最後に書込アクセスされた内容であってもよいところのメモリ領域については、特定種メモリ領域であると判別するとしてもよい。
【０１３５】
この仮想計算機システムによれば、複製元の仮想マシン内で使用している各メモリ領域についての使用状況が、複製元の仮想マシンおよび１以上の複製先の仮想マシンのうちいずれかの仮想マシンが初めてアクセスするときのメモリ領域の内容が、当該アクセスを行う仮想マシン以外の仮想マシンに最後に書込アクセスされた内容であってもよいところのメモリ領域については、特定種メモリ領域であると判別するので、これらのメモリ領域について無駄なメモリ領域の確保を防止し、全体の物理メモリ領域のメモリ使用量を削減することができる。
（ｆ）また、各メモリ領域についての使用状況を示す前記情報は、当該メモリ領域が未使用であるか否かを区別するものであり、前記仮想計算機システムは、更に、前記情報に基づき、第１の仮想マシンの複製により１以上の第２の仮想マシンを生成する際に、当該第１の仮想マシンに割り当てられていたメモリ領域が未使用であるか否かを判別する第２判別手段と、前記第２判別手段により未使用と判別されたメモリ領域について、当該メモリ領域への前記第１の仮想マシンおよび前記１以上の第２の仮想マシンのうちいずれかの仮想マシンによるアクセスを検知可能に設定した上で当該メモリ領域の実体を解放し、実体が解放された当該メモリ領域への当該仮想マシンによるアクセスが後に検知された場合に当該仮想マシンに対して当該メモリ領域の実体を割り当てるメモリ割当解放手段とを備えるとしてもよい。
【０１３６】
この仮想計算機システムによれば、仮想マシン複製時に、仮想マシンが未使用であるメモリ領域に対応する物理メモリ領域をすべて解放することができる。
（ｇ）また、仮想マシンの仮想ＯＳが、メモリ領域の解放のために、前記仮想マシンの空きメモリ領域を管理するための管理情報が格納されるメモリ領域へアクセスした場合に、当該アクセスを検知する第３検知手段と、前記第３検知手段により前記アクセスが検知された場合に、前記仮想ＯＳが解放しようとしている前記メモリ領域の実体の解放を行うメモリ解放手段とを更に備えるとしてもよい。
【０１３７】
この仮想計算機システムは、仮想ＯＳが論理メモリ領域を解放するために、空きメモリリストにアクセスしたことを検知した時に、当該論理メモリ領域に対応する物理メモリ領域の解放が行われるので、仮想マシンに対する物理メモリ領域の解放を即時に行うことができ、物理メモリ領域の使用効率を向上することができる。
（８）メモリ分類部２１、メモリ複製部２２、アクセス制御部３１、アクセス検知部３２、メモリ割当解放部３４、メモリ割当部３５、メモリリスト処理部６８およびメモリ処理設定部７１は、仮想計算機システム１におけるコンピュータを当該機能部として機能させるメモリ管理プログラムによって、動作する。また、実施の形態において説明した各機能部は、ＩＣ（Integrated Circuit）やＬＳＩ（Large Scale Integration）等のハードウェア回路で実現してもよい。
【０１３８】
また、メモリ管理プログラムを各種記録媒体または通信路を通じて流通させ頒布することもできる。流通、頒布されたプログラムは、機器におけるＣＰＵで読み取り可能なメモリ等に格納されることにより利用に供され、そのＣＰＵがそのプログラムを実行することにより実施の形態で示した仮想計算機システムの各機能が実現される。
（９）実施の形態では、フローチャートのステップは、記載された順序に沿って時系列的に行われる処理の例を示したが、必ずしも時系列的に処理されなくとも、並列的あるいは個別実行される処理をも含むものである。
（１０）本発明は、プロセッサとタイマとを備えた計算処理装置であれば、あらゆる計算機（例えば、電子機器、情報機器、ＡＶ機器、通信機器、家電機器等）に適用可能である。具体的には、パーソナルコンピュータ、スマートフォンおよびＰＤＡ等の携帯電話機、ハードディスクレコーダ、ＤＶＤおよびブルーレイディスク等を用いたディスクレコーダ、ＤＶＤおよびブルーレイディスク等を用いたディスクプレーヤ、カーナビゲーションシステムおよびテレビジョン等にも適用可能である。
（１１）本発明に係る管理手段は、実施の形態に係るアクセス制御部３１に相当し、本発明に係る判別手段は、実施の形態に係るメモリ分類部２１およびＯＳメモリ管理テーブル１４に相当し、本発明に係る特定種メモリ領域は、実施の形態に係るメモリ領域の使用状態が「未使用」または「参照元あり」に該当する場合に相当し、本発明に係る第１検知手段は、実施の形態に係るアクセス制御部３１、アクセス検知部３２、メモリ割当処理部３５および仮想マシンメモリ管理テーブル３１１に相当し、本発明に係る第２検知手段は、実施の形態に係るアクセス制御部３１、アクセス検知部３２、メモリ割当処理部３５および仮想マシンメモリ管理テーブル３１１に相当し、本発明に係るメモリ割当手段は、実施の形態に係るメモリ割当解放部３４および仮想マシンメモリ管理テーブル３１１に相当する。
【０１３９】
また、本発明に係る第２判別手段は、実施の形態に係るメモリ分類部２１およびＯＳメモリ管理テーブル１４に相当し、本発明に係るメモリ割当解放手段は、実施の形態に係るメモリ割当解放部３４、メモリ割当処理部３５および仮想マシンメモリ管理テーブル３１１に相当する。
【０１４０】
また、本発明に係る第３検知手段は、実施の形態に係るＯＳメモリ処理設定部７１およびアクセス制御部３１に相当し、本発明に係るメモリ解放手段は、実施の形態に係るメモリリスト処理部６８および仮想マシンメモリ管理テーブル３１１に相当する。
【産業上の利用可能性】
【０１４１】
本発明に係る仮想計算機システムは、コピーオンライト処理によって物理メモリ領域を無駄に確保することを防ぐものであり、仮想計算機システムに関し、特に、アプリケーションプログラムの実行環境となるオペレーティングシステム（ＯＳ）を随時生成し動作させるシステムにおける、メモリ領域の使用量低減のための技術等に有用である。
【符号の説明】
【０１４２】
１      仮想計算機システム
１０    仮想マシンＡ
１１    アプリケーション
１２    仮想ＯＳ
１３    ＯＳメモリ管理部
１４    ＯＳメモリ管理テーブル
１５    空きメモリリスト
２０    仮想マシン複製装置
２１    メモリ分類部
２２    メモリ複製部
３０    仮想マシンメモリ管理装置
３１    アクセス制御部
３２    アクセス検知部
３４    メモリ割当解放部
３５    メモリ割当処理部
４０    物理メモリ
４１    新規メモリ割当領域
４２    メモリリスト監視領域
５０    仮想マシンＢ
６１    判別部
６２    コピーオンライト処理部
６３    第１メモリ処理部
６４    新規メモリ割当処理部
６５    メモリ初期化処理部
６６    第２メモリ処理部
６７    第３メモリ処理部
６８    メモリリスト処理部
７０    仮想マシン起動装置
７１    ＯＳメモリ処理設定部
２０１  分類値テーブル
３１０  アクセス制御テーブル
３１１  仮想マシンメモリ管理テーブル
【図１】
0005864534.tif 000002
【図２】
0005864534.tif 000003
【図３】
0005864534.tif 000004
【図４】
0005864534.tif 000005
【図５】
0005864534.tif 000006
【図６】
0005864534.tif 000007
【図７】
0005864534.tif 000008
【図８】
0005864534.tif 000009
【図９】
0005864534.tif 000010
【図１０】
0005864534.tif 000011
【図１１】
0005864534.tif 000012
【図１２】
0005864534.tif 000013
【図１３】
0005864534.tif 000014
【図１４】
0005864534.tif 000015
【図１５】
0005864534.tif 000016
【図１６】
0005864534.tif 000017
【図１７】
0005864534.tif 000018
【図１８】
0005864534.tif 000019
【図１９】
0005864534.tif 000020
【図２０】
0005864534.tif 000021
【図２１】
0005864534.tif 000022
【図２２】
0005864534.tif 000023
【図２３】
0005864534.tif 000024
【図２４】
0005864534.tif 000025
【図２５】
0005864534.tif 000026
【図２６】
0005864534.tif 000027
【図２７】
0005864534.tif 000028
【図２８】
0005864534.tif 000029