【发布时间】:2015-06-10 15:05:09
【问题描述】:
我想了解多级页表如何节省内存。据我了解,多级页表总共比单级页表消耗更多的内存。
示例:考虑一个页面大小为 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(# of entries) * (10/8) Bytes (Size of each entry) = 1.25 KB
存储一级和二级页表所需的总内存 = 4 MB + 1.25 KB
所以我们需要更多的内存来存储多级页表。
如果是这样,多级页表如何节省内存空间?
【问题讨论】:
-
所有页表条目不必同时存在于内存中。只是顶级字典,其余的可以交换到磁盘并在需要时加载和使用(如果有的话)。所以节省(在我看来)是因为页面映射占用了适量的内存
-
计算一级页表大小时为什么要10/8?
标签: memory operating-system paging virtual-memory page-tables