DMA方式,Direct Memory Access,也稱為成組數(shù)據(jù)傳送方式,有時(shí)也稱為直接內(nèi)存操作。DMA方式在數(shù)據(jù)傳送過(guò)程中,沒有保存現(xiàn)場(chǎng)、恢復(fù)現(xiàn)場(chǎng)之類的工作。由于CPU根本不參加傳送操作,因此就省去了CPU取指令、取數(shù)、送數(shù)等操作。內(nèi)存地址修改、傳送字 個(gè)數(shù)的計(jì)數(shù)等等,也不是由軟件實(shí)現(xiàn),而是用硬件線路直接實(shí)現(xiàn)的。所以DMA方式能滿足高速I/O設(shè)備的要求,也有利于CPU效率的發(fā)揮。
一個(gè)設(shè)備接口試圖通過(guò)總線直接向另一個(gè)設(shè)備發(fā)送數(shù)據(jù)(一般是大批量的數(shù)據(jù)),它會(huì)先向CPU發(fā)送DMA請(qǐng)求信號(hào)。外設(shè)通過(guò)DMA的一種專門接口電路――DMA控制器(DMAC),向CPU提出接管總線控制權(quán)的總線請(qǐng)求,CPU收到該信號(hào)后,在當(dāng)前的總線周期結(jié)束后,會(huì)按DMA信號(hào)的優(yōu)先級(jí)和提出DMA請(qǐng)求的先后順序響應(yīng)DMA信號(hào)。CPU對(duì)某個(gè)設(shè)備接口響應(yīng)DMA請(qǐng)求時(shí),會(huì)讓出總線控制權(quán)。于是在DMA控制器的管理下,外設(shè)和存儲(chǔ)器直接進(jìn)行數(shù)據(jù)交換,而不需CPU干預(yù)。數(shù)據(jù)傳送完畢后,設(shè)備接口會(huì)向CPU發(fā)送DMA結(jié)束信號(hào),交還總線控制權(quán)。
DMA方式的主要優(yōu)點(diǎn)是速度快。
基本操作實(shí)現(xiàn)DMA傳送的基本操作如下:1、外設(shè)可通過(guò)DMA控制器向CPU發(fā)出DMA請(qǐng)求;2、CPU響應(yīng)DMA請(qǐng)求,系統(tǒng)轉(zhuǎn)變?yōu)镈MA工作方式,并把總線控制權(quán)交給DMA控制器;3、由DMA控制器發(fā)送存儲(chǔ)器地址,并決定傳送數(shù)據(jù)塊的長(zhǎng)度;4、執(zhí)行DMA傳送;5、DMA操作結(jié)束,并把總線控制權(quán)交還CPU。
用途DMA方式主要適用于一些高速的I/O設(shè)備。這些設(shè)備傳輸字節(jié)或字的速度非???。對(duì)于這類高速I/O設(shè)備,如果用輸入輸出指令或采用中斷的方法來(lái)傳輸字節(jié)信息,會(huì)大量占用CPU的時(shí)間,同時(shí)也容易造成數(shù)據(jù)的丟失。而DMA方式能使I/O設(shè)備直接和存儲(chǔ)器進(jìn)行成批數(shù)據(jù)的快速傳送。DMA控制器或接口一般包括四個(gè)寄存器:1:狀態(tài)控制寄存器、2:數(shù)據(jù)寄存器、3:地址寄存器、4:字節(jié)計(jì)數(shù)器。這些寄存器在信息傳送之前需要進(jìn)行初始化設(shè)置。即在輸入輸出程序中用匯編語(yǔ)言指令對(duì)各個(gè)寄存器寫入初始化控制字。
DMA 是所有現(xiàn)代電腦的重要特色,他允許不同速度的硬件裝置來(lái)溝通,而不需要依于 CPU 的大量 中斷 負(fù)載。否則,CPU 需要從 來(lái)源 把每一片段的資料復(fù)制到暫存器,然后把他們?cè)俅螌懟氐叫碌牡胤?。在這個(gè)時(shí)間中,CPU 對(duì)于其他的工作來(lái)說(shuō)就無(wú)法使用。DMA 傳輸將一個(gè)內(nèi)存區(qū)從一個(gè)裝置復(fù)制到另外一個(gè), CPU 初始化這個(gè)傳輸動(dòng)作,傳輸動(dòng)作本身是由 DMA控制器來(lái)實(shí)行和完成。典型的例子就是移動(dòng)一個(gè)外部?jī)?nèi)存的區(qū)塊到芯片內(nèi)部更快的內(nèi)存去。像是這樣的操作并沒有讓處理器工作拖延,反而可以被重新排程去處理其他的工作。
DMA 傳輸對(duì)于高效能嵌入式系統(tǒng)算法和網(wǎng)絡(luò)是很重要的。舉個(gè)例子,PC ISA DMA控制器擁有 8 個(gè) DMA 通道,其中的 7 個(gè)通道是可以讓 PC 的 CPU 所利用。每一個(gè) DMA 通道有一個(gè) 16位元 位址暫存器和一個(gè) 16 位元計(jì)數(shù)暫存器。要初始化資料傳輸時(shí),裝置驅(qū)動(dòng)程式一起設(shè)定 DMA 通道的位址和計(jì)數(shù)暫存器,以及資料傳輸?shù)姆较?,讀取或?qū)懭?。然后指?DMA 硬件開始這個(gè)傳輸動(dòng)作。當(dāng)傳輸結(jié)束的時(shí)候,裝置就會(huì)以中斷的方式通知 CPU。但是,DMA傳輸方式只是減輕了CPU的工作負(fù)擔(dān);系統(tǒng)總線仍然被占用。特別是在傳輸大容量文件時(shí),CPU的占用率可能不到10%,但是用戶會(huì)覺得運(yùn)行部分程序時(shí)系統(tǒng)變得相當(dāng)?shù)木徛?。主要原因就是在運(yùn)行這些應(yīng)用程序(特別是一些大型軟件),操作系統(tǒng)也需要從系統(tǒng)總線傳輸大量數(shù)據(jù);故造成過(guò)長(zhǎng)的等待時(shí)間。