(57)【特許請求の範囲】
【請求項１】
コンピュータシステムによって実行される際に、前記コンピュータシステムに方法を実行させるコンピュータ実行可能命令を保持するコンピュータ可読記憶媒体であって、前記方法は、
前記コンピュータシステムによって実行可能な命令によるプロセスにおいて第１のスケジューラインスタンスを生成して前記プロセスのタスクの第１のセットを前記コンピュータシステムによって実行させるステップと、
前記コンピュータシステムによって実行可能な命令による前記プロセスにおいて第２のスケジューラインスタンスを生成して前記プロセスのタスクの第２のセットを前記コンピュータシステムによって実行させるステップであって、前記第１のスケジューラインスタンス及び第２のスケジューラインスタンスは前記プロセスの前記タスクの第１のセット及び前記タスクの第２のセットを実行するために前記コンピュータシステムのプロセッサリソースを管理する、ステップと、
前記タスクの第１のセットのうちの１つのタスクを実行する実行コンテキストを前記第１のスケジューラインスタンスから前記第２のスケジューラインスタンスに移動するステップと、
前記タスクの第１のセットのうちの前記１つのタスクを前記第２のスケジューラインスタンスにおいて実行するステップとを備えることを特徴とするコンピュータ可読記憶媒体。
【請求項２】
前記方法は、
前記コンピュータシステムのプロセッサリソースの第１のサブセットに対応する仮想プロセッサの第１のセットを前記第１のスケジューラインスタンスに割り当てるステップと、
前記コンピュータシステムのプロセッサリソースの第２のサブセットに対応する仮想プロセッサの第２のセットを前記第２のスケジューラインスタンスに割り当てるステップとをさらに備えることを特徴とする請求項１に記載のコンピュータ可読記憶媒体。
【請求項３】
前記方法は、
前記仮想プロセッサの第１のセットをハードウェアスレッドの第１のセットにマッピングして前記タスクの第１のセットを前記ハードウェアスレッドの第１のセットに実行させるステップと、
前記仮想プロセッサの第２のセットをハードウェアスレッドの第２のセットにマッピングして前記タスクの第２のセットを前記ハードウェアスレッドの第２のセットに実行させるステップとをさらに備えることを特徴とする請求項２に記載のコンピュータ可読記憶媒体。
【請求項４】
コンピュータシステムが、プロセス内の第１のスケジューラインスタンス及び第２のスケジューラインスタンスを開始するステップであって、前記第１のスケジューラインスタンス及び第２のスケジューラインスタンスは前記プロセスのタスクのセットを実行するためにコンピュータシステムのプロセッサリソースを管理し、前記第１のスケジューラインスタンス及び前記第２のスケジューラインスタンスが、前記コンピュータシステムのプロセスリソースのセットのうちのプロセスリソースの第１のサブセット及び第２のサブセットにそれぞれ割り当てられ、かつ前記プロセスからのタスクの第１のセット及びタスクの第２のセットにそれぞれ割り当てられる、ステップと、
コンピュータシステムが、前記プロセスリソースの第１のサブセットのうちの１つのプロセスリソースによるタスクの実行のために、前記第１のスケジューラインスタンスを用いて前記タスクの第１のセットの最初の１つのタスクをスケジューリングするステップと、
コンピュータシステムが、前記プロセスリソースの第２のサブセットのうちの１つのプロセスリソースによるタスクの実行のために前記タスクの第２のセットのうちの１つのタスクを前記第２のスケジューラインスタンスを用いてスケジューリングするステップと、
コンピュータシステムが、前記第１のスケジューラインスタンス内の前記プロセスリソースの第１のサブセットの前記１つのプロセスリソースにおける第１の実行コンテキスト上の前記タスクの第１のセットの前記１つのタスクの実行に応答して、前記第２のスケジューラインスタンスを開始するステップと、
コンピュータシステムが、前記第１の実行コンテキストを含むように前記第２のスケジューラインスタンスを開始するステップと
を備えることを特徴とする方法。
【請求項５】
前記第１のスケジューラインスタンスに割り当てられた仮想プロセッサの第１のセットのうちの１つの仮想プロセッサにおいて前記タスクの第１のセットのうちの前記１つのタスクを、第１の実行コンテキストに関連付けることにより、前記プロセスリソースの第１のサブセットのうちの前記１つのプロセスリソースによるタスクの実行のために前記タスクの第１のセットの最初の１つのタスクをスケジューリングするステップと、
前記第２のスケジューラインスタンスに割り当てられた仮想プロセッサの第２のセットのうちの１つの仮想プロセッサにおいて前記タスクの第２のセットのうちの前記１つのタスクを、第１の実行コンテキストに関連付けることにより、前記プロセスリソースの第２のサブセットのうちの前記１つのプロセスリソースによるタスクの実行のために前記タスクの第２のセットの前記１つのタスクをスケジューリングするステップとをさらに備え、
前記プロセスリソースの第１のサブセット及び前記プロセスリソースの第２のサブセットは、前記仮想プロセッサの第１のセット及び前記仮想プロセッサの第２のセットを各々含むことを特徴とする請求項４に記載の方法。
【請求項６】
前記タスクの第１のセットのうちの最初の１つのタスクの実行のために前記仮想プロセッサの第１のセットのうちの前記１つの仮想プロセッサを第１のハードウェアスレッドにマッピングするステップと、
前記タスクの第２のセットのうちの１つのタスクの実行のために前記仮想プロセッサの第２のセットのうちの前記１つの仮想プロセッサを第２のハードウェアスレッドにマッピングするステップとをさらに備え、
前記プロセスリソースのセットは、前記第１のハードウェアスレッド及び前記第２のハードウェアスレッドを含むことを特徴とする請求項５に記載の方法。
【請求項７】
前記第１のスケジューラインスタンスを特定する第１のデータを前記第１の実行コンテキストによって保存するステップをさらに備えることを特徴とする請求項４に記載の方法。
【請求項８】
前記第１のスケジューラインスタンスを特定する第２のデータを第１のスケジューラインスタンス内の第２の実行コンテキストによって保存するステップと、
前記第２のスケジューラインスタンスを特定する第３のデータを前記第１の実行コンテキストによって保存するステップとをさらに備えることを特徴とする請求項７に記載の方法。
【請求項９】
前記第１のデータ及び前記第３のデータをスタックとして保存するステップをさらに備えることを特徴とする請求項８に記載の方法。
【請求項１０】
前記第２のスケジューラインスタンス内の前記第１の実行コンテキストを前記第１のスケジューラインスタンスに戻すステップをさらに備えることを特徴とする請求項４に記載の方法。
【請求項１１】
前記第２のスケジューラインスタンスの開始の後に前記プロセスリソースの第１のサブセットの前記１つのプロセスリソースによるタスクの実行のために前記タスクの第１のセットの次の１つのタスクをスケジューリングするステップをさらに備えることを特徴とする請求項４に記載の方法。
【請求項１２】
前記プロセスは、アプリケーション、ライブラリ機能、オペレーティングシステムサービスのうちの１つであることを特徴とする請求項４に記載の方法。
【発明の詳細な説明】
【技術分野】
【０００１】
コンピュータシステム内で実行されるプロセスは、しばしば、異なった優先度をもつタスクを有する。要求の通りに動作するため、プロセスは、かなりのオーバーヘッドを消費して、タスクの優先度に基づいて適切なプロセスリソースがタスクに割り当てられることを保証し得る。このオーバーヘッドは、コンピュータシステム内で実行するプロセスのタスクをスケジューリングするスケジューラの使用を含み得る。
【背景技術】
【０００２】
単一のスケジューラを有するプロセスは、通常はプロセスによって生成された全てのタスク間においてプロセスリソースを共有し、同一のスケジューリングポリシを全てのタスクに適用する。一般的に、プロセスは、タスクのサブセットに異なったスケジューリングポリシを適用することによって、タスクのサブセットに直接優先順位をつける能力を有していない。
【発明の概要】
【発明が解決しようとする課題】
【０００３】
開発者は、タスクのサブセットをパーティションに分けて当該パーティションをオペレーティングシステムによって提供された実行コンテキストに割り当てるが、この方法は、リソースが動的に割り当てられるコンピュータシステム内において最適ではないかもしれない複雑な基礎構造を設計することを開発者に強制するだろう。
【課題を解決するための手段】
【０００４】
この発明の概要は、発明を実施するための形態において以下でさらに説明されるコンセプトのいくつかを単純な態様で紹介するために提供される。この発明の概要は、本発明の重要な特徴または本質的な特徴を特定することを目的としておらず、また、本発明の範囲を限定するために使用されることも目的としていない。
【０００５】
プロセス内で複数のスケジューラインスタンスを生成するコンピュータシステムのランタイム環境が提供される。スケジューラインスタンスの各々は、割り当てられたプロセスリソースを含み、かつ実行タスクのセットを割り当てられる。スケジューラインスタンスは、割り当てられたプロセスリソースを用いて実行タスクをスケジューリングして、プロセスの作業を実行する。さらに、１つのスケジューラインスタンス内のタスクは、ネストされているスケジューラインスタンスを生成し得る。
【０００６】
添付の図面は、実施形態のさらなる理解をもたらすために含まれ、本明細書の一部に包含されかつ本明細書の一部を構成する。添付の図面は実施形態を示し、かつ本発明の説明と共に本発明の原理を明らかにする。他の実施形態及び実施形態の多くの意図された利点は、以下の発明を実施するための形態を参照することによってさらに良く認識されて容易に理解されるだろう。添付の図面の要素は、必ずしも互いに正しい縮尺で示されていない。同一の参照符号は対応する同様の部分を指す。
【図面の簡単な説明】
【０００７】
【図１】複数のスケジューラインスタンスを含むプロセスを有するランタイム環境の実施形態を示すブロック図である。
【図２】プロセス内で複数のスケジューラインスタンスを生成する方法の実施形態を示すフロー図である。
【図３】実行コンテキストをプロセス内のスケジューラインスタンスに割り当てる方法の実施形態を示すフロー図である。
【図４Ａ】プロセス内でネストされているスケジューラインスタンスの実施形態を示すブロック図である。
【図４Ｂ】プロセス内でネストされているスケジューラインスタンスの実施形態を示すブロック図である。
【図５】プロセス内でネストされているスケジューラインスタンスを生成する方法の実施形態を示すフロー図である。
【図６】スケジューラ内で使用するスケジュールグループの実施形態を示すブロック図である。
【図７】複数のスケジューラインスタンスを含むプロセスを有するランタイム環境を実装するコンピュータシステムの実施形態を示すブロック図である。
【発明を実施するための形態】
【０００８】
以下の発明を実施するための形態において、添付の図面が参照され、これらは本明細書の一部を形成し、かつこれらにおいて例示の目的で本発明が実施され得る特定の実施形態が示される。これに関し、方向の用語の「上」、「下」、「前」、「後」、「先頭」、「最後」等は、説明されている図面（単数または複数）の配向を基準にして使用される。実施形態の構成要素が様々に異なった配向で配され得る故に、方向の用語は、例示の目的で使用され、決して限定をするものではない。他の実施形態が使用されてもよく、かつ構造的または論理的変更が本発明の範囲から逸脱することなくなされ得る。従って、以下の詳細な説明は、限定するものとして理解されるべきではなく、本発明の範囲は添付の特許請求の範囲によって画定される。
【０００９】
本明細書に記載されている様々な例示の実施形態の特徴は、特に言及しなくとも、互いに組み合わせられ得ると理解されるべきである。
【００１０】
図１は、プロセス１２Ａを有するランタイム環境１０の実施形態を示すブロック図である。プロセス１２Ａは、複数のスケジューラインスタンス２２（１）−２２（Ｎ）を含み、ここでＮは２以上の整数であり、Ｎ番目のスケジューラインスタンス２２（Ｎ）を示す。
【００１１】
ランタイム環境１０は、図７に示されかつ以下でさらに詳細に説明されるコンピュータシステム１００等のコンピュータシステム内の動作のランタイムモードを示しており、ここにおいてコンピュータシステムは命令を実行している。コンピュータシステムは、図７に示されかつ以下でさらに詳細に説明されるランタイムプラットフォーム１２２等のランタイムプラットフォームからランタイム環境１０を生成する。
【００１２】
ランタイム環境１０は、少なくとも１つの開始されているプロセス１２Ａ、リソースマネージメントレイヤ１４、及びハードウェアスレッド１６（１）−１６（Ｍ）のセットを含み、ここでＭは１以上の整数でありかつＭ番目のハードウェアスレッド１６（Ｍ）を示す。ランタイム環境１０は、リソースマネージメントレイヤ１４及びハードウェアスレッド１６（１）−１６（Ｍ）を使用して、プロセス１２Ａと共存する任意の他のプロセスからのタスク（図示せず）とともに、プロセス１２Ａからのタスクが実行されることを可能とする。ランタイム環境１０は、リソースマネージメントレイヤ１４とともに動作して、プロセス１２Ａがコンピュータシステムのプロセッサ及び他のリソース（例えば、ハードウェアスレッド１６（１）−１６（Ｍ））を取得することを許可する。また、ランタイム環境１０は、リソースマネージメントレイヤ１４とともに動作して複数のスケジューラインスタンス２２（１）−２２（Ｎ）がプロセス１２Ａ内に共存することを許可する。
【００１３】
ランタイム環境１０は、スケジューラインスタンス２２の各々を生成するスケジューラ機能を含む。１つの実施形態において、スケジューラ機能は、スケジューラアプリケーションプログラミングインタフェース（ＡＰＩ）として実装される。他の実施形態において、スケジューラ機能は、適切なプログラムミング構成を用いて実装されてもよい。起動されると、スケジューラ機能は、プロセス１２Ａまたは他の共存するプロセス内のスケジューラインスタンス２２を生成し、各々のスケジューラインスタンス２２が動作して１つまたは複数のハードウェアスレッド１６（１）−１６（Ｍ）による実行のためにプロセス１２Ａのタスクをスケジューリングする。ランタイム環境１０は、スケジューラ機能がもたらす機能を認識している付随ツールを用いてアプリケーションまたはライブラリ開発者がプログラム（例えばプロセス１２Ａ）の中で表現する非常に細かい同時並行性を利用し得る。
【００１４】
プロセス１２Ａは、１つまたは複数の実行コンテキスト（すなわち、スレッド）をホストする（host）処理リソース及び他のリソースの割り当てを含む。プロセス１２Ａは、コンピュータシステム内の処理リソース及び他のリソース（例えば、ハードウェアスレッド１６（１）−（Ｍ））へのアクセス権をリソースマネージメントレイヤ１４から取得する。プロセス１２Ａは、処理リソース及び他のリソースを使用してタスクを実行させる。
【００１５】
プロセス１２Ａは、様々な長さのタスクにおける作業を生成し、ここでタスクの各々はスケジューラインスタンス２２内の実行コンテキストと関連付けられる。タスクの各々は、コンピュータシステムによって実行される際に作業の単位を実行する一連の命令を含む。実行コンテキストの各々は、割り当てられた処理リソース上で関連付けられたタスクを実行するスレッド（または子プロセス等の類似のＯＳ概念）を生成する。実行コンテキストの各々は、プログラム状態情報及びマシン状態情報を含む。実行コンテキストは、実行すべく出されるタスクがもはや無い場合に終了してもよい。タスクの各々に関して、ランタイム環境１０及び／もしくはプロセス１２Ａは、実行のためにスケジューリングされるスケジューラインスタンス２２にタスクを割り当てるか、さもなければスケジューラインスタンス２２を使用しないでタスクを実行させる。
【００１６】
プロセス１２Ａは、スタックモデルまたはインタープリタモデル等の任意の適切な実行モデルに基づいてコンピュータシステム内で動作するように構成されてもよく、アプリケーション、ライブラリ機能、またはオペレーティングシステムサービス等の適切なタイプのコードを表してもよい。プロセス１２Ａは、画定されているメモリアドレス空間を含む割り当てられたリソースのセットに関連付けられているプログラム状態及びマシン状態を有する。プロセス１２Ａは、ランタイム環境１０内の任意の共存するプロセスから自立してまたは実質的に自立的して実行されてもよい。従って、プロセス１２Ａは、共存するプロセスのプログラム状態または共存するプロセスに割り当てられた任意のリソースのマシン状態を不利には変更しない。同様に、共存するプロセスは、プロセス１２Ａのプログラム状態またはプロセス１２Ａに割り当てられた任意のリソースのマシン状態を不利には変更しない。
【００１７】
リソースマネージメントレイヤ１４は、１つまたは複数のハードウェアスレッド１６をプロセス１２Ａに割り当てることによってプロセスリソースをプロセス１２Ａに割り当てる。リソースマネージメントレイヤ１４は、図１の実施形態において、コンピュータシステム（図１には図示せず）のオペレーティングシステムから分離して存在する。他の実施形態において、リソースマネージメントレイヤ１４またはリソースマネージメントレイヤ１４のいくつかもしくは全ての機能は、オペレーティングシステム内に含まれてもよい。
【００１８】
ハードウェアスレッド１６は、コンピュータシステムのプロセッサパッケージのセットの実行コア内または１つもしくは複数のプロセッサパッケージ（例えば、図７にしめされかつ以下にさらに詳細に説明されるプロセッサパッケージ）の実行コア内に存在している。ハードウェアスレッド１６は、他の実行コアから独立してかまたは実質的に独立して命令を実行するように構成されており、かつマシン状態を含む。ハードウェアスレッド１６は、単一のプロセッサパッケージ内に含まれていてもよく、複数のプロセッサパッケージに亘って分散させられていてもよい。プロセッサパッケージ内の実行コアの各々は、１つまたは複数のハードウェアスレッド１６を含んでいてもよい。
【００１９】
プロセス１２Ａは、非明示的にまたは明示的に、スケジューラインスタンス２２（１）−２２（Ｎ）をランタイム環境１０によって提供されているスケジューラ機能を介して生成させる。スケジューラインスタンス２２は、プロセス１２Ａがコンピュータシステム内またはプログラミング言語特性内で利用可能なＡＰＩを使用する際に、非明示的に生成されてもよい。ＡＰＩまたはプログラム言語特性に対応して、ランタイム環境１０は、デフォルトポリシ３７を有するスケジューラインスタンス２２を生成する。スケジューラインスタンス２２を明示的に生成するために、プロセス１２Ａは、ランタイム環境１０によって提供されたスケジューラ機能を起動してもよく、かつスケジューラインスタンス２２に関する１つまたは複数のポリシ３７を特定してもよい。プロセス１２Ａは、その実行を通して、開始されたスケジューラインスタンス２２の数を増加させるかまたは減少させてもよい。
【００２０】
スケジューラインスタンス２２の各々は、リソースマネージメントレイヤ１４とやりとりを行って、プロセス１２に透過的な態様にてコンピュータシステムのプロセス及び他のリソースを取り決める。リソースマネージメントレイヤ１４は、スケジューラインスタンス２２の供給及び需要並びに任意のポリシに基づいて、ハードウェアスレッド１６をスケジューラインスタンス２２に割り当てる。
【００２１】
図１に示される実施形態において、スケジューラインスタンス２２は、潜在ハードウェアスレッド１６の抽象概念を生成する仮想プロセッサ３２を生成することによって処理リソースを管理する。スケジューラインスタンス２２の各々は、仮想プロセッサ３２（１）−３２（Ｐ）のセットを含み、ここでＰの各々は１以上の整数であり、かつスケジューラインスタンス２２の中でＰ番目の仮想プロセッサ３２（Ｐ）を示している。スケジューラインスタンス２２の各々は、プロセス１２Ａの実行において様々なポイントにある同数または異なった数の仮想プロセッサ３２を有してもよい（すなわち、Ｐ（１）−Ｐ（Ｍ）の各々は、プロセス１２Ａの実行の間、任意の他のＰ（１）−Ｐ（Ｍ）よりも小さいか、大きいか、または等しくてもよい）。スケジューラインスタンス２２の各々は、仮想プロセッサ３２の各々をハードウェアスレッド１６にマッピングすることによって、仮想プロセッサ３２をハードウェアスレッド１６上に多重化する。スケジューラインスタンス２２の各々は、２以上の仮想プロセッサ３２を特定のハードウェアスレッド１６上にマッピングするが、１のハードウェアスレッドのみを仮想プロセッサ３２の各々にマッピングしてもよい。他の実施形態において、スケジューラインスタンス２２の各々は、他の適切な方法でプロセスリソースを管理して、ハードウェアスレッド１６によってプロセス１２の命令を実行させる。
【００２２】
スケジューラインスタンス２２の実行コンテキストのセットは、各々が、関連付けられているタスク３６（１）−３６（Ｐ）を有する実行コンテキスト３４（１）−３４（Ｐ）のセットを含み、タスク３６（１）−３６（Ｐ）は、仮想プロセッサ３２（１）−３２（Ｐ）の各々によって、かつプロセス１２Ａの実行の間の任意のポイントにおいて０以上の実行コンテキスト３８のセットによって実行される。実行コンテキスト３４及び３８の各々は、実行コンテキスト３４または３８が実行されているか、実行可能（例えば、ロックが解除されるかまたはスケジューラインスタンス２２に追加されることに応じて）か、またはブロックされているかどうかを示す状態情報を含む。実行されている実行コンテキスト３４は、仮想プロセッサ３２に付随させられており、現在実行されている。実行可能な実行コンテキスト３８は、関連付けられているタスク４０を含み、利用可能な仮想プロセッサ３２によって実行される準備ができている。ブロックされている実行コンテキスト３８も。関連付けられているタスク４０を含み、他の実行コンテキスト３４によって生成されているかまたは他の実行コンテキスト３８によって生成されるだろうデータ、メッセージまたはイベントを待っている。
【００２３】
仮想プロセッサ３２上で実行されている実行コンテキスト３４の各々は、その実行の過程で、任意の適切な方法で構成された追加タスク４２を生成してもよい（例えば、作業キュー（図１には図示せず）に追加される）。作業は、ランタイム環境１０によって提供されるアプリケーションプログラミングインタフェース（ＡＰＩ）か、または１つの実施形態においてプログラミング言語特性及び対応するツールを使用することによって生成されてもよい。プロセスリソースがスケジューラインスタンス２２に利用可能である場合、タスクは実行コンテキスト３４または３８に割り当てられ、実行コンテキスト３４または３８は、新しいタスクを取得する前に、仮想プロセッサ３２上での完了またはブロッキングポイント（例えば、完了のためにメッセージまたは奪われた子タスクを待つ）まで当該タスクを実行する。タスクがブロッキングされない場合、当該タスクは再スケジューリングされて、最適に再利用され得るデータをメモリ階層（すなわちキャッシュ階層）が既に含むことを期待して、可能ならばブロッキング前にタスクが実行されたハードウェアスレッド１６上の仮想プロセッサ３２の選択に与えられた優先度を有する利用可能な仮想プロセッサ上で実行される。仮想プロセッサ３２上で実行される実行コンテキスト３４は、他の実行コンテキスト３８によって使用されるデータ、メッセージまたはイベントを生成することによって他の実行コンテキスト３８を非ブロック化してもよい。
【００２４】
スケジューラインスタンス２２の各々の中のタスクの各々は実現されてもよく（例えば、実現タスク３６及び４０）、このことは、実行コンテキスト３４または３８が当該タスクに付随させられていたか付随するだろうこと及び当該タスクの実行準備ができていることを示す。実現されるタスクは、通常は、非ブロック化された実行コンテキスト及びスケジューリングされたエージェントを含む。実現されていないタスクは、未実現と称される。未実現タスク（例えば、タスク４２）は、親タスクの実行によって生成された子タスクとして生成されてもよく、並行構成（例えば、並行、何かに対して並行、開始、及び終了）で生成されてもよい。スケジューラインスタンス２２の各々は、以下で説明される図６の実施形態に示されるように、従属タスク（すなわち、未実現タスク）に関する作業奪取キューのリストと共に、実行コンテキストを有する論理的に独立したタスク（すなわち、実現タスク）に関して同期化されたコレクション（collection）（例えば、スタック及び／またはキュー）内に組織化され得る。
【００２５】
仮想プロセッサ３２上で実行されている実行コンテキスト３４に関連付けられているタスク３６の完了、ブロッキング、または他の中断（例えば、明示的な放棄または強制された無効）において、仮想プロセッサ３２は、他の実現されるタスク４０または未実現タスク４２を実行可能となる。スケジューラインスタンス２２は、実行可能実行コンテキスト３８または未実現タスク４２を検索して、任意の適切な方法にて、実行のために利用可能な仮想プロセッサ３２に付随させる。例えば、スケジューラインスタンス２２は、未実現タスク４２を検索して実行する前に、最初に実行可能実行コンテキスト３８を検索して実行する。スケジューラインスタンス２２の各々は、スケジューラインスタンス２２の全てのタスク及び実行コンテキスト３８が実行されるまで、実行のために利用可能な仮想プロセッサ３２に実行コンテキスト３８を付随させ続ける。
【００２６】
スケジューラインスタンス２２は、異なったタイプの実行コンテキストを有し得る。プロセス１２Ａがウィンドウズプロセスであるウィンドウズオペレーティングシステムを含むコンピュータシステムの実施形態において、ウィンドウズプロセス内の異なったスケジューラインスタンス２２は、スレッド実行コンテキスト及びファイバ実行コンテキスト（fiber execution context）を含み得る。従って、スレッド実行コンテキスト及びファイバ実行コンテキストは、同一のウィンドウズズプロセス内に存在し得る。
【００２７】
タスクの実行の前に、スケジューラインスタンス２２の各々は、ランタイム環境１０またはオペレーティングシステム（例えば、図７のＯＳ１２０）から実行コンテキスト３４及び３８を取得する。利用可能な仮想プロセッサ３２は、実行コンテキスト３４を検索して実行し、タスクの実行を開始する。仮想プロセッサ３２は、実行コンテキスト３４に関連付けられているタスクの完了、ブロッキング、または他の中断に応じて、再度利用可能となる。仮想プロセッサ３２が利用可能になった際、現在の実行コンテキスト３４によって実行されている前のタスク３６が完了した場合、仮想プロセッサ３２は、現在の実行コンテキストの延長として、実行可能実行コンテキスト３８に切換えるかまたは次のタスク４０もしくは４２を実行する。
【００２８】
１つの実施形態において、スケジューラインスタンス２２は、互いに自立して動作しかつ下方の共通のリソースマネージメントレイヤ１４と通信する。他の実施形態において、スケジューラインスタンス２２は、リソースマネージメントレイヤ１４と通信しかつ互いに通信し、スケジューラインスタンス２２の１つのインスタンスにおいてスケジューリングされた作業が、他のスケジューラインスタンス２２においてスケジューリングされた作業と連携することを可能とする。
【００２９】
スケジューラインスタンス２２は、各々同一のまたは異なったポリシ３７を有してもよい。ランタイム環境１０及び／またはプロセス１２Ａは、スケジューラインスタンス２２が開始された場合、スケジューラインスタンス２２に対するポリシ３７を特定する。各々のスケジューラインスタンス２２のポリシ３７は、
１）割り当てられる処理リソースの数（例えば、最小数、所望数、及び／または最大数）
２）共有タイプ（例えば、排他的または共有可能）
３）優先度タイプ（例えば、高度、中度、または低度）
４）フェアネスタイプ（fairness type）（例えば、キャッシュローカル性の向上またはフェアネスの向上）
５）動作タイプ（例えば、不正作業（rogue chore）閾値、アイドル閾値、フラグメンテーション閾値、及び／または他のリソース再割り当て動作）
６）実行順序タイプ（例えば、ラストインファーストアウト（ＬＩＦＯ）順序、ファーストインファーストアウト（ＦＩＦＯ）順序、またはサービスの品質または順序保証のためのデフォルト順序）、及び
７）トポロジータイプ（すなわち、特定のローカル特性を指定する情報（例えば、コンピュータシステム内の関連するプロセスリソースのセット）及び／または特定のリソース特性を指定する情報（例えば、コンピュータシステム内で選択されたチップセット機能を有するプロセスリソースのセット））
のうちの１つまたは複数を特定してもよい。
【００３０】
プロセス１２Ａに加えて、ランタイム環境１０内の他の共存プロセス（図示せず）が、０以上のスケジューラインスタンス２２を含んでもよく、これらのスケジューラインスタンス２２はプロセスの実行を通して増加または減少してもよい。
【００３１】
図２は、プロセス１２Ａ内の複数のスケジューラインスタンス２２を生成する方法の実施形態を示すフロー図である。図２の方法は、１つの実施形態においてコンピュータシステム内のプロセス１２Ａ及び／またはランタイム環境１０によって非明示的または明示的に実行され得る。
【００３２】
少なくとも第１及び第２のスケジューラインスタンス２２（１）及び２２（２）が、ブロック５２に示されているようにプロセス１２Ａ内で生成される。スケジューラインスタンス２２（１）及び２２（２）は、各々コンピュータシステムによって実行可能な命令を含み、ランタイム環境１０及び／またはプロセス１２Ａによって割り当てられた１つまたは複数のタスクをプロセスリソースのサブセットの各々において実行させる。プロセスリソースのセットは、ハードウェアスレッド１６を含み、１つの実施形態において、リソースマネージメントレイヤ１４によって割り当てられた仮想プロセッサ３２も含む。リソースマネージメントレイヤ１４が仮想プロセッサ３２のセットをスケジューラインスタンス２２（１）及び２２（２）に割り当てる場合、仮想プロセッサ３２のセットは、コンピュータシステムのプロセッサリソース（すなわち、ハードウェアスレッド１６）のサブセットの各々を示す。従って、リソースマネージメントレイヤ１４は、仮想プロセッサ３２のセットの各々をハードウェアスレッド１６の個別のセットにマッピングする。
【００３３】
上述のように、スケジューラインスタンス２２（１）及び２２（２）は、ランタイム環境１０のスケジューラ機能を使用して、非明示的または明示的にランタイム環境１０及び／またはプロセス１２Ａによって開始されてもよい。スケジューラインスタンス２２（１）及び２２（２）は、プロセス１２Ａの実行の間に、同時に開始されてもよいし（例えば、プロセス１２Ａが開始された時）、別の時間に実行されてもよい。さらに、スケジューラインスタンス２２（１）及び２２（２）は、同一または異なったポリシ３７を有してもよい。
【００３４】
ランタイム環境１０及び／またはプロセス１２Ａは、実行のために１つまたは複数のタスクのセットをスケジューラインスタンス２２（１）に割り当て、実行のために１つまたは複数のタスクをスケジューラインスタンス２２（２）に割り当てる。ランタイム環境１０及び／またはプロセス１２Ａは、図３を参照して以下にさらに詳細に説明されるスケジューラインスタンス２２（１）及び２２（２）の各々のポリシ３７に基づいて、または他の基準に基づいて、タスクのセットを割り当ててもよい。
【００３５】
図２を参照すると、タスクの第１のセットが、ブロック５４において示されているようにスケジューラインスタンス２２（１）によって実行のためにスケジューリングされる。スケジューラインスタンス２２（１）の仮想プロセッサ３２が利用可能になると、スケジューラインスタンス２２（１）は、実行コンテキスト３４を当該利用可能な仮想プロセッサ３２に付随させ、スケジューラインスタンス２２（１）内のタスクのセットからのタスクを実行コンテキスト３４に関連付けて、下部にあるハードウェアスレッド１６を介して仮想プロセッサ３２によってタスクを実行させる。スケジューラインスタンス２２（１）は、スケジューラインスタンス２２（１）内の全てのタスクが実行されるまで、タスクのセットからのタスクの実行を継続する。
【００３６】
同様に、タスクの第２のセットは、ブロック５６において示されるように、スケジューラインスタンス２２（２）によって実行のためにスケジューリングされる。スケジューラインスタンス２２（２）の仮想プロセッサ３２が利用可能になると、スケジューラインスタンス２２（２）は、実行コンテキスト３４を当該利用可能な仮想プロセッサ３２に付随させ、スケジューラインスタンス２２（２）内のタスクのセットからのタスクを実行コンテキスト３４に関連付けて、下部にあるハードウェアスレッド１６を介して仮想プロセッサ３２によってタスクを実行させる。スケジューラインスタンス２２（２）は、スケジューラインスタンス２２（２）内の全てのタスクが実行されるまで、タスクのセットからのタスクの実行を継続する。
【００３７】
ここで、図２の方法の使用例が１つの実施形態に従って説明される。この例において、プロセス１２Ａは、オーディオ及びビデオ処理を実行するアプリケーションであり、オーディオ処理がビデオ処理に優先する。従って、プロセス１２Ａは、多数のプロセスリソースを有する第１のスケジューラインスタンス２２（１）を開始して、オーディオ処理を実行し、少数のプロセスリソースを有する第２のスケジューラインスタンス２２（２）を開始して、ビデオ処理を実行する。ランタイム環境１０は、オーディオ処理に関連するタスクのセットを、プロセス１２Ａによって指定されているようにスケジューラインスタンス２２（１）に割り当て、ビデオ処理に関連するタスクのセットをプロセス１２Ａによって指定されているようにスケジューラインスタンス２２（２）に割り当てる。プロセス１２Ａに割り当てられるプロセスリソースの数が変わる場合、ランタイム環境１０はスケジューラインスタンス２２（１）及び／または２２（２）に割り当てられているプロセスリソースの数を調整して、スケジューラインスタンス２２（１）が高い優先度のオーディオ処理に十分なプロセスリソースを有することを保証してもよい。    
図３は、１つまたは複数のタスクのセットをプロセス１２Ａ内のスケジューラインスタンス２２に割り当てる方法の実施形態を示すフロー図である。ランタイム環境１０及び／またはプロセス１２Ａが、タスクのセットが実行のためにスケジューラインスタンス２２に割り当てられるべきと判定する場合、ランタイム環境１０及び／またはプロセス１２Ａは、ブロック６２に示されているように全てのスケジューラインスタンス２２のポリシ３７を識別し、ブロック６４に示されているように当該タスクのセットをポリシ３７に基づいてスケジューラインスタンス２２に割り当てる。
【００３８】
ランタイム環境１０は、プロセス１２Ａによって特定される１つまたは複数のポリシに厳密に適合した１つまたは複数のポリシ３７を有するスケジューラインスタンス２２を要求する能力をプロセス１２Ａにもたらす。ランタイム環境１０は、プロセス１２Ａ内のスケジューラインスタンス２２を検索して、設定され得る予め定義されているヒューリスティクスに基づいてスケジューラインスタンス２２を選択する。
【００３９】
上述の例を再度参照すると、プロセス１２Ａがオーディオ及びビデオ処理を実行する場合、ランタイム環境１０は、スケジューラインスタンス２２（１）及び２２（２）のポリシ３７の各々から、スケジューラインスタンス２２（１）がスケジューラインスタンス２２（２）よりも多いプロセスリソースを有するように設定されていることを判定し得る。従って、ランタイム環境１０は、プロセス１２Ａによって特定されているように、より高い優先度のオーディオ処理タスクをスケジューラインスタンス２２（１）に割り当ててもよく、プロセス１２Ａによって特定されているように、より低い優先度のビデオ処理をスケジューラインスタンス２２（２）に割り当ててもよい。
【００４０】
図１−３を参照して上述された複数のスケジューラインスタンス２２の使用は、プロセス１２Ａ内の作業の区分におけるポリシ制限の特定方法を有利に提供し得る。プロセス開発者は、プロセス内の各々が異なったポリシ３７を有するいくつかのスケジューラインスタンス２２を生成することを選択してもよく、かつ作業の単位を当該作業の性質に依存して適切なスケジューラインスタンス２２上に持ってきてもよい。開発者は、スケジューラインスタンス２２のポリシ３７のパラメータを調整して、要望通りにプロセスのスループットまたは応答性を変化させてもよい。
【００４１】
スケジューラインスタンス２２に割り当てられるタスクのセットに加えて、プロセス１２Ａは、スケジューラインスタンス２２に割り当てられているプロセスリソースから分離されているプロセスリソースへのアクセス権を取得してもよい。例えば、ランタイム環境１０は、スケジューラインスタンス２２に割り当てられるプロセス１２Ａに加えて、リソースマネージメントレイヤ１４が提供する仮想プロセッサ３２に割り当てられるプロセス１２Ａを許容してもよい。ランタイム環境１０及び／またはプロセス１２Ａは、タスクの選択されたセットを、これらの分離されているプロセスリソースにおいて実行させて、選択された実行コンテキスト３４をスケジューラインスタンス２２を使用しないで実行させてもよい。
【００４２】
図４Ａ−４Ｂ及び５の実施形態に示されているように、ランタイム環境１０は、実行コンテキスト３４が、既存のスケジューラインスタンス２２（１）内に新しいスケジューラインスタンス２２（２）を動的にネストすることも可能にする。既存のスケジューラインスタンス２２（１）内の実行コンテキスト３４（２）上で実行されているタスク３６（２）は、ランタイム環境１０のスケジューラ機能を起動してスケジューラインスタンス２２（２）の新しいインスタンスを生成してもよい。図４Ａ−４Ｂは、プロセス１２Ｂ内で並列して存在するスケジューラインスタンス２２（１）及び２２（２）の実施形態を示すブロック図であり、スケジューラインスタンス２２（１）の実行コンテキスト３４（２）は、スケジューラインスタンス２２（１）内にスケジューラインスタンス２２（２）をネストしている。図５は、プロセス１２Ｂにおいて最初はスケジューラ２２（１）に属している実行コンテキスト３４上でネストされるスケジューラインスタンス２２（２）を生成する方法の実施形態を示すフロー図である。
【００４３】
図４Ａ及び図５を参照すると、ブロック７２に示されているように、第１のスケジューラインスタンス２２（１）がプロセス１２Ｂ内で生成される。図４Ａの例において、スケジューラインスタンス２２（１）は、実行コンテキスト３４（１）及び３４（２）を各々実行する仮想プロセッサ３２（１）及び３２（２）のセットを含む。スケジューラインスタンス２２（１）は、実行されるのを待っている実行コンテキスト３８及びポリシ３７のプールも含んでいる。実行コンテキスト３４（１）−３４（２）及び３８の各々は、スケジューラインスタンス２２（１）を特定するデータ４４（１）を含む。データ４４（１）は、実行コンテキスト３４（１）−３４（２）及び３８の各々がスケジューラインスタンス２２（１）に割り当てられた結果、実行コンテキスト３４（１）−３４（２）及び３８の各々とともに保存される。データ４４（１）は、実行コンテキスト３４（１）−３４（２）及び３８の各々のローカル記憶領域内のスタック内に保存されて、１つの実施形態において当該スタック上に持ってこられている第１のエントリを示してもよい。
【００４４】
プロセス１２Ｂにおけるスケジューラインスタンス２２（１）内の実行コンテキスト３４（２）上で実行されているタスク３６（２）は、ブロック７４で示されるように第２のスケジューラインスタンス２２（２）を生成させてもよい。スケジューラインスタンス２２（２）のポリシ３７は、スケジューラインスタンス２２（１）と異なっていてもよく、スケジューラインスタンス２２（１）及び２２（２）に異なった動作特性を有するタスクの様々なセットを実行することを許容する。図４Ａ及び４Ｂの例において、実行コンテキスト３４（２）において実行されているタスク３６（２）は、スケジューラインスタンス２２（２）をポリシ３７と共に生成させ、それによって実行コンテキスト３４（２）内にスケジューラインスタンス２２（２）を動的にネストする。スケジューラインスタンス２２（２）内の仮想プロセッサ３２（１）は、実行のために実行コンテキスト３４（２）を取得する。スケジューラインスタンス２２（１）において、以前に実行コンテキスト３４（２）に割り当てられた仮想プロセッサ３２（２）は、スケジューラ２２（１）内の他のタスクを実行することが可能になる。従って、スケジューラインスタンス２２（１）内の仮想プロセッサ３２（２）は、タスク４０（１）を実行するために実行コンテキスト３８（１）を取得する。
【００４５】
実行コンテキスト３４（２）がスケジューラインスタンス２２（２）に移動させられた結果、スケジューラインスタンス２２（２）を特定するデータ４４（２）は、実行コンテキスト３４（２）とともに保存される。データ４４（２）は、実行コンテキスト３４（２）のローカルの記憶領域内のスタック内に保存されてもよく、１つの実施形態においてデータ４４（１）を含むスタック内の第１のエントリの上部に持ってこられる。スタックのエントリの上部は、実行コンテキスト３４の各々に関する現在のスケジューラインスタンス２２を示す。
【００４６】
ネストされているスケジューラインスタンス２２（２）は、図４Ｂの例において示されているように、仮想プロセッサ３２（２）等の追加の仮想プロセッサと共に生成されてもよい。
【００４７】
スケジューラインスタンス２２（１）及び２２（２）の各々は、ブロック７６に示されているように、仮想プロセッサ３２のセットの各々を使用する実行のためにタスクのセットの各々をスケジューリングする。
【００４８】
スケジューラインスタンス２２（１）は、スケジューラインスタンス２２（１）の仮想プロセッサ３２（１）及び３２（２）における実行のために、スケジューラインスタンス２２（１）のタスクのスケジューリングを継続し、スケジューラインスタンス２２（２）の仮想プロセッサ３２（１）及び３２（２）における実行のために、スケジューラインスタンス２２（２）が、実行コンテキスト３４（２）におけるタスク３６（２）によって生成されるスケジューラインスタンス２２（１）のタスクをスケジューリングする。
【００４９】
ランタイム環境１０及び／またはプロセス１２Ｂは、実行のために実行コンテキスト３４及び３８によって取得されるスケジューラインスタンス２２（１）にタスクの追加のセットを割り当て続けてもよい。スケジューラインスタンス２２（１）を示すデータ４４（１）は、スケジューラインスタンス２２（１）に割り当てられている任意の追加の実行コンテキストとともに保存される。
【００５０】
しかし、ランタイム環境１０及び／またはプロセス１２Ｂは、実行コンテキスト３４（２）においてタスク３６（２）によって生成されたタスクのみが、ネストされたスケジューラインスタンス２２（２）に割り当てられることを可能とする。図４Ｂの例において、実行コンテキスト３４（３）におけるタスク３６（３）が仮想プロセッサ３２（２）によって実行されており、実行コンテキスト３８のプールがスケジューラインスタンス２２（２）による実行を待っている。スケジューラインスタンス２２（２）を示しているデータ４４（２）は、スケジューラインスタンス２２（２）内の実行コンテキスト３４（２）−３４（３）及び３８とともに保存される。
【００５１】
ブロック７８に示されているように、実行コンテキスト３４（２）は、結果的に、スケジューラインスタンス２２（１）に戻されてもよい。そうするために、データ４４（２）は、実行コンテキスト３４（２）から除去されて、データ４４（１）が、実行コンテキスト３４（２）がスケジューラインスタンス２２（１）に属することを示す。データ４４（１）及び４４（２）がスタックとして保存される場合、データ４４（２）は当該スタックの上部から出され、データ４４（１）はスタックの上部に戻る。スケジューラ２２（１）の仮想プロセッサ３２は、実行のために実行コンテキスト３４（２）を取得する。
【００５２】
図５の方法を使用すると、スケジューラインスタンス２２の各々が他のスケジューラインスタンス２２のポリシ３７と異なり得る所望のポリシ３７を含む実行コンテキスト３４において、任意の数のスケジューラインスタンス２２がスタックされ得るかまたはネストされ得る。実行コンテキストの各々は、割り当てられたスケジューラインスタンス２２を特定するデータ４４を含む。新しいスケジューラインスタンス２２を示す新しいデータ４４は、実行コンテキストが新しいスケジューラインスタンス２２に移動する各々の時に実行コンテキストに加えられる（例えば、スタック上に）。
【００５３】
他の実施形態において、ネストされているスケジューラインスタンス２２は、親スケジューラインスタンス２２にさらに厳密に一体化されて、親スケジューラインスタンス２２とネストされているスケジューラインスタンス２２との間のリソース共有が潜在的に可能とされてもよい。
【００５４】
図５の方法を使用すると、ライブラリ開発者は、選択されたスケジューラポリシまたはポリシ優先傾向と共にスケジューラインスタンス２２をネストするライブラリを有利に生成可能である。このことは、ライブラリ開発者に、ライブラリにおけるライブラリ機能が、後順位プロセス（overlying process）のスケジューラポリシに関わらずに当該機能に対して最も適切なスケジューラポリシとともに実行されることを保証することを可能とさせてもよい。例えば、実行コンテキスト３４（２）におけるタスク３６（２）が、図４Ａ−Ｂの例においてプロセス１２Ｂによって呼び出されるライブラリ機能を表してもよい。スケジューラインスタンス２２（２）を使用することによって、実行コンテキスト３４（２）は、スケジューラインスタンス２２（１）によって実行された場合よりもさらに効果的に実行され得る。
【００５５】
１つの実施形態において、プロセス１２Ａ及び１２Ｂは、タスクを１つまたは複数のスケジュールグループ９０に組織化し、スケジュールグループ９０をスケジューラインスタンス２２に示す。図６は、スケジューラインスタンス２２（１）において使用するスケジュールグループ９０の実施形態を示すブロック図である。
【００５６】
スケジュールグループ９０は、実行可能コレクション９２、実現タスクコレクション９３、作業コレクション９４、及び０以上の作業奪取キュー９６を含む。実行可能コレクション９２は、ブロックされていない実行コンテキスト３８のリストを含む。スケジューラインスタンス２２は、実行コンテキストがブロック解除された場合に、実行可能コレクション９２に実行コンテキスト３８を追加する。実現タスクコレクション９３は、関連付けられている実行コンテキスト３８を有するかまたは有さなくともよい実現されるタスク４０（例えば、未開始エージェント）のリストを含む。スケジューラインスタンス２２は、新しい実行可能タスクがプロセス１２によってスケジューラインスタンス２２にもたらされている場合に、実現されるタスクを実現タスクコレクション９３に追加する。作業コレクション９４は、矢印９８によって示されているように作業奪取キュー９６のリストを含み、作業奪取キュー９６からのタスクを実行する実行コンテキスト３４を追跡する。作業奪取キュー９６の各々は、１つまたは複数の未実現タスク４２を含む。
【００５７】
図６の実施形態を使用すると、スケジューラインスタンス２２は、スケジューラインスタンス２２内のスケジュールグループ９０の各々の実行可能コレクション９２内のブロックされていない実行コンテキスト３８を最初に検索し得る。その後、スケジューラインスタンス２２は、スケジュールグループ９０の作業奪取キュー９６内の未実現タスクを検索する前に、スケジューラインスタンス２２内の全てのスケジュールグループ９０の実現タスクコレクション９３内の実現されるタスクを検索してもよい。
【００５８】
１つの実施形態において、利用可能になる仮想プロセッサ３２は、利用可能仮想プロセッサ３２が最近に実行コンテキスト３８を取得したスケジュールグループ９０（すなわち、現在のスケジュールグループ９０）内で、実行可能コレクション９２内の実行可能実行コンテキスト３８、または実現タスクコレクション９３内の実現されるタスク４０の検索を試行してもよい。その後、利用可能仮想プロセッサ３２は、スケジューラインスタンス２２の残りのスケジュールグループ９０内で、ラウンドロビン（round-robin）または他の適切な順序にて、実行可能コレクション９２内の実行可能実行コンテキスト３８、または実現タスクコレクション９３内の実現されるタスク４０の検索を試行してもよい。実行可能実行コンテキスト３８が見つからない場合、利用可能仮想プロセッサ３２は、スケジューラインスタンス２２の残りのスケジュールグループ９０内でラウンドロビンまたは他の適切な順序にて作業奪取キュー９６を検索する前に、現在のスケジュールグループ９０の作業奪取キュー９６内で、未実現タスク４２の検索を試行してもよい。
【００５９】
図７は、プロセス１２Ａまたは１２Ｂ内に複数のスケジューラインスタンス２２を有するランタイム環境１０を実装するように構成されているコンピュータシステム１００の実施形態を示すブロック図である。コンピュータシステム１００は、１つまたは複数のプロセッサパッケージ１０２、メモリシステム１０４、０以上の入力／出力デバイス１０６、０以上の表示デバイス１０８、０以上の周辺機器デバイス１１０、及び０以上のネットワークデバイス１１２を含む。プロセッサパッケージ１０２、メモリシステム１０４、入力／出力デバイス１０６、表示デバイス１０８、周辺機器デバイス１１０、及びネットワークデバイス１１２は、コントローラ、バス、インタフェース及び／または他の有線もしくは無線接続の任意の適切なタイプ、数及び構成を含む相互接続１１４のセットを用いて通信する。
【００６０】
コンピュータシステム１００は、一般用途または特定用途のために構成された任意の適切な処理デバイスを表している。コンピュータシステム１００の例には、サーバ、パーソナルコンピュータ、ラップトップコンピュータ、タブレットコンピュータ、ＰＤＡ（personal digital assistant）、携帯電話、及びオーディオ／ビデオデバイスが含まれる。コンピュータシステム１００のコンポーネント（すなわち、プロセッサパッケージ１０２、メモリシステム１０４、入力／出力デバイス１０６、表示デバイス１０８、周辺機器デバイス１１０、ネットワークデバイス１１２、及び相互接続１１４）は、共通のハウジング（図示せず）または任意の適切な数の別個のハウジング（図示せず）内に収容されていてもよい。
【００６１】
プロセッサパッケージ１０２は、ハードウェアスレッド１６（１）−１６（Ｍ）を含む。プロセッサパッケージ１０２内のハードウェアスレッド１６の各々は、メモリシステム１０４内に保存されている命令にアクセスしてそれを実行するように構成されている。この命令は、基本入出力システム（ＢＩＯＳ）もしくはファームウェア（図示せず）、オペレーティングシステム（ＯＳ）１２０、ランタイムプラットフォーム１２２、アプリケーション１２４、及びリソースマネージメントレイヤ１４（図１にも示されている）を含んでもよい。ハードウェアスレッド１６の各々は、入力／出力デバイス１０６、表示デバイス１０８、周辺機器デバイス１１０、及び／またはネットワークデバイス１１２から受信された情報と共にまたはそれに応答して命令を実行してもよい。
【００６２】
コンピュータシステム１００は、ＯＳ１２０をブートして実行する。ＯＳ１２０は、ハードウェアスレッド１６によって実行可能な命令を含んで、コンピュータシステム１００のコンポーネントを管理しかつアプリケーション１２４が当該コンポーネントにアクセスしてそれを使用することを可能とする機能のセットを提供する。１つの実施形態において、ＯＳ１２０は、ウィンドウズオペレーティングシステムである。他の実施形態において、ＯＳ１２０は、コンピュータシステム１００とともに使用するのに適した他のオペレーティングシステムである。
【００６３】
リソースマネージメントレイヤ１４は、ＯＳ１２０とともに実行可能な命令を含んで、図１を参照して上述されたようにハードウェアスレッド１６を含むコンピュータシステム１００のリソースを割り当てる。リソースマネージメントレイヤ１４は、１つまたは複数のアプリケーション１２４に利用可能な機能のライブラリとしてまたはＯＳ１２０の統合部分としてコンピュータシステム１００内に含まれてもよい。
【００６４】
ランタイムプラットフォーム１２２は、ＯＳ１２０と共に実行可能な命令及びリソースマネージメントレイヤ１４を含んで、ランタイム環境１０を生成してランタイム機能をアプリケーション１２４に提供する。これらのランタイム機能は、図１を参照してさらに詳細に説明されているようにスケジューラ機能を含む。ランタイム機能は、アプリケーション１２４の一部として、１つまたは複数のアプリケーション１２４に利用可能な機能のライブラリとして、またはＯＳ１２０及び／またはリソースマネージメントレイヤ１４の統合部分としてコンピュータシステム１００内に含まれてもよい。
【００６５】
アプリケーション１２４の各々は、所望の動作をコンピュータシステム１００によって実行させるためにＯＳ１２０、リソースマネージメントレイヤ１４、及び／またはランタイムプラットフォーム１２２と共に実行可能である命令を含む。アプリケーション１２４の各々は、上述のプロセス１２Ａ及び１２Ｂ等の１つまたは複数のプロセスを表し、当該プロセスは、ＯＳ１２０、リソースマネージメントレイヤ１４、及び／またはランタイムプラットフォーム１２２によって提供される複数のスケジューラインスタンス２２と共に実行される。
【００６６】
メモリシステム１０４は、命令及びデータを保存するように構成されている任意の適切なタイプ、数及び構成の揮発性記憶デバイスまたは不揮発性記憶デバイスを含む。メモリシステム１０４の記憶デバイスは、ＯＳ１２０、リソースマネージメントレイヤ１４、ランタイムプラットフォーム１２２、及びアプリケーション１２４を含むコンピュータ実行可能命令を保存するコンピュータ可読記憶媒体を表す。命令は、本明細書に記載のＯＳ１２０、リソースマネージメントレイヤ１４、ランタイムプラットフォーム１２２、及びアプリケーション１２４の機能及び方法を実行するためにコンピュータシステムによって実行可能である。メモリシステム１０４内の記憶デバイスの例には、ハードディスクドライブ、ＲＡＭ（random access memory）、ＲＯＭ（read only memory）、フラッシュメモリドライブ及びカード、並びに磁気及び光学ディスクが含まれる。
【００６７】
メモリシステム１０４は、プロセッサパッケージ１０２、入力／出力デバイス１０６、表示デバイス１０８、周辺機器デバイス１１０、ネットワークデバイス１１２から受信される命令及びデータを保存する。メモリシステム１０４は、保存されている命令及びデータを、プロセッサパッケージ１０２、入力／出力デバイス１０６、表示デバイス１０８、周辺機器デバイス１１０、ネットワークデバイス１１２に提供する。
【００６８】
入力／出力デバイス１０６は、ユーザからの命令またはデータをコンピュータシステム１００に入力しかつコンピュータシステム１００からの命令またはデータをユーザに出力するように構成されている任意の適切なタイプ、数、及び構成の入力／出力デバイスを含む。入力／出力デバイス１０６の例には、キーボード、マウス、タッチパッド、タッチスクリーン、ボタン、ダイアル、ノブ、及びスイッチが含まれる。
【００６９】
表示デバイス１０８には、テキスト及び／またはグラフィック情報をコンピュータシステム１００のユーザに出力するように構成されている任意の適切なタイプ、数、及び構成の表示デバイスが含まれる。表示デバイス１０８の例には、モニタ、ディスプレイスクリーン、及びプロジェクタが含まれる。
【００７０】
周辺機器デバイス１１０には、コンピュータシステム１００において１つまたは複数の他のコンポーネントと共に動作して一般的なまたは特別な処理機能を実行するように構成されている任意の適切なタイプ、数、及び構成の周辺機器デバイスが含まれる。
【００７１】
ネットワークデバイス１１２には、コンピュータシステム１００に１つまたは複数のネットワーク（図示せず）を介して通信することを可能とするように構成された任意の適切なタイプ、数、及び構成のネットワークデバイスが含まれる。ネットワークデバイス１１２は、任意の適切なネットワークプロトコル及び／または構成に従って動作して、情報がコンピュータシステムによってネットワークに伝送されるかまたはネットワークからコンピュータシステムによって受信されることを可能としてもよい。
【００７２】
本明細書において、特定の実施形態が図示されかつ説明されてきたが、本発明の範囲から逸脱することなく、様々な代替実装例及び／または均等実装例が、図示及び説明されている特定の実施形態と置換され得ることが本技術分野の当業者には明らかであろう。本出願は、本明細書内で説明される特定の実施形態の任意の新用途への適合例または変更例をカバーすることを目的としている。従って、本発明が特許請求の範囲及びその均等例のみによって限定されることが意図されている。
【図１】
0005597196.tif 000002
【図２】
0005597196.tif 000003
【図３】
0005597196.tif 000004
【図４Ａ】
0005597196.tif 000005
【図４Ｂ】
0005597196.tif 000006
【図５】
0005597196.tif 000007
【図６】
0005597196.tif 000008
【図７】
0005597196.tif 000009