首页RISC-V Privileged ISA

RISC-V 特权级:应用、内核和机器级软件如何交接控制权

普通程序不能直接管理所有硬件资源。RISC-V 特权架构用 privilege modes 隔离软件层次,并用 trap 把异常、中断和环境调用交给由特权架构、当前特权模式和 delegation 配置共同决定的 handler。

官方语义边界

动画只展示 RISC-V Privileged Architecture Manual 中能直接确认的通用 trap 行为;定时器、中断控制器、SBI/Linux 路径只在相关专题中作为简化边界说明。

特权级体系

RISC-V 特权体系把软件分成不同控制层

学习 RISC-V 特权架构,先抓住两件事:静态上,软件运行在不同 privilege mode 中;动态上,异常、中断和环境调用通过 trap 把控制权交给由当前特权模式和 delegation 配置选定的 handler,再由 MRET 或 SRET 返回。

特权级按自上而下递减排列
M
M-mode
机器级软件
最高特权模式;每个 hart 必须实现。M-mode 管理机器级状态,并可访问已实现且未被访问控制禁止的低特权级 CSR。
S
S-mode
操作系统内核
可选的 Supervisor 模式;常用于 OS 内核、虚拟内存和已委托 trap。S-mode 不能直接执行 M-mode 专属指令或访问 M-mode 专属 CSR。
U
U-mode
应用程序
最低特权模式;普通应用通常在这里运行,并通过 ECALL 等 trap 请求执行环境服务。U-mode 不能直接执行更高特权级操作。

这是学习用的常见 U/S/M 视图;U-mode 和 S-mode 是否存在取决于实现和扩展,本页不展开虚拟化相关层级。

学习范围:U / S / M最高层:M-mode跨层:trap -> handler -> MRET/SRET
H-extension / Hypervisor: RISC-V Hypervisor 扩展增加虚拟化相关状态和 VS/VU 等虚拟特权模式。为了让这条学习路线先稳定建立 U/S/M 与 trap 基础,本页只做范围提示。
控制权交接

Trap 控制权交接

所有演示动画都共用这条骨架:先确认当前特权模式,再识别 trap 原因,按 delegation 和特权级规则选择目标层级,记录架构状态,进入 handler 并返回。

1

当前运行层级

先确认 hart 正在 U、S 或 M 中哪个 privilege mode 执行。trap 是否可委托、写哪组 CSR、返回到哪一层都依赖这个上下文。

2

出现 trap 原因

同步异常来自当前指令,例如 ECALL、非法指令或页故障;异步中断在满足使能和优先级条件时被接收。二者都使用 trap 机制。

3

决定进入哪一层

发生在低于 M-mode 的可委托 trap 可由 medeleg/mideleg 路由到 S-mode;未委托、不可委托或发生在 M-mode 的 trap 进入 M-mode。

4

记录返回线索

硬件写目标层级的 xepc、xcause,并在适用时写 xtval;同时更新 xstatus 中用于 xRET 的前一特权模式和中断使能字段。

5

handler 处理并返回

PC 跳到 mtvec/stvec 的 Direct 或 Vectored 入口。handler 处理后,MRET/SRET 按当前 xepc 和 xstatus 返回状态恢复执行;这些值可能已被软件调整。

学习边界

这些边界不要混在一起

trap 机制不是 OS 策略

RISC-V 特权架构规定 trap entry、架构状态记录和 xRET 返回;系统调用 ABI、handler 代码、调度策略属于 OS、固件或执行环境。

trap entry 不是完整上下文切换

硬件只记录规范定义的 trap 状态。完整寄存器上下文、线程状态保存和恢复通常由软件完成。

delegation 不改变 trap 原因

medeleg/mideleg 可让符合条件且发生在低于 M-mode 的 trap 进入 S-mode;它不会改变该 trap 的原因码,也不会把 OS 策略变成硬件行为。