亚洲狠狠干,亚洲国产福利精品一区二区,国产八区,激情文学亚洲色图

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

文檔序號:10488822閱讀:447來源:國知局
一種面向高速磁浮交通仿真的共享內存方法
【專利摘要】本發(fā)明涉及一種面向高速磁浮交通仿真的共享內存方法,面向高速磁浮交通仿真包括至少一臺計算機和磁浮仿真設備,每臺計算機通過通信層進行通信,而應用層只能與本機的通信層通信,通信層和應用層均具通信節(jié)點,該方法包括以下步驟:(1)計算機中的通信層建立通信程序進程,通信程序進程建立共享內存塊及共享內存代理;(2)所述的共享內存代理以窗口形式存儲共享內存塊的數(shù)量、網(wǎng)絡狀態(tài)和地址指針信息;(3)計算機中的應用層建立應用程序進程,應用程序進程向所述的共享內存代理提供通信節(jié)點的名稱及收發(fā)地址,調用共享內存代理并與對應的共享內存塊通信。與現(xiàn)有技術相比,本發(fā)明具有讀寫速度快、效果好等優(yōu)點。
【專利說明】
一種面向高速磁浮交通仿真的共享內存方法
技術領域
[0001]本發(fā)明屬于多進程通信領域,尤其是涉及一種面向高速磁浮交通仿真的共享內存方法。
【背景技術】
[0002]為了實現(xiàn)高速磁浮交通仿真中仿真計算機或仿真服務器內部的數(shù)據(jù)傳輸或者信息通信,以完成對本機所運行的磁浮功能軟件進行環(huán)境故障注入條件下的系統(tǒng)功能和性能的測試與驗證,需要使用一種可在多進程之間切換的高效通信技術。

【發(fā)明內容】

