DMA (wiki)

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

DMA

 

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

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


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

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


Principle

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


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


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


  • 0
    点赞
  • 1
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值