load page fault cause 13

RISC-V Page Fault 示例动画

load 指令 -> Sv39 walk/权限检查 -> cause 13 + xtval -> handler 修复/拒绝 -> 重试或终止

Step 1 / 4
流程PC 是 load 指令地址;VA 是这条 load 访问的数据虚拟地址。scause / stval
Load
Trap entry
Handler
xRET
Page Fault Trap 分层流程图
按 U/S/M 特权级分层展示 page fault 的跳转路径;节点只展示 trap 路由、handler 和重试路径。
scause/stval · sret
当前步骤1/4

load 指令与访问地址PC 0x0000000000011048 / VA 0x0000004000a130

U-mode 指令

用户态执行一条 load,虚拟地址进入地址翻译和权限检查。 satp 提供页表上下文;访问类型是 load。 page fault 是翻译或保护检查失败的结果,不是一条单独指令。

本页只跟踪 load page fault 示例。

U-mode
1U-mode
load PC 与访问 VA
PC/VAPC 是触发异常的 load 指令地址,写入 EPC;VA 是访问失败的数据虚拟地址,可由信息性 tval 报告。
用户态在 PC 0x0000000000011048 执行 ld a0, 0(a1);该 load 访问 VA 0x0000004000a130,随后 VA 进入翻译和权限检查。
重试 load
PC=0x0000000000011048
S-mode
->
hart 将触发异常的 load 指令地址写入 sepc,将 13 写入 scause 记录这次 load page fault;本示例按信息性 stval 显示访问失败的虚拟地址,然后让 PC 跳到 stvec.BASE。
2Trap entry
S-mode trap entry
BASE当前入口是 stvec.BASE。medeleg[13] 选择 S-mode 目标;委托改变目标特权级和 CSR 名称,不改变 cause=13。
硬件写 sepc=load PC、scause=13;本示例按信息性 stval 显示 fault VA,再跳到 stvec.BASE。
->
3Handler
handler 修复映射
PTE修复路径强调 page fault 与 ECALL 的差异:handler 通常不把 EPC 加到下一条,而是让原访存指令重试。
OS handler 读取 cause、EPC 和可用的 tval 信息,修复 PTE。EPC 仍指向原 load。
->
4Trap return
Trap return 恢复 U-mode
retryEPC 仍是 faulting load 的 PC;返回后不是跳过 faulting load,而是重做同一条访存。
SRET 将 PC 设为 EPC 保存的原 load PC(0x0000000000011048),并按返回状态恢复特权级。
M-mode
读图重点

SRET 从 EPC 取回原 load PC;这和 ECALL 常见的 EPC +4 不同,修复后的 page fault 通常重试同一条访存。

关键说明

Page fault 容易混淆的边界

virtual-memory

page fault 的来源在地址翻译和 PTE 检查;继续看虚拟地址翻译页面可观察 VA 拆分、PTE、superpage 和 PA 组合。

EPC

修复成功时 EPC 通常保留 faulting load 的 PC,用来重试同一条访存。

medeleg[13]

medeleg[13] 改变 trap 目标,不改变 load page fault 的 cause=13。

官方语义边界

真实 page fault 分为 instruction page fault(cause 12)、load page fault(cause 13)和 store/AMO page fault(cause 15);本页只固定 load page fault cause 13 的 trap 处理路径。具体 fault 由地址翻译、PTE 有效性/保留位、权限、U/SUM/MXR、A/D 规则、superpage 对齐、访问类型和当前特权状态共同决定。