(57)【要約】【課題】  複数の実行環境で動作するプロセスにおける共有メモリを用いたプロセス間通信を実現する。【解決手段】  本発明の情報処理装置は、物理メモリと、データを共有する複数のプロセスと、データを共有するため共有メモリと、共有メモリの仮想メモリアドレスを処理する仮想メモリアドレス処理手段とを含むコンテナとを含み、仮想メモリアドレスと物理メモリのアドレスとの第１の対応関係と、共有メモリとなっている物理メモリのアドレス間の第２の対応関係とを基に、共有メモリに書き込みデータとその仮想メモリアドレスとを受信した場合に、仮想メモリアドレスに対応する物理メモリのアドレスにデータを書き込み、さらに、第２の対応関係を基に共有メモリとなっている第２の物理メモリのアドレスを特定し、特定したアドレスにデータを書き込む。【選択図】  図１
2016173741.tif 000002
【特許請求の範囲】
【請求項１】
データを記憶する物理メモリと、
他のプロセスとデータを共有する複数のプロセスと、
前記複数のプロセス間でデータを共有するための仮想メモリである共有メモリと、
前記共有メモリの仮想メモリアドレスを処理する仮想メモリアドレス処理手段とを含む複数のコンテナと、
前記複数のコンテナに含まれる共有メモリの仮想メモリアドレスと前記物理メモリのアドレスとの対応である第１の対応関係と、前記複数のコンテナにおける共有メモリに対応する物理メモリアドレス間の対応であり第２の対応関係とを基に、
前記いずれかコンテナに含まれる前記仮想メモリアドレス処理手段から書き込みデータと前記データを書き込む前記共有メモリのアドレスである仮想メモリアドレスとを受信した場合に、前記仮想メモリアドレスに対応する第１の物理メモリのアドレスに前記受信したデータを書き込み、
前記第２の対応関係を基に、前記第１の物理メモリのアドレスに対応する第２の物理メモリのアドレスを取得し、前記第２の物理メモリのアドレスに前記受信したデータを書き込むコンテナ接続手段を含むホストＯＳと
を含む情報処理装置。
【請求項２】
前記ホストＯＳが
前記コンテナからプロセス及びコンテナに関連する情報を受信する情報受信手段と、
前記情報を基に含まれているコンテナの再配置が必要なプロセスを判定する再配置判定手段と、
再配置が必要と判定されたプロセスを動作可能な環境に再配置する再配置処理手段と、
前記プロセスの再配置後に前記プロセスのための環境の再配置が必要か否かを判定する配置先判定手段と、
前記配置先判定手段において環境の再配置が必要と判定された場合に、環境を再配置する配置処理手段と
を含むプロセス配置手段をさらに含む
請求項１に記載の情報処理装置。
【請求項３】
前記コンテナ接続手段が、
他の装置とデータを通信するデータ通信手段をさらに含み、
前記第２の物理メモリのアドレスが、前記他の装置の物理メモリの場合、前記データ通信手段を介して、前記他の装置にデータを送信して、前記他の装置に送信したデータの前記第２の物理メモリへの書き込みを依頼する
請求項１又は２に記載の情報処理装置。
【請求項４】
前記プロセス配置手段が、
前記ホストＯＳの版数を確認する版数確認手段と、
前記他の装置に通信するプロセス通信手段とをさらに含み、
前記版数確認手段が、前記プロセス通信手段を介して、前記他の装置のホストＯＳの版数を確認し、
前記再配置判定手段が、前記版数確認手段が確認した前記ホストＯＳの版数を用いて再配置を判定し、
前記再配置判定手段が、再配置が必要と判定されたプロセスの再配置先が前記他の装置の場合、前記プロセス通信手段を介して、前記他の装置にプロセスの再配置を依頼する
請求項３に記載の情報処理装置。
【請求項５】
データを記憶する物理メモリと、
他のプロセスとデータを共有する複数のプロセスと、
前記複数のプロセス間でデータを共有するための仮想メモリである共有メモリと、
前記共有メモリの仮想メモリアドレスを処理する仮想メモリアドレス処理手段とを含む複数のコンテナとを含む情報処理装置において、
前記複数のコンテナに含まれる共有メモリの仮想メモリアドレスと前記物理メモリのアドレスとの対応である第１の対応関係と、前記複数のコンテナにおける共有メモリに対応する物理メモリアドレス間の対応であり第２の対応関係とを基に、
前記いずれかコンテナに含まれる前記仮想メモリアドレス処理手段から書き込みデータと前記データを書き込む前記共有メモリのアドレスである仮想メモリアドレスとを受信した場合に、前記仮想メモリアドレスに対応する第１の物理メモリのアドレスに前記受信したデータを書き込み、
前記第２の対応関係を基に、前記第１の物理メモリのアドレスに対応する第２の物理メモリのアドレスを取得し、前記第２の物理メモリのアドレスに前記受信したデータを書き込む
情報処理方法。
【請求項６】
データを記憶する物理メモリと、
他のプロセスとデータを共有する複数のプロセスと、
前記複数のプロセス間でデータを共有するための仮想メモリである共有メモリと、
前記共有メモリの仮想メモリアドレスを処理する仮想メモリアドレス処理手段とを含む複数のコンテナとを含むコンピュータにおいて、
前記複数のコンテナに含まれる共有メモリの仮想メモリアドレスと前記物理メモリのアドレスとの対応である第１の対応関係と、前記複数のコンテナにおける共有メモリに対応する物理メモリアドレス間の対応であり第２の対応関係とを基に、
前記いずれかコンテナに含まれる前記仮想メモリアドレス処理手段から書き込みデータと前記データを書き込む前記共有メモリのアドレスである仮想メモリアドレスとを受信した場合に、前記仮想メモリアドレスに対応する第１の物理メモリのアドレスに前記受信したデータを書き込む処理と、
前記第２の対応関係を基に、前記第１の物理メモリのアドレスに対応する第２の物理メモリのアドレスを取得し、前記第２の物理メモリのアドレスに前記受信したデータを書き込む処理と
をコンピュータに実行させるプログラム。
【発明の詳細な説明】
【技術分野】
【０００１】
本発明は、アプリケーション、プロセス、又はタスクなどのソフトウェア間の通信に関し、特に、ソフトウェアを実行する環境間において通信する情報処理装置、情報処理方法、及びプログラムに関する。
【背景技術】
【０００２】
複数のプロセスを用いて動作するアプリケーションは、動作している複数のプロセスを連携させるために、プロセス間通信を用いる（例えば、特許文献１を参照）。プロセスが、同一の装置上で動作している場合、プロセス間通信の一つとして、共有メモリを介したプロセス間通信が、用いられている（例えば、特許文献１及び３を参照）。
【０００３】
アプリケーションは、プロセス間通信を用いて、複数のプロセスの組み合わせた機能を実現できる。そのため、アプリケーションは、想定される全ての機能を含む大きなプロセスを用いるのではなく、必要な各機能を実現する小さなプロセスの組合せを用いて、所望の機能を実現できる。つまり、アプリケーションは、必要となるプロセス量を削減できる。プロセスの量が少なくすることは、エラーなどの不具合の要因の混入の可能性を低減できる。また、プロセスの量が少なくすることは、不要な処理の削減にもつながる。つまり、プロセス間通信は、アプリケーションの実行における、信頼性の向上及びパフォーマンス向上などの効果を奏することができる。
【０００４】
また、アプリケーション（及びそのプロセス）は、少なくとも一部の機能として、アプリケーション（及びそのプロセス）が動作する実行環境（例えば、ＯＳ（Operating System）、及び、そのＯＳ上で動作するライブラリ）の機能を用いている。しかし、ＯＳ及びライブラリは、セキュリティ対策又は機能追加のために、改版（バージョンアップ）される。さらに、ＯＳの改版の時期とライブラリの改版の時期とは、必ずしも、一致するとは限らない。そのため、アプリケーションが用いるプロセスの一部が、改版後の新しい実行環境（ＯＳ又はライブラリ）で動作しなくなる場合がある。
【０００５】
また、アプリケーションが動作する情報処理装置では、情報処理装置の実行環境を仮想化する技術が、用いられている（例えば、特許文献２を参照）。仮想化技術には、例えば、サーバなどの装置をソフトウェアで仮想化する仮想化装置（ＶＭ：Virtual Machine）がある。また、ＯＳレベルの仮想化として、コンテナを用いた仮想化技術がある。
【０００６】
そこで、実行環境の改版の伴い、一部のプロセスが動作しなくなった場合、アプリケーションの使用者は、仮想化技術を用いて、次のようにアプリケーションの実行を実現できる。すなわち、アプリケーションが動作する情報処理装置は、新しい実行環境では動作できないプロセスが動作可能である古い実行環境（旧版の実行環境）と、新しい実行環境（新版の実行環境）とを起動する。そして、アプリケーションは、動作しなくなったプロセスを旧版の環境で動作させ、その他のプロセスを新版の実行環境で動作させる。このような構成を基に、アプリケーションは、動作しなくなったプロセスを実行させることができる。
【先行技術文献】
【特許文献】
【０００７】
【特許文献１】特開２０１４−１６４３５８号公報
【特許文献２】特開２０１１−２３３１４６号公報
【特許文献３】特開２００５−１３５３８２号公報
【発明の概要】
【発明が解決しようとする課題】
【０００８】
ただし、一般的に、仮想化された実行環境は、相互に隔離されている。つまり、旧版の実行環境と、新版の実行環境とは、隔離されている。そのため、仮想化された実行環境は、実行環境間でのメモリの共有など、リソースを共有できない。つまり、共有メモリを用いて通信するプロセスを含むアプリケーションは、複数の実行環境にプロセスを配置した場合、プロセス間通信を実行できない。そのため、旧版の実行環境と、新版の実行環境とを用いる場合、アプリケーションの利用者は、アプリケーション又はプロセスを改造する必要があった。
【０００９】
このように、特許文献１ないし３に記載の技術は、プロセス間通信に共有メモリを用いるアプリケーションに対応できないという問題点があった。あるいは、特許文献１ないし３に記載の技術は、アプリケーション又はプロセスにおけるプロセス間通信の部分の改造が必要であるという問題点があった。
【００１０】
発明の目的は、上記問題を解決し、プロセス間通信に関する部分の改造を必要としないで、複数の実行環境で動作するプロセスにおける共有メモリを用いたプロセス間通信を実現する情報処理装置、情報処理方法、及び、プログラムを提案することにある。
【課題を解決するための手段】
【００１１】
本発明の一形態における情報処理装置は、データを記憶する物理メモリと、他のプロセスとデータを共有する複数のプロセスと、複数のプロセス間でデータを共有するための仮想メモリである共有メモリと、共有メモリの仮想メモリアドレスを処理する仮想メモリアドレス処理手段とを含む複数のコンテナと、複数のコンテナに含まれる共有メモリの仮想メモリアドレスと物理メモリのアドレスとの対応である第１の対応関係と、複数のコンテナにおける共有メモリに対応する物理メモリアドレス間の対応であり第２の対応関係とを基に、いずれかコンテナに含まれる仮想メモリアドレス処理手段から書き込みデータとデータを書き込む共有メモリのアドレスである仮想メモリアドレスとを受信した場合に、仮想メモリアドレスに対応する第１の物理メモリのアドレスに受信したデータを書き込み、第２の対応関係を基に、第１の物理メモリのアドレスに対応する第２の物理メモリのアドレスを取得し、第２の物理メモリのアドレスに受信したデータを書き込むコンテナ接続手段を含むホストＯＳとを含む。
【００１２】
本発明の一形態におけるデータ処理方法は、データを記憶する物理メモリと、他のプロセスとデータを共有する複数のプロセスと、複数のプロセス間でデータを共有するための仮想メモリである共有メモリと、共有メモリの仮想メモリアドレスを処理する仮想メモリアドレス処理手段とを含む複数のコンテナとを含む情報処理装置において、複数のコンテナに含まれる共有メモリの仮想メモリアドレスと物理メモリのアドレスとの対応である第１の対応関係と、複数のコンテナにおける共有メモリに対応する物理メモリアドレス間の対応であり第２の対応関係とを基に、いずれかコンテナに含まれる仮想メモリアドレス処理手段から書き込みデータとデータを書き込む共有メモリのアドレスである仮想メモリアドレスとを受信した場合に、仮想メモリアドレスに対応する第１の物理メモリのアドレスに受信したデータを書き込み、第２の対応関係を基に、第１の物理メモリのアドレスに対応する第２の物理メモリのアドレスを取得し、第２の物理メモリのアドレスに受信したデータを書き込む。
【００１３】
本発明の一形態におけるプログラムは、データを記憶する物理メモリと、他のプロセスとデータを共有する複数のプロセスと、複数のプロセス間でデータを共有するための仮想メモリである共有メモリと、共有メモリの仮想メモリアドレスを処理する仮想メモリアドレス処理手段とを含む複数のコンテナとを含むコンピュータにおいて、複数のコンテナに含まれる共有メモリの仮想メモリアドレスと物理メモリのアドレスとの対応である第１の対応関係と、複数のコンテナにおける共有メモリに対応する物理メモリアドレス間の対応であり第２の対応関係とを基に、いずれかコンテナに含まれる仮想メモリアドレス処理手段から書き込みデータとデータを書き込む共有メモリのアドレスである仮想メモリアドレスとを受信した場合に、仮想メモリアドレスに対応する第１の物理メモリのアドレスに受信したデータを書き込む処理と、第２の対応関係を基に、第１の物理メモリのアドレスに対応する第２の物理メモリのアドレスを取得し、第２の物理メモリのアドレスに受信したデータを書き込む処理とをコンピュータに実行させる。
【発明の効果】
【００１４】
本発明に基づけば、プロセス間通信に関する部分の改造を必要としないで、複数の実行環境で動作するプロセスにおける共有メモリを用いたプロセス間通信を実現するとの効果を奏することができる。
【図面の簡単な説明】
【００１５】
【図１】図１は、本発明における第１の実施形態に係る情報処理装置の構成の一例を示すブロック図である。
【図２】図２は、第１の実施形態に係るプロセス配置部の構成の一例を示すブロック図である。
【図３】図３は、第１の実施形態に係るコンテナ接続部の構成の一例を示すブロック図である。
【図４】図４は、第１の実施形態に係るプロセス配置部の動作の一例を示すフローチャートである。
【図５】図５は、第１の実施形態に係るコンテナ接続部の動作の一例を示すフローチャートである。
【図６】図６は、第１の実施形態に係る再配置判定部の動作の一例を示すフローチャートである。
【図７】図７は、第１の実施形態に係る配置先判定部の動作の一例を示すフローチャートである。
【図８】図８は、第１の実施形態に係る物理メモリ共有部の動作の一例を示すフローチャートである。
【図９】図９は、第１の実施形態に係るコンテナ情報の一例を示す図である。
【図１０】図１０は、第１の実施形態に係るプロセス設計情報の一例を示す図である。
【図１１】図１１は、第１の実施形態に係る構成情報の一例を示す図である。
【図１２】図１２は、第１の実施形態に係る仮想メモリアドレスの一例を示す図である。
【図１３】図１３は、第１の実施形態に係るメモリアドレス対応表の一例を示す図である。
【図１４】図１４は、第１の実施形態に係る物理メモリアドレス対応表の一例を示す図である。
【図１５】図１５は、第１の実施形態に係るライブラリ情報の一例を示す図である。
【図１６】図１６は、第１の実施形態に係る情報処理装置の変形例の構成の一例を示すブロック図である。
【図１７】図１７は、第１の実施形態に係る情報処理装置の要部の構成の一例を示すブロック図である。
【図１８】図１８は、第２の実施形態に係る情報処理装置を含む情報処理システムの構成の一例を示すブロック図である。
【図１９】図１９は、第２の実施形態に係るプロセス配置部の構成の一例を示すブロック図である。
【図２０】図２０は、第２の実施形態に係るコンテナ接続部の構成の一例を示すブロック図である。
【図２１】図２１は、第２の実施形態に係るプロセス再配置情報の一例を示す図である。
【図２２】図２２は、第２の実施形態に係るプロセス設計情報の一例を示す図である。
【図２３】図２３は、第２の実施形態に係る版数情報の一例を示す図である。
【図２４】図２４は、一般的な、一つのコンテナを含む情報処理装置の構成の一例を示すブロック図である。
【図２５】図２５は、一般的な、二つのコンテナを含む情報処理装置の構成の一例を示すブロック図である。
【発明を実施するための形態】
【００１６】
次に、本発明の実施形態について図面を参照して説明する。
【００１７】
なお、各図面は、本発明の実施形態を説明するものである。ただし、本発明は、各図面の記載に限られるわけではない。また、各図面の同様の構成には、同じ番号を付し、その繰り返しの説明を、省略する場合がある。
【００１８】
また、以下の説明に用いる図面において、本発明の説明に関係しない部分の構成については、記載を省略し、図示しない場合もある。
【００１９】
なお、以下の実施形態の説明では、ＯＳ（Operating System）レベルの仮想化として、コンテナの技術を用いて説明する。ただし、これは、本実施形態を、コンテナに限定するものではない。本実施形態は、コンテナと同様に、ＯＳレベルでの仮想化であれば、他の仮想化を用いてもよい。
【００２０】
また、以下の説明では、コンテナ内での動作として、プロセス間における共有メモリを用いる動作について説明する。ただし、これは、本実施形態を、プロセス及び共有メモリに限定するものではない。本実施形態は、プロセスに限らず、アプリケーション、タスク、モジュール、又はスレッドなど仮想環境内で動作する動作単位が、メモリ又はＩＯデバイス（Input Output device）などのリソースを共有する機能を備えていれば、適用可能である。
【００２１】
（説明の前提）
まず、本発明の実施形態を説明するための前提として、一般的なコンテナについて、図を参照して説明する。まず、コンテナが一つの場合について説明する。
【００２２】
図２４は、一般的な、一つのコンテナを含む情報処理装置９０の構成の一例を示すブロック図である。図２４に示すように、情報処理装置９０は、ホストＯＳ９１０と、コンテナ９２０とを含む。
【００２３】
ホストＯＳ９１０は、一般的なＯＳとしての処理に加え、コンテナを管理する処理を実現する。そのため、ホストＯＳ９１０は、コンテナ管理部９１２を含む。
【００２４】
コンテナ９２０は、コンテナ管理部９１２に管理されて、ホストＯＳ９１０上での仮想的な実行環境としてのコンテナの機能を実現する。そして、コンテナ９２０は、複数のプロセス２２０における共有メモリ２３０の共有動作を実現する。そのため、プロセス２２０は、共有メモリ２３０を介したプロセス間通信を実現できる。
【００２５】
次に、複数のコンテナの例として、二つのコンテナの場合について説明する。
【００２６】
図２５は、一般的な、二つのコンテナを含む情報処理装置９１の構成の一例を示すブロック図である。図２５に示すように、情報処理装置９０は、ホストＯＳ９１０と、二つのコンテナ９２０とを含む。
【００２７】
図２５に示すプロセス２２０は、各コンテナ９２０内では、図２４と同様に、共有メモリ２３０を介したプロセス間通信を実現できる。しかし、各コンテナ９２０は、隔離されている。つまり、各コンテナ９２０における共有メモリ２３０は、隔離されている。そのため、プロセス２２０は、他のコンテナ９２０内の共有メモリ２３０にアクセスできない。つまり、プロセス２２０は、他のコンテナ９２０で動作するプロセス２２０と、共有メモリ２３０を共有することができない。
【００２８】
ここで、例えば、図２５の右側のコンテナ９２０が、旧版の実行環境であり、左側のコンテナ９２０が、新版の実行環境であるとする。そして、アプリケーションが用いるプロセス２２０に、旧版の実行環境で動作するプロセス２２０（以下、旧版のプロセス２２０と呼ぶ）と、新版の実行環境で動作するプロセス２２０（以下、新版のプロセス２２０と呼ぶ）とが、含まれるとする。この場合、旧版のプロセス２２０は、旧版の実行環境である右側のコンテナ９２０に配置する必要がある。一方、新版のプロセス２２０は、新版の実行環境である左側のコンテナ９２０に配置することが望ましい。しかし、プロセス２２０は、コンテナ９２０をまたいで共有メモリ２３０を使用できない。つまり、旧版のプロセス２２０と新版のプロセス２２０とは、プロセス間通信を実行できない。
【００２９】
共有メモリ２３０を共有するためには、旧版のプロセス２２０と新版のプロセス２２０とは、同じコンテナ９２０に配置する必要がある。例えば、新版のプロセス２２０は、旧版の実行環境のコンテナ９２０でも動作可能とする。この場合、新版のプロセス２２０と旧版のプロセス２２０とを、旧版の実行環境である右側のコンテナ９２０に配置するすると、新版のプロセス２２０と旧版のプロセス２２０とは、共有メモリ２３０を用いたプロセス間通信を実行できる。しかし、この場合、新版のプロセス２２０は、新版の実行環境である左側のコンテナ９２０において実行できた機能の一部が実行できなくなる。
【００３０】
また、新版のプロセス２２０が、旧版の実行環境に対応していない場合は、プロセス２２０を再配置することは、できない。
【００３１】
このように、一般的なコンテナを用いる装置は、全てのプロセス２２０が、新版の実行環境に対応しない限り、新版の実行環境であるコンテナ９２０を使用できないという問題点があった。
【００３２】
＜第１の実施形態＞
次に、本発明における第１の実施形態について、図面を参照して説明する。
【００３３】
［構成の説明］
まず、本発明における第１の実施形態に係る情報処理装置１０の構成について説明する。
【００３４】
図１は、第１の実施形態に係る情報処理装置１０の構成の一例を示すブロック図である。
【００３５】
図１に示すように、情報処理装置１０は、ホストＯＳ１００と、コンテナ２００と、物理メモリ３００とを含む。ただし、図１において、ホストＯＳ１００を一つ、コンテナ２００を二つ示しているのは、一例である。情報処理装置１０は、複数のホストＯＳ１００を含んでもよく、二つの超えるコンテナ２００を含んでもよい。情報処理装置１０が、複数のホストＯＳ１００を含む場合、各ホストＯＳ１００は、以下で説明する機能を含めば、他の機能は異なっていてもよい。また、各コンテナ２００は、以下で説明する機能を含めば、他の機能は異なっていてもよい。そのため、ホストＯＳ１００及びコンテナ２００において、本実施形態に関連しない部分の説明を省略する。
【００３６】
また、各コンテナ２００は、特に区別する必要はない。ただし、以下の説明おいて、データの共有を説明する場合に、共有データの送信元のコンテナ２００を第１のコンテナ２００と、共有データの受信先のコンテナ２００を第２のコンテナ２００と呼ぶ場合もある。
【００３７】
物理メモリ３００は、実際にデータを記憶する素子又は装置である。例えば、物理メモリ３００は、Ｄ−ＲＡＭ（Dynamic-RAM）である。なお、物理メモリ３００は、Ｄ−ＲＡＭのような揮発性メモリに限らず、不揮発性メモリ（例えば、フラッシュメモリ）を含んでもよい。あるいは、物理メモリ３００は、磁気ディスク装置のような記憶装置でもよい。
【００３８】
コンテナ２００は、ホストＯＳ１００で動作するコンテナとして、プロセス２２０が所定の動作を実行するための実行環境を提供する。さらに、本実施形態のコンテナ２００は、後ほど説明するように、ホストＯＳ１００と連携して、共有メモリ２３０の共有を実現する。
【００３９】
そのため、コンテナ２００は、複数のプロセス２２０と、共有メモリ２３０と、仮想メモリアドレス処理部２１０とを含む。
【００４０】
プロセス２２０は、所定の処理を実行する。なお、既に説明した通り、プロセス２２０は、一般的には必ずしもプロセスと呼ばれていない機能単位、例えば、アプリケーション、モジュール、又は、スレッド等でもよい。以下、これらをまとめてプロセス２２０と呼ぶ。プロセス２２０は、他のプロセス２２０と間で、共有メモリ２３０を共有する。そして、プロセス２２０は、共有メモリ２３０を用いてプロセス間通信を実行する。
【００４１】
なお、本実施形態の情報処理装置１０は、後ほど説明するように、異なるコンテナ２００に含まれるプロセス２２０との間でも、コンテナ２００をまたいだ共有メモリ２３０を用いたプロセス間通信を実行できる。つまり、本実施形態の情報処理装置１０において動作するプロセス２２０は、異なるコンテナ２００に含まれるプロセス２２０ともプロセス間通信を実行できる。ただし、本実施形態の情報処理装置１０は、一般的なコンテナ２００で動作するプロセス２２０を、そのまま用いることができる。そのため、プロセス２２０の詳細な説明を省略する。
【００４２】
共有メモリ２３０は、プロセス２２０におけるプロセス間通信に用いられる、プロセス間で共有されるメモリ（リソース）である。プロセス２２０は、共有メモリ２３０へのアクセスとして、仮想メモリアドレスを用いる。共有メモリ２３０における仮想メモリアドレスは、後ほど説明するように、仮想メモリアドレス処理部２１０と、ホストＯＳ１００との動作を基に、具体的な物理メモリ３００に割り当てられる。なお、図１には示していないが、情報処理装置１０は、仮想メモリアドレスとして、図示しない補助記憶装置などを用いた仮想記憶を用いてもよい。この場合、ホストＯＳ１００は、一般的な仮想記憶の処理を用いて、仮想メモリアドレスと、物理メモリ３００及び保持記憶装置とを対応させればよい。
【００４３】
また、本実施形態の情報処理装置１０は、共有メモリ２３０の作成（確保）方法に、特に制限はない。情報処理装置１０は、一般的なコンテナに用いられている共有メモリ２３０の作成（確保）方法を用いればよい。また、コンテナ２００は、一般的なコンテナと同様に、プロセス２２０の動作に先立ち、共有メモリ２３０を作成すればよい。そのため、以下の説明では、共有メモリ２３０の作成の詳細な説明を省略し、共有メモリ２３０は、作成済みとして説明する。
【００４４】
このように、情報処理装置１０は、用いるプロセス２２０及び共有メモリ２３０として、特に制限はなく、一般的なプロセス２２０と共有メモリ２３０を用いることができる。
【００４５】
仮想メモリアドレス処理部２１０は、プロセス２２０がプロセス間通信に用いる共有メモリ２３０における仮想メモリアドレスを、ホストＯＳ１００に通知する。ホストＯＳ１００は、受信した仮想メモリアドレスに対応する物理メモリ３００のアドレス（物理メモリアドレス）のデータを処理する。なお、仮想メモリアドレス処理部２１０の処理方法は、特に制限はない。例えば、仮想メモリアドレス処理部２１０は、一般的なＯＳに用いられている仮想メモリアドレスの処理と同様の処理を実行すればよい。
【００４６】
図１２は、本実施形態に係る仮想メモリアドレス２１１０の一例を示す図である。
【００４７】
図１２に示す仮想メモリアドレス２１１０は、番号２１１１と、プロセス２１１２と、コンテナ２１１３と、仮想メモリアドレス２１１４とを含む。
【００４８】
番号２１１１は、仮想メモリアドレス２１１０の情報の組を識別するための情報（例えば、番号又は識別子）である。図１２に示す仮想メモリアドレス２１１０は、各行が１つの情報の組となっている。
【００４９】
プロセス２１１２は、対象となるプロセス２２０を示す情報（例えば、識別子又は名称）である。
【００５０】
コンテナ２１１３は、プロセス２１１２において示されているプロセス２２０が稼働するコンテナ２００を示す情報（例えば、識別子又は名称）である。
【００５１】
仮想メモリアドレス２１１４は、プロセス２１１２で示されているプロセス２２０が用いる共有メモリ２３０の仮想メモリアドレスである。図１２は、仮想メモリアドレス２１１４の値として、１６進数を用いている。そのため、図１２は、仮想メモリアドレス２１１４のアドレスに「ｈ」を付している。以下、１６進数は、同様に「ｈ」を付し、その説明を省略する。
【００５２】
例えば、図１２に示す１行目の仮想メモリアドレス２１１０は、プロセスａが、コンテナＡ内の仮想メモリアドレス４０００ｈ−７０００ｈの範囲を、共有メモリ２３０として使用することを示す。
【００５３】
図１を参照した説明に戻る。
【００５４】
ホストＯＳ１００は、一般的なＯＳとしての動作、及び、一般的なコンテナ２００の管理を実行する。さらに、本実施形態のホストＯＳ１００は、後ほど説明するように、コンテナ２００間での共有メモリ２３０の共有を実現する。なお、以下、ホストＯＳ１００の一般的なＯＳとしての動作の説明を省略し、本実施形態に係る構成及び動作について説明する。
【００５５】
ホストＯＳ１００は、図１に示すように、コンテナ接続部１２０と、プロセス配置部１３０とを含む。
【００５６】
プロセス配置部１３０は、プロセス２２０を適切なコンテナ２００に配置する処理を実行する。
【００５７】
コンテナ接続部１２０は、コンテナ２００間における共有メモリ２３０を共有する処理を実行する。
【００５８】
以下、プロセス配置部１３０とコンテナ接続部１２０との詳細について、図面を参照して説明する。
【００５９】
まず、プロセス配置部１３０について、図面を参照して説明する。
【００６０】
図２は、プロセス配置部１３０の構成の一例を示すブロック図である。
【００６１】
プロセス配置部１３０は、情報受信部１３１と、再配置判定部１３２と、再配置処理部１３３と、配置先判定部１３４と、配置処理部１３５とを含む。
【００６２】
情報受信部１３１は、プロセス２２０とコンテナ２００とに関連する情報を受信する。より詳細には、情報受信部１３１は、コンテナ２００から、再配置されたプロセス２２０に関する情報と、プロセス２２０が動作するコンテナ２００に関する情報と（以下、合わせて「再配置情報」と呼ぶ）を受信する。以下、コンテナ２００に関する情報を「コンテナ情報１３１０」と呼ぶ。また、プロセス２２０に関する情報を「プロセス設計情報１３３０」と呼ぶ。また、情報受信部１３１は、コンテナ２００の構成に関する情報（以下、「構成情報１３２０」）を受信する。
【００６３】
ただし、情報受信部１３１は、再配置情報及び構成情報１３２０を、別の構成から受信してもよい。例えば、情報受信部１３１は、ホストＯＳ１００のコンテナ２００を監視している構成から、再配置情報及び構成情報１３２０を取得してもよい。あるいは、情報受信部１３１は、利用者が操作する図示しない管理装置から、再配置情報及び構成情報１３２０を受信してもよい。
【００６４】
なお、情報受信部１３１は、受信した情報を、必要に応じて、再配置判定部１３２等に送信してもよい。あるいは、情報受信部１３１は、受信した情報を、図示しない記憶部に保存してもよい。この場合、プロセス配置部１３０に含まれる各構成は、必要に応じて、その記憶部から情報を読み出せばよい。
【００６５】
本実施形態に係るコンテナ情報１３１０、プロセス設計情報１３３０、及び、構成情報１３２０が含む情報は、特に制限はない。また、コンテナ情報１３１０、プロセス設計情報１３３０、及び、構成情報１３２０の形式は、ホストＯＳ１００が取り扱える形式であれば、特に制限はない。
【００６６】
以下、各情報の一例を示す。
【００６７】
図９は、コンテナ情報１３１０の一例を示す図である。
【００６８】
図９に示すコンテナ情報１３１０は、コンテナ１３１１と、ホスト１３１２とを含む。図９に示すコンテナ情報１３１０は、各行が１組の情報となっている。
【００６９】
コンテナ１３１１は、コンテナ２００を示す情報（例えば、識別子又は名称）である。
【００７０】
ホスト１３１２は、コンテナ２００が動作するホストＯＳ１００を示す情報（例えば、識別子又は名称）である。
【００７１】
例えば、図９の１行目に示されるコンテナ情報１３１０は、コンテナＡが、ホストＯＳ１上で動作していることを示す。
【００７２】
図１０は、プロセス設計情報１３３０の一例を示す図である。
【００７３】
図１０に示すプロセス設計情報１３３０は、番号１３３１と、通信元１３３２と、通信先１３３３と、通信手段１３３４と、共有メモリ作成鍵１３３５と、ライブラリリスト１３３６とを含む。
【００７４】
番号１３３１は、プロセス設計情報１３３０の情報の組を識別するための情報（例えば、番号又は識別子）である。図１０に示すプロセス設計情報１３３０は、各行が１組の情報となっている。
【００７５】
通信元１３３２は、プロセス設計情報１３３０の対象となるプロセス２２０を示す情報（例えば、識別子又は名称）である。つまり、図１０に示す情報の組は、通信元１３３２におけるプロセス２２０に関する情報の組である。例えば、１行目は、プロセスａに関する情報である。
【００７６】
通信先１３３３は、通信元１３３２に示されるプロセス２２０のプロセス間通信における通信先のプロセス２２０を示す情報（例えば、識別子又は名称）である。
【００７７】
通信手段１３３４は、通信元１３３２のプロセス２２０と、通信先１３３３のプロセス２２０とがプロセス間の通信に用いる手段を示す。通信手段１３３４は、例えば、図１０に示す共有メモリ、メッセージキュー、又は、ソケットなどである。ただし、情報処理装置１０は、図１０に示す以外の通信手段をプロセス間通信に用いてもよい。
【００７８】
共有メモリ作成鍵１３３５は、共有メモリ２３０を作成及び使用するときに用いる情報（例えば、鍵）の値である。例えば、共有メモリ作成鍵１３３５は、共有メモリ２３０を作成及び使用するときに用いる暗号鍵でもよい。あるいは、共有メモリ作成鍵１３３５は、情報処理装置１０が、共有メモリ２３０を作成（確保）及び使用する時に用いる名称（又は識別コード）でもよい。通信元１３３２に示されるプロセス２２０は、共有メモリ作成鍵１３３５を用いて、作成された共有メモリ２３０にアクセスする。
【００７９】
ライブラリリスト１３３６は、プロセス２２０に対応したライブラリに関する情報（例えば、識別子又は名称）のリストである。ライブラリリスト１３３６は、複数のライブラリに関する情報を含んでもよい。
【００８０】
例えば、図１０のプロセス設計情報１３３０の１行目のデータは、次のようなプロセス２２０に関する設計情報である。すなわち、プロセスａは、プロセスｂと、共有メモリ作成鍵１３３５として「３６４７ａｆｃｄ３５３１」を用いて作成された共有メモリ２３０を用いて、プロセス間通信を実現する。そして、プロセスａは、ライブラリとして、ｓｅｔＸを用いる。
【００８１】
図１１は、構成情報１３２０の一例を示す図である。
【００８２】
図１１に示す構成情報１３２０は、番号１３２１と、プロセス１３２２と、ホスト１３２３とコンテナ１３２４とを含む。
【００８３】
番号１３２１は、構成情報１３２０の情報の組を識別するための情報（例えば、番号又は識別子）である。図１１に示す構成情報１３２０は、各行が１組の情報となっている。
【００８４】
プロセス１３２２は、対象となるプロセス２２０を示す情報（例えば、識別子又は名称）である。
【００８５】
ホスト１３２３は、プロセス１３２２に示されるプロセス２２０が動作するホストＯＳ１００を示す情報（例えば、識別子又は名称）である。
【００８６】
コンテナ１３２４は、プロセス１３２２に示されるプロセス２２０が動作するコンテナ２００を示す情報（例えば、識別子又は名称）である。
【００８７】
例えば、図１１に示す構成情報１３２０の１行目のデータは、次のような構成情報１３２０を示す。すなわち、プロセスａは、ホストＯＳ１上で動作するコンテナＡにおいて動作している。
【００８８】
また、プロセス２２０がコンテナ２００を移動すると、構成情報１３２０は、更新される。より具体的には、例えば、プロセスａが、コンテナＡから、再配置に伴いコンテナＢに移動すると、図１１に示される構成情報１３２０の１行目のコンテナ１３２４の情報は、コンテナＡから、再配置後のコンテナＢに更新される。
【００８９】
図２を参照した説明に戻る。
【００９０】
再配置判定部１３２は、プロセス２２０の再配置の判定を開始する情報を受信すると、情報及び構成情報１３２０を基に、別のコンテナ２００に再配置が必要なプロセス２２０を判定する。そして、再配置判定部１３２は、再配置されるプロセス２２０に必要な環境（例えば、ライブラリ）を判定する。
【００９１】
具体的な例を基に、再配置判定部１３２について、より詳細に説明する。いずれかのコンテナ２００が、更新されたとする。この場合、プロセス２２０の再配置の判定が、必要となる。つまり、コンテナ２００の更新の情報は、プロセス２２０の再配置の判定を開始する情報の一例である。例えば、再配置判定部１３２は、いずれかのコンテナ２００の更新及び更新後の版数の通知（プロセス２２０の再配置の判定を開始する情報）を受信すると、動作を開始する。なお、情報の送信元は、特に制限はない。例えば、再配置判定部１３２は、図示しない利用者の管理装置から、この通知を受信する。そして、再配置判定部１３２は、プロセス設計情報１３３０とライブラリ情報１３４０とを基に、更新後のコンテナ２００で動作できないライブラリを使用するプロセス２２０があるか否かを判定する。なお、ライブラリ情報１３４０は、ホストＯＳ１００におけるコンテナ２００を管理する構成が作成する情報である。
【００９２】
図１５は、ライブラリ情報１３４０の一例を示す図である。
【００９３】
ライブラリ情報１３４０は、ライブラリ名１３４１と、コンテナ版数１３４２とを含む。
【００９４】
ライブラリ名１３４１は、ライブラリを識別するための情報（例えば、識別子又は名称）である。
【００９５】
コンテナ版数１３４２は、ライブラリが対応しているコンテナ２００の版数である。
【００９６】
例えば、図１５の１行目のライブラリ情報１３４０は、ライブラリｓｅｔＸが、コンテナ２００の版数２．０〜２．８で動作可能であることを示す。
【００９７】
図２を参照した説明に戻る。
【００９８】
ここで、例えば、コンテナ２００の版数が、２．５から３．０に更新された場合を想定する。再配置判定部１３２は、ライブラリ情報１３４０を基に、コンテナ２００の更新の影響を受けるライブラリを判定する。今の場合、ライブラリｓｅｔＸが、影響を受ける。そこで、再配置判定部１３２は、影響を受ける環境として、ライブラリｓｅｔＸを判定する。
【００９９】
さらに、再配置判定部１３２は、プロセス設計情報１３３０を基に、ｓｅｔＸを参照するプロセス２２０、つまり影響を受けるプロセス２２０を判定する。今の場合、影響を受けプロセス２２０は、プロセスａである。そこで、再配置判定部１３２は、再配置するプロセス２２０として、プロセスａを判定する。
【０１００】
なお、上記のコンテナ２００の更新は、プロセス２２０の再配置の判定を開始する情報の一例である。再配置判定部１３２の判定の開始は、コンテナ２００の更新に限る必要はない。例えば、再配置判定部１３２は、ライブラリの更新時に、同様に動作してもよい。
【０１０１】
再配置処理部１３３は、再配置判定部１３２において再配置が必要と判定されたプロセス２２０を、動作可能な環境（例えば、プロセス２２０に必要なライブラリが実行可能なコンテナ２００）を生成する。そして、再配置処理部１３３は、生成した環境（コンテナ２００）に、再配置が必要と判定されたプロセス２２０を配置する。つまり、再配置処理部１３３は、適切なコンテナ２００に、プロセス２２０を再配置する。
【０１０２】
なお、再配置処理部１３３は、生成するコンテナ２００の数を削減するために、プロセス２２０の動作に必要と判定された環境（コンテナ２００）を検索してもよい。そして、必要とされる環境（コンテナ２００）が動作中の場合、再配置処理部１３３は、その環境（コンテナ２００）にプロセス２２０を再配置してもよい。
【０１０３】
配置先判定部１３４は、再配置判定部１３２が判定したプロセス２２０の再配置後に、追加処理が必要か否かを判定する。より詳細には、配置先判定部１３４は、再配置されたプロセス２２０が、コンテナ２００間をまたぐプロセス間通信が必要か否かを判定する。そして、その判定を基に、配置先判定部１３４は、そのプロセス２２０が稼働しているホストＯＳ１００及びコンテナ２００における追加の処理、つまり、コンテナ接続部１２０及び仮想メモリアドレス処理部２１０の起動が必要か否かを判定する。
【０１０４】
配置処理部１３５は、追加の処理が必要と判定された場合に、追加の処理（ホストＯＳ１００におけるコンテナ接続部１２０を起動、及び／又は、コンテナ２００における仮想メモリアドレス処理部２１０の起動）を実行する。つまり、配置処理部１３５は、コンテナ接続部１２０に基づく共有メモリ２３０の共有化の処理を必要とするプロセス２２０の再配置が発生した場合、次の処理を実行する。コンテナ接続部１２０が起動していない場合、配置処理部１３５は、コンテナ接続部１２０を起動する。さらに、配置処理部１３５は、対象となるコンテナ２００に仮想メモリアドレス処理部２１０が動作していない場合、仮想メモリアドレス処理部２１０を起動する。
【０１０５】
ただし、情報処理装置１０は、コンテナ接続部１２０を、予め起動していてもよい。この場合、プロセス配置部１３０は、配置先判定部１３４及び配置処理部１３５を含まなくてもよい。
【０１０６】
次に、コンテナ接続部１２０について、図面を参照して説明する。
【０１０７】
コンテナ接続部１２０は、コンテナ２００（第１のコンテナ２００）のプロセス２２０が共有メモリ２３０に書き込むデータを、第１のコンテナ２００に対応する物理メモリ３００に書き込む。さらに、コンテナ接続部１２０は、そのデータを、共有メモリ２３０を共有する別のコンテナ２００（第２のコンテナ２００）に対応する物理メモリ３００に書き込む（転送する）。
【０１０８】
そのため、コンテナ接続部１２０は、少なくとも次に示す情報を用いる。
【０１０９】
（１）メモリアドレス対応表１１００：メモリアドレス対応表１１００は、仮想メモリアドレスと物理メモリアドレスとの対応関係を保存する。メモリアドレス対応表１１００は、ホストＯＳ１００の仮想メモリ及びコンテナ２００を管理する構成が作成する情報である。以下、メモリアドレス対応表１１００は、第１の対応関係とも呼ぶ。
【０１１０】
（２）物理メモリアドレス対応表１４００：物理メモリアドレス対応表１４００は、メモリを共有する各コンテナ２００のそれぞれの共有メモリ２３０に対応する物理メモリ３００のアドレス（物理メモリアドレス）の対応関係を保存する。物理メモリアドレス対応表１４００は、ホストＯＳ１００の仮想メモリ及びコンテナ２００を管理する構成が作成する情報である。以下、物理メモリアドレス対応表１１００は、第２の対応関係とも呼ぶ。
【０１１１】
より詳細には、コンテナ接続部１２０は、次のような動作を実行する。プロセス２２０が共有メモリ２３０にデータを書き込む場合、コンテナ接続部１２０が、書き込むデータと、その仮想メモリアドレスとを受信する。コンテナ接続部１２０は、メモリアドレス対応表１１００を用いて、仮想メモリアドレスに対応する物理メモリ３００のアドレス（物理メモリアドレス）を特定する。そして、コンテナ接続部１２０は、データを物理メモリ３００に書き込む。さらに、コンテナ接続部１２０は、物理メモリアドレス対応表１４００を基に、データを書き込んだ物理メモリ３００と共有関係にある物理メモリ３００のアドレスを算出する。そして、コンテナ接続部１２０は、算出したアドレスの物理メモリ３００にデータを書き込む。
【０１１２】
図３は、コンテナ接続部１２０の構成の一例を示すブロック図である。
【０１１３】
コンテナ接続部１２０は、仮想メモリアドレス受信部１２１と、物理メモリアドレス特定部１２２と、物理メモリ共有部１２３とを含む。
【０１１４】
仮想メモリアドレス受信部１２１は、コンテナ２００から、共有メモリ２３０に書き込むデータと、その仮想メモリアドレスとを受信する。より詳細には、仮想メモリアドレス受信部１２１は、コンテナ２００の仮想メモリアドレス処理部２１０から、プロセス間通信として使用する共有メモリ２３０に書き込むデータを受信する。同様に、仮想メモリアドレス受信部１２１は、データを書き込む仮想メモリアドレスを受信する。なお、仮想メモリアドレス受信部１２１は、コンテナ２００を判別する情報（例えば、識別子又は名称）を受信してもよい。
【０１１５】
仮想メモリアドレス受信部１２１は、受信した情報（データ、仮想メモリアドレス、及び、コンテナ２００を判別する情報）を、物理メモリアドレス特定部１２２に送信する。
【０１１６】
物理メモリアドレス特定部１２２は、コンテナ２００に関する情報と、仮想メモリアドレスと、物理メモリアドレスとの対応関係を示すメモリアドレス対応表１１００とを基に、データを書き込む物理メモリ３００のアドレスを特定する。
【０１１７】
図１３は、本実施形態に係るメモリアドレス対応表１１００の一例を示す図である。
【０１１８】
図１３に示すメモリアドレス対応表１１００は、番号１１０１と、仮想メモリアドレス１１０２と、コンテナ１１０３と、物理メモリアドレス１１０４とを含む。
【０１１９】
番号１１０１は、メモリアドレス対応表１１００の情報の組を識別するための情報（例えば、番号又は識別子）である。図１３に示すメモリアドレス対応表１１００は、各行が１組の情報となっている。
【０１２０】
コンテナ１１０３は、共有メモリ２３０を用いるコンテナ２００を示す情報（例えば、識別子、又は、名称）である。
【０１２１】
仮想メモリアドレス１１０２は、コンテナ１１０３に示されるコンテナ２００における共有メモリ２３０の仮想メモリアドレスを示す情報である。
【０１２２】
物理メモリアドレス１１０４は、仮想メモリアドレス１１０２に対応する物理メモリ３００のアドレスである。
【０１２３】
例えば、図１３の１行目に示すメモリアドレス対応表１１００は、コンテナＡにおける仮想メモリアドレス４０００ｈ−７０００ｈが、物理メモリアドレス１００００ｈ−１３０００ｈに対応していることを示している。
【０１２４】
また、図１３の第１行から第３行は、コンテナＡが、共有メモリ２３０として、３つの仮想メモリアドレス１１０２の範囲と、それに対応した３つの物理メモリアドレス１１０４の範囲とを用いることを示す。また、第４行目は、コンテナＢが、共有メモリ２３０として、１つの範囲を用いることを示す。
【０１２５】
このように、コンテナ２００は、共有メモリ２３０として、１つ又は複数の範囲を含んでもよい。さらに、コンテナ２００は、仮想メモリアドレス１１０２と物理メモリアドレス１１０４とが、異なる数に分かれた範囲でも良い。例えば、コンテナ２００は、共有メモリ２３０として、１つの範囲の仮想メモリアドレス１１０２と、２つに範囲に分かれた物理メモリアドレス１１０４とを用いてもよい。
【０１２６】
なお、図１３に示すコンテナＡのメモリ範囲とコンテナＢのメモリ範囲とは、同じ大きさである。このように、共有メモリ２３０の大きさは、少なくとも、共有メモリ２３０を共有するコンテナ２００において、同じ大きさであることが望ましい。これは、共有メモリ２３０の管理が容易となるためである。ただし、情報処理装置１０は、共有メモリ２３０の大きさの異なるコンテナ２００を含んでもよい。例えば、１つのコンテナ２００が、異なる２つのコンテナ２００と、それぞれ共有メモリ２３０を共有する場合、その１つのコンテナ２００は、異なる２つのコンテナ２００のそれぞれの共有メモリ２３０を合わせた大きさの共有メモリ２３０を含んでもよい。
【０１２７】
図３を参照した説明に戻る。
【０１２８】
物理メモリアドレス特定部１２２は、特定した物理アドレスとデータとを、物理メモリ共有部１２３に送信する。
【０１２９】
物理メモリ共有部１２３は、特定された物理メモリのアドレスを用いて、第１のコンテナ２００の共有メモリ２３０に対応する物理メモリ３００に、データを書き込む。
【０１３０】
さらに、物理メモリ共有部１２３は、物理メモリ３００に書き込んだデータを、物理メモリアドレス対応表１４００を基に、第２のコンテナ２００の共有メモリ２３０に対応する物理メモリ３００に書き込む。
【０１３１】
図１４は、第１の実施形態に係る物理メモリアドレス対応表１４００の一例を示す図である。
【０１３２】
物理メモリアドレス対応表１４００は、番号１４０１と、コンテナ１４０２と、物理メモリアドレス１４０３と、コンテナ１４０４と、物理メモリアドレス１４０５とを含む。
【０１３３】
番号１４０１は、物理メモリアドレス対応表１４００の情報の組を識別するための情報（例えば、番号又は識別子）である。図１４に示す物理メモリアドレス対応表１４００は、各行が１組の情報となっている。
【０１３４】
コンテナ１４０２及びコンテナ１４０４は、共有メモリ２３０を共有するコンテナ２００を示す情報である。
【０１３５】
物理メモリアドレス１４０３及び物理メモリアドレス１４０５は、それぞれ、コンテナ１４０２及びコンテナ１４０４の共有メモリ２３０として用いられている物理メモリ３００のアドレスを示す。
【０１３６】
例えば、図１４の１行目に示す物理メモリアドレス対応表１４００は、コンテナＡ及びコンテナＢが、共有メモリ２３０を共有することを示す。さらに、１行目に示す物理メモリアドレス対応表１４００は、コンテナＡ及びコンテナＢが、それぞれの物理メモリ３００のアドレスが、「１０００ｈ−１３００ｈ」及び「３３０００ｈ−３６０００ｈ」であることを示す。例えば、物理メモリ３００のアドレス「１０００ｈ」は、アドレス「３３０００ｈ」に対応している。つまり、物理メモリ共有部１２３は、物理メモリ３００のアドレス「１０００ｈ」のデータを書き込む場合、アドレス「３３０００ｈ」にも同じデータを書き込む。
【０１３７】
このような動作を基に、コンテナ接続部１２０は、プロセス間通信として共有メモリ２３０を共有する各プロセス２２０における、共有メモリ２３０に対応する物理メモリ３００に、同じデータを書き込む。その結果、異なるコンテナ２００で動作するプロセス２２０は、共有メモリ２３０を用いたプロセス間通信を実現できる。
【０１３８】
［動作の説明］
次に、図面を参照して、本実施形態に係る情報処理装置１０の動作について説明する。
【０１３９】
なお、以下の説明において、情報処理装置１０は、構成情報１３２０、更新前のコンテナ情報１３１０、プロセス設計情報１３３０、ライブラリ情報１３４０、メモリアドレス対応表１１００、及び、物理メモリアドレス対応表１４００を保存済みとする。また、コンテナ２００における共有メモリ２３０の作成は、一般的なコンテナ２００における処理と同様である。そのため、共有メモリ２３０は、作成（確保）済みとする。
【０１４０】
まず、情報処理装置１０におけるプロセス２２０の再配置、つまり、プロセス配置部１３０の動作について、図４を参照して説明する。
【０１４１】
図４は、プロセス配置部１３０の動作の一例を示すフローチャートである。
【０１４２】
なお、ライブラリの改版（バージョンアップ）など、プロセス２２０の移動の要因は、本実施形態に係る構成とは異なる構成に基づいて発生させられる。つまり、本実施形態の情報処理装置１０は、図示しない装置等の動作を基に、以下で説明する動作を実現する。そのため、以下の説明は、プロセス２２０の移動の要因が発生し、再配置の判定を開始する情報が、受信されたものとして説明する。
【０１４３】
まず、プロセス配置部１３０の情報受信部１３１は、コンテナ２００に関するする情報（コンテナ情報１３１０とプロセス設計情報１３３０）を受信する（ステップＳ４０２）。ここで、情報受信部１３１における情報の受信は、特に制限はない。例えば、情報処理装置１０の利用者が、プロセス２２０のコンテナ２００間での移動に伴い、図示しない入力機器を操作して、情報受信部１３１に通知を送信してもよい。構成情報１３２０は、上記のとおり、予め、情報処理装置１０に保存されている。
【０１４４】
次に、再配置判定部１３２は、コンテナ情報１３１０、プロセス設計情報１３３０、及び、構成情報１３２０を基に、コンテナ２００の配置の変更（再配置）が必要なプロセス２２０が存在するか否か判断する（ステップＳ４０３）。
【０１４５】
さらに、再配置判定部１３２の詳細な動作について、図面を参照して説明する。
【０１４６】
図６は、第１の実施形態に係る再配置判定部１３２の動作の一例を示すフローチャートである。
【０１４７】
再配置判定部１３２は、情報受信部１３１が受信したコンテナ情報１３１０と、構成情報１３２０とを基に、更新された環境（例えば、コンテナ２００のライブラリ）を判定する。そして、再配置判定部１３２は、更新されたコンテナ２００で稼動するプロセス２２０を判定する（ステップＳ６０１）。再配置判定部１３２は、この判定に、図９に示すコンテナ情報１３１０と、図１１に示す構成情報１３２０とを用いてもよい。
【０１４８】
再配置判定部１３２は、判定されたプロセス２２０のプロセス設計情報１３３０を基に、そのプロセス２２０の稼動に必要な環境（例えば、コンテナ２００のライブラリ）を判定する（ステップＳ６０２）。再配置判定部１３２は、この判定に、図１０に示すプロセス設計情報１３３０を用いてもよい。
【０１４９】
再配置判定部１３２は、プロセス２２０が、現在の環境で稼働可能か否かを判定する（ステップＳ６０３）。再配置判定部１３２は、例えば、プロセス２２０の稼動に必要なライブラリの版数と、コンテナ２００で稼働可能なライブラリの版数とを比較する。
【０１５０】
プロセス２２０が稼働可能の場合場合（ステップＳ６０３のＹｅｓ）、情報処理装置１０は、処理を終了する。
【０１５１】
プロセス２２０が稼動できない場合（ステップＳ６０３のＮｏ）、再配置判定部１３２は、判定したプロセス２２０に関する情報を、再配置処理部１３３に送信する（ステップＳ６０４）。
【０１５２】
図４を参照した説明に戻る。
【０１５３】
上記のとおり、再配置が必要なプロセス２２０がない場合（ステップＳ４０３のＮｏ）、情報処理装置１０は、処理を終了する。
【０１５４】
一方、再配置が必要なプロセス２２０がある場合（ステップＳ４０３のＹｅｓ）、再配置処理部１３３は、再配置が必要と判断されたプロセス２２０が稼動可能な環境（例えば、コンテナ２００）を起動する（ステップＳ４０５）。なお、コンテナ２００の起動は、コンテナ２００の配置と呼ぶ場合もある。
【０１５５】
また、既に説明した通り、情報処理装置１０は、起動済みのコンテナ２００の中から、プロセス２２０が稼働可能なコンテナ２００を検索してもよい。そして、既にコンテナ２００が稼働中に場合、情報処理装置１０は、起動の処理を省略してもよい。ただし、情報処理装置１０は、検索せずに、コンテナ２００を起動してもよい。
【０１５６】
次に、再配置処理部１３３は、ステップＳ４０５で起動（配置）又は検索したコンテナ２００に、ステップＳ５０３で再配置が必要と判定されたプロセス２２０を配置（再配置）する（ステップＳ４０６）。
【０１５７】
次に、配置先判定部１３４は、プロセス２２０の再配置に伴い、コンテナ接続部１２０の起動等の追加の処理が必要か否かを判定する（ステップＳ４０７）。
【０１５８】
より具体的には、配置先判定部１３４は、再配置判定部１３２が判定してプロセス２２０が、共有メモリ２３０を用いるか、ホストＯＳ１００を移動したか、及び、コンテナ２００を移動したかを判定する。そして、配置先判定部１３４は、その判定を基に、コンテナ接続部１２０、及び／又は、仮想メモリアドレス処理部２１０の起動が必要か否かを判定する。
【０１５９】
例えば、それまで、コンテナ２００間における共有メモリ２３０の共有化が必要ない状態から必要となる状態に変化した場合、コンテナ接続部１２０と仮想メモリアドレス処理部２１０の起動が必要である。そこで、このような場合、配置先判定部１３４は、ホストＯＳ１００におけるコンテナ接続部１２０及び仮想メモリアドレス処理部２１０の起動が必要、つまり、設定の処理が必要と判定する。
【０１６０】
あるいは、コンテナ接続部１２０及び仮想メモリアドレス処理部２１０の起動後に、新たに共有メモリ２３０の共有が必要となるコンテナ２００が生成された場合、生成されたコンテナ２００において、仮想メモリアドレス処理部２１０の起動が必要となる。また、コンテナ接続部１２０は、新たなコンテナ２００に対応した動作が必要となる場合もある。そこで、このような場合、再配置処理部１３３は、仮想メモリアドレス処理部２１０の起動、及び、コンテナ接続部１２０の設定変更が必要と判定する。
【０１６１】
つまり、配置先判定部１３４は、共有化のために、コンテナ接続部１２０及び仮想メモリアドレス処理部２１０の起動及び／又は設定変更が必要か否かを判定する。あるいは、配置先判定部１３４は、共有メモリ２３０の共有化のための処理の起動又は変更が必要か否かを判定する。以下、コンテナ接続部１２０の起動、仮想メモリアドレス処理部２１０の起動、及び、コンテナ接続部１２０の設定変更をまとめて「環境の再配置」と呼ぶ。
【０１６２】
次に、配置先判定部１３４の動作について、図面を参照してさらに説明する。
【０１６３】
図７は、配置先判定部１３４の動作の一例を示すフローチャートである。
【０１６４】
まず、配置先判定部１３４は、再配置されたプロセス２２０が共有メモリ２３０を用いるか否かを判定する（ステップＳ７０１）。配置先判定部１３４は、例えば、図１０に示すプロセス設計情報１３３０を用いて判定すればよい。
【０１６５】
共有メモリ２３０を用いない場合（ステップＳ７０１でＮｏ）、情報処理装置１０は、処理を終了する。
【０１６６】
共有メモリ２３０を用いる場合（ステップＳ７０１でＹｅｓ）、配置先判定部１３４は、再配置されたプロセス２２０が、コンテナ２００を移動したか否かを判定する（ステップＳ７０３）。
【０１６７】
コンテナ２００を移動していない場合（ステップＳ７０３でＮｏ）、情報処理装置１０は、処理を終了する。
【０１６８】
コンテナ２００を移動した場合（ステップＳ７０３でＹｅｓ）、配置先判定部１３４は、再配置が必要か否かを判定する（ステップＳ７０４）。
【０１６９】
再配置が不要の場合（ステップＳ７０４でＮｏ）、情報処理装置１０は、処理を終了する。
【０１７０】
再配置が必要な場合（ステップＳ７０４でＹｅｓ）、配置先判定部１３４は、配置処理部１３５に、仮想メモリアドレス処理部２１０及びコンテナ接続部１２０の再配置、つまり、環境の再配置を指示する（ステップＳ７０５）。再配置後、情報処理装置１０は、処理を終了する。
【０１７１】
図４を参照した説明に戻る。
【０１７２】
上記のとおり、再配置が不要の場合（ステップＳ４０７のＮｏ）、情報処理装置１０は、処理を終了する。
【０１７３】
一方、再配置が必要な場合（ステップＳ４０７のＹｅｓ）、配置処理部１３５は、コンテナ接続部１２０及び仮想メモリアドレス処理部２１０を、再配置（つまり、起動（配置）又は設定変更）を実行する（ステップＳ４０９）。そして、情報処理装置１０は、処理を終了する。
【０１７４】
次に、異なるコンテナ２００で稼働するプロセス２２０が、共有メモリ２３０を用いたプロセス間通信を実現する動作、つまり、コンテナ接続部１２０の動作ついて、図５を参照して説明する。
【０１７５】
図５は、コンテナ接続部１２０の動作の一例を示すフローチャートである。
【０１７６】
なお、以下の説明において、対応情報（メモリアドレス対応表１１１０など）は、作成済みとする。
【０１７７】
コンテナ接続部１２０の仮想メモリアドレス受信部１２１は、仮想メモリアドレス処理部２１０から共有メモリ２３０のデータと、その仮想メモリアドレスと、第１のコンテナ２００に関する情報とを受信する（ステップＳ５０１）。
【０１７８】
物理メモリアドレス特定部１２２は、第１のコンテナ２００に関する情報と、仮想メモリアドレスと、メモリアドレス対応表１１１０とを基に、プロセス２２０が使用する共有メモリ２３０の物理メモリアドレスを特定する（ステップＳ５０３）。
【０１７９】
図１３に示すメモリアドレス対応表１１００を参照して、物理メモリアドレス特定部１２２の動作について、より詳細に説明する。
【０１８０】
例えば、第１のコンテナ２００は、コンテナＡとし、仮想メモリアドレスが、０１００ｈとする。この場合、物理メモリアドレス特定部１２２は、仮想メモリアドレス対応表１１００の１行目を基に、仮想メモリアドレス“０１００ｈ”に対応する物理メモリ３００のアドレス“１０１００ｈ”を特定する。なお、仮想メモリアドレスは、１つのアドレスではなく範囲でもよい。
【０１８１】
物理メモリ共有部１２３は、特定された物理メモリ３００のアドレスを基に、プロセス２２０の共有メモリ２３０間のデータを処理する（ステップＳ５０４）。
【０１８２】
具体的には、物理メモリ共有部１２３は、例えば、次のように動作する。
【０１８３】
物理メモリ共有部１２３は、第１のコンテナ２００の共有メモリ２３０に対応する物理メモリ３００にデータを書き込む。そして、物理メモリ共有部１２３は、物理メモリアドレス対応表１４００を基に、第１のコンテナ２００の物理メモリ３００のアドレスに対応する第２のコンテナ２００の物理メモリのアドレスを特定する。そして、物理メモリ共有部１２３は、特定した第２のコンテナ２００に対応する物理メモリ３００のアドレスに、同じデータを書き込む。
【０１８４】
例えば、物理メモリ共有部１２３は、第１のコンテナ２００に対応する物理メモリ３００のアドレス１０１００ｈにデータが書き込んだ場合、第２のコンテナに対応する物理メモリ３００のアドレス３３１００ｈに、同じデータを書き込む。
【０１８５】
なお、情報処理装置１０は、２つを超えた数のコンテナ２００が、共有メモリ２３０を共有してもよい。その場合、物理メモリアドレス特定部１２２は、２つを超えた数の物理メモリ３００の対応関係（物理メモリアドレス対応表１４００）を基に、２つを超えた数の物理メモリ３００のアドレスにデータを書き込めばよい。
【０１８６】
次に、物理メモリ共有部１２３の動作の詳細について、図面を参照して説明する。
【０１８７】
図８は、物理メモリ共有部１２３の書き込み動作の一例を示すフローチャートである。
【０１８８】
物理メモリ共有部１２３は、共有メモリ２３０に書き込むデータを受信する（ステップＳ８０１）。
【０１８９】
物理メモリ共有部１２３は、受信したデータを、第１のコンテナ２００に対応する物理メモリ３００に書き込む（ステップＳ８０２）。
【０１９０】
次に、物理メモリ共有部１２３は、共有メモリ２３０を共有する第２のプロセス２２０に対応する物理メモリ３００のアドレスを取得する（ステップ８０３）。
【０１９１】
物理メモリ共有部１２３は、取得した物理メモリ３００のアドレス、つまり第２のコンテナに対応する物理メモリ３００にデータを書き込む（ステップＳ８０４）。
【０１９２】
そして、情報処理装置１０は、データを共有化するための書き込み動作を終了する。
【０１９３】
このような動作を基に、情報処理装置１０は、各コンテナ２００に対応する物理メモリ３００に、同じデータを保存する。そのため、データの読み出しにおいて、情報処理装置１０は、一般的な仮想メモリの処理を用いて物理メモリからデータを読み出せばよい。この動作は、一般的な仮想アドレスと物理メモリアドレスとの変換処理と同様の動作である。
【０１９４】
つまり、情報処理装置１０は、共有メモリ２３０からの読み出しの処理に変更を必要としない。
【０１９５】
（効果の説明）
次に、本実施形態の効果について説明する。
【０１９６】
このように、本実施形態は、プロセス間通信に関する部分を改造しなくても、複数の実行環境で動作するプロセス２２０における共有メモリ２３０を用いたプロセス間通信を実現するとの効果を奏することができる。
【０１９７】
その理由は、次のとおりである。
【０１９８】
コンテナ２００で動作する仮想メモリアドレス処理部２１０が、プロセス２２０で共有化する共有メモリ２３０の仮想メモリアドレスをホストＯＳ１００に通知する。
【０１９９】
そして、ホストＯＳ１００のコンテナ接続部１２０が、複数のコンテナ２００における共有メモリ２３０の仮想メモリアドレスと物理メモリ３００のアドレスとの対応関係を判定する。そして、コンテナ接続部１２０が、対応関係を基に、いずれかのコンテナ２００の共有メモリ２３０に対応する物理メモリ３００に書き込まれたデータを、他のコンテナ２００の共有メモリ２３０に対応する物理メモリ３００に書き込むためである。つまり、本実施形態は、複数の実行環境（例えば、コンテナ２００）で動作するプロセス２２０における共有メモリ２３０を用いたプロセス間通信を実現する。
【０２００】
また、プロセス配置部１３０が、環境の変化（例えば、プロセス２２０の更新）を基に、必要となる環境の起動（配置）及びプロセス２２０の再配置を実行する。そして、プロセス配置部１３０が、必要なコンテナ接続部１２０及び仮想メモリアドレス処理部２１０を起動する。
【０２０１】
さらに、コンテナ接続部１２０は、ホストＯＳ１００に追加するモジュールとして作成可能である。そのため、ホストＯＳ１００は、改造が必要ではない。
【０２０２】
また、仮想メモリアドレス処理部２１０は、コンテナ２００に追加するモジュールとして作成可能である。そのため、コンテナ２００は、改造が必要ではない。このように、本実施形態は、プロセス間通信に関する部分を改造しなくても、上記機能を実現する。
【０２０３】
［変形例１］
以上の説明した情報処理装置１０は、次のように構成される。
【０２０４】
例えば、情報処理装置１０の各構成部は、ハードウェア回路で構成されても良い。
【０２０５】
また、情報処理装置１０は、各構成部が、ネットワークを介して接続した複数の装置を用いて、構成されても良い。
【０２０６】
また、情報処理装置１０は、複数の構成部を１つのハードウェアで構成しても良い。
【０２０７】
また、情報処理装置１０は、ＣＰＵ（Central Processing Unit）と、ＲＯＭ（Read Only Memory）と、ＲＡＭ（Random Access Memory）とを含むコンピュータ装置として実現してもよい。情報処理装置１０は、上記構成に加え、さらに、入出力接続回路（ＩＯＣ：Input / Output Circuit）と、ネットワークインターフェース回路（ＮＩＣ：Network Interface Circuit）とを含むコンピュータ装置として実現しても良い。
【０２０８】
図１６は、本変形例に係る情報処理装置６００の構成の一例を示すブロック図である。
【０２０９】
情報処理装置６００は、ＣＰＵ６１０と、ＲＯＭ６２０と、ＲＡＭ６３０と、内部記憶装置６４０と、ＩＯＣ６５０と、ＮＩＣ６８０とを含み、コンピュータ装置を構成している。
【０２１０】
ＣＰＵ６１０は、ＲＯＭ６２０からプログラムを読み込む。そして、ＣＰＵ６１０は、読み込んだプログラムに基づいて、ＲＡＭ６３０と、内部記憶装置６４０と、ＩＯＣ６５０と、ＮＩＣ６８０とを制御する。そして、ＣＰＵ６１０を含むコンピュータは、これらの構成を制御し、図１に示す、ホストＯＳ１００と、コンテナ２００としての各機能を実現する。より詳細には、ＣＰＵ６１０を含むコンピュータは、上記の構成を制御し、一般的なホストＯＳ１００及びコンテナ２００としての機能に加え、仮想メモリアドレス処理部２１０と、コンテナ接続部１２０と、プロセス配置部１３０としての各機能を実現する。
【０２１１】
ＣＰＵ６１０は、各機能を実現する際に、ＲＡＭ６３０又は内部記憶装置６４０を、プログラムの一時記憶として使用しても良い。
【０２１２】
また、ＣＰＵ６１０は、コンピュータで読み取り可能にプログラムを記憶した記憶媒体７００が含むプログラムを、図示しない記憶媒体読み取り装置を用いて読み込んでも良い。あるいは、ＣＰＵ６１０は、ＮＩＣ６８０を介して、図示しない外部の装置からプログラムを受け取り、ＲＡＭ６３０に保存して、保存したプログラムを基に動作しても良い。
【０２１３】
ＲＯＭ６２０は、ＣＰＵ６１０が実行するプログラム及び固定的なデータを記憶する。ＲＯＭ６２０は、例えば、Ｐ−ＲＯＭ（Programmable-ROM）又はフラッシュＲＯＭである。
【０２１４】
ＲＡＭ６３０は、ＣＰＵ６１０が実行するプログラム及びデータを一時的に記憶する。ＲＡＭ６３０は、例えば、Ｄ−ＲＡＭ（Dynamic-RAM）である。ＲＡＭ６３０は、物理メモリ３００の少なくとも一部として動作する。
【０２１５】
内部記憶装置６４０は、情報処理装置６００が長期的に保存するデータ及びプログラムを記憶する。また、内部記憶装置６４０は、ＣＰＵ６１０の一時記憶装置として動作しても良い。内部記憶装置６４０は、例えば、ハードディスク装置、光磁気ディスク装置、ＳＳＤ（Solid State Drive）又はディスクアレイ装置である。内部記憶装置６４０は、物理メモリ３００の一部として動作してもよい。
【０２１６】
ここで、ＲＯＭ６２０と内部記憶装置６４０は、不揮発性（non-transitory）の記憶媒体である。一方、ＲＡＭ６３０は、揮発性（transitory）の記憶媒体である。そして、ＣＰＵ６１０は、ＲＯＭ６２０、内部記憶装置６４０、又は、ＲＡＭ６３０に記憶されているプログラムを基に動作可能である。つまり、ＣＰＵ６１０は、不揮発性記憶媒体又は揮発性記憶媒体を用いて動作可能である。
【０２１７】
ＩＯＣ６５０は、ＣＰＵ６１０と、入力機器６６０及び表示機器６７０とのデータを仲介する。ＩＯＣ６５０は、例えば、ＩＯインターフェースカード又はＵＳＢ（Universal Serial Bus）カードである。
【０２１８】
入力機器６６０は、情報処理装置６００の操作者からの入力指示を受け取る機器である。入力機器６６０は、例えば、キーボード、マウス又はタッチパネルである。
【０２１９】
表示機器６７０は、情報処理装置６００の操作者に情報を表示する機器である。表示機器６７０は、例えば、液晶ディスプレイである。
【０２２０】
ＮＩＣ６８０は、ネットワークを介した図示しない外部の装置とのデータのやり取りを中継する。ＮＩＣ６８０は、例えば、ＬＡＮ（Local Area Network）カードである。
【０２２１】
このように構成された情報処理装置６００は、情報処理装置１０と同様の効果を得ることができる。
【０２２２】
その理由は、情報処理装置６００のＣＰＵ６１０が、プログラムに基づいて情報処理装置１０と同様の機能を実現できるためである。
【０２２３】
［変形例２］
なお、プロセス配置部１３０は、プロセス２２０の移動が必要な場合に動作すればよい。そのため、プロセス２２０の再配置後は、情報処理装置１０は、プロセス配置部１３０の動作を停止してもよい。つまり、情報処理装置１０は、プロセス２２０の再配置の判定を開始する情報を受信した時に、プロセス配置部１３０を起動してもよい。あるいは、情報処理装置１０は、図示しないネットワークを介して接続する装置で動作するプロセス配置部１３０を基に、プロセス２２０を再配置してもよい。
【０２２４】
図１７は、プロセス２２０の異動後にプロセス配置部１３０の動作を停止した情報処理装置１２の構成の一例を示すブロック図である。
【０２２５】
この場合でも、図１７に示す情報処理装置１２は、情報処理装置１０と同様に、プロセス間通信に関する部分の改造を必要としないで、複数の実行環境で動作するプロセスにおける共有メモリ２３０を用いたプロセス間通信を実現するとの効果を奏する。
【０２２６】
その理由は、コンテナ接続部１２０と仮想メモリアドレス処理部２１０とが、既に説明した動作を基に、プロセス２２０における共有メモリ２３０を用いたプロセス間通信を実現できるためである。
【０２２７】
なお、図１７に示す情報処理装置１２は、本実施形態の最小構成である。つまり、図１７は、第１の実施形態に係る情報処理装置１０の要部の構成の一例を示すブロック図である。
【０２２８】
＜第２の実施形態＞
本発明における実施形態は、１つの装置内のコンテナ２００に限らず、異なる装置で動作するコンテナ２００間においても、共有メモリ２３０を共有してもよい。そこで、第２の実施形態として、共有メモリ２３０を複数の装置間で共有する場合について説明する。
【０２２９】
（構成の説明）
図１８は、第２の実施形態に係る情報処理システム２０の構成の一例を示すブロック図である。
【０２３０】
情報処理システム２０は、複数の情報処理装置１１を含む。ここで、情報処理システム２０は、２台を超える情報処理装置１１を含んでもよい。図１８は、一例として、情報処理装置１１が２台の場合を示している。以下の説明も、説明を明確にするため、図１８に示すように、２台の情報処理装置１１を含む情報処理システム２０を用いて説明する。
【０２３１】
情報処理装置１１は、コンテナ２００と、ホストＯＳ４００と、物理メモリ３００とを含む。情報処理装置１１は、第１の実施形態と同様に、図１６に示されるコンピュータ装置を用いて実現されてもよい。
【０２３２】
コンテナ２００及び物理メモリ３００は、第１の実施形態と同様のため、詳細な説明を省略する。
【０２３３】
ホストＯＳ４００は、コンテナ接続部４２０と、プロセス配置部４３０とを含む。コンテナ接続部４２０は、第１の実施形態に係るコンテナ接続部１２０の動作に加え、情報処理装置１１間における共有に関連する処理を実行する。また、プロセス配置部４３０は、第１の実施形態に係るプロセス配置部１３０の動作に加え、情報処理装置１１間におけるプロセス２２０の配置に関する処理を実行する。そのため、第１の実施形態と同様の動作の説明を省略し、本実施形態に特有の構成及び動作を中心に説明する。
【０２３４】
図１９は、本実施形態に係るプロセス配置部４３０の構成の一例を示すブロック図である。
【０２３５】
プロセス配置部４３０は、第１の実施形態のプロセス配置部１３０と比べ、再配置判定部１３２及び再配置処理部１３３に換えて、再配置判定部４３２及び再配置処理部４３３を含む。さらに、プロセス配置部４３０は、版数確認部４３６と、プロセス通信部４３７とを含む。
【０２３６】
配置先判定部１３４及び配置処理部１３５は、第１の実施形態と同様のため、詳細な説明を省略する。
【０２３７】
再配置判定部４３２は、第１の実施形態に係る再配置判定部１３２の動作に加え、プロセス２２０を配置するコンテナ２００の対象として、他の情報処理装置１１を含めて判定する。つまり、再配置判定部４３２は、判定に、自装置と他の情報処理装置１１とのホストＯＳ４００の版数を用いる。そのため、再配置判定部４３２は、版数確認部４３６から、ホストＯＳ４００の版数を取得する。なお、情報処理装置１１において複数のホストＯＳ１００が動作する場合、再配置判定部４３２は、版数確認部４３６から、自装置で動作するホストＯＳ４００の版数を取得してもよい。
【０２３８】
再配置処理部４３３は、第１の実施形態の再配置処理部１３３の動作に加え、再配置判定部４３２の判定結果であるプロセス２２０の再配置先の環境が、他の情報処理装置１１の場合の動作を実行する。より具体的には、再配置処理部４３３は、プロセス２２０を他の情報処理装置１１で動作する環境（コンテナ２００）に再配置する場合、プロセス通信部４３７を介して、他の情報処理装置１１の再配置処理部４３３に、プロセス２２０の再配置を依頼する。また、再配置処理部４３３は、プロセス通信部４３７を介して、他の情報処理装置１１の再配置処理部４３３からプロセス２２０の再配置の依頼を受けた場合、第１の実施形態の同様の動作を基に、自装置におけるプロセス２２０を再配置に関する処理を実行する。
【０２３９】
図２１は、プロセス２２０の再配置を示すプロセス再配置情報３８１０の一例を示す図である。再配置処理部４３３が、再配置に際して、プロセス再配置情報３８１０を作成する。
【０２４０】
プロセス再配置情報３８１０は、番号３８１１と、再配置プロレス３８１２と、再配置元ＯＳ３８１３と、再配置元コンテナ３８１４と、再配置先装置３８１５と、再配置先ＯＳ３８１６と、再配置先コンテナ３８１７と、ライブラリ３８１８とを含む。
【０２４１】
番号３８１１は、プロセス再配置情報３８１０の情報の組を識別するための情報（例えば、番号又は識別子）である。図２１に示すプロセス再配置情報３８１０は、各行が１つの情報の組となっている。
【０２４２】
再配置プロセス３８１２は、再配置されたプロセス２２０を示す情報（例えば、識別子又は名称）である。
【０２４３】
再配置元ＯＳ３８１３は、再配置されたプロセス２２０が、再配置の前に動作していたホストＯＳ４００を示す情報（例えば、識別子又は名称）である。
【０２４４】
再配置元コンテナ３８１４は、再配置されたプロセス２２０が、再配置の前に動作していたコンテナ２００を示す情報（例えば、識別子又は名称）である。
【０２４５】
再配置先装置３８１５は、再配置されたプロセス２２０が、再配置された装置を示す情報（例えば、識別子、名称、又は、アドレス）である。
【０２４６】
再配置先ＯＳ３８１６は、再配置されたプロセス２２０が、再配置の後に動作しているホストＯＳ４００を示す情報（例えば、識別子又は名称）である。
【０２４７】
再配置先コンテナ３８１７は、再配置されたプロセス２２０が、再配置の後に動作しているコンテナ２００を示す情報（例えば、識別子又は名称）である。
【０２４８】
ライブラリ３８１８は、再配置されたプロセス２２０が用いるライブラリを示す情報（例えば、識別子又は名称）である。
【０２４９】
例えば、図２１に示す１行目のプロセス再配置情報３８１０は、ＯＳ１のコンテナＡで動作していたプロセスａが、ＤＥＶ２で動作するＯＳ２のコンテナＸに再配置されたことを示す。そして、１行目のプロセス再配置情報３８１０は、再配置されたプロセスａが、ライブラリｓｅｔＸを用いることを示す。
【０２５０】
図２２は、複数のホストＯＳ４００における共有を示すプロセス設計情報３８２０の一例を示す図である。再配置処理部４３３が、再配置に際して、プロセス設計情報３８２０を作成する。
【０２５１】
図２２に示すプロセス設計情報３８２０は、番号３８２１と、通信元プロセス３８２２と、通信元ＯＳ３８２３と、通信元コンテナ３８２４とを含む。さらに、プロセス設計情報３８２０は、通信先プロセス３８２５と、通信先装置３８２６と、通信先ＯＳ３８２７と、通信先コンテナ３８２８と、共有メモリ作成鍵３８２９とを含む。
【０２５２】
番号３８２１は、プロセス設計情報３８２０の情報の組を識別するための情報（例えば、番号又は識別子）である。図２２に示すプロセス設計情報３８２０は、各行が１つの情報の組となっている。
【０２５３】
通信元プロセス３８２２は、共有メモリ２３０を用いてデータを通信する通信元のプロセス２２０を示す情報（例えば、識別子又は名称）である。
【０２５４】
通信元ＯＳ３８２３は、通信元のプロセス２２０が動作するホストＯＳ４００を示す情報（例えば、識別子又は名称）である。
【０２５５】
通信元コンテナ３８２４は、通信元のプロセス２２０が動作するコンテナ２００を示す情報（例えば、識別子又は名称）である。
【０２５６】
通信先プロセス３８２５は、通信元のプロセス２２０と通信する通信先のプロセス２２０を示す情報（例えば、識別子又は名称）である。
【０２５７】
通信先装置３８２６は、通信先のプロセス２２０が動作する装置を示す情報（例えば、識別子、名称、又は、アドレス）である。
【０２５８】
通信先ＯＳ３８２７は、通信先のプロセス２２０が動作するホストＯＳ４００を示す情報（例えば、識別子又は名称）である。
【０２５９】
通信先コンテナ３８２８は、通信先のプロセス２２０が動作するコンテナ２００を示す情報（例えば、識別子又は名称）である。
【０２６０】
共有メモリ作成鍵３８２９は、通信元のプロセス２２０が、共有メモリ２３０を利用する場合に用いる共有鍵を示す情報（例えば、鍵の値）である。
【０２６１】
例えば、図２２の１行目に示すプロセス設計情報３８２０は、ホストＯＳ１上のコンテナＡで動作するプロセスａは、装置ＤＥＶ２で動作するホストＯＳ２上のコンテナＢに含まれるプロセスｂと共有メモリ２３０を用いて通信すること示す。さらに、１行目に示すプロセス設計情報３８２０は、プロセスａが、この処理に共有メモリ作成鍵「３６４７ａｆｃｄ３５３１」を用いることを示す。
【０２６２】
図１９を参照した説明に戻る。
【０２６３】
版数確認部４３６は、ホストＯＳ４００の版数を確認する。版数確認部４３６は、自装置のホストＯＳ４００の版数を確認する場合、ホストＯＳ４００の機能を用いる。また、版数確認部４３６は、他の情報処理装置１１のホストＯＳ４００の版数を確認する場合は、プロセス通信部４３７を介して、他の情報処理装置１１の版数確認部４３６に版数の確認を依頼する。また、版数確認部４３６は、プロセス通信部４３７を介して、他の情報処理装置１１の版数確認部４３６からホストＯＳ４００の版数の確認の依頼を受信した場合、ホストＯＳ４００の版数を返信する。
【０２６４】
図２３は、ホストＯＳ４００の版数情報３８３０の一例を示す図である。版数確認部４３６が、版数を確認する際に、版数情報３８３０を作成する。なお、版数確認部４３６は、版数情報３８３０を作成後は、作成した版数確認情報３９３０を用いてもよい。
【０２６５】
図２３に示す版数情報３８３０は、番号３８３１と、ホストＯＳ３８３２と、版数３８３３と含む。
【０２６６】
番号３８３１は、版数情報３８３０の情報の組を識別するための情報（例えば、番号又は識別子）である。図２３に示す版数情報３８３０は、各行が１つの情報の組となっている。
【０２６７】
ホストＯＳ３８３２は、情報の組のホストＯＳ４００を示す情報（例えば、識別子又は名称）である。
【０２６８】
版数３８３３は、ホストＯＳ４００の版数である。なお、版数３８３３は、情報処理装置１１が再配置を判定するために用いる版数である。例えば、版数３８３３は、プロセス２２０が用いるライブラリの互換性を判定するための版数である。版数３８３３の一例は、ホストＯＳ４００の基本部分であるカーネルの版数である。
【０２６９】
例えば、図２３に示す１行目の版数情報３８３０は、ホストＯＳ４００の名称が「ＯＳ１」であり、その版数が、「３．１８」であることを示す。
【０２７０】
図１９を参照した説明に戻る。
【０２７１】
プロセス通信部４３７は、他の情報処理装置１１との上記の通信を仲介する。
【０２７２】
図２０は、本実施形態に係るコンテナ接続部４２０の構成の一例を示すブロック図である。
【０２７３】
コンテナ接続部４２０は、第１の実施形態のコンテナ接続部１２０と比べ、物理メモリ共有部１２３に換えて物理メモリ共有部４２３を含む。さらに、コンテナ接続部４２０は、データ通信部４２４を含む。
【０２７４】
仮想メモリアドレス受信部１２１及び物理メモリアドレス特定部１２２は、第１の実施形態と同様のため、詳細な説明を省略する。
【０２７５】
物理メモリ共有部４２３は、第１の実施形態に係る物理メモリ共有部４２３の動作に加え、データ通信部４２４を介して、他の情報処理装置１１の物理メモリ共有部４２３との協調動作を実行する。
【０２７６】
より具体的には、物理メモリ共有部４２３は、次のような動作を実行する。
【０２７７】
プロセス２２０が、他の情報処理装置１１と共有メモリ２３０を共有する場合、物理メモリ共有部４２３は、データ通信部４２４を介して、他の情報処理装置１１の物理メモリ共有部４２３に共有するデータとその仮想メモリアドレスとを送信する。つまり、物理メモリ共有部４２３は、他の情報処理装置１１に、物理メモリ３００へのデータの書き込みを依頼する。
【０２７８】
また、物理メモリ共有部４２３は、データ通信部４２４を介して、他の情報処理装置１１の物理メモリ共有部４２３からデータと、その仮想メモリアドレスを受信した場合、共有メモリ２３０に対応する物理メモリ３００にデータを書き込む。
【０２７９】
データ通信部４２４は、物理メモリ共有部４２３におけるデータの送信及び受信を中継する。
【０２８０】
このように、本実施形態は、第１の実施形態の効果に加え、異なる装置におけるコンテナ２００で動作するプロセス２２０においても、共有メモリ２３０を用いたプロセス間通信を実現するとの効果を得ることができる。
【０２８１】
その理由は、次のとおりである。
【０２８２】
プロセス配置部４３０は、第１の実施形態の動作に加え、他の情報処理装置１１にも、プロセス２２０を再配置する。そして、コンテナ接続部４２０は、他の情報処理装置１１のコンテナ接続部４２０と協調して、共有メモリ２３０のデータをそれぞれが管理する物理メモリ３００に保存するためである。
【０２８３】
以上、実施形態を参照して本願発明を説明したが、本願発明は上記実施形態に限定されるものではない。本願発明の構成及び詳細には、本願発明のスコープ内で当業者が理解し得る様々な変更をすることができる。
【０２８４】
上記の実施形態の一部又は全部は、以下の付記のようにも記載されうるが、以下には限られない。
【０２８５】
（付記１）
データを記憶する物理メモリと、
他のプロセスとデータを共有する複数のプロセスと、
複数のプロセス間でデータを共有するための仮想メモリである共有メモリと、
共有メモリの仮想メモリアドレスを処理する仮想メモリアドレス処理手段とを含む複数のコンテナと、
複数のコンテナに含まれる共有メモリの仮想メモリアドレスと物理メモリのアドレスとの対応である第１の対応関係と、複数のコンテナにおける共有メモリに対応する物理メモリアドレス間の対応であり第２の対応関係とを基に、
いずれかコンテナに含まれる仮想メモリアドレス処理手段から書き込みデータとデータを書き込む共有メモリのアドレスである仮想メモリアドレスとを受信した場合に、仮想メモリアドレスに対応する第１の物理メモリのアドレスに受信したデータを書き込み、
第２の対応関係を基に、第１の物理メモリのアドレスに対応する第２の物理メモリのアドレスを取得し、第２の物理メモリのアドレスに受信したデータを書き込むコンテナ接続手段を含むホストＯＳと
を含む情報処理装置。
【０２８６】
（付記２）
ホストＯＳが
コンテナからプロセス及びコンテナに関連する情報を受信する情報受信手段と、
情報を基に含まれているコンテナの再配置が必要なプロセスを判定する再配置判定手段と、
再配置が必要と判定されたプロセスを動作可能な環境に再配置する再配置処理手段と、
プロセスの再配置後にプロセスのための環境の再配置が必要か否かを判定する配置先判定手段と、
配置先判定手段においてコンテナ接続手段の再配置が必要と判定された場合に、環境を再配置する配置処理手段と
を含むプロセス配置手段をさらに含む
付記１に記載の情報処理装置。
【０２８７】
（付記３）
コンテナ接続手段が、
他の装置とデータを通信するデータ通信手段をさらに含み、
第２の物理メモリのアドレスが、他の装置の物理メモリの場合、データ通信手段を介して、他の装置にデータを送信して、他の装置に送信したデータの第２の物理メモリへの書き込みを依頼する
付記１又は２に記載の情報処理装置。
【０２８８】
（付記４）
プロセス配置手段が、
ホストＯＳの版数を確認する版数確認手段と、
他の装置に通信するプロセス通信手段とをさらに含み、
版数確認手段が、プロセス通信手段を介して、他の装置のホストＯＳの版数を確認し、
再配置判定手段が、版数確認手段が確認したホストＯＳの版数を用いて再配置を判定し、
再配置判定手段が、再配置が必要と判定されたプロセスの再配置先が他の装置の場合、プロセス通信手段を介して、他の装置にプロセスの再配置を依頼する
付記３に記載の情報処理装置。
【０２８９】
（付記５）
データを記憶する物理メモリと、
他のプロセスとデータを共有する複数のプロセスと、
複数のプロセス間でデータを共有するための仮想メモリである共有メモリと、
共有メモリの仮想メモリアドレスを処理する仮想メモリアドレス処理手段とを含む複数のコンテナとを含む情報処理装置において、
複数のコンテナに含まれる共有メモリの仮想メモリアドレスと物理メモリのアドレスとの対応である第１の対応関係と、複数のコンテナにおける共有メモリに対応する物理メモリアドレス間の対応であり第２の対応関係とを基に、
いずれかコンテナに含まれる仮想メモリアドレス処理手段から書き込みデータとデータを書き込む共有メモリのアドレスである仮想メモリアドレスとを受信した場合に、仮想メモリアドレスに対応する第１の物理メモリのアドレスに受信したデータを書き込み、
第２の対応関係を基に、第１の物理メモリのアドレスに対応する第２の物理メモリのアドレスを取得し、第２の物理メモリのアドレスに受信したデータを書き込む
情報処理方法。
【０２９０】
（付記６）
データを記憶する物理メモリと、
他のプロセスとデータを共有する複数のプロセスと、
複数のプロセス間でデータを共有するための仮想メモリである共有メモリと、
共有メモリの仮想メモリアドレスを処理する仮想メモリアドレス処理手段とを含む複数のコンテナとを含むコンピュータにおいて、
複数のコンテナに含まれる共有メモリの仮想メモリアドレスと物理メモリのアドレスとの対応である第１の対応関係と、複数のコンテナにおける共有メモリに対応する物理メモリアドレス間の対応であり第２の対応関係とを基に、
いずれかコンテナに含まれる仮想メモリアドレス処理手段から書き込みデータとデータを書き込む共有メモリのアドレスである仮想メモリアドレスとを受信した場合に、仮想メモリアドレスに対応する第１の物理メモリのアドレスに受信したデータを書き込む処理と、
第２の対応関係を基に、第１の物理メモリのアドレスに対応する第２の物理メモリのアドレスを取得し、第２の物理メモリのアドレスに受信したデータを書き込む処理と
をコンピュータに実行させるプログラム。
【０２９１】
（付記７）
複数の付記３又は４に記載の情報処理装置を含む情報処理システム。
【符号の説明】
【０２９２】
１０    情報処理装置
１１    情報処理装置
１２    情報処理装置
２０    情報処理システム
９０    情報処理装置
９１    情報処理装置
１００    ホストＯＳ
１２０    コンテナ接続部
１２１    仮想メモリアドレス受信部
１２２    物理メモリアドレス特定部
１２３    物理メモリ共有部
１３０    プロセス配置部
１３１    情報受信部
１３２    再配置判定部
１３３    再配置処理部
１３４    配置先判定部
１３５    配置処理部
２００    コンテナ
２１０    仮想メモリアドレス処理部
２２０    プロセス
２３０    共有メモリ
３００    物理メモリ
４００    ホストＯＳ
４２０    コンテナ接続部
４２３    物理メモリ共有部
４２４    データ通信部
４３０    プロセス配置部
４３２    再配置判定部
４３３    再配置処理部
４３６    版数確認部
４３７    プロセス通信部
６００    情報処理装置
６１０    ＣＰＵ
６２０    ＲＯＭ
６３０    ＲＡＭ
６４０    内部記憶装置
６５０    ＩＯＣ
６６０    入力機器
６７０    表示機器
６８０    ＮＩＣ
７００    記憶媒体
９１０    ホストＯＳ
９１２    コンテナ管理部
９２０    コンテナ
１１００    メモリアドレス対応表
１１０１    番号
１１０２    仮想メモリアドレス
１１０３    コンテナ
１１０４    物理メモリアドレス
１３１０    コンテナ情報
１３１１    コンテナ
１３１２    ホスト
１３２０    構成情報
１３２１    番号
１３２２    プロセス
１３２３    ホスト
１３２４    コンテナ
１３３０    プロセス設計情報
１３３１    番号
１３３２    通信元
１３３３    通信先
１３３４    通信手段
１３３５    共有メモリ作成鍵
１３３６    ライブラリリスト
１３４０    ライブラリ情報
１３４１    ライブラリ名
１３４２    コンテナ版数
１４００    物理メモリアドレス対応表
１４０１    番号
１４０２    コンテナ
１４０３    物理メモリアドレス
１４０４    コンテナ
１４０５    物理メモリアドレス
２１１０    仮想メモリアドレス
２１１１    番号
２１１２    プロセス
２１１３    コンテナ
２１１４    仮想メモリアドレス
３８１０    プロセス再配置情報
３８１１    番号
３８１２    再配置プロセス
３８１３    再配置元ＯＳ
３８１４    再配置元コンテナ
３８１５    再配置先装置
３８１６    再配置先ＯＳ
３８１７    再配置先コンテナ
３８１８    ライブラリ
３８２０    プロセス設計情報
３８２１    番号
３８２２    通信元プロセス
３８２３    通信元ＯＳ
３８２４    通信元コンテナ
３８２５    通信先プロセス
３８２６    通信先装置
３８２７    通信先ＯＳ
３８２８    通信先コンテナ
３８２９    共有メモリ作成鍵
３８３０    版数情報
３８３１    番号
３８３２    ホストＯＳ
【図１】
2016173741.tif 000003
【図２】
2016173741.tif 000004
【図３】
2016173741.tif 000005
【図４】
2016173741.tif 000006
【図５】
2016173741.tif 000007
【図６】
2016173741.tif 000008
【図７】
2016173741.tif 000009
【図８】
2016173741.tif 000010
【図９】
2016173741.tif 000011
【図１０】
2016173741.tif 000012
【図１１】
2016173741.tif 000013
【図１２】
2016173741.tif 000014
【図１３】
2016173741.tif 000015
【図１４】
2016173741.tif 000016
【図１５】
2016173741.tif 000017
【図１６】
2016173741.tif 000018
【図１７】
2016173741.tif 000019
【図１８】
2016173741.tif 000020
【図１９】
2016173741.tif 000021
【図２０】
2016173741.tif 000022
【図２１】
2016173741.tif 000023
【図２２】
2016173741.tif 000024
【図２３】
2016173741.tif 000025
【図２４】
2016173741.tif 000026
【図２５】
2016173741.tif 000027