忘记密码   免费注册 查看新帖 | 论坛精华区

ChinaUnix.net

  平台 论坛 博客 认证专区 大话IT HPC论坛 徽章 文库 沙龙 自测 下载 频道自动化运维 虚拟化 储存备份 C/C++ PHP MySQL 嵌入式 Linux系统
12下一页
最近访问板块 发新帖
查看: 8190 | 回复: 16

内核态和用户态共享内存,__get_free_pages如何获得大于4M的连续内存呢? [复制链接]

论坛徽章:
0
发表于 2010-02-02 09:46 |显示全部楼层
本帖最后由 flyingsportshoe 于 2010-04-30 16:01 编辑

需要再内核中维护一个哈希表,这个哈希表在内核态做查找,在用户态进行写入删除维护。
比较无奈的是在内核态只能分配4M的连续内存,无法满足需求,大家有什么好的建议么?指点一二,让我绕过这个问题也可以~

附上我的解决思路:
    原来想的只是避免指针操作,因为在内核态保存的指针是内核态的虚拟地址,所以hash表在用户态的访问是不正常的。所以想将hash表改造成为完全静态的数组来保存数据,所以出现了4M不能满足的情况。后来就考虑做一套内存管理的机制来管理共享内存,hash表的指针体系改造成2个,一个是用户态的指针体系,一套是内核态的指针体系。这样保证了hash表在用户态和内核态都能使用。但这个只是想法,理论上是可以的,目前正在测试代码是否可行。
     经过测试在hash表上保留2套指针的方法是可行的,所有牵涉到指针操作的地方均有内核态一个指针,用户态一个指针。在用户态操作的时候使用用户态的指针,在内核态的时候使用内核态的指针。

论坛徽章:
0
发表于 2010-02-02 12:31 |显示全部楼层
呵呵 顶起来

论坛徽章:
0
发表于 2010-02-03 22:27 |显示全部楼层
不可能啊,我就是从内核申请很大的内存啊。

我现在手边没有代码,大概就是类似 get_page 之类的函数。绝对可以申请很多的内存的

论坛徽章:
0
发表于 2010-03-02 16:46 |显示全部楼层
顶顶顶顶顶,顶起来

论坛徽章:
0
发表于 2010-03-02 16:47 |显示全部楼层
本帖最后由 flyingsportshoe 于 2010-03-02 16:49 编辑

3楼的大哥,帮我看看代码,看看你怎么办到的?谢谢啦

论坛徽章:
36
IT运维版块每日发帖之星
日期:2016-04-10 06:20:00IT运维版块每日发帖之星
日期:2016-04-16 06:20:0015-16赛季CBA联赛之广东
日期:2016-04-16 19:59:32IT运维版块每日发帖之星
日期:2016-04-18 06:20:00IT运维版块每日发帖之星
日期:2016-04-19 06:20:00每日论坛发贴之星
日期:2016-04-19 06:20:00IT运维版块每日发帖之星
日期:2016-04-25 06:20:00IT运维版块每日发帖之星
日期:2016-05-06 06:20:00IT运维版块每日发帖之星
日期:2016-05-08 06:20:00IT运维版块每日发帖之星
日期:2016-05-13 06:20:00IT运维版块每日发帖之星
日期:2016-05-28 06:20:00每日论坛发贴之星
日期:2016-05-28 06:20:00
发表于 2010-03-02 17:29 |显示全部楼层
这个函数分配的内存是有上限的。

论坛徽章:
36
IT运维版块每日发帖之星
日期:2016-04-10 06:20:00IT运维版块每日发帖之星
日期:2016-04-16 06:20:0015-16赛季CBA联赛之广东
日期:2016-04-16 19:59:32IT运维版块每日发帖之星
日期:2016-04-18 06:20:00IT运维版块每日发帖之星
日期:2016-04-19 06:20:00每日论坛发贴之星
日期:2016-04-19 06:20:00IT运维版块每日发帖之星
日期:2016-04-25 06:20:00IT运维版块每日发帖之星
日期:2016-05-06 06:20:00IT运维版块每日发帖之星
日期:2016-05-08 06:20:00IT运维版块每日发帖之星
日期:2016-05-13 06:20:00IT运维版块每日发帖之星
日期:2016-05-28 06:20:00每日论坛发贴之星
日期:2016-05-28 06:20:00
发表于 2010-03-02 17:30 |显示全部楼层
用vmalloc可以分配较大的内存,但是不是连续的。

论坛徽章:
0
发表于 2010-03-05 17:00 |显示全部楼层
修改源码中的限制,重新编译内核


但是LZ为什么要物理连续的内存(4MB连续内存的限制是对物理连续的,逻辑连续的完全可以)啊?

论坛徽章:
0
发表于 2010-03-11 15:59 |显示全部楼层
学习的。

论坛徽章:
0
发表于 2010-03-12 08:41 |显示全部楼层
回复深蓝的苹果,主要是想做内核态和用户态的共享内存。4M感觉对于应用来说不够。不过后来改进了算法+上自己做了一套内存管理机制,解决了此问题。谢谢大家的关注
您需要登录后才可以回帖 登录 | 注册

本版积分规则

  

北京盛拓优讯信息技术有限公司. 版权所有 京ICP备16024965号 北京市公安局海淀分局网监中心备案编号:11010802020122
广播电视节目制作经营许可证(京) 字第1234号 中国互联网协会会员  联系我们:
感谢所有关心和支持过ChinaUnix的朋友们 转载本站内容请注明原作者名及出处

清除 Cookies - ChinaUnix - Archiver - WAP - TOP