免费注册 查看新帖 |

Chinaunix

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

kmalloc分配高端内存 [复制链接]

论坛徽章:
0
跳转到指定楼层
1 [收藏(0)] [报告]
发表于 2011-01-07 13:23 |只看该作者 |倒序浏览
kmalloc 如果带GFP_HIGHUSER 参数,那么将在高端内存区获取空间

我的疑问是

unsigned long * addr = kmalloc(size_order,GFP_HIGHUSER )

1) kmalloc返回的是一个什么地址?

2) 在高端页框分配到空间后,由于没有经过映射,所以不会有线性地址,故addr为0?

谢谢

论坛徽章:
0
2 [报告]
发表于 2011-01-07 20:22 |只看该作者
本帖最后由 EZWORD 于 2011-01-07 20:25 编辑

若有高端内存时kmalloc会正确返回,一般情况下返回的不都是逻辑地址吗。
kmalloc()分配的内存处于3GB~high_memory之间,这一段内核空间与物理内存的映射。
你那应该是没有分配到吧,可以看下错误码。

论坛徽章:
0
3 [报告]
发表于 2011-01-07 22:06 |只看该作者
kmalloc底层实现不就是 kmem_cache么? 这个会调用alloc_pages分配内存。如果调用从HIGHZONE分配区间的话。。。

32Bit 的系统有highzone  64bit 系统没有highzone。
高端内存是指物理地址大于896M的地址。
内核会动态分配一个 线性地址来 影射  这块物理地址。
该线性地址 在内核线性空间 3G 896M~4G

论坛徽章:
0
4 [报告]
发表于 2011-01-07 22:17 |只看该作者
关于为啥要有高端内存管理区。。。因为32bit系统内核只有3G-4G的线性地址空间。 当物理内存大于1G的时候,显然内核无法同时管理所有的物理内存(即物理内存同时影射进线性空间)。

所以32bit系统 留出了128m的线性空间 来动态影射大于896M的物理内存(即896M以后的内存)。

所以 只要分配了 就会给一个线性地址。只是这个线性地址 和 物理地址不是 一一对应,而且该线性地址可能再次被释放,为了其他影射的需要。

论坛徽章:
0
5 [报告]
发表于 2011-01-08 08:30 |只看该作者
kmalloc --> kmem_cache -->

page = alloc_pages(GFP_HIGHUSER )

那么page在896以上,需要kmap或者其他的映射, 才能得到线性地址,但我没有在kmalloc实现里,

看到有kmap的操作?

即“内核会动态分配一个 线性地址来 影射  这块物理地址” 这个在kmalloc的哪段代码里?

论坛徽章:
0
6 [报告]
发表于 2011-01-08 12:26 |只看该作者
就在kmap。仔细看一个该函数就明白了 <深入理解>中有详细介绍

论坛徽章:
0
7 [报告]
发表于 2011-01-08 14:58 |只看该作者
看了一下代码,貌似kmalloc并不能支持高端内存。虽然没有发现有什么地方直接去检查GFP_HIGHUSER,但是里面是把alloc_pages得到的page,通过page_address来得到虚拟地址。对于从高端内存分配的page来说,page_address返回0。这应该就相当于分配失败了……

ULK3里面也有这么一段(8.2.5):
  • Notice that it is not possible to allocate page frames from the ZONE_HIGHMEM memory zone, because the kmem_getpages( ) function returns the linear address yielded by the page_address( ) function; as explained in the section "Kernel Mappings of High-Memory Page Frames" earlier in this chapter, this function returns NULL for unmapped high-memory page frames.
  • 论坛徽章:
    0
    8 [报告]
    发表于 2011-01-08 15:22 |只看该作者
    回复 7# kouu


        是啊,楼主的意思我也不太明白,要使用高端内存 vmalloc非连续内存分配嘛。这个一般默认从高度内存分配。
    您需要登录后才可以回帖 登录 | 注册

    本版积分规则 发表回复

      

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

    清除 Cookies - ChinaUnix - Archiver - WAP - TOP