Linux中存储空间按连续与否可分为连续存储空间和不连续存储空间。连续存储空间以UMA为代表,非连续存储空间以NUMA为代表。在内核中,通过条件编译选择项CONFIG_DISCONTIGMEM可以选择不同类型的存储空间。针对不同的存储空间,Linux内核有不同的alloc_pages()函数以供调用,以实现物理页面的分配。
Linux中物理页面分配的主函数为:struct page * alloc_pages(int gfp_mask, unsigned long order)
先考虑NUMA结构的存储空间。我们知道,NUMA结构的存储空间有不同的存储节点(pg_data_t),每个存储节点有多个不同类型的存储管理区(最多3个),而每个存储管理区又管理多个连续的物理页面。如果有进程要求分配页面,则依次在由存储节点构成的单链表中尝试分配2的order次幂页面个数,如果成功就返回申请成功的页面块的首个页面结构的地址。
相对于UMA结构的存储空间,其页面分配就相对简单多了。它只有一个存储节点,只需在该节点的各个存储管理区上去获取2的order次幂页面个数即可。

转载于:https://blog.51cto.com/stonehorse/1143091

Linux之物理页面的分配相关推荐

  1. Linux内存子系统——分配物理页面(alloc_pages)

    Linux内存子系统--分配物理页面(alloc_pages) 分配页面   内核中常用的分配物理内存页面的接口函数是 alloc_pages(),用于分配一个或多个连续的物理页面,分配的页面个数只能 ...

  2. Linux内存管理: 物理内存的释放(回收).为物理页面抬棺

    前情提要: 地址转换 物理页面的分配 终于到了物理内存的释放. 内存页面如生命一般. 有生有死. 接下来我们就要为物理页面抬棺收尸了. 1.要点: 如何为兄弟抬棺回收? 分配时跟谁分开的, 回收时要跟 ...

  3. Linux内存管理 (4)分配物理页面

    专题:Linux内存管理专题 关键词:分配掩码.伙伴系统.水位(watermark).空闲伙伴块合并. 我们知道Linux内存管理是以页为单位进行的,对内存的管理是通过伙伴系统进行. 从Linux内存 ...

  4. Linux内存管理宏观篇(三)物理内存:物理页面

    前言 关于物理内存,物理,那肯定是事物,实实在在的东西.对于这种实在的,就需要进行管理,而管理肯定是软件来管理. 对于物理内存怎么管理? 涉及到的无非就是怎么分配内存.怎么回收整理内存.怎么样提高分配 ...

  5. Linux 操作系统原理 — 内存 — 内存分配算法

    目录 文章目录 目录 前文列表 内存碎片 伙伴(Buddy)分配算法 Slab 算法 虚拟内存的分配 内核态内存分配 vmalloc 函数 kmalloc 用户态内存分配 malloc 申请内存 用户 ...

  6. linux内存不足时缩减缓存,Linux内存及页面缓存管理概要总结

    物理内存管理 页面内存管理 Linux把物理内存划分为若干个大小相同(通常是4k)的页面,每个页面使用struct page描述,在内核初始化时会根据物理内存大小和页面大小,初始化一个struct p ...

  7. Linux内存管理:内存分配:slab分配器

    <linux内核之slob.slab.slub> <Linux内核:kmalloc()和SLOB.SLAB.SLUB内存分配器> <Linux内存管理:内存分配:slab ...

  8. linux内存管理页面,【原创】(七)Linux内存管理 - zoned page frame allocator - 2

    [原创](七)Linux内存管理 - zoned page frame allocator - 2 背景 Read the fucking source code! --By 鲁迅 A picture ...

  9. 剖析linux的内存管理与分配

    文章目录 伙伴算法 **1.伙伴算法原理** **2.物理页的分配** **3. 物理页的释放 ** **总结** Slab分配机制 **1.Slab如何对内存进行管理?** **2.Slab中如何实 ...

最新文章

  1. Android开发人员资料大全(开发人员必看)
  2. 如果你很迷茫,就好好读读这8句话
  3. UI测试脸型软件,App脸型美化剖析|UI-影视-其他|观点|freshoil - 原创文章 - 站酷 (ZCOOL)...
  4. 二分查找:在有序数组中搜索大于等于x的数的最小下标
  5. 信息学奥赛一本通 1057:简单计算器 | OpenJudge NOI 1.4 19
  6. 26个Jquery使用小技巧(jQuery tips, tricks amp; solutions)
  7. 我们该不该在Rust上做点投资?
  8. hillstone debug 抓包
  9. Docker 网易镜像仓库使用
  10. Git问题解决:warning: Pulling without specifying how to reconcile divergent branches is discouraged. You
  11. 正则表达式 java 截取指定字符中间的字符串
  12. MYMPS蚂蚁分类信息系统源码,5.9E多城市全开源版本
  13. 制作Docker镜像,用来下载OpenJDK11源码
  14. 掌握技巧可以快速完成网站备案
  15. Word中删除指定页的页眉和页脚 + 删除第一页空白页 (简单、有效)
  16. error: undefined reference to ‘_imp___ZN12QApplicationC1ERiPPci‘
  17. ptp输出内容包含什么_04-PTP命令
  18. Linux中/usr目录详解
  19. 自动驾驶中的SLAM
  20. 机器学习PAI为你自动写歌词,妈妈再也不用担心我的freestyle了(提供数据、代码)...

热门文章

  1. Juddi介绍及安装
  2. vscode智能提示css的插件_Visual Studio Code 必备插件,主题及语法提示
  3. Nacos处理服务变更通知
  4. 二叉查找树(BST Binary Search Tree)
  5. ConcurrentHashMap的源码分析-put方法第三阶段
  6. RocketMQ的发展历史
  7. Nginx限流-并发量限流配置
  8. logback基础配置文件
  9. 选择结构_标准if-else语句
  10. CentOS查看 占用 内存 最多的 进程