UCOSII原理与应用----动态内存管理

应用程序在运行中为了某种特殊需求,经常需要临时获得一些内存空间,所以作为较完善的操作系统必须具有动态分配内存的能力。对于实时操作系统在保证系统在动态分配内存时,他的执行时间必须是可确定的所以UCOS II改进动态分配函数和释放内存的函数malloc()和free(),使他们可以对大小固定的内存块进行操作,从而使函数malloc()和free()的执行时间成为可确定的。

UCOS II对内存进行两级管理,即把一个连续的内存空间分成若干分区,每个分区又分为若干大小相等的内存块。操作系统以分区为单位来管理动态内存,而任务以内存块为单元来获得和释放动态内存。内存分区及内存块的使用情况由内存控制块来记录。
在这里插入图片描述

UCOS II以内存块为单元向应用程序提供动态内存。内存块的大小由用户定制。
大小相等的多个内存块可以组成一个内存分区。内存分区是系统对内存进行管理的基本单位。定义一个二维数组来确定内存分区及其内存块。INT16U IntMenBuf[10][10]来存储INT16U类型的数据,10个内存块。每个内存块长度为10的内存分区。
为了感知和有效管理内存分区,定义一个叫做内存控制块(OS_MEM)的数据结构用来记录和跟踪每个内存分区的状态。
在这里插入图片描述

内存控制块的内存分区指针OSMemAddr指向内存分区。素内存分区中的各个内存块又组成了一个单向链表,内存控制块的链表指OSMemFreeList就指向了这个单向链表的头。其他三个变量分别记录内存块的长度、总数目以及现在还未被分配的内存块数目。

总结:
通过定义一个二维数组在内存中划分一个内存分区,其中的所有内存块应大小相等。
系统通过与内存分区相关联的内存控制块来对内存分区进行管理。
划分及创建内存分区根据需要由应用程序负责,而系统只提供可供任务调用的相关函数。
在UCOS II中,在使用和释放动态内存的安全性方面,要由应用程序全权负责。

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值