计算机体系结构 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 0x1000 先译为 GPA 0x8000,再译为 SPA 0x18000。VS-stage 缺页或权限失败在本题设中委托给 guest,不产生 VM exit;G-stage guest-page fault 则进入宿主侧处理并标记 VM exit。
这里的委托策略是模型输入,不是“所有 VS fault 都不退出”的架构定律。真实实现要结合 delegation CSR、当前特权状态和异常类型判断。
模式:每层翻译保留自己的输入与故障
1 | |
嵌套页表、IOMMU 二次翻译和容器地址映射分析都能复用这一做法。把中间地址抹掉后,故障归因与权限边界会一起丢失。
验收结果
本批脚本退出 0,覆盖成功映射、VS-stage fault 和 G-stage guest-page fault 三种情况。输出显式保留 hardware_compliance=false,没有硬件虚拟化测量。
模式速查
| 事件 | 首先检查 | 不能直接等同 |
|---|---|---|
| TLB miss | 缓存的翻译缺失 | VM exit |
| VS-stage fault | guest 映射与权限 | G-stage fault |
| G-stage fault | GPA 到 SPA 的映射 | 普通 guest 缺页 |
一手参考资料
All articles on this blog are licensed under CC BY-NC-SA 4.0 unless otherwise stated.





