作業系統與硬體
上方RISC-V程式碼最後的ecall指令被執行時,會發生下列何事?
li a7, 64 # 系統呼叫的編號
li a0, 1 # 引數1
la a1, msg # 引數2
li a2, 13 # 引數3
ecall
- A以特權模式不變的方式,作為一般函式呼叫分支到指定編號的位址
- B中斷被停用,CPU停止運作直到下一次中斷到來
- C因例外而切換到特權模式,並執行核心的處理程序
查看答案與解析
正確答案:C. 因例外而切換到特權模式,並執行核心的處理程序
ecall是刻意引發例外的指令。CPU會儲存目前指令的位址,切換到特權較高的模式,並跳到作業系統所設定的例外處理入口。核心依據a7的編號判斷是哪一個系統呼叫,將a0~a2當作引數進行處理,回傳結果後再回到使用者模式。使用者模式無法直接分支到核心的函式,而讓CPU停止的是wfi這類另外的指令。
- A. 不會以使用者模式直接分支,而是藉由例外切換模式。
- B. 讓CPU停止並等待中斷的是wfi等另外的指令。
- C. 正確。因例外進入特權模式,由核心負責處理。