首页RISC-V MMU
RISC-V 虚拟地址翻译可视化
Sv39XLEN 643 levels64-bit PTE
翻译模式
页表预设
演示边界
本页不是完整 MMU 或操作系统页表实现,只演示 VA 规范性检查与拆分、PTE V/R/W/X/A/D 判定、leaf/non-leaf 路径、superpage 对齐和 PA 组合;未建模完整 S/U 特权级访问规则、SUM/MXR、A/D 位自动更新的原子细节、页表访问和最终物理访问的 PMA/PMP 检查、两阶段虚拟化、异常优先级、SFENCE.VMA/SINVAL 顺序与失效,或实现相关行为。
当前模式基础信息
VA[38:0] =VPN[2]9VPN[1]9VPN[0]9offset12
VPN 字段用于逐级索引页表;offset 是 4 KiB 页内偏移。Sv39 还要求 VA 高位必须是 bit 38 的符号扩展。
动画演示一次可选访问类型的页表 walk;SUM/MXR、A/D 位自动更新的实现细节和保留位细节先不展开。
VA
39 bits
PA
56 bits
offset
12 bits
每级
512 PTEs
satp.MODE
8
页表 walk 步骤1 / 9parse
VA → PA
bit 63 → 0PA 由命中的 leaf PTE 字段和 VA 字段拼接而成。PA = 0x000000002601189a
parse
L2
VA = VPN[...] | offset
VA
0x000000123456789a
sign [63:39]
VPN[2] [38:30]
VPN[1] [29:21]
VPN[0] [20:12]
offset [11:0]
0
63
0
0
0
0
0
0
0
56
0
0
0
0
0
0
0
0
48
0
0
0
0
0
0
0
0
40
0
0
0
1
0
0
1
0
32
0
0
1
1
0
1
0
0
24
0
1
0
1
0
1
1
0
16
0
1
1
1
1
0
0
0
8
1
0
0
1
1
0
1
0
0
VA.VPN -> PTE 下标路径
VPN 负责逐级索引页表;最后由 leaf PTE.PPN 和 VA offset 直接组合 PA
VPN 负责逐级索引页表;最后由 leaf PTE.PPN 和 VA offset 直接组合 PA
PA[55:12]
不是 PA.PPN 位
L2
table[512]
VPN[2]
satp.PPN << 12 = 0x000014000000
0...511
PA
0
63
0
0
0
0
0
0
0
56
0
0
0
0
0
0
0
0
48
0
0
0
0
0
0
0
0
40
0
0
0
0
0
0
0
0
32
0
0
0
0
0
0
0
0
24
0
0
0
0
0
0
0
0
16
0
0
0
0
0
0
0
0
8
0
0
0
0
0
0
0
0
0
入门读法
先看 VA 怎么拆
程序给出虚拟地址,MMU 先拆成 VPN 字段和 offset。VPN 用来逐级找页表,offset 会保留到最后的物理地址低位。
再看 PTE 决定去哪里
每一级索引都会读出一个 PTE。无效项会页故障;非叶子项指向下一级页表;叶子项给出物理页号和访问权限。
最后看 PA 还是页故障
找到合法叶子 PTE 后会组合出 PA;如果地址形式、PTE、权限或 superpage 对齐不满足规则,walk 会停在对应的故障步骤。
分页模式结构对比
按当前动画模型展示| 模式 | 虚拟地址 | 物理地址 | 页表层级 | VPN 拆分 | PTE | satp.MODE |
|---|---|---|---|---|---|---|
Sv32 XLEN 32 | 32 bits 完整 RV32 VA | 34 bits | 2 级 根层级 L1 | VPN[1] 10VPN[0] 10off 12 | 32-bit 1024 项/级,基础页 4 KiB | 1 |
Sv39 XLEN 64 | 39 bits 高位符号扩展 bit 38 | 56 bits | 3 级 根层级 L2 | VPN[2] 9VPN[1] 9VPN[0] 9off 12 | 64-bit 512 项/级,基础页 4 KiB | 8 |
Sv48 XLEN 64 | 48 bits 高位符号扩展 bit 47 | 56 bits | 4 级 根层级 L3 | VPN[3] 9VPN[2] 9VPN[1] 9VPN[0] 9off 12 | 64-bit 512 项/级,基础页 4 KiB | 9 |
Sv57 XLEN 64 | 57 bits 高位符号扩展 bit 56 | 56 bits | 5 级 根层级 L4 | VPN[4] 9VPN[3] 9VPN[2] 9VPN[1] 9VPN[0] 9off 12 | 64-bit 512 项/级,基础页 4 KiB | 10 |
页故障之后发生什么?
页表 walk 停在 page fault 后,处理流程会进入特权架构的 trap entry、CSR 写入、handler 和返回路径。