(57)【要約】仮想計算機間で高速なデータ通信を可能とするために、ホスト計算機（１０）のハイパーバイザ（２０）は、送信側の仮想計算機（６０）からのＨＶＣ（Hypervisor Call）を用いた送信メモリ領域の通知を受信し、受信側の仮想計算機（７０）からのＨＶＣを用いた受信メモリ領域の通知を受信し、送信メモリ領域にあるデータを受信メモリ領域にコピーするメモリコピー部（２１）を備える。
2019012958.tif 000002
【特許請求の範囲】
【請求項１】
物理計算機上に複数の仮想計算機を稼働させ、前記仮想計算機の間のデータ通信を仲介するハイパーバイザであって、
前記仮想計算機のうちデータの送信側である送信側仮想計算機から送信メモリ領域の通知を受けると、前記仮想計算機のうちデータの受信側である受信側仮想計算機に割込で受信要求を通知し、
前記受信側仮想計算機から受信メモリ領域の通知を受けると、前記送信メモリ領域のデータを前記受信メモリ領域にコピーするメモリコピー部を備えるハイパーバイザ、
を機能させるためのハイパーバイザプログラム。
【請求項２】
物理計算機上に複数の仮想計算機を稼働させ、前記仮想計算機の間のデータ通信を仲介するハイパーバイザであって、
前記仮想計算機のうちデータの受信側である受信側仮想計算機から受信メモリ領域の通知を受けると、前記仮想計算機のうちデータの送信側である送信側仮想計算機に割込で送信要求を通知し、
前記送信側仮想計算機から送信メモリ領域の通知を受けると、前記送信メモリ領域のデータを前記受信メモリ領域にコピーするメモリコピー部を備えるハイパーバイザ、
を機能させるためのハイパーバイザプログラム。
【請求項３】
前記メモリコピー部は、
前記送信メモリ領域のデータに対して、暗号化、復号、エンディアン変換、データ圧縮、データ伸長、エンコードおよびデコードのいずれか１つないしは複数の組み合わせの変換処理を実行し、この変換処理後のデータを前記受信メモリ領域にコピーする、
ことを特徴とする請求項１または２に記載のハイパーバイザプログラム。
【請求項４】
物理計算機上に複数の仮想計算機を稼働させ、前記仮想計算機の間のデータ通信を仲介するハイパーバイザであって、
前記仮想計算機は、前記ハイパーバイザが管理し、物理アドレスにマッピングされる論理アドレス上で動作しており、
前記ハイパーバイザは、
前記仮想計算機のうちデータの送信側である送信側仮想計算機から送信メモリページの通知を受け、前記仮想計算機のうちデータの受信側である受信側仮想計算機から受信メモリページの通知を受けると、前記受信メモリページの論理アドレスのマッピング先の物理アドレスを、前記送信メモリページの論理アドレスのマッピング先の物理アドレスに変更し、前記送信メモリページの論理アドレスのマッピング先の物理アドレスを別の物理アドレスに変更するメモリマッピング部を備えるハイパーバイザ、
を機能させるためのハイパーバイザプログラム。
【請求項５】
前記ハイパーバイザは、
前記送信側仮想計算機と前記受信側仮想計算機とに割込で送受信の完了を通知する、
ことを特徴とする請求項１ないし４のうちいずれか１項に記載のハイパーバイザプログラム。
【発明の詳細な説明】
【技術分野】
【０００１】
本発明は、仮想計算機間でデータ通信が可能となるハイパーバイザプログラムに関する。
【背景技術】
【０００２】
情報技術分野では、コスト削減、消費電力削減、高い俊敏性などのメリットがある仮想化技術が広く普及しており、ＩａａＳ（Infrastructure as a Service）やＳａａＳ（Software as a Service）のようなクラウドの基盤技術として用いられている。また、通信サービス事業においても、仮想化技術は、ＮＦＶ（Network Function Virtualization）の基盤技術となっており、さらにＩｏＴ（Internet of Things）の進展に伴い、自動車や工場、家電などの制御技術分野にも拡大しつつある。【０００３】
仮想化技術を用いることで、１つの物理計算機上で複数の仮想計算機を稼働させることができる。詳しくは、物理計算機上で稼働するハイパーバイザが、仮想ＣＰＵ（Central Processing Unit）や仮想メモリ、仮想ストレージ、仮想ＮＩＣ（Network Interface Card）を備えた仮想計算機を機能させ、この仮想計算機上でゲストＯＳ（Operating System）が稼働する。仮想計算機は、ハイパーバイザが提供する仮想ＮＩＣと仮想ネットワークの機能を用いて、他の仮想計算機と通信することができる（非特許文献１）。
【先行技術文献】
【非特許文献】
【０００４】
【非特許文献１】Jian Wang他，"XenLoop: A Transparent High Performance Inter-VM Network Loopback,"［online］,［2017年6月14日検索］,インターネット＜URL:http://osnet.cs.binghamton.edu/publications/wang08xenloop.pdf＞
【発明の概要】
【発明が解決しようとする課題】
【０００５】
仮想ＮＩＣと仮想ネットワークを介した通信では、通信データの送受信を開始する前に、通信路を開設するためのハンドシェイク処理が必要である。また、送信側ゲストＯＳ上のアプリケーションから送信側ゲストＯＳへ、送信側ゲストＯＳから送信側仮想ＮＩＣへ、送信側仮想ＮＩＣから受信側仮想ＮＩＣへ、受信側仮想ＮＩＣから受信側ゲストＯＳへ、および、受信側ゲストＯＳから受信側ゲストＯＳ上のアプリケーションへの５回のデータコピーがあるために通信処理に時間を要する。非特許文献１では、データのコピー回数を削減する工夫が記載されているが、さらなる高速化が求められている。【０００６】
このような背景を鑑みて本発明がなされたのであり、本発明は、仮想計算機間で高速なデータ通信を可能とするハイパーバイザプログラムを提供することを課題とする。
【課題を解決するための手段】
【０００７】
前記した課題を解決するため、本発明は、物理計算機上に複数の仮想計算機を稼働させ、前記仮想計算機の間のデータ通信を仲介するハイパーバイザであって、前記仮想計算機のうちデータの送信側である送信側仮想計算機から送信メモリ領域の通知を受けると、前記仮想計算機のうちデータの受信側である受信側仮想計算機に割込で受信要求を通知し、前記受信側仮想計算機から受信メモリ領域の通知を受けると、前記送信メモリ領域のデータを前記受信メモリ領域にコピーするメモリコピー部を備えるハイパーバイザ、を実現させるためのハイパーバイザプログラムとした。【０００８】
このようにすることで、物理計算機は、送信メモリ領域から受信メモリ領域に１度のコピーでデータを送信することができる。これにより、送信側仮想計算機から受信側仮想計算機へ高速にデータ送信することが可能となる。
【発明の効果】
【０００９】
本発明によれば、仮想計算機間で高速なデータ通信を可能とするハイパーバイザプログラムを提供することができる。
【図面の簡単な説明】
【００１０】
【図１】第１の実施形態に係るホスト計算機の全体構成を示す図である。
【図２】第１の実施形態に係る受信側の仮想計算機が開始する、仮想計算機から仮想計算機へのデータ送信処理の流れを示すシーケンス図である。
【図３】第１の実施形態の変形例３に係る仮想計算機から仮想計算機へのデータ送信処理の流れを示すシーケンス図である。
【図４】第２の実施形態に係る送信側の仮想計算機が開始する、仮想計算機から仮想計算機へのデータ送信処理の流れを示すシーケンス図である。
【図５】第３の実施形態に係るホスト計算機の全体構成を示す図である。
【図６】第３の実施形態に係る仮想計算機の仮想メモリとホスト計算機の物理メモリとのマッピングの状態を説明するための図である。
【図７】第３の実施形態に係る仮想計算機から仮想計算機へのメモリマッピング変更によるデータ送信処理の流れを示すシーケンス図である。
【図８】第３の実施形態に係る、仮想計算機が受信メモリページを確保した時点での、仮想計算機の仮想メモリとホスト計算機の物理メモリとのマッピングの状態を示す図である。
【図９】第３の実施形態に係る、メモリマッピングを変更した時点での、仮想計算機の仮想メモリとホスト計算機の物理メモリとのマッピングの状態を示す図である。
【図１０】第３の実施形態の変形例２に係る仮想計算機と仮想計算機との複数のメモリページのマッピング変更によるデータ送信処理の流れを示すシーケンス図である。
【図１１】第４の実施形態に係るストレージ上に格納される仮想計算機データベースのデータ構成を例示する図である。
【図１２】第４の実施形態に係るストレージ上に格納される情報フロー制御管理データベースのデータ構成を例示する図である。
【図１３】第４の実施形態に係る、情報フロー制御を伴った仮想計算機から仮想計算機へのデータ送信処理の流れを示すシーケンス図である。
【図１４】第５の実施形態に係る、情報フロー制御を伴った仮想計算機から仮想計算機へのメモリマッピング変更によるデータ送信処理の流れを示すシーケンス図である。
【発明を実施するための形態】
【００１１】
以下、図面を参照しながら本発明を実施するための形態（実施形態）を説明する。図１は、第１の実施形態に係るホスト計算機１０の全体構成を示す図である。ホスト計算機（物理計算機）１０は、ＣＰＵ３１、メモリ３２、ストレージ３３、入出力部３４、ハイパーバイザ２０、仮想計算機（６０、７０）を含めて構成される。
【００１２】
ＣＰＵ３１は、ストレージ３３に記憶されるプログラムを実行して、後述するハイパーバイザ２０やハイパーバイザ２０上の仮想計算機（６０、７０）を機能させる。メモリ３２は、ＣＰＵ３１が実行する処理に必要なデータを記憶する。ストレージ３３は、ハイパーバイザ２０や仮想計算機（６０、７０）のプログラムやデータを記憶する。入出力部３４は、他の計算機やディスプレイ（不図示）、キーボード（不図示）とのデータのやり取りを行う。
【００１３】
ハイパーバイザ２０は、ＣＰＵ３１、メモリ３２、ストレージ３３、入出力部３４を仮想化して、仮想的な計算機を稼働する。ハイパーバイザ２０は、仮想計算機６０の仮想メモリ上にあるデータを仮想計算機７０の仮想メモリにコピーするメモリコピー部２１を含み、仮想計算機（６０、７０）の間のデータ通信を仲介する。
【００１４】
仮想計算機６０は、ハイパーバイザ２０上の仮想的な計算機であり、仮想ＣＰＵ６１、仮想メモリ６２、仮想ストレージ（不図示）、仮想入出力部（不図示）、ゲストＯＳ６５、ゲストＯＳ６５上で稼働するアプリケーション（不図示）を含んで構成される。仮想ＣＰＵ６１、仮想メモリ６２、仮想ストレージ（不図示）および仮想入出力部（不図示）は、ハイパーバイザ２０が提供し、仮想計算機６０が備える仮想的なＣＰＵ、メモリ、ストレージおよび入出力部である。
【００１５】
ゲストＯＳ６５は、仮想ＣＰＵ６１、仮想メモリ６２、仮想ストレージ（不図示）および仮想入出力部（不図示）の仮想的なハードウェア上で稼働するＯＳである。ゲストＯＳ６５が、ハイパーバイザ２０に対してサービスを要求するときには、ＨＶＣ（Hypervisor Call）を用いてサービスを呼び出す。ハイパーバイザ２０がゲストＯＳ６５に要求がある場合には、割込みを用いて通知する。ゲストＯＳ６５は、仮想メモリ６２を仮想計算機６０の物理メモリとしてアクセスするが、実際には、ＣＰＵ３１とハイパーバイザ２０とにより仮想メモリ６２上のアドレスがホスト計算機１０のメモリ３２上のアドレスに変換されてから、メモリ３２にアクセスする。
【００１６】
仮想計算機７０も、仮想計算機６０と同様の構成であり、仮想ＣＰＵ７１や仮想メモリ７２、ゲストＯＳ７５を含んで構成される。ハイパーバイザ２０上の仮想計算機（６０、７０）は、３つ以上であってもよい。メモリコピー部２１は、仮想メモリ６２に対応するメモリ３２のデータを、仮想メモリ７２に対応するメモリ３２にコピーする。
【００１７】
≪第１の実施形態：受信側仮想計算機が開始する、仮想メモリ間のコピーによるデータ送信≫
図２は、第１の実施形態に係る受信側の仮想計算機７０が開始する、仮想計算機６０から仮想計算機７０へのデータ送信処理の流れを示すシーケンス図である。図２を参照しながら、ハイパーバイザ２０のメモリコピー部２１が、仮想計算機６０の仮想メモリ６２にあるデータを、仮想計算機７０の仮想メモリ７２にコピーする処理を説明する。
【００１８】
ステップＳ１０１において、受信側である仮想計算機７０がデータを受信する領域である受信メモリ領域を確保する。
ステップＳ１０２において、仮想計算機７０が、ＨＶＣを用いて受信メモリ領域をハイパーバイザ２０に通知してデータ受信を要求する。詳しくは、仮想計算機７０は、受信メモリ領域のアドレスやサイズを仮想ＣＰＵ７１の特定のレジスタにセットして、受信メモリ領域を通知するＨＶＣを実行する。ハイパーバイザ２０は、メモリコピー処理を実行するメモリコピー部２１にＨＶＣを転送する。
【００１９】
ステップＳ１０３において、メモリコピー部２１は、送信要求があったことを送信側の仮想計算機６０に割込みを用いて通知する。
ステップＳ１０４において、送信要求の割込みが発生した仮想計算機６０は、送信データを記憶する送信メモリ領域を確保する。
【００２０】
ステップＳ１０５において、仮想計算機６０は、送信メモリ領域に送信データをセットする。
ステップＳ１０６において、仮想計算機６０は、送信メモリ領域のアドレスとサイズをレジスタにセットし、送信メモリ領域を通知してデータ送信を要求するＨＶＣを実行する。
【００２１】
ステップＳ１０７において、メモリコピー部２１が、送信メモリ領域から受信メモリ領域へデータをコピーする。詳しくは、メモリコピー部２１は、仮想計算機６０の送信メモリ領域に対応するホスト計算機１０のメモリ３２上のデータを、仮想計算機７０の受信メモリ領域に対応するメモリ３２の位置（アドレス）へコピーする。
ステップＳ１０８において、メモリコピー部２１が、コピーが完了したことを仮想計算機６０に割込みを用いて通知する。なお、ステップＳ１０３の割込みとステップＳ１０８の割込みとは、種別（割込みベクタ）が異なる。
【００２２】
ステップＳ１０９において、メモリコピー部２１が、コピーが完了したことを仮想計算機７０に割込みを用いて通知する。以降、仮想計算機７０は、送信データにアクセスできる。なお、ステップＳ１０８の割込みとステップＳ１０９の割込みとは、同じ種別（割込みベクタ）である。
第１の実施形態において、メモリコピーは、ステップＳ１０７の１回だけであり、仮想計算機６０の仮想メモリ６２から仮想計算機７０の仮想メモリ７２に高速にデータを送信することができる。
【００２３】
≪第１の実施形態の変形例１：ＨＶＣの返答を用いたコピー完了通知≫
上記した第１の実施形態では、メモリコピー部２１が、コピー完了を仮想計算機６０に通知するのに、割込みを用いている（ステップＳ１０８参照）。割込みの替わりに、メモリコピー部２１は、送信メモリ領域を通知するＨＶＣ（ステップＳ１０６参照）の返答（リターン値）を用いてもよい。詳しくは、メモリコピー部２１が、ステップＳ１０６においてＨＶＣにより送信メモリ領域の通知を受け、続いて、ステップＳ１０７のコピー処理を実行して、ステップＳ１０６のＨＶＣの返答としてコピー完了を仮想計算機６０に通知する。
【００２４】
≪第１の実施形態の変形例２：送信メモリ領域のサイズが小さい場合≫
第１の実施形態においては、送信メモリ領域から受信メモリ領域へのコピーは１回で完了している。送信側の仮想計算機６０の送信メモリ領域が小さく、１回のコピーではデータを送信しきれない場合には、ステップＳ１０４〜Ｓ１０７を繰り返すことで、送信データを受信メモリ領域にコピーすることができる。
【００２５】
繰り返す処理のステップＳ１０７において、ハイパーバイザ２０は、受信メモリ領域の中で前回コピーしたデータに続く位置に今回のデータをコピーする。
送信側の仮想計算機６０は、ステップＳ１０６において、送信メモリ領域のサイズを０とすることで、送信終了をハイパーバイザ２０に通知する。送信完了の通知を受けたハイパーバイザ２０は、ステップＳ１０７の処理をすることなく、繰り返し処理を終えて、ステップＳ１０８に進む。ハイパーバイザ２０は、ステップＳ１０８に進まず、ステップＳ１０９に進んでもよい。
【００２６】
≪第１の実施形態の変形例３：受信メモリ領域のサイズが小さい場合≫
受信側の仮想計算機７０が送信データのサイズを知らない場合には、送信メモリ領域より受信メモリ領域が小さく、１回のコピーではコピーが完了しない。このような場合には、メモリコピー部２１は複数回に分けてコピーする。
【００２７】
図３は、第１の実施形態の変形例３に係る仮想計算機６０から仮想計算機７０へのデータ送信処理の流れを示すシーケンス図である。図３を参照しながら、送信メモリ領域より受信メモリ領域が小さい場合に、ハイパーバイザ２０のメモリコピー部２１が、仮想計算機６０の仮想メモリ６２にあるデータを、複数回に分けて仮想計算機７０の仮想メモリ７２にコピーする処理を説明する。
【００２８】
ステップＳ１２１〜Ｓ１２６は、ステップＳ１０１〜Ｓ１０６とそれぞれ同様である。
ステップＳ１２７において、メモリコピー部２１が、送信メモリ領域から受信メモリ領域へデータを送信メモリに受信メモリのサイズ分だけコピーする。
【００２９】
ステップＳ１２８において、メモリコピー部２１が、受信メモリ領域が不足していることを仮想計算機７０に割込みを用いて通知する。
ステップＳ１２９とステップＳ１３０とは、ステップＳ１０１とステップＳ１０２とそれぞれ同様である。
【００３０】
ステップＳ１３１において、メモリコピー部２１が、送信メモリ領域の中で、ステップＳ１２７においてコピーした次の位置から受信メモリ領域へデータをコピーする。コピーするサイズは、送信メモリ領域の中でコピーが完了していない領域のサイズが、受信メモリ領域のサイズ以下ならば、コピーが完了していない領域のサイズである。そうでないならば、コピーするサイズは、受信メモリ領域のサイズである。以下では、送信メモリ領域の中でコピーが完了していない領域のサイズが、受信メモリ領域のサイズ以下であったとして説明を続ける。
【００３１】
ステップＳ１３２とステップＳ１３３は、ステップＳ１０８とステップＳ１０９と、それぞれ同様である。
ステップＳ１３１において、送信メモリ領域の中でコピーが完了していない領域のサイズが、受信メモリ領域のサイズより大きい場合には、ステップＳ１２８〜Ｓ１３１の処理を繰り返す。
【００３２】
上記したとおり、受信メモリ領域が送信メモリ領域より小さい場合であっても、仮想計算機６０の仮想メモリ６２から仮想計算機７０の仮想メモリ７２にデータを送信することができる。ネットワーク機能を用いてデータを送信する場合には、１つの通信データ（通信パケット）のサイズには上限がある。このサイズより大きな受信メモリ領域を確保すれば、ネットワーク経由のデータ送信よりさらに高速にデータ送信が可能となる。
【００３３】
上記した第１の実施形態の変形例３では、メモリコピー部２１が、コピー完了を仮想計算機７０に通知するのに、割込みを用いている（ステップＳ１３３参照）。割込みの替わりに、メモリコピー部２１は、受信メモリ領域を通知するＨＶＣ（ステップＳ１３０参照）の返答を用いてもよい。詳しくは、メモリコピー部２１が、ステップＳ１３０においてＨＶＣにより受信メモリ領域の通知を受け、続いて、ステップＳ１３１のコピー処理が完了したならば、ステップＳ１３０のＨＶＣの返答としてコピー完了を仮想計算機７０に通知する。
【００３４】
また、上記した第１の実施形態の変形例３では、メモリコピー部２１が、領域不足を仮想計算機７０に通知するのに、割込みを用いている（ステップＳ１２８参照）。割込みの替わりに、メモリコピー部２１は、受信メモリ領域を通知するＨＶＣ（ステップＳ１３０参照）の返答を用いてもよい。詳しくは、メモリコピー部２１が、ステップＳ１３０においてＨＶＣにより受信メモリ領域の通知を受け、続いて、ステップＳ１３１のコピー処理が未完了ならば、ステップＳ１３０のＨＶＣの返答として領域不足を仮想計算機７０に通知する。以下、仮想計算機７０とメモリコピー部２１とは、ステップＳ１２９〜Ｓ１３１を繰り返す。
【００３５】
≪第２の実施形態：送信側仮想計算機が開始する、仮想メモリ間のコピーによるデータ送信≫
図４は、第２の実施形態に係る送信側の仮想計算機６０が開始する、仮想計算機６０から仮想計算機７０へのデータ送信処理の流れを示すシーケンス図である。図４を参照しながら、ハイパーバイザ２０のメモリコピー部２１が、仮想計算機６０の仮想メモリ６２にあるデータを、仮想計算機７０の仮想メモリ７２にコピーする処理を説明する。
【００３６】
ステップＳ２０１〜Ｓ２０３は、図２記載のステップＳ１０４〜Ｓ１０６と同様である。
ステップＳ２０４において、メモリコピー部２１は、受信要求を受信側の仮想計算機７０に割込みを用いて通知する。
【００３７】
ステップＳ２０５とステップＳ２０６とは、図２記載のステップＳ１０１とステップＳ１０２とそれぞれ同様である。
ステップＳ２０７〜Ｓ２０９は、図１記載のステップＳ１０７〜Ｓ１０９と同様である。
【００３８】
第２の実施形態において、メモリコピー処理は、ステップＳ２０７の１回だけであり、仮想計算機６０の仮想メモリ６２から仮想計算機７０の仮想メモリ７２に高速にデータを送信することができる。
【００３９】
≪第２の実施形態の変形例１：ＨＶＣの返答を用いたコピー完了通知≫
上記した第２の実施形態では、メモリコピー部２１が、コピー完了を仮想計算機７０に通知するのに、割込みを用いている（ステップＳ２０９参照）。割込みの替わりに、メモリコピー部２１は、受信メモリ領域を通知するＨＶＣ（ステップＳ２０６参照）の返答を用いてもよい。詳しくは、メモリコピー部２１が、ステップＳ２０６においてＨＶＣにより受信メモリ領域の通知を受け、続いて、ステップＳ２０７のコピー処理を実行して、ステップＳ２０６のＨＶＣの返答としてコピー完了を仮想計算機７０に通知する。
【００４０】
≪第２の実施形態の変形例２：受信メモリ領域のサイズが小さい場合≫
上記した第２の実施形態においては、送信メモリ領域から受信メモリ領域へのコピーは１回で完了している。受信側の仮想計算機７０の受信メモリ領域が小さく、ステップＳ２０７で実行する１回のコピーではデータを送信しきれない場合には、ステップＳ２０７に続いて図３に記載したステップＳ１２８〜Ｓ１３１と同様の処理を繰り返すことで、送信データを受信メモリ領域にコピーすることができる。また、メモリコピー部２１は、ステップＳ１２８の割込みの替わりに、ステップＳ１３０のＨＶＣの返答を用いて、領域不足を仮想計算機７０に通知してもよい。
【００４１】
また、ステップＳ２０９の割込みを用いたコピー完了の通知の替わりに、受信メモリ領域を通知するＨＶＣ（ステップＳ１３０参照）の返答を用いてもよい。詳しくは、メモリコピー部２１が、ステップＳ１３０においてＨＶＣにより受信メモリ領域の通知を受け、続いて、ステップＳ１３１のコピー処理が完了したならば、ステップＳ１３０のＨＶＣの返答としてコピー完了を仮想計算機７０に通知する。
【００４２】
≪第３の実施形態：メモリマッピング変更によるデータ送信≫
第１と第２の実施形態においては、ハイパーバイザ２０が、仮想計算機６０の仮想メモリ６２から仮想計算機７０の仮想メモリ７２へデータをコピーして、データを送信している。詳しくは、ハイパーバイザ２０が、仮想メモリ６２に対応するメモリ３２の領域から、仮想メモリ７２に対応するメモリ３２の領域にデータをコピーしている。これに対し、第３の実施形態では、ハイパーバイザ２０が、仮想メモリ（６２、７２）とメモリ３２との対応（メモリマッピング）を変更することで、データコピーを不要にしてデータ送信する。
【００４３】
図５は、第３の実施形態に係るホスト計算機１０Ａの全体構成を示す図である。ハイパーバイザ２０Ａは、メモリコピー部２１に替わりメモリマッピング部２２を含んで構成される。他の構成は、ホスト計算機１０と同様である。仮想メモリ（６２、７２）とメモリ３２とのマッピング（対応関係）は、後述する拡張ページテーブル（４１、４２、図６参照）を用いて管理されている。メモリマッピング部２２は、拡張ページテーブル（４１、４２）を変更することにより、仮想計算機６０から仮想計算機７０へデータ（メモリページ）を送信する。
【００４４】
図６は、第３の実施形態に係る仮想計算機の仮想メモリとホスト計算機の物理メモリとのマッピングの状態を説明するための図である。図６の左上に記載してある仮想計算機６０の仮想メモリ６２の左側にある１００と３００は、仮想メモリ６２のアドレスである。送信メモリ領域に対応する送信メモリページがアドレス３００より始まっていることを示している。
【００４５】
図６の中央上に記載の拡張ページテーブル４１は、仮想計算機６０の仮想メモリ６２のページと、メモリ３２のページとの対応を示す表形式のデータであり、メモリ３２上に記憶される。拡張ページテーブルのレコード（行）は、仮想メモリ６２を構成するページの論理アドレスであるＧＰＡ（Guest Physical Address）４１１と、メモリ３２を構成するページの物理アドレスであるＰＡ（Physical Address）４１２との属性（列）を含む。ＧＰＡ４１１は、仮想計算機６０から見ると物理アドレスであるが、ハイパーバイザ２０Ａから見ると論理アドレス（仮想計算機６０に見せる仮想の物理アドレス）となる。レコード４１９は、ＧＰＡが３００である仮想メモリ６２の送信メモリページが、ＰＡが４４０であるメモリ３２にマッピングされており、送信メモリページのデータは、ＰＡが４４０から始まるメモリ３２のページ（図６ではホスト物理メモリページと記載）に格納されていることを示す。レコード４１８についても、同様である。
【００４６】
図６の中央下に記載の拡張ページテーブル４２は、仮想計算機７０の仮想メモリ７２のページと、メモリ３２のページとの対応を示す表形式のデータであり、仮想計算機６０の拡張ページテーブル４１と同様の構成である。レコード４２９は、ＧＰＡが４２０である仮想メモリ７２のページが、ＰＡが９００であるメモリ３２のページにマッピングされていることを示す。
【００４７】
図７は、第３の実施形態に係る仮想計算機６０から仮想計算機７０へのメモリマッピング変更によるデータ送信処理の流れを示すシーケンス図である。図７を参照しながら、ハイパーバイザ２０Ａのメモリマッピング部２２が、仮想計算機６０の仮想メモリ６２上のページと、仮想計算機７０の仮想メモリ７２のページとのメモリマッピングを変更することによってデータ送信を実現する処理を説明する。
【００４８】
ステップＳ３０１において、送信側である仮想計算機６０がデータを送信する領域である送信メモリページを確保する。図６は、この時点でのメモリマッピングの状態を示しており、仮想計算機６０のアドレス３００から始まる仮想メモリ６２のメモリページが、ホスト計算機１０Ａのアドレス４４０から始まるメモリ３２のメモリページにマッピングされていることを示す。
【００４９】
ステップＳ３０２において、仮想計算機６０は、送信メモリページに送信データをセットする。セットされたデータは、アドレス４４０から始まるメモリ３２のメモリページに格納される。
ステップＳ３０３において、仮想計算機６０が、ＨＶＣを用いて送信メモリページをハイパーバイザ２０に通知してデータ送信を要求する。詳しくは、仮想計算機６０は、送信メモリページのアドレスを仮想ＣＰＵ６１の特定のレジスタにセットして、送信メモリページを通知してデータ送信を要求するＨＶＣを実行する。ハイパーバイザ２０は、メモリマッピングの変更処理を実行するメモリマッピング部２２にＨＶＣを転送する。
【００５０】
ステップＳ３０４において、メモリマッピング部２２は、受信要求を受信側の仮想計算機７０に割込みを用いて通知する。
【００５１】
ステップＳ３０５において、受信要求の割込みが発生した仮想計算機７０は、受信メモリページを確保する。図８は、第３の実施形態に係る、仮想計算機７０が受信メモリページを確保した時点での、仮想計算機の仮想メモリとホスト計算機の物理メモリとのマッピングの状態を示す図である。仮想計算機７０の拡張ページテーブル４２のレコード４２８が示すように、仮想メモリ７２上のアドレス１２０から始まる受信メモリページは、メモリ３２上のアドレス７００から始まるページ（図８ではホスト物理メモリページと記載）にマッピングされている。
【００５２】
ステップＳ３０６において、仮想計算機７０は、受信メモリページのアドレスを特定のレジスタにセットして、受信メモリページを通知するＨＶＣを実行する。
【００５３】
ステップＳ３０７において、メモリマッピング部２２が、メモリマッピングを変更する。詳しくは、メモリマッピング部２２が、以下の処理を行う。（１）メモリ３２上に新たにメモリページを確保する。（２）仮想計算機６０の拡張ページテーブル４１の送信メモリページに対応するレコード４１９のＰＡ４１２を（１）で確保したメモリページの物理アドレスに変更する。（３）仮想計算機７０の拡張ページテーブル４２の受信メモリページに対応するレコード４２８のＰＡ４２２を（２）の変更前の送信メモリページの論理アドレスのマッピング先の物理アドレスに変更する。図９は、第３の実施形態に係る、メモリマッピングを変更した時点での、仮想計算機の仮想メモリとホスト計算機の物理メモリとのマッピングの状態を示す図である。図８と比較すると、レコード４１９のＰＡ４１２が４４０から３４０に、レコード４２８のＰＡ４２２が７００から４４０に変更されている。受信メモリページが、送信メモリページがマッピングされていたアドレス４４０から始まるページへマッピングされるように変更されている。
【００５４】
ステップＳ３０８において、メモリマッピング部２２が、マッピングの変更が完了したことを仮想計算機６０に割込みを用いて通知する。
ステップＳ３０９において、メモリマッピング部２２が、マッピングの変更が完了したことを仮想計算機７０に割込みを用いて通知する。
【００５５】
第３の実施形態において、仮想計算機６０がアクセスしていたホスト計算機１０Ａのメモリ３２のページが、仮想計算機７０がアクセスするページに切り替わることにより、仮想計算機６０から仮想計算機７０にデータが送信される。メモリのコピーがなく、高速にデータ送信が可能である。さらに、メモリを共有しているわけではなく、受信側の仮想計算機７０のデータが、送信側の仮想計算機６０からアクセスされることはない。
【００５６】
≪第３の実施形態の変形例１：ＨＶＣの返答を用いたコピー完了通知≫
上記した第３の実施形態では、メモリマッピング部２２が、マッピングの変更が完了したことを仮想計算機７０に通知するのに、割込みを用いている（ステップＳ３０９参照）。割込みの替わりに、メモリマッピング部２２は、受信メモリページを通知するＨＶＣ（ステップＳ３０６参照）の返答を用いてもよい。詳しくは、メモリマッピング部２２が、ステップＳ３０６においてＨＶＣにより受信メモリページの通知を受け、続いて、ステップＳ３０７のメモリマッピングの変更処理を実行して、ステップＳ３０６のＨＶＣの返答としてマッピング変更完了を仮想計算機７０に通知する。
【００５７】
≪第３の実施形態の変形例２：複数ページを用いたメモリマッピング変更によるデータ送信≫
上記の第３の実施形態では、送信対象となるページは１つであったが、複数ページであってもよい。図１０は、第３の実施形態の変形例２に係る仮想計算機６０と仮想計算機７０との複数のメモリページのマッピング変更によるデータ送信処理の流れを示すシーケンス図である。
【００５８】
ステップＳ３２１において、送信側である仮想計算機６０がデータを送信する領域である連続する複数の送信メモリページを確保する。
ステップＳ３２２において、仮想計算機６０は、送信メモリページに送信データをセットする。
【００５９】
ステップＳ３２３において、仮想計算機６０が、ＨＶＣを用いて送信メモリページをハイパーバイザ２０に通知してデータ送信を要求する。詳しくは、仮想計算機６０は、送信メモリページのアドレスとページ数を仮想ＣＰＵ６１の特定のレジスタにセットして、送信メモリページを通知するＨＶＣを実行する。ハイパーバイザ２０は、メモリマッピングの変更処理を実行するメモリマッピング部２２にＨＶＣを転送する。
【００６０】
ステップＳ３２４において、メモリマッピング部２２は、受信要求を受信側の仮想計算機７０に割込みを用いて通知する。
ステップＳ３２５において、割込みが発生した仮想計算機７０は、受信メモリページを確保する。仮想計算機７０は、連続する複数の受信メモリページを確保してもよい。
【００６１】
ステップＳ３２６において、仮想計算機７０は、受信メモリメモリのアドレスとページ数とを特定のレジスタにセットして、受信メモリページを通知するＨＶＣを実行する。メモリマッピング部２２は、送信メモリページのページ数と受信メモリページのページ数を比較する。ここでは、送信メモリページのページ数と受信メモリページのページ数が異なるとして説明を続ける。同じであるならば、ステップＳ３２９に進む。
【００６２】
メモリマッピング部２２は、ＨＶＣの返答として、送信メモリページのページ数を返す。
ステップＳ３２７において、仮想計算機７０は、ＨＶＣの返答にあったページ数の連続する受信メモリページを確保する。
【００６３】
ステップＳ３２８において、仮想計算機７０は、受信メモリメモリのアドレスとページ数とをレジスタにセットして、受信メモリページを通知するＨＶＣを実行する。
ステップＳ３２９において、メモリマッピング部２２が、メモリマッピングを変更する。詳しくは、メモリマッピング部２２は、ステップＳ３０７と同様に、送信側の仮想計算機６０用の拡張ページテーブル４１の送信メモリページのレコードのＰＡ４１２を、新たなメモリページのアドレスに変更し、受信側の仮想計算機７０用の拡張ページテーブル４２の受信メモリページのレコードのＰＡ４２２を、送信メモリページがマッピングされていたメモリ３２上のページのアドレスに変更する。メモリマッピング部２２は、連続する元の送信メモリページが、連続する受信メモリページにマッピングされるように、拡張ページテーブル４２の複数のレコードのＰＡ４２２を変更する。
【００６４】
ステップＳ３３０において、メモリマッピング部２２が、マッピングの変更が完了したことを仮想計算機６０に割込みを用いて通知する。
ステップＳ３３１において、メモリマッピング部２２が、マッピングの変更が完了したことを仮想計算機７０に割込みを用いて通知する。
【００６５】
上記した第３の実施形態の変形例２では、メモリマッピング部２２が、マッピングの変更が完了したことを仮想計算機７０に通知するのに、割込みを用いている（ステップＳ３３１参照）。割込みの替わりに、メモリマッピング部２２は、受信メモリページを通知するＨＶＣ（ステップＳ３２８参照）の返答を用いてもよい。詳しくは、メモリマッピング部２２が、ステップＳ３２８においてＨＶＣにより受信メモリページの通知を受け、続いて、ステップＳ３２９のメモリマッピングの変更処理を実行して、ステップＳ３２８のＨＶＣの返答としてマッピング変更完了を仮想計算機７０に通知する。
【００６６】
≪第４の実施形態：情報フロー制御を伴った仮想メモリ間のコピーによるデータ送信≫
第１〜第３の実施形態では、仮想計算機６０から仮想計算機７０へデータを送信していた。逆に、仮想計算機７０から仮想計算機６０へ送信することも可能であり、両方向の通信が可能である。しかしながら、仮想計算機（６０、７０）が保持する情報の機密度や仮想計算機（６０、７０）の用途によっては、片方向の通信のみに制限したい場合もある。
【００６７】
例えば、仮想計算機７０が機密度の高い情報を処理し、仮想計算機６０が一般レベルの情報を処理する場合には、仮想計算機７０から仮想計算機６０へのデータ送信を禁止することにより、仮想計算機６０へ機密度の高い情報が漏洩することを防止できる。また、機密度の高さに関係なく、マルウェアのような危険なプログラムが動作する計算機は、受信専用にし、データ送信できないようにしておけば、他の計算機にマルウェアが拡散することが無いようにできる。以下に、データ送信の方向を制限した仮想メモリ間のコピーによるデータ送信を説明する。
【００６８】
図１１は、第４の実施形態に係るストレージ３３上に格納される仮想計算機データベース５１のデータ構成を例示する図である。仮想計算機データベース５１は表形式のデータであって、１つのレコード（行）は１つの仮想計算機（６０、７０）を表し、仮想計算機ＩＤ５１１、ハードウェア設定５１２、認証情報５１３の属性（列）を含む。
【００６９】
仮想計算機ＩＤ５１１は、仮想計算機（６０、７０）の識別情報（ＩＤ、Identifire）である。
ハードウェア設定５１２は、仮想計算機（６０、７０）のハードウェアの設定情報であり、仮想ＣＰＵ（６１、７１）のコア数や仮想メモリ（６２、７２）のサイズ、仮想ＮＩＣ（不図示）のＭＡＣ（Media Access Control）アドレス、ストレージ３３の領域（セクタ）の中で仮想計算機（６０、７０）の仮想ストレージ（不図示）に割り当てられる領域を示す情報などが含まれる。
【００７０】
認証情報５１３は、当該レコードとその内容の認証情報であり、仮想計算機ＩＤ５１１とハードウェア設定５１２とのハッシュ値またはデジタル署名である。認証情報５１３は、仮想計算機ＩＤ５１１とハードウェア設定５１２の他に、仮想ストレージ上のブートローダやゲストＯＳ（６５、７５）のカーネルなどを含んだデータのハッシュ値またはデジタル署名であってもよい。
【００７１】
仮想計算機（６０、７０）が起動する前に、ハイパーバイザ（２０、２０Ａ）は、ハードウェア設定やブートローダ、ゲストＯＳのカーネルを認証情報５１３のハッシュ値またはデジタル署名と照合し、照合に失敗した場合には、仮想計算機（６０、７０）の起動を中止する。
【００７２】
レコード５１９は、仮想計算機ＩＤ５１１が「ＶＭ＃６０」である仮想計算機の仮想ＣＰＵのコア数は１であり、仮想ＮＩＣのＭＡＣアドレスは「３Ｆ３４」で始まることを示している。
【００７３】
図１２は、第４の実施形態に係るストレージ３３上に格納される情報フロー制御管理データベース５２のデータ構成を例示する図である。情報フロー制御管理データベース５２は、表形式のデータであって、１つのレコード（行）は許可された仮想計算機間のデータ送信の方向を示し、送信元５２１と送信先５２２の属性（列）を含む。送信元５２１は許可されたデータ送信方向のデータ送信元である仮想計算機の仮想計算機ＩＤ５１１であり、送信先５２２は許可されたデータ送信方向のデータ送信先である仮想計算機の仮想計算機ＩＤ５１１である。
【００７４】
レコード５２９は、「ＶＭ＃６０」から「ＶＭ＃７０」へのデータ送信が可能であることを示す。情報フロー制御管理データベース５２には、許可されたデータ送信方向のみが含まれ、許されないデータ送信の方向は含まれない。
【００７５】
図１３は、第４の実施形態に係る、情報フロー制御を伴った仮想計算機６０から仮想計算機７０へのデータ送信処理の流れを示すシーケンス図である。図１３を参照しながら、ハイパーバイザ２０のメモリコピー部２１が、仮想計算機６０の仮想メモリ６２にあるデータを、仮想計算機７０の仮想メモリ７２にコピーする処理を説明する。
【００７６】
ステップＳ４０１〜Ｓ４０３は、図４記載のステップＳ２０１〜Ｓ２０３とそれぞれ同様である。
ステップＳ４０４において、ハイパーバイザ２０からステップＳ４０３のＨＶＣを転送されたメモリコピー部２１は、仮想計算機７０へのデータ送信が可能か、情報フロー制御管理データベース５２を参照して判断する。詳しくは、メモリコピー部２１は、送信元５２１が仮想計算機６０の仮想計算機ＩＤであり、送信先５２２が仮想計算機７０の仮想計算機ＩＤであるレコードを検索する。続いて、メモリコピー部２１は、当該レコードが存在すれば送信可能と判断してステップＳ４０６に進み、当該レコードが存在しなければ送信不可と判断してステップＳ４０５に進む。
【００７７】
ステップＳ４０５において、メモリコピー部２１は、送信不可であることを仮想計算機６０に割込みを用いて通知する。仮想計算機６０で割込みが発生して、本データ送信処理を終える。
ステップＳ４０６〜Ｓ４１１は、図４記載のステップＳ２０４〜Ｓ２０９とそれぞれ同様である。
【００７８】
このようにすることで、情報フロー制御管理データベース５２にレコードが存在し、許可された送信元５２１の仮想計算機から送信先５２２の仮想計算機のみのデータ送信が可能となる。情報フロー制御管理データベース５２にレコードが存在しない、送信元５２１の仮想計算機から送信先５２２の仮想計算機へのデータ送信は禁止される。
【００７９】
第４の実施形態において、メモリコピー部２１は、ステップＳ４０４においてデータ送信の可否を判断していた。これとは異なり、メモリコピー部２１は、データをコピーする前に、例えば、ステップＳ４０８の受信メモリ領域を通知するＨＶＣの後に、データ送信の可否を判断してもよい。
【００８０】
ステップＳ４０４において、メモリコピー部２１が送信不可と判断した場合には、ステップＳ４０５において、割込みを用いて仮想計算機６０に通知している。割込みの替わりに、メモリコピー部２１は、送信メモリ領域を通知するＨＶＣ（ステップＳ４０３参照）の返答を用いてもよい。詳しくは、メモリコピー部２１が、ステップＳ４０３においてＨＶＣにより送信メモリ領域の通知を受け、続いて、ステップＳ４０４において送信不可の場合には、ステップＳ４０３のＨＶＣの返答として送信不可を仮想計算機６０に通知する。
【００８１】
≪第５の実施形態：情報フロー制御を伴ったメモリマッピング変更によるデータ送信≫
メモリマッピング変更によるデータ送信においても、第４の実施形態と同様にデータの送信方向を制限することができる。第４の実施形態と同様に、ストレージ３３上に仮想計算機データベース５１（図１１参照）と情報フロー制御管理データベース５２（図１２参照）とが格納される。
【００８２】
図１４は、第５の実施形態に係る、情報フロー制御を伴った仮想計算機６０から仮想計算機７０へのメモリマッピング変更によるデータ送信処理の流れを示すシーケンス図である。図１４を参照しながら、ハイパーバイザ２０Ａのメモリマッピング部２２が、仮想計算機６０の仮想メモリ６２上のページと、仮想計算機７０の仮想メモリ７２のページとのメモリマッピングを変更することによってデータ送信を実現する処理を説明する。
【００８３】
ステップＳ５０１〜Ｓ５０３は、図７記載のステップＳ３０１〜Ｓ３０３と同様である。
ステップＳ５０４において、ハイパーバイザ２０ＡからステップＳ５０３のＨＶＣを転送されたメモリマッピング部２２は、仮想計算機７０へのデータ送信が可能か、情報フロー制御管理データベース５２を参照して判断する。詳しくは、メモリマッピング部２２は、送信元５２１が仮想計算機６０の仮想計算機ＩＤであり、送信先５２２が仮想計算機７０の仮想計算機ＩＤであるレコードを検索する。続いて、メモリマッピング部２２は、当該レコードが存在すれば送信可能と判断してステップＳ５０６に進み、当該レコードが存在しなければ送信不可と判断してステップＳ５０５に進む。
【００８４】
ステップＳ５０５において、メモリマッピング部２２は、送信不可であることを仮想計算機６０に割込みを用いて通知する。仮想計算機６０で割込みが発生して、本データ送信処理を終える。
ステップＳ５０６〜Ｓ５１１は、図７に記載のステップＳ３０４〜Ｓ３０９と同様である。
【００８５】
このようにすることで、情報フロー制御管理データベース５２にレコードが存在し、許可された送信元５２１の仮想計算機から送信先５２２の仮想計算機のみのデータ送信が可能となる。情報フロー制御管理データベース５２にレコードが存在しない、送信元５２１の仮想計算機から送信先５２２の仮想計算機へのデータ送信は禁止される。
【００８６】
第５の実施形態において、メモリマッピング部２２は、ステップＳ５０４においてデータ送信の可否を判断している。これとは異なり、メモリマッピング部２２は、メモリマッピングを変更する前に、例えば、ステップＳ５０８の受信メモリページを通知するＨＶＣの後に、データ送信の可否を判断してもよい。
ステップＳ５０４において、メモリマッピング部２２が送信不可と判断した場合には、ステップＳ５０５において、割込みを用いて仮想計算機６０に通知している。割込みの替わりに、メモリマッピング部２２は、送信メモリページを通知するＨＶＣ（ステップＳ５０３参照）の返答を用いてもよい。
【００８７】
≪変形例≫
上記した実施形態において、仮想計算機（６０、７０）が送信メモリ領域や受信メモリ領域などをハイパーバイザ（２０、２０Ａ）に通知するＨＶＣのパラメータは、特定のレジスタにセットしていた。パラメータをメモリ上に格納して、当該メモリのアドレスを特定のレジスタにセットするようにしてもよい。また、ハイパーバイザ（２０、２０Ａ）は、当該メモリに領域不足、送信メモリページのページ数（図１０のステップＳ３２６参照）、コピー完了、コピーしたメモリサイズなどのＨＶＣ完了時の結果を格納するようにしてもよい。
【００８８】
また、ハイパーバイザ（２０、２０Ａ）が送信要求や受信要求などを仮想計算機（６０、７０）に通知する場合、それぞれの種別の割込み（割込みベクタ）を用いて通知していた。割込みの種別（割込みベクタ）は１つであり、送信要求や受信要求などの通知の種別は、割込みのパラメータとして特定のレジスタを介して通知してもよい。または、通知の種別をメモリ上に格納して、当該メモリのアドレスを特定のレジスタにセットするようにしてもよい。また、仮想計算機（６０、７０）がＨＶＣを用いて、直前の割込み種別を取得してもよい。
【００８９】
上記した実施形態において、送信側の仮想計算機６０が送信したデータを受信側の仮想計算機７０は、そのまま受信していた。データをそのまま送受信するのではなく、ハイパーバイザ２０が変換して、仮想計算機７０が受信するようにしてもよい。変換の例としては、暗号化、復号、エンディアン（バイトオーダ）変換、データ圧縮、データ伸長、エンコード、デコードおよびこれらの組み合せなどがあるが、これらに限定するものではない。暗号化や復号に必要な鍵は、ハイパーバイザ２０のみがアクセスできるようにしておき、専らハイパーバイザ２０が暗号化や復号するようにしてもよい。仮想計算機（６０、７０）が、インターネットなどの外部ネットワークに接続されていて、外部から攻撃されたりマルウェアに感染したりする恐れがある場合には、仮想計算機（６０、７０）に鍵を置かないことで、データの安全性が確保できるようになる。
【００９０】
図３に示した第１の実施形態の変形例３において、受信メモリ領域の不足やコピー完了をハイパーバイザ２０は割込みを用いて受信側の仮想計算機７０に通知していた（ステップＳ１２８とステップＳ１３３参照）。割込みの替わりに、ハイパーバイザ２０は、受信メモリ領域の特定の部分を用いて通知するようにしてもよい。例えば、受信メモリ領域の先頭の１バイトが、１であれば受信メモリ領域の不足、２であればコピー完了として、ハイパーバイザ２０が仮想計算機７０に通知してもよい。この場合、データは２バイト目以降にコピーされる。他の実施例や変形例においても、メモリ領域の特定部分を介して、ハイパーバイザ２０から仮想計算機（６０、７０）に、送信要求、受信要求、コピー完了などを通知してもよい。
【００９１】
上記した実施形態では、送信側は仮想計算機６０、受信側は仮想計算機７０と固定されていた。仮想計算機（６０、７０）が通信相手を指定できるようにしてもよい。例えば、図４に示した第２の実施形態において、送信側の仮想計算機６０が受信側の仮想計算機を指定できるようにしてもよい。指定の方法としては、送信メモリ領域を通知するＨＶＣ（ステップＳ２０３）のパラメータとして受信側の仮想計算機を指定するようにしてもよい。この場合、ハイパーバイザ２０は、受信側の仮想計算機に、受信要求の割込み（ステップＳ２０４）のパラメータや割込みの種別（割込みベクタ）、受信メモリ領域の特定部分を介して送信側の仮想計算機を通知するようにしてもよい。
【００９２】
また、受信側の仮想計算機７０が、通信相手を指定できるようにしてもよい。図２に示した第１の実施形態において、仮想計算機７０が受信メモリ領域を通知するＨＶＣ（ステップＳ１０２）のパラメータないしは受信メモリ領域の特定部分に送信側の仮想計算機をセットしてもよい。
【００９３】
上記した実施形態やその変形例では、送信側の仮想計算機と受信側の仮想計算機とは、それぞれ１つだった。これに対して、１つの送信側の仮想計算機が、複数の仮想計算機にデータ送信できるようにしてもよい。第２の実施形態におけるメモリコピーによるデータ送信では、メモリコピー部２１が、送信メモリ領域から複数の受信側の仮想計算機のそれぞれの受信メモリ領域にデータをコピーする。また、第３の実施形態におけるメモリマッピング変更によるデータ送信では、メモリマッピング部２２が、複数の受信側仮想計算機のそれぞれの受信メモリページを変更前の送信メモリページに対応するホスト物理メモリページにマッピングする。
【００９４】
上記した実施形態やその変形例では、仮想計算機（６０、７０）上ではゲストＯＳ（６５、７５）が稼働し、その上でアプリケーションが稼働している。ゲストＯＳがなく、仮想計算機（６０、７０）上で直接アプリケーションが稼働する場合でも、アプリケーションがＨＶＣを実行して、割込みを処理することで、仮想メモリ（６２、７２）にセットしたデータを送信することができる。
【００９５】
≪効果≫
第１および第２の実施形態のハイパーバイザ２０が、メモリ３２上の送信メモリ領域から受信メモリ領域へデータをコピーすることで、仮想計算機６０から仮想計算機７０へのデータ送信を実現している。従来のデータ送信よりデータのコピー回数を削減しており、高速に送信できる。第３の実施形態のハイパーバイザ２０Ａが、メモリマッピングを変更してデータ送信した場合には、コピーしておらず、さらに高速に送信できる。
【００９６】
第４および第５の実施形態では、データの送信方向は一方向に限定されており、機密度の高い情報やマルウェアのような危険なデータの流出を未然に防ぐことができる。
【符号の説明】
【００９７】
１０，１０Ａ  ホスト計算機
２０    ハイパーバイザ
２１    メモリコピー部
２２    メモリマッピング部
３１    ＣＰＵ
３２    メモリ
４１，４２  拡張ページテーブル
５１    仮想計算機データベース
５２    情報フロー制御管理データベース
６０    （送信側）仮想計算機
６１，７１  仮想ＣＰＵ
６２，７２  仮想メモリ
７０    （受信側）仮想計算機
【図１】
2019012958.tif 000003
【図２】
2019012958.tif 000004
【図３】
2019012958.tif 000005
【図４】
2019012958.tif 000006
【図５】
2019012958.tif 000007
【図６】
2019012958.tif 000008
【図７】
2019012958.tif 000009
【図８】
2019012958.tif 000010
【図９】
2019012958.tif 000011
【図１０】
2019012958.tif 000012
【図１１】
2019012958.tif 000013
【図１２】
2019012958.tif 000014
【図１３】
2019012958.tif 000015
【図１４】
2019012958.tif 000016
【国際調査報告】
2019012958.tif 000017
2019012958.tif 000018
2019012958.tif 000019