(57)【特許請求の範囲】
【請求項１】
入力されたオペレーション実行及びオペレーション終了のための命令に対する制御コードの伝達を受け、前記制御コードがオペレーション実行のための制御コードである場合、スレッドの状態が含まれたテーブルを更新し、前記制御コードがアプリケーションのオペレーション終了のための制御コードである場合、オペレーション終了が要請されたアプリケーションに含まれたスレッドの状態を確認する制御部と、
前記スレッドの状態がブロッキング状態である場合、前記スレッドにブロッキング状態を一時的に解除するため、ＯＳをカーネルモードからユーザモードへ切替えるユーザ定義信号を送信する信号送信部と、
前記スレッドの状態がブロッキング状態である場合、前記信号によって前記ブロッキング状態が一時的に解除されたスレッドに含まれた入出力オペレーションを終了させて前記カーネルモードへの復帰を防ぐための第１の終了関数を行うオペレーション管理部と、
前記スレッドの状態がブロッキング状態ではない場合には、前記スレッドを終了させるための第２の終了関数を行い、前記スレッドの状態がブロッキング状態である場合には、前記第１の終了関数によって前記入出力オペレーションが終了したスレッドを終了させるための第２の終了関数を行うスレッド管理部と
を含む入出力オペレーションによってブロッキングされたスレッドを強制終了する装置。
【請求項２】
前記アプリケーションは、ジャバアプリケーションを含む請求項１に記載の入出力オペレーションによってブロッキングされたスレッドを強制終了する装置。
【請求項３】
前記ブロッキング状態は、ＯＳのカーネルモードでシステム呼出を実行中である状態を含む請求項１に記載の入出力オペレーションによってブロッキングされたスレッドを強制終了する装置。
【請求項４】
前記制御部から一つ以上のアプリケーションに含まれたスレッドの状態確認命令を受け、前記スレッドによるオペレーションが進行中であるかどうか、及び前記スレッドによって行われる作業が入出力オペレーションであるかを確認する状態確認部をさらに含む請求項１に記載の入出力オペレーションによってブロッキングされたスレッドを強制終了する装置。
【請求項５】
前記スレッド管理部は、前記第２の終了関数を行うことにより、前記入出力オペレーションが終了したスレッドに対するスレッド終了の例外を発生させる請求項１に記載の入出力オペレーションによってブロッキングされたスレッドを強制終了する装置。
【請求項６】
前記信号、前記第１の終了関数、または前記第２の終了関数は、前記スレッドの状態が含まれたテーブルに基づいて行われる請求項１に記載の入出力オペレーションによってブロッキングされたスレッドを強制終了する装置。
【請求項７】
前記テーブルを格納する格納部をさらに含む請求項６に記載の入出力オペレーションにブロッキングされたスレッドを強制終了する装置。
【請求項８】
入力されたオペレーション実行及びオペレーション終了のための命令に対する制御コードの伝達を受け、前記制御コードがオペレーション実行のための制御コードである場合、スレッドの状態が含まれたテーブルを更新し、前記制御コードがアプリケーションのオペレーション終了のための制御コードである場合、オペレーション終了が要請されたアプリケーションに含まれたスレッドの状態を確認するステップと、
前記スレッドの状態がブロッキング状態である場合、前記スレッドにブロッキング状態を一時的に解除するため、ＯＳをカーネルモードからユーザモードへ切替えるユーザ定義信号を送信するステップと、
前記スレッドの状態がブロッキング状態である場合、前記信号によって前記ブロッキング状態が一時的に解除されたスレッドに含まれた入出力オペレーションを終了させて前記カーネルモードへの復帰を防ぐための第１の終了関数を行うステップと、
前記スレッドの状態がブロッキング状態ではない場合には、前記スレッドを終了させるための第２の終了関数を行い、前記スレッドの状態がブロッキング状態である場合には、前記第１の終了関数によって前記入出力オペレーションが終了したスレッドを終了させるための第２の終了関数を行うステップと
を含む入出力オペレーションによってブロッキングされたスレッドを強制終了する方法。
【請求項９】
前記アプリケーションは、ジャバアプリケーションを含む請求項８に記載の入出力オペレーションによってブロッキングされたスレッドを強制終了する方法。
【請求項１０】
前記ブロッキング状態は、ＯＳのカーネルモードでシステム呼出を実行中である状態を含む請求項８に記載の入出力オペレーションによってブロッキングされたスレッドを強制終了する方法。
【請求項１１】
前記制御部から一つ以上のアプリケーションに含まれたスレッドの状態確認命令を受け、前記スレッドによるオペレーションが進行中であるかどうか、及び前記スレッドによって行われる作業が入出力オペレーションであるかを確認する状態確認部をさらに含む請求項８に記載の入出力オペレーションによってブロッキングされたスレッドを強制終了する方法。
【請求項１２】
前記第２の終了関数を行うステップは、前記第２の終了関数を行うことにより、前記入出力オペレーションが終了したスレッドに対するスレッド終了の例外を発生させるステップを含む請求項８に記載の入出力オペレーションによってブロッキングされたスレッドを強制終了する方法。
【請求項１３】
前記信号、前記第１の終了関数、または前記第２の終了関数は、前記スレッドの状態が含まれたテーブルに基づいて行われる請求項８に記載の入出力オペレーションによってブロッキングされたスレッドを強制終了する方法。
【請求項１４】
前記テーブルを格納するステップをさらに含む請求項１３に記載の入出力オペレーションにブロッキングされたスレッドを強制終了する方法。
【発明の詳細な説明】
【技術分野】
【０００１】
本発明は、入出力作業によってブロッキングされたスレッドを強制終了する装置および方法に関し、より詳しくは、入出力作業（Ｉ／Ｏ  Ｏｐｅｒａｔｉｏｎ）を終了させ、入出力作業によってブロッキングされたスレッドにユーザ定義信号を伝達して該当スレッドのブロッキング状態をしばらく解除させることによって、入出力システム呼出（Ｉ／Ｏ  Ｓｙｓｔｅｍ  Ｃａｌｌ）を試みるスレッドにスレッド終了の例外（ＴｈｒｅａｄＤｅａｔｈ  Ｅｘｃｅｐｔｉｏｎ）が発生するようにする入出力作業によってブロッキングされたスレッドを強制終了する装置および方法に関するものである。
【背景技術】
【０００２】
ジャバは、作成されたコードをプラットフォーム独立で行うオブジェクト指向プログラミング言語である。ここで、プラットフォームは、プログラムが実行されるハードウェアまたは運営体系のようなソフトウェア環境をいう。ジャバで作成されたコードは、ジャバコンパイラによりジャババイトコードにコンパイルされ、ジャババイトコードは多様なハードウェア基盤のプラットフォームにポーティングされたジャバ仮想マシーンにより実行される。
【０００３】
図１は、従来のジャバアプリケーションを動作させる装置を示すブロック図であって、ジャバアプリケーション装置１０はアプリケーション管理者１１、アプリケーション１２ａ，１２ｂ，１２ｃ、ミドルウェア１３、ジャバ仮想マシーン１４、および運営体系１５を含んで構成される。
【０００４】
ここで、アプリケーションは、ジャバアプリケーション１２ａ，１２ｂおよびネイティブアプリケーション１２ｃを含む。
【０００５】
アプリケーション管理者１１は、アプリケーションの状態を切替えることによって、アプリケーションのライフサイクルを管理する。ＯＣＡＰ（Ｏｐｅｎ  Ｃａｂｌｅ  Ａｐｐｌｉｃａｔｉｏｎ  Ｐｌａｔｆｏｒｍ）、ＡＣＡＰ（Ａｄｖａｎｃｅｄ  ｏｐｅｎ  Ｃａｂｌｅ  Ａｐｐｌｉｃａｔｉｏｎ  Ｐｌａｔｆｏｒｍ）などのミドルウェア１３はアプリケーションの動作を管理する。
【０００６】
ジャバ仮想マシーン１４は、アプリケーションに含まれたクラスをメモリに搭載してクラスの実行コードを運営体系１５の命令コードに切替え、アプリケーションに割当てられた資源を管理する。
【０００７】
前述した通り、アプリケーション管理者１１は、アプリケーションのライフサイクルを管理するが、このためにアプリケーション管理者１１は、先ず終了させようとするアプリケーションで実行中であるスレッド（Ｔｈｒｅａｄ）のリストを確認する。そして、リストが空いていれば直ちにアプリケーションを終了させ、リストが空いていなければリストに含まれたスレッドの終了を行う。
【０００８】
リストに含まれたスレッドを終了するために、アプリケーション管理者１１は先ずリスト中の最初のスレッドのクラスオブジェクト（Ｔｈｒｅａｄ  Ｃｌａｓｓ  Ｏｂｊｅｃｔ）を確認し、該当オブジェクトに対する中断関数（Ｔｈｒｅａｄ．ｉｎｔｅｒｒｕｐｔ（））を呼出す。中断関数は、ブロック（ｂｌｏｃｋ）状態にあるスレッドのブロック状態をしばらく解除するが、この時、アプリケーション管理者１１は該当オブジェクトに対する中止関数（Ｔｈｒｅａｄ．ｓｔｏｐ（））を呼出す。ここで、中止関数は、スレッド終了の例外（ＴｈｒｅａｄＤｅａｔｈ  Ｅｘｃｅｐｔｉｏｎ）を発生させるが、これに伴ってスレッドは終了する。アプリケーション管理者１１は、このような過程をリストに含まれたすべてのスレッドが終了するまで進行する。
【０００９】
しかし、入出力作業（Ｉ／Ｏ  Ｏｐｅｒａｔｉｏｎ）によってブロッキングされたスレッドがアプリケーションに含まれた場合、アプリケーション管理者１１による中断関数および中止関数としては該当スレッドを効果的に終了させることができない。
【００１０】
一般的に、ジャバプログラムで入出力作業に対する関数が呼出せば、この関数は運営体系１５の入出力システム呼出（Ｉ／Ｏ  Ｓｙｓｔｅｍ  Ｃａｌｌ）を試みるが、システム呼出はカーネルモード（Ｋｅｒｎｅｌ  Ｍｏｄｅ）で行われ、これは入出力作業を待つブロッキング状態である。ところで、アプリケーション管理者１１による中断関数および中止関数は、ユーザモード（Ｕｓｅｒ  Ｍｏｄｅ）で行われるため、カーネルモードで実行中であるスレッドに影響を与えることができない。すなわち、入出力システム呼出が返還され、カーネルモードからユーザモードに切替える前にはスレッドが終了しない。
【００１１】
特許文献１は、ジャバ仮想マシーン環境で複数の関連されたスレッドをモニターリングして、状態情報に基づいてスレッドが活性化したかを決定して、クリーンアッププロセスを実行する方法を開示している。しかし、開示した発明は、一般的なスレッドの終了を行うための方法のみを提示し、入出力作業によってブロッキングされたスレッドの終了に対する方法は提示していない。
【００１２】
したがって、入出力作業によってブロッキングされたスレッドを効果的に終了させる方法の登場が求められる。
【特許文献１】米国特許第６，８４２，８９８号公報
【特許文献２】米国特許第６，７１１，７３９号公報
【発明の開示】
【発明が解決しようとする課題】
【００１３】
本発明は、入出力作業（Ｉ／Ｏ  Ｏｐｅｒａｔｉｏｎ）を終了させ、入出力作業によってブロッキングされたスレッドにユーザ定義信号を伝達して該当スレッドのブロッキング状態をしばらく解除させることによって、入出力システム呼出（Ｉ／Ｏ  Ｓｙｓｔｅｍ  Ｃａｌｌ）を試みるスレッドにスレッド終了の例外（ＴｈｒｅａｄＤｅａｔｈ  Ｅｘｃｅｐｔｉｏｎ）が発生するようにするブロッキングされたスレッドを強制終了することにその目的がある。
【００１４】
本発明の目的は、以上で言及した目的に制限されず、言及していないまた他の目的は下記記載によって当業者が明確に理解できるものである。
【課題を解決するための手段】
【００１５】
前記目的を達成するために、本発明の一態様に係わる入出力作業によってブロッキングされたスレッドを強制終了する装置は、アプリケーションに含まれたスレッドの状態を確認する制御部と、前記スレッドにブロッキング状態を解除するための信号を送信する信号送信部と、前記信号によって前記ブロッキング状態が解除されたスレッドに含まれた入出力作業の第１の終了関数を行う作業管理部と、前記第１の終了関数によって前記入出力作業が終了したスレッドの第２の終了関数を行うスレッド管理部とを含む。
【００１６】
本発明の他の態様に係わる入出力作業によってブロッキングされたスレッドを強制終了する方法は、アプリケーションに含まれたスレッドの状態を確認するステップと、前記スレッドにブロッキング状態を解除するための信号を送信するステップと、前記信号によって前記ブロッキング状態が解除されたスレッドに含まれた入出力作業の第１の終了関数を行うステップと、前記第１の終了関数によって前記入出力作業が終了したスレッドの第２の終了関数を行うステップとを含む。
【発明の効果】
【００１７】
本発明の入出力作業によってブロッキングされたスレッドを強制終了する装置および方法によれば、次のような効果が１つあるいはそれ以上ある。
【００１８】
第１に、入出力作業によってブロッキングされたスレッドを強制終了することによって、該当スレッドを含むアプリケーションを迅速に終了する長所がある。
【００１９】
第２に、アプリケーションに割当てられた資源の返還を迅速に行うことができるようにすることによって、資源の浪費を減少させる長所もある。
【発明を実施するための最良の形態】
【００２０】
その他、実施形態の具体的な事項は詳細な説明および図面に含まれている。
【００２１】
本発明の利点および特徴、そしてそれらを達成する方法は、添付する図面と共に詳細に後述する実施形態を参照すれば明確になる。しかし、本発明は以下にて開示する実施形態に限定されず、互いに異なる多様な形態によって実施され、単に本実施形態は本発明の開示が完全なものとなるようにし、本発明が属する技術分野で通常の知識を有する者に発明の範疇を完全に知らせるために提供されるものであって、本発明は請求項の範疇によってのみ定義されるものである。明細書の全体に亘り、同一参照符号は同一構成要素を示す。
【００２２】
以下、添付した図面を参照して本発明の好ましい実施例を詳細に説明する。
【００２３】
図２は、本発明の実施形態に係わる入出力作業によってブロッキングされたスレッドを強制終了する装置を示すブロック図であって、入出力作業によってブロッキングされたスレッドを強制終了する装置（以下、スレッド管理装置という）２００は、命令入力部２１０、格納部２２０、制御部２３０、状態確認部２４０、信号送信部２５０、作業管理部２６０、およびスレッド管理部２７０を含んで構成される。
【００２４】
命令入力部２１０は、アプリケーションのプログラムコード上に含まれた所定の動作に対する実行命令が入力される役割をする。入力される命令にはアプリケーションの作業実行および作業終了のための命令を含むことができる。ここで、アプリケーションはジャバアプリケーションを含み、その中、入出力作業のためのスレッドが含まれたジャバアプリケーションを含む。
【００２５】
入力された命令は、該当命令に対する制御コードに変換されて制御部２３０に伝えられるが、制御部２３０は命令入力部２１０から伝達された制御コードに基づいてスレッド情報テーブルを更新する。すなわち、伝達された制御コードがアプリケーションの作業実行のための制御コードである場合、制御部２３０は格納部２２０に格納されたスレッド情報テーブルを更新するものであるが、スレッド情報テーブルに対する詳しい説明は図３を介して後述する。
【００２６】
また、制御部２３０は、伝達された制御コードがアプリケーションの作業終了のための制御コードである場合、作業終了が要請されたアプリケーションに含まれたスレッドの状態を確認する。この時、制御部２３０は、格納部２２０に格納されたスレッド情報テーブルを参照することができ、状態確認部２４０による情報を参照することができる。
【００２７】
そして、制御部２３０は、命令入力部２１０、状態確認部２４０、格納部２２０、信号送信部２５０、作業管理部２６０、スレッド管理部２７０、およびスレッド管理装置２００の全般的な制御を行う。
【００２８】
状態確認部２４０は、現在作業進行中であるスレッドの状態を確認する役割をする。すなわち、状態確認部２４０は、１つのアプリケーションに含まれた全体スレッドの状態を確認するものであって、スレッドによる作業が進行中であるかを確認したり、該当スレッドによって行われる作業が入出力作業であるかを確認したりする。ここで、対象になるアプリケーションの種類に対する情報を制御部２３０から伝達されるが、この時、制御部２３０からアプリケーションに含まれたスレッドのリストが伝達されることもできる。
【００２９】
また、状態確認部２４０は、制御部２３０から複数のアプリケーションに含まれたスレッドの状態確認命令を受ける場合、複数のアプリケーションに対する作業を同時に行うこともできる。
【００３０】
格納部２２０は、スレッド情報テーブルを格納する役割をする。スレッド情報テーブルにはアプリケーションの識別子、スレッドの識別子、およびスレッドの状態などを含むことができるが、スレッド情報テーブルに対する詳しい説明は図３を介して後述する。
【００３１】
格納部２２０は、ハードディスク、フラッシュメモリ、ＣＦカード（Ｃｏｍｐａｃｔ  Ｆｌａｓｈ（登録商標）Ｃａｒｄ）、ＳＤカード（Ｓｅｃｕｒｅ  Ｄｉｇｉｔａｌ  Ｃａｒｄ）、ＳＭカード（Ｓｍａｒｔ  Ｍｅｄｉａ（登録商標）Ｃａｒｄ）、ＭＭＣカード（Ｍｕｌｔｉｍｅｄｉａ  Ｃａｒｄ）、またはメモリスティック（Ｍｅｍｏｒｙ  Ｓｔｉｃｋ）など、情報の入出力が可能なモジュールであって、スレッド管理装置２００の内部に備えられていることもでき、別途の装置に備えられていることもできる。
【００３２】
信号送信部２５０は、スレッドにブロッキング状態を解除するための信号を送信する役割をする。ここで、スレッドはブロッキング状態のスレッドであって、信号送信部２５０には制御部２３０から対象になるスレッドのリストが伝達されて、リストに含まれたスレッドに信号を送信する。信号はスレッド間に送受信される所定の情報であって、信号を受信したスレッドは信号に対応する特定動作を行うようになる。
【００３３】
信号は、ユーザ定義信号でもあり得、信号を受信したスレッドは入出力作業によるブロッキング状態から一時的に解除される。すなわち、ブロッキング状態は、運営体系のカーネルモードでシステム呼出を実行中である状態を含むものであって、ブロッキング状態からの一時的な解除とは運営体系のカーネルモードからユーザモードへの切替えを意味する。
【００３４】
作業管理部２６０は、信号送信部２５０から送信された信号によってブロッキング状態が解除されたスレッドに含まれた入出力作業の終了関数（以下、第１の終了関数という）を行う役割をする。例えば、入出力作業がソケット（Ｓｏｃｋｅｔ）を用いたネットワーク作業である場合、作業管理部２６０はソケットの終了関数を行い、入出力作業がファイルに対する入出力作業である場合、作業管理部２６０はファイル入出力作業に対する終了関数を行う。
【００３５】
第１の終了関数が行われるにつれて、ブロッキング状態が一時解除されたスレッドは再び入出力作業のためのシステム呼出を行うことができなくなる。これに伴い、スレッドに含まれた入出力作業はカーネルモードに復帰することができず、ユーザモードに留まっているようになる。
【００３６】
第１の終了関数を行うことにあたって、作業管理部２６０には制御部２３０からの該当入出力作業に対する情報が伝達され得るが、入出力作業に対する情報にはアプリケーションの識別子、スレッドの識別子、および入出力作業の種類などを含むことができる。
【００３７】
スレッド管理部２７０は、第１の終了関数によって入出力作業が終了したスレッドの第２の終了関数を行う役割をする。第２の終了関数は、中断関数および中止関数を含むことができるが、中断関数はブロッキング状態にあるスレッドのブロッキング状態をしばらく解除する役割をし、中止関数はスレッド終了の例外を発生させる役割をする。換言すれば、ユーザモードにあるスレッドは、第２の終了関数によって終了するものであって、これに伴い、アプリケーションの終了は容易に進行される。ジャバプログラムコードによってスレッドが管理される場合、Ｔｈｒｅａｄ．ｉｎｔｅｒｒｕｐｔ（）関数およびＴｈｒｅａｄ．ｓｔｏｐ（）関数が各々中断関数および中止関数の役割を行うことができる。
【００３８】
アプリケーションに含まれたスレッドが複数である場合、複数のスレッドに対する終了過程が順次的に進行されることもでき、同時に進行されることもできるが、これは制御部２３０によって決定される。すなわち、制御部２３０は、スレッド情報テーブルを参照してアプリケーションに含まれた複数のスレッドに対する情報を同時に信号送信部２５０、作業管理部２６０、およびスレッド管理部２７０に伝達することができ、１つずつ伝達することもできる。この時、複数のスレッドに対する情報を１つずつ伝達する場合、制御部２３０はリストに含まれたすべてのスレッドに対する情報を伝達するまで作業を進行し、伝えられた情報をスレッド情報テーブルで削除することもできる。
【００３９】
図３は、本発明の実施形態に係わるスレッド情報テーブルを示す図面であって、スレッド情報テーブル３００は、アプリケーション識別子フィールド３１０、スレッド識別子フィールド３２０、入出力作業の種類フィールド３３０、入出力作業の位置フィールド３４０、および状態フィールド３５０を含んで構成される。
【００４０】
アプリケーション識別子フィールド３１０にはアプリケーションの固有識別子が含まれる。アプリケーション識別子は、アプリケーションの登録順序を用いて生成したり、ユーザによって直接入力されて生成したりすることもできる。
【００４１】
アプリケーション識別子は、特定アプリケーションを指し示すことに用いられるものであって、信号送信部２５０、作業管理部２６０、およびスレッド管理部２７０はこれを用いて対象になるアプリケーションを確認することができるようになる。
【００４２】
スレッド識別子フィールド３２０にはスレッドの固有識別子が含まれる。スレッド識別子は、スレッドの生成順序を用いて生成したり、ユーザによって直接入力されて生成したりすることもできる。
【００４３】
スレッド識別子は、特定のスレッドを指し示すことに用いられるものであって、信号送信部２５０、作業管理部２６０、およびスレッド管理部２７０はこれを用いて対象になるスレッドを確認することができるようになる。
【００４４】
１つのアプリケーションに複数のスレッドが対応して、スレッド情報テーブル３００に含まれる。
【００４５】
入出力作業の種類フィールド３３０にはスレッドに含まれた入出力作業の種類を示す識別子が含まれる。例えば、ファイル入出力作業に対しては１の識別子が対応し、ネットワーク入出力作業に対しては２の識別子が対応する。
【００４６】
入出力作業の種類を示す識別子は作業管理部２６０に伝えられるが、作業管理部２６０はこれを用いて該当入出力作業に対する第１の終了関数を行う。すなわち、入出力作業の種類に対応する第１の終了関数を抽出して行う。
【００４７】
入出力作業の位置フィールド３４０にはスレッドに含まれた入出力作業を行うオブジェクトの位置が含まれる。すなわち、オブジェクトのアドレスであって、これはポインタ（Ｐｏｉｎｔｅｒ）によって実現することもできる。例を挙げれば、オブジェクトのファイル記述子（Ｆｉｌｅ  Ｄｅｓｃｒｉｐｔｏｒ）のようなものが位置フィールド３４０の値として挿入されることができる。
【００４８】
入出力作業を行うオブジェクトの位置は作業管理部２６０に伝えられるが、作業管理部２６０はこれを用いて該当入出力作業に対する第１の終了関数を行う。すなわち、第１の終了関数のパラメータに入出力作業を行うオブジェクトの位置を挿入する。
【００４９】
状態フィールド３５０はスレッドのブロッキング状態の要否を示すフラッグを含む。例えば、スレッドがブロッキング状態ではない場合は０の値が対応し、スレッドがブロッキング状態である場合は１の値が対応する。
【００５０】
ここで、スレッドの状態は、命令入力部２１０を介して入力された命令の種類を用いて確認することができ、状態確認部２４０によって確認することもできる。例えば、命令入力部２１０に入力された命令が入出力作業に対する実行命令である場合、これは運営体系のシステム呼出を必要とする作業であるため、制御部２３０は状態フィールド３５０のフラッグをブロッキング状態に更新する。そして、命令入力部２１０に入力された命令が入出力作業に対する終了命令である場合、制御部２３０は状態フィールド３５０のフラッグをブロッキング解除状態に更新する。
【００５１】
また、該当入出力作業が他のアプリケーションによって終了することもできるが、これに伴い、状態確認部２４０は常にスレッドの状態を確認して制御部２３０に通知することもできる。
【００５２】
図４は、本発明の実施形態に係わるスレッドの状態変化を示す概念図である。
図４におけるＡ状態４１０は該当スレッドのブロッキングが解除された状態であって、入出力作業のための命令が入力される以前の状態を示す。この時、入出力作業のための命令が入力されれば、入力された命令によりアプリケーションに含まれたスレッドは運営体系のシステム呼出を行う。ところで、システム呼出は運営体系のカーネルモードのみで行われるため、スレッドの状態はブロッキング状態のＢ状態４２０に切替える。
【００５３】
スレッドがＢ状態４２０である時、スレッド終了関数である第２関数が行われれば、スレッドは第２関数に含まれた中断関数によって一時的にブロッキング状態から抜け出てＣ状態４３０に移動する。しかし、スレッドに含まれた入出力作業がシステム呼出を行ってカーネルモードに復帰するため、スレッドの状態は再びブロッキング状態であるＤ状態４４０に移動するようになる。
【００５４】
一方、スレッドがＢ状態４２０である時、信号送信部２５０によって信号が送信されれば、スレッドは一時的にブロッキング状態から抜け出てＣ状態４３０に移動する。この時、作業管理部２６０は入出力作業を終了させるために第１の終了関数を行う。これに伴い、一時的にブロッキング状態から抜け出たスレッドに含まれた入出力作業が行われることができないため、カーネルモードへの復帰が行われず、スレッドはＣ状態４３０に留まっているようになる。
【００５５】
そして、スレッドがＣ状態４３０である時、スレッド管理部２７０はスレッド終了関数の第２関数を行うが、第２関数に含まれた中止関数によってスレッド終了の例外が発生し、これに伴いスレッドは終了してＥ状態４５０に移動する。
【００５６】
ここで、アプリケーションの終了命令が入力された場合、制御部２３０はスレッド情報テーブル３００を参照してＢ状態４２０にあるスレッドにのみ信号が送信され入出力作業の終了関数（第１の終了関数）を行うことができるようにし、Ａ状態４１０にあるスレッドにはスレッド終了関数（第２の終了関数）のみ行うようにすることができる。
【００５７】
図５は、本発明の実施形態に係わる入出力作業によってブロッキングされたスレッドを強制終了する過程を示すフローチャートである。
【００５８】
入出力作業によってブロッキングされたスレッドを強制終了するためにスレッド管理装置２００の命令入力部に２１０は、アプリケーションの作業実行のための命令が入力される（Ｓ５１０）。これに伴い、アプリケーションに含まれた入出力作業を行うことができる。入力された命令に対する制御コードは制御部２３０に伝えられ、制御部２３０は格納部２２０に格納されたスレッド情報テーブル３００を更新する（Ｓ５２０）。すなわち、アプリケーションのスレッドのうち、該当入出力作業が含まれたスレッドの状態をブロッキング状態に切替える。そして、制御部２３０は作業管理部２６０で該当入出力作業を行うようにする。
【００５９】
そして、命令入力部２１０には、アプリケーションの作業終了のための命令が入力される（Ｓ５３０）。入力された命令に対する制御コードは制御部２３０に伝えられ、制御部２３０は該当アプリケーションに含まれたスレッドがブロッキング状態であるかを確認する（Ｓ５４０）。ここで、制御部２３０は格納部２２０に格納されたスレッド情報テーブル３００を参照してスレッドの状態を確認することができ、状態確認部２４０から伝達された情報を用いてスレッドの状態を確認することもできる。
【００６０】
そして、スレッドの状態がブロッキング状態ではない場合、制御部２３０はアプリケーション識別子およびスレッド識別子をスレッド管理部２７０に伝達する。そして、スレッド管理部２７０は伝達されたアプリケーション識別子およびスレッド識別子を参照して、該当スレッドを終了するための終了関数（第２の終了関数）を行う（Ｓ５７０）。これに伴い、ブロッキング状態ではないスレッドは第２の終了関数によって終了する。
【００６１】
一方、スレッドの状態がブロッキング状態である場合、制御部２３０はアプリケーション識別子およびスレッド識別子を信号送信部２５０に伝達する。そして、信号送信部２５０は伝達されたアプリケーション識別子およびスレッド識別子を参照して、該当スレッドにブロッキング状態を解除するための信号を送信する（Ｓ５５０）。信号が送信されることによって信号を受信したスレッドは、入出力作業によるブロッキング状態から一時的に解除される。
【００６２】
そして、制御部２３０は、アプリケーション識別子、入出力作業の種類、および入出力作業の位置を作業管理部２６０に伝達する。伝達された情報を参照して作業管理部２６０はスレッドに含まれた入出力作業を終了するための関数（第１の終了関数）を行う（Ｓ５６０）。第１の終了関数が行われることによって、ブロッキング状態が一時解除されたスレッドは、再び入出力作業のためにシステム呼出を行うことができなくなる。すなわち、スレッドに含まれた入出力作業はユーザモードに留まっているようになる。
【００６３】
そして、制御部２３０は、アプリケーション識別子およびスレッド識別子をスレッド管理部２７０に伝達する。アプリケーション識別子およびスレッド識別子が伝達されたスレッド管理部２７０は、該当スレッドを終了するための関数である第２の終了関数を行う（Ｓ５７０）。第２の終了関数が行われることによって、該当スレッドは終了する。
【００６４】
制御部２３０は、スレッド情報テーブル３００を参照して該当アプリケーションに含まれた各々のスレッドに対して以上のような過程を繰り返し、すべてのスレッドが終了するまで進行する。
【００６５】
図２のブロック図の各ブロックと図５のフローチャートの各ステップの組合せはコンピュータプログラムインストラクションによって行われる可能性があることが理解できる。これらコンピュータプログラムインストラクションは、汎用コンピュータ、特殊用コンピュータ、またはその他のプログラム可能なデータプロセシング装備のプロセッサに搭載することができるため、コンピュータまたはその他のプログラム可能なデータプロセシング装備のプロセッサを介して行われるそのインストラクションがブロック図の各ブロックまたはフローチャートの各ステップで説明された機能を行う手段を生成するようになる。これらコンピュータプログラムインストラクションは、特定方式で機能を実現するために、コンピュータまたはその他のプログラム可能なデータプロセシング装備を指向できるコンピュータ利用可能またはコンピュータ読取可能なメモリに格納することも可能であるため、そのコンピュータ利用可能またはコンピュータ読取可能なメモリに格納されたインストラクションは、ブロック図の各ブロックまたはフローチャートの各ステップで説明された機能を行うインストラクション手段を含む製造品目を生産することも可能である。コンピュータプログラムインストラクションは、コンピュータまたはその他のプログラム可能なデータプロセシング装備上に搭載されることも可能であるため、コンピュータまたはその他のプログラム可能なデータプロセシング装備上で一連の動作ステップが行われ、コンピュータで実行されるプロセスを生成してコンピュータまたはその他のプログラム可能なデータプロセシング装備を行うインストラクションはブロック図の各ブロックおよびフローチャートの各ステップで説明された機能を実行するためのステップを提供することも可能である。
【００６６】
また、各ブロックまたは各ステップは特定された論理的機能を実行するための１つ以上の実行可能なインストラクションを含むモジュール、セグメント、またはコードの一部を示すことができる。また、いくつかの代替実行例ではブロックまたはステップで言及された機能が順序を外れて発生することも可能であることを注目しなければならない。例えば、連続して図示されている２つのブロックまたはステップは実質的に同時に行われることも可能であり、またはそのブロックまたはステップが時々該当する機能により逆順に行われることも可能である。
【００６７】
以上、添付した図面を参照して本発明の実施形態を説明したが、本発明が属する技術分野で通常の知識を有する者であれば、本発明がその技術的思想や必須の特徴を変更せず、他の具体的な形態によって実施することができるということを理解できる。したがって、以上で記述した実施形態はすべての面で例示的なものであり、限定的なものではないことを理解しなければならない。
【図面の簡単な説明】
【００６８】
【図１】従来のジャバアプリケーションを動作させる装置を示すブロック図である。
【図２】本発明の実施形態に係わる入出力作業によってブロッキングされたスレッドを強制終了する装置を示すブロック図である。
【図３】本発明の実施形態に係わるスレッド情報テーブルを示す図である。
【図４】本発明の実施形態に係わるスレッドの状態変化を示す概念図である。
【図５】本発明の実施形態に係わる入出力作業によってブロッキングされたスレッドを強制終了する過程を示すフローチャートである。
【符号の説明】
【００６９】
２１０      命令入力部
２２０      格納部
２３０      制御部
２４０      状態確認部
２５０      信号送信部
２６０      作業管理部
２７０      スレッド管理部
【図１】
0004834566.tif 000002
【図２】
0004834566.tif 000003
【図３】
0004834566.tif 000004
【図４】
0004834566.tif 000005
【図５】
0004834566.tif 000006