直接内存访问

编辑
本词条由“匿名用户” 建档。
直接内存访问(DMA)是计算机系统的一项功能,它允许某些硬件子系统独立于中央处理单元(CPU)访问主系统内存(随机存取内存)。 如果没有直接内存访问,当CPU使用编程的输入/输出时,它通常在读或写操作的整个持续时间内都被完全占用,因此无法执行其他工作。对于DMA,CPU首先启动传输,然后在传输过程中执行其他操作,最后在操作完成时收到来自DMA控制器(DMAC)的中断。在CPU无法跟上数据...

直接内存访问

编辑

直接内存访问(DMA)是计算机系统的一项功能,它允许某些硬件子系统独立于中央处理单元(CPU)访问主系统内存(随机存取内存)。

如果没有直接内存访问,当CPU使用编程的输入/输出时,它通常在读或写操作的整个持续时间内都被完全占用,因此无法执行其他工作。对于DMA,CPU首先启动传输,然后在传输过程中执行其他操作,最后在操作完成时收到来自DMA控制器(DMAC)的中断。在CPU无法跟上数据传输速率的任何时候,或者当CPU需要在等待相对较慢的I/O数据传输时执行工作时,此功能非常有用。许多硬件系统使用直接内存访问,包括磁盘驱动器控制器、图形卡、网卡声卡。.DMA还用于多核处理器中的片内数据传输。与没有DMA通道的计算机相比,具有DMA通道的计算机可以以更少的CPU开销在设备之间传输数据。类似地,多核处理器内的处理元件可以在不占用其处理器时间的情况下将数据传入和传出其本地存储器,从而允许计算和数据传输并行进行。

直接内存访问还可用于“内存到内存”复制或移动内存中的数据。DMA可以将昂贵的内存操作(例如大副本或分散收集操作)从CPU卸载到专用DMA引擎。一个实现示例是I/O加速技术。DMA对片上网络和内存计算架构很感兴趣。

直接内存访问原则

编辑

第三方

标准直接内存访问,也称为第三方DMA,使用DMA控制器。DMA控制器可以生成内存地址并启动内存读取或写入周期。它包含几个可由CPU写入和读取的硬件寄存器。这些包括存储器地址寄存器、字节计数寄存器和一个或多个控制寄存器。根据DMA控制器提供的功能,这些控制寄存器可能指定源、目标、传输方向(从I/O设备读取或写入I/O设备)、传输单位,和/或一次突发传输的字节数。

为了执行输入、输出或内存到内存操作,主机处理器使用要传输的字数和要使用的内存地址的计数来初始化直接内存访问控制器。然后CPU命令xxx设备启动数据传输。DMA控制器然后向系统存储器提供地址和读/写控制线。每次准备好在xxx设备和存储器之间传输一个字节的数据时,直接内存访问控制器都会递增其内部地址寄存器,直到传输完整的数据块。

总线控制

在总线主控系统(也称为xxx方DMA系统)中,CPU和外设都可以被授予对内存总线的控制权。当一个外设可以成为总线主控时,它可以直接写入系统内存而不需要CPU的参与,根据需要提供内存地址和控制信号。必须采取一些措施将处理器置于保持状态,以免发生总线争用。

操作模式

编辑

突发模式

在突发模式下,整个数据块以一个连续的序列传输。一旦DMA控制器被CPU授予访问系统总线的权限,它会在将系统总线的控制权释放回CPU之前传输数据块中的所有数据字节,但会使CPU在相对较长的时间内处于非活动状态。该模式也称为“块传输模式”。

循环窃取模式

的周期挪用模式是在其中CPU不应是所需的突发传输模式的时间长度禁用系统中使用。在周期窃取模式下,直接内存访问控制器以与突发模式相同的方式获得对系统总线的访问,使用BR(总线请求)和BG(总线授权)信号,这是控制CPU和直接内存访问控制器之间接口的两个信号。然而,在周期窃取模式下,在传输一个单位(例如字节)的数据后,系统总线的控制权通过BG被取消断言给CPU。然后通过BR再次连续请求,每个请求传输一个单位(例如字节)的数据,直到传输了整个数据块。通过不断地获得和释放系统总线的控制权,DMA控制器实质上交错了指令和数据传输。CPU处理一条指令,然后直接内存访问控制器传输一个数据值,依此类推。数据传输速度不快,但CPU不会像突发模式下那样闲置。循环窃取模式对于实时监控数据的控制器很有用。

透明模式

透明模式传输一个数据块需要最多的时间,但它也是整体系性能最有效的模式。在透明模式下,DMA控制器仅在CPU执行不使用系统总线的操作时传输数据。透明模式的主要优点是CPU永远不会停止执行它的程序并且直接内存访问传输在时间上是免费的,而缺点是硬件需要确定CPU何时不使用系统总线,这可能很复杂.这也称为“隐藏DMA数据传输模式”。

直接内存访问

缓存一致性

编辑

直接内存访问会导致缓存一致性问题。想象一下配备缓存和外部存储器的CPU,这些存储器可以由使用DMA的设备直接访问。当CPU访问内存中的位置X时,当前值将存储在缓存中。X上的后续操作将更新X的缓存副本,但不会更新X的外部存储器版本,假设是回写缓存。如果在下一次设备尝试访问X之前没有将缓存刷新到内存中,则该设备将收到一个陈旧的X值。

类似地,如果在设备向内存写入新值时X的缓存副本没有失效,则CPU将对X的陈旧值进行操作。

这个问题可以通过系统设计中的两种方式之一解决:缓存一致性系统在硬件中实现一种称为总线监听的方法,其中外部写入被发送到缓存控制器,然后缓存控制器为DMA写入或缓存刷新执行缓存失效DMA读取。非相干系统将这一点留给软件,其中操作系统必须确保在开始传出DMA传输之前刷新缓存行,并在访问受传入DMA传输影响的内存范围之前使缓存行无效。操作系统必须确保在此期间任何正在运行的线程都不会访问内存范围。后一种方法为DMA操作引入了一些开销,因为大多数硬件需要一个循环来单独使每个缓存行无效。

内容由匿名用户提供,本内容不代表vibaike.com立场,内容投诉举报请联系vibaike.com客服。如若转载,请注明出处:https://vibaike.com/130761/

(1)
词条目录
  1. 直接内存访问
  2. 直接内存访问原则
  3. 第三方
  4. 总线控制
  5. 操作模式
  6. 突发模式
  7. 循环窃取模式
  8. 透明模式
  9. 缓存一致性

轻触这里

关闭目录

目录