JP4694595B2 - スリープキュー管理 - Google Patents

スリープキュー管理 Download PDF

Info

Publication number
JP4694595B2
JP4694595B2 JP2008157283A JP2008157283A JP4694595B2 JP 4694595 B2 JP4694595 B2 JP 4694595B2 JP 2008157283 A JP2008157283 A JP 2008157283A JP 2008157283 A JP2008157283 A JP 2008157283A JP 4694595 B2 JP4694595 B2 JP 4694595B2
Authority
JP
Japan
Prior art keywords
thread
time
threads
sleep queue
dimension
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.)
Expired - Fee Related
Application number
JP2008157283A
Other languages
English (en)
Other versions
JP2009026302A (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.)
Microsoft Corp
Original Assignee
Microsoft 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 Microsoft Corp filed Critical Microsoft Corp
Publication of JP2009026302A publication Critical patent/JP2009026302A/ja
Application granted granted Critical
Publication of JP4694595B2 publication Critical patent/JP4694595B2/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
    • 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
    • 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/4812Task transfer initiation or dispatching by interrupt, e.g. masked
    • G06F9/4825Interrupt from clock, e.g. time of day
    • 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/4881Scheduling strategies for dispatcher, e.g. round robin, multi-level priority queues
    • GPHYSICS
    • G06COMPUTING; CALCULATING OR COUNTING
    • G06FELECTRIC DIGITAL DATA PROCESSING
    • G06F7/00Methods or arrangements for processing data by operating upon the order or content of the data handled
    • G06F7/22Arrangements for sorting or merging computer data on continuous record carriers, e.g. tape, drum, disc
    • G06F7/24Sorting, i.e. extracting data from one or more carriers, rearranging the data in numerical or other ordered sequence, and rerecording the sorted data on the original carrier or on a different carrier or set of carriers sorting methods in general

Landscapes

  • Engineering & Computer Science (AREA)
  • Software Systems (AREA)
  • Theoretical Computer Science (AREA)
  • Physics & Mathematics (AREA)
  • General Engineering & Computer Science (AREA)
  • General Physics & Mathematics (AREA)
  • Debugging And Monitoring (AREA)
  • Telephonic Communication Services (AREA)

Description

