微信公众号搜"智元新知"关注
微信扫一扫可直接关注哦!

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

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

Win32_Thread ThreadWaitReason值的说明

Linux内核书3.x

你如何确定你正在运行最新的可执行文件

光秃秃的骨头OS内核编程

文件对象是每个进程或系统范围的本地文件吗?

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

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

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

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

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

为了将数据从设备自主地移动到主机内存,ISA总线协议中不支持设备发起传输。 发明了一种折中解决方案:DMA控制器。 这是一个硬件,由cpu坐起来,并开始传输数据从设备的I / O地址到内存,反之亦然。 由于I / O地址是相同的,所以DMA控制器的操作与cpu完全相同,但效率更高一些,并允许在后台运行的自由度(尽管可能不会长时间与记忆交谈)。

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

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

通过DMA传输,器件能够直接将数据传输到真实存储器本身或从真实存储器本身传输数据。 cpu告诉设备缓冲区的位置,然后可以在设备直接访问内存时执行其他工作。

直接内存访问(Direct Memory Access,DMA)是一种将数据从I / O传输到内存和从内存传输到I / O的技术,无需cpu的干预。 为此,使用名为DMA控制器的特殊芯片来控制数据的所有活动和同步。 因此,与其他数据传输技术相比,DMA要快得多。

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

版权声明:本文内容由互联网用户自发贡献,该文观点与技术仅代表作者本人。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如发现本站有涉嫌侵权/违法违规的内容, 请发送邮件至 [email protected] 举报,一经查实,本站将立刻删除。

相关推荐