关于CPU与DMA的工作方式

背景

主要考虑了一下,在DMA工作的时候,CPU到底在干嘛,是否可以继续进行工作。

网上的讨论

https://bbs.csdn.net/topics/392159760?page=2

我得到的结果

DMA控制器和Cortex™-M3核心共享系统数据总线,执行直接存储器数据传输。当CPU和DMA
同时访问相同的目标(RAM或外设)时, DMA请求会暂停CPU访问系统总线达若干个周期,总线
仲裁器执行循环调度,以保证CPU至少可以得到一半的系统总线(存储器或外设)带宽。

DMA技术的出现,使得外围设备可以通过DMA控制器直接访问内存,与此同时,CPU可以继续执行程序.那么DMA控制器与CPU怎样分时使用内存呢?通常采用以下三种方法:(1)停止CPU访内存;(2)周期挪用;(3)DMA与CPU交替访问内存.

下面这个时来自于同学的做spi通讯的时候的结论
3、DMA也会影响CPU访问内存的速度(DMA与CPU分时复用数据总线),可能会影响其他功能的执行速度。因此,对传输速率要求低的场合,没有必要使用DMA。(尽管它对于多字节收发更好操作)

cpu交出总线后,会停止工作,但是我想不涉及总线的操作应该时可以进行的。

我认为这个说的就很不错
你听说过一种东西叫做多队列网卡嘛?在一般的网卡中,都有且仅有一个队列——从网络来的数据包存在这个队列当中,一旦队列符合一定条件,将触发软中断,调用CPU去处理数据包。DMA什么的是用来将数据放到内存里面的,但是中断仍然是必须的。在某些情况下,网卡队列满了,为了防止出错,就必须调用CPU尽快来处理网卡队列……在多CPU的情况下,你以为会多个CPU分担对队列的处理么?少年不要too young啊~事实上,在linux中是绑定一个CPU到网卡队列的。这样,就导致了:明明其他CPU还20%-30%,但是整机处理速度就是上不去,仔细一看:我擦,某个CPU100%,而网卡队列已满。由于锁机制的蛋疼,你重新写个驱动让多个CPU去处理队列得不偿失。以上。发布于 2015-01-2

作者:王政
链接:https://www.zhihu.com/question/27734728/answer/38147727
来源:知乎
著作权归作者所有。商业转载请联系作者获得授权,非商业转载请注明出处。

  • 2
    点赞
  • 15
    收藏
    觉得还不错? 一键收藏
  • 打赏
    打赏
  • 2
    评论
评论 2
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包

打赏作者

没有水杯和雨伞的工科男

你的鼓励将是我创作的最大动力

¥1 ¥2 ¥4 ¥6 ¥10 ¥20
扫码支付:¥1
获取中
扫码支付

您的余额不足,请更换扫码支付或充值

打赏作者

实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

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

余额充值