0
  • 聊天消息
  • 系统消息
  • 评论与回复
登录后你可以
  • 下载海量资料
  • 学习在线课程
  • 观看技术视频
  • 写文章/发帖/加入社区
会员中心
创作中心

完善资料让更多小伙伴认识你,还能领取20积分哦,立即完善>

3天内不再提示

嵌入式RTOS的内存管理机制的实现方案和进行改善设计

电子设计 来源:单片机与嵌入式系统应用 作者:叶新栋 , 唐志强 2020-08-12 09:03 次阅读

引 言

嵌入式领域中,嵌入式实时操作系统RTOS)正得到越来越广泛的应用。采用嵌入式实时操作系统可以更合理、更有效地利用CPU的资源,简化应用软件的设计,缩短系统开发时间,更好地保证系统的实时性和可靠性。内存资源作为嵌入式系统中极为重要的资源之一,其管理机制历来是嵌入式系统设计的重点和难点。内存管理机制的优劣程度极大地影响着嵌入式系统的整体性能,因此在嵌入式RTOS的内存管理机制中必须满足以下3个要求:

①实时性。在嵌入式RTOS中不仅要求调度机制的实时性,资源的分配和回收的实时性也十分重要。

②可靠性。嵌入式系统的应用领域决定了嵌入式RTOS必须具有高可靠性,而内存管理的可靠程度直接影响RTOS的可靠性,因此内存管理的可靠性也必不可少。

③高效性。由于嵌入式系统资源的稀缺性,因而高效的资源管理机制也同等重要。

1 动态分区内存管理机制

1.1 动态分区内存管理概述

在许多小型嵌入式系统中并未实现虚拟内存机制,动态分区内存管理机制仍然是首选。分区存储管理是满足多道程序设计的最简单的存储管理方法,它允许多个用户程序同时存在系统内存中,即共享内存空间。早期的分区存储管理采用固定分区的方法,把内存空间分成若干个大小不等的区域,称为分区。每个用户程序(作业、进程)调入内存后,占用其中1个分区,程序运行完成后释放该分区。这种存储管理方法的主要问题是内存使用效率极低,很快就被淘汰了。取而代之的是动态分区存储管理技术。图1显示的是动态内存管理的数据结构。

嵌入式RTOS的内存管理机制的实现方案和进行改善设计

1.2 动态分区内存分收算法及其性能分析

在动态内存分配机制中一般采用两种设计方案:最佳适应算法和首次适应算法。最佳适应算法要求所有的空闲内存块按照内存块的大小,由小到大链接在一起。首次适应算法中所有的空闲内存块都是按地址由小到大链接的。图2显示了这2种算法的流程(假设系统申请的内存块大小为n)。

最佳适应算法和首次适应算法在分配内存的流程上是一致的,然而由于空闲内存块的组织形式不同,其分配的性能也不尽相同。最佳适应算法由于每次分配都是首先分配与所要求的内存块大小最接近的空闲内存块,因而其内存利用率相对较高。然而由于在内存回收过程中需要合并那些地址相邻的空闲块,最佳适应算法往往需要遍历整个空闲区链表以寻找符合条件的内存块。而首次适应算法由于是按照地址的顺序相连,因而在内存回收方面有着最佳适应算法无法比拟的性能。

图3显示了在几种不同情况下,动态分区内存回收机制所采取的策略。

在A中,释放区回收后合并成新内存块f,其首地址为f1内存块的首地址,大小为f1和R内存块的大小之和。在B中,释放区回收后合并成新内存块f,其首地址为R内存块的首地址,大小为f1和R内存块的大小之和。在C中,释放区回收后合并成新内存块f,其首地址为f1内存块的首地址,大小为f1和R以及f2内存块的大小之和。在D中,释放区回收后不进行合并,直接插入空闲区链表并返回。

动态分区内存的分配机制有效地避免了内存内部碎片的存在,同时在内存回收策略中使用合并算法也极大地减少了内存外部碎片存在的可能性。然而,当系统需要分配大量的小块内存时,动态分区内存管理机制的性能却并不令人满意。其不足之处主要存在以下2个方面:

①当系统分配大量的小块内存后,其空闲区表或空闲区队列将会变得异常庞大。无论是首次适配算法还是最佳适应算法都需要遍历空闲区搜索合适的内存块,因此过于庞大的空闲区结构使搜索算法变得低效。

