Linux内核学习之分页机制

什么叫“页”

Linux内核分页实际上是对内存的一种分层分组的管理。分页机制在内存中建立页目录、页表这样的多级结构,这就是典型的分层管理。另一方面,一个页表中每个页表项都对应着一个物理页,也就说,一个页表管理着一组连续的虚拟地址的映射情况,这就是分组机制。

地址映射过程

相信这张经典的图就足以解释了。简单分析一下,在常见的二级页表映射过程中,页目录通过高31-22位索引,这里共10位,也就是1K个,而每个页目录项(PDE)的大小为4字节,总共大小就是1K*4B=4KB,恰好一个页。PDE的低12位都一些属性位,例如,最典型的P位指明这个目录是否存在。PDE的高20位则是要找的页表的基址。接下来,用虚拟地址的高21-12位作为下标从该页表中找到对应的页表项PTE,PTE的大小同样为4字节,并且它的结构与PDE非常相似。提取对应页表项的高20位作为对应物理页的基址,再加上虚拟地址中的低12位,我们就得到了实际的物理地址。

Linux内核学习之分页机制

问题:

页目录都是按4KB对齐的,为什么?这是因为页目录基址由CR3寄存器给出,在CR3中仅使用20位指明页目录基址。

页表都是按4KB对齐的,为什么?这是因为页表基址由PDE给出,在PDE中仅使用20位指明页目录基址。

相关推荐