当前位置: 首页 > 工业控制产品 > 自动化控制 > 导轨式开关电源

类型分类:
科普知识
数据分类:
导轨式开关电源

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

发布日期:2022-04-17 点击率:65

 引 言

       内存管理机制是嵌入式系统研究中的一个重点和难点的问题,它必须满足以下几个特性:

       ①实时性。从实时性的角度出发,要求内存分配过程要尽可能地快。因此,在嵌入式系统中,不可能采用通用操作系统的一些复杂而完善的内存分配策略,一般没有段页式的虚存管理机制;而是采用简单、快速的内存分配方案,其分配方案也因程序对实时性的要求而异。例如,VxWorks系统采用简单的“首次适应,立即聚合”方法;VRTX中采用多个固定尺寸存储块的binning方案。

 

       ②可靠性。嵌入式系统应用的环境千变万化,在有些特定情况下,对系统的可靠性要求极高,内存分配的请求必须得到满足,如果分配失败则可能会带来灾难性的后果。比如,飞机的燃油检测系统。在飞机飞行过程中,如果燃料发生泄漏,系统应该立即检测到,并发出相应的警报等待飞行员及时处理。如果因为内存分配失败而不能相应地操作,就可能发生机毁人亡的事故。

       ③高效性。内存分配要尽可能地减少浪费。不可能为了保证满足所有的内存分配请求而将内存配置得很大。一方面,嵌入式系统对成本的要求使得内存在其中只是一种很有限的资源;另一方面,即使不考虑成本的因素,系统硬件环境有限的空间和有限的板面积决定了可配置的内存容量是很有限的。

       针对以上三个约束条件,市场上主流的嵌入式操作系统,如VxWorks、嵌入式Linux等均提出了一套有效的解决方案;但是,这些系统只提供了应用开发的接口,其底层的实现方案不可见。本文以开源的嵌入式操作系统RTEMS为例,分析了嵌入式系统内存管理所面临的问题,研究了其底层实现的解决方案。一般的嵌入式系统中最基本的内存管理方案有两种——静态分配和动态分配。

1、静态分配与动态分配

        静态分配是指在编译或链接时将程序所需的内存空间分配好。采用这种分配方案的程序段,其大小一般在编译时就能够确定;而动态分配是指系统运行时根据需要动态地分配内存。这两种策略的选取一直是嵌入式系统设计中一个令人头痛的问题。

        一般的嵌入式系统都支持静态分配,因为像中断向量表、操作系统映像这类的程序段,其程序大小在编译和链接时是可以确定的。而是否支持动态分配主要基于两个方面的考虑:首先是实时性和可靠性的要求,其次是成本的要求。对于实时性和可靠性要求极高的系统(硬实时系统),不允许延时或者分配失效,必须采用静态内存分配,如航天器上的嵌入式系统多采用静态内存分配。除了基于成本的考虑外,用于汽车电子和工业自动化领域的一些系统也没有动态内存分配,比如WindRiver著名的OSEKWorks系统。然而,仅仅采用静态分配,使系统失去了灵活性。必须在设计阶段就预先知道所需要的内存并对之作出分配;必须在设计阶段就预先考虑到所有可能的情况,因为一旦出现没有考虑到的情况,正在运行的系统就无法处理。这样的分配方案必然导致很大的浪费。因为内存分配必须按照最坏情况进行最大的配置,而实际运行时很可能只使用其中的一小部分;而且在硬件平台不变的情况下,不可能灵活地为系统添加功能,从而使得系统的升级变得困难。

        虽然动态内存分配会导致响应和执行时间不确定、内存碎片等问题,但是它的实现机制灵活,给程序实现带来极大的方便,有的应用环境中动态内存分配甚至最必不可少的。比如,嵌入式系统中使用的网络协议栈,在特定的平台下,为了比较灵活地调整系统的功能,在系统中各个功能之间作出权衡,必须支持动态内存分配。例如,为了使系统能够及时地在支持的VLAN数和支持的路由条目数之间作出调整,或者为了使不同的版本支持不同的协议,类似于malloc和free这类的函数是必不可少的。

下一篇: PLC、DCS、FCS三大控

上一篇: 索尔维全系列Solef?PV

推荐产品

更多