ノンプリエンプティブ方式のタスクの状態遷移|科目A-1(応用情報技術者) 令和6年 春期午前試験 問16

出典:令和6年春期 午前 問16 分野:ソフトウェア / オペレーティングシステム
ノンプリエンプティブ方式のタスクの状態遷移に関する記述として,適切なものはどれか。
  • ア:OSは実行中のタスクの優先度を他のタスクよりも上げることによって,実行中のタスクが終了するまでタスクが切り替えられるのを防ぐ。
  • イ:実行中のタスクが自らの中断をOSに要求することによってだけ,OSは実行中のタスクを中断し,動作可能な他のタスクを実行中に切り替えることができる。
  • ウ:実行中のタスクが無限ループに陥っていることをOSが検知した場合,OSは実行中のタスクを終了させ,動作可能な他のタスクを実行中に切り替える。
  • エ:実行中のタスクより優先度が高い動作可能なタスクが実行待ち行列に追加された場合,OSは実行中のタスクを中断し,優先度が高い動作可能なタスクを実行中に切り替える。
解説

ノンプリエンプティブ方式は、実行中のタスクをOSが強制的に中断して、別のタスクへCPUを切り替えることを基本的に行わない方式です。実行中のタスクが自らCPUを手放したときなどに、別のタスクへ切り替わります。

ノンプリエンプティブ方式 プリエンプティブ方式
特徴 ・実行中のタスクをOSが原則として強制中断しない
・タスク自身が処理を譲ることで切替えが行われる
・OSが実行中のタスクを強制中断できる
・より優先度の高いタスクなどへ切り替えられる

したがって、実行中のタスクが自ら中断を要求したときに、OSがそのタスクを中断して別の動作可能なタスクへ切り替えるという説明が、ノンプリエンプティブ方式の特徴に合っています。

したがって、イが適切です。

❌他選択肢が誤りの理由
ア:OSは実行中のタスクの優先度を他のタスクよりも上げることによって,実行中のタスクが終了するまでタスクが切り替えられるのを防ぐ。
⇒ノンプリエンプティブ方式では、実行中のタスクの優先度を上げて切替えを防ぐわけではありません。そもそもOSが実行中のタスクを強制的に奪い取らない方式です。
ウ:実行中のタスクが無限ループに陥っていることをOSが検知した場合,OSは実行中のタスクを終了させ,動作可能な他のタスクを実行中に切り替える。
⇒ノンプリエンプティブ方式では、実行中のタスクをOSが任意のタイミングで強制中断して別のタスクへ切り替えることを前提としていません。無限ループに入ると、他のタスクが実行されにくくなるという弱点があります。
エ:実行中のタスクより優先度が高い動作可能なタスクが実行待ち行列に追加された場合,OSは実行中のタスクを中断し,優先度が高い動作可能なタスクを実行中に切り替える。
⇒プリエンプティブ方式の説明です。プリエンプティブ方式では、より優先度の高いタスクが実行可能になると、OSが現在のタスクを中断してCPUを切り替えることができます。
TSUNAGARU-ADVICE

まず押さえたいこと

ノンプリエンプティブ方式では、実行中のタスクをOSが強制的に中断して、別のタスクへ切り替えることはしません。タスク自身が処理を終えたり、入出力待ちなどによってCPUを手放したりしたときに、別のタスクへ切り替わります。

迷ったときの判断軸

優先度の高いタスクが実行待ちになっただけで、実行中のタスクを中断するのはプリエンプティブ方式の特徴です。ノンプリエンプティブ方式では、実行中のタスクが自らCPUを手放すことが切替えのきっかけになると整理しましょう。

科目Bにつなげるために

特にプロフェッショナルデジタルスキル(システム)試験合格を目指す方は、タスクスケジューリングをプリエンプティブ方式とノンプリエンプティブ方式の違いで整理しましょう。優先度制御・応答時間・リアルタイム処理などの設計判断にもつながります。