Linux High Memory 笔记

Linux 内核占据线性空间的3G~4G(32位)(/include/asm-i386/page.h中,由__PAGE_OFFSET指定,#define __PAGE_OFFSET    (0xC0000000)),所以能直接映射到Linux内核空间的物理内存不可能大于 1G,Linux设置这个值为 896M,保存在high_memory变量中,因此,物理内存中高于896M的被称为 high memory;那么Linux内核如何定位high memory?这就是Linux为什么不用1G线性空间来直接映射物理内存,而只用了896M,剩下的128M线性空间就是动态映射 high memory 的,当然这些映射都是暂时的,需要映射另外一部分 High Memory 时,需要替换这些映射,具体参看Understanding Linux Kernel。


基于以上的解释,64位Linux 下,内核线性空间不局限于1G,不会有这个问题。


看到 Linux Kernel Development 3rd,High Memory Mappings 这一节,上来就讲high memory是怎么映射,用什么函数,结果连什么是highmemory都没讲清楚,搞得一头雾水,还好Understanding Linux Kernel 上有很好的解释。


参看:Understanding Linux Kernel,Kernel Mappings of High-Memory Page Frames 一节


你可能感兴趣的:(linux,linux内核)