基本情報技術者 2015年 春期 午前(科目A) 問19
問題文
ノンプリエンプティブなスケジューリング方式の説明として、適切なものはどれか。
選択肢
ア:新しいタスクが実行可能状態になるたびに、各タスクの残りの実行時間を評価し、その時間が短いものから順に実行する。
イ:実行状態としたタスクが決められた時間内に待ち状態に遷移しないときに、そのタスクを中断して実行待ち行列にある次のタスクを実行状態とする。
ウ:実行状態としたタスクが自ら待ち状態に遷移するか終了するまで、他のタスクを実行状態とすることができない。(正解)
エ:タスクが実行可能状態になったときに、そのタスクの優先度と、その時、実行状態であるタスクの優先度とを比較して、優先度が高い方のタスクを実行状態とする。
🔒 解説は解答すると表示されます
ノンプリエンプティブスケジューリング【午前解説】
正解の理由
正解は ウ です。ノンプリエンプティブ(非プリエンプティブ、協調的)スケジューリングは、実行中のタスクをシステム側が強制的に中断しない方式を指します。選択肢ウは「実行状態としたタスクが自ら待ち状態に遷移するか終了するまで、他のタスクを実行状態とすることができない」と明確にその定義を述べており、ノンプリエンプティブの特徴を正しく表しています。
解法ステップ
- 問題文で問われている「ノンプリエンプティブ」の定義を頭に入れる:実行中は外部から中断されない。
- 各選択肢の動詞や条件語(中断、時間内に、優先度が高い、自ら待ち状態)を確認する。
- 「中断する」「強制的に切り替える」「優先度で割り込む」などが含まれる選択肢はプリエンプティブで除外する。
- 「自ら待ち状態に遷移するか終了するまで他を実行させない」と書かれた選択肢を正答とする。
選択肢別の誤答解説
- ア:新しいタスクが実行可能になるたびに残り実行時間を評価して短いものを実行する、というのは最短残余時間優先(SRTF)でありプリエンプティブです。新しい短いジョブが来れば実行中ジョブを中断します。
- イ:実行中タスクが決められた時間内に待ち状態に遷移しないと中断して次を実行する、はタイムクォンタムによる強制切替を示しラウンドロビンやタイムシェアの考え方でプリエンプティブです。
- ウ:実行中のタスクが自ら待ち状態に遷移するか終了するまで他を実行できない、はノンプリエンプティブの定義に合致します(正解)。
- エ:タスクが実行可能になったとき優先度を比較し高い方を実行する、は優先度プリエンプティブスケジューリングを示唆します。優先度が高ければ既存の実行中タスクを中断して割り込む場合があるためノンプリエンプティブとは言えません(ただし実装次第で非プリエンプティブ優先度もあり得ますが、問題文の表現はプリエンプティブを想定しています)。
よくある誤解
- 「優先度が高ければ即座に割り込む=ノンプリエンプティブ」と誤解する人が多いですが、優先度による割込みは通常プリエンプティブです。
- 「時間制限で切り替える=ノンプリエンプティブ」と考えるのも誤りで、時間割(time quantum)で強制切替する方式はプリエンプティブの一種(ラウンドロビン等)です。
- 実行可能状態(ready)と実行状態(running)の違いを混同すると判断を誤ります。ノンプリエンプティブはrunningが外部で中断されない点が鍵です。
補足コラム
ノンプリエンプティブ方式の利点と欠点を整理します。利点はコンテキストスイッチが発生しにくくオーバーヘッドが小さい点や、排他制御や同期が簡単になる点です。一方欠点は長い処理が来ると他のタスクが待たされて応答性が悪くなりやすく、優先度が低いタスクが長時間待たされるスタベーション(飢餓)や応答遅延が発生しがちです。組み込み系や協調的マルチタスクの環境ではノンプリエンプティブが採用されることが多い一方、汎用OSではプリエンプティブが主流です。
FAQ
Q1: ノンプリエンプティブと協調的マルチタスクは同じですか?
A1: 実務上ほぼ同義と扱われます。どちらも実行中のタスクが自発的に切替を行う方式を指します。
A1: 実務上ほぼ同義と扱われます。どちらも実行中のタスクが自発的に切替を行う方式を指します。
Q2: 優先度で常に高いものを選ぶ方式はプリエンプティブですか?
A2: 一般には優先度の高いタスクが現れれば割り込む方式はプリエンプティブとされます。ただし優先度をあくまで新規選択時のみ参照する非プリエンプティブ実装も理論上可能です。問題文の記述は前者を想定しています。
A2: 一般には優先度の高いタスクが現れれば割り込む方式はプリエンプティブとされます。ただし優先度をあくまで新規選択時のみ参照する非プリエンプティブ実装も理論上可能です。問題文の記述は前者を想定しています。
Q3: ノンプリエンプティブで応答性を改善する方法はありますか?
A3: タスクを短い時間で分割して自己解放(協調的に待ちへ遷移)させる、優先度設計を工夫するなどの手法があります。
A3: タスクを短い時間で分割して自己解放(協調的に待ちへ遷移)させる、優先度設計を工夫するなどの手法があります。
関連キーワード: スケジューリング、ノンプリエンプティブ、プリエンプティブ、ラウンドロビン、SRTF、SJF、優先度スケジューリング、コンテキストスイッチ、応答性、スタベーション

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

