标题: dma与cpu的关系 [打印本页]

作者: 主旧    时间: 2023-11-15 17:16
标题: dma与cpu的关系
通常情况下,DMA的使用不会占据CPU的资源,但是有没有DMA与CPU竞争总线的情况?

作者: Hephaestus    时间: 2023-11-15 20:53
当然不占用CPU的时间,竞争了还叫什么DMA啊?
作者: Y_G_G    时间: 2023-11-15 22:55
DMA本身就是绕过CPU去干活的,目的就是不要跟CPU抢总线的
你只要不处理DMA中断,基本上就是你干你的活,我干我的活,井水不犯河水
作者: Highnose    时间: 2023-11-15 23:29
抢总线的, 但有优先级
作者: rayin    时间: 2023-11-16 07:30
DMA优势是处理大量且有规律的数据, 过程不需要CPU干预,使用前设置好从哪里往哪里送多宽的数据, 送多少个数据, 送完之后告诉CPU已经处理完毕。 就是CPU的助手,DMA传输期间把CPU解放出来,可以干别的活, 比喻处理检测IO高低电平, 中断啥的。
作者: 大漠落日    时间: 2023-11-16 08:51
只在开始初始化和结束时,用一下CPU,其他时间是独立干活的。自觉型。
作者: LZ123..    时间: 2023-11-16 08:56
一己之见:DMA只会告诉CPU一声,给我单独开个总线通道
作者: 841327278    时间: 2023-11-16 10:38
dma会自己干活,干完告诉cpu
作者: yzwzfyz    时间: 2023-11-16 11:12
当两者需要通过【同一条】总线【同时】传输数据时,会有“竞争”,DAM管理器会调控两者分时享用,使两者在大部分时间里不会"抢"总线。
作者: esfcswv    时间: 2023-11-16 12:51
DMA(Direct Memory Access,直接存储器访问)是一种数据交换模式,它允许外设直接与内存进行数据传输,而无需通过CPU的介入。DMA可以提高数据传输的效率,减轻CPU的负担,使CPU能够更专注于其他任务。

DMA和CPU之间的关系是竞争对手的关系在DMA传输数据时,DMA控制器直接掌握总线的控制权,而CPU则被暂时剥夺了对总线的访问权限。因此,在DMA传输期间,CPU无法直接访问内存或外设,需要等待DMA传输完成后才能恢复对总线的控制权。

然而,DMA和CPU之间并非完全独立。DMA传输完成后,DMA控制器会立即将总线控制权交还给CPU,以便CPU能够继续执行其任务。此外,CPU仍然需要与DMA控制器进行通信,以设置DMA传输的参数和监控传输的状态。

总之,DMA和CPU之间是一种竞争关系,但也存在合作和协调的机制,以确保数据传输的顺利进行

希望以上回答对你有所帮助。如果还有其他问题,请随时提问。
作者: sinside    时间: 2023-11-17 09:38
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可以融洽的共享总线.







欢迎光临 (http://www.51hei.com/bbs/) Powered by Discuz! X3.1