(57)【要約】【課題】  シン形式の仮想ディスク内のスワップ領域へのアクセスに伴う、その仮想ディスクに割り当てられる記憶領域の増加を抑制することができる記憶領域管理装置を提供する。【解決手段】  本発明の記憶領域管理装置は、仮想マシンに割り当てられたストレージ領域である割り当て領域のうちスワップ領域への書き込み要求を検出する要求検出手段と、書き込み要求が検出された前記スワップ領域における、前記書き込み要求によって書き込みが要求されている対象領域と、前記割り当て領域に含まれない他のストレージ領域から前記スワップ領域に割り当てられたスワップ記憶領域における領域とを関連付ける管理手段と、前記対象領域に関連付けられた前記領域である使用領域に対して、前記書き込み要求に基づく書き込みを行う要求実行手段と、を備える。【選択図】      図２０
2015170271.tif 000002
【特許請求の範囲】
【請求項１】
仮想マシンに割り当てられたストレージ領域である割り当て領域のうちスワップ領域への書き込み要求を検出する要求検出手段と、
書き込み要求が検出された前記スワップ領域における、前記書き込み要求によって書き込みが要求されている対象領域と、前記割り当て領域に含まれない他のストレージ領域から前記スワップ領域に割り当てられたスワップ記憶領域における領域とを関連付ける管理手段と、
前記対象領域に関連付けられた前記領域である使用領域に対して、前記書き込み要求に基づく書き込みを行う要求実行手段と、
を備える記憶領域管理装置。
【請求項２】
前記割り当て領域は、当該割り当て領域に対する書き込み要求が行われた場合、当該書き込み要求によって書き込みが行われる領域に記憶領域が割り当てられ、書き込みが行われていない領域には記憶領域が割り当てられない、シン形式の仮想ストレージ領域である
請求項１に記載の記憶領域管理装置。
【請求項３】
前記スワップ記憶領域における、前記対象領域に関連付けられていない領域である解放領域の場所を表す解放領域データ値を記憶する領域情報記憶手段をさらに備え、
前記管理手段は、前記解放領域から、大きさが前記対象サイズである連続した領域を特定し、特定した前記領域を、前記使用領域として前記対象領域に関連付ける
請求項１又は２に記載の記憶領域管理装置。
【請求項４】
前記解放領域の大きさの合計が前記対象サイズ以上であり、大きさが前記対象サイズ以上である連続した前記解放領域が存在しない場合、大きさが前記対象サイズ以上である連続した前記解放領域が生成されるよう、前記使用領域を前記スワップ記憶領域において移動させる再配置手段
を備える請求項１乃至３のいずれかに記載の記憶領域管理装置。
【請求項５】
前記要求検出手段は、さらに、前記対象領域の解放を要求する解放要求を検出し、
前記記憶領域管理装置は、所定条件が満たされない場合、検出された前記解放要求を保持し、所定条件が満たされた場合、保持する全ての前記解放要求によって解放が要求されている前記書き込み領域に関連付けられた前記使用領域の、前記書き込み領域に対する関連付けを解消し、前記関連付けが解消された前記使用領域が、前記解放領域に含まれるよう、前記解放領域データ値を更新する解放手段をさらに備える
請求項請求項１乃至４のいずれかに記載の記憶領域管理装置。
【請求項６】
前再配置手段は、さらに、前記所定条件が満たされた場合、前記使用領域が連続するように、前記スワップ記憶領域内において前記使用領域を移動させる
請求項５に記載の記憶領域管理装置。
【請求項７】
前記仮想マシンの動作の、開始及び停止を検出する動作検出手段と、
前記仮想マシンの起動が検出された場合、前記仮想マシンがアクセスを行う前記記憶領域において、前記スワップ領域を検出するスワップ領域検出手段と、
検出された前記スワップ領域に応じた大きさの前記スワップ記憶領域を前記他の記憶領域において確保し、確保した前記スワップ記憶領域を前記スワップ領域に割り当てる確保手段と、
前記仮想マシンの動作の停止が検出された場合、前記スワップ記憶領域に対する前記スワップ領域の割り当てと、前記他の記憶領域における前記スワップ記憶領域の確保とを解消する削除手段と、
を備える請求項１乃至６のいずれかに記載の記憶領域管理装置。
【請求項８】
前記スワップ記憶領域と前記割り当て領域に割り当てられる記憶領域とを含むストレージ装置と、請求項１乃至７のいずれかに記載の記憶領域管理装置とを含み、
前記仮想マシンを実行する仮想マシン実行手段
を備える情報処理システム。
【請求項９】
仮想マシンに割り当てられたストレージ領域である割り当て領域のうちスワップ領域への書き込み要求を検出し、
書き込み要求が検出された前記スワップ領域における、前記書き込み要求によって書き込みが要求されている対象領域と、前記割り当て領域に含まれない他のストレージ領域から前記スワップ領域に割り当てられたスワップ記憶領域における領域とを関連付け、
前記対象領域に関連付けられた前記領域である使用領域に対して、前記書き込み要求に基づく書き込みを行う、
記憶領域管理方法。
【請求項１０】
コンピュータを、
仮想マシンに割り当てられたストレージ領域である割り当て領域のうちスワップ領域への書き込み要求を検出する要求検出手段と、
書き込み要求が検出された前記スワップ領域における、前記書き込み要求によって書き込みが要求されている対象領域と、前記割り当て領域に含まれない他のストレージ領域から前記スワップ領域に割り当てられたスワップ記憶領域における領域とを関連付ける管理手段と、
前記対象領域に関連付けられた前記領域である使用領域に対して、前記書き込み要求に基づく書き込みを行う要求実行手段と、
して動作させる記憶領域管理プログラム。
【発明の詳細な説明】
【技術分野】
【０００１】
本発明は、記憶領域の割り当てを管理する技術に関する。
【背景技術】
【０００２】
特許文献１には、仮想マシンが稼働する仮想サーバが記載されている。仮想マシンには、ストレージ上にある専用のスワップディスクが割り当てられている。特許文献１の仮想サーバは、スワップディスクに対するＩ／Ｏ（Ｉｎｐｕｔ／Ｏｕｔｐｕｔ）をキャッシュするスワップドライブ用メモリを備える。
【０００３】
特許文献２には、スワップ領域が不足した場合にスワップファイルを作成し、作成したスワップファイルをスワップ領域に追加し、スワップ領域が余った場合には追加したスワップファイルを削除する計算機が記載されている。
【０００４】
特許文献３には、アプリケーションプログラムの起動時に、アプリケーションプログラムの起動に必要なメモリ容量が実装メモリ容量より小さい場合、必要なサイズのスワップ領域を磁気ディスク装置の空き領域に割り当てる情報処理装置が記載されている。特許文献３の情報処理装置は、アプリケーションプログラムの終了時に、割り当てたスワップ領域を解放する。
【先行技術文献】
【特許文献】
【０００５】
【特許文献１】特開２０１３−１９６４２１号公報
【特許文献２】特開平６−０５２０５９号公報
【特許文献３】特開平６−１６８１８４号公報
【発明の概要】
【発明が解決しようとする課題】
【０００６】
仮想ディスクに使用する記憶領域を削減する方法として、シンプロビジョニングと呼ばれる方法がある。シンプロビジョニングでは、仮想ディスクを提供するストレージシステムは、初期状態において、例えば仮想ディスクとして設定されている記憶領域全体ではなく仮想ディスクの一部の領域にのみ記憶領域を割り当てる。そして、ストレージシステムは、仮想ディスクの使用量に応じて、その仮想ディスクに割り当てられる記憶領域を追加する。例えば、仮想ディスクに対して書き込みが行われると、ストレージシステムは、仮想ディスクの書き込みが行われた部分に新たに記憶領域を割り当てる。そして、ストレージシステムは、その割り当てられた記憶領域に書き込まれたデータを格納する。情報処理装置は、シンプロビジョニングに基づき構築された仮想ディスクに対して、シンプロビジョニングによらないディスクに対してアクセスする場合と同様にアクセスする。以下の説明において、シンプロビジョニングによって構築された仮想ディスクを、シン形式の仮想ディスク、あるいは、単に、シンディスクと表記することにする。
【０００７】
多くのファイルシステムでは、記憶領域の断片化を避けるために、ストレージに格納されているデータの削除は、削除されるデータのメタデータを、未使用であることを表す値に変更することによって行われる。そして、ストレージに新たに格納されるデータは、ファイルシステムが作成されてからデータが書き込まれたことがない領域が存在すれば、その領域に書き込まれる。
【０００８】
シンディスクにおいてこのようなファイルシステムを使用する場合、データの書き込み及び削除の回数が多くなるに従って、シンディスクに割り当てられている記憶領域は増加する。シンディスクにスワップ領域が割り当てられている場合、スワップの発生に応じて、シンディスクに割り当てられる記憶領域が増加する。
【０００９】
特許文献１の技術では、スワップドライブ用メモリの容量を超える書き込みがスワップ領域に発生した場合、スワップディスクに対して書き込みが発生する。特許文献１の技術では、スワップディスクがシンディスクである場合に、スワップディスクに対する書き込みに応じた、シンディスクに割り当てられる記憶領域の増加を抑制することはできない。
【００１０】
特許文献２に記載されている計算機は、必要に応じてスワップファイルを作成する。そして、特許文献２に記載されている計算機は、作成したスワップファイルが不要になった場合、そのスワップファイルを削除する。スワップファイルがシンディスクに作成される場合、そのシンディスクに割り当てられる記憶領域の量は、スワップファイルの作成と削除の繰り返しに応じて増加する。
【００１１】
特許文献３に記載されている情報処理装置は、磁気ディスク装置の空き領域にスワップ領域を作成する。そして、特許文献３に記載されている情報処理装置は、作成されたスワップ領域が不要になった場合、そのスワップ領域を削除する。磁気ディスク装置が、シンプロビジョニングに基づき構築されている仮想的な磁気ディスク装置である場合、その仮想的な磁気ディスク装置に割り当てられる記憶領域の容量は、スワップ領域の作成と削除の繰り返しに応じて増加する。
【００１２】
すなわち、特許文献１及び２の技術では、情報処理装置がアクセスする記憶装置がシンディスクである場合、その記憶装置内のスワップ領域に対する書き込み及び削除に応じて増加する、その記憶装置に割り当てられる記憶領域の増加を抑制することはできない。
【００１３】
本発明の目的の一つは、シン形式の仮想ディスク内のスワップ領域へのアクセスに伴う、その仮想ディスクに割り当てられる記憶領域の増加を抑制することができる記憶領域管理装置を提供することである。
【課題を解決するための手段】
【００１４】
本発明の記憶領域管理装置は、仮想マシンに割り当てられたストレージ領域である割り当て領域のうちスワップ領域への書き込み要求を検出する要求検出手段と、書き込み要求が検出された前記スワップ領域における、前記書き込み要求によって書き込みが要求されている対象領域と、前記割り当て領域に含まれない他のストレージ領域から前記スワップ領域に割り当てられたスワップ記憶領域における領域とを関連付ける管理手段と、前記対象領域に関連付けられた前記領域である使用領域に対して、前記書き込み要求に基づく書き込みを行う要求実行手段と、を備える。
【００１５】
本発明の記憶領域管理方法は、仮想マシンに割り当てられたストレージ領域である割り当て領域のうちスワップ領域への書き込み要求を検出し、書き込み要求が検出された前記スワップ領域における、前記書き込み要求によって書き込みが要求されている対象領域と、前記割り当て領域に含まれない他のストレージ領域から前記スワップ領域に割り当てられたスワップ記憶領域における領域とを関連付け、前記対象領域に関連付けられた前記領域である使用領域に対して、前記書き込み要求に基づく書き込みを行う。
【００１６】
本発明の記憶領域管理プログラムは、コンピュータを、仮想マシンに割り当てられたストレージ領域である割り当て領域のうちスワップ領域への書き込み要求を検出する要求検出手段と、書き込み要求が検出された前記スワップ領域における、前記書き込み要求によって書き込みが要求されている対象領域と、前記割り当て領域に含まれない他のストレージ領域から前記スワップ領域に割り当てられたスワップ記憶領域における領域とを関連付ける管理手段と、前記対象領域に関連付けられた前記領域である使用領域に対して、前記書き込み要求に基づく書き込みを行う要求実行手段と、して動作させる。
【発明の効果】
【００１７】
本発明には、シン形式の仮想ディスク内のスワップ領域へのアクセスに伴う、その仮想ディスクに割り当てられる記憶領域の増加を抑制することができるという効果がある。
【図面の簡単な説明】
【００１８】
【図１】図１は、第１の実施形態の情報処理システム１００の構成を表す図である。
【図２】図２は、シンプロビジョニングによって構築された仮想ディスクであるシンディスクを模式的に表す図である
【図３】図３は、再配置前後の使用領域及び解放領域の配置を模式的に表す図である。
【図４】図４は、領域情報記憶部１３が記憶する、互いに関連付けられた対象領域及び使用領域の場所の例を模式的に表す図である。
【図５】図５は、領域情報記憶部１３が記憶する、互いに関連付けられた対象領域及び使用領域の場所の第２の例を模式的に表す図である。
【図６】図６は、領域情報記憶部１３が記憶する、解放領域の場所の例を模式的に表す図である。
【図７】図７は、領域情報記憶部１３が記憶する、解放領域の場所の第２の例を模式的に表す図である。
【図８】図８は、第１の実施形態の記憶領域管理装置１の、仮想マシン２０が動作を開始した場合における動作の例を表すフローチャートである。
【図９】図９は、第１の実施形態の記憶領域管理装置１の、仮想マシン２０が停止する場合における動作の例を表すフローチャートである。
【図１０】図１０は、第１の実施形態の記憶領域管理装置１の、仮想マシン２０がアクセス要求を送信した場合における動作の例を表すフローチャートである。
【図１１】図１１は、第１の実施形態の記憶領域管理装置１の、仮想マシン２０が解放要求コマンドを送信する場合における動作の例を表すフローチャートである。
【図１２】図１２は、第１の実施形態に基づく実装例の機能を模式的に表す図である。
【図１３】図１３は、ハイパーバイザ２２Ａにおいて仮想マシン２０が起動する場合に動作する機能を模式的に表すブロック図である。
【図１４】図１４はハイパーバイザ２２Ａにおいて仮想マシン２０が停止する場合に動作する機能を模式的に表すブロック図である。
【図１５】図１５は、ゲストＯＳ２１がＩ／Ｏを実施した場合に動作する機能を模式的に表すブロック図である。
【図１６】図１６は、ゲストＯＳ２１の領域解放機能１０２が領域解放要求が行った場合に動作する機能を模式的に表すブロック図である。
【図１７】図１７は、解放領域管理機能２０４がスワップ領域ファイル３０２の容量を削減する場合に動作する機能を模式的に表すブロック図である。
【図１８】図１８は、記憶領域管理装置１の、仮想マシン２０が領域解放コマンドを送信した場合における動作の例を表すフローチャートである。
【図１９】図１９は、記憶領域管理装置１の、使用領域の再配置を行う動作の例を表すフローチャートである。
【図２０】図２０は、本実施形態の記憶領域制御装置１Ａの構成を表すブロック図である。
【図２１】図２１は、記憶領域管理装置１、記憶領域管理装置１Ａ、情報処理装置２、情報処理装置２Ａを実現することができる、コンピュータ１０００の構成の一例を表す図である。
【発明を実施するための形態】
【００１９】
次に、本発明の実施の形態について説明する。
【００２０】
＜第１の実施形態＞
まず、本発明の第１の実施形態について、図面を参照して詳細に説明する。
【００２１】
図１は、本実施形態の情報処理システム１００の構成を表す図である。
【００２２】
図１を参照すると、本実施形態は、情報処理装置２と、ストレージ装置３とを含む。情報処理装置２及びストレージ装置３は、互いに接続されている。情報処理装置２は、記憶領域管理装置１を含む。
【００２３】
記憶領域管理装置１は、要求検出部１０と、管理部１１と、要求実行部１２と、領域情報記憶部１３と、再配置部１４と、解放部１５と、動作検出部１６と、スワップ領域検出部１７と、削除部１８と、確保部１９とを含む。
【００２４】
情報処理装置２は、更に、仮想マシン２０を実行する仮想マシン実行部２２を含む。仮想マシン２０において、ゲストＯＳ（Ｏｐｅｒａｔｉｎｇ  Ｓｙｓｔｅｍ）２０１が動作している。仮想マシン実行部２２は、一般に、ハイパーバイザと呼ばれる、仮想マシン２０を実現するソフトウェアと、ハイパーバイザを実行する、情報処理装置２のプロセッサとによって実現される。仮想マシン２０は、エミュレートされたコンピュータである。仮想マシン２０で動作するゲストＯＳ２１において、アプリケーションプログラムが動作していてもよい。以下では、仮想マシン２０の数は１台である場合について説明する。しかし、複数の仮想マシン２０が動作していてもよい。
【００２５】
なお、ハイパーバイザが記憶領域管理装置１の各構成要素を実現する機能を備えていてもよい。そして、ハイパーバイザを実行するプロセッサが、記憶領域管理装置１として動作してもよい。
【００２６】
以下の説明において、ゲストＯＳ２１を実行するプロセッサが、アクセス要求を送信することを、「仮想マシン２０がアクセス要求を送信する」と表記する。同様に、ゲストＯＳ２１において動作するアプリケーションプログラムが、ゲストＯＳ２１を介してアクセス要求を送信することも、「仮想マシン２０がアクセス要求を送信する」と表記する。
【００２７】
アクセス要求は、例えば、後述の割り当て領域３０１に対するアクセス要求である。アクセス要求は、例えば、割り当て領域３０１に格納されているデータを読み出す要求である読み出し要求である。アクセス要求は、例えば、割り当て領域３０１にデータを書き込む要求である書き込み要求である。アクセス要求は、例えば、スワップ領域において使用されている領域の少なくとも一部を、使用しない状態に戻す要求である解放要求である。要求は、要求の種別と、要求の対象である領域を表すデータ値とを含む。アクセス要求は、他の要求であってもよい。要求の種別は、例えば、書き込み、読み出し、解放などである。要求の対象である領域は、例えば、アクセス要求を送信する情報処理装置２に割り当てられている記憶領域のうち、アクセス要求によってアクセスが行われる範囲である。以下の説明において、要求の対象である領域を、対象領域と表記することにする。アクセス要求が読み出し要求である場合、アクセス領域は、読み出されるデータが格納されている範囲である。アクセス要求が書き込み要求である場合、アクセス領域は、書き込みが行われる領域である。アクセス要求が解放要求である場合、対象領域は、使用しない状態に戻される領域である。以下の説明において、アクセス要求を、要求コマンドとも表記することにする。
【００２８】
ストレージ装置３は、上述のシンディスクとして構築された記憶領域である割り当て領域３０１と、スワップ記憶領域３０２とを含む。以下の説明において、割り当て領域３０１を、シンディスク３０１とも表記することにする。ストレージ装置３は、例えば、１台以上の記憶装置によって実現される。記憶装置は、例えば、ハードディスク装置や、ＳＳＤ（Ｓｏｌｉｄ  Ｓｔａｔｅ  Ｄｒｉｖｅ）等である。スワップ記憶領域３０２は、割り当て領域３０１とは別の記憶領域である。スワップ記憶領域３０２は、割り当て領域３０１とは別の記憶領域に作成されたファイルであってもよい。以下の説明において、スワップ記憶領域３０２を、スワップ領域ファイル３０２とも表記することにする。
【００２９】
図２は、シンディスク、すなわち、シンプロビジョニングによって構築された仮想ディスクを模式的に表す図である。ストレージ領域は、ハードディスク装置や他の記憶装置によって実現されている記憶領域である。仮想ディスク１と仮想ディスク２は、例えば、図示されないストレージコントローラによって、シンプロビジョニングによって構築された、仮想的な記憶装置である。仮想ディスクを使用する情報処理装置２は、仮想ディスクに対して、物理的な記憶装置に対してアクセスするのと同様にアクセスすることができる。ただし、情報処理装置２から仮想ディスクの記憶領域としてアクセス可能な記憶領域のうち、使用されている領域にのみ、ストレージ領域から記憶領域が割り当てられている。使用されている領域は、例えば、一度でもデータが書き込まれた領域である。使用されている領域ではない領域には、記憶領域は割り当てられない。図２に示す例では、仮想ディスク１及び仮想ディスク２の書き込み済み領域に、ストレージ領域から記憶領域が割り当てられている。書き込み済み領域が、上述の使用されている領域である。
【００３０】
割り当て領域３０１は、仮想マシン２０に割り当てられている記憶領域である。仮想マシン２０が送信するアクセス要求によるアクセスの対象である対象領域は、割り当て領域３０１に含まれるいずれかの領域である。
【００３１】
スワップ記憶領域３０２は、割り当て領域３０１とは別の記憶領域に存在する記憶領域である。スワップ記憶領域３０２は、シン形式のディスクにおける記憶領域に確保されていてもよい。スワップ記憶領域３０２は、シン形式のディスクにおける記憶領域に確保されていなくてもよい。
【００３２】
以下では、主に、仮想マシン２０は１台であり、割り当て領域３０１に含まれるスワップ領域は１つであり、スワップ記憶領域３０２は１つである場合について説明を行う。仮想マシン２０、割り当て領域３０１に含まれるスワップ領域、及びスワップ記憶領域３０２は、それぞれ複数であってもよい。
【００３３】
次に、記憶領域管理装置１の構成要素について説明する。
【００３４】
動作検出部１６は、仮想マシン２０の起動と、仮想マシン２０の動作の停止とを検出する。起動は、仮想マシン２０が動作を開始することである。起動は、サスペンド状態からの復帰を含む。動作の停止は、サスペンド状態への移行を含む。仮想マシン２０の起動が検出された場合、動作検出部１６は、さらに、仮想マシン２０の起動がサスペンド状態からの復帰であるか否かを検出してもよい。
【００３５】
仮想マシン２０の起動が検出された場合、動作検出部１６は、起動が検出された仮想マシン２０のスワップ領域に関連付けられているスワップ記憶領域３０２が存在するか否かを判定する。仮想マシン２０の起動が検出され、更に、検出された起動がサスペンド状態からの復帰である場合に、動作検出部１６は、起動が検出された仮想マシン２０のスワップ領域に関連付けられているスワップ記憶領域３０２が存在するか否かを判定してもよい。
【００３６】
スワップ記憶領域３０２が、ストレージ装置３が含む記憶領域に作成されたファイルである場合、前述のように、スワップ記憶領域３０２は、スワップ領域ファイル３０２とも表記される。その場合、動作検出部１６は、起動が検出された仮想マシン２０に関連付けられている、スワップ領域ファイル３０２が存在するか否かを判定すればよい。さらに、仮想マシン２０が一台である場合、動作検出部１６は、スワップ領域ファイル３０２が存在するか否かを判定すればよい。
【００３７】
起動が検出された仮想マシン２０のスワップ領域に関連付けられているスワップ記憶領域３０２が存在する場合、記憶領域管理装置１は、その仮想マシン２０のスワップ領域に、存在することが判定されたスワップ記憶領域３０２が関連付けられた状態を継続させる。
【００３８】
起動が検出された仮想マシン２０のスワップ領域に関連付けられているスワップ記憶領域３０２が存在しない場合、スワップ領域検出部１７は、起動が検出された仮想マシン２０に割り当てられている割り当て領域３０１を開く。そして、スワップ領域検出部１７は、割り当て領域３０１において、スワップ領域を検出し、検出されたスワップ領域の場所を特定する。スワップ領域検出部１７は、検出されたスワップ領域の場所を、例えば、領域情報記憶部１３に格納すればよい。スワップ領域検出部１７は、検出されたスワップ領域の場所を、確保部１９に送信してもよい。スワップ領域や他の領域の場所は、例えば、その領域の先頭アドレスとその領域の大きさとによって表される。あるいは、スワップ領域や他の領域の場所は、例えば、その領域の先頭アドレスとその領域の末尾アドレスとによって表されてもよい。スワップ領域の場所を表すアドレスは、例えば、仮想マシン２０による割り当て領域３０１に対するアクセスにおいて使用される論理アドレスによって表されて入ればよい。
【００３９】
確保部１９は、仮想マシン２０の起動が検出された場合、スワップ記憶領域３０２を作成する。確保部１９は、さらに、領域情報記憶部１３に格納されている、後述の解放領域リストを初期化する。後述されるように、解放領域は、少なくとも一度、スワップ記憶領域３０２としてデータが書き込まれ、その後、後述される領域の解放が行われた記憶領域である。解放領域リストは、それぞれの解放領域の位置の集合である。確保部１９は、さらに、例えば管理部１１からの確保指示に基づき、確保されているスワップ記憶領域３０２の大きさを拡張する。確保指示は、サイズを含んでいればよい。確保部１９は、例えば、存在するスワップ記憶領域３０２の末尾の次のアドレスが先頭である、指示に基づくサイズの記憶領域を確保し、確保した記憶領域をスワップ記憶領域３０２に併合すればよい。
【００４０】
確保部１９は、例えば、仮想マシン２０の起動が検出された場合、ストレージ装置３に含まれ、割り当て領域３０１とは異なる記憶領域において、スワップ記憶領域３０２の初期位置を決定する。
【００４１】
確保部１９は、スワップ記憶領域３０２の初期位置として、スワップ記憶領域３０２の先頭アドレスを決定すればよい。確保部１９は、例えば、スワップ記憶領域３０２が確保される記憶領域の先頭アドレスを、スワップ記憶領域３０２の先頭アドレスにすればよい。
【００４２】
確保部１９は、スワップ記憶領域３０２の初期位置として、スワップ記憶領域３０２の先頭アドレスのみを決定してもよい。その場合、スワップ記憶領域３０２がスワップ領域ファイル３０２であれば、確保部１９は、例えば、サイズが０のスワップ領域ファイル３０２ファイルを作成すればよい。
【００４３】
確保部１９は、さらに、決定された先頭アドレスによって表される位置を先頭とする、所定の大きさのスワップ記憶領域３０２を確保してもよい。そして、確保部１９は、スワップ記憶領域３０２の、例えば先頭アドレスと大きさによって表される場所を、領域情報記憶部１３に格納してもよい。
【００４４】
少なくとも一つの解放領域の場所を含む解放領域リストが存在する場合、確保部１９は、その解放領域リストを削除することによって、解放領域リストの初期化を行えばよい。解放領域リストが存在しない場合、確保部１９は、解放領域リストの初期化として、何もしなくてよい。
【００４５】
動作検出部１６によって、仮想マシン２０の動作の停止が検出された場合、削除部１８は、確保されているスワップ記憶領域３０２の解放が可能か否かを判定する。スワップ記憶領域３０２がファイルによって実現されている場合、削除部１８は、スワップ記憶領域３０２であるスワップ領域ファイル３０２の削除が可能か否かを判定すればよい。
【００４６】
削除部１８は、例えば、スワップ記憶領域３０２にダンプファイルが格納されているか否かを判定することによって、スワップ記憶領域３０２の解放が可能か否かを判定すればよい。スワップ記憶領域３０２にダンプファイルが格納されている場合、削除部１８は、スワップ記憶領域３０２の解放が可能ではないと判定すればよい。スワップ記憶領域３０２にダンプファイルが格納されていない場合、削除部１８は、スワップ記憶領域３０２の解放が可能であると判定すればよい。削除部１８は、まず、仮想マシン２０の動作の停止が、サスペンド状態への移行であるか否かを判定してもよい。その場合、仮想マシン２０の動作の停止がサスペンド状態への移行である場合、削除部１８は、スワップ記憶領域３０２の解放が可能ではないと判定すればよい。仮想マシン２０の動作の停止がサスペンド状態への移行でない場合、削除部１８は、さらに、スワップ記憶領域３０２にダンプファイルが格納されているか否かを判定することによって、スワップ記憶領域３０２の解放が可能か否かを判定すればよい。
【００４７】
判定の結果、確保されているスワップ記憶領域３０２の解放が可能である場合、削除部１８は、スワップ記憶領域３０２を解放する。すなわち、削除部１８は、仮想マシン２０のスワップ領域に対するスワップ記憶領域３０２の割り当てを解除する。さらに、ストレージ装置３に含まれる、割り当て領域３０１ではない記憶領域に確保されている、スワップ記憶領域３０２を解放する。スワップ記憶領域３０２がファイルによって実現されている場合、削除部１８は、スワップ記憶領域３０２であるスワップ領域ファイル３０２を削除すればよい。
【００４８】
要求検出部１０は、仮想マシン２０が送信するアクセス要求を検出する。そして、要求検出部１０は、検出したアクセス要求に基づき、要求の種別と対象領域とを特定する。さらに、要求検出部１０は、受信したアクセス要求に基づき特定された対象領域が、割り当て領域３０１のうちスワップ領域に含まれるか否かを、例えば対象領域の場所とスワップ領域の場所を比較することによって判定する。割り当て領域３０１におけるスワップ領域の場所は、例えば、領域情報記憶部１３に格納されていればよい。
【００４９】
特定された対象領域が、割り当て領域３０１のスワップ領域に含まれない場合、管理部１１は、要求検出部１０によって検出されたアクセス要求を、そのまま要求実行部１２に送信する。
【００５０】
アクセス要求を受信した要求実行部１２は、アクセス要求に応じたアクセスを行う。特定された対象領域が、割り当て領域３０１のスワップ領域に含まれない場合、要求実行部１２が行うアクセスのアクセス先は、割り当て領域３０１である。
【００５１】
特定された対象領域が、割り当て領域３０１のスワップ領域に含まれる場合、要求検出部１０は、さらに、アクセス要求の種別を特定する。
【００５２】
特定されたアクセス要求の種別が読み出しである場合、管理部１１は、検出されたアクセス要求によってアクセスされる対象領域に関連付けられている、スワップ記憶領域３０２に含まれる領域を特定する。後述されるように、対象領域と、スワップ記憶領域３０２に含まれる領域との間の関連付けを表す情報は、領域情報記憶部１３に格納されていればよい。管理部１１は、領域情報記憶部１３に格納されている対象領域と、スワップ記憶領域３０２に含まれる領域との間の関連付けを表す情報に基づき、対象領域に関連付けられている、スワップ記憶領域３０２に含まれる領域を特定すればよい。
【００５３】
特定されたアクセス要求の種別が書き込みである場合、管理部１１は、検出されたアクセス要求によってアクセスされる対象領域が、スワップ記憶領域３０２に含まれるいずれかの領域に関連付けられているか判定する。検出されたアクセス要求によってアクセスされる対象領域が、スワップ記憶領域３０２に含まれる領域に関連付けられている場合、管理部１１は、その対象領域に関連付けられている領域の、例えば先頭アドレスを、要求実行部１２に送信する。その場合、管理部１１は、検出されたアクセス要求と、そのアクセス要求によってアクセスされる領域の先頭アドレスとして、対象領域に関連付けられている領域の先頭アドレスを、要求実行部１２に送信すればよい。
【００５４】
検出されたアクセス要求によってアクセスされる対象領域が、スワップ記憶領域３０２に含まれるいずれの領域にも関連付けられていない場合、管理部１１は、その対象領域にスワップ記憶領域３０２に含まれる領域を関連付ける。管理部１１が対象領域に新たに関連付ける領域は、例えば、その対象領域の大きさ以上の大きさである、連続した、他のいずれの対象領域にも関連付けられていない領域である。
【００５５】
管理部１１は、まず、領域情報記憶部１３に格納されている解放領域リストに基づき、大きさが対象領域の大きさ以上である、連続した解放領域の有無を判定する。大きさが対象領域の大きさ以上である、連続した解放領域が存在する場合、管理部１１は、例えばその解放領域の先頭を先頭とする、対象領域の大きさ以上の大きさの領域を、使用領域として、対象領域に関連付ければよい。そして、管理部１１は、使用領域として対象領域に関連付けた記憶領域の先頭アドレスを、要求実行部１２に送信すればよい。
【００５６】
大きさが対象領域の大きさ以上である、連続した解放領域が存在しない場合、管理部１１は、解放領域の大きさの合計が、対象領域の大きさ以上であるか判定する。解放領域の大きさの合計が、対象領域の大きさ以上である場合、再配置部１４に、対象領域の大きさと、使用領域の再配置の要求とを送信する。本実施形態の説明において、「使用領域の再配置」は、使用領域が連続するように、スワップ記憶領域３０２内で使用領域を移動させることである。以下の説明において、「使用領域の再配置」は、「デフラグ」とも表記することにする。
【００５７】
対象領域の大きさと、使用領域の再配置の要求とを受信した再配置部１４は、例えば、大きさが対象領域の大きさ以上である、連続した解放領域が生成されるまで、スワップ記憶領域３０２内で使用領域を移動させる。再配置部１４は、使用領域がスワップ記憶領域３０２内で連続するように、使用領域を移動させればよい。言い換えると、再配置部１４は、使用領域の再配置を行うことによって、スワップ記憶領域３０２に、大きさが対象領域の大きさ以上である、連続した解放領域を生成する。
【００５８】
なお、管理部１１は、再配置部１４に対して、対象領域の大きさを送信せず、使用領域を再配置する要求のみを送信してもよい。その場合、再配置部１４は、例えば、全ての使用領域がスワップ記憶領域３０２内で連続するように、使用領域を移動させればよい。管理部１１は、例えば、使用領域が移動した後の、大きさが対象領域の大きさ以上である解放領域の先頭を先頭とする、対象領域の大きさ以上の大きさの領域を、使用領域として、対象領域に関連付ければよい。そして、管理部１１は、使用領域として対象領域に関連付けた記憶領域の先頭アドレスを、要求実行部１２に送信すればよい。
【００５９】
図３は、再配置前後の使用領域及び解放領域の配置を模式的に表す図である。例えば、図３の左側に示す「再配置前の配置」によって表される位置に使用領域が存在する場合、使用領域は連続していない。また、解放領域は２つに分断されている。図３の左側に示すように使用領域及び解放領域が配置されているスワップ記憶領域３０２に対して、再配置部１４が再配置を行う場合、再配置部１４は、図３の右側に示す配置になるよう、使用領域を移動させる。再配置部１４は、まず、移動前の使用領域に格納されているデータを、移動後の使用領域の位置に格納する。そして、再配置部１４は、領域往訪記憶部１１に格納されている使用領域の場所及び解放領域の場所を、移動後の使用領域の場所に合わせて更新する。使用領域及び解放領域の場所は、例えば、それらの領域の先頭アドレス及び大きさによって表されていればよい。使用領域及び解放領域の場所は、例えば、それらの領域の先頭アドレス及び末尾アドレスによって表されていてもよい。使用領域及び解放領域の場所を表すアドレスは、例えば、記憶領域管理装置１の各構成要素がスワップ領域３０２に対してアクセスを行う際使用する、共通のアドレスであればよい。
【００６０】
再配置部１４は、さらに、解放領域をスワップ記憶領域３０２から除外することによって、スワップ記憶領域３０２のサイズを縮小してもよい。
【００６１】
再配置部１４が行った再配置により、大きさが対象領域の大きさ以上である、連続した解放領域が生成されると、管理部１１は、例えば、その連続した解放領域のうち、対象領域の大きさ以上の領域を、使用領域として、対象領域に関連付ける。
【００６２】
管理部１１は、使用領域に関連付けた対象領域の場所と、その対象領域に関連付けた使用領域の場所とを、例えば、領域情報記憶部１３に格納する。前述のように、対象領域や使用領域などの記憶領域の場所は、例えば、その記憶領域の先頭アドレスと、領域のサイズとによって表される。
【００６３】
領域情報記憶部１３は、互いに関連付けられた対象領域及び使用領域の、それぞれの場所を記憶する。また、領域情報記憶部１３は、解放領域の場所を記憶する。さらに、領域情報記憶部１３は、スワップ記憶領域３０２の場所を記憶する。領域情報記憶部１３は、さらに、割り当て領域３０１における、スワップ領域の場所を記憶していてもよい。前述のように、領域情報記憶部１３が記憶する、解放領域の場所を表すデータが、解放領域リストである。解放領域リストは、テーブルの形で領域情報記憶部１３に格納されていてもよい。
【００６４】
図４は、領域情報記憶部１３が記憶する、互いに関連付けられた対象領域及び使用領域の場所の例を模式的に表す図である。図４に示す例では、対象領域の先頭アドレス及びサイズと、使用領域の先頭アドレス及びサイズとが、関連付けられている。前述のように、記憶領域の先頭アドレス及びサイズが、記憶領域の場所を表す。対象領域のアドレスは、仮想マシン２０が割り当て領域３０１におけるアクセス先の指定に使用するアドレスである。使用領域のアドレスは、記憶領域管理装置１がスワップ記憶領域３０２におけるアクセス先の指定に使用するアドレスである。
【００６５】
図５は、領域情報記憶部１３が記憶する、互いに関連付けられた対象領域及び使用領域の場所の第２の例を模式的に表す図である。複数の仮想マシン２０が存在する場合、図５に示す例のように、対象領域の場所に、仮想マシン２０の識別子である仮想マシンＩＤが含まれていればよい。仮想マシン２０の数が１台である場合、対象領域の場所に仮想マシンＩＤは含まれていなくてよい。さらに、複数のスワップ記憶領域３０２が存在する場合、使用領域の場所に、スワップ記憶領域３０２の識別子である領域ＩＤが含まれていればよい。１つのスワップ記憶領域３０２しか確保されない場合、使用領域の場所に領域ＩＤは含まれていなくてよい。
【００６６】
図６は、領域情報記憶部１３が記憶する、解放領域の場所の例を模式的に表す図である。本実施形態の説明において、各解放領域の場所を表す解放領域リストを、解放領域データ値とも表記することにする。解放領域のアドレスは、記憶領域管理装置１がスワップ記憶領域３０２におけるアクセス先の指定に使用するアドレスである。
【００６７】
図７は、領域情報記憶部１３が記憶する、解放領域の場所の第２の例を模式的に表す図である。図７に示す例のように、複数のスワップ記憶領域３０２が存在する場合、解放領域の場所に、スワップ記憶領域３０２の識別子である領域ＩＤが含まれていればよい。１つのスワップ記憶領域３０２しか確保されない場合、解放領域の場所に領域ＩＤは含まれていなくてよい。
【００６８】
以上のように、対象領域に関連付けられた使用領域が存在する場合、管理部１１は、要求検出部１０が受信したアクセス要求に基づくアクセスの対象である対象領域に関連付けられた使用領域の、例えば先頭アドレスを、要求実行部１２に送信すればよい。解放領域において確保した使用領域を対象領域に関連付けた場合も同様に、管理部１１は、要求検出部１０が受信したアクセス要求に基づくアクセスの対象である対象領域に関連付けられた使用領域の、例えば先頭アドレスを、要求実行部１２に送信すればよい。
【００６９】
解放領域の大きさの合計が、対象領域の大きさより小さい場合、管理部１１は、例えば、既存の使用領域の最終アドレスの次のアドレスを先頭とする、対象領域の大きさに基づき決定される大きさの領域を、使用領域として、対象領域に関連付ければよい。そして、管理部１１は、その対象領域に関連する使用領域の先頭アドレスとして、既存の使用領域最終アドレスの次のアドレスを、要求実行部１２に送信してもよい。この場合、スワップ記憶領域３０２は、十分大きい記憶領域内に確保されていればよい。そして、スワップ記憶領域３０２に連続する十分広い記憶領域がスワップ記憶領域３０２として確保可能であればよい。
【００７０】
この場合、管理部１１は、受信した書き込み要求によるアクセスの対象である対象領域に関連付けられた使用領域の先頭アドレスを要求実行部１２に送信する前に、スワップ記憶領域３０２を拡張すればよい。スワップ記憶領域３０２の拡張される部分の大きさである拡張サイズは、スワップ記憶領域３０２の末尾のアドレスと、既存の使用領域の末尾に追加された、対象領域に関連付けられた使用領域の末尾のアドレスとの差であればよい。
【００７１】
なお、解放領域の大きさの合計が、対象領域の大きさより小さい場合、管理部１１は、まず、再配置部１４に、再配置の指示を行ってもよい。そして、管理部１１は、再配置の後における、既存の使用領域の最終アドレスの次のアドレスを先頭とする、対象領域の大きさに基づき決定される大きさの領域を、使用領域として、対象領域に関連付けてもよい。
【００７２】
要求検出部１０によって検出されたアクセス要求において特定されたアクセスの種別が解放である場合、解放部１５は、そのアクセス要求における対象領域を解放する。すなわち、解放部１５は、そのアクセス要求における対象領域と、その対象領域に関連付けられている使用領域との間の関連付けを解消する。対象領域の解放は、例えば、仮想マシン２０が、スワップ領域の一部として使用していた対象領域を、スワップ領域として使用しなくなることである。
【００７３】
スワップ記憶領域３０２がスワップ領域ファイル３０２である場合、解放部１５は、例えば、解放の対象である対象領域をスワップ領域ファイル３０２から除外し、スワップ領域ファイル３０２のサイズを縮小する処理を行ってもよい。その場合、解放部１５は、解放領域リストを更新すればよい。すなわち、解放部１５は、解放によってスワップ領域ファイル３０２から除外された領域の場所を表すデータ値を、領域情報記憶部１３に格納する。
【００７４】
また、解放部１５は、例えば、領域情報記憶部１３に格納されている、その対象領域の場所と、その対象領域の場所に関連付けられている使用領域の場所とを消去すればよい。このことによって、解放部１５は、種別が解放であるアクセス要求の対象領域と、その対象領域に関連付けられている使用領域との間の関連付けを解消すればよい。すなわち、解放部１５は、種別が解放であるアクセス要求の対象領域の場所とその対象領域に関連付けられている使用領域の場所とを、領域情報記憶部１３から削除することによって、その対象領域を解放すればよい。
【００７５】
解放部１５は、さらに、解放された対象領域に関連付けられていた使用領域が解放領域に含まれるように、領域情報記憶部１３に格納されている解放領域リストすなわち解放領域データ値を更新する。解放領域リストすなわち解放領域データ値が、例えば図４に示す、使用領域の場所によって表されている場合、解放された対象領域に関連付けられていた使用領域の場所が上述のように削除されることによって、場所が削除された使用領域は解放領域に追加される。領域情報記憶部１３が、例えば図５に示す例のような解放領域リストを記憶している場合、解放部１５は、例えば、種別が解放であるアクセス要求の対象領域に関連付けられている使用領域の場所を、解放領域リストに追加すればよい。
【００７６】
なお、解放部１５は、要求検出部１０によって検出された、アクセスの種別が解放であるアクセス要求を、所定の条件が満たされるまで保持していてもよい。解放部１５は、アクセスの種別が解放であるアクセス要求ではなく、アクセスの種別が解放であるアクセス要求によって解放される対象記憶領域である解放対象領域の場所を、所定の条件が満たされるまで保持していてもよい。そして、所定の条件が満たされた場合、解放部１５は、保持している解放対象領域の解放を、例えばまとめて行ってもよい。解放部１５は、所定の条件が満たされているか否かの判定と、その判定の結果に基づく対象領域の解放を、例えば、定期的に、バックグラウンドで（すなわちアクセス要求に応じて行われる処理と並行して）行えばよい。
【００７７】
上述の所定の条件は、例えば、解放部１５が保持している解放対象領域の大きさの合計が、所定値を上回ることである。所定の条件は、例えば、ストレージ装置３の負荷を表す指標が、所定値を下回っていることである。ストレージ装置３の負荷を表す指標は、例えば、ストレージ装置３へのＩ／Ｏ量である。Ｉ／Ｏ量は、例えば、単位時間当たりのアクセス要求の数であってもよい。Ｉ／Ｏ量は、例えば、単位時間当たりに転送されるデータの量であってもよい。Ｉ／Ｏ量は他の量であってもよい。ストレージ装置３の負荷を表す指標は、他の指標であってもよい。所定の条件は、例えば、スワップ記憶領域３０２の空き容量が所定の容量を下回ることであってもよい。所定の条件は、以上で説明した条件の組み合わせであってもよい。
【００７８】
解放部１５は、対象領域の解放が終了した後、再配置部１４に対して、上述の、使用領域の再配置すなわちデフラグを行う要求を行ってもよい。
【００７９】
使用領域の再配置の要求を受信した再配置部１４は、例えば、スワップ記憶領域３０２に含まれる使用領域の場所が連続するように、使用領域を移動させる。再配置部１４は、使用領域の再配置を、同様にバックグラウンドで行えばよい。
【００８０】
次に、本実施形態の記憶領域管理装置１の動作について、図面を参照して詳細に説明する。
【００８１】
まず、本実施形態の記憶領域管理装置１の、仮想マシン２０が動作を開始した場合における動作について説明する。
【００８２】
図８は、本実施形態の記憶領域管理装置１の、仮想マシン２０が動作を開始した場合における動作の例を表すフローチャートである。
【００８３】
仮想マシン２０が起動すると、動作検出部１６が、仮想マシン２０の起動を検出する（ステップＳ１０１）。例えば、仮想マシン２０をエミュレートするハイパーバイザである仮想マシン実行部２２が、動作検出部１６に、仮想マシン２０の起動の通知を送信すればよい。動作検出部１６は、仮想マシン２０の起動の通知を受信した場合に、仮想マシン２０が起動したと判定すればよい。
【００８４】
動作検出部１６は、さらに、仮想マシン２０の起動が、サスペンドからの復帰であるか否かを判定する。例えば、仮想マシン２０をエミュレートするハイパーバイザである仮想マシン実行部２２が、動作検出部１６に、仮想マシン２０の起動がサスペンドからの復帰であるか否かを表す信号を送信すればよい。動作検出部１６は、仮想マシン実行部２２から受信した、仮想マシン２０の起動がサスペンドからの復帰であるか否かを表す信号に基づき、仮想マシン２０の起動がサスペンドからの復帰であるか否かを判定すればよい。動作検出部１６は、他の方法により、仮想マシン２０の起動が、サスペンドからの復帰であるか否かを判定してもよい。
【００８５】
仮想マシン２０の起動が、サスペンドからの復帰である場合（ステップＳ１０２においてＹｅｓ）、図８に示す動作は終了する。本実施形態では、仮想マシン２０がサスペンド状態に移行する場合、その仮想マシン２０のスワップ領域に関連付けられているスワップ記憶領域３０２は解放されない。従って、仮想マシン２０の起動がサスペンドからの復帰である場合、その仮想マシン２０のスワップ領域に関連付けられているスワップ記憶領域３０２が存在する。その場合、記憶領域管理装置１は、その仮想マシン２０のスワップ領域と、そのスワップ記憶領域３０２とが関連付けられた状態を維持する。
【００８６】
仮想マシン２０の起動が、サスペンドからの復帰でない場合（ステップＳ１０２においてＮｏ）、例えば動作検出部１６が、スワップ記憶領域３０２が存在するか否かを判定する。情報処理装置２が複数の仮想マシン２０が動作するように構成されている場合、動作検出部１６は、起動が検出された仮想マシン２０のスワップ領域に関連付けられているスワップ記憶領域３０２の領域が存在するか否かを判定すればよい。動作検出部１６は、その判定を、例えば、仮想マシン２０のスワップ領域に含まれる対象領域に関連付けられた使用領域の場所が、領域情報記憶部１３に格納されているか否かを判定することによって行えばよい。スワップ記憶領域３０２がスワップ領域ファイル３０２である場合、動作検出部１６は、ストレージ装置３にスワップ領域ファイル３０２が存在するか否かを判定すればよい。
【００８７】
スワップ記憶領域３０２が存在する場合（ステップＳ１０３においてＹｅｓ）、図８に示す動作は終了する。その場合、記憶領域管理装置１は、その仮想マシン２０のスワップ領域と、そのスワップ記憶領域３０２とが関連付けられた状態を維持する。
【００８８】
なお、動作検出部１６は、仮想マシン２０のスワップ領域に関連付けられたスワップ記憶領域３０２の有無を判定することによって、仮想マシン２０の起動がサスペンドからの復帰であるか否かを判定してもよい。その場合、動作検出部１６は、仮想マシン２０のスワップ領域に関連付けられたスワップ記憶領域３０２が存在すれば、仮想マシン２０の起動がサスペンドからの復帰であると判定すればよい。また、動作検出部１６は、仮想マシン２０のスワップ領域に関連付けられたスワップ記憶領域３０２が存在しなければ、仮想マシン２０の起動がサスペンドからの復帰ではないと判定すればよい。そして、この場合、動作検出部１６は、ステップＳ１０２及びステップＳ１０３の動作を、同じ動作として行えばよい。
【００８９】
スワップ記憶領域３０２が存在しない場合（ステップＳ１０３においてＮｏ）、スワップ領域検出部１７は、割り当て領域３０１（すなわち、シンディスク３０１）を開く（ステップＳ１０４）。
【００９０】
スワップ領域検出部１７は、割り当て領域３０１において、スワップ領域を検出する（ステップＳ１０５）。スワップ領域検出部１７は、例えば、割り当て領域３０１の構造を解析することによって、スワップ領域を検出すればよい。スワップ領域検出部１７は、検出したスワップ領域の場所を特定する。スワップ領域の場所は、前述のように、例えば、先頭アドレスと大きさの組み合わせである。スワップ領域の場所は、先頭アドレスと末尾アドレスの組み合わせであってもよい。
【００９１】
確保部１９は、大きさが検出されたスワップ領域の大きさ以上であるスワップ記憶領域３０２を、割り当て領域３０１とは異なる記憶領域において確保する（ステップＳ１０６）。スワップ記憶領域３０２がスワップ領域ファイル３０２である場合、確保部１９は、大きさが検出されたスワップ領域の大きさ以上であるスワップ領域ファイル３０２を、割り当て領域３０１とは異なる記憶領域に作成すればよい。
【００９２】
確保部１９は、検出されたスワップ領域とスワップ記憶領域３０２とを関連付ける（ステップＳ１０７）。確保部１９は、例えば、検出されたスワップ領域の先頭アドレスとスワップ記憶領域３０２の先頭アドレスとを、関連付けて領域情報記憶部１３に格納すればよい。
【００９３】
確保部１９は、更に、解放領域リストを初期化する（ステップＳ１０８）。確保部１９は、例えば、領域情報記憶部１３において、対象領域の場所と使用領域の場所とを関連付けるデータ値を格納する領域を設定すればよい。領域情報記憶部１３に、起動が検出された仮想マシン２０のスワップ領域に含まれる対象領域の場所とその対象領域の場所に関連付けられた使用領域の場所が格納されている場合、確保部１９は、それらの場所を削除すればよい。解放領域リストの初期化が必要なければ、確保部１９は、ステップＳ１０８において何もしなくてもよい。
【００９４】
次に、記憶領域管理装置１の、仮想マシン２０が停止する場合における動作について、図面を参照して詳細に説明する。
【００９５】
図９は、本実施形態の記憶領域管理装置１の、仮想マシン２０が停止する場合における動作の例を表すフローチャートである。
【００９６】
仮想マシン２０が停止すると、動作検出部１６は、仮想マシン２０の停止を検出する（ステップＳ２０１）。例えば、仮想マシン２０が動作を停止した場合、仮想マシン２０をエミュレートするハイパーバイザである仮想マシン実行部２２が、仮想マシン２０が停止したことを表す信号を動作検出部１６に送信すればよい。動作検出部１６は、仮想マシン実行部２２から仮想マシン２０が停止したことを表す信号を受信することによって、仮想マシン２０の停止を検出すればよい。
【００９７】
仮想マシン２０は、たとえば、仮想マシン２０がシャットダウンされた場合や、仮想マシン２０がサスペンドされた場合に、動作を停止する。すなわち、仮想マシン２０の停止には、例えば、仮想マシン２０のシャットダウンと、仮想マシン２０のサスペンド（すなわち、仮想マシン２０のサスペンド状態への移行）がある。
【００９８】
動作検出部１６は、仮想マシン２０の停止が、仮想マシン２０のサスペンドであるか否かを判定する。仮想マシン２０の停止が、仮想マシン２０のサスペンドである場合、すなわち、仮想マシン２０がサスペンドされた場合（ステップＳ２０２においてＹｅｓ）、記憶領域管理装置１は、図９に示す動作を終了する。その場合、サスペンドされた仮想マシン２０のスワップ領域とスワップ記憶領域３０２との関連付けは維持される。また、仮想マシン２０のスワップ領域に含まれる対象領域と、スワップ記憶領域３０２に含まれる使用領域との関連付けも維持される。
【００９９】
次に、削除部１８は、スワップ記憶領域３０２（すなわちスワップ領域ファイル３０２）に、ダンプファイルが格納されているか否かを判定する（ステップＳ２０３）。スワップ記憶領域３０２に、ダンプファイルが格納されている場合（ステップＳ２０３においてＹｅｓ）、記憶領域管理装置１は、図９に示す動作を終了する。その場合も、サスペンドされた仮想マシン２０のスワップ領域とスワップ記憶領域３０２との関連付けは維持される。また、仮想マシン２０のスワップ領域に含まれる対象領域と、スワップ記憶領域３０２に含まれる使用領域との関連付けも維持される。
【０１００】
ダンプファイルが格納されていない場合（ステップＳ２０３においてＮｏ）、削除部１８は、停止が検出された仮想マシン２０のスワップ領域とスワップ記憶領域３０２との関連付けを解除する（ステップＳ２０４）。削除部１８は、例えば、仮想マシン２０のスワップ領域の先頭アドレスとそのスワップ領域に関連付けられているスワップ記憶領域３０２の先頭アドレスを、領域情報記憶部１３から削除すればよい。
【０１０１】
次に、削除部１８は、停止が検出された仮想マシン２０のスワップ領域に関連付けられている、ストレージ装置３に確保されているスワップ記憶領域３０２を解放する（ステップＳ２０５）。スワップ記憶領域３０２がスワップ領域ファイル３０２である場合、削除部１８は、停止が検出された仮想マシン２０のスワップ領域に関連付けられているスワップ領域ファイル３０２を削除すればよい。
【０１０２】
次に、削除部１８は、解放領域リストを削除する（ステップＳ２０６）。削除部１８は、例えば、停止が検出された仮想マシン２０のスワップ領域に含まれる対象領域の場所と、その対象領域の場所に関連付けられている使用領域の場所とを、領域情報記憶部１３から削除すればよい。削除部１８は、さらに、停止が検出された仮想マシン２０のスワップ領域に関連付けられていたスワップ記憶領域３０２に含まれる解放領域の場所を、領域情報記憶部１３から削除すればよい。
【０１０３】
次に、本実施形態の記憶領域管理装置１の、仮想マシン２０がアクセス要求を送信した場合における動作について、図面を参照して詳細に説明する。
【０１０４】
図１０は、本実施形態の記憶領域管理装置１の、仮想マシン２０がアクセス要求を送信した場合における動作の例を表すフローチャートである。図１０に示す例におけるアクセス要求は、割り当て領域３０１が含むいずれかの領域にデータを書き込む要求である書き込み要求又は割り当て領域３０１が含むいずれかの領域からデータを読み出す読み出し要求である。仮想マシン２０は、コマンドを送信することによって、アクセスの要求を行う。以下の説明において、アクセス要求は、要求コマンドとも表記される。図１０に示す例では、アクセス要求（すなわち要求コマンド）の種別は、書き込み又は読み出しである。
【０１０５】
仮想マシン２０がアクセス要求（すなわち、要求コマンド）を送信すると、要求検出部１０が要求コマンドを検出する。
【０１０６】
要求検出部１０は、検出された要求コマンドの種別を特定する（ステップＳ３０１）。上述のように、図１０に示す例においては、要求コマンドの種別は、書き込み又は読み出しである。また、要求検出部１０は、ステップＳ３０１の動作を、後述されるステップＳ３０３においてＹｅｓであった場合に、ステップＳ３０５の動作の前に行ってもよい。
【０１０７】
要求検出部１０は、さらに、検出された要求コマンドによってアクセスが要求されている、割り当て領域３０１における領域である、対象領域を特定する（ステップＳ３０２）。
【０１０８】
要求検出部１０は、特定した対象領域が、要求コマンドを送信した仮想マシン２０のスワップ領域に含まれるか否かを判定する（ステップＳ３０３）。
【０１０９】
特定した対象領域が、要求コマンドを送信した仮想マシン２０のスワップ領域に含まれない場合（ステップＳ３０３においてＮｏ）、要求実行部１２は、割り当て領域３０１に対して要求コマンドを発行する（ステップＳ３０４）。要求実行部１２は、割り当て領域３０１に含まれる対象領域に対するアクセスを要求する要求コマンドを、そのままストレージ装置３に送信すればよい。この場合、管理部１１は、要求検出部１０が検出した要求コマンドに対して、何もしなくてよい。要求実行部１２は、ストレージ装置３が返信する、要求コマンドの実行結果を、例えば要求検出部１０を介して、仮想マシン２０に送信すればよい。
【０１１０】
特定した対象領域が、要求コマンドを送信した仮想マシン２０のスワップ領域に含まれる場合（ステップＳ３０３においてＹｅｓ）、要求コマンドが書き込み要求でない場合（ステップＳ３０５においてＮｏ）、記憶領域管理装置１の動作は、ステップＳ３０６に進む。要求コマンドの種別が書き込みでない場合、要求コマンドの種別は読み出しである。
【０１１１】
ステップＳ３０６において、管理部１１は、対象領域に関連付けられた使用領域を特定する。管理部１１は、対象領域に関連付けられている使用領域の場所を、領域情報記憶部１３から読み出せばよい。
【０１１２】
要求実行部１２は、スワップ記憶領域３０２に含まれる、特定された使用領域から、要求コマンドに基づくデータの読み出しを行う（ステップＳ３０７）。要求実行部１２は、読み出されたデータを、例えば、要求検出部１０を介して、仮想マシン２０に送信する。
【０１１３】
要求コマンドが書き込み要求である場合（ステップＳ３０５においてＹｅｓ）、管理部１１は、対象領域のサイズと、スワップ記憶領域３０２における解放領域のサイズの合計を比較する（ステップＳ３０８）。
【０１１４】
対象領域のサイズが、スワップ記憶領域３０２における解放領域のサイズの合計より小さい場合（ステップＳ３０８においてＮｏ）、ステップＳ３１１において、例えば確保部１９が、対象領域のサイズ以上の領域をスワップ記憶領域３０２に追加する。そして、確保部１９は、追加された領域に、検出された対象領域のサイズ以上のサイズを持つ使用領域を確保する（ステップＳ３１１）。管理部１１は、対象領域の場所と、確保された使用領域の場所とを、互いに関連付けて、領域情報記憶部１３に格納する。なお、対象領域の場所に関連付けられた使用領域の場所を領域情報記憶部１３に格納することが、その使用領域を確保することであってもよい。
【０１１５】
対象領域のサイズが、スワップ記憶領域３０２における解放領域のサイズの合計以上である場合（ステップＳ３０８においてＮｏ）、対象領域のサイズ以上の大きさの、連続した解放領域が存在するか否かを判定する（ステップＳ３０９）。
【０１１６】
スワップ記憶領域３０２に、対象領域のサイズ以上の大きさの、連続した解放領域が存在する場合（ステップＳ３０９においてＹｅｓ）、管理部１１は、その連続した解放領域に使用領域を確保する（ステップＳ３１１）。管理部１１が確保する使用領域は、検出された対象領域のサイズ以上のサイズを持つ。管理部１１は、対象領域の場所と、確保された使用領域の場所とを、互いに関連付けて、領域情報記憶部１３に格納する。
【０１１７】
スワップ記憶領域３０２に、対象領域のサイズ以上の大きさの、連続した解放領域が存在しない場合（ステップＳ３０９においてＮｏ）、再配置部１４は、使用領域の再配置を行う（ステップＳ３１０）。そのことによって、再配置部１４は、検出された対象領域のサイズ以上のサイズを持つ、連続した解放領域を生成する。管理部１１は、生成された解放領域に、検出された対象領域のサイズ以上のサイズを持つ使用領域を確保する。管理部１１は、対象領域の場所と、確保された使用領域の場所とを、互いに関連付けて、領域情報記憶部１３に格納する。
【０１１８】
次に、要求実行部１２が、確保された使用領域に対して、要求コマンドに基づく書き込みを行う（ステップＳ３１２）。
【０１１９】
次に、本実施形態の記憶領域管理装置１の、仮想マシン２０が解放要求を送信する場合における動作について、図面を参照して詳細に説明する。
【０１２０】
図１１は、本実施形態の記憶領域管理装置１の、仮想マシン２０が解放要求コマンドを送信する場合における動作の例を表すフローチャートである。解放要求コマンドは、例えば、スワップ領域のうちに含まれる、少なくとも一部の使用領域を、未使用の状態に戻すコマンドである。記憶領域管理装置１は、解放要求コマンドを受信すると、その解放要求コマンドの対象である対象領域に関連付けられている使用領域を、以下のようにして、対象領域に関連付けられていない状態に戻す。
【０１２１】
仮想マシン２０が解放要求コマンドを送信すると、要求検出部１０が解放要求コマンドを受信する（ステップＳ４０１）。例えば、仮想マシン２０から要求コマンドを受信した要求受信部１０が、要求コマンドの種別を特定した結果、要求コマンドの種別が解放要求であった場合に、記憶領域管理装置１は、図１１に示す動作を開始すればよい。また、記憶領域管理装置１は、図１１に示す動作を、他の要求コマンドに対する処理と並行して、バックグラウンドで行えばよい。
【０１２２】
次に、解放部１５は、所定の条件が満たされているか判定する（ステップＳ４０２）。
【０１２３】
上述のように、所定の条件は、例えば、解放部１５が保持している解放対象領域の大きさの合計が、所定値を上回ることである。所定の条件は、例えば、ストレージ装置３の負荷を表す指標が、所定値を下回っていることである。ストレージ装置３の負荷を表す指標は、例えば、ストレージ装置３へのＩ／Ｏ量である。Ｉ／Ｏ量は、例えば、単位時間当たりのアクセス要求の数であってもよい。Ｉ／Ｏ量は、例えば、単位時間当たりに転送されるデータの量であってもよい。Ｉ／Ｏ量は他の量であってもよい。ストレージ装置３の負荷を表す指標は、他の指標であってもよい。所定の条件は、例えば、スワップ記憶領域３０２の空き容量が所定の容量を下回ることであってもよい。所定の条件は、以上で説明した条件の組み合わせであってもよい。
【０１２４】
所定の条件が満たされていない場合（ステップ４０３においてＮｏ）、解放部１５は、解放要求コマンドによって解放が要求されている対象領域である、解放対象領域の場所を記憶（すなわち保持）する（ステップＳ４０４）。以下の説明において、解放対象領域の場所を記憶することを、「解放対象領域を記憶する」あるいは「解放対象領域の場所を保持する」とも表記する。解放部１５は、解放対象領域を含む、解放要求コマンドのデータを保持してもよい。記憶領域管理装置１の動作は、ステップＳ４０４の動作の後、ステップＳ４０１に戻る。
【０１２５】
所定の条件が満たされている場合（ステップ４０３においてＹｅｓ）、解放部１５は、記憶する全ての解放対象領域を解放する（ステップＳ４０５）。
【０１２６】
解放対象領域が解放されると、再配置部１４が、使用領域の再配置を実行する（ステップＳ４０６）。前述のように、再配置部１４は、使用領域の再配置の後、スワップ記憶領域３０２に末尾に存在する解放領域を、スワップ記憶領域３０２から除外してもよい。
【０１２７】
また、図１７は、解放要求コマンドの受信と再配置とを並行して行う場合における、記憶領域管理装置１の解放要求コマンドを受信する動作の例を表すフローチャートである。さらに、図１８は、解放要求コマンドの受信と再配置とを並行して行う場合における、記憶領域管理装置１の再配置を行う動作の例とを表すフローチャートである。図１７及び図１８の各ステップにおける動作は、図１１に示す、同じ符号が付与されたステップにおける動作と同じである。記憶領域管理装置１は、図１７に示す動作と、図１８に示す動作を、並行して行ってもよい。
【０１２８】
以上で説明した本実施形態には、シン形式の仮想ディスク内のスワップ領域へのアクセスに伴う、その仮想ディスクに割り当てられる記憶領域の増加を抑制することができるという第１の効果がある。
【０１２９】
その理由は、仮想マシン２０が送信するアクセス要求による書き込み先が、シン形式の仮想ディスクである割り当て領域３０１に含まれるスワップ領域である場合、要求実行部１２が、スワップ記憶領域３０２に書き込みを行うからである。スワップ記憶領域３０２は、割り当て領域３０１ではない記憶領域に確保されている領域である。前述のように、一般医、シン形式のディスクに対してデータの書き込みと削除を繰り返すと、そのディスクに割り当てられる記憶領域のサイズが増加する。本実施形態の要求実行部１２は、シン形式の割り当て領域３０１に含まれるスワップ領域への書き込みが要求されたデータを、割り当て領域３０１に含まれないスワップ記憶領域３０２に書き込む。従って、シン形式の割り当て領域３０１に含まれるスワップ領域に対して書き込みが繰り返されることによる、割り当て領域３０１に割り当てられる記憶領域の増加を抑制できる。
【０１３０】
本実施形態には、さらに、ストレージ装置３における記憶領域の使用量を抑制することができるという第２の効果がある。
【０１３１】
その理由は、仮想マシン２０が動作を停止した場合、削除部１８が、スワップ記憶領域３０２を解放する（すなわち、スワップ領域ファイル３０２を削除する）ことによって、ストレージ装置３の空き容量を増加させるからである。
【０１３２】
本実施形態には、さらに、スワップ記憶領域３０２（すなわち、スワップ領域ファイル３０２）のサイズの増加を抑制することができるという第３の効果がある。
【０１３３】
その理由は、スワップ記憶領域３０２に含まれる使用されてない記憶領域のサイズが、アクセス要求に基づく書き込みが行われる領域より大きい場合、管理部１１が、その使用されてない記憶領域を書き込み先に設定するからである。スワップ記憶領域３０２に含まれる使用されてない記憶領域が分断されている場合、再配置部１４が、使用領域の再配置を行うことによって、使用されていない記憶領域を連結する。従って、スワップ記憶領域３０２は効率よく使用される。
【０１３４】
本実施形態には、さらに、仮想マシン２０が送信する領域解放コマンドに基づく処理を実行することによる、情報処理装置２やストレージ装置３の負荷の上昇を抑制することができるという第４の効果がある。
【０１３５】
その理由は、解放部１５が、所定の条件が満たされるまで、解放対象領域の場所を記憶するからである。そして、その所定の条件が満たされた場合に、解放部１５は、解放対象領域を解放する。その所定の条件として、例えば、情報処理装置２の負荷が所定の基準以下であること、あるいは、ストレージ装置３の負荷が所定の基準以下であることを設定することができる。それらの条件が、上述の所定の条件として設定されている場合、情報処理装置２やストレージ装置３の負荷の上昇を抑制することができる。
【０１３６】
本実施形態には、仮想マシン２０において動作するゲストＯＳ２１を改造することなく、上述の第１乃至第４の効果を得ることができるという、第５の効果がある。
【０１３７】
その理由は、管理部１１が、ゲストＯＳ２１によって制御される仮想マシン２０によるアクセス先のアドレスがスワップ領域に含まれるアドレスであるか否かに基づいて、実際にアクセスされる記憶領域を、他の記憶領域に変更するからである。
【０１３８】
＜実装例＞
次に、第１の実施形態に基づく、情報処理システム１００の実装例について、図面を参照して詳細に説明する。
【０１３９】
図１２は、本実装例の機能を模式的に表す図である。
【０１４０】
図１２を参照すると、本実装例は、ゲストＯＳ２１と、ハイパーバイザ２２Ａと、ディスク３０とを含む。図１２では、ハイパーバイザ２２Ａを実行する情報処理装置２は省略されている。また、ハイパーバイザ２２Ａによって制御される情報処理装置２がエミュレートし、ゲストＯＳ２１によって制御される仮想マシン２０は省略されている。
【０１４１】
ゲストＯＳ２１は、Ｉ／Ｏ機能１０１と、領域解放機能１０２とを含む。
【０１４２】
ハイパーバイザ２２Ａは、スワップ領域確認機能２０１と、仮想ディスク解析機能２０２と、Ｉ／Ｏ確認機能２０３と、解放領域管理機能２０４と、スワップ領域削除機能２０５と、領域情報記憶機能２０６とを含む。領域貞応記憶機能２０６は、スワップ領域アドレス２５１と、解放領域リスト２５２とを記憶する。
【０１４３】
ディスク３０は、シンディスク３０１と、スワップ領域ファイル３０２とを含む。
【０１４４】
以下では、ゲストＯＳ２１によって制御される仮想マシン２０の動作を、ゲストＯＳ２１あるいはゲストＯＳ２１が備える機能の動作として説明する。さらに、ハイパーバイザ２２Ａによって制御される、情報処理装置２のプロセッサの動作を、ハイパーバイザ２２Ａまたはハイパーバイザ２２Ａが備える機能の動作として説明する。
【０１４５】
まず、本実装例の構成要素と、第１の実施形態の構成要素の対応について説明する。
【０１４６】
ゲストＯＳ２１が、第１の実施形態における仮想マシン２０に相当する。ハイパーバイザ２２Ａは、第１の実施形態における記憶領域管理装置１及び仮想マシン実行部２２に相当する。ディスク３０は、ストレージ装置３に相当する。
【０１４７】
スワップ領域確認機能２０１は、動作検出部１６と、確保部１９に相当する。仮想ディスク解析機能２０２は、スワップ領域検出部１７に相当する。Ｉ／Ｏ確認機能２０３は、要求検出部１０と、管理部１１と、要求実行部１２に相当する。解放領域管理機能２０４は、再配置部１４と、解放部１５に相当する。スワップ領域削除機能２０５は、動作検出部１６と、削除部１８に相当する。領域情報記憶機能２０６は、領域情報記憶部１３に相当する。
【０１４８】
図１３は、ハイパーバイザ２２Ａにおいて仮想マシン２０が起動する場合に動作する機能を模式的に表すブロック図である。図１３から後述される図１７までの図において、太線であらわされている機能が、動作する機能を表す。ハイパーバイザ２２Ａで仮想マシン２０が起動した場合、スワップ領域確認機能２０１はシンディスク３０１をオープンする。仮想ディスク解析機能２０２は、シンディスク３０１に含まれるスワップ領域の論理アドレスを確認する。スワップ領域確認機能２０１は、確認した論理アドレスをスワップ領域アドレス２５１に記録する。スワップ領域確認機能２０１は、さらに、スワップ領域ファイル３０２及び解放領域リスト２５２を作成する。
【０１４９】
図１４は、ハイパーバイザ２２Ａにおいて仮想マシン２０が停止する場合に動作する機能を模式的に表すブロック図である。ハイパーバイザ２２Ａにおいて仮想マシン２０が停止した場合、スワップ領域削除機能２０５は、仮想マシン２０の停止がサスペンドによるものか判定する。スワップ領域削除機能２０５は、さらに、スワップ領域ファイル３０２にダンプファイルが格納されているか確認する。スワップ領域ファイル３０２が削除可能な場合、スワップ領域削除機能２０５は、スワップ領域ファイル３０２、スワップ領域アドレス２５１、及び解放領域リスト２５２を削除する。
【０１５０】
図１５は、ゲストＯＳ２１がＩ／Ｏを実施した場合に動作する機能を模式的に表すブロック図である。Ｉ／Ｏの実施あるいはＩ／Ｏの発行は、第１の実施形態の説明における、書き込み要求又は読み出し要求の送信に相当する。本実装例では、この場合のＩ／Ｏは、アクセス要求（すなわち要求コマンド）を表す。ゲストＯＳ２１のＩ／Ｏ機能１０１がＩ／Ｏを実施した場合、Ｉ／Ｏ確認機能２０３は、対象領域のアドレスをスワップ領域アドレス２５１と比較することによって、Ｉ／Ｏの対象領域がスワップ領域であるかどうかを判断する。Ｉ／Ｏ確認機能２０３は、対象領域がスワップ領域に含まれない場合、シンディスク３０１に対してＩ／Ｏを発行する。対象領域がスワップ領域に含まれ、さらに、発行されたＩ／Ｏが読み出し要求である場合、Ｉ／Ｏ確認機能２０３は、スワップ領域ファイル３０２において対象領域に関連付けられた使用領域からデータを読み出す。対象領域がスワップ領域に含まれ、さらに、発行されたＩ／Ｏが書き込み要求の場合、解放領域管理機能２０４に制御が移される。解放領域管理機能２０４は、解放領域リスト２５２を参照することによって、要求された書き込みが解放済みの領域に収まるかを判断する。そして、解放領域管理機能２０４は、判断の結果に基づき、スワップ領域ファイル３０２おける適切な書き込み領域を決定する。Ｉ／Ｏ確認機能２０３は、決定された書き込み領域に、発行されたＩ／Ｏに基づく書き込みを行う。
【０１５１】
図１６は、ゲストＯＳ２１の領域解放機能１０２が領域解放要求が行った場合に動作する機能を模式的に表すブロック図である。ハイパーバイザ２２ＡのＩ／Ｏ確認機能２０３が、ゲストＯＳ２１の領域解放機能１０２が送信した領域解放コマンドを受領する。Ｉ／Ｏ確認機能２０３は、領域解放コマンドを受信した場合、解放領域管理機能２０４に制御を移す。解放領域管理機能２０４は、解放領域リスト２５２に解放領域を追加した後、処理を終了する。
【０１５２】
図１７は、解放領域管理機能２０４がスワップ領域ファイル３０２の容量を削減する場合に動作する機能を模式的に表すブロック図である。解放領域管理機能２０４が、解放領域リスト２５２を参照する。解放領域管理機能２０４は、解放領域リスト２５２に基づきスワップ領域ファイル３０２において解放領域に該当する箇所のデータを削除する。さらに、解放領域管理機能２０４は、スワップ領域ファイル３０２をデフラグすることによって、スワップ領域ファイル３０２のサイズを縮小させる。本実装例では、デフラグは、解放領域をスワップ領域ファイル３０２から除外することにより、スワップ領域ファイル３０２のサイズを縮小させることを含む。
【０１５３】
次に、本実装例の動作について、図面を参照して詳細に説明する。
【０１５４】
図８が、仮想マシン２０が起動した場合における、本実装例の動作を表す。
【０１５５】
仮想マシン２０が起動した場合（ステップＳ１０１）、スワップ領域確認機能２０１は、仮想マシン２０の起動がサスペンドからの復帰であるか判定する（ステップＳ１０２）。さらに、スワップ領域確認機能２０１は、スワップ領域ファイル３０２が既に存在しているか確認する（ステップＳ１０３）。仮想マシン２０の起動がサスペンドからの復帰である場合（ステップＳ１０２においてＹｅｓ）、または、スワップ領域ファイル３０２が既に存在している場合（ステップＳ１０３においてＹｅｓ）、ハイパーバイザ２２Ａは、図８に示す動作を終了する。先の仮想マシン２０の停止時に削除されなかったスワップ領域ファイル３０２、スワップ領域アドレス２５１、及び解放領域リスト２５２は、そのまま使用される。仮想マシン２０の起動がサスペンドからの復帰でない場合（ステップＳ１０２においてＮｏ）、さらにスワップ領域ファイル３０２が存在しない場合（ステップＳ１０３においてＮｏ）、動作はステップＳ１０４に進む。スワップ領域確認機能２０１は、シンディスク３０１をオープンする（ステップＳ１０４）。次に、仮想ディスク解析機能２０２が、シンディスク３０１に含まれるスワップ領域のアドレスを特定する（ステップＳ１０５）。
【０１５６】
スワップ領域確認機能２０１は、特定したアドレスをスワップ領域アドレス２５１として領域情報記憶機能２０６に記憶させる（ステップＳ１０７）。加えて、スワップ領域確認機能２０１は、スワップ領域ファイル３０２を作成する（ステップＳ１０６）。また、スワップ領域確認機能２０１は、解放領域リスト２５２を作成する（ステップＳ１０８）。
【０１５７】
図９が、仮想マシン２０が停止した場合における、本実装例の動作を表す。
【０１５８】
仮想マシン２０が停止した場合（ステップＳ２０１）、スワップ領域削除機能２０５は、仮想マシン２０がサスペンドにより停止したか判定する（ステップＳ２０２）。スワップ領域削除機能２０５は、さらに、スワップ領域ファイル３０２にダンプファイルが格納されているか判定する（ステップＳ２０３）。仮想マシン２０がサスペンドにより停止した場合（ステップＳ２０２においてＹｅｓ）、及びスワップ領域ファイル３０２にダンプファイルが格納されている（ステップＳ２０２においてＹｅｓ）、図９に示す動作は終了する。仮想マシン２０がサスペンドにより停止していない場合（ステップＳ２０２においてＮｏ）、及びスワップ領域ファイル３０２にダンプファイルが格納されていない（ステップＳ２０２においてＮｏ）、動作はステップＳ２０４以降に進む。その場合、スワップ領域削除機能２０５は、スワップ領域アドレス２５１を削除する（ステップＳ２０４）。スワップ領域削除機能２０５は、さらに、スワップ領域ファイル３０２を削除する（ステップＳ２０５）。スワップ領域削除機能２０５は、さらに、解放領域リスト２５２を削除する（ステップＳ２０６）。
【０１５９】
図１０は、ゲストＯＳ２１がＩ／Ｏを実施した場合における本実装例の動作を表す。
【０１６０】
ゲストＯＳ２１がＩ／Ｏを実施した場合、ハイパーバイザ２２ＡのＩ／Ｏ確認機能２０３がＩ／Ｏを受け取る。Ｉ／Ｏ確認機能２０３は、発行されたＩ／Ｏのコマンド種別を特定する（ステップＳ３０１）。コマンド種別は、第１の実施形態の説明における、アクセス要求の種別に相当する。コマンド種別が読み込みまたは書き込みの場合、Ｉ／Ｏ確認機能２０３は、対象領域の論理アドレスを確認する（ステップＳ３０２）。Ｉ／Ｏ確認機能２０３は、対象領域の論理アドレスとスワップ領域アドレス２５１として記憶されているアドレスとを比較することによって、対象領域がスワップ領域に含まれるか判定する（ステップＳ３０３）。対象領域がスワップ領域外に存在する場合（ステップＳ３０３においてＮｏ）、Ｉ／Ｏ確認機能２０３は、シンディスク３０１に対しＩ／Ｏを発行する（ステップＳ３０４）。対象領域がスワップ領域内に存在する場合（ステップＳ３０３においてＹｅｓ）、さらにＩ／Ｏのコマンド種別が読み出しである場合（ステップＳ３０５においてＮｏ）、動作はステップＳ３０６及びステップＳ３０７に進む。Ｉ／Ｏ確認機能２０３は、スワップ領域ファイル３０２からデータを読み出す（ステップＳ３０６及びステップＳ３０７）。Ｉ／Ｏのコマンド種別が書き込みである場合（ステップＳ３０５においてＹｅｓ）、Ｉ／Ｏ確認機能２０３は、書き込み対象アドレスを確認するため解放領域管理機能２０４に制御を移す。解放領域管理機能２０４は、解放領域リスト２５２に基づき、Ｉ／Ｏの要求サイズと解放済みサイズとを比較する（ステップＳ３０８）。Ｉ／Ｏの要求サイズは、書き込みが行われる領域のサイズである。解放済みサイズは、解放領域のサイズの合計である。Ｉ／Ｏの要求サイズが解放済みサイズより大きい場合（ステップＳ３０８においてＹｅｓ）、解放領域管理機能２０４は、スワップ領域ファイル３０２の末尾のアドレスをＩ／Ｏ確認機能２０３に通知する。Ｉ／Ｏの要求サイズが解放済みサイズより小さい場合（ステップＳ３０８においてＮｏ）、解放領域管理機能２０４は、Ｉ／Ｏの要求サイズである書き込み要求サイズ以上のサイズを持つ、連続した解放領域が存在するか判定する（ステップＳ３０９）。書き込み要求サイズ以上のサイズを持つ、連続した解放領域が存在しない場合（ステップＳ３０９においてＮｏ）、解放領域管理機能２０４はデフラグを行う（ステップＳ３１０）。そして、解放領域管理機能２０４は、解放領域において書き込みの対象領域を確保する（ステップＳ３１１）。解放領域管理機能２０４は、確保した書き込みの対象領域のアドレスをＩ／Ｏ確認機能２０３に通知する。Ｉ／Ｏ確認機能２０３は、スワップ領域ファイル３０２において、通知されたアドレスに書き込みを行う（ステップＳ３１２）。
【０１６１】
図１８は、記憶領域管理装置１の、仮想マシン２０が領域解放コマンドを送信した場合における動作の例を表すフローチャートである。すなわち、図１８は、ゲストＯＳ２１が領域解放コマンドを発行した場合における、ハイパーバイザ２２Ａの動作を表す。図１８及び後述される図１９の各ステップは、図１１に示す動作における、同じ符号が付与されたステップと同じである。
【０１６２】
図１８に示す動作を、本実装例の動作として説明する。
【０１６３】
ゲストＯＳ２１が領域解放コマンドを発行すると、ハイパーバイザ２２ＡのＩ／Ｏ確認機能２０３が、発行された領域解放コマンドを受信する（ステップＳ４０１）。Ｉ／Ｏ確認機能２０３は、発行されたコマンド種別を確認する。そして、Ｉ／Ｏ確認機能２０３は、コマンド種別が領域解放コマンドであった場合、制御を解放領域管理機能２０４に移す。解放領域管理機能２０４は、発行された領域解放コマンドに基づき特定される解放対象アドレス、を解放領域リスト２５２に追加する（ステップＳ４０４）。そして、図１８に示す動作は終了する。
【０１６４】
図１９は、記憶領域管理装置１の、使用領域の再配置を行う動作の例を表すフローチャートである。すなわち、図１９は、解放領域管理機能２０４がスワップ領域ファイル３０２に対しデフラグを行う動作を表す。
【０１６５】
解放領域管理機能２０４は、所定の条件が満たされているか判定する（ステップＳ４０２）。例えば、解放領域管理機能２０４は、解放領域リスト２５２に基づき、解放対象領域のサイズの合計が閾値以上であるか判定する。解放対象領域のサイズの合計が閾値以上である場合、解放領域管理機能２０４は、スワップ領域ファイル３０２が存在するディスク３０へのアクセス量が閾値以下か判定する。アクセス量は、所定の基準に基づき測定された、ディスク３０の負荷を表す値である。アクセス量が閾値以下である場合（ステップＳ４０３においてＹｅｓ）、解放領域管理機能２０４は、解放対象領域をファイルシステムにおいて解放する（ステップＳ４０５）。そして、解放領域管理機能２０４は、スワップ領域ファイル３０２に対してデフラグを行う（ステップＳ４０６）。解放対象領域のサイズの合計が閾値以下である場合、及び、解放対象領域のサイズの合計は閾値以上であるがＩ／Ｏ量も閾値以上である場合、解放領域管理機能２０４は次の判定を行う。次の判定において、解放領域管理機能２０４は、スワップ領域ファイル３０２が存在するディスク３０の空き容量が閾値以下であるか判定する。空き容量が閾値以下である場合、解放領域管理機能２０４は、領域解放を急ぐ必要があると判断する。そして、解放領域管理機能２０４は、解放（ステップＳ４０５）とデフラグ（ステップＳ４０６）を実行する。ハイパーバイザ２２Ａは、図１９に示す動作を、例えば、バックグラウンドで定期的に実施する。
【０１６６】
＜第２の実施形態＞
次に、本発明の第２の実施形態について、図面を参照して詳細に説明する。
【０１６７】
図２０は、本実施形態の記憶領域制御装置１Ａの構成を表すブロック図である。
【０１６８】
図２０を参照すると、本実施形態の記憶領域管理装置１Ａは、仮想マシン２０に割り当てられたストレージ領域である割り当て領域３０１のうちスワップ領域への書き込み要求を検出する要求検出部１０と、書き込み要求が検出された前記スワップ領域における、前記書き込み要求によって書き込みが要求されている対象領域と、前記割り当て領域に含まれない他のストレージ領域から前記スワップ領域に割り当てられたスワップ記憶領域３０２における領域とを関連付ける管理部１１と、前記対象領域に関連付けられた前記領域である使用領域に対して、前記書き込み要求に基づく書き込みを行う要求実行部１２と、を備える。
【０１６９】
なお、図２０に示す情報処理装置２Ａは、記憶領域制御装置１の代わりに記憶領域制御装置１Ａを含む点を除き、図１に示す情報処理装置２と同じである。
【０１７０】
以上で説明した本実施形態には、第１の実施形態の第１の効果がある。その理由は、第１の実施形態の第１の効果が生じる理由と同じである。
【０１７１】
は、それぞれ、コンピュータ及びコンピュータを制御するプログラム、専用のハードウェア、又は、コンピュータ及びコンピュータを制御するプログラムと専用のハードウェアの組合せにより実現することができる。
【０１７２】
図２１は、記憶領域管理装置１、記憶領域管理装置１Ａ、情報処理装置２、情報処理装置２Ａを実現することができる、コンピュータ１０００の構成の一例を表す図である。図２１を参照すると、コンピュータ１０００は、プロセッサ１００１と、メモリ１００２と、記憶装置１００３と、Ｉ／Ｏ（Ｉｎｐｕｔ／Ｏｕｔｐｕｔ）インタフェース１００４とを含む。また、コンピュータ１０００は、記録媒体１００５にアクセスすることができる。メモリ１００２と記憶装置１００３は、例えば、ＲＡＭ（Ｒａｎｄｏｍ  Ａｃｃｅｓｓ  Ｍｅｍｏｒｙ）、ハードディスクなどの記憶装置である。記録媒体１００５は、例えば、ＲＡＭ、ハードディスクなどの記憶装置、ＲＯＭ（Ｒｅａｄ  Ｏｎｌｙ  Ｍｅｍｏｒｙ）、可搬記録媒体である。記憶装置１００３が記録媒体１００５であってもよい。プロセッサ１００１は、メモリ１００２と、記憶装置１００３に対して、データやプログラムの読み出しと書き込みを行うことができる。プロセッサ１００１は、Ｉ／Ｏインタフェース１００４を介して、例えば、ストレージ装置３にアクセスすることができる。プロセッサ１００１は、記録媒体１００５にアクセスすることができる。記録媒体１００５には、コンピュータ１０００を、記憶領域管理装置１、記憶領域管理装置１Ａ、情報処理装置２、又は、情報処理装置２Ａとして動作させるプログラムが格納されている。
【０１７３】
プロセッサ１００１は、記録媒体１００５に格納されている、コンピュータ１０００を、記憶領域管理装置１、記憶領域管理装置１Ａ、情報処理装置２、又は、情報処理装置２Ａとして動作させるプログラムを、メモリ１００２にロードする。そして、プロセッサ１００１が、メモリ１００２にロードされたプログラムを実行することにより、コンピュータ１０００は、記憶領域管理装置１、記憶領域管理装置１Ａ、情報処理装置２、又は、情報処理装置２Ａとして動作する。
【０１７４】
要求検出部１０、管理部１１、要求実行部１２、再配置部１４、解放部１５、動作検出部１６、スワップ領域検出部１７、削除部１８、確保部１９、仮想マシン実行部２２は、例えば、プログラムを記憶する記録媒体１００５からメモリ１００２に読み込まれた、各部の機能を実現することができる専用のプログラムと、そのプログラムを実行するプロセッサ１００１により実現することができる。また、領域情報記憶部１３は、コンピュータ１０００が含むメモリ１００２やハードディスク装置等の記憶装置１００３により実現することができる。あるいは、要求検出部１０、管理部１１、要求実行部１２、領域情報記憶部１３、再配置部１４、解放部１５、動作検出部１６、スワップ領域検出部１７、削除部１８、確保部１９、仮想マシン実行部２２の一部又は全部を、各部の機能を実現する専用の回路によって実現することもできる。
【０１７５】
以上、実施形態を参照して本発明を説明したが、本発明は上記実施形態に限定されるものではない。本発明の構成や詳細には、本発明のスコープ内で当業者が理解し得る様々な変更をすることができる。
【符号の説明】
【０１７６】
１、１Ａ    記憶領域管理装置
２、２Ａ    情報処理装置
３    ストレージ装置
１０    要求検出部
１１    管理部
１２    要求実行部
１３    領域情報記憶部
１４    再配置部
１５    解放部
１６    動作検出部
１７    スワップ領域検出部
１８    削除部
１９    確保部
２０    仮想マシン
２１    ゲストＯＳ
２２    仮想マシン実行部
２２Ａ    ハイパーバイザ
３０    ディスク
１００    情報処理システム
１０１    Ｉ／Ｏ機能
１０２    領域解放機能
２０１    スワップ領域確認機能
２０２    仮想ディスク解析機能
２０３    Ｉ／Ｏ確認機能
２０４    解放領域管理機能
２０５    スワップ領域削除機能
２０６    領域情報記憶機能
２５１    スワップ領域アドレス
２５２    解放領域リスト
３０１    割り当て領域（シンディスク）
３０２    スワップ記憶領域（スワップ領域ファイル）
１０００    コンピュータ
１００１    プロセッサ
１００２    メモリ
１００３    記憶装置
１００４    Ｉ／Ｏインタフェース
１００５    記録媒体
【図１】
2015170271.tif 000003
【図２】
2015170271.tif 000004
【図３】
2015170271.tif 000005
【図４】
2015170271.tif 000006
【図５】
2015170271.tif 000007
【図６】
2015170271.tif 000008
【図７】
2015170271.tif 000009
【図８】
2015170271.tif 000010
【図９】
2015170271.tif 000011
【図１０】
2015170271.tif 000012
【図１１】
2015170271.tif 000013
【図１２】
2015170271.tif 000014
【図１３】
2015170271.tif 000015
【図１４】
2015170271.tif 000016
【図１５】
2015170271.tif 000017
【図１６】
2015170271.tif 000018
【図１７】
2015170271.tif 000019
【図１８】
2015170271.tif 000020
【図１９】
2015170271.tif 000021
【図２０】
2015170271.tif 000022
【図２１】
2015170271.tif 000023