基本情報技術者 2018年 秋期 午前(科目A) 問10
問題文
割込み処理の終了後に、割込みによって中断された処理を割り込まれた場所から再開するために、割込み発生時にプロセッサが保存するものはどれか。
選択肢
ア:インデックスレジスタ
イ:データレジスタ
ウ:プログラムカウンタ(正解)
エ:命令レジスタ
##: 割込み処理の終了後に、割込みによって中断された処理を割り込まれた場所から再開するために、割込み発生時にプロセッサが保存するものはどれか。【午前2 解説】
要点まとめ
- 結論: 割込み発生時に保存されるのは、割り込まれた処理を再開するための次に実行すべき命令アドレスであるプログラムカウンタです。
- 根拠: プログラムカウンタは「次に実行する命令」のアドレスを保持しており、復元することで中断前の実行位置へ正確に復帰できます。
- 差がつくポイント: 命令レジスタは現在の命令、データ/インデックスレジスタはデータ参照用であり、再開位置の情報を持たない点を押さえておきましょう。
正解の理由
正解は ウ(プログラムカウンタ)です。割込みで中断された処理を中断された場所から再開するには、復帰時に「どの命令の次から実行を再開すべきか」を知る必要があります。プログラムカウンタ(PC)は常に次に実行すべき命令のアドレスを指しているため、割込み発生時にその値を保存しておき、割込み処理終了時に復元することで元の処理を正確に継続できます。
よくある誤解
- 命令レジスタ(IR)を保存すればよいと考える誤解:IRは現在デコード中または実行中の命令そのものを保持するため、次に実行すべき場所(アドレス)を示すPCとは役割が異なります。
- データレジスタやインデックスレジスタを保存すれば復帰できると考える誤解:これらはデータ操作用であり、制御フロー(復帰位置)を示す情報は保持しません。
- 「割込みハンドラが終わればPCは自動的に戻る」と思う誤解:実際には割込み発生時にPC(および必要なレジスタ群)を保存し、戻り命令(例:IRET/RTI)で復元することが必要です。
解法ステップ
- 問題文で「割り込まれた場所から再開する」に着目し、何が必要かを考える(=復帰時の実行位置)。
- 各レジスタの役割を思い出す(PC=次命令のアドレス、IR=現在の命令、データ/インデックス=データ参照)。
- 「次に実行すべき命令のアドレス」を保持するものを選ぶ(=PC)。
- 選択肢から該当するものを選ぶ(ウが該当)。
選択肢別の誤答解説
- ア: インデックスレジスタ
インデックスレジスタはアドレス計算や配列参照などで使うオフセット保持用であり、実行位置(復帰アドレス)を示しません。したがって再開位置の保存には不適です。 - イ: データレジスタ
データレジスタは演算や一時データの格納に使われ、制御フロー情報(次の命令アドレス)を保持しないため誤りです。 - ウ: プログラムカウンタ
正解。プログラムカウンタは次に実行すべき命令のアドレスを示すため、割込み前の位置へ戻るために保存・復元されます。 - エ: 命令レジスタ
命令レジスタはフェッチしてきた命令そのものを保持しますが、どのアドレスに戻るかという制御情報は持たないため、復帰位置の保存には不十分です。
補足コラム
実際のプロセッサでは、割込み発生時に保存されるのはPCだけでなく、プログラムステータス(フラグ)や必要に応じて汎用レジスタなどのコンテキスト全体です。多くのアーキテクチャはスタックに戻り先アドレス(PC)やステータスレジスタをプッシュし、割込みハンドラの終了時に専用命令(例:IRET, RTI, RETI)でそれらをポップして復元します。また、割込みがベクタ方式の場合は割込み種類に応じたハンドラアドレスへジャンプしますが、元のPCは同様に保存されます。
FAQ
Q1: 命令レジスタ(IR)を保存しておけば復帰できませんか?
A1: IRは現在の命令のビットパターンを示すだけで、次に実行する命令のアドレス情報を持たないため復帰位置の確保には不十分です。PCの保存が必要です。
A1: IRは現在の命令のビットパターンを示すだけで、次に実行する命令のアドレス情報を持たないため復帰位置の確保には不十分です。PCの保存が必要です。
Q2: プロセッサによってはPC以外も保存するのですか?
A2: はい。割込み処理で必要な状態を保つため、ステータスレジスタや一般レジスタも保存(プッシュ)することが多く、これをコンテキスト保存と呼びます。
A2: はい。割込み処理で必要な状態を保つため、ステータスレジスタや一般レジスタも保存(プッシュ)することが多く、これをコンテキスト保存と呼びます。
Q3: 割込み後の復帰命令は何ですか?
A3: アーキテクチャにより異なりますが、x86のIRET、汎用的なRTI/RETIなどがあり、これらはスタックからPCやステータスを復元します。
A3: アーキテクチャにより異なりますが、x86のIRET、汎用的なRTI/RETIなどがあり、これらはスタックからPCやステータスを復元します。
関連キーワード: 割込み、プログラムカウンタ、コンテキスト保存、割込みハンドラ、レジスタ管理

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