②系统在某些特定的时刻往往会对大量的小块内存进行频繁分配和回收。频繁地对小块内存进行分割分配和合并回收,其实时性表现得并不令人满意。

基于以上2点,如何在动态分区内存管理机制的基础上优化小块内存的管理机制,成为提高动态分区内存管理性能的关键因素之一。

2 小块内存动态缓存分配机制

大部分实时操作系统内存分配机制并未对大块内存和小块内存的分配做出不同的算法设计,然而在实际分配过程中,很难用一种分配算法兼顾大小内存的高效分配。针对动态分区内存管理机制中对小块内存分配的局限性,提出了小块内存动态缓存机制。该机制在继承了动态分区管理机制优良性能的同时,优化了小块内存的管理,对内存管理的实时性和高效性都有一定提高。系统中同时存在2种内存数据结构,分别为小块内存和大块内存设计。大块内存依旧采取动态分区内存管理机制,而小块内存采取动态缓存分配。小块内存数据结构如图4所示。

假设小块内存最小为1字节,并以2的指数递增,最大为512字节。这也就意味着当系统需要分配或释放小于或等于512字节的内存时,会执行小块内存操作。图5和图6分别是小块内存的分配和回收流程(图中j代表需操作的小块内存对应的缓存号,若申请120字节则j对应为8;min代表小块内存最大的缓存号,如图中min=9)。

图7是对小块内存操作算法的简单模拟。小块内存缓存区从上到下依次缓存512~64字节的内存块。有4个操作过程:分配64字节→分配128字节→回收64字节→回收128字节。

①分配64字节。初始状态小块内存缓存区为空,此时将会执行大块内存分配操作并将1 KB内存分割缓存到小块内存缓存区。在分配64字节内存时,系统自动探测到了128字节、256字节和512字节处的缓存区已经处于饥饿状态,因此也将会分配其缓存区1块内存。

②分配128字节。由于系统存在该大小的缓存,因此直接获取并返回。

③回收64字节。由于释放后,系统中64字节大小的内存块可以合并,因此合并后链入上一级缓存区。

④回收128字节。内存块再次进行合并操作,最终调用大块内存释放操作,从而回到原始态。

图7所示的内存操作只是一个非常简单的模拟,实际系统内存的分配和回收是非常复杂和不确定的,而小块内存动态缓存分配机制的性能在这种情况下表现得尤为突出。总体而言其具有以下几点优势:

①快速性。因为使用了缓存机制,所以在大部分情况下,小块内存释放后依旧在缓存区中,当系统再次分配该大小的内存块时就极为快速。

②自适应性。在分配小块内存的过程中,算法能检测出处于饥饿状态的内存块大小,并依次为它们所在的缓存区分配1块相应大小的内存块。

③动态性。在小块内存的回收过程中,该算法将对内存块进行合并重组。假若某时刻先前从大块内存中分配的1 KB内存块全部被小内存块释放,其经过重组后必定能重新添加到大内存块存储区。

3 优化后的系统内存管理机制

图8和图9分别是优化后系统分配和回收内存的算法,图中的max代表的是小块内存的最大值。当不能得到所需的小块内存,或者释放小块内存最终合并成大块内存时,分别调用大块内存分配和释放操作,从而保证小块内存和大块内存操作能很好地协作,增强了系统的稳定性。

结 语

尽管在引入小块内存动态缓存分配机制后,系统在分配小块内存时会存在一定的内存内部碎片,但由于小块内存本身很小以及大块内存的动态分区管理机制,很好地降低了系统中由于存在内存碎片而带来的风险。在实际模拟测验1中,经优化过的动态分区内存管理机制能在一定程度上提高系统的实时性及可靠性,在嵌入式RTOS的设计中具有实际的意义。

责任编辑:gt

声明:本文内容及配图由入驻作者撰写或者入驻合作网站授权转载。文章观点仅代表作者本人,不代表电子发烧友网立场。文章及其配图仅供工程师学习之用,如有内容侵权或者其他违规问题,请联系本站处理。 举报投诉
  • 嵌入式
    +关注

    关注

    5082

    文章

    19111

    浏览量

    304883
  • cpu
    cpu
    +关注

    关注

    68

    文章

    10855

    浏览量

    211615
  • 操作系统
    +关注

    关注

    37

    文章

    6808

    浏览量

    123292
