特权级

risc-v目前的特权等级及编码:

Level Encoding Name Abbreviation(缩写)
0 00 User/Application U
1 01 Supervisor S
3 11 Machine M
  • User:运行用户程序
  • Supervisor:运行操作系统内核(设备驱动)
  • Machine:运行bootloader

一般情况下,处理器一直在某个特权等级下运行,除非进入**trap(中断)**才有可能发生特权等级的转换。risc-v没有要求所有的处理均实现这三种特权等级,其中Machine是必须实现的,剩下的模式则可以根据处理器对于自身功能定位和成本等考虑选择实现。

上电时工作模式切换

上电后(reset),RISC-V架构规定,特权模式复位称为机器模式,机器模式可以通过指令mret转换称为用户模式。

mret

当中断(异常)处理完成后,程序是需要回到之前的主程序中的,risc-v中定义了一组退出指令mret(机器模式)、sret、uret。高等级模式(越接近机器越高级)可用执行低等级的指令,m模式下可以执行mret、sret、uret。

在m模式下退出时,必须通过mret,risc-v架构规定,处理器执行完mret指令后,硬件行为如下:

  • 停止执行当前程序流,转而从csr寄存器mpec定义的pc地址开始执行
  • 执行mret指令不仅会让处理器跳转到上述的pc地址开始执行,还会让硬件同时更新csr寄存器机器模式状态寄存器mstatus。mstatus寄存器MIE域被更新为当前MPIE的值。MPIE 域的值则更新为1