首页 诗词 字典 板报 句子 名言 友答 励志 学校 网站地图
当前位置: 首页 > 教程频道 > 嵌入开发 > VxWorks >

怎么解决业务扩展和系统内存不足的矛盾

2012-12-17 
如何解决业务扩展和系统内存不足的矛盾问题背景:客户对产品提的需求成爆炸性增长,不同的客户有不同的需求,

如何解决业务扩展和系统内存不足的矛盾
问题背景:
客户对产品提的需求成爆炸性增长,不同的客户有不同的需求,最后就是产品业务模块越来越多,系统内存越用越多,目前
系统的内存已经扩展到每cpu 4G内存还是有业务在设计实现时需要受到内存空间的制约。系统为vxwork 多核平台。

解决方法:
采取动态加载业务内存来实现业务内存按需分配。利用license控制,开启对应的license的业务需要去内存管理模块进行注册,内存管理模块根据其请求的业务规格,按需要为其分配所需要的内存(实际稍多一点,用于模块内存越界保护)。
系统在运行时,使能license 则为其分配内存,不使能业务对应的license则释放其所需要的内存,且系统不需要重新启动,要做到这一点当然是很好的解决之道。
本人有如下困惑:
1、这种动态模块内存加载应该需要系统底层的支撑:模块的代码段、数据段、堆栈段的管理,实现难度有多大?
2、内存释放后,如果想要被其他模块重复再此使用的话,肯定会有系统内存碎片,这些内存碎片如何整理实现难度未知?

欢迎各位内存管理方面的专家给予指教!!
[解决办法]
该回复于2010-04-16 13:10:29被版主删除
[解决办法]
1. 没有那么复杂,用loadLib中的库函数loadModule()等函数以及unldLib中的卸载函数就可以了,或者直接用ld、unld命令也可以。系统会管好底层的,你只要调用这些函数就可以了。
2. 动态分配的时候,内存碎片的问题,只能是设计的时候尽量考虑避免。比如可以考虑对一些特别频繁加载卸载的模块,专门分配到一个特定的用户内存分区中,这样可以让碎片只集中在这个内存分区中。还有加载及分配之前,先全部释放及卸载完后,再去加载及分配内存,尽量让分配内存的时候留下的是连续的内存。
还有可以考虑的是,能否不要纯动态分配,而是根据业务估计的分成几类需要的内存大小,用静态分配方式,只要保证使用的静态内存大小是够本次业务使用的就行。这样虽然会有内存的一些浪费,但可以保证不会产生内存碎片。这样使用的话,肯定不如动态分配内存方便,需要好好规划一下。
[解决办法]
专门分配到一个特定的用户内存分区中

怎么做?以前没接触过这种做法。
[解决办法]
有内存分区的接口函数库,看memPartLib库的帮助就知道了。还有tornado trainning workshop的内存一章也有专门的说明的啊,如果参加过vxworks培训的应该都知道的,这个应该是要讲的
[解决办法]
没有遇到过

[解决办法]

引用:
有内存分区的接口函数库,看memPartLib库的帮助就知道了。还有tornado trainning workshop的内存一章也有专门的说明的啊,如果参加过vxworks培训的应该都知道的,这个应该是要讲的


原来如此,兄弟没参加过类似的培训,平时也很少遇到类似的问题,多谢哈。

热点排行