(57)【要約】      （修正有）【課題】プログラムを更新する際に用いる情報として、処理やデータの不整合の発生を防止できる更新処理情報を生成する更新装置及び情報処理方法を提供する。【解決手段】複数の関数を含む更新対象プログラムのうち更新対象となる更新対象関数及び更新対象関数と関連性を有する関数を入力して、各関数を更新禁止関数として管理する更新禁止関数入力部と、更新対象プログラムに属する各関数のシンボル情報とアドレス情報に基づいて各関数の関数名とアドレスとを関連づけた更新禁止関数リストを生成する更新禁止関数リスト生成部と、更新部分及び更新禁止関数リストを含む情報を、プログラム実行先に対する更新処理情報として管理する更新処理情報管理部と、を有し、更新処理情報管理部は、更新禁止関数に属する各関数が、その更新を禁止する関数である旨の更新禁止情報を更新処理情報に付加する。【選択図】図１
2016062311.tif 000002
【特許請求の範囲】
【請求項１】
プログラムを格納するメモリと、前記メモリに格納されたプログラムを基に情報を処理するプロセッサとを有する更新装置であって、
複数の関数を含む更新対象プログラムを作成するプログラム作成部と、
前記更新対象プログラムに対する更新部分を作成する更新部分作成部と、
前記更新対象プログラムに属する複数の関数のうち更新対象となる更新対象関数及び当該更新対象関数から外れた関数であって前記更新対象関数と関連性を有する関数を入力し、当該入力した各関数を更新禁止関数として管理する更新禁止関数入力部と、
前記更新対象プログラムに属する各関数のシンボル情報とアドレス情報に基づいて前記更新禁止関数に属する各関数の関数名と、前記更新対象プログラムの実行を管理するためのアドレスであって、前記更新禁止関数に属する各関数に割当てられたアドレスとを関連づけた更新禁止関数リストを生成する更新禁止関数リスト生成部と、
前記更新部分作成部の作成による更新部分及び前記更新禁止関数リスト生成部の生成による更新禁止関数リストを含む情報を、前記更新対象プログラムを実行するプログラム実行先に対する更新処理情報として管理する更新処理情報管理部と、を有し、
前記更新処理情報管理部は、
前記更新禁止関数に属する各関数が、前記更新対象プログラムの実行中、その更新を禁止する関数である旨の更新禁止情報を前記更新処理情報に付加してなる、ことを特徴とする更新装置。
【請求項２】
請求項１に記載の更新装置であって、
前記更新禁止情報は、
前記更新対象プログラムの実行を示すアドレスが、前記更新禁止関数に属する関数のアドレスの範囲内にある場合、当該関数の更新を禁止することを示す情報である、ことを特徴とする更新装置。
【請求項３】
請求項１又は２に記載の更新装置であって、
前記更新対象プログラムに属する各関数に関わるテストをテストプログラムに従って実行するテストプログラム実行部と、
前記テストプログラム実行部の実行結果を関数トレースして、前記更新対象プログラムに属する各関数の中から、関数トレースによる更新対象関数及び更新禁止関数を含む関数コールを取得する関数トレース取得部と、を更に有し、
前記更新禁止関数リスト生成部は、
前記関数トレース取得部で取得した関数コールに属する関数トレースによる各関数の関数名と、当該関数トレースによる各関数のアドレスとを関連づけて前記更新禁止関数リストに追加する、ことを特徴とする更新装置。
【請求項４】
請求項３に記載の更新装置であって、
前記関数トレース取得部は、
前記関数コールに属する関数として、関数トレースによる更新対象関数に関わる関数及び更新禁止関数に関わる関数を取得する、ことを特徴とする更新装置。
【請求項５】
請求項３に記載の更新装置であって、
前記関数トレース取得部で取得した関数コールと、前記プログラム実行先の機器種別を示す機器種別毎の関数コールとを比較し、前記関数トレース取得部で取得した関数コールが、前記機器種別毎の関数コールの中に存在する場合、前記関数トレース取得部で取得した関数コールを前記プログラム実行先の機器種別に対応した機器種別関数コールとして保持する機器種別関数コール保持部を有し、
前記更新禁止関数リスト生成部は、
前記機器種別関数コール保持部で保持された機器種別関数コールに属する機器種別による各関数の関数名と、当該機器種別による各関数のアドレスとを関連づけて前記更新禁止関数リストに追加する、ことを特徴とする更新装置。
【請求項６】
請求項５に記載の更新装置であって、
前記機器種別関数コール保持部は、
前記関数トレース取得部で取得した関数コールの中に、前記プログラム実行先の機器種別毎の関数コールのうちいずれか一つの関数コールの並びが一定割合以上存在することを条件に、前記関数トレース取得部で取得した関数コールを前記プログラム実行先の機器種別に対応した機器種別関数コールとして保持する、ことを特徴とする更新装置。
【請求項７】
請求項１〜６のうちいずれか１項に記載の更新装置であって、
前記更新禁止関数リスト生成部は、
前記更新禁止関数が、共有ライブラリの関数である場合、前記更新禁止関数の実体が存在する保存先の情報を前記更新禁止関数リストに付加し、当該更新禁止関数リストのアドレスのうち、前記共有ライブラリの関数となる更新禁止関数のアドレスに、オフセット値を記録する、ことを特徴とする更新装置。
【請求項８】
プログラムを格納するメモリと、前記メモリに格納されたプログラムを基に情報を処理するプロセッサとを有する更新装置における情報処理方法であって、
複数の関数を含む更新対象プログラムを作成するプログラム作成手順と、
前記更新対象プログラムに対する更新部分を作成する更新部分作成手順と、
前記更新対象プログラムに属する複数の関数のうち更新対象となる更新対象関数及び当該更新対象関数から外れた関数であって前記更新対象関数と関連性を有する関数を入力し、当該入力した各関数を更新禁止関数として管理する更新禁止関数入力手順と、
前記更新対象プログラムに属する各関数のシンボル情報とアドレス情報に基づいて前記更新禁止関数に属する各関数の関数名と、前記更新対象プログラムの実行を管理するためのアドレスであって、前記更新禁止関数に属する各関数に割当てられたアドレスとを関連づけた更新禁止関数リストを生成する更新禁止関数リスト生成手順と、
前記更新部分作成手順での作成による更新部分及び前記更新禁止関数リスト生成手順での生成による更新禁止関数リストを含む情報を、前記更新対象プログラムを実行するプログラム実行先に対する更新処理情報として管理する更新処理情報管理手順と、を有し、
前記更新処理情報管理手順では、
前記更新禁止関数に属する各関数が、前記更新対象プログラムの実行中、その更新を禁止する関数である旨の更新禁止情報を前記更新処理情報に付加する、ことを特徴とする情報処理方法。
【請求項９】
請求項８に記載の情報処理方法であって、
前記更新禁止情報は、
前記更新対象プログラムの実行を示すアドレスが、前記更新禁止関数に属する関数のアドレスの範囲内にある場合、当該関数の更新を禁止することを示す情報である、ことを特徴とする情報処理方法。
【請求項１０】
請求項８又は９に記載の情報処理方法であって、
前記更新対象プログラムに属する各関数に関わるテストをテストプログラムに従って実行するテストプログラム実行手順と、
前記テストプログラム実行手順での実行結果を関数トレースして、前記更新対象プログラムに属する各関数の中から、関数トレースによる更新対象関数及び更新禁止関数を含む関数コールを取得する関数トレース取得手順と、を更に有し、
前記更新禁止関数リスト生成手順では、
前記関数トレース取得手順で取得した関数コールに属する関数トレースによる各関数の関数名と、当該関数トレースによる各関数のアドレスとを関連づけて前記更新禁止関数リストに追加する、ことを特徴とする情報処理方法。
【請求項１１】
請求項１０に記載の情報処理方法であって、
前記関数トレース取得手順では、
前記関数コールに属する関数として、関数トレースによる更新対象関数に関わる関数及び更新禁止関数に関わる関数を取得する、ことを特徴とする情報処理方法。
【請求項１２】
請求項１０に記載の情報処理方法であって、
前記関数トレース取得手順で取得した関数コールと、前記プログラム実行先の機器種別を示す機器種別毎の関数コールとを比較し、前記関数トレース取得手順で取得した関数コールが、前記機器種別毎の関数コールの中に存在する場合、前記関数トレース取得手順で取得した関数コールを前記プログラム実行先の機器種別に対応した機器種別関数コールとして保持する機器種別関数コール保持手順を有し、
前記更新禁止関数リスト生成手順では、
前記機器種別関数コール保持手順で保持された機器種別関数コールに属する機器種別による各関数の関数名と、当該機器種別による各関数のアドレスとを関連づけて前記更新禁止関数リストに追加する、ことを特徴とする情報処理方法。
【請求項１３】
請求項１２に記載の情報処理方法であって、
前記機器種別関数コール保持手順では、
前記関数トレース取得手順で取得した関数コールの中に、前記プログラム実行先の機器種別毎の関数コールのうちいずれか一つの関数コールの並びが一定割合以上存在することを条件に、前記関数トレース取得手順で取得した関数コールを前記プログラム実行先の機器種別に対応した機器種別関数コールとして保持する、ことを特徴とする情報処理方法。
【請求項１４】
請求項８〜１３のうちいずれか１項に記載の情報処理方法であって、
前記更新禁止関数リスト生成手順では、
前記更新禁止関数が、共有ライブラリの関数である場合、前記更新禁止関数の実体が存在する保存先の情報を前記更新禁止関数リストに付加し、当該更新禁止関数リストのアドレスのうち、前記共有ライブラリの関数となる更新禁止関数のアドレスに、オフセット値を記録する、ことを特徴とする情報処理方法。
【発明の詳細な説明】
【技術分野】
【０００１】
本発明は、プログラムを更新するための情報を生成する更新装置及び情報処理方法に関する。
【背景技術】
【０００２】
本技術分野の背景技術として、特開２０１０−１３０６２０号公報（特許文献１）がある。この公報には、「更新される旧部分モジュールに置き換えられる新部分モジュールを主メモリにアップロードする新モジュールアップロード手段と、主メモリ上で有効な部分モジュールを旧部分モジュールから新部分モジュールに切り替える新旧モジュール切り替え手段と、上述の切り替え後に、主メモリ上の旧部分モジュールをアンロードする旧モジュールアンロード手段とを有する」と記載されている（要約参照）。
【先行技術文献】
【特許文献】
【０００３】
【特許文献１】特開２０１０−１３０６２０号公報
【発明の概要】
【発明が解決しようとする課題】
【０００４】
特許文献１には、プログラム管理テーブルを用いて新旧プログラムを切替え、サブルーチンの実行カウンタが０になるまで切替えない仕組みが記載されている。しかし、特許文献１の仕組みでは、更新タイミングに関して、更新対象関数とそのサブルーチンしか考慮しておらず、トランザクション処理やネットワーク通信を行う装置などでは、更新対象関数以外の関数を実行している場合でも、更新対象関数を更新することで処理やデータの不整合が起こる可能性がある。
【０００５】
本発明の目的は、更新対象プログラムの実行先で、更新対象プログラムを停止させることなく、その一部を更新する際に用いる情報として、処理やデータの不整合が発生するのを防止できる更新処理情報を生成することにある。
【課題を解決するための手段】
【０００６】
上記課題を解決するために、本発明は、複数の関数を含む更新対象プログラムを作成するプログラム作成部と、前記更新対象プログラムに対する更新部分を作成する更新部分作成部と、前記更新対象プログラムに属する複数の関数のうち更新対象となる更新対象関数及び当該更新対象関数から外れた関数であって前記更新対象関数と関連性を有する関数を入力し、当該入力した各関数を更新禁止関数として管理する更新禁止関数入力部と、前記更新対象プログラムに属する各関数のシンボル情報とアドレス情報に基づいて前記更新禁止関数に属する各関数の関数名と、前記更新対象プログラムの実行を管理するためのアドレスであって、前記更新禁止関数に属する各関数に割当てられたアドレスと、を関連づけた更新禁止関数リストを生成する更新禁止関数リスト生成部と、前記更新部分作成部の作成による更新部分及び前記更新禁止関数リスト生成部の生成による更新禁止関数リストを含む情報を、前記更新対象プログラムを実行するプログラム実行先に対する更新処理情報として管理する更新処理情報管理部と、を有し、前記更新処理情報管理部は、前記更新禁止関数に属する各関数が、前記更新対象プログラムの実行中、その更新を禁止する関数である旨の更新禁止情報を前記更新処理情報に付加してなることを特徴とする。
【発明の効果】
【０００７】
本発明によれば、更新対象プログラムの実行先で、更新対象プログラムを停止させることなく、その一部を更新する際に用いる情報として、処理やデータの不整合が発生するのを防止できる更新処理情報を生成することができる。
【図面の簡単な説明】
【０００８】
【図１】本発明の第１実施例を示す更新装置及び更新対象装置のブロック図である。
【図２】本発明の第１実施例における更新禁止関数リスト管理部のブロック図である。
【図３】本発明の第１実施例における更新禁止関数リストの構成図である。
【図４】本発明の第１実施例における動的プログラム更新部のブロック図である。
【図５】本発明の第１実施例におけるジャンプテーブルの構成図である。
【図６】本発明の第１実施例における更新禁止関数リストの設定処理手順を示すフローチャートである。
【図７】本発明の第１実施例における更新禁止関数リストの拡充処理手順を示すフローチャートである。
【図８】本発明の第１実施例における更新部分及び更新禁止関数リストの送信処理手順を示すフローチャートである。
【図９】本発明の第１実施例におけるプログラムの更新処理手順を示すフローチャートである。
【図１０】本発明の第２実施例における更新禁止関数リスト管理部のブロック図である。
【図１１】本発明の第２実施例における更新禁止関数リストの拡充処理手順を示すフローチャートである。
【発明を実施するための形態】
【実施例１】
【０００９】
本実施例は、更新対象プログラムの更新部分及び更新対象プログラムの実行を管理するための更新禁止関数リストを含む更新処理情報を更新装置で生成し、生成した更新処理情報を更新装置から更新対象装置に送信し、更新処理情報を受信した更新対象装置が、受信した更新処理情報に従って更新対象プログラムを処理するものである。以下、本実施例を図１から図９を用いて説明する。
【００１０】
図１は、本実施例における更新装置及び更新対象装置の構成を示すブロック図である。図１において、更新装置１０１は、通信インターフェース装置、記憶資源（例えばメモリおよびＨＤＤ）、およびそれらに接続されたプロセッサ（ＣＰＵ）を有し（いずれも図示せず）、プロセッサが、メモリに格納されたコンピュータプログラムを基に更新対象プログラム及び更新対象プログラムの更新部分（差分部分）を作成すると共に、更新対象プログラムの一部を更新するための情報を生成するコンピュータ装置として構成される。記憶資源には、更新部分作成部１０２と、プログラム作成部１０３と、更新禁止関数リスト管理部１０４及び１以上のコンピュータプログラムが記憶される。プロセッサ（ＣＰＵ）が、記憶資源内の１以上のコンピュータプログラムを実行することにより、更新部分作成部１０２と、プログラム作成部１０３及び更新禁止関数リスト管理部１０４は、各部に付加された機能を発揮することができる。
【００１１】
更新部分作成部１０２は、更新対象プログラムに対して、更新対象関数を含む更新部分を作成する機能を有する。プログラム作成部１０３は、ソースコードからプログラムをコンパイルして、複数の関数を含む更新対象プログラムを作成する機能を有する。更新部分作成部１０２及びプログラム作成部１０３は、コンパイラやリンカ、Makefileなどのビルドシステムを含む構成である。更新禁止関数リスト管理部１０４は、ユーザインターフェース１０５を介して、入力部１０６に接続されると共に、ネットワークインターフェース１０７を介して更新対象装置１１０に接続され、更新対象プログラムの実行中は、更新対象プログラムの動的更新を禁止する関数のリスト（更新禁止関数リスト）を管理する機能を有する。入力部１０６は、各種情報を入力するユーザ端末、例えば、キーボード、マウス等で構成される。
【００１２】
更新対象装置１１０は、更新対象プログラムを搭載すると共に、搭載した更新対象プログラムを実行する機能を有し、更新装置１０１のプログラム作成部１０３で作成した更新対象プログラムを実行するプログラム実行部１１１と、プログラム実行部１１１で実行している更新対象プログラムに対して、この更新対象プログラムの一部を動的に更新する動的プログラム更新部１１２とから構成される。プログラム実行部１１１は、ＣＰＵやメモリなどのプログラム実行環境を含み、メモリには、プログラムの実行状態をアドレスで管理するプログラムカウンタや共有ライブラリの割り当てアドレスを管理するメモリマップ等が構築される。
【００１３】
ここで、本実施例の概略について説明する。まず、更新装置１０１では、プログラム作成部１０３にて、更新対象装置１１０を制御する更新対象プログラムを作成し、作成した更新対象プログラムを、ネットワークインターフェース１０７を介して更新対象装置１１０に転送し、プログラム実行部１１１で実行させる。なお、作成した更新対象プログラムをシリアル通信或いはＲＯＭライタなどによって更新対象装置１１０に転送することができる。更新対象装置１１０が３６５日２４時間サービスを提供するような高可用性が求められる装置の場合、この実行している更新対象プログラムは基本的には実行し続けている。しかし、新サービスの追加や新たに見つかった問題の修復のために、更新対象プログラムを迅速に変更することが求められる。この要求に対しては、稼働中の更新対象プログラムを止めずに動いたままで、更新対象プログラムの一部を更新する動的プログラム更新が有効である。動的プログラム更新の単位は、プロセスから行単位まで様々な単位があるが、本実施例では関数単位とする。
【００１４】
更新装置１０１では、動的プログラム更新を可能にするために、プログラム作成部１０３で作成された更新対象プログラムであって、更新対象装置１１０のプログラム実行部１１１にて実行中の更新対象プログラムに対して、更新部分作成部１０２で、更新対象となる更新部分（差分部分）を作成する。更新部分の作成には既存の作成方法を用いてよい。通常、更新部分を更新装置１０１から更新対象装置１１０に送信し、更新対象装置１１０で、動的プログラム更新を行うが、本実施例では、更新装置１０１において、動的プログラム更新のタイミングに係わる更新禁止関数リストを用意し、更新禁止関数リスト管理部１０４で、更新禁止関数リストの作成と保存及び更新対象装置１１０への送信等を行う。なお、更新禁止関数とは、更新禁止関数実行中は、動的プログラム更新を行わない関数のことである。
【００１５】
このように、更新装置１０１で作成した更新部分と更新禁止関数リストを、更新装置１０１から更新対象装置１１０に送信する。更新対象装置１１０では、更新装置１０１から更新部分と更新禁止関数リストを受け取り、動的プログラム更新部１１２で更新禁止関数リストに記載されていない関数の実行時に、更新部分を適用して、プログラム実行部１１１で実行している更新対象プログラムに対して、この更新対象プログラムの一部を動的に更新する。
【００１６】
図２は、更新装置における更新禁止関数リスト管理部の構成を示したブロック図である。図２において、更新禁止関数リスト管理部１０４は、更新禁止関数名（シンボル名）を、ユーザインターフェース１０５を介して入力部１０６から取得する更新禁止関数名取得部２０１と、プログラム作成部１０３で作成した更新対象プログラムをプログラム作成部１０３から取得する更新対象プログラム取得部２０２と、更新対象プログラム取得部２０２で取得した更新対象プログラムの関数及びこの関数のアドレス一覧と更新禁止関数名取得部２０１で取得した更新禁止関数名とから、更新禁止関数の開始及び終了のアドレス範囲を取得する更新禁止関数アドレス範囲取得部２０３と、更新禁止関数アドレス範囲取得部２０３で取得した更新禁止関数のアドレスと更新禁止関数名の一覧を生成する更新禁止関数リスト生成部２０４と、更新禁止関数リスト生成部２０４で生成した更新禁止関数リストを不揮発メモリや磁気記憶装置などの不揮発性記憶装置（図示せず）に保存する更新禁止関数リスト保存部２０５と、更新対象プログラム取得部２０２で取得した更新対象プログラムに対して、更新対象関数及び更新禁止関数に係わるテストを実行するためのテストプログラムを、例えば、ネットワークインターフェース１０７を介して、テストプログラム管理装置（図示せず）から取得するテストプログラム取得部２０６と、エミュレータなどを含み、更新対象プログラム取得部２０２から更新対象プログラムを取り込むと共に、テストプログラム取得部２０６からテストプログラムを取り込み、このテストプログラムに従って更新対象関数及び更新禁止関数に係わるテストを実行するテストプログラム実行部２０７と、テストプログラム実行部２０７で実行したテストにおいて、更新対象プログラムの実行関数をトレースして関数コールグラフを作成し、作成結果を更新禁止関数アドレス範囲取得部２０３に追加する関数トレース取得部２０８と、更新部分作成部１０２で作成した更新部分を更新部分作成部１０２から取得する更新部分取得部２０９と、更新禁止関数リスト保存部２０５で保存した更新禁止関数リストと更新部分取得部２０９で取得した更新部分を、ネットワークインターフェース１０７などを介して更新対象装置１１０へ送信する送信部２１０から構成される。
【００１７】
この際、更新禁止関数名取得部２０１及び入力部１０５は、更新対象プログラムに属する複数の関数のうち更新対象となる更新対象関数及びこの更新対象関数から外れた関数であって更新対象関数と関連性を有する関数を入力し、入力した各関数を更新禁止関数として管理する更新禁止関数入力部として機能する。
【００１８】
ここで、本実施例では、更新禁止関数リストと更新部分を、送信部２１０からネットワークインターフェース１０７を介して送信するとしたが、取り外し可能な外付けメモリ装置やシリアルケーブルなどを介して受け渡ししても良い。また関数トレース取得部２０８は、取得した更新禁止関数に関する関数を、更新禁止関数アドレス範囲取得部２０３を介して更新禁止関数リスト生成部２０４に転送し、更新禁止関数リスト生成部２０４は、転送された関数を更新禁止関数リストに追加する。なお、関数トレース取得部２０８では、更新禁止関数に関する関数だけでなく、更新対象関数についてもトレース対象とする。この際、更新対象関数及びそのサブ関数は、更新対象関数実行時に自身を更新すると処理の不整合が起きるので、更新禁止関数とする。これにより、更新禁止関数名取得部２０１で取得した更新禁止関数だけでなく、更新禁止関数に係わる関数及び更新対象関数と更新対象関数に係わる関数についても、自動で更新禁止関数リストに追加することができる。
【００１９】
図３は、更新禁止関数リスト生成部で生成する更新禁止関数リストの構成図である。図３において、更新禁止関数リスト３００は、更新禁止関数の関数名（シンボル名）を格納する更新禁止関数名欄３０１と、更新禁止関数名の開始アドレスから終了アドレスのアドレス範囲を格納するアドレス範囲欄３０２と、アドレス範囲欄３０２に格納したアドレスがオフセット値かどうかを示す情報を格納するオフセット欄３０３と、更新禁止関数名欄３０１に格納した更新禁止関数の実体が存在している保存先の情報として、共有ライブラリのライブラリ名を示す情報を格納する共有ライブラリ名欄３０４から構成される。
【００２０】
ここで、更新禁止関数が共有ライブラリの関数の場合、そのアドレス範囲は絶対アドレスにはなっておらず、更新装置１０１ではオフセット値しかわからない。その為、更新禁止関数が共有ライブラリの関数の場合は、オフセット欄３０３にオフセット値になっていることを示す情報が付加され、どの共有ライブラリに含まれているのかを示す情報が共有ライブラリ名欄３０４に記載される。なお、これらの情報は、更新対象装置１１０側で、メモリマップを基にオフセット値を絶対アドレスに変換する際に必要となる。また、更新禁止関数が共有ライブラリの関数ではなく、更新対象プログラム内にstaticに組込まれた関数の場合は、オフセット欄３０３及び前記共有ライブラリ名欄３０４の情報は不要である。
【００２１】
図３の例では、共有ライブラリが、「libAAA.so」内にあり、アドレス範囲が、「0xAAAA-OxBAAA」の関数funcXに対して、更新禁止関数名欄３０１には、更新禁止関数名として、「funcX」が記載され、アドレス範囲欄３０２には、アドレス範囲として、「0xAAAA-OxBAAA」が記載され、オフセット欄３０３には、アドレス値がオフセットとなっていることを示す情報として「○」が記載され、共有ライブラリ名欄３０４には、共有ライブラリ名として、「libAAA.so」が記載される。また、更新対象プログラム内にstaticに組込まれたアドレス範囲が「0x8888-0x9888」である関数funcYに対して、更新禁止関数名欄３０１には、更新禁止関数名として、「funcY」が記載され、アドレス範囲欄３０２には、アドレス範囲として、「0x8888-Ox9888」が記載され、オフセット欄３０３及び共有ライブラリ名欄３０４には、それぞれ「N/A」が記載される。
【００２２】
図４は、更新対象装置における動的プログラム更新部の構成を示したブロック図である。図４において、動的プログラム更新部１１２は、更新部分と更新禁止関数リストを含む送信データをネットワークインターフェース１０７などを介して更新装置１０１から受信する受信部４０１と、受信部４０１で受信した送信データから更新部分を取得して、不揮発性記憶装置（図示せず）に保存する更新部分取得部４０２と、更新部分取得部４０２で取得し保存した更新部分をメモリ（図示せず）に配置する更新部分メモリ配置部４０３と、受信部４０１で受信した送信データから更新禁止関数リストを取得して、不揮発性記憶装置に保存する更新禁止関数リスト取得部４０４と、メモリからメモリマップを取得するメモリマップ取得部４０５と、更新禁止関数リスト取得部４０４で取得して保存した更新禁止関数リスト内のオフセット欄３０３が、「○」となっている更新禁止関数のアドレス範囲に対して、メモリマップ取得部４０５で取得したメモリマップと更新禁止関数リストの共有ライブラリ名欄３０４の共有ライブラリ名を基に、オフセット値を絶対アドレスへ変換するオフセット−絶対アドレス変換部４０６と、プログラム実行部１１１で実行中の更新対象プログラムの現在のプログラムカウンタのカウント値（アドレス）をメモリから取得するプログラムカウンタ取得部４０７と、プログラムカウンタ取得部４０７で取得したプログラムカウンタのカウント値とオフセット−絶対アドレス変換部４０６でアドレス範囲が全て絶対アドレスに変換された更新禁止関数リストのアドレスとを比較して、更新対象関数を更新してよいか否かのタイミングを判断する更新タイミング判断部４０８と、更新タイミング判断部４０８で更新可能タイミングと判断した場合に、更新対象関数の現アドレスと、更新部分メモリ配置部４０３でメモリに配置した更新部分（更新対象関数）の新アドレスをスタックとするジャンプテーブルを生成するジャンプテーブル生成部４０９とから構成される。
【００２３】
ここで、本実施例では、更新部分と更新禁止関数リストを含む送信データを受信部４０１でネットワークインターフェース１０７を介して受信するとしたが、取り外し可能な外付けメモリ装置やシリアルケーブルなどを介して受け渡ししも良い。また、ジャンプテーブル生成部４０９でジャンプテーブルを生成すると、以後、更新対象プログラムに属する各関数が実行される過程で、更新対象関数（現アドレスに対応する更新対象関数）が呼ばれた場合、ジャンプテーブルを介して、更新部分メモリ配置部４０３でメモリに配置した更新部分（更新関数）の新アドレスにジャンプし、更新後の関数（更新部分の更新関数）が実行される。これにより、プログラムの停止なしでプログラムの一部を更新することができる。
【００２４】
図５は、ジャンプテーブル生成部で生成するジャンプテーブルの構成図である。図５において、ジャンプテーブル５００は、更新対象関数の関数名を示す更新対象関数名欄５０１と、更新対象関数の実体がある新旧のジャンプ先アドレスを示すジャンプ先欄５０２から構成される。本実施例では、ジャンプ先欄５０２には、スタック方式でジャンプ先アドレスが格納される。例えば、更新対象関数の現アドレスが、「0x1111」として格納され、更新対象関数（更新部分）の新アドレスが、「0x2222」として格納される。なお、ジャンプ先欄５０２のジャンプ先アドレスは絶対アドレスである。
【００２５】
次に更新装置１０１における更新禁止関数リストを設定する処理手順について、図２と図３及び図６を用いて説明する。
【００２６】
図６は、本実施例における更新禁止関数リストを設定する処理手順を示すフローチャートである。本処理は更新装置１０１のユーザの指示により開始される。まず、更新対象プログラム取得部２０２は、プログラム作成部１０３から更新対象プログラムを取得する（ステップＳ６０１）。なお、ここで更新対象プログラムは、実行時にリンクする共有ライブラリも含む。また、更新対象プログラムのバイナリには、ビルド時に関数名などシンボル情報と各関数のアドレス情報が付加される。
【００２７】
次に、更新禁止関数名取得部２０１は、ユーザインターフェース１０５を介して入力部１０６から、更新禁止関数名（シンボル名）、例えば、更新対象関数及び更新対象関数に関連性を有する関数（更新対象関数以外の関数であって、その関数の実行中に、更新対象関数を更新すると、処理やデータの不整合が起こることが想定される関数）を含む関数の関数名を文字列で取得する（ステップＳ６０２）。
【００２８】
この後、更新禁止関数アドレス範囲取得部２０３は、更新対象プログラムに付加された情報を参照し、ステップＳ６０２で更新禁止関数名取得部２０１によって取得された更新禁止関数に対して、この更新禁止関数が、共有ライブラリ内の関数か否かを判断する（ステップＳ６０３）。更新禁止関数アドレス範囲取得部２０３は、ステップＳ６０３で、更新禁止関数が共有ライブラリ内の関数であると判断した場合、ステップＳ６０１で更新対象プログラム取得部２０２が取得した更新対象プログラムの中の更新禁止関数の実体が含まれる共有ライブラリから、更新禁止関数のアドレス情報をオフセット値として取得し（ステップＳ６０４）、ステップＳ６０３で、更新禁止関数が共有ライブラリ内の関数でないと判断した場合、ステップＳ６０１で更新対象プログラム取得部２０２が取得した更新対象プログラムに付加されたアドレス情報を基に、更新禁止関数のアドレスを絶対アドレスとして取得する（ステップＳ６０５）。
【００２９】
次に、更新禁止関数リスト生成部２０４は、ステップＳ６０２で更新禁止関数名取得部２０１が取得した更新禁止関数名と、ステップＳ６０４及びステップＳ６０５で更新禁止関数アドレス範囲取得部２０３が取得した更新禁止関数のアドレス範囲を、更新禁止関数リスト３００へ記入する（ステップＳ６０６）。この際、更新禁止関数リスト生成部２０４は、ステップＳ６０４を経由した場合は、更新禁止関数リスト３００のオフセット欄３０３にオフセット値を記入し、共有ライブラリ名欄３０４に共有ライブラリ名を記入し、ステップＳ６０５を経由した場合は、更新禁止関数リスト３００のオフセット欄３０３及び共有ライブラリ名欄３０４にはそれぞれ「N/A」と記入する。
【００３０】
この後、更新禁止関数を他に追記したい場合、更新禁止関数リスト生成部２０４は、全ての更新禁止関数についてアドレス範囲を取得したか否かを判断する（ステップＳ６０７）。まだ追記する必要がある場合、すなわち全ての更新禁止関数についてアドレス範囲を取得していないと、更新禁止関数リスト生成部２０４が判断した場合、ステップＳ６０７からステップＳ６０２に戻って一連の処理を続ける。一方、ステップＳ６０７にて、他に追記する必要が無い場合、すなわち全ての更新禁止関数についてアドレス範囲を取得したと、更新禁止関数リスト生成部２０４が判断した場合、更新禁止関数リスト保存部２０５は、更新禁止関数リスト３００をメモリに保存し、一連の処理を終了する。これにより、更新装置１０１のユーザが指定した更新禁止関数全てについて更新禁止関数リスト３００を作成することができる。すなわち、更新禁止関数リスト生成部２０４は、更新対象プログラムに属する各関数のシンボル情報とアドレス情報に基づいて更新禁止関数に属する各関数の関数名と、更新対象プログラムの実行を管理するためのアドレスであって、更新禁止関数に属する各関数に割当てられたアドレスとを関連づけた更新禁止関数リスト３００を生成することになる。
【００３１】
次に、更新装置１０１における更新禁止関数リストを拡充する処理手順について、図２と図３及び図７を用いて説明する。なお、プログラムを更新する際は、更新対象関数が正しく動くのかテストをする必要がある。その際に、更新禁止関数に対するテストも実施し、テスト実施時の関数トレース情報を用いて更新禁止関数リストを拡充するものである。
【００３２】
図７は、本実施例における更新禁止関数に関わる関数一覧を取得し更新禁止関数リストを拡充する処理手順を示すフローチャートである。本処理は、更新装置１０１のユーザの指示により開始しても良いし、図６で示した更新禁止関数リストを設定する処理の終了を契機に開始しても良い。
【００３３】
まず、更新対象プログラム取得部２０２は、プログラム作成部１０３から更新対象プログラムを取得する（ステップＳ７０１）。なお、ここで更新対象プログラムは、実行時にリンクする共有ライブラリも含む。また、更新対象プログラムのバイナリには、ビルド時に関数名などのシンボル情報と各関数のアドレス情報（絶対アドレスまたはオフセットアドレス）が付加される。
【００３４】
次に、テストプログラム取得部２０６は、更新対象プログラム取得部２０２によって取得された更新対象プログラムに対して、更新対象関数及び更新禁止関数に係わるテストを実行するためのテストプログラムをネットワークインターフェース１０７を介して取得し（ステップＳ７０２）、更新対象プログラムに対して関数トレース機能をＯＮにして関数トレースを取得できるようにする（ステップＳ７０３）。なお、テストプログラムを更新装置１０１のメモリに予め格納し、テストプログラム取得部２０６が、メモリからテストプログラムを取得することもできる。
【００３５】
次に、テストプログラム実行部２０７は、ステップＳ７０２で取得した、更新対象関数及び更新禁止関数に係わるテストプログラムを実行する（ステップＳ７０４）。このテスト後、関数トレース取得部２０８は、ステップＳ７０４で実行したテストにおいて、更新対象プログラムの実行関数をトレースして、関数コールグラフを作成する（ステップＳ７０５）。なお、この関数トレースには、サブ関数等の更新対象関数及び更新禁止関数に係わる関数が含まれている。
【００３６】
次に、更新禁止関数アドレス範囲取得部２０３は、ステップＳ７０５で取得した関数トレース結果の各関数について、各関数が共有ライブラリ内の関数か否かを判断する（ステップＳ７０６）。更新禁止関数アドレス範囲取得部２０３は、ステップＳ７０６で、関数トレース結果の関数が共有ライブラリ内の関数であると判断した場合、ステップＳ７０１で更新対象プログラム取得部２０２が取得した更新対象プログラムの中の関数の実体が含まれる共有ライブラリから、関数のアドレスをオフセット値として取得し（ステップＳ７０７）、ステップＳ７０６で、関数が共有ライブラリ内の関数でないと判断した場合、ステップＳ７０１で更新対象プログラム取得部２０２が取得した更新対象プログラムに付加されたアドレス情報を参照し、関数のアドレスを絶対アドレスとして取得する（ステップＳ７０８）。
【００３７】
次に、更新禁止関数リスト生成部２０４は、ステップＳ７０５で関数トレース取得部２０８が取得した関数名と、ステップＳ７０７及びステップＳ７０８で更新禁止関数アドレス範囲取得部２０３が取得した関数のアドレス範囲を、更新禁止関数リスト３００へ記入する（ステップＳ７０９）。この際、更新禁止関数リスト生成部２０４は、ステップＳ７０７を経由した場合は、更新禁止関数リスト３００のオフセット欄３０３にオフセット値を記入し、共有ライブラリ名欄３０４に共有ライブラリ名を記入し、ステップＳ７０８を経由した場合は、更新禁止関数リスト３００のオフセット欄３０３及び共有ライブラリ名欄３０４にはそれぞれ「N/A」と記入する。
【００３８】
この後、更新禁止関数リスト生成部２０４は、ステップＳ７０５で取得した関数トレースに含まれる全ての関数についてアドレス範囲を取得したか否かを判断する（ステップＳ７１０）。全ての関数についてアドレス範囲を取得していないと、更新禁止関数リスト生成部２０４が判断した場合、ステップＳ７１０からステップＳ７０６に戻って一連の処理を続ける。一方、ステップＳ７１０にて、全ての関数についてアドレス範囲を取得したと、更新禁止関数リスト生成部２０４が判断した場合、更新禁止関数リスト保存部２０５は、更新禁止関数リスト３００をメモリに保存し、一連の処理を終了する。これにより、更新装置１０１のユーザが指定した更新禁止関数に係わる関数及び更新対象関数に係わる関数全てについて更新禁止関数リスト３００を作成することができる。
【００３９】
この際、更新禁止関数リスト生成部２０４は、関数トレース取得部２０８で取得した関数コールに属する関数トレースによる各関数の関数名と、この関数トレースによる各関数のアドレスとを関連づけて更新禁止関数リストに追加することになる。さらに、関数トレース取得部２０８が、関数コールに属する関数として、関数トレースによる更新対象関数に関わる関数（サブ関数等）及び更新禁止関数に関わる関数（サブ関数等）を取得した場合、更新禁止関数リスト生成部２０４は、これらの関数の関数名とアドレスを更新禁止関数リストに追加する。
【００４０】
次に更新装置１０１における、更新部分及び更新禁止関数リストを更新対象装置１１０に送信する処理手順について、図２及び図８を用いて説明する。
【００４１】
図８は、更新部分及び更新禁止関数リストを更新対象装置に送信する処理手順を示すフローチャートである。本処理は、更新装置１０１のユーザの指示により開始しても良いし、図７で示した更新禁止関数リストを設定する処理の終了を契機に開始しても良いし、タイマーを設定して指定した時刻に開始しても良い。
【００４２】
まず、更新部分取得部２０９は、更新部分作成部１０２で作成した更新部分を更新部分作成部１０２から取得する（ステップＳ８０１）。次に、送信部２１０は、更新禁止関数リスト保存部２０５がメモリに保存した更新禁止関数リスト３００を更新禁止関数リスト保存部２０５から取得する（ステップＳ８０２）。この後、送信部２０１は、ステップＳ８０１で更新部分取得部２０９が取得した更新部分を更新部分取得部２０９から取得し、取得した更新部分及び、ステップＳ８０２で取得した更新禁止関数リスト３００を含む送信データを、ネットワークインターフェース１０７を介して更新対象装置１１０に送信し（ステップＳ８０３）、一連の処理を終了する。
【００４３】
この際、送信部２１０は、更新部分及び更新禁止関数リストを含む情報を、更新対象プログラムを実行するプログラム実行先、例えば、更新対象装置１１０に対する更新処理情報として管理する更新処理情報管理部として機能し、更新部分及び更新禁止関数リストを含む送信データに、更新禁止関数に属する各関数が、更新対象プログラムの実行中、その更新を禁止する関数である旨の更新禁止情報を更新処理情報に付加することができる。この更新禁止情報として、例えば、更新対象プログラムの実行を示すアドレス（更新対象装置１１０におけるプログラムカウンタのカウント値に相当するアドレス）が、更新禁止関数に属する関数のアドレスの範囲内にある場合、この関数の更新を禁止することを示す情報を用いることができる。
【００４４】
次に、更新対象装置１１０において更新禁止関数リストに基づいて動的プログラム更新を実施する処理手順について、図４と図５及び図９を用いて説明する。
【００４５】
図９は、更新禁止関数リストに基づいて動的にプログラムを更新する処理手順を示すフローチャートである。本処理は、更新対象装置１１０が、更新装置１０１から更新部分及び更新禁止関数リストを含む送信データを受信したことを契機に開始しても良いし、送信データの受信後一定期間後に開始しても良い。
【００４６】
まず、受信部４０１が、更新部分と更新禁止関数リスト及び更新禁止情報を有する更新処理情報を含む送信データをネットワークインターフェース１０７を介して受信すると、受信部４０１は、受信した送信データを判別すると共に、受信した送信データを受信データとして処理し、更新部分取得部４０２は、受信部４０１から更新部分を取得して不揮発性記憶装置に保存し、更新禁止関数リスト取得部４０４は、受信部４０１から更新禁止関数リストを取得して、不揮発性記憶装置（メモリ）に保存する（ステップＳ９０１）。
【００４７】
次に、更新部分メモリ配置部４０３は、ステップＳ９０１で更新部分取得部４０２が取得した更新部分を、更新対象装置１１０のメモリに配置する（ステップＳ９０２）。この際、メモリには、更新対象となる領域（更新前の関数を含む領域）と更新部分の領域（更新後の関数を含む領域）が併存することになる。この時に更新対象関数の絶対アドレスが決まる。なお、この場合、更新部分をメモリに配置しただけであり、更新対象関数はまだ更新しない。
【００４８】
次に、メモリマップ取得部４０５は、更新対象プログラムのメモリマップをメモリから取得する（ステップＳ９０３）。なお、このメモリマップは、例えば、更新対象装置１１０に搭載されるＯＳが作成するものであり、メモリマップには共有ライブラリのメモリ割当て情報が含まれている。
【００４９】
次に、オフセット−絶対アドレス変換部４０６は、ステップＳ９０１で取得した更新禁止関数リスト内のオフセット欄３０３が「○」となっている更新禁止関数のアドレス範囲に対して、ステップＳ９０３で取得したメモリマップを参照し、更新禁止関数リストの共有ライブラリ名欄３０４の共有ライブラリ名を基にメモリマップから共有ライブラリの割当てアドレスを取得し、取得した割当てアドレスと更新禁止関数リストのオフセット値と足し合わせることで、オフセットアドレスを絶対アドレスへ変換する（ステップＳ９０４）。
【００５０】
次に、プログラムカウンタ取得部４０７は、実行中の更新対象プログラムの現在のプログラムカウンタのカウント値（アドレス）をメモリから取得し、更新タイミング判断部４０８は、プログラムカウンタ取得部４０７が取得した、現在のプログラムカウンタのカウント値（アドレス）が、ステップＳ９０４で絶対アドレスに変換された更新禁止関数リストのアドレス範囲内にあるか否かを判断する（ステップＳ９０５）。この際、更新タイミング判断部４０８は、送信データに付加された更新禁止情報を基に、更新禁止関数リスト３００に属する関数が、更新可能か否かを判断する。更新タイミング判断部４０８は、ステップＳ９０５で、現在のプログラムカウンタのカウント値（アドレス）が、更新禁止関数リストのアドレス範囲内にあると判断した場合、更新不可（更新禁止）のため、プログラム更新はせず、プログラムカウンタを進めるための処理を実行し（ステップＳ９０６）、ステップＳ９０５に戻る。更新タイミング判断部４０８は、ステップＳ９０５で、現在のプログラムカウンタのカウント値（アドレス）が、更新禁止関数リストのアドレス範囲外であると判断した場合、更新可能であると判断できるため、プログラム更新処理を行う。
【００５１】
まず、更新タイミング判断部４０８は、ステップＳ９０１で更新部分取得部４０２が取得し、ステップＳ９０２で更新部分メモリ配置部４０３がメモリに配置した更新部分内の更新対象関数のジャンプテーブルがあるか、すなわち図５のジャンプテーブル５００の更新対象関数名欄５０１に、更新対象関数名が書かれているか否かを判断する（ステップＳ９０７）。ステップＳ９０７で、メモリに配置した更新部分内の更新対象関数のジャンプテーブル５００がないと更新タイミング判断部４０８が判断した場合、ジャンプテーブル生成部４０９は、更新対象関数名を更新対象関数名欄５０１に記入し、更新対象関数の現アドレスをジャンプ先欄５０２に記入したジャンプテーブル５００を生成する（Ｓ９０８）。一方、ステップＳ９０７で既に更新対象関数のジャンプテーブル５００があると更新タイミング判断部４０８が判断した場合は、ステップＳ９０８をスキップする。
【００５２】
その後、ジャンプテーブル生成部４０９は、ステップＳ９０２で更新部分取得部４０２がメモリに配置した更新対象関数の新アドレスを、ジャンプテーブル５００のジャンプ先５０２に追記する（ステップＳ９０９）。なお新アドレスは絶対アドレスである。これにより、以後、更新対象プログラムに属する各関数が順次実行される過程で、更新対象関数が呼ばれた場合、ジャンプテーブル５００を参照して、ステップＳ９０２で更新部分取得部４０２がメモリに配置した更新関数の新アドレスにジャンプし、更新後の関数が実行される。
【００５３】
その後、ジャンプテーブル生成部４０９は、更新部分に含まれる全ての更新対象関数について新アドレスを追加、すなわちジャンプテーブル５００を更新したか否かを判断する（ステップＳ９１０）。まだ更新対象関数があるとジャンプテーブル生成部４０９が判断した場合、ステップＳ９０５に戻り一連の処理を続ける。一方、ジャンプテーブル生成部４０９は、ステップＳ９１０にて、全ての更新対象関数についてジャンプテーブル５００を更新したと判断した場合、ジャンプテーブル５００をメモリに保存し、一連の処理を終了する。
【００５４】
本実施例によれば、更新部分及び更新禁止関数リストを含む情報であって、更新禁止情報が付加された更新処理情報を含む送信データを更新装置１０１で生成し、生成した送信データを更新装置１０１から更新対象装置１１０に送信し、送信データを受信した更新対象装置１１０が、送信データに付加された更新処理情報に従って更新対象プログラムを処理するようにしたので、更新対象プログラムを停止させることなく、更新対象装置１１０で更新対象プログラムの更新部分を更新することができるとともに、処理やデータの不整合が発生するのを防止することができる。すなわち、更新装置１０１は、更新対象装置１１０で、更新対象プログラムを停止させることなく、その一部を更新する際に用いる情報として、処理やデータの不整合が発生するのを防止できる更新処理情報を生成することができる。
【実施例２】
【００５５】
本実施例は、更新対象装置の機器種別毎の更新禁止関数リストを用意し、機器種別毎の更新禁止関数リストを基に更新対象機器の機器種別を判定することで、更新禁止関数リストを拡充するものである。なお、第１の実施例で示したブロック図、処理フローは、図１及び図２から図９で示したものと同じであるので、それぞれの説明は省略する。以下、図１０と図１１を用いて、本実施例における更新禁止関数リストを追記する方法について説明する。
【００５６】
図１０は、本発明の第２実施例における更新禁止関数リスト管理部のブロック図である。図１０における更新禁止関数リスト管理部１０４は、一部が図２に示すものとは異なるが、他の構成は、図２に示すものと同様である。本実施例では、図２と異なる部分について説明する。
【００５７】
図１０において、更新禁止関数リスト管理部１０４には、関数トレース取得部２０８で取得した関数コール一覧と、機器種別毎に用意した関数呼び出し一覧とを比較し、更新対象装置１１０の機器種別を判定する機器種別判断部１００１と、機器種別判断部１００１の判定結果を基に、機器種別毎に用意した更新禁止関数リストを取得する種別毎更新禁止関数リスト取得部１００２が追加されている。
【００５８】
ここで、機器種別とは、更新対象プログラムを実行するプログラム実行先の機器種別であって、例えば、ネットワーク機器のような通信機器であったり、レコーダのような記憶機器であったりする。本実施例では、ネットワーク通信機器とレコーダの例で説明する。
【００５９】
次に、図１１を用いて、本実施例における更新禁止関数リストを追記する方法について説明する。
【００６０】
図１１は、本実施例における更新禁止関数に関わる関数一覧を取得し、更新禁止関数リストを拡充する処理手順を示すフローチャートである。本処理は、図７で示した処理の終了を契機に開始する。なお、図７で説明したステップＳ７０６からステップＳ７１０と同じ処理については説明を省略する。
【００６１】
まず、機器種別判断部１００１は、テストプログラム実行部２０７の実行結果から得られた関数コール一覧を関数トレース取得部２０８から取得する（ステップＳ１１０１）。次に、機器種別判断部１００１は、関数トレース取得部２０８から取得した関数コール一覧と機器種別毎に予め用意した関数コール（呼び出し）一覧（予めメモリに保存されていた関数コール一覧）とを比較し、取得した関数コール一覧の中に予め用意した関数コールとパターンが一致するものが存在するか否かを判断する（ステップＳ１１０２）。
【００６２】
ここで、予め用意した関数コールとは、本実施例では、ネットワーク通信機器とレコーダを例としており、ネットワーク通信機器では、socketやlisten、connect、send等を含むソケット通信システムコールの関数コールであり、レコーダでは、ＨＤＤ等のＩ／Ｏデバイスへのioctlやwrite及びファイルシステムを含むシステムコールの関数コールである。
【００６３】
機器種別判断部１００１は、ステップＳ１１０２では、取得した関数コール一覧の中に、これらシステムコールに属する関数コールの並びが一定割合以上、例えば、５割以上含まれていれば、該当する機器種別ありと判断する。
【００６４】
次に、機器種別判断部１００１は、該当種別ありか否かを判断する（ステップＳ１１０３）。機器種別判断部１００１が、ステップＳ１１０３で該当種別なしと判断した場合には、このルーチンでの処理を終了する。一方、機器種別判断部１００１が、ステップＳ１１０３で該当種別ありと判断した場合、すなわち、該当する機器種別がある場合、種別毎更新禁止関数リスト取得部１００２は、機器種別判断部１００１から該当機器種別の更新禁止関数名の一覧を取得する（ステップＳ１１０４）。
【００６５】
ステップＳ１１０４で取得した更新禁止関数一覧について、以後、ステップ１１０５からステップＳ１１０９の処理（図７で示したステップＳ７０６からステップＳ７１０の処理と同一の処理）を行うことで、更新禁止関数リスト３００の内容を拡充する。すなわち、更新禁止関数リスト生成部２０４は、ステップＳ１１０４で取得した更新禁止関数一覧を基に、機器種別関数コールに属する機器種別による各関数の関数名と、この機器種別による各関数のアドレスとを関連づけて更新禁止関数リストに追加することになる。
【００６６】
本実施例において、機器種別判断部１００１と種別毎更新禁止関数リスト取得部１００２は、関数トレース取得部２０８で取得した関数コールと、プログラム実行先の機器種別を示す機器種別毎の関数コールとを比較し、関数トレース取得部２０８で取得した関数コールが、機器種別毎の関数コールの中に存在する場合、関数トレース取得部２０８で取得した関数コールをプログラム実行先の機器種別に対応した機器種別関数コールとして保持する機器種別関数コール保持部として機能し、関数トレース取得部２０８で取得した関数コールの中に、プログラム実行先の機器種別毎の関数コールのうちいずれか一つの関数コールの並びが一定割合以上存在することを条件に、関数トレース取得部２０８で取得した関数コールをプログラム実行先の機器種別に対応した機器種別関数コールとして保持することになる。
【００６７】
本実施例において、機器種別がネットワーク通信機器の場合は、ソケット通信のシステムコール中はクリティカル処理になると判断し、ソケット通信システムコール一覧を更新禁止関数とする。また、同様に、機器種別がレコーダの場合は、Ｉ／Ｏデバイスへのアクセスやファイルシステムのシステムコール中はクリティカル処理になると判断し、システムコール一覧を更新禁止関数とする。なお、本実施例では、システムコールを更新禁止関数としたが、システムコール以外のクリティカル処理になる関数を更新禁止関数としても良い。
【００６８】
本実施例によれば、第１の実施例と同様の効果を奏することができると共に、機器種別を自動で判断し、予め用意した機器種別毎の更新禁止関数を更新禁止関数リストに自動で追加することで、更新装置１０１のユーザが更新禁止関数名を指定する手間を省くことができる。
【００６９】
なお、本発明は上記した実施例に限定されるものではなく、様々な変形例が含まれる。例えば、上記した実施例は本発明を分かりやすく説明するために詳細に説明したものであり、必ずしも説明した全ての構成を備えるものに限定されるものではない。
【００７０】
また、ある実施例の構成の一部を他の実施例の構成に置き換えることが可能であり、また、ある実施例の構成に他の実施例の構成を加えることも可能である。また、各実施例の構成の一部について、他の構成の追加・削除・置換をすることが可能である。
【００７１】
また、上記の各構成、機能等は、それらの一部又は全部を、例えば集積回路で設計する等によりハードウェアで実現してもよい。また、上記の各構成、機能等は、プロセッサがそれぞれの機能を実現するプログラムを解釈し、実行することによりソフトウェアで実現してもよい。各機能を実現するプログラム、テーブル、ファイル等の情報は、メモリや、ハードディスク、ＳＳＤ（Solid State Drive）等の記録装置、または、ＩＣカード、ＳＤカード、ＤＶＤ等の記録媒体に置くことができる。
【符号の説明】
【００７２】
１０１  更新装置、１０２  更新部分作成部、１０３  プログラム作成部、１０４  更新禁止関数リスト管理部、１０５  ユーザインターフェース、１０６  入力部、１０７  ネットワークインターフェース、１１０…更新対象装置、１１１…プログラム実行部、１１２…動的プログラム更新部。
【図１】
2016062311.tif 000003
【図２】
2016062311.tif 000004
【図３】
2016062311.tif 000005
【図４】
2016062311.tif 000006
【図５】
2016062311.tif 000007
【図６】
2016062311.tif 000008
【図７】
2016062311.tif 000009
【図８】
2016062311.tif 000010
【図９】
2016062311.tif 000011
【図１０】
2016062311.tif 000012
【図１１】
2016062311.tif 000013