RISC-V¶
RV32/64 特权架构¶
与特权级无关的一般的指令和通用寄存器 x0
~ x31
在任何特权级都可以执行。
机器模式(M 模式,M-mode)
- 是 RISC-V 中 hart(hardware thread,硬件线程)可以执行的最高权限模式。
- 唯一所有标准 RISC-V 处理器都必须实现的权限模式
RISC-V 将异常分为两类:
- 一类是同步异常,这类异常在指令执行期间产生,如 访问了无效的存储器地址 或 执行了具有无效操作码的指令时。
- 另一类是中断,它是与指令流异步的外部事件,比如鼠标的单击。
精确例外:保证异常之前的所有指令都完整地执行了,而后续的指令都没有开始执行(或等同于没有执行)
触发精确例外的原因: - 访问错误异常 - 断点异常 - 环境调用异常 - 非法指令异常 - 非对齐地址异常
机器模式下的异常处理
八个控制状态寄存器(CSR)是机器模式下异常处理的必要部分:
- mtvec(Machine Trap Vector)它保存发生异常时处理器需要跳转到的地址。
- mepc(Machine Exception PC)它指向发生异常的指令。
- mcause(Machine Exception Cause)它指示发生异常的种类。
- mie(Machine Interrupt Enable)它指出处理器目前能处理和必须忽略的中断。
- mip(Machine Interrupt Pending)它列出目前正准备处理的中断。
- mtval(Machine Trap Value)它保存了陷入(trap)的附加信息:地址例外中出错的地址、发生非法指令例外的指令本身,对于其他异常,它的值为 0。
- mscratch(Machine Scratch)它暂时存放一个字大小的数据。
- mstatus(Machine Status)它保存全局中断使能,以及许多其他的状态,
用户模式(U 模式)
- 禁止不可信的代码执行特权指令和访问特权控制状态寄存器,这种模式拒绝使用这些功能,并在尝试执行 M 模式指令或访问 CSR 的时候产生非法指令异常。
- 其他时候,U 模式和 M 模式的表现十分相似
现代操作系统的监管者模式(S 模式)
这是一种可选的权限模式
S 模式比 U 模式权限更高,但比 M 模式低。
与 U 模式一样,S 模式下运行的软件不能使用 M 模式的 CSR 和指令,并且受到 PMP 的限制。