DMA總結

概念

Direct Memory Access(存儲器直接訪問)。這是指一種高速的數據傳輸操作,允許在外部設備和存儲器之間直接讀寫數據。整個數據傳輸操作在一個稱爲"DMA控制器"的控制下進行的。CPU除了在數據傳輸開始和結束時做一點處理外(開始和結束時候要做中斷處理),在傳輸過程中CPU可以進行其他的工作(前提是未設置停止CPU訪問)。這樣,在大部分時間裏,CPU和輸入輸出都處於並行操作。因此,使整個計算機系統的效率大大提高”。

DMA傳送方式是讓存儲器與外設、或外設與外設之間直接交換數據,不需要經過CPU的累加器中轉,減少了這個中間環節,並且內存地址的修改、傳送完畢的結束報告都是由硬件電路實現的,因此大大地提高了數據的傳輸速度。一個DMA傳送只需要執行一個DMA週期,相當於一個總線讀寫週期。

DMA是在專門的硬件( DMA)控制下,實現高速外設和主存儲器之間自動成批交換數據儘量減少CPU干預的輸入/輸出操作方式。 

適用場合

DMA方式主要適用於一些高速的I/O設備。這些設備傳輸字節或字的速度非常快。對於這類高速I/O設備,如果用輸入輸出指令或採用中斷的方法來傳輸字節信息,會大量佔用CPU的時間,同時也容易造成數據的丟失。而DMA方式能使I/O設備直接和存儲器進行成批數據的快速傳送。

DMA傳送主要用於需要高速大批量數據傳送的系統中,以提高數據的吞吐量。如磁盤存取、圖像處理、高速數據採集系統、同步通信中的收/發信號等方面應用甚廣。通常只有數據流量較大(kBps或者更高)的外設才需要支持DMA能力,這些應用方面典型的例子包括視頻、音頻和網絡接口。

DMA控制器(DMAC)

DMA傳送雖然脫離CPU的控制,但並不是說DMA傳送不需要進行控制和管理。通常是採用DMA控制器取代CPU,負責DMA傳送的全過程控制。目前DMA控制器都是可編程的大規模集成芯片。

DMA控制器是內存儲器同外設之間進行高速數據傳送時的硬件控制電路,是一種實現直接數據傳送的專用處理器,它必須能取代在程序控制傳送中由CPU和軟件所完成的各項功能。它的主要功能是:
(1)DMAC同外設之間有一對聯絡信號線--外設的DMA請求信號DREQ以及 DMAC向外設發出的DMA響應信號DACK;(如下圖)
(2)DMAC在接收到DREQ後,同CPU之間也有一對聯絡信號線--DMAC向CPU 發出總線請求信號(HOLD或BUSRQ),CPU在當前總線週期結束後向DMAC發出總線響應信號(HLDA或BUSAK),DMAC接管對總線的控制權,進入DMA操作方式;
(3)能發出地址信息,對存儲器尋址,並修改地址指針,DMAC內部必須有能自動加1或減1的地址寄存器;
(4)能決定傳送的字節數,並能判斷DMA傳送是否結束。DMA內部必須有能自動減1的字計數寄存器,計數結束產生終止計數信號;
(5)能發出DMA結束信號,釋放總線,使CPU恢復總線控制權;
(6)能發出讀、寫控制信號,包括存儲器訪問信號和I/O訪問信號。DMAC內部必須有時序和讀寫控制邏輯。



DMA傳輸過程

1、當外設有DMA需求,並且準備就緒,就向DMAC控制器發出DMA請求信號DREQ。

2、DMAC接到DMA請求信號後向CPU發出總線請求信號HRQ。該信號連接到CPU的HOLD信號。
       3、CPU接到總線請求信號以後,如果允許DMA傳輸,則會在當前總線週期結束後,發出DMA響應信號HLDA一方面CPU將控制總線、數據總線和地址總線置高阻態,即放棄對總線的控制權;另一方面CPU將有效的HLDA信號送給DMAC,通知DMAC,CPU已經放棄了對總線的控制權。
       4、DMAC獲得對總線的控制權,並且向外設送出DMAC的應答信號DACK,通知外設可以開始進行DMA傳輸了。
       5、DMAC向存儲器發送地址信號和向存儲器及外設發出讀/寫控制信號,控制數據按初始化設定的方向傳送,實現外設與內存的數據傳輸。
       6、數據全部傳輸結束後,DMAC向CPU發HOLD信號,要求撤銷總線請求信號。CPU收到該信號以後,使HLDA無效,同時收回對總線的控制權。


