我读到如果DMA可用,则处理器可以将磁盘块的长读取或写入请求路由到DMA并专注于其他工作。但是,在此传输过程中,DMA到内存数据/控制通道正忙。处理器在此期间还能做些什么?
答案 0 :(得分:27)
首先,DMA(本身)几乎完全过时了。如最初定义的那样,DMA控制器依赖于以下事实:总线具有单独的线路以进行存储器读/写以及I / O读/写。 DMA控制器通过断言两者内存读取和I / O写入(反之亦然)来利用这一点。然后,DMA控制器在总线上生成连续的地址,并在每个总线周期从存储器读取数据并将数据写入输出端口(反之亦然)。
然而,PCI总线 没有单独的行用于存储器读/写和I / O读/写。相反,它为任何给定的事务编码一个(并且只有一个)命令。 PCI通常不进行DMA,而是进行总线主控传输。这意味着I / O设备本身不是在I / O设备和内存之间传输内存的DMA控制器,而是直接向内存或从内存传输数据。
至于CPU当时可以做什么,一切都取决于。当DMA很常见时,答案通常是“不多” - 例如,在早期版本的Windows下,读取或写入软盘(确实使用DMA控制器)几乎在一段时间内锁定了系统。 / p>
然而,如今,内存通常具有比I / O总线大得多的带宽,因此即使外围设备正在读取或写入内存,CPU通常也会留下相当多的带宽供CPU使用。此外,现代CPU通常具有公平的大缓存,因此它通常可以在不使用主存储器的情况下执行某些指令。
答案 1 :(得分:3)
需要注意的关键点是DMA总是部分使用CPU总线,其余的通道可以自由地用于任何其他作业/进程的运行。这是DMA相对于I / O的关键优势。希望这能回答你的问题: - )
答案 2 :(得分:2)
但是,在传输过程中,DMA到内存数据/控制通道正忙。
忙碌并不意味着你已经饱和,无法进行其他并发转移。确实,内存可能比正常情况下响应性稍差,但CPU仍然可以做有用的工作,还有其他一些事情可以不受阻碍:处理已经存在于缓存中的数据,接收硬件中断等等。而且它不仅仅是关于数据的数量,但它产生的速度:一些设备以硬实时方式创建数据,并且需要立即消耗它,否则它会被覆盖并丢失:为了在没有DMA的情况下处理这些数据,软件可能不得不将其自身固定为CPU内核然后旋转等待和读取 - 避免在整个调度程序时间片上交换到其他任务 - 即使大多数时候其他数据都没有准备就绪。
答案 3 :(得分:-1)
在DMA传输期间,CPU处于空闲状态,无法控制内存总线。 CPU通过使用高阻态进入空闲状态