问答题 考虑以下单用户PC上的下列I/O操作:
问答题 图形用户界面下使用鼠标。
【正确答案】在鼠标移动时,如果有高优先级的操作产生,为了记录鼠标活动的情况,必须使用缓冲技术。另外,假脱机技术和Caching技术不是很必要,而应采用中断驱动I/O方式。
【答案解析】
问答题 在多任务操作系统下的磁带驱动器(假设没有设备预分配)。
【正确答案】由于磁带驱动器和目标或源I/O设备间的吞吐量不同,必须采用缓冲技术;为了能对存储在磁带上的数据进行快速访问,必须采用Caching技术;当有多个用户需要对磁带进行读或写的时候,假脱机技术也是必须采用的;为了取得最好的性能,应该采用中断驱动I/O方式。
【答案解析】
问答题 包含用户文件的磁盘驱动器。
【正确答案】为了能使数据从用户作业空间传送到磁盘或从磁盘传送到用户作业空间,必须采用缓冲技术;同样的道理,也必须采用Caching技术。由于磁盘属于共享设备,故没必要采用假脱机技术,最好采用中断驱动I/O方式。
【答案解析】
问答题 使用存储器映射I/O,直接和总线相连的图形卡。 在操作系统中使用缓冲(Buffer)技术、假脱机技术、缓存(Cache)技术,或者它们的组合来实现上述操作,使用时使用轮询I/O还是中断I/O?为什么?
【正确答案】为了便于多幅图形的存取及提高性能,缓冲技术是可以采用的,特别是在显示当前一幅图形时又要取得下一幅图形时,应采用双缓冲技术。基于存储器映射及直接和总线相连的图形卡是快速和共享设备,所以没必要采用假脱机技术和Caching技术。轮询I/O和中断I/O只对输入和I/O是否完成的检测有用,而对于采用存储器映射的设备不必用到上述两种I/O方式。 注意: 缓存(Cache)是把读取过的数据保存起来,重新读取时若命中(找到需要的数据)就不必去读硬盘了,当没有命中时才去读硬盘。其中的数据会根据读取频率进行组织,把最频繁读取的内容放在最容易找到的位置,把不再读的内容不断往后排,直至从中删除。 缓存实际并不是缓冲文件的,而是缓冲块的,块是磁盘I/O操作的最小单元(在Linux中,通常是1KB)。这样,目录、超级块、其他文件系统的管理数据以及非文件系统的磁盘数据都可以被缓冲了。 缓冲(Buffers)是根据磁盘的读写设计的,把分散的写操作集中进行,减少磁盘碎片和硬盘的反复寻道,从而提高系统性能。 两者都是RAM中的数据。简单来说,Buffer是将要被写入磁盘的,而Cache是被从磁盘中读出来的。 Buffer是由各种进程分配的,由进程和系统一起管理,被用在输入队列等方面。一个简单的例子,如某个进程要求有多个字段读入,在所有字段被读入完整之前,进程把先前读入的字段放在Buffer中保存。 Cache经常被用在磁盘的I/O请求上,如果有多个进程都要访问某个文件,于是该文件便被做成Cache以方便下次被访问,这样可以提高系统性能。 综上所述,可以理解为Cache由系统管理,buffer由进程和系统一起管理。
【答案解析】
问答题 有哪些途径可以提高磁盘I/O的速度?
【正确答案】提高磁盘I/O速度主要有以下几种方法: (1)磁盘高速缓存 磁盘高速缓存是在内存中为磁盘块设置一个缓冲区,其中存放磁盘中某些盘块的副本。当有一个进程访问某个盘块中的数据时,首先检查该盘块是否在高速缓冲中。如果在,则直接从高速缓存中取数据;否则,先从磁盘中将所取数据读入内存,然后再将数据送入高速缓存。 (2)提前读 用户(进程)对文件进行访问时,经常采用顺序访问方式,即顺序地访问文件各盘块的数据。在这种情况下,在读当前盘块时可以预知下一次要读的盘块。因此,可以采取预先读方式,即在读当前盘块的同时,还要求将下一个盘块(提前读的块)中的数据也读入缓冲区。这样,当下一次要读该盘块中的数据时,由于该数据已被提前读入缓冲区,因而此时便可直接从缓冲区中取得下一盘块的数据,而不需再去启动磁盘I/O,从而大大减少了读数据的时间。 (3)延迟写 延迟写是指在缓冲区A中的数据本应立即写回磁盘,但考虑到该缓冲区中的数据在不久之后可能还会再被本进程或其他进程访问(共享资源),因而并不立即将该缓冲区A中的数据写入磁盘,而是将它挂在空闲缓冲区队列的末尾。随着空闲缓冲区的使用,缓冲区也缓缓往前移动,直至移到空闲缓冲队列之首。当再有进程申请到该缓冲区时,才将该缓冲区中的数据写入磁盘,而把该缓冲区作为空闲缓冲区分配出去。当该缓冲区A仍在队列中时,任何访问该数据的进程,都可直接读出其中的数据而不必去访问磁盘。 (4)优化物理块的分布 另一种提高磁盘I/O速度的重要措施是优化文件物理块的分布,使磁头的移动距离最小。虽然链接分配和索引分配方式都允许将一个文件的物理块分散在磁盘的任意位置,但如果将一个文件的多个物理块安排得过于分散,会增加磁头的移动距离。 (5)虚拟盘 所谓虚拟盘是指利用内存空间去仿真磁盘,又称为RAM盘。该盘的设备驱动程序也可以接受所有标准的磁盘操作,但这些操作的执行,不是在磁盘上而是在内存中。这些对用户都是透明的。换言之,用户并不会发现这与真正的磁盘操作有什么不同,而仅仅是略微快一些而已。虚拟盘是易失性存储器,故一旦系统或电源发生故障,或系统再启动时,原来保存在虚拟盘中的数据将会丢失。因此,虚拟盘通常用于存放临时文件,如编译程序所产生的目标程序等。虚拟盘与磁盘高速缓存的主要区别在于:虚拟盘中的内容完全由用户控制,而高速磁盘缓存中的内容则是由OS控制的。 (6)廉价磁盘冗余阵列(Redundant Array of Inexpensive Disk,RAID) 它是利用一台磁盘阵列控制器来统一管理和控制一组(几台到几十台)磁盘驱动器,组成一个高度可靠的、快速的大容量磁盘系统。
【答案解析】
问答题 试给出两种I/O调度算法,并说明为什么I/O调度中不能采用时间片轮转法。
【正确答案】先来先服务和优先级调度算法。 由于I/O设备的数据传输速率与CPU及系统总线相比非常低,而且I/O设备的启动和切换的时间开销很大,若采用时间片轮转算法,使得时间片的大小很难确定:时间片过小,会把时间都花费在设备的启动和切换上,导致每个设备都不能正常地运行;时间片过长,则演变成FCFS,失去时间片轮转的意义。对于像打印机这样的设备,轮转算法将导致文档交叉输出。所以I/O调度中,一般不采用时间片轮转调度。
【答案解析】
问答题 为什么引入缓冲技术?支持多用户的系统中,实现键盘驱动程序需要字符缓冲技术,请给出两种实现字符缓冲技术的方法。
【正确答案】1)引入缓冲技术的目的是缓解CPU和低速I/O设备速度不匹配的矛盾。 2)一种是采用专门的硬件缓冲区,如I/O控制器中的数据缓冲器。硬件缓冲区配置在设备中,具有专门的用途,对处理器透明,不需要操作系统的直接管理,大部分输入/输出设备都有自己的硬件缓冲(键盘、显卡和声卡)。 另一种是软件缓冲区,是在内存中划出一个具有n个单元的专用缓冲区,以便存放输入/输出的数据,软件缓冲区是为了弥补硬件缓冲区的不足,其中很重要的是输入/输出缓冲,用来改善处理器和I/O设备之间速度不匹配的矛盾,具体的实现有单缓冲、双缓冲、多缓冲及缓冲池等技术,这些缓冲区由操作系统负责管理、调度使用和保护访问。
【答案解析】