JP2005107757A - プログラムの暴走検出方法およびプログラムの暴走検出装置 - Google Patents

プログラムの暴走検出方法およびプログラムの暴走検出装置 Download PDF

Info

Publication number
JP2005107757A
JP2005107757A JP2003338945A JP2003338945A JP2005107757A JP 2005107757 A JP2005107757 A JP 2005107757A JP 2003338945 A JP2003338945 A JP 2003338945A JP 2003338945 A JP2003338945 A JP 2003338945A JP 2005107757 A JP2005107757 A JP 2005107757A
Authority
JP
Japan
Prior art keywords
runaway
task
runaway detection
program
interrupt
Prior art date
Legal status (The legal status is an assumption and is not a legal conclusion. Google has not performed a legal analysis and makes no representation as to the accuracy of the status listed.)
Pending
Application number
JP2003338945A
Other languages
English (en)
Inventor
Masahiro Sekiguchi
雅博 関口
Current Assignee (The listed assignees may be inaccurate. Google has not performed a legal analysis and makes no representation or warranty as to the accuracy of the list.)
Panasonic Holdings Corp
Original Assignee
Matsushita Electric Industrial Co Ltd
Priority date (The priority date is an assumption and is not a legal conclusion. Google has not performed a legal analysis and makes no representation as to the accuracy of the date listed.)
Filing date
Publication date
Application filed by Matsushita Electric Industrial Co Ltd filed Critical Matsushita Electric Industrial Co Ltd
Priority to JP2003338945A priority Critical patent/JP2005107757A/ja
Publication of JP2005107757A publication Critical patent/JP2005107757A/ja
Pending legal-status Critical Current

Links

Images

Landscapes

  • Debugging And Monitoring (AREA)

Abstract

【課題】 タスクの起動順序を考慮する必要なく、さらに他タスクや割込みへの処理遷移を考慮した形で、暴走発生から時間の経過が少なく、自タスクの暴走検出を行うことを目的とする。
【解決手段】 従来の実行対象となるタスクの切替えの際に退避・保存、復帰・設定していた各タスクのコンテキスト情報112に加えて暴走検出用タイマーカウント値・情報111を合わせて退避・復帰することで、他タスクへの遷移など意識することなく自タスクの処理内でのシーケンシャルな処理として考慮して暴走検出のための処理を追加すればよく、タスクの起動順序を考慮する必要なく、さらに他タスクや割込みへの処理遷移を考慮した形で、暴走発生から時間の経過が少なく、自タスクの暴走検出を行うことができる。
【選択図】 図1

Description

