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

RISC-V SINVAL.VMA 指令详解

指令手册SYSTEM R-type

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

指令语法

sinval.vma rs1, rs2
操作数说明
rs1:x0 选择所有虚拟地址;其他整数寄存器提供虚拟地址,只要求失效对应 leaf PTE 转换。
rs2:x0 选择全部地址空间并包含 global mappings;其他寄存器提供 ASID,排除 global mappings。rd 固定为 x0,无通用寄存器写回。
确认 Svinval 可用且特权允许:U 为 illegal-instruction,VU 为 virtual-instruction;S/HS 受 TVM、VS 受 VTVM 约束。
只失效当前 hart 的地址转换缓存;拆分序列的前后排序由 SFENCE.W.INVAL 与 SFENCE.INVAL.IR 建立。
Svinval内存管理

指令行为说明

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
privilege
HS: 允许执行
invalidate
当前 S/HS 转换上下文;a0(x10)=0x0000000040001000 (仅 leaf PTE); a1(x11)=3,不要求包含 global mappings
sequence
SFENCE.W.INVAL -> SINVAL.VMA... -> SFENCE.INVAL.IR

假定 Svinval 可用;HS/VS/VU 分支假定 H。假定 RV32/Sv32 或 RV64/Sv39 且 ASIDLEN=ASIDMAX (9/16),ASID 高位忽略,软件应将其置零。VS-mode 限于当前 hgatp.VMID 的 VS-stage;V=0 使用 S/HS 转换上下文。非 x0 的 rs1 仅选择 leaf PTE;值为零不同于寄存器 x0。有效虚拟地址复选框提供语义前提。实现允许扩大失效范围。

该动画只展示特权架构定义的本 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。
rs1≠x0 时仅要求失效该虚拟地址对应的 leaf PTE 转换;rs2≠x0 时使用其 ASID,排除 global mappings。非 x0 寄存器内的零值不具有 x0 的通配含义。
rs1 中无效虚拟地址不产生效果或异常;ASID 的未实现位与高位由实现忽略,软件应将高位置零。实现允许扩大失效范围。VS-mode 的范围限于当前 hgatp.VMID 的 VS-stage;V=0 使用 S/HS 转换上下文。
Svinval 必须可用。U/VU、S/HS 的 TVM 和 VS 的 VTVM 异常条件如误区所列;该失效作用于当前 hart。

常见使用场景

内存管理

假定 Svinval 可用、S-mode 且 TVM=0;sinval.vma x0,x0 失效当前 hart 全部地址空间的地址转换缓存,包括 global mappings。需要完整拆分序列排序时,前置 SFENCE.W.INVAL、后置 SFENCE.INVAL.IR。

Svinval 序列

假定 Svinval 可用、S-mode 且 TVM=0;sinval.vma x0,x0 失效当前 hart 全部地址空间的地址转换缓存,包括 global mappings。需要完整拆分序列排序时,前置 SFENCE.W.INVAL、后置 SFENCE.INVAL.IR。

使用前检查清单

语法检查
  • rs1:x0 选择所有虚拟地址;其他整数寄存器提供虚拟地址,只要求失效对应 leaf PTE 转换。
  • rs2:x0 选择全部地址空间并包含 global mappings;其他寄存器提供 ASID,排除 global mappings。rd 固定为 x0,无通用寄存器写回。
语义检查
  • 确认 Svinval 可用且特权允许:U 为 illegal-instruction,VU 为 virtual-instruction;S/HS 受 TVM、VS 受 VTVM 约束。
  • 只失效当前 hart 的地址转换缓存;拆分序列的前后排序由 SFENCE.W.INVAL 与 SFENCE.INVAL.IR 建立。

容易混淆 / 常见误区

在 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。