JP2008204013A - スレッド動作異常検知方法、マルチスレッドシステム - Google Patents
スレッド動作異常検知方法、マルチスレッドシステム Download PDFInfo
- Publication number
- JP2008204013A JP2008204013A JP2007037123A JP2007037123A JP2008204013A JP 2008204013 A JP2008204013 A JP 2008204013A JP 2007037123 A JP2007037123 A JP 2007037123A JP 2007037123 A JP2007037123 A JP 2007037123A JP 2008204013 A JP2008204013 A JP 2008204013A
- Authority
- JP
- Japan
- Prior art keywords
- thread
- operation abnormality
- control unit
- execution
- executed
- 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.)
- Withdrawn
Links
Images
Landscapes
- Debugging And Monitoring (AREA)
Abstract
【課題】マルチスレッドシステムにおいて、アプリケーションのソースコードに依存することなく、スレッド内で発生する無限ループを検知することができる新しい枠組みを提供する。
【解決手段】マルチスレッドシステムにおけるスレッド動作異常検知方法であって、実行対象スレッドに関して連続して実行される命令の数を計数する計数工程と、前記計数した命令数が予め定めた閾値を超えた場合に、実行対象スレッドに動作異常が生じていると判断する工程と、動作異常が生じていると判断したスレッドの動作が停止するように制御する停止制御工程とを備える。
【選択図】図4
【解決手段】マルチスレッドシステムにおけるスレッド動作異常検知方法であって、実行対象スレッドに関して連続して実行される命令の数を計数する計数工程と、前記計数した命令数が予め定めた閾値を超えた場合に、実行対象スレッドに動作異常が生じていると判断する工程と、動作異常が生じていると判断したスレッドの動作が停止するように制御する停止制御工程とを備える。
【選択図】図4
Description
本発明は、マルチスレッドシステムにおけるスレッド動作異常検知技術に関する。
従来より、様々な情報処理システムにおいて、スレッド又はタスク(以下、まとめて「スレッド」という)を複数生成し、各スレッドに設定されている優先度に基づいてスレッドを切り替えながら実行することが可能なマルチスレッドシステムが採用されている。
このようなマルチスレッドシステムにおいて個々のスレッドの無限ループ等の動作異常を検知する方法として、WDT(ウォッチドッグタイマ)を用いる方法が知られている。
例えば、特許文献1に記載されるシステムは、各スレッドがWDTに生存通知を行う一方で、WDTが周期的に各スレッドに対応するカウンタを更新する構成を採用する。そして、WDTは、生存通知があったスレッドについては正常動作していると判断し、該スレッドに対応するカウンタをリセットする一方、一定時間にわたって生存通知がないスレッド、すなわちカウンタ値が一定以上となったスレッドについては動作異常と判断する。
特開平5−346877号公報
しかし、上記のように各スレッドがWDTに生存通知を行うことで動作異常の有無を判断する場合、次のような問題がある。
すなわち、スレッドからWDTへの生存通知は、スレッド内の生存通知命令が実行されることにより行われる。そのため、該バイトコードにおいて生存通知命令の実行を含むような無限ループが発生した場合、ループする都度、生存通知が行われて該スレッドに対応するカウンタがリセットされることになるので、WDTは無限ループの発生を検知することができない。
更に、アプリケーションのソースコードのどこに生存通知命令に対応するコードを埋め込むかによって、対応するスレッド内の生存通知命令の位置が定まるため、検知できない無限ループの存否、ひいてはスレッド動作異常の検知精度が、アプリケーションのソースコードに大きく依存してしまうという問題もある。
また、従来のWDTを用いたスレッド動作異常検知方法では、正常に動作しないスレッドの検知は可能であるが、その原因となる無限ループなどのスレッド動作異常を起こすスレッドを特定することは難しかった。
そこで、本発明は、アプリケーションのソースコードに依存することなく、スレッド内で発生する無限ループを検知することができる新しい枠組みを提供することを目的とする。
本発明のスレッド動作異常検知方法は、マルチスレッドシステムにおけるスレッド動作異常検知方法であって、実行対象スレッドに関して連続して実行される命令の数を計数する計数工程と、前記計数した命令数が予め定めた閾値を超えた場合に、実行対象スレッドに動作異常が生じていると判断する工程と、動作異常が生じていると判断したスレッドの動作を停止する停止制御工程とを備えることを特徴とする。
かかる構成によれば、スレッドからの生存通知を利用せずにスレッドの動作異常を検知できるため、従来のように生存通知命令を含む無限ループが検知できないといった問題は生じない。
好適には、動作異常が生じていると判断したスレッドを特定する情報を含むデバッグ情報を出力する工程を備える。かかる構成によれば、デバッグ情報に基づき、動作異常が生じているスレッドを特定してアプリケーションの修正作業を行うことができる。
好適には、動作異常が生じていると判断したスレッドを特定する情報を含むデバッグ情報を出力する工程を備える。かかる構成によれば、デバッグ情報に基づき、動作異常が生じているスレッドを特定してアプリケーションの修正作業を行うことができる。
また好適には、前記各工程を、マルチスレッドシステムを構築する仮想マシンが実行する。かかる構成によれば、マルチシステムシステムを構築する仮想マシンによってスレッドの動作異常を検知できるため、スレッドに対応するバイトコード、従って、アプリケーションのソースコードに依存することなく、スレッド内の無限ループを安定して検知することが可能となる。
また好適には、前記計数工程は、実行される命令の数を計数する工程と、スレッド切換の発生を検知する工程と、スレッド切換の発生を検知した場合、前記計数した命令数を0にリセットする工程とを備える。
かかる構成によれば、命令の連続実行が途切れるタイミングを、前記計数工程へ通知できるため、前記スレッド動作異常検知方法を適切に実現できる。
また好適には、前記計数工程は、実行される命令の数を計数する工程と、実行される命令がスレッド切替を発生させる命令であるか否かを判断する工程と、スレッド切替を発生させる命令であると判断した場合、前記計数した命令数を0にリセットする工程とを備える。
かかる構成によれば、時分割制御によってスレッド切換が発生した場合には命令数がリセットされないため、時分割制御によるマルチスレッド実行環境においても適用することができる。
本発明のマルチスレッドシステムは、実行対象スレッドに関して連続して実行される命令の数を計数する計数手段と、前記計数した命令数が予め定めた閾値を越えた場合に、実行対象スレッドに動作異常が生じていると判断する手段と、動作異常が生じていると判断したスレッドの動作を停止する手段とを備えることを特徴とする。
本発明のスレッド動作異常検知方法は、コンピュータにおいてCPUにより実行することができるが、そのためのコンピュータプログラムは、CD−ROM、磁気ディスク、半導体メモリ及び通信ネットワークなどの各種の媒体を通じてコンピュータにインストールまたはロードすることができる。
以上、本発明によれば、アプリケーションのソースコードに依存することなく、スレッド内で発生する無限ループを検知することができる新しい枠組みを提供することができる。
(第1の実施形態)
以下に図面を参照しながら本発明の第1の実施形態を説明する。
以下に図面を参照しながら本発明の第1の実施形態を説明する。
図1は、第1実施形態におけるマルチスレッドシステム1が構築されるコンピュータ2のハードウェア構成の概略を示す。コンピュータ2は、CPU(プロセッサ)、ROM、RAM、ユーザインタフェース、HDDなど、通常のコンピュータ装置と同様のハードウェアを備えている。
図2は、第1実施形態におけるマルチスレッドシステム1の機能構成の概略を示す。マルチスレッドシステム1は、OS10、仮想マシン20、スレッド情報記憶手段30などを備えている。
スレッド情報記憶手段30は、ユーザスレッド(アプリケーション上の並列実行の対象となる処理単位;以下、単に「スレッド」又は「実行対象スレッド」と記載した場合、ユーザスレッドを指すものとする)に対応するバイトコード(特定のOSやハードウェアに依存しないように定義された命令、又はその集合によって記述された実行形式のプログラム)等の情報を記憶している。
OS10及び仮想マシン20は、各スレッドに設定されている優先度に基づいてスレッドを切り替えながら実行するマルチスレッド実行環境を構築する。例えば、優先度が同じスレッドが2つ存在する場合、一方のスレッドのスレッド実行制御部に実行権限が与えられると、該スレッド実行制御部が実行権限を放棄する(該スレッドが終了する/停止する)まで他方のスレッドへスレッド切換は行われない。また優先度が異なるスレッドが2以上存在する場合、優先度が低いスレッドのスレッド実行制御部は、優先度の高いスレッドのスレッド実行制御部が実行権限を放棄している間のみ、実行権限を得ることができる。従って、優先度が低いスレッドの実行中、優先度の高いスレッドが実行可能になると、該優先度の低いスレッドの実行は停止され、該優先度の高いスレッドが実行されることになる。
このようなマルチスレッド実行環境を実現するために、OS10は、Linux等の従来のOSと同様に、スレッドの動作管理のために優先度等の情報を格納するスレッド管理テーブル11などを備えている。また仮想マシン20は、Java(登録商標)仮想マシン等の従来の仮想マシンと同様に、スレッドごとに作成され、その実行を制御するスレッド実行制御部21などを備えている。なお、仮想マシン20はOS10上で動作するソフトウェアによって実現されることから、スレッド実行制御部21はOS10上のスレッド(仮想マシンスレッド)として把握することができる。
ただし、本実施形態のスレッド実行制御部21は、図3に示すように、対応するバイトコードをコンピュータ2で実行可能なネイティブコードに変換して実行するアプリ実行部40に加えて、スレッドの動作異常を検知する検知部50を備えている点で、従来のスレッド実行制御部21とは異なっている。具体的には、スレッド動作異常検知部50は、実行対象スレッドに関して連続して実行される命令(バイトコード)の数を計数する連続実行命令計数手段51(以下、「計数手段51」という)、前記計数した命令数が予め定めた閾値を越えた場合に、実行対象スレッドに動作異常が生じていると判断する動作異常判断手段52(以下、「判断手段52」という)、動作異常が生じていると判断したスレッドの動作を停止する停止制御手段53などを備えて構成される。
なお、仮想マシン20(スレッド実行制御部21等)のためのプログラムは、コンピュータ2が備えるROMやHDD等の不揮発性記憶装置上に記憶されている。またスレッド情報記憶手段30等はコンピュータ2が備えるROMやHDD等の不揮発性記憶装置上に実現され、スレッド管理テーブル11はコンピュータ2が備えるRAM上に実現される。
以下、図4のフローチャートを参照して、第1実施形態のマルチスレッドシステム1におけるスレッド動作異常検知の枠組みを説明する。なお、所定の言語で記述されたアプリケーションソースコードをコンパイルした結果、各スレッドのバイトコードが得られており、スレッド識別情報に対応づけてスレッド情報記憶手段30に格納されているものとする。また、各工程(符号が付与されていない部分的な工程を含む)は処理内容に矛盾を生じない範囲で任意に順番を変更して又は並列に実行することができる。かかる点は、後述の第2実施形態においても同様とする。
(スレッド動作異常検知)
仮想マシン20は、アプリケーションの実行指示を受け付けると、mainスレッドに対応するスレッド実行制御部21を作成する(S100)。この場合、OS10は、スレッド管理テーブル11にmainスレッドに対応するスレッド実行制御部21の情報(優先度など)を登録し、そのステータスをRun状態とする。これにより、mainスレッドが実行対象スレッドとなる。なお、スレッド実行制御部21等の仮想マシンスレッドは、Run状態(実行状態)のほか、Ready状態(実行可能状態)、Wait状態(実行待ち状態)などのステータスを取り得る。
仮想マシン20は、アプリケーションの実行指示を受け付けると、mainスレッドに対応するスレッド実行制御部21を作成する(S100)。この場合、OS10は、スレッド管理テーブル11にmainスレッドに対応するスレッド実行制御部21の情報(優先度など)を登録し、そのステータスをRun状態とする。これにより、mainスレッドが実行対象スレッドとなる。なお、スレッド実行制御部21等の仮想マシンスレッドは、Run状態(実行状態)のほか、Ready状態(実行可能状態)、Wait状態(実行待ち状態)などのステータスを取り得る。
次に、実行対象スレッドに対応する(すなわち、Run状態のスレッド実行制御部21の)アプリ実行部40は、スレッド情報記憶手段30を参照して、実行対象スレッドのバイトコードを順次、取得する(S101)。なお、以下において特に区別せずにアプリ実行部40と記載した場合、実行対象スレッドに対応するアプリ実行部40を指すものとし、スレッド動作異常検知部50の各手段についても同様とする。
S101においてバイトコードを取得できなかった場合(読み出すバイトコードが無かった場合)(S102:No)、仮想マシン20は、Run状態のスレッド実行制御部21を解放する(S103)。この場合、OS10は、解放されたスレッド実行制御部21の情報をスレッド管理テーブル11から削除するとともに、スレッド管理テーブル11に登録されるReady状態のスレッド実行制御部21から優先度に基づいて1つを選択し、該選択したスレッド実行制御部21をRun状態とする。仮想マシン20は、Run状態のスレッド実行制御部21について処理を続行させるべく、S101に再帰する。なお、スレッド管理テーブル11にスレッド実行制御部21が登録されていない場合は、アプリケーションが終了することになる。
一方、バイトコードを取得できた場合(S102:Yes)、アプリ実行部40は、前記取得したバイトコードをコンピュータ2で実行可能なネイティブコードに変換して実行する(S104)。
例えば、前記取得したバイトコードがスレッドの生成を示すものであった場合、Run状態のスレッド実行制御部21は、生成スレッドに対応するスレッド実行制御部21を作成する。この場合、OS10は、スレッド管理テーブル11に生成スレッドに対応するスレッド実行制御部21の情報を登録し、そのステータスをWait状態とする。
また例えば、前記取得したバイトコードが他のスレッドの開始を示すものであった場合、OS10は、スレッド管理テーブル11を参照し、開始スレッドに対応するスレッド実行制御部21のステータスをReady状態とする。なお、OS10は、スリープ時間が経過したスレッド実行制御部21、ロックを獲得できたスレッド実行制御部21、イベント待ちのイベントが起きたスレッド実行制御部21等についても、そのステータスをReady状態とする。
また例えば、前記取得したバイトコードがスレッド切換を発生させるものであった場合(INVOKESTATIC命令によるスリープ関数呼び出し、MONITOR_ENTER命令によるロック確保待ちなど)、OS10は、スレッド管理テーブル11を参照し、Run状態のスレッド実行制御部21のステータスをWait状態とする一方、Ready状態のスレッド実行制御部21から各スレッドの優先度に基づいて1つを選択して、Run状態とする(スレッドを切り替える)。
なお、S104の工程によってスレッド切換が発生しなかった場合、S104の工程を実行したスレッド実行制御部21が続けてS105の工程を実行することになるが、S104の工程によってスレッド切換が発生した場合、S104の工程を実行したスレッド実行制御部21は一旦停止し、他のスレッド実行制御部21に実行権限が移ることになる。そして、一旦停止したスレッド実行制御部21は、OS10によって再びRun状態とされた場合に、S105の工程から再開することになる。
S105において、計数手段51は、スレッド切換が発生したかどうかを判断する(スレッド切換の発生を検知する)。
スレッド切換が発生したかどうかを判断する方法としては、例えば、前回S104を実行したスレッド実行制御部に対応するスレッドの識別情報、及び今回S104を実行したスレッド実行制御部に対応するスレッドの識別情報をそれぞれRAMに記憶するように構成し、両者が一致しない場合にスレッド切換が発生したと判断することが考えられる。
スレッド切換が発生している場合、計数手段51は、Run状態のスレッド実行制御部21の命令数カウンタを0にリセットする(S106)。命令数カウンタは、アプリ実行部40が実行する命令(バイトコード)の数を格納するためにスレッド実行制御部ごとにRAM上に準備され、初期値は0であるものとする。仮想マシン20は、その後、Run状態のスレッド実行制御部21について処理を続行させるべく、S101に再帰する。
スレッド切換が発生していない場合、計数手段51は、Run状態のスレッド実行制御部21の命令数カウンタをカウントアップする(S107)。
次に、判断手段52は、命令数カウンタの値が予め定めた閾値を越えたか否かを判断する(S108)。前記閾値は、コンピュータ2が所定期間(例えば2分間)に実行できる命令数とするなど、設計に応じて定めることができ、予めROM又はHDD上に(例えばプログラムの一部として)記憶されているものとする。
前記閾値を越えていない場合、仮想マシン20は、Run状態のスレッド実行制御部21について処理を続行させるべく、S101に再帰する。
一方、S108において前記閾値を越えている場合、判断手段52は、実行対象スレッドに動作異常が生じている(無限ループが発生している)と判断する(S109)。
該判断を受けて、停止制御手段53は、動作異常が生じていると判断したスレッドを停止する(S110)。この場合、OS10は、動作異常スレッドに対応するスレッド実行制御部21のステータスをWait状態に変更する一方、Ready状態のスレッド実行制御部21から各スレッドの優先度に基づいて1つを選択して、Run状態とする。仮想マシン20は、Run状態のスレッド実行制御部21について処理を続行させるべく、S101に再帰する。
なお、S110において、停止制御手段53が、例えば標準エラー出力に、動作異常が生じているスレッドを特定する情報(スレッド名など)を含むデバッグ情報を出力するように構成してもよい。図5に、デバッグ情報の表示例を示す。該例に示すように、デバッグ情報には、スレッド名以外に、例えば、エラーメッセージ、スタックトレース情報などを含めることが考えられる。特に、本実施形態では、命令数をカウントアップする都度、動作異常を判断する構成となっているので、動作異常を検知したタイミングで実行中だった命令及びスレッドを容易に特定することができ、該命令がどのスレッドに属し、どのメソッドで呼ばれたかといったネスティング情報などをデバッグ情報に容易に含めることができる。
このように本実施形態では、仮想マシン20のスレッド実行制御部21が、同一スレッドにおいて(すなわち、スレッド遷移を挟まずに)連続して実行される命令数を計数して該命令数が閾値を越えた場合に動作異常と判断するスレッド動作異常検知部50を備えるように構成しており、更に、該検知部50において、スレッド内の生存通知命令によって命令数カウンタをリセットするのではなく、スレッド切換が発生した場合に命令数カウンタをリセットする構成を採用している。
かかる構成によれば、スレッドからの生存通知を利用せずにスレッドの動作異常を検知できるため、従来のように生存通知命令を含む無限ループが検知できないといった問題は生じない。
また、マルチシステム実行環境側にスレッド動作異常検知部が設けられているため、スレッドに対応するバイトコード、従って、アプリケーションのソースコードに依存することなく、スレッド内の無限ループを安定して検知することが可能となる。かかる点は、組み込みシステム向けのアプリケーション開発を、仮想マシン上で動作する組み込みシステムのエミュレータを用いて行う場合に、特に有用である。すなわち、アプリケーション自体にスレッド動作異常を検知するための処理を実装する必要がないので、アプリケーションを組み込みシステム本来の目的に適した構成とすることができるからである。
また、スレッド動作異常(無限ループ)が発生したスレッド名や、そのときのコールスタックなどをデバッグ情報として出力できるため、動作異常の解析をスムーズに行うことができる。
また、スレッド動作異常(無限ループ)が発生したスレッド名や、そのときのコールスタックなどをデバッグ情報として出力できるため、動作異常の解析をスムーズに行うことができる。
(第2の実施形態)
以下に図面を参照しながら本発明の第2の実施形態を説明する。
以下に図面を参照しながら本発明の第2の実施形態を説明する。
第2実施形態におけるマルチスレッドシステム1は、第1の実施形態同様、図1に示すようなコンピュータ2上に構築され、また図2に示すような機能構成を備える。
ただし、第2実施形態のOS10及び仮想マシン20は、各スレッドの優先度及び時分割制御に基づいてスレッドを切り替えながら実行するマルチスレッド実行環境を構築している点で、第1実施形態とは異なる。例えば、優先度が同じスレッドが2つ存在し、そのうち一方のスレッドに実行権限が与えられた場合、該スレッドが実行権限を放棄するか、又は該スレッドがタイムスライス(予め定めた規定時間)分実行すると、他方のスレッドに実行権限が移される。なお、優先度が異なるスレッドの切換については、第1実施形態と同様に制御される。ただし、ある優先度のスレッドがタイムスライス分実行した場合であって、該スレッドと同じかそれ以上の優先度のスレッドが実行可能でない場合、時分割制御に基づき、優先度の低いスレッドへ実行権限が移されるように構成してもよい。
このようなマルチスレッド実行環境を実現するために、OS10は、第1実施形態同様に、スレッドの動作管理のために優先度等の情報を格納するスレッド管理テーブル11などを備えている。また仮想マシン20は、第1実施形態同様に、スレッドごとに作成されるスレッド実行制御部21(アプリ実行部40、スレッド動作異常検知部50)などを備えている(図2、図3参照)。
ただし、第2実施形態の仮想マシン20は、図6に示すように、スレッド切換を発生させる命令(INVOKESTATIC命令、MONITOR_ENTER命令、INVOKEVERTUAL命令など)の一覧リストを記憶するスレッド切換命令記憶手段22を備えている点で、第1実施形態とは異なっている。
また、第2実施形態のスレッド実行制御部21は、その計数手段51が、実行される命令がスレッド切り替えを発生させる命令であるか否かを判断し、スレッド切り替えを発生させる命令であると判断した場合、前記計数した命令数を0にリセットする点で、第1実施形態のスレッド実行制御部21とは異なっている。
なお、スレッド切換命令記憶手段22は、コンピュータ2が備えるROMやHDD等の不揮発性記憶装置上に実現される。
以下、図7のフローチャートを参照して、第2実施形態のマルチスレッドシステム1におけるスレッド動作異常検知の枠組みを説明する。
(スレッド動作異常検知)
第2実施形態では、実行対象スレッドの切換は、仮想マシン20(スレッド実行制御部21)がスレッド切換を発生させる命令を実行した場合に加えて、OS10による時分割制御によっても発生する。そのため、第1実施形態のように、単純にスレッド切換が発生した場合に命令数カウンタを0にリセットする構成とすると、スレッドで無限ループが生じている場合であっても、時分割制御によってスレッド切換が発生した場合に命令数カウンタが0にリセットされてしまうので、無限ループの存在を検知することができないおそれがある。
第2実施形態では、実行対象スレッドの切換は、仮想マシン20(スレッド実行制御部21)がスレッド切換を発生させる命令を実行した場合に加えて、OS10による時分割制御によっても発生する。そのため、第1実施形態のように、単純にスレッド切換が発生した場合に命令数カウンタを0にリセットする構成とすると、スレッドで無限ループが生じている場合であっても、時分割制御によってスレッド切換が発生した場合に命令数カウンタが0にリセットされてしまうので、無限ループの存在を検知することができないおそれがある。
かかる点は、時分割制御によるマルチスレッド実行環境を採用しない組み込みシステムのアプリケーション開発を、時分割制御によるマルチスレッド実行環境を採用するOS上のエミュレータで行う場合に、特に問題となる。すなわち、組み込みシステムにおいて無限ループが生じる場合であっても、エミュレータ上ではその無限ループを検知できないおそれがあるからである。
そこで、第2実施形態では、仮想マシン20(スレッド実行制御部21)がスレッド切換を発生させる命令を実行した場合に命令数カウンタをリセットするように構成する(別言すれば、時分割制御によってスレッド切換が発生した場合には命令数カウンタがリセットされないように構成する)ことで、上記問題を解決する。
仮想マシン20は、アプリケーションの実行指示を受け付けると、mainスレッドに対応するスレッド実行制御部21を作成する(S200)。この場合、OS10は、RAM上に作成したスレッド管理テーブル11にmainスレッドに対応するスレッド実行制御部21の情報(優先度など)を登録し、そのステータスをRun状態とする。これにより、mainスレッドが実行対象スレッドとなる。
次に、実行対象スレッドに対応するアプリ実行部40は、スレッド情報記憶手段30を参照し、実行対象スレッドのバイトコードを順次、取得する(S201)。
S201においてバイトコードを取得できなかった場合(S202:No)、仮想マシン20は、実行対象スレッドに対応するスレッド実行制御部21を解放する(S203)。この場合、OS10は、スレッド管理テーブル11から実行対象スレッドの情報を削除するとともに、スレッド管理テーブル11に登録されるReady状態のスレッド実行制御部21から優先度に基づいて1つを選択し、該選択したスレッド実行制御部21をRun状態とする。仮想マシン20は、Run状態のスレッド実行制御部21について処理を続行させるべく、S101に再帰する。なお、スレッド管理テーブル11にスレッド実行制御部21が登録されていない場合は、アプリケーションが終了することになる。
一方、バイトコードを取得できた場合(S202:Yes)、計数手段51は、スレッド切換命令記憶手段22を参照し、前記取得したバイトコードがスレッド切換を発生させる命令であるか否か(スレッド切換命令記憶手段22の一覧リストに登録されているか否か)を判断する(S204)。
スレッド切換を発生させる命令である場合、計数手段51は、Run状態のスレッド実行制御部21の命令数カウンタを0にリセットし(S205)、S206の工程に進む。命令数カウンタは、第1実施形態同様、アプリ実行部40が実行する命令の数を格納するためにスレッド実行制御部ごとにRAM上に準備され、初期値は0であるものとする。
一方、スレッド切換を発生させる命令でない場合、命令数カウンタをリセットすることなく、S206の工程に進む。
S206において、アプリ実行部40は、第1実施形態同様、前記取得したバイトコードをコンピュータ2で実行可能なネイティブコードに変換して実行する。
次に、計数手段51は、Run状態のスレッド実行制御部21の命令数カウンタをカウントアップする(S207)。
次に、判断手段52は、命令数カウンタの値が予め定めた閾値を越えたか否かを判断する(S208)。前記閾値は、第1実施形態同様、コンピュータ2が所定期間(例えば2分間)に実行できる命令数とするなど、設計に応じて定めることができ、予めROM又はHDD上に(例えばプログラムの一部として)記憶されているものとする。
前記閾値を越えていない場合、仮想マシン20は、Run状態のスレッド実行制御部21について処理を続行させるべく、S201に再帰する。
一方、S208において前記閾値を越えている場合、判断手段52は、実行対象スレッドに動作異常が生じている(無限ループが発生している)と判断する(S209)。
該判断を受けて、停止制御手段53は、動作異常が生じていると判断したスレッドを停止する(S210)。この場合、OS10は、動作異常スレッドに対応するスレッド実行制御部21のステータスをWait状態に変更する一方、Ready状態のスレッド実行制御部21から各スレッドの優先度に基づいて1つを選択して、Run状態とする。仮想マシン20は、Run状態のスレッド実行制御部21について処理を続行させるべく、S201に再帰する。
この際、停止制御手段53が、第1実施形態同様、例えば標準エラー出力に、動作異常が生じているスレッドを特定する情報(スレッド名など)を含むデバッグ情報を出力するように構成してもよい。
このように第2実施形態では、仮想マシン20のスレッド実行制御部21が、同一スレッドにおいて連続して実行される命令数を計数して該命令数が閾値を越えた場合に動作異常と判断するスレッド動作異常検知部50を備えている点では、第1実施形態と同様であるが、更に、仮想マシン20がスレッド切換命令記憶手段22を備えるように構成するとともに、スレッド動作異常検知部50において、スレッド切換命令の実行によってスレッド切換が発生した場合に、命令数カウンタをリセットする構成を採用している。
かかる構成によれば、第1実施形態同様、スレッドからの生存通知を利用せずにスレッドの動作異常を検知できるため、従来のように生存通知命令を含む無限ループが検知できないといった問題は生じない。
また、時分割制御によってスレッド切換が発生した場合には命令数カウンタがリセットされないため(別言すれば、時分割制御によるスレッド切換によっては、カウントする連続実行命令数の「連続」が中断されないため)、時分割制御に基づくマルチスレッド実行環境に対しても適用することができる。
また、マルチシステム実行環境側にスレッド動作異常検知部が設けられているため、スレッドに対応するバイトコード、従って、アプリケーションのソースコードに依存することなく、スレッド内の無限ループを安定して検知することが可能となる。
(変形例)
本発明は、上記各実施形態に限定されることなく種々に変形して適用することが可能である。例えば、上記各実施形態では、ユーザインタフェース、HDDを備えるコンピュータ2上にマルチスレッドシステム1を構築しているが、本発明は、ユーザインタフェース、HDDを備えていないデバイスにおいても適用可能である。
本発明は、上記各実施形態に限定されることなく種々に変形して適用することが可能である。例えば、上記各実施形態では、ユーザインタフェース、HDDを備えるコンピュータ2上にマルチスレッドシステム1を構築しているが、本発明は、ユーザインタフェース、HDDを備えていないデバイスにおいても適用可能である。
また例えば、第1実施形態では、前回S104の工程を実行したスレッド実行制御部に対応するスレッドの識別情報と今回S104の工程を実行したスレッド実行制御部に対応するスレッドの識別情報とが一致しない場合にスレッド切換が発生したと判断し、命令数カウンタをリセットする構成について説明したが、第1実施形態において、第2実施形態のようにスレッド切換命令を実行した場合に命令数カウンタをリセットする構成を採用してもよい。この場合、低い優先度のスレッドから高い優先度のスレッドへの強制的なスレッド切換によっては命令数カウンタが0にリセットされないので、第2実施形態同様、的確に無限ループの発生を検知することができる。また、第1及び第2実施形態において、スレッド実行制御部21が、OS10が管理するスレッド管理テーブル11等の情報を参照したり、OS10からの通知によって、スレッド切換命令の実行に基づくスレッド切換が発生したことを判断する構成としてもよい。
また、上記各実施形態では、動作異常が生じているスレッドを停止する場合、対応するスレッド実行制御部21をWait状態とする構成としているが、Wait状態とする代わりに休止状態に移行させてもよい。またこの場合、アプリケーション自体を終了させるように構成してもよい。
また、上記実施形態では、優先度に基づくスレッドのスケジューリングをOS10が実行するマルチスレッド実行環境としているが、該スケジューリングを仮想マシン20が行うように構成してもよい。また、OS10がLWP(Light Weight Process)に対応している場合は、OS10及び仮想マシン20においてそれぞれスケジューリングを行う2層構造のマルチスレッド実行環境を採用してもよい。また、上記実施形態では、マルチスレッド実行環境をOS10及び仮想マシン20によって構築しているが、本発明は必ずしもこのような態様に限られない。例えば、仮想マシンを介さずにOS単体でマルチスレッド実行環境を構築する態様であってもよい。
1 マルチスレッドシステム;2 コンピュータ;10 OS;20 仮想マシン;21 スレッド実行制御部;22 スレッド切換命令記憶手段;30 スレッド情報記憶手段;40 アプリ実行部;50 スレッド動作異常検知部;51 連続実行命令計数手段;52 動作異常判断手段;53 停止制御手段
Claims (7)
- マルチスレッドシステムにおけるスレッド動作異常検知方法であって、
実行対象スレッドに関して連続して実行される命令の数を計数する計数工程と、
前記計数した命令数が予め定めた閾値を超えた場合に、実行対象スレッドに動作異常が生じていると判断する工程と、
動作異常が生じていると判断したスレッドの動作を停止する停止制御工程とを備えることを特徴とするスレッド動作異常検知方法。 - 動作異常が生じていると判断したスレッドを特定する情報を含むデバッグ情報を出力する工程を備えることを特徴とする請求項1記載のスレッド動作異常検知方法。
- 前記各工程を、マルチスレッドシステムを構築する仮想マシンが実行することを特徴とする請求項1又は2記載のスレッド動作異常検知方法。
- 前記計数工程は、
実行される命令の数を計数する工程と、
スレッド切換の発生を検知する工程と、
スレッド切換の発生を検知した場合、前記計数した命令数を0にリセットする工程とを備えることを特徴とする請求項1乃至3のいずれか1項に記載のスレッド動作異常検知方法。 - 前記計数工程は、
実行される命令の数を計数する工程と、
実行される命令がスレッド切替を発生させる命令であるか否かを判断する工程と、
スレッド切替を発生させる命令であると判断した場合、前記計数した命令数を0にリセットする工程とを備えることを特徴とする請求項1乃至3のいずれか1項に記載のスレッド動作異常検知方法。 - 実行対象スレッドに関して連続して実行される命令の数を計数する計数手段と、
前記計数した命令数が予め定めた閾値を越えた場合に、実行対象スレッドに動作異常が生じていると判断する手段と、
動作異常が生じていると判断したスレッドの動作を停止する手段とを備えることを特徴とするマルチスレッドシステム。 - 請求項1乃至5のいずれか1項に記載のスレッド動作異常検知方法をコンピュータで実行させるためのプログラム。
Priority Applications (1)
Application Number | Priority Date | Filing Date | Title |
---|---|---|---|
JP2007037123A JP2008204013A (ja) | 2007-02-16 | 2007-02-16 | スレッド動作異常検知方法、マルチスレッドシステム |
Applications Claiming Priority (1)
Application Number | Priority Date | Filing Date | Title |
---|---|---|---|
JP2007037123A JP2008204013A (ja) | 2007-02-16 | 2007-02-16 | スレッド動作異常検知方法、マルチスレッドシステム |
Publications (1)
Publication Number | Publication Date |
---|---|
JP2008204013A true JP2008204013A (ja) | 2008-09-04 |
Family
ID=39781485
Family Applications (1)
Application Number | Title | Priority Date | Filing Date |
---|---|---|---|
JP2007037123A Withdrawn JP2008204013A (ja) | 2007-02-16 | 2007-02-16 | スレッド動作異常検知方法、マルチスレッドシステム |
Country Status (1)
Country | Link |
---|---|
JP (1) | JP2008204013A (ja) |
Cited By (3)
Publication number | Priority date | Publication date | Assignee | Title |
---|---|---|---|---|
JP2012014312A (ja) * | 2010-06-30 | 2012-01-19 | Internatl Business Mach Corp <Ibm> | 命令実行装置、命令実行方法、及び命令実行プログラム |
JP2013114359A (ja) * | 2011-11-25 | 2013-06-10 | Hitachi Ltd | 計算機システム、および、監視方法 |
CN103810053A (zh) * | 2014-02-14 | 2014-05-21 | 福建天晴数码有限公司 | 网络游戏服务器陷入死循环的处理方法 |
Citations (3)
Publication number | Priority date | Publication date | Assignee | Title |
---|---|---|---|---|
JPS5631150A (en) * | 1979-08-22 | 1981-03-28 | Mitsubishi Electric Corp | Electronic computer |
JPS59180758A (ja) * | 1983-03-31 | 1984-10-13 | Fujitsu Ltd | Ncpにおけるル−プ検出方式 |
JP2005182594A (ja) * | 2003-12-22 | 2005-07-07 | Matsushita Electric Ind Co Ltd | コンピュータ及びプログラム |
-
2007
- 2007-02-16 JP JP2007037123A patent/JP2008204013A/ja not_active Withdrawn
Patent Citations (3)
Publication number | Priority date | Publication date | Assignee | Title |
---|---|---|---|---|
JPS5631150A (en) * | 1979-08-22 | 1981-03-28 | Mitsubishi Electric Corp | Electronic computer |
JPS59180758A (ja) * | 1983-03-31 | 1984-10-13 | Fujitsu Ltd | Ncpにおけるル−プ検出方式 |
JP2005182594A (ja) * | 2003-12-22 | 2005-07-07 | Matsushita Electric Ind Co Ltd | コンピュータ及びプログラム |
Cited By (4)
Publication number | Priority date | Publication date | Assignee | Title |
---|---|---|---|---|
JP2012014312A (ja) * | 2010-06-30 | 2012-01-19 | Internatl Business Mach Corp <Ibm> | 命令実行装置、命令実行方法、及び命令実行プログラム |
JP2013114359A (ja) * | 2011-11-25 | 2013-06-10 | Hitachi Ltd | 計算機システム、および、監視方法 |
CN103810053A (zh) * | 2014-02-14 | 2014-05-21 | 福建天晴数码有限公司 | 网络游戏服务器陷入死循环的处理方法 |
CN103810053B (zh) * | 2014-02-14 | 2017-06-13 | 福建天晴数码有限公司 | 网络游戏服务器陷入死循环的处理方法 |
Similar Documents
Publication | Publication Date | Title |
---|---|---|
EP2431876B1 (en) | Method and device for exception handling in embedded system | |
US8706265B2 (en) | Safety controller and safety control method | |
US8930950B2 (en) | Management of migrating threads within a computing environment to transform multiple threading mode processors to single thread mode processors | |
KR102177871B1 (ko) | 멀티 쓰레딩을 지원하기 위한 연산 유닛, 이를 포함하는 프로세서 및 프로세서의 동작 방법 | |
US10248463B2 (en) | Apparatus and method for managing a plurality of threads in an operating system | |
CN110673927B (zh) | 一种虚拟机的调度方法和装置 | |
JP2011164971A (ja) | Biosとbmcとの間の通信パス強化方法、その装置及びそのプログラム | |
TWI498820B (zh) | 具有用於分支錯誤預測之第二跳躍執行單元的處理器 | |
US20080244592A1 (en) | Multitask processing device and method | |
KR20110106717A (ko) | 재구성 가능 어레이 및 재구성 가능 어레이의 제어 방법 | |
KR101203099B1 (ko) | 운영체제 태스크의 실행시간 모니터링 방법 및 시스템 | |
JP2016224883A (ja) | 異常検出方法、情報処理装置および異常検出プログラム | |
JP4992740B2 (ja) | マルチプロセッサシステム、障害検出方法および障害検出プログラム | |
JP2008204013A (ja) | スレッド動作異常検知方法、マルチスレッドシステム | |
US10761512B2 (en) | Numerical controller | |
US20080313652A1 (en) | Notifying user mode scheduler of blocking events | |
JP2008204011A (ja) | マルチスレッドシステム、スレッド動作異常検知方法 | |
JP2009205208A (ja) | 運用管理装置、運用管理方法ならびにプログラム | |
JP2009048358A (ja) | 情報処理装置及びスケジューリング方法 | |
JP5365273B2 (ja) | 情報処理システム、監視方法及び監視プログラム | |
JP2006227962A (ja) | アプリケーションタスク監視システムおよび方法 | |
TWI549054B (zh) | 用於分支預測錯誤之賦能及去能第二跳越執行單元之技術 | |
CN111563000A (zh) | 一种文件生成方法、智能终端及存储介质 | |
JP5018140B2 (ja) | マルチプロセッサシステム、タスクスケジューリング方法およびタスクスケジューリングプログラム | |
Babar | Understanding Linux process states |
Legal Events
Date | Code | Title | Description |
---|---|---|---|
A621 | Written request for application examination |
Free format text: JAPANESE INTERMEDIATE CODE: A621 Effective date: 20090904 |
|
A977 | Report on retrieval |
Free format text: JAPANESE INTERMEDIATE CODE: A971007 Effective date: 20110222 |
|
A131 | Notification of reasons for refusal |
Free format text: JAPANESE INTERMEDIATE CODE: A131 Effective date: 20110902 |
|
A761 | Written withdrawal of application |
Free format text: JAPANESE INTERMEDIATE CODE: A761 Effective date: 20111025 |