JP2005539322A - データ処理システムにおいてスレッドを管理する方法と装置 - Google Patents

データ処理システムにおいてスレッドを管理する方法と装置 Download PDF

Info

Publication number
JP2005539322A
JP2005539322A JP2004537251A JP2004537251A JP2005539322A JP 2005539322 A JP2005539322 A JP 2005539322A JP 2004537251 A JP2004537251 A JP 2004537251A JP 2004537251 A JP2004537251 A JP 2004537251A JP 2005539322 A JP2005539322 A JP 2005539322A
Authority
JP
Japan
Prior art keywords
thread
kernel
user
semi
kernel thread
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.)
Granted
Application number
JP2004537251A
Other languages
English (en)
Other versions
JP2005539322A5 (ja
JP4418752B2 (ja
Inventor
メンドーサ、アルフレッド
ショップ、ジョエル、ハワード
Current Assignee (The listed assignees may be inaccurate. Google has not performed a legal analysis and makes no representation or warranty as to the accuracy of the list.)
International Business Machines Corp
Original Assignee
International Business Machines Corp
Priority date (The priority date 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 date listed.)
Filing date
Publication date
Application filed by International Business Machines Corp filed Critical International Business Machines Corp
Publication of JP2005539322A publication Critical patent/JP2005539322A/ja
Publication of JP2005539322A5 publication Critical patent/JP2005539322A5/ja
Application granted granted Critical
Publication of JP4418752B2 publication Critical patent/JP4418752B2/ja
Anticipated expiration legal-status Critical
Expired - Fee Related legal-status Critical Current

Links

Images

Classifications

    • GPHYSICS
    • G06COMPUTING; CALCULATING OR COUNTING
    • G06FELECTRIC DIGITAL DATA PROCESSING
    • G06F9/00Arrangements for program control, e.g. control units
    • GPHYSICS
    • G06COMPUTING; CALCULATING OR COUNTING
    • G06FELECTRIC DIGITAL DATA PROCESSING
    • G06F9/00Arrangements for program control, e.g. control units
    • G06F9/06Arrangements for program control, e.g. control units using stored programs, i.e. using an internal store of processing equipment to receive or retain programs
    • G06F9/46Multiprogramming arrangements
    • G06F9/48Program initiating; Program switching, e.g. by interrupt
    • G06F9/4806Task transfer initiation or dispatching
    • G06F9/4843Task transfer initiation or dispatching by program, e.g. task dispatcher, supervisor, operating system
    • G06F9/485Task life-cycle, e.g. stopping, restarting, resuming execution

Landscapes

  • Engineering & Computer Science (AREA)
  • Theoretical Computer Science (AREA)
  • Software Systems (AREA)
  • Physics & Mathematics (AREA)
  • General Engineering & Computer Science (AREA)
  • General Physics & Mathematics (AREA)
  • Debugging And Monitoring (AREA)
  • Stored Programmes (AREA)
  • Test And Diagnosis Of Digital Computers (AREA)

Abstract

【課題】 スレッドを管理する方法、装置、およびコンピュータ命令群を提供する。
【解決手段】 まず、ユーザ・スレッドに関連付けられたカーネル・スレッドが前記ユーザ・スレッドによって不必要にされていることを検出する。次いで、前記カーネル・スレッドが不必要にされていることに応答して、前記カーネル・スレッドに対して半切り離しを行う。その際、前記スレッド用のデータはスタックを変更しない。

Description

本発明は一般に改良されたデータ処理システムに関し、特にデータ処理システムにおいてスレッドを管理する方法と装置に関する。
スレッドとは中央処理装置(CPU)を利用するための基本単位である。スレッドは通常、プログラム・カウンタ、レジスタ・セット、およびスタック空間を有している。スレッドはそのコード部、データ部、およびオペレーティング・システムのリソース(たとえば、オープン・ファイルや信号など)を他のスレッドと共用している。これらのコンポーネントは「タスク」とも呼ばれている。一部のシステムでは、ユーザ・スレッドをシステム・コールを経由するのではなく、ユーザ・レベルのライブラリ中に実装しているから、スレッド・スイッチ(スレッドの切り換え)の際に、オペレーティング・システムを呼び出したり、カーネルに割り込みをかけたりする必要がない。
スレッドは多くの点でプロセスと同じ態様で動作する。スレッドは次に示すいくつかの状態のうちの1つの状態にある。すなわち、実行可能状態、阻止状態、休眠状態、実行状態、または終了状態である。ユーザ空間中のユーザ・スレッドはカーネル中のカーネル・スレッドが実行する。カーネル・スレッドは「仮想プロセッサ」とも呼ばれる。ある場合には、各ユーザ・スレッドが対応するカーネル・スレッドを有する1対1モデルを使用する。他の場合には、多くのユーザ・スレッドを数個のカーネル・スレッド上で実行するM:Nモデルを使用してパフォーマンスを向上させる。このモデルでは、特定のユーザ・スレッドを実行するのにカーネル・スレッドをもはや必要としない状況(たとえば相互排除(mutex)における阻止(blocking))が生じる。相互排除とはロッキング機構のことであり、オブジェクトをグラブ(grab)したり(つかんだり)解放したりするのに用いるプログラミング・フラグを使用することが含まれる。共用できないデータを取得すると、あるいは、システム内のどこにおいても同時に実行しえない処理を開始すると、相互排除は「ロック」状態にセットされる。相互排除が「アンロック」状態にセットされるのは、データがもはや必要でなくなったとき、または、ルーチンが終了したときである。現在実行しうるユーザ・スレッドがなくなると、このカーネル・スレッドは当該特定のユーザ・スレッドから自身を切り離したのち、休眠状態に入る。
カーネル・スレッドを切り離して(detachment)休眠状態に入れると、多数のアクションが処理されることになる。処理されるアクションの1つは、カーネル・スレッドがユーザ・スタックからそれ自身のより小さなスタックに転換することである。また、カーネル・スレッドはほとんどの信号を阻止するために信号マスキングを設定する。カーネル・スレッドが再び必要になると、このスレッドはユーザ・スレッドのスタックに転換し、いくつかのスレッド固有の属性(たとえば、信号マスク)を設定する。
本発明の認識によれば、現在使用しているこの切り離しとそれ続いて再取り付け(reattachment)を行う機構はパフォーマンス上の大きなオーバーヘッドを伴っている。切り離しまたは再取り付けを行うには各々、ユーザ空間からカーネル空間へ、あるいはカーネル空間からユーザ空間へデータをコピーするのにシステム・コールを必要とする。また、カーネル・ライブラリおよびカーネルの双方でロックを使用するから、ロック・コンテンション(ロックの争奪)が増大する可能性がある。さらに、この種の切り離しには信号処理上の問題が発生する可能性もある。特に、カーネル・スレッドが信号を阻止する前に短い空白期間(window)が存在するから、その期間中にカーネル・スレッドはその小さなカーネル・スタックを用いて実行中に信号を受信する可能性がある。本発明のさらなる認識によれば、より大きなユーザ・スタックを用いて良好に実行している信号ハンドラはカーネル・スレッドのより小さなスタックをオーバーフローさせて、メモリを破損させる、および/または、アプリケーションをコア・ダンプさせる可能性がある。(「Aおよび/またはB」は「AおよびB、A、またはB」を表わす。)
パフォーマンス上のオーバーヘッドとスタックのオーバーフローというこれら2つの問題点は別々の問題ではあるが、それらには類似した根本原因がある。その原因とは「アイドル」状態にあるカーネル・スレッドを切り離していることである。したがって、パフォーマンス上のオーバーヘッドを低減させるとともにスタックのオーバーフローを避けうる態様で、アイドル状態にあるカーネル・スレッドを取り扱う改良された方法、装置、およびコンピュータ命令を実現するのが好都合である。
本発明はスレッドを管理する方法、装置、およびコンピュータ命令群を提供する。まず、ユーザ・スレッドに関連付けられたカーネル・スレッドが前記ユーザ・スレッドによって不必要にされていることを検出する。次いで、前記カーネル・スレッドが不必要にされていることに応答して、前記カーネル・スレッドに対して半切り離しを行う。その際、前記スレッド用のデータはスタックを変更しない。
前記カーネル・スレッドは半切り離し済みリストに配置するとともに、前記ユーザ・スレッドと並行的に非実行可能状態に置くのが望ましい。
前記ユーザ・スレッドが休眠から覚醒(awake)したら、前記カーネル・スレッドを前記半切り離し済みリストから除去するが、前記ユーザ・スレッドへの再取り付けは不要であるのが望ましい。
前記スレッドはAIX(R) オペレーティング・システム中で実行するのが望ましい。
前記カーネル・スレッドに対して半切り離しを行うには、前記カーネル・スレッド用のデータをユーザ・スタックに残置しておき、前記データをカーネル・スタックにコピーする必要をなくすのが望ましい。
カーネル・スレッドが必要とされていないことの検出、および、前記カーネル・スレッドに対する半切り離しは、ライブラリを用いて行うのが望ましい。
前記ユーザ・スレッドが休眠状態から覚醒したら、第2のカーネル・スレッドに対して半切り離しではなく切り離しを行うか否かを判断し、前記第2のカーネル・スレッドが切り離されたら、前記ユーザ・スレッドにそれを取り付けるのが望ましい。
前記非実行可能状態が待機状態および休眠状態のうちの一方であるのが望ましい。
本発明の別の側面によると、次に示すデータ処理システムが実現される。
バス・システムと、
前記バス・システムに接続された通信装置と、
前記バス・システムに接続された記憶装置であって、前記記憶装置は1組の命令群を格納している、記憶装置と、
前記バス・システムに接続された処理装置であって、前記処理装置は前記1組の命令群を実行して、ユーザ・スレッドに関連付けられたカーネル・スレッドが前記ユーザ・スレッドによって不必要にされていることを検出し、前記カーネル・スレッドが不必要にされていることに応答して前記カーネル・スレッドに対して半切り離しを行うが、その際、前記スレッド用のデータはスタックを変更しない、処理装置と
を備えた
データ処理システム。
次に、図面を参照する。特に、図1を参照する。図1は本発明を実現しうるデータ処理システムを本発明の好適な実施形態に従って実体的に示す図である。図1にはコンピュータ100が示されている。コンピュータ100はシステム・ユニット102、画像表示端末104、キーボード106、記憶装置108(これにはフロッピー(R) 駆動装置および他の種類の永続的かつ着脱可能な記憶媒体が含まれる)、およびマウス110を備えている。パーソナル・コンピュータ100は追加の入力装置(たとえば、ジョイスティック、タッチパッド、タッチスクリーン、トラックボール、マイクロフォンなど)を備えていてもよい。コンピュータ100は好適な任意のコンピュータ(たとえばIBM(R) eServer (R) コンピュータやIBM(R) IntelliStation(R) コンピュータ〔これらはインターナショナル・ビジネス・マシーンズ・コーポレーション(International Business Machines Corporation)(ニューヨーク州アーモンク所在)の製品である〕など)を用いて実現することができる。図はコンピュータを示しているが、本発明の他の実施形態は他の種類のデータ処理システム(たとえばネットワーク・コンピュータ)で実現してもよい。また、コンピュータ100はグラフィカル・ユーザ・インタフェース(GUI)を備えているのが望ましい。このGUIはコンピュータ100内で動作中にコンピュータ読み取り可能な媒体中に存在するシステム・ソフトウェアによって実現することができる。
次に、図2を参照する。図2は本発明を実現しうるデータ処理システムのブロック図である。データ処理システム200は本発明のプロセスを実現するコードすなわち命令群を配置しうるコンピュータ(たとえば、図1に示すコンピュータ100)の一例である。データ処理システム200はPCI(peripheral component interconnect)ローカル・バス・アーキテクチャを採用している。図示した例ではPCIバスを採用しているが、他のバス・アーキテクチャ(たとえば、AGP(Accelerated Graphics Port)やISA(Industry Standard Archtecture)など)を使用してもよい。PCIローカル・バス206にはPCIブリッジ208を介してプロセッサ202とメイン・メモリ204が接続されている。PCIブリッジ208はプロセッサ202用の統合型メモリ・コントローラ/キャッシュ・メモリも備えている。図示した例では、LAN(local area network)アダプタ210、SCSI(small computer system interface)ホスト・バス・アダプタ212、および拡張バス・インタフェース214が直接コンポーネント接続によってPCIローカル・バス206に接続されている。これに対して、音声アダプタ216、グラフックス・アダプタ218、および音声/画像アダプタ219が、拡張スロットに挿入されたアドイン・ボードによってPCIローカル・バス206に接続されている。拡張バス・インタフェース214はキーボード/マウス・アダプタ220、モデム222、および追加のメモリ224用の接続手段を提供している。SCSIホスト・バス・アダプタ212はハード・ディスク駆動装置226、テープ駆動装置228、およびCD−ROM駆動装置230用の接続手段を提供している。典型的なPCIローカル・バスのインプリメンテーションは3個または4個のPCI拡張スロットまたはPCI拡張アドイン・コネクタをサポートすることができる。
プロセッサ202上ではオペレーティング・システムが実行されているが、それを用いて図2に示すデータ処理システム200内の様々なコンポーネントを調整するとともにそれらを制御している。このオペレーティング・システムとしては市販のオペレーティング・システム(たとえば、AIX(R) (Advanced Interactive eXectuve)やWindows(R) XPなど)を使用することができる。AIX(R) はUNIX(R) のバージョンの1つであり、インターナショナル・ビジネス・マシーンズ・コーポレーション(International Business Machines Corporation)から入手することができる。Windows(R) XPはマイクロソフト・コーポレーション(Microsoft(R) Corporation)から入手することができる。オペレーティング・システム、およびアプリケーションすなわちプログラム用の命令群は記憶装置(たとえばハード・ディスク駆動装置226)に格納しておき、メイン・メモリ204にロードしてプロセッサ202による実行の用に供する。
当業者が認識しうるように、図2に示すハードウェアはインプリメンテーションに応じて変動しうる。図2に示すハードウェアに加え、あるいはそれらに代えて、他の内部ハードウェアまたは周辺装置(たとえば、フラッシュ型ROM(read-only memory)、等価の不揮発性メモリ、光ディスク駆動装置など)を使用することができる。また、本発明のプロセスはマルチプロセッサ型のデータ処理システムにも適用することができる。
たとえば、データ処理システム200は、任意事項としてネットワーク・コンピュータとして構成されている場合、SCSIホスト・アダプタ212、ハード・ディスク駆動装置226、テープ駆動装置228、およびCD−ROM駆動装置230を備えてない。その場合、当該コンピュータは(正確にはクライアント・コンピュータと呼ぶべきだが)何らかの種類のネットワーク通信インタフェース(たとえば、LANアダプタ210やモデム222など)を備えている。別の例では、データ処理システム200として、当該データ処理システム200が何らかの種類のネットワーク通信インタフェースを備えているか否かとは無関係に、いかなる種類のネットワーク通信インタフェースにも依存することなくブートしうるように構成されたスタンドアローン型のシステムを用いてもよい。さらなる例では、データ処理システム200として、オペレーティング・システムのファイルおよび/またはユーザが作成したデータを格納するための不揮発性記憶を提供するROMおよび/またはフラッシュROMを備えるように構成したPDA(personal digital assistant)を用いてもよい。
図2に示した例および上述した例はアーキテクチャ上の限界を示唆することを意図していない。たとえば、データ処理システム200はPDAの形態をとるのに加え、ノート型コンピュータまたはハンドヘルド型コンピュータであってもよい。また、データ処理システム200はキオスクやウェブ機器であってもよい。
本発明のプロセスはプロセッサ202が、コンピュータ用に実装された命令群を用いて実行する。それらの命令群はメモリ(たとえば、メイン・メモリ204、メモリ224、または少なくとも1つの周辺装置226〜230)に配置しておくことができる。
次に、図3を参照する。図3はカーネル・スレッドを処理する際に使用するコンポーネント群を本発明の好適な実施形態に従って示すブロック図である。この例では、ユーザ・スレッド300、302、304、306、308はユーザ空間310に配置されており、一方、カーネル・スレッド312、314はカーネル空間318に配置されている。この例では、これらのスレッドはM:Nモデルに従っている。M:Nモデルでは、数個のカーネル・スレッドを用いて多数のユーザ・スレッドを実行することによりパフォーマンスを向上させている。
説明中の現時点では、ユーザ・スレッド300はカーネル・スレッド312が実行しており、ユーザ・スレッド304はカーネル・スレッド314が実行しており、ユーザ・スレッド306はカーネル・スレッド316が実行している。これらのユーザ・スレッド用に実行するオペレーションはユーザ・スレッド・スタック群320に配置されている。各ユーザ・スレッドは1つのユーザ・スレッド・スタックに関連付けられいてる。カーネル・スレッド312、314、316はユーザ・スレッド・スタック群320にデータを配置させている。カーネル・スレッドが実行中のユーザ・スレッドにはユーザ・スレッド・スタック群320中の特定のスタックが関連付けられている。
通常、カーネル・スレッド(たとえばカーネル・スレッド312)がユーザ・スレッド(たとえばユーザ・スレッド300)をそれ以上実行する必要がなくなったら、カーネル・スレッド312は自身を切り離し(detach)、ユーザ・スレッド300とともに休眠状態に入る。休眠状態にあるカーネル・スレッドは通常、切り離し済みリスト322に配置する。切り離し済みリスト322はPスレッド・ライブラリ324が管理している。Pスレッド・ライブラリ324はAIX(R) で使用される動的にロード可能なライブラリである。ユーザ・スレッド300から切り離したら、カーネル・スレッド312用の情報を次に示すように変更する。すなわち、ユーザ・スレッド・スタック群320中の当該ユーザ・スレッド用のスタックを指している現在のスタック・ポインタを表している、カーネル・スレッド312用の情報を、カーネル・スレッド・スタック群326中の当該カーネル・スレッドのスタック用に予約した領域を指すように変更する。ユーザ・スレッド300が休眠状態からウェイク(wake、実行可能状態になる)したら、カーネル・スレッド312を切り離し済みリスト322から除去し、ユーザ・スレッド300に再び取り付ける(reattach)。あるいは、カーネル・スレッド312が利用不能の場合には、切り離し済みリスト322中にある別に利用可能なカーネル・スレッドをユーザ・スレッド300に取り付けもよい。
本発明の好適な実施形態によれば、ユーザ・スレッド300が、カーネル・スレッド312が不必要な状態に入ると、Pスレッド・ライブラリ324はカーネル・スレッド312を切り離し済みリスト322ではなく半切り離し済み(semi-detached)リスト328に配置する。半切り離しであるから、カーネル・スレッド312はそのスタックまたは信号マスクを変更しない。その代わり、カーネル・スレッド312は半切り離し済みリスト328に配置され、ユーザ・スレッド300とともに並行的に休眠する。この平行的休眠状態において、カーネル・スレッド312は自身が並行的に休眠し続けている原因をなしたユーザ・スレッドのスタックと信号マスクなどの情報を保持している。この情報は「ユーザ・スレッド固有属性(user thread specific attribute)」とも呼ばれる。この平行的休眠によって、カーネル・スレッド312は他のユーザ・スレッドを実行しうると称するが、切り離し済みリスト322中のスレッドを先に使用してもらいたいと思っている。優先するのは、カーネル・スレッド312に付随するユーザ・スレッド、すなわちユーザ・スレッド300を実行することである。半切り離し済みリスト328は様々な態様で実現できるが、特定のインプリメンテーションによって決まる。この例では、このリストはスレッド構造体から成るリンクされたカーネルとして実現している。
ユーザ・スレッド300が休眠状態からウェイクすると、カーネル・スレッド312は半切り離し済みリスト328から自身を除去した後、ユーザ・スレッド300の実行を継続する。この機構によって、Pスレッド・ライブラリ324中のスレッドをウェイクさせる際に要するレイテンシ(待ち時間、遅延時間)を小さくする経路が実現する。このような機構が有用なのは、争奪状態にある相互排除(contested mutex)、状態変数(condition variable)、または信号(signal)からウェイクアップ(waking up)する(実行可能状態になる)ときである。なぜなら、これらのイベントに続いて実行するアクションはプログラムの残部が先に進む前に完了している必要があるからてある。
半切り離し済みリスト328中のカーネル・スレッドが後刻、別のユーザ・スレッドを実行する必要がある場合、切り離しを後で実行するために負うことになるパフォーマンス上のペナルティは次のようにすることにより回避することができる。すなわち、カーネル・スレッドを切り離すことなく、現在のユーザ・スレッドの状態から新たなユーザ・スレッドの状態へ移行させることによってである。たとえば、カーネル・スレッド312が半切り離し済みリスト328にあり、別のユーザ・スレッド(たとえばユーザ・スレッド302)が当該スレッドを実行するカーネル・スレッド312を必要としている場合、ユーザ・スレッド300に付随するスタックをユーザ・スレッド302に取り付ける。これはユーザ・スレッド302の属性に合致する、ユーザ・スレッド300用のスタック中の属性を変更することにより行う。たとえば、スタック・ポインタと信号マスクをユーザ・スレッド300用のものからユーザ・スレッド302用のものへ変更する。
この結果、カーネル・スレッドが完全に切り離されるのは当該カーネル・スレッドに付随するユーザ・スレッドが出る(exit)すなわち終了するときだけになる。したがって大部分の場合、通常の切り離しに付随するパフォーマンス上のオーバーヘッドは避けられる。
次に、図4〜図6を参照する。図4〜図6は半切り離し済みリスト中で使用するデータ構造を本発明の好適な実施形態に従って示す図てある。これらのデータ構造は半切り離し済みリスト(たとえば、図3に示す半切り離し済みリスト328)を実現するのに使用することができる。
図4では、異なる複数のカーネル・スレッドを指すのにリンク済みリストを使用している。たとえば、異なる複数のカーネル・スレッドを指すのにエントリ400とエントリ402を使用している。リスト・ヘッド・マーカ406はリンク済みリストの開始位置を特定している。エントリ400は前ポインタ408と次ポインタ410を備えている。エントリ402は前ポインタ412と次ポインタ414を備えている。これらのポインタはリンク済みリスト中の前エントリと次エントリを指すのに使用する。また、エントリ400はポインタ416を備え、エントリ402はポインタ418を備えている。これらのポインタはカーネル・スレッド(たとえばカーネル・スレッド420、422)を指している。
次に図5において、上記リスト構造で使用する情報はスレッド構造に取り込まれている。この例では、リスト・ヘッド・マーカ430は開始位置すなわち第1のスレッド(カーネル・スレッド432)を指している。カーネル・スレッド432はカーネル・スレッド436を指す次ポインタ434を備えている。カーネル・スレッド432は上記リスト中の何らかの前カーネルを指す前ポインタ438も備えている。カーネル・スレッド436はカーネル・スレッド432を差し返す前ポインタ440を備えている。カーネル・スレッド436中の次ポインタ442は上記リスト中の次のカーネル・スレッドを指している。この例は説明中の例における好適なリスト構造である。
図6では、異なる複数のカーネル・スレッドを指すのにアレイ450を使用している。リスト・ヘッド・マーカ452が、ポインタ454、456、458を備えたアレイ450の開始位置を指している。これらのポインタはカーネル・スレッド460、462、464をそれぞれ指している。これらの例は半切り離し済みリストを実現する方法を説明するものとしてのみ提示されている。他の種類の構造(たとえばツリーなど)を使用することもできるが、それは特定のインプリメンテーションによって決まる。
次に、図7を参照する。図7はブロック化呼び出し(blocking call)を処理するのに使用する既知の方法のフローチャートを示す図である。図7に示す方法はライブラリ(たとえば、図3に示したPスレッド・ライブラリ324など)に実装することができる。ブロック化呼び出しとはユーザ・レベルのスレッドを実行状態または実行可能状態から別の状態、すなわち待機状態または休眠状態に変化させうる任意の呼び出しのことである。
本方法は潜在的なブロック化呼び出しを検出することにより開始する(ステップ500)。次いで、本方法はユーザ・スレッドからカーネル・スレッドを切り離す(ステップ502)。ステップ502にはユーザ・スレッドのスタックからカーネル・スレッドのスタックへの情報のコピーおよび他のオペレーション(たとえば、信号を阻止するための信号マスキングの変更など)のためのオーバーヘッドが伴う。次いで、本方法は実行すべき新たなユーザ・スレッドを探索する(ステップ504)。実行可能なスレッドが見つかったら、当該新たなユーザ・スレッドにカーネル・スレッドを取り付ける(ステップ506)。ステップ506にはカーネル・スレッドのスタックから当該ユーザ・スレッドのスタックへのデータのコピーおよび信号マスクの設定などのオーバーヘッドが伴う。次いで、当該新たなユーザ・スレッドを実行した後(ステップ508)、本方法は終了する。
ステップ504を再度参照する。実行可能なスレッドがない場合、カーネル・スレッドを切り離し済みリストに配置した後、休眠状態に入れる。以後、本方法はユーザ・スレッドが実行可能になるのを検出するのを待ち受ける(ステップ512)。その後、実行可能であることが検出されたユーザ・スレッドにカーネル・スレッドを取り付ける(ステップ514)。次いで、カーネル・スレッドがこのユーザ・スレッドを実行する。その後、本方法は終了する。
次に、図8を参照する。図8はアイドル状態にあるスレッドを管理する方法のフローチャートを本発明の好適な実施形態に従って示す図である。図8に示す方法はライブラリ(たとえば、図3に示したPスレッド・ライブラリ324)に実装することができる。
本方法は潜在的なブロック化呼び出しを検出することにより開始する(ステップ600)。この潜在的なブロック化呼び出しはユーザ・レベルのスレッドを待機状態または休眠状態に置くものである。休眠状態または待機状態にあるスレッドを「非実行可能」スレッドと呼ぶ。次いで、本方法は実行すべき新たなスレッドを探索する(ステップ602)。実行可能なユーザ・スレッドが見つかったら、本方法はカーネル・スレッドを当該新たなユーザ・スレッドに切り換える(ステップ604)。ステップ604の切り換えはユーザ・レベルのディスパッチャによって行う。ディスパッチャのインプリメンテーション次第で、この切り換えはカーネル・スレッドの切り離しと再取り付けを伴ったり、伴わなかったりする。次いで、カーネル・スレッドが当該ユーザ・スレッドを実行する(ステップ606)。その後、本方法は終了する。
ステップ602を再度参照する。実行可能なユーザ・スレッドが見つからなかった場合、カーネル・スレッドを半切り離し済み休眠状態に配置する(ステップ608)。この種の休眠状態においては、カーネル・スレッドを半切り離し済みリストに配置した後、休眠状態にいれる。カーネル・スレッドに付随するユーザ・スレッドは現状を維持させるか、あるいはカーネル・スレッドとともに半切り離し済みリストに列挙する。この関連付けを行うのは、当該特定のカーネル・スレッドを使用して、必要でない限り、別のユーザ・スレッドを実行させるのではなく、当該ユーザ・スレッドを実行させるのを選好したということを表示するためである。
その後、イベントを検出して処理する(ステップ610)。そのイベントが、カーネル・スレッドに付随するユーザ・スレッドが実行可能になるというものであるなら、カーネル・スレッドが当該ユーザ・スレッドを実行する(ステップ612)。その後、本方法は終了する。ステップ610を再度参照する。カーネル・スレッドに付随するユーザ・スレッドが出る、またはカーネル・スレッドを必要としなくなった場合、カーネル・スレッドを切り離し済みリストに配置した後、休眠させる(ステップ614)。その後、本方法は終了する。詳述すると、ステップ614は図7に示す一連のステップ群に入り、ステップ510から開始する。
ステップ610に戻る。当該イベントが他の任意のイベントである場合、本方法は実行すべきユーザ・スレッドを探索する(ステップ616)。実行可能なスレッドが見つからなければ、本方法はステップ608に戻る。そうではなく、別のユーザ・スレッドが実行可能になるなら、本方法はカーネル・スレッドを実行可能になったユーザ・スレッドに切り換える(ステップ618)。このステップには2つのオペレーション、すなわち切り離しと取り付けが含まれている。あるいは、カーネル・スレッドを現在のユーザ・スレッドから新たなユーザ・スレッドに切り換える単一のオペレーションを用いてもよい。次いで、カーネル・スレッドが当該ユーザ・スレッドを実行する(ステップ620)。その後、本方法は終了する。
次に、図9を参照する。図9はカーネル・スレッドをウェイクさせるのに使用する既知の方法のフローチャートを示す図である。図9に示す方法はライブラリ(たとえば、図3に示したPスレッド・ライブラリ324)に実装することができる。この図に示す方法によって、スレッド(a thread)はユーザ・スレッドが実行可能になるのが検出されるまで待機または休眠することが可能になる。
本方法はカーネル・スレッドを求めて切り離し済みリストを検査することにより開始する(ステップ700)。この切り離し済みリストが空でない場合、当該切り離し済みリストからカーネル・スレッドを除去する(ステップ702)。次いで、このカーネル・スレッドをウェイクさせる(ステップ704)。その後、本方法を終了する。ステップ700を再度参照する。上記切り離し済みリストが空である場合、本方法は終了する。
次に、図10を参照する。図10はカーネル・スレッドを処理するのに使用する方法のフローチャートを本発明の好適な実施形態に従って示す図である。図10に示す方法はライブラリ(たとえば、図3に示したPスレッド・ライブラリ324)に実装することができる。本方法は別のカーネル・スレッドを実行可能にするカーネル・スレッドにおいて開始する。
本方法はカーネル・スレッドを求めて切り離し済みリストを検査することにより開始する(ステップ800)。当該切り離し済みリストが空なら、本方法はカーネル・スレッドを求めて半切り離し済みリストを検査する(ステップ802)。当該半切り離し済みリストが空なら、本方法は終了する。そうではなく、当該半切り離し済みリストが空でないなら、当該半切り離し済みリストからカーネル・スレッドを除去する(ステップ804)。次いで、当該半切り離し済みリストから除去したカーネル・スレッドをウェイクさせる(ステップ806)。その後、本方法は終了する。その時点で、当該カーネル・スレッドは実行している。
ステップ800を再度参照する。上記切り離し済みリストが空でない場合、カーネル・スレッドを当該切り離し済みリストから除去する(ステップ808)。次いで、当該カーネル・スレッドをウェイクさせる(ステップ810)。その後、本方法は終了する。本発明の機序が切り離し済みリストを依然として採用しているのは半切り離しではなく切り離しを必要とする状況が存在するからである。このリストは既存のユーザ・スレッドのために必要になる可能性がある。その場合、ユーザ・スレッドをウェイクさせるときに、カーネル・スレッドを半切り離し済みリストから選択するのよりもカーネル・スレッドを切り離し済みリストから選択することの方が選好される。
したがって、本発明はアイドル状態にあるカーネル・スレッドを取り扱うための改良された方法、装置、およびコンピュータ命令群を提供する。本発明の機序によれば、カーネル・スレッドを切り離した後、引き続いて再取り付けすることに現在は伴うオーバーヘッドを回避することが可能になる。また、本発明の機序によれば、起こりうるスタックのオーバーフローを回避することも可能になる。これらの利点は半切り離し法を用いることにより得られる。この方法はカーネル・スレッドを半切り離し済みリストに配置するステップと、その後に当該カーネル・スレッドを休眠状態にするステップとを含んでいる。これらのステップはカーネル・スレッドをユーザ・スレッドから切り離す際に通常は必要とされるステップ群を必要とすることなく実行される。
次に示す点に留意するのが重要である。すなわち、完全に機能するデータ処理システムの文脈で本発明を説明したが、当業者が認識しうるように、本発明のプロセスは命令群から成るコンピュータ読み取り可能な媒体の形態など、様々な形態で頒布することができる、さらに、本発明は頒布を行うのに実際に使用する特定の種類の信号担持媒体とは無関係に等しく適用することができる。コンピュータ読み取り可能な媒体の例としては記録可能型媒体(たとえば、フロッピー(R) ディスク、ハード・ディスク駆動装置、RAM、CD−ROM、DVD−ROMなど)、ならびに伝送型媒体(たとえば、ディジタル通信リンクおよびアナログ通信リンク、無線周波数伝送や光波伝送などの伝送形態を用いた有線通信リンクまたは無線通信リンクなど)が挙げられる。このコンピュータ読み取り可能な媒体は、復号して特定のデータ処理システムにおける実際の使用に供する符号化済みフォーマットの形態をとりうる。
本発明を実現しうるデータ処理システムの実体を本発明の好適な実施形態に従って示す図である。 本発明を実現しうるデータ処理システムのブロック図である。 カーネル・スレッドを取り扱う際に使用するコンポーネントを示す図である。 半切り離しリストで使用するデータ構造を示す図である。 半切り離しリストで使用するデータ構造を示す図である。 半切り離しリストで使用するデータ構造を示す図である。 ブロック化呼び出しを処理するのに使用する既知の方法のフローチャートを示す図である。 アイドル状態にあるスレッドを管理するのに使用する方法のフローチャートを示す図である。 カーネル・スレッドをウェイクさせるのに使用する既知の方法のフローチャートを示す図である。 カーネル・スレッドを取り扱うのに使用する方法のフローチャートを示す図である。
符号の説明
100 コンピュータ
102 システム・ユニット
104 画像表示端末
106 キーボード
108 記憶装置
110 マウス
200 データ処理システム
202 プロセッサ
204 メイン・メモリ
206 PCIローカル・バス
208 PCIブリッジ
210 LANアダプタ
212 SCSIホスト・バス・アダプタ
214 拡張バス・インタフェース
216 音声アダプタ
218 グラフックス・アダプタ
219 音声/画像アダプタ
220 キーボード/マウス・アダプタ
222 モデム
224 メモリ
226 ハード・ディスク駆動装置
228 テープ駆動装置
230 CD−ROM駆動装置
300 ユーザ・スレッド
302 ユーザ・スレッド
304 ユーザ・スレッド
306 ユーザ・スレッド
308 ユーザ・スレッド
310 ユーザ空間
312 カーネル・スレッド
314 カーネル・スレッド
318 カーネル空間
320 ユーザ・スレッド・スタック群
322 切り離し済みリスト
324 Pスレッド・ライブラリ
326 カーネル・スレッド・スタック群
328 半切り離し済みリスト
400 エントリ
402 エントリ
406 リスト・ヘッド・マーカ
408 前ポインタ
410 次ポインタ
412 前ポインタ
414 次ポインタ
416 ポインタ
418 ポインタ
420 カーネル・スレッド
422 カーネル・スレッド
430 リスト・ヘッド・マーカ
432 カーネル・スレッド
434 次ポインタ
436 カーネル・スレッド
438 前ポインタ
440 前ポインタ
442 次ポインタ
450 アレイ
452 リスト・ヘッド・マーカ
454 ポインタ
456 ポインタ
458 ポインタ
460 カーネル・スレッド
462 カーネル・スレッド
464 カーネル・スレッド

Claims (11)

  1. データ処理システムにおいてスレッドを管理する方法であって、
    ユーザ・スレッドに関連付けられたカーネル・スレッドが前記ユーザ・スレッドによって不必要にされていることを検出するステップと、
    前記カーネル・スレッドが不必要にされていることに応答して、前記カーネル・スレッドに対して半切り離しを行うステップであって、前記スレッド用のデータはスタックを変更しない、ステップと
    を備えた
    方法。
  2. さらに、
    前記カーネル・スレッドを半切り離し済みリストに配置するステップと、 前記カーネル・スレッドを前記ユーザ・スレッドと並行的に非実行可能状態に置くステップと
    を備えた、
    請求項1に記載の方法。
  3. さらに、
    前記ユーザ・スレッドが休眠からウェイクするのに応答して、前記カーネル・スレッドを前記半切り離し済みリストから除去するステップであって、前記ユーザ・スレッドへの再取り付けは不要である、ステップ
    を備えた、
    請求項2に記載の方法。
  4. さらに、
    前記ユーザ・スレッドが休眠状態からウェイクするのに応答して、第2のカーネル・スレッドに対して半切り離しではなく切り離しを行うか否かを判断するステップと、
    前記第2のカーネル・スレッドが切り離されるのに応答して、前記ユーザ・スレッドに前記第2のカーネル・スレッドを取り付けるステップと
    を備えた、
    請求項2に記載の方法。
  5. 前記非実行可能状態が待機状態および休眠状態のうちの一方である、
    請求項2に記載の方法。
  6. スレッドを管理するデータ処理システムであって、
    ユーザ・スレッドに関連付けられたカーネル・スレッドが前記ユーザ・スレッドによって不必要にされていることを検出する検出手段と、
    前記カーネル・スレッドが不必要にされていることに応答して、前記カーネル・スレッドに対して半切り離しを行う半切り離し手段であって、前記スレッド用のデータはスタックを変更しない、半切り離し手段と
    を備えた
    データ処理システム。
  7. さらに、
    前記カーネル・スレッドを半切り離し済みリストに配置する第1の配置手段と、
    前記カーネル・スレッドを前記ユーザ・スレッドと並行的に非実行可能状態に置く第2の配置手段と
    を備えた、
    請求項6に記載の方法。
  8. さらに、
    前記ユーザ・スレッドが休眠からウェイクするのに応答して、前記カーネル・スレッドを前記半切り離し済みリストから除去する除去手段であって、前記ユーザ・スレッドへの再取り付けは不要である、除去手段
    を備えた、
    請求項7に記載の方法。
  9. さらに、
    前記ユーザ・スレッドが休眠状態からウェイクするのに応答して、第2のカーネル・スレッドに対して半切り離しではなく切り離しを行うか否かを判断する判断手段と、
    前記第2のカーネル・スレッドが切り離されるのに応答して、前記ユーザ・スレッドに前記第2のカーネル・スレッドを取り付ける取り付け手段と
    を備えた、
    請求項7に記載の方法。
  10. 前記非実行可能状態が待機状態および休眠状態のうちの一方である、
    請求項7に記載の方法。
  11. スレッドを管理する、コンピュータ読み取り可能な媒体中のコンピュータ・プログラム製品であって、前記コンピュータ・プログラム製品は請求項1〜6のうちの1項に記載の方法を実行する命令群を備えている、
    コンピュータ・プログラム製品。
JP2004537251A 2002-09-19 2003-08-11 データ処理システムにおいてスレッドを管理する方法と装置 Expired - Fee Related JP4418752B2 (ja)

Applications Claiming Priority (2)

Application Number Priority Date Filing Date Title
US10/246,889 US7275247B2 (en) 2002-09-19 2002-09-19 Method and apparatus for handling threads in a data processing system
PCT/GB2003/003497 WO2004027599A2 (en) 2002-09-19 2003-08-11 Method and apparatus for handling threads in a data processing system

Publications (3)

Publication Number Publication Date
JP2005539322A true JP2005539322A (ja) 2005-12-22
JP2005539322A5 JP2005539322A5 (ja) 2009-06-04
JP4418752B2 JP4418752B2 (ja) 2010-02-24

Family

ID=31992385

Family Applications (1)

Application Number Title Priority Date Filing Date
JP2004537251A Expired - Fee Related JP4418752B2 (ja) 2002-09-19 2003-08-11 データ処理システムにおいてスレッドを管理する方法と装置

Country Status (9)

Country Link
US (1) US7275247B2 (ja)
JP (1) JP4418752B2 (ja)
KR (1) KR100745888B1 (ja)
CN (1) CN100356328C (ja)
AU (1) AU2003249094A1 (ja)
BR (1) BRPI0314853B1 (ja)
CA (1) CA2498050C (ja)
TW (1) TWI235953B (ja)
WO (1) WO2004027599A2 (ja)

Families Citing this family (20)

* Cited by examiner, † Cited by third party
Publication number Priority date Publication date Assignee Title
US8185895B2 (en) * 2005-11-30 2012-05-22 International Business Machines Corporation Method, apparatus and program storage device for providing an anchor pointer in an operating system context structure for improving the efficiency of accessing thread specific data
US8214834B2 (en) * 2007-04-30 2012-07-03 Hewlett-Packard Development Company, L.P. Asynchronous wakeup mechanism that places reference to process on sleep queue if execution of copyout functionality is caused to sleep
US20080307419A1 (en) * 2007-06-06 2008-12-11 Microsoft Corporation Lazy kernel thread binding
US20080313647A1 (en) * 2007-06-18 2008-12-18 Microsoft Corporation Thread virtualization techniques
US20080313656A1 (en) * 2007-06-18 2008-12-18 Microsoft Corporation User mode stack disassociation
TWI386814B (zh) * 2007-12-31 2013-02-21 Ind Tech Res Inst 具動態工作管理能力之多處理器界面及其程式載卸方法
US8752057B1 (en) * 2008-06-30 2014-06-10 Emc Corporation Techniques for synchronizing processing of at least two code threads
US8473964B2 (en) 2008-09-30 2013-06-25 Microsoft Corporation Transparent user mode scheduling on traditional threading systems
US8321874B2 (en) * 2008-09-30 2012-11-27 Microsoft Corporation Intelligent context migration for user mode scheduling
DE102012104461A1 (de) 2012-05-23 2013-12-12 B. Braun Avitum Ag Medizinisches Gerät zur extrakorporalen Blutbehandlung mit mehreren Sensoreinheiten
US8930956B2 (en) * 2012-08-08 2015-01-06 International Business Machines Corporation Utilizing a kernel administration hardware thread of a multi-threaded, multi-core compute node of a parallel computer
US20150074436A1 (en) * 2013-09-10 2015-03-12 Nvidia Corporation In-Kernel CPU Clock Boosting on Input Event
US9411642B2 (en) 2014-01-17 2016-08-09 Nvidia Corporation Using high priority thread to boost CPU clock rate
US9594660B2 (en) * 2014-03-27 2017-03-14 International Business Machines Corporation Multithreading computer system and program product for executing a query instruction for idle time accumulation among cores
US9852091B2 (en) 2015-11-16 2017-12-26 International Business Machines Corporation Techniques for handling interrupts in a processing unit using virtual processor thread groups and software stack levels
US10503576B2 (en) 2016-02-19 2019-12-10 International Business Machines Corporation Maintaining core dump privacy during application fault handling
US10331500B2 (en) 2017-04-05 2019-06-25 Cavium, Llc Managing fairness for lock and unlock operations using operation prioritization
US10248420B2 (en) 2017-04-05 2019-04-02 Cavium, Llc Managing lock and unlock operations using active spinning
US10895954B2 (en) * 2017-06-02 2021-01-19 Apple Inc. Providing a graphical canvas for handwritten input
CN115934372A (zh) * 2023-03-09 2023-04-07 浪潮电子信息产业股份有限公司 一种数据处理方法、系统、设备及计算机可读存储介质

Family Cites Families (14)

* Cited by examiner, † Cited by third party
Publication number Priority date Publication date Assignee Title
US5515538A (en) * 1992-05-29 1996-05-07 Sun Microsystems, Inc. Apparatus and method for interrupt handling in a multi-threaded operating system kernel
US5692193A (en) * 1994-03-31 1997-11-25 Nec Research Institute, Inc. Software architecture for control of highly parallel computer systems
US6732138B1 (en) * 1995-07-26 2004-05-04 International Business Machines Corporation Method and system for accessing system resources of a data processing system utilizing a kernel-only thread within a user process
US5812852A (en) * 1996-11-14 1998-09-22 Kuck & Associates, Inc. Software implemented method for thread-privatizing user-specified global storage objects in parallel computer programs via program transformation
US5950221A (en) * 1997-02-06 1999-09-07 Microsoft Corporation Variably-sized kernel memory stacks
US5872963A (en) * 1997-02-18 1999-02-16 Silicon Graphics, Inc. Resumption of preempted non-privileged threads with no kernel intervention
US5907702A (en) * 1997-03-28 1999-05-25 International Business Machines Corporation Method and apparatus for decreasing thread switch latency in a multithread processor
KR100280460B1 (ko) * 1998-04-08 2001-02-01 김영환 데이터 처리 장치 및 이의 복수의 스레드 처리 방법
US6654781B1 (en) * 1998-12-11 2003-11-25 International Business Machines Corporation Enhanced thread processing
US6542920B1 (en) * 1999-09-24 2003-04-01 Sun Microsystems, Inc. Mechanism for implementing multiple thread pools in a computer system to optimize system performance
US6631462B1 (en) * 2000-01-05 2003-10-07 Intel Corporation Memory shared between processing threads
US6832266B1 (en) * 2000-02-07 2004-12-14 Sun Microsystems, Inc. Simplified microkernel application programming interface
US6931641B1 (en) * 2000-04-04 2005-08-16 International Business Machines Corporation Controller for multiple instruction thread processors
US6728722B1 (en) * 2000-08-28 2004-04-27 Sun Microsystems, Inc. General data structure for describing logical data spaces

Also Published As

Publication number Publication date
BR0314853A (pt) 2005-08-09
KR100745888B1 (ko) 2007-08-02
TWI235953B (en) 2005-07-11
US20040060049A1 (en) 2004-03-25
AU2003249094A8 (en) 2004-04-08
US7275247B2 (en) 2007-09-25
BRPI0314853B1 (pt) 2016-03-22
KR20050058362A (ko) 2005-06-16
CA2498050A1 (en) 2004-04-01
TW200409020A (en) 2004-06-01
WO2004027599A3 (en) 2005-04-21
AU2003249094A1 (en) 2004-04-08
CN1735865A (zh) 2006-02-15
JP4418752B2 (ja) 2010-02-24
CA2498050C (en) 2010-07-27
WO2004027599A2 (en) 2004-04-01
CN100356328C (zh) 2007-12-19

Similar Documents

Publication Publication Date Title
JP4418752B2 (ja) データ処理システムにおいてスレッドを管理する方法と装置
US5692204A (en) Method and apparatus for computer system power management
US7734881B2 (en) Adapting RCU for real-time operating system usage
JP4119945B2 (ja) タスク処理装置
US9892481B2 (en) CPU/GPU synchronization mechanism
US20090037927A1 (en) Apparatus and method for direct switching of software threads
US8793697B2 (en) Method and system for scheduling requests in a portable computing device
JP5260962B2 (ja) 複数の命令シーケンサでのスレッド実行に基づく命令セットのためのメカニズム
JP4127848B2 (ja) タスク処理装置
JPWO2009022371A1 (ja) タスク処理装置
US20030005251A1 (en) Managing latencies in accessing memory of computer systems
JP2008108075A (ja) タスク切替え制御方法及びコンピュータシステム
US20080313652A1 (en) Notifying user mode scheduler of blocking events
US20080307419A1 (en) Lazy kernel thread binding
WO2007094460A1 (ja) 並列処理装置及び排他制御方法
WO2023206693A1 (zh) 系统休眠方法及装置、系统唤醒方法及装置
JP2008269597A (ja) タスク処理装置
JP2022107229A (ja) 情報処理装置、制御方法及び制御プログラム
CN115599540A (zh) 一种多线程调用系统及方法
Hong et al. New Scheme of Implementing Real-Time Linux
JPH06259383A (ja) 割込み制御方法及び割込み制御装置
JPH02120938A (ja) データ処理方法
JPS6393065A (ja) コ・プロセツサid変換方式

Legal Events

Date Code Title Description
A621 Written request for application examination

Free format text: JAPANESE INTERMEDIATE CODE: A621

Effective date: 20060711

RD03 Notification of appointment of power of attorney

Free format text: JAPANESE INTERMEDIATE CODE: A7423

Effective date: 20090206

A521 Written amendment

Free format text: JAPANESE INTERMEDIATE CODE: A523

Effective date: 20090415

A871 Explanation of circumstances concerning accelerated examination

Free format text: JAPANESE INTERMEDIATE CODE: A871

Effective date: 20090415

A521 Written amendment

Free format text: JAPANESE INTERMEDIATE CODE: A523

Effective date: 20090415

A131 Notification of reasons for refusal

Free format text: JAPANESE INTERMEDIATE CODE: A131

Effective date: 20090512

A975 Report on accelerated examination

Free format text: JAPANESE INTERMEDIATE CODE: A971005

Effective date: 20090430

A521 Written amendment

Free format text: JAPANESE INTERMEDIATE CODE: A523

Effective date: 20090707

A131 Notification of reasons for refusal

Free format text: JAPANESE INTERMEDIATE CODE: A131

Effective date: 20090901

A521 Written amendment

Free format text: JAPANESE INTERMEDIATE CODE: A523

Effective date: 20091026

TRDD Decision of grant or rejection written
A01 Written decision to grant a patent or to grant a registration (utility model)

Free format text: JAPANESE INTERMEDIATE CODE: A01

Effective date: 20091124

A01 Written decision to grant a patent or to grant a registration (utility model)

Free format text: JAPANESE INTERMEDIATE CODE: A01

A61 First payment of annual fees (during grant procedure)

Free format text: JAPANESE INTERMEDIATE CODE: A61

Effective date: 20091130

R150 Certificate of patent or registration of utility model

Free format text: JAPANESE INTERMEDIATE CODE: R150

FPAY Renewal fee payment (event date is renewal date of database)

Free format text: PAYMENT UNTIL: 20121204

Year of fee payment: 3

FPAY Renewal fee payment (event date is renewal date of database)

Free format text: PAYMENT UNTIL: 20121204

Year of fee payment: 3

FPAY Renewal fee payment (event date is renewal date of database)

Free format text: PAYMENT UNTIL: 20131204

Year of fee payment: 4

LAPS Cancellation because of no payment of annual fees