Skip to content
Merged
Changes from all commits
Commits
File filter

Filter by extension

Filter by extension

Conversations
Failed to load comments.
Loading
Jump to
Jump to file
Failed to load files.
Loading
Diff view
Diff view
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
Loading