Linux内核之虚拟内存地址映射

Linux通过地址映射将物理页面映射到4G的虚拟地址空间,其中3G以上是内核地址空间,而3G以下为用户地址空间。Linux中所有的进程将使用虚拟地址空间进行内存的管理和操作。

 

Linux内核的映射机制设计成三层,在页面目录和页面表中间增设了一层“中间目录”。页面目录为PGD,中间目录为PMD,而页面表为PT。PT中的表项PTE(page Table Entery)。而对于i386 CPU直接跳过PMD层的映射。

 

那么虚拟地址空间是怎样进行映射到呢?

 

我们前面说过,i386是采用段页式管理。Linux采用走过场的形式敷衍cpu,这样一个32位的虚拟地址空间就等同于一个线性地址。这个32位的地址分为3个部分:

 

用32位的虚拟地址的最高10位作为下标去找页面目录PGD,这个目录中的高20位指向一个页面表。CPU在20位地址后添加12个0就得到该页面表的指针。

 

找到页面表之后,CPU再以线性地址中间的10位作为下标,到页表PT中找页面表项。方式仍然是取页面表中的高20位补10个0,指向页面表项的指针。注意此时Linux直接跳过PMD中间目录。

 

最后再加上最低的12位偏移地址,直接找到物理地址。这样就完成了虚拟地址到物理地址的映射。

你可能感兴趣的:(linux)