现代操作系统(原书第四版)课后题答案 —— 第一章 引论

本章有三个TODO

1. 操作系统的两大主要作用是什么?

向用户程序提供抽象,如文件;管理计算机资源。

2. 在1.4节中描述了9中不同类型的操作系统,列举每种操作系统的应⽤(每种系统⼀种应⽤)。

九种类型的操作系统分别是:

  • 大型机操作系统:主要提供三类服务:批处理,事务处理,分时。
  • 服务器操作系统:通过网络同时为若干个用户服务,并且允许用户共享硬件和软件资源。
  • 多处理器操作系统:适用于拥有多个CPU的计算机。
  • 个人计算机操作系统
  • 掌上计算机操作系统
  • 嵌入式操作系统
  • 传感器节点操作系统
  • (硬/软)实时操作系统
  • 智能卡操作系统
3. 分时系统和多道程序系统的区别是什么?

多道程序系统主要是为了解决因 I/O 操作造成的 CPU 算力的浪费,虽然它在宏观上可以同时运行多个程序,但无法保证每个程序都能被及时处理。分时系统会将CPU分配给若干个需要计算的作业轮流使用,因此可为多个终端提供快速的交互式服务。

4. 为了使用高速缓存,主存被划分为若干 cache 行,通常每行长 32 或 64 字节。每次缓存一整个 cache 行。每次缓存一整行而不是一个字节或一个字,这样做的优点是什么?

经验证据表明,存储器访问表现出引⽤局部原则,即如果读取某⼀个位置,则接下来访问附近位置的概率⾮常⾼,尤其是紧随其后的内存位置。 因此,通过缓存整个缓存⾏,接下来缓存命中的概率会增加。 此外,现代的硬件可以将32或64字节块整个传输到⾼速缓存⾏,因此一次读取64字节要远快于读取单个字节 64 次。

5. 在早期计算机中,每个字节的读写直接由 CPU 处理(即没有 DMA)。对于多道程序而言这种组织方式有什么含义?

CPU 轮询的方式无法实现多道程序系统,因为在 I/O 期间 CPU 仍然出于忙碌状态。中断方式处理 I/O 使得实现多道程序系统成为可能,在设备控制器返回之后,接受中断之前,CPU 可以执行其他程序。

6. 与访问 I/O 设备相关的指令通常是特权指令,也就是说,它们能在内核态执行而在用户态则不行。说明为什么这些指令是特权指令。

便于操作系统对 I/O 设备进行抽象。

7. 系列计算机的思想在 20 世纪 60 年代由 IBM 引入 System/360 大型机。现在这种思想已经消亡了还是继续活跃着?

该思想主要是针对不同的应用场景定制了不同型号的机器,在价格,内耗等方面进行了差异化。如今也有类似的例子,如酷睿 i7 的 10700KF,10700K,10700F,10700 四个型号分别在能耗,价格,有无核显,能否超频等方面进行了差异化定制。

8. 缓慢采用 GUI 的一个原因是支持它的硬件的成本(高昂)。为了支持 25 行 80 列字符的单色文本屏幕,需要多少视频RAM?对于 1024 × 768 像素 24 位色彩位图需要多少视频RAM?

没理解啥叫视频RAM,难道指的是显存?姑且就当做内存吧。

单色文本的成本: 25 ∗ 80 ∗ 1 = 2000 B 25* 80*1 = 2000B 25801=2000B
位图成本: 1024 ∗ 768 ∗ 3 = 12359296 B 1024 * 768 * 3 = 12359296B 10247683=12359296B

9.在建立一个操作系统时有几个设计目的,例如资源利用、及时性、健壮性等。请列举两个可能互相矛盾的设计目的。

资源利用和及时性会互相矛盾,例如分时系统,为了及时性会将CPU的使用权在多个程序间不断切换,切换操作带来了不必要的开销。

10. 内核态和用户态有哪些区别?解释在设计操作系统时存在两种不同的模式有什么帮助。

在内核态运行时,CPU可以执行指令集中的所有指令。在用户态运行时,只能执行指令集的部分命令。存在两种模式,可以将部分权限和操作都约束在操作系统内部实现,便于实现资源的管理和向用户提供抽象。

