页面分页在Unix系统中如何工作?

问题描述 投票:0回答:1

我正在尝试学习“ Linux内核理解”这本书,但是我停在“常规分页”部分。现在,我了解了为什么需要分页,它的基本概念是什么,但是……我无法理解很多事情。为什么需要对表页进行分页?我不记得了吗?它是如何工作的?我的意思是,是的,一个表页面的大小会太大,但是,如果在线性地址和物理地址之间进行转换,内核会根据lin的第一部分选择一些表页面。再加上,它必须在ram的某处找到整个表页集,所以...如果空间已经浪费了,为什么不制作一个巨型表页呢?然后,这本书说表页中每个条目的尺寸为32位,但是...如果页长为4kb,为什么不使用这个事实呢?我们知道最后12位是0,那么为什么不将它们保留为隐式呢?我知道我说的所有这些话都是错误的,我说这些只是为了更好地解释我的疑问。 (对不起的英语不好)

linux kernel system paging
1个回答
0
投票

将页面描述符分成多个表具有以下好处:

  1. 粒度。如果您的程序仅使用三个页面(文本,数据,堆栈),那么所有这些页面描述符都可以放在一个页面表中,并且内存开销非常低-一个叶子页面表加上几个内部节点。

  2. 稀疏。类似于效率,根(目录)表只需要包含地址空间中有效部分的条目即可;其余的表指针可以设置为无效页,因此不需要填充它们。

  3. 分享。大型共享内存对象的进程之间不仅可以共享内存,而且还可以共享页表本身。 IIRC solaris将此称为“紧密共享内存”(ISM)。同样,内核映射之类的内容可能会在多个进程之间完全共享。

  4. 性能。常见的64位体系结构使用47位地址空间。如果页面粒度为4k,则线性映射将需要2 ^ 35个页面描述符,每个8个字节。在我吱吱作响的Mac Pro上,将RAM的数量清零只需48秒。那就是开始一个过程的成本。

© www.soinside.com 2019 - 2024. All rights reserved.