汇编语言 I/O 传送方式

CPU 与外设之间的数据 I/O 方式主要有以下三种。

一、程序控制方式

这种方式的主要特点是:与外设交换信息完全在用户程序的控制下进行,在哪个端口、何时进行输入输出操作,均在程序中反映出来。在程序中如何实现程序控制,有两种办法。

  1. 无条件传送方式

    这种方法是在程序需要输入输出时,就向指定端口进行 I/O 操作,而无须询问外设是否准备好。当外设的数据传送是定时的,且时间是已知的情况下,CPU 定时取入数据,而当 CPU 去取数据时,数据肯定已准备好;或 CPU 定时发送数据,外设肯定已准备好接收数据,这时采用这种传送方法。比如,当输入信息是开关量时,开关已设定,只要用输入命令,肯定会读入开关的状态;模拟量的输入输出等,也可用无条件传送。无条件传送是最简单的数据传送方式,采用这种方法所需的硬件和软件都较少,输入输出操作完全取决于程序的安排。当然,这种方法不能处理实时出现的问题。

  2. 程序查询方式

    无条件传送方法在使用上有局限性,它不了解外设的实时状态。有的外设不一定与计算机同步,或者不能及时响应计算机的输入输出操作。因此,在有的输入输出操作中,很难确保操作正确。例如,当要输出一信息时,程序必须确认上次送达端口的信息已被输出设备取走,否则就要覆盖上次的信息。程序查询方法就是当需要输入输出时,首先查询外设的目前状态(如输入设备是否已有信息送入端口,输出设备是否从端口取走上次的信息),当确认可以进行 I/O 操作后,才能用输入/输出指令完成本次的 I/O 操作。

    采用程序查询方法的程序须经过下列几个步骤实现输入输出操作,如图 2 所示。

    程序查询方法的输入输出操作

    图 2 程序查询方法的输入输出操作

    (1)获得端口的状态信息。

    (2)判断是否可以进行新的输入输出操作。对输入操作:查询是否有新的信息已送入端口(即准备好否);对输出操作:查询是否已完成上次的输出任务(即设备是否在忙)。如果已准备好或设备空闲,方可进行下一步,否则返回(1)。

    (3)执行一条输入输出指令,从连接输入设备的端口取回一个字或字节的信息,或向连接输出设备的端口送一个字或字节的信息。

二、中断控制方式

前述的程序控制方式,在程序设计时比较简单,但是实际应用时受限。无条件传送方法,完全不能反映设备实时状况;而程序查询方法,有时对设备的查询会浪费许多 CPU 时间。为了提高计算机系统效率,增加实时处理能力,常采用中断控制方式。它是独特的一种 I/O 控制方式。

三、直接存储器存取方式

这种方式又称为 DMA(Direct Memory Access)方式。这种方式为输入输出设备与存储器之间建立一条直接进行信息传送的渠道,程序控制和中断控制这两种方式下的 I/O 操作,均以 CPU 为中心,通过执行指令来实现 I/O 操作,因此花费大量 CPU 执行指令的周期。对于 I/O 设备与主存储器一次需进行数量较大的信息交换(如从磁盘读一文件)时,CPU 的开销太大。所以,为提高内存与外设之间交换信息的速度,最有效的办法是不通过 CPU,让它们之间直接进行信息传送,即以存储器为中心,在一个专门的控制电路(即 DMA 控制器)的控制下传送信息,不再需要 CPU 的干预。也就是不再借用执行指令的办法来传送信息。这种方法就叫作直接存储器存取。

为了进行外设与内存之间成批的信息交换,在进入 DMA 控制流程前,必须事先把要传送这批信息的源、目的和信息数量告诉 DMA 控制器。源和目的视输入或输出而异,它指明设备的起始位置和内存的首址。例如,从磁盘读一文件到内存,那么“源”就是指磁盘的驱动器号、磁道号、扇区号等,而“目的”就是信息传送到内存的首址。如把内存中一数据块存入磁盘,那么“源”和“目的”的含意就与上述输入相反。在发出 DMA 请求、CPU 响应后,CPU 把总线控制权转让给 DMA 控制器,进入 DMA 工作方式。图 3 给出了 DMA 传送流程示意。DMA 给出内存地址,把输入设备的数据送给存储器或把存储器的数据送给输出设备,然后 DMA 控制器修改内存地址,使它指向下一个存储单元,并对已传送数据的个数计数。如果计数未达到这次直传数据个数的要求,继续进行 DMA 传送,否则发出 DMA 结束信号,把总线控制权交还 CPU。DMA 控制方式对成批数据的传送是很方便的,也可获得高效率。由于它涉及硬件较多,已超过本文讨论范围,故不再详述。

DMA 传送流程示意

图 3 DMA 传送流程示意

请参阅

(完)

comments powered by Disqus