多级页表如何节省内存空间?

Ani*_*K K 37 memory paging operating-system virtual-memory page-tables

我试图了解多级页表如何节省内存.根据我的理解,多级页表总共消耗比单级页表更多的内存.

示例:考虑页面大小为64KB且32位处理器的内存系统.页表中的每个条目都是4个字节.

单级页表:表示页面偏移需要16(2 ^ 16 = 64KB)位.所以休息16位用于索引到页表.所以

*页面大小= 2 ^ 16(页数)*4字节(每页表项的大小)= 2 ^ 18字节*

多级页表:在两级页表的情况下,让我们使用前10个最高位来索引到第一级页表.接下来10位索引到第二级页表,其具有页码到帧号映射.其余12位表示页面偏移量.

第二级页表的大小= 2 ^ 10(条目数)*4字节(每个条目的大小)= 4 KB

所有二级页表的总大小= 2 ^ 10(二级页表的数量)*4KB(每个二级页表的大小)= 4 MB

第一级页表的大小= 2 ^ 10(条目数)*(10/8)字节(每个条目的大小)= 1.25 KB

存储第一级和第二级页表所需的总内存= 4 MB + 1.25 KB

因此我们需要更多内存来存储多级页表.

如果是这种情况,多级页表如何节省内存空间?

小智 36

  1. 在单级页面表中,您需要整个表来访问少量数据(更少的内存引用).即2 ^ 20页,每个PTE占用4bytes,如您所假设.

访问任何数据所需的空间是2 ^ 20*4bytes = 4MB

  1. 分页页面是多级分页.在多级分页中,它更具体,您可以在多级组织的帮助下决定您的数据存在于2 ^ 20页中的哪个特定页面,然后选择它.因此,在运行该过程时,您只需要将该特定页面放在内存中.

在您讨论的2级案例中,您需要第一级页面表,然后是第二级中的2 ^ 10页表.那么,1级大小= 2 ^ 10*4bytes = 4KB第2级我们只需要2 ^ 10个pagetables中的1个=所以大小是2 ^ 10*4bytes = 4KB

现在所需的总大小:4KB + 4KB = 8KB.

最终比较是4MB对8KB.

  • 好解释.我想知道第2级页表的内容是什么.我理解,在第1级中,内容是帧号和一些位(脏,修改等). (2认同)

Cra*_*son 12

以下是多级页表的主要优点:

首先,将页表切成页面大小的单位; 然后,如果整页页表条目(PTE)无效,则根本不分配页表的那个页面.

资源.(第20.3节)

因此,页表所需的内存量不是由地址空间的大小决定的,而是由进程正在使用的内存量决定的.

此外,如果物理内存已满,页面表条目页面本身可以被分页 - 只有页面目录需要始终存在于内存中.