首页/指令库/SINVAL-VMA
SINVAL.VMA

RISC-V SINVAL.VMA 指令详解

指令手册R-type

Svinval 地址转换失效指令:按 rs1 的虚拟地址和 rs2 的地址空间选择范围,使对应地址转换缓存条目失效。

指令语法

sinval.vma rs1, rs2
操作数说明
目标寄存器 rd:存放运算结果的通用寄存器。
源寄存器 rs1:第一个操作数寄存器。
源寄存器 rs2:第二个操作数寄存器。
PrivilegedSvinval内存管理

指令行为说明

SINVAL.VMA 是 Svinval 扩展中的监督者地址转换失效指令。它使与同一 rs1/rs2 操作数的 SFENCE.VMA 会影响的地址转换缓存条目失效;rs1=x0 表示所有虚拟地址,rs2=x0 表示所有地址空间并包含 global mappings。它本身执行失效,不替代普通数据 cache flush;拆分失效序列通常由 SFENCE.W.INVAL 建立前置排序,由一条或多条 SINVAL/HINVAL 执行失效,再由 SFENCE.INVAL.IR 建立后置排序。

SINVAL.VMA 指令解析与 Svinval 动画

展示 SYSTEM 编码、rs1/rs2 选择的 VA/ASID 范围,以及 Svinval 序列中的地址转换失效。

rs1
rs2
sinval.vma
,
31..25
24..20
19..15
14..12
11..7
6..0
0001011
funct7
01011
rs2/ASID
01010
rs1/VA
000
funct3
00000
rd=x0
1110011
SYSTEM
Svinval 序列状态
instruction
0x16B50073
opcode
1110011 -> SYSTEM
funct7
0001011 -> SINVAL.VMA
rs1
a0(x10) -> VA 0x0000000040001000
rs2
a1(x11) -> ASID 3; globals not required
invalidate
a0(x10)=0x0000000040001000; a1(x11)=3,不要求包含 global mappings
sequence
SFENCE.W.INVAL -> SINVAL.VMA... -> SFENCE.INVAL.IR

该动画只展示特权架构定义的本 hart 失效/排序关系;不模拟 TLB 结构、cache 刷新、页表遍历耗时、IPI 或 OS shootdown 协议。

快速理解与检索要点

SINVAL.VMA 的核心是“选择范围并失效”:rs1 选择虚拟地址范围,rs2 选择地址空间范围;排序边界由配套的 SFENCE.W.INVAL 与 SFENCE.INVAL.IR 表达。

rs1=x0 表示所有虚拟地址;rs2=x0 表示所有地址空间并包含 global mappings。
该指令失效地址转换缓存条目,不是普通数据 cache 刷新。
Svinval 拆分序列用于批量失效;不要把动画理解为具体 TLB entry walk。

常见使用场景

内存管理

结合 «sinval.vma x0, x0 # invalidate all address spaces, including global mappings» 等实际代码理解该场景。

Svinval 序列

结合 «sinval.vma x0, x0 # invalidate all address spaces, including global mappings» 等实际代码理解该场景。

使用前检查清单

语法检查
  • 确认当前指令格式为 R-type。
  • 确认操作数排列顺序与示例一致。
语义检查
  • 确认目标寄存器用途和调用约定兼容。
  • 确认该指令不是伪指令展开后的底层形式。

容易混淆 / 常见误区

在 U-mode 执行总是触发 illegal-instruction;在 VU-mode 执行会触发 virtual-instruction。
S-mode 或 HS-mode 中若 mstatus.TVM=1 会触发 illegal-instruction;VS-mode 中若 hstatus.VTVM=1 会触发 virtual-instruction。
rs1=x0 选择所有虚拟地址;rs2=x0 选择所有地址空间并包含 global mappings。
SINVAL.VMA 失效地址转换缓存条目;它不是普通数据 cache 刷新,也不是页表遍历模拟。
需要拆分 Svinval 序列排序时,在失效前使用 SFENCE.W.INVAL,在失效后使用 SFENCE.INVAL.IR。

常见问题

SINVAL.VMA 和 SFENCE.VMA 是什么关系?

SINVAL.VMA 使用与 SFENCE.VMA 相同的 rs1/rs2 范围选择来失效相应地址转换缓存条目,但拆分序列中的排序由 SFENCE.W.INVAL 与 SFENCE.INVAL.IR 提供。

rs2=x0 是否只表示 ASID 0?

不是。作为 SINVAL.VMA 的范围选择,rs2=x0 表示所有地址空间,并包含 global mappings。

它会刷新数据 cache 吗?

不能这样理解。官方语义是地址转换缓存失效与相关排序,不是普通数据 cache flush。