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可以融洽的共享总线.
|