DMA(Direct Memory Access,直接內(nèi)存存取)

在實現(xiàn)DMA傳輸時,是由DMA控制器直接掌管總線,因此,存在著一個總線控制權(quán)轉(zhuǎn)移問題。即DMA傳輸前,CPU要把總線控制權(quán)交給DMA控制器,而在結(jié)束DMA傳輸后,DMA控制器應(yīng)立即把總線控制權(quán)再交回給CPU。一個完整的DMA傳輸過程必須經(jīng)過下面的4個步驟:
1,DMA請求
2,DMA響應(yīng)
3,DMA傳輸
4,DMA結(jié)束
DMA與cpu 使用內(nèi)存的三種方式:
1.停止CPU訪問內(nèi)存
2.周期挪用
3.DMA與CPU交替訪內(nèi)
設(shè)備控制器不能通過 DMA 直接存儲到用戶空間,但通過利用上面提到的第一
項,則可以達(dá)到相同效果。把內(nèi)核空間地址與用戶空間的虛擬地址映射到同一個物理地址,這樣,
DMA 硬件(只能訪問物理內(nèi)存地址)就可以填充對內(nèi)核與用戶空間進程同時可見的緩沖區(qū)(見圖)

這樣真是太好了,省去了內(nèi)核與用戶空間的往來拷貝,但前提條件是,內(nèi)核與用戶緩沖區(qū)必須
使用相同的頁對齊,緩沖區(qū)的大小還必須是磁盤控制器塊大小(通常為 512 字節(jié)磁盤扇區(qū))的倍
數(shù)。操作系統(tǒng)把內(nèi)存地址空間劃分為頁,即固定大小的字節(jié)組。內(nèi)存頁的大小總是磁盤塊大小的倍
數(shù),通常為 2 次冪(這樣可簡化尋址操作)。典型的內(nèi)存頁為 1,024、2,048 和 4,096 字節(jié)。虛擬和
物理內(nèi)存頁的大小總是相同的。