Memory management 为什么页面目录条目需要20位才能指向2^10个页面表?

Memory management 为什么页面目录条目需要20位才能指向2^10个页面表?,memory-management,linux-kernel,paging,Memory Management,Linux Kernel,Paging,我最近在学习Linux内存管理,现在我被分页机制阻止了 与32位处理器的常规分页一样,为什么页面目录条目(总共32位)需要20位来表示2^10个页面表?我认为10比特就足够了,没有浪费。 我的理解有什么问题 谢谢。页面大小为4096字节,即2^12字节 这意味着页面将以4KB的倍数对齐,并且页面的地址是xxxxxxxxxxxxxxxxxxxx000000000000。 换句话说,页面地址需要比地址总线大小少12位。 对于32位地址,最终为20位 一个页面目录条目有32位,因此其中2^10位可以

我最近在学习Linux内存管理,现在我被分页机制阻止了

与32位处理器的常规分页一样,为什么页面目录条目(总共32位)需要20位来表示2^10个页面表?我认为10比特就足够了,没有浪费。 我的理解有什么问题


谢谢。

页面大小为4096字节,即2^12字节

这意味着页面将以4KB的倍数对齐,并且页面的地址是
xxxxxxxxxxxxxxxxxxxx000000000000
。 换句话说,页面地址需要比地址总线大小少12位。 对于32位地址,最终为20位


一个页面目录条目有32位,因此其中2^10位可以放入一个4KB的页面。

常规x86使用2级页面表,但我认为情况是他们在这里讨论的是一级页面表。。。因此,您有一个巨大的结构,包含2^20个条目,每个条目将虚拟页面地址(提到的20位)与物理页面地址相关联。你能提供一个你在哪里找到这张图片的链接吗?

对于32位处理器,它将生成32位地址

如果生成的地址为32位,则可寻址内存为4GB。(如2^32=4GB)

现在,页表和页目录都驻留在单个页中的内存中

此外,页面大小为4kB

在页面目录和页面表中,条目总是分别指向页面表和页面目录的边框或边缘

如果你把4G(1G=2^30)除以4k(1k=2^10),你会得到2^20

也就是说,我们需要20位来访问4GB内存或最大可寻址内存中的所有4kb块


这就是为什么页面表和页面目录的条目总是20位的原因,谢谢。也就是说,页面目录条目的高20位是页面表的起始物理地址吗?如果是这样,20位将生成2^20个地址,但只有2^10个页表。页表的数量与可能的地址数量无关。我感到困惑。据我所知,PD条目的高20位将有助于找到特定的PG。例如,000011111 000011111 1000000000000将指向一个页表,其起始物理地址为000011111 000011111 1111,以此类推。。。我可能误解了一些要点。谢谢。这些地址中似乎只有1024个被使用,不管是哪一个,这是对的吗?我想你也误解了寻呼机制。这不是一级分页。在两级分页中,页面目录项使用20位指定1024个页面表。这20位与对应页表的物理地址的高20位相同(页表存储在主存中,因此CPU需要一个物理地址来查找它)。页目录中有1024个条目,然后页表将有1024个条目物理地址。对,我相信这就是答案。非常感谢。