内存管理机制

aCoral内存管理机制

aCoral内存管理机制在伙伴系统基础上,采用了位图法方式提高内存分配和回收速度的确定性,更能满足系统实时性的需求。

aCoral内存管理机制分为两级,上一级采用改进的伙伴系统,负责确定要分配的内存的大小,下一级根据上一级确定的大小进行具体物理内存分配。

  1. 因为第一级内存管理总会分配2N大小的内存,解决了系统外部碎片和内部碎片问题。
  2. 第二级采用了固定块和可变大小两种内存管理方式。
  3. 除内核外,应用程序一般直接使用第一级的伙伴系统。

aCoral第一级内存管理算法

在这里插入图片描述

真正的物理内存被分成了两部分,一部分由内存控制块结构所使用,内存初始化函数buddy_init()将逐个初始化这些结构。剩下的内存是用户可用内存。

这些内存被划分为众多基本块,每个基本块的大小通过常量BLOCK_SIZE配置,这些基本内存块是从0到n逐个标记的。这样内存的分配和回收都是基于序列的。

逻辑上这些内存块被组织成了m层,最大层数m通过LEVEL配置,第0层每个内存块大小为BLOCK_SIZE,第1层每个内存块大小为2*BLOCK_SIZE,到第n层内存块大小为BLOCK_SIZE<<n。

aCoral第二级内存管理算法

内存资源池存储管理

内存资源池管理属于固定大小内存管理系统,内存池中内存块的分配和回收是基于第一级内存管理系统的,因为内存池中的内存块时由第一级内存管理的。

内存池资源管理系统主要用于操作系统的一些常用结构的内存管理
例如,线程控制块TCB、事件控制块ECB等,这些结构在系统运行过程中,比如会用到,而且会频繁地建立和释放。

使用第一级管理系统当然可以满足这些需求,为什么还要用的内存资源池这种机制进一步管理这些结构,对其进行内存分配和回收呢?

虽然第一级内存管理算法单次分配和回收内存的效率已经很高,但是频繁地回收和释放还是要消耗一定的时间。如果可以事先分配一些常用结构大小的内存,并把他们组织起来形成内存资源池,那么当操作系统真正需要的时候只需要将这些指针返回即可。在操作系统使用完这些结构并且销毁时,就可以把这些结构所占用的内存还给内存资源池,而不用进行真正的内存回收。

在这里插入图片描述
每一类资源[如线程控制块TCB结构(aCoral定义了六种资源类型)]可以拥有多个资源池Pool,每个资源池只为一种类型的资源所使用(内存体现就是相同大小内存块)。

资源控制块Pool_ctrl负责一类资源的管理,一个资源池控制块会对应多个资源池,如图所示就包括两个资源池Pool1、Pool2。

开始的时候,系统会根据需要为每一类资源控制块(如TCB)分配一些资源池,一旦资源池的资源用完时,可以重新申请一个资源池,然后挂载到空闲资源池链表上。每个资源池对应一个Pool结构,这个结构有两个重要的指针base_adr和res_free,分别用来指向资源对象数组的基址和空闲资源对象,每个资源对象对应一个资源控制块,如线程控制块TCB。如果某资源池的资源对象都用完时,res_free会指向NULL。

typedef struct {unsigned int type;unsigned int size;            ///<size of one single resource eg.size of TCBunsigned int num_per_pool;    ///<the amount of resource in one pool eg.there are 20 TCBs in one TCB poolunsigned int num;             ///<the amount of pools which contain a certain type of resource(maybe TCB) in system at present will be added once one pool created; restrict by max_pools below;unsigned int max_pools;       ///<upbound of the amount of pools for this type. eg. the number of TCB pool limited to 2 because that there are at most 40 thread in system at one time and every TCB pool contains 20.acoral_list_t *free_pools;acoral_list_t *pools,list[2];unsigned char *name;
}acoral_pool_ctrl_t;
/*** @brief  资源池
*/
typedef struct {void *base_adr; ///<这个有两个作用,在为空闲的时候,它指向下一个pool,否则为它管理的资源的基地址void *res_free;int id;unsigned int size;unsigned int num;unsigned int position;unsigned int free_num;acoral_pool_ctrl_t *ctrl;acoral_list_t ctrl_list;acoral_list_t free_list;
}acoral_pool_t;

为了实现资源池的管理,aCoral定义了资源对象。

