如果DMA控制器降低了系统速度,为什么要使用它呢?



我在一本书里读到的:

如果系统中DMA控制器的最大工作速率为5mhz我们仍然使用100 ns内存,最大传输速率为5 MHz因为DMA控制器比内存慢。在很多情况下,DMA控制器在DMA传输时减慢系统的速度发生。

我认为DMA控制器的全部原因是加快速度,而不是减慢速度。那么,如果它能让事情慢下来,它有什么用呢?为什么不让DMA控制器和内存一样快呢?

DMA控制器的整个思想是它与处理器并行工作。因此,处理器可以将长IO操作排在DMA控制器的队列中,并愉快地继续运行代码。尽管DMA控制器较慢,但它只会影响IO操作,而不会影响整体性能。当与慢速设备接口时,这一点非常重要——如果处理器必须直接与它们一起工作,它将永远不会完成任何其他处理。对于DMA,它将慢速IO排队到DMA,并且IO是并行完成的。

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

DMA的典型目的是将CPU从从内存到I/O端口的日常任务中解脱出来。考虑传输中间的正常I/O顺序:
-从端口得到一个中断,它准备好了下一个字节或字;
-执行中断处理,包括堆栈操作和保存寄存器;
-从内存中取出指针和计数器;
-加载数据字节,存储数据字节;
-两个指针都自增并保存
-减少计数器并保存它;如果为零,标志传输结束;
-中断处理返回

在系统中使用DMA时,cpu会花费更多的时间预先对DMA控制器进行编程,但随后会避免所有的中断,直到传输结束。当然,当DMA访问内存时,CPU不能;但通常情况下,CPU并不是每条指令都访问内存(加,减,等等,所有这些都发生在CPU内部,没有内存访问)。那么,平均而言,每个字节传输应该花费少于一个内存周期(考虑到不干扰的周期),而不是一个完整的中断处理操作。

最新更新