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

選択肢
ア:2(正解)
イ:2.5
ウ:3.5
エ:5
🔒 解説は解答すると表示されます
多重割込みのプリエンプト【午前解説】
正解の理由
多重割込みが許可されており、割込み A は B より優先度が高いので、B の処理中に A が発生すると B は中断され、A の処理が先に行われます。図の発生タイミングは、B が0ミリ秒と5ミリ秒、A が1ミリ秒・2.5ミリ秒・3.5ミリ秒です。0〜5ミリ秒の CPU の使われ方を時系列で追うと、次のようになります。
メイン処理が利用できる時間は ミリ秒です。したがって正解は ア です。
解法ステップ
- 図から各割込みの発生時刻を読む(A:1, 2.5, 3.5ミリ秒、B:0, 5ミリ秒)。
- 優先度の高い A は B を中断して実行されることに注意して、時系列に並べる。
- 0〜5ミリ秒のうち、割込み処理が使う時間を合計する:B 1.5ミリ秒 + A 0.5 × 3 = 3ミリ秒。
- メイン処理の時間は ミリ秒。
(5ミリ秒に発生する B の処理は、0〜5ミリ秒の区間には入りません。)
選択肢別の誤答解説
- ア: 2(正解)
割込み処理の合計3ミリ秒を5ミリ秒から引いた値です。 - イ: 2.5
A の発生を2回と数えたり、B の処理時間を1ミリ秒と考えたりすると出る値です。 - ウ: 3.5
B の処理(1.5ミリ秒)を数えず、A だけを引くと になります。 - エ: 5
割込みの処理時間をまったく考えない値です。
よくある誤解
- 図の目盛りを1ミリ秒間隔と思い込み、A の発生時刻を 1, 2, 3, 4 ミリ秒と読む誤り。図の点線は0.5ミリ秒間隔で、A は 1, 2.5, 3.5 ミリ秒に発生しています。
- 多重割込みでは、優先度の高い割込みが低い割込みの処理を中断します。中断された B は A の後に残りを実行するので、B の処理時間(1.5ミリ秒)は全部数えます。
補足コラム
- 本問のように呼出し・復帰のオーバヘッドを無視する場合、メイン処理の時間は「区間の長さ − 区間内で実行される割込み処理時間の合計」で求められます。ただし、区間の終わりまでに終わらない割込み処理がある場合は、その分を区間内の時間だけ数えます。
- 時系列の表を書くと、中断・再開の順序を取り違えにくくなります。
FAQ
Q. 5ミリ秒ちょうどに発生する B は数えないのですか?
A. 5ミリ秒に発生した B の処理は5ミリ秒以降に行われるので、0〜5ミリ秒の区間のメイン処理の時間には影響しません。
A. 5ミリ秒に発生した B の処理は5ミリ秒以降に行われるので、0〜5ミリ秒の区間のメイン処理の時間には影響しません。
Q. A と B が同時に発生したらどうなりますか?
A. 優先度の高い A が先に処理され、B は A の終了後に処理されます。
A. 優先度の高い A が先に処理され、B は A の終了後に処理されます。
関連キーワード: 割込み、多重割込み、割込み優先度、プリエンプション、CPU時間

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

