(57)【要約】【課題】仮想計算機についての対象のオブジェクトとそのオブジェクトの展開先のメモリに既に存在するオブジェクトとを比較せずに同一のオブジェクトを把握できるようにする。【解決手段】仮想計算機内のＯＳ上で稼働するアプリケーションが、そのアプリケーションが管理するメモリ使用状況を通知する機能を有する。ＯＳは、仮想計算機に割り当てられているメモリ部分の使用状況を表す第一のＯＳメモリ管理情報を管理しており、アプリケーションから通知されたメモリ使用状況を基に第一のＯＳメモリ管理情報を更新する。仮想計算機を管理する仮想化機構が、第一のＯＳメモリ管理情報を取得する。また、仮想化機構は、その仮想化機構が実行される物理計算機の外部装置から第二のＯＳメモリ管理情報を取得する。そして、仮想化機構は、第一のＯＳメモリ情報と第二のＯＳメモリ情報との比較を行い、その比較の結果に基づく処理を行う。【選択図】図２
2010231684.tif 000002
【特許請求の範囲】
【請求項１】
外部装置に接続されている物理計算機であって、
メモリと、
前記メモリに接続されたプロセッサと
を備え、
前記プロセッサが、仮想化機構を実行し、
前記仮想化機構が、前記メモリの一部と前記プロセッサの一部とが割り当てられた仮想計算機を管理し、
前記仮想計算機において、オペレーティングシステム（ＯＳ）と、前記ＯＳ上のアプリケーションとが実行され、
前記仮想計算機に割り当てられているメモリ部分に、その仮想計算機内の前記ＯＳから前記アプリケーションに割り当てられそのアプリケーションによって使用されるメモリ領域であるアプリケーションメモリ領域が含まれ、
前記アプリケーションは、前記アプリケーションメモリ領域の使用状況を表す情報であるアプリケーションメモリ情報を管理しており、その情報が表すメモリ使用状況を前記ＯＳに通知し、
前記ＯＳは、前記メモリ部分の使用状況を表す情報であるＯＳメモリ情報を管理しており、前記アプリケーションから通知されたメモリ使用状況を基に前記ＯＳメモリ情報を更新し、
前記仮想化機構が、前記ＯＳから第一のＯＳメモリ情報を取得し、前記外部装置から第二のＯＳメモリ情報を取得し、前記第一のＯＳメモリ情報と前記第二のＯＳメモリ情報との比較を行い、その比較の結果に基づく処理を行う、
物理計算機。
【請求項２】
前記外部装置は、別のメモリを有する別の物理計算機であり、
前記別の物理計算機において、別の仮想化機構が実行され、前記別の仮想化機構によって別の仮想計算機が管理され、前記別の仮想計算機において、別のＯＳが実行され、前記別のＯＳが前記第二のＯＳメモリ情報を管理しており、
前記第一のＯＳメモリ情報は、前記仮想計算機に割り当てられているメモリ部分に展開されているオブジェクト毎に、オブジェクトを識別するためのオブジェクト識別情報、オブジェクトの種別を表すオブジェクト種別情報、前記メモリ部分におけるオブジェクトの位置を表すオブジェクト位置情報、オブジェクトが変更されたか否かを表す変更有無情報、及び、オブジェクトの移動が必要か否かを表す移動必要性情報を含み、
前記第二のＯＳメモリ情報は、前記別の仮想計算機に割り当てられている別のメモリ部分に展開されているオブジェクト毎に、オブジェクトを識別するためのオブジェクト識別情報、オブジェクトの種別を表すオブジェクト種別情報、前記別のメモリ部分におけるオブジェクトの位置を表すオブジェクト位置情報、オブジェクトが変更されたか否かを表す変更有無情報、及び、オブジェクトの移動が必要か否かを表す移動必要性情報を含み、
オブジェクトの種別として、データとプログラムとがあり、
前記ＯＳ及び前記別のＯＳは、前記メモリ部分又は前記別のメモリ部分にオブジェクトをロードした場合に前記第一のＯＳメモリ情報又は前記第二のＯＳメモリ情報を更新し、
前記仮想化機構が、
（Ａ１）前記仮想計算機の前記別の物理計算機への移動を行う場合に、前記ＯＳに第一のＯＳメモリ情報を要求し、前記第一のＯＳメモリ情報と前記第二のＯＳメモリ情報との比較を行い、
（Ｂ１）その比較において、前記第一のＯＳメモリ情報で管理されているオブジェクト毎に、以下の（ｂ１１）乃至（ｂ１４）の判断： 
（ｂ１１）前記第一の判断は、前記第一のＯＳメモリ情報において、前記オブジェクト種別情報がデータを表しており、且つ、前記移動必要性情報が不要を表しているか否かの判断；
（ｂ１２）前記第一のＯＳメモリ情報にオブジェクト識別情報があり、且つ、そのオブジェクト識別情報と同一のオブジェクト識別情報が前記第二のＯＳメモリ情報にあるか否かの判断；
（ｂ１３）前記第一のＯＳメモリ情報におけるオブジェクト種別情報がプログラムを表しており、且つ、前記第一のＯＳメモリ情報におけるオブジェクト位置情報と同一のオブジェクト位置情報が前記第二のＯＳメモリ情報にあるか否かの判断；
（ｂ１４）前記第一のＯＳメモリ情報に含まれている変更有無情報も前記第二のＯＳメモリ情報に含まれている変更有無情報も変更無しを表しているか否かの判断、
のうちの少なくとも一つを行い、
（Ｃ１）各オブジェクトの前記（ｂ１１）乃至（ｂ１４）の判断の結果に基づいて、前記仮想計算機について下記（ｃ１１）及び（ｃ１２）に従う移動処理：
（ｃ１１）前記（ａ１）の判断の結果が肯定的であるオブジェクトについては、そのオブジェクトのためのメモリ領域を前記別の仮想化機構を通じて前記別のメモリに確保させる；
（ｃ１２）前記（ｂ１）、（ｃ１）及び（ｄ１）のうちのいずれかの判断の結果が否定的であるオブジェクトについては、そのオブジェクトを前記メモリ部分から前記別の仮想化機構を通じて前記別のメモリ部分にコピーする、
を行い、
前記（ａ１）の判断の結果が肯定的であるオブジェクトと、前記（ｂ１）、（ｃ１）及び（ｄ１）の全ての判断の結果が肯定的であるオブジェクトについては、そのオブジェクトの前記メモリ部分から前記別のメモリ部分へのコピーが非実行とされ、
前記ＯＳが、前記仮想化機構から第一のＯＳメモリ情報を要求されたときに、前記アプリケーションにメモリ使用状況を問合せ、前記アプリケーションからメモリ使用状況の通知を受けて前記第一のＯＳメモリ情報を更新し、更新後の第一のＯＳメモリ情報を前記仮想化機構に渡す、
請求項１記載の物理計算機。
【請求項３】
前記外部装置は、ストレージ装置であり、
前記仮想化機構が、一時停止される前記仮想計算機に関する仮想計算機イメージを前記ストレージ装置に格納し、
前記仮想計算機イメージは、一時停止される前記仮想計算機内のＯＳが管理していたＯＳメモリ情報を含み、そのＯＳメモリ情報が、前記第二のＯＳメモリ情報であり、
前記仮想化機構によって別の仮想計算機が管理され、前記別の仮想計算機において、別のＯＳが実行され、前記別のＯＳがＯＳメモリ情報を管理しており、そのＯＳメモリ情報が前記第一のＯＳメモリ情報であり、
前記第二のＯＳメモリ情報は、前記仮想計算機に割り当てられているメモリ部分に展開されているオブジェクト毎に、オブジェクトを識別するためのオブジェクト識別情報、オブジェクトの種別を表すオブジェクト種別情報、前記メモリ部分におけるオブジェクトの位置を表すオブジェクト位置情報、オブジェクトが変更されたか否かを表す変更有無情報、及び、オブジェクトの移動が必要か否かを表す移動必要性情報を含み、
前記第一のＯＳメモリ情報は、前記別の仮想計算機に割り当てられている別のメモリ部分に展開されているオブジェクト毎に、オブジェクトを識別するためのオブジェクト識別情報、オブジェクトの種別を表すオブジェクト種別情報、前記別のメモリ部分におけるオブジェクトの位置を表すオブジェクト位置情報、オブジェクトが変更されたか否かを表す変更有無情報、及び、オブジェクトの移動が必要か否かを表す移動必要性情報を含み、
オブジェクトの種別として、データとプログラムとがあり、
前記別のＯＳは、前記別のメモリ部分にオブジェクトをロードした場合に前記第一のＯＳメモリ情報を更新し、
前記仮想化機構が、
（Ａ２）前記仮想計算機を再開する場合に、前記ストレージ装置内の前記仮想計算機イメージに含まれている前記第二のＯＳメモリ情報を取得し、前記別のＯＳに前記第一のＯＳメモリ情報を要求し、前記第二のＯＳメモリ情報と前記第一のＯＳメモリ情報との比較を行い、
（Ｂ２）その比較において、前記第二のＯＳメモリ情報で管理されているオブジェクト毎に、以下の（ｂ２１）乃至（ｂ２４）の判断： 
（ｂ２１）前記第一の判断は、前記第二のＯＳメモリ情報において、前記オブジェクト種別情報がデータを表しており、且つ、前記移動必要性情報が不要を表しているか否かの判断；
（ｂ２２）前記第二のＯＳメモリ情報にオブジェクト識別情報があり、且つ、そのオブジェクト識別情報と同一のオブジェクト識別情報が前記第一のＯＳメモリ情報にあるか否かの判断；
（ｂ２３）前記第二のＯＳメモリ情報におけるオブジェクト種別情報がプログラムを表しており、且つ、前記第二のＯＳメモリ情報におけるオブジェクト位置情報と同一のオブジェクト位置情報が前記第一のＯＳメモリ情報にあるか否かの判断；
（ｂ２４）前記第二のＯＳメモリ情報に含まれている変更有無情報も前記第一のＯＳメモリ情報に含まれている変更有無情報も変更無しを表しているか否かの判断、
のうちの少なくとも一つを行い、
（Ｃ２）各オブジェクトの前記（ｂ２１）乃至（ｂ２４）の判断の結果に基づいて、前記仮想計算機について下記（ｃ２１）及び（ｃ２２）に従う再開処理：
（ｃ２１）前記（ａ２）の判断の結果が肯定的であるオブジェクトについては、そのオブジェクトのためのメモリ領域を、再開オブジェクトの仮想計算機に割り当てられるメモリ部分である再開メモリ部分に確保する；
（ｃ２２）前記（ｂ２）、（ｃ２）及び（ｄ２）のうちのいずれかの判断の結果が否定的であるオブジェクトについては、そのオブジェクトを前記ストレージ装置から前記再開メモリ部分に読み込む、
を行い、
前記（ａ２）の判断の結果が肯定的であるオブジェクトと、前記（ｂ２）、（ｃ２）及び（ｄ２）の全ての判断の結果が肯定的であるオブジェクトについては、前記ストレージ装置から前記再開メモリ部分への読み込みが非実行とされ、
前記別のＯＳが、前記仮想化機構から第一のＯＳメモリ情報を要求されたときに、前記アプリケーションにメモリ使用状況を問合せ、前記アプリケーションからメモリ使用状況の通知を受けて前記第一のＯＳメモリ情報を更新し、更新後の第一のＯＳメモリ情報を前記仮想化機構に渡す、
請求項１記載の物理計算機。
【請求項４】
前記仮想化機構が、前記比較の結果、対象仮想計算機に割り当てられる対象メモリ部分に展開すべき対象オブジェクトと同一のオブジェクトが別の仮想計算機に割り当てられている別のメモリ部分に既に展開されていると判断した場合に、前記対象オブジェクトが格納されている記憶領域から前記対象オブジェクトを読み出すことを実行しない、
請求項１記載の物理計算機。
【請求項５】
前記第一及び第二のＯＳメモリ情報は、メモリ部分に展開されているオブジェクト毎に、オブジェクトを識別するためのオブジェクト識別情報、オブジェクトの種別を表すオブジェクト種別情報、オブジェクトが変更されたか否かを表す変更有無情報、及び、オブジェクトの移動が必要か否かを表す移動必要性情報を含み、
オブジェクトの種別はデータ及びプログラムのいずれかであり、
前記仮想化機構が、前記対象オブジェクトについて、以下の（Ｘ１）乃至（Ｘ３）の条件：
（Ｘ１）前記対象オブジェクトの種別がプログラムである、又は、前記対象オブジェクトの移動が必要である；
（Ｘ２）前記第一及び第二のＯＳメモリ情報の一方に前記対象オブジェクトのオブジェクト識別情報があり、且つ、それと同一のオブジェクト識別情報が他方のＯＳメモリ情報にある；
（Ｘ３）前記第一及び第二のＯＳメモリ情報の双方に含まれている変更有無情報が変更無しを表している；
の全てを満たす場合に、前記対象オブジェクトが格納されている記憶領域から前記対象オブジェクトを読み出すことを実行しない、
請求項４記載の物理計算機。
【請求項６】
前記仮想化機構が、前記（Ｘ２）及び（Ｘ３）のいずれかの条件を満たさない場合に、前記対象オブジェクトが格納されている記憶領域から前記対象オブジェクトを読み出し、前記対象メモリ部分に前記対象オブジェクトを書き込む、
請求項５記載の物理計算機。
【請求項７】
前記仮想化機構が、前記（Ｘ１）の条件を満たさない場合、前記対象オブジェクトのためのメモリ領域を前記対象メモリ部分に確保する、
請求項５又は６記載の物理計算機。
【請求項８】
前記第一及び第二のＯＳメモリ情報は、メモリ部分に展開されているオブジェクト毎に、オブジェクトを識別するためのオブジェクト識別情報を含み、
前記仮想化機構は、前記第一及び第二のＯＳメモリ情報の一方に、対象仮想計算機に割り当てられる対象メモリ部分に展開すべき対象オブジェクトのオブジェクト識別情報が無い、又は、それと同一のオブジェクト識別情報が他方のＯＳメモリ情報に無い場合に、前記対象オブジェクトが格納されている記憶領域から前記対象オブジェクトを読み出し、前記対象メモリ部分に前記対象オブジェクトを書き込む、
請求項１記載の物理計算機。
【請求項９】
前記第一及び第二のＯＳメモリ情報は、メモリ部分に展開されているオブジェクト毎に、オブジェクトの種別を表すオブジェクト種別情報、メモリ部分におけるオブジェクトの位置を表すオブジェクト位置情報、及び、オブジェクトの移動が必要か否かを表す移動必要性情報を含み、
前記仮想化機構は、対象仮想計算機に割り当てられる対象メモリ部分に展開すべき対象オブジェクトが移動必要である場合、又は、前記対象オブジェクトの種別がプログラムであるがメモリ部分における位置が異なる場合に、前記対象オブジェクトが格納されている記憶領域からその対象オブジェクトを読み出し、前記対象メモリ部分に前記対象オブジェクトを書き込む、
請求項１又は８記載の物理計算機。
【請求項１０】
前記第一及び第二のＯＳメモリ情報は、メモリ部分に展開されているオブジェクト毎に、オブジェクトが変更されたか否かを表す変更有無情報を含み、
前記仮想化機構が、対象仮想計算機に割り当てられる対象メモリ部分に展開すべき対象オブジェクトについて、前記第一及び第二のＯＳメモリ情報内の少なくとも一方の変更有無情報が変更有りを表している場合に、前記対象オブジェクトが格納されている記憶領域からその対象オブジェクトを読み出し、前記対象メモリ部分に前記対象オブジェクトを書き込む、
請求項１、８又は９記載の物理計算機。
【請求項１１】
前記第一及び第二のＯＳメモリ情報は、オブジェクト毎に、オブジェクトの種別を表すオブジェクト種別情報、及び、オブジェクトの移動が必要か否かを表す移動必要性情報を含み、
前記仮想化機構が、前記比較の結果、対象仮想計算機に割り当てられる対象メモリ部分に展開すべき対象オブジェクトの種別がデータでありその対象オブジェクトの移動が不要である場合、前記対象オブジェクトが格納されている記憶領域から前記対象オブジェクトを読み出すことを実行せず、前記対象オブジェクトのためのメモリ領域を前記対象メモリ部分に確保する、
請求項１、８乃至１０のうちのいずれかに記載の物理計算機。
【請求項１２】
前記第一及び第二のＯＳメモリ情報は、オブジェクト毎に、幾つの仮想計算機で実行されているかを表す情報である参照数情報を含み、
前記仮想化機構は、前記参照数情報がゼロを表しているオブジェクトのために確保されている領域を開放する、
請求項１乃至１１のうちのいずれかに記載の物理計算機。
【請求項１３】
前記仮想計算機が、前記ＯＳに第一のＯＳメモリ情報を要求し、
前記ＯＳが、その要求に応答して、前記アプリケーションに、メモリ使用状況を問合せ、
前記アプリケーションが、その問合せに応答してメモリ使用状況を前記ＯＳに通知し、
前記ＯＳが、通知されたメモリ使用状況を基に前記第一のＯＳメモリ情報を更新し、更新後の第一のＯＳメモリ情報を前記仮想化機構に渡す、
請求項１、４乃至１２のうちのいずれかに記載の物理計算機。
【請求項１４】
前記アプリケーションが、メモリ使用状況を通知する通知部と、前記アプリケーションメモリ情報を更新する更新部を有し、
前記通知部が、前記メモリ使用状況を通知する前に、前記更新部を静止化し、その後に、前記メモリ使用状況を前記ＯＳに通知する、
請求項１乃至１３のうちのいずれかに記載の物理計算機。
【請求項１５】
物理計算機と、
前記物理計算機に接続されている外部装置と
を備え、
前記物理計算機が、メモリと、前記メモリに接続されたプロセッサとを有し、
前記プロセッサが、仮想化機構を実行し、
前記仮想化機構が、前記メモリの一部と前記プロセッサの一部とが割り当てられた仮想計算機を管理し、
前記仮想計算機において、オペレーティングシステム（ＯＳ）と、前記ＯＳ上のアプリケーションとが実行され、
前記仮想計算機に割り当てられているメモリ部分に、その仮想計算機内の前記ＯＳから前記アプリケーションに割り当てられそのアプリケーションによって使用されるメモリ領域であるアプリケーションメモリ領域が含まれ、
前記アプリケーションは、前記アプリケーションメモリ領域の使用状況を表す情報であるアプリケーションメモリ情報を管理しており、その情報が表すメモリ使用状況を前記ＯＳに通知し、
前記ＯＳは、前記メモリ部分の使用状況を表す情報であるＯＳメモリ情報を管理しており、前記アプリケーションから通知されたメモリ使用状況を基に前記ＯＳメモリ情報を更新し、
前記仮想化機構が、前記ＯＳから第一のＯＳメモリ情報を取得し、前記外部装置から第二のＯＳメモリ情報を取得し、前記第一のＯＳメモリ情報と前記第二のＯＳメモリ情報との比較を行い、その比較の結果に基づく処理を行う、
計算機システム。
【請求項１６】
仮想計算機内のＯＳ上で実行されるアプリケーションが、そのアプリケーションに割り当てられているメモリの使用状況を前記ＯＳに通知し、
前記ＯＳが、前記仮想計算機に割り当てられているメモリの使用状況を表す第一のＯＳメモリ管理情報を、前記アプリケーションから通知されたメモリ使用状況を基に更新し、
前記仮想計算機を管理する仮想化機構が、前記第一のＯＳメモリ管理情報を取得し、前記仮想化機構を実行する物理計算機の外部装置から第二のＯＳメモリ管理情報を取得し、前記第一のＯＳメモリ情報と前記第二のＯＳメモリ情報との比較を行い、その比較の結果に基づく処理を行う、
仮想計算機管理方法。
【発明の詳細な説明】
【技術分野】
【０００１】
本発明は、仮想計算機の管理に関する。
【背景技術】
【０００２】
仮想計算機を管理する技術が知られている。仮想計算機には、一般に、物理計算機のハードウェア資源（例えばプロセッサ及びメモリ）の一部が割り当てられる。例えば、特許文献１には、物理計算機内のメモリにロードされたプログラムファイルを複数の仮想計算機で共有するための技術が開示されている。
【先行技術文献】
【特許文献】
【０００３】
【特許文献１】特開２００８−２２５６２０号公報
【発明の概要】
【発明が解決しようとする課題】
【０００４】
仮想計算機に関する技術では、或る物理計算機内の仮想計算機を別の物理計算機に移動することで仮想計算機の配置を動的に変更する処理が行われ得る。また、一時停止する仮想計算機に関するイメージを外部のストレージ装置に格納し、その仮想計算機の再開のために、そのイメージをロードする処理も行われ得る。
【０００５】
これらのケースでは、移動先又は再開先の物理計算機内のメモリにおける対象メモリ部分（移動又は再開の対象の仮想計算機に割り当てられるメモリ部分）に転送される情報量が多い可能性がある。その情報量が多いと、仮想計算機の配置の変更に時間がかかったり、物理計算機の負荷が上昇したりする。
【０００６】
この課題を解決することが期待される方法として、物理計算機内のメモリに展開されているオブジェクト（例えばファイル）を複数の仮想計算機で共有する方法が考えられる。このためには、対象のオブジェクトと同一のオブジェクトが存在するか否かを把握する必要がある。それを把握する方法としては、対象のオブジェクトと、そのオブジェクトの展開先のメモリに既に存在するオブジェクトとを比較する方法が考えられる。しかし、オブジェクト同士を比較するということは、比較すべきオブジェクトを読み出すことになる。このため、上記の課題を解決することはできない。
【０００７】
そこで、本発明の目的は、仮想計算機についての対象のオブジェクトとそのオブジェクトの展開先のメモリに既に存在するオブジェクトとを比較せずに同一のオブジェクトを把握できるようにすることにある。
【課題を解決するための手段】
【０００８】
仮想計算機内のＯＳ上で稼働するアプリケーションは、そのアプリケーションが使用するメモリの使用状況を管理する。例えば、Ｊａｖａインタプリタは（Ｊａｖａは登録商標）、内部で変数ごとにメモリの使用状況を管理している。
【０００９】
ＯＳも同様にメモリの使用状況を管理している。しかし、ＯＳからは、アプリケーションが管理するメモリ使用状況を把握することはできない。
【００１０】
一方、仮想計算機を管理する仮想化機構は、仮想メモリ空間と物理メモリ空間のマッピングを管理しているが、ＯＳで管理されているメモリ使用状況を把握することはできない。
【００１１】
そこで、アプリケーションが、メモリ使用状況を通知する機能を有する。ＯＳは、仮想計算機に割り当てられているメモリ部分の使用状況を表す第一のＯＳメモリ管理情報を管理しており、アプリケーションから通知されたメモリ使用状況を基に第一のＯＳメモリ管理情報を更新する。仮想計算機を管理する仮想化機構が、第一のＯＳメモリ管理情報を取得する。また、仮想化機構は、その仮想化機構が実行される物理計算機の外部装置から第二のＯＳメモリ管理情報を取得する。そして、仮想化機構は、第一のＯＳメモリ情報と第二のＯＳメモリ情報との比較を行い、その比較の結果に基づく処理を行う。
【００１２】
具体的には、例えば、仮想計算機の移動の場合、外部装置は、別の物理計算機である。仮想化機構は、第一のＯＳメモリ情報と第二のＯＳメモリ情報との比較の結果から、対象のオブジェクト（例えばファイル）と同一のオブジェクトが別の物理計算機内のメモリに既に展開されているか否かを判断する。この判断の結果が肯定的の場合、仮想化機構は、対象のオブジェクトを、別の物理計算機内のメモリに転送することを実行しない。別の物理計算機に仮想計算機が移動された場合、その仮想計算機には、その別の物理計算機内のメモリに既に展開されているオブジェクトのメモリ領域が割り当てられる。なお、仮想計算機の「移動」とは、移動元の物理計算機から移動対象の仮想計算機が削除されることに限らず、その仮想計算機が移動元から削除されずに残っていることを含んでも良い。
【００１３】
また、例えば、仮想計算機の再開の場合、外部装置は、ストレージ装置である。仮想計算機が一時停止される場合、仮想化機構が、一時停止する仮想計算機に関するイメージをストレージ装置に格納する。その仮想計算機イメージに、ＯＳメモリ情報が含まれる。そして、仮想化機構は、その仮想計算機を再開する場合、既存の仮想計算機から第一のＯＳメモリ情報を取得し、且つ、ストレージ装置内の仮想計算機イメージに含まれている第二のＯＳメモリ情報を取得し、それらの情報を比較する。その結果、仮想計算機機構は、対象のオブジェクトと同一のオブジェクトが物理計算機内のメモリに既に展開されていると判断した場合、対象のオブジェクトをストレージ装置から読み込まない。物理計算機に仮想計算機が再開された場合、その仮想計算機には、メモリに既に展開されているオブジェクトのメモリ領域が割り当てられる。
【発明の効果】
【００１４】
対象のオブジェクトとそのオブジェクトの展開先のメモリに既に存在するオブジェクトとを比較せずに対象のオブジェクトと同一のオブジェクトを把握できる。このため、そのようなオブジェクトを転送する必要がなくなる。
【図面の簡単な説明】
【００１５】
【図１】本発明の一実施形態に係る計算機システムを示す。
【図２】図１に示した計算機システムに含まれるサーバ装置１、管理サーバ４及びストレージ装置５を詳細に示す。
【図３】本発明の一実施形態に係る計算機システムのハードウェア構成を示す。
【図４】ＯＳ１１のメモリ管理表３２を示す構成図である。
【図５】アプリケーション１０がＪａｖａインタプリタである場合のアプリケーションメモリ管理表２１の一例を示す。
【図６】仮想計算機の移動の際のメモリマップの一例を示す。
【図７】仮想計算機の移動に関する処理のうちのプログラム領域に関わる処理の流れを示す。
【図８】図７及び図１２のステップ２０９の詳細を示すフローチャートである。
【図９】仮想計算機の再開の際のメモリマップの一例を示す。
【図１０】仮想計算機の再開に関する処理の流れを示す。
【図１１】仮想計算機の移動の際のメモリマップの別の一例を示す。
【図１２】仮想計算機の移動に関する処理のうちのデータ領域に関わる処理の流れを示す。
【発明を実施するための形態】
【００１６】
以下、図面を参照して、本発明の一実施形態を説明する。
【００１７】
図１は、本発明の一実施形態に係る計算機システムを示す。同種の要素に付す参照符号は、同一の親番号と異なる子符号との組合せである。同種の要素を区別しないで説明する場合には、親番号のみを用い、同種の要素を区別して説明する場合には、親番号の他に子符号（アルファベット）を用いる。
【００１８】
通信ネットワーク６に、少なくとも１つのサーバ装置１と、ストレージ装置５と、管理サーバ４が接続されている。本実施形態では、２台のサーバ装置１ａ，１ｂがあるとする。また、サーバ装置１ａが備える要素には、子符号として「ａ」が用いられ、サーバ装置が備える要素には、子符号として「ｂ」が用いられる。
【００１９】
通信ネットワーク６は、例えば、ＩＰ（Internet Protocol）ネットワークである。サーバ装置１は、ｉＳＣＳＩ等のインターネットプロトコルで、ストレージ装置５にアクセスすることができる。通信ネットワーク６は、ＩＰネットワークに代えて又は加えて、別種のネットワーク（例えばＦＣ（Fibre Channel）ネットワーク）であっても良い。
【００２０】
サーバ装置１ａ（１ｂ）では、仮想化機構２ａ（２ｂ）が実行される。仮想化機構２ａ（２ｂ）は、仮想計算機３ａ（３ｂ）を提供する機能を持つ。
【００２１】
仮想化機構２は、例えば、ハイパバイザ（具体例としてＶＭＷａｒｅ(登録商標)）である。仮想化機構２は、サーバ装置１（物理計算機）の物理的なデバイスのエミュレートすることで、仮想計算機３を提供する。サーバ装置１ａ（１ｂ）が有する物理的なデバイスとしては、例えば、図３に示すように、プロセッサ（ＣＰＵ（Central Processing Unit））１００ａ（１００ｂ）、主記憶装置１０１ａ（１０１ｂ）、内部インタフェース１０５ａ（１０５ｂ）、通信回路インタフェース１０６ａ（１０６ｂ）及び副記憶装置１０７ａ（１０７ｂ）を有する。プロセッサ１００ａ（１００ｂ）が、仮想化機構２ａ（２ｂ）や仮想計算機３ａ（３ｂ）を実行する。主記憶装置１０１ａ（１０１ｂ）は、典型的にはメモリ（例えばＲＡＭ（Random Access Memory））であり、仮想化機構２ａ（２ｂ）に割り当てられるメモリ部分である仮想化機構メモリ１０２ａ（１０２ｂ）と、各仮想計算機３ａ（３ｂ）に割り当てられる各メモリ部分を含む仮想計算機用物理メモリ１０３ａ（１０３ｂ）とがある。このような物理的なデバイスが仮想計算機３に割り当てられるため、仮想計算機３は、仮想的なプロセッサ及び仮想的なメモリ等の仮想的なデバイスを持つ。
【００２２】
管理サーバ４は、仮想化機構２ａ（２ｂ）と通信ネットワーク６を経由して通信する。具体的には、例えば、管理サーバ４は、仮想計算機３ａ（３ｂ）の起動、停止、生成、削除、一時停止、再開（再開）、或いは移動のための指示を、仮想化機構２ａ（２ｂ）に出す。管理者は、管理サーバ４を用いて、仮想計算機３ａ（３ｂ）を管理することができる。
【００２３】
図２は、図１に示したサーバ装置１、管理サーバ４及びストレージ装置５を詳細に示す。
【００２４】
サーバ装置１は、前述したように、仮想化機構２と、仮想化機構２が提供する仮想計算機３とを有する。
【００２５】
仮想化機構２ａ（２ｂ）が有する機能（モジュール）として、仮想計算機３ａ（３ｂ）を管理する仮想計算機管理４０ａ（４０ｂ）と、仮想計算機３ａ（３ｂ）を移動する仮想計算機移動４１ａ（４１ｂ）と、仮想計算機３ａ（３ｂ）を再開する仮想計算機再開４２ａ（４２ｂ）とがある。
【００２６】
仮想計算機管理４０は、仮想計算機３の実現や、管理サーバ４との通信処理や、仮想計算機３の起動、停止、生成、削除及び一時停止を行う。
【００２７】
仮想計算機３の一時停止とは、仮想計算機３の正規の停止処理を行わずに、動作中の仮想計算機３の動作を一時的に止めてストレージ装置５に保存することである。これは、仮想化機構２が、仮想計算機イメージをストレージ装置５に格納記録することで実現される。仮想計算機イメージは、仮想計算機３の仮想的なデバイスの状態と、仮想計算機３に割り当てられたメモリ部分のイメージとを含む。
【００２８】
仮想化計算機移動４１について、仮想計算機移動４１ａを例に採り説明する。仮想計算機移動４１ａは、仮想計算機３ａに割り当てられたメモリ部分のイメージと仮想計算機３ａの仮想的なデバイスの状態とを仮想化機構２ｂ転送し、そのイメージをサーバ装置１ｂ内の主記憶装置１０１ｂに展開しその仮想的なデバイスをサーバ装置１ｂに再現することで、仮想計算機３ａを移動する。この際、典型的には、仮想計算機３ａがサーバ装置１ａから削除されるが、削除されなくても良い。
【００２９】
仮想化計算機再開４２は、仮想計算機３の一時停止と逆の手順を行うことで、一時停止した仮想計算機３を再び動作させることで、仮想計算機３を再開する。
【００３０】
仮想計算機３ａ（３ｂ）では、ＯＳ１１ａ（１１ｂ）が実行され、ＯＳ１１ａ（１１ｂ）上では、アプリケーション１０ａ（１０ｂ）が実行される。
【００３１】
ＯＳ１１ａ（１１ｂ）は、機能（モジュール）として、ローダ３０ａ（３０ｂ）とメモリ管理３１ａ（３１ｂ）を有する。ローダ３０ａ（３０ｂ）は、アプリケーション１０ａ（１０ｂ）のプログラムファイル６１ａ（６１ｂ）をストレージ装置５から仮想計算機３ａ（３ｂ）のメモリに読込み、そのプログラムファイル６１ａ（６１ｂ）（つまりアプリケーション１０ａ（１０ｂ））を実行する。メモリ管理３１ａ（３１ｂ）は、メモリ管理表３２ａ（３２ｂ）を管理する。例えば、メモリ３１ａ（３１ｂ）は、仮想計算機３に割り当てられたメモリ部分におけるメモリ領域の割り当て及び開放や、アプリケーション１０がメモリ部分のどこにアクセスしているかの監視を行い、それらの処理に応じてメモリ管理表３２ａ（３２ｂ）を更新する。本実施形態で言う「メモリ領域」とは、オブジェクトがプログラムファイルの場合、プログラムファイルが占める範囲であり、オブジェクトがデータファイルの場合、ＯＳから指定され確保された範囲である。メモリ管理３１ａ（３１ｂ）は、アプリケーション１０ａ（１０ｂ）からメモリ使用状況の通知を受けるためのインタフェースと、仮想化機構２ａ（２ｂ）からメモリ管理表取得要求を受けるためのインタフェースとを持つ。
【００３２】
アプリケーション１０ａ（１０ｂ）は、ＯＳ１１から割り当てられたメモリ領域をさらに細分化して管理するためのアプリケーションメモリ管理表２１ａ（２１ｂ）を管理する。そして、アプリケーション１０ａ（１０ｂ）には、その管理表２１ａ（２１ｂ）に基づくメモリ使用状況をＯＳ１１ａ（１１ｂ）に通知する機能（モジュール）であるメモリ使用状況通知２０ａ（２０ｂ）が設けられる。通知されるメモリ使用状況には、例えば、アプリケーション１０ａ（１０ｂ）に割り当てられたメモリ領域の内容が今後も必要か否かを表す情報が含まれる。
【００３３】
管理サーバ４が有する機能（モジュール）として、仮想計算機群管理５０がある。仮想計算機群管理５０は、管理者から仮想計算機３の起動等の操作を受け付けるインタフェース処理や、当該操作に従う指示を仮想化機構２に出したりする。
【００３４】
ストレージ装置５には、一時停止中の仮想計算機３の情報が記録された仮想計算機イメージ６０や、ＯＳ１１やアプリケーション１０がアクセスするプログラムファイル６１及びデータファイル６２が格納される。仮想計算機イメージ６０には、仮想計算機３の仮想的なデバイスの状態と、仮想計算機３に割り当てられたメモリ部分のイメージとが含まれている。ＯＳ１１が管理しているメモリ管理表３２は、仮想計算機３に割り当てられたメモリ部分に格納されるので、仮想計算機イメージ６０に含まれている。
【００３５】
図４は、ＯＳ１１のメモリ管理表３２を示す。
【００３６】
メモリ管理表３２における１つの行は、１つのメモリ領域に対応する。各行には、下記の情報（１）〜（８）：
（１）メモリ領域に読込まれたプログラムファイルやデータファイルを識別するためのファイル識別子１１０；
（２）仮想計算機３に割り当てられたメモリ部分におけるメモリ領域の開始アドレスを表す開始アドレス１１１；
（３）メモリ領域の記憶容量（サイズ）を表すサイズ１１２；
（４）メモリ領域に格納されているファイルがプログラムファイルかデータファイルかを示す種別１１３；
（５）どのアプリケーション１０に割り当てたメモリ領域であるかを表す割当てアプリケーション識別子１１４；
（６）メモリ領域が割り当てられた後にアプリケーションプログラム等がメモリ領域を更新したか否かを示す変更有無１１５；
（７）メモリ領域を共有している仮想計算機３の数を示す参照数１１６；
（８）割り当てたメモリ領域の内容が今後も必要かどうかを表す移動必要性１１７；
が格納される。
【００３７】
開始アドレス１１１は、例えば、仮想計算機が使用する仮想アドレスで表現されたアドレスである。仮想アドレスが物理アドレスに変換されて主記憶装置にアクセスされる。仮想アドレスと物理アドレスとのアドレス変換は、仮想化機構２によって行われる。仮想化機構２に代えて、アドレス変換用のハードウェア回路によってアドレス変換が行われても良い。
【００３８】
参照数１１６は、初期値は１であり、メモリ領域が別の仮想計算機３と共有される場合には、「２」以上の値となる。参照数１１６が「０」を示す場合、当該メモリ領域が開放される。この際、メモリ管理３１は、仮想化機構２に、共有を解除するため、メモリ領域の割当てだけを変更するよう通知する。
【００３９】
ファイル識別子１１０は、例えば、ローダ３０がプログラムファイル６１をメモリに読み込んだ場合や、データファイル６２のイメージが格納されたメモリ領域の割当てをアプリケーション１０からメモリ管理３１に要求された場合に、当該ローダ３０や当該メモリ管理３１によって、プログラムファイル６１やデータファイル６２を識別できる識別子として格納される。ファイル識別子１１０は、例えば、ファイルのファイル名や、格納場所を示すパス名や、更新日付や、バージョン番号等、システム内でファイルを一意に識別できる値である。バージョン番号は、ファイルの内容が変更されれば更新される。従って、ファイル名が同じでもバージョン番号が異なることで、ファイル識別子１１０も異なることになる。それ故、ファイル名が同じでもファイルの内容が異なるか否かの判断が可能である。
【００４０】
種別１１３としては、ローダ３０がプログラムファイル６１をメモリ領域に格納した場合には“プログラム”が格納される。一方、メモリ管理３１がデータファイル６２をメモリ領域に格納した場合や、メモリ領域がアプリケーション１０に割り当てられた場合には、種別１１３として“データ”が格納される。
【００４１】
変更有無１１５としては、メモリ領域が割り当てられた直後にメモリ管理３１が“変更無し”を記録し、アプリケーション１０がメモリ領域を変更した際にメモリ管理３１が“変更あり”を記録する。メモリ管理３１は、メモリ領域への変更を監視しているので、アプリケーション１０がメモリ領域内のファイルを変更したらそれを検知することができる。
【００４２】
本実施形態では、アプリケーション１０が、メモリ領域の内容が今後も必要かどうかのＯＳ１１からの問合せに答えるインタフェースを持つ。その実装方法は特に限定されないが、一例として、Ｊａｖａインタプリタでの実装が考えられる。
【００４３】
Ｊａｖａインタプリタは、アプリケーションであるが、Ｊａｖａプログラムファイルを読込み実行する。Ｊａｖａプログラムを記述するＪａｖａ言語は、プログラムが利用する変数を明示的に開放しない文法的な特徴を持つ言語である。Ｊａｖａインタプリタは、変数を使い終わったかどうかを、実行中のＪａｖａプログラムの変数への参照数で判断し、使い終わった変数のメモリを開放する。Ｊａｖａインタプリタは、変数が利用するメモリサイズが小さいので、ＯＳ１１からまとまったサイズのメモリ領域を割当ててもらい、当該メモリ領域を細分化して変数の格納メモリとして使用する。
【００４４】
図５は、アプリケーション１０がＪａｖａインタプリタである場合のアプリケーションメモリ管理表２１の一例を示す。
【００４５】
アプリケーションメモリ管理表２１は、メモリ領域とＪａｖａプログラムの変数を管理する表である。メモリ領域に変数が格納される。アプリケーションメモリ管理表２１は、変数毎に、以下の（１）〜（５）の情報：
（１）個々の変数を識別する変数識別子１４０；
（２）ＯＳ１１から割り当てられたメモリ領域を識別するためのメモリ領域識別子１４１；
（３）変数の格納位置を表すアドレスである変数開始アドレス１４２；
（４）変数のサイズである変数サイズ１４３；
（５）Ｊａｖａプログラム又は別の変数からの参照の数を示す参照数１４４；
を有する。
【００４６】
例えば、図５は、Ｊａｖａインタプリタが実行中のＪａｖａプログラムが、変数Ａ〜Ｆを使っている例を示す。変数Ａ〜Ｆは、行１５０〜１５５で管理されている。行１５０〜１５５によれば、アプリケーション１０には２つのメモリ領域（「１」と「２」で識別できる２つのメモリ領域）が割り当てられており、識別子「１」のメモリ領域には、変数Ａ〜Ｃが格納されており、識別子「２」のメモリ領域には変数Ｄ〜Ｆが格納されていることがわかる。
【００４７】
Ｊａｖａインタプリタは、プログラム又はサブルーチンが、変数を宣言すると変数を管理する行を追加し、参照数１４４を１増やし、プログラムやサブルーチンが終了し、変数が使われなくなると参照数１４４を１減らす。従って、この例では、変数Ａ、Ｂ及びＤはまだ利用されているが、変数Ｃ、Ｅ及びＦが使われなくなっていることがわかる。
【００４８】
Ｊａｖａインタプリタは、メモリの使用効率を向上させるため、使用している変数を連続した領域に格納しなおす処理をする。この例では、Ｊａｖａインタプリタは、変数Ｃ、Ｅ及びＦを開放するため、変数Ｄを、変数Ｄが格納されているアドレスから変数Ｃが格納されているアドレスにコピーする（つまり識別子「２」のメモリ領域から識別子「１」のメモリ領域に変数Ｄをコピーする）。そして、Ｊａｖａインタプリタは、行１５３に記録されている全ての情報を行１５２にコピーし、行１５３、１５４、１５５を削除する。この処理の結果、変数Ａ、Ｂ及びＤが、識別子「１」で識別されるメモリ領域に連続して格納され、識別子「２」で識別されるメモリ領域に記録されている変数Ｄ、Ｅ及びＦは、今後もはや必要なくなる。
【００４９】
以上、本実施形態に係る計算機システムの構成について説明した。次に、本実施形態で行われる処理を説明する。
【００５０】
まず、図６〜図８を用いて、サーバ装置１ａで動作している仮想計算機３ａを仮想化機構２ａがサーバ装置１ｂに移動させる場合に行われる処理を説明する。なお、以下の説明では、１個の仮想計算機３に割り当てられたメモリ部分を「仮想メモリ」と言い、プログラムファイルが格納されたメモリ領域を「プログラム領域」と言う。図６は、サーバ装置１ａとサーバ装置１ｂの両方でのメモリマップ（仮想メモリと仮想計算機用物理メモリとのマッピング）の一例を示す。
【００５１】
図７に示すように、仮想化機構２ａは、仮想計算機群管理５０から仮想計算機３をサーバ装置１ｂに移動させる要求を受ける（ステップ２００）。この要求には、移動対象の仮想計算機３ａの識別情報と移動先のサーバ装置１ｂのネットワークアドレスが含まれる。
【００５２】
仮想化機構２ａは、移動対象の仮想計算機３ａ内のＯＳ１１ａにメモリ管理表３２ａの取得要求を送信する（ステップ２０１）。
【００５３】
取得要求を受けたＯＳ１１ａは、メモリ領域の状態と一致したメモリ管理表３２ａを仮想化機構２ａに応答する（ステップ２０２）。例えば、ＯＳ１１ａは、その取得要求に応答して、ＯＳ１１ａ上で稼働する全てのアプリケーション１０ａに、メモリ使用状況を問合せる。問合せを受けたアプリケーション１０ａが、その問合せに応答してメモリ使用状況をＯＳ１１ａに通知する。ＯＳ１１ａが、通知されたメモリ使用状況を基にメモリ管理表３２ａを更新し、更新後のメモリ管理表３２ａを仮想化機構２ａに応答する。なお、ＯＳ１１ａは、メモリ管理表３２ａの内容とメモリ領域の不一致を防止するため、例えば、ローダ３０ａが、プログラムファイル６１を仮想メモリに読み込んでいる最中だったら、その処理が完了するのを待ってからステップ２０２を開始する。
【００５４】
仮想化機構２ａは、ステップ２００での要求で移動先として指定されたサーバ装置１ｂ内の仮想化機構２ｂに、通信ネットワーク６経由で、仮想計算機用物理メモリ１０３ｂに割当てられているすべてのメモリ領域のメモリ管理表を要求する（ステップ２０３)。
【００５５】
仮想化機構２ｂは、仮想化機構２ｂが提供しているすべての仮想計算機内のＯＳ１１ｂに対してメモリ管理表３２の取得要求を送信する（ステップ２０４）。例えば、仮想化機構２ｂが２つの仮想計算機３ｂを管理している場合には、仮想化機構２ｂは、２つの仮想計算機３ｂのそれぞれのＯＳ１１ｂに対し、メモリ管理表３２ｂの取得要求を送信する。ＯＳ１１ｂは、ステップ２０２と同様に、ＯＳ１１ｂ１が持つメモリ管理表３２ｂを返す（ステップ２０５）。
【００５６】
仮想化機構２ｂは、取得されたすべてのメモリ管理表３２ｂを、仮想化機構２ａに応答する（ステップ２０８）。
【００５７】
仮想化機構２ａは、ステップ２０２で取得したメモリ管理表３２ａと、ステップ２０８で取得したメモリ管理表３２ｂとを比較し、メモリ管理表３２ａの各行に関して、処理すべきメモリ領域を判断する（ステップ２０９）。このステップ２０９の詳細に関して、図８を用いて説明する。
【００５８】
メモリ管理表３２ａの各行について、仮想化機構２ａ（ここでは仮想計算機の移動処理なので仮想計算機移動４１ａ）が次の処理を行う。以下、一つの行を例に採り説明する。その際、その行に対応するメモリ領域を対象メモリ領域と言う。
【００５９】
ステップ３００に関しては、後ほど説明する。
【００６０】
仮想化機構２ａが、対象メモリ領域について、メモリ管理表３２ａにファイル識別子１１０があり（つまり、対象メモリ領域に、プログラムファイル６１又はデータファイル６２が入っており）、且つ、メモリ管理表３２ｂに、そのファイル識別子１１０と同一のファイル識別子１１０があるか否かを判断する（ステップ３０１）。
【００６１】
この判断の結果が否定的の場合、対象メモリ領域内のファイルと同一のプログラムファイル６１またはデータファイル６２が、移動先のサーバ装置１ｂ内の仮想計算機用物理メモリ（以下、移動先物理メモリ）１０３ｂに存在しないということである。このため、仮想化機構２ａは、対象メモリ領域が独立したメモリ領域と判断する（ステップ３０４）。この場合、後述のステップ２１０において、対象メモリ領域内のファイルが移動先物理メモリ１０３ｂに移動される。
【００６２】
ステップ３０１の判断の結果が肯定的の場合、仮想化機構２ａは、対象メモリ領域について、メモリ管理表３２ａ内の種別１１３が“プログラム”であり、且つ、メモリ管理表３２ａ内の開始アドレス１１１とメモリ管理表３２ｂ内の開始アドレス１１１が同一か否かを判断する（ステップ３０２）。
【００６３】
この判断の結果が否定的であれば、ステップ３０４が行われる。なぜなら、プログラムファイルの開始アドレスが異なると、メモリにマップした内容が異なる場合があるためである。開始アドレスが異なってもメモリにマップした内容が変化しないＯＳ１１を利用している場合にはこのステップは省いてよい。
【００６４】
ステップ３０２の判断が肯定的の場合、仮想化機構２ａは、対象メモリ領域について、メモリ管理表３２ａとメモリ管理表３２ｂの両方の変更有無１１５が共に“変更無し”か否かを判断する（ステップ３０３）。この判断の結果が否定的であれば、ステップ３０４が行われる。
【００６５】
ステップ３０１、３０２及び３０３のいずれの判断の結果も肯定的であれば、仮想化機構２ａは、対象メモリ領域は共有可能なメモリ領域と判断する（ステップ３０５）。なぜなら、この場合は、対象メモリ領域内のファイルと同一のファイルが既に移動先物理メモリ１０３ｂに存在するからである。
【００６６】
図６の例では、対象メモリ領域が、移動対象の仮想計算機３ａの仮想メモリ１６０におけるプログラム領域Ａ１６６である。移動先物理メモリ１０３ｂには、移動先サーバ装置１ｂに既に存在する仮想計算機３ｂに割り当てられているプログラム領域Ａ１６４がある。このケースでは、ステップ２１０において、対象メモリ領域１６６からファイルが読み出されることは行われず（つまりそのファイルの移動は行われず）、移動先物理メモリ１０３ｂ内の既存のプログラム領域Ａ１６４が、サーバ装置１ｂに移動された仮想計算機に割り当てられる仮想メモリ１６１に割り当てられる（プログラム領域Ａ１６２を参照）。ステップ２１０では、さらに、仮想計算機３ｂと移動された仮想計算機３ａとにプログラム領域Ａ１６４が共有されていることが管理される。具体的には、プログラム領域Ａ１６４を共有する仮想計算機３ａ、３ｂのメモリ管理表３２ａ、３２ｂにおける、プログラム領域Ａ１６４に対応した参照数１１６の値が、１増やされる。
【００６７】
ステップ２１０の後、仮想化機構２ａは、仮想化機構２ｂに、移動対象の仮想計算機３ａの仮想的なデバイスの状態を送信し、移動対象の仮想計算機３をサーバ装置１ｂで実行するよう指示する。そして、仮想化機構２ａは、移動対象の仮想計算機３ａをサーバ装置１ａから削除し、仮想計算機３の移動を完了させる（ステップ２１１）。
【００６８】
最後に、仮想化機構２ａは、仮想計算機群管理５０に、要求された処理（つまり仮想計算機の移動処理）が完了したことを通知する（ステップ２１２）。
【００６９】
続いて、ストレージ装置５に仮想計算機イメージ６０が保存された仮想計算機３を再開させる場合の動作を、図１０を参照して説明する。その際、適宜、図９を参照する。図９及び図１０は、サーバ装置１ａ内の一時停止された仮想計算機１ａをサーバ装置１ａで再開することの例を示す（サーバ装置１ａで一時停止された仮想計算機１ａは、別のサーバ装置１ｂで再開されても良い）。
【００７０】
図１０に示すステップ２００の説明は、図７と同様の為、省略する。
【００７１】
仮想化機構２ａは、ＯＳ１１ａに問い合わせる代わりに、ストレージ装置５に格納された仮想計算機イメージ６０に含まれるメモリ管理表３２ｃを読み込む（ステップ２２０、ステップ２２１）。これに先立ち、仮想化機構２ａは、当該メモリ管理表３２ｃとメモリ領域の不一致を防止するため、一時停止処理の前に、ＯＳ１１ａに、ステップ２０２と同様の処理を依頼する。このため、その依頼を受けたＯＳ１１ａ内のローダ３０ａが、プログラムファイル６１を仮想メモリに読み込んでいる最中だったら、その処理が完了するのを待ってから、ステップ２０５を開始する。
【００７２】
ステップ２０４及び２０５の説明は、図７と同様の為、省略する。
【００７３】
ステップ２０９で、仮想計算機２ａ（例えば仮想計算機再開４２ａ）は、ステップ２２１で取得されたメモリ管理表３２ｃ（再開対象の仮想計算機のＯＳが管理するメモリ管理表）を、ステップ２０５で取得されたメモリ管理表３２ａ（既に稼動している仮想計算機のＯＳが管理するメモリ管理表）と比較する。ステップ２０９の処理の詳細は、図８と同様である。
【００７４】
仮想化機構２ａは、仮想計算機イメージ６０（つまりストレージ装置５）から、メモリイメージを物理メモリ１０３ａに読込む（ステップ２２２）。この際、ステップ２０９にて、共有可能と判断されたメモリ領域内のファイルに関しては、仮想計算機イメージ６０からの読み込みは行われず、既に物理メモリ１０３ａに存在するメモリ領域が、再開対象の仮想計算機に共有される。
【００７５】
図９の例では、対象メモリ領域が、仮想計算機イメージ６０におけるプログラム領域Ａ１７０である。物理メモリ１０３ａには、再開先のサーバ装置１ａに既に存在する仮想計算機３ａに割り当てられているプログラム領域Ａ１７４がある。このケースでは、ステップ２２２において、対象メモリ領域１７０からファイルが読み出されることは行われず、物理メモリ１０３ａ内の既存のプログラム領域Ａ１７４が、再開対象の仮想計算機に割り当てられる仮想メモリ１７１に割り当てられる（プログラム領域Ａ１７２を参照）。ステップ２２２では、さらに、既存の仮想計算機３ａと再開された仮想計算機３ａとにプログラム領域Ａ１７４が共有されていることが管理される。具体的には、プログラム領域Ａ１７４を共有する仮想計算機３ａ、３ａのメモリ管理表３２ａ、３２ｃにおける、プログラム領域Ａ１７４に対応した参照数１１６の値が、１増やされる。
【００７６】
次に、仮想化機構２ａは、仮想計算機イメージ６０から仮想計算機３の仮想的なデバイスの状態を読込み、仮想計算機３を再開する（実行する）（ステップ２２３）。
【００７７】
最後に、仮想化機構２ａは、仮想計算機群管理５０に、要求された処理（つまり仮想計算機の再開処理）が完了したことを通知する（ステップ２１２）。
【００７８】
これまで説明したように、仮想計算機の移動でも再開でも、図８に示した処理が行なわれる。もし、移動又は再開の対象の仮想計算機のＯＳが管理するメモリ管理表３２ａ又は３２ｃと比較されるメモリ管理表３２ｂ又は３２ａが複数個ある場合には、それぞれのメモリ管理表３２ｂ又は３２ａが、メモリ管理表３２ａ又は３２ｃと比較される。
【００７９】
さて、続いて、データ領域（データが格納されているメモリ領域）に対する動作について、仮想計算機３ａをサーバ装置１ａからサーバ装置１ｂに移動させる場合を例に採り、図１１及び図１２を参照して説明する。
【００８０】
図１２に示すステップ２００〜２０１の説明は、図７と同様の為、省略する。
【００８１】
ＯＳ１１ａは、メモリ管理表３２ａを要求された際、メモリ管理表３２ａの移動必要性１１７を更新するために、そのＯＳ１１ａ上で稼動するすべてのアプリケーション１０ａのメモリ使用状況通知２０ａに、データ領域に関して移行の必要性を問い合わせる（ステップ２４０）。
【００８２】
メモリ使用状況通知２０ａは、例えば、図５に示したアプリケーションメモリ管理表２１ａから、データ領域毎に、データ領域の内容（例えばデータ領域に格納されているデータファイル）が今後も必要か判断し、その判断の結果をＯＳ１１ａに通知する（ステップ２４１）。なお、その際、例えば、メモリ使用状況通知２０（例えばＪａｖａインタプリタ）が、アプリケーション１０ａ内の、仮想メモリ（データ領域）を更新する機能（モジュール）を静止化し、その後で、メモリ使用状況をＯＳ１１ａに通知し、その後に、その機能の静止化を解除する。
【００８３】
ステップ２０２〜２０５、２０８、２１１及び２１２の説明は、図７と同様の為、省略する。
【００８４】
ステップ２０９に含まれるステップ３００（図８参照）で、仮想化機構２ａは、対象メモリ領域について、メモリ管理表３２ａの種別１１３が“データ”で、移動必要性１１７が“不要”であるか否かを判断する。その判断の結果が肯定的の場合、仮想化機構２ａは、対象メモリ領域は、内容のコピーが不要と判断する（ステップ３０６）。仮想化機構２ａは、対象メモリ領域に記憶されているデータファイルを移動させる代わりに、物理メモリ１０３ｂに空き領域を確保し、その空き領域を、移動先サーバ装置１ｂに移動された仮想計算機の仮想メモリに割り当てる（ステップ２１０）。
【００８５】
図１１の例では、対象メモリ領域が、移動対象の仮想計算機３ａの仮想メモリ１９０におけるデータ領域Ｂ１９６である。このデータ領域Ｂ１９６に相当するメモリ領域は移動先物理メモリ１０３ｂには無く、且つ、データ領域Ｂ１９６は移動不要の領域である。このため、このケースでは、ステップ２１０において、対象メモリ領域１９６からファイルが読み出されることは行われず（つまりそのファイルの移動は行われず）、移動先物理メモリ１０３ｂに、データ領域Ｂ１９６と同サイズのメモリ領域１９３が確保され、そのメモリ領域が、サーバ装置１ｂに移動された仮想計算機に割り当てられる仮想メモリ１９１に割り当てられる（データ領域Ｂ１７４を参照）。
【００８６】
以上の実施形態により、仮想計算機３の移動や再開の際に、移動先サーバ装置１に転送するデータの量やストレージ装置５から読込むデータの量を減らすことができ、且つ、そのための移動或いは読込み不要なファイルを、メモリ領域内のファイル同士を比較することなく特定することができる。
【００８７】
以上、本発明の好適な幾つかの実施例を説明したが、本発明は、これらの実施例に限定されるものでなく、その要旨を逸脱しない範囲で種々変更可能であることはいうまでもない。例えば、図には格別示していないが、ＯＳ１１ａは、メモリ管理表３２ａの取得要求に応答して、ＯＳ１１ａ上で稼働する全てのアプリケーション１０ａに、メモリ使用状況を問合せても良い。問合せを受けたアプリケーション１０ａが、その問合せに応答してメモリ使用状況をＯＳ１１ａに通知する。ＯＳ１１ａが、通知されたメモリ使用状況を基にメモリ管理表３２ａを更新し、更新後のメモリ管理表３２ａを仮想化機構２ａに応答する。
【符号の説明】
【００８８】
１ａ，１ｂ…サーバ装置  ２ａ，２ｂ…仮想化機構  ３ａ，３ｂ…仮想計算機  ４…管理サーバ  ５…ストレージ装置  １０ａ，１０ｂ…アプリケーション  １１ａ，１１ｂ…オペレーティングシステム（ＯＳ）
【図１】
2010231684.tif 000003
【図２】
2010231684.tif 000004
【図３】
2010231684.tif 000005
【図４】
2010231684.tif 000006
【図５】
2010231684.tif 000007
【図６】
2010231684.tif 000008
【図７】
2010231684.tif 000009
【図８】
2010231684.tif 000010
【図９】
2010231684.tif 000011
【図１０】
2010231684.tif 000012
【図１１】
2010231684.tif 000013
【図１２】
2010231684.tif 000014