二:伙伴系统

内核空间内存分配

目录

内核空间内存分配

伙伴系统


首先从内核空间开始,讲解内存管理模式。

主要分为三种方式:

这篇文章我们集中注意于伙伴系统

伙伴系统

解决了外部碎片问题,针对大块内存分配设计

Linux中的内存管理的“页”大小为4KB。把所有的空闲页分组为11个块链表,每个块链表分别包含1,2,4,8,16,32,64,128,256,512和1024个连续页的页块。最大可以申请1024个连续页,对应4MB大小的连续内存。

分配和释放规则:

由小到大在空闲块数组中找最小的可用空闲块。如空闲块过大,对可用空闲块进行二等分,直到得到合适的可用空闲块

例如,当向内核请求分配(2^(i-1),2^i]数目的页块时,如果存在2^i大小的分区(即块链表中所有页加起来的内存和),将其整个分配。如果对应的块链表中没有足够的空闲页块,则在更大的页块链表中找。如果此时s <= 2^(i-1),则将大小为2^i的分区划分为两个 2^(i-1)的分区。重复这个过程,知道满足(2^(i-1),2^i]。

举例

如果第一次需要一个100K的空间,那么对于1M的空间进行分块处理,第一次分成两个512K,而对于此时还是不满足2i-1 <100 < 2i,继续分片,对第一个512K进行分片,分成2个256K,而256K还是不满足,所有对第一个256K继续进行分片,分成2个128K,满足了条件,所以此时会将第一个A=128K分出去
此时第二个分配请求,分配240K的空间,那么直接就从B=256K分配出去
第三个分配请求,分配64K的空间,从空间查找发现有128K的空间可以分成2个64K的空间,直接分配出去C=64K
第四个分配请求,分配256K的空间,发现只有512K的空间满足要求,直接分配D=256K
第五个释放请求,释放B空间,发现不满足合并规则,那么内存中有3块内存独立的内存空间
第六个释放请求,释放A空间,发现A空间与后面的地址空间被C地址隔离,导致不满足合并规则
第七个分配请求,申请75K的空间,发现第一个128K满足条件,直接分配E=128K
第八个释放请求,释放C空间,发现C相邻的地址空间,满足合并请求,直接合并成128K,合并后与前后相邻的无法再合并
第九个释放请求,释放E空间,发现E释放后,与后面的128K空间合并成256K,又与后面的256K合并成512K,那么现在只剩下D空间
第十个释放请求,释放D空间,发现D释放后,与后面的256K空间合并成512K,而前面的512K又满足合并条件,可以合并成1M的空间

伙伴合并规则为:内核将满足以下条件的三个块称为伙伴:(1)两个块具有相同的大小,记作b。(2)它们的物理地址是连续的。(3)第一块的第一个页的物理地址是2*(2^b)的倍数。如果找到了该内存块的伙伴,确保该伙伴的所有页都是空闲的,以便进行合并。内存继续检查合并后页块的“伙伴”并检查是否可以合并,依次类推。

可以看出,伙伴系统虽然解决了外部碎片,但是会导致内部碎片,例如,针对上图,我们如果需要一个257K的内存空间,那按照其算法,会分配一个512K的内存空间,那么就会有255K的内存空间浪费。

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

如若内容造成侵权/违法违规/事实不符,请联系我们进行投诉反馈qq邮箱809451989@qq.com,一经查实,立即删除!

相关文章

第三章(4):自然语言处理入门

第三章&#xff08;4&#xff09;&#xff1a;自然语言处理入门 在本节中&#xff0c;我们将在简单文本数据上&#xff08;例如一个句子上&#xff09;&#xff0c;执行一系列基本操作&#xff0c;来帮助你熟悉NLP的工作原理&#xff0c;其中一些技术在第三章&#xff08;2&…

SLIC超像素分割算法