typedef union {int id; //资源ID,当资源池空闲时,ID的高16位表示该资源对象在资源池的编号int next_id;
}acoral_res_t;

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

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

相关文章

数据分析综述

⭐️⭐️⭐️⭐️⭐️欢迎来到我的博客⭐️⭐️⭐️⭐️⭐️ &#x1f434;作者&#xff1a;秋无之地 &#x1f434;简介&#xff1a;CSDN爬虫、后端、大数据领域创作者。目前从事python爬虫、后端和大数据等相关工作&#xff0c;主要擅长领域有&#xff1a;爬虫、后端、大数据…

C#类与类库调用注意事项

类 创建一个类文件&#xff0c;myfunction.cs //静态类&#xff1a;直接引用、无需实例化 static public int jiafa(int V) //普通类&#xff1a;引用时需要实例化 public int jiafa(int V)using System; using System.Collections.Generic; using System.Diagnostics; using …

ChatGPT追祖寻宗:GPT-2论文要点解读

论文地址&#xff1a;Language Models are Unsupervised Multitask Learners 上篇&#xff1a;GPT-1论文要点解读 在上篇&#xff1a;GPT-1论文要点解读中我们介绍了GPT1论文中的相关要点内容&#xff0c;其实自GPT模型诞生以来&#xff0c;其核心模型架构基本没有太大的改变&a…

Vue中extend基本用法

1.Vue.extend(options) 参数: {Object} options用法&#xff1a; 使用基础Vue构造器&#xff0c;创建一个"子类"。参数是一个包含组件选项的对象。 data选项是特例&#xff0c;需要注意&#xff0c;在Vue.extend()中它必须是函数。 <html><head><tit…

读高性能MySQL(第4版)笔记08_创建高性能索引(上)

1. 索引 1.1. 键&#xff08;key&#xff09; 1.2. 存储引擎用于快速找到记录的一种数据结构 1.3. 当表中的数据量越来越大时&#xff0c;索引对性能的影响愈发重要 1.4. 在数据量较小且负载较低时&#xff0c;缺少合适的索引对性能的影响可能还不明显 1.5. 索引优化是对查…

C#__线程池的简单介绍和使用

