关于DMA和CPU并发

时间:2017-01-28 19:21:26

标签: concurrency cpu hardware dma

我想知道在设备的DMA控制器进行内存操作时CPU可以处理/执行什么类型的操作,以提高并发性?如果CPU高速缓存/寄存器为空,如何在不交错进行DMA的情况下获取另一条指令

THX

1 个答案:

答案 0 :(得分:1)

总的来说,在大型 1 硬件上,当DMA正在进行时,CPU可以做更多或更少的事情。通常,它只是继续在OS的控制下正常执行正在运行的进程或内核任务。

关于:

  

... [a]如果CPU缓存/寄存器为空,则另一条指令如何   在没有交错DMA的情况下获取[?]

据我所知,您在询问如果CPU需要访问内存会发生什么。通常,CPU通常经常访问内存,不仅在“寄存器或高速缓存为空”时,当DMA正在进行时,此活动可以或多或少地正常进行 2 。内存总线通常已由多个设备共享,包括多个支持DMA的设备,PCI卡,多个内核或多个CPU。 memory controller负责接受并履行所有这些问题,包括在当时之间进行仲裁。

因此,当DMA和CPU访问内存时,可能存在某种类型的“交错”,正如在两个内核(甚至是在同一内核上运行的两个逻辑线程)访问内存时可能发生这种情况一样。它在实践中如何运作取决于DRAM的组织方式,内存控制器的工作方式(以及存在的数量)以及许多其他细节,但一般来说,您希望现代内存系统高度并行 - 能够维持多个流的访问并经常接近RAM强加的带宽限制。

1 现在,这几乎意味着比嵌入式微控制器更大的东西。例如,甚至移动CPU也符合条件。

2 通常我的意思是使用了正常的机制,你可以期待对工作的内存访问,但不是性能不会被影响。 CPU的内存访问将与DMA访问(以及其他CPU,PCI设备,如视频卡等)的其他访问竞争,并且可能会更慢 - 但在合理的硬件上它肯定不会等到DMA结束了!