OSとハードウェア
割り込みや例外の処理を終えて元のプログラムに戻るとき、通常の関数の戻り命令ではなく、専用の復帰命令(RISC-Vのsret・mretなど)を使う理由はどれか。
- A専用の命令の方が、命令の長さが短いから
- B戻り先に加え、モードと割り込みの状態も戻すため
- C通常の戻り命令では、ハンドラからは戻り先のアドレスが分からないから
答えと解説を見る
正解:B. 戻り先に加え、モードと割り込みの状態も戻すため
例外や割り込みが起きると、CPUは戻り先のアドレスのほか、それまでの動作モードや割り込みが許可されていたかどうかを専用のレジスタに保存して、特権モードに入ります。戻るときはこれらを同時に元に戻し、ユーザモードに下げてから元の命令へ進まなければ、特権のまま実行が続く危険があります。専用の復帰命令はこれを1命令で不可分に行います。命令の長さの問題ではなく、戻り先のアドレスは保存されたレジスタから分かります。
- A. 命令の長さは理由ではありません。
- B. 正しい。モードと割り込みの状態も同時に戻す必要があります。
- C. 戻り先は専用のレジスタに保存されていて分かります。