关于 DMA 和 CPU 并发

On DMA and CPU Concurrency

我想知道当设备的 DMA 控制器正在进行内存操作时,可以 CPU handle/perform 什么样的操作可以提高并发级别?如果 CPU cache/registers 为空,如何在不交错 DMA 的情况下获取另一条指令

感谢

一般来说,在 big1 硬件上,CPU 在 DMA 进行时或多或少可以做任何事情。通常,它只是在 OS.

的控制下继续正常执行 运行 进程或内核任务

关于您的问题:

... if the CPU cache/registers is empty, how another instruction can be fetched without interleaving DMA in progress[?]

据我了解,您问的是如果 CPU 需要访问内存会发生什么。一般来说,CPU通常是频繁访问内存,而不仅仅是"registers or caches are empty"。当 DMA 正在进行时,此 activity 或多或少可以正常进行 2。内存总线通常已被多个设备共享,包括多个 DMA-capable 设备、PCI 卡、多个内核或多个 CPU。 memory controller 负责接受和完成所有这些请求,包括在两者之间进行仲裁。

所以你是正确的,当 DMA 和 CPU 访问内存时可能存在某种类型的 "interleaving",就像当两个内核(甚至两个逻辑线程 运行在同一个核心上)访问内存。它在实践中的工作方式取决于 DRAM 的组织方式、内存控制器的工作方式(以及存在的数量)以及许多其他细节,但通常您期望现代内存系统是高度并行的——能够维持多个数据流访问并经常接近 RAM 施加的带宽限制。


1如今,这几乎意味着比嵌入式微控制器更大的东西。例如,即使是手机 CPU 也符合条件。

2By normally 我的意思是使用正常的机制,你可以期望内存访问 work,但并不是说性能不会受到影响。 CPU 的内存访问将与 DMA 访问竞争(可能还有其他 CPU 的其他访问,如视频卡等 PCI 设备)并且可能会更慢 - 但在合理的硬件上它当然不必等到 DMA 完成!