以下の説明は、オペレーティングシステムに関する。より詳細には、以下の説明は、スリープキュー管理に関する。
リアルタイムパフォーマンスは、通信交換装置、医療監視装置、宇宙航法および誘導アプリケーションなどの、高性能な埋め込み型アプリケーションで必要とされるタイムクリティカルな応答に必須である。このようなアプリケーションは、応答を、指定された時間パラメータ内でリアルタイムに送達しなければならない。
リアルタイムパフォーマンスは、スレッドスケジューリングメカニズム(thread-scheduling mechanisms)を使用して、スレッド優先度に基づいて実行し、スレッドをスケジュールするオペレーティングシステムによって提供される。(スレッドは基本的には、コンピュータプログラムアプリケーションを介した実行のパスである)。例えば、Microsoft WINDOWS CE(登録商標)オペレーティングシステムは、256のスレッド優先度レベルを提供し、より高い優先度のスレッドが実行されてから、より低い優先度のスレッドが実行される。等しい優先度のスレッドは、先入れ先出しのラウンドロビン方式で実行される。例えば、スレッドAが動作し、次いでスレッドBが動作し、その後にスレッドCが続き、スレッドAに戻る。
スレッドスケジューリングメカニズムは、典型的には、後で実行するためにスレッドを「実行キュー」に格納する。図1は、リンクリストとして実施される従来の実行キュー100を例示する。実行キューにおけるスレッド102は、各々のスレッド優先度に基づいてソートされる。例えば、スレッド102−A1ないし102−AJは、各々0のスレッド優先度を有し、スレッド102−B1ないし102−BKは、各々1のスレッド優先度を有する。いかなる数のスレッド102も実行キューに存在することができる。
現在実行中のスレッドを、別のスレッドによってプリエンプト(preempt)することができ、またはスレッド自体がプロセッサにそのアクセスを「与える(yield)」ことができる。これらの用語は共に、スレッドが「非実行中」状態に配置されることを指す。例えば、オペレーティングシステムは、スレッドをスリープにすることができ、またはスレッドをプリエンプトして、より高い優先度を有する異なるスレッドを実行できるようにすることができる。他の実施例では、スレッド自体は、そのアクセスをプロセッサに「与え」て、所定の時間の経過など、特定のイベントの発生を待ってから、実行を継続することができる。
スレッドが別のプログラムによってプリエンプトされるか、スレッド自体がそのアクセスをプロセッサに与えるかどうかに関わらず、システムのスレッドスケジューリングメカニズムは、典型的には、プリエンプトされた、または与えたスレッドを実行キューまたはスリープキューに格納する。(より詳細には、スレッドへの参照は、一般に実行キューまたはスリープキューに格納される。)(スレッドスケジューリングメカニズムをオペレーティングシステムの一部にすることもしないこともできるが、本明細書においては、スレッドスケジューリングメカニズム、オペレーティングシステムなどの用語をしばしば相互交換可能に使用して、システムのスレッドスケジューリングの態様を記載する。)スレッドの指定されたスリープ時間が終了したとき、スケジューリングメカニズムは、スレッドをスリープキューから除去し、かつスレッドを後で実行するために実行キューに挿入することによって、スレッドを「ウェイクアップ(wakes-up)」させる。
図2は、リンクリストとして実施される、従来の1次元のスリープキュー200を例示する。(従来のスリープキューは、「ヒープ(heap)」データ構造として実施することもできる)。本明細書の目的において、スリープキュー200は、時間に基づいてソートされる任意の数のスレッドを格納するための任意のキューである。この実施例では、スリープキューにおけるスレッド202は、1次元において、スレッドウェイクアップ時間およびスレッド優先度に基づいて特定のウェイクアップ時間内でソートされる。例えば、スレッド202−1は5ミリ秒(ms)のウェイクアップ時間を有し、スレッド202−2および202−3は10ミリ秒の各ウェイクアップ時間を有する。同じスリープ時間を有するスレッドは、優先度に基づいてラウンドロビン方式でソートされる。例えば、スレッド202−2は、10msのウェイクアップ時間および0のスレッド優先度(この例では、最高のスレッド優先度)を有し、スレッド202−...は、10msのウェイクアップ時間および5のスレッド優先度(0のスレッド優先度より低い優先度)を有する。この方法では、従来のスリープキューにおけるスレッドは、互いに関連して1次元でソートされる。
上述のように、スレッドを別のスレッドによって、いくつの理由でもプリエンプトすることができる。スレッドをプリエンプトすることができる1つの有意な理由は、オペレーティングシステムまたはスレッドスケジューリングメカニズムが、実行される必要のある、より高い優先度のスレッドがあるかどうかを決定できるようにすることである。この決定の一部、およびそれ自体における、かつそれ自体の別の有意な理由は、オペレーティングシステムが、スリープキューにおいて格納/参照されたスレッドを走査して、実行するためにウェイクアップされる(例えば、実行キューに挿入される)必要があるかどうかを決定できることである。リアルタイムオペレーティングシステムは、典型的には、すべての他のスレッドを実行から所定の定期的な時間間隔でプリエンプトして、このようなスレッド管理を実行する。
スレッドスケジューリングメカニズムは、典型的には、ハードウェアタイマを使用してシステムチックを生成して、スレッドがシステムにおいてプリエンプトされることなく実行することができる時間の最大量、または「クアンタム(quantum)」を決定する。システムチックは、ハードウェアタイマの割り込みがオペレーティングシステムによって生成され、働くレートである。タイマが作動したとき、スレッドスケジューリングメカニズムは、新しいスレッドが準備完了の場合に、新しいスレッドを実行するためにスケジュールする。
重要なことは、オペレーティングシステムは、あるスレッドスケジューリング手順中に、例えば、スリープキュースレッド除去手順中と、実行キュースレッド挿入手順中などに、プロセッサへの排他的アクセスを必要とする。オペレーティングシステムは、そのシステム排他的アクセスを使用して、(a)スレッドをスリープキューから、各スレッドの指定されたウェイクアップ時間に、またはそれに可能な限り近くに、後で実行キューに挿入するために除去し、(b)スリープキューから除去された各スレッドを実行キューに、実行するために挿入する。
一度にウェイクアップされるスレッドの数は、1スレッド、2スレッドまたは100スレッドなど、いかなる数のスレッドにすることもできる。スリープキューから、実行キューに挿入するために除去する必要のあるスレッドが多いほど、オペレーティングシステムがプロセッサへのシステム排他的アクセスを必要とする時間が大きくなる。このシステム排他的アクセスは、直接オペレーティングシステムによってコントロールされ、典型的には、他のいかなるスレッドによってもプリエンプトすることができない。
従来のスリープキュースレッド除去および実行キュースレッド挿入手順の非決定的およびプリエンプト不可能な性質により、いくつかの著しい問題が生じる。1つの問題は、例えば、オペレーティングシステムは、典型的には、他のスレッドを所定の時間パラメータ内でスケジュールするように保証することができないことであり、これは、このような非決定的スレッド管理技術のためである。これは、プリエンプトされたスレッド(実行されたが、スリープキュースレッド除去中にブロックされたスレッド)は、未知の時間の間、再度実行しないことを意味する。スリープキューから任意の瞬間に除去される必要のあるスレッドの1つまたはすべての各ウェイクアップ時間は、それらが除去され、実行キューに挿入される前に、すでに長い時間が経過している可能性がある。同様に、実行キューに挿入されるスレッドが実行される時間まで、スレッドの目的またはスレッドが応答しているイベントがすでに過去に過ぎている可能性がある。
したがって、従来のスリープキュースレッド除去および実行キュースレッド挿入手順では、典型的には、オペレーティングシステムが、決定性の/所定の時間パラメータ内で実行するために他のスレッドをスケジュールすることができない。
記載した主題の様々な実施は、多次元スリープキューの管理を可能にし、同じウェイクアップ時間を有するスレッドのグループは、グループ内のスレッドの数と無関係に決定性の時間(deterministic amount of time)で、多次元スリープキューから除去される。
さらに、新しいスレッドは、他のプロセスがスレッド挿入プロセス中に実行することを可能にする方法により、多次元スリープキューに挿入される。したがって、スレッドをスリープキューに挿入するか、スレッドをスリープキューから除去するかに関わらず、記載した主題により、オペレーティングシステムは、決定性の/所定の時間パラメータ内で実行するために他のスレッドをスケジュールすることができる。
以下の説明では、上述の特許請求の範囲に引用された要素を組み込むスリープキューを管理するための主題の様々な実施例を示す。これらの実施例について、法定要件を満たすために具体的に記載する。しかし、記載自体は、本発明の範囲を限定することを意図するものではない。むしろ、発明者は、特許請求の範囲に記載した主題を他の方法において実施し、本明細書に記載したものと異なる要素または類似の要素の組み合わせを、他の現在または将来の技術と共に含めることができることを企図している。
(例示的多次元スリープキュー)
図3は、例示的2次元(2−D)スリープキュー300を示すブロック図である。スリープキュー300が使用されて、もはや指定された時間に実行中ではないか、または「スリープにされる」スレッドが追跡される。スレッドが割り込まれ、スリープにされるとき、このスレッドへの参照がスリープキューに挿入される。各スレッドは、パラメータを有し、パラメータを使用して、これがいつスリープキューから取り出され、したがって「再開」されるかが決定される。この実施例では、これらパラメータは、ウェイクアップ時間およびスレッド優先度を含む。
例えば、スリープキュー300内で、各スレッドがノードまたはデータフィールド304として表される。したがって、スリープキューは、複数のこのようなノードまたはデータフィールドを含む。各ノードは、各々実行のスレッドをコンピュータプログラムアプリケーションにおいて表す。各ノードは、各スレッドウェイクアップ時間および各スレッド優先度(「PRI」)を含む。例えば、ノード304−1は、5ミリ秒(ms)のスレッドWTおよび10のスレッドPRIを含む。(この実施例では、0のスレッドPRIが1のスレッドPRIより高く、これは2のスレッドPRIより高い、以下同じ。)
スレッドのグループをスリープキュー300から決定性の時間内で除去するために、ノード304は、2次元でソートされる。すなわち最初に、それらのウェイクアップ時間に対して、次に、それらのスレッド優先度に対してソートされる。図3は、このようなソートの結果を示し、ノードが左から右へウェイクアップ時間値が増す順序で、上から下へPRI値が増す順序でソートされる。これにより、スリープキューに含まれたノードによって所有された一意のウェイクアップ時間値の数に等しいいくつかの列を有する、2次元アレイが生じる。各列は、特定のウェイクアップ時間値を有するすべてのノードを含む。列は、ウェイクアップ値が増す順序でソートされる。各列内で、ノードがそれらのPRI値の順序でソートされる。
例えば、第1の次元の行またはデータフィールド302は、ノード304−1ないし304−5を含み、これらは、一意の各ウェイクアップ時間値の最低優先度のノードを有し、ウェイクアップ時間値が増す順序でソートされる。ノード304−1は5のスレッドウェイクアップ時間を有し、ノード304−2は7のスレッドウェイクアップ時間を有し、ノード304−3は20のスレッドウェイクアップ時間を有する、以下同じ。各ノードが第1の次元において順序付けされ、スリープキュー管理手順によって、この手順が「ウェイクアップ」時間に達していないスレッドを除去する前に、「ウェイクアップされる」準備ができているスレッドが除去される。いかなる数のノードも、第1の次元データフィールドに存在することができる。第1の次元302における各ノード304は、第1の次元における他のノードと比較して、異なるスレッドウェイクアップ時間を有する。第1の次元のノードは、互いにスレッド優先度に基づいて順序付け、またはソートされない。
また、ソートの結果、複数の第2の次元の列またはデータフィールド308が生じ、ノード304は、互いにそれらの各スレッドPRIに基づいて順序付けされる。例えば、ノードの第2のサブセットが、第2の次元のデータフィールド308によって表され、これは、この例では、ノード304−2ないし304−8を含む。いかなる数のノードも第2の次元のデータフィールドに存在することができる。さらに、いかなる数の第2の次元のデータフィールドも存在することができる。これを示すため、第2の次元のデータフィールド308−2が存在し、これがノード304−4ないし304−10を含むことを考察されたい。
各ノード304は、第1の次元302におけるノードのみを表すのではなく、第2の次元308における各ノードも表す。すなわち、各第2の次元のデータフィールドは、単一の第1の次元のノードを含む。例えば、第2の次元308−1がノード304−2を含み、これは第1の次元および第2の次元におけるものである。さらに他の例では、第2の次元308−2がノード304−4を含み、これは第1の次元および第2の次元に対してソートされる。
方向矢印310によって例示したように、第2の次元308における各ノード304は、第2の次元において互いにスレッドPRIに基づいて、特定のスレッドウェイクアップ時間内でソートされる。例えば、ノード304−2は2のスレッドPRIを有し、これはノード304−6の3のスレッド優先度より高い、以下同じ。第1の次元302におけるノード304と対照的に、各ノードは、異なるスレッドウェイクアップ時間を有し、各第2の次元のノードは、同じ各スレッドウェイクアップ時間を有する。例えば、各ノード304−2ないし304−8は、同じ7msのスレッドウェイクアップ時間を有する。スリープキュー300の各ノード304は、第1および第2の次元に対してソートされるので、類似のウェイクアップ時間を有する他のノードの各優先度と比較して、第1の次元302において最高/より高い優先度を有する各ノードは、スリープキューの第1および第2の次元308に対して「1次的位置」にあると見なされる。例えば、図3を参照すると、ノード304−1ないし304−5を、スリープキューの第1および第2の次元に対して「1次的」な位置にあると見なすことができる。
さらに、類似のウェイクアップ時間を有する1または複数の他のノードと比較して、より低い優先度を有するノードは、スリープキューの第1および第2の次元に対して2次的位置にあると見なされる。例えば、ノード304−6は3の優先度を有し、これはこの例では、ノード304−2の2の優先度より低い。(各ノードが類似の7msのウェイクアップ時間を有することに留意されたい)。したがって、ノード304−6は、スリープキューの第1および第2の次元に対して2次的位置にあると見なされる。
ノードの間のソートされた関係を示すため、ノードがリンクリストにおいて維持されると有利である。具体的には、ノード304は、他のノード304への1または複数の参照を含むことができる。例えば、第1のスレッド304−1は、次のスレッド304−2へのポインタ参照などの、参照(図示せず)を含み、これは後続のスレッド304−3への参照を含む。さらに他の例では、ノード304−2は、少なくとも2つのこのようなノード参照、すなわちノード304−6への第1の参照、および304−3への第2の参照を含む。
このようなノード304参照を管理するための多数の方法がある。例えば、ノードが現在異なるノードを参照しない場合には、ノードにおけるポインタ参照をヌル値に等しく設定することができる。スリープキュー管理手順中に、多次元スリープキュー構成が多少のスレッド/ノードを含むように変化した場合、ノードの対応するポインタ参照を、このような変化を正確に反映するように設定することができる。
スリープキュー300の多次元配列により、再開されるべき次のスレッド、またはスリープキューから除去されるべきスレッドのグループを決定することが容易になる。この例では、除去されるべき次のスレッドは、もっとも早いウェイクアップ時間および最高のスレッド優先度を有するスレッドであり、左上のノード304−1である。さらに、この配列には、スレッドのグループをスリープキューから決定性の時間内で除去することに関係する他のいくつかの利点がある。例えば、スリープキュー300がリンクリストとして実施されるとき、単一ノード(例えば、ノード304)のデタッチオペレーション(detach operation)が使用されて、第1の次元302および第2の次元308における1または複数のノードが、システムタイマチックにおいて除去される。
これを示すため、多次元スリープキューからのノード304−2のデタッチにより、第2の次元のデータフィールド308−1におけるノードのグループ(すなわち、ノード304−2、およびノード304−6ないし304−8)を除去する結果となることを考慮されたい。したがって、第2の次元のデータフィールドにおける各ノードは、第2の次元のデータフィールドにおけるノードの数に関わらず、スリープキューから同時に除去される。
したがって、特定のウェイクアップ時間を有するいずれかの数のノードを除去するために要する時間は、単一のノードをスリープキューからデタッチするための時間に基づく。したがって、多次元スリープキューは、ノードのグループをスリープキューから、制限のある、または決定性の時間において除去することを可能にする。以下に記載するように、それが単一のノードを実行キューに挿入するために要する時間において、このノードのグループを実行キューに関連付けることができる。したがって、スレッド管理中にスリープキュー300を使用することにより、オペレーティングシステムが実行する他のスレッドを、決定性の/所定の時間パラメータ内でスケジュールすることができる。
(多次元スリープキューを管理するための例示的手順)
スレッドを図2の1次元のスリープキューに挿入するための従来の技術では、典型的には、他のプロセス/スレッドを、スリープキュースレッド挿入プロセス中に実行することができる。これにより、オペレーティングシステムが、所定の時間パラメータ内で、スリープキュースレッド挿入プロセス中に、実行する他のスレッドをスケジュールすることができる。(これは、スレッドをスリープキューに挿入するために要する時間全体が、非決定性であるか、または制限されていない(決定不可能)場合にもそうである)。しかし、このような従来の1次元スリープキュースレッド挿入技術は、図3の本発明の多次元スリープキュー300にスレッドを挿入するように設計されていない。
図4は、スレッドを図3の多次元スリープキュー300に挿入するための例示的手順400を示す流れ図である。この手順は、スレッドを多次元スリープキューに挿入し、同じスレッドウェイクアップ時間を有する多数のスレッドを、スリープキューから決定性の時間内で除去できるようにし、また、ウェイク時間および優先度によりソートされた、多次元スリープキューのセマンティックスが保持されるようにする。
ブロック410で、この手順は、多次元スリープキューに所定のスレッド指定時間について挿入されるべき新しい実行のスレッドを受信する。(図3のスリープキュー300を参照)。ある時点では、スレッドをスリープキューに格納することができない。したがって、ブロック412で、この手順は、新しいスレッドがスリープキューにおいて第1のスレッドとなるかどうかを決定する。そうでなかった場合、この手順はブロック416に進み、以下でより詳細に説明する。そうであった場合、414で、この手順は、新しいスレッドをスリープキューに第1のスレッドまたはスリープキューの「先頭ノード」として挿入する。
ブロック416で、手順400がすでに、新しいスレッドがスリープキューにおいて第1のスレッドではないと決定した後(ブロック412)、この手順は、新しいスレッドのためのスレッド挿入ポイントを多次元スリープキューにおいて確立する。スレッド挿入ポイントは、すでにスリープキューにあるスレッドの各ウェイクアップ時間および特性と比較して、新しいスレッドの特定のウェイクアップ時間および優先度に基づいている。(適切なスレッド挿入ポイントを確立するための例示的態様を、以下でより詳細に図5ないし図9に関して記載する)。ブロック418で、この手順は、新しいスレッドをスリープキューへ、確立された挿入ポイントで導入する。
図5は、挿入ポイントを多次元スリープキューにおいて確立するための、図4の手順の例示的ブロック416を例示する流れ図である。ブロック510で、この手順は、新しいスレッドの指定されたウェイクアップ時間が、多次元スリープキューの第1の次元における他の各スレッドの各ウェイクアップ時間と比較して異なるかどうかを決定する。ブロック512で、新しいスレッドのウェイクアップ時間が第1の次元において一意であることが決定された後(ブロック510)、この手順は、新しいスレッドのための挿入ポイントを設定して、それを第1の次元に(図3のデータフィールド302を参照)、その一意のウェイクアップ時間に基づいてソートする。
ブロック514で、すでに、第1の次元における異なるスレッドが新しいスレッドウェイクアップ時間と同じウェイクアップ時間を有すると決定した後(ブロック510)、手順400は、新しいスレッドの優先度が、同じウェイクアップ時間を有する異なるスレッドに対応するスレッド優先度と同じかまたはそれより高いかどうかを決定する。
ブロック516で、新しいスレッドが、異なるスレッドと比較して同じまたはそれより高い優先度を有することが決定された後(ブロック514)、この手順は、挿入ポイントを、類似のウェイクアップ時間を有するスレッドの第2の次元の時間内で確立する。スレッド優先度が同じであった場合、新しいスレッド挿入ポイントは、異なるスレッドの直前または直後である。この実施例では、新しいスレッドの優先度が異なるスレッドの優先度より高いかまたは同じである場合、挿入ポイントは、異なるスレッドの直前である。
ブロック518で、すでに、第1の次元における異なるスレッドが、新しいスレッドウェイクアップ時間と同じウェイクアップ時間を有すると決定した後(ブロック510)、すでに新しいスレッドが、異なるスレッドと同じまたはそれより高い優先度を有していないと決定した後(ブロック514)、手順400は、新しいスレッドのより低い優先度に基づいて、同じウェイクアップ時間を有するノードの第2の次元内で挿入ポイントを確立する。
図6は、新しいスレッドを図3の多次元スリープキュー300に挿入するための、例示的な最適化された手順を示す流れ図である。より詳細には、この実施例は多次元アトミックウォーク(atomic walk)を使用して、新しいスレッドのための適切な挿入ポイントを多次元スリープキューにおいて位置付ける。多次元アトミックウォークは、挿入ポイントの探索を第1のスレッド(ある場合)で開始するか、またはスリープキューにおいて最後に検査されたノードで開始する。
最後に検査されたノード302の状態が変化していた場合、探索は、スリープキューの最初から開始する。このようなノード状態の変化は、最後に検査されたノードが最後に検査されてからスリープキューより除去されたかどうか、または、最後に検査されたノードがスリープキューの第1および第2の次元に関連して1次的位置から2次的位置へ移動されたかどうかの決定を含む。(スリープキューの第1および第2の次元に関連する1次的および2次的位置は、図3を参照して詳細に論じた。)最後に検査されたスレッドの状態が変化していない限り、最後に検査されたスレッドと共にスリープキューにおけるスレッドの検査を開始することが有効である。
スレッド挿入ポイントの探索は、スレッド毎または「ノード毎」に実行される。ノード毎とは、オペレーティングシステムが、プロセッサへのシステム排他的アクセスを、単一のノードを検査して、検査されたノードが新しいスレッドの適切な挿入ポイントを多次元スリープキューにおいて識別するかどうかを決定するために必要とされる時間についてのみ、維持するという意味である。単一のノードが検査された後、オペレーティングシステムは、プロセッサへのシステム排他的アクセスを解放する。さらに他のノードを新しいスレッドのための挿入ポイントを識別するために検査する必要がある場合、オペレーティングシステムは、再度、プロセッサへのシステム排他的アクセスをつかみ、次のスレッド/ノード(ある場合)を検査する。この方法において、単一のノード検査の間に、オペレーティングシステムにより、プロセッサが、プリエンプトされたスレッドを実行して、オペレーティングシステムが、スリープキュースケジューリングメカニズムを実行できるようにする。最適化された多次元アトミックウォークスレッド挿入手順600を以下に説明する。
ブロック610で、手順600は、多次元スリープキューに挿入されるべき新しいスレッドが第1のスレッドであるかどうかを決定する。そうであった場合、ブロック612で、この手順は、第1のスレッドをスリープキューに挿入する。
新しいスレッドが第1のスレッドではないと決定された場合(ブロック610)、ブロック618で、この手順は、最後に検査されたノード/スレッドを、挿入された第1のノードを参照するように設定する(ブロック612)。ブロック620で、プロセッサへのシステム排他的アクセスをつかむことにより、この手順は、すべての他のスレッドを実行からプリエンプトする。
ブロック622で、手順600は、最後のノードの状態が変化したかどうかを決定する。上述のように、最後のノードの状態が変化するのは、それがすでにスリープキューから除去されている(例えば、すでに実行するために実行キューに挿入されている)場合、または最後のノードが、スリープキューの第1および第2の次元に対して1次的位置から2次的位置へ移動された場合である。
最後のノードの状態が変化していなかった場合(ブロック622)、手順600は、図7に示すブロック710へ進行する。これは、次に詳細に述べる。しかし、状態が変化していた場合、ブロック624で、オペレーティングシステムは、プロセッサへのシステム排他的アクセスを解放する(ブロック620を参照)。この手順はブ、ロック614へ進行し、この手順がスレッドがスリープキューからウェイクアップされるべき時間であるかどうかを決定する。そうであった場合、この手順が終了する。そうでない場合、この手順は、ブロック618に関して上述したように進行する。
図7は、新しいスレッドを多次元スリープキューに挿入するための例示的手順600のさらなる態様を示す流れ図である。ブロック710で、この手順は、最後に検査されたノード/スレッドがスリープキューにおける挿入ポイントを指示するかどうかを決定する。(最後のノードが挿入ポイントを識別するかどうかを決定するためのブロック710の例示的方法を、図8を参照して以下に詳細に述べる。)そうであった場合、ブロック712で、この手順は、新しいノード/スレッドを多次元スリープキューへ、指示された挿入ポイントで挿入する。ブロック714で、この手順は、プロセッサへのシステム排他的アクセスを解放する(図6のブロック620を参照)。
ブロック716で、最後に検査されたスレッド/ノードは、新しいスレッドのための挿入ポイントをスリープキューにおいて指示しないと決定された後(ブロック710)、手順600は、最後に検査されたノード/スレッドを、スリープキューにおいて次のノードを指示するように設定する。ブロック718で、この手順は、プロセッサへのシステム排他的アクセスを解放する(図6のブロック620を参照)。ブロック720で、この手順は、スレッドがスリープキューからウェイクアップされる必要があるかどうかを決定する。そうであった場合、この手順が終了する。そうでない場合、この手順は、詳細に上述した図6のブロック620へ進行する。
図8は、新しいスレッドを多次元スリープキューに挿入するための多次元アトミックウォーク手順のさらなる態様を示す流れ図である。詳細には、最後に検査されたノードが、スリープキューにおいて挿入ポイントを識別することができる方法を示す。(図7のブロック710を参照。)ブロック810で、この手順は、新しいノード/スレッドが最後に検査されたノード/スレッドと比較してより早いウェイクアップ時間を有するかどうかを決定する。そうであった場合、挿入ポイントは、新しいスレッドのより早いWTに基づいて確立され、新しいスレッドは、スリープキューから最後に検査されたスレッドの前に除去される。
ブロック814で、手順600は、新しいノード/スレッドが最後に検査されたノード/スレッドに比較して同じウェイクアップ時間を有するかどうかを決定する。そうでなかった場合、この手順は、図9のブロック910へ進行し、これは、以下に詳細に説明する。しかし、新しいノード/スレッドが、最後に検査されたノード/スレッドと比較して同じウェイクアップ時間を有していた場合、ブロック816で、この手順は、新しいノード/スレッドが最後に検査されたノード/スレッドの優先度と比較して同じかまたはそれより高い優先度を有するかどうかを決定する。そうでなかった場合、この手順は、図9のブロック910へ進行し、これは以下に詳細に記載する。
新しいノード/スレッドが、最後に検査されたノード/スレッドと比較して同じかまたはそれより高い優先度を有した場合(ブロック816)、ブロック818で、この手順は、最後に検査されたノード/スレッドの優先度と比較して同じかまたはそれより高い、新しいスレッドの優先度に基づいて、かつ、最後に検査されたノード/スレッドと類似のウェイクアップ時間に基づいて、挿入ポイントを確立する。(ブロック818を実行するための例示的方法を、図5のブロック516を参照して詳細に述べる。)
図9は、新しいスレッドを多次元スリープキューに挿入するための多次元アトミックウォーク手順のさらなる態様を示す流れ図である。詳細には、次元における最後のノードである最後に検査されたノードが、新しいスレッドのための挿入ポイントをスリープキューにおいて識別することができる方法を示す(図7のブロック710、および図8のブロック816を参照)。ブロック910で、この手順は、最後に検査されたノードが、関連する特定の次元方向における次のノード(またはそれがヌルであること)を指示するかどうかを決定して、多次元スリープキューの1次または2次の次元における他のいずれかの次のノードがあるかどうかを指示する。
最後に検査されたノードが新しいノードと同じウェイクアップ時間を有した(これは、すでに図8のブロック814で決定された)場合、新しいノードは、最後のノードよりも低い優先度を有することも決定されている(図8のブロック816を参照)。したがって、この手順は、ブロック910で、最後に検査されたノードが、第2の次元においてより低い優先度を有するノードに関連する次のノード(例えば、第1および第2の次元に関連して2次的位置を有する次のノード)を指示するかどうかを決定する。
最後に検査されたノードが新しいノードと同じウェイクアップ時間を有していなかった(これは、すでに図8のブロック814で決定された)場合、新しいスレッド/ノードは、最後のノードと比較してより遅いウェイクアップ時間を有することも決定されている(図8のブロック810を参照)。したがって、この手順は、ブロック910で、最後に検査されたノードが、第1の次元における最後のノードより遅いウェイクアップ時間を有するノードに関連する次のノード(例えば、第1および第2の次元に関連して1次的位置を有する次のノード)を指示するかどうかを決定する。
ブロック912で、最後のノードが、関連する次元方向における最後のノードであると決定された後、新しいスレッドのための挿入ポイントを確立し、新しいノードがその関連する次元方向における最後のノードであり、かつ、それが多次元スリープキューから、最後に検査されたノードの後に除去される。
ブロック914で、最後のノードが関連する次元方向における最後のノードではなく、この手順は、多次元スリープキューにおける新しいスレッドの挿入ポイントがまだ決定できないことを指示する。この手順は、上述した図7のブロック710へ進行する。
(スリープキューからの時間決定性のグループスレッド除去)
図10は、スレッドのグループをスリープキューから、制限のあるまたは決定性の時間において除去するための、例示的手順1000を示す流れ図である。ブロック1010で、この手順は、1または複数の各スレッドの指定されたウェイクアップ時間が終了したかどうかを決定する。(終了したウェイクアップ時間を有するスレッドを、後で実行のために実行キューに挿入するために、スリープキューから除去しなければならない。)ブロック1012で、1または複数のスレッドが、スリープキューから、実行キューに挿入するために除去される必要があると決定した後(ブロック1010)、この手順は、1または複数のスレッドを、スリープキューから、プロセッサが単一のノードデタッチオペレーションを実行するために要する時間において除去する。したがって、多次元スリープキューからのスレッドのグループ除去は、本質的に時間決定性である。
したがって、図5ないし図10に示した方法は、多数のスレッドを、スリープキューから決定性の時間内で除去することを提供する。さらに、図11および図12を参照して以下に詳細に説明するように、デタッチされたノードのグループを実行キューに関連付けるために要する時間もまた時間決定性であり、これは、単一のノードを実行キューに関連付けるために要する時間にしかならないからである。これは、オペレーティングシステムがプログラム応答の提供において受けるいかなる非決定性遅延が、リアルタイムオペレーティングシステムのリアルタイム態様をおびやかすという理由で重要である。
(例示的実行キュー)
図11は、ノードのグループを実行キューに決定性の時間内で関連付けるための例示的実行キュー1100の態様を示すブロック図である。実行キューは、第1のデータフィールド1102を含み、これは第1の複数のスレッド1104を含む。各スレッド1104は、各々のスレッド優先度を含む。第1のデータフィールド内の各スレッド1104は、第1のデータフィールドにおける互いのスレッドに対して、セマンティックに基づいてソートされる。このセマンティックは、高い優先度を有するスレッドが、より低い優先度を有するスレッドが実行キューから除去される前に、実行キューから除去されることである。例えば、2の優先度を有するスレッド1104−2は、5の優先度を有するスレッド1104−3が実行のために除去される前に、実行のために除去される。
実行キュー1100は、フィールド1108−1およびフィールド1108−2など、1または複数の第2のデータフィールド1108を含む。第2のデータフィールドは、第2の複数のスレッド1104を含む。第2のデータフィールド内の各スレッド1104は、第2のデータフィールドにおける互いのスレッドに対してソートされ、高い優先度を有するスレッドが第2のデータフィールドから、より低い優先度を有するスレッドが除去される前に、除去されるようになる。
この実施例では、オペレーティングシステムは、2次データフィールドを図3のスリープキュー300から得る。2次データフィールド308をスリープキューから決定性の時間内で除去するためのこのようなスリープキューおよび手順は、図3ないし図10のデータフィールド308を参照して詳細に述べた。
第2のデータフィールド1108は、図3のデータフィールド308に対応し、ルートスレッド1104−2またはルートスレッド1104−4など、ルートスレッドを含む。ルートスレッドは特定の優先度を含み、他の各スレッドは、ルートスレッドの優先度に比較してより低い優先度または等しい優先度である優先度を含む。例えば、ルートスレッド1104−2は2の優先度を有し、第2のデータフィールド1108−1における他の優先度は、2より低い優先度を有する。(この例では、ノード1104−2など、0の優先度が最高の優先度であり、ノード1104−5など、15の優先度が最低の優先度である。)
第2のデータフィールド1108全体が、第1のデータフィールド1102に、リンクリスト挿入ノードオペレーションなど、単一のオペレーションに応答して関連付けられ、そのとき、スレッド1104−2などのルートノードは、実行キュー1100の第1のデータフィールド1102に挿入される。リンクリスト挿入ノードオペレーションは、コンピュータプログラミングの分野において周知である。第2のデータフィールドが第1のデータフィールドに、単一のオペレーションに応答して関連付けられるので、任意の数のスレッドを実行キューに関連付けるために要する時間は、実行キューに関連付けられるスレッドの数に無関係である。
さらに、データフィールド1108内の各スレッドが実行キューに、単一のオペレーションに応答して関連付けられるので、任意の数のスレッドを実行キューに関連付けるために要する時間は、オペレーションの実行に先立って決定可能である。単一のオペレーションは、1または複数の命令を含むことができ、それぞれがあらかじめ決定可能である。プロセッサは、典型的には、いずれか1つの特定の命令を実行するために所定の時間を必要とするので、スレッドのグループを実行キューに関連付けるためのオペレーションを実行するための時間は、決定性である。時間が決定性であるので、これはしばしば「制限がある」とも称され、あらかじめ境界制限を時間に指定することができるからである。
第1のデータフィールドのキュー1102におけるスレッド1104のみが、実行するために除去される。より高い優先度のスレッドは、常に第1のデータキューから、より低い優先度のスレッドが第1のデータキューから実行のために除去される前に、実行のために除去される。また、等しい優先度のスレッドは、先入れ先出しのラウンドロビン方式で動作する。スレッド1104−2および/またはスレッド1104−4などのルートスレッドは、第1のデータキューおよび第2のデータキュー1108の一部であることに留意されたい。
この実施例では、ルートノードが実行のために除去された後にのみ、除去されたルートノードに結合された次のノードが、第1のデータキューに、後続の除去および実行のために挿入される。例えば、ルートノード1104−2が実行のために除去された後にのみ、次のノード1104−6が、第1のデータキューに、後続の除去および実行のために挿入される。次のノードが挿入され、それが第1のデータキューの優先度ソートを維持する。この例では、次のノードが4の優先度を有するので、第1のキューに挿入され、ノード1104−3が実行のために除去される前に、実行のために除去されるようになる。しかし、次のノードがノード1104−3より低い優先度(20の優先度など)を有した場合、次のノードは、第1のキューに挿入され、ノード1104−5が実行のために除去されるまで、実行のために除去されない。より詳細には、次のノードは、第1のキューに挿入され、第1のデータキューから、ノード1104−3ないし1104−5が実行のために除去されるまで、除去されない。
この方法では、スレッド1104−2および/またはスレッド1104−4などのルートノードが第1のデータキュー1102から除去された後、ノード1104−6および/またはノード1104−9などの次のノード(ある場合)が、実際には、各第2のデータキュー1108のルートノードになる。これは、次のノードが実際上キューの先頭ノードになるからである。
(実行キューを管理するための例示的手順)
図12は、スレッドを図11の実行キュー1100から除去するための例示的手順1200を示す流れ図である。ブロック1210で、この手順は、スレッドを実行キューから実行するために除去する。上述のように、このスレッドを、図11のルートノード1104−2など、データフィールド1108−1における1または複数の他の2次ノードに付加されるルートノードにすることができ、または、ルートノード1104−1などのいかなる2次ノードにも付加されないノードにすることもできる。したがって、ブロック1212で、この手順は、除去されたノードが2次ノードに付加される(例えば、ルートノード1104−2が2次ノード1104−6に付加される)かどうかを決定する。そうでなかった場合、この手順が終了する。
そうでない場合、除去されたノードが2次ノードに付加される場合(ブロック1212)、ブロック1214で、この手順は、2次ノードを実行キューに、優先度を実行キューのセマンティクスに基づいて維持する方法により挿入する。例えば、除去されたノード(ブロック1210)が図11のノード1104−4であった場合、2次ノードは、ノード1104−9(7の優先度を有する)である。次に、この手順のブロック1214は、2次ノード1104−9を実行キューに、15の優先度を有するノード1104−5の前に挿入し、それにより2次ノードをルートノードにして、優先度を実行キューのセマンティックスに基づいて維持する。この手順のブロック1214が、スリープキューまたは待機キューなど他のいかなるキューへのいかなるアクセスにも関係なく、追加のノードを実行キューに挿入することは重要である。
図13は、複数のスレッドを実行キューに、決定性の時間内で挿入するための例示的手順1300を示す流れ図である。ブロック1310で、この手順は、複数のスレッドを図11の実行キューに、決定性の時間内で、図11を参照して記載したように関連付ける。ブロック1312で、この手順は、関連付けられた複数のスレッド内の各スレッド(ブロック1310)を実行キューに、追加のスリープキューアクセス(図3のスリープキュー300を参照)なしに挿入する。
(例示的コンピューティング環境)
図14は、実行キューを管理するための例示的システムおよび手順を実施することができる、適切なコンピューティング環境1400の一実施例を例示する。例示的コンピューティング環境1400は、適切なコンピューティング環境の一実施例でしかなく、実行キューを管理するための例示的システムおよび手順の使用または機能性の範囲に関していかなる限定をも示唆するように意図されるものではない。コンピューティング環境1400は、例示的コンピューティング環境1400において例示したコンポーネントのいずれか1つまたは組み合わせに関するいずれかの依存性または要件を有するものとして解釈されるべきではない。
実行キューを管理するための例示的システムおよび手順は、多数の他の汎用または専用コンピューティングシステム環境または構成により動作可能である。実行キューを管理するための例示的システムおよび手順と共に使用するために適切である可能性のある、周知のコンピューティングシステム、環境、および/または構成の実施例には、それだけに限定されるものではないが、パーソナルコンピュータ、サーバコンピュータ、シンクライアント、シッククライアント、ハンドヘルドまたはラップトップデバイス、マルチプロセッサシステム、マイクロプロセッサベースのシステム、セットトップボックス、プログラマブル家庭用電化製品、無線電話、特定用途向け集積回路(ASIC)、ネットワークPC、ミニコンピュータ、メインフレームコンピュータ、上述のシステムまたはデバイスのいずれかを含む分散コンピューティング環境などが含まれる。
例示的実行キュー管理を一般に、プログラムモジュールなど、コンピュータによって実行されるコンピュータ実行可能命令に関連して記載することができる。一般に、プログラムモジュールには、ルーチン、プログラム、オブジェクト、コンポーネント、データ構造などが含まれ、これらが特定のタスクを実行し、または特定の抽象データ型を実施する。例示的実行キュー管理はまた、分散コンピューティング環境において実施することもでき、タスクがリモートの処理デバイスによって実行され、これらが通信ネットワークを介してリンクされる。分散コンピューティング環境では、プログラムモジュールを、メモリ記憶デバイスを含むローカルおよびリモートのコンピュータ記憶媒体に位置付けることができる。
図14のように、コンピューティング環境1400は、汎用コンピューティングデバイスをコンピュータ1410の形式において含む。コンピュータ1410のコンポーネントは、それだけに限定されるものではないが、1または複数のプロセッサまたは処理装置1412、システムメモリ1414、および、システムメモリ1414を含む様々なシステムコンポーネントをプロセッサ1412に結合するバス1416を含むことができる。
バス1416は、いくつかのタイプのバス構造のいずれかの1または複数を表し、これにはメモリバスまたはメモリコントローラ、周辺バス、高速グラフィックポート、および様々なバスアーキテクチャのいずれかを使用するプロセッサまたはローカルバスが含まれる。例として、それだけに限定されるものではないが、このようなアーキテクチャには、Industry Standard Architecture(ISA)バス、Micro Channel Architecture(MCA)バス、Enhanced ISA(EISA)バス、Video Electronics Standards Association(VESA)ローカルバス、および、メザニンバスとしても知られるPeripheral Component Interconnects(PCI)バスが含まれる。
コンピュータ1410は、典型的には、様々なコンピュータ読み取り可能な媒体を含む。このような媒体は、コンピュータ1410によってアクセス可能な、あらゆる使用可能な媒体にすることができ、これには、揮発性および不揮発性媒体、取外し可能および取外し不可能の媒体が含まれる。
図14では、システムメモリ1414は、コンピュータ読み取り可能な媒体を含み、これはランダムアクセスメモリ(RAM)1420などの揮発性メモリ、および/または読取り専用メモリ(ROM)1418などの不揮発性メモリの形式によるものである。基本入出力システム(BIOS)1422は、起動中など、情報をコンピュータ1410内の要素の間で転送するための助けとなる基本ルーチンを含み、ROM1418に格納される。RAM1420は、典型的には、データおよび/またはプログラムモジュールを含み、これらはプロセッサ1412によって直ちにアクセス可能であり、かつ/またはほどなく動作される。
コンピュータ1410はさらに、他の取外し可能/取外し不可能、揮発性/不揮発性のコンピュータ記憶媒体を含むことができる。例としてのみ、図14は、取外し不可能、不揮発性の磁気媒体(図示せず、典型的には「ハードドライブ」と呼ばれる)から読み取りかつこれに書き込むためのハードディスクドライブ1424、取外し可能、不揮発性磁気ディスク1428(例えば、「フロッピーディスク」)から読み取りかつこれに書き込むための磁気ディスクドライブ1426、および、CD−ROM、DVD−ROMまたは他の光媒体など、取外し可能、不揮発性光ディスク1432から読み取りまたはこれに書き込むための光ディスクドライブ1430を例示する。ハードディスクドライブ1424、磁気ディスクドライブ1426、および光ディスクドライブ1430は、バス1416へ、それぞれ1または複数のインターフェース1434によって接続される。
ドライブおよびそれらの関連付けられたコンピュータ読み取り可能な媒体は、コンピュータ1410の、コンピュータ読み取り可能な命令、データ構造、プログラムモジュールおよび他のデータの不揮発性記憶装置を提供する。本明細書に記載した例示的環境は、ハードディスク、取外し可能磁気ディスク1428および取外し可能光ディスク1432を使用するが、磁気カセット、フラッシュメモリカード、デジタルビデオディスク、ランダムアクセスメモリ(RAM)、読取り専用メモリ(ROM)など、コンピュータによりアクセス可能であるデータを格納することができる他のタイプのコンピュータ読み取り可能な媒体も例示的オペレーティング環境において使用できることを、当業者には理解されたい。
いくつかのプログラムモジュールを、ハードディスク、磁気ディスク1428、光ディスク1432、ROM1418またはRAM1420に格納することができ、これには例として、それだけに限定されるものではないが、オペレーティングシステム1438、1または複数のアプリケーションプログラム1440、他のプログラムモジュール1442、およびプログラムデータ1444が含まれる。このようなオペレーティングシステム1438、1または複数のアプリケーションプログラム1440、他のプログラムモジュール1442、およびプログラムデータ1444(またはこれらのある組み合わせ)は、実行キューを管理するための実装を含むことができる。
ユーザが、コマンドおよび情報をコンピュータ1410へ、キーボード1446およびポインティングデバイス1448(「マウス」など)などの入力デバイスを介して入力することができる。他の入力デバイス(図示せず)には、マイクロフォン、ジョイスティック、ゲームパッド、衛星放送受信アンテナ、シリアルポート、スキャナなどが含まれる可能性がある。これらおよび他の入力デバイスは、処理装置1412へ、バス1416に結合されるユーザ入力インターフェース1450を介して接続されるが、これを、パラレルポート、ゲームポート、またはUniversal Serial Bus(USB)など、他のインターフェースおよびバス構造によって接続することができる。
モニタ1452または他のタイプの表示デバイスも、バス1416へ、ビデオアダプタ1454などのインターフェースを介して接続される。モニタに加えて、パーソナルコンピュータは、典型的には、スピーカおよびプリンタなど、出力周辺インターフェース1455を介して接続することができる他の周辺出力デバイス(図示せず)を含む。
コンピュータ1410は、ネットワーク環境において、リモートコンピュータ1462など、1または複数のリモートコンピュータへの論理接続を使用して動作することができる。リモートコンピュータ1462は、本明細書でコンピュータ1410に関連して記載した要素および特徴の多数またはすべてを含むことができる。
図14に示す論理接続は、ローカルエリアネットワーク(LAN)1457および汎用の広域ネットワーク(WAN)1459である。このようなネットワーキング環境は、オフィス、企業全体のコンピュータネットワーク、イントラネット、およびインターネットにおいて一般的である。
LANネットワーキング環境において使用するとき、コンピュータ1410は、LAN1457へ、ネットワークインターフェースまたはアダプタ1466を介して接続される。WANネットワーキング環境において使用するとき、コンピュータは、典型的には、モデム1458、またはWAN1459を介して通信を確立するための他の手段を含む。モデム1458を内部または外部にすることができ、システムバス1416へ、ユーザ入力インターフェース1450または他の適切なメカニズムを介して接続することができる。
図14に示すものは、インターネットを介したWANの特定の実施である。コンピュータ1410は、典型的には、モデム1458、またはインターネット1460を介して通信を確立するための他の手段を含む。モデム1458は、内部または外部にすることができ、バス1416へ、インターフェース1450を介して接続される。
ネットワーク環境では、パーソナルコンピュータ1410に関して示したプログラムモジュール、またはその一部を、リモート記憶デバイスに格納することができる。例として、それだけに限定されるものではないが、図14は、リモートアプリケーションプログラム1469を、リモートコンピュータ1462のメモリデバイス上に存在するものとして例示する。図示かつ記載したネットワーク接続は例示的であり、通信リンクをコンピュータの間で確立する他の手段を使用できることは理解されよう。
(コンピュータ実行可能命令)
実行キューを管理するための実施を一般に、プログラムモジュールなど、1または複数のコンピュータまたは他のデバイスによって実行されるコンピュータ実行可能命令に関連して記載することができる。プログラムモジュールは、典型的には、ルーチン、プログラム、オブジェクト、コンポーネント、データ構造などが含まれ、これらが特定のタスクを実行し、または特定の抽象データ型を実施する。プログラムモジュールの機能性は、典型的には、図14の様々な実施形態において示したように結合または分散させることができる。
(コンピュータ読み取り可能な媒体)
実行キューを管理するための実施を、ある形式のコンピュータ読み取り可能な媒体に格納するか、またはそれを介して伝送することができる。コンピュータ読み取り可能な媒体は、コンピュータによってアクセスすることができるいかなる使用可能な媒体にすることもできる。例として、それだけに限定されるものではないが、コンピュータ読み取り可能な媒体には、「コンピュータ記憶媒体」および「通信媒体」が含まれる可能性がある。
「コンピュータ記憶媒体」には、揮発性および不揮発性媒体、取外し可能および取外し不可能の媒体が含まれ、これはコンピュータ読み取り可能な命令、データ構造、プログラムモジュール、または他のデータなどの情報を格納するためのいずれかの方法または技術において実施される。コンピュータ読み取り可能な媒体には、それだけに限定されるものではないが、RAM、ROM、EEPROM、フラッシュメモリまたは他のメモリ技術、CD−ROM、デジタル多用途ディスク(DVD)または他の光記憶装置、磁気カセット、磁気テープ、磁気ディスク記憶装置または他の磁気記憶デバイス、または、所望の情報を格納するために使用することができ、かつコンピュータによってアクセスすることができる他のいかなる媒体も含まれる。
「通信媒体」は、典型的には、コンピュータ読み取り可能な命令、データ構造、プログラムモジュール、または、搬送波または他の移送メカニズムなど、変調データ信号における他のデータを実施する。通信媒体は、いかなる情報搬送媒体をも含む。
「変調データ信号」という用語は、1または複数のその特性セットを有するか、または信号における情報を符号化するような方法において変更された信号を意味する。例として、それだけに限定されるものではないが、通信媒体には、ワイヤードネットワークまたはダイレクトワイヤード接続などのワイヤード媒体、および、音波、RF、赤外線、および他のワイヤレス媒体などのワイヤレス媒体が含まれる。上記のいずれかの組み合わせも、コンピュータ読み取り可能な媒体の範囲内に含まれる。
(結論)
システム排他的アクセスのために決定性の時間によりスリープキューを管理するための様々な実施について、構造的特徴および/または方法の運用に特定の言葉で述べたが、上述の特許請求の範囲において定義された、システム排他的アクセスアクセスのために制限のある時間により、スリープキューを管理するための記載の主題は、必ずしも記載した特定の特徴または運用に限定されるものでないことを理解されたい。むしろ、特定の特徴および運用は、特許請求の範囲に記載したこの主題を実施するための好ましい形式として開示される。
オペレーティングシステムによって実行するスレッドをスケジュールするために使用される、従来の実行キューの態様を示すブロック図である。 オペレーティングシステムによって、実行が再開される前に、スレッドを指定された時間についてスリープさせるために使用される、従来のスレッドスリープキューの態様を示すブロック図である。 スレッドスケジューリングメカニズムによって、オペレーティングシステムが実行する他のスレッドを決定性の/所定の時間パラメータ内でスケジュールするために使用される、例示的多次元スリープキューを示すブロック図である。 スレッドを多次元スリープキューに挿入し、同じスレッドウェイクアップ時間を有する多数のスレッドをスリープキューから決定性の時間内で除去できるようにするための、例示的手順を示す流れ図である。 スレッド挿入ポイントを多次元スリープキューにおいて、オペレーティングシステムが実行する他のスレッドを決定性の時間パラメータ内でスケジュールする方法で、決定/確立するための例示的手順を示す流れ図である。 スレッドを多次元スリープキューに挿入するための例示的な最適化された手順のさらなる態様を示す流れ図であり、具体的には、最適化された手順が多次元アトミックウォーク手順を使用して、多次元スリープキューにおいてスレッドを挿入するための位置を識別することを示す図である。 多次元スリープキューにおいてスレッドを挿入するための位置を識別するための例示的多次元アトミックウォーク手順のさらなる態様を示す流れ図であり、具体的には、最後に検査されたスレッドを使用して、多次元スリープキューにおいて新しいスレッド挿入ポイントの探索を開始するための開始位置を識別することを示す図である。 新しいスレッドを多次元スリープキューに挿入するための多次元アトミックウォーク手順のさらなる態様を示す流れ図であり、具体的には、最後に検査されたノードを使用して、スリープキューにおける挿入ポイントを、最後に検査されたノードのウェイクアップ時間および優先度に基づいて識別することができる方法を示す図である。 新しいスレッドを多次元スリープキューに挿入するための例示的な最適化された手順のさらなる態様を例示する流れ図であり、具体的には、最後に検査されたノードを使用して、最後に検査されたスレッドが多次元のうち1つにおける最後のスレッドであるとき、スリープキューにおける挿入ポイントを識別する方法を示す図である。 除去される必要のあるスレッドの数に無関係である決定性の時間内で、スレッドのグループをスリープキューから除去するための、例示的手順を示す流れ図である。 複数のスレッドを、決定性の時間内で実行キューに関連付けることができる、例示的実行キューの態様を示すブロック図である。 スレッドを実行キューから除去するための例示的手順の態様を示す流れ図である。 実行キューに一度に関連付けられたスレッドの数に無関係である決定性の時間内で、複数のスレッドを実行キューに挿入するための、例示的手順の態様を示す流れ図である。 実行キューを管理するための例示的システムおよび手順を実施することができる、適切なコンピューティング環境の態様を示すブロック図である。
符号の説明
300 スリープキュー
302 第1の次元
304 ノードまたはデータフィールド
306 ウェイクアップ時間によりソートされたスレッド
308 第2の次元
310 優先度に基づいてウェイクアップ時間内でソートされたスレッド

