感谢支持
我们一直在努力

低压集抄系统中Linux共享内存使用分析

1.   概述


Linux由于历史原因,其IPC分为SYSTEM V版本和POSIX版本。本文主要讨论在共享内存方面这两个版本之间的区别。


各共享内存IPC的函数对照表:

























IPC


POSIX


SYSTEM V


头文件


<sys/mman.h>


<sys/shm.h>


IPC创建和删除


shm_open


shm_unlink


shmget


IPC控制


ftruncate


fstat


shmctl


IPC操作


mmap


munmap


msync


shmat


shmdt


在实现机制方面,POSIX共享内存是采用IO映射的方式来实现的,即通过系统调用mmap()映射一个普通文件实现共享内存。SYSTEM V共享内存则是通过对特殊文件系统shm中的文件来映射实现的,也就是说,每个共享内存区域���应特殊文件系统shm中的一个文件。它们之间的关键区别是POSIX共享内存把一个普通文件映射到系统内存中实现,而SYSTEM V共享内存则是直接在shm特殊文件系统上实现。


2.   低压集抄嵌软中共享内存使用分析


目前低压集抄嵌软采用POSIX共享内存实现进程间通信和系统级数据的内存共享。而POSIX共享内存需要通过一个普通文件来映射实现共享内存,于是系统在启动时创建ramfs文件系统,再在其上建立共享内存文件。ramfs是内存文件系统,它直接建立在内存上,占用相当多的内存空间。同时由于低压集抄系统采用的ucLinux不支持虚拟内存,这样在映射时又占用一大部分内存空间,直接导致了共享内存对双份内存空间的占用。


那为什么不能将普通文件建立在flash文件系统上呢?由于NAND FLASH存储器件的写操作的特殊性,决定了嵌软的写数据操作不能太频繁,否则有可能影响NAND FLASH器件的寿命。据《Linux内核源代码情景分析》下载见 http://www.linuxidc.com/Linux/2011-05/36202.htm,POSIX共享内存会由系统不定时将共享内存中的内容刷新到普通文件中。基于此,当初设计时采用ramfs也不是没有道理的。


3.   低压集抄嵌软中共享内存改进建议


由于目前装置生产中成本控制较严,内存容量较小,而低压集抄系统须共享的数据较多,如在北京集抄嵌软中系统共享数据达到10M,通过POSIX共享内存映射机制实现进程信息共享后,将内存耗去20M。基于此,建议共享内存采用SYSTEM V版本提供的方法来实现。由于SYSTEM V共享内存不需要通过普通文件映射来实现,所以不需要刷新到普通文件中。在实际使用中可以比POSIX省近一半内存,非常可观。


要验证以上设想,还需要做两点工作:


1、确认目前所用的Linux系统支持SYSTEM V共享内存及shm特殊文件系统。


2、实现一个原型,证明以上设想是实际可行的。

赞(0) 打赏
转载请注明出处:服务器评测 » 低压集抄系统中Linux共享内存使用分析
分享到: 更多 (0)

听说打赏我的人,都进福布斯排行榜啦!

支付宝扫一扫打赏

微信扫一扫打赏