JP2006011686A - マルチタスクシステムの異常検知方法 - Google Patents

マルチタスクシステムの異常検知方法 Download PDF

Info

Publication number
JP2006011686A
JP2006011686A JP2004185970A JP2004185970A JP2006011686A JP 2006011686 A JP2006011686 A JP 2006011686A JP 2004185970 A JP2004185970 A JP 2004185970A JP 2004185970 A JP2004185970 A JP 2004185970A JP 2006011686 A JP2006011686 A JP 2006011686A
Authority
JP
Japan
Prior art keywords
task
monitoring
priority
abnormality
detection
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
JP2004185970A
Other languages
English (en)
Inventor
Tsutomu Furusawa
務 古澤
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.)
Fujifilm Business Innovation Corp
Original Assignee
Fuji Xerox 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 Fuji Xerox Co Ltd filed Critical Fuji Xerox Co Ltd
Priority to JP2004185970A priority Critical patent/JP2006011686A/ja
Publication of JP2006011686A publication Critical patent/JP2006011686A/ja
Pending legal-status Critical Current

Links

Images

Landscapes

  • Debugging And Monitoring (AREA)

Abstract

【課題】 マルチタスクシステムにおける的確なタスクの暴走検知を可能とする。
【解決手段】 タスクの非実行中は休止状態であり、休止状態で起動されることによりタスクを実行すると共に、タスクの実行中は待機状態となる監視タスクを、プライオリティPiごとに設け、検知タスクは、タスクの実行時間に基づいて設定しているプライオリティPiごとのタスクの実行タイミングに合わせて監視タスクWiに起動信号を出力し、監視タスクが起動したか否かを確認する(ステップ100〜110)。ここで、タスクが暴走等のために無限ループに入ってしまうことにより、該当するタスクに対する監視タスクが待機状態となり、この監視タスクを起動しようとしたとき起動エラーが発生すると(ステップ106で肯定判定)、システムが再起動されるようにする(ステップ112)。
【選択図】 図3

Description

