基本情報技術者試験 令和元年度 秋季 午前 問18
プリエンプティブなスケジューリングについての問題。
--------------------------
令和元年度 秋期 午前 問18
優先度に基づくプリエンプティブなスケジューリングを行うリアルタイム OS で、二つのタスク A、B をスケジューリングする。A の方が B よりも優先度が高い場合にリアルタイム OS が行う動作のうち、適切なものはどれか。
ア
A の実行中に B に起動がかかると、A を実行可能状態にして B を実行する。
イ
A の実行中に B に起動がかかると、A を待ち状態にして B を実行する。
ウ
B の実行中に A に起動がかかると、B を実行可能状態にして A を実行する。
エ
B の実行中に A に起動がかかると、B を待ち状態にして A を実行する。
--------------------------
解説
"プリエンプティブなスケジューリング" では、OS がタスクを強制的に一時停止状態にして、他のタスクを実行状態にできる。
反対に "ノンプリエンプティブなスケジューリング" では OS がタスクを強制的に操作する権限がない。
この場合、各タスクが実行に必要なリソースを自発的に返却することになる。
善意にお任せ。
この問題ではプリエンプティブなスケジューリングなので、実行されているタスク①よりも優先度の高いタスク②が開始された場合、OS がタスク①の実行をやめて、タスク②を実行することになる。
問題にあるタスクの優先度は「タスクA > タスクB」となっている。
そのため、
- タスク B の実行中にタスク A が開始された場合、タスク B の方が優先度が低いため 、OS によってタスク B は一時停止にされてしまう。
- タスク A の実行中にタスク B が開始された場合、タスク A の方が優先度が高いため、そのままタスク A が実行されたままになる。
選択肢アとイは上記の内容と矛盾してしまう(タスク A が止められている)ので、間違い。
残る選択肢ウとエの違いは、一時停止になるタスク B の状態が実行可能状態なのか待ち状態なのかという点になる。
実行可能状態のタスクとは。
- 実行されていたタスクが他に優先度の高いタスクがきたことで追い出された場合はこの実行可能状態になる。
- 使えるリソースさえあれば(他に優先度の高いタスクがいなければ)実行状態になれる。
待ち状態のタスクとは。
- あるタスクが外部とのデータ入出力などで待ちぼうけになった時に、そのタスクがこの待ち状態となって他のタスクにリソースを渡す。
- 使えるリソースがあったとしても実行状態にはなれない(データ入出力などが終わらないと動けない)。
ということで正解は選択肢ウの「B の実行中に A に起動がかかると、B を実行可能状態にして A を実行する。」になる。
OS 上では複数のタスクが実行可能状態、実行状態、待ち状態を入れ替わりながら動作している。
この入れ替わりが(人の時間感覚と比べて)非常に高速なので、複数のタスクが同時に動いているようにみえる。
音楽を再生しながらブラウザでブログを更新しているときは、
といったタスクが高速に、順番に実行状態になることで同時に動いているように見えている。
OS の更新などが始まってしまい動くタスクが増えると、iTunes のタスクが実行状態になる頻度が少なくなり、音楽が途切れ途切れになってしまったりする。
前後の問題はこちら。