專利名稱:總線式進(jìn)程間通信方法
技術(shù)領(lǐng)域:
本發(fā)明涉及一種總線式進(jìn)程間通信方法,特別涉及Unix或Linux下總線式進(jìn)程間快速通信方法。
背景技術(shù):
“進(jìn)程通信”是大、中型計算機(jī)應(yīng)用系統(tǒng)中必不可少的一個功能,通過進(jìn)程通信可以實(shí)現(xiàn)兩個相互獨(dú)立的應(yīng)用程序(或者說任務(wù)TASK)之間的數(shù)據(jù)交換。
在早期的過程控制級計算機(jī)中,進(jìn)程間的數(shù)據(jù)交換普遍采用磁盤隊列文件、甚至簡單的磁盤數(shù)據(jù)文件(為敘述方便,以下將這兩種文件統(tǒng)稱為“磁盤文件”)的方式來實(shí)現(xiàn)進(jìn)程間數(shù)據(jù)交換。應(yīng)該說,磁盤文件是實(shí)現(xiàn)進(jìn)程間通信的一種可取方式,但這種技術(shù)是特定時期的產(chǎn)物。隨著計算機(jī)運(yùn)行速度的不斷加快,進(jìn)程間對數(shù)據(jù)交換速率的要求不斷提高,以磁盤文件為媒介的進(jìn)程間數(shù)據(jù)交換方式的局限性已經(jīng)凸顯出來(1)磁盤文件數(shù)據(jù)交換方式只適用于數(shù)據(jù)交換速率不太高的場合,因?yàn)閷Υ疟P的I/O無法跟上CPU的速率。
(2)因?yàn)橄到y(tǒng)資源有限,因此在采用磁盤文件、并且數(shù)據(jù)交換速率較快的情況下,無法避免文件鎖管理的問題;但是對文件鎖的管理比較復(fù)雜,結(jié)果往往是降低數(shù)據(jù)交換速率指標(biāo)而繞過文件鎖。
(3)因?yàn)榇疟P文件處理速度無法太快,即使是計算機(jī)硬件設(shè)備的性能大幅度提高,但無法從根本上改變磁盤I/O速率遠(yuǎn)遠(yuǎn)落后于CPU速率的現(xiàn)實(shí),因而磁盤文件方式的進(jìn)程間數(shù)據(jù)交換往往成為整個應(yīng)用系統(tǒng)數(shù)據(jù)交換速率整體提高的瓶頸。如果希望從根本上解決這一問題,應(yīng)該應(yīng)用新的計算機(jī)技術(shù),尋求新的解決途徑。
目前在國內(nèi)外的許多應(yīng)用軟件中,已經(jīng)普遍采用內(nèi)存技術(shù)(包括共享內(nèi)存ShareMemory、內(nèi)存隊列MemoryQueue、信號燈Semaphore等等)而不是磁盤文件技術(shù)來實(shí)現(xiàn)快速數(shù)據(jù)交換,但是還沒有出現(xiàn)針對進(jìn)程間快速數(shù)據(jù)交換而開發(fā)的具有廣泛通用性且易于使用的Package(軟件包),而事實(shí)上在冶金、能源、制造等等領(lǐng)域的大、中型應(yīng)用系統(tǒng)中,都對進(jìn)程間快速數(shù)據(jù)交換功能有廣泛的需求。
發(fā)明內(nèi)容
本發(fā)明的目的在于提供一種總線式進(jìn)程間通信方法,以克服以磁盤文件為媒介的進(jìn)程間數(shù)據(jù)交換方式對整個應(yīng)用系統(tǒng)數(shù)據(jù)交換速率整體提高所產(chǎn)生的瓶頸效應(yīng),滿足大、中型應(yīng)用系統(tǒng)對進(jìn)程間快速數(shù)據(jù)交換的需求,為末端用戶提供一個高性能、易使用的進(jìn)程間快速數(shù)據(jù)交換平臺。
本發(fā)明的技術(shù)方案如下一種總線式進(jìn)程間通信方法,應(yīng)用于具有Unix或Linux操作系統(tǒng)環(huán)境的平臺中,結(jié)合共享內(nèi)存技術(shù)和信號燈集合技術(shù);包括如下通信步驟A.進(jìn)程通信初始化A1.在內(nèi)存中開辟一共享內(nèi)存區(qū)域,該區(qū)域劃分為若干內(nèi)存槽,一內(nèi)存槽作為狀態(tài)標(biāo)志字,其余作為進(jìn)程通信的數(shù)據(jù)存放區(qū);A2.內(nèi)存槽分為若干組,每組具有各自不同的訪問索引號;A3.創(chuàng)建一個信號燈集合,其內(nèi)包含的信號燈數(shù)量與內(nèi)存槽組數(shù)量相等;A4.設(shè)置狀態(tài)標(biāo)志字初始值、信號燈初始值和內(nèi)存槽初始值;B.電文的發(fā)送與接收B1.發(fā)送電文,即判斷目的進(jìn)程的內(nèi)存槽組是否可以接收電文,如果禁止接收則以錯誤代碼返回;如果可以接收,則將電文寫入目的進(jìn)程的內(nèi)存槽組;B2.接收電文,即判斷本進(jìn)程的信號燈值是否表示需要接收電文,如果無需接收則立即返回或等待;如果需要接收,則讀取電文;C.結(jié)束進(jìn)程通信,即設(shè)定該進(jìn)程對應(yīng)的內(nèi)存槽組的狀態(tài)標(biāo)志字值及其對應(yīng)的信號燈值,禁止其它進(jìn)程發(fā)送數(shù)據(jù)到此內(nèi)存槽組中。
所述狀態(tài)標(biāo)志字表示四個信息當(dāng)前內(nèi)存槽組狀態(tài)、當(dāng)前內(nèi)存槽組內(nèi)的可讀電文數(shù)、當(dāng)前讀電文的相對槽號以及當(dāng)前寫電文的相對槽號。狀態(tài)標(biāo)志字為四維向量,每一向量為4個字節(jié)的整型數(shù),各對應(yīng)一個信息。
采用本發(fā)明的總線式進(jìn)程間通信方法,其使用結(jié)果表明該軟件包使用非常簡潔、性能十分穩(wěn)定、數(shù)據(jù)交換速率極快,完全滿足大型數(shù)據(jù)處理應(yīng)用系統(tǒng)的快速數(shù)據(jù)交換要求。
圖1是整個進(jìn)程通信內(nèi)存塊的構(gòu)成圖;圖2是使用進(jìn)程通信軟件包的一般步驟;圖3是進(jìn)程通信初始化流程圖;圖4是進(jìn)程通信接收電文流程圖;圖5是進(jìn)程通信發(fā)送電文流程圖;圖6是關(guān)閉進(jìn)程通信流程圖。
圖中符號說明101 內(nèi)存槽組狀態(tài)字首地址ptrStatus102 內(nèi)存槽組首地址ptrSlot103 a#進(jìn)程通信內(nèi)存槽組104 b#進(jìn)程通信內(nèi)存槽組105 z#進(jìn)程通信內(nèi)存槽組106 a#狀態(tài)標(biāo)志字107 b#狀態(tài)標(biāo)志字108 z#狀態(tài)標(biāo)志字109 保留區(qū)域步驟201 程序開始步驟202 調(diào)用進(jìn)程通信初始化(PSinit)步驟203 調(diào)用接收進(jìn)程通信電文或/和向其他進(jìn)程發(fā)送電文PSRecvMsg或/和PSSendMsg步驟204 調(diào)用進(jìn)程通信結(jié)束(PSClose)步驟205 程序結(jié)束步驟301 PSinit開始步驟302 檢查進(jìn)程通信內(nèi)存塊是否已經(jīng)存在步驟303 已經(jīng)存在嗎?步驟304 初始化本進(jìn)程所對應(yīng)的內(nèi)存槽組所在的內(nèi)存區(qū)域狀態(tài)字設(shè)定為{0,0,0,0},內(nèi)存槽設(shè)定為空值步驟305 檢查進(jìn)程通信使用的信號燈集合是否已經(jīng)存在步驟306 已經(jīng)存在嗎?
步驟307 初始化本進(jìn)程所對應(yīng)的內(nèi)存槽組所對應(yīng)的信號燈值為0步驟308 進(jìn)程通信初始化成功步驟309 創(chuàng)建1024×(26×8+1)即209K字節(jié)的內(nèi)存區(qū)步驟310 創(chuàng)建成功嗎?步驟311 初始化剛剛創(chuàng)建的內(nèi)存區(qū)26個狀態(tài)字設(shè)定為{-1,0,0,0},208個內(nèi)存槽設(shè)定為空值步驟312 創(chuàng)建包含26個信號燈的信號燈集合步驟313 創(chuàng)建成功嗎?步驟314 初始化剛剛創(chuàng)建的信號燈集合將26個信號燈都設(shè)定為0步驟315 進(jìn)程通信初始化失敗步驟316 PSinit結(jié)束步驟401 PSRecvMsg開始步驟402 檢查本進(jìn)程對應(yīng)的內(nèi)存槽組所對應(yīng)的信號燈值是否大于0步驟403 大于0嗎?步驟404 讀取狀態(tài)標(biāo)志字,得到當(dāng)前讀電文的相對槽號步驟405 讀取該內(nèi)存槽內(nèi)的電文步驟406 當(dāng)前讀電文的相對槽號加1并對8取模數(shù)步驟407 當(dāng)前內(nèi)存槽組內(nèi)的電文數(shù)減1步驟408 當(dāng)前內(nèi)存槽組對應(yīng)的信號燈值減1步驟409 接收其他進(jìn)程發(fā)送來的電文成功步驟410 是否等待電文到來?步驟411 接收其他進(jìn)程發(fā)送來的電文失敗步驟412 PSRecvMsg結(jié)束步驟501 PSSendMsg開始步驟502 讀取目標(biāo)進(jìn)程內(nèi)存槽組的狀態(tài)標(biāo)志字,檢查目標(biāo)進(jìn)程對應(yīng)的內(nèi)存槽組是否可用步驟503 可用嗎?步驟504 根據(jù)讀取的目標(biāo)進(jìn)程內(nèi)存槽組的狀態(tài)標(biāo)志字,得到目標(biāo)進(jìn)程內(nèi)存槽組內(nèi)的電文數(shù)步驟505 電文數(shù)小于8嗎?
步驟506 將電文寫入目標(biāo)進(jìn)程的內(nèi)存槽組的當(dāng)前寫入槽號位置步驟507 目標(biāo)進(jìn)程的內(nèi)存槽組寫電文的相對槽號加1并對8取模數(shù)步驟508 目標(biāo)進(jìn)程的內(nèi)存槽組內(nèi)的電文數(shù)加1步驟509 目標(biāo)進(jìn)程的內(nèi)存槽組對應(yīng)的信號燈的信號燈值加1步驟510 發(fā)送電文到其他進(jìn)程成功步驟511 發(fā)送電文到其他進(jìn)程失敗步驟512 PSSendMsg結(jié)束步驟601 PSClose開始步驟602 將本進(jìn)程對應(yīng)的內(nèi)存槽組的狀態(tài)字中nBlockAvailable設(shè)定為-1,禁止其他進(jìn)程發(fā)送數(shù)據(jù)到此內(nèi)存槽組內(nèi)步驟603 將本進(jìn)程對應(yīng)的內(nèi)存槽組的當(dāng)前讀電文相對槽號設(shè)定為0,寫電文相對槽號也設(shè)定為0步驟604 將本進(jìn)程對應(yīng)的內(nèi)存槽組內(nèi)的電文數(shù)設(shè)定為0步驟605 將本進(jìn)程對應(yīng)的內(nèi)存槽組所對應(yīng)的信號燈值設(shè)定為0步驟606 PSClose結(jié)束具體實(shí)施方式
現(xiàn)運(yùn)用以下具體實(shí)施例并結(jié)合圖1至圖6,對本發(fā)明的總線式進(jìn)程間通信方法進(jìn)行詳細(xì)說明,以了解其特點(diǎn)和功效。
為了實(shí)現(xiàn)進(jìn)程間快速數(shù)據(jù)交換,綜合采用共享內(nèi)存技術(shù)和信號燈集合技術(shù)。共享內(nèi)存提供了數(shù)據(jù)快速存取的“場所”,而信號燈集合充當(dāng)數(shù)據(jù)到達(dá)的“信號燈”。如圖1所示,為整個進(jìn)程通信內(nèi)存塊的構(gòu)成圖,在內(nèi)存中開辟一個大小為1024×(8×26+1)=209K字節(jié)的區(qū)域;此內(nèi)存區(qū)域劃分為8×26+1=209個大小為1K的內(nèi)存槽;標(biāo)號為0#-208#,其中0#內(nèi)存槽作為狀態(tài)字專用(101),而1#-208#內(nèi)存槽則作為進(jìn)程通信的數(shù)據(jù)存放區(qū),每8個分為1組,第一個內(nèi)存槽的地址為內(nèi)存槽組首地址(102),共26個內(nèi)存槽組,用‘a(chǎn)’-‘z’這26個字母來作為這26個內(nèi)存槽組(103,104,105)的訪問索引號;第0#槽共1024個字節(jié),前16×26=416個字節(jié)又劃分為26個小塊,每塊16個字節(jié),這26個16字節(jié)的小內(nèi)存塊充當(dāng)‘a(chǎn)’-‘z’號內(nèi)存槽組的狀態(tài)標(biāo)志字(106,107,108),余下的608個字節(jié)作為保留區(qū)域(109);創(chuàng)建一個信號燈集合,此集合包含26個信號燈,每個信號燈的取值為0-8;這26個信號燈分別對應(yīng)a#-z#內(nèi)存槽組,用來描述該內(nèi)存槽組內(nèi)需要讀出的電文個數(shù);當(dāng)任意需要進(jìn)行進(jìn)程通信的進(jìn)程開始執(zhí)行時,首先檢測是否已經(jīng)存在進(jìn)程通信內(nèi)存區(qū)。如果不存在,則執(zhí)行創(chuàng)建通信內(nèi)存區(qū)的操作,即申請(26×8+1)×1024=214016bytes=209Kbytes的共享內(nèi)存,并將通信內(nèi)存區(qū)全部置為空;將所有通信狀態(tài)字設(shè)為{-1;0;0;0};創(chuàng)建信號燈集合,將26個信號燈全部設(shè)為0;如果進(jìn)程通信內(nèi)存區(qū)已經(jīng)存在,則跳過創(chuàng)建進(jìn)程通信內(nèi)存區(qū)的操作,直接執(zhí)行下一步操作進(jìn)程首先進(jìn)行其自身的通信內(nèi)存槽組初始化,即將自身內(nèi)存區(qū)域全部初始化為空值;并將通信狀態(tài)字初始化為{0;/*表示“內(nèi)存槽組”可用*/0;/*表示當(dāng)前“內(nèi)存槽組”內(nèi)無電文*/0;/*表示當(dāng)前讀電文的相對槽號為0*/0;/*表示當(dāng)前寫電文的相對槽號為0*/}將自身對應(yīng)的信號燈設(shè)定為0;內(nèi)存槽組狀態(tài)標(biāo)志字(szMsgBlockSatus)的構(gòu)成如下
如圖2所示,為使用總線式進(jìn)程間通信軟件包的一般步驟,包括程序開始(步驟201);調(diào)用進(jìn)程通信初始化(PSinit)(步驟202);調(diào)用接收進(jìn)程通信電文或/和向其他進(jìn)程發(fā)送電文PSRecvMsg或/和PSSendMsg(步驟203);調(diào)用進(jìn)程通信結(jié)束(PSClose)(步驟204);程序結(jié)束(步驟205)。
如圖3所示,進(jìn)程通信初始化流程包括如下步驟PSinit開始(步驟301);檢查進(jìn)程通信內(nèi)存塊是否已經(jīng)存在(步驟302);已經(jīng)存在嗎?(步驟303)如果存在則直接進(jìn)入步驟304;如果不存在,則創(chuàng)建1024×(26×8+1)即209K字節(jié)的內(nèi)存區(qū)(步驟309);創(chuàng)建成功嗎?(步驟310)不成功則跳至步驟315;成功則初始化剛剛創(chuàng)建的內(nèi)存區(qū),26個狀態(tài)字設(shè)定為{-1,0,0,0},208個內(nèi)存槽設(shè)定為空值(步驟311),然后進(jìn)入步驟304;初始化本進(jìn)程所對應(yīng)的內(nèi)存槽組所在的內(nèi)存區(qū)域,狀態(tài)字設(shè)定為{0,0,0,0},內(nèi)存槽設(shè)定為空值(步驟304);檢查進(jìn)程通信使用的信號燈集合是否已經(jīng)存在(步驟305);已經(jīng)存在嗎?(步驟306)如果存在則初始化本進(jìn)程所對應(yīng)的內(nèi)存槽組所對應(yīng)的信號燈值為0(步驟307),進(jìn)程通信初始化成功(步驟308),然后PSinit結(jié)束(步驟316);如果不存在則創(chuàng)建包含26個信號燈的信號燈集合(步驟312),創(chuàng)建成功嗎?(步驟313)不成功則進(jìn)入步驟315,成功則初始化剛剛創(chuàng)建的信號燈集合,將26個信號燈全部設(shè)定為0(步驟314),再進(jìn)入步驟308。
如圖4所示,是進(jìn)程通信接收電文流程,包括如下步驟PSRecvMsg開始(步驟401);檢查本進(jìn)程對應(yīng)的內(nèi)存槽組所對應(yīng)的信號燈值是否大于0(步驟402);大于0嗎?(步驟403),不是則判斷是否等待電文到來(步驟410),等待則回到步驟402,不等待則接收其他進(jìn)程發(fā)送來的電文失敗(步驟411),然后進(jìn)入步驟412;如果大于0,則讀取狀態(tài)標(biāo)志字,得到當(dāng)前讀電文的相對槽號(步驟404),讀取該內(nèi)存槽內(nèi)的電文(步驟405),出錯則跳至步驟411,否則當(dāng)前讀電文的相對槽號加1并對8取模數(shù)(步驟406),當(dāng)前內(nèi)存槽組內(nèi)的電文數(shù)減1(步驟407),當(dāng)前內(nèi)存槽組對應(yīng)的信號燈值減1(步驟408),如果出錯則跳至步驟411,否則接收其他進(jìn)程發(fā)送來的電文成功(步驟409),然后PSRecvMsg結(jié)束(步驟412)。
如圖5所示,是進(jìn)程通信發(fā)送電文流程,包括如下步驟PSSendMsg開始(步驟501);先讀取目標(biāo)進(jìn)程內(nèi)存槽組的狀態(tài)標(biāo)志字,檢查目標(biāo)進(jìn)程對應(yīng)的內(nèi)存槽組是否可用(步驟502);可用嗎?(步驟503),不可用則發(fā)送電文到其他進(jìn)程失敗(步驟511),然后進(jìn)入步驟512;可用則根據(jù)讀取的目標(biāo)進(jìn)程內(nèi)存槽組的狀態(tài)標(biāo)志字,得到目標(biāo)進(jìn)程內(nèi)存槽組內(nèi)的電文數(shù)(步驟504),電文數(shù)小于8嗎(步驟505),不是則進(jìn)入步驟511,是則將電文寫入目標(biāo)進(jìn)程的內(nèi)存槽組的當(dāng)前寫入槽號位置(步驟506),如果出錯則進(jìn)入步驟511,否則目標(biāo)進(jìn)程的內(nèi)存槽組寫電文的相對槽號加1并對8取模數(shù)(步驟507),出錯則進(jìn)入步驟511,否則目標(biāo)進(jìn)程的內(nèi)存槽組內(nèi)的電文數(shù)加1(步驟508),目標(biāo)進(jìn)程的內(nèi)存槽組對應(yīng)的信號燈的信號燈值加1(步驟509),出錯則進(jìn)入步驟511,否則發(fā)送電文到其他進(jìn)程成功(步驟510),然后PSSendMsg結(jié)束(步驟512)。
如圖6所示,是關(guān)閉進(jìn)程通信流程,包括如下步驟PSClose開始(步驟601);將本進(jìn)程對應(yīng)的內(nèi)存槽組的狀態(tài)字中nBlockAvailable設(shè)定為-1,禁止其他進(jìn)程發(fā)送數(shù)據(jù)到此內(nèi)存槽組內(nèi)(步驟602);將本進(jìn)程對應(yīng)的內(nèi)存槽組的當(dāng)前讀電文相對槽號設(shè)定為0,寫電文相對槽號也設(shè)定為0(步驟603);將本進(jìn)程對應(yīng)的內(nèi)存槽組內(nèi)的電文數(shù)設(shè)定為0(步驟604);將本進(jìn)程對應(yīng)的內(nèi)存槽組所對應(yīng)的信號燈值設(shè)定為0(步驟605);PSClose結(jié)束(步驟606)。
本軟件包在用戶的計算機(jī)上正常安裝后,會在/usr/1ib下形成一個靜態(tài)函數(shù)庫libpsc.a。要有效地發(fā)揮本軟件的性能,應(yīng)該具備以下條件(1)用戶的計算機(jī)使用Unix操作系統(tǒng),但對Unix的種類沒有要求;(2)用戶的計算機(jī)的內(nèi)存應(yīng)該在32M以上,并且內(nèi)存越多效果越好;(3)用戶在調(diào)用本軟件包時應(yīng)該使用C/C++語言。
(4)編譯用戶程序時,在編譯指令或makefile文件中指定調(diào)用本軟件包的函數(shù)庫libpsc.a。
其優(yōu)異的性能體現(xiàn)在(1)適用于多種Unix操作系統(tǒng),例如SCO OpenServer、UnixWare、UnixTru64。即使是其他種類的Unix,也只要簡單修改源代碼、重新生成軟件包即可。
(2)實(shí)現(xiàn)了進(jìn)程間在毫秒級(相當(dāng)于1/1000秒)內(nèi)快速交換數(shù)據(jù)信息的目標(biāo),支持極快速率的進(jìn)程間數(shù)據(jù)交換,電文(每條電文長度<=1024bytes)傳輸速率可達(dá)到500條/秒;而同樣條件下使用磁盤文件處理的傳輸速度約為20條/秒。
(3)支持最多26個任務(wù)(如果有必要,完全可以根據(jù)用戶需求擴(kuò)充到26個以上)同時交叉發(fā)送數(shù)據(jù),即相當(dāng)于在內(nèi)存中存在325條進(jìn)程間數(shù)據(jù)通道,可以滿足當(dāng)前絕大部分應(yīng)用系統(tǒng)的數(shù)據(jù)交換要求。
(4)調(diào)用接口十分簡潔,并且多種Unix下調(diào)用接口完全一致。
(5)用戶使用接口的步驟非常簡單,只要依次采用以下幾個步驟PSinit→PSRecvMsg和(或)PSSendMsg→PSClose。
(6)作為配套,提供了用戶后備維護(hù)進(jìn)程通信的工具,在通信出現(xiàn)異常時,用戶可直接對內(nèi)存關(guān)鍵數(shù)據(jù)進(jìn)行恢復(fù)操作。
(7)在很多大型企業(yè)的服務(wù)器計算機(jī)中,普遍采用了“UNIX+ORACLE+HMI軟件”的數(shù)據(jù)管理模式,本軟件包可以與數(shù)據(jù)庫系統(tǒng)構(gòu)成“數(shù)據(jù)庫+前端開發(fā)工具+進(jìn)程通信軟件包”的應(yīng)用開發(fā)模式,有非常廣闊的應(yīng)用空間。
權(quán)利要求
1.一種總線式進(jìn)程間通信方法,應(yīng)用于具有Unix或Linux操作系統(tǒng)環(huán)境的平臺中,結(jié)合共享內(nèi)存技術(shù)和信號燈集合技術(shù);包括如下通信步驟A.進(jìn)程通信初始化A1.在內(nèi)存中開辟一共享內(nèi)存區(qū)域,該區(qū)域劃分為若干內(nèi)存槽,一內(nèi)存槽作為狀態(tài)標(biāo)志字,其余作為進(jìn)程通信的數(shù)據(jù)存放區(qū);A2.將內(nèi)存槽分為若干組,每組具有各自不同的訪問索引號;A3.創(chuàng)建一個信號燈集合,其內(nèi)包含的信號燈數(shù)量與內(nèi)存槽組數(shù)量相等;A4.設(shè)置狀態(tài)標(biāo)志字初始值、信號燈初始值和內(nèi)存槽初始值;B.電文的發(fā)送與接收B1.發(fā)送電文,即判斷目的進(jìn)程的內(nèi)存槽組是否可以接收電文,如果禁止接收則以錯誤代碼返回;如果可以接收,則將電文寫入目的進(jìn)程的內(nèi)存槽組;B2.接收電文,即判斷本進(jìn)程的信號燈值是否表示需要接收電文,如果無需接收則立即返回或等待;如果需要接收,則讀取電文;C.結(jié)束進(jìn)程通信,即設(shè)定該進(jìn)程對應(yīng)的內(nèi)存槽組的狀態(tài)標(biāo)志字值及其對應(yīng)的信號燈值,禁止其它進(jìn)程發(fā)送數(shù)據(jù)到此內(nèi)存槽中。
2.如權(quán)利要求1所述的總線式進(jìn)程間通信方法,其特征在于,所述狀態(tài)標(biāo)志字表示四個信息當(dāng)前內(nèi)存槽組狀態(tài)、當(dāng)前內(nèi)存槽組內(nèi)的可讀電文數(shù)、當(dāng)前讀電文的相對槽號以及當(dāng)前寫電文的相對槽號。
3.如權(quán)利要求2所述的總線式進(jìn)程間通信方法,其特征在于,所述狀態(tài)標(biāo)志字為四維向量,每一向量為4個字節(jié)的整型數(shù),各對應(yīng)一個信息。
4.如權(quán)利要求1所述的總線式進(jìn)程間通信方法,其特征在于,步驟A4中所述狀態(tài)標(biāo)志字初始值表示內(nèi)存槽組可用、當(dāng)前內(nèi)存槽組內(nèi)無電文、當(dāng)前讀電文的相對槽號數(shù)以及當(dāng)前寫電文的相對槽號數(shù)。
5.如權(quán)利要求1所述的總線式進(jìn)程間通信方法,其特征在于,步驟B1所述的發(fā)送電文和步驟B2所述的接收電文可以同時進(jìn)行或者單一進(jìn)行。
6.如權(quán)利要求5所述的總線式進(jìn)程間通信方法,其特征在于,所述發(fā)送電文的具體步驟如下B1-1讀出目標(biāo)進(jìn)程的通信狀態(tài)字,判斷目標(biāo)進(jìn)程的“內(nèi)存槽組”是否可用,如果不可用,則以錯誤代碼返回;如果可用,進(jìn)入步驟B1-2;B1-2判斷目標(biāo)進(jìn)程內(nèi)存槽組內(nèi)的當(dāng)前電文數(shù)是否滿,如果滿,則以錯誤代碼返回;如果未滿,則進(jìn)入步驟B1-3;B1-3將電文寫到目標(biāo)進(jìn)程內(nèi)存槽組中由當(dāng)前寫電文的相對槽號標(biāo)志的槽號內(nèi),并且將當(dāng)前寫電文的相對槽號設(shè)定為下一個槽號,同時當(dāng)前內(nèi)存槽組內(nèi)電文數(shù)加1,并且將目標(biāo)進(jìn)程內(nèi)存槽組所對應(yīng)的信號燈值加1。
7.如權(quán)利要求5所述的總線式進(jìn)程間通信方法,其特征在于,所述接收電文的具體步驟如下B2-1檢查本進(jìn)程對應(yīng)的信號燈值是否表明有電文需要接收,不需接收則返回或者等待信號燈值變化到表示有電文到達(dá),然后進(jìn)入步驟B2-2;需要接收則直接進(jìn)入步驟B2-2;B2-2讀出當(dāng)前進(jìn)程的通信狀態(tài)字,判斷當(dāng)前進(jìn)程的內(nèi)存槽組內(nèi)有多少條電文,當(dāng)前內(nèi)存槽組內(nèi)讀電文的相對槽號是多少;B2-3根據(jù)上述數(shù)據(jù)讀出第一條需要讀取的電文,然后將讀電文的相對槽號設(shè)定為下一個槽號,將當(dāng)前內(nèi)存槽組內(nèi)電文數(shù)減1,將當(dāng)前進(jìn)程內(nèi)存槽組所對應(yīng)的信號燈值減1。
8.如權(quán)利要求1所述的總線式進(jìn)程間通信方法,其特征在于,步驟A1中所述作為狀態(tài)標(biāo)志字的內(nèi)存槽為第一內(nèi)存槽。
全文摘要
一種總線式進(jìn)程間通信方法,應(yīng)用于具有Unix或Linux操作系統(tǒng)環(huán)境的平臺中。其結(jié)合共享內(nèi)存技術(shù)和信號燈集合技術(shù),在內(nèi)存中開辟一共享內(nèi)存區(qū)域,該區(qū)域劃分為若干內(nèi)存槽,一內(nèi)存槽作為狀態(tài)標(biāo)志字組存放區(qū),其余作為進(jìn)程通信的數(shù)據(jù)存放區(qū);內(nèi)存槽分為若干組,每組具有各自不同的訪問索引號;創(chuàng)建一個信號燈集合,其內(nèi)包含的信號燈數(shù)量與內(nèi)存槽組數(shù)量相等;設(shè)置狀態(tài)標(biāo)志字初始值、信號燈初始值和內(nèi)存槽初始值。采用本發(fā)明的總線式進(jìn)程間通信方法,其使用結(jié)果表明該軟件包使用非常簡潔、性能十分穩(wěn)定、數(shù)據(jù)交換速率極快,完全滿足大型數(shù)據(jù)處理應(yīng)用系統(tǒng)的快速數(shù)據(jù)交換要求。
文檔編號G06F13/38GK1501277SQ0214548
公開日2004年6月2日 申請日期2002年11月19日 優(yōu)先權(quán)日2002年11月19日
發(fā)明者張智勇 申請人:寶山鋼鐵股份有限公司