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
寄存器来指向允许访问所有物理内存的页表,则这样就破坏了用户/内核之间的隔离机制。
网友评论