首页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 → 0

PA 由命中的 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
1...
...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 拆分PTEsatp.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 和返回路径。

学习 Page Fault Trap