在内核中, kmalloc能够分配的最大连续内存为2的(MAX_ORDER-1)次方个page(参见alloc_pages函数,     "if (unlikely(order >= MAX_ORDER))        return NULL;"), page的大小一般是4K bytes,MAX_ORDER缺省定义为11, 所以如果不修改内核, kmalloc能够分配的最大连续内存一般是4M bytes.

内核中获取4M以上大内存的方法有三种:

1.修改MAX_ORDER, 重新编译内核

2.内核启动选型传递"mem="参数, 如"mem=80M", 预留部分内存; 然后通过request_mem_region和ioremap_nocache将预留的内存映射到模块中. 需要修改内核启动参数, 无需重新编译内核. 但这种方法不支持x86架构, 只支持ARM, PowerPC等非x86架构.

3.在start_kernel中mem_init函数之前调用alloc_boot_mem函数预分配大块内存, 需要重新编译内核.

在不重新编译内核的前提下, x86架构下内核中只能获取到最大4M的连续内存, 或者使用vmalloc获取4M以上的非连续内存. 而且, 无论是kmalloc还是vmalloc, 分配的内存越大, 失败的可能性越大; 系统启动后分配内存的时间越早(此时空闲内存越多, 分部也越规律), 成功的可能性越大.

linux内核中分配4M以上大内存的方法相关推荐

  1. linux内核不能识别u盘分区,一种在Linux内核中识别特定USB大容量存储设备的方法及系统与流程...

    本发明涉配usb设备识别技术领域,特别是涉及一种在linux内核中识别特定usb大容量存储设备的方法及系统. 背景技术: 在linux系统下对usb设备进行管控,一般而言有两种方法,一种是阻断新插入设 ...

  2. Linux内核中使用内存检测

    目录 一.slub内存检测 1.越界访问 2.释放后再访问 3.无效的释放 4.实验输出 二.KASAN 内存检测 1.数组越界 2.栈的越界访问 3.实验输出 一般的内存访问错误如下: 越界访问 访 ...

  3. Linux内核中常见内存分配函数

    1.      原理说明 Linux内核中采用了一种同时适用于32位和64位系统的内存分页模型,对于32位系统来说,两级页表足够用了,而在x86_64系统中,用到了四级页表,如图2-1所示.四级页表分 ...

  4. Linux内核中内存分配函数

    1.原理说明 Linux内核 中采 用了一种同时适用于32位和64位系统的内 存分页模型,对于32位系统来说,两级页表足够用了,而在x86_64系 统中,用到了四级页表,如图2-1所示.四级页表分别为 ...

  5. Linux内核中的内存管理(图例解析)

    一 ,内核管理内存的方式 (1)内核把物理页作为内存管理的基本单位,内存管理单元通常以页为单位进行处理,所以,从虚拟内存角度来看,页就是最小单位. 大多数32位系统支持4kb的页,64位系统支持8kb ...

  6. Linux内核中的内存屏障(转)

    转自:http://www.linuxidc.com/Linux/2011-10/44623.htm 前言 之前读了关于顺序一致性和缓存一致性讨论的文章,感觉豁然开朗.对linux内核中出现的种种同步 ...

  7. KSM(Kernel Samepage Merging) 剖析:Linux 内核中的内存去耦合

    简介:作为一个系统管理程序(hypervisor),Linux® 有几个创新,2.6.32 内核中一个有趣的变化是 KSM(Kernel Samepage Merging)  允许这个系统管理程序通过 ...

  8. Linux内核中max()宏的奥妙何在?(二)——大神Linus对这个宏怎么看?

    最新max()宏 上回,我们在<Linux内核中max()宏的奥妙何在?(一)>一文中说到,在3.18.34版Linux内核源码中的max()宏,采用了GCC的扩展特性,可以避免一些错误. ...

  9. linux内核中的文件描述符(四)--fd的分配--get_unused_fd

    linux内核中的文件描述符(四)--fd的分配--get_unused_fd Kernel version:2.6.14 CPU architecture:ARM920T Author:ce123( ...

最新文章

  1. 聊一聊多源最短路径问题(只有5行代码哦)
  2. 一个c加一个g是什么牌子_一个G的流量60块钱,为什么会这么贵?
  3. 32位数据源中没有mysql_如何在.NET中连接到MySQL数据库
  4. 关于table和td的边框设置
  5. 由浅到深理解ROS(5.1)- roslaunch 学习
  6. LVIS挑战赛冠军总结 | 视觉任务中长尾分布问题研究进展与挑战
  7. Android开发笔记(五十七)录像录音与播放
  8. [Flex] flex的安全沙箱,你保障了安全的同时也害苦了多少我这样的人那
  9. 直击面试,聊聊 GC 机制
  10. ireport中band指什么_金庸武侠经典书剑恩仇录中,“书剑”指的究竟是什么呢?...
  11. 51单片机学习笔记8 -- OLED显示(SPI)
  12. 用计算机按45乘5CE再按,2015年4月全国自学考试计算机应用基础真题
  13. 标书怎么做?标书制作教程附标书制作思维导图
  14. ML之lightgbm.sklearn:LGBMClassifier函数的简介、具体案例、调参技巧之详细攻略
  15. 电商风控赛事亚军方案分享!
  16. D19-Acwing-实现DP第三节相关代码课程完结撒花~
  17. 中国移动物联网公司未来的发展靠什么?
  18. python opencv 读取视频保存视频片段和图片
  19. jQuery源码分析之实例find和filter方法的区别七问
  20. 精美绝伦,世界无双的微积分教材精品

热门文章

  1. 踩坑记录--mybatisplus模糊查询中文时 有数据但 like查不到
  2. spring注解 @Scheduled(cron = 0 0 1 * * *)的使用来实现定时的执行任务
  3. CMD窗口的cd命令
  4. Map 的Properties集合存储IO流对象
  5. (JAVA)红黑树之自然顺序排序和自定义排序方式
  6. 计算机成绩表及格率怎么算,卫生资格人机对话如何考试如何评分?成绩如何核算?...
  7. 李春雷 | 夜宿棚花村
  8. python 运算及注释
  9. cookie和session 以及Django中应用
  10. 基于Enterprise Library的Winform开发框架实现支持国产达梦数据库的扩展操作