Claims (22)

  1. プロセッサとメモリとを備えたコンピュータシステムで実行される方法であって、複数のスレッドを含み、前記メモリに格納された多次元スリープキューを管理する方法であって、
    前記複数のスレッドは、ウェイクアップ時間および優先度を有し、
    前記プロセッサが、所定の時間に対して実行スレッドを前記多次元スリープキューに挿入するために、前記実行スレッドを識別することと、
    前記識別することに応答して、(a)前記多次元スリープキューの第1の次元において前記所定の時間に等しいウェイクアップ時間を有するスレッドがないこと、および(b)前記多次元スリープキューの第2の次元において前記ウェイクアップ時間を有する異なるスレッドが1または複数あり、該1または複数の異なるスレッドの各々が前記実行スレッドの優先度より低いかまたは等しい優先度を有する場合に、前記実行スレッドを前記多次元スリープキューの第1の次元に挿入し、ウェイクアップ時間に基づいて第1の次元でソートすることと
    前記識別することに応答して、(c)前記多次元スリープキューの第1の次元において前記所定の時間に等しいウェイクアップ時間を有するスレッドがあること、または(d)前記多次元スリープキューの第2の次元において前記ウェイクアップ時間を有する異なるスレッドが1または複数あり、該1または複数の異なるスレッドの各々が前記実行スレッドの優先度より高い優先度を有する場合に、前記実行スレッドを前記多次元スリープキューの第2の次元に挿入し、優先度に基づいて第2の次元でソートすることと
    を備えたことを特徴とする方法。
  2. 前記多次元スリープキューは、リアルタイム多次元スリープキューであることを特徴とする請求項1に記載の方法。
  3. 前記多次元スリープキューは、2次元スリープキューであることを特徴とする請求項1に記載の方法。
  4. 前記実行スレッドを前記多次元スリープキューに挿入することは、スレッドスケジューリングメカニズムが、単一のスレッドを前記多次元スリープキューから除去する時間に等しく、スレッドの数とは無関係な決定性の時間内で実行するために他のスレッドをスケジュールすることを可能にする方法で行われることを特徴とする請求項1に記載の方法。
  5. 前記多次元スリープキューは、スレッドのグループを備え、
    前記方法は、前記スレッドのグループを前記多次元スリープキューから、単一のスレッドを前記多次元スリープキューから除去する時間に等しく、スレッドの数とは無関係な決定性の時間内で除去することをさらに備え、
    前記グループ内の各スレッドは、同じウェイクアップ時間を有することを特徴とする請求項1に記載の方法。
  6. 前記第2の次元は、複数のスレッドを備え、各々のスレッドは、同じウェイクアップ時間を有することを特徴とする請求項1に記載の方法。
  7. 前記実行スレッドをソートすることは、
    前記第1の次元において、前記所定の時間と同じウェイクアップ時間を有する異なるスレッドを識別することと、
    前記異なるスレッドを識別することに応答して、
    前記実行スレッドに対応する第1の優先度が、前記異なるスレッドに対応する第2の優先度より高いと決定することと、
    前記第1の次元において前記異なるスレッドを、前記第1および第2の次元双方のメンバである前記実行スレッドに置き換え、前記置き換えられたスレッドは、前記第1および第2の次元に対して2次的な位置を有することと
    をさらに備えたことを特徴とする請求項に記載の方法。
  8. 前記実行スレッドをソートすることは、
    前記第1の次元において、前記所定の時間と同じウェイクアップ時間を有する異なるスレッドを識別することと、
    前記異なるスレッドを識別することに応答して、
    前記実行スレッドに対応する第1の優先度が、前記異なるスレッドに対応する第2の優先度より低いと決定することと、
    前記実行スレッドを前記スレッドの第2の次元に挿入して、前記実行スレッドが前記第1および第2の次元に対して2次的な位置を占有し、前記第1の優先度より低い優先度の第2の次元における異なるスレッドは、前記2次的な位置に続いて位置するようにすることと
    をさらに備えたことを特徴とする請求項に記載の方法。
  9. プロセッサとメモリとを備えたコンピュータシステムで実行され、複数のスレッドを含み、前記メモリに格納された多次元スリープキューを管理するためのコンピュータ実行可能命令を含むコンピュータ読み取り可能記憶媒体であって、
    前記複数のスレッドは、ウェイクアップ時間および優先度を有し、
    所定の時間に対して実行スレッドを前記多次元スリープキューに挿入するために、前記実行スレッドを識別することと、
    前記識別することに応答して、(a)前記多次元スリープキューの第1の次元において前記所定の時間に等しいウェイクアップ時間を有するスレッドがないこと、および(b)前記多次元スリープキューの第2の次元において前記ウェイクアップ時間を有する異なるスレッドが1または複数あり、該1または複数の異なるスレッドの各々が前記実行スレッドの優先度より低いかまたは等しい優先度を有する場合に、前記実行スレッドを前記多次元スリープキューの第1の次元に挿入し、ウェイクアップ時間に基づいて第1の次元でソートすることと
    前記識別することに応答して、(c)前記多次元スリープキューの第1の次元において前記所定の時間に等しいウェイクアップ時間を有するスレッドがあること、または(d)前記多次元スリープキューの第2の次元において前記ウェイクアップ時間を有する異なるスレッドが1または複数あり、該1または複数の異なるスレッドの各々が前記実行スレッドの優先度より高い優先度を有する場合に、前記実行スレッドを前記多次元スリープキューの第2の次元に挿入し、優先度に基づいて第2の次元でソートすることと
    を前記プロセッサに実行させる前記コンピュータ実行可能命令を格納することを特徴とするコンピュータ読み取り可能記憶媒体。
  10. 前記多次元スリープキューは、リアルタイム多次元スリープキューであることを特徴とする請求項に記載のコンピュータ読み取り可能記憶媒体。
  11. 前記実行スレッドを前記多次元スリープキューに挿入することは、スレッドスケジューリングメカニズムが、単一のスレッドを前記多次元スリープキューから除去する時間に等しく、スレッドの数とは無関係な決定性の時間内で実行するために他のスレッドをスケジュールすることを可能にする方法で行われることを特徴とする請求項に記載のコンピュータ読み取り可能記憶媒体。
  12. 前記多次元スリープキューは、スレッドのグループを備え、
    前記コンピュータ実行可能命令は、前記スレッドのグループを前記多次元スリープキューから、単一のスレッドを前記多次元スリープキューから除去する時間に等しく、スレッドの数とは無関係な決定性の時間内で除去するための命令をさらに備え、
    前記グループ内の各スレッドは、同じウェイクアップ時間を有することを特徴とする請求項に記載のコンピュータ読み取り可能記憶媒体。
  13. 前記第2の次元は、複数のスレッドを備え、各々のスレッドは、同じウェイクアップ時間を有することを特徴とする請求項に記載のコンピュータ読み取り可能記憶媒体。
  14. 前記実行スレッドをソートすることは、
    前記第1の次元において、前記所定の時間と同じウェイクアップ時間を有する異なるスレッドを識別することと、
    前記異なるスレッドを識別することに応答して、
    前記実行スレッドに対応する第1の優先度が、前記異なるスレッドに対応する第2の優先度より高いと決定することと、
    前記第1の次元において前記異なるスレッドを、前記第1および第2の次元双方のメンバである前記実行スレッドと置き換え、前記置き換えられたスレッドは、前記第1および第2の次元に対して2次的な位置を有すること
    をさらに備えたことを特徴とする請求項に記載のコンピュータ読み取り可能記憶媒体。
  15. 前記実行スレッドをソートすることは、
    前記第1の次元において、前記所定の時間と同じウェイクアップ時間を有する異なるスレッドを識別することと、
    前記異なるスレッドを識別することに応答して、
    前記実行スレッドに対応する第1の優先度が、前記異なるスレッドに対応する第2の優先度より低いと決定することと、
    前記実行スレッドを前記スレッドの第2の次元に挿入して、前記実行スレッドが前記第1および第2の次元に対して2次的な位置を占有し、前記第1の優先度より低い優先度の第2の次元における異なるスレッドは、前記2次的な位置に続いて位置するようにすること
    をさらに備えたことを特徴とする請求項に記載のコンピュータ読み取り可能記憶媒体。
  16. 複数のスレッドを含む多次元スリープキューを管理するためのシステムであって、
    コンピュータ実行可能命令および前記多次元スリープキューを含むメモリと、
    前記メモリに動作可能に結合され、前記コンピュータ実行可能命令を実行するためのプロセッサとを備え、前記複数のスレッドは、ウェイクアップ時間および優先度を有し、前記コンピュータ実行可能命令は、
    所定の時間に対して実行スレッドを前記多次元スリープキューに挿入するために、前記実行スレッドを識別するための命令と、
    前記識別することに応答して、(a)前記多次元スリープキューの第1の次元において前記所定の時間に等しいウェイクアップ時間を有するスレッドがないこと、および(b)前記多次元スリープキューの第2の次元において前記ウェイクアップ時間を有する異なるスレッドが1または複数あり、該1または複数の異なるスレッドの各々が前記実行スレッドの優先度より低いかまたは等しい優先度を有する場合に、前記実行スレッドを前記多次元スリープキューの第1の次元に挿入し、ウェイクアップ時間に基づいて第1の次元でソートするための命令と
    前記識別することに応答して、(c)前記多次元スリープキューの第1の次元において前記所定の時間に等しいウェイクアップ時間を有するスレッドがあること、または(d)前記多次元スリープキューの第2の次元において前記ウェイクアップ時間を有する異なるスレッドが1または複数あり、該1または複数の異なるスレッドの各々が前記実行スレッドの優先度より高い優先度を有する場合に、前記実行スレッドを前記多次元スリープキューの第2の次元に挿入し、優先度に基づいて第2の次元でソートするための命令と
    を含むことを特徴とするシステム。
  17. 前記多次元スリープキューは、リアルタイム多次元スリープキューであることを特徴とする請求項16に記載のシステム。
  18. 前記実行スレッドを前記多次元スリープキューに挿入するための前記命令は、スレッドスケジューリングメカニズムが、単一のスレッドを前記多次元スリープキューから除去する時間に等しく、スレッドの数とは無関係な決定性の時間内で実行するために他のスレッドをスケジュールすることを可能にする方法で行われることを特徴とする請求項16に記載のシステム。
  19. 前記多次元スリープキューは、スレッドのグループを備え、
    前記コンピュータ実行可能命令は、前記スレッドのグループを前記多次元スリープキューから、単一のスレッドを前記多次元スリープキューから除去する時間に等しく、スレッドの数とは無関係な決定性の時間内で除去するための命令とをさらに備え、
    前記グループ内の各スレッドは、同じウェイクアップ時間を有することを特徴とする請求項16に記載のシステム。
  20. 前記第2の次元は、複数のスレッドを備え、各々のスレッドは、同じウェイクアップ時間を有することを特徴とする請求項16に記載のシステム。
  21. 前記実行スレッドをソートするための前記命令は、
    前記第1の次元において、前記所定の時間と同じウェイクアップ時間を有する異なるスレッドを識別するための命令と、
    前記異なるスレッドを識別することに応答して、
    前記実行スレッドに対応する第1の優先度が、前記異なるスレッドに対応する第2の優先度より高いと決定するための命令と、
    前記第1の次元において前記異なるスレッドを、前記第1および第2の次元双方のメンバである前記新しいスレッドと置き換え、前記置き換えられたスレッドは、前記第1および第2の次元に対して2次的な位置を有するようにするための命令と
    をさらに備えたことを特徴とする請求項16に記載のシステム。
  22. 前記実行スレッドをソートするための前記命令は、
    前記第1の次元において、前記所定の時間と同じウェイクアップ時間を有する異なるスレッドを識別するための命令と、
    前記異なるスレッドを識別することに応答して、
    前記実行スレッドに対応する第1の優先度が、前記異なるスレッドに対応する第2の優先度より低いと決定するための命令と、
    前記実行スレッドを前記スレッドの第2の次元に挿入して、前記実行スレッドが前記第1および第2の次元に対して2次的な位置を占有し、前記第1の優先度より低い優先度の第2の次元における異なるスレッドは、前記2次的な位置に続いて位置するようにするための命令と
    をさらに備えたことを特徴とする請求項16に記載のシステム。
