程序控制输入输出方式又称为状态驱动输入输出方式、应答输入输出方式、查询输入输出方式、条件驱动输入输出方式等,是计算机系统中一种最基本的输入输出方式。 图6.1表示从键盘输入一个字符到处理机,再把这个字符输出到显示器上的工作过程。当DONE标志为"1",表示已经从键盘上输入一个字符到该设备的缓冲寄存器,当这个字符被CPU取走之后,DONE标志复位。 输出设备的标志READY的设置与输入设备正好相反,当READY标志为"1"时,表示该设备的缓冲寄存器是空的,正准备接收从CPU送来的数据,当设备缓冲寄存器中已经有数据时,READY标志复位,表示输出设备正在把缓冲寄存器中的数据输出到设备上。 |
图 6.1 从键盘输入一个字符并输出显示器上的程序框图 |
![]() |
程序控制输入输出方式有如下4个特点: 1.何时,对何设备进行输入或输出操作完全受CPU控制。 2.外围设备与CPU处于异步工作关系。CPU要通过指令对设备进行测试才能知道设备的工作状态,例如,设备空闲(可能工作已经结束,也可能已经准备就绪)、正在忙碌等。 3.数据的输入和输出都要经过CPU。外围设备每发送或接收一个数据都要由CPU执行相应的程序才能完成,如图6.2所示。 4.用于连接低速外围设备,如显示器、打印机、键盘和鼠标等。 必须指出,象图6.1那样用一个处理机同时管理两个外部设备的情况只是一种特例,因为键盘输入的速度比显示器的速度要低得多,从而保证从键盘上输入的每个字符能够正确输出到显示器上。如果把两台工作速度相当,或工作速度不确定的设备象图6.1那样连接在一起就有可能丢失信息。 |
图 6.2 程序控制方式的数据传送过程 |
![]() |
在早期的计算机系统中,一个处理机在一段时间内只能管理一台外围设备。例如,用一台速度为1GIPS的计算机系统管理一台打印机。打印机的工作速度是每秒100个字符。处理机用一条指令就能向打印机传送4个字符。这样,处理机的利用率只有: ![]() 即4千万分之一。 在现代计算机系统中,每台外围设备都设置有数据缓冲寄存器、状态寄存器(对输入设备)或控制寄存器(对输出设备)。这样,一个处理机就可以管理多台外围设备。 当一个处理机需要管理多台外围设备,而且这些外围设备又要并行工作时,处理机可以采用轮流循环测试的方法,分时为各台外围设备服务。当然,程序流程不能象图6.1那样,要修改成如图6.3所示。当被测试的一台设备还在忙碌(或者还没有准备好)时,必须立即测试下一台设备。只要处理机对所有设备测试一个循环花费的时间小于最快设备的工作周期,那么,所有外围设备就都能够正确地并行工作。 |
图 6.3 一个处理机管理多台外部设备的程序框图 |
![]() |
采用程序控制输入输出方式,一个很明显的优点是灵活性很好。例如,可以很容易地改变各台外围设备的优先级。在图6.3中,程序员能够很方便地任意安排各台外围设备的测试顺序,而对各台外围设备的测试顺序实际上就是各台设备的优先级。 采用程序控制输入输出方式的一个最大缺点是不能实现处理机与外围设备并行工作。 例如,在图6.1中要实现处理机与输入输出设备并行工作,只能在处理机把一个字符送到显示器之后,先运行自己的一段程序,然后再去测试键盘是否有输入字符。由于人敲击键盘的速度相对于处理机的运算速度来说是非常低的,因此可以利用人两次敲击键盘的中间一段时间,处理机运行用户的程序。但是,这种管理方式实现起来很困难,而且也相当危险。主要原因是处理机运行用户程序的这段时间如何控制?在一般处理机中,定时器必须采用中断方式工作。另外,时间的长短也很难控制,如果这段时间太短,处理机的利用率很低,如果时间过长,超过了两次敲击键盘之间的这段时间,那么,从键盘上输入的前一个字符就将丢失。 |