1,伙伴系统的作用:
 伙伴系统主要是为了高效使用物理内存,尽量减少内存碎片的产生
 
2,伙伴系统的概念:
 系统中的内存总是两两分组,每组中的两个内存块称为伙伴
 
3,伙伴系统的原理:
  伙伴系统是相对于struct zone而言,将每个zone的空闲内存分为最多11个数组,比如第一个数组里管理着2^0页的内存,所有这些2^0的页以struct page的lru域的双向链表相连接,第二个数组管理着2^1页的内存,所有这些2^0的页以struct page的lru域的双向链表相连接,以此类推,。。。。。当要申请一个4k(即2^0页)的内存时,则直接从第一个数组申请,如果第一个数组没有空闲内存,则将第二个数组的2^1的页分解为两个2^0的页以供申请。
 
4,伙伴系统的相关数据结构
  伙伴系统是相对于struct zone而言的,struct zone中的struct free_area是用来描述该管理区伙伴系统的空闲内存块的,

  struct zone {  ...  ...      struct free_area    free_area[MAX_ORDER];  ...  ...
}  struct free_area {  struct list_head    free_list[MIGRATE_TYPES];  unsigned long       nr_free;   //该free_area中总共的空闲内存块的数量,单位为页大小
};
#define MAX_ORDER 11
#define MIGRATE_TYPES 5

5,防止内存碎片相关:
  用户空间的程序不会碰到内存碎片的问题,因为其内存是通过页表映射的,无论空闲页在物理内存的分配如何,应用程序
看到的内存总是连续的。但是对于内核来说,会经常碰到内存碎片的问题,因为大部分物理内存是线性映射到内核空间的。
  内核将页分为以下三种类型
  不可移动页:在内存中有固定位置,不能移动到其它位置。
  可回收页:不能直接移动,但是其内存可以回收。kswapd守护进程会周期性的回收可回收页的内存。
  可移动页:页可以随意移动,用户空间应用程序的页属于这个类型,属于页表映射的

#define MIGRATE_UNMOVABLE     0
#define MIGRATE_RECLAIMABLE   1
#define MIGRATE_MOVABLE       2
#define MIGRATE_PCPTYPES      3 /* the number of types on the pcp lists */
#define MIGRATE_RESERVE       3
#define MIGRATE_ISOLATE       4 /* can't allocate from here */
#define MIGRATE_TYPES         5  

MIGRATE_PCPTYPES是per_cpu_pageset,即用来表示每CPU页框高速缓存的数据结构中的链表的迁移类型数目
MIGRATE_RESERVE是在前三种的列表中都没用可满足分配的内存块时,就可以从MIGRATE_RESERVE分配
MIGRATE_ISOLATE用于跨越NUMA节点移动物理内存页,在大型系统上,它有益于将物理内存页移动到接近于是用该页最频繁地CPU
MIGRATE_TYPES表示迁移类型的数目

当一个指定的迁移类型所对应的链表中没有空闲块时,将会按以下定义的顺序到其他迁移类型的链表中寻找

static int fallbacks[MIGRATE_TYPES][MIGRATE_TYPES-1] = {  [MIGRATE_UNMOVABLE]   = { MIGRATE_RECLAIMABLE, MIGRATE_MOVABLE,   MIGRATE_RESERVE },  [MIGRATE_RECLAIMABLE] = { MIGRATE_UNMOVABLE,   MIGRATE_MOVABLE,   MIGRATE_RESERVE },  [MIGRATE_MOVABLE]     = { MIGRATE_RECLAIMABLE, MIGRATE_UNMOVABLE, MIGRATE_RESERVE },  [MIGRATE_RESERVE]     = { MIGRATE_RESERVE,     MIGRATE_RESERVE,   MIGRATE_RESERVE }, /* Never used */
}; 

6,debug相关:
 有关伙伴系统的当前状态信息可以在/proc/buddyinfo中获取。

转载于:https://www.cnblogs.com/zhiliao112/p/4251209.html