JP2008157283A 2001-06-18 2008-06-16 スリープキュー管理 Expired - Fee Related JP4694595B2 (ja)

Applications Claiming Priority (2)

Application Number Priority Date Filing Date Title
US09/884,374 2001-06-18
US09/884,374 US7210146B2 (en) 2001-06-18 2001-06-18 Sleep queue management

Related Parent Applications (1)

Application Number Title Priority Date Filing Date
JP2002177498A Division JP4205369B2 (ja) 2001-06-18 2002-06-18 スリープキュー管理

Publications (2)

Publication Number Publication Date
JP2009026302A JP2009026302A (ja) 2009-02-05
JP4694595B2 true JP4694595B2 (ja) 2011-06-08

Family

ID=25384478

Family Applications (2)

Application Number Title Priority Date Filing Date
JP2002177498A Expired - Fee Related JP4205369B2 (ja) 2001-06-18 2002-06-18 スリープキュー管理
JP2008157283A Expired - Fee Related JP4694595B2 (ja) 2001-06-18 2008-06-16 スリープキュー管理

Family Applications Before (1)

Application Number Title Priority Date Filing Date
JP2002177498A Expired - Fee Related JP4205369B2 (ja) 2001-06-18 2002-06-18 スリープキュー管理

Country Status (3)

