基本情報技術者試験 令和元年度 秋季 午前 問13
CPU の割込み処理についての問題。
--------------------------
令和元年度 秋期 午前 問13
メイン処理、及び表に示す二つの割込み A、B の処理があり、多重割込みが許可されている。割込み A、B が図のタイミングで発生するとき、0 ミリ秒から 5 ミリ秒までの間にメイン処理が利用できる CPU 時間は何ミリ秒か。ここで、割込み処理の呼出し及び復帰に伴うオーバヘッドは無視できるものとする。
ア 2
イ 2.5
ウ 3.5
エ 5
--------------------------
解説
選択肢の有効桁数表示があっていないことにムズムズする。
ア 2.0
イ 2.5
ウ 3.5
エ 5.0
この問題は CPU の割込みについての問題。
CPU が何かの処理(メイン処理)をしているときでも、ユーザのキーボード操作等があればそちらの処理を優先する。
そうしないと、キーボードを操作しても画面に反映されるのがメイン処理が終わった後になってしまい、操作性が非常に悪くなってしまう。
この場合はキーボード操作の処理が割込み処理になる。
問題の図に CPU がその時間にどの処理をしているかと、メイン処理の列を追加する。
図の ①~⑨ の処理状況について以下に記載する。
[①:メイン処理を実行中]
割込み B が発生するまでは CPU でメイン処理が実行されている。
問題が聞いているのは図の 0 ミリ秒以降のことなので、この時間は関係ない。
[②:割込み B 処理を実行中]
割込み B が発生したので、CPU は割込み B の処理を実行している。
[③:割込み A 処理を実行中]
割込み A が発生し、割込み B と割込み A では割込み A の方が優先度高いため、CPU は割込み A の処理を実行することになる。
問題文より多重割込みが許可されているので、割込み B の処理中にさらに別の割込み A がはいってこれる。
[④:割込み B 処理を実行中]
割込み A が 0.5 ミリ秒で終了するので、割込み B の処理に戻る。
②で割込み B は 1.0 ミリ秒処理済みなので、④の長さは 0.5 ミリ秒になる。
[⑤:メイン処理を実行中(0.5ミリ秒)]
割込み B も終了したので、やっと CPU がメイン処理を実行できる。
[⑥:割込み A 処理を実行中]
割込み A が発生したので、また CPU が割込み処理の実行をすることになる。
[⑦:メイン処理を実行中(0.5ミリ秒)]
割込み A が終了したので、再び CPU がメイン処理を実行できる。
[⑧:割込み A 処理を実行中]
また割込み A が発生したので、また CPU が割込み処理の実行をすることになる。
[⑨:メイン処理を実行中(1.0ミリ秒)]
割込み A が終了したので、再び CPU がメイン処理を実行できる。
問題文が聞いている 5.0 ミリ秒まで処理が続けられる。
⑤、⑦、⑨でメイン処理を実行できていて、その時間は合計で 2.0 ミリ秒になる。
ということで正解は選択肢アとなる。
この問題では割込み処理への切り替えにかかるオーバヘッドを無視できるとしているが、実際には多少なりオーバヘッドで無駄な時間がかかるため、割込みにより切り替えが頻繁に起きないような設計が必要になる。
例としてこの問題の割込み A と割込み B の優先度を反対にした場合は以下のようになる。
優先度を反対にする前と比較して、切り替えの回数が 1 回減っている。
一方で、1.0 ミリ秒で発生した割込み A の開始が 0.5 ミリ秒遅れてしまっている(割込み A の応答性が悪くなっている)。
割込み A の応答性を優先するのか、全体としてオーバヘッドの削減を優先するのかは、そのシステムの目的次第で決めるものになる。
前後の問題はこちら。