【問題】
今,組込み機器上に,例えば,以下のように,read_event() で外部からのイベントを待ち,得られたイベントに応じた処理を process_event() で実行するという処理を無限ループで繰り返すタスクが,3つある(タスクA,タスクB,タスクC)とする。
task()
{
EVENT ev;
while (1) {
read_event(&ev); /* 外部イベントを待ち,取得する */
process_event(ev); /* 外部イベントを処理する */
}
}
■機器X
機器Xは,リアルタイムカーネルで実装されており,各タスクは,イベントベースの優先度付きのスケジューリングが適用されている。優先度の低いタスクが実行状態のときに,外部イベント入力によって優先度の高いタスクが実行可能状態になると,処理は,優先度の高いタスクが横取りするプリエンプティブスケジューリングで行われる。現在,タスクA,B,Cが,優先度の低い順番でA,B,Cであるとする。
例えば,ここで,タスクA,B,Cが起動されてから,0.1秒目に,0.3秒間で処理される外部イベントがタスクAに来たあと,0.2秒目に0.1秒間で処理される外部イベントがタスクBに来たときのスケジューリングは図1の通りである。
■機器Y
機器Yは,リアルタイムカーネルではなくラウンドロビンスケジューリングによるタスクスケジューラが適用されている。機器Yでは,各タスクを0.1秒単位で切り替えて,順番に処理を実行する。現在タスクA,B,Cは,この順番で0.1秒毎にCPU時間を割り当てられている。
例えば,ここで,タスクA,B,Cが起動されてから,0.1秒目に,0.3秒間で処理される外部イベントがタスクAに来たあと,0.2秒目に0.1秒間で処理される外部イベントがタスクBに来たときのスケジューリングは図2の通りである。
以上の通りに設定されたこれらの機器XとYに対して,図3の通りに外部イベント列が入力されたときに,どのように処理が進むかを考え,設問ア~ウに答えよ。
【設問ア】
機器Xで,タスクA,B,Cの中で最初に処理が終了するタスクはどれか。正しいものを選択肢の中から一つ選べ。
【選択肢】
1. タスクA
2. タスクB
3. タスクC
4. タスクBとタスクCが同時に処理を終了する
【設問イ】
機器Yで,タスクA,B,Cの中で最初に処理が終了するタスクはどれか。正しいものを選択肢の中から一つ選べ。
【選択肢】
1. タスクA
2. タスクB
3. タスクC
4. タスクBとタスクCが同時に処理を終了する
【設問ウ】
機器X,Yを同時に実行させ,同じタイミングで,外部イベントを入力したとき,機器X,Yの中で,最後に処理が終了するタスクはどれか。正しいものを選択肢の中から一つ選べ。
【選択肢】
1. 機器X上のタスクA
2. 機器X上のタスクB
3. 機器X上のタスクC
4. 機器Y上のタスクA
5. 機器Y上のタスクB
6. 機器Y上のタスクC
【正解】
設問ア(マウスでドラッグして文字を反転させてください)= 3
設問イ(マウスでドラッグして文字を反転させてください)= 2
設問ウ(マウスでドラッグして文字を反転させてください)= 4
|