免费注册 查看新帖 |

Chinaunix

  平台 论坛 博客 文库
12345下一页
最近访问板块 发新帖
查看: 21582 | 回复: 49

『请教』get_free_pages申请大内存 [复制链接]

论坛徽章:
0
发表于 2009-10-14 16:05 |显示全部楼层
想申请几百兆甚至1个GB的内核空间,请问该怎么处理。

百度搜索过,说get_free_pages 能分配的最大空间为4K×1024,约4M,远远不够我的要求呀。


是不是要重新编译内核?是的话应该是个什么样的处理过程,请大侠赐教,多谢多谢~~

论坛徽章:
0
发表于 2009-10-14 16:13 |显示全部楼层
申请这么大的空间有何用意呢? 32位系统下,内核的地址空间只有1G,并且其中还有128M是没有建立固定映射的……

估计重新编译内核是搞不定的, 修改内核代码也是不现实的, 考虑换内核吧~

论坛徽章:
0
发表于 2009-10-14 16:46 |显示全部楼层
get_free_pages是用来申请物理连续的页,当然不可能很大

“vmalloc  -  allocate virtually contiguous memory”
vmalloc会从高端内存分配,并且线性连续,它使用内核空间高128M线性地址。
还是不可能达到你的需求,1GB有点过分了。。。

内核空间就1GB大,兄台要做什么

论坛徽章:
0
发表于 2009-10-14 16:50 |显示全部楼层
没有映射可以自己做内存映射的吧....

那换个角度讲,不要1GB那么大,我想申请200M的空间该怎么处理呢?

论坛徽章:
0
发表于 2009-10-14 16:57 |显示全部楼层
原帖由 crazymouse99 于 2009-10-14 16:50 发表
没有映射可以自己做内存映射的吧....

那换个角度讲,不要1GB那么大,我想申请200M的空间该怎么处理呢?



既然在内核空间了,自己做映射是可以的,但是你如果动了内核的页表,那就很危险了,完全需要自己来维护这部分内存了,你能保证安全吗?
如果你的物理内存不够大,那是很难拿到200M的连续内存的,如果很大,我想在高端内存应该还是有可能的。

论坛徽章:
0
发表于 2009-10-14 17:00 |显示全部楼层
对了,你要申请200M的内核空间,如果低端内存没有连续的200M,也就意味着内核没有200M连续的线性地址给你使用,我看是没办法了

论坛徽章:
0
发表于 2009-10-14 17:09 |显示全部楼层
很好奇LZ的需求是什么……
LZ想要的东西基本上是不可能了,就算改代码也够呛。

LZ如果把你的需求说出来,或许还有可以变通的方法

论坛徽章:
0
发表于 2009-10-14 19:03 |显示全部楼层
两种方法:
1 采用预留的方式,在内核态用io_remap.
2 alloc_bootmem分配,要修改内核.在内核启动的时候分配.

论坛徽章:
0
发表于 2009-10-14 20:20 |显示全部楼层
原帖由 hb12112 于 2009-10-14 19:03 发表
两种方法:
1 采用预留的方式,在内核态用io_remap.
2 alloc_bootmem分配,要修改内核.在内核启动的时候分配.


请教:alloc_bootmem的使用和实现。
第一次见到这个函数,请大侠赐教啊

论坛徽章:
0
发表于 2009-10-15 14:09 |显示全部楼层
32位环境下是不可能超过896M,否则还要申请高端内存映射到内核
64位环境下面可以自己管理一个内存链表,链表中每个单元用__get_free_pages申请
您需要登录后才可以回帖 登录 | 注册

本版积分规则 发表回复

  

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

清除 Cookies - ChinaUnix - Archiver - WAP - TOP