DMA-Direct Memory Access

什么是DMA

DMA 首先它是一种数据的传输方式;其次传输包括从设备到内存、内存到存储、内存到内存等;最后,它是在不经过cpu的情况下实现数据传输。

DAM主要有共享缓存DMA,Scatter/Gather DMA,前者使用主内存的一块共享内存区域,后者则是用多个不同地址的内存块实现。

DMA 控制器,一种特殊的硬件,负责执行DMA操作,包括数据传输及裁决访问系统总线。DMA控制器连接着数据传输的两端,负责监控,跟踪传输的字节数,传输设置(I/O类型、内存类型、CPU执行状态和中断)

外部设备的数据传输触发DMA总线数据传输。例如键盘和鼠标输入。DMA控制器向cpu发送一个要求使用系统总线的DMA的请求信号,CPU在完成当前操作之后通过DMA确认信号让渡总线的控制权。如此,DMA控制器就可以像cpu(此时闲置)一样读写数据和控制信号。当数据传输完成,DMA控制器发送取消DMA传输的信号,cpu移除DMA确认信号并重新获取总线的控制权。

DMA集成在计算机总线架构上,用于加速计算机操作及支持多任务环境。通常来说,CPU会被读写操作完全占据,DMA使得读写数据只发生在内置存储,外部存储及外围设备不需要cpu参与,释放了cpu能力。DMA使得计算机内部操作流化,因为数据的内存读写计算机内部最常见的操作,因此释放与此相关的CPU处理,能够在很大程度上提升计算机的性能。

DMA主要应用在对实时操作完成要求比较高的实时计算任务应用上。流式处理是DM的另一重要应用,即数据的传输和处理同时进行。应用DMA的硬件主要包括:软盘,磁盘驱动控制器,显卡,网卡,声卡和GPU。

DMA实现?

Synchronous DMA:一次在系统内存和外部设备之间传输一个字节或者一个单词。每次传输完成,DMA要求IO端口在准备好下一次事务的时候进行通知,在这种设定下,这DMA和cpu共享总线时钟,DMA在任何情况下都能获取系统总线的控制权。

Burst Mode DMA:假定传输的两端都能够即时的收发数据。cpu设置控制器,当I/O信号触发,全部的数据就会被拷贝到目的地。DMA在数据传输时对系统总线具有唯一的控制权。Burst Mode 模式下DMA数据传输相对于同步DMA要快很多。

Flyby DMA(不是所有的controller都支持): 使用源和目的地地址,构造一个同时读写的环。因为读环和写环被压缩到了同一个环,所以数据传输非常快。Flyby DMA也支持burst和同步类型的事务。

原文地址:https://www.cnblogs.com/niejunlei/p/10118652.html