(57)【特許請求の範囲】
【請求項１】
ＣＰＵ内に複数のコアプロセッサが配置され、メモリ上に各コアプロセッサが占有して使用する占有メモリ領域と各コアプロセッサが共有する共有メモリ領域とが配置され、現在運用中の運用ファームウェアが新たな更新ファームウェアに更新される際に、前記運用ファームウェアが稼動される第１のコアプロセッサとは異なる第２のコアプロセッサの占有メモリ領域に、前記更新ファームウェアと、前記更新ファームウェアの動作を検査するためのテストプログラムとを読み込むメモリロード部と、
前記第２のコアプロセッサの占有メモリ領域から前記更新ファームウェアを前記第２のコアプロセッサにロードするプログラムロード部と、
前記第２のコアプロセッサの占有メモリ領域から前記テストプログラムを前記第２のコアプロセッサにロードし、前記テストプログラムにより前記更新ファームウェアが正常に動作するか否かを判定するテスト実行部と、
前記更新ファームウェアが正常に動作すると前記テスト実行部が判定した後に、前記第２のコアプロセッサを前記更新ファームウェアの稼動が可能な状態に設定し、前記第１のコアプロセッサを休眠状態に設定し、前記第１のコアプロセッサに代わって前記運用ファームウェアの稼動が可能な待機中の状態にある第３のコアプロセッサについては待機中の状態をそのまま継続させるコア切り替え部と、
前記第１のコアプロセッサに対する割り込み要求の受け付けを禁止すると共に、前記第２のコアプロセッサに対する割り込み要求の受け付けを開始するように設定し、ファームウェアに対する割り込み要求の通知先を前記第１のコアプロセッサから前記第２のコアプロセッサに切り替える割り込み切り替え部と
を備える制御装置。
【請求項２】
ＣＰＵ内に複数のコアプロセッサが配置され、メモリ上に各コアプロセッサが占有して使用する占有メモリ領域と各コアプロセッサが共有する共有メモリ領域とが配置され、現在運用中の運用ファームウェアが新たな更新ファームウェアに更新される際に、前記運用ファームウェアが稼動される第１のコアプロセッサとは異なる第２のコアプロセッサの占有メモリ領域に、前記更新ファームウェアと、前記更新ファームウェアの動作を検査するためのテストプログラムとを読み込むメモリロード部と、
前記第２のコアプロセッサの占有メモリ領域から前記更新ファームウェアを前記第２のコアプロセッサにロードするプログラムロード部と、
前記第２のコアプロセッサの占有メモリ領域から前記テストプログラムを前記第２のコアプロセッサにロードし、前記テストプログラムにより前記更新ファームウェアが正常に動作するか否かを判定するテスト実行部と、
前記更新ファームウェアが正常に動作すると前記テスト実行部が判定した後に、前記第２のコアプロセッサを前記更新ファームウェアの稼動が可能な状態に設定し、前記第１のコアプロセッサに代わって前記運用ファームウェアの稼動が可能な待機中の状態にある第３のコアプロセッサを休眠状態に設定し、前記第３のコアプロセッサに対する割り込み要求の受け付けを禁止すると共に前記第２のコアプロセッサに対する割り込み要求の受け付けを開始するように設定し、稼動系と待機系の切り替えにより前記第１のコアプロセッサを前記運用ファームウェアの稼動が可能な待機中の状態に設定し、前記第２のコアプロセッサを更新ファームウェアが動作する稼動中の状態に設定するコア切り替え部と、
前記第１のコアプロセッサに対する割り込み要求の受け付けを禁止すると共に、前記第２のコアプロセッサに対する割り込み要求の受け付けを開始するように設定し、ファームウェアに対する割り込み要求の通知先を前記第１のコアプロセッサから前記第２のコアプロセッサに切り替える割り込み切り替え部と
を備える制御装置。
【請求項３】
ＣＰＵ内に複数のコアプロセッサが配置され、メモリ上に各コアプロセッサが占有して使用する占有メモリ領域と各コアプロセッサが共有する共有メモリ領域とが配置され、現在運用中の運用ファームウェアが新たな更新ファームウェアに更新される際に、前記運用ファームウェアが稼動される第１のコアプロセッサとは異なる第２のコアプロセッサの占有メモリ領域に、前記更新ファームウェアと、前記更新ファームウェアの動作を検査するためのテストプログラムとを読み込むメモリロード段階と、
前記第２のコアプロセッサの占有メモリ領域から前記更新ファームウェアを前記第２のコアプロセッサにロードするプログラムロード段階と、
前記第２のコアプロセッサの占有メモリ領域から前記テストプログラムを前記第２のコアプロセッサにロードし、前記テストプログラムにより前記更新ファームウェアが正常に動作するか否かを判定するテスト実行段階と、
前記更新ファームウェアが正常に動作すると前記テスト実行段階において判定された後に、前記第２のコアプロセッサを前記更新ファームウェアの稼動が可能な状態に設定し、前記第１のコアプロセッサを休眠状態に設定し、前記第１のコアプロセッサに代わって前記運用ファームウェアの稼動が可能な待機中の状態にある第３のコアプロセッサについては待機中の状態をそのまま継続させるコア切り替え段階と、
前記第１のコアプロセッサに対する割り込み要求の受け付けを禁止すると共に、前記第２のコアプロセッサに対する割り込み要求の受け付けを開始するように設定し、ファームウェアに対する割り込み要求の通知先を前記第１のコアプロセッサから前記第２のコアプロセッサに切り替える割り込み切り替え段階と
を備えるファームウェア更新方法。
【請求項４】
ＣＰＵ内に複数のコアプロセッサが配置され、メモリ上に各コアプロセッサが占有して使用する占有メモリ領域と各コアプロセッサが共有する共有メモリ領域とが配置され、現在運用中の運用ファームウェアが新たな更新ファームウェアに更新される際に、前記運用ファームウェアが稼動される第１のコアプロセッサとは異なる第２のコアプロセッサの占有メモリ領域に、前記更新ファームウェアと、前記更新ファームウェアの動作を検査するためのテストプログラムとを読み込むメモリロード段階と、
前記第２のコアプロセッサの占有メモリ領域から前記更新ファームウェアを前記第２のコアプロセッサにロードするプログラムロード段階と、
前記第２のコアプロセッサの占有メモリ領域から前記テストプログラムを前記第２のコアプロセッサにロードし、前記テストプログラムにより前記更新ファームウェアが正常に動作するか否かを判定するテスト実行段階と、
前記更新ファームウェアが正常に動作すると前記テスト実行段階において判定された後に、前記第２のコアプロセッサを前記更新ファームウェアの稼動が可能な状態に設定し、前記第１のコアプロセッサに代わって前記運用ファームウェアの稼動が可能な待機中の状態にある第３のコアプロセッサを休眠状態に設定し、前記第３のコアプロセッサに対する割り込み要求の受け付けを禁止すると共に前記第２のコアプロセッサに対する割り込み要求の受け付けを開始するように設定し、稼動系と待機系の切り替えにより前記第１のコアプロセッサを前記運用ファームウェアの稼動が可能な待機中の状態に設定し、前記第２のコアプロセッサを更新ファームウェアが動作する稼動中の状態に設定するコア切り替え段階と、
前記第１のコアプロセッサに対する割り込み要求の受け付けを禁止すると共に、前記第２のコアプロセッサに対する割り込み要求の受け付けを開始するように設定し、ファームウェアに対する割り込み要求の通知先を前記第１のコアプロセッサから前記第２のコアプロセッサに切り替える割り込み切り替え段階と
を備えるファームウェア更新方法。
【請求項５】
コンピュータを、
ＣＰＵ内に複数のコアプロセッサが配置され、メモリ上に各コアプロセッサが占有して使用する占有メモリ領域と各コアプロセッサが共有する共有メモリ領域とが配置され、現在運用中の運用ファームウェアが新たな更新ファームウェアに更新される際に、前記運用ファームウェアが稼動される第１のコアプロセッサとは異なる第２のコアプロセッサの占有メモリ領域に、前記更新ファームウェアと、前記更新ファームウェアの動作を検査するためのテストプログラムとを読み込むメモリロード部、
前記第２のコアプロセッサの占有メモリ領域から前記更新ファームウェアを前記第２のコアプロセッサにロードするプログラムロード部、
前記第２のコアプロセッサの占有メモリ領域から前記テストプログラムを前記第２のコアプロセッサにロードし、前記テストプログラムにより前記更新ファームウェアが正常に動作するか否かを判定するテスト実行部、
前記更新ファームウェアが正常に動作すると前記テスト実行部が判定した後に、前記第２のコアプロセッサを前記更新ファームウェアの稼動が可能な状態に設定し、前記第１のコアプロセッサを休眠状態に設定し、前記第１のコアプロセッサに代わって前記運用ファームウェアの稼動が可能な待機中の状態にある第３のコアプロセッサについては待機中の状態をそのまま継続させるコア切り替え部、
前記第１のコアプロセッサに対する割り込み要求の受け付けを禁止すると共に、前記第２のコアプロセッサに対する割り込み要求の受け付けを開始するように設定し、ファームウェアに対する割り込み要求の通知先を前記第１のコアプロセッサから前記第２のコアプロセッサに切り替える割り込み切り替え部
として機能させるプログラム。
【請求項６】
コンピュータを、
ＣＰＵ内に複数のコアプロセッサが配置され、メモリ上に各コアプロセッサが占有して使用する占有メモリ領域と各コアプロセッサが共有する共有メモリ領域とが配置され、現在運用中の運用ファームウェアが新たな更新ファームウェアに更新される際に、前記運用ファームウェアが稼動される第１のコアプロセッサとは異なる第２のコアプロセッサの占有メモリ領域に、前記更新ファームウェアと、前記更新ファームウェアの動作を検査するためのテストプログラムとを読み込むメモリロード部、
前記第２のコアプロセッサの占有メモリ領域から前記更新ファームウェアを前記第２のコアプロセッサにロードするプログラムロード部、
前記第２のコアプロセッサの占有メモリ領域から前記テストプログラムを前記第２のコアプロセッサにロードし、前記テストプログラムにより前記更新ファームウェアが正常に動作するか否かを判定するテスト実行部、
前記更新ファームウェアが正常に動作すると前記テスト実行部が判定した後に、前記第２のコアプロセッサを前記更新ファームウェアの稼動が可能な状態に設定し、前記第１のコアプロセッサに代わって前記運用ファームウェアの稼動が可能な待機中の状態にある第３のコアプロセッサを休眠状態に設定し、前記第３のコアプロセッサに対する割り込み要求の受け付けを禁止すると共に前記第２のコアプロセッサに対する割り込み要求の受け付けを開始するように設定し、稼動系と待機系の切り替えにより前記第１のコアプロセッサを前記運用ファームウェアの稼動が可能な待機中の状態に設定し、前記第２のコアプロセッサを更新ファームウェアが動作する稼動中の状態に設定するコア切り替え部、
前記第１のコアプロセッサに対する割り込み要求の受け付けを禁止すると共に、前記第２のコアプロセッサに対する割り込み要求の受け付けを開始するように設定し、ファームウェアに対する割り込み要求の通知先を前記第１のコアプロセッサから前記第２のコアプロセッサに切り替える割り込み切り替え部
として機能させるプログラム。
【発明の詳細な説明】
【技術分野】
【０００１】
本発明は、システムを停止することなくファームウェアを更新する際に、このファームウェアの更新に起因してシステム停止などの障害が発生することを回避できる、制御装置、及びファームウェア更新方法とそのプログラムに関する。
【背景技術】
【０００２】
制御装置（例えば、サーバ装置など）には、この制御装置に搭載されたハードウェアの基本的な制御を行うためのソフトウェアであるファームウェアが組み込まれている。この制御装置においては、ファームウェアによりその動作及び機能が左右されるため、ファームウェアの改良などのバージョンアップが行われた場合は、このファームウェアを常に新しいバージョンのものに更新する必要がある。
【０００３】
ところで、ファームウェア更新に関連する技術として、次のような技術が開示されている。
例えば、関連する制御装置がある（特許文献１を参照）。この特許文献１に記載の制御装置は、上位装置であるホストへの影響が少ない、ディスク制御装置等の制御装置のファームウェア活性交換を実現することを目的としている。このために、この特許文献１に記載の制御装置では、２つのＣＰＵ上でそれぞれファームウェアを運用し、その片方のファームウェアアップデート行うときに、反対側のＣＰＵへＩ／Ｏ処理要求を移し、ファームウェアアップデート後に処理を戻すようにしている。
【０００４】
また、関連する制御プログラム更新方式がある（特許文献２を参照）。この特許文献２に記載の制御プログラム更新方式は、無線基地局において不慮の装置再開があっても再度制御プログラムをダウンロードする必要がない制御プログラム更新方式を提供することを目的としている。このために、ダウンロードした制御プログラムを記憶する２系統の記憶手段を備え、待機系記憶手段にダウンロードした新制御プログラムを書き込み、運用前に装置再開したときには現用系記憶手段内の旧制御プログラムを稼働させ、運用開始時又は運用開始後に装置再開したときにはかつて待機系記憶手段であった新たな現用系記憶手段内の新制御プログラムを稼働させる。
【０００５】
また、関連する構内交換装置がある（特許文献３を参照）。この特許文献３に記載の構内交換装置は、構内交換機の運用状況に関係なく、プログラム更新が可能な構内交換機におけるプログラム更新方式を提供することを目的としている。このために、制御部の交換制御部は、プログラムエリアＡａ１とプログラムエリアＢａ２との２面を定義し、その２面のプログラムエリアをシステム監視部の制御によって切替えることで、構内交換機の制御部を２重化することなく、かつシステム停止を伴うことなく、プログラムの更新を行う。
【先行技術文献】
【特許文献】
【０００６】
【特許文献１】特許第４４５６０８４号公報
【特許文献２】特開２０００−８９９３９号公報
【特許文献３】特開２００２−４４２３８号公報
【発明の概要】
【発明が解決しようとする課題】
【０００７】
ところで、単一ハードウェア（同一の制御装置を複数台使用しないという意味）の制御装置において、そのシステム運用中、すなわちシステムを停止することなく、ファームウェアのアップデートを行うことは既に行われている。
【０００８】
例えば、前述の特許文献１に記載の制御装置では、図１及び図３（特許文献１の図１及び図３）に示すように２つのＣＰＵと、展開前ファームウェア格納部（稼動ファームウェアと新ファームウェアを格納する格納部）とを備え、また、メモリ上に、各ＣＰＵに用意されるファームウェア格納領域と、２つのＣＰＵから同時にアクセスできる共有メモリとを備えて構成されている。そして、一方の側のＣＰＵのファームウェア格納領域に更新対象の新ファームウェアをロードし、この一方の側のＣＰＵにおいて、ファームウェアを稼動ファームウェアから新ファームウェアに切り替える動作を行う。そして、この一方の側のＣＰＵにおけるファームウェアの切り替え動作の間は、他方の側のＣＰＵがこの間のＩ／Ｏ処理を代替し、その後に、一方の側のＣＰＵが新ファームウェアを稼動させることで、無停止でファームウェアをアップデートする。
【０００９】
しかしながら、この特許文献１に記載の制御装置では、更新ファームウェアの動作を事前にチェックすることなくファームウェアの切り替えを行うため、媒体不良やメモリロード時の一部不正など、ファームウェアの更新に伴う不具合を検査できないという問題がある。更に、新ファームウェアへのアップデート操作時に、処理を引き継いでいる側でファームウェアの異常発生が発生した場合は、新ファームウェアへのアップデート操作が完了するまで、両方のファームウェアが動作できない期間が発生し、システムの制御が不能となる時間が生じてしまうという問題がある。
【００１０】
このような問題に対処する方法として、更新ファームウェアの動作を事前確認する例を図１０に示す。図１０は、ファームウェアの更新のために同一装置を２台用意する方法の例を示す図であり、ハードウェア的に密結合した同一装置１０及び２０を２台用意する例である。この方法では、片方の装置１０を稼動系として運用ファームウェアで動作させ、もう片方の装置２０を待機系として更新ファームウェアに置き換えてテストを実行した後に、稼動系の装置１０から待機系の装置２０に処理要求（ファームウェア対する処理要求）を移すようにしている。しかしながら、この同一装置を２台用意する方法の場合は、異なるハードウェア（装置１０及び２０）に対する割り込み制御と、データ書き込みの完了待ち時間等が必要となり、この切り替え動作時間により制御不可能となる空白の時間が生じてしまう。このため、この同一装置を２台用意する方法においては、ファームウェア入れ替え時に制御不能時間が発生するという問題がある。
【００１１】
そこでこの発明は、上述の課題を解決することのできる制御装置、及びファームウェア更新方法とそのプログラムを提供することを目的としている。
【課題を解決するための手段】
【００１２】
上記課題を解決するために、本発明の第１の形態によると、制御装置であって、ＣＰＵ内に複数のコアプロセッサが配置され、メモリ上に各コアプロセッサが占有して使用する占有メモリ領域と各コアプロセッサが共有する共有メモリ領域とが配置され、現在運用中の運用ファームウェアが新たな更新ファームウェアに更新される際に、運用ファームウェアが稼動される第１のコアプロセッサとは異なる第２のコアプロセッサの占有メモリ領域に、更新ファームウェアと、更新ファームウェアの動作を検査するためのテストプログラムとを読み込むメモリロード部と、第２のコアプロセッサの占有メモリ領域から更新ファームウェアを第２のコアプロセッサにロードするプログラムロード部と、第２のコアプロセッサの占有メモリ領域からテストプログラムを第２のコアプロセッサにロードし、テストプログラムにより更新ファームウェアが正常に動作するか否かを判定するテスト実行部と、更新ファームウェアが正常に動作するとテスト実行部が判定した後に、第２のコアプロセッサを更新ファームウェアの稼動が可能な状態に設定し、第１のコアプロセッサを休眠状態に設定し、第１のコアプロセッサに代わって運用ファームウェアの稼動が可能な待機中の状態にある第３のコアプロセッサについては待機中の状態をそのまま継続させるコア切り替え部と、第１のコアプロセッサに対する割り込み要求の受け付けを禁止すると共に、第２のコアプロセッサに対する割り込み要求の受け付けを開始するように設定し、ファームウェアに対する割り込み要求の通知先を第１のコアプロセッサから第２のコアプロセッサに切り替える割り込み切り替え部とを備える。本発明の第２の形態によると、制御装置であって、ＣＰＵ内に複数のコアプロセッサが配置され、メモリ上に各コアプロセッサが占有して使用する占有メモリ領域と各コアプロセッサが共有する共有メモリ領域とが配置され、現在運用中の運用ファームウェアが新たな更新ファームウェアに更新される際に、運用ファームウェアが稼動される第１のコアプロセッサとは異なる第２のコアプロセッサの占有メモリ領域に、更新ファームウェアと、更新ファームウェアの動作を検査するためのテストプログラムとを読み込むメモリロード部と、第２のコアプロセッサの占有メモリ領域から更新ファームウェアを第２のコアプロセッサにロードするプログラムロード部と、第２のコアプロセッサの占有メモリ領域からテストプログラムを第２のコアプロセッサにロードし、テストプログラムにより更新ファームウェアが正常に動作するか否かを判定するテスト実行部と、更新ファームウェアが正常に動作するとテスト実行部が判定した後に、第２のコアプロセッサを更新ファームウェアの稼動が可能な状態に設定し、第１のコアプロセッサに代わって運用ファームウェアの稼動が可能な待機中の状態にある第３のコアプロセッサを休眠状態に設定し、第３のコアプロセッサに対する割り込み要求の受け付けを禁止すると共に第２のコアプロセッサに対する割り込み要求の受け付けを開始するように設定し、稼動系と待機系の切り替えにより第１のコアプロセッサを運用ファームウェアの稼動が可能な待機中の状態に設定し、第２のコアプロセッサを更新ファームウェアが動作する稼動中の状態に設定するコア切り替え部と、第１のコアプロセッサに対する割り込み要求の受け付けを禁止すると共に、第２のコアプロセッサに対する割り込み要求の受け付けを開始するように設定し、ファームウェアに対する割り込み要求の通知先を第１のコアプロセッサから第２のコアプロセッサに切り替える割り込み切り替え部とを備える。本発明の第３の形態によると、ファームウェア更新方法であって、ＣＰＵ内に複数のコアプロセッサが配置され、メモリ上に各コアプロセッサが占有して使用する占有メモリ領域と各コアプロセッサが共有する共有メモリ領域とが配置され、現在運用中の運用ファームウェアが新たな更新ファームウェアに更新される際に、運用ファームウェアが稼動される第１のコアプロセッサとは異なる第２のコアプロセッサの占有メモリ領域に、更新ファームウェアと、更新ファームウェアの動作を検査するためのテストプログラムとを読み込むメモリロード段階と、第２のコアプロセッサの占有メモリ領域から更新ファームウェアを第２のコアプロセッサにロードするプログラムロード段階と、第２のコアプロセッサの占有メモリ領域からテストプログラムを第２のコアプロセッサにロードし、テストプログラムにより更新ファームウェアが正常に動作するか否かを判定するテスト実行段階と、更新ファームウェアが正常に動作するとテスト実行段階において判定された後に、第２のコアプロセッサを更新ファームウェアの稼動が可能な状態に設定し、第１のコアプロセッサを休眠状態に設定し、第１のコアプロセッサに代わって運用ファームウェアの稼動が可能な待機中の状態にある第３のコアプロセッサについては待機中の状態をそのまま継続させるコア切り替え段階と、第１のコアプロセッサに対する割り込み要求の受け付けを禁止すると共に、第２のコアプロセッサに対する割り込み要求の受け付けを開始するように設定し、ファームウェアに対する割り込み要求の通知先を第１のコアプロセッサから第２のコアプロセッサに切り替える割り込み切り替え段階とを備える。本発明の第４の形態によると、ファームウェア更新方法であって、ＣＰＵ内に複数のコアプロセッサが配置され、メモリ上に各コアプロセッサが占有して使用する占有メモリ領域と各コアプロセッサが共有する共有メモリ領域とが配置され、現在運用中の運用ファームウェアが新たな更新ファームウェアに更新される際に、運用ファームウェアが稼動される第１のコアプロセッサとは異なる第２のコアプロセッサの占有メモリ領域に、更新ファームウェアと、更新ファームウェアの動作を検査するためのテストプログラムとを読み込むメモリロード段階と、第２のコアプロセッサの占有メモリ領域から更新ファームウェアを第２のコアプロセッサにロードするプログラムロード段階と、第２のコアプロセッサの占有メモリ領域からテストプログラムを第２のコアプロセッサにロードし、テストプログラムにより更新ファームウェアが正常に動作するか否かを判定するテスト実行段階と、更新ファームウェアが正常に動作するとテスト実行段階において判定された後に、第２のコアプロセッサを更新ファームウェアの稼動が可能な状態に設定し、第１のコアプロセッサに代わって運用ファームウェアの稼動が可能な待機中の状態にある第３のコアプロセッサを休眠状態に設定し、第３のコアプロセッサに対する割り込み要求の受け付けを禁止すると共に第２のコアプロセッサに対する割り込み要求の受け付けを開始するように設定し、稼動系と待機系の切り替えにより第１のコアプロセッサを運用ファームウェアの稼動が可能な待機中の状態に設定し、第２のコアプロセッサを更新ファームウェアが動作する稼動中の状態に設定するコア切り替え段階と、第１のコアプロセッサに対する割り込み要求の受け付けを禁止すると共に、第２のコアプロセッサに対する割り込み要求の受け付けを開始するように設定し、ファームウェアに対する割り込み要求の通知先を第１のコアプロセッサから第２のコアプロセッサに切り替える割り込み切り替え段階とを備える。本発明の第５の形態によると、プログラムであって、コンピュータを、ＣＰＵ内に複数のコアプロセッサが配置され、メモリ上に各コアプロセッサが占有して使用する占有メモリ領域と各コアプロセッサが共有する共有メモリ領域とが配置され、現在運用中の運用ファームウェアが新たな更新ファームウェアに更新される際に、運用ファームウェアが稼動される第１のコアプロセッサとは異なる第２のコアプロセッサの占有メモリ領域に、更新ファームウェアと、更新ファームウェアの動作を検査するためのテストプログラムとを読み込むメモリロード部、第２のコアプロセッサの占有メモリ領域から更新ファームウェアを第２のコアプロセッサにロードするプログラムロード部、第２のコアプロセッサの占有メモリ領域からテストプログラムを第２のコアプロセッサにロードし、テストプログラムにより更新ファームウェアが正常に動作するか否かを判定するテスト実行部、更新ファームウェアが正常に動作するとテスト実行部が判定した後に、第２のコアプロセッサを更新ファームウェアの稼動が可能な状態に設定し、第１のコアプロセッサを休眠状態に設定し、第１のコアプロセッサに代わって運用ファームウェアの稼動が可能な待機中の状態にある第３のコアプロセッサについては待機中の状態をそのまま継続させるコア切り替え部、第１のコアプロセッサに対する割り込み要求の受け付けを禁止すると共に、第２のコアプロセッサに対する割り込み要求の受け付けを開始するように設定し、ファームウェアに対する割り込み要求の通知先を第１のコアプロセッサから第２のコアプロセッサに切り替える割り込み切り替え部として機能させる。本発明の第６の形態によると、プログラムであって、コンピュータを、ＣＰＵ内に複数のコアプロセッサが配置され、メモリ上に各コアプロセッサが占有して使用する占有メモリ領域と各コアプロセッサが共有する共有メモリ領域とが配置され、現在運用中の運用ファームウェアが新たな更新ファームウェアに更新される際に、運用ファームウェアが稼動される第１のコアプロセッサとは異なる第２のコアプロセッサの占有メモリ領域に、更新ファームウェアと、更新ファームウェアの動作を検査するためのテストプログラムとを読み込むメモリロード部、第２のコアプロセッサの占有メモリ領域から更新ファームウェアを第２のコアプロセッサにロードするプログラムロード部、第２のコアプロセッサの占有メモリ領域からテストプログラムを第２のコアプロセッサにロードし、テストプログラムにより更新ファームウェアが正常に動作するか否かを判定するテスト実行部、更新ファームウェアが正常に動作するとテスト実行部が判定した後に、第２のコアプロセッサを更新ファームウェアの稼動が可能な状態に設定し、第１のコアプロセッサに代わって運用ファームウェアの稼動が可能な待機中の状態にある第３のコアプロセッサを休眠状態に設定し、第３のコアプロセッサに対する割り込み要求の受け付けを禁止すると共に第２のコアプロセッサに対する割り込み要求の受け付けを開始するように設定し、稼動系と待機系の切り替えにより第１のコアプロセッサを運用ファームウェアの稼動が可能な待機中の状態に設定し、第２のコアプロセッサを更新ファームウェアが動作する稼動中の状態に設定するコア切り替え部、第１のコアプロセッサに対する割り込み要求の受け付けを禁止すると共に、第２のコアプロセッサに対する割り込み要求の受け付けを開始するように設定し、ファームウェアに対する割り込み要求の通知先を第１のコアプロセッサから第２のコアプロセッサに切り替える割り込み切り替え部として機能させる。
【発明の効果】
【００１３】
本発明の制御装置では、ＣＰＵをマルチコア構成とし、メモリ上に各コアごとの占有メモリ領域と共有メモリ領域とを配置する。そして、現在運用中（単に「現用」とも言う）の運用ファームウェアを新たな更新ファームウェアに更新する際に、現用の運用ファームウェアを稼動する第１のコアとは異なる第２のコアを選択し、この第２のコアの占有メモリ領域に更新ファームウェアをロードし、この第２のコアにおいて更新ファームウェアが正常に動作することを検査（判定）し、その後に、第２のコアにおいて更新ファームウェアを稼動すると共に、ファームウェアに対する処理要求を、第１のコアから第２のコアに切り替えて処理する。このように、ファームウェアを更新する際に、更新するファームウェアが正常に動作することを事前に検査する。
これにより、単一ハードウェアの制御装置において、システムを停止することなく現在運用中のファームウェアを新たな更新ファームウェアに切り替える際に、この更新ファームウェアに起因してシステム停止などの障害が発生することを回避できる。このため、ファームウェア更新の際の信頼性の向上を図ることができる。
【図面の簡単な説明】
【００１４】
【図１】本発明の第１の実施形態に係わる制御装置の構成を示す図である。
【図２】メモリロード部１２１における処理の流れ示すフローチャートである。
【図３】プログラムロード部１２２における処理の流れを示すフローチャートである。
【図４】テスト実行部１２３における処理の流れを示すフローチャートである。
【図５】コア切り替え部１２４の動作を示すフローチャートである。
【図６】割り込みマスク部１２６の動作を示すフローチャートである。
【図７】割り込みマスク解除部１２７の動作を示すフローチャートである。
【図８】第１の実施形態の動作について説明するためのシーケンス図である。
【図９】第２の実施形態の動作について説明するためのシーケンス図である。
【図１０】ファームウェアの更新のために同一装置を２台用意する方法の例を示す図である。
【発明を実施するための形態】
【００１５】
本発明の制御装置は、システムの運用を停止することなくファームウェアを更新する際に、更新ファームウェアが格納されている媒体の不良や、メモリへのロードが途中で一部不正となるなど、更新するファームウェアに不具合がある場合に、この更新ファームウェアの不具合を予め検査（判定）することができる制御装置を提供するものである。これにより、ファームウェアを更新する際に、更新ファームウェアの不具合によるシステム停止などの障害が発生することを回避することができる。さらには、更新ファームウェアへの切り替えの際に、ファームウェアの切り替えによる一時的な制御不能となる時間を短縮することができる。
【００１６】
以下、本発明の実施の形態を添付図面を参照して説明する。
［第１の実施形態］
図１は、本発明の第１の実施形態に係る制御装置の構成を示すブロック図であり、本発明に直接関係する部分のみを示したものである。図１に示す制御装置１００は、プログラム制御により動作する単一ハードウェア（同一の制御装置を複数台用いないという意味）の制御装置であり、この制御装置１００は、マルチコア構成のＣＰＵ１１０と、このＣＰＵ１１０の動作を制御するＣＰＵ制御部１２０と、ファームウェアやテストプログラム等を記憶する記憶装置であるメモリ２００と、で構成される。
【００１７】
ＣＰＵ１１０は、コア１と、コア２と、コア３の３つのコアを有している。そして、これらのコア１〜３は、それぞれが単独でプログラムを実行する機能を備えるＣＰＵコア（またはプロセッサコアともいう）である。このコア１〜３により、複数のプログラムを同時に実行することができる。図１に示す例では、ファームウェアの更新を開始する前の状態において、コア１が制御装置１００により実制御（ファームウェアに対する処理要求を実行する制御）が行われている状態のコア（稼働中）であり、コア２が制御装置１００の制御に全く影響していない状態のコア（休眠中）であり、コア３が制御装置１００の実制御にエラーが発生した時に実制御に切り替わるため待機状態のコア（待機動作中）の例である。
【００１８】
また、メモリ２００は、その記憶エリアとして、ＣＰＵ１１０内の各コア１〜３のそれぞれが占有して読み書きできる占有メモリ領域と、任意のコア１〜３が読み書きできる（各コアから同一データをアクセスできる）共有メモリ領域が配置される。
図１に示す例では、メモリ２００内に、コア１用メモリ領域（単に「コア１用メモリ」とも呼ぶ）２１０と、コア２用メモリ領域（単に「コア２用メモリ」とも呼ぶ）２２０と、コア３用メモリ領域（単に「コア３用メモリ」とも呼ぶ）２３０と、共有メモリ領域（単に「共有メモリ」とも呼ぶ）２４０とが配置される。
【００１９】
そして、ファームウェアの更新の開始前の状態においては、コア１用メモリ２１０に運用ファームウェア２１１が格納され、また、コア３用メモリ２３０に運用ファームウェア２３１が格納される。なお、コア１用メモリ２１０に格納される運用ファームウェア２１１と、コア３用メモリ２３０に格納される運用ファームウェア２３１とは同じものである。そして、後述するようにファームウェアの更新動作の開始に伴い、コア２用メモリ２２０に、更新ファームウェア２２１とテストプログラム（更新ファームウェア２２１の動作を検査するためのテストプログラム）２２２とが格納される。
【００２０】
このように、図１に示す例では、コア１を、運用ファームウェア２１１を稼働するコア（稼動系）とし、コア３を、運用ファームウェア２１１の待機動作を行うコア（待機系）とした状態において、休眠中のコア２を用いて、ファームウェアの更新を行う例である（図２乃至図９の説明においても同様である）。
【００２１】
また、ＣＰＵ制御部１２０は、メモリロード部１２１と、プログラムロード部１２２と、テスト実行部１２３と、コア切り替え部１２４と、割り込み切り替え部１２５とを有している。また、割り込み切り替え部１２５は、コア１〜３のそれぞれに対して割り込み要求をマスク（禁止）する割り込みマスク部１２６と、コア１〜３のそれぞれに対する割り込み要求のマスクを解除する割り込みマスク解除部１２７とを有している。
【００２２】
メモリロード部１２１は、更新ファームウェアを動作させる占有メモリ（図１に示す例ではコア２用メモリ２２０）に更新ファームウェアとテストプログラムを読み込む動作をする。
図２は、このメモリロード部１２１における処理の流れ示すフローチャートである。このフローチャートを参照すると、まず、ＣＰＵ制御部１２０からの指示により、メモリロード部１２１は、図示しない外部装置から更新ファームウェアを読み込み、この読み込んだ更新ファームウェアをメモリ２００にロード（書き込み処理）する。例えば、図１に示す例では、コア２用メモリ２２０に更新ファームウェア２２１をロードする（ステップＳ１１）。続いて、メモリロード部１２１は、同様に図示しない外部装置からテストプログラムを読み込み、この読み込んだテストプログラをメモリ２００にロードする。例えば、図１に示す例では、コア２用メモリ２２０にテストプログラム２２２としてロードする（ステップＳ１２）。
【００２３】
次に、メモリロード部１２１は、更新ファームウェアとテストプログラムの読み込み動作（外部装置からの読み込みとコア２用メモリ２２０へのロード処理）が完了できたかチェックし（ステップＳ１３）、完了できた場合は（ステップＳ１３：ＹＥＳ）、ＣＰＵ制御部１２０に「正常終了」を返却する（ステップＳ１４）。一方、完了できなかった場合は（ステップＳ１３：ＮＯ）、ＣＰＵ制御部１２０に「異常終了」を返却する（ステップＳ１５）。
そして、ステップＳ１４においてメモリロード部１２１から「正常終了」が返却されると、ＣＰＵ制御部１２０は、プログラムロード部１２２により、任意の休眠中のコア、例えば、図１に示す例では、コア２に更新ファームウェア２２１をロードする。
【００２４】
図３は、プログラムロード部１２２における処理の流れを示すフローチャートである。このフローチャートを参照して、例えば、図１に示す例では、コア２において、更新ファームウェア２２１のプログラムを起動して（ステップＳ２１）、プログラムが動作を開始できたか否かを判定し（ステップＳ２２）、プログラムが開始できた場合は（ステップＳ２２：ＹＥＳ）、ＣＰＵ制御部１２０に「正常終了」を返却する（ステップＳ２３）。一方、プログラムが開始できなかった場合は（ステップＳ２２：ＮＯ）、「異常終了」をＣＰＵ制御部１２０に返却する（ステップＳ２４）。
【００２５】
テスト実行部１２３は、例えば、図１に示す例において、休眠中のコア２にテストプログラム２２２をロードし、更新ファームウェア２２１が正常に動作するか否かを検査（判定）する。
図４は、テスト実行部１２３における処理の流れを示すフローチャートである。このフローチャートを参照して、まず、コア２においてテストプログラム２２２を動作させ（ステップＳ３１）、テストプログラム２２２が正常に完了（終了）したか否かを判定し（ステップＳ３２）、正常に終了できた場合は（ステップＳ３２：ＹＥＳ）、「正常終了」をＣＰＵ制御部１２０に返却し（ステップＳ３３）、正常に終了できなかった場合は（ステップＳ３２：ＮＯ）、「異常終了」をＣＰＵ制御部１２０に返却する（ステップＳ３４）。
【００２６】
上述した、メモリロード部１２１、プログラムロード部１２２、及びテスト実行部１２３における一連の処理において、「異常終了」が返却された場合は、更新ファームウェア（更新プログラム）の事前動作の確認ができなかった場合であるので、ＣＰＵ制御部１２０ではファームウェアの更新処理を停止する。一方、正常に終了した場合には、更新ファームウェアが正常に動作できる場合であるので、ＣＰＵ制御部１２０では更新処理を続け、次に、コア切り替え部１２４により、コアの稼動状態と休眠状態とを切り替える。
【００２７】
図５は、コア切り替え部１２４の動作を示すフローチャートである。このフローチャートに示すように、コア切り替え部１２４では、コア１〜３を起動させるか休眠させるかを決定（制御）する排他的ＯＮ／ＯＦＦフラグ（図示せず）のオン（ＯＮ）とオフ（ＯＦＦ）を切り替えることで、１つのコア（例えば、コア２）を起動状態とし、もう１つのコア（例えば、コア１）を休眠状態にする（ステップＳ４１）。
【００２８】
また、割り込み切り替え部１２５は、任意のコア１〜３に対する割り込み要求をマスク（禁止）する割り込みマスク部１２６と、同じく任意のコア１〜３に対する割り込み要求のマスクを解除する割り込みマスク解除部１２７とで構成される。この割り込みマスク部１２６では、任意のコア１〜３に対する割り込み要求をマスクする割込フラグ（図示せず）を、例えば、オン設定することにより、割り込みの受け付けをマスクする（ステップＳ５１）。
【００２９】
また、割り込みマスク解除部１２７は、図７のフローチャートに示すように、任意のコア１〜３に対して、例えば、割込フラグ（図示せず）をオフ設定することにより、割り込みマスクを解除し、割り込み要求が受け付けられるようにする（ステップＳ６１）。この割り込みマスク部１２６及び割り込みマスク解除部１２７により、１ポイント（瞬時）で複数のコア１〜３に対する割り込み先の切り替えを行うことができる。
【００３０】
例えば、図１に示す例では、コア切り替え部１２４により、コア２において更新ファームウェア２２１の稼動が可能な状態にした後に、割り込みマスク部１２６により運用中のコア１への割り込み要求をマスクし、割り込みマスク解除部１２７によりコア２に対するマスクを解除する処理を実行することにより、割り込み通知先（ファームウェアへの処理要求先）を、コア１からコア２へ切り替えることができる。
【００３１】
次に、図８のシーケンス図を参照して本発明の第１の実施形態の動作について詳細に説明する。
このシーケンス図を参照して、まず、コア１が運用ファームウェア２１１の稼動中（稼動系）として処理を行っているものとする（ステップＳ１００）。また、この時コア２は休眠中の状態としてシステム運用には関係してないものとする（ステップＳ１０１）。同時にコア３が運用ファームウェアの動作が可能な待機中（待機系）として処理を行っているものとする（ステップＳ１０２）。
【００３２】
この状態において、ファームウェアのアップデートを開始すると、始めにメモリロード部１２１によって、休眠中のコア２の占有メモリ（コア２用メモリ２２０）に更新ファームウェア２２１とテストプログラム２２２を読み込む（ステップＳ１０３およびステップＳ１０４）。次に、プログラムロード部１２２によって、休眠中であったコア２に更新ファームウェア２２１をロードする（ステップＳ１０５）。そして、テスト実行部１２３により、コア２にテストプログラム２２２をロードし、このコア２においてテストプログラム２２２を実行する（ステップＳ１０６）。
【００３３】
このステップＳ１０３からＳ１０６までの一連の動作が完了することにより、更新ファームウェア２２１が正しく動作できることをテストプログラム２２２によって検査することができる。これにより、更新ファームウェア２２１の事前動作の検査が完了したことになる（ステップＳ１０７）。
【００３４】
次に、ファームウェアを稼動するコアとして、更新ファームウェア２２１が動作可能となったコア２と、運用ファームウェア２１１を稼動中のコア１とを入れ替える。この場合、割り込みマスク部１２６によって、コア１への割り込みをマスクすることにより、コア１おける運用ファームウェア２１１の動作を未動作状態にする（ステップＳ１０８）。なお、この段階では、コア２は更新ファームウェア未動作の休眠中の状態にある（ステップＳ１０９）。
【００３５】
その後に、コア切り替え部１２４によって、稼動中と休眠中のフラグが入れ替えられて、コア１が運用ファームウェア未動作の休眠中になり（ステップＳ１１０）、コア２が運用ファームウェア未動作の稼働中になる（ステップＳ１１１）。最後に、割り込みマスク解除部１２７によって、コア２への割り込みマスクが解除され、コア２は更新ファームウェア動作の稼動中となり、コア２において更新ファームウェア２２１が稼動系として動作することになる（ステップＳ１１３）。なお、この段階において、コア１は休眠状態が維持され（ステップＳ１１２）、コア３は、待機中の状態が維持される（ステップＳ１１４）。
そして、上述したステップＳ１０８からステップＳ１１３までの一連の切り替え動作においては、ごく短時間に稼動中のコアがコア１からコア２に入れ替わるので、１ポイント（瞬時）でファームウェアの更新を完了することができる。
【００３６】
なお、一連のファームウェア更新処理においてエラーが発生した場合には、テスト完了（ステップＳ１０７）までの間では更新処理が停止し、テスト完了以降ではコア切り替え部１２４と割り込み切り替え部１２５により、割り込み通知先を元のコア１に戻す。このことにより、エラーが発生した場合でもファームウェア更新処理の前の状態に戻すことができる。また、待機系として動作するコア３はファームウェア更新の影響を全く受けずに待機動作を続けている（ステップＳ１０２及びステップＳ１１４）。このため、ファームウェア更新中においても制御装置１００としての冗長性を損なうことがない。
【００３７】
また、上記手順によりファームウェアの更新が完了した後に、さらに新たな次の更新ファームウェアに更新する際には、コア２において稼動される更新ファームウェア２２１を新たな現用の運用ファームウェアとする。そして、コア３に、更新ファームウェア２２１を運用ファームウェアとしてロードし、このコア３を待機系にすると共に、休眠中のコア１を用いて新たな次の更新ファームウェアに更新する。この休眠中のコア１を用いて新たな次の更新ファームウェアに更新する場合の手順は、図８に示すシーケンス図において、コア１とコア２とを入れ替えた場合の手順と同様になる。
【００３８】
以上説明したように、第１の実施形態に係わる制御装置１００では、第１の効果として、ファームウェア更新に際に、更新するファームウェアが正常に動作することを事前に検査することができるので、これにより、ファームウェアを更新する際の信頼性を向上させることができる。また、第２の効果として、運用ファームウェアを更新ファームウェアへ切り替える場合に、コアに対する稼動及び休眠状態の切り替えと、コアに対する割り込みマスクの変更と言う、ごく短時間に処理を完了できる手段を用いて切り替えを行うので、これにより、ファームウェアの更新に伴い発生する空白時間（制御装置が処理を行えない時間）を著しく短縮できる。
【００３９】
［第２の実施形態］
上述した第１の実施形態においては、コア２に更新ファームウェア２２１をロードして実行させることにより、このコア２を稼動中（稼動系）にすると共に、コア１を休眠中にし、また、コア３を運用ファームウェア２１１の動作が可能な待機中（待機系）の状態のまま継続する例について説明した。すなわち、コア３については、ファームウェア更新の影響を全く受けずに待機動作をそのまま継続する例について説明した。
【００４０】
これに対して、本発明の第２の実施形態では、コア２に更新ファームウェア２２１をロードして実行させることにより、このコア２を待機中（待機系）にすると共に、コア３を休眠中にし、その後、一般的な稼動系と待機系の切り替えにより、コア１を運用ファームウェア２１１の動作が可能な待機中（待機系）にし、コア２を待機中（待機系）から稼動中（稼動系）の状態にする例について説明する。すなわち、第１の実施形態では、更新ファームウェアをロードしたコア２について、稼動系との間で切り替えることにより、コア３が待機系のままである。これに対して、第２の実施形態では、更新ファームウェアをロードしたコア２について、待機系（コア３）との間で切り替えてから、その後、稼働系（コア１）と切り替えることにより、コア１が待機系になり、コア３については待機中から休眠中に切り替えられる場合の例について説明する。
【００４１】
図９は、本発明の制御装置の第２の実施形態の動作について説明するためのシーケンス図である。以下、図９に示すシーケンス図を参照して第２の実施形態の動作について説明する。
まず、コア１が運用ファームウェア２１１を動作させ稼動系として処理を行っているものとする（ステップＳ２００）。この時コア２は休眠状態としてシステム運用には関係しないものとする（ステップＳ２０１）。同時にコア３が運用ファームウェアの動作が可能な待機系として処理を行っているものとする（ステップＳ２０２）。この状態において、ファームウェアのアップデートを開始すると、初めにメモリロード部１２１によって、休眠中のコア２の占有メモリ（コア２用メモリ２２０）に更新ファームウェア２２１とテストプログラム２２２が読み込まれる（ステップＳ２０３およびステップＳ２０４）。
【００４２】
次に、プログラムロード部１２２によって、休眠中であったコア２に更新ファームウェア２２１がロードされる（ステップＳ２０５）。そして、テスト実行部１２３により、テストプログラム２２２をコア２にロードし、このコア２においてテストプログラム２２２を動作させる（ステップＳ２０６）。
【００４３】
上述したステップＳ２００からＳ２０６までの一連の動作が完了することにより、更新ファームウェア２２１が正しく動作できることをテストプログラム２２２によって検査（判定）することができる。これにより、更新ファームウェア２２１の事前検査が完了したことになる（ステップＳ２０７）。
【００４４】
この更新ファームウェア２２１の検査完了の後、コア２は、更新ファームウェア２２１未動作の休眠中となり（ステップＳ２０８）、コア３は、割り込みマスク部１２６により割り込みがマスクされ運用ファームウェア未動作の稼動中の状態になる（ステップＳ２０９）。続いて、コア切り替え部１２４により、コア２は更新ファームウェア未動作の待機中になり（ステップＳ２１０）、また、コア３は運用ファームウェア未動作の休眠中になる（ステップＳ２１１）。
【００４５】
その後、割り込みマスク解除部１２７により、コア２の割り込みマスクを解除し、コア２は、更新ファームウェア動作の待機中になる（ステップＳ２１３）。また、この状態において、コア１は、運用ファームウェア動作の稼動中であり（ステップＳ２１２）、コア３は、運用ファームウェア未動作の休眠中である（ステップＳ２１４）。
【００４６】
最後に、一般的な稼動系と待機系の切り替え動作によって、更新ファームウェア２２１が動作しているコア２が稼動中（稼動系）になり（ステップＳ２１６）、運用ファームウェア２１１が動作しているコア１が待機中（待機系）に切り替わる（ステップＳ２１５）。なお、コア３は、休眠中を維持する（ステップＳ２１７）。
上記手順により、制御装置１００において、運用ファームウェア２１１から更新ファームウェア２２１に切り替えることができる。
【００４７】
以上説明したように、第２の実施形態においては、休眠中のコア２を用いて更新ファームウェア２２１が正常に動作するか否かを事前に検査し、このコア２を稼動系として動作させると共に、かつては運用ファームウェア２１１の稼動系であったコア１を待機系のコアとすることができる。また、かつては待機系であったコア３を休眠中のコアとすることができる。このように、第２の実施形態ではコア１を待機系とすることができ、前述の第１の実施形態では、コア３を待機系とすることができるなど、コア１または３のいずれかを選択して待機系のコアとすることができる。
【００４８】
なお、ここで、本発明と上記実施形態との対応関係について補足して説明しておく。上記実施形態において、本発明におけるＣＰＵは、ＣＰＵ１１０が対応し、本発明における複数のコアは、コア１〜３が対応する。また、本発明における第１のコアは、コア１が対応し、本発明における第２のコアは、コア２が対応し、本発明における第３のコアは、コア３が対応する。また、本発明におけるメモリは、メモリ２００が対応し、本発明における占有メモリ領域は、コア１用メモリ２１０と、コア２用メモリ２２０と、コア３用メモリ２３０と対応する。また、本発明における共有メモリ領域は、共有メモリ２４０が対応する。また、本発明における運用ファームウェアは、現用の運用ファームウェア２１１が対応し、本発明における更新ファームウェアは、新たに更新するファームウェアである更新ファームウェア２２１が対応し、本発明におけるテストプログラムは、テストプログラム２２２が対応する。
【００４９】
また、本発明におけるメモリロード部は、メモリロード部１２１が対応し、本発明におけるプログラムロード部は、プログラムロード部１２２が対応し、本発明におけるテスト実行部は、テスト実行部１２３が対応する。また、本発明におけるコア切り替え部は、コア切り替え部１２４が対応し、本発明における割り込みマスク部は、割り込みマスク部１２６が対応し、本発明における割り込みマスク解除部は、割り込みマスク解除部１２７が対応する。
【００５０】
（１）そして、上記実施形態において、制御装置１００は、ＣＰＵ１１０内に複数のコア１〜３を配置し、メモリ２００上に各コア１〜３が占有して使用する占有メモリ領域（コア１用メモリ２１０、コア２用メモリ２２０、及びコア３用メモリ２３０）と各コアが共有する共有メモリ領域（共有メモリ２４０）とを配置し、現在運用中の運用ファームウェア２１１を新たな更新ファームウェア２２１に更新する際に、運用ファームウェア２１１を稼動する第１のコア１とは異なる第２のコア２を選択し、この第２のコア２の占有メモリ領域（コア２用メモリ２２０）に更新ファームウェア２２１をロードし、この第２のコア２において更新ファームウェア２２１が正常に動作することを検査し、この検査の後に当該第２のコア２において更新ファームウェア２２１を稼動させると共に、ファームウェアに対する処理要求を第１のコア１から第２のコア２に切り替えて処理する。
【００５１】
このような構成の制御装置１００では、現用の運用ファームウェア２１１を新たな更新ファームウェア２２１に更新する際に、運用ファームウェア２１１を稼動中でないコア２を選択し、当該選択したコア２の占有メモリ領域（コア２用メモリ２２０）に更新ファームウェア２２１をロードし、このコア２においてロードした更新ファームウェア２２１を動作させて正常に動作するか否かを検査（判定）する。この検査により正常に動作すると判定された後に、コア２において更新ファームウェア２２１を稼動させると共に、ファームウェアに対する処理要求を、コア１からコア２に切り替えて処理する。
これにより、単一ハードウェアの制御装置１００において、運用途中（システム無停止）で運用ファームウェア２１１を新たな更新ファームウェア２２１に切り替える際に、このファームウェア更新に起因してシステム停止などの障害が発生することを回避でき、ファームウェア更新の際の信頼性の向上を図ることができる。
【００５２】
（２）また、上記実施形態において、制御装置１００は、第２のコア２の占有メモリ領域（コア２用メモリ２２０）に更新ファームウェア２２１と該更新ファームウェア２２１の動作を検査するためのテストプログラム２２２とを読み込むメモリロード部１２１と、第２のコア２の占有メモリ領域（コア２用メモリ２２０）から更新ファームウェア２２１を当該第２のコア２にロードするプログラムロード部１２２と、第２のコア２の占有メモリ領域（コア２用メモリ２２０）からテストプログラム２２２を当該第２のコア２にロードし、該テストプログラム２２２により更新ファームウェア２２１が正常に動作するか否かを判定するテスト実行部１２３と、テスト実行部１２３において更新ファームウェア２２１が正常に動作すると判定された後に、第２のコア２を更新ファームウェア２２１の稼動が可能な状態に設定し、第１のコアを休眠状態に設定するコア切り替え部１２４と、第１のコア１に対する割り込み要求の受け付けを禁止すると共に第２のコア２に対する割り込み要求の受け付けを開始するように設定し、ファームウェアに対する割り込み要求の通知先を第１のコア１から第２のコア２に切り替える割り込み切り替え部１２５と、を備える。
【００５３】
このような構成の制御装置１００では、メモリロード部１２１により、更新ファームウェア２２１及びテストプログラム２２２をコア２用メモリ２２０に読み込む。そして、プログラムロード部１２２により、更新ファームウェア２２１をコア２にロードし、テスト実行部１２３により、テストプログラム２２２をコア２にロードし、このテストプログラム２２２を実行することにより更新ファームウェア２２１が正常に動作するか否かを検査（判定）する。そして、更新ファームウェア２２１が正常に動作すると判定された後に、コア切り替え部１２４は、コア２を更新ファームウェア２２１の稼動が可能な状態に設定し、コア１を休眠状態に設定する。その後、割り込み切り替え部１２５は、第１のコア１に対する割り込み要求の受け付けを禁止すると共に、第２のコア２に対する割り込み要求の受け付けを開始するように設定し、ファームウェアに対する割り込み要求の通知先を第１のコア１から第２のコア２に切り替える。
これにより、単一ハードウェアの制御装置１００において、運用途中（システム無停止）で運用ファームウェア２１１を更新ファームウェア２２１に切り替える際に、更新ファームウェア２２１が正常に動作するか否かを事前に検査することができ、運用ファームウェアを新たな更新ファームウェアに切り替える際の信頼性の向上を図ることができる。
【００５４】
（３）また、上記実施形態において、制御装置１００は、第１及び第２のコア１，２に加えて、さらに第１のコア１に代わって運用ファームウェア２１１の稼動が可能な待機中の状態にある第３のコア３を備え、運用ファームウェア２１１を更新ファームウェア２２１に更新する際に、コア切り替え部１２４は、第２のコア２を更新ファームウェア２２１の稼動が可能な状態に設定し、第１のコア１を休眠状態に設定すると共に、第３のコア３については待機中の状態をそのまま継続させる。
【００５５】
このような構成の制御装置１００では、運用ファームウェア２１１を更新ファームウェア２２１に更新する際に、コア切り替え部１２４は、第２のコア２を更新ファームウェア２２１の稼動が可能な状態に設定し、第１のコア１を休眠状態に設定すると共に、第３のコア３については待機中の状態をそのまま継続させる。
これにより、運用ファームウェア２１１を新たな更新ファームウェア２２１に切り替える際の信頼性の向上を図ることができる効果に加えて、運用ファームウェア２１１の稼動が可能な待機系（コア３）をそのまま維持することができる。このため、ファームウェア更新中においても制御装置１００としての冗長性を損なうことがない。
【００５６】
（４）また、上記実施形態において、制御装置１００は、第１及び第２のコア１，２に加えて、さらに第１のコア１に代わって運用ファームウェア２１１の稼動が可能な待機中の状態にある第３のコア３を備え、運用ファームウェア２１１を更新ファームウェア２２１に更新する際に、コア切り替え部１２４は、第２のコア２を更新ファームウェア２２１の稼動が可能な待機中の状態に設定し、第３のコア３を休眠状態に設定し、割り込み切り替え部１２５は、第３のコア３に対する割り込み要求の受け付けを禁止すると共に第２のコア２に対する割り込み要求の受け付けを開始するように設定し、一般的な稼動系と待機系の切り替えにより第１のコア１を運用ファームウェア２１１の稼動が可能な待機中の状態に設定し、第２のコア２を更新ファームウェア２２１が動作する稼動中の状態に設定する。
【００５７】
このような構成の制御装置１００では、運用ファームウェア２１１を更新ファームウェア２２１に更新する際に、コア切り替え部１２４は、第２のコア２を更新ファームウェア２２１の稼動が可能な状態に設定し、第３のコア３を休眠状態に設定すると共に、第１のコア１を運用ファームウェア２１１の稼動が可能な待機中の状態に設定する。
これにより、運用ファームウェアを新たな更新ファームウェアに切り替える際の信頼性の向上を図ることができる効果に加えて、運用ファームウェアが稼動していたコア１を、運用ファームウェア２１１の稼動が可能な待機中の状態に設定することができる。このように、コア１または３のいずれかを選択して待機系とすることができる。
【００５８】
以上、本発明の実施の形態について説明したが、本発明の制御装置は、上述の図示例にのみ限定されるものではなく、本発明の要旨を逸脱しない範囲内において種々変更を加え得ることは勿論である。
例えば、図１に示す例では、ＣＰＵ１１０を、３つのコア１〜３で構成する例について説明したが、ＣＰＵ１１０を２つのコア１及びコア２で構成することができる。また、ＣＰＵ１１０を４つ以上のコアで構成することもできる。なお、ＣＰＵ１１０を、２つのコア１及びコア２で構成する場合は、図９のシーケンス図に示す手順と同様にして（ただし、コア３に対する手順は省略される）、コア２を更新ファームウェア２２１の稼動系とし、コア１を運用ファームウェア２１１の待機系とすればよい。
【符号の説明】
【００５９】
１…コア１
２…コア２
３…コア３
１００…制御装置
１１０…ＣＰＵ
１２０…制御部
１２１…メモリロード部
１２２…プログラムロード部
１２３…テスト実行部
１２４…コア切り替え部
１２５…割り込み切り替え部
１２６…割り込みマスク部
１２７…割り込みマスク解除部
２００…メモリ
２１０…コア１用メモリ
２１１…運用ファームウェア
２２０…コア２用メモリ
２２１…更新ファームウェア
２２２…テストプログラム
２３０…コア３用メモリ
２３１…運用ファームウェア
２４０…共有メモリ
【図１】
0005293752.tif 000002
【図２】
0005293752.tif 000003
【図３】
0005293752.tif 000004
【図４】
0005293752.tif 000005
【図５】
0005293752.tif 000006
【図６】
0005293752.tif 000007
【図７】
0005293752.tif 000008
【図８】
0005293752.tif 000009
【図９】
0005293752.tif 000010
【図１０】
0005293752.tif 000011