JP2008204011A - マルチスレッドシステム、スレッド動作異常検知方法 - Google Patents
マルチスレッドシステム、スレッド動作異常検知方法 Download PDFInfo
- Publication number
- JP2008204011A JP2008204011A JP2007037108A JP2007037108A JP2008204011A JP 2008204011 A JP2008204011 A JP 2008204011A JP 2007037108 A JP2007037108 A JP 2007037108A JP 2007037108 A JP2007037108 A JP 2007037108A JP 2008204011 A JP2008204011 A JP 2008204011A
- Authority
- JP
- Japan
- Prior art keywords
- thread
- priority
- abnormality detection
- execution
- operation abnormality
- 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
Links
Images
Landscapes
- Debugging And Monitoring (AREA)
Abstract
【課題】スレッドごとに、その実行を制御するスレッド実行制御部を作成し、該スレッド実行制御部が優先度に基づいて選択的に動作することにより、スレッドを切り替えながら実行するマルチスレッドシステムにおいて、優先度の高い2スレッド間で相互遷移してしまい、優先度の低いスレッドが実行対象とならない状況を検知できる新しい枠組みを提供する。
【解決手段】監視対象スレッドについて作成されたスレッド実行制御部の優先度よりも低い優先度で動作する動作機会監視部と、前記監視対象スレッドについて作成されたスレッド実行制御部の優先度よりも高い優先度で間欠的に動作する動作異常検知部と、を備え、前記動作異常検知部が、前記動作機会監視部が一定期間以上動作していない場合、実行対象とならない監視対象スレッドが存在する可能性が高いと判断し、動作異常を検知することを特徴とする。
【選択図】図6
【解決手段】監視対象スレッドについて作成されたスレッド実行制御部の優先度よりも低い優先度で動作する動作機会監視部と、前記監視対象スレッドについて作成されたスレッド実行制御部の優先度よりも高い優先度で間欠的に動作する動作異常検知部と、を備え、前記動作異常検知部が、前記動作機会監視部が一定期間以上動作していない場合、実行対象とならない監視対象スレッドが存在する可能性が高いと判断し、動作異常を検知することを特徴とする。
【選択図】図6
Description
本発明は、マルチスレッドシステムにおけるスレッド動作異常検知技術に関する。
従来より、様々な情報処理システムにおいて、スレッド又はタスク(以下、まとめて「スレッド」という)を複数生成し、各スレッドに設定されている優先度に基づいてスレッドを切り替えながら実行することが可能なマルチスレッドシステムが採用されている。
このようなマルチスレッドシステムにおけるスレッドの無限ループ等の動作異常を検知する方法として、監視対象となるスレッドとは別に、検知スレッド、監視スレッドを設ける方法が知られている。
例えば、特許文献1には、各タスクの動作状態を監視する監視タスクを優先度ごとに設けると共に、監視タスクの動作状態を監視する検知タスクを設け、検知タスクが監視タスクの動作状態に基づいて優先度ごとのタスクの異常を検知する構成が開示されている。
特開2006−11686号公報
しかし、上記のように優先度ごとに監視スレッドを設ける場合、優先度のレベル単位での動作異常しか検知できないことに加え、優先度のレベルが増えるとそれに応じて監視スレッドも増加するため、スレッド動作異常を検知するために使用するリソースが増加してしまうという問題がある。
また、例えば優先度のレベルが3以上ある場合に、優先度の高い2レベルのスレッド間で相互遷移を繰り返してしまい、その結果、それら2レベルより優先度の低いレベルのスレッドに実行権限が与えられないといった態様の無限ループが発生する場合があるが(以下、このような無限ループを「複合無限ループ」という)、この場合、優先度の各レベル単体では無限ループは発生していないので、上記のような従来構成によっては動作異常を検知することができない。
更に、特許文献1記載のシステムは、同一優先度に複数の監視対象スレッド(タスク)が存在する場合に、監視スレッドが前記複数の監視対象スレッドを順に実行する構成となっており、監視スレッドによってスレッドの遷移を制御することができるマルチスレッド実行環境を前提としているため、OSがスレッドの遷移を制御する(換言すれば、監視スレッドによってスレッドの遷移を制御できない)マルチスレッド実行環境に対してはそもそも適用することができない。
そこで、本発明は、これら種々の課題を解決することができる新しい枠組みを提供することを目的とする。
本発明のマルチスレッドシステムは、スレッドごとに、その実行を制御するスレッド実行制御部を作成し、該スレッド実行制御部が優先度に基づいて選択的に動作することにより、スレッドを切り替えながら実行するマルチスレッドシステムであって、監視対象スレッドについて作成されたスレッド実行制御部の優先度よりも低い優先度で動作する動作機会監視部と、前記監視対象スレッドについて作成されたスレッド実行制御部の優先度よりも高い優先度で間欠的に動作する動作異常検知部と、を備え、前記動作異常検知部が、前記動作機会監視部が一定期間以上動作していない場合、実行対象とならない監視対象スレッドが存在する可能性が高いと判断し、動作異常を検知することを特徴とする。
かかる構成によれば、複数の監視対象スレッド間で複合無限ループが発生した結果、実行対象とならない監視対象スレッドが存在する場合、該実行対象とならない監視対象スレッドよりも優先度の低い動作機会監視部も動作しないことから、動作機会監視部の未動作期間をチェックすることで、複合無限ループの発生を検知することができる。
また、監視対象スレッドの動作異常を検知するために優先度のレベルごとに監視スレッドを設ける必要がないので、スレッド動作異常を検知するために使用するリソースを抑制することができる。
また、動作機会監視部や動作異常検知部がスレッド実行制御部の実行を制御できることを前提としておらず、優先度に基づいてスレッドの遷移を制御するマルチスレッド実行環境であれば、適切に機能する。
好適には、スレッド切替が行われた場合に、監視対象スレッドの動作情報をメモリに記憶する遷移情報保持部を備え、前記動作異常検知部は、動作異常を検知した場合に、前記メモリに記憶されるスレッド動作情報に基づいて前記監視対象スレッドの停止順序を決定し、前記決定した停止順序に基づいて前記監視対象スレッドを停止するとともに、前記監視対象スレッドを停止する都度、所定期間にわたって当該動作異常検知部から実行権限が手放されるように制御し、該所定期間中に前記動作機会監視部が動作したことを確認できた場合に、該確認できるまでに停止した前記監視対象スレッドを動作異常の原因可能性スレッドであると判断する。
この場合、前記動作異常検知部は、スレッド遷移順序の逆順、実行時間の長い順、動作回数の多い順のうち、いずれかの順序となるように、前記監視対象スレッドの停止順序を決定することが望ましい。
また、前記動作異常検知部は、前記メモリに記憶されるスレッド動作情報のうち前記原因可能性スレッドの動作情報をデバッグ情報として出力することが望ましい。
かかる構成によれば、動作異常の原因となった可能性のある監視対象スレッドを適切に決定することができ、その原因となった可能性のある監視対象スレッドの動作情報に基づき、アプリケーションの修正作業を行うことができる。
本発明のスレッド動作異常検知方法は、マルチスレッドシステムにおけるスレッド動作異常検知方法であって、前記マルチスレッドシステムは、スレッドごとに、その実行を制御するスレッド実行制御部を作成し、該スレッド実行制御部が優先度に基づいて選択的に動作することにより、スレッドを切り替えながら実行するマルチスレッドシステムであり、監視対象スレッドについて作成されたスレッド実行制御部の優先度よりも低い優先度で動作する動作機会監視部を作成する工程と、前記監視対象スレッドについて作成されたスレッド実行制御部の優先度よりも高い優先度で間欠的に動作する動作異常検知部を作成する工程と、前記動作異常検知部が、前記動作機会監視部が一定期間以上動作していない場合、実行対象とならない監視対象スレッドが存在する可能性が高いと判断し、動作異常を検知する工程と、を備えることを特徴とする。
本発明のスレッド動作異常検知方法は、コンピュータにおいてCPUにより実行することができるが、そのためのコンピュータプログラムは、CD−ROM、磁気ディスク、半導体メモリ及び通信ネットワークなどの各種の媒体を通じてコンピュータにインストールまたはロードすることができる。
以上、本発明によれば、OSがスレッドの遷移を制御するマルチスレッド実行環境においても、スレッド動作異常を検知するために使用するリソースを抑制しつつ、複合無限ループを検出することができる。
(第1の実施形態)
以下に図面を参照しながら本発明の実施形態を説明する。
以下に図面を参照しながら本発明の実施形態を説明する。
図1は、本実施形態におけるマルチスレッドシステム1が構築されるコンピュータ2のハードウェア構成の概略を示す。コンピュータ2は、CPU(プロセッサ)、ROM、RAM、ユーザインタフェース、HDDなど、通常のコンピュータ装置と同様のハードウェアを備えている。
図2は、本実施形態におけるマルチスレッドシステム1の機能構成の概略を示す。マルチスレッドシステム1は、OS10、仮想マシン20、スレッド情報記憶手段30などを備えている。
スレッド情報記憶手段30は、監視対象となるユーザスレッド(アプリケーション上の並列実行の対象となる処理単位;以下、単に「スレッド」又は「監視対象スレッド」と記載した場合、ユーザスレッドを指すものとする)に対応するバイトコード(特定のOSやハードウェアに依存しないように定義された命令、又はその集合によって記述された実行形式のプログラム)等の情報を記憶している。
OS10及び仮想マシン20は、各スレッドに設定されている優先度に基づいてスレッドを切り替えながら実行するマルチスレッド実行環境を構築する。例えば、優先度が同じスレッドが2つ存在する場合、一方のスレッドのスレッド実行制御部に実行権限が与えられると、該スレッド実行制御部が実行権限を放棄する(該スレッドが終了する/停止する)まで他方のスレッドへスレッド切換は行われない。また優先度が異なるスレッドが2以上存在する場合、優先度が低いスレッドのスレッド実行制御部は、優先度の高いスレッドのスレッド実行制御部が実行権限を放棄している間のみ、実行権限を得ることができる。従って、優先度が低いスレッドの実行中、優先度の高いスレッドが実行可能になると、該優先度の低いスレッドの実行は停止され、該優先度の高いスレッドが実行されることになる。
このようなマルチスレッド実行環境を実現するために、OS10は、Linux等の従来のOSと同様に、スレッドの動作管理のために優先度等の情報を格納するスレッド管理テーブル11などを備えている。また仮想マシン20は、Java(登録商標)仮想マシン等の従来の仮想マシンと同様に、スレッドごとに作成され、その実行を制御するスレッド実行制御部21などを備えている。
ただし、本実施形態の仮想マシン20は、図3に示すように、スレッド動作異常検知ユニットとして、監視対象スレッドについて作成されたスレッド実行制御部21の優先度よりも低い優先度で動作する動作機会監視部22、監視対象スレッドについて作成されたスレッド実行制御部21の優先度よりも高い優先度で間欠的に動作する動作異常検知部23、スレッド切替が行われた場合に、監視対象スレッドの動作情報をメモリに記憶する遷移情報保持部24を備えている点、及び、動作異常検知部23が、動作機会監視部22が一定期間以上動作しない場合に、実行対象とならない監視対象スレッドが存在する可能性が高いと判断し、動作異常を検知する点で、従来の仮想マシン20とは異なっている。
なお、仮想マシン20はOS10上で動作するソフトウェアによって実現されることから、スレッド実行制御部21、動作機会監視部22、動作異常検知部23、遷移情報保持部24は、OS10上の仮想マシンスレッドとして把握することができる。
また仮想マシン20のためのプログラムは、コンピュータ2が備えるROMやHDD等の不揮発性記憶装置上に記憶されている。またスレッド情報記憶手段30等はコンピュータ2が備えるROMやHDD等の不揮発性記憶装置上に実現され、スレッド管理テーブル11はコンピュータ2が備えるRAM上に実現される。
以下、図4〜図6の各フローチャートを参照して、マルチスレッドシステム1におけるスレッド動作異常検知の枠組みを説明する。なお、所定の言語で記述されたアプリケーションソースコードをコンパイルした結果、各スレッドのバイトコードが得られており、スレッド識別情報に対応づけてスレッド情報記憶手段30に格納されているものとする。また、各工程(符号が付与されていない部分的な工程を含む)は処理内容に矛盾を生じない範囲で任意に順番を変更して又は並列に実行することができる。
(アプリケーションの開始)
仮想マシン20は、アプリケーションの実行指示を受け付けると、仮想マシンスレッドとして、mainスレッドに対応するスレッド実行制御部21、動作機会監視部22、動作異常検知部23、遷移情報保持部24を作成する。この場合、OS10は、スレッド管理テーブル11に、mainスレッドに対応するスレッド実行制御部21、動作機会監視部22、動作異常検知部23、遷移情報保持部24の情報(優先度など)を登録し、それらのステータスをReady状態とする。なお、スレッド実行制御部21等の仮想マシンスレッドは、Run状態(実行状態)のほか、Ready状態(実行可能状態)、Wait状態(実行待ち状態)などのステータスを取り得る。
仮想マシン20は、アプリケーションの実行指示を受け付けると、仮想マシンスレッドとして、mainスレッドに対応するスレッド実行制御部21、動作機会監視部22、動作異常検知部23、遷移情報保持部24を作成する。この場合、OS10は、スレッド管理テーブル11に、mainスレッドに対応するスレッド実行制御部21、動作機会監視部22、動作異常検知部23、遷移情報保持部24の情報(優先度など)を登録し、それらのステータスをReady状態とする。なお、スレッド実行制御部21等の仮想マシンスレッドは、Run状態(実行状態)のほか、Ready状態(実行可能状態)、Wait状態(実行待ち状態)などのステータスを取り得る。
またOS10は、優先度に基づいてスレッド切換を制御すべく、スレッド管理テーブル11に登録されるReady状態の仮想マシンスレッドから優先度に基づいて1つを選択し、該選択した仮想マシンスレッドをRun状態とする(実行権限を与える)。
ここで、本実施形態では、ユーザによって監視対象スレッドに設定できる優先度のレベルはP1〜PNのNレベル(P1がユーザ設定可能な最高レベル、PNが設定可能な最低レベル)に限定されている。一方、動作機会監視部22には、PNよりも低いレベルPMの優先度が設定されており、動作異常検知部23には、P1よりも高いレベルP0の優先度が設定されている。また、遷移情報保持部24には、P0よりも高いレベルの優先度Pzが設定されている。
従って、アプリケーションの実行指示を受け付けた段階では、まず優先度Pzの遷移情報保持部24がRun状態となる。後述するように、遷移情報保持部24は動作を開始すると、スレッド切換(遷移)が発生するまでWait状態となり、実行権限が他の仮想マシンスレッドに移行する。
この場合、優先度P0の動作異常検知部23がReady状態となっていれば、実行権限が与えられてRun状態となる。後述するように、動作異常検知部23は動作を開始すると、一旦スリープしてWait状態となり、実行権限が他の仮想マシンスレッドに移行する。
遷移情報保持部24及び動作異常検知部23がWait状態となっている場合、Ready状態となっているスレッド実行制御部21のうち優先度に基づいて選択されたいずれかがRun状態となる。
更に、遷移情報保持部24、動作異常検知部23及び各スレッドのスレッド実行制御部21が全てWait状態となっている場合、動作機会監視部22がRun状態となる。
以下、上記のような優先度に基づくスレッド切換制御が行われることを前提として、各部の処理内容を説明する。
(スレッド実行制御部21:図4)
実行権限を与えられた(すなわち、Run状態の)スレッド実行制御部21は、スレッド情報記憶手段30を参照して、対応するスレッドのバイトコードを順次、取得する(S100)。
実行権限を与えられた(すなわち、Run状態の)スレッド実行制御部21は、スレッド情報記憶手段30を参照して、対応するスレッドのバイトコードを順次、取得する(S100)。
S100においてバイトコードを取得できなかった場合(読み出すバイトコードが無かった場合)(S101:No)、仮想マシン20は、Run状態のスレッド実行制御部21を解放する(S102)。この場合、OS10は、解放されたスレッド実行制御部21の情報をスレッド管理テーブル11から削除するとともに、スレッド管理テーブル11に登録されるReady状態の仮想マシンスレッドから優先度に基づいて1つを選択し、該選択した仮想マシンスレッドをRun状態とする。なお、スレッド管理テーブル11にスレッド実行制御部21が登録されていない場合は、アプリケーションが終了することになる。
一方、バイトコードを取得できた場合(S101:Yes)、スレッド実行制御部21は、前記取得したバイトコードをコンピュータ2で実行可能なネイティブコードに変換して実行する(S103)。
例えば、前記取得したバイトコードがスレッドの生成を示すものであった場合、Run状態のスレッド実行制御部21は、生成スレッドに対応するスレッド実行制御部21を作成する。この場合、OS10は、スレッド管理テーブル11に生成スレッドに対応するスレッド実行制御部21の情報を登録し、そのステータスをWait状態とする。
また例えば、前記取得したバイトコードが他のスレッドの開始を示すものであった場合、OS10は、スレッド管理テーブル11を参照し、開始スレッドに対応するスレッド実行制御部21のステータスをReady状態とする。なお、OS10は、スリープ時間が経過したスレッド実行制御部21、ロックを獲得できたスレッド実行制御部21、イベント待ちのイベントが起きたスレッド実行制御部21等についても、そのステータスをReady状態とする。
S103の工程の後、仮想マシン20は、Run状態のスレッド実行制御部21について処理を続行させるべく、S101に再帰する。
ただし、例えば、S100で取得したバイトコードがスレッド切換を発生させるものであった場合(INVOKESTATIC命令によるスリープ関数呼び出し、MONITOR#ENTER命令によるロック確保待ちなど)、OS10は、スレッド管理テーブル11を参照し、Run状態のスレッド実行制御部21のステータスをWait状態とする一方、Ready状態のスレッド実行制御部21から各スレッドの優先度に基づいて1つを選択して、Run状態とする(スレッドを切り替える)。
この結果、S103の工程を実行したスレッド実行制御部21は一旦停止し、他の仮想マシンスレッドに実行権限が移ることになる。
(動作機会監視部22)
実行権限を与えられた動作機会監視部22は、動作フラグが0の場合、これを1に変更する。一方、動作フラグが1の場合、実質的な処理を行うことなく、実行権限が他に移行するのを待つ。なお、動作フラグは、動作機会監視部22の動作状況を示すためにRAM上に準備され(1:動作、0:未動作)、初期値は0であるものとする。
実行権限を与えられた動作機会監視部22は、動作フラグが0の場合、これを1に変更する。一方、動作フラグが1の場合、実質的な処理を行うことなく、実行権限が他に移行するのを待つ。なお、動作フラグは、動作機会監視部22の動作状況を示すためにRAM上に準備され(1:動作、0:未動作)、初期値は0であるものとする。
(遷移情報保持部24:図5)
実行権限を与えられた遷移情報保持部24は、スレッド切換(遷移)の発生をイベント待ちする(S200)。
実行権限を与えられた遷移情報保持部24は、スレッド切換(遷移)の発生をイベント待ちする(S200)。
この場合、上述したように、優先度に基づくスレッド切換制御を行うOS10は、スレッド管理テーブル11を参照し、スレッド切換が発生するまで、遷移情報保持部24のステータスをWait状態に制御する。また、スレッド管理テーブル11に登録されるReady状態の仮想マシンスレッドから優先度に基づいて1つを選択し、該選択した仮想マシンスレッドをRun状態とする。一方、スレッド切換が発生すると、OS10は、遷移情報保持部24にスレッド切換イベントの発生を通知し、遷移情報保持部24のステータスをReady状態とする。この場合、遷移情報保持部24は他の仮想マシンスレッドよりも優先度が高いので、再びRun状態となる。
スレッド切換の発生によって再び実行権限が与えられた遷移情報保持部24は、OS10から通知される切換前後の監視対象スレッドの動作情報を遷移情報テーブルに格納する(S201)。
遷移情報テーブルは、監視対象スレッドの動作情報を遷移順に格納するためにRAM上に準備される。図7に遷移情報テーブルの例を概念的に示す。該例に示すように、遷移情報テーブルには、動作情報として、スレッド識別情報、スレッド名、実行時間、スタック情報などを格納することができ、例えば、S201では、スレッド切換後に実行対象となった監視対象スレッドのスレッド識別情報に対応づけて、スレッド名が格納される。また、スレッド切換前に実行対象となっていた監視対象スレッドのスレッド識別情報、スレッド名に対応づけて、実行時間、スタック情報などが格納される。なお該例では、図においてより上の動作情報ほど、最近に遷移した監視対象スレッドの情報である。
次に、遷移情報保持部24は、遷移情報テーブルの動作情報格納領域に空きがあるか否かを判断し(S202)、空きがある場合は、S200に再帰する。
一方、空きがない場合、遷移情報保持部24は、遷移情報テーブルに格納される動作情報のうち最も古い動作情報を削除し(S203)、その後、S200に再帰する。
(動作異常検知部23:図6)
実行権限を与えられた動作異常検知部23は、間欠的に(すなわち、定期的に実行権限の取得/放棄を繰り返すように)動作すべく、一定期間Pスリープする(S300)。一定期間Pは、設計に応じて定めることができ、予めROM又はHDD上に(例えばプログラムの一部として)記憶されているものとする。
実行権限を与えられた動作異常検知部23は、間欠的に(すなわち、定期的に実行権限の取得/放棄を繰り返すように)動作すべく、一定期間Pスリープする(S300)。一定期間Pは、設計に応じて定めることができ、予めROM又はHDD上に(例えばプログラムの一部として)記憶されているものとする。
この場合、上述したように、優先度に基づくスレッド切換制御を行うOS10は、スレッド管理テーブル11を参照し、一定期間P、動作異常検知部23のステータスをWait状態に制御する。また、スレッド管理テーブル11に登録されるReady状態の仮想マシンスレッドから優先度に基づいて1つを選択し、該選択した仮想マシンスレッドをRun状態とする。一方、一定期間Pが経過した時点で、OS10は、動作異常検知部23のステータスをReady状態とする。この結果、動作異常検知部23は遷移情報保持部24を除く他の仮想マシンスレッドよりも優先度が高いので、遷移情報保持部24がReady状態となっていなければ、再びRun状態となる。
一定期間Pの経過によって再び実行権限が与えられた動作異常検知部23は、動作フラグが1であるか0であるかを判断する(S301)。
動作フラグが1の場合、動作異常検知部23は、これを0に変更するとともに(S302)、連続未動作カウンタを0にリセットし(S303)、S300に再帰する。なお、連続未動作カウンタは、動作異常検知部23による動作機会監視部22の未動作状態の確認回数(連続未動作回数)を格納するためにRAM上に準備され、初期値は0であるものとする。
一方、動作フラグが0の場合、動作異常検知部23は、連続未動作カウンタに1を加算する(S304)。
次に、動作異常検知部23は、連続未動作カウンタの値が予め定めた閾値Tを越えたか否かを判断する(S305)。閾値Tは、設計に応じて定めることができ、予めROM又はHDD上に(例えばプログラムの一部として)記憶されているものとする。
閾値Tを越えていない場合、動作異常検知部23は、動作異常が生じていないと判断し、S300に再帰する。
一方、閾値Tを越えている場合、動作機会監視部22が一定期間Q(=P×T)以上動作していないことになるので、動作異常検知部23は、実行対象とならない監視対象スレッドが存在する可能性が高いと判断し、動作異常を検知する(S306)。このとき、遷移情報保持部24が、該タイミングにおいて実行対象となっている監視対象スレッドの動作情報を遷移情報テーブルに格納するように構成してもよい。
本実施形態では、動作機会監視部22の優先度は監視対象スレッドのスレッド実行制御部21よりも低いので、動作機会監視部22が動作した場合、全ての監視対象スレッドのスレッド実行制御部21がReady状態でないこと、従って、Ready状態であるにもかかわらずRun状態に移行されないスレッド実行制御部21は存在しないことが保証される。そこで、本実施形態では、動作機会監視部22が一定期間Q以上動作していない場合、すなわち、一定期間Q以上にわたって上記保証が行われていない場合、Ready状態のままRun状態へ移行されないスレッド実行制御部21(すなわち、実行対象とならない監視対象スレッド)が存在する可能性が高いと判断し、そのような状況を動作異常として検知している。
次に、動作異常検知部23は、動作異常の原因となっている可能性のあるスレッドを決定する(S307〜S313)。
具体的には、動作異常検知部23は、遷移情報保持部24を強制停止する(S307)。
次に、動作異常検知部23は、遷移情報テーブルに格納される監視対象スレッドの動作情報に基づいて、監視対象スレッドの停止順序を決定する(S308)。
停止順序の決定方法としては、1)スレッド遷移順序の逆順となるように決定する、2)実行時間の長い順となるように決定する、3)動作回数の多い順となるように決定することが考えられる。それぞれ、1)動作異常検知タイミングに動作タイミングが近いスレッドほど、2)実行時間が長いスレッドほど、3)動作回数が多いスレッドほど、動作異常検知時の状況に対して支配的であり、動作異常の原因となっている可能性が高いとの判断基準に基づく。
例えば、図7に示す例では、監視対象スレッドとしてスレッド1〜3の3つが存在しているが、1)スレッド遷移順序の逆順となるように決定する場合であれば、停止順序はスレッド1、スレッド3、スレッド2の順序となる。また、2)実行時間の長い順となるように決定する場合であれば、停止順序はスレッド1(実行時間合計6)、スレッド2(実行時間合計4)、スレッド3(実行時間合計3)の順序となる。また、3)動作回数の多い順となるように決定する場合であれば、停止順序はスレッド1(動作回数3)、スレッド3(動作回数2)、スレッド2(動作回数1)の順序となる。
次に、動作異常検知部23は、前記決定した停止順序に基づいて、まだ停止されていない監視対象スレッドのうち一つを選択し、該選択した監視対象スレッドを停止する(S309)。この場合、OS10は、前記選択した監視対象スレッドに対応するスレッド実行制御部21のステータスをWait状態に変更する。
次に、動作異常検知部23は、一定期間Rにわたって動作異常検知部23から実行権限が手放されるように制御すべく、一定期間Rスリープする(S310)。一定期間Rは、設計に応じて定めることができ、予めROM又はHDD上に(例えばプログラムの一部として)記憶されているものとする。
この場合、上述したように、優先度に基づくスレッド切換制御を行うOS10は、スレッド管理テーブル11を参照し、一定期間R、動作異常検知部23のステータスをWait状態に制御する。また、スレッド管理テーブル11に登録されるReady状態の仮想マシンスレッドから優先度に基づいて1つを選択し、該選択した仮想マシンスレッドをRun状態とする。一方、一定期間Rが経過した時点で、OS10は、動作異常検知部23のステータスをReady状態とする。この結果、動作異常検知部23は、遷移情報保持部24がReady状態となっていなければ、再びRun状態となる。
一定期間Rの経過によって再び実行権限が与えられた遷移情報保持部24は、動作フラグが1であるか0であるかを判断する(S311)。
動作フラグが0の場合、動作異常検知部23は、S309に再帰する。
一方、動作フラグが1の場合、すなわち、直近のスリープの一定期間R中に動作機会監視部22が動作したことを確認できた場合、動作異常検知部23は、該確認できるまでに停止した監視対象スレッドを動作異常の原因可能性スレッドであると判断する(S312)。これらを停止したことにより、複合無限ループが解消したと考えられるからである。
次に、動作異常検知部23は、例えば標準エラー出力に、遷移情報テーブルに格納される監視対象スレッドの動作情報のうち前記原因可能性スレッドの動作情報をデバッグ情報として出力する(S313)。
次に、動作異常検知部23は、遷移情報保持部24の強制停止を解除し(S314)、その後、S302に再帰する。なお、デバッグ情報を出力した段階で、アプリケーションを終了するように構成してもよい。
このように本実施形態では、監視対象スレッドよりも低い優先度で動作する動作機会監視部22と、監視対象スレッドよりも高い優先度で間欠的に動作する動作異常検知部23とを設けるとともに、動作異常検知部23が、動作機会監視部22が一定期間Q以上動作していない場合、実行対象とならない監視対象スレッドが存在する可能性が高いと判断し、動作異常を検知する構成を採用している。
かかる構成によれば、複数の監視対象スレッド間で複合無限ループが発生した結果、実行対象とならない監視対象スレッドが存在する場合、該実行対象とならない監視対象スレッドよりも優先度の低い動作機会監視部22も動作しないことから、動作機会監視部22の未動作期間をチェックすることで、複合無限ループの発生を検知することができる。
また、監視対象スレッドの動作異常を検知するための監視スレッドを優先度のレベルごとに設ける必要がないので、スレッド動作異常を検知するために使用するリソースを抑制することができる。
また、本実施形態の構成は、仮想マシンスレッド(例えば、動作機会監視部22や動作異常検知部23)が他の仮想マシンスレッド(例えば、スレッド実行制御部21)の実行を制御できることを前提としておらず、優先度に基づいてスレッドの遷移を制御するマルチスレッド実行環境であれば、適切に機能する。
(変形例)
本発明は、上記実施形態に限定されることなく種々に変形して適用することが可能である。例えば、上記各実施形態では、ユーザインタフェース、HDDを備えるコンピュータ2上にマルチスレッドシステム1を構築しているが、本発明は、ユーザインタフェース、HDDを備えていないデバイスにおいても適用可能である。
本発明は、上記実施形態に限定されることなく種々に変形して適用することが可能である。例えば、上記各実施形態では、ユーザインタフェース、HDDを備えるコンピュータ2上にマルチスレッドシステム1を構築しているが、本発明は、ユーザインタフェース、HDDを備えていないデバイスにおいても適用可能である。
また例えば、上記実施形態では、優先度に基づいてスレッドを切り替えながら実行するマルチスレッドシステムについて説明しているが、優先度及び時分割制御に基づいてスレッドを切り替えながら実行するマルチスレッドシステムに対して本発明を適用してもよい。
また例えば、上記実施形態では、遷移情報保持部24がスレッド切換の発生を条件として切換後の監視対象スレッドの動作情報を遷移情報テーブルに格納する構成としているが、遷移情報保持部24を設ける代わりに、各スレッド実行制御部21がそれぞれ、スレッド切替が行われた場合に、切換後の監視対象スレッドの動作情報をメモリに記憶する構成(各スレッド実行制御部21が遷移情報保持部を備える構成)としてもよい。
このような構成を採る場合、例えば、スレッド実行制御部21は、S103の工程を実行する前に、前回S103の工程が実行されてからスレッド切換が発生したか否かを判断する。該判断方法としては、例えば、前回S103を実行したスレッド実行制御部に対応するスレッドの識別情報、及び今回S103を実行したスレッド実行制御部に対応するスレッドの識別情報をそれぞれRAMに記憶するように構成し、両者が一致しない場合にスレッド切換が発生したと判断することが考えられる。スレッド切換が発生している場合、スレッド実行制御部21は、自己に対応する監視対象スレッドの動作情報を遷移情報テーブルに格納する。
また例えば、上記実施形態では、動作機会監視部22の未動作状態の確認回数(連続未動作回数)をカウントし、連続未動作回数が閾値Tを超えた場合に動作異常を検知する構成としているが、未動作状態を確認できた場合(動作フラグが0であった場合)に直ちに動作異常を検知する構成としてもよい。なお、一定期間Pや閾値Tは設計に応じて定めることができ、これらのパラメータを適宜調整することで、複合無限ループの検知感度を柔軟に設定することができる。
また例えば、上記実施形態では、動作機会監視部22が動作した場合に動作フラグを変更する構成としているが、例えば、動作フラグを変更する代わりに、動作した時点の時間情報(タイマ値など)を記録するように構成してもよい。この場合、動作異常検知部23は、前記記録された時間情報と現在時間情報とを比較して直接的に未動作期間を求めて動作異常を判断する構成とすることが考えられる。
また、上記実施形態では、優先度に基づくスレッドのスケジューリングをOS10が実行するマルチスレッド実行環境としているが、該スケジューリングを仮想マシン20が行うように構成してもよい。また、OS10がLWP(Light Weight Process)に対応している場合は、OS10及び仮想マシン20においてそれぞれスケジューリングを行う2層構造のマルチスレッド実行環境を採用してもよい。また、上記実施形態では、マルチスレッド実行環境をOS10及び仮想マシン20によって構築しているが、本発明は必ずしもこのような態様に限られない。例えば、仮想マシンを介さずにOS単体でマルチスレッド実行環境を構築する態様であってもよい。
1 マルチスレッドシステム;2 コンピュータ;10 OS;20 仮想マシン;21 スレッド実行制御部;22 動作機会監視部;23 動作異常検知部;24 遷移情報保持部;30 スレッド情報記憶手段
Claims (6)
- スレッドごとに、その実行を制御するスレッド実行制御部を作成し、該スレッド実行制御部が優先度に基づいて選択的に動作することにより、スレッドを切り替えながら実行するマルチスレッドシステムであって、
監視対象スレッドについて作成されたスレッド実行制御部の優先度よりも低い優先度で動作する動作機会監視部と、
前記監視対象スレッドについて作成されたスレッド実行制御部の優先度よりも高い優先度で間欠的に動作する動作異常検知部と、を備え、
前記動作異常検知部が、前記動作機会監視部が一定期間以上動作していない場合、実行対象とならない監視対象スレッドが存在する可能性が高いと判断し、動作異常を検知することを特徴とするマルチスレッドシステム。 - スレッド切替が行われた場合に、監視対象スレッドの動作情報をメモリに記憶する遷移情報保持部を備え、
前記動作異常検知部は、
動作異常を検知した場合に、前記メモリに記憶されるスレッド動作情報に基づいて前記監視対象スレッドの停止順序を決定し、前記決定した停止順序に基づいて前記監視対象スレッドを停止するとともに、前記監視対象スレッドを停止する都度、所定期間にわたって当該動作異常検知部から実行権限が手放されるように制御し、該所定期間中に前記動作機会監視部が動作したことを確認できた場合に、該確認できるまでに停止した前記監視対象スレッドを動作異常の原因可能性スレッドであると判断することを特徴とする請求項1記載のマルチスレッドシステム。 - 前記動作異常検知部は、スレッド遷移順序の逆順、実行時間の長い順、動作回数の多い順のうち、いずれかの順序となるように、前記監視対象スレッドの停止順序を決定することを特徴とする請求項2記載のマルチスレッドシステム。
- 前記動作異常検知部は、前記メモリに記憶されるスレッド動作情報のうち前記原因可能性スレッドの動作情報をデバッグ情報として出力することを特徴とする請求項2又は3に記載のマルチスレッドシステム。
- マルチスレッドシステムにおけるスレッド動作異常検知方法であって、
前記マルチスレッドシステムは、スレッドごとに、その実行を制御するスレッド実行制御部を作成し、該スレッド実行制御部が優先度に基づいて選択的に動作することにより、スレッドを切り替えながら実行するマルチスレッドシステムであり、
監視対象スレッドについて作成されたスレッド実行制御部の優先度よりも低い優先度で動作する動作機会監視部を作成する工程と、
前記監視対象スレッドについて作成されたスレッド実行制御部の優先度よりも高い優先度で間欠的に動作する動作異常検知部を作成する工程と、
前記動作異常検知部が、前記動作機会監視部が一定期間以上動作していない場合、実行対象とならない監視対象スレッドが存在する可能性が高いと判断し、動作異常を検知する工程と、を備えることを特徴とするスレッド動作異常検知方法。 - 請求項5記載のスレッド動作異常検知方法をコンピュータで実行させるためのプログラム。
Priority Applications (1)
Application Number | Priority Date | Filing Date | Title |
---|---|---|---|
JP2007037108A JP2008204011A (ja) | 2007-02-16 | 2007-02-16 | マルチスレッドシステム、スレッド動作異常検知方法 |
Applications Claiming Priority (1)
Application Number | Priority Date | Filing Date | Title |
---|---|---|---|
JP2007037108A JP2008204011A (ja) | 2007-02-16 | 2007-02-16 | マルチスレッドシステム、スレッド動作異常検知方法 |
Publications (1)
Publication Number | Publication Date |
---|---|
JP2008204011A true JP2008204011A (ja) | 2008-09-04 |
Family
ID=39781483
Family Applications (1)
Application Number | Title | Priority Date | Filing Date |
---|---|---|---|
JP2007037108A Pending JP2008204011A (ja) | 2007-02-16 | 2007-02-16 | マルチスレッドシステム、スレッド動作異常検知方法 |
Country Status (1)
Country | Link |
---|---|
JP (1) | JP2008204011A (ja) |
Cited By (3)
Publication number | Priority date | Publication date | Assignee | Title |
---|---|---|---|---|
JP2010182237A (ja) * | 2009-02-09 | 2010-08-19 | Nec Corp | スタックトレース採取システム、方法およびプログラム |
CN103246589A (zh) * | 2012-02-03 | 2013-08-14 | 京信通信系统(中国)有限公司 | 一种多线程的监控方法及装置 |
JP7002618B1 (ja) * | 2020-10-08 | 2022-01-20 | レノボ・シンガポール・プライベート・リミテッド | 電子機器、及び制御方法 |
-
2007
- 2007-02-16 JP JP2007037108A patent/JP2008204011A/ja active Pending
Cited By (3)
Publication number | Priority date | Publication date | Assignee | Title |
---|---|---|---|---|
JP2010182237A (ja) * | 2009-02-09 | 2010-08-19 | Nec Corp | スタックトレース採取システム、方法およびプログラム |
CN103246589A (zh) * | 2012-02-03 | 2013-08-14 | 京信通信系统(中国)有限公司 | 一种多线程的监控方法及装置 |
JP7002618B1 (ja) * | 2020-10-08 | 2022-01-20 | レノボ・シンガポール・プライベート・リミテッド | 電子機器、及び制御方法 |
Similar Documents
Publication | Publication Date | Title |
---|---|---|
US8706265B2 (en) | Safety controller and safety control method | |
JP5405320B2 (ja) | 仮想計算機制御装置、仮想計算機制御方法及び仮想計算機制御プログラム | |
US8756606B2 (en) | Safety controller and safety control method in which time partitions are scheduled according to a scheduling pattern | |
EP2677377B1 (en) | Safety control device and safety control method | |
US20120245709A1 (en) | Safety controller and safety control method | |
TWI498820B (zh) | 具有用於分支錯誤預測之第二跳躍執行單元的處理器 | |
JP5621857B2 (ja) | 安全制御装置および安全制御方法 | |
JP4992740B2 (ja) | マルチプロセッサシステム、障害検出方法および障害検出プログラム | |
JP2008204011A (ja) | マルチスレッドシステム、スレッド動作異常検知方法 | |
JP2008204013A (ja) | スレッド動作異常検知方法、マルチスレッドシステム | |
US10761512B2 (en) | Numerical controller | |
JP5906584B2 (ja) | 制御装置及び制御方法 | |
JP2006227962A (ja) | アプリケーションタスク監視システムおよび方法 | |
TWI549054B (zh) | 用於分支預測錯誤之賦能及去能第二跳越執行單元之技術 | |
JP5018140B2 (ja) | マルチプロセッサシステム、タスクスケジューリング方法およびタスクスケジューリングプログラム | |
JP2010211574A (ja) | 情報処理システム、監視方法及び監視プログラム | |
JP5699910B2 (ja) | 制御装置および制御方法 | |
JP4387863B2 (ja) | 擾乱発生検出プログラムおよび擾乱発生検出方法 | |
JP7338548B2 (ja) | リアルタイム演算処理装置 | |
JP7331768B2 (ja) | リアルタイム演算処理装置 | |
JP5906807B2 (ja) | 演算処理装置及びストール監視方法 | |
JP5533526B2 (ja) | チャネル制御装置および方法 | |
JP6477216B2 (ja) | 演算装置、スレッド切替方法、及びマルチスレッドプログラム | |
JP2007219834A (ja) | デッドライン監視システムおよびデッドライン監視方法 | |
JP2010205046A (ja) | 情報処理装置 |