特許第5784792号(P5784792)IP Force 特許公報掲載プロジェクト 2022.1.31 β版

知財求人 - 知財ポータルサイト「IP Force」

▶ 西日本電信電話株式会社の特許一覧

<>
  • 特許5784792-通信機器及びプログラム 図000002
  • 特許5784792-通信機器及びプログラム 図000003
  • 特許5784792-通信機器及びプログラム 図000004
  • 特許5784792-通信機器及びプログラム 図000005
  • 特許5784792-通信機器及びプログラム 図000006
  • 特許5784792-通信機器及びプログラム 図000007
  • 特許5784792-通信機器及びプログラム 図000008
  • 特許5784792-通信機器及びプログラム 図000009
< >
(19)【発行国】日本国特許庁(JP)
(12)【公報種別】特許公報(B1)
(11)【特許番号】5784792
(24)【登録日】2015年7月31日
(45)【発行日】2015年9月24日
(54)【発明の名称】通信機器及びプログラム
(51)【国際特許分類】
   G06F 9/50 20060101AFI20150907BHJP
   G06F 11/00 20060101ALI20150907BHJP
   G06F 9/44 20060101ALI20150907BHJP
【FI】
   G06F9/06 640H
   G06F9/06 630B
   G06F9/06 620K
【請求項の数】5
【全頁数】14
(21)【出願番号】特願2014-96491(P2014-96491)
(22)【出願日】2014年5月8日
【審査請求日】2014年6月3日
(73)【特許権者】
【識別番号】399041158
【氏名又は名称】西日本電信電話株式会社
(74)【代理人】
【識別番号】100130513
【弁理士】
【氏名又は名称】鎌田 直也
(74)【代理人】
【識別番号】100074206
【弁理士】
【氏名又は名称】鎌田 文二
(74)【代理人】
【識別番号】100130177
【弁理士】
【氏名又は名称】中谷 弥一郎
(72)【発明者】
【氏名】芝崎 拓弥
(72)【発明者】
【氏名】大畑 博敬
【審査官】 石川 亮
(56)【参考文献】
【文献】 特開平5−341968(JP,A)
【文献】 特開2009−37353(JP,A)
(58)【調査した分野】(Int.Cl.,DB名)
G06F 9/44 − 9/445
G06F 9/50
G06F 11/00
(57)【特許請求の範囲】
【請求項1】
スタティックリンクライブラリを含むプラットフォームと、当該プラットフォーム上に構築された仮想マシンと、当該仮想マシン上で動作し、前記スタティックリンクライブラリを利用するソフトウェアとを備える通信機器において、
前記ソフトウェアが、自己に関連した依存関係の更新の際、自己で参照中の前記スタティックリンクライブラリ用に確保されたメモリのネイティブ領域を解放させるメモリ掃除機能を含むことを特徴とする通信機器。
【請求項2】
前記メモリ掃除機能は、前記ソフトウェアにロード又は起動命令が与えられた場合、当該ソフトウェアによって利用される前記スタティックリンクライブラリの読込成功まで、当該スタティックリンクライブラリ用に確保されるべき前記メモリのネイティブ領域を解放させる処理を繰り返す請求項1に記載の通信機器。
【請求項3】
前記依存関係の更新の際に、前記仮想マシンのガベージコレクタを強制起動させる制御手段を備える請求項1又は2に記載の通信機器。
【請求項4】
前記依存関係の更新の際に、前記仮想マシンのガベージコレクタを強制起動させる制御手段と、前記仮想マシンで起動すべきソフトウェアが規定された一覧とを備え、
前記制御手段は、前記強制起動の実施後に前記仮想マシンの処理対象になっている各ソフトウェアのライフサイクル状況を取得し、前記一覧及び当該取得したライフサイクル状況間の一致性を判断する処理を、当該判断結果が一致になるまで繰り返す請求項3に記載の通信機器。
【請求項5】
スタティックリンクライブラリを含むプラットフォーム上に仮想マシンが構築されたコンピュータに実行させるプログラムにおいて、
前記仮想マシン上で動作するソフトウェアに含まれており、かつ当該ソフトウェアに対して削除又は停止の命令が与えられたことを契機として、当該ソフトウェアで参照中の前記スタティックリンクライブラリ用に確保されたメモリのネイティブ領域を解放させるメモリ掃除手順を前記コンピュータに実行させることを特徴とするプログラム。
【発明の詳細な説明】
【技術分野】
【0001】
この発明は、プラットフォームのスタティックリンクライブラリを仮想マシン上のソフトウェアから利用可能なコンピュータを備える通信機器、及び当該コンピュータで実行されるプログラムに関する。
【背景技術】
【0002】
近年、ホームゲートウェイ(HGW)のような通信機器においても、Java(登録商標)仮想マシン(Java virtual machine:JVM)機能が搭載されるようになっている。このJVMでは、Java領域のアプリケーションソフトウェアであるバンドルが、ネイティブ(Native)領域のライブラリを利用(JNI機能)して様々な機能を提供する。
【0003】
動的に複数のバンドルからライブラリを参照可能なダイナミックリンクライブラリ(DLL)に対応した通信機器では、常駐的な監視モジュールによって適切なタイミングでメモリ解放が自動的に実行されるようになっている(例えば、特許文献1、2)。
【0004】
通信機器に備わるコンピュータは、通信処理のために中央演算処理装置(CPU)のリソースを消費する。限られたられたCPUリソースを保証するため、機種によっては、DLLを採用せず、ライブラリを利用するバンドルが常に一意に決まるスタティックリンクライブラリ(Static Link Library:SLL)を採用しているものがある。SLLでは、ネイティブ領域において常に固定的なソフトウェアからのライブラリ利用が保証されるので、動的にメモリ解放を実施する等の管理を行う必要がなく、CPU等のリソース消費を抑えることが可能となる。
【先行技術文献】
【特許文献】
【0005】
【特許文献1】特開平5−341968号公報
【特許文献2】特開2009−37353号公報
【発明の概要】
【発明が解決しようとする課題】
【0006】
しかしながら、一度、SLLが利用中になると、当該SLLのために確保されているメモリ領域を動的に解放することがない。このため、SLLを利用中の既存バンドルに代えて別バンドルに当該SLLを利用させたいときであっても、既に利用中であるため、拒否される。このような状況に加え、ライブラリを参照しているバンドル自体の動作、例えば既存バンドルに更新が入った場合や、バンドル間の依存関係の更新が発生してバンドルのライフサイクル状況が変化した場合(起動状態から停止し再度起動するなど)、更新前のバンドル・当該SLLの利用関係を示す情報がメモリ領域に残っているので、更新後のバンドルは、当該SLL用にメモリ確保できず、当該SLLを利用できない。このため、サービス継続不可な状況に陥る。
【0007】
この状況に陥ることを避けるため、従来、バンドルの依存関係を更新する際には通信機器自体の再起動等を実施し、バンドル自体の更新が入った場合にはバンドル自体を内包するプラットフォームのファームウェア自体の更新を実施する必要があった。また、ファームウェア自体の更新が実施できない場合、ライブラリを利用するバンドルについて更新やライフサイクル制御を対象外として、これら処理を行わないようにしていた。
【0008】
バンドルをDLL前提にすると、DLL非対応の通信機器を使用する既存ユーザを切り捨てることになり、現実的でない。
【0009】
上述の背景に鑑み、この発明が解決しようとする課題は、プラットフォームのSLLを利用する仮想マシン上のソフトウェアについて、SLLを利用中のソフトウェアの更新、又はSLLを利用すべきソフトウェアの変更が発生した場合でも、ファームウェアの更新を行うことなく、当該SLLを利用する更新又は変更後のソフトウェアの起動を可能とすることである。
【課題を解決するための手段】
【0010】
上記の課題を解決するため、この発明は、スタティックリンクライブラリ(SLL)を含むプラットフォームと、当該プラットフォーム上に構築された仮想マシンと、当該仮想マシン上で動作し、前記スタティックリンクライブラリを利用するソフトウェアとを備える通信機器において、前記ソフトウェアが、自己に関連した依存関係の更新の際、自己で参照中の前記スタティックリンクライブラリ用に確保されたメモリのネイティブ領域を解放させるメモリ掃除機能を含む構成を採用した。
【0011】
仮想マシンでは、利用中のソフトウェアの更新や利用すべきソフトウェアの変更のために依存関係の更新を行う際、当該ソフトウェアに対し、停止や再度起動が命令されることになる。当該ソフトウェアに含まれたメモリ掃除機能によれば、当該命令が与えられたことを契機として、参照中に係るメモリのネイティブ領域を解放させるための命令を出すことが可能である。このように、参照を削除すべきソフトウェア側からプラットフォーム側に対して明示的にメモリ解放させると、DLLのような常駐的な監視モジュールのような重いリソース負担にならず、ファームウェアの更新を行うことなく、当該スタティックリンクライブラリを新たなソフトウェアから参照可能な状態となる。すなわち、SLLを利用中のソフトウェアの更新、又はSLLを利用すべきソフトウェアの変更が発生した場合でも、ファームウェアの更新を行うことなく、当該SLLを利用する更新又は変更後のソフトウェアの起動が可能になる。また、依存関係の更新の際に必ず発生する一時的なサービス停止時期に合わせてメモリ解決処理を行うことができ、当該処理による新たな一時的サービル停止が発生しない利点もある。
【0012】
この発明は、スタティックリンクライブラリを含むプラットフォーム上に仮想マシンが構築されたコンピュータに実行させるプログラムにおいて、前記仮想マシン上で動作するソフトウェアに含まれており、かつ当該ソフトウェアに対して削除又は停止の命令が与えられたことを契機として、当該ソフトウェアで参照中の前記スタティックリンクライブラリ用に確保されたメモリのネイティブ領域を解放させるメモリ掃除手順を前記コンピュータに実行させる構成を採用することによって実現することができる。
【発明の効果】
【0013】
上述のように、この発明は、上記構成の採用により、プラットフォームのSLLを利用する仮想マシン上のソフトウェアについて、SLLを利用中のソフトウェアの更新、又はSLLを利用すべきソフトウェアの変更が発生した場合でも、ファームウェアの更新を行うことなく、当該SLLを利用する更新又は変更後のソフトウェアの起動を可能とすることができる。
【図面の簡単な説明】
【0014】
図1】この発明に係る実施例においてSLLを利用するバンドルに関連した依存関係の更新処理例の概要を示すシーケンス図
図2】実施例に係る通信機器のプログラム実行環境を示す概念図
図3】実施例のライブラリ一覧テーブルの構造を示す概念図
図4】実施例の起動バンドル一覧の構造を示す概念図
図5】実施例の制御バンドルの処理内容を示すフローチャート
図6】実施例のメモリ掃除機能の処理内容を示すフローチャート
図7】実施例のメモリ管理モジュールの処理内容を示すフローチャート
図8図1の動作の依存関係更新の想定例を示す概念図
【発明を実施するための形態】
【0015】
第1実施形態は、前記メモリ掃除機能をより具体化したものである。すなわち、第1実施形態において、メモリ掃除機能は、前記ソフトウェアにロード又は起動命令が与えられた場合、当該ソフトウェアによって利用される前記スタティックリンクライブラリの読込成功まで、当該スタティックリンクライブラリ用に確保されるべき前記メモリのネイティブ領域を解放させる処理を繰り返す。
【0016】
前記メモリのネイティブ領域解放が失敗することは稀だが、もし失敗した場合、前記更新又は変更後のソフトウェアの起動失敗に直結する。第1実施形態は、ソフトウェアが依存関係の更新によってSLLの新たな結合相手となった場合(すなわち、前記更新又は変更後のソフトウェアとなる場合)、更新前のネイティブ領域解放が失敗していても、当該ソフトウェアのメモリ掃除機能が当該SLLの読込に成功するまでSLL用に確保すべきメモリのネイティブ領域解放を行うため、当該ソフトウェアを確実に起動することが可能となる。
【0017】
この発明の第2実施形態に係る通信機器は、前記依存関係の更新の際に、前記仮想マシンのガベージコレクタを起動させる制御手段を備える。
【0018】
前記メモリのネイティブ領域解放により、前記依存関係の更新前におけるソフトウェアの参照がなくなっても、メモリの仮想マシン固有領域には、当該更新前のソフトウェアで作成されたオブジェクトが残ることがある。この不要なオブジェクトは、一般に、仮想マシン上で動作するガベージコレクタにより自動的に削除されるが、ガベージコレクタの動作は、リソース負担が大きく、削除タイミングは、ガベージコレクタ自体の仕様に依存する。第2実施形態は、当該更新に伴うサービス停止によってリソースに余裕ができたタイミングでガベージコレクタを起動させることができる。ひいては、可及的速やかにメモリの仮想マシン固有領域から不要なオブジェクトを削除し、当該領域でのメモリ不足によって前記更新又は変更後のソフトウェアの起動ができない事態を防ぐことができる。
【0019】
第3実施形態は、前記第2実施形態をより具体化したものである。すなわち、第3実施形態に係る通信機器は、前記仮想マシンで起動すべきソフトウェアが規定された一覧を備える。また、前記制御手段は、前記強制起動の実施後に前記仮想マシンの処理対象になっている各ソフトウェアのライフサイクル状況を取得し、前記一覧及び当該取得したライフサイクル状況間の一致性を判断する処理を、当該判断結果が一致になるまで繰り返す。
【0020】
一般に、仮想マシンは、仮想マシン上で動作する各ソフトウェアのライフサイクルを管理するため、ライフサイクル状況の取得機能を有する。仮想マシンで起動すべきソフトウェアが規定された一覧と、取得したライフサイクル状況で起動中のものとが不一致の場合、ガベージコレクションの失敗及び前述のメモリ不足が重なり、前記更新でSLLの新たな結合相手と定まったソフトウェア、すなわち前記更新又は変更後のソフトウェアの起動に失敗したことになる。一方、一致している場合、起動に成功したことになる。第3実施形態は、当該判断結果が一致になるまでガベージコレクタを強制起動するので、前述のメモリ不足による起動失敗を確実に防止することができる。なお、第2又は第3実施形態は、第1実施形態と組み合わせて採用することができる。
【実施例】
【0021】
以下、この発明の一実施例に係る通信機器を説明する。図2に示す通信機器1は、エンドユーザ宅に設置されるホームゲートウェイ(Home-Gateway:HGW)として構成されている。通信機器1には、LAN(Local Area Network)とWAN(Wide Area Network)とを相互接続するルータとしての機能の他に、例えば、IP(Internet Protocol)電話サービスの加入者側対応装置として各種呼制御に関する諸機能、VPN(Virtual Private Network)機能、Java(登録商標)機能などが搭載される。
【0022】
通信機器1は、1つ以上のスタティックリンクライブラリ11を含むプラットフォーム10と、プラットフォーム10上に構築された仮想マシン20と、仮想マシン20上で動作する1つ以上のソフトウェア21とを備える。
【0023】
プラットフォーム10は、仮想マシン20が動作するための基盤として機能し、中央演算処理装置(CPU)、揮発性メモリ装置、不揮発性メモリ装置、LANポート、WANポートといったハードウェア資源と、ハードウェア資源を直接に制御するファームウェア、OS(Operating System)といったソフトウェア資源によって構成されている。
【0024】
スタティックリンクライブラリ11は、静的リンクによって利用するよう想定・設計されたライブラリファイルからなる(以下、「SLL11」と呼ぶ。)。SLL11は、例えば、C言語の汎用的な関数ライブラリである。
【0025】
仮想マシン20は、プラットフォーム非依存性の仮想的な実行環境を構築し、その上でソフトウェアを実行する。具体的には、仮想マシン20は、所定のオブジェクト指向言語で記述されたソフトウェアの中間コードをプラットフォーム10の実行環境に応じたネイティブコードに変換する。
【0026】
実施例の仮想マシン20は、プラットフォーム10をネイティブ(Native)領域としたJava仮想マシン(JVM)になっている。
【0027】
ソフトウェア21は、Native領域のSLL11等のライブラリを仮想マシン20上から利用するアプリケーションソフトウェアになっている。ソフトウェア21は、Javaアプリケーションバンドルになっている(以下、「利用バンドル21」と呼ぶ。)。
【0028】
プラットフォーム10は、他からの命令に応じてメモリ確保及びメモリ解放を実行するメモリ管理モジュール12を有する。メモリ管理モジュール12は、図3に示すように、各SLLとメモリ情報を対応付けて一覧にしたライブラリ一覧テーブル13(以下、「ライブラリ一覧13」と呼ぶ。)に基づいて、メモリのネイティブ領域を管理する。ライブラリ一覧13は、揮発性メモリ装置に保持される。メモリ情報は、SLL用に確保されたメモリのネイティブ領域を示す情報である。ライブラリ一覧13は、利用バンドルからのSLLの参照が外れた後に、当該SLLに対応したメモリ情報を解放する際にどのメモリ領域を解放するかを参照するためのものである。
【0029】
SLL用に確保されたメモリは、図2に示すように、仮想マシン固有領域22と、OS固有領域23とからなる。仮想マシン固有領域22は、仮想マシン20上で動作するアプリケーションソフトウェアの各種オブジェクトを格納する領域である。OS固有領域23は、仮想マシン20自身が使用する領域であり、OS上で直接実行可能なライブラリを実行する際に使用する領域となる。すなわち、SLL用に確保されたメモリのネイティブ領域は、OS固有領域23内に存在する。実施例の場合、仮想マシン20がJVMからなるので、Javaオブジェクトの格納に使用するJavaヒープが仮想マシン固有領域22に含まれ、OSネイティブのライブラリの実行に使用するCヒープがOS固有領域23に含まれ、前記メモリ情報は、ポインタによって表される。メモリ管理モジュール12は、メモリから返却されたメモリ情報(ポインタの値)を図3に示すライブラリ一覧13に登録し、また、メモリ解放の対象となったメモリ情報をライブラリ一覧13から削除する更新処理を行う。
【0030】
また、図2に示すように、仮想マシン20は、制御バンドル24を有する。制御バンドル24は、利用バンドル21の起動や停止などのライフサイクルに関した制御を行う。
【0031】
また、通信機器1は、仮想マシン20で起動すべきソフトウェアが規定された一覧25を備える。一覧25は、図4に示すように、通信機器1自体又は仮想マシン20自体が再起動した際、通信機器1の状況に合わせて起動するべきバンドルの一覧テーブルになっている(以下、「起動バンドル一覧25」と呼ぶ。)。起動バンドル一覧25は、バンドルの増減を知る以外に、バージョンの変更も検知するための情報を保持している。起動バンドル一覧25は、不揮発性メモリ装置に保持される。通信機器1の状況変化に応じた仮想マシン20の自動処理により、起動すべきバンドルを変更する起動バンドル一覧25の更新が実施される。
【0032】
制御バンドル24は、起動させるバンドルを起動バンドル一覧25に基づいて決定する。
【0033】
また、図2に示すように、仮想マシン20は、ガベージコレクタ26を有する。ガベージコレクタ26は、他から参照されていない仮想マシン固有領域22のオブジェクトを自動的に、又は他から命令を受けて削除する。
【0034】
制御バンドル24は、利用バンドル21に関連した依存関係の更新の際にガベージコレクタ26を強制起動させる制御手段としてCPUを機能させるためのプラグラムも含んでいる。
【0035】
利用バンドル21は、自己に関連した依存関係の更新の際、自己で参照中のSLL11用に確保されたメモリのネイティブ領域を解放させるメモリ掃除機能27を含んでいる。メモリ掃除機能27の処理内容は、利用バンドル21のソースコードに記述されている。
【0036】
メモリ掃除機能27は、利用バンドル21に対して削除又は停止の命令が与えられたことを契機として、メモリ管理モジュール12に対し、利用バンドル21の名前(スタティックリンクライブラリ名)を通知すると共に対応のメモリ情報の削除命令を出すことにより、参照中のSLL11用に確保されたメモリのネイティブ領域を解放させるメモリ操作手順をCPUに実行させる。
【0037】
また、メモリ掃除機能27は、利用バンドル21に読込命令が与えられたことを契機として、利用バンドルによって利用されるSLL11の読込成功まで、SLL11用に確保されるべきメモリのネイティブ領域を解放させる処理を繰り返す。
【0038】
制御バンドル24に関する具体的な処理内容を図5に示す。先ず、制御バンドル24は、仮想マシン20の起動後、CPUに常駐する(開始)。制御バンドル24は、利用バンドル21に関連した依存関係の更新契機となる所定のイベントを取得する(S1)。所定のイベントとして、起動するべき利用バンドル種別の変更、又は利用バンドルの再起動の発生が設定されている。イベントを取得する方法は、サービスを利用する方法等が存在するが、特に限定されない。イベントの発生に伴い、起動バンドル一覧25におけるバージョン情報、起動すべきバンドルの変更が、仮想マシン20によって行われる。
【0039】
制御バンドル24は、(S1)でイベントを取得すると、変更後の起動バンドル一覧25を取得し(S2)、依存関係の更新命令を仮想マシン20に出すことにより、利用バンドル21の削除、停止、SLL11の新たな結合相手とする利用バンドル21のインストールや起動を仮想マシン20に実行させる(S3)。仮想マシン20がJVMからなる場合、利用バンドルに関連した依存関係の更新は、「PackageAdmin.refleshPackage()」によって実行させることができる。この更新命令後、制御バンドル24は、ガベージコレクタ26を強制起動させるための命令を仮想マシン20に出す(S4〜S6)。これにより、当該更新に伴うサービス停止によってリソースに余裕ができたタイミングでガベージコレクタ26を起動させることができる。ひいては、可及的速やかに仮想マシン固有領域22から不要なオブジェクトを削除し、当該領域でのメモリ不足によって利用バンドル21の起動ができない事態を防ぐことができる。
【0040】
ここで、制御バンドル24は、(S4)〜(S6)により、ガベージコレクタ26の強制起動を規定回数nだけ実施した後、変更後の起動バンドル一覧25と、仮想マシン20の処理対象になっている各ソフトウェアのライフサイクル状況とを取得する(S7、S8)。仮想マシン20がJVMからなる場合、ライフサイクル状況は、「Bundle.getState()」の実行により、仮想マシン20上で動作中の全てのバンドルについて夫々のステータス状態が記述されたリストとして出力される。例えば、起動中のバンドルには、ステータス状態として「ACTIVE」が記述され、起動中でないバンドルには、その状態に応じて「INSTALLED」、「RESOLVED」、「STARTING」、「STOPPING」といった記述がなされる。
【0041】
制御バンドル24は、(S7、S8)で取得した起動バンドル一覧25及びライフサイクル状況間の一致性を判断する(S9)。ここで、制御バンドル24は、一覧25で特定された起動すべき全てのバンドルと、ライフサイクル状況の中でステータス状態が起動中(例えば、仮想マシン20がJVMからなる場合は「ACTIVE」)の全てのバンドルとが完全に一致する場合、一致すると判断し、それ以外は、不一致と判断する。
【0042】
制御バンドル24は、(S9)において、判断結果が不一致の場合、(S4)〜(S9)の処理を繰り返し、一致の場合、処理を終了する。これにより、前述の仮想マシン固有領域22のメモリ不足による起動失敗を確実に防止することができる。
【0043】
メモリ掃除機能27、メモリ管理モジュール12に関する具体的な処理内容を図6図7に示す。先ず、メモリ掃除機能27は、利用バンドル21の起動により、仮想マシン20上で動作する状態となる(開始)。メモリ掃除機能27は、仮想マシン20からライフサイクル制御用の命令が与えられるまで待機している(S21)。対象の命令は、仮想マシン20がJVMからなる場合、「uninstall」、「stop」、「install」、「start」になる。
【0044】
メモリ掃除機能27は、仮想マシン20から利用バンドル21に削除(uninstall)又は停止(stop)の命令が与えられた場合(S22)、利用バンドル21で参照中のSLL11用に確保されたメモリのネイティブ領域を解放させるための命令をメモリ管理モジュール12に出す(S23)。これにより、利用バンドル21が終了する。
【0045】
メモリ管理モジュール12は、利用バンドル21から取得したライブラリ情報からSLL11を特定し(S31)、ライブラリ一覧テーブル13からSLL11のスタティックリンクライブラリ名に対応のメモリ情報を取得し(S32)、当該メモリ情報に該当するメモリのネイティブ領域を解放する命令を揮発性メモリ装置に出し(S33)、処理を終了する。
【0046】
利用バンドル21は、(S22)において、仮想マシン20から自己にロード(install)又は起動(start)の命令が与えられた場合、SLL11の読込(ロード)を実施する(S24)。仮想マシン20がJVMからなる場合、「System.loadLibrary」の実行により、読込が実行される。メモリ掃除機能27は、SLL11の読込に成功したか否かを監視する(S25)。
【0047】
メモリ掃除機能27は、(S25)において読込に成功した場合、これを取得した場合、処理を終了する。なお、メモリ管理モジュール12がメモリ確保に成功した場合、メモリ管理モジュール12からスタティックリンクライブラリ名を返されるので、この通知をもって読込成功と判断し、処理を終了するようにしてもよい。
【0048】
メモリ掃除機能27は、(S25)において読込に失敗した場合、利用バンドル21によって利用されるSLL11の読込成功まで、SLL11用に確保されるべきメモリのネイティブ領域を解放させるための命令をメモリ管理モジュール12に出す(S24〜S26)。これを受けてメモリ管理モジュール12は、(S31)〜(S33)を実行する。なお、(S25)において、メモリ掃除機能27は、メモリ管理モジュール12からエラー通知、タイムアウト等によって読込に失敗したと判断する。
【0049】
このように、メモリ掃除機能27は、(S24)〜(S26)の処理を(S25)において読込に成功するまで繰り返す。これにより、更新前からSLL11用に確保されているメモリのネイティブ領域解放が失敗していても、新たに起動される利用バンドル21のメモリ掃除機能27がSLL11の読込に成功するまでSLL11用に確保すべきメモリのネイティブ領域解放を行うため、当該利用バンドル21を確実に起動することが可能となる。
【0050】
以下、通信機器1の動作例を図1図8に基づいて説明する。先ず、同図中に記載の制御バンドル24の処理に関する「起動バンドルが変化」の想定例について説明する。通信機器1は、通信事業者Aと通信事業者Bに対し、同じ初期設定で出荷される。仮想マシン20は、JVMになっている。通信事業者Aは、A地域をアクセス網提供サービスの事業エリアとする。通信事業者Bは、A地域と異なるB地域をアクセス網提供サービスの事業エリアとする。通信事業者A及び通信事業者B間には、通信機器1を利用して提供するサービス内容に差異がある。図8に示すように、通信機器1には、AB判定バンドル31、Aエリアバンドル32、Bエリアバンドル33、利用バンドル21、A単独バンドル34、B単独バンドル35が搭載されている。Aエリアバンドル32は、A単独バンドル34及び利用バンドル21を利用するものとされ、A単独バンドル34は、通信事業者Aのみが提供するサービス機能を追加するためのものとなっている。Bエリアバンドル33は、B単独バンドル35及び利用バンドル21を利用するものとされ、B単独バンドル35は、通信事業者Bのみが提供するサービス機能を追加するものとなっている。利用バンドル21は、通信事業者A、B間で同じ基本的機能を実現するためのものとなっている。通信機器1が物理的にアクセス網に接続された後、通信機器1自体が初めて起動されたときに起動すべきハンドルは、AB判定バンドル31及び利用バンドル21に定められている。
【0051】
その初回起動時、利用バンドル21は、SLL11を以前に参照したものがないため、確実に起動する。すなわち、図1に示すように制御バンドル24を経て、利用バンドル21の起動の際、メモリ管理モジュール12により、SLL11用にメモリのネイティブ領域が確保され、返却されたポインタがライブラリ一覧13にメモリ情報として記述される。
【0052】
また、初回起動時、AB判定バンドル31は、通信機器1が通信事業者A又はBのいずれに接続されているかを判定し、その判定結果に応じて、Aエリアバンドル32又はBエリアバンドル33のいずれを使用するかを決定する。Aエリアバンドル32に決定した場合に起動すべきバンドルは、Aエリアバンドル32、A単独バンドル34及び利用バンドル21と定められている。Bエリアバンドル33に決定した場合に起動すべきバンドルは、Bエリアバンドル33、B単独バンドル35及び利用バンドル21と定められている。いずれに決定された場合でも、初回起動時から起動すべきバンドルが変化することになり、AB判定バンドル31は、起動バンドル一覧25を更新する。この変化が同図中の「起動バンドルが変化」の想定例である。この想定例では、仮想マシン20において、利用バンドル21に関連した依存関係の更新が発生するため、利用バンドル21を一旦停止させ、その更新後にAエリアバンドル32又はBエリアバンドル33と共に利用バンドル21を再び起動させることが必要になる。
【0053】
次に、図1中に記載の利用バンドル21の処理に関する「更新」の想定例について説明する。この想定例は、利用バンドル21を新しいバージョンに更新することである。この想定例では、新バージョンの利用バンドル21がダウンロードされると、起動バンドル一覧25に新規登録される。起動すべきバンドルは、旧バージョンの利用バンドル21に代わって新バージョンの利用バンドル21となるように定められている。新バージョンの利用バンドル21を起動するには、利用バンドル21に関連した依存関係の更新が発生するため、既に起動している旧バージョンの利用バンドル21を停止させ、依存関係の更新後に新バージョンの利用バンドル21を起動させることが必要になる。以下、図5図7のフローチャートに対応のステップ符号を適宜に示す。
【0054】
図1に示すように、前述の「起動バンドルが変化」又は「更新」のいずれかの発生により、利用バンドル21に関連した依存関係の更新が発生した際の動作は、次のようになる。なお、メモリのネイティブ領域のメモリ解放、ガベージコレクションに1回で成功した例で説明する。先ず、「起動バンドルが変化」又は「更新」が発生すると(S1)、起動すべきバンドルに変更が生じ、制御バンドル24は、その変更後の起動バンドル一覧25を取得する(S2)。
【0055】
次に、制御バンドル24は、利用バンドル21に関連した依存関係の更新を仮想マシン20に命令する(S3)。これを受けて仮想マシン20は、利用バンドル21に削除又は停止を命令する(S21)。これを受けて利用バンドル21のメモリ掃除機能は、SLL11用に確保されたメモリのネイティブ領域の解放をメモリ管理モジュール12に命令する(S22、S23)。これを受けてメモリ管理モジュール12は、ライブラリ一覧テーブル13からSLL11に対応のメモリ情報を取得し(S31、S32)、C言語の「Free()」の実行により、揮発性メモリ装置に当該メモリ情報に対応した領域のメモリ解放を命令する(S33)。これにより、SLL11用に確保されたメモリのネイティブ領域が解放される。通常、メモリ解放に成功するので、新たに起動する利用バンドル21のメモリ掃除機能27によるメモリ解放処理には至らない(S22、S24〜S26)。
【0056】
また、制御バンドル24は、依存関係の更新を命令したことを契機として(S3)、仮想マシン20にガベージコレクタ26の強制起動を命令する(S4)。これを受けてガベージコレクタ26がガベージコレクションを実行する(S5〜S6)。これにより、依存関係の更新前から利用バンドル21用に確保されている仮想マシン固有領域22内の領域が解放される。解放成功を確認した制御バンドル24は、ガベージコレクタ26の強制起動を終了する(S7〜S9)。なお、強制起動の規定回数nは、5回程度に設定するとよい。
【0057】
また、仮想マシン20は、新バージョンの利用バンドル21のロード、又は停止した利用バンドル21の起動をするための処理を開始し、当該利用バンドル21用に仮想マシン固有領域22内の領域を確保する。
【0058】
次に、仮想マシン20は、新バージョンの利用バンドル21にロード、又は停止した利用バンドル21に起動を命令する。これを受けた当該利用バンドル21は、SLL11の名前通知と読込命令をメモリ管理モジュール12に出す。これを受けてメモリ管理モジュール12は、C言語の「malloc()」の実行により、当該必要なネイティブ領域の確保を揮発性メモリ装置に命令する。これを受けて揮発性メモリ装置は、対応のOS固有領域23内に領域を確保し、SLL11の読込に成功し、メモリ管理モジュール12にポインタを返却する。これを受けたメモリ管理モジュール12は、ライブラリ一覧13に、ポインタに基づいてSLL11に対応のメモリ情報を登録し、また、当該利用バンドル21にSLL11の名前を通知する。以後、利用バンドル21は、SLL11の参照成功を知り、起動を完了する。
【0059】
通常、ここまでの処理に比べて、ガベージコレクタ26が5回程度のガベージコレクション実施を完了するまでに時間を要する。したがって、制御バンドル24は、規定回数の実施完了後、起動バンドル一覧25と、ライフサイクル状況とを取得し、その一致性を判断することになり、次の規定回数の実施に至らない。
【0060】
この発明の技術的範囲は、上述の実施形態や実施例に限定されず、特許請求の範囲の記載に基く技術的思想の範囲内での全ての変更を含むものである。
【符号の説明】
【0061】
1 通信機器
10 プラットフォーム
11 スタティックリンクライブラリ(SLL)
12 メモリ管理モジュール
13 ライブラリ一覧テーブル(ライブラリ一覧)
20 仮想マシン
21 ソフトウェア(利用バンドル)
22 仮想マシン固有領域
23 OS固有領域
24 制御バンドル
25 一覧(起動バンドル一覧)
26 ガベージコレクタ
27 メモリ掃除機能
【要約】
【課題】プラットフォームのSLLを利用する仮想マシン上のソフトウェアについて、SLLを利用中のソフトウェアの更新、又はSLLを利用すべきソフトウェアの変更が発生した場合でも、ファームウェアの更新を行うことなく、当該SLLを利用する更新又は変更後のソフトウェアの起動を可能とする。
【解決手段】ソフトウェア21が、自己に関連した依存関係の更新の際、自己で参照中のSLL11用に確保されたメモリのネイティブ領域を解放させるメモリ掃除機能27を含む。また、依存関係の更新の際にガベージコレクタを制御バンドル24によって強制起動させる。
【選択図】図1
図1
図2
図3
図4
図5
図6
図7
図8