(57)【要約】【課題】プログラムを動的に更新する仕組みを容易に導入できること。【解決手段】情報処理装置は、対象システムで実行中の対象モジュールのパッチ適用時に更新後モジュールを対象システムのメモリにロードする組込みローダと、メモリ上のアドレスを保持するアドレス保持領域と、アドレス保持領域内のアドレスを対象システムのレジスタに格納し、当該レジスタに格納されたアドレスに対して処理を移行させる本移行命令と、複数の関数を含む対象モジュールと、を結合してロードモジュールを生成する生成部を備える。組込みローダは、ロードされた更新後関数のメモリ上の先頭アドレスをアドレス保持領域に格納する。生成部は、更新対象関数の先頭アドレスから第２のアドレス分離れた位置に本移行命令を配置する。第２のアドレスは、パッチ適用時にメモリ上の更新対象関数の先頭アドレスに挿入される仮移行命令における処理の移行先を示す相対アドレスである。【選択図】図１
2019219995.tif 000002
【特許請求の範囲】
【請求項１】
対象システムで実行させるための複数の関数を含む実行形式のプログラムである対象モジュールの入力を受け付ける受付部と、
前記対象システムで実行中の前記対象モジュールに対してパッチ適用を行う際に前記複数の関数のいずれかを更新した更新後関数を含む更新後モジュールを当該対象システムのメモリにロードする組込みローダと、前記メモリ上における前記更新後関数に対応する第１のアドレスを保持するためのアドレス保持領域と、前記アドレス保持領域に保持された前記第１のアドレスを前記対象システムのレジスタに格納し、当該レジスタに格納された前記第１のアドレスに対して処理を移行させる本移行命令と、前記入力された対象モジュールと、を結合してロードモジュールを生成する生成部と、
を備え、
前記組込みローダは、
前記ロードされた前記更新後モジュール内の前記更新後関数の前記メモリ上の先頭アドレスを前記第１のアドレスとして前記アドレス保持領域に格納する処理を含み、
前記生成部は、
前記更新後関数に対応する前記対象モジュール内の更新対象関数の先頭アドレスから第２のアドレス分離れた位置に前記本移行命令を配置して、前記ロードモジュールを生成し、
前記第２のアドレスは、
前記パッチ適用時に前記メモリ上の前記更新対象関数の先頭アドレスに挿入される仮移行命令における処理の移行先を示す相対アドレスである
情報処理装置。
【請求項２】
前記第２のアドレスのサイズは、
前記対象システムのプロセッサのアドレッシングサイズの上限以内である
請求項１に記載の情報処理装置。
【請求項３】
前記受付部は、前記更新後モジュールの入力をさらに受け付け、
前記生成部は、
前記第２のアドレスに対して処理を移行させる前記仮移行命令を生成し、
前記情報処理装置は、
前記パッチ適用の要求を発生させるために、前記対象モジュールが実行中である前記対象システムに対して、前記更新後モジュール及び前記仮移行命令を転送する転送部をさらに備える
請求項１又は２に記載の情報処理装置。
【請求項４】
前記組込みローダは、
前記パッチ適用の要求の検出時に、前記転送された更新後モジュールを前記メモリへロードする処理と、
前記更新後関数の先頭アドレスである前記メモリ上の絶対アドレスを取得する処理と、
前記取得した絶対アドレスを前記第１のアドレスとして前記アドレス保持領域に格納する処理と、を含む
請求項３に記載の情報処理装置。
【請求項５】
前記生成部は、
前記更新後関数と前記仮移行命令との対応付けを定義したパッチリストをさらに生成し、
前記転送部は、前記更新後モジュール及び前記仮移行命令と共に前記パッチリストを転送し、
前記組込みローダは、
前記パッチ適用の要求の検出時に、前記転送されたパッチリストに基づいて前記更新後モジュールの前記メモリへのロードを開始する
請求項３又は４に記載の情報処理装置。
【請求項６】
前記生成部は、
前記生成されたロードモジュールのうち、前記更新対象関数を、前記更新後関数に置き換えてパッチ適用済みロードモジュールを生成し、
前記転送部は、前記対象システムの再起動時に前記ロードモジュールに代えて前記メモリへロードさせるために、前記対象システムに対して、前記パッチ適用済みロードモジュールを転送する
請求項３乃至５のいずれか１項に記載の情報処理装置。
【請求項７】
対象システムで実行させるための複数の関数を含む実行形式のプログラムである対象モジュールの入力を受け付け、
前記対象システムで実行中の前記対象モジュールに対してパッチ適用を行う際に前記複数の関数のいずれかを更新した更新後関数を含む更新後モジュールを当該対象システムのメモリにロードする組込みローダと、前記メモリ上における前記更新後関数に対応する第１のアドレスを保持するためのアドレス保持領域と、前記アドレス保持領域に保持された前記第１のアドレスを前記対象システムのレジスタに格納し、当該レジスタに格納された前記第１のアドレスに対して処理を移行させる本移行命令と、前記入力された対象モジュールと、を結合してロードモジュールを生成し、
前記組込みローダは、
前記ロードされた前記更新後モジュール内の前記更新後関数の前記メモリ上の先頭アドレスを、前記アドレス保持領域に格納する処理を含み、
前記ロードモジュールを生成する際に、前記更新後関数に対応する前記対象モジュール内の更新対象関数の先頭アドレスから第２のアドレス分離れた位置に前記本移行命令を配置し、
前記第２のアドレスは、
前記パッチ適用時に前記メモリ上の前記更新対象関数の先頭アドレスに挿入される仮移行命令における処理の移行先を示す相対アドレスである
ロードモジュール生成方法。
【請求項８】
対象システムで実行させるための複数の関数を含む実行形式のプログラムである対象モジュールの入力を受け付ける処理と、
前記対象システムで実行中の前記対象モジュールに対してパッチ適用を行う際に前記複数の関数のいずれかを更新した更新後関数を含む更新後モジュールを当該対象システムのメモリにロードする組込みローダと、前記メモリ上における前記更新後関数に対応する第１のアドレスを保持するためのアドレス保持領域と、前記アドレス保持領域に保持された前記第１のアドレスを前記対象システムのレジスタに格納し、当該レジスタに格納された前記第１のアドレスに対して処理を移行させる本移行命令と、前記入力された対象モジュールと、を結合してロードモジュールを生成する処理と、
をコンピュータに実行させ、
前記組込みローダは、
前記ロードされた前記更新後モジュール内の前記更新後関数の前記メモリ上の先頭アドレスを、前記アドレス保持領域に格納する処理を含み、
前記ロードモジュールを生成する処理は、前記更新後関数に対応する前記対象モジュール内の更新対象関数の先頭アドレスから第２のアドレス分離れた位置に前記本移行命令を配置し、
前記第２のアドレスは、
前記パッチ適用時に前記メモリ上の前記更新対象関数の先頭アドレスに挿入される仮移行命令における処理の移行先を示す相対アドレスである
ロードモジュール生成プログラム。
【請求項９】
対象システムで実行させるための複数の関数を含む実行形式のプログラムである対象モジュールと、
前記対象システムで実行中の前記対象モジュールに対してパッチ適用を行う際に前記複数の関数のいずれかを更新した更新後関数を含む更新後モジュールを当該対象システムのメモリにロードする組込みローダと、
前記メモリ上における前記更新後関数に対応する第１のアドレスを保持するためのアドレス保持領域と、
前記アドレス保持領域に保持された前記第１のアドレスを前記対象システムのレジスタに格納し、当該レジスタに格納されたアドレスに対して処理を移行させる本移行命令と、
が結合され、
前記組込みローダは、
前記ロードされた前記更新後モジュール内の前記更新後関数の前記メモリ上の先頭アドレスを、前記アドレス保持領域に格納する処理を含み、
前記本移行命令は、
前記更新後関数に対応する前記対象モジュール内の更新対象関数の先頭アドレスから第２のアドレス分離れた位置に配置され、
前記第２のアドレスは、
前記パッチ適用時に前記メモリ上の前記更新対象関数の先頭アドレスに挿入される仮移行命令における処理の移行先を示す相対アドレスである
プログラム。
【請求項１０】
情報処理装置と、対象システムと、を備え、
前記対象システムは、
複数の関数を含む実行形式のプログラムである対象モジュールと、前記対象システムで実行中の前記対象モジュールに対してパッチ適用を行う際に前記複数の関数のいずれかを更新した更新後関数を含む更新後モジュールを当該対象システムのメモリにロードする組込みローダと、前記メモリ上における前記更新後関数に対応する第１のアドレスを保持するためのアドレス保持領域と、前記アドレス保持領域に保持された前記第１のアドレスを前記対象システムのレジスタに格納し、当該レジスタに格納されたアドレスに対して処理を移行させる本移行命令と、が結合されたロードモジュールを前記メモリにロードし、
前記ロードモジュール内の前記対象モジュールを実行し、
前記本移行命令は、
前記ロードモジュール内で、前記更新後関数に対応する前記対象モジュール内の更新対象関数の先頭アドレスから第２のアドレス分離れた位置に配置されており、
前記情報処理装置は、
前記更新後モジュールの入力を受け付け、
前記第２のアドレスを移行先の相対アドレスとして処理を移行させる仮移行命令を生成し、
前記パッチ適用の要求を発生させるために、前記対象モジュールが実行中である前記対象システムに対して、前記更新後モジュール及び前記仮移行命令を転送し、
前記メモリにロードされた前記組込みローダは、
前記対象システムが前記更新後モジュール及び前記仮移行命令を受信後に、前記パッチ適用の要求を検出し、
前記受信した更新後モジュールが前記ロードされた際の前記更新後関数の前記メモリ上の先頭アドレスを前記第１のアドレスとして前記アドレス保持領域に格納し、
前記対象システムは、
前記仮移行命令を、前記メモリ上の前記更新対象関数の先頭アドレスに挿入する
動的プログラム更新システム。
【請求項１１】
前記情報処理装置は、
前記対象モジュールの入力を受け付け、
前記入力された対象モジュールと、前記組込みローダと、前記アドレス保持領域と、前記本移行命令と、を結合して前記ロードモジュールを生成し、
前記ロードモジュールを前記対象システムに対して転送し、
前記対象システムは、
前記情報処理装置から受信したロードモジュールを前記メモリにロードし、
前記ロードモジュール内の前記対象モジュールを実行する
請求項１０に記載の動的プログラム更新システム。
【請求項１２】
前記第２のアドレスのサイズは、
前記対象システムのプロセッサのアドレッシングサイズの上限以内である
請求項１０又は１１に記載の動的プログラム更新システム。
【請求項１３】
前記組込みローダは、
前記パッチ適用の要求の検出時に、前記受信した更新後モジュールを前記メモリへロードし、
前記更新後関数の先頭アドレスである前記メモリ上の絶対アドレスを取得し、
前記取得した絶対アドレスを前記第１のアドレスとして前記アドレス保持領域に格納する
請求項１０乃至１２のいずれか１項に記載の動的プログラム更新システム。
【請求項１４】
前記情報処理装置は、
前記更新後関数と前記仮移行命令との対応付けを定義したパッチリストをさらに生成し、
前記更新後モジュール及び前記仮移行命令と共に前記パッチリストを転送し、
前記組込みローダは、
前記パッチ適用の要求の検出時に、前記転送されたパッチリストに基づいて前記更新後モジュールの前記メモリへのロードを開始する
請求項１０乃至１３のいずれか１項に記載の動的プログラム更新システム。
【請求項１５】
前記情報処理装置は、
前記ロードモジュールのうち、前記更新対象関数を、前記更新後関数に置き換えてパッチ適用済みロードモジュールを生成し、
前記更新後モジュール及び前記仮移行命令と共に、前記パッチ適用済みロードモジュールを転送し、
前記対象システムは、
前記情報処理装置から受信した前記パッチ適用済みロードモジュールを記憶装置に格納し、
再起動時に、前記ロードモジュールに代えて前記パッチ適用済みロードモジュールを前記記憶装置から前記メモリへロードし、
前記パッチ適用済みロードモジュール内の前記更新後関数を含む対象モジュールを実行する、
請求項１０乃至１４のいずれか１項に記載の動的プログラム更新システム。
【請求項１６】
対象システムにおいて、
複数の関数を含む実行形式のプログラムである対象モジュールと、前記対象システムで実行中の前記対象モジュールに対してパッチ適用を行う際に前記複数の関数のいずれかを更新した更新後関数を含む更新後モジュールを当該対象システムのメモリにロードする組込みローダと、前記メモリ上における前記更新後関数に対応する第１のアドレスを保持するためのアドレス保持領域と、前記アドレス保持領域に保持された前記第１のアドレスを前記対象システムのレジスタに格納し、当該レジスタに格納されたアドレスに対して処理を移行させる本移行命令と、が結合されたロードモジュールを前記メモリにロードし、
前記ロードモジュール内の前記対象モジュールを実行し、
前記本移行命令は、
前記ロードモジュール内で、前記更新後関数に対応する前記対象モジュール内の更新対象関数の先頭アドレスから第２のアドレス分離れた位置に配置されており、
情報処理装置において、
前記更新後モジュールの入力を受け付け、
前記第２のアドレスを移行先の相対アドレスとして処理を移行させる仮移行命令を生成し、
前記パッチ適用の要求を発生させるために、前記対象モジュールが実行中である前記対象システムに対して、前記更新後モジュール及び前記仮移行命令を転送し、
前記メモリにロードされた前記組込みローダにおいて、
前記対象システムが前記更新後モジュール及び前記仮移行命令を受信後に、前記パッチ適用の要求を検出し、
前記受信した更新後モジュールが前記ロードされた際の前記更新後関数の前記メモリ上の先頭アドレスを前記第１のアドレスとして前記アドレス保持領域に格納し、
前記対象システムにおいて、
前記仮移行命令を、前記メモリ上の前記更新対象関数の先頭アドレスに挿入する
動的プログラム更新方法。
【請求項１７】
複数の関数を含む実行形式のプログラムである対象モジュールと、組込みローダと、アドレス保持領域と、本移行命令と、が結合されたロードモジュールを記憶するメモリと、
前記メモリに記憶された前記対象モジュールを実行するプロセッサと、
を備え、
前記組込みローダは、
前記プロセッサが実行中の前記対象モジュールに対してパッチ適用を行う際に前記複数の関数のいずれかを更新した更新後関数を含む更新後モジュールを前記メモリにロードし、
前記アドレス保持領域は、
前記メモリ上における前記更新後関数に対応する第１のアドレスを保持するための領域であり、
前記本移行命令は、
前記アドレス保持領域に保持された前記第１のアドレスを前記プロセッサのレジスタに格納し、当該レジスタに格納されたアドレスに対して処理を移行させる命令であり、
前記組込みローダは、
前記ロードされた前記更新後モジュール内の前記更新後関数の前記メモリ上の先頭アドレスを、前記アドレス保持領域に格納する処理を含み、
前記本移行命令は、
前記更新後関数に対応する前記対象モジュール内の更新対象関数の先頭アドレスから第２のアドレス分離れた位置に配置され、
前記第２のアドレスは、
前記パッチ適用時に前記メモリ上の前記更新対象関数の先頭アドレスに挿入される仮移行命令における処理の移行先を示す相対アドレスである
情報処理装置。
【請求項１８】
情報処理装置が備えるプロセッサが、
複数の関数を含む実行形式のプログラムである対象モジュールと、組込みローダと、アドレス保持領域と、本移行命令と、が結合されたロードモジュールを前記情報処理装置のメモリにロードし、
前記ロードモジュール内の前記対象モジュールを実行し、
前記メモリにロードされた前記組込みローダが、
前記複数の関数のいずれかを更新した更新後関数を含む更新後モジュールと仮移行命令とを受信後に、前記対象モジュールに対する当該更新後モジュールのパッチ適用の要求を検出し、
前記受信した更新後モジュールを前記メモリにロードし、
前記更新後関数の前記メモリ上の先頭アドレスを第１のアドレスとして前記アドレス保持領域に格納し、
前記プロセッサが、
前記仮移行命令を、前記メモリ上の前記更新後関数に対応する前記対象モジュール内の更新対象関数の先頭アドレスに挿入し、
前記本移行命令は、
前記アドレス保持領域に保持された前記第１のアドレスを前記プロセッサのレジスタに格納し、当該レジスタに格納されたアドレスに対して処理を移行させる命令であり、
前記ロードモジュール内で、前記更新対象関数の先頭アドレスから第２のアドレス分離れた位置に配置されており、
前記仮移行命令は、
前記第２のアドレスを移行先の相対アドレスとして処理を移行させる命令である
動的プログラム更新方法。
【発明の詳細な説明】
【技術分野】
【０００１】
本発明は、情報処理装置、ロードモジュール生成方法及びプログラム、並びに、動的プログラム更新システム及び方法に関し、特に、プログラムを動的に更新するための情報処理装置、ロードモジュール生成方法及びプログラム、並びに、動的プログラム更新システム及び方法に関する。
【背景技術】
【０００２】
特許文献１には、サービスの無中断が要求されるオンラインシステム等におけるプログラム更新方法に関する技術が開示されている。特許文献１にかかるプログラム更新方法では、まず、プログラム内の複数の関数のうち変更対象の関数のみ、変更後のコードを実装した関数モジュール（新ロードモジュール）を作成する。そして、当該プログラム更新方法では、新ロードモジュールをメモリへロードし、メモリ上のアドレスを決定する。その後、当該プログラム更新方法では、元のプログラムにおけるメモリ上の変更対象の関数の先頭アドレスに、新ロードモジュールの先頭アドレスへのジャンプ命令を書き込む。
【０００３】
特許文献２には、特許文献１におけるパッチ適用の度にメモリ使用量が増加する課題を解決するためになされた、プログラム動的更新システムに関する技術が開示されている。特許文献２にかかるシステムの管理サーバは、更新後関数と共に、更新後関数の相対アドレスを含めた更新情報ファイルを作成する。そして、組込み機器は、更新情報ファイルを読み込み、更新後関数のメモリ上のアドレスを決定し、更新前関数内の制御移行先に決定されたアドレスを書き込む。併せて、組込み機器は、当該更新前関数の先頭アドレスに当該制御移行先を宛先として参照する制御移行命令を書き込む。そのため、プログラムの実行時には、更新前関数の先頭アドレスにおいて、制御移行先のアドレスへの制御移行命令が処理され、更新前関数の内容が処理されずに、更新後関数の内容が処理される。
【０００４】
特許文献３には、共有ライブラリを参照する実行可能ファイルを管理する方法に関する技術が開示されている。特許文献３にかかる方法では、動的実行可能ファイルから参照する共有ライブラリを修正するために、参照ファイル（ＭＥＴＡ）とサービスファイルを作成する。ここで、参照ファイルは、共有ライブラリ内の修正対象の関数が動的実行可能ファイルから参照される際におけるリンク先の定義を数式で記述したものである。また、サービスファイルは、修正対象の関数の記述である。そして、当該方法では、動的実行可能ファイルの実行開始時に、参照ファイルをメモリにロードし、参照ファイル内の定義を優先して、動的実行可能ファイル内の各関数と参照ファイル内の関数定義とをリンクする。また、参照ファイル内に関数定義がない場合には、動的実行可能ファイル内の関数と共有ライブラリ内の関数とをリンクする。
【先行技術文献】
【特許文献】
【０００５】
【特許文献１】特開平１０−２４７１４３号公報
【特許文献２】特開２０１０−２１８３３４号公報
【特許文献３】特表２００４−５３０１８４号公報
【発明の概要】
【発明が解決しようとする課題】
【０００６】
ここで、特許文献３にかかる技術を実現するには、修正対象の関数のリンク先の定義を数式で記述した参照ファイルを読み込んだ際に、当該参照ファイル内の数式を解析して動的リンク編集処理を行う実装が必要となる。そのため、特許文献３には、既存の動的リンク編集処理に参照ファイルの解析処理を追加しなければならない。また、特許文献２にかかる技術は、更新情報ファイルの作成処理と、更新情報ファイルの解析処理との実装が必要であり、既存の処理系に更新情報ファイルの解析処理を追加しなければならない。そのため、特許文献２及び３にかかる技術では、プログラムを動的に更新するために既存の処理に追加が発生するため、導入に際して困難性があるという問題点がある。
【０００７】
本開示は、このような問題点を解決するためになされたものであり、プログラムを動的に更新する仕組みを容易に導入ができる情報処理装置、ロードモジュール生成方法及びプログラム、並びに、動的プログラム更新システム及び方法を提供することを目的とする。
【課題を解決するための手段】
【０００８】
本開示の第１の態様にかかる情報処理装置は、
対象システムで実行させるための複数の関数を含む実行形式のプログラムである対象モジュールの入力を受け付ける受付部と、
前記対象システムで実行中の前記対象モジュールに対してパッチ適用を行う際に前記複数の関数のいずれかを更新した更新後関数を含む更新後モジュールを当該対象システムのメモリにロードする組込みローダと、前記メモリ上における前記更新後関数に対応する第１のアドレスを保持するためのアドレス保持領域と、前記アドレス保持領域に保持された前記第１のアドレスを前記対象システムのレジスタに格納し、当該レジスタに格納された前記第１のアドレスに対して処理を移行させる本移行命令と、前記入力された対象モジュールと、を結合してロードモジュールを生成する生成部と、
を備え、
前記組込みローダは、
前記ロードされた前記更新後モジュール内の前記更新後関数の前記メモリ上の先頭アドレスを前記第１のアドレスとして前記アドレス保持領域に格納する処理を含み、
前記生成部は、
前記更新後関数に対応する前記対象モジュール内の更新対象関数の先頭アドレスから第２のアドレス分離れた位置に前記本移行命令を配置して、前記ロードモジュールを生成し、
前記第２のアドレスは、
前記パッチ適用時に前記メモリ上の前記更新対象関数の先頭アドレスに挿入される仮移行命令における処理の移行先を示す相対アドレスである。
【０００９】
本開示の第２の態様にかかるロードモジュール生成方法は、
対象システムで実行させるための複数の関数を含む実行形式のプログラムである対象モジュールの入力を受け付け、
前記対象システムで実行中の前記対象モジュールに対してパッチ適用を行う際に前記複数の関数のいずれかを更新した更新後関数を含む更新後モジュールを当該対象システムのメモリにロードする組込みローダと、前記メモリ上における前記更新後関数に対応する第１のアドレスを保持するためのアドレス保持領域と、前記アドレス保持領域に保持された前記第１のアドレスを前記対象システムのレジスタに格納し、当該レジスタに格納された前記第１のアドレスに対して処理を移行させる本移行命令と、前記入力された対象モジュールと、を結合してロードモジュールを生成し、
前記組込みローダは、
前記ロードされた前記更新後モジュール内の前記更新後関数の前記メモリ上の先頭アドレスを、前記アドレス保持領域に格納する処理を含み、
前記ロードモジュールを生成する際に、前記更新後関数に対応する前記対象モジュール内の更新対象関数の先頭アドレスから第２のアドレス分離れた位置に前記本移行命令を配置し、
前記第２のアドレスは、
前記パッチ適用時に前記メモリ上の前記更新対象関数の先頭アドレスに挿入される仮移行命令における処理の移行先を示す相対アドレスである。
【００１０】
本開示の第３の態様にかかるロードモジュール生成プログラムは、
対象システムで実行させるための複数の関数を含む実行形式のプログラムである対象モジュールの入力を受け付ける処理と、
前記対象システムで実行中の前記対象モジュールに対してパッチ適用を行う際に前記複数の関数のいずれかを更新した更新後関数を含む更新後モジュールを当該対象システムのメモリにロードする組込みローダと、前記メモリ上における前記更新後関数に対応する第１のアドレスを保持するためのアドレス保持領域と、前記アドレス保持領域に保持された前記第１のアドレスを前記対象システムのレジスタに格納し、当該レジスタに格納された前記第１のアドレスに対して処理を移行させる本移行命令と、前記入力された対象モジュールと、を結合してロードモジュールを生成する処理と、
をコンピュータに実行させ、
前記組込みローダは、
前記ロードされた前記更新後モジュール内の前記更新後関数の前記メモリ上の先頭アドレスを、前記アドレス保持領域に格納する処理を含み、
前記ロードモジュールを生成する処理は、前記更新後関数に対応する前記対象モジュール内の更新対象関数の先頭アドレスから第２のアドレス分離れた位置に前記本移行命令を配置し、
前記第２のアドレスは、
前記パッチ適用時に前記メモリ上の前記更新対象関数の先頭アドレスに挿入される仮移行命令における処理の移行先を示す相対アドレスである。
【００１１】
本開示の第４の態様にかかるプログラムは、
対象システムで実行させるための複数の関数を含む実行形式のプログラムである対象モジュールと、
前記対象システムで実行中の前記対象モジュールに対してパッチ適用を行う際に前記複数の関数のいずれかを更新した更新後関数を含む更新後モジュールを当該対象システムのメモリにロードする組込みローダと、
前記メモリ上における前記更新後関数に対応する第１のアドレスを保持するためのアドレス保持領域と、
前記アドレス保持領域に保持された前記第１のアドレスを前記対象システムのレジスタに格納し、当該レジスタに格納されたアドレスに対して処理を移行させる本移行命令と、
が結合され、
前記組込みローダは、
前記ロードされた前記更新後モジュール内の前記更新後関数の前記メモリ上の先頭アドレスを、前記アドレス保持領域に格納する処理を含み、
前記本移行命令は、
前記更新後関数に対応する前記対象モジュール内の更新対象関数の先頭アドレスから第２のアドレス分離れた位置に配置され、
前記第２のアドレスは、
前記パッチ適用時に前記メモリ上の前記更新対象関数の先頭アドレスに挿入される仮移行命令における処理の移行先を示す相対アドレスである。
【００１２】
本開示の第５の態様にかかる動的プログラム更新システムは、
情報処理装置と、対象システムと、を備え、
前記対象システムは、
複数の関数を含む実行形式のプログラムである対象モジュールと、前記対象システムで実行中の前記対象モジュールに対してパッチ適用を行う際に前記複数の関数のいずれかを更新した更新後関数を含む更新後モジュールを当該対象システムのメモリにロードする組込みローダと、前記メモリ上における前記更新後関数に対応する第１のアドレスを保持するためのアドレス保持領域と、前記アドレス保持領域に保持された前記第１のアドレスを前記対象システムのレジスタに格納し、当該レジスタに格納されたアドレスに対して処理を移行させる本移行命令と、が結合されたロードモジュールを前記メモリにロードし、
前記ロードモジュール内の前記対象モジュールを実行し、
前記本移行命令は、
前記ロードモジュール内で、前記更新後関数に対応する前記対象モジュール内の更新対象関数の先頭アドレスから第２のアドレス分離れた位置に配置されており、
前記情報処理装置は、
前記更新後モジュールの入力を受け付け、
前記第２のアドレスを移行先の相対アドレスとして処理を移行させる仮移行命令を生成し、
前記パッチ適用の要求を発生させるために、前記対象モジュールが実行中である前記対象システムに対して、前記更新後モジュール及び前記仮移行命令を転送し、
前記メモリにロードされた前記組込みローダは、
前記対象システムが前記更新後モジュール及び前記仮移行命令を受信後に、前記パッチ適用の要求を検出し、
前記受信した更新後モジュールが前記ロードされた際の前記更新後関数の前記メモリ上の先頭アドレスを前記第１のアドレスとして前記アドレス保持領域に格納し、
前記対象システムは、
前記仮移行命令を、前記メモリ上の前記更新対象関数の先頭アドレスに挿入する。
【００１３】
本開示の第６の態様にかかる動的プログラム更新方法は、
対象システムにおいて、
複数の関数を含む実行形式のプログラムである対象モジュールと、前記対象システムで実行中の前記対象モジュールに対してパッチ適用を行う際に前記複数の関数のいずれかを更新した更新後関数を含む更新後モジュールを当該対象システムのメモリにロードする組込みローダと、前記メモリ上における前記更新後関数に対応する第１のアドレスを保持するためのアドレス保持領域と、前記アドレス保持領域に保持された前記第１のアドレスを前記対象システムのレジスタに格納し、当該レジスタに格納されたアドレスに対して処理を移行させる本移行命令と、が結合されたロードモジュールを前記メモリにロードし、
前記ロードモジュール内の前記対象モジュールを実行し、
前記本移行命令は、
前記ロードモジュール内で、前記更新後関数に対応する前記対象モジュール内の更新対象関数の先頭アドレスから第２のアドレス分離れた位置に配置されており、
情報処理装置において、
前記更新後モジュールの入力を受け付け、
前記第２のアドレスを移行先の相対アドレスとして処理を移行させる仮移行命令を生成し、
前記パッチ適用の要求を発生させるために、前記対象モジュールが実行中である前記対象システムに対して、前記更新後モジュール及び前記仮移行命令を転送し、
前記メモリにロードされた前記組込みローダにおいて、
前記対象システムが前記更新後モジュール及び前記仮移行命令を受信後に、前記パッチ適用の要求を検出し、
前記受信した更新後モジュールが前記ロードされた際の前記更新後関数の前記メモリ上の先頭アドレスを前記第１のアドレスとして前記アドレス保持領域に格納し、
前記対象システムにおいて、
前記仮移行命令を、前記メモリ上の前記更新対象関数の先頭アドレスに挿入する。
【００１４】
本開示の第７の態様にかかる情報処理装置は、
複数の関数を含む実行形式のプログラムである対象モジュールと、組込みローダと、アドレス保持領域と、本移行命令と、が結合されたロードモジュールを記憶するメモリと、
前記メモリに記憶された前記対象モジュールを実行するプロセッサと、
を備え、
前記組込みローダは、
前記プロセッサが実行中の前記対象モジュールに対してパッチ適用を行う際に前記複数の関数のいずれかを更新した更新後関数を含む更新後モジュールを前記メモリにロードし、
前記アドレス保持領域は、
前記メモリ上における前記更新後関数に対応する第１のアドレスを保持するための領域であり、
前記本移行命令は、
前記アドレス保持領域に保持された前記第１のアドレスを前記プロセッサのレジスタに格納し、当該レジスタに格納されたアドレスに対して処理を移行させる命令であり、
前記組込みローダは、
前記ロードされた前記更新後モジュール内の前記更新後関数の前記メモリ上の先頭アドレスを、前記アドレス保持領域に格納する処理を含み、
前記本移行命令は、
前記更新後関数に対応する前記対象モジュール内の更新対象関数の先頭アドレスから第２のアドレス分離れた位置に配置され、
前記第２のアドレスは、
前記パッチ適用時に前記メモリ上の前記更新対象関数の先頭アドレスに挿入される仮移行命令における処理の移行先を示す相対アドレスである。
【００１５】
本開示の第８の態様にかかる動的プログラム更新方法は、
複数の関数を含む実行形式のプログラムである対象モジュールと、組込みローダと、アドレス保持領域と、本移行命令と、が結合されたロードモジュールを前記情報処理装置のメモリにロードし、
前記ロードモジュール内の前記対象モジュールを実行し、
前記メモリにロードされた前記組込みローダが、
前記複数の関数のいずれかを更新した更新後関数を含む更新後モジュールと仮移行命令とを受信後に、前記対象モジュールに対する当該更新後モジュールのパッチ適用の要求を検出し、
前記受信した更新後モジュールを前記メモリにロードし、
前記更新後関数の前記メモリ上の先頭アドレスを第１のアドレスとして前記アドレス保持領域に格納し、
前記プロセッサが、
前記仮移行命令を、前記メモリ上の前記更新後関数に対応する前記対象モジュール内の更新対象関数の先頭アドレスに挿入し、
前記本移行命令は、
前記アドレス保持領域に保持された前記第１のアドレスを前記プロセッサのレジスタに格納し、当該レジスタに格納されたアドレスに対して処理を移行させる命令であり、
前記ロードモジュール内で、前記更新対象関数の先頭アドレスから第２のアドレス分離れた位置に配置されており、
前記仮移行命令は、
前記第２のアドレスを移行先の相対アドレスとして処理を移行させる命令である。
【発明の効果】
【００１６】
本開示により、プログラムを動的に更新する仕組みを容易に導入ができる情報処理装置、ロードモジュール生成方法及びプログラム、並びに、動的プログラム更新システム及び方法を提供することができる。
【図面の簡単な説明】
【００１７】
【図１】本実施の形態１にかかる情報処理装置の構成を示すブロック図である。
【図２】本実施の形態１にかかるロードモジュール生成方法の流れを説明するためのフローチャートである。
【図３】本実施の形態２にかかる動的プログラム更新システムの構成を示すブロック図である。
【図４】本実施の形態２にかかる初回ロードモジュールの生成から実行までの流れを説明するためのシーケンス図である。
【図５】本実施の形態２にかかる初回ロードモジュールの生成処理の流れを説明するためのフローチャートである。
【図６】本実施の形態２にかかるロードモジュールの生成及び内訳の概念を説明する図である。
【図７】本実施の形態２にかかるパッチの生成から適用までの流れを説明するためのシーケンス図である。
【図８】本実施の形態２にかかるパッチ生成処理の流れを説明するためのフローチャートである。
【図９】本実施の形態２にかかるパッチの生成及び内訳の概念を説明する図である。
【図１０】本実施の形態２にかかる組込みローダにおけるパッチ適用処理の流れを説明するためのフローチャートである。
【図１１】本実施の形態２にかかるパッチ適用時のメモリ内容の概念を説明する図である。
【図１２】本実施の形態３にかかる動的プログラム更新システムの構成を示すブロック図である。
【図１３】本実施の形態３にかかるパッチ適用済みロードモジュールの生成から実行までの流れを説明するためのシーケンス図である。
【図１４】本実施の形態３にかかるパッチ生成処理及びパッチ適用済みロードモジュール生成処理の流れを説明するためのフローチャートである。
【図１５】本実施の形態４にかかる情報処理装置３の構成を示すブロック図である。
【図１６】本実施の形態４にかかる動的プログラム更新方法の流れを説明するためのフローチャートである。
【発明を実施するための形態】
【００１８】
以下では、本開示の実施の形態について、図面を参照しながら詳細に説明する。各図面において、同一又は対応する要素には同一の符号が付されており、説明の明確化のため、必要に応じて重複説明は省略される。
【００１９】
＜実施の形態１＞
図１は、本実施の形態１にかかる情報処理装置１の構成を示すブロック図である。情報処理装置１は、対象システム（不図示）で実行させるための複数の関数を含む実行形式のプログラムである対象モジュール１３１を含めたロードモジュール１３を生成するコンピュータシステムである。そのため、情報処理装置１は、ロードモジュール生成装置と呼ぶこともできる。そして、情報処理装置１は、複数台のコンピュータにより実現したものであってもよい。尚、対象システムは、プロセッサとメモリ等を備えたコンピュータサーバ又は組込み機器等の情報処理装置であればよい。
【００２０】
情報処理装置１は、受付部１１と、生成部１２とを備える。受付部１１は、対象モジュール１３１の入力を受け付ける。ここで、対象モジュール１３１は、ソースファイルからコンパイル等された機械語のオブジェクトファイルである。また、ソースファイルは、対象システム上で実行されるソフトウェアの処理が実装されたコンピュータプログラムである。尚、対象システム上で実行されるソフトウェアは、ＯＳ（Ｏｐｅｒａｔｉｎｇ  Ｓｙｓｔｅｍ）、ミドルウェア、アプリケーション、ドライバ、各種制御プログラム等であればよい。ソースファイルは、複数の関数が含まれ、例えば、Ｃ言語等の手続型言語で記述されたものであるが、これに限定されない。また、ソースファイルは、任意の数の関数の単位で記述された複数のファイルの集合であってもよい。そのため、対象モジュール１３１は、複数のオブジェクトファイルの集合であってもよい。また、情報処理装置１は、ユーザの操作に応じてソースファイルの作成処理や、コンパイル等を行って対象モジュール１３１を生成するものであっても良い。
【００２１】
また、対象モジュール１３１は、情報処理装置１の内部又は外部の記憶装置（不図示）に格納されたものである。よって、受付部１１は、ユーザの指示等に基づき、当該記憶装置から対象モジュール１３１を読み出すことで、入力として受け付けるものとする。
【００２２】
生成部１２は、後述する組込みローダ１３２と、アドレス保持領域１３３と、本移行命令１３４と、入力された対象モジュール１３１と、を結合してロードモジュール１３を生成する。ここで、組込みローダ１３２は、対象システムで既に実行中の対象モジュールに対してパッチ適用を行う際に、前記複数の関数のいずれかを更新した更新後関数を含む更新後モジュールを当該対象システムのメモリにロードするプログラムモジュールである。つまり、「対象システムで既に実行中の対象モジュール」は、対象モジュール１３１よりも前のバージョンのモジュールとなる。そのため、組込みローダ１３２は、対象モジュール１３１と同様に、プログラム言語で実装された関数等のオブジェクトファイルである。尚、更新後関数は、対象モジュール１３１に含まれる複数の関数のいずれかを更新した関数プログラムである。更新後関数は、例えば、既存の関数のバグの修正や仕様変更をしたプログラムモジュールである。そして、更新後関数は、対象モジュール１３１へのパッチ適用時に、対象システムに対して提供されるものである。更新後関数は、例えば、動的リンクライブラリとして提供されてもよい。また、動的リンクライブラリには、複数の更新後関数が含まれていても良い。
【００２３】
また、アドレス保持領域１３３は、対象システムのメモリ上における更新後関数に対応する第１のアドレスを保持するための記憶領域である。また、アドレス保持領域１３３は、対象モジュール１３１に含まれる複数の関数のそれぞれに対応する複数の記憶領域を定義した情報である。ここで、アドレス保持領域１３３は、複数のアドレス値をデータとして保持するための複数の記憶領域が定義されたプログラムモジュールである。また、アドレス保持領域１３３は、例えば、所定サイズの配列や、複数の変数を定義した構造体等であり、対象モジュール１３１と同様のプログラム言語で実装された関数、構造体等のオブジェクトファイルである。
【００２４】
本移行命令１３４は、アドレス保持領域１３３に保持された第１のアドレスを対象システムのレジスタに格納し、当該レジスタに格納された第１のアドレスに対して処理を移行させる処理が実装されたプログラムモジュールである。また、本移行命令１３４は、対象モジュール１３１に含まれる複数の関数のそれぞれに対応する複数の命令群の集合である。そして、本移行命令１３４は、命令群ごとに、例えば、次の第１の命令と第２の命令とを少なくとも含むものである。ここで、第１の命令は、アドレス保持領域１３３のうち、指定された関数に対応する記憶領域のアドレス値を上記レジスタに格納させる命令である。また、第２の命令は、第１の命令により格納されたレジスタ値を、処理の移行先として指定した移行命令である。例えば、第２の命令は、レジスタ間接アドレッシング方式を利用したジャンプ命令である。よって、本移行命令１３４は、対象モジュール１３１と同様のプログラム言語で実装された、第１の命令と第２の命令とを少なくとも含む関数等のオブジェクトファイルである。
【００２５】
ここで、上述した組込みローダ１３２は、さらに次の第１の処理を含めて実装されたものである。第１の処理は、（対象システム上で対象モジュール１３１が実行中において対象システムの）メモリにロードされた更新後モジュール内の更新後関数のメモリ上の先頭アドレスを第１のアドレスとしてアドレス保持領域１３３に格納する処理である。このとき、アドレス保持領域１３３内で、更新後関数に対応する対象モジュール内の更新対象関数に対応する記憶領域に当該第１のアドレスが格納される。
【００２６】
また、生成部１２は、更新後関数に対応する対象モジュール内の更新対象関数の先頭アドレスから第２のアドレス分離れた位置に本移行命令１３４を配置して、ロードモジュール１３を生成する。ここで、第２のアドレスは、仮移行命令における処理の移行先を示す相対アドレスである。そして、仮移行命令は、パッチ適用時に対象システムのメモリ上の更新対象関数の先頭アドレスに挿入される命令である。つまり、仮移行命令は、更新後関数又は更新対象関数に対応する本移行命令１３４へ処理を移行させる命令であり、１命令で実現されたものである。例えば、仮移行命令は、対応する本移行命令１３４の相対アドレスを宛先として指定したジャンプ命令である。
【００２７】
図２は、本実施の形態１にかかるロードモジュール生成方法の流れを説明するためのフローチャートである。まず、受付部１１は、対象システムで実行させるための複数の関数を含む実行形式のプログラムである対象モジュール１３１の入力を受け付ける（Ｓ１１）。次に、生成部１２は、組込みローダ１３２と、アドレス保持領域１３３と、本移行命令１３４と、対象モジュール１３１を結合してロードモジュール１３を生成する（Ｓ１２）。
【００２８】
この後、生成されたロードモジュール１３が対象システム内のメモリにロードされて、対象システムのプロセッサがロードモジュール１３内の対象モジュール１３１を実行することで、アプリケーションとして機能する。そして、対象モジュール１３１の実行中に、複数の関数のいずれかを更新した更新後関数を含む更新後モジュールについてのパッチ適用の要求が発生したものとする。この場合、対象システムのメモリにロード済みの組込みローダ１３２は、パッチ適用要求を検出し、適宜、更新後モジュールをメモリにロードする。そして、組込みローダ１３２は、その際に確定するメモリ上の更新後関数の先頭アドレスを、同じくメモリにロード済みのアドレス保持領域１３３内の更新後関数に対応する記憶領域に格納する。続いて、対象システムは、更新後関数に対応する対象モジュール１３１内の更新対象関数の先頭アドレスに、仮移行命令を挿入する。ここで、挿入される仮移行命令は、上述した通り、更新後関数又は更新対象関数に対応する本移行命令１３４へ処理を移行させる命令である。これらにより、パッチ適用がされたことになる。
【００２９】
そのため、以後、対象モジュール１３１の実行中に、更新後関数に対応する更新対象関数が呼び出された場合には、先頭アドレスの仮移行命令が実行されて、本移行命令へ遷移する。そして、本移行命令の実行により、更新後関数又は更新対象関数に対応するアドレス保持領域１３３内の記憶領域に格納された絶対アドレスがレジスタに格納され、当該レジスタの格納値を宛先とした移行命令が実行され、更新後関数へ遷移し、更新後関数の処理が実行される。このようにして、パッチ適用後の処理が実現される。
【００３０】
以上のことから、本実施の形態により、対象システムの稼働の停止や再起動を必要とせずに、対象システムで実行中のソフトウェアの更新を行うことができる。このとき、ソフトウェアの更新を、必要最小限の関数に対するパッチ適用により実現するため、変更対象外の関数への影響を最小限に防ぎ、テスト工数を抑制することができる。
【００３１】
特に、上述した特許文献３では、更新対象の関数ごとのリンク先のロジックを記述した参照ファイルの作成が煩雑である。また、当該参照ファイルには汎用性がない。これに対して本実施の形態では、対象モジュールごとに、本移行命令、仮移行命令及びアドレス保持領域のロードモジュール内の配置が確定し、組込みローダ１３２の処理内容は、異なるロードモジュールの間で共通である。よって、パッチデータの作成コストを低減することができる。
【００３２】
そして、本実施の形態では、実行対象のソフトウェアである対象モジュール１３１に、組込みローダ１３２、アドレス保持領域１３３及び本移行命令１３４を結合して１つのロードモジュール１３として提供するものである。そのため、対象モジュール１３１をロード及び実行する際に、同一のロードモジュール１３内の組込みローダ１３２等も併せてメモリ上にロードされる。よって、対象モジュール１３１の実行中にパッチ適用要求が発生した場合に、組込みローダ１３２がパッチ適用要求を検出可能となる。そして、組込みローダ１３２が動的に、更新後関数のロード、更新後関数のメモリ上の絶対アドレスの設定を行うことができる。そして、更新後関数に対応する（同一のロードモジュール１３内でロード済の）本移行命令への仮移行命令が更新前の関数の先頭アドレスに挿入されることで、上述した通り、更新前の関数が呼び出された際に、更新後関数へ処理を移行させることができる。
【００３３】
通常、動的なパッチ適用処理を行う場合には、対象のロードモジュールを処理するＯＳ等の既存の処理系により、更新後関数の動的リンク処理等を行う必要がある。一方、本実施の形態では、対象のロードモジュール内の組込みローダ１３２等により動的なパッチ適用処理を実現できる。よって、既存の処理系に対する追加が不要である。そのため、プログラムを動的に更新する仕組みを容易に導入ができる。
【００３４】
＜実施の形態２＞
本実施の形態２は、上述した実施の形態１を具体化かつ改良したものである。
ここで、本実施の形態が解決しようとする課題として、上述した課題に加えて他の側面について説明する。上述した特許文献２にかかる技術は、動的なパッチ適用処理において、更新前関数内の制御移行先に、更新後関数の先頭アドレスを書き込む。併せて、更新前関数の先頭アドレスに、上記制御移行先のアドレス値を宛先とした制御移行命令（ジャンプ命令）を書き込むものである。このように、特許文献２では、直接アドレッシング方式又はメモリ間接アドレッシング方式によるジャンプ命令を、更新前関数の先頭アドレスに挿入するものである。ここで、直接アドレッシング又はメモリ間接アドレッシングにより指定可能なアドレスサイズは、プロセッサのアーキテクチャの制約を受ける。例えば、指定可能なアドレスサイズの上限が１２８ＭＢである場合がある。一方、パッチ対象の更新後関数を動的リンク処理によりメモリにロードする場合、通常、メモリの最後の領域から割り当てられる。よって、更新後関数のメモリ上の絶対アドレスは、対応する更新前関数の先頭アドレスから１２８ＭＢ以上離れている可能性が高い。そのため、特許文献２にかかる技術は、プロセッサの種類によっては適用できない場合があり、プロセッサのアーキテクチャの制約に依存するという問題点がある。
【００３５】
そこで、更新前関数の先頭アドレスに、レジスタ間接アドレッシング方式によるジャンプ命令を挿入することが考えられる。しかしながら、レジスタ間接アドレッシング方式によるジャンプ命令を実現するには、上述した本移行命令のように、少なくとも第１の命令と第２の命令とを挿入する必要がある。ここで、第１の命令は、ジャンプ先の実アドレスをレジスタに格納させる命令であり、第２の命令は、当該レジスタの格納値をジャンプ先として指定したジャンプ命令である。つまり、更新前関数の先頭アドレスに複数命令を挿入する（書き込む）必要がある。但し、更新前関数の先頭箇所に複数命令を書き込むには、複数のクロックを要し、処理に時間がかかってしまう。そのため、当該複数命令の書き込みを実行している最中に、マルチスレッド処理等で他のスレッドの影響を受けるか、他のスレッドに影響を与える可能性がある。よって、無中断でソフトウェアを更新するための動的なパッチ適用処理としてはリスクが大きく、更新前関数の先頭箇所に複数命令を書き込むことは採用できない。
【００３６】
そのため、本実施の形態では、更新前関数から更新後関数へのジャンプ命令を２段階にしている。すなわち、１回目のジャンプ命令（仮移行命令）では、（本移行命令の）相対アドレスへの１命令によるジャンプとし、更新対象関数の先頭アドレスのみの書換えで他のスレッドへの影響をなくしている。そして、１回目のジャンプ先において、レジスタ間接アドレッシングによるジャンプ処理（本移行命令）を実行するものである。このとき、更新対象関数の先頭アドレスから、当該関数に対応する本移行命令の先頭アドレスまでのアドレス間の距離（アドレスサイズ）は、プロセッサのアーキテクチャの制約の範囲内、例えば、１２８ＭＢ以内とするものである。
【００３７】
すなわち、本実施の形態にかかる前記第２のアドレスのサイズは、前記対象システムのプロセッサのアドレッシングサイズの上限以内である。これにより、プロセッサのアーキテクチャの制約に依存せず、動的なパッチ適用処理が実現可能となる。
【００３８】
また、前記受付部は、前記更新後モジュールの入力をさらに受け付け、前記生成部は、前記第２のアドレスに対して処理を移行させる前記仮移行命令を生成するとよい。この場合、前記情報処理装置は、前記パッチ適用の要求を発生させるために、前記対象モジュールが実行中である前記対象システムに対して、前記更新後モジュール及び前記仮移行命令を転送する転送部をさらに備える。これにより、メモリに対象モジュールがロードされて実行中の対象システムに対して、動的にパッチ適用するためのパッチ及び仮移行命令を提供することができる。
【００３９】
さらに、組込みローダは、パッチ適用の要求の検出時に、転送された更新後モジュールをメモリへロードする処理と、更新後関数の先頭アドレスであるメモリ上の絶対アドレスを取得する処理と、取得した絶対アドレスを第１のアドレスとしてアドレス保持領域に格納する処理と、を含むとよい。これにより、組込みローダの処理を効率化できる。
【００４０】
また、前記生成部は、前記更新後関数と前記仮移行命令との対応付けを定義したパッチリストをさらに生成し、前記転送部は、前記更新後モジュール及び前記仮移行命令と共に前記パッチリストを転送するとよい。そして、前記組込みローダは、前記パッチ適用の要求の検出時に、前記転送されたパッチリストに基づいて前記更新後モジュールの前記メモリへのロードを開始するとよい。これにより、メモリに対象モジュールがロードされて実行中の対象システムに対して、当該パッチリストに基づき対象モジュールに当該パッチ及び仮移行命令を確実に適用させることができる。
【００４１】
図３は、本実施の形態２にかかる動的プログラム更新システム１０００の構成を示すブロック図である。動的プログラム更新システム１０００は、ロードモジュール生成装置１００と対象システム２００とがネットワークＮを介して接続されている。ここで、ネットワークＮは、有線又は無線の通信回線等の通信ネットワークである。ネットワークＮは、単に有線の通信ケーブルであってもよい。
【００４２】
ロードモジュール生成装置１００は、上述した情報処理装置１の一例である。ロードモジュール生成装置１００は、記憶装置１１０と、プロセッサ１２０と、メモリ１３０と、通信部１４０とを備える。記憶装置１１０は、ハードディスク又はフラッシュメモリ等の不揮発性記憶装置である。記憶装置１１０は、オブジェクトモジュール１１１と、組込みローダ１１２と、本移行命令群１１３と、アドレス保持領域群１１４と、ロードモジュール生成プログラム１１５と、ロードモジュール１１６とを記憶する。オブジェクトモジュール１１１は、上述した対象モジュール１３１の一例である。また、オブジェクトモジュール１１１は、複数の関数に対応する複数のオブジェクトファイルの集合であってもよい。
【００４３】
組込みローダ１１２は、上述した組込みローダ１３２の一例である。まず、組込みローダ１１２は、ＯＳその他のプログラムにより発生されるパッチ適用要求のイベントを監視する。組込みローダ１１２は、上述した第１の処理として以下の処理を含むものである。第１の処理は、まず、パッチ適用要求の検出時に、転送部１２３により対象システム２００へ転送された更新後モジュールを（対象システム２００の）メモリ２３０へロードする処理を含む。さらに、第１の処理は、更新後関数の先頭アドレスであるメモリ２３０上の絶対アドレスを取得する処理を含む。さらに、第１の処理は、取得した絶対アドレスを第１のアドレスとしてアドレス保持領域に格納する処理を含む。さらに、組込みローダ１１２は、対象システム２００におけるパッチ適用要求の検出時に、転送部１２３により対象システム２００へ転送されたパッチリストに基づいてパッチ適用を行う。
【００４４】
本移行命令群１１３は、オブジェクトモジュール１１１に含まれる複数の関数のそれぞれに対応する、複数のJUMP関数（本移行命令）をテーブルとして定義したプログラムモジュールである。本移行命令群１１３内の各本移行命令は、上述した本移行命令１３４の一例である。尚、本移行命令群１１３は、JUMP関数テーブルと呼ぶこともできる。
【００４５】
アドレス保持領域群１１４は、オブジェクトモジュール１１１に含まれる複数の関数のそれぞれに対応する、複数の記憶領域（アドレス保持領域）をテーブルとして定義したプログラムモジュールである。アドレス保持領域群１１４内の各アドレス保持領域は、上述したアドレス保持領域１３３の一例である。尚、アドレス保持領域群１１４は、間接JUMPテーブルと呼ぶこともできる。
【００４６】
ロードモジュール生成プログラム１１５は、本実施の形態にかかるパッチ生成処理及びパッチ転送処理が実装されたコンピュータプログラムである。
【００４７】
ロードモジュール１１６は、上述したロードモジュール１３の一例であり、後述する生成部１２２によりオブジェクトモジュール１１１と、組込みローダ１１２と、本移行命令群１１３と、アドレス保持領域群１１４とが結合されたモジュールである。
【００４８】
メモリ１３０は、ＲＡＭ（Ｒａｎｄｏｍ  Ａｃｃｅｓｓ  Ｍｅｍｏｒｙ）等の揮発性記憶装置である。通信部１４０は、ネットワークＮを介してロードモジュール生成装置１００と、対象システム２００を含む外部との通信を行うインタフェースである。例えば、通信部１４０は、プロセッサ１２０からの指示に応じて、ネットワークＮを介して対象システム２００に対して、ロードモジュール、パッチデータ等の送信を行う。また、通信部１４０は、ネットワークＮを介して対象システム２００から受信した各種データをプロセッサ１２０へ出力する。
【００４９】
プロセッサ１２０は、ＣＰＵ（Ｃｅｎｔｒａｌ  Ｐｒｏｃｅｓｓｉｎｇ  Ｕｎｉｔ）、ＭＰＵ（Ｍｉｃｒｏ  Ｐｒｏｃｅｓｓｉｎｇ  Ｕｎｉｔ）等の制御装置である。プロセッサ１２０は、記憶装置１１０からロードモジュール生成プログラム１１５をメモリ１３０へロードして、実行する。これにより、プロセッサ１２０は、受付部１２１、生成部１２２及び転送部１２３の機能を実現する。
【００５０】
受付部１２１は、上述した受付部１１の一例であり、さらに、オブジェクトモジュール１１１内の複数の関数のいずれかを更新した更新後関数を含むプログラムモジュール（更新後モジュール）を受け付ける。尚、更新後モジュールは、２以上の関数が１つのオブジェクトモジュールに含まれていても良く、複数のオブジェクトモジュールであってもよい。
【００５１】
尚、ロードモジュール生成装置１００は、ユーザの操作に応じて、オブジェクトモジュール１１１のソースファイルのうち更新対象の関数の修正したソースファイルを作成してもよい。さらに、ロードモジュール生成装置１００は、当該ソースファイルのコンパイル等を行って、更新後関数のオブジェクトモジュールを生成してもよい。
【００５２】
生成部１２２は、上述した生成部１２の一例である。特に、生成部１２２は、オブジェクトモジュール１１１内の更新対象関数の先頭アドレスから対象システム２００のプロセッサ２２０のアドレッシングサイズの上限以内である第２のアドレス分の位置に本移行命令群１１３を配置して、ロードモジュールを生成する。また、生成部１２２は、第２アドレスに対して処理を移行させるジャンプパッチ（仮移行命令）を生成する。ここで、仮移行命令は、オブジェクトモジュール１１１内の複数の関数のそれぞれに対応するジャンプ命令の集合である。仮移行命令の各ジャンプ命令は、１命令により指定された相対アドレス（第２のアドレス）への処理の移行を行う。また、生成部１２２は、更新後関数と仮移行命令との対応付けを定義したパッチリストを生成する。尚、更新後関数は、更新前関数と関数名が同一であるため、パッチリストは、更新前関数と仮移行命令との対応付け、又は、更新対象の関数と仮移行命令との対応付けと同義である。
【００５３】
転送部１２３は、パッチ適用要求を発生させるために、ロードモジュール２１２内の対象モジュールが実行中である対象システム２００に対して、更新後モジュール及び仮移行命令を転送メッセージに含めて転送する。ここで、「パッチ適用要求を発生させるために」とは、例えば、転送メッセージにパッチ適用要求の発生の指示を含めても良い。または、「パッチ適用要求を発生させるために」とは、転送メッセージに伴い、対象システム２００における既存の処理系によりパッチ適用要求が発生するものであってもよい。さらに、転送部１２３は、更新後モジュール及び仮移行命令と共にパッチリストを転送する。
【００５４】
対象システム２００は、コンピュータサーバ、組込み機器等の情報処理装置である。対象システム２００は、記憶装置２１０と、プロセッサ２２０と、メモリ２３０と、通信部２４０とを備える。記憶装置２１０は、ハードディスク又はフラッシュメモリ等の不揮発性記憶装置である。記憶装置２１０は、ＯＳ２１１と、ロードモジュール２１２とを記憶する。ＯＳ２１１は、動的リンク処理等が実装された公知の処理系の一例である。ロードモジュール２１２は、上述したロードモジュール１３の一例であり、ロードモジュール生成装置１００により生成されたパッチ適用前の（初回）ロードモジュールである。
【００５５】
メモリ２３０は、ＲＡＭ等の揮発性記憶装置である。通信部２４０は、ネットワークＮを介して対象システム２００と、ロードモジュール生成装置１００を含む外部との通信を行うインタフェースである。例えば、通信部２４０は、ネットワークＮを介してロードモジュール生成装置１００から受信したロードモジュール、パッチデータ等をプロセッサ２２０へ出力する。また、通信部２４０は、プロセッサ２２０からの指示に応じて、ネットワークＮを介してロードモジュール生成装置１００に対して、各種データの送信を行う。
【００５６】
プロセッサ２２０は、ＣＰＵ、ＭＰＵ等の制御装置である。プロセッサ２２０は、記憶装置２１０からＯＳ２１１及びロードモジュール２１２をメモリ２３０へロードして、実行する。これにより、プロセッサ２２０は、モジュール処理部２２１、対象アプリ２２２及び組込みローダ２２３の機能を実現する。
【００５７】
モジュール処理部２２１は、ＯＳ２１１により実現される処理系であり、通信部２４０を介した通信処理、ロードモジュール２１２のメモリ２３０へのロード等を制御する。また、モジュール処理部２２１は、転送部１２３により対象システム２００へ転送された仮移行命令を、更新後関数に対応する対象モジュール内の更新対象関数の先頭アドレスに挿入する処理を含む。対象アプリ２２２は、ロードモジュール２１２内のオブジェクトモジュール１１１により実現されるアプリケーションである。組込みローダ２２３は、ロードモジュール２１２内の組込みローダ１１２により実現される。
【００５８】
図４は、本実施の形態２にかかる初回ロードモジュールの生成から実行までの流れを説明するためのシーケンス図である。ここでは、対象システム２００に対象モジュールがインストールされていない場合を例に挙げて説明し、その際に、ロードされるモジュールを初回ロードモジュールと呼ぶものとする。但し、本実施の形態は、初回以外のロードにおけるモジュールを生成する場合に適用できるのはもちろんである。
【００５９】
まず、ロードモジュール生成装置１００は、初回ロードモジュールを生成する（Ｓ１０１）。図５は、本実施の形態２にかかる初回ロードモジュールの生成処理の流れを説明するためのフローチャートである。まず、ロードモジュール生成装置１００は、オブジェクトモジュール１１１を生成する（Ｓ１１１）。例えば、受付部１２１は、ユーザの操作に応じて、対象システム２００で実行するためのアプリケーションに対応するプログラムコードの入力を受け付けて、生成部１２２は、ソースファイルを生成する。そして、生成部１２２は、生成したソースファイルをコンパイル等して、オブジェクトモジュール１１１を生成し、記憶装置１１０に格納する。尚、オブジェクトモジュール１１１は、ロードモジュール生成装置１００の外部で生成され、受付部１２１が外部からオブジェクトモジュール１１１の入力を受け付けても良い。また、記憶装置１１０には、予め組込みローダ１１２、本移行命令群１１３、アドレス保持領域群１１４が格納されているものとする。但し、組込みローダ１１２等は、ロードモジュール生成装置１００の外部で生成され、受付部１２１が外部から組込みローダ１１２等の入力を受け付けても良い。
【００６０】
次に、ロードモジュール生成装置１００は、ロードモジュールを生成する（Ｓ１１２）。具体的には、まず、受付部１２１は、記憶装置１１０からオブジェクトモジュール１１１、組込みローダ１１２、本移行命令群１１３及びアドレス保持領域群１１４を読み出す。そして、生成部１２２は、オブジェクトモジュール１１１、組込みローダ１１２、本移行命令群１１３及びアドレス保持領域群１１４を結合してロードモジュールを生成する。このとき、生成部１２２は、オブジェクトモジュール１１１に含まれる複数の関数のそれぞれと対応する、本移行命令群１１３内の各本移行命令を特定する。そして、生成部１２２は、各関数と対応する本移行命令とのアドレス上の距離（相対アドレス）がプロセッサ２２０のアドレッシングサイズの上限以内となるように、ロードモジュール内に本移行命令群１１３を配置する。そして、ロードモジュール生成装置１００は、生成したロードモジュール１１６を記憶装置１１０に出力、つまり格納する（Ｓ１１３）。ここで、生成されたロードモジュール１１６を初回ロードモジュール（ＬＭ）と呼ぶものとする。
【００６１】
図４に戻り説明を続ける。ロードモジュール生成装置１００は、初回ロードモジュールを対象システム２００へ転送する（Ｓ１０２）。具体的には、転送部１２３は、記憶装置１１０から初回ロードモジュールを読み出し、通信部１４０を用いてネットワークＮを介して初回ロードモジュールを対象システム２００へ転送する。
【００６２】
対象システム２００は、ネットワークＮを介して初回ロードモジュールを受信し、記憶装置２１０にロードモジュール２１２として保存する。その後、対象システム２００は、初回ロードモジュールをメモリ２３０にロードする（Ｓ１０３）。例えば、モジュール処理部２２１は、ロードモジュール生成装置１００からの初回ロードモジュールの起動指示、又は、ユーザからの指示に応じてロードを行っても良い。または、モジュール処理部２２１は、初回ロードモジュールの受信に応じてロードを行っても良い。このとき、モジュール処理部２２１は、記憶装置２１０からロードモジュール２１２を読み出し、メモリ２３０へロードする。そして、対象システム２００は、初回ロードモジュールを実行する（Ｓ１０４）。具体的には、モジュール処理部２２１は、メモリ２３０内のロードモジュール２１２のうちオブジェクトモジュール１１１内のメイン関数の実行を開始する。そのため、プロセッサ２２０は、対象アプリ２２２として機能する。このようにして、初回ロードモジュールがロードモジュール生成装置１００において生成され、対象システム２００において実行される。併せて、プロセッサ２２０は、組込みローダ２２３を実行する。これにより、組込みローダ２２３は、パッチ適用要求のイベントの監視を開始する。
【００６３】
図６は、本実施の形態２にかかるロードモジュールの生成及び内訳の概念を説明する図である。まず、オブジェクトモジュール１１１ａ、１１１ｂ及び１１１ｃは、オブジェクトモジュール１１１内の３つの関数のそれぞれに対応し、例えば、ステップＳ１１１で生成されたオブジェクトファイルの一例である。また、ＬＭ生成ツール１２２１は、生成部１２２の一例である。ＬＭ生成ツール１２２１には、オブジェクトモジュール１１１ａから１１１ｃ、組込みローダ１１２、本移行命令群１１３及びアドレス保持領域群１１４が入力される。そして、ＬＭ生成ツール１２２１は、これらを上述したように結合して、ロードモジュール１１６として出力する。
【００６４】
ここで、ロードモジュール１１６は、例えば、オブジェクトモジュール１１１ａから１１１ｃに相当する“aaa.o”、“bbb.o”、“ccc.o”の順に配置されている。そして、“aaa.o”には、複数の関数“func_a1”、“func_a2”、“func_a3”が含まれ、この順で配置されていることを示す。また、ロードモジュール１１６は、オブジェクトモジュール１１１ａ等より後に組込みローダ１１２、本移行命令群１１３及びアドレス保持領域群１１４が配置されている。ここで、本移行命令群１１３内には、本移行命令１１３ａから１１３ｃが含まれ、アドレス保持領域群１１４には、アドレス保持領域１１４ａから１１４ｃが含まれる。そして、関数“func_a1”と本移行命令１１３ａとが対応し、関数“func_a2”と本移行命令１１３ｂとが対応し、関数“func_a3”と本移行命令１１３ｃとが対応するものとする。さらに、関数“func_a1”と本移行命令１１３ａとのアドレス距離ｄは、プロセッサ２２０のアーキテクチャの制約の範囲内、例えば、１２８ＭＢ以内であるものとする。また、関数“func_a1”とアドレス保持領域１１４ａとが対応し、関数“func_a2”とアドレス保持領域１１４ｂとが対応し、関数“func_a3”とアドレス保持領域１１４ｃとが対応するものとする。
【００６５】
尚、レジスタ群２２０１は、対象システム２００のプロセッサ２２０内の一時的な記憶領域である。そして、レジスタ群２２０１は、関数“func_a1”から“func_a3”のそれぞれと対応する複数のレジスタ２２０１ａから２２０１ｃを含むものとする。つまり、本移行命令１１３ａ、レジスタ２２０１ａ及びアドレス保持領域１１４ａは、対応する。同様に、本移行命令１１３ｂ、レジスタ２２０１ｂ及びアドレス保持領域１１４ｂは、対応する。また、本移行命令１１３ｃ、レジスタ２２０１ｃ及びアドレス保持領域１１４ｃは、対応する。そして、例えば、本移行命令１１３ａの第１の命令は、アドレス保持領域１１４ａに格納されたアドレスをレジスタ２２０１ａに格納させる命令である。そして、本移行命令１１３ａの第２の命令は、レジスタ２２０１ａに格納されたレジスタ値（アドレス）をジャンプ先としたジャンプ命令である。本移行命令１１３ｂ及び１１３ｃについて同様である。
【００６６】
図７は、本実施の形態２にかかるパッチの生成から適用までの流れを説明するためのシーケンス図である。ここでは、対象システム２００で実行中の対象アプリ２２２について一部の機能を修正するものとする。すなわち、ロードモジュール２１２内のオブジェクトモジュール１１１に含まれる関数の一部を更新し、対象アプリ２２２の実行を停止せずにパッチ適用する場合について説明する。そのため、モジュール処理部２２１は、初回ロードモジュールを実行中である（Ｓ１２０）。つまり、対象アプリ２２２が実行中であると共に、組込みローダ２２３は、パッチ適用要求のイベントを監視している。
【００６７】
そして、ロードモジュール生成装置１００は、パッチを生成する（Ｓ１２１）。図８は、本実施の形態２にかかるパッチ生成処理の流れを説明するためのフローチャートである。まず、ロードモジュール生成装置１００は、更新後関数のオブジェクトモジュールを生成する（Ｓ１３１）。例えば、受付部１２１は、ユーザの操作に応じて、オブジェクトモジュール１１１内の一部の関数を更新するためのプログラムコードの入力を受け付けて、生成部１２２は、更新前のソースファイルを編集して更新後のソースファイルを生成する。そして、生成部１２２は、生成した更新後のソースファイルをコンパイル等して、更新後関数のオブジェクトモジュールを生成し、記憶装置１１０に格納する。尚、更新後関数のオブジェクトモジュールは、ロードモジュール生成装置１００の外部で生成され、受付部１２１が外部から更新後関数のオブジェクトモジュールの入力を受け付けても良い。
【００６８】
次に、ロードモジュール生成装置１００は、仮移行命令を生成する（Ｓ１３２）。例えば、受付部１２１は、ユーザの操作に応じて、相対アドレスを指定したジャンプ命令のコードの入力を受け付け、また、記憶装置１１０から更新後関数のオブジェクトモジュールを読み出す。生成部１２２は、更新後関数のオブジェクトモジュールと、入力されたジャンプ命令のコードに基づいて仮移行命令を生成する。このとき、生成部１２２は、オブジェクトモジュール１１１を解析して、更新後関数に対応する本移行命令の相対アドレスを特定する。そして、生成部１２２は、特定された相対アドレスをジャンプ先としたジャンプ命令のコードを仮移行命令として生成する。尚、仮移行命令は、更新対象の関数のそれぞれに対応した複数のジャンプ命令を含むものとする。
【００６９】
続いて、ロードモジュール生成装置１００は、複数の更新後関数のオブジェクトモジュールをまとめてパッチＤＬＬ（Ｄｙｎａｍｉｃ  Ｌｉｎｋ  Ｌｉｂｒａｒｙ）を生成する（Ｓ１３３）。尚、ＤＬＬの生成方法は、公知の手法を適用できる。そして、ロードモジュール生成装置１００は、パッチリストを生成する（Ｓ１３４）。すなわち、生成部１２２は、更新後関数と、当該関数に対応する仮移行命令（のジャンプ命令）との対応付けを定義したファイルを生成する。その後、ロードモジュール生成装置１００は、生成した仮移行命令、パッチＤＬＬ及びパッチリストをまとめてパッチデータとして出力する（Ｓ１３５）。例えば、生成部１２２は、パッチデータを記憶装置１１０に保存する。
【００７０】
図９は、本実施の形態２にかかるパッチの生成及び内訳の概念を説明する図である。まず、更新後オブジェクトモジュール１１７は、ステップＳ１３１で生成される更新後関数のオブジェクトモジュールの一例である。更新後オブジェクトモジュール１１７は、例えば、上述したオブジェクトモジュール１１１ａ内の一部の関数“func_a1”及び“func_a3”に対して所定の更新を行ったオブジェクトモジュールであるものとする。ＬＭ生成ツール１２２１には、更新後オブジェクトモジュール１１７及びロードモジュール１１６が入力される。そして、ＬＭ生成ツール１２２１は、これらを用いて上述したように仮移行命令１１８１、パッチＤＬＬ１１８２及びパッチリスト１１８３を生成して、出力する。
【００７１】
仮移行命令１１８１は、例えば、ジャンプ命令（のオブジェクトモジュール）“s_001.jp”と“s_003.jp”を含む。ジャンプ命令“s_001.jp”は、例えば、ロードモジュール１１６内の“func_a1”の先頭アドレスから本移行命令１１３ａの先頭アドレスまでの間の相対アドレスをジャンプ先として指定した１つのジャンプ命令である。また、ジャンプ命令“s_003.jp”は、例えば、ロードモジュール１１６内の“func_a3”の先頭アドレスから本移行命令１１３ｃの先頭アドレスまでの間の相対アドレスをジャンプ先として指定した１つのジャンプ命令である。
【００７２】
パッチＤＬＬ１１８２は、更新後オブジェクトモジュール１１７から生成されたＤＬＬファイル“aaa2.so.I”である。パッチリスト１１８３は、パッチの対象がＤＬＬファイル“aaa2.so.I”であること、更新対象の関数“func_a1”とジャンプ命令“s_001.jp”との対応付け、更新対象の関数“func_a3”とジャンプ命令“s_003.jp”との対応付けを定義したファイルである。尚、パッチリスト１１８３の形式は、一例に過ぎず、これに限定されない。
【００７３】
図７に戻り説明を続ける。ロードモジュール生成装置１００は、生成したパッチデータを対象システム２００へ転送する（Ｓ１２２）。具体的には、転送部１２３は、記憶装置１１０からパッチデータを読み出し、通信部１４０を用いてネットワークＮを介してパッチデータを対象システム２００へ転送する。このとき、ロードモジュール生成装置１００は、パッチデータと共にパッチ適用指示を送信してもよい。
【００７４】
対象システム２００のモジュール処理部２２１は、ネットワークＮを介してパッチデータを受信し、パッチデータ、つまり、仮移行命令、パッチＤＬＬ及びパッチリストを記憶装置２１０に保存する（Ｓ１２３）。その後、モジュール処理部２２１は、パッチ適用要求のイベントを発生させる（Ｓ１２４）。例えば、モジュール処理部２２１は、ロードモジュール生成装置１００からのパッチ適用指示、又は、ユーザからの指示に応じてパッチ適用要求のイベントを発生させてもよい。または、モジュール処理部２２１は、パッチデータの受信に応じてパッチ適用要求のイベントを発生させてもよい。
【００７５】
そして、組込みローダ２２３は、パッチ適用要求のイベントを検出し、パッチDLLのロード等を行う（Ｓ１２５）。図１０は、本実施の形態２にかかる組込みローダにおけるパッチ適用処理の流れを説明するためのフローチャートである。まず、組込みローダ２２３は、上述した通り、パッチ適用要求のイベントを検出する（Ｓ１４１）。次に、組込みローダ２２３は、パッチＤＬＬ１１８２をメモリ２３０にロードする（Ｓ１４２）。具体的には、組込みローダ２２３は、パッチリスト１１８３に基づいて、ＤＬＬファイル“aaa2.so.I”を記憶装置２１０から読み出してメモリ２３０へロードする。これにより、パッチＤＬＬ１１８２内の各更新後関数のメモリ２３０上の絶対アドレスが確定する。そして、組込みローダ２２３は、パッチＤＬＬ１１８２の絶対アドレスを取得する（Ｓ１４３）。例えば、組込みローダ２２３は、メモリ２３０内の各更新後関数を検索し、各更新後関数の先頭アドレスを特定する。そして、組込みローダ２２３は、取得したパッチＤＬＬ１１８２の各関数の絶対アドレスを、アドレス保持領域群１１４内の更新対象の関数に対応する領域に設定する（Ｓ１４４）。
【００７６】
図７に戻り説明を続ける。その後、組込みローダ２２３は、ステップＳ１２５の後、ステップＳ１２５の処理が終了した旨をモジュール処理部２２１へ通知する（Ｓ１２６）。モジュール処理部２２１は、組込みローダ２２３からの通知に応じて、更新対象の関数に対応する仮移行命令１１８１を、対応する更新前関数の先頭アドレスに挿入する（Ｓ１２７）。例えば、モジュール処理部２２１は、パッチリスト１１８３に基づいて、更新対象の関数名に対応する更新前関数の先頭アドレスに、対応付けられた仮移行命令のコードを挿入する。このとき、モジュール処理部２２１は、例えば、ｐｔｒａｃｅシステムコールを用いて、仮移行命令を挿入してもよい。モジュール処理部２２１は、パッチ適用後の関数を実行する（Ｓ１２８）。具体的には、モジュール処理部２２１は、更新前の関数の先頭アドレスのジャンプ命令（仮移行命令）を実行し、JUMP関数（本移行命令）を経由してパッチＤＬＬ内の（更新後の）関数を実行する。
【００７７】
図１１は、本実施の形態２にかかるパッチ適用時のメモリ内容の概念を説明する図である。まず、ステップＳ１４２によりパッチＤＬＬ１１８２がメモリ２３０にロードされることにより、更新後関数“func_a1”と“func_a3”の絶対アドレスが確定したことを示す。ここでは、更新後関数“func_a1”のメモリ２３０上の絶対アドレスが“0xffff ff00”、更新後関数“func_a3”のメモリ２３０上の絶対アドレスが“0xffff ffa0”となったことを示す。そして、ステップＳ１４３及びＳ１４４により、更新後関数“func_a1”と“func_a3”の絶対アドレスが、対応するアドレス保持領域１１４ａ及び１１４ｃにそれぞれ設定されたことを示す。さらに、ステップＳ１２７により、本移行命令１１３ａへのジャンプ命令“s_001.jp”が更新前関数“func_a1”の先頭アドレスに挿入され、本移行命令１１３ｃへのジャンプ命令“s_003.jp”が更新前関数“func_a3”の先頭アドレスに挿入されたことを示す。
【００７８】
その後、ステップＳ１２８において、例えば、更新前関数“func_a1”が呼び出された場合、先頭アドレスのジャンプ命令“s_001.jp”により、本移行命令１１３ａへ処理が移行する。そして、本移行命令１１３ａの第１の命令の実行により、対応するアドレス保持領域１１４ａのアドレス“0xffff ff00”がレジスタ２２０１ａに格納される。続いて、本移行命令１１３ａの第２の命令の実行により、対応するレジスタ２２０１ａのレジスタ値“0xffff ff00”をジャンプ先としたジャンプ命令が実行される。これにより、メモリ２３０上の絶対アドレス“0xffff ff00”に処理が移行する。そして、絶対アドレス“0xffff ff00”にロードされている更新後関数“func_a1”が（更新前関数“func_a1”の代わりに）実行される。また、更新前関数“func_a3”が呼び出された場合には、同等の処理により、メモリ２３０上の絶対アドレス“0xffff ffa0”に処理が移行する。そして、絶対アドレス“0xffff ffa0”にロードされている更新後関数“func_a3”が（更新前関数“func_a3”の代わりに）実行される。
【００７９】
このように、本実施の形態により、プロセッサのアーキテクチャの制約に依存せず、動的なパッチ適用処理が実現可能となる。
【００８０】
＜実施の形態３＞
本実施の形態３は、上述した実施の形態２を改良したものである。動的なパッチ適用を繰り返し行った場合には、更新後関数のオブジェクトモジュールがメモリ上に累積されることになる。一方で、対象システム２００は、原則として無中断で稼働するとはいえ、定期的又は不定期の任意のタイミングでシステムを再起動することもある。その場合、初回ロードモジュールをロードした上で、これまで適用した全てのパッチを再度、適用することになる。そのため、再起動後に対象アプリが利用可能になるまでに要する時間が長くなり、また、メモリ２３０の使用容量も増加し得る。そこで、本実施の形態では、パッチ作成時に併せて、パッチ適用済みロードモジュールを生成し、パッチデータと共に対象システムへ送信し、システム再起動時にパッチ適用済みロードモジュールをロードできるようにするものである。
【００８１】
すなわち、本実施の形態にかかる生成部は、前記生成されたロードモジュールのうち、前記更新対象関数を、前記更新後関数に置き換えてパッチ適用済みロードモジュールを生成する。その後、前記転送部は、前記対象システムの再起動時に前記ロードモジュールに代えて前記メモリへロードさせるために、前記対象システムに対して、前記パッチ適用済みロードモジュールを転送する。
【００８２】
そして、本実施の形態にかかる対象システムは、前記ロードモジュール生成装置から受信した前記パッチ適用済みロードモジュールを記憶装置に格納する。そして、対象システムは、再起動時に、前記ロードモジュールに代えて前記パッチ適用済みロードモジュールを前記記憶装置から前記メモリへロードし、前記パッチ適用済みロードモジュール内の前記更新後関数を含む対象モジュールを実行する。
【００８３】
このように、パッチ生成時に併せて、パッチ適用済みのロードモジュールも生成し、併せて、送信しておくことで、次回起動時にパッチ適用済みのロードモジュールを起動することが可能となる。よって、再度のパッチ適用が不要となる。また、パッチ生成時と同時に生成するため、パッチ内容との齟齬も防げる。
【００８４】
図１２は、本実施の形態３にかかる動的プログラム更新システム１０００ａの構成を示すブロック図である。動的プログラム更新システム１０００ａは、上述した図３と比べて、ロードモジュール生成装置１００がロードモジュール生成装置１００ａに置き換わったものである。ここで、ロードモジュール生成装置１００ａは、本実施の形態にかかるパッチ適用済みロードモジュール生成処理が実行された後の状態を示す。そのため、ロードモジュール生成装置１００ａの記憶装置１１０には、オブジェクトモジュール１１１、組込みローダ１１２、本移行命令群１１３及びアドレス保持領域群１１４が省略されている。また、ロードモジュール生成プログラム１１５ａは、上述したロードモジュール生成プログラム１１５の処理に加えて、本実施の形態にかかるパッチ適用済みロードモジュール生成処理が実装されたものである。また、ロードモジュール１１６、更新後オブジェクトモジュール１１７、仮移行命令１１８１、パッチＤＬＬ１１８２及びパッチリスト１１８３は、上述した実施の形態２で説明したものと同等なものである。パッチ適用済みロードモジュール１１６ａは、ロードモジュール１１６のうち、更新後オブジェクトモジュール１１７に対応する更新前関数を、更新後関数に置き換えたものである。
【００８５】
プロセッサ１２０は、記憶装置１１０からロードモジュール生成プログラム１１５ａをメモリ１３０へロードして、実行する。これにより、プロセッサ１２０は、受付部１２１、生成部１２２ａ及び転送部１２３ａの機能を実現する。生成部１２２ａは、入力されたロードモジュール１１６のうち、更新後オブジェクトモジュール１１７に対応する更新前関数を、当該更新後関数に置き換えてパッチ適用済みロードモジュール１１６ａを生成する。その後、転送部１２３ａは、対象システム２００の再起動時にロードモジュール２１２に代えてメモリ２３０へロードさせるために、対象システム２００に対して、パッチ適用済みロードモジュール１１６ａを転送する。
【００８６】
対象システム２００のモジュール処理部２２１は、受信したパッチ適用済みロードモジュール１１６ａを記憶装置２１０のロードモジュール２１２に上書きする。尚、その他の構成は、上述した実施の形態２と同等であるため、詳細な説明を省略する。
【００８７】
図１３は、本実施の形態３にかかるパッチ適用済みロードモジュールの生成から実行までの流れを説明するためのシーケンス図である。尚、以下の説明において上述した図７と同等の処理については同一の符号を付し、適宜、説明を省略する。
【００８８】
まず、ロードモジュール生成装置１００ａは、パッチ及びパッチ適用済みロードモジュールを生成する（Ｓ１２１ａ）。図１４は、本実施の形態３にかかるパッチ生成処理及びパッチ適用済みロードモジュール生成処理の流れを説明するためのフローチャートである。尚、ステップＳ１３１からＳ１３５の処理は、上述した図８と同等の処理であるため、説明を省略する。ステップＳ１３５の後、ロードモジュール生成装置１００ａは、パッチ適用済みロードモジュール１１６ａを生成する（Ｓ１３６）。具体的には、生成部１２２ａは、記憶装置１１０からロードモジュール１１６及び更新後オブジェクトモジュール１１７を読み出し、ロードモジュール１１６のうち更新後オブジェクトモジュール１１７に対応する更新前関数のコードを、更新後オブジェクトモジュール１１７に置き換える。そして、ロードモジュール生成装置１００ａは、生成したパッチ適用済みロードモジュール１１６ａを出力する（Ｓ１３７）。例えば、生成部１２２ａは、パッチ適用済みロードモジュール１１６ａを記憶装置１１０に保存する。尚、ステップＳ１３６及びＳ１３７は、ステップＳ１３３の後に、ステップＳ１３４及びＳ１３５の前又は並列して実行しても構わない。
【００８９】
図１３に戻り説明を続ける。ロードモジュール生成装置１００ａは、生成したパッチデータ及びパッチ適用済みロードモジュール１１６ａを対象システム２００へ転送する（Ｓ１２２ａ）。具体的には、転送部１２３ａは、記憶装置１１０からパッチデータ及びパッチ適用済みロードモジュール１１６ａを読み出す。そして、転送部１２３ａは、通信部１４０を用いてネットワークＮを介してパッチデータ及びパッチ適用済みロードモジュール１１６ａを対象システム２００へ転送する。このとき、ロードモジュール生成装置１００ａは、パッチ適用指示及びパッチ適用済みロードモジュール１１６ａの差替え指示を送信してもよい。
【００９０】
対象システム２００のモジュール処理部２２１は、ネットワークＮを介してパッチデータ及びパッチ適用済みロードモジュール１１６ａを受信し、パッチデータと共にパッチ適用済みロードモジュール１１６ａを記憶装置２１０に保存する（Ｓ１２３ａ）。このとき、モジュール処理部２２１は、パッチ適用済みロードモジュール１１６ａによりロードモジュール２１２を上書き保存してもよい。モジュール処理部２２１は、少なくとも再起動後に、ロードモジュール２１２に代えてパッチ適用済みロードモジュール１１６ａをロードする場所に保存するものとする。
【００９１】
その後、上述したように、ステップＳ１２４からＳ１２８が実行される。そして、対象システム２００が再起動したものとする（Ｓ１２９１）。その後、モジュール処理部２２１は、記憶装置２１０からパッチ適用済みロードモジュール１１６ａをメモリ２３０にロードする（Ｓ１２９２）。そして、モジュール処理部２２１は、パッチ適用済みロードモジュール１１６ａを実行する（Ｓ１２９３）。具体的には、モジュール処理部２２１は、メモリ２３０内のパッチ適用済みロードモジュール１１６ａのうちオブジェクトモジュール内のメイン関数の実行を開始する。併せて、組込みローダ２２３は、パッチ適用要求のイベントの監視を開始する。
【００９２】
このように、本実施の形態により、対象システムの再起動後に再度のパッチ適用が不要となり、かつ、パッチ内容との齟齬も防げる。
【００９３】
＜実施の形態４＞
図１５は、本実施の形態４にかかる情報処理装置３の構成を示すブロック図である。情報処理装置３は、上述した対象システムに相当するコンピュータシステムである。情報処理装置３は、コンピュータサーバ又は組込み機器等であればよい。
【００９４】
情報処理装置３は、メモリ３１と、プロセッサ３２とを少なくとも備える。メモリ３１は、ＲＡＭ等の揮発性記憶装置である。メモリ３１は、ロードモジュール３３を少なくとも記憶する。ロードモジュール３３は、対象モジュール３３１と、組込みローダ３３２と、アドレス保持領域３３３と、本移行命令３３４とが結合されたモジュールである。尚、ロードモジュール３３は、上述したロードモジュール１３と同等の構成であるため、内部の各構成についての詳細な説明を省略する。
【００９５】
プロセッサ３２は、上述したプロセッサ２２０と同等の構成である。プロセッサ３２は、情報処理装置３内の記憶装置（不図示）からロードモジュール３３をメモリ３１へロードして実行する。これにより、プロセッサ３２は、対象モジュール３３１に相当するアプリケーション及び組込みローダ３３２の機能を実現する。
【００９６】
図１６は、本実施の形態４にかかる動的プログラム更新方法の流れを説明するためのフローチャートである。まず、プロセッサ３２は、ロードモジュール３３をメモリ３１にロードする（Ｓ４１）。次に、プロセッサ３２は、ロードモジュール３３内の対象モジュール３３１を実行する（Ｓ４２）。併せて、プロセッサ３２は、組込みローダ３３２を実行する。これにより、組込みローダ３３２は、パッチ適用要求のイベントの監視を開始する。
【００９７】
そして、情報処理装置３は、外部から仮移行命令及び更新後モジュールを受信し、その後、組込みローダ３３２は、パッチ適用要求を検出する（Ｓ４３）。そして、組込みローダ３３２は、受信した更新後モジュールをメモリ３１にロードする（Ｓ４４）。続いて、組込みローダ３３２は、更新後関数のメモリ３１上の先頭アドレスを第１のアドレスとしてアドレス保持領域３３３に格納する（Ｓ４５）。その後、プロセッサ３２は、受信した仮移行命令を、メモリ３１上の対象モジュール３３１内の更新対象関数の先頭アドレスに挿入する（Ｓ４６）。
【００９８】
ここで、本移行命令１３４は、上述した実施の形態１と同様に、更新後関数に対応する対象モジュール３３１内の更新対象関数の先頭アドレスから第２のアドレス分離れた位置に配置されている。また、仮移行命令は、上述した実施の形態１と同様に、第２のアドレスを移行先の相対アドレスとして処理を移行させる命令である。そのため、以後、対象モジュール１３１の実行中に、更新後関数に対応する更新対象関数が呼び出された場合には、先頭アドレスの仮移行命令が実行されて、本移行命令へ遷移する。そして、本移行命令の実行により、更新後関数又は更新対象関数に対応するアドレス保持領域１３３内の記憶領域に格納された絶対アドレスがレジスタに格納され、当該レジスタの格納値を宛先とした移行命令が実行され、更新後関数へ遷移し、更新後関数の処理が実行される。このようにして、パッチ適用後の処理が実現される。
【００９９】
そのため、本実施の形態４においても、上述した実施の形態１と同様の効果を奏する。
【０１００】
＜その他の実施の形態＞
尚、上述の実施の形態では、ハードウェアの構成として説明したが、これに限定されるものではない。本開示は、任意の処理を、ＣＰＵにコンピュータプログラムを実行させることにより実現することも可能である。
【０１０１】
上述の例において、プログラムは、様々なタイプの非一時的なコンピュータ可読媒体（non-transitory computer readable medium）を用いて格納され、コンピュータに供給することができる。非一時的なコンピュータ可読媒体は、様々なタイプの実体のある記録媒体（tangible storage medium）を含む。非一時的なコンピュータ可読媒体の例は、磁気記録媒体（例えばフレキシブルディスク、磁気テープ、ハードディスクドライブ）、光磁気記録媒体（例えば光磁気ディスク）、ＣＤ−ＲＯＭ（Read Only Memory）、ＣＤ−Ｒ、ＣＤ−Ｒ／Ｗ、ＤＶＤ（Digital Versatile Disc）、半導体メモリ（例えば、マスクＲＯＭ、ＰＲＯＭ（Programmable ROM）、ＥＰＲＯＭ（Erasable PROM）、フラッシュＲＯＭ、ＲＡＭ（Random Access Memory））を含む。また、プログラムは、様々なタイプの一時的なコンピュータ可読媒体（transitory computer readable medium）によってコンピュータに供給されてもよい。一時的なコンピュータ可読媒体の例は、電気信号、光信号、及び電磁波を含む。一時的なコンピュータ可読媒体は、電線及び光ファイバ等の有線通信路、又は無線通信路を介して、プログラムをコンピュータに供給できる。
【０１０２】
なお、本開示は上記実施の形態に限られたものではなく、趣旨を逸脱しない範囲で適宜変更することが可能である。また、本開示は、それぞれの実施の形態を適宜組み合わせて実施されてもよい。
【０１０３】
上記の実施形態の一部又は全部は、以下の付記のようにも記載され得るが、以下には限られない。
（付記１）
対象システムで実行させるための複数の関数を含む実行形式のプログラムである対象モジュールの入力を受け付ける受付部と、
前記対象システムで実行中の前記対象モジュールに対してパッチ適用を行う際に前記複数の関数のいずれかを更新した更新後関数を含む更新後モジュールを当該対象システムのメモリにロードする組込みローダと、前記メモリ上における前記更新後関数に対応する第１のアドレスを保持するためのアドレス保持領域と、前記アドレス保持領域に保持された前記第１のアドレスを前記対象システムのレジスタに格納し、当該レジスタに格納された前記第１のアドレスに対して処理を移行させる本移行命令と、前記入力された対象モジュールと、を結合してロードモジュールを生成する生成部と、
を備え、
前記組込みローダは、
前記ロードされた前記更新後モジュール内の前記更新後関数の前記メモリ上の先頭アドレスを前記第１のアドレスとして前記アドレス保持領域に格納する処理を含み、
前記生成部は、
前記更新後関数に対応する前記対象モジュール内の更新対象関数の先頭アドレスから第２のアドレス分離れた位置に前記本移行命令を配置して、前記ロードモジュールを生成し、
前記第２のアドレスは、
前記パッチ適用時に前記メモリ上の前記更新対象関数の先頭アドレスに挿入される仮移行命令における処理の移行先を示す相対アドレスである
情報処理装置。
（付記２）
前記第２のアドレスのサイズは、
前記対象システムのプロセッサのアドレッシングサイズの上限以内である
付記１に記載の情報処理装置。
（付記３）
前記受付部は、前記更新後モジュールの入力をさらに受け付け、
前記生成部は、
前記第２のアドレスに対して処理を移行させる前記仮移行命令を生成し、
前記情報処理装置は、
前記パッチ適用の要求を発生させるために、前記対象モジュールが実行中である前記対象システムに対して、前記更新後モジュール及び前記仮移行命令を転送する転送部をさらに備える
付記１又は２に記載の情報処理装置。
（付記４）
前記組込みローダは、
前記パッチ適用の要求の検出時に、前記転送された更新後モジュールを前記メモリへロードする処理と、
前記更新後関数の先頭アドレスである前記メモリ上の絶対アドレスを取得する処理と、
前記取得した絶対アドレスを前記第１のアドレスとして前記アドレス保持領域に格納する処理と、を含む
付記３に記載の情報処理装置。
（付記５）
前記生成部は、
前記更新後関数と前記仮移行命令との対応付けを定義したパッチリストをさらに生成し、
前記転送部は、前記更新後モジュール及び前記仮移行命令と共に前記パッチリストを転送し、
前記組込みローダは、
前記パッチ適用の要求の検出時に、前記転送されたパッチリストに基づいて前記更新後モジュールの前記メモリへのロードを開始する
付記３又は４に記載の情報処理装置。
（付記６）
前記生成部は、
前記生成されたロードモジュールのうち、前記更新対象関数を、前記更新後関数に置き換えてパッチ適用済みロードモジュールを生成し、
前記転送部は、前記対象システムの再起動時に前記ロードモジュールに代えて前記メモリへロードさせるために、前記対象システムに対して、前記パッチ適用済みロードモジュールを転送する
付記３乃至５のいずれか１項に記載の情報処理装置。
（付記７）
対象システムで実行させるための複数の関数を含む実行形式のプログラムである対象モジュールの入力を受け付け、
前記対象システムで実行中の前記対象モジュールに対してパッチ適用を行う際に前記複数の関数のいずれかを更新した更新後関数を含む更新後モジュールを当該対象システムのメモリにロードする組込みローダと、前記メモリ上における前記更新後関数に対応する第１のアドレスを保持するためのアドレス保持領域と、前記アドレス保持領域に保持された前記第１のアドレスを前記対象システムのレジスタに格納し、当該レジスタに格納された前記第１のアドレスに対して処理を移行させる本移行命令と、前記入力された対象モジュールと、を結合してロードモジュールを生成し、
前記組込みローダは、
前記ロードされた前記更新後モジュール内の前記更新後関数の前記メモリ上の先頭アドレスを、前記アドレス保持領域に格納する処理を含み、
前記ロードモジュールを生成する際に、前記更新後関数に対応する前記対象モジュール内の更新対象関数の先頭アドレスから第２のアドレス分離れた位置に前記本移行命令を配置し、
前記第２のアドレスは、
前記パッチ適用時に前記メモリ上の前記更新対象関数の先頭アドレスに挿入される仮移行命令における処理の移行先を示す相対アドレスである
ロードモジュール生成方法。
（付記８）
対象システムで実行させるための複数の関数を含む実行形式のプログラムである対象モジュールの入力を受け付ける処理と、
前記対象システムで実行中の前記対象モジュールに対してパッチ適用を行う際に前記複数の関数のいずれかを更新した更新後関数を含む更新後モジュールを当該対象システムのメモリにロードする組込みローダと、前記メモリ上における前記更新後関数に対応する第１のアドレスを保持するためのアドレス保持領域と、前記アドレス保持領域に保持された前記第１のアドレスを前記対象システムのレジスタに格納し、当該レジスタに格納された前記第１のアドレスに対して処理を移行させる本移行命令と、前記入力された対象モジュールと、を結合してロードモジュールを生成する処理と、
をコンピュータに実行させ、
前記組込みローダは、
前記ロードされた前記更新後モジュール内の前記更新後関数の前記メモリ上の先頭アドレスを、前記アドレス保持領域に格納する処理を含み、
前記ロードモジュールを生成する処理は、前記更新後関数に対応する前記対象モジュール内の更新対象関数の先頭アドレスから第２のアドレス分離れた位置に前記本移行命令を配置し、
前記第２のアドレスは、
前記パッチ適用時に前記メモリ上の前記更新対象関数の先頭アドレスに挿入される仮移行命令における処理の移行先を示す相対アドレスである
ロードモジュール生成プログラム。
（付記９）
対象システムで実行させるための複数の関数を含む実行形式のプログラムである対象モジュールと、
前記対象システムで実行中の前記対象モジュールに対してパッチ適用を行う際に前記複数の関数のいずれかを更新した更新後関数を含む更新後モジュールを当該対象システムのメモリにロードする組込みローダと、
前記メモリ上における前記更新後関数に対応する第１のアドレスを保持するためのアドレス保持領域と、
前記アドレス保持領域に保持された前記第１のアドレスを前記対象システムのレジスタに格納し、当該レジスタに格納されたアドレスに対して処理を移行させる本移行命令と、
が結合され、
前記組込みローダは、
前記ロードされた前記更新後モジュール内の前記更新後関数の前記メモリ上の先頭アドレスを、前記アドレス保持領域に格納する処理を含み、
前記本移行命令は、
前記更新後関数に対応する前記対象モジュール内の更新対象関数の先頭アドレスから第２のアドレス分離れた位置に配置され、
前記第２のアドレスは、
前記パッチ適用時に前記メモリ上の前記更新対象関数の先頭アドレスに挿入される仮移行命令における処理の移行先を示す相対アドレスである
プログラム。
（付記１０）
情報処理装置と、対象システムと、を備え、
前記対象システムは、
複数の関数を含む実行形式のプログラムである対象モジュールと、前記対象システムで実行中の前記対象モジュールに対してパッチ適用を行う際に前記複数の関数のいずれかを更新した更新後関数を含む更新後モジュールを当該対象システムのメモリにロードする組込みローダと、前記メモリ上における前記更新後関数に対応する第１のアドレスを保持するためのアドレス保持領域と、前記アドレス保持領域に保持された前記第１のアドレスを前記対象システムのレジスタに格納し、当該レジスタに格納されたアドレスに対して処理を移行させる本移行命令と、が結合されたロードモジュールを前記メモリにロードし、
前記ロードモジュール内の前記対象モジュールを実行し、
前記本移行命令は、
前記ロードモジュール内で、前記更新後関数に対応する前記対象モジュール内の更新対象関数の先頭アドレスから第２のアドレス分離れた位置に配置されており、
前記情報処理装置は、
前記更新後モジュールの入力を受け付け、
前記第２のアドレスを移行先の相対アドレスとして処理を移行させる仮移行命令を生成し、
前記パッチ適用の要求を発生させるために、前記対象モジュールが実行中である前記対象システムに対して、前記更新後モジュール及び前記仮移行命令を転送し、
前記メモリにロードされた前記組込みローダは、
前記対象システムが前記更新後モジュール及び前記仮移行命令を受信後に、前記パッチ適用の要求を検出し、
前記受信した更新後モジュールが前記ロードされた際の前記更新後関数の前記メモリ上の先頭アドレスを前記第１のアドレスとして前記アドレス保持領域に格納し、
前記対象システムは、
前記仮移行命令を、前記メモリ上の前記更新対象関数の先頭アドレスに挿入する
動的プログラム更新システム。
（付記１１）
前記情報処理装置は、
前記対象モジュールの入力を受け付け、
前記入力された対象モジュールと、前記組込みローダと、前記アドレス保持領域と、前記本移行命令と、を結合して前記ロードモジュールを生成し、
前記ロードモジュールを前記対象システムに対して転送し、
前記対象システムは、
前記情報処理装置から受信したロードモジュールを前記メモリにロードし、
前記ロードモジュール内の前記対象モジュールを実行する
付記１０に記載の動的プログラム更新システム。
（付記１２）
前記第２のアドレスのサイズは、
前記対象システムのプロセッサのアドレッシングサイズの上限以内である
付記１０又は１１に記載の動的プログラム更新システム。
（付記１３）
前記組込みローダは、
前記パッチ適用の要求の検出時に、前記受信した更新後モジュールを前記メモリへロードし、
前記更新後関数の先頭アドレスである前記メモリ上の絶対アドレスを取得し、
前記取得した絶対アドレスを前記第１のアドレスとして前記アドレス保持領域に格納する
付記１０乃至１２のいずれか１項に記載の動的プログラム更新システム。
（付記１４）
前記情報処理装置は、
前記更新後関数と前記仮移行命令との対応付けを定義したパッチリストをさらに生成し、
前記更新後モジュール及び前記仮移行命令と共に前記パッチリストを転送し、
前記組込みローダは、
前記パッチ適用の要求の検出時に、前記転送されたパッチリストに基づいて前記更新後モジュールの前記メモリへのロードを開始する
付記１０乃至１３のいずれか１項に記載の動的プログラム更新システム。
（付記１５）
前記情報処理装置は、
前記ロードモジュールのうち、前記更新対象関数を、前記更新後関数に置き換えてパッチ適用済みロードモジュールを生成し、
前記更新後モジュール及び前記仮移行命令と共に、前記パッチ適用済みロードモジュールを転送し、
前記対象システムは、
前記情報処理装置から受信した前記パッチ適用済みロードモジュールを記憶装置に格納し、
再起動時に、前記ロードモジュールに代えて前記パッチ適用済みロードモジュールを前記記憶装置から前記メモリへロードし、
前記パッチ適用済みロードモジュール内の前記更新後関数を含む対象モジュールを実行する、
付記１０乃至１４のいずれか１項に記載の動的プログラム更新システム。
（付記１６）
対象システムにおいて、
複数の関数を含む実行形式のプログラムである対象モジュールと、前記対象システムで実行中の前記対象モジュールに対してパッチ適用を行う際に前記複数の関数のいずれかを更新した更新後関数を含む更新後モジュールを当該対象システムのメモリにロードする組込みローダと、前記メモリ上における前記更新後関数に対応する第１のアドレスを保持するためのアドレス保持領域と、前記アドレス保持領域に保持された前記第１のアドレスを前記対象システムのレジスタに格納し、当該レジスタに格納されたアドレスに対して処理を移行させる本移行命令と、が結合されたロードモジュールを前記メモリにロードし、
前記ロードモジュール内の前記対象モジュールを実行し、
前記本移行命令は、
前記ロードモジュール内で、前記更新後関数に対応する前記対象モジュール内の更新対象関数の先頭アドレスから第２のアドレス分離れた位置に配置されており、
情報処理装置において、
前記更新後モジュールの入力を受け付け、
前記第２のアドレスを移行先の相対アドレスとして処理を移行させる仮移行命令を生成し、
前記パッチ適用の要求を発生させるために、前記対象モジュールが実行中である前記対象システムに対して、前記更新後モジュール及び前記仮移行命令を転送し、
前記メモリにロードされた前記組込みローダにおいて、
前記対象システムが前記更新後モジュール及び前記仮移行命令を受信後に、前記パッチ適用の要求を検出し、
前記受信した更新後モジュールが前記ロードされた際の前記更新後関数の前記メモリ上の先頭アドレスを前記第１のアドレスとして前記アドレス保持領域に格納し、
前記対象システムにおいて、
前記仮移行命令を、前記メモリ上の前記更新対象関数の先頭アドレスに挿入する
動的プログラム更新方法。
（付記１７）
複数の関数を含む実行形式のプログラムである対象モジュールと、組込みローダと、アドレス保持領域と、本移行命令と、が結合されたロードモジュールを記憶するメモリと、
前記メモリに記憶された前記対象モジュールを実行するプロセッサと、
を備え、
前記組込みローダは、
前記プロセッサが実行中の前記対象モジュールに対してパッチ適用を行う際に前記複数の関数のいずれかを更新した更新後関数を含む更新後モジュールを前記メモリにロードし、
前記アドレス保持領域は、
前記メモリ上における前記更新後関数に対応する第１のアドレスを保持するための領域であり、
前記本移行命令は、
前記アドレス保持領域に保持された前記第１のアドレスを前記プロセッサのレジスタに格納し、当該レジスタに格納されたアドレスに対して処理を移行させる命令であり、
前記組込みローダは、
前記ロードされた前記更新後モジュール内の前記更新後関数の前記メモリ上の先頭アドレスを、前記アドレス保持領域に格納する処理を含み、
前記本移行命令は、
前記更新後関数に対応する前記対象モジュール内の更新対象関数の先頭アドレスから第２のアドレス分離れた位置に配置され、
前記第２のアドレスは、
前記パッチ適用時に前記メモリ上の前記更新対象関数の先頭アドレスに挿入される仮移行命令における処理の移行先を示す相対アドレスである
情報処理装置。
（付記１８）
情報処理装置が備えるプロセッサが、
複数の関数を含む実行形式のプログラムである対象モジュールと、組込みローダと、アドレス保持領域と、本移行命令と、が結合されたロードモジュールを前記情報処理装置のメモリにロードし、
前記ロードモジュール内の前記対象モジュールを実行し、
前記メモリにロードされた前記組込みローダが、
前記複数の関数のいずれかを更新した更新後関数を含む更新後モジュールと仮移行命令とを受信後に、前記対象モジュールに対する当該更新後モジュールのパッチ適用の要求を検出し、
前記受信した更新後モジュールを前記メモリにロードし、
前記更新後関数の前記メモリ上の先頭アドレスを第１のアドレスとして前記アドレス保持領域に格納し、
前記プロセッサが、
前記仮移行命令を、前記メモリ上の前記更新後関数に対応する前記対象モジュール内の更新対象関数の先頭アドレスに挿入し、
前記本移行命令は、
前記アドレス保持領域に保持された前記第１のアドレスを前記プロセッサのレジスタに格納し、当該レジスタに格納されたアドレスに対して処理を移行させる命令であり、
前記ロードモジュール内で、前記更新対象関数の先頭アドレスから第２のアドレス分離れた位置に配置されており、
前記仮移行命令は、
前記第２のアドレスを移行先の相対アドレスとして処理を移行させる命令である
動的プログラム更新方法。
【符号の説明】
【０１０４】
１  情報処理装置
１１  受付部
１２  生成部
１３  ロードモジュール
１３１  対象モジュール
１３２  組込みローダ
１３３  アドレス保持領域
１３４  本移行命令
１０００  動的プログラム更新システム
１０００ａ  動的プログラム更新システム
１００  ロードモジュール生成装置
１００ａ  ロードモジュール生成装置
１１０  記憶装置
１１１  オブジェクトモジュール
１１１ａ  オブジェクトモジュール
１１１ｂ  オブジェクトモジュール
１１１ｃ  オブジェクトモジュール
１１２  組込みローダ
１１３  本移行命令群
１１３ａ  JUMP関数
１１３ｂ  JUMP関数
１１３ｃ  JUMP関数
１１４  アドレス保持領域群
１１４ａ  アドレス保持領域
１１４ｂ  アドレス保持領域
１１４ｃ  アドレス保持領域
１１５  ロードモジュール生成プログラム
１１５ａ  ロードモジュール生成プログラム
１１６  ロードモジュール
１１６ａ  パッチ適用済みロードモジュール
１１７  更新後オブジェクトモジュール
１１８１  仮移行命令
１１８２  パッチＤＬＬ
１１８３  パッチリスト
１２０  プロセッサ
１２１  受付部
１２２  生成部
１２２ａ  生成部
１２３  転送部
１２３ａ  転送部
１３０  メモリ
１４０  通信部
Ｎ  ネットワーク
２００  対象システム
２１０  記憶装置
２１１  ＯＳ
２１２  ロードモジュール
２２０  プロセッサ
２２０１  レジスタ群
２２０１ａ  レジスタ
２２０１ｂ  レジスタ
２２０１ｃ  レジスタ
２２１  モジュール処理部
２２２  対象アプリ
２２３  組込みローダ
２３０  メモリ
２４０  通信部
１２２１  ＬＭ生成ツール
ｄ  アドレス距離
３  情報処理装置
３１  メモリ
３２  プロセッサ
３３  ロードモジュール
３３１  対象モジュール
３３２  組込みローダ
３３３  アドレス保持領域
３３４  本移行命令
【図１】
2019219995.tif 000003
【図２】
2019219995.tif 000004
【図３】
2019219995.tif 000005
【図４】
2019219995.tif 000006
【図５】
2019219995.tif 000007
【図６】
2019219995.tif 000008
【図７】
2019219995.tif 000009
【図８】
2019219995.tif 000010
【図９】
2019219995.tif 000011
【図１０】
2019219995.tif 000012
【図１１】
2019219995.tif 000013
【図１２】
2019219995.tif 000014
【図１３】
2019219995.tif 000015
【図１４】
2019219995.tif 000016
【図１５】
2019219995.tif 000017
【図１６】
2019219995.tif 000018