(57)【特許請求の範囲】
【請求項１】
プロセッサとメモリとを備えたコンピュータシステムで実行される方法であって、複数のスレッドを含み、前記メモリに格納された多次元スリープキューを管理する方法であって、
前記複数のスレッドは、ウェイクアップ時間および優先度を有し、
前記プロセッサが、所定の時間に対して実行スレッドを前記多次元スリープキューに挿入するために、前記実行スレッドを識別することと、
前記識別することに応答して、（ａ）前記多次元スリープキューの第１の次元において前記所定の時間に等しいウェイクアップ時間を有するスレッドがないこと、および（ｂ）前記多次元スリープキューの第２の次元において前記ウェイクアップ時間を有する異なるスレッドが１または複数あり、該１または複数の異なるスレッドの各々が前記実行スレッドの優先度より低いかまたは等しい優先度を有する場合に、前記実行スレッドを前記多次元スリープキューの第１の次元に挿入し、ウェイクアップ時間に基づいて第１の次元でソートすることと、
前記識別することに応答して、（ｃ）前記多次元スリープキューの第１の次元において前記所定の時間に等しいウェイクアップ時間を有するスレッドがあること、または（ｄ）前記多次元スリープキューの第２の次元において前記ウェイクアップ時間を有する異なるスレッドが１または複数あり、該１または複数の異なるスレッドの各々が前記実行スレッドの優先度より高い優先度を有する場合に、前記実行スレッドを前記多次元スリープキューの第２の次元に挿入し、優先度に基づいて第２の次元でソートすることと
を備えたことを特徴とする方法。
【請求項２】
前記多次元スリープキューは、リアルタイム多次元スリープキューであることを特徴とする請求項１に記載の方法。
【請求項３】
前記多次元スリープキューは、２次元スリープキューであることを特徴とする請求項１に記載の方法。
【請求項４】
前記実行スレッドを前記多次元スリープキューに挿入することは、スレッドスケジューリングメカニズムが、単一のスレッドを前記多次元スリープキューから除去する時間に等しく、スレッドの数とは無関係な決定性の時間内で実行するために他のスレッドをスケジュールすることを可能にする方法で行われることを特徴とする請求項１に記載の方法。
【請求項５】
前記多次元スリープキューは、スレッドのグループを備え、
前記方法は、前記スレッドのグループを前記多次元スリープキューから、単一のスレッドを前記多次元スリープキューから除去する時間に等しく、スレッドの数とは無関係な決定性の時間内で除去することをさらに備え、
前記グループ内の各スレッドは、同じウェイクアップ時間を有することを特徴とする請求項１に記載の方法。
【請求項６】
前記第２の次元は、複数のスレッドを備え、各々のスレッドは、同じウェイクアップ時間を有することを特徴とする請求項１に記載の方法。
【請求項７】
前記実行スレッドをソートすることは、
前記第１の次元において、前記所定の時間と同じウェイクアップ時間を有する異なるスレッドを識別することと、
前記異なるスレッドを識別することに応答して、
前記実行スレッドに対応する第１の優先度が、前記異なるスレッドに対応する第２の優先度より高いと決定することと、
前記第１の次元において前記異なるスレッドを、前記第１および第２の次元双方のメンバである前記実行スレッドに置き換え、前記置き換えられたスレッドは、前記第１および第２の次元に対して２次的な位置を有することと
をさらに備えたことを特徴とする請求項１に記載の方法。
【請求項８】
前記実行スレッドをソートすることは、
前記第１の次元において、前記所定の時間と同じウェイクアップ時間を有する異なるスレッドを識別することと、
前記異なるスレッドを識別することに応答して、
前記実行スレッドに対応する第１の優先度が、前記異なるスレッドに対応する第２の優先度より低いと決定することと、
前記実行スレッドを前記スレッドの第２の次元に挿入して、前記実行スレッドが前記第１および第２の次元に対して２次的な位置を占有し、前記第１の優先度より低い優先度の第２の次元における異なるスレッドは、前記２次的な位置に続いて位置するようにすることと
をさらに備えたことを特徴とする請求項１に記載の方法。
【請求項９】
プロセッサとメモリとを備えたコンピュータシステムで実行され、複数のスレッドを含み、前記メモリに格納された多次元スリープキューを管理するためのコンピュータ実行可能命令を含むコンピュータ読み取り可能記憶媒体であって、
前記複数のスレッドは、ウェイクアップ時間および優先度を有し、
所定の時間に対して実行スレッドを前記多次元スリープキューに挿入するために、前記実行スレッドを識別することと、
前記識別することに応答して、（ａ）前記多次元スリープキューの第１の次元において前記所定の時間に等しいウェイクアップ時間を有するスレッドがないこと、および（ｂ）前記多次元スリープキューの第２の次元において前記ウェイクアップ時間を有する異なるスレッドが１または複数あり、該１または複数の異なるスレッドの各々が前記実行スレッドの優先度より低いかまたは等しい優先度を有する場合に、前記実行スレッドを前記多次元スリープキューの第１の次元に挿入し、ウェイクアップ時間に基づいて第１の次元でソートすることと、
前記識別することに応答して、（ｃ）前記多次元スリープキューの第１の次元において前記所定の時間に等しいウェイクアップ時間を有するスレッドがあること、または（ｄ）前記多次元スリープキューの第２の次元において前記ウェイクアップ時間を有する異なるスレッドが１または複数あり、該１または複数の異なるスレッドの各々が前記実行スレッドの優先度より高い優先度を有する場合に、前記実行スレッドを前記多次元スリープキューの第２の次元に挿入し、優先度に基づいて第２の次元でソートすることと
を前記プロセッサに実行させる前記コンピュータ実行可能命令を格納することを特徴とするコンピュータ読み取り可能記憶媒体。
【請求項１０】
前記多次元スリープキューは、リアルタイム多次元スリープキューであることを特徴とする請求項９に記載のコンピュータ読み取り可能記憶媒体。
【請求項１１】
前記実行スレッドを前記多次元スリープキューに挿入することは、スレッドスケジューリングメカニズムが、単一のスレッドを前記多次元スリープキューから除去する時間に等しく、スレッドの数とは無関係な決定性の時間内で実行するために他のスレッドをスケジュールすることを可能にする方法で行われることを特徴とする請求項９に記載のコンピュータ読み取り可能記憶媒体。
【請求項１２】
前記多次元スリープキューは、スレッドのグループを備え、
前記コンピュータ実行可能命令は、前記スレッドのグループを前記多次元スリープキューから、単一のスレッドを前記多次元スリープキューから除去する時間に等しく、スレッドの数とは無関係な決定性の時間内で除去するための命令をさらに備え、
前記グループ内の各スレッドは、同じウェイクアップ時間を有することを特徴とする請求項９に記載のコンピュータ読み取り可能記憶媒体。
【請求項１３】
前記第２の次元は、複数のスレッドを備え、各々のスレッドは、同じウェイクアップ時間を有することを特徴とする請求項９に記載のコンピュータ読み取り可能記憶媒体。
【請求項１４】
前記実行スレッドをソートすることは、
前記第１の次元において、前記所定の時間と同じウェイクアップ時間を有する異なるスレッドを識別することと、
前記異なるスレッドを識別することに応答して、
前記実行スレッドに対応する第１の優先度が、前記異なるスレッドに対応する第２の優先度より高いと決定することと、
前記第１の次元において前記異なるスレッドを、前記第１および第２の次元双方のメンバである前記実行スレッドと置き換え、前記置き換えられたスレッドは、前記第１および第２の次元に対して２次的な位置を有することと
をさらに備えたことを特徴とする請求項９に記載のコンピュータ読み取り可能記憶媒体。
【請求項１５】
前記実行スレッドをソートすることは、
前記第１の次元において、前記所定の時間と同じウェイクアップ時間を有する異なるスレッドを識別することと、
前記異なるスレッドを識別することに応答して、
前記実行スレッドに対応する第１の優先度が、前記異なるスレッドに対応する第２の優先度より低いと決定することと、
前記実行スレッドを前記スレッドの第２の次元に挿入して、前記実行スレッドが前記第１および第２の次元に対して２次的な位置を占有し、前記第１の優先度より低い優先度の第２の次元における異なるスレッドは、前記２次的な位置に続いて位置するようにすることと
をさらに備えたことを特徴とする請求項９に記載のコンピュータ読み取り可能記憶媒体。
【請求項１６】
複数のスレッドを含む多次元スリープキューを管理するためのシステムであって、
コンピュータ実行可能命令および前記多次元スリープキューを含むメモリと、
前記メモリに動作可能に結合され、前記コンピュータ実行可能命令を実行するためのプロセッサとを備え、前記複数のスレッドは、ウェイクアップ時間および優先度を有し、前記コンピュータ実行可能命令は、
所定の時間に対して実行スレッドを前記多次元スリープキューに挿入するために、前記実行スレッドを識別するための命令と、
前記識別することに応答して、（ａ）前記多次元スリープキューの第１の次元において前記所定の時間に等しいウェイクアップ時間を有するスレッドがないこと、および（ｂ）前記多次元スリープキューの第２の次元において前記ウェイクアップ時間を有する異なるスレッドが１または複数あり、該１または複数の異なるスレッドの各々が前記実行スレッドの優先度より低いかまたは等しい優先度を有する場合に、前記実行スレッドを前記多次元スリープキューの第１の次元に挿入し、ウェイクアップ時間に基づいて第１の次元でソートするための命令と、
前記識別することに応答して、（ｃ）前記多次元スリープキューの第１の次元において前記所定の時間に等しいウェイクアップ時間を有するスレッドがあること、または（ｄ）前記多次元スリープキューの第２の次元において前記ウェイクアップ時間を有する異なるスレッドが１または複数あり、該１または複数の異なるスレッドの各々が前記実行スレッドの優先度より高い優先度を有する場合に、前記実行スレッドを前記多次元スリープキューの第２の次元に挿入し、優先度に基づいて第２の次元でソートするための命令と
を含むことを特徴とするシステム。
【請求項１７】
前記多次元スリープキューは、リアルタイム多次元スリープキューであることを特徴とする請求項１６に記載のシステム。
【請求項１８】
前記実行スレッドを前記多次元スリープキューに挿入するための前記命令は、スレッドスケジューリングメカニズムが、単一のスレッドを前記多次元スリープキューから除去する時間に等しく、スレッドの数とは無関係な決定性の時間内で実行するために他のスレッドをスケジュールすることを可能にする方法で行われることを特徴とする請求項１６に記載のシステム。
【請求項１９】
前記多次元スリープキューは、スレッドのグループを備え、
前記コンピュータ実行可能命令は、前記スレッドのグループを前記多次元スリープキューから、単一のスレッドを前記多次元スリープキューから除去する時間に等しく、スレッドの数とは無関係な決定性の時間内で除去するための命令とをさらに備え、
前記グループ内の各スレッドは、同じウェイクアップ時間を有することを特徴とする請求項１６に記載のシステム。
【請求項２０】
前記第２の次元は、複数のスレッドを備え、各々のスレッドは、同じウェイクアップ時間を有することを特徴とする請求項１６に記載のシステム。
【請求項２１】
前記実行スレッドをソートするための前記命令は、
前記第１の次元において、前記所定の時間と同じウェイクアップ時間を有する異なるスレッドを識別するための命令と、
前記異なるスレッドを識別することに応答して、
前記実行スレッドに対応する第１の優先度が、前記異なるスレッドに対応する第２の優先度より高いと決定するための命令と、
前記第１の次元において前記異なるスレッドを、前記第１および第２の次元双方のメンバである前記新しいスレッドと置き換え、前記置き換えられたスレッドは、前記第１および第２の次元に対して２次的な位置を有するようにするための命令と
をさらに備えたことを特徴とする請求項１６に記載のシステム。
【請求項２２】
前記実行スレッドをソートするための前記命令は、
前記第１の次元において、前記所定の時間と同じウェイクアップ時間を有する異なるスレッドを識別するための命令と、
前記異なるスレッドを識別することに応答して、
前記実行スレッドに対応する第１の優先度が、前記異なるスレッドに対応する第２の優先度より低いと決定するための命令と、
前記実行スレッドを前記スレッドの第２の次元に挿入して、前記実行スレッドが前記第１および第２の次元に対して２次的な位置を占有し、前記第１の優先度より低い優先度の第２の次元における異なるスレッドは、前記２次的な位置に続いて位置するようにするための命令と
をさらに備えたことを特徴とする請求項１６に記載のシステム。
【発明の詳細な説明】
【技術分野】
【０００１】
以下の説明は、オペレーティングシステムに関する。より詳細には、以下の説明は、スリープキュー管理に関する。
【背景技術】
【０００２】
リアルタイムパフォーマンスは、通信交換装置、医療監視装置、宇宙航法および誘導アプリケーションなどの、高性能な埋め込み型アプリケーションで必要とされるタイムクリティカルな応答に必須である。このようなアプリケーションは、応答を、指定された時間パラメータ内でリアルタイムに送達しなければならない。
【０００３】
リアルタイムパフォーマンスは、スレッドスケジューリングメカニズム（thread-scheduling mechanisms）を使用して、スレッド優先度に基づいて実行し、スレッドをスケジュールするオペレーティングシステムによって提供される。（スレッドは基本的には、コンピュータプログラムアプリケーションを介した実行のパスである）。例えば、Microsoft WINDOWS CE（登録商標）オペレーティングシステムは、２５６のスレッド優先度レベルを提供し、より高い優先度のスレッドが実行されてから、より低い優先度のスレッドが実行される。等しい優先度のスレッドは、先入れ先出しのラウンドロビン方式で実行される。例えば、スレッドＡが動作し、次いでスレッドＢが動作し、その後にスレッドＣが続き、スレッドＡに戻る。
【０００４】
スレッドスケジューリングメカニズムは、典型的には、後で実行するためにスレッドを「実行キュー」に格納する。図１は、リンクリストとして実施される従来の実行キュー１００を例示する。実行キューにおけるスレッド１０２は、各々のスレッド優先度に基づいてソートされる。例えば、スレッド１０２−Ａ１ないし１０２−ＡＪは、各々０のスレッド優先度を有し、スレッド１０２−Ｂ１ないし１０２−ＢＫは、各々１のスレッド優先度を有する。いかなる数のスレッド１０２も実行キューに存在することができる。
【０００５】
現在実行中のスレッドを、別のスレッドによってプリエンプト(preempt)することができ、またはスレッド自体がプロセッサにそのアクセスを「与える（yield）」ことができる。これらの用語は共に、スレッドが「非実行中」状態に配置されることを指す。例えば、オペレーティングシステムは、スレッドをスリープにすることができ、またはスレッドをプリエンプトして、より高い優先度を有する異なるスレッドを実行できるようにすることができる。他の実施例では、スレッド自体は、そのアクセスをプロセッサに「与え」て、所定の時間の経過など、特定のイベントの発生を待ってから、実行を継続することができる。
【０００６】
スレッドが別のプログラムによってプリエンプトされるか、スレッド自体がそのアクセスをプロセッサに与えるかどうかに関わらず、システムのスレッドスケジューリングメカニズムは、典型的には、プリエンプトされた、または与えたスレッドを実行キューまたはスリープキューに格納する。（より詳細には、スレッドへの参照は、一般に実行キューまたはスリープキューに格納される。）（スレッドスケジューリングメカニズムをオペレーティングシステムの一部にすることもしないこともできるが、本明細書においては、スレッドスケジューリングメカニズム、オペレーティングシステムなどの用語をしばしば相互交換可能に使用して、システムのスレッドスケジューリングの態様を記載する。）スレッドの指定されたスリープ時間が終了したとき、スケジューリングメカニズムは、スレッドをスリープキューから除去し、かつスレッドを後で実行するために実行キューに挿入することによって、スレッドを「ウェイクアップ（wakes-up）」させる。
【０００７】
図２は、リンクリストとして実施される、従来の１次元のスリープキュー２００を例示する。（従来のスリープキューは、「ヒープ（heap）」データ構造として実施することもできる）。本明細書の目的において、スリープキュー２００は、時間に基づいてソートされる任意の数のスレッドを格納するための任意のキューである。この実施例では、スリープキューにおけるスレッド２０２は、１次元において、スレッドウェイクアップ時間およびスレッド優先度に基づいて特定のウェイクアップ時間内でソートされる。例えば、スレッド２０２−１は５ミリ秒（ｍｓ）のウェイクアップ時間を有し、スレッド２０２−２および２０２−３は１０ミリ秒の各ウェイクアップ時間を有する。同じスリープ時間を有するスレッドは、優先度に基づいてラウンドロビン方式でソートされる。例えば、スレッド２０２−２は、１０ｍｓのウェイクアップ時間および０のスレッド優先度（この例では、最高のスレッド優先度）を有し、スレッド２０２−．．．は、１０ｍｓのウェイクアップ時間および５のスレッド優先度（０のスレッド優先度より低い優先度）を有する。この方法では、従来のスリープキューにおけるスレッドは、互いに関連して１次元でソートされる。
【０００８】
上述のように、スレッドを別のスレッドによって、いくつの理由でもプリエンプトすることができる。スレッドをプリエンプトすることができる１つの有意な理由は、オペレーティングシステムまたはスレッドスケジューリングメカニズムが、実行される必要のある、より高い優先度のスレッドがあるかどうかを決定できるようにすることである。この決定の一部、およびそれ自体における、かつそれ自体の別の有意な理由は、オペレーティングシステムが、スリープキューにおいて格納／参照されたスレッドを走査して、実行するためにウェイクアップされる（例えば、実行キューに挿入される）必要があるかどうかを決定できることである。リアルタイムオペレーティングシステムは、典型的には、すべての他のスレッドを実行から所定の定期的な時間間隔でプリエンプトして、このようなスレッド管理を実行する。
【０００９】
スレッドスケジューリングメカニズムは、典型的には、ハードウェアタイマを使用してシステムチックを生成して、スレッドがシステムにおいてプリエンプトされることなく実行することができる時間の最大量、または「クアンタム（quantum）」を決定する。システムチックは、ハードウェアタイマの割り込みがオペレーティングシステムによって生成され、働くレートである。タイマが作動したとき、スレッドスケジューリングメカニズムは、新しいスレッドが準備完了の場合に、新しいスレッドを実行するためにスケジュールする。
【００１０】
重要なことは、オペレーティングシステムは、あるスレッドスケジューリング手順中に、例えば、スリープキュースレッド除去手順中と、実行キュースレッド挿入手順中などに、プロセッサへの排他的アクセスを必要とする。オペレーティングシステムは、そのシステム排他的アクセスを使用して、（ａ）スレッドをスリープキューから、各スレッドの指定されたウェイクアップ時間に、またはそれに可能な限り近くに、後で実行キューに挿入するために除去し、（ｂ）スリープキューから除去された各スレッドを実行キューに、実行するために挿入する。
【００１１】
一度にウェイクアップされるスレッドの数は、１スレッド、２スレッドまたは１００スレッドなど、いかなる数のスレッドにすることもできる。スリープキューから、実行キューに挿入するために除去する必要のあるスレッドが多いほど、オペレーティングシステムがプロセッサへのシステム排他的アクセスを必要とする時間が大きくなる。このシステム排他的アクセスは、直接オペレーティングシステムによってコントロールされ、典型的には、他のいかなるスレッドによってもプリエンプトすることができない。
【発明の開示】
【発明が解決しようとする課題】
【００１２】
従来のスリープキュースレッド除去および実行キュースレッド挿入手順の非決定的およびプリエンプト不可能な性質により、いくつかの著しい問題が生じる。１つの問題は、例えば、オペレーティングシステムは、典型的には、他のスレッドを所定の時間パラメータ内でスケジュールするように保証することができないことであり、これは、このような非決定的スレッド管理技術のためである。これは、プリエンプトされたスレッド（実行されたが、スリープキュースレッド除去中にブロックされたスレッド）は、未知の時間の間、再度実行しないことを意味する。スリープキューから任意の瞬間に除去される必要のあるスレッドの１つまたはすべての各ウェイクアップ時間は、それらが除去され、実行キューに挿入される前に、すでに長い時間が経過している可能性がある。同様に、実行キューに挿入されるスレッドが実行される時間まで、スレッドの目的またはスレッドが応答しているイベントがすでに過去に過ぎている可能性がある。
【００１３】
したがって、従来のスリープキュースレッド除去および実行キュースレッド挿入手順では、典型的には、オペレーティングシステムが、決定性の／所定の時間パラメータ内で実行するために他のスレッドをスケジュールすることができない。
【課題を解決するための手段】
【００１４】
記載した主題の様々な実施は、多次元スリープキューの管理を可能にし、同じウェイクアップ時間を有するスレッドのグループは、グループ内のスレッドの数と無関係に決定性の時間（deterministic amount of time）で、多次元スリープキューから除去される。
【００１５】
さらに、新しいスレッドは、他のプロセスがスレッド挿入プロセス中に実行することを可能にする方法により、多次元スリープキューに挿入される。したがって、スレッドをスリープキューに挿入するか、スレッドをスリープキューから除去するかに関わらず、記載した主題により、オペレーティングシステムは、決定性の／所定の時間パラメータ内で実行するために他のスレッドをスケジュールすることができる。
【発明を実施するための最良の形態】
【００１６】
以下の説明では、上述の特許請求の範囲に引用された要素を組み込むスリープキューを管理するための主題の様々な実施例を示す。これらの実施例について、法定要件を満たすために具体的に記載する。しかし、記載自体は、本発明の範囲を限定することを意図するものではない。むしろ、発明者は、特許請求の範囲に記載した主題を他の方法において実施し、本明細書に記載したものと異なる要素または類似の要素の組み合わせを、他の現在または将来の技術と共に含めることができることを企図している。
【００１７】
（例示的多次元スリープキュー）
図３は、例示的２次元（２−Ｄ）スリープキュー３００を示すブロック図である。スリープキュー３００が使用されて、もはや指定された時間に実行中ではないか、または「スリープにされる」スレッドが追跡される。スレッドが割り込まれ、スリープにされるとき、このスレッドへの参照がスリープキューに挿入される。各スレッドは、パラメータを有し、パラメータを使用して、これがいつスリープキューから取り出され、したがって「再開」されるかが決定される。この実施例では、これらパラメータは、ウェイクアップ時間およびスレッド優先度を含む。
【００１８】
例えば、スリープキュー３００内で、各スレッドがノードまたはデータフィールド３０４として表される。したがって、スリープキューは、複数のこのようなノードまたはデータフィールドを含む。各ノードは、各々実行のスレッドをコンピュータプログラムアプリケーションにおいて表す。各ノードは、各スレッドウェイクアップ時間および各スレッド優先度（「ＰＲＩ」）を含む。例えば、ノード３０４−１は、５ミリ秒（ｍｓ）のスレッドＷＴおよび１０のスレッドＰＲＩを含む。（この実施例では、０のスレッドＰＲＩが１のスレッドＰＲＩより高く、これは２のスレッドＰＲＩより高い、以下同じ。）
【００１９】
スレッドのグループをスリープキュー３００から決定性の時間内で除去するために、ノード３０４は、２次元でソートされる。すなわち最初に、それらのウェイクアップ時間に対して、次に、それらのスレッド優先度に対してソートされる。図３は、このようなソートの結果を示し、ノードが左から右へウェイクアップ時間値が増す順序で、上から下へＰＲＩ値が増す順序でソートされる。これにより、スリープキューに含まれたノードによって所有された一意のウェイクアップ時間値の数に等しいいくつかの列を有する、２次元アレイが生じる。各列は、特定のウェイクアップ時間値を有するすべてのノードを含む。列は、ウェイクアップ値が増す順序でソートされる。各列内で、ノードがそれらのＰＲＩ値の順序でソートされる。
【００２０】
例えば、第１の次元の行またはデータフィールド３０２は、ノード３０４−１ないし３０４−５を含み、これらは、一意の各ウェイクアップ時間値の最低優先度のノードを有し、ウェイクアップ時間値が増す順序でソートされる。ノード３０４−１は５のスレッドウェイクアップ時間を有し、ノード３０４−２は７のスレッドウェイクアップ時間を有し、ノード３０４−３は２０のスレッドウェイクアップ時間を有する、以下同じ。各ノードが第１の次元において順序付けされ、スリープキュー管理手順によって、この手順が「ウェイクアップ」時間に達していないスレッドを除去する前に、「ウェイクアップされる」準備ができているスレッドが除去される。いかなる数のノードも、第１の次元データフィールドに存在することができる。第１の次元３０２における各ノード３０４は、第１の次元における他のノードと比較して、異なるスレッドウェイクアップ時間を有する。第１の次元のノードは、互いにスレッド優先度に基づいて順序付け、またはソートされない。
【００２１】
また、ソートの結果、複数の第２の次元の列またはデータフィールド３０８が生じ、ノード３０４は、互いにそれらの各スレッドＰＲＩに基づいて順序付けされる。例えば、ノードの第２のサブセットが、第２の次元のデータフィールド３０８によって表され、これは、この例では、ノード３０４−２ないし３０４−８を含む。いかなる数のノードも第２の次元のデータフィールドに存在することができる。さらに、いかなる数の第２の次元のデータフィールドも存在することができる。これを示すため、第２の次元のデータフィールド３０８−２が存在し、これがノード３０４−４ないし３０４−１０を含むことを考察されたい。
【００２２】
各ノード３０４は、第１の次元３０２におけるノードのみを表すのではなく、第２の次元３０８における各ノードも表す。すなわち、各第２の次元のデータフィールドは、単一の第１の次元のノードを含む。例えば、第２の次元３０８−１がノード３０４−２を含み、これは第１の次元および第２の次元におけるものである。さらに他の例では、第２の次元３０８−２がノード３０４−４を含み、これは第１の次元および第２の次元に対してソートされる。
【００２３】
方向矢印３１０によって例示したように、第２の次元３０８における各ノード３０４は、第２の次元において互いにスレッドＰＲＩに基づいて、特定のスレッドウェイクアップ時間内でソートされる。例えば、ノード３０４−２は２のスレッドＰＲＩを有し、これはノード３０４−６の３のスレッド優先度より高い、以下同じ。第１の次元３０２におけるノード３０４と対照的に、各ノードは、異なるスレッドウェイクアップ時間を有し、各第２の次元のノードは、同じ各スレッドウェイクアップ時間を有する。例えば、各ノード３０４−２ないし３０４−８は、同じ７ｍｓのスレッドウェイクアップ時間を有する。スリープキュー３００の各ノード３０４は、第１および第２の次元に対してソートされるので、類似のウェイクアップ時間を有する他のノードの各優先度と比較して、第１の次元３０２において最高／より高い優先度を有する各ノードは、スリープキューの第１および第２の次元３０８に対して「１次的位置」にあると見なされる。例えば、図３を参照すると、ノード３０４−１ないし３０４−５を、スリープキューの第１および第２の次元に対して「１次的」な位置にあると見なすことができる。
【００２４】
さらに、類似のウェイクアップ時間を有する１または複数の他のノードと比較して、より低い優先度を有するノードは、スリープキューの第１および第２の次元に対して２次的位置にあると見なされる。例えば、ノード３０４−６は３の優先度を有し、これはこの例では、ノード３０４−２の２の優先度より低い。（各ノードが類似の７ｍｓのウェイクアップ時間を有することに留意されたい）。したがって、ノード３０４−６は、スリープキューの第１および第２の次元に対して２次的位置にあると見なされる。
【００２５】
ノードの間のソートされた関係を示すため、ノードがリンクリストにおいて維持されると有利である。具体的には、ノード３０４は、他のノード３０４への１または複数の参照を含むことができる。例えば、第１のスレッド３０４−１は、次のスレッド３０４−２へのポインタ参照などの、参照（図示せず）を含み、これは後続のスレッド３０４−３への参照を含む。さらに他の例では、ノード３０４−２は、少なくとも２つのこのようなノード参照、すなわちノード３０４−６への第１の参照、および３０４−３への第２の参照を含む。
【００２６】
このようなノード３０４参照を管理するための多数の方法がある。例えば、ノードが現在異なるノードを参照しない場合には、ノードにおけるポインタ参照をヌル値に等しく設定することができる。スリープキュー管理手順中に、多次元スリープキュー構成が多少のスレッド／ノードを含むように変化した場合、ノードの対応するポインタ参照を、このような変化を正確に反映するように設定することができる。
【００２７】
スリープキュー３００の多次元配列により、再開されるべき次のスレッド、またはスリープキューから除去されるべきスレッドのグループを決定することが容易になる。この例では、除去されるべき次のスレッドは、もっとも早いウェイクアップ時間および最高のスレッド優先度を有するスレッドであり、左上のノード３０４−１である。さらに、この配列には、スレッドのグループをスリープキューから決定性の時間内で除去することに関係する他のいくつかの利点がある。例えば、スリープキュー３００がリンクリストとして実施されるとき、単一ノード（例えば、ノード３０４）のデタッチオペレーション（detach operation）が使用されて、第１の次元３０２および第２の次元３０８における１または複数のノードが、システムタイマチックにおいて除去される。
【００２８】
これを示すため、多次元スリープキューからのノード３０４−２のデタッチにより、第２の次元のデータフィールド３０８−１におけるノードのグループ（すなわち、ノード３０４−２、およびノード３０４−６ないし３０４−８）を除去する結果となることを考慮されたい。したがって、第２の次元のデータフィールドにおける各ノードは、第２の次元のデータフィールドにおけるノードの数に関わらず、スリープキューから同時に除去される。
【００２９】
したがって、特定のウェイクアップ時間を有するいずれかの数のノードを除去するために要する時間は、単一のノードをスリープキューからデタッチするための時間に基づく。したがって、多次元スリープキューは、ノードのグループをスリープキューから、制限のある、または決定性の時間において除去することを可能にする。以下に記載するように、それが単一のノードを実行キューに挿入するために要する時間において、このノードのグループを実行キューに関連付けることができる。したがって、スレッド管理中にスリープキュー３００を使用することにより、オペレーティングシステムが実行する他のスレッドを、決定性の／所定の時間パラメータ内でスケジュールすることができる。
【００３０】
（多次元スリープキューを管理するための例示的手順）
スレッドを図２の１次元のスリープキューに挿入するための従来の技術では、典型的には、他のプロセス／スレッドを、スリープキュースレッド挿入プロセス中に実行することができる。これにより、オペレーティングシステムが、所定の時間パラメータ内で、スリープキュースレッド挿入プロセス中に、実行する他のスレッドをスケジュールすることができる。（これは、スレッドをスリープキューに挿入するために要する時間全体が、非決定性であるか、または制限されていない（決定不可能）場合にもそうである）。しかし、このような従来の１次元スリープキュースレッド挿入技術は、図３の本発明の多次元スリープキュー３００にスレッドを挿入するように設計されていない。
【００３１】
図４は、スレッドを図３の多次元スリープキュー３００に挿入するための例示的手順４００を示す流れ図である。この手順は、スレッドを多次元スリープキューに挿入し、同じスレッドウェイクアップ時間を有する多数のスレッドを、スリープキューから決定性の時間内で除去できるようにし、また、ウェイク時間および優先度によりソートされた、多次元スリープキューのセマンティックスが保持されるようにする。
【００３２】
ブロック４１０で、この手順は、多次元スリープキューに所定のスレッド指定時間について挿入されるべき新しい実行のスレッドを受信する。（図３のスリープキュー３００を参照）。ある時点では、スレッドをスリープキューに格納することができない。したがって、ブロック４１２で、この手順は、新しいスレッドがスリープキューにおいて第１のスレッドとなるかどうかを決定する。そうでなかった場合、この手順はブロック４１６に進み、以下でより詳細に説明する。そうであった場合、４１４で、この手順は、新しいスレッドをスリープキューに第１のスレッドまたはスリープキューの「先頭ノード」として挿入する。
【００３３】
ブロック４１６で、手順４００がすでに、新しいスレッドがスリープキューにおいて第１のスレッドではないと決定した後（ブロック４１２）、この手順は、新しいスレッドのためのスレッド挿入ポイントを多次元スリープキューにおいて確立する。スレッド挿入ポイントは、すでにスリープキューにあるスレッドの各ウェイクアップ時間および特性と比較して、新しいスレッドの特定のウェイクアップ時間および優先度に基づいている。（適切なスレッド挿入ポイントを確立するための例示的態様を、以下でより詳細に図５ないし図９に関して記載する）。ブロック４１８で、この手順は、新しいスレッドをスリープキューへ、確立された挿入ポイントで導入する。
【００３４】
図５は、挿入ポイントを多次元スリープキューにおいて確立するための、図４の手順の例示的ブロック４１６を例示する流れ図である。ブロック５１０で、この手順は、新しいスレッドの指定されたウェイクアップ時間が、多次元スリープキューの第１の次元における他の各スレッドの各ウェイクアップ時間と比較して異なるかどうかを決定する。ブロック５１２で、新しいスレッドのウェイクアップ時間が第１の次元において一意であることが決定された後（ブロック５１０）、この手順は、新しいスレッドのための挿入ポイントを設定して、それを第１の次元に（図３のデータフィールド３０２を参照）、その一意のウェイクアップ時間に基づいてソートする。
【００３５】
ブロック５１４で、すでに、第１の次元における異なるスレッドが新しいスレッドウェイクアップ時間と同じウェイクアップ時間を有すると決定した後（ブロック５１０）、手順４００は、新しいスレッドの優先度が、同じウェイクアップ時間を有する異なるスレッドに対応するスレッド優先度と同じかまたはそれより高いかどうかを決定する。
【００３６】
ブロック５１６で、新しいスレッドが、異なるスレッドと比較して同じまたはそれより高い優先度を有することが決定された後（ブロック５１４）、この手順は、挿入ポイントを、類似のウェイクアップ時間を有するスレッドの第２の次元の時間内で確立する。スレッド優先度が同じであった場合、新しいスレッド挿入ポイントは、異なるスレッドの直前または直後である。この実施例では、新しいスレッドの優先度が異なるスレッドの優先度より高いかまたは同じである場合、挿入ポイントは、異なるスレッドの直前である。
【００３７】
ブロック５１８で、すでに、第１の次元における異なるスレッドが、新しいスレッドウェイクアップ時間と同じウェイクアップ時間を有すると決定した後（ブロック５１０）、すでに新しいスレッドが、異なるスレッドと同じまたはそれより高い優先度を有していないと決定した後（ブロック５１４）、手順４００は、新しいスレッドのより低い優先度に基づいて、同じウェイクアップ時間を有するノードの第２の次元内で挿入ポイントを確立する。
【００３８】
図６は、新しいスレッドを図３の多次元スリープキュー３００に挿入するための、例示的な最適化された手順を示す流れ図である。より詳細には、この実施例は多次元アトミックウォーク（atomic walk）を使用して、新しいスレッドのための適切な挿入ポイントを多次元スリープキューにおいて位置付ける。多次元アトミックウォークは、挿入ポイントの探索を第１のスレッド（ある場合）で開始するか、またはスリープキューにおいて最後に検査されたノードで開始する。
【００３９】
最後に検査されたノード３０２の状態が変化していた場合、探索は、スリープキューの最初から開始する。このようなノード状態の変化は、最後に検査されたノードが最後に検査されてからスリープキューより除去されたかどうか、または、最後に検査されたノードがスリープキューの第１および第２の次元に関連して１次的位置から２次的位置へ移動されたかどうかの決定を含む。（スリープキューの第１および第２の次元に関連する１次的および２次的位置は、図３を参照して詳細に論じた。）最後に検査されたスレッドの状態が変化していない限り、最後に検査されたスレッドと共にスリープキューにおけるスレッドの検査を開始することが有効である。
【００４０】
スレッド挿入ポイントの探索は、スレッド毎または「ノード毎」に実行される。ノード毎とは、オペレーティングシステムが、プロセッサへのシステム排他的アクセスを、単一のノードを検査して、検査されたノードが新しいスレッドの適切な挿入ポイントを多次元スリープキューにおいて識別するかどうかを決定するために必要とされる時間についてのみ、維持するという意味である。単一のノードが検査された後、オペレーティングシステムは、プロセッサへのシステム排他的アクセスを解放する。さらに他のノードを新しいスレッドのための挿入ポイントを識別するために検査する必要がある場合、オペレーティングシステムは、再度、プロセッサへのシステム排他的アクセスをつかみ、次のスレッド／ノード（ある場合）を検査する。この方法において、単一のノード検査の間に、オペレーティングシステムにより、プロセッサが、プリエンプトされたスレッドを実行して、オペレーティングシステムが、スリープキュースケジューリングメカニズムを実行できるようにする。最適化された多次元アトミックウォークスレッド挿入手順６００を以下に説明する。
【００４１】
ブロック６１０で、手順６００は、多次元スリープキューに挿入されるべき新しいスレッドが第１のスレッドであるかどうかを決定する。そうであった場合、ブロック６１２で、この手順は、第１のスレッドをスリープキューに挿入する。
【００４２】
新しいスレッドが第１のスレッドではないと決定された場合（ブロック６１０）、ブロック６１８で、この手順は、最後に検査されたノード／スレッドを、挿入された第１のノードを参照するように設定する（ブロック６１２）。ブロック６２０で、プロセッサへのシステム排他的アクセスをつかむことにより、この手順は、すべての他のスレッドを実行からプリエンプトする。
【００４３】
ブロック６２２で、手順６００は、最後のノードの状態が変化したかどうかを決定する。上述のように、最後のノードの状態が変化するのは、それがすでにスリープキューから除去されている（例えば、すでに実行するために実行キューに挿入されている）場合、または最後のノードが、スリープキューの第１および第２の次元に対して１次的位置から２次的位置へ移動された場合である。
【００４４】
最後のノードの状態が変化していなかった場合（ブロック６２２）、手順６００は、図７に示すブロック７１０へ進行する。これは、次に詳細に述べる。しかし、状態が変化していた場合、ブロック６２４で、オペレーティングシステムは、プロセッサへのシステム排他的アクセスを解放する（ブロック６２０を参照）。この手順はブ、ロック６１４へ進行し、この手順がスレッドがスリープキューからウェイクアップされるべき時間であるかどうかを決定する。そうであった場合、この手順が終了する。そうでない場合、この手順は、ブロック６１８に関して上述したように進行する。
【００４５】
図７は、新しいスレッドを多次元スリープキューに挿入するための例示的手順６００のさらなる態様を示す流れ図である。ブロック７１０で、この手順は、最後に検査されたノード／スレッドがスリープキューにおける挿入ポイントを指示するかどうかを決定する。（最後のノードが挿入ポイントを識別するかどうかを決定するためのブロック７１０の例示的方法を、図８を参照して以下に詳細に述べる。）そうであった場合、ブロック７１２で、この手順は、新しいノード／スレッドを多次元スリープキューへ、指示された挿入ポイントで挿入する。ブロック７１４で、この手順は、プロセッサへのシステム排他的アクセスを解放する（図６のブロック６２０を参照）。
【００４６】
ブロック７１６で、最後に検査されたスレッド／ノードは、新しいスレッドのための挿入ポイントをスリープキューにおいて指示しないと決定された後（ブロック７１０）、手順６００は、最後に検査されたノード／スレッドを、スリープキューにおいて次のノードを指示するように設定する。ブロック７１８で、この手順は、プロセッサへのシステム排他的アクセスを解放する（図６のブロック６２０を参照）。ブロック７２０で、この手順は、スレッドがスリープキューからウェイクアップされる必要があるかどうかを決定する。そうであった場合、この手順が終了する。そうでない場合、この手順は、詳細に上述した図６のブロック６２０へ進行する。
【００４７】
図８は、新しいスレッドを多次元スリープキューに挿入するための多次元アトミックウォーク手順のさらなる態様を示す流れ図である。詳細には、最後に検査されたノードが、スリープキューにおいて挿入ポイントを識別することができる方法を示す。（図７のブロック７１０を参照。）ブロック８１０で、この手順は、新しいノード／スレッドが最後に検査されたノード／スレッドと比較してより早いウェイクアップ時間を有するかどうかを決定する。そうであった場合、挿入ポイントは、新しいスレッドのより早いＷＴに基づいて確立され、新しいスレッドは、スリープキューから最後に検査されたスレッドの前に除去される。
【００４８】
ブロック８１４で、手順６００は、新しいノード／スレッドが最後に検査されたノード／スレッドに比較して同じウェイクアップ時間を有するかどうかを決定する。そうでなかった場合、この手順は、図９のブロック９１０へ進行し、これは、以下に詳細に説明する。しかし、新しいノード／スレッドが、最後に検査されたノード／スレッドと比較して同じウェイクアップ時間を有していた場合、ブロック８１６で、この手順は、新しいノード／スレッドが最後に検査されたノード／スレッドの優先度と比較して同じかまたはそれより高い優先度を有するかどうかを決定する。そうでなかった場合、この手順は、図９のブロック９１０へ進行し、これは以下に詳細に記載する。
【００４９】
新しいノード／スレッドが、最後に検査されたノード／スレッドと比較して同じかまたはそれより高い優先度を有した場合（ブロック８１６）、ブロック８１８で、この手順は、最後に検査されたノード／スレッドの優先度と比較して同じかまたはそれより高い、新しいスレッドの優先度に基づいて、かつ、最後に検査されたノード／スレッドと類似のウェイクアップ時間に基づいて、挿入ポイントを確立する。（ブロック８１８を実行するための例示的方法を、図５のブロック５１６を参照して詳細に述べる。）
【００５０】
図９は、新しいスレッドを多次元スリープキューに挿入するための多次元アトミックウォーク手順のさらなる態様を示す流れ図である。詳細には、次元における最後のノードである最後に検査されたノードが、新しいスレッドのための挿入ポイントをスリープキューにおいて識別することができる方法を示す（図７のブロック７１０、および図８のブロック８１６を参照）。ブロック９１０で、この手順は、最後に検査されたノードが、関連する特定の次元方向における次のノード（またはそれがヌルであること）を指示するかどうかを決定して、多次元スリープキューの１次または２次の次元における他のいずれかの次のノードがあるかどうかを指示する。
【００５１】
最後に検査されたノードが新しいノードと同じウェイクアップ時間を有した（これは、すでに図８のブロック８１４で決定された）場合、新しいノードは、最後のノードよりも低い優先度を有することも決定されている（図８のブロック８１６を参照）。したがって、この手順は、ブロック９１０で、最後に検査されたノードが、第２の次元においてより低い優先度を有するノードに関連する次のノード（例えば、第１および第２の次元に関連して２次的位置を有する次のノード）を指示するかどうかを決定する。
【００５２】
最後に検査されたノードが新しいノードと同じウェイクアップ時間を有していなかった（これは、すでに図８のブロック８１４で決定された）場合、新しいスレッド／ノードは、最後のノードと比較してより遅いウェイクアップ時間を有することも決定されている（図８のブロック８１０を参照）。したがって、この手順は、ブロック９１０で、最後に検査されたノードが、第１の次元における最後のノードより遅いウェイクアップ時間を有するノードに関連する次のノード（例えば、第１および第２の次元に関連して１次的位置を有する次のノード）を指示するかどうかを決定する。
【００５３】
ブロック９１２で、最後のノードが、関連する次元方向における最後のノードであると決定された後、新しいスレッドのための挿入ポイントを確立し、新しいノードがその関連する次元方向における最後のノードであり、かつ、それが多次元スリープキューから、最後に検査されたノードの後に除去される。
【００５４】
ブロック９１４で、最後のノードが関連する次元方向における最後のノードではなく、この手順は、多次元スリープキューにおける新しいスレッドの挿入ポイントがまだ決定できないことを指示する。この手順は、上述した図７のブロック７１０へ進行する。
【００５５】
（スリープキューからの時間決定性のグループスレッド除去）
図１０は、スレッドのグループをスリープキューから、制限のあるまたは決定性の時間において除去するための、例示的手順１０００を示す流れ図である。ブロック１０１０で、この手順は、１または複数の各スレッドの指定されたウェイクアップ時間が終了したかどうかを決定する。（終了したウェイクアップ時間を有するスレッドを、後で実行のために実行キューに挿入するために、スリープキューから除去しなければならない。）ブロック１０１２で、１または複数のスレッドが、スリープキューから、実行キューに挿入するために除去される必要があると決定した後（ブロック１０１０）、この手順は、１または複数のスレッドを、スリープキューから、プロセッサが単一のノードデタッチオペレーションを実行するために要する時間において除去する。したがって、多次元スリープキューからのスレッドのグループ除去は、本質的に時間決定性である。
【００５６】
したがって、図５ないし図１０に示した方法は、多数のスレッドを、スリープキューから決定性の時間内で除去することを提供する。さらに、図１１および図１２を参照して以下に詳細に説明するように、デタッチされたノードのグループを実行キューに関連付けるために要する時間もまた時間決定性であり、これは、単一のノードを実行キューに関連付けるために要する時間にしかならないからである。これは、オペレーティングシステムがプログラム応答の提供において受けるいかなる非決定性遅延が、リアルタイムオペレーティングシステムのリアルタイム態様をおびやかすという理由で重要である。
【００５７】
（例示的実行キュー）
図１１は、ノードのグループを実行キューに決定性の時間内で関連付けるための例示的実行キュー１１００の態様を示すブロック図である。実行キューは、第１のデータフィールド１１０２を含み、これは第１の複数のスレッド１１０４を含む。各スレッド１１０４は、各々のスレッド優先度を含む。第１のデータフィールド内の各スレッド１１０４は、第１のデータフィールドにおける互いのスレッドに対して、セマンティックに基づいてソートされる。このセマンティックは、高い優先度を有するスレッドが、より低い優先度を有するスレッドが実行キューから除去される前に、実行キューから除去されることである。例えば、２の優先度を有するスレッド１１０４−２は、５の優先度を有するスレッド１１０４−３が実行のために除去される前に、実行のために除去される。
【００５８】
実行キュー１１００は、フィールド１１０８−１およびフィールド１１０８−２など、１または複数の第２のデータフィールド１１０８を含む。第２のデータフィールドは、第２の複数のスレッド１１０４を含む。第２のデータフィールド内の各スレッド１１０４は、第２のデータフィールドにおける互いのスレッドに対してソートされ、高い優先度を有するスレッドが第２のデータフィールドから、より低い優先度を有するスレッドが除去される前に、除去されるようになる。
【００５９】
この実施例では、オペレーティングシステムは、２次データフィールドを図３のスリープキュー３００から得る。２次データフィールド３０８をスリープキューから決定性の時間内で除去するためのこのようなスリープキューおよび手順は、図３ないし図１０のデータフィールド３０８を参照して詳細に述べた。
【００６０】
第２のデータフィールド１１０８は、図３のデータフィールド３０８に対応し、ルートスレッド１１０４−２またはルートスレッド１１０４−４など、ルートスレッドを含む。ルートスレッドは特定の優先度を含み、他の各スレッドは、ルートスレッドの優先度に比較してより低い優先度または等しい優先度である優先度を含む。例えば、ルートスレッド１１０４−２は２の優先度を有し、第２のデータフィールド１１０８−１における他の優先度は、２より低い優先度を有する。（この例では、ノード１１０４−２など、０の優先度が最高の優先度であり、ノード１１０４−５など、１５の優先度が最低の優先度である。）
【００６１】
第２のデータフィールド１１０８全体が、第１のデータフィールド１１０２に、リンクリスト挿入ノードオペレーションなど、単一のオペレーションに応答して関連付けられ、そのとき、スレッド１１０４−２などのルートノードは、実行キュー１１００の第１のデータフィールド１１０２に挿入される。リンクリスト挿入ノードオペレーションは、コンピュータプログラミングの分野において周知である。第２のデータフィールドが第１のデータフィールドに、単一のオペレーションに応答して関連付けられるので、任意の数のスレッドを実行キューに関連付けるために要する時間は、実行キューに関連付けられるスレッドの数に無関係である。
【００６２】
さらに、データフィールド１１０８内の各スレッドが実行キューに、単一のオペレーションに応答して関連付けられるので、任意の数のスレッドを実行キューに関連付けるために要する時間は、オペレーションの実行に先立って決定可能である。単一のオペレーションは、１または複数の命令を含むことができ、それぞれがあらかじめ決定可能である。プロセッサは、典型的には、いずれか１つの特定の命令を実行するために所定の時間を必要とするので、スレッドのグループを実行キューに関連付けるためのオペレーションを実行するための時間は、決定性である。時間が決定性であるので、これはしばしば「制限がある」とも称され、あらかじめ境界制限を時間に指定することができるからである。
【００６３】
第１のデータフィールドのキュー１１０２におけるスレッド１１０４のみが、実行するために除去される。より高い優先度のスレッドは、常に第１のデータキューから、より低い優先度のスレッドが第１のデータキューから実行のために除去される前に、実行のために除去される。また、等しい優先度のスレッドは、先入れ先出しのラウンドロビン方式で動作する。スレッド１１０４−２および／またはスレッド１１０４−４などのルートスレッドは、第１のデータキューおよび第２のデータキュー１１０８の一部であることに留意されたい。
【００６４】
この実施例では、ルートノードが実行のために除去された後にのみ、除去されたルートノードに結合された次のノードが、第１のデータキューに、後続の除去および実行のために挿入される。例えば、ルートノード１１０４−２が実行のために除去された後にのみ、次のノード１１０４−６が、第１のデータキューに、後続の除去および実行のために挿入される。次のノードが挿入され、それが第１のデータキューの優先度ソートを維持する。この例では、次のノードが４の優先度を有するので、第１のキューに挿入され、ノード１１０４−３が実行のために除去される前に、実行のために除去されるようになる。しかし、次のノードがノード１１０４−３より低い優先度（２０の優先度など）を有した場合、次のノードは、第１のキューに挿入され、ノード１１０４−５が実行のために除去されるまで、実行のために除去されない。より詳細には、次のノードは、第１のキューに挿入され、第１のデータキューから、ノード１１０４−３ないし１１０４−５が実行のために除去されるまで、除去されない。
【００６５】
この方法では、スレッド１１０４−２および／またはスレッド１１０４−４などのルートノードが第１のデータキュー１１０２から除去された後、ノード１１０４−６および／またはノード１１０４−９などの次のノード（ある場合）が、実際には、各第２のデータキュー１１０８のルートノードになる。これは、次のノードが実際上キューの先頭ノードになるからである。
【００６６】
（実行キューを管理するための例示的手順）
図１２は、スレッドを図１１の実行キュー１１００から除去するための例示的手順１２００を示す流れ図である。ブロック１２１０で、この手順は、スレッドを実行キューから実行するために除去する。上述のように、このスレッドを、図１１のルートノード１１０４−２など、データフィールド１１０８−１における１または複数の他の２次ノードに付加されるルートノードにすることができ、または、ルートノード１１０４−１などのいかなる２次ノードにも付加されないノードにすることもできる。したがって、ブロック１２１２で、この手順は、除去されたノードが２次ノードに付加される（例えば、ルートノード１１０４−２が２次ノード１１０４−６に付加される）かどうかを決定する。そうでなかった場合、この手順が終了する。
【００６７】
そうでない場合、除去されたノードが２次ノードに付加される場合（ブロック１２１２）、ブロック１２１４で、この手順は、２次ノードを実行キューに、優先度を実行キューのセマンティクスに基づいて維持する方法により挿入する。例えば、除去されたノード（ブロック１２１０）が図１１のノード１１０４−４であった場合、２次ノードは、ノード１１０４−９（７の優先度を有する）である。次に、この手順のブロック１２１４は、２次ノード１１０４−９を実行キューに、１５の優先度を有するノード１１０４−５の前に挿入し、それにより２次ノードをルートノードにして、優先度を実行キューのセマンティックスに基づいて維持する。この手順のブロック１２１４が、スリープキューまたは待機キューなど他のいかなるキューへのいかなるアクセスにも関係なく、追加のノードを実行キューに挿入することは重要である。
【００６８】
図１３は、複数のスレッドを実行キューに、決定性の時間内で挿入するための例示的手順１３００を示す流れ図である。ブロック１３１０で、この手順は、複数のスレッドを図１１の実行キューに、決定性の時間内で、図１１を参照して記載したように関連付ける。ブロック１３１２で、この手順は、関連付けられた複数のスレッド内の各スレッド（ブロック１３１０）を実行キューに、追加のスリープキューアクセス（図３のスリープキュー３００を参照）なしに挿入する。
【００６９】
（例示的コンピューティング環境）
図１４は、実行キューを管理するための例示的システムおよび手順を実施することができる、適切なコンピューティング環境１４００の一実施例を例示する。例示的コンピューティング環境１４００は、適切なコンピューティング環境の一実施例でしかなく、実行キューを管理するための例示的システムおよび手順の使用または機能性の範囲に関していかなる限定をも示唆するように意図されるものではない。コンピューティング環境１４００は、例示的コンピューティング環境１４００において例示したコンポーネントのいずれか１つまたは組み合わせに関するいずれかの依存性または要件を有するものとして解釈されるべきではない。
【００７０】
実行キューを管理するための例示的システムおよび手順は、多数の他の汎用または専用コンピューティングシステム環境または構成により動作可能である。実行キューを管理するための例示的システムおよび手順と共に使用するために適切である可能性のある、周知のコンピューティングシステム、環境、および／または構成の実施例には、それだけに限定されるものではないが、パーソナルコンピュータ、サーバコンピュータ、シンクライアント、シッククライアント、ハンドヘルドまたはラップトップデバイス、マルチプロセッサシステム、マイクロプロセッサベースのシステム、セットトップボックス、プログラマブル家庭用電化製品、無線電話、特定用途向け集積回路（ＡＳＩＣ）、ネットワークＰＣ、ミニコンピュータ、メインフレームコンピュータ、上述のシステムまたはデバイスのいずれかを含む分散コンピューティング環境などが含まれる。
【００７１】
例示的実行キュー管理を一般に、プログラムモジュールなど、コンピュータによって実行されるコンピュータ実行可能命令に関連して記載することができる。一般に、プログラムモジュールには、ルーチン、プログラム、オブジェクト、コンポーネント、データ構造などが含まれ、これらが特定のタスクを実行し、または特定の抽象データ型を実施する。例示的実行キュー管理はまた、分散コンピューティング環境において実施することもでき、タスクがリモートの処理デバイスによって実行され、これらが通信ネットワークを介してリンクされる。分散コンピューティング環境では、プログラムモジュールを、メモリ記憶デバイスを含むローカルおよびリモートのコンピュータ記憶媒体に位置付けることができる。
【００７２】
図１４のように、コンピューティング環境１４００は、汎用コンピューティングデバイスをコンピュータ１４１０の形式において含む。コンピュータ１４１０のコンポーネントは、それだけに限定されるものではないが、１または複数のプロセッサまたは処理装置１４１２、システムメモリ１４１４、および、システムメモリ１４１４を含む様々なシステムコンポーネントをプロセッサ１４１２に結合するバス１４１６を含むことができる。
【００７３】
バス１４１６は、いくつかのタイプのバス構造のいずれかの１または複数を表し、これにはメモリバスまたはメモリコントローラ、周辺バス、高速グラフィックポート、および様々なバスアーキテクチャのいずれかを使用するプロセッサまたはローカルバスが含まれる。例として、それだけに限定されるものではないが、このようなアーキテクチャには、Industry Standard Architecture（ＩＳＡ）バス、Micro Channel Architecture（ＭＣＡ）バス、Enhanced ISA（ＥＩＳＡ）バス、Video Electronics Standards Association（ＶＥＳＡ）ローカルバス、および、メザニンバスとしても知られるPeripheral Component Interconnects（ＰＣＩ）バスが含まれる。
【００７４】
コンピュータ１４１０は、典型的には、様々なコンピュータ読み取り可能な媒体を含む。このような媒体は、コンピュータ１４１０によってアクセス可能な、あらゆる使用可能な媒体にすることができ、これには、揮発性および不揮発性媒体、取外し可能および取外し不可能の媒体が含まれる。
【００７５】
図１４では、システムメモリ１４１４は、コンピュータ読み取り可能な媒体を含み、これはランダムアクセスメモリ（ＲＡＭ）１４２０などの揮発性メモリ、および／または読取り専用メモリ（ＲＯＭ）１４１８などの不揮発性メモリの形式によるものである。基本入出力システム（ＢＩＯＳ）１４２２は、起動中など、情報をコンピュータ１４１０内の要素の間で転送するための助けとなる基本ルーチンを含み、ＲＯＭ１４１８に格納される。ＲＡＭ１４２０は、典型的には、データおよび／またはプログラムモジュールを含み、これらはプロセッサ１４１２によって直ちにアクセス可能であり、かつ／またはほどなく動作される。
【００７６】
コンピュータ１４１０はさらに、他の取外し可能／取外し不可能、揮発性／不揮発性のコンピュータ記憶媒体を含むことができる。例としてのみ、図１４は、取外し不可能、不揮発性の磁気媒体（図示せず、典型的には「ハードドライブ」と呼ばれる）から読み取りかつこれに書き込むためのハードディスクドライブ１４２４、取外し可能、不揮発性磁気ディスク１４２８（例えば、「フロッピーディスク」）から読み取りかつこれに書き込むための磁気ディスクドライブ１４２６、および、ＣＤ−ＲＯＭ、ＤＶＤ−ＲＯＭまたは他の光媒体など、取外し可能、不揮発性光ディスク１４３２から読み取りまたはこれに書き込むための光ディスクドライブ１４３０を例示する。ハードディスクドライブ１４２４、磁気ディスクドライブ１４２６、および光ディスクドライブ１４３０は、バス１４１６へ、それぞれ１または複数のインターフェース１４３４によって接続される。
【００７７】
ドライブおよびそれらの関連付けられたコンピュータ読み取り可能な媒体は、コンピュータ１４１０の、コンピュータ読み取り可能な命令、データ構造、プログラムモジュールおよび他のデータの不揮発性記憶装置を提供する。本明細書に記載した例示的環境は、ハードディスク、取外し可能磁気ディスク１４２８および取外し可能光ディスク１４３２を使用するが、磁気カセット、フラッシュメモリカード、デジタルビデオディスク、ランダムアクセスメモリ（ＲＡＭ）、読取り専用メモリ（ＲＯＭ）など、コンピュータによりアクセス可能であるデータを格納することができる他のタイプのコンピュータ読み取り可能な媒体も例示的オペレーティング環境において使用できることを、当業者には理解されたい。
【００７８】
いくつかのプログラムモジュールを、ハードディスク、磁気ディスク１４２８、光ディスク１４３２、ＲＯＭ１４１８またはＲＡＭ１４２０に格納することができ、これには例として、それだけに限定されるものではないが、オペレーティングシステム１４３８、１または複数のアプリケーションプログラム１４４０、他のプログラムモジュール１４４２、およびプログラムデータ１４４４が含まれる。このようなオペレーティングシステム１４３８、１または複数のアプリケーションプログラム１４４０、他のプログラムモジュール１４４２、およびプログラムデータ１４４４（またはこれらのある組み合わせ）は、実行キューを管理するための実装を含むことができる。
【００７９】
ユーザが、コマンドおよび情報をコンピュータ１４１０へ、キーボード１４４６およびポインティングデバイス１４４８（「マウス」など）などの入力デバイスを介して入力することができる。他の入力デバイス（図示せず）には、マイクロフォン、ジョイスティック、ゲームパッド、衛星放送受信アンテナ、シリアルポート、スキャナなどが含まれる可能性がある。これらおよび他の入力デバイスは、処理装置１４１２へ、バス１４１６に結合されるユーザ入力インターフェース１４５０を介して接続されるが、これを、パラレルポート、ゲームポート、またはUniversal Serial Bus（ＵＳＢ）など、他のインターフェースおよびバス構造によって接続することができる。
【００８０】
モニタ１４５２または他のタイプの表示デバイスも、バス１４１６へ、ビデオアダプタ１４５４などのインターフェースを介して接続される。モニタに加えて、パーソナルコンピュータは、典型的には、スピーカおよびプリンタなど、出力周辺インターフェース１４５５を介して接続することができる他の周辺出力デバイス（図示せず）を含む。
【００８１】
コンピュータ１４１０は、ネットワーク環境において、リモートコンピュータ１４６２など、１または複数のリモートコンピュータへの論理接続を使用して動作することができる。リモートコンピュータ１４６２は、本明細書でコンピュータ１４１０に関連して記載した要素および特徴の多数またはすべてを含むことができる。
【００８２】
図１４に示す論理接続は、ローカルエリアネットワーク（ＬＡＮ）１４５７および汎用の広域ネットワーク（ＷＡＮ）１４５９である。このようなネットワーキング環境は、オフィス、企業全体のコンピュータネットワーク、イントラネット、およびインターネットにおいて一般的である。
【００８３】
ＬＡＮネットワーキング環境において使用するとき、コンピュータ１４１０は、ＬＡＮ１４５７へ、ネットワークインターフェースまたはアダプタ１４６６を介して接続される。ＷＡＮネットワーキング環境において使用するとき、コンピュータは、典型的には、モデム１４５８、またはＷＡＮ１４５９を介して通信を確立するための他の手段を含む。モデム１４５８を内部または外部にすることができ、システムバス１４１６へ、ユーザ入力インターフェース１４５０または他の適切なメカニズムを介して接続することができる。
【００８４】
図１４に示すものは、インターネットを介したＷＡＮの特定の実施である。コンピュータ１４１０は、典型的には、モデム１４５８、またはインターネット１４６０を介して通信を確立するための他の手段を含む。モデム１４５８は、内部または外部にすることができ、バス１４１６へ、インターフェース１４５０を介して接続される。
【００８５】
ネットワーク環境では、パーソナルコンピュータ１４１０に関して示したプログラムモジュール、またはその一部を、リモート記憶デバイスに格納することができる。例として、それだけに限定されるものではないが、図１４は、リモートアプリケーションプログラム１４６９を、リモートコンピュータ１４６２のメモリデバイス上に存在するものとして例示する。図示かつ記載したネットワーク接続は例示的であり、通信リンクをコンピュータの間で確立する他の手段を使用できることは理解されよう。
【００８６】
（コンピュータ実行可能命令）
実行キューを管理するための実施を一般に、プログラムモジュールなど、１または複数のコンピュータまたは他のデバイスによって実行されるコンピュータ実行可能命令に関連して記載することができる。プログラムモジュールは、典型的には、ルーチン、プログラム、オブジェクト、コンポーネント、データ構造などが含まれ、これらが特定のタスクを実行し、または特定の抽象データ型を実施する。プログラムモジュールの機能性は、典型的には、図１４の様々な実施形態において示したように結合または分散させることができる。
【００８７】
（コンピュータ読み取り可能な媒体）
実行キューを管理するための実施を、ある形式のコンピュータ読み取り可能な媒体に格納するか、またはそれを介して伝送することができる。コンピュータ読み取り可能な媒体は、コンピュータによってアクセスすることができるいかなる使用可能な媒体にすることもできる。例として、それだけに限定されるものではないが、コンピュータ読み取り可能な媒体には、「コンピュータ記憶媒体」および「通信媒体」が含まれる可能性がある。
【００８８】
「コンピュータ記憶媒体」には、揮発性および不揮発性媒体、取外し可能および取外し不可能の媒体が含まれ、これはコンピュータ読み取り可能な命令、データ構造、プログラムモジュール、または他のデータなどの情報を格納するためのいずれかの方法または技術において実施される。コンピュータ読み取り可能な媒体には、それだけに限定されるものではないが、ＲＡＭ、ＲＯＭ、ＥＥＰＲＯＭ、フラッシュメモリまたは他のメモリ技術、ＣＤ−ＲＯＭ、デジタル多用途ディスク（ＤＶＤ）または他の光記憶装置、磁気カセット、磁気テープ、磁気ディスク記憶装置または他の磁気記憶デバイス、または、所望の情報を格納するために使用することができ、かつコンピュータによってアクセスすることができる他のいかなる媒体も含まれる。
【００８９】
「通信媒体」は、典型的には、コンピュータ読み取り可能な命令、データ構造、プログラムモジュール、または、搬送波または他の移送メカニズムなど、変調データ信号における他のデータを実施する。通信媒体は、いかなる情報搬送媒体をも含む。
【００９０】
「変調データ信号」という用語は、１または複数のその特性セットを有するか、または信号における情報を符号化するような方法において変更された信号を意味する。例として、それだけに限定されるものではないが、通信媒体には、ワイヤードネットワークまたはダイレクトワイヤード接続などのワイヤード媒体、および、音波、ＲＦ、赤外線、および他のワイヤレス媒体などのワイヤレス媒体が含まれる。上記のいずれかの組み合わせも、コンピュータ読み取り可能な媒体の範囲内に含まれる。
【００９１】
（結論）
システム排他的アクセスのために決定性の時間によりスリープキューを管理するための様々な実施について、構造的特徴および／または方法の運用に特定の言葉で述べたが、上述の特許請求の範囲において定義された、システム排他的アクセスアクセスのために制限のある時間により、スリープキューを管理するための記載の主題は、必ずしも記載した特定の特徴または運用に限定されるものでないことを理解されたい。むしろ、特定の特徴および運用は、特許請求の範囲に記載したこの主題を実施するための好ましい形式として開示される。
【図面の簡単な説明】
【００９２】
【図１】オペレーティングシステムによって実行するスレッドをスケジュールするために使用される、従来の実行キューの態様を示すブロック図である。
【図２】オペレーティングシステムによって、実行が再開される前に、スレッドを指定された時間についてスリープさせるために使用される、従来のスレッドスリープキューの態様を示すブロック図である。
【図３】スレッドスケジューリングメカニズムによって、オペレーティングシステムが実行する他のスレッドを決定性の／所定の時間パラメータ内でスケジュールするために使用される、例示的多次元スリープキューを示すブロック図である。
【図４】スレッドを多次元スリープキューに挿入し、同じスレッドウェイクアップ時間を有する多数のスレッドをスリープキューから決定性の時間内で除去できるようにするための、例示的手順を示す流れ図である。
【図５】スレッド挿入ポイントを多次元スリープキューにおいて、オペレーティングシステムが実行する他のスレッドを決定性の時間パラメータ内でスケジュールする方法で、決定／確立するための例示的手順を示す流れ図である。
【図６】スレッドを多次元スリープキューに挿入するための例示的な最適化された手順のさらなる態様を示す流れ図であり、具体的には、最適化された手順が多次元アトミックウォーク手順を使用して、多次元スリープキューにおいてスレッドを挿入するための位置を識別することを示す図である。
【図７】多次元スリープキューにおいてスレッドを挿入するための位置を識別するための例示的多次元アトミックウォーク手順のさらなる態様を示す流れ図であり、具体的には、最後に検査されたスレッドを使用して、多次元スリープキューにおいて新しいスレッド挿入ポイントの探索を開始するための開始位置を識別することを示す図である。
【図８】新しいスレッドを多次元スリープキューに挿入するための多次元アトミックウォーク手順のさらなる態様を示す流れ図であり、具体的には、最後に検査されたノードを使用して、スリープキューにおける挿入ポイントを、最後に検査されたノードのウェイクアップ時間および優先度に基づいて識別することができる方法を示す図である。
【図９】新しいスレッドを多次元スリープキューに挿入するための例示的な最適化された手順のさらなる態様を例示する流れ図であり、具体的には、最後に検査されたノードを使用して、最後に検査されたスレッドが多次元のうち１つにおける最後のスレッドであるとき、スリープキューにおける挿入ポイントを識別する方法を示す図である。
【図１０】除去される必要のあるスレッドの数に無関係である決定性の時間内で、スレッドのグループをスリープキューから除去するための、例示的手順を示す流れ図である。
【図１１】複数のスレッドを、決定性の時間内で実行キューに関連付けることができる、例示的実行キューの態様を示すブロック図である。
【図１２】スレッドを実行キューから除去するための例示的手順の態様を示す流れ図である。
【図１３】実行キューに一度に関連付けられたスレッドの数に無関係である決定性の時間内で、複数のスレッドを実行キューに挿入するための、例示的手順の態様を示す流れ図である。
【図１４】実行キューを管理するための例示的システムおよび手順を実施することができる、適切なコンピューティング環境の態様を示すブロック図である。
【符号の説明】
【００９３】
３００  スリープキュー
３０２  第１の次元
３０４  ノードまたはデータフィールド
３０６  ウェイクアップ時間によりソートされたスレッド
３０８  第２の次元
３１０  優先度に基づいてウェイクアップ時間内でソートされたスレッド
【図１】
0004694595.tif 000002
【図２】
0004694595.tif 000003
【図３】
0004694595.tif 000004
【図４】
0004694595.tif 000005
【図５】
0004694595.tif 000006
【図６】
0004694595.tif 000007
【図７】
0004694595.tif 000008
【図８】
0004694595.tif 000009
【図９】
0004694595.tif 000010
【図１０】
0004694595.tif 000011
【図１１】
0004694595.tif 000012
【図１２】
0004694595.tif 000013
【図１３】
0004694595.tif 000014
【図１４】
0004694595.tif 000015