RISC-V 虚拟化/H 扩展 语境 VTW 和 VTVM,它们都在 hstatus 里,是 mstatus 中 TW / TVM 的"虚拟化版本",只对 VS-mode 生效 ,触发的是 Virtual Instruction Exception(不是 Illegal Instruction)。
1. VTW ------ Virtual Timeout Wait
- 位置:
hstatus[21] - 对应:
mstatus.TW - 含义:VS-mode 执行
WFI时是否陷到 HS-modeVTW=0:WFI 正常执行(除非mstatus.TW=1)VTW=1:VS-mode 执行 WFI,在"实现定义的一段时间"后仍未唤醒 → 触发 虚拟指令异常
- 用途:Hypervisor 不想让 guest OS 用 WFI 真的睡死,或想自己调度 vCPU
行为矩阵(简化):
| mstatus.TW | hstatus.VTW | VS-mode WFI |
|---|---|---|
| 0 | 0 | 正常等待 |
| 0 | 1 | 超时后 Trap(V) |
| 1 | x | Trap(I) |
2. VTVM ------ Virtual Trap Virtual Memory
- 位置:
hstatus[20] - 对应:
mstatus.TVM - 含义:VS-mode 访问"会影响地址翻译/页表切换"的指令或 CSR 时是否陷到 HS-mode
VTVM=1:- 执行
SFENCE.VMA - 执行
SINVAL.VMA - 直接访问
satp(实际访问的是vsatp)
→ 触发 虚拟指令异常
- 执行
VTVM=0:guest 自己改 vsatp / flush TLB,不陷出
- 用途:Hypervisor 想拦截 guest 的页表切换,做:
- 影子页表
- 两阶段地址翻译管理
- TLB 广播 / DVM 同步
注意:
VTVM不管:
HFENCE.VVMASFENCE.W.INVALSFENCE.INVAL.IR
这些由别的机制/扩展管。
3. 和 mstatus 的对照
| mstatus | hstatus | 作用模式 | 异常类型 |
|---|---|---|---|
| TSR | VTSR | VS-mode 执行 SRET | Virtual Instruction |
| TW | VTW | VS-mode 执行 WFI | Virtual Instruction |
| TVM | VTVM | VS-mode 改 satp / sfence.vma | Virtual Instruction |
一句话:
**VTW = 拦 guest 的 WFI;VTVM = 拦 guest 的 satp / TLB flush。**
都是"让 Hypervisor 代替 guest 管低特权资源"。