專利名稱:數(shù)據(jù)通信的方法及設(shè)備的制作方法
技術(shù)領(lǐng)域:
本發(fā)明涉及數(shù)據(jù)通信技術(shù),尤其涉及數(shù)據(jù)通信的方法及其設(shè)備。
背景技術(shù):
在數(shù)據(jù)通信領(lǐng)域,數(shù)據(jù)的發(fā)送和接收一直是業(yè)界關(guān)注的領(lǐng)域,它是數(shù)據(jù)通信的基礎(chǔ)。在以往的數(shù)據(jù)通信領(lǐng)域,大家關(guān)注的通常是遠(yuǎn)距離,或者設(shè)備之間的數(shù)據(jù)通信問題,數(shù)據(jù)的傳遞通常是通過設(shè)備間的物理鏈路、中繼設(shè)備等進(jìn)行傳輸。對于近距離的數(shù)據(jù)傳輸,特別是設(shè)備內(nèi)部的數(shù)據(jù)傳輸,大家或者秘而不宣,或者沒有普遍應(yīng)用。
申請?zhí)枮椤?8800800”的中國專利公開了名稱為“數(shù)據(jù)傳送方法和數(shù)據(jù)傳送設(shè)備”,其技術(shù)方案為通過級別對等的兩個處理器的直接存儲器訪問(DMA)通信機(jī)制來實現(xiàn)數(shù)據(jù)的傳遞,這兩個處理器相互獨立,沒有直接的關(guān)聯(lián)關(guān)系。這兩個處理器使用各自獨立的數(shù)據(jù)總線進(jìn)行數(shù)據(jù)傳輸,并且處理器之間的數(shù)據(jù)交互是通過一個總線中繼器來實現(xiàn)的。
上述技術(shù)方案適用于兩個對等的中央處理器(CPU)之間進(jìn)行通信,然而對于具有主從關(guān)系的CPU之間的通信,這種方式因為需要通過中斷器進(jìn)行轉(zhuǎn)換處理,所以會導(dǎo)致數(shù)據(jù)傳遞的及時性差、數(shù)據(jù)傳輸?shù)乃俣群托实汀?br>
發(fā)明內(nèi)容
本發(fā)明提供一種數(shù)據(jù)通信的方法及其設(shè)備,以解決現(xiàn)有技術(shù)在具有主從關(guān)系的兩個處理器間傳送數(shù)據(jù)時存在及時性差和速度低的問題。
實現(xiàn)發(fā)明的技術(shù)方案一種數(shù)據(jù)通信的方法,該方法為在通過總線連接的主處理器和從處理器之間映射共享內(nèi)存;
主處理器和從處理器分別在所述共享內(nèi)存中設(shè)置接收數(shù)據(jù)的地址;發(fā)送數(shù)據(jù)時,源端從所述共享內(nèi)存中獲取目的端接收數(shù)據(jù)的地址,并將數(shù)據(jù)寫入該地址對應(yīng)的存儲介質(zhì)內(nèi),目的端則從該地址中獲取數(shù)據(jù)。
其中主處理器和從處理器通過私有地址訪問所述共享內(nèi)存。
源端在發(fā)送數(shù)據(jù)前判斷目的端是否準(zhǔn)備好接收數(shù)據(jù),當(dāng)目的端未準(zhǔn)備好接收數(shù)據(jù)時將數(shù)據(jù)緩存,并在目的端準(zhǔn)備好接收數(shù)據(jù)時再發(fā)送。
所述共享內(nèi)存中設(shè)置有表示主、從處理器接收數(shù)據(jù)狀態(tài)的狀態(tài)標(biāo)識,源端在發(fā)送數(shù)據(jù)前從共享內(nèi)存獲取目的端的狀態(tài)標(biāo)識來判斷目的端是否準(zhǔn)備好接收數(shù)據(jù)。
源端通過特殊中斷方式來判斷目的端是否準(zhǔn)備好接收數(shù)據(jù)。
所述數(shù)據(jù)發(fā)送采用直接存儲器訪問(DMA)方式。
當(dāng)采用DMA方式中的串鏈方式傳輸數(shù)據(jù)時,所述共享內(nèi)存中還設(shè)置有數(shù)據(jù)段信息,用于表明源端DMA控制器發(fā)送的數(shù)據(jù)由多少個獨立的數(shù)據(jù)段構(gòu)成。
一種數(shù)據(jù)傳輸設(shè)備,包括總線,通過總線連接的處理器、內(nèi)存介質(zhì)和直接存儲器訪問(DMA)控制器,其中,所述處理器包括具有主從關(guān)系并且通過所述總線相連的主處理器和從處理器,該主、從處理器分別連接有DMA控制器,并且所述內(nèi)存介質(zhì)包含允許主處理器和從處理器訪問的共享存儲區(qū);在傳輸數(shù)據(jù)時,源端的DMA控制器從所述共享存儲區(qū)內(nèi)獲取目的端的地址。
本方案提供了一種主從CPU之間大量、快速傳遞數(shù)據(jù)的有效方法,該方法可以提高CPU之間數(shù)據(jù)收發(fā)效率,有效降低CPU的使用率(即節(jié)約資源),同時在一定程度上保證了數(shù)據(jù)發(fā)送的及時性。
圖1為本發(fā)明的數(shù)據(jù)傳輸設(shè)備的結(jié)構(gòu)示意圖;圖2為DAM串鏈方式示意圖;圖3為接收數(shù)據(jù)前的初始化流程圖;圖4為發(fā)送數(shù)據(jù)的流程圖;
圖5為接收數(shù)據(jù)的流程圖;圖6為定時觸發(fā)的發(fā)送數(shù)據(jù)流程圖。
具體實施例方式
參閱圖1所示,傳輸設(shè)備包括總線,通過總線連接的主處理器(主CPU)、從CPU、內(nèi)存介質(zhì)和直接存儲器訪問(DMA)控制器。主、從處理器之間通過公共總線相連,并且可以通過直接或者間接的方式向?qū)Ψ桨l(fā)送中斷;通過公共總線,CPU可以訪問外掛于CPU的外部存儲介質(zhì),進(jìn)行數(shù)據(jù)的讀寫操作。
對于主CPU而言,它將一部分外掛于公共總線上的內(nèi)存介質(zhì)的地址空間映射給從CPU的內(nèi)存空間,允許從CPU對其進(jìn)行讀寫;主CPU對該映射內(nèi)存空間仍然可以讀寫。對于非映射給從CPU的存儲介質(zhì)地址空間,從CPU不能訪問。
從CPU具有獨立的內(nèi)存地址空間,對于映射到從CPU的存儲器介質(zhì),從CPU通過其私有地址進(jìn)行訪問,即對于同一個內(nèi)存介質(zhì)的某個區(qū)域(字節(jié)),存在兩個地址一個是主CPU的地址,另一個是從CPU的地址。圖1中,內(nèi)存介質(zhì)J1中的存儲空間J2(陰影部分)是由主CPU映射給從CPU的存儲介質(zhì),主CPU可以訪問內(nèi)存介質(zhì)J2的全部存儲介質(zhì)空間,從CPU只能訪問存儲空間J2,對于內(nèi)存介質(zhì)J1之內(nèi)并且在存儲空間J2以外的內(nèi)存空間,從CPU不可訪問。
數(shù)據(jù)傳送使用CPU提供的DMA方式,而DMA傳送存在“串鏈”和“非串鏈”兩種方式。所謂“串鏈”方式就是在一次DMA發(fā)送中存在多個不同地址和長度的數(shù)據(jù)?!胺谴湣狈绞矫看蜠MA中只發(fā)送一個地址和長度的數(shù)據(jù)。“非串鏈”方式可以看作DMA“串鏈”方式的一個特例。
本發(fā)明通過在共享內(nèi)存中設(shè)置主處理器和從處理器接收數(shù)據(jù)的地址,在發(fā)送數(shù)據(jù)時,源端從共享內(nèi)存中獲取目的端接收數(shù)據(jù)的地址,然后將數(shù)據(jù)寫入該地址對應(yīng)的存儲介質(zhì)內(nèi),目的端則從該地址中獲取數(shù)據(jù)。
在發(fā)送數(shù)據(jù)時,為了使源端能夠獲知目的端是否準(zhǔn)備好接收數(shù)據(jù),在共享內(nèi)存介質(zhì)中設(shè)置兩個DMA傳送控制字K1和K2控制字K1用于標(biāo)識主CPU接收數(shù)據(jù)的狀態(tài),控制字K2用于標(biāo)識從CPU接收數(shù)據(jù)的狀態(tài)。在控制字K1和K2中包含以下信息狀態(tài)字段該字段用于表示當(dāng)前CPU是否做好了接收數(shù)據(jù)的準(zhǔn)備,至少表示“就緒”和“忙”兩種狀態(tài)。
數(shù)據(jù)的個數(shù)用于表明DMA發(fā)送過來的數(shù)據(jù)由幾個獨立的數(shù)據(jù)段構(gòu)成。當(dāng)然,對于“非串鏈”方式而言,這個字段可以省略。
在共享內(nèi)存介質(zhì)中還設(shè)置兩個地址表L1和L2。地址表L1用于存儲主CPU可以接收數(shù)據(jù)的起始地址,地址表L2用于存儲從CPU可以接收數(shù)據(jù)的起始地址。因為DMA傳輸是在公共總線上的整個系統(tǒng)范圍的數(shù)據(jù)傳輸過程,因此這兩個地址表中的地址都需要存儲絕對地址,即主CPU使用的存儲介質(zhì)的地址。
對于DMA方式的數(shù)據(jù)傳輸,需要知道源地址、目的地址和數(shù)據(jù)長度三個基本要素,請參閱圖2所示。根據(jù)這三個基本要素,同時知道有多少個這樣的數(shù)據(jù)段需要傳送,CPU就可以使用DMA機(jī)制來完成數(shù)據(jù)的傳送過程。
具備了狀態(tài)控制字和地址表之外,將DMA“串鏈”的數(shù)據(jù)段個數(shù)加以限定,定義為每次DMA最多可以傳送數(shù)據(jù)段的預(yù)定值為N,這個N值可以根據(jù)實際情況來設(shè)定。之所以做這樣的限定,首先從內(nèi)存管理的角度看,不可能無限制地為DMA準(zhǔn)備可以接收數(shù)據(jù)的地址;其次,從數(shù)據(jù)傳遞的及時性方面考慮,同樣需要一個數(shù)據(jù)段個數(shù)的限制。
數(shù)據(jù)段個數(shù)的限制同時也解決了DMA觸發(fā)時機(jī)的問題,即具備了狀態(tài)控制字和地址列表,在可以進(jìn)行DMA傳送的條件下,DMA觸發(fā)時機(jī)為A、在需要傳送的數(shù)據(jù)段的個數(shù)為N或者大于N的情況下,觸發(fā)DMA傳送;B、在有數(shù)據(jù)段需要DMA傳送,且不滿足方法一的情況下,如果距離前一次DMA發(fā)送的時間滿足一定的時間間隔(比如10毫秒),則觸發(fā)DMA操作。
對于控制字的判斷處理在數(shù)據(jù)發(fā)送之前,首先判斷對端CPU是否將控制字設(shè)置為“就緒”狀態(tài),對于“就緒”態(tài),首先將控制字的“就緒”態(tài)更改為“忙”態(tài),然后進(jìn)行觸發(fā)時機(jī)的判斷處理;控制字如果是“忙”態(tài),則將需要發(fā)送的數(shù)據(jù)進(jìn)行緩存,等待對端CPU將控制字設(shè)置為“就緒”態(tài)。
在觸發(fā)DMA操作之后,源端CPU通過中斷的形式通知目的端CPU有數(shù)據(jù)需要接收,這時目的端CPU的中斷服務(wù)程序?qū)?zhí)行數(shù)據(jù)接收處理,并為下一次DMA數(shù)據(jù)接收做好準(zhǔn)備。
參閱圖3所示,主、從處理器的初始化流程如下步驟300初始化系統(tǒng)變量。
步驟310申請空閑內(nèi)存空間,用于DMA數(shù)據(jù)接收。
步驟320初始化DMA控制字狀態(tài)為“就緒”。
參閱圖4所示,發(fā)送數(shù)據(jù)的流程如下步驟400應(yīng)用程序進(jìn)行數(shù)據(jù)處理。
步驟410判斷發(fā)送的數(shù)據(jù)段數(shù)量據(jù)是否大于預(yù)定值,如果是則進(jìn)行步驟420,否則進(jìn)行步驟430。
步驟420判斷接收端控制字狀態(tài)是否為“就緒”,如果是則進(jìn)行440,否則進(jìn)行步驟430。
步驟430將數(shù)據(jù)緩存,等待發(fā)送并結(jié)束流程。
步驟440將需要發(fā)送的數(shù)據(jù)“串鏈”處理。
步驟450觸發(fā)DMA傳送數(shù)據(jù)。
步驟460將控制字狀態(tài)設(shè)置為“忙”。
步驟470向接收端發(fā)送中斷,通知目的端接收數(shù)據(jù)并結(jié)束流程。
參閱圖5所示,接收數(shù)據(jù)的流程如下步驟500清除中斷。
步驟510根據(jù)DMA控制字中的數(shù)據(jù)段個數(shù)地址表中順序讀取數(shù)據(jù)。
步驟520中請相應(yīng)個數(shù)的空閑空間進(jìn)行補(bǔ)充,以準(zhǔn)備接收下次的數(shù)據(jù)。
步驟530將控制字的狀態(tài)設(shè)備為“就緒”并結(jié)束該流程。
參閱圖6所示,定時觸發(fā)DMA數(shù)據(jù)發(fā)送的流程如下步驟600判斷是否有數(shù)據(jù)需要DMA發(fā)送,如果是則進(jìn)行步驟610,否則結(jié)束該流程。
步驟610判斷目的端的控制字狀態(tài)是否為“就緒”,如果是則進(jìn)行步驟620,否則結(jié)束該流程。
步驟620進(jìn)行DMA數(shù)據(jù)發(fā)送處理。
步驟630判斷DMA發(fā)送是否完成,如果是則進(jìn)行步驟620,否則進(jìn)行步驟640。
步驟640向接收端發(fā)送中斷,通知目的端數(shù)據(jù)到達(dá)并結(jié)束流程。
在本發(fā)明中,從處理器不限于一個,可以為多個,主處理器與每一從主處理器之間均建立有共享內(nèi)存,其工作原理相同。
本發(fā)明利用共享內(nèi)存來傳遞主、從處理器的狀態(tài)信號和接收數(shù)據(jù)地址,能夠保證數(shù)據(jù)發(fā)送的及時性,可以提高CPU之間數(shù)據(jù)收發(fā)效率,是主從CPU之間大量、快速傳遞數(shù)據(jù)的有效方法。
權(quán)利要求
1.一種數(shù)據(jù)通信的方法,其特征在于包括步驟在通過總線連接的主處理器和從處理器之間映射共享內(nèi)存;主處理器和從處理器分別在所述共享內(nèi)存中設(shè)置接收數(shù)據(jù)的地址;發(fā)送數(shù)據(jù)時,源端從所述共享內(nèi)存中獲取目的端接收數(shù)據(jù)的地址,并將數(shù)據(jù)寫入該地址對應(yīng)的存儲介質(zhì)內(nèi),目的端則從該地址中獲取數(shù)據(jù)。
2.如權(quán)利要求1所述的方法,其特征在于,主處理器和從處理器通過私有地址訪問所述共享內(nèi)存。
3.如權(quán)利要求1所述的方法,其特征在于,源端在發(fā)送數(shù)據(jù)前判斷目的端是否準(zhǔn)備好接收數(shù)據(jù),如果目的端未準(zhǔn)備好接收數(shù)據(jù)時將數(shù)據(jù)緩存,并在目的端準(zhǔn)備好接收數(shù)據(jù)時再發(fā)送。
4.如權(quán)利要求3所述的方法,其特征在于,所述共享內(nèi)存中設(shè)置有表示主、從處理器接收數(shù)據(jù)狀態(tài)的狀態(tài)標(biāo)識,源端在發(fā)送數(shù)據(jù)前從共享內(nèi)存獲取目的端的狀態(tài)標(biāo)識來判斷目的端是否準(zhǔn)備好接收數(shù)據(jù)。
5.如權(quán)利要求3或4所述的方法,其特征在于,源端通過特殊中斷方式來判斷目的端是否準(zhǔn)備好接收數(shù)據(jù)。
6.如權(quán)利要求1至4之一項所述的方法,其特征在于,所述數(shù)據(jù)發(fā)送采用直接存儲器訪問(DMA)方式。
7.如權(quán)利要求6所述的方法,其特征在于,當(dāng)采用DMA方式中的串鏈方式傳輸數(shù)據(jù)時,所述共享內(nèi)存中還設(shè)置有數(shù)據(jù)段信息,用于表明源端DMA控制器發(fā)送的數(shù)據(jù)由多少個獨立的數(shù)據(jù)段構(gòu)成。
8.如權(quán)利要求7所述的方法,其特征在于,當(dāng)需要傳送的數(shù)據(jù)段的數(shù)量不少于預(yù)定值時,觸發(fā)DMA傳送;當(dāng)需要傳送的數(shù)據(jù)段的數(shù)量不大于預(yù)定值且距離前一次DMA發(fā)送的時間間隔達(dá)到設(shè)定值時,觸發(fā)DMA傳送。
9.一種數(shù)據(jù)傳輸設(shè)備,包括總線,通過總線連接的處理器、內(nèi)存介質(zhì)和直接存儲器訪問(DMA)控制器,其特征在于,所述處理器包括具有主從關(guān)系并且通過所述總線相連的主處理器和從處理器,該主、從處理器分別連接有所述DMA控制器,并且所述內(nèi)存介質(zhì)包含允許主處理器和從處理器訪問的共享存儲區(qū);在傳輸數(shù)據(jù)時,源端的DMA控制器從所述共享存儲區(qū)內(nèi)獲取目的端的地址。
10.如權(quán)利要求9所述的數(shù)據(jù)傳輸設(shè)備,其特征在于,所述主、從處理器以私有地址訪問所述共享存儲區(qū)。
11.如權(quán)利要求9或10所述的數(shù)據(jù)傳輸設(shè)備,其特征在于,所述從處理器為多個。
全文摘要
本發(fā)明公開了一種數(shù)據(jù)通信的方法及設(shè)備,用于在具有主從關(guān)系的處理器之間進(jìn)行通信。其中方法為在通過總線連接的主處理器和從處理器之間映射共享內(nèi)存;主處理器和從處理器分別在所述共享內(nèi)存中設(shè)置接收數(shù)據(jù)的地址;發(fā)送數(shù)據(jù)時,源端從所述共享內(nèi)存中獲取目的端接收數(shù)據(jù)的地址,并將數(shù)據(jù)寫入該地址對應(yīng)的存儲介質(zhì)內(nèi),目的端則從該地址中獲取數(shù)據(jù)。
文檔編號G06F12/00GK1658176SQ200410005658
公開日2005年8月24日 申請日期2004年2月21日 優(yōu)先權(quán)日2004年2月21日
發(fā)明者丁陽華, 李一兵, 李志同, 高永華 申請人:華為技術(shù)有限公司