11. 一个 255GB 大小的磁盘有 65536 个柱面,每个磁道有 255 个扇区,每个扇区有 512 字节。这个磁盘有多少盘片和磁头?假设平均寻道时间为 11ms,平均旋转延迟为 7ms,读取速率为 100MB/s,计算从一个扇区读取 400KB 需要的平均时间。

现代操作系统(原书第四版)课后题答案 —— 第一章 引论_第1张图片由上图可以得知,磁盘的容量为: 盘片数 ∗ 2 ∗ 柱面数 ∗ 扇区数 ∗ 扇区容量 = 磁盘容量 盘片数*2*柱面数*扇区数*扇区容量 = 磁盘容量 盘片数2柱面数扇区数扇区容量=磁盘容量则在本题中: 盘片数 = 255 G B 2 ∗ 65536 ∗ 255 ∗ 512 B = 16 个 盘片数 = \frac{255GB}{2*65536*255*512B} = 16 个 盘片数=265536255512B255GB=16
磁头数和盘面数相同:
磁头数 = 盘片数 ∗ 2 = 32 个 磁头数=盘片数*2 = 32个 磁头数=盘片数2=32

第二问比较奇怪,每个扇面只有 512 字节,那啥叫从 一个扇区 读取 400KB 呢?

12. 下面的哪一条指令只能在内核态使用?
  • (a) 禁止所有中断。
  • (b) 读日期-时间时钟。
  • (c) 设置日期-时间时钟。
  • (d) 改变存储器映像。

(a),(c),(d) 只能在内核态执行。

13. 考虑一个有两个 CPU 的系统,并且每一个 CPU 有两个线程(超线程)。假设有三个程序 P0,P1,P2,分别以运行时间 5ms,10ms,20ms开始。运行这些程序需要多少时间?假设这三个程序都是 100% 限于 CPU,在运行时无阻塞,并且一旦设定就不改变CPU。

该题有两个点:

  • CPU 虽然有两个线程,但在一个时刻只有一个进程在运行。
  • 具体执行时间依赖于操作系统如何调度。

因此有以下几种可能:

  • 20ms:P0 和 P1 被调度至同一个 CPU,P2 被调度至另一个。
  • 25ms:P0 和 P2 被调度至同一个 CPU,P1 被调度至另一个。
  • 30ms:P1 和 P2 被调度至同一个 CPU,P0 被调度至另一个。
  • 35ms:P0,P1 和 P2 被调度至同一个 CPU。
14. 一台计算机有一个四级流水线,每一级都花费相同的时间执行其工作,即 1ns。这台机器每秒可执行多少条指令?

1e9。每秒能执行的指令数和级数无关,只和最慢的那一级有关。

15. 假设一个计算机系统有高速缓存,内存,以及磁盘,操作系统用虚拟内存。读取缓存中的一个词需要 1ns,内存需要 10ns,磁盘需要 10ms。如果缓存的命中率是 95%,内存的是 99% (缓存失效时),读取一个词的平均时间是多少?

a v g = 1 n s ∗ 95 + 10 ∗ 99 + 10000000 100 ∗ 5 100 n s = 5001.445 n s avg = \frac{1ns*95 + \frac{10*99 + 10000000}{100}*5}{100} ns = 5001.445ns avg=1001ns95+1001099+100000005ns=5001.445ns

16. 在用户程序进行一个系统调用,以读写磁盘文件时,该程序提供指示说明了所需要的文件、一个指向数据缓冲区的指针以及计数。然后,控制权转给操作系统,它调用相关的驱动程序。假设驱动程序启动磁盘并且直到中断发生才终止。在从磁盘读的情况下,很明显,调用者会被阻塞(因为没有数据从磁盘返回)。在向磁盘写时会发生什么情况?需要把调用者阻塞一直等到磁盘传送完成为止吗?

如果调用者不被阻塞,则在传送完成前有可能更新缓冲区,那么会导致向磁盘写入脏数据。

