其他分享
首页 > 其他分享> > 【LiteOS】第 2 章

【LiteOS】第 2 章

作者:互联网

文章目录


LiteOS_华为云

内核架构

在这里插入图片描述
LiteOS 包括不可裁剪的极小内核和其它模块,支持在单核(UP)和多核(SMP)上运行。

内存管理
+ 提供静态内存和动态内存两种算法,支持内存申请、释放。目前支持的内存管理算法有固定大小的BOX算法、动态申请的bestfit算法和bestfit_little算法。
+ 提供内存统计、内存越界检测功能。

调测
检测的内存问题包括缓冲区溢出(buffer overflow),释放后使用(use after free),多重释放(double free)和释放野指针(wild pointer)。

启动流程

初始化过程主要围绕极小内核完成,内存、任务、时钟、中断和异常。直至开启系统时钟和任务调度后,初始化工作完成。

在这里插入图片描述

内存管理

内存利用率、使用效率、内存碎片
在这里插入图片描述
在这里插入图片描述

动态内存运行机制

内存管理算法:

bestfit 算法

bestfit 动态内存管理结构图

在这里插入图片描述

节点在内存中的位置如何记录?

在这里插入图片描述

LosMemDynNode节点结构体图

保证数据空间首地址能够满足对齐要求,通过增加 Gap 域? 确保返回的指针符和对齐要求。
在这里插入图片描述
bestfit_little算法

bestfit_little = bestfit(选择内存池中最小最合适的内存块进行分配) + slab(用于分配固定大小的内存块,减少产生内存碎片的可能性)

页框、buddy、slab

slab:把不同对象划分为高速缓存组,每个对象对应一个高速缓存,slab 由一个或者多个物理上连续的页组成。

  1. 减少伙伴算法在分配小块内存时所产生的碎片;
  2. 将频繁使用的对象缓存起来,减少分配、初始化和释放的开销;
  3. 通过着色技术调整对象更好地使用硬件高速缓存;
    在这里插入图片描述

可以配置 slab class 数目以及每个 class 的大小。

首先按照 best_fit 算法申请 4 个 slab class,每个slab class 512 字节。

现在申请 20 字节,会在 32 字节的 slab 块中寻找,如果成功,则将 slab 块返回给用户,释放时整块回收。

如果32字节的slab块中没有可分配的内存块,那么从内存池中按照最佳适配算法申请,而不是从更大的slab块中申请。释放时,检查是否属于 slab class,如果是则还回对应的 slab class 中,否则还回内存池中。

在这里插入图片描述

静态内存运行机制

实质是一个静态数组,静态内存池内的块大小在初始化时设定,初始化后块大小不可变更。

静态内存池有一个控制块和若干相同大小的内存块构成。
在这里插入图片描述

标签:bestfit,LiteOS,字节,算法,内存,slab,class
来源: https://blog.csdn.net/weixin_39541632/article/details/118654101