首页 > 系统相关 >Proj4:改进LiteOS中物理内存分配算法

Proj4:改进LiteOS中物理内存分配算法

时间:2023-11-20 19:55:33浏览次数:30  
标签:Proj4 LiteOS fit 算法 内存 分配 空闲

记录一下,操作系统课上老师讲的proj4做法

给的参考资料

LiteOS中的物理内存分配采用了TLSF算法,该算法较好地解决了最坏情况执行时间不确定(not bounded)或者复杂度过高(bounded with a too important bound"),以及碎片化问题(fragmentation)两个问题。
TLSF算法仍存在优化空间,Best-fit策略最主要的问题还在于第三步,仍然需要检索对应范围的那一条空闲块链表,存在潜在的时间复杂度。Good-fit思路与Best-fit不同之处在于,Good-fit并不保证找到满足需求的最小空闲块,而是尽可能接近要分配的大小。
以搜索大小为69字节的空闲块为例,Good-fit并不是找到[68 ~ 70]这一范围,而是比这个范围稍微大一点儿的范围(例如[71 ~ 73])。这样设计的好处就是[71 ~ 73]对应的空闲块链中每一块都能满足需求,不需要检索空闲块链表找到最小的,而是直接取空闲块链中第一块即可。整体上还不会造成太多碎片。
Good-fit分配策略将动态内存的分配与回收时间复杂度都降到了O(1)时间复杂度,并且保证系统运行时不会产生过多碎片。
相关理论参考LiteOS内存管理:TLSF算法 - 简书 (jianshu.com)
也可以向LiteOS中添加一个内存分配算法,参考三种内存分配算法总结及代码实现_内存分配算法的实现-CSDN博客

给的做法思路

找到对应TLSF算法对应的使用地方,在其对应的Best-fit的代码块,直接+1即可

标签:Proj4,LiteOS,fit,算法,内存,分配,空闲
From: https://www.cnblogs.com/seamount3/p/17844699.html

相关文章

  • 【无为原创】万字图文详解java的堆内存及OOM的解决方案,看完还不懂,从此绝笔不写了!
      目录如下:什么是JVM的堆是不是所有的Java对象都放在堆上?线程和堆的关系堆的内部结构面试题新生代与老年代如何设置堆的大小?新生代与老年代的比例设置Eden、幸存者的比例常用参数对象分配金句:分配过程内存......
  • 一次Java内存占用高的排查案例,解释了我对内存问题的所有疑问
      问题现象7月25号,我们一服务的内存占用较高,约13G,容器总内存16G,占用约85%,触发了内存报警(阈值85%),而我们是按容器内存60%(9.6G)的比例配置的JVM堆内存。看了下其它服务,同样的堆内存配置,它们内存占用约70%~79%,此服务比其它服务内存占用稍大。那为什么此服务内存占用稍大呢,它......
  • 内存加载.NET程序集&Bypass ETW
    内存加载.NET程序集&BypassETW在内存中加载可以使你的文件变得非常隐蔽,不需要落地文件。下面我们一起来学习一下,如何在内存中加载.net程序集,并且绕过ETW的检测。0x01Assembly.Load官方文档如下Assembly.Load方法(System.Reflection)|MicrosoftLearn,我在这里也简单介绍一......
  • 新生代内存需要有两个Survivor区 S0、S1
     在我的上一篇博客中,介绍了JVM堆内存的结构以及在堆中进行的GC机制,链接是浅谈JAVAGC机制与性能优化那么,在JVM的新生代内存中,为什么除了Eden区,还要设置两个Survivor区?1为什么要有Survivor区先不去想为什么有两个Survivor区,第一个问题是,设置Survivor区的意义在哪里? 如果......
  • win11笔记本换内存后,报错,及解决:0x00007FF8011F6693指令引用了0x0000000000000000内存
    笔记本原装内存为一对镁光8GDDR54800MHz换单条镁光32GDDR55600MHz内存后,重启电脑出现如下报错:0x00007FF8011F6693指令引用了0x0000000000000000内存。该内存不能为read。要终止程序,请单击”确定” 联系内存的卖家客服提供的解决步骤虽然我没看到滚屏,但是重启后问题一样......
  • 进程间通信的方式之消息队列和共享内存
    消息队列消息队列就是保存在内核中的消息链表,包括Posix消息队列和SystemV消息队列。有足够权限的进程可以向队列中添加消息,被赋予读权限的进程则可以读走队列中的消息。消息队列克服了信号承载信息量少,管道只能承载无格式字节流以及缓冲区大小受限等缺点。共享内存共享内存的机制,......
  • 内存安全问题之 use-after-free 漏洞的介绍
    计算机安全领域中的"use-after-free"漏洞是一种常见的内存安全问题。该漏洞类型源自于程序错误,通常发生在应用程序或操作系统中。"Use-after-free"漏洞指的是在释放(free)了某块内存后,程序继续使用了已释放的内存区域,可能导致严重的安全问题。这种漏洞对计算机系统和用户数据构成严......
  • 关于内存芯片的电流消耗机制的介绍
    内存芯片的电能消耗机制是一个复杂而精密的系统,受到多种因素的影响。在理解内存芯片的电能消耗机制之前,我们需要了解内存芯片的基本结构和工作原理。内存芯片的基本结构:内存芯片通常由存储单元组成,每个存储单元用于存储一个数据位。存储单元的排列方式可以是行和列的矩阵结构,其......
  • 写内存溢出的例子
    在JVM的几个内存区域中,除了程序计数器外,其他几个运行时区域都有发生内存溢出(OOM)异常的可能,重点关注堆和栈。Java堆溢出Java堆用于储存对象实例,只要不断创建不可被回收的对象,比如静态对象,那么随着对象数量的增加,总容量触及最大堆的容量限制后就会产生内存溢出异常(OutOfMemoryError)。......
  • CUDA:页锁定内存(pinned memory)和按页分配内存(pageable memory )
    CUDA架构而言,主机端的内存分为两种,一种是可分页内存(pageablememroy),一种是页锁定内存(page-lock或pinned)。可分页内存是由操作系统APImalloc()在主机上分配,页锁定内存是由CUDA函数cudaMallocHost()和cudaHostAlloc()在主机内存中分配,页锁定内存的重要属性是主机的操作系统......