(57)【要約】【課題】複数のプロセス間でデータが受け渡される際の処理負荷を低減する。【解決手段】情報処理装置１では、仮想マシン１０，２０が動作する。プロセス１１は仮想マシン１０において実行され、プロセス２１ａ，２１ｂは仮想マシン２０において実行される。プロセス１１，２１ａ，２１ｂの処理時には仮想メモリ１２，２２ａ，２２ｂがそれぞれ参照される。処理部３は、仮想メモリ１２，２２ａ，２２ｂに物理メモリ領域３１，３２，３３がそれぞれ割り当てられた状態から、物理メモリ領域３１，３２の割り当て先を仮想メモリ２２ａ，２２ｂにそれぞれ変更する。これにより、実体的なデータ転送が行われることなく、プロセス１１からプロセス２１ａへデータが受け渡されるとともに、プロセス２１ａからプロセス２１ｂへデータが受け渡される。【選択図】図１
2016115253.tif 000002
【特許請求の範囲】
【請求項１】
第１の仮想マシンと第２の仮想マシンとが動作し、３以上のプロセスを含む複数のプロセスのそれぞれが前記第１の仮想マシンと前記第２の仮想マシンのいずれかにおいて並列に実行され、前記第１の仮想マシンにおいて前記複数のプロセスのうちの少なくとも１つが実行されるとともに、前記第２の仮想マシンにおいて前記複数のプロセスのうちの他の少なくとも１つが実行される情報処理装置において、
前記複数のプロセスの実行時にそれぞれ参照される複数の仮想メモリのアドレスと、前記複数の仮想メモリのそれぞれに割り当てられる物理メモリ領域のアドレスとの対応関係が登録されたアドレス情報を記憶する記憶部と、
前記複数の仮想メモリのそれぞれに物理メモリ領域が割り当てられた状態において、前記複数のプロセスにあらかじめ付与された順位に基づいて、前記複数の仮想メモリのうち、順位が最後のプロセスに対応する仮想メモリを除く他の仮想メモリのそれぞれに割り当てられた物理メモリ領域の割り当て先が、現在割り当てられている仮想メモリに対応するプロセスの次のプロセスに対応する仮想メモリに変更されるように前記アドレス情報を更新する処理部と、
を有する情報処理装置。
【請求項２】
前記処理部は、前記複数の仮想メモリのうち、順位が最後のプロセスに対応する仮想メモリを除く他の仮想メモリのそれぞれに割り当てられた物理メモリ領域の割り当て先が、現在割り当てられている仮想メモリに対応するプロセスの次のプロセスに対応する仮想メモリに変更されるとともに、順位が最後のプロセスに対応する仮想メモリに割り当てられた物理メモリ領域の割り当て先が、順位が最初のプロセスに対応する仮想メモリに変更されるように、前記アドレス情報を更新する請求項１記載の情報処理装置。
【請求項３】
前記処理部は、前記複数のプロセスの実行が完了するかを監視し、前記複数のプロセスのすべての実行が完了したとき、前記複数の仮想メモリのうち、順位が最後のプロセスに対応する仮想メモリを除く他の仮想メモリのそれぞれに割り当てられた物理メモリ領域の割り当て先が、現在割り当てられている仮想メモリに対応するプロセスの次のプロセスに対応する仮想メモリに変更されるように前記アドレス情報を更新する請求項１または２記載の情報処理装置。
【請求項４】
前記第１の仮想マシンは、ストレージ装置に対する第１のデータ書き込み要求を、前記第１の仮想マシンでのデータアクセス単位である第１のブロック単位で受信して、前記ストレージ装置に対する書き込み処理を実行し、
前記第２の仮想マシンは、前記ストレージ装置に対するファイル単位での第２のデータ書き込み要求を受信し、前記第１の仮想マシンを介して前記ストレージ装置に対する書き込み処理を実行し、
前記複数のプロセスのうち前記第２の仮想マシンにおいて実行されるプロセスの１つは、前記第２のデータ書き込み要求によって書き込みが要求された書き込みデータを前記第１の仮想マシンに受け渡す処理を行うプロセスであり、
前記複数のプロセスのうち前記第１の仮想マシンにおいて実行されるプロセスの１つは、前記第２の仮想マシンから受け渡された前記書き込みデータを、前記第２の仮想マシンでのデータアクセス単位である第２のブロック単位のデータから、前記第１のブロック単位のデータに変換する処理を行うプロセスである、
請求項１乃至３のいずれか１項に記載の情報処理装置。
【請求項５】
第１の仮想マシンと第２の仮想マシンとが動作し、３以上のプロセスを含む複数のプロセスのそれぞれが前記第１の仮想マシンと前記第２の仮想マシンのいずれかにおいて並列に実行され、前記第１の仮想マシンにおいて前記複数のプロセスのうちの少なくとも１つが実行されるとともに、前記第２の仮想マシンにおいて前記複数のプロセスのうちの他の少なくとも１つが実行される情報処理装置が、
前記複数のプロセスの実行時にそれぞれ参照される複数の仮想メモリのアドレスと、前記複数の仮想メモリのそれぞれに割り当てる物理メモリ領域のアドレスとの対応関係を、記憶部に記憶されたアドレス情報に登録し、
前記複数のプロセスにあらかじめ付与された順位に基づいて、前記複数の仮想メモリのうち、順位が最後のプロセスに対応する仮想メモリを除く他の仮想メモリのそれぞれに割り当てられた物理メモリ領域の割り当て先が、現在割り当てられている仮想メモリに対応するプロセスの次のプロセスに対応する仮想メモリに変更されるように前記アドレス情報を更新する、
メモリ管理方法。
【請求項６】
第１の仮想マシンと第２の仮想マシンとが動作し、３以上のプロセスを含む複数のプロセスのそれぞれが前記第１の仮想マシンと前記第２の仮想マシンのいずれかにおいて並列に実行され、前記第１の仮想マシンにおいて前記複数のプロセスのうちの少なくとも１つが実行されるとともに、前記第２の仮想マシンにおいて前記複数のプロセスのうちの他の少なくとも１つが実行されるコンピュータに、
前記複数のプロセスの実行時にそれぞれ参照される複数の仮想メモリのアドレスと、前記複数の仮想メモリのそれぞれに割り当てる物理メモリ領域のアドレスとの対応関係を、記憶部に記憶されたアドレス情報に登録し、
前記複数のプロセスにあらかじめ付与された順位に基づいて、前記複数の仮想メモリのうち、順位が最後のプロセスに対応する仮想メモリを除く他の仮想メモリのそれぞれに割り当てられた物理メモリ領域の割り当て先が、現在割り当てられている仮想メモリに対応するプロセスの次のプロセスに対応する仮想メモリに変更されるように前記アドレス情報を更新する、
処理を実行させるメモリ管理プログラム。
【発明の詳細な説明】
【技術分野】
【０００１】
本発明は、情報処理装置、メモリ管理方法およびメモリ管理プログラムに関する。
【背景技術】
【０００２】
近年、ストレージ装置に保存すべきデータ量は増加の一途を辿っており、それに伴って古いストレージシステムを刷新し、新しいストレージシステムを構築することが求められている。しかし、従来のストレージシステムに含まれる製品には、用途に応じて接続方式やデータの運用方式などが異なっており、用途ごとに異なる製品を用いてストレージシステムを構築する必要があった。
【０００３】
例えば、ストレージ装置に対するアクセスを制御するストレージ制御装置には、接続方式の異なるものがある。具体的な例としては、ブロック単位でアクセス要求を受信するストレージ制御装置と、ファイル単位でアクセス要求を受信するストレージ制御装置とがある。
【０００４】
このような状況に対し、複数の接続方式に対応した“ユニファイド・ストレージ”と呼ばれる製品が登場している。ユニファイド・ストレージのシステムに適用されるストレージ制御装置は、例えば、ブロック単位でのアクセス要求を受信してストレージ装置へのアクセスを制御できるとともに、ファイル単位でのアクセス要求を受信してストレージ装置へのアクセスを制御することもできる。このように、ユニファイド・ストレージは接続方式に依存せず多様な用途のシステムに導入可能であるため、装置の統一化による運用コストの削減効果が期待できる。
【０００５】
一方、１つのコンピュータ上で複数の仮想マシンを動作させる仮想化技術が普及している。ここで、複数の仮想マシンが動作する状況でのメモリ管理方法としては、次のようなものがある。
【０００６】
例えば、ホストおよび複数のゲストの間で装置の制御を移管する仮想マシン制御ロジックと、第２のゲストの仮想メモリアドレスから第１のゲストの仮想メモリアドレスに情報を複製するための命令を実行する実行装置と、第１の仮想メモリアドレスおよび第２の仮想メモリアドレスを、それぞれ第１の物理メモリアドレスおよび第２の物理メモリアドレスに変換するメモリ管理装置とを備える装置が提案されている。
【０００７】
また、例えば、リングバッファ、または、転送ページおよびアドレス空間操作のどちらか一方を少なくとも使用することによって、第１のパーティションと第２のパーティションの間で情報の転送を可能にする転送機構を使用する方法が提案されている。
【先行技術文献】
【特許文献】
【０００８】
【特許文献１】特表２０１０−５０３１１５号公報
【特許文献２】特開２００６−３１８４４１号公報
【発明の概要】
【発明が解決しようとする課題】
【０００９】
ところで、ユニファイド・ストレージに適用されるストレージ制御装置の例として、ブロック単位でのアクセス要求に応じたアクセス制御処理と、ファイル単位でのアクセス要求に応じたアクセス制御処理とを、それぞれ個別の仮想マシン上で実行することが考えられる。この場合の方法として、一方の仮想マシンで受信したアクセス要求に応じたストレージ制御装置へのアクセス制御処理を、他方の仮想マシンを介して実行する方法が考えられる。
【００１０】
しかし、この方法では、ストレージ制御装置へのアクセスが行われるまでの間に、仮想マシン間でのデータの受け渡しや、受け渡されたデータを、一方のストレージ制御装置でのアクセス単位のデータから他方のストレージ制御装置でのアクセス単位のデータに変換する、といった多数のプロセスが実行される。そして、プロセスが実行されるごとに、実行済みのデータを次のプロセスが参照するメモリ領域へコピーするというコピー処理が発生する。このような多数回のコピー処理が発生することで、プロセッサの処理負荷が増大し、その結果、ホスト装置からのアクセス要求に対する応答性能が低下するという問題があった。
【００１１】
また、このような多数回のコピー処理の発生という問題は、上記のようなストレージ制御装置に限らず、複数の仮想マシンが動作する環境で多数のプロセス間でデータが受け渡される場合に発生し得る。
【００１２】
１つの側面では、本発明は、複数のプロセス間でデータが受け渡される際の処理負荷を低減することが可能な情報処理装置、メモリ管理方法およびメモリ管理プログラムを提供することを目的とする。
【課題を解決するための手段】
【００１３】
１つの案では、第１の仮想マシンと第２の仮想マシンとが動作し、３以上のプロセスを含む複数のプロセスのそれぞれが第１の仮想マシンと第２の仮想マシンのいずれかにおいて並列に実行され、第１の仮想マシンにおいて複数のプロセスのうちの少なくとも１つが実行されるとともに、第２の仮想マシンにおいて複数のプロセスのうちの他の少なくとも１つが実行される情報処理装置が提供される。この情報処理装置は、記憶部および処理部を有する。記憶部は、複数のプロセスの実行時にそれぞれ参照される複数の仮想メモリのアドレスと、複数の仮想メモリのそれぞれに割り当てられる物理メモリ領域のアドレスとの対応関係が登録されたアドレス情報を記憶する。処理部は、複数の仮想メモリのそれぞれに物理メモリ領域が割り当てられた状態において、複数のプロセスにあらかじめ付与された順位に基づいて、複数の仮想メモリのうち、順位が最後のプロセスに対応する仮想メモリを除く他の仮想メモリのそれぞれに割り当てられた物理メモリ領域の割り当て先が、現在割り当てられている仮想メモリに対応するプロセスの次のプロセスに対応する仮想メモリに変更されるようにアドレス情報を更新する。
【００１４】
また、１つの案では、上記の情報処理装置と同様の処理が実行されるメモリ管理方法が提供される。
さらに、１つの案では、上記の情報処理装置と同様の処理をコンピュータに実行させるメモリ管理プログラムが提供される。
【発明の効果】
【００１５】
１つの側面では、複数のプロセス間でデータが受け渡される際の処理負荷を低減できる。
【図面の簡単な説明】
【００１６】
【図１】第１の実施の形態に係る情報処理装置の構成例および処理例を示す図である。
【図２】第２の実施の形態に係るストレージシステムの構成例を示す図である。
【図３】ＣＭの処理機能の構成例を示すブロック図である。
【図４】ファイル単位で書き込みが要求された場合の処理の比較例を示す図である。
【図５】ファイル単位で読み出しが要求された場合の処理の比較例を示す図である。
【図６】ファイル単位で書き込みが要求された場合のアプリケーション間でのデータ受け渡し動作例を示す図である。
【図７】ファイル単位で読み出しが要求された場合のアプリケーション間でのデータ受け渡し動作例を示す図である。
【図８】アドレス変換テーブルのデータ構成例を示す図である。
【図９】書き込み処理の際のアドレス変換テーブルの更新例を示す図（その１）である。
【図１０】書き込み処理の際のアドレス変換テーブルの更新例を示す図（その２）である。
【図１１】各アプリケーションがメモリ制御部に対して処理の完了を通知する仕組みの例を示す図である。
【図１２】アプリケーションの処理手順の例を示すフローチャートである。
【図１３】アタッチ要求を受信したときのメモリ制御部の処理手順の例を示す図である。
【図１４】アプリケーションによるデータ処理の実行に伴うメモリ制御部の処理手順の例を示す図である。
【図１５】デタッチ要求を受信したときのメモリ制御部の処理手順の例を示す図である。
【図１６】変形例における物理メモリ領域の割り当て変更動作例を示す図である。
【発明を実施するための形態】
【００１７】
以下、本発明の実施の形態について図面を参照して説明する。
〔第１の実施の形態〕
図１は、第１の実施の形態に係る情報処理装置の構成例および処理例を示す図である。情報処理装置１においては、仮想マシン１０，２０が動作する。また、情報処理装置１においては、３以上の多数のプロセスを含む複数のプロセスが実行される。各プロセスは、仮想マシン１０，２０のいずれかにおいて実行される。また、複数のプロセスのうち少なくとも１つは、仮想マシン１０において実行され、複数のプロセスのうち他の少なくとも１つは、仮想マシン２０において実行される。さらに、これらの複数のプロセスは、並列に実行される。図１の例では、仮想マシン１０においてプロセス１１が実行され、仮想マシン２０においてプロセス２１ａ，２１ｂが実行される。
【００１８】
なお、プロセス１１，２１ａ，２１ｂは、例えば、それぞれ個別のアプリケーションプログラムにしたがって実行される。この場合、例えば、プロセス１１の処理を実現するアプリケーションプログラムは、仮想マシン１０が実行する仮想ＯＳ（Operating System）上で実行される。また、プロセス２１ａ，２１ｂの処理をそれぞれ実現するアプリケーションプログラムは、仮想マシン２０が実行する仮想ＯＳ上で実行される。
【００１９】
プロセス１１，２１ａ，２１ｂには、仮想メモリ１２，２２ａ，２２ｂがそれぞれ割り当てられている。仮想メモリ１２は、仮想マシン１０上の仮想メモリ空間に確保されるメモリ領域である。プロセス１１は、仮想メモリ１２を利用して所定の処理を実行する。仮想メモリ２２ａ，２２ｂは、仮想マシン２０上の仮想メモリ空間に確保されるメモリ領域である。プロセス２１ａは、仮想メモリ２２ａを利用して所定の処理を実行する。プロセス２１ｂは、仮想メモリ２２ｂを利用して所定の処理を実行する。なお、仮想メモリ１２，２２ａ，２２ｂのそれぞれの容量は同じであるとする。
【００２０】
また、プロセス１１，２１ａ，２１ｂには、あらかじめ順位が付与されている。この順位は、データの受け渡しの順序を示す。図１の例では、プロセス１１，２１ａ，２１ｂの順に順位が付与されており、データがプロセス１１，２１ａ，２１ｂの順に受け渡される。より詳しくは、プロセス１１によって処理された処理済みのデータは、仮想メモリ１２から仮想メモリ２２ａへ転送される。これにより、処理済みのデータがプロセス１１からプロセス２１ａへ受け渡される。また、プロセス２２ａによって処理された処理済みのデータは、仮想メモリ２２ａから仮想メモリ２２ｂへ転送される。これにより、処理済みのデータがプロセス２１ａからプロセス２１ｂへ受け渡される。
【００２１】
情報処理装置１においては、以下で説明する処理により、仮想メモリ１２から仮想メモリ２２ａへ、および、仮想メモリ２２ａから仮想メモリ２２ｂへの実体的なデータ転送が行われずに、プロセス間でデータが受け渡される。
【００２２】
情報処理装置１は、記憶部２および処理部３を有する。記憶部２は、例えば、ＲＡＭ（Random Access Memory）などの記憶装置の記憶領域として実現される。処理部３は、例えば、ＣＰＵ（Central Processing Unit）、ＭＰＵ（Micro Processing Unit）などのプロセッサにより実現される。
【００２３】
記憶部２には、アドレス情報２ａが記憶されている。アドレス情報２ａには、仮想メモリ１２，２２ａ，２２ｂの仮想アドレスと、仮想メモリ１２，２２ａ，２２ｂにそれぞれ割り当てられた物理メモリ領域の物理アドレスとの対応関係が登録されている。なお、アドレス情報２ａに登録されるアドレスは、例えば、対応するメモリ領域の先頭アドレスである。
【００２４】
ここで、図１では、アドレスＸの値を“ＡＤＤ＿Ｘ”と示している。例えば、仮想メモリ１２の仮想アドレスはＡＤＤ＿ａ、仮想メモリ２２ａ，２２ｂの仮想アドレスはそれぞれＡＤＤ＿Ａ，ＡＤＤ＿Ｂである。なお、図１におけるアドレス情報２ａの記載箇所では、アドレスの値について“ＡＤＤ＿”の記載を省略している。
【００２５】
処理部３は、仮想メモリ１２，２２ａ，２２ｂのそれぞれに対する物理メモリ領域の割り当てを制御する。例えば、図１の状態１において、処理部３は、物理メモリ領域３１〜３３を確保している。物理メモリ領域３１の物理アドレスはＡＤＤ＿１、物理メモリ領域３２の物理アドレスはＡＤＤ＿２、物理メモリ領域３３の物理アドレスはＡＤＤ＿３であるとする。状態１において、処理部３は、仮想メモリ１２，２２ａ，２２ｂに対して、物理メモリ領域３１，３２，３３をそれぞれ割り当てる。
【００２６】
この状態で、プロセス１１，２１ａ，２１ｂは、それぞれに対応付けられた仮想メモリを利用して処理を並列に実行する。実際には、プロセス１１，２１ａ，２１ｂは、物理メモリ領域３１，３２，３３をそれぞれ用いて処理を実行する。その結果、プロセス１１，２１ａ，２１ｂによる処理済みデータが、物理メモリ領域３１，３２，３３にそれぞれ格納される。
【００２７】
次に、処理部３は、仮想メモリ１２，２２ａ，２２ｂに割り当てる物理メモリ領域が次のように変更されるように、アドレス情報２ａを更新する。処理部３は、順位が最後のプロセス２１ｂに対応する仮想メモリ２２ｂを除く他の仮想メモリ１２，２２ａに割り当てられた物理メモリ領域３１，３２の割り当て先を、現在割り当てられている仮想メモリに対応するプロセスの次のプロセスに対応する仮想メモリに変更する。これにより、図１の状態２では、物理メモリ領域３１の割り当て先は仮想メモリ１２から仮想メモリ２２ａに変更され、物理メモリ領域３２の割り当て先は仮想メモリ２２ａから仮想メモリ２２ｂに変更される。
【００２８】
このような割り当て変更により、仮想メモリ１２に格納されていたプロセス１１による処理済みデータは、仮想メモリ２２ａに移動され、仮想メモリ２２ａに格納されていたプロセス２１ａによる処理済みデータは、仮想メモリ２２ｂに移動される。すなわち、プロセス１１による処理済みデータは、実体的なデータ転送が行われることなく、プロセス２１ａに受け渡される。また、プロセス２１ａによる処理済みデータも、実体的なデータ転送が行われることなく、プロセス２１ｂに受け渡される。
【００２９】
したがって、複数のプロセス間でデータが受け渡される際の情報処理装置１の処理負荷を低減することができる。また、複数の仮想メモリに割り当てられる物理メモリ領域が一度に変更されることで、複数のプロセスによる処理の並列性を維持したまま、プロセス間のデータ受け渡しの処理負荷を低減できる。
【００３０】
なお、状態２では、仮想メモリ１２に対しては、物理メモリ領域３３、または、新たに確保された物理メモリ領域が割り当てられる。
〔第２の実施の形態〕
第２の実施の形態では、第１の実施の形態の情報処理装置１を備えるシステムとして、ストレージシステムを例示する。
【００３１】
図２は、第２の実施の形態に係るストレージシステムの構成例を示す図である。図２に示すストレージシステムは、ストレージ装置１００とホスト装置３０１，３０２とを含む。ホスト装置３０１は、例えば、ＬＡＮ（Local Area Network）３１１を介してストレージ装置１００と接続されている。ホスト装置３０２は、例えば、ＳＡＮ（Storage Area Network）３１２を介してストレージ装置１００と接続されている。ホスト装置３０１は、ストレージ装置１００に対して、ストレージ装置１００内のストレージ部に対するアクセスを要求する。ホスト装置３０２も同様に、ストレージ装置１００に対して、ストレージ装置１００内のストレージ部に対するアクセスを要求する。
【００３２】
ストレージ装置１００は、ＣＭ（Controller Module）１１０とＤＥ（Drive Enclosure）１２０とを備える。ＤＥ１２０は、ホスト装置３０１，３０２からのアクセス対象となるストレージ部である。ＤＥ１２０には、ストレージ部を構成するストレージデバイスとして、複数のＨＤＤ（Hard Disk Drive）が搭載されている。なお、ＤＥ１２０は、例えば、ストレージ装置１００の外部に設けられていてもよい。また、ストレージ部を構成するストレージデバイスとしては、ＨＤＤに限らず、例えばＳＳＤ（Solid State Drive）等の他の種類のストレージデバイスが使用されてもよい。
【００３３】
ＣＭ１１０は、図１に示した情報処理装置１の一例である。ＣＭ１１０は、ストレージ部に対するアクセスを制御するストレージ制御部である。すなわち、ＣＭ１１０は、ホスト装置３０１，３０２からのアクセス要求に応じて、ＤＥ１２０内のＨＤＤへのアクセスを制御する。例えば、ＣＭ１１０は、ＤＥ１２０内のＨＤＤに記憶されたデータの読み出し要求をホスト装置３０１から受け付けると、読み出しを要求されたデータをＤＥ１２０内のＨＤＤから読み出し、ホスト装置３０１に送信する。また、ＣＭ１１０は、ＤＥ１２０内のＨＤＤへのデータの書き込み要求をホスト装置３０１から受け付けると、書き込みを要求されたデータをＤＥ１２０内のＨＤＤに書き込む。
【００３４】
ＣＭ１１０は、プロセッサ１１１、ＲＡＭ１１２、ＨＤＤ１１３、読み取り装置１１４、ホストインタフェース１１５，１１６およびディスクインタフェース１１７を備える。
プロセッサ１１１は、ＣＭ１１０全体を統括的に制御する。ＲＡＭ１１２は、ＣＭ１１０の主記憶装置として使用され、プロセッサ１１１に実行させるプログラムの少なくとも一部や、このプログラムによる処理に必要な各種データを一時的に記憶する。また、ＲＡＭ１１２は、ＤＥ１２０内のＨＤＤに記憶されたデータのキャッシュ領域としても使用される。
【００３５】
ＨＤＤ１１３は、ＣＭ１１０の二次記憶装置として使用され、プロセッサ１１１により実行されるプログラムやその実行に必要な各種のデータ等を記憶する。なお、二次記憶装置としては、例えば、ＳＳＤなどの他の種類の不揮発性記憶装置が使用されてもよい。
【００３６】
読み取り装置１１４には、可搬型の記録媒体１１４ａが脱着される。読み取り装置１１４は、記録媒体１１４ａに記録されたデータを読み取ってプロセッサ１１１に送信する。記録媒体１１４ａとしては、光ディスク、光磁気ディスク、半導体メモリなどがある。
【００３７】
ホストインタフェース１１５は、ＬＡＮ３１１を介してホスト装置３０１と接続し、ホスト装置３０１とプロセッサ１１１との間でデータを送受信するインタフェース処理を実行する。ホストインタフェース１１６は、ＳＡＮ３１２を介してホスト装置３０２と接続し、ホスト装置３０２とプロセッサ１１１との間でデータを送受信するインタフェース処理を実行する。
【００３８】
ディスクインタフェース１１７は、ＤＥ１２０と接続し、ＤＥ１２０内の各ＨＤＤとプロセッサ１１１との間でデータを送受信するインタフェース処理を実行する。
ところで、上記のストレージシステムにおいて、ホスト装置３０２は、ＣＭ１１０に対してブロック単位でアクセス要求を行う。例えば、ホスト装置３０２は、ＦＣ（Fibre Channel）、ＦＣｏＥ（FC over Ethernet、“Ethernet”は登録商標）、ｉＳＣＳＩ（SCSI：Small Computer System Interface）などの通信プロトコルにしたがってＣＭ１１０と通信する。一方、ホスト装置３０１は、ＣＭ１１０に対してファイル単位でアクセス要求を行う。例えば、ホスト装置３０１は、ＮＦＳ（Network File System）、ＣＩＦＳ（Common Internet File System）などの通信プロトコルにしたがってＣＭ１１０と通信する。
【００３９】
ストレージ装置１００は、データのアクセス単位が異なる２つの通信プロトコルに対応する“ユニファイド・ストレージ”として動作する。ＣＭ１１０は、ブロック単位でのアクセス要求に応じてＤＥ１２０へのアクセス制御を行う処理機能と、ファイル単位でのアクセス要求に応じてＤＥ１２０へのアクセス制御を行う処理機能の両方を備える。ＣＭ１１０は、これら２つの処理機能を、個別の仮想マシン上で実行されるアプリケーションプログラムによってそれぞれ実現する。
【００４０】
図３は、ＣＭの処理機能の構成例を示すブロック図である。ＣＭ１１０には、仮想マシン２１０，２２０が構築される。仮想マシン２１０は、ＬＡＮ３１１を介してホスト装置３０１に接続され、ホスト装置３０１からのファイル単位でのアクセス要求に応じてＤＥ１２０へのアクセス制御を行う処理機能を実現する。一方、仮想マシン２２０は、ＳＡＮ３１２を介してホスト装置３０２に接続され、ホスト装置３０２からのブロック単位でのアクセス要求に応じてＤＥ１２０へのアクセス制御を行う処理機能を実現する。
【００４１】
また、ＣＭ１１０は、ハイパーバイザ２３０を有する。ハイパーバイザ２３０の処理は、ＣＭ１１０のプロセッサ１１１によってハイパーバイザプログラムを実行することによって実現される。ハイパーバイザ２３０は、仮想マシン２１０，２２０を構築し、それらの動作を管理する。また、ハイパーバイザ２３０は、仮想マシン２１０，２２０に割り当てる物理リソースを管理する。ハイパーバイザ２３０は、そのような物理リソースの管理機能の１つとして、メモリ制御部２３１を有する。メモリ制御部２３１は、仮想マシン２１０，２２０において実行される、後述する特定の複数のアプリケーションプログラムに対する物理メモリ領域の割り当てを管理する。
【００４２】
また、ＣＭ１１０は、仮想マシン２１０において実現される処理機能として、仮想ＯＳ２１１、ＮＡＳ（Network Attached Storage）エンジン２１２およびブロックドライバ２１３を有する。また、ＣＭ１１０は、仮想マシン２２０において実現される処理機能として、仮想ＯＳ２２１、ＳＡＮエンジン２２２、ブロックターゲットドライバ２２３およびブロックドライバ２２４を有する。
【００４３】
仮想ＯＳ２１１の処理は、仮想マシン２１０がＯＳプログラムを実行することで実現される。ＮＡＳエンジン２１２およびブロックドライバ２１３の処理は、仮想マシン２１０が、仮想ＯＳ２１１上でそれぞれ所定のアプリケーションプログラムを実行することで実現される。
【００４４】
ＮＡＳエンジン２１２は、ストレージ装置１００をＮＡＳとして動作させるための処理を実行する。すなわち、ＮＡＳエンジン２１２は、ホスト装置３０１からのファイル単位でのアクセス要求に応じてＤＥ１２０に対するアクセス制御を行う。
【００４５】
ブロックドライバ２１３は、ＮＡＳエンジン２１２からの要求に応じて、ストレージ部に対するデータの読み書きを実行する。ＮＡＳエンジン２１２が実マシン上で実現される場合には、ブロックドライバ２１３は、読み書きの対象となるデータを実際のストレージ部、すなわちＤＥ１２０との間で送受信する。しかし、本実施の形態ではＮＡＳエンジン２１２は仮想マシン２１０上で実現される。そこで、ブロックドライバ２１３は、読み書きの対象となるデータを、ＤＥ１２０の代わりに仮想マシン２２０上のブロックターゲットドライバ２２３との間で送受信する。これにより、仮想マシン２１０は、ホスト装置３０１からのアクセス要求を受信すると、仮想マシン２２０を介してＤＥ１２０にアクセスする。
【００４６】
一方、仮想ＯＳ２２１の処理は、仮想マシン２２０がＯＳプログラムを実行することで実現される。ＳＡＮエンジン２２２、ブロックターゲットドライバ２２３およびブロックドライバ２２４の処理は、仮想マシン２２０が、仮想ＯＳ２２１上でそれぞれ所定のアプリケーションプログラムを実行することで実現される。
【００４７】
ＳＡＮエンジン２２２は、ホスト装置３０２からのブロック単位でのアクセス要求に応じてＤＥ１２０に対するアクセス制御を行う。また、ＳＡＮエンジン２２２は、ブロック割り当て部２２２ａを有する。ブロック割り当て部２２２ａは、ＮＡＳエンジン２１２からＤＥ１２０に対するアクセスの単位となるブロックと、ＳＡＮエンジン２２２からＤＥ１２０に対するアクセスの単位となるブロックとを、相互に変換する。以下、前者を“ＮＡＳブロック”、後者を“ＳＡＮブロック”と記載する場合がある。
【００４８】
なお、ブロック割り当て部２２２ａは、ＳＡＮエンジン２２２を実現するＳＡＮエンジンプログラムとは別のアプリケーションプログラムの実行によって実現されてもよい。
ブロックターゲットドライバ２２３は、ブロックドライバ２１３とブロック割り当て部２２２ａとの間でＮＡＳブロックを受け渡す。
【００４９】
ブロックドライバ２２４は、ＳＡＮエンジン２２２からの要求に応じて、ＤＥ１２０に対してＳＡＮブロック単位でアクセスする。例えば、ホスト装置３０２から書き込み要求が送信された場合、ブロックドライバ２２４は、ＳＡＮエンジン２２２がホスト装置３０２から受信した書き込みデータをＳＡＮブロック単位でＳＡＮエンジン２２２から取得し、ＤＥ１２０に書き込む。また、ホスト装置３０２から読み出し要求が送信された場合、ブロックドライバ２２４は、読み出しが要求されたデータをＳＡＮブロック単位でＤＥ１２０から読み出し、ＳＡＮエンジン２２２に渡す。渡されたデータはホスト装置３０２に送信される。
【００５０】
一方、ホスト装置３０２から書き込み要求が送信された場合、ブロックドライバ２２４は、書き込みが要求されたデータをＳＡＮブロック単位でブロック割り当て部２２２ａから取得し、ＤＥ１２０に書き込む。また、ホスト装置３０１から読み出し要求が送信された場合、ブロックドライバ２２４は、読み出しが要求されたデータをＳＡＮブロック単位でＤＥ１２０から読み出し、ブロック割り当て部２２２ａに渡す。
【００５１】
ここで、ホスト装置３０１からＣＭ１１０に対してファイル単位での書き込みおよび読み出しが要求された場合の処理の比較例について説明する。まず、図４は、ファイル単位で書き込みが要求された場合の処理の比較例を示す図である。
【００５２】
ファイル単位での書き込みが要求された場合、書き込みが要求されたデータは、ＮＡＳエンジン２１２、ブロックドライバ２１３、ブロックターゲットドライバ２２３、ブロック割り当て部２２２ａ、ブロックドライバ２２４の順に受け渡される。そして、それぞれの処理機能によって、データに対して必要に応じた処理が施される。なお、以下の説明では、ＮＡＳエンジン２１２、ブロックドライバ２１３、ブロックターゲットドライバ２２３、ブロック割り当て部２２２ａ、ブロックドライバ２２４を特に区別せずに表す場合には、これらの処理機能を“アプリケーション”と記載する場合がある。
【００５３】
図４に示すように、ＮＡＳエンジン２１２、ブロックドライバ２１３、ブロックターゲットドライバ２２３、ブロック割り当て部２２２ａ、ブロックドライバ２２４に対して、作業領域としてメモリ領域４０１ａ，４０１ｂ，４０１ｃ，４０１ｄ，４０１ｅが、ハイパーバイザ２３０によってそれぞれ割り当てられる。メモリ領域４０１ａ，４０１ｂは、仮想マシン２１０内の仮想メモリ領域から割り当てられる。また、メモリ領域４０１ｃ〜４０１ｅは、仮想マシン２２０内の仮想メモリ領域から割り当てられる。
【００５４】
上記の各アプリケーションにより、例えば、次のような処理が実行される。ＮＡＳエンジン２１２は、ホスト装置３０１から受信した書き込みデータをメモリ領域４０１ａに格納する（ステップＳ１１）。ＮＡＳエンジン２１２は、ブロックドライバ２１３に対して書き込みデータの書き込み要求コマンドを通知するとともに、メモリ領域４０１ａに格納されたデータをメモリ領域４０１ｂにコピーする。
【００５５】
この書き込み要求コマンドの通知時には、仮想ＯＳ２１１が備えるファイルシステムにより、書き込みが要求されたファイルをＮＡＳブロックに分割した場合のブロックアドレスが計算される。そして、ＮＡＳエンジン２１２からブロックドライバ２１３に対して、ＮＡＳブロック単位のブロックアドレスを用いた書き込み要求コマンドが通知される。
【００５６】
ブロックドライバ２１３は、ＮＡＳエンジン２１２から通知された書き込み要求コマンドに基づいて、メモリ領域４０１ｂにコピーされた書き込みデータに対して、ＮＡＳブロック単位の制御情報を付加する（ステップＳ１２）。これにより、書き込みが要求されたファイルがＮＡＳブロック単位のデータに分割される。ブロックドライバ２１３は、仮想マシン２２０のブロックターゲットドライバ２２３に対して次の処理を依頼するとともに、メモリ領域４０ｂに格納された、制御情報が付加された書き込みデータを、メモリ領域４０１ｃにコピーする。
【００５７】
ブロックターゲットドライバ２２３は、ブロック割り当て部２２２ａに対して次の処理を依頼する（ステップＳ１３）とともに、メモリ領域４０１ｃに格納されたデータをメモリ領域４０１ｄにコピーする。
【００５８】
ブロック割り当て部２２２ａは、メモリ領域４０１ｄに格納されたＮＡＳブロック単位の書き込みデータを、ＳＡＮブロック単位の書き込みデータに変換し、変換後の書き込みデータに対して、さらに所定のデータ加工を施す（ステップＳ１４）。
【００５９】
ＳＡＮブロック単位の書き込みデータへの変換は、ステップＳ１２で付加された制御情報の代わりに、ＳＡＮブロック単位の制御情報が書き込みデータに付加されることで行われる。これにより、ＮＡＳブロック単位の書き込みデータが、ＳＡＮブロック単位に分割し直される。また、データ加工の例としては、圧縮処理、あらかじめ決められたＲＡＩＤ（Redundant Arrays of Inexpensive Disks）レベルに応じたデータ変換処理などがある。ブロック割り当て部２２２ａは、以上の処理が終了すると、ブロックドライバ２２４に対して次の処理を依頼するとともに、メモリ領域４０１ｄに格納されたデータ加工後の書き込みデータを、メモリ領域４０１ｅにコピーする。
【００６０】
ブロックドライバ２２４は、ブロック割り当て部２２２ａからの依頼に基づいて、メモリ領域４０１ｅに格納されたＳＡＮブロック単位の書き込みデータを、ＤＥ１２０内の該当するＨＤＤに書き込む（ステップＳ１５）。
【００６１】
図５は、ファイル単位で読み出しが要求された場合の処理の比較例を示す図である。ファイル単位での読み出しが要求された場合、読み出しが要求されたデータは、ブロックドライバ２２４、ブロック割り当て部２２２ａ、ブロックターゲットドライバ２２３、ブロックドライバ２１３、ＮＡＳエンジン２１２の順に受け渡される。そして、それぞれのアプリケーションによって、データに対して必要に応じた処理が施される。
【００６２】
図５に示すように、ブロックドライバ２２４、ブロック割り当て部２２２ａ、ブロックターゲットドライバ２２３、ブロックドライバ２１３、ＮＡＳエンジン２１２に対して、作業領域としてメモリ領域４０２ａ，４０２ｂ，４０２ｃ，４０２ｄ，４０２ｅが、ハイパーバイザ２３０によってそれぞれ割り当てられる。メモリ領域４０２ａ〜４０２ｃは、仮想マシン２２０内の仮想メモリ領域から割り当てられ、メモリ領域４０２ｄ，４０２ｅは、仮想マシン２１０内の仮想メモリ領域から割り当てられる。
【００６３】
上記の各アプリケーションにより、例えば、次のような処理が実行される。ブロックドライバ２２４は、読み出しが要求された読み出しデータを、ＤＥ１２０内の該当するＨＤＤからＳＡＮブロック単位で読み出し、メモリ領域４０２ａに格納する（ステップＳ２１）。ブロックドライバ２２４は、ブロック割り当て部２２２ａに対して次の処理を依頼するとともに、メモリ領域４０２ａに格納した読み出しデータをメモリ領域４０２ｂへコピーする。メモリ領域４０２ａに格納された読み出しデータには、ＳＡＮブロック単位の制御情報が付加されている。
【００６４】
ブロック割り当て部２２２ａは、メモリ領域４０２ｂに格納された読み出しデータに対して、所定のデータ加工を施し、さらに、データ加工後のＳＡＮブロック単位の書き込みデータを、ＮＡＳブロック単位の読み出しデータに変換する（ステップＳ２２）。
【００６５】
データ加工とは、図４のステップＳ１４におけるデータ加工の逆変換処理である。例えば、ステップＳ１４でデータの圧縮処理が実行される場合、ステップＳ２２ではデータの解凍処理が実行される。ＮＡＳブロック単位の書き込みデータへの変換は、ＳＡＮブロック単位の制御情報の代わりに、ＮＡＳブロック単位の制御情報が読み出しデータに付加されることで行われる。これにより、ＤＥ１２０から読み出されたＳＡＮブロック単位の読み出しデータは、ＮＡＳブロック単位の読み出しデータに分割し直される。ブロック割り当て部２２２ａは、以上の処理が終了すると、ブロックターゲットドライバ２２３に対して次の処理を依頼するとともに、ＮＡＳブロック単位のブロックデータを、制御情報とともにメモリ領域４０２ｂからメモリ領域４０２ｃにコピーする。
【００６６】
ブロックターゲットドライバ２２３は、ブロックドライバ２１３に対して次の処理を依頼するとともに、メモリ領域４０２ｃに格納されたデータをメモリ領域４０２ｄにコピーする。これにより、ブロックターゲットドライバ２２３は、ＮＡＳブロック単位の読み出しデータをブロックドライバ２１３に受け渡す（ステップＳ２３）。
【００６７】
ブロックドライバ２１３は、書き込みデータに付加された制御情報を削除し、書き込みデータをＮＡＳエンジン２１２が参照可能なデータに変換する（ステップＳ２４）。ブロックドライバ２１３は、ＮＡＳエンジン２１２に対して次の処理を依頼するとともに、メモリ領域４０２ｄに格納された、制御情報が削除された読み出しデータを、メモリ領域４０２ｅにコピーする。
【００６８】
ステップＳ２４の処理では、ファイルシステムにより、メモリ領域４０２ｅに格納された読み出しデータにおけるファイル単位の区分位置がＮＡＳエンジン２１２に通知される。ＮＡＳエンジン２１２は、メモリ領域４０２ｅに格納された読み出しデータをファイル単位で読み出し、読み出したファイルをホスト装置３０１に送信する（ステップＳ２５）。
【００６９】
上記の図４の処理により、ホスト装置３０１からファイル単位で書き込みが要求された場合でも、書き込みが要求されたデータはＳＡＮブロック単位でＤＥ１２０に格納されるようになる。また、上記の図５の処理により、ホスト装置３０１からファイル単位で読み出しが要求された場合でも、読み出しが要求されたデータはＳＡＮブロック単位でＤＥ１２０から読み出され、ＮＡＳブロック単位のデータに変換され、さらにファイル単位のデータに変換されて、ホスト装置３０１に送信されるようになる。
【００７０】
しかしながら、図４，図５で説明したように、ファイル単位での書き込みや読み出しが要求された場合には、複数のアプリケーションの間で、必要に応じて変換や加工が施されながら、書き込みデータや読み出しデータが受け渡される。そして、書き込みデータや読み出しデータがアプリケーション間で受け渡されるたびに、それらのデータのコピーが行われる。
【００７１】
ここで、図４，図５で説明したように、各アプリケーションが対応するメモリ領域内のデータに対して行う処理内容のうち、最も処理負荷が大きい内容はブロック割り当て部２２２ａによるデータの変換や加工である。一方、ブロック割り当て部２２２ａ以外のアプリケーションによる処理内容のうち、最も処理負荷が大きい内容は制御情報の付け替えであり、メモリ領域に格納された全書き込みデータまたは全読み出しデータの入出力が発生するものではない。このため、各アプリケーションが対応するメモリ領域内のデータに対して行う処理の負荷は、アプリケーション全体として見れば、アプリケーション間でのデータコピーの負荷より圧倒的に小さい。
【００７２】
したがって、書き込み処理や読み出し処理が行われる際の全体の処理負荷に対して、アプリケーション間でのデータコピーの負荷は比較的大きな割合を占める。特に、近年では大容量のデータが取り扱われることが多くなり、それに伴って、上記のデータコピーによる処理負荷が全体の処理時間に大きな影響を与えるようになってきた。
【００７３】
例えば、ＣＭ１１０とＤＥ１２０との間の最大転送速度をχ（ＭＢ／ｓ）とし、図４に示したメモリ領域のデータに対して、対応するアプリケーションが変換、データ加工などの処理を施すことによる転送速度の低下率をα（％）とし、メモリ領域間のデータコピーによる転送速度の低下率をβ（％）とする。アプリケーションによる変換、データ加工などの処理回数を３回、メモリ領域間のデータコピー回数を４回とすると、全体の転送速度は例えば“（１−α）3（１−β）4χ”と計算される。χ＝３００（ＭＢ／ｓ）、α＝５（％）、β＝３（％）とすると、全体の転送速度は２２７．７ＭＢ／ｓとなり、転送速度性能が２４％も劣化してしまう。また、ＣＭ１１０のプロセッサの処理負荷の観点では、ＤＥ１２０との間のデータ伝送とメモリ領域間のコピーとで、プロセッサの処理時間のほとんどが占められてしまい、ホスト装置３０１，３０２に対するＣＭ１１０の応答速度だけでなく、ＣＭ１１０の他の処理速度も著しく低下してしまう。
【００７４】
そこで、第２の実施の形態において、ＣＭ１１０は、アプリケーションの間でデータを受け渡す際に、アプリケーションが参照する各仮想メモリ領域に対する物理メモリ領域の割り当てを変更する。これにより、アプリケーションの間でデータを受け渡すための実体的なデータ転送を発生させないようにする。このような制御は、ハイパーバイザ２３０のメモリ制御部２３１によって行われる。
【００７５】
図６は、ファイル単位で書き込みが要求された場合のアプリケーション間でのデータ受け渡し動作例を示す図である。ホスト装置３０１からファイル単位で書き込みが要求された場合の書き込み処理の実行時には、メモリ制御部２３１は、ＮＡＳエンジン２１２、ブロックドライバ２１３、ブロックターゲットドライバ２２３、ブロック割り当て部２２２ａ、ブロックドライバ２２４に対して、作業領域として仮想メモリ領域２４１ａ，２４１ｂ，２４１ｃ，２４１ｄ，２４１ｅをそれぞれ割り当てる。仮想メモリ領域２４１ａ，２４１ｂは、仮想マシン２１０内の仮想メモリ空間から割り当てられる。また、仮想メモリ領域２４１ｃ〜２４１ｅは、仮想マシン２２０内の仮想メモリ空間から割り当てられる。
【００７６】
なお、仮想メモリ領域２４１ａ〜２４１ｅは、同一の容量を有する。また、これ以後、書き込み処理が終了するまでの間、各アプリケーションには作業領域として同じ仮想メモリ領域が割り当てられたままになる。
【００７７】
また、メモリ制御部２３１は、ＣＭ１１０のＲＡＭ１１２上に５つの物理メモリ領域１４１ａ〜１４１ｅを確保する。物理メモリ領域１４１ａ〜１４１ｅのそれぞれの容量は、仮想メモリ領域２４１ａ〜２４１ｅのそれぞれと同じである。メモリ制御部２３１は、仮想メモリ領域２４１ａ〜２４１ｅのそれぞれに対して、物理メモリ領域１４１ａ〜１４１ｅのいずれかを割り当てる。この割り当ての際、メモリ制御部２３１は、次のように、仮想メモリ領域に割り当てる物理メモリ領域を、データの転送方向に沿って循環的に変更する。
【００７８】
例えば、図６の状態１１において、メモリ制御部２３１は、仮想メモリ領域２４１ａ，２４１ｂ，２４１ｃ，２４１ｄ，２４１ｅに対して、物理メモリ領域１４１ａ，１４１ｂ，１４１ｃ，１４１ｄ，１４１ｅをそれぞれ割り当てる。この状態では、ＮＡＳエンジン２１２は、物理メモリ領域１４１ａを利用しながら図４のステップＳ１１のような処理を実行する。ブロックドライバ２１３は、物理メモリ領域１４１ｂを利用しながら図４のステップＳ１２のような処理を実行する。ブロックターゲットドライバ２２３は、物理メモリ領域１４１ｃを利用しながら図４のステップＳ１３のような処理を実行する。ブロック割り当て部２２２ａは、物理メモリ領域１４１ｄを利用しながら図４のステップＳ１４のような処理を実行する。ブロックドライバ２２４は、物理メモリ領域１４１ｅを利用しながら図４のステップＳ１５のような処理を実行する。ただし、各アプリケーションによる図４のステップＳ１１〜Ｓ１５のうちの対応する処理には、次のアプリケーションに対応する仮想メモリ領域へのデータコピー処理は含まれない。各アプリケーションによる上記処理は、並列に実行される。
【００７９】
各アプリケーションによる上記の処理が終了すると、メモリ制御部２３１は、仮想メモリ領域２４１ａ〜２４１ｅに対する物理メモリ領域１４１ａ〜１４１ｅの割り当てをし直す。このとき、メモリ制御部２３１は、あるアプリケーションに対応する仮想メモリ領域に割り当てられていた物理メモリ領域を、その次のアプリケーションに対応する仮想メモリ領域に割り当てる。
【００８０】
例えば、図６の状態１２に示すように、物理メモリ領域１４１ａの割り当て先は、仮想メモリ領域２４１ａから仮想メモリ領域２４１ｂに変更される。物理メモリ領域１４１ｂの割り当て先は、仮想メモリ領域２４１ｂから仮想メモリ領域２４１ｃに変更される。物理メモリ領域１４１ｃの割り当て先は、仮想メモリ領域２４１ｃから仮想メモリ領域２４１ｄに変更される。物理メモリ領域１４１ｄの割り当て先は、仮想メモリ領域２４１ｄから仮想メモリ領域２４１ｅに変更される。物理メモリ領域１４１ｅの割り当て先は、仮想メモリ領域２４１ｅから仮想メモリ領域２４１ａに変更される。この状態で、各アプリケーションによる処理が並列に実行される。
【００８１】
さらに、状態１２での各アプリケーションによる処理が終了すると、メモリ制御部２３１は、仮想メモリ領域２４１ａ〜２４１ｅに対する物理メモリ領域１４１ａ〜１４１ｅの割り当てをし直す。これにより、状態１３に遷移する。状態１３では、物理メモリ領域１４１ａの割り当て先は、仮想メモリ領域２４１ｂから仮想メモリ領域２４１ｃに変更される。物理メモリ領域１４１ｂの割り当て先は、仮想メモリ領域２４１ｃから仮想メモリ領域２４１ｄに変更される。物理メモリ領域１４１ｃの割り当て先は、仮想メモリ領域２４１ｄから仮想メモリ領域２４１ｅに変更される。物理メモリ領域１４１ｄの割り当て先は、仮想メモリ領域２４１ｅから仮想メモリ領域２４１ａに変更される。物理メモリ領域１４１ｅの割り当て先は、仮想メモリ領域２４１ａから仮想メモリ領域２４１ｂに変更される。
【００８２】
このように、各仮想メモリ領域に割り当てられる物理メモリ領域は、データの転送方向に沿って循環的に変更される。これにより、あるアプリケーションに参照されていた仮想メモリ領域内のデータは、そのデータが物理メモリ空間上で移動することなく、次のアプリケーションによって参照可能な状態になる。例えば、状態１１でＮＡＳエンジン２１２に参照される仮想メモリ領域２４１ａに割り当てられていた物理メモリ領域１４１ａは、状態１２ではブロックドライバ２１３に参照される仮想メモリ領域２４１ｂに割り当てられる。これにより、状態１１で仮想メモリ領域２４１ａに格納されたデータは、状態１２ではブロックドライバ２１３によって参照される。このような処理により、物理メモリ空間上でデータを移動させずに、アプリケーション間でデータを受け渡すことが可能になり、プロセッサ１１１の処理負荷を低減できる。なお、後述するように、アプリケーション間でデータを受け渡す際の処理は、アドレス変換テーブルの書き替え処理のみとなり、この処理負荷は、仮想メモリ領域間でデータが物理的に移動する際の処理負荷より大幅に小さい。
【００８３】
また、仮想メモリ領域２４１ａ〜２４１ｅには、それぞれ異なる書き込みデータが格納される。そして、各アプリケーションにより、対応する仮想メモリ領域に格納されたデータに対する処理が並列に実行される。上記のように、各アプリケーションによる対応する仮想メモリ領域を用いた処理が終了すると、仮想メモリ領域に対する物理メモリ領域の割り当てが、データの転送方向に沿って循環的に変更される。これにより、各アプリケーションによる処理の並列性を保ったまま、アプリケーション間のデータの受け渡しの際の処理負荷を低減できる。
【００８４】
図７は、ファイル単位で読み出しが要求された場合のアプリケーション間でのデータ受け渡し動作例を示す図である。ホスト装置３０１からファイル単位で読み出しが要求された場合の書き込み処理の実行時には、メモリ制御部２３１は、ブロックドライバ２２４、ブロック割り当て部２２２ａ、ブロックターゲットドライバ２２３、ブロックドライバ２１３、ＮＡＳエンジン２１２に対して、作業領域として仮想メモリ領域２４２ａ，２４２ｂ，２４２ｃ，２４２ｄ，２４２ｅをそれぞれ割り当てる。仮想メモリ領域２４２ａ〜２４２ｃは、仮想マシン２２０内の仮想メモリ空間から割り当てられ、仮想メモリ領域２４２ｄ，２４２ｅは、仮想マシン２１０内の仮想メモリ空間から割り当てられる。
【００８５】
なお、書き込み要求時と同様に、仮想メモリ領域２４２ａ〜２４２ｅは、同一の容量を有する。また、これ以後、読み出し処理が終了するまでの間、各アプリケーションには作業領域として同じ仮想メモリ領域が割り当てられたままになる。
【００８６】
また、メモリ制御部２３１は、ＣＭ１１０のＲＡＭ１１２上に５つの物理メモリ領域１４２ａ〜１４２ｅを確保する。物理メモリ領域１４２ａ〜１４２ｅのそれぞれの容量は、仮想メモリ領域２４２ａ〜２４２ｅのそれぞれと同じである。メモリ制御部２３１は、仮想メモリ領域２４２ａ〜２４２ｅのそれぞれに対して、物理メモリ領域１４２ａ〜１４２ｅのいずれかを割り当てる。この割り当ての際、メモリ制御部２３１は、次のように、仮想メモリ領域に割り当てる物理メモリ領域を、データの転送方向に沿って循環的に変更する。
【００８７】
例えば、図７の状態２１において、メモリ制御部２３１は、仮想メモリ領域２４２ａ，２４２ｂ，２４２ｃ，２４２ｄ，２４２ｅに対して、物理メモリ領域１４２ａ，１４２ｂ，１４２ｃ，１４２ｄ，１４２ｅをそれぞれ割り当てる。この状態では、ブロックドライバ２２４は、物理メモリ領域１４２ａを利用しながら図５のステップＳ２１のような処理を実行する。ブロック割り当て部２２２ａは、物理メモリ領域１４２ｂを利用しながら図５のステップＳ２２のような処理を実行する。ブロックターゲットドライバ２２３は、物理メモリ領域１４２ｃを利用しながら図５のステップＳ２３のような処理を実行する。ブロックドライバ２１３は、物理メモリ領域１４２ｄを利用しながら図５のステップＳ２４のような処理を実行する。ＮＡＳエンジン２１２は、物理メモリ領域１４２ｅを利用しながら図５のステップＳ２５のような処理を実行する。ただし、各アプリケーションによる図５のステップＳ２１〜Ｓ２５のうちの対応する処理には、次のアプリケーションに対応する仮想メモリ領域へのデータコピー処理は含まれない。
【００８８】
各アプリケーションによる上記の処理が終了すると、メモリ制御部２３１は、仮想メモリ領域２４２ａ〜２４２ｅに対する物理メモリ領域１４２ａ〜１４２ｅの割り当てをし直す。このとき、メモリ制御部２３１は、あるアプリケーションに対応する仮想メモリ領域に割り当てられていた物理メモリ領域を、その次のアプリケーションに対応する仮想メモリ領域に割り当てる。
【００８９】
例えば、図７の状態２２に示すように、物理メモリ領域１４２ａの割り当て先は、仮想メモリ領域２４２ａから仮想メモリ領域２４２ｂに変更される。物理メモリ領域１４２ｂの割り当て先は、仮想メモリ領域２４２ｂから仮想メモリ領域２４２ｃに変更される。物理メモリ領域１４２ｃの割り当て先は、仮想メモリ領域２４２ｃから仮想メモリ領域２４２ｄに変更される。物理メモリ領域１４２ｄの割り当て先は、仮想メモリ領域２４２ｄから仮想メモリ領域２４２ｅに変更される。物理メモリ領域１４２ｅの割り当て先は、仮想メモリ領域２４２ｅから仮想メモリ領域２４２ａに変更される。
【００９０】
さらに、状態２２での各アプリケーションによる処理が終了すると、メモリ制御部２３１は、仮想メモリ領域２４２ａ〜２４２ｅに対する物理メモリ領域１４２ａ〜１４２ｅの割り当てをし直す。これにより、状態２３に遷移する。状態２３では、物理メモリ領域１４２ａの割り当て先は、仮想メモリ領域２４２ｂから仮想メモリ領域２４２ｃに変更される。物理メモリ領域１４２ｂの割り当て先は、仮想メモリ領域２４２ｃから仮想メモリ領域２４２ｄに変更される。物理メモリ領域１４２ｃの割り当て先は、仮想メモリ領域２４２ｄから仮想メモリ領域２４２ｅに変更される。物理メモリ領域１４２ｄの割り当て先は、仮想メモリ領域２４２ｅから仮想メモリ領域２４２ａに変更される。物理メモリ領域１４２ｅの割り当て先は、仮想メモリ領域２４２ａから仮想メモリ領域２４２ｂに変更される。
【００９１】
このように、書き込みの場合と同様、読み出しの場合でも、各仮想メモリ領域に割り当てられる物理メモリ領域は、データの転送方向に沿って循環的に変更される。これにより、あるアプリケーションに参照されていた仮想メモリ領域内のデータは、そのデータが物理メモリ空間上で移動することなく、次のアプリケーションによって参照可能な状態になる。したがって、物理メモリ空間上でデータを移動させずに、アプリケーション間でデータを受け渡すことが可能になり、プロセッサ１１１の処理負荷を低減できる。
【００９２】
また、書き込みの場合と同様、仮想メモリ領域２４２ａ〜２４２ｅには、それぞれ異なる読み出しデータが格納される。そして、各アプリケーションにより、対応する仮想メモリ領域に格納されたデータに対する処理が並列に実行される。上記のように、各アプリケーションによる対応する仮想メモリ領域を用いた処理が終了すると、仮想メモリ領域に対する物理メモリ領域の割り当てが、データの転送方向に沿って循環的に変更される。これにより、各アプリケーションによる処理の並列性を保ったまま、アプリケーション間のデータの受け渡しの際の処理負荷を低減できる。
【００９３】
図８は、アドレス変換テーブルのデータ構成例を示す図である。アドレス変換テーブル２５０は、主として、各アプリケーションが参照する仮想メモリ領域と、物理メモリ領域との対応関係を保持する。アドレス変換テーブル２５０により、物理メモリアドレスが、仮想ＯＳ２１１，２２１がそれぞれ参照可能なアドレス空間にマッピングされる。アドレス変換テーブル２５０は、メモリ制御部２３１によって生成されてＲＡＭ１１２に記録され、更新される。
【００９４】
ホスト装置３０１からの要求に応じた書き込み処理または読み出し処理が実行される際に、アドレス変換テーブル２５０にはエントリ情報２５１ａ〜２５１ｅが登録される。エントリ情報２５１ａ〜２５１ｅのそれぞれは、上記のようなデータの受け渡しが行われるアプリケーション、すなわち、ＮＡＳエンジン２１２、ブロックドライバ２１３、ブロックターゲットドライバ２２３、ブロック割り当て部２２２ａ、ブロックドライバ２２４のいずれかに対応付けられている。
【００９５】
エントリ情報２５１ａ〜２５１ｅのそれぞれは、仮想アドレス、物理アドレス、アプリケーション識別子、処理完了フラグ、処理順およびポインタの各項目を有する。
仮想アドレスの項目には、対応するアプリケーションが参照する仮想メモリ領域の先頭メモリアドレスが登録される。仮想アドレスの項目に登録されるアドレスは、対応するアプリケーションが含まれる仮想ＯＳによって参照される仮想メモリ空間上のアドレスである。
【００９６】
物理アドレスの項目には、対応する仮想メモリ領域に割り当てられた物理メモリ領域の先頭アドレスが登録される。書き込み処理または読み出し処理の実行に伴って、物理アドレスの項目に登録されるアドレス値が変更される。これにより、仮想メモリ領域に対する物理メモリ領域の割り当てが変更される。
【００９７】
アプリケーション識別子の項目には、対応するアプリケーション、すなわち、ＮＡＳエンジン２１２、ブロックドライバ２１３、ブロックターゲットドライバ２２３、ブロック割り当て部２２２ａ、ブロックドライバ２２４のいずれかを識別するための識別情報が登録される。
【００９８】
処理完了フラグの項目には、対応するアプリケーションによる、対応する仮想メモリ領域を利用した処理の実行が完了したかを示すフラグ情報が登録される。処理の実行が完了していない場合、処理完了フラグの項目には“０”が設定され、処理の実行が完了すると、処理完了フラグの項目には“１”が設定される。
【００９９】
処理順の項目には、データの受け渡し順を示す番号が登録される。例えば、書き込み処理の場合、ＮＡＳエンジン２１２、ブロックドライバ２１３、ブロックターゲットドライバ２２３、ブロック割り当て部２２２ａ、ブロックドライバ２２４の順に番号が順に付与される。また、読み出し処理の場合は、その逆順に番号が付与される。なお、データの受け渡し順は、アドレス変換テーブル２５０上に必ずしも登録されている必要はなく、例えば、メモリ制御部２３１の処理を実現するためのプログラムコード上に記述されていてもよい。
【０１００】
ポインタの項目には、次のエントリ情報の位置を示す情報が登録される。アドレス変換テーブル２５０において、エントリ情報２５１ａ〜２５１ｅは、ポインタの項目に登録される位置情報によってチェーン状に連結される。なお、このようにエントリ情報２５１ａ〜２５１ｅがチェーン状に連結される構造は、アドレス変換テーブル２５０の構造の一例であり、他の構造によってアドレス変換テーブル２５０が実現されてもよい。
【０１０１】
以上のようなアドレス変換テーブル２５０は、実際には、書き込み処理と読み出し処理とでそれぞれ個別に生成され、ＲＡＭ１１２に記録される。
図９，図１０は、書き込み処理の際のアドレス変換テーブルの更新例を示す図である。図９，図１０においては、アドレス変換テーブル２５０の情報のうち、仮想メモリ領域の仮想アドレス、物理メモリ領域の物理アドレス、および処理完了フラグの対応関係のみが抽出して記載されている。また、図９，図１０において、下線が引かれた仮想アドレスの数値は、仮想ＯＳ２１１によって参照される仮想メモリ空間２１０ａにおけるアドレス値を示す。一方、斜字で示された仮想アドレスの数値は、仮想ＯＳ２２１によって参照される仮想メモリ空間２２０ａにおけるアドレス値を示す。
【０１０２】
図９，図１０の例では、ＮＡＳエンジン２１２およびブロックドライバ２１３は、仮想メモリ空間２１０ａにおけるアドレス“１”，“２”の領域をそれぞれ参照する。また、ブロックターゲットドライバ２２３、ブロック割り当て部２２２ａおよびブロックドライバ２２４は、仮想メモリ空間２２０ａにおけるアドレス“１”，“２”，“３”の領域をそれぞれ参照する。
【０１０３】
また、図９の状態では、ＮＡＳエンジン２１２およびブロックドライバ２１３にそれぞれ対応する仮想メモリ領域には、ＲＡＭ１１２における物理アドレス“１”，“２”の領域がそれぞれ割り当てられている。また、ブロックターゲットドライバ２２３、ブロック割り当て部２２２ａおよびブロックドライバ２２４には、ＲＡＭ１１２における物理アドレス“３”，“４”，“５”の領域がそれぞれ割り当てられている。
【０１０４】
ハイパーバイザ２３０のメモリ制御部２３１によってこのような物理メモリ領域の割り当てが行われた段階では、すべてのアプリケーションに対応する処理完了フラグは“０”とされる。この状態で、各アプリケーションは対応する処理を実行する。また、各アプリケーションは、対応する仮想メモリ領域を利用した処理の実行が完了すると、その旨をメモリ制御部２３１に通知する。メモリ制御部２３１は、アプリケーションから処理の完了通知を受けると、当該アプリケーションに対応する処理完了フラグを“１”に更新する。このようにして、すべてのアプリケーションに対応する処理完了フラグが“１”に更新されると、各仮想メモリ領域に対する物理領域の割り当てを変更する。
【０１０５】
図１０の状態では、物理アドレス“１”が示す物理メモリ領域の割り当て先は、ＮＡＳエンジン２１２が参照する仮想メモリ領域から、ブロックドライバ２１３が参照する仮想メモリ領域へ変更されている。これにより、図９においてＮＡＳエンジン２１２に処理されたデータが、そのデータの物理的な転送が行われることなく、ブロックドライバ２１３に受け渡される。
【０１０６】
同様に、図１０の状態では、物理アドレス“２”が示す物理メモリ領域の割り当て先は、ブロックドライバ２１３が参照する仮想メモリ領域から、ブロックターゲットドライバ２２３が参照する仮想メモリ領域へ変更されている。また、物理アドレス“３”が示す物理メモリ領域の割り当て先は、ブロックターゲットドライバ２２３が参照する仮想メモリ領域から、ブロック割り当て部２２２ａが参照する仮想メモリ領域へ変更されている。さらに、物理アドレス“４”が示す物理メモリ領域の割り当て先は、ブロック割り当て部２２２ａが参照する仮想メモリ領域から、ブロックドライバ２２４が参照する仮想メモリ領域へ変更されている。これにより、図９においてブロックドライバ２１３、ブロックターゲットドライバ２２３およびブロック割り当て部２２２ａによってそれぞれ処理されたデータが、それらのデータの物理的な転送が行われることなく、ブロックターゲットドライバ２２３、ブロック割り当て部２２２ａおよびブロックドライバ２２４にそれぞれ受け渡される。
【０１０７】
なお、図９において物理アドレス“５”が示す物理メモリ領域に格納されていたデータは、ブロックドライバ２２４の処理が完了した後には不要となる。このため、メモリ制御部２３１は、図１０の状態に遷移する際に、物理アドレス“５”の割り当て先を、ＮＡＳエンジン２１２が参照する仮想メモリ領域に変更する。これにより、物理アドレス“５”が示す物理メモリ領域には、ＮＡＳエンジン２１２によって処理された新たな書き込みデータが上書きされる。
【０１０８】
ところで、上記の図９に示したように、メモリ制御部２３１は、各仮想メモリ領域に対する物理メモリ領域を割り当てた後、各仮想メモリ領域に対応するアプリケーションからの処理の完了通知を待機する。そして、メモリ制御部２３１は、アプリケーションから処理の完了通知を受けると、当該アプリケーションに対応する処理完了フラグを“１”に更新する。メモリ制御部２３１は、すべてのアプリケーションに対応する処理完了フラグが“１”に更新されると、アプリケーション間でのデータの受け渡しが可能になったと判断し、各仮想メモリ領域に対する物理領域の割り当てを変更する。
【０１０９】
このように、メモリ制御部２３１が、各アプリケーションによる処理が完了したかを認識できるようにしたことで、すべての仮想メモリ領域に対する物理メモリ領域の割り当てを一度に、なおかつ循環的に変更することができる。これにより、各アプリケーションによる処理の並列性を保ったまま、アプリケーション間のデータの受け渡しの際の処理負荷を低減できる。
【０１１０】
図１１は、各アプリケーションがメモリ制御部に対して処理の完了を通知する仕組みの例を示す図である。
ワーキングメモリ１５１は、複数の仮想マシン上の複数のプロセスによって共通に参照可能な共有メモリ領域として、メモリ制御部２３１によってＲＡＭ１１２上に確保される。メモリ制御部２３１による動的アドレス変換により、ワーキングメモリ１５１に対する仮想メモリアドレスの付け替えが行われ、これによって同一のワーキングメモリ１５１を複数のプロセスが参照および更新可能になる。
【０１１１】
ＲＯページ１５２は、リードオンリー属性に設定されたページ（ＲＡＭ１１２上のメモリ領域）である。ＲＯページ１５２は、ワーキングメモリ１５１とセットで確保される。ワーキングメモリ１５１をあるプロセスが参照している状態において、そのプロセスがワーキングメモリ１５１に対応するＲＯページ１５２に書き込みを行おうとすると、割り込みが発生し、書き込みが要求されたことがメモリ制御部２３１に通知される。この割り込みは、プロセスがワーキングメモリ１５１を用いた処理を終了したことをメモリ制御部２３１に通知するトリガとして使用される。メモリ制御部２３１は、割り込みの発生を検出すると、ワーキングメモリ１５１に対する仮想メモリアドレスを付け替える。これにより、複数のプロセスによって共有されるワーキングメモリ１５１に対する各プロセスからのアクセスが、排他的に行われる。
【０１１２】
ホスト装置３０１からの要求に応じた書き込み処理または読み出し処理が行われる場合、メモリ制御部２３１は、参照可能にするアプリケーションと同じ数だけ、ワーキングメモリ１５１とＲＯページ１５２の組を確保する。すべてのワーキングメモリ１５１の容量は同じである。メモリ制御部２３１は、各ワーキングメモリ１５１に対して、各アプリケーションに対応する仮想メモリ領域をアプリケーション間のデータの受け渡し順にしたがって順次割り当てていく。これにより、図６，図７に示したようなアプリケーション間のデータの受け渡しが行われる。
【０１１３】
また、アプリケーションは、割り当てられたワーキングメモリ１５１を用いた処理を終了すると、そのワーキングメモリ１５１に対応するＲＯページ１５２への書き込みを行うとともに、スリープ状態に遷移する。メモリ制御部２３１は、すべてのアプリケーションからの書き込みに伴う割り込みの発生を検出したとき、すべてのアプリケーションの処理が終了したと判定し、各ワーキングメモリ１５１に対する仮想アドレスの付け替えを行う。仮想アドレスの付け替え後、メモリ制御部２３１は、各アプリケーションに対してウェークアップ信号を通知して、新たに割り当てたワーキングメモリ１５１を用いた処理を開始させる。
【０１１４】
このような仕組みにより、すべての仮想メモリ領域に対する物理メモリ領域の割り当てを一度に、なおかつ循環的に変更することができる。したがって、各アプリケーションによる処理の並列性を保ったまま、アプリケーション間のデータの受け渡しの際の処理負荷を低減できる。
【０１１５】
次に、ホスト装置３０１からファイルを指定した書き込みまたは読み出しが要求された場合のＣＭ１１０の処理について、フローチャートを用いて説明する。
図１２は、アプリケーションの処理手順の例を示すフローチャートである。図１２の処理は、ホスト装置３０１からの書き込み要求または読み出し要求を伴う業務が開始される際に、各アプリケーション、すなわち、ＮＡＳエンジン２１２、ブロックドライバ２１３、ブロックターゲットドライバ２２３、ブロック割り当て部２２２ａおよびブロックドライバ２２４のそれぞれによって実行される。なお、図１２の処理は、書き込み処理と読み出し処理とでそれぞれ個別に実行される。
【０１１６】
［ステップＳ１０１］アプリケーションは、メモリ制御部２３１に対してアタッチを要求する。アタッチとは、複数のワーキングメモリ１５１からなる共有メモリ領域をアプリケーションが利用可能な状態にすることを言う。
【０１１７】
［ステップＳ１０２］アプリケーションは、処理の実行を停止するスリープ状態に遷移する。
［ステップＳ１０３］アプリケーションは、メモリ制御部２３１からウェークアップ信号を受信すると、ステップＳ１０４以降の処理を実行する。
【０１１８】
［ステップＳ１０４］アプリケーションは、自身に対応する仮想メモリを利用したデータ処理を実行する。データ処理の内容は、書き込み処理の場合、図４のステップＳ１１〜Ｓ１５のうちのアプリケーションに対応する処理のうち、次のアプリケーションに対応する仮想メモリ領域へのデータコピーを除く内容である。また、読み出し処理の場合、図５のステップＳ２１〜Ｓ２５のうちのアプリケーションに対応する処理のうち、次のアプリケーションに対応する仮想メモリ領域へのデータコピーを除く内容である。
【０１１９】
［ステップＳ１０５］アプリケーションは、ステップＳ１０４のデータ処理の実行が完了すると、ホスト装置３０１からの書き込み要求または読み出し要求を伴う業務を終了するかを判定する。業務を終了する場合、ステップＳ１０７の処理が実行され、業務を終了しない場合、ステップＳ１０６の処理が実行される。
【０１２０】
［ステップＳ１０６］アプリケーションは、メモリ制御部２３１にデータ処理の実行が完了したことを通知する。この通知は、前述のように、仮想メモリに割り当てられたワーキングメモリとセットで確保されたＲＯページへの書き込みをアプリケーションが行い、その書き込みに応じて割り込みが発生することで行われる。
【０１２１】
［ステップＳ１０７］アプリケーションは、メモリ制御部２３１に対してデタッチを要求する。デタッチとは、共有メモリ領域をアプリケーションが利用できない状態にすることを言う。
【０１２２】
以上の図１２の処理において、処理がステップＳ１０４に進むたびに、アプリケーションは自身に割り当てられた同一仮想アドレスの仮想メモリ領域にアクセスして処理を行う。しかし、実際には、ステップＳ１０４の処理の実行のたびに、アプリケーションがアクセスする物理メモリ領域は変更される。アプリケーションは、このようなアクセス先の物理メモリ領域の変更を意識せずにデータ処理を行う。
【０１２３】
図１３は、アタッチ要求を受信したときのメモリ制御部の処理手順の例を示す図である。図１３の処理は、図１２のステップＳ１０１でいずれかのアプリケーションがメモリ制御部２３１にアタッチを要求するたびに実行される。ただし、書き込み処理が行われる際に図１３の処理は５回実行され、これとは別に、読み出し処理が行われる際に図１３の処理は５回実行される。
【０１２４】
［ステップＳ１１１］メモリ制御部２３１は、アプリケーションからアタッチ要求を受信すると、アドレス変換テーブル２５０が作成されているかを判定する。この処理では、書き込み処理の際には書き込み処理についてのアドレス変換テーブル２５０が作成されているかが判定され、読み出し処理の際には読み出し処理についてのアドレス変換テーブル２５０が作成されているかが判定される。
【０１２５】
アドレス変換テーブル２５０が作成されていない場合、ステップＳ１１２の処理が実行される。アドレス変換テーブル２５０が作成されている場合、ステップＳ１１３の処理が実行される。
【０１２６】
［ステップＳ１１２］メモリ制御部２３１は、アドレス変換テーブル２５０を作成する。作成されたアドレス変換テーブル２５０は、例えば、ＲＡＭ１１２に保存される。なお、このステップＳ１１２では、書き込み処理の際には書き込み処理についてのアドレス変換テーブル２５０が作成され、読み出し処理の際には読み出し処理についてのアドレス変換テーブル２５０が作成される。
【０１２７】
［ステップＳ１１３］メモリ制御部２３１は、アタッチ要求元のアプリケーションに対応するエントリ情報をアドレス変換テーブル２５０に追加する。
［ステップＳ１１４］メモリ制御部２３１は、ステップＳ１１３で追加したエントリ情報に次のような情報を登録する。メモリ制御部２３１は、仮想アドレスの項目に、アタッチ要求元のアプリケーションに対応する仮想アドレスを登録する。メモリ制御部２３１は、物理アドレスの項目に、ＲＡＭ１１２上に確保したワーキングメモリ１５１のうち他の仮想メモリ領域に未割り当てのワーキングメモリ１５１の先頭アドレスを登録する。メモリ制御部２３１は、アプリケーション識別子の項目に、アタッチ要求元のアプリケーションを識別する識別情報を登録する。メモリ制御部２３１は、処理完了フラグの項目に、初期値“０”を登録する。メモリ制御部２３１は、処理順の項目に、アタッチ要求元のアプリケーションに対応する番号を登録する。メモリ制御部２３１は、ポインタの項目に、アドレス変換テーブル２５０に含まれる他のエントリ情報と接続するための情報を登録する。
【０１２８】
なお、仮想アドレスおよび処理順の項目には、アタッチ要求元のアプリケーションに対してあらかじめ決められた情報が登録されるが、各項目に登録される情報は書き込み処理の場合と読み出し処理の場合とで異なる。また、書き込み処理の場合と読み出し処理の場合とで、ポインタの項目に登録された情報によって接続されるエントリ情報のグループは別のグループとなる。
【０１２９】
以上の手順で、書き込み処理および読み出し処理のそれぞれについて、アドレス変換テーブル２５０内にすべてのアプリケーションに対応するエントリ情報が登録されると、次の図１４の処理が開始される。
【０１３０】
図１４は、アプリケーションによるデータ処理の実行に伴うメモリ制御部の処理手順の例を示す図である。なお、図１４の処理は、書き込み処理と読み出し処理とでそれぞれ個別に実行される。また、書き込み処理の場合と読み出し処理の場合とでそれぞれ別のアドレス変換テーブル２５０が参照される。
【０１３１】
［ステップＳ１２１］メモリ制御部２３１は、すべてのアプリケーションに対してウェークアップ信号を通知する。これにより、各アプリケーションは、図１２のステップＳ１０４のデータ処理の実行を開始する。
【０１３２】
［ステップＳ１２２］メモリ制御部２３１は、アプリケーションからデータ処理完了が通知されるのを待つ。
［ステップＳ１２３］メモリ制御部２３１は、１つのアプリケーションからのデータ処理完了の通知を受信すると、次のステップＳ１２４の処理を実行する。
【０１３３】
［ステップＳ１２４］メモリ制御部２３１は、アドレス変換テーブル２５０のエントリ情報のうち、データ処理完了の通知の送信元のアプリケーションに対応するエントリ情報を選択する。メモリ制御部２３１は、選択したエントリ情報における処理完了フラグの項目の値を、“０”から“１”に更新する。
【０１３４】
［ステップＳ１２５］メモリ制御部２３１は、すべてのアプリケーションでのデータ処理が完了したかを判定する。アドレス変換テーブル２５０におけるすべてのエントリ情報において処理完了フラグの項目に“１”が登録されている場合に、すべてのアプリケーションでのデータ処理が完了したと判定される。すべてのアプリケーションでのデータ処理が完了したと判定された場合、ステップＳ１２６の処理が実行される。データ処理が完了していないアプリケーションが存在する場合、ステップＳ１２２の処理が実行される。
【０１３５】
［ステップＳ１２６］メモリ制御部２３１は、すべてのアプリケーションに対応するエントリ情報に登録された物理アドレスを、図６または図７に示したように循環的に付け替える。物理アドレスの付け替えの方向は、エントリ情報内の処理順の方向となる。
【０１３６】
［ステップＳ１２７］メモリ制御部２３１は、すべてのアプリケーションに対してウェークアップ信号を通知する。これにより、各アプリケーションは、図１２のステップＳ１０４のデータ処理の実行を開始する。
【０１３７】
［ステップＳ１２８］メモリ制御部２３１は、アドレス変換テーブル２５０内のすべてのアプリケーションに対応するエントリ情報について、処理完了フラグの項目の値を“１”から“０”に更新する。
【０１３８】
なお、ステップＳ１２７，Ｓ１２８の処理順は逆でもよい。ステップＳ１２７，Ｓ１２８の処理の実行後、ステップＳ１２２の処理が実行される。
図１５は、デタッチ要求を受信したときのメモリ制御部の処理手順の例を示す図である。図１４の処理中に、いずれかのアプリケーションからメモリ制御部２３１に対してデタッチが要求された場合に、図１５の処理が実行される。なお、図１５の処理は、書き込み処理と読み出し処理とでそれぞれ個別に実行される。書き込み処理について図１５の処理は５回実行され、これとは別に、読み出し処理について図１５の処理は５回実行される。
【０１３９】
［ステップＳ１３１］メモリ制御部２３１は、アプリケーションからデタッチ要求を受信すると、要求元のアプリケーションに対応するエントリ情報をアドレス変換テーブル２５０から削除する。
【０１４０】
［ステップＳ１３２］メモリ制御部２３１は、アドレス変換テーブル２５０内に他のエントリ情報が残っているかを判定する。他のエントリ情報がある場合、処理が終了され、他のアプリケーションからのデタッチ要求の待ち状態になる。他のエントリ情報がない場合、ステップＳ１３３の処理が実行される。
【０１４１】
［ステップＳ１３３］メモリ制御部２３１は、アドレス変換テーブル２５０を削除する。
以上説明した第２の実施の形態では、各アプリケーションによって処理されたデータが次のアプリケーションに受け渡される際に、実体的なデータの移動が発生しない。これにより、プロセッサ１１１の処理負荷を軽減することができ、その結果、ホスト装置３０１，３０２からのアクセス要求に対する応答性能を向上させることができる。
【０１４２】
また、すべてのアプリケーションのデータ処理が完了したことを契機として、各アプリケーションに対応する仮想メモリ領域に割り当てる物理メモリ領域が一斉に変更される。このような処理により、各アプリケーションによる処理の並列性を保ったまま、アプリケーション間のデータの受け渡しの際の処理負荷を低減できる。
【０１４３】
ところで、上記の第２の実施の形態では、メモリ制御部２３１は、各アプリケーションに対応する仮想メモリ領域に割り当て可能な物理メモリ領域を、あらかじめ固定的に確保する。そして、メモリ制御部２３１は、仮想メモリ領域に対する物理メモリ領域の割り当てを循環的に変更する。
【０１４４】
これに対して、次の図１６で説明するように、先頭のアプリケーションに対応する仮想メモリ領域に対しては、最後尾のアプリケーションに対応する仮想メモリ領域に割り当てられていた物理メモリ領域ではなく、新たな物理メモリ領域が割り当てられてもよい。以下、第２の実施の形態をこのように変形した変形例について説明する。
【０１４５】
図１６は、変形例における物理メモリ領域の割り当て変更動作例を示す図である。図１６では、例として読み出し処理の場合を示している。
読み出し処理の開始時の状態では、図７の場合と同様に、メモリ制御部２３１は、仮想メモリ領域２４２ａ〜２４２ｅに割り当て可能な物理メモリ領域として、物理メモリ領域１４２ａ〜１４２ｅを確保する。そして、図１６の状態３１に示すように、メモリ制御部２３１は、仮想メモリ領域２４２ａ，２４２ｂ，２４２ｃ，２４２ｄ，２４２ｅに対して、物理メモリ領域１４２ａ，１４２ｂ，１４２ｃ，１４２ｄ，１４２ｅをそれぞれ割り当てる。この状態３１は、図７の状態２１と同様のメモリ割り当て状態となっている。
【０１４６】
状態３１で各アプリケーションのデータ処理が完了すると、メモリ制御部２３１は、仮想メモリ領域２４２ａ〜２４２ｅに対する物理メモリ領域の割り当てを変更する。このとき、メモリ制御部２３１は、物理メモリ領域１４２ａ〜１４２ｄの割り当て先については、図７の場合と同様に、データの受け渡し方向にシフトする。すなわち、状態３２に示すように、仮想メモリ領域２４２ｂ，２４２ｃ，２４２ｄ，２４２ｅに対して、物理メモリ領域１４２ａ，１４２ｂ，１４２ｃ，１４２ｄがそれぞれ割り当てられる。これにより、次のアプリケーションに対してデータが受け渡される。
【０１４７】
一方、メモリ制御部２３１は、先頭のアプリケーションに対応する仮想メモリ領域２４２ａに対しては、物理メモリ領域１４２ｅではなく、新たにＲＡＭ１１２上に確保した物理メモリ領域１４２ｆを割り当てる。また、状態３１で最後尾のアプリケーションに対応する仮想メモリ領域２４２ｅに割り当てられていた物理メモリ領域１４２ｅについては、他の処理に利用されてデータが上書きされてもよいし、あるいは、記憶されているデータがそのまま他の処理に利用されてもよい。
【０１４８】
状態３２から状態３３に遷移する際も、同様に、メモリ制御部２３１は、物理メモリ領域１４２ａ〜１４２ｃ，１４２ｅの割り当て先については、データの受け渡し方向にシフトする。一方、メモリ制御部２３１は、仮想メモリ領域２４２ａに対しては新たな物理メモリ領域１４２ｇを割り当てる。
【０１４９】
以上の図１６は、読み出し処理の場合を示したが、書き込み処理の場合も、物理メモリ領域の割り当て変更の方向が逆になること以外は上記と同様の動作が行われる。
上記変形例の処理は、第２の実施の形態での処理を次のように変形することで実現可能である。図１４のステップＳ１２５においてすべてのアプリケーションによるデータ処理が完了したと判定した場合、ステップＳ１２６において、メモリ制御部２３１は、最後尾を除くアプリケーションに対応する仮想メモリ領域に割り当てられた物理メモリ領域を、次のアプリケーションに対応する仮想メモリ領域に割り当てし直す。これとともに、メモリ制御部２３１は、新たな物理メモリ領域を確保し、その物理メモリ領域を、先頭のアプリケーションに対応する仮想メモリ領域に割り当てる。メモリ制御部２３１は、このように仮想メモリ領域と物理メモリ領域との対応関係が変更されるように、アドレス変換テーブル２５０を更新する。
【０１５０】
以上の変形例のようなメモリ割り当て動作が行われた場合でも、第２の実施の形態と同様の効果が得られる。第２の実施の形態のようなメモリ割り当て動作を行うか、または、変形例のようなメモリ割り当て動作を行うかは、例えば、アプリケーションの処理内容や、仮想マシン２１０，２２０での他の処理との関係などに応じて選択可能である。
【０１５１】
なお、上記の各実施の形態に示した装置（情報処理装置１およびＣＭ１１０）の処理機能は、コンピュータによって実現することができる。その場合、各装置が有すべき機能の処理内容を記述したプログラムが提供され、そのプログラムをコンピュータで実行することにより、上記処理機能がコンピュータ上で実現される。処理内容を記述したプログラムは、コンピュータで読み取り可能な記録媒体に記録しておくことができる。コンピュータで読み取り可能な記録媒体としては、磁気記憶装置、光ディスク、光磁気記録媒体、半導体メモリなどがある。磁気記憶装置には、ハードディスク装置（ＨＤＤ）、フレキシブルディスク（ＦＤ）、磁気テープなどがある。光ディスクには、ＤＶＤ（Digital Versatile Disc）、ＤＶＤ−ＲＡＭ、ＣＤ−ＲＯＭ（Compact Disc-Read Only Memory）、ＣＤ−Ｒ（Recordable）／ＲＷ（ReWritable）などがある。光磁気記録媒体には、ＭＯ（Magneto-Optical disk）などがある。
【０１５２】
プログラムを流通させる場合には、例えば、そのプログラムが記録されたＤＶＤ、ＣＤ−ＲＯＭなどの可搬型記録媒体が販売される。また、プログラムをサーバコンピュータの記憶装置に格納しておき、ネットワークを介して、サーバコンピュータから他のコンピュータにそのプログラムを転送することもできる。
【０１５３】
プログラムを実行するコンピュータは、例えば、可搬型記録媒体に記録されたプログラムまたはサーバコンピュータから転送されたプログラムを、自己の記憶装置に格納する。そして、コンピュータは、自己の記憶装置からプログラムを読み取り、プログラムに従った処理を実行する。なお、コンピュータは、可搬型記録媒体から直接プログラムを読み取り、そのプログラムに従った処理を実行することもできる。また、コンピュータは、ネットワークを介して接続されたサーバコンピュータからプログラムが転送されるごとに、逐次、受け取ったプログラムに従った処理を実行することもできる。
【符号の説明】
【０１５４】
１  情報処理装置
２  記憶部
２ａ  アドレス情報
３  処理部
１０，２０  仮想マシン
１１，２１ａ，２１ｂ  プロセス
１２，２２ａ，２２ｂ  仮想メモリ
３１〜３３  物理メモリ領域
【図１】
2016115253.tif 000003
【図２】
2016115253.tif 000004
【図３】
2016115253.tif 000005
【図４】
2016115253.tif 000006
【図５】
2016115253.tif 000007
【図６】
2016115253.tif 000008
【図７】
2016115253.tif 000009
【図８】
2016115253.tif 000010
【図９】
2016115253.tif 000011
【図１０】
2016115253.tif 000012
【図１１】
2016115253.tif 000013
【図１２】
2016115253.tif 000014
【図１３】
2016115253.tif 000015
【図１４】
2016115253.tif 000016
【図１５】
2016115253.tif 000017
【図１６】
2016115253.tif 000018