程序查询方式是由 CPU 通过程序不断查询 I/O 设备是否已做好准备,从而控制 I/O 设备与主机交换信息。
程序查询方式:CPU与设备串行工作,传送与主程序串行工作
采用这种方式实现主机和 I/O 设备交换信息,要求 I/O 接口内设置一个 状态标记,用来反映 I/O 设备是否准备就绪。CPU 通过检测这个标记,就可以了解 I/O 设备的准备情况。
当 I/O 设备较多时,CPU 就需要按 I/O 设备在系统中的 优先级 进行逐级查询。
为了完成这个查询的流程,CPU 通常需要执行以下 3 条指令:
CPU和I/O设备串行工作,CPU连接I/O设备和内存,CPU需要等待,效率很低
(由CPU通过程序不断查询IO设备是否已经做好准备,从而控制IO设备与主机交换信息)
当执行一段程序,需要启动某个 I/O 设备进行数据交互时,就把查询流程插入到运行的程序中。具体的查询流程如下:
① 这种方式传送数据时要占用 CPU 中的寄存器,所以首先要将寄存器原内容保护起来;
② 传送的往往是一批数据,所以需要设置 I/O 设备与主机交换数据的计数值,用来控制数据量;
③ 设置要传送的数据在主存缓冲区的首地址;
④ CPU 启动 I/O 设备;
⑤ 将 I/O 接口中的设备状态标志取至 CPU 并测试 I/O 设备是否准备就绪。如果未准备就绪,则等待,直到准备就绪为止;当准备就绪时,接着可实现传送。
对输入而言,准备就绪意味着接口电路中的数据缓冲寄存器已装满欲传送的数据,称为 输入缓冲满,CPU 可以取走数据;对输出而言,准备就绪意味着接口电路中的数据已被设备取走,称为 输出缓冲空,这样 CPU 可以再次将数据送到接口,设备则可以再次从接口接收数据。
⑥ CPU 执行 I/O 指令,从 I/O 接口的数据缓冲寄存器中读出一个数据(输入),或者把一个数据写入 I/O 接口中的数据缓冲寄存器内(输出),同时将接口中的状态标志复位;
⑦ 修改主存地址;
⑧ 修改计数值,若原设置计数值为原码,则依次减 1;若原设置计数值为负数的补码,则依次加 1;
⑨ 判断计数值。若计数值不为 0,表示一批数据尚未传送完,重新启动外设继续传送;若计数值为 0,则表示一批数据已传送完毕;
⑩ 结束 I/O 传送,继续执行原程序。
只要一启动 I/O 设备,CPU 就不断地查询 I/O 设备的准备情况,这就会暂停原程序的执行。当 I/O 设备准备就绪后,就将数据逐个传送;直到数据全部传送结束,CPU 才重新回到原程序继续执行。
所以在程序查询方式下,CPU 和 I/O 设备是串行工作的,效率不高。
以输入设备为例,数据应该从 I/O 设备传送至主机。I/O 接口的具体工作过程为:
原创声明:本文系作者授权腾讯云开发者社区发表,未经许可,不得转载。
如有侵权,请联系 cloudcommunity@tencent.com 删除。
原创声明:本文系作者授权腾讯云开发者社区发表,未经许可,不得转载。
如有侵权,请联系 cloudcommunity@tencent.com 删除。