Chinaunix

标题: 请教一个内核内存管理的问题,达人进 [打印本页]

作者: cloudice    时间: 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出的内存块要慢,因为读取操作不同嘛

不知道我的理解是否正确,请大家指教下~~
作者: scutan    时间: 2008-09-30 23:21
我想这篇文章非常适合你的问题:
http://linux.chinaunix.net/bbs/thread-690010-1-1.html
作者: lyl19    时间: 2008-10-04 18:08
vmalloc比较特殊,尽管它处于内核空间区域,但它并非一一映射,它通过修改页表映射来实现虚存连续,物理地址离散的目的。
所以它实际对应的物理空间还是普通的内存。
作者: It'sGifted    时间: 2008-10-09 23:24
原帖由 cloudice 于 2008-9-26 16:50 发表
内核空间中,从3G到vmalloc_start这段地址是物理内存映射区域(该区域中包含了内核镜像、物理页框表mem_map等等)
比如我们使用的VMware虚拟系统内存是160M,那么3G~3G+160M这片内存就应该映射物理内存。在物 ...



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

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




欢迎光临 Chinaunix (http://bbs.chinaunix.net/) Powered by Discuz! X3.2