- 1、原创力文档(book118)网站文档一经付费(服务费),不意味着购买了该文档的版权,仅供个人/单位学习、研究之用,不得用于商业用途,未经授权,严禁复制、发行、汇编、翻译或者网络传播等,侵权必究。。
- 2、本站所有内容均由合作方或网友上传,本站不对文档的完整性、权威性及其观点立场正确性做任何保证或承诺!文档内容仅供研究参考,付费前请自行鉴别。如您付费,意味着您自己接受本站规则且自行承担风险,本站不退款、不进行额外附加服务;查看《如何避免下载的几个坑》。如果您已付费下载过本站文档,您可以点击 这里二次下载。
- 3、如文档侵犯商业秘密、侵犯著作权、侵犯人身权等,请点击“版权申诉”(推荐),也可以打举报电话:400-050-0827(电话支持时间:9:00-18:30)。
- 4、该文档为VIP文档,如果想要下载,成为VIP会员后,下载免费。
- 5、成为VIP后,下载本文档将扣除1次下载权益。下载后,不支持退款、换文档。如有疑问请联系我们。
- 6、成为VIP后,您将拥有八大权益,权益包括:VIP文档下载权益、阅读免打扰、文档格式转换、高级专利检索、专属身份标志、高级客服、多端互通、版权登记。
- 7、VIP文档为合作方或网友上传,每下载1次, 网站将根据用户上传文档的质量评分、类型等,对文档贡献者给予高额补贴、流量扶持。如果你也想贡献VIP文档。上传文档
查看更多
基于桥接模式多平台共享内存管理设计与实现
基于桥接模式多平台共享内存管理设计与实现
摘要:在多平台操作系统下,共享内存的实现存在一些差异,在程序设计中通常依靠条件编译来实现,导致软件耦合性太强,不利于扩充。该文结合设计模式中的桥接模式,提出了一种支持多操作系统平台的共享内存程序设计方案改进的新方法。
关键词:多平台;共享内存;桥接模式
中图分类号:TP311 文献标识码:A 文章编号:1009-3044(2012)31-7592-05
在实时控制系统中,大部分系统都要求支持多种操作系统平台,并且经常要进行大量的数据交换和共享。进程间的数据交换和共享可以采用共享内存、管道、发送消息等几种方法来直接完成,在这些方法中,共享内存能够很好的实现进程间大容量数据的快速交换。在不同操作系统下,共享内存的实现存在一些差异,因此,在软件设计中经常需要判别操作系统的类型,分情况进行实现,这样极大地降低了软件???可扩充性和实现细节对客户的透明性。本文旨在结合设计模式中的Bridge模式,提出了一种多操作系统平台下,共享内存模块的设计和实现方法。
1 Bridge模式
Bridge模式的用意是将抽象部分与实现部分分离,使它们都可以独立的变化。主要适用于以下情况:在类的抽象和它的实现部分之间可以划分开,相互独立,还能动态结合;类的抽象以及它的实现都应该可以通过生成子类的方法加以扩充。结构图如图1所示。
2 各平台共享内存的实现
共享内存(Shared Memory)是一种在Windows平台或者Unix平台下多个进程之间通讯的常用方法。可用于同一个程序中多个进程之间通讯,也可以用于不同程序之间的信息传递。
2.1 Windows平台下,共享内存的实现
在Windows操作系统中,任何一个进程不允许读取、写入或是修改另一个进程的数据,但是在某个进程内创建的文件映射对象的视图却能够为多个其他进程所映射,这些进程共享的是物理存储器的同一个页面。因此,当一个进程将数据写入此共享文件映射对象的视图时,其他进程可以立即获取数据变更情况。为了进一步提高数据交换的速度,还可以采用由系统页文件支持的内存映射文件而直接在内存区域使用,显然这种共享内存的方式是完全可以满足在进程间进行大数据量数据快速传输任务要求的。
具体步骤如下:
在发送进程中调用内存映射API函数CreateFileMapping创建一个有名字标识的共享内存;函数CreateFileMapping原型如下所示:
HANDLE CreateFileMapping(HANDLE hFile, LPSECURITY_ATTRIBUTES lpFileMappingAttributes, DWORDflProtect, DWORD dwMaximumSizeHigh, DWORD dwMaximumSizeLow, LPCTSTR lpName );
如果多个进程都要对同一共享内存进行写访问,则必须保持相互间同步。映射文件还可以指定PAGE_WRITECOPY标志,可以保证其原始数据不会遭到破坏,同时允许其他进程在必要时自由的操作数据的拷贝。
在创建文件映射对象后,发送端进程调用MapViewOfFile函数映射到本进程的地址空间内;
接收端进程访问共享内存对象,需要通过内存对象名调用OpenFileMapping函数,以获得共享内存对象的句柄。然后调用MapViewOfFile函数来映射对象视图。用户可以使用该对象视图来进行数据读写操作,以达到数据通讯的目的;
当用户进程结束使用共享内存后,调用UnmapViewOfFile函数以取消其地址空间内的视图。
2.2 Unix平台下,共享内存的实现
在发送端进程中创建一块共享内存,并设置共享内存的大小。
在创建文件映射对象后,发送端进程将这块共享内存区映射到本进程的地址空间内;
接收端进程访问共享内存对象,步骤同发送端。
当用户进程结束使用共享内存后,调用函数取消其地址空间内的视图。
3 多平台下,共享内存的传统实现方法
传统方式下,多平台共享内存的实现主要依靠条件编译。同一段函数的实现过程中,针对不同的平台,要通过条件编译来实现。也就是说,在实现共享内存的类CSharedMemory中,每一个函数的具体实现,都要使用条件编译来区分到底是哪一个平台。这种情况下,如果要修改某一平台的程序,会影响其他平台程序的运行。
下面是CShareMemory类的头文件Sharedmemory.h:
从以上类CShareMemory的定义及实现过程可以看出,两种平台的共享内存通过条件编译来实现,会有很多弊端。比如,修改某一种平台的程序,使得另一种平台也不能正常运行
您可能关注的文档
最近下载
- 天津财经大学2024届毕业生就业质量报告.pdf VIP
- 部编人教版五年级数学上册《小数乘法(全章)》PPT教学课件.ppt VIP
- 数字集成电路部分课后习题chapter11ex.pdf VIP
- 安全通信与安全通信标准EN50159.pdf VIP
- 消防安全管理方案.docx VIP
- 锂电池储能系统技术协议.docx VIP
- 四年级数学下册《每日一练》全52套.pdf VIP
- 2025年福建厦门海关口岸门诊部招聘检验检测岗8人笔试附带答案详解.docx VIP
- 部编版语文四年级上册全册教案.pdf VIP
- DB37_T 4614.2-2023 “爱山东”政务服务平台移动端 第2部分:运营管理规范.docx VIP
文档评论(0)