首页 文章

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

提问于
浏览
27

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

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

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

Size of page table = 2^16(# of pages) * 4 Bytes(Size of each page table entry) = 2^18 Bytes

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

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

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

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

Total memory required to store first and second level page tables = 4 MB + 1.25 KB

So we need more memory to store multi-level page tables.

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

3 回答

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

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

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

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

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

    最终比较是4MB对8KB .

  • 0

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

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

    Source.(第20.3节)

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

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

  • 25

    主要需要多级表,因为如果是Intel-land中的内存结构 .

    假设你有一个32位系统,你划分地址空间,以便顶部有保留给系统,下半部分是用户地址 .

    通过这样的划分,您需要在每个用户页表中使用2GB的连续页表条目来访问系统地址 .

    旧的VAX以一种简单的方式来实现 . 它将4GB地址空间划分为4个区域(2个用户,1个系统,1个不可用) . 三个可用区域有自己的页面表 .

    每个地区都有自己的页面表 . 由于存在专用的系统地址空间,因此用户页表可以是虚拟地址,因此它们不需要连续的内存 .

    地址转换的第一阶段是查看2个高阶地址位以选择要使用的页表 .

    英特尔®不再使用单独的页表,而是打破了页面表 . 这减轻了(1)需要连续记忆的问题; (2)要求页表跨越整个地址空间; (3)允许定义可由所有进程共享的内核地址 .

相关问题