首页
学习
活动
专区
圈层
工具
发布
社区首页 >问答首页 >直接内存访问DMA -它是如何工作的?

直接内存访问DMA -它是如何工作的?
EN

Stack Overflow用户
提问于 2011-03-01 13:08:37
回答 4查看 17K关注 0票数 17

我读到,如果DMA可用,那么处理器可以将长时间读或写磁盘块的请求路由到DMA,并专注于其他工作。但是,DMA到存储器数据/控制通道在此传输期间很忙。在这段时间里,处理器还能做什么?

EN

回答 4

Stack Overflow用户

回答已采纳

发布于 2011-03-01 13:27:18

首先,DMA (本身)几乎完全过时了。正如最初定义的,DMA控制器依赖于这样一个事实,即总线有单独的线路可断言用于存储器读/写和I/O读/写。DMA控制器通过同时断言内存读取和I/O写入(反之亦然)来利用这一点。DMA控制器随后在总线上生成连续的地址,并且在每个总线周期中从存储器读取数据并将其写入输出端口(反之亦然)。

然而,PCI总线没有用于存储器读/写和I/O读/写的单独线路。相反,它为任何给定的事务编码一个(且只有一个)命令。PCI通常进行总线主控传输,而不是使用DMA。这意味着,与在I/O设备和存储器之间传输存储器的DMA控制器不同,I/O设备本身直接向存储器传输数据或从存储器直接传输数据。

至于CPU当时还能做些什么,这完全取决于。回到DMA很普遍的时候,答案通常是“不多”--例如,在Windows的早期版本中,读或写软盘(使用DMA控制器)在很长一段时间内几乎会锁定系统。

然而,如今,内存的带宽通常比I/O总线大得多,因此,即使外围设备正在读取或写入内存,通常也会有相当数量的带宽留给CPU使用。此外,现代CPU通常具有相当大的高速缓存,因此它通常可以在根本不使用主内存的情况下执行某些指令。

票数 30
EN

Stack Overflow用户

发布于 2011-03-01 13:26:27

需要注意的关键点是,CPU总线始终部分由DMA使用,通道的其余部分可供任何其他作业/进程运行。这是DMA相对于I/O的关键优势。希望这回答了您的问题:-)

票数 3
EN

Stack Overflow用户

发布于 2011-03-01 13:20:29

但是,

到存储器数据/控制通道在此传输期间很忙。

忙碌并不意味着你已经饱和,无法进行其他并发传输。诚然,内存的响应速度可能比正常情况下要慢一些,但CPU仍然可以做有用的工作,而且它们还可以畅通无阻地做其他事情:压缩缓存中已经存在的数据,接收硬件中断等。这不仅仅与数据的数量有关,还与其生成的速率有关:一些设备硬实时地创建数据,并且需要及时使用它,否则它会被覆盖和丢失:为了在没有DMA的情况下处理这个问题,软件可能不得不将自己固定在CPU内核上,然后旋转等待和读取-避免在整个调度器时间片内被交换到其他任务上-即使大多数时候更多的数据甚至还没有准备好。

票数 2
EN
页面原文内容由Stack Overflow提供。腾讯云小微IT领域专用引擎提供翻译支持
原文链接:

https://stackoverflow.com/questions/5150719

复制
相关文章

相似问题

领券
问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档