Skip to content

Commit

Permalink
Merge pull request #221 from lewiszlw/patch-3
Browse files Browse the repository at this point in the history
Update 3sv39-implementation-1.rst
  • Loading branch information
wyfcyx authored Oct 15, 2024
2 parents ea80a82 + 5cb666c commit de8b320
Showing 1 changed file with 1 addition and 1 deletion.
2 changes: 1 addition & 1 deletion source/chapter4/3sv39-implementation-1.rst
Original file line number Diff line number Diff line change
Expand Up @@ -334,7 +334,7 @@ SV39 多级页表的硬件机制

在 SV39 中,如果使用了一级页索引就停下来,则它可以涵盖虚拟页号的高 :math:`9` 位为某一固定值的所有虚拟地址,对应于一个 :math:`1\text{GiB}` 的大页;如果使用了二级页索引就停下来,则它可以涵盖虚拟页号的高 :math:`18` 位为某一固定值的所有虚拟地址,对应于一个 :math:`2\text{MiB}` 的大页。以同样的视角,如果使用了所有三级页索引才停下来,它可以涵盖虚拟页号的高 :math:`27` 位为某一个固定值的所有虚拟地址,自然也就对应于一个大小为 :math:`4\text{KiB}` 的虚拟页面。

使用大页的优点在于,当地址空间的大块连续区域的访问权限均相同的时候,可以直接映射一个大页,从时间上避免了大量页表项的读写开销,从空间上降低了所需节点的数目。但是,从内存分配算法的角度,这需要内核支持从物理内存上分配三种不同大小的连续区域( :math:`4\text{KiB}` 或是另外两种大页),便不能使用更为简单的插槽式管理。权衡利弊之后,本书全程只会以 :math:`4\text{KiB}` 为单位进行页表映射而不会使用大页特性。
使用大页的优点在于,当地址空间的大块连续区域的访问权限均相同的时候,可以直接映射一个大页,从时间上避免了大量页表项的读写开销,从空间上降低了所需页表节点的数目。更为重要的是,使用大页可以显著减轻 TLB 的压力,提升 TLB 命中率,因为现在 TLB 中一个表项可以覆盖更大的内存空间了。这可以从整体上提高访存指令的执行速度,进而提升整体的 IPC 。但是,从内存分配算法的角度,这需要内核支持从物理内存上分配三种不同大小的连续区域( :math:`4\text{KiB}` 或是另外两种大页),便不能使用更为简单的插槽式管理。权衡利弊之后,本书全程只会以 :math:`4\text{KiB}` 为单位进行页表映射而不会使用大页特性。

那么 SV39 多级页表相比线性表到底能节省多少内存呢?这里直接给出结论:设某个应用地址空间实际用到的区域总大小为 :math:`S` 字节,则地址空间对应的多级页表消耗内存为 :math:`\frac{S}{512}` 左右。下面给出了详细分析,对此不感兴趣的同学可以直接跳过。

Expand Down

0 comments on commit de8b320

Please sign in to comment.