🧩 RISC-V 特权等级(Privilege Levels)详解


一、为什么需要“特权等级”?

CPU 需要区分:

为防止应用程序破坏系统,RISC-V 定义了多级 特权模式(Privilege Modes)


二、RISC-V 的 3 个主要特权等级

级别 缩写 名称 说明
M 模式 Machine Mode 机器模式 硬件级最高权限,能访问所有资源
S 模式 Supervisor Mode 管理员模式 操作系统内核模式(如 Linux 内核)
U 模式 User Mode 用户模式 普通用户程序运行环境

💡 一些嵌入式处理器只有 M 模式(最简单实现), 复杂的支持 OS 的处理器则包含 M+S+U 三种模式。


三、各模式的访问权限

功能 / 资源 U 模式 S 模式 M 模式
访问 I/O 寄存器 ✅(经 MMIO)
修改中断配置 ⚠️(受限制)
修改页表 / 内存映射
执行特权指令
访问 CSR(控制与状态寄存器) 部分 部分 全部
控制异常 / 中断入口
修改特权等级 ⚠️(可进入 U) ✅(可进入任意模式)

四、CPU 启动与模式切换

🏁 启动阶段

🔄 模式切换路径

 +-----------+
 | M 模式    |  ←—— 中断 / 异常返回 ——+
 | (固件/监控) |                      |
 +-----------+                       |
       ↓                              |
       ↓ 通过 MRET 指令              |
 +-----------+                       |
 | S 模式    |  ←—— SRET 返回 ——+    |
 | (操作系统) |                   |    |
 +-----------+                   |    |
       ↓                         |    |
       ↓ ECALL 指令(用户→内核) |    |
 +-----------+                   |    |
 | U 模式    | ————————————→ 触发陷入  |
 | (用户程序) |                       |
 +-----------+------------------------+

五、典型应用场景

模式 典型运行内容 对应软件
M 模式 Bootloader、监控程序、固件、裸机程序 OpenSBI、UEFI、裸机调试代码
S 模式 操作系统内核 Linux、RTOS 内核
U 模式 用户空间应用 应用程序、Shell、服务进程

六、模式切换的常用指令

指令 作用 说明
ECALL 系统调用 从低特权 → 高特权(如 U → S)
MRET 从 M 模式返回 恢复至上一级模式
SRET 从 S 模式返回 恢复至 U 模式
WFI Wait for Interrupt 空闲等待中断

七、异常与中断的管理机制

每个模式都有独立的“陷入入口”与寄存器集:

CSR 寄存器 模式 功能
mtvec M 异常/中断向量表入口
stvec S 同上(操作系统)
mepc / sepc M/S 保存返回地址
mcause / scause M/S 异常原因码
mstatus / sstatus M/S 状态寄存器(包含特权位)

💡 在陷入(Trap)发生时:


八、mstatus(机器状态寄存器)关键字段

位段 名称 含义
MPP[12:11] Machine Previous Privilege 保存陷入前的模式
MPIE Machine Previous Interrupt Enable 保存中断使能状态
MIE Machine Interrupt Enable 当前中断使能
SPP Supervisor Previous Privilege 同理(S 模式)
FS/XS 浮点/扩展状态 控制上下文保存

九、只有 M 模式的简化实现(Embedded Profile)

在嵌入式系统中(如 RV32IMAC 核心):

📘 这种实现称为 “Machine-only System”, 常见于 MCU(如平头哥 C906/C908 低配版、SiFive E 系列)。


🔟 特权等级的扩展(Hypervisor)

在更复杂的处理器中(如 Linux 虚拟化环境)还会增加:

模式 缩写 功能
H 模式 Hypervisor Mode 虚拟机监控层(S 模式之上)

形成:

M → H → S → U

目前主要在 RV64 Linux 平台(如 QEMU 或 K230 芯片)使用。


✅ 十、总结:RISC-V 特权模式的核心逻辑

模式 功能定位 可访问资源 返回指令
U 模式 用户程序 受限寄存器、内存
S 模式 操作系统 页表、中断控制、系统调用 SRET
M 模式 硬件与固件 全部硬件资源、CSR MRET

🔑 一句话总结: RISC-V 的特权模式构成了系统从硬件 → 内核 → 用户的完整安全层次。