OSとハードウェア

上のRISC-Vのコードの最後のecall命令が実行されたときに起こることとして正しいものはどれか。

li   a7, 64      # システムコールの番号
li   a0, 1       # 引数1
la   a1, msg     # 引数2
li   a2, 13      # 引数3
ecall
  1. A指定した番号のアドレスへ、特権モードのまま通常の関数呼び出しとして分岐する
  2. B割り込みが禁止され、次の割り込みが来るまでCPUが停止する
  3. C例外で特権モードに切り替わり、カーネルの処理が実行される
答えと解説を見る

正解:C. 例外で特権モードに切り替わり、カーネルの処理が実行される

ecallは、意図的に例外を起こす命令です。CPUは現在の命令のアドレスを保存し、特権の高いモードに切り替えて、OSが設定した例外の処理の入口へ進みます。カーネルはa7の番号でどのシステムコールかを判断し、a0〜a2を引数として処理して、結果を返したあとユーザモードに戻ります。ユーザモードから直接カーネルの関数へ分岐はできず、CPUを停止させるのはwfiのような別の命令です。

  • A. ユーザモードのまま分岐はせず、例外でモードを切り替えます。
  • B. CPUを止めて割り込みを待つのはwfiなどの別の命令です。
  • C. 正しい。例外で特権モードに入り、カーネルが処理します。
この分野を解く 分野ページへ

OSとハードウェアのほかの問題

  1. 割り込みと例外の違いとして一般的な説明はどれか。
  2. 次のうち、命令の実行とは無関係に、いつ起こるか決まっていない非同期のものはどれか。
  3. CPUが割り込みを受け付けたときの一般的な処理の流れとして正しいものはどれか。
  4. 割り込みベクタテーブルの役割として正しいものはどれか。
  5. 重要な処理の途中で一時的に割り込みを禁止(マスク)するときの注意点として正しいものはどれか。