多级页表如何实际节省空间

时间:2020-01-20 04:18:56

标签: operating-system virtual-memory page-tables

我一直在尝试研究为什么多级页表可以节省空间,并且我对页表本身的工作方式有些困惑。我从Cornell找到了以下内容:

页表每页需要一个条目。假设虚拟和物理地址空间为4GB(2 ^ 32字节),页面大小为4kB(2 ^ 12字节),我们看到2 ^ 32字节的地址空间必须分成2 ^ 20页。

据我了解,每个进程都有自己的页表。这是否意味着每个进程都有4GB的虚拟地址空间?虚拟地址空间如此之大的意义是什么?为什么不根据需要分配虚拟页面?是因为OS希望将字大小的所有可能地址都映射到虚拟页面吗?为什么不只是阻止程序取消引用不是页表有效索引的任何虚拟页号呢?

我已经读到,多级页表的优点之一是它通过不包含未使用的虚拟页的页表项来节省空间。请参见卡内基·梅隆大学的以下文章:

enter image description here

但是为什么不仅仅拥有一个具有连续条目的单级页面表-为什么该过程需要PTE 1、2,然后跳到8?为什么允许那?即便如此,为什么还存在所有未使用的尾随PTE?为什么不缩短页表呢?

1 个答案:

答案 0 :(得分:0)

考虑一个具有 32 位逻辑地址空间的系统。如果 在这样的系统中页面大小是 4 KB (2^12),那么一个页表可能包含超过 100 万个条目 (2^20 = 2^32/2^12)。假设每个条目由 4 个字节组成, 每个进程可能需要多达 4 MB 的物理地址空间用于页表 一个人。

显然,我们不希望连续分配页表 主存储器。解决这个问题的一个简单方法是划分页表 成小块。我们可以通过多种方式完成这种划分。 一种方法是使用两级分页算法,其中页表 本身也是分页的。例如,再次考虑系统 32 位逻辑地址空间和 4 KB 页大小。逻辑地址是 分为由 20 位组成的页码和由页偏移量组成的 12 位。因为我们对页表进行分页,所以进一步划分了页码 成 10 位页号和 10 位页偏移量。 Faceted plot of pandas dataframe using ordered categories

--Silberschatz A., Galvin P.B.

因此对于上面提出的情况,我们将使用 2^10 * 4B = 4KB 作为外页 (p1) 并且仅使用 N * 2^10 * 4B= N * 4KB 的内页表,其中 N 是进程所需的页面,总共小于非分级页表所需的空间 (4MB)。

您还应该注意到,进程只占用所需的页数和内存,最大虚拟地址空间决定了给定系统配置(32/64 位地址空间)的进程的最大可寻址和可占用内存。

相关问题