I/O程序直接控制方式

  I/O操作是计算机处理中非常重要的操作,如何实现对I/O设备的有效控制,以更好地满足用户的输入/输出要求,是设备管理中非常重要的问题之一。在计算机技术的发展过程中,I/O控制方式也在不断地发展,对I/O控制的要求主要是基于尽量减少主机对I/O控制的干预,把主机从繁杂的I/O控制事务中解脱出来,以更多地完成其数据处理任务。

  按照I/O控制功能的强弱,以及和CPU之间联系方式的不同,可把I/O设备的控制方式分为4种,这4种控制方式代表了I/O控制发展的4个阶段,从程序直接控制方式发展到中断驱动方式,再到DMA控制方式、通道I/O控制方式,每种控制方式都对前一种方式存在的问题进行了解决,提高了CPU 和外围设备并行工作的程度,大幅度地提高了计算机执行效率和系统资源的利用率。

  I/O程序直接控制方式如下:

  程序直接控制方式也称询问方式,它是早期计算机系统中的一种I/O操作控制方式。在这种方式下,利用输入/输出指令或询问指令测试一台设备的忙 /闲标志位,根据设备当前的忙或闲的状态,决定是继续询问设备状态还是由主存储器和外围设备交换一个宇符或一个字。下图所示是一个数据的输入过程。当在 CPU上运行的现行程序需要从I/O设备读入一批数据时,CPU程序首先设置交换的字节数和数据读入主存的起始地址,然后向I/O设备发送读指令或查询标志指令,I/O设备将当前的状态返回给CPU。如果I/O设备返回的当前状态为忙或未就绪,则测试过程不断重复,直到I/O设备就绪,开始进行数据传送,CPU从I/O接口读一个字或一个字符,再写入主存。如果传送还未结朿,再次向设备发出读指令,重复上述测试过程,直到全部数据传输完成再返回现行程序执行。


  为了正确完成这种传送,通常要使用3条指令:查询指令,用来查询设备的状态;传送指令,当设备就绪时,执行数据交换;转移指令,当设备未就绪时,执行转移指令转向查询指令继续查询。

  在程序直接控制方式中,一旦CPU启动I/O设备,便不断查询I/O设备的准备情况,终止原程序的执行;另外,当I/O准备就绪后,CPU还要参与数据的传送工作,此时CPU也不能执行原程序,由于CPU的髙速性和I/O设备的低速性,致使CRJ的绝大部分时间都处在等待I/O设备完成数据的输入/输出循环测试和低速的传送中,造成对CPU资源的极大浪费。由此可见,在这种设备控制方式下,CPU和I/O设备完全处在串行工作状态,使主机不能充分发挥效率,整个系统的效率很低。

时间: 2024-09-17 04:55:51

I/O程序直接控制方式的相关文章

《MATLAB/Simulink系统仿真超级学习手册》——2.4 MATLAB的程序流程控制

2.4 MATLAB的程序流程控制 MATLAB/Simulink系统仿真超级学习手册 作为一种程序设计语言,MATLAB同一般高级程序语言一样,为用户提供了丰富的程序结构语言来实现用户对程序流程的控制. MATLAB的程序路程控制主要包括循环控制和条件选择控制. 2.4.1 循环控制结构 1.for循环结构 for循环结构的格式为 for 循环变量=向量表达式 循环体语句组 end 该循环结构的执行方式为:从向量表达式的第一列开始,依次将向量表达式各列的值赋值给循环变量,然后执行循环体语句组中

SQL Sever怎样同时插入N条数据而不在程序里控制

问:"怎样同时插入N条数据,却不在程序里控制?" 答:"由于SQL Sever不支持数组参数.所以只能用另类的办法了.利用SQL Server强大的字符串处理传把数组格式化为类似"1,2,3,4,5,6". 然后在存储过程中用SubString配合CharIndex把分割开来. 详细的存储过程: CREATE PROCEDURE dbo.ProductListUpdateSpecialList @ProductId_Array varChar(800),

