RISC-V手册 第十章 RISC-V特权架构
10.1 导言 到目前为止,本书主要关注RISC-V 对通用计算的支持:我们引入的所有指令都在用户模式(User mode 应用程序的代码在此模式下运行)下可用。本章介绍两种新的权限模式:运行最可信的代码的机器模式(machine mode),以及为Linux,FreeBSD 和Windows 等操作系统提供支持的监管者模式(supervisor mode)。 图10.1是RISC-V 特权指令的图形表示,图10.2列出了这些指令的操作码。显然,特权架构添加的指令非常少。作为替代,几个新的控制状态寄存器(CSR)显示了附加的功能。 10.2 简单嵌入式系统的机器模式 机器模式(缩写为M模式, M-mode)是 RISC-V中(hart hardware thread,硬件线程)可以执行的最高权限模式。程)可以执行的最高权限模式。在M模式下运行的hart对内存,I/O和一些对于启动和配置系统来说必要的底层功能有着完全的使用权。因此它是唯一所有标准RISC-V处理器都必须实现的权限模式。实际上简单的 RISC-V微控制器仅支持 M模式。 机器模式最重要的特性是拦截和处理异常的能力。RISC-V将异常分为两类。一类是同步异常。另一类是中断,它是与指令流异步的外部事件,比如鼠标的单击。 在 M模式运行期间可能发生的同步异常有五种: 访问错误异常:当物理内存的地址不支持访问类型时发生(例如尝试写入 ROM)。 断点异常:在执行 ebreak指令,或者地址或数据与调试触发器匹配时发生。 环境调用异常:在执行 ecall指令时发生。 非法指令异常:在译码阶段发现无效操作码时发生。 非对齐地址异常:在有效地址不能被访问大小整除时发生,例如地址为0x12的amoadd.w。 有三种标准的中断源:软件、时钟和外部来源。软件中断通过向内存映射寄存器中存数来触发。 10.3 机器模式下的异常处理 八个控制状态寄存器(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) 它保存全局中断使能,以及许多其他的状态,如图10....