CPU 需要区分:
为防止应用程序破坏系统,RISC-V 定义了多级 特权模式(Privilege Modes)。
| 级别 | 缩写 | 名称 | 说明 |
|---|---|---|---|
| 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 模式;
在 M 模式下完成:
+-----------+
| 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)发生时:
MRET / SRET 恢复。| 位段 | 名称 | 含义 |
|---|---|---|
| MPP[12:11] | Machine Previous Privilege | 保存陷入前的模式 |
| MPIE | Machine Previous Interrupt Enable | 保存中断使能状态 |
| MIE | Machine Interrupt Enable | 当前中断使能 |
| SPP | Supervisor Previous Privilege | 同理(S 模式) |
| FS/XS | 浮点/扩展状态 | 控制上下文保存 |
在嵌入式系统中(如 RV32IMAC 核心):
mstatus、mtvec、mie 仍然存在。📘 这种实现称为 “Machine-only System”, 常见于 MCU(如平头哥 C906/C908 低配版、SiFive E 系列)。
在更复杂的处理器中(如 Linux 虚拟化环境)还会增加:
| 模式 | 缩写 | 功能 |
|---|---|---|
| H 模式 | Hypervisor Mode | 虚拟机监控层(S 模式之上) |
形成:
M → H → S → U
目前主要在 RV64 Linux 平台(如 QEMU 或 K230 芯片)使用。
| 模式 | 功能定位 | 可访问资源 | 返回指令 |
|---|---|---|---|
| U 模式 | 用户程序 | 受限寄存器、内存 | — |
| S 模式 | 操作系统 | 页表、中断控制、系统调用 | SRET |
| M 模式 | 硬件与固件 | 全部硬件资源、CSR | MRET |
🔑 一句话总结: RISC-V 的特权模式构成了系统从硬件 → 内核 → 用户的完整安全层次。