(57)【特許請求の範囲】
【請求項１】
バスに接続された３つ以上のプロセッサを同期して同じ命令列を処理させるフォールトトレラント制御装置であって、
前記３つ以上のプロセッサの処理状態である、各プロセッサのレジスタの値を多数決にしたがって比較し、多数に属する処理状態とは異なる処理状態の異常プロセッサを検出する異常プロセッサ検出手段と、
前記異常プロセッサを検出したとき、前記異常プロセッサに対応するカウンタをインクリメントし、前記カウンタが基準値に達した場合に前記異常プロセッサを初期化し前記多数に属する処理状態のプロセッサと同期させるリセット処理を行わせ、達しない場合に前記多数に属する処理状態のプロセッサのレジスタの値を前記異常プロセッサの前記レジスタに書き込む応急処理を行わせる再同期化手段と、を有するフォールトトレラント制御装置。
【請求項２】
請求項１において、
前記異常プロセッサ検出手段は、さらに、前記プロセッサの前記バスへの出力値の不一致を検出することによって前記異常プロセッサを検出し、
前記出力値の不一致が検出された場合の前記応急処理は、前記３つ以上のプロセッサの前記出力値のうち多数に属する出力値を選択して前記バスに出力する処理を含み、
前記再同期化手段は、前記出力値の不一致が検出された場合であって前記カウンタが基準値に達した場合に、前記リセット処理に加えてさらに前記応急処理を行わせるフォールトトレラント制御装置。
【請求項３】
請求項１において、
前記レジスタは、前記プロセッサのプログラムカウンタを保持するレジスタ、スタックポインタを保持するレジスタ、有限ステートマシンが有する前記プロセッサの状態情報を保持するレジスタのいずれかを含むフォールトトレラント制御装置。
【請求項４】
請求項２において、
前記カウンタは、前記出力値の不一致が検出された場合にインクリメントされる第１のカウンタと、前記レジスタの値の不一致が検出された場合にインクリメントされる第２のカウンタとを有し、
前記基準値は、前記第１のカウンタに対応する第１の基準値と、前記第２のカウンタに対応する第２の基準値とを有するフォールトトレラント制御装置。
【請求項５】
請求項１乃至４のいずれかにおいて、
前記再同期化手段は、前記カウンタが前記基準値を超えた回数を示すリセット回数が、基準リセット回数に達したとき、前記異常プロセッサ以外の前記多数に属する処理状態のプロセッサによって処理を継続させるフォールトトレラント制御装置。
【請求項６】
請求項１乃至４のいずれかにおいて、
前記再同期化手段は、前記異常プロセッサの前記初期化が基準時間内に終了しないとき、前記異常プロセッサ以外の前記多数に属する処理状態のプロセッサによって処理を継続させるフォールトトレラント制御装置。
【請求項７】
請求項１乃至６のいずれかにおいて、
前記基準値は、前記フォールトトレラント制御装置の起動時にリセットされるフォールトトレラント制御装置。
【請求項８】
バスに接続された３つ以上のプロセッサを同期して同じ命令列を処理させるフォールトトレラントシステムの制御方法であって、
前記３つ以上のプロセッサの処理状態である、各プロセッサのレジスタの値を多数決にしたがって比較し、多数に属する処理状態とは異なる処理状態の異常プロセッサを検出する異常プロセッサ検出工程と、
前記異常プロセッサを検出したとき、前記異常プロセッサに対応するカウンタをインクリメントし、前記カウンタが基準値に達した場合に前記異常プロセッサを初期化し前記多数に属する処理状態のプロセッサと同期させるリセット処理を行わせ、達しない場合に前記多数に属する処理状態のプロセッサのレジスタの値を前記異常プロセッサの前記レジスタに書き込む応急処理を行わせる再同期化工程と、を有するフォールトトレラントシステムの制御方法。
【発明の詳細な説明】
【技術分野】
【０００１】
本発明は、フォールトトレラント制御装置、フォールトトレラントシステムの制御方法に関する。
【背景技術】
【０００２】
従来から、一過性の誤動作によって、システムの処理が継続できなくなることを回避するためにフォールトトレラントシステムが採用される。
【０００３】
例えば、フォールトトレラントシステムのロックステップ方式では、複数のプロセッサにクロック同期で同じ命令列を実行させ、全てのプロセッサの動作を比較し、不一致を検出した場合に異常の発生と判定する。不一致は、例えば、故障あるいはその他の外的または内的要因により、同期した他のプロセッサと異なる出力を行う場合に検出される。そして、フォールトトレラントシステムは、異常プロセッサのシステムからの切り離しや、異常プロセッサのリセット等の対処を行わせることにより、システムの動作を継続させる。
【０００４】
フォールトトレラントシステムは、異常プロセッサをリセットさせる場合、正常なプロセッサを停止した上で、リセット要求を発行して異常プロセッサを初期化させ、正常なプロセッサの内部レジスタ値等の状態情報を異常プロセッサにコピーさせる。これにより、複数のプロセッサ間の同期を維持しながら、プロセッサで動作するアプリケーションの処理を継続させることができる（例えば、特許文献１、２）。
【０００５】
一方、近年、自動車向けの機能安全規格ＩＳＯ２６２６２が、注目を集めている。機能安全とは、マイコン等の電子システムの構成要素に故障が発生したとしても、被害を最小限に留める機能的な工夫を施すことによって実現する安全を指す。
【先行技術文献】
【特許文献】
【０００６】
【特許文献１】特開平５−３１３９３０号公報
【特許文献２】特開２００４−１３３４９６号公報
【発明の概要】
【発明が解決しようとする課題】
【０００７】
しかしながら、従来の方法によると、不一致が検出される度に、異常プロセッサがリセットされ、リセットによる初期化処理や状態情報のコピー処理等に時間が費やされる。不一致が検出されてから異常プロセッサが同期した状態に復旧されるまでの間、プロセッサで動作するアプリケーションは停止状態になる。例えば、機能安全が重視される、人命に関わる処理を行うようなマイコンで動作するアプリケーションについては、停止状態が発生することは望ましくない。
【０００８】
本発明は、アプリケーションの停止時間を短縮するフォールトトレラント制御装置、フォールトトレラントシステムの制御方法を提案することにある。
【課題を解決するための手段】
【０００９】
第１の側面は、バスに接続された３つ以上のプロセッサを同期して同じ命令列を処理させるフォールトトレラント制御装置であって、前記３つ以上のプロセッサの処理状態を比較し異常な処理状態である異常プロセッサを検出する異常プロセッサ検出手段と、前記異常プロセッサを検出したとき、前記異常プロセッサに対応するカウンタをインクリメントし、前記カウンタが基準値に達した場合に前記異常プロセッサを初期化し前記正常な処理状態のプロセッサと同期させるリセット処理を行わせ、達しない場合に正常な処理状態に基づく応急処理を行わせる再同期化手段と、を有する。
【発明の効果】
【００１０】
第１の側面によれば、アプリケーションの停止時間を短縮される。
【図面の簡単な説明】
【００１１】
【図１】フォールトトレラントシステムの構成を示す例図である。
【図２】比較選択回路、比較複写回路、再同期化制御部の各構成の詳細を説明する図である。
【図３】異常プロセッサのリセット処理の流れを説明する図である。
【図４】本実施の形態例におけるフォールトトレラント制御部の処理の流れを説明するフローチャート図である。
【図５】内部レジスタの値の不一致が発生し応急処理が行われる場合を示す例図である。
【図６】外部アクセスの値の不一致が発生し応急処理が行われる場合を示す例図である。
【図７】内部レジスタの値の不一致が発生しリセット処理が行われる場合を示す例図である。
【発明を実施するための形態】
【００１２】
以下、図面にしたがって本発明の実施の形態について説明する。ただし、本発明の技術的範囲はこれらの実施の形態に限定されず、特許請求の範囲に記載された事項とその均等物まで及ぶものである。
【００１３】
［フォールトトレラントシステムの構成］
図１は、ロックステップ方式を用いたフォールトトレラントシステム１０の構成の一例を示す図である。同図におけるフォールトトレラントシステム１０は、例えば、ブレーキ制御システム、速度表示システム等の車載向けのシステムである。このような車載向けのシステムは人命に関わることから、システムの信頼性が特に重要視される。
【００１４】
図１のフォールトトレラントシステム１０は、例えば、クロック同期で同じ命令列を実行する３つのプロセッサｘ１〜ｘ３、メモリ１４、メモリ制御部１５、周辺機能回路ｅ１〜ｅｎ、フォールトトレラントシステム１０の制御部２０（以下、フォールトトレラント制御部２０）を有する。
【００１５】
フォールトトレラント制御部２０は、例えば、比較選択回路１１、比較複写回路１３、再同期化制御部１２を有する。フォールトトレラント制御部２０は、３つのプロセッサｘ１〜ｘ３の処理状態の比較、及び、処理状態が一致しない場合の異常プロセッサの再同期化処理を行う。フォールトトレラント制御部２０と、メモリ制御部１５、周辺機能回路ｅ１〜ｅｎ等は、外部バス１６を介して接続される。
【００１６】
また、図１のフォールトトレラント制御部２０とプロセッサ間のバス線において、点線で示すバス線には、１つのプロセッサから入出力される外部アクセス値（ｘ１ｂ〜ｘ３ｂのいずれか）、内部レジスタｘ１Ｒ〜ｘ３Ｒの値（ｘ１ａ〜ｘ３ａのいずれか）、各種信号等が転送される。一方、太線で示すバス線には、３つのプロセッサｘ１〜ｘ３から入出力される外部アクセス値ｘ１ｂ〜ｘ３ｂ、内部レジスタの値ｘ１ａ〜ｘ３ａ、各種信号等が転送される。
【００１７】
メモリ１４は、フォールトトレラントシステム１０で動作するプログラムＰＲを格納する。プログラムＰＲは、例えば、ブレーキ制御や速度表示等のアプリケーションプログラムや、プロセッサの初期化プログラムである。メモリ制御部１５は、メモリインターフェースとしてメモリ１４のアクセス制御を行う。
【００１８】
なお、この例において、フォールトトレラントシステム１０は、３つのプロセッサｘ１〜ｘ３を有するが、プロセッサの数は３つに限定されるものではない。本実施の形態例におけるフォールトトレラントシステム１０は、３つ以上のプロセッサを有していればよい。
【００１９】
［フォールトトレラント制御部２０］
フォールトトレラント制御部２０は、プロセッサの処理状態を逐一比較し、処理状態の不一致を検出すると、３つの処理状態の多数決に基づいて異常な処理状態のプロセッサ（以下、異常プロセッサ）を特定する。そして、フォールトトレラント制御部２０は、異常プロセッサの正常なプロセッサへの再同期化処理を行う。これにより、３つ以上のプロセッサのうち、いずれかのプロセッサの処理状態が異常になっても修復され、システムが継続される。これにより、システムで処理されるアプリケーションが適切に動作する。
【００２０】
［プロセッサの処理状態］
本実施の形態例におけるフォールトトレラント制御部２０が比較対象とする処理状態とは、各プロセッサから出力される外部アクセスの値ｘ１ｂ〜ｘ３ｂと、各プロセッサが有する内部レジスタｘ１Ｒ〜ｘ３Ｒの値ｘ１ａ〜ｘ３ａである。
【００２１】
具体的に、外部アクセスの値ｘ１ｂ〜ｘ３ｂとは、例えば、プロセッサからデータバス、アドレスバス、制御バスに出力される値を示す。フォールトトレラントシステム１０では、複数のプロセッサのうち、メインとなるプロセッサの外部アクセスの値が選択され、外部バス１６を介して、メモリ１４や周辺機能回路ｅ１〜ｅｎ等の周辺回路に出力される。このため、選択された外部アクセスの値が異常である場合、周辺回路に異常な外部アクセス値が伝播し、メモリ１４の破壊や、周辺機能回路ｅ１〜ｅｎの暴走が発生してしまう。
【００２２】
内部レジスタの値ｘ１ａ〜ｘ３ａとは、例えば、プロセッサが有するプログラムカウンタ（以下、ＰＣ）の値、スタックポインタ（以下、ＳＰ）の値、有限ステートマシン（以下、ＦＳＭ）が保持するレジスタの値である。ＰＣ値は次にプロセッサｘ１〜ｘ３が処理する対象の命令のアドレス値を示し、ＳＰ値は一時退避されたプロセッサの情報が格納されるメモリのアドレスを示す。そして、ＦＳＭ値は、プロセッサｘ１〜ｘ３のパイプラインステージを制御する有限ステートマシンのレジスタであって、パイプラインステージの処理状態を保持するレジスタの値を示す。このため、内部レジスタの値ｘ１ａ〜ｘ３ａが異常である場合、例えば、プログラムの暴走や、パイプラインステージ制御の暴走が発生してしまう。
【００２３】
図１のようなフォールトトレラントシステム１０では、各プロセッサは、同一の命令列を同期して処理する。また、一般的に、プロセッサｘ１〜ｘ３は同じ種別のプロセッサである。このため、通常、各プロセッサから出力される外部アクセスの値ｘ１ｂ〜ｘ３ｂ、及び、各プロセッサの内部レジスタの値ｘ１ａ〜ｘ３ａは、同一である。
【００２４】
続いて、本実施の形態例におけるフォールトトレラント制御部２０を構成する比較選択回路１１、比較複写回路１３、再同期化制御部１２について簡単に説明する。
【００２５】
［比較選択回路１１］
比較選択回路１１は、３つのプロセッサｘ１〜ｘ３の外部アクセスの値ｘ１ｂ〜ｘ３ｂを逐一比較し、各外部アクセスの値に不一致が発生した場合に、多数決に基づいて、外部アクセスの値が異常なプロセッサを特定する。また、比較選択回路１１は、外部アクセスの値ｘ１ｂ〜ｘ３ｂに不一致が発生したときの応急処理として値が正常な外部アクセスの値を選択し、外部バス１６を介して周辺回路に出力する。例えば、図１のように、プロセッサｘ１から、異常な外部アクセスの値ｘ１ｂが出力された場合（ＥＲ）、比較選択回路１１は、プロセッサｘ２、またはプロセッサｘ３の外部アクセスの値を選択して、外部バス１６に出力する。
【００２６】
［比較複写回路１３］
比較複写回路１３は、３つのプロセッサｘ１〜ｘ３の内部レジスタの値ｘ１ａ〜ｘ３ａを逐一比較し、各内部レジスタの値に不一致が発生した場合に、多数決に基づいて、内部レジスタの値が異常なプロセッサを特定する。また、比較複写回路１３は、内部レジスタの値ｘ１ａ〜ｘ３ａに不一致が発生したときの応急処理として、正常な内部レジスタの値の異常プロセッサの内部レジスタへの書き込みを指示する。なお、この処理は、プロセッサのレジスタの値を変更することにより、１サイクル程度要する。例えば、図１のように、プロセッサｘ２の内部レジスタの値ｘ２ａが異常である場合（ＥＲ２）、比較複写回路１３は、例えば、プロセッサｘ１の内部レジスタ値ｘ１ａの、プロセッサｘ２の内部レジスタｘ２Ｒへの書き込みを指示する。
【００２７】
［再同期化制御部１２］
再同期化制御部１２は、外部アクセスの値ｘ１ｂ〜ｘ３ｂまたは、内部レジスタの値ｘ１ａ〜ｘ３ａに不一致が発生したときに、各プロセッサ間の再同期化を図る。再同期化制御部１２は、プロセッサ毎に不一致カウンタを有し、処理状態の不一致が発生したプロセッサに対応する不一致カウンタをインクリメントすると共に、不一致カウンタ値に基づいて判定されたエラーレベルに応じた再同期化処理を指示する。
【００２８】
続いて、フォールトトレラント制御部２０の各構成の詳細について説明する。
【００２９】
図２は、比較選択回路１１、比較複写回路１３、再同期化制御部１２の各構成の詳細について説明する図である。比較選択回路１１、比較複写回路１３、再同期化制御部１２は、それぞれ、３つのプロセッサｘ１〜ｘ３に接続され、比較選択回路１１は外部バス１６を介して周辺回路に接続される。
【００３０】
［比較選択回路１１の構成の詳細］
比較選択回路１１は、例えば、比較多数決部１１１、正常データ選択部１１２、外部アクセス制御部１１３有する。比較多数決部１１１は、各プロセッサｘ１〜ｘ３の外部アクセスの値ｘ１ｂ〜ｘ３ｂを逐一比較し、不一致が生じた場合に多数決に基づいて外部アクセスの値が異常なプロセッサを特定する。そして、比較多数決部１１１は、エラー検出情報として異常プロセッサの番号ｓ１を再同期化制御部１２に通知する。
【００３１】
正常データ選択部１１２は、各プロセッサ間で外部アクセスの値に不一致が生じた場合、応急処理として、３つのプロセッサｘ１〜ｘ３の外部アクセスの値ｘ１ｂ〜ｘ３ｂの中から正常な外部アクセスの値を選択し、外部バス１６に出力する。この応急処理により、不一致が生じた場合でも、正常な外部アクセスの値が選択され外部バス１６に出力される。これにより、外部アクセスの値に不一致が生じた場合に、周辺回路に異常な外部アクセス値が伝播することが回避される。
【００３２】
外部アクセス制御部１１３は、プロセッサｘ１〜ｘ３及び外部バス１６へのアクセス制御を行う。外部バス１６へのアクセス制御とは、例えば、メインプロセッサｘ１〜ｘ３の選択、異常プロセッサの切り離し、各プロセッサｘ１〜ｘ３のウェイト制御、各プロセッサｘ１〜ｘ３の外部バス１６へのライト抑止制御等を示す。
【００３３】
［比較複写回路１３の構成の詳細］
比較複写回路１３は、例えば、比較多数決部１３１、レジスタ複写制御部１３２を有する。比較多数決部１３１は、各プロセッサｘ１〜ｘ３の内部レジスタの値ｘ１ａ〜ｘ３ａを逐一比較し、不一致が生じた場合に多数決に基づいて内部レジスタの値が異常なプロセッサを特定する。また、比較多数決部１３１は、エラー検出情報として異常プロセッサの番号ｓ１を再同期化制御部１２に通知する。
【００３４】
レジスタ複写制御部１３２は、再同期化制御部１２から、応急処理を示すレジスタ複写指示ｓ５の通知を受けると、不一致が生じたレジスタについて、正常プロセッサから異常プロセッサへの値のコピーを指示する。
【００３５】
［再同期化制御部１２の構成の詳細］
再同期化制御部１２は、例えば、監視タイマ１２１、不一致カウンタ１２２、初期化終了フラグ１２３、シーケンス制御部１２４、リセット回数カウンタ１２５を有する。監視タイマ１２１は、異常プロセッサをリセットする場合に実行される初期化プログラムの実行時間を監視するタイマである。また、初期化終了フラグ１２３は、初期化プログラムの終了を示すフラグである。また、シーケンス制御部１２４は、プロセッサ間の再同期化を図るシーケンスの実行制御を行う。リセット回数カウンタ１２５は、プロセッサ毎に管理され、プロセッサのリセット回数を保持するカウンタである。
【００３６】
また、不一致カウンタ１２２はプロセッサ毎に管理され、処理状態の不一致が発生する毎に、異常プロセッサに対応する不一致カウンタ１２２がインクリメントされる。再同期化制御部１２は、異常プロセッサ番号ｓ１の通知を受けると、異常プロセッサの不一致カウンタ１２２が基準値に達しているか否かを判定する。基準値は、例えば、ユーザによって設定される。再同期化制御部１２は、不一致カウンタが基準値に達していない場合はエラーレベル「低」と判定し、異常プロセッサのリセット処理を行わない。
【００３７】
一方、不一致カウンタ１２２が基準値に達する場合、再同期化制御部１２は、エラーレベル「中」と判定し、リセット要求ｓｒ１〜ｓｒ３に基づいて異常プロセッサのリセット処理を指示すると共に、ライト抑止指示ｓ４に基づいてリセット処理中の異常プロセッサの外部バス１６への出力を制限する。このとき、異常プロセッサへの正常プロセッサの処理状態のコピー処理が、割り込み要求ｓｉ１〜ｓｉ３によって指示される。
【００３８】
さらに、異常プロセッサのリセット処理において初期化プログラムが基準時間内に終了しない場合、または、異常プロセッサのリセット回数が基準リセット回数に達した場合、再同期化制御部１２は、エラーレベル「高」と判定する。この場合、再同期化制御部１２は、異常プロセッサをシステムから切り離し、異常プロセッサ以外の正常なプロセッサによって処理を継続させる。この場合、異常プロセッサの切り離しを指示する切り離し指示ｓ２が、再同期化制御部１２から比較選択回路１１に通知される。
【００３９】
また、再同期化制御部１２は、処理状態の不一致が発生したとき、異常プロセッサのエラーレベル「低・中・高」を示すエラーレベル通知ｓ６を周辺回路に通知する。
【００４０】
なお、内部レジスタの値の不一致であって、エラーレベル「低」の場合、再同期化制御部１２は、比較選択回路１１の外部アクセス制御部１１３を介して、全てのプロセッサに１サイクルのウェイト指示ｓ３を出力すると共に、比較複写回路１３のレジスタ複写制御部１３２に、応急処理を示すレジスタ複写指示ｓ５を通知する。ウェイト指示ｓ３は、プロセッサによる命令フェッチ処理を停止させる信号である。
【００４１】
各制御部の処理の流れの詳細については、フローチャート図、及び、具体例に基づいて後述する。ここで、まず、異常プロセッサのリセット処理を行う場合の異常プロセッサ及び正常プロセッサの状態の遷移について説明する。
【００４２】
［異常プロセッサのリセット処理の流れ］
図３は、異常プロセッサのリセット処理の流れを説明する図である。同図の（Ａ）はリセット対象の異常プロセッサの状態遷移、（Ｂ）は異常プロセッサをリセットするときの２つの正常プロセッサの状態遷移を示す。また、同図の横軸は時間の流れを示し、縦軸はプロセッサの状態を示す。具体的に、状態ｐｔ１は正常状態を示し、状態ｐｔ２は異常状態を示す。
【００４３】
図３の（Ａ）（Ｂ）において、アプリケーションプログラムＰＲの処理中に、タイミングｔ２において、プロセッサ間の処理状態の不一致が検出される。そこで、正常な処理状態に修復するために、アプリケーションプログラムＰＲの処理が停止され、異常プロセッサのリセットの準備処理が開始される。
【００４４】
図３の（Ａ）におけるタイミングｔ２からタイミングｔ３の１サイクル間には、異常プロセッサのリセットの準備処理として、異常プロセッサの特定、及び、正常プロセッサの動作停止指示等が行われる。リセット処理では、異常プロセッサの初期化に加えて、正常なプロセッサの処理状態の異常プロセッサへのコピー処理ＣＰが行われる。このため、予め、正常プロセッサの動作が停止されている必要がある。
【００４５】
続いて、図３の（Ａ）のタイミングｔ３において、異常プロセッサのリセット処理が開始される。このとき、同図（Ｂ）のタイミングｔ３において、２つの正常プロセッサは動作停止状態にある。そして、タイミングｔ４までの間に、異常プロセッサの初期化、及び、正常プロセッサの処理状態の異常プロセッサへのコピー処理ＣＰが行われる。これにより、異常プロセッサのリセット処理が完了し、正常な状態ｐｔ１に遷移する。これにより、タイミングｔ４からアプリケーションプログラムＰＲの処理が再開される。
【００４６】
このように、リセットの準備処理及びリセット処理が行われる間、即ち、図３（Ａ）の点線の矢印ｔｘで示したタイミングｔ２からタイミングｔ４までの間、一部のプロセッサの動作が停止状態となる。このため、矢印ｔｘの間、アプリケーションプログラムＰＲの処理についても停止状態となる。リセット処理では、正常なプロセッサの処理状態の異常プロセッサへのコピー処理ＣＰが行われることから、一定の間、アプリケーションプログラムＰＲの処理が停止されることになる。しかしながら、アプリケーションプログラムＰＲの停止時間は最小限に押さえられることが望ましい。例えば、車載向けマイコン等で動作する人命に関わる制御を行うアプリケーションプログラムＰＲの場合、短い停止時間であっても、自動車の走行速度によっては長い走行距離に相当し影響が大きいためである。
【００４７】
そこで、本実施の形態例におけるフォールトトレラント制御装置は、３つ以上のプロセッサの処理状態を比較し異常な処理状態である異常プロセッサを検出したとき、異常プロセッサに対応する不一致カウンタをインクリメントし、不一致カウンタが基準値に達した場合に異常プロセッサを初期化し正常な処理状態のプロセッサと同期させるリセット処理を行わせる（エラーレベル「中」）。また、フォールトトレラント制御装置は、不一致カウンタが基準値に達していない場合は、正常な処理状態に基づく応急処理を行わせる（エラーレベル「低」）。
【００４８】
本実施の形態例では、不一致カウンタが基準値に達しないエラーレベル「低」の場合、異常プロセッサの処理状態の不一致がノイズ等の一時的な要因によって発生したものとみなされる。この場合、フォールトトレラント制御装置は、リセット処理ではなく、応急処理によって異常な処理状態を解消する。応急処理は、リセット処理に対して、プロセッサの動作停止時間が最小限に抑えられる。これにより、アプリケーションプログラムの停止時間が最小限に抑えられる。
【００４９】
一方、不一致カウンタが基準値に達するエラーレベル「中」の場合、一時的ではない恒久的な要因によって、処理状態の不一致が発生している可能性があるとみなされる。そこで、本実施の形態例におけるフォールトトレラント制御装置は、異常プロセッサのリセット処理を指示し、異常な処理状態が解消されるか否かを検証する。そして、本実施の形態例におけるフォールトトレラント制御装置は、異常プロセッサのリセット処理時に実行される初期化プログラムが基準時間内に終了しない場合、または、プロセッサのリセット回数が基準リセット回数に達した場合、エラーレベル「高」として、プロセッサが恒久的な障害を有していると判定し、当該プロセッサをシステムから切り離す。
【００５０】
このように、本実施の形態例におけるフォールトトレラント制御装置は、処理状態の不一致の発生回数、及び、リセット処理時の初期化プログラムの実行時間等に基づいて、エラーレベルを判定する。そして、フォールトトレラント制御装置は、エラーレベル「低」の場合は、異常な処理状態が一時的な要因によって発生しているとして、プロセッサのリセット処理を行わない。また、フォールトトレラント制御装置は、エラーレベル「高」の場合は、プロセッサのリセット処理を行うことなく、異常プロセッサをシステムから切り離す。
【００５１】
これにより、処理状態の不一致が検出される度に異常プロセッサのリセット処理が行われる場合に対して、リセット処理の頻度が低減され、プロセッサの動作の停止時間が最小限に抑えられる。このため、アプリケーションプログラムの停止時間についても最小限に抑えられる。
【００５２】
ここで、フォールトトレラントシステムの一連の制御処理の流れについて、フローチャート図に基づいて後述する。
【００５３】
［フォールトトレラント制御の処理の流れ］
図４は、本実施の形態例におけるフォールトトレラント制御部２０の処理の流れを説明するフローチャート図である。フォールトトレラント制御部２０の比較選択回路１１及び比較複写回路１３は、３つのプロセッサｘ１〜ｘ３の処理状態を示す外部アクセスｘ１ｂ〜ｘ３ｂの値、内部レジスタの値ｘ１ａ〜ｘ３ａを逐一比較し、処理状態が一致しているか否かを判定する（Ｓ１０）。そして、処理状態の不一致が検出され（Ｓ１０のＹＥＳ）、内部レジスタの値ｘ１ａ〜ｘ３ａの不一致である場合（Ｓ１１のＹＥＳ）、比較複写回路１３は、各プロセッサｘ１〜ｘ３の内部レジスタの値ｘ１ａ〜ｘ３ａの多数決に基づいて内部レジスタの値が異常なプロセッサを特定し、再同期化制御部１２に通知する。
【００５４】
具体的に、比較選択回路１１及び比較複写回路１３は、次のように多数決をとる。比較選択回路１１及び比較複写回路１３は、プロセッサｘ１とプロセッサｘ２の値、または、プロセッサｘ１の値とプロセッサｘ３の値が一致した場合、プロセッサｘ１の値を多数決の値、即ち、正常な値として出力する。一方、一致しない場合、比較選択回路１１及び比較複写回路１３は、さらに、プロセッサｘ２とプロセッサｘ３の値とを比較し、一致する場合にプロセッサｘ２の値を多数決の値、即ち、正常な値として出力する。
【００５５】
フローチャート図に戻り、続いて、再同期化制御部１２は、異常プロセッサの不一致カウンタ１２２が基準値に達したか否かを判定する（Ｓ１２）。基準値未満の場合（Ｓ１２のＹＥＳ）、エラーレベル「低」と判定され、リセット処理の代わりに、工程Ｓ１３〜Ｓ１５の応急処理Ｅ１−１が行われる。
【００５６】
具体的に、応急処理Ｅ１−１として、再同期化制御部１２は、まず、全てのプロセッサｘ１〜ｘ３へのウェイト指示ｓ３をアサートする（Ｓ１３）。また、再同期化制御部１２は、レジスタ複写指示ｓ５を比較複写回路１３に出力し、不一致が生じたレジスタについて、正常プロセッサのから異常プロセッサへの値のコピーを指示する（Ｓ１４）。続いて、再同期化制御部１２は、全てのプロセッサｘ１〜ｘ３へのウェイト指示ｓ３を解除し（Ｓ１５）、異常プロセッサの不一致カウンタ１２２をインクリメントする（Ｓ１６）。そして、再び、処理状態の検出工程（Ｓ１０）に戻る。なお、不一致カウンタ１２２は、フォールトトレラントシステム１０の起動時、または対応するプロセッサのリセット時に初期化される。
【００５７】
このように、内部レジスタの値ｘ１ａ〜ｘ３ａの不一致であってエラーレベル「低」と判定される場合、リセット処理の代わりに、応急処理Ｅ１−１によって、プロセッサにおける異常な処理状態が解消されプロセッサの再同期化が図られる。応急処理Ｅ１−１では、プロセッサの動作停止時間が１サイクル程度に抑えられるため、リセット処理が行われる場合に対して、アプリケーションプログラムの停止時間が最小限に抑えられる。
【００５８】
また、一方、不一致が発生した処理状態が外部アクセス値である場合（Ｓ１１のＮＯ）、比較選択回路１１は、各プロセッサｘ１〜ｘ３の外部アクセスの値の多数決に基づいて、外部アクセスの値が異常なプロセッサを特定し、再同期化制御部１２に通知する。多数決の方法は前述したとおりである。
【００５９】
そして、比較選択回路１１は、応急処理Ｅ１−２として、正常な外部アクセスの値を選択し外部バス１６に出力する（Ｓ１７）。これにより、異常な外部アクセスの値が外部バスに出力され、周辺回路に伝播することが回避される。このように、外部アクセス値の不一致が発生した場合は、リセット処理を行うか否かに関わらず、応急処理Ｅ１−２が行われる。これにより、異常な外部アクセス値が周辺回路に伝播することが防止される。続いて、再同期化制御部１２は、異常プロセッサの不一致カウンタ１２２が基準値に達したか否かを判定する（Ｓ１８）。
【００６０】
基準値未満の場合（Ｓ１８のＹＥＳ）、再同期化制御部１２は、異常プロセッサの不一致カウンタ１２２をインクリメントする（Ｓ１９）。このとき、エラーレベル「低」と判定され、リセット処理Ｓ２２〜Ｓ２６が回避され、再び、処理状態の検出工程（Ｓ１０）に戻る。このように、エラーレベル「低」と判定される場合、リセット処理が回避されるため、リセット処理が行われる場合に対して、アプリケーションプログラムの停止時間が最小限に抑えられる。
【００６１】
そして、異常プロセッサの不一致カウンタ１２２が基準値を越える場合（Ｓ１２のＮＯ、Ｓ１８のＮＯ）、再同期化制御部１２は、異常プロセッサの不一致カウンタ１２２が基準値を初めて超えたか否か、即ち、リセット回数カウンタ１２５が基準リセット回数（この例では、２回）に達したか否かを判定する（Ｓ２１）。初めて超えた場合（Ｓ２１のＹＥＳ）、再同期化制御部１２は、エラーレベル「中」と判定し、異常プロセッサのリセット処理Ｅ２（Ｓ２２〜Ｓ２６）を指示する。例えば、車載システムにおいてエラーレベル「中」と判定されたとき、自動車のドライバーに警告メッセージが通知される。
【００６２】
再同期化制御部１２は、リセット処理Ｅ２として、まず、正常なプロセッサに対してウェイト指示ｓ３をアサートし、異常プロセッサにリセット要求（ｓｒ１〜ｓｒ３のいずれか）をアサートする（Ｓ２２）。異常プロセッサのリセット要求がアサートされると、初期化プログラムに従って異常プロセッサの初期化が行われる。このとき、再同期化制御部１２は、初期化プログラムの実行時間を監視タイマ１２１によって監視する。
【００６３】
そして、再同期化制御部１２は、リセット開始時から初期化プログラムが終了し初期化終了フラグ１２３がセットされるまでの時間が、基準時間内か否かを判定する（Ｓ２３）。つまり、再同期化制御部１２は、対象のプロセッサが、初期化プログラムを完了できない暴走状態にあるか否かを判定する。基準時間は、例えば、ユーザによって設定される。
【００６４】
初期化プログラムが基準時間内に終了する場合（Ｓ２３のＹＥＳ）、異常プロセッサの初期化が正常に行われたものと判定される。そこで、再同期化制御部１２は、異常プロセッサのウェイト指示ｓ３をアサートする（Ｓ２４）。続いて、再同期化制御部１２は、全プロセッサｘ１〜ｘ３のウェイト指示ｓ３を解除すると共に、全プロセッサｘ１〜ｘ３の割り込み要求ｓｉ１〜ｓｉ３をアサートする（Ｓ２５）。これにより、全プロセッサｘ１〜ｘ３が一斉に割込みハンドラを開始し、正常プロセッサから異常プロセッサに処理状態がコピーされる（Ｓ２６）。このとき、リセットされた異常プロセッサの不一致カウンタ１２２は初期化される。そして、再同期化制御部１２は、リセット回数カウンタ１２５をインクリメントする（Ｓ２７）。
【００６５】
一方、異常プロセッサの不一致カウンタ１２２が基準値を超えたのが２回目である場合（Ｓ２１のＮＯ）、または、初期化プログラムが基準時間内に終了しない場合（Ｓ２３のＮＯ）、再同期化制御部１２は、異常プロセッサの切り離し処理Ｅ３を行う（Ｓ３０、Ｓ３１〜Ｓ３２）。この場合、エラーレベル「高」と判定される。例えば、車載システムにおいてエラーレベル「高」と判定されたとき、自動車のドライバーに修理工場に向かうように通知される。
【００６６】
まず、再同期化制御部１２は、切り離し処理Ｅ３として、切り離し指示指示ｓ２を比較選択回路１１の外部アクセス制御部１１３に通知する（Ｓ３０、Ｓ３１）。これにより、例えば、異常プロセッサの配線が無効状態に制御され、システムから切り離される。続いて、再同期化制御部１２は、初期化プログラムが基準時間内に終了しない場合は（Ｓ２３のＮＯ）、正常プロセッサのウェイト指示ｓ３がアサートされているため、ウェイト指示ｓ３を解除する（Ｓ３２）。これにより、異常プロセッサが切り離され、この例では２つの正常プロセッサのみで動作が継続される。
【００６７】
具体的に、異常プロセッサの不一致カウンタ１２２が基準値を超えたのが２回目である場合（Ｓ２１のＮＯ）、リセット済みの異常プロセッサにおいて、不一致カウンタ１２２が再び基準値に達したことを意味する。そのため、当該プロセッサは、リセットしても異常な処理状態が解消されない恒久的な障害を有するものと判定され、システムから切り離される。または、初期化プログラムが基準時間内に終了しない場合（Ｓ２３のＮＯ）、当該プロセッサは、恒久的な障害を有することにより初期化プログラムの実行を完了できず、暴走状態にあると判定され、システムから切り離される。
【００６８】
本実施の形態例において、外部アクセス値の不一致が発生する恒久的な要因は、例えば、データバス、アドレスバス、制御バスの配線故障である。このような配線故障を有する場合、プロセッサは、次に実行する命令のメモリからの読み出し処理や、プロセッサｘ１〜ｘ３の処理状態の一時的なメモリへの格納処理等が行えない。
【００６９】
また、内部レジスタ値の不一致が発生する恒久的な要因は、例えば、内部レジスタｘ１Ｒ〜ｘ３Ｒを構成するフリップフロップの故障である。このような故障を有する場合、プロセッサは、次に実行する命令が格納されるメモリアドレスの演算や、プロセッサｘ１〜ｘ３の処理状態を一時保存するメモリのアドレス演算、パイプライン処理のシーケンス制御における次回のステートの決定処理等を行うことができない。
【００７０】
このように、異常プロセッサが恒久的な障害を有している場合、当該異常プロセッサは初期化プログラムの処理を適切に進めることができない。これにより、初期化プログラムが基準時間を超えても終了せず、異常プロセッサが暴走状態にあると判定される。または、初期化プログラムを終了させることができた場合であっても、異常プロセッサは異常な処理状態を再び誘発してしまう。そのため、このような異常プロセッサは、システムから切り離される。
【００７１】
なお、図４のフローチャート図において、フォールトトレラント制御部２０は、リセット回数カウンタ１２５が２回に達した場合に（Ｓ２１のＮＯ）、異常プロセッサの切り離しを行う。しかしながら、異常プロセッサの切り離しを行うか否かを判定する回数（基準リセット回数）は、２回に限定されるものではない。フォールトトレラント制御部２０は、異常プロセッサのリセット回数が、例えばユーザによって設定された基準リセット回数に達したときに、異常プロセッサを切り離してもよい。この場合、異常プロセッサのリセット回数（リセット回数カウンタ１２５）は、例えば、フォールトトレラントシステム１０の起動時にリセットされる。
【００７２】
続いて、図４のフローチャート図で説明したフォールトトレラント制御部２０の処理を、具体的に基づいて説明する。まず、内部レジスタの値の不一致が生じ、応急処理によって再同期化を図る場合の具体例について説明する。
【００７３】
［具体例：応急処理による再同期化（内部レジスタの値の不一致）］
図５は、内部レジスタの値の不一致が発生し応急処理が行われる場合の具体例を示す例図である。この例では、プロセッサｘ２において異常な内部レジスタの値が検知される。また、同図左の矢印ｃ１の示すサイクルは、処理状態の不一致が発生したサイクルと同一サイクルを、矢印ｃ２の示すサイクルは１サイクルを示す。
【００７４】
比較複写回路１３は、逐一、各プロセッサｘ１〜ｘ３のアプリケーションプログラムＰＲ実行時の内部レジスタの値を比較し、プロセッサ間で不一致が発生していないか否かを判定する。そして、比較複写回路１３は、内部レジスタの値の多数決の結果、異常プロセッサがプロセッサｘ２であることを特定し、再同期化制御部１２に、異常プロセッサ番号ｓ１「２」を通知する。
【００７５】
続いて、再同期化制御部１２は、異常プロセッサ番号ｓ１の通知を受けて、異常プロセッサの不一致カウンタ１２２が基準値に達したか否かを判定する。この例では、このとき、不一致カウンタ１２２は基準値に達しない。そこで、レジスタ複写制御部１３２は、比較選択回路１１の外部アクセス制御部１１３を介してウェイト指示ｓ３を通知し、全てのプロセッサｘ１〜ｘ３に１サイクルのウェイト指示ｓ３をアサートする。ウェイト指示ｓ３がアサートされたことによりプロセッサｘ１〜ｘ３は、命令フェッチ処理を停止する。これにより、プロセッサｘ１〜ｘ３の動作が停止される。
【００７６】
また、再同期化制御部１２は、比較複写回路１３にレジスタ複写指示ｓ５を通知する。レジスタ複写指示ｓ５を受けて、比較複写回路１３のレジスタ複写制御部１３２は、プロセッサ２の不一致が生じたレジスタに、プロセッサｘ１のレジスタの値をコピーする。続いて、再同期化制御部１２は、比較選択回路１１の外部アクセス制御部１１３を介して、全てのプロセッサｘ１〜ｘ３のウェイト指示ｓ３を解除する。その結果、プロセッサｘ１〜ｘ３の動作が再開される。そして、再同期化制御部１２は、プロセッサｘ２の不一致カウンタ１２２をインクリメントする。
【００７７】
このように、図５の具体例では、プロセッサｘ２の不一致カウンタ１２２が基準値に達しない場合、ノイズによって不一致の要因が発生した可能性が高いと判定され、リセット処理ではなく、応急処理Ｅ１−１によって、プロセッサｘ２の再同期化が図られる。内部レジスタの応急処理Ｅ１−１において、プロセッサｘ１〜ｘ３の停止時間は１サイクル程度に抑えられる。これにより、リセット処理が行われる場合に対して、プロセッサｘ１〜ｘ３の停止時間が最小限に抑えられる。この結果、アプリケーションプログラムＰＲの停止時間が最小限に抑えられ、処理の信頼性が向上する。
【００７８】
続いて、外部アクセスの値の不一致が生じ、応急処理によって再同期化を図る場合の具体例について説明する。
【００７９】
［具体例：応急処理による再同期化（外部アクセスの値の不一致）］
図６は、外部アクセスの値の不一致が発生し応急処理が行われる場合の具体例を示す例図である。この例では、プロセッサｘ１から異常な外部アクセスの値ｘ１ｂが出力される。また、同図左の矢印ｃ１１の示すサイクルは、処理状態の不一致が発生したサイクルと同一サイクルを示す。
【００８０】
比較選択回路１１は、逐一、各プロセッサｘ１〜ｘ３のアプリケーションプログラム実行時の外部アクセスの値を比較し、プロセッサ間で不一致が発生していないか否かを判定する。そして、比較選択回路１１は、外部アクセスの値の多数決の結果、異常プロセッサがプロセッサｘ１であることを特定し、再同期化制御部１２に、異常プロセッサ番号ｓ１「１」を通知する。また、比較選択回路１１の外部アクセス制御部１１３は、プロセッサｘ１ではなく、正常なプロセッサｘ２の外部アクセスの値を外部バスに出力するように指示ｓ１１する。このとき、プロセッサｘ１〜ｘ３の動作は継続される。
【００８１】
続いて、再同期化制御部１２は、異常プロセッサ番号ｓ１の通知を受けて、異常プロセッサｘ１の不一致カウンタ１２２が基準値に達したか否かを判定する。この例では、このとき、不一致カウンタ１２２は基準値に達しない。そこで、再同期化制御部１２は、プロセッサｘ１の不一致カウンタ１２２をインクリメントする。
【００８２】
このように、図６の具体例においても、プロセッサｘ１の不一致カウンタ１２２が基準値に達しない場合、ノイズによって不一致が発生した可能性が高いと判定され、リセット処理が回避される。外部アクセスの応急処理Ｅ１−２では、プロセッサｘ１〜ｘ３の動作は停止されないため、リセット処理が行われる場合に対して、プロセッサｘ１〜ｘ３の停止自体が回避される。この結果、アプリケーションプログラムＰＲの処理が継続され、処理の信頼性が向上する。
【００８３】
続いて、内部レジスタの値の不一致が生じ、リセット処理によって再同期化を図る場合の具体例について説明する。
【００８４】
［具体例：リセット処理による再同期化］
図７は、内部レジスタの値の不一致が発生しリセット処理が行われる場合の具体例を示す例図である。この例では、図５の具体例と同様にして、プロセッサｘ２において異常な内部レジスタの値ｘ２ａが検知される。また、同図左の矢印ｃ２１の示すサイクルは、処理状態の不一致が発生したサイクルと同一サイクルを、矢印ｃ２２の示すサイクルは、再同期化処理のサイクルを示す。
【００８５】
比較複写回路１３は、内部レジスタの値の多数決の結果、異常プロセッサがプロセッサｘ２であることを特定し、再同期化制御部１２に、異常プロセッサ番号ｓ１「２」を通知する。続いて、再同期化制御部１２は、異常プロセッサ番号ｓ１の通知を受けて、異常プロセッサｘ２の不一致カウンタ１２２が基準値に達したか否かを判定する。この例では、不一致カウンタ１２２が基準値に達する。また、この例では、不一致カウンタ１２２が初めて基準値に達したものとする。
【００８６】
そこで、再同期化制御部１２は、外部アクセス制御部１１３を介してウェイト指示ｓ３を通知し、プロセッサｘ１、ｘ３のウェイト指示ｓ３をアサートすると共に、プロセッサｘ２のリセット要求ｓｒ２をアサートする。ウェイト指示ｓ３がアサートされたことによりプロセッサｘ１、ｘ３の命令フェッチ処理が停止され、動作停止状態となる。プロセッサｘ２では、リセット要求ｓｒ２に基づいて、初期化プログラムが実行される。また、このとき、プロセッサｘ２には、ライト抑止指示ｓ４が通知され、初期化プログラム実行中の外部バス１６への出力が抑止される。再同期化制御部１２の監視タイマ１２１は、初期化プログラムの実行時間の監視を開始する（ｓ２１）。
【００８７】
プロセッサｘ２の初期化プログラムが完了すると、プロセッサｘ２は再同期化制御部１２に、初期化完了の信号ｓ２２を通知する。再同期化制御部１２は、初期化完了を検知すると、初期化終了フラグ１２３を制御し、外部アクセス制御部１１３を介してウェイト指示ｓ３を通知して、プロセッサｘ２のウェイト指示ｓ３をアサートする。これにより、プロセッサｘ１、ｘ３に加えて、初期化が完了したプロセッサｘ２についても動作が停止される。
【００８８】
続いて、再同期化制御部１２は、プロセッサｘ１〜ｘ３の割り込み要求ｓｉ１〜ｓｉ３をアサートすると共に、比較選択回路１１の外部アクセス制御部１１３を介して、プロセッサｘ１〜ｘ３のウェイト指示ｓ３を解除する。これにより、プロセッサｘ１〜ｘ３において、割り込みハンドラの処理が開始され、プロセッサｘ１の処理状態がプロセッサｘ２にコピーされる。コピーが完了すると、プロセッサｘ２の再同期化処理が完了する。続いて、再同期化制御部１２は、プロセッサｘ１〜ｘ３の割り込み要求ｓｉ１〜ｓｉ３を解除し、全てのプロセッサｘ１〜ｘ３の動作を再開させる。そして、再同期化制御部１２は、リセット回数カウンタ１２５をインクリメントする。
【００８９】
このように、プロセッサｘ２の不一致カウンタ１２２が基準値に達する場合は、異常プロセッサのリセット処理によって、各プロセッサ間の再同期化が図られる。異常プロセッサがリセットされることにより、プロセッサの初期化によって解消可能な障害については解消される。また、異常プロセッサがリセットされることにより、リセット後に、再び、処理状態の不一致が発生するか否かが検証され、異常プロセッサが恒久的な障害を有しているか否かが判定可能となる。
【００９０】
なお、図７の例では、リセット処理時の初期化プログラムが基準時間内に終了する例を示した。しかし、初期化プログラムが基準時間に終了しない場合、再同期化制御部１２は、プロセッサｘ２の切り離し指示ｓ２を外部アクセス制御部１１３に通知し、プロセッサｘ２をシステムから切り離す。そして、プロセッサｘ１、ｘ３のウェイト指示ｓ３がアサートされている場合、再同期化制御部１２は、ウェイト指示ｓ３を解除する。これにより、プロセッサｘ１、ｘ３の動作が再開され、２つのプロセッサによって処理が継続される。リセット回数カウンタ１２５が基準リセット回数に達する場合についても、同様に、プロセッサｘ２がシステムから切り離され、２つのプロセッサによって処理が継続される。
【００９１】
このように、プロセッサｘ２の初期化が基準時間内に終了しない場合、プロセッサｘ２のリセット回数が基準リセット回数に達する場合（この例では２回）、異常プロセッサがリセット処理によっても解消されない恒久的な障害を有すると判定され、システムから切り離される。これにより、処理状態の不一致が継続して発生することが防止され、システムで動作するアプリケーションプログラムの停止時間が最小限に抑えられることにより、処理の信頼性が向上する。
【００９２】
以上のようにして、本実施の形態例におけるフォールトトレラント制御装置は、３つ以上のプロセッサの処理状態を比較し異常な処理状態である異常プロセッサを検出する。そして、フォールトトレラント制御装置は、異常プロセッサを検出したとき、異常プロセッサに対応する不一致カウンタ（カウンタ）をインクリメントし、不一致カウンタが基準値に達した場合に異常プロセッサを初期化し正常な処理状態のプロセッサと同期させるリセット処理を行わせ、達していない場合に正常な処理状態に基づく応急処理を行わせる。
【００９３】
これにより、フォールトトレラント制御装置は、処理状態の不一致が発生した場合であっても処理状態の異常なプロセッサの不一致カウンタが基準値に達していない場合は、ノイズ等の一時的な要因によって処理状態の不一致が発生したとみなし、当該異常プロセッサのリセット処理を行わない。即ち、処理状態の不一致が発生する度にリセット処理が行われることが回避される。この場合、応急処理のみによって再同期化が図られ、アプリケーションプログラムの停止時間が短縮、または回避され、アプリケーションプログラムの処理の信頼性が向上する。特に人命に関わるようなマイコンで動作するアプリケーションプログラムの場合、停止時間が短いことが重要となる。
【００９４】
具体的に、本実施の形態例におけるフォールトトレラント制御装置は、プロセッサのバスへの出力値の不一致を検出することによって異常プロセッサを検出する。フォールトトレラント制御装置は、出力値の不一致を検出した場合、異常プロセッサに対応する不一致カウンタが基準値に達するか否かに関わらず、応急処理として、３つ以上のプロセッサの外部バスへの出力値のうち正常な出力値を選択してバスに出力させる。これにより、周辺回路に異常な外部アクセスの値が伝播することが回避される。また、この応急処理ではプロセッサの動作が停止されないため、リセット処理が行われない場合は、アプリケーションプログラムの処理の停止が回避される。
【００９５】
また、本実施の形態例におけるフォールトトレラント制御装置は、前記プロセッサのレジスタの値の不一致を検出することによって前記異常プロセッサを検出する。フォールトトレラント制御装置は、内部レジスタの値の不一致を検出すると、異常プロセッサに対応する不一致カウンタが基準値に達していない場合、リセット処理の代わりに、応急処理として異常プロセッサのレジスタに正常なレジスタの値を書き込む。この応急処理では、プロセッサの停止時間が１サイクル程度の最小限に抑えられるため、リセット処理が行われる場合に対して、アプリケーションプログラムの処理の停止時間が最小限に抑えられる。
【００９６】
さらに、処理状態の異常なプロセッサに対応する不一致カウンタが基準値に達した場合、フォールトトレラント制御装置は、一時的ではない要因によって処理状態の不一致が発生している可能性があると判定し、異常プロセッサのリセット処理を行う。これにより、リセット処理によって解消される障害については解消されると共に、リセット回数が基準リセット回数に達したか否かを検証することにより、当該異常プロセッサが恒久的な障害を有するか否かが判定される。
【００９７】
そして、異常プロセッサのリセット回数が基準のリセット回数に達する場合、フォールトトレラント制御装置は、当該異常プロセッサがリセット処理によって解消されない恒久的な障害有するものと判定し、異常プロセッサ以外の正常な処理状態のプロセッサのみによってシステムを継続させる。または、異常プロセッサのリセット処理時に初期化プログラム等の初期化処理が基準時間内に終了しない場合についても、フォールトトレラント制御装置は、当該異常プロセッサが恒久的な障害有するものと判定し、異常プロセッサ以外の正常な処理状態のプロセッサのみによってシステムを継続させる。これにより、異常な処理状態が継続して発生することが防止され、アプリケーションプログラムの停止時間が最小限に抑えられると共に、処理の信頼性が向上する。
【００９８】
ところで、本実施の形態例におけるフォールトトレラント制御装置は、プロセッサの外部アクセスの値、及び、内部レジスタの値の不一致を、比較対象の処理状態としているが、外部アクセス、または、内部レジスタの値のいずれかを比較対象の処理状態としてもよい。この場合についても、処理状態の不一致の要因が一時的な要因であるとみなされる場合には、異常プロセッサのリセット処理が回避される。これにより、アプリケーションプログラムの停止時間が短縮または回避される。
【００９９】
なお、本実施の形態例におけるフォールトトレラント制御装置は、外部アクセス値の不一致が検出された場合にインクリメントされる不一致カウンタと、内部レジスタの値の不一致が検出された場合にインクリメントされる不一致カウンタとを別に有してもよい。この場合、フォールトトレラント制御装置は、各不一致カウンタに対応する基準値をそれぞれ有する。これにより、一時的な要因による不一致か否かの判定の元となる基準値が、内部レジスタ、外部アクセスの不一致カウンタそれぞれについて設定可能となる。
【０１００】
例えば、ノイズを起因とする処理状態の不一致は、内部レジスタよりも、外部アクセスにおいてより発生しやすい。そのため、例えば、ユーザは、内部レジスタの不一致カウンタに対応する基準値を、外部アクセスの不一致カウンタに対応する基準値よりも小さな値に設定する。これにより、フォールトトレラント制御装置は、より適切な、リセット処理の要否判定を実現できる。
【０１０１】
また、外部アクセスの値の不一致は、内部レジスタの値の不一致に起因して発生している場合がある。そこで、ユーザは、例えば、内部レジスタの値の不一致カウンタに対応する基準値を、より小さな値に設定する。これにより、内部レジスタの値の不一致が基準値に達したときに異常プロセッサがリセットされ、外部アクセスの不一致が合わせて解消される。これにより、異常な処理状態が発生することが防止され、アプリケーションプログラムの停止時間が最小限に抑えられる。
【０１０２】
以上の実施の形態をまとめると、次の付記のとおりである。
【０１０３】
（付記１）
バスに接続された３つ以上のプロセッサを同期して同じ命令列を処理させるフォールトトレラント制御装置であって、
前記３つ以上のプロセッサの処理状態を比較し異常な処理状態である異常プロセッサを検出する異常プロセッサ検出手段と、
前記異常プロセッサを検出したとき、前記異常プロセッサに対応するカウンタをインクリメントし、前記カウンタが基準値に達した場合に前記異常プロセッサを初期化し前記正常な処理状態のプロセッサと同期させるリセット処理を行わせ、達しない場合に正常な処理状態に基づく応急処理を行わせる再同期化手段と、を有するフォールトトレラント制御装置。
【０１０４】
（付記２）
付記１において、
前記異常プロセッサ検出手段は、前記プロセッサの前記バスへの出力値の不一致を検出することによって前記異常プロセッサを検出し、
前記出力値の不一致が検出された場合の前記応急処理は、前記３つ以上のプロセッサの前記出力値のうち正常な出力値を選択して前記バスに出力する処理を含み、
前記再同期化手段は、前記出力値の不一致が検出された場合であって前記カウンタが基準値に達した場合に、前記リセット処理に加えてさらに前記応急処理を行わせるフォールトトレラント制御装置。
【０１０５】
（付記３）
付記１または２において、
前記異常プロセッサ検出手段は、前記プロセッサのレジスタの値の不一致を検出することによって前記異常プロセッサを検出し、
前記レジスタの値の不一致が検出された場合の前記応急処理は、前記異常プロセッサの前記レジスタに正常なレジスタの値を書き込む処理を含むフォールトトレラント制御装置。
【０１０６】
（付記４）
付記３において、
前記レジスタは、前記プロセッサのプログラムカウンタを保持するレジスタ、スタックポインタを保持するレジスタ、有限ステートマシンが有する前記プロセッサの状態情報を保持するレジスタのいずれかを含むフォールトトレラント制御装置。
【０１０７】
（付記５）
付記３または４において、
前記カウンタは、前記出力値の不一致が検出された場合にインクリメントされる第１のカウンタと、前記レジスタの値の不一致が検出された場合にインクリメントされる第２のカウンタとを有し、
前記基準値は、前記第１のカウンタに対応する第１の基準値と、前記第２のカウンタに対応する第２の基準値とを有するフォールトトレラント制御装置。
【０１０８】
（付記６）
付記１乃至５のいずれかにおいて、
前記再同期化手段は、前記カウンタが前記基準値を超えた回数を示すリセット回数が、基準リセット回数に達したとき、前記異常プロセッサ以外の前記正常な処理状態のプロセッサによって処理を継続させるフォールトトレラント制御装置。
【０１０９】
（付記７）
付記１乃至５のいずれかにおいて、
前記再同期化手段は、前記異常プロセッサの前記初期化が基準時間内に終了しないとき、前記異常プロセッサ以外の前記正常な処理状態のプロセッサによって処理を継続させるフォールトトレラント制御装置。
【０１１０】
（付記８）
付記１乃至７のいずれかにおいて、
前記基準値は、前記フォールトトレラント制御装置の起動時にリセットされるフォールトトレラント制御装置。
【０１１１】
（付記９）
バスに接続された３つ以上のプロセッサを同期して同じ命令列を処理させるフォールトトレラントシステムの制御方法であって、
前記３つ以上のプロセッサの処理状態を比較し異常な処理状態である異常プロセッサを検出する異常プロセッサ検出工程と、
前記異常プロセッサを検出したとき、前記異常プロセッサに対応するカウンタをインクリメントし、前記カウンタが基準値に達した場合に前記異常プロセッサを初期化し前記正常な処理状態のプロセッサと同期させるリセット処理を行わせ、達していない場合に正常な処理状態に基づく応急処理を行わせる再同期化工程と、を有するフォールトトレラントシステムの制御方法。
【符号の説明】
【０１１２】
１０：フォールトトレラントシステム、ｘ１〜ｘ３：プロセッサ、１４：メモリ、１５：メモリ制御部、ｅ１〜ｅｎ：周辺機能回路、２０：フォールトトレラント制御部、１１：比較選択回路、１２：再同期化制御部、１３：比較複写回路
【図１】
0005874492.tif 000002
【図２】
0005874492.tif 000003
【図３】
0005874492.tif 000004
【図４】
0005874492.tif 000005
【図５】
0005874492.tif 000006
【図６】
0005874492.tif 000007
【図７】
0005874492.tif 000008