计算机体系结构 E03:硬件虚拟化与嵌套翻译
计算机体系结构 E03:硬件虚拟化与嵌套翻译
核心问题
虚拟机里的虚拟地址怎样到达宿主物理内存?两阶段翻译先把 guest virtual address 转为 guest physical address,再由 G-stage 转为 supervisor physical address。任一阶段失败都应保留故障来源,TLB miss 本身则不等于 VM exit。
范围与证据等级
证据等级为功能执行。模型只用两个字典表示 VS-stage 与 G-stage 映射,不实现 Sv39x4 页表布局、真实 CSR、page walk、TLB、trap entry 或 shootdown。因此它不是 RISC-V H 扩展合规测试。
规范中的两阶段翻译还要求 VS 页表遍历访问本身经过 G-stage。当前模型只保留“两个阶段都必须成功”以及故障归属,不模拟遍历产生的全部内存访问。
核心案例:同一个缺页词不能抹平两个阶段
映射案例把 GVA 0x1020 先译为 GPA 0x8020,再译为 SPA 0x18020。题设中 VS-stage 缺页委托给 guest,不产生 VM exit;VS 写权限失败设为不委托,会退出;G-stage 缺页和执行权限失败都进入宿主侧处理并标记 VM exit。
这里的委托策略是模型输入,不是“所有 VS fault 都不退出”的架构定律。真实实现要结合 delegation CSR、当前特权状态和异常类型判断。
模式:每层翻译保留自己的输入与故障
1 | |
嵌套页表、IOMMU 二次翻译和容器地址映射分析都能复用这一做法。把中间地址抹掉后,故障归因与权限边界会一起丢失。
验收结果
本批实际运行按页偏移的 VS/G 两阶段查表,覆盖映射到 0x18020、VS 缺页、VS 写权限拒绝、G 缺页和 G 执行权限拒绝五种情况。题设中 VS 故障是否退出取决于委托输入,G 故障进入宿主;断言不成立则命令非零退出。输出保留 hardware_compliance=false,没有硬件虚拟化测量。
模式速查
| 事件 | 首先检查 | 不能直接等同 |
|---|---|---|
| TLB miss | 缓存的翻译缺失 | VM exit |
| VS-stage fault | guest 映射与权限 | G-stage fault |
| G-stage fault | GPA 到 SPA 的映射 | 普通 guest 缺页 |