/*线程池原理&#xff1a;&#xff08;有备无患的默认备用后台线程&#xff09;特点&#xff1a;线程提前建好在线程池;只能用于运行时间较短的线程。*/class Program{static void Main(string[] args){for (int i 0; i < 10; i){ThreadPool.QueueUserWorkItem(Download); …

【Redis】Redis作为缓存

【Redis】Redis常见面试题&#xff08;2&#xff09; 文章目录 【Redis】Redis常见面试题&#xff08;2&#xff09;1. 缓存2. Redis作为缓存2.1 缓存雪崩2.2 缓存穿透2.3 缓存击穿2.4 缓存雪崩、缓存穿透、缓存击穿的区别2.5 缓存预热2.6 如何保证缓存和MySQL双写一致 【Redis…

Java 设置免登录请求接口被拦截问题

1、在设置免登录时&#xff0c;前端将请求的路由添加到白名单后&#xff0c;请求接口还是被拦截到了&#xff0c;将请求接口也设置后还是会被拦截跳转到登录页面 通过JAVA 注解 Anonymous 进行设置匿名访问就可以了

【Unity编辑器扩展】| 自定义窗口和面板

前言【Unity编辑器扩展】| 自定义窗口和面板一、EditorWindow二、ScriptableWizard三、编辑器绘制3.1 文本输入3.2 空行3.3 滑动条、进度条3.4 枚举选择3.5 其他总结前言 前面我们介绍了Unity中编辑器扩展的一些基本概念及基础知识,还有编辑器扩展中用到的相关特性Attribute介…

华为云云耀云服务器L实例评测|服务器反挖矿防护指南

前言 本文为华为云云耀云服务器L实例测评文章&#xff0c;测评内容是 云耀云服务器L实例 反挖矿防护指南 系统配置&#xff1a;2核2G 3M CentOS7.9 之前的文章中『一文教你如何防御数据库恶意攻击』&#xff0c;我们讲到黑客如何通过攻击数据库来获取权限&#xff0c;以及我们…

pyarmor 加密许可证的使用

一 pyarmor 许可证的用处 文档&#xff1a;5. 许可模式和许可证 — Pyarmor 8.3.6 文档 试用版本有如下的限制&#xff1a; 加密功能对脚本大小有限制&#xff0c;不能加密超过限制的大脚本。 混淆字符串功能在试用版中无法使用。 RFT 加密模式&#xff0c;BCC 加密模式在试…

《确保安全:PostgreSQL安全配置与最佳实践》

&#x1f337;&#x1f341; 博主猫头虎&#xff08;&#x1f405;&#x1f43e;&#xff09;带您 Go to New World✨&#x1f341; &#x1f405;&#x1f43e;猫头虎建议程序员必备技术栈一览表&#x1f4d6;&#xff1a; &#x1f6e0;️ 全栈技术 Full Stack: &#x1f4da…

线性代数的本质(十)——矩阵分解

文章目录 矩阵分解LU分解QR分解特征值分解奇异值分解奇异值分解矩阵的基本子空间奇异值分解的性质矩阵的外积展开式 矩阵分解 矩阵的因式分解是把矩阵表示为多个矩阵的乘积&#xff0c;这种结构更便于理解和计算。 LU分解 设 A A A 是 m n m\times n mn 矩阵&#xff0c;…

【网络编程】深入理解TCP协议一(三次握手四次挥手、标记位、确认应答机制、超时重传机制)

TCP协议 1.三次握手四次挥手2.TCP协议段格式3.标记位介绍4.确认应答机制5.超时重传机制 1.三次握手四次挥手 当客户端发起连接请求时&#xff0c;SYN需要被设置位1&#xff0c;告诉服务器客户端希望建立一个链接服务器收到响应之后会回复 SYNACK&#xff0c;表示确认了客户端地…

利用Semaphore实现多线程调用接口A且限制接口A的每秒QPS为10

前段时间在群里面发现有个群友抛出一个实际需求&#xff1a;需要通过一个接口拉取数据&#xff0c;这个接口有每秒10QPS限制&#xff0c;请问如何实现数据拉去效率最大化且限制调用拉取接口每秒10PQPS&#xff1f;我觉得这个需求挺有意思的&#xff0c;跟某群友讨论&#xff0c…

莫比乌斯召回系统介绍

当前召回系统只能召回相关性高的广告&#xff0c;但不能保证该广告变现能力强。莫比乌斯做了如下两点创新&#xff1a; 在召回阶段&#xff0c;引入CPM等业务指标作为召回依据在召回阶段&#xff0c;引入CTR模型&#xff0c;从而召回更多相关性高且变现能力强的广告 参考 百度…

leetcode 26.删除有序数组中的重复项

给你一个 升序排列 的数组 nums &#xff0c;请你 原地 删除重复出现的元素&#xff0c;使每个元素 只出现一次 &#xff0c;返回删除后数组的新长度。元素的 相对顺序 应该保持 一致 。然后返回 nums 中唯一元素的个数。 考虑 nums 的唯一元素的数量为 k &#xff0c;你需要做…

5.k8s jenkins集成k8s一键发布案例

文章目录 前言一、jenkins配置1.1 jenkins配置git1.2 jenkins 配置maven1.3 jenkins配置java 二、jenkins流水线配置2.1.新增项目2.2 springboot项目配置git仓库2.3 springboot项目配置maven打包2.4 系统配置 ssh到hadoop1配置&#xff0c;也就是k8s的master节点2.6 springboot…

【多线程】常见的锁策略

常见的锁策略 1. 乐观锁 vs 悲观锁2. 读写锁 vs 普通互斥锁3. 重量级锁 vs 轻量级锁4. 自旋锁&#xff08;Spin Lock&#xff09;vs 挂起等待锁5. 公平锁 vs 非公平锁6. 可重入锁 vs 不可重入锁7. Synchronized8. 相关面试题 1. 乐观锁 vs 悲观锁 悲观锁&#xff1a; 总是假设…

安防监控系统/视频云存储EasyCVR平台视频无法播放是什么原因?

安防视频监控/视频集中存储/云存储/磁盘阵列EasyCVR平台可拓展性强、视频能力灵活、部署轻快&#xff0c;可支持的主流标准协议有国标GB28181、RTSP/Onvif、RTMP等&#xff0c;以及支持厂家私有协议与SDK接入&#xff0c;包括海康Ehome、海大宇等设备的SDK等。平台既具备传统安…