[討論] 關於DMA(直接記憶體存取)的操作
最近接觸到要從I/O裝置以DMA傳輸資料到PC端的記憶體。
看了一些DMA的介紹後,對於記憶體的配置有一些概念仍不清楚,想提出來
請教大家。書上寫DMA的步驟基本如下:以寫入記憶體為例
1. 處理器準備好記憶體位置,並提供DMA 控制器記憶體位址、資料大小
2. DMA控制器執行操作
3. 一旦DMA 操作結束,再以中斷告知處理器
關於第二點,我不明白的是當我們今天要傳的資料大小是數千bytes時,
操作的流程是如何?
計算機組織的書上寫到
"If the request requires more than one transfer, the DMA unit generates the
next memory address and initiates the next transfer. Using this mechanism,
a DMA unit can complete an entire transfer, which may be thousands of bytes
in length."
看起來,當要傳的資料大小大於一次傳的量(buffer大小?)時,
DMA controller會自動將資料加在前項資料後面,不知這樣解讀是否正確?
另外,網路上看到的一些文章說DMA操作要跟作業系統要到一連續"實體"記憶體空間,
且大小不能超過一個page的大小,這應該是指buffer的大小吧?當傳輸的資料大於
buffer大小時,會如何操作呢?
而最終這筆很大的資料放置的位置是在連續的實體記憶體空間中嗎?
此外,這也會牽涉到作業系統分配記憶體的方式,當開機一段時間執行一些程式後,
很難跟作業系統要求到連續實體記憶體空間,故要重新開機後才能要到。
自行閱讀資料仍有許多地方想不通,還請大家指教:D
--
※ 發信站: 批踢踢實業坊(ptt.cc)
◆ From: 59.105.211.102
→
08/06 06:57, , 1F
08/06 06:57, 1F
討論串 (同標題文章)
完整討論串 (本文為第 1 之 2 篇):