免费注册 查看新帖 |

Chinaunix

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

关于ZONE_HIGHMEM的一个问题 [复制链接]

论坛徽章:
0
跳转到指定楼层
1 [收藏(0)] [报告]
发表于 2008-12-02 19:59 |只看该作者 |倒序浏览
普通的进程是不是可以直接获得高内存的页,比如在page fault的时候
如果可以的话,就是说只有内核才需要对高内存进行特殊映射?那么这种映射一般是在什么时候需要

论坛徽章:
0
2 [报告]
发表于 2008-12-02 20:52 |只看该作者
这是引用zx_wing大虾的话:
896M产生的原因有几个:
1)主要原因,x86的地址空间太小了,只有4G,kernel只分到了1G。
2)linux中,kernel的线性空间开始(3G处)对应于物理地址0
3)kernel的线性地址空间要求是identify mapping,也就是内核虚拟地址减去一个常数是物理地址
4)x86架构中,某些硬件(例如LAPIC)寄存器的物理地址位于物理地址空间中的高端(高端的意思是超出了kerenl地址空间大小)。

为了满足条件4)并预留一些可以轮换使用的线性地址,内核必须预留一部分地址空间用于映射这些硬件的寄存器,这个被预留出来的地址空间大小现在是128M,那么,kernel实际可以用的地址空间大小变成了896M。
从物理地址0开始,896M的地址空间最多能映射896M的物理内存,当平台上物理内存多于896M时,例如有1G,kernel(注意,是说 kernel)要访问这些内存怎么办?只能更新页表,使896M地址空间以下的某个地址映射到物理内存的896M以上去。由于这个缘故,产生了896M高端内存的说法。
对于用户态程序就没这个问题,因为用户程序地址空间的起始不用对应物理地址0,完全可以从896M以上的物理内存开始映射。同样,64bit平台没有这个问题,因为此时kernel的地址空间大到足以映射当前硬件技术能提供的所有内存。
所以,高端内存的说法是指内核使用896M以上物理内存的情况,和用户程序没有关系。

论坛徽章:
0
3 [报告]
发表于 2008-12-02 21:00 |只看该作者
MS都回答了
功课没做好,真是惭愧。。。
您需要登录后才可以回帖 登录 | 注册

本版积分规则 发表回复

  

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

清除 Cookies - ChinaUnix - Archiver - WAP - TOP