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