"コンピュータにおいて実行される監視対象プログラムが正常に実行されているか否かを監視するプログラム実行状況監視装置であって、前記監視対象プログラムの一部の処理として、予め第1の記録領域に記録された第1の値および予め第2の記録領域に記録された第2の値のうちの直近の時刻に更新された値との対応関係が所定条件を満たすための第1の操作を行うことで求められる値である第1新値に、前記第1の値および前記第2の値のうちの直近の時刻に更新されていない値を更新する第1更新手段と、前記監視対象プログラムの一部の処理として、前記第1新値に対して第2の操作を行うことで得られる操作値を生成する操作値生成手段と、前記監視対象プログラムの一部の処理として、正常な順序で当該監視対象プログラムが実施される場合に前記第1更新手段による処理の後で前記第1更新手段が更新していない第1の値または第2の値を更新する処理であって、前記操作値に対して前記第1の操作および前記第2の操作を相殺する操作を行うことで求められる値である第2新値に、前記第1の値および前記第2の値のうちの直近の時刻に更新されていない値を更新する第2更新手段と、前記監視対象プログラムとは別の処理として、前記第1の値と前記第2の値との対応関係が所定の関係になっているか否かを繰り返し判定し、該判定結果に応じた出力を行う対応関係判定出力手段と、を備えたことを特徴とするプログラム実行状況監視装置。請求項1に記載のプログラム実行状況監視装置において、前記第1更新手段、前記操作値生成手段、および前記第2更新手段は、これらを1組として複数組備えられており、前記操作値生成手段は、前記第1新値に対して当該第1更新手段が属する組特有の第2の操作を行うことで操作値を生成し、前記第2更新手段は、既に読み出された操作値を除く操作値のうちの最新のものを読み出し、該操作値に対して、当該第2更新手段が属する組の操作値生成手段が行った第2の操作および前記第1の操作を相殺する操作を行うことで前記第2新値を演算することを特徴とするプログラム実行状況監視装置。請求項1または請求項2に記載のプログラム実行状況監視装置において、前記第1更新手段は、前記監視対象プログラムにおける関数定義の前半部分において前記第1新値を演算し、前記第2更新手段は、前記第1更新手段が第1新値を演算する関数定義の後半部分において前記第2新値を演算することを特徴とするプログラム実行状況監視装置。請求項1または請求項2に記載のプログラム実行状況監視装置において、前記対応関係判定出力手段は、前記第1の値と前記第2の値との対応関係が所定の関係になっていない場合の出力として、前記監視対象プログラムを実行する処理をリセットさせる信号を出力することを特徴とするプログラム実行状況監視装置。コンピュータを、請求項1~請求項4の何れか1項に記載のプログラム実行状況監視装置を構成する各手段として機能させるための実行状況監視プログラム。しかしながら、上記プログラム実行状況監視装置では、命令内容や復帰アドレス等を表に書き込むため、表のための膨大な記憶容量が必要になるという問題点があった。そこで、このような問題点を鑑み、コンピュータにおいて実行されるプログラムが正常に実行されているか否かを監視するプログラム実行状況監視装置、および実行状況監視プログラムにおいて、多くの記憶容量を必要とすることなくプログラムが正常に実行されているか否かを監視できる技術を提供することを本発明の目的とする。かかる目的を達成するために成された第1の構成のプログラム実行状況監視装置において、第1更新手段は、監視対象プログラムの一部の処理として、予め第1の記録領域に記録された第1の値および予め第2の記録領域に記録された第2の値のうちの直近の時刻に更新された値現在を基準として更新時刻が最も近いものとの対応関係が所定条件を満たすための第1の操作を行うことで求められる値である第1新値に、第1の値および第2の値のうちの直近の時刻に更新されていない値を更新する。また、操作値生成手段は、監視対象プログラムの一部の処理として、第1新値に対して第2の操作を行うことで得られる操作値を生成する。そして、第2更新手段は、監視対象プログラムの一部の処理として、正常な順序でこの監視対象プログラムが実施される場合に第1更新手段による処理の後で第1更新手段が更新していない第1の値または第2の値を更新する処理であって、操作値に対して第1の操作および第2の操作を相殺する操作を行うことで求められる値である第2新値に、第1の値および第2の値のうちの直近の時刻に更新されていない値を更新する。さらに、対応関係判定出力手段は、監視対象プログラムとは別の処理として、第1の値と第2の値との対応関係が所定の関係になっているか否かを繰り返し判定し、この判定結果に応じた出力を行う。本発明において例えば、第1更新手段によって求められる第1新値が第1の値を更新する値である場合には、正常な順序で第2更新手段が作動する場合には、第2の値が第2新値に更新される。この第2新値を求める際には、第1の値との関係が所定条件を満たす第2の値に対して第1の操作および第2の操作を行うことで生成された操作値に対して、第1の操作と第2の操作とを相殺する操作を行うので、第2の値は第1の値との対応関係は所定条件を満たすように維持される。一方、正常な順序で第2更新手段が作動せず、別の処理によって第2の値が更新されたと仮定し、次に第2更新手段が作動すると第1の値が第2新値に更新される。この場合には、本来、第2の値となるべき値が第1の値になるため、第1新値第1の値と第2新値第2の値との対応関係は所定条件を満たすように維持されない可能性が高い。また、プログラムカウンタが電磁波の影響等によって破壊等され、意図しない値に書き換わる場合においても、第1新値第1の値と第2新値第2の値との対応関係は所定条件を満たすように維持されない可能性が高い。したがって、このようなプログラム実行状況監視装置によれば、第1の数値と第2の数値との関係を監視することでプログラムの実行状況を判定することができる。また、この判定の際には、第1の値、第2の値、および操作値を記録する記録領域を備えておけばよいので、実行された命令等を記録した表を準備する構成と比較して、少ない記録領域でプログラムが正常に実行されているか否かを監視することができる。なお、第1更新手段は、第1の値および第2の値のうちの直近の時刻に更新されていない値等の所定の値に対して第1の操作を行うようにすればよい。ところで、上記プログラム実行状況監視装置においては、第2の構成のように、第1更新手段、操作値生成手段、および第2更新手段は、これらを1組として複数組備えられており、操作値生成手段は、第1新値に対してこの第1更新手段が属する組特有の第2の操作を行うことで操作値を生成し、第2更新手段は、既に読み出された操作値を除く操作値のうちの最新のものを読み出し、この操作値に対して、この第2更新手段が属する組の操作値生成手段が行った第2の操作および第1の操作を相殺する操作を行うことで第2新値を演算するようにしてもよい。このようなプログラム実行状況監視装置によれば、操作値生成手段は、組毎に異なる操作値を生成し、第2更新手段は既に読み出された操作値を除く操作値のうちの最新のものを読み出し、該操作値に対して組毎に異なる第2の操作を相殺する操作を行うので、プログラムの実行順序に誤りが生じると、第2更新手段は第2の操作を相殺することができなくなる。この結果、プログラムの実行順序に誤りが生じると、第1の値と第2の値との対応関係が変化する可能性が高くなるため、複数組の第1更新手段、操作値生成手段、および第2更新手段を備えた構成であっても、プログラムの実行状況を判定することができる。なお、本発明においては、ある組の第1更新手段および操作値生成手段が実施された直後に、この組の第2更新手段が実施された場合、または、ある組の第1更新手段および操作値生成手段が実施された後、この組の第2更新手段が実施される前に、他の組複数の組でも可。の第1更新手段、操作値生成手段、および第2更新手段が実施された場合に、プログラムの実行順序が正しい場合の第2新値が演算される。さらに、上記プログラム実行状況監視装置においては、第3の構成のように、第1更新手段は、監視対象プログラムにおける関数定義の前半部分において第1新値を演算し、第2更新手段は、第1更新手段が第1新値を演算する関数定義の後半部分において第2新値を演算するようにしてもよい。このようなプログラム実行状況監視装置によれば、第1更新手段および第2更新手段による処理が実施される関数定義内のプログラムが正常に作動したか否かを確認することができる。また、上記プログラム実行状況監視装置においては、第4の構成のように、対応関係判定出力手段は、第1の値と第2の値との対応関係が所定の関係になっていない場合の出力として、監視対象プログラムを実行する処理をリセットさせる信号を出力するようにしてもよい。このようなプログラム実行状況監視装置によれば、第1の値と第2の値との対応関係が所定の関係になっていない状態、つまり、プログラム実行状況に異常がある場合に、監視対象プログラムを実行する処理をリセットさせることができる。次に、上記目的を達成するために成された実行状況監視プログラムは、コンピュータを、上記何れかに記載のプログラム実行状況監視装置を構成する各手段として機能させるためのプログラムであることを特徴とする。このような実行状況監視プログラムによれば、少なくとも請求項1に記載のプログラム実行状況監視装置と同様の効果を享受することができる。以下に本発明にかかる実施の形態を図面と共に説明する。[本実施形態の構成]図1は、本発明が適用された実行状況監視装置1の概略構成を示すブロック図である。実行状況監視装置1は、図1に示すように、処理実行装置10プログラム実行状況監視装置と、ウォッチドック回路21と、を備えて構成されており、処理実行装置10にて実行されるプログラムが正常に実行されているか否かを監視する機能を有する。詳細には、処理実行装置10は、CPU11と、ROMに格納されたメインプログラム13および監視プログラム14と、RAMとして構成された記憶領域15と、を備えたマイコンとして構成されている。CPU11には、プログラムの起動タイミングを制御するためのクロック12タイマが備えられている。クロック12は、所定の時間毎例えば1秒程度毎にCPU11に対して監視プログラム14を実行させるための信号を送る。記憶領域15は、関数定義毎に演算される一次記憶値がそれぞれ格納される。また、CPU11は、記憶領域15に記憶された一次記憶値を読み出す際には、各一次記憶値のうちの最新のものを読み出し、一度読み出した値は読み出さないよう設定されている。なお、CPU11は読み出す一次記憶値を削除してもよい。ウォッチドック回路21は、処理実行装置10から一定時間内にエッジ信号が得られない場合に、処理実行装置10をリセットさせるリセット信号を出力する。つまり、後述する処理において、プログラムが正常に実行されていれば処理実行装置10はエッジ信号を定期的にウォッチドック回路21に送信することでウォッチドック回路21からリセット信号が出力されることを防止するが、プログラムが正常に実行されていなければ処理実行装置10はエッジ信号をウォッチドック回路21に送信しなくなり、ウォッチドック回路21からリセット信号が出力されることになる。メインプログラム13は、例えば、実行状況監視装置1が車両に搭載されている場合、車両の各部を制御するためのプログラム等として機能する。ここで、図2はメインプログラム13の概略構成および階層構造を示す説明図である。メインプログラム13は、図2に示すように、最も上位の階層である階層0ネストの深さが0において、スタートアップルーチンに続いてメインルーチンが記述されている。図2に示すメインルーチンでは、2つの関数定義サブルーチンA1、A2が含まれており、これらの関数定義A1,A2についてプログラムは、1つ下位の階層である階層1として記述されている。また、関数定義A1内には、関数定義B1が含まれており、これらの関数定義B1についてのプログラムは、さらに1つ下位の階層である階層2として記述されている。そして、関数定義B1内には、関数定義C1,C2が含まれており、これらの関数定義C1,C2についてのプログラムは、さらに1つ下位の階層である階層3として記述されている。ここで、本実施形態の各関数定義には、先頭マクロプログラムおよび末尾マクロが、通常のプログラム例えば車両を制御するためのプログラムに影響を及ぼさない形態で追記されている。例えば、関数定義A1には、関数定義A1用のマクロであるA1先頭マクロおよびA1末尾マクロが追記されており、関数定義C2には、関数定義C2用のマクロであるC2先頭マクロおよびC2末尾マクロが追記されている。[本実施形態の処理]このように構成された処理実行装置10において実行される、具体的な先頭マクロの作動について、図3を用いて説明する。図3aはCPU11がメインプログラム13の一部として実行する先頭マクロ処理を示すフローチャート、図3bはCPU11がメインプログラム13の一部として実行する末尾マクロ処理を示すフローチャートである。なお、先頭マクロ処理および末尾マクロ処理では、フラグt、変数t1,t2を利用する。これらの値は、スタートアップルーチンにおいて、初期値として、t=ON、t1=0、t2=1、が与えられるものとする。先頭マクロ処理は、各関数定義において先頭マクロが読み込まれると開始される処理である。詳細には、図3aに示すように、まず、フラグtの状態を判定するS110。tがONであればS110:ON、t11第1の操作、第1新値をt2に上書きしS120:第1更新手段、t2P第2の操作、操作値を一次記憶値として記憶領域15内のスタックに記録させるS130:操作値生成手段。ここで、Pは関数定義固有の任意の値であって、ある関数定義iでのPの値P_iは、他の関数定義jでのPの値P_jとは異なる値となり、かつ、|1-P_iP_j|絶対値が、1にならないように設定されている。この処理が終了すると後述するS160の処理に移行する。また、S110の処理にて、フラグtがOFFであればS110:OFF、t21第1の操作、第1新値をt1に上書きしS140:第1更新手段、t1P第2の操作、操作値を一次記憶値として記憶領域15内のスタックに記録させるS150:操作値生成手段。そして、フラグtの状態を反転させてつまり、tがONであればOFFにし、tがOFFであればONにしてS160、先頭マクロ処理を終了する。次に、末尾マクロ処理は、各関数定義において末尾マクロが読み込まれると開始される処理であり、詳細には、図3bに示すように、まず、一次記憶値のうちの最新のものpopをtempとして読み出すS210。そして、フラグtの状態を判定するS220。tがOFFであればS220:OFF、temp-1-P第2新値をt1に上書きしS230:第2更新手段、後述するS250の処理に移行する。また、tがONであればS220:ON、temp-1-P第2新値をt2に上書きしS240:第2更新手段、フラグtの状態を反転させてS250、末尾マクロ処理を終了する。つまり、S230、S240の処理では、読み出した一次記憶値に対して第1の操作1を加算する処理および第2の操作Pを加算する処理を相殺する操作を行う。なお、先頭マクロ処理および末尾マクロ処理のうちのt1、t2を更新する処理S120,S140,S230,S240では、割込タスクからの影響を避けるため、1命令で済むようプログラムの記載が考慮されている。次に、プログラムが正常に実行されているか否かを評価する処理について図4を用いて説明する。図4はCPU11が監視プログラム14として実行する評価処理を示すフローチャートである。評価処理は、クロック12から当該処理を起動する旨の信号を受けると開始される。評価処理では、図4に示すように、まず、|t1-t2|絶対値が1であるか否かを判定するS310:対応関係判定出力手段。|t1-t2|が1であればS310:YES、ウォッチドック回路21に対してエッジ信号を出力しS320:対応関係判定出力手段、評価処理を終了する。また、|t1-t2|が1でなければS310:NO、エッジ信号を出力することなく評価処理を終了する。図2に示すプログラム構成において、上記先頭マクロ処理および末尾マクロ処理を実行した場合において、記憶領域15内の各値の遷移状態を、図5を用いて説明する。図5は正常時において記憶領域15内の各値の遷移状態を示す説明図である。前述のように、スタートアップルーチン実施直後においては、フラグtがON、t1=1、t2=1に設定されている。メインルーチンが開始され、A1先頭マクロが実行されると、フラグtがOFFになり、記憶領域15のA1スタックに1P_A1が記録される。このとき、t2は1のままとなる。続いて、B1先頭マクロが実行されると、t1=2となり、フラグtがONになる。そして、記憶領域15のB1スタックに2P_B1が記録される。次に、C1先頭マクロが実行されると、t2=3となり、フラグtがOFFになる。そして、記憶領域15のC1スタックに3P_C1が記録される。続いて、C1末尾マクロが実行されると、t1=3P_C1-1-P_C1=2となり、フラグtがONになる。また、C2先頭マクロが実行されると、フラグtがOFFになり、記憶領域15のC2スタックに3P_C2が記録される。そして、C2末尾マクロが実行されると、t1=3P_C2-1-P_C2=2となり、フラグtがONになる。続いて、B1末尾マクロが実行されると、t2=2P_B1-1-P_B1=1となり、フラグtがOFFになる。また、A1末尾マクロが実行されると、t1=1P_A1-1-P_A1=0となり、フラグtがONになる。続いて、A2先頭マクロが実行されるとフラグtがOFFになり、記憶領域15のA1スタックに1P_A2が記録される。また、A1末尾マクロが実行されると、フラグtがONになる。なお、t1=1P_A2-1-P_A2=0となり、t1の値は変化しない。このように、正常な順序でプログラムが実行されている場合には、|t1-t2|絶対値が常に1となり、評価処理にてエッジ信号が出力される状態となる。次に、図6は異常時において記憶領域15内の各値の遷移状態を示す説明図である。図6では、関数定義C2の実行後、B1末尾マクロ実行前に、誤ってC1末尾マクロが実行されたものとして説明する。図6に示すように、図5と同様に、C2末尾マクロが終了するまでは、|t1-t2|絶対値が常に1となっている。しかし、C2末尾マクロの次にC1末尾マクロが実行されると、t2=2P_B1-1-P_C1=1P_B1-P_C1、となり、前述の条件より、|1-P_B1P_C1|が1でないので、|t1-t2|が1でなくなる。よって、評価処理にてエッジ信号が出力されない状態となる。[本実施形態による効果]以上のように詳述した実行状況監視装置1において、処理実行装置10のCPU11は、メインプログラム13の一部の処理として、予め第1の記録領域に記録された第1の値および予め第2の記録領域に記録された第2の値のうちの直近の時刻に更新された値との対応関係が所定条件を満たすための第1の操作を行うことで求められる値である第1新値に、第1の値および第2の値のうちの直近の時刻に更新されていない値を更新し、第1新値に対して第2の操作を行うことで得られる操作値を生成する。そして、正常な順序でこのメインプログラム13が実施される場合にCPU11による処理の後でCPU11が更新していない第1の値または第2の値を更新する処理であって、操作値に対して第1の操作および第2の操作を相殺する操作を行うことで求められる値である第2新値に、第1の値および第2の値のうちの直近の時刻に更新されていない値を更新する。さらに、CPU11は、メインプログラム13とは別の監視プログラム14において、第1の値と第2の値との対応関係が所定の関係になっているか否かを繰り返し判定し、この判定結果に応じた出力を行う。このような処理実行装置10によれば、第1の数値と第2の数値との関係を監視することでプログラムの実行状況を判定することができる。また、この判定の際には、第1の値、第2の値、および操作値を記録する記録領域を備えておけばよいので、実行された命令等を記録した表を準備する構成と比較して、少ない記録領域でプログラムが正常に実行されているか否かを監視することができる。また、処理実行装置10においてCPU11は、メインプログラム13における各関数定義において、関数定義の前半部分において第1新値を演算し、関数定義の後半部分において第2新値を演算する。特に、CPU11は、第1新値に対して各関数定義特有の第2の操作を行うことで操作値を生成し、既に読み出された操作値を除く操作値のうちの最新のものを読み出し、該操作値に対して、この関数定義特有の第2の操作および第1の操作を相殺する操作を行うことで第2新値を演算する。このような処理実行装置10によれば、関数定義毎に異なる操作値を生成し、関数定義毎に異なる第2の操作を相殺する操作を行うので、プログラムの実行順序に誤りが生じると、第2の操作を相殺することができなくなる。この結果、プログラムの実行順序に誤りが生じると、第1の値と第2の値との対応関係が変化する可能性が高くなるため、関数定義内のプログラムが正常に作動したか否かを確認することができる。また、処理実行装置10においてCPU11は、第1の値と第2の値との対応関係が所定の関係になっていない場合の出力として、メインプログラム13を実行する処理をリセットさせる信号を出力する。このような処理実行装置10によれば、第1の値と第2の値との対応関係が所定の関係になっていない状態、つまり、プログラム実行状況に異常がある場合に、メインプログラム13を実行する処理をリセットさせることができる。[その他の実施形態]本発明の実施の形態は、上記の実施形態に何ら限定されることはなく、本発明の技術的範囲に属する限り種々の形態を採りうる。例えば、上記実施形態においては、第1の操作としてt1またはt2に1を加算し、第2の操作としてt1またはt2にPを加算したが、任意の値を加減算、或いは乗除算等の任意の演算をするようにしてもよい。また、第1の値と第2の値との対応関係を検査する際には、評価処理にて、これら任意の演算に対応した対応関係になっているか否かを検査すればよい。例えば、第1の操作としてt1またはt2に2を乗じる場合、評価処理では、t1がt2の2倍または0.5倍になっているか否かを検査すればよい。"