主机与I/O交换信息的控制方式有三种
-
程序查询方式:
这种方式的特点是主机与I/O串行工作。当CPU启动I/O后,时刻查询I/O是否准备好,若设备准备就绪,CPU便转入处理I//O与主机间传送信息的程序;若设备未做好准备,则CPU反复查询,“踏步”等待直到I/O准备就绪为止。这种方式CPU效率很低。 -
程序中断方式:
这种方式的特点是主机与I/O并行工作。当CPU启动I/O后,不必时刻查询I/O是否准备好,而是继续执行程序。当I/O准备就绪时,向CPU发中断请求信号,CPU在适当的时候响应I/O的中断请求,暂停现行程序为I/O服务。这种方式消除了“踏步”现象,提高了CPU的效率。 -
DMA方式:
这种方式的特点是主机与I/O并行工作,主存和I/O之间有一条直接数据通路。CPU启动I/O后,不必查询I/O是否准备好,当I/O准备就绪后,发出DMA请求,此时CPU不直接参与I/O和主存间的信息交换,只是把外部总线 (地址线、数据线及有关控制线) 的使用权暂时交赋予DMA,仍然可以完成自身内部的操作 (如加法、移位等),故不必中断现行程序,只需暂停一个存取周期访存 (即周期挪用),CPU的效率更高。
程序中断方式中的周期挪用解释
所谓周期挪用即在DMA传送方式中,当I/O设备没有DMA请求时,CPU按程序的要求访问主存;一旦I/O设备有DMA请求并与CPU访存发生冲突时,CPU要暂时一个存取周期访存,把总线控制权让给DMA。就好像I/O设备挪用了CPU的访存周期,故称为周期挪用或周期窃取。
设备提出DMA请求可能会遇到三种情况:
1. I/O设备有DMA请求时,CPU正在进行自身的操作 (如乘法等),并不需要访存,即I/O访存和CPU访存没有冲突,故不存在周期挪用。
2. I/O设备要求访存时,CPU也要求访存,此时发生冲突。在这种情况下,I/O设备的DMA请求优先 (因为I/O访存有时间要求,前一个I/O数据必须在下一个访存请求到来前存取完毕),即出现了周期挪用,CPU需延缓一个存取周期访存。
3. I/O设备有DMA请求时,存储器本身正处于“忙”状态 (正在读或写),此时必须等待存取周期结束后才能进行I/O访存。
程序查询方式和程序中断方式都要由程序实现外围设备的输入输出,它们有什么不同?
程序查询方式是用户在程序中安排一段输入输出程序,它由I/O指令、测试指令和转移指令组成。CPU一旦启动I/O后,就进入这段程序,时刻查询I/O准备的情况,若未准备就绪就踏步等待;若准备就绪就实现传送。在输入输出的全部过程中,CPU停止自身的操作。
程序中断方式虽也要用程序实现外部设备的输入、输出,但它只是以中断服务程序的形式插入到用户现行程序中。即CPU启动I/O后,继续自身的工作,不必查询I/O的状态。而I/O被启动后,便进入自身的准备阶段,当其准备就绪时,向CPU提出中断请求,此时若满足条件,CPU暂停现行程序,转入该设备的中断服务程序,在服务程序中实现数据的传送。
在DMA方式中有没有中断请求?为什么?
在DMA方式中有中断请求。虽然DMA方式不靠中断请求传送信息,在主存和I/O接口之间有直接数据通路,但在一组数据传送完毕时,仍需向CPU提出中断请求,报告传送结束。此时CPU将中断现行程序,去做一些DMA结束处理工作,如测试传送过程是否出错,这种工作DMA接口是无法完成的,只有靠中断服务程序来处理。
程序查询、程序中断和DMA三种方式的综合性能
程序查询 | 程序中断 | DMA | |
---|---|---|---|
数据传送 | 依赖软件 | 依赖软件 | 依赖硬件 |
传送数据的基本单位 | 字 | 字 | 块 |
并行性 | CPU与I/O串行 | CPU与I/O并行 传输与主程序串行 |
CPU与I/O并行 传输与主程序并行 |
主动性 | CPU | 设备 | 设备 |
传输速度 | 慢 | 慢 | 快 |
经济性 | 费用低 | 介于查询和DMA之间 | 费用高 |
应用对象 | 低速 | 较低 | 高速成批传输 |