理论+实例,带你掌握Linux的页目录和页表
摘要:操作系统在加载用户程序的时候,不仅仅需要分配物理内存,来存放程序的内容;而且还需要分配物理内存,用来保存程序的页目录和页表。 本文分享自华为云社区《Linux从头学15:【页目录和页表】-理论 + 实例 + 图文的最完全、最接地气详解》,作者: 道哥 。 在x86系统中,为了能够更加充分、灵活的使用物理内存,把物理内存按照4KB的单位进行分页。 然后通过中间的映射表,把连续的虚拟内存空间,映射到离散的物理内存空间。映射表中的每一个表项,都指向一个物理页的开始地址。 但是这样的映射表有一个明显的缺点:映射表自身也是需保存在物理内存中的。 在 32 位系统中,它使用了多达4MB的物理内存空间(每个表项4个字节,一共有4G/4K个表项)。 为了解决这个问题,x86处理器使用了两级转换:页目录和页表。 这篇文章,我们就从最基础的底层计算过程入手,把这个最重要的内存管理机制搞定,以后再学习更深入的知识点时,就会更容易理解了。 1. 页表的拆分过程 在一个32位的系统中,物理内存的最大可表示空间就是0xFFFF_FFFF,也就是4GB。 虽然实际安装的物理内存可能远远没有这么大,但是在设计内...