SLIC超像素分割算法 《SLIC Superpixels》 摘要 超像素在计算机视觉应用中越来越受欢迎。然而&#xff0c;很少有算法能够输出所需数量的规则、紧凑的超级像素&#xff0c;并且计算开销低。我们介绍了一种新的算法&#xff0c;将像素聚类在组合的五维颜色和图像平面空间中&a…

腾讯云COS+SpringBOot实现文件上传下载功能

文章目录 第一步&#xff1a;在.yml文件中配置对应秘钥内容第二步&#xff1a;完成COSConfig类编写第三步&#xff1a;编写Controller类Bug提示&#xff1a; 最近一直在做一个项目&#xff0c;需要支持视频&#xff0c;音频&#xff0c;图片的上传&#xff0c;前面介绍的都是把…

2023年制造业产品经理考NPDP有什么用?

产品经理国际资格认证NPDP是新产品开发方面的认证&#xff0c;集理论、方法与实践为一体的全方位的知识体系&#xff0c;为公司组织层级进行规划、决策、执行提供良好的方法体系支撑。 【认证机构】 产品开发与管理协会&#xff08;PDMA&#xff09;成立于1979年&#xff0c;是…

beef-xss浏览器劫持

beef-xss浏览器劫持 一&#xff0c;实验拓扑图二&#xff0c;租用一台阿里云&#xff0c;搭建docker环境和beef环境1.租一台阿里云服务器&#xff0c;系统选用ubuntu&#xff0c;计时收费的那种&#xff0c;一个小时几毛钱2.开启策略组3000端口&#xff0c;5000端口4.安装docke…

交友项目【查询好友动态,查询推荐动态】实现

目录 1&#xff1a;圈子 1.1&#xff1a;查询好友动态 1.1.1&#xff1a;接口分析 1.1.2&#xff1a;流程分析 1.1.2&#xff1a;代码实现 1.2&#xff1a;查询推荐动态 1.2.1&#xff1a;接口分析 1.2.2&#xff1a;流程分析 1.2.3&#xff1a;代码实现 1&#xff1a…

十五分钟带你学会 Electron

文章目录 什么是 Electron为什么要选择 Electron安装 Electron桌面CSDN实战Electron 基础配置Electron 进程主进程渲染进程主进程与渲染进程的区别主进程与渲染进程的通信 Electron 跨平台问题Electron 部署打包应用程序发布应用程序 Electron 跨端原理总结 什么是 Electron E…

数据库实验 | 第1关:建立和调用存储过程(不带输出参数的存储过程)

任务描述 本关任务&#xff1a; 该实验是针对数据表jdxx&#xff0c;该数据表有四个字段&#xff0c;分别是省份(sf)、城市(cs)、区县(qxmc)、街道(name)。 例如&#xff0c;查询天心区(qxmc)的所有字段的值结果如图所示 任务要求 建立存储过程 dqxx(in city varchar(10),i…

QT QPainter坐标系统和坐标变换

一、坐标变换函数 QPainter 在窗口上绘图的默认坐标系统如图下图所示&#xff0c;这是绘图设备的物理坐标。为了绘图的方便&#xff0c;QPainter 提供了一些坐标变换的功能&#xff0c;通过平移、旋转等坐标变换&#xff0c;得到一个逻辑坐标系统&#xff0c;使用逻辑坐标系统…

BEV+Transformer对无人驾驶硬件体系的巨大改变

摘要&#xff1a; BEVTransformer彻底终结了2D直视图CNN时代&#xff0c;BEVTransformer对智能驾驶硬件系统有着什么样的影响&#xff1f;背后的受益者又是谁&#xff1f; 图片来源&#xff1a;特斯拉 BEVTransformer是目前智能驾驶领域最火热的话题&#xff0c;没有之一&…

【区块链】走进web3的世界-DApp如何快速接入wall

在web3中&#xff0c;wall是您进入区块链的一个标识&#xff0c;每个用户使用的wall都不近相同&#xff0c;因此接入更多的wall是很有必要的&#xff0c;从用户角度来说&#xff0c;非必要情况下&#xff0c;我是不愿意去额外下载wall的。因此今天我们来聊一下&#xff0c;DApp…

