(57)【要約】【課題】  コンピュータが提供するサービスを継続しながらソフトウェアを更新する。【解決手段】  新しいソフトウェアに切り換える前に古いソフトウェアで生成されたパラメータを新しいソフトウェアが使用できるよう、また古いソフトウェアを実行しながらフォーマット変換する。また、再起動を必要とした場合、新しいソフトウェアで稼動することができるよう、新しいプログラム取得の際、サービスを提供しながらＨＤＤやフラッシュメモリなどの不揮発性メディア１０２に書き込む。【選択図】  図１
2005092708.tif 000002
【特許請求の範囲】
【請求項１】
メモリ上に旧プログラムコードを格納するための第１のプログラムコードエリアと、ＣＰＵが前記旧プログラムコードを実行することにより生成する旧グローバルデータを格納するための第１のグローバルデータエリアと、ソフトウェア更新の際に必要とするグローバルデータ変換コードを格納するためのグローバルデータ変換コードエリアと、プログラムコードが使用するためのスタックエリアとを確保するとともに、新プログラムコードを格納するための第２のプログラムコードエリアと、前記ＣＰＵが前記新プログラムコードを実行することにより生成する新グローバルデータを格納するための第２のグローバルデータエリアとを確保する手段と、
前記ＣＰＵが前記旧プログラムコード、前記旧グローバルデータ及び前記スタックエリアを使用して稼動している状態において、前記旧プログラムコードを実行しながら外部から転送される前記新プログラムコード及び前記グローバルデータ変換コードを取得して、これらをそれぞれ前記第２のプログラムコードエリアと前記グローバルデータ変換コードエリアに格納する手段と、
前記格納を終了した時点で前記グローバルデータ変換コードを実行して、前記第１のグローバルデータエリア上の前記旧グローバルデータを前記新プログラムコードが実行可能なフォーマットに変換して前記新グローバルデータを生成し、これを前記第２のグローバルデータエリアに格納する手段と、
前記格納を終了した時点でスタックポインタを初期値にリセットして前記新プログラムコードにジャンプし、前記新グローバルデータを使用して前記旧プログラムコードにおいて行われていたサービスを引き続き実行する手段とを、
備えたソフトウェア更新システム。
【請求項２】
起動時に不揮発性メディア上のプログラムコードを揮発性メモリに展開した後、前記揮発性メモリ上のプログラムコードを実行するコンピュータのソフトウェア更新システムにおいて、
前記不揮発性メディア上に旧プログラムコードを格納するための第１のプログラムコードエリアと、新プログラムコードを格納するための第２のプログラムコードエリアと、コンピュータの起動の際にどちらのプログラムコードを実行するかを管理するフラグを格納するフラグエリアを確保する手段と、
前記揮発性メモリ上に前記旧プログラムコードを格納するための第３のプログラムコードエリアと、ＣＰＵが前記旧プログラムコードを実行することにより生成する旧グローバルデータを格納するための第１のグローバルデータエリアと、ソフトウェア更新の際に必要とするグローバルデータ変換コードを格納するためのグローバルデータ変換コードエリアと、プログラムコードが使用するスタックエリアと、前記新プログラムコードを格納するための第４のプログラムコードエリアと、前記ＣＰＵが前記新プログラムコードを実行することにより生成する新グローバルデータを格納するための第２のグローバルデータエリアを確保する手段と、
前記ＣＰＵが前記揮発性メモリ上の旧プログラムコード、前記旧グローバルデータ及び前記スタックエリアを使用して稼動している状態において、前記旧プログラムコードを実行しながら外部から転送される前記新プログラムコード及び前記グローバルデータ変換コードを取得して、これらをそれぞれ前記第４のプログラムコードエリアと前記グローバルデータ変換コードエリアに格納する手段と、
前記格納を終了した時点で前記第４のプログラムコードエリア上の新プログラムコードを前記不揮発性メモリ上の第２のプログラムコードエリアに格納するとともに、次回のコンピュータ起動の際に新プログラムコードエリアを実行するように前記フラグを切り換えて格納する手段と、
前記格納を終了した時点で前記グローバルデータ変換コードを実行して、前記第１のグローバルデータエリア上の前記旧グローバルデータを前記新プログラムコードが実行可能なフォーマットに変換して前記新グローバルデータを生成してこれを前記第２のグローバルデータエリアに格納する手段と、
前記格納を終了した時点でスタックポインタを初期値にリセットして前記新プログラムコードにジャンプし、前記新グローバルデータを使用して前記旧プログラムコードにおいて行われていたサービスを引き続き実行する手段と、
コンピュータの起動時に前記不揮発性メディア上のフラグを参照し、指定されたプログラムコードを前記揮発性メモリに展開した後、前記揮発性メモリ上のプログラムコードを実行する手段とを、
備えたソフトウェア更新システム。
【請求項３】
メモリ上に旧プログラムコードを格納するための第１のプログラムコードエリアと、ＣＰＵが前記旧プログラムコードを実行することにより生成する旧グローバルデータを格納するための第１のグローバルデータエリアと、ソフトウェア更新の際に必要とするグローバルデータ変換コードを格納するためのグローバルデータ変換コードエリアと、プログラムコードが使用するためのスタックエリアとを確保するとともに、新プログラムコードを格納するための第２のプログラムコードエリアと、前記ＣＰＵが前記新プログラムコードを実行することにより生成する新グローバルデータを格納するための第２のグローバルデータエリアとを確保するステップと、
前記ＣＰＵが前記旧プログラムコード、前記旧グローバルデータ及び前記スタックエリアを使用して稼動している状態において、前記旧プログラムコードを実行しながら外部から転送される前記新プログラムコード及び前記グローバルデータ変換コードを取得して、これらをそれぞれ前記第２のプログラムコードエリアとグローバルデータ変換コードエリアに格納するステップと、
前記格納を終了した時点で前記グローバルデータ変換コードを実行して、前記第１のグローバルデータエリア上の前記旧グローバルデータを前記新プログラムコードが実行可能なフォーマットに変換して前記新グローバルデータを生成し、これを前記第２のグローバルデータエリアに格納するステップと、
前記格納を終了した時点でスタックポインタを初期値にリセットして前記新プログラムコードにジャンプし、前記新グローバルデータを使用して前記旧プログラムコードにおいて行われていたサービスを引き続き実行するステップとを、
備えたソフトウェア更新方法。
【請求項４】
起動時に不揮発性メディア上のプログラムコードを揮発性メモリに展開した後、前記揮発性メモリ上のプログラムコードを実行するコンピュータのソフトウェア更新方法において、
前記不揮発性メディア上に旧プログラムコードを格納するための第１のプログラムコードエリアと、新プログラムコードを格納するための第２のプログラムコードエリアと、コンピュータの起動の際にどちらのプログラムコードを実行するかを管理するフラグを格納するフラグエリアを確保するステップと、
前記揮発性メモリ上に前記旧プログラムコードを格納するための第３のプログラムコードエリアと、ＣＰＵが前記旧プログラムコードを実行することにより生成する旧グローバルデータを格納するための第１のグローバルデータエリアと、ソフトウェア更新の際に必要とするグローバルデータ変換コードを格納するためのグローバルデータ変換コードエリアと、プログラムコードが使用するスタックエリアと、前記新プログラムコードを格納するための第４のプログラムコードエリアと、前記ＣＰＵが前記新プログラムコードを実行することにより生成する新グローバルデータを格納するための第２のグローバルデータエリアを確保するステップと、
前記ＣＰＵが前記揮発性メモリ上の旧プログラムコード、前記旧グローバルデータ及び前記スタックエリアを使用して稼動している状態において、前記旧プログラムコードを実行しながら外部から転送される前記新プログラムコード及び前記グローバルデータ変換コードを取得して、これらをそれぞれ前記第４のプログラムコードエリアと前記グローバルデータ変換コードエリアに格納するステップと、
前記格納を終了した時点で前記第４のプログラムコードエリア上の前記新プログラムコードを前記不揮発性メモリ上の前記第２のプログラムコードエリアに格納するとともに、次回のコンピュータ起動の際に前記新プログラムコードを実行するように前記フラグを切り換えて格納するステップと、
前記格納を終了した時点で前記グローバルデータ変換コードを実行して、前記第１のグローバルデータエリア上の前記旧グローバルデータを前記新プログラムコードが実行可能なフォーマットに変換して前記新グローバルデータを生成してこれを前記第２のグローバルデータエリアに格納するステップと、
前記格納を終了した時点でスタックポインタを初期値にリセットして前記新プログラムコードにジャンプし、前記新グローバルデータを使用して前記旧プログラムコードにおいて行われていたサービスを引き続き実行するステップと、
コンピュータの起動時に前記不揮発性メディア上の前記フラグを参照し、指定されたプログラムコードを前記揮発性メモリに展開した後、前記揮発性メモリ上のプログラムコードを実行するステップとを、
備えたソフトウェア更新方法。
【請求項５】
メモリ上に旧プログラムコードを格納するための第１のプログラムコードエリアと、ＣＰＵが前記旧プログラムコードを実行することにより生成する旧グローバルデータを格納するための第１のグローバルデータエリアと、ソフトウェア更新の際に必要とするグローバルデータ変換コードを格納するためのグローバルデータ変換コードエリアと、プログラムコードが使用するためのスタックエリアとを確保するとともに、新プログラムコードを格納するための第２のプログラムコードエリアと、前記ＣＰＵが前記新プログラムコードを実行することにより生成する新グローバルデータを格納するための第２のグローバルデータエリアとを確保するステップと、
前記ＣＰＵが前記旧プログラムコード、前記旧グローバルデータ及び前記スタックエリアを使用して稼動している状態において、前記旧プログラムコードを実行しながら外部から転送される前記新プログラムコード及び前記グローバルデータ変換コードを取得して、これらをそれぞれ前記第２のプログラムコードエリアとグローバルデータ変換コードエリアに格納するステップと、
前記格納を終了した時点で前記グローバルデータ変換コードを実行して、前記第１のグローバルデータエリア上の前記旧グローバルデータを前記新プログラムコードが実行可能なフォーマットに変換して前記新グローバルデータを生成し、これを前記第２のグローバルデータエリアに格納するステップと、
前記格納を終了した時点でスタックポインタを初期値にリセットして前記新プログラムコードにジャンプし、前記新グローバルデータを使用して前記旧プログラムコードにおいて行われていたサービスを引き続き実行するステップとを、
コンピュータに処理させるコンピュータプログラム。
【請求項６】
起動時に不揮発性メディアからプログラムコードを揮発性メモリに展開した後、前記揮発性メモリ上のプログラムコードを実行するコンピュータのプログラムにおいて、
前記不揮発性メディア上に旧プログラムコードを格納するための第１のプログラムコードエリアと、新プログラムコードを格納するための第２のプログラムコードエリアと、コンピュータの起動の際にどちらのプログラムコードを実行するかを管理するフラグを格納するフラグエリアを確保するステップと、
前記揮発性メモリ上に前記旧プログラムコードを格納するための第３のプログラムコードエリアと、ＣＰＵが前記旧プログラムコードを実行することにより生成する旧グローバルデータを格納するための第１のグローバルデータエリアと、ソフトウェア更新の際に必要とするグローバルデータ変換コードを格納するためのグローバルデータ変換コードエリアと、プログラムコードが使用するスタックエリアと、前記新プログラムコードを格納するための第４のプログラムコードエリアと、前記ＣＰＵが前記新プログラムコードを実行することにより生成する新グローバルデータを格納するための第２のグローバルデータエリアを確保するステップと、
前記ＣＰＵが前記揮発性メモリ上の旧プログラムコード、前記旧グローバルデータ及び前記スタックエリアを使用して稼動している状態において、前記旧プログラムコードを実行しながら外部から転送される前記新プログラムコード及び前記グローバルデータ変換コードを取得してこれらをそれぞれ前記第４のプログラムコードエリアと前記グローバルデータ変換コードエリアに格納するステップと、
前記格納を終了した時点で前記第４のプログラムコードエリア上の前記新プログラムコードを前記不揮発性メモリ上の前記第２のプログラムコードエリアに格納するとともに、次回のコンピュータ起動の際に前記新プログラムコードを実行するように前記フラグを切り換えて格納するステップと、
前記格納を終了した時点で前記グローバルデータ変換コードを実行して、前記第１のグローバルデータエリア上の前記旧グローバルデータを前記新プログラムコードが実行可能なフォーマットに変換して前記新グローバルデータを生成してこれを前記第２のグローバルデータエリアに格納するステップと、
前記格納を終了した時点でスタックポインタを初期値にリセットして前記新プログラムコードにジャンプし、前記新グローバルデータを使用して前記旧プログラムコードにおいて行われていたサービスを引き続き実行するステップと、
コンピュータの起動時に前記不揮発性メディア上の前記フラグを参照し、指定されたプログラムコードを前記揮発性メモリに展開した後、前記揮発性メモリ上のプログラムコードを実行するステップとを、
コンピュータに処理させるコンピュータプログラム。
【発明の詳細な説明】
【技術分野】
【０００１】
本発明は、連続稼動を必要とするコンピュータ及びコンピュータネットワークシステムにおいて、サービスを停止させることなく、ソフトウェアを更新するためのソフトウェア更新システム及びソフトウェア更新方法並びにコンピュータプログラムに関する。
【背景技術】
【０００２】
現在、コンピュータ及びコンピュータシステムは様々な生活シーンにおいて利用されている。例えば、経済社会においてはｅコマースなどの電子決済、あるいは航空や鉄道における管制システム、あるいは電話や公共サービスなどのライフラインにおける管理にも活用されている。このような大規模なコンピュータシステムの場合は、統合管理を行う中央制御コンピュータからインターネットや専用線を用いてソフトウェアを各端末にダウンロードする手段が多く採られ、これにより設備コストや人件費を押さえることを可能としている。
【０００３】
具体的には、中央制御コンピュータは保守モード切換え要求を端末に発し、端末はこれを受け付けて通常サービスモードから保守モードに切り換えることにより新しいソフトウェアの受信を行い、その後端末はＨＤＤやフラッシュメモリなどに書き込んだ後、再起動する仕組みとなっている。
【０００４】
これらを身近に体験する機会としては、家庭用ＰＣのＯＳをアップデートする際に、インターネットを経由してアップデートＷｅｂにアクセスし、バージョンアップされたＯＳプログラムをＰＣ側に転送するサービスが挙げられる。なお、ＯＳをアップデートする際には、ほとんどの場合、自動的にＰＣが再起動されるようになっている。なお、再起動しなければならない理由として、サービス上で扱うデータはファイルシステムなどで管理することにより、古いソフトウェアと新しいソフトウェア間で互換性は確保されるが、新しいソフトウェア・プログラムと古いソフトウェア・プログラムで内部的に生成するパラメータの数やフォーマットが異なることにより、サービス中に古いソフトウェアから新しいソフトウェアに切り換えてしまうと、直前まで行っていたサービス状態を引き継ぐことができないためである。
【０００５】
ここで、ＯＳやアプリケーションなどのソフトウェアを更新する従来の技術として、オンライン状態で新たなロードモジュール（ソフトウェア）を外部から書き込んだ後に初期設定回路を起動し、新たなロードモジュールで動作する方法が提案されている（下記の特許文献１参照）。
【０００６】
また目的が同様である他の従来例として、新ファームウェアをダウンロードし、フラッシュメモリに書き込み、新ファームウェアのコードで稼動させる際に、コードサイズとＲＯＭ及びＲＡＭのサイズを比較してどちらのメモリで稼動させるかを選択することで効率的なリソース利用を実現する方法も提案されている（下記の特許文献２参照）。
【０００７】
また、動作中においてコードを転送する従来の手法としては、ある動作中のロボットの機能／行動同一性を一方のロボットに転送し、同様の行動を行わせる技術がある（下記の特許文献３参照）。
【特許文献１】特開平７−１３７４９号公報（要約、請求項１）
【特許文献２】特開２０００−２４２５０３号公報（段落００５３、００５７）
【特許文献３】特開２００１−１９１２７７号公報（要約）
【発明の開示】
【発明が解決しようとする課題】
【０００８】
しかしながら、家庭用ＰＣにおいてはプログラムの更新後に再起動することが許されるが、上述した公共のコンピュータシステムにおいては一時でもシステムをストップさせることが許されないサービスも多く、保守や機能の追加の際のソフトウェアの更新や改善のための作業を慎重に進めなければならない。そのため、ソフトウェア更新の対象となる端末が現在利用されておらず、アイドル状態になっているか否かを調査してから保守モードに切り換えなければならず、ソフトウェア更新中及び再起動中はサービスを提供することができない。また、端末を複数台用意して１台ずつ保守モードに切り換えて更新する手法も採られるが、設備投資が大きくなるという問題も生じる。
【０００９】
具体例としては、携帯電話やＰＨＳなどのシステムにおいて基地局内部のソフトウェアを更新する際は、まず回線が使用されていないかを確認してから保守モードに入り、ソフトウェアを更新し、再起動を行って通常のサービスに復帰するが、保守モードに入ってから再起動が終了するまでは、その付近にいる利用者は携帯電話やＰＨＳで電話をかけることができない。更に重大な問題として、通常は１台の基地局は複数の回線を収容しているため、複数の顧客が順次回線を使用することで、基地局が永久に接続サービスを続けなければならず、ソフトウェアの更新ができない可能性も考えられる。
【００１０】
また、特許文献１では、新たなロードモジュールで起動する場合は初期設定回路という特別な回路が必要であり、さらに初期設定回路の起動からアプリケーションの再開動作の終了までの時間はオンライン状態を中断させなければならず、直前まで行っていたサービス状態を引き継ぐことができない。
【００１１】
また、特許文献２では、新ファームウェアのダウンロード時はそのコードを実使用イメージでＲＡＭ上に展開していない。そのため、ＲＡＭで起動させる場合は再起動が必要であり、これも直前まで行っていたサービス状態を引き継ぐことができない（明細書内００５３、００５７項参照）。
【００１２】
また、特許文献３では、転送するコードは、システムの永続的部分から分離して区別された、“エージェント”というシステムの動作中に変更される情報の集合である。すなわち、これは稼動中の機能における“パラメータ”であり、永続的部分とも言えるシステムの実行コードを転送できるわけではない。したがって本件で問題としている「ＯＳやアプリケーションなどのソフトウェアコードを更新する技術」には該当しない。
【００１３】
本発明は上記従来例の問題点に鑑み、コンピュータが提供するサービスを継続しながらソフトウェアを更新することができるソフトウェア更新システム及びソフトウェア更新方法並びにコンピュータプログラムを提供することを目的とする。
【課題を解決するための手段】
【００１４】
本発明は上記目的を達成するために、メモリ上に旧プログラムコードを格納するための第１のプログラムコードエリアと、ＣＰＵが前記旧プログラムコードを実行することにより生成する旧グローバルデータを格納するための第１のグローバルデータエリアと、ソフトウェア更新の際に必要とするグローバルデータ変換コードを格納するためのグローバルデータ変換コードエリアと、プログラムコードが使用するためのスタックエリアとを確保するとともに、新プログラムコードを格納するための第２のプログラムコードエリアと、前記ＣＰＵが前記新プログラムコードを実行することにより生成する新グローバルデータを格納するための第２のグローバルデータエリアとを確保し、
前記ＣＰＵが前記旧プログラムコード、前記旧グローバルデータ及び前記スタックエリアを使用して稼動している状態において、前記旧プログラムコードを実行しながら外部から転送される前記新プログラムコード及び前記グローバルデータ変換コードを取得して、これらをそれぞれ前記第２のプログラムコードエリアと前記グローバルデータ変換コードエリアに格納し、
前記格納を終了した時点で前記グローバルデータ変換コードを実行して、前記第１のグローバルデータエリア上の前記旧グローバルデータを前記新プログラムコードが実行可能なフォーマットに変換して前記新グローバルデータを生成し、これを前記第２のグローバルデータエリアに格納し、
前記格納を終了した時点でスタックポインタを初期値にリセットして前記新プログラムコードにジャンプし、前記新グローバルデータを使用して前記旧プログラムコードにおいて行われていたサービスを引き続き実行する構成とした。
【００１５】
この構成により、サービス稼動中において、外部コンピュータより新しいソフトウェアコードを取得しメモリ上に展開し、古いソフトウェアで生成されたパラメータを新しいソフトウェアが使用できるようフォーマット変換した後、メモリ上に展開した新しいソフトウェアコードにジャンプするので、コンピュータが提供するサービスを持続しながらソフトウェアを連続的に更新することができる。
【００１６】
また、本発明は上記目的を達成するために、起動時に不揮発性メディア上のプログラムコードを揮発性メモリに展開した後、前記揮発性メモリ上のプログラムコードを実行する場合、
前記不揮発性メディア上に旧プログラムコードを格納するための第１のプログラムコードエリアと、新プログラムコードを格納するための第２のプログラムコードエリアと、コンピュータの起動の際にどちらのプログラムコードを実行するかを管理するフラグを格納するフラグエリアを確保し、
前記揮発性メモリ上に前記旧プログラムコードを格納するための第３のプログラムコードエリアと、ＣＰＵが前記旧プログラムコードを実行することにより生成する旧グローバルデータを格納するための第１のグローバルデータエリアと、ソフトウェア更新の際に必要とするグローバルデータ変換コードを格納するためのグローバルデータ変換コードエリアと、プログラムコードが使用するスタックエリアと、前記新プログラムコードを格納するための第４のプログラムコードエリアと、前記ＣＰＵが前記新プログラムコードを実行することにより生成する新グローバルデータを格納するための第２のグローバルデータエリアを確保し、
前記ＣＰＵが前記揮発性メモリ上の旧プログラムコード、前記旧グローバルデータ及び前記スタックエリアを使用して稼動している状態において、前記旧プログラムコードを実行しながら外部から転送される前記新プログラムコード及び前記グローバルデータ変換コードを取得して、これらをそれぞれ前記第４のプログラムコードエリアと前記グローバルデータ変換コードエリアに格納し、
前記格納を終了した時点で前記第４のプログラムコードエリア上の新プログラムコードを前記不揮発性メモリ上の第２のプログラムコードエリアに格納するとともに、次回のコンピュータ起動の際に新プログラムコードエリアを実行するように前記フラグを切り換えて格納し、
前記格納を終了した時点で前記グローバルデータ変換コードを実行して、前記第１のグローバルデータエリア上の前記旧グローバルデータを前記新プログラムコードが実行可能なフォーマットに変換して前記新グローバルデータを生成してこれを前記第２のグローバルデータエリアに格納し、
前記格納を終了した時点でスタックポインタを初期値にリセットして前記新プログラムコードにジャンプし、前記新グローバルデータを使用して前記旧プログラムコードにおいて行われていたサービスを引き続き実行し、
コンピュータの起動時に前記不揮発性メディア上のフラグを参照し、指定されたプログラムコードを前記揮発性メモリに展開した後、前記揮発性メモリ上のプログラムコードを実行する構成とした。
【００１７】
この構成により、再起動を必要とした場合でも、新しいソフトウェアで稼動することができるよう、新しいプログラム取得の際、サービスを提供しながらＨＤＤやフラッシュメモリなどの不揮発性メディアに書き込むので、再起動の際新しいプログラムで稼動できる。
【発明の効果】
【００１８】
本発明によれば、コンピュータが提供するサービスを持続しながらソフトウェアを連続的に更新することができる。
また、コンピュータを再起動した場合においても最新のソフトウェアコードで実行することが可能となる。
【発明を実施するための最良の形態】
【００１９】
以下、図面を参照して本発明の実施の形態について説明する。図１はコンピュータ内部のブロック構成及びメモリ内のマップを示すものである。また、図２はソフトウェアの動作フローを示しており、ここではマルチプロセッシングにより複数のソフトウェアが同時に稼動する環境におけるソフトウェア更新の流れを示している。なお、各ソフトウェア処理には符号（ａ）〜（ｕ）を付加している。また、図３はグローバルデータ変換コードがグローバルデータエリア１上の第１のグローバルデータを第２のグローバルデータに変換してグローバルデータエリア２に書き込んだ際の各グローバルデータエリアの比較図を示す。
【００２０】
まず、図１の構成について説明する。ＣＰＵ１０１は、コンピュータ内の制御を行う中央処理部である。不揮発性メディア１０２はプログラムコードを格納しており、電源を切断してもデータを保持することができるものであり、フラッシュメモリ、ＨＤＤなどにより実現される。また、不揮発性メディア１０２の内部には、
・起動プログラムが旧プログラムか新プログラムかを選択するフラグを格納するためのフラグエリア１０３と、
・現在のプログラムコードである第１のプログラムコードを格納するためのプログラムコードエリア１（１０４）と、
・新しいプログラムコードである第２のプログラムコードを格納するためのプログラムコードエリア２（１０４）を保持するエリアとが設けられている。
【００２１】
揮発性メモリ１０６は、コンピュータ内のメインメモリの役割を果たすものであり、ＤＲＡＭ、ＳＲＡＭなどにより実現される。また、揮発性メモリ１０６の内部には、
・第１のプログラムコードを格納するためのプログラムコードエリア１（１０７）と、
・ＣＰＵ１０１が第１のプログラムコードを実行することにより生成する第１のグローバルデータを格納するグローバルデータエリア１（１０８）と、
・第２のプログラムコードを格納するためのプログラムコードエリア２（１１０）と、
・ＣＰＵ１０１が第２のプログラムコードを実行することにより生成する第２のグローバルデータを格納するグローバルデータエリア２（１１１）と、
・ソフトウェア更新の際に必要とするグローバルデータ変換コードを格納するグローバルデータ変換コードエリア１０９と、
・さらに第１及び第２のプログラムコードが使用するスタックエリア１１２とが設けられている。
なお、これらのＣＰＵ１０１、不揮発性メディア１０２、揮発性メモリ１０６はバスにより接続され、コンピュータが構成されている。
【００２２】
以上の様に構成されたコンピュータにおけるソフトウェア更新処理について、図２、図３を用いて詳細に説明を行う。まず、通常サービスプロセス（ａ）上において現在のプログラムであるプログラム１（第１のプログラムコード）（ｃ）により通常サービス（ｆ）が行われていることとする。なお、プログラム１（ｃ）はサービスに必要とされるデータ及びソフトウェア実行のための各パラメータ（変数、配列、構造体など）をグローバルデータエリア１（１０８）に展開して使用する。こうすることで、各データの揮発性メモリ１０６上の位置が明確になり、ソフトウェア更新を行う際にグローバル変換コードが各データを拾い上げることができるようになる。また、プログラムコード上の関数の呼び出し、復元、さらに内部パラメータ生成などの手段としてスタックエリア１１２も使用される。
【００２３】
このような処理の最中に、例えばネットワークにより接続された外部コンピュータにより、ソフトウェア更新要求が発生した場合、ソフトウェア更新プロセス（ｂ）が起動する。なお、このプロセスを実行するためのコードは図１上では省略されているが、プログラムコードと同様に不揮発性メディア１０２あるいは揮発性メモリ１０６上に存在し、実行されることとする。
【００２４】
ソフトウェア更新プロセス（ｂ）上のコードは、まず外部コンピュータよりグローバルデータ変換コードを取得し、揮発性メモリ１０６上のグローバルデータ変換コードエリア１０９に展開する（ｍ）。
次に、外部コンピュータより新しいプログラムであるプログラム２（第２のプログラムコード）を取得し、揮発性メモリ１０６上のプログラムコードエリア２（１１０）に展開する（ｎ）。
次に、プログラム２を不揮発性メディア１０２上のプログラムコードエリア２（１０５）に書き込む（ｏ）。これは、コンピュータが再起動した場合に新しいプログラムであるプログラム２を実行できるようにするためである。
次に、起動プログラム選択フラグを次回の起動の際はプログラム２が実行される値に設定し、不揮発性メディア１０２のフラグエリア１０３に格納する（ｐ）。
【００２５】
次に、揮発性メモリ１０６上のグローバルデータ変換コードエリア１０９に展開したグローバルデータ変換コードを実行する（ｑ）。このコードが行うグローバルデータの変換処理の詳細として、図３はプログラム１が扱うグローバルデータとプログラム２が扱うグローバルデータを比較して示している。ここではある１つの構造体が設けられており、下部に揮発性メモリ１０６内のグローバルデータエリア１０８、１１１上における各構造体メンバの位置関係を示している。このようにプログラム１とプログラム２で構造体の構造が異なった場合、グローバルデータ変換コードはプログラム１が生成していたグローバルデータエリア１（１０８）上の各構造体メンバを、プログラム２が新しい構造体を使って各メンバにアクセスできるよう、各メンバ値を新しい構造体が示す位置に合わせてグローバルデータエリア２（１１１）上に書き込む作業が行われる。
【００２６】
次に、ソフトウェア更新プロセス（ｂ）では、ＣＰＵ１０１の割り込みをいったん禁止し（ｒ）、通常サービスプロセス（ａ）においてプログラム１からプログラム２にコードが切り換わるようにする割り込みハンドラを設定する（ｓ）。具体的には、まずプログラム切換えのための割り込み番号を用意する。そして一般的なＣＰＵでは割り込みハンドラコード内において各割り込みごとに処理コードを設定することができるため、プログラム切換えのための割り込み番号に割り当てられたハンドラコード、すなわち割り込みサービス（ｅ）の処理（ｊ）を行うコード上にプログラム２の先頭アドレスへジャンプする命令コードを書き込む。
なお、プログラム切換え後は、新しいプログラム・コードを実行するため、スタックエリア１１２内のスタックデータは不要となり、スタックポインタを初期値に戻す命令コードをプログラム２のへのジャンプ命令コードの前に置く。
【００２７】
そして最後に、ＣＰＵ１０１の割り込みを許可し（ｔ）、先ほど割り当てたプログラム切換えのための割り込み番号に対応した割り込み信号を生成し（ｕ）、ソフトウェア更新プロセス（ｂ）におけるソフトウェア更新処理を終了する。
【００２８】
これに対して、割り込みを受け取ったＣＰＵ１０１では、稼動させていたプロセスをいったん停止させ、割り込みサービス（ｅ）を実行する。図２では理解しやすいように、プログラム１（ｃ）から割り込みサービス（ｅ）に移行するよう表現しているが、すべてのプロセスが停止し、割り込みサービスが実行されるということである。
【００２９】
割り込みサービス（ｅ）においては、まず割り込みハンドラにおいて割り込み要因を解析する（ｉ）。そして、解析結果として取得する割り込み番号に対応したハンドラコードに分岐するが、ここでは上述したプログラム切換えのための割り込み番号を取得し、プログラム切換え処理のハンドラコードに分岐することとなる（ｊ）。
次にハンドラコード上に書かれていたスタックポインタを初期値に戻す命令コードを実行し（ｋ）、同じくハンドラコード上に書かれていたプログラム２へのジャンプ命令コードを実行し（ｌ）、割り込みサービスを終了する。
割り込みサービスが終了することにより、停止されていたプロセスが再開する。通常サービスプロセス（ａ）においてはプログラム１（ｃ）の代わりにプログラム２（ｄ）が実行される。
【００３０】
プログラム２（ｄ）においては、グローバルデータ変換コードにより変換・登録されたグローバルデータエリア２（１１１）を参照し、プログラム１（ｃ）が行っていたサービスを継承する設定を行う（ｇ）。そして、通常サービスが続行される（ｈ）。
【００３１】
なお、通常のソフトウェアでは使用されるグローバルコードやパラメータを初期化してから処理が行われるが、本実施の形態ではサービスを続行させながらプログラムを切り換えていくため、初期化処理ではなく継承処理となる。ＣＰＵ１０１がこれらの処理を選択する手段として、グローバルデータエリア２（１１１）に処理を選択するためのフラグを設けても良い。
【００３２】
以上のように、本実施の形態ではサービスを続けながらソフトウェア（プログラム）を切り換えることについて説明を行ったが、登録するプログラムコード、グローバルデータのエリアを順次切り換えることにより、１回のみならず何回も更新することが可能である。
【００３３】
ところで、古いプログラムから新しいプログラムに切り換える場合において、稼動中のプログラムコード中に、新しいプログラムにジャンプするコードを書き加えることは危険が伴う。また、あらかじめ所定のアドレスにジャンプするコードを古いプログラム中に加え、ソフトウェア的なシグナルによりジャンプする手段も考えられるが、ジャンプ先のアドレスも変更される場合があり、手順が複雑化することが考えられる。
【００３４】
そこで、本発明では容易な手順で新しいプログラムにジャンプする手段として、サービス稼動時にも通常行われる割り込み処理によりＣＰＵが新しいプログラムにジャンプする。すなわち、グローバルデータ変換コードは、グローバルデータの変更処理後、ＣＰＵの割り込み受付を禁止させ、ＣＰＵが提供する割り込みサービスシステム上の、あらかじめ決められたソフトウェア更新割り込み番号に対応したハンドラコード、あるいはベクタレジスタ上に、ジャンプ先となるプログラムコードアドレスをセットし、ＣＰＵの割り込み受付を許可させた後、グローバルデータ変換コード自らソフトウェア更新割り込みを発生させることにより新たに更新されたプログラムコードにジャンプする。
【図面の簡単な説明】
【００３５】
【図１】本発明の実施の形態におけるコンピュータ内部のブロック構成、及びメモリ内のマップを示す説明図
【図２】図１のコンピュータ内部ソフトウェアの動作を示すフローチャート
【図３】図１において、グローバルデータ変換コードがグローバルデータエリア１上の第１のグローバルデータを第２のグローバルデータに変換してグローバルデータエリア２に書き込んだ際の各グローバルデータエリアを比較して示す説明図
【符号の説明】
【００３６】
１０１  ＣＰＵ
１０２  不揮発性メディア
１０３  フラグエリア
１０４、１０７  プログラムコードエリア１
１０５、１１０  プログラムコードエリア２
１０６  揮発性メモリ
１０８  グローバルデータエリア１
１０９  グローバルデータ変換コードエリア
１１１  グローバルデータエリア２
１１２  スタックエリア
【図１】
2005092708.tif 000003
【図２】
2005092708.tif 000004
【図３】
2005092708.tif 000005