[0003]本發(fā)明的目的就是為了克服上述現(xiàn)有技術存在的缺陷而提供一種提高信息傳遞和故障注入效率的面向高速磁浮交通仿真的共享內存方法,將多個共享內存塊進行功能性劃分,并且建立維護共享內存的Initializat1n文件和共享內存代理,使用互斥機制和同步機制,使得進程提供少量的通信信息,調用共享內存的同步讀寫操作,完成多進程間的通
?目O
[0004]本發(fā)明的目的可以通過以下技術方案來實現(xiàn):一種面向高速磁浮交通仿真的共享內存方法,所述的面向高速磁浮交通仿真包括至少一臺計算機和磁浮仿真設備,使用P2P通信協(xié)議作為通信架構,每臺計算機通過通信層進行通信,而應用層只能與本機的通信層通信,通信層和應用層均具通信節(jié)點,該方法采用“主一從”式的技術架構,包括以下步驟:
[0005](I)計算機中的通信層建立通信程序進程,通信程序進程建立共享內存塊及共享內存代理;
[0006](2)所述的共享內存代理以窗口形式存儲共享內存塊的數(shù)量、網(wǎng)絡狀態(tài)和地址指針信息;
[0007](3)計算機中的應用層建立應用程序進程,應用程序進程向所述的共享內存代理提供通信節(jié)點的名稱及收發(fā)地址,調用共享內存代理并與對應的共享內存塊通信。
[0008]在高速磁浮交通仿真計算機中,共享內存同時提供給計算機中的通信層和應用程序,由通信層進行統(tǒng)一地新建和管理,其他應用程序只能發(fā)送請求以獲得對共享內存的讀寫權限。
[0009]所述的步驟(I)中建立共享內存塊的具體方法為:所述的通信程序進程根據(jù)Initializat 1n文件中的通信節(jié)點信息,倉Il建文件映射,新建出通信節(jié)點數(shù)量的兩倍的共享內存塊,所述的Initializat1n文件為由用戶編寫的程序代碼,用戶通過修改所述的Initializat 1n文件從而修改共享內存塊。
[0010]所述的共享內存塊只能讀數(shù)據(jù)或者寫數(shù)據(jù)。
[0011]所述的共享內存塊中使用互斥鎖控制計算機內多個線程對共享內存塊的使用權,具體為:當一個線程對某個共享內存塊進行讀或寫操作時,將互斥鎖置為鎖狀態(tài),使其他調用該共享內存塊的線程置為阻塞狀態(tài),直到該讀或寫操作結束且互斥鎖為解鎖狀態(tài),其他線程可使用該共享內存塊。
[0012]所述的步驟(I)中通信層讀取通信節(jié)點的名稱,為每個通信節(jié)點分配一個“讀出”共享內存塊和一個“寫入”共享內存塊,并且每個共享內存塊使用MapViewOfFileO或MapV i ewOfF i I eEx O函數(shù),將文件映射到相應的進程的地址空間中。
[0013]所述的共享內存代理調用事件向共享內存塊發(fā)送進程的“讀/寫”請求,改變進程的狀態(tài)。
[0014]在每一個共享內存塊中,使用事件實現(xiàn)共享內存的讀寫同步機制。當某一個“寫入”共享內存塊的互斥鎖為解鎖狀態(tài)并且內存中內容為空時,則將SetEventO函數(shù)置為掛起狀態(tài),等待線程的調用以及寫操作的信號。
[0015]當某一個“讀出”共享內存塊的互斥鎖為解鎖狀態(tài)并且內存內容不為空時,無需線程調用自動將SetEventO函數(shù)置為發(fā)信號狀態(tài)以進行讀操作。直到線程讀取完畢,解除發(fā)信號狀態(tài)以實現(xiàn)讀寫同步機制。
[00? 6] 共享內存代理Container使用互斥體Mutex控制多進程對共享內存塊的讀寫操作。進程對一個通信節(jié)點進行通信時,將Mutex置為鎖狀態(tài),使其他調用相同節(jié)點的進程置為阻塞狀態(tài)。直到該通信節(jié)點使用完畢,將Mutex置為解鎖狀態(tài)。
[00? 7 ] 共享內存代理Container使用事件Event維護共享內存塊的網(wǎng)絡狀態(tài)。當上一步的Mutex為鎖狀態(tài)時,Container向特定的共享內存塊發(fā)送Event信號,將共享內存塊置為“讀/寫”狀態(tài)或者返回共享內存塊不存在或錯誤信號給進程。
[0018]每一個共享內存塊中的數(shù)據(jù)只進行單方向地讀出或寫入。共享內存為每一個通信節(jié)點分配一個“讀出”共享內存塊和一個“寫入”共享內存塊。當進程使用共享內存時,需要在不同通信節(jié)點的共享內存塊中進行“讀/寫”操作,確保每一個內存塊中的數(shù)據(jù)流單向傳輸,避免出現(xiàn)“讀寫沖突”的情況,提高進程調用共享內存的效率。
[0019]與現(xiàn)有技術相比,本發(fā)明具有以下優(yōu)點:
[°02°] (I)建立了 Initializat1n文件,這樣用戶不需要修改程序,只修改文本信息就可以達到增刪改共享內存的效果,效果好,用戶需要的時間少;
[0021](2)共享內存塊只能讀,或者寫數(shù)據(jù),不可兩個功能兼?zhèn)?。這樣加快了數(shù)據(jù)讀寫的速度,讀數(shù)據(jù)用讀數(shù)據(jù)的內存塊,寫用寫的,防止讀寫沖突;
[0022](3)建立共享內存代理,共享內存塊在建立的時候需要存儲名稱、ip地址、是否記錄日志等各種各樣的信息,但是共享內存代理只存儲內存塊的指針信息、是否可以讀寫的狀態(tài)等少量信息。所以用戶只需要提供少量的信息就可以調用共享內存代理,讓代理去處理讀寫的問題,用戶只需得到反饋。這樣加快了讀寫的速度。
【附圖說明】
[0023]圖1為本發(fā)明的流程圖。
【具體實施方式】
[0024]下面結合附圖和具體實施例對本發(fā)明進行詳細說明。
[0025]如圖1所示,一種面向高速磁浮交通仿真的共享內存方法,面向高速磁浮交通仿真包括至少一臺計算機和磁浮仿真設備,使用P2P通信協(xié)議作為通信架構,每臺計算機通過通信層進行通信,而應用層只能與本機的通信層通信,通信層和應用層均具通信節(jié)點,該方法采用“主一從”式的技術架構,包括以下步驟:
[0026](I)計算機中的通信層建立通信程序進程,通信程序進程建立共享內存塊及共享內存代理,在高速磁浮交通仿真計算機中,共享內存同時提供給計算機中的通信層和應用層,由通信層進行統(tǒng)一地新建和管理,其他應用程序只能發(fā)送請求以獲得對共享內存的讀寫權限;建立共享內存塊的具體方法為:通信程序進程根據(jù)Initializat1n文件中的通信節(jié)點信息,使用CreateFileMappingO倉Il建文件映射,新建出通信節(jié)點數(shù)量的兩倍的共享內存塊。用戶通過修改Initializat1n文件從而修改共享內存塊。共享內存使用Windows系統(tǒng)的Initializat1n文件(.1ni文件)進行配置和管理。通信層讀取通信節(jié)點的名稱,為每個通信節(jié)點分配一個“讀出”共享內存塊和一個“寫入”共享內存塊,并且每個共享內存塊使用MapV i ewOfF i I e O或Map V i ewOfF i I eEx ()函數(shù),將文件映射到相應的進程的地址空間中。
[0027](2)共享內存代理以窗口形式存儲共享內存塊的數(shù)量、網(wǎng)絡狀態(tài)和地址指針信息;
[0028](3)計算機中的應用層建立應用程序進程,應用程序進程向共享內存代理提供通信節(jié)點的名稱及收發(fā)地址,調用共享內存代理并與對應的共享內存塊通信。
[0029]共享內存塊中使用互斥鎖控制計算機內多個線程對共享內存塊的使用權,具體為:當一個線程對某個共享內存塊進行讀或寫操作時,將互斥鎖置為鎖狀態(tài),使其他調用該共享內存塊的線程置為阻塞狀態(tài),直到該讀或寫操作結束且互斥鎖為解鎖狀態(tài),其他線程可使用該共享內存塊。
[0030]共享內存代理調用事件向共享內存塊發(fā)送進程的“讀/寫”請求,改變進程的狀態(tài)。
[0031]在每一個共享內存塊中,使用事件實現(xiàn)共享內存的讀寫同步機制。當某一個“寫入”共享內存塊的互斥鎖為解鎖狀態(tài)并且內存中內容為空時,則將SetEventO函數(shù)置為掛起狀態(tài),等待線程的調用以及寫操作的信號。
[0032]當某一個“讀出”共享內存塊的互斥鎖為解鎖狀態(tài)并且內存內容不為空時,無需線程調用自動將SetEventO函數(shù)置為發(fā)信號狀態(tài)以進行讀操作。直到線程讀取完畢,解除發(fā)信號狀態(tài)以實現(xiàn)讀寫同步機制。
[0033]共享內存代理Container使用互斥體Mutex控制多進程對共享內存塊的讀寫操作。進程對一個通信節(jié)點進行通信時,將Mutex置為鎖狀態(tài),使其他調用相同節(jié)點的進程置為阻塞狀態(tài)。直到該通信節(jié)點使用完畢,將Mutex置為解鎖狀態(tài)。
[0034]共享內存代理Container使用事件Event維護共享內存塊的網(wǎng)絡狀態(tài)。當上一步的Mutex為鎖狀態(tài)時,Container向特定的共享內存塊發(fā)送Event信號,將共享內存塊置為“讀/寫”狀態(tài)或者返回共享內存塊不存在或錯誤信號給進程。
[0035]每一個共享內存塊中的數(shù)據(jù)只進行單方向地讀出或寫入。共享內存為每一個通信節(jié)點分配一個“讀出”共享內存塊和一個“寫入”共享內存塊。當進程使用共享內存時,需要在不同通信節(jié)點的共享內存塊中進行“讀/寫”操作,確保每一個內存塊中的數(shù)據(jù)流單向傳輸,避免出現(xiàn)“讀寫沖突”的情況,提高進程調用共享內存的效率。
【主權項】
1.一種面向高速磁浮交通仿真的共享內存方法,所述的面向高速磁浮交通仿真包括至少一臺計算機和磁浮仿真設備,每臺計算機通過通信層進行通信,而應用層只能與本機的通信層通信,通信層和應用層均具通信節(jié)點,其特征在于,該方法包括以下步驟: (1)計算機中的通信層建立通信程序進程,通信程序進程建立共享內存塊及共享內存代理; (2)所述的共享內存代理以窗口形式存儲共享內存塊的數(shù)量、網(wǎng)絡狀態(tài)和地址指針信息; (3)計算機中的應用層建立應用程序進程,應用程序進程向所述的共享內存代理提供通信節(jié)點的名稱及收發(fā)地址,調用共享內存代理并與對應的共享內存塊通信。2.根據(jù)權利要求1所述的一種面向高速磁浮交通仿真的共享內存方法,其特征在于,所述的步驟(I)中建立共享內存塊的具體方法為:所述的通信程序進程根據(jù)Initializat1n文件中的通信節(jié)點信息,創(chuàng)建文件映射,新建出通信節(jié)點數(shù)量的兩倍的共享內存塊,用戶通過修改所述的Initializat1n文件從而修改共享內存塊。3.根據(jù)權利要求1所述的一種面向高速磁浮交通仿真的共享內存方法,其特征在于,所述的共享內存塊只能讀數(shù)據(jù)或者寫數(shù)據(jù)。4.根據(jù)權利要求1所述的一種面向高速磁浮交通仿真的共享內存方法,其特征在于,所述的共享內存塊中使用互斥鎖控制計算機內多個線程對共享內存塊的使用權,具體為:當一個線程對某個共享內存塊進行讀或寫操作時,將互斥鎖置為鎖狀態(tài),使其他調用該共享內存塊的線程置為阻塞狀態(tài),直到該讀或寫操作結束且互斥鎖為解鎖狀態(tài),其他線程可使用該共享內存塊。5.根據(jù)權利要求1所述的一種面向高速磁浮交通仿真的共享內存方法,其特征在于,所述的步驟(I)中通信層讀取通信節(jié)點的名稱,為每個通信節(jié)點分配一個“讀出”共享內存塊和一個“寫入”共享內存塊,并且每個共享內存塊使用MapVi ewOf Fi I e ()或MapVi ewOf Fi I eEx()函數(shù),將文件映射到相應的進程的地址空間中。6.根據(jù)權利要求1所述的一種面向高速磁浮交通仿真的共享內存方法,其特征在于,所述的共享內存代理調用事件向共享內存塊發(fā)送進程的“讀/寫”請求,改變進程的狀態(tài)。
【文檔編號】G06F9/54GK105843693SQ201610164566
【公開日】2016年8月10日
【申請日】2016年3月22日
【發(fā)明人】袁時金, 張旭彤, 穆斌, 林曄, 馬骕
【申請人】同濟大學
網(wǎng)友詢問留言 已有0條留言
  • 還沒有人留言評論。精彩留言會獲得點贊!
1