(57)【要約】  【課題】  無限ループ状態に陥った場合に、それ以前のシステムの状態を極力残しつつ、無限ループ状態から自動復旧できるコンピュータを提供する。  【解決手段】  無限ループ状態に陥ったスレッドを検出し（Ｓ１１）、ユーザスレッドかシステムスレッドかを判別する（Ｓ１２）。ユーザスレッドの場合は、他のスレッドに対して待避処理を実行するよう通知し（Ｓ１３）、無限ループ状態に陥ったスレッドの優先順位を下げ（Ｓ１４）、他のスレッドからの待避処理完了通知を待つ（Ｓ１５）。通知を受け取ったら、無限ループ状態に陥ったスレッドを再起動させる（Ｓ１６）。システムスレッドの場合は、他のスレッドに対して終了処理を実行するよう通知し（Ｓ１７）、無限ループ状態に陥ったスレッドの優先順位を下げ（Ｓ１８）、他のスレッドからの終了処理完了通知を待つ（Ｓ１９）。通知を受け取ったら、システム全体を再起動する（Ｓ２０）。【選択図】  図４
2005182594.tif 000002
【特許請求の範囲】
【請求項１】
優先順位方式によるスケジューリングを行ってスレッドの実行を管理するオペレーティングシステムを搭載したコンピュータであって、
無限ループ状態に陥ったスレッドの発生を検出する無限ループ状態検出機能と、
無限ループ状態に陥ったスレッドの発生が検出された場合、他のスレッドに退避処理を実行させた後、当該検出されたスレッドを再起動させるスレッド復旧機能と
備えたコンピュータ。
【請求項２】
請求項１に記載のコンピュータであって、
実行状態、実行可能状態、待機状態のうちのいずれかの状態にあるスレッドを、オペレーティングシステムの稼働中に一旦終了し再起動させて上記いずれかの状態に復旧できるユーザスレッドと、無限ループ状態に陥った場合にオペレーティングシステムを再起動させなければ上記いずれかの状態に復旧できないシステムスレッドとに分類して監視するスレッド監視機能を更に備え、
前記スレッド復旧機能は、
無限ループ状態に陥ったスレッドがユーザスレッドの場合は、無限ループ状態に陥ったスレッドのみ再起動させる無限ループスレッド再起動機能と、
無限ループ状態に陥ったスレッドがシステムスレッドの場合は、全てのスレッドを再起動させる全スレッド再起動機能とを含むコンピュータ。
【請求項３】
請求項２に記載のコンピュータであって、
前記無限ループスレッド再起動機能は、
無限ループ状態に陥ったユーザスレッドの優先順位を下げる機能と、
他のスレッドに待避処理を実行するよう通知する機能と、
この他のスレッドから待避処理が完了した旨の通知を受けた後に前記ユーザスレッドを再起動させる機能とを含み、
前記全スレッド再起動機能は、
無限ループ状態に陥ったシステムスレッドの優先順位を下げる機能と、
無限ループ状態に陥っていないスレッドに終了処理を実行するよう通知する機能と、
無限ループ状態に陥っていないスレッドから終了処理が完了した旨の通知を受け取った後にシステム全体を再起動させる機能とを含むコンピュータ。
【請求項４】
コンピュータに、請求項１ないし請求項３のいずれかに記載の機能を実現させるためのプログラム。
【発明の詳細な説明】
【技術分野】
【０００１】
本発明は、優先順位方式でスケジューリングを行うオペレーティングシステム（ＯＳ：Operating System）を搭載したコンピュータ及びプログラムに関する。
【背景技術】
【０００２】
オペレーティングシステムの中には、プロセスを複数のスレッド（ＣＰＵ時間が割り与えられる処理単位または制御単位。ＯＳによってはタスクと読み替え可。）で構成し、各時点で優先順位の最も優先順位の高いスレッドにＣＰＵの占有権を与えるものがある。この種のオペレーティングシステム（例えば、Ｗｉｎｄｏｗｓ（登録商標） ＣＥなど）を搭載したコンピュータでは、あるスレッドが実行状態（ＣＰＵ占有状態）にある時は、他のスレッドは実行待ち状態（実行可能状態または待機状態）にある。したがって、実行状態にあるスレッドが何らかの異常により無限ループ状態に陥った場合、他のスレッドは実行状態に移行できなくなる。このときコンピュータは、タッチパネル、キーボード、マウスなどオペレータがコンピュータに指示を与えるための入力装置からの入力（コンソール割り込み）をまったく受け付けないいわゆるフリーズ状態（ロック状態や無応答状態とも呼ばれる）となる。
【０００３】
コンピュータがフリーズ状態になった場合、リセットボタンあるいは電源ボタンを押すなどのハードウェアリセット操作を行ってシステムを再起動（システムリスタート）させれば、コンピュータをフリーズ状態から脱出させることができる。しかし、コンピュータがフリーズ状態になったことにオペレータが気付かない限り、ハードウェアリセット操作は行われないため、コンピュータが長時間フリーズ状態のまま放置されることもある。
【０００４】
この種の問題を回避するための従来技術として、無限ループ状態検出用のプログラムをシステムに常駐させ、その実行を定期的に試みることにより、無限ループ状態の発生を監視し、無限ループ状態の発生を検出した場合には、直ちに、コンピュータが自らシステムの再起動を実行するようにしたもの（無限ループ監視装置）が知られている（特許文献１参照）。
【０００５】
しかし、上記従来技術では、コンピュータがフリーズ状態になる前の処理を再開するためには、システムが再起動した後に再度必要なプログラムをオペレータが選択してそれを再起動させなければならない。また、オペレータが必要なプログラムを再起動させる操作を行ってからそのプログラムの再起動が完了するまでにはそれなりの時間を要する。
【０００６】
また、無限ループ状態の発生が検出された場合には、直ちにシステムの再起動が実行されるため、無限ループ状態に陥っていないスレッド（実行可能状態または待機状態にあるスレッド）を含む全てのスレッドおよび関連するデータが主記憶やキャッシュからすべて消去されてしまう。このため、システムの再起動によって正常な終了処理を経ることなく主記憶から消去されてしまったスレッドによる処理を、プログラムの再起動完了後に再度実行しなければならない。したがって、プログラムの再起動完了後における処理効率も悪い。
【０００７】
【特許文献１】特開平９−６２５２０号公報
【発明の開示】
【発明が解決しようとする課題】
【０００８】
本発明は、上記事情に鑑みてなされたもので、無限ループ状態に陥った場合に、無限ループ状態に陥る前のシステムの状態を極力残して、無限ループ状態から自動復旧することが可能なコンピュータ及びプログラムを提供することを目的とする。
【課題を解決するための手段】
【０００９】
本発明のコンピュータは、優先順位方式によるスケジューリングを行ってスレッドの実行を管理するオペレーティングシステムを搭載したコンピュータであって、無限ループ状態に陥ったスレッドの発生を検出する無限ループ状態検出機能と、無限ループ状態に陥ったスレッドの発生が検出された場合、他のスレッドに退避処理を実行させた後、当該検出されたスレッドを再起動させるスレッド復旧機能と備えたものである。
【００１０】
この構成において、無限ループ状態に陥ったスレッドが発生し、これを検出した際、他のスレッドに退避処理を実行させた後、この無限ループ状態に陥ったスレッドを再起動させる。これにより、無限ループ状態に陥ったスレッドが発生した場合に、他のスレッドに及ぼされる影響を極力抑えつつ、無限ループ状態に陥ったスレッドを再起動することができる。なお、再起動させるスレッドには、このスレッドに関連するスレッド（無限ループ状態になる前に再起動させるスレッドと通信中であったスレッド、等）を含ませてもよい。
【００１１】
また、本発明の一態様として、上記のコンピュータであって、実行状態、実行可能状態、待機状態のうちのいずれかの状態にあるスレッドを、オペレーティングシステムの稼働中に一旦終了し再起動させて上記いずれかの状態に復旧できるユーザスレッドと、無限ループ状態に陥った場合にオペレーティングシステムを再起動させなければ上記いずれかの状態に復旧できないシステムスレッドとに分類して監視するスレッド監視機能を更に備え、前記スレッド復旧機能は、無限ループ状態に陥ったスレッドがユーザスレッドの場合は、無限ループ状態に陥ったスレッドのみ再起動させる無限ループスレッド再起動機能と、無限ループ状態に陥ったスレッドがシステムスレッドの場合は、全てのスレッドを再起動させる全スレッド再起動機能とを含むコンピュータを提供する。
【００１２】
この構成において、無限ループ状態に陥ったスレッドがユーザスレッドの場合は、このスレッドのみ再起動させ、無限ループ状態に陥ったスレッドがシステムスレッドの場合は、全てのスレッドを再起動させる。これにより、無限ループ状態に陥ったスレッドがユーザスレッドの場合は、該当するスレッドのみ再起動させるので、無限ループ状態に陥っていない他のスレッドや他のスレッドに関連するデータは、主記憶やキャッシュから消去されない。このため、無限ループ状態に陥らなかった他のスレッドに関しては、無限ループ状態に陥ったスレッドの再起動後に、無限ループ状態発生前の処理を再度実行する必要がない。したがって、無限ループ状態に陥ったスレッドが発生した場合に全てのスレッドの再起動を行うような従来の構成と比較して、再起動完了後における処理効率を向上できる。
【００１３】
また、本発明の一態様として、上記のコンピュータであって、前記無限ループスレッド再起動機能は、無限ループ状態に陥ったユーザスレッドの優先順位を下げる機能と、他のスレッドに待避処理を実行するよう通知する機能と、この他のスレッドから待避処理が完了した旨の通知を受けた後に前記ユーザスレッドを再起動させる機能とを含み、前記全スレッド再起動機能は、無限ループ状態に陥ったシステムスレッドの優先順位を下げる機能と、無限ループ状態に陥っていないスレッドに終了処理を実行するよう通知する機能と、無限ループ状態に陥っていないスレッドから終了処理が完了した旨の通知を受け取った後にシステム全体を再起動させる機能とを含むコンピュータを提供する。
【００１４】
この構成において、無限ループ状態に陥ったスレッドがユーザスレッドの場合は、このユーザスレッドの優先順位を下げるとともに、他のスレッドに待避処理を実行するよう通知し、他のスレッドから待避処理が完了した旨の通知を受けた後に無限ループ状態に陥ったユーザスレッドを再起動させる。一方、無限ループ状態に陥ったスレッドがシステムスレッドの場合は、このシステムスレッドの優先順位を下げ、他のスレッドに終了処理を実行するよう通知し、他のスレッドから終了処理が完了した旨の通知を受け取った後にシステム全体を再起動させる。これにより、無限ループ状態に陥ったスレッドがユーザスレッドの場合は、このユーザスレッドの再起動を実施するに際して、他のスレッドに確実に待避処理を行わせることができる。また、無限ループ状態に陥ったスレッドがシステムスレッドの場合は、システム全体を再起動させるに際し、無限ループ状態に陥ってない他のスレッドに確実に終了処理（待避処理の一種）を行わせることができる。
【００１５】
また、本発明は、コンピュータに、上記いずれかに記載の機能を実現させるためのプログラムを提供する。このプログラムをコンピュータにおいて実行させることにより、上記いずれかに記載のコンピュータの各機能を実現できる。
【発明の効果】
【００１６】
本発明によれば、無限ループ状態に陥った場合に、無限ループ状態に陥る前のシステムの状態を極力残して、無限ループ状態から自動復旧することが可能なコンピュータ及びプログラムを提供できる。
【発明を実施するための最良の形態】
【００１７】
本発明の実施形態として、優先順位方式でスケジューリングを行うオペレーティングシステム（ＯＳ）を搭載し、複数のスレッド（ＣＰＵ時間が割り与えられる処理単位または制御単位。ＯＳによってはタスクと読み替え可。）のうち、あるスレッドが何らかの異常により無限ループ状態になった場合に、それを検出して自動復旧する機能を備えたコンピュータについて説明する。ここでは、Ｗｉｎｄｏｗｓ（登録商標） ＣＥなどのいわゆるリアルタイムＯＳに適用した例を示す。
【００１８】
図１は本発明の実施形態に係るコンピュータの主要部の機能構成を示すブロック図である。
【００１９】
カーネル（Ｋｅｒｎｅｌ）１は、優先順位方式によるプリミティブなスケジューリングを行ってプログラムの実行単位であるスレッドの実行を管理する。すなわち複数のスレッドが同時に存在する場合、優先順位が最も高いスレッドに必ずタイムスライスが割り当てられる。最も優先順位が高いレベル０のスレッドを除き，同じ優先順位のスレッドの間ではラウンドロビン方式でタイムスライスが割り当てられる。レベル０のスレッドは，一度タイムスライスを獲得したら終了するまで処理を継続する。タイムスライスの最小単位はＯＳに依存する。カーネル１は、動的リンクライブラリ（ＤＬＬ）のロード、ページ単位のメモリ管理、例外処理、等も担当する。
【００２０】
スレッド間の同期には、Ｍｕｔｅｘ、クリティカルセクション、名前付きイベントが用いられる。カーネル１はこれらを用いてスレッドの処理の同期をとりつつ、リアルタイム処理を実現する。これらはいずれも処理の完了を通知する方法である。たとえば名前付きイベントは、あるスレッドが別のスレッドで発生したイベントが発生するまで処理を待つような場合に使用される。Ｍｕｔｅｘは共有リソースが別のプロセスに使われている場合に、これが解放されるのを待つのに利用される。クリティカルセクションは同一プロセス内で資源を共有する場合に利用される。
【００２１】
メモリ領域や入出力デバイスなどの資源の割り当ては、プロセス単位で行われる。プロセスは複数個のスレッドからなる。同時に実行できるプロセス数およびスレッド数はＯＳに依存する。スレッドの優先順位数もＯＳに依存する。
【００２２】
ソフトＷＤＴ（WatchDog Timer）カウンタクリアスレッド２は、定期的（たとえば１秒（sec ）毎）に起床するスレッドである。無限ループ復旧スレッド３は、ソフトＷＤＴカウンタクリアスレッド２が一定時間（たとえば２０sec 相当）以上起床できなかった場合に起動するスレッドである。ソフトＷＤＴカウンタ４は、ソフトＷＤＴカウンタクリアスレッド２によりカウンタ値がクリアされるスレッドである。割り込みハンドラ５は、割り込みを発生させるスレッドである。これらはシステムに常駐している。
【００２３】
リアルタイム処理が必要なスレッドである割り込みハンドラ５の優先順位は、レベル０（最優先：TIME CRITICAL）またはレベル１（最高：HIGHEST）である。カーネル１の優先順位は、割り込みハンドラ５のそれよりも低い。
【００２４】
ソフトＷＤＴカウンタクリアスレッド２、無限ループ復旧スレッド３、およびスレッドＡ、Ｂ、Ｃの優先順位はカーネル１のそれよりも低い。これらの中では無限ループ復旧スレッド３の優先順位が最も高く、ソフトＷＤＴカウンタクリアスレッド２の優先順位が最も低い。スレッドＡ、Ｂ、Ｃは、アプリケーションプログラムの実行に伴って起動されたスレッドであり、ここではこれらが無限ループ状態の監視対象となる。
【００２５】
［通常処理動作］
このコンピュータの通常時（無限ループ非発生時）における動作は次の通りである。割り込みハンドラ５は、ソフトＷＤＴカウンタ４を定期的（たとえば１０ｍsec 毎）にインクリメントするとともにソフトＷＤＴカウンタ４の値をチェックする。一方、ソフトＷＤＴカウンタクリアスレッド２は定期的（たとえば１sec 毎）に起動し、ソフトＷＤＴカウンタ４をクリア（カウント値＝０に）する。割り込みハンドラ５は、ソフトＷＤＴカウンタ４の値が無限ループが発生したと判断できる所定値（たとえば２０sec 相当）以上になったら、無限ループ状態が発生したと判断して割り込みを実行し、無限ループ復旧スレッド３を起動させる。
【００２６】
［復旧処理動作］
次に、無限ループ復旧スレッド３による復旧処理動作について図２〜図５を参照して説明する。
【００２７】
ここでは、スレッドＡがシステムスレッド、すなわち無限ループ状態に陥った場合にオペレーティングシステムを再起動させなければ復旧できないスレッドであり、スレッドＢおよびＣがユーザスレッド、すなわちオペレーティングシステムの稼働中に一旦終了し再起動させて上記いずれかの状態に復旧できるスレッドであるものとして説明する。
【００２８】
図２の第１例は、スレッドＡ、Ｂ、Ｃの中でスレッドＡの優先順位が最も低く、スレッドＣの優先順位が最も高い条件下で、ユーザスレッドであるスレッドＣが無限ループ状態に陥ったときの動作を示している。図３の第２例は、スレッドＡ、Ｂ、Ｃの中でスレッドＡの優先順位が最も高く、スレッドＣの優先順位が最も低い条件下で、システムスレッドであるスレッドＡが無限ループ状態に陥ったときの動作を示している。図２および図３中の矢印は復旧処理の際にデータが送られる向きを擬似的に示したものである。
【００２９】
図４は無限ループ復旧スレッド３による処理の全体の流れを例示したフローチャートである。図５は、図４中の無限ループスレッド検出処理の詳細を示すフローチャートである。図４および図５中の括弧付き数字の処理は、図２および図３中の括弧付き数字で示したデータ等の流れと対応している。
【００３０】
無限ループ復旧スレッド３は起動すると、図４に示すように、先ず、無限ループスレッド検出処理（ステップＳ１１）を実施する。
【００３１】
無限ループスレッド検出処理（ステップＳ１１）では、図５に示すように、先ず、カーネル１から各スレッド（スレッドＡ、Ｂ、Ｃを含む全スレッド）のＣＰＵ時間を取得し（ステップＳ２１、（１））、取得した値をロギングバッファ６に書き込む（ステップＳ２２、（２））。その後、ループカウンタにループ回数（ｃｎｔ）を設定する（ステップＳ２３、（３））。
【００３２】
そして、一定の時間（たとえば１sec ）スリープし（ステップＳ２４、（３））、起床するたびに、実行可能状態にあるスレッドのプログラムカウンタ（ＰＣ）を取得してそれをロギングバッファ６に書き込む処理（ステップＳ２５、（３））を実施する。この処理を終えるたびに、ループカウンタの値（ｃｎｔ）をデクリメントしていく（ステップＳ２６、（３））。そして、ループカウンタの値が０より大きいかを判断し（ステップＳ２７、（３））、０より大きい場合はステップＳ２４に戻ることによって、上記ステップＳ２４〜Ｓ２７の処理をループカウンタの値が０になるまで繰り返す。
【００３３】
ループカウンタの値が０になったら（ステップＳ２７でＮｏ）、カーネル１から各スレッドの累積ＣＰＵ時間を取得し（ステップＳ２８、（４））、取得した値をロギングバッファ６に書き込む（ステップＳ２９、（５））。ＣＰＵ時間の長さに関して上位（図示の例では１位から５位）にランクされるスレッドを算出し（ステップＳ３０、（５））、その結果をロギングバッファ６に書き込む（ステップＳ３１、（５））。そして、１位にランクされたスレッドのメモリ使用量を取得し（ステップＳ３２、（６））、その値をロギングバッファ６に書き込む（ステップＳ３３、（７））。その後、ループカウンタにループ回数（ｃｎｔ）を設定する（ステップＳ３４）。
【００３４】
そして、一定の時間（たとえば１００ｍsec ）スリープし（ステップＳ３５）、起床するたびに、１位にランクされたスレッドのプログラムカウンタを取得してそれをロギングバッファ６に書き込む処理（ステップＳ３６、（７））を実施する。この処理を終えるたびに、ループカウンタの値（ｃｎｔ）をデクリメントしていく（ステップＳ３７）。これをループカウンタの値が０になるまで繰り返す。
【００３５】
ループカウンタの値が０になったら（ステップＳ３８でＮｏ）、図５の無限ループスレッド検出処理を終了する。この無限ループスレッド検出処理により、ＣＰＵ使用時間の長さに関して１位にランキングされたスレッド、すなわち無限ループ状態に陥ったスレッドの検出とその特有情報（メモリ使用量およびプログラムカウンタ）の取得がなされたことになる。その後、図４のスレッド分類判別処理（ステップＳ１２）に進む。
【００３６】
スレッド分類判別処理（ステップＳ１２）では、無限ループスレッド検出処理（ステップＳ１１）で検出されたスレッドすなわち無限ループ状態に陥ったスレッドがユーザスレッドであるかシステムスレッドであるかの判別がなされる。
【００３７】
無限ループ状態に陥ったスレッドがユーザスレッドである場合、他の全てのスレッドに対して待避処理を実行するよう通知する（ステップＳ１３、（８））。次いで、無限ループ状態に陥ったスレッドの優先順位を下げる（ステップＳ１４、（９））。そして、他の全てのスレッドからの待避処理完了通知を待つ（ステップＳ１５、（１０））。他の全てのスレッドから待避処理完了通知を受け取ったら（ステップＳ１５でＹｅｓ）、無限ループ状態に陥ったスレッドを再起動させる（ステップＳ１６、（１１））。
【００３８】
一方、無限ループ状態に陥ったスレッドがシステムスレッドである場合、他の全てのスレッドに対して終了処理を実行するよう通知する（ステップＳ１７、（８））。次いで、無限ループ状態に陥ったスレッドの優先順位を下げる（ステップＳ１８、（９））。そして、他の全てのスレッドからの終了処理完了通知を待つ（ステップＳ１９、（１０））。他の全てのスレッドから終了処理完了通知を受け取ったら（ステップＳ１９でＹｅｓ）、システム全体を再起動（システムリセット）する（ステップＳ２０、（１１））。
【００３９】
図２の例では、ユーザスレッドであるスレッドＣが無限ループ状態になっているので、監視対象となっている他の全てのスレッドであるスレッドＡ、Ｂに対して待避処理を実行するよう通知する（ステップＳ１３）。そして、スレッドＣの優先順位を下げて（ステップＳ１４）、スレッドＡ、Ｂからの待避処理完了通知を待つ（ステップＳ１５）。スレッドＡ、Ｂから待避処理完了通知を受け取ったら（ステップＳ１５でＹｅｓ）、スレッドＣを再起動させる（ステップＳ１６）。
【００４０】
一方、図３の例では、システムスレッドであるスレッドＡが無限ループ状態になっているので、監視対象となっている他の全てのスレッドＢ、Ｃに対して終了処理を実行するよう通知する（ステップＳ１７）。そして、スレッドＡの優先順位を下げて（ステップＳ１８）、スレッドＢ、Ｃからの終了処理完了通知を待つ（ステップＳ１９）。スレッドＢ、Ｃから終了処理完了通知を受け取ったら（ステップＳ１９でＹｅｓ）、システム全体を再起動する（ステップＳ２０）。
【００４１】
上記のように、無限ループ状態に陥ったスレッドがユーザスレッドであるかシステムスレッドであるかを判別し、ユーザスレッドの場合は、無限ループ状態に陥っていない他の全てのスレッドに待避処理を行わせた後に、無限ループ状態に陥ったスレッドのみ再起動させるので、見かけ上リセットせずに、コンピュータを無限ループ状態から自動復旧させることができる。また、無限ループ状態に陥っていないスレッドに関連するデータは、主記憶やキャッシュから消去されないので、無限ループ状態に陥らなかったスレッドに関しては、無限ループ状態に陥ったスレッドの再起動後に、無限ループ状態発生前の処理を再度実行する必要がない。したがって、本実施形態では、再起動完了後における処理効率を向上できる。
【００４２】
また、無限ループ状態に陥ったスレッドがシステムスレッドの場合は、無限ループ状態に陥っていない他の全てのスレッドに終了処理を実行させてから、システム全体を再起動させるので、無限ループ状態に陥らなかったスレッドによる処理が途中で終了してしまったり、無限ループ状態発生前に得られた必要なデータが失われてしまったりするのを防止できる。
【００４３】
また、無限ループ状態に陥ったスレッドに絞ってＣＰＵ時間、メモリ使用量、プログラムカウンタ等の情報を取得してロギングバッファに書き込み、各スレッドの解析を可能とすることにより、無限ループ復旧の際に、解析に役立つ情報を効率良く取得でき、ロギングバッファの容量が少なくて済む。
【００４４】
このように、本実施形態のコンピュータは、優先順位方式でスケジューリングを行うことによりスレッドの実行を制御するＯＳを搭載したコンピュータでありながら、無限ループ状態に陥ったらそのことを検知し、無限ループ状態に陥っていないスレッドに退避処理を実行させた後で再起動処理を行うことによって、無限ループ状態に陥る前のシステムの状態を極力残して、無限ループ状態から自動復旧することができる。このため、優先順位方式でリアルタイム処理を行う必要がある組み込みＯＳを搭載したコンピュータ、たとえば携帯情報端末（ＰＤＡ）や携帯電話機、自動車制御用の車載コンピュータ等において有効に利用できる。
【産業上の利用可能性】
【００４５】
本発明は、無限ループ状態に陥った場合に、無限ループ状態に陥る前のシステムの状態を極力残して、無限ループ状態から自動復旧することが可能となる効果を有し、優先順位方式でスケジューリングを行うオペレーティングシステムを搭載したコンピュータ及びそのプログラム等に有用である。
【図面の簡単な説明】
【００４６】
【図１】本発明の実施形態に係るコンピュータの主要部の機能構成を示すブロック図
【図２】本実施形態の無限ループ復旧スレッドによる復旧処理動作の第１例を示す図
【図３】本実施形態の無限ループ復旧スレッドによる復旧処理動作の第２例を示す図
【図４】本実施形態の無限ループ復旧スレッドによる処理の全体の流れを例示したフローチャート
【図５】図４中の無限ループスレッド検出処理の詳細を示すフローチャート
【符号の説明】
【００４７】
１  カーネル
２  ソフトＷＤＴカウンタクリアスレッド
３  無限ループ復旧スレッド
４  ソフトＷＤＴカウンタ
５  割り込みハンドラ
６  ロギングバッファ
Ａ、Ｂ、Ｃ  スレッド
【図１】
2005182594.tif 000003
【図２】
2005182594.tif 000004
【図３】
2005182594.tif 000005
【図４】
2005182594.tif 000006
【図５】
2005182594.tif 000007