对于大多数知道DMA和缓存的人来说可能是一个愚蠢的问题......我只知道缓存会将内存存储到离您可以访问的位置更近的位置,这样您就不必花费太多时间来处理I / O.
但DMA怎么样?它允许您以较少的延迟访问主存储器?
有人可以解释这些差异,或者为什么我只是困惑?
答案 0 :(得分:3)
DMA是一种硬件设备,可以在不使用CPU指令的情况下移入/移出内存。
例如,硬件设备(比如说,您的PCI声音设备)需要播放音频。你可以:
mov
指令一次写一个字。DMA可能非常复杂(分散聚集等),并且因总线类型和系统而异。
答案 1 :(得分:1)
我知道它有点晚了但回答这个问题会帮助像我这样的人,我想,同意上述答案,我认为问题与缓存有关。
所以是缓存将信息存储在靠近内存的地方,这可能是早期计算的结果。每当在高速缓存中找到数据时,其被称为高速缓存命中,并且无论何时未找到(高速缓存未命中),处理器继续计算所需的值。设备也可以访问此数据,这就是为什么在启动时我们通常会使缓存数据无效,以便缓存线干净。我们还在启动时刷新缓存数据,以便将所有缓存数据写回主内存以供cpu使用,之后我们处理以重置或初始化缓存。
DMA(直接内存访问),是的,它允许您访问主内存。但我认为更好的定义是,它允许您访问系统寄存器,只能由处理器访问。 @Ronnie和@Yann Ramin都是正确的,因为DMA可以是设备硬件,因此它可以被串行外设用于访问系统寄存器,但它也可以用于两个内核之间的内存到内存传输。
您可以从维基百科上阅读有关DMA可以访问系统内存的模式的更多信息。我将简单解释一下
突发模式:DMA完全控制总线,CPU在此期间处于空闲状态。数据以突发(整体)传输而不会中断。
循环窃取模式:此数据一次传输一个字节,传输速度慢,但CPU不空闲。
答案 2 :(得分:0)
我完全同意第一个答案,并且有一些常见的补充......
在大多数DMA硬件上,您还可以将其设置为执行内存到内存传输 - 并不总是涉及外部设备。此外,根据系统的不同,您可能需要或不需要在传输之前(或之后)在软件中同步CPU缓存,因为DMA传输到内存或从内存传输的数据可能在不知道CPU缓存的情况下完成。 / p>
执行任何DMA的好处是CPU可以同时执行其他操作。 当然,当CPU也需要访问内存时,只有一个可以访问,另一个必须等待。
Mem to mem DMA通常用于嵌入式系统以提高性能,或者对于能够访问内存的某些部分至关重要。
要回答这个问题,DMA和CPU缓存是完全不同的东西,无法比较。