SFENCE.VMA 会刷新所有 hart 的 TLB 吗?
不会。官方语义作用于当前 hart;多 hart 系统必须让其它 hart 执行相应地址转换同步序列。
Supervisor 地址转换栅栏:按 rs1 选择虚拟地址范围、按 rs2 选择 ASID 范围,同步本 hart 页表更新与后续隐式地址转换。
SFENCE.VMA 同步当前 hart 对内存管理数据结构的显式更新与后续隐式地址转换。rs1=x0 表示所有虚拟地址,否则 rs1 中的值选择一个虚拟地址;rs2=x0 表示所有 ASID 并包含 global mappings,否则 rs2 中的值选择一个 ASID 且不要求排序 global mappings。实现允许执行比请求范围更宽的 fence。该指令只作用于本 hart;其它 hart 的地址转换同步需要让对应 hart 执行自己的同步序列。它不是数据 cache 或指令 cache 刷新指令。
展示 R-type SYSTEM 编码、rs1/rs2 选择的 VA/ASID 范围,以及本 hart 地址转换相关的排序效果。
该动画只展示本 hart 的地址转换相关排序/失效观察语义;不模拟 TLB 结构、cache、页表遍历耗时或多 hart shootdown 协议。
SFENCE.VMA 不是普通内存 fence,也不是可移植的 TLB 结构模拟。它让本 hart 后续隐式地址转换按所选 VA/ASID 范围观察到此前页表等内存管理数据结构更新;rs2=x0 包含 global mappings,非 x0 ASID 范围不要求包含 global mappings。
结合 «sfence.vma x0, x0 # Fence all VA/ASID translations on this hart» 等实际代码理解该场景。
结合 «sfence.vma x0, x0 # Fence all VA/ASID translations on this hart» 等实际代码理解该场景。
结合 «sfence.vma x0, x0 # Fence all VA/ASID translations on this hart» 等实际代码理解该场景。
不会。官方语义作用于当前 hart;多 hart 系统必须让其它 hart 执行相应地址转换同步序列。
rs1 选择虚拟地址范围,x0 表示所有虚拟地址;rs2 选择 ASID 范围,x0 表示所有 ASID 并包含 global mappings,非 x0 时不要求排序 global mappings。