DMA (wiki)

来源:互联网 发布:哈尔滨软件开发公司 编辑:程序博客网 时间:2024/06/06 01:48

<!--@page { margin: 0.79in }P { margin-bottom: 0.08in }-->

DMA

 

DMA是现代计算机和微处理器的一个特性,DMA允许一些计算机内的硬件系统可以不依赖与中央处理器而直接读写系统内存。比如磁盘驱动控制器,图形卡,网卡以及声卡都会使用DMA。在多处理器的SOC系统中,DMA也用于片内(intra-chip)数据传输,特别是,当处理一些包含有内存的的模块(经常称为scratchpadmemory)时,DMA用于从这些模块内的内存和主内存的数据传输。

DMA通道的计算机与没有DMA通道的计算机在设备和系统内传输数据,会有较小的cpu负荷,因为不依赖与CPU,所以数据传输不占用CPU时间,数据传输就和CPU其他的工作并发进行。


没有DMA,使用可编程的输入输入(programmedinput/output)模型来和外设设备交互,或者来加载保存多核指令,CPU通常完成会被读写操作占用,而不能去做其他工作。

使用DMACPU可以发起数据传输,在数据传输过程中可以做其他事情,然后在传输完成后,收到DMA控制器的一个中断。这在实时系统中很有效。此外在流处理中也很有效,因为流处理一般要数据和控制并发,采用DMA就可以达到很高的吞吐率。


Principle

DMA是现代计算机的一个本质特性,允许数据不依赖与CPU而进行传输。如果没有DMA,那么CPU就需要亲自来拷贝数据,而不能同时进行其他工作。这种情况很糟糕,因为通过一个外围总线访问I/O设备比普通的的系统RAM要慢很多。


DMA从一个设备拷贝到另一个设备。当DMA命令让CPU发起一个DMA传输,CPU不会花功夫执行,DMA会处理数据传输。对于称为第三方的DMA,比如使用ISAbus的,DMA控制器通常是主板的一个芯片。更现代的一些总线设计,比如PCI,通常是总线驱动DMA,这时候是设备取得bus的控制,然后实施DMA。在嵌入式处理器或者多核的SOC中,片上总线会链接有一个DMAengine,这个DMAengine会管理DMA数据传输。


DMA的典型应用是系统RAM和设备之间的数据传输。在多核的嵌入式系统中,通常有一个或者多个DMAengine