(57)【特許請求の範囲】
【請求項１】
３台以上の複数の仮想マシンを備える情報処理装置であって、
仮想マシン毎に、送信される実データを記憶するためのリングバッファの先頭アドレスと終端アドレス、排他制御フラグとを含むデータテーブルを記憶する記憶手段と、
送信元の仮想マシンから送信先の仮想マシンに送信する実データの前記リングバッファのデータ格納エリアでの保存の有無、前記送信先の仮想マシンによる受信要求の有無、前記送信先の仮想マシンに対応するデータテーブルの排他制御フラグの状態に基づき、前記リングバッファのアドレスを利用して、前記送信元の仮想マシンから前記送信先の仮想マシンデータへのデータの転送制御をする通信制御手段と
を備える情報処理装置。
【請求項２】
送信先の仮想マシンに対応するデータテーブルの先頭アドレスに次のデータ格納エリアのアドレスを格納するデータ登録手段
をさらに備え、
前記通信制御手段は、送信元の仮想マシンから送信先の仮想マシンに送信する実データが前記リングバッファのデータ格納エリアに保存されており、前記送信先の仮想マシンが受信要求をしており、かつ、前記送信先の仮想マシンに対応するデータテーブルの排他制御フラグが処理可を示している場合、前記送信先の仮想マシンに対応するデータテーブルの先頭アドレスから前記実データを読み出して前記送信先の仮想マシンに前記読み出したデータを転送し、
前記データ登録手段は、前記通信制御手段による前記送信先の仮想マシンに前記読み出した前記実データの転送の後、前記送信先の仮想マシンに対応するデータテーブルの先頭アドレスに次のデータ格納エリアのアドレスを格納する
請求項１に記載の情報処理装置。
【請求項３】
前記データ登録手段は、送信元の仮想マシンが送信先の仮想マシンに送信する実データを有し、かつ、前記送信先の仮想マシンが受信要求をしていなく、かつ、前記送信先の仮想マシンに対応するデータテーブルの排他制御フラグが処理可を示している場合、前記送信先の仮想マシンに対応するデータテーブルの終端アドレスから前記実データを保管するとともに、前記送信先の仮想マシンに対応するデータテーブルの終端アドレスに次のデータ格納エリアのアドレスを格納する
ことをさらに行う、請求項２に記載の情報処理装置。
【請求項４】
前記通信制御手段は、送信元の仮想マシンが送信先の仮想マシンに送信する実データを有し、かつ、前記送信先の仮想マシンが受信要求しており、かつ、前記送信先の仮想マシンに対応するデータテーブルの排他制御フラグが処理可を示している場合、前記リングバッファを介することなく前記実データを前記送信先の仮想マシンに転送する
請求項１から請求項３のいずれか１項に記載の情報処理装置。
【請求項５】
前記データ登録手段は、送信元の仮想マシンが送信先の仮想マシンに送信する実データを有し、かつ、前記送信先の仮想マシンが受信要求をしていなく、かつ、前記送信先の仮想マシンに対応するデータテーブルの排他制御フラグが処理不可を示す場合、前記送信先の仮想マシンに対応するデータテーブルの排他制御フラグが処理可を示すまで、前記送信先の仮想マシンに対応するデータテーブルの終端アドレスから前記実データを保管する処理を保留する
請求項３に記載の情報処理装置。
【請求項６】
前記通信制御手段は、送信元の仮想マシンから送信先の仮想マシンに送信する実データが前記リングバッファのデータ格納エリアに保存されており、前記送信先の仮想マシンが受信要求をしており、かつ、前記送信先の仮想マシンに対応するデータテーブルの排他制御フラグが処理不可を示している場合、前記送信先の仮想マシンに対応するデータテーブルの排他制御フラグが処理可を示すまで、前記送信先の仮想マシンに対応するデータテーブルの先頭アドレスから前記実データを読み出して前記送信先の仮想マシンに前記読み出したデータを転送する処理を保留する
請求項２に記載の情報処理装置。
【請求項７】
前記通信制御手段は、送信元の仮想マシンが送信先の仮想マシンに送信する実データを有し、かつ、前記送信先の仮想マシンが受信要求しており、かつ、前記送信先の仮想マシンに対応するデータテーブルの排他制御フラグが処理不可を示している場合、前記送信先の仮想マシンに対応するデータテーブルの排他制御フラグが処理可を示すまで、前記リングバッファを介することなく前記実データを前記送信先の仮想マシンに転送する処理を保留する
請求項４に記載の情報処理装置。
【請求項８】
送信元の仮想マシンから送信先の仮想マシンに送信する実データが前記リングバッファのデータ格納エリアに保存されているか否は、該送信先の仮想マシンに対応するデータテーブルの先頭アドレスと終端アドレスが一致するか否かにより確認される
請求項１から請求項７のいずれか1項に記載の情報処理装置。
【請求項９】
３台以上の複数の仮想マシンを備える情報処理装置による情報処理法であって、
仮想マシン毎に、送信される実データを記憶するためのリングバッファの先頭アドレスと終端アドレス、排他制御フラグとを含むデータテーブルを記憶し、
送信元の仮想マシンから送信先の仮想マシンに送信する実データの前記リングバッファのデータ格納エリアでの保存の有無、前記送信先の仮想マシンによる受信要求の有無、前記送信先の仮想マシンに対応するデータテーブルの排他制御フラグの状態に基づき、前記リングバッファのアドレスを利用して、前記送信元の仮想マシンから前記送信先の仮想マシンデータへのデータの転送制御をする
情報処理方法。
【請求項１０】
仮想マシン毎に、送信される実データを記憶するためのリングバッファの先頭アドレスと終端アドレス、排他制御フラグとを含むデータテーブルを記憶させ、
送信元の仮想マシンから送信先の仮想マシンに送信する実データの前記リングバッファのデータ格納エリアでの保存の有無、前記送信先の仮想マシンによる受信要求の有無、前記送信先の仮想マシンに対応するデータテーブルの排他制御フラグの状態に基づき、前記リングバッファのアドレスを利用して、前記送信元の仮想マシンから前記送信先の仮想マシンデータへのデータの転送制御をする
ことをコンピュータに行わせる３台以上の複数の仮想マシンを備える情報処理装置用プログラム。
【発明の詳細な説明】
【技術分野】
【０００１】
本発明は、情報処理装置、情報処理方法及び情報処理装置用プログラムに関する。
【背景技術】
【０００２】
リソースさえ余剰があれば一台の物理ハードウェアに対して迅速に、複数のマシンを稼働できることから仮想マシンに関する技術が注目されている。ところで、仮想マシン間の通信は同一のホストマシン上の仮想マシン同士であっても、TCP-IPなどネットワーク通信用の通信プロトコルを使用する必要がある。ネットワーク通信用のプロトコルに従った通信方式は、通信データ中の通信制御用データが大きいため通信する実データが少ないときに通信効率が悪く、複数の処理階層を経由することから通信処理のオーバーヘッドが大きい。また、ネットワーク通信用のＩ/Ｏ処理は他のＩ/Ｏ処理と比較して処理優先度が低いため、システムのＩ/Ｏ負荷が高くなったときに性能が低下しやすい。
【０００３】
特許文献１には、メモリアクセスのプロトコルを使って仮想マシン間での通信を実現するために仮想マシン間用の管理テーブルを使う通信方法が開示されている。この通信方法により同一のホストマシン上の仮想マシン同士で高速な通信が可能となる。
【先行技術文献】
【特許文献】
【０００４】
【特許文献１】特開2019-164661号公報
【発明の概要】
【発明が解決しようとする課題】
【０００５】
ところで、特許文献１に開示の通信方法で使用する管理テーブルを拡張することで３以上の複数の仮想マシン間の通信が可能となる。しかし、特許文献１に開示の通信方法では、仮想マシンの組み合わせごとに、管理テーブルにおいて４つの識別ＩＤが必要となることから、仮想マシンがＮ個なら組合せの数の４倍（Ｎ×（Ｎ−１）÷２×４）の数の識別ＩＤがホストマシン上に必要となる。そのため、仮想マシン間の通信処理に使用するリソースが大きくなり、リソース不足による性能低下が発生するという課題があった。
【０００６】
そこでこの発明は、上記の課題を解決する情報処理装置、情報処理方法及び情報処理装置用プログラムを提供することを目的としている。
【課題を解決するための手段】
【０００７】
本発明の第１の態様によれば、３台以上の複数の仮想マシンを備える情報処理装置は、仮想マシン毎に、送信される実データを記憶するためのリングバッファの先頭アドレスと終端アドレス、排他制御フラグとを含むデータテーブルを記憶する記憶手段と、送信元の仮想マシンから送信先の仮想マシンに送信する実データの前記リングバッファのデータ格納エリアでの保存の有無、前記送信先の仮想マシンによる受信要求の有無、前記送信先の仮想マシンに対応するデータテーブルの排他制御フラグの状態に基づき、前記リングバッファのアドレスを利用して、前記送信元の仮想マシンから前記送信先の仮想マシンデータへのデータの転送制御をする通信制御手段と、を備える。
【０００８】
本発明の第２の態様によれば、３台以上の複数の仮想マシンを備える情報処理装置による情報処理法は、仮想マシン毎に、送信される実データを記憶するためのリングバッファの先頭アドレスと終端アドレス、排他制御フラグとを含むデータテーブルを記憶し、送信元の仮想マシンから送信先の仮想マシンに送信する実データの前記リングバッファのデータ格納エリアでの保存の有無、前記送信先の仮想マシンによる受信要求の有無、前記送信先の仮想マシンに対応するデータテーブルの排他制御フラグの状態に基づき、前記リングバッファのアドレスを利用して、前記送信元の仮想マシンから前記送信先の仮想マシンデータへのデータの転送制御をする。
【０００９】
本発明の第３の態様によれば、３台以上の複数の仮想マシンを備える情報処理装置用プログラムは、仮想マシン毎に、送信される実データを記憶するためのリングバッファの先頭アドレスと終端アドレス、排他制御フラグとを含むデータテーブルを記憶させ、送信元の仮想マシンから送信先の仮想マシンに送信する実データの前記リングバッファのデータ格納エリアでの保存の有無、前記送信先の仮想マシンによる受信要求の有無、前記送信先の仮想マシンに対応するデータテーブルの排他制御フラグの状態に基づき、前記リングバッファのアドレスを利用して、前記送信元の仮想マシンから前記送信先の仮想マシンデータへのデータの転送制御をする。
【発明の効果】
【００１０】
本発明によれば、仮想マシン毎に、送信される実データを記憶するためのリングバッファの先頭アドレスと終端アドレス、排他制御フラグとを含むデータテーブルを記憶し、送信元の仮想マシンから送信先の仮想マシンに送信する実データのリングバッファのデータ格納エリアでの保存の有無、送信先の仮想マシンによる受信要求の有無、送信先の仮想マシンに対応するデータテーブルの排他制御フラグの状態に基づき、リングバッファのアドレスを利用して、送信元の仮想マシンから前記送信先の仮想マシンデータへのデータの転送制御をする。これにより、３台以上の複数の仮想マシンを備える情報処理装置において、リソース不足による性能低下を抑えられる、という効果が得られる。
【図面の簡単な説明】
【００１１】
【図１】本発明の一実施形態に係る情報処理装置のハードウェア構成を示す図である。
【図２】本発明の一実施形態に係る制御部のソフトウェア構成を示す概略ブロック図である。
【図３Ａ】本発明の一実施形態に係るコマンドの一例を示すデータテーブルである。
【図３Ｂ】本発明の一実施形態に係る宛先情報の一例を示すデータテーブルである。
【図４】本発明の一実施形態に係る通信用メモリのアドレスの一例を示すデータテーブルである。
【図５】本発明の一実施形態に係る仮想マシンの通信用メモリ及び通信用メモリドライバの論理ブロックアドレスの一例を示すデータテーブルである。
【図６】本発明の一実施形態に係る通信用メモリが管理する識別データの一例を示すデータテーブルである。
【図７】本発明の一実施形態に係る仮想マシンの通信用メモリを設定する処理の流れを示すフローチャートである。
【図８】本発明の一実施形態に係る仮想マシン間の通信において、初期設定の処理の流れを示すシーケンス図である。
【図９】本発明の一実施形態に係る仮想マシン間の通信において、同じ識別ＩＤに対して受信要求よりも先に送信要求が実行され、かつ他スレッドの送信要求との競合が発生しない場合の処理の流れを示すシーケンス図である。
【図１０】本発明の一実施形態に係る仮想マシン間の通信において、同じ識別ＩＤに対して送信要求よりも先に受信要求が実行され、かつ送信要求実行時に他スレッドとの競合が発生しない場合の処理の流れを示すシーケンス図である。
【図１１Ａ】本発明の一実施形態に係る仮想マシン間の通信において、同じ識別ＩＤに対して受信要求よりも先に送信要求が実行された場合の処理例の図９を基に、他スレッドの送信要求との競合により送信側で通信データ保存待ちが発生した場合の処理の流れを示すシーケンス図である。
【図１１Ｂ】本発明の一実施形態に係る仮想マシン間の通信において、同じ識別ＩＤに対して受信要求よりも先に送信要求が実行された場合の処理例の図９を基に、他スレッドの送信要求との競合により、受信側で通信データ転送待ちが発生した場合の処理の流れを示すシーケンス図である。
【図１２】本発明の一実施形態に係る仮想マシン間の通信において、同じ識別ＩＤに対して送信要求よりも先に受信要求が実行された場合の処理例の図１０を基に、他スレッドの送信要求との競合により、送信側で通信データ転送待ちが発生した場合の処理の流れを示すシーケンス図である。
【図１３】特許文献１に係る通信用メモリのデータテーブルの一例を示す図である。
【図１４】特許文献１に係る図１３で示した通信用メモリの送受信アドレスに対応する通信用メモリドライバの論理ブロックアドレス（識別ＩＤ）のデータテーブルの一例を示す図である。
【図１５】特許文献１に係る図１４で示した識別ＩＤを基にした管理テーブルの一例を示す図である。
【図１６】本発明の一実施形態に係る通信用メモリのデータテーブルの一例を示す図である。
【図１７】本発明の一実施形態に係る図１６で示した通信用メモリの送受信アドレスに対応する通信用メモリドライバの論理ブロックアドレス（識別ＩＤ）のデータテーブルの一例を示す図である。
【図１８】本発明の一実施形態に係る図１７で示した識別ＩＤを基にした管理テーブルの一例を示す図である。
【図１９】本発明の一実施形態に係る通信データ記憶部に記録する各仮想マシン用のリングバッファの一例を示す図である。
【図２０】本発明の一実施形態に係るリングバッファの動作の一例を示す図である。
【図２１】本実施形態による情報処理装置のハードウェア構成を例示する図である。
【図２２】本実施形態による情報処理装置の最少構成を示す図である。
【発明を実施するための形態】
【００１２】
以下、本発明の一実施形態による情報処理装置を、図面を参照して説明する。図１は本発明の一実施形態に係る情報処理装置１のハードウェア構成を示す図である。
情報処理装置１は、制御部１００と、システムメモリ２００と、通信用メモリドライバ３００と、仮想通信用メモリ４００と、Ｎ台の仮想マシン（第一仮想マシン５００、第二仮想マシン６００、・・・、第Ｎ仮想マシン８００）を備える。ここで、Ｎは３以上の整数とする。
【００１３】
なお、本実施形態における仮想マシンは、ホスト型でもよいし、ハイパーバイザ型でもよい。つまり、同一ホストマシン上で動作する仮想マシンであれば、仮想マシンの稼働方式及び稼働数は問わない。以下の本実施形態では、例として、ホストマシン上でホスト型の仮想マシンをＮ台動作させるものとして説明する。
【００１４】
制御部１００は、ＣＰＵ（Central Processing Unit）等のプロセッサを用いて構成される。制御部１００は、プログラムをメインメモリに展開し、プロセッサがプログラムを実行することによって、プログラムに従って処理を実行する。本実施形態では、制御部１００は、プログラムを実行することで、図２に示す制御部として機能する。
システムメモリ２００は、通信用メモリ記憶部２１０及び通信データ記憶部２２０を備える。なお、システムメモリ２００は、記憶部の一態様である。
【００１５】
通信用メモリ記憶部２１０は、後述する図３から図５までのデータテーブルを予め記憶する。また、通信用メモリ記憶部２１０は、データ登録部１３０から受信する、処理のコマンド（以下「指示データ」という。）や、識別ＩＤ、通信ＩＤなどの情報（以下「識別データ」という。）を、図６で後述するデータテーブルに記憶する。
通信データ記憶部２２０は、Ｎ台の仮想マシン（第一仮想マシン５００、第二仮想マシン６００、・・・、第Ｎ仮想マシン８００）の間で通信される実データを記憶する。通信データ記憶部２２０は、各仮想マシン宛てに送信された実データを記憶するために、各仮想マシン用のリングバッファを備え、図６のデータテーブルにそれらのリングバッファの先頭アドレスと終端アドレスを記憶する。
【００１６】
通信用メモリドライバ３００は、仮想通信用メモリ４００の生成を行う。制御部１００は、通信用メモリドライバ３００の機能を用いてプログラムの処理を実行する。仮想通信用メモリ４００は、Ｎ個の仮想メモリ（第一仮想メモリ４１０、第二仮想メモリ４２０、・・・、第Ｎ仮想メモリ４４０）を備える。なお、仮想メモリ（第一仮想メモリ４１０、第二仮想メモリ４２０、・・・、第Ｎ仮想メモリ４４０）のフォーマットは、ＶＨＤＸやＶＨＤなど仮想マシンで使用できるフォーマットであれば、どのフォーマットを使用してもよい。また、仮想メモリ（第一仮想メモリ４１０、第二仮想メモリ４２０、・・・、第Ｎ仮想メモリ４４０）は、第一記憶領域の一態様である。
仮想メモリ（第一仮想メモリ４１０、第二仮想メモリ４２０、・・・、第Ｎ仮想メモリ４４０）は、通信用メモリ（第一通信用メモリ５２０、第二通信用メモリ６２０、・・・、第Ｎ通信用メモリ８２０）と対応付けて扱われる。
【００１７】
第一仮想マシン５００は、第一アプリケーション５１０及び第一通信用メモリ５２０を備える。
第一アプリケーション５１０は、第一仮想マシン５００が他の仮想マシンとデータの送受信を行う際、第一通信用メモリ５２０を通して送受信の命令を通信用メモリドライバ３００へ通知する。
第一通信用メモリ５２０は、第一アプリケーション５１０から通知された送受信の命令を通信用メモリドライバ３００へ通知し、通信を行う。なお、第一通信用メモリ５２０は、後述するメモリ制御部１１０によって、第一仮想メモリ４１０とアドレスが対応付けされる。また、第一通信用メモリ５２０は、第二記憶領域の一態様である。
【００１８】
第二仮想マシン６００は、第二アプリケーション６１０及び第二通信用メモリ６２０を備える。
第二アプリケーション６１０は、第二仮想マシン６００が他の仮想マシンとデータの送受信を行う際、第二通信用メモリ６２０を通して送受信の命令を通信用メモリドライバ３００へ通知する。
第二通信用メモリ６２０は、第二アプリケーション６１０から通知された送受信の命令を通信用メモリドライバ３００へ通知し、通信を行う。なお、第二通信用メモリ６２０は、後述するメモリ制御部１１０によって、第二仮想メモリ４２０が対応付けされる。また、第二通信用メモリ６２０は、第二記憶領域の一態様である。
【００１９】
第Ｎ仮想マシン８００は、第Ｎアプリケーション８１０及び第Ｎ通信用メモリ８２０を備える。
第Ｎアプリケーション８１０は、第Ｎ仮想マシン８００が他の仮想マシンとデータの送受信を行う際、第Ｎ通信用メモリ８２０を通して送受信の命令を通信用メモリドライバ３００へ通知する。
第Ｎ通信用メモリ８２０は、第Ｎアプリケーション８１０から通知された送受信の命令を通信用メモリドライバ３００へ通知し、通信を行う。なお、第Ｎ通信用メモリ８２０は、後述するメモリ制御部１１０によって、第Ｎ仮想メモリ４４０が対応付けされる。また、第Ｎ通信用メモリ８２０は、第二記憶領域の一態様である。
【００２０】
なお、システムメモリ２００及び通信用メモリドライバ３００は、記憶装置の一例であり、仮想通信用メモリ４００は、仮想的な記憶装置の一例である。
【００２１】
図２は、本発明の一実施形態に係る制御部１００のソフトウェア構成を示す概略ブロック図である。制御部１００は、プログラムを実行することで、メモリ制御部１１０、データ判定部１２０、データ登録部１３０及び通信制御部１４０として機能する。
【００２２】
メモリ制御部１１０は、仮想マシンと通信を行うための、仮想の通信用メモリ（以下「仮想通信用メモリ４００」という）を構成する。はじめに、メモリ制御部１１０は、メインメモリから記憶領域を確保し、通信用メモリドライバ３００によりアクセスする仮想通信用メモリ４００を生成する。メモリ制御部１１０は、仮想通信用メモリ４００に、Ｎ個の仮想メモリ（第一仮想メモリ４１０、第二仮想メモリ４２０、・・・、第Ｎ仮想メモリ４４０）を生成する。次に、メモリ制御部１１０は仮想メモリ（第一仮想メモリ４１０、第二仮想メモリ４２０、・・・、第Ｎ仮想メモリ４４０）を、通信用メモリ（第一通信用メモリ５２０、第二通信用メモリ６２０、・・・、第Ｎ通信用メモリ８２０）に対応付ける。
【００２３】
これにより、仮想マシン（第一仮想マシン５００、第二仮想マシン６００、・・・、第Ｎ仮想マシン８００）が、通信用メモリ（第一通信用メモリ５２０、第二通信用メモリ６２０、・・・、第Ｎ通信用メモリ８２０）を用いて通信を行う場合、メモリ制御部１１０は、通信用メモリ（第一通信用メモリ５２０、第二通信用メモリ６２０、・・・、第Ｎ通信用メモリ８２０）を、仮想通信用メモリ４００にアクセスさせる。
【００２４】
情報処理装置１のＯＳがＷｉｎｄｏｗｓ（登録商標）の場合であれば、プロセスからファイルへのアクセスが行われる際には入出力要求パケット（ＩＲＰ：Ｉ／Ｏ Ｒｅｑｕｅｓｔ Ｐａｃｋｅｔ）が発行される。データ判定部１２０は、プロセスから受け取った入出力要求パケットの情報に基づいて、実データ及び識別データを判定する。入出力要求パケットの情報には、通信用メモリのアドレスに対応した論理ブロックアドレスＬＢＡ（Logical Block Addressing）が含まれ、データ判定部１２０は、送信要求及び受信要求の発行元の識別ＩＤとしてＬＢＡを使用する。そして、データ判定部１２０は、判定結果に基づいて取得したデータをデータ登録部１３０へ送る。
【００２５】
データ登録部１３０は、データ判定部１２０から受け取ったデータをシステムメモリ２００に登録する。本実施形態では、例として、データ登録部１３０は、データ判定部１２０から受け取った識別ＩＤ、通信ＩＤ、保存データフラグ、データ保存_先頭アドレス、データ保存_終端アドレス、及び排他制御フラグを通信用メモリ記憶部２１０に登録する。
【００２６】
データ登録部１３０は、通信制御部１４０の処理の結果に基づいて、仮想マシンが制御された状態を表すデータ（以下「状態情報」という）を通信制御部１４０から受け取り、通信用メモリ記憶部２１０に登録する。データ登録部１３０は、データ判定部１２０から受け取った実データを通信データ記憶部２２０に登録する。
【００２７】
通信制御部１４０は、複数の仮想マシン間の通信を制御する。通信制御部１４０は、後述する図６のデータテーブルに基づいて、仮想マシンのデータ通信を制御する。具体的には、通信制御部１４０は、ＯＳが発行する入出力要求パケットなどの識別データに基づいて、仮想マシン間の通信を制御する。
【００２８】
例えば、第一アプリケーション５１０から、初期化リクエストがあった場合、通信制御部１４０は、図６のデータテーブルを参照し、指示データが書込用初期設定の「ＩＮＩＴ＿Ｗ」、識別ＩＤが「ＬＢＡ＿ＡＰ１＿Ｗ」、送り元が「ＡＰ１」であることを確認する。そして、通信制御部１４０は、第一アプリケーション５１０の書き込み用初期設定を行う。
【００２９】
通信制御部１４０が行う制御に関しては、後述する図８から図１２のシーケンス図を用いて説明する。また、通信制御部１４０は、制御処理が行われる工程に基づいて、状態情報をデータ登録部１３０へ送る。
【００３０】
図３Ａは、本発明の一実施形態に係るコマンドの一例を示すデータテーブルである。図３Ｂは、本発明の一実施形態に係る宛先情報の一例を示すデータテーブルである。
【００３１】
通信用メモリ記憶部２１０は、書き込みの初期設定を行う指示データ、読み込みの初期設定を行う指示データ及び送信を行う指示データを、予め記憶する。また、通信する宛先や送り元を示す宛先情報も同様に記憶されている。
【００３２】
図３Ａでは、例として、指示データの項目に「ＩＮＩＴ＿Ｗ」、「ＩＮＩＴ＿Ｒ」、「ＴＸ」が記憶されている。図３Ｂでは、例として、宛先情報の項目に「ＡＰ１」、「ＡＰ２」、・・・、「ＡＰＮ」が記憶されている。なお、図３Ａ、図３Ｂは、本実施形態のデータフォーマットの一例であり、使用する通信方法に合わせて変更してもよい。
【００３３】
図４は、本発明の一実施形態に係る通信用メモリのアドレスの一例を示すデータテーブルである。
通信用メモリ記憶部２１０は、仮想マシンの通信用メモリの送信用アドレス及び受信用アドレスを、予め記憶する。
【００３４】
図４では、例として、第一通信用メモリ５２０の送信用アドレス項目に「0xXXXXXXX1」、第一通信用メモリ５２０の受信用アドレス項目に「0xYYYYYYY1」が記憶されている。第二通信用メモリ６２０の送信用アドレス項目に「0xXXXXXXX2」、第二通信用メモリ６２０の受信用アドレス項目に「0xYYYYYYY2」が記憶されている。第Ｎ通信用メモリ８２０の送信用アドレス項目に「0xXXXXXXXN」、第Ｎ通信用メモリ８２０の受信用アドレス項目に「0xYYYYYYYN」が記憶されている。
【００３５】
図５は、本発明の一実施形態に係る仮想マシンの通信用メモリ及び通信用メモリドライバの論理ブロックアドレスの一例を示すデータテーブルである。論理ブロックアドレスとは、記憶装置においてデータの位置を示すアドレスを指定する方法である。論理ブロックアドレスは、論理ブロックを含むブロックアドレス空間の先頭からのブロックオフセットを表す。なお、特許文献１では1対1の通信を例としており、これを基にして３台以上の複数の仮想マシン間での通信を行う場合には、仮想マシンの組合せ毎に１対１の通信を行うことが想定される。その場合には、後述する図１５のように仮想マシンの組合せの数の４倍（Ｎ×（Ｎ−１）÷２×４）の数のアドレスが必要となる。本発明では、仮想マシンの組合せ毎に１対１の通信を行うのではなく、1対Ｎの通信が可能となるように管理テーブルを作成し、必要となるアドレスの数は仮想マシンの数の２倍（Ｎ×２）となる。
【００３６】
図５では、例として、通信用メモリのＩ／Ｏに使用する論理ブロックアドレスとして、図４で示した通信用メモリの送信用アドレスと、受信用アドレスと、を用いている。通信用メモリドライバの論理ブロックアドレスは、通信用メモリのＩ／Ｏに使用する論理ブロックアドレスと関連付けて記憶される、通信用メモリドライバの論理ブロックアドレスとして、例として、「ＬＢＡ＿ＡＰ１＿Ｗ」「ＬＢＡ＿ＡＰ１＿Ｒ」「ＬＢＡ＿ＡＰ２＿Ｗ」「ＬＢＡ＿ＡＰ２＿Ｒ」・・・「ＬＢＡ＿ＡＰＮ＿Ｗ」「ＬＢＡ＿ＡＰＮ＿Ｒ」を設定している。
【００３７】
図６は、本発明の一実施形態に係る通信用メモリ記憶部２１０で管理する識別データの一例を示すデータテーブルである。本実施形態では、通信用メモリ記憶部２１０で管理する識別データのデータテーブル（以下「管理テーブル」という。）は、識別ＩＤ、通信ＩＤ、状態情報、保存データフラグ、データ保存_先頭アドレス、データ保存_終端アドレス、排他制御フラグを有する。
【００３８】
識別ＩＤのデータ項目は、通信用メモリドライバの論理ブロックアドレスが登録される。図６において、論理ブロックアドレスは、図５の通信用メモリの送受信のアドレスと対応付いて登録されている。
通信ＩＤのデータ項目は、宛先情報が登録される。図６において、宛先情報は、図３の宛先情報と対応付いて登録されている。
【００３９】
状態のデータ項目は、「初期設定中」「アイドル」「送信要求中」「通信データ保存待ち」「送信完了待ち」「受信要求中」「通信データ転送待ち」「受信完了待ち」の８つの状態情報うち、いずれか１つの状態情報が登録される。状態のデータ項目は、通信制御部１４０の処理に基づいて、データ登録部１３０によって登録される。なお、初期設定を行う前は識別ＩＤによる管理情報が無いため、「初期状態」として表す。
【００４０】
保存データフラグのデータ項目は、保存された実データが存在するか否かに基づいて、データ登録部１３０によって登録される。保存データフラグの種別は、「有効」、「無効」とし、保存データが有る場合には「有効」、保存データが無い場合には「無効」とする。
【００４１】
データ保存_先頭アドレスとデータ保存_終端アドレスのデータ項目は、初期設定を行う際、通信データを一時的に格納するメモリエリア（リングバッファ）の先頭アドレスと終端アドレスがデータ登録部１３０によって登録される。リングバッファの動作は後述する図１９と図２０の図を用いて説明する。
【００４２】
排他制御フラグのデータ項目は、対象となるリングバッファへデータ保存もしくはリングバッファからのデータ転送が可能か否かに基づいて、データ登録部１３０によって登録される。排他制御フラグの種別は、「処理可」、「処理不可」とし、リングバッファへの書き込み中、リングバッファからの読み込み中、保存データフラグの変更中、または通信先への直接のデータ転送中、のいずれでもない場合には「処理可」とする。排他制御フラグが「処理可」の場合に、データ登録部１３０は排他制御フラグを「処理不可」として登録した後、リングバッファへの書き込み、リングバッファからの読み込み、または保存データフラグの変更を行う。その後、リングバッファへの書き込み、リングバッファからの読み込み、または保存データフラグの変更が完了した後に、データ登録部１３０は排他制御フラグを「処理可」として登録する。排他制御フラグが「処理不可」となった場合の動作は、後述する図１１Ａと図１１Ｂと図１２のシーケンス図を用いて説明する。この排他制御フラグにより、複数台の仮想マシン間で通信を行うことにより発生するデータ送受信の競合を防ぎ、リングバッファのデータ破壊や転送データ破壊を防ぐことができる。
【００４３】
なお、保存データフラグ、データ保存_先頭アドレス、データ保存_終端アドレス、排他制御フラグは、管理テーブルの受信用の識別ＩＤのエントリに格納する。
【００４４】
図１９は、本発明の一実施形態に係る通信データ記憶部２２０に記録する各仮想マシン用のリングバッファの一例を示す図である。通信を行う仮想マシンの受信用アドレスに対応する識別ＩＤ毎にリングバッファを備え、通信を行う仮想マシンがＮ個の場合には、各リングバッファは（Ｎ−１）個のデータ格納エリアをもつ。初期設定時には、図６のデータテーブルのリングバッファの先頭アドレスと終端アドレスには、リングバッファの開始アドレスが格納される。
【００４５】
図２０は、リングバッファの動作の一例を示す図である。データ書き込み時には、終端アドレスのデータ格納エリアにデータを書き込み、その後、終端アドレスに次のデータ格納エリアのアドレスを格納する。データ読み込み時には、先頭アドレスのデータ格納エリアからデータを読み込み、その後、先頭アドレスに次のデータ格納エリアのアドレスを格納する。
これにより、先頭アドレスと終端アドレスが等しい場合には保存されたデータは無く、等しくない場合に保存されたデータは有ることになる。また、リングバッファの終了アドレスの次のデータ格納エリアのアドレスは、リングバッファの開始アドレスとする。これにより、最小限の固定したメモリ領域を使用して、同様の手順でデータの書き込みと読み込みを継続することができる。
【００４６】
本実施例では、管理テーブルに保存データフラグを備えて保存データの有無を確認するが、リングバッファの先頭アドレスと終端アドレスの比較により保存データの有無を確認しても良い。この場合には、データ送受信時に保存データフラグを登録しなくても良く、管理テーブルから保存データフラグを削減しても良い。また、データ送受信時の保存データフラグを登録しない場合には、保存データフラグの排他制御は必要なくなるため、受信側でリングバッファから実データを読み出す際に排他制御フラグの確認と登録をしなくても良い。この場合には、後述する図１１Ｂで示す受信側での通信データ転送待ちは発生しない。
【００４７】
図７は、本発明の一実施形態に係る仮想マシンの通信用メモリを設定する処理の流れを示すフローチャートである。
メモリ制御部１１０は、メインメモリから記憶領域を確保し、通信用メモリドライバ３００によりアクセスする仮想通信用メモリ４００を生成する（ステップＳ１００）。
【００４８】
メモリ制御部１１０は、仮想通信用メモリ４００の中に仮想マシンの数と同数の仮想メモリ（第一仮想メモリ４１０、第二仮想メモリ４２０、・・・、第Ｎ仮想メモリ４４０）を生成する（ステップＳ１０１）。
メモリ制御部１１０は、各仮想マシンの通信用メモリに、ステップＳ１０１で生成した仮想メモリを１対１で対応付ける（ステップＳ１０２）。
【００４９】
図８は、本発明の一実施形態に係る仮想マシン間の通信において、初期設定（第一仮想マシン用の書込用初期設定と第二仮想マシン用の読込用初期設定）の処理の流れを示すシーケンス図である。なお、他の仮想マシンについても同様の処理となる。
第一通信用メモリからの入出力要求パケットを処理するスレッドＷ１と、第二通信用メモリからの入出力要求パケットを処理するスレッドＲ２は、マルチスレッドで動作する。
ここでは、第一通信用メモリ５２０を用いてデータ送信、第二通信用メモリ６２０を用いてデータ受信する例としている。なお、他の仮想マシンの組み合わせについても同様の処理となる。
【００５０】
第一アプリケーション５１０は、第一通信用メモリ５２０の送信用アドレスを用いて初期化要求（書込用初期設定の入出力要求パケット生成）を行う（ステップＳ２００）。この初期化要求により、ＯＳが発行する入出力要求パケットの情報（指示データ：ＩＮＩＴ＿Ｗ、送り元：ＡＰ１、識別ＩＤ：ＬＢＡ＿ＡＰ１＿Ｗ）をデータ判定部１２０が受け取る（ステップＳ２０１）。
【００５１】
データ判定部１２０は、入出力要求パケットの情報に基づき、入出力要求パケットに含まれる識別ＩＤなどの識別データを判定する（ステップＳ２０２）。データ判定部１２０の判定結果に基づいて、データ登録部１３０は、通信用メモリ記憶部２１０が記憶する管理テーブルに、識別ＩＤを「ＬＢＡ＿ＡＰ１＿Ｗ」、状態を「初期設定中」として登録する（ステップＳ２０３）。
【００５２】
データ登録部１３０は、管理テーブルに識別ＩＤ「ＬＢＡ＿ＡＰ１＿Ｗ」の通信ＩＤを「ＡＰ１」として識別データを登録する（ステップＳ２０４）。初期値を記憶した後、データ登録部１３０は、管理テーブルに識別ＩＤ「ＬＢＡ＿ＡＰ１＿Ｗ」の状態を「アイドル」として登録する（ステップＳ２０５）。そして、通信制御部１４０は、ステップＳ２０１の入出力要求パケットで要求された処理の完了通知を第一アプリケーション５１０へ送る（ステップＳ２０６）。
【００５３】
第二アプリケーション６１０は、第二通信用メモリ６２０の受信用アドレスを用いて初期化要求（読込用初期設定の入出力要求パケット生成）を行う（ステップＳ２０７）。この初期化要求により、ＯＳが発行する入出力要求パケットの情報（指示データ：ＩＮＩＴ＿Ｒ、送り元：ＡＰ２、識別ＩＤ：ＬＢＡ＿ＡＰ２＿Ｒ）をデータ判定部１２０が受け取る（ステップＳ２０８）。
【００５４】
データ判定部１２０は、入出力要求パケットの情報に基づき、入出力要求パケットに含まれる識別ＩＤなどの識別データを判定する（ステップＳ２０９）。データ判定部１２０の判定結果に基づいて、データ登録部１３０は、通信用メモリ記憶部２１０が記憶する管理テーブルに、識別ＩＤを「ＬＢＡ＿ＡＰ２＿Ｒ」、状態を「初期設定中」として登録する（ステップＳ２１０）。
【００５５】
データ登録部１３０は、管理テーブルに識別ＩＤ「ＬＢＡ＿ＡＰ２＿Ｒ」の通信ＩＤを「ＡＰ２」、保存データフラグを「無効」、データ保存＿先頭アドレスを「ＬＢＡ＿ＡＰ２＿Ｒ用リングバッファ＿先頭アドレス（初期値：ＬＢＡ＿ＡＰ２＿Ｒ用リングバッファの開始アドレス）」、データ保存＿終端アドレスを「ＬＢＡ＿ＡＰ２＿Ｒ用リングバッファ＿終端アドレス（初期値：ＬＢＡ＿ＡＰ２＿Ｒ用リングバッファの開始アドレス）」として識別データを登録する（ステップＳ２１１）。初期値を記憶した後、データ登録部１３０は、管理テーブルに識別ＩＤ「ＬＢＡ＿ＡＰ２＿Ｒ」の状態を「アイドル」として登録する（ステップＳ２１２）。そして、通信制御部１４０は、ステップＳ２０８の入出力要求パケットで要求された処理の完了通知を第二アプリケーション６１０へ送る（ステップＳ２１３）。
【００５６】
図９は、本発明の一実施形態に係る仮想マシン間の通信において、同じ識別ＩＤに対して受信要求よりも先に送信要求が実行され、かつ他スレッドの送信要求との競合が発生しない場合の処理の流れを示すシーケンス図である。
以下、図９から図１２まで、第一仮想マシン５００から第二仮想マシン６００へのデータの送信を例にするが、他の仮想マシン間のデータの送信における処理も同様である。また、図９、図１０に示す記号Ａ、Ｂ、Ｃ、Ｄは、図８に示す対応する記号Ａ、Ｂ、Ｃ、Ｄに続く処理であることを示す。
【００５７】
第一アプリケーション５１０は、第一通信用メモリ５２０の送信用アドレスを用いて送信要求（送信リクエストの入出力要求パケット生成）を行う（ステップＳ３００）。この送信要求により、ＯＳが発行する入出力要求パケットの情報（識別ＩＤ：ＬＢＡ＿ＡＰ１＿Ｗ、指示データ：ＴＸ、送り元：ＡＰ１、宛先：ＡＰ２）をデータ判定部１２０が受け取る（ステップＳ３０１）。
【００５８】
データ判定部１２０は、入出力要求パケットの情報に基づき、入出力要求パケットに含まれる識別ＩＤなどの識別データを判定する（ステップＳ３０２）。データ判定部１２０の判定結果に基づいて、データ登録部１３０は、管理テーブルに、識別ＩＤ「ＬＢＡ＿ＡＰ１＿Ｗ」の状態を「送信要求中」として登録する（ステップＳ３０３）。さらに、データ判定部１２０は、判定結果に基づいて、識別ＩＤ「ＬＢＡ＿ＡＰ２＿Ｒ」の状態が「アイドル中」であることをデータ登録部１３０に通知する。データ登録部１３０は、管理テーブルの識別ＩＤ「ＬＢＡ＿ＡＰ２＿Ｒ」の排他制御フラグが「処理可」であること確認し、排他制御フラグを「処理不可」として登録した後、通信データ記憶部２２０の「ＬＢＡ＿ＡＰ２＿Ｒ用」のリングバッファ＿終端アドレスが示すデータ格納エリアに実データを保存する。さらに、データ登録部１３０は、識別ＩＤ「ＬＢＡ＿ＡＰ２＿Ｒ」のリングバッファ＿終端アドレスに次のデータ格納エリアのアドレスを格納し、識別ＩＤ「ＬＢＡ＿ＡＰ２＿Ｒ」のデータ保存フラグを「有効」にして、排他制御フラグを「処理可」にする。（ステップＳ３０４）。
【００５９】
データ登録部１３０は、管理テーブルに、識別ＩＤ「ＬＢＡ＿ＡＰ１＿Ｗ」の状態を「送信完了待ち」として登録する（ステップＳ３０５）。
【００６０】
第二アプリケーション６１０は、第二通信用メモリ６２０の受信用アドレスを用いて受信要求（受信リクエストの入出力要求パケット生成）を行う（ステップＳ３０６）。この受信要求により、ＯＳが発行する入出力要求パケットの情報（識別ＩＤ：ＬＢＡ＿ＡＰ２＿Ｒ）をデータ判定部１２０が受け取る（ステップＳ３０７）。
【００６１】
データ判定部１２０は、入出力要求パケットの情報に基づき、入出力要求パケットに含まれる識別ＩＤなどの識別データを判定する（ステップＳ３０８）。具体的には、データ判定部１２０は、識別ＩＤ「ＬＢＡ＿ＡＰ２＿Ｒ」のデータ保存フラグを参照し、保存された実データがあるか確認する。データ登録部１３０は、管理テーブルに、識別ＩＤ「ＬＢＡ＿ＡＰ２＿Ｒ」の状態を「受信要求中」として登録する（ステップＳ３０９）。
【００６２】
図９の処理フローでは、実データは保存されているため、データ登録部１３０は、管理テーブルの識別ＩＤ「ＬＢＡ＿ＡＰ２＿Ｒ」の排他制御フラグが「処理可」であること確認し、管理テーブルに識別ＩＤ「ＬＢＡ＿ＡＰ２＿Ｒ」の排他制御フラグを「処理不可」として登録した後、通信制御部１４０は、通信データ記憶部２２０の「ＬＢＡ＿ＡＰ２＿Ｒ用」のリングバッファ＿先頭アドレスが示すデータ格納エリアから実データを読み出して、読み出した実データをＡＰ２宛の実データとして第二アプリケーション６１０に転送する（ステップＳ３１０）。データ登録部１３０は、識別ＩＤ「ＬＢＡ＿ＡＰ２＿Ｒ」のリングバッファ＿先頭アドレスに次のデータ格納エリアのアドレスを格納することで、リングバッファ＿先頭アドレスが示すデータ格納エリアに保存された実データを破棄し、識別ＩＤ「ＬＢＡ＿ＡＰ２＿Ｒ」のリングバッファ＿先頭アドレスと識別ＩＤ「ＬＢＡ＿ＡＰ２＿Ｒ」のリングバッファ＿終端アドレスが等しい場合に識別ＩＤ「ＬＢＡ＿ＡＰ２＿Ｒ」のデータ保存フラグを「無効」にして、排他制御フラグを「処理可」にする。識別ＩＤ「ＬＢＡ＿ＡＰ２＿Ｒ」のリングバッファ＿先頭アドレスと識別ＩＤ「ＬＢＡ＿ＡＰ２＿Ｒ」のリングバッファ＿終端アドレスが等しくない場合には、リングバッファに保存データは有るため、識別ＩＤ「ＬＢＡ＿ＡＰ２＿Ｒ」のデータ保存フラグは「有効」とする。
【００６３】
通信制御部１４０が実データを第二アプリケーション６１０に転送した後、データ登録部１３０は、管理テーブルに、識別ＩＤ「ＬＢＡ＿ＡＰ２＿Ｒ」の状態を「アイドル」として登録する（ステップＳ３１１）。そして、通信制御部１４０は、ステップＳ３０７の入出力要求パケットで要求された処理の完了を通知する（ステップＳ３１２）。
【００６４】
また、データ登録部１３０は、管理テーブルに、識別ＩＤ「ＬＢＡ＿ＡＰ１＿Ｗ」の状態を「アイドル」として登録する（ステップＳ３１３）。そして、通信制御部１４０は、ステップＳ３０１の入出力要求パケットで要求された処理の完了を通知する（ステップＳ３１４）。
【００６５】
図１０は、本発明の一実施形態に係る仮想マシン間の通信において、同じ識別ＩＤに対して送信要求よりも先に受信要求が実行され、かつ送信要求実行時に他スレッドとの競合が発生しない場合の処理の流れを示すシーケンス図である。
第二アプリケーション６１０は、第二通信用メモリ６２０の受信用アドレスを用いて受信要求（受信リクエストの入出力要求パケット生成）を行う（ステップＳ４００）。この受信要求により、ＯＳが発行する入出力要求パケットの情報（識別ＩＤ：ＬＢＡ＿ＡＰ２＿Ｒ）をデータ判定部１２０が受け取る（ステップＳ４０１）。
【００６６】
データ判定部１２０は、入出力要求パケットの情報に基づき、入出力要求パケットに含まれる識別ＩＤなどの識別データを判定する（ステップＳ４０２）。具体的には、データ判定部１２０は、識別ＩＤ「ＬＢＡ＿ＡＰ２＿Ｒ」のデータ保存フラグを参照し、保存された実データがあるか確認する。データ登録部１３０は、管理テーブルに、識別ＩＤ「ＬＢＡ＿ＡＰ２＿Ｒ」の状態を「受信要求中」として登録する（ステップＳ４０３）。
【００６７】
図１０の処理フローでは、実データは保存されていないため、データ登録部１３０は、管理テーブルに、識別ＩＤ「ＬＢＡ＿ＡＰ２＿Ｒ」の状態を「受信完了待ち」として登録する（ステップＳ４０４）。
【００６８】
第一アプリケーション５１０は、第一通信用メモリ５２０の送信用アドレスを用いて送信要求（送信リクエストの入出力要求パケット生成）を行う（ステップＳ４０５）。この送信要求により、ＯＳが発行する入出力要求パケットの情報（識別ＩＤ：ＬＢＡ＿ＡＰ１＿Ｗ、指示データ：ＴＸ、送り元：ＡＰ１、宛先：ＡＰ２）をデータ判定部１２０が受け取る（ステップＳ４０６）。
【００６９】
データ判定部１２０は、入出力要求パケットの情報に基づき、入出力要求パケットに含まれる識別ＩＤなどの識別データを判定する（ステップＳ４０７）。データ判定部１２０の判定結果に基づいて、データ登録部１３０は、管理テーブルに、識別ＩＤ「ＬＢＡ＿ＡＰ１＿Ｗ」の状態を「送信要求中」として登録する（ステップＳ４０８）。さらにデータ判定部１２０は、判定結果に基づいて、「ＬＢＡ＿ＡＰ２＿Ｒ」の状態が「受信完了待ち」であることをデータ登録部１３０に通知する。データ登録部１３０は、管理テーブルの識別ＩＤ「ＬＢＡ＿ＡＰ２＿Ｒ」の排他制御フラグが「処理可」であること確認し、排他制御フラグを「処理不可」として登録した後、通信制御部１４０は、実データを第二アプリケーション６１０へ転送する（ステップＳ４０９）。すなわち、通信制御部１４０は、実データを送信先となるＡＰ２のリングバッファを介することなく、実データを第二アプリケーション６１０へ転送する。
【００７０】
通信制御部１４０が実データを第二アプリケーション６１０に転送した後、データ登録部１３０は、管理テーブルに、識別ＩＤ「ＬＢＡ＿ＡＰ２＿Ｒ」の状態を「アイドル」として登録し、排他制御フラグを「処理可」として登録する（ステップＳ４１０）。そして、通信制御部１４０は、ステップＳ４０１の入出力要求パケットで要求された処理の完了を通知する（ステップＳ４１１）。
【００７１】
また、データ登録部１３０は、管理テーブルに、識別ＩＤ「ＬＢＡ＿ＡＰ１＿Ｗ」の状態を「アイドル」として登録（ステップＳ４１２）する。そして、通信制御部１４０は、ステップＳ４０６の入出力要求パケットで要求された処理の完了を通知する（ステップＳ４１３）。
【００７２】
図１１Ａは、同じ識別ＩＤに対して受信要求よりも先に送信要求が実行された場合の処理例の図９を基に、他スレッドの送信要求との競合により送信側で通信データ保存待ちが発生した場合の処理の流れを示すシーケンス図である。ステップＳ３００、Ｓ３０１、Ｓ３０２、Ｓ３０３、Ｓ３０４、Ｓ３０５は図９と同様であり、ステップＳ３０３−２のみ、図９と異なる。
ステップＳ３０３にて、データ登録部１３０は、管理テーブルに、識別ＩＤ「ＬＢＡ＿ＡＰ１＿Ｗ」の状態を「送信要求中」として登録する。その後、データ判定部１２０の判定結果に基づいて、宛先の識別ＩＤ「ＬＢＡ＿ＡＰ２＿Ｒ」の状態が「アイドル中」であり、かつ、識別ＩＤ「ＬＢＡ＿ＡＰ２＿Ｒ」の排他制御フラグが「処理不可」ある場合に、データ登録部１３０は、他のスレッドが識別ＩＤ「ＬＢＡ＿ＡＰ２＿Ｒ」への送信データ書き込み中と判断し、識別ＩＤ「ＬＢＡ＿ＡＰ１＿Ｗ」の状態を「通信データ保存待ち中」として登録する（ステップＳ３０３−２）。データ登録部１３０は、識別ＩＤ「ＬＢＡ＿ＡＰ２＿Ｒ」の排他制御フラグが「処理可」になるまで排他制御フラグの値を定期的に確認し、識別ＩＤ「ＬＢＡ＿ＡＰ２＿Ｒ」の排他制御フラグが「処理可」であることを確認すると、次のステップＳ３０４に進み、データ登録部１３０は、排他制御フラグを「処理不可」として登録した後、実データをリングバッファに保存する。その後、データ登録部１３０は、識別ＩＤ「ＬＢＡ＿ＡＰ２＿Ｒ」のデータ保存フラグを「有効」にして、排他制御フラグを「処理可」にする。
【００７３】
図１１Ｂは、同じ識別ＩＤに対して受信要求よりも先に送信要求が実行された場合の処理例の図９を基に、他スレッドの送信要求との競合により、受信側で通信データ転送待ちが発生した場合の処理の流れを示すシーケンス図である。ステップＳ３０６、Ｓ３０７、Ｓ３０８、Ｓ３０９、Ｓ３１０は図９と同様であり、ステップＳ３０９−２のみ、図９と異なる。
【００７４】
ステップＳ３０９にて、データ登録部１３０は、管理テーブルに、識別ＩＤ「ＬＢＡ＿ＡＰ２＿Ｒ」の状態を「受信要求中」として登録する。その後、図９の処理フローでは実データは保存されているため、データ登録部１３０は、識別ＩＤ「ＬＢＡ＿ＡＰ２＿Ｒ」の排他制御フラグを確認し、排他制御フラグが「処理不可」であることを確認すると、識別ＩＤ「ＬＢＡ＿ＡＰ２＿Ｒ」の状態を「通信データ転送待ち中」として登録する（ステップＳ３０９−２）。データ登録部１３０は、識別ＩＤ「ＬＢＡ＿ＡＰ２＿Ｒ」の排他制御フラグが「処理可」になるまで排他制御フラグの値を定期的に確認し、値が変化したときに次のステップＳ３１０に進み、データ登録部１３０は、排他制御フラグを「処理不可」として登録して、通信制御部１４０は、実データをリングバッファから読み出して第二アプリケーション６１０に転送する。その後、データ登録部１３０は、リングバッファから実データを破棄し、識別ＩＤ「ＬＢＡ＿ＡＰ２＿Ｒ」のリングバッファ＿先頭アドレスとデータ保存フラグを変更して、排他制御フラグを「処理可」にする。
なお、保存データフラグ使用せず、保存データフラグで保存データの有無を確認する方法ではなく、リングバッファの先頭アドレスと終端アドレスの比較により保存データの有無を確認する方法とした場合には、図１１Ｂで示した受信側での通信データ転送待ちは発生しない。
【００７５】
図１２は、同じ識別ＩＤに対して送信要求よりも先に受信要求が実行された場合の処理例の図１０を基に、他スレッドの送信要求との競合により、送信側で通信データ転送待ちが発生した場合の処理の流れを示すシーケンス図である。ステップＳ４０６、Ｓ４０７、Ｓ４０８、Ｓ４０９、Ｓ４１０は図１０と同様であり、ステップＳ４０８−２のみ、図１０と異なる。
ステップＳ４０８にて、データ登録部１３０は、管理テーブルに、識別ＩＤ「ＬＢＡ＿ＡＰ１＿Ｗ」の状態を「送信要求中」として登録する。その後、データ判定部１２０の判定結果に基づいて、識別ＩＤ「ＬＢＡ＿ＡＰ２＿Ｒ」の状態が「受信完了待ち」であり、かつ、識別ＩＤ「ＬＢＡ＿ＡＰ２＿Ｒ」の排他制御フラグが「処理不可」ある場合に、データ登録部１３０は、識別ＩＤ「ＬＢＡ＿ＡＰ１＿Ｗ」の状態を「通信データ転送待ち中」として登録する（ステップＳ４０８−２）。データ登録部１３０は、識別ＩＤ「ＬＢＡ＿ＡＰ２＿Ｒ」の排他制御フラグが「処理可」になるまで排他制御フラグの値を定期的に確認し、識別ＩＤ「ＬＢＡ＿ＡＰ２＿Ｒ」の排他制御フラグが「処理可」であることを確認すると、次のステップＳ４０９に進み、データ登録部１３０は、排他制御フラグを「処理不可」として登録して、通信制御部１４０は、実データを第二アプリケーション６１０へ転送する。すなわち、通信制御部１４０は、リングバッファを介することなく実データを第二アプリケーション６１０へ転送する。その後、ステップＳ４１０にて、データ登録部１３０は、識別ＩＤ「ＬＢＡ＿ＡＰ２＿Ｒ」の状態を「アイドル」として登録し、排他制御フラグを「処理可」として登録する。
【００７６】
図１３から図１５に、特許文献１の通信方法を基にして３台の仮想マシン間で通信を行うことを想定したデータテーブルの例を示す。特許文献１では1対1の通信を例としており、複数の仮想マシン間での通信を行う場合には、仮想マシンのペア毎に１対１の通信を行う必要がある。図１３に通信用メモリのデータテーブルを示す。図１４に図１３で示した通信用メモリの送受信アドレスに対応する通信用メモリドライバの論理ブロックアドレス（識別ＩＤ）のデータテーブルを示し、図１５に図１４で示した識別ＩＤを基にした管理テーブルを示す。このように仮想マシンの組合せ毎に４つの識別ＩＤ、２つのデータ保存バッファが必要となり、３台の仮想マシン間で通信する場合には、１２個の識別ＩＤと６個のデータ保存バッファが必要となる。Ｎ台の仮想マシン間で通信する場合には、組合せの数は（Ｎ×（Ｎ−１）÷２）であるため、（（Ｎ×（Ｎ−１）÷２）×４）個の識別ＩＤと（（Ｎ×（Ｎ−１）÷２）×２）個のデータ保存バッファが必要となる。また、通信を行うためには１つの識別ＩＤに対してホスト上に１つのスレッドを使用する。このため、通信を行う仮想マシンの数が多いとホスト上に必要となるスレッド数が多くなり、初期設定が煩雑になると共に、通信処理に使用するリソースが大きくなり、リソース不足による性能低下が発生する。また、ホスト上の通信用メモリドライバは（Ｎ×（Ｎ−１））個のデータ保存バッファを備えることになり、１つの仮想マシンからのデータ通信要求を処理する場合に（Ｎ−１）個のデータ保存バッファについて保存データの有無を確認する必要がある。
【００７７】
図１６から図１８に、本実施の形態における通信方法を使用して３台の仮想マシン間で通信を行う場合のデータテーブルの例を示す。図１６に通信用メモリのデータテーブルを示す。第一仮想マシン、第二仮想マシン、第三仮想マシンに対して、第一通信用メモリ、第二通信用メモリ、第三通信用メモリを備え、それぞれ送信用アドレスと受信用アドレスを備える。図１７に図１６で示した通信用メモリの送受信アドレスに対応する通信用メモリドライバの論理ブロックアドレス（識別ＩＤ）のデータテーブルを示し、図１８に図１７で示した識別ＩＤを基にした管理テーブルを示す。これによると仮想マシン毎に２つの識別ＩＤ、１つのリングバッファが必要となり、３台の仮想マシン間で通信する場合には、６個の識別ＩＤと３個のリングバッファが必要となる。Ｎ台の仮想マシン間で通信する場合には、（Ｎ×２）個の識別ＩＤとＮ個のリングバッファが必要となる。また、通信を行うためには１つの識別ＩＤに対してホスト上に１つのスレッドを使用する。これにより、ホスト上に必要となるスレッドの数を最小限にすることができ、通信を行う仮想マシンの数が多い場合でも、初期設定が煩雑にならず、リソース不足による性能低下することなく、３台以上の複数の仮想マシン間で高速な通信が可能となる。さらに、リングバッファは１つの仮想マシンに対して（Ｎ−１）個のデータ格納エリアを備えるが、１つの仮想マシンからの受信データ要求に対して、通信用メモリドライバは１つのリングバッファについて保存データの有無を確認すればよく、先行技術を基にして複数の仮想マシン間で通信を行うことを想定した場合よりデータ受信時の保存データの有無の確認処理を削減することができる。
【００７８】
本発明の実施例では、１つの仮想マシンに通信を実施するアプリケーションを１個実装して、仮想マシン間の通信として説明したが、１つの仮想マシン内に通信を実施するアプリケーションを複数個実装して、仮想マシンを跨いだ複数のアプリケーション間の通信も可能である。
以上、本実施の形態に示す情報処理装置１では、Ｎ個の仮想マシン間で通信を行う場合に、リングバッファのデータ格納エリアの数を（Ｎ−１）個とした。情報処理装置１において、メモリ領域が十分に大きい場合には数を増やし、メモリ領域が小さい場合には数を減らすなど、メモリ領域に合わせてリングバッファのエントリ数を変更しても良い。
また、本実施の形態において、特許文献１に示す通信方法を基にした複数の仮想マシン間の通信方法（以下「１対１通信の拡張による通信方法」と呼ぶ）との対比を示した。本実施の形態に示す情報処理装置１が行う通信方法（以下「１対Ｎ通信による通信方法」と呼ぶ）と前述の「１対１通信の拡張による通信方法」を組み合わせた通信方法としても良い。具体的には、仮想マシンの数が少ない場合には「１対１通信の拡張による通信方法」、仮想マシンの数が多い場合には「１対Ｎ通信による通信方法」とし、ホストマシンのリソース数や通信速度を監視する監視機能を追加し、監視機能の結果を見て、自動的に最適な通信方法に切り替えても良い。
次に、情報処理装置１におけるハードウェアの構成例について述べる。図２１は、情報処理装置１のハードウェア構成を例示する図である。図２１では、情報処理装置１を実現するための計算機２は任意の仮想マシンを実現しうる性能を備えた計算機である。
【００７９】
計算機２は、バス２１、プロセッサ２２、メモリ２３、ストレージデバイス２４、入出力インタフェース２５、および、外部インタフェース２６を備える。バス２１は、プロセッサ２２、メモリ２３、ストレージデバイス２４、入出力インタフェース２５、及び外部インタフェース２６が、相互にデータを送受信するためのデータ伝送路である。ただし、プロセッサ２２などを互いに接続する方法は、バス接続に限定されない。プロセッサ２２は、CPU（Central Processing Unit）やその他、処理機能を有する種々のプロセッサである。メモリ２３は、RAM（Random Access Memory）などを用いて実現される主記憶装置である。ストレージデバイス２４は、ハードディスク、SSD（Solid State Drive）、メモリカード、又は ROM（Read Only Memory）などを用いて実現される補助記憶装置である。
【００８０】
入出力インタフェース２５は、計算機２と入出力デバイスとを接続するためのインタフェースである。例えば入出力インタフェース２５には、キーボードなどの入力装置や、ディスプレイ装置などの出力装置が接続される。
【００８１】
外部インタフェース２６は、計算機２を例えばネットワークなどに接続するためのインタフェースである。線接続であってもよい。外部インタフェース２６は、ネットワークインタフェースではなく、直接外部機器を接続するインタフェースであってもよい。
ストレージデバイス２４は、情報処理装置１の各処理部を実現するプログラムモジュールを記憶している。プロセッサ２２は、これら各プログラムモジュールをメモリ２３に読み出して実行することで、各プログラムモジュールに対応する機能を実現する。
【００８２】
図２２は、情報処理装置１の最小構成図を示す図である。情報処理装置１は、記憶部（システムメモリ）２００と通信制御部１４０を備える。
【００８３】
情報処理装置１は、３台以上の複数の仮想マシンを備える。
記憶部２００は、仮想マシン毎に、送信される実データを記憶するためのリングバッファの先頭アドレスと終端アドレス、排他制御フラグとを含むデータテーブルを記憶する。
通信制御部１４０は、送信元の仮想マシンから送信先の仮想マシンに送信する実データのリングバッファのデータ格納エリアでの保存の有無、送信先の仮想マシンによる受信要求の有無、送信先の仮想マシンに対応するデータテーブルの排他制御フラグの状態に基づき、リングバッファのアドレスを利用して、送信元の仮想マシンから送信先の仮想マシンデータへのデータの転送制御をする。
【００８４】
以上のように、本実施の形態における情報処理装置１では、排他制御機構による待ち時間が、先行技術の通信方法と比較すると増加するが、TCP-IPなどネットワーク通信用の通信プロトコルを使用する通信方法と比較した場合には、通信プロトコルを使用する通信方法でも排他制御機構は必要となるため、複数の処理階層を経由することによる通信処理のオーバーヘッドが無い分、通信プロトコルを使用する通信方法よりも高速な通信が可能である。
【符号の説明】
【００８５】
１００    制御部
１１０    メモリ制御部
１２０    データ判定部
１３０    データ登録部
１４０    通信制御部
２００    システムメモリ
２１０    通信用メモリ記憶部
２２０    通信データ記憶部
３００    通信用メモリドライバ
４００    仮想通信用メモリ
４１０    第一仮想メモリ
４２０    第二仮想メモリ
４４０    第Ｎ仮想メモリ
５００    第一仮想マシン
５１０    第一アプリケーション
５２０    第一通信用メモリ
６００    第二仮想マシン
６１０    第二アプリケーション
６２０    第二通信用メモリ
８００    第Ｎ仮想マシン
８１０    第Ｎアプリケーション
８２０    第Ｎ通信用メモリ
【要約】
【課題】３台以上の複数台の仮想マシンを備えた装置であっても、仮想マシン間の通信処理に使用するリソースが大きくなり、リソース不足による性能低下が発生することのない装置を提供する。
【解決手段】３台以上の複数の仮想マシンを備える情報処理装置は、仮想マシン毎に、送信される実データを記憶するためのリングバッファの先頭アドレスと終端アドレス、排他制御フラグとを含むデータテーブルを記憶し、送信元の仮想マシンから送信先の仮想マシンに送信する実データのリングバッファのデータ格納エリアでの保存の有無、送信先の仮想マシンによる受信要求の有無、送信先の仮想マシンに対応するデータテーブルの排他制御フラグの状態に基づき、リングバッファのアドレスを利用して、送信元の仮想マシンから送信先の仮想マシンデータへのデータの転送制御をする通信制御部１４０を備える。
【選択図】図２【図１】
0006885635.tif 000002
【図２】
0006885635.tif 000003
【図３Ａ】
0006885635.tif 000004
【図３Ｂ】
0006885635.tif 000005
【図４】
0006885635.tif 000006
【図５】
0006885635.tif 000007
【図６】
0006885635.tif 000008
【図７】
0006885635.tif 000009
【図８】
0006885635.tif 000010
【図９】
0006885635.tif 000011
【図１０】
0006885635.tif 000012
【図１１Ａ】
0006885635.tif 000013
【図１１Ｂ】
0006885635.tif 000014
【図１２】
0006885635.tif 000015
【図１３】
0006885635.tif 000016
【図１４】
0006885635.tif 000017
【図１５】
0006885635.tif 000018
【図１６】
0006885635.tif 000019
【図１７】
0006885635.tif 000020
【図１８】
0006885635.tif 000021
【図１９】
0006885635.tif 000022
【図２０】
0006885635.tif 000023
【図２１】
0006885635.tif 000024
【図２２】
0006885635.tif 000025