RISC-V的CPU硬件是如何處理陷阱的?
- 如果陷阱是設備中斷,且寄存器
sstatus
的SIE位被清除了,則不執行下面的任何步驟; - 清除SIE位來使中斷不可用;
- 拷貝
pc
到sepc
; - 將當前模式保存到
sstatus
中的SPP位; - 設置
scause
來反映陷阱的原因; - 設置模式爲內核模式;
- 拷貝
stvec
到pc
; - 在新的
pc
處開始執行;
在處理陷阱時,CPU沒有做哪些事?
- 沒有切換到內核頁表;
- 沒有切換到內核的棧;
- 沒有保存除了
pc
意外的任何寄存器;
注意:在處理陷阱時,CPU沒有做的事,全部由內核來做。
CPU處理陷阱的步驟還可以進一步簡化嗎?
答案:不能了。
分析:
假設CPU沒有切換pc
,即去掉了步驟3、步驟7、步驟8,則出現了RISC-V處於內核模式,但仍運行着用戶代碼。如果用戶代碼修改satp
寄存器來指向允許訪問所有物理內存的頁表,則這樣就破壞了用戶/內核之間的隔離機制。