本発明は、マルチタスクシステムにおいてプログラムの暴走による異常を検知するマルチタスクシステムの異常検知方法に関する。
コンピュータシステムにおいて、中央処理装置(CPU)の異常による誤動作を防止するフェイルセーフ手段としては、例えばウォッチドッグタイマを用いた監視などがある。
中央処理装置では、通常、一定のウォッチドッグパルスを出力しており、ウォッチドッグタイマは、このウォッチドッグパルスを常時監視し、このウォッチドッグパルスが出力されない時間が一定時間を越えたときに、中央処理装置に異常が生じたと判断し、リセットパルスを出力することにより、中央処理装置をリセットさせる。
このようなウォッチドッグタイマは、簡単な時定数回路などで構成することができ、比較的簡単に中央処理装置の異常を検出することができる。
ところで、近年のコンピュータシステムでは、複数のタスクを時分割で実行して、見掛け上、複数のタスクが同時に実行されているようにするマルチタスクシステムが用いられている。このようなマルチタスクシステムには、各タスクの動作が所定の時間間隔で周期的に実行するか、各タスクの間の優先度を考慮して、非周期的に実行する方法がある。
マルチタスクシステムにおいても、プログラムの防止を検知する必要があるが、前記したウォッチドックタイマを用いた異常検知方法は、シングルタスクシステムや無限ループシステムにおいては有効であるが、マルチタスクシステムに対しては、優先順位の低いタスクが無限ループに入ってしまうと暴走を検知できなくなってしまう。
図10(A)及び図10(B)には、複数のタスクとして、タスクTS1、TS2、TS3、TS4が設けられ、これらのタスクTS1〜TS4とウォッチドッグタイマ(WDT)の間で優先順位が設定されているマルチタスクシステムにおけるタイミングチャートの一例を示している。なお、このマルチタスクシステムでは、WDTが1位、タスクTS1、TS2が2位、タスクTS3、TS4が3位として優先順位を設定している。
図10(A)に示すように、タスクTS1〜TS4が所定のタイミング、優先順位に沿って実行されることにより、WDTがリフレッシュされる。
ここで、図10(B)に示すように、例えば優先順位の高いタスクTS1が暴走するなどして無限ループに入ってしまうと、WDTがリフレッシュするごとに、無限ループに入っているタスクTS1が実行されてしまい、このタスクTS1と優先順位が同じタスクTS2や、優先順位が低いタスクTS3、TS4が実行されなくなってしまう。
ここから、タスクの周期的動作及び非周期的動作にかかわらず、各タスクに実行許容時間を持たせ、動作開始時に暴走監視システムに時間を設定し、動作終了時に解除を行うことにより、暴走による異常を検知する方法が提案されている(例えば、特許文献1参照。)。
特開2000−181755号公報
しかしながら、上記提案では、全てのタスクに対して、実行許容時間の設定処理及び解除処理が必要となるため、中央処理装置の負荷の増大、開発工数への影響、品質低下などの懸念が生じる。また、タスク内のロジック修正時には、タスクの実行許容時間の見直しが必要となり、そのための開発工数も増加する。さらに、タスクの実行許容時間の設定前や、設定時間の解除処理後の暴走は検知できないという問題がある。
本発明は上記事実に鑑みてなされたものであり、中央処理装置(CPU)への負荷増大、開発工数の増加を抑え、タスクの暴走を確実に防止することができるマルチタスクシステムの異常検知方法を提案することを目的とする。
上記目的を達成するために本発明は、優先順位が設定されている複数のタスクのそれぞれを、並行して実行するマルチタスクシステムにおいて、タスクの動作異常を検知するマルチタスクシステムの異常検知方法であって、前記優先順位に設定されている前記タスクの動作状態を監視する監視タスクを優先順位ごとに設けると共に、前記監視タスクの動作状態を監視する検知タスクを設け、前記検知タスクが前記監視タスクの動作状態から前記タスクの異常を検知する、ことを特徴とする。
この発明によれば、優先順位ごとに監視タスクを設け、監視タスクの動作状態から、検知タスクが、何れかのタスクに動作異常が発生しているか否かを判定することにより、タスクの動作異常を検知する。
これにより、優先順位の高いタスクに動作異常が発生したときにも、タスクの動作異常を的確に検知することができる。
また、本発明は、前記優先順位ごとに設けている前記監視タスクが、前記タスクの非実行状態で起動可能となり、起動されることにより前記監視タスクを実行するときに、前記優先順位ごとの前記タスクの実行時間に基づいて、前記監視タスクのそれぞれの起動タイミングを設定し、該設定に基づいた起動タイミングで前記監視タスクの起動を指示した時に、該指示に対する非起動時に、前記タスクに異常が発生していると検知することを特徴とする。
この発明によれば、検知タスクによって監視タスクを起動することによりタスクを実行するときに、タスクが実行されているために監視タスクが起動しなければ、タスクに異常が発生していると判定する。
このとき、監視タスクの起動タイミングを、各優先順位ごとのタスクの実行時間に基づいて設定することにより、タスクごとの実行時間の長短に拘わらず、タスクの異常発生を的確に検知することができる。
また、本発明は、前記監視タスクが前記優先順位内の前記タスクの何れか実行中又は該優先順位内の全てのタスクの非実行中を明示するときに、前記監視タスクが所定時間以上継続して前記タスクの実行中を明示しているときに、前記検知タスクが異常発生と判定することを特徴とする。
この発明によれば、例えば各優先順位内のタスクの実行中、非実行中を明示するイベントフラグ等を用い、このイベントフラグの状態から、タスクが所定時間以上継続して実行されていることを明示している監視タスクがあれば、該監視タスクに対応する優先順位のタスクに異常が発生していることを検知する。
このような本発明においては、前記タスクの実行中の明示が、前記優先順位内の前記タスクの実行時間に基づいて設定した時間を越えたときに、前記検知タスクが異常発生と判定するものであればよく、これにより、各優先順位内のタスクに設定されている実行時間の長短に拘わらず、タスクの異常発生を的確に検知することができる。
このような本発明においては、前記検知タスクによって異常が検知された前記優先順位の前記タスクを強制終了することができる。
すなわち、本発明においては、優先順位ごとにタスクの異常発生の有無を判定できるので、タスクに異常が発生した時には、該当する優先順位のタスクのみを強制終了させることにより、異常を解消することができ、正常に動作可能なタスクを強制的に終了させる必要が無くなる。
以上説明したように本発明によれば、優先順位ごとに監視タスクを設けて、それぞれの監視タスクの動作状態から異常発生の有無を検知するために、優先順位に拘わらず、異常が発生したタスクを的確に検知することができるという優れた効果が得られる。
また、本発明においては、タスクごとの実行時間の長短に拘わらず、タスクの異常発生を的確に検知することができる。
さらに、開発途上において、処理変更を行い各優先順位の許容実行時間が変化したときでも、修正は検知タスクのみで、各優先順位に設けた監視タスクを修正する必要が無く、開発効率の向上と品質安定が得られる。
以下に図面を参照しながら本発明の実施の形態を説明する。図1には、本実施の形態に適用したコンピュータ10のハードウェア構成の概略を示している。コンピュータ10は、CPU12、RAM14、ROM16と共に、記憶媒体の一例としてHDD18を備えており、これらがバス20によって接続されている。
これにより、コンピュータ10は、CPU12、RAM14、ROM16、HDD18の間で相互に信号ないしデータの伝送が可能な一般的構成となっている。
また、コンピュータ10には、ウォッチドッグタイマ回路22が設けられており、このウオッチドッグタイマ回路22が、バス20に接続している。
このように構成されているコンピュータ10には、マルチタスクシステムが構築されている。図2には、コンピュータ10に構築されているマルチタスクシステム30の概略構成を示している。
マルチタスクシステム30は、複数のタスクT及び、タスクTの実行制御を行うOS32が形成されている。なお、本実施の形態では、一例としてm個のタスクT1〜Tmを設けている。
マルチタスクシステム30には、タスク属性情報記憶部34が設けられている。マルチタスクシステム30では、タスクTを実行するときの優先順位が設定されており、また、タスクTのそれぞれには、実行時間等が設定されている。
タスク属性情報記憶部34には、タスクTごとの優先順位を示すプライオリティ情報及び実行時間などがタスク属性情報として記憶されている。なお、プライオリティPは、例えば、m個のタスクT1〜Tmの間で、優先順位の最も高いタスクTをプライオリティP1とし、タスクTに順に順位を設定したものであり、図2では、最下位をプライオリティPnとしている。また、実行時間は、タスクごとに、例えばタスク(ソフトウェア)Tの設計段階などにおいて実行開始から実行終了までの時間として設定される。
また、マルチタスクシステム30には、各タスクTの動作管理に用いる動作管理テーブル36が設けられている。この動作管理テーブル36では、タスク属性情報記憶部34に記憶されているタスクTごとのタスク属性情報に基づいて、実行中のタスクTを複数段階(本実施の形態ではn段階)のプライオリティPに分けて管理している。
すなわち、マルチタスクシステム30では、m個のタスクT1〜Tmをn段階のプライオリティP1〜Pnに分けて管理している。また、マルチタスクシステム30では、同一のプライオリティPに複数のタスクTが存在することができるが、動作管理テーブル36では、同一のプライオリティPのタスクTは、例えば発生順序で実行されるなどして、同一の時間帯には、単一のタスクTが実行されるようにしている。
これにより、マルチタスクシステム30では、複数のタスクTをプライオリティ情報に基づいて順次実行することにより、複数のタスクTが、あたかも並行して実行されているようにしている。
なお、各タスクTに対する実行プログラム及びタスク属性情報は、ROM16ないしHDD18に格納され、動作管理テーブル36は、例えばRAM14にプライオリティPごとにメモリ領域が確保されて保持される。
ところで、マルチタスクシステム30には、監視タスクテーブル40が設けられている。この監視タスクテーブル40には、プライオリティPごとの監視タスクWが設けられている。
例えば、プライオリティPがn段階(P1〜Pn)に設定されているときには、プライオリティP1に対する監視タスクW1から、最下位のプライオリティPnに対する監視タスクWnまで(監視タスクW1〜Wn)設けられる。
プライオリティPごとに設けられている監視タスクWのそれぞれは、起動信号が入力されることにより起動し、プライオリティP内のタスクTの起動を制御する。また、監視タスクWは、対応するプライオリティP内のタスクTの実行中は待機状態であり、プライオリティP内のタスクTが正常に終了することにより起動を終了し、次の起動信号によって起動可能となる休止状態へ移行する。
すなわち、監視タスクWは、各プライオリティP内において、最優先で起動されるタスクとなっており、起動信号によって休止状態から待機状態に移行して起動し、タスクTの実行中は待機状態を保持し、タスクTが終了することにより休止状態へ移行する。また、監視タスクWは、待機状態にあると、起動信号を受付ないようになっている。なお、この監視タスクWのそれぞれは、マルチタスクシステム30が起動されることにより、例えばRAM14に常駐して実行される。
また、マルチタスクシステム30には、検知タスクTw及び順位監視テーブル42が設けられている。順位監視テーブル42には、監視タスクWの実行順序と共に、実行開始タイミング等の監視タスク属性情報が記憶されている。
すなわち、プライオリティPに対応する監視タスクWの起動順位(監視順位)と共に、プライオリティPに設定されているタスクTのタスク属性情報から得られる実行時間等に基づいた監視タイミング(監視間隔)が記憶される。なお、この順位監視テーブル42は、RAM14上に所定のメモリ領域が確保されて形成されて保持される。
検知タスクTwは、例えばRAM14に常駐されて実行され、順位監視テーブル42に記憶されている監視タスクWごとの監視タスク属性情報に基づいて、監視タスクWのそれぞれを順にチェックする。
このとき、例えば、検知タスクTwは、監視タスクWに起動信号を出力する。監視タスクWでは、この起動信号がトリガとなって起動される。すなわち、検知タスクTwは、監視タスク属性情報に基づいて、プライオリティPの順序で監視タスクWを順に起動する。
検知タスクTwは、監視タスクWに起動信号を出力したときに、監視タスクWが起動したか否かを確認し、これにより、該当するプライオリティPのタスクTに異常が発生していないかを検知する。すなわち、監視タスクWは、休止状態で起動信号を受信することにより起動するが、待機状態で起動信号を受信しても、起動しないようになっている。また、監視タスクWの待機状態では、対応するプライオリティP内のタスクTが実行中であり、ここから、検知タスクTwは、起動信号の出力に先立って実行中のタスクTがあれば、該当するプライオリティP内の何れかのタスクTに暴走等の異常が発生していると判定する。
一方、ウォッチドッグタイマ回路(WDT回路22)は、所定の信号(以下、生存信号とする)が入力されることによりリフレッシュされるが、リフレッシュしてから所定時間経過するまでに生存信号が入力されないとき(所定時間異常生存信号が入力されないとき)には、コンピュータ10のCPU12(OS32)へリセット信号(再起動信号)を出力する。
マルチタスクシステム30では、検知タスクTwが、所定のタイミングでWDT回路22へ生存信号を出力する。また、検知タスクTwは、何れかの監視タスクWに対応するプライオリティP内のタスクTの異常を検知すると、WDT回路22への生存信号の出力を停止する。すなわち、検知タスクTwは、タスクTの何れかに暴走などの動作異常が発生したと判定すると、WDT回路22への生存信号の出力を停止する。
OS32は、再起動信号が入力されることにより、実行中のタスクTを強制終了して再起動を行う。これにより、WDT回路22では、何れかのタスクTに暴走等の異常を停止する一般的構成となっている。
このように構成されているマルチタスクシステム30が形成されているコンピュータ10では、電源が投入されることによりブートシーケンスが実行されて各デバイスのセットアップが行われて、OS32(マルチタスクシステム30)が立ち上がる。
この後に、先ず、検知タスクTw用のプログラムが、例えばHDD18から読み出されてRAM14に格納される。これと共に、動作管理テーブル36、監視タスクテーブル40及び順位監視テーブル42用のメモリ領域がRAM14上に確保されて、動作管理テーブル36、監視タスクテーブル40及び順位監視テーブル42が形成され、各プライオリティPのそれぞれに対する監視タスクT(監視タスクT1〜Tn)用のプログラムが例えばHDD18から読み出されて監視タスクテーブル42に格納される。
なお、監視タスクWは、起動信号によって起動可能な休止状態で監視タスクテーブル40に格納される。監視タスクテーブル40は、一つの監視タスクWを、プライオリティPの数に応じて確保している領域のそれぞれに格納することにより、監視タスクW1〜Wnが形成されるものであっても良い。
動作管理テーブル36には、タスク属性情報記憶部34から読み出されたタスクTごとのタスク属性情報が、プライオリティPごとに格納される。これにより、プライオリティPごとのタスクTと共にタスクTの実行時間が得られる。
順位監視テーブル42には、監視タスク属性情報としてプライオリティPの順位に基づいた監視タスクWの起動順位(チェック順位)と共に、プライオリティPごとのタスクTの実行時間に基づいた監視タスクWの起動タイミング(チェックタイミング)が格納される。
これにより、マルチタスクシステム30では、タスクTの実行が可能となる。
ここで、図3及び図4を参照しながら、マルチタスクシステム30に設けている検知タスクTwと監視タスクW(W1〜Wn)での処理の一例を説明する。なお、ここでの説明は、プライオリティPごとのタスクTの実行時間に基づいた周期で、タスクTの異常発生を監視する。
図3には、タスクTの暴走等の異常を検知する検知タスクTwの処理の一例を示している。なお、検知タスクTwは、タスクT等が正常に動作していると判定される定常時は、予め設定されたタイミングでWDT回路22へ生存信号を出力しており、これにより、WDT回路22がリフレッシュされ、OS32の再起動信号の出力停止状態が維持されるようになっている。
検知タスクTwは、最初のステップ100で、プライオリティPiに対するインデックスiの初期値設定を行う。すなわち、プライオリティPiが1(プライオリティP1)〜n(プライオリティPn)までのn段階に設定されているときには、インデックスiに初期値として「1」をセットする(i=1)。
次のステップ102では、プライオリティPiのタスクTの実行タイミングとなったか否かを確認する。すなわち、プライオリティPi内のタスクTに暴走等の異常が発生しているか否かの検知タイミングとなったか否かを確認している。
ここでプライオリティPiのタスクTの実行タイミング(タスクTの暴走検知タイミング)であれば、ステップ102で肯定判定してステップ104へ移行し、プライオリティPiに対応する監視タスクWiを起動する(sta_tsk)。
この後、ステップ106では、該当する監視タスクWiが正常に起動したか否かを確認し、正常に起動しているときには、ステップ106で肯定判定してステップ108へ移行する。
このステップ108では、プライオリティPiのインデックスiをインクリメント(i=i+1)し、次のステップ110では、インデックスiがプライオリティPの段階数であるnを越えたか否かを確認する。
これにより、インデックスiがnを越えるまでは、順にステップ102〜ステップ106を実行し、監視タスクWのそれぞれが正常に起動するか否かを確認している。
一方、図4には、監視タスクW(監視タスクW1〜Wn)での処理の概略を示している。このフローチャートは、監視タスクWが休止状態であるときに開始され、ステップ120では、検知タスクTwから起動信号が入力されたか否かを確認し、起動信号が入力されることによりステップ120で肯定判定する。
これにより、監視タスクWが起動する。このとき、監視タスクWは、休止状態から待機状態に移行したのち起動(run)する。また、監視タスクWは、例えば起動開始時に検知タスクTwへ起動信号に対する応答信号を出力する。なお、起動開始時に監視タスクWが検知タスクTwに応答信号を出力するのではなく、監視タスクWが正常に起動を開始したか否かを、検知タスクTwが確認するものであっても良い。
これにより、図3のフローチャートでは、ステップ106で、監視タスクWに起動エラーが発生していないことを確認する(ステップ106で肯定判定)。
また、監視タスクWは、起動することにより、対応するプライオリティPに設定されているタスクTを実行する。このとき、同じプライオリティPに複数のタスクTが設定されているときには、設定されている複数のタスクTを順に実行する。
また、図4に示すように、監視タスクWは、ステップ122でタスクTが終了したか否かを確認している。タスクTは、予め設定されている実行時間が経過することにより終了し、タスクTが終了することにより、ステップ122で肯定判定され、監視タスクWが終了(exit_tsk)して、休止状態に移行する。
このようにして検知タスクTwと監視タスクWが作動することにより、設定された優先順位にしたがってタスクTが実行される。図5(A)には、検知タスクTw、監視タスクW及びタスクTの実行タイミングの概略を示している。
図5(A)では、優先順位であるプライオリティPが1位(プライオリティP1)のタスクT1、T2と、2位(プライオリティP2)のタスクT3、T4を例示している。このとき、プライオリティP1に対応する監視タスクW1がタスクT1、T2と同じ優先順位となり、プライオリティP2に対応する監視タスクW2が、タスクT3、T4と同じ優先順位となる。
また、検知タスクTwは、監視タスクW1よりも優先順位が高く、ここから、検知タスクTwの優先順位を0位としている。なお、検知タスクTwの優先順位は、1位としても良く、このときには、監視タスクW及びタスクTの優先順位2位から(n+1)まで順に繰り下げれば良い。
さらに、タスクT1〜T4に対する実線は、プログラムの実行中を示し、監視タスクW(W1、W2)に対する実線は、起動処理を示し、検知タスクTwに対する実線は、一例としてWDT回路22へのリフレッシュ信号の出力を示している。
図5(A)では、一例として検知タスクTwがWDT回路22へリフレッシュ信号を出力した後に、設定されている優先順位に基づいてタスクT1〜T4を実行するようにしている。
このとき、プライオリティP1とプライオリティP2の実行間隔である監視タスクW1と監視タスクW2の起動間隔t(1-2)は、タスクT1の実行時間t1とタスクT2の実行時間t2によって定まり、監視タスクW2と監視タスクW1の起動間隔t(2-1)は、タスクT3の実行時間t3とタスクT4の実行時間t4によって定まる。
したがって、タスクTのタスク属性情報に基づいて、適切なタイミングで監視タスクW、すなわち、プライオリティPごとの各タスクTを起動することができる。
一方、何れかのタスクTが暴走して無限ループに入ってしまうなどの異常が生じることがある。図5(B)には、一例として、プライオリティP1のタスクT1が暴走した例を示しており、これにより、プライオリティP1の監視用に設けている監視タスクW1は、タスクT1が終了しないために待機状態を維持する。
すなわち、図4のフローチャートにおいて、ステップ124で肯定判定されずに否定判定され続け、検知タスクTwから起動信号が入力されたときに起動エラーが生じることになる。
これにより、図3のフローチャートでは、この監視タスクWに対する次の起動タイミング(チェックタイミング)に達したときに、ステップ106で肯定判定され、プライオリティPi内のタスクTに暴走が発生したと判定してステップ112へ移行する。
このステップ112では、WDT回路22への生存信号を停止する。これにより、WDT回路22がOS32(CPU12)へリセット信号を出力する。
OS32は、リセット信号が入力されることにより、再起動するために、暴走しているタスクTの暴走が停止される。
したがって、プライオリティPごとの監視タスクWと、この監視タスクWを監視する検知タスクTwを設けているマルチタスクシステム30では、タスクTの暴走を的確に検知して、的確にシステムリセットを行うことができる。
一方、以上の説明では、プライオリティPごとのタスクTのタスク属性情報に含まれる実行時間に基づいた優先順位別の監視タスク起動方式で異常検知(暴走検知)を行う例を説明したが、これに限らず、イベントフラグを用いて周期的に監視タスクTの動作状態を検知する方式(以下、同期通信方式とする)を適用することも可能である。
ここで、図6乃至図8を用いて、同期通信方式を用いたタスクTの異常検知を説明する。なお、同期通信方式を用いるときの異常検知は、前記した所定周期で監視タスクWを起動しながら起動確認を行うときと同じである。
同期通信方式では、優先順位に基づいてプライオリティPに対応する監視タスクWが起動され、タスクTが実行される。また、監視タスクW(W1〜Wn)のそれぞれに対して、イベントフラグF(F1〜Fn)が設定されており、監視タスクWは、イベントフラグFがセット(F=1)されることにより起動して、イベントフラグFをクリア(F=0)すると共に、各タスクTを実行する。。
検知タスクTwは、監視タスクWのそれぞれに対する監視カウンタを備え、予め設定している一定の周期で、監視タスクWのイベントフラグFを確認し、イベントフラグFがクリアされておらずセットされた状態であれば、該当監視タスクW(W1〜Wn)に対する監視カウンタのカウント値C(C1〜Cn)をカウントアップする。
また、検知タスクTwは、イベントフラグFがクリアされていると、該当する監視タスクWに対する監視カウンタのカウント値Cをクリアするが、カウント値Cが、監視タスクWごとに設定している規定値S(S1〜Sn)に達すると、監視タスクWに対応するプライオリティP内のタスクTに暴走等の異常が発生していると判定する。
このときの、規定値Sは、プライオリティP内のタスクTの実行時間と、検知タスクTwの検知周期に基づいて設定されており、実行時間が長いタスクTを含むときには、規定値Sの値が大きく、実行時間が短いタスクTを含むときには、規定値Sが小さくなっている。
この規定値Sは、タスク属性情報に基づいて設定されて、監視タスク属性情報として順位監視テーブル42に格納されるようになっている。
このように構成されているときのマルチタスクシステム10では、優先順位に基づいて監視タスクWが順に起動されて、タスクTが実行される。なお、優先順位に基づいた監視タスクWの起動は、検知タスクTwで行うものであって良い。
図7には、監視タスクWでの処理の概略を示している。なお、図6及び図7では、前記した図3及び図4での処理と同等の処理には、図3及び図4で使用したステップ番号を併記している。
このフローチャートでは、最初のステップ150でイベントフラグFがセットされているか否かを確認し、イベントフラグFがセットされることにより、ステップ150で肯定判定する。
すなわち、監視タスクWが休止状態では、このイベントフラグFがクリア(F=0)されており、ステップ150、152では、イベントフラグFの設定待ち(wai_flg)となっている。
これにより、イベントフラグFがセットされると監視タスクWが起動されて対応するプライオリティPのタスクTが実行される。このときに、ステップ152では、イベントフラグFをクリア(F=0)する(clr_flg)。なお、イベントフラグFのクリアは、プライオリティPのタスクTの実行が終了することにより行われるものであっても良い。
監視タスクWが起動されることにより、対応するプライオリティPのタスクTが実行される。
これにより、例えば、図8に示すように、プライオリティP1のタスクT1、T2の実行中は、監視タスクW1でイベントフラグF1がセットされ、タスクT1、T2が終了すると、イベントフラグF1がクリアされる。また、プライオリティP2のタスクT3、T4の実行中は、監視タスクW2のイベントフラグF2がセットされ、タスクT3、T4が終了することにより、このイベントフラグF2がクリアされる。なお、監視タスクWで、タスクTの実行に先立ってイベントフラグFをクリアするものであれば、図8において、イベントフラグFがクリアされた後にタスクTが実行される。
すなわち、プライオリティPの各タスクが正常に実行されているときには、イベントフラグFがクリアされる。
一方、図6には、検知タスクTwの処理の概略を示している。このフローチャートは、予め設定された一定の時間間隔で実行される。なお。検知タスクTwは、起動されることにより所定の時間間隔でWDT回路22へ生存信号を出力し、正常状態でWDT回路22がリセット信号を出力しないようにしている。
このフローチャートでは、最初のステップ130でプライオリティPi(iは1からn)のインデックスiの初期値設定を行い(i=1)、次のステップ132では、プライオリティPiに対するイベントフラグFiがクリア(Fi=0)されているか否かを確認する。
すなわち、ステップ132では、プライオリティPiに対応する監視タスクWiに対して設定されているイベントフラグFiがクリアされているか否かを確認する。
ここで、イベントフラグFiがクリアされているとき(Fi=0)には、ステップ132で肯定判定する。これにより、ステップ134へ移行すると、監視タスクWiの起動タイミングに併せて、イベントフラグFiをセットする。
この後に、ステップ136へ移行し、監視タスクWiに対応する監視カウンタのカウント値Ciをクリアする(Ci=0)。なお、マルチタスクシステム30の起動時には、監視カウンタのカウント値C(C1〜Cn)がクリアされている(初期状態)。
次のステップ138では、インデックスiをインクリメントし、ステップ140では、インデックスiがnを越えたか否かを確認し、インデックスiがnを越えていないときには、ステップ140で否定判定してステップ132へ移行して、新たに設定したインデックスiに基づいた処理を行う。
このように検知タスクTwでは、プライオリティP1〜Pn(監視タスクW1〜Wn)に対して設定しているイベントフラグF(F1〜Fn)の状態を確認しながら、所定のタイミングで監視タスクWiを実行する。
ここで、何れかのプライオリティPにおいてタスクTが実行中であると、そのプライオリティP(監視タスクW)に対するイベントフラグFがクリアされずにセットされたままとなる。
これにより、ステップ132で否定判定されることにより、ステップ142へ移行する。このステップ142では、監視カウンタのカウント値Ciをインクリメント(カウントアップ)する(Ci=Ci+1)。
次のステップ144では、カウントアップした監視カウンタのカウント値Ciが、該当するプライオリティPi(監視タスクWi)に対して設定している規定値Siに達したか否かを確認し、カウント値Ciが規定値Siに達していないとき(Ci<Si)には、ステップ144で否定判定してステップ138へ移行する。
一方、図8に示すように、例えば、プライオリティP1のタスクT1が暴走するなどして無限ループに入ると、監視タスクW1のイベントフラグF1がクリアされずにセットされた状態となってしまう。
この状態となると、図6のフローチャートでは、ステップ134で否定判定され、この監視タスクW1に対応する監視カウンタのカウント値C(例えばカウント値C1)が、カウントアップされ続ける。
これにより、カウント値Ciが規定値Siに達すると、タスクTの暴走等の異常が発生したと判定されて、ステップ144で肯定判定してステップ146へ移行する。
このステップ146では、検知タスクTwからWDT回路22へ出力している生存信号を停止する。これにより、WDT回路22からリセット信号が出力されて、マルチタスクシステム30が再起動されるため、タスクTの暴走が止められる。
このようにマルチタスクシステム30では、優先順位の高いタスクTで暴走等の異常が発生したときに、このタスクTの異常を的確に検知して再起動をかけることができる。
なお、図6では、監視タスクWのそれぞれに対して設けている監視カウンタのカウント値Cをカウントアップしたが、これに限らず、監視カウンタのカウント値Cをカウントダウン(デクリメント)しても良い。このときには、カウント値Cの初期値として規定値Sを用い、カウント値CがC≦0又はC<0となったときに、タスクTに異常が発生したと判定するようにしても良い。
一方、以上説明した本実施の形態では、タスクTの異常を検知したときに、システムを再起動するように説明したが、何れかのタスクTに異常が発生した時に、タスクT1〜タスクTmに対してリセットをかけるなどして、強制終了させるものであっても良い。
また、検知タスクTwでは、異常が発生したプライオリティPを特定できることから、異常が発生したプライオリティP内のタスクTに対して強制終了を行うようにしてもよく、これにより、正常に動作可能なタスクTを強制的終了させてしまう必要が無くなる。
図9には、図4に示す監視タスク起動方式を用いたときを例に、異常が発生したタスクTを強制終了させるときの処理の概略を示している。
このフローチャートでは、プライオリティPi内のタスクTに異常が発生して、監視タスクWiの起動エラーを検出することによりステップ106で肯定判定されるとステップ114へ移行する。このステップ114では、監視タスクTiで監視しているプライオリティPi内のタスクTを強制終了する。
この後、ステップ110へ移行することにより、インデックスiをインクリメントすることにより、次の監視タスクWi(プライオリティPi)に対する処理を継続する。
これにより、異常の発生した可能性のあるタスクTのみを強制終了するので、正常に動作可能なタスクTを強制終了させる必要が無く、正常に動作可能なタスクTの処理を継続して実行することができる。
また、マルチタスクシステム30の全体を再起動する必要が無いため、WDT回路22の省略も可能となる。
なお、以上説明した本実施の形態は、本発明の一例を示すものであり、本発明の構成を限定するものではなく、本発明は、任意の構成のマルチタスクシステムに適用することができる。
本実施の形態に適用したコンピュータの基本構成図である。 本実施の形態に適用したマルチタスクシステムの概略構成図である。 検知タスクによる処理の一例を示す流れ図である。 図3の検知タスクの処理に対する監視タスクの処理の概略を示す流れ図である。 (A)及び(B)は、図3及び図4の処理に応じた検知タスク、監視タスク及びタスクの動作の概略を示しタイミングチャートの一例であり、(A)は通常状態を示し、(B)はタスクに無限ループが発生した状態の一例を示している。 同期通信方式により暴走検知を行うときの検知タスクによる処理の一例を示す流れ図である。 図6の検知タスクの処理に対する監視タスクの処理の概略を示す流れ図である。 図6及び図7の処理に応じた検知タスク、監視タスク及びタスクの動作の概略を示しタイミングチャートの一例である。 タスクの異常検知時の処理の一例を示す流れ図である。 (A)及び(B)は従来のマルチタスクシステムの一例を示すタイミングチャートであり、(A)は正常動作時を示し、(B)は優先順位の高いタスクに異常が発生したときを示している。
符号の説明
10 コンピュータ
12 CPU
22 WDT回路
30 マルチタスクシステム
32 OS
34 タスク属性情報記憶部
36 動作管理テーブル
40 監視タスクテーブル
42 順位監視テーブル
C(C1〜Cn) カウント値
P(P1〜Pn) プライオリティ(優先順位)
T(T1〜Tm) タスク
Tw 検知タスク
W(W1〜Wn) 監視タスク

