DMA接口協(xié)議筆記
在沒有DMA機制的情況下,一I/O設備通過軟件方式向CPU發(fā)起中斷。
在DMA方式下,在內存和DMA接口之間有一條物理通路。這樣主存和設備交換數(shù)據(jù)時,不需要通過CPU,也不需要CPU暫停現(xiàn)行程序為設備服務,省去了保護現(xiàn)場和恢復現(xiàn)場,因此工作速度比程序中斷方式的工作速度高。
但是可能出現(xiàn)高速I/O設備和CPU爭用主存的情況。DMA的訪問優(yōu)先級較高,出現(xiàn)同時訪問時,CPU必須將總線(地址線、數(shù)據(jù)線)控制權交由DMA接口使用。
通常DMA和主存交換數(shù)據(jù)時采用如下三種方式:
1.?????? 停止CPU訪問主存;
2.?????? 周期挪用;
3.?????? DMA與CPU交替訪問。
DMA接口的功能
1.?????? 向CPU申請DMA傳送。
2.?????? 在CPU允許DMA工作時,處理總線控制權的轉交,避免因進入DMA工作而影響CPU正常活動或引起總線競爭。
3.?????? 在DMA期間管理系統(tǒng)總線,控制數(shù)據(jù)傳送。
4.?????? 確定數(shù)據(jù)傳送的起始地址和數(shù)據(jù)長度,修正數(shù)據(jù)傳送過程中的數(shù)據(jù)地址和數(shù)據(jù)長度。
5.?????? 在數(shù)據(jù)塊傳送結束時,給出DMA操作完成的信號。

DMA接口的組成如上圖所示。
解釋名詞:
AR: Address Register,主存地址寄存器。
WC: Word Counter,字計數(shù)器。
BR: Buffer Register,數(shù)據(jù)緩沖寄存器。
DAR: Device Address Register,設備地址寄存器。
這里描述DMA的工作過程。DMA工作過程包括三個階段:預處理、數(shù)據(jù)傳送和后處理。
預處理
首先是預處理。
在DMA接口開始工作之前,CPU必須給它預置一些信息:
給DMA控制邏輯指明數(shù)據(jù)傳送方向是輸入還是輸出。
向DMA設備地址寄存器送入設備號,并啟動設備。
向DMA主存地址寄存器送入交換數(shù)據(jù)的主存起始地址。
對字計數(shù)器賦予交換數(shù)據(jù)的個數(shù)。
上述的預處理工作由CPU執(zhí)行幾條輸入輸出指令完成,即程序的初始化階段,這些工作完成后,CPU繼續(xù)執(zhí)行原來的程序。DMA傳送過程如下圖所示:

數(shù)據(jù)傳送
對于數(shù)據(jù)傳送過程,以下分別介紹對于DMA接口的輸入操作以及主存從DMA接口輸出數(shù)據(jù)到I/O設備的過程。
DMA方式是以數(shù)據(jù)塊為單位傳送的。數(shù)據(jù)傳送的示意圖如下:

DMA接口數(shù)據(jù)傳送的工作過程如下。?
(一)數(shù)據(jù)從I/O設備輸入到DMA接口
1.?????? 當設備準備好一個字時,發(fā)出選通信號,將該字讀到DMA的數(shù)據(jù)緩沖寄存器中,表示數(shù)據(jù)緩沖寄存器“滿”(如果I/O設備是面向字符的,則一次讀入一個字節(jié),組裝成一個字)。
2.?????? 與此同時,設備向DMA接口發(fā)請求(DREQ)。
3.?????? DMA接口向CPU申請總線控制權 (HRQ)。
4.?????? CPU發(fā)回HLDA信號,表示允許將總線控制權交給DMA接口。
5.?????? 將DMA主存地址寄存器中的主存地址送地址總線,并命令存儲器寫。
6.?????? 通知設備已被授予一個DMA周期(DACK),并為下一個字做準備。
7.?????? 將DMA數(shù)據(jù)緩沖寄存器的內容送數(shù)據(jù)總線。
8.?????? 主存將數(shù)據(jù)總線上的信息寫至地址總線指定的存儲單元中。
9.?????? 修改主存地址和字計數(shù)值。
10.?? 判斷數(shù)據(jù)塊是否傳送結束,若未結束,則繼續(xù)傳送;若已結束,(字計數(shù)器溢出),則向CPU申請程序中斷,標志數(shù)據(jù)塊傳送結束。
(二)數(shù)據(jù)從DMA接口輸出到I/O設備
1.?????? 當DMA數(shù)據(jù)緩沖寄存器已將輸出數(shù)據(jù)送至I/O設備后,表示數(shù)據(jù)緩沖寄存器已“空”。(或者說,在新一輪的傳送開始前,先清空數(shù)據(jù)緩沖寄存器)
2.?????? 設備向DMA接口發(fā)請求(DREQ)。
3.?????? DMA接口向CPU申請總線控制權(HRQ)。
4.?????? CPU發(fā)回HLDA信號,表示允許將總線控制權交給DMA接口使用。
5.?????? 將DMA主存地址寄存器中的主存地址送地址總線,并命令存儲器讀。
6.?????? 通知設備已被授予一個DMA周期(DACK),并為交換下一個字做準備。
7.?????? 主存將相應地址單元的內容通過數(shù)據(jù)總線讀入到DMA的數(shù)據(jù)緩沖寄存器中。
8.?????? 將DMA數(shù)據(jù)緩沖寄存器的內容送到輸出設備,若為字符設備,則需要將其拆成字符輸出。
9.?????? 修改主存地址和字計數(shù)值。
10.?? 判斷數(shù)據(jù)塊是否已傳送完畢,若未完畢,繼續(xù)傳送;若已傳送完畢,則向CPU申請程序中斷。
后處理
最后是后處理工作。
當DMA的中斷請求得到響應后,CPU停止原程序的執(zhí)行,轉去執(zhí)行中斷服務程序,做一些DMA的結束工作。
綜上,也就是說在DMA協(xié)議的工作過程中,含有中斷操作。就是在最后的后處理操作。
DMA接口有兩種主要類型。[210-212]
1.?????? 選擇性DMA接口。適用于數(shù)據(jù)傳輸率很高的設備。

2.?????? 多路型DMA接口。適用于同時為多個數(shù)據(jù)傳輸率不十分高的設備服務。

?
?