(19)【発行国】日本国特許庁(JP)
(12)【公報種別】公開特許公報(A)
(11)【公開番号】P2022180763
(43)【公開日】2022-12-07
(54)【発明の名称】メモリ共有プログラム、情報処理装置およびメモリ共有方法
(51)【国際特許分類】
G06F 9/54 20060101AFI20221130BHJP
G06F 9/455 20060101ALI20221130BHJP
【FI】
G06F9/54 A
G06F9/455 150
【審査請求】未請求
【請求項の数】6
【出願形態】OL
(21)【出願番号】P 2021087437
(22)【出願日】2021-05-25
(71)【出願人】
【識別番号】000005223
【氏名又は名称】富士通株式会社
(74)【代理人】
【識別番号】110002147
【氏名又は名称】弁理士法人酒井国際特許事務所
(72)【発明者】
【氏名】北條 浩一郎
(72)【発明者】
【氏名】中村 美亜
(72)【発明者】
【氏名】朝山 幸二
(72)【発明者】
【氏名】粟ヶ窪 康成
(72)【発明者】
【氏名】村井 孝司
(57)【要約】
【課題】仮想環境から最上位のホストOSに具備されている各種アプリケーションをシームレスに操作する。
【解決手段】ホストPC1は、最上位のWindows(20)上に、WSL2(10)の仮想環境を備える。ホストPC1は、アプリケーションの実行要求を受け付けると、仮想環境に立ち上げられるコンテナ(30)であってアプリケーションを起動するコンテナ(30)が使用するメモリ領域の一部と、WSL2(10)が使用するメモリ領域に含まれるアプリケーションの実行に使用されるメモリ領域とを共有する。ホストPC1は、共有したメモリ領域で、Windows(20)を操作するコマンドを用いてWindows(20)上のアプリケーションを起動する。
【選択図】
図1
【特許請求の範囲】
【請求項1】
最上位の第1のOS(Operation System)上に、第2のOS用の仮想環境を備えるコンピュータにおけるメモリ共有プログラムであって、
アプリケーションの実行要求を受け付けると、前記仮想環境に立ち上げられるコンテナであって前記アプリケーションを起動するコンテナが使用するメモリ領域の一部と、前記第2のOSが使用するメモリ領域に含まれる前記アプリケーションの実行に使用されるメモリ領域とを共有し、
前記共有したメモリ領域で、前記第1のOSを操作するコマンドを用いて前記第1のOS上の前記アプリケーションを起動する
処理をコンピュータに実行させるメモリ共有プログラム。
【請求項2】
前記共有する処理は、
前記第1のOS上の前記アプリケーションの実行パスを、前記第1のOSから取得し、
前記アプリケーションの実行パスを前記仮想環境からアクセス可能となるように変換して、前記アプリケーションの変換した実行パスおよび前記第1のOSを操作するコマンドを含むコンテナを前記仮想環境に立ち上げ、
前記コンテナが使用するメモリ領域の一部と、前記第2のOSが使用するメモリ領域に含まれる前記アプリケーションの実行に使用されるメモリ領域とを共有する
ことを特徴とする請求項1に記載のメモリ共有プログラム。
【請求項3】
前記コンテナから、前記アプリケーションの変換した実行パスおよび前記第1のOSを操作するコマンドを含む実行ファイルを、前記コンテナと前記第2のOSとの共有されたメモリ領域に配置する
ことを特徴とする請求項2に記載のメモリ共有プログラム。
【請求項4】
前記起動する処理は、前記共有されたメモリ領域で、前記第1のOSを操作するコマンドを含む前記実行ファイルを用いて、前記アプリケーションの変換した実行パスを起動する
ことを特徴とする請求項3に記載のメモリ共有プログラム。
【請求項5】
最上位の第1のOS上に、第2のOS用の仮想環境を備える情報処理装置であって、
アプリケーションの実行要求を受け付けると、前記仮想環境に立ち上げられるコンテナであって前記アプリケーションを起動するコンテナが使用するメモリ領域の一部と、前記第2のOSが使用するメモリ領域に含まれる前記アプリケーションの実行に使用されるメモリ領域とを共有する共有部と、
前記共有部によって共有されたメモリ領域で、前記第1のOSを操作するコマンドを用いて前記第1のOS上の前記アプリケーションを起動する起動部と、
を有することを特徴とする情報処理装置。
【請求項6】
最上位の第1のOS上に、第2のOS用の仮想環境を備えるコンピュータにおけるメモリ共有方法であって、
アプリケーションの実行要求を受け付けると、前記仮想環境に立ち上げられるコンテナであって前記アプリケーションを起動するコンテナが使用するメモリ領域の一部と、前記第2のOSが使用するメモリ領域に含まれる前記アプリケーションの実行に使用されるメモリ領域とを共有し、
前記共有したメモリ領域で、前記第1のOSを操作するコマンドを用いて前記第1のOS上の前記アプリケーションを起動する
処理をコンピュータが実行するメモリ共有方法。
【発明の詳細な説明】
【技術分野】
【0001】
本発明は、メモリ共有プログラムなどに関する。
【背景技術】
【0002】
近年、計算機上のハードウェアのリソースを有効に活用するために、一台の計算機上で複数のOS(Operation System)を備える技術が利用されている(例えば、特許文献1~3参照)。例えば、計算機は、ホストOSとゲストOSを共有メモリで結合し、共有メモリを通して各OSで通信したり、共有メモリ上のデータにアクセスしたりする。
【0003】
また、Windows(登録商標)では、Windows10から計算機内の仮想環境を容易に構築するために、WSL2(登録商標)(Windows Subsystem for Linux2)が実装された。WSL2は、Windowsのサブシステムであり、Windowsを備える計算機上に構築されるLinux(登録商標)用の仮想環境である。
【0004】
図9は、Windowsと仮想環境との関係を示す参考図である。
図9に示すように、ホストOSとしてのWindows上にWSL2とコンテナによる仮想環境が構築される。コンテナは、WSL2上に展開される。そして、コンテナ内で様々なアプリケーションが実行される。
【0005】
図10は、仮想環境からの通信方法を示す参考図である。
図10に示すように、仮想環境内のコンテナから最上位のホストOS(Windows)上のアプリケーションを起動する際には、コンテナ内のアプリケーションは、コンテナとWindowsとの間の外部NW(NetWork)通信相当の専用通信ソフトウェアを経由して、Windows上のアプリケーションを起動する。これは、同一の計算機内であっても、仮想環境は、Windows環境とは独立したアプリケーション空間であると認識されるからである。ここでは、クライアントAPLが、専用通信ソフトウェアを意味する。
【0006】
コンテナとWindowsとの間の外部NW通信相当の通信を行うためには、複雑なセキュリティ設定や、前述した専用通信ソフトウェアが必要である。
【先行技術文献】
【特許文献】
【0007】
【特許文献1】国際公開第2017/006458号公報
【特許文献2】国際公開第2018/154967号公報
【特許文献3】特開2017-187993号公報
【発明の概要】
【発明が解決しようとする課題】
【0008】
しかしながら、従来技術では、仮想環境から最上位のホストOSに具備されている各種アプリケーションを簡単(シームレス)に操作することができないという問題がある。すなわち、WSL2のOSであるLinuxおよび最上位のホストOSであるWindowsは、それぞれ同じ計算機上の同一のハードディスク上に配置されていても、論理的には独立したメモリ空間として認識される。それぞれのOSは、互いのメモリ領域に対してアクセスすることができない。このため、最上位のホストOSに具備されている各種アプリケーションは、最上位のホストOSと仮想環境との間で共用されない。つまり、最上位のホストOSに具備される各種アプリケーションは、仮想環境からシームレスに起動され、操作されない。
【0009】
本発明は、1つの側面では、仮想環境から最上位のホストOSに具備されている各種アプリケーションをシームレスに操作することを目的とする。
【課題を解決するための手段】
【0010】
1つの態様では、メモリ共有プログラムは、最上位の第1のOS上に、第2のOSを備える仮想環境を備えるコンピュータにおけるメモリ共有プログラムであって、アプリケーションの実行要求を受け付けると、前記仮想環境に立ち上げられるコンテナであって前記アプリケーションを起動するコンテナが使用するメモリ領域の一部と、前記第2のOSが使用するメモリ領域に含まれる前記アプリケーションの実行に使用されるメモリ領域とを共有し、前記共有したメモリ領域で、前記第1のOSを操作するコマンドを用いて前記第1のOS上の前記アプリケーションを起動する処理を、コンピュータに実行させる。
【発明の効果】
【0011】
1実施態様によれば、仮想環境から最上位のホストOSに具備されている各種アプリケーションをシームレスに操作することができる。
【図面の簡単な説明】
【0012】
【
図1】
図1は、実施例に係るホストPCのデータの関係を示すイメージ図である。
【
図2】
図2は、コンテナからWindows上アプリケーションを起動する方法を示すイメージ図である。
【
図3】
図3は、実施例に係るWSL2の機能構成の一例を示すブロック図である。
【
図4】
図4は、実施例に係るメモリの構成の一例を示す図である。
【
図5】
図5は、実施例に係るWSL2のシーケンスの一例を示すブロック図である。
【
図6】
図6は、実施例に係るメモリ共有機能部のフローチャートの一例を示す図である。
【
図7】
図7は、実施例に係るメモリ共有処理のシーケンスの一例を示す図である。
【
図8】
図8は、メモリ共有プログラムを実行するコンピュータの一例を示す図である。
【
図9】
図9は、Windowsと仮想環境との関係を示す参考図である。
【
図10】
図10は、仮想環境からの通信方法を示す参考図である。
【発明を実施するための形態】
【0013】
以下に、本願の開示するメモリ共有プログラム、情報処理装置およびメモリ共有方法の実施例を図面に基づいて詳細に説明する。実施例では、ホストPC(Personal Computer)を情報処理装置の一例として説明する。なお、本発明は、実施例により限定されるものではない。
【実施例0014】
まず、実施例では、ホストPC1は、ホストOSとしてWindows10以上のWindowsを備え、Windows上にWSL2(Windows Subsystem for Linux2)およびコンテナを仮想環境として実装する場合について説明する。WSL2は、Windowsのサブシステムであり、Windowsを備えるホストPC1上に構築されるLinux用の仮想環境である。WSL2は、Windows上のアプリケーションを含む様々なアプリケーションを操作するコンテナを生成し、起動する。なお、実施例では、WindowsのことをホストOS、LinuxのことをゲストOSという場合がある。
【0015】
[ホストPCのデータの関係]
図1は、実施例に係るホストPCのデータの関係を示すイメージ図である。
図1に示すように、ホストPC1は、ホストOSとしてWindows(20)を備える。そして、Windows(20)上にWSL2(10)およびコンテナ30が仮想環境として実装されている。ホストPC1では、コンテナからWindows(20)上のアプリケーションを起動するために、コンテナ30、WSL2(10)およびWindows(20)のメモリ領域を共有させる環境が構築される。すなわち、コンテナ30、WSL2(10)およびWindows(20)間で、データを共有するメモリ環境が構築される。
【0016】
[コンテナからWindows上のアプリケーションを起動する方法]
図2は、コンテナからWindows上アプリケーションを起動する方法を示すイメージ図である。
図2に示すように、コンテナ30およびWSL2(10)では、コンテナ30のメモリ領域とWSL2のメモリ領域内の実行フォルダの領域とを共有する。かかるメモリ領域の共有処理は、WSL2とコンテナとの間の既に設定された既設コマンド(以降、「WSL2既設コマンド」という)によって行われる。そして、コンテナ30からWSL2(10)の実行フォルダにWindows(20)上のアプリケーションを起動するために用いられる実行ファイルが設定される。かかる配置処理は、WSL2既設コマンドによって行われる。
【0017】
そして、WSL2(10)のゲストOS(Linux)が、実行ファイルを実行することで、WSL2(10)およびWindows(20)のアプリケーション領域のメモリを共有する。かかるメモリ共有処理は、WSL2(10)の既に設定された既設機能によって行われる。そして、WSL2(10)は、Windows(20)上のアプリケーションを起動する。かかるアプリケーションの起動処理は、WSL2(10)の既に設定された既設機能によって行われる。
【0018】
これにより、WSL2(10)は、コンテナ30から直接Windows20上のアプリケーションを操作しているように扱うことが可能になる。
【0019】
[WSL2の機能構成]
図3は、実施例に係るWSL2の機能構成の一例を示すブロック図である。
図3に示すように、WSL2(10)は、コマンド入力部11、コマンド実行部12、メモリ共有機能部13およびメモリ管理部14を有する。なお、メモリ共有機能部13は、共有部、配置部、起動部の一例である。
【0020】
コマンド入力部11は、コマンドを入力する。例えば、コマンド入力部11は、入力端末から利用者によって要求されるコマンドを入力する。コマンドは、Windows(20)上のアプリケーションの実行要求を示すコマンドである。コマンド実行部12は、入力されたコマンドを実行する。
【0021】
メモリ共有機能部13は、コンテナ30からホストOS上のアプリケーションを起動するために、ホストOS、ゲストOSおよびコンテナ30でそれぞれ使用するメモリ201の領域を共有する。
【0022】
例えば、メモリ共有機能部13は、Windows(20)上のアプリケーションの実行要求を受け付けると、Windows(20)上のアプリケーションの実行パスをWindows(20)に問い合わせて、問い合わせた実行パスを取得する。メモリ共有機能部13は、取得した実行パスをWSL2方式に変換するとともに、WSL2方式に変換した実行パスを使った実行ファイルを含むコンテナ30を生成し、起動する。ここでいう実行ファイルには、Windows(20)上のアプリケーションを動作させる内容が記載され、一例として、WSL2方式に変換した実行パスおよびゲストOSの定刻実行するクロン(cron)コマンドが含まれる。ここでいうクロン(cron)コマンドは、既に設定されたWindows(20)を操作するコマンドである。ここでいうWSL2方式に変換された実行パスは、Windows(20)上の実行パスにWSL2からアクセス可能となるような論理的な実行パスのことをいう。一例として、Windows(20)上の実行パスが「C:¥Windows¥~」である場合に、WSL2方式に変換すると、変換された実行パスは「/mnt/c/Windows/~」となる。メモリ共有機能部13は、変換された実行パスによって、WSL2(10)からWindows(20)上のデータへアクセスすることが可能となる。
【0023】
そして、メモリ共有機能部13は、WSL2既設コマンドを用いて、コンテナ30のメモリ領域とWSL2(10)のメモリ領域内の実行フォルダの領域とを共有する。そして、メモリ共有機能部13は、WSL2既設コマンドを用いて、実行ファイルを配置するようにコンテナ30に要求し、共有した実行フォルダの領域に実行ファイルを配置する。そして、メモリ共有機能部13は、メモリ管理部14を介して、実行ファイルを実行することで、WSL2(10)のメモリ領域内の実行フォルダの領域とWindows(20)上のアプリケーション領域との間のメモリ共有を行う。すなわち、コンテナ30、WSL2(10)およびWindows(20)のメモリ領域を共有させる環境が構築される。加えて、メモリ共有機能部13は、変換した実行パスを起動することで、Windows(20)上のアプリケーションを起動する。つまり、メモリ共有機能部13は、実行ファイルを共有することで、本来コンテナ30が参照することが不可能なWindows(20)のメモリ空間上に存在するアプリケーションを実行することが可能となる。
【0024】
メモリ管理部14は、ホストPC1上に搭載されるメモリ201を管理する。
【0025】
[メモリの構成]
ここで、実施例に係る物理的なメモリ201の構成を、
図4を参照して説明する。
図4は、実施例に係るメモリの構成の一例を示す図である。
図4に示すように、物理的なメモリ201の領域では、ホストOSであるWindows(20)の領域、WSL2(10)のゲストOSの領域およびコンテナ30の領域がそれぞれ独立し、排他された領域としてメモリがアロケート(確保)される。すなわち、ホストOSであるWindows(20)の領域は、ゲストOSやコンテナ30が参照できない領域である。WSL2(10)のゲストOSの領域は、ホストOSやコンテナ30が参照できない領域である。コンテナ30の領域は、ホストOSやゲストOSが参照できない領域である。
【0026】
メモリ共有機能部13は、メモリ管理部14を介して、ホストOS、ゲストOSおよびコンテナ30にて共有することができる共有メモリ領域Aをアロケート(確保)する。そして、メモリ共有機能部13は、共有メモリ領域Aを用いて、ホストOSが具備するアプリケーションを共用する。すなわち、メモリ共有機能部13は、共有メモリ領域Aを使用して、コンテナ30からWindows20上のアプリケーションを起動する。
【0027】
[WSL2のシーケンス]
図5は、実施例に係るWSL2のシーケンスの一例を示すブロック図である。なお、
図5におけるプロセス通信部は、実施例では不要な部分であり、従来技術と比較するために表わされる。
図5に示すように、コマンド入力部11は、入力端末からアプリケーションの実行条件を設定する(ステップS11)。コマンド実行部12は、アプリケーションの実行を要求する(ステップS12)。アプリケーションの実行要求を受け付けたメモリ共有機能部13は、ホストOS(Windows20)上のアプリケーションを実行するために、メモリ管理部14に対してメモリ共有処理を実行する(ステップS13)。なお、メモリ共有処理については、後述する。そして、メモリ管理部14は、WSL2によるメモリ共有を行い、物理的なメモリ201に対してホストOS(Windows20)を操作するコマンドを実行する(ステップS14)。すなわち、メモリ管理部14は、WSL2によるメモリ共有を行う。
【0028】
なお、従来技術におけるコンテナ30からホストOS(Windows20)上のアプリケーションを起動する方法では、WSL2(10)は、さらに、プロセス通信部を有する。プロセス通信部は、メモリ共有機能部13からアプリケーション実行設定の要求を受信すると、メモリ管理部14との間でアプリケーション実行設定に関する通信を行う。そして、メモリ管理部14は、アプリケーション実行設定を行い、実行設定に関する応答をプロセス通信部に送信する。プロセス通信部は、メモリ共有機能部13に実行設定に関する応答を送信する。すなわち、プロセス通信部は、コンテナ30とWindows(20)間の外部NW通信相当の外部通信を行い、Windows(20)上のアプリケーションを起動するための設定を行う。実施例に係るWSL2(10)では、従来必要であったプロセス通信部のアクセスが不要になる。
【0029】
[メモリ共有機能部のフローチャート]
ここで、メモリ共有機能部13によるメモリ共有処理について、
図6を参照して説明する。
図6は、実施例に係るメモリ共有機能部のフローチャートの一例を示す図である。
図6に示すように、アプリケーションの実行要求を受け付けたメモリ共有機能部13は、Windowsアプリケーションのメモリ領域を把握し、設定する(ステップS21)。すなわち、メモリ共有機能部13は、Windows(20)に対してアプリケーションの実行パス(メモリ領域)を問い合わせて、問い合わせた実行パスをWindows(20)から取得し、設定(保持)する。ここでは、メモリ201のメモリ空間に設定されたホストOS(Windows20)上のアプリケーション領域の実行パスが取得され、設定(保持)される。メモリ共有機能部13は、Windowsアプリケーションのメモリ領域の設定に成功したか否かを判定する(ステップS21A)。Windowsアプリケーションのメモリ領域の設定に失敗したと判定した場合には(ステップS21A;No)、メモリ共有機能部13は、ステップS21に移行する。
【0030】
一方、Windowsアプリケーションのメモリ領域の設定に成功したと判定した場合には(ステップS21A;Yes)、メモリ共有機能部13は、ホストOS(Windows20)上のアプリケーションの実行パスをWSL2方式に変換し、当該アプリケーションを起動するコンテナ30を生成する(ステップS22)。例えば、メモリ共有機能部13は、WSL2方式に変換した実行パスを使った実行ファイルを含めたコンテナ30を生成する。なお、かかる処理は、WSL2の既設の記載ルールに基づき行われる。ここでは、メモリ201におけるメモリ空間に、ゲストOSのアプリケーション領域が設定される。ゲストOSのアプリケーション領域およびホストOSのアプリケーション領域は、この段階では、それぞれ互いの領域を参照できない排他領域である。メモリ共有機能部13は、変換処理またはコンテナ30の生成処理に成功したか否かを判定する(ステップS22A)。変換処理またはコンテナ30の生成処理に失敗したと判定した場合には(ステップS22A;No)、メモリ共有機能部13は、ステップS21に移行する。
【0031】
一方、変換処理またはコンテナ30の生成処理に成功したと判定した場合には(ステップS22A;Yes)、メモリ共有機能部13は、WSL2共有のコンテナ30を起動する(ステップS23)。なお、かかる処理は、ゲストOSが具備している既設コマンドに基づき行われる。ここでは、メモリ201におけるメモリ空間に、コンテナ30のアプリケーション領域が設定される。コンテナ30のアプリケーション領域、ゲストOSのアプリケーション領域およびホストOSのアプリケーション領域は、この段階では、それぞれ互いの領域を参照できない排他領域である。メモリ共有機能部13は、WSL2共有コンテナの起動処理に成功したか否かを判定する(ステップS23A)。WSL2共有コンテナの起動処理に失敗したと判定した場合には(ステップS23A;No)、メモリ共有機能部13は、ステップS21に移行する。
【0032】
一方、WSL2共有コンテナの起動処理に成功したと判定した場合には(ステップS23A;Yes)、メモリ共有機能部13は、WSL2(10)のアプリケーション領域の実行フォルダとコンテナ30のアプリケ-ション領域とを共有する(ステップS24)。なお、かかる処理は、ゲストOSが具備している既設コマンドに基づき行われる。ここでは、メモリ201におけるメモリ空間では、ゲストOSにおけるアプリケーション領域の実行フォルダの領域とコンテナ30におけるアプリケーション領域とが共有メモリ領域となる。メモリ共有機能部13は、WSL2(10)のアプリケーション領域の実行フォルダとコンテナ30のアプリケ-ション領域との共有処理に成功したか否かを判定する(ステップS24A)。WSL2(10)のアプリケーション領域の実行フォルダとコンテナ30のアプリケ-ション領域との共有処理に失敗したと判定した場合には(ステップS24A;No)、メモリ共有機能部13は、ステップS21に移行する。
【0033】
一方、WSL2(10)のアプリケーション領域の実行フォルダとコンテナ30のアプリケ-ション領域との共有処理に成功したと判定した場合には(ステップS24A;Yes)、メモリ共有機能部13は、以下の処理を行う。すなわち、メモリ共有機能部13は、WSL2(10)のアプリケーション領域における実行フォルダの領域に実行ファイルを配置する(ステップS25)。例えば、メモリ共有機能部13は、コンテナ30に対して実行ファイルを配置するように要求し、WSL2(10)のアプリケーション領域における実行フォルダの領域に実行ファイルを配置する。なお、かかる処理は、WSL2既設コマンドに基づき行われる。メモリ共有機能部13は、配置処理に成功したか否かを判定する(ステップS25A)。配置処理に失敗したと判定した場合には(ステップS25A;No)、メモリ共有機能部13は、ステップS21に移行する。
【0034】
一方、配置処理に成功したと判定した場合には(ステップS25A;Yes)、メモリ共有機能部13は、実行ファイルの実行によって、Windows20上のアプリケーションの実行パスへ共有を行う(ステップS26)。すなわち、メモリ共有機能部13は、WSL2(10)のメモリ領域内の実行フォルダの領域とWindows(20)上のアプリケーション領域との間のメモリ共有を行う。なお、かかる処理は、WSL2既設機能に基づき行われる。ここでは、メモリ201におけるメモリ空間では、ホストOSにおけるアプリケーション領域とゲストOSにおけるアプリケーション領域とが共有メモリ領域となる。つまり、コンテナ30のアプリケーション領域、ゲストOSのアプリケーション領域およびホストOSのアプリケーション領域は、各OS層にて共有することができる共有メモリ領域となる。メモリ共有機能部13は、共有処理に成功したか否かを判定する(ステップS26A)。共有処理に失敗したと判定した場合には(ステップS26A;No)、メモリ共有機能部13は、ステップS21に移行する。
【0035】
一方、共有処理に成功したと判定した場合には(ステップS26A;Yes)、メモリ共有機能部13は、Windows(20)上のアプリケーションの実行パスを起動する(ステップS27)。すなわち、メモリ共有機能部13は、WSL2方式に変換された実行パスを起動する。なお、かかる処理は、WSL2既設機能に基づき行われる。これにより、メモリ共有機能部13は、コンテナ30から直接Windows(20)上のアプリケーションを起動しているように扱うことが可能となる。メモリ共有機能部13は、起動処理に成功したか否かを判定する(ステップS27A)。起動処理に失敗したと判定した場合には(ステップS27A;No)、メモリ共有機能部13は、ステップS21に移行する。一方、起動処理に成功したと判定した場合には(ステップS27A;Yes)、メモリ共有機能部13は、メモリ共有機能部13によるメモリ共有処理を終了する。
【0036】
[メモリ共有処理のシーケンス]
図7は、実施例に係るメモリ共有処理のシーケンスの一例を示す図である。なお、メモリ共有機能部13は、アプリケーションの実行要求を受け付けたものとする。
【0037】
図7に示すように、メモリ共有機能部13は、Windows(20)に対して、Windows(20)のアプリケーション領域を問い合わせる(ステップS31)。すなわち、メモリ共有機能部13は、Windows(20)に対して、アプリケーションの実行パス(メモリ領域)を問い合わせる。そして、メモリ共有機能部13は、Windows(20)から問合せに対する通知を受け取る(ステップS32)。すなわち、メモリ共有機能部13は、Windows(20)からアプリケーションの実行パス(メモリ領域)を受け取る。
【0038】
メモリ共有機能部13は、WSL2の既設の記載ルールを用いて、アプリケーションの実行パスをWSL2方式に変換し、当該アプリケーションを起動するコンテナ30を生成する(ステップS33)。例えば、メモリ共有機能部13は、WSL2方式に変換した実行パスを使った実行ファイルを含めたコンテナ30を生成する。そして、メモリ共有機能部13は、ゲストOSが具備している既設コマンドを用いて、生成したWSL2共有のコンテナ30を起動する(ステップS34)。
【0039】
すると、コンテナ30は、ゲストOSが具備している既設コマンドを用いて、WSL2(10)のアプリケーション領域の実行フォルダとコンテナ30のアプリケ-ション領域とを共有する(ステップS35)。これにより、ゲストOSにおけるアプリケーション領域の実行フォルダの領域とコンテナ30におけるアプリケーション領域とが共有メモリ空間となる。
【0040】
続いて、メモリ共有機能部13は、WSL2既設コマンドを用いて、WSL2(10)のアプリケーション領域における実行フォルダの領域に実行ファイルを配置する(ステップS36)。例えば、メモリ共有機能部13は、コンテナ30に対して実行ファイルを配置するように要求し、WSL2(10)のアプリケーション領域における実行フォルダの領域に実行ファイルを配置する。
【0041】
そして、WSL2(10)は、WSL2既設機能を用いて、実行ファイルの実行によって、Windows(20)上のアプリケーションの実行パスへ共有を行う(ステップS37)。すなわち、WSL2(10)は、WSL2(10)のメモリ領域内の実行フォルダの領域とWindows(20)上のアプリケーション領域との間のメモリ共有を行う。つまり、コンテナ30のアプリケーション領域、ゲストOSのアプリケーション領域およびホストOSのアプリケーション領域は、各OS層にて共有することができる共有メモリ領域となる。
【0042】
そして、WSL2(10)は、WSL2既設機能を用いて、Windows(20)上のアプリケーションの実行パスを起動する(ステップS38)。すなわち、WSL2(10)は、WSL2方式に変換された実行パスを起動する。これにより、コンテナ30は、直接Windows(20)上のアプリケーションを起動しているように扱うことが可能になる。言い換えれば、コンテナ30は、共有空間によりWindows(20)に具備されている各種アプリケーションをシームレスに実行することが可能になる。
【0043】
[実施例の効果]
上記実施例によれば、ホストPC1は、最上位の第1のOS上に、第2のOS用の仮想環境を備える。ホストPC1は、アプリケーションの実行要求を受け付けると、仮想環境に立ち上げられるコンテナであってアプリケーションを起動するコンテナが使用するメモリ領域の一部と、第2のOSが使用するメモリ領域に含まれるアプリケーションの実行に使用されるメモリ領域とを共有する。そして、ホストPC1は、共有したメモリ領域で、第1のOSを操作するコマンドを用いて第1のOS上のアプリケーションを起動する。かかる構成によれば、ホストPC1は、第1のOS、第2のOSおよびコンテナ間のアプリケーション領域を共有することで、アプリケーションをシームレスに操作できるマイクロサービスを提供できる。すなわち、ホストPC1は、複雑なセキュリティ設定や専用通信ソフトウェアがなくても、第1のOS上のアプリケーションをコンテナから操作可能な環境を構築できる。
【0044】
また、上記実施例によれば、ホストPC1は、第1のOS上のアプリケーションの実行パスを、第1のOSから取得する。ホストPC1は、アプリケーションの実行パスを仮想環境からアクセス可能となるように変換して、アプリケーションの変換した実行パスおよび第1のOSを操作するコマンドを含むコンテナを仮想環境に立ち上げる。ホストPC1は、コンテナが使用するメモリ領域の一部と、第2のOSが使用するメモリ領域に含まれるアプリケーションの実行に使用されるメモリ領域とを共有する。かかる構成によれば、ホストPC1は、コンテナから第1のOS上のアプリケーションをシームレスに操作する環境を構築できる。
【0045】
また、上記実施例によれば、ホストPC1は、コンテナから、アプリケーションの変換した実行パスおよび第1のOSを操作するコマンドを含む実行ファイルを、コンテナと第2のOSとの共有されたメモリ領域に配置する。かかる構成によれば、ホストPC1は、実行ファイルをコンテナと第2のOSとの共有されたメモリ領域に配置することで、コンテナから第1のOS上のアプリケーションをシームレスに操作する環境を構築することが可能になる。
【0046】
また、上記実施例によれば、ホストPC1は、共有されたメモリ領域で、第1のOSを操作するコマンドを含む実行ファイルを用いて、アプリケーションの変換した実行パスを起動する。かかる構成によれば、ホストPC1は、共有されたメモリ領域で実行ファイルを用いることで、コンテナから第1のOS上のアプリケーションをシームレスに起動することができる。
【0047】
[その他]
なお、上記実施例では、メモリ共有機能部13は、WSL2既設コマンドやゲストOSが具備する既設コマンドを用いて、ホストOS、ゲストOSおよびコンテナ30でそれぞれ使用するメモリ201のアプリケーション領域を共有する。そして、メモリ共有機能部13は、WSL2既設コマンドを用いて、ホストOS上のアプリケーションを起動する。したがって、メモリ共有機能部13は、既設コマンドを利用するので、WSL2を具備するホストOSであれば、共通的に実施することができる。
【0048】
また、上記実施例では、ホストPC1が、ホストOSとしてWindows(20)を備え、Windows(20)上にWSL2(10)およびコンテナ30を仮想環境として実装する場合について説明した。しかしながら、ホストPC1は、これに限定されず、Windows(20)とは異なるホストOS上にコンテナ30を含む仮想環境を提供する場合についても、共通的に実施することが可能である。
【0049】
また、上記実施例では、図示したホストPC1に含まれるWSL2(10)の各構成要素は、必ずしも物理的に図示の如く構成されていることを要しない。すなわち、WSL2(10)の分散・統合の具体的態様は図示のものに限られず、その全部または一部を、各種の負荷や使用状況などに応じて、任意の単位で機能的または物理的に分散・統合して構成することができる。例えば、コマンド入力部11とコマンド実行部12とを1つの部として統合しても良い。また、メモリ共有機能部13を、アプリケーションの実行パスを変換する処理部と、変換した実行パスを使った実行ファイルを含むコンテナを起動する処理部と、実行ファイルを配置する配置部と、実行ファイルを実行する実行部と、に分散しても良い。
【0050】
また、上記実施例で説明した各種の処理は、予め用意されたプログラムをパーソナルコンピュータやワークステーションなどのコンピュータで実行することによって実現することができる。そこで、以下では、
図3に示したWSL2(10)を含むホストPC1と同様の機能を実現するメモリ共有プログラムを実行するコンピュータの一例を説明する。
図8は、メモリ共有プログラムを実行するコンピュータの一例を示す図である。
【0051】
図8に示すように、コンピュータ200は、各種演算処理を実行するCPU(Central Processing Unit)203と、ユーザからのデータの入力を受け付ける入力装置215と、表示装置209とを有する。また、コンピュータ200は、記憶媒体からプログラムなどを読取るドライブ装置213と、ネットワークを介して他のコンピュータとの間でデータの授受を行う通信I/F(Interface)217とを有する。また、コンピュータ200は、各種情報を一時記憶するメモリ201と、HDD(Hard Disk Drive)205を有する。そして、メモリ201、CPU203、HDD205、表示装置209、ドライブ装置213、入力装置215、通信I/F217は、バス219で接続されている。
【0052】
ドライブ装置213は、例えばリムーバブルディスク211用の装置である。HDD205は、メモリ共有プログラム205aおよびメモリ共有処理関連情報205bを記憶する。通信I/F217は、ネットワークと装置内部とのインターフェースを司り、他のコンピュータからのデータの入出力を制御する。通信I/F217には、例えば、モデムやLANアダプタなどを採用することができる。
【0053】
表示装置209は、カーソル、アイコンあるいはツールボックスをはじめ、文書、画像、機能情報などのデータを表示する表示装置である。表示装置209は、例えば、液晶ディスプレイや有機EL(Electroluminescence)ディスプレイなどを採用することができる。
【0054】
CPU203は、メモリ共有プログラム205aを読み出して、メモリ201に展開し、プロセスとして実行する。かかるプロセスはWSL2(10)の各機能部に対応する。メモリ共有処理関連情報205bには、例えば、WSL2既設定記載ルール、WSL2既設定コマンド、ゲストOSが具備している既設コマンドが含まれる。そして、例えばリムーバブルディスク211が、メモリ共有プログラム205aなどの各情報を記憶する。
【0055】
なお、メモリ共有プログラム205aについては、必ずしも最初からHDD205に記憶させておかなくても良い。例えば、コンピュータ200に挿入されるフレキシブルディスク(FD)、CD-ROM、DVDディスク、光磁気ディスク、ICカードなどの「可搬用の物理媒体」に当該プログラムを記憶させておく。そして、コンピュータ200がこれらからメモリ共有プログラム205aを読み出して実行するようにしても良い。
【0056】
以上の実施例を含む実施形態に関し、さらに以下の付記を開示する。
【0057】
(付記1)最上位の第1のOS上に、第2のOS用の仮想環境を備えるコンピュータにおけるメモリ共有プログラムであって、
アプリケーションの実行要求を受け付けると、前記仮想環境に立ち上げられるコンテナであって前記アプリケーションを起動するコンテナが使用するメモリ領域の一部と、前記第2のOSが使用するメモリ領域に含まれる前記アプリケーションの実行に使用されるメモリ領域とを共有し、
前記共有したメモリ領域で、前記第1のOSを操作するコマンドを用いて前記第1のOS上の前記アプリケーションを起動する
処理をコンピュータに実行させるメモリ共有プログラム。
【0058】
(付記2)前記共有する処理は、
前記第1のOS上の前記アプリケーションの実行パスを、前記第1のOSから取得し、
前記アプリケーションの実行パスを前記仮想環境からアクセス可能となるように変換して、前記アプリケーションの変換した実行パスおよび前記第1のOSを操作するコマンドを含むコンテナを前記仮想環境に立ち上げ、
前記コンテナが使用するメモリ領域の一部と、前記第2のOSが使用するメモリ領域に含まれる前記アプリケーションの実行に使用されるメモリ領域とを共有する
ことを特徴とする付記1に記載のメモリ共有プログラム。
【0059】
(付記3)前記コンテナから、前記アプリケーションの変換した実行パスおよび前記第1のOSを操作するコマンドを含む実行ファイルを、前記コンテナと前記第2のOSとの共有されたメモリ領域に配置する
ことを特徴とする付記2に記載のメモリ共有プログラム。
【0060】
(付記4)前記起動する処理は、前記共有されたメモリ領域で、前記第1のOSを操作するコマンドを含む前記実行ファイルを用いて、前記アプリケーションの変換した実行パスを起動する
ことを特徴とする付記3に記載のメモリ共有プログラム。
【0061】
(付記5)最上位の第1のOS上に、第2のOS用の仮想環境を備える情報処理装置であって、
アプリケーションの実行要求を受け付けると、前記仮想環境に立ち上げられるコンテナであって前記アプリケーションを起動するコンテナが使用するメモリ領域の一部と、前記第2のOSが使用するメモリ領域に含まれる前記アプリケーションの実行に使用されるメモリ領域とを共有する共有部と、
前記共有部によって共有されたメモリ領域で、前記第1のOSを操作するコマンドを用いて前記第1のOS上の前記アプリケーションを起動する起動部と、
を有することを特徴とする情報処理装置。
【0062】
(付記6)前記共有部は、
前記第1のOS上の前記アプリケーションの実行パスを、前記第1のOSから取得し、
前記アプリケーションの実行パスを前記仮想環境からアクセス可能となるように変換して、前記アプリケーションの変換した実行パスおよび前記第1のOSを操作するコマンドを含むコンテナを前記仮想環境に立ち上げ、
前記コンテナが使用するメモリ領域の一部と、前記第2のOSが使用するメモリ領域に含まれる前記アプリケーションの実行に使用されるメモリ領域とを共有する
ことを特徴とする付記5に記載の情報処理装置。
【0063】
(付記7)前記コンテナから、前記アプリケーションの変換した実行パスおよび前記第1のOSを操作するコマンドを含む実行ファイルを、前記コンテナと前記第2のOSとの共有されたメモリ領域に配置する配置部
を更に含むことを特徴とする付記6に記載の情報処理装置。
【0064】
(付記8)前記起動部は、前記共有されたメモリ領域で、前記第1のOSを操作するコマンドを含む前記実行ファイルを用いて、前記アプリケーションの変換した実行パスを起動する
ことを特徴とする付記7に記載の情報処理装置。
【0065】
(付記9)最上位の第1のOS上に、第2のOS用の仮想環境を備えるコンピュータにおけるメモリ共有方法であって、
アプリケーションの実行要求を受け付けると、前記仮想環境に立ち上げられるコンテナであって前記アプリケーションを起動するコンテナが使用するメモリ領域の一部と、前記第2のOSが使用するメモリ領域に含まれる前記アプリケーションの実行に使用されるメモリ領域とを共有し、
前記共有したメモリ領域で、前記第1のOSを操作するコマンドを用いて前記第1のOS上の前記アプリケーションを起動する
処理をコンピュータが実行するメモリ共有方法。
【0066】
(付記10)前記共有する処理は、
前記第1のOS上の前記アプリケーションの実行パスを、前記第1のOSから取得し、
前記アプリケーションの実行パスを前記仮想環境からアクセス可能となるように変換して、前記アプリケーションの変換した実行パスおよび前記第1のOSを操作するコマンドを含むコンテナを前記仮想環境に立ち上げ、
前記コンテナが使用するメモリ領域の一部と、前記第2のOSが使用するメモリ領域に含まれる前記アプリケーションの実行に使用されるメモリ領域とを共有する
ことを特徴とする付記9に記載のメモリ共有方法。
【0067】
(付記11)前記コンテナから、前記アプリケーションの変換した実行パスおよび前記第1のOSを操作するコマンドを含む実行ファイルを、前記コンテナと前記第2のOSとの共有されたメモリ領域に配置する
処理を更に含むことを特徴とする付記10に記載のメモリ共有方法。
【0068】
(付記12)前記起動する処理は、前記共有されたメモリ領域で、前記第1のOSを操作するコマンドを含む前記実行ファイルを用いて、前記アプリケーションの変換した実行パスを起動する
ことを特徴とする付記11に記載のメモリ共有方法。