(57)【要約】【課題】キュー破壊の修復に時間がかかる又は暴走を生じることのないプログラムトレース装置を提供する。【解決手段】トレースバッファ２０、キュー３０および資源チェック部４０を備え、割り込み処理を抜けるときと、タスク切替処理の最初に資源チェック部４０にてよく使用されるメモリの動的管理の使用誤りを、自タスク・自割り込み処理だけの実行までで検出し、他タスクへの影響を阻止する。【選択図】      図１
2004318469.tif 000002
【特許請求の範囲】
【請求項１】
獲得、書き込み又は解放しようとした資源へのアクセス情報を保存しておくトレースバッファと、前記資源の始点から終点までを管理するキューと、前記資源をアクセスしたかをチェックする資源チェック部とを備え、該資源チェック部は、前記資源の使用誤りを自タスク処理だけの実行までで検出することを特徴とするプログラムトレース装置。
【請求項２】
前記資源チェック部は、割り込み処理を抜けるとき又はタスク切替処理の最初に、その回の割り込み処理又は直前にＲＵＮ状態であったタスクが、ありえる範囲で前記チェックを実行することを特徴とする請求項１に記載のプログラムトレース装置。
【請求項３】
前記資源はメモリであり、動的管理を行うことを特徴とする請求項１又は２に記載のプログラムトレース装置。
【請求項４】
前記資源チェック部は、前記動的管理されるメモリが獲得されている状態および使用終了して解放された状態に分けてチェックされることを特徴とする請求項１、２又は３に記載のプログラムトレース装置。
【請求項５】
前記メモリが獲得されている状態は、更に獲得だけされた状態および使用中の状態に分けてチェックされることを特徴とする請求項４に記載のプログラムトレース装置。
【請求項６】
前記使用終了して解放された状態は、更に電源投入後の初期状態および解放された状態に分けてチェックされることを特徴とする請求項４又は５に記載のプログラムトレース装置。
【発明の詳細な説明】
【０００１】
【発明の属する技術分野】
本発明はプログラムトレース装置に関し、例えば、複数のイベント（事象）を優先順位に基づいて処理順番を決めて実行するリアルタイムモニタ（ＯＳ：オペレーティングシステム）により制御されるプログラムのプログラムトレース装置に関する。
【０００２】
【従来の技術】
プログラムトレース装置は、複数の実行単位が並列に動作可能である、例えばマルチプロセスやマルチスレッド等をサポートしている計算機システムにおいて、プログラムの実行動作の解析に供される。
【０００３】
斯かるプログラムトレース装置に関する従来技術として、プロセストレース用テーブルを作成し、プロセスをトレースするプロセストレース装置が開示されている（例えば、特許文献１参照。）。図２を参照して、この従来のプロセストレース装置１００を簡単に説明する。このプログラムトレース装置１００は、キュー１１０、トレースバッファ１２０およびキュー登録チェック部１３０により構成される。キュー１１０は、メモリ資源（リソース）やタイマ資源を管理する。トレースバッファ１２０は、キュー１１０のチェーン構造の変更履歴を保存する。キュー登録チェック部１３０は、資源を使用したいとき（即ち、獲得又は削除したいとき）、キュー１１０のチェーン構造の変更履歴の異常の有無を調べる。
【０００４】
このプログラムトレース装置１００の動作は、次のとおりである。メモリ資源を使用したいときには、欲しいバイト数を指定して、タイマ資源ならタイマを１本使用したいことを指定して、メモリやタイマの獲得処理を呼び出す。呼ばれた側の獲得処理内では、キュー登録チェック部１３０を実行し、キュー１１０のチェーン構造の変更履歴を、保存しておいたトレースバッファ１２０から確認し、履歴とキュー１１０の現状との比較によりキュー１１０の破壊の有無をチェックする。キュー登録チェック部１３０は、異常があれば、プログラム実行をＣＰＵ（中央演算処理装置）のＨＡＬＴ命令により止め、無限ループにし又はリセットをかける等の異常検出処理を実行する。
【０００５】
また、リアルタイムでのタスク処理の誤りを検出するプログラムトレース装置が開示されている（例えば、特許文献２参照。）。図３に示す如く、このプログラムトレース装置２００は、キュー２１０、トレースバッファ２２０および資源チェック部２３０により構成される。ここで、キュー２１０は、メモリ資源やタイマ資源を管理する。トレースバッファ２２０は、キュー２１０により動的管理（使用する間だけ空いているメモリやタイマ等の資源を確保し、使用が終了すると返す）が行われているメモリやタイマ等の資源に対して獲得、書き込み、解放が行われた際の資源へのアクセス情報を保存する。割り込み処理を抜けるとき又はリアルタイムモニタ（ＯＳ）のタスク切換処理の最初に、現在の割り込み処理又は直前にＲＵＮ状態であったタスク処理があり得る範囲で、メモリやタイマ等の資源をアクセスしたか否かをチェックする。
【０００６】
【特許文献１】
特開平１０−３０１８０５号公報（第８頁、第１７図）
【特許文献２】
特開２００２−２５１２９９号公報（第３−４頁、第１図、第３図）
【０００７】
【発明が解決しようとする課題】
上述の如き従来技術によると、資源を使用したいときにキュー破壊を検出しても、どのタスクが何時キュー破壊したか直ちに分からないので、修正に時間がかかってしまう。その理由は、複数の発生事象毎に優先順位に基づいて処理順番を決めて実行するリアルタイムモニタでは、キュー破壊は、以下に説明する如くあらゆる割り込み処理により発生する可能性がある。
【０００８】
第１に、「資源解放忘れ」である。あらゆるタスクと割り込み処理のどこか１箇所でも、プログラムバグによりメモリやタイマ等の獲得した資源を返さないルートが生じた場合には、そのルートを通過する毎に、資源を確保し続け、最後に資源がなくなってしまう。その後、資源がないことを判断している場合には、異常処理等を実行する。しかし、資源がない処理を準備していない場合には、資源がないにも拘らず資源が確保されたルートを実行してしまい、０番地にデータを書き、又は過去に資源が確保されていたときのデータをそのまま使用してしまうため、他のタスクや割り込み処理が、使用中のメモリやタイマを上書きしてしまうことになる。その結果、この後は、暴走してしまう。
【０００９】
第２に、「資源未獲得」である。資源を獲得する処理を、どこか１箇所でも獲得しないルートがあったり獲得した以上のメモリを使用してしまった場合には、正しく資源を獲得したタスクや割り込み処理のデータを上書きしたり、付近のデータを破壊するために、暴走を生じる。
【００１０】
【発明の目的】
本発明は、従来技術の上述した課題に鑑みなされたものであり、上述した「資源解放忘れ」や「資源未獲得」を自動的に試験し、対処可能にする改良されたプログラムトレース装置を提供することを目的とする。
【００１１】
【課題を解決するための手段】
上述の課題を解決するため、本発明によるプログラムトレース装置は、次のような特徴的な構成を採用している。
【００１２】
（１）獲得、書き込み又は解放しようとした資源へのアクセス情報を保存しておくトレースバッファと、前記資源の始点から終点までを管理するキューと、前記資源をアクセスしたかをチェックする資源チェック部とを備え、該資源チェック部は、前記資源の使用誤りを自タスク処理だけの実行までで検出するプログラムトレース装置。
【００１３】
（２）前記資源チェック部は、割り込み処理を抜けるとき又はタスク切替処理の最初に、その回の割り込み処理又は直前にＲＵＮ状態であったタスクが、ありえる範囲で前記チェックを実行する上記（１）のプログラムトレース装置。
【００１４】
（３）前記資源はメモリであり、動的管理を行う上記（１）又は（２）のプログラムトレース装置。
【００１５】
（４）前記資源チェック部は、前記動的管理されるメモリが獲得されている状態および使用終了して解放された状態に分けてチェックされる上記（１）、（２）又は（３）のプログラムトレース装置。
【００１６】
（５）前記メモリが獲得されている状態は、更に獲得だけされた状態および使用中の状態に分けてチェックされる上記（４）のプログラムトレース装置。
【００１７】
（６）前記使用終了して解放された状態は、更に電源投入後の初期状態および解放された状態に分けてチェックされる上記（４）又は（５）のプログラムトレース装置。
【００１８】
【発明の実施の形態】
以下、本発明によるプログラムトレース装置の好適実施形態の構成および動作を、添付図面を参照して詳細に説明する。
【００１９】
図１は、本発明によるプログラムトレース装置の好適実施形態のシステム構成図である。このプログラムトレース装置１０は、複数のタスクや割り込み処理が動作可能な計算機を対象としている。図１のプログラムトレース装置１０は、トレースバッファ２０、キュー３０および資源チェック部４０により構成されている。
【００２０】
キュー３０は、メモリ資源を管理する。即ち、キュー３０は、メモリ資源を使用したいとき、欲しいバイト数を指定して、メモリの獲得処理を呼ぶ。呼ばれた側の獲得処理内では、始点から空いている資源を捜し、空いていれば呼んだ側に獲得できた場所を伝える。獲得処理内では、多くの場合、メモリ資源はキュー３０によってチェーン構造を取って管理している。この方法は以下のとおりである。
【００２１】
メモリ資源を管理するキュー３０の始点に、使っている１つのメモリ資源のアドレスを格納しておく。そこで示されたアドレスの先には、次に使用している１つのメモリ資源のアドレスを格納する。そのアドレスの先には、更に次に使用している１つのメモリ資源のアドレスを格納し、使用しているメモリ資源はここまでで終りということを示す終点まで、次のメモリ資源のアドレスを格納する。
【００２２】
次に、トレースバッファ２０は、キュー３０により管理しているメモリ資源を獲得、書き込み又は解放する際に、メモリ資源へのアクセス情報を保存しておく。資源チェック部４０は、割り込み処理を抜けるときと、タスク切替処理の最初に、あり得る範囲でメモリ資源をアクセスしたかをチェックする。
【００２３】
次に、図１に示すプログラムトレース装置１０の全体動作を詳細に説明する。先ず、各タスク・割り込み処理がキュー３０で管理しているメモリ資源を獲得、書き込み又は解放したとき、トレースバッファ２０に資源へのアクセス情報を保存する。保存するのは、次の値である。
【００２４】
（１）獲得時
▲１▼資源の状態を「獲得だけされた状態」にする。
▲２▼獲得した資源のアドレス・範囲を格納する。
▲３▼獲得した処理番号、書き込みしてよい処理番号、解放してよい処理番号を格納する。
【００２５】
（２）書き込み時
▲１▼資源の状態を「書き込み済状態」にする。
▲２▼書き込みした処理番号を格納する。
▲３▼書き込みした値を格納する（資源により現実的に格納できる量のみ）。
【００２６】
（３）解放時
▲１▼資源の状態を「解放状態」にする。
▲２▼解放した処理番号を格納する。
【００２７】
次に、割り込み処理を抜けるとき又はタスク内でタスク間通知・事象発生待ち等のタスク切替を伴うＯＳの処理を実行した後に、資源チェック部４０で、後述する（Ａ）、（Ｂ）、（Ｃ）および（Ｄ）の判断を行い、今回の割り込み処理又はＲＵＮ状態であったタスクが、資源に対し異常な処理を行ってしまったかを検出する。
【００２８】
即ち、本発明は、よく使用されるプログラム構造である、多数の事象発生毎に優先順位に基づき処理順序を決めて実行するリアルタイムモニタにより制御するプログラムにおいて、よく使用されるメモリの動的管理（即ち、使用期間だけ空いているメモリを確保し、使用後に解放する）の使用誤りを自タスク・自割り込み処理だけの実行までで検出し、自タスク・自割り込み処理の誤りを他タスクへ影響させないＯＳを提供することを意図する。そこで、割り込み処理を抜けるときと、リアルタイムモニタ（ＯＳ）のタスク切り換え処理の最初に、その回の割り込み処理又は直前にＲＵＮ状態であったタスクが、予め宣言した範囲内でメモリをアクセスしたかチェックする処理を実行する。
【００２９】
また、各タスクの状態が遷移したとき、各状態で設計どおりのメモリを解放しているか又は解放漏れがないかチェックする処理を実行する。メモリチェックは、以下の方法により行う。即ち、動的メモリは、タスク処理・割り込み処理が使用したいため獲得されている状態（第１状態）および装置の電源投入後の初期状態や、タスク処理・割り込み処理が獲得したメモリを使用し終わったため、解放している状態（第２状態）の２つの状態に大別される。この第１状態を（Ａ）および（Ｂ）に、また第２状態を（Ｃ）および（Ｄ）に分けて、以下に詳細に説明する。
【００３０】
（Ａ）獲得だけされた状態
獲得だけして使用していなければ、メモリの内容値は、現在のタスク処理又は割り込み処理実行前と変わっていないはずである。割り込み処理を抜けるときと、ＯＳのタスク切替処理の最初のタイミングで、獲得だけされたメモリ値を読み出し、その前の回の割り込み処理又は直前にＲＵＮ状態であったタスクのときの値から変わっていれば、今回の割り込み処理又はＲＵＮ状態であったタスクが、獲得したメモリに対して異常な処理を行ってしまったことになる。このとき、メモリが設計量の、例えば８０％を使用してしまった等の使用量をチェックして異常を判断する又はそのタスクの状態で予め設計したメモリ獲得状態であるか判断する。
【００３１】
（Ｂ）メモリ獲得済みで設計通りの正しい処理が獲得したメモリを書き換え、メモリを使用中の状態
このときは、メモリ値は設計どおりの正しい処理が書き換えた値と同一値のはずである。更に、獲得したアドレスに、獲得した範囲内で設計どおりの正しい処理が書き換えたことも、獲得だけしたときの情報と予め設計で決めている処理番号等を確認することでチェックできる。割り込み処理を抜けるときと、ＯＳのタスク切替処理の最初のタイミングで同一値か、アドレス・範囲・書き込み処理番号のチェックを行い、異常を検出する。
【００３２】
（Ｃ）電源投入後の初期状態
メモリの内容値は、初期値になっているはずである。特に初期値を設定しないメモリであれば、電源投入時の値から変化がないはずである。割り込み処理を抜けるときと、ＯＳのタスク切替処理の最初のタイミングで同一値かチェックして検出する。
【００３３】
（Ｄ）解放された状態
メモリの内容値は、解放されたときの値から変化がないはずである。割り込み処理を抜けるときと、ＯＳのタスク切替処理の最初のタイミングで同一値かチェックして検出する。
【００３４】
上述のようにして、動的管理をしているメモリの資源の使用誤りを自タスク・割り込み処理だけの実行までで検出可能である。
【００３５】
以上、本発明のプログラムトレース装置の好適実施形態の構成および動作を詳述した。しかし、斯かる実施形態は、本発明の単なる例示に過ぎず、何ら本発明を限定するものではない。本発明の要旨を逸脱することなく、特定用途に応じて種々の変形変更が可能であること、当業者には容易に理解できよう。
【００３６】
【発明の効果】
以上の説明から明らかな如く、本発明のプログラムトレース装置は、次の如き実用上の顕著な効果を有する。即ち、メモリの資源の使い方の誤りを自タスク・自割り込み処理だけの実行までで検出し、自タスク・自割り込み処理の誤りを他タスクへ影響させることがない。
【図面の簡単な説明】
【図１】本発明によるプログラムトレース装置の好適実施形態のブロック図である。
【図２】プログラムトレース装置の第１従来例のブロック図である。
【図３】プログラムトレース装置の第２従来例のブロック図である。
【符号の説明】
１０  プログラムトレース装置
２０  トレースバッファ
３０  キュー
４０  資源チェック部
【図１】
2004318469.tif 000003
【図２】
2004318469.tif 000004
【図３】
2004318469.tif 000005