Claims (5)

  1. 優先順位が設定されている複数のタスクのそれぞれを、並行して実行するマルチタスクシステムにおいて、タスクの動作異常を検知するマルチタスクシステムの異常検知方法であって、
    前記優先順位に設定されている前記タスクの動作状態を監視する監視タスクを優先順位ごとに設けると共に、前記監視タスクの動作状態を監視する検知タスクを設け、
    前記検知タスクが前記監視タスクの動作状態から前記タスクの異常を検知する、
    ことを特徴とするマルチタスクシステムの異常検知方法。
  2. 前記優先順位ごとに設けている前記監視タスクが、前記タスクの非実行状態で起動可能となり、起動されることにより前記監視タスクを実行するときに、
    前記優先順位ごとの前記タスクの実行時間に基づいて、前記監視タスクのそれぞれの起動タイミングを設定し、該設定に基づいた起動タイミングで前記監視タスクの起動を指示した時に、該指示に対する非起動時に、前記タスクに異常が発生していると検知することを特徴とする請求項1に記載のマルチタスクシステムの異常検知方法。
  3. 前記監視タスクが前記優先順位内の前記タスクの何れか実行中又は該優先順位内の全てのタスクの非実行中を明示するときに、
    前記監視タスクが所定時間以上継続して前記タスクの実行中を明示しているときに、前記検知タスクが異常発生と判定することを特徴とする請求項1に記載のマルチタスクシステムの異常検知方法。
  4. 前記タスクの実行中の明示が、前記優先順位内の前記タスクの実行時間に基づいて設定した時間を越えたときに、前記検知タスクが異常発生と判定することを特徴とする請求項3に記載のマルチタスクシステムの異常検知方法。
  5. 前記検知タスクによって異常が検知された前記優先順位の前記タスクを強制終了することを特徴とする請求項1から請求項4の何れか1項に記載のマルチタスクシステムの異常検知方法。
