專利名稱:可暫停且可重新開始的dma引擎的制作方法
技術(shù)領(lǐng)域:
此發(fā)明涉及直接存儲器存取(“DMA”)引擎。更特定來說,本發(fā)明關(guān)于一種為處理 器的過程狀態(tài)的部分的架構(gòu)DMA。
背景技術(shù):
傳統(tǒng)上,一直將DMA當(dāng)作外圍裝置。作為外圍裝置,DMA未被視為或當(dāng)作處理器 (例如,個人計算機、個人數(shù)據(jù)助理(“PDA”)、蜂窩電話或基于處理器且通常將包括一個或 一個以上DMA的其它裝置)的架構(gòu)狀態(tài)的一部分。由于傳統(tǒng)上將DMA從處理器的架構(gòu)狀態(tài)中排除,因此在多編程環(huán)境中,DMA引擎不 被視為過程狀態(tài)的一部分。相應(yīng)地,可能在操作系統(tǒng)中必須經(jīng)由監(jiān)視器來存取DMA。與包括于架構(gòu)狀態(tài)中的其它組件分開存取DMA增加存取DMA的等待時間。所屬領(lǐng) 域的技術(shù)人員應(yīng)了解,裝置(像DMA)的等待時間的增加使得DMA在一過程中使用不切實 際,尤其是當(dāng)所述過程并入有小移動或操作時。簡單來說,對于小操作,與傳統(tǒng)DMA架構(gòu)相 關(guān)聯(lián)的等待時間可如此大地增加操作的總體處理時間而使得對DMA的依賴不切實際。所屬領(lǐng)域的技術(shù)人員應(yīng)了解,計算機處理技術(shù)中一直存在增加處理效率的需要。
發(fā)明內(nèi)容
本發(fā)明提供至少一種增加處理效率的方法。具體來說,本發(fā)明提供一種為過程狀態(tài)的部分的架構(gòu)DMA??赏V辜爸匦麻_始所述 DMA,從而準(zhǔn)許暫停及恢復(fù)復(fù)制操作,而對所述DMA無顯著有害處理作用。本發(fā)明提供一種操作直接存儲器存取引擎的方法。在所述方法中,針對第一數(shù)目 個字節(jié)起始復(fù)制。所述第一數(shù)目個字節(jié)待從第一源存儲器位置復(fù)制到第一目的地存儲器位 置。在起始所述復(fù)制之后,在復(fù)制所述第一數(shù)目個字節(jié)之前發(fā)出暫停指令。響應(yīng)于所述暫 停指令,停止所述復(fù)制。因此,確立第二數(shù)目個字節(jié)。所述第二數(shù)目個字節(jié)為從所述第一數(shù) 目個字節(jié)剩余的待復(fù)制的那些字節(jié)。在暫停所述轉(zhuǎn)移之后,識別所述第二數(shù)目個字節(jié)的數(shù) 量。接著產(chǎn)生且存儲提供所述第二數(shù)目個字節(jié)的數(shù)量的數(shù)量信息。還識別第二源存儲器位 置。所述第二源存儲器位置識別存儲所述第二數(shù)目個字節(jié)的地方。接著產(chǎn)生且存儲第二源 存儲器位置信息。接著識別第二目的地存儲器位置。所述第二目的地存儲器位置識別待將 所述第二數(shù)目個字節(jié)轉(zhuǎn)移到的地方。接著產(chǎn)生且存儲第二目的地存儲器位置信息。在此方法的一個所涵蓋變化形式中,從直接存儲器存取引擎中的至少一個寄存器 檢索所述數(shù)量信息、所述第二源存儲器位置信息及所述第二目的地存儲器位置信息??墒?用一個寄存器或數(shù)個寄存器。在存在數(shù)個寄存器的情況下,一個寄存器可為源寄存器,另一個寄存器可為目的地寄存器。第三寄存器可為數(shù)量寄存器。所述方法還可包括通過使用所述數(shù)量信息、所述第二源存儲器位置信息及所述第 二目的地存儲器位置信息起始將所述第二數(shù)目個字節(jié)從所述第二源存儲器位置復(fù)制到第 二目的地存儲器位置來恢復(fù)已暫停的轉(zhuǎn)移。相對于此方法,存在用于在發(fā)出所述暫停指令之后重新起始所述復(fù)制操作的若干 所涵蓋變化形式。在一個所涵蓋實施例中,所述方法提供依據(jù)所述第二源存儲器位置信息確定待讀 取的下一地址且依據(jù)所述第二目的地存儲器位置信息確定待寫入的下一地址。接著,所述 方法沖洗所有即將來臨的讀取及寫入。所述方法通過從所述待讀取的下一地址及所述待寫 入的下一地址確定遞減值來繼續(xù)進(jìn)行。所述遞減值識別所述待讀取的下一地址比所述待寫 入的下一地址提前的字節(jié)數(shù)目。接著所述方法將所述待讀取的下一地址遞減所述遞減值以 產(chǎn)生經(jīng)遞減的讀取地址。將所述第二數(shù)目個字節(jié)從所述第二存儲器位置復(fù)制到所述第二存 儲器目的地接著至少基于所述經(jīng)遞減的讀取地址、所述待寫入的下一地址及所述數(shù)量信息 來繼續(xù)進(jìn)行。在第二所涵蓋變化形式中,所述方法包括依據(jù)所述第二源存儲器位置信息確定待 讀取的下一地址且依據(jù)所述第二目的地存儲器位置信息確定待寫入的下一地址。所述方法 追蹤所述待讀取的下一地址比所述待寫入的下一地址提前的字節(jié)數(shù)目且確立運行超前值。 存儲所述運行超前值以便可通過所述運行超前值調(diào)整所述待讀取的下一地址。此準(zhǔn)許產(chǎn)生 經(jīng)調(diào)整的待讀取的下一地址。復(fù)制接著至少基于所述經(jīng)調(diào)整的待讀取的下一地址、所述待 寫入的下一地址及所述數(shù)量信息來繼續(xù)進(jìn)行。在第三所涵蓋變化形式中,所述方法涵蓋依據(jù)所述第二源存儲器位置信息確定待 讀取的下一地址且依據(jù)所述第二目的地存儲器位置信息確定待寫入的下一地址。將所述第 二數(shù)目個字節(jié)從所述第二存儲器位置復(fù)制到所述第二存儲器目的地使用所述待讀取的下 一地址、所述待寫入的下一地址及所述數(shù)量信息來繼續(xù)進(jìn)行。在所述方法的第四所涵蓋變化形式中,保持所述第一源存儲器位置的識別、所述 第一目的地存儲器位置的識別及所述第一數(shù)目個字節(jié)的計數(shù)。在檢索所述數(shù)量信息之后, 至少基于所述第一源存儲器位置的所述識別、所述第一數(shù)目個字節(jié)的所述計數(shù)及所述數(shù)量 信息確立待讀取的下一地址。接著,至少基于所述第一目的地存儲器位置的所述識別、所述 第一數(shù)目個字節(jié)的所述計數(shù)及所述數(shù)量信息確立待寫入的下一地址。將所述第二數(shù)目個字 節(jié)從所述第二存儲器位置復(fù)制到所述第二存儲器目的地至少依賴于所述待讀取的下一地 址、所述待寫入的下一地址、所述第一數(shù)目個字節(jié)的所述計數(shù)及所述數(shù)量信息。在第五所涵蓋變化形式中,保持所述待寫入的下一地址的指示。在發(fā)出所述暫停 指令之后,停止從所述第一源存儲器位置讀取所述第一數(shù)目個字節(jié)。另外,寫入針對從在停 止所述讀取之前讀取的字節(jié)剩余的字節(jié)中的任一者繼續(xù)。接著,確定來自所述第二源存儲 器位置信息的待讀取的下一地址及來自所述第二目的地存儲器位置信息的待寫入的下一 地址。將所述第二數(shù)目個字節(jié)從所述第二存儲器位置復(fù)制到所述第二存儲器目的地至少依 賴于所述待讀取的下一地址、所述待寫入的下一地址及所述數(shù)量信息。根據(jù)以下論述及其附圖將明了本發(fā)明的其它方面。
結(jié)合圖解說明一個或一個以上方面的圖式來描述本發(fā)明,圖式中圖1是圖解說明本發(fā)明所涵蓋的方法的一個實施例的流程圖的第一部分;圖2是圖解說明在圖1中開始的方法的流程圖的第二部分,此圖為圖1中所圖解 說明的方法的所述部分的繼續(xù);圖3是圖解說明在圖1中開始的方法的流程圖的第三部分,此圖為圖2中所圖解 說明的方法的所述部分的繼續(xù);圖4是可包括于圖1到圖3中所圖解說明的方法中的額外操作的流程圖;圖5是圖解說明圖1到圖3中所圖解說明的方法的第一所涵蓋變化形式的流程 圖;圖6是圖解說明圖1到圖3中所圖解說明的方法的第二所涵蓋變化形式的流程 圖;圖7是圖解說明圖1到圖3中所圖解說明的方法的第三所涵蓋變化形式的流程 圖;圖8是圖解說明圖1到圖3中所圖解說明的方法的第四所涵蓋變化形式的流程 圖;及圖9是圖解說明圖1到圖3中所圖解說明的方法的第五所涵蓋變化形式的流程 圖。
具體實施例方式結(jié)合下文詳細(xì)說明的具體實施例及實例來描述本發(fā)明。然而,并不打算將本發(fā)明 完全限制于所論述的實施例及實例。相反,打算由所述實施例及實例界定本發(fā)明的寬廣范 圍。所屬領(lǐng)域的技術(shù)人員應(yīng)了解,所述實施例及實例存在眾多等效形式及變化形式,而此不 背離本發(fā)明的范圍。打算由本發(fā)明囊括那些實施例及變化形式。作為序言,且所屬領(lǐng)域的技術(shù)人員應(yīng)了解,DMA引擎用于將值從存儲器中的一個位 置復(fù)制到另一位置。其最簡單形式為DMA引擎將值從存儲器的某鄰接塊復(fù)制到某其它塊。 DMA引擎的此基本復(fù)制功能的一個實例由以下碼段#1提供。碼段#1for(i = 0 ;i < CNT ;i++) {DST[i] = SRC[i];}為使用來自處理器的簡單DMA,通常所述處理器將源地址、目的地地址及轉(zhuǎn)移大小 寫入到選定寄存器。所述處理器接著通過向控制寄存器寫入來起始所述轉(zhuǎn)移。當(dāng)已復(fù)制所 有值時,DMA通過向控制及/或狀態(tài)寄存器寫入及/或在所述處理器中觸發(fā)中斷來發(fā)信號 通知轉(zhuǎn)移的完成。更復(fù)雜的DMA能夠進(jìn)行例如“散布”操作等操作?!吧⒉肌笔侵竼蝹€程序呼叫借以 從單個數(shù)據(jù)串流將數(shù)據(jù)順序讀取到多個緩沖器的操作??蓪⑸⒉疾僮鲗懗纱a,如以下碼段 #2中所列舉。碼段#2
for(i = 0 ;i < CNT ;i++} {DST[OFF[i]] = SRC[i];}“SRC”是指源的地址?!癉ST”是指目的地的地址?!癘FF”是指偏移陣列的地址。在一個所涵蓋實施例中,散布操作從多個源存儲器位置取數(shù)據(jù)且將所述數(shù)據(jù)“散 布”到若干目的地存儲器位置。如上文所指示,散布操作也可從單個數(shù)據(jù)串流操作,其串流 化來自多個源存儲器位置的數(shù)據(jù)。如果是,所述散布操作可包括若干數(shù)據(jù)操縱。具體來說, 此種散布操作可(1)讀取待復(fù)制的順序數(shù)據(jù)串流,⑵讀取順序地址串流或索引串流,及 (3)如果使用索引串流,那么通過將每一索引添加到單個基地址來形成地址串流。接著可將 數(shù)據(jù)中的每一元素復(fù)制到串流中的對應(yīng)地址。應(yīng)注意,并非所有散布操作需要這些操作,而 僅作為對所屬領(lǐng)域的技術(shù)人員的引導(dǎo)而提供,以幫助理解本發(fā)明的一個方面。更復(fù)雜的DMA還能夠進(jìn)行具體操作,稱作“收集”操作?!笆占辈僮魇瞧渲袉蝹€程 序呼叫將數(shù)據(jù)從多個緩沖器順序?qū)懭氲絾蝹€數(shù)據(jù)串流的那些操作??蓪⑹占僮鲗懗纱a, 如以下碼段#3中所列舉。碼段#3for(i = 0 ;i < CNT ;i++) {DST [i] = SRC[OFF[i]];}與碼段#2相同,“SRC”是指源的地址。類似地,“DST”是指目的地的地址。另夕卜, “OFF”是指偏移陣列的地址。關(guān)于“收集”操作,可從多個源存儲器位置收集信息??山又鴮⑺鰯?shù)據(jù)提供到多 個目的地存儲器位置,可能經(jīng)由散布算法。或者,可將所述數(shù)據(jù)收集且集中為單個數(shù)據(jù)串流 以進(jìn)行進(jìn)一步處理。所屬領(lǐng)域的技術(shù)人員應(yīng)了解,收集操作至少在一些方式上進(jìn)行散布操 作的相反事情。舉例來說,收集操作可(1)讀取地址串流或索引串流且通過將其添加到基 址來產(chǎn)生地址串流,或( 從所述地址串流中的位置讀取數(shù)據(jù),從而形成順序數(shù)據(jù)串流。接 著可將所述順序數(shù)據(jù)串流順序復(fù)制到所述目的地。提供此論述以闡明本發(fā)明的至少此一個 方面。并不打算由其限制本發(fā)明。另外,更復(fù)雜的DMA能夠進(jìn)行“多電平”操作。多電平操作是其中從多個目的地讀 取來自多個源的數(shù)據(jù)及/或?qū)碜远鄠€源的數(shù)據(jù)寫入到多個目的地的那些操作??蓪⒍嚯?平操作寫成碼,如以下碼段#4中所列舉。碼段#4for(i = 0 ;i < CNTO ;i++) {for(j = 0 ;j < CNTl ;j++)DST[i] [j] = SRC[i] [j];}}與碼段#2及#3相同,“SRC”是指源的地址。“DST”是指目的地的地址。“OFF”是 指偏移陣列的地址??山M合散布、收集及多電平操作以產(chǎn)生另外其它功能,如所屬領(lǐng)域的技術(shù)人員應(yīng)了解。相應(yīng)地,此處不提供關(guān)于這些功能的進(jìn)一步細(xì)節(jié)。上下文切換再次參照典型的DMA引擎,在所述引擎起始轉(zhuǎn)移之后,所述引擎運行完成。所述 DMA引擎接著發(fā)信號通知處理器轉(zhuǎn)移已完成。此后,所述DMA引擎執(zhí)行第二轉(zhuǎn)移。視需要重 復(fù)所述過程。所屬領(lǐng)域的技術(shù)人員應(yīng)了解,此只是描述DMA引擎的操作的一個方式。存在設(shè)立DMA及DMA系列的其它方式。舉例來說,一些DMA支持使用“影子寄存 器”。影子寄存器準(zhǔn)許在當(dāng)前DMA轉(zhuǎn)移處于“飛行中”或處理中時以下一轉(zhuǎn)移編程DMA。因 此,所述影子寄存器促進(jìn)所述下一轉(zhuǎn)移,因為所述當(dāng)前轉(zhuǎn)移一完成所述DMA就可開始所述 下一轉(zhuǎn)移。其它DMA支持“鏈接”。此方法不同于影子寄存器方法。替代直接編程所述DMA, 以所述轉(zhuǎn)移的細(xì)節(jié)寫入控制塊。將所述下一轉(zhuǎn)移寫入到控制塊,且設(shè)定所述第一控制塊中 的位置以指向此下一轉(zhuǎn)移。以此方式,可確立轉(zhuǎn)移鏈。所述DMA—完成由控制塊確定的所 述轉(zhuǎn)移,其就繼續(xù)執(zhí)行由所述鏈中的下一塊確定的所述轉(zhuǎn)移。所屬領(lǐng)域的技術(shù)人員應(yīng)明了,這些替代設(shè)立通常也經(jīng)受關(guān)于DMA所述的相同問 題。特定來說,由于數(shù)個缺陷(包括上述等待時間問題),DMA不太適于執(zhí)行所有類型的操 作。舉例來說,DMA的現(xiàn)有架構(gòu)不提供掛起正在進(jìn)行的轉(zhuǎn)移、編程且執(zhí)行新轉(zhuǎn)移且接著恢復(fù) 所述經(jīng)掛起的轉(zhuǎn)移的機制。另外,如果多個源嘗試編程DMA引擎,那么這些源必須協(xié)調(diào)對所 述DMA引擎的努力,以防止同時存取或防止多個指令彼此覆寫。為促進(jìn)理解現(xiàn)有技術(shù)中關(guān)于DMA的缺陷,提供以下實例。具體來說,所述實例囊括 其中將使用DMA來在通用處理器上執(zhí)行數(shù)據(jù)轉(zhuǎn)移的例示。為簡化所述實例,假設(shè)所有存儲 器存取處于真實模式中。假設(shè)真實模式操作避免當(dāng)針對虛擬存儲器編程時出現(xiàn)的復(fù)雜化, 如所屬領(lǐng)域的技術(shù)人員應(yīng)理解。具體來說,通過在此實例中忽視虛擬存儲器,也可避免由虛 擬存儲器翻譯引入的復(fù)雜化。對于此實例,出現(xiàn)數(shù)個問題,如下文所詳細(xì)說明。第一問題可在被中斷的轉(zhuǎn)移過程的上下文中出現(xiàn)且將所述上下文切換到另一轉(zhuǎn) 移操作。具體來說,如果在正編程DMA但在DMA向控制寄存器寫入之前的間隔期間中斷所 述轉(zhuǎn)移過程,那么所述DMA寄存器必須保存為過程狀態(tài)的部分。因此,在可恢復(fù)所述轉(zhuǎn)移操 作之前,必須重新形成所述DMA寄存器(或“寫入回”到適當(dāng)?shù)刂?。可出現(xiàn)的第二問題關(guān)于編程長運行DMA的過程??闪⒓疵髁?,當(dāng)過程編程長運行 DMA且接著上下文切換所述過程時,所述新過程在被執(zhí)行之前必須等待所述第一轉(zhuǎn)移過程 的完成。因此,所述第一轉(zhuǎn)移操作的執(zhí)行使所述第二轉(zhuǎn)移操作的執(zhí)行停轉(zhuǎn)。可出現(xiàn)的關(guān)于DMA處理的第三問題在多線程或多處理器環(huán)境的上下文中出現(xiàn)。具 體來說,在多線程或多處理器機器中,多個過程可同時嘗試重新編程所述DMA。由于僅一個 過程可在任一給定時間進(jìn)行,因此所述多個過程需要執(zhí)行互斥算法。所屬領(lǐng)域的技術(shù)人員 應(yīng)了解,互斥算法增加與編程DMA相關(guān)聯(lián)的等待時間周期。可出現(xiàn)的第四問題關(guān)于通過DMA產(chǎn)生中斷信號,其可在轉(zhuǎn)移操作的結(jié)束時發(fā)出。 具體來說,當(dāng)DMA借助中斷發(fā)信號通知轉(zhuǎn)移操作的完成時,不能保證編程DMA的過程是當(dāng)前 運行的過程。因此,當(dāng)被發(fā)出時,必須通過共享中斷處置器捕獲完成中斷,所述共享中斷處 置器決定當(dāng)前運行的過程是否是必須將所述中斷遞送到其的過程。如果處理器使用虛擬存儲器,那么額外問題出現(xiàn),因為DMA引擎必須在虛擬與真 實地址之間翻譯。涵蓋可采用操作系統(tǒng)來將所需轉(zhuǎn)移翻譯成真實地址,且將源及目標(biāo)頁釘
9住。然而,針對此翻譯對操作系統(tǒng)的依賴劇烈增加起始DMA的等待時間。較輕加權(quán)方案(即, 等待時間負(fù)擔(dān)較小的方案)通常依賴于DMA中的虛擬地址。這些方案通過處理器的翻譯機 制運行DMA轉(zhuǎn)移地址來進(jìn)行操作。此方法的問題在于,在上下文切換之后,處理器翻譯機制 可能對于先前過程無效。因此,必須存在用于停止DMA以避免處理中的沖突的方法。這些問題中的每一者呈現(xiàn)通過DMA執(zhí)行轉(zhuǎn)移操作中的挑戰(zhàn)。本發(fā)明提供這些問題 的解決方案??芍匦麻_始的停Ih本發(fā)明提供塊-轉(zhuǎn)移DMA的可重新開始的停止。塊-轉(zhuǎn)移DMA的可重新開始的停 止為其中可在轉(zhuǎn)移中間中停止DMA者。一旦已停止所述轉(zhuǎn)移,那么可確定(1)剩下多少字 節(jié)待轉(zhuǎn)移,(2)待讀取的下一字節(jié)的地址,及C3)待寫入的下一字節(jié)的地址??蓛H通過讀取 DMA的控制寄存器來實施此方法。也涵蓋其它可能的實施方案。簡單本發(fā)明所呈現(xiàn)的第一變化形式稱作“簡單”實施方案。在所述簡單實施方案中,保 持源、目的地及字節(jié)計數(shù)的初始值的副本連同經(jīng)寫入字節(jié)的數(shù)目的計數(shù)。由于保持此信息, 因此可通過將所述初始值加到經(jīng)轉(zhuǎn)移字節(jié)計數(shù)及/或從經(jīng)轉(zhuǎn)移字節(jié)計數(shù)中減去所述初始 值來確定DMA轉(zhuǎn)移操作的重新開始狀態(tài)。所屬領(lǐng)域的技術(shù)人員應(yīng)了解,此簡單方法是低效 的。此低效的一個原因在于,DMA的實施方案需要系統(tǒng)追蹤待讀取及/或待寫入的下一字 節(jié)。MJ^本發(fā)明所呈現(xiàn)的第二變化形式稱作“耗盡”實施方案。在此實施方案中,DMA保持 待讀取及/或待寫入的下一地址的運行計數(shù)。所述DMA還追蹤剩余的待讀取的字節(jié)的數(shù)目。 當(dāng)在轉(zhuǎn)移中間停止時,DMA停止讀取且等待已經(jīng)被讀取以寫入到存儲器的字節(jié)。一旦所述 字節(jié)已被寫入到存儲器,那么將所述DMA置于可重新開始狀態(tài)中,所述DMA可從其完成所述 轉(zhuǎn)移操作。應(yīng)明了,此實施方案經(jīng)受至少一個缺點。具體來說,必須在DMA處于可重新開始 狀態(tài)中之前寫入所有即將來臨的讀取。此布置可能在所述轉(zhuǎn)移操作的執(zhí)行期間產(chǎn)生等待時 間。早期停止本發(fā)明所呈現(xiàn)的第三變化形式稱作“早期停止”實施方案。在此實施方案中,DMA 保持待讀取及/或待寫入的下一地址的運行計數(shù)。所述DMA還保持剩下的待寫入字節(jié)的數(shù) 目。當(dāng)所述DMA在轉(zhuǎn)移中間停止時,所述DMA停止寫入且沖洗所有即將來臨的讀取及/或 寫入。通常,在此實施例中,讀取地址比寫入地址超前運行(即,與寫入相比,已讀取更多的 字節(jié))。因此,必須將讀取地址遞減讀取地址比寫入地址超前的字節(jié)量。此方法不經(jīng)受結(jié)合 前兩種方法論述的種類的缺點且因此被提議為用于實施本發(fā)明的一種有吸引力的方法。運行超前第四變化形式稱作“運行超前”實施方案。除使用單獨的寄存器(即,額外寄存器) 來追蹤讀取地址比寫入地址超前多少(即,經(jīng)讀取與經(jīng)寫入字節(jié)的數(shù)目之間的差)外,此實 施方案類似于早期停止實施方案。此值稱作“運行超前”值。由于運行超前值通常較小,因 此可相當(dāng)簡單且便宜地實施所述額外寄存器。換句話說,盡管運行超前方法需要額外寄存 器,但所述額外寄存器不顯著增加與DMA的操作相關(guān)聯(lián)的總體“成本”。在此實施方案中,為恢復(fù)重新開始狀態(tài),處理器從讀取地址中減去所述運行超前值以獲得正確的重新開始讀取 地址。偏移狀杰如上文所論述,DMA可實施散布及收集操作兩者。當(dāng)DMA忙于散布及/或收集時, 偏移的讀數(shù)往往比數(shù)據(jù)的讀取及/或?qū)懭氤斑\行。為恢復(fù)偏移的重新開始狀態(tài),則有必 要使用上文所描述的早期停止或運行超前技術(shù)的某變化形式。架構(gòu)寄存器傳統(tǒng)上,一直將DMA當(dāng)作外圍裝置,且因此經(jīng)由加載及/或存儲操作或經(jīng)由特殊輸 入及/或輸出指令來存取DMA寄存器。由于本發(fā)明的一個目標(biāo)是使DMA成為處理器上下文的一部分,因此使DMA寄存器 部分成為處理器的架構(gòu)寄存器狀態(tài)的一部分。在本發(fā)明中,DMA寄存器為可經(jīng)由與其它專 用寄存器相同的指令存取的專用寄存器。關(guān)于上文所論述的本發(fā)明的各種實施例,現(xiàn)在參照其附圖。關(guān)于附圖,所識別操作 中的任一者可能囊括一個或一個以上步驟。此外,在一些例示中,可將不同操作組合成單個 步驟。打算由本發(fā)明囊括這些可能性。圖1是概述本發(fā)明的基礎(chǔ)方法的流程圖。為參考,以參考識別符10提供所述方法。 涵蓋在處理器(例如,DMA引擎)上執(zhí)行方法10。所述方法在12處開始。在開始12之后, 方法10繼續(xù)進(jìn)行到14,其中起始將第一數(shù)目個字節(jié)從第一源存儲器位置復(fù)制到第一目的 地存儲器位置。在于14處起始所述復(fù)制之后,在將所述第一數(shù)目個字節(jié)從所述第一源存儲 器位置復(fù)制到所述第一目的地存儲器位置之前在16處發(fā)出暫停指令。在18處,響應(yīng)于在 16處發(fā)出所述暫停指令,暫停所述復(fù)制,從而確立第二數(shù)目個字節(jié),其包含從所述第一數(shù)目 個字節(jié)剩余的待復(fù)制的那些字節(jié)。接著,在20處,識別所述第二數(shù)目個字節(jié)的數(shù)量。圖1 包括轉(zhuǎn)變塊22,其指示所述方法在圖2中繼續(xù)。圖2提供圖1中所圖解說明的方法的繼續(xù)。具體來說,一旦識別所述數(shù)量,那么在 M處產(chǎn)生關(guān)于所述第二數(shù)目個字節(jié)的數(shù)量的數(shù)量信息。接著在沈處存儲此數(shù)量信息。所 述方法從沈繼續(xù)進(jìn)行到觀,其中識別所述第二源存儲器位置。所述第二源存儲器位置囊括 存儲所述第二數(shù)目個字節(jié)的位置。方法10從觀繼續(xù)進(jìn)行到30,其中產(chǎn)生第二源存儲器位 置信息。應(yīng)明了,所述第二源存儲器位置信息囊括其中存儲所述第二數(shù)目個字節(jié)的所述第 二源存儲器位置。接著,在32處,存儲所述第二存儲器源位置信息。圖2包括轉(zhuǎn)變塊34,其 指示方法10繼續(xù)到圖3。圖3圖解說明方法10的剩余部分。在圖3中,方法10從32繼續(xù),其中在36處識 別第二目的地存儲器位置。所述第二目的地存儲器位置囊括將所述第二數(shù)目個字節(jié)轉(zhuǎn)移到 其中的目的地。方法10從36繼續(xù)到38。在38處,產(chǎn)生第二目的地存儲器位置信息。所述 第二目的地存儲器位置信息囊括將所述第二數(shù)目個字節(jié)存儲到其中的所述第二目的地存 儲器位置。方法10接著繼續(xù)進(jìn)行到40,其中存儲所述第二目的地存儲器位置信息。方法 10在42處結(jié)束??蓮膱D1到圖3 了解,方法10囊括形成DMA引擎的基本暫停操作的操作。為恢復(fù) 將字節(jié)從所述源位置轉(zhuǎn)移到所述目的地位置,需要進(jìn)一步處理。圖4到圖9詳細(xì)說明本發(fā) 明的針對重新開始操作的不同實施例及方面。
作為序言,所述重新開始操作的各種實施例囊括所述已暫停的復(fù)制過程的繼續(xù)。 在此方面,所述復(fù)制過程如之前那樣繼續(xù)。在經(jīng)恢復(fù)的復(fù)制操作中,將所述第二字節(jié)從所述 源位置復(fù)制到所述目的地位置。如何恢復(fù)所述復(fù)制為結(jié)合圖4到圖9所描述的實施例的方 面的基礎(chǔ)。圖4提供當(dāng)DMA引擎在于16處發(fā)出所述暫停指令之后恢復(fù)所述復(fù)制操作時檢索 DMA引擎的操作的具體信息。具體來說,圖4圖解說明在46處開始的方法44的流程圖。涵 蓋方法44為方法10的繼續(xù),如所屬領(lǐng)域的技術(shù)人員應(yīng)明了。在方法44中,在48處檢索數(shù) 量信息。接著,在50處,檢索所述第二源存儲器位置信息。此后,在52處檢索所述第二目 的地存儲器位置信息。所屬領(lǐng)域的技術(shù)人員應(yīng)了解,一旦DMA引擎檢索到這三片信息,那么 DMA引擎可繼續(xù)進(jìn)行以恢復(fù)圖1到圖3中所詳細(xì)說明的已暫停的復(fù)制操作。對于方法44,涵蓋從直接存儲器存取引擎中的至少一個寄存器讀取所述數(shù)量信 息、所述第二源存儲器位置信息及所述第二目的地存儲器位置信息。由于從寄存器檢索三 種類型的信息,因此不需要DMA引擎存取存儲器位置。因此,DMA引擎可比在存取存儲器位 置的情況下更快速地繼續(xù)進(jìn)行以恢復(fù)所述已暫停的復(fù)制操作。所屬領(lǐng)域的技術(shù)人員應(yīng)明 了,為謹(jǐn)慎起見,高效的處理器經(jīng)設(shè)計以避免存儲器存取。對存儲器的存取通常計及當(dāng)執(zhí)行 指令時的最長延遲。如上所述,可從至少一個寄存器讀取所述數(shù)量信息、所述第二源存儲器位置信息 及所述第二目的地存儲器位置信息。在一個所涵蓋實施例中,可從單個寄存器讀取所述三 種類型的信息。然而,也涵蓋其它變化形式。舉例來說,可采用數(shù)個寄存器。此包括兩個或 兩個以上寄存器。所述兩個或兩個以上寄存器可包括其中保持所述第一源存儲器位置的至 少一個源寄存器及其中保持所述第一目的地存儲器位置的至少一個目的地寄存器。另外, 所述兩個或兩個以上寄存器可囊括其中保持所述數(shù)量信息的數(shù)量寄存器。返回到圖4,一旦從所述寄存器檢索到所述數(shù)量信息、所述第二源存儲器位置信息 及所述第二目的地存儲器位置信息,所述方法繼續(xù)進(jìn)行到M,其中通過使用所述數(shù)量信息、 所述第二源存儲器位置信息及所述第二目的地存儲器位置信息起始將所述第二數(shù)目個字 節(jié)從所述第二源存儲器位置復(fù)制到第二目的地存儲器位置來恢復(fù)所述已暫停的轉(zhuǎn)移。方法 44接著在56處結(jié)束。如以上論述中所述,存在借以在一旦恢復(fù)所述復(fù)制操作的情況下可進(jìn)行將字節(jié)從 源位置復(fù)制到目的地位置的數(shù)個不同實施例。第一實施例是指“早期停止”方法58。早期 停止方法58的流程圖提供于圖5中。應(yīng)注意,提供名稱“早期停止方法”僅為將第一實施 例與預(yù)期歸屬于本發(fā)明的范圍內(nèi)的其它實施例分開。并不打算由所述名稱限制方法58。此 外,當(dāng)也通過具體名稱參考其它實施例時,并不打算由所述名稱限制本發(fā)明。使用所述名稱 僅為促進(jìn)對本發(fā)明的理解。參照圖5,打算早期停止方法58在檢索到所述數(shù)量信息、所述第二源存儲器位置 信息及所述第二目的地存儲器位置信息之后繼續(xù)。結(jié)合圖4的論述在48、50及52處論述 這三個操作。方法58在60處開始。方法58從60繼續(xù)進(jìn)行到62,其中確定來自所述第二源存 儲器位置信息的待讀取的下一地址。方法58接著繼續(xù)進(jìn)行到64,其中確定來自所述第二 目的地存儲器位置信息的待寫入的下一地址。接著在66處沖洗所有即將來臨的讀取及寫入。此意味著刪除所有即將來臨的讀取及寫入。方法58從66繼續(xù)進(jìn)行到68,其中從所述 待讀取的下一地址及所述待寫入的下一地址確定遞減值。所述遞減值識別所述待讀取的下 一地址比所述待寫入的下一地址提前的字節(jié)數(shù)目。在70處,將所述待讀取的下一地址遞減 所述遞減值,從而產(chǎn)生經(jīng)遞減的讀取地址。一旦確定此遞減讀取地址,那么所述復(fù)制操作可 恢復(fù)。具體來說,可至少基于所述經(jīng)遞減的讀取地址、所述待寫入的下一地址及所述數(shù)量信 息來將所述第二數(shù)目個字節(jié)從所述第二存儲器位置復(fù)制到所述第二存儲器目的地。方法58 在72處結(jié)束。圖6圖解說明方法74,其稱作“運行超前”方法。也打算運行超前方法74在圖4 中所詳細(xì)說明的操作52之后起始。運行超前方法74在76處開始。方法74接著繼續(xù)進(jìn)行 到78,其中確定來自所述第二源存儲器位置信息的待讀取的下一地址。接著,在80處,確定 來自所述第二目的地存儲器位置信息的待寫入的下一地址。在方法74中,針對運行超前值提供追蹤。所述運行超前值為所述待讀取的下一地 址比所述待寫入的下一地址提前的字節(jié)數(shù)目。通過追蹤此信息,可在82處確立運行超前 值。在84處存儲所述運行超前值。為了 DMA引擎可恢復(fù)所述復(fù)制操作,在86處檢索所述 運行超前值。明顯地,此操作在隨后時間發(fā)生,當(dāng)恢復(fù)所述復(fù)制操作為適當(dāng)時。最后,在88 處,通過所述運行超前值調(diào)整所述待讀取的下一地址,從而產(chǎn)生經(jīng)調(diào)整的待讀取的下一地 址。一旦已確定所述待讀取的下一地址,那么方法74可繼續(xù)進(jìn)行以恢復(fù)所述已暫停的復(fù)制 操作。將所述第二數(shù)目個字節(jié)從所述第二存儲器位置復(fù)制到所述第二存儲器目的地接著至 少基于所述經(jīng)調(diào)整的待讀取的下一地址、所述待寫入的下一地址及所述數(shù)量信息來繼續(xù)進(jìn) 行。方法74在90處結(jié)束。圖7提供本發(fā)明的方法的第三實施例的流程圖。此方法稱作“可重新開始的停止” 方法92。如圖7中所指示,方法92在94處開始。方法92接著繼續(xù)進(jìn)行到96,其中確定來 自所述第二源存儲器位置信息的待讀取的下一地址。接著,在98處,確定來自所述第二目 的地存儲器位置信息的待寫入的下一地址。借助這兩個信息位,可使用所述待讀取的下一 地址、所述待寫入的下一地址及所述數(shù)量信息來恢復(fù)將所述第二數(shù)目個字節(jié)從所述第二存 儲器位置復(fù)制到所述第二存儲器目的地。方法92在100處結(jié)束。圖8提供本文中稱作“簡單”方法102的方法的流程圖。簡單方法102為用于恢 復(fù)已暫停的復(fù)制指令的方法的第四實施例。也打算方法102在圖3中所詳細(xì)說明的操作40 之后開始。參照圖8,簡單方法102在104處開始。方法102從104繼續(xù)進(jìn)行到106,其中保持 所述第一源存儲器位置的識別。接著,在108處,保持所述第一目的地存儲器位置的識別。 此后,在110處,保持所述第一數(shù)目個字節(jié)的計數(shù)。在隨后時刻,在恢復(fù)所述已暫停的復(fù)制 操作之前,方法102在112處檢索數(shù)量信息。在114處,方法102至少基于所述第一源存儲 器位置的所述識別、所述第一數(shù)目個字節(jié)的所述計數(shù)及所述數(shù)量信息確立待讀取的下一地 址。在116處,方法102至少基于所述第一目的地存儲器位置的所述識別、所述第一數(shù)目個 字節(jié)的所述計數(shù)及所述數(shù)量信息確立待寫入的下一地址。自此,方法102可恢復(fù)所述已暫 停的復(fù)制。此方法中的經(jīng)恢復(fù)的復(fù)制至少依賴于所述待讀取的下一地址、所述待寫入的下 一地址、所述第一數(shù)目個字節(jié)的所述計數(shù)及所述數(shù)量信息。方法102在118處結(jié)束。圖9圖解說明方法120,其在本文中稱作“耗盡”方法。此外所涵蓋的歸屬于本發(fā)明的范圍內(nèi)的第五實施例。像方法102,打算耗盡方法120跟隨圖1到圖3中所圖解說明的 方法10。如圖9中所圖解說明,耗盡方法120在122處開始。在IM處,方法120保持所述 待讀取的下一地址的指示。在1 處,方法120保持所述待寫入的下一地址的指示。在1 處,在暫停指令之后,方法120停止從所述第一源存儲器位置讀取所述第一數(shù)目個字節(jié)。在 130處,方法120停止將從在停止所述讀取之前讀取的字節(jié)剩余的任何字節(jié)寫入到所述第 一目的地存儲器位置。接著,在132處,方法120依據(jù)所述第二源存儲器位置信息確定待讀 取的下一地址。在134處,確定來自所述第二目的地存儲器位置信息的待寫入的下一地址。 因此,將所述第二數(shù)目個字節(jié)從所述第二存儲器位置復(fù)制到所述第二存儲器目的地可至少 基于所述待讀取的下一地址、所述待寫入的下一地址及所述數(shù)量信息來繼續(xù)進(jìn)行。方法120 在136處結(jié)束。如上所述,本發(fā)明的方法可在散布及/或收集操作的上下文中應(yīng)用。在收集上下 文中,所述方法可包括其中從所述第一源存儲器位置檢索第一數(shù)目個字節(jié)的操作,所述第 一源存儲器位置分布于多個緩沖器中。接著,可將所述第一數(shù)目個字節(jié)緩沖為單個數(shù)據(jù)串 流。在此之后可采用散布操作。如果如此,所述方法可包括從所述單個數(shù)據(jù)串流將所述第 一數(shù)目個字節(jié)提供到所述第一目的地存儲器位置的額外操作。在此上下文下,所述第一目 的地存儲器位置可分布于多個緩沖器中?;蛘?,收集操作可直接從多個第一目的地存儲器 位置拉出信息。接著可將分布引導(dǎo)到多個緩沖器。如上所述,已結(jié)合數(shù)個具體實施例描述了本發(fā)明。本發(fā)明不打算完全受所描述實 施例的限制。相反,本發(fā)明打算囊括任何等效形式及變化形式,如所屬領(lǐng)域的技術(shù)人員應(yīng)明 了。
權(quán)利要求
1.一種操作直接存儲器存取引擎的方法,其包含起始將第一數(shù)目個字節(jié)從第一源存儲器位置復(fù)制到第一目的地存儲器位置; 在起始所述復(fù)制之后,在將所述第一數(shù)目個字節(jié)從所述第一源存儲器位置復(fù)制到所述 第一目的地存儲器位置之前發(fā)出暫停指令;響應(yīng)于發(fā)出所述暫停指令,暫停所述復(fù)制,從而確立第二數(shù)目個字節(jié),其包含從所述第 一數(shù)目個字節(jié)剩余的待復(fù)制的那些字節(jié); 識別所述第二數(shù)目個字節(jié)的數(shù)量; 產(chǎn)生關(guān)于所述第二數(shù)目個字節(jié)的所述數(shù)量的數(shù)量信息; 存儲所述數(shù)量信息;識別其中存儲所述第二數(shù)目個字節(jié)的第二源存儲器位置;產(chǎn)生囊括其中存儲所述第二數(shù)目個字節(jié)的所述第二源存儲器位置的第二源存儲器位 直fe息;存儲所述第二存儲器源位置信息;識別待將所述第二數(shù)目個字節(jié)轉(zhuǎn)移到其中的第二目的地存儲器位置; 產(chǎn)生囊括待將所述第二數(shù)目個字節(jié)存儲到其中的所述第二目的地存儲器位置的第二 目的地存儲器位置信息;及存儲所述第二目的地存儲器位置信息。
2.根據(jù)權(quán)利要求1所述的方法,其進(jìn)一步包含 檢索所述數(shù)量信息;檢索所述第二源存儲器位置信息;及 檢索所述第二目的地存儲器位置信息,其中從所述直接存儲器存取引擎中的至少一個寄存器讀取所述數(shù)量信息、所述第二源 存儲器位置信息及所述第二目的地存儲器位置信息。
3.根據(jù)權(quán)利要求2所述的方法,其中所述至少一個寄存器包含多個寄存器。
4.根據(jù)權(quán)利要求3所述的方法,其中所述多個寄存器包含 其中保持所述第一源存儲器位置的至少一個源寄存器;及其中保持所述第一目的地存儲器位置的至少一個目的地寄存器。
5.根據(jù)權(quán)利要求4所述的方法,其中所述多個寄存器進(jìn)一步包含 其中保持所述數(shù)量信息的數(shù)量寄存器。
6.根據(jù)權(quán)利要求2所述的方法,其進(jìn)一步包含通過使用所述數(shù)量信息、所述第二源存儲器位置信息及所述第二目的地存儲器位置信 息起始將所述第二數(shù)目個字節(jié)從所述第二源存儲器位置復(fù)制到第二目的地存儲器位置來 恢復(fù)已暫停的轉(zhuǎn)移。
7.根據(jù)權(quán)利要求6所述的方法,其進(jìn)一步包含 依據(jù)所述第二源存儲器位置信息確定待讀取的下一地址; 依據(jù)所述第二目的地存儲器位置信息確定待寫入的下一地址; 沖洗所有即將來臨的讀取及寫入;依據(jù)所述待讀取的下一地址及所述待寫入的下一地址確定遞減值,其中所述遞減值識 別所述待讀取的下一地址比所述待寫入的下一地址提前的字節(jié)數(shù)目;及將所述待讀取的下一地址遞減所述遞減值,從而產(chǎn)生經(jīng)遞減的讀取地址, 其中將所述第二數(shù)目個字節(jié)從所述第二存儲器位置復(fù)制到所述第二存儲器目的地至 少基于所述經(jīng)遞減的讀取地址、所述待寫入的下一地址及所述數(shù)量信息來繼續(xù)進(jìn)行。
8.根據(jù)權(quán)利要求6所述的方法,其中其進(jìn)一步包含依據(jù)所述第二源存儲器位置信息確定待讀取的下一地址; 依據(jù)所述第二目的地存儲器位置信息確定待寫入的下一地址; 追蹤所述待讀取的下一地址比所述待寫入的下一地址提前的字節(jié)數(shù)目,從而確立運行 超前值;存儲所述運行超前值; 檢索所述運行超前值;及通過所述運行超前值調(diào)整所述待讀取的下一地址,從而產(chǎn)生經(jīng)調(diào)整的待讀取的下一地址,其中將所述第二數(shù)目個字節(jié)從所述第二存儲器位置復(fù)制到所述第二存儲器目的地至 少基于所述經(jīng)調(diào)整的待讀取的下一地址、所述待寫入的下一地址及所述數(shù)量信息來繼續(xù)進(jìn) 行。
9.根據(jù)權(quán)利要求6所述的方法,其進(jìn)一步包含依據(jù)所述第二源存儲器位置信息確定待讀取的下一地址;及 依據(jù)所述第二目的地存儲器位置信息確定待寫入的下一地址, 其中將所述第二數(shù)目個字節(jié)從所述第二存儲器位置復(fù)制到所述第二存儲器目的地使 用所述待讀取的下一地址、所述待寫入的下一地址及所述數(shù)量信息來繼續(xù)進(jìn)行。
10.根據(jù)權(quán)利要求1所述的方法,其進(jìn)一步包含 保持所述第一源存儲器位置的識別;保持所述第一目的地存儲器位置的識別; 保持所述第一數(shù)目個字節(jié)的計數(shù); 檢索所述數(shù)量信息;至少基于所述第一源存儲器位置的所述識別、所述第一數(shù)目個字節(jié)的所述計數(shù)及所述 數(shù)量信息確立待讀取的下一地址;及至少基于所述第一目的地存儲器位置的所述識別、所述第一數(shù)目個字節(jié)的所述計數(shù)及 所述數(shù)量信息確立待寫入的下一地址,其中將所述第二數(shù)目個字節(jié)從所述第二存儲器位置復(fù)制到所述第二存儲器目的地至 少依賴于所述待讀取的下一地址、所述待寫入的下一地址、所述第一數(shù)目個字節(jié)的所述計 數(shù)及所述數(shù)量信息。
11.根據(jù)權(quán)利要求1所述的方法,其進(jìn)一步包含 保持所述待讀取的下一地址的指示;保持所述待寫入的下一地址的指示; 在發(fā)出所述暫停指令之后,停止從所述第一源存儲器位置讀取所述第一數(shù)目個字節(jié),且將從在停止所述讀取之前讀取的所述字節(jié)剩余的任何字節(jié)寫入到所述第一目的地存 儲器位置,依據(jù)所述第二源存儲器位置信息確定待讀取的下一地址;及 依據(jù)所述第二目的地存儲器位置信息確定待寫入的下一地址, 其中將所述第二數(shù)目個字節(jié)從所述第二存儲器位置復(fù)制到所述第二存儲器目的地至 少依賴于所述待讀取的下一地址、所述待寫入的下一地址及所述數(shù)量信息。
12.根據(jù)權(quán)利要求1所述的方法,其進(jìn)一步包含從所述第一源存儲器位置檢索所述第一數(shù)目個字節(jié),所述第一源存儲器位置分布于多 個緩沖器中;及將所述第一數(shù)目個字節(jié)集中為單個數(shù)據(jù)串流。
13.根據(jù)權(quán)利要求12所述的方法,其進(jìn)一步包含從所述單個數(shù)據(jù)串流將所述第一數(shù)目個字節(jié)提供到所述第一目的地存儲器位置,其中 所述第一目的地存儲器位置分布于多個緩沖器中。
14.根據(jù)權(quán)利要求1所述的方法,其中所述第一目的地存儲器位置分布于多個緩沖器
全文摘要
本發(fā)明描述一種用于操作DMA引擎的方法。起始復(fù)制以將第一數(shù)目個字節(jié)從第一源存儲器位置轉(zhuǎn)移到第一目的地存儲器位置。接著,在復(fù)制所述第一數(shù)目個字節(jié)之前發(fā)出暫停指令。在停止復(fù)制之后,確立第二數(shù)目個字節(jié),其囊括剩余的待復(fù)制的那些字節(jié)。在暫停所述轉(zhuǎn)移之后,識別所述第二數(shù)目個字節(jié)的數(shù)量。接著產(chǎn)生且存儲數(shù)量信息。識別第二源存儲器位置以指示存儲所述第二數(shù)目個字節(jié)的地方。接著產(chǎn)生且存儲第二源存儲器位置信息。接著識別第二目的地存儲器位置以指示待將所述第二數(shù)目個字節(jié)轉(zhuǎn)移到的地方。接著產(chǎn)生且存儲第二目的地存儲器位置信息。
文檔編號G06F13/28GK102112971SQ200980129805
公開日2011年6月29日 申請日期2009年8月5日 優(yōu)先權(quán)日2008年8月6日
發(fā)明者王勝洪, 馬楊·穆德吉爾 申請人:阿斯奔收購公司