【正确答案】应该由用户层I/O完成。
【答案解析】首先我们来看这些功能是不是应该由操作系统来完成。操作系统是一个代码相对稳定的软件,它很少发生代码的变化。如果(1)由操作系统完成,那么操作系统就必须记录逻辑块和磁盘细节的映射,操作系统代码就会急剧膨胀,而且对新型介质的支持也会引起代码的变动。如果(2)也由操作系统完成,那么操作系统需要记录不同生产厂商的不同数据,而且后续新厂商和新产品也无法得到支持。 因为(1)和(2)都与具体的磁盘类型有关,因此为了能够让操作系统尽可能多地支持各种不同型号的设备,(1)和(2)应该由厂商所编写的驱动程序完成。 至于(4)应该由用户来完成,因为只有用户知道将二进制整数转换为ASCII码的格式(使用二进制还是十进制,有没有特别的分隔符,等等)。 因为(3)涉及安全问题,所以应该由操作系统完成。
【正确答案】使用缓冲的主要原因是因为主存带宽一般都远远高于I/O设备的带宽,主存与CPU之间的带宽差小于CPU与I/O设备之间的带宽差,因此使用缓存可以改善CPU与I/O设备之间的速度不匹配的矛盾。 但是这种改善是以减少I/O次数为基础的,如果缓存命中率低,那么管理缓存所带来的开销可能比缓存得到的收益还要低,此时CPU与I/O设备的带宽就受到了损失。
【答案解析】(1)个人计算机上视频和音频播放器就是一个典型的例子。因为这些文件都是顺序访问的,缓存命中率永远为0,此时缓存是损害CPU与I/O带宽的主要原因。 (2)高速网络适配器是另一个例子。目前的网络适配器带宽已经达到了Gb级别,几乎与CPU带宽相当,但是又高于主存带宽,由于不存在CPU与I/O设备之间的速度不匹配的矛盾,因此内存访问成为瓶颈。 (3)为了解决视频和音频等多媒体数据的处理,现代操作系统都提供了无缓冲(或者称“直接”)的I/O方式。