[linux内存]伙伴系统学习笔记(一)——概念相关推荐

  1. 郝健: Linux内存管理学习笔记-第5节课

    前序文章: 郝健: Linux内存管理学习笔记-第1节课 郝健: Linux内存管理学习笔记-第2节课 郝健: Linux内存管理学习笔记-第3节课 郝健: Linux内存管理学习笔记-第4节课 摘要 ...

  2. 郝健: Linux内存管理学习笔记-第6节课

    前序文章: 郝健: Linux内存管理学习笔记-第1节课 郝健: Linux内存管理学习笔记-第2节课 郝健: Linux内存管理学习笔记-第3节课 郝健: Linux内存管理学习笔记-第4节课 郝健 ...

  3. 郝健: Linux内存管理学习笔记-第4节课

    前序文章: 郝健: Linux内存管理学习笔记-第1节课 郝健: Linux内存管理学习笔记-第2节课 郝健: Linux内存管理学习笔记-第3节课 摘要 page cache free命令的详细解释 ...

  4. 郝健: Linux内存管理学习笔记-第3节课

    摘要 进程的虚拟地址空间VMA(Virtual Memory Area) Pagefault的几种可能性.VMA的作用.major缺页和minor缺页 进程内存消耗的4个概念:vss.rss.pss和 ...

  5. LINUX应用修改硬件寄存器l,郝健: Linux内存管理学习笔记-第2节课【转】

    摘要 slab./proc/slabinfo和slabtop 用户空间malloc/free.内核空间kmalloc/kfee与Buddy的关系 mallopt vmalloc Linux为应用程序分 ...

  6. 郝健: Linux内存管理学习笔记-第1节课【转】

    本文转载自:https://blog.csdn.net/juS3Ve/article/details/80035751 摘要 MMU与分页机制 内存区域(内存分ZONE) LinuxBuddy分配算法 ...

  7. 郝健: Linux内存管理学习笔记-第2节课

    摘要 slab./proc/slabinfo和slabtop 用户空间malloc/free.内核空间kmalloc/kfee与Buddy的关系 mallopt vmalloc Linux为应用程序分 ...

  8. 郝健: Linux内存管理学习笔记-第2节课【转】

    本文转载自:https://blog.csdn.net/juS3Ve/article/details/80035753 摘要 slab./proc/slabinfo和slabtop 用户空间mallo ...

  9. 郝健: Linux内存管理学习笔记-第1节课

    摘要 MMU与分页机制 内存区域(内存分ZONE) LinuxBuddy分配算法 CMA(连续内存分配器) 0.    课前阅读 宋宝华:CPU是如何访问到内存的?--MMU最基本原理 http:// ...

最新文章

  1. 10 分钟学会 5 个酷炫 Linux 命令
  2. 域查看工具开源_SEO人员,如何为网站开源节流?
  3. JavaScript玩转机器学习:​​​​​​​训练模型
  4. 计算机组成原理平均cpi怎么算_2020考研 | 计算机统考408院校盘点,408考试内容难易分析...
  5. shell 并发脚本
  6. 智能优化算法应用:基于GWO优化的指数熵图像多阈值分割 - 附代码
  7. 苹果电脑有哪些很优秀的录屏软件呢?
  8. 红米note9安卓手机 通电自启动 插数据线自动开机 进系统 执行命令自动化 执行脚本
  9. Postman:接口测试项目实战
  10. 如何将java项目部署到linux环境(Tomcat)
  11. python3 进程池Pool 详解
  12. 设备使用python连接阿里Iot
  13. 如何搭建合理的BOM
  14. QtMetaObjectsysmtem详解之三:QMetaObject接口实现
  15. 浏览器 内存限制: 256 Mb时间限制: 1000 ms
  16. windows 10安装sqlyog详细步骤
  17. 以下面四个在读写器作用范围内的电子标签为例说明二进制树型搜索算法选择电子标签的迭代过程。假设这四个电子标签的序列号分别为:
  18. 重置目录服务还原模式管理员密码
  19. 小游戏系列:键盘钢琴——python
  20. 【从零开始学习 UVM】10.5、UVM TLM —— UVM TLM Blocking Get Port

热门文章

  1. mysql开通访问权限_mysql 用户远程访问权限开通
  2. c语言枚举和结构体的区别,全面了解结构体、联合体和枚举类型
  3. 33 计算机维修,33.计算机硬件检测维修与数据恢复竞赛规程(修改)全解.doc
  4. c4d导出obj格式有破面_适合折腾MMD的C4D常用插件及本体合集
  5. 简单 黑苹果dsdt教程_小米Ruby笔记本安装98%完美黑苹果教程
  6. 诺基亚挥别Qt,转手给Digia
  7. 授人以鱼不如授人以渔
  8. 【tyvj1520】 树的直径
  9. [elixir! #0023] 引擎盖下, `IO.puts` 如何运作
  10. VS2012 安装出错 :通道正在关闭