pdfファイル

典型的なリアルタイムタスクコード
EndlessLoopTask() {
Initialization;
Loop forever {
blocking systemcall();
/* 対応するイベントによるブロック解除*/
task_body;
/* 定型処理 */
}
}
リアルタイムタスク
予測可能
ジョブリリース 処理開始
(実行可能 (実行状態
状態へ遷移) へ遷移)
処理完了 deadline
(待ち状態
締切
へ遷移)
時間
定められた時刻までにジョブの処理を正しく実行する
タスクの状態遷移
実行可能状態
処理開始
ジョブの
リリース
待ち状態
実行状態
処理完了
1. リアルタイムシステムのモデル化
・外部イベントとそれを処理するタスクを対応付け
機能要求の充足
・複数のタスクが実行可能であるとき、
どのタスクを実行するかはスケジューラが判断、
必要に応じてプロセススイッチ
時間要求の充足
・タスクのモデル化
・スケジューリングアルゴリズム
が必要
リアルタイム性による分類
価値
価値
ハード
RTS
ソフト
RTS
時刻
デッド
ライン
デッド
ライン
価値
時刻
価値
ファーム
RTS
非RTS
デッド
ライン
時刻
デッド
ライン
時刻
ジョブの発生過程による分類
周期的タスク: 一定間隔で発生するジョブを処理
非周期的タスク: ランダムな時間間隔で発生するジョブを処理
散発的タスク: ある時間に集中的に発生するジョブを処理
周期的タスク
カーネルの動作
時間も含める
: ジョブの発生周期
: 最初のジョブがリリースされる時刻 フェーズ(phase)
: の処理時間の上限
: ジョブのリリースからデッドラインまでの時間
wcrt : の(最悪)応答時間
( ,
,
,
)
番目のジョブ
+ ( − 1) ×
+ ×
=
↓省略
wcrt
非周期的タスク
: 番目のジョブがリリースされる時刻
≧ !"
+
発生間隔の下限
: 番目のジョブ の処理時間の上限
: ジョブのリリースからデッドラインまでの時間
≦
(
,
,
)
周期的タスク集合
1
= (2,1,2)、
2
= (3,1,3)、
3
= (6,1,6)
1
2
3
ハイパー周期
周期的タスク集合のスケジューリング
1
1
2
3
= (4,1,4)、
2
= (5,1,5)、
3
= (6,3,6)
周期的タスク集合のスケジューリング
1
= (4,1,4)、
2
= (5,1,5)、
3
= (6,3,6)
1
2
3
デッドライン違反のスケジューリング1
デッドライン違反のスケジューリング
1
1
2
3
= 4,1,4 、
2
= 5,1,5 、 3 = (6,3,6)
優先度スケジューリング
1
= 4,1,4 、
2
= 5,1,5 、 3 = (6,3,6)
1
高優
先度
2
中優
先度
3
低優
先度
デッドライン違反のスケジューリング2
デッドライン違反のスケジューリング
1
1
高優
先度
2
中優
先度
3
低優
先度
= 3,1,3 、
2
= 7,1,7 、 3 = (10,4,10)
プリエンプティブスケジューリング
1
= 3,1,3 、
2
= 8,1,8 、 3 = (10,4,10)
1
高優
先度
横取り
2
中優
先度
3
低優
先度
タスクの状態遷移
実行可能状態
ジョブの
リリース
高優先度
タスクによる
横取り
待ち状態
ジョブの
開始
ジョブの
継続
実行状態
ジョブの
完了
来週
スケジューリング理論の基礎を学んだ後
演習をやります(欠席しないように)
ちゃんと聴くように