JP2004185970A 2004-06-24 2004-06-24 マルチタスクシステムの異常検知方法 Pending JP2006011686A (ja)

Priority Applications (1)

Application Number Priority Date Filing Date Title
JP2004185970A JP2006011686A (ja) 2004-06-24 2004-06-24 マルチタスクシステムの異常検知方法

Applications Claiming Priority (1)

Application Number Priority Date Filing Date Title
JP2004185970A JP2006011686A (ja) 2004-06-24 2004-06-24 マルチタスクシステムの異常検知方法

Publications (1)

Publication Number Publication Date
JP2006011686A true JP2006011686A (ja) 2006-01-12

Family

ID=35778903

Family Applications (1)

Application Number Title Priority Date Filing Date
JP2004185970A Pending JP2006011686A (ja) 2004-06-24 2004-06-24 マルチタスクシステムの異常検知方法

Country Status (1)

Country Link
JP (1) JP2006011686A (ja)

Cited By (9)

* Cited by examiner, † Cited by third party
Publication number Priority date Publication date Assignee Title
JP2007264997A (ja) * 2006-03-28 2007-10-11 Toyota Motor Corp 分散制御装置
CN100394399C (zh) * 2006-02-22 2008-06-11 迈普(四川)通信技术有限公司 一种死循环或类死循环任务检测方法
CN102622300A (zh) * 2012-04-18 2012-08-01 迈普通信技术股份有限公司 多任务系统中死循环或类死循环的检测方法
CN102929770A (zh) * 2012-09-25 2013-02-13 烽火通信科技股份有限公司 嵌入式linux系统用户态任务独占的监测定位方法
JP5152175B2 (ja) * 2007-03-20 2013-02-27 富士通モバイルコミュニケーションズ株式会社 情報処理装置
KR101300806B1 (ko) * 2007-01-17 2013-08-26 삼성전자주식회사 다중 프로세스 시스템에서 오동작 처리 장치 및 방법
JP2014085761A (ja) * 2012-10-22 2014-05-12 Denso Corp 制御装置及び車両制御システム
WO2017037863A1 (ja) * 2015-09-01 2017-03-09 三菱電機株式会社 計算機装置及び制御方法及び制御プログラム
CN112612636A (zh) * 2020-12-22 2021-04-06 浙江中控技术股份有限公司 硬件看门狗的控制方法、看门狗系统

