Gre*_*ill 40
内存映射I/O允许CPU通过读写特定内存地址来控制硬件.通常这将用于低带宽操作,例如改变控制位.
DMA允许硬件直接读写内存而不涉及CPU.通常,这将用于高带宽操作,例如磁盘I/O或摄像机视频输入.
Eri*_*nen 22
由于其他人已经回答了这个问题,我只想补充一点历史.
在过去,在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"模式.
caf*_*caf 14
内存映射IO意味着设备寄存器映射到机器的内存空间 - 当CPU读取或写入这些内存区域时,它正在读取或写入设备,而不是实际内存.要将数据从器件传输到实际的存储器缓冲区,CPU必须从存储器映射的器件寄存器中读取数据并将其写入缓冲区(反之,将数据传输到器件).
通过DMA传输,设备能够直接向实际内存缓冲区本身传输数据.CPU告诉设备缓冲区的位置,然后在设备直接访问内存时执行其他工作.
| 归档时间: |
|
| 查看次数: |
15921 次 |
| 最近记录: |