專利名稱:一種共享臨界區(qū)數(shù)據(jù)傳遞的方法
技術(shù)領(lǐng)域:
本發(fā)明提供一種共享臨界區(qū)數(shù)據(jù)傳遞的高效方法,特別適合嵌入式領(lǐng)域中兩個處理器或兩個設(shè)備之間通過共享內(nèi)存雙向通訊的情況。
如
圖1所示,設(shè)備1向設(shè)備2傳遞數(shù)據(jù)時,通過一個共享臨界區(qū),稱之為下行信息區(qū),設(shè)備1下行信息區(qū)的寫操作和設(shè)備2對下行信息區(qū)的讀操作,要通過程序保證不能同時操作。
設(shè)備2向設(shè)備1傳遞數(shù)據(jù)時,將這個共享臨界區(qū)稱之為上行信息區(qū),設(shè)備1對上行信息區(qū)的讀操作和設(shè)備2對上行信息區(qū)的寫操作,也是不能同時進行的。
通過共享臨界區(qū)進行數(shù)據(jù)通信,如果整個臨界區(qū)只作為一塊來處理,任何一方進行讀、寫操作都需要獲得許可證,沖突概率非常高,所以往往是按如圖1所示,將臨界區(qū)分成兩塊,一塊用于下行數(shù)據(jù),另一塊用于另一方向的上行數(shù)據(jù),每一塊都是一方寫信息,另一方讀信息。作為每一塊來說,采用現(xiàn)有技術(shù)的做法,仍不能完全避免讀寫沖突。
采取互斥的方法處理共享臨界區(qū)間的數(shù)據(jù)傳遞,處理起來編程麻煩,而且效率較低。
本發(fā)明的技術(shù)方案是這樣的首先把整個共享臨界區(qū)分成完全獨立的兩塊,分別用于上行或下行的數(shù)據(jù),其大小與上、下行數(shù)據(jù)流量成正比,若上下行數(shù)據(jù)流程差不多,可將臨界區(qū)基本等分;每塊臨界區(qū)各擁有自己的控制結(jié)構(gòu),包括寫指針和讀指針,臨界區(qū)為環(huán)形;其次由通訊雙方一起對這兩塊臨界區(qū)的控制結(jié)構(gòu)進行初始化;然后雙方就可以按上下行方向選擇相應(yīng)的臨界區(qū),重復(fù)以下過程進行通訊1.發(fā)送方檢查臨界區(qū)有無空間,若無,延遲后再發(fā);2.發(fā)送方將內(nèi)容放入臨界區(qū);3.發(fā)送方修改寫指針,如果系統(tǒng)如果采取中斷方式處理時,則通知對方;4.接受方取讀指針,獲悉有新內(nèi)容;5.接受方取內(nèi)容,修改讀指針,如果系統(tǒng)如果采取中斷方式處理時,則通知對方。
采用本發(fā)明所述方法,與現(xiàn)有技術(shù)相比,提高了通過共享臨界區(qū)傳遞數(shù)據(jù)的效率,降低了編程的復(fù)雜度。
圖1為兩個設(shè)備之間通過臨界區(qū)進行通訊的示意圖;如前面所述,采用現(xiàn)有技術(shù)的做法,仍不能完全避免讀寫沖突。但是,如果把每塊都看成環(huán)形結(jié)構(gòu),采用本發(fā)明所述方法,就可以完全避免讀寫沖突,達到通信雙方可同時操作的效果。本發(fā)明中,整個共享臨界區(qū)分成兩塊,分割后的兩塊臨界區(qū)完全獨立,每塊功能單一,雙方的操作也得到簡化,對于任何一塊來說,一方只對它進行寫操作,而另一方只對它進行讀操作,操作可以同時進行。把兩塊結(jié)合到一起看,就可以達到臨界區(qū)雙方可以同時對臨界區(qū)同時讀寫的效果,而不需要通過信號量控制。
圖2中,(a)表示環(huán)形臨界區(qū)通訊的正常情況;(b)表示環(huán)形臨界區(qū)為空的情況,此時讀指針=寫指針;(c)表示環(huán)形臨界區(qū)為滿的情況,此時寫指針=讀指針-1;整塊臨界區(qū)可以看成一個環(huán)型,緩沖區(qū)用到末尾后自動回到開頭,設(shè)置一個寫指針和一個讀指針,寫指針在前,讀指針在后;其中寫指針指向當(dāng)前緩沖環(huán)可寫空間起始位置,讀指針指向當(dāng)前緩沖環(huán)中可讀內(nèi)容起始位置,只有當(dāng)讀寫指針一樣時,讀指針指向的位置才無內(nèi)容可讀;從讀指針到寫指針之間是已經(jīng)放入到臨界區(qū)的信息,接受方可以讀出;從寫指針環(huán)回到讀指針位置之間的空間就是可以用來存放傳輸內(nèi)容的空間;在每塊臨界區(qū)內(nèi)設(shè)置一個控制結(jié)構(gòu),用于記錄臨界區(qū)內(nèi)信息的狀況,以及信息的讀寫指針位置。
下面以從設(shè)備1到設(shè)備2下行信息的傳輸操作為例說明該方法的具體步驟第一步,由設(shè)備1或設(shè)備2初始化臨界區(qū)控制結(jié)構(gòu),包括設(shè)置讀指針BeginPtr和寫指針EndPtr為共享臨界區(qū)的首地址,雙方同步后再進行通訊狀態(tài);第二步,設(shè)備1要向臨界區(qū)送內(nèi)容;1、當(dāng)寫指針EndPtr等于讀指針BeginPtr時,緩沖區(qū)全空;2、當(dāng)寫指針EndPtr小于讀指針BeginPtr時,可寫緩沖區(qū)長度為(讀指針BeginPtr-寫指針EndPtr1-1),如圖3(b);3、當(dāng)寫指針EndPtr大于讀指針BeginPtr時,可寫緩沖區(qū)長度為(尾地址-寫指針EndPtr+1)+(讀指針BeginPtr-首地址)-1,如圖3(a);第三步,設(shè)備1根據(jù)臨界區(qū)大小向臨界區(qū)寫入內(nèi)容,然后修改寫指針,并通知設(shè)備2或由設(shè)備2定時掃描;第四步設(shè)備2被激活,查詢臨界區(qū);1、當(dāng)讀指針BeginPtr等于寫指針EndPtr時,沒有可讀的內(nèi)容。
2、當(dāng)讀指針BeginPtr小于寫指針EndPtr時,可讀消息內(nèi)容長度為(寫指針EndPtr-讀指針BeginPtr),如圖3(a)。
3、當(dāng)讀指針BeginPtr大于寫指針EndPtr時,可讀消息內(nèi)容長度為(尾地址-讀指針BeginPtr+1)+(寫指針EndPtr-首地址),如圖3(b)。
第五步,讀出消息內(nèi)容,進行相應(yīng)處理。同時將讀指針BeginPtr移動至寫指針EndPPtr處,并通知設(shè)備1或由設(shè)備1定時掃描以繼續(xù)發(fā)送,重復(fù)步驟二~五。
本發(fā)明之所以能夠?qū)崿F(xiàn)通訊雙方可以同時操作臨界區(qū),不僅僅是因為將共享臨界區(qū)分成了互不相干的兩塊,而且對于每塊來說,操作雙方也是可以同時對它進行操作的;這是因為寫指針永遠在讀指針的前面,如果一方正在進行讀取操作時,另一方向臨界區(qū)添加內(nèi)容,修改寫指針,則可讀的內(nèi)容更多,不會影響原來的讀操作,只是取過之后它還可以再取剛剛放入的內(nèi)容;同樣,如果一方正在進行寫操作時,另一方讀走內(nèi)容,修改了讀指針,只會使寫空間變得更大,寫操作結(jié)束后,如果還有內(nèi)容,還可以立即再進行一次寫操作。
圖3為共享臨界區(qū)數(shù)據(jù)傳遞方法中數(shù)據(jù)區(qū)的兩種具體實例其中,圖3(a)為寫指針大于讀指針的情況;圖3(b)為寫指針小于讀指針的情況,此時信息已從臨界區(qū)尾部掉頭。在前面圖2中,我們形象說明了臨界區(qū)的環(huán)形結(jié)構(gòu)情況,并按信息量用(a)、(b)、(c)分別說明了一般情況、全空、全滿的情況,在環(huán)形結(jié)構(gòu)中,其信息是一個連續(xù)存儲段,而實際情況臨界區(qū)不可能首尾連在一起,對于臨界區(qū)非空情形,即圖2的(a)和(c),都有如圖3所示的兩種可能。
本發(fā)明在使用中需特別注意以下幾點(1)讀取內(nèi)容后再移動讀指針,否則可能導(dǎo)致內(nèi)容尚未讀走就被覆蓋;(2)寫完內(nèi)容后再移動寫指針,否則可能導(dǎo)致內(nèi)容尚未填好就被讀走;(3)由于臨界區(qū)往往較大,以單字節(jié)表示讀、寫指針通常是不夠的;而(這里有些不通順)字節(jié)就可能會出現(xiàn)一方正在存取指針時,另一方讀出的指針部分為新的,還有部分為舊的現(xiàn)象,所以必須保證獲取的讀、寫指針正確;本發(fā)明采用的辦法是獲取指針后等待一個很短的延時,然后再獲取一次,如此下去,直至連續(xù)兩次獲取的指針相同為止。
(4)當(dāng)讀指針與寫指針相等時,可能有兩種理解,臨界區(qū)滿或空,為避免二義性,本發(fā)明將臨界區(qū)空出一個字節(jié),即讀指針與寫指針相等時,表示緩沖區(qū)空;就是圖2(b)中的情況;當(dāng)寫指針在讀指針后面一個字節(jié)時,表示臨界區(qū)滿,就是圖2(c)中的情況。
權(quán)利要求
1.一種共享臨界區(qū)數(shù)據(jù)傳遞的方法,其特征在于首先把整個共享臨界區(qū)分成完全獨立的兩塊環(huán)形臨界區(qū),每塊臨界區(qū)各擁有自己的控制結(jié)構(gòu),包括寫指針和讀指針;其次由通訊雙方一起對這兩塊臨界區(qū)的控制結(jié)構(gòu)進行初始化;然后雙方就可以按上下行方向選擇相應(yīng)的臨界區(qū),重復(fù)以下過程進行通訊發(fā)送方將內(nèi)容放入臨界區(qū);發(fā)送方修改寫指針;接受方取讀指針,獲悉有新內(nèi)容;接受方取內(nèi)容,修改讀指針。
2.根據(jù)權(quán)利要求1所述的共享臨界區(qū)數(shù)據(jù)傳遞的方法,其特征在于,在所述發(fā)送方將內(nèi)容放入臨界區(qū)之前,還包括發(fā)送方根據(jù)讀指針和寫指針是否相等,判斷臨界區(qū)有無空間,若無空間,延遲后再發(fā)。
3.根據(jù)權(quán)利要求1所述的共享臨界區(qū)數(shù)據(jù)傳遞的方法,其特征在于,所述完全獨立的兩塊共享臨界區(qū),分別用于上行或下行的數(shù)據(jù),其大小與上、下行數(shù)據(jù)流量成正比,若上下行數(shù)據(jù)流量基本相等,則將臨界區(qū)等分。
4.根據(jù)權(quán)利要求1、2或3所述的共享臨界區(qū)數(shù)據(jù)傳遞的方法,其特征在于,如果系統(tǒng)如果采取中斷方式處理時,發(fā)送方修改寫指針后,或者接受方取內(nèi)容,修改讀指針后,都通知對方。
5.根據(jù)權(quán)利要求1所述的共享臨界區(qū)數(shù)據(jù)傳遞的方法,其特征在于,為保證獲取的讀、寫指針正確,獲取指針后等待一個很短的延時,然后再獲取一次,如此下去,直至連續(xù)兩次獲取的指針相同為止。
6.根據(jù)權(quán)利要求1所述的共享臨界區(qū)數(shù)據(jù)傳遞的方法,其特征在于,所述通訊雙方一起對這兩塊臨界區(qū)的控制結(jié)構(gòu)進行初始化,包括設(shè)置讀指針BeginPtr和寫指針EndPtr為共享臨界區(qū)的首地址,雙方同步后再進行通訊狀態(tài)。
7.根據(jù)權(quán)利要求6所述的共享臨界區(qū)數(shù)據(jù)傳遞的方法,其特征在于,當(dāng)讀指針等于寫指針時,表示環(huán)形臨界區(qū)為空;當(dāng)寫指針等于讀指針減一時,表示環(huán)形臨界區(qū)為滿。
8.根據(jù)權(quán)利要求1所述的共享臨界區(qū)數(shù)據(jù)傳遞的方法,其特征在于,讀取內(nèi)容后再移動讀指針,寫完內(nèi)容后再移動寫指針。
全文摘要
本發(fā)明提出一種共享臨界區(qū)數(shù)據(jù)傳遞的方法,特別適合嵌入式領(lǐng)域中兩個處理器或兩個設(shè)備之間通過共享內(nèi)存雙向通訊的情況。包括將共享臨界區(qū)分成完全獨立的兩塊,每塊臨界區(qū)各擁有自己的控制結(jié)構(gòu),包括寫指針和讀指針;由通訊雙方一起對兩塊臨界區(qū)的控制結(jié)構(gòu)初始化;然后按上下行方向選擇相應(yīng)的臨界區(qū),重復(fù)以下過程進行通訊發(fā)送方將內(nèi)容放入臨界區(qū);發(fā)送方修改寫指針;接受方取讀指針,獲悉有新內(nèi)容;接受方取內(nèi)容,修改讀指針。采用本發(fā)明所述方法,與現(xiàn)有技術(shù)相比,提高了通過共享臨界區(qū)傳遞數(shù)據(jù)的效率,降低了編程的復(fù)雜度。
文檔編號G06F15/163GK1472663SQ0213635
公開日2004年2月4日 申請日期2002年7月30日 優(yōu)先權(quán)日2002年7月30日
發(fā)明者姚衛(wèi)東, 趙文賢, 吳應(yīng)祥 申請人:深圳市中興通訊股份有限公司上海第二研究所, 深圳市中興通訊股份有限公司上海第二