第11章 内存与IO访问之DMA

本文深入探讨了直接存储器访问(DMA)的工作原理,如何提高系统吞吐率。DMA控制器在传输期间允许CPU执行其他任务,结束后通过中断通知CPU。文章讨论了DMA与Cache一致性问题,以及在Linux下进行DMA编程的方法,包括DMA区域、虚拟地址、物理地址和总线地址的转换,以及一致性DMA缓冲区的分配和释放。
摘要由CSDN通过智能技术生成

11.6 DMA(直接存储器访问

    DMA是一种无须CPU参与就可以让外设和系统内存之间进行双向数据传输的硬件机制。使用DMA可以使系统CPU从实际的I/O数据传输过程中摆脱出来,从而大大提高系统的吞吐率(bit/s)。DMA通常与硬件体系结构,特别是外设的总线技术密切相关。

    DMA方式的数据传输由DMA控制器(DMAC)控制,在传输期间,CPU可以并发地执行其他任务。当DMA结束后,DMAC通过中断通知CPU数据传输已经结束,然后由CPU执行相应的中断服务程序进行后处理。

11.6.1 DMA与Cache一致性

    Cache被用作CPU针对内存的缓存,利用程序的空间局部性和时间局部性原理,达到较高的命中率,从而避免CPU每次都必须要与相对慢速的内存交互数据来提高数据的访问速率。DMA可以作为内存与外设之间传输数据的方式,在这种传输方式下,数据并不需要经过CPU中转。

    假设DMA针对内存的目的地址Cache缓存的对象没有重叠区域(如图11.12所示),DMA和Cache之间将相安无事。如果DMA的目的地址与Cache所缓存的内存地址访问有重叠(如图11.13所示),经过DMA操作,与Cache缓存对应的内存中的数据已经被修改,而CPU本身并不知道,它仍认为Cache中的数据就是内存中的数据,在以后访问Cache映射的内存时,它仍使用陈旧的Cache数据。就会发生Cache与内存之间数据“不一致性”的错误。


图11.12 DMA目的地址与Cache对象没有重叠


图11.13 DMA目的地址与Cache对象有重叠

    Cache数据与内存数据的不一致性,指在采用Cache的系统中,同样一个数据可能既存在于Cache中,也存在于主存中,Cache与主存中的数据一样则具有一致性,数据若不一样则具有不一致性。

   备注: 在发生Cache与内存不一致性错误后,驱动将无法正常运行。Cache的不一致性问题并不是只发生在DMA的情况下,还存在于Cache使能和关闭的时刻。例如,对于带MMU功能的ARM处理器,在开启MMU之前,需先置Cache无效,对于TLB(转换旁路缓存),也是如此。

11.6.2 Linux下的DMA编程

    DMA本身不属于一种等同于字符设备、块设备和网络设备的外设,DMA只是一种外设与内

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值