zoukankan      html  css  js  c++  java
  • Linux内存-伙伴系统

    一、外部碎片

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

    二、伙伴系统
    Linux内核通过伙伴算法来管理物理内存。
    伙伴系统(BuddySystem)在理论上是非常简单的内存分配算法。
    它的用途主要是尽可能减少外部碎片,同时允许快速分配与回收物理页面。
    伙伴系统的宗旨就是用最小的内存块来满足内核的对于内存的请求
     
    三、伙伴算法分配原理
    伙伴算法把内存所有的空闲页框分组为11个块链表,每个块链表分别包含大小为1、2、4、8、16、32、64、128、256、512和1024个连续页框的页框块。
    最大可以申请1024个连续页框,也即4MB大小的连续空间。
     
    假设要申请一个256个页框的块,
    1、先从256个页框的链表中查找空闲块,如果有,则分配
    2、如果没有,就去512个页框的链表中找,找到了即将页框分为两个256个页框的块,一个分配给应用,另外一个移到256个页框的链表中。
    3、如果512个页框的链表中仍没有空闲块,继续向1024个页框的链表查找,如果仍然没有,则返回错误。
     
    三、伙伴算法释放原理
    内存的释放是分配的逆过程,也可以看作是伙伴的合并过程。
    当释放一个块时,
    1、先在其对应的链表中考查是否有伙伴存在,如果没有伙伴块,就直接把要释放的块挂入链表头
    2、如果有,则从链表中摘下伙伴,合并成一个大块,
    3、继续考察合并后的块在更大一级链表中是否有伙伴存在,直到不能合并或者已经合并到了最大的块。
     
    四、查看各个连续页框的数量
    # cat /proc/buddyinfo 
    Node 0, zone      DMA      1      0      1      0      2      1      1      0      1      1      3 
    Node 0, zone    DMA32    389    319    319    239    272    194    283    296    220      0      0 
    Node 0, zone   Normal 428672 598338 153982  10634   1440    386    109     48     11      0      0 
    Node 1, zone   Normal 778744 1170289 240097  16045   1986    251     35      2      0      0      0 

    我们拿Normal区域进行分析,

    第二列值,表示当前系统中normal区域,可用的连续两页的数量为598338
    第三列值,表示当前系统中normal区域,可用的连续四页的数量为153982
     
    五、优点和缺点
    1、优点
    • 解决内存碎片问题
    • 避免把内存拆得太碎得同时,使内存的分配和释放过程迅速
     
    2、缺点
    • 虽然解决了内存碎片问题,但是该算法中,一个很小的块往往会阻碍一个大块的合并。(一片内存中仅一个小的内存块没有释放,旁边两个大的就不能合并。)
    • 算法中有一定的浪费现象,伙伴算法是按2的幂次方大小进行分配内存块。
    • 另外拆分和合并涉及到 较多的链表和位图操作,开销还是比较大的。
     

  • 相关阅读:
    洛谷 P1498 南蛮图腾
    洛谷 P1538 迎春舞会之数字舞蹈
    洛谷 P1112 波浪数
    洛谷 P1102 A−B数对
    数字量化值Digital Number, 辐射亮度Radiance, 反射率Reflectance,发射率Emissive
    ENVI下基于劈窗算法从MODIS数据中反演海表温度
    ENVI 5.1安装教程
    一些链接
    1、GeometryService计算面积和长度(Calculate_Feature_Length_Or_Area)功能实现
    1、GeometryService的缓冲区(Buffer)功能实现
  • 原文地址:https://www.cnblogs.com/guoxianqi2020/p/13948324.html
Copyright © 2011-2022 走看看