内存管理篇-04伙伴系统

本小节有几个重要的知识点:

  • 伙伴系统的思想
  • 伙伴系统的实现
  • 伙伴系统分配器:内存块的申请、释放过程
  • 伙伴算法和阶数

1.伙伴系统的思想

        针对某个某个zone分区,(1)把物理地址相连的空闲页连接起来合成一个物理块,因此会在系统中分散着一堆物理块;(2)然后将大小相同的物理块用链表连接起来;(3)用free_area[order] 指向对应的链表。从而初步缓解了内存碎片化。

        伙伴系统主要用于管理物理内存,主要管理page。首相将系统中的内存分为大小不同的物理块,对于物理地址相连的物理页合并成大的物理块,对于相同大小的物理块用链表连接起来,通过一个struct free_area free_are[MAX_ORDER]保存,每个元素都指向一个链表(他们内存块大小不一样)。最大物理块是4MB。假如用户正好申请4KB,就直接从块为4KB的链表摘除一块出来,如果正好没有了,就会从8KB的地方拆分2个4KB出来,一个分给用户,另一个交给下一级的链表。相反,如果用户释放内存,如果发现释放后的page和旁边的相连,就会逆向的把它合并在一起。

2.伙伴系统的实现

首先,伙伴系统的实现是基于分区zone的实现的。首先回顾一下zone结构体。伙伴系统主要是指对free_area的管理

free_area[]结构体存放了各个链表的表头。lowmem_reserve还会对内存做一些备份。free_area并不会指向所有的内存,只会把分区的大部分空闲内存放进来。

示例:以下是ubuntu上查看buddyinfo的信息,12列对应的就是ORDER=0-11时的free_area[order]链表上的内存。

3. 新版伙伴系统实现

        为了进一步优化内存碎片化,在原来的伙伴系统上,free_area[order]上引入了type的概念。对每个free_area[order]进行分类,观察哪些是可移动的,不可移动的,可回收的,预留的,隔离的以及CMA等等。

问题:如何判断某个页是否被添加到伙伴系统中?

  • struct page 结构体中的成员atomic_t _mapcount; 这个_mapcount代表了是否发送了映射。unsigned long private; 表达当前内存块的大小,也就是order。记录着你是从哪个内存块分配出去的,如果是1就表示从第二组内存块分配下来的内存,并且大小是8KB由两个物理页组成的。atomic_t _refcount; 表示页表被引用记录的次数

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

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

相关文章

数据结构——冒泡、选择、插入和希尔排序

目录 引言 冒泡排序 1.算法思想 2.算法步骤 3.代码实现 4.复杂度分析 选择排序 1.算法思想 2.算法步骤 3.代码实现 (1)优化前 (2)优化后 4.复杂度分析 插入排序 1.算法思想 2.算法步骤 3.代码实现 4.复杂度分析 希尔排序 1.算法思想 2.算法步骤 3.代码实…

tcp 网络通信及抓包工具的使用

tcp网络通信 本地回环(Loopback)的概念 本地回环地址是一个特殊的IP地址,用于指向计算机本身的网络接口。在IPv4中,最常见的本地回环地址是127.0.0.1,而在IPv6中则是::1。这个地址用于测试网络软件,确保网…

量化交易backtrader实践(四)_评价统计篇(1)_内置评价

背景 通过对基础的学习和不断深入的实践,当我们已经能够制作出快速获取数据,以及制作出多个股票 乘上多种策略进行回测的部分的时候,我们就会明显发现数据有点多了,比如10支股票都用了3种策略就得到30段数据,一页显示…

亲测好用,ChatGPT 3.5/4.0新手使用手册,最全论文指令手册~ 【2024年 更新】

本以为遥遥领先的GPT早就普及了,但小伙伴寻找使用的热度一直高居不下,其实现在很简单了! 国产大模型快200家了,还有很多成熟的国内AI产品,跟官网一样使用,还更加好用~ ① 3.5 大多数场景是够用的&#xff…

Mix|使用VS2017CMake构建Qt工程 仿照MVS(仅用于学习)

MVS下载链接:https://www.hikrobotics.com/cn/machinevision/service/download/?module0 CMake工程构建参考:CMake|VS2017CMake3.8搭建Qt项目 文章目录 效果图整体结构实现代码最外层CMakeLists.txt代码实现及CMakeLists.txt搭建CMakeLists.txt搭建主函…

[创业之路-141] :产品经理 - NPDP概述

目录 一、产品经理以及主要职责 1.1 概述 1、市场调研与需求分析 2、产品规划与设计 3、项目管理与协调 4、产品推广与销售支持 5、产品运营与维护 6、其他职责 1.2 产品经理与项目经理的职责分工 1.2.1 职责区别 产品经理 项目经理 1.2.2 合作方式 二、什么是NP…

EXCEL——Vlookup17个高级用法

