第16章 スケジューリング機能
割込みハンドラ,周期ハンドラ,アラーム・ハンドラ,およびアクセス例外ハンドラはスケジューラよりも優先順位が高いため,これらが実行している間は,タスク(タスク例外処理ルーチンを含む)は実行されません(「16.7 非タスク内におけるタスク・スケジューリング処理」参照)。
RI600PXでは,タスクのスケジューリング方式として各タスクに定義されている優先度を利用した“優先度方式”,および,RI600PXのスケジューリング対象となってからの経過時間を利用した“FCFS方式”を採用しています。
“最も高い現在優先度を持つタスク”が複数存在する場合は,優先度方式だけではスケジューリング対象のタスクを決定することができません。この場合,RI600PXはFCFS方式(First Come First Served方式)でスケジューリング対象のタスクを決定します。具体的は,それらのの中で最も早く実行可能な状態(READY状態)へ遷移したタスクを選び出し,CPUの利用権を与えます。
なお,RI600PXにおけるレディ・キューは,優先度をキーとしたハッシュ・テーブルであり,実行可能な状態(RUNNING状態またはREADY状態)へと遷移したタスクがFIFO順でキューイングされます。このため,スケジューラは,起動された際にレディ・キューの優先度高位から検出処理を実行し,キューイングされているタスクを検出した場合には,該当優先度の先頭タスクにCPUの利用権を与えることにより,RI600PXのスケジューリング方式(優先度方式,FCFS方式)を実現しています。
- レディ・キューの生成
RI600PXでは,レディ・キューの静的な生成のみサポートしています。処理プログラムからサービス・コールを発行して動的に生成することはできません。
レディ・キューの静的生成とは,システム・コンフィギュレーション・ファイルでシステム情報(system)のタスク優先度の最大値(priority)を定義することをいいます。
RI600PXでは,レディ・キューの静的な生成のみサポートしています。処理プログラムからサービス・コールを発行して動的に生成することはできません。
レディ・キューの静的生成とは,システム・コンフィギュレーション・ファイルでシステム情報(system)のタスク優先度の最大値(priority)を定義することをいいます。
「16.2 処理の単位と優先順位」に示したように,非タスク(割り込みハンドラ,周期ハンドラ,アラーム・ハンドラ,およびアクセス例外ハンドラ)はタスクよりも優先順位が高いため,非タスク処理が始まるとそれが完了するまで,タスクは実行されません。