我读了一些有关页目录和页表的手册,但对这些概念仍然很困惑。例如here我发现只进行单级分页会浪费内存。因此,在 x86
架构中,我们使用 2 级分页。
cr3 --> PageDirectory --> PageTable --> Page
因此考虑以下线性地址。
01001010101 1010101101 10101110101010
page tbl page offset
使用page tbl
位我们找到页目录项的物理地址。 PD = cr3 + L * (page tbl)
其中包含页表物理地址PT
。现在我们正在寻找我们的页面P = PT + L * page
。因此,在单个级别中,我们有一个页表 4MiB。现在我们总共有 1024 个页表 4KiB = 4MiB。看不到内存经济。
我错过了什么?
最佳答案
通常情况下,页表远未满。对于平面页表,如果只需要前几个和最后几个条目,仍然需要分配整个表。对于页目录,除了第一个和最后一个页表之外的所有页表都可以省略,从而节省大量内存。在当今 RAM 巨大的时代,这种 yield 似乎很小,但在计算机总共只有 4 MiB RAM 的时候,这种 yield 确实很大。
关于assembly - 了解页面目录,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/47310883/