4KB页
4KB页的构成
-
该分页方式下,32 位虚拟地址被分为三个位段:页目录索引、页表索引、页内偏移
-
只有一级页目录,其中包含 1024 个条目 ,每个条目指向一个页表,每个页表中有 1024 个条目
-
其中一个条目就指向一个物理页,每个物理页 4KB。这正好是 4GB 地址空间
CR3寄存器、页目录项、页表项
CR3寄存器
- CR3 就是 CPU 的一个 32 位的寄存器,MMU 就是根据这个寄存器找到页目录的
页目录项
页表项
总结
- 页目录项、页表项都是 4 字节 32 位,1024 个项正好是 4KB(一个页),因此它们的地址始终是 4KB 对齐的
- 低 12 位才可以另作它用,形成了页面的相关属性,如是否存在、是否可读可写、是用户页还是内核页、是否已写入、是否已访问等
4MB页
4MB页的构成
-
该分页方式下,32 位虚拟地址被分为两个位段:页表索引、页内偏移
-
一级页目录,其中包含 1024 个条目
-
其中一个条目指向一个物理页,每个物理页 4MB,正好为 4GB 地址空间
CR3寄存器、页表项
CR3寄存器
- CR3 还是 32 位的寄存器,只不过不再指向顶级页目录了
- 而是指向一个 4KB 大小的页表,这个页表依然要 4KB 地址对齐,其中包含 1024 个页表项
页表项
总结
- 4MB 大小的页面下,页表项还是 4 字节 32 位,但只需要用高 10 位来保存物理页面的基地址就可以
- 因为每个物理页面都是 4MB,所以低 22 位始终为 0
- 为了兼容 4MB 页表项低 8 位和 4KB 页表项一样,只不过第 7 位变成了 PS 位,且必须为 1,而 PAT 位移到了 12 位