(57)【特許請求の範囲】
【請求項１】
他のプログラム実行装置にエラーが発生した場合に前記他のプログラム実行装置から少なくとも１つのプログラムの実行を引き継ぐプログラム実行装置であって、
１つ以上のプログラムを指定する第１情報と、前記第１情報によって指定されたプログラムと前記他のプログラム実行装置により実行されるプログラムとのうち、前記他のプログラム実行装置により実行されるプログラムを少なくとも１つ含む一部のプログラムを指定する第２情報とを記憶するメモリと、
前記エラーを検知するエラー処理部を有し、前記エラー処理部により前記エラーが検知されていない場合、前記メモリに記憶された第１情報によって指定されたプログラムを実行し、前記エラー処理部により前記エラーが検知された場合、前記メモリに記憶された第２情報によって指定されたプログラムを実行する命令処理部と
を備え、
前記メモリは、前記第２情報の付加情報として、前記第２情報によって指定されたプログラムごとに、プログラムにおける処理の精度を下げてもよいかどうかを示す情報を記憶し、
前記命令処理部は、前記第２情報によって指定されたプログラムを実行する際に、前記第２情報の付加情報を参照して、プログラムにおける処理の精度を下げるかどうかを決定するプログラム実行装置。
【請求項２】
前記他のプログラム実行装置は、複数のプログラムを実行し、
前記メモリは、前記第１情報として、２つ以上のプログラムを指定する情報を記憶し、前記第２情報として、前記第１情報によって指定されたプログラムのうち一部のプログラムと前記他のプログラム実行装置により実行されるプログラムのうち一部のプログラムとを指定する情報を記憶する請求項１に記載のプログラム実行装置。
【請求項３】
前記メモリは、さらに、前記第１情報に対応し、前記第１情報によって指定されたプログラムを実行する周期を指定する第３情報と、前記第２情報に対応し、前記第２情報によって指定されたプログラムを実行する周期を指定する第４情報とを記憶し、
前記命令処理部は、前記エラー処理部により前記エラーが検知されていない場合、前記メモリに記憶された第３情報によって指定された周期で、前記第１情報によって指定されたプログラムを実行し、前記エラー処理部により前記エラーが検知された場合、前記メモリに記憶された第４情報によって指定された周期で、前記第２情報によって指定されたプログラムを実行する請求項１又は２に記載のプログラム実行装置。
【請求項４】
前記メモリは、前記第４情報として、前記第３情報によって指定された周期よりも長い周期を指定する情報を記憶する請求項３に記載のプログラム実行装置。
【請求項５】
前記命令処理部は、ＣＰＵに実装され、
前記メモリは、前記ＣＰＵにより専用されるローカルメモリである請求項１から４のいずれか１項に記載のプログラム実行装置。
【請求項６】
請求項１から５のいずれか１項に記載のプログラム実行装置である複数のプログラム実行装置
を備え、
それぞれのプログラム実行装置は、いずれかのプログラム実行装置にエラーが発生した場合にそのプログラム実行装置から少なくとも１つのプログラムの実行を引き継ぐプログラム実行システム。
【請求項７】
他のプログラム実行装置にエラーが発生した場合に前記他のプログラム実行装置から少なくとも１つのプログラムの実行を引き継ぐプログラム実行装置が、前記エラーを検知していない場合、１つ以上のプログラムを指定する第１情報をメモリから読み取り、読み取った第１情報によって指定されたプログラムを実行し、
前記プログラム実行装置が、前記エラーを検知した場合、前記第１情報によって指定されたプログラムと前記他のプログラム実行装置により実行されるプログラムとのうち、前記他のプログラム実行装置により実行されるプログラムを少なくとも１つ含む一部のプログラムを指定する第２情報をメモリから読み取り、読み取った第２情報によって指定されたプログラムを実行し、
前記プログラム実行装置が、前記第２情報によって指定されたプログラムを実行する際に、前記第２情報の付加情報としてメモリに記憶され、前記第２情報によって指定されたプログラムごとに、プログラムにおける処理の精度を下げてもよいかどうかを示す情報を参照して、プログラムにおける処理の精度を下げるかどうかを決定するプログラム実行方法。
【発明の詳細な説明】
【技術分野】
【０００１】
本発明は、プログラム実行装置及びプログラム実行システム及びプログラム実行方法に関するものである。
【背景技術】
【０００２】
高信頼が要求される組み込みシステムでは、マルチＣＰＵ（Ｃｅｎｔｒａｌ・Ｐｒｏｃｅｓｓｉｎｇ・Ｕｎｉｔ）構成が採用される。マルチＣＰＵ構成では、１個のＣＰＵが故障しても、組み込みシステムを停止させないように、故障したＣＰＵが実行していた処理を他のＣＰＵが引き継ぐ（例えば、特許文献１参照）。
【先行技術文献】
【特許文献】
【０００３】
【特許文献１】特開２０１２−７３７４８号公報
【発明の概要】
【発明が解決しようとする課題】
【０００４】
特許文献１に記載のシステムでは、故障したＣＰＵが実行していた処理を引き継いだ代替ＣＰＵが、故障したＣＰＵが実行していた処理よりも低負荷で、その処理を実行する。代替ＣＰＵは、予め決められた周期時間で、元々実行していた処理に加えて、故障したＣＰＵの処理を実行することが求められる。そのため、代替ＣＰＵは、追加の処理を実行するための余裕を持っていなければならない。余裕とは、処理を実行するための時間又はリソースのことである。【０００５】
本発明は、プログラムを実行するシステムの信頼性の向上を目的とする。
【課題を解決するための手段】
【０００６】
本発明の一態様に係るプログラム実行装置は、
他のプログラム実行装置にエラーが発生した場合に前記他のプログラム実行装置から少なくとも１つのプログラムの実行を引き継ぐプログラム実行装置であって、
１つ以上のプログラムを指定する第１情報と、前記第１情報によって指定されたプログラムと前記他のプログラム実行装置により実行されるプログラムとのうち、前記他のプログラム実行装置により実行されるプログラムを少なくとも１つ含む一部のプログラムを指定する第２情報とを記憶するメモリと、
前記エラーを検知するエラー処理部を有し、前記エラー処理部により前記エラーが検知されていない場合、前記メモリに記憶された第１情報によって指定されたプログラムを実行し、前記エラー処理部により前記エラーが検知された場合、前記メモリに記憶された第２情報によって指定されたプログラムを実行する命令処理部とを備える。
【発明の効果】
【０００７】
本発明では、プログラム実行装置が、他のプログラム実行装置のエラーを検知した場合、予め定義された情報に基づいて、実行中のプログラムと他のプログラム実行装置のプログラムとのうち、他のプログラム実行装置のプログラムを少なくとも１つ含む一部のプログラムを実行する。プログラム実行装置が、実行中のプログラムと他のプログラム実行装置のプログラムとの全てを実行できるほどの余裕を持っていなくても、他のプログラム実行装置からプログラムの実行を引き継ぐことができるため、プログラムを実行するシステムの信頼性が向上する。
【図面の簡単な説明】
【０００８】
【図１】実施の形態１に係るプログラム実行システムの構成を示すブロック図。
【図２】実施の形態１に係るプログラム実行装置が保持するプログラムテーブルの例を示す図。
【図３】実施の形態１に係る他のプログラム実行装置が保持するプログラムテーブルの例を示す図。
【図４】実施の形態１に係るプログラム実行装置の動作を示すフローチャート。
【図５】実施の形態１に係るプログラム実行装置の動作を示すフローチャート。
【図６】実施の形態２に係るプログラム実行装置が保持するプログラムテーブルの例を示す図。
【図７】実施の形態２に係る他のプログラム実行装置が保持するプログラムテーブルの例を示す図。
【図８】実施の形態２に係るプログラム実行装置の動作を示すフローチャート。
【図９】実施の形態２に係るプログラム実行装置の動作を示すフローチャート。
【図１０】本発明の実施の形態に係るプログラム実行システムのハードウェア構成例を示す図。
【発明を実施するための形態】
【０００９】
以下、本発明の実施の形態について、図を用いて説明する。なお、各図中、同一又は相当する部分には、同一符号を付している。実施の形態の説明において、同一又は相当する部分については、その説明を適宜省略又は簡略化する。
【００１０】
実施の形態１．
本実施の形態に係るシステム及び装置の構成、本実施の形態に係る装置の動作、本実施の形態の効果を順番に説明する。
【００１１】
＊＊＊構成の説明＊＊＊
図１を参照して、本実施の形態に係るシステムであるプログラム実行システム５００の構成を説明する。
【００１２】
プログラム実行システム５００は、本実施の形態に係る装置である複数のプログラム実行装置を備える。それぞれのプログラム実行装置は、通常は個別にプログラムを実行する。本実施の形態では、それぞれのプログラム実行装置は、個別に複数のプログラムを実行する。それぞれのプログラム実行装置は、いずれかのプログラム実行装置にエラーが発生した場合には、そのプログラム実行装置から少なくとも１つのプログラムの実行を引き継ぐ。
【００１３】
プログラム実行装置の数は適宜変更することができるが、本実施の形態において、プログラム実行システム５００は、２つのプログラム実行装置１００Ｘ，１００Ｙを備える。プログラム実行装置１００Ｘは、他のプログラム実行装置１００Ｙにエラーが発生した場合に、他のプログラム実行装置１００Ｙから少なくとも１つのプログラムの実行を引き継ぐ。プログラム実行装置１００Ｘにエラーが発生した場合には、他のプログラム実行装置１００Ｙが同じように動作する。
【００１４】
プログラム実行システム５００は、プログラムを実行するシステムであれば、どのようなシステムであってもよいが、本実施の形態では、複数のＣＰＵを用いて、一定の周期で予め決められた処理を実行する組み込みシステムである。１個のＣＰＵが故障した場合には、組み込みシステムを停止させないように、故障したＣＰＵが実行していた処理を他のＣＰＵが引き継ぐ。前述したように、ＣＰＵとは、プログラム実行装置１００Ｘ，１００Ｙのことである。
【００１５】
プログラム実行システム５００は、さらに、プログラム実行システム５００のＩ／Ｏ（Ｉｎｐｕｔ／Ｏｕｔｐｕｔ）を制御するＩ／Ｏ部２００と、プログラム実行装置１００Ｘ，１００Ｙによって共用されるデータを保持する共有メモリ３００とを備える。また、プログラム実行システム５００は、プログラム実行装置１００Ｘ，１００ＹとＩ／Ｏ部２００と共有メモリ３００とを接続するシステムバス４００を備える。
【００１６】
プログラム実行装置１００Ｘは、メモリ１１０と、命令処理部１２０とを備える。本実施の形態において、命令処理部１２０は、ＣＰＵに実装される。メモリ１１０は、ＣＰＵにより専用されるローカルメモリである。ローカルメモリは、ＣＰＵの内外どちらにあってもよいが、本実施の形態ではＣＰＵの内部にある。
【００１７】
メモリ１１０は、処理を実行するためのプログラム及びデータを記憶する。メモリ１１０に記憶されるプログラム及びデータには、エラーを検知できるようにパリティビットが付加される。
【００１８】
メモリ１１０は、さらに、処理を実行するためのプログラムを定義するプログラムテーブル１１１Ｘを保持する。
【００１９】
ここで、プログラムテーブル１１１Ｘの例を図２に示す。
【００２０】
プログラムテーブル１１１Ｘは、第１プログラムテーブル１１２Ｘと、第２プログラムテーブル１１３Ｘと、プログラムテーブルポインタ１１４Ｘと、ポインタ更新履歴１１５Ｘとを有する。
【００２１】
第１プログラムテーブル１１２Ｘは、通常動作時用のプログラムテーブルである。「通常動作時」とは、他のプログラム実行装置１００Ｙにエラーが発生したことが検知されていないときのことである。第１プログラムテーブル１１２Ｘは、通常動作時にプログラム実行装置１００Ｘが実行するプログラムを定義する。「プログラムを定義する」とは、実際には、プログラムへのポインタを格納することであり、プログラム本体は、共有メモリ３００にある。プログラムへのポインタは、第１情報１０１Ｘとして第１プログラムテーブル１１２Ｘに保持される。
【００２２】
図２の例では、第１プログラムテーブル１１２Ｘが、プログラムＡ−１，Ａ−２，Ａ−３，Ａ−４、終了プログラムを順番に示す第１情報１０１Ｘを保持する。よって、プログラム実行装置１００Ｘは、通常動作時にはプログラムＡ−１，Ａ−２，Ａ−３，Ａ−４を実行する。プログラム実行装置１００Ｘは、プログラムＡ−４の実行が終わった後は、終了プログラムを実行する。終了プログラムは、次の定周期割り込みを待つプログラムである。
【００２３】
第２プログラムテーブル１１３Ｘは、エラー検知時用のプログラムテーブルである。「エラー検知時」とは、他のプログラム実行装置１００Ｙにエラーが発生したことが検知されたときのことである。第２プログラムテーブル１１３Ｘは、エラー検知時にプログラム実行装置１００Ｘが実行するプログラムを定義する。前述したように、「プログラムを定義する」とは、実際には、プログラムへのポインタを格納することであり、プログラム本体は、共有メモリ３００にある。プログラムへのポインタは、第２情報１０２Ｘとして第２プログラムテーブル１１３Ｘに保持される。
【００２４】
図２の例では、第２プログラムテーブル１１３Ｘが、プログラムＡ−１，Ａ−２，Ａ−４Ｌ，Ｂ−１，Ｂ−３Ｌ、終了プログラムを順番に示す第２情報１０２Ｘを保持する。よって、プログラム実行装置１００Ｘは、エラー検知時には、通常動作時に実行するプログラムの一部であるプログラムＡ−１，Ａ−２，Ａ−４Ｌと、プログラム実行装置１００Ｙが実行していたプログラムの一部であるプログラムＢ−１，Ｂ−３Ｌを実行する。プログラム実行装置１００Ｘは、プログラムＢ−３Ｌの実行が終わった後は、終了プログラムを実行する。前述したように、終了プログラムは、次の定周期割り込みを待つプログラムである。
【００２５】
なお、プログラムＡ−４Ｌのように「Ｌ」が付くプログラムは、本来実行するプログラムに比較して、処理の精度を落としたプログラム、或いは、周期によっては実行しないプログラムである。
【００２６】
プログラムテーブルポインタ１１４Ｘは、第１プログラムテーブル１１２Ｘと第２プログラムテーブル１１３Ｘとのいずれかを指す。
【００２７】
ポインタ更新履歴１１５Ｘは、プログラムテーブルポインタ１１４Ｘが第１プログラムテーブル１１２Ｘを指すときにクリアされ、プログラムテーブルポインタ１１４Ｘが第２プログラムテーブル１１３Ｘを指すときにセットされるフラグである。
【００２８】
命令処理部１２０は、メモリ１１０に記憶されたプログラムを実行する。命令処理部１２０は、故障検知のための比較回路を有する。
【００２９】
命令処理部１２０は、さらに、初期化部１２１と、通常処理部１２２と、エラー処理部１２３とを有する。初期化部１２１、通常処理部１２２、エラー処理部１２３の機能を実現するプログラムは、共有メモリ３００にあり、ＣＰＵの起動時にメモリ１１０にロードされるが、予めメモリ１１０にあってもよい。
【００３０】
初期化部１２１は、後述する初期化処理を実行する。
【００３１】
通常処理部１２２は、通常動作時に、第１プログラムテーブル１１２Ｘで定義されたプログラムを実行する。
【００３２】
エラー処理部１２３は、命令処理部１２０がメモリ１１０にアクセスした際のパリティチェックによってプログラム実行装置１００Ｘの故障を検知する。エラー処理部１２３は、プログラム実行装置１００Ｘの故障を検知すると、他のプログラム実行装置１００Ｙにエラーを通知する。また、エラー処理部１２３は、他のプログラム実行装置１００Ｙからエラーが通知されると、他のプログラム実行装置１００Ｙの処理を引き継ぐ。即ち、エラー処理部１２３は、エラー検知時に、第２プログラムテーブル１１３Ｘで定義されたプログラムを実行する。
【００３３】
上記のように、メモリ１１０は、第１情報１０１Ｘと、第２情報１０２Ｘとを記憶する。第１情報１０１Ｘは、１つ以上のプログラムを指定する情報である。第２情報１０２Ｘは、第１情報１０１Ｘによって指定されたプログラムと他のプログラム実行装置１００Ｙにより実行されるプログラムとのうち、他のプログラム実行装置１００Ｙにより実行されるプログラムを少なくとも１つ含む一部のプログラムを指定する情報である。
【００３４】
本実施の形態では、第１情報１０１Ｘは、２つ以上のプログラムを指定する情報である。図２の例では、プログラムＡ−１，Ａ−２，Ａ−３，Ａ−４が、「２つ以上のプログラム」に相当する。第２情報１０２Ｘは、第１情報１０１Ｘによって指定されたプログラムのうち一部のプログラムと他のプログラム実行装置１００Ｙにより実行されるプログラムのうち一部のプログラムとを指定する情報である。図２の例では、プログラムＡ−１，Ａ−２，Ａ−４Ｌが、前者の「一部のプログラム」に相当し、プログラムＢ−１，Ｂ−３Ｌが、後者の「一部のプログラム」に相当する。
【００３５】
命令処理部１２０は、エラーを検知するエラー処理部１２３を有する。命令処理部１２０は、エラー処理部１２３によりエラーが検知されていない場合、メモリ１１０に記憶された第１情報１０１Ｘによって指定されたプログラムを実行する。命令処理部１２０は、エラー処理部１２３によりエラーが検知された場合、メモリ１１０に記憶された第２情報１０２Ｘによって指定されたプログラムを実行する。
【００３６】
メモリ１１０は、さらに、第２情報１０２Ｘの付加情報として、第２情報１０２Ｘによって指定されたプログラムごとに、プログラムにおける処理の精度を下げてもよいかどうかを示す情報、或いは、周期によってはプログラムを実行しないことがあるかどうかを示す情報を記憶する。図２の例では、プログラムＡ−４Ｌ，Ｂ−３Ｌにおける処理の精度を下げてもよいことを示す付加情報が記憶されるが、周期によってはプログラムＡ−４Ｌ，Ｂ−３Ｌを実行しないことを示す付加情報が代わりに記憶されてもよい。
【００３７】
命令処理部１２０は、第２情報１０２Ｘによって指定されたプログラムを実行する際に、第２情報１０２Ｘの付加情報を参照して、プログラムにおける処理の精度を下げるかどうかを決定する。処理の精度を下げる場合、命令処理部１２０は、プログラムに含まれる浮動小数点型の変数を整数型の変数に変換して処理を実行したり、プログラムに含まれるルーティンのうち一部のルーティンを省略したりする。
【００３８】
プログラム実行装置１００Ｙは、プログラムテーブル１１１Ｘに代えて、プログラムテーブル１１１Ｙをメモリ１１０に保持する点を除き、プログラム実行装置１００Ｘと同じように構成される。
【００３９】
ここで、プログラムテーブル１１１Ｙの例を図３に示す。
【００４０】
プログラムテーブル１１１Ｙは、第１プログラムテーブル１１２Ｙと、第２プログラムテーブル１１３Ｙと、プログラムテーブルポインタ１１４Ｙと、ポインタ更新履歴１１５Ｙとを有する。
【００４１】
第１プログラムテーブル１１２Ｙは、第１プログラムテーブル１１２Ｘと同じように、通常動作時用のプログラムテーブルである。
【００４２】
図３の例では、第１プログラムテーブル１１２Ｙが、プログラムＢ−１，Ｂ−２，Ｂ−３、終了プログラムを順番に示す第１情報１０１Ｙを保持する。よって、プログラム実行装置１００Ｙは、通常動作時にはプログラムＢ−１，Ｂ−２，Ｂ−３を実行する。プログラム実行装置１００Ｙは、プログラムＢ−３の実行が終わった後は、終了プログラムを実行する。
【００４３】
第２プログラムテーブル１１３Ｙは、第２プログラムテーブル１１３Ｘと同じように、エラー検知時用のプログラムテーブルである。
【００４４】
図３の例では、第２プログラムテーブル１１３Ｙが、プログラムＢ−１，Ｂ−２Ｌ，Ｂ−３，Ａ−１，Ａ−３Ｌ，Ａ−４、終了プログラムを順番に示す第２情報１０２Ｙを保持する。よって、プログラム実行装置１００Ｙは、エラー検知時には、通常動作時に実行するプログラムであるプログラムＢ−１，Ｂ−２Ｌ，Ｂ−３と、プログラム実行装置１００Ｘが実行していたプログラムの一部であるプログラムＡ−１，Ａ−３Ｌ，Ａ−４を実行する。プログラム実行装置１００Ｙは、プログラムＡ−４の実行が終わった後は、終了プログラムを実行する。
【００４５】
プログラムテーブルポインタ１１４Ｙは、第１プログラムテーブル１１２Ｙと第２プログラムテーブル１１３Ｙとのいずれかを指す。
【００４６】
ポインタ更新履歴１１５Ｙは、プログラムテーブルポインタ１１４Ｙが第１プログラムテーブル１１２Ｙを指すときにクリアされ、プログラムテーブルポインタ１１４Ｙが第２プログラムテーブル１１３Ｙを指すときにセットされるフラグである。
【００４７】
＊＊＊動作の説明＊＊＊
図４及び図５を参照して、本実施の形態に係るプログラム実行装置１００Ｘの動作を説明する。プログラム実行装置１００Ｘの動作は、本実施の形態に係るプログラム実行方法に相当する。なお、他のプログラム実行装置１００Ｙの動作については、プログラム実行装置１００Ｘの動作と同様であるため、説明を省略する。
【００４８】
図４は、ＣＰＵの起動時のフロー、即ち、初期化処理の手順を示している。
【００４９】
ステップＳ１０において、初期化部１２１は、ハードウェアの初期化を実行する。
【００５０】
ステップＳ１１において、初期化部１２１は、ポインタ更新履歴１１５Ｘをクリアする。
【００５１】
ステップＳ１２において、初期化部１２１は、プログラムテーブルポインタ１１４Ｘが第１プログラムテーブル１１２Ｘを指すように、プログラムテーブルポインタ１１４Ｘを設定する。
【００５２】
ステップＳ１３において、初期化部１２１は、図示していない定周期割り込み用のタイマーを設定する。
【００５３】
ステップＳ１４において、命令処理部１２０は、待機ループに入り、定周期割り込みの発生を待つ。
【００５４】
図５は、ＣＰＵの定周期割り込み発生時のフローを示している。
【００５５】
ステップＳ２０において、命令処理部１２０は、図示していないポインタオフセットをクリアする。
【００５６】
ステップＳ２１において、命令処理部１２０は、ポインタ更新履歴１１５Ｘがクリアされているか、セットされているかをチェックする。ポインタ更新履歴１１５Ｘがクリアされていれば、プログラムテーブルポインタ１１４Ｘは、ステップＳ１２で設定された状態、即ち、第１プログラムテーブル１１２Ｘを指したままである。この場合、フローは、ステップＳ３０に進む。ポインタ更新履歴１１５Ｘがセットされていれば、プログラムテーブルポインタ１１４Ｘは、第２プログラムテーブル１１３Ｘを指した状態になっている。この場合、フローはステップＳ２２に進む。
【００５７】
ステップＳ２２において、エラー処理部１２３は、他のＣＰＵからのエラー通知の有無を確認する。他のＣＰＵとは、他のプログラム実行装置１００Ｙのことである。
【００５８】
ステップＳ２３において、エラー通知がなかった場合には、プログラムテーブルポインタ１１４Ｘが第１プログラムテーブル１１２Ｘを指したまま、フローはステップＳ３０に進む。エラー通知があった場合には、フローはステップＳ２４に進む。
【００５９】
ステップＳ２４において、エラー処理部１２３は、他のＣＰＵの処理を引き継ぐため、プログラムテーブルポインタ１１４Ｘが第２プログラムテーブル１１３Ｘを指すように、プログラムテーブルポインタ１１４Ｘを更新する。以降の定周期割り込み発生時は、フローがステップＳ２１からステップＳ３０のパスを通ることとなる。
【００６０】
ステップＳ２５において、エラー処理部１２３は、ポインタ更新履歴１１５Ｘをセットする。
【００６１】
ステップＳ３０において、命令処理部１２０は、プログラムテーブルポインタ１１４Ｘにポインタオフセットを加算した場所から、プログラムをロードする。図２の例では、プログラムテーブルポインタ１１４Ｘが第１プログラムテーブル１１２Ｘを指しており、ポインタオフセットがクリアされている場合、通常処理部１２２が、プログラムＡ−１をロードする。プログラムテーブルポインタ１１４Ｘが第２プログラムテーブル１１３Ｘを指しており、ポインタオフセットがクリアされている場合、エラー処理部１２３が、プログラムＡ−１をロードする。
【００６２】
ステップＳ３１において、命令処理部１２０は、プログラムテーブルポインタ１１４Ｘにポインタオフセットを加算した場所からロードしたプログラムが終了プログラムかどうかを確認する。終了プログラムである場合には、フローはステップＳ３４に進む。終了プログラムでない場合には、フローはステップＳ３２に進む。
【００６３】
ステップＳ３２において、命令処理部１２０は、ロードしたプログラムを実行する。
【００６４】
ステップＳ３３において、命令処理部１２０は、ポインタオフセットを更新し、次のプログラムのロードを準備する。命令処理部１２０は、終了プログラムをロードするまで、ステップＳ３０からステップＳ３３の処理を繰り返す。
【００６５】
ステップＳ３４において、命令処理部１２０は、待機ループに入り、次の定周期割り込みの発生を待つ。
【００６６】
＊＊＊効果の説明＊＊＊
本実施の形態では、プログラム実行装置１００Ｘが、他のプログラム実行装置１００Ｙのエラーを検知した場合、予め定義された情報に基づいて、実行中のプログラムと他のプログラム実行装置１００Ｙのプログラムとのうち、他のプログラム実行装置１００Ｙのプログラムを少なくとも１つ含む一部のプログラムを実行する。プログラム実行装置１００Ｘが、実行中のプログラムと他のプログラム実行装置１００Ｙのプログラムとの全てを実行できるほどの余裕を持っていなくても、他のプログラム実行装置１００Ｙからプログラムの実行を引き継ぐことができるため、プログラム実行システム５００の信頼性が向上する。
【００６７】
本実施の形態では、１つのＣＰＵが故障したときでも、他のＣＰＵが故障したＣＰＵの処理を引き継ぐことで、組み込みシステムを停止させないため、高信頼組み込みシステムを実現することができる。処理を引き継ぐＣＰＵは、元々実行していた処理について、一部のみを継続したり、精度を落としたり、周期によっては実行しなかったり（即ち、実行すべき周期に制約を加えたり）する。処理を引き継ぐＣＰＵは、さらに、新たに追加される処理についても、一部のみを引き継いだり、精度を落としたり、実行すべき周期に制約を加えたりする。これにより、予め決められた周期時間内で、システム動作を継続させるための処理を実行することが可能となる。
【００６８】
本実施の形態によれば、故障したＣＰＵを代替するＣＰＵは、追加の処理を実行するための余裕を持っている必要がなくなる。また、プログラムテーブルを使用しているので、エラー検知時に実行するプログラムが通常動作時と同じである場合、プログラムを格納する領域を増大させる必要がない。プログラムを格納する領域を共通化することで、システム開発効率を上げることもできる。
【００６９】
＊＊＊他の構成＊＊＊
本実施の形態において、プログラム実行装置１００Ｘ，１００Ｙは、ローカルメモリが搭載されたＣＰＵであるが、プログラム実行装置１００Ｘ，１００Ｙは、ローカルメモリが搭載されていないＣＰＵとＣＰＵに接続されたローカルメモリとの組み合わせであってもよい。或いは、プログラム実行装置１００Ｘ，１００Ｙは、プログラムを実行可能な他の要素又は他の要素の組み合わせであってもよい。
【００７０】
実施の形態２．
本実施の形態に係るシステム及び装置の構成、本実施の形態に係る装置の動作、本実施の形態の効果を順番に説明する。主に実施の形態１との差異を説明する。
【００７１】
本実施の形態では、故障したＣＰＵから処理が引き継がれる際に、処理の精度を落としたり、実行すべき周期に制約を加えたりするだけでなく、予め決められた周期時間を変更することができる。
【００７２】
＊＊＊構成の説明＊＊＊
本実施の形態に係るシステムであるプログラム実行システム５００の構成については、図１に示した実施の形態１のものと同じであるため、説明を省略する。
【００７３】
ここで、プログラムテーブル１１１Ｘの例を図６に示す。
【００７４】
図２の例と図６の例との違いは、プログラムテーブル１１１Ｘが、第１タイマー１１６Ｘと、第２タイマー１１７Ｘとを有する点である。
【００７５】
第１タイマー１１６Ｘは、プログラム実行装置１００Ｘが通常動作時に使用する周期タイマーである。第１タイマー１１６Ｘの値は、第３情報１０３Ｘとしてプログラムテーブル１１１Ｘに保持される。
【００７６】
第２タイマー１１７Ｘは、プログラム実行装置１００Ｘがエラー検知時に使用する周期タイマーである。第２タイマー１１７Ｘの値は、第４情報１０４Ｘとしてプログラムテーブル１１１Ｘに保持される。
【００７７】
上記のように、メモリ１１０は、第３情報１０３Ｘと、第４情報１０４Ｘとを記憶する。第３情報１０３Ｘは、第１情報１０１Ｘに対応し、第１情報１０１Ｘによって指定されたプログラムを実行する周期を指定する情報である。第４情報１０４Ｘは、第２情報１０２Ｘに対応し、第２情報１０２Ｘによって指定されたプログラムを実行する周期を指定する情報である。
【００７８】
本実施の形態では、第４情報１０４Ｘは、第３情報１０３Ｘによって指定された周期よりも長い周期を指定する情報である。
【００７９】
命令処理部１２０は、エラー処理部１２３によりエラーが検知されていない場合、メモリ１１０に記憶された第３情報１０３Ｘによって指定された周期で、第１情報１０１Ｘによって指定されたプログラムを実行する。命令処理部１２０は、エラー処理部１２３によりエラーが検知された場合、メモリ１１０に記憶された第４情報１０４Ｘによって指定された周期で、第２情報１０２Ｘによって指定されたプログラムを実行する。
【００８０】
ここで、プログラムテーブル１１１Ｙの例を図７に示す。
【００８１】
図３の例と図７の例との違いは、プログラムテーブル１１１Ｙが、第１タイマー１１６Ｙと、第２タイマー１１７Ｙとを有する点である。
【００８２】
第１タイマー１１６Ｙは、プログラム実行装置１００Ｙが通常動作時に使用する周期タイマーである。第１タイマー１１６Ｙの値は、第３情報１０３Ｙとしてプログラムテーブル１１１Ｙに保持される。
【００８３】
第２タイマー１１７Ｙは、プログラム実行装置１００Ｙがエラー検知時に使用する周期タイマーである。第２タイマー１１７Ｙの値は、第４情報１０４Ｙとしてプログラムテーブル１１１Ｙに保持される。
【００８４】
＊＊＊動作の説明＊＊＊
図８及び図９を参照して、本実施の形態に係るプログラム実行装置１００Ｘの動作を説明する。プログラム実行装置１００Ｘの動作は、本実施の形態に係るプログラム実行方法に相当する。なお、他のプログラム実行装置１００Ｙの動作については、プログラム実行装置１００Ｘの動作と同様であるため、説明を省略する。
【００８５】
図８は、ＣＰＵの起動時のフロー、即ち、初期化処理の手順を示している。
【００８６】
ステップＳ１０からステップＳ１２の処理は、図４に示したフローと同じである。
【００８７】
図４に示したフローのステップＳ１３では、システムで予め決められた周期のタイマーが設定される。これに対し、図８に示したフローのステップＳ３３では、初期化部１２１が、通常動作時用に決められた周期のタイマーである第１タイマー１１６Ｘを設定する。
【００８８】
ステップＳ１４の処理は、図４に示したフローと同じである。
【００８９】
図９は、ＣＰＵの定周期割り込み発生時のフローを示している。
【００９０】
ステップＳ２０からステップＳ２５の処理は、図５に示したフローと同じである。
【００９１】
本実施の形態では、ステップＳ２５とステップＳ３０との間に、ステップＳ４６の処理が実行される。
【００９２】
ステップＳ２５でポインタ更新履歴１１５Ｘがセットされた後、ステップＳ４６において、エラー処理部１２３は、エラー検知時用に決められた周期のタイマーである第２タイマー１１７Ｘを設定する。
【００９３】
ステップＳ３０からステップＳ３４の処理は、図５に示したフローと同じである。
【００９４】
＊＊＊効果の説明＊＊＊
本実施の形態では、１つのＣＰＵが故障したときでも、他のＣＰＵが故障したＣＰＵの処理を引き継ぐことで、組み込みシステムを停止させないため、高信頼組み込みシステムを実現することができる。処理を引き継ぐＣＰＵは、新たに追加される処理について、一部のみを引き継いだり、精度を落としたり、実行すべき周期に制約を加えたりするだけでなく、予め決められた周期時間を変更する。具体的には、処理を引き継ぐＣＰＵは、周期時間の変更が許される処理について、周期時間を長めに変更する。これにより、システム動作を継続させるための処理を実行することが可能となる。
【００９５】
以下では、図１０を参照して、本発明の実施の形態に係るプログラム実行システム５００のハードウェア構成例を説明する。
【００９６】
プログラム実行システム５００は、コンピュータである。プログラム実行システム５００は、プロセッサ９０１、補助記憶装置９０２、メモリ９０３、通信装置９０４、入力インタフェース９０５、ディスプレイインタフェース９０６といったハードウェアを備える。プロセッサ９０１は、信号線９１０を介して他のハードウェアと接続され、これら他のハードウェアを制御する。入力インタフェース９０５は、入力装置９０７に接続されている。ディスプレイインタフェース９０６は、ディスプレイ９０８に接続されている。
【００９７】
プロセッサ９０１は、プロセッシングを行うＩＣ（Ｉｎｔｅｇｒａｔｅｄ・Ｃｉｒｃｕｉｔ）である。プロセッサ９０１は、具体的には、ＣＰＵである。プロセッサ９０１は、図１に示したプログラム実行装置１００Ｘ，１００Ｙに相当する。
【００９８】
補助記憶装置９０２は、具体的には、ＲＯＭ（Ｒｅａｄ・Ｏｎｌｙ・Ｍｅｍｏｒｙ）、フラッシュメモリ、又は、ＨＤＤ（Ｈａｒｄ・Ｄｉｓｋ・Ｄｒｉｖｅ）である。
【００９９】
メモリ９０３は、具体的には、ＲＡＭ（Ｒａｎｄｏｍ・Ａｃｃｅｓｓ・Ｍｅｍｏｒｙ）である。メモリ９０３は、図１に示した共有メモリ３００に相当する。
【０１００】
通信装置９０４は、データを受信するレシーバ９２１及びデータを送信するトランスミッタ９２２を含む。通信装置９０４は、具体的には、通信チップ又はＮＩＣ（Ｎｅｔｗｏｒｋ・Ｉｎｔｅｒｆａｃｅ・Ｃａｒｄ）である。
【０１０１】
入力インタフェース９０５は、入力装置９０７のケーブル９１１が接続されるポートである。入力インタフェース９０５は、具体的には、ＵＳＢ（Ｕｎｉｖｅｒｓａｌ・Ｓｅｒｉａｌ・Ｂｕｓ）端子である。入力インタフェース９０５は、図１に示したＩ／Ｏ部２００に相当する。
【０１０２】
ディスプレイインタフェース９０６は、ディスプレイ９０８のケーブル９１２が接続されるポートである。ディスプレイインタフェース９０６は、具体的には、ＵＳＢ端子又はＨＤＭＩ（登録商標）（Ｈｉｇｈ・Ｄｅｆｉｎｉｔｉｏｎ・Ｍｕｌｔｉｍｅｄｉａ・Ｉｎｔｅｒｆａｃｅ）端子である。ディスプレイインタフェース９０６は、図１に示したＩ／Ｏ部２００に相当する。
【０１０３】
入力装置９０７は、具体的には、マウス、タッチペン、キーボード、又は、タッチパネルである。
【０１０４】
ディスプレイ９０８は、具体的には、ＬＣＤ（Ｌｉｑｕｉｄ・Ｃｒｙｓｔａｌ・Ｄｉｓｐｌａｙ）である。
【０１０５】
記録媒体である補助記憶装置９０２には、初期化部１２１、通常処理部１２２、エラー処理部１２３といった「部」の機能を実現するプログラムが記憶されている。このプログラムは、メモリ９０３にロードされ、プロセッサ９０１に読み込まれ、プロセッサ９０１によって実行される。補助記憶装置９０２には、ＯＳ（Ｏｐｅｒａｔｉｎｇ・Ｓｙｓｔｅｍ）も記憶されている。ＯＳの少なくとも一部がメモリ９０３にロードされ、プロセッサ９０１はＯＳを実行しながら、「部」の機能を実現するプログラムを実行する。
【０１０６】
図１０では、１つのプロセッサ９０１が示されているが、プログラム実行システム５００は、実際には複数のプロセッサ９０１を備えている。そして、複数のプロセッサ９０１が「部」の機能を実現するプログラムを個別に実行する。
【０１０７】
「部」の処理の結果を示す情報やデータや信号値や変数値は、補助記憶装置９０２、メモリ９０３、又は、プロセッサ９０１内のレジスタ又はキャッシュメモリに記憶される。
【０１０８】
「部」を「サーキットリ」で提供してもよい。また、「部」を「回路」又は「工程」又は「手順」又は「処理」に読み替えてもよい。「回路」及び「サーキットリ」は、プロセッサ９０１だけでなく、ロジックＩＣ、ＧＡ（Ｇａｔｅ・Ａｒｒａｙ）、ＡＳＩＣ（Ａｐｐｌｉｃａｔｉｏｎ・Ｓｐｅｃｉｆｉｃ・Ｉｎｔｅｇｒａｔｅｄ・Ｃｉｒｃｕｉｔ）、ＦＰＧＡ（Ｆｉｅｌｄ−Ｐｒｏｇｒａｍｍａｂｌｅ・Ｇａｔｅ・Ａｒｒａｙ）といった他の種類の処理回路をも包含する概念である。
【０１０９】
以上、本発明の実施の形態について説明したが、これらの実施の形態のうち、いくつかを組み合わせて実施しても構わない。或いは、これらの実施の形態のうち、いずれか１つ又はいくつかを部分的に実施しても構わない。具体的には、これらの実施の形態の説明において「部」として説明するもののうち、いずれか１つのみを採用してもよいし、いくつかの任意の組み合わせを採用してもよい。なお、本発明は、これらの実施の形態に限定されるものではなく、必要に応じて種々の変更が可能である。
【符号の説明】
【０１１０】
１００Ｘ，１００Ｙ  プログラム実行装置、１０１Ｘ，１０１Ｙ  第１情報、１０２Ｘ，１０２Ｙ  第２情報、１０３Ｘ，１０３Ｙ  第３情報、１０４Ｘ，１０４Ｙ  第４情報、１１０  メモリ、１１１Ｘ，１１１Ｙ  プログラムテーブル、１１２Ｘ，１１２Ｙ  第１プログラムテーブル、１１３Ｘ，１１３Ｙ  第２プログラムテーブル、１１４Ｘ，１１４Ｙ  プログラムテーブルポインタ、１１５Ｘ，１１５Ｙ  ポインタ更新履歴、１１６Ｘ，１１６Ｙ  第１タイマー、１１７Ｘ，１１７Ｙ  第２タイマー、１２０  命令処理部、１２１  初期化部、１２２  通常処理部、１２３  エラー処理部、２００  Ｉ／Ｏ部、３００  共有メモリ、４００  システムバス、５００  プログラム実行システム、９０１  プロセッサ、９０２  補助記憶装置、９０３  メモリ、９０４  通信装置、９０５  入力インタフェース、９０６  ディスプレイインタフェース、９０７  入力装置、９０８  ディスプレイ、９１０  信号線、９１１  ケーブル、９１２  ケーブル、９２１  レシーバ、９２２  トランスミッタ。
【要約】
プログラム実行装置（１００Ｘ）において、メモリ（１１０）は、１つ以上のプログラムを指定する第１情報（１０１Ｘ）と、第１情報（１０１Ｘ）によって指定されたプログラムと他のプログラム実行装置（１００Ｙ）により実行されるプログラムとのうち、他のプログラム実行装置（１００Ｙ）により実行されるプログラムを少なくとも１つ含む一部のプログラムを指定する第２情報（１０２Ｘ）とを記憶する。命令処理部（１２０）は、エラー処理部（１２３）により他のプログラム実行装置（１００Ｙ）のエラーが検知されていない場合、第１情報（１０１Ｘ）によって指定されたプログラムを実行する。命令処理部（１２０）は、エラー処理部（１２３）により他のプログラム実行装置（１００Ｙ）のエラーが検知された場合、第２情報（１０２Ｘ）によって指定されたプログラムを実行する。【図１】
0005985121.tif 000002
【図２】
0005985121.tif 000003
【図３】
0005985121.tif 000004
【図４】
0005985121.tif 000005
【図５】
0005985121.tif 000006
【図６】
0005985121.tif 000007
【図７】
0005985121.tif 000008
【図８】
0005985121.tif 000009
【図９】
0005985121.tif 000010
【図１０】
0005985121.tif 000011