(57)【要約】【課題】  システムのデッドロックを避ける。【解決手段】  該オペレーションシステムによって構成されるタスク間におけるメッセージ通信においてメッセージ送信時に前記カウンタのリセット処理を実行する機能と、オペレーティングシステムを構成するタスクが特に処理を行っていないアイドル状態においても前記カウンタのリセットを実行する機能を有することで、ソフトウェアが前記した２形態のカウンタリセットを実行することができない時は装置が異常状態になったと判断しハードウェアによる初期化処理を実行させる。【選択図】  図１
2006120059.tif 000002
【特許請求の範囲】
【請求項１】
複数タスクから構成されるオペレーションシステムによって動作する装置において、該装置のハードウェア上にソフトウェアの動作の影響を受けずにカウント処理を実行するカウンタ部と、該カウンタ部のカウンタ値に対してソフトウェアによる制御つまり該カウンタのリセット命令、カウントスタート命令、カウンタストップ命令、最大カウント値を指示することを可能とする機能と、前記手段によりハードウェアに設定した最大カウント値に前記カウンタが到達すると、現時点における装置の駆動を全て中断したうえで装置の初期化処理を実行し装置を初期状態に戻す機能を有するハードウェアから構成されているシステムにおいて、該オペレーションシステムによって構成されるタスク間におけるメッセージ通信においてメッセージ送信時に前記カウンタのリセット処理を実行する機能と、オペレーティングシステムを構成するタスクが特に処理を行っていないアイドル状態においても前記カウンタのリセットを実行する機能を有することで、ソフトウェアが前記した２形態のカウンタリセットを実行することができない時は装置が異常状態になったと判断しハードウェアによる初期化処理を実行させることを特徴とするデッドロック検出方法。
【請求項２】
前記オペレーションシステムが構成する各タスク間で、メッセージ通信を行うことによりソフトウェアの処理を実行するシステムにおいて、前記システムにより動作する装置上にハードウェアから構成されるカウンタ部はソフトウェアからのカウンタ操作命令以外で制御不可能なことを特徴とするデッドロック検出方法。
【請求項３】
ハードウェア上に存在するカウンタ部に対しての前記ソフトウェアからの操作命令はカウントを開始するカウントスタート、カウンタを停止するカウントストップ、カウンタを初期状態に戻すカウントリセット、カウンタの最大値を設定するカウンタ最大値セットから構成されることを特徴とするデッドロック検出方法。
【請求項４】
前記オペレーションシステムが構成する各タスク間で、メッセージ通信を行うことによりソフトウェアの処理を実行するシステムにおいて、請求項３に記述したカウントスタート命令と最大カウント値設定命令を、該オペレーションシステムを搭載している装置の起動時に実行することを特徴とするデッドロック検出方法。
【請求項５】
前記オペレーションシステムが構成する各タスク間で、メッセージ通信を行うことによりソフトウェアの処理を実行するシステムにおいて、タスク間メッセージの送信と同時にカウンタ部に対してカウンタリセット命令を発行し、リセット命令を受けたカウンタ部は直ちにカウンタ値をリセットし再びカウント開始することを特徴とするデッドロック検出方法。
【請求項６】
前記オペレーションシステムが構成する各タスク間で、メッセージ通信を行うことによりソフトウェアの処理を実行するシステムにおいて、アイドルタスク以外の各タスクが何も動作していない状態においては、アイドルタスク内で請求５に記載したカウンタリセット命令を周期的に発行し続けることを特徴とするデッドロック検出方法。
【請求項７】
前記オペレーションシステムが構成する各タスク間で、メッセージ通信を行うことによりソフトウェアの処理を実行するシステムにおいて、前記請求項５又は前記請求項６におけるカウンタリセット命令が発行されない状態において、前記請求項４において設定した最大カウンタ値に現在のカウンタが到達した場合には直ちにソフトウェアの実行を停止して装置を初期化状態に戻すことを特徴とするデッドロック検出方法。
【請求項８】
前記オペレーションシステムが構成する各タスク間で、メッセージ通信を行うことによりソフトウェアの処理を実行するシステムにおいて、前記カウンタリセットを挿入する個所はメッセージ送信関数とアイドルタスクであるため、ＯＳが管理するタスクが増減しようと本機能に対しての修正を一切実施することがないことを特徴としたデッドロック検出システム。
【発明の詳細な説明】
【技術分野】
【０００１】
本発明は、デッドロック検出方法及びデッドロック検出方法をメッセージによるタスク間通信機能を持つオペレーティングシステム（以降ＯＳ）を搭載した装置に関するものである。
【背景技術】
【０００２】
一般に、ＯＳを使用したシステムにおいて、タスク間でメッセージ通信を行う場合は原則としてＯＳが管理することになる。また前記ＯＳは搭載される装置の性質にもよるが、基本的にはタイマ部から時間情報を取得し各タスクの管理を行う。各タスクはそれぞれ役割を持ち装置を正常に動作させるために相互に通信を行い目的の動作を実行することになる。
【０００３】
その際に行われるタスク間の通信手段がメッセージ通信であり、図２において１０１タイマ、１０３〜１０５タスク、１０２ＯＳ、の関係をまとめた。図３はＯＳによって管理されているタスクＡ及びタスクＢ、Ｃ間におけるメッセージ通信の動作を示す図である。図３では最初にタスクＡがアクティブ状態であるが、メッセージをタスクＢに送信し待機状態に入っている。メッセージを受けたタスクＢが次にアクティブ状態となり‥という具合に各タスク間でメッセージ通信を行い処理を遂行する。また各タスクが動作しない時に起動する１０８アイドルタスクも本発明で必要とするために併せて記載している。
【０００４】
図３によれば、タスクＡが命令を受け然るべき処理を実行した後、次の処理を実行させるため、タスクＡからタスクＢにメッセージを送信する。タスクＢは前記メッセージを受信すると待ち（ＷＡＩＴ）状態から実行状態へと移行し、メッセージの内容を判断しタスクＡ同様に然るべき処理に移行する。この時既にタスクＡは処理を終了しているため待ち（ＷＡＩＴ）状態となる。このようにシステムが正常に動作している場合には各タスク間でメッセージの送受信を行っている。また各タスクがまったく動作していない場合には通常アイドルタスクと呼ばれるタスクが起動されることになる。（図３の右端の状態がこれに当たる。）
また最近の一般的な装置においてもその多機能性から、ＯＳが管理するタスク数は増加しており、数個から数十のタスクをＯＳが管理することになる。このことは各タスク間で様々な種類のメッセージ通信が発生する上、装置の状態も複雑化しシステムとして非常に不安定な状態となることが多々発生する。そして結果的に装置が予想していない状態となり、更に装置が異常状態に陥ることで停止または破壊といった最悪の状況が発生することもありえる。(例えば、特許文献１)
【特許文献１】特開平8-202566号公報
【発明の開示】
【発明が解決しようとする課題】
【０００５】
以上説明した従来技術にあってはソフトウェア又はハードウェア何れかの原因により装置に不具合が発生した場合、その発生をソフトウェアでは検知できないような事態が発生した場合や、バスエラーなどハードウェアに起因する致命的エラーにより、何れのタスクの処理も行われなくなり、ソフトウェアプログラムのデッドロック状態が発生してしまうという問題があった。
【０００６】
またソフトウェアで検知できないエラーには前記した例以外にもプログラムにより論理的な誤りがあり、プログラムとしては正常な動作を実行していても不具合を発生するケースは多々発生する可能性がある。
【０００７】
またこのようなデッドロック状態を回避すべくソフトウェアの動作とは無関係に、ハードウェアで構成されるカウンタ処理部により、周期的にカウントアップ処理を行い、一定値に達すると装置の初期化処理を行うウオッチドッグタイマ（以下  ＷＤＴ）機能というものが存在する。
【０００８】
このＷＤＴ機能を用いて装置の異常状態を検出する方法としては定期的にＷＤＴのカウンタ値をリセットすることで正常状態を確認し、このリセット処理が何らかの理由により実行できなくなった場合に異常状態とすることが一般的である。具体的には定期的にリセットを行う手段としてソフトウェアの動作と無関係に発生するＯＳの周期的タイマ割り込み処理部を利用してカウンタをリセットするケースが多い。
【０００９】
ただ周期タイマ割り込みによるカウンタリセットの方法ではハードウェアが異常な状態に陥った場合（例えばバスエラーや割り込みが入らない状態）ではＷＤＴ機能が正常に動作することが考えられるが、ハードウェアは正常に動作していにも関わらずソフトウェアプログラムによる論理的な誤りが原因で発生した異常状態においては、ハードウェアからの割り込み処理は、問題もなく処理されるためハードウェアのカウンタ値がリセットされてしまい、ＷＤＴ機能が動作しない状態が発生し、装置の異常状態を検知できなくなる恐れがある。
【００１０】
本発明は以上の従来技術における問題に鑑みてなされたものであって、従来では周期タイマの割り込み処理内部で行っていた、ハードウェアが管理するカウンタ値のリセット処理を、従来とは異なるタイミングで行うことで、従来から検知可能であったハードウェアの暴走等により発生するシステムのデッドロック状態の検出に加え、ソフトウェアによる暴走時に発生するデッドロック状態をも確実に検出できる方法を提供することを目的とする。
【課題を解決するための手段】
【００１１】
複数タスクから構成されるオペレーションシステムによって動作する装置において、該装置のハードウェア上にソフトウェアの動作の影響を受けずにカウント処理を実行するカウンタ部と、該カウンタ部のカウンタ値に対してソフトウェアによる制御つまり該カウンタのリセット命令、カウントスタート命令、カウンタストップ命令、最大カウント値を指示することを可能とする機能と、前記手段によりハードウェアに設定した最大カウント値に前記カウンタが到達すると、現時点における装置の駆動を全て中断したうえで装置の初期化処理を実行し装置を初期状態に戻す機能を有するハードウェアから構成されているシステムにおいて、該オペレーションシステムによって構成されるタスク間におけるメッセージ通信においてメッセージ送信時に前記カウンタのリセット処理を実行する機能と、オペレーティングシステムを構成するタスクが特に処理を行っていないアイドル状態においても前記カウンタのリセットを実行する機能を有することで、ソフトウェアが前記した２形態のカウンタリセットを実行することができない時は装置が異常状態になったと判断しハードウェアによる初期化処理を実行させることを特徴とするデッドロック検出方法。
【発明の効果】
【００１２】
以上説明した本発明のデッドロック検出方法では各タスク間のメッセージ送信時にＷＤＴカウンタをリセットし、またアイドルタスク内でも常にＷＤＴをリセットすることで確実に装置の異常状態を検出することができる。さらに従来の方法と異なり割り込み処理を使用しないためシステムへの負荷やCPUの負担を軽減できるという効果がある。
【００１３】
また、何れかのタスクが動作中にデッドロックすると、当該タスクがメッセージ送信処理を行わないため、ＷＤＴカウンタがリセットされず、またタスク処理が終了しないのでアイドルタスクへも移行せず、カウンタが増えつづけることになり、同様に異常状態を検出することが可能となる。
【００１４】
更に、ＷＤＴのスタート処理はシステム駆動開始時に１回だけ行えばよく、通常は電源オフまで常に動作させているためＷＤＴのタイマーストップ処理すら省くことも可能である。実装個所も２箇所と非常に特定できるため汎用的な装置において異常状態の検出が利用可能となっている。
【発明を実施するための最良の形態】
【００１５】
以下に本発明の実施の形態であるデッドロック検出方法を及びその方法を汎用的なシリアルプリンタを例にとり説明する。本発明の構成を図１に示す。従来から追加されたものに１０３ＷＤＴが存在する。この１０３ ＷＤＴは１０２ ＯＳ １０７タスク群から設定やリセット処理などが行われる。次にそのフローチャートを図４で示す。始めにＳ４１でＷＤＴのカウントを開始する。次にＳ４３でカウンタ値がカウンタ最大値をこえたかどうか半紙、越えた場合にはＳ４４で装置のタイムアウト処理を実行する。またＳ４３でカウント値を越えていないと判断した場合にはカウント値を１つ上げ処理を継続する。そしてＳ４４、Ｓ４５のイベントが発生した際には前記カウンタはＳ４４の処理を除くどのような状態であってもカウンタ値をリセットし処理を継続することになる。
【００１６】
従って本発明のデッドロック検出方法によれば、ＯＳによって正常に管理されているタスクにおいては長時間占有して処理を行い続けることはなく、タスク間のメッセージ通信によって動作するタスクが次々と入れ替わり装置として機能することになる。つまりこのタスクの入れ替わり時にハードウェアで管理するカウンタ部に対してカウンタ値リセット命令を発行する。これにより装置が何らかの処理を行っている最中は定常的にカウンタがリセットされることになる。
【００１７】
またアイドルタスク内においては、無限ループ処理となっておりこのループ内で前述したカウンタ部に対してカウンタリセットを同様に行う。このことでシステムが動作していないときにカウント値が最大カウンタ値まで上がることを防いでいる。
【００１８】
この関係を図５を用いて説明する。図５では図３で示した印刷時におけるタスク切り替え時のタスクの遷移状態とカウンタ値の増減を時系列で示したものである。図５では最下段のカウント値に着目する。カウント値は一定の割合で増加していくがタスク間メッセージによりリセットされることがわかる。この図ではメッセージによる１０９カウンタリセットが３回行われており、またアイドル状態になると殆ど１１０カウンタ値が増加することはなくなっている。この２種類のリセット処理によりカウンタ値が設定値を越えることを防いでいることがわかる。
【００１９】
つまり何らかの処理が実行されている状態においてはメッセージ送信時にハードウェア部のカウント値のリセットを行い、処理が何も行われていない時にはアイドルタスク中で同カウンタ値のリセットを実行し続けることで、ソフトウェアが正常に動作している状態では常にハードウェアのカウンタはリセットされ続け、そのリセットが実行されないときには装置が何らかの異常事態に陥ったと判断可能とするデッドロック検出方法である。
【００２０】
実際にソフトウェアによるハードウェア部のカウンタ値リセット処理はプログラムの命令としても非常にシンプルであり、またプログラムへの実装においても各タスクが共通で使用する共通送信メッセージ関数内に１箇所挿入するだけである。また同様にアイドルタスク中のタスク内無限ループに同様の記述を１箇所挿入するだけで非常に簡単に実装することが可能である。さらにハードウェア割り込み処理などの貴重な資源を使用することなく、またＣＰＵに対しても負荷が非常に少ないものとなっている。また実装形態もＯＳが管理するタスク数に依存することなくデッドロック検出機能を提供できるため、タスク数に変更が生じた場合の異常検出に関する設定を変更する必要がないという大きな利点がある。
【図面の簡単な説明】
【００２１】
【図１】本発明を実現するための各要素の構成図。
【図２】通常のオペレーションシステム（ＯＳ）の構成図。
【図３】通常のＯＳにおけるタスク間通信の方法を示す図。
【図４】ＷＤＴをベースとしたデッドロック検知を実現するためのフローチャート。
【図５】本発明を実装した場合のＯＳにおけるタスク間通信とカウンタの関係図。
【符号の説明】
【００２２】
１０１  ソフトタイマ
１０２  ＯＳ
１０３  ＷＤＴ
１０４  タスクＡ
１０５  タスクＢ
１０６  タスクＣ
１０７  タスク群
１０８  アイドルタスク
１０９  タイマリセット
１１０  カウンタ値が増加しない
Ｓ４１  カウンタスタート
Ｓ４２  カウントリセット
Ｓ４３  最大値チェック
Ｓ４４  カウントアップ
Ｓ４５  タイムアウト処理
Ｓ４６  メッセージ送信イベント
Ｓ４７  アイドルタスク周期イベント
【図１】
2006120059.tif 000003
【図２】
2006120059.tif 000004
【図３】
2006120059.tif 000005
【図４】
2006120059.tif 000006
【図５】
2006120059.tif 000007