7.2.4 I/O 接口的输入/输出控制方法

7.2.4 I/O 接口的输入/输出控制方法

在微机系统中,I/O 接口可采用的输入/输出控制方式一般有4种:查询控制方式、中断控制方式、直接存储器存取方式(DMA 方式)和输入/输出协处理器方式。

1.查询控制方式

查询控制方式分为无条件传送方式和条件传送方式。

(1)无条件传送方式:这种方式是查询控制方式的特例,在此种条件下不需要查询,或假设查询已经完成。当I/O 设备已准备就绪,而且不必查询它的状态就可以进行信息传输,这种情况就称为无条件传送。这种信息传送方式只适用于简单的I/O 设备,如开关和数码段显示器等。

(2)条件传送方式:CPU 主动查询,也称程序查询或轮询(Polling)方式。CPU 通过执行程序不断读取并测试I/O 设备状态,如果输入外部设备处于已准备好状态或输出外部设备为空闲状态时,则CPU 执行数据读/写指令。由于条件传送方式是CPU 通过程序在不断查询I/O 设备的当前状态后才进行信息传送,所以也称为“查询式传送”。条件传送方式的接口电路一般包括传送数据端口及传送状态端口。当输入信息时,CPU 查询到I/O 设备准备好后,则将接口的“准备好”标志位置1。当输出信息时,I/O 设备取走一个数据后,CPU 将传送状态端口标志置为“空闲”状态,数据端口可以接收下一个数据。

在该方式下,使用7.1节中的sys_write函数进行字符串打印的系统调用服务例程大致过程如下:

在上述程序段中,对于每个需要打印的字符,都需要先查看打印机是否“就绪”,如果“就绪”就输出一个字符,否则就一直等待。接着下一个字符继续查看打印机传送字符是否完成,即状态为“就绪”,才能继续输出。循环直到所有字符打印结束。该方式控制简单,但是主机和外设是串行工作,由于外设速度比CPU 慢很多,所以主机的效率不能充分发挥。

2.中断控制方式

中断控制方式是一种高效的、适用于频繁而随机发生的小数据量的输入/输出请求的控制方法。在中断控制方式中,主机启动外设后不需要等待查询,而是继续执行程序。当外设工作完成后便向CPU 发中断请求。CPU 接到中断请求后在响应条件满足时可以响应,并由CPU 执行中断服务程序以完成外设和主机的一次信息传送,完成传送后主机又继续执行主程序。

该方式下,7.1节中的sys_write进行字符串打印的系统调用服务例程大致过程如下:

我们可以看到在上述程序段中,首先打开中断,当打印机状态就绪后,CPU 启动外设进行第一个字符的传送,并发送“启动打印”命令,然后阻塞当前进程。从而CPU 去执行其他进程,这个时候外设在对应设备控制器的控制下进行数据的I/O 操作。此时,CPU 与外设是并行工作的。当I/O 操作完成后就会向CPU 发出中断请求信号,CPU 就会中断当前进程,并调出对应的中断服务程序进行下一次数据的传送,然后返回到被打断的进程继续执行。

这种方式可以使CPU 与外设并行工作,CPU 的效率相比查询控制方式效率大大提高。但程序中断方式使CPU 增加了额外开销时间,适合工作速度不太高的外设与主机的信息传送。

3.DMA 控制方式

DMA 控制方式是一种通过DMA 控制器大量、直接传送数据的方式。当某一I/O 设备需要输入/输出一批数据时,它首先向DMA 控制器发出请求,DMA 控制器接收到这一请求后,向CPU 发出总线请求;此时若CPU 响应DMA 的请求,就把总线使用权赋给DMA 控制器,则数据可以不通过CPU,直接在DMA 控制器操纵下进行。当这批数据传送完毕后,DMA 控制器就使得总线请求信号变得无效,CPU 检测到这一信号,即可收回总线使用权。在该方式下,7.1节中的sys_write进行字符串打印的系统服务例程大致过程如下:

我们可以看到在上述程序段中,CPU 首先进行DMA 控制器的初始化工作后,接着发送“启动DMA 传送”命令,就阻塞当前进程,转而去执行其他进程了。这个时候DMA 控制器就可以进行所有数据的传送工作。当DMA 完成所有数据的传送后就会向CPU 发送“DMA 完成”的中断请求信号,CPU 检测到该信号后,就会中断当前执行的进程,并调出相应的中断服务程序执行。该中断服务程序中主要完成解除进程的阻塞状态进行就绪队列,然后返回被打断的进程继续执行。

因此,采用DMA 控制方式,除了数据块开始传送和结束传送时需要进行适当处理外,在数据块传送过程中无须CPU 干预,每传送一个数据中只需要占用一个主存周期,这样CPU 用于I/O 的开销就非常小。

【例7.1】 某计算机的CPU 主频为500 MHz,CPI为5(即执行每条指令平均需5个时钟周期)。假定某外设的数据传输率为0.5 MB/s,采用中断方式与主机进行数据传送,以32位为传输单位,对应的中断服务程序包含18条指令,中断服务的其他开销相当于2条指令的执行时间。请回答下列问题,要求给出计算过程。

①在中断方式下,CPU 用于该外设I/O 的时间占整个CPU 时间的百分比是多少?

②当该外设的数据传输率达到5 MB/s时,改用DMA 方式传送数据。假定每次DMA传送块大小为5000B,且DMA 预处理和后处理的总开销为500个时钟周期,则CPU 用于该外设I/O 的时间占整个CPU 时间的百分比是多少?

解:中断传送:

在中断方式下,CPU 每次用于数据传送的时钟周期为:

5×(18+2)=100

为达到外设0.5 MB/s的数据传输率,外设每秒申请的中断次数为:

0.5 MB/4B=125 000

1秒内用于中断的开销:

100×125 000=12 500 000=12.5 M 个时钟周期

CPU 用于外设I/O 的时间占整个CPU 时间的百分比:

12.5 M/500 MB=2.5%

DMA 传送:

在DMA 方式下,CPU 每次用于数据传送的时钟周期为500。

为达到外设5 MB/s的数据传输率,外设每秒申请的进行DMA 传送次数为:

5 MB/5000 B=1000

1秒内用于DMA 的开销:

1000×500=500 000=0.5 M 个时钟周期

CPU 用于外设I/O 的时间占整个CPU 时间的百分比:

0.5 M/500 MB=0.1%

4.输入/输出协处理器方式

对于有大量输入/输出任务的微机系统,DMA 控制方式已经不能满足输入/输出的需求。为了满足输入/输出的需要,Intel公司生产了与x86系列芯片配套的输入/输出协处理器(IOP)8089。系统中配置了IOP后,x86系列CPU 必须工作在最大模式。当CPU 需要进行I/O 操作时,只要在存储器中建立一个规定格式的信息块,设置好需要执行的操作和有关参数,然后把这些参数送入IOP,IOP即会执行输入/输出操作。如果在数据传送过程中出现错误,IOP就会进行重复传送或做必要的处理。整个数据块的传送过程由IOP 控制,在同时CPU 可去完成其他作业。