(57)【要約】【課題】搭載メモリ容量が少ない組込み機器においても、プログラムを動的に更新できるようにする。【解決手段】管理サーバでは、組込み機器で稼働する更新前プログラムに対する更新情報を収集し、更新情報を組込み機器に動的に適用するためのメモリ上でのアドレスを解決した更新情報ファイルを生成する。一方、組込み機器では、更新情報ファイルに基づいて組込プログラムを動的に更新する。【選択図】図６
2010218334.tif 000002
【特許請求の範囲】
【請求項１】
組込み機器で稼働する更新前プログラムに対する更新情報を収集し、更新情報を組込み機器に動的に適用するためのメモリ上でのアドレスを解決した更新情報ファイルを生成する管理サーバと、
前記更新情報ファイルに基づいて組込プログラムを動的に更新する組込み機器と
を有するプログラム動的更新システム。
【請求項２】
前記更新情報ファイルは、更新後関数と、更新前関数のメモリ上のアドレスと、更新後関数の更新情報ファイル内の相対アドレスとを有する
ことを特徴とする請求項１に記載のプログラム動的更新システム。
【請求項３】
前記更新情報ファイルは、更新後関数と、更新後関数内から参照する組込プログラムの関数が記述されているメモリ上のアドレスと、当該アドレスを書き込む更新情報ファイル内の相対アドレスとを有する
ことを特徴とする請求項１又は２に記載のプログラム動的更新システム。
【請求項４】
前記更新情報ファイルは、参照関係がある複数の更新後関数と、参照先になる更新後関数が記述されている更新情報ファイル内の相対アドレスと、当該アドレスを書き込む更新情報ファイル内の相対アドレスとを有する
ことを特徴とする請求項１〜３のいずれか１項に記載のプログラム動的更新システム。
【請求項５】
組込み機器は、前記相対アドレスで表記された部分を、前記相対アドレスの基準アドレスが書き込まれたメモリ上のアドレス分だけシフトしたアドレスに変更する
ことを特徴とする請求項１〜４のいずれか１項に記載のプログラム動的更新システム。
【請求項６】
組込み機器で稼働中の更新前プログラムと、新たに適用する更新後プラグラムとを記憶する記憶装置と、
前記更新前プログラムと前記更新後プログラムとを比較し、更新前プログラムに対する更新情報を収集し、更新情報を組込み機器に動的に適用するためのメモリ上でのアドレスを解決した更新情報ファイルを生成する更新情報ファイル生成部と
を有する管理サーバ。
【請求項７】
更新前プログラムと、更新後プログラムの修正箇所を更新前プログラムに動的に適用するための更新情報ファイルとを記憶する記憶装置と、
前記更新情報ファイルに基づいて組込プログラムを動的に更新する更新部と
を有する組込み機器。
【請求項８】
前記更新前プログラムと前記更新後プログラムとを比較し、更新前プログラムに対する更新情報を収集する処理と、
更新情報を組込み機器に動的に適用するためのメモリ上でのアドレスを解決した更新情報ファイルを生成する処理と
をコンピュータに実行させるプログラム。
【請求項９】
更新後プログラムの修正箇所を更新前プログラムに動的に適用するための更新情報ファイルを記憶装置から読み出す処理と、
前記更新情報ファイルに基づいて組込プログラムを動的に更新する処理と
をコンピュータに実行させるプログラム。
【発明の詳細な説明】
【技術分野】
【０００１】
本発明は、組込み機器上で動作するプログラムの動作を停止させることなく、プログラムを動的に更新する技術に関する。また、本発明は、プログラム動的更新技術を適用する管理サーバ、組込み機器及び対応するプログラムに関する。
【背景技術】
【０００２】
近年、情報家電等の組込み機器の増加及び高機能化に伴い、製品出荷後に組込み機器に搭載されているプログラムの更新が行われるようになってきた。ここで更新とは、プログラムの不具合の修正や、新しい機能を追加すること等を指す。この更新は一般に組込み機器のファームウェアの更新によって実施される。しかし、前記更新方法は、ファームウェアが書き込まれているフラッシュＲＯＭ（Read Only Memory）の内容を更新後のファームウェアで置き換える操作が必要となる。ファームウェアの更新中は組込み機器を利用できず、また更新後は組込み機器を再起動する必要がある。このような状況を回避するために、ファームウェアを置き換える手法に代えて、プログラムを起動した状態のまま動的にプログラムの更新をする手法が用いられる場合がある。例えばサービス無中断が要求されるオンラインシステム等におけるプログラムの更新技術（特許文献１参照）が開示されている。
【先行技術文献】
【特許文献】
【０００３】
【特許文献１】特開平１０−２４７１４３号公報
【発明の概要】
【発明が解決しようとする課題】
【０００４】
しかし、特許文献１の方法は、メモリ搭載量の少ない情報家電等の組込み機器に実用的に適用することは困難である。特許文献１の方法では、システムで動作するプログラムを更新するたびに、新部分プログラムをメモリに読み込む必要がある。プログラムをメモリに読み込む際には再配置及びアドレス解決が行われる。この処理によりメモリが消費される。このため、上記方法では累積してプログラムの更新を行うとメモリ消費量が増大し、上記組込み機器で許容できるメモリ使用量を超え、組込み機器で動作する別のプログラムの動作に影響を与えてしまう。
【課題を解決するための手段】
【０００５】
そこで、本発明では、組込み機器で動作する組込プログラムに更新プログラムを動的に適用する際のアドレスを解決した更新情報ファイルを管理サーバにおいて作成し、この更新情報ファイルを組込み機器に書き込む手法を提案する。なお、更新情報ファイルには、更新後関数と、更新前関数のメモリ上のアドレスと、更新後関数の更新情報ファイル内の相対アドレスとが書き込まれていることが望ましい。また、更新情報ファイルには、更新後関数と、更新後関数内から参照する組込プログラムの関数が記述されているメモリ上のアドレスと、当該アドレスを書き込む更新情報ファイル内の相対アドレスとが書き込まれていることが望ましい。また、更新情報ファイルには、参照関係がある複数の更新後関数と、参照先になる更新後関数が記述されている更新情報ファイル内の相対アドレスと、当該アドレスを書き込む更新情報ファイル内の相対アドレスとが書き込まれていることが望ましい。
【０００６】
一方、組込み機器は、更新情報ファイルのうち相対アドレスで表記された部分を、相対アドレスの基準アドレスが書き込まれたメモリ上のアドレス（実アドレス）分だけシフトする手法を提案する。
【発明の効果】
【０００７】
本発明によれば、情報家電のような搭載メモリ容量が少ない組込み機器であっても動的にプログラムの更新が可能になる。
【図面の簡単な説明】
【０００８】
【図１】形態例に係るプログラム動的更新システムの全体構成を説明する図である。
【図２】管理サーバの形態例を示す図である。
【図３】組込み機器の形態例を示す図である。
【図４】関数の動的な更新動作を説明する図である。
【図５】更新前後の関数の関係と更新後の関数間の関係を説明する図である。
【図６】更新情報ファイルの構成例を示す図である。
【図７】管理サーバ側で実行される更新情報ファイルの作成手順例を示すフローチャートである。
【図８】組込み機器側で実行される更新プログラムの更新手順例を示すフローチャートである。
【発明を実施するための形態】
【０００９】
以下、本発明を適用したプログラム動的更新システムの一形態例を、図面を用いて説明する。
【００１０】
・  形態例
（１−１）システム構成
図１に、形態例に係るシステム構成図を示す。形態例に係るプログラム動的更新システムは、１台の管理サーバ１０１と複数台の組込み機器１０３（１０３Ａ・１０３Ｂ）とがネットワーク１０２を介して相互に接続される場合を想定する。
【００１１】
組込み機器１０３には、例えばテレビやホームゲートウェイ等の情報家電が相当する。図１では、ネットワーク１０２に接続されている組込み機器１０３が２台の場合を記載しているが、組込み機器１０３の台数は任意で良い。また、管理サーバ１０１も組込み機器１０３と同様に台数は任意で良い。さらに、ネットワーク１０２は、管理サーバ１０１と組込み機器１０３とを相互に接続できる形態であれば任意で良い。従って、ネットワーク１０２は、有線接続と無線接続のどちらか一方又は両方で構成されていても良い。ネットワーク１０２には、例えばインターネットや放送波が相当する。
【００１２】
（１−２）管理サーバの構成
図２に、管理サーバ１０１の構成例を示す。管理サーバ１０１は、プログラム動的更新システムの管理者が使用するコンピュータシステムである。管理サーバ１０１は、入力部２０１、表示部２０２、データ処理部２０３、記憶部２０５、ネットワーク接続部２０９で構成される。
【００１３】
入力部２０１は、管理者が、管理サーバ１０１に対する指示を与えるのに使用されるデバイスである。この形態例の場合、管理者は、組込み機器１０３で使用される更新情報ファイル２０８の作成等の指示を与えるために使用される。入力部２０１には、例えばキーボードやマウスを使用する。表示部２０２は、管理サーバ１０１に対する入力情報や処理結果としての各種データ等を表示する出力装置である。表示部２０２には、例えばＣＲＴディスプレイや液晶ディスプレイを使用する。
【００１４】
データ処理部２０３は、処理装置とメモリとから構成される。処理装置は、読み込んだプログラムの内容を解釈してデータ処理を実行する。処理装置は、例えばＣＰＵ（セントラル・プロセシング・ユニット）やＭＰＵ（マイクロ・プロセシング・ユニット）等で構成される。メモリは、処理装置で使用される処理データを一時的に記憶する記憶装置である。メモリは、例えばＲＡＭ（ランダム・アクセス・メモリ）等で構成される。なお、メモリには、後述する更新情報ファイルの作成を支援するプログラム等が格納される。この形態例においては、このプログラムを更新情報ファイル生成部２０４という。
【００１５】
更新情報ファイル作成部２０４は、組込み機器１０３側で動作する更新前プログラム３０６を更新するための情報を含む更新情報ファイル２０８を作成する。なお、図面において、図２の更新情報ファイル２０８と、図３の更新情報ファイル３０７と、図６の更新情報ファイル６０１とは全て同一の内容であり、図面及び説明の都合上異なった符号を記載しているだけである。
【００１６】
記憶部２０５は、各種データを記憶又は読み出す装置である。記憶部２０５は、例えばＨＤＤ（ハード・ディスク・ドライブ）や光学記憶装置等で構成される。この形態例の場合、記憶部２０５には、例えば更新前プログラム２０６、更新後プログラム２０７、更新情報ファイル２０８等が格納される。更新前プログラム２０６は、組込み機器で現在動作しているプログラムである。明細書では、このプログラムを更新前プログラムという。更新後プログラム２０７は、組込み機器で新たに動作させるプログラムである。明細書では、このプログラムを更新後プログラムという。更新情報ファイル２０８は、更新前プログラムを更新後プログラムに動的に変更するために必要なプログラムとそのアドレス情報等で構成されるデータファイルである。
【００１７】
ネットワーク接続部２０９は、管理サーバ１０１をネットワーク１０２に接続するための通信装置である。ネットワーク接続部２０９には、例えばＮＩＣ（ネットワーク・インタフェース・カード）を使用する。なお、更新情報ファイル２０８を放送波に重畳して送信する場合、ネットワーク接続部２０９には、放送波の送信装置が用いられる。
【００１８】
（１−３）組込み機器の構成
図３に、組込み機器１０３の構成例を示す。プログラム動的更新システムにおける組込み機器１０３とは、更新対象のプログラムが動作する機器である。組込み機器１０３は、例えば入力部３０１、表示部３０２、データ処理部３０３、記憶部３０５、ネットワーク接続部３０８で構成される。ただし、図３に示す組込み機器１０３の構成は一例であり、この構成に限定されない。
【００１９】
入力部３０１は、利用者が、組込み機器１０３に対する指示を与えるのに使用されるデバイスである。入力部３０１には、例えばキーボードやリモートコントローラーを使用する。表示部３０２は、組込み機器１０３に対する入力情報や処理結果としての各種データ等を表示する出力装置である。表示部３０１には、例えば液晶ディスプレイを使用する。
【００２０】
データ処理部３０３は、処理装置とメモリとから構成される。処理装置は、読み込んだプログラムの内容を解釈してデータ処理を実行する。処理装置は、例えばＣＰＵ（セントラル・プロセシング・ユニット）やＭＰＵ（マイクロ・プロセシング・ユニット）等で構成される。メモリは、処理装置で使用される処理データを一時的に記憶する記憶装置である。メモリは、例えばＲＡＭ（ランダム・アクセス・メモリ）等で構成される。なお、メモリには、更新前プログラム３０６に更新情報ファイル３０７を動的に適用するプログラム等が格納される。この形態例においては、このプログラムを更新部３０４という。
【００２１】
記憶部３０５は、各種データを記憶又は読み出す装置である。記憶部３０５は、例えばフラッシュＲＯＭやＨＤＤ（ハード・ディスク・ドライブ）等で構成される。この形態例の場合、記憶部３０５には、例えば更新前プログラム３０６、更新情報ファイル３０７等が格納される。
【００２２】
ネットワーク接続部３０８は、組込み機器１０３をネットワーク１０２に接続するための通信装置である。ネットワーク接続部３０８は、例えばＮＩＣ（ネットワーク・インタフェース・カード）を使用する。なお、更新情報ファイル３０７が放送波に重畳されている場合、ネットワーク接続部３０８には、放送波の受信装置が用いられる。
【００２３】
（１−４）プログラムの動的更新動作
図４に、プログラムの動作を停止させずにプログラム内の関数を更新する方法を示す。更新前関数４０１とは、プログラム内の関数であって不具合等を含む関数である。また、更新後関数４０４とは、更新前関数４０１の不具合等を修正した関数である。まず、更新後関数４０４をメモリに読み込む。次に、制御移行先４０３をメモリ上に配置する。制御移行先４０３には、更新後関数４０４が配置されているメモリ上の先頭アドレスが記述される。最後に、更新前関数４０１が配置されているメモリ上の先頭アドレスに制御移行命令４０２が記述される。制御移行命令４０２は、制御移行先４０３に記述された先頭アドレスを参照し、制御を記述先の先頭アドレスに移す役割をする。以上の操作により、更新前関数４０１が呼び出された場合は、制御移行命令４０２により更新後関数４０４に制御が移る。従って、不具合を含む更新前関数４０１を、不具合を修正した更新後関数４０４に置き換えることが可能になる。
【００２４】
（１−５）更新情報ファイルに記述される関数間の更新関係
図５に、更新情報ファイルに記述される関数間の更新関係の一例を示す。更新情報ファイルには、３種類の更新関係が記述される。１つは、更新前プログラムの更新前関数を更新後関数に変更する記述である。１つは、更新後プログラムの関数からＯＳ（オペレーティング・システム）が提供する関数を参照する記述である。１つは、更新後プログラム内の関数から更新後プログラム内の他の関数を参照する記述である。
【００２５】
＜ａ＞更新前関数から更新後関数への更新
図５は、更新前関数Ａ（５０１）、更新前関数Ｂ（５０４）、更新前関数Ｃ（５０７）の三つを、それぞれ更新後関数１（５１０）、更新後関数２（５１３）、更新後関数３（５１６）に動的に更新した状態を示している。図４の説明の場合と同様、更新前関数Ａ（５０１）の先頭に制御移行命令Ａ（５０２）が書き込まれている。例えば制御移行命令Ａ（５０２）が参照する制御移行先Ａ（５０３）には、更新後関数１（５１０）のメモリ上での先頭アドレスが格納されている。同様に、更新前関数Ｂ（５０４）の先頭に制御移行命令Ｂ（５０５）が書き込まれている。制御移行命令Ｂ（５０５）が参照する制御移行先Ｂ（５０６）には、更新後関数２（５１３）のメモリ上での先頭アドレスが格納されている。同様に、更新前関数Ｃ（５０７）の先頭に制御移行命令Ｃ（５０８）が書き込まれている。制御移行命令Ｃ（５０８）が参照する制御移行先Ｃ（５０９）には、更新後関数３（５１６）のメモリ上での先頭アドレスが格納されている。
【００２６】
＜ｂ＞更新後プログラムの関数からＯＳ関数の参照
図５は、更新後関数１（５１０）からＯＳが提供する関数（５２１）を呼び出す状態を示している。この動作は、更新後関数１（５１０）の該当位置に記述された制御移行命令１（５１１）に基づいて実行される。制御移行命令１（５１１）が参照する制御移行先（５１２）には、ＯＳが提供する関数（５２１）のメモリ上でのアドレスが格納されている。
【００２７】
＜ｃ＞更新後プログラム内の関数から更新後プログラム内の他の関数の参照
図５は、更新後関数２（５１３）から更新後関数３（５１６）を呼び出す状態を示している。この動作は、更新後関数２（５１３）の該当位置に記述された制御移行命令２（５１４）に基づいて実行される。制御移行命令２（５１４）が参照する制御移行先２（５１５）には、更新後関数３（５１６）のメモリ上のアドレスが格納されている。
【００２８】
（１−６）更新情報ファイル
図６に、更新情報ファイル６０１の構成例を示す。更新情報ファイル６０１は、組込み機器のプログラムを動的に更新するために使用する。更新情報ファイル６０１は、更新後関数表６０２、制御移行表６０３、相互参照表６０４で構成される。以下に、更新情報ファイル６０１を構成する要素のそれぞれを説明する。
【００２９】
以下の説明において、オフセットは、更新情報ファイル６０１の先頭位置からの変位（相対アドレス）として定義される。この形態例の場合、更新後関数１（図６）は更新情報ファイル６０１の先頭に配置される。従って、更新後関数１（図６）のオフセットは“０”で与えられる。つまり、オフセットは更新後関数１（図６）の先頭位置からの変位とも言うことができる。
【００３０】
図５の場合、矢印５１７の長さ（長さの単位は、例えばバイトがある）が更新後関数２（５１３）の更新後関数１（５１０）に対するオフセットに対応する。同様に、矢印５２０の長さが更新後関数３（５１６）の更新後関数１（５１０）に対するオフセットに対応する。
【００３１】
更新後関数表６０２は、Ｎ個の更新後関数（１〜Ｎ）で構成される。ここで、更新後関数（１〜Ｎ）は、更新前プログラム３０６と更新後プログラム３０７の比較で差異のあった関数、又は更新後プログラム３０７にのみ存在する関数の集まりである。図６は、これらの関数が合計でＮ個あることを表している。図５の例では、更新後関数１〜３（図５）の３個が相当し、Ｎは３になる。
【００３２】
制御移行表６０３は、Ｍ個のオフセットＪ（１〜Ｍ）とアドレスＪ（１〜Ｍ）の対で構成される。制御移行表６０３には、（ａ）更新前関数から更新後関数に更新するために必要なアドレス対と、（ｂ）更新後プログラムの関数からＯＳ関数を参照するために必要なアドレス対が記述される。従って、制御移行表６０３のオフセットには、後述する相互参照表６０４で使われるオフセットは含まない。
【００３３】
図５の例の場合、制御移行表６０３のオフセットＪは、例えば制御移行先１（５１２）に記述する更新情報ファイル内の変位（５１８）や制御移行先２（５１５）に記述する更新情報ファイル内の変位（５１９）を与える。制御移行表６０３のアドレスＪは、例えば更新前関数（Ａ〜Ｃ）のメモリ上のアドレスやＯＳが提供する関数（５２１）のメモリ上のアドレス（絶対アドレス）を与える。この点で、オフセットとアドレスとは異なる。
【００３４】
相互参照表６０４は、Ｌ個のオフセットＦＲ（１〜Ｌ）とオフセットＴＯ（１〜Ｌ）の対で構成される。相互参照表６０４には、更新後プログラムの関数同士での呼び出しに必要なアドレス対が記述される。図５の例の場合、更新後関数２（５１３）から更新後関数３（５１６）を呼び出すのに用いられる。オフセットＦＲは、制御移行命令２（５１４）で参照する制御移行先２（５１５）の位置を与える。オフセットＴＯは、更新後関数３（５１６）の先頭アドレスを与える変位（５２０）を与える。このオフセットＴＯは、制御移行先２（５１５）に記述される。
【００３５】
（１−７）更新情報ファイルの作成手順
次に、管理サーバ１０１側で実行される更新情報ファイル２０８の作成手順を示す。なお、更新情報ファイル２０８は、組込み機器１０３の更新部３０４において利用される。
【００３６】
図７に、更新情報ファイル生成部２０４（図２）を通じて実行される処理手順例を示す。
【００３７】
まず、更新情報ファイル生成部２０４は、操作者が指定入力した更新前プログラム２０６とその修正プログラムである更新後プログラム２０７との比較動作を実行する。この処理により、両プログラム間で修正のあった関数、又は更新後プログラムにのみ存在する関数が抽出される（ステップＳ７０１）。この形態例の場合、その合計はＮ個である。
【００３８】
次に、更新情報ファイル生成部２０４は、ステップＳ７０１で抽出した関数を更新情報ファイル６０１の更新後関数（１〜Ｎ）（６０２）とし、更新後関数表６０２を作成する（ステップＳ７０２）。図５の場合、更新後関数１（５１０）、更新後関数２（５１３）、更新後関数３（５１６）の３つで構成される更新後関数表６０２が作成される。
【００３９】
次に、更新情報ファイル生成部２０４は、ステップＳ７０１にて抽出したＮ個の更新後関数（１〜Ｎ）について、カウンタをｉとする変更箇所ループ１を開始する（ステップＳ７０３）。
【００４０】
次に、ｉ番目の更新後関数ｉが図４の用語で更新前関数４０１を修正した更新後関数４０４であるならば、更新情報ファイル生成部２０４は、更新後関数ｉの更新情報ファイル６０１の先頭からの変位であるオフセットＪｋを算出する。ここでｋはカウンタであり、初期値“１”から１つずつカウントアップする。更新前関数４０１が組込み機器１０３のメモリ上のどの位置に配置されるかは、例えば更新対象プログラムがＬｉｎｕｘ（登録商標）のカーネルの場合、Ｓｙｓｔｅｍ．ｍａｐファイル等を用いて調べることができる。Ｓｙｓｔｅｍ．ｍａｐファイルには、Ｌｉｎｕｘ（登録商標）カーネル内の関数の名前と、関数が配置されているメモリ上のアドレスを対にした情報が書かれている。これにより取得した更新前関数４０１のアドレスをアドレスＪｋとする。
【００４１】
更新情報ファイル生成部２０４は、このように求めたオフセットＪｋとアドレスＪｋを対にして制御移行表６０３に加える（ステップＳ７０４）。図５の場合、オフセット１の変位は０（ゼロ）、アドレス１は更新前関数Ａ（５０１）のメモリ上のアドレスであり、オフセット２は変位（５１７）、アドレス２は更新前関数Ｂ（５０４）のメモリ上のアドレスであり、オフセット３は変位（５２０）、アドレス３は更新前関数Ｃ（５０７）のメモリ上のアドレスである。
【００４２】
次に、更新情報ファイル生成部２０４は、ｉ番目の更新後関数ｉが外部関数を呼ぶか判定する（ステップＳ７０５）。ここで、外部関数とは、更新前プログラム内の関数であって、ステップＳ７０１で差異があると判定されなかった関数である。図５の例では、更新後関数１（５１０）から呼ばれるＯＳが提供する関数（５２１）が外部関数に相当する。
【００４３】
ステップＳ７０５がＹｅｓの場合、更新情報ファイル生成部２０４は、アドレス解決を行う（ステップＳ７０６）。アドレス解決は、ｉ番目の更新後関数ｉが外部関数を呼ぶ際、その外部関数が組込み機器１０３のメモリ上のどのアドレスに存在するか決定することである。例えば、更新対象プログラムがＬｉｎｕｘ（登録商標）のカーネルの場合、Ｓｙｓｔｅｍ．ｍａｐファイルにより前記アドレスを求めることができる。このアドレスをＪｋとする。外部関数は、通常の関数呼び出しと同様に制御移行命令が制御移行先を参照し呼び出される。更新情報ファイル生成部２０４は、更新情報ファイル６０１の先頭からの更新後関数ｉ内の制御移行先のオフセットを求め、これをオフセットＪｋとし、オフセットＪｋとアドレスＪｋを対にして制御移行表６０３に加える。更新情報ファイル生成部２０４は、上記の処理動作を、更新後関数ｉ内の外部関数の全てに対して行う。図５の場合、制御移行表６０３にオフセット５１８とＯＳ内の関数（５２１）のメモリ上のアドレスの対が追加される。
【００４４】
ステップＳ７０５がＮｏの場合、更新情報ファイル生成部２０４は何もしない。この後、更新情報ファイル生成部２０４は、ステップＳ７０４〜Ｓ７０６の処理を、そのカウンタｉがＮを越えるまで繰り返す（ステップＳ７０７）。
【００４５】
次に、更新情報ファイル生成部２０４は、ステップＳ７０１で抽出したＮ個の更新後関数（１〜Ｎ）について、カウンタをｊとする変更箇所ループ２を開始する（ステップＳ７０８）。
【００４６】
次に、更新情報ファイル生成部２０４は、ｊ番目の更新後関数ｊが内部関数を呼ぶか判定する（ステップＳ７０９）。ここで、内部関数とは、更新前プログラム内の関数であって、ステップＳ７０１で差異があると判定された関数である。図５の場合、内部関数の呼び出しは、更新後関数２（５１３）内の制御移行命令２（５１４）による更新後関数３（５１６）の呼び出しに相当する。
【００４７】
ステップＳ７０９がＹｅｓの場合、更新情報ファイル生成部２０４は、相互参照表を作成する（ステップＳ７１０）。ｊ番目の更新後関数ｊが内部関数を呼ぶ場合、更新情報ファイル生成部２０４は、読み出し対象である更新後関数（１〜Ｎ）の位置（すなわち、更新情報ファイル５０１の先頭からの変位）をオフセットＴＯｍとする。ここで、ｍはカウンタであり、初期値“１”から１つずつカウントアップされる。同様に、更新情報ファイル生成部２０４は、内部関数を呼ぶ制御移行命令が参照する制御移行先に記述する位置（すなわち、更新情報ファイル５０１の先頭からの変位）をオフセットＦＲｍとする。更新情報ファイル生成部２０４は、このオフセットＦＲｍとオフセットＴＯｍを対にして相互参照表５０４に加える。更新情報ファイル生成部２０４は、上記の処理動作を、更新後関数ｊ内の内部関数の全てに対して実行する。図５の場合、オフセットＦＲとして変位（５１９）、オフセットＴＯとして変位（５２０）を相互参照表５０４に加える。
【００４８】
ステップＳ７０９がＮｏの場合、更新情報ファイル生成部２０４は何もしない。この後、更新情報ファイル生成部２０４は、ステップＳ７０９〜Ｓ７１０の処理を、そのカウンタｊがＮを越えるまで繰り返す（ステップＳ７１１）。
【００４９】
以上の処理動作の実行により更新情報ファイル６０１が作成される。このように、アドレス解決は、基本的に管理サーバ１０１で実行される。
【００５０】
（１−８）組込み機器での更新動作
次に、組込み機器１０３の更新部３０４が更新情報ファイル３０７を用いて実行する更新前プログラム３０６の更新動作を説明する。
【００５１】
図８に、更新情報ファイル３０７を通じて実行される処理手順例を示す。
まず、更新部３０４は、更新情報ファイル３０７を組込み機器１０３の記憶部３０５に読み込む（ステップＳ８０１）。以下、更新情報ファイル３０７が配置されたメモリ上のアドレスをＡＤＤＲと表記する。
【００５２】
次に、更新部３０４は、相互参照表６０４のオフセットＦＲａとオフセットＴＯａの値を取り出し、オフセットＦＲａとオフセットＴＯａのそれぞれにＡＤＤＲを加える（ステップＳ８０２）。なお、ａは１〜Ｌを表す。この加算処理により、更新部３０４は、オフセットとして与えられた更新情報ファイル３０７内の相対アドレスは、メモリ上の実アドレスに変換される。この後、更新部３０４は、オフセットＦＲａにＡＤＤＲを加えたメモリ上のアドレスに、オフセットＴＯａにＡＤＤＲを加えたアドレスを記述内容とする制御移行先を書き込む。
【００５３】
最後に、更新部３０４は、制御移行表６０３のオフセットＪｂの値を取り出し、この値にＡＤＤＲを加える（ステップＳ８０３）。この加算処理により、更新部３０４は、オフセットとして与えられた更新情報ファイル３０７内の相対アドレスは、メモリ上の実アドレスに変換される。この後、更新部３０４は、オフセットＪｂと対をなすメモリ上のアドレス（図５の場合、５０３、５０６、５０９）にアドレスＪｂを記述内容とする制御移行先を書き込み、対応する関数の先頭アドレスに制御移行命令を書き込む。なお、ｂは１〜Ｍを表す。
【００５４】
ここで、制御移行命令を書き込む際、更新部３０４は、組込み機器１０３のハードウェアの仕様に基づき、更新前プログラム３０６が想定外の動作をしないようにするための処理を適切に行うものとする。
【００５５】
以上の更新手順により、組込み機器１０３で動作する更新前プログラム３０６の動作を停止することなく、前記更新前プログラム３０６を更新後プログラム２０７と同等の処理をする状態に移行させることが可能となる。
【００５６】
（１−９）効果
以上説明したように、組込み機器１０３の更新部３０４は、更新情報ファイル３０７に基づいて、組込み機器１０３で動作するプログラムを動的に更新することができる。従来方式とは異なり、この形態例の場合には、プログラムを更新するたびに更新用プログラムをメモリに読み込み実行する必要がない。すなわち、形態例に係る組込み機器１０３は、再配置及びアドレス解決に起因するメモリ消費量が大幅に削減される。
【００５７】
実際、更新部３０４は、更新情報ファイル３０７が読み込まれたメモリ上での先頭アドレス（ＡＤＤＲ）の情報のみに基づいてオフセットから絶対アドレスに変換することができる。よって、メモリ消費は更新情報ファイル３０７の大きさ程度に抑えることが可能となる。
【００５８】
以上より、複数の更新情報ファイル３０７を順次累積的に適用してプログラムの更新を行ったとしても、メモリ消費量を抑えることができる。これにより、メモリ搭載量が少ない情報家電等の組込み機器においてもプログラムの動的な更新を実用的に実行することができる。
【００５９】
一例として、形態例に係るプログラムの動的更新方法を、組込み機器１０３で動作する更新前プログラム３０６の更新動作に適用する場合について説明する。まず、管理者が、管理サーバ１０１で不都合を修正した更新後プログラム２０７を作成する。次に、更新情報ファイル生成部２０４を用いて、更新前プログラム２０６と更新後プログラム２０７とから更新情報ファイル２０８を作成する。管理サーバ１０１は前記更新情報ファイル２０８を組込み機器１０３にネットワーク経由で配布する。最後に、組込み機器１０３の更新部３０４は、配布された更新情報ファイル３０７を用いて、組込み機器１０３の更新前プログラム３０６を更新し、不都合を解消する。
【００６０】
（２）他の形態例
前述の形態例においては、情報更新ファイルの送信手順について説明しなかったが、以下のような手順によって実行することができる。例えば管理サーバ１０１が更新情報ファイルを強制的に組込み機器１０３に送信し、そのタイミングで組込み機器１０３内のプログラムを更新させる手法を採用しても良い。これに対し、組込み機器１０３が管理サーバ１０１に対して新規の更新情報ファイルが存在するか否かの確認処理を実行し、存在が確認された場合には、組込み機器１０３からの要求により管理サーバ１０１から更新情報ファイルをダウンロードする手法を採用しても良い。
【符号の説明】
【００６１】
１０１…管理サーバ
１０２…ネットワーク
１０３Ａ…組込み機器
１０３Ｂ…組込み機器
２０１…入力部
２０２…表示部
２０３…データ処理部
２０４…更新情報ファイル生成部
２０５…記憶部
２０６…更新前プログラム
２０７…更新後プログラム
２０８…更新情報ファイル
２０９…ネットワーク接続部
３０１…入力部
３０２…表示部
３０３…データ処理部
３０４…更新部
３０５…記憶部
３０６…更新前プログラム
３０７…更新情報ファイル
３０８…ネットワーク接続部
４０１…更新前関数
４０２…制御移行命令
４０３…制御移行先
４０４…更新後関数
５０１…更新前関数Ａ
５０２…制御移行命令Ａ
５０３…制御移行先Ａ
５０４…更新前関数Ｂ
５０５…制御移行命令Ｂ
５０６…制御移行先Ｂ
５０７…更新前関数Ｃ
５０８…制御移行命令Ｃ
５０９…制御移行先Ｃ
５１０…更新後関数１
５１１…制御移行命令１
５１２…制御移行先１
５１３…更新後関数２
５１４…制御移行命令２
５１５…制御移行先２
５１６…更新後関数３
５１７…更新後関数２へのオフセット
５１８…制御移行先１へのオフセット
５１９…制御移行先２へのオフセット
５２０…更新後関数３へのオフセット
５２１…ＯＳ内の関数
６０１…更新情報ファイル
６０２…更新後関数
６０３…制御移行表
６０４…相互参照表
【図１】
2010218334.tif 000003
【図２】
2010218334.tif 000004
【図３】
2010218334.tif 000005
【図４】
2010218334.tif 000006
【図５】
2010218334.tif 000007
【図６】
2010218334.tif 000008
【図７】
2010218334.tif 000009
【図８】
2010218334.tif 000010