免费注册 查看新帖 |

Chinaunix

  平台 论坛 博客 文库
最近访问板块 发新帖
楼主: 思一克
打印 上一主题 下一主题

VMALLOC_RESERVE 和 896M [复制链接]

论坛徽章:
0
21 [报告]
发表于 2007-06-14 10:51 |只看该作者
呵呵,我发现我们对高端内存的定义是有误解的,我看了一遍这个帖子,发现我原来也有这个误解。

内核的虚拟地址空间分三个区域: ZONE_DMA, ZONE_NORMAL, ZONE_HIGHMEM,其实高端内存所指的是ZONE_HIGHMEM这个虚拟地址空间,并不是物理地址大于896的物理内存空间,所以用户太是没办法直接使用所谓的高端内存的。

以前的理解是>896M的物理地址空间,所以当然用户进程是可以使用的。

呵呵, 最近在“温故知新”,重新思考了这个问题。

论坛徽章:
0
22 [报告]
发表于 2007-06-14 11:24 |只看该作者
原帖由 snow_insky 于 2007-6-14 10:51 发表于 21楼  
呵呵,我发现我们对高端内存的定义是有误解的,我看了一遍这个帖子,发现我原来也有这个误解。

内核的虚拟地址空间分三个区域: ZONE_DMA, ZONE_NORMAL, ZONE_HIGHMEM,其实高端内存所指的是ZONE_HIGHMEM这个 ...


我认为大家讨论的应用程序访问高端内存有一些概念上的误解。对于应用程序来说,没有高端内存的概念,它看到的就是4G的地址空间(32bit),至于kernel把地址空间中某一区域map到高端内存,那是kernel的事情,应用程序并不知道,所以就无所谓应用程序内否访问高端内存的说法。

这种问题在硬件上也有过。intel公司的处理器家族中有一类称为PAE(physical address extension),它的地址总线有36位,可以寻址64G物理地址,而寄存器仍然是32位的。我以前就问过在进程怎么访问大于4G的内存啊(因为指针仍然是32位的),答案和这里的高端内存一样。

论坛徽章:
0
23 [报告]
发表于 2007-06-14 11:45 |只看该作者
原帖由 albcamus 于 2007-6-14 10:47 发表于 20楼  
用戶進程需要內存了, 內核可以分配高端內存映射給它呀!



pagefult的时候使用HIGHMEM分配内存吗

论坛徽章:
0
24 [报告]
发表于 2007-06-14 11:48 |只看该作者
原帖由 zx_wing 于 2007-6-14 11:24 发表于 22楼  


我认为大家讨论的应用程序访问高端内存有一些概念上的误解。对于应用程序来说,没有高端内存的概念,它看到的就是4G的地址空间(32bit),至于kernel把地址空间中某一区域map到高端内存,那是kernel的事情, ...



问一个弱弱的问题:
i386下,如果一个系统有3G的内存(NON PAE),一个进程可以使用超过2G的内存吗?

[ 本帖最后由 rwen2012 于 2007-6-14 11:49 编辑 ]

论坛徽章:
0
25 [报告]
发表于 2007-06-14 11:49 |只看该作者
原帖由 zx_wing 于 2007-6-14 11:24 发表于 22楼  


我认为大家讨论的应用程序访问高端内存有一些概念上的误解。对于应用程序来说,没有高端内存的概念,它看到的就是4G的地址空间(32bit),至于kernel把地址空间中某一区域map到高端内存,那是kernel的事情, ...



同意!!!!

论坛徽章:
0
26 [报告]
发表于 2007-07-02 14:55 |只看该作者
实际上高端内存是针对内核一段特殊的线性空间提出的概念,和实际的物理内存是两码事。进程在使用内存时,触发缺页异常,具体将哪些物理页映射给用户进程是内核考虑的事情。在用户空间中没有高端内存这个概念。

论坛徽章:
0
27 [报告]
发表于 2007-07-02 14:57 |只看该作者
刚刚没注意,zx_wing和snow_insky已经说的很清楚了

论坛徽章:
0
28 [报告]
发表于 2008-01-13 22:46 |只看该作者
恩恩 明白了  说白了  比方说对于一个512M内存的机器   只有普通区是直接映射的  用户区和高端区都是动态映射的   其实就那么大物理内存 都是访问普通区直接映射的那么大的物理内存  而高端区是给内核看的   用户看不到内核怎么映射的 它看到的就是4G空间  只是最后1G没法直接访问而已
不知道理解的对不对

论坛徽章:
0
29 [报告]
发表于 2009-04-15 11:44 |只看该作者
原帖由 snow_insky 于 2007-6-14 10:51 发表
呵呵,我发现我们对高端内存的定义是有误解的,我看了一遍这个帖子,发现我原来也有这个误解。

内核的虚拟地址空间分三个区域: ZONE_DMA, ZONE_NORMAL, ZONE_HIGHMEM,其实高端内存所指的是ZONE_HIGHMEM这个 ...


感觉这句话说得不对
ZONE_DMA, ZONE_NORMAL, ZONE_HIGHMEM都是指phyical memory

其中ZONE_DMA和ZONE_NORMAL映射在C0000000到C0000000+896M的地方
ZONE_HIGHMEM是用VMALLOC段来映射的

论坛徽章:
0
30 [报告]
发表于 2010-08-26 13:53 |只看该作者
本帖最后由 zhangsuozhu 于 2010-08-26 14:27 编辑

出错了//删了
您需要登录后才可以回帖 登录 | 注册

本版积分规则 发表回复

  

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

清除 Cookies - ChinaUnix - Archiver - WAP - TOP