Skip to content

Commit e63078f

Browse files
authored
Update 3sv39-implementation-1.rst
1 parent c00c2df commit e63078f

File tree

1 file changed

+2
-2
lines changed

1 file changed

+2
-2
lines changed

source/chapter4/3sv39-implementation-1.rst

Lines changed: 2 additions & 2 deletions
Original file line numberDiff line numberDiff line change
@@ -307,7 +307,7 @@ SV39 多级页表的硬件机制
307307

308308
- 当 ``V`` 为 0 的时候,代表当前指针是一个空指针,无法走向下一级节点,即该页表项对应的虚拟地址范围是无效的;
309309
- 只有当 ``V`` 为1 且 ``R/W/X`` 均为 0 时,表示是一个合法的页目录表项,其包含的指针会指向下一级的页表;
310-
- 注意: 当``V`` 为1 且 ``R/W/X`` 不全为 0 时,表示是一个合法的页表项,其包含了虚地址对应的物理页号。
310+
- 注意: 当 ``V`` 为1 且 ``R/W/X`` 不全为 0 时,表示是一个合法的页表项,其包含了虚地址对应的物理页号。
311311

312312
在这里我们给出 SV39 中的 ``R/W/X`` 组合的含义:
313313

@@ -384,4 +384,4 @@ SV39 地址转换过程
384384

385385
但如果修改了 `satp` 寄存器,说明内核切换到了一个与先前映射方式完全不同的页表。此时快表里面存储的映射已经失效了,这种情况下内核要在修改 `satp` 的指令后面马上使用 `sfence.vma` 指令刷新清空整个 TLB。
386386

387-
同样,我们手动修改一个页表项之后,也修改了映射,但 TLB 并不会自动刷新清空,我们也需要使用 `sfence.vma` 指令刷新整个 TLB。注:可以在 `sfence.vma` 指令后面加上一个虚拟地址,这样 `sfence.vma` 只会刷新TLB中关于这个虚拟地址的单个映射项。
387+
同样,我们手动修改一个页表项之后,也修改了映射,但 TLB 并不会自动刷新清空,我们也需要使用 `sfence.vma` 指令刷新整个 TLB。注:可以在 `sfence.vma` 指令后面加上一个虚拟地址,这样 `sfence.vma` 只会刷新TLB中关于这个虚拟地址的单个映射项。

0 commit comments

Comments
 (0)