DMA原理:DMA(Direct Memory Access,直接內存存取) 是全部現代電腦的重要特點,它容許不一樣速度的硬件裝置來溝通,而不須要依於 CPU 的大量中斷負載。不然,CPU 須要歷來源把每一片斷的資料複製到暫存器,而後把它們再次寫回到新的地方。在這個時間中,CPU 對於其餘的工做來講就沒法使用。 DMA 傳輸將數據從一個地址空間複製到另一個地址空間。當CPU 初始化這個傳輸動做,傳輸動做自己是由 DMA 控制器來實行和完成。典型的例子就是移動一個外部內存的區塊到芯片內部更快的內存區。像是這樣的操做並無讓處理器工做拖延,反而能夠被從新排程去處理其餘的工做。DMA 傳輸對於高效能 嵌入式系統算法和網絡是很重要的。 在實現DMA傳輸時,是由DMA控制器直接掌管總線,所以,存在着一個總線控制權轉移問題。即DMA傳輸前,CPU要把總線控制權交給DMA控制器,而在結束DMA傳輸後,DMA控制器應當即把總線控制權再交回給CPU。 <1>、 一個完整的DMA傳輸過程必須通過下面的4個步驟 : 一、DMA請求CPU對DMA控制器初始化,並向I/O接口發出操做命令,I/O接口提出DMA請求。 二、DMA響應DMA控制器對DMA請求判別優先級及屏蔽,向總線裁決邏輯提出總線請求。當CPU執行完當前總線週期便可釋放總線控制權。此時,總線裁決邏輯輸出總線應答,表示DMA已經響應,經過DMA控制器通知I/O接口開始DMA傳輸。 三、DMA傳輸DMA控制器得到總線控制權後,CPU即刻掛起或只執行內部操做,由DMA控制器輸出讀寫命令,直接控制RAM與I/O接口進行DMA傳輸。 在DMA控制器的控制下,在存儲器和外部設備之間直接進行數據傳送,在傳送過程當中不須要中央處理器的參與。開始時需提供要傳送的數據的起始位置和數據長度。 四、DMA結束當完成規定的成批數據傳送後,DMA控制器即釋放總線控制權,並向I/O接口發出結束信號。當I/O接口收到結束信號後,一方面停 止I/O設備的工做,另外一方面向CPU提出中斷請求,使CPU從不介入的狀態解脫,並執行一段檢查本次DMA傳輸操做正確性的代碼。最後,帶着本次操做結果及狀態繼續執行原來的程序。 因而可知,DMA傳輸方式無需CPU直接控制傳輸,也沒有中斷處理方式那樣保留現場和恢復現場的過程,經過硬件爲RAM與I/O設備開闢一條直接傳送數據的通路,使CPU的效率大爲提升。 <2>、DMA傳送方式 DMA技術的出現,使得外圍設備能夠經過DMA控制器直接訪問內存,與此同時,CPU能夠繼續執行程序.那麼DMA控制器與CPU怎樣分時使用內存呢?一般採用如下三種方法:(1)中止CPU訪內存;(2)週期挪用;(3)DMA與CPU交替訪內存. 1.中止CPU訪問內存 當外圍設備要求傳送一批數據時,由DMA控制器發一箇中止信號給CPU,要求CPU放棄對地址總線、數據總線和有關控制總線的使用權.DMA控制器得到總線控制權之後,開始進行數據傳送.在一批數據傳送完畢後,DMA控制器通知CPU可使用內存,並把總線控制權交還給CPU.圖(a)是這種傳送方式的時間圖.很顯然,在這種DMA傳送過程當中,CPU基本處於不工做狀態或者說保持狀態. 優勢: 控制簡單,它適用於數據傳輸率很高的設備進行成組傳送。 缺點: 在DMA控制器訪內階段,內存的效能沒有充分發揮,至關一部份內存工做週期是空閒的。這是由於,外圍設備傳送兩個數據之間的間隔通常老是大於內存存儲週期,即便高速I/O設備也是 如此。例如,軟盤讀出一個8位二進制數大約須要32us,而半導體內存的存儲週期小於0.5us,因 此許多空閒的存儲週期不能被CPU利用. 2.週期挪用: 當I/O設備沒有DMA請求時,CPU按程序要求訪問內存;一旦I/O設備有DMA請求,則由I/O設備挪用一個或幾個內存週期。 這種傳送方式的時間圖以下圖(b): ? I/O設備要求DMA傳送時可能遇到兩種狀況: (1)此時CPU不須要訪內,如CPU正在執行乘法指令。因爲乘法指令執行時間較長,此時I/O訪內與CPU訪內沒有衝突,即I/O設備挪用一二個內存週期對CPU執行程序沒有任何影響。 (2)I/O設備要求訪內時CPU也要求訪內,這就產生了訪內衝突,在這種狀況下I/O設備訪內優先,由於I/O訪內有時間要求,前一個I/O數據必須在下一個訪內請求到來以前存取完畢。顯然,在這種狀況下I/O 設備挪用一二個內存週期,意味着CPU延緩了對指令的執行,或者更明確地說,在CPU執行訪內指令的過程當中插入DMA請求,挪用了一二個內存週期。 與中止CPU訪內的DMA方法比較,週期挪用的方法既實現了I/O傳送,又較好地發揮了內存和CPU的效率,是一種普遍採用的方法。可是I/O設備每一次週期挪用都有申請總線控制權、創建線控制權和歸還總線控制權的過程,因此傳送一個字對內存來講要佔用一個週期,但對DMA控制器來講通常要2—5個內存週期(視邏輯線路的延遲而定)。所以,週期挪用的方法適用於I/O設備讀寫週期大於內存存儲週期的狀況。 3.DMA與CPU交替訪內 若是CPU的工做週期比內存存取週期長不少,此時採用交替訪內的方法可使DMA傳送和CPU同時發揮最高的效率。 這種傳送方式的時間圖以下: 此圖是DMA與CPU交替訪內的詳細時間圖.假設CPU工做週期爲1.2us,內存存取週期小於0.6us,那麼一個CPU週期可分爲C1和C2兩個分週期,其中C1專供DMA控制器訪內,C2專供CPU訪。 這種方式不須要總線使用權的申請、創建和歸還過程,總線使用權是經過C1和C2分時制的。CPU和DMA控制器各自有本身的訪內地址寄存器、數據寄存器和讀/寫信號等控制寄存器。在C1週期中,若是DMA控制器有訪內請求,可將地址、數據等信號送到總線上。在C2週期中,如CPU有訪內請求,一樣傳送地址、數據等信號。事實上,對於總線,這是用C1,C2控制的一個多路轉換器,這種總線控制權的轉移幾乎不須要什麼時間,因此對DMA傳送來說效率是很高的。 這種傳送方式又稱爲「透明的DMA」方式,其來由是這種DMA傳送對CPU來講,如同透明的玻璃通常,沒有任何感受或影響。在透明的DMA方式下工做,CPU既不中止主程序的運行,也不進入等待狀態,是一種高效率的工做方式。固然,相應的硬件邏輯也就更加複雜。 |