(57)【要約】【課題】本発明の目的は、ＣＰＵが通常の領域内のメモリやレジスタにアクセスするとき、またはプログラム処理を実行するときにその監視対象となる一連の動作が一時的に乱れたことを検出するＣＰＵの監視装置および方法を提供することである。【解決手段】ＣＰＵがメモリやレジスタにアクセスするとき、監視対象のアクセスを検出すると、アドレスバスの値とハッシュ値格納レジスタの値からハッシュ値を算出し、ハッシュ値格納レジスタに格納する。この検出から格納までの処理を監視対象の一連のアクセス回数分実施後に今回と前回のハッシュ値を比較することにより一時的な乱れを検出する。プログラム処理を実施するときは、プログラムの複数個所に置かれたプログラムカウンタの値を出力することで上記と同様の方法により一時的な乱れを検出する。【選択図】図１
2010211391.tif 000002
【特許請求の範囲】
【請求項１】
予め設けた監視対象アドレスのアクセス順序（１番目からｎ番目）でサイクリックに実行するシステムのＣＰＵ監視方法において、
１番目のアクセス前にハッシュ値格納レジスタのハッシュ値をクリアするステップ、
監視対象アドレスの１番目からｎ番目のアクセスについて以下のステップ（Ａ１→Ａ２→Ａ３）を実行し、
（Ａ１）監視対象のメモリアドレスへのアクセスを検出するステップ、
（Ａ２）検出したタイミングでアドレスバスの値とハッシュ値格納レジスタの値を読み          出してハッシュ関数（アクセス順序が同じであればハッシュ値は同じとなるよ          うに最適化されている）により新たなハッシュ値を算出するステップ、
（Ａ３）ハッシュ値格納レジスタの値を新たに算出したハッシュ値で置き換えるステッ          プ、
ｎ番目のアクセス後にハッシュ値格納レジスタのハッシュ値（今回ハッシュ値）と予め記憶しておいた前回のｎ番目のアクセス後のハッシュ値格納レジスタの値（前回ハッシュ値）を読み出し、比較した結果、一致・不一致を判断するステップを含み、
比較結果の不一致を以って前回と同じアクセス順序で実行していないことを検出することを特徴とするメモリアクセスにおけるハッシュ値を使ったＣＰＵの動作監視方法。
【請求項２】
予め設けた監視対象アドレスのアクセス順序（１番目からｎ番目）でサイクリックに実行するシステムのＣＰＵ監視方法において、
監視対象アドレスの１番目からｎ番目のアクセスについて以下のステップ（Ｂ１→Ｂ２
）を実行し、
（Ｂ１）監視対象のメモリアドレスへのアクセスを検出するステップ、
（Ｂ２）検出したタイミングでアドレスバスの値を記憶しておくステップ、
今回の１番目からｎ番目までのアドレスバスの値と前回の１番目からｎ番目までのアドレスバスの値を読み出し、同じ順序で比較した結果、すべて一致・１つでも不一致を判断するステップを含み、
比較結果のひとつでも不一致を以って前回と同じアクセス順序で実行していないことを検出することを特徴とするメモリアクセスにおけるハッシュ値を使わないＣＰＵの動作監視方法。
【請求項３】
予め設けた監視対象処理の処理順序（１番目からｎ番目）でサイクリックに実行するシステムのＣＰＵ監視方法において、
１番目の処理前にハッシュ値格納レジスタのハッシュ値をクリアするステップ、
監視対象処理の１番目からｎ番目の処理について以下のステップ（Ｃ１→Ｃ２→Ｃ３）を実行し、
（Ｃ１）プログラム処理の複数個所に置かれた監視対象となるプログラムカウンタの値          を出力するステップ、
（Ｃ２）出力したタイミングでプログラムカクンタの値とハッシュ値格納レジスタの値          を読み出してハッシュ関数（プログラムカウンタの値の順序が同じであればハ          ッシュ値は同じとなるように最適化されている）により新たなハッシュ値を算          出するステップ、
（Ｃ３）ハッシュ値格納レジスタの値を新たに算出したハッシュ値で置き換えるステッ          プ、
ｎ番目の処理後にハッシュ値格納レジスタのハッシュ値（今回ハッシュ値）と予め記憶しておいた前回のｎ番目の処理後のハッシュ値格納レジスタの値（前回ハッシュ値）を読み出し、比較した結果、一致・不一致を判断するステップを含み、
比較結果の不一致を以って前回と同じ処理順序で実行していないことを検出することを特徴とするプログラム動作におけるハッシュ値を使ったＣＰＵの動作監視方法。
【請求項４】
予め設けた監視対象処理の処理順序（１番目からｎ番目）でサイクリックに実行するシステムのＣＰＵ監視方法において、
監視対象処理の１番目からｎ番目の処理について以下のステップ（Ｄ１→Ｄ２）を実行し、
（Ｄ１）プログラム処理の複数個所に置かれた監視対象となるプログラムカウンタの値
を出力するステップ、
（Ｄ２）出力したタイミングでプログラムカウンタの値を記憶しておくステップ、
今回の１番目からｎ番目までのプログラムカウンタの値と前回の１番目からｎ番目まで
のプログラムカクンタの値を読み出し、同じ順序で比較した結果、すべて一致・１つでも不一致を判断するステップを含み、
比較結果のひとつでも不一致を以って前回と同じ処理順序で実行していないことを検出することを特徴とするプログラム動作におけるハッシュ値を使わないＣＰＵの動作監視方法。
【請求項５】
予め設けた監視対象アドレスのアクセス順序（１番目からｎ番目）でサイクリックに実行するシステムのＣＰＵ監視装置において、
１番目のアクセス前にハッシュ値格納レジスタのハッシュ値をクリアするハッシュ値クリア手段と、
監視対象のメモリアドレスへのアクセスを検出するアクセス検出手段と、
検出したタイミングでアドレスバスの値とハッシュ値格納レジスタの値を読み出してハッシュ関数（アクセス順序が同じであればハッシュ値は同じとなるように最適化されている）により新たなハッシュ値を算出するハッシュ値算出手段と、
ハッシュ値格納レジスタの値を新たに算出したハッシュ値で置き換えるハッシュ値格納手段と、
ｎ番目のアクセス後にハッシュ値格納レジスタのハッシュ値（今回ハッシュ値）と予め記憶しておいた前回のｎ番目のアクセス後のハッシュ値格納レジスタの値（前回ハッシュ値）を読み出し、比較した結果、一致・不一致を判断するハッシュ値比較手段とを備え、比較結果の不一致を以って前回と同じアクセス順序で実行していないことを検出することることを特徴とするメモリアクセスにおけるハッシュ値を使ったＣＰＵの動作監視装置。
【請求項６】
予め設けた監視対象アドレスのアクセス順序（１番目からｎ番目）でサイクリックに実
行するシステムのＣＰＵ監視装置において、
監視対象のメモリアドレスへのアクセスを検出するアクセス検出手段と、
検出したタイミングでアドレスバスの値を記憶しておくアドレスバス値記憶手段と、
今回の１番目からｎ番目までのアドレスバスの値と前回の１番目からｎ番目までのアドレスバスの値を読み出し、同じ順序で比較した結果、すべて一致・１つでも不一致を判断するアドレスバス値比較手段とを備え、
比較結果のひとつでも不一致を以って前回と同じアクセス順序で実行していないことを検出することを特徴とするメモリアクセスにおけるハッシュ値を使わないＣＰＵの動作監視装置。
【請求項７】
予め設けた監視対象処理の処理順序（１番目からｎ番目）でサイクリックに実行するシステムのＣＰＵ監視装置において、
１番目の処理前にハッシュ値格納レジスタのハッシュ値をクリアするハッシュ値クリア手段と、
プログラム処理の複数個所に置かれた監視対象となるプログラムカウンタの値を出力するプログラムカウンタ値出力手段と、
出力したタイミングでプログラムカクンタの値とハッシュ値格納レジスタの値を読み出してハッシュ関数（プログラムカウンタの値の順序が同じであればハッシュ値は同じとなるように最適化されている）により新たなハッシュ値を算出するハッシュ値算出手段と、
ハッシュ値格納レジスタの値を新たに算出したハッシュ値で置き換えるハッシュ値格納手段と、
ｎ番目の処理後にハッシュ値格納レジスタのハッシュ値（今回ハッシュ値）と予め記憶しておいた前回のｎ番目の処理後のハッシュ値格納レジスタの値（前回ハッシュ値）を読み出し、比較した結果、一致・不一致を判断するハッシュ値比較手段とを備え、
比較結果の不一致を以って前回と同じ処理順序で実行していないことを検出することを特徴とするプログラム動作におけるハッシュ値を使ったＣＰＵの動作監視装置。
【請求項８】
予め設けた監視対象処理の処理順序（１番目からｎ番目）でサイクリックに実行するシステムのＣＰＵ監視装置において、
プログラム処理の複数個所に置かれた監視対象となるプログラムカウンタの値を出力するプログラムカウンタ値出力手段と、
出力したタイミングでプログラムカウンタの値を記憶しておくプログラムカウンタ値記
憶手段と、
今回の１番目からｎ番目までのプログラムカウンタの値と前回の１番目からｎ番目まで
のプログラムカクンタの値を読み出し、同じ順序で比較した結果、すべて一致・１つでも不一致を判断するプログラムカウンタ値比較手段とを備え、
比較結果のひとつでも不一致を以って前回と同じ処理順序で実行していないことを検出することを特徴とするプログラム動作におけるハッシュ値を使わないＣＰＵの動作監視装置。
【発明の詳細な説明】
【技術分野】
【０００１】
本発明は、コンピュータシステム、マイクロコントローラ機器などのＣＰＵの動作監視技術において、特にＣＰＵが所定の領域に所定のアドレス順でアクセスすること、さらに、ＣＰＵが所定の処理を所定の順序で実行すること、を監視するＣＰＵの動作監視に関する。
【背景技術】
【０００２】
従来、ＣＰＵの動作監視に関する基本技術としては、所定の時間内にリトリガがないと異常を検出するウォッチドッグタイマー、所定領域外のアドレスへのアクセスで異常を検出する領域外アクセス監視、所定の時間内に所定のインタフェース領域に特定の値を書き込んで他のＣＰＵ等からその書き込みを確認するハートビート監視等がある。
一方、ＣＰＵの動作監視に関する文献としては、特許文献１、特許文献２、特許文献３が開示されている。特許文献１は、アドレスバスの最下位ビットの変化を検出し、所定の時間内に変化が見られない場合はＣＰＵが不動作状態であると判断し、自動でＣＰＵにリセットをかけて正常状態に復帰させる装置が開示されている。また、特許文献２では、プロセッサと独立した２ポートのＲＡＭを設け、互いのデータ情報を比較し、一致しない場合にアラーム信号を送出する装置が開示されている。さらに、特許文献３では、プログラム内の命令シーケンスの実行順序について各命令から取得されるデータから計算された検証値と予め設定されている基準値を比較して実行順序を監視する装置が開示されている。
【先行技術文献】
【特許文献】
【０００３】
【特許文献１】特開昭５９−３２０５１号公報
【特許文献２】特開平  ５−２８００６号公報
【特許文献３】特許４１７２７４５号公報
【発明の概要】
【発明が解決しようとする課題】
【０００４】
しかし、従来の技術では通常の領域内のメモリやレジスタへのアクセスにおいて、アドレスの順序が一時的に乱れてもそれを検出することはできない。なぜなら、一時的な異常であるためにウォッチドッグタイマーでは異常を検出することができない。また、所定領域外アクセスではないため領域外アクセス監視でも異常を検出することができない。同様にハートビート監視でも一時的な異常であるために、異常を検出することができない。また、特許文献１および特許文献２についても同様である。さらに、特許文献３は、ハッシュ関数を用いて命令シーケンスの実行順序を監視するが、監視対象のプログラムに変更が生じると基準値の再計算を行い、予め設定されている基準値を修正する必要がある上、可変データを含むシーケンスは基準値が毎回変わるために実行順序を監視することができない。また、プログラムの実行は必ずしもメモリアクセスを伴うものではない（たとえば、ワンチップＣＰＵの内部メモリアクセスなど）。
【０００５】
そこで本発明は、（１）ＣＰＵが通常の領域内のメモリやレジスタにアクセスするとき、そのアドレスの順序が一時的に乱れた場合に異常を検出すること、さらに、（２）ＣＰＵが所定の処理を所定の順序で実行すること、を監視するＣＰＵの動作監視方法および装置を提供することを目的とする。
【課題を解決するための手段】
【０００６】
上記課題を解決するために本発明は、
（１）監視対象とする特定のメモリやレジスタへのアクセス毎にアドレスバスの値を用いてハッシュ値を求め、これを過去の値と比較することにより、一時的なアクセスの乱れを検出する。前回と同じアドレス順で同じようにアクセスしたならば、そのハッシュ値（
今回値）は前回値と同じになるはずである。この今回値と前回値を比較して同じならば
正常、異なっていたらアクセスに乱れがあったものと見なすことができる。
【０００７】
なお、ここで言うアドレスバスの値は、必ずしも厳密に一致する必要はない。ハッシュ値を求めたときに、必要とされる精度で違いが検出できればよい。つまり、ハッシュ関数は多数の入力値から１つのハッシュ値を算出するため、１００％の精度で違いを検出できるものではないから、用途ごとに必要とされる精度がでるハッシュ関数を選択して使用することになる。また、ハッシュ関数の精度に応じて例えば、アドレスバスの値である３２ｂｉｔ全てを監視対象とするのではなく下位１６ｂｉｔとしてもよい。
【０００８】
具体的な手段として、請求項１記載の発明は、予め設けた監視対象アドレスのアクセス順序（１番目からｎ番目）でサイクリックに実行するシステムのＣＰＵ監視方法において、１番目のアクセス前にハッシュ値格納レジスタのハッシュ値をクリアするステップ、監視対象アドレスの１番目からｎ番目のアクセスについて以下のステップ（Ａ１→Ａ２→Ａ３
）を実行し、（Ａ１）監視対象のメモリアドレスへのアクセスを検出するステップ、（Ａ
２）検出したタイミングでアドレスバスの値とハッシュ値格納レジスタの値を読み出してハッシュ関数（アクセス順序が同じであればハッシュ値は同じとなるように最適化されている）により新たなハッシュ値を算出するステップ、（Ａ３）ハッシュ値格納レジスタの値を新たに算出したハッシュ値で置き換えるステップ、ｎ番目のアクセス後にハッシュ値格納レジスタのハッシュ値（今回ハッシュ値）と予め記憶しておいた前回のｎ番目のアクセス後のハッシュ値格納レジスタの値（前回ハッシュ値）を読み出し、比較した結果、一致・不一致を判断するステップを含み、比較結果の不一致を以って前回と同じアクセス順序で実行していないことを検出することを特徴とする。また、請求項５は請求項１の方法の発明にたいしてメモリアクセスにおけるハッシュ値を使ったＣＰＵの動作監視装置の
発明である。
【０００９】
請求項２記載の発明は、予め設けた監視対象アドレスのアクセス順序（１番目からｎ番
目）でサイクリックに実行するシステムのＣＰＵ監視方法において、監視対象アドレスの１番目からｎ番目のアクセスについて以下のステップ（Ｂ１→Ｂ２）を実行し、（Ｂ１）
監視対象のメモリアドレスへのアクセスを検出するステップ、（Ｂ２）検出したタイミン
グでアドレスバスの値を記憶しておくステップ、今回の１番目からｎ番目までのアドレスバスの値と前回の１番目からｎ番目までのアドレスバスの値を読み出し、同じ順序で比較した結果、すべて一致・１つでも不一致を判断するステップを含み、比較結果のひとつでも不一致を以って前回と同じアクセス順序で実行していないことを検出することを特徴とする。また、請求項６は請求項２の方法の発明にたいしてメモリアクセスにおけるハッシュ値を使わないＣＰＵの動作監視装置の発明である。
【００１０】
これにより、前回と同じアドレス順に同じようにアクセスできなかった場合に、アクセスに乱れがあったことを検出することができる。
さらに、
（２）監視対象となる一連の処理の複数箇所に、一意値(例えば、その命令のプログラムカウンタ(以下、ＰＣと表記する)の値)を出力する命令を置き、出力された値を用いてハッシュ値を求め、それを過去の値と比較することにより、一時的な処理の流れの乱れを検出する。所定の処理を前回と同じ順序で実行したならば、そのハッシュ値（今回値）は前回値と同じになるはずである。この今回値と前回値を比較して同じならば正常、異なっていたら処理の流れに乱れがあったものと見なすことができる。
【００１１】
なお、ここで言う一意の値は、必ずしも厳密に一意の値である必要はない。ハッシュ値を求めたときに、必要とされる精度で違いが検出できればよい。つまり、ハッシュ関数は多数の入力値から１つのハッシュ値を算出するため、１００％の精度で違いを検出できるものではないから、用途ごとに必要とされる精度がでるハッシュ関数を選択して使用する
ことになる。また、ハッシュ関数の精度に応じて例えば、ＰＣ値の３２ｂｉｔ全てを監視
対象とするのではなく下位１６ｂｉｔとしてもよい。
【００１２】
具体的な手段として、請求項３記載の発明は、予め設けた監視対象処理の処理順序（１番目からｎ番目）でサイクリックに実行するシステムのＣＰＵ監視方法において、１番目
の処理前にハッシュ値格納レジスタのハッシュ値をクリアするステップ、監視対象処理の
１番目からｎ番目の処理について以下のステップ（Ｃ１→Ｃ２→Ｃ３）を実行し、（Ｃ１）プログラム処理の複数個所に置かれた監視対象となるプログラムカウンタの値を出力するステップ、（Ｃ２）出力したタイミングでプログラムカクンタの値とハッシュ値格納レジスタの値を読み出してハッシュ関数（プログラムカウンタの値の順序が同じであればハッシュ値は同じとなるように最適化されている）により新たなハッシュ値を算出するステップ、（Ｃ３）ハッシュ値格納レジスタの値を新たに算出したハッシュ値で置き換えるステップ、ｎ番目の処理後にハッシュ値格納レジスタのハッシュ値（今回ハッシュ値）と予め記憶しておいた前回のｎ番目の処理後のハッシュ値格納レジスタの値（前回ハッシュ値）を読み出し、比較した結果、一致・不一致を判断するステップを含み、比較結果の不一致を以って前回と同じ処理順序で実行していないことを検出することを含んでいることを特徴とする。また、請求項７は請求項３の方法の発明にたいしてプログラム動作におけるハッシュ値を使ったＣＰＵの動作監視装置の発明である。
【００１３】
請求項４記載の発明は、予め設けた監視対象処理の処理順序（１番目からｎ番目）でサイクリックに実行するシステムのＣＰＵ監視方法において、監視対象処理の１番目からｎ番目の処理について以下のステップ（Ｄ１→Ｄ２）を実行し、（Ｄ１）プログラム処理の複数個所に置かれた監視対象となるプログラムカウンタの値を出力するステップ、（Ｄ２
）出力したタイミングでプログラムカウンタの値を記憶しておくステップ、今回の１番目からｎ番目までのプログラムカウンタの値と前回の１番目からｎ番目までのプログラムカウンタの値を読み出し、同じ順序で比較した結果、すべて一致・１つでも不一致を判断するステップを含み、比較結果のひとつでも不一致を以って前回と同じ処理順序で実行していないことを検出することを特徴とする。また、請求項８は請求項４の方法の発明にたいしてプログラム動作におけるハッシュ値を使わないＣＰＵの動作監視装置の発明である。
【００１４】
これにより、何らかの原因で、前回と同じ順序で処理を実行できなかった場合に、処理の流れに乱れがあったことを検出することができる。
【発明の効果】
【００１５】
以上説明したように、本発明によれば、何らかの外乱により、高信頼性を要求される領域へのアクセスや処理順序が一時的に乱れても、すぐにその異常を検出することができ、
被害が最小となるように異常対応処理を実行することができる。
また、監視対象の一連のアクセスや処理において、最後のアクセスや処理で算出した今回ハッシュ値と、同じく最後のアクセスや処理で算出した前回ハッシュ値とを比較することにより異常を検出するため、監視対象の中間のアクセスや処理で算出したハッシュ値は、次のアクセスや処理で利用するもの以外は記憶しておく必要がなく、メモリを節約することができる。
【００１６】
また、プログラム動作監視において、監視対象のプログラムのソースコードを修正する場合であっても、監視対象の処理に変更がなければ、特にプログラムカウンタを出力するステップにたいして変更を加える必要がない。なぜなら、プログラムカウンタの値はアドレス値であり、プログラムの命令に修正が生じたことで、プログラムカウンタのアドレス値が変わっても、システム立ち上げ後にこのアドレス値を基にしてハッシュ値を算出し、今回ハッシュ値と前回ハッシュ値を比較することで異常、正常を判断するためである。
【００１７】
従来技術において、前回ハッシュ値を使わずに予め固定メモリに書き込んである基準値と今回ハッシュ値を比較する方法ではプログラムの変更ごとに基準値を修正する必要がある。さらに、プログラムカウンタのアドレス値の番地にあるデータ（命令コード値または数値）を基に基準値を算出する方法では、上記問題とさらに上記データが可変の数値についてはＣＰＵが正常であってもハッシュ値が変わるために監視対象にできないという重大な欠点がある。
【図面の簡単な説明】
【００１８】
【図１】本発明の実施例１に係るメモリアクセスにおけるハッシュ関数を使った処理フローを示す図である。
【図２】本発明の実施例２に係るメモリアクセスにおけるハッシュ関数を使わない処理フローを示す図である。
【図３】本発明の実施例３に係るプログラム動作におけるハッシュ関数を使った処理フローを示す図である。
【図４】本発明の実施例４に係るプログラム動作におけるハッシュ関数を使わない処理フローを示す図である。
【図５】本発明の実施例１に係るメモリアクセスにおけるハッシュ関数を使ったＣＰＵの動作監視装置の構成を示す図である。
【図６】本発明の実施例３に係るプログラム動作におけるハッシュ関数を使ったＣＰＵの動作監視装置の構成を示す図である。
【発明を実施するための形態】
【００１９】
以下、本発明の実施の形態について、詳細に説明する。
ここではＣＰＵ動作監視方法および装置の４つの実施例について説明する。例１は、メモリアクセスにおけるハッシュ関数を使ったＣＰＵの動作監視方法と装置の例である。例２は、メモリアクセスにおけるハッシュ関数を使わないＣＰＵの動作監視方法と装置の例である。例３は、プログラム動作におけるハッシュ関数を使ったＣＰＵの動作監視方法と装置の例である。例４は、プログラム動作におけるハッシュ関数を使わないＣＰＵの動作監視方法と装置の例である。
【００２０】
例１としてメモリアクセスにおけるハッシュ関数を使ったＣＰＵの動作監視方法と装置について説明する。図５は本発明のＣＰＵ監視装置を用いた構成の一例である。また、図１は本発明のハッシュ関数を使って異常を検出する際のフローチャートの一例である。先ずは装置の構成より説明する。
図５において本発明の実施の形態に係るＣＰＵ監視装置４０は、アクセス検出部４１と、ハッシュ値算出部４２と、ハッシュ値格納レジスタ４３とにより構築されている。ＣＰＵ１０とメモリ、レジスタ２０は、リード信号線、ライト信号線、データバス、アドレスバスで接続され、アクセス可能状態となっている。また、デコーダ３０に接続されたチップセレクト信号線とリード信号線、ライト信号線、データバス、アドレスバスによりアクセス検出部は、監視対象のアクセスを検出できるようになっている。さらに、ハッシュ値算出部は、ハッシュ関数としてＳＨＡ−１やＭＤ５などの暗号化の分野ですでに周知となっている技術を適用することによりハッシュ値を算出することができる。
【００２１】
図５では、メモリとレジスタは１つしか記載していないが、複数のメモリやレジスタの内、１または複数のメモリやレジスタを監視対象としてもよいし、また、１つのメモリやレジスタの内、特定の領域を監視対象としてもよい。
ＣＰＵは、外部とのインタフェースとなるメモリやレジスタに対して、サイクリックに同じアドレス順に同じようにアクセスするものとする。外部とのインタフェースのため、データ値は毎回異なる場合があるが、アクセスするアドレスとその順序は一致するものとする。
【００２２】
次に監視対象のアドレスのアクセス順序が一時的に乱れたときの例を以下に示す（ここでは、３つのアドレスａ、ｂ、ｃを監視対象としている）。
正常時）  ａ→ｂ→ｃ
異常時１）ａ→ｃ→ｂ
異常時２）ａ→ｂ→ｂ
正常時）のアクセス順序はａ→ｂ→ｃであるが、異常時１）ではｂとｃの順序が逆転している。また、異常時２）ではｂのアクセス後にｃではなくｂが連続している。他にもいくつかの異常ケースが考えられるが説明は省略する。
【００２３】
従来技術では、メモリアクセス監視装置がないため、監視対象の領域内でのアクセスの順序が一時的に乱れても異常を検出することはできなかったが、本実施例では以下に述べる方法によって異常を検出することができる。
まずＣＰＵは、サイクリックに実行されている監視対象のメモリやレジスタにアクセス  する前にハッシュ値格納レジスタの値をクリアする（ステップ１１）。ハッシュ値クリア手段として、データバスを通してハッシュ値格納レジスタの値に０などの初期値を書き込む。
【００２４】
その後、ＣＰＵは、監視対象のメモリやレジスタに任意の回数アクセスする（ステップ１２）。この間に、監視対象へのアクセスかどうかは、監視対象のメモリやレジスタへのチップセレクト信号を用いてアクセス検出部が検出する。１つのメモリとレジスタ内の特定の領域が監視対象ならば、チップセレクト信号とアドレスバス信号を用いて検出する。また、監視するアクセスがリードだけか、ライトだけか、リードとライトの両方ともか、は予めデータバスを通してアクセス検出部に設定しておく。
【００２５】
アクセス検出部で監視対象のアクセスを検出したら、ハッシュ値算出部でアドレスバス
の値（ステップ１３）とハッシュ値格納レジスタの値（ステップ１４）を用いてハッシュ値を算出し（ステップ１５）、これをハッシュ値格納レジスタに格納する（ステップ１６
）。このステップ（ステップ１３〜ステップ１６）を監視対象のアクセス回数分繰り返す（ステップ１２）。
【００２６】
監視対象への一連のアクセスが完了後、ＣＰＵは、ハッシュ値格納レジスタの値を読み出して（ステップ１７）、予め格納しておいたハッシュ値格納レジスタの前回値と比較する（ステップ１８）。比較した結果、不一致ならばシステム停止処理へジャンプし（ステップ２０）、一致ならば今回読み出したハッシュ値格納レジスタの値を次回比較時に前回値として扱えるように記憶しておく（ステップ１９）。また、今回値と前回値が一致するときは、今回値を前回値として置き換えなくてもよい。
【００２７】
なお、システム立ち上げ後の１回目の比較では、ＣＰＵは、ハッシュ値格納レジスタの
前回値を持っていないので、１回目の比較を無効（必ず一致）にするか、または、１回目
に読み出したハッシュ値格納レジスタの値をハッシュ値格納レジスタの前回値として記憶してから１回目の比較を行う。
次に例２としてメモリアクセスにおけるハッシュ関数を使わないＣＰＵの動作監視方法と装置について説明する。構成は、図１のハッシュ値算出部がアドレスバス値記憶部に置き換わり前回と今回の一連のアクセス回数分のアドレスバスの値を記憶するだけで基本構成および装置の外部環境は実施例１と同じである（図示せず）。また、図２は本発明のハッシュ関数を使わないで異常を検出する際のフローチャートの一例である。監視対象の一連のアクセス回数が少ない場合は、複数のアドレスバスの値を一つのハッシュ値に変換せずに、アクセス回数分のアドレスバスの値を記憶しておいて、今回と前回のアドレス値をアクセス順に比較してもよい。
【００２８】
アクセス検出部で監視対象のアクセスを検出したら、アドレスバス値記憶部でアドレスバスの値を読み込み（ステップ２２）、レジスタなどの記憶領域に記憶しておく（ステップ２３）。このステップ（ステップ２２〜ステップ２３）を監視対象のアクセス回数分繰り返す（ステップ２１）。
監視対象への一連のアクセスが完了後、ＣＰＵは、アクセス回数分の今回値と前回値を読み出して（ステップ２４）、アクセス順に比較する（ステップ２５）。比較した結果、一つでも不一致ならばシステム停止処理へジャンプし（ステップ２７）、すべて一致ならば今回読み出した値を比較時に前回値として扱えるように記憶しておく（ステップ２６）。また、今回値と前回値が一致するときは、今回値を前回値として置き換えなくてもよい。
【００２９】
次に例３としてプログラム動作におけるハッシュ関数を使ったＣＰＵの動作監視方法と装置について説明する。図６は本発明のＣＰＵ監視装置を用いた構成の一例である。また、図３は本発明のハッシュ関数を使って異常を検出する際のフローチャートの一例である。先ずは装置の構成より説明する。
図６において本発明の実施の形態に係るＣＰＵ動作監視装置５０は、ハッシュ値算出部４２と、ハッシュ値格納レジスタ４３とにより構築されている。ＣＰＵ１０とデータバスで接続され、監視対象のＰＣ値を出力することができるようになっている。また、ハッシュ値算出部は、ハッシュ関数としてＳＨＡ−１やＭＤ５などの暗号化の分野ですでに周知となっている技術を適用することによりハッシュ値を算出することができる。さらに、Ｃ
ＰＵは、監視対象の処理をサイクリックに実行するものとし、その処理の中の命令は同じ
順序で実行されるものとする。
【００３０】
従来技術では、プログラム動作監視装置がないため、監視対象の処理順序が一時的に乱れても検出することはできなかったが、本実施例では以下に述べる方法よって検出するこ
とができる。
まずＣＰＵは、図３に示すようにサイクリックに実行されている監視対象処理の実行前にハッシュ値格納レジスタの値をクリアする（ステップ３１）。ハッシュ値クリア手段として、データバスを通してハッシュ値格納レジスタの値に０などの初期値を書き込む。
【００３１】
その後に、ＣＰＵは監視対象のプログラム処理内で、チェックポイントとする複数の箇所で一意の値であるＰＣ値を出力し（ステップ３３）、この値とハッシュ値格納レジスタの値（ステップ３４）を用いて新たなハッシュ値を算出して（ステップ３５）、これをハッシュ値格納レジスタに格納する（ステップ３６）。このステップ（ステップ３３〜ステップ３６）を監視対象の一連の処理回数分繰り返す（ステップ３２）。
【００３２】
このチェックポイントとする箇所は、実行の順序が乱れては困る処理の近傍であり、ここで出力される一意の値であるＰＣ値の順序を監視することになる。
なお、ＣＰＵ動作監視装置は、必ずしもＣＰＵとは別のハードウェアを用意する必要は無い。ＣＰＵの内蔵メモリにハッシュ値格納レジスタに相当する領域を設けてもよい。また、新たなハッシュ値はＣＰＵがソフトウェアで演算して求めてもよい。
ここで、監視対象のプログラム処理の中で呼び出すサブルーチンの順序や、割込みプログラムの影響などで、チェックポイントの通過順が変化したとする。チェックポイントで出力される検査値は、本実施例ではＰＣ値なので、チェックポイントごとに異なる。
【００３３】
例えば、前回は１００→１１０→１２０→１３０という順序で実行されたにも関わらず、今回１００→１２０→１１０→１３０という順序で実行されれば、ハッシュ値は異なる。
監視対象の一連の処理が完了後、ハッシュ値格納レジスタの値をＣＰＵが読み出して（ステップ３７）、予め格納しておいたハッシュ値格納レジスタの前回値と比較する（ステップ３８）。比較して不一致ならば停止や復旧等の処理へジャンプし（ステップ４０）、一致ならば今回読み出したハッシュ値格納レジスタの値を、次回比較時に前回値として扱えるように記憶しておく（ステップ３９）。また、今回値と前回値が一致するときは、今回値を前回値として置き換えなくてもよい。
【００３４】
なお、システム立ち上げ後の１回目の比較では、ＣＰＵはハッシュ値格納レジスタの前回値を持っていないので、１回目の比較を無効（必ず一致）にするか、１回目に読み出したハッシュ値格納レジスタの値をハッシュ値格納レジスタの前回値として記憶してから１回目の比較を行う。
次に例４としてプログラム動作におけるハッシュ関数を使わないＣＰＵの動作監視方法と装置について説明する。構成は、図２のハッシュ値算出部がプログラムカウンタ値記憶部に置き換わり前回と今回の一連の検査回数分のＰＣ値を記憶するだけで基本構成および装置の外部環境は実施例２と同じである（図示せず）。また、図４は本発明のハッシュ関数を使わないで異常を検出する際のフローチャートの一例である。監視対象の一連のアクセス回数が少ない場合は、複数のＰＣ値を一つのハッシュ値に変換せずに、アクセス回数分のＰＣ値を記憶しておいて、今回と前回のＰＣ値を検査順に比較してもよい。
【００３５】
ＣＰＵは監視対象のプログラム処理内で、チェックポイントとする複数の箇所で一意の値であるＰＣ値を出力し、監視対象のＰＣ値出力を検出したら、プログラムカウンタ値記憶部でＰＣ値を読み込み（ステップ４２）、レジスタなどの記憶領域に記憶しておく（ステップ４３）。このステップ（ステップ４２〜ステップ４３）を監視対象の検査回数分繰り返す（ステップ４１）。
【００３６】
監視対象への一連のアクセスが完了後、ＣＰＵは、検査回数分の今回値と前回値を読み出して（ステップ４４）、処理順に比較する（ステップ４５）。比較した結果、一つでも不一致ならばシステム停止や復旧の処理へジャンプし（ステップ４７）、すべて一致ならば今回読み出した値を比較時に前回値として扱えるように記憶しておく（ステップ４６）。また、今回値と前回値が一致するときは、今回値を前回値として置き換えなくてもよい。
【符号の説明】
【００３７】
１０  ＣＰＵ
２０  メモリ／レジスタ
３０  デコーダ
４０  ＣＰＵ動作監視装置
４１  アクセス検出部
４２  ハッシュ値算出部
４３  ハッシュ値格納レジスタ
５０  ＣＰＵ動作監視装置
【図１】
2010211391.tif 000003
【図２】
2010211391.tif 000004
【図３】
2010211391.tif 000005
【図４】
2010211391.tif 000006
【図５】
2010211391.tif 000007
【図６】
2010211391.tif 000008