專利名稱::用于執(zhí)行直接存儲(chǔ)器存取的方法和系統(tǒng)的制作方法用于執(zhí)行直接存儲(chǔ)器存取的方法和系統(tǒng)
技術(shù)領(lǐng)域:
本申請(qǐng)一般涉及改進(jìn)的數(shù)據(jù)處理系統(tǒng)和方法。更具體地,本申請(qǐng)針對(duì)一種支持高等待時(shí)間設(shè)備的直接存儲(chǔ)器存取控制器。
背景技術(shù):
:許多在片系統(tǒng)(system-on-a-chip,SOC)設(shè)計(jì)包含叫做直接存儲(chǔ)器存取(DMA)控制器的設(shè)備。DMA的目的是有效地將數(shù)據(jù)塊從存儲(chǔ)器中的一個(gè)位置移動(dòng)到另一個(gè)位置。DMA控制器通常用來在系統(tǒng)存儲(chǔ)器和輸入/輸出(I/O)設(shè)備之間移動(dòng)數(shù)據(jù),但是也用來在系統(tǒng)存儲(chǔ)器中一個(gè)區(qū)域和另一個(gè)區(qū)域之間移動(dòng)數(shù)據(jù)。因?yàn)樵谝苿?dòng)數(shù)據(jù)時(shí)不涉及處理器,所以DMA控制器被叫做"直接"。沒有DMA控制器,可以通過使處理器在軟件控制下將數(shù)據(jù)逐片地從一個(gè)存儲(chǔ)器空間復(fù)制到另一個(gè)存儲(chǔ)器空間來移動(dòng)數(shù)據(jù)塊。這對(duì)大塊數(shù)據(jù)通常不可取。使處理器逐片地復(fù)制大塊數(shù)據(jù)塊是緩慢的,因?yàn)樘幚砥鞑痪哂写蟠鎯?chǔ)緩沖器以及必須以小的、低效率的大小(諸如每次32位)移動(dòng)數(shù)據(jù)。同樣,當(dāng)該處理器進(jìn)行復(fù)制時(shí),其沒空進(jìn)行其他工作。因此,占用該處理器直到移動(dòng)完成。卸載這些數(shù)據(jù)塊移動(dòng)到DMA控制器則好很多,DMA控制器能夠更快地完成它們以及并行地完成其他工作。DMA控制器通常具有多個(gè)"通道(channel)"。因此,可以編程該DMA控制器來在不同的通道上同時(shí)地執(zhí)行幾個(gè)塊移動(dòng),允許該DMA設(shè)備同時(shí)向或從幾個(gè)I/O設(shè)備傳送數(shù)據(jù)。DMA控制器典型的另一個(gè)特征是"分散/聚集"特征。當(dāng)執(zhí)行分?jǐn)M聚集操作時(shí),無須對(duì)于每個(gè)塊由處理器對(duì)DMA控制器編程。相反地,處理器依靠該分散/聚集結(jié)構(gòu)在存儲(chǔ)器中設(shè)置"描述符表,,或"描述符鏈接列表"。每個(gè)描述符描述數(shù)據(jù)塊移動(dòng),包括源地址、目的地址和要傳送的字節(jié)數(shù)目。經(jīng)由該DMA寄存器直接地編程的非分散/聚集塊移動(dòng)被稱為"單獨(dú)編程"的DMA塊移動(dòng)。與表結(jié)構(gòu)相比,鏈接列表結(jié)構(gòu)是靈活和動(dòng)態(tài)的。在鏈接列表結(jié)構(gòu)中,處理器指示DMA通道中的一個(gè)給鏈中的第一描述符,并且在鏈接列表中的每個(gè)描述符包含到存儲(chǔ)器中下一個(gè)描述符的指針。描述符可以在存儲(chǔ)器的任何地方,以及當(dāng)傳送發(fā)生時(shí)處理器可以動(dòng)態(tài)地將其加入列表。DMA控制器自動(dòng)地遍歷所述表或列表并且執(zhí)行由每個(gè)描述符描述的數(shù)據(jù)塊移動(dòng)直到達(dá)到該表或列表的結(jié)尾。如果期望高的總線利用則高等待時(shí)間設(shè)備呈現(xiàn)獨(dú)特挑戰(zhàn)。如果總線在大部分時(shí)間傳輸數(shù)據(jù)而沒有間隙或停止,則每個(gè)總線具有能夠?qū)崿F(xiàn)的最大維持帶寬。當(dāng)與高等待時(shí)間設(shè)備對(duì)話時(shí),必須存在足夠的未完成的同時(shí)事務(wù),從而從高等待時(shí)間設(shè)備接收數(shù)據(jù)花費(fèi)的時(shí)間小于或等于從所有其他的排在它前面的未完成的事務(wù)傳送數(shù)據(jù)花費(fèi)的時(shí)間量。如果滿足該準(zhǔn)則,則在總線上將很少有間隙或停止,其中DMA在總線上等待數(shù)據(jù)并且不具有任何其他可以傳輸?shù)臄?shù)據(jù)。許多總線和互連不能在每個(gè)主機(jī)(master)中處理16或更多未完成的讀事務(wù),但是大部分總線確實(shí)具有簡(jiǎn)單"重試"機(jī)制。重試是由目標(biāo)給出的響應(yīng),其告訴主機(jī)在稍后時(shí)間重復(fù)相同事務(wù),因?yàn)槟繕?biāo)在那時(shí)無法完成該事務(wù)。"延遲讀取"是高等待時(shí)間目標(biāo)用于通過當(dāng)高等待時(shí)間目標(biāo)獲取高等待時(shí)間數(shù)據(jù)時(shí)不停止總線來提高總線利用的方法。目標(biāo)典型地具有下述選項(xiàng)將等待狀態(tài)插入事務(wù)中以延遲該事務(wù)的完成直到其能夠返回?cái)?shù)據(jù)。等待狀態(tài)對(duì)高等待時(shí)間目標(biāo)非常低效,因?yàn)檫@種目標(biāo)必須每個(gè)事務(wù)插入許多等待狀態(tài),并且當(dāng)總線在等待狀態(tài)時(shí),不能運(yùn)行其他從任何主機(jī)到任何目標(biāo)的事務(wù)??偩€被停止。延遲讀取避免了由于高等待時(shí)間讀取而停止總線。延遲讀取工作如下。當(dāng)高等待時(shí)間目標(biāo)接收新的讀取請(qǐng)求時(shí),其將重試該請(qǐng)求并且同時(shí)排隊(duì)事務(wù)以及開始處理它。重試馬上釋放總線并且允許總線判優(yōu)器來允許運(yùn)行來自相同或不同的主機(jī)的下一事務(wù)。當(dāng)目標(biāo)已經(jīng)排隊(duì)讀取.時(shí),該讀取變?yōu)閽炱?。如果主機(jī)在目標(biāo)有可以返回的數(shù)據(jù)前回到重復(fù)的事務(wù),則目標(biāo)再次重試該事務(wù)并且讀取依然掛起。當(dāng)主機(jī)回到重復(fù)的事務(wù)并且目標(biāo)確實(shí)具有排隊(duì)并準(zhǔn)備返回的所請(qǐng)求的數(shù)據(jù)時(shí),目標(biāo)接受事務(wù)并且馬上返回該數(shù)據(jù)。延遲的讀取允許目標(biāo)對(duì)與其設(shè)計(jì)用于同時(shí)處理的事務(wù)一樣多的事務(wù)進(jìn)行排隊(duì),而不管總線支持多少未完成的事務(wù)??偩€不具有在目標(biāo)內(nèi)有多少事務(wù)被排隊(duì)的任何知識(shí)。因此,延遲的讀取是在任何給定的總線上排隊(duì)眾多同時(shí)事務(wù)的好方法
發(fā)明內(nèi)容說明性實(shí)施例認(rèn)識(shí)到現(xiàn)有技術(shù)的缺點(diǎn),并且提供一種構(gòu)造為松散地耦合的直接存儲(chǔ)器存取引擎和總線引擎的直接存儲(chǔ)器存取設(shè)備。該直接存儲(chǔ)器存取引擎將編程的數(shù)據(jù)塊移動(dòng)分拆成單獨(dú)的事務(wù),解釋分散/聚集描述符,以及在通道間判優(yōu)。總線引擎理解直接存儲(chǔ)器存取設(shè)備所附屬的總線的總線協(xié)議,并且運(yùn)行由直接存儲(chǔ)器存取引擎送出的所有事務(wù)。直接存儲(chǔ)器存取引擎和總線引擎通過使用能夠在直接存儲(chǔ)器存取引擎和總線引擎之間排隊(duì)的已組合的讀寫(RW)命令使得處理更有效??偩€引擎具有兩個(gè)讀隊(duì)列和一個(gè)寫隊(duì)列。第一讀隊(duì)列用于"新的讀取,,以及第二讀隊(duì)列用于"舊的讀取",舊的讀取是已經(jīng)在總線上重試過至少一次的讀取??偩€引擎將最高優(yōu)先級(jí)給新的讀取,因?yàn)樗鼈兪歉叩却龝r(shí)間。這種機(jī)制提供來給予新的讀取絕對(duì)優(yōu)先級(jí),并且仍避免死鎖狀況的方法。在一個(gè)說明性實(shí)施例中,提供一種用于在直接存儲(chǔ)器存取設(shè)備中執(zhí)行直接存儲(chǔ)器存取塊移動(dòng)的方法。該方法包括在直接存儲(chǔ)器存取設(shè)備中的直接存儲(chǔ)器存取引擎處接收直接存儲(chǔ)器存取塊移動(dòng)請(qǐng)求,其中該直接存儲(chǔ)器存取塊移動(dòng)請(qǐng)求指示源和目標(biāo)。該方法進(jìn)一步包括在直接存儲(chǔ)器存取設(shè)備中從直接存儲(chǔ)器存取引擎向總線引擎發(fā)出關(guān)于直接存儲(chǔ)器存取塊移動(dòng)請(qǐng)求的一個(gè)或多個(gè)讀寫命令。該方法進(jìn)一步包括由總線引擎對(duì)于一個(gè)或多個(gè)讀寫命令的每個(gè)執(zhí)行從源讀取數(shù)據(jù)的讀取操作和將數(shù)據(jù)寫入目標(biāo)的寫操作,以滿足直接存儲(chǔ)器存取塊移動(dòng)請(qǐng)求。在一個(gè)示范性實(shí)施例中,在一個(gè)或多個(gè)讀寫命令中的每個(gè)讀寫命令包括源地址、目的地址和字節(jié)計(jì)數(shù)。在另一個(gè)示范性實(shí)施例中,該字節(jié)計(jì)數(shù)對(duì)應(yīng)于總線引擎的緩沖器大小。在另一個(gè)示范性實(shí)施例中,該方法包括響應(yīng)于在總線引擎處接收給定的讀寫命令,如果在該總線引擎中的緩沖器空間沒有滿,則向直接存儲(chǔ)器存取引擎返回確認(rèn)應(yīng)答。在再一個(gè)示范性實(shí)施例中,該方法進(jìn)一步包括響應(yīng)于在總線引擎處接收給定的讀寫命令,如果在該總線引擎中的緩沖器空間已滿,則保留對(duì)該直接存儲(chǔ)器存取引擎的確認(rèn)應(yīng)答,以及響應(yīng)于在總線引擎中緩沖器空間變?yōu)榭捎?,返回確認(rèn)應(yīng)答到直接存儲(chǔ)器存取引擎。直接存儲(chǔ)器存取引擎不發(fā)出后續(xù)的讀寫命令,直到在直接存儲(chǔ)器存取引擎處接收確認(rèn)應(yīng)答。在再一個(gè)示范性實(shí)施例中,執(zhí)行讀操作和寫操作包括將與給定讀寫命令相關(guān)聯(lián)的讀事務(wù)置于該總線引擎中的新的讀隊(duì)列中。在再一個(gè)示范性實(shí)施例中,執(zhí)行讀操作和寫操作進(jìn)一步包括從新的讀隊(duì)列運(yùn)行讀事務(wù),確定該讀事務(wù)是否是重試,以及如果該讀事務(wù)不是重試,則將與該讀寫命令相關(guān)聯(lián)的寫事務(wù)置于總線引擎中的寫隊(duì)列中。在再一個(gè)示范性實(shí)施例中,執(zhí)行讀操作和寫操作進(jìn)一步包括如果該讀事務(wù)是被重試,則將該讀事務(wù)置于舊的讀隊(duì)列中。在再一個(gè)說明性實(shí)施例中,數(shù)據(jù)處理系統(tǒng)包括總線、多個(gè)耦合到總線的總線單元設(shè)備、耦合到總線的直接存儲(chǔ)器存取設(shè)備、和處理單元。所述直接存儲(chǔ)器存取設(shè)備包括直接存儲(chǔ)器存取引擎和總線引擎。所述處理單元有接入到總線的通路。直接存儲(chǔ)器存取引擎從處理單元中接收直接存儲(chǔ)器存取塊移動(dòng)請(qǐng)求。直接存儲(chǔ)器存取塊移動(dòng)請(qǐng)求指示在多個(gè)總線單元設(shè)備中的源設(shè)備和目標(biāo)設(shè)備。直接存儲(chǔ)器存取引擎向該總線引擎發(fā)出一個(gè)或多個(gè)用于直接存儲(chǔ)器存取塊移動(dòng)請(qǐng)求的讀寫命令??偩€引擎對(duì)于一個(gè)或多個(gè)讀寫命令的每個(gè)執(zhí)行從源設(shè)備讀取數(shù)據(jù)的讀取操作和將數(shù)據(jù)寫入目標(biāo)設(shè)備的寫入操作,以滿足直接存儲(chǔ)器存取塊移動(dòng)請(qǐng)求。在再一個(gè)示范性實(shí)施例中,數(shù)據(jù)處理系統(tǒng)執(zhí)行以上概述關(guān)于在該說明性實(shí)施例的方法的各種操作。在再一個(gè)說明性實(shí)施例中,南橋包括總線和耦合到總線的直接存儲(chǔ)器存取設(shè)備。該直接存儲(chǔ)器存取設(shè)備包括直接存儲(chǔ)器存取引擎和總線引擎。處理單元有接入到該總線的通路。直接存儲(chǔ)器存取引擎從處理單元中接收直接存儲(chǔ)器存取塊移動(dòng)請(qǐng)求。直接存儲(chǔ)器存取塊移動(dòng)請(qǐng)求指示連接到總線的源設(shè)備和目標(biāo)設(shè)備。直接存儲(chǔ)器存取引擎向該總線引擎發(fā)出一個(gè)或多個(gè)關(guān)于直接存儲(chǔ)器存取塊移動(dòng)請(qǐng)求的讀寫命令??偩€引擎對(duì)于一個(gè)或多個(gè)讀寫命令的每個(gè)執(zhí)行從該源設(shè)備讀取數(shù)據(jù)的讀取操作和將數(shù)據(jù)寫入目標(biāo)設(shè)備的寫入操作,以滿足直接存儲(chǔ)器存取塊移動(dòng)請(qǐng)求。在再一個(gè)示范性實(shí)施例中,該南橋執(zhí)行以上概述關(guān)于在該說明性實(shí)施例的方法的各種操作。本發(fā)明的這些和其他特征、優(yōu)點(diǎn)將在以下本發(fā)明的示范性實(shí)施例的具體技術(shù)人員而言變得顯然。通過在結(jié)合附圖閱讀時(shí)參考說明性實(shí)施例的以下詳細(xì)描述,本發(fā)明以及其優(yōu)選使用模式,另外的目的和優(yōu)點(diǎn)將能夠很好地理解,其中圖l是數(shù)據(jù)處理系統(tǒng)的示例方框圖,在其中可以實(shí)現(xiàn)說明性實(shí)施例的各方面;圖2是是示例數(shù)據(jù)處理系統(tǒng)的方框圖,在其中可以實(shí)現(xiàn)說明性實(shí)施例的各方面;圖3是說明依照說明性實(shí)施例的南橋的方框圖;圖4說明了依照說明性實(shí)施例的整個(gè)總線引擎隊(duì)列結(jié)構(gòu);圖5說明了依照說明性實(shí)施例的、對(duì)于總線引擎中的隊(duì)列的隊(duì)列間排序;圖6是說明依照說明性實(shí)施例的、直接存儲(chǔ)器存取引擎發(fā)出讀寫命令的'操作的流程圖;以及圖7A和7B是說明依照說明性實(shí)施例的、在直接存儲(chǔ)器存取設(shè)備中總線引擎的操作的流程圖。具體實(shí)施方式現(xiàn)在參考附圖并且特別是參考圖1-2,提供在其中可實(shí)現(xiàn)本發(fā)明的說明性實(shí)施例的數(shù)據(jù)處理環(huán)境的示范性圖。應(yīng)當(dāng)了解圖l-2僅是示范并且無意聲不背離本發(fā)明的精神和范圍的情況下,可以對(duì)描述的環(huán)境做出許多修改。.圖1是數(shù)據(jù)處理系統(tǒng)的示例方框圖,在其中可以實(shí)現(xiàn)說明性實(shí)施例的各方面。如圖1所示的示范性數(shù)據(jù)處理系統(tǒng)是小區(qū)寬帶引擎(CBE)數(shù)據(jù)處理系統(tǒng)的例子。雖然將在本發(fā)明的優(yōu)選實(shí)施例的說明中使用該CBE,但本發(fā)明并不限制于此,本領(lǐng)域的技術(shù)人員一閱讀如下說明就將很容易明白這點(diǎn)。如圖l所示,CBE100包括具有處理器(PPU)116及其L1和L2高速緩存112和114的電源處理器部件(PPE)110,和多個(gè)協(xié)同處理器部件(SPE)120-134,其中每個(gè)具有它自己的協(xié)同處理器單元(SPU)140-154、存儲(chǔ)器流控制155-162、局部存儲(chǔ)器或貯存器(store)(LS)163-170、以及總線接口單元(BIU單元)180-194(其可以是,例如組合的直接存儲(chǔ)器存取(DMA)、存儲(chǔ)器管理單元(MMU)、和總線接口單元)。也提供高帶寬內(nèi)部器件互連總線(EIB)196、總線接口控制器(BIC)197和存儲(chǔ)器接口控制器(MIC)198。局部存儲(chǔ)器或局部貯存器(LS)163-170是大存儲(chǔ)器映射表(map)的非連貫的可尋址的部分,其物理上可以作為耦合到SPU140-154的小存儲(chǔ)器來提供。局部貯存器163-170可以被映射到不同的地址空間。這些地址區(qū)域是連續(xù)的而不混淆配置的。局部貯存器163-170通過其地址位置與其相對(duì)應(yīng)的SPU140-154以及SPE120-134關(guān)聯(lián),諸如經(jīng)由下文非常詳細(xì)地描述的SPU識(shí)別寄存器。只要局部貯存器沒有置于操作的安全模式,系統(tǒng)中的任何資源都具有從/向局部貯存器163-170讀寫的能力,在安全^f莫式下僅其關(guān)聯(lián)的SPU可以存取局部貯存器163-170或存取局部貯存器163-170的指定的安全部分。CBE100可以是在片系統(tǒng),從而在圖1中圖示的每個(gè)器件可在單個(gè)微處理芯片上提供。此外,CBEIOO是異構(gòu)處理環(huán)境,在其中每個(gè)SPU可以從系統(tǒng)中的每個(gè)其他SPU接收不同的指令。此外,用于SPU的指令集不同于PPU的指令集,例如,PPU可以執(zhí)行基于精簡(jiǎn)指令集計(jì)算機(jī)(RISC)的指令而SPU執(zhí)行矢量化的指令。SPE120-134相互耦合并且經(jīng)由EIB196耦合到L2高速緩存114。此外,SPE120-134經(jīng)由EIB196耦合到MIC198和BIC197。MIC198提供到共享存儲(chǔ)器的接口,BIC197在CBE100和其他外部總線及設(shè)備之間提供通信接口。PPE110是雙線程的PPE110。此雙線程的PPE110和八個(gè)SPE120-134的組合使得CBE100能夠處理10個(gè)同時(shí)的線程以及超過128個(gè)未完成的(outstanding)存儲(chǔ)器請(qǐng)求。PPE110為處理大部分計(jì)算工作量的其他八個(gè)SPE120-134充當(dāng)控制器。PPEIIO可用來運(yùn)行傳統(tǒng)的操作系統(tǒng),而SPE120-134進(jìn)行比如矢量化浮點(diǎn)代碼執(zhí)行。SPE120-134包括協(xié)同處理單元(SPU)140-154,存儲(chǔ)器流控制單元155-162、局部存儲(chǔ)器或貯存器163-170、以及接口單元180-194。在一個(gè)示范性實(shí)施例中,局部存儲(chǔ)器或貯存器163-170包括256KB指令和數(shù)據(jù)存儲(chǔ)器,所述數(shù)據(jù)存儲(chǔ)器對(duì)PPE110是可見的,并且能夠通過軟件直接地尋址。PPE110可以以小程序或線程裝載SPE120-134,將SPE串在一起來處理復(fù)雜操作中的每個(gè)步驟。例如,并入CBE100的機(jī)頂盒可以裝載用于讀取DVD,視頻和音頻解碼,以及顯示的程序,以及數(shù)據(jù)將從SPE到SPE進(jìn)行到最后,直到其最終在輸出顯示器上結(jié)束。在4GHz,每個(gè)SPE120-134給出理論上的32G浮點(diǎn)操作(FLOPS)性能而PPE110具有相似等級(jí)的性能。存儲(chǔ)器流控制單元(MFC)155-162用作SPU到系統(tǒng)其余以及其他器件的接口。MFC155-162提供用于數(shù)據(jù)傳輸、保護(hù)以及在主存儲(chǔ)器和局部貯存器163-170之間的同步的首要機(jī)制。對(duì)于處理器中的每個(gè)SPU,邏輯上存在MFC。有些實(shí)現(xiàn)能夠在多個(gè)SPU之間共享單個(gè)MFC的資源。在此情況下,對(duì)于每個(gè)SPU,為MFC定義的所有設(shè)備和命令必須獨(dú)立于軟件而呈現(xiàn)。共享MFC的效果被限制為依賴于實(shí)現(xiàn)的設(shè)備和命令?,F(xiàn)在參考圖2,示出示例數(shù)據(jù)處理系統(tǒng)的方框圖,在其中可以實(shí)現(xiàn)說明性實(shí)施例的各方面。在描述的例子中,數(shù)據(jù)處理系統(tǒng)200使用包括南橋和輸入/輸出(I/O)控制器集線器(SB/ICH)204的集線器架構(gòu)。處理單元202經(jīng)由存儲(chǔ)器接口控制器(MIC)210連接到系統(tǒng)存儲(chǔ)器208。處理單元202經(jīng)過總線接口控制器(BIC)206連接到SB/ICH204。在描述的例子中,局域網(wǎng)(LAN)適配器212與SB/ICH204連接。音頻適配器216、鍵盤和鼠標(biāo)適配器220、調(diào)制解調(diào)器222、只讀存儲(chǔ)器(ROM)224、硬盤驅(qū)動(dòng)器(HDD)226、CD-ROM驅(qū)動(dòng)器230、通用串行總線(USB)端口和其他通信端口232,以及PCI/PCIe驅(qū)動(dòng)器234經(jīng)過總線238和總線240與SB/ICH204連接。PCI/PCIe驅(qū)動(dòng)器可以包括,例如,以太網(wǎng)適配器、附件卡、和用于筆記本計(jì)算機(jī)的PC卡。PCI使用卡總線控制器,而PCIe不用。ROM224可以是例如快閃二進(jìn)制輸入/輸出系統(tǒng)(BIOS)。HDD226和CD-ROM驅(qū)動(dòng)器230經(jīng)過總線240連接到SB/ICH204。HDD226和CD-ROM驅(qū)動(dòng)器230可以使用例如集成驅(qū)動(dòng)器電路(IDE)或串行高級(jí)技術(shù)附連(SATA)接口。超級(jí)I/O(SIO)設(shè)備236可以與SB/ICH204連接。操作系統(tǒng)運(yùn)行在處理單元202上。操作系統(tǒng)協(xié)調(diào)在圖2中的數(shù)據(jù)處理系統(tǒng)200內(nèi)的各種組件并提供控制。作為客戶端,操作系統(tǒng)可以是商業(yè)可獲得的操作系統(tǒng)。面向?qū)ο蟮木幊滔到y(tǒng),諸如JavaTM編程系統(tǒng),可以結(jié)合操作系統(tǒng)一起運(yùn)行,并且提供從JavaTM程序或在數(shù)據(jù)處理系統(tǒng)200上執(zhí)行的應(yīng)用程序?qū)Σ僮飨到y(tǒng)的調(diào)用(Java是SUNMicrosystem在美國、其他國家或這二者的商標(biāo))。作為服務(wù)器,數(shù)據(jù)處理系統(tǒng)200可以是例如IBM⑧eServerTMpSeries⑧計(jì)算機(jī)系統(tǒng),運(yùn)行高級(jí)交互執(zhí)行(AIX)操作系統(tǒng)或LINUX⑧操作系統(tǒng)(eServer、pSeries和AIX是國際商用機(jī)器公司在美國、其他國家或這二者的商標(biāo),而LINUX是LinusTorvalds在美國、其他國家或這二者的商標(biāo))。數(shù)據(jù)處理系統(tǒng)200可以在處理單元202中包括多個(gè)處理器??商鎿Q的,可以^使用單個(gè)處理器系統(tǒng)。操作系統(tǒng)、面向?qū)ο蟮木幊滔到y(tǒng)、以及應(yīng)用或程序的指令位于貯存設(shè)備上,諸如HDD226,并且可以被載入主存儲(chǔ)器208以通過處理單元202執(zhí)行。可以由處理單元202使用計(jì)算機(jī)可用程序代碼來執(zhí)行本發(fā)明的說明性實(shí)施例的處理,所述計(jì)算機(jī)可用程序代碼位于諸如例如主存儲(chǔ)器208、ROM224的存儲(chǔ)器或例如位于一個(gè)或多個(gè)外圍設(shè)備226和230。諸如如圖2所示的總線238或總線240的總線系統(tǒng),可以由一個(gè)或多個(gè)總線組成。當(dāng)然,該總線系統(tǒng)可以使用任何類型的通信結(jié)構(gòu)或架構(gòu)來實(shí)現(xiàn),所述通訊結(jié)構(gòu)或架構(gòu)提供在附連到該結(jié)構(gòu)或架構(gòu)的不同部件或設(shè)備之間的數(shù)據(jù)傳輸。通信單元,諸如圖2中的調(diào)制解調(diào)器222或網(wǎng)絡(luò)適配器212,可以包括一個(gè)或多個(gè)用來發(fā)送和接收數(shù)據(jù)的設(shè)備。存儲(chǔ)器可以是,例如,主存儲(chǔ)器208、ROM224、或諸如在圖2中的NB/MCH202中找到的高速緩存。除了在圖1-2中描述的硬件或取代該硬件,本領(lǐng)域的技術(shù)人員將理解在圖1-2中的硬件可以取決于實(shí)現(xiàn)而變化。其他內(nèi)部硬件或外圍設(shè)備,諸如快閃存儲(chǔ)器、等效非易失性存儲(chǔ)器、或光盤驅(qū)動(dòng)器等等。同樣,說明性實(shí)施例的處理除了前面提到的SMP系統(tǒng),可以適于多處理器數(shù)據(jù)處理系統(tǒng),而不脫離本發(fā)明的宗旨和范圍。此外,數(shù)據(jù)處理系統(tǒng)200可以采用許多不同的數(shù)據(jù)處理系統(tǒng)中的任何形式,該數(shù)據(jù)處理系統(tǒng)包括客戶端計(jì)算設(shè)備、服務(wù)器計(jì)算設(shè)備、平板(tablet)計(jì)算機(jī)、膝上型計(jì)算機(jī)、電話或其他通信設(shè)備、個(gè)人數(shù)字助理(PDA)、視頻游戲控制臺(tái)等。在有些說明性例子中,數(shù)據(jù)處理處理系統(tǒng)200可以是便攜計(jì)算設(shè)備,其配置有快閃存儲(chǔ)器以提供非易失性存儲(chǔ)器來存儲(chǔ)操作系統(tǒng)文件和/或例如用戶生成的數(shù)據(jù)。實(shí)質(zhì)上,數(shù)據(jù)處理系統(tǒng)200可以是不受結(jié)構(gòu)限制的任何已知的或以后開發(fā)的數(shù)據(jù)處理系統(tǒng)。南橋204可以包括直接存儲(chǔ)器存取(DMA)控制器。DMA控制器一般用于在系統(tǒng)存儲(chǔ)器和輸入/輸出(1/0)設(shè)備之間移動(dòng)數(shù)據(jù),但是也用于在系統(tǒng)存儲(chǔ)器中的一個(gè)區(qū)域和另一個(gè)區(qū)域之間移動(dòng)數(shù)據(jù)。如果期待高總線利用,則高等待時(shí)間設(shè)備呈現(xiàn)獨(dú)特挑戰(zhàn)。當(dāng)與高等待時(shí)間設(shè)備對(duì)話時(shí),必須存在足夠的未完成的同時(shí)事務(wù),從而從高等待時(shí)間設(shè)備接收數(shù)據(jù)花費(fèi)的時(shí)間少于或等于從所有其他的排在它前面的未完成的事務(wù)傳輸數(shù)據(jù)花費(fèi)的時(shí)間量。如果滿足該準(zhǔn)則,則在總線上將很少有間隙或停止,其中DMA在總線上等待數(shù)據(jù)并且不具有任何其他可以傳輸?shù)臄?shù)據(jù)。隨著進(jìn)一步集成的趨勢(shì),特別是對(duì)在片系統(tǒng),在圖2中的許多設(shè)備可以被集成在南橋204內(nèi)。例如,單個(gè)總線可以被集成在南橋204內(nèi)。同樣,控制器和接口,諸如USB控制器、PCI和PCIe控制器、存儲(chǔ)器控制器等等可以被集成在南橋204內(nèi)并且被附連到內(nèi)部總線。此外,南橋204可以包括將存儲(chǔ)器模塊與其連接用于局部存儲(chǔ)器的存儲(chǔ)器控制器。同樣注意,處理單元202可以包括內(nèi)部總線,諸如在圖1中的EIB196,DMA設(shè)備可以經(jīng)由該EIB存取系統(tǒng)存儲(chǔ)器208。圖3是說明依照說明性實(shí)施例的南橋的方框圖。處理單元302例如發(fā)出DMA命令到在南橋300中的總線320。在南橋300中的DMA設(shè)備310然后可以通過進(jìn)行從諸如總線單元設(shè)備322的源設(shè)備中的讀操作,和到諸如總線單元設(shè)備324的目標(biāo)設(shè)備的寫操作來執(zhí)行該DMA命令。在替換的例子中,DMA命令可以請(qǐng)求從總線單元設(shè)備322向系統(tǒng)存儲(chǔ)器304移動(dòng)數(shù)據(jù)塊,或根據(jù)另一個(gè)例子,DMA命令可以請(qǐng)求從存儲(chǔ)器304向總線單元設(shè)備324移動(dòng)數(shù)據(jù)塊??偩€單元設(shè)備322和總線單元設(shè)備324可以是,例如存儲(chǔ)器控制器、USB控制器、PCI控制器、存儲(chǔ)設(shè)備控制器等等或它們的組合。源設(shè)備和目標(biāo)設(shè)備可以包括諸如存儲(chǔ)器的低等待時(shí)間設(shè)備和諸如硬盤驅(qū)動(dòng)器的高等待時(shí)間設(shè)備。注意,但是,諸如存儲(chǔ)器設(shè)備的通常為低等待時(shí)間設(shè)備的設(shè)備在一些情況下也可以是高等待時(shí)間。出于簡(jiǎn)化,南橋300的許多部件未示出。本領(lǐng)域的技術(shù)人員將認(rèn)識(shí)到,南橋300將包括更多未在圖3中示出的更多特征和功能。在南橋300中,DMA設(shè)備310包括DMA引擎(DE)312和總線引擎(BE)314。專用讀寫(RW)命令允許DE312更有效地排隊(duì)到BE314的事務(wù)(transaction)。使用更標(biāo)準(zhǔn)的實(shí)現(xiàn),DE將通過指定BE將在總線上執(zhí)行的每一事務(wù)來對(duì)BE進(jìn)行細(xì)節(jié)管理。但是,在該說明性的實(shí)施例中,該專用RW命令允許DE312同時(shí)指定讀和寫二者,從而DE312能夠更有效地控制數(shù)據(jù)塊的移動(dòng)。BE314可以讀諸如塊移動(dòng)請(qǐng)求的、從處理單元302向總線320發(fā)出的DMA命令。處理單元302可以直接地向DMA設(shè)備310發(fā)出DMA命令??商鎿Q地,處理單元302可以使用分散/聚集(Scater/gather)列表發(fā)出DMA命令,該列表可以是系統(tǒng)存儲(chǔ)器304中的表或鏈接列表。在后一情況下,BE314可以簡(jiǎn)單地從分散/聚集列表中讀描述符以接收下一個(gè)DMA命令。DMA設(shè)備310可以將經(jīng)過局部存儲(chǔ)器控制器326而連接的局部存儲(chǔ)器328用作工作存儲(chǔ)器。比如,DMA設(shè)備310可以使用局部存儲(chǔ)器328來緩沖讀和寫。依照如圖3示出的說明性實(shí)施例,例如,DMA設(shè)備被構(gòu)造為;^散耦合的DMA引擎.(DE)和總線引擎(BE)。DE將編程的數(shù)據(jù)塊移動(dòng)分拆成單獨(dú)的事務(wù),解釋分似聚集描述符,以及在通道間判優(yōu)。BE理解該DMA設(shè)備附連到的總線的總線協(xié)議,并且運(yùn)行由該DE發(fā)送的所有事務(wù)。BE必須支持足夠的同時(shí)事務(wù),并由此支持足夠的緩沖器來阻止數(shù)據(jù)流管道停止。DE排隊(duì)到BE的事務(wù)并且根據(jù)BE的緩沖器空間會(huì)遠(yuǎn)超過BE。BE經(jīng)由簡(jiǎn)單請(qǐng)求/確認(rèn)應(yīng)答握手抑制該DE。DE不知道,或不必知道,BE已經(jīng)實(shí)現(xiàn)了多少緩沖器;因此,不同的BE能夠被用于相同的DE來支持不同等待時(shí)間的環(huán)境或附連到不同的總線。為了最大可量測(cè)性,可以將BE構(gòu)造為邏輯上獨(dú)立的"BE單元",每個(gè)負(fù)責(zé)為DE管理一個(gè)緩沖器和一個(gè)事務(wù)。BE單元的數(shù)量可以是可配置的合成參數(shù)。只要DE獲得關(guān)于其當(dāng)前請(qǐng)求的確認(rèn)應(yīng)答,其能夠生成另一個(gè)請(qǐng)求。當(dāng)BE用完可用的緩沖器時(shí),其保留DE當(dāng)前請(qǐng)求的確認(rèn)應(yīng)答,這防止該DE請(qǐng)求更多事務(wù)。當(dāng)資源在BE中釋放,其將激活向DE的確認(rèn)應(yīng)答,并且然后該DE能夠請(qǐng)求另一個(gè)事務(wù)。BE包含總的緩沖器池。例如,如果BE包含16個(gè)緩沖器,所有16個(gè)可以由一個(gè)DMA通道使用,或它們可以在通道間以DE需要的任何方式來分配。DE排隊(duì)從任一通道到BE的事務(wù)。DE僅當(dāng)其沒有更多工作要做時(shí)或當(dāng)BE保留指示其可用的緩沖器空間用完的確認(rèn)應(yīng)答時(shí)停止排隊(duì)事務(wù)。BE根據(jù)總線協(xié)議運(yùn)行所有的已排隊(duì)的事務(wù)并且處理可能的總線狀況,諸如返回次序顛倒的事務(wù)數(shù)據(jù)和重試的事務(wù)。對(duì)于數(shù)據(jù)塊移動(dòng),處理次序顛倒的數(shù)據(jù)的DMA被優(yōu)化,對(duì)其而言子塊的次序沒有意義。有些象網(wǎng)絡(luò)和視頻流傳送的應(yīng)用,數(shù)據(jù)必須按次序移動(dòng)。在該DE和BE之間可以有簡(jiǎn)單接口,DE在其中排隊(duì)到BE的事務(wù)。BE為DE運(yùn)行該事務(wù),直到DE已經(jīng)導(dǎo)致所有編程的數(shù)據(jù)塊被移動(dòng)。DE可以通過指定向BE的每個(gè)讀和寫來導(dǎo)致所有的數(shù)據(jù)塊被移動(dòng),其在總線上進(jìn)行那些讀和寫。DE在通道間判優(yōu)并且通常以/^平地方式交織來自各種通道的讀和寫,從而來自所有通道的數(shù)據(jù)能夠差不多同時(shí)傳輸。存在各種能夠?qū)崿F(xiàn)的通道判優(yōu)優(yōu)先級(jí)的方案;但是,判優(yōu)不是本公開的焦點(diǎn)。因?yàn)镈MA涉及移動(dòng)數(shù)據(jù),DE從源地址進(jìn)行的每個(gè)讀事務(wù)必須最終跟隨有相應(yīng)的到目的地址的寫事務(wù)。并且因?yàn)镈MA移動(dòng)數(shù)據(jù)而不是處理數(shù)據(jù),所以由讀事務(wù)傳輸?shù)臄?shù)據(jù)與由相應(yīng)的寫事務(wù)傳輸?shù)臄?shù)據(jù)是相同的。該數(shù)據(jù)沒有作任何修改。因此,依照說明性實(shí)施例,DE和BE通過使用能夠在DE和BE之間排隊(duì)的組合的讀寫(RW)命令使得處理更有效。RW事務(wù)同時(shí)指定讀和相應(yīng)的寫。當(dāng)DE排隊(duì)到BE的RW事務(wù)時(shí),相對(duì)傳統(tǒng)的讀或?qū)懯聞?wù)僅有單個(gè)地址和字節(jié)計(jì)數(shù)其指定源地址、目的地址和字節(jié)計(jì)數(shù)。該RW命令簡(jiǎn)化DE的架構(gòu),因?yàn)镈E不必對(duì)其排隊(duì)的每個(gè)事務(wù)管理讀和寫兩個(gè)階段。相反,DE只排隊(duì)單個(gè)RW事務(wù)并且于是能夠"忘記,,該事務(wù)。BE對(duì)每個(gè)由DE排隊(duì)的RW事務(wù)運(yùn)行單獨(dú)的讀和寫。除了DE的設(shè)計(jì)簡(jiǎn)化外,此架構(gòu)比傳統(tǒng)的架構(gòu)快。在傳統(tǒng)的架構(gòu)中,對(duì)于數(shù)據(jù)塊移動(dòng)的每個(gè)事務(wù),DMA引擎將讀排隊(duì)并等待讀完成。然后,DMA引擎排隊(duì)相應(yīng)的寫。本說明性實(shí)施例的RW事務(wù)架構(gòu)消除來自BE的、用于通知DE讀已結(jié)束的通信以及從DE到BE的、排隊(duì)相應(yīng)的寫的通信。該通信的消除對(duì)每一事務(wù)節(jié)省至少兩個(gè)時(shí)鐘周期。在該架構(gòu)中利用RW命令同樣能夠簡(jiǎn)化BE的架構(gòu)。可以使用單個(gè)事務(wù)隊(duì)列,而不是實(shí)現(xiàn)單獨(dú)的讀和寫隊(duì)列。該架構(gòu)同樣節(jié)省DE中的屬性空間,因?yàn)樵诘却x數(shù)據(jù)回來的同時(shí),DE不必?fù)碛锌臻g以存儲(chǔ)通道的數(shù)目乘以緩沖器的數(shù)目的地址。舉個(gè)例子,DE在16個(gè)緩沖器、4個(gè)通道的DMA控制器中可能需要64個(gè)地址。BE僅需為其包含的緩沖器存儲(chǔ)讀和寫地址。對(duì)于單獨(dú)的讀和寫命令,必須為每個(gè)由DE排隊(duì)到BE的可能的事務(wù)保留屬性;因此,對(duì)相同的DE使用不同的BE將很困難,因?yàn)镈E必須擁有的屬性空間的數(shù)量直接取決于在BE內(nèi)的緩沖器的數(shù)目。在說明性實(shí)施例的RW事務(wù)架構(gòu)中,一旦BE確認(rèn)應(yīng)答,DE就"忘記"每個(gè)事務(wù),因此DE內(nèi)的架構(gòu)和資源不依賴于該BE支持多少緩沖器。這允許不同的BE具有不同數(shù)目的緩沖器,并且因此不同區(qū)域資源將用于相同的DE。緩沖器的數(shù)目能夠取決于在每個(gè)芯片系統(tǒng)(SOC)中的設(shè)備的期望的等待時(shí)間。可以知道在BE中實(shí)現(xiàn)的緩沖器大小。DE.可以向BE做出"測(cè)定緩沖器大小"的請(qǐng)求。不考慮緩沖器大小,BE可以變得太復(fù)雜,因?yàn)閷]有東西來防止DE請(qǐng)求超出BE緩沖器空間的總數(shù)量的事物。在本說明性實(shí)施例的架構(gòu)中,BE能夠以"流過(flowthrough),,模式運(yùn)行,只要總線不"調(diào)步(pace),,(插入等待狀態(tài))寫數(shù)據(jù)。這意味著一旦在BE總線上確認(rèn)應(yīng)答寫請(qǐng)求,緩沖器馬上能夠重新用于為下一次讀。因?yàn)閷憯?shù)據(jù)不能停止,能夠存在讀數(shù)據(jù)流入緩沖器的一側(cè)同時(shí)寫數(shù)據(jù)流出另一側(cè)。這允許讀和寫數(shù)據(jù)并行的傳送到相同緩沖器而沒有讀數(shù)據(jù)將覆蓋寫數(shù)據(jù)的任何可能。利用單獨(dú)的讀和寫命令,DE必須知道錯(cuò)誤;因此,BE必須更新錯(cuò)誤寄存器并且通知DE任何其必須知道的在總線上發(fā)生的錯(cuò)誤。當(dāng)在已利用單獨(dú)的讀和寫命令排隊(duì)的事務(wù)之一中發(fā)現(xiàn)錯(cuò)誤時(shí),DE做什么將取決于其實(shí)現(xiàn)。DE可以設(shè)計(jì)用來做的事之一是停止在當(dāng)前通道上排隊(duì)任何更多的事務(wù)直到由軟件處理錯(cuò)誤。在利用RW命令的說明性實(shí)施例的架構(gòu)中,因?yàn)镈E—旦排隊(duì)事務(wù)就忘記每個(gè)RW事務(wù),這變成BE的責(zé)任來處理作為執(zhí)行RW事務(wù)的讀和相關(guān)聯(lián)的寫的結(jié)果而在總線上發(fā)生的任何錯(cuò)誤。"延遲讀取"是高等待時(shí)間目標(biāo)使用的、通過在總線正取高等待時(shí)間數(shù)據(jù)的同時(shí)不停止該總線來提高總線利用的方法。目標(biāo)典型地具有選項(xiàng)將等待狀態(tài)插入事務(wù)中以延遲該事務(wù)的完成直到其能夠返回該數(shù)據(jù)。等待狀態(tài)對(duì)高等待時(shí)間目標(biāo)非常低效,因?yàn)檫@種目標(biāo)必須對(duì)于每個(gè)事務(wù)插入許多等待狀態(tài),并且當(dāng)總線在等待狀態(tài)時(shí),不能運(yùn)行從任何主機(jī)到任何目標(biāo)的其他事務(wù)。目標(biāo)定向完成(TDC)是對(duì)延遲讀取的增強(qiáng)。支持TDC的目標(biāo)捕獲事務(wù)的標(biāo)簽連同地址。目標(biāo)具有與其能夠接收的每個(gè)標(biāo)簽相關(guān)聯(lián)的讀屏蔽信號(hào)。如果總線允許16個(gè)不同的讀標(biāo)簽,則每個(gè)TDC目標(biāo)具有讀屏蔽總線。當(dāng)TDC目標(biāo)排隊(duì)讀時(shí),它聲明(assert)與讀的標(biāo)簽對(duì)應(yīng)的讀屏蔽信號(hào)。只要為標(biāo)簽聲明讀屏蔽,主機(jī)知道不要重復(fù)該讀。當(dāng)目標(biāo)準(zhǔn)備好為該讀傳送數(shù)據(jù)時(shí),它對(duì)該讀屏蔽信號(hào)解除聲明(deassert)。主機(jī)然后可以重復(fù)事務(wù),并且由目標(biāo)完成該事務(wù)??梢詫碜运心繕?biāo)的讀屏蔽信號(hào)"或,,運(yùn)算到一起來形成提供給主機(jī)的單個(gè)讀屏蔽。這是可以實(shí)現(xiàn)的,因?yàn)橹鳈C(jī)不能擁有多于一個(gè)的在總線上未完成的、具有相同標(biāo)簽的讀事務(wù)。一次僅一個(gè)目標(biāo)向給定的主機(jī)對(duì)于給定的標(biāo)簽聲明該讀屏蔽。TDC擁有兩個(gè)主要的目的。首先,TDC是避免不必要地重復(fù)事務(wù)的辦法,.由此該主機(jī)重復(fù)已經(jīng)重試并且由目標(biāo)排隊(duì)的事務(wù)(其還未準(zhǔn)備好返回?cái)?shù)據(jù))。在高等待時(shí)間環(huán)境,能夠避免許多多余的事務(wù),為生產(chǎn)性工作節(jié)省總線帶寬。其次,對(duì)于能夠排隊(duì)許多(如16)事務(wù)的目標(biāo),TDC為該目標(biāo)提供告訴主機(jī)哪個(gè)事務(wù)可用于卸載,以及它們以什么次序完成的辦法。主機(jī)向目標(biāo)排隊(duì)比如16個(gè)事務(wù)并且然后循環(huán)那16個(gè)事務(wù)以看看該16個(gè)事務(wù)中哪個(gè)已經(jīng)完成和哪個(gè)沒有完成而將是非常低效的。例如,假定16個(gè)中13個(gè)事務(wù)首先完成。主機(jī)將必須讀標(biāo)簽O,得到重試,讀標(biāo)簽l,得到重試,讀標(biāo)簽2,得到重試等等,直到它最后到達(dá)準(zhǔn)備卸載數(shù)據(jù)的事務(wù)13。TDC避免了對(duì)能夠排隊(duì)許多事務(wù)的目標(biāo)的極大量的多余的請(qǐng)求。此外,TDC允許主機(jī)按它可以達(dá)到最佳公平性的次序來卸載讀數(shù)據(jù)。在一個(gè)說明性實(shí)施例中,總線引擎(BE)具有兩個(gè)讀隊(duì)列和一個(gè)寫隊(duì)列。第一讀隊(duì)列用于"新的讀取"以及第二讀隊(duì)列用于"舊的讀取",舊的讀耳又是已經(jīng)在總線上重試過至少一次的讀取。BE將最高優(yōu)先級(jí)給新的讀取,因?yàn)樗鼈兪歉叩却龝r(shí)間。這種機(jī)制提供辦法來給予新的讀取絕對(duì)優(yōu)先級(jí),并且仍避免死鎖狀況。這樣構(gòu)造在此架構(gòu)中的三個(gè)隊(duì)列以致于事務(wù)從DE向新的讀隊(duì)列移動(dòng)。重試過讀的事務(wù)移動(dòng)到舊的讀隊(duì)列。讀完成的事務(wù)移動(dòng)到寫隊(duì)列。新的讀隊(duì)列擁有絕對(duì)優(yōu)先級(jí)。之后,在舊的讀隊(duì)列和寫隊(duì)列之間公平判優(yōu)。在每個(gè)隊(duì)列內(nèi),基于先進(jìn)先出(FIFO)派遣各事務(wù)。這種架構(gòu)比其他方案擁有性能優(yōu)勢(shì),其在不同類型的事務(wù)間更公平地判優(yōu)。其他方案實(shí)現(xiàn)更公平的判優(yōu)以避免死鎖,而增加第二讀隊(duì)列消除了死鎖的可能性。圖4說明了依照說明性實(shí)施例的整個(gè)總線引擎隊(duì)列結(jié)構(gòu)。接口410從DMA引擎接收RW命令,并且將這些命令置于新的讀隊(duì)列402中。DE經(jīng)由簡(jiǎn)單請(qǐng)求/確認(rèn)應(yīng)答握手來排隊(duì)到BE的事務(wù)。當(dāng)沒有更多隊(duì)列空間時(shí),BE保留確認(rèn)應(yīng)答。每個(gè)DMA移動(dòng)由讀和寫組成。因此,每個(gè)RW命令作為在新的讀隊(duì)列402中的新的讀而開始。新的讀隊(duì)列402包含尚未在總線430上嘗試的讀??偩€接口單元(BIU)420經(jīng)由FIFO機(jī)制(下面進(jìn)一步詳細(xì)描述)、按照讀被放入新的讀隊(duì)列402的次序運(yùn)行所述讀。FIFO排序適于所有的隊(duì)列402-406。復(fù)用器411從新的讀隊(duì)列402中選擇將由總線接口單元420運(yùn)行的讀。當(dāng)BIU420從新的讀隊(duì)列402中運(yùn)行讀時(shí),有兩種可能的結(jié)果。讀可能馬上完成。這例如可能發(fā)生于低等待時(shí)間目標(biāo),其不使用TDC機(jī)制并且能夠立刻接受該事務(wù)。在此情況下,BIU420在總線430上執(zhí)行讀。當(dāng)完成讀時(shí),將事務(wù)送到寫隊(duì)列406,繞過舊的讀隊(duì)列404。當(dāng)運(yùn)行新的讀時(shí)可能發(fā)生的第二結(jié)果是重試該讀。例如,如果目標(biāo)設(shè)備忙,則讀可能被重試。這個(gè)適于TDC和非TDC設(shè)備。當(dāng)TDC設(shè)備因?yàn)槊Χ卦嚂r(shí),它不聲明讀屏蔽信號(hào)。然后向舊的讀隊(duì)列404發(fā)送重試的忙事務(wù),從而將其放入隊(duì)列中再次運(yùn)行??商鎿Q地,如果TDC設(shè)備已經(jīng)排隊(duì)該事務(wù)則可以重試讀。當(dāng)此發(fā)生時(shí),設(shè)備重試該事務(wù)并且聲明對(duì)應(yīng)于標(biāo)簽的讀屏蔽信號(hào)。排隊(duì)的事務(wù)被保留在新的讀隊(duì)列中直到其相關(guān)聯(lián)的讀屏蔽信號(hào)解除聲明--其標(biāo)簽不放回FIFO排序的新的讀隊(duì)列中。當(dāng)相應(yīng)的讀屏蔽信號(hào)解除聲明時(shí),讀從新的讀隊(duì)列404發(fā)送到舊的讀隊(duì)列404。這是TDC機(jī)制防止事務(wù)再次運(yùn)行的方式,直到目標(biāo)說讀數(shù)據(jù)可用。復(fù)用器412從舊的讀隊(duì)列404中選擇將由總線接口單元420運(yùn)行的讀。當(dāng)BIU420從舊的讀隊(duì)列404中運(yùn)行讀時(shí),存在兩種可能的結(jié)果。該讀可能.馬上完成。這可能發(fā)生于非-TDC目標(biāo),其由于忙之前重試過至少一次讀,但是現(xiàn)在能夠接受事務(wù)。對(duì)于其數(shù)據(jù)現(xiàn)在可用的TDC目標(biāo),讀也可能完成。在任一情況下,該事務(wù)一完成就被從舊的讀隊(duì)列404發(fā)送到寫隊(duì)列406。從舊的讀隊(duì)列404運(yùn)行讀時(shí)可能發(fā)生的第二種事情是該讀可能被重試。這個(gè)應(yīng)該僅發(fā)生于先前已經(jīng)重試的非TDC讀,因?yàn)橐坏┯蒚DC設(shè)備解聲明該讀屏蔽,它不應(yīng)該重試該事務(wù)(但是,這并非嚴(yán)格要求的)。如果重試舊的讀,則它仍留在舊的讀隊(duì)列404的相同位置,但是它的標(biāo)簽被送回到FIFO排序的舊的讀隊(duì)列的開始以將其放回隊(duì)列中再次運(yùn)行,如下面將進(jìn)一步詳細(xì)描述的。復(fù)用器413從寫隊(duì)列406中選擇將由總線接口單元420運(yùn)行的寫。當(dāng)BIU420從寫隊(duì)列406中運(yùn)行寫時(shí),存在兩種可能的結(jié)果。寫可能馬上完成。在此情況下,由事務(wù)指定的事務(wù)數(shù)據(jù)移動(dòng)被完成。一旦寫由總線430(即,即便在該數(shù)據(jù)已經(jīng)在不利用等待狀態(tài)調(diào)步寫的總線上被傳輸之前)接受(確認(rèn)應(yīng)答),相關(guān)聯(lián)的事務(wù)標(biāo)簽就被"解分配(deallocated)"以及能夠被重新用于新的寫。在此點(diǎn)之前可能不會(huì)發(fā)出使用此標(biāo)簽的另一個(gè)讀,因?yàn)樽x和相應(yīng)的寫共享數(shù)據(jù)緩沖器位置。事實(shí)上,對(duì)于所有三個(gè)隊(duì)列,給定的隊(duì)列位置指向相同的數(shù)據(jù)緩沖位置。當(dāng)運(yùn)行寫時(shí)可能發(fā)生的第二種事情是其被重試。這個(gè)可能發(fā)生,因?yàn)槟繕?biāo)忙或不擁有可用的寫緩沖器。如果重試該寫,則它仍留在寫隊(duì)列406的相同位置,但是它的標(biāo)簽被送回到FIFO排序的寫隊(duì)列的開始以將其放回隊(duì)列中再次運(yùn)行,如下面將進(jìn)一步詳細(xì)描述的。可替換地,BE可以馬上簡(jiǎn)單重復(fù)重試的寫而非將其再裝回到FIFO排序中。這將不會(huì)導(dǎo)致死鎖,因?yàn)閷懙耐瓿刹蝗Q于除了其前頭的其他寫之外的其他事務(wù)的完成。復(fù)用器415在來自新的讀隊(duì)列402、舊的讀隊(duì)列404、和寫隊(duì)列406中的事務(wù)中選擇??偩€接口單元420給予新的讀隊(duì)列402絕對(duì)優(yōu)先級(jí);因此,如果在新的讀隊(duì)列402中新的讀可用,則BIU420向復(fù)用器415提供選擇信號(hào)以便從復(fù)用器411中選4奪事務(wù)。如果新的讀在新的讀隊(duì)列402中不可用,則BIU420向復(fù)用器415提供選捧信號(hào)以便從復(fù)用器414中選擇事務(wù)。復(fù)用器414在舊的讀隊(duì)列404和寫隊(duì)列406之間選擇。BIU420在在舊的讀隊(duì)列404和寫隊(duì)列406之間公平地判優(yōu);因此,當(dāng)新的讀不可用時(shí),BIU420向復(fù)用器414提供選擇信號(hào)以便在來自復(fù)用器412的事務(wù)和來自復(fù)用器413的事務(wù)之間交替。如上所述,BIU420給予新的讀隊(duì)列402絕對(duì)優(yōu)先級(jí)。如果在新的讀隊(duì)列402中有任何新的讀可用,則它們?nèi)繉⒃谌魏巫x從舊的讀隊(duì)列404中發(fā)出或任何寫從寫隊(duì)列406中發(fā)出之前發(fā)出。在這種方式中,對(duì)于高等待時(shí)間設(shè)備該DMA控制器被優(yōu)化,由于是強(qiáng)制啟動(dòng)那些設(shè)備盡可能快地工作于它們的數(shù)據(jù)提取。當(dāng)高等待時(shí)間設(shè)備正工作于它們的提取時(shí),完成相對(duì)快的寫和舊的讀能夠由DMA控制器處理。這達(dá)到最大量的并行性,因?yàn)镈MA控制器能夠工作于那些它能夠完成的(寫和舊的讀),同時(shí)高等待時(shí)間設(shè)備工作于它們的高等待時(shí)間讀。當(dāng)不存在未決的新的讀,但是BIU420考慮寫和舊的讀時(shí),BIU420的判優(yōu)機(jī)制在舊的讀和寫之間公平地判優(yōu)。公平判優(yōu)的實(shí)現(xiàn)是因?yàn)樘幚砼f的讀和寫是同等地重要的。處理"準(zhǔn)備好"TDC讀和處理寫二者經(jīng)過管道移動(dòng)數(shù)據(jù),以便最終釋放標(biāo)簽從而可以排隊(duì)更多的讀。當(dāng)判優(yōu)方案給予任何類別的事務(wù)絕對(duì)優(yōu)先級(jí)時(shí),死鎖和資源缺乏值得關(guān)注。這里,BIU給予新的讀絕對(duì)優(yōu)先級(jí)。一般,當(dāng)一個(gè)事務(wù)無法完成時(shí)死鎖會(huì)發(fā)生(即,連續(xù)地重試事務(wù)),因?yàn)橛行┢渌聞?wù)必須先完成,但是其他事務(wù)由于第一事務(wù)處于具有絕對(duì)優(yōu)先級(jí)的事務(wù)類別而無法完成。第二"釋放,,事務(wù)處于較低優(yōu)先級(jí)的事務(wù)類別中,其無法運(yùn)行。該說明性實(shí)施例的架構(gòu)保證不會(huì)死鎖,因?yàn)榻o定事務(wù)僅能夠在新的讀隊(duì)列排隊(duì)一次。如果重試該事務(wù),則排隊(duì)或沒有排隊(duì)的現(xiàn)在被當(dāng)作舊的讀,并且公平地判優(yōu)舊的讀與寫和其他舊的讀。因此,如果那些其他事務(wù)之一導(dǎo)致要重試新的讀,則該事務(wù)將有機(jī)會(huì)運(yùn)行和解除依賴性。由于擁有絕對(duì)優(yōu)先級(jí)的新的讀的穩(wěn)定流動(dòng),該說明性實(shí)施例的架構(gòu)將同樣不會(huì)經(jīng)歷舊的讀隊(duì)列404或?qū)戧?duì)列406的資源缺乏。這是因?yàn)橐坏┳x離開新的讀隊(duì)列402而進(jìn)入舊的讀隊(duì)列404或?qū)戧?duì)列406,另一個(gè)新的讀無法在該新的讀隊(duì)列中的相同位置處取代其直到開始關(guān)于該事務(wù)的寫。這保證新的.讀隊(duì)列無法使其他隊(duì)列資源缺乏,因?yàn)樵谛碌淖x隊(duì)列402中無法代替事務(wù),直到其已經(jīng)-陂寫隊(duì)列406處理。圖5說明依照說明性實(shí)施例的、在總線引擎中的隊(duì)列的隊(duì)列間排序。該總線引擎向每個(gè)請(qǐng)求事務(wù)分配標(biāo)簽。該標(biāo)簽可以同在總線上使用的事務(wù)標(biāo)簽號(hào)碼一樣。在隊(duì)列510中對(duì)應(yīng)于請(qǐng)求的標(biāo)簽的位置處載入事務(wù)。例如,具有TAG=5的事務(wù)被載入隊(duì)列510中的位置5處。在BE將事務(wù)的請(qǐng)求屬性載入隊(duì)列510的同時(shí),BE將請(qǐng)求的標(biāo)簽置于隊(duì)列排序FIFO520中。隊(duì)列排序FIFO520被用來記住事務(wù)放入隊(duì)列510中的次序。請(qǐng)求標(biāo)簽按照它們被排隊(duì)的次序"彈"出隊(duì)列排序FIFO520的底部。隊(duì)列排序FIFO520的輸出被用來通過向復(fù)用器512提供選擇信號(hào)來從隊(duì)列510中選擇該相應(yīng)的事務(wù)。圖6是說明依照說明性實(shí)施例的、發(fā)出讀寫命令的直接存儲(chǔ)器存取引擎的操作的流程圖。將可理解,流程圖說明的每個(gè)方框,以及流程圖說明的方框組合能夠通過計(jì)算機(jī)程序指令實(shí)現(xiàn)。可以向處理器或其他可編程數(shù)據(jù)處理裝置提供這些計(jì)算機(jī)程序指令以制造機(jī)器,從而在處理器或其他可編程數(shù)據(jù)處理裝置上執(zhí)行的指令創(chuàng)建用于實(shí)現(xiàn)在流程圖方框中指定的功能的器件。這些計(jì)算機(jī)程序指令也可以被存儲(chǔ)在計(jì)算機(jī)可讀存儲(chǔ)器或存儲(chǔ)介質(zhì)上,其能夠指引處理器或其他可編程數(shù)據(jù)處理裝置以特定方式工作,從而存儲(chǔ)在計(jì)算機(jī)可讀存儲(chǔ)器或存儲(chǔ)介質(zhì)中的指令產(chǎn)生制造品,其包括實(shí)現(xiàn)在流程圖方框中指定的功能的指令器件。因此,流程圖說明的方框支持用于執(zhí)行該指定功能的步驟的組合、用于執(zhí)行指定功能的步驟的組合和用于執(zhí)行指定功能的程序指令器件。將同樣可理解,流程圖說明的每個(gè)方框,以及流程圖說明的方塊組合能夠通過執(zhí)行指定功能或步驟的專用的基于硬件的計(jì)算機(jī)系統(tǒng)實(shí)現(xiàn),或通過專用硬件和計(jì)算機(jī)指令的組合來實(shí)現(xiàn)。現(xiàn)在參考圖6,操作開始并且直接存儲(chǔ)器存取(DMA)引擎(DE)確定是否準(zhǔn)備好向總線引擎(BE)發(fā)出新的讀-寫(RW)命令(塊602)。如果新的RW命令沒有準(zhǔn)備好,操作返回到塊602等待,直到RW命令準(zhǔn)備好。如果新的RW命令在塊602中準(zhǔn)備好,DE向BE發(fā)出該RW命令(塊604)。此后,DE確定是否接收到關(guān)于當(dāng)前命令的確認(rèn)應(yīng)答(塊606)。如果DE確定其已經(jīng)接收關(guān)于當(dāng)前命令的確認(rèn)應(yīng)答,則操作返回到塊602以確定是否準(zhǔn)備好發(fā)出新的RW命令。如果DE在塊606中確定沒有接收到確認(rèn)應(yīng)答,操作返回到塊606等待,直到接收到確認(rèn)應(yīng)答。只要該DE獲得關(guān)于其當(dāng)前請(qǐng)求的確認(rèn)應(yīng)答,其能夠作出另一個(gè)請(qǐng)求。當(dāng)BE用光可用的緩沖器時(shí),它保留DE當(dāng)前請(qǐng)求的確認(rèn)應(yīng)答,這防止DE請(qǐng)求任何更多的事務(wù)。當(dāng)資源在BE中釋^:,它將激活到DE的確認(rèn)應(yīng)答,并且然后該DE能夠請(qǐng)求另一個(gè)事務(wù)。圖7A和7B是說明依照說明性實(shí)施例的、在直接存儲(chǔ)器存取設(shè)備中的總線引擎的操作的流程圖。更具體地,參考圖7A,所示流程圖說明依照說明性實(shí)施例的、從DMA引擎(DE)接收讀-寫(RW)命令的總線引擎(BE)的操作。操作開始并且BE確定是否正從DE發(fā)出新的RW命令(塊702)。如果沒有發(fā)出新的RW命令,操作返回到塊702等待,直到RW命令被發(fā)出。如果在塊702中新的RW命令正從DE中發(fā)出,則BE從DE接收該RW命令(塊704)。然后BE確定緩沖器空間是否滿(塊706)。如果緩沖器空間不滿,則BE向DE發(fā)出確認(rèn)應(yīng)答;否則,該BE保留確認(rèn)應(yīng)答,直到緩沖器空間可用(塊710)。此后,BE將RW命令置于新的讀隊(duì)列中(塊712),并且操作返回塊702以確定是否正從DE中發(fā)出新的RW命令。圖7B是說明依照說明性實(shí)施例的、用于在DMA設(shè)備中的總線引擎(BE)的隊(duì)列間排序的操作的流程圖。操作開始并且BE確定在新的讀隊(duì)列中是否存在事務(wù)(塊722)。如果存在新的讀,則BE從新的讀隊(duì)列中運(yùn)行下一個(gè)讀(塊724)。下一步,BE確定該讀是否導(dǎo)致重試(塊726)。如果該讀沒有導(dǎo)致重試,意味著該讀馬上完成,BE向?qū)戧?duì)列發(fā)送該事務(wù)(塊728)。此后,操作返回到塊722以確定在新的讀隊(duì)列中是否存在事務(wù)。如果該讀導(dǎo)致塊726中的重試,則BE確定該重試是否是因?yàn)樵撃繕?biāo)設(shè)備排隊(duì)讀(通過聲明該讀屏蔽信號(hào))或因?yàn)槟繕?biāo)設(shè)備忙因而聲明重試而沒有聲明讀屏蔽(塊730)。如果重試是因?yàn)槟繕?biāo)設(shè)備忙(沒有聲明read—mask),則BE向舊的讀隊(duì)列發(fā)出該事務(wù)(塊732),并且操作返回到塊722以確定在新的讀隊(duì)列中是否存在事務(wù)。如果利用重試聲明讀屏蔽,TDC設(shè)備已經(jīng)排隊(duì)該事務(wù),則BE保持該事務(wù)在新的讀隊(duì)列中直到該讀屏蔽解聲明,然后向舊的讀隊(duì)列發(fā)送該事務(wù)(塊738)。此后,操作返回到塊722,以確定在新的讀隊(duì)列中是否存在事務(wù)。返回到塊722,如果在新的讀隊(duì)列中不存在事務(wù),則BE使用公平判優(yōu)從舊的讀隊(duì)列或?qū)戧?duì)列中選擇事務(wù)(塊740)。下一步,BE確定該事務(wù)是舊的讀或?qū)?塊742)。如果該事務(wù)是舊的讀,BE運(yùn)行從舊的讀隊(duì)列中選擇的讀(塊744)。BE確定讀是否導(dǎo)致重試(塊746X如果讀沒有導(dǎo)致重試,BE將事務(wù)發(fā)送到寫隊(duì)列(塊748)。否則,BE將關(guān)于事務(wù)的請(qǐng)求標(biāo)簽送回舊的讀隊(duì)列排序FIFO的開始處(塊750)。此后,操作返回到塊722以確定在新的讀隊(duì)列中是否存在事務(wù)。在塊742中如果該事務(wù)是寫,則BE確定寫是否導(dǎo)致重試(塊752)。如果寫沒有導(dǎo)致重試,BE解分配事務(wù)標(biāo)簽(塊754),并且操作返回到塊722以確定在新的讀隊(duì)列中是否存在事務(wù)。在塊752中如果寫確實(shí)導(dǎo)致重試,BE發(fā)回請(qǐng)求標(biāo)簽、或事務(wù)標(biāo)簽到寫隊(duì)列排序FIFO的開始處,以便重試(塊756)??商鎿Q地,在塊756中,BE可以重復(fù)寫,直到寫成功地完成。此后,操作返回到塊722,以確定在新的讀隊(duì)列中是否存在事務(wù)。因此,該說明性實(shí)施例通過提供一種構(gòu)造為松散耦合的DMA引擎(DE)和總線引擎(BE)的DMA設(shè)備來解決現(xiàn)有技術(shù)的缺點(diǎn)。該DE將編程的數(shù)據(jù)塊分拆成單獨(dú)的事務(wù),解釋分散/聚集描述符,以及在通道間判優(yōu)。BE理解DMA設(shè)備所附屬的總線的總線協(xié)議,并且運(yùn)行由DE送出的所有事務(wù)。DE和BE通過使用能夠在DE和BE之間排隊(duì)的已組合的讀-寫(RW)命令使得該處理更有效??偩€引擎(BE)具有兩個(gè)讀隊(duì)列和一個(gè)寫隊(duì)列。第一讀隊(duì)列用于"新的讀,,以及第二讀隊(duì)列用于"舊的讀,,,舊的讀是已經(jīng)在總線上重.試過至少一次的讀。BE將最高優(yōu)先級(jí)給新的讀,因?yàn)樗鼈兪歉叩却龝r(shí)間。這種機(jī)制提供辦法來給予新的讀絕對(duì)優(yōu)先級(jí),并且仍避免死鎖狀況。應(yīng)當(dāng)理解本說明性實(shí)施例可以采用整個(gè)硬/(牛實(shí)施例、整個(gè)軟件實(shí)施例或包含硬件和軟件部件二者的實(shí)施例的形式。在一個(gè)示范性實(shí)施例中,用軟件實(shí)現(xiàn)該說明性實(shí)施例的機(jī)制,該軟件包括但是不限于固件、常駐軟件、微代碼等。此外,說明性實(shí)施例可以采用從計(jì)算機(jī)可用或計(jì)算機(jī)可讀介質(zhì)可存取的計(jì)算機(jī)程序產(chǎn)品的形式,其提供通過計(jì)算機(jī)或任何指令系統(tǒng)、或與計(jì)算機(jī)或任何指令執(zhí)行系統(tǒng)相結(jié)合地使用的程序代碼。對(duì)于本說明書的目的,計(jì)算機(jī)可用或計(jì)算機(jī)可讀介質(zhì)能夠是任何裝置,其能夠包含、存儲(chǔ)、通信、傳播、或傳輸通過指令執(zhí)行系統(tǒng)、裝置或與設(shè)備或結(jié)合所述指令執(zhí)行系統(tǒng)、裝置或設(shè)備使用的程序。該介質(zhì)可以是電子的、磁的、光的、電磁的、紅外的、或半導(dǎo)體系統(tǒng)(或裝置或設(shè)備)或傳播介質(zhì)。計(jì)算機(jī)可讀介質(zhì)的例子包括半導(dǎo)體或固態(tài)存儲(chǔ)器、磁帶、可移動(dòng)的計(jì)算機(jī)盤、隨機(jī)存取存儲(chǔ)器(RAM)、只讀存儲(chǔ)器(ROM)、硬磁盤和光盤。光盤的現(xiàn)有例子包括壓縮盤-只讀存儲(chǔ)器(CD-ROM)、壓縮盤-讀/寫(CD-R/M)和DVD。適合于存儲(chǔ)和/或執(zhí)行程序代碼的數(shù)據(jù)處理系統(tǒng)將包括至少一個(gè)經(jīng)過系統(tǒng)總線直接或間接地耦合到存儲(chǔ)器件的處理器。該存儲(chǔ)器件能夠包括在實(shí)際執(zhí)行程序代碼期間使用的局部存儲(chǔ)器、大容量存儲(chǔ)器、和高速緩沖存儲(chǔ)器(其提供至少某些程序代碼的臨時(shí),存儲(chǔ)以便減少在執(zhí)行期間必須從大容量存儲(chǔ)器檢索代碼的次數(shù))。輸入/輸出或I/0設(shè)備(包括但不限于鍵盤、顯示器、指示設(shè)備等)能夠直接地或經(jīng)過居間1/0控制器耦合到系統(tǒng)。也可將網(wǎng)絡(luò)適配器耦合到系統(tǒng),以使能數(shù)據(jù)處理系統(tǒng)經(jīng)過居間專用或公用網(wǎng)絡(luò)耦合到其他數(shù)據(jù)處理系統(tǒng)或遠(yuǎn)程打印機(jī)或存儲(chǔ)設(shè)備。調(diào)制解調(diào)器、電纜調(diào)制解調(diào)器和以太網(wǎng)卡僅是當(dāng)前可用的網(wǎng)絡(luò)適配器類型中的一些。已經(jīng)出于說明和描述的目的撰寫了本發(fā)明的說明書,但是無意以公開的形式窮盡或限制本發(fā)明。許多修改和改變對(duì)于本領(lǐng)域技術(shù)人員將顯然。選擇和描述實(shí)施例以便最好地解釋本發(fā)明的原理、實(shí)際應(yīng)用,并且使本領(lǐng)域其他技術(shù)人員理解本發(fā)明的各種實(shí)施例具有適合于期望的特定用途的各種修改。權(quán)利要求1.一種用于在直接存儲(chǔ)器存取設(shè)備中執(zhí)行直接存儲(chǔ)器存取塊移動(dòng)的方法,該方法包括在直接存儲(chǔ)器存取設(shè)備內(nèi)的直接存儲(chǔ)器存取引擎處接收直接存儲(chǔ)器存取塊移動(dòng)請(qǐng)求,其中該直接存儲(chǔ)器存取塊移動(dòng)請(qǐng)求指示源和目標(biāo);在直接存儲(chǔ)器存取設(shè)備內(nèi)從直接存儲(chǔ)器存取引擎向總線引擎發(fā)出關(guān)于直接存儲(chǔ)器存取塊移動(dòng)請(qǐng)求的一個(gè)或多個(gè)讀寫命令;以及由總線引擎對(duì)于一個(gè)或多個(gè)讀寫命令中的每一個(gè)執(zhí)行從源讀取數(shù)據(jù)的讀操作和將數(shù)據(jù)寫入目標(biāo)的寫操作,以滿足直接存儲(chǔ)器存取塊移動(dòng)請(qǐng)求。2.如權(quán)利要求l所述的方法,其中在一個(gè)或多個(gè)讀寫命令內(nèi)的每一個(gè)讀寫命令包括源地址、目的地址和字節(jié)計(jì)數(shù)。3.如權(quán)利要求2所述的方法,其中對(duì)于給定的讀寫命令,所述字節(jié)計(jì)數(shù)對(duì)應(yīng)于總線引擎的緩沖器大小。4.如權(quán)利要求l所述的方法,進(jìn)一步包括響應(yīng)于在總線引擎處接收給定的讀寫命令,如果在該總線引擎內(nèi)的緩沖器空間沒有滿,則向該直接存儲(chǔ)器存取引擎返回確認(rèn)應(yīng)答。5.如權(quán)利要求4所述的方法,進(jìn)一步包括響應(yīng)于在總線引擎處接收給定的讀寫命令,如果在該總線引擎內(nèi)的緩沖器空間已滿,則保留對(duì)該直接存儲(chǔ)器存取引擎的確認(rèn)應(yīng)答;以及響應(yīng)于在總線引擎中緩沖器空間變?yōu)榭捎?,返回確認(rèn)應(yīng)答到直接存儲(chǔ)器存取引擎,其中直接存儲(chǔ)器存取引擎不發(fā)出后續(xù)的讀寫命令,直到在該直接存儲(chǔ)器存取引擎處接收所述確認(rèn)應(yīng)答。6.如權(quán)利要求l所述的方法,其中執(zhí)行所述讀操作和寫操作包括將與給定讀寫命令相關(guān)聯(lián)的讀事務(wù)置于在總線引擎內(nèi)的新的讀隊(duì)列中。7.如權(quán)利要求6所述的方法,其中執(zhí)行所述讀操作和寫操作進(jìn)一步包括從新的讀隊(duì)列中運(yùn)行讀事務(wù);確定該讀事務(wù)是否是被重試;以及如果該讀事務(wù)不是被重試,則將與讀寫命令相關(guān)聯(lián)的寫事務(wù)置于在總線引擎內(nèi)的寫隊(duì)列中。8.如權(quán)利要求7所述的方法,其中執(zhí)行所述讀操作和寫操作進(jìn)一步包括如果該讀事務(wù)是被重試,則將該讀事務(wù)置于舊的讀隊(duì)列中。9.一種數(shù)據(jù)處理系統(tǒng),包括總線;多個(gè)耦合到總線的總線單元設(shè)備;耦合到總線的直接存儲(chǔ)器存取設(shè)備,其中該直接存儲(chǔ)器存取設(shè)備包括直接存儲(chǔ)器存取引擎和總線引擎;和處理單元,其中該處理單元有到總線的通路,其中直接存儲(chǔ)器存取引擎從處理單元中接收直接存儲(chǔ)器存取塊移動(dòng)請(qǐng)求,其中直接存儲(chǔ)器存取塊移動(dòng)請(qǐng)求指示在多個(gè)總線單元設(shè)備內(nèi)的源設(shè)備和目標(biāo)設(shè)備;其中直接存儲(chǔ)器存取引擎向該總線引擎發(fā)出一個(gè)或多個(gè)關(guān)于直接存儲(chǔ)器存取塊移動(dòng)請(qǐng)求的讀寫命令;和據(jù)的讀操作和將數(shù)據(jù)寫入目標(biāo)設(shè)備的寫操作,以滿足直接存儲(chǔ)器存取塊移動(dòng)請(qǐng)求。10.如權(quán)利要求9所述的數(shù)據(jù)處理系統(tǒng),其中在一個(gè)或多個(gè)讀寫命令內(nèi)的每一個(gè)讀寫命令包括對(duì)應(yīng)于源的源地址、對(duì)應(yīng)于目標(biāo)的目的地址和字節(jié)計(jì)數(shù)。11.如權(quán)利要求9所述的數(shù)據(jù)處理系統(tǒng),其中響應(yīng)于接收給定的讀寫命令,如果在總線引擎內(nèi)的緩沖器空間沒有滿,則總線引擎向直接存儲(chǔ)器存取引擎返回確認(rèn)應(yīng)答。12.如權(quán)利要求11所述的數(shù)據(jù)處理系統(tǒng),其中響應(yīng)于接收給定的讀寫命令,如果在總線引擎內(nèi)的緩沖器空間已滿,則總線引擎保留向直接存儲(chǔ)器存取引擎的確認(rèn)應(yīng)答;和其中響應(yīng)于對(duì)緩沖器空間變?yōu)榭捎?,總線引擎返回確認(rèn)應(yīng)答到直接存儲(chǔ)器存取引擎,其中直接存儲(chǔ)器存取引擎不發(fā)出后續(xù)的讀寫命令,直到在直接存儲(chǔ)器存取引擎處接收到確認(rèn)應(yīng)答。13.如權(quán)利要求9所述的數(shù)據(jù)處理系統(tǒng),其中總線引擎將與給定的讀寫命令相關(guān)聯(lián)的讀事務(wù)置于在總線引擎內(nèi)的新的讀隊(duì)列中。14.如權(quán)利要求13所述的數(shù)據(jù)處理系統(tǒng),其中總線引擎從新的讀隊(duì)列中運(yùn)行讀事務(wù),確定該讀事務(wù)是否是被重試,并且如果該讀事務(wù)不是被重試,則將與讀寫命令相關(guān)聯(lián)的寫事務(wù)置于在總線引擎內(nèi)的寫隊(duì)列中。15.如權(quán)利要求14所述的數(shù)據(jù)處理系統(tǒng),其中如果該讀事務(wù)是被重試,則總線引擎將該讀事務(wù)置于舊的讀隊(duì)列中。16.如權(quán)利要求15所述的數(shù)據(jù)處理系統(tǒng),其中總線引擎將絕對(duì)優(yōu)先級(jí)給新的讀隊(duì)列,并且在舊的讀隊(duì)列和寫隊(duì)列之間公平地判優(yōu)。17.如權(quán)利要求9所述的數(shù)據(jù)處理系統(tǒng),其中多個(gè)總線單元設(shè)備包括存儲(chǔ)器設(shè)備、貯存設(shè)備、或輸入/輸出設(shè)備。18.如權(quán)利要求9所述的數(shù)據(jù)處理系統(tǒng),其中處理單元是芯片上的不同種類的多處理器系統(tǒng)。19.一種南橋,包括總線;耦合到該總線的直接存儲(chǔ)器存取設(shè)備,包括直接存儲(chǔ)器存取引擎;和總線引擎,其中處理單元有到該總線的通路;其中直接存儲(chǔ)器存取引擎從處理單元中接收直接存儲(chǔ)器存取塊移動(dòng)請(qǐng)求,其中直接存儲(chǔ)器存取塊移動(dòng)請(qǐng)求指示連接到總線的源設(shè)備和目標(biāo)設(shè)備;其中直接存儲(chǔ)器存取引擎向該總線引擎發(fā)出一個(gè)或多個(gè)關(guān)于直接存儲(chǔ)器存取塊移動(dòng)請(qǐng)求的讀寫命令;和其中總線引擎對(duì)于一個(gè)或多個(gè)讀寫命令中的每一個(gè)執(zhí)行從該源設(shè)備讀取數(shù)據(jù)的讀操作和將數(shù)據(jù)寫入目標(biāo)設(shè)備的寫操作,以滿足直接存儲(chǔ)器存取塊移動(dòng)請(qǐng)求。20.如權(quán)利要求19所述的南橋,其中在一個(gè)或多個(gè)讀寫命令內(nèi)的每一個(gè)讀寫命令包括源地址、目的地址和字節(jié)計(jì)數(shù)。全文摘要提供一種構(gòu)造為松散地耦合的直接存儲(chǔ)器存取引擎(DE)和總線引擎(BE)的直接存儲(chǔ)器存取(DMA)設(shè)備。DE將編程的數(shù)據(jù)塊分拆成單獨(dú)的事務(wù),解釋分散/聚集(scatter/gather)描述符,以及在通道間判優(yōu)。DE和BE使用能夠在該DE和BE之間排隊(duì)的組合的讀寫(RW)命令。總線引擎(BE)具有兩個(gè)讀隊(duì)列和一個(gè)寫隊(duì)列。第一讀隊(duì)列用于“新的讀”以及第二讀隊(duì)列用于“舊的讀”,舊的讀是已經(jīng)在總線上重試過至少一次的讀。BE將絕對(duì)優(yōu)先級(jí)給新的讀,并且仍避免死鎖狀況。文檔編號(hào)G06F13/28GK101149714SQ20071015281公開日2008年3月26日申請(qǐng)日期2007年9月18日優(yōu)先權(quán)日2006年9月18日發(fā)明者喬拉·拜蘭,伯納德·C·德雷魯普,盧斯·E·德拉托爾,理查德·尼古拉斯,約蒂·古普塔申請(qǐng)人:國際商業(yè)機(jī)器公司