(57)【要約】      （修正有）【課題】簡易な構成でプログラムの異常動作を判定できる演算処理装置を提供する。【解決手段】メモリ４は、実行対象である複数の演算モジュールと識別値とを対応付けて記憶する演算モジュール管理テーブル４２と、識別値スタック保持領域４３と、を備える。乗算値スタック格納部２２は、識別値のすべてを乗算した値を識別値スタック保持領域４３に格納する。プログラム実行部２１が、所定の演算モジュールを実行したときに、当該演算モジュールに対応付いた識別値を使って識別値スタック保持領域４３の値を除算し、除算値スタック格納部２３がこの商を識別値スタック保持領域４３に上書き格納する。判定部２４が演算モジュールに対応付いた識別値を使って識別値スタック保持領域４３の値を除算したとき割り切れるか否かを判定する。【選択図】図１
2012058805.tif 000002
【特許請求の範囲】
【請求項１】
ＣＰＵとメモリとからなる演算処理装置において、
前記メモリは、
複数の演算モジュールに予め分割された前記ＣＰＵが処理する演算を保持する演算モジュール保持領域と、
複数の前記演算モジュールごとに予め付与された識別値（ただし、識別値は０以外の数）を保持する識別値保持領域と、
識別値スタック保持領域保持領域と、
を備え、
前記ＣＰＵは、
前記スタック保持領域に前記識別値のすべてを乗算した乗算値を格納する乗算値スタック格納部と、
前記複数の演算モジュールごとにそれぞれ保持された演算を所定の順で実行するプログラム実行部と、
このプログラム実行部で前記演算を実行したとき、当該演算が保持された演算モジュールに付与された識別値を使って前記識別値スタック保持領域保持領域に格納された値を除算して割り切れるか否かを判定する判定部と、
前記除算して得られた商を前記識別値スタック保持領域保持領域に上書きして格納させる除算値スタック格納部と、
を備えることを特徴とする演算処理装置。
【請求項２】
前記識別値は、前記複数の演算モジュールごとに異なる素数であることを特徴とする請求項１に記載の演算処理装置。
【請求項３】
前記判定部は、前記演算モジュールに付与された識別値を使って前記識別値スタック保持領域保持領域に格納された値を除算して、割り切れるときは正常動作と判定し、割り切れないときは異常動作と判定する、ことを特徴とする請求項１または２に記載の演算処理装置。
【請求項４】
前記判定部は、前記プログラム実行部が複数あるうちの最後に実行される演算モジュールに保持された演算を実行し、
当該最後に実行される演算モジュールに付与された識別値を使って前記識別値スタック保持領域保持領域の値を除算した商が初期値の場合は、すべての演算モジュールに保持された演算が正常に実行されたと判定し、
当該最後に実行される演算モジュールに付与された識別値を使って前記識別値スタック保持領域保持領域の値を除算した商が初期値でない場合は、複数の演算モジュールに保持された演算のうち少なくとも１つの演算が正常に実行されなかったと判定する、
ことを特徴とする請求項１〜３のいずれか１項に記載の演算処理装置。
【請求項５】
複数の演算モジュールごとにそれぞれ保持された演算を実行するＣＰＵと、識別値スタック保持領域保持領域と複数の前記演算モジュールごとに予め付与された識別値（ただし、識別値は０以外の数）を保持する識別値保持領域とを有するメモリと、からなる演算処理装置の演算処理方法において、
前記ＣＰＵが、前記識別値のすべてを乗算した乗算値を前記識別値スタック保持領域保持領域に格納するステップと、
前記ＣＰＵが、所定の演算モジュールに保持された演算を実行したときに、当該演算モジュールに付与された識別値を使って前記識別値スタック保持領域保持領域の値を除算するステップと、
前記ＣＰＵが、前記除算したときに割り切れるか否かを判定するステップと、
を有することを特徴とする演算処理方法。
【請求項６】
前記ＣＰＵが、前記除算したときの商を前記識別値スタック保持領域領域に上書きして格納するステップと、
前記ＣＰＵが、複数あるうちの最後に実行される演算モジュールに保持された演算を実行し、当該最後に実行される演算モジュールに付与された識別値を使って前記識別値スタック保持領域保持領域の値を除算した商が初期値の場合は、すべての演算モジュールに保持された演算が正常に実行されたと判定し、当該最後に実行される演算モジュールに付与された識別値を使って前記識別値スタック保持領域保持領域の値を除算した商が初期値でない場合は、複数の演算モジュールに保持された演算のうち少なくとも１つの演算が正常に実行されなかったと判定するステップと、
を有することを特徴とする請求項５に記載の演算処理方法。
【発明の詳細な説明】
【技術分野】
【０００１】
本発明は、演算処理装置、および演算処理方法に関する。
【背景技術】
【０００２】
演算処理装置において、プログラムが異常に動作することを判定する従来技術として、特許文献１がある。この文献には、分岐検知回路と分岐先アドレス比較回路を使い、プログラム処理が正常に遷移したかどうかを判定する演算処理装置が開示されている。
【先行技術文献】
【特許文献】
【０００３】
【特許文献１】特開平１０−６３５４１号公報
【発明の概要】
【発明が解決しようとする課題】
【０００４】
しかしながら、特許文献１の技術は、プログラムの異常動作を判定する回路を追加する必要があり、演算処理装置の構成が複雑であった。
本発明は、上記課題を解決するためになされたもので、簡易な構成でプログラムの異常動作を判定する演算処理装置、およびこの演算処理装置を処理する演算処理方法を提供することを目的とする。
【課題を解決するための手段】
【０００５】
上記課題を解決するために、本発明は、
ＣＰＵとメモリとからなる演算処理装置において、
前記メモリは、
複数の演算モジュールに予め分割された前記ＣＰＵが処理する演算を保持する演算モジュール保持領域と、
複数の前記演算モジュールごとに予め付与された識別値（ただし、識別値は０以外の数）を保持する識別値保持領域と、
識別値スタック保持領域と、
を備え、
前記ＣＰＵは、
前記スタック保持領域に前記識別値のすべてを乗算した乗算値を格納する乗算値スタック格納部と、
前記複数の演算モジュールごとにそれぞれ保持された演算を所定の順で実行するプログラム実行部と、
このプログラム実行部で前記演算を実行したとき、当該演算が保持された演算モジュールに付与された識別値を使って前記識別値スタック保持領域に格納された値を除算して割り切れるか否かを判定する判定部と、
前記除算して得られた商を前記識別値スタック保持領域に上書きして格納させる除算値スタック格納部と、
を備えることを特徴とする。
【発明の効果】
【０００６】
本発明の演算処理装置およびこの演算処理装置を処理する演算処理方法によれば、簡易な構成でプログラムの異常動作を判定できる。
【図面の簡単な説明】
【０００７】
【図１】本発明の演算処理装置の一構成例を示す図である。
【図２】本発明の演算モジュール管理テーブルの一例を示す図である。
【図３】本発明の演算処理装置の処理フローを示す図である。
【発明を実施するための形態】
【０００８】
添付図面を適宜参照しながら、本発明にかかる演算処理装置の好適な実施形態について説明する。
図１は、本発明の演算処理装置の一構成例を示す図である。
【０００９】
演算処理装置１は、ＣＰＵ２、ＣＰＵ２へＣＰＵを動作するクロック信号を与えるクロック３、メモリ４、およびＣＰＵ２とメモリ４を接続するバス５から構成される。
メモリ４は、ＣＰＵ２が演算処理する複数の演算モジュールを保持する演算モジュール保持領域４１と、演算モジュールごとに予め付与された識別値とを対応付けて記憶（保持）する演算モジュール管理テーブル４２と、１つの値を格納する領域を持つ識別値スタック保持領域４３と、を備える。
【００１０】
演算モジュール保持領域４１は、ＣＰＵ２が実行処理する演算を予め複数に分割した演算プログラムを保持している。
演算モジュール管理テーブル４２が、各々の演算モジュールに対応付けて記憶する識別値は、０以外の数値であり、この数値は演算モジュールごとに異なる素数であることが望ましい。識別値は除算に利用するため、０以外の数値を設定する。
【００１１】
演算モジュール保持領域４１・演算モジュール管理テーブル４２・識別値スタック保持領域４３を有するメモリ４は、１つのハードウェアで構成してもよく、複数のハードウェアで構成してもよい。
【００１２】
ＣＰＵ２は、プログラム実行部２１と、乗算値スタック格納部２２と、除算値スタック格納部２３と、判定部２４と、を備える。
プログラム実行部２１は、演算を実行する対象となる複数の演算モジュールを所定の順序で実行する。演算モジュールを実行する順序は、適宜定めることができ、たとえば演算モジュールに付した番号の順に実行する。
【００１３】
乗算値スタック格納部２２は、プログラム実行部２１が演算モジュールを実行する前に、次の処理を行う。まず、乗算値スタック格納部２２は、識別値スタック保持領域４３を“１”に初期化する。次いで、乗算値スタック格納部２２は、演算モジュール管理テーブル４２を参照して、演算を実行する対象となる複数の演算モジュールに対応付いた識別値を読み出す。そして、乗算値スタック格納部２２は、これら読み出した識別値のすべてを乗算して得た乗算値を、識別値スタック保持領域４３に上書きして格納する。
【００１４】
除算値スタック格納部２３は、プログラム実行部２１で所定の演算モジュールを実行したときに、演算モジュール管理テーブル４２を参照して、この所定の演算モジュールに対応付いた識別値を読み出す。除算値スタック格納部２３は、この読み出した識別値を使って識別値スタック保持領域４３に格納されている値を除算する。除算値スタック格納部２３は、識別値スタック保持領域４３に格納されている値を除算して得た商を、識別値スタック保持領域４３に上書きして格納する。除算値スタック格納部２３は、プログラム実行部２１が所定の演算モジュールを実行するごとに、上述の処理を繰り返し行う。
【００１５】
識別値スタック保持領域４３に格納されている値は、初期値が、乗算値スタック格納部２２が演算を実行する対象となる複数の演算モジュールに対応付いた識別値のすべてを乗算して得た値であり、以降は、除算値スタック格納部２３が除算して得た商が代入される。
【００１６】
判定部２４は、除算値スタック格納部２３が演算モジュールに対応付いた識別値を使って識別値スタック保持領域４３の値を除算したときに、割り切れるか否かを判定する。
判定部２４は、演算モジュールに対応付いた識別値を使って識別値スタック保持領域４３の値を除算して割り切れないとき、異常動作であると判定し、異常動作であることを図示しないモニタなどに通知する。判定部２４は、識別値スタック保持領域４３の値を除算して割り切れたとき、正常動作であると判定する。
【００１７】
また、判定部４２は、プログラム実行部が実行を予定している複数あるうちの最後の演算モジュールを実行し、この最後の演算モジュールに対応付いた識別値の値を使って識別値スタック保持領域４３の値を除算した商が“１”の場合は、すべての演算モジュールが正常に動作したと判定する。判定部４２は、最後の演算モジュールに対応付いた識別値の値を使って識別値スタック保持領域４３の値を除算した商が“１”でない場合は、複数の演算モジュールのうち少なくとも１つの演算モジュールが正常に動作しなかったと判定し、異常動作であることを図示しないモニタなどに通知する。
【００１８】
判定部２４が、除算値スタック格納部２３が演算モジュールに対応付いた識別値を使って識別値スタック保持領域４３の値を除算したときに割り切れるか否かで、正常動作か異常動作かを判定できる理由を説明する。
【００１９】
乗算値スタック格納部２２は、演算を実行する対象となる、すなわち演算の実行を予定している複数の演算モジュールに対応付いた識別値のすべてを乗算した乗算値を、識別値スタック保持領域４３に格納する。一方、除算値スタック格納部２３は、乗算値スタック格納部２２が識別値スタック保持領域４３に格納した値を、演算を実行する対象となるいずれかの演算モジュールに対応付いた識別値の値で除算する。
【００２０】
よって、プログラム実行部２１が、演算の実行を予定しているいずれか演算モジュールを実行し、除算値スタック格納部２３が、この演算モジュールに対応付いた識別値で識別値スタック保持領域４３に格納した値を除算したとしても、正常な動作、つまり想定内の処理である限り、割り切れる。除算値スタック格納部２３が除算して割り切れない場合は、プログラム実行部２１が予定外の演算モジュールを実行したことを示し、異常な動作、つまり想定外の処理と判定できる。
【００２１】
なお、演算モジュール管理テーブル４２が、各々の演算モジュールに対応付けて記憶する識別値を、演算モジュールごとに互いに異なる素数とすると、判定部２４が正常動作と異常動作のどちらであるかを判定する精度を高められる。
【００２２】
たとえば、演算の実行を予定している演算モジュール１に対応付いた識別値＝“６”とし、演算の実行を予定していない演算モジュール４に対応付いた識別値＝“３”とする場合を考える。このとき、乗算値スタック格納部２２が識別値スタック保持領域４３に格納した値は、“６”の倍数となっている。ここで、プログラム実行部２１が、ノイズ等の不当なイベントにより、演算の実行を予定している演算モジュール１を実行せず、代わりに、演算の実行を予定していない演算モジュール４を実行する、という異常動作が起こったとする。しかしながら、識別値スタック保持領域４３に格納した値は“６”の倍数となっており、演算モジュール４に対応付いた識別値＝“３”で割り切れるので、判定部２４が異常動作だと判定できない恐れが生じる。このような、演算モジュールに対応付いた識別値が倍数の関係にあることで生じる判定漏れは、演算モジュールごとに識別値を異なる素数とすれば防ぐことができる。
【００２３】
判定部２４が、プログラム実行部２１が実行を予定している複数あるうちの最後の演算モジュールを実行し、この最後の演算モジュールに対応付いた識別値を使って識別値スタック保持領域４３の値を除算した商が１であるか否かで、正常動作か異常動作かを判定できる理由を説明する。
【００２４】
乗算値スタック格納部２２は、演算を実行する対象となる、すなわち演算の実行を予定している複数の演算モジュールに対応付いた識別値のすべてを乗算した乗算値を、識別値スタック保持領域４３に格納する。一方、除算値スタック格納部２３は、乗算値スタック格納部２２が識別値スタック保持領域４３に格納した値を、演算を実行する対象となるいずれかの演算モジュールに対応付いた識別値で除算する。
【００２５】
よって、プログラム実行部２１が、演算の実行を予定していたすべての演算モジュールを実行し、乗算値スタック格納部２２が識別値スタック保持領域４３に格納した値を、除算値スタック格納部２３が、すべての演算モジュールに対応付いた識別値の値で除算すれば、除算したときの商は初期値である“１”になる。したがって、演算の実行を予定していた最後の演算モジュールを実行し、この最後の演算モジュールに対応付いた識別値の値で除算したときの商が“１”であれば、すべての演算モジュールは正常に処理されたと判定できる。反対に、商が“１”でない場合は、プログラム実行部２１が予定外の演算モジュールを実行したことを示すので、異常な動作、つまり想定外の処理と判定できる。
【００２６】
以上のように、本発明の演算処理装置、およびこの演算処理装置を処理する演算処理方法によれば、プログラムの異常動作を判定する回路が不要で、簡易な構成でプログラムの異常動作を判定することができる。特に、識別値スタック保持領域４３は、１つの値を格納する領域を持てばよいので、メモリの使用量を小さくしながらプログラムの異常動作を判定することができる、という効果がある。
【００２７】
図２は、メモリ４内にある演算モジュール管理テーブル４２の一例を示す図である。
演算モジュール管理テーブル４２は、演算モジュールのモジュール番号４２１と、このモジュール番号４２１のそれぞれと対応付けて、識別値４２２・実行フラグ４２３・実行順序４２４とを記憶している。
【００２８】
識別値４２２は、複数の演算モジュールごとにあらかじめ付与された識別値を保持する識別値保持領域である。識別値４２２は、ＣＰＵ２の乗算値スタック格納部２２が乗算するとき、およびＣＰＵ２の除算値スタック格納部２３が除算するときに利用する０以外の数値が設定されている。この数値は、演算モジュール番号ごとに互いに異なる数、望ましくはモジュール番号ごとに互いに異なる素数を設定する。識別値４２２は、演算処理を行う前にあらかじめ設定する。
【００２９】
実行フラグ４２３は、複数ある演算モジュールのうち、どの演算モジュールを実行するかを示すものであり、演算を実行する対象である複数の演算モジュールを設定する。演算を実行する演算モジュール番号に対して、実行フラグ４２３を“１”と設定する。本実施例では、演算モジュール１〜３は演算を実行する対象として実行フラグ４２３を“１”に設定し、演算モジュール４は演算を実行しない対象として実行フラグ４２３を“０”に設定している。実行フラグ４２３は、演算処理を行う前にあらかじめ設定する。ＣＰＵ２のプログラム実行部２１は、実行フラグ４２３を参照して、演算を実行する対象となる複数の演算モジュールを認識する。
【００３０】
実行順序４２４は、演算モジュール１〜３の演算を実行する順序を示すものである。本実施例では、演算モジュール１の実行順序は“１”、演算モジュール２の実行順序は“２”、演算モジュール３の実行順序は“３”と設定している。演算モジュール４は、演算を実行しない対象として実行フラグ４２３を“０”に設定しているので、演算モジュール４の実行順序は特に設定していない。実行順序４２４は、演算処理を行う前にあらかじめ設定する。ＣＰＵ２のプログラム実行部２１は、実行順序４２４を参照して、演算を実行する対象となる複数の演算モジュールをどの順序で実行するかを認識する。
【００３１】
図３は、演算処理装置１の処理フローを示す図である。以下、図３の処理フローを、図２の演算モジュール管理テーブル４２に設定した各種の値を使う形で説明する。
＜正常動作時＞
乗算値スタック格納部２２は、プログラム実行部２１が演算モジュールの演算を実行する前に、識別値スタック保持領域４３を“１”に初期化する（ステップＳ１）。
【００３２】
乗算値スタック格納部２２は、演算モジュール管理テーブル４２を参照して、演算を実行する対象となる、すなわち実行フラグ４２３を“１”に設定している複数の演算モジュールに付与された識別値を読み出す。そして、乗算値スタック格納部２２は、これら読み出した識別値のすべてを乗算して得た乗算値を、識別値スタック保持領域４３に上書きして格納する（ステップＳ２）。
【００３３】
図２の例では、乗算値スタック格納部２２は、演算モジュール１〜３が演算を実行する対象なので、これらの演算モジュールに対応付いた識別値“３”・“５”・“７”を読み出す。そして、乗算値スタック格納部２２は、これら読み出した識別値のすべてを乗算して得た値＝“３”×“５”×“７”＝“１０５”を、識別値スタック保持領域４３に上書きして格納する。
【００３４】
プログラム実行部２１は、図２における実行順序４２４を参照して、実行順序ｉ＝１番目である演算モジュール１を実行する（ステップＳ３）。
除算値スタック格納部２３は、プログラム実行部２１が実行した演算モジュール１に対応付いた識別値“３”を読み出す。除算値スタック格納部２３は、この読み出した識別値の値“３”を使って、識別値スタック保持領域４３に格納されている値“１０５”を除算する（ステップＳ４）。
【００３５】
識別値スタック保持領域４３に格納されている値“１０５”を、演算モジュール１に対応付いた識別値“３”で除算すると、割り切れる、すなわち剰余が生じない（ステップＳ５，Ｎｏ）。よって、判定部２４は正常動作であると判定する。そして、除算値スタック格納部２３は、除算して得た商“３５”を、識別値スタック保持領域４３に上書きして格納する（ステップＳ６）。
【００３６】
図２の実行順序４２４を参照すると、最後に実行する演算モジュールは演算モジュール３なのに対し、先ほど処理した演算モジュールは演算モジュール１である。よって、演算モジュール１は最後の演算モジュールではないので（ステップＳ７，Ｎｏ）、実行順序を１つだけインクリメントして（ステップＳ９）、ステップＳ３へ戻る。
【００３７】
プログラム実行部２１は、図２における実行順序４１４を参照して、実行順序ｉ＝２番目である演算モジュール２を実行する（ステップＳ３）。
除算値スタック格納部２３は、演算モジュール２に対応付いた識別値の値“５”を使って、識別値スタック保持領域４３に格納されている値“１３５”を除算する（ステップＳ４）。
【００３８】
識別値スタック保持領域４３に格納されている値“３５”を、演算モジュール２に対応付いた識別値“５”で除算すると、剰余が生じない（ステップＳ５，Ｎｏ）。よって、判定部２４は正常動作であると判定し、除算値スタック格納部２３は、除算して得た商“７”を、識別値スタック保持領域４３に上書きして格納する（ステップＳ６）。
【００３９】
図２の実行順序４２４を参照すると、演算モジュール２は最後の演算モジュールではないので（ステップＳ７，Ｎｏ）、実行順序を１つだけインクリメントして（ステップＳ９）、ステップＳ３へ戻る。
【００４０】
プログラム実行部２１は、図２における実行順序４２４を参照して、実行順序ｉ＝３番目である演算モジュール３を実行する（ステップＳ３）。
除算値スタック格納部２３は、演算モジュール３に対応付いた識別値の値“７”を使って、識別値スタック保持領域４３に格納されている値“７”を除算する（ステップＳ４）。
【００４１】
識別値スタック保持領域４３に格納されている値“７”を、演算モジュール３に対応付いた識別値“７”で除算すると、剰余が生じない（ステップＳ５，Ｎｏ）。よって、判定部２４は正常動作であると判定し、除算値スタック格納部２３は、除算して得た商“１”を、識別値スタック保持領域４３に上書きして格納する（ステップＳ６）。
【００４２】
図２の実行順序４２４を参照すると、演算モジュール３は最後に実行する演算モジュールなので（ステップＳ７，Ｙｅｓ）、次のステップＳ８に処理を進める。
ステップＳ６で識別値スタック保持領域４３に格納された値は初期値である“１”なので、判定部２４はすべての演算モジュールが正常に動作して処理されたと判定し（ステップＳ８）、そのまま演算処理装置１は処理を終了する。
【００４３】
＜異常動作例１＞
ステップＳ５において“剰余あり（ステップＳ５，Ｙｅｓ）”のため、演算処理装置１が異常に動作した、と判定部２４が判定する場合の異常動作例を述べる。
【００４４】
乗算値スタック格納部２２は、プログラム実行部２１が演算モジュールの演算を実行する前に、識別値スタック保持領域４３を“１”に初期化する（ステップＳ１）。乗算値スタック格納部２２は、演算モジュール１〜３に対応付いた識別値“３”・“５”・“７”を乗算して得た値＝“３”×“５”×“７”＝“１０５”を、識別値スタック保持領域４３に上書きして格納する（ステップＳ２）。
【００４５】
ここで、プログラム実行部２１が、ノイズ等の不当なイベントにより、実行を予定していない演算モジュール４を実行したとする（ステップＳ３）。
除算値スタック格納部２３は、プログラム実行部２１が実行した演算モジュール４に対応付いた識別値“１１”を読み出す。除算値スタック格納部２３は、この読み出した識別値の値“１１”を使って、識別値スタック保持領域４３に格納されている値“１０５”を除算する（ステップＳ４）。
【００４６】
識別値スタック保持領域４３に格納されている値“１０５”を、演算モジュール４に対応付いた識別値“１１”で除算すると、剰余が生じる（ステップＳ５，Ｙｅｓ）。よって、判定部２４は異常動作であると判定し、異常動作である旨を図示しないモニタなどに通知し（ステップＳ１０）、演算処理装置１は処理を終了する。
【００４７】
このように、識別値スタック保持領域４３の値を、プログラム実行部２１が実行した演算モジュールに対応付いた識別値で除算したときの剰余の有無をみれば、演算処理装置１が異常動作したかどうかを判定できる。
【００４８】
＜異常動作例２＞
ステップＳ８において“識別値スタック保持領域の値が“１”でない（ステップＳ８，Ｎｏ）”ため、演算処理装置１が異常に動作した、と判定部２４が判定する場合の異常動作例を述べる。
【００４９】
乗算値スタック格納部２２は、プログラム実行部２１が演算モジュールの演算を実行する前に、識別値スタック保持領域４３を“１”に初期化する（ステップＳ１）。
ここで、乗算値スタック格納部２２は、図２の例では、演算を実行する対象である演算モジュール１〜３に対応付いた識別値のみを読み出すべきところを、ノイズ等の不当なイベントにより、実行を予定していない演算モジュール４に対応付いた識別値“１１”を加えて読み出したとする。よって、乗算値スタック格納部２２は、読み出した識別値のすべてを乗算して得た値＝“３”×“５”×“７” ×“１１”＝“１１５５”を、識別値スタック保持領域４３に上書きして格納する。（ステップＳ２）。
【００５０】
プログラム実行部２１は、図２における実行順序４２４を参照して、実行順序ｉ＝１番目である演算モジュール１を実行する（ステップＳ３）。
除算値スタック格納部２３は、演算モジュール１に対応付いた識別値“３”を使って、識別値スタック保持領域４３に格納されている値“１１５５”を除算する（ステップＳ４）。
【００５１】
識別値スタック保持領域４３に格納されている値“１１５５”を、演算モジュール１に対応付いた識別値“３”で除算すると、剰余が生じない（ステップＳ５，Ｎｏ）。よって、判定部２４は正常動作であると判定し、除算値スタック格納部２３は、除算して得た商“３８５”を、識別値スタック保持領域４３に上書きして格納する（ステップＳ６）。
【００５２】
図２の実行順序４２４を参照すると、演算モジュール１は最後に実行する演算モジュールではないので（ステップＳ７，Ｎｏ）、実行順序を１つだけインクリメントして（ステップＳ９）、ステップＳ３へ戻る。
【００５３】
プログラム実行部２１は、図２における実行順序４２４を参照して、実行順序ｉ＝２番目である演算モジュール２を実行する（ステップＳ３）。
除算値スタック格納部２３は、演算モジュール２に対応付いた識別値の値“５”を使って、識別値スタック保持領域４３に格納されている値“３８５”を除算する（ステップＳ４）。
【００５４】
識別値スタック保持領域４３に格納されている値“３８５”を、演算モジュール２に対応付いた識別値“５”で除算すると、剰余が生じない（ステップＳ５，Ｎｏ）。よって、判定部２４は正常動作であると判定し、除算値スタック格納部２３は、除算して得た商“７７”を、識別値スタック保持領域４３に上書きして格納する（ステップＳ６）。
【００５５】
図２の実行順序４２４を参照すると、演算モジュール２は最後に実行される演算モジュールではないので（ステップＳ７，Ｎｏ）、実行順序を１つだけインクリメントして（ステップＳ９）、ステップＳ３へ戻る。
【００５６】
プログラム実行部２１は、図２における実行順序４２４を参照して、実行順序ｉ＝３番目である演算モジュール３を実行する（ステップＳ３）。
除算値スタック格納部２３は、演算モジュール３に対応付いた識別値の値“７”を使って、識別値スタック保持領域４３に格納されている値“７７”を除算する（ステップＳ４）。
【００５７】
識別値スタック保持領域４３に格納されている値“７７”を、演算モジュール３に対応付いた識別値“７”で除算すると、剰余が生じない（ステップＳ５，Ｎｏ）。よって、判定部２４は正常動作であると判定し、除算値スタック格納部２３は、除算して得た商“１１”を、識別値スタック保持領域４３に上書きして格納する（ステップＳ６）。
【００５８】
図２の実行順序４２４を参照すると、演算モジュール３は最後の演算モジュールなので（ステップＳ７，Ｙｅｓ）、次のステップＳ８に処理を進める。
ステップＳ６で識別値スタック保持領域４３に格納された値は“１１”なので、判定部２４は演算モジュールが異常に動作したと判定し（ステップＳ８）、異常動作である旨を図示しないモニタなどに通知し（ステップＳ１０）、演算処理装置１は処理を終了する。
【００５９】
このように、乗算値スタック格納部２２が上書きして格納した識別値スタック保持領域４３の値を、プログラム実行部２１が実行した演算モジュールに対応付いた識別値で除算したときに剰余がなかった場合でも、すべての演算モジュールの実行が終了したときに格納されている識別値スタック保持領域４３の値をみることで、演算処理装置１が異常動作したかどうかを判定できる。
【００６０】
以上のように、本発明の演算処理装置、およびこの演算処理装置を処理する演算処理方法によれば、プログラムの異常動作を判定する回路が不要で、簡易な構成でプログラムの異常動作を判定することができる。特に、識別値スタック保持領域４３は、１つの値を格納する領域を持てばよいので、メモリの使用量を小さくしながらプログラムの異常動作を判定することができる、という効果がある。
【符号の説明】
【００６１】
１    演算処理装置
２    ＣＰＵ２
２１  プログラム実行部
２２  乗算値スタック格納部
２３  除算値スタック格納部
２４  判定部
３    クロック
４    メモリ
４１  演算モジュール保持領域
４２  演算モジュール管理テーブル
４３  識別値スタック保持領域
５    バス
【図１】
2012058805.tif 000003
【図２】
2012058805.tif 000004
【図３】
2012058805.tif 000005