问答题
一个软盘的扇区安排采用图(a)所示的形式。这个软盘的每个磁道有8个扇区,每个扇区可以存放512B数据,软盘的旋转速率为300rpm。如果旋转臂已经在合适的位置,那么顺序读完一个磁道上的所有扇区需要多长时间?如果扇区安排使用图(b)和图(c)的形式呢?
【正确答案】旋转延迟为60000÷300=200(ms),假设处理数据的速度为kB/ms。在(a)中读取一个磁道的时间为8×(200÷(512/K))×200(ms);在(b)中为8×(400÷(512/K))×200(ms);在(c)中贝0为8×(600÷(512/K))×200(ms)。
【答案解析】
问答题
某个文件系统管理一个4GB多的磁盘,它可以管理一个大小为4GB的文件,也可以管理一个包含4000个10KB的文件的目录树。但是在测试中,如果顺序读取4GB的大文件,只需要2min,而当遍历4000个10KB的文件时几乎需要运行1h。请分析引起这种性能差别的原因。
【正确答案】顺序读取一个磁盘上仅有的一个文件,几乎没有旋转延迟和寻找时间。而读取多个文件则需要更多的寻找时间和旋转延迟(包括文件块和目录块)。
【答案解析】
问答题
为什么要引入设备独立性?如何实现设备独立性?
【正确答案】引入设备独立性,可使应用程序独立于具体的物理设备。此时,用户用逻辑设备名来申请使用某类物理设备。当系统中有多台该类型的设备时,系统可将其中的任一台分配给请求进程,而不必局限于某一台指定的设备。这样,可显著地改善资源的利用率及可适应性。独立性还可以使用户程序独立于设备的类型。如进行输出时,既可用显示终端,也可以用打印机。有了这种适应性,就可以很方便地进行输入/输出重定向。 为了实现设备独立性,在应用程序中应使用逻辑设备名称来请求使用某类设备。系统中必须设置一张逻辑设备表,用来进行逻辑设备到物理设备的映射,其中每个表目中包含了逻辑设备名、物理设备名和设备驱动程序入口地址等三项。当应用程序用逻辑设备名请求分配I/O设备时,系统必须为它分配相应的物理设备,并在LUT中建立一个表目,以后进程利用该逻辑设备名请求I/O操作时,便可从LUT中得到物理设备名和驱动程序入口地址。
【答案解析】
问答题
Spooling系统由哪几部分组成?以打印机为例说明如何利用Spooling技术实现多个进程对打印机的共享。
【正确答案】Spooling系统由磁盘上的输入井和输出井、内存中的输入缓冲区和输出缓冲区以及输入进程和输出进程构成。 在用Spooling技术共享打印机时,对所有提出输出请求的用户进程,系统接受它们的请求时,并不真正把打印机分配给他们,而是为每个进程做两件事情: (1)由输出进程在输出井中为它申请一空闲缓冲区,并将要打印的数据送入其中。 (2)输出进程再为用户进程申请一张空白的用户打印请求表,并将用户的打印请求填入表中,再将该表挂到打印队列上。 至此,用户进程觉得他的打印过程已经完成,而不必等待真正的慢速的打印过程的完成。当打印机空闲时,输出进程从请求队列首取出一张打印请求表,根据表中的要求将要打印的数据从输出井传送到内存输出缓冲区,再由打印机进行输出打印。打印完后,再处理打印队列中的下一个打印请求表,直至打印队列空。这样,虽然系统中只有1台打印机,但系统并未将它分配给任何进程,而只是为每个提出打印请求的进程在输出井中分配一个存储区(相当于一个逻辑设备),使每个用户进程都觉得自己在独占一台打印机,从而实现了对打印机的共享。
【答案解析】
问答题
如果将某些功能从操作系统内核中搬移到设备控制器,请问会有什么优缺点?
【正确答案】优点:功能中存在的bug不会引起操作系统崩溃;使用专用的硬件和硬编码算法可以提高系统性能;将算法从内核中搬移出去,可以简化内核的设计。 缺点:存在的bug不易消除,需要新的硬件或者新版本的firmware;提高算法性能更加困难;嵌入式的算法可能与用户对设备的使用相冲突,从而可能导致性能退化。
【答案解析】功能实现的层次取决于计算机系统的设计选择。在应用软件、操作系统和硬件系统中存在许多这样的实例。
问答题
Memory—Mapped I/O方式相对于I/O端口方式存在哪些优点?
【正确答案】(1)不需要特殊的指令支持。Memory-Mapped I/O通过一般的访存指令访问设备控制寄存器,而I/O端口方式则需要类似于IN/OUT形式的访问指令,这些指令一般在C和C++等高级语言中无法实现。 (2)无须特殊的保护机制隔离用户进程和I/O。 (3)所有访问存储器的指令均可以访问控制寄存器,便于系统性能优化。 注:(1)I/O端口方式中,计算机系统使用了一个专门的170空间,对设备控制寄存器进行编址,而对I/O空间的访问需要使用特殊的机器指令。例如:IN RO,4指令是指将I/O空间的控制寄存器4的内容读入CPU寄存器R0。 (2)在Memory-Mapped I/O方式中,计算机系统专门使用一段特殊的地址来编址设备控制寄存器,对这些特殊地址的访问就是对设备控制寄存器的访问。 (3)Memory-Mapped I/O方式的缺点:现代计算机CPU都会对存储进行缓存,丢失缓存设备控制寄存器内容是灾难性的。
【答案解析】
问答题
什么是设备无关性(device independence)?
【正确答案】设备无关性一般是指程序可以通过一组统一的操作过程来操作设备,这种操作接口与具体的设备无关。
【答案解析】按照操作系统的设计目标,任何子系统追求的目标应该是“性能”和“方便”。在I/O管理中“方便”一词可以特指为“设备无关性”。 I/O管理的设备无关性是一种透明性问题,任何系统想达到完全的透明性是非常困难的。比如在现代操作系统中为设备操作都提供了“打开”“关闭”“读”“写”等接口,程序员可以使用与文件相同的模式操作设备。这就体现了一种“设备无关性”。 设备无关性的另一种形式是“统一的命名”,在UNIX系统中为所有的设备均在/dev目录下创建了一个设备文件,用户可以向打开一个普通文件一样打开设备。 即使这样,UNIX的设备无关性也不是完全的。为了支持对特殊设备的特殊控制,UNIX提供了ioctl接口,方便程序对设备的控制。比如可以使用ioctl设置串口的波特率、校验位等。 另外在程序设计领域、图形接口设计和文件设计方面也会出现“设备无关性”的术语。文件的设备无关性是指无论文件出现在哪个平台上,这个平台上的软/硬件均可以解释和操作它,比如HTML文件和XML文件等。
问答题
请分别说明阻塞(blocking)和非阻塞(non-blocking)I/O应该使用的基本情形。为什么不可以只实现非阻塞I/O,而且使用非阻塞I/O来实现阻塞I/O?
【正确答案】一般说来,阻塞I/O比较适合于只是等待某个特殊事件的过程。例如磁盘、磁带和键盘的读操作,没有从这些设备中获得足够的信息就无法进行下一个步骤。 倘若I/O来自多个设备源,而且I/O到达的次序是不确定的时候,非阻塞I/O就非常有效。例如,网络服务器需要读取来自网络的多个请求;窗口管理器既可以读取键盘输入又可以获得鼠标输入等等。 如果只实现非阻塞I/O,那么在需要阻塞I/O时应用程序则需“忙”等待。 注:(1)阻塞I/O和非阻塞I/O分别称为同步I/O和异步I/O,它们是操作系统提供给上层应用的两种I/O接口方式。必须与程序控制I/O、中断驱动I/O、DMA I/O等方式区分开来,后者是操作系统与设备之间的接口。 (2)异步I/O通常出现在一些管理程序中,比如web服务器。操作系统的I/O管理程序也通常使用异步I/O,比如copy命令。操作系统利用I/O缓冲和异步I/O使得源设备和目标设备全速运转。 (3)非阻塞对于程序员来说比较复杂,因为程序员必须在I/O发生时进行异步汇聚(asynchronous rendezvous),利用语言特征和操作系统的例程完成I/O与处理机的协调。这也是操作系统提供同步I/O接口的必要性,即它可以简化编程逻辑。
【答案解析】
问答题
在程序直接控制方式中,主机与设备之间存在一种握手协议。设备控制通过status寄存器的busy位指示其忙闲,而主机通过置command寄存器的command-ready位指示其I/O意愿。有没有可能只使用一位进行握手?为什么?
【正确答案】使用一位是不够的。 如果没有busy位,那么主机无法知道发送控制命令的时机,一味发送控制命令,要么会丢失命令,要么就会重复执行命令。 如果没有command-ready位,控制器就无法知道执行命令的时机,在不恰当的时机执行命令,则会执行错误命令。 注:这是一种典型的I/O控制协议。
【答案解析】
问答题
一个系统通常使用中断驱动I/O来管理一个串口,为什么使用程序直接控制I/O来管理终端集线器(一种可以有多个串口、连接多个终端的串口设备)?
【正确答案】这是因为程序直接控制I/O有时比中断驱动I/O方法的效率要高。特别是在I/O频繁发生,但是每次I/O比较短暂的时候。此时如果使用中断驱动I/O的方式,那么中断会频繁发生,大量的CPU时间浪费在中断程序处理上,引起系统效率的降低。 因为终端集线器连接了许多终端,每个终端上的用户会频繁I/O,但是每次终端I/O的数据量很小,正好与上述情况吻合,因此适合于使用程序直接控制的方式。
【答案解析】不同的I/O控制方式之间的优劣不是绝对地,它们均会在不同的应用场景取得良好的性能效果。总体上来说,如果I/O频繁发生,而且每次I/O的时间较短,则适合使用程序直接控制I/O;如果每次I/O时间较长,则适合使用DMA方式;如果I/O发生不确定,则适合使用中断驱动I/O。
问答题
UNIX利用内核共享的数据结构来协调内核中的I/O部件,而Windows NT在I/O部件之间使用面向对象消息传递。请比较它们的优劣。
【正确答案】UNIX系统相对于Windows NT的优势: ①效率高,数据传递开销小,数据移动的数量小。 ②实现快速,不需要与其他内核部件之间的协调。 ③简单,数据不易丢失。 但是也存在缺点: ①数据缺乏保护,部件的变化可能会引起副作用,难以调试; ②难以实现新的I/O方法,一种新的I/O方法往往需要新的数据结构,数据结构的维护是比较困难的; ③I/O子系统的设计复杂,充满了数据结构、访问例程和锁机制,难以理解,难以维护。
【答案解析】
问答题
考虑在一个单用户PC上的下述I/O情形:
(1)使用鼠标作为图形用户接口。
(2)在一个多任务操作系统上的磁带驱动器。
(3)包含用户文件的磁盘驱动器。
(4)通过直接总线连接的图形卡,可以通过内存映射I/O进行访问。
对于上述I/O,操作系统的设计应该怎样使用缓冲、高速缓存和Spooling等技术?要使用程序控制I/O或者中断I/O吗?为什么?
【正确答案】(1)鼠标:缓冲是需要的,可以在高优先级操作发生时记录鼠标的移动。但是Spooling和高速缓存是不合适的。最合适的I/O方式是中断驱动I/O。 (2)磁带驱动器:缓冲可以管理磁带驱动器与I/O源(或目标)之间的吞吐能力差别。缓存可以用于维持磁带驱动器的数据,减少I/O次数。Spooling可以在多用户并发访问(磁带驱动器可能为多个PC或者其他主机服务)时管理并发I/O。中断驱动I/O可能能够获得最佳性能。 (3)磁盘驱动器:缓冲可以维持用户空间与磁盘间传输的数据以减少I/O次数。高速缓存可以用于维持磁盘数据以减少机械运动和磁记录读/写,也可以提高I/O性能。由于磁盘是共享访问的设备,因此没有必要使用Spooling进行虚拟化。由于磁盘带宽相对较低,因此中断驱动I/O比较适宜。 (4)图形卡:需要使用缓冲来控制多重访问(在显示当前图像时,使用双缓冲,准备下一幅图像),以提高显示性能。因为图形卡设备的数据率较高,所以Spooling和高速缓存是没有必要的。程序控制或者中断I/O至少用于输入和I/O完成状态的检测,在内存映射I/O阶段是没有必要的。 注:(1)缓冲(buffering)和高速缓存(caching)虽然都可以使用主存来实现,但是在I/O管理中存在一些细小的差异。缓存专指操作系统或者设备驱动程序为了减少I/O次数而在存储空间开辟的一片区域。而缓存是指硬件系统为了提高性能使用的特殊快速存储器,例如CPU的一级和二级缓存可以减少访存次数,磁盘控制器缓存可以减少磁记录读/写次数。 (2)程序直接控制的I/O方式在现代操作系统中通常称为轮询(polling)I/O方式,专指CPU能够通过查询设备状态来决定I/O指令的一种方式。
【答案解析】