Country Link
US (1) US7210146B2 (ja)
EP (1) EP1271314B1 (ja)
JP (2) JP4205369B2 (ja)

Families Citing this family (34)

* Cited by examiner, † Cited by third party
Publication number Priority date Publication date Assignee Title
US7383549B1 (en) * 1997-01-08 2008-06-03 Broadcom Corporation Processor sharing technique for communications and other data processing on a same processor
US20050240699A1 (en) * 2004-03-31 2005-10-27 Yoder Michael E Safe process deactivation
GB2453284A (en) * 2004-04-02 2009-04-01 Symbian Software Ltd Mechanism for notifying a kernel of a thread entering a critical section.
US20060048160A1 (en) * 2004-09-02 2006-03-02 International Business Machines Corporation Method, apparatus, and computer program product for providing a self-tunable parameter used for dynamically yielding an idle processor
JP4144609B2 (ja) * 2004-09-29 2008-09-03 ソニー株式会社 情報処理装置、メモリ領域管理方法、並びにコンピュータ・プログラム
US8032737B2 (en) 2006-08-14 2011-10-04 Marvell World Trade Ltd. Methods and apparatus for handling switching among threads within a multithread processor
US7904704B2 (en) * 2006-08-14 2011-03-08 Marvell World Trade Ltd. Instruction dispatching method and apparatus
US8484651B2 (en) * 2007-05-04 2013-07-09 Avaya Inc. Distributed priority queue that maintains item locality
US8316218B2 (en) * 2008-02-01 2012-11-20 International Business Machines Corporation Look-ahead wake-and-go engine with speculative execution
US8725992B2 (en) 2008-02-01 2014-05-13 International Business Machines Corporation Programming language exposing idiom calls to a programming idiom accelerator
US8880853B2 (en) 2008-02-01 2014-11-04 International Business Machines Corporation CAM-based wake-and-go snooping engine for waking a thread put to sleep for spinning on a target address lock
US8341635B2 (en) 2008-02-01 2012-12-25 International Business Machines Corporation Hardware wake-and-go mechanism with look-ahead polling
US8171476B2 (en) 2008-02-01 2012-05-01 International Business Machines Corporation Wake-and-go mechanism with prioritization of threads
US8452947B2 (en) * 2008-02-01 2013-05-28 International Business Machines Corporation Hardware wake-and-go mechanism and content addressable memory with instruction pre-fetch look-ahead to detect programming idioms
US8516484B2 (en) 2008-02-01 2013-08-20 International Business Machines Corporation Wake-and-go mechanism for a data processing system
US8015379B2 (en) * 2008-02-01 2011-09-06 International Business Machines Corporation Wake-and-go mechanism with exclusive system bus response
US8612977B2 (en) * 2008-02-01 2013-12-17 International Business Machines Corporation Wake-and-go mechanism with software save of thread state
US8250396B2 (en) * 2008-02-01 2012-08-21 International Business Machines Corporation Hardware wake-and-go mechanism for a data processing system
US8225120B2 (en) 2008-02-01 2012-07-17 International Business Machines Corporation Wake-and-go mechanism with data exclusivity
US8788795B2 (en) * 2008-02-01 2014-07-22 International Business Machines Corporation Programming idiom accelerator to examine pre-fetched instruction streams for multiple processors
US8640141B2 (en) 2008-02-01 2014-01-28 International Business Machines Corporation Wake-and-go mechanism with hardware private array
US8732683B2 (en) 2008-02-01 2014-05-20 International Business Machines Corporation Compiler providing idiom to idiom accelerator
US8312458B2 (en) 2008-02-01 2012-11-13 International Business Machines Corporation Central repository for wake-and-go mechanism
US8386822B2 (en) * 2008-02-01 2013-02-26 International Business Machines Corporation Wake-and-go mechanism with data monitoring
US8145849B2 (en) * 2008-02-01 2012-03-27 International Business Machines Corporation Wake-and-go mechanism with system bus response
US8127080B2 (en) 2008-02-01 2012-02-28 International Business Machines Corporation Wake-and-go mechanism with system address bus transaction master
US8145723B2 (en) * 2009-04-16 2012-03-27 International Business Machines Corporation Complex remote update programming idiom accelerator
US8886919B2 (en) 2009-04-16 2014-11-11 International Business Machines Corporation Remote update programming idiom accelerator with allocated processor resources
US8082315B2 (en) * 2009-04-16 2011-12-20 International Business Machines Corporation Programming idiom accelerator for remote update
US8230201B2 (en) * 2009-04-16 2012-07-24 International Business Machines Corporation Migrating sleeping and waking threads between wake-and-go mechanisms in a multiple processor data processing system
US8954968B1 (en) * 2011-08-03 2015-02-10 Juniper Networks, Inc. Measuring by the kernel the amount of time a monitored thread spends in a queue in order to monitor scheduler delays in a computing device
KR101822940B1 (ko) * 2011-12-12 2018-01-29 엘지전자 주식회사 수행 시간에 기초하여 장치 관리 명령을 수행하는 방법 및 장치
US9274832B2 (en) * 2013-02-07 2016-03-01 Htc Corporation Method and electronic device for thread scheduling
US9798585B2 (en) 2015-05-19 2017-10-24 Oracle International Corporation Context switching with reader-writer locks

