応用情報技術者 2014年 春期 午前2 問09
問題文
メイン処理、及び表に示す二つの割込みA, Bの処理があり、多重割込みが許可されている。割込みA, Bが図のタイミングで発生するとき、0ミリ秒から5ミリ秒までの間にメイン処理が利用できるCPU時間は何ミリ秒か。ここで、割込み処理の呼出し及び復帰に伴うオーバヘッドは無視できるものとする。

選択肢
ア:2(正解)
イ:2.5
ウ:3.5
エ:5
🔒 解説は解答すると表示されます
割込みによるCPU占有【午前2解説】
正解の理由
図の0〜5ms区間に含まれる割込みは、時刻0msで発生する割込みB(低優先)と、時刻1,2,3msで発生する割込みA(高優先)が各1回ずつです。時刻5msで発生するBは「5ms以降」の処理に入るため本問の区間外として扱います。各割込みの合計処理時間はBが1.5ms(0ms発生分のみ)、Aが0.5ms×3回=1.5ms、合計でmsです。よってメイン処理が利用できるCPU時間は総時間msから割込み処理時間msを引いてmsとなり、選択肢ア(2ms)が正しいです。
解法ステップ
- 区間の境界を確認:問題は「0ミリ秒から5ミリ秒までの間」=時間区間 と考え、時刻5.0msちょうどに発生する割込みは含めない。
- 発生と優先度に従って実行順を時系列で追う。主要な出来事は次の通り。
- 0.0ms: B 発生 → B 実行開始
- 1.0ms: A 発生(高優先)→ B をプリエンプト、A 実行
- 1.5ms: A(時刻1の分)終了 → B 再開(残り0.5ms)
- 2.0ms: B 完了;同時に時刻2の A 発生 → A(2ms分)実行(2.0〜2.5ms)
- 2.5〜3.0ms: メイン処理実行(0.5ms)
- 3.0ms: A(3ms分)発生 → A 実行(3.0〜3.5ms)
- 3.5〜5.0ms: メイン処理実行(1.5ms)
- 各処理時間を合計する。割込み処理の合計は B:1.5ms(0ms発生分のみ)+ A:0.5ms×3=1.5ms → 合計3.0ms。
- メイン処理が使える時間は ms。
(上の時系列はプリエンプションを許すモデルでの処理完了/再開を示しています。)
選択肢別の誤答解説
- ア(2)
正しく計算した結果です。0ms発生のBが1.5ms、Aが3回で1.5ms、合計3.0msを割り引くとメインは2.0msです。 - イ(2.5)
しばしば「Bが1.5msだが、Aのうち1回だけBを中断するので合計が2.5msになる」と誤計算されます。実際はB(0ms)の処理はA到来で中断されますが、残りは区間内(1.5→2.0ms)で完了するためB全体の1.5msが区間内に含まれます。よって割込み合計は3.0msです。 - ウ(3.5)
多くはAの処理時間を重複して見積もるか、Bを2回(0msと5ms両方)含めて計算する誤りです。5ms発生分のBは区間外のため含めません。 - エ(5)
割込みをまったく考慮せずに選ぶミスです。問題は割込みがCPUを占有するためメイン処理は常に5ms使えるわけではありません。
よくある誤解
- 時刻5.0ms発生の割込みを区間「0〜5ms」に含める:境界条件の誤認。通常は半開区間 として扱うのが自然で、本問では5ms発生分は含めない。
- プリエンプションで「一部だけ」割込み時間を無視する:高優先度に中断されても、中断された割込みの残り時間は後で必ず消費されるため、区間内に残りがあれば全体時間に含める必要がある。
- 同時刻到着の処理順を無視する:同一時刻に複数割込みがあれば優先度に従う(高優先が先)。これを誤ると時間配分が狂う。
補足コラム
割込み/プリエンプションを含むCPU時間の配分問題は、到着時刻順にシミュレーションするのが確実です。一般的な手順は次の通りです。
- イベント(割込み到着、処理終了)を時系列に並べる。
- 現在実行中の処理と優先度を追跡し、到着時にプリエンプトが必要か判定する。
- 各区間で実際に消費された時間を累積する。
簡単なシミュレーション(参考、教育用):
# 到着時刻(ms), name, service time(ms), priority (大きいほど優先)
events = [(0,'B',1.5,0),(1,'A',0.5,1),(2,'A',0.5,1),(3,'A',0.5,1),(5,'B',1.5,0)]
# このスクリプトは概念示例で、割込みのプリエンプトと残時間を追う実装が必要です。
実務ではイベント駆動のシミュレータで処理を追えば、人為的ミスを減らせます。
FAQ
Q1. 「0〜5msの間」に5.0ms発生は含めていいですか?
A1. 本問では5.0msの発生は区間の終端に当たるため含めません(として扱う)。通常の区間問題では終端を含めるかどうかを明示するか解法で明確に扱ってください。
A1. 本問では5.0msの発生は区間の終端に当たるため含めません(として扱う)。通常の区間問題では終端を含めるかどうかを明示するか解法で明確に扱ってください。
Q2. 割込みのオーバヘッド(呼出し・復帰)は無視でいいですか?
A2. 問題文で無視と明示されている場合は無視します。実務的にはオーバヘッドを考慮する必要があります。
A2. 問題文で無視と明示されている場合は無視します。実務的にはオーバヘッドを考慮する必要があります。
Q3. 同時に複数割込みが来たらどうする?
A3. 優先度順に処理するのが一般的です。必要に応じて割込み禁止マスクや同時発生時の優先ルールが問題に書かれます。
A3. 優先度順に処理するのが一般的です。必要に応じて割込み禁止マスクや同時発生時の優先ルールが問題に書かれます。
関連キーワード: 割込み、プリエンプション、CPU利用率、タイムライン解析

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

