了解页目录

Understanding page directories

我阅读了一些关于页面目录和页面 table 的手册,但对这些概念仍然很困惑。比如here我发现只做单级分页很浪费内存。所以在x86架构中我们使用2级分页。

cr3 --> PageDirectory --> PageTable --> Page

所以考虑下面的线性地址。

01001010101 1010101101 10101110101010 
 page tbl     page      offset

使用page tbl 位我们找到页面目录条目的物理地址。 PD = cr3 + L * (page tbl) 其中包含页面 table 物理地址 PT。现在我们正在寻找我们的页面 P = PT + L * page。所以在单层中我们有一页 table 4MiB。现在我们总共有 1024 页 tables 4KiB = 4MiB。没看到内存经济。

我错过了什么?

通常情况下,页面 table 远未满。对于一个平面页面table,如果只需要前几个和最后几个条目,仍然需要分配整个table。对于页目录,除了第一页和最后一页 table 之外的所有内容都可以省略,从而节省大量内存。在今天的大 RAM 时代,收益似乎很小,但在计算机总共只有 4 MiB RAM 的时候,这确实是很多。