- 论坛徽章:
- 0
|
原帖由 ljshan 于 2009-2-23 13:35 发表 ![]()
中说mem_map指向系统中所有的物理内存页面描述符数组,但是ULK 8.1.6中又说"Page frames above the 896 MB boundary are not generally mapped in the fourth gigabyte of the kernel linear address spaces, s ...
mem_map将高端内存包包含进来了,所以对于高端内存可以使用alloc_page这类函数去分配内存。
但是为什么需要高端内存呢?
因为对于32位系统来说, 逻辑地址为0-4G, 但是内核态只使用了3-4G的地址空间, 所以说内核只能管理1G的线性地址空间, 如果说全部都采用固定映射的方式, 即差一个PAGE_OFFSET的值. 这样, 如果内存大小超过了1G, 则不能够对超过的内存进行映射管理, 因为对线性地址来说已经超过了4G的大小.
所以, 内核就预先留了128M的逻辑地址空间去管理那超过的部分内存. 也即是说从内核线性地址的3G+896M开始的线性地址空间去管理物理内存896M之后的部分. 具体的管理方式有3种(ULK上面有讲解).
这只是一个设计的问题,对于64位系统来说,就不存在这个问题了。
BTW: 我以前看内存管理的时候也对这个问题很迷惑。后来慢慢积累就有了一点了解。 |
|