我读到如果 DMA 可用,那么处理器可以将磁盘块的长读或写请求路由到 DMA 并专注于其他工作。但是,在此传输过程中,DMA 到内存数据/控制通道很忙。处理器在此期间还能做什么?
4 回答
首先,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 通常具有相当大的缓存,因此它通常可以执行某些指令而根本不使用主存。
需要注意的关键点是 CPU 总线总是部分被 DMA 使用,而通道的其余部分可以自由地用于运行任何其他作业/进程。这是 DMA 优于 I/O 的关键优势。希望这回答了你的问题:-)
但是,在此传输过程中,DMA 到内存数据/控制通道很忙。
忙碌并不意味着您已经饱和并且无法进行其他并发传输。确实,内存的响应速度可能比正常情况下要慢一些,但 CPU 仍然可以做有用的工作,而且它们还可以畅通无阻地做其他事情:处理已经在缓存中的数据,接收硬件中断等。这不仅仅是关于数据的数量,但它生成的速率:某些设备以硬实时方式创建数据并且需要立即使用它,否则它会被覆盖和丢失:要在没有 DMA 的情况下处理这个问题,软件可能必须将自己固定在一个然后 CPU 内核旋转等待和读取——避免在整个调度程序时间片内被交换到其他任务上——即使大多数时候进一步的数据还没有准备好。
在 DMA 传输期间,CPU 处于空闲状态,无法控制内存总线。通过使用高阻抗状态将 CPU 置于空闲状态