嵌入式程序的设计方式,怎么把exe执行放在窗体程序中作为子程序?

问题描述 嵌入式程序的设计方式,怎么把exe执行放在窗体程序中作为子程序? 怎么设计windows嵌入式程序,怎么把程序嵌套在一起主程序将exe作为子程序在窗体内调用? 解决方案 使用setparent函数设置目标程序作为子程序运行.

netbeans swing做的胖客户端程序如何控制主窗体的菜单

问题描述 netbeans swing做的胖客户端程序如何控制主窗体的菜单 不要问我为什么用netbeans的swing开发框架,这是领导决定的-- 小弟初用netbeans,却在最关键的地方卡壳了.netbeans开发swing程序如何授权啊. 或者说有哪位大神知道如何在程序中取到netbeans自动取到的那个主菜单值.帮小弟度过难关. 另外求问怎么做能让在登录界面确认后才生成主窗口. 解决方案 https://netbeans.org/kb/docs/java/quickstart-gui_

android程序怎样控制手机中通知中心的开关?

问题描述 android程序怎样控制手机中通知中心的开关? 我要通过app设置里的推送开关来控制手机通知中心app是否接收通知,代码怎么写? 解决方案 这里的通知中心的管理应该是系统设置里面的吧?**_如果是,那就系统的行为,APP无法控制_**.比如某款APP产生了通知,你可以在这里禁止它弹出通知消息. 这里的只是权限的管理,系统允不允许你产生通知的控制中心而已.如果只是简单的要产生使用通知栏产生一条消息,你可以参考如下代码(该代码的功能是点击通知栏后跳转某个Activity,里面一些参数根据

如果我想在vs2010上运行mpi程序时控制用多少个进程运行,应该怎么做?

问题描述 如果我想在vs2010上运行mpi程序时控制用多少个进程运行,应该怎么做? 是在vs2010上直接控制,不是在mpich2上通过wmpiexe.exe程序控制,十分感谢!......... 解决方案 用多个进程运行的关键是进程间的数据交换和同步,这方面你可以用管道或者RPC来实现.

LED显示屏上文字显示内容的控制是用硬件厂家自己提供的软件合适还是自己编写程序进行控制合适?

问题描述 需要对多个LED显示屏上的显示内容进行控制,显示主要是文字.请问一般的做法是用LED硬件厂家自己提供的软件来进行显示文字的控制,还是自己开发一个程序进行控制好(还不知道厂家有没有提供LED控制的dll).个人觉得厂家的控制软件虽然实现了功能但是感觉使用比较复杂,也不知道用户愿不愿用.但是自己编写控制软件是不是比较复杂,也不知道硬件厂商是否提供了控制LED的dll.本人没有做过LED方面的东西,烦请高手告知常规做法是什么,非常感谢! 解决方案 解决方案二:自己顶!解决方案三:再顶!

直流控制方式的最佳电子器件

问题描述 直流控制方式的最佳电子器件 各位大神好,请问控制直流电通断时间长短的最佳控制器件是什么?要求高灵敏度,无声,使用寿命长,体积小,用于控制小功率加热电阻,实现恒温控制.求推荐常用的最佳的电子器件,有型号和驱动电路最好了.谢谢

hibernate主键生成策略-为什么我的程序只有native方式生效(注解)

问题描述 hibernate主键生成策略-为什么我的程序只有native方式生效(注解) 我想采用uuid主键策略,但是多次各种尝试都不成功.我是通过往数据库插入数据测试的.重点是使用native能正常插入数据,而使用uuid就不行,主要原因是整个程序也不报错,就是运行了,看起来就像是跳过执行插入语句一样,实际上是执行到了插入方法的,也没有堆栈信息什么的可参考.代码如下: @Id @GeneratedValue (generator = "paymentableGenerator" )