直接内存访问 (DMA) 概念
微型计算机系统基本上由三个模块组成
- 微处理器
- 微处理器的存储器,如 EPROM 和 RAM
- 它们连接的 I/O 端口。
可能的數據傳輸如下所示。
存储器和微处理器之间的數據傳輸使用 LDA 和 STA 指令进行。
微处理器和 I/O 端口之间的數據傳輸也通过两个指令 IN 和 OUT 进行。
通过 DMA 数据传输,数据在输入输出端口和内存之间传输。
图:该图显示了微型计算机系统中可能的數據傳輸方式。
为了执行微处理器和内存之间或 I/O 端口和处理器之间的數據傳輸,程序的指令被执行,这些數據傳輸被称为程序化數據傳輸,在过程中涉及少量數據傳輸时已被使用。
微处理器和内存都由半导体芯片制成,其工作速度与电子速度相当。因此,在微处理器和内存之间传输数据并不是什么问题。如果出现内存速度低于微处理器的这种情况,则使用的处理器必须插入等待状态。除此之外,不会出现其他问题。
诸如 8255、8212 等端口也由半导体芯片制成,这些芯片以电子速度工作。我们使用它们来连接本质上是机电的输入输出设备,因此微处理器的速度变慢,这导致微处理器和输入输出端口之间的數據傳輸变得非常复杂。
如果用于从内存位置 3456H 读取数据的數據傳輸,然后写入输出端口号 50H,则仅需 13 个时钟周期即可使用 LDA 3456H 指令从内存位置 3456H 读取数据,以及 10 个时钟周期即可写入输出端口号 50H。因此总共需要 23 个时钟周期。如果处理器以 3-MHz 的内部频率工作,时钟周期为 0.33μs,则需要 7.66μs 的时间才能在外部工作。通过使用程序数据传输方案,读取输入端口 40H 并写入内存位置输入端口 2345H
如果我们使用 DMA 数据传输从内存位置 3456H 读取数据并写入输出端口号 50H,则只需要四个时钟周期,这会导致仅 1.33μs 的时间。一些设备,如硬盘和软盘,可以以非常快的速度执行數據傳輸。一个 1.44 MB 的软盘,以 360 rpm 的速度旋转,每轨 18 个扇区,可以存储多达 512 字节的内存,当數據傳輸速率达到每秒 54K 字节时,或大约每字节 19μs。硬盘可以轻松地将數據傳輸速度提高至少十倍。因此,它变成了每字节 1.9μs。当 DMA 数据传输变得强制性时,就会出现这种情况。在程序化數據傳輸过程中,我们需要每字节 7.66μs,只有 4 个字节会从硬盘中重复出现。因此,可以得出结论,I/O 设备在 DMA 数据传输过程中起着重要作用。
为了获得平均值、最大值和最小值等统计数据,我们使用模数转换器。使用程序化數據傳輸方案,需要 1,000 × 7.66 = 7,660μs 的处理器时间。但令人惊讶的是,使用 DMA 数据传输方案只需要 1,000 × 1.33 = 1,330μs 的时间。因此,当需要在内存和 I/O 端口之间传输大量数据时,通过微处理器路由每个字节需要花费大量时间,因此为了在较短的时间内完成工作,可以将 I/O 端口直接访问到内存以进行數據傳輸。此方案称为 DMA 数据传输。