RISC-V-Trap寄存器

在处理 Trap 时,通用寄存器 (General Purpose Registers) 是不可信且不可用的(存着用户数据)。内核必须依赖 CSR (Control and Status Registers) 来完成“盲操”。

关键 CSR 解析

寄存器全称作用xv6 中的具体用法
stvecSupervisor Trap Vector Base入口地址。Trap 发生时 PC 强制指向这里。在用户态时指向 trampolineuservec;在内核态时指向 kernelvec
sepcSupervisor Exception PC断点记录。保存 Trap 发生时的 PC。用于 sret 时恢复执行。如果是 Syscall,内核需手动 sepc += 4
scauseSupervisor Cause案由。记录 Trap 的类型。8=Syscall, 13/15=PageFault, 1=Timer Interrupt。
sscratchSupervisor Scratch暗箱。内核与用户交换数据的唯一抓手。至关重要。在 User Mode 下,它保存 Trapframe 的物理地址
sstatusSupervisor Status状态位。控制全局中断开启/关闭 (SIE) 及之前的模式 (SPP)。用于记录进 Trap 之前是 User 还是 Kernel 模式。

战术意义

这些寄存器是硬件留给 OS 的“后门”。Trap 发生的那一微秒,软件无法干预,全靠硬件自动读写这些寄存器来保存最原始的现场。