一种面向高速磁浮交通仿真的共享内存方法

文档序号:10488822阅读:362来源:国知局
一种面向高速磁浮交通仿真的共享内存方法
【专利摘要】本发明涉及一种面向高速磁浮交通仿真的共享内存方法,面向高速磁浮交通仿真包括至少一台计算机和磁浮仿真设备,每台计算机通过通信层进行通信,而应用层只能与本机的通信层通信,通信层和应用层均具通信节点,该方法包括以下步骤:(1)计算机中的通信层建立通信程序进程,通信程序进程建立共享内存块及共享内存代理;(2)所述的共享内存代理以窗口形式存储共享内存块的数量、网络状态和地址指针信息;(3)计算机中的应用层建立应用程序进程,应用程序进程向所述的共享内存代理提供通信节点的名称及收发地址,调用共享内存代理并与对应的共享内存块通信。与现有技术相比,本发明具有读写速度快、效果好等优点。
【专利说明】
一种面向高速磁浮交通仿真的共享内存方法
技术领域
[0001]本发明属于多进程通信领域,尤其是涉及一种面向高速磁浮交通仿真的共享内存方法。
【背景技术】
[0002]为了实现高速磁浮交通仿真中仿真计算机或仿真服务器内部的数据传输或者信息通信,以完成对本机所运行的磁浮功能软件进行环境故障注入条件下的系统功能和性能的测试与验证,需要使用一种可在多进程之间切换的高效通信技术。

【发明内容】

