(57)【要約】【課題】並列して実行される複数のプログラムが同期して実行されているか否かを判定可能な実行状態監視装置等を提供する。【解決手段】番号取得部４０１は、並列して実行される少なくとも２つのプログラムの各々から、少なくとも２つのプログラムが同期して実行されているか否かを確認するための同期位置に対応するポイント番号を取得する。判定部４０２は、取得された各ポイント番号が所定範囲内の値であるか否かを判定する。判定部４０２は、各ポイント番号が所定範囲内の値である場合、各ポイント番号に対応する各プログラムが同期して実行されていると判定し、各ポイント番号の少なくとも１つのポイント番号が所定範囲内の値でない場合、各ポイント番号に対応する各プログラムが同期して実行されていないと判定する。【選択図】図３
2011028458.tif 000002
【特許請求の範囲】
【請求項１】
並列して実行されるｍ（２以上整数）個のプログラムの実行状態を監視するための実行状態監視装置であって、
前記ｍ個のプログラムのうちの少なくとも２つのプログラムの各々には、該少なくとも２つのプログラムが同期して実行されているか否かを確認するための位置である同期位置にポイント番号が記述されており、
前記ｍ個のプログラムのうちの少なくとも２つのプログラムの各々から、前記同期位置に対応する前記ポイント番号を取得する番号取得部と、
前記番号取得部により取得された各前記ポイント番号が所定範囲内の値であるか否かを判定する判定部とを備え、
前記判定部は、さらに、各前記ポイント番号が前記所定範囲内の値である場合、各前記ポイント番号に対応する各プログラムが同期して実行されていると判定し、各前記ポイント番号の少なくとも１つのポイント番号が前記所定範囲内の値でない場合、各前記ポイント番号に対応する各プログラムが同期して実行されていないと判定する、
実行状態監視装置。
【請求項２】
ｍは、前記実行状態監視装置が監視可能なプログラムの最大数である最大並列度を示す、
請求項１に記載の実行状態監視装置。
【請求項３】
前記実行状態監視装置は、さらに、
各前記ポイント番号の少なくとも１つのポイント番号が前記所定範囲内の値でない場合、エラー信号を出力するエラー出力部を備える、
請求項１または２に記載の実行状態監視装置。
【請求項４】
前記実行状態監視装置は、さらに、
前記ポイント番号が取得された場合、該ポイント番号に対応するコードが実行されたことを示す実行情報を、プログラムに記述されたコードの実行状態を示す実行記録情報に記録する記録更新部を備える、
請求項１または２に記載の実行状態監視装置。
【請求項５】
前記実行状態監視装置は、さらに、
取得された前記ポイント番号に対応する前記実行情報が、前記実行記録情報に記録されている場合、エラー信号を出力するエラー出力部を備える、
請求項４に記載の実行状態監視装置。
【請求項６】
前記実行状態監視装置は、さらに、
前記所定範囲を特定するための値であるインデックス値を記憶するインデックス記憶部を備える、
請求項４に記載の実行状態監視装置。
【請求項７】
前記記録更新部は、さらに、所定の条件が満たされる場合、前記インデックス値と、前記実行記録情報とを更新する、
請求項６に記載の実行状態監視装置。
【請求項８】
前記所定の条件は、前記番号取得部がｍ個の前記ポイント番号を取得したという条件である、
請求項７に記載の実行状態監視装置。
【請求項９】
前記所定範囲は、前記インデックス値と、該インデックス値に（ｍ−１）を加算した値との範囲である、
請求項６〜８のいずれかに記載の実行状態監視装置。
【請求項１０】
前記実行記録情報に記録される前記実行情報は、前記ポイント番号から前記インデックス値を減算した値により特定される、
請求項６〜９のいずれかに記載の実行状態監視装置。
【請求項１１】
前記ｍ個のプログラムのうちの少なくとも２つのプログラムにおいて、各前記同期位置に対応するポイント番号は、グループ化される、
請求項１または２に記載の実行状態監視装置。
【請求項１２】
前記実行状態監視装置は、さらに、
グループ化された各前記ポイント番号のうち、値が最も大きいポイント番号を特定するための最終フラグを取得するフラグ取得部を備える、
請求項１１に記載の実行状態監視装置。
【請求項１３】
並列して実行されるｍ（２以上整数）個のプログラムの実行状態を監視するための実行状態監視装置が行う実行状態監視方法であって、
前記ｍ個のプログラムのうちの少なくとも２つのプログラムの各々には、該少なくとも２つのプログラムが同期して実行されているか否かを確認するための位置である同期位置にポイント番号が記述されており、
前記ｍ個のプログラムのうちの少なくとも２つのプログラムの各々から、前記同期位置に対応する前記ポイント番号を取得する番号取得ステップと、
前記番号取得ステップにより取得された各前記ポイント番号が所定範囲内の値であるか否かを判定する判定ステップと、
各前記ポイント番号が前記所定範囲内の値である場合、各前記ポイント番号に対応する各プログラムが同期して実行されていると判定し、各前記ポイント番号の少なくとも１つのポイント番号が前記所定範囲内の値でない場合、各前記ポイント番号に対応する各プログラムが同期して実行されていないと判定するステップと
を備える、実行状態監視方法。
【発明の詳細な説明】
【技術分野】
【０００１】
本発明は、複数のプログラムの実行状態を監視する実行状態監視装置および実行状態監視方法に関する。
【背景技術】
【０００２】
コンピュータにおけるプログラムの実行が正常であるか否かを監視する方式および方法が提案されている。
【０００３】
例えば、特許文献１には、以下の手法により、プログラムの実行が正常であるか否かを監視する。まず、プログラムの一つまたは複数の箇所に数値を示すコードを予め記述（挿入）しておく。そして、プログラムの実行中に実行位置が、コードが記述された箇所になった場合に、コードが示す第一の数値をカウンタにカウントさせる。そして、カウンタがカウントした数値と第二の値との差が所定の数値でない場合に、プログラムが正常に実行されていないと判別する。
【先行技術文献】
【特許文献】
【０００４】
【特許文献１】特開２００８−４０９７３号公報
【発明の概要】
【発明が解決しようとする課題】
【０００５】
最近では、マルチタスク等の技術により、複数のプログラムが並列して実行されることが一般的になりつつある。特許文献１に開示されている技術では、並列して実行される複数のプログラムが同期して実行されているか否かを判定することはできない。
【０００６】
本発明は、上述の問題点を解決するためになされたものであって、その目的は、並列して実行される複数のプログラムが同期して実行されているか否かを判定可能な実行状態監視装置等を提供することである。
【課題を解決するための手段】
【０００７】
上述の課題を解決するために、この発明のある局面に従う実行状態監視装置は、並列して実行されるｍ（２以上整数）個のプログラムの実行状態を監視するための装置である。ｍ個のプログラムのうちの少なくとも２つのプログラムの各々には、該少なくとも２つのプログラムが同期して実行されているか否かを確認するための位置である同期位置にポイント番号が記述されており、実行状態監視装置は、ｍ個のプログラムのうちの少なくとも２つのプログラムの各々から、同期位置に対応するポイント番号を取得する番号取得部と、番号取得部により取得された各ポイント番号が所定範囲内の値であるか否かを判定する判定部とを備え、判定部は、さらに、各ポイント番号が所定範囲内の値である場合、各ポイント番号に対応する各プログラムが同期して実行されていると判定し、各ポイント番号の少なくとも１つのポイント番号が所定範囲内の値でない場合、各ポイント番号に対応する各プログラムが同期して実行されていないと判定する。
【０００８】
すなわち、番号取得部は、並列して実行される少なくとも２つのプログラムの各々から、少なくとも２つのプログラムが同期して実行されているか否かを確認するための位置である同期位置に対応するポイント番号を取得する。判定部は、取得された各ポイント番号が所定範囲内の値であるか否かを判定する。判定部は、各ポイント番号が所定範囲内の値である場合、各ポイント番号に対応する各プログラムが同期して実行されていると判定し、各ポイント番号の少なくとも１つのポイント番号が所定範囲内の値でない場合、各ポイント番号に対応する各プログラムが同期して実行されていないと判定する。
【０００９】
したがって、並列して実行される複数のプログラムが同期して実行されているか否かを判定することができる。
【００１０】
また、ｍは、実行状態監視装置が監視可能なプログラムの最大数である最大並列度を示すことが好ましい。
【００１１】
また、実行状態監視装置は、さらに、各ポイント番号の少なくとも１つのポイント番号が所定範囲内の値でない場合、エラー信号を出力するエラー出力部を備えることが好ましい。
【００１２】
また、実行状態監視装置は、さらに、ポイント番号が取得された場合、該ポイント番号に対応するコードが実行されたことを示す実行情報を、プログラムに記述されたコードの実行状態を示す実行記録情報に記録する記録更新部を備えることが好ましい。
【００１３】
また、実行状態監視装置は、さらに、取得されたポイント番号に対応する実行情報が、実行記録情報に記録されている場合、エラー信号を出力するエラー出力部を備えることが好ましい。
【００１４】
これにより、複数のプログラムが同期して実行されていないことを認識することができる。
【００１５】
また、実行状態監視装置は、さらに、所定範囲を特定するための値であるインデックス値を記憶するインデックス記憶部を備えることが好ましい。
【００１６】
また、記録更新部は、さらに、所定の条件が満たされる場合、インデックス値と、実行記録情報とを更新することが好ましい。
【００１７】
また、所定の条件は、番号取得部がｍ個のポイント番号を取得したという条件であることが好ましい。
【００１８】
また、所定範囲は、インデックス値と、該インデックス値に（ｍ−１）を加算した値との範囲であることが好ましい。
【００１９】
また、実行記録情報に記録される実行情報は、ポイント番号からインデックス値を減算した値により特定されることが好ましい。
【００２０】
また、ｍ個のプログラムのうちの少なくとも２つのプログラムにおいて、各同期位置に対応するポイント番号は、グループ化されることが好ましい。
【００２１】
また、実行状態監視装置は、さらに、グループ化された各ポイント番号のうち、値が最も大きいポイント番号を特定するための最終フラグを取得するフラグ取得部を備えることが好ましい。
【００２２】
この発明の他の局面に従う実行状態監視方法は、並列して実行されるｍ（２以上整数）個のプログラムの実行状態を監視するための実行状態監視装置が行う。ｍ個のプログラムのうちの少なくとも２つのプログラムの各々には、該少なくとも２つのプログラムが同期して実行されているか否かを確認するための位置である同期位置にポイント番号が記述されており、実行状態監視方法は、ｍ個のプログラムのうちの少なくとも２つのプログラムの各々から、同期位置に対応するポイント番号を取得する番号取得ステップと、番号取得ステップにより取得された各ポイント番号が所定範囲内の値であるか否かを判定する判定ステップと、各ポイント番号が所定範囲内の値である場合、各ポイント番号に対応する各プログラムが同期して実行されていると判定し、各ポイント番号の少なくとも１つのポイント番号が所定範囲内の値でない場合、各ポイント番号に対応する各プログラムが同期して実行されていないと判定するステップとを備える。
【００２３】
なお、本発明は、このような実行状態監視装置を構成する複数の構成要素の全てまたは一部を、システムＬＳＩ（Large Scale Integration：大規模集積回路）として実現してもよい。
【００２４】
また、本発明は、このような実行状態監視方法として実現するだけでなく、このような実行状態監視方法に含まれる各ステップをコンピュータに実行させるプログラムとして実現してもよい。そして、そのようなプログラムを格納するコンピュータ読み取り可能な記録媒体として実現されてもよい。また、当該プログラムは、インターネット等の伝送媒体を介して配信されてもよい。
【発明の効果】
【００２５】
本発明により、並列して実行される複数のプログラムが同期して実行されているか否かを判定することができる。
【図面の簡単な説明】
【００２６】
【図１】第１の実施の形態における実行順序監視システムの構成を示す図である。
【図２】オペレーティングシステムにおいて実行されるプログラムの構成の一例を示す図である。
【図３】オンチップ・デバッグ回路の構成を示すブロック図である。
【図４】機械語で示されるポイントコードおよび最終ポイントコードを説明するための図である。
【図５】プログラムの監視を行うための処理のフローチャートである。
【図６】ポイントコード実行処理のフローチャートである。
【図７】各監視コードが実行された場合の各種値の変化を説明するための図である。
【図８】同期判定処理のフローチャートである。
【図９】第２の実施の形態における実行順序監視システムの外観を示す図である。
【図１０】オペレーティングシステムにおいて実行されるプログラムの構成の一例を示す図である。
【図１１】オンチップ・デバッグ回路の構成を示すブロック図である。
【図１２】プログラム監視処理のフローチャートである。
【図１３】各監視コードが実行された場合の各種値の変化を説明するための図である。
【発明を実施するための形態】
【００２７】
以下、図面を参照しつつ、本発明の実施の形態について説明する。以下の説明では、同一の部品には同一の符号を付してある。それらの名称および機能も同じである。したがって、それらについての詳細な説明は繰り返さない。
【００２８】
＜第１の実施の形態＞
（実行順序監視システムの構成）
図１は、第１の実施の形態における実行順序監視システム１０００の構成を示す図である。
【００２９】
図１を参照して、実行順序監視システム１０００は、ホストコンピュータ１２０と、デバッグユニット１３０と、ターゲットシステム１４０とを含む。
【００３０】
ホストコンピュータ１２０は、プログラマ等のユーザによってデバッグ作業が行われるコンピュータである。ホストコンピュータ１２０は、パーソナルコンピュータ等の一般的なコンピュータである。
【００３１】
ホストコンピュータ１２０は、デバッグユニット１３０を制御する。ホストコンピュータ１２０では、デバッガ１２１が実行される。
【００３２】
デバッグユニット１３０は、デバッグ用のハードウエアである。
【００３３】
ターゲットシステム１４０は、デバッグ対象となるシステムである。
【００３４】
ターゲットシステム１４０は、ＣＰＵ（Central Processing Unit）１４１と、ＲＡＭ（Random Access Memory）１４２と、ＲＯＭ（Read Only Memory）１４３と、周辺回路１４４と、記憶部１４５と、データバス１４９とを含む。
【００３５】
ＣＰＵ１４１、ＲＡＭ１４２、ＲＯＭ１４３、周辺回路１４４、記憶部１４５は、データバス１４９に接続されている。
【００３６】
記憶部１４５は、不揮発性のメモリである。記憶部１４５は、たとえば、ハードディスクドライブである。記憶部１４５には、図２に示されるオペレーティングシステム２１およびプログラムＰＧ［１］，ＰＧ［２］，ＰＧ［３］等が記憶される。すなわち、ターゲットシステム１４０には、オペレーティングシステム２１およびプログラムＰＧ［１］，ＰＧ［２］，ＰＧ［３］等がインストールされている。
【００３７】
以下においては、プログラムＰＧ［１］，ＰＧ［２］，ＰＧ［３］の各々を、単に、プログラムＰＧともいう。プログラムＰＧは、デバッグの対象とされるプログラム（以下、デバッグ対象プログラムという）である。
【００３８】
ＣＰＵ１４１は、デバッグインタフェース１４１Ａと、オンチップ・デバッグ回路１４１Ｂとを含む。
【００３９】
デバッグインタフェース１４１Ａは、デバッグユニット１３０とデータ通信するためのインタフェースである。
【００４０】
オンチップ・デバッグ回路１４１Ｂは、デバッグ機能を有する回路である。オンチップ・デバッグ回路１４１Ｂは、プログラムの実行状態を監視するための実行状態監視装置である。
【００４１】
ユーザは、ホストコンピュータ１２０で実行されるデバッガ１２１を使用して、ターゲットシステム１４０において実行されるデバッグ対象プログラムをデバッグするための操作を行う。
【００４２】
ＣＰＵ１４１は、オペレーティングシステム２１およびプログラムＰＧ［１］，ＰＧ［２］，ＰＧ［３］を実行する。プログラムＰＧ［１］，ＰＧ［２］，ＰＧ［３］は、オペレーティングシステム２１上で実行される。
【００４３】
オペレーティングシステム２１は、非常に短い時間（以下、プログラム実行時間という）の経過毎に、ＣＰＵ１４１が実行するプログラムＰＧを切替える。プログラム実行時間は、例えば、１０ミリ秒である。
【００４４】
すなわち、ＣＰＵ１４１は、プログラム実行時間の経過毎に、実行するプログラムを、例えば、プログラムＰＧ［１］，ＰＧ［２］，ＰＧ［３］の順に切替える。プログラム実行時間において、各プログラムＰＧの一部が実行される。
【００４５】
つまり、オペレーティングシステム２１は、ＣＰＵ１４１の処理時間を分割し、分割された処理時間を、各プログラムＰＧを実行する時間として、ＣＰＵ１４１に順番に割り当てることにより、複数のプログラムＰＧを同時に実行しているようにみせている。
【００４６】
（オンチップ・デバッグ回路の構成）
次に、オンチップ・デバッグ回路１４１Ｂの構成について説明する。
【００４７】
図３は、オンチップ・デバッグ回路１４１Ｂの構成を示すブロック図である。
【００４８】
図３を参照して、オンチップ・デバッグ回路１４１Ｂは、最大並列度レジスタ３０１と、インデックス更新部３０２と、インデックスレジスタ３０３と、実行記録更新部３０４と、実行記録レジスタ３０５と、切替え部３０６と、エラー出力部３０７と、番号取得部４０１と、判定部４０２と、フラグ取得部４０３とを含む。
【００４９】
最大並列度レジスタ３０１は、最大並列度ｍ（２以上の整数）を記憶する。最大並列度ｍは、オンチップ・デバッグ回路１４１Ｂが監視可能なプログラムの最大数である。本実施の形態では、最大並列度ｍは、一例として、３であるとする。
【００５０】
インデックスレジスタ３０３は、インデックス値ｋ（整数）を記憶する。インデックス値ｋの初期値は、０である。
【００５１】
実行記録レジスタ３０５は、実行記録情報ＭＪを記憶する。実行記録情報ＭＪは、プログラムＰＧに記述された監視コードの実行状態を示す情報である。実行記録情報ＭＪは、複数の実行情報ｊから構成される。実行情報ｊは、１ビットで示される情報である。すなわち、実行情報ｊは０または１を示す。実行記録情報ＭＪは、一例として、８個の実行情報ｊから構成される。すなわち、実行記録情報ＭＪは、８ビットで示される情報であるとする。
【００５２】
なお、実行記録情報ＭＪは、８個の実行情報ｊに限定されることなく、例えば、９個以上の実行情報ｊで構成されてもよい。
【００５３】
ターゲットシステム１４０がリセットされると、最大並列度レジスタ３０１、インデックスレジスタ３０３、実行記録レジスタ３０５に記憶されている各情報はリセットされ、当該各情報（例えば、インデックス値ｋ）は０を示す。
【００５４】
ＣＰＵ１４１がプログラムＰＧを実行する前に、ユーザは、デバッガ１２１からターゲットシステム１４０に実装されたオンチップ・デバッグ回路１４１Ｂの最大並列度レジスタ３０１に記憶されている最大並列度ｍを、定数値（例えば、３）に設定するための操作を行う。
【００５５】
（監視コードの説明）
デバッグ対象プログラムとしての各プログラムＰＧには、ＣＰＵ１４１が実行するための複数のコード（以下、実行コード）が記述されている。また、各プログラムＰＧには、該プログラムＰＧ内の１以上の位置に監視コードが予め記述されている（埋め込まれている）。監視コードは、各プログラムＰＧが、同期して実行されているか否かを監視するためのコードである。
【００５６】
本実施の形態では、監視コードとして、ポイントコードＣＤ［ｕ（整数）］および最終ポイントコードＥＮ［ｔ（整数）］が使用される。すなわち、本実施の形態では、監視コードとして、２種類のコードが使用される。
【００５７】
具体的には、図２に示すように、デバッグ対象プログラムとしての各プログラムＰＧには、同期位置に、監視コードとしてのポイントコードＣＤ［ｕ］または最終ポイントコードＥＮ［ｔ］が予め記述される。
【００５８】
各プログラムＰＧにおける当該同期位置は、少なくとも２つのプログラムＰＧが同期して（ほぼ同時に）実行されているか否かを確認するための位置である。各プログラムＰＧにおける同期位置に記述される監視コードは、同期グループＳＧ［ｖ（整数）］に属する。
【００５９】
同期グループＳＧ［ｖ］は、ｍ個のプログラムＰＧのうち、少なくとも２つのプログラムＰＧの同期を確認するための２以上の監視コードを含むグループである。以下においては、同期グループＳＧ［ｖ］を、単に、同期グループＳＧとも記載する。
【００６０】
同一の同期グループＳＧに含まれる複数の監視コードは、対応する各プログラムが正常に実行されている場合、ＣＰＵ１４１により、同期して（ほぼ同時に）実行される。
【００６１】
例えば、図２において、プログラムＰＧ［１］，ＰＧ［２］，ＰＧ［３］の各々が正常に実行されている場合、同期グループＳＧ［１］に含まれるポイントコードＣＤ［１］，ＣＤ［２］、最終ポイントコードＥＮ［１］は、同期して実行される。すなわち、同期グループＳＧ［１］に含まれる各コードは、プログラムＰＧ［１］，ＰＧ［２］，ＰＧ［３］が同期して実行しているか否かを確認するための監視コードである。
【００６２】
また、例えば、図２において、プログラムＰＧ［２］，ＰＧ［３］の各々が正常に実行されている場合、同期グループＳＧ［２］に含まれるポイントコードＣＤ［３］、最終ポイントコードＥＮ［２］は、同期して実行される。
【００６３】
以下においては、ポイントコードＣＤ［ｕ］および最終ポイントコードＥＮ［ｔ］を、それぞれ、単に、ポイントコードＣＤおよび最終ポイントコードＥＮとも記載する。
【００６４】
ポイントコードＣＤは、文字列「ｐｏｉｎｔ」と、ポイント番号ｐｎ［ｗ（整数）］とを示す。以下においては、ポイント番号ｐｎ［ｗ（整数）］を、単に、ポイント番号ｐｎとも記載する。また、最終ポイントコードＥＮは、文字列「ｅｐｏｉｎｔ」と、ポイント番号ｐｎとを示す。ポイントコードＣＤおよび最終ポイントコードＥＮを機械語で示す場合、以下のようになる。
【００６５】
図４は、機械語で示されるポイントコードＣＤおよび最終ポイントコードＥＮを説明するための図である。
【００６６】
図４（Ａ）は、機械語で示されるポイントコードＣＤを示す図である。図４（Ａ）を参照して、ポイントコードＣＤは、オペコード、最終フラグＦＧおよびポイント番号ｐｎを示す。ポイントコードＣＤの最終フラグＦＧには、０が設定される。
【００６７】
図４（Ｂ）は、機械語で示される最終ポイントコードＥＮを示す図である。図４（Ｂ）を参照して、最終ポイントコードＥＮは、オペコード、最終フラグＦＧおよびポイント番号ｐｎを示す。最終ポイントコードＥＮの最終フラグＦＧには、１が設定される。
【００６８】
監視コード（ポイントコードＣＤまたは最終ポイントコードＥＮ）が実行されると、当該監視コードが示すポイント番号ｐｎおよび最終フラグＦＧは、それぞれ、番号取得部４０１およびフラグ取得部４０３に入力される。
【００６９】
（監視コードの規則）
監視コードは以下のような規則に従って、各プログラムＰＧに記述される（埋め込まれる）とする。
【００７０】
（プログラムの実行順序を監視する場合）
プログラムＰＧの実行順序の監視対象となる位置（同期位置）に、監視コード（ポイントコードＣＤまたは最終ポイントコードＥＮ）が記述される。この場合、各監視コードが実行される順に、ポイント番号ｐｎが大きくなるように、各監視コードに対応するポイント番号ｐｎが設定される。
【００７１】
なお、同期グループＳＧに含まれる監視コードが一つの場合、各ポイント番号ｐｎは、最大並列度ｍの倍数のうち、使用されていない値の最小値が設定される。
【００７２】
例えば、最大並列度ｍが３である場合、実行される監視コードの順番に応じて、ポイント番号ｐｎが設定される。例えば、３つの監視コードが実行される場合、１，２，３番目の監視コードにそれぞれ対応する３つのポイント番号ｐｎは、それぞれ、“０”，“３”，“６”に設定される。
【００７３】
（複数のプログラムＰＧ間の同期を確認する場合）
複数のプログラムＰＧ間の同期を確認したい場合は、各プログラムＰＧにおける前述した同期位置に監視コード（ポイントコードＣＤまたは最終ポイントコードＥＮ）が記述（挿入）される。実行される各プログラムＰＧの同期を確認するための複数の監視コードは、グループ化される。グループ化される監視コードの数は、最大並列度ｍ以下に設定される。
【００７４】
例えば、図２において、ポイントコードＣＤ［１］，ＣＤ［２］、最終ポイントコードＥＮ［１］が、実行される各プログラムＰＧの同期を確認するための監視コードである場合、ポイントコードＣＤ［１］，ＣＤ［２］、最終ポイントコードＥＮ［１］は、グループ化される。すなわち、前述した同期グループＳＧ［１］に、ポイントコードＣＤ［１］，ＣＤ［２］、最終ポイントコードＥＮ［１］は含まれる。
【００７５】
同期グループＳＧに含まれる複数の監視コードにそれぞれ対応する複数のポイント番号ｐｎは、連続した整数である。当該同期グループＳＧに対応する複数のポイント番号ｐｎのうちの１つは、最大並列度ｍの倍数のうち、使用されていない値の最小値（以下、グループ最小値という）である。
【００７６】
この場合、当該同期グループＳＧに対応する複数のポイント番号ｐｎのうちグループ最小値以外のポイント番号ｐｎは、グループ最小値から１ずつ増加した値が設定される。
【００７７】
また、同期グループＳＧに含まれる複数の監視コードのうち、値が最も大きいポイント番号ｐｎを示す監視コードは、最終ポイントコードＥＮとされ、それ以外の監視コードは、ポイントコードＣＤとされる。
【００７８】
例えば、最大並列度ｍが３であり、同期グループＳＧのグループ最小値は０であるとする。この場合、例えば、図２の同期グループＳＧ［１］に含まれる監視コードとしてのポイントコードＣＤ［１］が示すポイント番号ｐｎ［１］が、グループ最小値“０”である。
【００７９】
この場合、例えば、図２において、同期グループＳＧ［１］に含まれる、監視コードとしてのポイントコードＣＤ［１］，ＣＤ［２］および最終ポイントコードＥＮ［１］にそれぞれ対応するポイント番号ｐｎ［１］，ｐｎ［２］，ｐｎ［３］は、それぞれ、“０”，“１”，“２”に設定される。
【００８０】
また、同期グループＳＧ［２］には、監視コードとしてのポイントコードＣＤ［３］および最終ポイントコードＥＮ［２］が含まれる。ポイントコードＣＤ［３］および最終ポイントコードＥＮ［２］にそれぞれ対応するポイント番号ｐｎ［４］，ｐｎ［５］は、それぞれ、“３”，“４”に設定される。
【００８１】
また、同期グループＳＧ［３］には、監視コードとしてのポイントコードＣＤ［４］および最終ポイントコードＥＮ［３］が含まれる。ポイントコードＣＤ［４］および最終ポイントコードＥＮ［３］にそれぞれ対応するポイント番号ｐｎ［６］，ｐｎ［７］は、それぞれ、“６”，“７”に設定される。
【００８２】
“１”を示す最終フラグＦＧを示す最終ポイントコードＥＮは、同期グループＳＧに含まれる複数の監視コードのうち、値が最も大きいポイント番号ｐｎを示す監視コードである。つまり、“１”を示す最終フラグＦＧは、同一の同期グループＳＧに含まれる複数の監視コードがそれぞれ示す複数のポイント番号のうち、値が最も大きいポイント番号を特定するフラグである。
【００８３】
すなわち、“０”または“１”を示す最終フラグＦＧは、同一の同期グループＳＧに含まれる複数の監視コードがそれぞれ示す複数のポイント番号のうち、値が最も大きいポイント番号を特定するためのフラグである。
【００８４】
各同期グループＳＧの複数の監視コードの実行順序は不問である。ある同期グループＳＧに含まれる全ての監視コードが実行されたとき、当該同期グループＳＧの実行は完了したとみなされる。その後、次の同期グループＳＧに含まれる監視コードが実行されることが期待される。
【００８５】
このように、同期グループＳＧの前後関係を確認することで、複数のプログラムＰＧ間の同期を確認する。前述した（プログラムの実行順序を監視する場合）の説明は、同期グループＳＧに含まれる監視コードが一つの場合である。
【００８６】
（監視方法の説明）
原則として、各プログラムＰＧの記述言語の規則に従って、各プログラムＰＧに記述されている複数のコードが、周知な技術により、順次実行される。
【００８７】
つまり、プログラムＰＧにおいて、ＣＰＵ１４１により実行されている位置のコードが監視コードでない場合は、従来通り、当該コードに基づく処理が実行される。以下においては、プログラムＰＧにおいて、ＣＰＵ１４１により実行されている位置のコードを、実行位置コードという。
【００８８】
ただし、実行位置コードが監視コード（ポイントコードＣＤまたは最終ポイントコードＥＮ）である場合、図５のフローチャートに基づいて、プログラムＰＧの監視を行うための処理が行われる。
【００８９】
以下においては、実行された１以上の監視コードのうち最新の監視コードを、最新実行済監視コードという。すなわち、最新実行済監視コードは、実行位置コードである。
【００９０】
まず、最大並列度ｍが０である場合（ステップＳ４１でＹＥＳ）、切替え部３０６は監視機能が無効であると判断するため何もしない。なお、ステップＳ４１において判定の対象となる値は、０に限定されず、他の値であってもよい。
【００９１】
最大並列度ｍが０でない場合（ステップＳ４１でＮＯ）、切替え部３０６は監視機能が有効であると判定し、番号取得部４０１が、最新実行済監視コードが示すポイント番号ｐｎを取得する（ステップＳ４１Ｎ）。番号取得部４０１は、取得したポイント番号ｐｎを、判定部４０２へ送信する。
【００９２】
また、フラグ取得部４０３は、最新実行済監視コードが示す最終フラグＦＧを取得する。なお、最終フラグＦＧは、前述したように、同一の同期グループＳＧに含まれる複数の監視コードがそれぞれ示す複数のポイント番号のうち、値が最も大きいポイント番号を特定するためのフラグである。
【００９３】
フラグ取得部４０３は、取得した最終フラグＦＧを、判定部４０２へ送信する。
【００９４】
その後、以下のポイントコード実行処理が行われる（ステップＳ４２）。
【００９５】
図６は、ポイントコード実行処理のフローチャートである。
【００９６】
なお、ポイントコード実行処理の各処理の詳細な処理は後述する。以下、ポイントコード実行処理の各処理を簡単に説明する。
【００９７】
まず、判定部４０２が、最新実行済監視コードが示すポイント番号ｐｎが、有効範囲内の値であるか否かを判定する（ステップＳ５０１）。ここで、有効範囲は、インデックス値ｋと、当該インデックス値ｋに（ｍ−１）を加算した値との範囲である。ｍは、最大並列度である。
【００９８】
例えば、インデックス値ｋが０であり、最大並列度ｍが３である場合、有効範囲は、０〜２の範囲となる。すなわち、有効範囲は、０以上かつ３未満の範囲である。
【００９９】
すなわち、最大並列度ｍおよびインデックス値ｋは、有効範囲を特定するための値である。
【０１００】
なお、当該有効範囲は、上記規定に限定されず、例えば、インデックス値ｋの代わりに他の値を用いた範囲であってもよい。ここで、ポイント番号ｐｎが、有効範囲内の値であるという条件を、ポイント範囲条件という。
【０１０１】
ポイント番号ｐｎが有効範囲内の値でない場合、判定部４０２が、ポイント範囲条件が満たされない旨を、エラー出力部３０７に通知する。この場合、エラー出力部３０７は、エラー信号を出力する（ステップＳ５１０）。
【０１０２】
ポイント番号ｐｎが有効範囲内の値である場合（ポイント範囲条件を満たす場合（ステップＳ５０１でＹＥＳ））、判定部４０２は、ポイント番号ｐｎからインデックス値ｋを減算することによりＩＤ番号Ｉｎ（整数）を算出する（ステップＳ５０２）。
【０１０３】
ここで、実行記録情報ＭＪを構成する複数のビット（実行情報ｊ）のうち、最新実行済監視コードに対応する、Ｉｎ番目の桁のビットが１である場合（ステップＳ５０３でＹＥＳ）、判定部４０２がその旨をエラー出力部３０７に通知し、エラー出力部３０７は、エラー信号を出力する（ステップＳ５１０）。
【０１０４】
詳細は後述するが、実行記録レジスタ３０５には、実行記録情報ＭＪが記憶される。前述したように、実行記録情報ＭＪは、８個の実行情報ｊから構成される。前述したように、実行記録情報ＭＪは８ビットで示される情報である。
【０１０５】
同期グループＳＧに含まれる１つの監視コードが実行された場合、当該監視コードに対応するビット（実行情報ｊ）は、１に設定される。これにより、当該監視コードが実行されたことが記録される。実行情報ｊが１を示す場合、当該実行情報ｊに対応する監視コードが実行されていることを示す。実行情報ｊが０を示す場合、当該実行情報ｊに対応する監視コードが実行されていないことを示す。
【０１０６】
つまり、実行された監視コードに対応するビット（実行情報ｊ）がすでに１である場合、当該監視コードが重複して実行されたことを意味するため、エラーであると判断される。
【０１０７】
ステップＳ５０３では、判定部４０２が、実行記録情報ＭＪにおける、最新実行済監視コードに対応するＩｎ番目の桁のビットが１であるか否かを判定する。
【０１０８】
ステップＳ５０４では、判定部４０２が、最新実行済監視コードが示す最終フラグＦＧが０であるか否かを判定する。
【０１０９】
最新実行済監視コードに対応するＩｎ番目の桁のビットが０であり（ステップＳ５０３でＮＯ）、かつ、最新実行済監視コードが示す最終フラグＦＧが０である場合（ステップＳ５０４でＹＥＳ）、実行記録更新部３０４は、実行記録情報ＭＪのＩｎ番目の桁のビット（実行情報ｊ）を１に設定する（ステップＳ５０５）。
【０１１０】
ステップＳ５０４の処理で判定される最終フラグＦＧが０である場合、最新実行済監視コードは、ポイントコードＣＤである。前述したようにポイントコードＣＤの最終フラグＦＧは０である。
【０１１１】
最新実行済監視コードが示す最終フラグＦＧが１の場合（ステップＳ５０４でＮＯ）、実行記録更新部３０４は、実行記録情報ＭＪのＩｎ番目以降の全てのビット（実行情報ｊ）を１に設定する（ステップＳ５０６）。
【０１１２】
ステップＳ５０４の処理で判定される最終フラグＦＧが１である場合、最新実行済監視コードは、最終ポイントコードＥＮである。前述したように最終ポイントコードＥＮの最終フラグＦＧは１である。
【０１１３】
ステップＳ５０７では、判定部４０２が、実行記録情報ＭＪを構成する全てのビット（実行情報ｊ）が１であるか否かを判定する。
【０１１４】
上記処理により、実行記録情報ＭＪを構成する全てのビット（実行情報ｊ）が１である場合（ステップＳ５０７でＹＥＳ）、ステップＳ５０８の処理が行われる。
【０１１５】
ステップＳ５０８では、インデックス更新部３０２が、インデックス値ｋに、最大並列度ｍを加算する。
【０１１６】
そして、実行記録更新部３０４は実行記録情報ＭＪを構成する全てのビット（実行情報ｊ）を０に設定する（ステップＳ５０９）。
【０１１７】
（複数のプログラムが正常に同期して実行される場合の例）
図７は、図２に示されるプログラムＰＧ［１］，ＰＧ［２］，ＰＧ［３］の実行状態を監視する場合において、図５、図６の処理が行われることによる、インデックス値ｋ、実行記録情報ＭＪ等の変化の一例を示す図である。ここで、プログラムＰＧ［１］，ＰＧ［２］，ＰＧ［３］は、並列して同時に実行されるとする。
【０１１８】
図７において、「同期グループ」とは、図２に示される同期グループＳＧ［１］，ＳＧ［２］，ＳＧ［３］を示す。「最新実行済監視コード」とは、前述の最新実行済監視コードである。例えば、最新実行済監視コードが、「ｅｐｏｉｎｔ  ２」である場合、当該最新実行済監視コードは、図２の最終ポイントコードＥＮ［１］である。
【０１１９】
図７において、「実行記録情報ＭＪ」とは、実行記録情報ＭＪを構成する８個の実行情報ｊの値を示す。前述したように、実行情報ｊは、１ビットで示される。すなわち、実行記録情報ＭＪは８ビットで示される。本実施の形態では、実行記録情報ＭＪのＬＳＢ（Least Significant Bit）を０番目の桁とする。また、図７において、８個の実行情報ｊは、実行記録情報ＭＪの右端から順に、０〜７番目の桁のビットに対応する。
【０１２０】
例えば、１番目の桁のビットは、実行記録情報ＭＪを構成する８個の実行情報ｊのうち、右から２列目の実行情報ｊである。
【０１２１】
初期状態では、インデックス値ｋは０である。また、初期状態では、実行記録情報ＭＪを構成する８個の実行情報ｊの各々は０である。また、最大並列度ｍは３に設定されているとする。
【０１２２】
次に、同期グループＳＧ［１］に含まれる全ての監視コードが実行される場合の処理について説明する。
【０１２３】
まず、プログラムＰＧ［１］に記述されるポイントコードＣＤ［１］（ｐｏｉｎｔ  ０）が実行されるとする。この場合、図５の処理が実行される。図２に示されるように、ポイントコードＣＤ［１］が示すポイント番号ｐｎ［１］は０である。この場合、ステップＳ４１Ｎの処理によりポイント番号ｐｎ［１］“０”が取得される。
【０１２４】
また、この場合、ステップＳ５０１で判定される有効範囲は０〜２である。この場合、ポイント番号ｐｎ［１］“０”は、有効範囲内の値であるので、判定部４０２は、ポイントコードＣＤ［１］が、現時点において監視対象の同期グループＳＧ［１］に含まれると判定する。
【０１２５】
この場合、ステップＳ５０１でＹＥＳと判定され、ステップＳ５０２の処理により、ポイント番号ｐｎ［１］（０）からインデックス値ｋ（０）を減算することにより、ＩＤ番号Ｉｎとして、０が算出される。
【０１２６】
このとき、実行記録情報ＭＪの０桁（０番目の桁）のビットは０であるため、ポイントコードＣＤ［１］は初めて実行されたと判定される（ステップＳ５０３でＮＯ）。
【０１２７】
また、ポイントコードＣＤ［１］が示す最終フラグＦＧは０であるため、ステップＳ５０４でＹＥＳと判定され、ステップＳ５０５の処理が行われる。
【０１２８】
ステップＳ５０５では、ポイントコードＣＤ［１］が実行されたことを記録するために実行記録更新部３０４が、実行記録情報ＭＪの０桁（０番目の桁）のビットを１に設定する。これにより、図７に示されるように、ポイントコードＣＤ［１］（ｐｏｉｎｔ  ０）に対応する、実行記録情報ＭＪのＬＳＢは、１に設定される。
【０１２９】
実行記録情報ＭＪにおいて、１に設定されたビット（実行情報ｊ）は、当該ビット（実行情報ｊ）に対応する監視コードが実行されたことを示す。すなわち、ステップＳ５０５の処理により、実行記録情報ＭＪに、監視コードが実行されたことを示す実行情報ｊ（１）が記録される。
【０１３０】
次に、プログラムＰＧ［２］に記述されるポイントコードＣＤ［２］（ｐｏｉｎｔ  １）が実行されるとする。この場合、図５の処理が実行される。図２に示されるように、ポイントコードＣＤ［２］が示すポイント番号ｐｎ［２］は１である。この場合、ステップＳ４１Ｎの処理によりポイント番号ｐｎ［２］“１”が取得される。
【０１３１】
また、この場合、ステップＳ５０１で判定される有効範囲は０〜２である。この場合、ポイント番号ｐｎ［２］“１”は、有効範囲内の値であるので、判定部４０２は、ポイントコードＣＤ［２］が、現時点において監視対象の同期グループＳＧ［１］に含まれると判定する。
【０１３２】
この場合、ステップＳ５０１でＹＥＳと判定され、ステップＳ５０２の処理により、ポイント番号ｐｎ［２］（１）からインデックス値ｋ（０）を減算することにより、ＩＤ番号Ｉｎとして、１が算出される。
【０１３３】
このとき、実行記録情報ＭＪの１桁（１番目の桁）のビットは０であるため、ポイントコードＣＤ［２］は初めて実行されたと判定される（ステップＳ５０３でＮＯ）。
【０１３４】
また、ポイントコードＣＤ［２］が示す最終フラグＦＧは０であるため、ステップＳ５０４でＹＥＳと判定され、ステップＳ５０５の処理が行われる。
【０１３５】
ステップＳ５０５では、ポイントコードＣＤ［２］が実行されたことを記録するために実行記録更新部３０４が、実行記録情報ＭＪの１桁（１番目の桁）のビットを１に設定する。これにより、図７に示されるように、ポイントコードＣＤ［２］（ｐｏｉｎｔ  １）に対応する、実行記録情報ＭＪの１番目の桁のビット（右から２列目のビット）は、１に設定される。
【０１３６】
次に、プログラムＰＧ［３］に記述される最終ポイントコードＥＮ［１］（ｅｐｏｉｎｔ  ２）が実行されるとする。この場合、図５の処理が実行される。図２に示されるように、最終ポイントコードＥＮ［１］が示すポイント番号ｐｎ［３］は２である。この場合、ステップＳ４１Ｎの処理によりポイント番号ｐｎ［３］“２”が取得される。
【０１３７】
また、この場合、ステップＳ５０１で判定される有効範囲は０〜２である。この場合、ポイント番号ｐｎ［３］“２”は、有効範囲内の値であるので、判定部４０２は、最終ポイントコードＥＮ［１］が、現時点において監視対象の同期グループＳＧ［１］に含まれると判定する。
【０１３８】
この場合、ステップＳ５０１でＹＥＳと判定され、ステップＳ５０２の処理により、ポイント番号ｐｎ［３］（２）からインデックス値ｋ（０）を減算することにより、ＩＤ番号Ｉｎとして、２が算出される。
【０１３９】
このとき、実行記録情報ＭＪの２桁（２番目の桁）のビットは０であるため、最終ポイントコードＥＮ［１］は初めて実行されたと判定される（ステップＳ５０３でＮＯ）。
【０１４０】
また、最終ポイントコードＥＮ［１］が示す最終フラグＦＧは１であるため、ステップＳ５０４でＮＯと判定され、ステップＳ５０６の処理が行われる。
【０１４１】
ステップＳ５０６では、実行記録更新部３０４が、実行記録情報ＭＪの２番目以降の全てのビット（実行情報ｊ）を１に設定する。すなわち、図７に示されるように実行記録情報ＭＪの２桁以降の全てのビットが１に設定される。これにより、最終ポイントコードＥＮ［１］が実行されたことが記録される。
【０１４２】
これにより、実行記録情報ＭＪを構成する全てのビットが１になったので、ステップＳ５０７でＹＥＳと判定され、ステップＳ５０８の処理が行われる。
【０１４３】
ステップＳ５０８では、インデックス更新部３０２が、インデックス値ｋ（０）に、最大並列度ｍ（３）を加算する。これにより、インデックス値ｋは、３となる。
【０１４４】
そして、実行記録更新部３０４は実行記録情報ＭＪを構成する全てのビット（実行情報ｊ）を０に設定する（ステップＳ５０９）。これで、同期グループＳＧ［１］に含まれる全ての監視コードの実行が正常に完了したとみなされる。
【０１４５】
判定部４０２は、他の処理とは独立して、以下の同期判定処理を行う。同期判定処理は、ステップＳ５０１の処理が行われる毎に行なわれる。
【０１４６】
図８は、同期判定処理のフローチャートである。
【０１４７】
ステップＳ６０１では、判定部４０２が、同期グループＳＧに含まれるｎ（２≦ｎ≦ｍ）個の監視コードがそれぞれ示すｎ個のポイント番号ｐｎの各々が有効範囲内の値であるか否かを判定する。
【０１４８】
同期グループＳＧに含まれるｎ個の監視コードがそれぞれ示すｎ個のポイント番号ｐｎの各々が有効範囲内の値である場合、判定部４０２は、同期グループＳＧに含まれるｎ個の監視コードにそれぞれ対応するｎ個のプログラムＰＧが同期して実行されていると判定する。
【０１４９】
一方、同期グループＳＧに含まれるｎ個の監視コードがそれぞれ示すｎ個のポイント番号ｐｎのうち、少なくとも１つのポイント番号ｐｎが、有効範囲内の値でない場合、判定部４０２は、同期グループＳＧに含まれるｎ個の監視コードにそれぞれ対応するｎ個のプログラムＰＧが同期して実行されていないと判定する。
【０１５０】
例えば、前述したように、同期グループＳＧ［１］に含まれる３個の監視コードがそれぞれ示す３個のポイント番号ｐｎの各々が、ステップＳ５０１の処理により、有効範囲内の値であると判定された場合、判定部４０２は、同期グループＳＧ［１］に含まれる３個の監視コードにそれぞれ対応する３個のプログラムＰＧが同期して実行されていると判定する。
【０１５１】
また、例えば、同期グループＳＧ［１］に含まれる３個の監視コードがそれぞれ示す３個のポイント番号ｐｎのうち、少なくとも１つのポイント番号ｐｎが、ステップＳ５０１の処理により、有効範囲内の値でないと判定された場合、判定部４０２は、同期グループＳＧ［１］に含まれる３個の監視コードにそれぞれ対応する３個のプログラムＰＧが同期して実行されていないと判定する。
【０１５２】
次に、同期グループＳＧ［２］に含まれる全ての監視コードが実行される場合の処理について説明する。
【０１５３】
まず、プログラムＰＧ［３］に記述される最終ポイントコードＥＮ［２］（ｅｐｏｉｎｔ  ４）が実行されるとする。この場合、図５の処理が実行される。図２に示されるように、最終ポイントコードＥＮ［２］が示すポイント番号ｐｎ［５］は４である。この場合、ステップＳ４１Ｎの処理によりポイント番号ｐｎ［５］“４”が取得される。
【０１５４】
この時点において、インデックス値ｋは３であり、最大並列度ｍは３である。この場合、前述のステップＳ５０１の処理で説明したように、ステップＳ５０１で判定される有効範囲は３〜５である。すなわち、有効範囲は、３以上かつ６未満の範囲である。
【０１５５】
この場合、ポイント番号ｐｎ［５］“４”は、有効範囲内の値であるので、判定部４０２は、最終ポイントコードＥＮ［２］が、現時点において監視対象の同期グループＳＧ［２］に含まれると判定する。
【０１５６】
この場合、ステップＳ５０１でＹＥＳと判定され、ステップＳ５０２の処理により、ポイント番号ｐｎ［５］（４）からインデックス値ｋ（３）を減算することにより、ＩＤ番号Ｉｎとして、１が算出される。
【０１５７】
このとき、実行記録情報ＭＪの１桁（１番目の桁）のビットは０であるため、最終ポイントコードＥＮ［２］は初めて実行されたと判定される（ステップＳ５０３でＮＯ）。
【０１５８】
また、最終ポイントコードＥＮ［２］が示す最終フラグＦＧは１であるため、ステップＳ５０４でＮＯと判定され、ステップＳ５０６の処理が行われる。
【０１５９】
ステップＳ５０６では、実行記録更新部３０４が、実行記録情報ＭＪの１番目以降の全てのビット（実行情報ｊ）を１に設定する。すなわち、実行記録情報ＭＪの１桁以降の全てのビットが１に設定される。これにより、最終ポイントコードＥＮ［２］が実行されたことが記録される。
【０１６０】
また、これにより、図７に示されるように、最終ポイントコードＥＮ［２］（ｅｐｏｉｎｔ  ４）に対応する、実行記録情報ＭＪの１番目のビット以降の全てのビットは、１に設定される。この場合、実行記録情報ＭＪの０番目のビット（右端のビット）のみが０である。
【０１６１】
次に、プログラムＰＧ［２］に記述されるポイントコードＣＤ［３］（ｐｏｉｎｔ  ３）が実行されるとする。この場合、図５の処理が実行される。図２に示されるように、ポイントコードＣＤ［３］が示すポイント番号ｐｎ［４］は３である。この場合、ステップＳ４１Ｎの処理によりポイント番号ｐｎ［４］“３”が取得される。
【０１６２】
また、この場合、ステップＳ５０１で判定される有効範囲は３〜５である。この場合、ポイント番号ｐｎ［４］“３”は、有効範囲内の値であるので、判定部４０２は、ポイントコードＣＤ［３］が、現時点において監視対象の同期グループＳＧ［２］に含まれると判定する。
【０１６３】
この場合、ステップＳ５０１でＹＥＳと判定され、ステップＳ５０２の処理により、ポイント番号ｐｎ［４］（３）からインデックス値ｋ（３）を減算することにより、ＩＤ番号Ｉｎとして、０が算出される。
【０１６４】
このとき、実行記録情報ＭＪの０桁（０番目の桁）のビットは０であるため、ポイントコードＣＤ［３］は初めて実行されたと判定される（ステップＳ５０３でＮＯ）。
【０１６５】
また、ポイントコードＣＤ［２］が示す最終フラグＦＧは０であるため、ステップＳ５０４でＹＥＳと判定され、ステップＳ５０５の処理が行われる。
【０１６６】
ステップＳ５０５では、ポイントコードＣＤ［２］が実行されたことを記録するために実行記録更新部３０４が、実行記録情報ＭＪの０桁（０番目の桁）のビットを１に設定する。これにより、図７に示されるように、実行記録情報ＭＪを構成する全てのビットが１になり、ステップＳ５０７でＹＥＳと判定され、ステップＳ５０８の処理が行われる。
【０１６７】
ステップＳ５０８では、インデックス更新部３０２が、インデックス値ｋ（３）に、最大並列度ｍ（３）を加算する。これにより、インデックス値ｋは、６となる。
【０１６８】
そして、実行記録更新部３０４は実行記録情報ＭＪを構成する全てのビット（実行情報ｊ）を０に設定する（ステップＳ５０９）。これで、同期グループＳＧ［１］に含まれる全ての監視コードの実行が正常に完了したとみなされる。
【０１６９】
なお、ステップＳ５０１の処理が行われる毎に、前述した図８の同期判定処理が行われる。
【０１７０】
なお、同期グループＳＧ［３］に含まれる監視コードが実行される場合の処理は、前述した同期グループＳＧ［２］に含まれる監視コードが実行される場合の処理と同様なので詳細な説明は繰り返さない。
【０１７１】
（複数のプログラムが同期せずに実行される場合の例）
ここまでは、複数のプログラムが正常に同期して実行される場合の処理を説明したが、以下において、プログラムの実行に異常が発生した場合の処理について説明する。
【０１７２】
まず、図２の例において、プログラムＰＧ［２］に記述されるポイントコードＣＤ［２］（ｐｏｉｎｔ  １）の実行が完了した後、プログラムＰＧ［２］に記述されるポイントコードＣＤ［３］（ｐｏｉｎｔ  ３）が実行されたとする。
【０１７３】
この場合、ポイントコードＣＤ［３］が示すポイント番号ｐｎ［４］は３であり、当該ポイント番号ｐｎ［４］（３）は、ステップＳ５０１で判定される有効範囲０〜２内の値ではない。すなわち、ポイントコードＣＤ［３］は、現時点において監視対象の同期グループＳＧ［１］に含まれないと判定される。つまり、ステップＳ５０１でＮＯと判定される。
【０１７４】
この場合、エラー出力部３０７は、エラー信号を出力する（ステップＳ５１０）。
【０１７５】
また、この場合、図８のステップＳ６０１の処理により、判定部４０２は、同期グループＳＧ［１］または同期グループＳＧ［２］に含まれるｎ個の監視コードにそれぞれ対応するｎ個のプログラムＰＧが同期して実行されていないと判定する。
【０１７６】
次に、他の例について説明する。
【０１７７】
まず、図２の例において、プログラムＰＧ［２］に記述されるポイントコードＣＤ［２］（ｐｏｉｎｔ  １）の実行が完了した後、再度、プログラムＰＧ［２］に記述されるポイントコードＣＤ［２］（ｐｏｉｎｔ  １）が実行されたとする。
【０１７８】
この場合、ポイントコードＣＤ［２］が示すポイント番号ｐｎ［２］は１であり、当該ポイント番号ｐｎ［２］（１）は、ステップＳ５０１で判定される有効範囲０〜２内の値であるので、判定部４０２は、ポイントコードＣＤ［２］が、現時点において監視対象の同期グループＳＧ［１］に含まれると判定する。
【０１７９】
この場合、ステップＳ５０１でＹＥＳと判定され、ステップＳ５０２の処理により、ポイント番号ｐｎ［２］（１）からインデックス値ｋ（０）を減算することにより、ＩＤ番号Ｉｎとして、１が算出される。
【０１８０】
このとき、既にポイントコードＣＤ［２］が実行されているため、実行記録情報ＭＪの１桁（１番目の桁）のビットは１である。そのため、ポイントコードＣＤ［２］は既に実行されていることがわかる。この場合、ステップＳ５０３でＹＥＳと判定され、エラー出力部３０７は、エラー信号を出力する（ステップＳ５１０）。
【０１８１】
以上説明したように、本実施の形態によれば、並列して実行される複数のプログラムが正常に同期して実行されているか否かを判定することができる。
【０１８２】
また、ポイント番号ｐｎを示す複数の監視コードはグループ化される。そのため、グループに含まれるポイント番号の数を最大並列度以下の任意の値に変更できるため、監視方法の自由度が増す。
【０１８３】
また、本実施の形態によれば、最大並列度ｍが０である場合、切替え部３０６は監視機能が無効であると判断するため何もしない。最大並列度ｍが０でない場合、切替え部３０６は監視機能が有効であると判定する。
【０１８４】
すなわち、ユーザが最大並列度ｍを設定することにより、プログラムの状態を監視するための処理を行う機能（監視機能）を有効または無効にできる。したがって、プログラム開発時のみ監視機能を有効にして、開発終了後は監視機能を無効にすることができるため、出荷時にプログラムを変更する必要がない。さらに、出荷後であっても、監視機能を有効にすることで不具合検証等に利用することができる。
【０１８５】
＜第２の実施の形態＞
本実施の形態では、第１の実施の形態と比較して、監視コードとして１種類のコードが使用される点が異なる。以下に、第１の実施の形態との相違点を中心に説明し、同一の内容に関しては説明を行わない。
【０１８６】
（実行順序監視システムの構成）
図９は、第２の実施の形態における実行順序監視システム１０００Ａの外観を示す図である。図９を参照して、実行順序監視システム１０００Ａは、図１の実行順序監視システム１０００と比較して、ターゲットシステム１４０の代わりにターゲットシステム１４０Ａを含む点が異なる。それ以外は、ターゲットシステム１４０と同様なので詳細な説明は繰り返さない。
【０１８７】
ターゲットシステム１４０Ａは、図１のターゲットシステム１４０と比較して、ＣＰＵ１４１の代わりにＣＰＵ１４１Ｃを含む点が異なる。それ以外は、ターゲットシステム１４０と同様なので詳細な説明は繰り返さない。
【０１８８】
ＣＰＵ１４１Ｃは、図１のＣＰＵ１４１と比較して、オンチップ・デバッグ回路１４１Ｂの代わりにオンチップ・デバッグ回路１４１Ｄを含む点が異なる。それ以外は、ＣＰＵ１４１と同様なので詳細な説明は繰り返さない。
【０１８９】
オンチップ・デバッグ回路１４１Ｄは、デバッグ機能を有する回路である。オンチップ・デバッグ回路１４１Ｄは、プログラムの実行状態を監視するための実行状態監視装置である。
【０１９０】
記憶部１４５には、図１０に示されるオペレーティングシステム２１およびプログラムＰＧ［１１］，ＰＧ［１２］，ＰＧ［１３］等が記憶される。すなわち、ターゲットシステム１４０Ａには、オペレーティングシステム２１およびプログラムＰＧ［１１］，ＰＧ［１２］，ＰＧ［１３］等がインストールされている。
【０１９１】
以下においては、プログラムＰＧ［１１］，ＰＧ［１２］，ＰＧ［１３］の各々を、単に、プログラムＰＧともいう。プログラムＰＧは、デバッグの対象とされるプログラム（以下、デバッグ対象プログラムという）である。
【０１９２】
ＣＰＵ１４１Ｃは、オペレーティングシステム２１およびプログラムＰＧ［１１］，ＰＧ［１２］，ＰＧ［１３］を実行する。プログラムＰＧ［１１］，ＰＧ［１２］，ＰＧ［１３］は、オペレーティングシステム２１上で実行される。
【０１９３】
オペレーティングシステム２１は、非常に短い時間（以下、プログラム実行時間という）の経過毎に、ＣＰＵ１４１Ｃが実行するプログラムＰＧを切替える。
【０１９４】
すなわち、ＣＰＵ１４１Ｃは、プログラム実行時間の経過毎に、実行するプログラムを、例えば、プログラムＰＧ［１１］，ＰＧ［１２］，ＰＧ［１３］の順に切替える。プログラム実行時間において、各プログラムＰＧの一部が実行される。
【０１９５】
つまり、オペレーティングシステム２１は、ＣＰＵ１４１Ｃの処理時間を分割し、分割された処理時間を、各プログラムＰＧを実行する時間として、ＣＰＵ１４１Ｃに順番に割り当てることにより、複数のプログラムＰＧを同時に実行しているようにみせている。
【０１９６】
（オンチップ・デバッグ回路の構成）
次に、オンチップ・デバッグ回路１４１Ｄの構成について説明する。
【０１９７】
図１１は、オンチップ・デバッグ回路１４１Ｄの構成を示すブロック図である。
【０１９８】
図１１を参照して、オンチップ・デバッグ回路１４１Ｄは、図３のオンチップ・デバッグ回路１４１Ｂと比較して、切替え部３０６およびフラグ取得部４０３を含まない点が異なる。それ以外は、オンチップ・デバッグ回路１４１Ｂと同様なので詳細な説明は繰り返さない。
【０１９９】
ＣＰＵ１４１ＣがプログラムＰＧを実行する前に、ユーザは、デバッガ１２１からターゲットシステム１４０に実装されたオンチップ・デバッグ回路１４１Ｂの最大並列度レジスタ３０１に記憶されている最大並列度ｍを、定数値（例えば、３）に設定するための操作を行う。
【０２００】
（監視コードの説明）
デバッグ対象プログラムとしての各プログラムＰＧには、ＣＰＵ１４１Ｃが実行するための複数のコード（以下、実行コード）が記述されている。また、各プログラムＰＧには、該プログラムＰＧ内の１以上の位置に監視コードが予め記述されている（埋め込まれている）。監視コードは、各プログラムＰＧが、同期して実行されているか否かを監視するためのコードである。
【０２０１】
本実施の形態では、監視コードとして、ポイントコードＣＤ［ｕ（整数）］が使用される。すなわち、本実施の形態では、監視コードとして、最終ポイントコードＥＮ［ｔ］は使用されない。
【０２０２】
具体的には、図１０に示すように、デバッグ対象プログラムとしての各プログラムＰＧには、前述した同期位置に、監視コードとしてのポイントコードＣＤ［ｕ］が予め記述される。
【０２０３】
各プログラムＰＧにおける同期位置に記述される監視コードは、第１の実施の形態と同様に、同期グループＳＧ［ｖ］に属する。以下においては、同期グループＳＧ［ｖ］を、単に、同期グループＳＧとも記載する。なお、同期グループＳＧについては、第１の実施の形態で説明したので詳細な説明は繰り返さない。
【０２０４】
以下においては、ポイントコードＣＤ［ｕ］を、ポイントコードＣＤとも記載する。
【０２０５】
ポイントコードＣＤについては、第１の実施の形態で説明したので詳細な説明は繰り返さない。ポイントコードＣＤを機械語で示す場合、図４（Ａ）に示されるようになる。
【０２０６】
（監視コードの規則）
監視コードとしてのポイントコードＣＤは以下のような規則に従って、各プログラムＰＧに記述される（埋め込まれる）とする。
【０２０７】
複数のプログラムＰＧ間の同期を確認したい場合は、各プログラムＰＧにおける前述した同期位置に監視コード（ポイントコードＣＤ）が記述（挿入）される。実行される同期を確認するための複数の監視コードは、グループ化される。本実施の形態では、グループ化される監視コードの数は、最大並列度ｍと等しい。
【０２０８】
例えば、図１０において、監視コードとしてのポイントコードＣＤ［１１］，ＣＤ［１２］，ＣＤ［１３］は、グループ化される。すなわち、前述した同期グループＳＧ［１１］に、ポイントコードＣＤ［１１］，ＣＤ［１２］，ＣＤ［１３］は含まれる。
【０２０９】
同期グループＳＧに含まれる複数の監視コードにそれぞれ対応する複数のポイント番号ｐｎは、連続した整数である。当該同期グループＳＧに対応する複数のポイント番号ｐｎのうちの１つは、最大並列度ｍの倍数のうち、使用されていない値の最小値（以下、グループ最小値という）である。この場合、当該同期グループＳＧに対応する複数のポイント番号ｐｎのうちグループ最小値以外のポイント番号ｐｎは、グループ最小値から１ずつ増加した値が設定される。
【０２１０】
例えば、最大並列度ｍが３であり、同期グループＳＧのグループ最小値は０であるとする。この場合、例えば、図１０の同期グループＳＧ［１１］に含まれる監視コードとしてのポイントコードＣＤ［１］が示すポイント番号ｐｎ［１１］が、グループ最小値“０”である。
【０２１１】
この場合、例えば、図１０において、同期グループＳＧ［１１］に含まれる、監視コードとしてのポイントコードＣＤ［１１］，ＣＤ［１２］，ＣＤ［１３］にそれぞれ対応するポイント番号ｐｎ［１１］，ｐｎ［１２］，ｐｎ［１３］は、それぞれ、“０”，“１”，“２”に設定される。
【０２１２】
また、同期グループＳＧ［１２］には、監視コードとしてのポイントコードＣＤ［１４］，ＣＤ［１５］，ＣＤ［１６］が含まれる。ポイントコードＣＤ［１４］，ＣＤ［１５］，ＣＤ［１６］にそれぞれ対応するポイント番号ｐｎ［１４］，ｐｎ［１５］，ｐｎ［１６］は、それぞれ、“３”，“４”，“５”に設定される。
【０２１３】
また、同期グループＳＧ［１３］には、監視コードとしてのポイントコードＣＤ［１７］，ＣＤ［１８］，ＣＤ［１９］が含まれる。ポイントコードＣＤ［１７］，ＣＤ［１８］，ＣＤ［１９］にそれぞれ対応するポイント番号ｐｎ［１７］，ｐｎ［１８］，ｐｎ［１９］は、それぞれ、“６”，“７”，“８”に設定される。
【０２１４】
各同期グループＳＧの複数の監視コードの実行順序は不問である。ある同期グループＳＧに含まれる全ての監視コードが実行されたとき、当該同期グループＳＧの実行は完了したとみなされる。その後、次の同期グループＳＧに含まれる監視コードが実行されることが期待される。
【０２１５】
このように、同期グループＳＧの前後関係を確認することで、複数のプログラムＰＧ間の同期を確認する。
【０２１６】
（監視方法の説明）
本実施の形態では、第１の実施の形態と同様、各プログラムＰＧの記述言語の規則に従って、各プログラムＰＧに記述されている複数のコードが、周知な技術により、順次実行される。
【０２１７】
つまり、プログラムＰＧにおいて、ＣＰＵ１４１Ｃにより実行されている位置のコードが監視コードでない場合は、従来通り、当該コードに基づく処理が実行される。以下においては、プログラムＰＧにおいて、ＣＰＵ１４１Ｃにより実行されている位置のコードを、実行位置コードという。
【０２１８】
ただし、実行位置コードが監視コード（ポイントコードＣＤ）である場合、プログラムＰＧの監視を行うための処理（以下、プログラム監視処理という）が行われる。以下においては、実行された１以上の監視コードのうち最新の監視コードを、最新実行済監視コードという。すなわち、最新実行済監視コードは、実行位置コードである。
【０２１９】
図１２は、プログラム監視処理のフローチャートである。図１２において、図６のステップ番号と同じステップ番号の処理は、第１の実施の形態で説明した処理と同様な処理が行なわれるので詳細な説明は繰り返さない。
【０２２０】
まず、番号取得部４０１が、最新実行済監視コードが示すポイント番号ｐｎを取得する（ステップＳ５００）。そして、番号取得部４０１は、ポイント番号ｐｎを、判定部４０２へ送信する。
【０２２１】
次に、第１の実施の形態と同様に、判定部４０２が、ポイント番号ｐｎが、有効範囲内の値であるか否かを判定する（ステップＳ５０１）。この場合、ステップＳ５０１で判定される有効範囲は０〜２である。すなわち、有効範囲は、０以上かつ３未満の範囲である。
【０２２２】
ポイント番号ｐｎが有効範囲内の値でない場合、判定部４０２が、ポイント範囲条件が満たされない旨を、エラー出力部３０７に通知する。この場合、エラー出力部３０７は、エラー信号を出力する（ステップＳ５１０）。
【０２２３】
ポイント番号ｐｎが有効範囲内の値である場合（ポイント範囲条件を満たす場合（ステップＳ５０１でＹＥＳ））、判定部４０２は、ポイント番号ｐｎからインデックス値ｋを減算することによりＩＤ番号Ｉｎ（整数）を算出する（ステップＳ５０２）。
【０２２４】
ここで、実行記録情報ＭＪを構成する複数のビット（実行情報ｊ）のうち、最新実行済監視コードに対応するＩｎ番目の桁のビットが１である場合（ステップＳ５０３でＹＥＳ）、判定部４０２がその旨をエラー出力部３０７に通知し、エラー出力部３０７は、エラー信号を出力する（ステップＳ５１０）。
【０２２５】
最新実行済監視コードに対応するＩｎ番目の桁のビットが０である場合（ステップＳ５０３でＮＯ）、実行記録更新部３０４は、最新実行済監視コードに対応する、実行記録情報ＭＪのＩｎ番目の桁のビット（実行情報ｊ）を１に設定する（ステップＳ５０５）。この処理により、最新実行済監視コード（ポイントコードＣＤ）が実行されたことが記録される。
【０２２６】
つまり、実行された監視コードに対応するビット（実行情報ｊ）がすでに１である場合、当該監視コードが重複して実行されたことを意味するため、エラーであると判断される。
【０２２７】
ステップＳ５０７Ａでは、判定部４０２が、実行記録情報ＭＪを構成する全てのビットのうちの下位ｍビットが１であるか否かを判定する。ここで、ｍは、最大並列度である。
【０２２８】
上記処理により、実行記録情報ＭＪを構成する全てのビットのうちの下位ｍビットが１である場合（ステップＳ５０７ＡでＹＥＳ）、ステップＳ５０８の処理が行われる。
【０２２９】
ステップＳ５０８では、インデックス更新部３０２が、インデックス値ｋに、最大並列度ｍを加算する。
【０２３０】
そして、実行記録更新部３０４は実行記録情報ＭＪを構成する全てのビット（実行情報ｊ）を０に設定する（ステップＳ５０９）。
【０２３１】
本実施の形態においても、第１の実施の形態と同様、ステップＳ５０１の処理が行われる毎に、判定部４０２は、他の処理とは独立して、図８の同期判定処理を行う。
【０２３２】
（複数のプログラムが正常に同期して実行される場合の例）
図１３は、図１０に示されるプログラムＰＧ［１１］，ＰＧ［１２］，ＰＧ［１３］の実行状態を監視する場合において、図５、図６の処理が行われることによる、インデックス値ｋ、実行記録情報ＭＪ等の変化の一例を示す図である。ここで、プログラムＰＧ［１１］，ＰＧ［１２］，ＰＧ［１３］は、並列して同時に実行されるとする。
【０２３３】
図１３に示される各項目は、図７で説明したので詳細な説明は繰り返さない。
【０２３４】
初期状態では、インデックス値ｋは０である。また、初期状態では、実行記録情報ＭＪを構成する８個の実行情報ｊの各々は０である。また、最大並列度ｍは３に設定されているとする。
【０２３５】
次に、同期グループＳＧ［１１］に含まれる全ての監視コードが実行される場合の処理について説明する。
【０２３６】
まず、プログラムＰＧ［１１］に記述されるポイントコードＣＤ［１１］（ｐｏｉｎｔ  ０）が実行されるとする。この場合、図１２のプログラム監視処理が実行される。図１０に示されるように、ポイントコードＣＤ［１１］が示すポイント番号ｐｎ［１１］は０である。この場合、ステップＳ５００の処理によりポイント番号ｐｎ［１１］“０”が取得される。
【０２３７】
また、この場合、ステップＳ５０１で判定される有効範囲は０〜２である。この場合、ポイント番号ｐｎ［１１］“０”は、有効範囲内の値であるので、判定部４０２は、ポイントコードＣＤ［１１］が、現時点において監視対象の同期グループＳＧ［１１］に含まれると判定する。
【０２３８】
この場合、ステップＳ５０１でＹＥＳと判定され、ステップＳ５０２の処理により、ポイント番号ｐｎ［１１］（０）からインデックス値ｋ（０）を減算することにより、ＩＤ番号Ｉｎとして、０が算出される。
【０２３９】
このとき、実行記録情報ＭＪの０桁（０番目の桁）のビットは０であるため、ポイントコードＣＤ［１１］は初めて実行されたと判定される（ステップＳ５０３でＮＯ）。
【０２４０】
ステップＳ５０５では、ポイントコードＣＤ［１１］が実行されたことを記録するために実行記録更新部３０４が、実行記録情報ＭＪの０桁（０番目の桁）のビットを１に設定する。これにより、図１３に示されるように、ポイントコードＣＤ［１１］（ｐｏｉｎｔ  ０）に対応する、実行記録情報ＭＪのＬＳＢは、１に設定される。
【０２４１】
実行記録情報ＭＪにおいて、１に設定されたビット（実行情報ｊ）は、当該ビット（実行情報ｊ）に対応する監視コードが実行されたことを示す。
【０２４２】
次に、プログラムＰＧ［１２］に記述されるポイントコードＣＤ［１２］（ｐｏｉｎｔ  １）が実行されるとする。この場合、図１２のプログラム監視処理が実行される。図１０に示されるように、ポイントコードＣＤ［１２］が示すポイント番号ｐｎ［１２］は１である。この場合、ステップＳ５００の処理によりポイント番号ｐｎ［１２］“１”が取得される。
【０２４３】
また、この場合、ステップＳ５０１で判定される有効範囲は０〜２である。この場合、ポイント番号ｐｎ［１２］“１”は、有効範囲内の値であるので、判定部４０２は、ポイントコードＣＤ［２］が、現時点において監視対象の同期グループＳＧ［１１］に含まれると判定する。
【０２４４】
この場合、ステップＳ５０１でＹＥＳと判定され、ステップＳ５０２の処理により、ポイント番号ｐｎ［１２］（１）からインデックス値ｋ（０）を減算することにより、ＩＤ番号Ｉｎとして、１が算出される。
【０２４５】
このとき、実行記録情報ＭＪの１桁（１番目の桁）のビットは０であるため、ポイントコードＣＤ［２］は初めて実行されたと判定される（ステップＳ５０３でＮＯ）。
【０２４６】
ステップＳ５０５では、ポイントコードＣＤ［１２］が実行されたことを記録するために実行記録更新部３０４が、実行記録情報ＭＪの１桁（１番目の桁）のビットを１に設定する。これにより、図１３に示されるように、ポイントコードＣＤ［１２］（ｐｏｉｎｔ  １）に対応する、実行記録情報ＭＪの１番目の桁のビット（右から２列目のビット）は、１に設定される。
【０２４７】
次に、プログラムＰＧ［１３］に記述されるポイントコードＣＤ［１３］（ｐｏｉｎｔ  ２）が実行されるとする。この場合、図１２のプログラム監視処理が実行される。図１０に示されるように、ポイントコードＣＤ［１３］が示すポイント番号ｐｎ［１３］は２である。この場合、ステップＳ５００の処理によりポイント番号ｐｎ［１３］“２”が取得される。
【０２４８】
また、この場合、ステップＳ５０１で判定される有効範囲は０〜２である。この場合、ポイント番号ｐｎ［１３］“２”は、有効範囲内の値であるので、判定部４０２は、ポイントコードＣＤ［１３］が、現時点において監視対象の同期グループＳＧ［１１］に含まれると判定する。
【０２４９】
この場合、ステップＳ５０１でＹＥＳと判定され、ステップＳ５０２の処理により、ポイント番号ｐｎ［１３］（２）からインデックス値ｋ（０）を減算することにより、ＩＤ番号Ｉｎとして、２が算出される。
【０２５０】
このとき、実行記録情報ＭＪの２桁（２番目の桁）のビットは０であるため、ポイントコードＣＤ［１３］は初めて実行されたと判定される（ステップＳ５０３でＮＯ）。
【０２５１】
ステップＳ５０５では、ポイントコードＣＤ［１３］が実行されたことを記録するために実行記録更新部３０４が、実行記録情報ＭＪの２桁（２番目の桁）のビットを１に設定する。
【０２５２】
これにより、実行記録情報ＭＪを構成する全てのビットのうちの下位３ビットが１になったので、ステップＳ５０７ＡでＹＥＳと判定され、ステップＳ５０８の処理が行われる。
【０２５３】
ステップＳ５０８では、インデックス更新部３０２が、インデックス値ｋ（０）に、最大並列度ｍ（３）を加算する。これにより、インデックス値ｋは、３となる。
【０２５４】
そして、実行記録更新部３０４は実行記録情報ＭＪを構成する全てのビット（実行情報ｊ）を０に設定する（ステップＳ５０９）。これで、同期グループＳＧ［１１］に含まれる全ての監視コードの実行が正常に完了したとみなされる。
【０２５５】
次に、同期グループＳＧ［１２］に含まれる全ての監視コードが実行される場合の処理について説明する。
【０２５６】
まず、プログラムＰＧ［１２］に記述されるポイントコードＣＤ［１５］（ｐｏｉｎｔ  ４）が実行されるとする。この場合、図１２のプログラム監視処理が実行される。図１０に示されるように、ポイントコードＣＤ［１５］が示すポイント番号ｐｎ［１５］は４である。この場合、ステップＳ５００の処理によりポイント番号ｐｎ［１５］“４”が取得される。
【０２５７】
この時点において、インデックス値ｋは３であり、最大並列度ｍは３である。この場合、前述のステップＳ５０１の処理で説明したように、ステップＳ５０１で判定される有効範囲は３〜５である。すなわち、有効範囲は、３以上かつ６未満の範囲である。
【０２５８】
この場合、ポイント番号ｐｎ［１５］“４”は、有効範囲内の値であるので、判定部４０２は、ポイントコードＣＤ［１５］が、現時点において監視対象の同期グループＳＧ［１２］に含まれると判定する。
【０２５９】
この場合、ステップＳ５０１でＹＥＳと判定され、ステップＳ５０２の処理により、ポイント番号ｐｎ［１５］（４）からインデックス値ｋ（３）を減算することにより、ＩＤ番号Ｉｎとして、１が算出される。
【０２６０】
このとき、実行記録情報ＭＪの１桁（１番目の桁）のビットは０であるため、ポイントコードＣＤ［１５］は初めて実行されたと判定される（ステップＳ５０３でＮＯ）。
【０２６１】
ステップＳ５０５では、ポイントコードＣＤ［１５］が実行されたことを記録するために実行記録更新部３０４が、実行記録情報ＭＪの１桁（１番目の桁）のビットを１に設定する。これにより、図１３に示されるように、ポイントコードＣＤ［１５］（ｐｏｉｎｔ  ４）に対応する、実行記録情報ＭＪの１番目の桁のビット（右から２列目のビット）は、１に設定される。
【０２６２】
次に、プログラムＰＧ［１３］に記述されるポイントコードＣＤ［１６］（ｐｏｉｎｔ  ５）が実行されるとする。この場合、図１２のプログラム監視処理が実行される。図１０に示されるように、ポイントコードＣＤ［１６］が示すポイント番号ｐｎ［１６］は５である。この場合、ステップＳ５００の処理によりポイント番号ｐｎ［１６］“５”が取得される。
【０２６３】
また、この場合、ステップＳ５０１で判定される有効範囲は３〜５である。この場合、ポイント番号ｐｎ［１６］“５”は、有効範囲内の値であるので、判定部４０２は、ポイントコードＣＤ［１６］が、現時点において監視対象の同期グループＳＧ［１２］に含まれると判定する。
【０２６４】
この場合、ステップＳ５０１でＹＥＳと判定され、ステップＳ５０２の処理により、ポイント番号ｐｎ［１６］（５）からインデックス値ｋ（３）を減算することにより、ＩＤ番号Ｉｎとして、２が算出される。
【０２６５】
このとき、実行記録情報ＭＪの２桁（２番目の桁）のビットは０であるため、ポイントコードＣＤ［１６］は初めて実行されたと判定される（ステップＳ５０３でＮＯ）。
【０２６６】
ステップＳ５０５では、ポイントコードＣＤ［１６］が実行されたことを記録するために実行記録更新部３０４が、実行記録情報ＭＪの１桁（１番目の桁）のビットを１に設定する。これにより、図１３に示されるように、ポイントコードＣＤ［１６］（ｐｏｉｎｔ  ５）に対応する、実行記録情報ＭＪの２番目の桁のビット（右から３列目のビット）は、１に設定される。
【０２６７】
次に、プログラムＰＧ［１１］に記述されるポイントコードＣＤ［１４］（ｐｏｉｎｔ  ３）が実行されるとする。この場合、図１２のプログラム監視処理が実行される。図１０に示されるように、ポイントコードＣＤ［１４］が示すポイント番号ｐｎ［１４］は３である。この場合、ステップＳ５００の処理によりポイント番号ｐｎ［１４］“３”が取得される。
【０２６８】
また、この場合、ステップＳ５０１で判定される有効範囲は３〜５である。この場合、ポイント番号ｐｎ［１４］“３”は、有効範囲内の値であるので、判定部４０２は、ポイントコードＣＤ［１４］が、現時点において監視対象の同期グループＳＧ［１２］に含まれると判定する。
【０２６９】
この場合、ステップＳ５０１でＹＥＳと判定され、ステップＳ５０２の処理により、ポイント番号ｐｎ［１４］（３）からインデックス値ｋ（３）を減算することにより、ＩＤ番号Ｉｎとして、０が算出される。
【０２７０】
このとき、実行記録情報ＭＪの０桁（０番目の桁）のビットは０であるため、ポイントコードＣＤ［１４］は初めて実行されたと判定される（ステップＳ５０３でＮＯ）。
【０２７１】
ステップＳ５０５では、ポイントコードＣＤ［１４］が実行されたことを記録するために実行記録更新部３０４が、実行記録情報ＭＪの０桁（０番目の桁）のビットを１に設定する。
【０２７２】
これにより、実行記録情報ＭＪを構成する全てのビットのうちの下位３ビットが１になったので、ステップＳ５０７ＡでＹＥＳと判定され、ステップＳ５０８の処理が行われる。
【０２７３】
ステップＳ５０８では、インデックス更新部３０２が、インデックス値ｋ（３）に、最大並列度ｍ（３）を加算する。これにより、インデックス値ｋは、６となる。
【０２７４】
そして、実行記録更新部３０４は実行記録情報ＭＪを構成する全てのビット（実行情報ｊ）を０に設定する（ステップＳ５０９）。これで、同期グループＳＧ［１２］に含まれる全ての監視コードの実行が正常に完了したとみなされる。
【０２７５】
なお、ステップＳ５０１の処理が行われる毎に、前述した図６の同期判定処理が行われる。この処理により、第１の実施の形態と同様に、同期グループＳＧに含まれるｎ個の監視コードにそれぞれ対応するｎ個のプログラムＰＧが同期して実行されているか否かが判定される。
【０２７６】
なお、同期グループＳＧ［１３］に含まれる監視コードが実行される場合の処理は、前述した同期グループＳＧ［１２］に含まれる監視コードが実行される場合の処理と同様なので詳細な説明は繰り返さない。
【０２７７】
（複数のプログラムが同期せずに実行される場合の例）
ここまでは、複数のプログラムが正常に同期して実行される場合の処理を説明したが、以下において、プログラムの実行に異常が発生した場合の処理について説明する。
【０２７８】
まず、図１０の例において、プログラムＰＧ［１２］に記述されるポイントコードＣＤ［１２］（ｐｏｉｎｔ  １）の実行が完了した後、プログラムＰＧ［１１］に記述されるポイントコードＣＤ［１４］（ｐｏｉｎｔ  ３）が実行されたとする。
【０２７９】
この場合、ポイントコードＣＤ［１４］が示すポイント番号ｐｎ［１４］は３であり、当該ポイント番号ｐｎ［１４］（３）は、ステップＳ５０１で判定される有効範囲０〜２内の値ではない。すなわち、ポイントコードＣＤ［１４］は、現在、監視対象の同期グループＳＧ［１１］に含まれないと判定される。つまり、ステップＳ５０１でＮＯと判定される。
【０２８０】
この場合、エラー出力部３０７は、エラー信号を出力する（ステップＳ５１０）。
【０２８１】
また、この場合、図８のステップＳ６０１の処理により、判定部４０２は、同期グループＳＧ［１１］または同期グループＳＧ［１２］に含まれるｎ個の監視コードにそれぞれ対応するｎ個のプログラムＰＧが同期して実行されていないと判定する。
【０２８２】
次に、他の例について説明する。
【０２８３】
まず、図１０の例において、プログラムＰＧ［１２］に記述されるポイントコードＣＤ［１２］（ｐｏｉｎｔ  １）の実行が完了した後、再度、プログラムＰＧ［１２］に記述されるポイントコードＣＤ［１２］（ｐｏｉｎｔ  １）が実行されたとする。
【０２８４】
この場合、ポイントコードＣＤ［１２］が示すポイント番号ｐｎ［１２］は１であり、当該ポイント番号ｐｎ［１２］（１）は、ステップＳ５０１で判定される有効範囲０〜２内の値であるので、判定部４０２は、ポイントコードＣＤ［１２］が、現時点において監視対象の同期グループＳＧ［１２］に含まれると判定する。
【０２８５】
この場合、ステップＳ５０１でＹＥＳと判定され、ステップＳ５０２の処理により、ポイント番号ｐｎ［１２］（１）からインデックス値ｋ（０）を減算することにより、ＩＤ番号Ｉｎとして、１が算出される。
【０２８６】
このとき、既にポイントコードＣＤ［１２］が実行されているため、実行記録情報ＭＪの１桁（１番目の桁）のビットは１である。そのため、ポイントコードＣＤ［１２］は既に実行されていることがわかる。この場合、ステップＳ５０３でＹＥＳと判定され、エラー出力部３０７は、エラー信号を出力する（ステップＳ５１０）。
【０２８７】
以上説明したように、本実施の形態によれば、第１の実施の形態と同様に、並列して実行される複数のプログラムが正常に同期して実行されているか否かを判定することができる。
【０２８８】
（補足）
以上、本発明の第１および第２の実施の形態について説明したが、本発明はこれらの実施形態に限られないことは勿論である。
【０２８９】
（１）第１および第２の実施の形態において、最大並列度ｍは、ユーザの操作により設定されるとした。具体的には、ユーザが、デバッガ１２１からターゲットシステム１４０（１４０Ａ）に実装されたオンチップ・デバッグ回路１４１Ｂ（１４１Ｄ）内の最大並列度レジスタ３０１に記憶されている最大並列度ｍを、定数値に設定するための操作を行うとしたが、本発明はこれに限定されない。
【０２９０】
例えば、デバッガ１２１に予め最大並列度ｍを設定しておいて、ターゲットシステム１４０（１４０Ａ）がリセットされる際にデバッガ１２１が自動的に、最大並列度レジスタ３０１に記憶されている最大並列度ｍの値を設定しても良い。
【０２９１】
また、デバッグ対象のプログラムＰＧの所定の場所に最大並列度ｍを設定するコード（以下、設定コードという）を予め埋め込んでおいてもよい。ここで、当該所定の場所は、任意の監視コードが実行される前に確実に実行される場所である。この場合、ターゲットシステム１４０（１４０Ａ）が、プログラムＰＧ内の設定コードを実行する際に、最大並列度ｍが設定される。
【０２９２】
（２）第１および第２の実施の形態において、オンチップ・デバッグ回路１４１Ｂ（１４１Ｄ）を使用して実行順序監視システムを構成したが、本発明はこれに限定されない。例えば、オンチップ・デバッグ回路１４１Ｂ（１４１Ｄ）を使用せずにソフトウェアで実現することも可能である。
【０２９３】
例えば、デバッグ専用のライブラリとして実現し、各プログラムＰＧからリンクする方法を実現するためのソフトウェアで実現されてもよい。また、例えば、プログラムＰＧに監視コードを埋め込まずに、デバッガ１２１の機能として、ブレークポイントの拡張として実現する方法を実現するためのソフトウェアで実現されてもよい。また、例えば、オペレーティングシステム２１に同様の機能を持つシステムコールを追加する方法を実現するためのソフトウェアで実現されてもよい。
【０２９４】
（３）第１および第２の実施の形態において、プログラムＰＧには、監視コードが予め記述されており（埋め込まれており）、同時にポイント番号も指定するとしたが、本発明はこれに限定されない。
【０２９５】
例えば、プログラムＰＧには監視コードのみを埋め込んでおき、コンパイラは該当箇所にＮＯＰ命令を生成する。ＮＯＰ命令とは、プロセッサ命令の一つで、何もしないことを表す。デバッグを行なう際に、ユーザは、デバッガ１２１を使用して、監視したい監視コードのみが有効になるように実行順序とグループを指定する。こうすることで、ポイント番号ｐｎの指定や監視コードの種類の指定を自動化することができる。
【０２９６】
（４）第１および第２の実施の形態では、エラー発生時はエラー信号を出力するようにしたが、本発明はこれに限定されない。
【０２９７】
例えば、エラー発生時にプログラムＰＧの実行を強制的に停止するようにすれば、エラー発生の要因をデバッグすることができる。つまり、最大並列度ｍと、直前に実行された監視コードに対応するポイント番号ｐｎと、インデックス値ｋとを参照すれば、監視コードが現時点において監視対象の同期グループＳＧに含まれているかどうかを知ることができる。
【０２９８】
また、直前に実行された監視コードに対応するポイント番号ｐｎと実行記録情報ＭＪを参照すれば、現時点において監視対象の同期グループＳＧに含まれる複数の監視コードのうち、どの監視コードが実行されたのかを知ることができる。さらに、直前に実行された監視コードが重複して実行されたかどうかを知ることもできる。
【０２９９】
（５）また、上記のオンチップ・デバッグ回路１４１Ｂ（１４１Ｄ）を構成する複数の構成要素の全てまたは一部は、回路等のハードウエアで構成されてもよい。また、上記のオンチップ・デバッグ回路１４１Ｂ（１４１Ｄ）を構成する構成要素の全てまたは一部は、ＣＰＵ（Central Processing Unit）等により実行されるプログラムのモジュールであってもよい。
【０３００】
（６）また、本発明は、オンチップ・デバッグ回路１４１Ｂ（１４１Ｄ）が備える特徴的な構成部の動作をステップとする実行状態監視方法として実現してもよい。また、そのような実行状態監視方法に含まれるステップをコンピュータに実行させるプログラムとして実現してもよい。そして、そのようなプログラムを格納するコンピュータ読み取り可能な記録媒体として実現されてもよい。また、当該プログラムは、インターネット等の伝送媒体を介して配信されてもよい。
【０３０１】
（７）また、上記のターゲットシステム１４０（１４０Ａ）を構成する複数の構成要素の全てまたは一部は、１個のシステムＬＳＩ（Large Scale Integration：大規模集積回路）から構成されてもよい。
【０３０２】
（８）また、本発明の趣旨を逸脱しない限り、当業者が思いつく各種変形を第１および第２の実施の形態に施したもの、あるいは異なる実施の形態における構成要素を組み合わせて構築される形態も、本発明の範囲内に含まれる。
【０３０３】
今回開示された実施の形態はすべての点で例示であって制限的なものではないと考えられるべきである。本発明の範囲は上記した説明ではなくて特許請求の範囲によって示され、特許請求の範囲と均等の意味および範囲内でのすべての変更が含まれることが意図される。
【産業上の利用可能性】
【０３０４】
本発明は、並列して実行される複数のプログラムが同期して実行されているか否かを判定可能な実行状態監視装置として、利用することができる。
【０３０５】
本発明にかかる実行状態監視装置は、複数のプログラムの実行状態を監視し、プログラム間の同期を確認することができるので、同時に実行される複数のプログラムのデバッグを支援するデバッグシステム等において有用である。
【符号の説明】
【０３０６】
２１  オペレーティングシステム
１２０  ホストコンピュータ
１２１  デバッガ
１３０  デバッグユニット
１４０，１４０Ａ  ターゲットシステム
１４１，１４１Ｃ  ＣＰＵ
１４１Ａ  デバッグインタフェース
１４１Ｂ，１４１Ｄ  オンチップ・デバッグ回路
１４２  ＲＡＭ
１４３  ＲＯＭ
１４４  周辺回路
３０１  最大並列度レジスタ
３０２  インデックス更新部
３０３  インデックスレジスタ
３０４  実行記録更新部
３０５  実行記録レジスタ
３０６  切替え部
３０７  エラー出力部
４０１  番号取得部
４０２  判定部
４０３  フラグ取得部
１０００，１０００Ａ  実行順序監視システム
ＣＤ  ポイントコード
ＥＮ  最終ポイントコード
ＰＧ  プログラム
【図１】
2011028458.tif 000003
【図２】
2011028458.tif 000004
【図３】
2011028458.tif 000005
【図４】
2011028458.tif 000006
【図５】
2011028458.tif 000007
【図６】
2011028458.tif 000008
【図７】
2011028458.tif 000009
【図８】
2011028458.tif 000010
【図９】
2011028458.tif 000011
【図１０】
2011028458.tif 000012
【図１１】
2011028458.tif 000013
【図１２】
2011028458.tif 000014
【図１３】
2011028458.tif 000015