当前运行层级
先确认 hart 正在 U、S 或 M 中哪个 privilege mode 执行。trap 是否可委托、写哪组 CSR、返回到哪一层都依赖这个上下文。
普通程序不能直接管理所有硬件资源。RISC-V 特权架构用 privilege modes 隔离软件层次,并用 trap 把异常、中断和环境调用交给由特权架构、当前特权模式和 delegation 配置共同决定的 handler。
动画只展示 RISC-V Privileged Architecture Manual 中能直接确认的通用 trap 行为;定时器、中断控制器、SBI/Linux 路径只在相关专题中作为简化边界说明。
学习 RISC-V 特权架构,先抓住两件事:静态上,软件运行在不同 privilege mode 中;动态上,异常、中断和环境调用通过 trap 把控制权交给由当前特权模式和 delegation 配置选定的 handler,再由 MRET 或 SRET 返回。
这是学习用的常见 U/S/M 视图;U-mode 和 S-mode 是否存在取决于实现和扩展,本页不展开虚拟化相关层级。
所有演示动画都共用这条骨架:先确认当前特权模式,再识别 trap 原因,按 delegation 和特权级规则选择目标层级,记录架构状态,进入 handler 并返回。
先确认 hart 正在 U、S 或 M 中哪个 privilege mode 执行。trap 是否可委托、写哪组 CSR、返回到哪一层都依赖这个上下文。
同步异常来自当前指令,例如 ECALL、非法指令或页故障;异步中断在满足使能和优先级条件时被接收。二者都使用 trap 机制。
发生在低于 M-mode 的可委托 trap 可由 medeleg/mideleg 路由到 S-mode;未委托、不可委托或发生在 M-mode 的 trap 进入 M-mode。
硬件写目标层级的 xepc、xcause,并在适用时写 xtval;同时更新 xstatus 中用于 xRET 的前一特权模式和中断使能字段。
PC 跳到 mtvec/stvec 的 Direct 或 Vectored 入口。handler 处理后,MRET/SRET 按当前 xepc 和 xstatus 返回状态恢复执行;这些值可能已被软件调整。
RISC-V 特权架构规定 trap entry、架构状态记录和 xRET 返回;系统调用 ABI、handler 代码、调度策略属于 OS、固件或执行环境。
硬件只记录规范定义的 trap 状态。完整寄存器上下文、线程状态保存和恢复通常由软件完成。
medeleg/mideleg 可让符合条件且发生在低于 M-mode 的 trap 进入 S-mode;它不会改变该 trap 的原因码,也不会把 OS 策略变成硬件行为。