我试图了解多级页表如何节省内存 . 根据我的理解,多级页表总共消耗比单级页表更多的内存 .
示例:考虑页面大小为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 回答
访问任何数据所需的空间是2 ^ 20 * 4bytes = 4MB
在您讨论的2级案例中,您需要第一级页面表,然后是第二级中的2 ^ 10页表 . 那么,1级大小= 2 ^ 10 * 4bytes = 4KB第2级我们只需要2 ^ 10个pagetables中的1个=所以大小是2 ^ 10 * 4bytes = 4KB
现在需要的总大小:4KB 4KB = 8KB .
最终比较是4MB对8KB .
以下是多级页表的主要优点:
Source.(第20.3节)
因此,页表所需的内存量不是由地址空间的大小决定的,而是由进程正在使用的内存量决定的 .
此外,如果物理内存已满,页面表条目页面本身可以被分页 - 只有页面目录需要始终存在于内存中 .
主要需要多级表,因为如果是Intel-land中的内存结构 .
假设你有一个32位系统,你划分地址空间,以便顶部有保留给系统,下半部分是用户地址 .
通过这样的划分,您需要在每个用户页表中使用2GB的连续页表条目来访问系统地址 .
旧的VAX以一种简单的方式来实现 . 它将4GB地址空间划分为4个区域(2个用户,1个系统,1个不可用) . 三个可用区域有自己的页面表 .
每个地区都有自己的页面表 . 由于存在专用的系统地址空间,因此用户页表可以是虚拟地址,因此它们不需要连续的内存 .
地址转换的第一阶段是查看2个高阶地址位以选择要使用的页表 .
英特尔®不再使用单独的页表,而是打破了页面表 . 这减轻了(1)需要连续记忆的问题; (2)要求页表跨越整个地址空间; (3)允许定义可由所有进程共享的内核地址 .