伙伴系统和slab分配器

news/2025/1/11 7:05:06/文章来源:https://www.cnblogs.com/algoshimo/p/18521922

伙伴系统(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

本文来自互联网用户投稿,该文观点仅代表作者本人,不代表本站立场。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如若转载,请注明出处:http://www.hqwc.cn/news/825740.html

如若内容造成侵权/违法违规/事实不符,请联系编程知识网进行投诉反馈email:809451989@qq.com,一经查实,立即删除!

相关文章

+3.3V_Standby和+3.3V_Normal的关系

+3.3V_Standby和+3.3V_Normal的关系 +3.3V_Standby和+3.3V_Normal的区别 +3.3V_Standby和+3.3V_Normal是两种不同的电压供应状态,它们通常用于描述电子设备中的电源管理。+3.3V_Normal是指设备在正常工作状态下,为芯片或电路提供的3.3V电压。这种电压通常用于支持设备的主要功…

2024 NOIP 游记

荷花酥之香甜甘美,不在于其外表的雅致端庄,而在于内里酥心藏匿,纯净高洁。酥香莲影以世 荷花酥之香甜甘美,不在于其外表的雅致端庄,而在于内里酥心藏匿,纯净高洁。9.13 下午到机房后 \(miaomiao\) 问了下我们的刷题情况,速度如何,暑假讲的知识点写的怎么样了。然后说了…

cs1.6 0day rce (一)

1.前言 随着时间的推移,厂商开始放弃不安全的编程语言c++,php。很多内存不安全的代码使用rust重写,并且吸取了教训,也越来越少使用sql字符串拼接,动态反序列化用户数据这种不安全的开发方式,显然网安已经是没落了,许多网安公司亏损。没有啥是永恒不变的,ai在将来也会取代…

搭建微服务

搭建微服务下面通过示例一步步搭建一个分布式微服务1. 业务场景假设有一个业务场景是要实现一个会员在线浏览新闻的应用,支持手机和PC端。分析了详细需求,把项目拆分成三个微服务:会员注册微服务; 会员授权微服务; 浏览新闻微服务;2. 框架简图如图所示: client 是调用 a…

推理优化(1)Kd

吐槽 在连续挖了好几个坑之后,又开了一个新的坑:推理优化。它属于一个llm底层的应用,目的是在操作系统层面来优化llm的执行速度进而优化整个模型。 那闲话少说,我们正式开始。 llm的过程 prefill阶段与decoding阶段 prefilldecoding这两者的区别是prefill会先把所有的数据进…

使用wxpython开发跨平台桌面应用,实现程序托盘图标和界面最小化及恢复处理4j

在前面随笔《基于wxpython的跨平台桌面应用系统开发》介绍了一些关于wxpython开发跨平台桌面应用的总体效果,开发桌面应用,会有很多界面细节需要逐一处理,本篇随笔继续深入该主题,对开发跨平台桌面应用的一些实现细节继续深入研究并总结,介绍程序托盘图标和界面最小化及恢…

搞人工智能开源大语言模型GPT2、Llama的正确姿势s7

(如果想及时收到人工智能相关的知识更新,请点击关注!!) 序言:目前我们每一小节的内容都讲解得非常慢,因为这是人工智能研发中的最基础知识。如果我们不能扎实掌握这些知识,将很难理解后续更复杂且实用的概念。因此,我们甚至采用一个概念一节的方式来编排内容,区分得清…

java.字符流.study

字节流适合文档文件的复制,而字符流适合文本的读取。

java.IO缓冲流.study

1,字节缓冲流 2,字符缓冲流 3,原始流,缓冲流 原始流,缓冲流的性能分析:

Sentinel学习圣经:从入门到精通 Sentinel,最全详解 (40+图文全面总结)

文章很长,且持续更新,建议收藏起来,慢慢读!疯狂创客圈总目录 博客园版 为您奉上珍贵的学习资源 : 免费赠送 :《尼恩Java面试宝典》 持续更新+ 史上最全 + 面试必备 2000页+ 面试必备 + 大厂必备 +涨薪必备 免费赠送 :《尼恩技术圣经+高并发系列PDF》 ,帮你 实现技术自由,…

20222424 2024-2025-1 《网络与系统攻防技术》实验四实验报告

20222424 2024-2025-1 《网络与系统攻防技术》实验四实验报告 1.实验内容恶意代码文件类型标识、脱壳与字符串提取。 使用IDA Pro静态或动态分析,寻找特定输入,使其能够输出成功信息。 分析恶意代码样本rada,并撰写报告。 取证分析实践——Windows 2000系统被攻破并加入僵尸…

猿人学web端爬虫攻防大赛赛题第19题——乌拉乌拉乌拉

题目网址:https://match.yuanrenxue.cn/match/19 解题步骤看触发的数据包。有这么好的事情,没有加密的参数,url非常简单,直接写代码访问。 import requestsurl = "https://match.yuanrenxue.cn/api/match/19?page=1" headers = {Host: match.yuanrenxue.cn, Con…