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

Memory 如果DMA控制器降低系统速度,为什么要使用它?,memory,memory-management,dma,Memory,Memory Management,Dma,我在一本书中读到: 如果系统中的DMA控制器以5 MHz的最大速率工作 我们仍然使用100ns的内存,最大传输速率是5MHz 因为DMA控制器比内存慢。在许多情况下, DMA控制器在DMA传输时降低系统速度 发生 我认为DMA控制器的全部原因是加快速度,而不是减慢速度。那么,如果它让事情变慢了,又有什么帮助呢?为什么不让DMA控制器和内存一样快?DMA控制器的整体理念是它与处理器并行工作。因此,处理器可以将一个长IO操作排队到DMA控制器,并愉快地继续运行代码。尽管DMA控制器速度较慢,但它只会

我在一本书中读到:

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


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

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

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

DMA的典型用途是将CPU从将字节从内存转移到I/O端口的平凡任务中解脱出来。考虑传输中途的正常I/O序列:
-从端口获取一个中断,该中断为下一个字节或字做好准备
-执行中断处理,包括堆栈操作和保存寄存器
-从内存中提取指针和计数器
-加载一个数据字节,存储一个数据字节
-递增两个指针并保存它们
-减少计数器并保存它;如果为零,则标志传输结束
-从中断处理返回


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

这本书是什么时候写的?1979年?基本正确,但当DMA处于活动状态时,仍然会有内存争用,这需要考虑。DMA控制器是否真的比CPU慢?@z-buffer:从技术上讲,它可能会慢,我不知道它是否真的慢。