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的幂次方大小进行分配内存块。
    • 另外拆分和合并涉及到 较多的链表和位图操作,开销还是比较大的。
     

  • 相关阅读:
    ASP.NET MVC 重点教程一周年版 第二回 UrlRouting
    ASP.NET MVC 重点教程一周年版 第三回 Controller与View
    DynamicData for Asp.net Mvc留言本实例 下篇 更新
    Asp.net MVC视频教程 18 单选与复选框
    使用ASP.NET MVC Futures 中的异步Action
    ASP.NET MVC RC 升级要注意的几点
    ATL、MFC、WTL CString 的今生前世
    msvcprt.lib(MSVCP90.dll) : error LNK2005:已经在libcpmtd.lib(xmutex.obj) 中定义
    关于Windows内存的一些参考文章
    Windows访问令牌相关使用方法
  • 原文地址:https://www.cnblogs.com/guoxianqi2020/p/13948324.html
Copyright © 2011-2022 走看看