一、简介

伙伴系统是内核用来管理物理内存的一种算法(需要注意的是它是用来管理物理内存的,而不是映射后的虚拟内存),在物理内存中会除了内核和一些特殊用途的内存外,其余的空闲内存就会交给内核内存管理系统统一管理和分配。

如果没有伙伴系统就会出现内存断断续续的情况,如:

假设这是一段连续的页框,阴影部分表示已经被使用的页框,现在需要申请一个连续的5个页框。这个时候,在这段内存上不能找到连续的5个空闲的页框,就会去另一段内存上去寻找5个连续的页框,这样子,久而久之就形成了页框的浪费。

伙伴系统就是为了缓解这种碎片化(注意:是缓解!!!),它把管理起来的内存分为了不同的组,总共11组,每个组中的内存块大小都是一样的,都是2的幂次个物理页。
这十一组的大小分别是20,21,22,23……2^10,而一个内存页一般是4KB,所以大小就是4KB,8KB,16KB,32KB……4MB,内核就使用11个链表来表示11个不同大小的内存块。

在linux中我们把最小内存块称为page,大小一般为4kb,每个page都有两个状态:

内存管理 -- 伙伴系统(buddy system)相关推荐

  1. 深入浅出内存管理-- 伙伴系统(buddy system)

    buddy system 伙伴系统是内核中用来管理物理内存的一种算法,我们知道内存中有一些是被内核代码占用,还有一些是被特殊用途所保留,那么剩余的空闲内存都会交给内核内存管理系统来进行统一管理和分配, ...

  2. Linux内存管理、伙伴系统(buddy system)等知识点

    引入 之前写过一篇文章将伙伴系统,可以参考:内存池算法简介 物理内存由页分配器(page allocator)接管. 内存块的申请.释放过程. 伙伴算法.阶数. 2^0 为1 ,链表上存放的是一个pa ...

  3. 内存管理算法--Buddy伙伴算法

    http://blog.csdn.net/orange_os/article/details/7392986 采用buddy算法,解决了外碎片问题,这种方法适合大块内存请求,这是因为把页作为单位内存块 ...

  4. Linux内存管理 —— 为buddy做准备:MMU, TLB, ZONE

    本文都是假设系统是32位,页大小为4KB,基于ARM架构(不过和体系结构相关的内容不多). 1. 了解MMU 在启用MMU的Linux内核中,CPU是通过虚拟地址来访问物理内存的.MMU(Memory ...

  5. 内存管理 | 伙伴系统

    内存在进行申请和释放内存的情况下,难免会产生碎片.Linux采用伙伴系统解决外部碎片的问题,采用slab解决内部碎片的问题. 什么是碎片 内部碎片是由于采用固定大小的内存分区,即以固定的大小块为单位来 ...

  6. Linux内存管理基础

    系统启动之Linux内存管理基础 Keywords 非一致内存访问(NUMA)模型.节点(node).内存管理区(Zone).一致内存访问(UMA)模型.内核页表.内存管理区分配器(伙伴系统Buddy ...

  7. Linux内存管理之slab 1:slab原理(+buddy伙伴系统)

    Linux内存管理之slab 1:slab原理(+buddy伙伴系统) 1. 为什么有了Buddy(伙伴系统)还需要slab? 1.1 什么是伙伴系统? 1.1.1 伙伴系统思想 1.2 伙伴系统例子 ...

  8. Linux 内存管理 | 物理内存管理:物理内存、内存碎片、伙伴系统、slab分配器

    文章目录 物理内存 物理内存分配 内存碎片 外部碎片 内部碎片 伙伴系统(buddy system) slab分配器 本文举例为32位Linux 物理内存 在Linux中,内核将物理内存划分为三个区域 ...

  9. Linux 内存管理 | 物理内存、内存碎片、伙伴系统、SLAB分配器

    文章目录 物理内存 物理内存分配 外部碎片 内部碎片 伙伴系统(buddy system) slab分配器 物理内存 在Linux中,内核将物理内存划分为三个区域. 在解释DMA内存区域之前解释一下什 ...

最新文章

  1. pandas使用loc函数更新、修改dataframe指定数据行的内容(update or change the content of specific row of dataframe)
  2. android开机后自动执行shell,init.rc启动 shell脚本
  3. mysql去除内容中的换行和回车
  4. java并发编程(7)-- 线程 自旋锁
  5. linux下oracle11g的安装-图文安装
  6. [转]最世界最牛人博客,你可以学习到太多太多`~~
  7. [紧急通告]关于蓝色理想经典论坛无法访问的声明
  8. 阿里 替换mysql的数据库_mysql替换数据库
  9. 树莓派如何重新装Linux系统,如何给树莓派Raspberry重新安装修复操作系统
  10. 每次发版都搞到晚上11点,我们能不能……
  11. kso- netCore 中 Autofac的使用
  12. 获取 JSON 数据得个数 length
  13. 【产业互联网周报】百度、金山、用友发布最新财报,披露智能云相关业务进展...
  14. rust外服靶场怎么进_rust 学习之旅一, rust编程环境相关
  15. Python解决买五赠二问题
  16. markdown文本居中,段首缩进的方法
  17. charAt()-‘0‘
  18. Python妙用|给小外甥生成10以内加减运算数学作业
  19. 洛谷:P5707 【深基2.例12】上学迟到
  20. MATLAB中的共轭转置与转置

热门文章

  1. SpringBoot整合Mybatis遇到的问题,已解决
  2. 解决在安卓系统微信中打开网页无法上传图片的问题
  3. 低延时高RTSP兼容的EasyPlayer-RTSP-win解决H.264一帧多个nal单元录像花屏问题方案
  4. Attacks on WebView in the Android System阅读笔记
  5. burp抓取https数据包:
  6. linux -ksh,Linux Shell - bash ksh
  7. 软件系统测试版本命名,软件版本命名规范
  8. 贵州大学-编译原理实验2-句法分析器
  9. MySQL errorCode 1129
  10. ShaderJoy —— 一些特效作品展示