(57)【要約】 【課題】アダプティブ・パーティションを用いて好適にＣＰＵ資源を割り当てることを提供する。【解決手段】プロセッサ（１０５）とメモリ（１１０）とメモリ内に格納されたソフトウェアコードを備えたシステムに関する。該コードは、プロセッサにより実行可能であり、ソフトウェアスレッドに関連したアダプティブ・パーティションを生成するスレッドを備える。各アダプティブ・パーティションはプロセッサ・バジェットを有する。該コードはまた、送信スレッドと受信スレッドを生成する。受信スレッドは送信スレッドからの通信に応答し、通信に対応するタスクを実行する。スケジューリングシステム（１３０）は、アダプティブ・パーティションのプロセッサ・バジェットに基づいて送信スレッドと受信スレッドの各々にプロセッサを割り当てる。【選択図】図１
2006260565.tif 000002
【特許請求の範囲】
【請求項１】
プロセッサと、
１つ以上の記憶装置と、
該１つ以上の記憶装置に格納されたソフトウェアコードと
を備えるシステムであって、
該ソフトウェアコードは、該プロセッサによって実行可能であり、
少なくとも１つの送信スレッドと、
該少なくとも１つの送信スレッドからの通信に応答して、該通信に対応する１つ以上のタスクを実行する少なくとも１つの受信スレッドと、
少なくとも一つには、該少なくとも１つの送信スレッドに関連したプロセッサ・バジェットに基づいて、該プロセッサを該少なくとも１つの送信スレッドと該少なくとも１つの受信スレッドに選択的に割り当てる、該プロセッサによって実行可能なスケジューリングシステムと
を備えており、
該少なくとも１つの送信スレッドによって送信された通信に応答するために、該スケジューリングシステムが該少なくとも１つの受信スレッドによって使用されているプロセッサ割り当てを該少なくとも１つの送信スレッドに関連したプロセッサ・バジェットに対して請求する、
システム。
【請求項２】
前記スケジューリングシステムがオペレーティングシステムの一部分である、請求項１に記載のシステム。
【請求項３】
前記プロセッサがシンメトリックなマルチプロセッサである、請求項１に記載のシステム。
【請求項４】
前記スケジューリングシステムが、前記少なくとも１つの送信スレッドによって送信された通信に応答するために、前記少なくとも１つの受信スレッドによって使用されているプロセッサ割り当てを前記少なくとも１つの送信スレッドに関連したプロセッサ・バジェットに請求する、請求項１に記載のシステム。
【請求項５】
前記スケジューリングシステムが適応可能なパーティションを有する少なくとも１つの送信スレッドに関連し、
前記少なくとも１つの送信スレッドに関連した前記プロセッサ・バジェットが、該少なくとも１つの送信スレッドに関連した、該適応可能なパーティションを割り当てられたプロセッサ・バジェットに対応する、請求項１に記載のシステム。
【請求項６】
前記スケジューリングシステムが、前記少なくとも１つの送信スレッドによって送信された通信に応答するために、前記少なくとも１つの受信スレッドによって使用されている前記プロセッサ割り当てを前記少なくとも１つの送信スレッドに関連した適応可能なパーティションのプロセッサ・バジェットに請求する、請求項５に記載のシステム。
【請求項７】
プロセッサと、
１つ以上の記憶装置と、
該１つ以上の記憶装置に格納されたソフトウェアコードと
を備えるシステムであって、
該ソフトウェアコードは、
複数のスレッドとして該プロセッサによって実行可能であり、
該複数のスレッドは少なくとも１つの送信スレッドと少なくとも１つの受信スレッドを含んでおり、
更に、該ソフトウェアコードに含まれ、少なくとも一つには、各スレッドに関連したプロセッサ・バジェットに基づいて、該少なくとも１つの送信スレッドと該少なくとも１つの受信スレッドを実行するために該プロセッサを選択的に割り当てる、該プロセッサによって実行可能なスケジューリングシステム
を備える、システム。
【請求項８】
前記スケジューリングシステムがオペレーティングシステムの一部分である、請求項７に記載のシステム。
【請求項９】
前記プロセッサがシンメトリックなマルチプロセッサである、請求項７に記載のシステム。
【請求項１０】
前記スケジューリングシステムが、前記少なくとも１つの送信スレッドによって送信された通信に応答するために、前記少なくとも１つの受信スレッドによって使用されているプロセッサ割り当てを前記少なくとも１つの送信スレッドに関連したプロセッサ・バジェットに請求する、請求項７に記載のシステム。
【請求項１１】
前記スケジューリングシステムが適応可能なパーティションを有する少なくとも１つの送信スレッドに関連し、
前記少なくとも１つの送信スレッドに関連した前記プロセッサ・バジェットが、該適応可能なパーティションを割り当てられたプロセッサ・バジェットに対応する、請求項７に記載のシステム。
【請求項１２】
前記スケジューリングシステムが、前記少なくとも１つの送信スレッドによって送信された通信に応答するために、前記少なくとも１つの受信スレッドによって使用されている前記プロセッサ割り当てを前記少なくとも１つの送信スレッドに関連した適応可能なパーティションのプロセッサ・バジェットに請求する、請求項１１に記載のシステム。
【請求項１３】
プロセッサと、
１つ以上の記憶装置と、
該１つ以上の記憶装置に格納されたソフトウェアコードと
を備えるシステムであって、
該ソフトウェアコードは、
該プロセッサによって実行可能であり、
各々が１つ以上の処理装置に関連する複数の適応可能なパーティションであって、該複数の適応可能なパーティションの各々が対応するプロセッサ・バジェットを有する、複数の適応可能なパーティションと、
該複数の適応可能なパーティションの第１の適応可能なパーティションに関連した少なくとも１つの送信スレッドと、
該複数の適応可能なパーティションの第２の適応可能なパーティションに関連した少なくとも１つの受信スレッドであって、該少なくとも１つの受信スレッドは、該通信に対応する少なくとも１つのタスクを実行することによって、該少なくとも１つの送信スレッドからの通信に応答する、受信スレッドと、  
少なくとも一つには、該第１および第２の適応可能なパーティションのプロセッサ・バジェットに基づいて、該プロセッサを該少なくとも１つの送信スレッドと該少なくとも１つの受信スレッドに選択的に割り当てる、該プロセッサによって実行可能なスケジューリングシステムと
を備えるソフトウェアコードである、
システム。
【請求項１４】
前記スケジューリングシステムがオペレーティングシステムの一部分である、請求項１３に記載のシステム。
【請求項１５】
前記プロセッサがシンメトリックなマルチプロセッサである、請求項１３に記載のシステム。
【請求項１６】
前記スケジューリングシステムが、前記少なくとも１つの送信スレッドによって送信された通信に応答するために、前記少なくとも１つの受信スレッドによって使用されているプロセッサ割り当てを前記少なくとも１つの送信スレッドに関連した、前記適応可能なパーティションのプロセッサ・バジェットに請求する、請求項１３に記載のシステム。
【請求項１７】
複数のソフトウェアスレッドを有する処理装置内にあるプロセス・スケジューラを動作させる方法であって、該複数のソフトウェアスレッドは、少なくとも１つの送信スレッドと、該少なくとも１つの送信スレッドによって送信された通信に応答する少なくとも１つの受信スレッドを含み、該少なくとも１つの送信スレッドは所定のプロセッサ・バジェットを有する第１の適応可能なパーティションに関連しており、該少なくとも１つの受信スレッドは更なる所定のプロセッサ・バジェットを有する第２の適応可能なパーティションに関連しており、該方法は、
該送信スレッドの実行をスケジューリングし、該送信スレッドが該受信スレッドに通信を送信することと、
該受信スレッドの実行をスケジューリングすることと、
該送信スレッドによって送信された通信に応答するために、該受信スレッドによって使用されているプロセッサ割り当てを該第１の適応可能なパーティションのプロセッサ・バジェットに請求すること
を含む、方法。
【請求項１８】
前記請求する動作が、前記送信スレッドによって送信された通信に応答するために、前記受信スレッドによって使用されているプロセッサ割り当てを前記第１の適応可能なパーティションのプロセッサ・バジェットに請求することを含む、請求項１７に記載の方法。
【請求項１９】
複数のソフトウェアスレッドを有する処理装置内にあるプロセス・スケジューラを動作させる方法を実行するために使用されているソフトウェアコードを含む記憶媒体であって、
該複数のソフトウェアスレッドは、少なくとも１つの送信スレッドと、該少なくとも１つの送信スレッドによって送信された通信に応答する少なくとも１つの受信スレッドを含み、該少なくとも１つの送信スレッドは所定のプロセッサ・バジェットを有する第１の適応可能なパーティションに関連しており、該少なくとも１つの受信スレッドは更なる所定のプロセッサ・バジェットを有する第２の適応可能なパーティションに関連しており、該方法は、
該送信スレッドの実行をスケジューリングし、該送信スレッドが該受信スレッドに通信を送信することと、
該受信スレッドの実行をスケジューリングすることと、
該送信スレッドによって送信された通信に応答するために、該受信スレッドによって使用されているプロセッサ割り当てを該第１の適応可能なパーティションのプロセッサ・バジェットに請求すること
を含む方法である、
記憶媒体。
【請求項２０】
前記請求する動作が、前記送信スレッドによって送信された通信に応答するために、前記受信スレッドによって使用されているプロセッサ割り当てを前記第１の適応可能なパーティションのプロセッサ・バジェットに請求することを含む、請求項１９に記載の記憶媒体。
【請求項２１】
送信スレッドに関連し、第１のプロセッサ・バジェットを有する、第１の適応可能なパーティションと、
受信スレッドに関連し、第２のプロセッサ・バジェットを有する、第２の適応可能なパーティションであって、該受信スレッドは、該通信に対応する１つ以上のタスクを実行することによって、該送信スレッドによって送信された通信に応答する受信スレッドである、第２の適応可能なパーティションと、
少なくとも一つには、該第１および第２の適応可能なパーティションの該第１および第２の所定のプロセッサ・バジェットに基づいて、プロセッサを該受信スレッドと該送信スレッドと該受信スレッドに選択的に割り当てるように適合されたプロセス・スケジューラであって、該プロセッサ・スケジューラは、該送信スレッドによって送信された通信に応答するために、該受信スレッドによって使用されているプロセッサ割り当てを該第１の適応可能なパーティションの第１の所定のプロセッサ・バジェットに請求する、プロセス・スケジューラと
を備える、プロセス・スケジューリングシステム。
【請求項２２】
前記プロセッサがシンメトリックなマルチプロセッサである、請求項２１に記載のプロセス・スケジューリングシステム。
【請求項２３】
前記プロセス・スケジューラが、前記送信スレッドによって送信された通信に応答するために、前記受信スレッドによって使用されているプロセッサ割り当てを前記第１の適応可能なパーティションの前記第１の所定のプロセッサ・バジェットに請求する、請求項２１に記載のプロセス・スケジューリングシステム。
【発明の詳細な説明】
【技術分野】
【０００１】
（優先権主張）
本出願は、２００５年３月１４日に出願された米国仮特許出願第６０／６６２，０７０号と、２００５年１２月２２日に出願されたＵ．Ｓ．Ｓ．Ｎ．１１／３１７，４６８号と、２００５年８月３１日に出願されたＵ．Ｓ．Ｓ．Ｎ．１１／２１６，７９５号に対する優先権を主張する。
【０００２】
（技術分野）
本発明は、オペレーティングシステムがスレッドおよびそれに類似するものの実行をスケジューリングする仕方に関する。更に詳しくは、本発明は、プロセス・スレッドに対して適応可能なパーティション・スケジューリングを有するオペレーティングシステムに関する。
【背景技術】
【０００３】
（関連技術）
オペレーティングシステムのカーネルは、上記システムの上で活動している各スレッドが対応するプロセスを正確に実行するために適切な長さのＣＰＵ時間を入手出来るようにＣＰＵ資源を分配することが可能であり得る。このために、上記カーネルは、利用可能なＣＰＵ時間を複数のスレッドの間にどのように配分するかを判断する、スケジューリングシステムを実装し得る。
【０００４】
少なくとも３タイプのプロセス・スケジューリングシステムがある。ＦＩＦＯスケジューリングシステム、ラウンドロビン・スケジューリングシステム、および、スポラディック・スケジューリングシステムである。各システムにおいては、優先順位の値がＣＰＵによって実行されるプロセスの各スレッドに割り当てられる。システム全体の動作に対して重要なものとなり得るスレッドには高い優先順位が割り当てられるが、上記システムの動作に対する重要度が低くなり得るスレッドは、低い優先順位を有することになる。スケジューリングシステムが上記ＣＰＵにスレッドアクセスを付与するかどうかは、上記スレッドの状態にも依存する。例えば、スレッドは準備完了であるか、（他の状態も使用されていたとしても）ブロックされているかであり得る。スレッドは、動作に必要な全ての条件が満たされ、実行出来る場合に、準備完了である。対照的に、スレッドは、即座に完了できない動作を開始し得る場合にブロックされ、上記スレッドの実行が継続するまでイベントの完了を待機しなければならない。
【０００５】
ＦＩＦＯスケジューリングシステムにおいては、実際に実行しているスレッドは、ブロッキングによってＣＰＵを明け渡し、実行を終了するか高優先順位のスレッドに代わられるまで、全ＣＰＵ時間を使用し続ける。一旦これらの判定条件の１つが満足されると、ＦＩＦＯスケジューリングシステムは、上記ＣＰＵを準備完了状態にある高い優先順位のプロセス／スレッドに割り当てる。一般に、各優先順位レベルに対して１つの準備完了キューが存在する。
【０００６】
ラウンドロビン・スケジューリングシステムは追加的なパラメータ、すなわち、ＣＰＵ時間をスレッドに割り当てる、タイムスライスを用いる。タイムスライスとは、スレッドがＣＰＵにアクセスを許容されている時間の長さである。ラウンドロビン・スケジューリングシステムにおいては、実際に実行しているスレッドは以下のいずれかのイベントが発生するまで全ＣＰＵ時間を使用し続ける。１）現在実行しているプロセスがブロックされる、２）現在実行しているプロセスが終了する、３）現在実行しているプロセスが高位の優先順位にあるスレッドに明け渡される、４）現在実行しているプロセスがそのタイムスライスを使い果たす。一旦、現在実行しているプロセスがブロックされる、または、そのタイムスライスを使い果たすと、準備完了キューの後に優先順位を置かれることになる。
【０００７】
スポラディック・スケジューリングシステムは、ラウンドロビン・スケジューリングシステムにいくぶん類似している。スポラディック・スケジューリングシステムにおいては、現在実行しているプロセスは以下のいずれかのイベントが発生するまで全ＣＰＵ時間を使用し続ける。１）現在実行しているプロセスがブロックされる、２）現在実行しているプロセスが終了する、３）現在実行しているプロセスが高位の優先順位にあるプロセスに明け渡される、４）現在実行しているプロセスが所与の期間の範囲内のスレッドに割り当てられた実行時間における制限されたリミットを使い果たす。上記制限されたリミットはバジェットとして知られるが、このリミットが使用され得る上記所与の期間は、補充期間として知られている。実行中、スレッドに対する上記バジェットは上記補充期間の満了後に補充される。一旦、現在実行しているプロセスがブロックされると、準備完了キューの後に優先順位を置かれることになる。しかしながら、現在実行しているプロセスが上記補充期間内でバジェットを使い果たすと、その優先順位は所定の値だけ下げられ、準備完了キューの後にこの低い優先順位を置かれることになる。プロセス／スレッドの優先順位は、多数の異なる条件に応答してオリジナルな値を返され得る。
【０００８】
例えばＫａｎａｔａ，ＯｎｔａｒｉｏにあるＱＮＸ  Ｓｏｆｔｗａｒｅ  Ｓｙｓｔｅｍｓから入手出来るようなオペレーティングシステムにおいては、上記システムにおける各スレッドは、先のスケジューリングシステムのいずれかを用いて実行し得る。結果として、上記スケジューリングシステムは、ノード上の全スレッドおよびプロセスに対して、スレッド毎に有効である。各スレッドは、プロセス／スレッド自身の動作を介して特定のスケジューリングシステムに割り当てられる。このことは、ソフトウェアデザイナーに顕著なデザイン自由度を提供するが、ソフトウェアデザイナーの間で同じシステムのコードを実行させる調整を、必要とし得る。この調整は、各スレッドにスケジューリングシステムのタイプを割り当てるのと同様に、異なるスレッドに対する優先順位の割り当てを含んでいる。
【０００９】
利用可能なオペレーティングシステムのいくつかは、グローバルなやり方でスケジューリングを適用する。そのようなグローバルなスケジューリングシステムの一つは、フェア−シェア・スケジューリングシステムとして知られている。フェア−シェア・スケジューリングシステムにおいては、ＣＰＵの利用は、ユーザ、グループ、あるいはプロセスの間に均等に割り当てられ得る。例えば、４人のユーザ（Ａ，Ｂ，Ｃ，Ｄ）が各々同時に１つのプロセスを実行している場合、フェア−シェア・スケジューラは、各ユーザが全体の２５％（１００％／４＝２５％）を入手出来るように、利用可能なＣＰＵサイクルを論理的に分割する。ユーザＢが第２のプロセスを開始する場合、各ユーザもやはり全サイクルの２５％を受け取るが、ユーザＢのプロセスの双方は全利用可能ＣＰＵ時間の各々１２．５％を受け取る。一方、新しいユーザがシステム上でプロセスを開始すると、上記スケジューラは、各ユーザが全体の２０％（１００％／５＝２０％）を入手できるように利用可能なＣＰＵサイクルを再配分する。
【００１０】
別の層の概念は、ユーザをグループに区分けすることと、フェア−シェア・システムを上記グループに応用することを可能にする。このケースでは、利用可能なＣＰＵサイクルは、最初にグループの間に分割され、その後、上記グループ内のユーザの間に分割され、更にその後、それらユーザに対するプロセスの間に分割される。例えば、３つのグループ（１，２，３）があり、各々が３人、２人、４人のユーザをそれぞれ含む場合、利用可能なＣＰＵサイクルは次のように分割され得る。１００％／３＝３３．３％毎グループ、グループ１：（３３．３％／３ユーザ）＝１１．１％／ユーザ、グループ２：（３３．３％／２ユーザ）＝１６．７％／ユーザ、グループ３：（３３．３パーセント／４ユーザ）＝８．３パーセント／ユーザ。これとは別なグループ間への比率の割り当ても用いられ得る。
【００１１】
フェア−シェア・スケジューリング作戦を論理的に実行する仕方の一つは、概念（プロセス、ユーザ、グループ、その他）の各レベルでラウンド−ロビン・スケジューリング作戦を再帰的に適用することである。ラウンド−ロビン・スケジューリングにおいては、重要度または優先順位が同じスレッドは交代で実行する。各々は、各スレッドまたはスレッドのグループの性質である、インターバルまたはタイムスライスの間に実行する。
【００１２】
先行するオペレーティングシステムは様々なアプリケーションでは利点を有するが、ある種のシステムアプリケーションで用いられた場合、欠陥に直面する。例えば、スレッド毎のスケジューリングシステムが、優先順位の割り当てを通してのみ計画されているリアル−タイムのシステムにおいて用いられた場合、低位の優先順位にあるスレッドに対する非常に長い待ち時間が発生し得ることになる。不当なソフトウェアプロセスは、それらに高い優先順位にある実行が出来るように構成し、これによって低い優先順位にあるスレッドに適切なスケジューリングをさせることを妨げる。この問題は、例えば高位の優先順位にあるスレッドが異常を起こし、無限ループに入った場合のシステム開発の間にも発生し得る。グローバルなフェア−シェア・スケジューリングシステムはそのような問題を回避し得るが、リアルタイムのシステムに対して必要な応答性を欠く。そのため、現在全スレッドに対してある種のＣＰＵアクセスを提供していることに加えて更に、リアルタイムなやり方で高位の優先順位にあるスレッドを動作させることを効率的に可能にし得るスケジューリングシステムに対する需要が存在する。
【発明の開示】
【課題を解決するための手段】
【００１３】
（発明の概要）
単一の、または、シンメトリックなマルチプロセッサであるプロセッサと、１つ以上の記憶装置を備えたシステムが述べられている。本システムはまた、上記記憶装置内に格納されるソフトウェアコードを含む。上記ソフトウェアコードは上記プロセッサによって実行可能であり、各々が１つ以上のソフトウェアスレッドに関連した複数のアダプティブ・パーティションを備える。上記アダプティブ・パーティションの各々は対応するプロセッサ・バジェットを有する。上記コードはまた、１つ以上の送信スレッドと１つ以上の受信スレッドを生成するように実行可能である。上記受信スレッドは上記送信スレッドからの通信に応答し、上記通信に対応する１つ以上のタスクを実行する。スケジューリングシステムはまた、上記コードにおける上記プロセッサによって実行可能な部分のうち、少なくとも一部分を形成する。動作中、上記スケジューリングシステムは上記プロセッサを各送信および受信スレッドに、少なくとも一つには各スレッドに関連したアダプティブ・パーティションのプロセッサ・バジェットに基づいて選択的に割り当てる。本タイプの送／受信環境においては、スケジューリングシステムは、上記送信スレッドから送信された通信に応答し、上記受信スレッドによって使用されるプロセッサ割り当てを、上記送信スレッドに関連したアダプティブ・パーティションのプロセッサ・バジェットに請求する。
【００１４】
本システムの別のシステム、方法、特性、および利点は、当業者には、以下の図面および詳細な記述を検討した後に明白に理解出来る。そのような追加的なシステム、方法、特性、および利点は、本記述の範囲に含まれ、本発明の目的から逸脱せず、請求項によって保護される。
【００１５】
本発明は、さらに以下の手段を提供する。
（項目１）
プロセッサと、
１つ以上の記憶装置と、
該１つ以上の記憶装置に格納されたソフトウェアコードと
を備えるシステムであって、
該ソフトウェアコードは、該プロセッサによって実行可能であり、
少なくとも１つの送信スレッドと、
該少なくとも１つの送信スレッドからの通信に応答して、該通信に対応する１つ以上のタスクを実行する少なくとも１つの受信スレッドと、
少なくとも一つには、該少なくとも１つの送信スレッドに関連したプロセッサ・バジェットに基づいて、該プロセッサを該少なくとも１つの送信スレッドと該少なくとも１つの受信スレッドに選択的に割り当てる、該プロセッサによって実行可能なスケジューリングシステムと
を備えており、
該少なくとも１つの送信スレッドによって送信された通信に応答するために、該スケジューリングシステムが該少なくとも１つの受信スレッドによって使用されているプロセッサ割り当てを該少なくとも１つの送信スレッドに関連したプロセッサ・バジェットに対して請求する、
システム。
（項目２）
前記スケジューリングシステムがオペレーティングシステムの一部分である、項目１に記載のシステム。
（項目３）
前記プロセッサがシンメトリックなマルチプロセッサである、項目１に記載のシステム。
（項目４）
前記スケジューリングシステムが、前記少なくとも１つの送信スレッドによって送信された通信に応答するために、前記少なくとも１つの受信スレッドによって使用されているプロセッサ割り当てを前記少なくとも１つの送信スレッドに関連したプロセッサ・バジェットに請求する、項目１に記載のシステム。
（項目５）
前記スケジューリングシステムが適応可能なパーティションを有する少なくとも１つの送信スレッドに関連し、
前記少なくとも１つの送信スレッドに関連した前記プロセッサ・バジェットが、該少なくとも１つの送信スレッドに関連した、該適応可能なパーティションを割り当てられたプロセッサ・バジェットに対応する、項目１に記載のシステム。
（項目６）
前記スケジューリングシステムが、前記少なくとも１つの送信スレッドによって送信された通信に応答するために、前記少なくとも１つの受信スレッドによって使用されている前記プロセッサ割り当てを前記少なくとも１つの送信スレッドに関連した適応可能なパーティションのプロセッサ・バジェットに請求する、項目５に記載のシステム。
（項目７）
プロセッサと、
１つ以上の記憶装置と、
該１つ以上の記憶装置に格納されたソフトウェアコードと
を備えるシステムであって、
該ソフトウェアコードは、
複数のスレッドとして該プロセッサによって実行可能であり、
該複数のスレッドは少なくとも１つの送信スレッドと少なくとも１つの受信スレッドを含んでおり、
更に、該ソフトウェアコードに含まれ、少なくとも一つには、各スレッドに関連したプロセッサ・バジェットに基づいて、該少なくとも１つの送信スレッドと該少なくとも１つの受信スレッドを実行するために該プロセッサを選択的に割り当てる、該プロセッサによって実行可能なスケジューリングシステム
を備える、システム。
（項目８）
前記スケジューリングシステムがオペレーティングシステムの一部分である、項目７に記載のシステム。
（項目９）
前記プロセッサがシンメトリックなマルチプロセッサである、項目７に記載のシステム。
（項目１０）
前記スケジューリングシステムが、前記少なくとも１つの送信スレッドによって送信された通信に応答するために、前記少なくとも１つの受信スレッドによって使用されているプロセッサ割り当てを前記少なくとも１つの送信スレッドに関連したプロセッサ・バジェットに請求する、項目７に記載のシステム。
（項目１１）
前記スケジューリングシステムが適応可能なパーティションを有する少なくとも１つの送信スレッドに関連し、
前記少なくとも１つの送信スレッドに関連した前記プロセッサ・バジェットが、該適応可能なパーティションを割り当てられたプロセッサ・バジェットに対応する、項目１に記載のシステム。
（項目１２）
前記スケジューリングシステムが、前記少なくとも１つの送信スレッドによって送信された通信に応答するために、前記少なくとも１つの受信スレッドによって使用されている前記プロセッサ割り当てを前記少なくとも１つの送信スレッドに関連した適応可能なパーティションのプロセッサ・バジェットに請求する、項目７に記載のシステム。
（項目１３）
プロセッサと、
１つ以上の記憶装置と、
該１つ以上の記憶装置に格納されたソフトウェアコードと
を備えるシステムであって、
該ソフトウェアコードは、
該プロセッサによって実行可能であり、
各々が１つ以上の処理装置に関連する複数の適応可能なパーティションであって、該複数の適応可能なパーティションの各々が対応するプロセッサ・バジェットを有する、複数の適応可能なパーティションと、
該複数の適応可能なパーティションの第１の適応可能なパーティションに関連した少なくとも１つの送信スレッドと、
該複数の適応可能なパーティションの第２の適応可能なパーティションに関連した少なくとも１つの受信スレッドであって、該少なくとも１つの受信スレッドは、該通信に対応する少なくとも１つのタスクを実行することによって、該少なくとも１つの送信スレッドからの通信に応答する、受信スレッドと、  
少なくとも一つには、該第１および第２の適応可能なパーティションのプロセッサ・バジェットに基づいて、該プロセッサを該少なくとも１つの送信スレッドと該少なくとも１つの受信スレッドに選択的に割り当てる、該プロセッサによって実行可能なスケジューリングシステムと
を備えるソフトウェアコードである、
システム。
（項目１４）
前記スケジューリングシステムがオペレーティングシステムの一部分である、項目１３に記載のシステム。
（項目１５）
前記プロセッサがシンメトリックなマルチプロセッサである、項目１３に記載のシステム。
（項目１６）
前記スケジューリングシステムが、前記少なくとも１つの送信スレッドによって送信された通信に応答するために、前記少なくとも１つの受信スレッドによって使用されているプロセッサ割り当てを前記少なくとも１つの送信スレッドに関連した、前記適応可能なパーティションのプロセッサ・バジェットに請求する、項目１に記載のシステム。
（項目１７）
複数のソフトウェアスレッドを有する処理装置内にあるプロセス・スケジューラを動作させる方法であって、該複数のソフトウェアスレッドは、少なくとも１つの送信スレッドと、該少なくとも１つの送信スレッドによって送信された通信に応答する少なくとも１つの受信スレッドを含み、該少なくとも１つの送信スレッドは所定のプロセッサ・バジェットを有する第１の適応可能なパーティションに関連しており、該少なくとも１つの受信スレッドは更なる所定のプロセッサ・バジェットを有する第２の適応可能なパーティションに関連しており、該方法は、
該送信スレッドの実行をスケジューリングし、該送信スレッドが該受信スレッドに通信を送信することと、
該受信スレッドの実行をスケジューリングすることと、
該送信スレッドによって送信された通信に応答するために、該受信スレッドによって使用されているプロセッサ割り当てを該第１の適応可能なパーティションのプロセッサ・バジェットに請求すること
を含む、方法。
（項目１８）
前記請求する動作が、前記送信スレッドによって送信された通信に応答するために、前記受信スレッドによって使用されているプロセッサ割り当てを前記第１の適応可能なパーティションのプロセッサ・バジェットに請求することを含む、項目１７に記載の方法。
（項目１９）
複数のソフトウェアスレッドを有する処理装置内にあるプロセス・スケジューラを動作させる方法を実行するために使用されているソフトウェアコードを含む記憶媒体であって、
該複数のソフトウェアスレッドは、少なくとも１つの送信スレッドと、該少なくとも１つの送信スレッドによって送信された通信に応答する少なくとも１つの受信スレッドを含み、該少なくとも１つの送信スレッドは所定のプロセッサ・バジェットを有する第１の適応可能なパーティションに関連しており、該少なくとも１つの受信スレッドは更なる所定のプロセッサ・バジェットを有する第２の適応可能なパーティションに関連しており、該方法は、
該送信スレッドの実行をスケジューリングし、該送信スレッドが該受信スレッドに通信を送信することと、
該受信スレッドの実行をスケジューリングすることと、
該送信スレッドによって送信された通信に応答するために、該受信スレッドによって使用されているプロセッサ割り当てを該第１の適応可能なパーティションのプロセッサ・バジェットに請求すること
を含む方法である、
記憶媒体。
（項目２０）
前記請求する動作が、前記送信スレッドによって送信された通信に応答するために、前記受信スレッドによって使用されているプロセッサ割り当てを前記第１の適応可能なパーティションのプロセッサ・バジェットに請求することを含む、項目１９に記載の記憶媒体。
（項目２１）
送信スレッドに関連し、第１のプロセッサ・バジェットを有する、第１の適応可能なパーティションと、
受信スレッドに関連し、第２のプロセッサ・バジェットを有する、第２の適応可能なパーティションであって、該受信スレッドは、該通信に対応する１つ以上のタスクを実行することによって、該送信スレッドによって送信された通信に応答する受信スレッドである、第２の適応可能なパーティションと、
少なくとも一つには、該第１および第２の適応可能なパーティションの該第１および第２の所定のプロセッサ・バジェットに基づいて、プロセッサを該受信スレッドと該送信スレッドと該受信スレッドに選択的に割り当てるように適合されたプロセス・スケジューラであって、該プロセッサ・スケジューラは、該送信スレッドによって送信された通信に応答するために、該受信スレッドによって使用されているプロセッサ割り当てを該第１の適応可能なパーティションの第１の所定のプロセッサ・バジェットに請求する、プロセス・スケジューラと
を備える、プロセス・スケジューリングシステム。
（項目２２）
前記プロセッサがシンメトリックなマルチプロセッサである、項目２１に記載のプロセス・スケジューリングシステム。
（項目２３）
前記プロセス・スケジューラが、前記送信スレッドによって送信された通信に応答するために、前記受信スレッドによって使用されているプロセッサ割り当てを前記第１の適応可能なパーティションの前記第１の所定のプロセッサ・バジェットに請求する、項目２１に記載のプロセス・スケジューリングシステム。
（摘要）
単一のプロセッサ、または、シンメトリックなマルチプロセッサと、１つ以上の記憶装置を備えたシステムが述べられている。上記システムはまた、記憶装置内に格納されたソフトウェアコードを含んでいる。上記ソフトウェアコードはプロセッサによって実行可能であり、各々が１つ以上のソフトウェアスレッドと関連している複数のアダプティブ・パーティションを生成するコードを備える。上記コードはまた、少なくとも１つ以上の送信スレッドと、少なくとも１つ以上の受信スレッドを生成するように実行することが出来る。上記受信スレッドは、送信スレッドからの通信に応答して、上記通信に対応する１つ以上のタスクを実行する。スケジューリングシステムはまた、プロセッサによって実行可能なコードのいくつかの部分を形成する。実行中、上記スケジューリングシステムはまた、少なくとも一つには各パーティションに関連したアダプティブ・パーティションのプロセッサ・バジェットに基づいて送信スレッドと受信スレッドの各々にプロセッサを割り当てる。このタイプの送／受信環境では、上記スケジューリングシステムは、送信スレッドから送信された通信に応答し、受信スレッドによって用いられるプロセッサ割り当てに関連したアダプティブ・パーティションのプロセッサ・バジェットに受信スレッドによって用いられるプロセッサ割り当てを請求する。
【発明を実施するための最良の形態】
【００１６】
（好適な実施形態に関する詳細な記述）
本発明は以下の図面と記述を参照することにより、より良く理解され得る。本発明が示す見地に立たずに、図面中のコンポーネントを一定の比率で拡大・縮小したり、強調したりする必要は、必ずしもない。更に、図面においては、参照されている番号と同じ番号が異なる見解の全体に渡って、対応する部分を指定する。
【００１７】
図１は、プロセス・スレッドのアダプティブ・パーティショニングを用たプロセス・スケジューラを動作し得るシステム１００のスキーム的ブロック図である。システム１００は、メモリ１１０に格納されたソフトウェアコードにアクセスし得る、中央演算装置１０５（「ＣＰＵ」）を含む。ＣＰＵ１０５は、様々な装置／システム要素をＩ／Ｏインターフェース１１５を介してアクセスするために配置され得る。上記装置／システム要素は、例えば、センサー、ヒューマンインターフェース装置、ネットワークノード、プリンタ、記憶装置、または類似の装置を含み得る。シンメトリックなマルチプロセッシング・システムにおけるプロセッサは、個数に関係なく、単一のプロセッサの時と同じような仕方で考えられ、同様に、ブロック１０５で表示される範囲に含まれる。
【００１８】
メモリ１１０は、特に、システム１００によって実行されることになる機能を規定するソフトウェアコードを格納するために用いられる。メモリ１１０は単一の装置として示されているが、同一または異なるメモリタイプの複数の記憶装置を実装し得る。例えば、メモリ１１０は複数のフラッシュメモリ装置を実装し得る。代替的に、または追加的に、メモリ１１０は１つ以上のフラッシュメモリ装置と１つ以上のハードディスク格納装置とを実装し得る。相当な数の代替的な記憶装置の組み合わせが実装メモリ１１０に使用され得ることが理解され得る。
【００１９】
メモリ１１０に格納されＣＰＵ１０５によって実行され得るソフトウェアコードのいくつかは、図１では同一視されている。ここで示されている同一視されたソフトウェアコードは、オペレーティングシステム１２０と１つ以上のソフトウェア・アプリケーション１２５とを含む。この例では、プロセス・スケジューラ１３０とデバイスドライバ１３５は、オペレーティングシステム１２０の一部として含まれる。しかしながら、プロセス・スケジューラ１３０とデバイスドライバ１３５は、オペレーティングシステム１２０から分離したソフトウェアモジュールとしても実装され得る。ソフトウェア・アプリケーション１２５は、システム１００を実行するための高レベルな関数を規定するために用いられ得る。デバイスドライバ１３５は、ソフトウェア・アプリケーション１２５がシステム１００のハードウェアコンポーネントと通信するハードウェア概念層を提供するために用いられ得る。上記ハードウェアコンポーネントは、Ｉ／Ｏインターフェース１１５を介してアクセスされたコンポーネントを含み得る。
【００２０】
プロセス・スケジューラ１３０は、システム１００の各スレッドにＣＰＵ１０５の処理時間（「ＣＰＵ時間」）を割り当てるために用いられる、実行可能なソフトウェアコードを備える。上記ＣＰＵ時間は、各スレッドが対応するプロセスを正確に実行するための適切な長さのＣＰＵ時間を取得出来るように、割り当てられ得る。
【００２１】
図２は、プロセス・スケジューラ１３０を実行させるために用いられ得る、相互関係を有する多数のオペレーションを示す流れ図である。図２の流れ図は、プロセス・スケジューラ１３０内で用いられ得る多数の値と動作特性を示している。いくつかの値または動作特性は、設計過程の間にユーザ選択の結果として固定され得るが、その他の値または動作特性は、ユーザによって提供されるコンフィギュレーションデータを介して、および／または、システム１００のソフトウェアプログラミングを介して提供される。
【００２２】
図のように、プロセス・スケジューラ１３０は、ブロック２０５において多数の異なるアダプティブ・パーティションを生成する。各アダプティブ・パーティションは、プロセス・スケジューラ１３０によってグループ化されているプロセス・スレッドのセットに関連したスケジューリング属性に対して、仮想的な容器を構成する。共通の、または関係した機能として作用するスレッドは、同一のアダプティブ・パーティションを割り当てられ得る。オブジェクト指向のシステムにおいては、アダプティブ・パーティションは、対応するスケジュール方法と属性を含むアダプティブ・パーティションの類の一例として生成され得る。ブロック２０５において生成されるアダプティブ・パーティションの各々は、プロセス・スケジューラ１３０による更なるアクセスに対して一意的に同一視される。
【００２３】
プロセス・スケジューラ１３０によって生成されたパーティションの個数はコンフィギュレーション・パラメータの使用を介して初期化され得る。コンフィギュレーションデータはユーザ初期化コマンドによって、または、プロセス・スケジューラ１３０と調和するプログラムを介して提供され得る。
【００２４】
ブロック２１０において、プロセス・スケジューラ１３０によって用いられ得る平均ウィンドウのサイズが計算され得る。以下で更に詳しく述べられるように、上記平均ウィンドウとは、システムがオーバーロードされた場合にプロセス・スケジューラ１３０がアダプティブ・パーティションを担保されたＣＰＵ比率に保とうとする時間である。その他のウィンドウのサイズが適切であったとしても、典型的な時間は、１００ミリ秒単位である。平均ウィンドウのサイズはブート時間において指定され得、その後は同様に再指定され得る。平均ウィンドウのサイズを選択する上で考慮すべきことは、以下を含み得る。
【００２５】
・継続時間の短い平均ウィンドウのサイズがＣＰＵ時間の平衡度を低下させること。
【００２６】
・継続時間の短い平均ウィンドウのサイズが用いられた場合、自らのバジェットを使い果たすパーティションは、その他のパーティションが自らに担保された比率未満の比率しか使用していないため、必ずしも時間を返済しなくてもよいこと。
【００２７】
・ある場合には、継続時間の長い平均ウィンドウのサイズがランタイムの遅延に直面し、いくつかのアダプティブ・パーティションを引き起こし得ること。
【００２８】
平均ウィンドウのサイズ（「ウィンドウサイズ」）は、ミリ秒単位で割り当てられ得、スケジューリングプロセッサ１３０はそれをクロック数に変換する。クロック数とは、クロック割り込みイベントの間の間隔（システムタイマー）である。スケジューリングプロセッサ１３０によって用いられる時間バジェットの全ては、ウィンドウサイズ上で平均化され得る。
【００２９】
ブロック２１５において、スケジューリングプロセッサ１３０は担保されたＣＰＵ時間バジェットをアダプティブ・パーティションの各々に割り当てる。上記担保されたバジェットは、アダプティブ・システムバジェットの全体の比率として割り当てられ得る。そのような場合における全アダプティブ・ＣＰＵ比率の総和は、１００％となり得る。全ＣＰＵ時間バジェットのシェアを割り当てる目的上では、シンメトリックなマルチプロセッサシステムにおけるプロセッサは、個数に関係なく単一のプロセッサの場合と同じ仕方で考えられ得る。
【００３０】
各アダプティブ・パーティションに対して用いられる担保されたバジェットは、多くの異なる仕方で決定され得る。例えば、いくつかの異なる負荷条件の下で各パーティションによって用いられるＣＰＵ時間が計測され得、各パーティションによって消費されるＣＰＵ時間に対比して負荷のグラフを構成するために用いられる。計測は、オーバーロード条件の下でも行なわれ得る。システムデザイナーは、この情報を用いて、様々な条件下で各パーティションに収容された様々なスレッドの要求をバランス合わせし、適切な担保されたＣＰＵ時間バジェットを割り当て得る。上記計測は、上記担保されたＣＰＵ時間バジェットをＣＰＵ負荷条件に関して動的に（ｄｙｎａｍｉｃａｌｌｙ）変動させることにも用いられ得る。例えば、上記プロセス・スケジューラ１３０は、異なる動作条件に応答し、異なる動作モードに従って動作し得る。特定のモードで動作している間、上記プロセス・スケジューラ１３０はアダプティブ・パーティションパラメータについての一意なセットを用い得る。可用性と特定のモードに関連したパラメータとが、ブート時間に指定され得る。必要に応じてモードを切り替えるために、ランタイムにおけるアプリケーション・プログラミング・インターフェース（「ＡＰＩ」）が用いられ得る。例えば、担保されたＣＰＵ時間比率の第１のセットがスタートアップの間に用いられ得、一方で、システムのスタートアップが完了した後、担保されたＣＰＵ時間比率の第２のセットが通常動作の間に用いられ得る。
【００３１】
優先順位が各スレッドに割り当てられ、各スレッドはブロック２２０におけるアダプティブ・パーティションの各々に関連している。機能が関係しているソフトウェアは同一のアダプティブ・パーティションに割り当てられ得る。このことは、優先順位がアダプティブ・パーティションの担保されたＣＰＵ時間比率と同様にスレッドに割り当てられているハイブリッドプロセス・スケジューリングシステムが、プロセス・スケジューラ１３０によって実行されるスケジュール決定において用いられるという効果がある。
【００３２】
各アダプティブ・パーティションにスレッドを割り当てる際、システムの特定の機能の動作がいつ阻害されることになるかを判断するための、構造化された方法として、アダプティブ・パーティションのスケジューリングが用いられ得る。この仕方で用いられた場合、分離したスレッドは、特定の状況の下でＣＰＵ時間が足りないかどうかに基づいて異なるアダプティブ・パーティションに配置され得る。例えば、システム１００はパケット・ルータを動作させるように設計されたと仮定する。パケット・ルータによって実行され得るプロセスのいくつかは、１）ルーティング・パケット、２）パケット・ルーティングに対する収集・ロギング統計量、３）ピアルーターに対するルート・トポロジー・プロコトル、４）収集・ロギングおよびルート・トポロジー計量。そのような場合、これらのプロトコルのスレッドは、２つのアダプティブ・パーティションに割り当てられ得る。１つはルーティングに関連するスレッドに対し、もう１つはネットワークのトポロジーに関連するスレッドに対する。上記システムがいつオーバーロードされるか、すなわち、機械よりも際立った仕事があるかが、ことによると達成され得る。その結果、どのアプリケーションがより遅く実行し得るかを判断する必要が存在し得る。このため、ＣＰＵがルーティングおよび計量の両方に対してスレッドを実行するのに十分な資源を有していない場合は、上記ルートパケットが計量を収集・ルーティングするのとは対照的であることが好ましくあり得る。ＣＰＵ資源が制限されている場合でさえ、上記スレッドをネットワークトポロジープロトコルに関連して走らせることは、穏当であり得る。このような状況下では、当初は２つのアダプティブ・パーティションが考えられていたこととは対照的に、３つのアダプティブ・パーティションを用いることが好適であり得る。典型的な担保されたバジェットに沿う３つのアダプティブ・パーティションは、以下を含み得る。
【００３３】
・ルーティング・パケットに対するアダプティブ・パーティション（８０％シェア）
・トポロジー・プロトコルに対するアダプティブ・パーティション（１５％シェア）、但し、スレッドの最高優先順位はルーティング・パケットに対するアダプティブ・パーティション内のスレッドよりも高いものとする
・ルーティング計量とトポロジー・プロトコルの両方のロギングに対するアダプティブ・パーティション（５％シェア）。
【００３４】
アダプティブ・パーティションのスケジューリングは、この場合、全システム機能がＣＰＵ実行時間を付与されることを保証されている間、高ＣＰＵ負荷の期間に、ある種の機能が優先順位を付与し、様々なシステム機能を認識させるために使われている。ルーティングに関連したスレッドおよびロギング・ルーティング測定に関連したスレッドは、それらはルーティング動作に機能的に関係しているという事実にもかかわらず、分離したアダプティブ・パーティションに関連している。同様に、機能的に関係していない２つのコンポーネント、すなわちルーティング・メトリック・ロギングとトポロジー・メトリック・ロギングは同じアダプティブ・パーティションに関連している。様々なスレッドを異なるパーティションに割り当てる上記の仕方は、高ＣＰＵ負荷条件下でロギングスレッドによってプロセス・スケジューラ１３０がＣＰＵ時間の利用を減らすことを可能にし、依然としてメトリック・ロギングを誘導している間にルーティング・スレッドとトポロジー・プロトコル・スレッドとに優先順位を付与する。
【００３５】
ブロック２２５において、システムのどのスレッドが臨界状態で実行することが許容され得るかの決定が行われ得る。スレッドを臨界状態として指定することで、ともするとアダプティブ・パーティション・バジェットに対して担保されたバジェットが超過している場合でさえも、リアルタイム・システムに近似した仕方で実行する能力を、スレッドに付与する。特定のアダプティブ・パーティションに関連した臨界スレッドが、上記アダプティブ・パーティションに対する担保されたバジェットが不足しているにも関わらず走っているとき、上記アダプティブ・パーティションは短期債務に陥っていると呼称される。臨界スレッドは、様々なパーティション、例えばブート時間に関連し得る。臨界スレッドは、以下でより詳細に議論される。
【００３６】
臨界スレッドに関連したアダプティブ・パーティションの各々はブロック２３５において臨界時間バジェットを割り当てられる。上記臨界時間バジェットは、例えば、時間単位では、ミリ秒単位で指定され得る。典型的なシステムでは、上記臨界時間バジェットは、付与されたアダプティブ・パーティションに関連した臨界スレッドの全てに利用可能であり、平均ウィンドウの間の上記担保された時間バジェットを上回る、ＣＰＵ時間の長さである。臨界指定および臨界時間バジェットを用いることにより、臨界スレッドは、一般に、関連したアダプティブ・パーティションが担保されたバジェットを使い果たした場合でさえも、ＣＰＵ上で実行する機会を有することになる。このことは、上記パーティションが利用可能な臨界時間バジェットを依然として有する間は起こり得る。臨界スレッドは、これらのパーティション内でリアルタイムに実行する能力を提供し得る。
【００３７】
ブロック２４０において、プロセス・スケジューラ１３０が従うべき様々なポリシー（ｐｏｌｉｃｉｅｓ）が、システム１００に随意的に割り当てられ得る。例えば、上記システム１００および／またはプロセス・スケジューラ１３０が上記アダプティブ・パーティションの破産状態を如何に扱うかを決定するために、破産ポリシーが１つ以上のアダプティブ・パーティションに適用され得る。アダプティブ・パーティションが平均ウィンドウの継続時間の間に担保されたＣＰＵ時間バジェットと臨界時間バジェットの両方を使い果たしている場合に、臨界アダプティブ・パーティションの破産が発生する。更なる例として、システム１００は、プロセス・スケジューラ１３０を有するレジスタに対するプロセスを可能にする、システムのオーバーロードが発生した場合に通知されるようなオーバーロード通知ポリシーを実行し得る。システムのオーバーロードは、例えば、上記平均ウィンドウ継続時間の間に、準備完了状態にある全スレッドがＣＰＵ上で実行され得ない場合に発生する。システム１００がオーバーロード状態に入る、および／または、オーバーロード状態から抜け出す場合、プロセスはオーバーロード情報を登録し得る。アプリケーションは、例えば、より重要度が低い機能をスキップすることによって、または、計算精度を低くすることによって、自らの仕事（ｓｅｒｖｉｃｅ）を上品に（ｇｒａｃｅｆｕｌｌｙ）低下させるために、上記オーバーロード通知を使用する。以下で述べられるように、アダプティブ・パーティションは、他のアダプティブ・パーティションがスリープ（ｓｌｅｅｐ）している場合に、バジェットを超過（ｇｏ  ｏｖｅｒ）する。必ずしもこのこと自体がシステムのオーバーロードとして考えられるわけではないので、オーバーロード通知ポリシーの開始を要求しない。
【００３８】
ブロック２４５において、プロセス・スケジューラ１３０には前述の状態に対応するデータ、ブロック２０５から２４０を通して提供された値、および／または、割り当てが備えられている。上述のように、これらの状態、値、および／または、割り当ては、多数の異なる様態、例えば、システム設計者によって、システムユーザによって、他のソフトウェアプログラム等を介して、システム１００内で用いられるように提供され得る。
【００３９】
ブロック２５０は、ブロック２４５の構成データに従った、スレッドの実行を表している。様々なアダプティブ・パーティションの属性は、動的であり得る。このため、
ブロック２０５に戻る矢印（ｆｌｏｗ  ｌｉｎｅ）によって表されているように、前述の１つ以上のブロックで示されているパラメータは、システム要求、システム状態、システム機能の変化、等に応答して変化し得る。
【００４０】
システム１００内のスレッドはまた、時間が経つと、動的にも変動し得る。例えば、アダプティブ・パーティションに関連したスレッドまたはスレッドのグループは、動作中に他のスレッドを生み出す（ｓｐａｗｎ）、または生成（ｇｅｎｅｒａｔｅ）し得る。当初のスレッドは、親スレッド（ｐａｒｅｎｔ  ｔｈｒｅａｄ）と呼称され、一方で、引き起こされたスレッドは、子スレッド（ｃｈｉｌｄ  ｔｈｒｅａｄ）と呼称され得る。プロセス・スケジューラ１３０は、子スレッドが親スレッドのアダプティブ・パーティションを自動的に引き継ぐように構成され得る。代替的に、または追加的に、他のアダプティブ・パーティション内にスレッドを生むことを可能にし得るＡＰＩが提供され得る。そのようなＡＰＩは、十分な権限を有するコードに対してのみ都合が良いように構成され得る。例えば、システム・アプリケーション・ラーンチャがそのような権限を有し得る。
【００４１】
図３は、どのパーティションも自らのＣＰＵバジェットを超えない通常負荷条件（ｎｏｒｍａｌ  ｌｏａｄ  ｃｏｎｄｉｔｉｏｎ）の下で、プロセス・スケジューラ１３０が動作し得る、一つの様態を示している。この例では、プロセス・スケジューラ１３０は３つのアダプティブ・パーティション３０１，３０２、および３０３を生成している。アダプティブ・パーティション３０１は、マルチメディア・アプリケーションのスレッド３０５，３０６，３０７、および３０８に関連し得る。アダプティブ・パーティション３０２は、Ｊａｖａ（登録商標）アプリケーションのスレッド３１５，３１６，３１７，３１８、および３１９に関連し得る。アダプティブ・パーティション３０３は、システム・ロギング・アプリケーションのスレッド３２０，３２５，３３０，３３５、および３４０に関連し得る。スレッド３０５〜３４５は、様々なスケジューリング・プロパティを有し、上記スケジューリング・プロパティは、図３では括弧で記され、関連したアダプティブ・パーティションの担保されたバジェットとは、独立であり得る。
【００４２】
動作中、各アダプティブ・パーティション３０１〜３０３とスレッド３０５〜３４５は、異なる動作状態にあると仮定し得る。アダプティブ・パーティション３０１〜３０３は、例えば、アクティブ状態またはスリープ状態で動作し得る。動作状態では、上記アダプティブ・パーティションのスケジューリング属性は関連したスレッドに対するＣＰＵ時間をスケジュールするために用いられ得る。スリープ状態は、アダプティブ・パーティションに関連した準備完了状態のスレッドが存在しない場合に起こる。そのような場合では、プロセス・スケジューラ１３０は、アダプティブ・パーティションを存在しないものとして効果的に取り扱う。
【００４３】
スレッドは、例えば、ランニング状態（ｒｕｎｎｉｎｇ  ｓｔａｔｅ）、準備完了状態、またはブロック状態（ｂｌｏｃｋｅｄ  ｓｔａｔｅ）であると仮定し得る。スレッドは、ＣＰＵによって実行されている間はランニング状態にある。プロセス・スケジューラ１３０によって決定される時間においてＣＰＵによってスレッドを実行するのに準備万端な状態にすることを満足しているとき、準備完了状態にある。スレッドは、１つ以上のイベントの発生を待機している間、ブロック状態にある。ブロック状態の間、上記スレッドはいかなるＣＰＵ資源を消費するのにも準備完了ではない。一旦、スレッドによって待機されているイベントが発生すると、スレッドはブロック解除（ｕｎｂｌｏｃｋｅｄ）され、準備完了状態またはランニング状態に入り得る。
【００４４】
アダプティブ・パーティション３０１〜３０３および対応するスレッド３０５〜３４５は、様々な負荷条件の間のプロセス・スケジューラ１３０の動作を記述するのに用いられ得る。この例では、上記プロセス・スケジューラ１３０は、ＣＰＵを、準備完了スレッドの優先順位に基づいて、各アダプティブ・パーティション３０１，３０２、および３０３に割り当てられた準備完了スレッド３０８，３１５、および３４５を実行するために利用出来るようにする。通常負荷条件下では、システム１００内の最高位の優先順位にあるスレッドは、準備完了状態になると直ちに実行し得る。スレッドが準備完了であるかどうかは、例えば遮断現象または類似のものの発生を介する仕方を含む多数の異なる仕方を通して、プロセス・スケジューラ１３０に示唆され得る。図示されている例では、最高位の優先順位にある準備完了スレッドは、優先順位１７を有するスレッド３４５である。スレッド３４５は、終了（ｆｉｎｉｓｈｅｄ）、ブロックされる（ｂｌｏｃｋｅｄ）まで、または、アダプティブ・パーティション３０３に対するバジェットが使い果たされるまで、ランニング状態で動作し続け得る。重負荷（ｈｅａｖｙ  ｌｏａｄ）の下では、アダプティブ・パーティションは、自身のＣＰＵバジェットを超過すると、その最高位の優先順位にあるスレッドは、上記パーティションがＣＰＵバジェット内で利用可能な時間を再び有するまで走らない。このことは、足りないＣＰＵ時間をパーティション３０１，３０２、および３０３に分け与える、システム１００上の安全措置である。この状態では、上記プロセッサは、自身の担保されたＣＰＵ時間バジェット内に残っているＣＰＵ時間でアダプティブ・パーティション内の最高優先順位にあるスレッドを実行させる。
【００４５】
アダプティブ・パーティションがスリープ状態に入ると、プロセス・スケジューラ１３０は、スリープしているパーティションのＣＰＵバジェットを、他のアクティブなアダプティブ・パーティションに割り当てる。上記他のアクティブなアダプティブ・パーティションが自身のバジェットを超過している場合でも、同様である。例えば、アダプティブ・パーティション３０３がスリープ状態に入った場合、上記プロセス・スケジューラ１３０は、アダプティブ・パーティション３０３に対するバジェットを、アダプティブ・パーティション３０２に割り当てる。これは、アダプティブ・パーティション３０２が最高優先順位にある準備完了スレッド３１５を有しているためである。２つ以上のアダプティブ・パーティションが最高優先順位が同じであるスレッドを有している場合、プロセス・スケジューラ１３０は、その他のアダプティブ・パーティションの割合に比例して自由時間（ｆｒｅｅ  ｔｉｍｅ）を分け与える。この割り当ては、２つのアダプティブ・パーティションが同じ優先順位を有している場合に、準備完了キュー遅延時間（ｒｅａｄｙ−ｑｕｅｕｅ  ｄｅｌａｙ  ｔｉｍｅｓ）が長くならないようにするのに役立つ。
【００４６】
図４の例では、それぞれが７０％、２０％、および１０％のＣＰＵバジェット担保を有する、３つのアダプティブ・パーティション４０１，４０２、および４０３が存在する。更に、各アダプティブ・パーティション４０１，４０２、および４０３は、優先順位１４を有する準備完了スレッド４０８，４１５、および４４５を含んでいる。アダプティブ・パーティション４０１がスレッド４０８のブロックを介してスリープ状態に入ると、プロセス・スケジューラ１３０は、当初のＣＰＵバジェット割り当てに対応する比率である２：１の比率で、利用可能なＣＰＵ時間の全てをアダプティブ・パーティション４０２と４０３に割り当てる。短い時間の間、アダプティブ・パーティション４０１がスリープ状態にあると、上記プロセス・スケジューラ１３０は、アダプティブ・パーティション４０２と４０３がパーティション４０１の消費で利用されたＣＰＵ時間を返済出来るようにＣＰＵ資源を再割り当てすることによって、アダプティブ・パーティション４０１が、その後、自身に担保されたＣＰＵ時間バジェットでＣＰＵ時間を受け取ることを保証し得る。長い時間の間、アダプティブ・パーティション４０１がスリープ状態にあると、アダプティブ・パーティション４０２と４０３によって用いられた時間の一部または全部が自由になり得る。アダプティブ・パーティションが短い時間、または長い時間の間にスリープ状態にあるかどうかは、様々な仕方で決定され得る。例えば、アダプティブ・パーティションは、１つの平均ウィドウの範囲から（ｗｉｎｄｏｗｓｉｚｅ）−（ｂｕｄｇｅｔｐｅｒｃｅｎｔａｇｅ＊ｗｉｎｄｏｗｓｉｚｅ）だけ短い継続時間の間にスリープ状態にある場合、短い時間の間スリープ状態にあると呼称され得る。
【００４７】
全アダプティブ・パーティションが自身のＣＰＵバジェットのリミットにあると、プロセス・スケジューラ１３０はシステム１００内の最高位の優先順位にあるスレッドの実行を指定し得る。２つのアダプティブ・パーティションが最高位の優先順位が同じであるスレッドを有している場合、自身のバジェットに対して使った時間の比率が最も小さいアダプティブ・パーティションが実行し得る。この動作の仕方は、さもなくば発生し得る長時間の準備完了キューの遅延を回避するために使用され得る。図４に示されている例では、ウィンドウサイズは１００ミリ秒単位であり得、アダプティブ・パーティション４０１はＣＰＵバジェットの７０％を割り当てられ４０ミリ秒を使っており、アダプティブ・パーティション４０２はＣＰＵバジェットの２０％を割り当てられ５ミリ秒を使っており、アダプティブ・パーティション４０３はＣＰＵバジェットの１０％を割り当てられ７ミリ秒を使っている。パーティションの全ては、優先順位１４の準備完了スレッドを有する。この状況では、アダプティブ・パーティション４０１に対する相対比が４０ｍｓ／７０ｍｓ、あるいは０．５７であり、アダプティブ・パーティション４０３に対する相対比が７ｍｓ／１０ｍｓ、あるいは０．７であるのに対し、アダプティブ・パーティション４０２に対する相対比が５ｍｓ／２０ｍｓ、あるいは０．２５であるため、アダプティブ・パーティション４０２のスレッド４１５が実行する。
【００４８】
アダプティブ・パーティションが割り当てられたＣＰＵバジェットを拡張されており、１つ以上の準備完了スレッドが臨界的であるとして指定されている場合、プロセス・スケジューラ１３０は、上記アダプティブ・パーティションが臨界的なスレッドを走らせるために臨界的なＣＰＵバジェットを用いることを許容し得る。臨界的な時間バジェットとは、上記アダプティブ・パーティションに関連した臨界スレッドの全てを走らせるために上記プロセス・スケジューラ１３０がアダプティブ・パーティションに割り当てる、ＣＰＵ時間の長さである。このＣＰＵ時間バジェットは、上記プロセス・スケジューラ１３０が、アダプティブ・パーティションに対し、平均ウィンドウの間に上記パーティションの通常バジェットを割り当てるＣＰＵ時間の構成要素となる。結果として、臨界的なスレッドは、関連したアダプティブ・パーティションがバジェットを切らしている場合でさえ、アダプティブ・パーティションが自身の臨界時間バジェットを使い果たしていない場合と同様に実行し得る。
【００４９】
図５は、２つのアダプティブ・パーティション５０１と５０２を有するシステムを図示している。スレッド５０５，５０６，５０７、および５０８は、アダプティブ・パーティション５０１に関連しており、一方で、スレッド５１５，５１６，５１７，５１８、および５１９は、アダプティブ・パーティション５０２に関連している。アダプティブ・パーティション５０１は、例えばエアバッグ・ノーティフィケーション・プロセス（ａｉｒｂａｇ  ｎｏｔｉｆｉｃａｔｉｏｎ  ｐｒｏｃｅｓｓ）に関連した関連したスレッドを備え得る。アダプティブ・パーティション５０１のスレッド５０５と５０８は、臨界スレッドとして半ば指定されている。しかしながら、スレッド５０８のみが準備完了状態にある。
【００５０】
この例では、アダプティブ・パーティション５０１は自身に担保されたＣＰＵ時間バジェットを使い果たしている。それにも関わらず、臨界指定を通して重点を置かれているため、臨界スレッド５０８は実行することを許容され得る。結果として、上記プロセス・スケジューラ１３０は、アダプティブ・パーティション５０１の臨界時間バジェット内にＣＰＵ時間が依然として存在している場合に、ＣＰＵ時間を臨界スレッド５０８に割り当てられる。
【００５１】
プロセス・スケジューラ１３０が臨界スレッド、例えば５０８のようなスレッドの動作をスケジュールする場合、上記プロセス・スケジューラは、上記スレッドに関連したアダプティブ・パーティションの入手可能な担保されたＣＰＵ時間バジェットに上記スレッドのランタイムを請求する。しかしながら、上記プロセス・スケジューラ１３０は、上記プロセス・スケジューラ１３０が臨界スレッドを走らせ得ない場合に限って、上記アダプティブ・パーティションの臨界時間バジェットの代わりに、上記臨界スレッドによって用いられたＣＰＵ時間をカウントする。このため、上記臨界スレッドを実行する際に用いられたＣＰＵ時間は、次の場合に、関連したアダプティブ・パーティションの臨界時間バジェットの代わりにはカウントされない。１）システムがオーバーロードされていない、２）システムはオーバーロードされているが１つ以上のアダプティブ・パーティションが自身に担保されたＣＰＵ時間バジェットを使い果たし得ない。
【００５２】
臨界スレッドは、ブロッキング状態に入るまで、臨界的実行状態（ｃｒｉｔｉｃａｌ  ｒｕｎｎｉｎｇ  ｓｔａｔｅ）のままであり得る。すなわち、他の任意のスレッドと同様に、実行状態または準備完了状態から離れ得る。上述のように、このことは、上記スレッドがメッセージを待つ間、通知を妨げる間、等に発生し得る。スレッドの臨界性、またはアダプティブ・パーティションの臨界時間バジェットを請求することは、優先順位の引継ぎを引き起こす動作の間のアダプティブ・パーティションと共に引き継がれ得る。
【００５３】
短期債務は、パーティションに対して指定された臨界時間バジェットによって制限される。時間が経つと、上記パーティションは短期債務を返済するように要求され得る。上記アダプティブ・パーティションの臨界バジェットを超過している臨界スレッドは、関連したアダプティブ・パーティションを破産に追いやると考えられ得る。破産はアプリケーション・エラーとして扱われ得、デザイナーは上記システムの返答を指定し得る。返答に対する典型的な選択は、１）システムをリブートさせること、２）内部または外部のシステム・ウォッチドッグ（ｓｙｓｔｅｍ  ｗａｔｃｈｄｏｇ）を通知すること、および／または、３）別の指定されたプロセスを終了すること、および／または、通知すること、を含む。上記システムは、アダプティブ・パーティションが自身の臨界的な時間バジェットを使い果たした場合、ログ（ｌｏｇ）等へのエントリーを追加し得る。上記アダプティブ・パーティションに対するバジェットが、（例えば、モード変更、ＣＰＵ比率を変更するためのＡＰＩコール、等を介して）動的に変更される場合、上記プロセス・スケジューラ１３０は、アダプティブ・パーティションが破産しているかについてテストをする前に、遅延を賦課し得る。このことは、アダプティブ・パーティションが破産を宣言される前に、バジェットを安定化させることを可能にする。
【００５４】
臨界スレッドの指定は、多数の異なる仕方で起こり得る。例えば、上記システムは、Ｉ／Ｏ割り込みによって開始されるスレッドを、臨界的になるように自動的にマスクする。上記システムはまた、追加的なアプリケーション、または、例えば、自身に関連したハンドラ・スレッドを臨界的であるとしてマーク（ｍａｒｋ）し得るタイマーのような、オペレーティングシステム通知イベント（ｏｐｅｒａｔｉｎｇ  ｓｙｓｔｅｍ  ｎｏｔｉｆｉｃａｔｉｏｎ  ｅｖｅｎｔｓ）のセットを指定し得る。ＡＰＩはまた、選択されたスレッドを臨界的であるとしてマークするためにも用いられ得る。更に、臨界的な親スレッドの子スレッドは、自動的に臨界的であるとして指定され得る。
【００５５】
プロセス・スケジューラ１３０はまた、メッセージが１つ以上の送信／クライアント・スレッドを通り、１つ以上の受信／サーバ・スレッドによって受け取り・処理される、クライアント／サーバ・システムにおいて用いるようにも構成され得る。図６は、上記のようなクライアント／サーバ環境においてプロセス・スケジューラ１３０を実行させるために用いられ得る、相互関係を有する多数のプロセスを示している。ブロック６０５では、第１のアダプティブ・パーティション内にあるクライアント・スレッドは、第２のアダプティブ・パーティション内にあるサーバ・スレッドにメッセージを送信する。クライアント・スレッドがサーバ・スレッドにメッセージを送信すると、上記メッセージを受信するサーバ・スレッドは、上記送信スレッドの優先順位を引き継ぎ得る。このことは、上記サーバ・スレッドが送信クライアントの代わりに仕事をしているため、優先順位の転換を回避させる。上記サーバ・スレッドによる上記送信スレッドの優先順位レベルの引継ぎは、ブロック６１０に示されている。上記プロセス・スケジューラ１３０はまた、ブロック６１０において、臨界スレッドと同じ臨界状態をサーバ・スレッドに割り当てられる。ブロック６１５において、上記プロセス・スケジューラ１３０は、上記サーバ・スレッドを上記クライアント・スレッドに関連したのと同じアダプティブ・パーティションに関連付け
られる。
【００５６】
図７は、図６に示されるオペレーションのいくつかの局面を説明するために用いられ得るシステムを図示している。この例では、３つのアダプティブ・パーティション７０１，７０２、および７０３がある。アダプティブ・パーティション７０２は、例えば、ファイルシステムによって処理される、実行タイプの（ｏｆ  ｔｈｅ  ｔｙｐｅ  ｒｕｎ）サーバ・スレッド７２０と７２５を含む。アダプティブ・パーティション７０２に割り当てられた属性は、システムの設計によって変動し得る。しかしながら、この例では、アダプティブ・パーティション７０２はＣＰＵ時間バジェットがゼロであるように生成されており、スレッド７２０と７２５はデフォルトの優先順位７を割り当てられている。アダプティブ・パーティション７０１は、多数の異なるスレッド７０５，７１０、および７１５を備え得、スレッド７１５は、アダプティブ・パーティション７０２の１つ以上のサーバ・スレッドへメッセージを送信するクライアント・スレッドの構成要素となる。同様に、アダプティブ・パーティション７０３は、多数の異なるスレッド７３０，７３５，７４０、および７４５を備え得、スレッド７４５は、アダプティブ・パーティション７０２の１つ以上のサーバ・スレッドへメッセージを送信するクライアント・スレッドの構成要素となる。
【００５７】
図７の直線７５０に示されるように、クライアント・スレッド７１５は、アダプティブ・パーティション７０２のスレッド７２０によって受信、あるいは、処理されることになるメッセージを伝えている。同様に、直線７５５として示されているように、アダプティブ・パーティション７０３のクライアント・スレッド７４５は、アダプティブ・パーティション７０２のスレッド７２５によって受信、あるいは、処理されることになるメッセージを伝える。メッセージの転送７５０と７５５が発生すると、プロセス・スケジューラ１３０は、サーバ／受信の各々をメッセージを送信するスレッドのアダプティブ・パーティションに関連付ける。そのような場合、直線７６０によって示されているように、サーバ・スレッド７２０は一時的にアダプティブ・パーティション７０１に関連し、スレッド７１５と同じ優先順位１４を割り当てられる。同様に、直線７６５に示されるように、サーバ・スレッド７２５は一時的にアダプティブ・パーティション７０３に関連し、スレッド７４５と同じ優先順位１２を割り当てられる。スレッド７２０と７２５の両方は、準備完了状態に置かれ得、一方で、各メッセージが処理されるように、スレッド７１５と７４５はブロック状態に置かれ得る。一旦、スレッド７２０がスレッド７１５から受信したメッセージの処理を完了すると、スレッド７２０は、デフォルトの優先順位７を有するアダプティブ・パーティション７０２に関連した、自らのオリジナルな状態に戻り得る。スレッド７２５もまた、一旦スレッド７４５から受信したメッセージの処理が完了すると、デフォルトの優先順位７を有するアダプティブ・パーティション７０２に関連した、自らのオリジナルな状態に戻り得る。
【００５８】
クライアントスレッドは、時々、既に他のクライアント・スレッドから受信した１つ以上のメッセージを処理するのに忙しいサーバ・スレッドと通信しようとする。例えば、サーバ・スレッド７２５がスレッド７４５から受信した１つ以上の優先するメッセージを処理するのに忙しい間に、アダプティブ・パーティション７０３のスレッド７４０がブロック解除され、サーバ・スレッド７２５にメッセージを送信しようとする場合、サーバ・スレッド７２５は、一般に、クライアント・スレッド７４５からの優先するメッセージを処理することを完了するまでスレッド７４０へ返答することが不可能であり得る。そのような場合、上記プロセス・スケジューラ１３０は、例えば、上記クライアント・スレッドと同じ通信経路に仕える１つ以上のサーバ・スレッドの優先順位を一時的に上げ得る。これらのオペレーションに対応するクエリー（ｑｕｅｒｙ）とアクション（ａｃｔｉｏｎ）は、図６のブロック６２０と６２５に図示されている。図７のシステムに適合しているように、アダプティブ・パーティション７０３に割り当てられているスレッドとアダプティブ・パーティション７０２に割り当てられているスレッドとの間の通信経路は、例えば、同じ識別名／識別番号を割り当て得る。結果として、サーバ・スレッド７２５の優先順位は、クライアント・サーバ７４０からのメッセージを処理するためにサーバ・スレッド７２５が利用可能となる前に発生し得る待ち時間を減らすために上げられ得る。アダプティブ・パーティション７０２内のスレッドの性質に応じて、複数のサーバ・スレッドの優先順位のレベルが上げられ得る。
【００５９】
図６のブロック６３０において、プロセス・スケジューラ１３０は、適切な仕方でスレッド７２０と７２５の各々に対して、実行時間を請求するように動作する。上記の実行時間を請求するための適切な仕方は、変動し得る。ある仕方は、送信スレッドに関連したアダプティブ・パーティションのＣＰＵバジェット、および／または、臨界ＣＰＵバジェットに対して受信スレッドの実行時間を照会することを含む。図７の例では、スレッド７１５によって送信されたメッセージに応答してスレッド７２０によって用いられる実行時間は、アダプティブ・パーティション７０１のＣＰＵバジェット、および／または、臨界ＣＰＵバジェットに不利となり得る。同様に、スレッド７４５によって送信されたメッセージに応答してスレッド７２５によって用いられる実行時間は、アダプティブ・パーティション７０３のＣＰＵバジェット、および／または、臨界ＣＰＵバジェットに不利となり得る。
【００６０】
ファイル・システム、デバイスドライバ、等のシステム・コンポーネントは、担保されたＣＰＵ時間をゼロに割り当てられ得る。そのような場合、上記システム・コンポーネントに関連するスレッドによって用いられるＣＰＵ時間は、それらのクライアントに請求される。しかしながら、時々、プロセス・スケジューラ１３０は、特定のシステム・コンポーネント・スレッドが結局のところどのスレッドのために働いているかを見出すことが遅すぎることを見出す。結果として、上記プロセス・スケジューラ１３０は、時宜にかなった仕方で上記システム・コンポーネントのスレッドの稼動を請求すること、および／または、適切なアダプティブ・パーティションを請求することが不可能となり得る。更に、デバイスドライバのようないくつかのシステム・コンポーネントは、特定のクライアントに帰属することが出来ないバジェットを要求する、（例えば、監視または維持のための）バックグラウンド・スレッド（ｂａｃｋｇｒｏｕｎｄ  ｔｈｒｅａｄ）を有し得る。そのような場合、システムデザイナーは、バックグラウンド・オペレーションと、様々なシステム・コンポーネントに関連付けられた属性付けられない負荷を計測し得る。上記の計測結果は、様々なシステム・コンポーネントのスレッドに関連したアダプティブ・パーティションにゼロでないバジェットを提供するために用いられ得る。
【００６１】
動作中、プロセス・スケジューラ１３０は、単に、バジェットに残された担保されたＣＰＵ時間を有するアダプティブ・パーティションに関連した最高優先順位の準備完了スレッドを稼動させるだけにはとどまらない。例えば、全てのアダプティブ・パーティションがほぼ同時に担保されたＣＰＵ時間を使い果たしてしまった場合、上記プロセス・スケジューラ１３０は、関連したアダプティブ・パーティションの属性に関係なくシステム内の最高優先順位のスレッドを稼動させる。更に、アダプティブ・パーティションが最高優先順位が同じであるスレッドを有している場合、上記プロセス・スケジューラ１３０は担保されたＣＰＵ時間の割合を表す比を用いてＣＰＵ時間を割り当てし得る。最終的に、臨界スレッドは、上記アダプティブ・パーティションが依然として臨界時間バジェットを処理している時は、自身のアダプティブ・パーティションがバジェットを切らした場合さえ、稼動し得る。
【００６２】
プロセス・スケジューラ１３０は、各アダプティブ・パーティションに関連した１つ以上の順序化関数（ｏｒｄｅｒｉｎｇ  ｆｕｎｃｔｉｏｎｓ）ｆ（ａｐ）を用い得る。順序化関数は様々な異なる仕方で計算され得る。順序化関数の計算によって得られた結果は、上記プロセス・スケジューラ１３０がシステムの様々なアダプティブ・パーティションに関連したスレッドを如何にスケジュールするかを決定するために、それぞれがお互いに比較され得る。
【００６３】
順序化関数ｆ（ａｐ）を計算する際、多数の異なる変数が用いられ得る。ここでは、種々の変数が１つの例に関連して述べられている。以下の例では、「ｉｓ＿ｃｒｉｔｉｃａｌ（ａｐ）」をブール変数とする。「ｉｓ＿ｃｒｉｔｉｃａｌ（ａｐ）」の値は、１）アダプティブ・パーティション、すなわちａｐが利用可能な臨界バジェットを有するかどうかと、２）上記アダプティブ・パーティション、すなわち、ａｐ内にある最高優先順位の準備完了スレッドが、臨界状態を割り当てられているかどうか、に依存する。「ｈａｓ＿ｂｕｄｇｅｔ（ａｐ）」をアダプティブ・パーティションａｐが先の平均ウィンドウの間に担保されたＣＰＵ時間バジェットよりも短いＣＰＵ時間を消費しているかどうかを示唆するブール変数とする。「ｈｉｇｈｅｓｔ＿ｐｒｉｏ（ａｐ）」をアダプティブ・パーティションａｐ内の稼動準備が整ったスレッド全ての中での最高優先順位を示唆する整数変数とする。「ｒｅｌａｔｉｖｅ＿ｆｒａｃｔｉｏｎ＿ｕｓｅｄ（ａｐ）」を、先の平均ウィンドウの間にアダプティブ・パーティションａｐによって消費されたＣＰＵ時間のミリ秒数をアダプティブ・パーティションａｐのバジェットを例えばミリ秒数で表したもので割った比に対応する、実数変数とする。最後に、ｂ（ａｐ）を、上記アダプティブ・パーティションａｐ内のスレッドによるＣＰＵ時間消費の現行比率に対応するブール変数とする。更に詳しくは、ｂ（ａｐ）は、上記パーティションａｐに関連したスレッドによるＣＰＵ時間消費の現行比率が与えられた場合に真の論理値を割り当てられ得、ｈａｓ＿ｔｈｒｅａｄ（ａｐ）の値もまた、上記プロセス・スケジューラ１３０が上記アダプティブ・パーティションに関連したスレッドを再びスケジュールするように求められそうな時に、真の論理値を取り得る。
そうでない場合、ｂ（ａｐ）は、負の論理値を割り当てられ得る。先の全ての変数ではないその他の変数が順序化関数ｆ（ａｐ）を計算するために用いられる得ることが理解され得る。どの変数を用いるかは、システムデザイナー、および／または、エンドユーザに依存する。
【００６４】
ｂ（ａｐ）の値は、多数の異なる仕方で計算され得る。例えば、変数ｔが高分解能のカウンター内の現在の時間を示唆するとし、チック（ｔｉｃｋ）はプロセス・スケジューラが全パーティションを検査する通常イベント（ｒｅｇｕｌａｒ  ｅｖｅｎｔ）の間の時間の長さであるとする。チックの期間は平均ウィンドウのサイズ（「ｗｉｎｄｏｗｓｉｚｅ」）よりも短くあり得る。関数ｃｐｕ＿ｔｉｍｅ＿ｕｓｅｄ（ｔ１，ｔ２）は、絶対時間ｔ１とｔ２の間にパーティションａｐのスレッドによって用いられたＣＰＵ時間の実質的な値に対応しているとする。更に、ｂｕｄｇｅｔ（ａｐ）はパーティションａｐに対して担保されたバジェットの時間値に対応しているとする。従って、ｂ（ａｐ）の値は以下の式を用いて計算され得る。
【００６５】
ｂ（ａｐ）＝Ｂｏｏｌｅａｎ（ｃｐｕ＿ｔｉｍｅ＿ｕｓｅｄ（ｎｏｗ，ｎｏｗ−ｗｉｎｄｏｗｓｉｚｅ）−ｃｐｕ＿ｔｉｍｅ＿ｕｓｅｄ（ｎｏｗ−ｗｉｎｄｏｗｓｉｚｅ＋ｔｉｃｋ，ｎｏｗ−ｗｉｎｄｏｗｓｉｚｅ）＜ｂｕｄｇｅｔ（ａｐ））。
【００６６】
上述の変数を用いて順序化関数ｆ（ａｐ）を計算するための１つの仕方は、図８に示されている。図示されているオペレーションは、システム１００内で使用される各アダプティブ・パーティションａｐを実行し得る。図のように、ブロック８００において、プロセス・スケジューラ１３０は上記パーティションが稼動するのに準備完了なスレッドを有するかどうかを判断する。上記アダプティブ・パーティションａｐに関連した準備完了スレッドが存在しない場合、上記アダプティブ・パーティションに対する順序化関数ｆ（ａｐ）はブロック８０２において値ｆ（０，０，０，０）を割り当てられ得、ブロック８０３において次のアダプティブ・パーティションに対する順序化関数の計算が開始され得る。上記プロセス・スケジューラ１３０は、上記アダプティブ・パーティションａｐが利用可能な臨界ＣＰＵバジェットを有するかどうかをブロック８０５で判断し、もしそうならば、上記アダプティブ・パーティションａｐ内の最高優先順位にある準備完了スレッドが臨界状態を割り当てられているかどうかを判断する。この判断に基づき、上記プロセス・スケジューラ１３０は、ブロック８１０において、変数「ｉｓ＿ｃｒｉｔｉｃａｌ（ａｐ）」に適切な論理状態を割り当てる。ブロック８１３において、上記プロセス・スケジューラ１３０は、先の平均ウィンドウの間に上記アダプティブ・パーティションによって用いられたＣＰＵバジェットを評価する。ブロック８１５において、上記プロセス・スケジューラ１３０は、上記アダプティブ・パーティションが自身に担保されたＣＰＵ時間バジェットよりも短いＣＰＵ時間を使っているかどうかを判断する。この判断に基づき、上記プロセス・スケジューラ１３０は、ブロック８２０において、変数「ｈａｓ＿ｂｕｄｇｅｔ（ａｐ）」に適切な論理状態を割り当てる。ブロック８１３で得られた値を取り、それをアダプティブ・パーティションに対する担保されたＣＰＵバジェット時間で割ることによって、先の平均ウィンドウの間に用いられたＣＰＵバジェット時間の相対比は、ブロック８３０において計算される。この値は、ブロック８３５において、変数「ｒｅｌａｔｉｖｅ＿ｆｒａｃｔｉｏｎ＿ｕｓｅｄ（ａｐ）」に割り当てられる。
【００６７】
ブロック８４０において、プロセス・スケジューラ１３０は、アダプティブ・パーティションに関連したスレッドによるＣＰＵ時間消費の現行比率に対応する１つ以上の値を計算する。これらの値は、ブロック８４５において、変数ｂ（ａｐ）に対し適切な論理状態を割り当てるのに用いられる。
【００６８】
上述の変数の全て、または一部を用いることによって、所与のアダプティブ・パーティションａｐに対する順序化関数ｆ（ａｐ）がブロック８５０において計算される。この例では、順序化関数ｆ（ａｐ）は、順序の入った変数（ｘ，ａ，ｙ，ｚ）を用いることによって計算される。ここに、ｘ＝ｉｓ＿ｃｒｉｔｉｃａｌ（ａｐ）  ＯＲ  ｈａｓ＿ｂｕｄｇｅｔ（ａｐ）、ａ＝（Ｎｏｔ  ｘ）  ＡＮＤ  ｂ（ａｐ）、ｙ＝ｈｉｇｈｅｓｔ＿ｐｒｉｏ（ａｐ）、ｚ＝１−ｒｅｌａｔｉｖｅ＿ｆｒａｃｔｉｏｎ＿ｕｓｅｄ（ａｐ）である。順序化関数ｆ（ａｐ）を計算する際、ｘの値はａ，ｙ，またはｚの値よりも高い重要度を付与されており、ａの値はｙ，ｚの値よりも高い重要度が付与されており、ｙの値はｚの値よりも高い重要度が付与されている。
【００６９】
図９のブロック９０５に示されているように、プロセス・スケジューラ１３０は、最も大きなｆ（ａｐ）を有するアダプティブ・パーティションの最高優先順位にあるスレッドを稼動させる。しかしながら、上記プロセス・スケジューラ１３０は、上記スレッドの実行時間が上記アダプティブ・パーティションの臨界バジェットに割り当てられることになるか、単に担保されたバジェットに割り当てられることになるかを判断しなくてはならない。このため、上記プロセス・スケジューラ１３０は、上述の変数の１つ以上を使って、別の関数ｆｃｒｉｔｉｃａｌ（ａｐ）を計算しなければならない。この例では、ｆｃｒｉｔｉｃａｌ（ａｐ）は、順序が入った変数（ｗ，ｄ，ｙ，ｚ）を用いて計算される。ここに、ｗ＝ｈａｓ＿ｂｕｄｇｅｔ（ａｐ）、ｄ＝（ＮＯＴ  ｗ）ＡＮＤ  ｂ（ａｐ）、ｙ＝ｈｉｇｈｅｓｔ＿ｐｒｉｏ（ａｐ）、ｚ＝１−ｒｅｌａｔｉｖｅ＿ｆｒａｃｔｉｏｎ＿ｕｓｅｄ（ａｐ）である。ｆｃｒｉｔｉｃａｌ（ａｐ）を計算する際、変数ｗはｄ，ｙ，またはｚの値よりも高い重要度が付与されており、ｄの値はｙまたはｚの値よりも高い重要度が付与されており、ｙの値はｚの値よりも高い重要度が付与されている。この計算は、ブロック９１０に示されている。上記アダプティブ・パーティションに対する値ｆｃｒｉｔｉｃａｌ（ａｐ）とｆ（ａｐ）の比較は、ブロック９１５で行われる。ｆｃｒｉｔｉｃａｌ（ａｐ）の値がｆ（ａｐ）の値よりも小さい場合、上記スレッドに対する実行時間は、ブロック９２０において上記アダプティブ・パーティションの臨界バジェットに請求され、同様に、ブロック９２５において担保されたバジェットに請求される。ｆｃｒｉｔｉｃａｌ（ａｐ）の値がｆ（ａｐ）の値以上である場合、上記スレッドの実行時間は、ブロック９２５において、単に上記アダプティブ・パーティションの担保されたバジェットに請求される。上記プロセス・スケジューラ１３０によって用いられる任意の計算結果は、上記アダプティブ・パーティションに対する臨界バジェットが、上記アダプティブ・パーティションに関連する最高優先順位の臨界スレッドが臨界的でないスレッドまたはパーティションを有するプロセス・スケジューラ１３０によって稼動するようには選択され得ない場合に限って用いられることを保証する。
【００７０】
図１０は、図８のブロック８３０に記述されている先の平均ウィンドウの間に消費されたＣＰＵバジェット時間の相対比を計算する方法を実行するのに用いられ得る、多数の異なる相互関係を有するプロセッサを示している。アダプティブ・パーティションによって消費された相対比ＣＰＵバジェット時間は、例えば、上記アダプティブ・パーティションに関連したスレッドが先の平均ウィンドウの間に稼動しているミリ秒数をミリ秒単位の平均ウィンドウのシェアで割ったものである。代替的に、このことは、（ｔｏｔａｌ＿ＣＰＵ＿ｔｉｍｅ＿ｃｏｎｓｕｍｅｄ）／（ｗｉｎｄｏｗｓｉｚｅ＊ｐｅｒｃｅｎｔａｇｅ）として表し得る。フローティング・ポイント・ディビジョンに対する潜在的な需要を減らすために、プロセス・スケジューラ１３０は、各アダプティブ・パーティションに対して実質的に（ｔｏｔａｌ＿ＣＰＵ＿ｔｉｍｅ＿ｃｏｎｓｕｍｅｄ）／（ｗｉｎｄｏｗｓｉｚｗ＊ｐｅｒｃｅｎｔａｇｅ）と同じ順序性を有する数を計算し得る。従って、定数ｃ（ａ）は、最大の（ｔｏｔａｌ＿ＣＰＵ＿ｔｉｍｅ＿ｃｏｎｓｕｍｅｄ）＊ｃ（ａｐ）の有するアダプティブ・パーティションが、最大の（ｔｏｔａｌ＿ＣＰＵ＿ｔｉｍｅ＿ｃｏｎｓｕｍｅｄ）／（ｗｉｎｄｏｗｓｉｚｅ＊ｐｅｒｃｅｎｔａｇｅ）を有するアダプティブ・パーティションにもなるように、あらかじめ計算されている。
【００７１】
関数ｃ（ａｐ）は、例えば、システムのスタートアップの間、および、担保されたＣＰＵバジェットがシステムの様々なアダプティブ・パーティションの間に再割り当てされる時ならいつでも、あらかじめ計算され得る。ブロック１０１０において、例えば、スタートアップ時に、各アダプティブ・パーティションに対するＣＰＵバジェット比率が決定される。ブロック１０１５において、上記システムは、各アダプティブ・パーティションに対して因子ｑ（ａｐ）を計算し得る。ｑ（ａｐ）の値は、例えば、その他のアダプティブ・パーティション全てのＣＰＵバジェット比率の積として計算され得る。ブロック１０２０において、倍率が計算される。この例では、平均誤差の最大値がｍａｘ＿ｅｒｒｏｒ（例えば、１／２パーセント対して０．００５）の場合、ｋ＝ｍｉｎ（ｌｉｓｔ  ｏｆ  ｑ（ａｐ））＊ｍａｘ＿ｅｒｒｏｒとなる。一定の倍率ｃ（ａｐ）がステップ１０２５において計算される。この例では、ｃ（ａｐ）はｃ（ａｐ）＝ｑ（ａｐ）／ｋとして計算される。（ｔｏｔａｌ＿ＣＰＵ＿ｔｉｍｅ＿ｃｏｎｓｕｍｅｄ）＊ｃ（ａｐ）の値は、ｍａｘ＿ｅｒｒｏｒの許容誤差範囲内で、（ｔｏｔａｌ＿ＣＰＵ＿ｔｉｍｅ＿ｃｏｎｓｕｍｅｄ）／（ｗｉｎｄｏｗｓｉｚｅ＊ｐｅｒｃｅｎｔａｇｅ）と同じ順序性を有する。
【００７２】
異なるアダプティブ・パーティションによって用いられている相対比を実質的に比較するために、上記プロセス・スケジューラ１３０は、上記アダプティブ・パーティションに関連したスレッドの実行時間にｃ（ａｐ）を掛けることを要求し得る。しかしながら、請求される時間は、長い時間であり得る。上記プロセス・スケジューラ１３０がこれらの計算に関する単一または複数の命令を実行することになる場合、ブロック１０３０において、請求される時間は、ＣＰＵバジェット時間の最上位ビット数を選択することによって、まずは拡大縮小され得る。拡大縮小の比率は、ｍａｘ＿ｅｒｒｏｒの値によってセットされ得る。しかしながら、ｍａｘ＿ｅｒｒｏｒに対するいかなる妥当な選択（例えば、１／２％から１／４％）も、請求された実行時間の最上位１６ビットのみを選択することによって、満足され得る。そのような場合、システムは（ｔｏｔａｌ＿ＣＰＵ＿ｔｉｍｅ＿ｃｏｎｓｕｍｅｄ）＞＞３２＊ｃ（ａｐ）を計算し得る。ブロック１０３５において、相対バジェット比がｃ（ａｐ）＊（ａｄａｐｔｉｖｅ  ｐａｒｔｉｔｉｏｎ  ｅｘｃｅｃｕｔｉｏｎ  ｔｉｍｅ）として計算される。ここに、（ａｄａｐｔｉｖｅ  ｐａｒｔｉｔｉｏｎ  ｅｘｃｅｃｕｔｉｏｎ  ｔｉｍｅ）は、選択された数の（ｔｏｔａｌ＿ＣＰＵ＿ｔｉｍｅ＿ｃｏｎｓｕｍｅｄ）の最上位ビットを構成する。
【００７３】
０．５％から０．２５％の許容誤差は、実行に当たっては十分であると考えられる。しかしながら、アプリケーションは、指定された任意の許容誤差に対して、先の平均ウィンドウサイズの間にアダプティブ・パーティションａｐによって実行されるＣＰＵ時間を拡大縮小した値である最小ビット数が、ｃ（ａｐ）と、ｃ（ａｐ）の積と、拡大縮小されたＣＰＵ時間を表すために選ばれるという概念を含み得る。上記最小ビット数は、乗法関数（ｍｕｌｔｉｐｌｉｃａｔｉｏｎ  ｆｕｎｃｔｉｏｎ）を表現し、実行するために、表現と算術的誤差の全てが選択された許容誤差以下であるように選ばれる。
【００７４】
システム内の各アダプティブ・パーティションに対するＣＰＵ時間の請求は、多数の異なる仕方で実行され得、プロセス・スケジューラ１３０の動作中に何回も起こり得る。例えば、アダプティブ・パーティションの請求は、以下の場合ではいつでも起こり得る。１）スレッドがブロック状態からスタートする場合、２）スレッドが実行を停止する場合（すなわち、優先順位の高いスレッドに明け渡される場合、ブロックされている場合、等）、および／または、３）別の時に、ＣＰＵ時間の正確なカウントが上記プロセス・スケジューラ１３０によって要求される場合。
【００７５】
通常、プロセス・スケジューラは、スレッドがＣＰＵをどれだけ長く使ったかを判断するために、標準的なタイマー割り込み、またはチックを用いる。チック期間は、大抵、１ミリ秒から数ミリ秒単位である。
【００７６】
しかしながら、プロセス・スケジューラ１３０は、システムの様々なスレッドの実行時間を効率的に請求するコードを含み得る。このために、実質的にチック期間よりも短い期間を有する高分解能のハードウェア、および／または、ソフトウェアカウンターが用いられ得る。スレッドが実行を開始または停止するたびに、上記プロセス・スケジューラ１３０は、高分解能のカウンターの値に対応する、関連したパーティションにタイムスタンプを割り当てる。上記タイムスタンプの値は、利便性のある共通の時間単位に倍率をかけられる。スレッドの隣接した開始と停止に対するタイムスタンプの間の差は、適切なアダプティブ・パーティションを請求するために用いられる。
【００７７】
高分解能のカウンターは、多くの異なる仕方で実装され得る。例えば、いくつかのＣＰＵは、ＣＰＵが稼動するクロック周波数を増加させる、内蔵型のカウンターを有する。そのような状況では、内蔵型のカウンターは、プロセスを請求する際に用いられ得る。他の例では、高分解能のカウンターは、例えば、通常、クロック割り込みイベントを引き起こすために用いられるプログラム可能なカウントダウンタイマーの中間的な状態を照会することによって、ソフトウェアの使用をシュミレートし得る。ここで用いられるカウンターは、チック間隔が発生していることを示唆するために用いられるのと同じカウンターである。そのような状況では、上記タイムスタンプは、カウンター値と、上記タイムスタンプが時間内にインターバルスレッドの開始時間と停止時間を的確に反映させるように所与の基準点から発生した、チックの数の両方を勘案し得る。
【００７８】
上述のプロセス・スケジューラ１３０はまた、ミューテックス（ｍｕｔｅｘｅｓ）を用いるシステムでも用いられ得る。ミューテックスは、競合条件によるデータの不整合を回避させるために用いられる。競合条件は、しばしば２つ以上のスレッドが同じメモリ領域上で動作を実行するように要求している場合に起こるが、計算結果は、これらのオペレーションが実行される他方に依存する。ミューテックスは、共有の資源を順番に並べるために用いられ得る。グローバルな資源が１つ以上のスレッドによってアクセスされている場合はいつでも、上記資源は自らに関連したミューテックスを有し得る。ミューテックスは、メモリのセグメント（「ｃｒｉｔｉｃａｌ  ｒｅｇｉｏｎ」）を他のスレッドから保護するために用いられ得る。アプリケーションは、受信された順に、スレッドに対してミューテックスを付与する。しかしながら、上記プロセス・スケジューラ１３０は、ミューテックスを保持し得る優先順位が低いスレッドが、同じミューテックスを待機している優先順位の高いスレッドへアクセスすることを不当に遅らされている場合に発生する問題を処理できるように、構成され得る。
【００７９】
図１１は、１つのスレッドがミューテックスを保持し得、他のいくつかのスレッドが同じミューテックスを待機している場合に、アダプティブ・パーティションを用いたシステムにおいてミューテックスへのアクセスを優先させる仕方を示している。ミューテックスを保持しているスレッドに関連したパーティションが担保されたＣＰＵバジェットを使い果たすと、上記処理プロセス・スケジューラ１３０は、ミューテックスを待機している全スレッドの中で最も次に実行しそうなスレッドのパーティションに対し、ミューテックスを保持しているパーティションの実行時間の請求を開始し得る。上記プロセス・スケジューラ１３０はまた、ミューテックスを保持しているスレッドに関連したアダプティブ・パーティションに対し、ミューテックスを保持しているスレッドのために動作していると思われる任意のスレッドの実行時間の請求も開始し得る。次に最も実行されそうなスレッド（すなわち、ミューテックスを保持しているスレッドの後に実行しているスレッドがブロックされる、終了する、等）を識別するための判断は、ブロック１１１０で行なわれ得る。ミューテックスを保持している現在のスレッドと同じミューテックスを待機し得る待機スレッドは、「次に最も実行されそうである」と判断される。ブロック１１１５において、上記プロセス・スケジューラ１３０は、全待機スレッドの中で次に最も実行しそうな待機スレッドに対するミューテックスを保持しているスレッドの優先順位を上げ得る。上記プロセス・スケジューラ１３０は、ブロック１１２０において、ミューテックスを保持している現在のスレッドに関連したアダプティブ・パーティションに対し、アダプティブ・パーティションのＣＰＵバジェットが使い果たされる（ゼロに達する）までミューテックスを保持している間の実行時間を請求し得る。ブロック１１２５において、次に最も実行しそうな待機スレッドに関連したアダプティブ・パーティションに対して、保持スレッドに関連したアダプティブ・パーティションに対して、保持スレッドによって用いられる残りのＣＰＵ時間が請求される。
【００８０】
「次に最も実行しそうなスレッド」は、待機スレッドの一覧中のスレッドの対に「２つのスレッドを比較する」というプロセスを繰り返し適用することによって計算され得る。上記「２つのスレッドを比較する」プロセスは、次のように実行され得る。ここに、ＡおよびＢは、比較の対象となる２つのスレッドである。順序の入った変数（ｘ，ａ，ｙ，ｚ）を含む関数ｆ（ａｐ）が構成される。これは、上記で構成された順序化関数ｆ（ａｐ）と同じものである。次に、ｐａｒｔｉｔｉｏｎ＿ｏｆ（Ｘ）をスレッドＸを含むパーティションを意味するものとする。次に、ｆ（ｐａｒｔｉｔｉｏｎ＿ｏｆ（Ａ））＞ｆ（ｐａｒｔｉｔｉｏｎ＿ｏｆ（Ｂ））の場合、スレッドＡはスレッドＢより実行しやすいものとする。上記関数ｆ（Ｘ）は、最大のｆ（Ｘ）を有するスレッドが決定されるまで、比較されることになる各スレッドに対して構成されるとする。最大のｆ（Ｘ）を有するスレッドは、「次に最も実行しそうなスレッド」であると判断され、それに関連したアダプティブ・パーティションは、一旦、ミューテックスを保持するスレッドに関連したパーティションが自身に担保されたＣＰＵバジェットを使い果たすと、ミューテックスの実行時間に従って、請求される。
【００８１】
上記のシステムおよび方法は、トランザクション処理システム内で実行するように構成され得、構成された負荷の一部分を処理し続けることは、システムの処理能力のオーバーロードイベントを完全に仕損なうよりもさらに重要である。このようなアプリケーションの例は、インターネットルータと交換機（ｔｅｌｅｐｈｏｎｅ  ｓｗｉｔｃｈ）を含む。上記のシステムと方法はまた、別のリアルタイムなオペレーティングシステム環境、例えば、自動車用、および、航空産業用の環境内でも実行できるように構成され得、臨界プロセスは、臨界イベントの間に実行される必要があるように構成され得る。エアバッグ配備イベントが低い確率のイベントである自動車用の環境で、プロセッサバジェットが割り当てされない例であってもよい。
【００８２】
システムと方法はまた、信用されていないアプリケーションが使用中であり得る環境で動作するように構成され得る。そのような場合、Ｊａｖａ（登録商標）アプレットのようなアプリケーションは、オペレーティングシステム内で実行するためにダウンロードされ得るが、上記アプリケーションの性質は、信用されていないアプリケーションがシステムを引き継ぎ、無限ループを生成することを許容し得る。オペレーティングシステムのデザイナーは、そのような状況を所望し得ず、他のプロセスが必要とし得るＣＰＵ時間へのアクセスを制限している間に、信用されていないアプリケーションが分離して実行できるように適切なアダプティブ・パーティションを生成し得る。
【００８３】
本発明の様々な実施形態が記述されてきたが、当業者には、本発明の目的から逸れずに、更に多くの実施形態と実施が可能であることが明白である。従って、本発明は、添付された請求項、および、それと同等なものの観点を除いて制限されることはない。
【図面の簡単な説明】
【００８４】
【図１】図１は、本発明の教示するところに従ってプロセス・スケジューラを実行し得るシステムの一実施形態のスキーム的ブロック図である。
【図２】図２は、アダプティブ・パーティションを用いたプロセス・スケジューラをセットするために使用され得る、多数の異なった相互関係を有するプロセスを示す図式である。
【図３】図３は、関連するスレッドとスレッドの優先順位を伴う複数のアダプティブ・パーティションを用いた、典型的なプロセス・スケジューラの図式である。
【図４】図４は、関連するスレッドとスレッドの優先順位を伴う複数のアダプティブ・パーティションを用い、上記プロセス・スケジューラが図３に示されているのとは異なる条件下で動作している、更なる典型的なプロセス・スケジューラの図式である。
【図５】図５は、関連したスレッドとスレッド順位を伴う複数のアダプティブ・パーティションを用い、少なくとも１つの準備完了スレッドが臨界的なスレッドとして指定されている、典型的なプロセス・スケジューラの図式である。
【図６】図６は、送信スレッドと受信スレッドが存在するソフトウェア環境においてプロセス・スケジューラを実行するために使用され得る、相互関係を有する複数のプロセスを示す、流れ図である。
【図７】図７は、図６に関連するプロセス・スケジューラの動作を示す図式である。
【図８】図８は、様々なアダプティブ・パーティションに関連してスレッドの動作をスケジュールするのに使用され得る、相互関係を有する複数のプロセスを示す、流れ図である。
【図９】図９は、動作しているスレッドに関連してプロセス・スケジューラが担保されたバジェットまたは臨界的なバジェットを請求するかどうかを判断するために使用され得る、相互関係を有する複数のプロセスを示す、流れ図である。
【図１０】図１０は、図８のプロセスでアダプティブ・パーティションによって用いられる相対的なバジェットを計算するために使用され得る、相互関係を有する複数のプロセスを示す、流れ図である。
【図１１】図１１は、同一のミューテックスにアクセスするスレッドの動作をスケジュールするために使用され得る、相互関係を有する複数のプロセスを示す、流れ図である。
【符号の説明】
【００８５】
１００  システム
１０５  ＣＰＵ
１１０  メモリ
１１５  Ｉ／Ｏ
１２０  オペレーティングシステム
１２５  アプリケーション
１３０  プロセス・スケジューラ
１３５  デバイス・ドライバ
【図１】
2006260565.tif 000003
【図２】
2006260565.tif 000004
【図３】
2006260565.tif 000005
【図４】
2006260565.tif 000006
【図５】
2006260565.tif 000007
【図６】
2006260565.tif 000008
【図７】
2006260565.tif 000009
【図８】
2006260565.tif 000010
【図９】
2006260565.tif 000011
【図１０】
2006260565.tif 000012
【図１１】
2006260565.tif 000013