大纲 一、基本语法 1、参数详解 二、入门篇 1、单条件查找 2、屏蔽查找返回的错误值 三、进阶篇 1、反向查找 2、包含查找 3、区间查找 4、含通配符查找 5、多列查找 6、多区域查找 四、高级篇 1、多条件查找 2、合并单元格查找 3、带合并单元格的多条件查找 …

[数据集][目标检测]夜间老鼠检测数据集VOC+YOLO格式316张1类别+视频文件1个

数据集格式:Pascal VOC格式YOLO格式(不包含分割路径的txt文件,仅仅包含jpg图片以及对应的VOC格式xml文件和yolo格式txt文件) 图片数量(jpg文件个数):316 标注数量(xml文件个数):316 标注数量(txt文件个数):316 标注类别…

MATLAB进阶:矩阵代数

今天我们学习矩阵在MATLAB中的运算。 运算符 与数组运算相同: A. ’转罝 A’(共轭)转罝 共轭转置(A’或A†): 对于一个复数矩阵A,其共轭转置记作A’或A†。共轭转置不仅将矩阵A的行和列互…

大话C语言:第46篇 C语言项目工程化之Makefile详解

1 Makefile概述 Makefile是一种用于自动化构建和管理程序的工具,以文本文件的形式存在。它主要记录了程序的编译规则、依赖关系和操作指令,使得在开发过程中能够轻松地进行代码的编译、链接和部署。 Makefile文件中的命令有一定规范,一旦该文…

Unity--XLua调用C#

Unity–XLua调用C# 由于Unity/C# 和lua是两种语言,两种语言的特性不一样,因此,如果要互相调用的话,需要第三方作桥梁. 因此,为了在Unity中/C#中使用lua的特性,需要在Unity中安装插件,Xlua/toLu…

【学习笔记】8、脉冲波形的变换与产生

本章简略记录。 8.1 单稳态触发器(脉冲触发) 单稳态触发器 应用于 :(1)脉冲整型(2)脉冲延时 (3)定时 单稳态触发器的工作特性: 没有触发脉冲作用时&#xf…

Flink入门(五)--Flink算子

Map DataStream → DataStream 一个接受一个元素并产生一个元素的函数。 示例 dataStream.map { x > x * 2 } FlatMap DataStream → DataStream 一个接受一个元素并产生零个、一个或多个元素的函数。 例如 dataStream.flatMap { str > str.split(" ") }…

besier打断和升阶,高阶性质

欢迎关注更多精彩 关注我,学习常用算法与数据结构,一题多解,降维打击。 问题描述 对besier曲线在u处打断,生成两条besier曲线对besier曲线升阶处理 bezier高阶性质 求导推导 P ( t ) ∑ i 0 n B i n ( t ) b i \boldsymbol …

Python 爬虫入门(十二):正则表达式「详细介绍」

Python 爬虫入门(十二):正则表达式 前言一、正则表达式的用途二、正则表达式的基本组成元素2.1 特殊字符2.2 量词2.3 位置锚点2.4 断言2.5 字符集2.6 字符类2.6.1 基本字符类2.6.2 常见字符类简写2.6.3 POSIX字符类2.6.4 组合使用 三、 正则表…

Datawhale X 李宏毅苹果书 AI夏令营 学习笔记(二)

自适应学习率 我们梯度下降在参数更新上,公式是 W t W t − 1 − η g t , η 是学习率, g t 是梯度 W_tW_{t-1}-\eta g_t,\eta是学习率,g_t是梯度 Wt​Wt−1​−ηgt​,η是学习率,gt​是梯度…

03_React 收集表单数据和 组件生命周期

React 收集表单数据和 组件生命周期 一、收集表单数据1、例子1.1 需求:定义一个包含表单的组件,输入用户名密码后,点击登录提示输入信息 2、理解:包含表单的组件分类2.1 受控组件2.2 非受控组件 二、高阶函数\_函数柯里化1、复习-…

9 正则表达式:Java爬虫和正则表达式、String中的正则表达式方法(基本语法7)

文章目录 前言一、正则表达式1 [ ] 语法(1)[ABC] 和 [^ABC](2)[A-Z]和[a-zA-Z]小总结2 特殊字符语法(\w 这些)3 数量符4 \ 、()、 |5 锚点 ^ 和 $,\b,\B6 (?i) : 忽略其后面的大小写 ---- 这个Java是可以的,其他语言我不知道(正则表达式虽然大多通用,但也有部分是…

zabbix5.0与7.0版本区别 切换建议

Zabbix5.0和Zabbix7.0的区别 1. 性能和扩展性优化 1.1 高效的数据处理和存储 优化的数据库性能: Zabbix 7.0 在数据库层面进行了多项优化,以减少查询延迟和提高数据处理速度。这包括对数据库结构的改进和索引优化,使得大规模数据的读取和写…

Spark-driver和executor启动过程

一、上下文 《Spark-SparkSubmit详细过程》详细分析了从脚本提交任务后driver是如何调用到自己编写的Spark代码的,而我们的Spark代码在运行前必须准备好分布式资源,接下来我们就分析下资源是如何分配的 二、Spark代码示例 我们以一个简单的WordCount程…