首页 > 其他分享 >伙伴系统和slab分配器

伙伴系统和slab分配器

时间:2024-11-02 14:42:05浏览次数:3  
标签:buddy system 分配 内存 分配器 slab 伙伴

伙伴系统(buddy system)

当一个请求需要分配m个物理页,buddy system会寻找一个有\(2^n\)页的块(\(2^n-1 < m < 2^n\))分配给他。

我们使用一个空闲链表数组实现buddy system,其中a[i]代表块大小为\(2^i个页\)(每页为4kb)

假设我们要分配15kb内存,根据buddy system,我们需要寻找一个16kb(4页)大小的块
因为有4页,所以我们需要查看链表数组的第2项(代表\(2^2\))。
由下图发现,数组的第二项为空,代表此时还没有16kb大小的空闲块。

buddy system会继续查找更大的块(图中为32kb),将32kb进行分类操作,获得两个16kb大小的块。
将其中一个用于服务请求,另一个则插入到第2条链表(数组的第二项)

SLAB分配器

buddy system最小的分配单位为1页(4k)。但很多时候,内核需要分配的内存大小远小于4k,这时候如果还用buddy system会出现严重的内部碎片问题。于是有了用于分配小内存的SLAB分配器。

SLAB分配器只分配大小固定的内存块,对于每一种块的大小,SLAB都会用独立的内存资源池进行分配

SLAB分配器向buddy system申请一定大小的物理内存,并将获得的物理内存块作为一个slab(一个数据结构)。slab被划分为等长的小块内存,被组织成空闲链表的形式

所有的分配请求从current指针指向的slab中获得空闲内存块。当SLAB分配器接受一个分配请求时,它首先定位最适合大小的内存资源池,从current指针指向的slab中拿出一个空闲块。

若拿出一个空闲块后,该slab不再拥有空闲块,则这个slab中的内存块已经全部分配完了。发生两个移动 : 将该slab移动到full里面来,并从partial指向的链表中取出一个slab交给current。

当释放一个块到相应的slab空闲链表中,若该slab已全部分配完,则移动到partial,若原本仅分配出一块,那么将其释放还给buddy system

标签:buddy,system,分配,内存,分配器,slab,伙伴
From: https://www.cnblogs.com/algoshimo/p/18521922

相关文章

  • SAP B1 三大主数据——业务伙伴主数据(一)
    文章目录概要一、业务伙伴主数据窗口1.业务伙伴主数据窗口-查找状态2.业务伙伴主数据窗口-添加状态二、业务伙伴主数据-部分字段解释1.常规区域2.常规页签小结概要SAPB1系统的三大主数据是指业务伙伴主数据、物料主数据和科目表。本文主要是业务伙伴主数据窗口的......
  • 3招提高用户粘性,让你的客户成为终身伙伴
    在数字化时代,企业之间的竞争变得异常激烈,如何在这个快速变化的市场中保持用户的忠诚度,让他们成为你的终身客户,是每个企业都在思考的问题。今天,我们就来探讨三个有效的方法,帮助你提高用户粘性,让客户不仅仅是一次性的交易对象,而是成为你品牌的忠实支持者。 一、充分尊重用户......
  • AI伙伴:借助人工智能将新老代码对比分析后直出结果
    实在太强了,事情经过就是同样实现一个效果,有一段新代码,还有一段老代码,但是怕新代码有什么遗漏,就让AI去比较,然后给出答案,结果是真的太爽了。新老代码老代码:写着写着把老代码改得面目全非了,其实是无法运行的。constremoveTab=(targetIndex:string)=>{//如果是删......
  • btslab笔记
    本文只涉及漏洞的验证与解题思路不进行安装等基础教学1.vulnerability.injection.sqlinjectionurl:https://172.16.26.44/btslab/vulnerability/ForumPosts.php?id=1第一步:判断注入类型字符型还是数字型:GET/btslab/vulnerability/ForumPosts.php?id=1GET/btslab/vulnera......
  • XSSLab保姆级教程
    XSS(Cross-SiteScripting)即为跨站脚本攻击。XSS-Lab是一个XSS的练习平台。可以在BUUOJ上很方便的进行练习。以下是我在做XSS-Lab的时候总结的题解和一些思路,给想要刷题的同学提供一些参考。1.通用payload<script>alert(1)</script>可以直接加入新标签level1闭合原有标签后......
  • Swarm 框架登场:OpenAI 第 3 阶段「敲门砖」;马斯克的 Teslabot 实际有人远程操控丨 RTE
       开发者朋友们大家好: 这里是「RTE开发者日报」,每天和大家一起看新闻、聊八卦。我们的社区编辑团队会整理分享RTE(Real-TimeEngagement)领域内「有话题的新闻」、「有态度的观点」、「有意思的数据」、「有思考的文章」、「有看点的会议」,但内容仅代表编......
  • 时隔半年 DotNetGuide 已突破了 6.6K + Star,持续更新,欢迎更多小伙伴PR投稿!
    前言记得今年5月份的时候DotNetGuideGitHub才突破5kStar,经过持续不断地输出时隔半年DotNetGuide已突破了6.6K+Star!并且由我创建的DotNetGuide技术社区微信交流群人数也突破了3200+,非常开心和自豪能够帮助到这么多对C#/.NET感兴趣的小伙伴。之后还是会持续更新,努力输出更......
  • 铁威马新品F8 SSD Plus:假期出行的完美存储“伙伴”
    国庆小长假刚刚结束大家都去哪里玩了呢?假期出行如何安全、便捷地存储和管理大量的照片、视频和其他文件也是一个不容忽视的问题 铁威马秋季系列新品NAS的发售为我们提供了多种选择  而F8SSDPlus性能与便携的完美融合成为假期出行不可或缺的“好伙伴” F8......
  • 鸿蒙智联仅此4家生态解决方案合作伙伴
    在当今快速发展的物联网时代,鸿蒙智联(HarmonyOSConnect)作为华为面向智能硬件生态伙伴打造的全新品牌和开放平台,正引领着智能硬件行业的变革与创新。鸿蒙智联生态解决方案合作伙伴,作为这一生态中的重要力量,通过提供全方位的解决方案和技术支持,助力生态产品伙伴快速融入鸿蒙智联......
  • slab分配器
    主要参考这本书:《UnderstandingtheLinuxvirtualmemorymanager》,链接:https://www.eecg.utoronto.ca/~yuan/teaching/archive/ece344_2017w/linux-vmm.pdf,书上的Chapter9就是讲slab分配器的。注意这本书是2004的,很多参数可能已经过时了,这个博客会结合我自己的电脑硬件配置来......