免费注册 查看新帖 |

Chinaunix

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

请教一个内核内存管理的问题,达人进 [复制链接]

论坛徽章:
0
跳转到指定楼层
1 [收藏(0)] [报告]
发表于 2008-09-26 16:50 |只看该作者 |倒序浏览
内核空间中,从3G到vmalloc_start这段地址是物理内存映射区域(该区域中包含了内核镜像、物理页框表mem_map等等)
比如我们使用的VMware虚拟系统内存是160M,那么3G~3G+160M这片内存就应该映射物理内存。在物理内存映射区之后,就是vmalloc区域。
对于160M的系统而言,vmalloc_start位置应在3G+160M附近(在物理内存映射区与vmalloc_start期间还存在一个8M的gap来防止跃界),vmalloc_end的位置接近4G(最后位置系统会保留一片128k大小的区域用于专用页面映射)

请问: 如果在上述160M的虚拟机中,用vmalloc申请一块内存,那此内存块的首地址将是在3G+160M~4G之间,也就是说这块地址将不对应实际的物理内存;这样的话如果我往此内存块中存一个字符串,那字符串实际存在于什么地方呢?(既然地址不与物理内存对应,那肯定不会在某物理内存中咯)
难道是存在与虚拟内存中的?虚拟内存好象一般对应的是硬盘空间来的,这样可以解释存储问题,但是如果那样的话,对vmalloc出来的“内存”块操作将比kmalloc出的内存块要慢,因为读取操作不同嘛

不知道我的理解是否正确,请大家指教下~~

论坛徽章:
0
2 [报告]
发表于 2008-09-30 23:21 |只看该作者
我想这篇文章非常适合你的问题:
http://linux.chinaunix.net/bbs/thread-690010-1-1.html

论坛徽章:
0
3 [报告]
发表于 2008-10-04 18:08 |只看该作者
vmalloc比较特殊,尽管它处于内核空间区域,但它并非一一映射,它通过修改页表映射来实现虚存连续,物理地址离散的目的。
所以它实际对应的物理空间还是普通的内存。

论坛徽章:
0
4 [报告]
发表于 2008-10-09 23:24 |只看该作者
原帖由 cloudice 于 2008-9-26 16:50 发表
内核空间中,从3G到vmalloc_start这段地址是物理内存映射区域(该区域中包含了内核镜像、物理页框表mem_map等等)
比如我们使用的VMware虚拟系统内存是160M,那么3G~3G+160M这片内存就应该映射物理内存。在物 ...



谁告诉你vmalloc不分配物理内存了?

当然要分配了,不分配往哪写嘛,你自己看一下内核代码。即使要往磁盘上写,进行磁盘IO时,按Linux的机制也要也放进内核缓冲的,不分配物理内存怎么往磁盘写,难道让它直接写???
您需要登录后才可以回帖 登录 | 注册

本版积分规则 发表回复

  

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

清除 Cookies - ChinaUnix - Archiver - WAP - TOP