1. <rt id="e600n"></rt>
      1. <pre id="e600n"><strong id="e600n"><pre id="e600n"></pre></strong></pre>
      2. 岛国免费AV,无码人妻精品一区二区三区夜夜嗨,又大又粗又硬又爽黄毛少妇,精品国产AV二区,91视频最新网址,久操无码,久久无码人妻一区二区三区午夜,国产精品视频中文字幕

        電子設(shè)備及其DMA命令處理方法與流程

        文檔序號:16531714發(fā)布日期:2019-01-05 10:48閱讀:406來源:國知局
        技術(shù)簡介:
        本專利針對傳統(tǒng)CPU直接處理DMA命令導(dǎo)致負(fù)載過重、效率低的問題,提出采用DMA加速器替代CPU完成命令生成、存儲管理及結(jié)果反饋,通過流式接口與隊(duì)列機(jī)制實(shí)現(xiàn)數(shù)據(jù)高效傳輸,顯著降低CPU負(fù)擔(dān)并提升DMA處理速度。
        關(guān)鍵詞:DMA加速器,流式接口

        本申請涉及電子設(shè)備技術(shù)領(lǐng)域,尤其涉及一種電子設(shè)備中的直接存儲器訪問技術(shù)。



        背景技術(shù):

        在電子設(shè)備與外部設(shè)備之間可以進(jìn)行dma(directmemoryaccess,直接存儲器訪問)傳輸。如圖1所示,電子設(shè)備100與外部設(shè)備300之間進(jìn)行dma傳輸。電子設(shè)備100包括物理層(phy)模塊110、dma模塊120、存儲器130以及中央處理器(cpu)140。

        cpu140通過生成dma命令(或稱dma描述符,用于指示在電子設(shè)備100與外部設(shè)備300之間的一次或多次dma傳輸)并寫入存儲器130來指示dma模塊120進(jìn)行dma傳輸。并且,響應(yīng)于dma傳輸?shù)耐瓿桑琩ma模塊120將dma命令的執(zhí)行結(jié)果寫入存儲器130,從而使cpu140知曉dma命令處理完成,并獲得dma命令的執(zhí)行結(jié)果。

        外部設(shè)備300通過phy模塊110耦合到電子設(shè)備100。phy模塊110可以是用于處理pcie底層協(xié)議的pciephy模塊、用于處理fc底層協(xié)議的fcphy模塊或用于處理以太網(wǎng)底層協(xié)議的以太網(wǎng)phy模塊。dma模塊120通過phy模塊110在外部設(shè)備300與電子設(shè)備100之間維護(hù)dma傳輸。例如,dma模塊120從存儲器130獲取指示dma傳輸?shù)膁ma命令,然后依照dma命令發(fā)起dma傳輸。

        電子設(shè)備100還耦合到存儲器400。在dma傳輸中,在dma模塊120的控制下,將存儲器400的數(shù)據(jù)傳輸給外部設(shè)備300,或者將外部設(shè)備300提供的數(shù)據(jù)存儲到存儲器400。作為舉例,存儲器400是dram(動態(tài)隨機(jī)存取存儲器),同存儲器130相比,存儲器400具有更大的存儲容量。

        cpu在存儲器130中建立描述符表或描述符鏈接表,描述符表或鏈接表中包括一組描述符,每個描述符都描述了數(shù)據(jù)塊移動方向、源地址、目的地地址以及可選的傳輸?shù)淖止?jié)數(shù)。因此,在處理過程中,cpu不需要為要從某一源移動到某一目的地的每個數(shù)據(jù)塊對dma控制器進(jìn)行編程操作。

        但是,其中,cpu與dma模塊通過存儲器130交換dma命令時,cpu需要按dma模塊要求的格式和數(shù)據(jù)結(jié)構(gòu)提交dma命令,這增加了cpu的負(fù)擔(dān)。



        技術(shù)實(shí)現(xiàn)要素:

        本申請的目的在于提供電子設(shè)備及其直接存儲器訪問命令處理方法,用于減輕cpu的負(fù)擔(dān)并加快dma命令的處理速度。

        為達(dá)到上述目的,根據(jù)本申請的第一方面,提供了根據(jù)本申請第一方面的第一電子設(shè)備,其中,包括物理層模塊、直接存儲器訪問模塊、存儲器、直接存儲器訪問加速器以及中央處理器,物理層模塊與直接存儲器訪問模塊耦合,存儲器耦合到直接存儲器訪問模塊和直接存儲器訪問加速器,直接存儲器訪問加速器與中央處理器耦合;

        其中,直接存儲器訪問加速器將中央處理器提供的數(shù)據(jù)包轉(zhuǎn)換為直接存儲器訪問命令并寫入存儲器;以及獲取存儲器中的直接存儲器訪問命令的執(zhí)行結(jié)果;

        直接存儲器訪問模塊依據(jù)從存儲器獲取的直接存儲器訪問命令發(fā)起直接存儲器訪問傳輸,并將直接存儲器訪問命令的執(zhí)行結(jié)果寫入存儲器;

        電子設(shè)備通過物理層模塊同電子設(shè)備的外部設(shè)備通信。

        根據(jù)本申請的第一方面的第一電子設(shè)備,提供了根據(jù)本申請第一方面的第二電子設(shè)備,其中,直接存儲器訪問加速器設(shè)有用于中央處理器訪問的流式接口或先入先出接口。

        根據(jù)本申請的第一方面的第一電子設(shè)備,提供了根據(jù)本申請第一方面的第三電子設(shè)備,直接存儲器訪問加速器設(shè)有用于中央處理器訪問的流式寫入接口和流式讀出接口。

        根據(jù)本申請的第一方面的第一至第三電子設(shè)備之一,提供了根據(jù)本申請第一方面的第四電子設(shè)備,其中,直接存儲器訪問加速器包括直接存儲器訪問命令接收單元和第一處理單元;其中:

        直接存儲器訪問命令接收單元耦合到中央處理器和第一處理單元,直接存儲器訪問命令接收單元接收中央處理器提供的數(shù)據(jù)包;以及

        第一處理單元與存儲器耦合,第一處理單元從直接存儲器訪問命令接收單元獲取中央處理器提供的數(shù)據(jù)包,將數(shù)據(jù)包轉(zhuǎn)換為直接存儲器訪問命令,并寫入存儲器。

        根據(jù)本申請的第一方面的第一至第四電子設(shè)備之一,提供了根據(jù)本申請第一方面的第五電子設(shè)備,其中,直接存儲器訪問加速器包括直接存儲器訪問命令完成單元和第二處理單元;其中:

        第二處理單元與存儲器耦合,第二處理單元從存儲器獲取直接存儲器訪問命令執(zhí)行結(jié)果;以及

        直接存儲器訪問命令完成單元耦合到第二處理單元和中央處理器,直接存儲器訪問命令完成單元從第二處理單元獲取直接存儲器訪問命令的執(zhí)行結(jié)果,并向中央處理器提供直接存儲器訪問命令的執(zhí)行結(jié)果。

        根據(jù)本申請的第一方面的第四至第五電子設(shè)備,提供了根據(jù)本申請第一方面的第六電子設(shè)備,其中,直接存儲器訪問命令接收單元和/或直接存儲器訪問命令完成單元設(shè)有緩存區(qū)。

        根據(jù)本申請的第一方面的第一至第六電子設(shè)備之一,提供了根據(jù)本申請第一方面的第七電子設(shè)備,其中,存儲器存儲的多個直接存儲器訪問命令被組織為隊(duì)列,第一處理單元依據(jù)隊(duì)列的寫指針將直接存儲器訪問命令寫入存儲器。

        根據(jù)本申請的第一方面的第七電子設(shè)備,提供了根據(jù)本申請第一方面的第八電子設(shè)備,其中,第二處理單元依據(jù)隊(duì)列的讀指針從存儲器獲取直接存儲器訪問命令的執(zhí)行結(jié)果。

        根據(jù)本申請的第一方面的第八電子設(shè)備,提供了根據(jù)本申請第一方面的第九電子設(shè)備,其中,第二處理單元依據(jù)直接存儲器訪問命令的執(zhí)行結(jié)果被中央處理器接收而更新讀完成指針。

        根據(jù)本申請的第一方面的第九電子設(shè)備,提供了根據(jù)本申請第一方面的第十電子設(shè)備,其中,直接存儲器訪問加速器還包括指針管理器,指針管理器與第一處理單元和第二處理單元耦合,第一處理單元從指針管理器獲取寫指針,第二處理單元從指針管理器獲取讀指針和向指針管理器更新讀完成指針。

        根據(jù)本申請的第一方面的第九電子設(shè)備,提供了根據(jù)本申請第一方面的第十一電子設(shè)備,其中,第一處理單元與第二處理單元耦合,第一處理單元從第二處理單元獲取讀完成指針。

        根據(jù)本申請的第一方面的第九電子設(shè)備,提供了根據(jù)本申請第一方面的第十二電子設(shè)備,其中,第二處理單元向存儲器寫入讀完成指針,并且第一處理單元從存儲器獲取讀完成指針。

        根據(jù)本申請的第一方面的第一至第六電子設(shè)備之一,提供了根據(jù)本申請第一方面的第十三電子設(shè)備,其中,存儲器中存儲的多個直接存儲器訪問命令被組織為鏈表、線性表或數(shù)組。

        根據(jù)本申請的第一方面的第一至第十三電子設(shè)備之一,提供了根據(jù)本申請第一方面的第十四電子設(shè)備,其中,直接存儲器訪問命令指示直接存儲器訪問模塊在多個數(shù)據(jù)幀中傳輸數(shù)據(jù)包指示的待傳輸數(shù)據(jù)。

        根據(jù)本申請的第一方面的第十四電子設(shè)備,提供了根據(jù)本申請第一方面的第十五電子設(shè)備,其中,數(shù)據(jù)幀的大小是512字節(jié)。

        根據(jù)本申請的第一方面的第十四電子設(shè)備,提供了根據(jù)本申請第一方面的第十六電子設(shè)備,其中,數(shù)據(jù)幀的大小是用高級加密標(biāo)準(zhǔn)加密的數(shù)據(jù)塊大小。

        根據(jù)本申請的第一方面的第十四電子設(shè)備,提供了根據(jù)本申請第一方面的第十七電子設(shè)備,其中,數(shù)據(jù)幀的大小是用循環(huán)冗余校驗(yàn)碼校驗(yàn)的數(shù)據(jù)塊的大小。

        根據(jù)本申請的第一方面的第一至十七電子設(shè)備之一,提供了根據(jù)本申請第一方面的第十八電子設(shè)備,其中,直接存儲器訪問加速器與中央處理器之間通過多個相互獨(dú)立的流進(jìn)行數(shù)據(jù)傳輸。

        根據(jù)本申請的第一方面的第一至十七電子設(shè)備之一,提供了根據(jù)本申請第一方面的第十九電子設(shè)備,其中,數(shù)據(jù)包指示標(biāo)識符,直接存儲器訪問加速器依據(jù)標(biāo)識符確定直接存儲器訪問命令在存儲器中的存儲地址。

        根據(jù)本申請的第一方面的第二至十七電子設(shè)備之一,提供了根據(jù)本申請第一方面的第二十電子設(shè)備,其中,直接存儲器訪問加速器包括一個或多個流式接口或先入先出接口,直接存儲器訪問加速器依據(jù)接收數(shù)據(jù)包的流式接口或先入先出接口,確定直接存儲器訪問命令在存儲器中的存儲地址。

        根據(jù)本申請的第二方面,提供了根據(jù)本申請第二方面的第一直接存儲器訪問命令處理方法,包括如下步驟:

        接收數(shù)據(jù)包;

        將數(shù)據(jù)包轉(zhuǎn)換為直接存儲器訪問命令,并寫入存儲器;

        響應(yīng)于存儲器中的直接存儲器訪問命令的執(zhí)行結(jié)果被更新,獲取被更新的直接存儲器訪問命令的執(zhí)行結(jié)果。

        根據(jù)本申請的第二方面的第一直接存儲器訪問命令處理方法,提供了根據(jù)本申請第二方面的第二直接存儲器訪問命令處理方法,其中,包括:通過流式接口進(jìn)行數(shù)據(jù)傳輸。

        根據(jù)本申請的第二方面的第二直接存儲器訪問命令處理方法,提供了根據(jù)本申請第二方面的第三直接存儲器訪問命令處理方法其中,包括:

        提供流式接口的狀態(tài)標(biāo)記;

        若流式接口的狀態(tài)標(biāo)記為可用狀態(tài)標(biāo)記,從流式接口接收數(shù)據(jù)包或向流式接口寫入直接存儲器訪問命令的執(zhí)行結(jié)果。

        根據(jù)本申請的第二方面的第一直接存儲器訪問命令處理方法,提供了根據(jù)本申請第二方面的第四直接存儲器訪問命令處理方法其中,包括:通過先入先出接口進(jìn)行數(shù)據(jù)傳輸。

        根據(jù)本申請的第二方面的第四直接存儲器訪問命令處理方法,提供了根據(jù)本申請第二方面的第五直接存儲器訪問命令處理方法其中,包括:

        提供先入先出接口的狀態(tài);

        若先入先出接口內(nèi)的先入先出隊(duì)列未滿,則從先入先出接口接收數(shù)據(jù)包。

        根據(jù)本申請的第二方面的第四直接存儲器訪問命令處理方法,提供了根據(jù)本申請第二方面的第六直接存儲器訪問命令處理方法其中,包括:

        提供先入先出接口的狀態(tài);

        若先入先出接口內(nèi)的先入先出隊(duì)列為非空,則向先入先出接口寫入直接存儲器訪問命令的執(zhí)行結(jié)果。

        根據(jù)本申請的第二方面的第一至第六直接存儲器訪問命令處理方法之一,提供了根據(jù)本申請第二方面的第七直接存儲器訪問命令處理方法其中,包括:

        依據(jù)寫指針將直接存儲器訪問命令寫入存儲器;

        更新寫指針,并將更新后的寫指針寫入存儲器;

        獲取讀完成指針;

        其中,寫指針指向存儲器中存儲直接存儲器訪問命令的隊(duì)列的隊(duì)尾,讀完成指針指向存儲器中存儲直接存儲器訪問命令的隊(duì)列的隊(duì)頭;

        其中,依據(jù)讀完成指針落后于寫指針,確定存儲器中存儲直接存儲器訪問命令的隊(duì)列未滿;僅在存儲器中的隊(duì)列未滿時,將直接存儲器訪問命令寫入存儲器。

        根據(jù)本申請的第二方面的第七直接存儲器訪問命令處理方法,提供了根據(jù)本申請第二方面的第八直接存儲器訪問命令處理方法其中,直接存儲器訪問模塊從存儲器中的隊(duì)列的隊(duì)頭獲取直接存儲器訪問命令;

        響應(yīng)于直接存儲器訪問命令被完成,直接存儲器訪問模塊將直接存儲器訪問命令的執(zhí)行結(jié)果寫入存儲器,更新存儲器中的讀指針。

        根據(jù)本申請的第二方面的第七直接存儲器訪問命令處理方法,提供了根據(jù)本申請第二方面的第九直接存儲器訪問命令處理方法其中,響應(yīng)于讀指針超前于讀完成指針,依據(jù)讀完成指針從存儲器獲取直接存儲器訪問命令的執(zhí)行結(jié)果;

        更新讀完成指針;

        其中,響應(yīng)于直接存儲器訪問命令的執(zhí)行結(jié)果被寫入存儲器而更新讀指針。

        根據(jù)本申請的第二方面的第七直接存儲器訪問命令處理方法,提供了根據(jù)本申請第二方面的第十直接存儲器訪問命令處理方法其中,包括:

        響應(yīng)于讀指針與讀完成指針不同,從存儲器獲取直接存儲器訪問命令的執(zhí)行結(jié)果。

        根據(jù)本申請的第二方面的第七至第十直接存儲器訪問命令處理方法之一,提供了根據(jù)本申請第二方面的第十一直接存儲器訪問命令處理方法其中,還包括:將讀完成指針寫入存儲器。

        根據(jù)本申請的第二方面的第一至第十一直接存儲器訪問命令處理方法之一,提供了根據(jù)本申請第二方面的第十二直接存儲器訪問命令處理方法其中,通過多個相互獨(dú)立的流進(jìn)行數(shù)據(jù)傳輸,并且每個流與存儲器中的隊(duì)列一一對應(yīng)。

        根據(jù)本申請的第二方面的第十二直接存儲器訪問命令處理方法,提供了根據(jù)本申請第二方面的第十三直接存儲器訪問命令處理方法其中,還包括:

        提供每個流的狀態(tài)標(biāo)記;

        若流的狀態(tài)標(biāo)記為可用狀態(tài)標(biāo)記,通過流接收數(shù)據(jù)包;

        依據(jù)數(shù)據(jù)包所指示的流將直接存儲器訪問命令寫入存儲器中與數(shù)據(jù)包所指示的流相應(yīng)的隊(duì)列;

        通過被完成的直接存儲器訪問命令所在的隊(duì)列對應(yīng)的流,將直接存儲器訪問命令的執(zhí)行結(jié)果提供給中央處理器。

        根據(jù)本申請的第二方面的第一至十一直接存儲器訪問命令處理方法之一,提供了根據(jù)本申請第二方面的第十四直接存儲器訪問命令處理方法其中,通過多個相互獨(dú)立的流和多個流式接口進(jìn)行數(shù)據(jù)傳輸;流與流式接口一一對應(yīng);

        直接存儲器訪問命令處理方法包括:

        依據(jù)接收數(shù)據(jù)包的流式接口識別數(shù)據(jù)包所屬的流;

        向與被完成的直接存儲器訪問命令所在的流對應(yīng)的流式接口寫入直接存儲器訪問命令的執(zhí)行結(jié)果。

        根據(jù)本申請的第二方面的第一至十四直接存儲器訪問命令處理方法,提供了根據(jù)本申請第二方面的第十五直接存儲器訪問命令處理方法其中,直接存儲器訪問命令指示直接存儲器訪問模塊在多個數(shù)據(jù)幀中傳輸數(shù)據(jù)包指示的待傳輸數(shù)據(jù)。

        根據(jù)本申請的第二方面的第十五直接存儲器訪問命令處理方法,提供了根據(jù)本申請第二方面的第十六直接存儲器訪問命令處理方法其中,數(shù)據(jù)幀的大小是用高級加密標(biāo)準(zhǔn)加密的數(shù)據(jù)塊大小。

        根據(jù)本申請的第二方面的第十五直接存儲器訪問命令處理方法,提供了根據(jù)本申請第二方面的第十七直接存儲器訪問命令處理方法其中,數(shù)據(jù)幀的大小是用循環(huán)冗余校驗(yàn)碼校驗(yàn)的數(shù)據(jù)塊的大小。

        根據(jù)本申請的第三方面,提供了根據(jù)本申請第三方面的通過隊(duì)列交換信息的第一方法,包括:

        第一生產(chǎn)者將第一消息寫入隊(duì)列;

        第一消費(fèi)者從隊(duì)列獲取第一消息;

        第一消費(fèi)者將第一消息的處理結(jié)果寫入隊(duì)列內(nèi)的第一消息;其中,第一消息的處理結(jié)果形成第二消息;

        第二消費(fèi)者從隊(duì)列獲取第二消息。

        根據(jù)本申請的第三方面的通過隊(duì)列交換信息的第一方法,提供了根據(jù)本申請第三方面的通過隊(duì)列交換信息的第二方法,其中,第一生產(chǎn)者依據(jù)隊(duì)列的寫指針將第一消息寫入隊(duì)列;

        第一消費(fèi)者依據(jù)隊(duì)列的讀指針從隊(duì)列獲取第一消息;

        第一消費(fèi)者依據(jù)讀指針將第二消息寫入隊(duì)列。

        根據(jù)本申請的第三方面的通過隊(duì)列交換信息的第一方法,提供了根據(jù)本申請第三方面的通過隊(duì)列交換信息的第三方法,其中,第一生產(chǎn)者依據(jù)隊(duì)列的寫指針將第一消息寫入隊(duì)列;

        第一消費(fèi)者依據(jù)隊(duì)列的讀指針從隊(duì)列獲取第一消息;

        第一消費(fèi)者記錄第一消息在隊(duì)列中的位置,并依據(jù)所記錄的位置將第二消息寫入隊(duì)列。

        根據(jù)本申請的第三方面的通過隊(duì)列交換信息的第一至第三方法之一,提供了根據(jù)本申請第三方面的通過隊(duì)列交換信息的第四方法,其中,第二消費(fèi)者依據(jù)隊(duì)列的讀完成指針從隊(duì)列獲取第二消息。

        根據(jù)本申請的第三方面的通過隊(duì)列交換信息的第二至第四方法之一,提供了根據(jù)本申請第三方面的通過隊(duì)列交換信息的第四方法,其中,包括:

        響應(yīng)于第一消息被寫入隊(duì)列,更新寫指針;

        響應(yīng)于第二消息被寫入隊(duì)列,更新讀指針。

        根據(jù)本申請的第三方面的通過隊(duì)列交換信息的第四方法,提供了根據(jù)本申請第三方面的通過隊(duì)列交換信息的第六方法,其中,包括:響應(yīng)于第二消費(fèi)者從隊(duì)列獲取第二消息,更新讀完成指針。

        根據(jù)本申請的第三方面的通過隊(duì)列交換信息的第四方法,提供了根據(jù)本申請第三方面的通過隊(duì)列交換信息的第七方法,其中,包括:將讀完成指針寫入存儲器,第一生產(chǎn)者從存儲器獲取讀完成指針。

        根據(jù)本申請的第三方面的通過隊(duì)列交換信息的第四方法,提供了根據(jù)本申請第三方面的通過隊(duì)列交換信息的第八方法,其中,包括:第二消費(fèi)者將讀完成指針提供給第一生產(chǎn)者。

        根據(jù)本申請的第三方面的通過隊(duì)列交換信息的第二或第三方法,提供了根據(jù)本申請第三方面的通過隊(duì)列交換信息的第九方法,其中,包括:

        第一生產(chǎn)者將寫指針提供給第一消費(fèi)者;

        第一消費(fèi)者將讀指針提供給第二消費(fèi)者。

        根據(jù)本申請的第三方面的通過隊(duì)列交換信息的第一至第九方法之一,提供了根據(jù)本申請第三方面的通過隊(duì)列交換信息的第十方法,其中,寫指針包括回繞標(biāo)記或發(fā)生回繞的次數(shù)信息。

        根據(jù)本申請的第三方面的通過隊(duì)列交換信息的第四至第九方法之一,提供了根據(jù)本申請第三方面的通過隊(duì)列交換信息的第十一方法,其中,響應(yīng)于讀完成指針和讀指針指向相同的地址,第二消費(fèi)者暫停從隊(duì)列中獲取第二消息。

        根據(jù)本申請的第三方面的通過隊(duì)列交換信息的第四至第十一方法之一,提供了根據(jù)本申請第三方面的通過隊(duì)列交換信息的第十二方法,其中,響應(yīng)于讀完成指針超前于寫指針,第一生產(chǎn)者暫停向隊(duì)列寫入第一消息。

        根據(jù)本申請的第三方面的通過隊(duì)列交換信息的第四至第十二方法之一,提供了根據(jù)本申請第三方面的通過隊(duì)列交換信息的第十三方法,其中,讀完成指針指向隊(duì)列的隊(duì)頭;寫指針指向隊(duì)列的隊(duì)尾。

        根據(jù)本申請的第三方面的通過隊(duì)列交換信息的第一至第十三方法之一,提供了根據(jù)本申請第三方面的通過隊(duì)列交換信息的第十四方法,其中,在存儲器中提供隊(duì)列。

        根據(jù)本申請的第三方面的通過隊(duì)列交換信息的第一至第十四方法之一,提供了根據(jù)本申請第三方面的通過隊(duì)列交換信息的第十五方法,其中,第一生產(chǎn)者與第二消費(fèi)者是直接存儲器訪問加速器;

        第一消費(fèi)者是直接存儲器訪問處理模塊;

        第一消息是直接存儲器訪問命令,第二消息是直接存儲器訪問命令的處理結(jié)果。

        根據(jù)本申請的第三方面的通過隊(duì)列交換信息的第十四方法,提供了根據(jù)本申請第三方面的通過隊(duì)列交換信息的第十六方法,其中,存儲器包括多個相互獨(dú)立的隊(duì)列,第一生產(chǎn)者、第一消費(fèi)者和第二消費(fèi)者通過多個隊(duì)列交換信息。

        根據(jù)本申請的第四方面,提供了根據(jù)本申請第四方面的第一處理隊(duì)列的系統(tǒng),包括:

        第一生產(chǎn)者,將第一消息寫入隊(duì)列;

        第一消費(fèi)者,從隊(duì)列獲取第一消息;并且將第一消息的處理結(jié)果寫入隊(duì)列內(nèi)的第一消息;其中,第一消息的處理結(jié)果形成第二消息;

        第二消費(fèi)者,從隊(duì)列獲取第二消息。

        根據(jù)本申請的第四方面的第一處理隊(duì)列的系統(tǒng),提供了根據(jù)本申請第四方面的第二處理隊(duì)列的系統(tǒng),其中,隊(duì)列包括:

        寫指針,指示向隊(duì)列寫入消息的地址;

        讀指針,指示第一消費(fèi)者從隊(duì)列讀出消息的地址。

        根據(jù)本申請的第四方面的第二處理隊(duì)列的系統(tǒng),提供了根據(jù)本申請第四方面的第三處理隊(duì)列的系統(tǒng),其中,第一生產(chǎn)者依據(jù)隊(duì)列的寫指針將第一消息寫入隊(duì)列;

        第一消費(fèi)者依據(jù)隊(duì)列的讀指針從隊(duì)列獲取第一消息;

        第一消費(fèi)者依據(jù)讀指針將第二消息寫入隊(duì)列。

        根據(jù)本申請的第四方面的第二處理隊(duì)列的系統(tǒng),提供了根據(jù)本申請第四方面的第四處理隊(duì)列的系統(tǒng),其中,第一生產(chǎn)者依據(jù)隊(duì)列的寫指針將第一消息寫入隊(duì)列;

        第一消費(fèi)者依據(jù)隊(duì)列的讀指針從隊(duì)列獲取第一消息;

        第一消費(fèi)者記錄第一消息在隊(duì)列中的位置,并依據(jù)所記錄的位置將第二消息寫入隊(duì)列。

        根據(jù)本申請的第四方面的第一至第四處理隊(duì)列的系統(tǒng)之一,提供了根據(jù)本申請第四方面的第五處理隊(duì)列的系統(tǒng),其中,隊(duì)列還包括讀完成指針,指示第二消費(fèi)者從隊(duì)列讀出消息的地址。

        根據(jù)本申請的第四方面的第五處理隊(duì)列的系統(tǒng),提供了根據(jù)本申請第四方面的第六處理隊(duì)列的系統(tǒng),其中,第二消費(fèi)者依據(jù)隊(duì)列的讀完成指針從隊(duì)列獲取第二消息。

        根據(jù)本申請的第四方面的第二至第六處理隊(duì)列的系統(tǒng)之一,提供了根據(jù)本申請第四方面的第七處理隊(duì)列的系統(tǒng),其中,響應(yīng)于第一消息被寫入隊(duì)列,更新寫指針;

        響應(yīng)于第二消息被寫入隊(duì)列,更新讀指針。

        根據(jù)本申請的第四方面的第五至第七處理隊(duì)列的系統(tǒng)之一,提供了根據(jù)本申請第四方面的第八處理隊(duì)列的系統(tǒng),其中,響應(yīng)于第二消費(fèi)者從隊(duì)列獲取第二消息,更新讀完成指針。

        根據(jù)本申請的第四方面的第五處理隊(duì)列的系統(tǒng),提供了根據(jù)本申請第四方面的第九處理隊(duì)列的系統(tǒng),其中,還包括存儲器,讀完成指針被寫入存儲器,第一生產(chǎn)者從存儲器獲取讀完成指針。

        根據(jù)本申請的第四方面的第五處理隊(duì)列的系統(tǒng),提供了根據(jù)本申請第四方面的第十處理隊(duì)列的系統(tǒng),其中,第二消費(fèi)者將讀完成指針提供給第一生產(chǎn)者。

        根據(jù)本申請的第四方面的第三或第四處理隊(duì)列的系統(tǒng),提供了根據(jù)本申請第四方面的第十一處理隊(duì)列的系統(tǒng),其中,第一生產(chǎn)者將寫指針提供給第一消費(fèi)者;

        第一消費(fèi)者將讀指針提供給第二消費(fèi)者。

        根據(jù)本申請的第四方面的第一至第十一處理隊(duì)列的系統(tǒng),提供了根據(jù)本申請第四方面的第十二處理隊(duì)列的系統(tǒng),其中,寫指針包括回繞標(biāo)記或發(fā)生回繞的次數(shù)信息。

        根據(jù)本申請的第四方面的第五至第十二處理隊(duì)列的系統(tǒng),提供了根據(jù)本申請第四方面的第十三處理隊(duì)列的系統(tǒng),其中,響應(yīng)于讀完成指針和讀指針指向相同的地址,第二消費(fèi)者暫停從隊(duì)列中獲取第二消息。

        根據(jù)本申請的第四方面的第五至第十三處理隊(duì)列的系統(tǒng),提供了根據(jù)本申請第四方面的第十四處理隊(duì)列的系統(tǒng),其中,響應(yīng)于讀完成指針超前于寫指針,第一生產(chǎn)者暫停向隊(duì)列寫入第一消息。

        根據(jù)本申請的第四方面的第五至第十四處理隊(duì)列的系統(tǒng),提供了根據(jù)本申請第四方面的第十五處理隊(duì)列的系統(tǒng),其中,讀完成指針指向隊(duì)列的隊(duì)頭;寫指針指向隊(duì)列的隊(duì)尾。

        根據(jù)本申請的第四方面的第一至第十五處理隊(duì)列的系統(tǒng),提供了根據(jù)本申請第四方面的第十六處理隊(duì)列的系統(tǒng),其中,在存儲器中提供隊(duì)列。

        根據(jù)本申請的第四方面的第一至第十六處理隊(duì)列的系統(tǒng),提供了根據(jù)本申請第四方面的第十七處理隊(duì)列的系統(tǒng),其中,第一生產(chǎn)者與第二消費(fèi)者是直接存儲器訪問加速器;

        第一消費(fèi)者是直接存儲器訪問處理模塊;

        第一消息是直接存儲器訪問命令,第二消息是直接存儲器訪問命令的處理結(jié)果。

        根據(jù)本申請的第四方面的第一至第十七處理隊(duì)列的系統(tǒng),提供了根據(jù)本申請第四方面的第十八處理隊(duì)列的系統(tǒng),其中,存儲器包括多個相互獨(dú)立的隊(duì)列,第一生產(chǎn)者、第一消費(fèi)者和第二消費(fèi)者通過多個隊(duì)列交換信息。

        本申請的技術(shù)方案獲得的有益效果如下:

        (1)本申請的dma加速器替代cpu與存儲器進(jìn)行交互,替代cpu生成符合dma模塊所需的格式、傳輸長度等要求的dma命令,并替代cpu維護(hù)存儲器中dma命令的數(shù)據(jù)結(jié)構(gòu),將dma命令寫入存儲器,并監(jiān)視存儲器中dma命令的狀態(tài)更新,以及將dma命令的執(zhí)行結(jié)果提供給cpu,大大減輕了cpu的負(fù)載,加快了dma命令的處理速度。

        (2)本申請通過使用流式接口,cpu將數(shù)據(jù)寫入到流,無須關(guān)心數(shù)據(jù)的存儲地址和數(shù)據(jù)結(jié)構(gòu),從而減輕了cpu的負(fù)載;在讀出數(shù)據(jù)時,cpu通過使用流式接口從流中獲取數(shù)據(jù),無須關(guān)心數(shù)據(jù)的存儲地址和數(shù)據(jù)結(jié)構(gòu);盡管流式接口提供了可訪問地址,但是該可訪問地址為單一地址或指定地址,cpu無須處理地址的更新,也無須進(jìn)行內(nèi)存管理。

        (3)本申請通過對存儲器中隊(duì)列的維護(hù),使得dma加速器的第一處理單元和dma模塊形成隊(duì)列的一對生產(chǎn)者與消費(fèi)者,dma模塊和dma加速器的第二處理單元形成隊(duì)列的另一對生產(chǎn)者與消費(fèi)者,單一隊(duì)列既用于dma加速器向dma模塊提交dma命令,也用于dma模塊向dma加速器提交dma命令的執(zhí)行結(jié)果,降低了對存儲器的存儲空間的需求。

        附圖說明

        為了更清楚地說明本申請實(shí)施例或現(xiàn)有技術(shù)中的技術(shù)方案,下面將對實(shí)施例描述中所需要使用的附圖作簡單地介紹,顯而易見地,下面描述中的附圖僅僅是本申請的一些實(shí)施例,對于本領(lǐng)域普通技術(shù)人員來講,在不付出創(chuàng)造性勞動的前提下,還可以根據(jù)這些附圖獲得其他的附圖。

        圖1為現(xiàn)有技術(shù)的dma傳輸?shù)南到y(tǒng)結(jié)構(gòu)圖;

        圖2為根據(jù)本申請實(shí)施例的dma傳輸?shù)南到y(tǒng)結(jié)構(gòu)圖;

        圖3為根據(jù)本申請實(shí)施例的直接存儲器訪問加速器提供的流式寫入接口的示意圖;

        圖4為根據(jù)本申請實(shí)施例的直接存儲器訪問加速器提供的流式讀出接口的示意圖;

        圖5為本申請實(shí)施例一提供的直接存儲器訪問加速器的結(jié)構(gòu)圖;

        圖6到圖10為根據(jù)本申請實(shí)施例一提供的單一隊(duì)列的指針示意圖;

        圖11為本申請實(shí)施例二提供的直接存儲器訪問加速器的結(jié)構(gòu)圖;

        圖12為本申請實(shí)施例三提供的直接存儲器訪問命令處理方法的流程圖;以及

        圖13為本申請實(shí)施例的cpu通過直接存儲器訪問加速器執(zhí)行直接存儲器訪問操作的流程圖。

        具體實(shí)施方式

        下面將結(jié)合本申請實(shí)施例中的附圖,對本申請實(shí)施例中的技術(shù)方案進(jìn)行清楚、完整地描述,顯然,所描述的實(shí)施例是本申請一部分實(shí)施例,而不是全部的實(shí)施例?;诒旧暾堉械膶?shí)施例,本領(lǐng)域普通技術(shù)人員在沒有做出創(chuàng)造性勞動前提下所獲得的所有其他實(shí)施例,都屬于本申請保護(hù)的范圍。

        圖2為根據(jù)本申請實(shí)施例的dma傳輸?shù)南到y(tǒng)結(jié)構(gòu)圖。如圖2所示,電子設(shè)備200包括物理層模塊(phy模塊)210、直接存儲器訪問模塊(dma模塊)220、存儲器230、直接存儲器訪問加速器(dma加速器)240以及中央處理器(cpu)250。phy模塊210與dma模塊220耦合,存儲器230耦合到dma模塊220和dma加速器240,dma加速器240與cpu250耦合。

        dma加速器240將cpu250提供的數(shù)據(jù)包轉(zhuǎn)換為dma命令并寫入存儲器230,并獲取存儲器230中的dma命令的執(zhí)行結(jié)果。其中,dma命令指示dma模塊220在多個數(shù)據(jù)幀中傳輸由數(shù)據(jù)包指示的待傳輸數(shù)據(jù)。

        具體地,dma加速器240替代cpu250生成符合dma模塊220所需的格式、傳輸長度等要求的dma命令。作為一個實(shí)施例,cpu250接口的數(shù)據(jù)總線寬度是32比特,要向外部設(shè)備300傳輸4kb的數(shù)據(jù),并且數(shù)據(jù)幀的大小是用高級加密標(biāo)準(zhǔn)(aes)加密的數(shù)據(jù)塊大小。dma模塊220接受的dma命令為16或32字節(jié),aes加密支持的數(shù)據(jù)塊長度為512字節(jié)。因此,dma加速器240依據(jù)接收的來自cpu250的多個32比特數(shù)據(jù)生成dma命令,dma命令中指示8筆512字節(jié)的dma傳輸,以符合aes加密的要求。作為另一個實(shí)施例,數(shù)據(jù)幀的大小也可以是用循環(huán)冗余校驗(yàn)碼校驗(yàn)的數(shù)據(jù)塊的大小。

        dma加速器240替代cpu250維護(hù)存儲器230中存儲的dma命令的數(shù)據(jù)結(jié)構(gòu),將dma命令寫入存儲器230,并監(jiān)視存儲器230中dma命令的狀態(tài)更新,并將dma命令的執(zhí)行結(jié)果提供給cpu250。

        dma模塊220通過phy模塊210在外部設(shè)備300與電子設(shè)備200之間維護(hù)dma傳輸。例如,dma模塊220從存儲器230獲取指示dma傳輸?shù)膁ma命令,然后依照dma命令與外部設(shè)備300發(fā)起dma傳輸,并將dma命令的執(zhí)行結(jié)果寫入存儲器230。

        電子設(shè)備200通過phy模塊210同電子設(shè)備的外部設(shè)備(如外部設(shè)備300)進(jìn)行dma傳輸。phy模塊210可以是用于處理pcie底層協(xié)議的pciephy模塊、用于處理fc底層協(xié)議的fcphy模塊或用于處理以太網(wǎng)底層協(xié)議的以太網(wǎng)phy模塊。

        電子設(shè)備200還耦合到存儲器400。在dma傳輸中,在dma模塊220的控制下,將存儲器400的數(shù)據(jù)傳輸給外部設(shè)備300,或者將外部設(shè)備300提供的數(shù)據(jù)存儲到存儲器400。作為一個實(shí)施例,存儲器400是dram(動態(tài)隨機(jī)存取存儲器),同存儲器230相比,存儲器400具有更大的存儲容量。

        作為一個實(shí)施例,dma加速器設(shè)有用于cpu訪問的流式接口。圖3為根據(jù)本申請實(shí)施例的dma加速器的流式寫入接口的示意圖;圖4為根據(jù)本申請實(shí)施例的dma加速器的流式讀出接口的示意圖。

        如圖3所示,dma加速器提供了具有可訪問地址的流式寫入接口和指示流式接口是否可用的狀態(tài)標(biāo)記。cpu通過可用狀態(tài)標(biāo)記識別出流式寫入接口可用時,將與dma命令相關(guān)的數(shù)據(jù)按指定寬度(例如32比特)寫入流式寫入接口。

        作為一個示例,cpu通過如下的代碼段使用dma加速器提供的流式寫入接口提供數(shù)據(jù)。變量stream指示從流式寫入接口的可用狀態(tài)標(biāo)記獲取的流式寫入接口的狀態(tài),在其指示流式寫入接口可用時,通過dma_write(cmd)過程將dma命令數(shù)據(jù)(由變量cmd指示)寫入流式接口的可訪問地址。若dma命令數(shù)據(jù)cmd較大,cpu通過執(zhí)行程序?qū)⑵洳鸱譃槎鄠€32比特的數(shù)據(jù)提供給流式寫入接口。

        if(stream?。絝ull)

        dma_write(cmd)

        如圖4所示,讀出接口是流式讀出接口。cpu訪問流式讀出接口提供的可用狀態(tài)標(biāo)記,當(dāng)流式讀出接口可用時,指示存在可讀出的數(shù)據(jù)。相應(yīng)地,cpu從流式讀出接口提供的可訪問地址讀出數(shù)據(jù)(指示dma命令的執(zhí)行結(jié)果)。

        作為一個示例,cpu通過如下的代碼段使用dma加速器提供的流式讀出接口獲取數(shù)據(jù)。變量stream指示從流式讀出接口的可用狀態(tài)標(biāo)記獲取的流式讀出接口的狀態(tài),在其指示流式讀出接口非空時,通過dma_read(cmd)過程從流式讀出接口的可訪問地址獲取dma命令的執(zhí)行結(jié)果(由變量cmd_status指示)。若dma命令的執(zhí)行結(jié)果尺寸較大,cpu通過執(zhí)行程序按照指定寬度(例如32比特)通過讀多次數(shù)據(jù)從流式讀出接口獲取dma命令的執(zhí)行結(jié)果。

        if(stream?。絜mpty)

        dma_read(cmd_status)

        可選地,dma加速器向cpu提供中斷。作為對中斷的響應(yīng),cpu知曉流式讀出接口存在可讀出數(shù)據(jù),則cpu從流式讀出接口讀出數(shù)據(jù)。

        可選地,流式寫入接口和流式讀出接口也可以不使用可用狀態(tài)標(biāo)記。cpu直接向流式寫入接口提供的可訪問地址寫入數(shù)據(jù)和直接從流式讀出接口提供的可訪問地址讀出數(shù)據(jù)。

        通過使用流式接口,cpu將數(shù)據(jù)寫入到流,無須關(guān)心數(shù)據(jù)的存儲地址和數(shù)據(jù)結(jié)構(gòu),從而減輕了cpu的負(fù)載。在讀出數(shù)據(jù)時,cpu通過使用流式接口從流中獲取數(shù)據(jù),無須關(guān)心數(shù)據(jù)的存儲地址和數(shù)據(jù)結(jié)構(gòu)。盡管流式接口提供了可訪問地址,但是該可訪問地址為單一地址或指定地址,即使訪問多份數(shù)據(jù),cpu也無須處理地址的更新,也無須進(jìn)行內(nèi)存管理。

        可以理解地,該可訪問地址也可以是所訪問的流的標(biāo)識符,從而在軟件看到,通過向流添加數(shù)據(jù)的操作,將數(shù)據(jù)提供給dma加速器或dma模塊。

        作為另一個實(shí)施例,dma加速器設(shè)有用于cpu訪問的先入先出接口(fifo接口)。dma加速器向cpu提供fifo寫入接口。在dma加速器提供的fifo隊(duì)列未滿時,cpu可向fifo隊(duì)列的隊(duì)尾寫入數(shù)據(jù)。dma加速器向cpu提供fifo讀出接口。在fifo隊(duì)列非空時,cpu可從fifo隊(duì)列的隊(duì)頭讀出數(shù)據(jù)。

        實(shí)施例一

        圖5為根據(jù)本申請實(shí)施例一提供的dma加速器240(也參看圖2)的結(jié)構(gòu)圖。如圖5所示,dma加速器240包括dma命令接收單元501、處理單元502、dma命令完成單元504和處理單元503。

        如圖5所示,dma命令接收單元501分別耦合到cpu250和處理單元502,dma命令接收單元501接收cpu250提供的數(shù)據(jù)包。

        處理單元502與存儲器230耦合,處理單元502從dma命令接收單元501獲取cpu250提供的數(shù)據(jù)包,將數(shù)據(jù)包轉(zhuǎn)換為符合dma模塊220可接受的格式,形成dma命令并寫入存儲器230,并維護(hù)dma模塊220可接受的數(shù)據(jù)結(jié)構(gòu)(例如,隊(duì)列)。

        處理單元503與存儲器230耦合,處理單元503從存儲器230獲取dma命令執(zhí)行結(jié)果。dma命令完成單元504分別耦合到處理單元503和cpu250,dma命令完成單元504從處理單元503獲取dma命令的執(zhí)行結(jié)果,并向cpu250提供dma命令的執(zhí)行結(jié)果。

        作為一個實(shí)施例,dma命令接收單元501和/或dma命令完成單元504設(shè)有緩存區(qū),以緩存來自cpu250的數(shù)據(jù)包和/或來自處理單元503的dma命令的執(zhí)行結(jié)果。

        作為一個實(shí)施例,如圖5所示,dma命令接收單元501提供流式寫入接口,以接收cpu250提供的數(shù)據(jù)包。并且,dma命令完成單元504緩存處理單元503提供的dma命令的狀態(tài),并通過其流式讀出接口向cpu250指示流式讀出接口可用或者流式讀出接口中存在待讀取的數(shù)據(jù),cpu250通過dma命令完成單元504的流式讀出接口從dma命令完成單元504讀取dma命令的執(zhí)行結(jié)果。

        通過向cpu250提供流式接口來訪問dma加速器240,cpu250無須維護(hù)存儲器230中存儲dma命令的數(shù)據(jù)結(jié)構(gòu),無須關(guān)心dma模塊220接受的dma命令的格式,無須對不同類型dma命令的特定格式進(jìn)行適配,簡化了cpu250訪問dma命令的接口,降低了cpu250處理dma命令時的負(fù)載。

        存儲器230中存儲的多個dma命令可以被組織為隊(duì)列、鏈表、線性表或數(shù)組等。

        作為一個實(shí)施例,存儲器230中存儲的多個dma命令被組織為隊(duì)列。在該實(shí)施例中,cpu250與dma加速器240之間通過單一流進(jìn)行數(shù)據(jù)傳輸,存儲器230中設(shè)有一個隊(duì)列(單一隊(duì)列)。處理單元502依據(jù)隊(duì)列的寫指針將dma命令寫入存儲器230,處理單元503依據(jù)隊(duì)列的讀指針從存儲器230獲取dma命令的執(zhí)行結(jié)果,并依據(jù)dma命令的執(zhí)行結(jié)果被cpu250接收而更新讀完成指針。

        如圖5所示,處理單元502維護(hù)讀指針和寫指針,處理單元502在由標(biāo)記①②③指示的過程中,依據(jù)寫指針指示的地址將dma命令寫入存儲器230。接下來,處理單元502更新自身維護(hù)的寫指針,使寫指針指向更新后的隊(duì)列的隊(duì)尾。在由標(biāo)記④⑤⑥指示的過程中,將更新后的寫指針寫入存儲器230,以在存儲器230中記錄隊(duì)尾的位置。處理單元502還通過由標(biāo)記⑦⑧⑨指示的過程監(jiān)視存儲器230中的讀完成指針(指示隊(duì)列的隊(duì)頭位置),并在處理單元502內(nèi)部記錄讀完成指針的最新值。通過維護(hù)讀完成指針和寫指針,處理單元502知曉存儲器230中的隊(duì)列是否未滿。在隊(duì)列未滿時,處理單元502可向隊(duì)尾添加dma命令。

        繼續(xù)參看圖5,dma模塊220從存儲器230獲取dma命令。dma模塊220依據(jù)存儲器230中記錄的寫指針和讀指針確定隊(duì)列中是否存在被添加的dma命令,并從隊(duì)頭(由讀指針指示)獲取dma命令。dma模塊220依據(jù)取出的dma命令在外部設(shè)備與電子設(shè)備之間發(fā)起dma傳輸,并在dma命令對應(yīng)的dma傳輸完成并將dma命令的執(zhí)行結(jié)果寫入存儲器230后,更新存儲器230中的讀指針,以指示dma命令被dma模塊220處理完成。

        需要理解的,處理單元502操作的隊(duì)列由寫指針指示隊(duì)尾,由讀完成指針指示隊(duì)頭。以及由處理單元503操作的隊(duì)列,由讀指針指示隊(duì)尾,由讀完成指針指示隊(duì)頭。

        處理單元503監(jiān)視存儲器230中的讀指針。響應(yīng)于存儲器230的讀指針發(fā)生變化,或者存儲器230的讀指針與處理單元503記錄的讀完成指針不同,處理單元503知曉有新的dma命令被dma模塊處理完成。在讀完成指針與存儲器230的讀指針不同時,處理單元503依據(jù)自身記錄的讀完成指針從存儲器230獲取被處理完成的dma命令的執(zhí)行結(jié)果,并提供給dma命令完成單元504。處理單元503還響應(yīng)于將dma命令的執(zhí)行結(jié)果提供給dma命令完成單元504,更新自身維護(hù)的讀完成指針。

        作為一個實(shí)施例,處理單元503可以將讀完成指針寫入存儲器230。處理單元502監(jiān)視存儲器230中的讀完成指針,并將讀完成指針作為隊(duì)列隊(duì)頭的位置。處理單元502從存儲器230獲取讀完成指針。

        作為另一個實(shí)施例,處理單元502與處理單元503耦合,處理單元502直接從處理單元503獲取讀完成指針,將讀完成指針作為隊(duì)列隊(duì)頭的位置,而無須從存儲器230獲取讀完成指針。

        作為再一個實(shí)施例,dma加速器240還包括指針管理器(請參見圖11中的指針管理器1105),指針管理器分別與處理單元502和處理單元503耦合,處理單元502從指針管理器獲取讀完成指針以及向指針管理器更新寫指針,處理單元503從指針管理器獲取讀指針和向指針管理器更新讀完成指針。

        作為又一個實(shí)施例,處理單元502將寫指針直接提供給dma模塊220,dma模塊220將讀指針直接提供給處理單元503。

        圖6到圖10為根據(jù)本申請實(shí)施例一提供的單一隊(duì)列的指針示意圖。與該單一隊(duì)列相關(guān)的指針包括讀指針、寫指針與讀完成指針。存儲器230中的隊(duì)列以及與隊(duì)列相關(guān)的指針可被dma加速器240或dma模塊220訪問。

        可選地,dma加速器240與dma模塊220可維護(hù)與隊(duì)列相關(guān)的指針的副本。

        圖6展示了初始狀態(tài)的隊(duì)列與指針。隊(duì)列包括16個條目(分別編號為0-15),可容納16個dma命令??蛇x地,dma命令可具有相同或不同的大小。

        在初始狀態(tài),電子設(shè)備200上電或復(fù)位后,隊(duì)列中未被寫入任何dma命令(隊(duì)列為空),讀指針、寫指針與讀完成指針均為0,指向隊(duì)列的條目0。

        dma加速器240的處理單元502依據(jù)寫指針向隊(duì)列(圖6中寫指針為0)添加dma命令,并在將dma命令寫入隊(duì)列后,更新存儲器230中的寫指針。參看圖7,隊(duì)列的編號為0的條目被寫入dma命令,寫指針被更新為1(指向編號為1的隊(duì)列條目)。而讀指針和讀完成指針依然為0。

        dma模塊220依據(jù)讀指針落后于寫指針,識別出隊(duì)列被寫入了dma命令。dma模塊220依據(jù)讀指針(圖7中指向編號為0的隊(duì)列條目)從隊(duì)列中獲取dma命令并處理。

        可以理解地,dma加速器240的處理單元502向隊(duì)列添加dma命令的過程,與dma模塊從隊(duì)列獲取dma命令的過程可以并發(fā),并且互相不會影響對方。

        參看圖8,dma模塊220處理dma命令的速度慢于dma加速器240向隊(duì)列中添加命令的速度,dma加速器240的處理單元502持續(xù)向隊(duì)列添加dma命令,寫指針已被更新為10(編號為0到9的隊(duì)列條目均被寫入dma命令)。dma模塊220處理了隊(duì)列中的編號為0到3的隊(duì)列條目的dma命令,讀指針被更新為4。dma模塊220在完成對dma命令的處理后,更新隊(duì)列中的dma命令,在dma命令中記錄dma命令的執(zhí)行結(jié)果。dma模塊220向隊(duì)列的條目中寫入dma命令的執(zhí)行結(jié)果。在圖8中,隊(duì)列中編號為0到3的隊(duì)列條目中的dma命令均被dma模塊220處理完成。

        可選地,在此過程中,讀指針指示了dma模塊220向隊(duì)列寫入dma命令的執(zhí)行結(jié)果時的隊(duì)列條目。dma模塊220完成向隊(duì)列條目寫入dma命令的執(zhí)行結(jié)果后,更新存儲器230中的讀指針。

        可選地,dma模塊220記錄了dma命令在隊(duì)列中的位置,并在處理完成該dma命令后依據(jù)所記錄的位置將dma命令的執(zhí)行結(jié)果寫入隊(duì)列。

        dma加速器240的處理單元503從隊(duì)列的條目中獲取dma命令的執(zhí)行結(jié)果。dma加速器240的處理單元503識別讀指針超前于讀完成指針,知曉隊(duì)列中被dma模塊220寫入了dma命令的狀態(tài),而依據(jù)讀完成指針?biāo)甘镜臈l目獲取dma命令的執(zhí)行結(jié)果。處理單元503從隊(duì)列條目獲取dma命令的執(zhí)行結(jié)果后,還更新讀完成指針,使其指向隊(duì)列的下一個條目。參看圖8,dma加速器240的處理單元503依據(jù)讀完成指針獲取了編號為0和1的隊(duì)列條目的dma命令的執(zhí)行結(jié)果,并將讀完成指針更新為指向編號為2的隊(duì)列條目。

        dma加速器240的處理單元502繼續(xù)向隊(duì)列添加dma命令。當(dāng)編號為15的條目被寫入dma命令后,由于隊(duì)列總共有16個條目,寫指針發(fā)生回繞,并指向編號為0的條目(參看圖9)。同時,dma模塊220繼續(xù)處理隊(duì)列中的dma命令,并將dma命令執(zhí)行狀態(tài)寫入隊(duì)列,并更新讀指針(圖9中指向編號為11的條目)。dma加速器240的處理單元503繼續(xù)從隊(duì)列獲取dma命令的執(zhí)行結(jié)果,并更新讀完成指針(圖9中指向編號為7的條目)。

        優(yōu)選地,在寫指針0中還記錄其發(fā)生回繞,基于回繞標(biāo)記或回繞發(fā)生的次數(shù)來識別寫指針超前于讀指針。

        dma加速器240的處理單元502依據(jù)寫指針和讀完成指針識別隊(duì)列是否未滿。若讀完成指針超前于寫指針,意味著隊(duì)列中充滿了被添加但尚未被取走的dma命令(可能已被dma模塊220處理完成),從而dma加速器240的處理單元502暫停向隊(duì)列添加dma命令,而等待dma加速器240的處理單元503從隊(duì)列取走dma命令的執(zhí)行結(jié)果。

        dma加速器240的處理單元503從隊(duì)列獲取dma命令的執(zhí)行結(jié)果的過程與dma模塊220向隊(duì)列添加dma命令的執(zhí)行狀態(tài)的過程可并行執(zhí)行,而不會互相影響。

        請參見圖10,dma加速器240的處理單元503從隊(duì)列獲取dma命令的執(zhí)行結(jié)果的速度快于dma模塊220向隊(duì)列添加dma命令的執(zhí)行結(jié)果的速度,從而讀完成指針逐漸追上讀指針。圖10中,相對于圖9,讀完成指針和讀指針均發(fā)生回繞,并且讀完成指針和讀指針指向相同的位置(編號為2的隊(duì)列條目)。作為響應(yīng),dma加速器240的處理單元503識別到dma模塊220尚未產(chǎn)生更新的dma命令執(zhí)行結(jié)果,因此dma加速器240的處理單元503暫停從隊(duì)列中獲取dma命令執(zhí)行結(jié)果。

        在該隊(duì)列的使用過程中,dma加速器的處理單元502和dma模塊220是使用隊(duì)列的一對生產(chǎn)者與消費(fèi)者,dma模塊220和dma加速器的處理單元504是使用隊(duì)列的另一對生產(chǎn)者與消費(fèi)者。單一隊(duì)列既用于dma加速器向dma模塊提交dma命令,也用于dma模塊向dma加速器提交dma命令的執(zhí)行結(jié)果,降低了對存儲器的存儲空間的需求。

        實(shí)施例二

        圖11為本申請實(shí)施例二提供的直接存儲器訪問加速器的結(jié)構(gòu)圖。如圖11所示,dma加速器240包括dma命令接收單元1101、處理單元1102、dma命令完成單元1104和處理單元1103。

        如圖11所示,dma命令接收單元1101分別耦合到cpu250和處理單元1102,dma命令接收單元1101接收cpu250提供的數(shù)據(jù)包。

        處理單元1102與存儲器230耦合,處理單元1102從dma命令接收單元1101獲取cpu250提供的數(shù)據(jù)包,將數(shù)據(jù)包轉(zhuǎn)換為符合dma模塊220可接受的格式,形成dma命令并寫入存儲器230,并維護(hù)dma模塊220可接受的數(shù)據(jù)結(jié)構(gòu)(例如,隊(duì)列)。

        處理單元1103與存儲器230耦合,處理單元1103從存儲器230獲取dma命令執(zhí)行結(jié)果。dma命令完成單元1104分別耦合到處理單元1103和cpu250,dma命令完成單元1104從處理單元1103獲取dma命令的執(zhí)行結(jié)果,并向cpu250提供dma命令的執(zhí)行結(jié)果。

        實(shí)施例二與實(shí)施例一的區(qū)別在于:dma加速器240與cpu250之間通過多個相互獨(dú)立的流進(jìn)行數(shù)據(jù)傳輸,存儲器230中設(shè)有與各個流對應(yīng)的隊(duì)列。dma模塊獨(dú)立處理cpu250在各個流中提供的dma命令。

        作為一個例子,dma命令接收單元1101設(shè)有端口(單一端口,如流式寫入接口)。dma命令接收單元1101的流式寫入接口為每個流提供可用狀態(tài)標(biāo)記,cpu250可獨(dú)立或聯(lián)合地獲取每個流的可用狀態(tài)標(biāo)記。該端口依據(jù)流的可用狀態(tài)而接收cpu250的數(shù)據(jù)包,數(shù)據(jù)包中標(biāo)記要訪問的流。dma命令接收單元1101依據(jù)數(shù)據(jù)包中的標(biāo)記識別dma命令所屬的流。處理單元1102依據(jù)dma命令所屬的流,獲取與該流對應(yīng)的隊(duì)列的指針(即dma命令在存儲器230中的存儲地址),并將dma命令寫入與該流對應(yīng)的隊(duì)列。

        處理單元1103監(jiān)視各個流對應(yīng)的隊(duì)列的指針。在隊(duì)列中出現(xiàn)處理完成的dma命令的執(zhí)行狀態(tài)后,處理單元1103獲取dma命令的執(zhí)行結(jié)果,并通過dma命令完成單元1104提供給cpu250。具體地,dma命令完成單元1104的流式讀出接口為每個流提供可用狀態(tài)標(biāo)記,cpu250可獨(dú)立或聯(lián)合地獲取每個流的可用狀態(tài)標(biāo)記,并通過流式讀出接口從各個流獲取dma命令的執(zhí)行結(jié)果。

        dma加速器240確保cpu250提交的dma命令所屬的流與cpu250獲取的dma命令的執(zhí)行結(jié)果所屬的流是相同的流。即使cpu250同時向多個流提交dma命令,但是cpu250從各個流獲取的dma命令的執(zhí)行結(jié)果出現(xiàn)于與cpu250提交的dma命令相同的流中。例如,dma加速器240提供4個流(s0、s1、s2與s3),cpu250向流s1提交了dma命令c1和c2,向流s2提交了dma命令c3和c4,而cpu250相應(yīng)地從dma命令完成單元1104提供的流s1中獲取到dma命令c1和c2的執(zhí)行結(jié)果,而從dma命令完成單元1104提供的流s2中獲取到dma命令c3和c4的執(zhí)行結(jié)果。

        可選地,在同一流中,dma命令的執(zhí)行結(jié)果按dma命令被提交到流的順序提供給cpu250。同樣可選地,在同一流中,dma命令的執(zhí)行結(jié)果提供給cpu250的順序可以是亂序的。

        作為另一個具體實(shí)施例,dma命令接收單元1101設(shè)有多個端口(如流式接口或先入先出接口),端口的數(shù)量與流的數(shù)量相同,端口與流一一對應(yīng)。dma命令接收單元1101通過與流一一對應(yīng)的端口接收cpu250的數(shù)據(jù)包。dma命令接收單元1101依據(jù)接收數(shù)據(jù)包的端口識別dma命令所屬的流。處理單元1102依據(jù)dma命令所屬的流,獲取與該流對應(yīng)的隊(duì)列的指針(即dma命令在存儲器230中的存儲地址),并將dma命令寫入與該流對應(yīng)的隊(duì)列。dma命令完成單元1104依據(jù)dma命令所屬的流從與該流對應(yīng)的端口將dma命令執(zhí)行結(jié)果提供給cpu250。

        作為又一個實(shí)施例,數(shù)據(jù)包指示標(biāo)識符(sid,也稱為流標(biāo)識符),流標(biāo)識符指示了數(shù)據(jù)包所屬的流。dma加速器240依據(jù)標(biāo)識符確定dma命令在存儲器230中的存儲地址。

        作為一個實(shí)施例,dma加速器240還包括指針管理器1105。指針管理器1105分別與處理單元1102和處理單元1103耦合,用于記錄存儲器230中各個隊(duì)列的讀指針、寫指針和讀完成指針(例如,用于流標(biāo)識符為s0的流的多個指針、用于流標(biāo)識符為s1的流的多個指針)。處理單元1102向指針管理器1105更新與每個流對應(yīng)的隊(duì)列的寫指針,處理單元1103從指針管理器1105獲取與每個流對應(yīng)的隊(duì)列的讀指針和向指針管理器1105更新與每個流對應(yīng)的隊(duì)列的讀完成指針。指針管理器用于對存儲器中的多個隊(duì)列進(jìn)行管理,并且用于處理單元1102和處理單元1103交換指針。處理單元1102與處理單元1103依據(jù)流標(biāo)識符從指針管理器1105獲取或向指針管理器1105寫入同流對應(yīng)的指針。

        可選地,存儲器230為每個流對應(yīng)的隊(duì)列和與隊(duì)列對應(yīng)的指針提供存儲空間。圖11中展示了存儲器230容納兩個隊(duì)列,以及兩個隊(duì)列的每個的讀指針與寫指針。流與存儲器230中的隊(duì)列一一對應(yīng)。

        實(shí)施例三

        圖12為本申請實(shí)施例三提供的dma命令處理方法的流程圖。如圖12所示,dma加速器對dma命令的處理方法包括如下步驟:

        步驟1201:接收來自cpu的數(shù)據(jù)包。

        步驟1202:將數(shù)據(jù)包轉(zhuǎn)換為dma命令,并寫入存儲器。

        步驟1203:響應(yīng)于存儲器中的dma命令的執(zhí)行結(jié)果被更新,獲取被更新的dma命令的執(zhí)行結(jié)果。

        步驟1204:將dma命令的執(zhí)行結(jié)果提供給cpu。

        作為一個實(shí)施例,cpu與dma加速器之間通過流式接口進(jìn)行數(shù)據(jù)傳輸,dma加速器為每個流提供狀態(tài)標(biāo)記。

        步驟1201中,dma加速器提供流式接口的狀態(tài)標(biāo)記,該狀態(tài)標(biāo)記指示流式接口是否可以接收數(shù)據(jù)。若cpu識別出流式接口的狀態(tài)標(biāo)記為可用狀態(tài)標(biāo)記,則cpu向流式接口發(fā)送數(shù)據(jù)包。

        步驟1204中,dma加速器提供流式接口的狀態(tài)標(biāo)記,該狀態(tài)標(biāo)記指示流式接口是否存在需要輸出的數(shù)據(jù)。若cpu識別出流式接口的狀態(tài)標(biāo)記為可用狀態(tài)標(biāo)記,則cpu從流式接口讀取數(shù)據(jù)包。

        作為另一個實(shí)施例,cpu與dma加速器之間通過先入先出接口(fifo接口)進(jìn)行數(shù)據(jù)傳輸。

        步驟1201中,dma加速器提供先入先出接口的狀態(tài)。若cpu識別出先入先出隊(duì)列未滿,則cpu向先入先出接口發(fā)送數(shù)據(jù)包。

        步驟1204中,dma加速器提供先入先出接口的狀態(tài)。若cpu識別出先入先出隊(duì)列為非空,則cpu從先入先出接口讀取數(shù)據(jù)包。

        可選地,存儲器中存儲的多個dma命令被組織為隊(duì)列。通過寫指針、讀指針和讀完成指針來維護(hù)隊(duì)列。寫指針指向存儲器中存儲dma命令的隊(duì)列的隊(duì)尾,讀完成指針指向存儲器中存儲dma命令的隊(duì)列的隊(duì)頭。

        dma加速器依據(jù)讀完成指針落后于寫指針,確定存儲器中存儲dma命令的隊(duì)列未滿。僅在存儲器中的隊(duì)列未滿時,dma加速器依據(jù)寫指針將dma命令寫入存儲器,然后更新寫指針。

        dma模塊依據(jù)讀指針從存儲器中的隊(duì)列獲取dma命令并進(jìn)行處理。響應(yīng)于dma命令被完成,dma模塊將dma命令的執(zhí)行結(jié)果寫入存儲器,并更新存儲器中的讀指針。

        響應(yīng)于讀指針與讀完成指針不同,dma加速器從存儲器獲取dma命令的執(zhí)行結(jié)果。響應(yīng)于讀指針超前于讀完成指針,dma加速器依據(jù)讀完成指針從存儲器獲取dma命令的執(zhí)行結(jié)果,并更新讀完成指針。

        可選地,dma加速器可以將讀完成指針寫入存儲器,并且監(jiān)視存儲器中的讀完成指針,并將讀完成指針作為隊(duì)列隊(duì)頭的位置。

        作為一個實(shí)施例,dma加速器與cpu之間通過多個相互獨(dú)立的流進(jìn)行數(shù)據(jù)傳輸,存儲器中設(shè)有與各個流一一對應(yīng)的隊(duì)列。dma模塊獨(dú)立處理cpu在各個流中提供的dma命令。dma加速器為每個流提供狀態(tài)標(biāo)記。

        圖13為本申請實(shí)施例的cpu通過直接存儲器訪問加速器執(zhí)行直接存儲器訪問操作的流程圖。如圖13所示,cpu通過dma加速器執(zhí)行dma操作包括如下步驟:

        步驟1310:cpu從dma加速器中獲取可用的流。例如,cpu訪問dma加速器提供的流式接口是否可用的狀態(tài)標(biāo)記,以獲取可用的流。該狀態(tài)標(biāo)記指示對應(yīng)的流是否可以寫入數(shù)據(jù)或讀出數(shù)據(jù)。

        若cpu要向dma加速器提供dma命令,,則執(zhí)行步驟1320:向可用的用于寫入dma命令的流發(fā)送數(shù)據(jù)包。

        若cpu要從dma加速器獲取dma命令的執(zhí)行結(jié)果,則執(zhí)行步驟1330:從可用的用于讀出數(shù)據(jù)的流獲取dma命令的執(zhí)行結(jié)果。

        通過使用流式接口,cpu將數(shù)據(jù)寫入到流,無須關(guān)心數(shù)據(jù)的存儲地址和數(shù)據(jù)結(jié)構(gòu),從而減輕了cpu的負(fù)載。在讀出數(shù)據(jù)時,cpu通過使用流式接口從流中獲取數(shù)據(jù),無須關(guān)心數(shù)據(jù)的存儲地址和數(shù)據(jù)結(jié)構(gòu)。盡管流式接口提供了可訪問地址,但是該可訪問地址為單一地址或指定地址,即使訪問多份數(shù)據(jù),cpu也無須處理地址的更新,也無須進(jìn)行內(nèi)存管理。

        本申請的技術(shù)方案獲得的有益效果如下:

        (1)本申請的dma加速器替代cpu與存儲器進(jìn)行交互,替代cpu生成符合dma模塊所需的格式、傳輸長度等要求的dma命令,并替代cpu維護(hù)存儲器中的dma命令的數(shù)據(jù)結(jié)構(gòu),將dma命令寫入存儲器,并監(jiān)視存儲器中dma命令的狀態(tài)更新,以及最后將dma命令的執(zhí)行結(jié)果提供給cpu,大大減輕了cpu的負(fù)載,加快了dma命令的處理速度。

        (2)本申請通過使用流式接口,cpu將數(shù)據(jù)寫入到流,無須關(guān)心數(shù)據(jù)的存儲地址和數(shù)據(jù)結(jié)構(gòu),dma加速器將cpu提供的數(shù)據(jù)組織為dma命令,從而減輕了cpu的負(fù)載;在讀出數(shù)據(jù)時,dma加速器將dma命令的執(zhí)行結(jié)構(gòu)組織為數(shù)據(jù)流,cpu通過使用流式接口從流中獲取數(shù)據(jù),無須關(guān)心數(shù)據(jù)的存儲地址和數(shù)據(jù)結(jié)構(gòu);盡管流式接口提供了可訪問地址,但是該可訪問地址為單一地址或指定地址,cpu無須處理地址的更新,也無須進(jìn)行內(nèi)存管理。

        (3)本申請通過對存儲器中隊(duì)列的維護(hù),使得dma加速器的第一處理單元和dma模塊形成隊(duì)列的一對生產(chǎn)者與消費(fèi)者,dma模塊和dma加速器的第二處理單元形成隊(duì)列的另一對生產(chǎn)者與消費(fèi)者,單一隊(duì)列既用于dma加速器向dma模塊提交dma命令,也用于dma模塊向dma加速器提交dma命令的執(zhí)行結(jié)果,降低了對存儲器的存儲空間的需求。

        以上所述,僅為本申請的具體實(shí)施方式,但本申請的保護(hù)范圍并不局限于此,任何熟悉本技術(shù)領(lǐng)域的技術(shù)人員在本申請揭露的技術(shù)范圍內(nèi),可輕易想到變化或替換,都應(yīng)涵蓋在本申請的保護(hù)范圍之內(nèi)。因此,本申請的保護(hù)范圍應(yīng)以所述權(quán)利要求的保護(hù)范圍為準(zhǔn)。

        當(dāng)前第1頁1 2 
        網(wǎng)友詢問留言 留言:0條
        • 還沒有人留言評論。精彩留言會獲得點(diǎn)贊!
        主站蜘蛛池模板: 国产精品黄色片在线观看| 国产精品成人中文字幕| 99热都是精品| 中文字幕精品无亚洲字幕| 亚洲18禁| 538国产视频| 色偷偷www.8888在线观看| 色综合色综合久久综合频道88| 中文字幕亚洲欧美专区| 最新精品露脸国产在线| 99久久国产宗和精品1上映| 天堂av在线一区二区| 欧美变态另类zozo| 亚洲国内精品自在线影院牛牛| 亚洲中文无码AV在线| 亚洲精品久久久久国色天香| 狼友福利在线观看| 亚洲?无码?人妻| 婷婷综合久久一区二区三区| 国产久久热这里只有精品| 乱人伦xxxx国语对白| 午夜福利一区| 2021AV在线无码最新| 波多野结衣无码视频| 爆乳高潮喷水无码正在播放| 国产亚洲精品第一综合麻豆| 亚洲午夜无码久久久久蜜臀av| 亚洲欧美成人综合| www.韩日| 九九热在线免费视频播放| 国产乱人伦无无码视频试看| 影音先锋中文字幕无码资源站| julia无码中文字幕一区| 午夜精品区| 国产a在视频线精品视频下载| 男女一级毛片免费视频看| 18禁超污无遮挡无码网址| 蜜桃视频中文字幕| 亚洲AV伊人久久综合密臀性色| 国产无遮挡a片又黄又爽| 欧美18videosex性欧美tube1080|