收藏 人收藏

    评论

    相关推荐

    嵌入式系统内存管理

    不同的系统,有不同的策略,对于有些系统支持的虚拟内存管理机制,对于另外一些系统,可能只有flat的简单内存管理机制。 2、
    发表于 09-17 19:40

    【案例分享】FreeRTOS的嵌入式实时操作系统的实现

    FreeRTOS是一个源码公开的免费的嵌入式实时操作系统,通过研究其内核可以更好地理解嵌入式操作系统的实现原理.本文主要阐述FreeRTOS系统中的任务调度机制、时间
    发表于 07-23 04:30

    嵌入式实时操作系统如何简化应用软件的设计

    嵌入式领域中,嵌入式实时操作系统(RTOS)正得到越来越广泛的应用。采用嵌入式实时操作系统可以更合理、更有效地利用CPU的资源,简化应用软件的设计,缩短系统开发时间,更好地保证系统的
    发表于 11-25 06:48

    怎么给RTOS动态分区内存管理机制进行优化?

    怎么给RTOS动态分区内存管理机制进行优化?
    发表于 04-28 06:17

    基于嵌入式裸机或RTOS系统下内存管理方法的探究

    嵌入式内存管理探究-基于FreeRTOS文章封面本文基于嵌入式裸机或RTOS系统下内存
    发表于 12-17 07:40

    嵌入式系统所用到的内存管理机制主要有哪几种

    嵌入式系统所用到的内存管理机制主要有以下两种: 1、虚拟内存管理机制: 有一些嵌入式处理器提供了
    发表于 12-17 06:34

    阐述FreeRTOS系统中机制实现原理

    2--嵌入式操作系统FreeRTOS的原理与实现摘自::FreeRTOS是一个源码公开的免费的嵌入式实时操作系统,通过研究其内核可以更好地理解嵌入式操作系统的
    发表于 12-22 07:15

    VxWorks内存管理机制的分析与研究

    实时性、可靠性是嵌入式开发对内存管理的基本要求,本文探讨了操作系统内存管理的主要问题,对嵌入式
    发表于 01-07 12:35 23次下载

    嵌入式系统内存管理方案研究

    摘要:嵌入式系统的内存管理机制必须满足实时性和可靠性的要求。本文以开源的的操作系统RTEMS为例,介绍嵌入式系统中内存
    发表于 05-24 23:57 1154次阅读
    <b class='flag-5'>嵌入式</b>系统<b class='flag-5'>内存</b><b class='flag-5'>管理</b><b class='flag-5'>方案</b>研究

    linux内存管理机制浅析

    本内容介绍了arm linux内存管理机制,详细说明了linux内核内存管理,linux虚拟内存管理
    发表于 12-19 14:09 73次下载
    linux<b class='flag-5'>内存</b><b class='flag-5'>管理机制</b>浅析

    最全SPARK内存管理机制

    最全SPARK内存管理机制
    发表于 09-08 14:17 5次下载
    最全SPARK<b class='flag-5'>内存</b><b class='flag-5'>管理机制</b>

    基于FreeRTOS的嵌入式实时操作系统的原理和实现

    FreeRTOS是一个源码公开的免费的嵌入式实时操作系统,通过研究其内核可以更好地理解嵌入式操作系统的实现原理.本文主要阐述FreeRTOS系统中的任务调度机制、时间
    发表于 11-18 03:34 6669次阅读

    嵌入式系统内存管理机制详解

    操作系统的内存管理功能用于向操作系统提供一致的地址映射功能和内存页面的申请、释放操作。在嵌入式实时系统中,内存
    发表于 11-18 09:41 4509次阅读

    浅析物理内存与虚拟内存的关系及其管理机制

    本文主要介绍内存管理机制:物理内存与虚拟内存的关系,Linux内存管理机制,Python
    的头像 发表于 04-12 09:55 5437次阅读
    浅析物理<b class='flag-5'>内存</b>与虚拟<b class='flag-5'>内存</b>的关系及其<b class='flag-5'>管理机制</b>

    嵌入式释放RTOS内存性能的使用技巧

    经常从嵌入式开发人员那里听到两种拒绝使用RTOS的借口: “RTOS内存占用太大” “RTOS开销太大” 这些借口在以前可能有一些价值,但今
    的头像 发表于 09-27 11:50 2224次阅读