(57)【要約】      （修正有）【課題】個別ベースでスレッドの中断及び再開を管理するための方法及び装置を提供する。【解決手段】ターゲット・スレッドの実行を中断するためのスレッドからのリクエストに応答して、ＯＳカーネルがスレッド停止信号をターゲット・スレッドに送り、正常に実行しているプログラム部分から信号割り込みルーチンへターゲット・スレッドにおけるコントロールを移させる。信号割り込みルーチンは、コントロールを得ると，サービス・リクエストをカーネルに送出してターゲット・スレッドを停止させる。ターゲット・スレッドの実行を再開するためのスレッドからのリクエストに応答して、ＯＳカーネルはスレッド継続信号をターゲット・スレッドに送り、待機しているターゲット・スレッドをポストさせて、コントロールを信号割り込みルーチンに戻させる。信号割り込みルーチンは、再びコントロールを得ると、コントロールを割り込みポイントにおいてプログラムに戻す。【選択図】  図１
2004213637.tif 000002
【特許請求の範囲】
【請求項１】
オペレーティング・システム・カーネルと複数の実行スレッドを有するユーザ・プロセスとを含む情報処理システムにおいて、前記スレッドの実行を管理するために前記カーネルによって遂行される方法であって、
前記ユーザ・プロセスの指定されたターゲット・スレッドの実行状態を変更するためのリクエストを前記スレッドの１つから受け取るステップと、
前記リクエストを受け取ったことに応答して、前記ユーザ・プロセスにおけるいずれの未指定スレッドの実行状態をも変更することなく、
前記指定されたターゲット・スレッドの実行状態を変更するための信号を前記ユーザ・プロセスの前記指定されたターゲット・スレッドに送るステップと、
を含む、方法。
【請求項２】
前記スレッドの１つからの前記リクエストが、前記指定されたターゲット・スレッドの実行を中断するためのリクエストである、請求項１に記載の方法。
【請求項３】
前記スレッドの１つからの前記リクエストが、前記指定されたターゲット・スレッドの実行を再開するためのリクエストである、請求項１に記載の方法。
【請求項４】
前記リクエストが、ターゲット・スレッド及び該ターゲット・スレッドに送られるべき信号のタイプを指定する、請求項１に記載の方法。
【請求項５】
前記リクエストが、前記指定されたターゲット・スレッドの実行状態における所望の変更を指定する、請求項１に記載の方法。
【請求項６】
前記スレッドの１つが、指定された信号を前記指定されたターゲット・スレッドに送るためのコマンドを前記カーネルに送出することによって前記リクエストを行い、
前記カーネルは、前記コマンドを受け取るとき、前記指定された信号を前記ユーザ・プロセスのいずれの未指定スレッドにも送ることなく、前記指定された信号を前記指定されたターゲット・スレッドに送る、
請求項１に記載の方法。
【請求項７】
前記カーネルは、前記指定されたターゲット・スレッドの実行を中断するためのリクエストを前記スレッドの１つから受け取ったとき、前記指定されたターゲット・スレッドの実行のコントロールを、正常に実行しているプログラム部分から割り込みルーチンに移す、請求項１に記載の方法。
【請求項８】
前記割り込みルーチンは、実行のコントロールを得たとき、該割り込みルーチンの実行を中断するためのサービス・リクエストを前記カーネルに送出する、請求項７に記載の方法。
【請求項９】
前記カーネルは、前記指定されたターゲット・スレッドの実行を再開するためのリクエストを前記スレッドの１つから受け取ったとき、前記割り込みルーチンの実行を再開する、請求項８に記載の方法。
【請求項１０】
前記割り込みルーチンは、実行を再開したとき、前記正常に実行しているプログラム部分に実行のコントロールを戻す、請求項９に記載の方法。
【請求項１１】
オペレーティング・システム・カーネル及び複数の実行スレッドを有するユーザ・プロセスを含む情報処理システムにおいて、前記スレッドの実行を管理するための装置であって、
前記ユーザ・プロセスの指定されたターゲット・スレッドの実行を中断するためのリクエストを前記スレッドの１つから受け取ったことに応答して、前記ユーザ・プロセスにおけるいずれの未指定スレッドをも中断することなく、前記指定されたターゲット・スレッドを中断するためのスレッド停止信号を前記ユーザ・プロセスの前記指定されたターゲット・スレッドに送るためのスレッド停止ロジックと、
前記ユーザ・プロセスの指定されたターゲット・スレッドの実行を再開するためのリクエストを前記スレッドの１つから受け取ったことに応答して、前記ユーザ・プロセスのいずれの未指定スレッドをも再開することなく、前記指定されたターゲット・スレッドを再開するためのスレッド継続信号を前記ユーザ・プロセスの前記指定されたターゲット・スレッドに送るためのスレッド継続ロジックと、
を含む、装置。
【請求項１２】
前記スレッドの１つが、指定された信号を前記指定されたターゲット・スレッドに送るためのコマンドを前記カーネルに送出することによってリクエストを行い、
前記カーネルは、前記コマンドを受け取ったとき、前記指定された信号を前記ユーザ・プロセスのいずれの未指定スレッドにも送ることなく、前記指定された信号を前記指定されたターゲット・スレッドに送る、
請求項１１に記載の装置。
【請求項１３】
前記スレッド停止ロジックは、前記指定されたターゲット・スレッドの実行を中断するためのリクエストを受け取ったとき、前記指定されたターゲット・スレッドの実行のコントロールを正常に実行しているプログラム部分から割り込みルーチンに移す、請求項１１に記載の装置。
【請求項１４】
前記割り込みルーチンは、実行のコントロールを得たとき、該割り込みルーチンの実行を中断するためのサービス・リクエストを前記カーネルに送出する、請求項１３に記載の装置。
【請求項１５】
前記スレッド継続ロジックは、前記指定されたターゲット・スレッドの実行を再開するためのリクエストを受け取ったとき、前記割り込みルーチンの実行を再開する、請求項１４に記載の装置。
【請求項１６】
オペレーティング・システム・カーネルと複数の実行スレッドを有するユーザ・プロセスとを含む情報処理システムにおいて、スレッドの実行を管理するための方法ステップを遂行するためにマシン実行可能な命令のプログラムを具現化したマシン読み取り可能なプログラム・ストレージ・デバイスであって、前記方法ステップが前記カーネルによって実行され、
前記ユーザ・プロセスの指定されたターゲット・スレッドの実行状態を変更するためのリクエストを前記スレッドの１つから受け取ること、
前記リクエストを受け取ったことに応答して、前記ユーザ・プロセスにおけるいずれの未指定スレッドの実行状態をも変更することなく、前記指定されたターゲット・スレッドの実行状態を変更するための信号を前記ユーザ・プロセスの前記指定されたターゲット・スレッドに送ること
を含む、プログラム・ストレージ・デバイス。
【請求項１７】
前記スレッドの１つが、指定された信号を前記指定されたターゲット・スレッドに送るためのコマンドを前記カーネルに送出することによって前記リクエストを行い、
前記カーネルは、前記コマンドを受け取るとき、前記指定された信号を前記ユーザ・プロセスのいずれの未指定スレッドにも送ることなく、前記指定された信号を前記指定されたターゲット・スレッドに送る、
請求項１６に記載のプログラム・ストレージ・デバイス。
【請求項１８】
前記カーネルは、前記指定されたターゲット・スレッドの実行を中断するためのリクエストを前記スレッドの１つから受け取ったとき、前記指定されたターゲット・スレッドの実行のコントロールを正常に実行しているプログラム部分から割り込みルーチンに移す、請求項１６に記載のプログラム・ストレージ・デバイス。
【請求項１９】
前記割り込みルーチンは、実行のコントロールを得たとき、該割り込みルーチンの実行を中断するためのサービス・リクエストを前記カーネルに送出する、請求項１８に記載のプログラム・ストレージ・デバイス。
【請求項２０】
前記カーネルは、前記指定されたターゲット・スレッドの実行を再開するためのリクエストを前記スレッドの１つから受け取ったとき、前記割り込みルーチンの実行を再開する、請求項１９に記載のプログラム・ストレージ・デバイス。
【発明の詳細な説明】
【技術分野】
【０００１】
本発明は、マルチスレッド・アプリケーションにおけるスレッド実行を管理するための方法及び装置に関する。詳しく言えば、本発明は、標準のＰＯＳＩＸ機構を使用して個々のスレッドの中断（suspension）及び再開（resumption）を制御するための方法及び装置に関する。
【背景技術】
【０００２】
マルチスレッド・アプリケーションは、最新のコンピュータ・システム、特に、ＵＮＩＸ（登録商標）ベースのオペレーティング・システムを使用するシステムにおける周知の機能である。マルチスレッド・アプリケーションは複数の実行スレッドを有し、それらスレッドの各々は同じアプリケーションにおける他のスレッドに比較的無関係に個々のタスクを遂行することが可能である。例えば、サーバ・プロセスの個々のスレッドは、種々のクライアントから受けた作業の処理単位となり得る。
【０００３】
信号は、そのようなプロセス及びスレッドが相互にコミュニケーションを行うために使用する手段の１つである。そのプロセス・レベルでは、信号は、プロセス間通信（ＩＰＣ）における周知の手段であり、ＩＰＣに関しては、例えば、W.R.Stevens 著の「UNIX Network Programming(1990)」の４３−５３ページに説明されている。この文献で説明されているように、信号は事象（event）が生じたことをプロセスに通知するものである。信号は、実行の終了（例えば、ＳＩＧＫＩＬＬ、ＳＩＧＴＥＲＭ）、実行の中断（ＳＩＧＳＴＯＰ）、又は中断したプロセスの実行回復（ＳＩＧＣＯＮＴ）のようなアクションを開始し得る。プロセスは、信号を他のプロセスに送るために、オペレーティング・システム・カーネルのサービスを使用して信号を生成し、それを意図した受信者に送る。従って、ＩＢＭｚ/ＯＳオペレーティング・システムのＵＮＩＸ System Services（ＵＳＳ）コンポーネントによって定義されたＵＮＩＸシステムでは、プロセスは、信号をプロセスにおけるために、ターゲット・プロセス及び送られるべき信号を指定する kill()サービス・リクエストをカーネルに送出（issue）し得る。これは、ＩＢＭ刊行物「z/OS UNIX System Services Programming : Assembler Callable Services Reference, SA22-7803-02(March 2002)」及び「z/OS C/C++ Run-Time Library Reference, SA22-7821-02(March 2002)」のような参考文献に開示されている。
【０００４】
ターゲット・プロセスが信号を受け取ったときに取るアクションは、上述のように、その問題の信号に依存する。一般に、信号を受け取るプロセスは、いくつかの事項の１つを行うことができる。それは、ターゲット・プロセスによって決定される特定の機能を遂行するためのシグナル・ハンドラとして知られたルーチンにコントロールを渡すことによって信号を「捕捉（catch）する」ことができる。それとは別に、ターゲット・プロセスは、受け取った信号が無視することができないＳＩＧＫＩＬＬ又はＳＩＧＳＴＯＰのような信号ではない場合には、その信号を簡単に無視することができる。結局、ターゲット・プロセスは、プロセス終了のようなデフォルト・アクションを生じさせ得る。
【０００５】
信号は、プロセス間のみならず、単一プロセスにおける種々のスレッド間においても送られ得る。従って、ＩＢＭｚ/ＯＳオペレーティング・システムのＵＮＩＸ System Services コンポーネントでは、或るプロセスの特定のスレッドに信号を送るために、同じプロセスの起点スレッドがターゲット・スレッド及び送られるべき信号を指定する pthread_kill() サービス・リクエストをカーネルに送出し得る。ここでも、ターゲット・スレッドによって取られるアクションは、それが受け取った特定の信号に依存する。
【０００６】
スレッド及び信号に関する背景の説明に関連して、本発明により処理される問題点に触れることにする。通常のマルチスレッドＵＮＩＸアプリケーションでは、ユーザは、そのユーザが個々のスレッドを安全に停止し得る方法を制限されている。現在のＰＯＳＩＸセマンティックスは、プロセス全体（すべてのスレッド）がＳＩＧＳＴＯＰ、ＳＩＧＴＴＯＵ、ＳＩＧＴＴＩＮ、又はＳＩＧＴＳＴＰ信号を介して停止させられることを可能にするだけである。これは、たとえ、「停止」信号が pthread_kill() サービスを介して個々のスレッドに向けられる場合でも真である。同様に、ＳＩＧＣＯＮＴ信号は、マルチスレッド停止済みプロセスにおけるすべてのスレッドを継続するであろう。これらの既存のＰＯＳＩＸ信号機構は、いずれも、マルチスレッド・アプリケーションが個々のスレッドを停止ことも開始することも可能にするものではない。
【０００７】
個々のタスク又はスレッドの実行を管理するための既存の機構が存在する。例えば、ＵＮＩＸシステムには、条件変数（condition variable）及びおそらく最も広範に使用されているｍｕｔｅｘサービスとスレッドが相互に直列化することを可能にするサービスが存在する。しかし、これらのサービスは、連携ロジックがターゲット・スレッドにおける所定位置にあることを必要とする。
【非特許文献１】W.R.Stevens 著「UNIX Network Programming(1990)」の４３−５３ページ
【非特許文献２】ＩＢＭ刊行物「z/OS UNIX System Services Programming : Assembler Callable Services Reference, SA22-7803-02(March 2002)」
【非特許文献３】ＩＢＭ刊行物「z/OS C/C++ Run-Time Library Reference, SA22-7821-02(March 2002)」
【発明の開示】
【発明が解決しようとする課題】
【０００８】
一般に、本発明は、オペレーティング・システム（ＯＳ）カーネルと複数の実行スレッドを有するユーザ・プロセスとを有する情報処理システムにおいて個別ベースでスレッドの中断及び再開を管理するための方法及び装置に関する。
【課題を解決するための手段】
【０００９】
本発明によれば、ＯＳカーネルは、ユーザ・プロセスの指定されたターゲット・スレッドの実行状態を変更するためのリクエストをスレッドの１つから受けたことに応答して、ユーザ・プロセスにおける指定されたターゲット・スレッドに信号を送り、ユーザ・プロセスにおける如何なる未指定スレッドにも信号を送ることなく又はその実行状態を変更することなく、指定されたターゲット・スレッドの実行状態を変更させる。
【００１０】
本発明は、個々のスレッドを停止及び開始する機能をマルチスレッド・アプリケーションに与える。ＰＯＳＩＸ信号機構を使用してこの新しい機能を提供するために、１つの実施例では、起点のスレッドがサービス・リクエストをＯＳカーネルに送出して指定の信号（スレッド停止又はスレッド継続）を同じプロセス内の指定ターゲット・スレッドに送り、ターゲット・スレッドの実行を中断又は再開させる。従って、ターゲット・スレッドの実行を中断するためのスレッドからのリクエストに応答して、ＯＳカーネルがスレッド停止信号をターゲット・スレッドに送り、正常に実行しているプログラム部分から信号割り込みルーチン（signal interrupt routine ? ＳＩＲ）へターゲット・スレッドにおけるコントロールを移させる。信号割り込みルーチンは、コントロールを得ると，サービス・リクエストをカーネルに送出してターゲット・スレッドを停止させる。同様に、ターゲット・スレッドの実行を再開するためのスレッドからのリクエストに応答して、ＯＳカーネルがスレッド継続信号をターゲット・スレッドに送り、待機しているターゲット・スレッドをポスト（post）させて、コントロールを信号割り込みルーチンに戻させる。信号割り込みルーチンは、再びコントロールを得ると、コントロールをプログラムに割り込みポイントにおいて戻す。
【００１１】
本発明の望ましい実施例では、２つの信号、即ち、ＳＩＧＴＨＳＴＯＰ（スレッド停止）及びＳＩＧＴＨＣＯＮＴ（スレッド継続）が定義され、pthread_kill() サービスがＳＩＧＴＨＳＴＯＰ又はＳＩＧＴＨＣＯＮＴ信号をターゲット・スレッドに送るために使用される。（サービス及び信号の名称はもちろん任意であり、同等の機能が遂行されるならば他の任意の名称を使用してもよい）。これらの２つの新しい信号は、それらのアクションの範囲がターゲット・スレッドに限定されることを除けば、全体的には、上記のＳＩＧＳＴＯＰ及びＳＩＧＣＯＮＴと同様に作用する。
【００１２】
ＰＯＳＩＸ信号サービスは広範に使用されており、ＵＮＩＸプログラマはこれを十分に理解している。スレッド実行を管理するタスクに信号ベースのソリューションを施すことによって、まったく同様のプロセスがＳＩＧＳＴＯＰ及びＳＩＧＣＯＮＴによって管理されるので、本発明はＵＮＩＸ型のプログラミングに十分に適合する。この意味で信号を使用することは、更なるターゲット・スレッド・アプリケーション・ロジックがなくても「制御」スレッドが同じプロセスにおける１つ又はそれ以上のスレッドを管理することを可能にする。ターゲット・スレッドは、ＰＯＳＩＸプロセスが通常に停止及び継続されるのと同様に、非同期的に停止及び継続され得る。また、プロセスを停止及び継続するための既存のセマンティック場合のように、スレッドの停止及び継続がターゲット・スレッドの機能を崩壊させることはない。しかも、上記の条件変数及びｍｕｔｅｘサービスとは対照的に、本発明は、連携論理（cooperative logic）がターゲット・スレッドにおける所定位置にある必要がない。
【発明を実施するための最良の形態】
【００１３】
図１は、本発明を組み込んだコンピュータ・システム１０におけるソフトウェア・コンポーネントの概略的なブロック図である。ソフトウェア・コンポーネントを実行するハードウェアは通常のものであり、従って、図示されていない。システム１０では、オペレーティング・システム（ＯＳ）カーネル１２並びに少なくとも第１スレッド１６（スレッド１）及び第２スレッド１８（スレッド２）を含むユーザ・プロセス１４が実行される。ＯＳカーネル１２は、ＩＢＭ  ｅサーバ  ｚシリーズ・サーバ（図示されてない）において実行されるＩＢＭ  ｚ／ＯＳオペレーティング・システムのＵＮＩＸ System Services コンポーネントのようなＵＮＩＸカーネルであってもよい。しかし、本発明は、ＵＮＩＸカーネルを有するシステムに限定されない。上記の背景技術の項で記述したように、ＯＳカーネル１２は、指定された信号を指定されたターゲット・プロセスに送るための kill() サービス及び指定された信号を指定されたターゲット・スレッドに送るための pthraed_kill() サービスのようなシステム・サービスを遂行する。
【００１４】
本発明に従って、２つの新しいスレッド・スコープ（thread-scoped）信号ＳＩＧＴＨＳＴＯＰ及びＳＩＧＴＨＣＯＮＴが与えられる。予備的事項として、これらの信号を導入する方法、これらの信号のシンタックス、及びセマンティックスを簡単に説明することにする。
【００１５】
スレッド停止信号に関して、シンタックスは：
pthread_kill(thread_id, sigthstop)
である。但し、thread_id は、（プロセス内の）ターゲット・スレッドの一意的な識別子であり、sigthstop は、ＳＩＧＴＨＳＴＯＰ信号と一意的に関連付けられた値である。同様に、スレッド継続信号に関して、シンタックスは：
pthread_kill(thread_id, sigthcont)
である。但し、thread_id は、ターゲット・スレッドの一意的な識別子であり、sigthcont は、ＳＩＧＴＨＣＯＮＴ信号と一意的に関連付けられた値である。
【００１６】
信号ＳＩＧＴＨＳＴＯＰ及びＳＩＧＴＨＣＯＮＴは、pthread_kill()サービスを使用して送られる。それらの信号は、プロセス全体よりもむしろ単一のスレッドの有効範囲を有する。従って、サービス・リクエスト pthread_kill(thread_id, sigthstop) は、thread_id によって指定されたスレッドを停止させるであろう。一方、サービス・リクエスト pthread_kill(thread_id, sigthcont) は、指定されたスレッドを再開させるであろう。
【００１７】
次に、本発明の信号の導入を説明することにする。以下の例では、スレッド１８が起点スレッドであり、スレッド１６がターゲット・スレッドであると仮定するが、一般には、ユーザ・プロセス１４におけるいずれのスレッドも、本願に開示された方法で同じユーザ・プロセスにおける他の任意のスレッドをターゲットとすることが可能である。ターゲット・スレッド１６は、正常に実行しているプログラム部分２０、信号割り込みルーチン（ＳＩＲ）２２及び信号割り込みロジック２４を含む。正常に実行しているプログラム部分２０は、単に、割り込み時に実行しているプログラム部分であり、それが遂行し得る機能は本発明に無関係である。信号割り込みルーチン２２は、更に詳細に後述するように、ＯＳカーネル１２からスレッド１８に信号を配送する際のスレッド１８の実行に関するコントロールを得る。信号割り込みロジック２４は、ＯＳカーネル１２から受け取った信号に応答して、正常に実行しているプログラム部分２０から信号割り込みルーチン２２にコントロールを移すためのロジック（即ち、プログラミング・コード）を含む。信号割り込みルーチン２２及び信号割り込みロジック２４は、スレッド１８に向けられたすべての信号を処理する。しかし、本願では本発明のＳＩＧＴＨＳＴＯＰ及びＳＩＧＴＨＣＯＮＴ信号に関連した部分だけを説明する。
【００１８】
要するに、スレッド停止信号ＳＩＧＴＨＳＴＯＰがスレッド１６に抗して送出される時、カーネル１２はその信号を信号割り込みルーチン２２に送り、そのルーチン２２は、スレッド１６を適切な時間に停止するために内部カーネル・サービス・コールをカーネル１２に送出する。その後、スレッド継続信号ＳＩＧＴＨＣＯＮＴがスレッド１６に抗して送出される時、カーネル１２はコントロールを信号割り込みルーチン２２に戻すように待機スレッド１６にポストする。ルーチン２２は、割り込みポイントでプログラム２０にコントロールを戻す。
【００１９】
更に詳しく言うと、ターゲット・スレッド１６の実行を中断するために、起点スレッド１８は、pthread_kill()サービス・リクエスト２６をカーネル１２に送出する。図に示されるように、サービス・リクエスト２６は、ターゲット・スレッド１６（スレッド１）及びそのターゲット・スレッド１６に送られる信号（ＳＩＧＴＨＳＴＯＰ）の両方を識別する。カーネル１２の割り込み生成ロジック２８がリクエスト２６を発生し、外部割り込み３０をスレッド１６の信号割り込みロジック２４に送る。
【００２０】
信号割り込みロジック２４は、スレッド１６における正常に実行しているプログラム２０を停止し、３２によってカーネル・デリバリ・ルーチン３４をコールする。デリバリ・ルーチン３４は、スレッド１６のプログラム・コンテキスト、即ち、プログラム・ステータス・ワード（ＰＳＷ）及び上記のｚシリーズ・マシンにおける関連レジスタ、を修正して信号割り込みルーチン２２を実行させる。しかる後、割り込みロジック２４が終了し、カーネル・ディスパッチャ（個別には図示されていない）が信号割り込みルーチン２２を制御してコントロールをユーザ・タスクに戻す。
【００２１】
信号割り込みルーチン２２は割り込みデータを記録し、アプリケーションが、完了しなければならないクリティカルなコード・セクションにあるかどうかを決定する。これが否定される場合、信号割り込みルーチン２２は、「stop me」pthread_quiesce コール３６をカーネル待ちサービス（kernWait）３８に送出してスレッド１６を待つ。アプリケーションがロジックのクリティカルなコード・セクションにある場合、信号割り込みルーチン２２はカーネル待ちサービス３８のコールをそれが安全に行えるようになるまで遅らせる。いずれの場合も、それがコールされたとき、カーネル待ちサービス３８はスレッド１６を停止状態にする。
【００２２】
或る将来の時点で、スレッド１８は、第２ pthread_kill()サービス・リクエストを送出して停止したスレッド１６を継続させる。図示のように、この第２サービス・リクエスト４０は、ターゲット・スレッド１６（スレッド１）及びそのターゲット・スレッド１６に送られる信号（ＳＩＧＴＨＣＯＮＴ）の両方を識別する。カーネル１２のポスト生成ロジック４２がこのリクエストに応答して、今なおカーネル１２において待機しているスレッド１６をポストする。これは、４４を介して KernWait サービス３８に通知することよって行われる。そのサービス３８は、４６を介してコントロールを信号割り込みルーチン２２に戻す。一方、信号割り込みルーチン２２は、４８を介して、ユーザ・プログラム２０にオリジナル割り込みのポイントで戻る。スレッド１６は、それが停止させられたことに気付かない。
【００２３】
上記の説明から、割り込み生成ロジック２８及びカーネル・デリバリ・ルーチン３４は、スレッドを中断するためのＳＩＧＴＨＳＴＯＰ信号をターゲット・スレッドに送るためのスレッド停止ロジックとして機能し、一方、ポスト生成ロジック４２はスレッドを再開するためのＳＩＧＴＨＣＯＮＴ信号をターゲット・スレッドに送るためのスレッド継続ロジックとして機能することがわかるであろう。
【００２４】
図示の実施例では、ＳＩＧＴＨＳＴＯＰ及びＳＩＧＴＨＣＯＮＴ信号は、他の機能をブロックするスレッドが、その後、ターゲット・スレッドにおいて悪影響を生じることなく、ＳＩＧＴＨＳＴＯＰ及びＳＩＧＴＨＣＯＮＴを使って停止及び継続するように、既存のＰＯＳＩＸ標準と互換性のある方法で処理される。即ち、ターゲット・スレッドが sleep() 状態にあって停止している場合、sleep() サービスは早期にはウェイクアップしないであろう。これに関する詳細は、IBM Technical Disclosure Bulletin の vol. 36, no. 11, Nov. 1993, pages 483-485 における”Dual Level Wait”と題した S. Bender 氏他による記事で見ることが可能である。
【００２５】
図示の実施例では、ＳＩＧＴＨＳＴＯＰ及びＳＩＧＴＨＣＯＮＴ信号は非捕捉可能な且つ非阻止可能なものであり、これらの信号を無視することはできない。従って、ターゲット・スレッドは、信号次第で実行を中断又は再開しなければならない。また、他の信号のように、それらは累積性のものではなく、スタック可能でもない。同じターゲット・スレッドへの複数のＳＩＧＴＨＳＴＯＰ信号が漸増的な効果がなくても許容されるが、同じスレッドに送られた単一のＳＩＧＴＨＣＯＮＴはたとえそれが幾つものＳＩＧＴＨＳＴＯＰ信号の初期ターゲットであったとしても、それを再活動化するであろう。ＳＩＧＴＨＳＴＯＰ信号はキューされないので、その後の信号はカーネルによって無視される。
【００２６】
図示の実施例では、pthread_kill(thread_id, sigthcont) コマンドが同じプロセスの他のスレッドに抗して送出される。ＳＩＧＴＨＳＴＯＰはそのプロセスにおける単一のスレッドを停止するだけなので、そのプロセスにおける他の任意の実行スレッドがその停止したスレッドを再開するためにＳＩＧＴＨＣＯＮＴを送出することが可能である。ＳＩＧＴＨＳＴＯＰを使用してそのプロセスにおけるすべてのスレッドを停止させることが回避されなければならないので、その間、プロセスは仮想的にハングされる。ウェイクアップするための信号を送ることができる他のプロセスからのスレッドはない。行うことができる唯一のものは手操作でスレッドを強制終了（kill）することである。
【００２７】
特定の実施例を示し且つ説明したけれども、当業者には種々の修正が明らかであろう。従って、ＵＮＩＸベースのオペレーティング・システムに関連して本発明を説明したけれども、本発明はそのようなオペレーティング・システムに限定されない。また、上述のように、使用された信号及びサービス・リクエストは同じ機能が遂行される限り、種々の名称を持ち得る。更に、説明された pthread_kill() サービスは単一のターゲット・スレッドのみに関して動作するけれども、それは、例えば、リストで指定されるような複数のスレッドに関しても動作するように修正可能であろう。そのような場合、信号はその指定されたスレッドのみに送られ、ユーザ・プロセスにおける如何なる未指定のスレッドにも送られないであろう。
【００２８】
まとめとして、本発明の構成に関して以下の事項を開示する。
【００２９】
（１）オペレーティング・システム・カーネルと複数の実行スレッドを有するユーザ・プロセスとを含む情報処理システムにおいて、前記スレッドの実行を管理するために前記カーネルによって遂行される方法であって、
前記ユーザ・プロセスの指定されたターゲット・スレッドの実行状態を変更するためのリクエストを前記スレッドの１つから受け取るステップと、
前記リクエストを受け取ったことに応答して、前記ユーザ・プロセスにおけるいずれの未指定スレッドの実行状態をも変更することなく、
前記指定されたターゲット・スレッドの実行状態を変更するための信号を前記ユーザ・プロセスの前記指定されたターゲット・スレッドに送るステップと、
を含む、方法。
（２）前記スレッドの１つからの前記リクエストが、前記指定されたターゲット・スレッドの実行を中断するためのリクエストである、上記（１）に記載の方法。
（３）前記スレッドの１つからの前記リクエストが、前記指定されたターゲット・スレッドの実行を再開するためのリクエストである、上記（１）に記載の方法。
（４）前記リクエストが、ターゲット・スレッド及び該ターゲット・スレッドに送られるべき信号のタイプを指定する、上記（１）に記載の方法。
（５）前記リクエストが、前記指定されたターゲット・スレッドの実行状態における所望の変更を指定する、上記（１）に記載の方法。
（６）前記スレッドの１つが、指定された信号を前記指定されたターゲット・スレッドに送るためのコマンドを前記カーネルに送出することによって前記リクエストを行い、
前記カーネルは、前記コマンドを受け取るとき、前記指定された信号を前記ユーザ・プロセスのいずれの未指定スレッドにも送ることなく、前記指定された信号を前記指定されたターゲット・スレッドに送る、
上記（１）に記載の方法。
（７）前記カーネルは、前記指定されたターゲット・スレッドの実行を中断するためのリクエストを前記スレッドの１つから受け取ったとき、前記指定されたターゲット・スレッドの実行のコントロールを、正常に実行しているプログラム部分から割り込みルーチンに移す、上記（１）に記載の方法。
（８）前記割り込みルーチンは、実行のコントロールを得たとき、該割り込みルーチンの実行を中断するためのサービス・リクエストを前記カーネルに送出する、上記（７）に記載の方法。
（９）前記カーネルは、前記指定されたターゲット・スレッドの実行を再開するためのリクエストを前記スレッドの１つから受け取ったとき、前記割り込みルーチンの実行を再開する、上記（８）に記載の方法。
（１０）前記割り込みルーチンは、実行を再開したとき、前記正常に実行しているプログラム部分に実行のコントロールを戻す、上記（９）に記載の方法。
（１１）オペレーティング・システム・カーネル及び複数の実行スレッドを有するユーザ・プロセスを含む情報処理システムにおいて、前記スレッドの実行を管理するための装置であって、
前記ユーザ・プロセスの指定されたターゲット・スレッドの実行を中断するためのリクエストを前記スレッドの１つから受け取ったことに応答して、前記ユーザ・プロセスにおけるいずれの未指定スレッドをも中断することなく、前記指定されたターゲット・スレッドを中断するためのスレッド停止信号を前記ユーザ・プロセスの前記指定されたターゲット・スレッドに送るためのスレッド停止ロジックと、
前記ユーザ・プロセスの指定されたターゲット・スレッドの実行を再開するためのリクエストを前記スレッドの１つから受け取ったことに応答して、前記ユーザ・プロセスのいずれの未指定スレッドをも再開することなく、前記指定されたターゲット・スレッドを再開するためのスレッド継続信号を前記ユーザ・プロセスの前記指定されたターゲット・スレッドに送るためのスレッド継続ロジックと、
を含む、装置。
（１２）前記スレッドの１つが、指定された信号を前記指定されたターゲット・スレッドに送るためのコマンドを前記カーネルに送出することによってリクエストを行い、
前記カーネルは、前記コマンドを受け取ったとき、前記指定された信号を前記ユーザ・プロセスのいずれの未指定スレッドにも送ることなく、前記指定された信号を前記指定されたターゲット・スレッドに送る、
上記（１１）に記載の装置。
（１３）前記スレッド停止ロジックは、前記指定されたターゲット・スレッドの実行を中断するためのリクエストを受け取ったとき、前記指定されたターゲット・スレッドの実行のコントロールを正常に実行しているプログラム部分から割り込みルーチンに移す、上記（１１）に記載の装置。
（１４）前記割り込みルーチンは、実行のコントロールを得たとき、該割り込みルーチンの実行を中断するためのサービス・リクエストを前記カーネルに送出する、上記（１３）に記載の装置。
（１５）前記スレッド継続ロジックは、前記指定されたターゲット・スレッドの実行を再開するためのリクエストを受け取ったとき、前記割り込みルーチンの実行を再開する、上記（１４）に記載の装置。
（１６）オペレーティング・システム・カーネルと複数の実行スレッドを有するユーザ・プロセスとを含む情報処理システムにおいて、スレッドの実行を管理するための方法ステップを遂行するためにマシン実行可能な命令のプログラムを具現化したマシン読み取り可能なプログラム・ストレージ・デバイスであって、前記方法ステップが前記カーネルによって実行され、
前記ユーザ・プロセスの指定されたターゲット・スレッドの実行状態を変更するためのリクエストを前記スレッドの１つから受け取ること、
前記リクエストを受け取ったことに応答して、前記ユーザ・プロセスにおけるいずれの未指定スレッドの実行状態をも変更することなく、前記指定されたターゲット・スレッドの実行状態を変更するための信号を前記ユーザ・プロセスの前記指定されたターゲット・スレッドに送ること
を含む、プログラム・ストレージ・デバイス。
（１７）前記スレッドの１つが、指定された信号を前記指定されたターゲット・スレッドに送るためのコマンドを前記カーネルに送出することによって前記リクエストを行い、
前記カーネルは、前記コマンドを受け取るとき、前記指定された信号を前記ユーザ・プロセスのいずれの未指定スレッドにも送ることなく、前記指定された信号を前記指定されたターゲット・スレッドに送る、
上記（１６）に記載のプログラム・ストレージ・デバイス。
（１８）前記カーネルは、前記指定されたターゲット・スレッドの実行を中断するためのリクエストを前記スレッドの１つから受け取ったとき、前記指定されたターゲット・スレッドの実行のコントロールを正常に実行しているプログラム部分から割り込みルーチンに移す、上記（１６）に記載のプログラム・ストレージ・デバイス。
（１９）前記割り込みルーチンは、実行のコントロールを得たとき、該割り込みルーチンの実行を中断するためのサービス・リクエストを前記カーネルに送出する、上記（１８）に記載のプログラム・ストレージ・デバイス。
（２０）前記カーネルは、前記指定されたターゲット・スレッドの実行を再開するためのリクエストを前記スレッドの１つから受け取ったとき、前記割り込みルーチンの実行を再開する、上記（１９）に記載のプログラム・ストレージ・デバイス。
【図面の簡単な説明】
【００３０】
【図１】本発明を組み込んだコンピュータ・システムのソフトウェア・コンポーネントの概略的なブロック図である。
【図１】
2004213637.tif 000003