本発明は、ソフトウェアプログラムの暴走検出方法および検出装置で、特にオペレーティング・システム(以下、OSと称す)を使用したプログラムの暴走検出方法およびプログラムの暴走検出装置に関する。
従来のOSを使用しないソフトウェアプログラムの暴走検出方法を説明する。
従来のプログラムの仕様として、処理A、処理B、処理Cを順次繰り返すものとした場合、全体の一連の処理で暴走を検出したいときは、全処理の最初にウオッチドックタイマを設定し、最後(今回の場合は処理Cの終了後)にウオッチドックタイマのクリアを行っていた。また、個別の処理、例えば処理Bで検出したい場合は、処理Bの最初にウオッチドックタイマを設定し、処理Bの終了時にウオッチドックタイマのクリアを行っていた。
一方、OSを使用する場合、OSの処理単位となるタスクでの資源の共有や同期通信などの機能、手段をOSが提供してくれるため、その分ユーザの負担が減るという反面、自タスクが終了後、次に起動されるタスクがどれになるのかが分かりにくいなどシーケンシャルな処理の流れがつかみにくいという欠点があり、一定時間内に実行される処理を把握することが困難となっていた。
これはOSがタスクの起動順序を管理しているためであり、起動するタスクを要求するなど、ユーザから指示することはできるが、その要求が即時実現されることが保障されているわけではない。
以下、図11,図12,図13を用いて具体的に説明する。
図11は従来の一定時間経過後にタスクの起動を要求する場合のタスクの遷移を説明する図,図12は従来のすぐにタスクの起動を要求する場合のタスクの遷移を説明する図,図13は従来のタスクの遷移を例示した図である。
あるタスクが別のタスクを起動するとしたとき、ユーザーはOSに対して、どのタスクをいつ起動するかという指示をする。このとき、起動可能なタスクが無い場合には、要求どおりに自タスク終了後に起動要求されたタスクがすぐに実行されることになり、処理の流れはわかりやすい。
しかし、ある一定時間経過後にタスクの起動を要求する場合には、起動要求したタスクは実行中のタスクが終了してから実行される。但し、5ms経過時点でどのタスクが実行されているかによって、実行順序が変わってくる。
図11において、現在のタスクの実行および待ち状態が状態1101,要求されたタスクをタスクEとすると、まずタスクA実行中に5ms経過した時は状態1102のようにタスクA→E→B→C→Dのような実行順序になり、タスクBが実行中に5ms経過した時には状態1103のような実行順序となるなど、タスクB,C等の実行待ち状態のタスクの実行時間により起動される順序が変化したり、5ms経過してから実行中のタスクが終了するまでの時間により、タスクEが起動されるまでの時間が変化してしまう。
また、すぐに起動するように要求していた場合でも、図12のようにタスクA実行中にタスクEの起動要求を行うと通常、状態1202のような実行順序になるが、起動要求したタスクEよりタスクBが優先度が高い場合には状態1203のように、さらにタスクA実行中に優先度の高いタスクCが割り込んでくると、状態1204のような実行順序となり、タスクEよりも先に実行されるタスクがあり得るため、タスクの実行順序がユーザが思っているものと変わってしまうので、どの処理の後に実行されるのか判断できなくなる。
そのため、一定時間内に実行される処理の判断が難しく、ウォッチドッグタイマのクリアのように一定時間内で行う必要のある処理をこの時点で追加するかを判断することが難しい。その結果、これまでは全タスクのプログラム中のいたる箇所にウオッチドックタイマのクリア処理を追加するという処理で対応してきた。しかし、この方法では、タスクの数が増えればウォッチドッグタイマのクリア処理も同じだけ多くなり、処理のミスやROM容量が増加するため、ROM容量に余裕のないシステムでは問題となってくる。また、あらゆる箇所にクリア処理を入れるとしても、実際にどこにどこまで入れればよいのかを判断するのが難しく、暴走検出するという意図からは離れたものになる可能性がある。
タイムシェアリング機能を搭載したOSの場合は、問題がより顕著となってくる。タイムシェアリング機能に対応したOSでは、全てのタスクに一定時間の実行権限を与えるというもので、あるタイミングでOSが自動的にタスクを切替えていく。この場合、あるタスクの処理が暴走していても、他の実行可能状態のタスクが正常に動作していれば、切替えが発生してウォッチドッグタイマをクリアしてしまうと、暴走しているにもかかわらず、暴走状態を検出できなくなるという問題も発生する。
このタイムシェアリング機能を搭載したOSに対しては、ハードウェアの面からの解決策として、ウォッチドッグタイマをタスクの数だけ複数個内蔵するという技術がある。これは、ウォッチドッグタイマとタスクとを一対一に関連付け、それぞれのウォッチドッグタイマが、関連するタスクが起動されたときにカウントを開始し、そのカウントはタスクの実行中に行われたウォッチドッグタイマのクリア処理によってのみクリアされる。タスクが実行されず、ウォッチドッグタイマのクリア処理が実行されない時は、ウォッチドッグタイマがオーバーフローすることになる。いずれのウォッチドッグタイマがオーバーフローしても、マイコンはいずれかのタスクが暴走していると判断し、リセット動作を行う(例えば、特許文献1参照)。
しかし、上述した方法でも、タスクの数だけウォッチドッグタイマを内蔵しなければならないという問題点がある。更に、実行を中断しているタスクのウォッチドッグタイマも継続してカウント動作するため、ウォッチドッグタイマのクリアからタスクの暴走検出と判断する時間までの間に、タスクを中断している状態があると中断中にタスクが暴走したと判断してしまうといった問題もある。
図13はタスクA、B、Cの3つのタスクで遷移する様子を時間を横軸にとって示している。タスクAではT1とT2の処理で暴走を検出するものであり、処理の初めと終わりでウオッチドックタイマのクリア処理を入れる。図13の例では、t1とt6でウオッチドックタイマのクリア処理を入れ、時間(t2-t1)+時間(t6−t5)がある特定時間MAXよりも長い場合にはプログラムが暴走したと判断する。しかし、今回の場合タスクAの処理中にタスクB、Cに実行が遷移しているため、タスクAでのウオッチドックタイマのクリアから次のクリアまでに時間(t6−t1)がかかっていることになる。この時間(t6−t1)がある特定時間MAXよりも長かった場合に、上述した問題の通り、誤ってタスクAが暴走したと判断してしまうことになる。
また、上述した技術(特許文献1)に関する問題点の解決策として、OSのタスク切替え処理時、具体的にはタスク終了処理を行うシステムコール実行時に、ウオッチドックタイマのクリア処理を行うという技術がある(例えば、特許文献2参照)。
これは、従来通りにウオッチドックタイマの数に制限がなく、各タスクの処理の中でウオッチドックタイマのクリア処理を埋め込むことも全く必要が無いため、一部の問題が回避されている。タイムシェアリング機能を搭載したOSにおける問題として挙げたタスクの中断時間をもカウントして誤って暴走したと判断することは無くなったものの、より正確に暴走を判定することはできていない。つまり、タスク切換え時に暴走判定用のタイマをクリアしているために、切換え前に既に暴走していた場合でも該タスクに復帰してから再度カウントをはじめるために暴走を判定できたとしても実際に暴走してからはかなりの時間が経過している場合がある。また、最悪の場合には再度タスク切換えが発生してしまうと暴走判定ができないといった問題を抱えている。
更に、上記技術の解決策として、タスク終了処理を行うシステムコール実行時に対策を講じることとなっているが、システムコールではなく、タイマや外部要因での割込みによりタスク切換えは考慮されておらず、割込み処理にて暴走した場合には、それを判定することはできない。
特開平4−155543号公報 特開平10−231546公報
OSを使用したシステムでは、タスクという単位で処理を分割することで、タスク間での影響を最小限にしてある程度独立した設計を可能としていたが、その反面、タスクの起動順序がOSに依存するため把握し辛く、タスク間での同期設計が困難であった。そのため、前述の従来のソフトウェアプログラムでの暴走検出方法においては、一定周期で行う必要のあるウォッチドッグタイマのクリア処理が効率よくできず、全タスクのあらゆる複数箇所にクリア処理を追加するといった対策が必要となっていた。しかしこの場合、タスク数の増加に伴ってROM容量の増加や、処理の追加箇所の判断が困難である等の問題が発生するものであった。
上述の問題の解決策として従来の技術で述べた、OSのタスク切替え処理時にウオッチドックタイマのクリア処理を追加する対策は、暴走していないにもかかわらずタスク遷移の関係で暴走と判断してしまうことはなくなる。しかし、タスク遷移が発生した時点でOSが自動でウオッチドックタイマをクリアしてしまうため、遷移前に暴走していた場合でも自タスクに復帰後から検出開始となり、実際に暴走していた時点からは十分に時間が経過したときに初めて暴走と判断することになり、暴走の検出が困難になったり不可能になるという問題点があった。
本発明のプログラムの暴走検出方法およびプログラムの暴走検出装置は、上記問題点を解決するために、タスクの起動順序を考慮する必要なく、さらに他タスクや割込みへの処理遷移を考慮した形で、暴走発生から時間の経過が少なく、自タスクの暴走検出を行うことを目的とする。
上記目的を達成するために、本発明の請求項1記載のプログラムの暴走検出方法は、プログラムにおける、各タスクの処理時間や割込みの処理時間を計測することによりプログラムの暴走を検出する方法であって、タスクの切替時に暴走検出用タイマーのカウントを停止する工程と、前記暴走検出用タイマーのカウント値を現タスクのカウント値として保存する工程と、現タスクのコンテキスト情報を保存する工程と、次タスクのコンテキスト情報を取得する工程と、前記次タスクのコンテキスト情報を設定する工程と、前記次タスクの保存された前記暴走検出用タイマーのカウント値を取得する工程と、前記暴走検出用タイマーのカウントを開始して暴走検出を開始する工程と、前記次タスクの処理を開始する工程とを有し、タスクが切替わっても、あらかじめ保存しておいた次タスクのカウント値からカウントを再開することを特徴とする。
請求項2記載のプログラムの暴走検出方法は、プログラムにおける、各タスクの処理時間や割込みの処理時間を計測することによりプログラムの暴走を検出する方法であって、割込み要求発生時に暴走検出用タイマーのカウントを停止する工程と、現タスクのコンテキスト情報を保存する工程と、前記割込み処理の暴走判定時間を取得する工程と、前記暴走検出用タイマーのカウントを開始して暴走検出を開始する工程と、前記割込み処理を開始する工程とを有し、割込み発生時に、あらかじめ設定しておいた割込み処理の暴走判定時間を用いて暴走を検出することを特徴とする。
請求項3記載のプログラムの暴走検出方法は、請求項1または請求項2のいずれかに記載のプログラムの暴走検出方法において、前記暴走検出用タイマーとしてウォッチドックタイマーを用いることを特徴とする。
請求項4記載のプログラムの暴走検出方法は、請求項1または請求項2のいずれかに記載のプログラムの暴走検出方法において、前記暴走検出用タイマーとしてシーケンシャルイベントが一定時間内で成立しない場合にブレークするタイムアウトブレーク機能を用いることを特徴とする。
請求項5記載のプログラムの暴走検出方法は、プログラムにおける、各タスクの処理時間や割込みの処理時間を計測し、その内部処理をトレースすることによりプログラムの暴走を検出する方法であって、前記トレースを停止する工程と、タスクの切替時に暴走検出用タイマーのカウントを停止する工程と、前記暴走検出用タイマーのカウント値を現タスクのカウント値として保存する工程と、現タスクのコンテキスト情報を保存する工程と、次タスクのコンテキスト情報を取得する工程と、前記次タスクのコンテキスト情報を設定する工程と、前記次タスクの保存された前記暴走検出用タイマーのカウント値を取得する工程と、前記暴走検出用タイマーのカウントを開始して暴走検出を開始する工程と、前記トレースを開始する工程と、前記次タスクの処理を開始する工程とを有し、タスクが切替わっても、あらかじめ保存しておいた次タスクのカウント値からカウントを再開することができ、さらに、前記トレースを行うことにより暴走箇所を特定することを特徴とする。
請求項6記載のプログラムの暴走検出装置は、プログラムにおける、各タスクの処理時間や割込みの処理時間を計測することによりプログラムの暴走を検出する装置であって、タスクの切替時にコンテキスト情報や暴走検出情報を退避・復帰してタスクの切替を制御するタスク切替装置と、各タスクの処理時間を計測して前記プログラムが定める時間を経過した時に暴走したことを通知する暴走検出部と、前記コンテキスト情報や前記暴走検出情報を保存するコンテキスト保存部とを有し、タスクが切替わっても、あらかじめ保存しておいた次タスクの暴走検出情報を用いて処理時間を計測することを特徴とする。
請求項7記載のプログラムの暴走検出装置は、プログラムにおける、各タスクの処理時間や割込みの処理時間を計測することによりプログラムの暴走を検出する装置であって、各割込みにおける暴走判定時間を設定する割込み暴走判定時間設定部と、前記暴走判定時間を管理する割込み暴走判定時間管理部と、割込み要求時にコンテキスト情報を退避・復帰してタスクの切替を制御するタスク切替装置と、各タスクの処理時間を計測して前記暴走判定時間を経過した時に暴走したことを通知する暴走検出部と、前記コンテキスト情報を保存するコンテキスト保存部とを有し、割込み発生時に、あらかじめ設定しておいた割込み処理の暴走判定時間を用いて暴走を検出することを特徴とする。
請求項8記載のプログラムの暴走検出装置は、請求項6または請求項7のいずれかに記載のプログラムの暴走検出装置において、前記暴走検出部がウオッチドックタイマ機能を用いることを特徴とする。
請求項9記載のプログラムの暴走検出装置は、請求項6または請求項7のいずれかに記載のプログラムの暴走検出装置において、前記暴走検出部において、シーケンシャルイベントが一定時間内で成立しない場合にブレークするタイムアウトブレーク機能を用いることを特徴とする。
請求項10記載のプログラムの暴走検出装置は、請求項6または請求項7のいずれかに記載のプログラムの暴走検出装置において、イベントの発生を検知して通知するイベント生成部と、前記タスク切替部からの指示でトレース生成機能を制御するトレース制御部と、トレース情報を格納するトレースメモリと、前記トレース情報を前記トレースメモリに格納するトレース情報生成部とを有し、トレースを行うことにより暴走箇所を特定することを特徴とする。
以上により、タスクの起動順序を考慮する必要なく、さらに他タスクや割込みへの処理遷移を考慮した形で、暴走発生から時間の経過が少なく、自タスクの暴走検出を行うことができる。
本発明によると、従来の実行対象となるタスクの切替えの際に退避・保存、復帰・設定していた各タスクのコンテキスト情報に加えて暴走検出用タイマーカウント値・情報を合わせて退避・復帰することで、他タスクへの遷移など意識することなく自タスクの処理内でのシーケンシャルな処理として考慮して暴走検出のための処理を追加すればよく、タスクの起動順序を考慮する必要なく、さらに他タスクや割込みへの処理遷移を考慮した形で、暴走発生から時間の経過が少なく、自タスクの暴走検出を行うことができる。
また、あらかじめ各割込み(種別)ごとの暴走判定時間を設定・登録しておくことで、ユーザは割込みプログラムの中に暴走検出のための手続きを追加する必要がなく、割込み処理での暴走を検出することが可能となる。
さらに、限られた資源であるトレースメモリに暴走判定対象としているタスクおよび割込みの処理に関する情報のみ格納する手段を提供し、暴走検出機能を補助することで、暴走箇所を容易に特定することが可能となる。
本発明は、各タスクおよび割込みを切替えて動作させるOSを使ったプログラムの暴走検出装置にあって、時間を計測し時間経過により所定の処理を行う暴走検出部と、OSが有する切替発生時にコンテキスト情報を保存するコンテキスト退避部ならびに動作させるタスクのコンテキスト情報に切替えるコンテキスト復帰部と、暴走検出部の情報を保存する暴走検出情報退避部ならびに動作させるタスクの暴走検出情報に切替える暴走検出情報復帰部とを備え、切替えが発生した際に保存しておいた動作させるタスク用のコンテキストと同様に暴走検出情報を取得し暴走検出部に設定し対象タスクの切替え前の状態から暴走検出部により暴走の検出を再開できることを特徴とする。
これによって、利用者がOSによる切替え処理を意識することなくあたかも時間軸で連続した処理として扱うことができ、また、実際にその処理にかかった時間を計測し、それをもとにして暴走検出ができる。
つまり従来技術の説明で挙げた図13では、タスクB、Cへの実行遷移にかかわらず、タスクAの暴走を判定するために時間(t2−t1)+時間(t6−t5)がある特定時間MAXを超えていないかどうかを確認して、誤りなく暴走検出を行うことができる。
ここで、前記暴走検出部は、ユーザがプログラム、またはデバッガの機能を使って少なくとも2点間での時間の計測ができ、その計測時間が所定の時間を越える場合にイベントを発生させるもので、マイコンのウオッチドックタイマ機能、タイムアウトブレーク機能が挙げられる。
また、各タスクおよび割込みを切替えて動作させるOSを使ったプログラムの暴走検出装置において、時間を計測し時間経過により所定の処理を行う暴走検出部と、OSが有する切替発生時にコンテキスト情報を保存するコンテキスト退避部ならびに動作させるタスクのコンテキスト情報に切替えるコンテキスト復帰部と、各割込みの暴走を判断する時間を設定する割込み暴走判定時間設定部と、管理する割込み暴走判定時間管理部とを備え、割込みへの切替えが発生した際に割込み暴走判定時間管理部が管理する該割込みの暴走判定時間を取得、暴走検出部に設定、計測を開始し、本割込み処理が終了した時点で時間が経過していない場合には暴走検出部に計測終了を要求することを特徴とする。
これによって、利用者は各割込みごとの暴走判定時間を容易に、OSが割込みから復帰までを計測し、割込み処理における暴走検出ができる。
また、トレースの有効・無効を制御するトレース機能制御部と、トレース制御部によりトレース情報を生成するトレース情報生成部とを備え、タスクまたは割込みへの切替えが発生した際に暴走検出部へ設定する次タスクまたは割込みに関する暴走検出情報をもとにトレース機能を制御してデバッグ対象とするタスクおよび割込みに関する処理のトレースを取得し、暴走検出を補助することを特徴とする。
これによって、利用者がデバッグ対象とするタスクまたは割込みの暴走を検出できるとともに、それにトレース情報をリンクさせて、暴走箇所の特定が容易にできる。
以下、本発明の実施の形態について、図を用いて説明する。
(実施の形態1)
まず、実施の形態1について、図1,図2,図3,図4を用いて説明する。
図1は本発明の実施の形態1におけるプログラムの暴走検出装置の構成を示す図,図2は本発明の暴走検出部の構成を示す図,図3は本発明の実施の形態1における暴走検出方法を説明するフローチャート,図4は本発明のコンテキスト保存部によるタスクごとのコンテキスト情報を例示する図である。
図1において、タスク切替装置100は、タスクの切替えを実現するために現タスクの必要な情報、例えば、マイコンのレジスタ値を含むコンテキスト情報112を所定の領域に退避・保存するコンテキスト退避部101と、タスク切替部102と、コンテキスト保存部110の所定領域に退避された切替えて動作させるタスクのコンテキスト情報114をコンテキスト保存部110から復帰・設定するコンテキスト復帰部103と、切替え時の暴走検出部120の情報を暴走検出情報111としてコンテキスト保存部110に退避・保存する暴走検出情報退避部104と、切替えて動作させるタスクの暴走検出情報113をコンテキスト保存部110から復帰、暴走検出部120に設定する暴走検出情報復帰部105とから構成される。
暴走検出部120への暴走検出のための情報設定は、ユーザプログラム130であるタスク部131およびタスク独立部132によって制御される。
図2において、暴走検出部120は、一定間隔でカウントアップまたはダウンするタイマ部210と、ユーザプログラム130またはタイマ部210からのカウント要求を受け付けるカウント値制御部211と、カウント値制御部211からの要求によりカウント値213を変更・管理し、カウント値213がオーバフローまたはアンダーフローした場合にマイコン200にその旨を通知するカウント値管理部212から構成される。
この実施の形態では、各タスクならびに割込みなどのタスク独立部がそれぞれ個別に暴走検出部120を使った暴走検出をする状況下において、タスク遷移などの条件に関係なく精度高く暴走が検出されるべく、タスクならびにタスク独立部とをスケジューリングして動作、実行させるために必要なコンテキストの保存と復帰させる際に、暴走検出部120に関する情報もその対象とするものである。
以上のように構成された本発明の実施の形態1における暴走検出方法について説明する。
例えば、セマフォー等OSが提供する資源の獲得を要求して待ち状態に入ったり、OS資源を解放することで待ち状態にあった優先度の高いタスクが実行可能となったりするような、現在動作しているタスク(タスクAとする)が発行したシステムコールによって別のタスク(タスクBとする)が実行対象となるタスクの切り替えが発生する場合(ステップ301)、まず、暴走検出情報退避部104は暴走検出部120に対して暴走検出用タイマーのカウント停止を要求する(ステップ311)。そして、暴走検出部120から現カウント値213を取得し、コンテキスト保存部110に保存・管理を依頼する(ステップ312)。ここで、コンテキスト保存部110は依頼にもとづいてタスクAの暴走検出カウント値404をタスクA用の管理領域に保存する。
続いて、コンテキスト退避部101はタスクAのコンテキスト情報403を取得し、コンテキスト保存部110に保存・管理を依頼する(ステップ302)。コンテキスト復帰部103は次のタスクであるタスクB用のコンテキスト情報をコンテキスト保存部110から取得するように要求する。コンテキスト保存部110は依頼にもとづき、コンテキスト情報格納領域から検索しタスクBのコンテキスト情報405を取得してコンテキスト復帰部103に渡す(ステップ303)。コンテキスト復帰部103はタスクB用のコンテキスト情報405をマイコンのレジスタなどに設定する(ステップ304)。
次に、暴走検出情報復帰部105はコンテキスト情報と同様にタスクB用の暴走検出用タイマーカウント値をコンテキスト保存部110に取得・要求する。コンテキスト保存部110は同じくタスクB用の暴走検出用タイマーカウント値406を暴走検出情報復帰部105に渡す(ステップ313)。取得した次タスクであるタスクBの暴走検出用タイマーカウント値が0以外の場合は(ステップ314)、暴走検出情報復帰部105は暴走検出部120に対して取得した暴走検出用タイマーカウント値を設定し(ステップ315)、暴走検出用タイマーのカウント開始を要求する(ステップ316)。暴走検出用タイマーカウント値が0の場合は、何もしない。最後に、タスク切替部102が次タスクであるタスクBへの実行に切替えて(ステップ305)、タスク切替え処理は終了となる。この一連の処理がタスク切替えが発生した場合に行われることになる。
上記のように、従来の実行対象となるタスクの切替えの際に退避・保存、復帰・設定していた各タスクのコンテキスト情報に加えて暴走検出用タイマーカウント値・情報を合わせて退避・復帰することで、他タスクへの遷移など意識することなく自タスクの処理内でのシーケンシャルな処理として考慮して暴走検出のための処理を追加すればよく、ユーザへの負担が軽減され、かつ暴走していない場合には判断されず、暴走した場合には正確にすばやく検出することが可能となる。
なお、以上の説明では、暴走検出部120をマイコンが提供するウオッチドックタイマー機能を想定して行ったが、ある2点間での経過時間を計測することができ、計測時間が所定の時間を越えた場合に、ユーザプログラムあるいはユーザに何らかの形で通知(例えば、マイコンリセットが発生する、プログラムが停止しデバッガでのデバッグ可能状態となる、等)されるものであれば何でもよい。
また、以上の説明では、コンテキスト保存部110によるコンテキスト情報ならびに暴走検出カウント値情報の管理方法の一例として図4を示したが、管理方法はこれにこだわらず各タスクのコンテキスト情報ならびに暴走検出カウント値情報が区別できればどんな形式でよい。
(実施の形態2)
次に、実施の形態2について、図5,図6,図7,図8を用いて説明する。
図5は本発明の実施の形態2におけるプログラムの暴走検出装置の構成を示す図であり、実施の形態1(図1)の構成要素から暴走検出情報退避部104と、暴走検出情報復帰部105と、暴走検出情報111、113とを除いた構成と、各割込みにおける最長処理時間、つまり暴走を判定する時間を設定する割込み暴走判定時間設定部501と、割込み暴走判定時間設定501で設定された割込み暴走判定時間503を管理し、タスク切替部102から要求される所定の割込みに対する、割込み暴走判定時間をタスク切替部102に渡す、割込み暴走判定時間管理部502とから構成される。図6は本発明の実施の形態2における多重割込みを考慮したプログラムの暴走検出装置の構成を示す図,図7は割込み暴走判定時間管理部による割込み種別ごとの暴走判定時間情報を例示する図,図8は本発明の実施の形態2における暴走検出方法を説明するフローチャートである。
以上のように構成された本発明の実施の形態2における暴走検出方法について説明する。
現在いずれかのタスクが動作しているものとして、外部要因(イベント)等によって割込み(ここでは割込みAとする)の要求が発生した場合(ステップ801)、まず、コンテキスト退避部101は動作中のタスクのコンテキスト情報を取得し、コンテキスト保存部110に保存・管理を依頼する(ステップ302)。タスク切替部102は所定の割込みへ切替える前に、暴走検出部120に対して暴走検出用タイマーのカウントの停止を要求する(ステップ311)。そして、割込み暴走判定時間管理部502から割込みAの割込み暴走判定時間503を取得する(ステップ803)。
実際には、割込み暴走判定時間管理部502は、割込みAの暴走判定時間702を検索し、割込みAの暴走判定時間情報702をタスク切替部102に返す。この取得した暴走判定時間が0以外であれば(ステップ804)、割込み暴走判定時間設定部501により取得した暴走判定時間を暴走判定部120のタイマーのカウント値として設定し(ステップ315)、暴走検出用タイマーのカウント開始を要求する(ステップ316)。暴走検出用タイマーカウント値が0の場合は、そのままステップ316のカウント開始要求処理を行う。最後に、タスク切替部102が該割込み処理への実行に切替えて(ステップ802)、切替え処理は終了となる。この一連の処理が割込み要求が発生した場合に行われることになる。
ここで、割込み暴走判定時間管理部502によって管理される割込み暴走判定時間503は、割込み登録時に割込み暴走判定時間設定部501で設定されているものとする。
上記のように、あらかじめ各割込み(種別)ごとの暴走判定時間を設定・登録しておくことで、ユーザは割込みプログラムの中に暴走検出のための手続きを追加する必要がなく、割込み処理での暴走を検出することが可能となる。
なお、以上の説明では、割込み暴走判定時間設定部501は、割込み登録時に一緒に暴走判定時間も設定することを想定して行ったが、割込み暴走判定時間管理部502によって割込みごとに暴走判定時間が管理されればよく、図7における割込みAの暴走判定時間に値を設定できる方法であればいずれでもよい。
また、以上の説明では、割込み暴走判定時間管理部502により管理される割込み暴走判定時間503の一例として図7を示したが、管理方法はこれにこだわらず各割込みの暴走判定時間情報が区別できればどんな形式でもよい。
実施の形態2では、単一割込みのみを考慮した説明となっている。多重割込み、つまりある割込み処理の際にさらに割込みが入る場合の暴走検出方法は、本発明の実施の形態2に、タスク切替を考慮した実施の形態1の構成を加えた図6の構成とすることで、多重割込み、割込み処理の切替が行われる場合でも、実現が可能となる。つまり、割込み発生時には、実施の形態2の説明のように、タスク切替部102が割込み暴走判定時間管理部502から取得した、割込み暴走判定時間503を暴走検出部120に対して設定することで、暴走判定のための時間を計測し、また多重割込みが発生した場合には実施の形態1の説明のように、暴走検出部120のカウント値の退避、暴走検出部120への復帰を行い、暴走判定のための時間を計測する。こうして、実施の形態1,2の利点を合わせることで、本発明を多重割込み発生の状況下においても適用することができる。
(実施の形態3)
次に、実施の形態3について、図9,図10を用いて説明する。
図9は本発明の実施の形態3におけるプログラムの暴走検出装置の構成を示す図であり、実施の形態1,実施の形態2(図1、5、6)の構成要素におけるタスク切替装置に対して、実行アドレス一致などある特定条件が一致した場合にイベント通知するイベント生成部905と、トレース生成機能の有効/無効の制御を受け付けるトレース制御部901と、トレース制御部901からのトレース機能を有効に制御された際に実行アドレス情報などトレースに関する情報をトレース情報904としてトレースメモリ903に格納するトレース情報生成部902とを付加する構成となる。図10は本発明の実施の形態3における暴走検出方法を説明するフローチャートである。
上記構成におけるタスク切替部102は、タスクおよび割込みなどタスク独立部の実行対象を切替る際に、図1における暴走検出情報113または図5,図6における割込み暴走判定時間503に設定されて、暴走判定をするデバッグ対象であるタスクおよび割込みなどのタスク独立部の場合には、トレース制御部901に対してトレース機能を有効にする。逆に、暴走判定しないデバッグ対象でないタスクおよび割込みなどのタスク独立部でない場合はトレース機能を無効にするよう要求することを特徴とする。
以上のように構成された本発明の実施の形態3における暴走検出方法について説明する。但し、下記の説明は図3における実施の形態1の説明に補足する形で行うものとする。
現在動作しているタスクから別のタスクに切替が発生する場合、第1の実施の形態にフローチャートの暴走検出用タイマーカウント停止(ステップ311)の前と、暴走検出用タイマーカウント開始(ステップ316)の後に、それぞれトレース停止(ステップ1001)とトレース開始(ステップ1002)を加えた処理が行われる。
具体的には、タスクへの切替えが発生した場合には、OSで提供される機能(OS内部の処理)をトレースしないためにまずはトレースを停止する(ステップ1001)。一方のトレースの開始は、暴走検出情報復帰部105が取得した次タスクの暴走検出用タイマーカウント値が0以外の場合に(ステップ314)、暴走検出用タイマーカウント値の設定(ステップ315)および開始(ステップ316)とともに、トレースを開始する(ステップ1002)。
上記のように、限られた資源であるトレースメモリに暴走判定対象としているタスクおよび割込みの処理に関する情報のみ格納する手段を提供し、暴走検出機能を補助することで、暴走箇所を容易に特定することが可能となる。
本発明にかかるプログラムの暴走検出方法およびプログラムの暴走検出装置は、タスクの起動順序を考慮する必要なく、さらに他タスクや割込みへの処理遷移を考慮した形で、暴走発生から時間の経過が少なく、自タスクの暴走検出を行うことができ、ソフトウェアプログラムの暴走検出方法および検出装置で、特にオペレーティング・システム(以下、OSと称す)を使用したプログラムの暴走検出方法およびプログラムの暴走検出装置等に有用である。
本発明の実施の形態1におけるプログラムの暴走検出装置の構成を示す図 本発明の暴走検出部の構成を示す図 本発明の実施の形態1における暴走検出方法を説明するフローチャート 本発明のコンテキスト保存部によるタスクごとのコンテキスト情報を例示する図 本発明の実施の形態2におけるプログラムの暴走検出装置の構成を示す図 本発明の実施の形態2における多重割込みを考慮したプログラムの暴走検出装置の構成を示す図 割込み暴走判定時間管理部による割込み種別ごとの暴走判定時間情報を例示する図 本発明の実施の形態2における暴走検出方法を説明するフローチャート 本発明の実施の形態3におけるプログラムの暴走検出装置の構成を示す図 本発明の実施の形態3における暴走検出方法を説明するフローチャート 従来の一定時間経過後にタスクの起動を要求する場合のタスクの遷移を説明する図 従来のすぐにタスクの起動を要求する場合のタスクの遷移を説明する図 従来のタスクの遷移を例示した図
符号の説明
100 タスク切替装置
101 コンテキスト退避部
102 タスク切替部
103 コンテキスト復帰部
104 暴走検出情報退避部
105 暴走検出情報復帰部
110 コンテキスト保存部
111 暴走検出情報
112 コンテキスト情報
113 暴走検出情報
114 コンテキスト情報
120 暴走検出部
130 ユーザプログラム
131 タスク部
132 タスク独立部
200 マイコン
210 タイマー部
211 カウント値制御部
212 カウント値管理部
213 カウント値
403 タスクAのコンテキスト情報
404 タスクAの暴走検出カウント値
405 タスクB用のコンテキスト情報
406 タスクBの暴走検出カウント値
501 割込み暴走判定時間設定部
502 割込み暴走判定時間管理部
503 割込み暴走判定時間
901 トレース制御部
902 トレース情報生成部
903 トレースメモリ
904 トレース情報
905 イベント生成部
1101 状態
1102 状態
1103 状態
1201 状態
1202 状態
1203 状態
1204 状態

