免费注册 查看新帖 |

Chinaunix

  平台 论坛 博客 文库
最近访问板块 发新帖
查看: 3221 | 回复: 6
打印 上一主题 下一主题

关于ZONE_HIGHMEM [复制链接]

论坛徽章:
0
跳转到指定楼层
1 [收藏(0)] [报告]
发表于 2009-02-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, so the kernel is unable to directly access them. "。那么mem_map是不是将HIGHMEM也包括进来了呢?HIGHMEM该如何理解?

论坛徽章:
36
IT运维版块每日发帖之星
日期:2016-04-10 06:20:00IT运维版块每日发帖之星
日期:2016-04-16 06:20:0015-16赛季CBA联赛之广东
日期:2016-04-16 19:59:32IT运维版块每日发帖之星
日期:2016-04-18 06:20:00IT运维版块每日发帖之星
日期:2016-04-19 06:20:00每日论坛发贴之星
日期:2016-04-19 06:20:00IT运维版块每日发帖之星
日期:2016-04-25 06:20:00IT运维版块每日发帖之星
日期:2016-05-06 06:20:00IT运维版块每日发帖之星
日期:2016-05-08 06:20:00IT运维版块每日发帖之星
日期:2016-05-13 06:20:00IT运维版块每日发帖之星
日期:2016-05-28 06:20:00每日论坛发贴之星
日期:2016-05-28 06:20:00
2 [报告]
发表于 2009-02-23 13:48 |只看该作者
HIGHMEM的映射要做特殊的处理才能映射

论坛徽章:
0
3 [报告]
发表于 2009-02-23 13:59 |只看该作者
原帖由 Godbach 于 2009-2-23 13:48 发表
HIGHMEM的映射要做特殊的处理才能映射


是不是Highmem的内存页不在mem_map数组中?

论坛徽章:
36
IT运维版块每日发帖之星
日期:2016-04-10 06:20:00IT运维版块每日发帖之星
日期:2016-04-16 06:20:0015-16赛季CBA联赛之广东
日期:2016-04-16 19:59:32IT运维版块每日发帖之星
日期:2016-04-18 06:20:00IT运维版块每日发帖之星
日期:2016-04-19 06:20:00每日论坛发贴之星
日期:2016-04-19 06:20:00IT运维版块每日发帖之星
日期:2016-04-25 06:20:00IT运维版块每日发帖之星
日期:2016-05-06 06:20:00IT运维版块每日发帖之星
日期:2016-05-08 06:20:00IT运维版块每日发帖之星
日期:2016-05-13 06:20:00IT运维版块每日发帖之星
日期:2016-05-28 06:20:00每日论坛发贴之星
日期:2016-05-28 06:20:00
4 [报告]
发表于 2009-02-23 14:12 |只看该作者
原帖由 ljshan 于 2009-2-23 13:59 发表


是不是Highmem的内存页不在mem_map数组中?


具体的处理方式我既不清楚了。建议看一下ULKv3中相关章节,有介绍的。

论坛徽章:
0
5 [报告]
发表于 2009-02-23 14:28 |只看该作者
>>是不是Highmem的内存页不在mem_map数组中?

在,所有的页都在

论坛徽章:
0
6 [报告]
发表于 2009-02-23 14:45 |只看该作者
原帖由 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: 我以前看内存管理的时候也对这个问题很迷惑。后来慢慢积累就有了一点了解。

论坛徽章:
0
7 [报告]
发表于 2009-02-23 14:47 |只看该作者
楼主看看这个贴子,以前思一克版总结的:
http://www.chinaunix.net/index.p ... read.php?tid=690010
您需要登录后才可以回帖 登录 | 注册

本版积分规则 发表回复

  

北京盛拓优讯信息技术有限公司. 版权所有 京ICP备16024965号-6 北京市公安局海淀分局网监中心备案编号:11010802020122 niuxiaotong@pcpop.com 17352615567
未成年举报专区
中国互联网协会会员  联系我们:huangweiwei@itpub.net
感谢所有关心和支持过ChinaUnix的朋友们 转载本站内容请注明原作者名及出处

清除 Cookies - ChinaUnix - Archiver - WAP - TOP