操作系统 CPU与I/O设备

这是一道操作系统的题
如果 CPU 在 I/O 完成之前多次忙于等待的循环,轮询 I/O 的完成可能会浪
费大量的 CPU 周期。但如果 I/O 设备已经准备好,轮询的效率 要比中断的效率
更高。描述一种混合策略,结合轮询、休眠和中断为 I/O 设备服务。对于这三种
策略中的每一种(纯轮询、纯中断、 混合),描述一种计算环境,在这种环境中,
该策略比其他任何一种都更有效率

急! 本人操作系统学的不太好,希望能说的详细一些,越详细越好

简单来说,轮询就是把目前运作的 I/O 设备都查一次,而中断是等完成的 I/O 设备来叫你。轮询操作的浪费,主要出于 CPU 可能会询问太多暂未完成 I/O 的设备,也就是 Miss 太多;中断操作的消耗,在于中断请求(IRQ)发到计算机后,计算机需要更换上下文来改变任务。

这里可以简单的提出一个混合策略,即 CPU 没事的时候都在休眠,接到中断请求后,对当前的所有 I/O 设备进行轮询。

从纯轮询的角度而言,如果 I/O 设备完成的速度非常快,而且 I/O 设备比较少,那么直接选择轮询等待,而不是之后等待中断上下文切换会更加有效。而从纯中断的角度而言,若 I/O 设备较多,且 I/O 完成的顺序不固定,时间波动幅度大或者耗时长,那么中断会是很好的选择。至于上面提到的混合策略,个人愚见认为,在 I/O 请求比较容易同时完成的情况下,会占有优势。

一个混合的方法可以根据I/O操作等待的长度在轮询和中断之间切换。例如,我们可以轮询并循环N次,如果设备在N+1时仍然很忙,我们可以设置一个中断并睡眠。这种方法可以避免长时间的忙碌等待周期。这种方法最适合于非常长或非常短的忙碌时间。如果I/O在N+T时完成(其中T是一个小的周期数),由于轮询加上设置和捕捉中断的开销,它的效率会很低。
纯粹的轮询在很短的等待时间内是最好的。
中断在已知的长等待时间下是最好的。