Claims (10)

  1. プログラムにおける、各タスクの処理時間や割込みの処理時間を計測することによりプログラムの暴走を検出する方法であって、
    タスクの切替時に暴走検出用タイマーのカウントを停止する工程と、
    前記暴走検出用タイマーのカウント値を現タスクのカウント値として保存する工程と、
    現タスクのコンテキスト情報を保存する工程と、
    次タスクのコンテキスト情報を取得する工程と、
    前記次タスクのコンテキスト情報を設定する工程と、
    前記次タスクの保存された前記暴走検出用タイマーのカウント値を取得する工程と、
    前記暴走検出用タイマーのカウントを開始して暴走検出を開始する工程と、
    前記次タスクの処理を開始する工程と
    を有し、タスクが切替わっても、あらかじめ保存しておいた次タスクのカウント値からカウントを再開することを特徴とするプログラムの暴走検出方法。
  2. プログラムにおける、各タスクの処理時間や割込みの処理時間を計測することによりプログラムの暴走を検出する方法であって、
    割込み要求発生時に暴走検出用タイマーのカウントを停止する工程と、
    現タスクのコンテキスト情報を保存する工程と、
    前記割込み処理の暴走判定時間を取得する工程と、
    前記暴走検出用タイマーのカウントを開始して暴走検出を開始する工程と、
    前記割込み処理を開始する工程と
    を有し、割込み発生時に、あらかじめ設定しておいた割込み処理の暴走判定時間を用いて暴走を検出することを特徴とするプログラムの暴走検出方法。
  3. 前記暴走検出用タイマーとしてウォッチドックタイマーを用いることを特徴とする請求項1または請求項2のいずれかに記載のプログラムの暴走検出方法。
  4. 前記暴走検出用タイマーとしてシーケンシャルイベントが一定時間内で成立しない場合にブレークするタイムアウトブレーク機能を用いることを特徴とする請求項1または請求項2のいずれかに記載のプログラムの暴走検出方法。
  5. プログラムにおける、各タスクの処理時間や割込みの処理時間を計測し、その内部処理をトレースすることによりプログラムの暴走を検出する方法であって、
    前記トレースを停止する工程と、
    タスクの切替時に暴走検出用タイマーのカウントを停止する工程と、
    前記暴走検出用タイマーのカウント値を現タスクのカウント値として保存する工程と、
    現タスクのコンテキスト情報を保存する工程と、
    次タスクのコンテキスト情報を取得する工程と、
    前記次タスクのコンテキスト情報を設定する工程と、
    前記次タスクの保存された前記暴走検出用タイマーのカウント値を取得する工程と、
    前記暴走検出用タイマーのカウントを開始して暴走検出を開始する工程と、
    前記トレースを開始する工程と、
    前記次タスクの処理を開始する工程と
    を有し、タスクが切替わっても、あらかじめ保存しておいた次タスクのカウント値からカウントを再開することができ、さらに、前記トレースを行うことにより暴走箇所を特定することを特徴とするプログラムの暴走検出方法。
  6. プログラムにおける、各タスクの処理時間や割込みの処理時間を計測することによりプログラムの暴走を検出する装置であって、
    タスクの切替時にコンテキスト情報や暴走検出情報を退避・復帰してタスクの切替を制御するタスク切替装置と、
    各タスクの処理時間を計測して前記プログラムが定める時間を経過した時に暴走したことを通知する暴走検出部と、
    前記コンテキスト情報や前記暴走検出情報を保存するコンテキスト保存部と
    を有し、タスクが切替わっても、あらかじめ保存しておいた次タスクの暴走検出情報を用いて処理時間を計測することを特徴とするプログラムの暴走検出装置。
  7. プログラムにおける、各タスクの処理時間や割込みの処理時間を計測することによりプログラムの暴走を検出する装置であって、
    各割込みにおける暴走判定時間を設定する割込み暴走判定時間設定部と、
    前記暴走判定時間を管理する割込み暴走判定時間管理部と、
    割込み要求時にコンテキスト情報を退避・復帰してタスクの切替を制御するタスク切替装置と、
    各タスクの処理時間を計測して前記暴走判定時間を経過した時に暴走したことを通知する暴走検出部と、
    前記コンテキスト情報を保存するコンテキスト保存部と
    を有し、割込み発生時に、あらかじめ設定しておいた割込み処理の暴走判定時間を用いて暴走を検出することを特徴とするプログラムの暴走検出装置。
  8. 前記暴走検出部がウオッチドックタイマ機能を用いることを特徴とする請求項6または請求項7のいずれかに記載のプログラムの暴走検出装置。
  9. 前記暴走検出部において、シーケンシャルイベントが一定時間内で成立しない場合にブレークするタイムアウトブレーク機能を用いることを特徴とする請求項6または請求項7のいずれかに記載のプログラムの暴走検出装置。
  10. イベントの発生を検知して通知するイベント生成部と、
    前記タスク切替部からの指示でトレース生成機能を制御するトレース制御部と、
    トレース情報を格納するトレースメモリと、
    前記トレース情報を前記トレースメモリに格納するトレース情報生成部と
    を有し、トレースを行うことにより暴走箇所を特定することを特徴とする請求項6または請求項7のいずれかに記載のプログラムの暴走検出装置。
