基于桥接模式多平台共享内存管理设计及实现

基于桥接模式多平台共享内存管理设计及实现

ID:32749534

大小:56.43 KB

页数:6页

时间:2019-02-15

基于桥接模式多平台共享内存管理设计及实现_第1页
基于桥接模式多平台共享内存管理设计及实现_第2页
基于桥接模式多平台共享内存管理设计及实现_第3页
基于桥接模式多平台共享内存管理设计及实现_第4页
基于桥接模式多平台共享内存管理设计及实现_第5页
资源描述:

《基于桥接模式多平台共享内存管理设计及实现》由会员上传分享,免费在线阅读,更多相关内容在工程资料-天天文库

1、基于桥接模式多平台共享内存管理设计及实现摘要:在多平台操作系统下,共享内存的实现存在一些差异,在程序设计中通常依靠条件编译来实现,导致软件耦合性太强,不利于扩充。该文结合设计模式中的桥接模式,提出了一种支持多操作系统平台的共享内存程序设计方案改进的新方法。关键词:多平台;共享内存;桥接模式中图分类号:TP311文献标识码:A文章编号:1009-3044(2012)31-7592-05在实时控制系统中,大部分系统都要求支持多种操作系统平台,并且经常要进行大量的数据交换和共享。进程间的数据交换和共享可以采用共享内存、管道、发送消息等几种方法来直接完成,在这些方法中,共享内存

2、能够很好的实现进程间大容量数据的快速交换。在不同操作系统下,共享内存的实现存在一些差异,因此,在软件设计中经常需要判别操作系统的类型,分情况进行实现,这样极大地降低了软件的可扩充性和实现细节对客户的透明性。本文旨在结合设计模式中的Bridge模式,提出了一种多操作系统平台下,共享内存模块的设计和实现方法。1Bridge模式Bridge模式的用意是将抽象部分与实现部分分离,使它们都可以独立的变化。主要适用于以下情况:在类的抽象和它的实现部分之间可以划分开,相互独立,还能动态结合;类的抽象以及它的实现都应该可以通过生成子类的方法加以扩充。结构图如图1所示。2各平台共享内存的

3、实现共享内存(SharedMemory)是一种在Windows平台或者Unix平台下多个进程之间通讯的常用方法。可用于同一个程序中多个进程之间通讯,也可以用于不同程序之间的信息传递。2.1Windows平台下,共享内存的实现在Windows操作系统中,任何一个进程不允许读取、写入或是修改另一个进程的数据,但是在某个进程内创建的文件映射对象的视图却能够为多个其他进程所映射,这些进程共享的是物理存储器的同一个页面。因此,当一个进程将数据写入此共享文件映射对象的视图时,其他进程可以立即获取数据变更情况。为了进一步提高数据交换的速度,还可以采用由系统页文件支持的内存映射文件而直

4、接在内存区域使用,显然这种共享内存的方式是完全可以满足在进程间进行大数据量数据快速传输任务要求的。具体步骤如下:在发送进程中调用内存映射API函数CreateFileMapping创建一个有名字标识的共享内存;函数CreateFileMapping原型如下所示:HANDLECreateFLeMapping(HANDLEhFile,LPSECURITY_ATTRIBUTESlpFileMappingAttributes,DWORDflProtect,DWORDdwMaximumSizeHigh,DWORDdwMaximumSizeLow,LPCTSTRlpName);如果

5、多个进程都要对同一共享内存进行写访问,则必须保持相互间同步。映射文件还可以指定PAGE_WRITECOPY标志,可以保证其原始数据不会遭到破坏,同时允许其他进程在必要时自由的操作数据的拷贝。在创建文件映射对象后,发送端进程调用MapViewOfF订e函数映射到本进程的地址空间内;接收端进程访问共享内存对象,需要通过内存对象名调用0penFileMapping函数,以获得共享内存对象的句柄。然后调用MapViewOfF订e函数来映射对象视图。用户可以使用该对象视图来进行数据读写操作,以达到数据通讯的目的;当用户进程结束使用共享内存后,调用UnmapViewOfF订e函数以

6、取消其地址空间内的视图。2.2Unix平台下,共享内存的实现在发送端进程中创建一块共享内存,并设置共享内存的大小。在创建文件映射对象后,发送端进程将这块共享内存区映射到本进程的地址空间内;接收端进程访问共享内存对象,步骤同发送端。当用户进程结束使用共享内存后,调用函数取消其地址空间内的视图。3多平台下,共享内存的传统实现方法传统方式下,多平台共享内存的实现主要依靠条件编译。同一段函数的实现过程中,针对不同的平台,要通过条件编译来实现。也就是说,在实现共享内存的类CSharedMemory中,每一个函数的具体实现,都要使用条件编译来区分到底是哪一个平台。这种情况下,如果要

7、修改某一平台的程序,会影响其他平台程序的运行。下面是CShareMemory类的头文件Sharedmemory.h:从以上类CShareMemory的定义及实现过程可以看出,两种平台的共享内存通过条件编译来实现,会有很多弊端。比如,修改某一种平台的程序,使得另一种平台也不能正常运行,耦合性太强。另外,如果系统要扩充到一种新的平台运行,会严重影响当前的系统运行,可扩展性很差。4用桥接模式对实现过程进行改进利用桥接模式,将类的抽象和实现分开,共享内存模块的主要类的设计如图2所示。改进后,抽象类CShareMemory为应用程序提供了共享内存具

当前文档最多预览五页,下载文档查看全文

此文档下载收益归作者所有

当前文档最多预览五页,下载文档查看全文
温馨提示:
1. 部分包含数学公式或PPT动画的文件,查看预览时可能会显示错乱或异常,文件下载后无此问题,请放心下载。
2. 本文档由用户上传,版权归属用户,天天文库负责整理代发布。如果您对本文档版权有争议请及时联系客服。
3. 下载前请仔细阅读文档内容,确认文档内容符合您的需求后进行下载,若出现内容与标题不符可向本站投诉处理。
4. 下载文档时可能由于网络波动等原因无法下载或下载错误,付费完成后未能成功下载的用户请联系客服处理。