更多课程 选择中心

嵌入式培训
达内IT学院

400-111-8989

嵌入式RTEMS动态内存管理

  • 发布:嵌入式培训
  • 来源:嵌入式问答
  • 时间:2020-05-12 15:43

RTEMS是一个基于多处理器的,能够运行在不同处理器平台上的嵌入式操作系统。其应用领域十分广泛,包括航空航天设备(导弹、飞机控制系统),网络设备(路由器、交换 机),掌上设备(电子阅读器、PDA)等。针对不同领域应用的需求差异,该系统的内存管理提供了比较完善的机制。下面来说一说嵌入式RTEMS动态内存的管理。

1、固定长度分区管理

RTEMS定义的固定长度的分区(Partition)是一段连续的内存空间。它可以被划分成固定长度的内存块(buffer),允许应用在创建分区时配置分区的大小和内存块的大小,要求分区的大小是内存块的整数倍。例如,应用创建一个大小为1024字节的分区,内存块为256字节。

创建分区时,RTEMS根据分区和内存块的大小,形成一个空闲内存块的双向链表。当从分区中申请内存块时,按照空闲内存块链表的顺序分配。如果空闲空间不足,调用者不会被阻塞,而是获得一个空指针,以确保申请内存调用的时间确定性。释放内存块时,将该内存块挂在空闲内存块链表的链尾。分区被删除时将释放出这段连续的内存空间。

RTEMS的分区管理机制提供以下API:

rtems_partition_create 创建一个分区

rtems_partition_ident 获得分区标识号

rtems_partition_deldet1 删除一个分区

rtems_partition_get_buffer 申请一个内存块

rtems_partition_return_buffer 释放一个内存块

RTEMS的固定长度分区管理算法有以下特色:

①系统创建的分区数目可在运行时动态增减。

②内存块的控制结构所占用的内存空间在该内存块被分配出去时会变为可用空间,不会影响该内存块实际可用的大小;而在回收时控制块会自动生成,这一点使得分区管理的系统开销对用户的影响为零。

③在分区的内存块中还可以再定义分区,这就意味着内存块可以很容易地被分为子内存块,提高了分区管理的灵活性。

2、可变长度分区管理

RTEMS定义的可变长度的分区(Region)是一段连续的、大小可配置的内存空间,可以被划分成很多大小不一的段(Segment)。创建分区时要指定一个分配单元,称为页。段的大小是页的倍数,如果应用程序在申请段时,给出的大小不是页的倍数,内核会将其调整为页的倍数。例如,应用从而大小为512个字节的分区中申请一个大小为700字节的段,那么,内核实际分配的段大小为1024字节。

创建Region分区时,RTEMS根据分区大小和页小建立分区的控制结构和段的控制结构。在创建之初,只有一个空闲段,其大小为分区的大小减去控制结构的内存开销。随着应用申请、释放段的操作不断进行,分区中形成用双向链表链接起来的空闲段链。当从分区中分配段时,依据首次适应算法(即第一个满足要求的空闲段就作为分配结果)查看空闲段链中是否存在合适的段。

当把段释放回分区时,该段被挂在空闲段链的链尾,并且如果空闲段链中有与此段相邻的段,则将其合并成一个更大的空闲段。RTEMS在段的控制块中设置一个标志位表示其被使用的情况。标志位为1表示该段正被使用,标志位为0表示该段空闲。

RTEMS的分区管理机制提供以下API:

rtems_region_create 创建一个分区

rtems_region_ident 获得分区的标识

rtems_region_delete 删除一个分区

rtems_region_extend 扩展一个分区

rtems_region_get_segment 申请一个段

rtems_region_return_segment 释放一个段

RTEMS的可变长度分区管理算法有以下特色:

①系统创建的分区数目可在运行时动态增加;

②段的控制结构在该段被分配出去后会减小,而在回收到控制快会自动恢复大小。这一点使得分区管理的系统开销降低到最小;

③时应用程序发现一个分区的内存空间不够使用时,可以调用retms_region_extend函数(API)扩展该分区的大小。

④当程序要求从某个分区获取分段而未成功时,可以立即返回,也可以采取多种等待策略。等待策略包括优先级等待、FIFO等待。在FIFO等待策略中又可分为有限等待和无限等待。

本文以开源的RTEMS系统为例,介绍了嵌入式系统中常用的内存管理方法,并对各种方法的特点进行了阐述,在实际应用时,可根据需求作出相应的选择。

版权声明:转载文章来自公开网络,版权归作者本人所有,推送文章除非无法确认,我们都会注明作者和来源。如果出处有误或侵犯到原作者权益,请与我们联系删除或授权事宜。


预约申请免费试听课

填写下面表单即可预约申请免费试听!怕钱不够?可就业挣钱后再付学费! 怕学不会?助教全程陪读,随时解惑!担心就业?一地学习,可全国推荐就业!

上一篇:嵌入式系统内存管理需要有什么特性?
下一篇:嵌入式编程是什么意思?怎么入门?

嵌入式培训主要学习哪些内容?好学吗?

大学生参加嵌入式培训班好就业吗

学习嵌入式培训有必要报班吗

嵌入式培训主要培训什么

  • 扫码领取资料

    回复关键字:视频资料

    免费领取 达内课程视频学习资料

  • 搜索抖音号

    搜索抖音号:1821685962

    免费领取达内课程视频学习资料

Copyright © 2021 Tedu.cn All Rights Reserved 京ICP备08000853号-56 京公网安备 11010802029508号 达内时代科技集团有限公司 版权所有

选择城市和中心
黑龙江省

吉林省

河北省

湖南省

贵州省

云南省

广西省

海南省