开发常用的 Linux 命令2(文件的查看、搜索和权限)

开发常用的 Linux 命令2&#xff08;文件的查看、搜索和权限&#xff09; 作为开发者&#xff0c;Linux是我们必须掌握的操作系统之一。因此&#xff0c;在编写代码和部署应用程序时&#xff0c;熟练使用Linux命令非常重要。这些常用命令不得不会&#xff0c;掌握这些命令&…

【hello Linux】进程程序替换

目录 1. 程序替换的原因 2. 程序替换原理 3. 替换函数 4. 函数解释 5. 命名理解 6.简陋版shell的制作 补充&#xff1a; Linux&#x1f337; 1. 程序替换的原因 进程自创建后只能执行该进程对应的程序代码&#xff0c;那么我们若想让该进程执行另一个“全新的程序”这 便要用…

“分割一切”大模型SAM、超轻量PP-MobileSeg、工业质检工具、全景分割方案,PaddleSeg全新版本等你来体验!

图像分割是计算机视觉的一项基础技术&#xff0c;其目标是将图像中的像素按内容分成不同的类别。它在许多领域有重要应用&#xff0c;比如自动驾驶、工业质检、医疗图像分析、遥感图像解译等。 导读 PaddleSeg 是飞桨高性能图像分割开发套件&#xff0c;在图像分割领域做了大…

IC-14W网络IC卡读写器_银河麒麟桌面操作系统V10适配测试报告

银河麒麟操作系统产品NeoCertify 认证测试报告 系统版本&#xff1a;银河麒麟桌面操作系统V10 厂商名称&#xff1a; 广州荣士电子有限公司 认证产品&#xff1a;IC-14W网络IC卡读写器 测试日期&#xff1a; 2022-11-04 …

基于html+css的图片展示11

准备项目 项目开发工具 Visual Studio Code 1.44.2 版本: 1.44.2 提交: ff915844119ce9485abfe8aa9076ec76b5300ddd 日期: 2020-04-16T16:36:23.138Z Electron: 7.1.11 Chrome: 78.0.3904.130 Node.js: 12.8.1 V8: 7.8.279.23-electron.0 OS: Windows_NT x64 10.0.19044 项目…

【unity实战】随机地下城生成1——随机生成地下城初稿(含源码)

先看看实现的最终效果 #用到的素材 https://download.csdn.net/download/qq_36303853/87712757 导入素材 导入房间图片素材,配置图片信息信息 点击sprite Editor,开始切割图片 随机创建基本房间 已一个白底图片模拟房间预设体 思路:建立一个空的 GameObject 用来做…

平凡的Python为什么能一跃成为世界排名第一的语言

本文首发自「慕课网」&#xff0c;想了解更多IT干货内容&#xff0c;程序员圈内热闻&#xff0c;欢迎关注"慕课网"&#xff01; 作者&#xff1a;大周|慕课网讲师 一、前言 本文将结合个人经历为各位同学客观的分析是否有学习Python的必要、Python适合谁学、为什么…

牛客竞赛字符串专题 NC237664 Typewriter(SAM + 树上倍增 + 二分 + 线段树优化dp)

本题主要考察了如何用 SAM 求原串每个前缀对应的能与非后缀匹配的最长后缀&#xff0c;以及如何求 SAM 每个节点 right 集合的 min / max。很有价值的一道串串题。 题意&#xff1a; 你有一台打字机&#xff0c;你需要用它打出一段只由小写字母构成的文本S。 设某个时刻&#…

Linux基础—DHCP原理与配置

Linux基础—DHCP原理与配置 一、DHCP工作原理1.了解DHCP服务使用DHCP的优势DHCP的分配方式 2.DHCP的IP地白动获取工作原理: 二、配置DHCP服务器三、DHCP场景应用实验 一、DHCP工作原理 1.了解DHCP服务 DHCP(Dynamic HostConfiguration Protocol&#xff0c;动态主机配置协议) …