RISC-V h拓展

https://tinylab.org/riscv-kvm-virt-mode-switch/

https://tinylab.org/riscv-kvm-virt-trap/

特权模式

指令集中约定用虚拟化模式 V (virtualization mode) 来标记当前是否是在 Guest 系统中运行。V=1 表示当前确实运行在 Guest 系统中,V=0 则表示不运行在 Guest 中。

V 虚拟化(H-Level Arch.) V 虚拟化特例 名义特权级 运行的程序
1 VU-mode 0 U-mode U-0 Guest OS的应用程序
1 VS-mode S-1 Guest OS
0 HS-mode 0 HS-mode S-1 宿主OS / Hypervisor
0 M-mode 0 M-mode M-3 opensbi

在上述表格中,虚拟化特例指 hart 所指示的应用程序以 U-mode 直接运行在一个运行于 HS-mode 的 OS 上。

名义特权级(Nominal Privilege)是在 S-mode 基础上的特权级约定,分为 U, S, M 三级,分别用 0,1,3 表示,各类指令集模拟器均以此标准实现。

相关CSR

mstatus寄存器

  • MIE、SIE:当前中断使能
  • SPIE、MPIE:(previous) 记录trap之前的中断使能
  • SPP、MPP:记录trap之前的特权级别
  • TSR(Trap SRet):拦截supervisor异常返回指令sret。TSR=1,在S-mode下支持sret会导致illegal instruction exception。TSR=0,则允许S-mode下执行sret。

hstatus寄存器

  • SPV(supervisor previous Virtualization):sstatus.SPP 在 trap 时会被设置为 trap 对应的名义特权级,此时 hstatus.SPV 就会被设置为 trap 时的 V 值;当 V=0 时执行 sret 指令,SPV 置为 V。
  • SPVP (Supervisor Previous Virtual Privilege):V=1 时,行为与 sstatus.SPP 相同,即置为 trap 时的名义特权级;V=0 时,保持不变。
  • GVA (Guest Virtual Address):trap 到 HS-mode 时写入:对于写虚拟地址到 stval 的寄存器的 trap(breakpoint, address misaligned, access fault, page fault, or guest-page fault),hstatus.GVA 置 1,对于其他 trap 置 0。

sstatus

sstatus 是 mstatus 的一个子集。

  • SPP:用于标识 trap 进入 S-mode 之前 hart 所在的特权级:来自 U-mode 则置 0,否则为 1。
  • trap 处理过程中 sstatus 的行为
    trap to S-mode: SPIE=SIE, SIE=0
    sret: SIE=SPIE, SPIE=1

vsstatus

和sstauts一样。

V=1 时,vsstatus 用于替代 sstatus,所以通常针对 sstatus 的操作会替换为 vsstatus。

中断处理流程

中断委托

从上图可知,正常情况下 trap 都会导致 hart 的控制转移至 M-mode,处理之后通过 mret 指令返回到原来的模式。

特殊情况下 trap 会经由 mdeleg 或 mideleg 委派从 HS-mode 或 VS-mode 转移至 HS-mode,或再经由 hedeleg 或 hideleg 委派从 VU-mode 转移至 VS-mode。

被委派至 HS-mode 和 VS-mode 的 trap 在处理完毕后,将通过 sret 指令返回至 trap 之前的模式。

相关推荐
右耳朵猫AI1 天前
Python周刊2026W36 | Python 3.15候选版、RISC-V获CPython支持、PEP 843、asyncio修复
python·sqlite·risc-v
hongmai6668885 天前
ESP32-WROVER-IE-N4R8:外接天线+8MB内存,专治信号焦虑
笔记·单片机·嵌入式硬件·microsoft·risc-v
花 满 楼6 天前
RISC-V APLIC 中断模块总结——第二篇
单片机·嵌入式硬件·mcu·risc-v
论迹复利7 天前
FreeRTOS 在 RISC-V 上是如何“点火“的 —— 从 main() 到第一个任务的完整链路
java·开发语言·risc-v
花 满 楼7 天前
RISC-V APLIC 中断模块总结——第一篇
mcu·risc-v·中断·aplic
国科安芯8 天前
小卫星综合电子系统中功能安全与抗辐射加固的协同设计研究
嵌入式硬件·安全·架构·risc-v·抗辐射·小卫星·综合电子系统
国科安芯13 天前
小卫星综合电子系统中RISC-V抗辐射MCU的功能安全与多接口集成架构分析
单片机·嵌入式硬件·安全·fpga开发·架构·risc-v
论迹复利13 天前
PendSV与RISC-V trap——上下文切换的两种设计哲学
内核·freertos·risc-v
hongmai66688815 天前
竖插专用:ESP8684-WROOM-07-H2X模组上手记录
笔记·单片机·嵌入式硬件·物联网·risc-v
dozenyaoyida16 天前
LittleFS 嵌入式文件系统机制拆解与某 RISC-V MCU 实测配置
单片机·嵌入式·文件系统·risc-v·littlefs·flash存储