JP2003338945A 2003-09-30 2003-09-30 プログラムの暴走検出方法およびプログラムの暴走検出装置 Pending JP2005107757A (ja)

Priority Applications (1)

Application Number Priority Date Filing Date Title
JP2003338945A JP2005107757A (ja) 2003-09-30 2003-09-30 プログラムの暴走検出方法およびプログラムの暴走検出装置

Applications Claiming Priority (1)

Application Number Priority Date Filing Date Title
JP2003338945A JP2005107757A (ja) 2003-09-30 2003-09-30 プログラムの暴走検出方法およびプログラムの暴走検出装置

Publications (1)

Publication Number Publication Date
JP2005107757A true JP2005107757A (ja) 2005-04-21

Family

ID=34534257

Family Applications (1)

Application Number Title Priority Date Filing Date
JP2003338945A Pending JP2005107757A (ja) 2003-09-30 2003-09-30 プログラムの暴走検出方法およびプログラムの暴走検出装置

Country Status (1)

Country Link
JP (1) JP2005107757A (ja)

Cited By (5)

* Cited by examiner, † Cited by third party
Publication number Priority date Publication date Assignee Title
JP2014526733A (ja) * 2011-09-12 2014-10-06 マイクロソフト コーポレーション サスペンド状態及び実行状態におけるプロセスの管理
US9671816B2 (en) 2011-08-10 2017-06-06 Microsoft Technology Licensing, Llc Suspension and/or throttling of processes for connected standby
JP2017174463A (ja) * 2014-09-25 2017-09-28 日本精工株式会社 車載用電子機器の制御装置及び制御方法
CN107391188A (zh) * 2017-07-17 2017-11-24 聚好看科技股份有限公司 一种控制定时任务的方法和装置
JP2017208108A (ja) * 2014-09-25 2017-11-24 日本精工株式会社 車載用電子機器の制御装置及び制御方法

