APP下载

基于Linux操作系统的虚拟软件平台内存管理设计

2015-03-06殷锡亮

黑龙江科学 2015年1期
关键词:实时性线程字节

殷锡亮

(哈尔滨侨航通信设备有限公司,哈尔滨 150028)

现代嵌入式处理器上越来越多的使用Linux操作系统。这不仅由于Linux是免费开源的,并有众多的软件开发者共同开发,它也具有实时性等特点,来满足嵌入式系统开发所需的特性。虽然Linux本身就提供很好的内存使用机制,但是由于通信软件对内存使用有其特殊的方式,长期的直接运行于Linux之上会造成很多的内存碎片,造成无法申请到内存。

本文基于Linux操作系统设计了一种虚拟软件平台,并着重介绍这个虚拟平台提供的内存管理机制。

1 Linux操作系统以及虚拟软件平台

1.1 Linux操作系统

Linux是一套免费使用和自由传播的类Unix操作系统,是一个基于POSIX和UNIX的多用户、多任务、支持多线程和多CPU的操作系统。它能运行主要的UNIX工具软件、应用程序和网络协议。它支持32位和64位硬件。Linux继承了Unix以网络为核心的设计思想,是一个性能稳定的多用户网络操作系统。

由于Linux具有的众多特性,通信设备中越来越多地采用Linux,代替费用昂贵的Vx Works操作系统。尽管会降低一定程度的实时性,但由于实时业务的逐年下降,取而代之的是非实时的数据业务,系统对于实时性的依赖程度逐渐降低,这也为使用linux提供了可行性。

1.2 虚拟软件平台

通信软件架构一般采用如下图的软件架构模式。

图1

虚拟软件平台位于操作系统与上层软件之间,屏蔽了操作系统的特性,由于其特殊的作用,所以它必须提供诸如TCP/IP通信,进程间通信,进程调度,内存管理,定时器管理,状态机等诸多功能,而最为重要的就是内存管理。

2 内存管理

2.1 内存的分类

系统内存分为堆内存以及栈内存,对于小于2048字节的内存,一般使用的是栈内存,这种大小的数据区一般用来传输信令数据,对于传输更大的数据块,需要申请的是堆内存。

2.2 内存池初始化

根据分析通信系统软件架构,大概需要几种消息类型,它们使用的数据长度大约为128字节,256字节,512字节,1024字节,2 048 字节,4 096字节,8 192字节,16 384字节等。(如图2所示)

图2

在内存池的构建上,我们也根据需求,分别向操作系统申请堆内存以及栈内存。其中小于以及等于2 048字节的,申请栈内存,即静态数据区内存;对于大于2 048字节的,申请堆内存,即动态内存区内存。但是动态内存在内存池初始化后对于操作系统来说,它也变成了静态的内存,因为所有的内存申请操作以及回收操作,都是这一片在初始化即申请到的系统内存上面进行。

2.3 内存分配使用算法

根据业务模块调用传进的数据长度参数,判断数据长度是属于哪一个数据区间,如果小于64字节,即使用64字节内存池,如果数据长度在64与128之间,则使用128字节内存池,以此类推。

申请到内存池的内存块后,内存管理模块,自动把它从就绪队列移到运行队列尾,并根据系统时间戳,申请串号(内存池行号以及列号),申请内存进程ID,对内存块标注(形成一个唯一的标识),直到内存申请进程释放这片内存,内存管理模块根据申请串号在运行队列找到这片内存,并把它内容清空,放回到就绪队列尾。

2.4 并发申请

如果使用内存管理模块的应用进程为多线程处理,就必须在申请内存的操作以及释放内存的操作加入互斥机制,比如线程锁,或者信号的PV操作,等等,用来保护内存管理机制,使其能够串行地对内存池进行操作。

抑或为了增加系统的并发性处理机制,可以在初始化的时候明确应用进程使用几个线程,为每个线程独立配备一个内存池,这样不会出现竞争机制,加快了系统的运行速度。

笔者推荐后一种方法,因为通信软件的系统特性,这种处理方法更有利于系统稳定的运行。

3 结语

内存作为一个系统软件运行依赖最为重要的资源,需要统一地进行分配管理,不能由上层的业务模块自行调用系统A P I,去直接操作系统内存,这样会造成内存碎片的产生,降低系统的可靠性。

[1] (美)博韦.深入理解 LINUX内核[M].陈莉群,冯锐,牛欣源,译.中国电力出版社,2008.

[2] [美]洛夫.Linux系统编程[M].东南大学出版社,2009.

[3] Dharma Prakash AgrawalQing-An Zeng.无线与移动通信系统[M].徐春秀,武穆清,译.人民邮电出版社,2005.

[4] (美)W.Richard Stevens Stephen A.Rago.UNIX环境高级编程[M].尤晋元,张亚英,戚正伟,译.人民邮电出版社,2008.

[5] 严蔚敏,吴伟民.数据结构(C语言)[M].清华大学出版社,2007.

猜你喜欢

实时性线程字节
No.8 字节跳动将推出独立出口电商APP
基于C#线程实验探究
基于国产化环境的线程池模型研究与实现
No.10 “字节跳动手机”要来了?
简谈MC7字节码
航空电子AFDX与AVB传输实时性抗干扰对比
浅谈linux多线程协作
计算机控制系统实时性的提高策略
一种车载Profibus总线系统的实时性分析
人类进入“泽它时代”