维基百科上有一篇关于 DMA 的文章说,由于外设和 CPU 共享内存总线,因此必须将 CPU 置于保持状态以防止总线争用,但如果 DMA 机制提高性能的主要方式是让 CPU 可以自由地执行其他任务,那么如果它无法访问 RAM,它又如何执行其他任务呢?这篇维基百科文章总线控制说必须有总线仲裁,其他设备也不能同时访问内存,而另一个设备正在访问它。
那么 DMA 是如何提高性能的呢?
答案1
尝试回答:
根据非常古老的信息、记忆和参考文章的 TLDR,所以请耐心阅读
DMA 的主要思想是使用...进行数据传输。
IO 电路 -> CPU/软件 -> 目的地
被替换为
输入输出电路 -> 目的地
... 这里显示为“输入”,但大多数情况下也可能显示为“输出”。
在 CPU 上运行的软件比“直接内存访问”慢得多 - 这是因为 CPU 必须做两件事;通常对每个字节/字/长度进行获取和存储 - 因此需要至少两次访问数据总线。
相比之下,DMA 通常涉及设置一次传输的模式,以便一次性传输大量数据,“无需干预”。CPU 可能需要等待,因此会有轻微的延迟;取决于“模式”(请参阅下面的参考文章)。
当有多个设备能够使用 DMA 时,仲裁就成为必需。