【正确答案】正确答案:主频为1GHz,所以时钟周期为l/lGHz=lns。因为每个字节的读取、处理并存入内存缓冲区需要1 000个时钟周期,所以,对于像程序查询和中断等用软件实现输入/输出的方式,CPU为每个字节传送所用的时间至少为1 000×1ns=1000ns=1μs。在50kB/s的数据传输率下,设备每隔lB/50kB/s=20μs=20 000ns准备好一个字节,因而读取1 000B的时间为1 000×20μs=20ms。 (1)定时查询方式下的I/O过程如图7—12所示。用户可以设置每隔20 000ns查询一次,这样使得查询程序的开销达到最小,即第一次读取状态时就可能会发现就绪,然后用1 000个时钟周期进行相应处理,因此,对于每个字节的传送,CPU所用时钟周期数为60+1 000=1 060。因此,在1 000B的读取过程中,CPU用在该设备的I/O操作上的时间至少为1 000×1 060×1ns=1.060ms,占整个CPU时间的百分比至少为1.060/20=5.3%。

(2)独占查询方式下的I/O过程如图7—13所示。启动设备后,CPU就开始查询,因为333 ×60+20=20 000,所以第一个字节传送在第334次读取状态查询时检测到就绪,随后用1 000个时钟周期进行相应的处理,然后继续第二个字节的状态查询,因为40+1 000+316×60=20 000,所以,第二个字节的传送在第316次读取状态查询时检测到就绪,第一个和第二个字节的传送过程如图7—13a所示。每次检测到就绪后,就进行相应的处理,然后周而复始地进行查询,因为(20 000—1 000)/60=316.7,所以,第3 17次状态查询时发现就绪。因为1 000+60×317—20 000=20,所以,每3B可多60个时钟周期,正好进行一次状态查询,因此,在剩下的998B的读取过程中,前996B的传送正好用了996×20 000个时钟周期,如图7—13b所示。最后两个字节的传送过程如图7—13c所示,因为2×(1 000+60×317—20 000)=40,此外,最后一个字节的处理还有1 000个时钟周期,所以最后两个字节总的时间为2×20 000+40+1 000=41 040个时钟周期。 综上所述,CPU用在该设备的I/O操作上的总时间为1 000×20 000ns+1 040×1ns=20.001 04ms~20ms,即在1000B的整个传输过程中,CPU —直为该设备服务,所用时间占整个CPU时间的100%。

(3)中断方式下的I/O过程如图7—14所示。中断方式下,外设每准备好一个字节请求一次中断,每次中断CPU所用时钟周期数为2+1 200=1 202,因此CPU用在该设备的I/O操作上的时间为1 000×1 202×1ns—1.202ms,占整个CPU时间的百分比至少为1.202/20=6.01%。