[0003]本发明的目的就是为了克服上述现有技术存在的缺陷而提供一种提高信息传递和故障注入效率的面向高速磁浮交通仿真的共享内存方法,将多个共享内存块进行功能性划分,并且建立维护共享内存的Initializat1n文件和共享内存代理,使用互斥机制和同步机制,使得进程提供少量的通信信息,调用共享内存的同步读写操作,完成多进程间的通
?目O
[0004]本发明的目的可以通过以下技术方案来实现:一种面向高速磁浮交通仿真的共享内存方法,所述的面向高速磁浮交通仿真包括至少一台计算机和磁浮仿真设备,使用P2P通信协议作为通信架构,每台计算机通过通信层进行通信,而应用层只能与本机的通信层通信,通信层和应用层均具通信节点,该方法采用“主一从”式的技术架构,包括以下步骤:
[0005](I)计算机中的通信层建立通信程序进程,通信程序进程建立共享内存块及共享内存代理;
[0006](2)所述的共享内存代理以窗口形式存储共享内存块的数量、网络状态和地址指针信息;
[0007](3)计算机中的应用层建立应用程序进程,应用程序进程向所述的共享内存代理提供通信节点的名称及收发地址,调用共享内存代理并与对应的共享内存块通信。
[0008]在高速磁浮交通仿真计算机中,共享内存同时提供给计算机中的通信层和应用程序,由通信层进行统一地新建和管理,其他应用程序只能发送请求以获得对共享内存的读写权限。
[0009]所述的步骤(I)中建立共享内存块的具体方法为:所述的通信程序进程根据Initializat 1n文件中的通信节点信息,仓Il建文件映射,新建出通信节点数量的两倍的共享内存块,所述的Initializat1n文件为由用户编写的程序代码,用户通过修改所述的Initializat 1n文件从而修改共享内存块。
[0010]所述的共享内存块只能读数据或者写数据。
[0011]所述的共享内存块中使用互斥锁控制计算机内多个线程对共享内存块的使用权,具体为:当一个线程对某个共享内存块进行读或写操作时,将互斥锁置为锁状态,使其他调用该共享内存块的线程置为阻塞状态,直到该读或写操作结束且互斥锁为解锁状态,其他线程可使用该共享内存块。
[0012]所述的步骤(I)中通信层读取通信节点的名称,为每个通信节点分配一个“读出”共享内存块和一个“写入”共享内存块,并且每个共享内存块使用MapViewOfFileO或MapV i ewOfF i I eEx O函数,将文件映射到相应的进程的地址空间中。
[0013]所述的共享内存代理调用事件向共享内存块发送进程的“读/写”请求,改变进程的状态。
[0014]在每一个共享内存块中,使用事件实现共享内存的读写同步机制。当某一个“写入”共享内存块的互斥锁为解锁状态并且内存中内容为空时,则将SetEventO函数置为挂起状态,等待线程的调用以及写操作的信号。
[0015]当某一个“读出”共享内存块的互斥锁为解锁状态并且内存内容不为空时,无需线程调用自动将SetEventO函数置为发信号状态以进行读操作。直到线程读取完毕,解除发信号状态以实现读写同步机制。
[00? 6] 共享内存代理Container使用互斥体Mutex控制多进程对共享内存块的读写操作。进程对一个通信节点进行通信时,将Mutex置为锁状态,使其他调用相同节点的进程置为阻塞状态。直到该通信节点使用完毕,将Mutex置为解锁状态。
[00? 7 ] 共享内存代理Container使用事件Event维护共享内存块的网络状态。当上一步的Mutex为锁状态时,Container向特定的共享内存块发送Event信号,将共享内存块置为“读/写”状态或者返回共享内存块不存在或错误信号给进程。
[0018]每一个共享内存块中的数据只进行单方向地读出或写入。共享内存为每一个通信节点分配一个“读出”共享内存块和一个“写入”共享内存块。当进程使用共享内存时,需要在不同通信节点的共享内存块中进行“读/写”操作,确保每一个内存块中的数据流单向传输,避免出现“读写冲突”的情况,提高进程调用共享内存的效率。
[0019]与现有技术相比,本发明具有以下优点:
[°02°] (I)建立了 Initializat1n文件,这样用户不需要修改程序,只修改文本信息就可以达到增删改共享内存的效果,效果好,用户需要的时间少;
[0021](2)共享内存块只能读,或者写数据,不可两个功能兼备。这样加快了数据读写的速度,读数据用读数据的内存块,写用写的,防止读写冲突;
[0022](3)建立共享内存代理,共享内存块在建立的时候需要存储名称、ip地址、是否记录日志等各种各样的信息,但是共享内存代理只存储内存块的指针信息、是否可以读写的状态等少量信息。所以用户只需要提供少量的信息就可以调用共享内存代理,让代理去处理读写的问题,用户只需得到反馈。这样加快了读写的速度。
【附图说明】
[0023]图1为本发明的流程图。
【具体实施方式】
[0024]下面结合附图和具体实施例对本发明进行详细说明。
[0025]如图1所示,一种面向高速磁浮交通仿真的共享内存方法,面向高速磁浮交通仿真包括至少一台计算机和磁浮仿真设备,使用P2P通信协议作为通信架构,每台计算机通过通信层进行通信,而应用层只能与本机的通信层通信,通信层和应用层均具通信节点,该方法采用“主一从”式的技术架构,包括以下步骤:
[0026](I)计算机中的通信层建立通信程序进程,通信程序进程建立共享内存块及共享内存代理,在高速磁浮交通仿真计算机中,共享内存同时提供给计算机中的通信层和应用层,由通信层进行统一地新建和管理,其他应用程序只能发送请求以获得对共享内存的读写权限;建立共享内存块的具体方法为:通信程序进程根据Initializat1n文件中的通信节点信息,使用CreateFileMappingO仓Il建文件映射,新建出通信节点数量的两倍的共享内存块。用户通过修改Initializat1n文件从而修改共享内存块。共享内存使用Windows系统的Initializat1n文件(.1ni文件)进行配置和管理。通信层读取通信节点的名称,为每个通信节点分配一个“读出”共享内存块和一个“写入”共享内存块,并且每个共享内存块使用MapV i ewOfF i I e O或Map V i ewOfF i I eEx ()函数,将文件映射到相应的进程的地址空间中。
[0027](2)共享内存代理以窗口形式存储共享内存块的数量、网络状态和地址指针信息;
[0028](3)计算机中的应用层建立应用程序进程,应用程序进程向共享内存代理提供通信节点的名称及收发地址,调用共享内存代理并与对应的共享内存块通信。
[0029]共享内存块中使用互斥锁控制计算机内多个线程对共享内存块的使用权,具体为:当一个线程对某个共享内存块进行读或写操作时,将互斥锁置为锁状态,使其他调用该共享内存块的线程置为阻塞状态,直到该读或写操作结束且互斥锁为解锁状态,其他线程可使用该共享内存块。
[0030]共享内存代理调用事件向共享内存块发送进程的“读/写”请求,改变进程的状态。
[0031]在每一个共享内存块中,使用事件实现共享内存的读写同步机制。当某一个“写入”共享内存块的互斥锁为解锁状态并且内存中内容为空时,则将SetEventO函数置为挂起状态,等待线程的调用以及写操作的信号。
[0032]当某一个“读出”共享内存块的互斥锁为解锁状态并且内存内容不为空时,无需线程调用自动将SetEventO函数置为发信号状态以进行读操作。直到线程读取完毕,解除发信号状态以实现读写同步机制。
[0033]共享内存代理Container使用互斥体Mutex控制多进程对共享内存块的读写操作。进程对一个通信节点进行通信时,将Mutex置为锁状态,使其他调用相同节点的进程置为阻塞状态。直到该通信节点使用完毕,将Mutex置为解锁状态。
[0034]共享内存代理Container使用事件Event维护共享内存块的网络状态。当上一步的Mutex为锁状态时,Container向特定的共享内存块发送Event信号,将共享内存块置为“读/写”状态或者返回共享内存块不存在或错误信号给进程。
[0035]每一个共享内存块中的数据只进行单方向地读出或写入。共享内存为每一个通信节点分配一个“读出”共享内存块和一个“写入”共享内存块。当进程使用共享内存时,需要在不同通信节点的共享内存块中进行“读/写”操作,确保每一个内存块中的数据流单向传输,避免出现“读写冲突”的情况,提高进程调用共享内存的效率。
【主权项】
1.一种面向高速磁浮交通仿真的共享内存方法,所述的面向高速磁浮交通仿真包括至少一台计算机和磁浮仿真设备,每台计算机通过通信层进行通信,而应用层只能与本机的通信层通信,通信层和应用层均具通信节点,其特征在于,该方法包括以下步骤: (1)计算机中的通信层建立通信程序进程,通信程序进程建立共享内存块及共享内存代理; (2)所述的共享内存代理以窗口形式存储共享内存块的数量、网络状态和地址指针信息; (3)计算机中的应用层建立应用程序进程,应用程序进程向所述的共享内存代理提供通信节点的名称及收发地址,调用共享内存代理并与对应的共享内存块通信。2.根据权利要求1所述的一种面向高速磁浮交通仿真的共享内存方法,其特征在于,所述的步骤(I)中建立共享内存块的具体方法为:所述的通信程序进程根据Initializat1n文件中的通信节点信息,创建文件映射,新建出通信节点数量的两倍的共享内存块,用户通过修改所述的Initializat1n文件从而修改共享内存块。3.根据权利要求1所述的一种面向高速磁浮交通仿真的共享内存方法,其特征在于,所述的共享内存块只能读数据或者写数据。4.根据权利要求1所述的一种面向高速磁浮交通仿真的共享内存方法,其特征在于,所述的共享内存块中使用互斥锁控制计算机内多个线程对共享内存块的使用权,具体为:当一个线程对某个共享内存块进行读或写操作时,将互斥锁置为锁状态,使其他调用该共享内存块的线程置为阻塞状态,直到该读或写操作结束且互斥锁为解锁状态,其他线程可使用该共享内存块。5.根据权利要求1所述的一种面向高速磁浮交通仿真的共享内存方法,其特征在于,所述的步骤(I)中通信层读取通信节点的名称,为每个通信节点分配一个“读出”共享内存块和一个“写入”共享内存块,并且每个共享内存块使用MapVi ewOf Fi I e ()或MapVi ewOf Fi I eEx()函数,将文件映射到相应的进程的地址空间中。6.根据权利要求1所述的一种面向高速磁浮交通仿真的共享内存方法,其特征在于,所述的共享内存代理调用事件向共享内存块发送进程的“读/写”请求,改变进程的状态。
【文档编号】G06F9/54GK105843693SQ201610164566
【公开日】2016年8月10日
【申请日】2016年3月22日
【发明人】袁时金, 张旭彤, 穆斌, 林晔, 马骕
【申请人】同济大学
网友询问留言 已有0条留言
  • 还没有人留言评论。精彩留言会获得点赞!
1