Cited By (8)

* Cited by examiner, † Cited by third party
Publication number Priority date Publication date Assignee Title
US9671816B2 (en) 2011-08-10 2017-06-06 Microsoft Technology Licensing, Llc Suspension and/or throttling of processes for connected standby
JP2014526733A (ja) * 2011-09-12 2014-10-06 マイクロソフト コーポレーション サスペンド状態及び実行状態におけるプロセスの管理
US9588576B2 (en) 2011-09-12 2017-03-07 Microsoft Technology Licensing, Llc Managing processes within suspend states and execution states
JP2017174463A (ja) * 2014-09-25 2017-09-28 日本精工株式会社 車載用電子機器の制御装置及び制御方法
JP2017199403A (ja) * 2014-09-25 2017-11-02 日本精工株式会社 車載用電子機器の制御装置及び制御方法
JP2017208108A (ja) * 2014-09-25 2017-11-24 日本精工株式会社 車載用電子機器の制御装置及び制御方法
JP2017215973A (ja) * 2014-09-25 2017-12-07 日本精工株式会社 車載用電子機器の制御装置及び制御方法
CN107391188A (zh) * 2017-07-17 2017-11-24 聚好看科技股份有限公司 一种控制定时任务的方法和装置

Similar Documents

Publication Publication Date Title
US7992042B2 (en) Debug support device, and program for directing computer to perform debugging method
JP5093259B2 (ja) Biosとbmcとの間の通信パス強化方法、その装置及びそのプログラム
JPH04278612A (ja) プロセッサ用クロック信号の制御方法及び情報処理システム
JP2006277062A (ja) アプリケーション管理装置およびそのソフトウェアを格納した記憶媒体
JP2003288237A (ja) 制御装置における実行時間測定装置及び実行時間測定方法
JPWO2009150815A1 (ja) マルチプロセッサシステム
US7428660B2 (en) Starting control method, duplex platform system, and information processor
CN102799212B (zh) 用于多核多处理器并行系统的全局时钟系统及其使用方法
JP2014191655A (ja) マルチプロセッサ、電子制御装置、プログラム
JP2005107757A (ja) プログラムの暴走検出方法およびプログラムの暴走検出装置
JP2001318807A (ja) タスク切り替え制御方法及び装置
US20160103704A1 (en) Data processing device and method of controlling the same
US20050160425A1 (en) Limitation of the response time of a software process
US8099637B2 (en) Software fault detection using progress tracker
JP2008225807A (ja) 制御装置およびそのプログラム暴走監視方法
TW200416605A (en) Method for meeting SMI duration limits by time slicing SMI handlers
JP2010102567A (ja) 周期駆動タスク実行装置、周期駆動タスク実行方法及びプログラム
JP2008305238A (ja) 計測装置
JPH064318A (ja) エラー検出方式
JP5906807B2 (ja) 演算処理装置及びストール監視方法
KR100930009B1 (ko) 인터럽트 처리방법
CN114647540A (zh) 嵌入式调度器故障恢复方法、嵌入式系统及存储介质
JP2007109038A (ja) データ処理装置
JPH033041A (ja) タイムアウト監視回路
JP2009217760A (ja) 電子計算機装置