Skip to content

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 的限制。