基于AliOS Things操作系统提供用于管理堆(heap)的动态内存管理算法
AliOS Things中提供k_mm_alloc与k_mm_free两个用于申请/释放动态内存的API,在某些应用场景下他们面临与C库malloc与free类似的问题:
- 无法实现使用者对内存块的字节对齐要求
- 无法实现多内存分区的分离管理(如某些芯片内存资源分为快速SRAM与普通DRAM,使用者期望能指定从SRAM或是DRAM进行申请)
本实验的目标是在AliOS Things上面实现新的堆内存管理算法,满足以上两点外部功能要求。
2021全国大学生操作系统比赛的“OS功能设计”赛道
- 以小组为单位参赛,最多三人一个小组,且小组成员是来自同一所高校的本科生(2021年春季学期或之后本科毕业的大一~大四的学生)
- 如学生参加了多个项目,参赛学生选择一个自己参加的项目参与评奖
- 请遵循“2021全国大学生操作系统比赛”的章程和技术方案要求
黄震
-
github
-
email [email protected]
中等
-
使用C语言编写
-
数据结构: pool控制块结构体(每个分区对应一个),
k_pool_head
-
需要实现以下接口:
// 创建内存分区,pool为输出参数 int krhino_pool_init(k_pool_head** pool, void* pool_addr, size_t pool_size); // 从pool指定的内存分区,申请size大小的内存块 void* krhino_pool_alloc(k_pool_head* pool, size_t size); // 从pool指定的内存分区,申请size大小且满足alignment对齐要求的内存块 void* krhino_pool_alloc_align(k_pool_head* pool, size_t size, size_t alignment); // 向pool指定的内存分区,释放ptr指定的内存块 void krhino_pool_free(k_pool_head* pool, void* ptr);
- 硬件平台:阿里云IoT官方推出的HaaS EDU K1或HaaS100
- 软件平台:AliOS Things物联网操作系统
- HaaS EDU K1技术文档:https://blog.csdn.net/haastech/category_10825080.html
- HaaS100快速开始文档:https://help.aliyun.com/document_detail/184184.html
- AliOS Things物联网操作系统说明文档:https://github.com/alibaba/AliOS-Things/tree/dev_3.1.0_haas
确保多线程条件下,并发的申请与释放操作都能够正确执行
设计算法对内存碎片进行合并以减少系统内存碎片,提高内存使用效率
实现时可适当考虑算法性能、可维护性 设计合适的算法性能指标,并对性能进行优化后,测量内存分配算法的性能指标数据; 算法需要能够识别出内存访问越界、内存double free等问题; 考虑在系统出现问题时(如内存申请失败),打印堆内存的统计信息,协助开发者分析问题;