假设一个主频为1GHz、CPI为5的CPU需要从某个成块传送的I/O设备读取1000B的数据到主存缓冲区中,该I/O设备一旦启动即按50KB/s的数据传输率向主机传送1000B数据,每个字节的读取、处理并存入内存缓冲区需要1000个时钟周期,则以下4种方式下,在1000B的读取过程中,CPU用在该设备的I/O操作上的时间分别为多少?占整个CPU时间的百分比分别是多少?
问答题
采用定时查询方式,每次处理一个字节,一次状态查询至少需要60个时钟周期。
【正确答案】正确答案:主频为1GHz,所以时钟周期为1/1GHz=1ns。因为每个字节的读取、处理并存入内存缓冲区需要1000个时钟周期,所以,对于像程序查询和中断等用软件实现输入/输出的方式,CPU为每个字节传送所用的时间至少为1000×1ns=1000ns=1μs。在50kB/s的数据传输率下,设备每隔1B/50kB/s=20μs=20000ns准备好一个字节,因而读取1000B的时间为1000×20μs=20ms。 定时查询方式下的I/O过程如图7-12所示。用户可以设置每隔20000ns查询一次,这样使得查询程序的开销达到最小,即第一次读取状态时就可能会发现就绪,然后用1000个时钟周期进行相应处理,因此,对于每个字节的传送,CPU所用时钟周期数为60+1000=1060。因此,在1000B的读取过程中,CPU用在该设备的I/O操作上的时间至少为1000×1060×1ns=1.060ms,占整个CPU时间的百分比至少为1.060/20=5.3%。

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

【答案解析】
问答题
采用中断I/O方式,外设每准备好一个字节发送一次中断请求。每次中断响应需要2个时钟周期,中断服务程序的执行需要1200个时钟周期。
【正确答案】正确答案:中断方式下的I/O过程如图7-14所示。中断方式下,外设每准备好一个字节请求一次中断,每次中断CPU所用时钟周期数为2+1200=1202,因此CPU用在该设备的I/O操作上的时间为1000×1202×1ns=1.202ms,占整个CPU时间的百分比至少为1.202/20=6.01%。

【答案解析】
问答题
采用周期挪用DMA方式,每挪用一次主存周期处理一个字节,一次DMA传送完成1000B的传送,DMA初始化和后处理的时间为2000个时钟周期,CPU和DMA之间没有访存冲突。
【正确答案】正确答案:DMA方式下,由于CPU和DMA没有访存冲突,所以不需考虑由于DMA而影响到CPU执行其他程序。因此,传送1000B CPU所用的时钟周期数就是2000,在1000B的读取过程中,CPU用在该设备的I/O操作上的时间为2000×1ns=2μs,占整个CPU时间的百分比为2/(1000×20)=0.01%。
【答案解析】
问答题
如果设备的速度提高到5MB/s,则上述4种方式中,哪些是不可行的?为什么?对于可行的方式,计算出CPU在该设备I/O操作上所用的时间占整个CPU时间的百分比。
【正确答案】正确答案:若设备数据传输率为5MB/s,则外设传输1000B所用时间为1000B/(5×10
6
B/s)=200us。 对于定时查询和独占查询方式,传送1000B CPU所用时间至少为1000×(60+1000)×1ns=1060μs;对于中断方式,传送1000B CPU所用时间为1000×(2+1 200)×1ns=1 202μs。上述3种方式下,CPU所用的时间都比设备所用时间长得多,即设备的传输比CPU的处理快得多,因而发生数据丢失。因此,这3种方式都不能用于该设备的I/O操作。对于DMA方式,传送1000B CPU所用时间为2000×1ns=2μs,占整个CPU时间的百分比为2/200=1%。这说明可以使用DMA方式,不过由于外设传输速度加快,使得CPU频繁进行DMA预处理和后处理,因而CPU的开销从0.01%上升到了1%。中断方式的计算,可以先求出1s内该外设请求的中断次数为1/(1B/50kB)=50k,然后得到1s内CPU用于数据I/O的时钟周期数为50k×(2+1200)=6.01×10
7
,因此在该设备传输过程中,CPU用于该设备I/O操作的时间占整个CPU时间的百分比为6.01×10
7
/1G=6.01%。
【答案解析】