DMA 與 CPU 同時訪問總線有如下幾種方法:
1. 總線時分復用。
這種總線的訪問權被分成多個時間片,CPU 和 DMA 分別使用不同的時間片。這種方法在早期的 DMA 中很常見。當時的 CPU 沒有指令流水線,每個指令周期需要許多時鐘周期才能完成,但只有其中小部分時鐘周期訪存。這時候 DMA 可以利用 CPU 訪存的間隙時間,實現 DMA 與 CPU 并行。類似的做法也存在于比較現代的系統中,通過插入等待狀態來實現 CPU 和 DMA 交替訪問總線。
2. 矩陣總線。
矩陣總線每一個訪存設備和每一組內存設備分別占據一個端口,只要兩個訪存設備訪問的不是同一個端口就可以互不沖突。如果內存被分為多塊使用多個總線端口的話,只要 DMA 和 CPU 不同時訪問同一塊內存,兩者就可以相安無事。幾乎所有基于 ARM 的芯片都用了矩陣總線作為系統總線。
3. 指令緩存。
現在大多數的 CPU 都有緩存。此時只要 CPU 需要訪問的的指令已經存入了緩存,CPU 便不需要去系統總線取指。此時總線完全空閑,DMA 可以獨占訪問總線。
哪怕是第1種, 也有好多方式:
來源:https://www.zhihu.com/question/321877977/answer/664568452
所以, 基本上不會影響, 從宏觀的角度, 可以認為DMA與CPU可以融洽的共享總線.
|