(57)【特許請求の範囲】
【請求項１】
メモリ上のプログラムをプロセッサが実行することで構成される複数の仮想計算機を備える仮想計算機システムであって、
前記メモリ上の一の領域である基本領域が、前記複数の仮想計算機に共に割り当てられている場合において、当該基本領域に対し、一の仮想計算機が書込を行おうとしたときに、当該一の仮想計算機の割当を、前記基本領域から、当該基本領域の内容を複製し当該書込後の状態とした複製領域に変更し、当該一の仮想計算機以外の他の仮想計算機に対する前記基本領域の割当は維持する領域割当手段と、
前記基本領域及び前記複製領域の内容の照合の契機を定める所定条件を満たす場合に、当該照合を行い、前記基本領域及び少なくとも１つの前記複製領域の内容が一致したときには、内容が一致した各領域のうちの一の領域以外の他の領域が割り当てられている仮想計算機の割当を、当該他の領域から当該一の領域に変更し、当該他の領域を解放する領域解放手段とを備える
ことを特徴とする仮想計算機システム。
【請求項２】
前記基本領域及び各複製領域それぞれは、
前記メモリ上に記憶されているページテーブルにおいて管理されている、異なる物理アドレスで示されるページであり、
各仮想計算機は、同一のプログラムに基づく特定処理を実行する
ことを特徴とする請求項１記載の仮想計算機システム。
【請求項３】
前記所定条件は、
割り当てられている仮想計算機の数が１つである前記基本領域及び各複製領域のうちのいずれか一の領域に対する書込命令を、当該一の領域が割り当てられている仮想計算機が実行したことである
ことを特徴とする請求項２記載の仮想計算機システム。
【請求項４】
前記領域割当手段は、
前記一の仮想計算機の割当を前記複製領域に変更する際に、前記ページテーブルにおいて、当該複製領域への書込を禁止する設定を行い、
前記領域解放手段は、
前記複製領域が割り当てられている仮想計算機が、当該複製領域に対し書込を行おうとして、書込禁止違反が発生したことを前記所定条件として、当該複製領域に当該書込を行った後で、前記照合を行う
ことを特徴とする請求項３記載の仮想計算機システム。
【請求項５】
前記仮想計算機システムは、更に
前記ページテーブルにおいて、前記基本領域への書込を禁止する設定を行う書込禁止設定手段を備え、
前記領域解放手段は、
割り当てられている仮想計算機の数が１つである前記基本領域に対し、当該仮想計算機が書込を行おうとして、書込禁止違反が発生したことを前記所定条件として、当該基本領域に当該書込を行った後で、前記照合を行う
ことを特徴とする請求項３記載の仮想計算機システム。
【請求項６】
前記ページテーブルにおいて、複数の仮想計算機に共に割り当てられている前記基本領域は、２つ以上の仮想計算機に割り当てられていることを示す共用状態に設定されており、
前記領域割当手段は、
前記一の仮想計算機の割当を前記複製領域に変更する際に、前記ページテーブルにおいて、当該複製領域を非共用状態に設定し、前記一の仮想計算機以外の他の仮想計算機の数が１つになった場合には、前記基本領域を、前記ページテーブルにおいて非共用状態に設定し、
前記領域解放手段は、
前記ページテーブルにおいて非共用状態に設定されている領域に対し、いずれかの仮想計算機が書込を行おうとしたことを前記所定条件として、当該領域に当該書込を行った後で、前記照合を行い、前記内容が一致した各領域のうちの一の領域以外の他の領域が割り当てられている仮想計算機の割当を当該一の領域に変更する際に、前記ページテーブルにおいて、当該一の領域を共用状態に設定する
ことを特徴とする請求項２記載の仮想計算機システム。
【請求項７】
前記仮想計算機システムは、更に
前記ページテーブルにおいて、前記基本領域への書込を禁止する設定を行う書込禁止設定手段を備え、
前記ページテーブルにおいて、複数の仮想計算機に共に割り当てられている前記基本領域は、２つ以上の仮想計算機に割り当てられていることを示す共用状態に設定されており、
前記領域割当手段は、
前記一の仮想計算機の割当を前記複製領域に変更する際に、前記ページテーブルにおいて、当該複製領域を非共用状態に設定し、前記一の仮想計算機以外の他の仮想計算機の数が１つになった場合には、前記基本領域を、前記ページテーブルにおいて非共用状態に設定し、
前記領域解放手段は、
前記ページテーブルにおいて非共用状態に設定されている前記基本領域が割り当てられている仮想計算機が、当該基本領域に書込を行おうとして、書込禁止違反が発生したことを前記所定条件として、非共用状態に設定されている前記基本領域に当該書込を行った後で、前記照合を行い、前記内容が一致した各領域のうちの一の領域以外の他の領域が割り当てられている仮想計算機の割当を当該一の領域に変更する際に、当該一の領域を前記ページテーブルにおいて共用状態に設定する
ことを特徴とする請求項２記載の仮想計算機システム。
【請求項８】
前記所定条件は、
前回前記照合を行ってから、所定時間経過したことである
ことを特徴とする請求項２記載の仮想計算機システム。
【請求項９】
前記特定処理内の所定の実行位置には、中間結果を確認するためのチェックポイントが設定されており、
前記所定条件は、各仮想計算機における前記特定処理の実行位置それぞれが、前記チェックポイントに到達したことである
ことを特徴とする請求項２記載の仮想計算機システム。
【請求項１０】
前記領域解放手段は、
前記複製領域が複数ある場合には、前記基本領域及び全ての複製領域の内容が一致した場合にのみ、前記一の領域に変更し、前記他の領域を解放する
ことを特徴とする請求項２記載の仮想計算機システム。
【請求項１１】
前記仮想計算機システムは、
各仮想計算機のうち、前記特定処理の実行進度が最も遅れている仮想計算機を特定する進度管理手段と、
各仮想計算機のうち、前記進度管理手段が特定した仮想計算機に、優先的に前記プロセッサを割り当てるプロセッサ割当手段とを備える
ことを特徴とする請求項２記載の仮想計算機システム。
【請求項１２】
前記プロセッサは、複数のプロセッサコアを有し、
前記複数の仮想計算機の数は、３つ以上であり、
前記プロセッサ割当手段は、
各仮想計算機のうち、前記進度管理手段が特定した仮想計算機に、１つのプロセッサコアを独占的に割り当てる
ことを特徴とする請求項１１記載の仮想計算機システム。
【請求項１３】
メモリ上のプログラムをプロセッサが実行することで構成される複数の仮想計算機を備える仮想計算機システムにおける当該メモリ上の領域管理方法であって、
前記メモリ上の一の領域である基本領域が、前記複数の仮想計算機に共に割り当てられている場合において、当該基本領域に対し、一の仮想計算機が書込を行おうとしたときに、当該一の仮想計算機の割当を、前記基本領域から、当該基本領域の内容を複製し当該書込後の状態とした複製領域に変更し、当該一の仮想計算機以外の他の仮想計算機に対する前記基本領域の割当は維持する領域割当ステップと、
前記基本領域及び前記複製領域の内容の照合の契機を定める所定条件を満たす場合に、当該照合を行い、前記基本領域及び少なくとも１つの前記複製領域の内容が一致したときには、内容が一致した各領域のうちの一の領域以外の他の領域が割り当てられている仮想計算機の割当を、当該他の領域から当該一の領域に変更し、当該他の領域を解放する領域解放ステップとを含む
ことを特徴とする領域管理方法。
【請求項１４】
メモリ上のプログラムをプロセッサが実行することで構成される複数の仮想計算機を備える仮想計算機システムにおいて、当該メモリ上の領域管理処理を当該プロセッサに行わせるプログラムであって、
前記領域管理処理は、
前記メモリ上の一の領域である基本領域が、前記複数の仮想計算機に共に割り当てられている場合において、当該基本領域に対し、一の仮想計算機が書込を行おうとしたときに、当該一の仮想計算機の割当を、前記基本領域から、当該基本領域の内容を複製し当該書込後の状態とした複製領域に変更し、当該一の仮想計算機以外の他の仮想計算機に対する前記基本領域の割当は維持する領域割当ステップと、
前記基本領域及び前記複製領域の内容の照合の契機を定める所定条件を満たす場合に、当該照合を行い、前記基本領域及び少なくとも１つの前記複製領域の内容が一致したときには、内容が一致した各領域のうちの一の領域以外の他の領域が割り当てられている仮想計算機の割当を、当該他の領域から当該一の領域に変更し、当該他の領域を解放する領域解放ステップとを含む
ことを特徴とするプログラム。
【発明の詳細な説明】
【技術分野】
【０００１】
複数の仮想計算機を備える仮想計算機システムに関し、特に、各仮想計算機の動作に必要なメモリ領域の管理に関する。
【背景技術】
【０００２】
従来から、システムの信頼性を向上させるために、ハードウェア資源を多重化したシステムが知られている（例えば、特許文献１）。【０００３】
しかしながら、この方法では、ハードウェア資源を多重化するためのコストがかかるため、複数の仮想計算機を用いてシステムの信頼性を向上させることが行われている（例えば特許文献２〜４）。【０００４】
特許文献２には、仮想計算機に割り当てられているメモリ領域のバックアップを取得しておき、ハードウェア故障やソフトウェアの不具合といった異常が発生したときに、取得しているバックアップをリストアして処理を再開する技術が開示されている。【０００５】
また、特許文献３には、それぞれ並行して実行されている２つの仮想計算機のうち、一方の仮想計算機で異常が発生した場合に、他方の仮想計算機に処理を継続させる技術が開示されている。【０００６】
また、特許文献４には、現用系仮想計算機に割り当てられているメモリ領域の内容を、待機系仮想計算機に割り当てられているメモリ領域に複製しておき、現用系仮想計算機で異常が発生したときに、待機系仮想計算機に切り替えて処理を継続させる技術が開示されている。【０００７】
なお、複数の仮想計算機を切り替えて動作させるために、一般的には、ハイパバイザと呼ばれるソフトウェアにより、各仮想計算機へのプロセッサやメモリ等の割当が管理されている。このハイパバイザの一般的な役割については、従来から知られているため（例えば特許文献５）、ここでは詳細な説明は省略する。
【先行技術文献】
【特許文献】
【０００８】
【特許文献１】日本国特許公開平１０−２４０５５６号公報
【特許文献２】日本国特許公開２００９−２４５２１６号公報
【特許文献３】米国特許５３４５５９０号公報
【特許文献４】日本国特許公開２００７−２１９７５７号公報
【特許文献５】日本国特許公開２０００−２４２５１２号公報
【発明の概要】
【発明が解決しようとする課題】
【０００９】
ところで、多重系システムを構成する複数の仮想計算機には、それぞれ異なるメモリ領域が割り当てられることが一般的であるため、各仮想計算機を動作させる際に、多重系システム全体としてのメモリ使用量が多くなるという問題がある。【００１０】
そこで、本発明は係る問題に鑑みてなされたものであり、各仮想計算機の動作に必要なメモリ使用量の総量を抑えることが可能な仮想計算機システムを提供することを目的とする。
【課題を解決するための手段】
【００１１】
上記課題を解決するために、本発明に係る仮想計算機システムは、メモリ上のプログラムをプロセッサが実行することで構成される複数の仮想計算機を備える仮想計算機システムであって、前記メモリ上の一の領域である基本領域が、前記複数の仮想計算機に共に割り当てられている場合において、当該基本領域に対し、一の仮想計算機が書込を行おうとしたときに、当該一の仮想計算機の割当を、前記基本領域から、当該基本領域の内容を複製し当該書込後の状態とした複製領域に変更し、当該一の仮想計算機以外の他の仮想計算機に対する前記基本領域の割当は維持する領域割当手段と、前記基本領域及び前記複製領域の内容の照合の契機を定める所定条件を満たす場合に、当該照合を行い、前記基本領域及び少なくとも１つの前記複製領域の内容が一致したときには、内容が一致した各領域のうちの一の領域以外の他の領域が割り当てられている仮想計算機の割当を、当該他の領域から当該一の領域に変更し、当該他の領域を解放する領域解放手段とを備えることを特徴とする。
【発明の効果】
【００１２】
上記構成を備える本発明に係る仮想計算機システムによれば、各仮想計算機の動作に必要なメモリ使用量の総量を抑えることができる。
【図面の簡単な説明】
【００１３】
【図１】実施の形態１に係る仮想計算機システム１０００のシステム構成図である。
【図２】ページテーブル５のデータ構成及び内容例を示す図である。
【図３】書込禁止違反が発生した際のハイパバイザ１００による例外処理を示すフローチャートである。
【図４】各仮想計算機が特定処理を開始する時点におけるページテーブル５の内容例及び各仮想計算機へのメモリ４上の領域の割当例を示す図である。
【図５】基本領域ｂについての書込禁止違反に基づく例外処理が終了した時点におけるページテーブル５の内容例及び各仮想計算機へのメモリ４上の領域の割当例を示す図である。
【図６】非共用基本領域ｂ´についての書込禁止違反に基づく例外処理が終了した時点におけるページテーブル５の内容例及び各仮想計算機へのメモリ４上の領域の割当例を示す図である。
【図７】実施の形態２に係る仮想計算機システム１１００のシステム構成図である。
【図８】進度管理テーブル２０及び割当管理テーブル３０のデータ構成及び内容例を示す図である。
【図９】実施の形態３に係る仮想計算機システム１２００のシステム構成図である。
【図１０】書込禁止違反が発生した際のハイパバイザ３００による例外処理を示すフローチャートである。
【図１１】タイマからの割込が発生した際のハイパバイザ３００による割込処理を示すフローチャートである。
【図１２】実施の形態４に係る仮想計算機システム１３００のシステム構成図である。
【図１３】各仮想計算機における特定処理の実行がチェックポイントに到達した際のハイパバイザ４００による処理を示すフローチャートである。
【発明を実施するための形態】
【００１４】
以下、本発明の実施の形態について、図面を参照しながら説明する。
【００１５】
≪実施の形態１≫
＜構成＞
まず、実施の形態１に係る仮想計算機システム１０００の構成について説明する。
【００１６】
図１は、仮想計算機システム１０００のシステム構成図である。
【００１７】
仮想計算機システム１０００は、ハードウェアとしての実行環境（同図に示すハードウェア資源）上で動作する基盤ソフトウェアであるハイパバイザ１００が、第１仮想計算機１０Ａ及び第２仮想計算機１０Ｂへの実行環境を提供することで、物理的には１台のコンピュータを、２台の仮想計算機として利用できるようにした多重系システムである。
【００１８】
上記ハードウェア資源には、同図に示すように、プロセッサ１、キャッシュ記憶装置３、メモリ４、ＨＤＤ（Hard Disk Drive）６、周辺モジュール７等が含まれる。
【００１９】
なお、以下では、仮想計算機システム１０００は、メモリ管理方式として、ページングによる仮想記憶方式を採用しているものとして説明する。
【００２０】
ここで、メモリ４は、一般的には、数キロバイトから数メガバイト程度の領域であるページ毎に分割され、この領域毎に論理アドレスと物理アドレスとのマッピングが行われる。なお、このマッピングには、メモリ４に記憶されているページテーブル５が用いられる。ページテーブル５の内容については、後に詳細に説明するが（図２参照）、ページ毎に、そのページに対し、書込を禁止する設定（以下、「書込禁止設定」という）がなされているかを示す情報や、そのページが、各仮想計算機に共用されているかを示す情報等も登録されている。
【００２１】
また、プロセッサ１は、プログラム実行の過程で、ページテーブル５から取得したマッピングのいくつかを、ＴＬＢ（Translation Look-aside Buffer）２に一時的に記憶する。
【００２２】
なお、周辺モジュール７の例としては、ディスプレイ、プリンタ、タイマ等の入出力機器群が挙げられる。
【００２３】
また、第１仮想計算機１０Ａ及び第２仮想計算機１０Ｂはそれぞれ、ＯＳ（Operating System）１３上で、動作する２つのタスクＡ１１、タスクＢ１２により実現される処理（以下、「特定処理」という）を実行するものである。
【００２４】
ハイパバイザ１００は、第１仮想計算機１０Ａ及び第２仮想計算機１０Ｂへの上記ハードウェア資源の割当を管理する機能を有し、プロセッサ割当部１１０、書込禁止設定部１２０、領域管理部１３０を備える。
【００２５】
ここで、プロセッサ割当部１１０は、プロセッサ１を時分割で各仮想計算機（１０Ａ、１０Ｂ）に割り当てる機能を有する。
【００２６】
また、書込禁止設定部１２０は、領域管理部１３０から指示された特定のページについて、ページテーブル５において書込禁止設定を行う機能を有する。
【００２７】
ここで、書込禁止設定がなされたページに対し、各仮想計算機が書込を行おうとした際には、書込禁止違反により割込（例外）が発生し、プロセッサ１からハイパバイザ１００への通知がなされることになる。なお、これは、いわゆる割込ベクタテーブルに、ハイパバイザ１００の書込禁止違反に対する処理ルーチンを登録しておくことで実現される。
【００２８】
また、領域管理部１３０は、各仮想計算機（１０Ａ、１０Ｂ）のうちの一方の仮想計算機が書込を行おうとして、書込禁止違反が発生した際に、その一方の仮想計算機に対するメモリ領域（ページ）の割当を変更する機能を有し、領域割当部１３１及び領域解放部１３２を含む。
【００２９】
以下、書込禁止違反が発生した各時点において、その書込禁止違反を発生させる書込を行おうとした仮想計算機を「対象仮想計算機」、対象仮想計算機でない他方の仮想計算機のことを「非対象仮想計算機」ともいう。
【００３０】
例えば、第１仮想計算機１０Ａが書込を行おうとして書込禁止違反が発生した時点では、第１仮想計算機１０Ａが対象仮想計算機であり、第２仮想計算機１０Ｂが非対象仮想計算機である。また、第２仮想計算機１０Ｂが書込を行おうとして書込禁止違反が発生した時点では、第２仮想計算機１０Ｂが対象仮想計算機であり、第１仮想計算機１０Ａが非対象仮想計算機である。
【００３１】
なお、領域管理部１３０は、各仮想計算機が特定処理を開始する前に、同一のページ（以下、「基本領域」という）を割り当てる機能も有する。即ち、各仮想計算機が特定処理を開始する時点において、基本領域は各仮想計算機により共用されている。
【００３２】
ここで、領域割当部１３１は、対象仮想計算機が書込を行おうとしたページが基本領域である場合に、対象仮想計算機の割当を、基本領域から、その基本領域を複製し当該書込後の状態とした領域（以下、「複製領域」という）に変更し、変更後の状態を示すようにページテーブル５を更新する機能を有する。なお、この際、領域割当部１３１は、複製領域について書込禁止設定を行うよう、書込禁止設定部１２０に指示する。
【００３３】
また、上記変更の際に、領域割当部１３１は、基本領域が、各仮想計算機により共用されていないことを示すように、ページテーブル５を更新する。本実施の形態では、一例として、仮想計算機システム１０００は、２つの仮想計算機（１０Ａ、１０Ｂ）を備えるものとしているため、対象仮想計算機の割当が複製領域に変更された場合、基本領域は非対象仮想計算機のみに割り当てられていることになるためである。
【００３４】
なお、以下では、非対象仮想計算機のみに割り当てられるようになった基本領域のことを、特に「非共用基本領域」といい、単に基本領域という場合には、各仮想計算機により共用されている領域のことをいうものとする。
【００３５】
また、以下では、複製領域とその複製元の非共用基本領域とのいずれかに対する他方の領域のことを、「対応領域」と表現する。即ち、複製領域の対応領域は、その複製元の非共用基本領域であり、非共用基本領域の対応領域は、複製先の複製領域である。
【００３６】
また、領域解放部１３２は、対象仮想計算機が書込を行おうとしたページが複製領域又は非共用基本領域のいずれかの領域（以下、「非共用領域」という）である場合に、書込後の非共用領域の内容と対応領域の内容とを照合し、一致するときに、非対象仮想計算機の割当を対応領域から非共用領域に変更し、対応領域を解放し、変更後の状態を示すようにページテーブル５を更新する機能を有する。
【００３７】
＜データ＞
次に、仮想計算機システム１０００が使用するデータについて、図２を用いて説明する。
【００３８】
図２は、ページテーブル５のデータ構成及び内容例を示す図である。
【００３９】
同図に示すように、ページテーブル５は、各仮想計算機に割り当てられているページ毎に、ＶＭＩＤ５１、論理アドレス５２、物理アドレス５３、共用フラグ５４及び書込禁止フラグ５５を対応付けて構成される情報である。
【００４０】
なお、以下では、対応するＶＭＩＤと、論理アドレスと、物理アドレスと、共用フラグと、書込禁止フラグとからなる情報を、「エントリ」と表現する。
【００４１】
また、ページテーブル５へのエントリの登録は、各仮想計算機が特定処理の実行を開始する前に、ページテーブル５に登録されているエントリの更新は、書込禁止違反が発生した際に、領域管理部１３０及び書込禁止設定部１２０により行われる。
【００４２】
ここで、ＶＭＩＤ５１は、対応するページが割り当てられている仮想計算機を示す識別情報であり、ここでは、一例として、第１仮想計算機１０Ａの識別情報として「１」を、第２仮想計算機１０Ｂの識別情報として「２」を用いている。
【００４３】
論理アドレス５２は、対応するページの仮想メモリ上のアドレスを示すものであり、物理アドレス５３は、対応するページのメモリ４上のアドレス（実アドレス）を示すものである。なお、４ＫＢページを用いる場合、ページテーブルには，下位１２ビット分を記憶しておく必要はないため、同図に示す論理アドレス５２、物理アドレス５３の例では、上位２０ビットのみを示している。
【００４４】
共用フラグ５４は、対応するページが各仮想計算機により共用されているか否かを示すフラグであり、ここでは、一例として、共用されている場合を「１」とし、共用されていない場合を「０」としている。
【００４５】
なお、基本領域のみが、各仮想計算機により共用されるため、共用フラグが「１」であるということは、そのページが基本領域であることを示していることになり、共用フラグが「０」であるということは、そのページが複製領域か、非共用基本領域であることを示していることになる。
【００４６】
書込禁止フラグ５５は、対応するページに対し、書込禁止設定がなされているか否かを示すフラグであり、ここでは、一例として、書込禁止設定がなされている場合を「１」とし、書込禁止設定がなされていない場合を「０」としている。
【００４７】
例えば、同図に示すエントリ５６によれば、ＶＭＩＤが「１」である仮想計算機（即ち仮想計算機１０Ａ）に割り当てられているページの論理アドレスは「０ｘ０００１１」であり、物理アドレスは「０ｘ８０００１」であり、そのページの共用フラグは「１」（即ち、共用されている）であり、そのページの書込禁止フラグは「１」（即ち、書込禁止設定がなされている）であることを示している。
【００４８】
なお、領域管理部１３０が、ページテーブル５へ登録するエントリは、エントリ５６とエントリ５７とに示すような、ＶＭＩＤのみが異なり、特に、共用フラグが「１」である２つのエントリであり、基本領域毎に、このような２つのエントリの登録が行われる。
【００４９】
以下では、対象仮想計算機が書込を行おうとしたページについてのページテーブル５におけるエントリを「対象エントリ」といい、対象エントリと同一の論理アドレスを含み、ＶＭＩＤが異なるエントリを「対応エントリ」という。
【００５０】
また、ページテーブル５に登録済みのエントリをどのように更新するかについては、以下の仮想計算機システム１０００の動作の説明の中で詳細に説明する。
【００５１】
＜動作＞
次に、仮想計算機システム１０００の動作について、図３を用いて説明する。
【００５２】
図３は、書込禁止違反が発生した際のハイパバイザ１００による例外処理を示すフローチャートである。
【００５３】
書込禁止違反が発生すると、ハイパバイザ１００の領域管理部１３０は、対象仮想計算機が書込を行おうとしたページが基本領域か否かをページテーブル５に基づいて判定する（ステップＳ１）。
【００５４】
より詳細には、領域管理部１３０は、ページテーブル５に基づいて、対象仮想計算機のＶＭＩＤと、書込を行おうとした論理アドレスが含まれるページの論理アドレスとが対応付けられたエントリ（対象エントリ）の共用フラグを取得する。取得した共用フラグが「１」（即ち共用）である場合には、領域管理部１３０は、対象仮想計算機が書込を行おうとしたページが基本領域であると判定する（ステップＳ１：ｙｅｓ）。一方、取得した共用フラグが「０」（即ち非共用）であれば、領域管理部１３０は、対象仮想計算機が書込を行おうとしたページが基本領域でないと判定する（ステップＳ１：ｎｏ）。
【００５５】
対象仮想計算機が書込を行おうとしたページが基本領域であると判定した場合には（ステップＳ１：ｙｅｓ）、領域管理部１３０の領域割当部１３１は、その基本領域を複製し（ステップＳ２）、ページテーブル５の対象エントリを、複製した領域を示すように更新する（ステップＳ３）。
【００５６】
より詳細には、ページテーブル５の対象エントリにおいて、物理アドレスを、複製した領域の先頭を示す物理アドレスに、共用フラグを「０」に、書込禁止フラグを一旦「０」にそれぞれ更新する。書込禁止フラグを一旦「０」に更新するのは、後述するステップＳ５の処理のためである。
【００５７】
また、領域割当部１３１は、上記基本領域を非共用基本領域に変更する（ステップＳ４）。より詳細には、ページテーブル５における対応エントリの共用フラグを「０」に更新する。
【００５８】
領域割当部１３１は、対象仮想計算機が、基本領域に行おうとした書込を、ステップＳ２で複製した領域に行う（ステップＳ５）。
【００５９】
領域割当部１３１は、対象仮想計算機が実行中のプログラムにおいて、書込禁止違反を発生させた書込命令の次に実行すべき命令を指すように、プログラムカウンタを設定する（ステップＳ６）。
【００６０】
領域割当部１３１は、書込禁止設定部１２０を介して、ステップＳ５で書込を行った領域（つまり、複製領域）に対し、書込禁止設定を行う（ステップＳ７）。より詳細には、ステップＳ３で一旦「０」に更新した対象エントリの書込禁止フラグを再び「１」に更新する。
【００６１】
ステップＳ７の処理を完了すると、領域管理部１３０は、例外処理を終了する。以降、対象仮想計算機は、書込禁止違反を発生させた書込命令の次の命令から処理を再開することになる。
【００６２】
なお、ステップＳ７で、書込禁止フラグを再び「１」に更新したので、以降、この複製領域に書込を行おうとした場合には、書込禁止違反が発生することになる。
【００６３】
ステップＳ１〜Ｓ７の処理により、対象仮想計算機と非対象仮想計算機とに基本領域が割り当てられた状態から、対象仮想計算機には複製領域が、非対象仮想計算機に非共用基本領域がそれぞれ割り当てられた状態に変化したことになる。
【００６４】
一方、ステップＳ１において、対象仮想計算機が書込を行おうとしたページが、基本領域でないと判定した場合、即ち、ページが非共用領域（つまり、複製領域又は非共用基本領域）である場合には（ステップＳ１：ｎｏ）、領域解放部１３２は、対象仮想計算機が書込を行おうとした非共用領域の書込禁止設定を一旦解除する（ステップＳ８）。より詳細には、ページテーブル５における対象エントリの書込禁止フラグを「０」に更新する。
【００６５】
領域解放部１３２は、対象仮想計算機が書込を行おうとした非共用領域に対し、その書込を行い（ステップＳ９）、上記ステップＳ６の場合と同様に、プログラムカウンタを設定する（ステップＳ１０）。
【００６６】
各仮想計算機はそれぞれ、同一のプログラムに基づく特定処理を実行しているため、各仮想計算機における特定処理の実行進度が大きく異ならず、また、ハードウェア故障やソフトウェアの不具合等が発生していなければ、ステップＳ９で書込を行った非共用領域の内容と対応領域の内容とは一致する可能性が高い。
【００６７】
そこで、領域解放部１３２は、ステップＳ９で書込を行った非共用領域の内容と対応領域の内容とを照合し（ステップＳ１１）、一致するか否かを判定し（ステップＳ１２）、一致する場合には（ステップＳ１２：ｙｅｓ）、対応領域を解放、即ち、未使用の領域とする（ステップＳ１３）。
【００６８】
また、領域解放部１３２は、ステップＳ９で書込を行った非共用領域を基本領域に変更する（ステップＳ１４）。より詳細には、ページテーブル５の対象エントリにおいて、共用フラグを「１」に更新し、かつ、対応エントリにおいて、物理アドレスを、対象エントリの物理アドレスと同一のアドレスに更新し、共用フラグを「１」に更新する。
【００６９】
ステップＳ１２〜Ｓ１４の処理により、対象仮想計算機と非対象仮想計算機とに物理アドレスが異なるそれぞれ１つの領域（複製領域と非共用基本領域）が割り当てられていた状態から、対象仮想計算機と非対象仮想計算機とに基本領域が割り当てられた状態に変化したことになる。
【００７０】
ステップＳ１４の処理が完了すると、領域解放部１３２は、ステップＳ９で書込を行った領域、つまり、ステップＳ１４で非共用領域から変更された基本領域に対し、書込禁止設定を行う（ステップＳ１５）。即ち、対象エントリの書込禁止フラグを「１」に設定し、領域解放部１３２は、例外処理を終了する。
【００７１】
また、ステップＳ１２において、ステップＳ９で書込を行った非共用領域の内容と対応領域の内容とが一致しない場合には（ステップＳ１２：ｎｏ）、領域解放部１３２は、ステップＳ９で書込を行った領域、つまり、非共用領域に対し、上記同様に、書込禁止設定を行い（ステップＳ１５）、例外処理を終了する。
【００７２】
＜具体例＞
以下、書込禁止違反が発生した際のハイパバイザ１００による例外処理を図４〜図６に示す具体例を用いて、図３に示すフローチャートに即して説明する。
【００７３】
図４（ａ）は、各仮想計算機が特定処理を開始する時点におけるページテーブル５の内容例を示しており、（ｂ）は、その時点における各仮想計算機へのメモリ４上の領域の割当例を示している。
【００７４】
図４（ａ）に示すエントリ５６、エントリ５７が示すメモリ４上の領域は、図４（ｂ）に示す基本領域ａであり、図４（ａ）に示すエントリ５８ａ、エントリ５９ａが示すメモリ４上の領域は、図４（ｂ）に示す基本領域ｂである。
【００７５】
なお、以下では、基本領域ａに格納されているデータ全体を、「Ｄａｔａ  ａ」とし、基本領域ｂに格納されているデータ全体を「Ｄａｔａ  ｂ」として説明する。
【００７６】
＜基本領域ｂへの書込＞
まず、第２仮想計算機１０Ｂが、基本領域ｂに対し書込を行おうとして、書込禁止違反が発生した場合を例に、ハイパバイザ１００による例外処理を説明する。
【００７７】
書込禁止違反が発生すると、ハイパバイザ１００の領域管理部１３０は、対象仮想計算機（この例では、第２仮想計算機１０Ｂ）が書込を行おうとしたページが基本領域か否かをページテーブル５に基づいて判定する（ステップＳ１）。
【００７８】
この例では、対象エントリ５９ａの共用フラグが「１」なので、領域管理部１３０は、対象仮想計算機が書込を行おうとしたページが基本領域であると判定し（ステップＳ１：ｙｅｓ）、その基本領域を複製する（ステップＳ２）。ここでは、複製先の領域の物理アドレスは「０ｘ８０００５０００」であるものとする。
【００７９】
続いて、領域管理部１３０は、対象エントリ５９ａの物理アドレスを、複製した領域の物理アドレス（０ｘ８０００５）に、共用フラグを「０」に、書込禁止フラグを一旦「０」にそれぞれ更新し（ステップＳ３）、対応エントリ５８ａの共用フラグを「０」に更新する（ステップＳ４）。
【００８０】
領域割当部１３１は、対象仮想計算機が、基本領域ｂに行おうとした書込を、ステップＳ２で複製した領域に行う（ステップＳ５）。ここでは、この複製した領域に格納されている書込後のデータ全体を「Ｄａｔａ  ｃ」として説明する。
【００８１】
領域割当部１３１は、次に実行すべき命令を指すように、プログラムカウンタを設定し（ステップＳ６）、書込禁止設定部１２０を介して、対象エントリ５９ａの書込禁止フラグを再び「１」に更新し、例外処理を終了する。
【００８２】
図５（ａ）は、基本領域ｂについての書込禁止違反に基づく例外処理が終了した時点におけるページテーブル５の内容例を示しており、（ｂ）は、その時点における各仮想計算機へのメモリ４上の領域の割当例を示している。
【００８３】
基本領域ｂについての書込禁止違反に基づく例外処理の実行前後で、図４（ａ）のエントリ５８ａは、図５（ａ）のエントリ５８ｂの状態に、図４（ａ）のエントリ５９ａは、図５（ａ）のエントリ５９ｂの状態に更新される。
【００８４】
図５（ｂ）に示すように、図４（ｂ）の基本領域ｂは、非共用基本領域ｂ´に変更され、複製領域ｃが生成されている。
【００８５】
＜非共用基本領域ｂ´への書込＞
続いて、第１仮想計算機１０Ａが、非共用基本領域ｂ´に対し書込を行おうとして、書込禁止違反が発生した場合を例に、ハイパバイザ１００による例外処理を説明する。
【００８６】
書込禁止違反が発生すると、ハイパバイザ１００の領域管理部１３０は、対象仮想計算機（この例では、第１仮想計算機１０Ａ）が書込を行おうとしたページ（この例では、非共用基本領域ｂ´）が基本領域ではないので（ステップＳ１：ｎｏ）、領域解放部１３２は、図５（ａ）に示す対象エントリ５８ｂの書込禁止フラグを「０」に更新し（ステップＳ８）、その書込を行う（ステップＳ９）。ここでは、この非共用基本領域ｂ´に格納されているデータ全体を「Ｄａｔａ  ｃ」として説明する。
【００８７】
また、領域解放部１３２は、次に実行すべき命令を指すように、プログラムカウンタを設定し（ステップＳ１０）、非共用基本領域ｂ´の内容と対応領域（この例では複製領域ｃ）の内容とを照合し（ステップＳ１１）、この例では、一致するので（ステップＳ１２：ｙｅｓ）、対応領域（複製領域ｃ）を解放する（ステップＳ１３）。
【００８８】
また、領域解放部１３２は、非共用基本領域ｂ´を基本領域ｂに変更する（ステップＳ１４）。即ち、ページテーブル５の対象エントリ５８ｂにおいて、共用フラグを「１」に更新し、かつ、対応エントリ５９ｂにおいて、物理アドレスを、対象エントリ５８ｂの物理アドレス（０ｘ８０００２）と同一のアドレスに更新し、共用フラグを「１」に更新する。
【００８９】
領域解放部１３２は、対象エントリ５８ｂの書込禁止フラグを「１」に設定し（ステップＳ１５）、例外処理を終了する。
【００９０】
図６（ａ）は、非共用基本領域ｂ´についての書込禁止違反に基づく例外処理が終了した時点におけるページテーブル５の内容例を示しており、（ｂ）は、その時点における各仮想計算機へのメモリ４上の領域の割当例を示している。
【００９１】
非共用基本領域ｂ´についての書込禁止違反に基づく例外処理の実行前後で、図５（ａ）のエントリ５８ｂは、図６（ａ）のエントリ５８ａの状態に、図５（ａ）のエントリ５９ｂは、図６（ａ）のエントリ５９ａの状態に更新される。
【００９２】
図６（ｂ）に示すように、図５（ｂ）の非共用基本領域ｂ´は、基本領域ｂに変更され、複製領域ｃは解放されている。
【００９３】
このように、第２仮想計算機１０Ｂが基本領域ｂに書込を行おうとした際に、一旦複製領域ｃが確保されるので、メモリ使用量は一旦増加する。しかしながら、第１仮想計算機１０Ａが非共用基本領域ｂ´に書込を行い、非共用基本領域ｂ´及び複製領域ｃの内容が一致した際に、確保していた複製領域ｃを解放するため、各仮想計算機それぞれが特定処理の実行中においても、メモリ使用量の総量を抑えることができる。
【００９４】
≪実施の形態２≫
近年の一般的なシステムＬＳＩ（Large Scale Integration）においては、２個以上のプロセッサコアを有するものが少なくない。そこで、以下では、マルチコアプロセッサを用いた仮想計算機システムの例を、実施の形態１との相違点を中心に説明する。
【００９５】
＜構成＞
まず、実施の形態２に係る仮想計算機システム１１００の構成について説明する。
【００９６】
図７は、仮想計算機システム１１００のシステム構成図である。
【００９７】
仮想計算機システム１１００は、同図に示すように、実施の形態１に係る仮想計算機システム１０００のハードウェア資源に加え、プロセッサ８と、プロセッサ８用のキャッシュ記憶装置９を備える。
【００９８】
プロセッサ８は、プロセッサ１と同一の命令セットを有するが、プロセッサ１とは、クロック周波数等が異なるものである。なお、特に図示していないが、プロセッサ８は、プロセッサ１と同様に、ＴＬＢを有し、プログラム実行の過程で、ページテーブル５から取得したマッピングのいくつかを、このＴＬＢに一時的に記憶する。
【００９９】
また、特に図示して説明しないが、キャッシュ記憶装置３及びキャッシュ記憶装置９は、相互に、データの一貫性を保証するための機構（いわゆるスヌープキャッシュ機能）を有しているものとする。
【０１００】
また、仮想計算機システム１１００は、仮想計算機システム１０００が備えるハイパバイザ１００に代えて、ハイパバイザ２００を備える。
【０１０１】
ハイパバイザ２００は、ハイパバイザ１００と同様に、第１仮想計算機１０Ａ及び第２仮想計算機１０Ｂへの上記ハードウェア資源の割当を管理する機能を有するが、特に、各仮想計算機の特定処理の実行進度に出来るだけ差が発生しないように、各プロセッサの割当を行う点で、ハイパバイザ１００とは異なる。
【０１０２】
この実施の形態では、各仮想計算機の特定処理の実行進度に出来るだけ差が生じないようにするために、実行進度がより遅れている仮想計算機に、性能のよいプロセッサを割り当てる例を説明する。プロセッサの性能の評価方法については、後述する。
【０１０３】
ハイパバイザ２００は、ハイパバイザ１００が備えるプロセッサ割当部１１０に代えて、プロセッサ割当部２２０を備え、更に進度管理部２１０を備える。
【０１０４】
進度管理部２１０は、各仮想計算機（１０Ａ、１０Ｂ）における特定処理の実行進度を管理する機能を有し、各仮想計算機のうち、特定処理の実行進度が遅れている仮想計算機を繰り返し特定し、特定した仮想計算機が変化する毎に、プロセッサ割当部２２０に通知する。
【０１０５】
プロセッサ割当部２２０は、実施の形態１に係るプロセッサ割当部１１０と同様に、プロセッサ（１、８）を、各仮想計算機に割り当てる機能を有するが、進度管理部２１０からの通知に基づいて、特定処理の実行進度が遅れている仮想計算機に、各プロセッサ（１、８）のうち、より性能のよいプロセッサを割り当てる点で、プロセッサ割当部１１０とは異なる。
【０１０６】
＜データ＞
次に、仮想計算機システム１１００が使用するデータについて、図８を用いて説明する。
【０１０７】
図８（ａ）は、進度管理テーブル２０のデータ構成及び内容例を示す図であり、（ｂ）は、割当管理テーブル３０のデータ構成及び内容例を示す図である。
【０１０８】
まず、進度管理テーブル２０について説明する。
【０１０９】
進度管理テーブル２０は、メモリ４に記憶されており、進度管理部２１０により更新されるテーブルであり、図８（ａ）に示すように、仮想計算機毎に、ＶＭＩＤ２１と、実行進度２２とを対応付けて構成される情報である。
【０１１０】
ここで、ＶＭＩＤ２１は、対応する仮想計算機を示す識別情報であり、ここでは、実施の形態１で説明したページテーブル５のＶＭＩＤ５１と同様に、一例として、第１仮想計算機１０Ａの識別情報として「１」を、第２仮想計算機１０Ｂの識別情報として「２」を用いている。
【０１１１】
また、実行進度２２は、対応する仮想計算機における特定処理の実行進度を示す情報である。
【０１１２】
例えば、同図では、ＶＭＩＤが「１」である仮想計算機（つまり、第１仮想計算機１０Ａ）の特定処理の実行進度は「２０％」であることを示している。
【０１１３】
ここで、本実施の形態では、特定処理を行うためのプログラムには、複数のチェックポイントが予め設定されており、各仮想計算機における特定処理の実行が、チェックポイントに到達する毎に、進度管理部２１０は、そのチェックポイントに予め設定されている実行進度を示すように、進度管理テーブル２０を更新するものとする。
【０１１４】
なお、これは、各チェックポイントで、そのチェックポイントに予め設定されている実行進度を示すデータをパラメータとした、進度管理テーブル２０を更新するためのルーチンの呼出が行われることで実現される。
【０１１５】
このために、この特定処理を行うためのプログラムの設計者は、各チェックポイントについての実行進度の設定を予め行っておく必要がある。例えば、この設計者は、特定処理全体に対し、処理完了の程度が１０％、２０％、・・・、９０％となる各実行位置にチェックポイントを設定し、処理完了の程度が１０％となる実行位置のチェックポイントに実行進度「１０％」を設定し、処理完了の程度が２０％となる実行位置のチェックポイントに実行進度「２０％」を設定し、というように各チェックポイントへ実行進度を設定する。
【０１１６】
なお、上述の例のように、設定するチェックポイントの数が比較的少ない場合には、進度管理テーブル２０における各仮想計算機の実行進度が同一になる場合もある。その場合、進度管理部２１０は、いずれか一方の仮想計算機（例えば、第１仮想計算機１０Ａ）を特定処理の実行進度が遅れている仮想計算機と特定すればよい。
【０１１７】
次に、割当管理テーブル３０について説明する。
【０１１８】
割当管理テーブル３０は、メモリ４に記憶されており、プロセッサ割当部２２０により参照及び更新されるテーブルであり、図８（ｂ）に示すように、プロセッサ毎に、プロセッサＩＤ３１と、周波数３２と、割当率３３と、ＶＭＩＤ３４とを対応付けて構成される情報である。
【０１１９】
ここで、プロセッサＩＤ３１は、対応するプロセッサを示す識別情報であり、ここでは、一例として、プロセッサ１の識別情報として「１」を、プロセッサ８の識別情報として「２」を用いている。
【０１２０】
周波数３２は、対応するプロセッサのクロック周波数を示す情報であり、割当率３３は、対応するプロセッサを特定処理の実行に割り当てることが可能な割合を示す情報である。
【０１２１】
また、ＶＭＩＤ３４は、対応するプロセッサが割り当てられている仮想計算機を示す識別情報であり、進度管理テーブル２０のいずれかのＶＭＩＤと一致するものである。
【０１２２】
例えば、同図では、プロセッサＩＤが「１」であるプロセッサ（つまり、プロセッサ１）の周波数は「１ＧＨｚ」であり、割当率は「７０％」であり、そのプロセッサは、ＶＭＩＤが「１」である仮想計算機（つまり、第１仮想計算機１０Ａ）に割り当てられていることを示している。
【０１２３】
なお、本実施の形態では、クロック周波数と割当率との積が大きい値となるプロセッサほど、性能のよいプロセッサであるとする。この割当管理テーブル３０の例では、プロセッサＩＤが「１」であるプロセッサ１の性能を示す値（１ＧＨｚ×０．７）より、プロセッサＩＤが「２」であるプロセッサ８の性能を示す値（２ＧＨｚ×１．０）の方が大きいため、プロセッサ８の方が性能のよいプロセッサである。
【０１２４】
プロセッサ割当部２２０は、進度管理部２１０により通知されている特定処理の実行進度が遅れている仮想計算機（１０Ａ又は１０Ｂ）に、性能のよいプロセッサ（この例では、プロセッサ８）を割り当て、割当の状況に変化が生じる毎に、その状況を示すように割当管理テーブル３０におけるＶＭＩＤを更新する。
【０１２５】
このように、プロセッサ割当部２２０は、特定処理の実行進度がより遅れている仮想計算機に性能のよいプロセッサを割り当てることで、各仮想計算機の特定処理の実行進度に大きな差が生じないように制御するので、各仮想計算機がメモリ４上の領域を共用できる可能性を高め、各仮想計算機それぞれが特定処理の実行中においても、メモリ使用量の総量を抑えることができる。
【０１２６】
＜動作＞
書込禁止違反が発生した際のハイパバイザ２００による例外処理は、実施の形態１に係るハイパバイザ１００による処理（図３参照）と同様であるため、説明は省略する。
【０１２７】
≪実施の形態３≫
実施の形態１では、ハイパバイザ１００が、複製領域及び非共用基本領域に、書込禁止設定を行い、非共用領域（複製領域又は非共用基本領域）についての書込禁止違反が発生した際に、この非共用領域と対応領域との照合を行う例を説明した。
【０１２８】
しかしながら、この方法では、書込禁止違反が頻発し、各仮想計算機における特定処理の実行速度が低下する恐れがある。
【０１２９】
そこで、以下では、書込禁止違反が発生した際に照合を行うではなく、定期的に照合を行うようにした例を、実施の形態１との相違点を中心に説明する。
【０１３０】
＜構成＞
まず、実施の形態３に係る仮想計算機システム１２００の構成について説明する。
【０１３１】
図９は、仮想計算機システム１２００のシステム構成図である。
【０１３２】
仮想計算機システム１２００は、同図に示すように、実施の形態１に係る仮想計算機システム１０００が備えるハイパバイザ１００に代えて、ハイパバイザ３００を備える。
【０１３３】
ハイパバイザ３００は、ハイパバイザ１００が備える領域管理部１３０に代えて、領域割当部３１１及び領域解放部３１２を有する領域管理部３１０を備える。
【０１３４】
ここで、領域割当部３１１は、実施の形態１に係る領域割当部１３１と同様に、対象仮想計算機が書込を行おうとしたページが基本領域である場合に、対象仮想計算機の割当を基本領域から複製領域に変更し、変更後の状態を示すようにページテーブル５を更新する機能を有するが、この複製領域についての書込禁止設定を行わず（つまり、書込禁止設定部１２０への指示を行わない）、非共用基本領域の書込禁止設定も解除する点で、領域割当部１３１とは異なる。
【０１３５】
また、領域解放部３１２は、一方の仮想計算機に割り当てられている各非共用領域（複製領域又は非共用基本領域）について、その非共用領域の内容と、他方の仮想計算機の対応領域の内容とを定期的に照合する機能を有する。照合の結果、内容が一致する場合には、他方の仮想計算機の割当を、対応領域から一方の仮想計算機に割り当てられている非共用領域に変更し、対応領域を解放し、変更後の状態を示すようにページテーブル５を更新する。
【０１３６】
なお、領域解放部３１２は、定期的に上記照合を行うために、この実施の形態では、一定時間を繰り返し計時するタイマ（周辺モジュール７に含まれる）からの割り込みを利用するものとする。
【０１３７】
＜動作＞
次に、仮想計算機システム１２００の動作について、図１０及び図１１を用いて説明する。
【０１３８】
まず、書込禁止違反が発生した際のハイパバイザ３００による例外処理について説明する。
【０１３９】
図１０は、書込禁止違反が発生した際のハイパバイザ３００による例外処理を示すフローチャートである。
【０１４０】
ここで、同図に示すステップＳ１６の処理以外の処理（ステップＳ２、Ｓ３、Ｓ５、Ｓ６の処理）は、図３に示す実施の形態１に係るハイパバイザ１００による例外処理と同様のものであるため、ステップＳ１６の処理を中心に説明する。
【０１４１】
書込禁止違反が発生すると、この実施の形態では、対象仮想計算機が書込を行おうとしたページは必ず基本領域であるので、ハイパバイザ３００における領域管理部３１０の領域割当部３１１は、その基本領域を複製し（ステップＳ２）、ページテーブル５の対象エントリを、複製した領域を示すように更新する（ステップＳ３）。なお、この際、実施の形態１で説明したように、対象エントリの書込禁止フラグを「０」に更新しておく。
【０１４２】
また、領域割当部３１１は、上記基本領域を非共用基本領域に変更すると共に、書込禁止設定を解除する（ステップＳ１６）。より詳細には、ページテーブル５における対応エントリの共用フラグを「０」に更新すると共に、書込禁止フラグを「０」に更新する。
【０１４３】
また、領域割当部３１１は、対象仮想計算機が、基本領域に行おうとした書込を、ステップＳ２で複製した領域に行い（ステップＳ５）、対象仮想計算機が実行中のプログラムにおいて、書込禁止違反を発生させた書込命令の次に実行すべき命令を指すように、プログラムカウンタを設定し（ステップＳ６）、例外処理を終了する。
【０１４４】
次に、タイマからの割込が発生した際のハイパバイザ３００による割込処理について説明する。
【０１４５】
図１１は、タイマからの割込が発生した際のハイパバイザ３００による割込処理を示すフローチャートである。
【０１４６】
ここで、同図に示すステップＳ２１、Ｓ２２及びＳ２３の処理以外の処理（ステップＳ１１〜Ｓ１４の処理）は、図３に示す実施の形態１に係るハイパバイザ１００による例外処理と同様のものであるため、ステップＳ２１、Ｓ２２及びＳ２３の処理を中心に説明する。
【０１４７】
タイマからの割込が発生すると、ハイパバイザ３００における領域管理部１３０の領域解放部３１２は、一方の仮想計算機（例えば、仮想計算機１０Ａとする）に割り当てられている非共用領域（複製領域又は非共用基本領域）のうち、以下説明するステップＳ２２以降の処理を行っていない領域があるか否かを判定する（ステップＳ２１）。
【０１４８】
未処理の非共用領域がある場合には（ステップＳ２１：Ｙｅｓ）、領域解放部３１２は、１つの未処理の非共用領域を選択し（ステップＳ２２）、選択した非共用領域の内容と対応領域の内容とを照合し（ステップＳ１１）、一致するか否かを判定する（ステップＳ１２）。
【０１４９】
領域解放部３１２は、選択した非共用領域の内容と対応領域の内容とが一致しない場合には（ステップＳ１２：Ｎｏ）、再びステップＳ２１から処理を行い、一致する場合には（ステップＳ１２：ｙｅｓ）、対応領域を解放、即ち、未使用の領域とする（ステップＳ１３）。
【０１５０】
また、領域解放部３１２は、ステップＳ２２で選択した非共用領域を基本領域に変更し（ステップＳ１４）、その基本領域に書込禁止設定を行い（ステップＳ２３）、再びステップＳ２１から処理を行う。
【０１５１】
ステップＳ２１において、未処理の領域がない場合には（ステップＳ２１：Ｎｏ）、領域解放部３１２は、割込処理を終了する。
【０１５２】
≪実施の形態４≫
実施の形態３では、ハイパバイザ３００における領域管理部３１０の領域解放部３１２が、一方の仮想計算機（上述の例では、仮想計算機１０Ａ）に割り当てられている各非共用領域について、その複製領域の内容と対応領域の内容とを定期的に照合する例を説明した。
【０１５３】
一般的な多重系システムにおいては、早期にハードウェア故障やソフトウェアの不具合を検出するために、チェックポイントを用いて中間結果を照合することが行われている。
【０１５４】
そこで、以下では、各仮想計算機が特定処理を行うためのプログラムに１つ以上のチェックポイントを予め設定しておき、各チェックポイントについて、そのチェックポイントに各仮想計算機における特定処理の実行が到達するのを待って、照合を行うようにした例を、実施の形態３との相違点を中心に説明する。
【０１５５】
＜構成＞
まず、実施の形態４に係る仮想計算機システム１３００の構成について説明する。
【０１５６】
図１２は、仮想計算機システム１３００のシステム構成図である。
【０１５７】
仮想計算機システム１３００は、同図に示すように、実施の形態３に係る仮想計算機システム１２００が備えるハイパバイザ３００に代えて、ハイパバイザ４００を備える。
【０１５８】
ハイパバイザ４００は、ハイパバイザ３００における領域管理部３１０の領域解放部３１２に代えて、領域管理部４１０の領域解放部４１１を備えるものである。
【０１５９】
ここで、領域解放部４１１は、実施の形態３に係る領域解放部３１２と同様に、一方の仮想計算機に割り当てられている各非共用領域（複製領域又は非共用基本領域）について、その非共用領域の内容と、他方の仮想計算機の対応領域の内容とを照合する機能を有するが、全ての仮想計算機における特定処理の実行が、同一のチェックポイントに到達した際、この照合を行う点で、領域解放部３１２とは異なる。
【０１６０】
なお、チェックポイントでは、実施の形態２で説明したものと同様に、そのチェックポイントに予め設定されている実行進度を示すデータをパラメータとした、以下説明する図１３に示す処理ルーチンの呼出が行われるものとする。このパラメータにより、領域管理部４１０は、ある仮想計算機における特定処理の実行が、いずれのチェックポイントに到達したかを知ることができる。
【０１６１】
＜動作＞
次に、仮想計算機システム１３００の動作について、図１３を用いて説明する。
【０１６２】
図１３は、各仮想計算機における特定処理の実行がチェックポイントに到達した際のハイパバイザ４００による処理を示すフローチャートである。
【０１６３】
ここで、同図に示すステップＳ３１の処理以外の処理（ステップＳ２１、Ｓ２２、Ｓ１１〜Ｓ１４、Ｓ２３の処理）は、図１１に示す実施の形態３に係るハイパバイザ３００による割込処理と同様のものであるため、ステップＳ３１の処理を中心に説明する。
【０１６４】
一方の仮想計算機における特定処理の実行がチェックポイントに到達すると、ハイパバイザ４００の領域管理部４１０は、他方の仮想計算機における特定処理の実行がそのチェックポイントに到達しているか否かを判定する（ステップＳ３１）。
【０１６５】
他方の仮想計算機における特定処理の実行が、そのチェックポイントに到達していない場合には（ステップＳ３１：Ｎｏ）、領域管理部４１０は、特定処理の実行がチェックポイントに到達した際の処理を終了する。なお、一方の仮想計算機における特定処理の実行は、他方の仮想計算機がこのチェックポイントに到達し（ステップＳ３１：Ｙｅｓ）、以下説明するステップＳ２１、Ｓ２２、Ｓ１１〜Ｓ１４、Ｓ２３の処理が完了するまで、このチェックポイントの位置で停止（中断）することになる。
【０１６６】
他方の仮想計算機における特定処理の実行がそのチェックポイントに到達している場合には（ステップＳ３１：Ｙｅｓ）、領域管理部４１０の領域解放部４１１は、ステップＳ２１〜Ｓ２３の処理を繰り返し、ステップＳ２１で、未処理の非共用領域がなくなると（ステップＳ２１：Ｎｏ）、特定処理の実行がチェックポイントに到達した際の処理を終了する。
【０１６７】
以降、各仮想計算機は、特定処理におけるチェックポイントの直後の命令から実行を行うことになる。
【０１６８】
≪補足≫
以上、本発明に係る仮想計算機システムを、各実施の形態に基づいて説明したが、以下のように変形することも可能であり、本発明は上述した各実施の形態で示した通りの仮想計算機システムに限られないことは勿論である。
【０１６９】
（１）実施の形態１では、図３のステップＳ７で説明したように、複製領域について書込禁止設定を行うものとして説明したが、このステップＳ７の処理を行わないようにしてもよい。
【０１７０】
実施の形態１では、仮想計算機システム１０００は、２つの仮想計算機（１０Ａ、１０Ｂ）を備え、各仮想計算機は、同一の特定処理を行うものとして説明したため、特定処理の実行進度が進んでいる仮想計算機に複製領域が割り当てられ、特定処理の実行進度が遅れている仮想計算機には非共用になった基本領域（非共用基本領域）が割り当てられることになる。
【０１７１】
ここで、非共用基本領域には、書込禁止設定がなされているため、上述のステップＳ７の処理を行わなくても、特定処理の実行進度が遅れている仮想計算機が非共用基本領域に書込を行おうとした場合に書込禁止違反が発生し、図３のステップＳ１１で照合が行われることになる。
【０１７２】
このように、複製領域について書込禁止設定を行わないように変形した場合には、書込禁止違反の発生頻度が低下するため、各仮想計算機における特定処理の実行速度をある程度維持しつつ、各仮想計算機の動作に必要なメモリ使用量の総量を抑えることが可能になる。
【０１７３】
（２）各実施の形態では特に説明していなかったが、仮想計算機システム１０００、１１００、１２００、１３００を実現するコンピュータ上で実行されている、各仮想計算機による特定処理以外の処理においても、書込禁止違反が発生する可能性がある。
【０１７４】
そのような場合、各実施の形態に係るハイパバイザは、その書込禁止違反を発生させた書込を行ったものが、第１仮想計算機１０Ａ又は第２仮想計算機１０Ｂであるかを、例えば、ＶＭＩＤに基づいて判定し、第１仮想計算機１０Ａ又は第２仮想計算機１０Ｂである場合にのみ、書込禁止違反が発生した際の例外処理（図３、図１０参照）を行うようにすればよい。なお、書込禁止違反を発生させた書込を行ったものが、第１仮想計算機１０Ａ及び第２仮想計算機１０Ｂのいずれでもない場合には、その例外を発生させた他の仮想計算機等に応じて予め定義されている処理を行うことになる。
【０１７５】
（３）実施の形態１の例では、仮想計算機システム１０００は、２つの仮想計算機（１０Ａ、１０Ｂ）を備えるため、一方の仮想計算機（対象仮想計算機）が基本領域に書込を行おうとした際に、図３のステップＳ４に示すように、基本領域を非共用基本領域に変更するものとして説明した。
【０１７６】
しかしながら、３つ以上の仮想計算機を備える場合には、順次、対象仮想計算機の割当が基本領域から複製領域に変更されることで、基本領域が割り当てられている仮想計算機の数が１つになった場合にのみ、図３のステップＳ４の処理を行うようにする必要がある。
【０１７７】
このために、基本領域毎に、割り当てられている仮想計算機の数を管理するようにし、図３のステップＳ３の処理の直後に、ステップＳ１の対象の基本領域に割り当てられている仮想計算機の数を減少させる処理を行い、この処理後の仮想計算機の数が１つの場合にのみ、図３のステップＳ４の処理を行うようにしてもよい。
【０１７８】
また、別の方法として、図３のステップＳ３の処理の直後に、ページテーブル５において、ステップＳ３の対象エントリと同一の論理アドレスを有する各対応エントリの中に、同一の物理アドレスを有するエントリが存在するか否かを判定する処理を行い、同一の物理アドレスを有するエントリが存在しない場合にのみ、図３のステップＳ４の処理を行うようにしてもよい。
【０１７９】
（４）実施の形態１では、図３のステップＳ１３に示すように、照合対象となった非共用領域と対応領域とのうち、対応領域を解放するものとして説明したが、解放する領域を逆にしてもよい。即ち、対象仮想計算機の割当を非共用領域から対応領域に変更し、非共用領域の方を解放するようにしてもよい。
【０１８０】
（５）各実施の形態では、書込禁止設定部１２０が書込禁止設定を行うものとして説明したが、領域割当部及び領域解放部が直接、書込禁止設定を行うようにしてもよい。
【０１８１】
また、各実施の形態では、領域割当部及び領域解放部が書込禁止設定の解除を直接行うものとして説明したが、書込禁止設定部１２０が行うようにしてもよい。即ち、書込禁止設定及びその解除を行う機能は、書込禁止設定部１２０と、領域割当部及び領域解放部とのいずれが有してもよい。
【０１８２】
（６）実施の形態２では、図８（ｂ）に示すように周波数及び割当率の両方がプロセッサ１とプロセッサ８とで異なる場合を例に説明したが、これらの一方又は両方がプロセッサ１とプロセッサ８とで同一であってもよい。
【０１８３】
また、実施の形態２では、２つのプロセッサ（プロセッサコア）を用いた例を説明したが、３つ以上のプロセッサを用いてもよく、その際、各プロセッサのクロック周波数及び特定処理の実行に割り当てることが可能な割合は、同一でも異なっていてもよい。
【０１８４】
また、実施の形態２では、２つのプロセッサを用いて、２つの仮想計算機を実行する例を説明したが、プロセッサの個数を上回る数の仮想計算機を実行するようにしてもよく、その際の各仮想計算機へのプロセッサの割当を以下のように行ってもよい。
【０１８５】
即ち、例えば、３つの仮想計算機を２つのプロセッサを用いて実行する場合に、特定処理の実行進度が最も遅れている仮想計算機に１つのプロセッサ（プロセッサコア）を独占的に割り当てて、他の２つの仮想計算機に、残りの１つのプロセッサ（プロセッサコア）を時分割で割り当てるように変形してもよい。また、この残りの１つのプロセッサを、他の２つの仮想計算機に割り当てる際に、この２つの仮想計算機における特定処理の実行進度に応じて、このプロセッサの割当時間を変えるように変形してもよい。
【０１８６】
なお、ここでは、一例として、プロセッサの数が２つで、仮想計算機の数が３つの場合を説明したが、プロセッサの数（但し２つ以上）より、仮想計算機の数が多ければ、プロセッサの数及び仮想計算機の数はこの例に限らず、この変形を適用することができる。
【０１８７】
また、例えば、２つ以上の仮想計算機を１つのプロセッサを用いて実行する場合に、各仮想計算機における特定処理の実行進度に応じて、このプロセッサの割当時間を変えるようにしてもよい。つまり、特定処理の実行進度が遅れている仮想計算機に、優先的にプロセッサを割り当てるようにしてもよい。
【０１８８】
（７）実施の形態２では、図８（ｂ）に示す周波数と割当率との積によりプロセッサの性能を評価する例を説明したが、他の指標を用いてプロセッサの性能を評価してもよいし、仮想計算機システムの設計者が、プロセッサの性能の優劣を予め定義しておいてもよい。
【０１８９】
（８）図２に示すページテーブル５及び図８（ａ）に示す進度管理テーブル２０の例では、各仮想計算機のＶＭＩＤを「１」と「２」を用いて説明したが、これは一例であり、ＶＭＩＤは、各仮想計算機を識別可能な情報であればその形式は問わず、例えば、同図に示す値と異なる値であってもよいし、文字や、文字列等であってもよい。
【０１９０】
また、図２に示すページテーブル５では、共用フラグ及び書込禁止フラグとして、ぞれぞれ「０」と「１」を用いて説明したが、これについても、上記ＶＭＩＤと同様、２つの状態を識別可能な情報であればその形式は問わない。
【０１９１】
また、このページテーブル５の例では、１ページのサイズが、４ＫＢである場合を例に説明したが、１ページのサイズはこれに限らず、これより小さくても、大きくてもよい。
【０１９２】
また、図８（ｂ）に示す割当管理テーブル３０の例では、各プロセッサのプロセッサＩＤを「１」と「２」を用いて説明したが、これは一例であり、上記ＶＭＩＤと同様、各プロセッサを識別可能な情報であればその形式は問わない。
【０１９３】
また、この割当管理テーブル３０は、プロセッサ毎に、プロセッサＩＤ３１と、周波数３２と、割当率３３と、ＶＭＩＤ３４とを対応付けて構成される場合を例に説明したが、割当管理テーブル３０として必須のデータ項目は、プロセッサＩＤ３１とＶＭＩＤ３４であり、周波数３２と、割当率３３とについては、プロセッサＩＤと対応付けて、別のテーブルで管理するようにしてもよい。
【０１９４】
（９）各仮想計算機（１０Ａ、１０Ｂ）が実行する特定処理は、２つのタスク（タスクＡ１１、Ｂ１２）により実現される処理であるとして説明したが、このタスクの数はこれより少なくても多くてもよい。
【０１９５】
（１０）実施の形態３では、図１０のステップＳ５、Ｓ６の処理を行うものとして説明したが、これらの処理を行うことなく、書込禁止違反が発生した際のハイパバイザ３００による例外処理を終了するようにしてもよい。
【０１９６】
この場合、上記例外を発生させる書込命令を実行した仮想計算機は、再度同じ書込命令を実行するが、ステップＳ２で複製された領域には、書込禁止設定がなされていないので、書込禁止違反を発生させることなく書込を完了できるためである。
【０１９７】
（１１）各実施の形態におけるハイパバイザの処理を、第１仮想計算機１０Ａ、第２仮想計算機１０Ｂ以外の仮想計算機を動作させ、その処理として実現するようにしてもよいし、ＯＳ１３を改良し、ＯＳの処理として実現するようにしてもよい。
【０１９８】
（１２）各実施の形態において説明した各構成要素のうち、全部又は一部を１チップ又は複数チップの集積回路で実現してもよいし、コンピュータのプログラムで実現してもよいし、その他どのような形態で実現してもよい。
【０１９９】
また、各実施の形態において説明した各構成要素は、仮想計算機システムが有するプロセッサと協働することにより、その機能を実現する。
【０２００】
（１３）各実施の形態において説明したハイパバイザの処理（図３、図１０、図１１、図１３参照）をプロセッサに実行させるためのプログラムを、記録媒体に記録し又は各種通信路等を介して、流通させ頒布することもできる。このような記録媒体には、ＩＣカード、光ディスク、フレキシブルディスク、ＲＯＭ、フラッシュメモリ等がある。流通、頒布されたプログラムは、機器におけるプロセッサで読み取り可能なメモリ等に格納されることにより利用に供され、そのプロセッサがそのプログラムを実行することにより各実施の形態で示したハイパバイザの各機能が実現される。
【０２０１】
（１４）各実施の形態に係る仮想計算機システムに、上記（１）〜（１３）の一部又は全部の変形を組み合わせて適用してもよい。
【０２０２】
（１５）以下、更に本発明の一実施形態に係る仮想計算機システムの構成及びその変形例と各効果について説明する。
【０２０３】
（ａ）本発明の実施の形態に係る仮想計算機システムは、メモリ上のプログラムをプロセッサが実行することで構成される複数の仮想計算機を備える仮想計算機システムであって、前記メモリ上の一の領域である基本領域が、前記複数の仮想計算機に共に割り当てられている場合において、当該基本領域に対し、一の仮想計算機が書込を行おうとしたときに、当該一の仮想計算機の割当を、前記基本領域から、当該基本領域の内容を複製し当該書込後の状態とした複製領域に変更し、当該一の仮想計算機以外の他の仮想計算機に対する前記基本領域の割当は維持する領域割当手段と、前記基本領域及び前記複製領域の内容の照合の契機を定める所定条件を満たす場合に、当該照合を行い、前記基本領域及び少なくとも１つの前記複製領域の内容が一致したときには、内容が一致した各領域のうちの一の領域以外の他の領域が割り当てられている仮想計算機の割当を、当該他の領域から当該一の領域に変更し、当該他の領域を解放する領域解放手段とを備える。
【０２０４】
この仮想計算機システムによれば、内容が一致した各領域のうちの一の領域以外の他の領域が割り当てられている仮想計算機の割当を、他の領域から一の領域に変更し、他の領域は解放されるので、各仮想計算機の動作に必要なメモリ使用量の総量を抑えることができる。
【０２０５】
（ｂ）また、前記基本領域及び各複製領域それぞれは、前記メモリ上に記憶されているページテーブルにおいて管理されている、異なる物理アドレスで示されるページであり、各仮想計算機は、同一のプログラムに基づく特定処理を実行することとしてもよい。
【０２０６】
この仮想計算機システムによれば、各仮想計算機は共に、同一のプログラムに基づく特定処理を実行するので、各仮想計算機における特定処理の実行進度が同程度である場合には、基本領域の内容と少なくとも１つの複製領域の内容とが一致する可能性が高くなり、内容が一致した各領域のうちの一の領域以外の他の領域が解放されることで、各仮想計算機の動作に必要なメモリ使用量の総量を抑えることができる。
【０２０７】
（ｃ）また、前記所定条件は、割り当てられている仮想計算機の数が１つである前記基本領域及び各複製領域のうちのいずれか一の領域に対する書込命令を、当該一の領域が割り当てられている仮想計算機が実行したことであることとしてもよい。
【０２０８】
この仮想計算機システムによれば、一の領域に対する書込命令が実行された結果、一の領域の内容が変化するため、基本領域の内容と少なくとも１つの複製領域の内容とが一致する可能性あるタイミングで効率的な照合を実現できる。
【０２０９】
（ｄ）また、前記領域割当手段は、前記一の仮想計算機の割当を前記複製領域に変更する際に、前記ページテーブルにおいて、当該複製領域への書込を禁止する設定を行い、前記領域解放手段は、前記複製領域が割り当てられている仮想計算機が、当該複製領域に対し書込を行おうとして、書込禁止違反が発生したことを前記所定条件として、当該複製領域に当該書込を行った後で、前記照合を行うこととしてもよい。
【０２１０】
この仮想計算機システムによれば、仮想計算機が複製領域への書込を行おうとしたことを、書込禁止違反による割込（例外）という従来からある仕組みを用いて検出し、書込が行われてその内容が変化した複製領域の内容と基本領域の内容とが一致する可能性があるタイミングで照合を行うことができる。
【０２１１】
（ｅ）また、前記仮想計算機システムは、更に前記ページテーブルにおいて、前記基本領域への書込を禁止する設定を行う書込禁止設定手段を備え、前記領域解放手段は、割り当てられている仮想計算機の数が１つである前記基本領域に対し、当該仮想計算機が書込を行おうとして、書込禁止違反が発生したことを前記所定条件として、当該基本領域に当該書込を行った後で、前記照合を行うこととしてもよい。
【０２１２】
この仮想計算機システムによれば、書込が行われてその内容が変化した、割り当てられている仮想計算機の数が１つである基本領域の内容と複製領域の内容との照合を、書込禁止違反による割込（例外）という従来からある仕組みを用いて行うことができる。
【０２１３】
（ｆ）また、前記ページテーブルにおいて、複数の仮想計算機に共に割り当てられている前記基本領域は、２つ以上の仮想計算機に割り当てられていることを示す共用状態に設定されており、前記領域割当手段は、前記一の仮想計算機の割当を前記複製領域に変更する際に、前記ページテーブルにおいて、当該複製領域を非共用状態に設定し、前記一の仮想計算機以外の他の仮想計算機の数が１つになった場合には、前記基本領域を、前記ページテーブルにおいて非共用状態に設定し、前記領域解放手段は、前記ページテーブルにおいて非共用状態に設定されている領域に対し、いずれかの仮想計算機が書込を行おうとしたことを前記所定条件として、当該領域に当該書込を行った後で、前記照合を行い、前記内容が一致した各領域のうちの一の領域以外の他の領域が割り当てられている仮想計算機の割当を当該一の領域に変更する際に、前記ページテーブルにおいて、当該一の領域を共用状態に設定することとしてもよい。
【０２１４】
この仮想計算機システムによれば、非共用状態に設定されている領域、つまり、複製領域、又は非共用状態に設定されている基本領域に書込が行われてその内容が変化したときに照合を行うので、この基本領域及び少なくとも１つの複製領域の内容が一致する可能性のあるタイミングで効率的な照合を実現できる。
【０２１５】
（ｇ）また、前記仮想計算機システムは、更に前記ページテーブルにおいて、前記基本領域への書込を禁止する設定を行う書込禁止設定手段を備え、前記ページテーブルにおいて、複数の仮想計算機に共に割り当てられている前記基本領域は、２つ以上の仮想計算機に割り当てられていることを示す共用状態に設定されており、前記領域割当手段は、前記一の仮想計算機の割当を前記複製領域に変更する際に、前記ページテーブルにおいて、当該複製領域を非共用状態に設定し、前記一の仮想計算機以外の他の仮想計算機の数が１つになった場合には、前記基本領域を、前記ページテーブルにおいて非共用状態に設定し、前記領域解放手段は、前記ページテーブルにおいて非共用状態に設定されている前記基本領域が割り当てられている仮想計算機が、当該基本領域に書込を行おうとして、書込禁止違反が発生したことを前記所定条件として、非共用状態に設定されている前記基本領域に当該書込を行った後で、前記照合を行い、前記内容が一致した各領域のうちの一の領域以外の他の領域が割り当てられている仮想計算機の割当を当該一の領域に変更する際に、当該一の領域を前記ページテーブルにおいて共用状態に設定することとしてもよい。
【０２１６】
この仮想計算機システムによれば、この非共用状態に設定されている基本領域に仮想計算機が書込を行おうとしたことを、書込禁止違反による割込（例外）という従来からある仕組みを用いて検出し、書込が行われてその内容が変化した非共用状態に設定されている基本領域の内容と少なくとも１つの複製領域の内容とが一致する可能性があるタイミングで照合を行うことができる。
【０２１７】
（ｈ）また、前記所定条件は、前回前記照合を行ってから、所定時間経過したことであることとしてもよい。
【０２１８】
この仮想計算機システムによれば、所定時間毎に照合を行い、内容が一致した各領域のうちの一の領域以外の他の領域が解放され得るので、この所定時間を適切に設定することで、照合による特定処理の実行速度の低下を抑えつつ、各仮想計算機の動作に必要なメモリ使用量の総量を抑えることができる。
【０２１９】
（ｉ）また、前記特定処理内の所定の実行位置には、中間結果を確認するためのチェックポイントが設定されており、前記所定条件は、各仮想計算機における前記特定処理の実行位置それぞれが、前記チェックポイントに到達したことであることとしてもよい。
【０２２０】
ここで、各仮想計算機は共に、同一のプログラムに基づく特定処理を実行するので、ハードウェア故障やソフトウェアの不具合といった異常が発生していない限り、各仮想計算機における特定処理の実行位置がチェックポイントに達した際に、各複製領域の内容と基本領域の内容とは一致することになる。
【０２２１】
従って、この仮想計算機システムによれば、各複製領域及び基本領域の内容が一致するはずであるタイミングで照合を行うので、照合による特定処理の実行速度の低下を抑えつつ、各仮想計算機の動作に必要なメモリ使用量の総量を抑えることができる。
【０２２２】
（ｊ）また、前記領域解放手段は、前記複製領域が複数ある場合には、前記基本領域及び全ての複製領域の内容が一致した場合にのみ、前記一の領域に変更し、前記他の領域を解放することとしてもよい。
【０２２３】
ここで、各仮想計算機は共に、同一のプログラムに基づく特定処理を実行するので、基本領域及び全ての複製領域の内容が一致しない場合には、その後に、これらの領域に対し再び書込が行われる可能性が高いと考えられる。即ち、基本領域及び一部の複製領域の内容が一致したタイミングで領域の解放を行った場合には、再び複製領域への割当の変更が生じる可能性が高いと考えられる。
【０２２４】
この仮想計算機システムによれば、基本領域及び全ての複製領域の内容が一致したタイミングで領域の解放を行うので、割当の変更及び領域の解放の発生による特定処理の実行速度の低下を抑えつつ、各仮想計算機の動作に必要なメモリ使用量の総量を抑えることができる。
【０２２５】
（ｋ）また、前記仮想計算機システムは、各仮想計算機のうち、前記特定処理の実行進度が最も遅れている仮想計算機を特定する進度管理手段と、各仮想計算機のうち、前記進度管理手段が特定した仮想計算機に、優先的に前記プロセッサを割り当てるプロセッサ割当手段とを備えることとしてもよい。
【０２２６】
この仮想計算機システムによれば、特定処理の実行進度が最も遅れている仮想計算機に優先的にプロセッサを割り当てるため、各仮想計算機における特定処理の実行進度をそろえ、基本領域及び複製領域の内容が一致する可能性が高くすることができ、各仮想計算機の動作に必要なメモリ使用量の総量を抑えることができる。
【０２２７】
（ｌ）また、前記プロセッサは、複数のプロセッサコアを有し、前記複数の仮想計算機の数は、３つ以上であり、前記プロセッサ割当手段は、各仮想計算機のうち、前記進度管理手段が特定した仮想計算機に、１つのプロセッサコアを独占的に割り当てることとしてもよい。
【０２２８】
この仮想計算機システムによれば、特定処理の実行進度が最も遅れている仮想計算機が１つのプロセッサコアを独占して動作するため、各仮想計算機における特定処理の実行進度をそろえ、基本領域及び複製領域の内容が一致する可能性が高くすることができ、各仮想計算機の動作に必要なメモリ使用量の総量を抑えることができる。
【０２２９】
（１６）本発明に係る仮想計算機システムのメモリ及びプロセッサは、各実施の形態に係る仮想計算機システムのメモリ４、プロセッサ１、８に相当し、本発明に係る仮想計算機システムの複数の仮想計算機は、各実施の形態に係る仮想計算機システムの第１仮想計算機１０Ａ及び第２仮想計算機１０Ｂに相当し、本発明に係る仮想計算機システムの領域割当手段、領域解放手段、書込禁止設定手段、進度管理手段、及びプロセッサ割当手段は、各実施の形態に係る仮想計算機システムのハイパバイザに相当する。
【産業上の利用可能性】
【０２３０】
本発明に係る仮想計算機システムは、複数の仮想計算機を用いた多重系システムを実現する際に利用される。
【符号の説明】
【０２３１】
１、８    プロセッサ
３、９    キャッシュ記憶装置
４    メモリ
５    ページテーブル
７    周辺モジュール
１０Ａ、１０Ｂ    仮想計算機
１００、２００、３００、４００    ハイパバイザ
１１０、２２０    プロセッサ割当部
１２０    書込禁止設定部
１３０、３１０、４１０    領域管理部
１３１、３１１    領域割当部
１３２、３１２、４１１    領域解放部
２１０    進度管理部
１０００、１１００、１２００、１３００    仮想計算機システム
【図１】
0005612681.tif 000002
【図２】
0005612681.tif 000003
【図３】
0005612681.tif 000004
【図４】
0005612681.tif 000005
【図５】
0005612681.tif 000006
【図６】
0005612681.tif 000007
【図７】
0005612681.tif 000008
【図８】
0005612681.tif 000009
【図９】
0005612681.tif 000010
【図１０】
0005612681.tif 000011
【図１１】
0005612681.tif 000012
【図１２】
0005612681.tif 000013
【図１３】
0005612681.tif 000014