① 分配模型概述
HRTOS内存管理以OS_MEMORY位图为核心,每一位表示一个最小分配单元。 分配过程本质是“连续bit段查找”。
单位粒度:2 bytes
映射区域:OS_USER_RAM_INIT → OS_USER_RAM_EXIT
OS_MEMORY[x] bit = 1 → 已占用
OS_MEMORY[x] bit = 0 → 空闲
该模型天然避免指针碎片,但仍可能产生“连续区不足”的外部碎片问题。
② 连续块分配过程(来自 os_task_create)
任务创建时,通过扫描bitmap寻找连续空闲块:
for(i=0; i= sd){
allocate();
}
}
sd = stack深度(实际 +1)
k = 连续空闲块计数
找到连续区域后一次性标记占用
k = 连续空闲块计数
找到连续区域后一次性标记占用
该机制决定:内存不是“随机碎片”,而是“连续段碎片(contiguous fragmentation)”。
③ 栈空间增长与碎片来源
i = OS_USER_RAM_INIT + (index * 2) + 1
SP = i
OS_INSIDE_STACK_USE_MAXIMUM = i + sd * 2
栈空间按任务创建顺序连续分配,不回收重排。
长期运行后会形成“尾部空洞”。
这类碎片属于外部碎片,但特点是:
- 不来自malloc/free
- 来自任务生命周期分布不均
- 不可自动压缩
④ 碎片形成机制
HRTOS中的碎片主要来源:
1. bitmap连续段被切割
2. task创建/删除不对称
3. stack区域单向增长
4. 高速任务与普通任务混合分配
特点:碎片不可“随机恢复”,只能通过重启或重建内存池消除。
⑤ 优化策略
策略1:固定任务上限(OS_PROCESS_MAX)
策略2:预分配栈深度(sd上限控制)
策略3:高速任务独立区
策略4:启动阶段集中创建任务
HRTOS核心思想:用“确定性分配”替代“动态整理”。
⑥ 关键结论
Bitmap模型不会产生传统malloc碎片
但会产生“连续空间碎片”
系统稳定性取决于任务创建顺序设计
长期运行必须依赖静态规划
但会产生“连续空间碎片”
系统稳定性取决于任务创建顺序设计
长期运行必须依赖静态规划