Citations (1)

* Cited by examiner, † Cited by third party
Publication number Priority date Publication date Assignee Title
US6609161B1 (en) * 2000-06-01 2003-08-19 Adaptec, Inc. Two-dimensional execution queue for host adapters

Family Cites Families (11)

* Cited by examiner, † Cited by third party
Publication number Priority date Publication date Assignee Title
US5274642A (en) * 1992-06-05 1993-12-28 Indra Widjaja Output buffered packet switch with a flexible buffer management scheme
JP3231101B2 (ja) * 1992-10-28 2001-11-19 株式会社日立製作所 タスクキュー管理方法
JPH06282447A (ja) * 1993-03-29 1994-10-07 Mitsubishi Electric Corp 待ち行列管理方式
US6389031B1 (en) * 1997-11-05 2002-05-14 Polytechnic University Methods and apparatus for fairly scheduling queued packets using a ram-based search engine
US6370144B1 (en) * 1997-11-05 2002-04-09 Polytechnic University Methods and apparatus for shaping queued packets using a two-dimensional RAM-based search engine
US6724767B1 (en) * 1998-06-27 2004-04-20 Intel Corporation Two-dimensional queuing/de-queuing methods and systems for implementing the same
US6081507A (en) * 1998-11-04 2000-06-27 Polytechnic University Methods and apparatus for handling time stamp aging
US6789134B1 (en) * 2000-06-01 2004-09-07 Adaptec, Inc. Dequeuing from a host adapter two-dimensional queue
US6937561B2 (en) * 2000-06-02 2005-08-30 Agere Systems Inc. Method and apparatus for guaranteeing data transfer rates and enforcing conformance with traffic profiles in a packet network
US20020141427A1 (en) * 2001-03-29 2002-10-03 Mcalpine Gary L. Method and apparatus for a traffic optimizing multi-stage switch fabric network
US6883042B1 (en) * 2001-04-25 2005-04-19 Adaptec, Inc. Method and structure for automatic SCSI command delivery using the packetized SCSI protocol

