科学技术的发展在不断的进行更新,为了适应发展快速的科技信息,在对于系统进行开发的时候,就要倾注更多的精力,使其在功能上能够满足日益发展的网络需求。那么针对嵌入式系统的开发,在实际的应用过程中,涉及到对于内存的管理方面的问题,这将关系到嵌入式系统对于软件运行的效率和质量问题。所以程序的设计人员要拥有很丰富的专业知识,在思想理念上能够跟得上国际的最新趋势,使得系统在使用的过程中可以为我国的信息产业创造出更大的成就,为我国网络信息业的发展创造有利的环境。
1嵌入式系统
嵌入式系统是指以应用为中心,以计算机技术为基础,软件硬件可剪裁,适应应用系统。对功能、可靠性、成本、体积、功耗严格要求的专用计算机系统。它主要由嵌入式微处理器、外围硬件设备、嵌入式操作系统以及用户应用软件的部分组成。用于实现对其他设备的控制、监视和管理等功能,它通常嵌入在主要设备中运行。
2嵌入式系统对内存分配的要求
嵌入式系统在开发和应用的过程中,由于自身的科技含量比较高,都受到了相应的限制条件。由于其本身是一种在资源上会受到限制的系统,所以这种系统的应用相对于其他的系统来说,对于在内存上的使用标准要相对严格一些。在资源和成本上的受限,使得对于这种系统的开发在研究的时候,程序开发人员就要付出一定的精力,考虑到系统在使用的时候对于内存的分配和使用上要做出合理的安排。由此可知,对于这种系统的开发和应用,在对内存的管理上一直都是一个难题,它和别的比较常用的系统还有着不同。那么从大体上来看,嵌入式系统在研发时主要需要考虑到以下三方面的要求:
第一,实时性。要保证嵌入式系统的实时性,则要求尽可能快速的分配内存。
第二,可靠性。它是嵌入式系统内存管理机制的基本要求。
第三,高效性。嵌入式系统中内存是一种有限并且昂贵的资源。故内存分配要尽可能的减少浪费。
3内存分配方式
嵌入式系统中内存管理方案大致可以分为两大类:静态分配和动态分配。
静态分配的可用内存大小在编译或链接时确定,系统初始化阶段预先分配好固定数量的内存,用于存放所有需要使用的对象和数据结构。程序运行时能且只能使用这些内存空间。采用这种分配方案的程序段,其大小一般在编译时就能确定。
动态分配的内存在程序运行时根据需要向系统申请后获得,只有在需要的时候,才分配或释放。
4内存管理策略
4.1简单内存管理模型
在设计之初,最简单直接的一种技术其实就是"不管理",即所有静态分配在栈中、动态分配在堆中的变量和数据结构,这二者的分配、释放,全交给编译器、链接器和运行时库去完成,设计者只需合理设置系统栈、堆和任务栈。
4.2静态内存分配方式
在大多数情况下,静态分配普遍适应于嵌入式系统,因为在操作的过程中,有些程序段的应用和状态基本上都是固定不变的,所以适应性比较强。
在执行程序之前,静态内存实质上就已经进行了,有着比较高的运行效率;对于内存在需求上的状况,在对其进行编译的时候就能够进行准确的计算;对于在内存的分配上,所应用的时间是比较短的,并且这些动作基本上都是固定不变的;对于已经分配完成的内存,一般情况下,是不进行归还的,而且很少有碎片;对于程序进行的测试也是比较容易的,并且有着很高的可靠性。以上这些优点使得静态内存的分配在很多标准要求比较高的系统中都能够使用,如果一些系统的要求特变高,对于在使用中,一定不能够出现延时或者是失败的分配现象产生的话,那么静态内存分配模式就可以很好的满足这些条件,在开始对其进行编译的时候,就可以将这些需要的内存进行分配。
4.3动态内存分配方式
对于静态内存分配来讲,主要注重的方面是效率和安全方面,而对于动态内存分配来说则比较注重于灵活性的掌握。在进行动态的内存分配模式下,对于内存空间的要求,程序是在目标的模块在进行链接之前就已经分配完成的,在程序进行工作的过程当中,是允许继续附加一定的内存或者是在内存的空间上进行移动工作的,也就是说对内存进行分配的工作不一定是要在程序运行之前就要完成的,在程序运行期间也是可以逐步的进行分配的。这种做法在一定程度上减少了浪费的情况,使得很多不被使用的内存不进行分配,对于内存的总体需求降低了要求;对于设计的质量来讲有了很大的提高,使系统在进行编写的时候将更加的简单容易;在程序运行的过程中对内存进行分配,这样就在系统进行启动的时候减少了运行的时间。
在对动态内存进行分配的时候,程序员在对程序进行编写的过程中,可以全身心的将精力放在对于程序的设计上,而不需要对内存的分配问题倾注过多的精力。在程序和硬件系统之间关联性不是特别高的时候,那么对于程序在进行移植方面就有了很大的便利,比如有一些系统不是单纯的为了嵌入式系统而设计的,那么也可以将其很容易的移植到嵌入式系统当中。如入说,在嵌入式系统应用的条件下,对于网络协议栈在一定的平台使用下,为了达到一定的条件,能够在使用系统的时候更加的灵活,在使用系统的时候,使得其中的每一个功能之间都能够进行平衡的选择,那么这个系统就必须可以适应对于动态内存的分配。
4.3.1内存碎片
内存碎片是动态分配,尤其是直接在系统堆中分配的不分区方式的主要问题。在嵌入式实时操作系统中,多次的分配和释放内存,会把原来很大的一块连续内存区域逐渐分割成许多小而且互不相邻的内存区域,也就是内存碎片。内存碎片主要有两种:一种是数据结构未用完它所分配到的内存块所产生的"内部碎片";另一种是两个已分配数据块之间的内存由于太小而无法用于存储任何东西造成的“外部碎片”。
4.3.2内存丢失
内存丢失是一块已经分配但永远不会被释放的内存区,是应用程序所造成的缺陷。嵌入式系统要长时间运行,就要确保绝对没有内存丢失。内存块使用完后,特定的块必须重新放回它以前所属的分区,否则可能造成内存丢失。