cztqwan
2017-06-19
现代操作系统(第三版)习题答案
cztqwan
2017-06-19
(部分内容来源于网络,转载请注明出处)
cztqwan
2017-06-19
目录
第一章 绪论................................................................................................................. 1
第二章 进程与线程..................................................................................................... 8
第三章 存储管理....................................................................................................... 21
第四章 文件系统....................................................................................................... 32
第五章 输入/输出...................................................................................................... 42
第六章 死锁............................................................................................................... 55
第七章 多媒体操作系统........................................................................................... 65
第八章 多处理机系统............................................................................................... 76
第九章 安全............................................................................................................... 88
第十章 实例研究 1:Linux.....................................................................................100
第十一章 实例研究 2:Windows Vista.................................................................. 110
第十二章 实例研究 3:Symbian 操作系统........................................................... 110
第十三章 操作系统设计..........................................................................................110
cztqwan
2017-06-19
第一章 绪论
1、什么是多道程序设计? 答:多道程序设计技术是指在内存同时放若于道程
序,使它们在系统中并发执行, 共享系统中的各种资源。当一道程序暂停执行
时,CPU 立即转去执行另一道程 序。
2、什么是 SPOOLing? 读者是否认为将来的高级个人计算机会把 SPOOLing 作
为标准功能?
答:(假脱机技术)输入 SPOOLing 是作业中的读入技术,例如,从卡片在磁盘,
这样当当前执行的进程完成时,将等候 CPU。输出 SPOOLing 在打印之前首先
复制打印文件, 而非直接打印。在个人计算机上的输入 SPOOLing 很少,但是
输出 SPOOLing 非常普遍。
3、在早期计算机中,每个字节的读写直接由 CPU 处理(即没有 DMA),对于多
道程序而言这种组织方式有什么含义?
答:多道程序的主要原因是当等候 I/O 完成时 CPU 有事可做。如果没有 DMA。
I/O 操作时 CPU 被完全占有,因此,多道程序无利可图(至少在 CPU 利用方面)。
无论程序作多少 I/O 操作,CPU 都是 100%的忙碌。当然,这里假定主要的延迟
是数据复制时的等待。如果 I/O 很慢的话,CPU 可以做其它工作。
4、系列计算机的思想在 20 世纪 60 年代由 IBM 引入进 System/360 大型机。现
在这种思想已经消亡了还是继续活跃着?
答:它依然存在。例如,Intel 以各种各样的不同的属性包括速度和能力消耗来生
产 Pentium I,II,III 和 4。所有这些机器的体系结构都是兼容的,仅仅是价格上
的不同,这些都是家族思想的本质。
5、缓慢采用 GUI 的一个原因是支持它的硬件的成本(高昂)。为了支持 25 行 80
列字符的单色文本屏幕应该需要多少视颊 RAM? 对于 1024x768 像素 24 位色彩
位图需要多少视频 RAM? 在 1980 年($5/KB)这些 RAM 的成本是多少?现在它的
成本是多少?
答:25*80 字符的单色文本屏幕需要 2000 字节的缓冲器。1024*768 像素 24 位颜
色的位图需要 2359296 字节。1980 年这两种选择将分别地耗费$10 和$11520。而
对于当前的价格,将少于$1/MB。
6、在建立一个操作系统时有几个设计目的,例如资源利用、及时性、健壮性等。
请列举两个可能互相矛盾的设计目的。 答:考虑公平和实时。公平要求每一个
进程都以公平的方式分配资源,没有进程能得到超过公平份额的资源。另一方
面,实时要求使进程在规定的时间内执行完毕的基础上分配资源。一个实时的进
程可能会得到一个不成比例的资源份额。(非
第 1 页
cztqwan
2017-06-19
标准答案)
7、下面的哪一条指令只能在内核态中使用?
a)禁止所有的中断。
b)读日期-时间时钟。 c)
设晋日期-时间时钟。
d)改变存储器映像。
答:选择(a)、(c)、(d)应该被限制在内核模式。
8、考虑一个有两个 CPU 的系统,并且每一个 CPU 有两个线程(超线程)。假设
有三个程序 P0,P1,P2,分別以运行时间 5ms,10ms,20ms 开始。运行这些程
序需要多少时间?假设这三个程序都是 100% 限于 CPU,在运行时无阻塞,并
且一旦设定就不改变 CPU。 答:这些程序的运行时间因程序的组合的不同而不
同,一共有以下 4 种情况:
1)(P0,P1) and P2 => (5ms + 10ms) and 20ms => 20ms
2)(P0,P2) and P1 => (5ms + 20ms) and 10ms => 25ms
3)(P1,P2) and P0 => (10ms + 20ms) and 50ms => 30ms
4)(P0,P1,P2) => (5ms + 10ms + 20ms) => 35ms
9、一台计算机有一个四级流水线,每一级都花费相同的时间执行其工作,即 1ns。
这台机器每秒可执行多少条指令? 答:从管道中每纳秒出现一条指令。意味着
该机器每秒执行十亿条指令。它对于管道有多少个阶段全然不予理睬,即使是
10-阶段管道,每阶段 1ns,也将执行 对每秒十亿条指令。因为无论那种情况,
管道末端输出的指令数都是一样的。
10、假设一个计算机系统有高速缓存、内存(RAM)以及磁盘,操作系统用虚拟内
存。读取缓存中的一个词需要 2ns,RAM 需要 10ns,磁盘需要 10ms。如果缓存
的命中率是 95%,内存的是(缓存失效时)99%,读取一个词的平均时间是多少?
答:平均访问时间= 2ns * 0.95 + 10ns *0.99 *(1-0.95) + 10ms * (1-0.99) *(1-0.95) =
5002.395ns
11、一位校对人员注意到在一部将要出版的操作系统教科书手稿中有一个多次出
现的拼写错误。这本书大致有 700 页。每页 50 行,一行 80 个字符。若把文稿用
电子扫描,那么,主副本进入图 1-9 中的每个存储系统的层次要花费多少时间?
对于内存储方式,考虑所给定的存取时间是每次一个字符,对于磁盘设备,假定
存取时间是每次一个 1024字符的盘块,而对于磁带,假设给定开始时间后的存
取时间和磁盘存取时间相同。
第 2 页
cztqwan
2017-06-19
答:原稿包含 80*50*700 = 2800000 字符。当然,这不可能放入任何目前的 CPU
中,但是如果可能的话,在寄存器中只需 2.8ms,在 Cache 中需要 5.6ms,在内
存中需要 28ms,整本书大约有 2700 个 1024 字节的数据块,因此从磁盘扫描大
约为 27 秒,从磁带扫描则需 2 分钟 7 秒。当然,这些时间仅为读取数据的时间。
处理和重写数据将增加时间。
12、在用户程序进行一个系统调用,以读写磁盘文件时,该程序提供指示说明了
所需要的文件,一个指向数据缓冲区的指针以及计数。然后,控制权转给操作系
统,它调用相关的驱动程序。假设驱动程序启动磁盘并且直到中断发生才终止。
在从磁盘读的情况下,很明显,调用者会被阻塞(因为文件中没有数据)。在向
磁盘写时会发生什么情况?需要把调用者阻塞一直等到磁盘传送完成为止吗?
答:也许。如果调用者取回控制,并且在最终发生写操作时立即重写数据,将会
写入错误的数据。然而,如果驱动程序在返回之前首先复制将数据复制到一个专
用的缓冲器,那么调用者可以立即继续执行。另一个可能性是允许调用者继续,
并且在缓冲器可以再用时给它一个信号,但是这需要很高的技巧,而且容易出错。
13、什么是陷阱指令?在操作系统中解释它的用途。 答:陷阱指令将一个处理
器的执行模式从用户模式切换到内核模式。该指令允许用户程序调用操作系统
内核中的函数。
14、陷阱和中断的主要差别是什么? 答:陷阱由程序造成的,并且与它同步。
如果程序一而再地被运行,陷阱将总在指令流中相同位置的精确发生。而中断则
是由外部事件和其时钟造成的,不具有重复性。
15、在分时系统中为什么需要进程表?在只有一个进程存在的个人计算机系统中,
该进程控制整个机器直到进程结束,这种机器也需要进程表吗? 答:进程表是为
了存储当前被挂起、甚或是被延迟和阻塞的进程状态。在单一进程的系统中是不
需要,因为单一进程从不挂起。
16、说明有没有理由要在一个非空的目录中安装一个文件系统?如果要这样做,
如何做? 答:装配文件系统将使得装配目录中已有的任何文件都不可访问,因此
装配点通常都是空的。然而,系统管理人员可能需要将某些位于被装配目录中的
非常重要
第 3 页
cztqwan
2017-06-19
的文件复制到装配点,使得他们在进行设备检查或修理时,可以在紧急事件中的
普通路径上找到这些文件。
17、在一个操作系统中系统调用的目的是什么? 答:系统调用允许用户进程在
内核中访问和执行操作系统功能。用户程序使用系统调用操作系统服务。
18、对于下列系统调用 ,给出引起失败的条件:fork、exec 以及 unlink。 答:
如果进程表中没有空闲的槽(或者没有内存和交换空间),fork 将失败。如果所
给的文件名不存在,或者不是一个有效的可执行文件,exec 将失败。如果将要解
除链接的文件不存在,或者调用 unlink 的进程没有权限,则 unlink 将失败。
19、在 count = write(fd, buffer, nbytes);调用中,能在 count 中而不是 nbytes 中返
回值吗?如果能,为什么?
答:如果 fd 不正确,调用失败,将返回 1。同样,如果磁盘满,调用也失败,要
求写入的字节数和实际写入的字节数可能不等。在正确终止时,总是返回 nbytes。
20、有一个文件,其文件描述符是 fd,内含下列字节序列:3,1,4,1,5,9,
2,6,5,3,5。 有如下
系统调用:
lseek(fd, 3, SEEK_SET);
read(fd, &buffer, 4);
其中 lseek 调用寻找文件中的字节 3。在读操作完成之后,buffer中的内容是什么?
答:1, 5, 9, 2
21、假设一个 10MB 的文件在磁盘连续扇区的同一个轨道上(轨道号:50)。 磁盘
的磁头臂此时位于第 100 号轨道。要想从磁盘上找回这个文件,需要多长时间?
假设磁头臂从一个柱面移动到下一个柱面需要 1ms,当文件的开始部分存储在的扇
区旋转到磁头下需要 5ms,并且读的速率是 100MB/s。 答:找到文件需要的时间
=1 * 50 ms (移动到 50 轨道号的时间)
+ 5 ms (旋转到文件开始部分存储在的扇区的时间)
+ 10/100 * 1000 ms (读取 10MB 的时间)
= 155 ms
22、块特殊文件和字符特殊文件的基本差别是什么? 答:块特殊文件包含被编
号的块,每一块都可以独立地读取或者写入。而且可以定位于任何块,并且开
始读出或写入。这些对于字符特殊文件是不可能的。
23、在图 1-7 的例子中库调用称为 read,而系统调用自身称为 read,这两者都有
相问的名字是正常的吗? 如果不是,哪一个更重要?
第 4 页
cztqwan
2017-06-19
答:系统调用实际上并没有名称,除了在文件中这样描述之外。当库例程 read
陷入内核时,它将系统调用号码放入寄存器或者堆栈中。该号码通常用于一张表
的索引。这里确实没有使用任何名称。而另一方面,库例程的名称是十分重要的,
因为它将用于程序中。
24、在分布式系统中,客户机-服务器模式很普遍。这种模式能用在单个计算机
的系统中吗?
答:是的,尤其当系统内核是消息传递系统时。
25、对程序员而言,系统调用就像对其他库过程的调用一样。有无必要让程序员
了解哪一个库过程导致了系统调用?在什么情形下,为什么? 答:就程序逻辑
而言,库例程调用哪个系统调用是没有关系的。但是,如果需要考虑性能问题,
无需系统调用就可以完成的任务将使程序运行更快。所有的系统调用都会导致用
户环境和内核环境的切换开销。更进一步,在多用户系统中,在系统调用完成之
前,操作系统可能调度到其他的进程,这将使得调用过程的处理更加迟缓。
26、图 1-23 说明有一批 UNIX 的系统调用没有与之相等价的 Win32 API,对于所
列出的每一个没有 Win32 等价的调用, 若程序员要把 一个 UNIX 程序转换到
Windows 下运行,会有什么后果?
第 5 页
cztqwan
2017-06-19
答:某些 UNIX 调用没有相应的 Win32 API:
Link:Win32 程序不能给文件另外一个名称,或者使某个文件出现在多个目录中。
同时,试图创建链接可以便于测试,并且在文件上加锁。
Mount 和 umount: Wmdows 程序不能创建关于标准的路径的假定命名,因为具有
多个磁盘驱动器的系统上路径名,其驱动器部分是不同的。
Chmod: Windows 程序员不得不假定所有的用户都能访问每个文件。
Kill: Windows 程序员不能 kill 行为失常的程序。
27、可移植的操作系统是能从一个系统体系结构到另一个体系结构的移动不需要
任何修改的操作系统。请解释为什么建立一个完全可移植性的操作系统是不可行
的。描述一下在设计一个高度可移植的操作系统时你设计的高级的两层是什么样
的。 答:每一个系统体系结构都有它自己可以执行的一套指令。因此,奔腾不
能执行SPARC 程序或者 SPARC 无法执行奔腾程序。另外,不同的架构使用不同
的总线 架构(如 VME 总线,ISA,PCI,MCA,SBU,…)以及 CPU 的字长
(通常是 32 或 64 位)。由于硬件上的这些差异,建立一个完全可移植的操作
系统是不可 行的。一个高度可移植的操作系统将包括两个高级层——一个机器
相关层和一个机器独立层。机器相关层屏蔽硬件的细节,必须为每一个架构单独
实现,该层提供了一个统一的接口。机器独立层只需要实现一次。为了实现高度
可移植,机器相关层应尽可能小。(非标准答案)
28、请解释在建立基于微内核的操作系统时策略与机制的分离带来的好处。
答:策略和机制的分离,使操作系统的设计人员在内核中实现了少量的基本原语。
第 6 页