(19)【発行国】日本国特許庁(JP)
(12)【公報種別】公開特許公報(A)
(11)【公開番号】P2023064327
(43)【公開日】2023-05-11
(54)【発明の名称】仮想マシンコンテナ装置、仮想マシンコンテナの制御方法、プログラム及び記録媒体
(51)【国際特許分類】
G06F 9/455 20180101AFI20230501BHJP
【FI】
G06F9/455 150
【審査請求】未請求
【請求項の数】10
【出願形態】OL
(21)【出願番号】P 2021174546
(22)【出願日】2021-10-26
(71)【出願人】
【識別番号】000232092
【氏名又は名称】NECソリューションイノベータ株式会社
(74)【代理人】
【識別番号】100115255
【弁理士】
【氏名又は名称】辻丸 光一郎
(74)【代理人】
【識別番号】100201732
【弁理士】
【氏名又は名称】松縄 正登
(74)【代理人】
【識別番号】100154081
【弁理士】
【氏名又は名称】伊佐治 創
(72)【発明者】
【氏名】木村 親弘
(57)【要約】 (修正有)
【課題】コンテナ型仮想化環境においてホストOSとは異なるOS用のコンテナを実行可能な仮想マシンコンテナ装置を提供する。
【解決手段】仮想マシンコンテナ装置10において、仮想マシンモニタ部12は、仮想マシンコンテナ部11にロードされたアプリケーションのプロセスが生成するシステムコールを取得する。システムコール制御部13は、仮想マシンモニタ部が取得したシステムコールによりアプリケーションのOS及びホストOSカーネル部14のOSの異同を判断し、異同の判断において同じと判断した場合は、ホストOSカーネル部14が、システムコールを実行し、実行結果をプロセスに返却する。異同の判断において異なると判断した場合は、OSカーネルエミュレート部15が、システムコールをアプリケーションのOSに応じてエミュレートし、エミュレートの実行結果をプロセスに返却する。
【選択図】
図1
【特許請求の範囲】
【請求項1】
仮想マシンコンテナ部、仮想マシンモニタ部、システムコール制御部、ホストOSカーネル部、及びOSカーネルエミュレート部を含み、
前記仮想マシンコンテナ部は、ロードされたアプリケーションを実行可能であり、
前記仮想マシンモニタ部は、前記アプリケーションのプロセスが生成するシステムコールを取得可能であり、
前記システムコール制御部は、前記仮想マシンモニタ部が取得した前記システムコールにより前記アプリケーションのOS及び前記ホストOSカーネル部のOSの異同を判断し、
前記異同の判断において同じと判断した場合、前記ホストOSカーネル部は、前記システムコールを実行し、前記実行結果を前記プロセスに返却し、
前記異同の判断において異なると判断した場合、前記OSカーネルエミュレート部は、前記システムコールを前記アプリケーションのOSに応じてエミュレートし、前記エミュレートの実行結果を前記プロセスに返却する、
仮想マシンコンテナ装置。
【請求項2】
前記システムコール制御部は、前記異同の判断において、前記アプリケーションのOSと前記ホストOSカーネル部のOSの互換性を判断し、前記アプリケーションのOSの一部に前記ホストOSカーネル部のOSとの非互換性があり、その他の部分は互換性があると判断した場合、
前記ホストOSカーネル部は、前記システムコールの前記互換性の部分を実行し、前記実行結果を前記プロセスに返却し、
前記OSカーネルエミュレート部は、前記システムコールの前記非互換性の部分を前記アプリケーションのOSに応じてエミュレートし、前記エミュレートの実行結果を前記プロセスに返却する、
請求項1記載の仮想マシンコンテナ装置。
【請求項3】
さらに、通信部を含み、
前記通信部は、外部ネットワークを介して他の装置と通信可能であり、
前記システムコール制御部は、前記異同の判断において、前記アプリケーションのOSが前記ホストOSカーネル部のOSと異なり、かつ前記OSカーネルエミュレート部でのエミュレートが不可と判断した場合、前記通信部を介して、前記アプリケーションのOSを実行可能な前記他の装置に前記システムコールを実行させ、前記実行結果を前記プロセスに返却させる、
請求項1又は2記載の仮想マシンコンテナ装置。
【請求項4】
前記仮想マシンコンテナ部は、ハードウエア仮想化機能により生成されたものである、
請求項1から3のいずれか一項に記載の仮想マシンコンテナ装置。
【請求項5】
仮想マシンコンテナ工程、仮想マシンモニタ工程、システムコール制御工程、ホストOSカーネル工程、及びOSカーネルエミュレート工程を含み、
前記仮想マシンコンテナ工程は、仮想マシンコンテナにロードされたアプリケーションを実行し、
前記仮想マシンモニタ工程は、前記アプリケーションのプロセスが生成するシステムコールを取得し、
前記システムコール制御工程は、前記仮想マシンモニタ工程が取得した前記システムコールにより前記アプリケーションのOS及び前記ホストOSカーネル工程が取り扱うOSの異同を判断し、
前記異同の判断において同じと判断した場合、前記ホストOSカーネル工程は、前記システムコールを実行し、前記実行結果を前記プロセスに返却し、
前記異同の判断において異なると判断した場合、前記OSカーネルエミュレート工程は、前記システムコールを前記アプリケーションのOSに応じてエミュレートし、前記エミュレートの実行結果を前記プロセスに返却する、
仮想マシンコンテナの制御方法。
【請求項6】
前記システムコール制御工程は、前記異同の判断において、前記アプリケーションのOSと前記ホストOSカーネル工程が取り扱うOSの互換性を判断し、前記アプリケーションのOSの一部に前記ホストOSカーネル工程が取り扱うOSとの非互換性があり、その他の部分は互換性があると判断した場合、
前記ホストOSカーネル工程は、前記システムコールの前記互換性の部分を実行し、前記実行結果を前記プロセスに返却し、
前記OSカーネルエミュレート工程は、前記システムコールの前記非互換性の部分を前記アプリケーションのOSに応じてエミュレートし、前記エミュレートの実行結果を前記プロセスに返却する、
請求項5記載の仮想マシンコンテナの制御方法。
【請求項7】
前記システムコール制御工程は、前記異同の判断において、前記アプリケーションのOSが前記ホストOSカーネル工程が取り扱うOSと異なり、かつ前記OSカーネルエミュレート工程でのエミュレートが不可と判断した場合、通信部を介して、前記アプリケーションのOSを実行可能な他の装置に前記システムコールを実行させ、前記実行結果を前記プロセスに返却させる、
請求項5又は6記載の仮想マシンコンテナの制御方法。
【請求項8】
前記仮想マシンコンテナ工程が取り扱う前記仮想マシンコンテナは、ハードウエア仮想化機能により生成されたものである、
請求項5から7のいずれか一項に記載の仮想マシンコンテナの制御方法。
【請求項9】
コンピュータに、仮想マシンコンテナ手順、仮想マシンモニタ手順、システムコール制御手順、ホストOSカーネル手順、及びOSカーネルエミュレート手順を含む手順を実行させるためのプログラム;
前記仮想マシンコンテナ手順は、仮想マシンコンテナにロードされたアプリケーションを実行し、
前記仮想マシンモニタ手順は、前記アプリケーションのプロセスが生成するシステムコールを取得し、
前記システムコール制御手順は、前記仮想マシンモニタ手順が取得した前記システムコールにより前記アプリケーションのOS及び前記ホストOSカーネル手順が取り扱うOSの異同を判断し、
前記異同の判断において同じと判断した場合、前記ホストOSカーネル手順は、前記システムコールを実行し、前記実行結果を前記プロセスに返却し、
前記異同の判断において異なると判断した場合、前記OSカーネルエミュレート手順は、前記システムコールを前記アプリケーションのOSに応じてエミュレートし、前記エミュレートの実行結果を前記プロセスに返却する。
【請求項10】
前記システムコール制御手順は、前記異同の判断において、前記アプリケーションのOSと前記ホストOSカーネル手順が取り扱うOSの互換性を判断し、前記アプリケーションのOSの一部に前記ホストOSカーネル手順が取り扱うOSとの非互換性があり、その他の部分は互換性があると判断した場合、
前記ホストOSカーネル手順は、前記システムコールの前記互換性の部分を実行し、前記実行結果を前記プロセスに返却し、
前記OSカーネルエミュレート手順は、前記システムコールの前記非互換性の部分を前記アプリケーションのOSに応じてエミュレートし、前記エミュレートの実行結果を前記プロセスに返却する、
請求項9記載のプログラム。
【発明の詳細な説明】
【技術分野】
【0001】
本発明は、仮想マシンコンテナ装置、仮想マシンコンテナの制御方法、プログラム及び記録媒体に関する。
【背景技術】
【0002】
OS(オペレーティングシステム)を実現するH/W(ハードウエア)環境を仮想化する技術として、仮想マシン型仮想化が知られている。前記仮想マシン型仮想化では、H/W(ハードウエア)が提供する仮想化機能を用いて仮想マシン環境を構成する。また、前記仮想マシン型仮想化では、各仮想マシン内でゲストOSを起動する。そのため、前記仮想マシン型仮想化では、ホストOSにかかわらず、各仮想マシン内で任意のOSを実行することができる。
【0003】
また、OSが提供するプロセス実行環境を仮想化する技術として、コンテナ型仮想化が知られている(特許文献1)。前記コンテナ型仮想化では、ホストOSの機能を用いてアプリケーションの実行環境であるコンテナを構成する。各コンテナは、独立したリソースを持つ。
【0004】
さらに、コンテナ型仮想化と同様の実行環境を有する技術として、Unikernelコンテナ型仮想化も知られている。前記Unikernelコンテナ型仮想化では、OS機能をエミュレーションするライブラリ(エミュレーションライブラリともいう)をアプリケーションと結合してコンテナ内に配置する。そして、エミュレーションライブラリがゲストOSのシステムコール機能をエミュレーションする。また、前記Unikernelコンテナ型仮想化では、必要に応じて、ゲストOSのシステムコールをホストOSのシステムコールに変換して実行する。
【先行技術文献】
【特許文献】
【0005】
【発明の概要】
【発明が解決しようとする課題】
【0006】
しかしながら、前記仮想マシン型仮想化では、フルスペックのゲストOSを動かすため多くのリソースが必要になり、起動に時間がかかるという問題がある。これに対し、前記コンテナ型仮想化では、各コンテナはOS機能を持たないので、少ないリソースで動作し、高速に起動できる。しかしながら、前記コンテナ型仮想化では、複数のコンテナが同一のホストOSを共有しているので、ホストOSと異なるOS用のコンテナの処理を実行できないという問題がある。前記Unikernelコンテナ型仮想化は、前述のエミュレーションにより、前記コンテナ型仮想化の低リソース、高速起動のメリットを保ちつつ、ホストOSと異なるOSのアプリケーションを実行できる。しかしながら、前記Unikernelコンテナ型仮想化では、ゲストOS毎にエミュレーションライブラリの開発が必要になる。また、コンテナで実行するアプリケーションの改変、ライブラリとの結合が必要で、既存のアプリケーションをそのままコンテナ内で実行できないという問題がある。同様に、市販のアプリケーションが実行できないという問題もある。
【0007】
そこで、本発明は、コンテナ型仮想化環境において、ホストOSとは異なるOS用のコンテナを実行可能な仮想マシンコンテナ装置、仮想マシンコンテナの制御方法、プログラム及び記録媒体を提供することを目的とする。
【課題を解決するための手段】
【0008】
前記目的を達成するために、本発明の仮想マシンコンテナ装置は、
仮想マシンコンテナ部、仮想マシンモニタ部、システムコール制御部、ホストOSカーネル部、及びOSカーネルエミュレート部を含み、
前記仮想マシンコンテナ部は、ロードされたアプリケーションを実行可能であり、
前記仮想マシンモニタ部は、前記アプリケーションのプロセスが生成するシステムコールを取得可能であり、
前記システムコール制御部は、前記仮想マシンモニタ部が取得した前記システムコールにより前記アプリケーションのOS及び前記ホストOSカーネル部のOSの異同を判断し、
前記異同の判断において同じと判断した場合、前記ホストOSカーネル部は、前記システムコールを実行し、前記実行結果を前記プロセスに返却し、
前記異同の判断において異なると判断した場合、前記OSカーネルエミュレート部は、前記システムコールを前記アプリケーションのOSに応じてエミュレートし、前記エミュレートの実行結果を前記プロセスに返却する、装置である。
【0009】
本発明の仮想マシンコンテナの制御方法は、
仮想マシンコンテナ工程、仮想マシンモニタ工程、システムコール制御工程、ホストOSカーネル工程、及びOSカーネルエミュレート工程を含み、
前記仮想マシンコンテナ工程は、仮想マシンコンテナにロードされたアプリケーションを実行し、
前記仮想マシンモニタ工程は、前記アプリケーションのプロセスが生成するシステムコールを取得し、
前記システムコール制御工程は、前記仮想マシンモニタ工程が取得した前記システムコールにより前記アプリケーションのOS及び前記ホストOSカーネル工程が取り扱うOSの異同を判断し、
前記異同の判断において同じと判断した場合、前記ホストOSカーネル工程は、前記システムコールを実行し、前記実行結果を前記プロセスに返却し、
前記異同の判断において異なると判断した場合、前記OSカーネルエミュレート工程は、前記システムコールを前記アプリケーションのOSに応じてエミュレートし、前記エミュレートの実行結果を前記プロセスに返却する、方法である。
【発明の効果】
【0010】
本発明によれば、コンテナ型仮想化環境において、ホストOSとは異なるOS用のコンテナを実行することができる。
【図面の簡単な説明】
【0011】
【
図1】
図1は、実施形態1の仮想マシンコンテナ装置の構成の一例を示すブロック図である。
【
図2】
図2は、実施形態1の仮想マシンコンテナ装置のハードウエア構成の一例を示すブロック図である。
【
図3】
図3は、実施形態1の仮想マシンコンテナの制御方法における処理の一例を示すフローチャートである。
【
図4A】
図4Aは、実施形態2の仮想マシンコンテナの制御方法における仮想マシンコンテナの実行の一例を示すフローチャートである。
【
図4B】
図4Bは、実施形態2の仮想マシンコンテナの制御方法におけるシステムコールの実行の一例を示すフローチャートである。
【
図5A】
図5Aは、仮想マシン型仮想化における仮想化環境及びシステムコール実行の一例を示す模式図である。
【
図5B】
図5Bは、コンテナ型仮想化における仮想化環境及びシステムコール実行の一例を示す模式図である。
【
図5C】
図5Cは、Unikernelコンテナ型仮想化における仮想化環境及びシステムコール実行の一例を示す模式図である。
【
図5D】
図5Dは、実施形態2の仮想マシンコンテナ装置における仮想化環境及びシステムコール実行の一例を示す模式図である。
【
図6】
図6は、前記制御移行が前記システムコールに起因するものではない場合における仮想マシンモニタ部の処理の一例を示すフローチャート
【発明を実施するための形態】
【0012】
本発明の仮想マシンコンテナ装置において、例えば、
前記システムコール制御部は、前記異同の判断において、前記アプリケーションのOSと前記ホストOSカーネル部のOSの互換性を判断し、前記アプリケーションのOSの一部に前記ホストOSカーネル部のOSとの非互換性があり、その他の部分は互換性があると判断した場合、
前記ホストOSカーネル部は、前記システムコールの前記互換性の部分を実行し、前記実行結果を前記プロセスに返却し、
前記OSカーネルエミュレート部は、前記システムコールの前記非互換性の部分を前記アプリケーションのOSに応じてエミュレートし、前記エミュレートの実行結果を前記プロセスに返却する、という態様であってもよい。
【0013】
本発明の仮想マシンコンテナ装置は、例えば、
さらに、通信部を含み、
前記通信部は、外部ネットワークを介して他の装置と通信可能であり、
前記システムコール制御部は、前記異同の判断において、前記アプリケーションのOSが前記ホストOSカーネル部のOSと異なり、かつ前記OSカーネルエミュレート部でのエミュレートが不可と判断した場合、前記通信部を介して、前記アプリケーションのOSを実行可能な前記他の装置に前記システムコールを実行させ、前記実行結果を前記プロセスに返却させる、という態様であってもよい。
【0014】
本発明の仮想マシンコンテナ装置において、例えば、
前記仮想マシンコンテナ部は、ハードウエア仮想化機能により生成されたものである、という態様であってもよい。
【0015】
本発明の仮想マシンコンテナ方法において、例えば、
前記システムコール制御工程は、前記異同の判断において、前記アプリケーションのOSと前記ホストOSカーネル工程が取り扱うOSの互換性を判断し、前記アプリケーションのOSの一部に前記ホストOSカーネル工程が取り扱うOSとの非互換性があり、その他の部分は互換性があると判断した場合、
前記ホストOSカーネル工程は、前記システムコールの前記互換性の部分を実行し、前記実行結果を前記プロセスに返却し、
前記OSカーネルエミュレート工程は、前記システムコールの前記非互換性の部分を前記アプリケーションのOSに応じてエミュレートし、前記エミュレートの実行結果を前記プロセスに返却する、という態様であってもよい。
【0016】
本発明の仮想マシンコンテナ方法は、例えば、
前記システムコール制御工程は、前記異同の判断において、前記アプリケーションのOSが前記ホストOSカーネル工程が取り扱うOSと異なり、かつ前記OSカーネルエミュレート工程でのエミュレートが不可と判断した場合、通信部を介して、前記アプリケーションのOSを実行可能な他の装置に前記システムコールを実行させ、前記実行結果を前記プロセスに返却させる、という態様であってもよい。
【0017】
本発明の仮想マシンコンテナ方法において、例えば、
前記仮想マシンコンテナ工程が取り扱う前記仮想マシンコンテナは、ハードウエア仮想化機能により生成されたものである、という態様であってもよい。
【0018】
本発明のプログラムは、本発明の方法の各工程を、手順として、コンピュータに実行させるためのプログラムである。
【0019】
本発明の記録媒体は、本発明のプログラムを記録しているコンピュータ読み取り可能な記録媒体である。
【0020】
本発明において、「OS」とは、オペレーティングシステムを意味する略語である。
【0021】
次に、本発明の実施形態について図を用いて説明する。本発明は、以下の実施形態には限定されない。以下の各図において、同一部分には、同一符号を付している。また、各実施形態の説明は、特に言及がない限り、互いの説明を援用でき、各実施形態の構成は、特に言及がない限り、組合せ可能である。本明細書において「部」とは、例えば、広義の回路によって実施されるハードウエア資源と、これらのハードウエア資源によって具体的に実現されうるソフトウエアの情報処理とを合わせたものも含みうる。
【0022】
[実施形態1]
図1は、本実施形態の仮想マシンコンテナ装置10の構成の一例を示すブロック図である。
図1に示すように、本装置10は、仮想マシンコンテナ部11、仮想マシンモニタ部12、システムコール制御部13、ホストOSカーネル部14、及びOSカーネルエミュレート部15を含む。また、本装置10は、任意の構成として、さらに、通信部16等を含んでもよい。
【0023】
本装置10は、例えば、前記各部を含む1つの装置でもよいし、前記各部が、通信回線網を介して接続可能な装置でもよい。本態様の場合、前記各部は、例えば、内部バスにより相互に接続されていてもよい。
【0024】
また、本装置10は、前記通信回線網を介して、後述する外部装置と接続可能である。前記通信回線網は、特に制限されず、公知のネットワークを使用でき、例えば、有線でも無線でもよい。前記通信回線網は、例えば、インターネット回線、WWW(World Wide Web)、電話回線、LAN(Local Area Network)、SAN(Storage Area Network)、DTN(Delay Tolerant Networking)、LPWA(Low Power Wide Area)、L5G(ローカル5G)、等があげられる。無線通信としては、例えば、Wi-Fi(登録商標)、Bluetooth(登録商標)、ローカル5G、LPWA等が挙げられる。前記無線通信としては、各装置が直接通信する形態(Ad Hoc通信)、インフラストラクチャ(infrastructure通信)、アクセスポイントを介した間接通信等であってもよい。
【0025】
本装置10は、例えば、システムとしてサーバに組み込まれていてもよい。
【0026】
本装置10は、例えば、本発明のプログラムがインストールされたパーソナルコンピュータ(PC、例えば、デスクトップ型、ノート型)、スマートフォン、タブレット端末、ウエアラブル端末等であってもよい。本態様の場合、本装置10は、例えば、メインメモリ上にロードされたソフトウエア(本発明のプログラム等)によって前記各部の機能を実現可能である。
【0027】
本装置10の各部の全部又は一部が、クラウド上で実現されてもよい。本装置10は、例えば、前記各部のうち少なくとも一つがサーバ上にあり、その他の前記各部が端末上にあるような、クラウドコンピューティングやエッジコンピューティング等の形態であってもよい。
【0028】
図2に、本装置10のハードウエア構成のブロック図を例示する。本装置10は、例えば、中央処理装置(CPU、GPU等)101、メモリ102、バス103、記憶装置104、入力装置105、出力装置106、及び通信デバイス107等を含んでもよい。なお、これらは例示であって、本装置10のハードウエア構成は、前記各部の処理を実行可能であれば、これに限定されない。また、本装置10に含まれる中央処理装置101等の数も
図2の例示に限定されるものではなく、例えば、複数の中央処理装置101が本装置10に含まれていてもよい。本装置10のハードウエア構成の各部は、それぞれのインタフェース(I/F)により、バス103を介して相互に接続されている。
【0029】
中央処理装置101は、本装置10の全体の制御を担う。本装置10において、中央処理装置101により、例えば、本発明のプログラムやその他のプログラムが実行され、また、各種情報の読み込みや書き込みが行われる。中央処理装置101は、例えば、本装置10の各部の機能を実行する。
【0030】
バス103は、例えば、外部装置とも接続できる。前記外部装置は、例えば、外部記憶装置(外部データベース等)、外部入力装置、外部出力装置、等があげられる。本装置10は、例えば、バス103に接続された通信デバイス107により、外部ネットワーク(前記通信回線網)に接続でき、外部ネットワークを介して、他の装置と接続することもできる。通信デバイス107は、例えば、通信部16として機能する。
【0031】
メモリ102は、例えば、メインメモリ(主記憶装置)が挙げられる。中央処理装置101が処理を行う際には、例えば、後述する記憶装置104に記憶されている本発明のプログラム等の種々の動作プログラムを、メモリ102が読み込み、中央処理装置101は、メモリ102からデータを受け取って、プログラムを実行する。前記メインメモリは、例えば、RAM(ランダムアクセスメモリ)である。また、メモリ102は、例えば、ROM(読み出し専用メモリ)であってもよい。
【0032】
記憶装置104は、例えば、前記メインメモリ(主記憶装置)に対して、いわゆる補助記憶装置ともいう。前述のように、記憶装置104には、本発明のプログラムを含む動作プログラムが格納されている。記憶装置104は、例えば、記録媒体と、記録媒体に読み書きするドライブとの組合せであってもよい。前記記録媒体は、特に制限されず、例えば、内蔵型でも外付け型でもよく、HD(ハードディスク)、CD-ROM、CD-R、CD-RW、MO、DVD、フラッシュメモリー、メモリーカード等が挙げられる。記憶装置104は、例えば、記録媒体とドライブとが一体化されたハードディスクドライブ(HDD)、及びソリッドステートドライブ(SSD)であってもよい。
【0033】
本装置10において、メモリ102及び記憶装置104は、ログ情報、外部データベース(図示せず)や外部の装置から取得した情報、本装置10の各処理によって生じた情報、本装置10が各処理を実行する際に用いる情報等の種々の情報を記憶することも可能である。なお、少なくとも一部の情報は、例えば、メモリ102及び記憶装置104以外の外部サーバに記憶されていてもよいし、複数の端末にブロックチェーン技術等を用いて分散して記憶されていてもよい。
【0034】
本装置10は、例えば、さらに、入力装置105、及び出力装置106を含んでもよい。入力装置105は、例えば、文字、数字、画面上に表示された物の位置、画像、音等を入力する装置であり、具体的には、デジタイザ(タッチパネル等)、キーボード、マウス、スキャナ、撮像装置、マイク、センサ等が挙げられる。出力装置106は、例えば、表示装置(LEDディスプレイ、液晶ディスプレイ)、プリンター、スピーカー等が挙げられる。
【0035】
つぎに、本実施形態の仮想マシンコンテナの制御方法(以下、単に、制御方法ともいう)の一例を、
図3のフローチャートに基づき説明する。本実施形態の制御方法は、例えば、
図1の仮想マシンコンテナ装置10を用いて、次のように実施する。なお、本実施形態の制御方法は、
図1の仮想マシンコンテナ装置10の使用には限定されない。
【0036】
以下において、前記仮想マシンコンテナ工程は、例えば、仮想マシンコンテナ部11により実行でき、前記仮想マシンモニタ工程は、例えば、仮想マシンモニタ部12により実行でき、前記システムコール制御工程は、例えば、システムコール制御部13により実行でき、前記ホストOSカーネル工程は、例えば、ホストOSカーネル部14により実行でき、前記OSカーネルエミュレート工程は、例えば、OSカーネルエミュレート部15により実行できる。
【0037】
まず、仮想マシンコンテナ部11により、ロードされたアプリケーションを実行する(S11)。次に、仮想マシンモニタ部12により、前記アプリケーションのプロセスが生成するシステムコールを取得する(S12)。次に、システムコール制御部13により、仮想マシンモニタ部12が取得した前記システムコールにより前記アプリケーションのOS及びホストOSカーネル部14のOS(すなわち、ホストOS)の異同を判断する(S13)。前記異同の判断において同じと判断した場合(A)、ホストOSカーネル部14により、前記システムコールを実行し、前記実行結果を前記プロセスに返却し(S14)、終了する(END)。ホストOSカーネル部14による「前記システムコールの実行」は、例えば、「前記システムコールに応える」ともいえる。一方で、前記異同の判断において異なると判断した場合(B)、OSカーネルエミュレート部15は、前記システムコールを前記アプリケーションのOSに応じてエミュレートし、前記エミュレートの実行結果を前記プロセスに返却し(S15)、終了する(END)。
【0038】
仮想マシンコンテナ部11は、例えば、ハードウエア仮想化機能(ハードウエアの仮想化機能)により生成されたものであってもよい。前記ハードウエア仮想化機能は、例えば、ハードウエアが提供する機能であって、仮想マシンコンテナを有する仮想マシン機能を実現する機能である。ここで、仮想マシンコンテナとは、稼働中のOSの一部を分離して他と隔離された仮想マシン上のアプリケーションの実行環境をいう。仮想マシンコンテナ部11がハードウエア仮想化機能により生成されたものである場合、仮想マシンモニタ部12は、例えば、前記ハードウエア仮想化機能を利用して、前記アプリケーションのプロセスが生成するシステムコールを取得する。このように、前記ハードウエア仮想化機能による前記仮想マシン機能を利用することで、ソフトウエアの変更を必要とせずとも、前記システムコールをトラップ可能である。また、前記ハードウエア仮想化機能による前記仮想マシン機能を利用することで、ソフトウエアの実行時のオーバーヘッドを高めずに前記システムコールをトラップ可能である。
【0039】
本発明において、前記仮想マシンコンテナは、例えば、OS(ゲストOS)を含んでいてもよいが、OS(ゲストOS)を含んでいなくともよい。
【0040】
ここで、アプリケーション及びシステムコールについて説明する。前記アプリケーションは、OSの中核であるカーネルの機能を呼び出して動作する。このような前記カーネルに対する呼び出しをシステムコールという。
【0041】
仮想マシンモニタ部12は、ハイパーバイザーともいえる。仮想マシンモニタ部12の具体的な処理については、後述の実施形態2にて説明する。
【0042】
システムコール制御部13において、「前記アプリケーションのOS及びホストOSカーネル部14のOSの異同」とは、具体的に、OSの種類の異同である。そして、OSの種別に応じて、ホストOSカーネル部14及びOSカーネルエミュレート部15が前述のように動作する。システムコール制御部13は、例えば、ディスパッチャともいい、仮想マシンモニタ部12の一部であってもよい。
【0043】
システムコール制御部13は、例えば、前記異同の判断(S13)に加えて、前記アプリケーションのOSとホストOSカーネル部14のOSの互換性を判断してもよい。そして、前記アプリケーションのOSの一部にホストOSカーネル部14のOSとの非互換性があり、その他の部分は互換性があると判断した場合(C)、ホストOSカーネル部14は、前記システムコールの前記互換性の部分を実行し、前記実行結果を前記プロセスに返却してもよい(S16)。一方で、OSカーネルエミュレート部15は、前記システムコールの前記非互換性の部分を前記アプリケーションのOSに応じてエミュレートし、前記エミュレートの実行結果を前記プロセスに返却してもよい(S16)。そして、前記工程S16を実行した後に、終了する(END)。前述のように、前記非互換性のシステムコールだけエミュレートし、前記互換性のあるシステムコールはホストOSで実行する態様によれば、エミュレータの開発が簡略化できる。
【0044】
OSカーネルエミュレート部15によるエミュレーション(エミュレート)について説明する。前記エミュレーションは、アプリケーションの動作対象のOS(以下、対象OSともいう)とホストOSとが同一の機能を提供しているが、機能のインターフェイスが異なる場合に、前記ホストOSが提供する機能のインターフェイスに合わせるように、前記対象OSが提供する機能のインターフェイスの変換を行ったうえで、前記ホストOSにシステムコールを発行する。具体的に、エミュレーションには、例えば、各インターフェイスの差異の程度に応じて、下記(1)~(4)に説明する方式のうちいずれかを実行する。
【0045】
(1)システムコール呼び出し時のパラメータの順序が異なる場合
前記アプリケーションが発行したシステムコールのパラメータを、前記ホストOSが期待する順序に変換する。
【0046】
(2)システムコール呼び出し時のパラメータの値とその意味の対応付けが異なる場合
前記アプリケーションが発行したシステムコールのパラメータの値を、変換表や変換規則に基づいて、前記ホストOSが期待する値に変換する。
【0047】
(3)前記ホストOSが提供する機能を組合せることで前記対象OSが提供する機能と同一機能を実現できる場合
要求されたシステムコールの機能を前記ホストOSで実現するために、前記ホストOSの一連のシステムコール呼び出しに変換する。また、必要に応じて、システムコール呼び出し時のパラメータも前記ホストOSが期待する順序及び値に変換する。
【0048】
(4)前記ホストOSのシステムコールだけでは前記対象OSが提供する機能と同一の機能を提供できない場合
前記同一機能を提供するためのプログラムをエミュレータ内または外部コンポーネントとして実装し、それを利用する。
【0049】
前述のように、本装置10は、例えば、さらに、通信部16を含んでもよい。通信部16は、外部ネットワークを介して他の装置と通信可能である。通信部16を含む態様において、システムコール制御部13は、例えば、前記異同の判断(S13)に加えて、OSカーネルエミュレート部15でのエミュレートが可能か否かを判断してもよい。前記アプリケーションのOSがホストOSカーネル部14のOSと異なり、かつOSカーネルエミュレート部15でのエミュレートが不可と判断した場合(D)、システムコール制御部13は、例えば、通信部16を介して、前記アプリケーションのOSを実行可能な前記他の装置に前記システムコールを実行させ、前記実行結果を前記プロセスに返却させ(S17)、終了してもよい(END)。前記他の装置は、特に制限されず、仮想マシンでもよいし、物理マシンでもよい。「OSカーネルエミュレート部15でのエミュレートが不可」とは、完全に不可の場合に加え、エミュレートによって本装置10の性能が低下する場合、エミュレート機能を開発することにコストや労力がかかる場合等が含まれる。本態様によれば、前述のような場合であっても、前記システムコールを実行可能である。一方で、例えば、前記アプリケーションのOSがホストOSカーネル部14のOSと異なり、かつOSカーネルエミュレート部15でのエミュレートが可能と判断した場合は、例えば、前記工程S15と同様の処理を実行してもよい。
【0050】
システムコール制御部13は、例えば、前記アプリケーションのOSとホストOSカーネル部14のOSとの前記非互換性の部分がOSカーネルエミュレート部15でエミュレート可能か否かを判断してもよい。前記非互換性の部分のエミュレートが不可と判断した場合、システムコール制御部13は、例えば、前記システムコールの前記非互換性の部分を前記他の装置にエミュレーションさせ、前記他の装置に前記システムコールの前記非互換性の部分を実行させてもよい。
【0051】
本実施形態の発明は、例えば、以下の効果を奏する。
【0052】
(1)リソース及びオーバーヘッド等
本実施形態によれば、各仮想マシンコンテナ部11にOSがなくともよいので、従来の仮想マシン型仮想化の環境より少ないリソース及び低いオーバーヘッドで複数のOSのアプリケーションを単一のホストOS上で実行可能である。オーバーヘッドが低いということは、起動速度が速くなることを意味する。また、本実施形態によれば、前記エミュレーションにより、前記複数のOSが前記ホストOSと異なる場合であっても、前記アプリケーションを実行可能である。
【0053】
(2)設計自由度等
本実施形態によれば、複数の仮想マシンコンテナで構成するアプリケーション設計の自由度が上がる。例えば、ウェブサーバはOSとしてLinux(登録商標)を有するコンテナ、データベースはOSとしてWindows(登録商標)を有するコンテナ、といった構成が可能になる。また、コンテナで実行するアプリケーションの改変及びライブラリとの結合なしに既存のアプリケーションや市販のアプリケーションをそのままコンテナ内で実行可能である。
【0054】
(3)構築コスト及び運用コスト等
本装置10の各部(仮想マシンコンテナ部11、仮想マシンモニタ部12、システムコール制御部13、ホストOSカーネル部14、及びOSカーネルエミュレート部15)の処理がメインメモリ上にロードされたソフトウエアで実現される態様の場合、コンテナを実行するために必要なハードウエア(または仮想マシン)及びホストOSの構築コスト及び運用コストが削減できる。具体的に、OSの種類毎にOSが動作するハードウエア環境を準備し、その上にOS環境を構築し、これらを管理及び運用するコストが削減できる。また、ホストOSを統一することにより低コストでクラスタ構築及び冗長性向上を実行可能である。さらに、エミュレーションライブラリの開発も不要である。
【0055】
(4)通信速度
本実施形態によれば、異なるOS用コンテナ間の通信を高速化できる。この点について、より具体的に説明する。従来の仮想マシン型仮想化の環境では、OS間通信となるのでオーバーヘッドが大きくなる。しかしながら、同一ホスト上のコンテナ間通信は、メモリ間コピーで実現できるので、本実施形態によれば、異なるOS用コンテナ間の通信が従来の仮想マシン型仮想化と比べて高速となる。
【0056】
[実施形態2]
前記実施形態1の仮想マシンコンテナ装置10及び制御方法をより具体的に説明する。
【0057】
図3に示す本実施形態の制御方法の一例を
図4A及び
図4Bを用いてより具体的に説明する。
図4Aは、本実施形態の制御方法における仮想マシンコンテナの実行の一例を示すフローチャートである。まず、準備段階として、
図4Aに示す工程S21~S23を実行する。前記工程S21は、仮想マシンコンテナ部11を生成する工程である。仮想マシンコンテナ部11は、前述のように、ハードウエア仮想化機能により生成可能である。前記工程S22は、仮想マシンコンテナ部11におけるシステムコールをトラップするように設定する工程である。前記システムコールは、後述の工程S23にてロードされるアプリケーションのプロセスが生成するものである。前記工程S23は、仮想マシンコンテナ部11のメモリ空間にアプリケーションをロードする工程である。そして、仮想マシンコンテナ部11内で前記アプリケーションが実行される(S24)。
【0058】
次に、仮想マシンコンテナ部11の実行段階として、
図4Aに示す工程S25~S28を実行する。これらの工程は、例えば、仮想マシンコンテナ部11に対応するハードウエア(例えば、中央処理装置101)にて実行される。前記工程S25は、前記アプリケーションによる命令を取得する工程である。前記工程S26は、前記命令が特定の命令(システムコールに関する命令を含む)であるか否かを判定する工程である。前記特定の命令とは、例えば、仮想マシンコンテナ部11内で前記アプリケーションをそのまま実行させるとシステムに問題が発生する可能性のある命令である。より具体的には、例えば、特別な権限が必要な命令、許可されていないメモリ領域にアクセスする命令、等がある。前記アプリケーションが前記特定の命令をしようとしていることは、例えば、ハードウエア仮想化機能が検知する。前記工程S27は、前記命令が前記特定の命令ではない場合(NO)、仮想マシンコンテナ部11内で前記命令を実行する工程である。前記工程S28は、前記命令が前記特定の命令である場合(YES)、仮想マシンコンテナ部11内での前記特定の命令の実行を一時中断し、仮想マシンモニタ部12に前記特定の命令に関する処理を移す工程である。そして、前記特定の命令がシステムコールに関する命令であれば、
図3にて説明したように、仮想マシンモニタ部12による前記システムコールの取得等の処理が実行され、前記システムコールが実行される(S29)。前記特定の命令がシステムコールに関する命令でない場合の処理については、
図6を用いて後述する。本実施形態の制御方法における仮想マシンコンテナの実行は、例えば、前記工程S27又は前記工程S29のいずれか一方が実行された後に終了する(END)。本実施形態の制御方法は、例えば、前記工程S27及び前記工程S29の後、前記工程S25から繰り返し処理を実行してもよい。
【0059】
図4Bは、本実施形態の制御方法におけるシステムコールの実行の一例を示すフローチャートである。まず、前段階として、工程S31では、
図4Aにて説明したように、前記特定の命令の処理に関する制御が仮想マシンモニタ部12に移行される。次に、工程S32では、前記移行(以下、制御移行ともいう)が前記システムコールに起因するものか否か、すなわち、前記特定の命令がシステムコールに関する命令であるか否かを判定する。前記工程S32は、例えば、仮想マシンモニタ部12により実行される。前記制御移行が前記システムコールに起因するものではない場合(NO)、工程S33に進む。
【0060】
図6は、前記制御移行が前記システムコールに起因するものではない場合における仮想マシンモニタ部12の処理の一例を示すフローチャートである。前記工程S33は、例えば、
図6に示す工程S33-1~S33-3を含む工程である。まず、前記アプリケーションが実行しようとしている前記特定の命令を確認し、前記特定の命令の実行を許可するか否かを判断する(工程S33-1)。前記判断の結果、前記特定の命令の実行を許可しない場合(NO)、仮想マシンモニタ部12は、例えば、状況に応じて前記アプリケーションにエラーを返却又は前記アプリケーションを終了させ(工程S33-2)、終了する(END)。一方で、前記判断の結果、前記特定の命令の実行を許可する場合(YES)、仮想マシンモニタ部12は、例えば、仮想マシンコンテナ部11内の前記アプリケーションに制御を戻して、仮想マシンコンテナ部11内において前記特定の命令の実行を再開させ(工程S33-3)、終了する(END)。より具体的に、「前記命令の実行を許可する」とは、例えば、前記命令の実行に際し、特別な権限を与えること、メモリ領域にアクセスすることを許可すること等をいう。また、前記アプリケーションが実行しようとしている特定の命令によっては、仮想マシンモニタ部12が前記特定の命令を安全な方法で代理実行して前記アプリケーションに結果を返却してもよい。
【0061】
図4Bの前記工程S32において、前記制御移行が前記システムコールに起因するものである場合(YES)、工程S34に進む。前記工程S34は、仮想マシンコンテナ部11のOS種別を取得する工程である。前記工程S34は、例えば、システムコール制御部13により実行される。次に、工程S35では、システムコール制御部13により前記アプリケーションのOSがホストOSと同一であるか否かを判定する。同一のOSであると判定された場合(YES)、工程S36において、前記命令に関する制御がホストOSカーネル部14のOS(ホストOS)に移行され、ホストOSカーネル部14により前記システムコールが実行される。一方で、異なるOSであると判定された場合(NO)、工程S37において、前記アプリケーションのOSがエミュレーション可能なOSか否かの判定が行われる。前記工程S37における前記判定は、例えば、システムコール制御部13により実行される。エミュレーション可能なOSであると判定された場合(YES)、工程S38において、前記命令に関する制御がOSカーネルエミュレート部15のエミュレーションに移行され、前記エミュレーションにより前記システムコールが実行される。一方で、エミュレーション不可能なOSであると判定された場合(NO)、工程S39において、前記アプリケーションのOSがリモート(通信部16との通信)実行可能なOSか否かの判定が行われる。前記工程S39は、例えば、システムコール制御部13により実行される。リモート実行可能なOSであると判定された場合(YES)、工程S40において、前記命令に関する制御が前記他の装置のOSに移行され、前記他の装置により前記システムコールが実行される。一方で、リモート実行不可能なOSであると判定された場合(NO)、工程S41において、システムコール制御部13によりエラーが前記プロセスに返却される。前記エラーは、前記システムコールを実行できないことを意味する。前記工程S41の実行後、例えば、前記システムコールの実行に関する処理を終了する(END)。前記工程S36、前記工程S38、又は前記工程S40のいずれか一つを実行した後、前記システムコールの実行結果が前記プロセスに返却される(S42)。そして、その後、終了する(END)。
【0062】
仮想マシン型仮想化、コンテナ型仮想化、Unikernelコンテナ型仮想化、本実施形態の仮想マシンコンテナ装置10についてより具体的に説明する。
図5Aは、仮想マシン型仮想化における仮想化環境及びシステムコール実行の一例を示す模式図である。
図5Bは、コンテナ型仮想化における仮想化環境及びシステムコール実行の一例を示す模式図である。
図5Cは、Unikernelコンテナ型仮想化における仮想化環境及びシステムコール実行の一例を示す模式図である。
図5Dは、本実施形態の仮想マシンコンテナ装置10における仮想化環境及びシステムコール実行の一例を示す模式図である。
図5A~Dにおいて、アプリは、アプリケーションの略であり、SVCは、システムコール(スーパーバイザコール)の略である。また、以下の説明及び
図5A~Dにおいて、OS-A、OS―B、OS-Cは、OSの種類を意味する。
【0063】
まず、
図5Aを用いて仮想マシン型仮想化について説明する。本例において、仮想マシン1は、
図5A(A)に示すように、OS-AであるホストOS(ホストOSカーネル14A)上に構築され、OS-C用のアプリケーション2c、及びゲストOSカーネル3を有するものとする。ゲストOSは、OS-Cである。仮想マシン型仮想化では、ゲストOSカーネル3がアプリケーション2cからシステムコールを取得する。ゲストOSカーネル3は、ハードウエアアクセス等を実行する。前記ハードウエアアクセス等が実行されると、ハードウエア仮想化機能がそれをトラップし、仮想マシンモニタ12Aに制御が移ることになる。そして、仮想マシン型仮想化では、仮想マシンモニタ12Aにより、前記システムコールを実行する。このように、仮想マシン型仮想化では、ゲストOSカーネル3を介する必要があるため、前述したように、ゲストOSを動かすため多くのリソースが必要になり、起動に時間がかかる。
【0064】
次に、
図5Bを用いてコンテナ型仮想化について説明する。本例において、コンテナ4は、OS-AであるホストOS(ホストOSカーネル14B)上に構築され、OS-A用のアプリケーション2aを有するものとする。コンテナ4は、コンテナランタイム5によって生成及び操作される。コンテナ型仮想化では、ホストOSカーネル14Bが、アプリケーション2aのプロセスが生成するシステムコールをアプリケーション2aから直接受け取り、前記システムコールを実行する。このように、コンテナ型仮想化では、複数のコンテナ4が同一のホストOS(ホストOSカーネル14B)を共有しているため、前述したように、ホストOSと異なるOS用のアプリケーションを有するコンテナの処理を実行できない。
【0065】
次に、
図5Cを用いてUnikernelコンテナ型仮想化について説明する。本例において、Unikernelコンテナ6は、OS-AであるホストOS(ホストOSカーネル14C)上に構築され、OS-C用のアプリケーション2c及びOS-C用のカーネルエミュレーションライブラリ7を有するものとする。Unikernelコンテナ型仮想化では、アプリケーション2cが、カーネルエミュレーションライブラリ7を呼び出す。そして、ホストOSカーネル14Cは、カーネルエミュレーションライブラリ7からシステムコールを取得して、前記システムコールを実行する。カーネルエミュレーションライブラリ7とは、ホストOSのOSカーネル(ホストOSカーネル14C)が提供していたシステムコール機能を、アプリケーションと結合可能なライブラリプログラムの形態で実装したものである。このように、Unikernelコンテナ型仮想化では、前述したように、アプリケーション2cのOS毎にカーネルエミュレーションライブラリ7の開発が必要になる。
【0066】
最後に、
図5Dを用いて本実施形態の仮想マシンコンテナ装置10について説明する。
図5Dにおいて、仮想マシンコンテナ11A~Cは、仮想マシンコンテナ部11に相当し、仮想マシンモニタ12Dは、仮想マシンモニタ部12に相当し、ディスパッチャ13Dは、システムコール制御部13に相当する。ホストOSカーネル14Dは、ホストOSカーネル部14に相当し、OSカーネルエミュレータ15D及び仮想マシン8は、OSカーネルエミュレート部15に相当する。本例において、ホストOSカーネル14DにおけるホストOSの種別は、OS-Aである。なお、本発明は、本例示に限定されるものではない。
【0067】
まず、OS-A用のアプリケーション2aを有する仮想マシンコンテナ11Aを例に挙げて説明する。仮想マシンモニタ12Dは、仮想マシンコンテナ11A内のアプリケーション2aのプロセスが生成するシステムコールを取得する。より具体的には、例えば、アプリケーション2aのプロセスがシステムコールを発行すると、ハードウエア仮想化機能がそれをトラップし、仮想マシンモニタ12Dに制御が移ることになる。その後、ディスパッチャ13Dは、アプリケーション2aのOSがホストOSと同一であると判断し、ホストOSカーネル14Dに前記システムコールを受け渡す。そして、ホストOSカーネル14Dは、前記システムコールを実行する。
【0068】
次に、OS-B用のアプリケーション2bを有する仮想マシンコンテナ11Bを例に挙げて説明する。仮想マシンモニタ12Dは、仮想マシンコンテナ11B内のアプリケーション2bのプロセスが生成するシステムコールを取得する。より具体的には、例えば、アプリケーション2bのプロセスがシステムコールを発行すると、ハードウエア仮想化機能がそれをトラップし、仮想マシンモニタ12Dに制御が移ることになる。本例では、アプリケーション2bのOSがOS-Bであり、ホストOSカーネル14DのOSがOS-Aであるため、ディスパッチャ13Dにより、アプリケーション2bのOSがホストOSと異なると判断される。前記判断の後、OSカーネルエミュレータ15Dは、OS-B用の前記システムコールをOS-A用のシステムコールにエミュレーションする。そして、ホストOSカーネル14Dは、前記OS-A用のシステムコールを実行する。また、ディスパッチャ13Dにより、アプリケーション2bのOSの一部にホストOSとの非互換性があり、その他の部分は互換性があると判断された場合、ホストOSカーネル14Dは、前記システムコールの前記互換性の部分を実行してもよい。一方で、OSカーネルエミュレータ15Dは、OS-B用の前記システムコールのうち前記非互換性の部分をOS-A用のシステムコールにエミュレートしてもよい。そして、ホストOSカーネル14Dは、OS-A用のシステムコールにエミュレートされた前記非互換性の部分のシステムコールを実行する。なお、
図5Cにおけるカーネルエミュレーションライブラリ7は、アプリケーションが必要とするOS機能のみ実装している点、アプリケーションと結合して実行されてアプリケーションから直接呼び出される点において、OSカーネルエミュレータ15Dと相違する。
【0069】
最後に、OS-C用のアプリケーション2cを有する仮想マシンコンテナ11Cを例に挙げて説明する。仮想マシンモニタ12Dは、仮想マシンコンテナ11C内のアプリケーション2cのプロセスが生成するシステムコールを取得する。より具体的には、例えば、アプリケーション2cのプロセスがシステムコールを発行すると、ハードウエア仮想化機能がそれをトラップし、仮想マシンモニタ12Dに制御が移ることになる。本例では、アプリケーション2cのOSがOS-Cであり、ホストOSカーネル14DのOSがOS-Aであるため、ディスパッチャ13Dにより、アプリケーション2cのOSがホストOSと異なると判断される。このディスパッチャ13Dによる異同判断に加えて、ディスパッチャ13Dにより、OSカーネルエミュレータ15Dでのエミュレートが不可と判断された場合、ディスパッチャ13Dは、例えば、通信部16を介して、他の装置20に前記システムコールをエミュレーションさせ、前記システムコールを実行させる。他の装置20は、ホストOS(カーネル)としてOS-Cを有する。一方で、ディスパッチャ13Dは、例えば、ゲストOS9としてOS-Cを有する仮想マシン8に前記システムコールをエミュレーションさせ、前記システムコールを実行させてもよい。すなわち、仮想マシン8もOSカーネルエミュレート部15として機能し得る。
【0070】
[実施形態3]
本実施形態のプログラムは、本発明の方法の各工程を、手順として、コンピュータに実行させるためのプログラムである。本発明において、「手順」は、「処理」と読み替えてもよい。また、本実施形態のプログラムは、例えば、コンピュータ読み取り可能な記録媒体に記録されていてもよい。前記記録媒体は、例えば、非一時的なコンピュータ可読記録媒体(non-transitory computer-readable storage medium)である。前記記録媒体としては、特に限定されず、例えば、読み出し専用メモリ(ROM)、ハードディスク(HD)、光ディスク等が挙げられる。
【0071】
以上、実施形態を参照して本発明を説明したが、本発明は、上記実施形態に限定されるものではない。本発明の構成や詳細には、本発明のスコープ内で当業者が理解しうる様々な変更をできる。
【0072】
<付記>
上記の実施形態の一部または全部は、以下の付記のように記載されうるが、以下には限られない。
(付記1)
仮想マシンコンテナ部、仮想マシンモニタ部、システムコール制御部、ホストOSカーネル部、及びOSカーネルエミュレート部を含み、
前記仮想マシンコンテナ部は、ロードされたアプリケーションを実行可能であり、
前記仮想マシンモニタ部は、前記アプリケーションのプロセスが生成するシステムコールを取得可能であり、
前記システムコール制御部は、前記仮想マシンモニタ部が取得した前記システムコールにより前記アプリケーションのOS及び前記ホストOSカーネル部のOSの異同を判断し、
前記異同の判断において同じと判断した場合、前記ホストOSカーネル部は、前記システムコールを実行し、前記実行結果を前記プロセスに返却し、
前記異同の判断において異なると判断した場合、前記OSカーネルエミュレート部は、前記システムコールを前記アプリケーションのOSに応じてエミュレートし、前記エミュレートの実行結果を前記プロセスに返却する、
仮想マシンコンテナ装置。
(付記2)
前記システムコール制御部は、前記異同の判断において、前記アプリケーションのOSと前記ホストOSカーネル部のOSの互換性を判断し、前記アプリケーションのOSの一部に前記ホストOSカーネル部のOSとの非互換性があり、その他の部分は互換性があると判断した場合、
前記ホストOSカーネル部は、前記システムコールの前記互換性の部分を実行し、前記実行結果を前記プロセスに返却し、
前記OSカーネルエミュレート部は、前記システムコールの前記非互換性の部分を前記アプリケーションのOSに応じてエミュレートし、前記エミュレートの実行結果を前記プロセスに返却する、
付記1記載の仮想マシンコンテナ装置。
(付記3)
さらに、通信部を含み、
前記通信部は、外部ネットワークを介して他の装置と通信可能であり、
前記システムコール制御部は、前記異同の判断において、前記アプリケーションのOSが前記ホストOSカーネル部のOSと異なり、かつ前記OSカーネルエミュレート部でのエミュレートが不可と判断した場合、前記通信部を介して、前記アプリケーションのOSを実行可能な前記他の装置に前記システムコールを実行させ、前記実行結果を前記プロセスに返却させる、
付記1又は2記載の仮想マシンコンテナ装置。
(付記4)
前記仮想マシンコンテナ部は、ハードウエア仮想化機能により生成されたものである、
付記1から3のいずれかに記載の仮想マシンコンテナ装置。
(付記5)
仮想マシンコンテナ工程、仮想マシンモニタ工程、システムコール制御工程、ホストOSカーネル工程、及びOSカーネルエミュレート工程を含み、
前記仮想マシンコンテナ工程は、仮想マシンコンテナにロードされたアプリケーションを実行し、
前記仮想マシンモニタ工程は、前記アプリケーションのプロセスが生成するシステムコールを取得し、
前記システムコール制御工程は、前記仮想マシンモニタ工程が取得した前記システムコールにより前記アプリケーションのOS及び前記ホストOSカーネル工程が取り扱うOSの異同を判断し、
前記異同の判断において同じと判断した場合、前記ホストOSカーネル工程は、前記システムコールを実行し、前記実行結果を前記プロセスに返却し、
前記異同の判断において異なると判断した場合、前記OSカーネルエミュレート工程は、前記システムコールを前記アプリケーションのOSに応じてエミュレートし、前記エミュレートの実行結果を前記プロセスに返却する、
仮想マシンコンテナの制御方法。
(付記6)
前記システムコール制御工程は、前記異同の判断において、前記アプリケーションのOSと前記ホストOSカーネル工程が取り扱うOSの互換性を判断し、前記アプリケーションのOSの一部に前記ホストOSカーネル工程が取り扱うOSとの非互換性があり、その他の部分は互換性があると判断した場合、
前記ホストOSカーネル工程は、前記システムコールの前記互換性の部分を実行し、前記実行結果を前記プロセスに返却し、
前記OSカーネルエミュレート工程は、前記システムコールの前記非互換性の部分を前記アプリケーションのOSに応じてエミュレートし、前記エミュレートの実行結果を前記プロセスに返却する、
付記5記載の仮想マシンコンテナの制御方法。
(付記7)
前記システムコール制御工程は、前記異同の判断において、前記アプリケーションのOSが前記ホストOSカーネル工程が取り扱うOSと異なり、かつ前記OSカーネルエミュレート工程でのエミュレートが不可と判断した場合、通信部を介して、前記アプリケーションのOSを実行可能な他の装置に前記システムコールを実行させ、前記実行結果を前記プロセスに返却させる、
付記5又は6記載の仮想マシンコンテナの制御方法。
(付記8)
前記仮想マシンコンテナ工程が取り扱う前記仮想マシンコンテナは、ハードウエア仮想化機能により生成されたものである、
付記5から7のいずれかに記載の仮想マシンコンテナの制御方法。
(付記9)
コンピュータに、仮想マシンコンテナ手順、仮想マシンモニタ手順、システムコール制御手順、ホストOSカーネル手順、及びOSカーネルエミュレート手順を含む手順を実行させるためのプログラム;
前記仮想マシンコンテナ手順は、仮想マシンコンテナにロードされたアプリケーションを実行し、
前記仮想マシンモニタ手順は、前記アプリケーションのプロセスが生成するシステムコールを取得し、
前記システムコール制御手順は、前記仮想マシンモニタ手順が取得した前記システムコールにより前記アプリケーションのOS及び前記ホストOSカーネル手順が取り扱うOSの異同を判断し、
前記異同の判断において同じと判断した場合、前記ホストOSカーネル手順は、前記システムコールを実行し、前記実行結果を前記プロセスに返却し、
前記異同の判断において異なると判断した場合、前記OSカーネルエミュレート手順は、前記システムコールを前記アプリケーションのOSに応じてエミュレートし、前記エミュレートの実行結果を前記プロセスに返却する。
(付記10)
前記システムコール制御手順は、前記異同の判断において、前記アプリケーションのOSと前記ホストOSカーネル手順が取り扱うOSの互換性を判断し、前記アプリケーションのOSの一部に前記ホストOSカーネル手順が取り扱うOSとの非互換性があり、その他の部分は互換性があると判断した場合、
前記ホストOSカーネル手順は、前記システムコールの前記互換性の部分を実行し、前記実行結果を前記プロセスに返却し、
前記OSカーネルエミュレート手順は、前記システムコールの前記非互換性の部分を前記アプリケーションのOSに応じてエミュレートし、前記エミュレートの実行結果を前記プロセスに返却する、
付記9記載のプログラム。
(付記11)
前記システムコール制御手順は、前記異同の判断において、前記アプリケーションのOSが前記ホストOSカーネル手順が取り扱うOSと異なり、かつ前記OSカーネルエミュレート手順でのエミュレートが不可と判断した場合、通信部を介して、前記アプリケーションのOSを実行可能な他の装置に前記システムコールを実行させ、前記実行結果を前記プロセスに返却させる、
付記9又は10記載のプログラム。
(付記12)
前記仮想マシンコンテナ手順が取り扱う仮想マシンコンテナは、ハードウエア仮想化機能により生成されたものである、
付記9から11のいずれかに記載のプログラム。
(付記13)
付記9から12のいずれかに記載のプログラムを記録しているコンピュータ読み取り可能な記録媒体。
【産業上の利用可能性】
【0073】
本発明によれば、ホストOSとは異なるOS用のコンテナを実行可能である。このため、本発明は、例えば、コンテナ型仮想化環境においてアプリケーションを実行する場合に特に有用である。
【符号の説明】
【0074】
1、8 仮想マシン
2a、2b、2c アプリケーション
3 ゲストOSカーネル
4 コンテナ
5 コンテナランタイム
6 Unikernelコンテナ
7 カーネルエミュレーションライブラリ
9 ゲストOS
10 仮想マシンコンテナ装置
11 仮想マシンコンテナ部
11A、11B、11C 仮想マシンコンテナ
12 仮想マシンモニタ部
12A、12D 仮想マシンモニタ
13 システムコール制御部
13D ディスパッチャ
14 OSホストカーネル部
14A、14B、14C、14D ホストOSカーネル
15 OSカーネルエミュレート部
15D OSカーネルエミュレータ
16 通信部
20 他の装置
101 中央処理装置
102 メモリ
103 バス
104 記憶装置
105 入力装置
106 出力装置
107 通信デバイス