小熊派华为物联网操作系统LiteOS内核教程06-内存管理

本文介绍了华为物联网操作系统LiteOS的内存管理,特别是动态内存管理和BEST LITTLE算法,详述了SLAB机制减少内存碎片的方法,并提供了动态内存管理API如osal_malloc、osal_free等。此外,还包含一个动手实验,演示如何测试动态内存分配的最大字节。

1. LiteOS内核的内存管理

1.1. 内存管理

在系统运行的过程中,一些内存空间大小是不确定的,比如一些数据缓冲区,所以系统需要提供内存空间的管理能力,用户可以在使用的时候申请需要的内存空间,使用完毕释放该空间,以便再次利用。

Huawei LiteOS 的内存管理模块通过对内存的申请/释放操作,来管理用户和OS对内存的使用,使内存的利用率和使用效率达到最优,同时最大限度地解决系统的内存碎片问题。

1.2. 动态内存管理

动态内存管理,即在内存资源充足的情况下,从系统配置的一块比较大的连续内存(内存池),根据用户需求,分配任意大小的内存块。当用户不需要该内存块时,又可以释放回系统供下一次使用。

与静态内存相比,动态内存管理的好处是按需分配,缺点是内存池中容易出现碎片

LiteOS动态内存支持 DLINK 和 BEST LITTLE 两种标准算法。

1.2.1. DLINK 动态内存管理算法

DLINK动态内存管理结构如下图所示:

  • 第一部分

堆内存(也称内存池)的起始地址及堆区域总大小。

  • 第二部分

本身是一个数组,每个元素是一个双向链表,所有free节点的控制头都会被分类挂在这个数组的双向链表中。

  • 第三部分

占用内存池极大部分的空间,是用于存放各节点的实际区域

1.2.2. BEST LITTLE 算法(重点)

LiteOS 的动态内存分配支持最佳适配算法,即 BEST LITTLE,每次分配时选择内存池中最小最适合的内存块进行分配。

LiteOS 动态内存管理在最佳适配算法的基础上加入了 SLAB 机制,用于分配固定大小的内存块,进而减小产生内存碎片的可能性

LiteOS 内存管理中的 SLAB 机制支持可配置的 SLAB CLASS 数目及每个 CLASS 的最大空间

现以 SLAB CLASS 数目为 4,每个 CLASS 的最大空间为 512 字节为例说明 SLAB 机制:

在内存池中共有 4 个 SLAB CLASS,每个 SLAB CLASS 的总共可分配大小为 512 字节,第一个 SLAB CLASS 被分为 32 个16 字节的 SLAB 块,第二个 SLAB CLASS 被分为 16 个 3 2字节的 SLAB 块,第三个 SLAB CLASS 被分为 8 个 64 字节的 SLAB 块,第四个 SLAB CLASS 被分为 4 个 128 字节的 SLAB 块。这 4 个 SLAB CLASS 是从内存池中按照最佳适配算法分配出来的。

初始化内存管理时,首先初始化内存池,然后在初始化后的内存池中按照最佳适配算法申请 4 个 SLAB CLASS,再逐个按照 SLAB 内存管理机制初始化 4 个 SLAB CLASS。

每次申请内存时,先在满足申请大小的最佳 SLAB CLASS 中申请,(比如用户申请 20 字节内存,就在 SLAB 块大小为 32 字节的 SLAB CLASS 中申请),如果申请成功,就将 SLAB 内存块整块返回给用户,释放时整块回收。如果满足条件的 SLAB CLASS 中已无可以分配的内存块,则继续向内存池按照最佳适配算法申请。需要注意的是,如果当前的 SLAB CLASS 中无可用 SLAB 块了,则直接向内存池申请,而不会继续向有着更大 SLAB 块空间的 SLAB CLASS 申请。

释放内存时,先检查释放的内存块是否属于 SLAB CLASS,如果是 SLAB CLASS 的内存块,则还回对应的 SLAB CLASS 中,否则还回内存池中。

1.2.3. 两种动态内存管理方法的选择

LiteOS动态内存管理的方法使用宏定义的方法使能,在用户工程目录下的OS_CONFIG中的target_config.h文件中配置。

本课程《华为物联网操作系统LiteOS》是朱老师物联网大讲堂推出的一套物联网理论和实践相结合的视频课程。本课程以渐次递进的方式讲了以下4个主题。主题1:物联网,这是整个课程第1部分。主要讲了物联网的概念、发展历程、物联网的典型案例和应用场景,从技术角度深度阐述了物联网的4层架构、分析了各层次的核心技术和实现原理。本部分的主要目的是让大家对物联网有一定深度和专业性的理解。很多人一直对物联网有兴趣,也找了不少资料看了不少书,但是越看越糊涂,尤其很多物联网专业的大学生,经过几年的大学学习仍然不知道究竟什么是物联网,更不知该如何去学习物联网,本部分就是为解决这个疑问而生。主题2:操作系统,这是整个课程第2部分。主要讲了操作系统的基本原理,操作系统的作用和组成部分,让我们明白裸机开发和基于操作系统的开发有什么差异。这部分是比较偏理论的,是为了解决很多同学对操作系统的认知基础的。很多同学甚至是开发者,尤其是单片机的开发者习惯了裸机开发,直接基于寄存器或者官方库函数(譬如stm32的HAL库、标准库)的开发,心里很疑惑到底什么是操作系统,为什么裸机开发也能做项目还需要操作系统?用不用操作系统的差异在哪里?为什么要去学习操作系统?应该如何学习操作系统?本部分就是为了回答这些问题。主题3:物联网操作系统,这是整个课程的的3部分。物联网操作系统是专为物联网而研发和设计的操作系统,是物联网设备的核心技术。物联网操作系统也是一种操作系统,他具有操作系统的普遍特性(以前前面我们才先学习泛性的普遍的操作系统),但是物联网操作系统有它很多独特的特性,华为LiteOS就是一款非常典型的优秀的物联网操作系统,除此之外国内还有诸如RT-Thread、AliOSThings等其他优秀物联网操作系统,国外还有Amazon的Freertos等物联网操作系统。那究竟物联网操作系统有什么特别之处?物联网产品如何选择操作系统?如何基于操作系统来开发物联网产品?本部分课程将回答这些问题。主题4:华为物联网操作系统LiteOS,这是整个课程的第4部分。本部分聚焦LiteOS,基于前3部分的铺垫,向大家详细讲解LiteOS的设计思路,专门安排了2大章节来详细分析LiteOS的kernel源码和周边组件源码,还介绍了我们专为学习物联网而设计的NB476开发板,且基于该开发板和LiteOS设计了一个温湿度和断电检测报警器的典型的物联网产品试验,在试验实战中让大家体会基于LiteOS物联网项目的开发方式。本部分是整个课程中最重头戏的部分,篇幅占据整个课程的一半左右。因此实际上我们整个课程的内容还是比较偏技术性的,可谓低走高开。从基础概念起步,最终带大家能够去做产品。课程特色*完全零基础,降低学习门槛。*深入浅出,通俗易懂。不怕学不会,就怕你不学习。*思路清晰、语言风趣,对着视频看也不会想睡觉······*视频 + 文档 + 练习题 + 答疑,全方位保证学习质量。*基础知识 + 思路引导的教学方式,授之以鱼更授之以渔。*系列课程。本教程只是入门篇,后续还有更多更精彩视频更新中。
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值