GFP_DMA 和 GFP_HIGHMEM 都有一个平台相关的角色, 尽管对所有平台它们的使用都 有效.

Linux 内核知道最少 3 个内存区: DMA-能够 内存, 普通内存, 和高端内存. 尽管通常地 分配都发生于普通区, 设置这些刚刚提及的位的任一个请求从不同的区来分配内存. 这个 想法是, 每个必须知道特殊内存范围(不是认为所有的 RAM 等同)的计算机平台将落入这 个抽象中.

DMA-能够 的内存是位于一个优先的地址范围, 外设可以在这里进行 DMA 存取. 在大部分 的健全的平台, 所有的内存都在这个区. 在 x86, DMA 区用在 RAM 的前 16 MB, 这里传 统的 ISA 设备可以进行 DMA; PCI 设备没有这个限制.

高端内存是一个机制用来允许在 32-位 平台存取(相对地)大量内存. 如果没有首先设置 一个特殊的映射这个内存无法直接从内核存取并且通常更难使用. 如果你的驱动使用大量 内存, 但是, 如果它能够使用高端内存它将在大系统中工作的更好. 高端内存如何工作以 及如何使用它的详情见第 1 章的"高端和低端内存"一节.

无论何时分配一个新页来满足一个内存分配请求, 内核都建立一个能够在搜索中使用的内 存区的列表. 如果 GFP_DMA 指定了, 只有 DMA 区被搜索: 如果在低端没有内存可用, 分配失败. 如果没有特别的标志存取, 普通和 DMA 内存都被搜索; 如果 GFP_HIGHMEM 设置了, 所有的 3 个区都用来搜索一个空闲的页. (注意, 但是, kmalloc 不能分配高端 内存.)

情况在非统一内存存取(NUMA)系统上更加复杂. 作为一个通用的规则, 分配器试图定位进 行分配的处理器的本地的内存, 尽管有几个方法来改变这个行为.

内存区后面的机制在 mm/page_alloc.c 中实现, 而内存区的初始化在平台特定的文件中, 常常在 arch 目录树的 mm/init.c. 我们将在第 15 章再次讨论这些主题.

最新文章

  1. jQuery.cookie.js插件了解及使用方法
  2. Raab判别法确定级数是否收敛
  3. VPN推荐
  4. github student pack中的digital ocean可以使用银联卡支付
  5. JQuery Pagenation 知识点整理——$.extend(),与$.fn.extend()应用(20150517)
  6. Linux内核分析笔记 与Linux内核开发理论
  7. The New Debugger
  8. android137 360 双击三击事件
  9. Swipecards
  10. 谷歌浏览器javascript调试教程
  11. 《Python爬虫学习系列教程》学习笔记
  12. OpenVPN客户端证书合并到配置文件中
  13. 重温吕鑫MFC教学视频(一)
  14. break,continue的区别
  15. svn代码发版的脚本分享
  16. ScrollView match_parent不起作用
  17. README.md文件编辑
  18. Clover 3 --- Windows Explorer 资源管理器的一个扩展,为其增加类似谷歌 Chrome 浏览器的多标签页功能。
  19. docker的容器和镜像的差别
  20. 针对list集合进行分页展示

热门文章

  1. SQLServer —— 数据类型的转换
  2. QT 捕获事件(全局拦截)
  3. Ubuntu里node命令出错,找不到
  4. c++11的新特性
  5. Go语言开发教程
  6. sqlite数据库文件导入到sqlserver 2016-03-26 21:55 1292人阅读 评论(1) 收藏
  7. Implement strStr() 字符串匹配
  8. Python基础:06条件和循环
  9. @codeforces - 117C@ Cycle
  10. selenium webdriver学习(十)------------如何把一个元素拖放到另一个元素里面(转)