操作系统抽象层简介
OSAL的API互斥锁接口简介
实现互斥锁功能
内存概念
·内存管理模块管理系统的内存资源,它是操作系统的核心模块之一。主要包括内存的初始化、分配以及释放。
·在系统运行过程中,内存管理模块通过对内存的申请/释放操作,来管理用户和OS对内存的使用,使内存的利用率和使用效率达到最优,同时最大限度地解决系统的内存碎片问题。
Huawei LiteOs的内存管理分为静态内存管理和动态内存管理,提供内存初始化、分配、释放等功能
——动态内存:在动态内存池中分配用户指定大小的内存块。
优点:按需分配。
缺点:内存池中可能出现碎片。
——静态内存:在静态内存池中分配用户初始化时预设(固定)大小的内存块。
优点:分配和释放效率高,静态内存池中无碎片。
缺点:只能申请到初始化预设大小的内存块,不能按需申请。
动态内存
动态内存运作机制——DLINK
动态内存运行机制——BEST LITTLE
BEST LITTLE动态内存管理
1 )LiteOs的动态内存分配支持最佳适配算法,即BEST LITTLE,每次分配时选择内存池中最小最适合的内存块进行分配。LiteOs动态内存管理在最佳适配算法的基础上加入了SLAB机制,用于分配固定大小的内存块,进而减小产生内存碎片的可能性。LiteOs内存管理中的SLAB机制支持可配置的SLAB CLASS数目及每个CLASS的最大空间。
2)每次申请内存时,先在满足申请大小的最佳SLAB CLASs中申请。
3)释放内存时,先检查释放的内存块是否属于SLAB CLASS,如果是SLAB ClASS的内存块,则还回对应的SLAB CLASS中,否则还回内存池中。
运作机制——动态内存
静态内存
静态内存实质上是一块静态数组,静态内存池内的块大小需要用户在初始化时设定,初始化后块大小不可变更。
静态内存池由一个控制块和若干相同大小的内存块构成,控制块位于内存池头部,用于内存块管理,内存块的申请和释放以块大小为粒度。
内存管理应用场景与开发流程
动态内存使用场景:
1、内存管理的主要工作是动态的划分并管理用户分配好的内存区间。
2、动态内存管理主要是在用户需要使用大小不等的内存块的场景中使用。
3、当用户需要分配内存时,可以通过操作系统的动态内存申请函数索取指定大小内存块,一旦使用完毕,通过动态内存释放函数归还所占用内存,使之可以重复使用。
·静态内存使用场景:
当用户需要使用固定长度的内存时,可以使用静态内存分配的方式获取内存,一旦使用完毕,通过静态内存释放函数归还所占用内存,使之可以重复使用。
动态内存开发流程
静态内存应用场景与开发流程
1、规划一片内存区域作为静态内存池。
2、系统内部将会初始化静态内存池。将入参指定的内存区域分割为N块(N值取决于静态内存总大小和块大小),将所有内存块挂到空闲链表,在内存起始处放置控制头。
3、系统内部将会从空闲链表中获取第一个空闲块,并返回该块的用户空间地址。
4、将该块内存加入空闲块链表。
5、系统内部清零静态内存块,将入参地址对应的内存块清零。