一種基于隊(duì)列的數(shù)據(jù)傳輸方法、裝置及通信系統(tǒng)的制作方法
【專利摘要】本發(fā)明公開了一種基于隊(duì)列的數(shù)據(jù)傳輸方法、裝置及通信系統(tǒng),屬于通信【技術(shù)領(lǐng)域】。所述方法包括:當(dāng)?shù)谝魂?duì)列未滿時(shí),將N個(gè)數(shù)據(jù)報(bào)文寫入共享存儲(chǔ)區(qū)中,N為正整數(shù)且N≥2,N個(gè)數(shù)據(jù)報(bào)文基于第一隊(duì)列傳輸,第一隊(duì)列為一個(gè)或多個(gè)隊(duì)列中的一個(gè);更新共享存儲(chǔ)區(qū)中的第一隊(duì)列的寫指針,寫指針更新后的值等于寫指針更新前的值加N。本發(fā)明通過將N個(gè)數(shù)據(jù)報(bào)文寫入共享存儲(chǔ)區(qū)中,并更新共享存儲(chǔ)區(qū)中的第一隊(duì)列的寫指針,N為正整數(shù)且N≥2,寫指針更新后的值等于寫指針更新前的值加N,寫指針不需要跟隨數(shù)據(jù)的發(fā)送而發(fā)送,減少了寫指針的發(fā)送,提高了帶寬利用率,并且降低了由于傳輸帶寬受限造成數(shù)據(jù)丟棄情況的發(fā)生,提高了傳輸可靠性。
【專利說明】一種基于隊(duì)列的數(shù)據(jù)傳輸方法、裝置及通信系統(tǒng)
【技術(shù)領(lǐng)域】
[0001] 本發(fā)明涉及通信【技術(shù)領(lǐng)域】,特別涉及一種基于隊(duì)列的數(shù)據(jù)傳輸方法、裝置及通信 系統(tǒng)。
【背景技術(shù)】
[0002] 基于隊(duì)列的數(shù)據(jù)傳輸是在兩個(gè)設(shè)備之間實(shí)現(xiàn)異步傳輸?shù)囊环N常用方法。
[0003] 以數(shù)據(jù)從第一設(shè)備傳輸?shù)降诙O(shè)備為例,現(xiàn)有的基于隊(duì)列的數(shù)據(jù)傳輸方法包括: 第一設(shè)備將待傳輸數(shù)據(jù)構(gòu)造為數(shù)據(jù)報(bào)文,并將數(shù)據(jù)報(bào)文寫入第一設(shè)備和第二設(shè)備的共享存 儲(chǔ)區(qū)中;第一設(shè)備構(gòu)造數(shù)據(jù)報(bào)文的H)(Packet Descriptor,報(bào)文描述符),將數(shù)據(jù)報(bào)文的 構(gòu)造為描述符報(bào)文,并將描述符報(bào)文寫入共享存儲(chǔ)區(qū)的隊(duì)列中,數(shù)據(jù)報(bào)文的ro包括數(shù)據(jù)報(bào) 文的存儲(chǔ)地址和長(zhǎng)度等報(bào)文信息;第一設(shè)備將隊(duì)列的寫指針加1,將加1后的寫指針構(gòu)造為 寫指針報(bào)文,并將寫指針報(bào)文寫入共享存儲(chǔ)區(qū)中;第二設(shè)備根據(jù)寫指針報(bào)文,獲知有數(shù)據(jù)報(bào) 文寫入共享存儲(chǔ)區(qū)中;第二設(shè)備根據(jù)隊(duì)列的讀指針,從共享存儲(chǔ)區(qū)的隊(duì)列中讀取描述符報(bào) 文;第二設(shè)備根據(jù)描述符報(bào)文,從共享存儲(chǔ)區(qū)中讀取數(shù)據(jù)報(bào)文。至此,待傳輸數(shù)據(jù)從第一設(shè) 備傳輸?shù)降诙O(shè)備。
[0004] 在實(shí)現(xiàn)本發(fā)明的過程中,發(fā)明人發(fā)現(xiàn)現(xiàn)有技術(shù)至少存在以下問題:
[0005] 第一設(shè)備向第二設(shè)備傳輸數(shù)據(jù)時(shí),第一設(shè)備需要依次在共享存儲(chǔ)區(qū)中寫入數(shù)據(jù)報(bào) 文、描述符報(bào)文和寫指針報(bào)文三個(gè)報(bào)文,其中只有數(shù)據(jù)報(bào)文包含的是待傳輸數(shù)據(jù),若需要 保證報(bào)文的有效傳輸速率(即傳輸包含待傳輸數(shù)據(jù)的報(bào)文的速率)為N pps (packet per second,報(bào)文數(shù)/秒),在需要傳輸描述符報(bào)文和寫指針報(bào)文的情況下,所需的傳輸帶寬至 少為3*N pps,也就是說,傳輸帶寬至少是有效傳輸速率的3倍,帶寬利用率較低。而且,在 傳輸帶寬受限的情況下,有可能造成數(shù)據(jù)的丟棄,傳輸可靠性較低。
【發(fā)明內(nèi)容】
[0006] 為了解決現(xiàn)有技術(shù)帶寬利用率低,而且在傳輸帶寬受限的情況下,傳輸可靠性較 低的問題,本發(fā)明實(shí)施例提供了一種基于隊(duì)列的數(shù)據(jù)傳輸方法、裝置及通信系統(tǒng)。所述技術(shù) 方案如下:
[0007] 第一方面,本發(fā)明實(shí)施例提供了一種基于隊(duì)列的數(shù)據(jù)傳輸方法,適用于第一設(shè)備 通過共享存儲(chǔ)區(qū)向第二設(shè)備傳輸數(shù)據(jù),所述共享存儲(chǔ)區(qū)中設(shè)有一個(gè)或多個(gè)隊(duì)列、以及與所 述隊(duì)列一一對(duì)應(yīng)的寫指針和讀指針的緩存區(qū),所述方法包括:
[0008] 當(dāng)?shù)谝魂?duì)列未滿時(shí),所述第一設(shè)備將N個(gè)數(shù)據(jù)報(bào)文寫入所述共享存儲(chǔ)區(qū)中,N為正 整數(shù)且N > 2,所述N個(gè)數(shù)據(jù)報(bào)文基于所述第一隊(duì)列傳輸,所述第一隊(duì)列為所述一個(gè)或多個(gè) 隊(duì)列中的一個(gè);
[0009] 更新所述共享存儲(chǔ)區(qū)中的所述第一隊(duì)列的寫指針,所述寫指針更新后的值等于所 述寫指針更新前的值加 N。
[0010] 在本發(fā)明的第一種可能的實(shí)現(xiàn)方式中,所述方法還包括:
[0011] 在所述更新所述共享存儲(chǔ)區(qū)中的所述第一隊(duì)列的寫指針之前,將所述N個(gè)數(shù)據(jù)報(bào) 文的存儲(chǔ)地址和長(zhǎng)度構(gòu)造為一個(gè)描述符報(bào)文,并將所述描述符報(bào)文寫入所述第一隊(duì)列。
[0012] 在本發(fā)明的第二種可能的實(shí)現(xiàn)方式中,所述方法還包括:
[0013] 在每將一個(gè)所述數(shù)據(jù)報(bào)文寫入所述共享存儲(chǔ)區(qū)中之后,將所述一個(gè)數(shù)據(jù)報(bào)文的存 儲(chǔ)地址和長(zhǎng)度構(gòu)造為一個(gè)描述符報(bào)文,并將所述描述符報(bào)文寫入所述第一隊(duì)列。
[0014] 在本發(fā)明的第三種可能的實(shí)現(xiàn)方式中,所述第一設(shè)備將N個(gè)數(shù)據(jù)報(bào)文寫入所述共 享存儲(chǔ)區(qū)中,包括 :
[0015] 所述第一設(shè)備將所述N個(gè)數(shù)據(jù)報(bào)文連續(xù)寫入所述第一隊(duì)列。
[0016] 在本發(fā)明的第四種可能的實(shí)現(xiàn)方式中,所述更新所述共享存儲(chǔ)區(qū)中的所述第一隊(duì) 列的與指針,包括:
[0017] 當(dāng)所述將N個(gè)數(shù)據(jù)報(bào)文寫入所述共享存儲(chǔ)區(qū)后的預(yù)定時(shí)間內(nèi)沒有待發(fā)送的數(shù)據(jù) 報(bào)文時(shí),或者,當(dāng)所述N個(gè)數(shù)據(jù)報(bào)文后的數(shù)據(jù)報(bào)文基于非第一隊(duì)列傳輸時(shí),更新所述共享存 儲(chǔ)區(qū)中的所述第一隊(duì)列的寫指針。
[0018] 在本發(fā)明的第五種可能的實(shí)現(xiàn)方式中,所述更新所述共享存儲(chǔ)區(qū)中的所述第一隊(duì) 列的與指針,包括:
[0019] 當(dāng)N達(dá)到設(shè)定值時(shí),或者,當(dāng)所述N個(gè)數(shù)據(jù)報(bào)文寫入所述共享存儲(chǔ)區(qū)的時(shí)間達(dá)到設(shè) 定時(shí)間時(shí),更新所述共享存儲(chǔ)區(qū)中的所述第一隊(duì)列的寫指針。
[0020] 第二方面,本發(fā)明實(shí)施例提供了一種基于隊(duì)列的數(shù)據(jù)傳輸方法,適用于第二設(shè)備 通過共享存儲(chǔ)區(qū)接收第一設(shè)備傳輸?shù)臄?shù)據(jù),所述共享存儲(chǔ)區(qū)中設(shè)有一個(gè)或多個(gè)隊(duì)列、以及 與所述隊(duì)列一一對(duì)應(yīng)的寫指針和讀指針的緩存區(qū),所述方法包括:
[0021] 所述第二設(shè)備從所述共享存儲(chǔ)區(qū)中獲取更新后的第一隊(duì)列的寫指針,所述第一隊(duì) 列為所述一個(gè)或多個(gè)隊(duì)列中的一個(gè),所述寫指針更新后的值等于所述寫指針更新前的值加 N,N為正整數(shù)且N彡2 ;
[0022] 根據(jù)更新后的所述寫指針和所述第一隊(duì)列的讀指針,依次從所述共享存儲(chǔ)區(qū)中讀 取N個(gè)數(shù)據(jù)報(bào)文,N個(gè)所述數(shù)據(jù)報(bào)文基于所述第一隊(duì)列傳輸;
[0023] 更新所述共享存儲(chǔ)區(qū)中的所述讀指針,所述讀指針更新后的值等于所述讀指針更 新前的值加 N。
[0024] 第三方面,本發(fā)明實(shí)施例提供了一種基于隊(duì)列的數(shù)據(jù)傳輸裝置,適用于第一設(shè)備 通過共享存儲(chǔ)區(qū)向第二設(shè)備傳輸數(shù)據(jù),所述共享存儲(chǔ)區(qū)中設(shè)有一個(gè)或多個(gè)隊(duì)列、以及與所 述隊(duì)列一一對(duì)應(yīng)的寫指針和讀指針的緩存區(qū),所述裝置包括:
[0025] 數(shù)據(jù)寫入模塊,用于當(dāng)?shù)谝魂?duì)列未滿時(shí),將N個(gè)數(shù)據(jù)報(bào)文寫入所述共享存儲(chǔ)區(qū)中, N為正整數(shù)且N > 2,所述N個(gè)數(shù)據(jù)報(bào)文基于所述第一隊(duì)列傳輸,所述第一隊(duì)列為所述一個(gè) 或多個(gè)隊(duì)列中的一個(gè);
[0026] 寫指針更新模塊,用于更新所述共享存儲(chǔ)區(qū)中的所述第一隊(duì)列的寫指針,所述寫 指針更新后的值等于所述寫指針更新前的值加 N。
[0027] 在本發(fā)明的第一種可能的實(shí)現(xiàn)方式中,所述裝置還包括:
[0028] 描述符寫入模塊,用于在所述更新所述共享存儲(chǔ)區(qū)中的所述第一隊(duì)列的寫指針之 前,將所述N個(gè)數(shù)據(jù)報(bào)文的存儲(chǔ)地址和長(zhǎng)度構(gòu)造為一個(gè)描述符報(bào)文,并將所述描述符報(bào)文 寫入所述第一隊(duì)列。
[0029] 在本發(fā)明的第二種可能的實(shí)現(xiàn)方式中,所述裝置還包括:
[0030] 描述符寫入模塊,用于在每將一個(gè)所述數(shù)據(jù)報(bào)文寫入所述共享存儲(chǔ)區(qū)中之后,將 所述一個(gè)數(shù)據(jù)報(bào)文的存儲(chǔ)地址和長(zhǎng)度構(gòu)造為一個(gè)描述符報(bào)文,并將所述描述符報(bào)文寫入所 述第一隊(duì)列。
[0031] 在本發(fā)明的第三種可能的實(shí)現(xiàn)方式中,所述數(shù)據(jù)寫入模塊用于,
[0032] 將所述N個(gè)數(shù)據(jù)報(bào)文連續(xù)寫入所述第一隊(duì)列。
[0033] 在本發(fā)明的第四種可能的實(shí)現(xiàn)方式中,所述寫指針更新模塊用于,
[0034] 當(dāng)所述將N個(gè)數(shù)據(jù)報(bào)文寫入所述共享存儲(chǔ)區(qū)后的預(yù)定時(shí)間內(nèi)沒有待發(fā)送的數(shù)據(jù) 報(bào)文時(shí),或者,當(dāng)所述N個(gè)數(shù)據(jù)報(bào)文后的數(shù)據(jù)報(bào)文基于非第一隊(duì)列傳輸時(shí),更新所述共享存 儲(chǔ)區(qū)中的所述第一隊(duì)列的寫指針。
[0035] 在本發(fā)明的第五種可能的實(shí)現(xiàn)方式中,所述寫指針更新模塊用于,
[0036] 當(dāng)N達(dá)到設(shè)定值時(shí),或者,當(dāng)所述N個(gè)數(shù)據(jù)報(bào)文寫入所述共享存儲(chǔ)區(qū)的時(shí)間達(dá)到設(shè) 定時(shí)間時(shí),更新所述共享存儲(chǔ)區(qū)中的所述第一隊(duì)列的寫指針。
[0037] 第四方面,本發(fā)明實(shí)施例提供了一種基于隊(duì)列的數(shù)據(jù)傳輸裝置,適用于第二設(shè)備 通過共享存儲(chǔ)區(qū)接收第一設(shè)備傳輸?shù)臄?shù)據(jù),所述共享存儲(chǔ)區(qū)中設(shè)有一個(gè)或多個(gè)隊(duì)列、以及 與所述隊(duì)列一一對(duì)應(yīng)的寫指針和讀指針的緩存區(qū),所述裝置包括:
[0038] 寫指針獲取模塊,用于從所述共享存儲(chǔ)區(qū)中獲取更新后的第一隊(duì)列的寫指針,所 述第一隊(duì)列為所述一個(gè)或多個(gè)隊(duì)列中的一個(gè),所述寫指針更新后的值等于所述寫指針更新 前的值加 N,N為正整數(shù)且N彡2 ;
[0039] 數(shù)據(jù)讀取模塊,用于根據(jù)更新后的所述寫指針和所述第一隊(duì)列的讀指針,依次從 所述共享存儲(chǔ)區(qū)中讀取N個(gè)數(shù)據(jù)報(bào)文,N個(gè)所述數(shù)據(jù)報(bào)文基于所述第一隊(duì)列傳輸;
[0040] 讀指針更新模塊,用于更新所述共享存儲(chǔ)區(qū)中的所述讀指針,所述讀指針更新后 的值等于所述讀指針更新前的值加 N。
[0041] 第五方面,本發(fā)明實(shí)施例提供了一種通信系統(tǒng),所述系統(tǒng)包括第一設(shè)備、第二設(shè) 備、以及共享存儲(chǔ)區(qū),所述第一設(shè)備和所述第二設(shè)備分別與所述共享存儲(chǔ)區(qū)連接,所述第一 設(shè)備上設(shè)置有如第三方面提供的基于隊(duì)列的數(shù)據(jù)傳輸裝置,所述第二設(shè)備上設(shè)置有如第四 方面提供的基于隊(duì)列的數(shù)據(jù)傳輸裝置。
[0042] 本發(fā)明實(shí)施例提供的技術(shù)方案帶來的有益效果是:
[0043] 通過將N個(gè)數(shù)據(jù)報(bào)文寫入共享存儲(chǔ)區(qū)中,并更新共享存儲(chǔ)區(qū)中的第一隊(duì)列的寫指 針,N為正整數(shù)且N > 2,N個(gè)數(shù)據(jù)報(bào)文基于第一隊(duì)列傳輸,寫指針更新后的值等于寫指針更 新前的值加 N,寫指針不需要跟隨數(shù)據(jù)的發(fā)送而發(fā)送,減少了寫指針的發(fā)送,提高了帶寬利 用率,并且降低了由于傳輸帶寬受限造成數(shù)據(jù)丟棄情況的發(fā)生,提高了傳輸可靠性。
【專利附圖】
【附圖說明】
[0044] 為了更清楚地說明本發(fā)明實(shí)施例中的技術(shù)方案,下面將對(duì)實(shí)施例描述中所需要使 用的附圖作簡(jiǎn)單地介紹,顯而易見地,下面描述中的附圖僅僅是本發(fā)明的一些實(shí)施例,對(duì)于 本領(lǐng)域普通技術(shù)人員來講,在不付出創(chuàng)造性勞動(dòng)的前提下,還可以根據(jù)這些附圖獲得其他 的附圖。
[0045] 圖1是本發(fā)明實(shí)施例提供的基于隊(duì)列的數(shù)據(jù)傳輸方法的應(yīng)用場(chǎng)景圖;
[0046] 圖2是本發(fā)明實(shí)施例一提供的一種基于隊(duì)列的數(shù)據(jù)傳輸方法的流程圖;
[0047] 圖3是本發(fā)明實(shí)施例二提供的一種基于隊(duì)列的數(shù)據(jù)傳輸方法的流程圖;
[0048] 圖4是本發(fā)明實(shí)施例三提供的一種基于隊(duì)列的數(shù)據(jù)傳輸方法的流程圖;
[0049] 圖5是本發(fā)明實(shí)施例三提供的第一設(shè)備發(fā)送報(bào)文的示意圖;
[0050] 圖6是本發(fā)明實(shí)施例四提供的一種基于隊(duì)列的數(shù)據(jù)傳輸方法的流程圖;
[0051] 圖7是本發(fā)明實(shí)施例四提供的第一設(shè)備發(fā)送報(bào)文的示意圖;
[0052] 圖8是本發(fā)明實(shí)施例五提供的一種基于隊(duì)列的數(shù)據(jù)傳輸方法的流程圖;
[0053] 圖9是本發(fā)明實(shí)施例五提供的第一設(shè)備發(fā)送報(bào)文的示意圖;
[0054] 圖10是本發(fā)明實(shí)施例六提供的一種基于隊(duì)列的數(shù)據(jù)傳輸裝置的結(jié)構(gòu)示意圖;
[0055] 圖11a是本發(fā)明實(shí)施例七提供的一種基于隊(duì)列的數(shù)據(jù)傳輸裝置的結(jié)構(gòu)示意圖;
[0056] 圖lib是本發(fā)明實(shí)施例七提供的另一種基于隊(duì)列的數(shù)據(jù)傳輸裝置的結(jié)構(gòu)示意圖;
[0057] 圖12是本發(fā)明實(shí)施例八提供的一種基于隊(duì)列的數(shù)據(jù)傳輸裝置的硬件結(jié)構(gòu)圖;
[0058] 圖13是本發(fā)明實(shí)施例九提供的一種基于隊(duì)列的數(shù)據(jù)傳輸裝置的結(jié)構(gòu)示意圖;
[0059] 圖14a是本發(fā)明實(shí)施例十提供的一種基于隊(duì)列的數(shù)據(jù)傳輸裝置的結(jié)構(gòu)示意圖;
[0060] 圖14b是本發(fā)明實(shí)施例十提供的另一種基于隊(duì)列的數(shù)據(jù)傳輸裝置的結(jié)構(gòu)示意圖;
[0061] 圖15是本發(fā)明實(shí)施例十一提供的一種基于隊(duì)列的數(shù)據(jù)傳輸裝置的硬件結(jié)構(gòu)圖;
[0062] 圖16是本發(fā)明實(shí)施例十二提供的一種通信系統(tǒng)的結(jié)構(gòu)示意圖。
【具體實(shí)施方式】
[0063] 為使本發(fā)明的目的、技術(shù)方案和優(yōu)點(diǎn)更加清楚,下面將結(jié)合附圖對(duì)本發(fā)明實(shí)施方 式作進(jìn)一步地詳細(xì)描述。
[0064] 下面先結(jié)合圖1簡(jiǎn)單介紹一下本發(fā)明提供的基于隊(duì)列的數(shù)據(jù)傳輸方法的應(yīng)用場(chǎng) 景,該方法適用于具有共享存儲(chǔ)區(qū)的兩個(gè)設(shè)備。共享存儲(chǔ)區(qū)可以獨(dú)立于兩個(gè)設(shè)備,也可以 外掛在兩個(gè)設(shè)備中的任意一個(gè)上,還可以是兩個(gè)設(shè)備中的任意一個(gè)的一部分。兩個(gè)設(shè)備 可以均為 CPU(Central Processing Unit,中央處理器)、FPGA(Field Programmable Gate Array,現(xiàn)場(chǎng)可編程門陣列)、NP (Network Processor,網(wǎng)絡(luò)處理器)、DSP (Digital Signal Processor,數(shù)字信號(hào)處理器)、CPLD (Complex Programmable Logic Device,復(fù)雜可編程邏 輯器件)或者 ASIC (Application Specific Integrated Circuit,專用集成電路),也可以 為CPU、FPGA、NP、DSP、CPLD、ASIC中的任意兩種的組合。共享存儲(chǔ)區(qū)可以為RAM (Random Access Memory,隨機(jī)存取存儲(chǔ)器)、DDR (Double Data Rate,雙倍速率同步動(dòng)態(tài)隨機(jī)存儲(chǔ) 器)、SSRAM(Synchronous Static Random Access Memory,同步靜態(tài)隨機(jī)存取存儲(chǔ)器)、 RLDRAM(Reduce Latency Dynamic Random Access Memory 縮短讀潛伏時(shí)間的動(dòng)態(tài)隨機(jī)存取 器)、QDR (Quad Data Rate Static Random Access Memory,四倍數(shù)據(jù)速率靜態(tài)隨機(jī)存取存儲(chǔ) 器)、SSD (Solid State Disk,固態(tài)硬盤)或者 flash (閃存)。
[0065] 如圖1所示,共享存儲(chǔ)區(qū)3獨(dú)立于兩個(gè)設(shè)備(第一設(shè)備1和第二設(shè)備2)設(shè)置,用 于實(shí)現(xiàn)兩個(gè)設(shè)備之間的異步傳輸。兩個(gè)設(shè)備分別與共享存儲(chǔ)區(qū)3連接,當(dāng)?shù)谝辉O(shè)備1向第 二設(shè)備2傳輸數(shù)據(jù)時(shí),第一設(shè)備1先將數(shù)據(jù)寫入到共享存儲(chǔ)區(qū)3中,等到第二設(shè)備2處于空 閑狀態(tài)時(shí),第二設(shè)備2再?gòu)墓蚕泶鎯?chǔ)區(qū)3中讀取數(shù)據(jù),從而完成數(shù)據(jù)從第一設(shè)備1到第二設(shè) 備2的傳輸。與第一設(shè)備1直接將數(shù)據(jù)傳輸給第二設(shè)備2的同步傳輸方式相比,異步傳輸 方式不要求第二設(shè)備2在第一設(shè)備1發(fā)送數(shù)據(jù)的同時(shí)對(duì)數(shù)據(jù)進(jìn)行接收,這樣可以避免由于 第二設(shè)備2當(dāng)時(shí)處于忙碌狀態(tài)而造成數(shù)據(jù)丟失、傳輸失敗,因此數(shù)據(jù)的傳輸可靠性較高。 [0066] 共享存儲(chǔ)區(qū)3中設(shè)置有一個(gè)或多個(gè)隊(duì)列。第一設(shè)備1可以采用共享存儲(chǔ)區(qū)3中的 一個(gè)或多個(gè)隊(duì)列向第二設(shè)備2傳輸數(shù)據(jù),當(dāng)?shù)谝辉O(shè)備1采用多個(gè)隊(duì)列向第二設(shè)備2傳輸數(shù) 據(jù)時(shí),多個(gè)隊(duì)列可以是按照傳輸數(shù)據(jù)的優(yōu)先級(jí)劃分的,不同優(yōu)先級(jí)的數(shù)據(jù)基于不同的隊(duì)列 傳輸。第一設(shè)備1通過共享存儲(chǔ)區(qū)3傳輸數(shù)據(jù)到第二設(shè)備2時(shí),可以直接將數(shù)據(jù)寫入隊(duì)列 中,也可以將數(shù)據(jù)寫入共享存儲(chǔ)區(qū)的任意位置,并將表示數(shù)據(jù)存儲(chǔ)位置和長(zhǎng)度的信息寫入 隊(duì)列中。
[0067] 需要說明的是,圖1僅為本發(fā)明提供的基于隊(duì)列的數(shù)據(jù)傳輸方法的應(yīng)用場(chǎng)景的示 意圖,本發(fā)明并不限制于此。
[0068] 實(shí)施例一
[0069] 本發(fā)明實(shí)施例提供了一種基于隊(duì)列的數(shù)據(jù)傳輸方法,適用于第一設(shè)備通過共享存 儲(chǔ)區(qū)向第二設(shè)備傳輸數(shù)據(jù),共享存儲(chǔ)區(qū)可以獨(dú)立于第一設(shè)備和第二設(shè)備,也可以屬于第一 設(shè)備或第二設(shè)備,共享存儲(chǔ)區(qū)中設(shè)有一個(gè)或多個(gè)隊(duì)列、以及與隊(duì)列一一對(duì)應(yīng)的寫指針和讀 指針的緩存區(qū),該方法的執(zhí)行主體為第一設(shè)備,參見圖2,該方法包括:
[0070] 步驟101 :當(dāng)?shù)谝魂?duì)列未滿時(shí),將N個(gè)數(shù)據(jù)報(bào)文寫入共享存儲(chǔ)區(qū)中,N為正整數(shù)且 N彡2。
[0071] 在本實(shí)施例中,N個(gè)數(shù)據(jù)報(bào)文基于第一隊(duì)列傳輸,第一隊(duì)列為一個(gè)或多個(gè)隊(duì)列中的 一個(gè)。
[0072] 步驟102 :更新共享存儲(chǔ)區(qū)中的第一隊(duì)列的寫指針,寫指針更新后的值等于寫指 針更新前的值加 N。
[0073] 在本實(shí)施例的一種實(shí)現(xiàn)方式中,在步驟101之后,步驟102之前,該方法還包括步 驟:在更新共享存儲(chǔ)區(qū)中的第一隊(duì)列的寫指針之前,將N個(gè)數(shù)據(jù)報(bào)文的存儲(chǔ)地址和長(zhǎng)度構(gòu) 造為一個(gè)描述符報(bào)文,并將描述符報(bào)文寫入第一隊(duì)列(詳見實(shí)施例三)。
[0074] 在本實(shí)施例的另一種實(shí)現(xiàn)方式中,在步驟101之后,步驟102之前,該方法還包括 步驟:在每將一個(gè)數(shù)據(jù)報(bào)文寫入共享存儲(chǔ)區(qū)中之后,將一個(gè)數(shù)據(jù)報(bào)文的存儲(chǔ)地址和長(zhǎng)度構(gòu) 造為一個(gè)描述符報(bào)文,并將描述符報(bào)文寫入第一隊(duì)列(詳見實(shí)施例四)。
[0075] 在本實(shí)施例的又一種實(shí)現(xiàn)方式中,該步驟101包括:將N個(gè)數(shù)據(jù)報(bào)文連續(xù)寫入第一 隊(duì)列(詳見實(shí)施例五)。
[0076] 本發(fā)明實(shí)施例通過將N個(gè)數(shù)據(jù)報(bào)文寫入共享存儲(chǔ)區(qū)中,并更新共享存儲(chǔ)區(qū)中的第 一隊(duì)列的寫指針,N為正整數(shù)且N > 2,N個(gè)數(shù)據(jù)報(bào)文基于第一隊(duì)列傳輸,寫指針更新后的值 等于寫指針更新前的值加 N,寫指針不需要跟隨數(shù)據(jù)的發(fā)送而發(fā)送,減少了寫指針的發(fā)送, 提高了帶寬利用率,并且降低了由于傳輸帶寬受限造成數(shù)據(jù)丟棄情況的發(fā)生,提高了傳輸 可靠性。
[0077] 實(shí)施例二
[0078] 本發(fā)明實(shí)施例提供了一種基于隊(duì)列的數(shù)據(jù)傳輸方法,適用于第二設(shè)備通過共享存 儲(chǔ)區(qū)接收第一設(shè)備傳輸?shù)臄?shù)據(jù),共享存儲(chǔ)區(qū)可以獨(dú)立于第一設(shè)備和第二設(shè)備設(shè)置,也可以 屬于第一設(shè)備或第二設(shè)備,共享存儲(chǔ)區(qū)中設(shè)有一個(gè)或多個(gè)隊(duì)列、以及與隊(duì)列一一對(duì)應(yīng)的寫 指針和讀指針的緩存區(qū),該方法的執(zhí)行主體為第二設(shè)備,參見圖3,該方法包括:
[0079] 步驟201 :從共享存儲(chǔ)區(qū)中獲取更新后的第一隊(duì)列的寫指針。
[0080] 在本實(shí)施例中,第一隊(duì)列為一個(gè)或多個(gè)隊(duì)列中的一個(gè),寫指針更新后的值等于寫 指針更新前的值加 N,N為正整數(shù)且N彡2。
[0081] 步驟202 :根據(jù)更新后的寫指針和第一隊(duì)列的讀指針,依次從共享存儲(chǔ)區(qū)中讀取N 個(gè)數(shù)據(jù)報(bào)文。
[0082] 在本實(shí)施例中,N個(gè)數(shù)據(jù)報(bào)文基于第一隊(duì)列傳輸。
[0083] 步驟203 :更新共享存儲(chǔ)區(qū)中的讀指針,讀指針更新后的值等于讀指針更新前的 值加 N。
[0084] 本發(fā)明實(shí)施例通過從共享存儲(chǔ)區(qū)中獲取更新后的第一隊(duì)列的寫指針,并根據(jù)更新 后的寫指針和第一隊(duì)列的讀指針,依次從共享存儲(chǔ)區(qū)中讀取N個(gè)數(shù)據(jù)報(bào)文,N個(gè)數(shù)據(jù)報(bào)文基 于第一隊(duì)列傳輸,第一隊(duì)列為一個(gè)或多個(gè)隊(duì)列中的一個(gè),寫指針更新后的值等于寫指針更 新前的值加 N,N為正整數(shù)且N3 2,因此寫指針不是跟隨數(shù)據(jù)的發(fā)送而發(fā)送的,減少了寫指 針的發(fā)送,提高了帶寬利用率,并且降低了由于傳輸帶寬受限造成數(shù)據(jù)丟棄情況的發(fā)生,提 高了傳輸可靠性。另外,通過更新共享存儲(chǔ)區(qū)中的讀指針,讀指針更新后的值等于讀指針更 新前的值加 N,也減少了讀指針的發(fā)送,進(jìn)一步提高了帶寬利用率和傳輸可靠性。
[0085] 實(shí)施例三
[0086] 本發(fā)明實(shí)施例提供了一種基于隊(duì)列的數(shù)據(jù)傳輸方法,在本實(shí)施例中,在更新共享 存儲(chǔ)區(qū)中的第一隊(duì)列的寫指針之前,將N個(gè)數(shù)據(jù)報(bào)文的存儲(chǔ)地址和長(zhǎng)度構(gòu)造為一個(gè)描述符 報(bào)文,并將描述符報(bào)文寫入第一隊(duì)列。參見圖4,該方法包括:
[0087] 步驟300 :第一設(shè)備判斷第一隊(duì)列是否未滿。
[0088] 在本實(shí)施例中,第一隊(duì)列為一個(gè)隊(duì)列或多個(gè)隊(duì)列中的一個(gè)。
[0089] 可選地,當(dāng)?shù)谝魂?duì)列為循環(huán)隊(duì)列時(shí),該步驟300可以包括:
[0090] 第一設(shè)備獲取第一隊(duì)列的讀指針;
[0091] 當(dāng)?shù)谝魂?duì)列的寫指針指向的單元的下一個(gè)單元為第一隊(duì)列的讀指針指向的單元 時(shí),判定第一隊(duì)列已滿;
[0092] 當(dāng)?shù)谝魂?duì)列的寫指針指向的單位的下一個(gè)單位不是第一隊(duì)列的讀指針指向的單 兀時(shí),判定第一隊(duì)列未滿。
[0093] 可以理解地,隊(duì)列是由若干大小相等的單元構(gòu)成。
[0094] 可選地,當(dāng)?shù)谝魂?duì)列為順序隊(duì)列時(shí),該步驟300可以包括:
[0095] 當(dāng)?shù)谝魂?duì)列的寫指針等于第一隊(duì)列的大小時(shí),判定第一隊(duì)列已滿;
[0096] 當(dāng)?shù)谝魂?duì)列的寫指針小于第一隊(duì)列的大小時(shí),判定第一隊(duì)列未滿。
[0097] 需要說明的是,隊(duì)列的讀指針和寫指針實(shí)質(zhì)上是一個(gè)具體的數(shù)值,代表其指向的 單元相對(duì)于隊(duì)列基地址指向的單元的偏移量。
[0098] 可以理解地,當(dāng)?shù)谝魂?duì)列未滿時(shí),數(shù)據(jù)報(bào)文才能通過第一隊(duì)列從第一設(shè)備傳輸?shù)?第二設(shè)備。
[0099] 當(dāng)?shù)谝魂?duì)列已滿時(shí),第一設(shè)備可以將數(shù)據(jù)報(bào)文緩存在第一設(shè)備中,等到第一隊(duì)列 未滿時(shí),再將數(shù)據(jù)報(bào)文通過第一隊(duì)列傳輸?shù)降诙O(shè)備,也可以將待傳輸數(shù)據(jù)丟棄,以免耽誤 該數(shù)據(jù)報(bào)文后面的數(shù)據(jù)報(bào)文的傳輸。
[0100] 步驟301 :當(dāng)?shù)谝魂?duì)列未滿時(shí),第一設(shè)備將N個(gè)數(shù)據(jù)報(bào)文寫入共享存儲(chǔ)區(qū)中,N為正 整數(shù)且N彡2。
[0101] 在本實(shí)施例中,數(shù)據(jù)報(bào)文可以寫入共享存儲(chǔ)區(qū)中非隊(duì)列的任意位置。
[0102] 可以理解地,在執(zhí)行步驟301時(shí),每將一個(gè)數(shù)據(jù)報(bào)文寫入共享存儲(chǔ)區(qū)中之前,都會(huì) 執(zhí)行一次步驟300,直到將N個(gè)數(shù)據(jù)報(bào)文都寫入共享存儲(chǔ)區(qū)中。
[0103] 在本實(shí)施例中,N個(gè)數(shù)據(jù)報(bào)文基于第一隊(duì)列傳輸。
[0104] 步驟302 :第一設(shè)備將N個(gè)數(shù)據(jù)報(bào)文的存儲(chǔ)地址和長(zhǎng)度構(gòu)造為一個(gè)描述符報(bào)文,并 將描述符報(bào)文寫入第一隊(duì)列。
[0105] 在本實(shí)施例的一種實(shí)現(xiàn)方式中,該步驟302可以包括:
[0106] 在每將一個(gè)數(shù)據(jù)報(bào)文寫入共享存儲(chǔ)區(qū)之后,第一設(shè)備將該數(shù)據(jù)報(bào)文的存儲(chǔ)地址和 長(zhǎng)度構(gòu)造為該數(shù)據(jù)報(bào)文的ro,并將該數(shù)據(jù)報(bào)文的ro緩存在第一設(shè)備中;
[0107] 第一設(shè)備將N個(gè)數(shù)據(jù)報(bào)文的ro構(gòu)造為一個(gè)描述符報(bào)文,并將描述符報(bào)文寫入第一 隊(duì)列。
[0108] 在本實(shí)施例中,數(shù)據(jù)報(bào)文的ro包括但不限于數(shù)據(jù)報(bào)文的存儲(chǔ)地址和長(zhǎng)度。
[0109] 在具體實(shí)現(xiàn)中,可以在第一設(shè)備的緩存區(qū)中設(shè)置固定大小的區(qū)域存儲(chǔ)數(shù)據(jù)報(bào)文的 PD,如數(shù)據(jù)報(bào)文的ro的長(zhǎng)度均為32bytes (字節(jié)),第一設(shè)備最多緩存一個(gè)隊(duì)列的16個(gè)數(shù)據(jù) 報(bào)文的ro,第一設(shè)備和第二設(shè)備之間傳輸數(shù)據(jù)共使用256個(gè)隊(duì)列,則在第一設(shè)備的緩存區(qū) 中設(shè)置大小為256*16*32 = 131702bytes = 128Kbytes的區(qū)域存儲(chǔ)數(shù)據(jù)報(bào)文的H)。
[0110] 可以理解地,為數(shù)據(jù)報(bào)文構(gòu)造 ro,可以避免對(duì)數(shù)據(jù)存儲(chǔ)在共享存儲(chǔ)區(qū)的大小限制, 或者,為了實(shí)現(xiàn)大小統(tǒng)一進(jìn)行無效數(shù)填充而造成的空間浪費(fèi)。
[0111] 步驟303 :第一設(shè)備更新共享存儲(chǔ)區(qū)中的第一隊(duì)列的寫指針,寫指針更新后的值 等于寫指針更新前的值加 N。
[0112] 在本實(shí)施例的一種實(shí)現(xiàn)方式中,該步驟303可以包括:
[0113] 在每將一個(gè)數(shù)據(jù)報(bào)文寫入共享存儲(chǔ)區(qū)之后,第一設(shè)備更新緩存在第一設(shè)備中的第 一隊(duì)列的寫指針,寫指針更新后的值等于寫指針更新前的值加1 ;
[0114] 在緩存在第一設(shè)備中的第一隊(duì)列的寫指針更新N次之后,第一設(shè)備將緩存在第一 設(shè)備中的第一隊(duì)列的寫指針構(gòu)造為寫指針報(bào)文,并將寫指針報(bào)文寫入共享存儲(chǔ)區(qū)中。
[0115] 在具體實(shí)現(xiàn)中,可以在第一設(shè)備的緩存區(qū)中設(shè)置固定大小的區(qū)域存儲(chǔ)第一隊(duì)列的 寫指針,如第一隊(duì)列的寫指針的長(zhǎng)度固定為32bits (比特),則在第一設(shè)備的緩存區(qū)中設(shè)置 大小為32bits (即4bytes)的區(qū)域存儲(chǔ)第一隊(duì)列的寫指針。
[0116] 構(gòu)造寫指針時(shí),還是以第一隊(duì)列的寫指針的長(zhǎng)度為32bits為例,第一設(shè)備將第一 隊(duì)列的寫指針構(gòu)造為1個(gè)32bits (即4bytes)的寫指針報(bào)文。
[0117] 在本實(shí)施例的另一種實(shí)現(xiàn)方式中,該步驟303可以包括:
[0118] 在每將一個(gè)數(shù)據(jù)報(bào)文寫入共享存儲(chǔ)區(qū)之后,第一設(shè)備將第一隊(duì)列對(duì)應(yīng)的計(jì)數(shù)器加 1 ;
[0119] 在將第一隊(duì)列對(duì)應(yīng)的計(jì)數(shù)器加了 N次之后,第一設(shè)備更新共享存儲(chǔ)區(qū)中的第一隊(duì) 列的寫指針,寫指針更新后的值等于寫指針更新前的值加上第一隊(duì)列對(duì)應(yīng)的計(jì)數(shù)器加了N 次后的值。
[0120] 可以理解地,在該種實(shí)現(xiàn)方式中,在每次更新共享存儲(chǔ)區(qū)中的第一隊(duì)列的寫指針 之后,第一設(shè)備都會(huì)將第一隊(duì)列對(duì)應(yīng)的計(jì)數(shù)器清零。
[0121] 在本實(shí)施例中,關(guān)于步驟302和步驟303執(zhí)行的條件可以為以下的任一種:
[0122] 第一種,N達(dá)到設(shè)定值;
[0123] 第二種,N個(gè)數(shù)據(jù)報(bào)文寫入共享存儲(chǔ)區(qū)的時(shí)間達(dá)到設(shè)定時(shí)間。
[0124] 對(duì)于第一種條件,設(shè)定值可以由第一設(shè)備的緩存區(qū)中設(shè)置的存儲(chǔ)數(shù)據(jù)報(bào)文的ro 的區(qū)域的大小決定。
[0125] 在實(shí)際應(yīng)用中,可以根據(jù)緩存區(qū)中存儲(chǔ)數(shù)據(jù)報(bào)文的ro的區(qū)域剩余空間的大小判 斷N是否達(dá)到設(shè)定值。具體地,當(dāng)緩存區(qū)中存儲(chǔ)數(shù)據(jù)報(bào)文的ro的區(qū)域沒有剩余空間時(shí),n達(dá) 到設(shè)定值。
[0126] 對(duì)于第二種條件,設(shè)定時(shí)間可以根據(jù)對(duì)數(shù)據(jù)傳輸?shù)膶?shí)時(shí)性要求確定。對(duì)數(shù)據(jù)傳輸 的實(shí)時(shí)性要求越高,設(shè)定時(shí)間越短,如10US (微秒)、64us或128US,防止數(shù)據(jù)報(bào)文長(zhǎng)時(shí)間得 不到調(diào)度。
[0127] 在實(shí)際應(yīng)用中,當(dāng)更新共享存儲(chǔ)區(qū)中的第一隊(duì)列的寫指針之前第一次將數(shù)據(jù)報(bào)文 寫入共享存儲(chǔ)區(qū)時(shí),開始進(jìn)行計(jì)時(shí),因此可以根據(jù)所計(jì)時(shí)間,得到當(dāng)前時(shí)刻與更新共享存儲(chǔ) 區(qū)中的第一隊(duì)列的寫指針之前第一次將數(shù)據(jù)報(bào)文寫入共享存儲(chǔ)區(qū)的時(shí)刻之間的時(shí)間,進(jìn)而 進(jìn)行N個(gè)數(shù)據(jù)報(bào)文寫入共享存儲(chǔ)區(qū)的時(shí)間是否達(dá)到設(shè)定時(shí)間的判斷。
[0128] 同樣地,在更新共享存儲(chǔ)區(qū)中的第一隊(duì)列的寫指針之后,可以將所計(jì)時(shí)間清零。當(dāng) 上一次更新共享存儲(chǔ)區(qū)中的第一隊(duì)列的寫指針后第一次將數(shù)據(jù)報(bào)文寫入共享存儲(chǔ)區(qū)時(shí),重 新開始進(jìn)行計(jì)時(shí),得到當(dāng)前時(shí)刻與上一次更新共享存儲(chǔ)區(qū)中的第一隊(duì)列的寫指針后第一次 將數(shù)據(jù)報(bào)文寫入共享存儲(chǔ)區(qū)的時(shí)刻之間的時(shí)間,進(jìn)而進(jìn)行N個(gè)數(shù)據(jù)報(bào)文寫入共享存儲(chǔ)區(qū)的 時(shí)間是否達(dá)到設(shè)定時(shí)間的判斷。
[0129] 在具體實(shí)現(xiàn)中,以設(shè)定個(gè)數(shù)為16,設(shè)定時(shí)間為64us為例,當(dāng)所計(jì)時(shí)間小于64us,且 緩存區(qū)中存儲(chǔ)數(shù)據(jù)報(bào)文的ro的區(qū)域沒有剩余空間時(shí),第一設(shè)備將緩存在第一設(shè)備的緩存 區(qū)中的16個(gè)數(shù)據(jù)報(bào)文的構(gòu)造為1個(gè)512bytes (16*32bytes)的描述符報(bào)文,并將描述符 報(bào)文寫入第一隊(duì)列中;當(dāng)所計(jì)時(shí)間達(dá)到64us,且緩存區(qū)中存儲(chǔ)數(shù)據(jù)報(bào)文的ro的區(qū)域只存儲(chǔ) 有3個(gè)數(shù)據(jù)報(bào)文的ro時(shí),第一設(shè)備將緩存在第一設(shè)備的緩存區(qū)中的3個(gè)數(shù)據(jù)報(bào)文的ro構(gòu) 造為1個(gè)96bytes(3*32bytes)的描述符報(bào)文,并將描述符報(bào)文寫入第一隊(duì)列中。
[0130] 需要說明的是,在執(zhí)行步驟302之后,該方法還包括步驟:將緩存在第一設(shè)備中的 數(shù)據(jù)報(bào)文的ro全部刪除。如果第一設(shè)備的緩存區(qū)中緩存有第一隊(duì)列的寫指針,則該寫指針 保持不變。
[0131] 需要說明的是,在本實(shí)施例中,步驟303僅在執(zhí)行步驟302之后執(zhí)行,每執(zhí)行一次 步驟302,隨后執(zhí)行一次步驟303,以確保第二設(shè)備在獲取到更新后的寫指針時(shí),描述符報(bào) 文已經(jīng)寫入第一隊(duì)列中。
[0132] 圖5為本實(shí)施例第一設(shè)備發(fā)送報(bào)文(即將報(bào)文寫入共享存儲(chǔ)區(qū)中)的示意圖,如 圖5所示,第一設(shè)備首先發(fā)送若干個(gè)數(shù)據(jù)報(bào)文,當(dāng)滿足設(shè)定條件時(shí),依次發(fā)送一個(gè)描述符報(bào) 文、一個(gè)寫指針報(bào)文。
[0133] 步驟304 :第二設(shè)備從共享存儲(chǔ)區(qū)中獲取更新后的第一隊(duì)列的寫指針。
[0134] 在實(shí)際應(yīng)用中,第二設(shè)備可以每隔固定時(shí)間從第一設(shè)備和第二設(shè)備的共享存儲(chǔ)區(qū) 中獲取寫指針,也可以在獲知第一設(shè)備和第二設(shè)備的共享存儲(chǔ)區(qū)中的寫指針進(jìn)行了更新之 后,從第一設(shè)備和第二設(shè)備的共享存儲(chǔ)區(qū)中獲取寫指針。第二設(shè)備獲取寫指針的方式可以 是主動(dòng)發(fā)送請(qǐng)求進(jìn)行獲取,也可以是被動(dòng)接收共享存儲(chǔ)區(qū)發(fā)送的報(bào)文,本發(fā)明對(duì)此均不作 限制。
[0135] 步驟305 :第二設(shè)備根據(jù)更新后的寫指針和第一隊(duì)列的讀指針,依次從共享存儲(chǔ) 區(qū)中讀取N個(gè)數(shù)據(jù)報(bào)文。
[0136] 在本實(shí)施例的一種實(shí)現(xiàn)方式中,該步驟305可以包括:
[0137] 第二設(shè)備將第一隊(duì)列的寫指針與第一隊(duì)列的讀指針進(jìn)行比較,確定共享存儲(chǔ)區(qū)中 第二設(shè)備未讀取的數(shù)據(jù)報(bào)文的數(shù)量;
[0138] 第二設(shè)備根據(jù)第一隊(duì)列的讀指針,從共享存儲(chǔ)區(qū)中依次讀取第二設(shè)備未讀取的數(shù) 據(jù)報(bào)文。
[0139] 可以理解地,將第一隊(duì)列的寫指針與第一隊(duì)列的讀指針相減,即可確定共享存儲(chǔ) 區(qū)中第二設(shè)備未讀取的數(shù)據(jù)報(bào)文的數(shù)量。
[0140] 可選地,第二設(shè)備根據(jù)第一隊(duì)列的讀指針,從共享存儲(chǔ)區(qū)中依次讀取第二設(shè)備未 讀取的數(shù)據(jù)報(bào)文,可以包括:
[0141] 第二設(shè)備根據(jù)第一隊(duì)列的讀指針和第二設(shè)備未讀取的數(shù)據(jù)報(bào)文的數(shù)量,從第一隊(duì) 列中依次讀取第二設(shè)備未讀取的數(shù)據(jù)報(bào)文的ro;
[0142] 在每讀取一次第二設(shè)備未讀取的數(shù)據(jù)報(bào)文的ro之后,第二設(shè)備根據(jù)該數(shù)據(jù)報(bào)文 的ro,從共享存儲(chǔ)區(qū)中讀取該數(shù)據(jù)報(bào)文。
[0143] 在具體實(shí)現(xiàn)中,第二設(shè)備先根據(jù)第二設(shè)備未讀取的數(shù)據(jù)報(bào)文的數(shù)量,知道一共需 要讀取的空間大小。接著根據(jù)第一隊(duì)列的基地址和讀指針,即可獲得第二設(shè)備未讀取的數(shù) 據(jù)報(bào)文的ro的存儲(chǔ)地址。再根據(jù)第二設(shè)備未讀取的數(shù)據(jù)報(bào)文的ro的存儲(chǔ)地址,依次從隊(duì) 列中讀取數(shù)據(jù)報(bào)文的ro。然后根據(jù)讀取的數(shù)據(jù)報(bào)文的ro,即可獲得數(shù)據(jù)報(bào)文的存儲(chǔ)地址和 長(zhǎng)度。最后每獲得一次數(shù)據(jù)報(bào)文的存儲(chǔ)地址和長(zhǎng)度,就根據(jù)數(shù)據(jù)報(bào)文的存儲(chǔ)地址和長(zhǎng)度,從 共享存儲(chǔ)區(qū)中獲得一個(gè)數(shù)據(jù)報(bào)文。
[0144] 步驟306 :第二設(shè)備更新共享存儲(chǔ)區(qū)中的讀指針,讀指針更新后的值等于讀指針 更新前的值加 N。
[0145] 需要說明的是,在本實(shí)施例中,數(shù)據(jù)報(bào)文是第一設(shè)備基于第一隊(duì)列傳輸給第二設(shè) 備的數(shù)據(jù)的報(bào)文形式,描述符報(bào)文是數(shù)據(jù)報(bào)文的ro的報(bào)文形式,寫指針報(bào)文是第一隊(duì)列的 寫指針的報(bào)文形式,讀指針報(bào)文是第一隊(duì)列的寫指針的報(bào)文形式??梢岳斫獾?,第一設(shè)備和 第二設(shè)備從共享存儲(chǔ)區(qū)中寫入或讀取任何數(shù)據(jù)都是通過報(bào)文進(jìn)行的。
[0146] 本發(fā)明實(shí)施例通過將N個(gè)數(shù)據(jù)報(bào)文寫入共享存儲(chǔ)區(qū)中,并更新共享存儲(chǔ)區(qū)中的第 一隊(duì)列的寫指針,N為正整數(shù)且N > 2,N個(gè)數(shù)據(jù)報(bào)文基于第一隊(duì)列傳輸,寫指針更新后的值 等于寫指針更新前的值加 N,寫指針不需要跟隨數(shù)據(jù)的發(fā)送而發(fā)送,減少了寫指針的發(fā)送, 提高了帶寬利用率,并且降低了由于傳輸帶寬受限造成數(shù)據(jù)丟棄情況的發(fā)生,提高了傳輸 可靠性。而且,第一設(shè)備構(gòu)造數(shù)據(jù)報(bào)文的ro,并將數(shù)據(jù)報(bào)文的ro緩存在第一設(shè)備中,只有 當(dāng)滿足設(shè)定條件時(shí),才將數(shù)據(jù)報(bào)文的ro構(gòu)造為描述符報(bào)文,并將描述符報(bào)文寫入第一隊(duì)列 中,在數(shù)據(jù)報(bào)文的長(zhǎng)度可以是任意值的同時(shí),減少了數(shù)據(jù)報(bào)文的ro的發(fā)送,進(jìn)一步提高了 帶寬利用率和傳輸可靠性。
[0147] 實(shí)施例四
[0148] 本發(fā)明實(shí)施例提供了一種基于隊(duì)列的數(shù)據(jù)傳輸方法,在本實(shí)施例中,在每將一個(gè) 數(shù)據(jù)報(bào)文寫入共享存儲(chǔ)區(qū)中之后,將一個(gè)數(shù)據(jù)報(bào)文的存儲(chǔ)地址和長(zhǎng)度構(gòu)造為一個(gè)描述符報(bào) 文,并將描述符報(bào)文寫入第一隊(duì)列。參見圖6,該方法包括:
[0149] 步驟400 :第一設(shè)備判斷第一隊(duì)列是否未滿。
[0150] 在本實(shí)施例中,第一隊(duì)列為一個(gè)隊(duì)列或多個(gè)隊(duì)列中的一個(gè)。
[0151] 具體地,該步驟400可以與實(shí)施例三中的步驟300相同,在此不再詳述。
[0152] 步驟401 :當(dāng)?shù)谝魂?duì)列未滿時(shí),第一設(shè)備將N個(gè)數(shù)據(jù)報(bào)文寫入共享存儲(chǔ)區(qū)中,N為正 整數(shù)且N彡2。
[0153] 在本實(shí)施例中,數(shù)據(jù)報(bào)文可以寫入共享存儲(chǔ)區(qū)中非隊(duì)列的任意位置。
[0154] 具體地,該步驟401可以與實(shí)施例三中的步驟301相同,在此不再詳述。
[0155] 步驟402 :在每將一個(gè)數(shù)據(jù)報(bào)文寫入共享存儲(chǔ)區(qū)中之后,將一個(gè)數(shù)據(jù)報(bào)文的存儲(chǔ) 地址和長(zhǎng)度構(gòu)造為一個(gè)描述符報(bào)文,并將描述符報(bào)文寫入第一隊(duì)列。
[0156] 在本實(shí)施例中,描述符報(bào)文是數(shù)據(jù)報(bào)文的ro的報(bào)文形式,實(shí)質(zhì)上就是數(shù)據(jù)報(bào)文的 PD。數(shù)據(jù)報(bào)文的ro包括但不限于數(shù)據(jù)報(bào)文的存儲(chǔ)地址和長(zhǎng)度。
[0157] 在具體實(shí)現(xiàn)中,以數(shù)據(jù)報(bào)文的的長(zhǎng)度為32bytes為例,第一設(shè)備將數(shù)據(jù)報(bào)文的 構(gòu)造為1個(gè)32bytes的描述符報(bào)文。
[0158] 步驟403 :第一設(shè)備更新共享存儲(chǔ)區(qū)中的第一隊(duì)列的寫指針,寫指針更新后的值 等于寫指針更新前的值加 N。
[0159] 具體地,該步驟403可以與實(shí)施例三中的步驟303相同,在此不再詳述。
[0160] 在本實(shí)施例中,關(guān)于步驟403執(zhí)行的條件可以為以下的任一種:
[0161] 第一種,N達(dá)到設(shè)定值;
[0162] 第二種,N個(gè)數(shù)據(jù)報(bào)文寫入共享存儲(chǔ)區(qū)的時(shí)間達(dá)到設(shè)定時(shí)間;
[0163] 第三種,將N個(gè)數(shù)據(jù)報(bào)文寫入所述共享存儲(chǔ)區(qū)(步驟401)后的預(yù)定時(shí)間內(nèi)沒有待 發(fā)送的數(shù)據(jù)報(bào)文;
[0164] 第四種,N個(gè)數(shù)據(jù)報(bào)文后的數(shù)據(jù)報(bào)文基于非第一隊(duì)列傳輸,也就是說,N個(gè)數(shù)據(jù)報(bào) 文后的數(shù)據(jù)報(bào)文與N個(gè)數(shù)據(jù)報(bào)文基于不同的隊(duì)列傳輸。
[0165] 對(duì)于第一種條件,設(shè)定值可以根據(jù)第一隊(duì)列的深度、第一設(shè)備處理大量數(shù)據(jù)報(bào)文 的能力、以及對(duì)數(shù)據(jù)傳輸?shù)膶?shí)時(shí)性要求確定。例如,設(shè)定時(shí)間根據(jù)對(duì)數(shù)據(jù)傳輸?shù)膶?shí)時(shí)性要求 確定,則對(duì)數(shù)據(jù)傳輸?shù)膶?shí)時(shí)性要求越高,設(shè)定時(shí)間越短,如設(shè)定值為64。
[0166] 在實(shí)際應(yīng)用中,當(dāng)更新共享存儲(chǔ)區(qū)中的第一隊(duì)列的寫指針之前第一次將數(shù)據(jù)報(bào)文 寫入共享存儲(chǔ)區(qū)中時(shí),開始對(duì)將數(shù)據(jù)報(bào)文寫入共享存儲(chǔ)區(qū)中的次數(shù)進(jìn)行計(jì)數(shù)?;蛘?,在更新 共享存儲(chǔ)區(qū)中的第一隊(duì)列的寫指針之后,將所計(jì)數(shù)目清零,當(dāng)上一次更新共享存儲(chǔ)區(qū)中的 第一隊(duì)列的寫指針后第一次將數(shù)據(jù)報(bào)文寫入共享存儲(chǔ)區(qū)時(shí),重新開始對(duì)將數(shù)據(jù)報(bào)文寫入共 享存儲(chǔ)區(qū)中的次數(shù)進(jìn)行計(jì)數(shù)。因此可以根據(jù)所計(jì)數(shù)目,進(jìn)而進(jìn)行N是否達(dá)到設(shè)定值的判斷。
[0167] 對(duì)于第二種條件,主要是為了對(duì)共享存儲(chǔ)區(qū)的所有隊(duì)列的寫指針采用相同的定 時(shí)發(fā)送機(jī)制,也就是說,無論隊(duì)列的寫指針是否發(fā)生了變化,到達(dá)設(shè)定時(shí)間(如l〇u S、64us 或128us),都通過發(fā)送寫指針報(bào)文將隊(duì)列的寫指針更新一次。例如,設(shè)置定時(shí)發(fā)送周期為 64us,定時(shí)時(shí)間到則把256個(gè)隊(duì)列的指針全部發(fā)送出去,無論該指針是否增加,增加了多 少。方案簡(jiǎn)單,可靠性高。
[0168] 針對(duì)第二種情況,也可以增加識(shí)別機(jī)制,識(shí)別并發(fā)送變動(dòng)的寫指針。
[0169] 在具體實(shí)現(xiàn)中,可以通過寫指針進(jìn)行識(shí)別。例如,更新共享存儲(chǔ)區(qū)中的第一隊(duì)列的 寫指針之前第一隊(duì)列的寫指針大于〇 ;或者,當(dāng)前時(shí)刻第一隊(duì)列的寫指針,與上一次更新共 享存儲(chǔ)區(qū)中的第一隊(duì)列的寫指針時(shí)第一隊(duì)列的寫指針不同。
[0170] 可以理解地,只有當(dāng)寫指針發(fā)生變化時(shí),才將寫指針報(bào)文寫入共享存儲(chǔ)區(qū),與達(dá)到 設(shè)定時(shí)間就寫入相比,可以避免不必要的傳輸,節(jié)省傳輸帶寬。
[0171] 在實(shí)際應(yīng)用中,當(dāng)更新共享存儲(chǔ)區(qū)中的第一隊(duì)列的寫指針之前第一次將數(shù)據(jù)報(bào)文 寫入共享存儲(chǔ)區(qū)時(shí),開始進(jìn)行計(jì)時(shí),因此可以根據(jù)所計(jì)時(shí)間,得到當(dāng)前時(shí)刻與更新共享存儲(chǔ) 區(qū)中的第一隊(duì)列的寫指針之前第一次將數(shù)據(jù)報(bào)文寫入共享存儲(chǔ)區(qū)的時(shí)刻之間的時(shí)間,進(jìn)而 進(jìn)行N個(gè)數(shù)據(jù)報(bào)文寫入共享存儲(chǔ)區(qū)的時(shí)間是否達(dá)到設(shè)定時(shí)間的判斷。
[0172] 同樣地,在更新共享存儲(chǔ)區(qū)中的第一隊(duì)列的寫指針之后,將所計(jì)時(shí)間清零。當(dāng)上一 次更新共享存儲(chǔ)區(qū)中的第一隊(duì)列的寫指針后第一次將數(shù)據(jù)報(bào)文寫入共享存儲(chǔ)區(qū)時(shí),重新開 始進(jìn)行計(jì)時(shí),得到當(dāng)前時(shí)刻與上一次更新共享存儲(chǔ)區(qū)中的第一隊(duì)列的寫指針后第一次將數(shù) 據(jù)報(bào)文寫入共享存儲(chǔ)區(qū)的時(shí)刻之間的時(shí)間,進(jìn)而進(jìn)行N個(gè)數(shù)據(jù)報(bào)文寫入共享存儲(chǔ)區(qū)的時(shí)間 是否達(dá)到設(shè)定時(shí)間的判斷。
[0173] 對(duì)于第三種條件和第四種條件,由于本實(shí)施例主要是適用于突發(fā)業(yè)務(wù),即第一設(shè) 備連續(xù)基于同一個(gè)隊(duì)列連續(xù)向第二設(shè)備傳輸?shù)膱?chǎng)景,因此采用第三種條件和第四種條件識(shí) 別是否屬于突發(fā)業(yè)務(wù)的場(chǎng)景并且第四種條件僅限于共享存儲(chǔ)區(qū)中設(shè)有多個(gè)隊(duì)列的情況。
[0174] 在具體實(shí)現(xiàn)中,以設(shè)定次數(shù)為64為例,當(dāng)所計(jì)次數(shù)達(dá)到64時(shí),第一設(shè)備將第一隊(duì) 列的寫指針構(gòu)造為1個(gè)4bytes的寫指針報(bào)文;當(dāng)所計(jì)次數(shù)為3時(shí),進(jìn)行計(jì)時(shí),并在計(jì)時(shí)時(shí)間 達(dá)到預(yù)定時(shí)間時(shí),依然沒有待發(fā)送的數(shù)據(jù)報(bào)文,或者,N個(gè)數(shù)據(jù)報(bào)文后的數(shù)據(jù)報(bào)文基于非第 一隊(duì)列傳輸,第一設(shè)備將第一隊(duì)列的寫指針構(gòu)造為1個(gè)4bytes的寫指針報(bào)文。
[0175] 需要說明的是,當(dāng)執(zhí)行步驟403之后,緩存在第一設(shè)備的緩存區(qū)中的第一隊(duì)列的 寫指針保持不變。
[0176] 圖7為本實(shí)施例第一設(shè)備發(fā)送報(bào)文(即將報(bào)文寫入共享存儲(chǔ)區(qū)中)的示意圖,如 圖7所示,第一設(shè)備首先發(fā)送若干個(gè)數(shù)據(jù)報(bào)文和描述符報(bào)文,當(dāng)滿足設(shè)定條件時(shí),發(fā)送一個(gè) 寫指針報(bào)文。
[0177] 步驟404 :第二設(shè)備從共享存儲(chǔ)區(qū)中獲取更新后的第一隊(duì)列的寫指針。
[0178] 具體地,該步驟404可以與實(shí)施例三中的步驟304相同,在此不再詳述。
[0179] 步驟405 :第二設(shè)備根據(jù)更新后的寫指針和第一隊(duì)列的讀指針,依次從共享存儲(chǔ) 區(qū)中讀取N個(gè)數(shù)據(jù)報(bào)文。
[0180] 具體地,該步驟405可以與實(shí)施例三中的步驟305相同,在此不再詳述。
[0181] 步驟406 :第二設(shè)備更新共享存儲(chǔ)區(qū)中的讀指針,讀指針更新后的值等于讀指針 更新前的值加 N。
[0182] 具體地,該步驟406可以與實(shí)施例三中的步驟306相同,在此不再詳述。
[0183] 需要說明的是,在本實(shí)施例中,數(shù)據(jù)報(bào)文是第一設(shè)備基于第一隊(duì)列傳輸給第二設(shè) 備的數(shù)據(jù)的報(bào)文形式,描述符報(bào)文是數(shù)據(jù)報(bào)文的ro的報(bào)文形式,寫指針報(bào)文是第一隊(duì)列的 寫指針的報(bào)文形式,讀指針報(bào)文是第一隊(duì)列的寫指針的報(bào)文形式??梢岳斫獾兀谝辉O(shè)備和 第二設(shè)備從共享存儲(chǔ)區(qū)中寫入或讀取任何數(shù)據(jù)都是通過報(bào)文進(jìn)行的。
[0184] 本發(fā)明實(shí)施例通過將N個(gè)數(shù)據(jù)報(bào)文寫入共享存儲(chǔ)區(qū)中,并更新共享存儲(chǔ)區(qū)中的第 一隊(duì)列的寫指針,N為正整數(shù)且N > 2,N個(gè)數(shù)據(jù)報(bào)文基于第一隊(duì)列傳輸,寫指針更新后的值 等于寫指針更新前的值加 N,寫指針不需要跟隨數(shù)據(jù)的發(fā)送而發(fā)送,減少了寫指針的發(fā)送, 提高了帶寬利用率,并且降低了由于傳輸帶寬受限造成數(shù)據(jù)丟棄情況的發(fā)生,提高了傳輸 可靠性。而且,第一設(shè)備構(gòu)造數(shù)據(jù)報(bào)文的ro,并將數(shù)據(jù)報(bào)文的ro構(gòu)造為描述符報(bào)文,將描述 符報(bào)文寫入第一隊(duì)列中,第一設(shè)備的緩存區(qū)中不用設(shè)置存儲(chǔ)數(shù)據(jù)報(bào)文的ro的區(qū)域,節(jié)省了 對(duì)第一設(shè)備資源的使用。
[0185] 實(shí)施例五
[0186] 本發(fā)明實(shí)施例提供了一種基于隊(duì)列的數(shù)據(jù)傳輸方法,在本實(shí)施例中,將N個(gè)數(shù)據(jù) 報(bào)文連續(xù)寫入第一隊(duì)列。參見圖8,該方法包括:
[0187] 步驟500 :第一設(shè)備判斷第一隊(duì)列是否未滿。
[0188] 在本實(shí)施例中,第一隊(duì)列為一個(gè)隊(duì)列或多個(gè)隊(duì)列中的一個(gè)。
[0189] 具體地,該步驟500可以與實(shí)施例四中的步驟400相同,在此不再詳述。
[0190] 步驟501 :當(dāng)?shù)谝魂?duì)列未滿時(shí),第一設(shè)備將N個(gè)數(shù)據(jù)報(bào)文連續(xù)寫入第一隊(duì)列,N為正 整數(shù)且N彡2。
[0191] 可選地,當(dāng)數(shù)據(jù)報(bào)文的長(zhǎng)度為變化值時(shí),該步驟501可以包括:
[0192] 當(dāng)數(shù)據(jù)報(bào)文的長(zhǎng)度等于數(shù)據(jù)報(bào)文的最大值時(shí),將數(shù)據(jù)報(bào)文寫入第一隊(duì)列中;
[0193] 或者,
[0194] 當(dāng)數(shù)據(jù)報(bào)文的長(zhǎng)度小于數(shù)據(jù)報(bào)文的最大值時(shí),在數(shù)據(jù)報(bào)文中有效數(shù)據(jù)的后面填充 無效值,填充后的數(shù)據(jù)報(bào)文的長(zhǎng)度等于該最大值;
[0195] 將填充后的數(shù)據(jù)報(bào)文寫入第一隊(duì)列中。
[0196] 步驟502 :第一設(shè)備更新共享存儲(chǔ)區(qū)中的第一隊(duì)列的寫指針,寫指針更新后的值 等于寫指針更新前的值加 N。
[0197] 具體地,該步驟502可以與實(shí)施例四中的步驟403相同,在此不再詳述。
[0198] 圖9為本實(shí)施例第一設(shè)備發(fā)送報(bào)文(即將報(bào)文寫入共享存儲(chǔ)區(qū)中)的示意圖,如 圖9所示,第一設(shè)備首先發(fā)送若干個(gè)數(shù)據(jù)報(bào)文,當(dāng)滿足設(shè)定條件時(shí),發(fā)送一個(gè)寫指針報(bào)文。
[0199] 步驟503 :第二設(shè)備從共享存儲(chǔ)區(qū)中獲取更新后的第一隊(duì)列的寫指針。
[0200] 具體地,該步驟503可以與實(shí)施例四中的步驟404相同,在此不再詳述。
[0201] 步驟504 :第二設(shè)備根據(jù)更新后的寫指針和第一隊(duì)列的讀指針,依次從第一隊(duì)列 中讀取N個(gè)數(shù)據(jù)報(bào)文。
[0202] 在具體實(shí)現(xiàn)中,第二設(shè)備根據(jù)第一隊(duì)列的基地址和讀指針,即可獲得第二設(shè)備未 讀取的數(shù)據(jù)報(bào)文的存儲(chǔ)地址,進(jìn)而從第一隊(duì)列中獲得數(shù)據(jù)報(bào)文。
[0203] 步驟505 :第二設(shè)備更新共享存儲(chǔ)區(qū)中的讀指針,讀指針更新后的值等于讀指針 更新前的值加 N。
[0204] 具體地,該步驟505可以與實(shí)施例四中的步驟406相同,在此不再詳述。
[0205] 需要說明的是,在本實(shí)施例中,數(shù)據(jù)報(bào)文是第一設(shè)備基于第一隊(duì)列傳輸給第二設(shè) 備的數(shù)據(jù)的報(bào)文形式,寫指針報(bào)文是第一隊(duì)列的寫指針的報(bào)文形式,讀指針報(bào)文是第一隊(duì) 列的寫指針的報(bào)文形式??梢岳斫獾?,第一設(shè)備和第二設(shè)備從共享存儲(chǔ)區(qū)中寫入或讀取任 何數(shù)據(jù)都是通過報(bào)文進(jìn)行的。
[0206] 本發(fā)明實(shí)施例通過將N個(gè)數(shù)據(jù)報(bào)文寫入共享存儲(chǔ)區(qū)中,并更新共享存儲(chǔ)區(qū)中的第 一隊(duì)列的寫指針,N為正整數(shù)且N > 2,N個(gè)數(shù)據(jù)報(bào)文基于第一隊(duì)列傳輸,寫指針更新后的值 等于寫指針更新前的值加 N,寫指針不需要跟隨數(shù)據(jù)的發(fā)送而發(fā)送,減少了寫指針的發(fā)送, 提高了帶寬利用率,并且降低了由于傳輸帶寬受限造成數(shù)據(jù)丟棄情況的發(fā)生,提高了傳輸 可靠性。而且,第一設(shè)備直接將數(shù)據(jù)報(bào)文寫入第一隊(duì)列中,數(shù)據(jù)報(bào)文的讀寫更為方便快捷。
[0207] 實(shí)施例六
[0208] 本發(fā)明實(shí)施例提供了一種基于隊(duì)列的數(shù)據(jù)傳輸裝置,適用于第一設(shè)備通過共享存 儲(chǔ)區(qū)向第二設(shè)備傳輸數(shù)據(jù),共享存儲(chǔ)區(qū)可以獨(dú)立于第一設(shè)備和第二設(shè)備,也可以屬于第一 設(shè)備或第二設(shè)備,共享存儲(chǔ)區(qū)中設(shè)有一個(gè)或多個(gè)隊(duì)列、以及與隊(duì)列一一對(duì)應(yīng)的寫指針和讀 指針的緩存區(qū),該裝置設(shè)置在第一設(shè)備上,適用于實(shí)施例一提供的基于隊(duì)列的數(shù)據(jù)傳輸方 法,參見圖10,該裝置包括:
[0209] 數(shù)據(jù)寫入模塊601,用于當(dāng)?shù)谝魂?duì)列未滿時(shí),將N個(gè)數(shù)據(jù)報(bào)文寫入共享存儲(chǔ)區(qū)中, N為正整數(shù)且N > 2, N個(gè)數(shù)據(jù)報(bào)文基于第一隊(duì)列傳輸,第一隊(duì)列為一個(gè)或多個(gè)隊(duì)列中的一 個(gè);
[0210] 寫指針更新模塊602,用于更新共享存儲(chǔ)區(qū)中的第一隊(duì)列的寫指針,寫指針更新后 的值等于寫指針更新前的值加 N。
[0211] 本發(fā)明實(shí)施例通過將N個(gè)數(shù)據(jù)報(bào)文寫入共享存儲(chǔ)區(qū)中,并更新共享存儲(chǔ)區(qū)中的第 一隊(duì)列的寫指針,N為正整數(shù)且N > 2,N個(gè)數(shù)據(jù)報(bào)文基于第一隊(duì)列傳輸,寫指針更新后的值 等于寫指針更新前的值加 N,寫指針不需要跟隨數(shù)據(jù)的發(fā)送而發(fā)送,減少了寫指針的發(fā)送, 提高了帶寬利用率,并且降低了由于傳輸帶寬受限造成數(shù)據(jù)丟棄情況的發(fā)生,提高了傳輸 可靠性。
[0212] 實(shí)施例七
[0213] 本發(fā)明實(shí)施例提供了一種基于隊(duì)列的數(shù)據(jù)傳輸裝置,適用于第一設(shè)備通過共享存 儲(chǔ)區(qū)向第二設(shè)備傳輸數(shù)據(jù),共享存儲(chǔ)區(qū)可以獨(dú)立于第一設(shè)備和第二設(shè)備,也可以屬于第一 設(shè)備或第二設(shè)備,共享存儲(chǔ)區(qū)中設(shè)有一個(gè)或多個(gè)隊(duì)列、以及與隊(duì)列一一對(duì)應(yīng)的寫指針和讀 指針的緩存區(qū),該裝置設(shè)置在第一設(shè)備上,適用于實(shí)施例三、實(shí)施例四或?qū)嵤├逄峁┑幕?于隊(duì)列的數(shù)據(jù)傳輸方法,參見圖11a和圖11b,該裝置包括:
[0214] 數(shù)據(jù)寫入模塊701,用于當(dāng)?shù)谝魂?duì)列未滿時(shí),將N個(gè)數(shù)據(jù)報(bào)文寫入共享存儲(chǔ)區(qū)中, N為正整數(shù)且N > 2, N個(gè)數(shù)據(jù)報(bào)文基于第一隊(duì)列傳輸,第一隊(duì)列為一個(gè)或多個(gè)隊(duì)列中的一 個(gè);
[0215] 寫指針更新模塊702,用于更新共享存儲(chǔ)區(qū)中的第一隊(duì)列的寫指針,寫指針更新后 的值等于寫指針更新前的值加 N。
[0216] 在本實(shí)施例的一種實(shí)現(xiàn)方式中,如圖11a所示,該裝置還可以包括:
[0217] 描述符寫入模塊703,用于在更新共享存儲(chǔ)區(qū)中的第一隊(duì)列的寫指針之前,將N個(gè) 數(shù)據(jù)報(bào)文的存儲(chǔ)地址和長(zhǎng)度構(gòu)造為一個(gè)描述符報(bào)文,并將描述符報(bào)文寫入第一隊(duì)列。
[0218] 在該種實(shí)現(xiàn)方式中,可選地,寫指針更新模塊702可以用于,
[0219] 當(dāng)N達(dá)到設(shè)定值時(shí),或者,當(dāng)N個(gè)數(shù)據(jù)報(bào)文寫入共享存儲(chǔ)區(qū)的時(shí)間達(dá)到設(shè)定時(shí)間 時(shí),更新共享存儲(chǔ)區(qū)中的第一隊(duì)列的寫指針。
[0220] 在本實(shí)施例的另一種實(shí)現(xiàn)方式中,如圖11a所示,該裝置還可以包括:
[0221] 描述符寫入模塊703,用于在每將一個(gè)數(shù)據(jù)報(bào)文寫入共享存儲(chǔ)區(qū)中之后,將一個(gè)數(shù) 據(jù)報(bào)文的存儲(chǔ)地址和長(zhǎng)度構(gòu)造為一個(gè)描述符報(bào)文,并將描述符報(bào)文寫入第一隊(duì)列。
[0222] 在該種實(shí)現(xiàn)方式中,可選地,寫指針更新模塊702可以用于,
[0223] 當(dāng)N達(dá)到設(shè)定值時(shí),或者,當(dāng)N個(gè)數(shù)據(jù)報(bào)文寫入共享存儲(chǔ)區(qū)的時(shí)間達(dá)到設(shè)定時(shí)間 時(shí),更新共享存儲(chǔ)區(qū)中的第一隊(duì)列的寫指針。
[0224] 在該種實(shí)現(xiàn)方式中,可選地,寫指針更新模塊702可以用于,
[0225] 當(dāng)將N個(gè)數(shù)據(jù)報(bào)文寫入所述共享存儲(chǔ)區(qū)后的預(yù)定時(shí)間內(nèi)沒有待發(fā)送的數(shù)據(jù)報(bào)文 時(shí),或者,當(dāng)N個(gè)數(shù)據(jù)報(bào)文后的數(shù)據(jù)報(bào)文基于非第一隊(duì)列傳輸時(shí),更新共享存儲(chǔ)區(qū)中的第一 隊(duì)列的寫指針。
[0226] 在本實(shí)施例的又一種實(shí)現(xiàn)方式中,如圖lib所示,數(shù)據(jù)寫入模塊701可以用于,
[0227] 將N個(gè)數(shù)據(jù)報(bào)文連續(xù)寫入第一隊(duì)列。
[0228] 在該種實(shí)現(xiàn)方式中,可選地,寫指針更新模塊702可以用于,
[0229] 當(dāng)N達(dá)到設(shè)定值時(shí),或者,當(dāng)N個(gè)數(shù)據(jù)報(bào)文寫入共享存儲(chǔ)區(qū)的時(shí)間達(dá)到設(shè)定時(shí)間 時(shí),更新共享存儲(chǔ)區(qū)中的第一隊(duì)列的寫指針。
[0230] 在該種實(shí)現(xiàn)方式中,可選地,寫指針更新模塊702可以用于,
[0231] 當(dāng)將N個(gè)數(shù)據(jù)報(bào)文寫入所述共享存儲(chǔ)區(qū)后的預(yù)定時(shí)間內(nèi)沒有待發(fā)送的數(shù)據(jù)報(bào)文 時(shí),或者,當(dāng)N個(gè)數(shù)據(jù)報(bào)文后的數(shù)據(jù)報(bào)文基于非第一隊(duì)列傳輸時(shí),更新共享存儲(chǔ)區(qū)中的第一 隊(duì)列的寫指針。
[0232] 本發(fā)明實(shí)施例通過將N個(gè)數(shù)據(jù)報(bào)文寫入共享存儲(chǔ)區(qū)中,并更新共享存儲(chǔ)區(qū)中的第 一隊(duì)列的寫指針,N為正整數(shù)且N > 2,N個(gè)數(shù)據(jù)報(bào)文基于第一隊(duì)列傳輸,寫指針更新后的值 等于寫指針更新前的值加 N,寫指針不需要跟隨數(shù)據(jù)的發(fā)送而發(fā)送,減少了寫指針的發(fā)送, 提高了帶寬利用率,并且降低了由于傳輸帶寬受限造成數(shù)據(jù)丟棄情況的發(fā)生,提高了傳輸 可靠性。而且,若第一設(shè)備構(gòu)造數(shù)據(jù)報(bào)文的ro,并將數(shù)據(jù)報(bào)文的ro緩存在第一設(shè)備中,只有 當(dāng)滿足設(shè)定條件時(shí),才將數(shù)據(jù)報(bào)文的ro構(gòu)造為描述符報(bào)文,并將描述符報(bào)文寫入第一隊(duì)列 中,則在數(shù)據(jù)報(bào)文的長(zhǎng)度可以是任意值的同時(shí),減少了數(shù)據(jù)報(bào)文的ro的發(fā)送,進(jìn)一步提高 了帶寬利用率和傳輸可靠性。若第一設(shè)備構(gòu)造數(shù)據(jù)報(bào)文的ro,并將數(shù)據(jù)報(bào)文的ro構(gòu)造為 描述符報(bào)文,將描述符報(bào)文寫入第一隊(duì)列中,則第一設(shè)備的緩存區(qū)中不用設(shè)置存儲(chǔ)數(shù)據(jù)報(bào) 文的ro的區(qū)域,節(jié)省了對(duì)第一設(shè)備資源的使用。若第一設(shè)備直接將數(shù)據(jù)報(bào)文寫入第一隊(duì)列 中,則數(shù)據(jù)報(bào)文的讀寫更為方便快捷。
[0233] 實(shí)施例八
[0234] 本發(fā)明實(shí)施例提供了一種基于隊(duì)列的數(shù)據(jù)傳輸裝置,適用于第一設(shè)備通過共享存 儲(chǔ)區(qū)向第二設(shè)備傳輸數(shù)據(jù),共享存儲(chǔ)區(qū)可以獨(dú)立于第一設(shè)備和第二設(shè)備,也可以屬于第一 設(shè)備或第二設(shè)備,共享存儲(chǔ)區(qū)中設(shè)有一個(gè)或多個(gè)隊(duì)列、以及與隊(duì)列一一對(duì)應(yīng)的寫指針和讀 指針的緩存區(qū),如圖12所示,該裝置80 -般包括發(fā)送器81、接收器82、至少一個(gè)存儲(chǔ)器83、 以及至少一個(gè)處理器84等部件。本領(lǐng)域技術(shù)人員可以理解,圖12中所示出的結(jié)構(gòu)并不構(gòu) 成對(duì)被裝置的限定,可以包括比圖示更多或更少的部件,或者組合某些部件,或者不同的部 件布置。
[0235] 下面結(jié)合圖12對(duì)裝置80的各個(gè)構(gòu)成部件進(jìn)行具體的介紹:
[0236] 至少一個(gè)存儲(chǔ)器83可用于存儲(chǔ)軟件程序以及應(yīng)用模塊,至少一個(gè)處理器84通過 運(yùn)行存儲(chǔ)在至少一個(gè)存儲(chǔ)器83的軟件程序以及應(yīng)用模塊,從而執(zhí)行裝置80的各種功能應(yīng) 用以及數(shù)據(jù)處理。至少一個(gè)存儲(chǔ)器83可主要包括存儲(chǔ)程序區(qū)和存儲(chǔ)數(shù)據(jù)區(qū),其中,存儲(chǔ)程 序區(qū)可存儲(chǔ)操作系統(tǒng)、至少一個(gè)功能所需的應(yīng)用程序(比如將緩存在第一設(shè)備的緩存區(qū)中 的第一隊(duì)列的寫指針加1等)等;存儲(chǔ)數(shù)據(jù)區(qū)可存儲(chǔ)根據(jù)裝置80的處理所創(chuàng)建的數(shù)據(jù)(比 如第一隊(duì)列的寫指針)等。此外,至少一個(gè)存儲(chǔ)器83可以包括高速RAM (Random Access Memory,隨機(jī)存取存儲(chǔ)器),還可以包括非易失性存儲(chǔ)器(non-volatile memory),例如至少 一個(gè)磁盤存儲(chǔ)器件、閃存器件、或其他易失性固態(tài)存儲(chǔ)器件。
[0237] 至少一個(gè)處理器84是裝置80的控制中心,利用各種接口和線路連接整個(gè)裝置的 各個(gè)部分,通過運(yùn)行或執(zhí)行存儲(chǔ)在至少一個(gè)存儲(chǔ)器83內(nèi)的軟件程序和/或應(yīng)用模塊,以及 調(diào)用存儲(chǔ)在至少一個(gè)存儲(chǔ)器83內(nèi)的數(shù)據(jù),執(zhí)行裝置80的各種功能和處理數(shù)據(jù),從而對(duì)裝置 進(jìn)行整體監(jiān)控??蛇x的,至少一個(gè)處理器84可包括一個(gè)或多個(gè)處理核心;優(yōu)選的,至少一個(gè) 處理器84可集成應(yīng)用處理器和調(diào)制解調(diào)處理器,其中,應(yīng)用處理器主要處理操作系統(tǒng)、用 戶界面和應(yīng)用程序等,調(diào)制解調(diào)處理器主要處理無線通信。可以理解的是,上述調(diào)制解調(diào)處 理器也可以不集成到至少一個(gè)處理器84中。
[0238] 在本實(shí)施例中,一個(gè)或者一個(gè)以上程序的程序存儲(chǔ)于至少一個(gè)存儲(chǔ)器83中,且經(jīng) 配置以由至少一個(gè)處理器84執(zhí)行,一個(gè)或者一個(gè)以上程序包含用于進(jìn)行以下操作的指令:
[0239] 當(dāng)?shù)谝魂?duì)列未滿時(shí),將N個(gè)數(shù)據(jù)報(bào)文寫入共享存儲(chǔ)區(qū)中,N為正整數(shù)且N彡2, N個(gè) 數(shù)據(jù)報(bào)文基于第一隊(duì)列傳輸,第一隊(duì)列為一個(gè)或多個(gè)隊(duì)列中的一個(gè);
[0240] 更新共享存儲(chǔ)區(qū)中的第一隊(duì)列的寫指針,寫指針更新后的值等于寫指針更新前的 值加 N。
[0241] 在本實(shí)施例的一種實(shí)現(xiàn)方式中,一個(gè)或者一個(gè)以上程序還可以包含用于進(jìn)行以下 操作的指令:
[0242] 在更新共享存儲(chǔ)區(qū)中的第一隊(duì)列的寫指針之前,將N個(gè)數(shù)據(jù)報(bào)文的存儲(chǔ)地址和長(zhǎng) 度構(gòu)造為一個(gè)描述符報(bào)文,并將描述符報(bào)文寫入第一隊(duì)列。
[0243] 在該種實(shí)現(xiàn)方式中,可選地,一個(gè)或者一個(gè)以上程序可以包含用于進(jìn)行以下操作 的指令:
[0244] 當(dāng)N達(dá)到設(shè)定值時(shí),或者,當(dāng)N個(gè)數(shù)據(jù)報(bào)文寫入共享存儲(chǔ)區(qū)的時(shí)間達(dá)到設(shè)定時(shí)間 時(shí),更新共享存儲(chǔ)區(qū)中的第一隊(duì)列的寫指針。
[0245] 在本實(shí)施例的另一種實(shí)現(xiàn)方式中,一個(gè)或者一個(gè)以上程序還可以包含用于進(jìn)行以 下操作的指令:
[0246] 在每將一個(gè)數(shù)據(jù)報(bào)文寫入共享存儲(chǔ)區(qū)中之后,將一個(gè)數(shù)據(jù)報(bào)文的存儲(chǔ)地址和長(zhǎng)度 構(gòu)造為一個(gè)描述符報(bào)文,并將描述符報(bào)文寫入第一隊(duì)列。
[0247] 在該種實(shí)現(xiàn)方式中,可選地,一個(gè)或者一個(gè)以上程序可以包含用于進(jìn)行以下操作 的指令:
[0248] 當(dāng)N達(dá)到設(shè)定值時(shí),或者,當(dāng)N個(gè)數(shù)據(jù)報(bào)文寫入共享存儲(chǔ)區(qū)的時(shí)間達(dá)到設(shè)定時(shí)間 時(shí),更新共享存儲(chǔ)區(qū)中的第一隊(duì)列的寫指針。
[0249] 在該種實(shí)現(xiàn)方式中,可選地,一個(gè)或者一個(gè)以上程序可以包含用于進(jìn)行以下操作 的指令:
[0250] 當(dāng)將N個(gè)數(shù)據(jù)報(bào)文寫入所述共享存儲(chǔ)區(qū)后的預(yù)定時(shí)間內(nèi)沒有待發(fā)送的數(shù)據(jù)報(bào)文 時(shí),或者,當(dāng)N個(gè)數(shù)據(jù)報(bào)文后的數(shù)據(jù)報(bào)文基于非第一隊(duì)列傳輸時(shí),更新共享存儲(chǔ)區(qū)中的第一 隊(duì)列的寫指針。
[0251] 在本實(shí)施例的又一種實(shí)現(xiàn)方式中,一個(gè)或者一個(gè)以上程序可以包含用于進(jìn)行以下 操作的指令:
[0252] 將N個(gè)數(shù)據(jù)報(bào)文連續(xù)寫入第一隊(duì)列。
[0253] 在該種實(shí)現(xiàn)方式中,可選地,一個(gè)或者一個(gè)以上程序可以包含用于進(jìn)行以下操作 的指令:
[0254] 當(dāng)N達(dá)到設(shè)定值時(shí),或者,當(dāng)N個(gè)數(shù)據(jù)報(bào)文寫入共享存儲(chǔ)區(qū)的時(shí)間達(dá)到設(shè)定時(shí)間 時(shí),更新共享存儲(chǔ)區(qū)中的第一隊(duì)列的寫指針。
[0255] 在該種實(shí)現(xiàn)方式中,可選地,一個(gè)或者一個(gè)以上程序可以包含用于進(jìn)行以下操作 的指令:
[0256] 當(dāng)將N個(gè)數(shù)據(jù)報(bào)文寫入所述共享存儲(chǔ)區(qū)后的預(yù)定時(shí)間內(nèi)沒有待發(fā)送的數(shù)據(jù)報(bào)文 時(shí),或者,當(dāng)N個(gè)數(shù)據(jù)報(bào)文后的數(shù)據(jù)報(bào)文基于非第一隊(duì)列傳輸時(shí),更新共享存儲(chǔ)區(qū)中的第一 隊(duì)列的寫指針。
[0257] 本發(fā)明實(shí)施例通過將N個(gè)數(shù)據(jù)報(bào)文寫入共享存儲(chǔ)區(qū)中,并更新共享存儲(chǔ)區(qū)中的第 一隊(duì)列的寫指針,N為正整數(shù)且N > 2,N個(gè)數(shù)據(jù)報(bào)文基于第一隊(duì)列傳輸,寫指針更新后的值 等于寫指針更新前的值加 N,寫指針不需要跟隨數(shù)據(jù)的發(fā)送而發(fā)送,減少了寫指針的發(fā)送, 提高了帶寬利用率,并且降低了由于傳輸帶寬受限造成數(shù)據(jù)丟棄情況的發(fā)生,提高了傳輸 可靠性。而且,若第一設(shè)備構(gòu)造數(shù)據(jù)報(bào)文的ro,并將數(shù)據(jù)報(bào)文的ro緩存在第一設(shè)備中,只有 當(dāng)滿足設(shè)定條件時(shí),才將數(shù)據(jù)報(bào)文的ro構(gòu)造為描述符報(bào)文,并將描述符報(bào)文寫入第一隊(duì)列 中,則在數(shù)據(jù)報(bào)文的長(zhǎng)度可以是任意值的同時(shí),減少了數(shù)據(jù)報(bào)文的ro的發(fā)送,進(jìn)一步提高 了帶寬利用率和傳輸可靠性。若第一設(shè)備構(gòu)造數(shù)據(jù)報(bào)文的ro,并將數(shù)據(jù)報(bào)文的ro構(gòu)造為 描述符報(bào)文,將描述符報(bào)文寫入第一隊(duì)列中,則第一設(shè)備的緩存區(qū)中不用設(shè)置存儲(chǔ)數(shù)據(jù)報(bào) 文的ro的區(qū)域,節(jié)省了對(duì)第一設(shè)備資源的使用。若第一設(shè)備直接將數(shù)據(jù)報(bào)文寫入第一隊(duì)列 中,則數(shù)據(jù)報(bào)文的讀寫更為方便快捷。
[0258] 實(shí)施例九
[0259] 本發(fā)明實(shí)施例提供了一種基于隊(duì)列的數(shù)據(jù)傳輸裝置,適用于第一設(shè)備通過共享存 儲(chǔ)區(qū)向第二設(shè)備傳輸數(shù)據(jù),共享存儲(chǔ)區(qū)可以獨(dú)立于第一設(shè)備和第二設(shè)備,也可以屬于第一 設(shè)備或第二設(shè)備,共享存儲(chǔ)區(qū)中設(shè)有一個(gè)或多個(gè)隊(duì)列、以及與隊(duì)列一一對(duì)應(yīng)的寫指針和讀 指針的緩存區(qū),該裝置設(shè)置在第二設(shè)備上,適用于實(shí)施例二提供的基于隊(duì)列的數(shù)據(jù)傳輸方 法,參見圖13,該裝置包括:
[0260] 寫指針獲取模塊901,用于從共享存儲(chǔ)區(qū)中獲取更新后的第一隊(duì)列的寫指針,第一 隊(duì)列為一個(gè)或多個(gè)隊(duì)列中的一個(gè),寫指針更新后的值等于寫指針更新前的值加 N,N為正整 數(shù)且N彡2 ;
[0261] 數(shù)據(jù)讀取模塊902,用于根據(jù)更新后的寫指針和第一隊(duì)列的讀指針,依次從共享存 儲(chǔ)區(qū)中讀取N個(gè)數(shù)據(jù)報(bào)文,N個(gè)數(shù)據(jù)報(bào)文基于第一隊(duì)列傳輸;
[0262] 讀指針更新模塊903,用于更新共享存儲(chǔ)區(qū)中的讀指針,讀指針更新后的值等于讀 指針更新前的值加 N。
[0263] 本發(fā)明實(shí)施例通過從共享存儲(chǔ)區(qū)中獲取更新后的第一隊(duì)列的寫指針,并根據(jù)更新 后的寫指針和第一隊(duì)列的讀指針,依次從共享存儲(chǔ)區(qū)中讀取N個(gè)數(shù)據(jù)報(bào)文,N個(gè)數(shù)據(jù)報(bào)文基 于第一隊(duì)列傳輸,第一隊(duì)列為一個(gè)或多個(gè)隊(duì)列中的一個(gè),寫指針更新后的值等于寫指針更 新前的值加 N,N為正整數(shù)且N > 2,因此寫指針不是跟隨數(shù)據(jù)的發(fā)送而發(fā)送的,減少了寫指 針的發(fā)送,提高了帶寬利用率,并且降低了由于傳輸帶寬受限造成數(shù)據(jù)丟棄情況的發(fā)生,提 高了傳輸可靠性。另外,通過更新共享存儲(chǔ)區(qū)中的讀指針,讀指針更新后的值等于讀指針更 新前的值加 N,也減少了讀指針的發(fā)送,進(jìn)一步提高了帶寬利用率和傳輸可靠性。
[0264] 實(shí)施例十
[0265] 本發(fā)明實(shí)施例提供了一種基于隊(duì)列的數(shù)據(jù)傳輸裝置,適用于第一設(shè)備通過共享存 儲(chǔ)區(qū)向第二設(shè)備傳輸數(shù)據(jù),共享存儲(chǔ)區(qū)可以獨(dú)立于第一設(shè)備和第二設(shè)備,也可以屬于第一 設(shè)備或第二設(shè)備,共享存儲(chǔ)區(qū)中設(shè)有一個(gè)或多個(gè)隊(duì)列、以及與隊(duì)列一一對(duì)應(yīng)的寫指針和讀 指針的緩存區(qū),該裝置設(shè)置在第二設(shè)備上,適用于實(shí)施例三、實(shí)施例四或?qū)嵤├逄峁┑幕?于隊(duì)列的數(shù)據(jù)傳輸方法,參見圖14a和圖14b,該裝置包括:
[0266] 寫指針獲取模塊1001,用于從共享存儲(chǔ)區(qū)中獲取更新后的第一隊(duì)列的寫指針,第 一隊(duì)列為一個(gè)或多個(gè)隊(duì)列中的一個(gè),寫指針更新后的值等于寫指針更新前的值加 N,N為正 整數(shù)且N彡2 ;
[0267] 數(shù)據(jù)讀取模塊1002,用于根據(jù)更新后的寫指針和第一隊(duì)列的讀指針,依次從共享 存儲(chǔ)區(qū)中讀取N個(gè)數(shù)據(jù)報(bào)文,N個(gè)數(shù)據(jù)報(bào)文基于第一隊(duì)列傳輸;
[0268] 讀指針更新模塊1003,用于更新共享存儲(chǔ)區(qū)中的讀指針,讀指針更新后的值等于 讀指針更新前的值加 N。
[0269] 在本實(shí)施例的一種實(shí)現(xiàn)方式中,如圖14a所示,數(shù)據(jù)讀取模塊1002可以包括:
[0270] 指針比較單元1002a,用于將第一隊(duì)列的寫指針與第一隊(duì)列的讀指針進(jìn)行比較,確 定共享存儲(chǔ)區(qū)中第二設(shè)備未讀取的數(shù)據(jù)報(bào)文的數(shù)量;
[0271] 描述符讀取單元1002b,用于根據(jù)第一隊(duì)列的讀指針和第二設(shè)備未讀取的數(shù)據(jù)報(bào) 文的數(shù)量,從第一隊(duì)列中依次讀取第二設(shè)備未讀取的數(shù)據(jù)報(bào)文的ro ;
[0272] 數(shù)據(jù)讀取單元1002c,用于在每讀取一次第二設(shè)備未讀取的數(shù)據(jù)報(bào)文的ro之后, 根據(jù)該數(shù)據(jù)報(bào)文的ro,從共享存儲(chǔ)區(qū)中讀取該數(shù)據(jù)報(bào)文。
[0273] 在本實(shí)施例的另一種實(shí)現(xiàn)方式中,如圖14b所示,數(shù)據(jù)讀取模塊1002可以包括:
[0274] 描述符讀取單元1002a,用于將第一隊(duì)列的寫指針與第一隊(duì)列的讀指針進(jìn)行比較, 確定共享存儲(chǔ)區(qū)中第二設(shè)備未讀取的數(shù)據(jù)報(bào)文的數(shù)量;
[0275] 數(shù)據(jù)讀取單元1002c,用于根據(jù)第一隊(duì)列的讀指針,從共享存儲(chǔ)區(qū)中依次讀取第二 設(shè)備未讀取的數(shù)據(jù)報(bào)文。
[0276] 本發(fā)明實(shí)施例通過從共享存儲(chǔ)區(qū)中獲取更新后的第一隊(duì)列的寫指針,并根據(jù)更新 后的寫指針和第一隊(duì)列的讀指針,依次從共享存儲(chǔ)區(qū)中讀取N個(gè)數(shù)據(jù)報(bào)文,N個(gè)數(shù)據(jù)報(bào)文基 于第一隊(duì)列傳輸,第一隊(duì)列為一個(gè)或多個(gè)隊(duì)列中的一個(gè),寫指針更新后的值等于寫指針更 新前的值加 N,N為正整數(shù)且N3 2,因此寫指針不是跟隨數(shù)據(jù)的發(fā)送而發(fā)送的,減少了寫指 針的發(fā)送,提高了帶寬利用率,并且降低了由于傳輸帶寬受限造成數(shù)據(jù)丟棄情況的發(fā)生,提 高了傳輸可靠性。另外,通過更新共享存儲(chǔ)區(qū)中的讀指針,讀指針更新后的值等于讀指針更 新前的值加 N,也減少了讀指針的發(fā)送,進(jìn)一步提高了帶寬利用率和傳輸可靠性。
[0277] 實(shí)施例i^一
[0278] 本發(fā)明實(shí)施例提供了一種基于隊(duì)列的數(shù)據(jù)傳輸裝置,適用于第一設(shè)備通過共享存 儲(chǔ)區(qū)向第二設(shè)備傳輸數(shù)據(jù),共享存儲(chǔ)區(qū)可以獨(dú)立于第一設(shè)備和第二設(shè)備,也可以屬于第一 設(shè)備或第二設(shè)備,共享存儲(chǔ)區(qū)中設(shè)有一個(gè)或多個(gè)隊(duì)列、以及與隊(duì)列一一對(duì)應(yīng)的寫指針和讀 指針的緩存區(qū),如圖15所示,該裝置110 -般包括發(fā)送器111、接收器112、至少一個(gè)存儲(chǔ)器 113、以及至少一個(gè)處理器114等部件。本領(lǐng)域技術(shù)人員可以理解,圖15中所示出的結(jié)構(gòu)并 不構(gòu)成對(duì)被裝置的限定,可以包括比圖示更多或更少的部件,或者組合某些部件,或者不同 的部件布置。
[0279] 下面結(jié)合圖15對(duì)裝置110的各個(gè)構(gòu)成部件進(jìn)行具體的介紹:
[0280] 至少一個(gè)存儲(chǔ)器113可用于存儲(chǔ)軟件程序以及應(yīng)用模塊,至少一個(gè)處理器114通 過運(yùn)行存儲(chǔ)在至少一個(gè)存儲(chǔ)器113的軟件程序以及應(yīng)用模塊,從而執(zhí)行裝置110的各種功 能應(yīng)用以及數(shù)據(jù)處理。至少一個(gè)存儲(chǔ)器113可主要包括存儲(chǔ)程序區(qū)和存儲(chǔ)數(shù)據(jù)區(qū),其中,存 儲(chǔ)程序區(qū)可存儲(chǔ)操作系統(tǒng)、至少一個(gè)功能所需的應(yīng)用程序(比如將加上第二設(shè)備未讀取的 第一報(bào)文的數(shù)量后的第一隊(duì)列的讀指針構(gòu)造為第四報(bào)文,并將第四報(bào)文寫入共享存儲(chǔ)區(qū)中 等)等;存儲(chǔ)數(shù)據(jù)區(qū)可存儲(chǔ)根據(jù)裝置110的處理所創(chuàng)建的數(shù)據(jù)(比如第四報(bào)文)等。此外, 至少一個(gè)存儲(chǔ)器113可以包括高速RAM (Random Access Memory,隨機(jī)存取存儲(chǔ)器),還可以 包括非易失性存儲(chǔ)器(non-volatile memory),例如至少一個(gè)磁盤存儲(chǔ)器件、閃存器件、或 其他易失性固態(tài)存儲(chǔ)器件。
[0281] 至少一個(gè)處理器114是裝置110的控制中心,利用各種接口和線路連接整個(gè)裝置 的各個(gè)部分,通過運(yùn)行或執(zhí)行存儲(chǔ)在至少一個(gè)存儲(chǔ)器113內(nèi)的軟件程序和/或應(yīng)用模塊,以 及調(diào)用存儲(chǔ)在至少一個(gè)存儲(chǔ)器113內(nèi)的數(shù)據(jù),執(zhí)行裝置110的各種功能和處理數(shù)據(jù),從而對(duì) 裝置進(jìn)行整體監(jiān)控。可選的,至少一個(gè)處理器114可包括一個(gè)或多個(gè)處理核心;優(yōu)選的,至 少一個(gè)處理器114可集成應(yīng)用處理器和調(diào)制解調(diào)處理器,其中,應(yīng)用處理器主要處理操作 系統(tǒng)、用戶界面和應(yīng)用程序等,調(diào)制解調(diào)處理器主要處理無線通信??梢岳斫獾氖牵鲜稣{(diào) 制解調(diào)處理器也可以不集成到至少一個(gè)處理器114中。
[0282] 在本實(shí)施例中,一個(gè)或者一個(gè)以上程序的程序存儲(chǔ)于至少一個(gè)存儲(chǔ)器113中,且 經(jīng)配置以由至少一個(gè)處理器114執(zhí)行,一個(gè)或者一個(gè)以上程序包含用于進(jìn)行以下操作的指 令:
[0283] 從共享存儲(chǔ)區(qū)中獲取更新后的第一隊(duì)列的寫指針,第一隊(duì)列為一個(gè)或多個(gè)隊(duì)列中 的一個(gè),寫指針更新后的值等于寫指針更新前的值加 N,N為正整數(shù)且N > 2 ;
[0284] 根據(jù)更新后的寫指針和第一隊(duì)列的讀指針,依次從共享存儲(chǔ)區(qū)中讀取N個(gè)數(shù)據(jù)報(bào) 文,N個(gè)數(shù)據(jù)報(bào)文基于第一隊(duì)列傳輸;
[0285] 更新共享存儲(chǔ)區(qū)中的讀指針,讀指針更新后的值等于讀指針更新前的值加 N。
[0286] 在本實(shí)施例的一種實(shí)現(xiàn)方式中,一個(gè)或者一個(gè)以上程序可以包含用于進(jìn)行以下操 作的指令:
[0287] 將第一隊(duì)列的寫指針與第一隊(duì)列的讀指針進(jìn)行比較,確定共享存儲(chǔ)區(qū)中第二設(shè)備 未讀取的數(shù)據(jù)報(bào)文的數(shù)量;
[0288] 根據(jù)第一隊(duì)列的讀指針和第二設(shè)備未讀取的數(shù)據(jù)報(bào)文的數(shù)量,從第一隊(duì)列中依次 讀取第二設(shè)備未讀取的數(shù)據(jù)報(bào)文的ro ;
[0289] 在每讀取一次第二設(shè)備未讀取的數(shù)據(jù)報(bào)文的ro之后,根據(jù)該數(shù)據(jù)報(bào)文的ro,從共 享存儲(chǔ)區(qū)中讀取該數(shù)據(jù)報(bào)文。
[0290] 在本實(shí)施例的另一種實(shí)現(xiàn)方式中,一個(gè)或者一個(gè)以上程序可以包含用于進(jìn)行以下 操作的指令:
[0291] 將第一隊(duì)列的寫指針與第一隊(duì)列的讀指針進(jìn)行比較,確定共享存儲(chǔ)區(qū)中第二設(shè)備 未讀取的數(shù)據(jù)報(bào)文的數(shù)量;
[0292] 根據(jù)第一隊(duì)列的讀指針,從共享存儲(chǔ)區(qū)中依次讀取第二設(shè)備未讀取的數(shù)據(jù)報(bào)文。
[0293] 本發(fā)明實(shí)施例通過從共享存儲(chǔ)區(qū)中獲取更新后的第一隊(duì)列的寫指針,并根據(jù)更新 后的寫指針和第一隊(duì)列的讀指針,依次從共享存儲(chǔ)區(qū)中讀取N個(gè)數(shù)據(jù)報(bào)文,N個(gè)數(shù)據(jù)報(bào)文基 于第一隊(duì)列傳輸,第一隊(duì)列為一個(gè)或多個(gè)隊(duì)列中的一個(gè),寫指針更新后的值等于寫指針更 新前的值加 N,N為正整數(shù)且N3 2,因此寫指針不是跟隨數(shù)據(jù)的發(fā)送而發(fā)送的,減少了寫指 針的發(fā)送,提高了帶寬利用率,并且降低了由于傳輸帶寬受限造成數(shù)據(jù)丟棄情況的發(fā)生,提 高了傳輸可靠性。另外,通過更新共享存儲(chǔ)區(qū)中的讀指針,讀指針更新后的值等于讀指針更 新前的值加 N,也減少了讀指針的發(fā)送,進(jìn)一步提高了帶寬利用率和傳輸可靠性。
[0294] 實(shí)施例十二
[0295] 本發(fā)明實(shí)施例提供了一種通信系統(tǒng),適用于第一設(shè)備通過共享存儲(chǔ)區(qū)向第二設(shè)備 傳輸數(shù)據(jù),共享存儲(chǔ)區(qū)可以獨(dú)立于第一設(shè)備和第二設(shè)備,也可以屬于第一設(shè)備或第二設(shè)備, 共享存儲(chǔ)區(qū)中設(shè)有一個(gè)或多個(gè)隊(duì)列、以及與隊(duì)列一一對(duì)應(yīng)的寫指針和讀指針的緩存區(qū),參 見圖16,該系統(tǒng)包括第一設(shè)備1201、第二設(shè)備1202、以及共享存儲(chǔ)區(qū)1203。
[0296] 在本實(shí)施例中,第一設(shè)備1201和第二設(shè)備1202分別與共享存儲(chǔ)區(qū)1203連接。第 一設(shè)備上設(shè)置有如實(shí)施例六、實(shí)施例七或?qū)嵤├颂峁┑幕陉?duì)列的數(shù)據(jù)傳輸裝置,第二 設(shè)備上設(shè)置有如實(shí)施例九、實(shí)施例十或?qū)嵤├惶峁┑幕陉?duì)列的數(shù)據(jù)傳輸裝置。
[0297] 本發(fā)明實(shí)施例通過將N個(gè)數(shù)據(jù)報(bào)文寫入共享存儲(chǔ)區(qū)中,并更新共享存儲(chǔ)區(qū)中的第 一隊(duì)列的寫指針,N為正整數(shù)且N > 2,N個(gè)數(shù)據(jù)報(bào)文基于第一隊(duì)列傳輸,寫指針更新后的值 等于寫指針更新前的值加 N,寫指針不需要跟隨數(shù)據(jù)的發(fā)送而發(fā)送,減少了寫指針的發(fā)送, 提高了帶寬利用率,并且降低了由于傳輸帶寬受限造成數(shù)據(jù)丟棄情況的發(fā)生,提高了傳輸 可靠性。
[0298] 需要說明的是:上述實(shí)施例提供的基于隊(duì)列的數(shù)據(jù)傳輸裝置在傳輸數(shù)據(jù)時(shí),僅以 上述各功能模塊的劃分進(jìn)行舉例說明,實(shí)際應(yīng)用中,可以根據(jù)需要而將上述功能分配由不 同的功能模塊完成,即將裝置的內(nèi)部結(jié)構(gòu)劃分成不同的功能模塊,以完成以上描述的全部 或者部分功能。另外,上述實(shí)施例提供的基于隊(duì)列的數(shù)據(jù)傳輸裝置與基于隊(duì)列的數(shù)據(jù)傳輸 方法實(shí)施例屬于同一構(gòu)思,其具體實(shí)現(xiàn)過程詳見方法實(shí)施例,這里不再贅述。
[0299] 上述本發(fā)明實(shí)施例序號(hào)僅僅為了描述,不代表實(shí)施例的優(yōu)劣。
[0300] 本領(lǐng)域普通技術(shù)人員可以理解實(shí)現(xiàn)上述實(shí)施例的全部或部分步驟可以通過硬件 來完成,也可以通過程序來指令相關(guān)的硬件完成,所述的程序可以存儲(chǔ)于一種計(jì)算機(jī)可讀 存儲(chǔ)介質(zhì)中,上述提到的存儲(chǔ)介質(zhì)可以是只讀存儲(chǔ)器,磁盤或光盤等。
[0301] 以上所述僅為本發(fā)明的較佳實(shí)施例,并不用以限制本發(fā)明,凡在本發(fā)明的精神和 原則之內(nèi),所作的任何修改、等同替換、改進(jìn)等,均應(yīng)包含在本發(fā)明的保護(hù)范圍之內(nèi)。
【權(quán)利要求】
1. 一種基于隊(duì)列的數(shù)據(jù)傳輸方法,適用于第一設(shè)備通過共享存儲(chǔ)區(qū)向第二設(shè)備傳輸數(shù) 據(jù),所述共享存儲(chǔ)區(qū)中設(shè)有一個(gè)或多個(gè)隊(duì)列、以及與所述隊(duì)列一一對(duì)應(yīng)的寫指針和讀指針 的緩存區(qū),其特征在于,所述方法包括: 當(dāng)?shù)谝魂?duì)列未滿時(shí),所述第一設(shè)備將N個(gè)數(shù)據(jù)報(bào)文寫入所述共享存儲(chǔ)區(qū)中,N為正整數(shù) 且N > 2,所述N個(gè)數(shù)據(jù)報(bào)文基于所述第一隊(duì)列傳輸,所述第一隊(duì)列為所述一個(gè)或多個(gè)隊(duì)列 中的一個(gè); 更新所述共享存儲(chǔ)區(qū)中的所述第一隊(duì)列的寫指針,所述寫指針更新后的值等于所述寫 指針更新前的值加 N。
2. 根據(jù)權(quán)利要求1所述的方法,其特征在于,所述方法還包括: 在所述更新所述共享存儲(chǔ)區(qū)中的所述第一隊(duì)列的寫指針之前,將所述N個(gè)數(shù)據(jù)報(bào)文的 存儲(chǔ)地址和長(zhǎng)度構(gòu)造為一個(gè)描述符報(bào)文,并將所述描述符報(bào)文寫入所述第一隊(duì)列。
3. 根據(jù)權(quán)利要求1所述的方法,其特征在于,所述方法還包括: 在每將一個(gè)所述數(shù)據(jù)報(bào)文寫入所述共享存儲(chǔ)區(qū)中之后,將所述一個(gè)數(shù)據(jù)報(bào)文的存儲(chǔ)地 址和長(zhǎng)度構(gòu)造為一個(gè)描述符報(bào)文,并將所述描述符報(bào)文寫入所述第一隊(duì)列。
4. 根據(jù)權(quán)利要求1所述的方法,其特征在于,所述第一設(shè)備將N個(gè)數(shù)據(jù)報(bào)文寫入所述共 享存儲(chǔ)區(qū)中,包括: 所述第一設(shè)備將所述N個(gè)數(shù)據(jù)報(bào)文連續(xù)寫入所述第一隊(duì)列。
5. 根據(jù)權(quán)利要求3或4所述的方法,其特征在于,所述更新所述共享存儲(chǔ)區(qū)中的所述第 一隊(duì)列的寫指針,包括: 當(dāng)所述將N個(gè)數(shù)據(jù)報(bào)文寫入所述共享存儲(chǔ)區(qū)后的預(yù)定時(shí)間內(nèi)沒有待發(fā)送的數(shù)據(jù)報(bào)文 時(shí),或者,當(dāng)所述N個(gè)數(shù)據(jù)報(bào)文后的數(shù)據(jù)報(bào)文基于非第一隊(duì)列傳輸時(shí),更新所述共享存儲(chǔ)區(qū) 中的所述第一隊(duì)列的寫指針。
6. 根據(jù)權(quán)利要求1-4任一項(xiàng)所述的方法,其特征在于,所述更新所述共享存儲(chǔ)區(qū)中的 所述第一隊(duì)列的寫指針,包括: 當(dāng)N達(dá)到設(shè)定值時(shí),或者,當(dāng)所述N個(gè)數(shù)據(jù)報(bào)文寫入所述共享存儲(chǔ)區(qū)的時(shí)間達(dá)到設(shè)定時(shí) 間時(shí),更新所述共享存儲(chǔ)區(qū)中的所述第一隊(duì)列的寫指針。
7. -種基于隊(duì)列的數(shù)據(jù)傳輸方法,適用于第二設(shè)備通過共享存儲(chǔ)區(qū)接收第一設(shè)備傳輸 的數(shù)據(jù),所述共享存儲(chǔ)區(qū)中設(shè)有一個(gè)或多個(gè)隊(duì)列、以及與所述隊(duì)列一一對(duì)應(yīng)的寫指針和讀 指針的緩存區(qū),其特征在于,所述方法包括: 所述第二設(shè)備從所述共享存儲(chǔ)區(qū)中獲取更新后的第一隊(duì)列的寫指針,所述第一隊(duì)列為 所述一個(gè)或多個(gè)隊(duì)列中的一個(gè),所述寫指針更新后的值等于所述寫指針更新前的值加 N,N 為正整數(shù)且N彡2 ; 根據(jù)更新后的所述寫指針和所述第一隊(duì)列的讀指針,依次從所述共享存儲(chǔ)區(qū)中讀取N 個(gè)數(shù)據(jù)報(bào)文,N個(gè)所述數(shù)據(jù)報(bào)文基于所述第一隊(duì)列傳輸; 更新所述共享存儲(chǔ)區(qū)中的所述讀指針,所述讀指針更新后的值等于所述讀指針更新前 的值加 N。
8. -種基于隊(duì)列的數(shù)據(jù)傳輸裝置,適用于第一設(shè)備通過共享存儲(chǔ)區(qū)向第二設(shè)備傳輸數(shù) 據(jù),所述共享存儲(chǔ)區(qū)中設(shè)有一個(gè)或多個(gè)隊(duì)列、以及與所述隊(duì)列一一對(duì)應(yīng)的寫指針和讀指針 的緩存區(qū),其特征在于,所述裝置包括: 數(shù)據(jù)寫入模塊,用于當(dāng)?shù)谝魂?duì)列未滿時(shí),將N個(gè)數(shù)據(jù)報(bào)文寫入所述共享存儲(chǔ)區(qū)中,NS 正整數(shù)且N > 2,所述N個(gè)數(shù)據(jù)報(bào)文基于所述第一隊(duì)列傳輸,所述第一隊(duì)列為所述一個(gè)或多 個(gè)隊(duì)列中的一個(gè); 寫指針更新模塊,用于更新所述共享存儲(chǔ)區(qū)中的所述第一隊(duì)列的寫指針,所述寫指針 更新后的值等于所述寫指針更新前的值加 N。
9. 根據(jù)權(quán)利要求8所述的裝置,其特征在于,所述裝置還包括: 描述符寫入模塊,用于在所述更新所述共享存儲(chǔ)區(qū)中的所述第一隊(duì)列的寫指針之前, 將所述N個(gè)數(shù)據(jù)報(bào)文的存儲(chǔ)地址和長(zhǎng)度構(gòu)造為一個(gè)描述符報(bào)文,并將所述描述符報(bào)文寫入 所述第一隊(duì)列。
10. 根據(jù)權(quán)利要求8所述的裝置,其特征在于,所述裝置還包括: 描述符寫入模塊,用于在每將一個(gè)所述數(shù)據(jù)報(bào)文寫入所述共享存儲(chǔ)區(qū)中之后,將所述 一個(gè)數(shù)據(jù)報(bào)文的存儲(chǔ)地址和長(zhǎng)度構(gòu)造為一個(gè)描述符報(bào)文,并將所述描述符報(bào)文寫入所述第 一隊(duì)列。
11. 根據(jù)權(quán)利要求8所述的裝置,其特征在于,所述數(shù)據(jù)寫入模塊用于, 將所述N個(gè)數(shù)據(jù)報(bào)文連續(xù)寫入所述第一隊(duì)列。
12. 根據(jù)權(quán)利要求10或11所述的裝置,其特征在于,所述寫指針更新模塊用于, 當(dāng)所述將N個(gè)數(shù)據(jù)報(bào)文寫入所述共享存儲(chǔ)區(qū)后的預(yù)定時(shí)間內(nèi)沒有待發(fā)送的數(shù)據(jù)報(bào)文 時(shí),或者,當(dāng)所述N個(gè)數(shù)據(jù)報(bào)文后的數(shù)據(jù)報(bào)文基于非第一隊(duì)列傳輸時(shí),更新所述共享存儲(chǔ)區(qū) 中的所述第一隊(duì)列的寫指針。
13. 根據(jù)權(quán)利要求8-11任一項(xiàng)所述的裝置,其特征在于,所述寫指針更新模塊用于, 當(dāng)N達(dá)到設(shè)定值時(shí),或者,當(dāng)所述N個(gè)數(shù)據(jù)報(bào)文寫入所述共享存儲(chǔ)區(qū)的時(shí)間達(dá)到設(shè)定時(shí) 間時(shí),更新所述共享存儲(chǔ)區(qū)中的所述第一隊(duì)列的寫指針。
14. 一種基于隊(duì)列的數(shù)據(jù)傳輸裝置,適用于第二設(shè)備通過共享存儲(chǔ)區(qū)接收第一設(shè)備傳 輸?shù)臄?shù)據(jù),所述共享存儲(chǔ)區(qū)中設(shè)有一個(gè)或多個(gè)隊(duì)列、以及與所述隊(duì)列一一對(duì)應(yīng)的寫指針和 讀指針的緩存區(qū),其特征在于,所述裝置包括: 寫指針獲取模塊,用于從所述共享存儲(chǔ)區(qū)中獲取更新后的第一隊(duì)列的寫指針,所述第 一隊(duì)列為所述一個(gè)或多個(gè)隊(duì)列中的一個(gè),所述寫指針更新后的值等于所述寫指針更新前的 值加 N,N為正整數(shù)且N彡2 ; 數(shù)據(jù)讀取模塊,用于根據(jù)更新后的所述寫指針和所述第一隊(duì)列的讀指針,依次從所述 共享存儲(chǔ)區(qū)中讀取N個(gè)數(shù)據(jù)報(bào)文,N個(gè)所述數(shù)據(jù)報(bào)文基于所述第一隊(duì)列傳輸; 讀指針更新模塊,用于更新所述共享存儲(chǔ)區(qū)中的所述讀指針,所述讀指針更新后的值 等于所述讀指針更新前的值加 N。
15. -種通信系統(tǒng),其特征在于,所述系統(tǒng)包括第一設(shè)備、第二設(shè)備、以及共享存儲(chǔ)區(qū), 所述第一設(shè)備和所述第二設(shè)備分別與所述共享存儲(chǔ)區(qū)連接,所述第一設(shè)備上設(shè)置有如權(quán)利 要求8-13任一項(xiàng)所述的基于隊(duì)列的數(shù)據(jù)傳輸裝置,所述第二設(shè)備上設(shè)置有如權(quán)利要求14 所述的基于隊(duì)列的數(shù)據(jù)傳輸裝置。
【文檔編號(hào)】H04L12/58GK104052831SQ201410256758
【公開日】2014年9月17日 申請(qǐng)日期:2014年6月11日 優(yōu)先權(quán)日:2014年6月11日
【發(fā)明者】劉全喜, 謝彬 申請(qǐng)人:華為技術(shù)有限公司