DMA控制器的基本組成
一個DMA控制器,實際上是採用DMA方式的外圍設備與系統總線之間的接口電路,這個接口電路是在中斷接口的基礎上再加DMA機構組成。習慣上將DMA方式的接口電路稱爲DMA控制器。  
(1)內存地址計數器:用於存放內存中要交換的數據的地址。
(2)字計數器:用於記錄傳送數據塊的長度(多少字數)。
(3)數據緩衝寄存器:用於暫存每次傳送的數據(一個字)。
(4)"DMA請求"標誌:每當設備準備好一個數據字後給出一個控制信號,使"DMA請求"標誌置"1"。該標誌置位後向"控制/狀態"邏輯發出DMA請求,後者又向CPU發出總線使用權的請求(HOLD),CPU響應此請求後發回響應信號HLDA,"控制/狀態"邏輯接收此信號後發出DMA響應信號,使"DMA 請求"標誌復位,爲交換下一個字做好準備。
 (5)"控制/狀態"邏輯:由控制和時序電路以及狀態標誌等組成,用於修改內存地址計數器和字計數器,指定傳送類型(輸入或輸出),並對"DMA請求"信號和CPU響應信號進行協調和同步。
(6)中斷機構:當字計數器溢出時,意味着一組數據交換完畢,由溢出信號觸發中斷機構,向CPU提出中斷報告。



DMA的工作方式 (因爲DMA和CPU都要使用總線,工作方式的區分也就是基於總線的分配方式)

1,停止CPU訪內;  

總線全部給DMA使用。

2,周啓挪用方式;

週期挪用,又叫週期竊取,是指利用CPU不訪問存儲器的那些週期來實現DMA操作,此時DMA可以使用總線而不用通知CPU也不會妨礙CPU的工作。週期挪用並不減慢CPU的操作,但可能需要複雜的時序電路,而且數據傳輸過程是不連續的和不規則的。

(週期竊取,是DMA方式中由DMA接口向CPU申請佔用總線,佔用一個存取週期。)

與CPU暫停訪存的方式相比,它既實現了I/O傳送,又較好地發揮了主存與CPU的效率,是一種廣泛採用的方法。應該指出,I/O設備每挪用一個主存週期都要申請總線控制權、建立總線控制權和歸還總線控制級權。因此,儘管傳送一個字對主存而言只佔用一個主存週期,但對DMA接口而言,實質上要佔2—5個主存週期(由邏輯線路的延遲特性而定)。因此週期挪用的方法比較適合於I/O設備的讀寫週期大於主存週期的情況

3,DMA與CPU交替訪內。


DMA傳輸方式

1,單字節傳輸方式;  

一次DMA只傳輸一個字節,效率很低。但是在傳輸過程中CPU有機會獲取對總線的控制器。

2,數據塊傳輸方式;  

數據以數據塊的方式進行傳輸。只要DREQ啓動就會連續地傳送數據塊。一次請求傳送一個數據塊,效率高。在數據的傳送期間,CPU長時間無法控制總線。

3,請求傳輸方式;

DREQ信號有效就連續傳輸數據,否則不能進行數據的傳輸。

4,級聯傳輸方式。

用於通過多個DMA控制器級聯以擴展通道。第一級只起優先權網絡的作用,實際的操作由第二級芯片完成。還可由第二級到第三級等。(多個DMAC)


DMA傳送類型

1,兩個設備之間;

2,設備和內存之間;(多數情況下,DMAC進行的是外設接口和內存之間的傳輸。

3,內存和內存之間。

DMA讀:把數據由存儲器傳送到外設。
DMA寫:把外設輸入的數據寫入存儲器。
DMA檢驗(控操作):DMAC不進行任何檢驗,外設可以進行DMA校驗,存儲器和 I/O 控制線保持無效,不進行傳送。


DMA技術的弊端

DMA傳送的優點是以增加系統硬件的複雜性和成本爲代價的,因爲DMA是用硬件控制代替軟件控制的。另外,DMA傳送期間CPU被掛起,部分或完全失去對系統總線的控制,這可能會影響CPU對中斷請求的及時響應與處理。因此,在一些小系統或速度要求不高、數據傳輸量不大的系統中,一般並不用DMA方式。

因爲DMA允許外設直接訪問內存,從而形成對總線的獨佔這在實時性強的硬實時系統嵌入式開發中將會造成中斷延時過長。


參考網址:

http://weiqijun.blog.51cto.com/338163/71651/

http://baike.baidu.com/subview/32471/5048464.htm#reference-[1]-5048464-wrap





發佈了29 篇原創文章 · 獲贊 22 · 訪問量 12萬+
發表評論
所有評論
還沒有人評論,想成為第一個評論的人麼? 請在上方評論欄輸入並且點擊發布.
相關文章