出现上述问题的关键是:如果不阻塞则调用者不知道何时可以复用缓冲区。为了解决这个点,操作系统一般会拷贝一份缓冲区的数据,然后将控制权返回给用户。

17. 什么是陷阱命令?解释它在操作系统中的用途。

TRAP 指令可以将 CPU 从用户态切换至内核态。用户程序可以借助该指令进行系统调用。

18. 在分时系统中为什么需要进程表?在只有一个用户的个人计算机系统,如 Unix 或者 Windows,也需要进程表吗?

在分时系统中,允许多个进程轮流使用 CPU,因此需要进程表来保存各个进程的状态。Unix 或 Windows 也同时会有多个进程轮流使用 CPU,因此也需要进程表。

19. 请说明有无理由在一个非空的目录中安装一个文件系统?如有,请举例。

在一个非空目录挂载文件系统会导致原来的文件不可见,因此一般都是把空目录作为挂载点。

当待挂载的文件系统和挂载点目录的内容一致时,向非空目录挂载文件系统,可以起到备份文件的作用。当挂载的文件系统出现故障时,可以继续使用原来目录下的内容。

20. 对于下列系统调用,给出引起失败的条件:fork,exec,unlink。
  • fork:进程数量达到上限。
  • exec:镜像不存在。
  • unlink:发起调用的用户无对应权限。
21. 下列哪些资源能使用哪种多路复用(时间,空间或者两者皆可):CPU,内存,磁盘,网卡,打印机,键盘以及显示器?

多路复用:在时间或空间维度上,多个进程共享资源。

  • 时间多路复用:CPU(分时系统),网卡,键盘(快捷键),显示器
  • 空间多路复用:内存,磁盘,显示器
22. 在 count = write(fd, buffer, nbytes); 调用中,是否会返回 nbytes 之外的值给 count
  • 可能返回 -1 表示失败,比如 fd 不正确等。
  • 也可能返回小于 nbytes 的表示真正写入的字节数。
23. 有一个文件,其文件描述符是 fd,内含下列字节序列:3,1,4,1,5,9,2,6,5,3,5 。有如下系统调用:lseek(fd, 3, SEEK_SET); read(fd, &buffer, 4); 执行完成后,buffer 中的内容是什么?
  • lseek(fd, 3, SEEK_SET); 该函数执行后,下次读取会从第四个字节开始。
  • read(fd, &buffer, 4); 从第四个字节开始,读取四个字节,存储至 buffer 中。

因此,buffer 中的内容为 1,5,9,2。

24. 假设一个 10MB 的文件保存在磁盘的同一磁道(磁道号为50)的连续扇区中。磁盘的磁臂此时位于第 100 号磁道。要想从磁盘上找回这个文件,需要多长时间?假设磁臂从上一个柱面移到下一个柱面需要 1ms,保存文件的开始部分的扇区旋转到磁头下需要 5ms,并且读取速率时 200MB/s。

c o s t = ( 100 − 50 ) ∗ 1 m s + 5 m s + 10 M B 200 M B ∗ 1000 m s = 105 m s cost = (100-50)*1ms + 5ms + \frac{10MB}{200MB}*1000ms = 105ms cost=(10050)1ms+5ms+200MB10MB1000ms=105ms

25. 块特殊文件和字符特殊文件的基本差别是什么?
  • 块特殊文件:指那些由可随机存取的块组成的设备,如磁盘等。
  • 字符特殊文件:指那些接收或输出字节流的设备,如调制解调器等。

两者最基本的区别是,前者可随机读取,而后者不能。

26. 在图 1-17 中的例子中库调用成为 read,而系统调用自身成为 read。这两者都有相同的名字是正常的吗?如果不是,哪一个更重要?

System calls do not really have names, other than in a documentation sense.

When the library procedure read traps to the kernel, it puts the number of the system call in a register or on the stack. This number is used to index into a table.There is really no name used anywhere.

On the other hand, the name ofthe library procedure is very important, since that is what appears in the program.

