跳轉到內容

x86 彙編/直接記憶體訪問

來自華夏公益教科書,開放的書籍,開放的世界

直接記憶體訪問

[編輯 | 編輯原始碼]

直接記憶體訪問晶片 (DMA) 是原始 IBM PC 的重要組成部分,並且已成為現代計算機系統不可或缺的元件。 DMA 允許其他計算機元件直接訪問主記憶體,而無需處理器管理資料流。 這一點很重要,因為在許多系統中,處理器是資料流瓶頸,如果讓 MPU 處理每次記憶體事務,將會大大降低系統速度。

原始 DMA 晶片被稱為 8237-A 晶片,儘管現代變體可能是許多不同型號中的一種。

DMA 操作

[編輯 | 編輯原始碼]

DMA 晶片可用於在兩個記憶體位置之間移動大型資料塊,或用於將資料塊從外設移動到記憶體。 例如,DMA 通常用於在 PCI 匯流排和擴充套件卡之間移動資料,它還用於管理主記憶體 (RAM) 和輔助記憶體 (HDD) 之間的資料傳輸。 當 DMA 執行時,它控制著記憶體匯流排,MPU 無論出於何種原因都無法訪問匯流排。 MPU 可以繼續處理儲存在其快取中的指令,但一旦快取為空,或者遇到記憶體訪問指令,MPU 必須等待 DMA 操作完成。 DMA 可以比 MPU 更快地管理記憶體操作,因此等待時間通常不是速度問題。

DMA 通道

[編輯 | 編輯原始碼]

DMA 晶片最多有 8 個 DMA 通道,其中一個通道可用於級聯第二個 DMA 晶片,總共提供 14 個可用通道。 每個通道都可以被程式設計為從特定源讀取,寫入特定源等。 因此,DMA 有許多專用的 I/O 地址可用,用於寫入必要的控制暫存器。 DMA 使用地址 0x0000-0x000F 用於標準控制暫存器,以及 0x0080-0x0083 用於頁暫存器。

華夏公益教科書