我正在学习Linux内核并阅读 The Linux Kernel 这本书。
任何人都可以解释为什么我们不能只使用直接映射逻辑和物理内存而不是树状多层结构的表?
添加了:
所需的条目总数是固定的,所以我认为存储复杂结构而不是简单结构会浪费更多空间。
答案 0 :(得分:33)
当我们进入64位地址空间时,您会欣赏多级页表的空间优化。
假设您有一台64位计算机(这意味着 64位虚拟地址空间),其 4KB页面且 4 GB 物理内存。如果我们建议使用单级页表,则每个进程每个虚拟页应包含一个条目。
每个虚拟页面一个条目 - 每页2个 64 可寻址字节/ 2个 12 个字节= 2 52 页表条目< /强>
一个页表条目包含:访问控制位(如页面存在的位,RW等)+物理页面编号
4 GB物理内存= 2 32 字节。
2 32 字节的内存/ 2 12 字节每页= 2 20 物理页面
物理页码需要20位。
因此每个页表条目大约 4个字节。 (20位物理页码大约3个字节,访问控制贡献1个字节)
现在,Page表格大小= 2 52 页表条目* 4字节= 2 54 字节( 16 PB 强>)!
每个进程16 PB 是非常大量的内存。
现在,如果我们也分页页面表,即如果我们使用多级页表,我们可以神奇地将所需的内存降低到单页。即仅4 KB 。
现在,我们将计算将页表压缩到4 KB所需的级别数。 4 KB页/每页4个字节表条目= 1024个条目。 需要10位地址空间。即 52/10 ceiled是6.即 6级页表可以将页表大小降低到4KB。 / strong>
6级访问肯定更慢。但我想说明多级页表的节省空间。
答案 1 :(得分:1)