(57)【特許請求の範囲】
【請求項１】
プログラム更新指示に応じて、記憶装置に格納されている複数のプログラムのうち更新対象のプログラムを特定する特定ステップと、
特定された前記更新対象のプログラムに対応し且つ前記複数のプログラムを実行することによって起動される複数のプロセスに含まれるプロセスである入れ替えプロセスと、当該入れ替えプロセスと通信を行ったことがあり且つ前記複数のプロセスに含まれる通信先プロセスとを抽出する抽出ステップと、
特定された前記更新対象のプログラムの新たなプログラムを含む更新データで更新を行ったことに応じて、前記新たなプログラムを動作メモリ上にロードして前記入れ替えプロセスの代わりのプロセスを起動すると共に、抽出された前記通信先プロセスの代わりのプロセスを起動する処理を行う起動ステップと、
前記入れ替えプロセス及び前記通信先プロセスに関連する通信接続関係を切断すると共に、前記起動ステップで起動されたプロセスに関連する通信接続関係を構築する接続再構築ステップと、
前記入れ替えプロセス及び前記通信先プロセスを終了させるプロセス終了ステップと、
を、プロセッサに実行させるためのプログラム。
【請求項２】
前記特定ステップと前記抽出ステップと前記起動ステップと前記接続再構築ステップと前記プロセス終了ステップとが、前記複数のプロセスに含まれるプロセスにより実行される
請求項１記載のプログラム。
【請求項３】
前記抽出ステップが、
前記入れ替えプロセスの子プロセスを前記入れ替えプロセスとして抽出するステップ
を含む請求項１又は２記載のプログラム。
【請求項４】
前記抽出ステップと前記起動ステップと前記接続再構築ステップと前記プロセス終了ステップとのいずれかを実行する、前記複数のプロセスに含まれるプロセスが、前記入れ替えプロセス及び前記通信先プロセスのいずれかに該当しない場合に、前記起動ステップ以降を実施する
請求項１乃至３のいずれか１つ記載のプログラム。
【請求項５】
前記記憶装置が書き換え可能な不揮発性メモリであり、
当該書き換え可能な不揮発性メモリが二重化されており、前記起動ステップにおいて前記更新データにより書き換えられる前記書き換え可能な不揮発性メモリが運用側であり、
前記プロセス終了ステップの後に、前記更新データによって前記書き換え可能な不揮発性メモリの待機側を書き換えるステップ、
をさらに前記プロセッサに実行させるための請求項１乃至４のいずれか１つ記載のプログラム。
【請求項６】
プロセッサと、
複数のプログラムが記録されている書き換え可能な不揮発性メモリと、
動作メモリと、
を含み、
前記複数のプログラムに含まれるプログラムが、
前記不揮発性メモリの書き換え指示に応じて前記複数のプログラムのうち書き換え対象のプログラムを抽出するステップと、
抽出された前記書き換え対象のプログラムに対応し且つ前記複数のプログラムを実行することによって起動される複数のプロセスに含まれるプロセスである入れ替えプロセスと、当該入れ替えプロセスと通信を行ったことがあり且つ前記複数のプロセスに含まれる通信先プロセスとを抽出するステップと、
抽出された前記書き換え対象のプログラムの新たなプログラムを含む更新データで前記書き換え可能な不揮発性メモリを書き換えたことに応じて、前記新たなプログラムを前記動作メモリ上にロードして前記入れ替えプロセスの代わりのプロセスを起動すると共に、抽出された前記通信先プロセスの代わりのプロセスを起動する処理を行う起動ステップと、
前記入れ替えプロセス及び前記通信先プロセスに関連する通信接続関係を切断すると共に、前記起動ステップで起動されたプロセスに関連する通信接続関係を構築するステップと、
前記入れ替えプロセス及び前記通信先プロセスを終了させるステップと、
を前記プロセッサに実行させるためのプログラムである
制御ボード。
【発明の詳細な説明】
【技術分野】
【０００１】
本技術は、実行中のプログラムの更新技術に関する。
【背景技術】
【０００２】
従来、運用面と待機面とに二重化された書き換え可能な不揮発性メモリに記録されているファームウエアを更新する場合には、以下のような手順が行われていた。すなわち、（１）待機面のファームウエアを更新し、（２）待機面を運用面に切り替え、リブートして新たなファームウエアを起動する。そして、（３）待機面に切り替えられた旧運用面のファームウエアを更新する。このように、ファームウエアを更新する場合にはリブートが必要となり、一時的にファームウエアの機能を用いることができなくなる。
【０００３】
このような問題を解決するために、大規模装置では、ファームウエアを記録している書き換え可能な不揮発性メモリを有するシステム制御ボードを二重化する場合がある。すなわち、運用系のシステム制御ボードと待機系のシステム制御ボードとを用意しておき、待機系のシステム制御ボードでファームウエアを更新して更新後のファームウエアを起動した後に、運用系に切り替える。その後、待機系に切り替えられた旧運用系のシステム制御ボードでファームウエアを更新して更新後のファームウエアを起動する。このようにすれば、システム制御ができない時間を無くすことができるが、コストがかかる。
【０００４】
一方、サービスプロセスを停止、消滅させないでプログラムを入れ替えるための第１の従来技術が存在している。この第１の従来技術では、モジュール管理ルーチンが、あるプログラムモジュールが呼び出されている第１の数とあるプログラムモジュールが他のモジュールを呼び出している第２の数と入れ替え指示についてのデータとを管理している。また、モジュール管理ルーチンは、このようなデータに基づき入れ替え指示がなされているモジュールが第１及び第２の数から入れ替え可能と判断した場合には、入れ替え指示がなされているモジュールを更新後のモジュールに入れ替えて新たなサービスプロセスを起動する。しかしながら、サービスプロセス間はモジュール管理ルーチンを挟んだ関数呼び出し等となっており、モジュール更新後に通信プロトコル等が変更されるといった問題点については考慮されていない。またこれらの処理はＯＳ（Operating System）層で行われており、ＯＳ層の改変が必要となる。
【０００５】
また、新旧ファイル間で変更していないモジュールに関してはファイルの入れ替えを行うことなく、そのままサービスを継続させるための第２の従来技術も存在している。具体的には、基本ＯＳ上に仮想サーバＯＳを配置して、仮想サーバＯＳ上にバーチャルホストを起動する構成を採用している。そして、バーチャルホストの仮想クライアントＯＳ上のモジュールの更新を行う際には、新たにバーチャルホストを生成して、仮想クライアントＯＳ上に新たなモジュールを起動させる。その後、仮想サーバＯＳがメッセージの中継先を切り替える処理などを実施する。但し、バーチャルホストを二重化するような手法では負荷が高い。また、仮想サーバＯＳがメッセージの中継を行っているので、バーチャルホスト間では直接通信することはない。すなわち、モジュール更新後に通信プロトコル等が変更されるといった問題点については考慮されていない。また、これらの処理は仮想サーバＯＳ上で行われており、ＯＳの改変が必要となる。
【先行技術文献】
【特許文献】
【０００６】
【特許文献１】特開平８−９５７７１号公報
【特許文献２】特開２００４−２２０１５１号公報
【特許文献３】特開２００７−２２６４３７号公報
【特許文献４】特開平７−１０４９９２号公報
【発明の開示】
【発明が解決しようとする課題】
【０００７】
従って、本技術の目的は、一側面において、リブートせずに実行中のプログラムの更新を行うための新規な技術を提供することである。
【課題を解決するための手段】
【０００８】
本技術の一側面にかかるプログラム更新方法は、（Ａ）プログラム更新指示に応じて、記憶装置に格納されている複数のプログラムのうち更新対象のプログラムを特定する特定ステップと、（Ｂ）特定された更新対象のプログラムに対応し且つ上記複数のプログラムを実行することによって起動される複数のプロセスに含まれるプロセスである入れ替えプロセスと、当該入れ替えプロセスと通信を行ったことがあり且つ上記複数のプロセスに含まれる通信先プロセスとを抽出する抽出ステップと、（Ｃ）特定された更新対象のプログラムの新たなプログラムを含む更新データで更新を行ったことに応じて、新たなプログラムを動作メモリ上にロードして入れ替えプロセスの代わりのプロセスを起動すると共に、抽出された通信先プロセスの代わりのプロセスを起動する処理を行う起動ステップと、（Ｄ）入れ替えプロセス及び通信先プロセスに関連する通信接続関係を切断すると共に、起動ステップで起動されたプロセスの通信接続関係を構築する接続再構築ステップと、（Ｅ）入れ替えプロセス及び通信先プロセスを終了させるプロセス終了ステップとを含む。
【図面の簡単な説明】
【０００９】
【図１】図１は、実施の形態におけるシステム概要図である。
【図２】図２は、不揮発性メモリに記録されているプログラムモジュールの一例を示す図である。
【図３】図３は、プロセスの構成例を示す図である。
【図４】図４は、起動されたプロセスの構成及び関係を表す模式図である。
【図５】図５は、プロセス構成管理テーブルの一例を示す図である。
【図６】図６は、プロセス構成管理テーブルにおいて用いられるグループ分けコードの意味を説明するための図である。
【図７】図７は、通信履歴データの一例を示す図である。
【図８】図８は、本実施の形態における処理フローを示す図である。
【図９】図９は、再起動対象プロセスの選択状態を模式的に示す図である。
【図１０】図１０は、起動されたプロセスの構成及び処理を説明するための模式図である。
【図１１】図１１は、通信切り替え処理の処理フローを示す図である。
【図１２】図１２は、起動されたプロセスの構成及び処理を説明するための模式図である。
【図１３】図１３は、本実施の形態における処理フローを示す図である。
【図１４】図１４は、起動されたプロセスの構成及び処理を説明するための模式図である。
【図１５】図１５は、クリア後の通信履歴データの一例を示す図である。
【発明を実施するための形態】
【００１０】
以下、書き換え可能な不揮発性メモリ（例えばＮＡＮＤフラッシュメモリ）に格納されているファームウエアをアップデートする場合を一例として本実施の形態を説明する。
【００１１】
図１に、本実施の形態におけるハードウエアのシステム構成を示す。本実施の形態に係る例えばサーバは、その本体装置１００と当該本体装置１００に接続されている外付けＩＯ装置２００等とを含む。外付けＩＯ装置２００は必要に応じて接続される。
【００１２】
本体装置１００は、（Ａ）１又は複数のシステムボード１１０と、（Ｂ）本体装置１００の状態表示などのためのパネル１２０と、（Ｃ）装置冷却のための１又は複数のファン（ＦＡＮ）１３０と、（Ｄ）１又は複数の電源１４０と、（Ｅ）ネットワークに接続するための１又は複数のクロスバー１５０と、（Ｆ）１又は複数のＩＯボード１６０と、（Ｇ）本体装置１００全体の制御を行うシステム制御ボード１７０とを有する。
【００１３】
システムボード１１０は、１又は複数のＣＰＵ（Central Processing Unit）と、１又は複数のメモリモジュールである１又は複数のＤＩＭＭ（Dual Inline Memory Module）とを含む。システムボード１１０は、システム制御ボード１７０によって制御されるボードである。
【００１４】
ＩＯボード１６０は、例えば外付けＩＯ装置２００と接続するために用いられたり、１又は複数のＰＣＩ（Peripheral Component Interconnect）ボードを有する場合もある。
【００１５】
システム制御ボード１７０は、プロセッサであるＣＰＵ１７１と、ＣＰＵ１７１で実行されるプログラム（ここではファームウエア）及び処理に係るデータを格納する動作メモリ１７２と、二重化された不揮発性メモリＡ及びＢ（１７３及び１７４）とを有する。不揮発性メモリＡ及びＢ（１７３及び１７４）は、書き換え可能な不揮発性メモリであり、それらのうちのいずれかが、運用面として用いられ、他方が待機面として用いられる。また、不揮発性メモリＡ及びＢ（１７３及び１７４）には、ＣＰＵ１７１で実行されるプログラムが同じように記録されている。また、図示していないが、システム制御ボード１７０には、不揮発性メモリＡ及びＢ（１７３及び１７４）を書き換えるためのデータを取得するための機構が設けられているものとする。
【００１６】
図２に、不揮発性メモリＡ及びＢ（１７３及び１７４）に記録されているプログラム・モジュール例を示す。本例では、不揮発性メモリＡ（１７３）及びＢ（１７４）には、ＩＰＭＩ（Intelligent Platform Management Interface）制御モジュール１７３１、ＵＩ（User Interface）モジュール１７３２、エラー管理モジュール１７３３、ハードウエア制御モジュール１７３４、電源制御モジュール１７３５、ファームアップデートモジュール１７３６、初期化モジュール１７３７、通信制御モジュール１７３８及び他のプログラムモジュールとが記録されている。また、不揮発性メモリＡ及びＢ（１７３及び１７４）には、ＯＳやドライバのためのモジュール、図２に示したモジュールが用いるライブラリのモジュールなども記録されている場合がある。
【００１７】
また、図３に、システム制御ボード１７０を起動させた場合において動作メモリ１７２上にロードされるプログラムのプロセス構成例を示す。
【００１８】
例えば、ＯＳ層には、組み込みＯＳ１７２９と、ハードウエアに対してアクセスするためのハードアクセスドライバ１７３０と、初期ブート制御部１７２０とが含まれる。また、アプリケーション層には、図２に示したモジュール群に対応して、ＩＰＭＩ制御プロセス１７２１と、ＵＩプロセス１７２２と、エラー管理プロセス１７２３と、ハード制御プロセス１７２４と、電源制御プロセス１７２５と、ファームアップデートプロセス１７２６と、初期化プロセス１７２７と、通信制御プロセス１７２８とが含まれる。
【００１９】
本実施の形態では、ＯＳ層には修正を加えずにアプリケーション層だけでリブートを行わずにモジュールの更新を行うものとする。従って、以下の説明においてＯＳ層については最小限の説明のみとする。
【００２０】
また、本実施の形態では、図４に示すように、例えば初期化プロセス１７２７である親プロセスは、ＯＳ層の例えば初期ブート制御部１７２０などによって初期起動時に動作メモリ１７２上にロードされて起動されると、通信制御プロセス１７２８、ファームアップデートプロセス１７２６及びその他のプロセス（図４では子プロセス１乃至３）を子プロセスとして起動させる。子プロセス（例えば子プロセス２）は、孫プロセス１を起動させる場合もある。
【００２１】
親プロセス１７２７は、子プロセスを起動させると、子プロセスの起動状況に応じて、例えば図５に示すようなプロセス構成管理テーブルを、動作メモリ１７２上のデータベース１７１９に生成し、管理する。図５の例では、プロセス構成管理テーブルにおいては、グループ分けコードとプロセス名とが対応付けて登録されるようになっている。グループ分けコードの意味を、例えば図６に示す。図６に示すように、本例では、グループ分けコードはビット単位で意味を持たせている。すなわち、最下位ビットは、モジュール入れ替え時に該当モジュールの再起動が必要か否かを示す。具体的にはビットがオンの場合には再起動が要で、ビットがオフの場合には再起動が不要であることを表している。最下位から２番目のビットは、該当プロセスに子プロセス（親プロセスからみて孫プロセス）があるか否かを表す。具体的にはビットがオンの場合には子プロセスありを表し、ビットがオフの場合には子プロセスなしを表している。すべてのビットがオンの場合には終端を表す。
【００２２】
そうすると、図５に示すようなデータが格納されている場合には、子プロセス１及び３、通信制御プロセス１７２８及びファームアップデートプロセス１７２６は、モジュール入れ替え時には再起動が必要であるプロセスである。子プロセス２は、モジュール入れ替え時には再起動が必要であると共に、子プロセスが存在しているプロセスである。ＵＩプロセスの一種であるＣＬＩ（Command Line Interface）プロセスは、非常駐型のプロセスであり、必要に応じて起動されるプロセスであるため、モジュール入れ替え時に再起動不要のプロセスである。このように非常駐型のプロセスの場合、起動されるとプロセス構成管理テーブルに登録され、終了されるとプロセス構成管理テーブルから削除される。なお、図５中には説明のためＣＬＩプロセスを示しているが、この部分は図４とは対応していない。
【００２３】
また、子プロセスの子プロセス（すなわち親プロセス１７２７から見て孫プロセス）を生成するか否かについては、例えば親プロセス１７２７が把握しているものとする。どのプロセスが孫プロセスであるかについては、子プロセスを基準に図５に示すようなプロセス構成管理テーブルを用意すればよい。
【００２４】
さらに、通信制御プロセス１７２８は、プロセス間の通信接続関係及び通信のやりとりを管理する。そして、以下の処理のために、通信制御プロセス１７２８は、通信履歴データをデータベース１７１９に蓄積する。例えば、図７に示すような通信履歴データを蓄積する。図７の例では、送信側プロセス名と、受信側プロセス名と、回数とを対応付けて格納するようになっている。なお、送信側と受信側とで区別しているので、双方向通信の場合には別のレコードが記録される。以下の処理では、いずれかの通信の有無だけを確認するので、送信側と受信側とを区別せずにプロセスのペア毎に記録するようにしてもよい。
【００２５】
なお、本実施の形態におけるプロセス間通信は、例えばソケットを用いたプロセス間通信である。このソケットを用いたプロセス間通信はよく知られているのでここでは詳しく述べない。また、本例では、プロセス間通信が必要となるプロセス間については、予めソケットによる通信接続関係を構築しておくものとする。そのため、通信接続関係があったとしても図７に示したようなデータ通信の履歴データを確認しないと実際にデータ通信が行われたことがあるか否かを判断することはできない。図７の例では、子プロセス１と子プロセス２との間にはデータ通信が行われたことがあるので、通信履歴データにレコードが記録されている。一方、子プロセス２と子プロセス３とは図４に示すように通信接続関係は存在しているが、図７にレコードがないのでデータ通信は行われていない。
【００２６】
また、図４においては、親プロセス１７２７、通信制御プロセス１７２８及びファームアップデートプロセス１７２６は、互いに通信しながら以下の処理を実施する。図４では、点線はプロセス間通信を表しており、通信制御プロセス１７２８によるプロセス間通信の監視については一点鎖線で示している。
【００２７】
さらに、図４では示していないが、親プロセス１７２７及び通信制御プロセス１７２８以外のプロセスもデータベース１７１９にデータを残す場合もある。
【００２８】
さらに、ファームアップデートプロセス１７２６は、ＵＩプロセス１７２２等からの指示に応じて不揮発性メモリＡ及びＢ（１７３及び１７４）の書き換え指示に係る更新データを、例えばＯＳ層のハードアクセスドライバ１７３０に含まれる不揮発性メモリの書き換えドライバなどに出力して、ファームアップデートを実施させるためのプロセスである。
【００２９】
以下、図８乃至図１５を用いて具体的なファームアップデートの処理について説明する。
【００３０】
まず、ＵＩプロセス１７２２等は、管理者などから不揮発性メモリＡ及びＢ（１７３及び１７４）の更新指示を受け付け、ファームアップデートプロセス１７２６に更新データと共に更新指示を通知する（ステップＳ１）。更新データは、一部のモジュールのみを更新する場合であっても、例えば図２に示すようなモジュールすべてについてのデータを含むものとする。そうすると、ファームアップデートプロセス１７２６は、受け取った更新データから、更新のあったモジュールである入れ替えモジュールを抽出する（ステップＳ３）。例えば、図２に示したような全モジュールについてバイナリコンペアを行い、差分のあるモジュールを入れ替えモジュールとして抽出する。また、改版履歴ファイルなどによって版数管理を行っている場合には、各モジュールについて版数の相違が存在するか否かを判断し、版数に相違があれば入れ替えモジュールとして特定する。
【００３１】
入れ替えモジュールが抽出されると、ファームアップデートプロセス１７２６は、モジュール名（又は入れ替えモジュールに対応するプロセス名）を通信制御プロセス１７２８に通知する。通信制御プロセス１７２８は、入れ替えモジュールに対応するプロセスのプロセス名とデータベース１７１９に格納されているプロセス構成管理テーブル及び通信履歴データとから、再起動対象プロセスを抽出する（ステップＳ５）。
【００３２】
具体的には、入れ替えモジュールに対応するプロセス（以下、入れ替えプロセスと呼ぶ）に、プロセス構成管理テーブルにおいて「再起動要」を表すビットがオンにセットされているか確認し、「再起動要」を表すビットがオンにセットされていれば再起動対象プロセスとして特定する。一方、「再起動要」を表すビットがオフにセットされていれば、再起動対象プロセスとして特定しない。例えば、ＣＬＩプロセスのような非常駐プロセスの場合には、必要なときに起動されるので、次回起動時に更新が反映されればよいものとする。
【００３３】
さらに、通信履歴データから、入れ替えプロセスを送信側又は受信側とするレコードが記録されているか確認して、対応する受信側プロセス又は送信側プロセスである通信先プロセスを、再起動対象プロセスとして特定する。既に通信が行われているプロセス間通信については、モジュールの更新によってプロトコルなどが変化したりするとソケットを付け替えるだけでは適切なプロセス間通信が行えなくなる場合があるためである。一方、通信接続関係があってもデータ通信が行われていなければ、通信接続関係を設定し直すだけで問題がないので、通信履歴データに通信履歴レコードがない接続先プロセスについては、再起動対象プロセスとして特定することはない。
【００３４】
なお、ダイナミックライブラリを使用しており、ダイナミックライブラリが入れ替えモジュールである場合には、該当ライブラリをリンクしているプロセスを、再起動対象プロセスとして特定するようにする。このため例えばデータベース１７１９にはダイナミックライブラリとプロセスとのリンク関係を表すデータを格納しておく。通信制御プロセス１７２８は、このようなデータを確認して再起動対象プロセスを特定する。
【００３５】
また、通信制御プロセス１７２８は、プロセス構成管理テーブルにおいて、再起動対象プロセスに子プロセス（すなわち孫プロセス）が存在することを表すビットがオンにセットされているか確認する。再起動対象プロセスに子プロセスが存在することを表すビットがオンにセットされている場合には、孫プロセスについても再起動対象プロセスに特定する。孫プロセスを有する子プロセスについてプロセス構成管理テーブルをデータベース１７１９に格納しておけば孫プロセスを特定できる。
【００３６】
例えば、子プロセス２が入れ替えプロセスとして特定され、図５及び図７に示すデータがデータベース１７１９に格納されていると、図９においてハッチングを付して示すように、子プロセス１及び２と孫プロセス１とが再起動対象プロセスとして抽出される。なお、子プロセス２と子プロセス３とは点線で示すように通信接続関係が設定されているが、図７の通信履歴データには通信した履歴がないので、後に設定し直すだけにする。
【００３７】
図８の処理の説明に戻って、通信制御プロセス１７２８は、再起動対象プロセスが、親プロセス１７２７又は通信制御プロセス１７２８を含むか判断する（ステップＳ７）。親プロセス１７２７又は通信制御プロセス１７２８が再起動対象プロセスである場合には、大幅な変更であり、本実施の形態にかかる処理を適切に実行できなくなる。従って、全プロセスの再起動（すなわちリブート）を含む従来の更新処理を実施する（ステップＳ９）。例えば、待機面である不揮発性メモリＢ（１７４）の更新を行った後に、待機面を運用面に切り替えた上でリブートし、その後待機面に切り替えられた旧運用面を更新する。ステップＳ９については従来と同じであり、他の手法を採用してもよい。処理は端子Ａを介して終了する。
【００３８】
なお、入れ替えプロセスがファームアップデートプロセス１７２６である場合もある。ファームアップデートプロセス１７２６は、本実施の形態における以下の処理において一定の役割を果たしているが、通信制御プロセス１７２８及び親プロセス１７２７よりもその役割及び関係機能は小さい。従って、入れ替えプロセスがファームアップデートプロセス１７２６であっても、ステップＳ９へは移行しないようになっている。
【００３９】
一方、再起動対象プロセスが、親プロセス１７２７又は通信制御プロセス１７２８を含まない場合には、通信制御プロセス１７２８は、再起動対象プロセスが「空」であるか確認する（ステップＳ１１）。ＣＬＩプロセスのような非常駐プロセスのみが入れ替えプロセス又は通信先プロセスである場合には、モジュールの更新は行うことになるが、再起動対象プロセスが「空」となってしまう。そこで、再起動対象プロセスが「空」である場合には、通信制御プロセス１７２８は、ファームアップデートプロセス１７２６に、運用面の不揮発性メモリＡ（１７３）の更新を行わせ、その後待機面の不揮発性メモリＢ（１７４）の更新を行わせる（ステップＳ１３）。なお、この逆であっても問題は発生しない。いずれにせよ、プロセスの再起動は行わずに、次回起動時に新たなモジュールで起動されるようにする。処理は端子Ａを介して終了する。
【００４０】
一方、再起動対象プロセスが「空」ではない場合には、通信制御プロセス１７２８は、ファームアップデートプロセス１７２６に対して運用面の不揮発性メモリＡ（１７３）の更新を指示する。また、通信制御プロセス１７２８は、親プロセス１７２７に、再起動対象プロセスのプロセス名を通知する。ファームアップデートプロセス１７２６は、通信制御プロセス１７２８からの指示に応じて、更新データによる運用面の不揮発性メモリＡ（１７３）の更新を、ＯＳ層の例えばハードアクセスドライバ１７３０等に命じて実施する（ステップＳ１５）。このステップ自体は従来と同じであるのでこれ以上は説明しない。
【００４１】
運用面の不揮発性メモリＡ（１７３）の更新が完了すると、親プロセス１７２７に対して更新完了を通知する。親プロセス１７２７は、更新完了の通知に応じて、再起動対象プロセスの新たなプロセスを追加で起動する（ステップＳ１７）。模式的に図１０に示すように、ファームアップデートプロセス１７２６から親プロセス１７２７へ更新完了が通知されると（ステップ（１））、入れ替えモジュール及び入れ替えプロセス以外の再起動対象プロセスに対応するモジュールを動作メモリ１７２にロードして、親プロセス１７２７は再起動対象プロセスの新たなプロセス、すなわち子プロセス１、子プロセス２及び孫プロセス１の新たなプロセスを追加で起動する（ステップ（２））。この起動が完了すれば、図１０に示すようなプロセス起動状態をデータベース１７１９のプロセス構成管理テーブルに反映させる。また、この起動が完了すれば、親プロセス１７２７は通信制御プロセス１７２８に対して起動完了通知を出力する（ステップ（３））。
【００４２】
通信制御プロセス１７２８は、親プロセス１７２７から起動完了通知を受け取ると、通信切り替え処理を実施する（ステップＳ１９）。そして端子Ｂを介して図１３の処理に移行する。なお、通信切り替え処理については、図１１及び図１２を用いて説明する。
【００４３】
通信制御プロセス１７２８は、再起動対象プロセスの新たなプロセスの起動完了を、親プロセス１７２７から通知されると（ステップＳ２１）、再起動対象プロセスのいずれかが現在通信中であるか確認する（ステップＳ２３）。通信制御プロセス１７２８は、プロセス間通信を監視する機能を有しているので、再起動対象プロセスのいずれかが現在通信中であるかは確認可能である。通信中であれば、通信制御プロセス１７２８は、通信が完了するまで待機する（ステップＳ２５）。通信中に強制的に通信接続関係を切断するとプロセスの処理に悪影響がある可能性があるためである。
【００４４】
すべての再起動対象プロセスが通信を行っていない場合又はステップＳ２５で通信終了が検出された後に、通信制御プロセス１７２８は、再起動対象プロセスに関連する通信接続関係を切断させる（ステップＳ２７）。図１２の例では、点線で示す範囲の通信接続関係、すなわち、子プロセス１と子プロセス２との間の通信接続関係、子プロセス２と子プロセス３との通信接続関係、子プロセス１と親プロセス１７２７との通信接続関係、子プロセス１と孫プロセス１との通信接続関係、子プロセス３と孫プロセス１との通信接続関係を切断する（ステップ（４））。本ステップの切断は、例えば接続ポートをクローズすることによって行われる。
【００４５】
そして、通信制御プロセス１７２８は、再起動対象プロセスの新たなプロセスに関連する通信接続関係を構築し直す（ステップＳ２９）。図１２の例では、ハッチングが付された新たなプロセス間の通信接続関係及びそれ以外のプロセスとの通信接続関係を構築し直す（ステップ（５））。本実施の形態において取り扱うモジュールから生成されるプロセスの構成は変化せず、そのため通信制御プロセス１７２８は、プロセス間の通信接続関係をすべて把握しているものとする。プロセスの構成が大幅に変更される場合には、通信制御プロセス１７２８は、プロセス間の通信接続関係を把握していないことになるので、通信制御プロセス１７２８自身も入れ替えプロセスになるものとする。従って、ステップＳ２９は、通信制御プロセス１７２８が把握している範囲で通信接続関係が新たなプロセスに関連して復元される。具体的には、新子プロセス１と親プロセス１７２７との間の通信接続関係を構築する。また、新子プロセス１と新子プロセス２との間の通信接続関係を構築する。さらに、新子プロセス２と子プロセス３との間の通信接続関係を構築する。そして、新子プロセス１と新孫プロセス１との間の通信接続関係及び子プロセス３と新孫プロセス１との間の通信接続関係を構築する。なお、本ステップにおける通信接続関係の構築は、例えば接続ポートのオープンによって行われる。
【００４６】
その後、通信制御プロセス１７２８は、通信処理再開を確認する（ステップＳ３１）。例えば、テスト通信を行わせたり、ＪＯＢを実際に送信させたりする。これで問題がなければ、通信制御プロセス１７２８は、親プロセス１７２７に対して通信再開を通知する（ステップＳ３３）。図１２に模式的に示すように、通信制御プロセス１７２８から、親プロセス１７２７に通信再開が通知される（ステップ（６））。
【００４７】
処理は端子Ｂを介して図１３の処理に移行する。通信再開が通知された親プロセス１７２７は、再起動対象プロセス（すなわち旧プロセス）の終了を指示する（ステップＳ４１）。図１４に模式的に示すように、古い子プロセス１、古い子プロセス２及び古い孫プロセス１は、消滅させられる（ステップ（７））。そうすると、親プロセス１７２７は、ファームアップデートプロセス１７２６に対して、待機面の不揮発性メモリＢ（１７４）を更新するように指示する（ステップ（８））。
【００４８】
ファームアップデートプロセス１７２６は、親プロセス１７２７からの指示に応じて、待機面の不揮発性メモリＢ（１７４）の更新を更新データで行うように、例えばＯＳ層のハードアクセスドライバ１７３０などに命じて実施する（ステップＳ４３）。このステップの処理自体は、従来と同じであるからこれ以上述べない。
【００４９】
また、親プロセス１７２７は、自らの処理完了を通信制御プロセス１７２８に通知する（ステップ（９））。通信制御プロセス１７２８は、通信履歴データをクリアする（ステップＳ４５及びステップ（１０））。例えば図７に示したデータは、例えば図１５に示すように「空」の状態になる。これによって、次回本処理を実行する際に、プロセス間通信が実際に行われたか否かを適切に判断できるようになる。
【００５０】
このような処理を実施すれば、通信制御プロセス１７２８や親プロセス１７２７が再起動対象プロセスとならない限り、プロセス全体を再起動させるようなリブートは不要となる。すなわち、完全に運用を停止して、例えばシステム制御ボード１７０の機能である本体装置１００の監視ができなくなるような事態を回避できる可能性が高くなる。また、従来のアップデート方式よりは更新のために必要な時間も短縮されており、処理の遅延などが発生しなくなっている。さらに、ＯＳ層に変更を加える必要がない。すなわち、アプリケーション層のモジュール及びプロセスのみで実現することが可能であり、ＯＳ層との親和性を意識する必要がない。
【００５１】
以上本技術の実施の形態を説明したが、本技術はこれに限定されるものではない。例えば、初期化プロセスが親プロセスである例を示したが、他の１又は複数のプロセスが上で述べた処理を行うようにしてもよい。
【００５２】
さらに、本技術は不揮発性メモリに記録されているファームウェアについてだけではなく、例えばハードディスクドライブのような装置に格納されているプログラムについても適用可能である。このような場合には、更新対象プログラムのデータのみが更新データとして入力される場合もある。
【００５３】
さらに、本技術の適用対象は、サーバのような装置だけではなく、例えば多数のハードディスクなどを備えたディスク装置を監視する制御ボードなどについても適用可能である。
【００５４】
上で述べた実施の形態をまとめると以下のようになる。
【００５５】
本実施の形態に係るプログラムは、プロセッサに、（Ａ）プログラム更新指示に応じて、記憶装置に格納されている複数のプログラムのうち更新対象のプログラムを特定する特定ステップと、（Ｂ）特定された更新対象のプログラムに対応し且つ上記複数のプログラムを実行することによって起動される複数のプロセスに含まれるプロセスである入れ替えプロセスと、当該入れ替えプロセスと通信を行ったことがあり且つ上記複数のプロセスに含まれる通信先プロセスとを抽出する抽出ステップと、（Ｃ）特定された更新対象のプログラムの新たなプログラムを含む更新データで更新を行ったことに応じて、新たなプログラムを動作メモリ上にロードして入れ替えプロセスの代わりのプロセスを起動すると共に、抽出された通信先プロセスの代わりのプロセスを起動する処理を行う起動ステップと、（Ｄ）入れ替えプロセス及び通信先プロセスに関連する通信接続関係を切断すると共に、起動ステップで起動されたプロセスに関連する通信接続関係を構築する接続再構築ステップと、（Ｅ）入れ替えプロセス及び通信先プロセスを終了させるプロセス終了ステップとを実行させるためのプログラムである。
【００５６】
このようにすれば、上記複数のプロセスが実行されている装置をリブートすることなくプログラムの更新を反映させることができるようになる。
【００５７】
また、上記特定ステップと上記抽出ステップと上記起動ステップと上記接続再構築ステップと上記プロセス終了ステップとが、上記複数のプロセスに含まれるプロセスにより実行されるようにしてもよい。上記複数のプロセス以外の外部プロセスからプロセスの入れ替えを行うのではなく、自らの管理範囲について自らプロセスの入れ替えを行うものである。特に、上記複数のプロセスがアプリケーション層のプロセスであれば、ＯＳ層などに変更を加えることなく上記処理を行うことができるようになる。
【００５８】
さらに、上で述べた抽出ステップが、入れ替えプロセスの子プロセスを入れ替えプロセスとして抽出するステップを含むようにしてもよい。入れ替えプロセスに依存するプロセスも再起動させて適切に動作させるためである。なお、非常駐プロセスについては、再起動対象プロセスから除外するようにしてもよい。非常駐プロセスであれば、必要に応じて起動されるため、次回起動時にプログラムの更新が反映されれば十分なためである。
【００５９】
また、上記抽出ステップと上記起動ステップと上記接続再構築ステップと上記プロセス終了ステップとのいずれかを実行する、上記複数のプロセスに含まれるプロセスが、上記入れ替えプロセス及び上記通信先プロセスのいずれかに該当しない場合に、上記起動ステップ以降を実施するようにしてもよい。反対の場合には、大規模な更新であるから全プロセスを再起動させることが好ましい。
【００６０】
さらに、上で述べた記憶装置が書き換え可能な不揮発性メモリである場合もある。このような場合、書き換え可能な不揮発性メモリが二重化されている場合もある。そして、上記起動ステップにおいて更新データにより書き換えられる書き換え可能な不揮発性メモリが運用側であり、プロセス終了ステップの後に、更新データによって書き換え可能な不揮発性メモリの待機側を書き換えるようにしてもよい。不揮発性メモリが二重化されている場合には、このような順番で更新することによって、適切に処理を継続させることができるようになる。
【００６１】
本実施の形態における制御ボードは、プロセッサと、複数のプログラムが記録されている書き換え可能な不揮発性メモリと、動作メモリとを備えている。そして、上記複数のプログラムに含まれるプログラムが、（Ａ）不揮発性メモリの書き換え指示に応じて上記複数のプログラムのうち書き換え対象のプログラムを抽出するステップと、（Ｂ）抽出された書き換え対象のプログラムに対応し且つ上記複数のプログラムを実行することによって起動される複数のプロセスに含まれるプロセスである入れ替えプロセスと、当該入れ替えプロセスと通信を行ったことがあり且つ上記複数のプロセスに含まれる通信先プロセスとを抽出するステップと、（Ｃ）抽出された書き換え対象のプログラムの新たなプログラムを含む更新データで書き換え可能な不揮発性メモリを書き換えたことに応じて、新たなプログラムを動作メモリ上にロードして入れ替えプロセスの代わりのプロセスを起動すると共に、抽出された通信先プロセスの代わりのプロセスを起動する処理を行う起動ステップと、（Ｄ）入れ替えプロセス及び通信先プロセスに関連する通信接続関係を切断すると共に、起動ステップで起動されたプロセスに関連する通信接続関係を構築するステップと、（Ｅ）入れ替えプロセス及び通信先プロセスを終了させるステップとを上記プロセッサに実行させるものである。
【００６２】
このような制御ボードの動作を停止させることなく、プログラムの更新を反映させることができるようになる。
【００６３】
なお、上記処理をプロセッサに行わせるためのプログラムを作成することができ、当該プログラムは、例えばフレキシブルディスク、ＣＤ−ＲＯＭ、光磁気ディスク、半導体メモリ、ハードディスク等のコンピュータ読み取り可能な記憶媒体又は記憶装置に格納される。尚、中間的な処理結果はメインメモリ等の記憶装置に一時保管される。
【図１】
0005387767.tif 000002
【図２】
0005387767.tif 000003
【図３】
0005387767.tif 000004
【図４】
0005387767.tif 000005
【図５】
0005387767.tif 000006
【図６】
0005387767.tif 000007
【図７】
0005387767.tif 000008
【図８】
0005387767.tif 000009
【図９】
0005387767.tif 000010
【図１０】
0005387767.tif 000011
【図１１】
0005387767.tif 000012
【図１２】
0005387767.tif 000013
【図１３】
0005387767.tif 000014
【図１４】
0005387767.tif 000015
【図１５】
0005387767.tif 000016