std*_*out 3 hardware cpu concurrency dma
我想知道当设备的 DMA 控制器正在进行内存操作时,CPU 可以处理/执行什么类型的操作,以提高并发级别?如果 CPU 缓存/寄存器为空,如何在不交错 DMA 的情况下获取另一条指令
谢谢
一般来说,在大型硬件上,当 DMA 正在进行时,CPU 或多或少可以做任何事情。一般来说,它只是在操作系统的控制下继续正常执行正在运行的进程或内核任务。
关于你的问题:
...如果 CPU 缓存/寄存器为空,如何在不交错 DMA 的情况下获取另一条指令[?]
据我了解,您是在问如果CPU需要访问内存会发生什么。一般来说,CPU通常会频繁地访问内存,而不仅仅是在“寄存器或缓存为空”时。当 DMA 正在进行时,此活动或多或少可以正常进行2 。内存总线通常已被多个设备共享,包括多个支持 DMA 的设备、PCI 卡、多个内核或多个 CPU。内存控制器负责接受和满足所有这些请求,其中包括在请求之间进行仲裁。
因此,当 DMA 和 CPU 访问内存时,可能会出现某种类型的“交错”,就像两个核心(甚至在同一核心上运行的两个逻辑线程)访问内存时可能会发生这种情况一样,您是正确的。它在实践中的工作原理取决于 DRAM 的组织方式、内存控制器的工作方式(以及存在的数量)以及许多其他细节,但一般来说,您期望现代内存系统是高度并行的 - 能够维持多个数据流访问并经常接近 RAM 施加的带宽限制。
1如今,这几乎意味着任何比嵌入式微控制器更大的东西。例如,即使是移动 CPU 也符合资格。
2通常我的意思是使用正常的机制,并且您可以期望内存访问正常工作,但并不是说性能不会受到影响。CPU 的内存访问将与 DMA 访问(可能还有其他 CPU、PCI 设备(例如显卡等)的其他访问)竞争,并且可能会变慢 - 但在合理的硬件上,它肯定不必等到DMA 结束!