DMA的基本概念


DMA允許外圍設備和主內存之間直接傳輸 I/O 數據, DMA 依賴於系統。每一種體系結構DMA傳輸不同,編程接口也不同。

數據傳輸可以以兩種方式觸發:一種軟件請求數據,另一種由硬件異步傳輸。

在第一種情況下,調用的步驟可以概括如下(以read為例):

(1)在進程調用 read 時,驅動程序的方法分配一個 DMA 緩沖區,隨后指示硬件傳送它的數據。進程進入睡眠。

(2)硬件將數據寫入 DMA 緩沖區並在完成時產生一個中斷。

(3)中斷處理程序獲得輸入數據,應答中斷,最后喚醒進程,該進程現在可以讀取數據了。

第二種情形是在 DMA 被異步使用時發生的。以數據采集設備為例:

(1)硬件發出中斷來通知新的數據已經到達。

(2)中斷處理程序分配一個DMA緩沖區。

(3)外圍設備將數據寫入緩沖區,然后在完成時發出另一個中斷。

(4)處理程序利用DMA分發新的數據,喚醒任何相關進程。

網卡傳輸也是如此,網卡有一個循環緩沖區(通常叫做 DMA 環形緩沖區)建立在與處理器共享的內存中。每一個輸入數據包被放置在環形緩沖區中下一個可用緩沖區,並且發出中斷。然后驅動程序將網絡數據包傳給內核的其它部分處理,並在環形緩沖區中放置一個新的 DMA 緩沖區。

驅動程序在初始化時分配DMA緩沖區,並使用它們直到停止運行。


免責聲明!

本站轉載的文章為個人學習借鑒使用,本站對版權不負任何法律責任。如果侵犯了您的隱私權益,請聯系本站郵箱yoyou2525@163.com刪除。



 
粵ICP備18138465號   © 2018-2025 CODEPRJ.COM