基本情報技術者 2011年 秋期 午前(科目A) 問20
問題文
図はマルチタスクで動作するコンピュータにおけるタスクの状態遷移を表したものである。実行状態のタスクが実行可能状態に遷移するのはどの場合か。

選択肢
ア:自分より優先度の高いタスクが実行可能状態になった。(正解)
イ:タスクが生成された。
ウ:入出力要求による処理が完了した。
エ:入出力要求を行った。
図はマルチタスクで動作するコンピュータにおけるタスクの状態遷移を表したもの。実行状態のタスクが実行可能状態に遷移するのはどの場合か。【午前2 解説】
要点まとめ
- 結論→ 実行状態から実行可能状態へ戻るのは、より優先度の高いタスクが実行可能になり強制的に割り込まれた場合で、現在の実行が中断されます。
- 根拠→ 図の矢印は「実行→実行可能」がプリエンプション(強制的中断)を表し、入出力要求は通常「実行→待ち」を指すため区別できます。
- 差がつくポイント→ 入出力完了やタスク生成は「待ち→実行可能」や「新規→実行可能」で、実行中のタスクが実行可能に戻るのは「割り込み(優先度)」が決め手です。
正解の理由
正解は ア です。
「実行状態」から「実行可能状態」へ遷移する状況は、実行中のタスクが実行を中断されて実行権を失う場合に該当します。プリエンプティブ(強制的)スケジューリング環境では、自分より優先度の高いタスクが実行可能(ready)になればカーネルは文脈切替(コンテキストスイッチ)を行い、現在の実行タスクを実行可能状態(ready)へ戻します。これは図の「実行→実行可能」の矢印が示す典型的な意味です。
「実行状態」から「実行可能状態」へ遷移する状況は、実行中のタスクが実行を中断されて実行権を失う場合に該当します。プリエンプティブ(強制的)スケジューリング環境では、自分より優先度の高いタスクが実行可能(ready)になればカーネルは文脈切替(コンテキストスイッチ)を行い、現在の実行タスクを実行可能状態(ready)へ戻します。これは図の「実行→実行可能」の矢印が示す典型的な意味です。
よくある誤解
- 「入出力完了(ウ)が実行中のタスクを実行可能にする」と誤解しがちですが、入出力完了は待ち状態のタスクを実行可能にする遷移を意味し、実行中タスクの遷移とは別です。
- 「タスク生成(イ)が実行中タスクを直接実行可能にする」と考える人がいるが、新規生成は新しいタスクが実行可能状態に入るだけで、既に実行中のタスクが実行可能へ戻る理由にはなりません(プリエンプションポリシー次第で割り込みは起きるが、選択肢イ自体は生成の説明)。
- 「入出力要求(エ)は実行→実行可能」と取り違える場合がありますが、入出力要求は通常実行→待ちへ遷移します。
解法ステップ
- 図の状態(実行状態/実行可能状態/待ち状態)と矢印の方向を確認する。
- 問いは「実行→実行可能」の矢印が表す出来事を問うていると認識する。
- 各選択肢を「どの状態遷移に対応するか」で照合する(生成は新規→実行可能、入出力要求は実行→待ち、入出力完了は待ち→実行可能)。
- 「実行が中断される」状況=プリエンプション=自分より高い優先度のタスクが実行可能になる=ア を選ぶ。
選択肢別の誤答解説
- ア: 自分より優先度の高いタスクが実行可能状態になった。
正解。高優先度タスクの出現でプリエンプションが起き、現在実行中のタスクは実行可能状態(ready)へ戻されます。 - イ: タスクが生成された。
誤り。生成は新しいタスク自身が実行可能状態に入ることを指し、既に実行中のタスクが実行可能状態に遷移する説明にはなりません。若しくは生成されたタスクが直ちに高優先度であれば間接的に割り込みを発生させ得ますが、選択肢文自体は「実行→実行可能」を直接説明していません。 - ウ: 入出力要求による処理が完了した。
誤り。入出力完了は通常「待ち状態→実行可能状態」の遷移であり、実行中のタスクが実行可能状態に戻る事象ではありません。 - エ: 入出力要求を行った。
誤り。入出力要求を行うと当該タスクは待ち状態に遷移する(実行→待ち)ため、実行→実行可能の遷移とは逆方向です。
補足コラム
- プリエンプション(preemption)と協調(cooperative)スケジューリングの違い:プリエンプティブスケジューリングでは優先度やタイムスライスで実行中タスクが強制中断され、実行可能状態へ戻ります。協調ではタスク自身が実行を譲るまで中断されません。図の「実行→実行可能」はプリエンプションの存在を前提とした遷移です。
- 実務的観点:高優先度タスク出現時の文脈切替はオーバーヘッドがあるため、リアルタイム系では優先度設計と優先度逆転問題(priority inversion)への対策が重要です。優先度継承やプロトコルの導入が有効です。
- 図の右側から外へ出る矢印はタスク終了(終了/脱出)を示すことが多い点に留意してください。
FAQ
Q1: 入出力完了(ウ)はなぜ正解にならないのですか?
A1: 入出力完了は待ち状態にあるタスクが実行可能になる遷移であり、「実行中のタスクが実行可能になる」状況とは別方向の遷移だからです。
A1: 入出力完了は待ち状態にあるタスクが実行可能になる遷移であり、「実行中のタスクが実行可能になる」状況とは別方向の遷移だからです。
Q2: タスク生成(イ)が起因で現在のタスクが実行可能に戻ることは絶対にないですか?
A2: 直接はないですが、生成されたタスクが高優先度であればカーネルが即座にプリエンプションを起こし、結果的に現在のタスクを実行可能状態へ戻すことはあり得ます。しかし選択肢の文面は生成そのものを挙げており、図の「実行→実行可能」の直接説明とは整合しません。
A2: 直接はないですが、生成されたタスクが高優先度であればカーネルが即座にプリエンプションを起こし、結果的に現在のタスクを実行可能状態へ戻すことはあり得ます。しかし選択肢の文面は生成そのものを挙げており、図の「実行→実行可能」の直接説明とは整合しません。
Q3: タイムスライス切れで実行中タスクが実行可能に戻る場合はどの選択肢に該当しますか?
A3: 出題選択肢にはタイムスライスに関する項目がないため明示されていませんが、タイムスライス切れも「実行→実行可能」の原因(プリエンプション)になります。
A3: 出題選択肢にはタイムスライスに関する項目がないため明示されていませんが、タイムスライス切れも「実行→実行可能」の原因(プリエンプション)になります。
関連キーワード: タスク状態、プロセス状態遷移、プリエンプション、スケジューリング、コンテキストスイッチ、優先度スケジューリング、待ち状態、実行可能状態

\ せっかくなら /
基本情報技術者を
クイズ形式で学習しませんか?
クイズ画面へ遷移する→
すぐに利用可能!

