为什么使用DMA控制器会降低系统速度?

时间:2011-12-13 12:13:18

标签: memory memory-management dma

我在一本书中读到了这个:

  

如果系统中的DMA控制器以最高5 MHz的速率运行   我们仍然使用100 ns内存,最大传输速率为5 MHz   因为DMA控制器比内存慢。在许多情况下,   当DMA传输时,DMA控制器会降低系统的速度   发生。

我认为DMA控制器的全部原因是为了加快速度,而不是减慢速度。那么如果减慢速度会有什么帮助呢?为什么不让DMA控制器和内存一样快?

2 个答案:

答案 0 :(得分:4)

DMA控制器的整体思想是它与处理器并行工作。因此,处理器可以将长IO操作排队到DMA控制器,并愉快地继续运行代码。即使DMA控制器较慢,它也只会影响IO操作,而不会影响整体性能。这在与慢速设备连接时非常重要 - 如果处理器必须直接与它们一起工作,它将永远不会进行任何其他处理。使用DMA,它会将缓慢的IO排队到DMA上并且IO并行完成。

答案 1 :(得分:2)

有两种不同的转移率"参与其中。在设计良好的系统中,DMA控制器必须能够以正常工作速率与地址和数据总线连接。另一方面,操作之间的时间可能比CPU指令周期慢得多,这意味着它不会以与源地址相同的速度将数据从源地址传输到目标地址。 CPU会。由于几乎所有连接到系统的硬件设备都以的速度运行,因此这是完全可以接受的。

DMA的典型目的是将CPU从从内存中铲出字节到I / O端口的普通任务卸载。考虑传输过程中的正常I / O序列:
- 从端口获取中断,为下一个字节或字准备好;
- 执行中断处理,包括堆栈操作和保存寄存器;
- 从记忆中拿起指针和计数器;
- 加载数据字节,存储数据字节;
- 增加两个指针并保存它们 - 递减计数器并保存;如果为零,则标志传输结束;
- 从中​​断返回处理

在系统中使用DMA,cpu花费更多时间预先编程DMA控制器,但是在传输结束之前避免所有中断。当然,当DMA访问内存时CPU不能;但通常CPU无论如何都不会访问每个指令的内存(加,减,等等,都发生在没有内存访问的CPU内部)。那么,平均每个字节传输的成本应该小于一个存储周期(允许不干扰的存储周期),而不是完整的中断处理操作。