linux内存管理之高端内存

用户0-3G内核3-4G

所谓用户和内核对于CPU来说只是运行的级别不一样,是否处于特权级

不管用户还是内核最终都是要通过MMU映射到你的物理上的896M内存

对于任何用户进程,0~3G的映射都是不同的,但是所有用户进程3~4G的映射都是相同的

高端内存引入原因在于:如果你的物理内存是1G那刚好映射

当你的物理内存大于1G时,为了访问到所有的物理内存引入了高端内存,建立一个临时映射表去访问其它地方的内存用完了就释放掉。

linux内存管理之高端内存

 

简单直接的理解就是物理内存896M以上的都是高端内存因为我没办法通过直接映射来访问,我只有通过建立临时映射区、可持久映射区、VMALLOC区来访问。

习惯上,Linux把内核空间3G+high_memory~4G-1的这个部分叫做高端内存区,里面存得都是高端内存里的东西。

(之前纠结高端内存是物理内存还是内核空间?答案是物理内存,可以直接映射的是低段内存,不可以的是高端内存)

总结一下:在x86结构的内核空间,三种类型的区域(从3G开始计算)如下:

  • ZONE_DMA:内核空间开始的16MB
  • ZONE_NORMAL:内核空间16MB~896MB(固定映射)
  • ZONE_HIGHMEM :内核空间896MB ~ 结束(1G)