この試験の対策ガイド

基本情報技術者試験 対策ガイド

合格率・勉強法・参考書の選び方をまとめています

見る →
答えと解説を見る(先に解くのがおすすめ)

正解は ウ

解説

リアルタイム OS におけるプリエンプティブなタスクスケジューリングの問題です。プリエンプティブ方式とは、実行中のタスクより優先度の高いタスクが実行可能になったとき、OS が実行中のタスクを強制的に中断(プリエンプト)して、高優先度のタスクに CPU を切り替える方式です。本問ではタスク A の方がタスク B より優先度が高いという条件です。ウの「B の実行中に A に起動がかかると、B を実行可能状態にして A を実行する」は、低優先度の B を中断して高優先度の A に切り替える動作であり、プリエンプティブ方式の正しい挙動です。重要なのは、中断された B が「実行可能状態」(CPU が空けば再開できる状態)に戻る点です。タスクの状態は「実行状態」「実行可能状態」「待ち状態」の3つが基本で、プリエンプトされたタスクは CPU を奪われただけで実行の条件は整ったままなので実行可能状態になります。待ち状態は入出力完了などのイベントを待つ場合の状態であり、混同しないことが大切です。

なぜ他の選択肢は違うのか

選択肢 ア
A(高優先度)の実行中に B(低優先度)に起動がかかった場合、優先度の高い A がそのまま実行を続け、B は実行可能状態で待たされるのが正しい動作です。A を実行可能状態にして B を実行するのは優先度の関係が逆転しており、プリエンプティブスケジューリングの原則(常に最高優先度のタスクが実行される)に反します。
選択肢 イ
A の実行中に B に起動がかかっても、優先度の低い B のために高優先度の A が中断されることはなく、A はそのまま実行を継続します。さらに「A を待ち状態にして」という点も誤りです。待ち状態は入出力完了やイベントの発生を待つときに遷移する状態であり、スケジューリングの都合で CPU を譲る場合に使われる状態ではありません。優先度の逆転と状態遷移の誤りという二重の問題を含む選択肢です。
選択肢 エ
B の実行中に高優先度の A が起動して B が中断される、という前半の状況判断は正しいのですが、中断された B の遷移先が誤りです。プリエンプトされたタスクは実行の条件が整ったまま CPU を譲っただけなので「実行可能状態」に戻ります。「待ち状態」にしてしまうと、B はイベントが発生するまで再開されなくなってしまいます。

解くときのポイント

プリエンプティブ=高優先度が来たら即切り替え。中断されたタスクは「実行可能状態」へ(待ち状態ではない)。タスクの3状態(実行・実行可能・待ち)の遷移条件をセットで覚える。