[發明專利]一種基于共享內存的進程間通訊方法有效
| 申請號: | 201310432622.7 | 申請日: | 2013-09-22 |
| 公開(公告)號: | CN103514053B | 公開(公告)日: | 2017-01-25 |
| 發明(設計)人: | 劉慶云;李世明;劉洋;秦鵬;鄭超;孫永;周舟;楊威 | 申請(專利權)人: | 中國科學院信息工程研究所 |
| 主分類號: | G06F9/54 | 分類號: | G06F9/54;G06F9/44 |
| 代理公司: | 北京輕創知識產權代理有限公司11212 | 代理人: | 楊立 |
| 地址: | 100093 *** | 國省代碼: | 北京;11 |
| 權利要求書: | 查看更多 | 說明書: | 查看更多 |
| 摘要: | |||
| 搜索關鍵詞: | 一種 基于 共享 內存 進程 通訊 方法 | ||
技術領域
本發明涉及計算機領域,尤其涉及一種基于共享內存的進程間通訊方法。?
背景技術
傳統的Unix編程模型,在同一個操作系統上運行多個進程,每個進程都有各自的地址空間,Unix進程間的信息共享可以有多種形式,通常包括:管道,FIFO,消息隊列,以及域間套接字和共享內存。除共享內存外的幾種通信方式的問題在于,兩個進程交換信息時,這些信息必須經由內核傳遞,從而造成了更高的開銷,這在效率要求極高的系統中就成為了影響系統性能的瓶頸。?
而利用共享內存進程間的通訊則不再涉及內核,如何利用共享內存,實現進程間的高效通訊,成為亟待解決的一個問題。?
發明內容
本發明所要解決的技術問題是提供一種基于共享內存的進程間通訊方法,合理利用共享內存,減少系統開銷,達到更高的性能要求。?
本發明解決上述技術問題的技術方案如下:一種基于共享內存的多進程間通訊方法,包括如下步驟:?
步驟1:寫進程創建包括管理單元、循環隊列和內存池的共享內存,并在管理單元中存儲關于整個共享內存的管理信息;?
步驟2:寫進程從管理單元中獲取關于當前寫進程的操作位置,,根據每次待寫入數據的大小,順序開辟與待存入數據大小等大的第N(N=1,2,3…)存儲塊,將待寫入的數據存入相應存儲塊中;?
步驟3:開辟第N存儲塊時,記錄所述第N存儲塊的大小、起始位置、?結束位置以及存儲的是否為完整數據,上述記錄的信息形成第N結構體,并存入循環隊列的隊尾指針處;同時更新管理單元中關于當前寫進程的操作位置的記錄;?
步驟4:在執行步驟2至3的同時,一個或若干個讀進程可對共享內存進行讀操作;?
步驟5:每個讀進程自循環隊列的隊頭開始,依次讀取第N(N=1,2,3…)結構體;?
步驟6:判斷第N結構體是否處于循環隊列的隊尾,如果是隊尾,說明該結構體對應的存儲塊正在進行寫操作,則等待,等到隊尾指針不指向該結構體時,執行步驟7;如果不是隊尾,則直接執行步驟7;?
步驟7:根據該結構體中關于第N存儲塊的位置信息,讀取內存池中相應第N存儲塊中的數據;?
步驟8:判斷所述寫進程是否還要向內存池寫入數據,如果是,返回步驟2;否則判斷內存池中數據是否都已讀完,如果未讀完則返回步驟5;否則結束。?
本發明的有益效果是:本發明以循環隊列形式對共享內存進行管理,共享內存供多個進程以隊列形式順序讀寫,讀或寫以塊為單位,塊大小由用戶控制;共享內存被多進程共享,進程分為只讀進程和只寫進程;支持多個進程同時對該共享內存進行讀操作,只能有一個進程對該共享內存進行寫操作,讀寫不沖突,能同時進行;本發明所述方法大大減少了進程間交換信息時經由內核的拷貝次數,提高了后臺系統的吞吐量,降低了系統的開銷,有效地提高了系統的性能。?
在上述技術方案的基礎上,本發明還可以做如下改進。?
進一步,所述步驟1中所述的管理信息包括:?
該共享內存創建者ID、隊列規模、內存池大小、內存池起始位置、內存?池結尾位置、當前寫進程的操作位置、當前讀該共享內存的所有讀進程標記、當前使用該共享內存的進程數目、讀寫鎖和互斥鎖。?
進一步,步驟2中開辟第N存儲塊時,還要進行如下操作,?
步驟2.1:根據第N-1存儲塊的結束位置、待存入數據的大小以及內存池的結尾位置判斷內存池是否還有足夠空間開辟第N存儲塊來存儲數據,如果有足夠空間,則執行步驟2.2;如果沒有足夠空間,則執行2.3;?
步驟2.2:開辟與待存入數據等大的第N存儲塊,將待存入數據存入所述第N存儲塊,生成關于第N存儲塊的結構體,并在結構體中標記所存儲的數據為完整數據;?
步驟2.3:開辟自第N-1存儲塊的結束位置至內存池的結束位置大小的第N存儲塊,將待存入數據的一部分存入所述第N存儲塊,形成第N存儲塊的結構體,在結構體中標記所存儲的數據為不完整數據;將剩余的待存入數據存入內存池頭部。?
采用上述進一步方案的有益效果是:可以有效解決當內存不足時,數據寫入的問題。?
進一步,步驟2.3中在將剩余的待存入數據存入內存池頭部前要執行如下步驟:?
步驟2.3.1:寫進程根據循環隊列的第N(N=1,2,3,4…)結構體中關于讀進程讀取第N存儲塊的記錄,判斷第N存儲塊中是否被所有讀進程讀完,如果未讀完則等待,等到讀完后,執行步驟2.3.2;如果讀完則直接執行步驟2.3.2;?
該專利技術資料僅供研究查看技術是否侵權等信息,商用須獲得專利權人授權。該專利全部權利屬于中國科學院信息工程研究所,未經中國科學院信息工程研究所許可,擅自商用是侵權行為。如果您想購買此專利、獲得商業授權和技術合作,請聯系【客服】
本文鏈接:http://www.szxzyx.cn/pat/books/201310432622.7/2.html,轉載請聲明來源鉆瓜專利網。
- 上一篇:旋轉壓縮機和具有其的冷凍循環裝置
- 下一篇:耐磨環組件和泵送設備





