DMA和内存映射IO有什么区别?

时间:2010-10-03 21:30:30

标签: linux operating-system linux-kernel

DMA和内存映射IO有什么区别?他们看起来都和我差不多。

4 个答案:

答案 0 :(得分:38)

内存映射I / O允许CPU通过读写特定内存地址来控制硬件。通常这将用于低带宽操作,例如更改控制位。

DMA允许硬件直接读写内存,而不涉及CPU的。通常这将用于高带宽操作,如磁盘I / O或摄像机视频输入。

答案 1 :(得分:21)

由于其他人已经回答了这个问题,我只想补充一点历史。

过去,在x86(PC)硬件上,只有I / O空间和内存空间。这是两个不同的地址空间,使用不同的总线协议和不同的CPU指令访问,但能够通过相同的插件卡插槽进行通信。

大多数设备使用I / O空间来控制接口和批量数据传输接口。访问数据的简单方法是执行大量CPU指令,一次一个字地从I / O地址传输数据到存储器地址(有时称为“bit-banging”。)

为了自动地将数据从设备移动到主机存储器,ISA总线协议中不支持设备启动传输。发明了折衷解决方案:DMA控制器。这是一块由CPU占用的硬件并启动传输以将数据从设备的I / O地址移动到内存,反之亦然。因为I / O地址是相同的,所以DMA控制器正在执行与CPU相同的操作,但更高效一点,并允许一些自由在后台运行(尽管可能不会很长时间,因为它不能与记忆交谈。)

快速进入PCI时代,总线协议变得更加智能:任何设备都可以启动传输。因此,例如,RAID控制器卡可以随时移动它喜欢的任何数据或从主机移动任何数据。这被称为“总线主控”模式,但是没有特别的原因,即使旧的DMA控制器早已消失,人们仍继续将此模式称为“DMA”。与旧的DMA传输不同,通常根本没有相应的I / O地址,总线主模式通常是设备上唯一存在的接口,完全没有CPU“bit-banging”模式。

答案 2 :(得分:13)

内存映射IO意味着设备寄存器映射到机器的内存空间 - 当CPU读取或写入这些内存区域时,它正在读取或写入设备,而不是实际内存。要将数据从器件传输到实际的存储器缓冲区,CPU必须从存储器映射的器件寄存器中读取数据并将其写入缓冲区(反之,将数据传输到器件)。

通过DMA传输,设备可以直接向实际内存缓冲区本身传输数据。 CPU告诉设备缓冲区的位置,然后在设备直接访问内存时执行其他工作。

答案 3 :(得分:0)

直接内存访问(DMA)是一种在没有CPU干预的情况下将数据从I / O传输到内存,从内存传输到I / O的技术。为此,使用名为DMA控制器的特殊芯片来控制所有活动和数据同步。因此,与其他数据传输技术相比,DMA速度更快。

另一方面,虚拟内存充当主内存和辅助内存之间的缓存。数据从辅助存储器(硬盘)预先提取到主存储器中,以便在需要时数据已在主存储器中可用。它允许我们在系统上运行更多的应用程序,而不是我们有足够的物理内存来支持。