(57)【要約】【課題】第１の記憶手段から第２の記憶手段にロードするアドレスが予め予測できない場合であっても、故障確率の低い簡素な構造としながら、メモリの破壊検出による異常動作の未然防止が可能な保護制御技術を提供する。【解決手段】プログラムを記憶するためのハードディスク１及びＲＡＭ２、ハードディスク１からＲＡＭ２に、実行するプログラムをロードするローダ５１、ローダ５１がプログラムをロードした時に、当該プログラムのチェックサム値を計算するサム値演算部５１ａ、チェックサム値を格納するプログラムチェックサムテーブル２２、サム値演算部５１ａに対して、チェックサム値の再計算を指示する再計算指示部５１ｃ、プログラムチェックサムテーブル２２に格納されたチェックサム値と、再計算されたチェックサム値とを比較することにより、プログラム破壊による異常の有無をチェックするサム値チェック処理部５３を有する。【選択図】図１
2008003940.tif 000002
【特許請求の範囲】
【請求項１】
プログラムを記憶する第１の記憶手段と、
実行するプログラムを記憶するための第２の記憶手段と、
前記第１の記憶手段から前記第２の記憶手段に、実行するプログラムをロードするロード手段と、
前記ロード手段がプログラムをロードした時に、当該プログラムのチェックサム値を計算するサム値演算手段と、
前記チェックサム値を記憶するサム値記憶手段と、
前記サム値演算手段に対して、チェックサム値の再計算を指示する再計算指示手段と、
前記サム値記憶手段に記憶されたチェックサム値と、再計算されたチェックサム値とを比較することにより、プログラム破壊による異常の有無をチェックするサム値チェック処理手段と、
を有することを特徴とする保護制御装置。
【請求項２】
前記プログラムに含まれるコードに対して、サム値チェック処理手段によるチェックを行うか否かを指定するチェック指定手段を有することを特徴とする請求項１記載の保護制御装置。
【請求項３】
サム値チェック処理手段によるチェック周期を設定するチェック周期設定手段を有することを特徴とする請求項１又は請求項２記載の保護制御装置。
【請求項４】
装置の負荷状況を検出する負荷状況検出手段を有し、
前記負荷状況検出手段によって検出された負荷状況に応じて、サム値チェック処理手段によるチェックを変更することを特徴とする請求項１〜３のいずれか１項に記載の保護制御装置。
【請求項５】
プログラムを記憶する第１の記憶手段と、
実行するプログラムを記憶するための第２の記憶手段と、
前記第１の記憶手段から前記第２の記憶手段に、実行するプログラムをロードするロード手段と、
を有し、
前記第２の記憶手段に記憶されるプログラムは、多重化されたデータを含み、
多重化されたデータを比較することにより、プログラム破壊による異常の有無をチェックするデータチェック処理手段を有することを特徴とする保護制御装置。
【請求項６】
前記データチェック処理手段によるチェック周期を設定するチェック周期設定手段を有することを特徴とする請求項５記載の保護制御装置。
【請求項７】
装置の負荷状況を検出する負荷状況検出手段を有し、
前記負荷状況検出手段によって検出された負荷状況に応じて、データチェック処理手段によるチェックを変更することを特徴とする請求項５又は請求項６に記載の保護制御装置。
【請求項８】
プログラムを記憶した第１の記憶手段及び第２の記憶手段を備えたコンピュータが、ロード手段、サム値演算手段、サム値記憶手段、再計算指示手段、サム値チェック処理手段を有し、
前記ロード手段が、前記第１の記憶手段から前記第２の記憶手段に、実行するプログラムをロードし、
前記サム値演算手段が、ロードする当該プログラムのチェックサム値を計算し、
前記サム値記憶手段が、前記チェックサム値を記憶し、
前記再計算指示手段が、前記サム値演算手段に対して、チェックサム値の再計算を指示し、
前記サム値チェック処理手段が、前記サム値記憶手段に記憶されたチェックサム値と、再計算されたチェックサム値とを比較することにより、プログラム破壊による異常の有無をチェックすることを特徴とする保護制御方法。
【請求項９】
プログラムを記憶した第１の記憶手段及び第２の記憶手段を備えたコンピュータが、ロード手段、データチェック処理手段を有し、
前記ロード手段が、前記第１の記憶手段から前記第２の記憶手段に、実行するプログラムをロードし、
前記第２の記憶手段に記憶されるプログラムは、多重化されたデータを含み、
前記データチェック処理手段が、多重化されたデータを比較することにより、プログラム破壊による異常の有無をチェックすることを特徴とする保護制御方法。
【請求項１０】
プログラムを記憶した第１の記憶手段及び第２の記憶手段を備えたコンピュータにより実行可能なプログラムであって、
前記コンピュータに、
前記第１の記憶手段から前記第２の記憶手段に、実行するプログラムをロードする処理と、
ロードする当該プログラムのチェックサム値を計算する処理と、
前記チェックサム値を記憶する処理と、
チェックサム値の再計算を指示する処理と、
記憶されたチェックサム値と、再計算されたチェックサム値とを比較することにより、プログラム破壊による異常の有無をチェックする処理と、
を実行させることを特徴とする保護制御プログラム。
【請求項１１】
プログラムを記憶した第１の記憶手段及び第２の記憶手段を備えたコンピュータにより実行可能なプログラムであって、
前記コンピュータに、
前記第１の記憶手段から前記第２の記憶手段に、実行するプログラムをロードする処理と、
前記第２の記憶手段に記憶されるプログラムを、多重化する処理と、
多重化されたデータを比較することにより、プログラム破壊による異常の有無をチェックする処理と、
を実行させることを特徴とする保護制御プログラム。
【発明の詳細な説明】
【技術分野】
【０００１】
本発明は、例えば、ハードディスクからＲＡＭにロードして動作させるプログラムの信頼性の向上を図った保護制御装置、保護制御方法及び保護制御プログラムに関する。
【背景技術】
【０００２】
従来、電力系統の監視などに用いられる保護制御装置用ソフトウェアは、機能が限定されていたため、プログラム自体のサイズはそれほど大きくなかった。このため、ＲＯＭ(Read Only Memory)にプログラムを保存しておき、動作時にＲＯＭからＲＡＭ(Random Access Memory)にコピーして動作させていた。このようにＲＡＭにコピーされたプログラムが破壊されているか否かは、ＲＯＭとＲＡＭの内容が一致しているか否かによって判断できた。
【０００３】
そこで、予めＲＯＭに保存していたチェックサム値と、ＲＡＭにロードした後のプログラムのチェックサム値とを比較することにより、プログラムの破壊の有無を確認していた。これにより、ＲＡＭ上のプログラム破壊の検出とそれによる異常動作の防止を図ることができた。また、異常があった時に、その原因がＲＡＭ上のプログラム破壊であることの確認も可能であった。
【０００４】
例えば、特許文献１には、予めプログラムのチェックサム値をＲＯＭに記憶しておき（請求項５）、ＲＡＭにコピーしたプログラムについて定期的にチェックサム値計算を行い、ＲＯＭに記憶されたチェックサム値と比較（請求項６）する技術が開示されている。このように、単純にＲＯＭからＲＡＭにプログラムをコピーするシステムでは、チェックサム値が、プログラムの内容で決まる固定的な内容である。したがって、事前に計算したチェックサム値とＲＡＭ上のプログラムのチェックサム値とを比較することにより、プログラムが壊れているか否かを判断することができた。
【０００５】
ところで、従来の組み込みシステムでは、プログラムサイズが小さいため、ＲＯＭとＲＡＭがほぼ１対１に対応しており、ＲＯＭのどの部分がＲＡＭの何処へロードされるかが事前に分かっていた。しかしながら、プログラムをＲＡＭにコピーする時、コピー先のＲＡＭのアドレスが、事前に分からないシステムが存在する。
【０００６】
例えば、一般的に普及している汎用ＯＳ（Operating System)等のシステムにおいては、プログラムのサイズが大きく、動的なプログラム管理を行うため、プログラムがＲＡＭの何処にロードされるかは、事前には分からない。
【０００７】
つまり、アプリケーションからプログラムの実行要求があると、ＯＳはハードディスクに格納されたプログラムを探し、プログラムを格納するのに十分なＲＡＭの領域を確保する。これは、通常、メモリプールから未使用領域の一部を切り出す（割り当てる）ことで確保されるため、動的な割り当てとなる。次に、このように動的に割り当てられた領域へ、ハードディスクからプログラムを読み出し（ロード）、プログラムの先頭アドレスにジャンプすることで実行される。
【０００８】
このようなシステムにおいては、プログラムが装置の動作状態によって何処にロードされるかが予測できない動的なロードがなされ、その時に、プログラムやデータの場所を参照するためのアドレス情報が書き換えられるため、プログラムのチェックサム値を予め計算することができない。したがって、従来装置のように事前に計算したサム値を使って、ＲＡＭのプログラムが壊れているか否かを判断することができない。
【０００９】
これに対処するため、特許文献２に示すように、ＲＡＭの破壊を検出できるＥＣＣ（Error Correction Coding）などの機構を備えたＣＰＵとＲＡＭを採用することにより、ハードウェアによってプログラムが破壊されたことを検出し、異常動作を防止する技術が提案されている。
【００１０】
図１１は、ＲＡＭの破壊検出機構を備えた従来の制御装置の一例を示す機能ブロック図である。すなわち、従来の制御装置１は、ＲＡＭ２、ＲＡＭ破壊検出機構３、ハードディスク４、ＯＳ５を備えている。ＲＡＭ２は、アプリケーションプログラム２１のコード及びデータがコピーされるメモリである。ＲＡＭ破壊検出機構３は、アプリケーションプログラム２１のコードが動作している最中に、ＲＡＭ２の破壊が起こると、これをＥＣＣ機能によって検出する手段であり、ハードウェアで構成されている。
【００１１】
ハードディスク４は、アプリケーションプログラム２１を含む各種プログラム４１を格納した大容量記憶媒体である。ＯＳ５は、コンピュータを管理する基本ソフトであり、ハードディスク４に格納されたプログラム４１のうち、要求されたアプリケーションのプログラム４１（アプリケーションプログラム２１）を、ＲＡＭ２にロードするローダ５１と、ＲＡＭ破壊検出機構３でＲＡＭの破壊が検出された場合に、コードの強制的な中断や、システムの再起動を行うＲＡＭ破壊対策処理部５２を有している。
【００１２】
図１２は、上記のような制御装置１における一般的なプログラム４１のロード処理を示すフローチャートである。まず、動作するプログラム４１を、ＯＳ５がハードディスク４からＲＡＭ２にロードする手順は次の通りである。すなわち、アプリケーションを開始するためのプログラム４１を指定することにより、ロード要求を行う（ステップ１２０１）。
【００１３】
ローダ５１は、指定されたプログラム４１が格納されているハードディスク４のファイル名を探し（ステップ１２０２）、当該ファイル名から当該ファイル名が格納されている場所を特定するアドレスに基づき、ハードディスク４上のプログラム格納場所を求め（ステップ１２０３）、ハードディスク４上のプログラム格納場所から、プログラム４１を読み出す（ステップ１２０４）。ハードディスク４から読み出されたプログラム４１はプログラムコード以外の情報を含むため、ローダ５１は、不要な情報を取り除いてＲＡＭ２にロードする（ステップ１２０５）。
【００１４】
ＲＡＭ２にロードされたコードは、ＯＳ５によって実行権が与えられて、実行される。このように、コードが動作している最中に、ＲＡＭ２の破壊が起こった場合には、その破壊がＲＡＭ破壊検出機構３によって検出される。すると、ＲＡＭ破壊対策処理部５２が、コードの強制的な中断をするか、システムの再起動を行うことにより、ＲＡＭ２の破壊による異常動作が起きないような処理を行う。
【００１５】
【特許文献１】特開２００１−３３９８４０号公報
【特許文献２】特開２００１−１１１４３５号公報
【発明の開示】
【発明が解決しようとする課題】
【００１６】
しかし、上記のように、ＲＡＭの破壊をハードウェアで検出できるＥＣＣ（Error Correcting Code）機構は、ＣＰＵ及びＲＡＭの構造、さらにＣＰＵとＲＡＭ間のインタフェースが複雑となり、故障する可能性が高くなる。また、ＥＣＣ機構のＣＰＵやＲＡＭは、その分発熱が多くなり、これによっても故障の確率が高くなる。
【００１７】
したがって、ハードディスクに代表される大容量記憶媒体に、サイズの大きなプログラムを保存しておき、そこからＯＳがプログラムをＲＡＭの任意のアドレスに動的にロードして、アプリケーションやドライバーなどのプログラムを連続して長時間稼動させる保護制御装置においては、ＣＰＵやＲＡＭ、その間のインタフェースの複雑化、ＣＰＵやインタフェースからの発熱等を少しでも抑え、故障する可能性を減らす必要があった。
【００１８】
本発明は、上記のような従来技術の問題点を解決するために提案されたものであり、その目的は、プログラムをハードディスク等の記憶手段からメモリ等の記憶手段にロードするアドレスが予め予測できない場合であっても、故障確率の低い簡素な構造としながら、メモリ等の記憶手段の破壊検出による異常動作の未然防止が可能な保護制御装置、保護制御方法及び保護制御プログラムを提供することにある。
【課題を解決するための手段】
【００１９】
上記のような目的を達するため、本発明の保護制御装置は、プログラムを記憶する第１の記憶手段と、実行するプログラムを記憶するための第２の記憶手段と、前記第１の記憶手段から前記第２の記憶手段に、実行するプログラムをロードするロード手段と、前記ロード手段がプログラムをロードした時に、当該プログラムのチェックサム値を計算するサム値演算手段と、前記チェックサム値を記憶するサム値記憶手段と、前記サム値演算手段に対して、チェックサム値の再計算を指示する再計算指示手段と、前記サム値記憶手段に記憶されたチェックサム値と、再計算されたチェックサム値とを比較することにより、プログラム破壊による異常の有無をチェックするサム値チェック処理手段と、を有することを特徴とする。なお、本発明は、上記の保護制御装置の機能をコンピュータにより実現するための保護制御方法及び保護制御プログラムとして捉えることもできる。
【００２０】
以上のような本発明では、プログラムが第２の記憶手段にロードされた時に、各プログラムのチェックサム値を計算し、記憶しておく。そして、各プログラムのチェックサム値を再計算し、ロードされた時に計算し記憶しておいたチェックサム値と比較することにより、プログラムが壊れていないかどうかを確認する。これにより、ハードウェア等の構造を複雑化することなく、プログラムの破壊による異常動作を未然に防止できる。
【発明の効果】
【００２１】
以上のような本発明によれば、第１の記憶手段から第２の記憶手段にロードするアドレスが予め予測できない場合であっても、故障確率の低い簡素な構造としながら、第２の記憶手段の破壊検出による異常動作の未然防止が可能な保護制御装置、保護制御方法及び保護制御プログラムを提供することができる。
【発明を実施するための最良の形態】
【００２２】
本発明を実施するための形態（以下、実施形態とする）を、図面を参照して説明する。
本発明の第１の実施形態を、図１の機能ブロック図を参照して説明する。なお、本発明は、保護制御装置としても、また、後述する手順で保護を行う制御方法としても把握できるとともに、かかる手順でコンピュータを動作させるコンピュータプログラムおよびこれを記録した記録媒体として把握することもできる。
【００２３】
すなわち、制御装置１は、ＲＡＭ２、ハードディスク４、ＯＳ５、タイマーハードウエア６を有している。ＲＡＭ２は、システムが動作する時に、アプリケーションプログラム２１のコードやデータが置かれるメモリである（第２の記憶手段）。ハードディスク４は、各種プログラム４１を格納しており、ＯＳ５がアプリケーションプログラム２１に対応するプログラム４１を検索したり、コードやデータをＲＡＭ２にコピーするために、プログラム４１のファイルを読み出したりする時に使用される（第１の記憶手段）。
【００２４】
ＯＳ５は、ローダ５１、ＲＡＭ破壊対策処理部５２、ＲＡＭサム値チェック処理部５３、タイマー処理部５４を有している。ローダ５１は、アプリケーションによって指定されたプログラム４１をハードディスク４から検索し、検索したプログラムのファイルをハードディスク４から読み出し、ファイルに格納されているコードとデータを選択してＲＡＭ２にコピーする手段（請求項のロード手段）である。
【００２５】
また、ローダ５１は、サム値演算部５１ａ、格納処理部５１ｂ及び再計算指示部５１ｃを有している。サム値演算部５１ａは、コードの先頭からそのサイズまでのチェックサム値を計算する手段である。格納処理部５１ｂは、コードをＲＡＭ２にコピーする時、プログラムを識別するＩＤと、ＲＡＭ２にコピーしたコードの開始アドレスと、コードのサイズと、サム値演算部５１ａによって計算されたチェックサム値とを、ＲＡＭ２のプログラムチェックサムテーブル２２に格納する手段である。請求項のサム値記憶手段は、ＲＡＭ２におけるプログラムチェックサムテーブル２２の記憶領域に対応する。再計算指示部５１ｃは、定期的にサム値演算部５１ａにチェックサム値の再計算を指示する手段である。
【００２６】
なお、ＯＳ５は、一般的な装置と同様に、ＲＡＭ２にコピーされたコードを実行するため、複数のプログラム４１のコードの中から最も優先度の高いコードを選択し、そこに実行権を渡しプログラム４１を実行する機能も有している。優先度の高低の判断は、通常は、各プログラム４１の重要度に応じた任意の優先度の値が割り振られており、その値の大小により優先度の高い低いを判断する。
【００２７】
ＲＡＭサム値チェック処理部５３は、ローダ５１が作成したプログラムチェックサムテーブル２２を参照し、サム値演算部５１ａによる再計算結果と照合して、ＲＡＭ２にコピーされたコードが破壊されているか否かを確認する手段である。タイマー処理部５４は、アプリケーションプログラム２１が動作している最中、タイマーハードウェア６から発生する定期的な割り込みにより呼び出され、定期的にＲＡＭサム値チェック処理部５３を動作させる手段である。
【００２８】
以上のような本実施形態の作用を、図２及び図３にしたがって説明する。なお、図２はプログラムのロード処理を示すフローチャート、図３はＲＡＭサム値チェック処理を示すフローチャートである。
【００２９】
［プログラムのロード処理］
動作するアプリケーションプログラム２１を、ハードディスク４からＲＡＭ２にロードするロード処理を、図２を参照して説明する。まず、入力装置からの入力に応じて、ＯＳ５が、アプリケーションが開始するためのプログラム４１を指定することにより、ロード要求を行う（ステップ２０１）。
【００３０】
ローダ５１は、指定されたプログラム４１が格納されているハードディスク４のファイル名を探し（ステップ２０２）、ファイル名から、ハードディスク４上のプログラム格納アドレスを求め（ステップ２０３）、ハードディスク４上のプログラム格納アドレスから、プログラム４１を読み出す（ステップ２０４）。ハードディスク４から読み出されたプログラム４１は、プログラムのコードやデータ以外の情報を含むため、不要な情報が取り除かれてＲＡＭ２にロードされる（ステップ２０５）。
【００３１】
サム値演算部５１ａは、ＲＡＭ２にロードされたプログラムのチェックサムを計算する（ステップ２０６）。格納処理部５１ｂは、計算されたチェックサムを、ＩＤ、開始アドレス、サイズとともに、ＲＡＭ２の記憶領域（プログラムチェックサムテーブル２２）に格納する（ステップ２０７）。以上のように、ＲＡＭ２にロードされたコードは、ＯＳ５によって実行権が与えられて、実行される。
【００３２】
［ＲＡＭサム値チェック処理］
続いて、ＲＡＭサム値チェック処理部５３の動作を、図３を参照して説明する。まず、ＲＡＭサム値チェック処理部５３は、予め設定された一定時間だけプログラムの実行を中止するスリープを行う（ステップ３０１）。そして、タイマー処理部５４からスリープを解除され、チェック処理を開始する。スリープとは、一時的に処理を中断して他のプログラムを実行できるようにするもので、スリープ時間は、一時的に中断する時間を指す。したがって、ここではスリープ時間を利用して他のプログラムを動かすようにする。
【００３３】
ＲＡＭサム値チェック処理部５３は、最初に、プログラムチェックサムテーブル２２にプログラムが登録されているかどうか検索を行う（ステップ３０２）。登録されていれば、再計算指示部５１ｃの指示に応じて、サム値演算部５１ａが、プログラムチェックサムテーブル２２の開始アドレスとサイズからチェックサム値を再計算する。ＲＡＭサム値チェック処理部５３は、再計算されたチェックサム値と、プログラムチェックサムテーブル２２に登録されたチェックサム値とを比較する（ステップ３０４）。
【００３４】
ＲＡＭ２が正常であれば、チェックサム値がプログラムチェックサムテーブル２２に登録された値と一致するため、そうであれば（ステップ３０５）、プログラムチェックサムテーブル２２に登録された次のプログラムを、同様にチェックする（ステップ３０２〜３０５）。プログラムチェックサムテーブル２２にある全てのプログラムをチェックして処理が終わると（ステップ３０３）、一定時間のスリープに入る（ステップ３０１）。
【００３５】
一方、再計算したチェックサム値とプログラムチェックサムテーブル２２に登録されたチェックサム値とが一致しない場合には（ステップ３０５）、ＲＡＭ２の破壊があったと判断され、これがＲＡＭ破壊対策処理部５２に通知される（ステップ３０６）。ＲＡＭ破壊対策処理部５２は、上述のように、プログラムコードの強制的な中断をするか、システムの再起動を行い、ＲＡＭの破壊によって異常動作が起きないような処理を行う（ステップ３０７）。
【００３６】
以上のような本実施形態によれば、制御プログラムをハードディスクからＲＡＭ２にロードして動作させる際に、ロードするアドレスが予め予測できないシステムにおいて、ハードウェアによるＲＡＭ２の高度な監視機能を持たなくても、ロード時のチェックサム値と定期的な再計算時のチェックサム値との比較により、ＲＡＭ２の破壊を検出できる。したがって、故障確率の低い簡素な構造としながらも、ＲＡＭ２の破壊によるプログラムの異常動作を未然に防ぐことができ、制御プログラムの信頼性向上が実現できる。
【００３７】
本発明の保護制御装置の第２の実施形態を、図４の機能ブロック図を参照して説明する。本実施形態は、基本的には、図１に示した第１の実施形態と同様の構成を有している。但し、本実施形態は、アプリケーションプログラム２１が、プログラム４１をロードする時、コードをチェックするか否かの指定を行うロード指定選択機構７（請求項のチェック指定手段）が追加されている点に特徴を有している。
【００３８】
この指定は、アプリケーションプログラム２１において予め設定されているか、若しくは入力装置からの入力によって、任意に設定することができる。例えば、優先度の高いプログラム４１だけについて、コードをチェックするように指定すると、指定されたプログラムがローダ５１によってロードされる時に、チェックサム値を計算し、プログラムチェックサムテーブル２２に登録をする。
【００３９】
一方、コードをチェックする指定がされなかったプログラム４１については、ローダ５１によってロードされる時に、単にコードとデータをＲＡＭにコピーする処理だけを行い、チェックサム値の計算やプログラムチェックサムテーブル２２への登録は行わない。
【００４０】
なお、ＲＡＭサム値チェック処理部５３によるチェック処理は、プログラムチェックサムテーブル２２に登録されたプログラムだけを定期的にチェックするため、第１の実施形態と同様の処理となる。
【００４１】
以上のような本実施形態によれば、特定の重要なプログラムのコードを指定することにより、指定されたコードのみを監視して、ＲＡＭ破壊によるプログラムの破壊やデータの破壊をチェックし、重要でない機能に対してはＲＡＭ破壊のチェックを行わない。したがって、ＲＡＭ破壊による重要な機能の異常動作や誤動作を未然に防止しながら、第１の実施形態と比較して、システム全体の負担を軽減することができ、性能低下を最低限に抑えて、緊急時の処理を速やかに実行できる。
【００４２】
本発明の保護制御装置の第３の実施形態を以下に説明する。本実施形態は、基本的には、図１の第１の実施形態と同様の構成である。但し、本実施形態では、タイマー処理部５４が、チェック周期が設定された周期設定部（請求項のチェック周期設定手段）を有し、この周期設定部に設定される時間を、入力装置によって入力することにより、任意の時間に変えることができる。
【００４３】
以上のような本実施形態の作用を説明する。なお、プログラムのロード処理は、上記の第１の実施形態と同様なため、ＲＡＭサム値チェック処理の手順を、図５を参照して説明する。すなわち、ＲＡＭサム値チェック処理部５３は、スリープをする直前に、予め周期設定部に設定された時間を取得し、これに基づいてスリープ時間を決める（ステップ５０１）。
【００４４】
ＲＡＭサム値チェック処理部５３は、決定された一定のスリープ時間だけ、プログラムの実行を中止するスリープを行う（ステップ５０２）。そして、タイマー処理部５４からスリープを解除され、チェック処理を開始する。
【００４５】
最初に、プログラムチェックサムテーブル２２にプログラムが登録されているかどうか検索を行い（ステップ５０３）、登録されていれば、上記の第１の実施形態と同様に、チェックサム値の再計算と、プログラムチェックサムテーブル２２に登録されたチェックサム値との比較が行われる（ステップ５０５）。
【００４６】
ＲＡＭ２が正常であれば、チェックサム値が一致し（ステップ５０６）、同様の手順で次のプログラムをチェックする（ステップ５０３〜５０５）。プログラムチェックサムテーブル２２にある全てのプログラムをチェックして処理が終わると（ステップ５０４）、設定時間を取得し（ステップ５０１）、一定時間のスリープに入る（ステップ５０２）。
【００４７】
一方、チェックサム値が一致しないと（ステップ５０６）、ＲＡＭ２の破壊があったと判断され、ＲＡＭ破壊対策処理部５２に通知される（ステップ５０７）。ＲＡＭ破壊対策処理部５２は、上述のように、プログラムコードの強制的な中断をするか、システムの再起動を行い、ＲＡＭの破壊によって異常動作が起きないような処理を行う（ステップ５０８）。
【００４８】
以上のような本実施形態によれば、プログラムをチェックする周期を任意に指定できるので、同じ制御装置において、異常動作の検出を優先させる高信頼度のシステムと性能優先のシステムを実現できる。
【００４９】
例えば、システムを、破壊と異常動作により致命的な影響を与える可能性がある非常に重要な制御装置として実現する場合には、チェック周期を短く設定し、異常が発生してそれを検出するまでの時間を短くすることにより信頼性の高い動作を保障する。一方、システムを、非常に高速な処理を求められるような性能を優先させるべき制御装置として実現する場合には、チェック周期を長く設定し、システムの性能を優先させる。
【００５０】
このように、チェック周期を変更できるようにすることにより、高い信頼性を必要とするシステムであっても、性能を優先するシステムであっても、いずれに対しても対応できる制御装置を構成できる。
【００５１】
本発明の保護制御装置の第４の実施形態を、図６の機能ブロック図を参照して説明する。本実施形態は、基本的には、図１に示した第１の実施形態と同様の構成を有している。但し、本実施形態は、プログラムチェックサムテーブル２２にプログラムのＩＤ、開始アドレス、サイズ、チェックサム値に加えて、チェック周期を登録するロード指定選択機構７（請求項のチェック周期設定手段）を有している点が異なる。
【００５２】
このロード指定選択機構７は、プログラムチェックサムテーブル２２におけるプログラム４１ごとに、高信頼度を要求する機能か、処理性能を要求する機能かに応じて、異なるチェック周期を指定することができる。このチェック周期は、信頼度優先か性能優先かに応じて、入力装置によって入力された任意のものとすることができる。予めデフォルトで、信頼度優先のチェック周期と性能優先のチェック周期とが設定されたものを用いてもよい。
【００５３】
なお、高信頼度を要求する場合とは、例えば、システムの制御を行うケースが考えられる。一方、処理性能を要求する場合には、系統の状態を監視する目的で、大量のデータを計測するケースが考えられる。前者は、誤操作により電気が止まることを防止するため、高い信頼性が必要である。後者では計測そのもので電気が止まることは無いため、高信頼度で無くとも構わないが、大量のデータを処理するため、処理性能を求められるシステムとなる。
【００５４】
以上のような本実施形態の作用を説明する。
［プログラムのロード処理］
プログラムのロード処理は、基本的には、上記の第１の実施形態と同様であるが、次の点が異なる。すなわち、アプリケーションプログラム２１から実行するプログラムを指定する時、ロード指定選択機構７に対して、高信頼度を要求する機能か、あるいは、処理性能を要求する機能かをパラメータとして与える。
【００５５】
ロード指定選択機構７では、ローダ５１がプログラムをロードした後、プログラムチェックサムテーブル２２に、プログラムのＩＤ、開始アドレス、サイズ、チェックサム値に加えて、パラメータに応じて異なるチェック周期を登録する。
【００５６】
［ＲＡＭサム値チェック処理］
ＲＡＭサム値チェック処理は、基本的には、上記の第３の実施形態と同様であるが、プログラムチェックサムテーブル２２に登録されたチェック周期に従ったチェックを行うために、プログラムのコードをチェックする前に、コードをチェックするタイミングであるかどうかを比較する処理が追加される。このＲＡＭ値チェック処理の手順を、図７を参照して説明する。
【００５７】
すなわち、上述の通り、プログラムが動作している最中、タイマーハードウェア６から定期的に割り込みが発生して、ＯＳ５のタイマー処理部５４が呼び出され、定期的にＲＡＭサム値チェック処理部５３が動作する。ＲＡＭサム値チェック処理部５３は、予め設定された一定のスリープ時間を取得して（ステップ７０１）、その時間だけ実行を中止するスリープを行う（ステップ７０２）。そして、タイマー処理部５４からスリープを解除され、チェック処理を開始する。
【００５８】
ＲＡＭサム値チェック処理部５３は、最初に、プログラムチェックサムテーブル２２にプログラムが登録されているかどうか検索を行う（ステップ７０３）。登録されていれば、現在時刻とプログラムチェックサムテーブル２２に追加されたチェック周期とを比較して、コードをチェックするタイミングであるかどうかの比較を行う（ステップ７０５）。ここで、そのタイミングで無いならば（ステップ７０６）、プログラムチェックサムテーブル２２の次のプログラムの検索へ移行する（ステップ７０３）。
【００５９】
一方、そのタイミングであれば（ステップ７０６）、プログラムチェックサムテーブル２２の開始アドレスとサイズから、チェックサムを再計算し、プログラムチェックサムテーブル２２に登録されたチェックサム値と比較する（ステップ７０７）。チェックサム値が一致すれば（ステップ７０８）、正常であるとして、次のプログラムの検索へ移行する（ステップ７０３）。
【００６０】
チェックサム値が一致しなければ（ステップ７０８）、ＲＡＭ２の破壊があったと判断され、ＲＡＭ破壊対策処理部５２に通知される（ステップ７０９）。ＲＡＭ破壊対策処理部５２は、上述のように、プログラムコードの強制的な中断をするか、システムの再起動を行い、ＲＡＭの破壊によって異常動作が起きないような処理を行う（ステップ７１０）。
【００６１】
以上のような本実施形態によれば、システム単位でプログラムのチェック周期を長くしたり、短くするのではなく、プログラム毎に、ＲＡＭ破壊をチェックする周期を、任意に設定することができる。
【００６２】
このため、信頼性の高い機能を持ったプログラムの場合は、コードをチェックする周期を短く設定し、性能を優先させる機能を持ったプログラムの場合は、コードをチェックする周期を長く設定することにより、同一の制御装置の中に重要な機能と性能を優先させた機能を混在することができる。これにより、信頼性が高く性能も向上させた制御装置を実現することが可能となる。
【００６３】
本発明の保護制御装置の第５の実施形態について以下に説明する。本実施形態は、基本的には、図６の第４の実施形態と同様の構成である。但し、本実施形態では、通常、ＯＳ５が有しているＣＰＵの負荷状況の検出機能（以下、負荷状況検出部とする）を用いる。そして、検出された負荷状況に応じて、ＲＡＭサム値チェック処理部５３に設定されたスリープ時間調整部が、予め設定されたスリープ時間を調整することにより、システムの負荷に応じて信頼性と性能のバランスをとる。
【００６４】
例えば、多くのＯＳ５は、ＣＰＵをアプリケーションがどの位占有しているか検出する手段を持っており、所定のプログラムがＯＳ５に要求を出してこれを読み出すことができる。これは負荷率と呼ばれるが、この場合には負荷率を負荷状況として扱う。また、ＣＰＵの温度を計測できるようなシステムの場合には、ＣＰＵの温度状態を負荷状況として検出することができる。この場合には、温度上昇に応じてスリープ時間を調整可能な構成となる。
【００６５】
以上のような本実施形態の作用を、図８を参照して説明する。なお、プログラムのロード処理は、上記の第１の実施形態と同様であるため、説明を省略する。本実施形態のＲＡＭサム値チェック処理は、基本的には、図７の処理と同様であるが、スリープ時間を取得して、これを元にスリープする処理の間に、負荷状況に応じた係数をかける処理が追加されている。
【００６６】
すなわち、ＲＡＭサム値チェック処理部５３は、予め設定されている一定のスリープ時間を取得する（ステップ８０１）。そして、スリープ時間調整部が、スリープを実行する前に、負荷状況検出部から検出される負荷状況を取得して、その割合に応じて、次のような係数をかける（ステップ８０２）。スリープを実行する時は、この係数をかけたスリープ時間だけスリープする（ステップ８０３）。例えば、負荷状況検出部が、負荷状況として、ＣＰＵの負荷率を検出して用いる場合には、以下のような係数とすることが考えられる。
【００６７】
負荷３０％以下    係数＝１
負荷３０〜６５％  係数＝２
負荷６５〜９０％  係数＝４
負荷９０％以上    係数＝４
【００６８】
これに加えて、負荷が９０％を越えている場合は、プログラムのコードチェックそのものを行わないようにする（ステップ８０４）。負荷状態が９０％の場合に、コードチェックを省略するのは、次のような理由による。負荷状態が９０％ということは、例えば、多くのプログラムが動作しているため、ＣＰＵの処理能力の限界に近い状態にある。この時、本来の制御とは関係ないコードチェックを行うと、制御自体ができなくなる可能性があるため、制御処理に専念させる。保護制御のアプリケーションあるいはシステム構成毎に負荷の状況を計測し、９０％未満は係数＝１、９０％以上は係数＝４というように設定してもよい。
【００６９】
また、負荷状況検出部が、ＣＰＵの温度を計測できるようなＣＰＵを使ったシステムにおいて、ＣＰＵの温度状態を監視し、温度上昇に応じてスリープ時間にかける係数を変える。一例として、ＣＰＵの動作温度範囲が２０℃から１００℃までとすると、スリープ時間にかける係数を次のように設定することが考えられる。
【００７０】
ＣＰＵ温度が５０℃未満    係数＝１
ＣＰＵ温度が５０〜７０℃  係数＝２
ＣＰＵ温度が７０〜９５℃  係数＝４
ＣＰＵ温度が９５℃以上    係数＝８
【００７１】
以上のように、ＣＰＵの負荷率が高くなったり、ＣＰＵの温度が高くなった場合には、ＣＰＵの負荷が高くなったとして、アプリケーションの処理そのものを優先して実行するようにする。これにより、ＣＰＵの負荷を減らし、ＣＰＵからの発熱を抑え、ＣＰＵ温度を下げ、故障の確率を減らすことが可能となる。その後の処理は、図７と同様であるため、説明を省略する（ステップ８０５〜８１２）。
【００７２】
以上のような本実施形態によれば、システムの負荷が低い場合には全てのプログラムをチェックし、負荷が中程度になった場合には優先度の低いプログラムのチェックを行わず、最も信頼性を求められるプログラム（例えば、周期を短く設定したプログラム）のチェックだけを実施し、負荷が高くなった場合にはチェックを省略することができる。
【００７３】
これにより、システム負荷が低い時は最も信頼性が高く、システム負荷が上昇すると徐々に最低限の信頼性を確保しつつ処理を優先させることにより、動的に高い信頼性と高い性能を持ったシステムを構築することが可能となる。また、ＣＰＵの温度を監視した場合には、装置の故障の可能性を減らすことも可能となる。
【００７４】
本発明の保護制御装置の第６の実施形態について以下に説明する。本実施形態は、基本的には、図１の第１の実施形態と同様の構成である。但し、本実施形態では、図９に示すように、ＲＡＭ２にロードされるアプリケーションが二重化したデータＡ１，Ａ２を持っている。また、ＲＡＭ２には、データチェック範囲テーブル２３が記憶される。このデータチェック範囲テーブル２３は、プログラムを識別するＩＤ、二重化したデータＡ１，Ａ２の開始アドレス、データのサイズ、チェック周期から成るテーブルである。
【００７５】
そして、制御装置１は、データチェック範囲テーブル２３におけるプログラム４１ごとに、高信頼度を要求する機能か、処理性能を要求する機能かに応じて、異なるチェック周期を指定するＲＡＭチェック範囲指定選択機構８を有している。このＲＡＭチェック範囲指定選択機構８は、請求項のチェック周期設定手段として機能する。
【００７６】
また、ＯＳ５は、データ登録処理部５５、データ範囲チェック処理部５６を有している。データ登録処理部５５は、データチェック範囲テーブル２３に、プログラムのＩＤ、二重化したデータＡ１，Ａ２の開始アドレス、データのサイズ、チェック周期を登録する手段である。データ範囲チェック処理部５６は、データチェック範囲テーブル２３を参照して、二重化されたデータＡ１，Ａ２を比較して、破壊がないかどうかを確認する手段である。
【００７７】
以上のような本実施形態の作用を説明する。
［プログラムのロード処理］
プログラムのロード処理は、基本的には、上記の第１の実施形態と同様である。但し、本実施形態においては、アプリケーションプログラム２１のコードが実行を開始すると、最初にＲＡＭチェック範囲指定選択機構８を経由してＯＳ５のデータ登録処理部５５が呼び出される。ＲＡＭチェック範囲指定選択機構８は、パラメータとして指定された高信頼度を要求する機能か、あるいは処理性能を要求する機能かを受け取り、それに応じたチェック周期をデータ登録処理部５５に渡す。
【００７８】
データ登録処理部５５は、データＡ１とデータＡ２の開始アドレスと、サイズと、ＲＡＭチェック範囲指定選択機構８によって決められたチェック周期を、データチェック範囲テーブル２３に登録する。続いて、アプリケーションは、それ本来の処理を開始し、データを書き込む時は、データＡ１とデータＡ２に同じデータを書き込む。
【００７９】
［データ範囲チェック処理］
本実施形態のデータ範囲チェック処理を、図１０のフローチャートを参照して説明する。データ範囲チェック処理における負荷状況に応じて、チェックをする周期若しくはチェックの有無を決める処理は、上記の第５の実施形態と同様である。すなわち、データ範囲チェック処理部５６が実行されると、スリープ時間を取得し（ステップ１００１）、負荷状況により係数をかけてスリープ時間を決定する（ステップ１００２）。
【００８０】
これに基づいてスリープを行い（ステップ１００３）、続いて、現在の負荷を取得し、それが９０％以上の場合は（ステップ１００４）、チェック処理を実行せず、スリープ時間の取得、スリープ時間の係数演算、スリープの実行をする（ステップ１００１〜１００３）。負荷が９０％未満の時は（ステップ１００４）、データ範囲チェック処理部５６によるチェック処理を行う。
【００８１】
まず、データチェック範囲テーブル２３に登録されたデータが検索され（ステップ１００５）、全てを処理した場合は（ステップ１００６）、スリープ時間の取得、スリープ時間の係数演算、一定時間のスリープの処理に戻る（ステップ１００１〜１００３）。
【００８２】
また、データチェック範囲テーブル２３に、まだ処理していないデータが登録されている場合は（ステップ１００６）、タイマー処理部５４によって、データ範囲チェック処理部５６が呼び出され、データチェック範囲テーブル２３に登録された各アプリケーションプログラムのデータＡ１とデータＡ２の範囲が比較される（ステップ１００９）。
【００８３】
この処理は、テーブルのデータＡ１の開始アドレスとデータＡ１の開始アドレスから、そのテーブルに登録されたサイズ分を比較し、データが全て一致しているかそうでないかをチェックすることにより行う。データが一致していた場合は、データチェック範囲テーブル２３に登録された次のデータの処理を行う（ステップ１００５〜１００９）。
【００８４】
データＡ１とデータＡ２に不一致があった場合には（ステップ１０１０）、ＲＡＭ２の破壊があったと判断され、ＲＡＭ破壊対策処理部５２に通知される（ステップ１０１１）。ＲＡＭ破壊対策処理部５２は、上述のように、プログラムコードの強制的な中断をするか、システムの再起動を行い、ＲＡＭの破壊によって異常動作が起きないような処理を行う（ステップ１０１２）。
【００８５】
以上のような本実施形態によれば、コードのチェックサム値ではなく、二重化させたデータＡ１，Ａ２の比較により、ＲＡＭの破壊を検出するので、データ破壊、データ化けによる異常動作や誤動作を未然に防止することが可能となる。
【００８６】
また、システムの重要度、各アプリケーションプログラムの重要度、システムの負荷状況により、ＲＡＭ破壊によるデータ破壊、データ化けをチェックする周期を調整することにより、信頼性の高いシステムを構築することが可能となる。
【００８７】
［他の実施形態］
本発明は、上記の実施形態に限定されるものではない。例えば、設定値、設定時間、係数等の具体的な値は自由であり、特定の数値には限定されない。また、請求項では、プログラムのチェックサム値を計算するとしているが、チェックサム値の演算対象についても、プログラムのどの部分とするかは自由である。記憶する媒体の種類についても、プログラムを記憶する大容量記憶媒体、実行時に使用するメモリとして利用可能なものであればよい。また、上記の各実施形態を適宜組み合わせて実施することもできる。例えば、チェックサム値の比較によるチェックと、二重化したデータの比較によるチェックを選択的に若しくはともに行うことができる構成としてもよい。
【図面の簡単な説明】
【００８８】
【図１】本発明の保護制御装置の第１の実施形態を示すソフトウェアを含む機能ブロック図
【図２】図１の実施形態におけるプログラムロード処理の手順を示すフローチャート
【図３】図１の実施形態におけるＲＡＭサム値チェック処理の手順を示すフローチャート
【図４】本発明の保護制御装置の第２の実施形態におけるソフトウェアを含む機能ブロック図
【図５】本発明の保護制御装置の第３の実施形態におけるＲＡＭサム値チェック処理の手順を示すフローチャート
【図６】本発明の保護制御装置の第４の実施形態におけるソフトウェアを含む機能ブロック図
【図７】図６の実施形態におけるＲＡＭサム値チェック処理の手順を示すフローチャート
【図８】本発明の保護制御装置の第５の実施形態におけるＲＡＭサム値チェック処理の手順を示すフローチャート
【図９】本発明の保護制御装置の第６の実施形態におけるソフトウェアを含む機能ブロック図
【図１０】図９の実施形態におけるデータチェック処理を示すソフトウェアを含む機能ブロック図
【図１１】従来の保護制御装置の一例を示す機能ブロック図
【図１２】従来の保護制御装置のプログラムロード処理の一例を示すフローチャート
【符号の説明】
【００８９】
１…制御装置
２…ＲＡＭ
３…ＲＡＭ破壊検出機構
４…ハードディスク
５…ＯＳ
６…タイマーハードウェア
７…ロード指定選択機構
８…チェック範囲指定選択機構
２１…アプリケーションプログラム
２２…プログラムチェックサムテーブル
２３…データチェック範囲テーブル
４１…プログラム
５１…ローダ
５１ａ…サム値演算部
５１ｂ…格納処理部
５１ｃ…再計算指示部
５２…破壊対策処理部
５３…サム値チェック処理部
５４…タイマー処理部
５５…データ登録処理部
５６…データ範囲チェック処理部
【図１】
2008003940.tif 000003
【図２】
2008003940.tif 000004
【図３】
2008003940.tif 000005
【図４】
2008003940.tif 000006
【図５】
2008003940.tif 000007
【図６】
2008003940.tif 000008
【図７】
2008003940.tif 000009
【図８】
2008003940.tif 000010
【図９】
2008003940.tif 000011
【図１０】
2008003940.tif 000012
【図１１】
2008003940.tif 000013
【図１２】
2008003940.tif 000014