Cited By (11)

* Cited by examiner, † Cited by third party
Publication number Priority date Publication date Assignee Title
CN100394399C (zh) * 2006-02-22 2008-06-11 迈普(四川)通信技术有限公司 一种死循环或类死循环任务检测方法
JP2007264997A (ja) * 2006-03-28 2007-10-11 Toyota Motor Corp 分散制御装置
KR101300806B1 (ko) * 2007-01-17 2013-08-26 삼성전자주식회사 다중 프로세스 시스템에서 오동작 처리 장치 및 방법
JP5152175B2 (ja) * 2007-03-20 2013-02-27 富士通モバイルコミュニケーションズ株式会社 情報処理装置
CN102622300A (zh) * 2012-04-18 2012-08-01 迈普通信技术股份有限公司 多任务系统中死循环或类死循环的检测方法
CN102929770A (zh) * 2012-09-25 2013-02-13 烽火通信科技股份有限公司 嵌入式linux系统用户态任务独占的监测定位方法
JP2014085761A (ja) * 2012-10-22 2014-05-12 Denso Corp 制御装置及び車両制御システム
WO2017037863A1 (ja) * 2015-09-01 2017-03-09 三菱電機株式会社 計算機装置及び制御方法及び制御プログラム
JPWO2017037863A1 (ja) * 2015-09-01 2017-08-31 三菱電機株式会社 計算機装置及び制御方法及び制御プログラム
CN112612636A (zh) * 2020-12-22 2021-04-06 浙江中控技术股份有限公司 硬件看门狗的控制方法、看门狗系统
CN112612636B (zh) * 2020-12-22 2023-05-05 浙江中控技术股份有限公司 硬件看门狗的控制方法、看门狗系统

