高端内存概念的目的是留出内核的一部分地址空间用来有选择的映射内存的任意部分,使内核能够使用整个内存,而不是只有1个G的内存。。
x86中,linux把4G的线性地址空间分成两份,0-3G作为用户态程序的地址空间,3-4G作为内核的地址空间。为什么只有4G的地址空间,32位最多只能表示4G,它是访问不了4G+1的位置的。我们说每一个用户态进程都应该有4G的地址空间可以用,然而内核的1G地址是所有用户态共享的。当我们把1G的内存全部一一映射到内核的1G地址上,那么内核想访问1G+1的位置怎么办,CPU当然能访问到这个位置,关键是内核根本给不了这个地址,它只有1G可用,这就限制了内核能使用多少内存,如果内核想访问更多的内存怎么办,留出一段的地址空间,(1024 - 896 ),注意首先是留出地址空间,而不是物理内存,当然这200多兆的内存也被留出来了,因为没有地方可以映射。留出来的地址空间内核可以用来映射物理高端内存(高于896M的内存)的任何地方,达到访问整个内存的目的。