当前位置:  技术问答>linux和unix

内核与用户态共享大内存问题

    来源: 互联网  发布时间:2016-08-04

    本文导语:  周六通过steptodream的指点实现了内核态与用户进程的内存共享。现在我要在两者之间共享一块很大的内存(1G),但get_free_pages()方法一次最大只能分配4M的连续空间,如果通过多个调用get_free_pages的话,又不能保证多次调...

周六通过steptodream的指点实现了内核态与用户进程的内存共享。现在我要在两者之间共享一块很大的内存(1G),但get_free_pages()方法一次最大只能分配4M的连续空间,如果通过多个调用get_free_pages的话,又不能保证多次调用之间得到的内存是一块连续的空间。

从网上看到说可以在系统启动完之前(也就是mem_init()函数执行之前)用类似alloc_bootmem()的函数来申请,但这块对我初学者怕是难度更大,而且时间也不允许。

请问,有没有其他方法可以实现我的需求呢?

我现在是在内核态通过get_free_pages申请内存,将地址传给了用户进程实现共享的。如果能实现大内存共享,从用户态分配通知内核来实现共享也可以。请多多指教。

|
可以考虑预留一部分memory给你的用户程序,如:系统有1G物理内存,你可以修改内核设置内存大小为968M,预留最后的(1024-968)M,然后把这部分内存映射给用户程序使用。这个应该比较简单,也符合你的要求!

|
不知道你用的内存共享方法是什么。如果采用mmap机制的话,内存空间是否是连续的影响不大哦,只要合理的处理就行了。

|
可以使用bigphysarea补丁,再通过map进行申请就可以了。
提醒:不过bigphysarea补丁对大于4G内存存在问题(需要的bios支持)。

|
up up up up up up

|
问题的关健还是如何申请大小1G的内存。get_free_pages()方法一次最大只能分配4M的连续空间,这个限制是哪里来的,不太理解。

    
 
 
 
本站(WWW.)旨在分享和传播互联网科技相关的资讯和技术,将尽最大努力为读者提供更好的信息聚合和浏览方式。
本站(WWW.)站内文章除注明原创外,均为转载、整理或搜集自网络。欢迎任何形式的转载,转载请注明出处。












  • 相关文章推荐
  • Linux内核中影响tcp三次握手的一些协议配置
  • Fedora Core 2自带的内核升级程序下载下来内核后,要不要再编译一遍内核?
  • TCP协议四次断连过程介绍及Linux内核协议栈中相关设置项
  • 进程内核栈和操作系统内核栈的关系
  • CentOS 6内核升级:下载编译启用新内核版本详细过程
  • Linux中内核线程不访问内核态地址空间?
  • Linux进程的内核栈和用户栈概念,相互关系及切换过程
  • 2.6内核下编译2.4内核
  • linux内核中的likely宏和unlikely宏介绍及用法
  • 谁能提供kgdb内核补丁内核模块的下载
  • CentOS 6.5 下载地址及如何升级内核(kernel)版本到 3.10.28
  • 编译新内核后怎么进入原来内核
  • Linux下c/c++开发之程序崩溃(Segment fault)时内核转储文件(core dump)生成设置方法
  • 请问linux中如何判断内核是否已经启动。(在内核中写程序)
  • docker使用的技术之Container内核原理介绍
  • 内核模块跟内核版本不匹配????????
  • 请教:如何安装新内核(rpm包)而不同原来得内核冲突?? 在线等待!!
  • linux为什么要升级内核?升级内核有何作用?
  • 内核升级后,如何在新的内核中加载显卡驱动?
  • 内核源码和结果make过的内核源码有什么区别
  • 不重新编译内核能修改内核函数吗?


  • 站内导航:


    特别声明:169IT网站部分信息来自互联网,如果侵犯您的权利,请及时告知,本站将立即删除!

    ©2012-2021,,E-mail:www_#163.com(请将#改为@)

    浙ICP备11055608号-3