27. 现代操作系统将进程的地址空间从机器物理内存中分离出来。列举这种设计的两个好处。
  • 提供了运行比机器物理内存大的程序的能力。
  • 使得程序可以在运行时动态地链接库,而不是必须在编译时链接。
28. 对程序员而言,系统调用就像对其他库过程调用一样。有无必要让程序员了解哪一个库过程导致了系统调用?在什么情形下,为什么?

系统调用会从用户态切换至内核态,这会带来一些性能损耗。在一些性能至关重要的场景,程序员应该清楚性能的瓶颈可能在哪。

29. 图 1-23 说明有一批 UNIX 的系统调用没有与之等价的 Win32 API。对于所列出的每一个没有 Win32 等价的调用,若程序员要把一个 UNIX 程序转换至 Windows 下运行,会有什么后果?
  • Link: a Win32 program cannot refer to a file by an alternative name or see it in more than one directory. Also, attempting to create a link is a convenient way to test for and create a lock on a file.
  • Mount and umount: a Windows program cannot make assumptions about stan- dard path names because on systems with multiple disk drives the drive-name part of the path may be different.
  • Chmod: Windows uses access control lists.
  • Kill: Windows programmers cannot kill a misbehaving program that is not co- operating.
30. 可移植的操作系统是从一个系统结构移动到另一个系统体系结构而不需要做任何修改的操作系统。请解释为什么建立一个完全可移植性的操作系统是不可行的。描述一下在设计一个高度可移植的操作系统时你设计的两个高级层是什么样的。

Every system architecture has its own set of instructions that it can execute. Thus a Pentium cannot execute SPARC programs and a SPARC cannot ex- ecute Pentium programs.

Also, different architectures differ in bus architecture used (such as VME, ISA, PCI, MCA, SBus, …) as well as the word size of the CPU (usually 32 or 64 bit). Because of these differences in hardware, it is not feasible to build an operating system that is completely portable.

A highly portable operating system will consist of two high-level layers—-a ma- chine-dependent layer and a machine-independent layer. The ma- chine-dependent layer addresses the specifics of the hardware and must be im- plemented separately for every architecture.

This layer provides a uniform in- terface on which the machine-independent layer is built. The machine-inde- pendent layer has to be implemented only once. To be highly portable, the size of the machine-dependent layer must be kept as small as possible.

31. 请解释在建立基于微内核的操作系统时策略和机制分离带来的好处。

机制可以理解为处理数据的固定流程。
策略可以理解为构造数据的方法。

通过机制和策略的分离,使得内核在决定处理流程的前提下足够精简,同时将策略交给用户指定,也保证了一定的自由度。

32. 虚拟机由于很多因素而十分流行,然而它们也有一些缺点,给出一个缺点。

The virtualization layer introduces increased memory usage and processor overhead as well as increased performance overhead.

33. 下面是单位转换的联系:
  • 一微年是多少秒?
    86400 ∗ 365 1000000 s = 31.536 s \frac{86400*365}{1000000}s = 31.536s 100000086400365s=31.536s

  • 微米被称为 micron。那么 megamicron 是多长?
    1 0 − 6 ∗ 1 0 6   m e t e r = 1   m e t e r 10^{-6} * 10^{6}\ meter = 1\ meter 106106 meter=1 meter

  • 1PB 存储器中有多少字节?
    2 50   b y t e = 1 , 099 , 511 , 627 , 776   b y t e 2^{50}\ byte= 1,099,511,627,776\ byte 250 byte=1,099,511,627,776 byte

  • 地球的质量是 6000 yottagram,换算成 kilogram 是多少?
    6000   y o t t a g r a m = 6 ∗ 1 0 24   k i l o g r a m 6000\ yottagram = 6 * 10^{24}\ kilogram 6000 yottagram=61024 kilogram

34. 写一个和图 1-19 类似的 shell。

TODO

35. 请写一个试图创建无限制数量的子进程的 shell 脚本,并观察所发送的事。

TODO

36. 用一个类似于 UNIX od 的工具考察并尝试解释 UNIX 类系统或 Windows 的目录。

TODO

你可能感兴趣的:(现代操作系统(中文第四版),现代操作系统)