我读到,如果DMA可用,那么处理器可以将长时间读或写磁盘块的请求路由到DMA,并专注于其他工作。但是,DMA到存储器数据/控制通道在此传输期间很忙。在这段时间里,处理器还能做什么?
发布于 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通常具有相当大的高速缓存,因此它通常可以在根本不使用主内存的情况下执行某些指令。
发布于 2011-03-01 13:26:27
需要注意的关键点是,CPU总线始终部分由DMA使用,通道的其余部分可供任何其他作业/进程运行。这是DMA相对于I/O的关键优势。希望这回答了您的问题:-)
发布于 2011-03-01 13:20:29
但是,
到存储器数据/控制通道在此传输期间很忙。
忙碌并不意味着你已经饱和,无法进行其他并发传输。诚然,内存的响应速度可能比正常情况下要慢一些,但CPU仍然可以做有用的工作,而且它们还可以畅通无阻地做其他事情:压缩缓存中已经存在的数据,接收硬件中断等。这不仅仅与数据的数量有关,还与其生成的速率有关:一些设备硬实时地创建数据,并且需要及时使用它,否则它会被覆盖和丢失:为了在没有DMA的情况下处理这个问题,软件可能不得不将自己固定在CPU内核上,然后旋转等待和读取-避免在整个调度器时间片内被交换到其他任务上-即使大多数时候更多的数据甚至还没有准备好。
https://stackoverflow.com/questions/5150719
复制相似问题