Memory 多级页表如何节省内存空间?
我试图理解多级页表是如何节省内存的。据我所知,多级页表总的来说比单层页表消耗更多的内存 例如:考虑一个内存大小为64KB和32位处理器的内存系统。页面表中的每个条目为4个字节 单级页表:需要16(2^16=64KB)位来表示页偏移量。所以剩余的16位用于索引到页表中。所以 *页面表格的大小=2^16(页面的大小)*4字节(每个页面表格条目的大小)=2^18字节* 多级页面表:对于两级页面表,让我们使用前10个最高有效位索引到一级页面表中。接下来的10位将索引到第二级页表中,该页表具有页码到帧编号的映射。其余12位表示页偏移量 第二级页面表的大小=2^10(#个条目)*4字节(每个条目的大小)=4 KB 所有二级页表的总大小=2^10(二级页表的大小)*4KB(每个二级页表的大小)=4MB 第一级页面表格的大小=2^10(#个条目)*(10/8)字节(每个条目的大小)=1.25 KB 存储一级和二级页表所需的总内存=4 MB+1.25 KB 因此我们需要更多内存来存储多级页表。Memory 多级页表如何节省内存空间?,memory,operating-system,paging,virtual-memory,page-tables,Memory,Operating System,Paging,Virtual Memory,Page Tables,我试图理解多级页表是如何节省内存的。据我所知,多级页表总的来说比单层页表消耗更多的内存 例如:考虑一个内存大小为64KB和32位处理器的内存系统。页面表中的每个条目为4个字节 单级页表:需要16(2^16=64KB)位来表示页偏移量。所以剩余的16位用于索引到页表中。所以 *页面表格的大小=2^16(页面的大小)*4字节(每个页面表格条目的大小)=2^18字节* 多级页面表:对于两级页面表,让我们使用前10个最高有效位索引到一级页面表中。接下来的10位将索引到第二级页表中,该页表具有页码到帧编号
在这种情况下,多级页表如何节省内存空间?多级页表的一个主要优点是: 首先,将页面表切碎为页面大小的单位;然后,如果整个页面的页面表条目(PTE)无效,则根本不分配该页面的页面表条目 (第20.3节) 因此,页表所需的内存量不是由地址空间的大小决定的,而是由进程正在使用的内存量决定的
此外,如果物理内存已满,则页表条目页本身可以分页-只有页目录需要始终存在于内存中。由于Intel land中的内存结构,主要需要多级表 假设您有一个32位系统,您划分地址空间,以便上半部分保留给系统,下半部分保留给用户地址 有了这样一个分区,在每个用户页表中需要2GB的连续页表条目才能到达系统地址 旧的VAX对此有一个简单的方法。它将4GB地址空间划分为4个区域(2个用户,1个系统,一个不可用)。这三个可用区域都有自己的页面表 每个区域都有自己的页面表。因为有一个专用的系统地址空间,所以用户页表可以是虚拟地址,因此它们不需要连续内存 地址转换的第一阶段是查看2个高阶地址位,以选择要使用的页表 Intel land不再使用单独的页表,而是将页表拆分。这减少了以下问题:(1)表需要连续内存;(2) 要求页表跨越整个地址空间;(3) 允许定义可由所有进程共享的内核地址
现在,只需将我们取出的页面写入磁盘,然后检索它们以供以后使用。这样,如果程序实际上只需要一个最终级别的页表条目,那么我们将整个4MB的条目存储到磁盘中,除了实际需要的4KB+4KB。这节省了大量内存。所有页表条目不必同时出现在内存中。只有顶级字典,其余的可以交换到磁盘,并在需要时加载和使用(如果有)。因此,(在我看来)节省是因为页面映射占用了适量的内存,而10/8是在计算大小o的过程中完成的