首页
学习
活动
专区
圈层
工具
发布
社区首页 >问答首页 >多级页表如何实际节省空间

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

Stack Overflow用户
提问于 2020-01-20 04:18:56
回答 2查看 1.3K关注 0票数 0

我一直在研究为什么多层页面表会节省空间,我想我有点不明白页面表本身是如何工作的。我从康奈尔找到了下面的内容

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

据我理解,每个过程都有自己的页面表。这是否意味着每个进程都有4GB的虚拟地址空间?虚拟地址空间这么大的意义是什么?为什么不根据需要分配虚拟页面呢?是因为操作系统想要在单词大小中创建所有可能的地址来映射到虚拟页面吗?为什么不直接阻止程序取消对页表的有效索引的任何虚拟页码呢?

我已经读过,多级页面表的优点之一是它不为没有使用的虚拟页面设置页面表条目,从而节省了空间。见下文卡内基梅隆:

但是,为什么不只是有一个具有连续条目的单层页面表--为什么流程需要PT1,2,然后跳到8呢?为什么要这么做?即使是这样,为什么所有落后的,未使用的PTE存在?为什么不剪短页表呢?

EN

回答 2

Stack Overflow用户

发布于 2021-06-09 07:31:21

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

显然,我们不希望在主内存中连续地分配页面表。这个问题的一个简单解决方案是将页面表分成更小的部分。我们可以通过几种方式完成这一分工。一种方法是使用两级分页算法,其中页表本身也被分页。例如,再次考虑具有32位逻辑地址空间和页大小为4KB的系统。逻辑地址被划分为由20位组成的页码和由12位组成的页偏移。因为我们分页到页面表,所以页面号进一步分为10位页号和10位页偏移量。两级分页

-Silberschatz A.,Galvin P.B.

因此,对于上述情况,我们将使用2^10 * 4B= 4KB作为外部页(p1),而仅使用N* 2^10 *4B=N* 4KB的内页表,其中N是进程所需的页面数,其总数小于非水平页表(4MB)所需的空间。

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

票数 0
EN

Stack Overflow用户

发布于 2022-01-01 18:53:10

这节省了内存(“空间”一词不够具体),因为当使用两层页表而不是一层页表时,1级页表要小得多。我们只需将1级页表保存在内存中,并将一些2级页表分页到磁盘。

您可以观看这个YouTube视频来了解页表和多级页表的大小。

票数 0
EN
页面原文内容由Stack Overflow提供。腾讯云小微IT领域专用引擎提供翻译支持
原文链接:

https://stackoverflow.com/questions/59816941

复制
相关文章

相似问题

领券
问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档