(57)【特許請求の範囲】
【請求項１】
プロセッサであって、
複数の処理装置と、スケジューラを備え、
前記複数の処理装置が、複数のタイムウィンドウの少なくとも１つの間に、複数のタスクのそれぞれを、同時に実行するように構成され、前記複数のタイムウィンドウの各々が、それぞれの特定の開始時刻を有し、前記複数のタイムウィンドウの各々が、複数の処理装置に共通であり、
前記スケジューラが、
前記複数のタイムウィンドウの中の第１のタイムウィンドウに対応する、事前実行時間で決定可能なスラックを決定し、
前記複数のタイムウィンドウの中の前記第１のタイムウィンドウにおいて、実行時間でのみ決定可能なスラックを決定し、
前記処理装置の各々において、同時に、前記複数のタイムウィンドウの中の第２のタイムウィンドウの実際の開始時刻を、前記複数のタイムウィンドウの中の前記第２のタイムウィンドウの前記特定の開始時刻に対して、i)前記決定された、事前実行時間で決定可能なスラックと、ii)前記決定された、実行時間でのみ決定可能なスラック、の合計を超えない程度だけ早めさせて、前記複数のタイムウィンドウの中の第２のタイムウィンドウの実際の開始時刻を、前記複数のタイムウィンドウの中の前記第１のタイムウィンドウの実際の終了時刻以降の、より早い時刻にし、前記複数のタイムウィンドウの中の前記第２のタイムウィンドウが、前記複数のタイムウィンドウの中の前記第１のタイムウィンドウの直後の次のタイムウィンドウである、
ように構成される、
プロセッサ。
【請求項２】
少なくとも１つの割込みサービスルーチンのタイムウィンドウがスケジュール設定され、前記割込みサービスルーチンのタイムウィンドウの期間は割込みをサービスするために利用可能な時間を表す、請求項１に記載のシステム。
【請求項３】
事前実行時間で決定可能なスラックが蓄積され、前記複数のタイムウィンドウの少なくとも１つに関連付けられた少なくとも１つのスラックリクエスタの実行のために用いられる、請求項１に記載のシステム。
【発明の詳細な説明】
【技術分野】
【０００１】
本発明は、スライディングタイムウィンドウを用いてタスクをスケジュール設定するためのシステムおよび方法に関する。
【背景技術】
【０００２】
[0001]航空宇宙用途におけるリアルタイムオペレーティングシステム（ＲＴＯＳ）は、特定された最悪実行時間内にＲＴＯＳがタスクを実行することを保証するために、時間区分化の概念に頼ることができる。たとえば、あるＲＴＯＳは、静的な固定タイムウィンドウスケジュールを用いる。代替アプローチは、レートモノトニック（ＲＭ）スケジューリングおよびスラックスケジューリングを用いて、時間決定性を維持しながらも動的なタスク実行のためにより高い柔軟性を実現させる。
【発明の概要】
【発明が解決しようとする課題】
【０００３】
[0002]マルチコアプラットフォームにおいては、相互のコアの干渉を特徴付け抑制することは、最悪実行時間、したがってバジェット（ｂｕｄｇｅｔ）を決定するにあたって重要であり、このバジェットは時間区分の基礎を形成する。しかしながら、マルチコアプラットフォームでは、複数のスレッドのスケジュール可能性が必ずしも保証されるとは限らない。したがって、マルチコアＲＴＯＳにおいてマルチコアＲＴＯＳの機構を提供することが常に可能であるというわけではなく、それによって、異なるコア上で実行するタスクセットは、時間決定性を充足すること、さらには柔軟性およびダイナミズムを可能にすることに限定される。
【課題を解決するための手段】
【０００４】
[0003]スライディングタイムウィンドウを用いてタスクをスケジュール設定するためのシステムおよび方法が提供される。ある実施形態において、タスクの実行をスケジュール設定するためのシステムは複数のタスクを実行するように構成された少なくとも１つの処理装置を備え、複数のタスク中の各タスクは複数のスケジューラインスタンス中の１つのスケジューラインスタンス内で実行するようにスケジュール設定され、複数のスケジューラインスタンス中の各スケジューラインスタンスは複数のタイムウィンドウ中の１組のタイムウィンドウと各タイムウィンドウの複数の処理装置中の１組の処理装置とに関連付けられ、複数のタイムウィンドウ中の１つまたは複数のタイムウィンドウは開始時刻および配分された期間を有し、１つまたは複数のタイムウィンドウに関連付けられたスケジューラインスタンスは関連するタスクの実行を開始時刻以降に開始し、かつ配分された期間を超えずに実行し、開始時刻はより早い時点にスライド可能である。
【０００５】
[0004]図面は例示の実施形態のみを示し、したがって範囲を限定するものと考えられるわけではないことを理解されたく、例示の実施形態は、添付の図面を用いて、さらなる特性および詳細によって記述される。
【図面の簡単な説明】
【０００６】
【図１】[0005]本開示で記述される一実施形態における、少なくとも１つの処理装置上でタスクを実行するためのシステムのブロック図である。
【図２】[0006]本開示で記述される一実施形態における、スケジュール設定されたタスクのタイムラインを示す図である。
【図３】[0007]図３Ａは、本開示で記述される一実施形態における、単一の処理装置上のスライディングタイムウィンドウ内にスケジュール設定されたタスクのタイムラインの一部分を示す図である。[0008]図３Ｂは、本開示で記述される一実施形態における、複数のコアの処理装置上のスライディングタイムウィンドウ内にスケジュール設定されたタスクのタイムラインの一部分を示す図である。
【図４】[0009]本開示で記述される一実施形態における、スライディングタイムウィンドウと固定タイムウィンドウとの組合せを図示するタイムラインを示す図である。
【図５】[0010]図５Ａは、本開示で記述される一実施形態における、単一の処理装置上での割込みサービスルーチンのタイムウィンドウのスケジュール設定を図示するタイムラインを示す図である。[0011]図５Ｂは、本開示で記述される一実施形態における、複数の処理装置上での割込みサービスルーチンのタイムウィンドウのスケジュール設定を図示するタイムラインを示す図である。
【図６】[0012]図６Ａは、割込みサービスによるタイムウィンドウのプリエンプションに関して、一実施形態を図示するタイムラインの一部分を示す図である。図６Ｂは、割込みサービスによるタイムウィンドウのプリエンプションに関して、一実施形態を図示するタイムラインの一部分を示す図である。図６Ｃは、割込みサービスによるタイムウィンドウのプリエンプションに関して、一実施形態を図示するタイムラインの一部分を示す図である。
【図７】[0013]本開示で記述される一実施形態における、複数のタイムウィンドウに関して最早開始時刻の決定を図示するタイムラインを示す図である。
【図８】[0014]本開示で記述される一実施形態における、タイムウィンドウスラックの蓄積を図示するタイムラインを示す図である。
【図９Ａ】[0015]本開示で記述される一実施形態における、スライディングタイムウィンドウを備える、スラックの特定および使用を図示するタイムラインを示す図である。
【図９Ｂ】本開示で記述される一実施形態における、スライディングタイムウィンドウを備える、スラックの特定および使用を図示するタイムラインを示す図である。
【図９Ｃ】本開示で記述される一実施形態における、スライディングタイムウィンドウを備える、スラックの特定および使用を図示するタイムラインを示す図である。
【図９Ｄ】本開示で記述される一実施形態における、スライディングタイムウィンドウを備える、スラックの特定および使用を図示するタイムラインを示す図である。
【図１０】[0016]本開示で記述される一実施形態における、異なるタイムウィンドウによるタイムウィンドウスラックの使用を図示するタイムラインを示す図である。
【図１１】[0017]本開示で記述される一実施形態における、スライディングタイムウィンドウを実施するための方法を示す流れ図である。
【発明を実施するための形態】
【０００７】
[0018]通例に従って、さまざまに記述される特徴は一定の縮尺率で表されるのではなく、例示の実施形態に関連する特定の特徴を強調するように表される。
[0019]以下の詳細な記述においては、本明細書の一部を成す添付の図面が参照され、これは特定の例示的な実施形態の図示により示される。しかしながら、他の実施形態が利用され得ること、また、論理的、機械的および電気的な変更が加えられ得ることが理解されよう。さらに、図面および明細書において示される方法は、個々のステップが実行され得る順序を限定するものとして解釈されるものではない。それゆえ、以下の詳細な記述は、限定する意味で捉えられるものではない。
【０００８】
[0020]時間保証を保持しながらも望ましいダイナミズムを提供するための柔軟性を実現させるために、スライディングタイムウィンドウを用いてタスクをスケジュール設定するためのシステムおよび方法が提供される。スライディングタイムウィンドウを実施するために、タスクは時間区分化を用いてタイムウィンドウにスケジュール設定される。時間区分化は、タスクレベルおよびタイムウィンドウレベルで時間保証を達成するのに役立つ。さらに、本明細書で記述されるように、タイムウィンドウはスライディングタイムウィンドウである。スライディングタイムウィンドウは、時間決定性を維持しながらもタスクがより早い時点で実行するように、タイムウィンドウの開始時刻を調整することができる。実施形態がスライディングタイムウィンドウを実施する場合、システムは、割込みサービスルーチンの実行のための時間を確保しておいてもよい。さらに、スラックスケジューリングは、すべてのコア上での全ＣＰＵ利用を許可するように実行されてもよい。
【０００９】
[0021]ある実施形態によれば、図１はスライディングタイムウィンドウを実施することができるシステム１００を示し、スライディングタイムウィンドウについては上記において簡潔に述べられたが、下記においてより詳細に記述される。システム１００は一般に、組込みシステム、標準コンピューティングシステム、および当業者に知られている他の実装形態において実施され得る。少なくとも１つの実施形態では、システム１００はオペレーティングシステム（たとえばリアルタイムオペレーティングシステムなど）を用いるが、このオペレーティングシステムはスケジューリング要求を有する。図示の通り、システム１００は、スケジューラ１０４、メモリ１０６および他のリソース１０８に連結された処理エンティティ１０２を備える。この処理エンティティ１０２は、スケジューラ１０４、メモリ１０６および他のリソース１０８に通信的に連結され得る。
【００１０】
[0022]処理エンティティ１０２は、単一の処理装置または複数の処理装置であってよい。本明細書における「処理装置」という用語は、一般に、データを受け取り、プログラム命令によって指示された通りに数学演算および論理演算を行うことができる計算デバイスを指す。この実施形態では、処理エンティティ１０２は複数の処理装置を備え、この複数の処理装置は、マルチＣＰＵシステム、マルチコアＣＰＵ中の１組のコア、またはハイパースレッド処理装置内の１組のハイパースレッドの一部であってよい。さらなる一例では、複数の処理装置はマルチＣＰＵシステムであってよく、ここではマルチＣＰＵシステム中の異なるＣＰＵが複数のコアを備える。さらに、各コアはハイパースレッド処理装置として動作してよい。本明細書における「マルチコア」という用語は、下記において、上述のような複数の処理装置を備える実装形態を指すように用いられる。
【００１１】
[0023]図１に示される例示の実施形態において、プログラム命令は、適切な非一時的記憶媒体すなわちメモリ１０６（たとえば、フラッシュメモリまたは他の不揮発性メモリ、磁気ディスクドライブおよび／または光ディスクドライブなど）に記憶される（または実施される）。プログラム命令の少なくとも一部分は、処理エンティティ１０２上での実行のために処理エンティティ１０２によってメモリ１０６から読み込まれる。プログラム命令は、本明細書において「ソフトウェア」とも呼ばれる。プログラム命令が実施されるメモリ１０６は、本明細書において「プログラムプロダクト」と呼ばれることもある。メモリ１０６はそれぞれの処理エンティティ１０２に対してローカルなものとして図１に示されるが、リモートメモリ１０６（たとえば、ネットワークまたはクラウドを介してアクセス可能な記憶媒体）および／または取外し可能な媒体が用いられてもよいことが理解されよう。メモリ１０６は、処理エンティティ１０２による実行中にプログラム命令（および関連データ）を記憶することもできる。一実装形態において、メモリ１０６は、ダイナミックランダムアクセスメモリ（ＤＲＡＭ）など現在知られている、または後に開発される、任意の適当な形式のランダムアクセスメモリ（ＲＡＭ）を含む。他の実施形態では、他の種類のメモリが用いられる。さらに、いくつかの例示の実装形態においては、処理エンティティ１０２が複数の処理装置を備えるが、各処理装置は、関連する処理装置上で実行中のプログラム命令の記憶に充てられる別個のメモリ１０６を備える。
【００１２】
[0024]図１に示されるさらなる例示の実施形態において、システム１００は、外部システムとの情報の送受信を容易にする他のデバイスを備える。たとえば、図１に示されるようにシステム１００はセンサ１３０を備えるが、このセンサは外部パラメータを感知し（または物理現象を示す信号または情報を生成し）、かつ、これらを、処理エンティティ１０２によって使用するために（より具体的には、処理エンティティ上でのプログラム命令の実行のために）処理エンティティ１０２に送信する。さらに、システム１００は制御インターフェース１３２を備える。この実施形態では、処理エンティティ１０２がプログラム命令を実行する場合、処理エンティティ１０２は制御インターフェース１３２に電気信号を送信して、システム１００に接続された外部システムを制御する。さらに、少なくとも１つの例示の実施形態では、システム１００はユーザと対話する。ユーザとの対話を容易にするために、システム１００は、少なくとも１つのユーザ入力デバイス１３４および表示装置１３６を備えてよい。各ユーザ入力デバイス１３４はユーザから入力を受け付け、かつ、この入力を、処理エンティティ１０２によって使用するために（より具体的には、処理エンティティ上でのプログラム命令の実行のために）処理エンティティ１０２に送信する。さらに、この実施形態では、処理エンティティ１０２は、ユーザが見るための情報を表示装置１３６に出力し、この表示装置はユーザに対して情報を表示する。
【００１３】
[0025]少なくとも１つの実装形態では、システム１００はスケジューラ１０４を備える。このスケジューラ１０４は、処理エンティティ１０２上でのプログラム命令の実行をスケジュール設定する。少なくとも１つの実施形態では、スケジューラ１０４は、プログラム命令の実行を動的にスケジュール設定する、オペレーティングシステム内のスケジューラである。別の実施形態では、スケジューラ１０４は、静的な時間決定に従ってプログラム命令の実行をスケジュール設定する。たとえば、オペレーティングシステムがＡＲＩＮＣ６５３に準拠する場合、プログラム命令の実行は専用のタイムウィンドウに割り当てられる。さらに、処理エンティティ１０２が複数の処理装置を備える場合、各処理装置は関連するスケジューラ１０４を備えてよい。
【００１４】
[0026]本明細書に記述されるように、記憶媒体１０６内に記憶されたプログラム命令はタスク内に構成され得る。本明細書における「タスク」という用語は、指定された目的を達成するために実行される場合に相互に関連付けられたプログラム命令の一群であるかまたはこれを特定するエンティティを指す。タスクは、処理エンティティ１０２上での実行のために、スケジューラ１０４によってスケジュール設定される。実行のためにタスクがスケジュール設定される場合の各インスタンスは、本明細書において、タスクのスケジュール設定されたインスタンスと呼ばれる。さらに、タスクは、タスクのスケジュール設定されたインスタンス内で実行する、より小さいサブタスクで構成されてよい。ある例示の実装形態では、タスクは、レートモノトニックスレッド、ＰＯＳＩＸスレッドまたはＡＲＩＮＣ６５３プロセスに適用され得る。
【００１５】
[0027]ある実施形態においては、複数のタスクインスタンスがスケジューラインスタンス内での実行のためにスケジュール設定されてよい。スケジューラインスタンスは、単一のコアまたは複数のコアに結び付けられ得る。スケジューラインスタンスが複数のコアに結び付けられる場合、スケジューリングアルゴリズムは、マルチコアのスケジューラインスタンスに関連付けられたスレッドが実行するコアを選択することができる。コアに関連付けられたスケジューラインスタンスがタイムウィンドウ内に無い場合、そのタイムウィンドウの間、タスクはスケジュール設定されていないコア上で実行することができないことがある。メジャーフレーム内に複数のスケジューラインスタンスがある場合があるが、各タスクは、メジャーフレーム全体にわたって単一のスケジューラインスタンスによって処理され得る。
【００１６】
[0028]ある実装形態では、処理エンティティ１０２は複数の処理装置を備えるが、スケジューラ１０４は処理エンティティ１０２中のどの処理装置が特定のタスクを実行するかを決定する。さらに、スケジューラ１０４は、任意の所与の時点において、処理エンティティ１０２中の各処理装置上でどのタスクが実行されることになるかを決定する。タスクの実行をどのようにスケジュール設定するかを決定する際、スケジューラ１０４は、タスクの実行をどのようにスケジュール設定するかを決定するための規則および方法を提供するスケジューリングアルゴリズムまたは他のスケジューリングポリシーを用いる。たとえば、スケジューラ１０４は、レートモノトニック、優先度プリエンプティブ、ラウンドロビンなどのスケジューリングアルゴリズムを用いることができる。このような実施形態の一実装形態では、スケジューラ１０４は、処理エンティティ１０２内の異なる処理装置上でのタスクの実行をスケジュール設定するために、単一のスケジューリングアルゴリズムを用いる。別の実装形態では、スケジューラ１０４は、処理エンティティ１０２内の異なる処理装置上でのタスクの実行をスケジュール設定するために、複数のスケジューリングアルゴリズムを用いる。たとえば、このような代替の実装形態では、スケジューラ１０４は、処理エンティティ１０２内の第１の処理装置上での実行のためにタスクのいくつかをスケジュール設定するために第１のスケジューリングアルゴリズムを用い、処理エンティティ１０２内の第２の処理装置上での実行のためにタスクのいくつかの実行をスケジュール設定するために第２のスケジューリングアルゴリズムを用いる。
【００１７】
[0029]少なくとも１つの実施形態では、タスクおよびタイムウィンドウのスケジュール設定は、時間決定性が達成されるような方法で実行される。時間決定性は、少なくとも２つの異なる方法で達成され得る。たとえば、時間決定性は、各タスクがレートモノトニックスレッドであるレートモノトニックスケジューリングの状況においてバジェットを保証することによって、１タスクベースで達成され得る。この例では、タイムウィンドウ、およびこのタイムウィンドウ内で実行するタスクはいずれも時間区分され得る。別法として、時間決定性は、バジェットを単に全体としてタイムウィンドウに配分することによって、タイムウィンドウベースで達成され得る。たとえば、タイムウィンドウは、時間区分されたエンティティであってよく、また、時間区分されないタスクのコンテナであってもよい。たとえば、ＡＲＩＮＣ６５３に基づく用途の場合、時間決定性は一群のタスクについてバジェットが保証されたＡＲＩＮＣ６５３の区分レベルで達成され得る。したがって、バジェットはタイムウィンドウレベルで実施されるが、タイムウィンドウ内では、バジェットは個々のＡＲＩＮＣ６５３タスクに対して配分されない。
【００１８】
[0030]少なくとも１つの例示の実施形態では、スケジューラ１０４は、時間区分されたオペレーティングシステム内でタスクをスケジュール設定する。スケジューラ１０４が時間区分されたオペレーティングシステム内でタスクをスケジュール設定する場合、スケジューラ１０４は、処理エンティティ１０２上で実行するタスクに処理バジェットを配分する。配分された処理バジェットは、処理エンティティ１０２上でタスクが実行できる一定期間を決定する。さらに、スケジューラ１０４は、タスクが連続または非連続の時間区間で実行を完了できるようにする処理バジェットをタスクに配分する。たとえば、タスクが連続した時間区間で実行を完了する場合、スケジューラ１０４は、タスクの実行が中断なく完了できるようにするために十分足りる長さの期間である、タスクの実行のための処理バジェットを配分する。別法として、タスクが非連続の時間区間で実行を完了する場合には、スケジューラ１０４は、非連続の処理バジェットが関連するタスクの実行の完了に十分である時間を可能にする、タスクのそれぞれの実行のための非連続の処理バジェットを配分する。
【００１９】
[0031]さらに、下記においてより詳細に記述されるように、スケジューラ１０４は２つのレベルのスケジューラを含んでよい。たとえば、スケジューラ１０４は、タイムウィンドウスケジューラとタスクインスタンススケジューラとを含むことができる。スケジューラ１０４がタイムウィンドウスケジューラとして機能する場合、スケジューラ１０４は、特定の開始時刻および終了時刻、または他の実装形態においては特定の開始時刻および特定の期間を有するタイムウィンドウをスケジュール設定し、ここで、タイムウィンドウは、特定のタスクが実行のためにスケジュール設定される時間の一部分である。タイムウィンドウスケジューラがタイムウィンドウの開始および期間をスケジュール設定するので、タイムウィンドウスケジューラはタイムウィンドウが特定の時間内に開始および終了することを保証することができる。タスクが周期的に実行するある実施形態においては、タイムウィンドウはメジャーフレーム中にスケジュール設定されるが、ここで、メジャーフレームは、スケジュール設定されたタイムウィンドウごとにタスクが実行する一定期間である。メジャーフレームは、最大周期を有するタスクのための一定期間を表す。このように、各タイムウィンドウは各メジャーフレーム内にスケジュール設定され、同時に異なるメジャーフレーム内でオフセットされ得る。さらに、ある実施形態では、メジャーフレームは、１つのタスクに基づくより小さい一定期間または最小の一定期間を有するタスクに分割され得る。このより小さい一定期間は、マイナーフレームと呼ばれることがある。ある実施形態においては、メジャーフレーム中にスケジュール設定された複数のタイムウィンドウがある場合がある。異なるタイムウィンドウは、タイムウィンドウシーケンスを形成する。タイムウィンドウシーケンスの最後のタイムウィンドウが終了すると、タイムウィンドウスケジューラは、タイムウィンドウシーケンスの第１のタイムウィンドウで始まるタイムウィンドウシーケンスのスケジュール設定を再び開始する。処理エンティティ１０２が複数のコアを備える実施形態では、タイムウィンドウスケジューラは、複数のコア上のタイムウィンドウの開始時刻および期間に同時性を持たせることができる。さらなる実施形態では、スケジューラ１０４はタスクインスタンススケジューラであるが、このスケジューラ１０４は、特定のタイムウィンドウ内のスケジューラインスタンスウィンドウ内で実行するためのタスク実行のインスタンスを割り当てる。タイムウィンドウスケジューラおよびタスクインスタンススケジューラの使用は、下記においてより詳細に記述される。
【００２０】
[0032]図２は、マルチコアの処理システム上でのタスクの実行に関して実行タイムライン２００を示すが、図２に関して説明される原則は、単一のコアのオペレーティングシステムにも適用される。図示されるタイムラインは、メジャーフレームの一部分のみを示す。たとえば、メジャーフレームに関連付けられた実行スケジュールは１ヘルツの周波数で繰り返すことができ、繰返しの周波数はより小さくてもより大きくてもよいことは当業者であれば理解するであろう。メジャーフレーム内には複数のマイナーフレームがある場合があり、マイナーフレーム内での実行は特定の周波数で開始する。ある例示の実装形態では、マイナーフレームのそれぞれの開始は、８０ヘルツの周波数で生じる。このように、異なるマイナーフレーム内での実行は１２．５ｍｓごとに開始することができ、他の実装形態では、マイナーフレームは、より速い周波数またはより遅い周波数で開始することができる。図２に示されるように、マイナーフレーム２０１〜２０４として特定される４つの異なるマイナーフレームがある。マイナーフレーム２０１〜２０４内では、タスク実行の異なるインスタンスがスケジュール設定されて、スケジュール設定されたタイムウィンドウ内で実行する。別法として、マイナーフレームがメジャーフレームに等しい、単一のフレームを有し得る実施形態もある。
【００２１】
[0033]少なくとも１つの実装形態において、図２に示される例で図示される通り、マイナーフレーム２０１〜２０４内にスケジュール設定された８つの異なるタイムウィンドウ２２１〜２２８がある。スケジューラ１０４に関して上述されたように、異なるタイムウィンドウ２２１〜２２８は各メジャーフレーム内で同時に実行する。ある実装形態において、特定のタイムウィンドウ内のタスクインスタンスは、単一のマイナーフレーム内で実行するよう制約される。別法として、特定のタイムウィンドウに関連付けられたタスクインスタンスは、第１のマイナーフレーム内で実行を開始し、第２のマイナーフレーム内で実行を停止することができる。図２に示されるように、タイムウィンドウの範囲は、実質的には単一のマイナーフレームに制約される。さらに、図２に示されるように、タイムライン２００は、２つの異なる処理コア２５１〜２５２についてタスクスケジューリングを示す。タイムウィンドウ２２１〜２２８は、異なるコア２５１〜２５２に及ぶ。
【００２２】
[0034]ある実装形態では、スケジュールは、１組のタイムウィンドウ内で１つまたは複数のコア上でのタスクの実行をスケジュール設定するスケジューラインスタンスからなる。それゆえ、タイムウィンドウ内では、各コアは特定のスケジューラインスタンスに関連付けられる。特定のスケジューラインスタンスがタイムウィンドウ内でアクティブである区間は、スケジューラインスタンスウィンドウである。スケジューラインスタンスウィンドウ２１０〜２１７および２３１〜２３６は、異なるタイムウィンドウ２２１〜２２８内のスケジューラインスタンスウィンドウを表す。図示の通り、各スケジューラインスタンスウィンドウは、特定のタイムウィンドウ内でコアに割り当てられる。たとえば、コア２５１上で、スケジューラインスタンスウィンドウ２１０〜２１７は、コア２５２上のスケジューラインスタンスウィンドウ２３１〜２３６で実行されるタスクとは異なるタスクを実行する。さらに、コア２５１に割り当てられたスケジューラインスタンスウィンドウ２１０〜２１７と比べて異なる種類のタスクが、コア２５２上のスケジューラインスタンスウィンドウ２３１〜２３６内で実行し得る。ＡＲＩＮＣ６５３タスク、ＰＯＳＩＸタスク、レートモノトニックタスク、割込みタスクなどの異なる種類のタスクが実行する実施形態では、特定のスケジューラインスタンスウィンドウ内で実行する異なる種類のタスクは、同一種類のタスクとして制約され得る。たとえば、タスクτ１、τ２、τ３およびτ４は、スケジューラインスタンスウィンドウ２１０、２１２〜２１４、２１６および２３５内で実行するようにスケジュール設定されたレートモノトニックタスクであり得、これらはレートモノトニックタスクの実行を指定される。タスクＰ１、Ｐ２およびＰ３は、ＡＲＩＮＣ６５３スケジューラインスタンスウィンドウ２１７、２３１、２３２および２３４内で実行するようにスケジュール設定されたＡＲＩＮＣ６５３タスクである。さらに、タスクτ５、τ６およびτ７は、ＰＯＳＩＸスケジューラインスタンスウィンドウ２１１、２１５、２３３および２３６内で実行するようにスケジュール設定されたＰＯＳＩＸタスクである。
【００２３】
[0035]従前のシステムでは、異なるタイムウィンドウはタイムライン２００との関係で固定される。タイムウィンドウが固定されると、タイムウィンドウの開始は、タイムライン上のより早くにもより遅くにもスライドすることを妨げられる。それゆえ、固定タイムウィンドウに関連付けられたタスクは、固定タイムウィンドウの開始時刻以前に実行を開始することも、開始時刻からの固定タイムウィンドウの期間によって決定される固定タイムウィンドウの終了以降に実行を継続することもできない。さらに、固定タイムウィンドウに配分されたバジェットは、他のタイムウィンドウに関連付けられたタスクが固定タイムウィンドウ中に実行することを妨げる。本質的に、タイムウィンドウが固定される場合、固定タイムウィンドウは、タイムライン上でスライドしないことが保証される。一群の実行タスクに関するタイムウィンドウの固定は、その一群の実行タスクについて最悪実行時間を決定するのに役立つ。
【００２４】
[0036]しかしながら、固定タイムウィンドウにタスクを割り当てる場合、タスクおよびサブタスクが静的に決定され得るので、スケジューラはダイナミズムをサポートできないことがある。たとえば、予め設定されたバジェットおよび最大実行時間は明示的かつ静的にスケジュール設定され、タイムライン上に設定され得る。それゆえ、スケジューラはタスクの完了に延長時間を充てることを妨げられ、その結果、たとえ次の固定タイムウィンドウの開始がスケジュール設定される前にスケジューリングタイムライン上にギャップがあるために時間が利用可能であるとしても、スケジューラは追加バジェットおよび実行時間のスケジュール設定をサポートすることはできない。したがって、ダイナミズムの欠如のために、タイムラインは非効率的に利用される可能性がある。
【００２５】
[0037]さらなる実施形態では、スケジューラは、割込みサービスルーチンをスケジュール設定できることを要する。割込みサービスルーチンは、本来動的であり、割込みが生じる場合に実行される必要がある。スケジューラが固定タイムウィンドウを用いる場合、一般に、割込みサービスルーチンのスケジュール設定をサポートする２つの方法がある。割込みサービスルーチンをサポートする１つの方法は、「サンプリングアプローチ」と呼ばれるものによる。サンプリングアプローチでは、割込みサービスルーチンのタスクは、固定時点で明示的にスケジュール設定される。割込みルーチンのタスクの固定時間のスケジュール設定は、割込みがハードウェアによってもたらされた時点で割込みルーチンを実行するよりも、待ち時間を増大させ（スケジュール設定された時間を少なくし）、または計算リソースを増大させる可能性がある。割込みサービスルーチンをサポートする第２の方法は「全タスク割込みサービスルーチン拡大アプローチ（Ａｌｌ  ｔａｓｋｓ  ｉｎｔｅｒｒｕｐｔ  ｓｅｒｖｉｃｅ  ｒｏｕｔｉｎｅ  ａｕｇｍｅｎｔｅｄ  ａｐｐｒｏａｃｈ）」（以下「拡大アプローチ（ａｕｇｍｅｎｔｅｄ  ａｐｐｒｏａｃｈ）」という）と呼ばれることがある。この拡大アプローチでは、タイムライン上のタスクおよびスケジュール設定されていない時間の潜在的なギャップに割込みサービスルーチンを実行するためのバジェットが挿入され、すなわち追加的に拡大される。したがって、割込みが生じる時はいつでも、割込みサービスルーチンが次のスケジュール設定されたタスクとなるので、待ち時間は短縮される。拡大アプローチは、待ち時間が無い、または最小であるという利点を有する。しかしながら、周期中に複数の割込みサービスルーチンのバジェットを配分することによって無駄なプロセッサ利用の不利益を招く可能性があり、この場合、タイムラインのかなりの部分にわたってプロセッサが作動しない状態にある。
【００２６】
[0038]ある実施形態において、プロセッサの能力をより効果的に利用するために、スケジューラはスライディングタイムウィンドウを実施することができる。本明細書における「スライディングタイムウィンドウ」という語句は、一般に、タイムウィンドウの予め設定された開始よりも早い時刻に実行を開始することも、タイムウィンドウについて予め設定された期間に基づいて導出されたタイムウィンドウの終了よりも早く実行を停止させることもできる、スケジュール設定されたタイムウィンドウを指す。図３Ａおよび図３Ｂは、スライディングタイムウィンドウの概念を示す。図３Ａは、単一の処理装置上で実行するようにスケジュール設定された、タイムラン３００ａ上のスライディングタイムウィンドウを示す。図３Ｂは、複数のコアについて、タイムライン３００ｂ上でのスライディングタイムウィンドウの実装形態を示す。図３Ａにおいて、予め設定されたタイムウィンドウ３０２は、マイナーフレーム３０４内で実行するように割り当てられる。しかしながら、予め設定されたタイムウィンドウ３０２は、特にメジャーフレームがマイナーフレームに等しい場合には、メジャーフレーム内の任意の時点で実行することができる。タスクτは、予め設定されたタイムウィンドウ３０２中に実行することができる。タイムウィンドウ３０２はスライディングタイムウィンドウであるので、タイムウィンドウ３０２の予め設定された開始３０６は、タイムラインのより早い時点にスライドすることができる。しかしながら、タイムウィンドウ３０２の予め設定された開始３０６は、タイムラインのより遅い時点にスライドすることはできない。さらに、タイムウィンドウ３０２の開始３０６がより早い時点にスライドする場合、タイムウィンドウ３０２の導出された終了３０８もまた、タイムウィンドウ３０２について予め設定された期間に基づいて、タイムライン３００ａのより早い時点にスライドする。しかしながら、開始３０６と同様に、終了３０８はタイムラインのより遅い時点にスライドすることができないのが一般的である。ある実装形態では、タイムウィンドウ３０２に関連付けられたタスクが、タイムウィンドウ３０２の予め設定された期間に基づいて導出された終了時刻以前に実行を終了する場合、終了時刻３０８はより早い時点にスライドすることができる。
【００２７】
[0039]図３Ｂは、図３Ｂが複数のコア上の予め設定されたタイムウィンドウのスケジュール設定を示すことを除いて図３Ａと同様である。上述のように、予め設定されたタイムウィンドウ３１２のようなタイムウィンドウは、マイナーフレーム３１４内で複数のコアに及ぶ。タスクτ１、τ２およびτ３は、タイムウィンドウ３１２内で実行するようにスケジュール設定される。上述のように、予め設定されたタイムウィンドウ３１２はスライディングタイムウィンドウであり、タイムウィンドウ３１２の予め設定された開始３１６は、タイムラインのより早い時点にスライドすることができる。しかしながら、タイムウィンドウ３１２の予め設定された開始３１６は、タイムラインのより遅い時点にスライドすることはできない。さらに、開始３１６がより早い時点にスライドする場合、タイムウィンドウ３１２の導出された終了３１８もまた、タイムラインのより早い時点にスライドすることができる。タイムウィンドウ３１２の開始３１６はより遅い時点にスライドすることができないので、導出された終了３１８は、タイムライン３００ｂのより遅い時点にスライドすることはできない。ある実装形態では、開始３１６がスライドすると、終了３１８も同じ時間量だけスライドする。ある実装形態では、タイムウィンドウ３１２に関連付けられたタスクが、タイムウィンドウ３１２の予め設定された期間に基づいて導出された終了時刻以前に実行を終了する場合、終了時刻３１８はより早い時点にスライドすることができる。
【００２８】
[0040]ある実装形態では、タイムウィンドウ内のスケジューラインスタンスに関連付けられたタスクの周期性に基づいて、タイムウィンドウがどの程度スライドできるかに関する制限があり得る。たとえば、周期的なタスクは、関連する周期の開始以前に実行を開始することはできない。あるシステムは、タスクのレートおよび／または周期に基づいてタイムウィンドウの開始時刻および期間を設定するシステムインテグレータを備えてよい。スライディングタイムウィンドウを実施する際、可能な制限を考慮に入れるために実施され得る少なくとも２つのアプローチがある。第１のアプローチでは、新たなウィンドウの開始時刻が、タイムウィンドウに関連付けられたスケジューラインスタンス内の最小周期のタスクに対して周期妨害を引き起こさないのであれば、タイムウィンドウの開始は、マイナーフレームの開始以前の時刻にスライドすることが可能とされ得る。周期妨害は、スライドがタスクに関連付けられた周期の開始以前に周期的なタスクの実行をもたらす場合に生じる。第２のアプローチでは、タイムウィンドウの開始は、予め設定されたタイムウィンドウに関連付けられたマイナーフレームの開始に先行する時刻にスライドすることを妨げられ得る。
【００２９】
[0041]図４は、タイムウィンドウ内で実行するタスクに関連付けられた周期性に起因して生じる制限を図示する、タイムライン４００を示す図である。タイムライン４００は、固定タイムウィンドウとスライド可能なタイムウィンドウの両方を含む。制限を図示するために、３つの異なるタイムウィンドウ４１０、４２０および４３０がタイムライン４００に沿って実行するようにスケジュール設定される。第１のタイムウィンドウ４１０は、予め設定された開始４１１および導出された終了４１２を有する。第１のタイムウィンドウ４１０の開始４１１は、最早周期の開始時刻４０１であるか、またはこれ以降である限り、より早い時点にスライドすることができる。導出された終了４１２もまた、タイムウィンドウ４１０の予め設定された期間、開始４１１および実行タスクによって消費されたタイムウィンドウ中の時間量に基づいて、より早い時点に移動することができる。第２のタイムウィンドウ４２０は、予め設定された開始４２１および導出された終了４２２を備え、第２のタイムウィンドウ４２０に関連付けられたスケジューラインスタンス内で実行するタスクは最早開始時刻４０２を有する。予め設定された開始４２１は最早開始時刻４０２と既に揃えられているので、開始４２１はより早い時点にスライド可能ではなく、第２のタイムウィンドウ４２０の導出された終了４２２は、第２のタイムウィンドウ４２０に関連付けられたスケジューラインスタンス内で実行するタスクが、配分された処理バジェットが消費される以前に実行を終了する場合に、より早い時刻にスライド可能であるにすぎない。第３のタイムウィンドウ４３０は、予め設定された開始４３１および導出された終了４３３を有する。図示の通り、第３のタイムウィンドウ４３０は、第１の部分４３４として表される１つまたは複数のタスクを含む。第３のタイムウィンドウ４３０はまた、第２の部分４３５として表される１つまたは複数のタスクを含み、この第２の部分４３５のタスクは、第３のタイムウィンドウ４３０において周期的に制約されたタスクが最早開始時刻４０３以前に実行することができないように周期性の要求によって制約される。その結果、システムインテグレータは、第２の部分の開始時刻４３２が最早開始時刻４０３に等しくなるまで、タイムウィンドウ４３０をタイムラインに沿ってより早い時点にスライドさせることができる。
【００３０】
[0042]タイムウィンドウがスライド可能であるとき、スケジューラは、上述のサンプリングアプローチおよび拡大アプローチ以外の方法を用いて割込みサービスルーチンを処理することができる。割込みを処理するために、スケジューラは、割込みサービスルーチン（ＩＳＲ）タイムウィンドウ内でタスクをスケジュール設定する。スケジュール設定する際には、ＩＳＲタイムウィンドウの開始時刻および期間は、ＩＳＲ処理ルーチンのためのバジェットがタイムライン上のどこに確保または補充されるかを示す。ある実装形態では、システムの起動時に、ＩＳＲスケジューリングインスタンスには、生じる割込みを周期的に処理するための実行バジェットが提供される。本明細書において後述されるように、ＩＳＲタイムウィンドウは、ＩＳＲタスクが実行するときにタイムウィンドウの開始時刻および期間を必ずしも示すとは限らない。ＩＳＲタイムウィンドウは、割込みをサービスするためのバジェットを確保するための概念的または論理的な時間である。ＩＳＲの実行は、実行のレート／周期およびバジェットによって特定され得る。したがって、ＩＳＲタイムウィンドウに関する開始時刻および期間は、複数のコアが過度にスケジュール設定されないようにバジェットが特定のレートで明示的にスケジュール設定されることを確実にすることができ、ここで、「過度にスケジュール設定される」とは、割り振られた時間バジェットが利用可能な計算時間を超えることを意味する。さらに、ＩＳＲバジェットは、その後のスライディングタイムウィンドウおよび固定タイムウィンドウがスケジュール設定される前にタイムウィンドウ内で確保され得る。さらに、一実装形態において、ＩＳＲタイムウィンドウは、他のタイムウィンドウに関連付けられたスケジューラインスタンスが実行のためにスケジュール設定された後に、ＩＳＲをサービスするために確保され得る。
【００３１】
[0043]実施される場合、ＩＳＲに関連付けられた実際の割込みはスケジュール設定されたタイムラインに沿った任意の時点で生じ得、その結果、ＩＳＲスケジューリングインスタンスの前、スケジューリングインスタンスの間またはスケジューリングインスタンスの後に割込みが生じ得る。ＩＳＲタイムウィンドウ以外のアクティブに実行するスライディングタイムウィンドウ内に割込みが生じる場合、スケジューラは、現在のスライディングタイムウィンドウ内にタスクの実行をプリエンプトすることができる（すなわち、現在のスライディングタイムウィンドウで実行中のすべてのスケジューラインスタンスおよび関連するタスクを停止し、または特定のコア上で実行中のタスクのみ停止する）。現在のスライディングタイムウィンドウ内にタスクの実行をプリエンプトした後、システムは、バジェットを有するＩＳＲタイムウィンドウスケジューラインスタンスおよび関連するＩＳＲタスクを実行することができる。システムがマルチコアシステムである場合、システムは、複数のコアの内の１つまたは複数上で、バジェットを有するＩＳＲタイムウィンドウスケジューラインスタンスおよび関連するＩＳＲタスクを実行する。少なくとも１つの実装形態において、ＩＳＲが処理すべき割込みの発生に先立って、ＩＳＲの実行のためにバジェットが割り振られる。次に、ＩＳＲタスクは、ＩＳＲタスクが実行を完了するまで、またはバジェットが使い果たされるまで実行することができる。ＩＳＲタスクの実行がアクティブに実行するスライディングウィンドウをプリエンプトした場合、プリエンプトされたスライディングウィンドウに関連付けられたタスクは、ＩＳＲタスクが実行を完了するか、またはバジェットが使い果たされた後に実行を再開する。ＩＳＲタスクの実行がギャップ内で生じた場合、ＩＳＲタスクは、ＩＳＲタスクが完了するまで、またはバジェットが使い果たされるまで実行し、次に実行はスケジューリングタイムライン上で次のスライディングウィンドウを続行する。
【００３２】
[0044]図５Ａ、図５Ｂおよび図６Ａ〜図６Ｃは、スライド可能なタイムウィンドウの状況におけるタイムライン上でのＩＳＲタイムウィンドウのスケジュール設定を示す。詳細には、図５Ａおよび図５Ｂは、タイムライン５００ａおよび５００ｂ上のＩＳＲスレッドについての開始時刻および終了時刻の予めの配分を示す。図５Ａは、単一のコアのプロセッサによる実行のためにスケジュール設定されたタイムライン５００ａ上でのバジェットの確保を示し、図５Ｂは、マルチコアのプロセッサによる実行のためにスケジュール設定されたタイムライン５００ｂ上でのバジェットの確保を示す。図５Ａに示されるように、タイムライン５００ａは、生じ得る割込みを処理するための４つの異なるＩＳＲタイムウィンドウのスケジュール設定を示す。図示の通り、ＩＳＲタイムウィンドウの内の３つの５１１、５１２および５１３は、異なる最早開始時刻５０１、５０２および５０３にそれぞれ関連付けられた３つのＩＳＲタイムウィンドウによって周期的にスケジュール設定される。３つのＩＳＲタイムウィンドウ５１１、５１２および５１３は、それぞれの最早開始時刻５０１、５０２および５０３の後にサービスされることになる配分されたバジェットである。タイムウィンドウ５２０および５２２は、非割込みのタスクが実行する標準のタイムウィンドウである。第１のＩＳＲタイムウィンドウ５１１は、第１の最早開始時刻５０１と第２の最早開始時刻５０２の間に生じる割込みを処理するようにスケジュール設定される。第１の最早開始時刻５０１の後かつ第２の最早開始時間５０２の前に生じる割込みは、第１のＩＳＲタイムウィンドウ５１１に配分されたバジェットを消費するように実行され得る。第２のＩＳＲタイムウィンドウ５１２はタイムウィンドウ５２０の後にスケジュール設定され、これらはいずれも、第２の最早開始時刻５０２以降の実行に限定され、第３の最早開始時刻５０３以前に実行を終了するように制約される。さらに、第３のＩＳＲタイムウィンドウ５１３は、タイムウィンドウ５２２内のタスクのスケジュール設定の前にＩＳＲをサービスするために配分された時間である。図示の通り、配分された時間が使い果たされる前にＩＳＲが実行を終了する場合、タイムウィンドウ５２２は、最早開始時刻５０３までのより早い時点にスライドすることができる。さらなる実装形態において、第４のＩＳＲタイムウィンドウ５１４は、ＩＳＲタイムウィンドウ５１１の直後にスケジュール設定され得る。第４のＩＳＲタイムウィンドウ５１４は、３つのＩＳＲタイムウィンドウ５１１、５１２および５１３によってサービスされた割込み以外の割込みをサービスするために用いられてよい。
【００３３】
[0045]図５Ｂに示されるように、この図ではタイムライン５００ｂは最早開始時刻５５１、５５２および５５３を示すのであるが、ＩＳＲタイムウィンドウ５６１、５６２および５６３、タイムウィンドウ５７０および５７２は異なるコアに及び、また、ＩＳＲタイムウィンドウ５１１、５１２および５１３、タイムウィンドウ５２０および５２２と同様にそれぞれスケジュール設定される。さらに図５Ｂに示されるように、タイムウィンドウ内で、異なるコア上に２つ以上のＩＳＲがそれぞれサービスされ得る。たとえば、ＩＳＲタイムウィンドウ５６１、５６２および５６３のそれぞれの中で、コア１上にＩＳＲ１Ａがサービスされ、コア２上にＩＳＲ１Ｂがサービスされる。タイムウィンドウ内で異なるコア上に異なるＩＳＲがサービスされる場合、スケジューラは、並行するＩＳＲ、すなわち同一の優先度の割込みをサービスするために同時に実行され得るＩＳＲをサービスすることに制限され得る。たとえば、ある実装形態において、ＩＳＲタイムウィンドウ５１４と同様に、ＩＳＲタイムウィンドウ５６４は異なる割込みをサービスすることに配分される。割込みをサービスする場合、ＩＳＲタイムウィンドウ５６４は、他のコア上に割込みをサービスするよう要求されることなく単一のコア上に割込みをサービスすることに制限され得る。
【００３４】
[0046]さらに、ＩＳＲウィンドウにバジェットを提供するウィンドウと、早期に開始しないように制約された次のウィンドウとの間の区間における同一の割込みの複数の発生は、区間内でＩＳＲのために特定されたバジェットを限度とする実行時間を備えてサービスされ得る。区間内にそれ以上残りのバジェットが無い場合、さらなるＩＳＲは、新たなバジェットがＩＳＲのサービスのために配分されるまでサービスされ得ない。現在の周期内にそれ以上残りのバジェットが無い場合、ＩＳＲは、新たなバジェットがＩＳＲのサービスのために配分されるまでサービスされ得ない。
【００３５】
[0047]図６Ａ〜図６Ｃは、タイムウィンドウ内の実行タスクのプリエンプションに関するさまざまな実施形態を示す。図６Ａは、ＩＳＲがサービスされる前のタイムウィンドウ６０２を示す。図示の通り、４つの異なるコア上で実行する９つの異なるタスクτ１〜τ９がある。詳細には、τ１およびτ２は第１のコア上で実行し、τ３〜τ６は第２のコア上で実行し、τ７およびτ８は第３のコア上で実行し、τ９は第４のコア上で実行する。割込みが無い場合には、タスクは通常、タイムウィンドウ６０２内で実行する。
【００３６】
[0048]図６Ｂおよび図６Ｃは、タイムウィンドウ６０２の実行中にタスクの実行をプリエンプトするための異なる実装形態を示す。たとえば、図６Ｂは、ＩＳＲが各コア上でのタスクの実行をプリエンプトする実装形態を示す。詳細には、タイムウィンドウ６０２は２つの別個のタイムウィンドウに効果的に分割され、第１のタイムウィンドウ６０４はＩＳＲタイムウィンドウ６０８によるＩＳＲのサービスに先行し、第２のタイムウィンドウ６０６はＩＳＲタイムウィンドウ６０８によるＩＳＲのサービスに後続する。図示の通り、ＩＳＲをサービスする場合、このＩＳＲは、他のコアがアクティブでない状態になる間に単一のコア上で実行し得るのみである。２つ以上のＩＳＲがある場合、異なるＩＳＲは対応する数の異なるコア上で実行することができ、または単一のコア上で実行することができる。
【００３７】
[0049]図６Ｂとは対照的に、図６Ｃは、ＩＳＲが複数のコア上で実行するタスクの一部分をプリエンプトする実装形態を示す。図示の通り、ＩＳＲタイムウィンドウ６１２は、第３および第４のコア上のタスクτ８およびτ９の実行をプリエンプトするように生成されてよい。しかしながら、第１および第２のコア上で実行するタスクはプリエンプトされない。この例では、プリエンプトされたタスクにその実行を完了できるように十分な実行時間を与えるために、タイムウィンドウ６０２は、ＩＳＲタイムウィンドウ６１２に配分された時間に相当するように延長される。それゆえ、第１および第２のコア上で実行するタスクは、それらが実行することができる延長された時間を有する。第１および第２のコア上で実行するタスクがスラックリクエスタ（下記においてより詳細に記述される）である場合、タスクはＩＳＲタイムウィンドウ６１２からの追加時間に起因する延長された時間を消費することができ、また、第３および第４のコア上で実行するタスクは実行を完了することができる。
【００３８】
[0050]上述のように、生じる割込みを周期的に処理するようにＩＳＲタイムウィンドウが予め設定される場合、ＩＳＲタイムウィンドウに関連付けられた割込みがいつ生じるか、および、対応するアクティブなスライディングタイムウィンドウのプリエンプトがいつサービスされるかに関わらず、スライディングウィンドウは望ましい時間内に実行を完了することができる。
【００３９】
[0051]ある実施形態において、スライディングタイムウィンドウは、最早開始時刻を決定する追加のパラメータによって構成される選択肢を提供することができ、決定された予め設定された開始時刻およびスライディングウィンドウが最早開始時刻と予め設定された開始時刻の間ではあるが最早開始前ではないより早い時点にスライドすることができる以前に、最早開始時刻が生じる。最早開始時刻はスライディングタイムウィンドウに関する最早開始時刻であるので、ランタイムで、タイムウィンドウに関連付けられたタスクは最早開始時刻と予め構成された開始時刻の間の時刻に実行を開始する。少なくとも１つの例示の実装形態において、最早開始時刻の決定は、入力／出力などのコンピュータリソースがタスクの実行に備える前のタスクの実行を妨げることができる。さらに、最早開始時刻の決定は、タイムウィンドウが、周期性を乱すようなより早い時刻にスライドすることを妨げることができる。
【００４０】
[0052]図７は、いくつかのタイムウィンドウ７０１〜７０４に関してタイムライン７００を示し、タイムウィンドウ７０２〜７０４はそれぞれ決定された最早開始時刻７１０〜７１２を有する。第１のタイムウィンドウ７０１はＩＳＲタイムウィンドウであり、最早開始時刻は予め設定された開始に対応する。第２のタイムウィンドウ７０２は、ＩＳＲタイムウィンドウの最早開始時刻に対応する最早開始時刻７１０を有する。サービスする割込みが無い場合、第２のタイムウィンドウ７０２は、少なくとも最早開始時刻７１０にスライドして、任意の関連するタスクの実行を開始することができる。第３のタイムウィンドウ７０３は最早開始時刻７１１を有し、第４のタイムウィンドウは最早開始時刻７１２を有する。少なくとも１つの実装形態において、タスクのそれぞれについての最早開始時刻と開始時刻との差は、割込みが生じる場合に割込みのサービスにとって十分な時間を可能にするためにＩＳＲタイムウィンドウに配分されたバジェット以上である。
【００４１】
[0053]スラックスケジューリングは、時間区分されたシステムにおいてスケジュールされない、または使用されないＣＰＵ時間を利用する手段を従来的に指している。主に、固定タイムウィンドウによって使用可能であった２つのスラックのソースがある。これらのスラックのソースは一般に、本明細書において「タイムラインスラック」および「再利用スラック（ｒｅｃｌａｉｍｅｄ  ｓｌａｃｋ）」と記述される。タイムラインスラックは一般に、割り振られないプロセッサ時間を指す。タスクに配分されたバジェットは、タスクごとに確保された最大実行時間である。タイムライン上のすべてのタスクのためにバジェットされたＣＰＵ時間全体を合計すると、メジャーフレームのバジェットの総計は、メジャーフレームの全利用可能時間の１００パーセント未満であるのが一般的である。タイムライン上で確保されない時間は合計され、利用可能なタイムラインスラックを表す。タイムラインスラックは、設定時刻における実行前に決定でき、算出される。さらに、タイムラインスラックは決定性のものであり、また、割り振られないＣＰＵ時間は、各メジャーフレームの開始においてスラックアカウントに明示的にデポジットされ得、ここで、スラックアカウントはさまざまな利用可能なスラックのソースによって生成されたスラック時間の総計である。
【００４２】
[0054]タイムラインスラックはバジェットされない時間を表すのであるが、これとは対照的に、再利用スラックは、タスクの実行中使用されないバジェットされたＣＰＵ時間を表す。たとえば、タスクが実行し、その最悪バジェットに関する周期について配分されたバジェットを消費することなく早期に完了すると、スラックアカウントに、残りの使用されないバジェットされた時間の潜在的なデポジットが行われる。タイムラインスラックはランタイム以前に決定できるのに対して、再利用スラックはランタイムに決定される。
【００４３】
[0055]ある実施形態においては、タイムラインスラックおよび再利用スラックによってスラックアカウントにデポジットされたスラックを消費するために、タスクのサブセットが予め設定されてスラックリクエスタとして機能する。スラックリクエスタは、スラックを消費することができるタスクである（スラックアカウントから明示的なウィズドローアル（ｗｉｔｈｄｒａｗａｌ）を行う）。ある実装形態において、すべてのスケジュール設定されたタスクはスラックアカウントへの時間のデポジットを行うことができてよいが、スラックリクエスタとして指定されたタスクのサブセットはスラックアカウントから時間をウィズドローすることができる。少なくとも１つの例において、配分されたバジェットが消費されるが、その周期のタスクがまだ実行を完了していない間は、スラックリクエスタはスラックアカウントからスラックをウィズドローすることを妨げられる。スラックリクエスタがその配分されたバジェットを消費したが未だ実行を完了していない場合、スラックリクエスタタスクは、スラックアカウントから追加の実行時間を許可される資格を有するようになる。スラックリクエスタが資格を有するようになる場合、スラックリクエスタは、スラックアカウントから利用可能なスラック時間のすべてまたは一部分をウィズドローすることができる。少なくとも１つの実装形態においては、資格を有する複数のスラックリクエスタタスクがあるが、この資格を有するスラックリクエスタタスクは、優先度に基づいてスラックアカウントからスラックをウィズドローすることができる。さらに、スケジューラがレートモノトニックスケジューラである場合、より高速で実行するスラックリクエスタタスクは、より低速で実行するタスクよりも高い優先度が与えられる。スラックリクエスタタスクがスラックアカウントの利用可能なスラック時間を使い果たし、続くタスクがスラックを生成しスラックアカウントにデポジットする場合、スラックリクエスタタスクは再びスケジュール設定され、新しく生成されたスラック時間へのアクセスを与えられ得る。レートモノトニックスケジューラは実行する準備のできた最優先のスレッドをスケジュール設定するので、スラックは、最優先のスラックリクエスタによって消費されることになる。
【００４４】
[0056]さらなる実施形態においては、スケジューラがスライディングタイムウィンドウを実施するのであるが、スラックの追加のソースが示される。スライディングウィンドウの概念は、従来のスラックの概念に加えて、２つの新しいスラックの概念を可能にする。これらは、ウィンドウタイムラインスラックおよびウィンドウ再利用スラックであり、本明細書においては、まとめて「タイムウィンドウスラック」として参照される。タイムウィンドウスラックは、時間区分されたタスクまたは時間区分されないタスクをホストするスケジューラに適用され得る。図８は、タイムウィンドウスラックのデポジットおよびウィズドローを説明する、タイムライン８００を示す図である。タイムウィンドウスラックは、２つのレベルのスラックを含む。第１のレベルのスラックは複数のコアにわたって及ぶスラックを含み、従来のタイムラインスラックおよび再利用スラックに対応する第２のレベルのスラックはスケジューラインスタンス内に付与される。明確にするために、これらの第２のレベルのスラックの構成要素は本明細書において「スケジューラインスタンスタイムラインスラック」として参照され、「再利用スラック」は本明細書において「スケジューラインスタンス再利用スラック」と呼ばれる。第１のレベルに関して、タイムウィンドウスラックはすべてのコアに適用される。第１のレベルでは、同一のスラックが異なるコアにわたってタイムウィンドウスラックアカウントにデポジットされ、ゆえに、同一のスラックは複数のコアにわたって実行するスケジューラインスタンスのすべてに利用可能になる。第１のレベルにおけると同様に、複数のコアにわたる複数のスケジューラインスタンスからの同一のスラックのデポジットは、第１のレベルの付与である。ある実装形態において、タイムウィンドウによって生成されたスラック（後続するウィンドウに利用可能である）は、それゆえ、タイムウィンドウのバジェットされた期間と、タイムウィンドウ内の複数のコア上のスケジューラインスタンスのいずれかによって用いられる最大ＣＰＵ時間との差である。第２のレベルに関して、スケジューラインスタンススラックは、そのスケジューラインスタンスに関連付けられたタスクのさらなる実行のために、スケジューラインスタンス内にデポジットされる。
【００４５】
[0057]ある実施形態において、利用可能なタイムウィンドウスラックは、スライドできないウィンドウの完了時に初期設定され、各ウィンドウがその特定された期間よりも早く完了する時間量に等しい分だけ増大される。スラック時間は、たとえば周期終了時間などの期限、つまり蓄積されるスラック時間を加算する現在の時間より遅い期限を有するすべてのタスクによって使用可能である。
【００４６】
[0058]ある実装形態において、最速レートを備えるスラックコンシューマの周期は、マイナーフレームと等しくてよい。最速レートの周期がマイナーフレームに等しい場合、利用可能なタイムウィンドウスラックは各マイナーフレームの開始時に初期設定され得る。下記において、スラックに関して、最速レートの周期はマイナーフレームと呼ばれる。タイムウィンドウスラックアカウントへのデポジットおよびタイムウィンドウスラックアカウントからのウィズドローアルは、スライディングタイムウィンドウの前後関係によって実行される。タスクがマイナーフレーム内で実行されると、タイムウィンドウスラックはスラックアカウント内に蓄積する。したがって、マイナーフレーム内のより早い時点のタイムウィンドウは、マイナーフレーム内のより遅い時点のためにスケジュール設定されたタイムウィンドウによって利用されることになるスラックアカウント内にスラックをデポジットする。ＩＳＲタイムウィンドウは２つの場合にスラックをデポジットすることができる。第一に、ＩＳＲタイムウィンドウがもはや割込みをサービスすることがないことを示す場合、たとえば、そのサービスするハードウェアに不備があると判断する場合、または他の条件が満たされる場合である。第二に、ＩＳＲウィンドウは、早期にスライドできないウィンドウに先立つ最後のウィンドウの終了時において、この状況においてはＩＳＲのバジェットはその時点で期限切れになるため、スラックに付与する。通常のウィンドウのように、ＩＳＲウィンドウはスラックを消費してよい。ＩＳＲが割込みをサービスしようとする場合、ＩＳＲタイムウィンドウは上述のようにマイナーフレーム内の任意の時間に実行し得るので、ＩＳＲはスラックをデポジットしない。
【００４７】
[0059]図８は、タイムウィンドウスラックアカウントにデポジットしタイムウィンドウスラックアカウントからウィズドローする、スライディングタイムウィンドウによって保有される能力をタイムライン８００上に示す。図示の通り、タイムライン８００は３つのマイナーフレーム８０１、８０２および８０３に分割される。タイムウィンドウスラックアカウント８４０および８４１は、第１のマイナーフレーム８０１および第２のマイナーフレーム８０２に関して示される。第１のマイナーフレーム８０１は、タイムウィンドウスラックアカウント８４０に関連付けられる。第２のマイナーフレーム８０２は、タイムウィンドウスラックアカウント８４１に関連付けられる。各スラックアカウントは、関連するマイナーフレームの開始時に初期設定され、その結果、各スラックアカウントは関連するマイナーフレームの開始時にゼロのスラック時間を有する。
【００４８】
[0060]ある実装形態においては、ＩＳＲをサービスするための周期がマイナーフレームのための周期と等しいが、ＩＳＲタイムウィウィンドウは各マイナーフレームの開始時にスケジュール設定され、この実施形態では、ＩＳＲタイムウィンドウは始めから終わりまで割込みをサービスし続け、ＩＳＲタイムウィンドウは、スラック時間をデポジットまたはスラックアカウントからウィズドローしない。図示の通り、各マイナーフレーム８０１〜８０３は、スケジュール設定されたそれぞれのＩＳＲタイムウィンドウ８２０〜８２２を備える。各ＩＳＲタイムウィンドウ８２０〜８２２は、ＩＳＲタイムウィンドウによってスラック時間がウィズドローされることもタイムウィンドウスラックアカウントにデポジットされることもないことを示すために、線を引いて消された両側向きの矢印を有する。しかしながら、ＩＳＲタイムウィンドウ以外のタイムウィンドウは、スラックアカウントにスラックをデポジットすることができる。たとえば、タイムウィンドウ８１０〜８１４はスラックアカウント８４０および８４１にスラックをデポジットすることができる。さらに、ギャップウィンドウ８３０はスラックアカウント８４０および８４１にスラックをデポジットすることができる。上述のように、すべてのタイムウィンドウがスラックアカウント８４０および８４１からスラックをウィズドローすることができるわけではない。たとえば、それぞれのスラックアカウント８４０および８４１を指す一方向の矢印によって示されるように、マイナーフレーム８０１および８０２の第１のタイムウィンドウ８１０および８１２は、スラックアカウント８４０および８４１からスラックをウィズドローすることはできない。スラックがスラックアカウント８４０および８４１に加えられるこの方法のために、第１のタイムウィンドウ８１０および８１２が実行のためにスケジュール設定されるとき、スラックアカウント８４０および８４１にはスラックが無いのが一般的である。さらに、ギャップウィンドウ８３０は、いかなる実行可能なスレッドにも関連付けられず、それゆえ、スラックアカウント８４０および８４１からスラックをウィズドローすることはできない。ギャップウィンドウ８３０は、タイムウィンドウ８１０および８１２などの第１のタイムウィンドウの前にスケジュール設定され得る。ギャップウィンドウがマイナーフレームの第１のタイムウィンドウの前にスケジュール設定される場合、ギャップウィンドウからスラックアカウント８４０および８４１へのスラックのデポジットは、第１のタイムウィンドウ８１０および８１２によるウィズドローアルのために利用可能となり得る。その結果、関連するタイムウィンドウの期間が完了する前にタスクが実行を終了すると、スライディングタイムウィンドウに関連付けられたタスクの実行中にスラックは利用可能となり、かつ、スラックアカウント８４０および８４１にデポジットされる。
【００４９】
[0061]スライディングタイムウィンドウの場合、スケジューラインスタンスタイムラインスラックとスケジューラインスタンス再利用スラックはいずれもスラックのためのソースとして機能することができる。上述のように、スケジューラインスタンスタイムラインスラックは、スケジューラインスタンスのタイムウィンドウ内の割り振られない処理装置時間である。タイムウィンドウが設定されるとき、スケジューラインスタンスタイムラインスラックは、実行前に決定され、算出され得る。スケジューラインスタンスタイムラインスラックは、タイムウィンドウが設定されるとき、またはランタイム中にスケジューラインスタンススラックアカウントに加えられ得る。スケジューラインスンスタイムラインスラックは決定性のものであるので、割り振られない処理装置時間は、適切な時間にスケジューラインスタンススラックアカウントに明示的にデポジットされ得る。少なくとも１つの実装形態において、タイムライン中のギャップは、関連するスケジュール設定されたインスタンスを備えないタイムウィンドウに類似し、次のタイムウィンドウがスライド可能である限りタイムウィンドウスラックとして扱われる。少なくとも１つの実装形態において、タイムウィンドウは、スラックが利用可能である場合に実行し得る少なくとも１つのスラックリクエスタタスクに関連付けられた少なくとも１つの関連するスケジューラインスタンスを備える。タイムライン中のギャップは実行可能なタスクに関連付けられないので、ギャップに割り振られた時間は決定性的に両方のコアに関してスラックアカウントに加えられてよい。別法として、ギャップウィンドウに割り振られた時間は、同時に両方のコアに適用されるタイムウィンドウスラックとして用いられてもよい。
【００５０】
[0062]上述のようなある実施形態において、スケジューラインスタンス再利用スラックは、スケジューラインスタンススラックの別のソースとしての役割を果たすことができる。上述のように、スケジューラインスタンス再利用スラックは、タスクが実行を完了するときに使用されなくなるバジェットされた処理装置の実行時間である。たとえば、タスクが実行し、最悪バジェットに対して早期に完了すると、スケジューラインスタンススラックアカウントに、残りの使用されないバジェットされた時間の潜在的なデポジットが行われる。スケジューラインスタンスタイムラインスラックとは対照的に、スケジューラインスタンス再利用スラックの量はランタイム前に決定され得ないので、再利用スラックの決定は限定される。さらに、タスクが配分されたバジェットに対して早期に完了する場合にスラックが加えられるので、スケジューラインスタンス再利用スラックは決定性のあるものではない。上記段落［００５８］において記述されるように、割込みサービスルーチンまたはＩＳＲタイムウィンドウからのスケジューラインスタンス再利用スラックは、スラックアカウントに加えられ得、または加えられ得ない。ＩＳＲウィンドウは、割込みが生じる場合に存在するスライディングタイムウィンドウをプリエンプトするので、ＩＳＲがバジェットを取得したときと、スライドすることを妨げられる次のウィンドウとの間の区間のどこにおいても割込みの複数発生が生じ得る可能性があり、それゆえ、完全なＩＳＲバジェットは、区間内のいつでも生じ得る複数の割込みをサービスするために用いられ得る。したがって、割込みが区間中にサービスされることを要する限り、使用されないＩＳＲバジェットはスラックとして用いられることを妨げられ得る。図９Ａ〜図９Ｄは、スライディングタイムウィンドウ９２０〜９２５を備えるシステムにおけるさまざまなレベルのスラックの実装形態を示す、タイムライン９００の一連の図を表す。図９Ａは、予め設定されたタイムライン９００を示す。図示の通り、タイムライン９００は、第１のマイナーフレーム９０１および第２のマイナーフレーム９０２を含むタイムライン９００の一部分を示す。続く図９Ｂ〜図９Ｄでは、第１のマイナーフレーム９０１のみが示される。さらに、上述のように、タスクの周期性のために、タイムウィンドウスラックは、第１のマイナーフレーム９０１および第２のマイナーフレーム９０２のそれぞれの開始時に再び始動する。図９に示されるように、複数のギャップウィンドウ９１０および９１１がある。ウィンドウ９１２もある。ギャップウィンドウとウィンドウ９１２の違いは、ギャップウィンドウはスケジューラインスタンスに関連付けられないのに対して、ウィンドウ９１２は、利用可能なタイムウィンドウスラックがある場合に実行し得るスラックリクエスタタスクによって、１つまたは複数のスケジューラインスタンスに関連付けられることである。ギャップウィンドウ９１０および９１１に関連付けられた時間は、コア１およびコア２の両方に関してタイムウィンドウスラックアカウントに加えられるタイムラインスラックに関連付けられる。さらに、スケジューラインスタンスのタイムラインスラックのソースがある。たとえば、コア１上で実行するタスクが無く、コア２上で実行するタスクがあるスケジューラインスタンス内に、ギャップ９３０および９３１がある。同様に、コア２上で実行するタスクが無く、コア１上で実行するタスクがあるスケジューラインスタンス内には、コア２上にスケジューラインスタンスのギャップ９３２がある。図９Ｂ〜図９Ｄは、ランタイムに生じる、タイムライン９００における変更形態を示す。ギャップウィンドウ９１０、９１１および９１３は、ランタイムの前に決定性的に決定され得るタイムウィンドウスラックのソースである。同様に、スケジューラインスタンスのギャップ９３０、９３１および９３２は、スケジューラインスタンスタイムラインスラックのソースであり、これらもまた、ランタイムの前に決定性的に決定され得る。
【００５１】
[0063]図９Ａとは対照的に、図９Ｂは、配分された実行時間のすべてを使い果たすことなくタスクが実行を完了する場合に生じるスケジューラインスタンス再利用スラックの非決定性のソースを示す。図示の通り、早期に実行を完了するタスクは、消費時間９４０、９４１、９４２、９４３および９４４によって示される。詳細には、タスクτ１は、消費時間９４０を用いるので、早期に実行を終了する。同様に、タスクτ２は消費時間９４１を用い、τ８は消費時間９４２を用い、τ４は消費時間９４３を用い、τ５は消費時間９４４を用いる。タスクτ１、τ２、τ８、τ４およびτ５はすべて、配分されたバジェットのすべてを消費することなく実行を終了するので、消費されないバジェットされた時間はスケジューラインスタンス再利用スラック９５０、９５１、９５２、９５３および９５４として利用可能となる。
【００５２】
[0064]図９Ｃは、スケジューラインスタンス内でスケジューラインスタンス再利用スラックを消費するためのタスクの統合を示す。スケジューラインスタンス内でタスクが統合される場合、スケジューラインスタンス再利用スラックの中にはタイムウィンドウスラックになり得るものもある。たとえば、タイムウィンドウ９２１のコア１上で、τ１およびτ２が実行した後、スケジューラインスタンス内に残る時間の一部分がまだある。同様に、τ４が実行した後も、スケジューラインスタンス内に残る時間の一部分がある。すべてのコアにわたって残る、共通部分を有する時間の量は、ランタイムのタイムウィンドウスラック９６０となることができる。同様に、タイムウィンドウ９２２には、スケジューラインスタンス再利用スラックに起因するランタイムのタイムウィンドウスラック９６１によって表される、共通の消費されないバジェットの一部分がある。ランタイムのタイムウィンドウスラック９６０および９６１は、次に、ギャップウィンドウ９１０によって提供されるタイムウィンドウスラックに加えられ得る。
【００５３】
[0065]図９Ｄは、すべての利用可能なタイムウィンドウスラックを得るためにタイムライン９００に加えられる調整を示す。図示の通り、タイムウィンドウ９２２はより早い時点にスライドすることができ、タイムウィンドウ９２２は、ギャップウィンドウ９１０へのランタイムのタイムウィンドウスラック９６０の追加に等しい量だけスライドする。それゆえ、タイムウィンドウ９２２に関連付けられたタスクは、より早く実行し、より早く実行を完了することができ、その結果、タイムウィンドウ９２２に関連付けられたタスクが実行を完了すると、次に、ギャップウィンドウ９１０へのランタイムのタイムウィンドウスラック９６０および９６１の追加に等しいスラック時間がマイナーフレーム９０１内に残される。残りのスラックを消費するために、タイムウィンドウ９１２もまた、タイムウィンドウ９２２の終了までのより早い時点にスライドすることができ、タイムウィンドウ９１２の期間は、マイナーフレーム９０１の終了時の利用可能なスラック時間と等しくなるように変更される。調整されたタイムウィンドウ９１２内で、関連するスラックリクエスタτ３およびτ９は実行することができ、マイナーフレーム９０１の残りのスラックを消費する。代替の実装形態では、タイムウィンドウ９２２のスラックリクエスタは残りのスラックを消費することができる。さらに、τ３などのスラックリクエスタタスクは、タイムウィンドウスラックの統合の後に残るスケジューラインスタンススラックについてそれぞれのスケジューラインスタンス内でスラックを消費することもできる。
【００５４】
[0066]スラックを用いる場合、スケジューラは、スケジューラインスタンスにおいてスラックを利用するタスクを有するスライディングタイムウィンドウより前に、タイムライン内の適切な大きさのギャップにバジェットを配分することができる。ギャップは本質的に、タイムウィンドウスラックアカウントにデポジットされたタイムラインスラックとして機能する。さらに、最初に、設定において、スラックを利用するスケジューラインスタンスを備えるスライディングウィンドウは、スライドすることができないウィンドウ、すなわちスラックが期限切れとなるウィンドウの直前に生成され得る。スライディングウィンドウは、他のスケジュール設定されたタイムウィンドウの実行を通して蓄積された利用可能なタイムウィンドウスラックを利用する。マイナーフレームの終了時に最初にスライディングタイムウィンドウをスケジュール設定することによって、発展するスラックは、非スライディングウィンドウが開始するときに失われるのではなく利用され得る。
【００５５】
[0067]図１０は、タイムライン１０００上の単一のマイナーフレームに関して、タイムウィンドウの期間の割当てを示す。上記に図示および記述されるように、時間の最初のバジェットは、ＩＳＲタイムウィンドウ１０３０を通じて割込みサービスルーチンの実行のために配分され得る。さらに、バジェットは、タスクの実行のためにスライディングタイムウィンドウ１０１０、１０１１および１０１２について配分される。さらに、ギャップウィンドウ１０２０および１０２１はウィンドウ１０５０と共にタイムライン１０００上にスケジュール設定される。ギャップウィンドウは関連するスケジューラインスタンスを備えないので、ギャップウィンドウに配分された時間はタイムウィンドウスラックアカウントにデポジットされる。ギャップウィンドウからの時間がタイムウィンドウスラックアカウントにデポジットされる場合、マイナーフレーム内でギャップウィンドウの後にあるタイムウィンドウのスラックリクエスタによる使用のために利用可能となる。たとえば、ギャップウィンドウ１０２０からスラックアカウントにデポジットされた時間は、利用可能なスラック１０４０として表されるが、タイムウィンドウ１０１０、１０１１および１０１２のスラックリクエスタによる使用が可能である。加えて、ギャップウィンドウ１０２１からスラックアカウントにデポジットされた時間は、利用可能なスラック１０４０、およびタイムウィンドウ１０１０に関連付けられたタスクの早期の完了によって利用可能にされたスラックと併せて（総計が利用可能なスラック１０４１として表される）、タイムウィンドウ１０１１および１０１２のスラックリクエスタによる使用のために利用可能であり、また、ギャップウィンドウ１０２１がタイムウィンドウ１０１０に後続するので、タイムウィンドウ１０１０が利用することはできない。さらに、タイムウィンドウ１０１２に関連付けられたタスクが実行を完了した後にタイムウィンドウスラックアカウントに残される時間は、ウィンドウ１０５０に関連付けられたスラックリクエスタによって用いられ得る。タイムウィンドウスラックアカウントと併せてスライディングタイムウィンドウを用いることによって、処理エンティティは、より効率的にタスクを処理することができる。
【００５６】
[0068]図１１は、少なくとも１つの処理装置上でのタスクの実行をスケジュール設定するための方法１１００の流れ図である。方法１１００は、少なくとも１つの処理装置上での実行のために複数のタスクが特定される１１０２において進行する。方法１１００は次に、複数のタスクが複数のスケジューラインスタンスに関連付けられる１１０４において進行する。方法１１００は次に１１０６において進行し、ここでは複数のスケジューラインスタンスは複数のタイムウィンドウに関連付けられ、複数のスケジューラインスタンス中の各スケジューラインスタンスは、複数のタイムウィンドウ中の１組のタイムウィンドウと各タイムウィンドウの少なくとも１つの処理装置中の１組の処理装置とに関連付けられる。さらに、複数のタイムウィンドウ中の各タイムウィンドウは開始時刻および配分された期間を有し、タイムウィンドウに関連付けられたスケジューラインスタンスは関連するタスクの実行を開始時刻以降に開始し、かつ配分された期間を超えずに実行する。ある実装形態において、方法１１００は、タイムウィンドウの開始時刻がより早い時点にスライドする１１０８において進行する。
【００５７】
[0069]実施例１はタスクの実行をスケジュール設定するためのシステムを含み、このシステムは、複数のタスクを実行するように構成された少なくとも１つの処理装置を備え、複数のタスク中の各タスクは複数のスケジューラインスタンス中の１つのスケジューラインスタンス内で実行するようにスケジュール設定され、複数のスケジューラインスタンス中の各スケジューラインスタンスは複数のタイムウィンドウ中の１組のタイムウィンドウと各タイムウィンドウの少なくとも１つの処理装置中の１組の処理装置とに関連付けられ、複数のタイムウィンドウ中の１つまたは複数のタイムウィンドウは開始時刻および配分された期間を有し、１つまたは複数のタイムウィンドウに関連付けられたスケジューラインスタンスは関連するタスクの実行を開始時刻以降に開始し、かつ配分された期間を超えずに実行し、開始時刻はより早い時点にスライド可能である。
【００５８】
[0070]実施例２は実施例１のシステムを含み、スケジューラインスタンスに関連付けられた複数のタスク中の１組のタスクが配分された期間に関連付けられたすべての時間を消費することなく実行を完了する場合、複数のタイムウィンドウ中のタイムウィンドウについて実行された期間は配分された期間より短い。
【００５９】
[0071]実施例３は実施例１および実施例２のいずれかのシステムを含み、少なくとも１つの割込みサービスルーチンのタイムウィンドウがスケジュール設定され、割込みサービスルーチンのタイムウィンドウの期間は割込みをサービスするために利用可能な時間を表す。
【００６０】
[0072]実施例４は実施例３のシステムを含み、割込みサービスルーチンのタイムウィンドウの直後にスケジュール設定される、複数のタイムウィンドウ中の次のタイムウィンドウは、割込みサービスルーチンのタイムウィンドウの開始時刻に対して残りの時間に等しい時間区間だけスライドする開始時刻を有し、残りの時間は、割込みサービスルーチンのサービスにおいて割込みサービスルーチンのウィンドウによって用いられない時間を表す。
【００６１】
[0073]実施例５は実施例４のシステムを含み、残りの時間は次のタイムウィンドウが実行を開始した後に受け取られる少なくとも１つの割込みをサービスするために用いられ、現在実行中のタイムウィンドウは、少なくとも１つの割込みのサービスのために、残りの時間以下の一定期間プリエンプトされる。
【００６２】
[0074]実施例６は実施例５のシステムを含み、少なくとも１つの処理装置中の処理装置のサブセットのみが、少なくとも１つの割込みのサービスのためにプリエンプトされる。
[0075]実施例７は実施例１から実施例６のいずれかのシステムを含み、タイムウィンドウスラックが蓄積され、このタイムウィンドウスラックは複数のタイムウィンドウ中の少なくとも１つのタイムウィンドウに関連付けられた少なくとも１つのスラックリクエスタの実行のために用いられる。
【００６３】
[0076]実施例８は実施例７のシステムを含み、スケジューラインスタンスタイムラインスラックおよびスケジューラインスタンス再利用スラックはスケジューラインスタンスに関して監視され、少なくとも１つの処理装置にわたって共通であるスケジューラインスタンスタイムラインスラックおよびスケジューラインスタンス再利用スラックは、タイムウィンドウスラックに付与する。
【００６４】
[0077]実施例９は実施例８のシステムを含み、スケジューラインスタンス再利用スラックは、スケジューラインスタンスに関連付けられたタスクがスケジューラインスタンスの配分された期間に先立って実行を完了する場合に生じる。
【００６５】
[0078]実施例１０は実施例７から実施例９のいずれかのシステムを含み、タイムウィンドウスラックアカウントは複数のタイムウィンドウ中の固定タイムウィンドウが実行を開始するときにリフレッシュされ、固定タイムウィンドウはより早い時点にスライドできない固定開始時刻を有する。
【００６６】
[0079]実施例１１は実施例１から実施例１０のいずれかのシステムを含み、複数のタイムウィンドウ中の第１のタイムウィンドウの終了の後に複数のタイムウィンドウ中の第２のタイムウィンドウをスケジュール設定することをさらに含み、この第２のタイムウィンドウは少なくとも１つのスラックリクエスタによって少なくとも１つのスケジューラインスタンスに関連付けられる。
【００６７】
[0080]実施例１２は、少なくとも１つの処理装置によるタスクの実行をスケジュール設定するための方法を含み、この方法は、少なくとも１つの処理装置上での実行のために複数のタスクを特定すること、複数のスケジューラインスタンスによってスケジュール設定されることになる複数のタスクを関連付けること、複数のスケジューラインスタンスを複数のタイムウィンドウに関連付けることを含み、複数のスケジューラインスタンス中の各スケジューラインスタンスは複数のタイムウィンドウ中の１組のタイムウィンドウと各タイムウィンドウの少なくとも１つの処理装置中の１組の処理装置とに関連付けられ、複数のタイムウィンドウ中の１つまたは複数のタイムウィンドウは開始時刻および配分された期間を有し、１つまたは複数のタイムウィンドウに関連付けられたスケジューラインスタンスは関連するタスクの実行を開始時刻以降に開始し、かつ配分された期間を超えずに実行し、方法は、タイムウィンドウの開始時刻をより早い時点にスライドさせることをさらに含む。
【００６８】
[0081]実施例１３は実施例１２の方法を含み、スケジューラインスタンスに関連付けられた複数のタスク中の１組のタスクが配分された期間に関連付けられたすべての時間を消費することなく実行を完了する場合、複数のタイムウィンドウ中のタイムウィンドウについて実行された期間は配分された期間よりも短い。
【００６９】
[0082]実施例１４は実施例１３の方法を含み、割込みサービスルーチンのタイムウィンドウをスケジュール設定することをさらに含み、割込みサービスルーチンのタイムウィンドウの期間は割込みを周期的にサービスするために利用可能な時間を表す。
【００７０】
[0083]実施例１５は実施例１４の方法を含み、割込みサービスルーチンのタイムウィンドウの直後にスケジュール設定される、複数のタイムウィンドウ中の次のタイムウィンドウの開始時刻を、割込みサービスルーチンのタイムウィンドウの開始時刻に対して残りの時間に等しい時間区間だけスライドさせることをさらに含み、残りの時間は、割込みサービスルーチンのサービスにおいて割込みサービスルーチンのウィンドウによって用いられない時間を表し、残りの時間は次のタイムウィンドウが実行を開始した後に受け取られる少なくとも１つの割込みをサービスするために用いられ、現在実行中のタイムウィンドウは、少なくとも１つの割込みのサービスのために、残りの時間以下の一定期間プリエンプトされる。
【００７１】
[0084]実施例１６は実施例１３から実施例１５のいずれかの方法を含み、タイムウィンドウスラックを蓄積することをさらに含み、このタイムウィンドウスラックは、マイナーフレーム内での実行のためにスケジュール設定された少なくとも１つのタイムウィンドウ内の少なくとも１つのスラックリクエスタスレッドの実行のために用いられる。
【００７２】
[0085]実施例１７は実施例１６の方法を含み、複数のタイムウィンドウ中の固定タイムウィンドウが実行を開始するときにタイムウィンドウスラックアカウントを初期設定することをさらに含み、固定タイムウィンドウはより早い時点にスライドできない固定開始時刻を有する。
【００７３】
[0086]実施例１８は実施例１６および実施例１７のいずれかのシステムを含み、スケジューラインスタンスタイムラインスラックおよびスケジューラインスタンス再利用スラックはスケジューラインスタンスに関して監視され、少なくとも１つの処理装置にわたって共通であるスケジューラインスタンスタイムラインスラックおよびスケジューラインスタンス再利用スラックは、タイムウィンドウスラックに付与する。
【００７４】
[0087]実施例１９はタスクの実行をスケジュール設定するためのシステムを含み、このシステムは、複数のタスクを実行するように構成された少なくとも１つの処理装置を備え、複数のタスク中の各タスクは複数のスケジューラインスタンス中の１つのスケジューラインスタンス内で実行するようにスケジュール設定され、複数のスケジューラインスタンス中の各スケジューラインスタンスは複数のタイムウィンドウ中の１組のタイムウィンドウと各タイムウィンドウの少なくとも１つの処理装置中の１組の処理装置とに関連付けられ、複数のタイムウィンドウ中の１つまたは複数のタイムウィンドウは開始時刻および配分された期間を有し、１つまたは複数のタイムウィンドウに関連付けられたスケジューラインスタンスは関連するタスクの実行を開始時刻以降に開始し、かつ配分された期間を超えずに実行し、開始時刻はより早い時点にスライド可能であり、タイムウィンドウスラックが蓄積され、このタイムウィンドウスラックは少なくとも１つのタイムウィンドウに関連付けられた少なくとも１つのスラックリクエスタの実行のために用いられ、少なくとも１つの割込みサービスルーチンのタイムウィンドウがスケジュール設定され、この割込みサービスルーチンのタイムウィンドウは割込みをサービスするために利用可能な時間を表す。
【００７５】
[0088]実施例２０は実施例１９のシステムを含み、スケジューラインスタンスに関連付けられた複数のタスク中の１組のタスクが配分された期間に関連付けられたすべての時間を消費することなく実行を完了する場合、複数のタイムウィンドウ中のタイムウィンドウについて実行された期間は配分された期間よりも短い。
【００７６】
[0089]本明細書において、特定の実施形態について図示および記述がなされてきたが、同一目的を達成するように意図された任意の調整が、示された特定の実施形態の代わりに用いられ得ることが当業者には理解されよう。それゆえ、本発明は、特許請求の範囲およびその同等のものによってのみ限定されることが明白に意図される。
【符号の説明】
【００７７】
１００  システム
１０２  処理エンティティ
１０４  スケジューラ
１０６  メモリ、リモートメモリ、記憶媒体
１０８  他のリソース
１３０  センサ
１３２  制御インターフェース
１３４  ユーザ入力デバイス
１３６  表示装置
２００  タイムライン
２０１  マイナーフレーム
２０２  マイナーフレーム
２０３  マイナーフレーム
２０４  マイナーフレーム
２１０  スケジューラインスタンスウィンドウ
２１１  スケジューラインスタンスウィンドウ、ＰＯＳＩＸスケジューラインスタンスウィンドウ
２１２  スケジューラインスタンスウィンドウ
２１３  スケジューラインスタンスウィンドウ
２１４  スケジューラインスタンスウィンドウ
２１５  スケジューラインスタンスウィンドウ、ＰＯＳＩＸスケジューラインスタンスウィンドウ
２１６  スケジューラインスタンスウィンドウ
２１７  スケジューラインスタンスウィンドウ、ＡＲＩＮＣ６５３スケジューラインスタンスウィンドウ
２２１  タイムウィンドウ
２２２  タイムウィンドウ
２２３  タイムウィンドウ
２２４  タイムウィンドウ
２２５  タイムウィンドウ
２２６  タイムウィンドウ
２２７  タイムウィンドウ
２２８  タイムウィンドウ
２３１  スケジューラインスタンスウィンドウ、ＡＲＩＮＣ６５３スケジューラインスタンスウィンドウ
２３２  スケジューラインスタンスウィンドウ、ＡＲＩＮＣ６５３スケジューラインスタンスウィンドウ
２３３  スケジューラインスタンスウィンドウ、ＰＯＳＩＸスケジューラインスタンスウィンドウ
２３４  スケジューラインスタンスウィンドウ、ＡＲＩＮＣ６５３スケジューラインスタンスウィンドウ
２３５  スケジューラインスタンスウィンドウ
２３６  スケジューラインスタンスウィンドウ、ＰＯＳＩＸスケジューラインスタンスウィンドウ
２５１  処理コア、コア
２５２  処理コア、コア
３００ａ  タイムライン
３００ｂ  タイムライン
３０２  タイムウィンドウ
３０４  マイナーフレーム
３０６  開始
３０８  終了、終了時刻
３１２  タイムウィンドウ
３１４  マイナーフレーム
３１６  開始
３１８  終了
４００  タイムライン
４０１  最早周期の開始時刻
４０２  最早開始時刻
４０３  最早開始時刻
４１０  第１のタイムウィンドウ
４１１  開始
４１２  終了
４２０  第２のタイムウィンドウ
４２１  開始
４２２  終了
４３０  第３のタイムウィンドウ
４３１  開始
４３２  第２の部分の開始時刻
４３３  終了
４３４  第１の部分
４３５  第２の部分
５００ａ  タイムライン
５００ｂ  タイムライン
５０１  第１の最早開始時刻
５０２  第２の最早開始時刻
５０３  第３の最早開始時刻
５１１  第１のＩＳＲタイムウィンドウ
５１２  第２のＩＳＲタイムウィンドウ
５１３  第３のＩＳＲタイムウィンドウ
５１４  第４のＩＳＲタイムウィンドウ
５２０  タイムウィンドウ
５２２  タイムウィンドウ
５５１  最早開始時刻
５５２  最早開始時刻
５５３  最早開始時刻
５６１  ＩＳＲタイムウィンドウ
５６２  ＩＳＲタイムウィンドウ
５６３  ＩＳＲタイムウィンドウ
５６４  ＩＳＲタイムウィンドウ
５７０  タイムウィンドウ
５７２  タイムウィンドウ
６０２  タイムウィンドウ
６０４  第１のタイムウィンドウ
６０６  第２のタイムウィンドウ
６０８  ＩＳＲタイムウィンドウ
６１２  ＩＳＲタイムウィンドウ
７００  タイムライン
７０１  第１のタイムウィンドウ
７０２  第２のタイムウィンドウ
７０３  第３のタイムウィンドウ
７０４  タイムウィンドウ
７１０  最早開始時刻
７１１  最早開始時刻
７１２  最早開始時刻
８００  タイムライン
８０１  第１のマイナーフレーム
８０２  第２のマイナーフレーム
８０３  マイナーフレーム
８１０  第１のタイムウィンドウ
８１１  タイムウィンドウ
８１２  第１のタイムウィンドウ
８１３  タイムウィンドウ
８１４  タイムウィンドウ
８２０  ＩＳＲタイムウィンドウ
８２１  ＩＳＲタイムウィンドウ
８２２  ＩＳＲタイムウィンドウ
８３０  ギャップウィンドウ
８４０  タイムウィンドウスラックアカウント、スラックアカウント
８４１  タイムウィンドウスラックアカウント、スラックアカウント
９００  タイムライン
９０１  第１のマイナーフレーム
９０２  第２のマイナーフレーム
９１０  ギャップウィンドウ
９１１  ギャップウィンドウ
９１２  ウィンドウ、タイムウィンドウ
９１３  ギャップウィンドウ
９２０  スライディングタイムウィンドウ
９２１  スライディングタイムウィンドウ、タイムウィンドウ
９２２  スライディングタイムウィンドウ、タイムウィンドウ
９２３  スライディングタイムウィンドウ
９２４  スライディングタイムウィンドウ
９２５  スライディングタイムウィンドウ
９３０  ギャップ
９３１  ギャップ
９３２  ギャップ
９４０  消費時間
９４１  消費時間
９４２  消費時間
９４３  消費時間
９４４  消費時間
９５０  スケジューラインスタンス再利用スラック
９５１  スケジューラインスタンス再利用スラック
９５２  スケジューラインスタンス再利用スラック
９５３  スケジューラインスタンス再利用スラック
９５４  スケジューラインスタンス再利用スラック
９６０  ランタイムのタイムウィンドウスラック
９６１  ランタイムのタイムウィンドウスラック
１０００  タイムライン
１０１０  スライディングタイムウィンドウ、タイムウィンドウ
１０１１  スライディングタイムウィンドウ、タイムウィンドウ
１０１２  スライディングタイムウィンドウ、タイムウィンドウ
１０２０  ギャップウィンドウ
１０２１  ギャップウィンドウ
１０３０  ＩＳＲタイムウィンドウ
１０４０  利用可能なスラック
１０４１  利用可能なスラック
１０５０  ウィンドウ
【図１】
0006799947.tif 000002
【図２】
0006799947.tif 000003
【図３】
0006799947.tif 000004
【図４】
0006799947.tif 000005
【図５】
0006799947.tif 000006
【図６】
0006799947.tif 000007
【図７】
0006799947.tif 000008
【図８】
0006799947.tif 000009
【図９Ａ】
0006799947.tif 000010
【図９Ｂ】
0006799947.tif 000011
【図９Ｃ】
0006799947.tif 000012
【図９Ｄ】
0006799947.tif 000013
【図１０】
0006799947.tif 000014
【図１１】
0006799947.tif 000015