RISC-V-PageFault机制
当 CPU 开启分页 (S-Mode) 并访问虚拟地址时,如果 PTE 无效 (V=0) 或 权限不足 (如写 RO 页面),硬件会触发 Page Fault Exception。
关键寄存器快照
Trap 发生时,硬件自动填充:
scause(原因):- 12: Instruction Page Fault (指令取指错误)
- 13: Load Page Fault (读取错误)
- 15: Store Page Fault (写入错误 - 关键用于 COW)
stval(值): 这是核心! 硬件将导致错误的虚拟地址 (VA) 写入此寄存器。内核通过读取它知道缺了哪一页。sepc(PC): 触发异常的那条指令地址。内核修复后,通过sret跳回这里重新执行该指令。
战术意义
这使得 OS 可以在指令执行的“中途”介入。对用户进程来说,这一切都是透明的,它只感觉某条指令执行得稍微慢了一点(因为中间插了一段磁盘 I/O 或内存分配的代码)。