本發(fā)明涉及計(jì)算機(jī)技術(shù)領(lǐng)域,更具體地說,涉及一種數(shù)據(jù)傳輸方法,還涉及一種數(shù)據(jù)傳輸系統(tǒng)。
背景技術(shù):
dma(directmemoryaccess,直接內(nèi)存存取)是一種不經(jīng)過cpu(centralprocessingunit,中央處理器),直接從內(nèi)存存取數(shù)據(jù)的數(shù)據(jù)交換模式,cpu向dma控制器發(fā)送命令,使dma控制器進(jìn)行數(shù)據(jù)傳輸,傳輸完畢后再把完成信息反饋給cpu。首先,cpu向dma下達(dá)命令隊(duì)列,該命令隊(duì)列中可以存儲(chǔ)若干個(gè)命令,命令參數(shù)包含數(shù)據(jù)的傳輸方向、數(shù)據(jù)傳輸?shù)脑吹刂?、?shù)據(jù)傳輸?shù)哪康牡刂芬约皵?shù)據(jù)傳輸?shù)拈L度信息等。dma控制器從命令隊(duì)列中獲取命令,根據(jù)獲取的命令啟動(dòng)dma進(jìn)行數(shù)據(jù)傳輸,直到完成命令隊(duì)列中的所有命令。當(dāng)處理完該命令隊(duì)列后,cpu繼續(xù)發(fā)送下一個(gè)命令隊(duì)列到dma控制器,直到所有隊(duì)列中的命令都完成。
當(dāng)dma控制器將從命令隊(duì)列中獲取的命令全部執(zhí)行完畢后,再由cpu繼續(xù)向命令隊(duì)列發(fā)送命令,以便dma控制器在此從命令隊(duì)列中獲取命令并執(zhí)行,直到將所有的命令均處理完畢。可見,在cpu向命令隊(duì)列發(fā)送命令的這段時(shí)間,對(duì)數(shù)據(jù)的處理是中斷的,也就是說這段時(shí)間被浪費(fèi)了。這種數(shù)據(jù)傳輸模式雖然能降低cpu的資源占有率,節(jié)省系統(tǒng)資源,但是整個(gè)過程消耗時(shí)間長,dma數(shù)據(jù)傳輸?shù)乃俾实汀?/p>
綜上所述,如何提供一種降低耗時(shí)的數(shù)據(jù)傳輸方式,是目前本領(lǐng)域技術(shù)人員亟待解決的問題。
技術(shù)實(shí)現(xiàn)要素:
本發(fā)明的目的是提供一種數(shù)據(jù)傳輸?shù)姆椒跋到y(tǒng),以降低數(shù)據(jù)傳輸消耗的時(shí)間,提高dma的傳輸效率。
為了實(shí)現(xiàn)上述目的,本發(fā)明提供如下技術(shù)方案:
一種數(shù)據(jù)傳輸?shù)姆椒?,包括?/p>
步驟1:cpu將當(dāng)前需要被處理的命令發(fā)送到第一命令隊(duì)列;
步驟2:dma控制器獲取并處理所述第一命令隊(duì)列中的命令;在所述dma控制器獲取并處理所述第一命令隊(duì)列中的命令的過程中,所述cpu將當(dāng)前需要被處理的命令發(fā)送到第二命令隊(duì)列中;
步驟3:所述dma控制器處理完所述第一命令隊(duì)列中的命令后,獲取并處理所述第二命令隊(duì)列中的命令;在所述dma控制器獲取并處理第二命令隊(duì)列中命令的過程中,返回執(zhí)行步驟1,直至不存在需要被處理的命令為止。
優(yōu)選的,所述cpu將當(dāng)前需要被處理的命令發(fā)送到第一命令隊(duì)列或第二命令隊(duì)列后,還包括:
所述cpu向所述dma控制器發(fā)送已將需要被處理的命令發(fā)送至第一命令隊(duì)列或第二命令隊(duì)列的通知消息。
優(yōu)選的,所述cpu向所述dma控制器發(fā)送已將需要被處理的命令發(fā)送至第一命令隊(duì)列或第二命令隊(duì)列的通知消息,包括:
所述cpu通過寄存器向所述dma控制器發(fā)送所述通知消息。
優(yōu)選的,所述dma控制器處理完所述第一命令隊(duì)列或所述第二命令隊(duì)列中的命令后,還包括:
所述dma控制器向所述cpu發(fā)送已經(jīng)處理完所述第一命令隊(duì)列或所述第二命令隊(duì)列中的命令的完成消息。
優(yōu)選的,所述dma控制器獲取并處理所述第一命令隊(duì)列或所述第二命令隊(duì)列中的命令,包括:
所述dma控制器控制第一dma實(shí)現(xiàn)與所述第一命令隊(duì)列或所述第二命令隊(duì)列中的命令對(duì)應(yīng)的命令搬移操作,控制第二dma實(shí)現(xiàn)與所述第一命令隊(duì)列或所述第二命令隊(duì)列中的數(shù)據(jù)傳輸操作。
一種數(shù)據(jù)傳輸?shù)南到y(tǒng),包括:
cpu,用于:將當(dāng)前需要被處理的命令發(fā)送到第一命令隊(duì)列;在dma控制器獲取并處理所述第一命令隊(duì)列中的命令的過程中,將當(dāng)前需要被處理的命令發(fā)送到第二命令隊(duì)列;在所述dma控制器獲取并處理所述第二命令隊(duì)列中的命令的過程中,將當(dāng)前需要被處理的命令發(fā)送至第一命令隊(duì)列中,直至不存在需要被處理的命令為止;
dma控制器,用于:獲取并處理所述第一命令隊(duì)列中的命令;處理完所述第一命令隊(duì)列中的命令后,獲取并處理所述第二命令隊(duì)列中的命令;處理完所述第二命令隊(duì)列中的命令后,獲取并處理所述第一命令隊(duì)列中的命令,直至第一命令隊(duì)列及第二命令隊(duì)列中均不存在需要被處理的命令為止。
優(yōu)選的,所述cpu還用于:
在所述cpu將當(dāng)前需要被處理的命令發(fā)送到第一命令隊(duì)列或第二命令隊(duì)列后,向所述dma控制器發(fā)送已將需要被處理的命令發(fā)送至第一命令隊(duì)列或第二命令隊(duì)列的通知消息。
優(yōu)選的,所述cpu包括:
發(fā)送模塊,用于:通過寄存器向所述dma控制器發(fā)送所述通知消息。
優(yōu)選的,所述dma控制器還用于:
在所述dma控制器處理完所述第一命令隊(duì)列或第二命令隊(duì)列中的命令后,向所述cpu發(fā)送已經(jīng)處理完所述第一命令隊(duì)列或所述第二命令隊(duì)列中的命令的完成消息。
優(yōu)選的,所述dma控制器包括:
控制模塊,用于:控制第一dma實(shí)現(xiàn)與所述第一命令隊(duì)列或所述第二命令隊(duì)列中的命令對(duì)應(yīng)的命令搬移操作,控制第二dma實(shí)現(xiàn)與所述第一命令隊(duì)列或所述第二命令隊(duì)列中的命令對(duì)應(yīng)的數(shù)據(jù)傳輸操作。
本發(fā)明提供了一種數(shù)據(jù)傳輸?shù)姆椒跋到y(tǒng),其中該方法包括:在dma控制器獲取或處理第一命令的過程中,cpu向第二命令隊(duì)列發(fā)送第二命令,當(dāng)dma控制器將第一命令處理完時(shí),即可直接從第二命令隊(duì)列中獲取并處理第二命令,無需等待cpu向第二命令隊(duì)列發(fā)送命令;而在dma控制器獲取或處理第二命令的過程中,cpu向第一命令隊(duì)列發(fā)送命令,當(dāng)dma控制器處理完第二命令隊(duì)列中的命令時(shí),即可從第一命令隊(duì)列中獲取并處理第一命令隊(duì)列中的命令,無需等待cpu向第一命令隊(duì)列發(fā)送命令。因此,無論cpu是向第一命令隊(duì)列發(fā)送命令還是向第二命令隊(duì)列發(fā)送命令的過程中,dma都在處理命令,即將上文所述被浪費(fèi)的時(shí)間被有效利用,因此,減少了整個(gè)流程所花費(fèi)的時(shí)間,提升了dma數(shù)據(jù)傳輸?shù)乃俾省1痉椒ㄌ峁┑南到y(tǒng)與上述方法相對(duì)應(yīng),因此也能節(jié)約整個(gè)過程的時(shí)間。
附圖說明
為了更清楚地說明本發(fā)明實(shí)施例或現(xiàn)有技術(shù)中的技術(shù)方案,下面將對(duì)實(shí)施例或現(xiàn)有技術(shù)描述中所需要使用的附圖作簡單地介紹,顯而易見地,下面描述中的附圖僅僅是本發(fā)明的實(shí)施例,對(duì)于本領(lǐng)域普通技術(shù)人員來講,在不付出創(chuàng)造性勞動(dòng)的前提下,還可以根據(jù)提供的附圖獲得其他的附圖。
圖1為本發(fā)明實(shí)施例提供的一種數(shù)據(jù)傳輸方法的流程圖;
圖2為本發(fā)明實(shí)施例提供的一種數(shù)據(jù)傳輸系統(tǒng)的結(jié)構(gòu)示意圖。
具體實(shí)施方式
下面將結(jié)合本發(fā)明實(shí)施例中的附圖,對(duì)本發(fā)明實(shí)施例中的技術(shù)方案進(jìn)行清楚、完整地描述,顯然,所描述的實(shí)施例僅僅是本發(fā)明一部分實(shí)施例,而不是全部的實(shí)施例?;诒景l(fā)明中的實(shí)施例,本領(lǐng)域普通技術(shù)人員在沒有做出創(chuàng)造性勞動(dòng)前提下所獲得的所有其他實(shí)施例,都屬于本發(fā)明保護(hù)的范圍。
請(qǐng)參閱圖1,圖1示出了本發(fā)明實(shí)施例提供的一種數(shù)據(jù)傳輸方法的流程圖,可以包括:
s11:cpu將當(dāng)前需要被處理的命令發(fā)送到第一命令隊(duì)列。
在dma模式下,當(dāng)前只要有需要被處理的命令,cpu都會(huì)將需要被處理的命令發(fā)送到對(duì)應(yīng)的命令隊(duì)列以供dma控制器對(duì)其進(jìn)行處理,命令中包含有數(shù)據(jù)傳輸方向,如:將數(shù)據(jù)從主機(jī)傳輸?shù)皆O(shè)備或者從設(shè)備傳輸?shù)街鳈C(jī);還包含有數(shù)據(jù)傳輸?shù)脑吹刂芳澳康牡刂返刃畔?。具體的,cpu直接將命令發(fā)送到主機(jī)中的第一命令列隊(duì),第一命令列隊(duì)可以是事先設(shè)置好的一塊用于存放命令的存儲(chǔ)區(qū)域,而第一命令隊(duì)列的容量大小可以根據(jù)實(shí)際需要進(jìn)行設(shè)定。
s12:dma控制器獲取并處理第一命令隊(duì)列中的命令;在dma控制器獲取并處理第一命令隊(duì)列中的命令的過程中,cpu將當(dāng)前需要被處理的命令發(fā)送到第二命令隊(duì)列中。
dma控制器通過控制dma來實(shí)現(xiàn)對(duì)需要處理的命令的獲取與處理操作。具體的,以dma控制器處理第一命令隊(duì)列中的命令為例進(jìn)行說明,dma控制器在cpu將需要被處理的命令發(fā)送到主機(jī)中的第一命令隊(duì)列后,啟動(dòng)dma,該dma在dma控制器的控制下可以實(shí)現(xiàn)以下操作:將該需要被處理的命令從主機(jī)中的第一命令隊(duì)列中搬移到設(shè)備中對(duì)應(yīng)的第一命令隊(duì)列,與主機(jī)中的第一命令隊(duì)列相同的,設(shè)備中的第一命令隊(duì)列也可以是事先設(shè)置好的一塊存儲(chǔ)區(qū)域;由于dma將主機(jī)中第一命令隊(duì)列中的命令搬移到設(shè)備中的第一命令隊(duì)列中,因此,設(shè)備中的對(duì)應(yīng)命令隊(duì)列的大小應(yīng)至少與主機(jī)中的相等,才能保證dma順利完成命令的搬移;dma將命令搬移到設(shè)備中的第一命令隊(duì)列后,dma控制器從設(shè)備中的第一命令隊(duì)列中獲取命令,然后根據(jù)該命令控制dma進(jìn)行相應(yīng)的操作。例如:如果命令中包含的數(shù)據(jù)傳輸方向?yàn)閺脑O(shè)備到主機(jī),那么dma控制器就控制dma將設(shè)備中對(duì)應(yīng)的數(shù)據(jù)傳輸?shù)街鳈C(jī)中。需要說明的是,dma控制器對(duì)第二命令隊(duì)列中命令的處理步驟可以與上述對(duì)第一命令隊(duì)列中命令的處理步驟相同,區(qū)別僅在于針對(duì)的命令隊(duì)列不同。
在上述dma控制器對(duì)命令的獲取及處理的過程中,cpu將當(dāng)前需要被處理的命令發(fā)送到第二命令隊(duì)列中,充分將dma控制器對(duì)第一命令隊(duì)列中的命令的獲取及處理操作所花費(fèi)的時(shí)間利用起來,不必另外花費(fèi)時(shí)間單獨(dú)進(jìn)行命令的發(fā)送。第二命令隊(duì)列也可以是事先設(shè)置好的一塊存儲(chǔ)區(qū)域,其容量大小根據(jù)實(shí)際情況設(shè)置即可。
s13:dma控制器處理完第一命令隊(duì)列中的命令后,獲取并處理第二命令隊(duì)列中的命令;在dma控制器獲取并處理第二命令隊(duì)列中命令的過程中,返回執(zhí)行步驟s11,直至不存在需要被處理的命令為止。
當(dāng)dma控制器處理完第一命令隊(duì)列中的命令后,第二命令隊(duì)列中的命令已經(jīng)放置好,dma控制器即可直接從第二命令隊(duì)列中獲取新的命令,無需浪費(fèi)時(shí)間等待cpu將新的命令發(fā)送到第二命令隊(duì)列中。另外,由于cpu中可能還有需要被處理的新的命令,因此在dma控制器處理第二命令隊(duì)列中的命令時(shí),返回執(zhí)行步驟s11,直至cpu中沒有需要被處理的命令為止。
本發(fā)明申請(qǐng)公開的技術(shù)方案中,當(dāng)dma控制器獲取并處理第一命令隊(duì)列中的命令時(shí),cpu向第二命令隊(duì)列中發(fā)送當(dāng)前需要被處理的命令;當(dāng)dma控制器獲取并處理第二命令隊(duì)列中的命令時(shí),cpu向第一命令隊(duì)列中發(fā)送當(dāng)前需要被處理的命令;重復(fù)上述過程,直到cpu中沒有需要被處理的命令為止。由于cpu向第一命令隊(duì)列或第二命令隊(duì)列發(fā)送命令時(shí)需要耗費(fèi)一定時(shí)間,而本發(fā)明利用dma控制器獲取并處理命令隊(duì)列中的命令這段時(shí)間來進(jìn)行命令的發(fā)送,因此本發(fā)明節(jié)約了整個(gè)過程消耗的時(shí)間。
本發(fā)明實(shí)施例提供的一種數(shù)據(jù)傳輸方法,cpu將當(dāng)前需要被處理的命令發(fā)送到第一命令隊(duì)列或第二命令隊(duì)列后,還可以包括:
cpu向dma控制器發(fā)送已將需要被處理的命令發(fā)送至第一命令隊(duì)列或第二命令隊(duì)列的通知消息。
因?yàn)橹挥性赾pu向第一命令隊(duì)列或第二命令隊(duì)列發(fā)送命令后,dma控制器才能對(duì)相應(yīng)的命令隊(duì)列(包括第一命令隊(duì)列及第二命令隊(duì)列)中的命令進(jìn)行獲取及處理操作。因此,cpu在發(fā)送完命令后向dma控制器發(fā)送相應(yīng)的通知消息,dma控制器就可以及時(shí)從相應(yīng)的命令隊(duì)列中獲取并處理命令。如果cpu不發(fā)送相應(yīng)通知消息,那么dma控制就不知道第一命令隊(duì)列或第二命令隊(duì)列中是否已經(jīng)放置好命令,此時(shí)dma控制器就需要主動(dòng)向命令隊(duì)列請(qǐng)求查詢,可能存在cpu已經(jīng)向第一命令隊(duì)列發(fā)送了命令、但由于dma控制器不知情而在cpu發(fā)送完一段時(shí)間后才發(fā)起請(qǐng)求查詢的情況,浪費(fèi)了時(shí)間;還可能存在當(dāng)cpu向命令隊(duì)列獲取命令,但相應(yīng)隊(duì)列中并沒有命令的情況,導(dǎo)致dma控制器做了無用功。因此,cpu向dma控制發(fā)送通知消息可以使得dma控制器更方便、有效地獲取并處理相應(yīng)的命令。
本發(fā)明實(shí)施例提供的一種數(shù)據(jù)傳輸方法,cpu向dma控制器發(fā)送已將需要被處理的命令發(fā)送至第一命令隊(duì)列或第二命令隊(duì)列的通知消息,可以包括:
cpu通過寄存器向dma控制器發(fā)送通知消息。
寄存器一般整合在cpu內(nèi),其讀寫速度與cpu是相匹配的。因此,通過寄存器向dma發(fā)送通知消息可以提高執(zhí)行速度。具體利用寄存器實(shí)現(xiàn)消息發(fā)送的實(shí)現(xiàn)原理與現(xiàn)有技術(shù)對(duì)應(yīng)技術(shù)方案的實(shí)現(xiàn)原理一致,在此不再贅述。
本發(fā)明實(shí)施例提供的一種數(shù)據(jù)傳輸方法,在dma控制器處理完第一命令隊(duì)列或第二命令隊(duì)列中的命令后,還包括:
dma控制器向cpu發(fā)送已經(jīng)處理完第一命令隊(duì)列或第二命令隊(duì)列中的命令的完成消息。
當(dāng)dma控制器將第一命令隊(duì)列或第二命令隊(duì)列中的命令執(zhí)行完畢后,向cpu發(fā)送相應(yīng)的完成信息,具體的,dma控制器可以向cpu發(fā)送中斷,cpu在接到中斷后能夠獲知第一命令隊(duì)列或第二命令隊(duì)列中命令執(zhí)行完畢的完成信息,進(jìn)而對(duì)內(nèi)存中的命令隊(duì)列進(jìn)行相應(yīng)的處理。dma控制器執(zhí)行完第一命令隊(duì)列或第二命令隊(duì)列后向cpu發(fā)送上述通知消息,cpu能及時(shí)獲知dma控制器的工作狀態(tài)進(jìn)而對(duì)相應(yīng)命令隊(duì)列進(jìn)行處理,否則cpu需要主動(dòng)查詢dma控制器的工作狀態(tài),可能存在dma控制器已經(jīng)執(zhí)行完第一命令隊(duì)列或第二命令隊(duì)列中的命令一段時(shí)間,cpu才查詢到的情況,浪費(fèi)了時(shí)間;還可能存在cpu查詢多次,但dma控制器還未處理完第一命令隊(duì)列或第二命令隊(duì)列中的命令的情況,此時(shí)cpu進(jìn)行了無效操作。而這里cpu對(duì)在得到完成信息后對(duì)命令隊(duì)列的處理與現(xiàn)有技術(shù)對(duì)應(yīng)技術(shù)方案的實(shí)現(xiàn)原理一致,在此不再贅述。
本發(fā)明實(shí)施例提供的一種數(shù)據(jù)傳輸方法,dma控制器獲取并處理第一命令隊(duì)列或第二命令隊(duì)列中的命令,包括:
dma控制器控制第一dma實(shí)現(xiàn)與第一命令隊(duì)列或第二命令隊(duì)列中的命令對(duì)應(yīng)的命令搬移操作,控制第二dma實(shí)現(xiàn)與第一命令隊(duì)列或第二命令隊(duì)列中的數(shù)據(jù)傳輸操作。
dma控制器控制第一dma,使第一dma專門用于進(jìn)行命令對(duì)應(yīng)的命令搬移操作;dma控制器控制第二dma,使第二dma專門用于命令對(duì)應(yīng)的數(shù)據(jù)傳輸操作。兩個(gè)dma各司其職、互不干擾,因此能使讀寫速度更快。而命令搬移操作及數(shù)據(jù)傳輸操作的具體實(shí)現(xiàn)與現(xiàn)有技術(shù)中對(duì)應(yīng)技術(shù)方案實(shí)現(xiàn)原理一致,在此不再贅述。
本發(fā)明實(shí)施例還提供了一種數(shù)據(jù)傳輸?shù)南到y(tǒng),如圖2,可以包括:
cpu11,用于:將當(dāng)前需要被處理的命令發(fā)送到第一命令隊(duì)列;在dma控制器12獲取并處理第一命令隊(duì)列中的命令的過程中,將當(dāng)前需要被處理的命令發(fā)送到第二命令隊(duì)列;在dma控制器12獲取并處理第二命令隊(duì)列中的命令的過程中,將當(dāng)前需要被處理的命令發(fā)送至第一命令隊(duì)列中,直至不存在需要被處理的命令為止;
dma控制器12,用于:獲取并處理第一命令隊(duì)列中的命令;處理完第一命令隊(duì)列中的命令后,獲取并處理第二命令隊(duì)列中的命令;處理完第二命令隊(duì)列中的命令后,獲取并處理第一命令隊(duì)列中的命令,直至第一命令隊(duì)列及第二命令隊(duì)列中均不存在需要被處理的命令為止。
本發(fā)明實(shí)施例提供的一種數(shù)據(jù)傳輸系統(tǒng),cpu還用于:
在cpu將當(dāng)前需要被處理的命令發(fā)送到第一命令隊(duì)列或第二命令隊(duì)列后,向dma控制器發(fā)送已將需要被處理的命令發(fā)送至第一命令隊(duì)列或第二命令隊(duì)列的通知消息。
本發(fā)明實(shí)施例提供的一種數(shù)據(jù)傳輸系統(tǒng),cpu可以包括:
發(fā)送模塊,用于:通過寄存器向dma控制器發(fā)送通知消息。
本發(fā)明實(shí)施例提供的一種數(shù)據(jù)傳輸系統(tǒng),其中dma控制器還用于:
在dma控制器處理完第一命令隊(duì)列或第二命令隊(duì)列中的命令后,向cpu發(fā)送已經(jīng)處理完第一命令隊(duì)列或第二命令隊(duì)列中的命令的完成消息。
本發(fā)明實(shí)施例提供的一種數(shù)據(jù)傳輸系統(tǒng),dma控制器可以包括:
控制模塊,用于:控制第一dma實(shí)現(xiàn)與第一命令隊(duì)列或第二命令隊(duì)列中的命令對(duì)應(yīng)的命令搬移操作,控制第二dma實(shí)現(xiàn)與第一命令隊(duì)列或第二命令隊(duì)列中的命令對(duì)應(yīng)的數(shù)據(jù)傳輸操作。
本發(fā)明實(shí)施例提供的一種數(shù)據(jù)傳輸?shù)南到y(tǒng)中的相關(guān)部分的說明請(qǐng)參見本發(fā)明實(shí)施例提供的一種數(shù)據(jù)傳輸方法中對(duì)應(yīng)部分的詳細(xì)說明,在此不再贅述。另外,本發(fā)明實(shí)施例提供的上述技術(shù)方案中與現(xiàn)有技術(shù)中對(duì)應(yīng)技術(shù)方案實(shí)現(xiàn)原理一致的部分并未詳細(xì)說明,以免過多贅述。
對(duì)所公開的實(shí)施例的上述說明,使本領(lǐng)域技術(shù)人員能夠?qū)崿F(xiàn)或使用本發(fā)明。對(duì)這些實(shí)施例的多種修改對(duì)本領(lǐng)域技術(shù)人員來說將是顯而易見的,本文中所定義的一般原理可以在不脫離本發(fā)明的精神或范圍的情況下,在其它實(shí)施例中實(shí)現(xiàn)。因此,本發(fā)明將不會(huì)被限制于本文所示的這些實(shí)施例,而是要符合與本文所公開的原理和新穎特點(diǎn)相一致的最寬的范圍。