Linux高端内存

Linux高端内存是针对物理内存来说的,虚拟内存没有高端这个概念。Linux系统将虚拟内存分为两个部分,即用户地

址空间和内核地址空间,对于32位系统来说,虚拟地址空间为4GB,其中用户空间范围为0-3GB,内核空间范围为

3-4GB。Linux将3GB开始的内核虚拟地址空间的896M地址直接映射到物理地址空间的0-896M,这部分是永久性映

射,剩下的128M则可根据需要进行动态映射,也称临时性映射。如果没有动态映射,那么1GB的内核虚拟地址空间最

多只能访问1GB的物理内存,那么如果物理内存大于1GB,就会有一部分物理内存无法被内核访问到,显然不是我们

想要的。因此,对于32位系统来说,高端物理内存是内核虚拟地址空间后128M可动态映射使内核得以访问的物理内

存,用户空间虚拟地址也是映射到这部分物理内存。下面这个图解释了这一情况:

            ________________ _____                    
           |Other KernelData|___  |  |                |
           |----------------|   | |__|                |
           |     Kernel     |  |____|   Real Other   |
  3 GB --->|----------------|       |   Kernel Data  |
           |                |      |                |
           |              __|_\_\____|__   Real       |
           |      Tasks     |      |     Tasks      |
           |              __|___\_\__|__   Space      |
           |                |      |                |
           |                |      |----------------|
           |                |       |Real KernelSpace|
           |________________|       |________________|
      
           Logical Addresses          Physical Addresses

从上面的图我们可以领悟到,只有在物理内存大小超过了内核虚拟地址空间的时候,才会存在高端内存,否则内核虚

拟地址空间的大小已经使其足够访问所有的物理内存了。

 

Linux内存管理涉及大量的内容,要深入理解可以搞一些大部头的书籍来阅读。

 

推荐一些写得比较清晰的文章:

A Clarification on Linux Addressing

Linux Memory Management

Linux 虚拟内存和物理内存的理解

 

原文地址:https://www.cnblogs.com/woshiweige/p/4521271.html