• 企业400电话
  • 微网小程序
  • AI电话机器人
  • 电商代运营
  • 全 部 栏 目

    企业400电话 网络优化推广 AI电话机器人 呼叫中心 网站建设 商标✡知产 微网小程序 电商运营 彩铃•短信 增值拓展业务
    Linux内核环境下如何申请大块内存?

    在Linux内核环境下,申请大块内存的成功率随着系统运行时间的增加而减少,虽然可以通过vmalloc系列调用申请物理不连续但虚拟地址连续的内存,但毕竟其使用效率不高且在32位系统上vmalloc的内存地址空间有限。所以,一般的建议是在系统启动阶段申请大块内存,但是其成功的概率也只是比较高而已,而不是100%。如果程序真的比较在意这个申请的成功与否,只能退用“启动内存”(Boot Memory)。下面就是申请并导出启动内存的一段示例代码:
     

    void* x_bootmem = NULL;
    EXPORT_SYMBOL(x_bootmem);
    
    unsigned long x_bootmem_size = 0;
    EXPORT_SYMBOL(x_bootmem_size);
    
    static int __init x_bootmem_setup(char *str)
    {
            x_bootmem_size = memparse(str, str);
            x_bootmem = alloc_bootmem(x_bootmem_size);
            printk("Reserved %lu bytes from %p for x\n", x_bootmem_size, x_bootmem);
    
            return 1;
    }
    __setup("x-bootmem=", x_bootmem_setup);

    可见其应用还是比较简单的,不过利弊总是共生的,它不可避免也有其自身的限制:

    1.内存申请代码只能连接进内核,不能在模块中使用。

    2.被申请的内存不会被页分配器和slab分配器所使用和统计,也就是说它处于系统的可见内存之外,即使在将来的某个地方你释放了它。

    3.一般用户只会申请一大块内存,如果需要在其上实现复杂的内存管理则需要自己实现。

    在不允许内存分配失败的场合,通过启动内存预留内存空间将是我们唯一的选择。

    上一篇:Linux内核与根文件系统的关系详解
    下一篇:修改Linux的GRUB启动背景的方法
  • 相关文章
  • 

    © 2016-2020 巨人网络通讯 版权所有

    《增值电信业务经营许可证》 苏ICP备15040257号-8

    Linux内核环境下如何申请大块内存? Linux,内核,环境,下,如何,