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

選択肢
ア:2(正解)
イ:2.5
ウ:3.5
エ:5
🔒 解説は解答すると表示されます
多重割込みのプリエンプト【午前解説】
正解の理由
問題文に「多重割込みが許可されている」「割込みAはBより高優先度」と明記されています。したがって高優先度の割込みAは、低優先度Bやメイン処理を即時プリエンプト(中断)して実行されます。到着順に沿ってCPU上で実際に動作するのは「実行中の割込み・処理が占有する実時間」であり、これらを0〜5 ms区間で積算して主処理に残る時間を求めます。
(問題データでは選択肢の ア が「2 ms」となっていますが、上の前提で正しく時系列に沿って計算すると、メイン処理が利用できるCPU時間は です。以下で根拠を示します。)
解法ステップ
前提を明確にする:
- 多重割込み許可:高優先度が到着したら低優先度の処理をプリエンプトする(即時割込み)。
- 同一優先度間:同一割込みが重複到着した場合は「既に実行中/保留なら順次処理される」と仮定(今回の到着時刻では重複同時到着はない)。
- 呼出し/復帰オーバヘッドは無視。
与えられたデータ:
- A:処理時間 、発生時刻 1,2,3,4 ms(計4回)
- B:処理時間 、発生時刻 0,5 ms(0 ms の発生のみ区間内で影響)
- 間隔はミリ秒刻み
時刻ごとの実行スケジュール(前述の前提で厳密にシミュレーション):
- 0.0–1.0 ms:B が到着しているため B 実行(B の実行量 1.0 ms)
- 1.0 ms:A 到着 → B をプリエンプト、A 実行 1.0–1.5 ms(A1:0.5 ms)
- 1.5–2.0 ms:A 終了後、B の残り 0.5 ms を再開して完了(B は計 1.5 ms 完了)
- 2.0–2.5 ms:A 到着(時刻2) → A 実行(A2:0.5 ms)
- 2.5–3.0 ms:割込みなし → メイン実行(0.5 ms)
- 3.0–3.5 ms:A 到着(時刻3) → A 実行(A3:0.5 ms)
- 3.5–4.0 ms:割込みなし → メイン実行(0.5 ms)
- 4.0–4.5 ms:A 到着(時刻4) → A 実行(A4:0.5 ms)
- 4.5–5.0 ms:割込みなし → メイン実行(0.5 ms) (5.0 ms で区間終了。B の 2 回目発生は時刻5で区間外扱い)
各区間のまとめ(0–5 msのうち):
- 割込みによるCPU占有合計:B (1.5 ms) + A×4 (0.5×4 = 2.0 ms) = 3.5 ms
- よってメインに残る CPU 時間 =
以上から、厳密なプリエンプト動作を仮定するとメイン処理が利用できる時間は となります。
選択肢別の誤答解説
- ア(2 ms)
表面上は妥当そうに見えますが、上記の厳密な時系列を追うと合計割込み処理時間が3.5 ms となり、5−3.5=1.5 ms になります。したがって ア は時系列の重複・プリエンプトの扱いを誤った計算結果です。 - イ(2.5 ms)
割込み合計を と誤って算出している場合。典型的なミスは、B の処理時間を短く見積もる、または A の回数を3回と数えることです。いずれも到着時刻とプリエンプトのルール無視に起因します。 - ウ(3.5 ms)
これは「メインが利用できる時間」としては不正解。3.5 ms は実際には割込みが占める合計時間(B 1.5 + A×4 2.0)に等しく、問題は“メインが利用できるCPU時間”の算出なので選べません。 - エ(5 ms)
割込みが全く影響しないとした極端な誤り。問題文で割込み発生が明示されているためありえません。
よくある誤解
- 割込みが到着しても「現在の割込みが終わるまで後回し」と誤解する。
高優先度割込みが到着した場合は即時プリエンプトする(問題文の前提)。 - 同一割込みが連続到着するときに「同時到着分をまとめて処理できる」と考える誤り。
実際は各到着に対して所定の処理時間が必要(問題に特別な合成の指示がない限り個別処理)。 - 到着時刻が境界(例:2.0 ms)にある場合の扱いをあいまいにすること。
到着が処理終了と同時刻なら「処理終了後に到着した」と見なすのか「同時に到着した」と見なすのかで結果が変わるため、明示的に前提(ここでは“到着時に優先度で即時処理”が優先される)を置く必要があります。
補足コラム
- 「多重割込み許可」と「優先度」によるプリエンプトはリアルタイム設計で頻出の概念です。設問では「呼出し・復帰オーバヘッド無視」とあるため、単純に処理時間の合計と時系列での占有を積算すれば良く、オーバヘッドを考慮する場合はさらに短いメイン利用可能時間になります。
- 実装上は、割込みの到着が処理終了と同時刻に起きる場合の優先順位や、同一割込みの重複到着の扱い(エッジ/レベルトリガ、デバウンスなど)は設計仕様に依存します。試験では文面の前提を明確に読み取り、それに従うことが重要です。
FAQ
Q. 到着時刻が「ぴったり処理終了時」と一致する場合はどう扱えば良いですか?
A. 問題文に特別な指示がない場合は「割込みの到着はその時刻に生じ、優先度の高いものは即時に処理される」というルールで時系列を決めると一貫性が取れます。境界同時の場合は「処理終了後に到着した」と明示されることが多いですが、試験問題ではどちらかの扱いを明示しているか文脈で判断します。
A. 問題文に特別な指示がない場合は「割込みの到着はその時刻に生じ、優先度の高いものは即時に処理される」というルールで時系列を決めると一貫性が取れます。境界同時の場合は「処理終了後に到着した」と明示されることが多いですが、試験問題ではどちらかの扱いを明示しているか文脈で判断します。
Q. 同一優先度の割込みが重複すると処理時間はどうなる?
A. 基本的には到着回数分だけ処理が必要です。実装によっては重複要求を抑止したり合成したりする場合がありますが、試験問題にそのような特例が書かれていなければ個別に処理する想定で計算します。
A. 基本的には到着回数分だけ処理が必要です。実装によっては重複要求を抑止したり合成したりする場合がありますが、試験問題にそのような特例が書かれていなければ個別に処理する想定で計算します。
関連キーワード: 割込みスケジューリング、多重割込み、プリエンプト、優先度割当、リアルタイムスケジューリング

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