Similar Documents

Publication Publication Date Title
JP4060322B2 (ja) アプリケーション管理装置およびそのソフトウェアを格納した記憶媒体
JP2006338605A (ja) プログラム異常監視方法及びプログラム異常監視装置
JP2007334587A (ja) 異常監視用プログラム、記録媒体及び電子装置
JPH1063544A (ja) タイムアウト監視方式
US20100299470A1 (en) Interrupt processing apparatus and method
JP2006011686A (ja) マルチタスクシステムの異常検知方法
JP2016224883A (ja) 異常検出方法、情報処理装置および異常検出プログラム
JP5508903B2 (ja) 情報処理装置、半導体集積回路装置および異常検出方法
JP6049961B1 (ja) Cpu監視装置
JP5627414B2 (ja) 動作ログ収集システム及びプログラム
JP2010009258A (ja) ソフトウエアの異常検出装置
JP2009151440A (ja) プログラムハング検出方法及びそれを適用したコンピュータ装置
JP2006227962A (ja) アプリケーションタスク監視システムおよび方法
JP2005293164A (ja) タスク監視方式
JP5003530B2 (ja) ウォッチドッグタイマ制御装置、ウォッチドッグタイマ制御方法およびプログラムならびにcpuシステム
JP2005122424A (ja) ウオッチドッグタイマ
JP2008204011A (ja) マルチスレッドシステム、スレッド動作異常検知方法
JP2016184315A (ja) 電子制御装置
CN113411775B (zh) 通信装置、信息处理方法以及信息处理系统
JP4387863B2 (ja) 擾乱発生検出プログラムおよび擾乱発生検出方法
JP3524700B2 (ja) タスク監視方法
JP4983806B2 (ja) 二重化タイマを用いたシステム監視装置、および監視方法
JP2005182594A (ja) コンピュータ及びプログラム
JP2018005490A (ja) 電子制御装置
JP5906807B2 (ja) 演算処理装置及びストール監視方法