虚拟地址拆解
Sv32 / Sv39 / Sv48 / Sv57拆出各级 VPN 索引与 12 位页内偏移;可选输入根页表 PPN,计算首次访问的 PTE 物理地址。仅凭 VA 无法确定最终物理地址,本页不会模拟或伪造页表遍历。
输入自动识别:0x 十六进制、0b 二进制、无前缀十进制(例如 4096)。只接受完整非负整数,允许首尾空白;支持数字间单个下划线分组(如 0x0000_0001_0000_0000);不接受正负号、小数、指数、其他分隔符或裸十六进制。所有地址运算使用 BigInt,不截断溢出值。
示例:
VA 位域
| 字段 | VA 位范围 | 宽度 | 十六进制 | 十进制 | 二进制 |
|---|
根页表:首次 PTE 地址
可选计算输入 satp.PPN 字段值,不是完整 satp,也不是页表基址。基址 = PPN << 12;输入格式与 VA 相同。留空则只拆解 VA。
页表遍历
从根页表开始,用最高级 VPN 索引 PTE。读到 PTE 后看 V 与 R/W/X:任一非 0 即为叶子,遍历结束;全 0 则为非叶子,用其 PPN 作为下一级页表基址,层级减 1 继续。
大页(超级页)对照
叶子项出现在第 i 级即为大页,不需要额外标志位;页大小随层级指数增长,要求 PTE.PPN 的低位为 0,VA 中较低级的 VPN 变为页内偏移。
| 叶子层级 | 页大小 | 对齐要求(PTE 侧) | 页内偏移(VA 侧) |
|---|
PTE 地址 = 页表基址 + VPN[i] × PTE 字节数。它指向页表项本身,不是 VA 对应的数据地址。
V = 0、保留位置位、权限非法、A/D 位不满足,或已到末级仍需下探时,产生对应的页错误,而不是继续遍历。
图中的 offset 始终是 VA[11:0];大页的低位偏移则包含较低级 VPN。本页只做地址拆解与首个 PTE 地址算术,不读内存、不解码 PTE、不模拟完整遍历。