基本情報技術者試験 平成31年度 春期 午前 問9
外部割込みと内部割込みについての問題。
--------------------------
平成31年度 春期 午前 問9
外部割込みの原因となるものはどれか。
ア ゼロによる除算命令の実行
イ 存在しない命令コードの実行
ウ タイマによる時間経過の通知
エ ページフォールトの発生
--------------------------
解説
問題文と選択肢が短いと嬉しい(試験のときも、ブログ書く時も)。
まずは単語について。
"割込み" は CPU が実行中のプログラムを中断し、別の処理を CPU に強制的に実行させること。
"外部割込み" は割込みの原因が実行しているプログラムの外部に存在する割込み。
キーボード操作やタイマといったハードウェアの処理が起因となるため、ハードウェア割込みとも呼ぶ。
外部があれば内部もある。
"内部割込み" は割込みの原因が実行中のプログラム内部に存在する割込み。
プログラムのエラーやデバイス I/O のための OS 命令実行などが起因となるため、ソフトウェア割込みとも呼ぶ。
選択肢の中ではウのみが外部割込みの原因となる。ということで正解は選択肢ウ。
タイマは実行しているプログラムの外部に存在しているものである。
タイマの一種である watchdog はシステムが正常に動いているか監視している。
あるプログラムがハングアップして異常な状態のまま存在している場合(watchdogに一定時間信号が届いていない場合)に、外部割込みを発生させて異常状態のプログラムを強制終了する。
プログラムの動作と関係ないところに原因があれば、外部割込みと考える。
残りのア、イ、エは全て内部割込みの原因になる。
アとイはプログラムそのもののエラーであるので内部割込みの原因である。
存在しない命令コードの実行はほとんどがプログラム停止になる。
一方でゼロによる除算でプログラムが停止するかどうかは言語と設定に依存する。
ゼロによる除算を "異常な演算" としてプログラムを停止させることもあるが、ゼロによる除算を "正常な演算" として無限大や非数(NaN:Not a Nunber)といった特殊なデータを演算結果として返し、プログラム実行を続けることもある。
使う言語や環境でプログラムの動きが変わる可能性があるため、対策しないで放置しているとバグの原因になる。
ウのページフォールトの発生は外部割込みと勘違いしやすいかもしれない。ページフォールトの言葉そのものは主記憶装置(メモリ)の話なので。
ただし、実行しているプログラムが利用したいデータがメモリ上にないことからデータをメモリにロードする割込み処理が発生するため、根本の割込み原因は実行中のプログラムに存在する。
前後の問題はこちら。