(57)【要約】【課題】  トレースバッファの有効利用を図る。【解決手段】  トレース処理システム（100）は、プログラムを実行する情報処理装置（10）及びデータを記憶する記憶装置（20）を備える。情報処理装置は、プログラム中の複数の事象の発生順序を所定のスケジュールに基づき決定するタスク制御部（50）と、該タスク制御部が決定した順序に沿って当該事象を発生させるためのタスク（601〜60n）を実行するタスク処理部（60）とを有し、タスク処理部で実行した各タスクにおけるデータの読み出し又は書き込み動作の記録を示すトレース情報をタスク別に記憶装置へ格納する。【選択図】      図１
2005258889.tif 000002
【特許請求の範囲】
【請求項１】
プログラムの実行に際し該プログラム中の複数の事象の発生順序を所定のスケジュールに基づき決定する情報処理装置が、各事象を発生させるための複数のタスクのそれぞれにデータ記憶領域を割り当て、実行したタスクにおけるデータの読み出し又は書き込み動作の記録を示すトレース情報を当該データ記憶領域に格納することを特徴とするプログラムトレース方法。
【請求項２】
前記情報処理装置が、実行したタスクの読み出し又は書き込み動作がデータのブロック転送であるか否かを判定し、ブロック転送であるとき、当該読み出し又は書き込みデータのうちの所定量のデータを前記実行したタスクのトレース情報として記録することを特徴とする請求項１記載のプログラムトレース方法。
【請求項３】
前記情報処理装置が、実行したタスクの読み出し又は書き込み動作がブロック転送でないと判定したとき、当該読み出し又は書き込みデータの全てを前記実行したタスクのトレース情報として記録することを特徴とする請求項２記載のプログラムトレース方法。
【請求項４】
プログラムを実行する情報処理装置及びデータを記憶する記憶装置を備え、
前記情報処理装置は、
プログラム中の複数の事象の発生順序を所定のスケジュールに基づき決定するタスク制御部と、該タスク制御部が決定した順序に沿って当該事象を発生させるためのタスクを実行するタスク処理部とを有し、前記タスク処理部で実行した各タスクにおけるデータの読み出し又は書き込み動作の記録を示すトレース情報をタスク別に前記記憶装置へ格納することを特徴とするトレース処理システム。
【請求項５】
前記情報処理装置は、実行したタスクの読み出し又は書き込み動作がデータのブロック転送であるか否かを判定し、ブロック転送であるとき当該読み出し又は書き込みデータのうちの所定量のデータを前記実行したタスクのトレース情報として記録することを特徴とする請求項４記載のトレース処理システム。
【請求項６】
前記情報処理装置は、実行したタスクの読み出し又は書き込み動作がブロック転送でないとき、当該読み出し又は書き込みデータの全てを前記実行したタスクのトレース情報として記録することを特徴とする請求項５記載のトレース処理システム。
【発明の詳細な説明】
【技術分野】
【０００１】
本発明は、プログラムの複数の事象を所定のスケジュールに沿って発生させる情報処理装置のためのトレース処理に関する。
【背景技術】
【０００２】
従来、プログラム中の複数の事象が所定のスケジュールに沿って発生するように各事象の発生順序を制御する制御プログラムが普及している。この種の制御プログラムは、主に、携帯通信端末、家電製品および自動車等の各種機器の動作を制御すべく当該機器に組み込まれて利用されることから、機器の動作に不具合が発生した時には、その原因を迅速に究明することが求められる。
【０００３】
動作の不具合を調査するにあたっては、プログラムの実行記録を取得するトレース処理が行われるが、このトレース処理に関し、例えば後述の特許文献１に記載の手法が開示されている。特許文献１の手法は、複数のＣＰＵを有する装置において、ＣＰＵ毎にリング形式のトレースメモリを用意し、各ＣＰＵで事象が発生したとき、この事象についてＣＰＵ間での相対的な発生順序を把握できるように当該トレース情報を格納するというものである。
【特許文献１】特開２００３-０７６５７７号公報
【発明の開示】
【発明が解決しようとする課題】
【０００４】
しかしながら、従来の上記手法のように、トレース情報をリング形式のメモリに記録する場合、このメモリでは古い情報が新しい情報により順次上書きされることから、不具合の調査に必要な情報を残すためには、メモリとして比較的大きな容量ものを用意する必要がある。その場合、メモリの容量を増加させる分、製品の販売コストの上昇を招くおそれがある。
【０００５】
本発明は、上記課題に鑑みてなされたものであり、トレース情報を格納するためのメモリ容量の増大を抑制し得るプログラムトレース方法および該方法を実施するための情報処理装置を提供することを目的とする。
【課題を解決するための手段】
【０００６】
本発明に係るプログラムトレース方法は、プログラムの実行に際し該プログラム中の複数の事象の発生順序を所定のスケジュールに基づき決定する情報処理装置が、各事象を発生させるための複数のタスクのそれぞれにデータ記憶領域を割り当て、実行したタスクにおけるデータの読み出し又は書き込み動作の記録を示すトレース情報を当該データ記憶領域に格納する。
【０００７】
本発明に係るトレース処理システムは、プログラムを実行する情報処理装置及びデータを記憶する記憶装置を備え、前記情報処理装置は、プログラム中の複数の事象の発生順序を所定のスケジュールに基づき決定するタスク制御部と、該タスク制御部が決定した順序に沿って当該事象を発生させるためのタスクを実行するタスク処理部とを有し、前記タスク処理部で実行した各タスクにおけるデータの読み出し又は書き込み動作の記録を示すトレース情報をタスク別に前記記憶装置へ格納する。
【発明の効果】
【０００８】
本発明によれば、トレース情報の記録対象を、各タスクにおける読み出し又は書き込み動作としたことから、トレース情報のデータ量を抑制することができる。これにより、たとえリング形式のトレースメモリであっても、より多くのトレース情報を保持することが可能となる。
【発明を実施するための最良の形態】
【０００９】
［実施例］
以下、本発明の実施例について図面を用いて詳細に説明する。図１は、本発明のトレース処理システムの実施例の構成を示すブロック図である。実施例のシステム１００は、プログラムを実行する情報処理装置１０と、データを記憶する記憶装置２０とを備え、情報処理装置１０は、キーボード及びディスプレイ機構のような入力装置３０及び出力装置３１、ならびに外部システムとのデータ送受信のための通信装置３２等の動作を制御する。
【００１０】
情報処理装置１０は、演算機能を果たすＣＰＵ１１と、ＣＰＵ１１により実行するプログラムを保持するプログラムメモリ１２とを含む。記憶装置２０は、ＣＰＵ１１が取り扱うデータを格納する記憶領域の他に、後述のトレース情報をリング形式で格納するための複数のトレースバッファ２１、２２、・・・、２ｎを有する。これらの各トレースバッファ２１〜２ｎは、プログラムにおける各事象を発生させるためのタスク別に設けられている。
【００１１】
図２に、情報処理装置１０により実行されるプログラムの構成を示す。実施例のプログラムは、図２に示すように、本発明に係るタスク制御部の機能を果たすリアルタイムモニタ５０部と、本発明のタスク処理部の機能を果たすタスク部６０とから構成される。
【００１２】
実施例のリアルタイムモニタ５０部には、例えば、コンピュータプログラミングに関し従来知られたプロジェクトであるＴＲＯＮ（The Real-time Operating Nucleus）に関連するＩＴＲＯＮ（Industrial TRON）で提案されているμＩＴＲＯＮ仕様に準拠した、いわゆるリアルタイムＯＳ（RTOS：Real Time Operating System）を用いることができる。リアルタイムモニタ部５０は、予め設定されたスケジュールに基づいて、後述の各タスクを所定の順序に沿って実行するスーパバイザ機能を有する。
【００１３】
タスク部６０は、ＣＰＵ１１により制御するデバイスの機能に応じて開発される複数のタスク６０１、６０２、・・・、６０ｎと、これらの各タスクおよび入力装置３０のようなハードウェア間のインタフェース機能を果たすハンドラ６１とを有する。タスク６０１〜６０ｎは、当該デバイスに対し発生させるべき事象を記述したプログラムモジュールであり、当該デバイスの初期処理を行うためのスタータタスク、キー入力に関するタスク、信号の送受信に関するタスク等が含まれる。ハンドラ６１は、キー入力操作や信号の受信のような、ハードウェアからの割り込み処理要求を受け付ける。
【００１４】
各タスク６０１〜６０ｎに対応する事象を発生させるにあたっては、ＣＰＵ１１が、当該タスクのコードに基づき、記憶装置２０に対しデータの読み出し又は書き込みを行うことにより実現する。このとき、ＣＰＵ１１は、各タスクにおけるデータの読み出し又は書き込み動作についての記録をトレース情報として記憶装置２０の当該トレースバッファ（２１〜２ｎ）に格納する。
【００１５】
図３に、本実施例のトレース情報の構成を示す。トレース情報には、当該タスクの動作がデータの読み出しであるか、あるいは書き込みであるかを示す「データリード／ライト区別」と、読み出し又は書き込みデータの「アドレス」および「範囲」と、当該動作がブロック転送であるか否かを示す「ブロック転送区別」と、実際に読み出し又は書き込みするデータである「リード値／ライト値」とを記録する。
【００１６】
このように本実施例では、プログラムの各タスク６０１〜６０ｎをトレース情報の記録対象としており、これは、当該事象のプログラムコードに対し、ＣＰＵ１１が実際には如何に動作したかを確認しようとするものである。すなわち、各タスク６０１〜６０ｎによるＣＰＵ１１のデータの読み出し又は書き込み動作を確認することにより、不具合に至った直接的な原因を探るものである。
【００１７】
ここで、情報処理装置１０による一連の制御手順を、図４に示すフローチャートに沿って概略的に説明する。ここでは、各タスク６０１〜６０ｎに対し、現在実行すべきものを「実行タスク」とし、次に実行されるものを「実行待ちタスク」とし、その他のものを「事象発生待ちタスク」と位置付ける。
【００１８】
まず、システム１００に電源が投入されると、リアルタイムモニタ部５０は、スタックエリアやレジスタに対し所定の初期化処理を実行した後、タスク６０１〜６０ｎのうち「実行待ちタスク」に設定されているものをスタータタスクとして起動する（ステップＳ１）。ここでは、例えばタスク６０１をスタータタスクとする。タスク６０１は、「実行タスク」に切り換わると、他のタスク６０２〜６０ｎのうち次に実行すべきものを「実行待ちタスク」に決定し、自タスク、すなわちタスク６０１を「事象発生待ちタスク」に設定する。スタータタスクとして初期処理を終了したタスク６０１は、リアルタイムモニタ部５０から新たに指示されるまで待機する（ステップＳ２）。
【００１９】
タスク部６０の初期処理が終了すると、リアルタイムモニタ部５０は、いったん割り込み要求を禁止すると共に、前述したスーパバイザ機能により、所定の優先順位に沿って「実行待ちタスク」の有無を確認する。「実行待ちタスク」が存在する場合（ステップＳ４：Ｙｅｓ）、当該タスクの状態を「実行タスク」に切り換えた後（ステップＳ５）、割り込み要求を許可し（ステップＳ６）、プログラムカウンタに当該タスクをカウンタ値を設定して該タスクを実行する（ステップＳ７）。
【００２０】
一方、「実行待ちタスク」が無い場合は（ステップＳ４：Ｎｏ）、割り込み禁止を解除し（ステップＳ８）、キー押下や信号受信などハードウェアからの割込み要求が入るまでＣＰＵ１１の動作を停止する（ステップＳ９）。そして、割り込み要求があったとき、当該処理を実行し（ステップＳ１０）、終了後、「実行待ちタスク」の有無を確認するステップＳ３に戻る。
【００２１】
本発明のプログラムトレース方法は、タスクが実行される上記ステップＳ７に適用され、図３に沿って説明したように、当該タスクにおけるデータの読み出し又は書き込み動作をトレース情報により記録する。ＣＰＵ１１は、各タスク６０１〜６０ｎにおけるデータの読み出しを行う際、以下に説明するデータリードトレース関数を用いる。
【００２２】
図５に、データの読み出し手順を示す。ＣＰＵ１１は、当該タスクにおいてデータの読み出しを行う際、読み出すべきデータのアドレス、バイト数、及びブロック転送か否かの情報を前記トレース関数のＩＮＰＵＴパラメータに設定する（ステップＡ１）。そして、後述の関数処理（ステップＡ２）においてトレース関数のＯＵＴＰＵＴパラメータに設定される読み出し結果を取得する（ステップＡ３）。
【００２３】
また、各タスク６０１〜６０ｎにおいてデータの書き込みを行う際には、データライトトレース関数を用い、図６に示すように、ＣＰＵ１１が、データの書き込みアドレス、バイト数、及びブロック転送か否かの情報を前記トレース関数のＩＮＰＵＴパラメータに設定する（ステップＢ１）。そして、後述の関数処理（ステップＢ２）を経てデータを書き込む。
【００２４】
上記ステップＡ２のデータリードトレース関数の処理手順を図７に示す。まず、ＣＰＵ１１は、実行中のタスクに対応するトレースバッファ（２１〜２ｎ）に、当該タスクにおいてデータの読み出しを行う旨と、上記ステップＡ１で設定されたＩＮＰＵＴパラメータとをトレース情報の一部として格納する（ステップＡ２１）。次いで、データの読み出しがブロック転送によるものか否かをＩＮＰＵＴパラメータにより確認する。その結果、ブロック転送である場合（ステップＡ２２：Ｙｅｓ）、読み出し結果となるデータのうち所定量のデータを当該トレースバッファに格納する（ステップＡ２３）。
【００２５】
トレースバッファに格納するデータの上限値は、例えば６４バイト程度に設定することができる。このように、バッファに格納するデータ量に上限を与えることにより、トレースバッファの記憶領域を節約利用することができる。一般的に、ブロック転送における不具合は、転送開始アドレス及び転送バイト数の誤りが主な原因とみなされる。よって、本実施例では、ブロック転送の場合、ＩＮＰＵＴパラメータのアドレス及びバイト数を示すデータをトレース情報に記録し、読み取り結果となるデータは、その全てをトレース情報に記録することなく部分的に記録するにとどめる。
【００２６】
トレースバッファに対する上記作業により、当該タスクについてのトレース情報が、既に説明した図３に示すように記録される。
【００２７】
また、データの読み出しがブロック転送でない場合は（ステップＡ２２：Ｎｏ）、読み出し結果に、状態変数、フラグ及びカウンタ値のような、当該事象の不具合の原因を究明するための重要な値が含まれることから、読み出したデータの全てをトレースバッファに格納する（ステップＡ２４）。これにより、不具合の原因調査に必要なデータを確実に取得することができる。
【００２８】
トレースバッファへのトレース情報の記録を終えると、読み出しデータの全てをデータリードトレース関数のＯＵＴＰＵＴパラメータに格納し（ステップＡ２５）、関数処理を終了する。ＯＵＴＰＵＴパラメータに設定されたデータは、図５に沿って説明したステップＡ３で、読み出し結果として処理される。
【００２９】
また、図８に、データ書き込み動作の際に利用するデータライトトレース関数の処理手順を示す。ＣＰＵ１１は、実行中のタスクに対応するトレースバッファ（２１〜２ｎ）に、データの書き込みを行う旨と、上記ステップＢ１で設定されたＩＮＰＵＴパラメータとをトレース情報の一部として格納する（ステップＢ２１）。
【００３０】
次いで、ブロック転送か否かをＩＮＰＵＴパラメータにより確認し、ブロック転送である場合（ステップＢ２２：Ｙｅｓ）、書き込むべきデータのうち所定量のデータを当該トレースバッファに格納する（ステップＢ２３）。このときのデータ量は、上記の読み出し動作と同様な６４バイト程度を上限とする。また、ブロック転送でない場合は（ステップＢ２２：Ｎｏ）、書き込むデータの全てをトレースバッファに格納し、処理を終了する（ステップＢ２４）。
【００３１】
以上説明したように、実施例のシステム１００によれば、トレース情報の記録にあたって、その対象を各タスクに絞り込み、さらに、ブロック転送の場合に記録するデータ量に上限を設けたことから、タスク１回分のトレース情報量を抑制することができる。これにより、トレースバッファの節約利用が可能となることから、たとえリング形式であっても、より多くのトレース情報を保持することができる。
【図面の簡単な説明】
【００３２】
【図１】本発明による実施例のトレース処理システムの構成を示すブロック図である。
【図２】実施例のプログラム構造を示すブロック図である。
【図３】実施例のトレース情報を説明するための説明図である。
【図４】実施例の情報処理装置の制御手順を示すフローチャートである。
【図５】実施例のデータ読み出し動作の手順を示すフローチャートである。
【図６】実施例のデータ書き込み動作の手順を示すフローチャートである。
【図７】実施例のデータリードトレース関数の処理手順を示すフローチャートである。
【図８】実施例のデータライトトレース関数の処理手順を示すフローチャートである。
【符号の説明】
【００３３】
１００  トレース処理システム
１０  情報処理装置
１１：ＣＰＵ、１２：プログラムメモリ
２０  記憶装置
２１〜２ｎ：トレースバッファ
３０：入力装置、３１：出力装置、３２：通信装置
５０  リアルタイムモニタ部
６０  タスク部
６１：ハンドラ、６０１〜６０ｎ：タスク
【図１】
2005258889.tif 000003
【図２】
2005258889.tif 000004
【図３】
2005258889.tif 000005
【図４】
2005258889.tif 000006
【図５】
2005258889.tif 000007
【図６】
2005258889.tif 000008
【図７】
2005258889.tif 000009
【図８】
2005258889.tif 000010