基本情報技術者 2012年 秋期 午前(科目A) 問09
問題文
割込み発生時のプロセッサの処理手順はどれか。
① プログラムレジスタ(プログラムカウンタ)などの退避
② ユーザモードから特権モードへの移行
③ 割込み処理ルーチンの開始番地の決定
④ 割込み処理ルーチンの実行
選択肢
ア:① → ③ → ④ → ②
イ:① → ④ → ② → ③
ウ:② → ① → ③ → ④(正解)
エ:② → ③ → ④ → ①
割込み発生時のプロセッサの処理手順【午前2 解説】
要点まとめ
- 結論:割込み発生時はまずユーザモードから特権モードへ移行(②)、その後コンテキストを退避(①)してから割込み処理に移る順序(②→①→③→④)が正しい。
- 根拠:特権モードへ移行することで保護領域やシステムスタックに安全にレジスタやプログラムカウンタを保存でき、復帰時の整合性が保たれるためである。
- 差がつくポイント:割込みベクタ(③)の決定や割込みハンドラ実行(④)は退避完了後に行われることが多く、自動退避機構の有無を問題文で見落とさないこと。
正解の理由
正解は ウ(② → ① → ③ → ④)です。
割込みが発生するとまずプロセッサは制御特権を持つモード(特権・カーネルモード等)へ移行します(②)。これは割込み処理で保護されたリソースやスタックを書き換えるために必要です。次に現在の実行状態(プログラムカウンタやステータスレジスタなど)を退避(①)して、復帰できるようにします。その後、割込み種別に応じたハンドラの開始番地(割込みベクタ)を決定(③)し、そのハンドラを実行(④)します。退避が完了する前にハンドラを実行してしまうと復帰不可能になったり、ユーザモードの処理権限で不正アクセスが発生する恐れがあります。
割込みが発生するとまずプロセッサは制御特権を持つモード(特権・カーネルモード等)へ移行します(②)。これは割込み処理で保護されたリソースやスタックを書き換えるために必要です。次に現在の実行状態(プログラムカウンタやステータスレジスタなど)を退避(①)して、復帰できるようにします。その後、割込み種別に応じたハンドラの開始番地(割込みベクタ)を決定(③)し、そのハンドラを実行(④)します。退避が完了する前にハンドラを実行してしまうと復帰不可能になったり、ユーザモードの処理権限で不正アクセスが発生する恐れがあります。
よくある誤解
- 割込み処理開始(④)→退避(①)の順になると考える誤解:処理を開始してから退避すると復帰情報を失い、システムが壊れるため実際にはあり得ません。
- ベクタ決定(③)は必ず最初に行うと考える誤解:多くの設計では退避後または同時並行的に行われますが、退避より前にハンドラへ制御移しはしません。
- 「退避」は常にソフトウェアで行われると考える誤解:ハードウェアが自動でPCやステータスをスタックへ格納する場合もありますが、概念的に退避が完了してからハンドラを実行する点は変わりません。
解法ステップ
- 問題文の選択肢を事件順に分解し、各番号の意味を明確にする(①PC退避、②特権移行、③番地決定、④実行)。
- 割込み処理の安全性と復帰要件を考える(特権での保存、復帰情報の確保)。
- 「ハンドラ実行の前に復帰情報が確保されているか」を基準に順序を判断する。
- その基準に合う選択肢(②→①→③→④)を選ぶ。
選択肢別の誤答解説
- ア: ① → ③ → ④ → ②
問題点:PC等を退避してからベクタ決定・実行する流れは一見正しいが、最後に特権モードへ移行(②)するのはおかしい。割込みハンドラ実行中に特権移行が行われる設計は通常なく、特権移行は先に必要です。 - イ: ① → ④ → ② → ③
問題点:退避した直後にハンドラを実行(④)し、しかる後に特権移行(②)やベクタ決定(③)をする順序は成立しません。ハンドラ実行前に実行環境(特権・ベクタ)が決まっている必要があります。 - ウ: ② → ① → ③ → ④
正解:まず特権モードへ移行して安全にコンテキストを退避し、その後ベクタ決定→ハンドラ実行という流れで復帰可能な設計になります。 - エ: ② → ③ → ④ → ①
問題点:特権移行してからベクタ決定・実行をしている点までは良いが、最後に退避(①)するのは致命的です。ハンドラ実行中に退避を行うと復帰時点で元の実行状態が保存されていません。
補足コラム
- ベクタ方式:割込みベクタ(固定アドレス/ベクタテーブル)により③の処理がハードウェアで行われることが多いです。割込み優先度やネスト割込み対応もこの段階で考慮されます。
- 自動退避:一部プロセッサは割込み応答時にハードウェアでPCやステータスレジスタを自動退避します。問題では「退避が行われる」という①の概念を覚えておくことが重要です。
- 例外と割込み:例外(トラップ)も基本的に同様の手順で処理されますが、同期/非同期の違いや発生源に注意してください。
FAQ
Q1. なぜまず特権モードに移行する必要があるのですか?
A1. ハンドラはシステム資源(システムスタック、制御レジスタ等)を書き換えることがあり、ユーザモードのままではアクセス権限や保護機構により安全に退避や処理ができないためです。
A1. ハンドラはシステム資源(システムスタック、制御レジスタ等)を書き換えることがあり、ユーザモードのままではアクセス権限や保護機構により安全に退避や処理ができないためです。
Q2. 退避はハードウェアが自動でやる場合もありますか?
A2. はい。多くのアーキテクチャではPCや状態レジスタの一部をハードウェアが自動で保存し、ソフトウェアは追加のコンテキストを退避します。とはいえ「退避が完了してからハンドラを実行する」という順序は変わりません。
A2. はい。多くのアーキテクチャではPCや状態レジスタの一部をハードウェアが自動で保存し、ソフトウェアは追加のコンテキストを退避します。とはいえ「退避が完了してからハンドラを実行する」という順序は変わりません。
Q3. 割込みベクタ決定(③)はどのタイミングで行われますか?
A3. ベクタの決定は割込み種類の識別後に行われます。多くの場合は退避とほぼ同時か退避直後に行われ、決定後にPCをハンドラ番地に設定して実行します。
A3. ベクタの決定は割込み種類の識別後に行われます。多くの場合は退避とほぼ同時か退避直後に行われ、決定後にPCをハンドラ番地に設定して実行します。
関連キーワード: 割込み、割込みハンドラ、割込みベクタ、コンテキストスイッチ、特権モード、自動退避、割込み優先度

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