Patent Citations (1)

* Cited by examiner, † Cited by third party
Publication number Priority date Publication date Assignee Title
US6609161B1 (en) * 2000-06-01 2003-08-19 Adaptec, Inc. Two-dimensional execution queue for host adapters

Also Published As

Publication number Publication date
US20020194250A1 (en) 2002-12-19
EP1271314A2 (en) 2003-01-02
EP1271314B1 (en) 2018-08-08
JP2003044295A (ja) 2003-02-14
JP4205369B2 (ja) 2009-01-07
JP2009026302A (ja) 2009-02-05
US7210146B2 (en) 2007-04-24
EP1271314A3 (en) 2008-12-10

Similar Documents

Publication Publication Date Title
JP4694595B2 (ja) スリープキュー管理
JP3987384B2 (ja) 実行キュー管理
EP3008594B1 (en) Assigning and scheduling threads for multiple prioritized queues
Rajkumar Synchronization in real-time systems: a priority inheritance approach
US10089142B2 (en) Dynamic task prioritization for in-memory databases
US20230185607A1 (en) Hardware accelerated dynamic work creation on a graphics processing unit
US6418458B1 (en) Object-oriented prioritized work thread pool
Prakash et al. A nonblocking algorithm for shared queues using compare-and-swap
KR101086514B1 (ko) 연속 매체 우선순위 인식 저장장치 스케줄러
US6625635B1 (en) Deterministic and preemptive thread scheduling and its use in debugging multithreaded applications
KR101686010B1 (ko) 실시간 멀티코어 시스템의 동기화 스케쥴링 장치 및 방법
US20050240924A1 (en) Prerequisite-based scheduler
US6845504B2 (en) Method and system for managing lock contention in a computer system
US7246353B2 (en) Method and system for managing the execution of threads and the processing of data
JP2003044296A5 (ja)
CN112764904A (zh) 基于多任务***中防止低优先级任务饿死的方法
CN113316767A (zh) 处理器处的松弛度感知、动态优先级变化
EP2840513B1 (en) Dynamic task prioritization for in-memory databases
CA2465015A1 (en) Context scheduling
KR101725408B1 (ko) 실시간 운영체제의 태스크 스케줄링 방법
US20230418667A1 (en) Computing device for handling tasks in a multi-core processor, and method for operating computing device
Andersson et al. A Tool for Satisfying Real-Time Requirements of Software Executing on ARINC 653 with Undocumented Multicore
CN115904744A (zh) 线程持锁方法、装置、电子设备及计算机可读介质
Pathan Real-time scheduling on uni-and multiprocessors based on priority promotions
JP3931883B2 (ja) ジョブスケジューリング方法、計算機システムおよびジョブスケジューリングプログラム

Legal Events

Date Code Title Description
A131 Notification of reasons for refusal

Free format text: JAPANESE INTERMEDIATE CODE: A131

Effective date: 20101008

A521 Request for written amendment filed

Free format text: JAPANESE INTERMEDIATE CODE: A523

Effective date: 20110111

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: 20110218

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: 20110223

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

Free format text: PAYMENT UNTIL: 20140304

Year of fee payment: 3

R150 Certificate of patent or registration of utility model

Free format text: JAPANESE INTERMEDIATE CODE: R150

R250 Receipt of annual fees

Free format text: JAPANESE INTERMEDIATE CODE: R250

R250 Receipt of annual fees

Free format text: JAPANESE INTERMEDIATE CODE: R250

S111 Request for change of ownership or part of ownership

Free format text: JAPANESE INTERMEDIATE CODE: R313113

R350 Written notification of registration of transfer

Free format text: JAPANESE INTERMEDIATE CODE: R350

R250 Receipt of annual fees

Free format text: JAPANESE INTERMEDIATE CODE: R250

R250 Receipt of annual fees

Free format text: JAPANESE INTERMEDIATE CODE: R250

LAPS Cancellation because of no payment of annual fees