《现代操作系统(第四版)》 课后习题答案--第一章

《现代操作系统(第四版)》 课后习题答案–第一章

自己写的,可能会有错误,望大家指正。

第一题

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

解:

  1. 为用户程序提供一个更好、更简单、更清晰的计算机模型。
  2. 管理cpu、主存、磁盘、打印机、键盘、鼠标、显示器、网络接口等设备。

第二题

在1.4节中描述了9中不同类型的操作系统,列举每种操作系统的应用(每种系统一种应用)。(Page. 20)

解:

  1. 大型机操作系统(Mainframe Operating Systems):
    • 批处理系统应用于保险公司的索赔处理或连锁商店的索赔报告
    • 事务处理系统应用于银行支票处理或航班预定
    • 分时系统应用于大型数据库的查询
  2. 服务器操作系统(Server Operating Systems):
    • 应用于Web站点保存页面并处理进来的请求
  3. 多处理器操作系统(Multiprocessor Operating Systems):
    • Windows和Linux都可以运行在多核处理器上,可谓计算机带来更高的性能
  4. 个人计算机操作系统(Personal Computer Operating Systems):
    • 应用于文字处理、电子表格、游戏和Internet访问
  5. 掌上计算机操作系统(Handheld Computer Operating Systems):
    • 手机的操作系统如Android和ios
  6. 嵌入式操作系统(Embedded Operating Systems):
    • 应用于微波炉、冰箱、电视机、智能家居、汽车等
  7. 传感器节点操作系统(Sensor-Node Operating Systems):
    • 应用于建筑物周边保护、国土边界保卫、森林火灾探测、气象预测等
  8. 实时操作系统(Real-Time Operating Systems):
    • 硬实时系统应用于工业过程控制、民用航空、军事等
    • 软实时系统应用于数字音频或多媒体系统等
  9. 智能卡操作系统(Smart Card Operating Systems):
    • 应用于电子支付等

第三题

分时操作系统和多道程序系统的区别是什么?(Page. 6)

解:

  • 分时操作系统:按一定时间间隔将计算机的轮流分配给程序使用,由于间隔非常短,所以就像每个程序独占一样。
  • 多道程序系统:将内存分为几部分存放不同的程序,一个程序不能让cpu和I/O设备始终忙碌,当cpu的正在执行的作业需要等待某个动作完成才能继续进行(如I/O操作完成),如果是单道程序设计此时cpu会等待,而多道程序设计则会让cpu开始处理另一个作业,提高了cpu的利用率。
  • 区别:分时操作系统是按一定时间间隔将计算资源分配给不同的程序,而多道程序系统则是在当前作业进行其他动作时才回去处理别的作业。

第四题

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

解:

因为程序局部性原理,即当要访问某一个字或字节,则其后面的数据被访问的概率很大,这样就可以提高缓存命中的概率。

第五题

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

解:

DMA(Direct Memory Access)直接存储器访问:当cpu要进行I/O操作时只需要对DMA控制器进行设置,之后DMA控制器会完成cpu给定的工作,而cpu可在此时空闲下来去处理别的事情。

如果每个字节的读写是由cpu读写,则在I/O操作时cpu就不能处理其他程序作业,此时cpu将被I/O操作占用,无法空闲下来,由于I/O操作远慢于cpu的处理速度,cpu运行效率会大幅度下降。若有DMA控制器则在较慢的I/O操作时cpu可以空闲下来去运行别的作业,会使进行I/O操作时cpu效率大幅度提高,也提高了多道程序设计的收益(多道程序概念看第三题)。

第六题

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

解:

特权指令:具有特殊权限的指令,只能由操作系统调用,在系统的内核态运行。

  1. 操作系统的一个主要任务就是给用户提供一个良好的计算机模型,然而这一任务的一个主要准则就是弱化用户对硬件的感知,而I/O操作就是对硬件的直接操作。
  2. 进行I/O操作时操作系统往往要检查相应权限,如果I/O操作可以由用户任意调用,则会容易引发系统崩溃。

第七题

系列计算机的思想在20世界60年代由IBM引入System/360大型机。现在这种思想是消亡还是存活?

解:

这还用问吗,看看不同版本的ipad、surface、相同系列不同配置的电脑。。。

第八题

缓慢采用GUI的一个原因是支持他的硬件的成本高昂,为了支持25行80列的单色文本屏幕,需要多少视频RAM?对于1024x768像素24位色彩图需要多少RAM?在1980年每Kb 5美元,这些RAM成本是多少?现在成本多少?

  1. 每个文本一个字节,则25行80列最大就是25×80字节,即2000字节视频RAM
  2. 1024×768个像素,每个像素24位,一字节有8位,则总共是1024×768×24÷8,即2359296字节,2304KB。
  3. 1980年成本是11520美元,在今天按jd金士顿8g 2400的内存价格算是0.03125人民币每KB(进制为1024),则其成本是72人民币,按当前美元汇率是10.0732美元。TIM截图20191007235417 TIM截图20191007235755

第九题

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

解:

考虑硬实时操作系统,其及时性和可靠性较高,但是健壮性较差,当出错时会导致后续工作无法进行。

第十题

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

解:

  • 内核态:可以无限制地对系统存储、外部设备进行访问,具有最高级别的权限,可以执行cpu的所有指令。
  • 用户态:访问受限制,无法访问外部设备,无法执行特权指令。
  • 区别:相对与用户态,内核态拥有的权力更高,而用户态访问设备都需要内核态来帮助。
  • 对操作系统的帮助:
    • 可以使用户程序不需要接触底层物理设备的细节,仅由一个函数来实现一系列复杂的工作。
    • 保护硬件信息,对用户程序进行限制,当用户程序需要进行某些硬件访问,可以向操作系统申请,操作系统会检查它的权限。

小结

这几题都是偏思维题,觉得这种题要先列举这些东西的性质,再对比总结。

有些名词书上没有讲解,在网上的资料也比较少,可能不太准确

第十一题

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

解:

TIM截图20191008155307

如图,红色为一个柱面,蓝色为扇区,即每个盘面有若干柱面,每个柱面有若干扇区,每个盘面有一个磁头,每个盘片有两个盘面,也即两个磁头。(用触摸板画的👀)

  • 由此可得每个盘面的存储容量为255×512×65535=‭8556249600‬B=‭8355712.5KB≈8160MB≈8G
  • 所以盘面数即磁头数为255÷8≈32
  • 所以共有16个盘片
  • 平均时间=寻道时间+旋转延迟+读取时间:11ms+7ms+400kb÷(100MB/s×1024÷1000)≈22ms

第十二题

下面哪一条指令只能在内核态使用?

  • a 禁止所有的中断
  • b 读日期-时间时钟
  • c 设置日期-时间时钟
  • d 改变存储器映像

解:a、c、d

第十三题

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

不太理解他的线程要怎么算,看百度百科英特尔超线程技术是将cpu内部使用频率较高的部件复制一份,这样就可以提高使用频率较低的部件的使用效率,就可以把他看成两个逻辑线程。但是看网上答案都没有考虑两个线程同时工作的问题。

第十四题

一台计算机有一个四级流水线,每一级都花费相同的时间执行其工作,即1ns, 这台机器每秒可执行多少条指令?

解:

1s = 1000000000ns

分成四级流水线,应该是一条指令分成四部分,即每条指令执行时间为4ns,四级流水线图示:

TIM截图20191008170610

由图可推算出10亿ns可运行1000000000-3条指令

第十五题

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

解:

10ms = 10000000ns

平均时间即:

  • 1ns×0.95(缓存命中)

  • +10ns×0.05×0.99(缓存未命中内存命中)

  • +10000000ns×0.05×0.01(缓存内存都未命中)

  • =5001.455ns

第十六题

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

不太懂。。。

第十七题

什么是陷阱指令?在操作系统中解释他的用途。

解:

在网上看到好像和tarp指令类似的还有一个叫访管指令(还有人说两个大致相等,没搞明白两个有啥关系),好像是因为内核态又叫管态,用户态又叫目态。

trap指令是一个非特权指令,他是从用户态进入到内核态唯一的入口,该指令允许用户程序调用特权指令。

第十八题

分时系统中为什么需要进程表?在只有一个进程存在的个人计算机系统中,该进程控制整个机器直到进程结束,这种机器也需要进程表吗?

解:

进程表是用来管理进程,当分时系统将某些进程挂起时,他们将进入进程表,分时系统从进程表中取出另一个需要处理的进程。

当只有一个进程时不需要,因为他无需管理其他进程。

第十九题

说明有没有理由在一个非空的目录中安装一个文件系统。如果这样做,如何做?

不太懂,希望有大佬能帮我解答一下。

第二十题

对于下列系统调用,给出引起失败的条件:fork,exec以及unlink.

解:

  • fork:如果在进程表中没有空闲的内存用于创建子进程,则调用失败
  • exec:当其参数中执行的文件名称错误时
  • unlink:要删除的目录不存在或者权限不足时

第二十一题

下列资源能使用哪种多路复用(时间、空间或者两者皆可):CPU、内存、磁盘、网卡、打印机、键盘以及显示器?

解:

  • 时间复用:CPU、网卡、打印机、键盘
  • 空间复用:内存、磁盘、
  • 两者皆可:显示器

第二十二题

在count = write(fd, buffer,nbytes);调用中,是否能将函数返回值传递给 count除nbtes变量以外的任何值吗?如果能,为什么?(这点书上翻译错了。。。)

解:

write返回值:通常与参数nbytes相同,否则表示出错。

  1. 若返回-1,表示write系统调用错误。
  2. 若返回值为0,则表示没有写入任何数据

第二十三题

有一个文件,其文件描述符是fd,内含下列字节序列:3,1,4,1,5,9,2,6,5,3,5。有如下系统调用:

1
2
3
>   lseek(fd, 3, SEEK_SET);
> read(fd, &buffer, 4);
>

其中lseek调用寻找文件中的字节3。在读操作完成之后,buffer中的内容是什么?

解:

lseek:用于修改指针在文件中的位置。三个参数分别为文件描述、文件中的位置、说明相对于文件的起始位置,当前位置还是结尾。其返回值是文件中的绝对位置。

set我查的有start sth. happening的意思,也许在这里就是开始的意思吧,这个名字起的好抽象,以前都不知道set还有开始的意思。。。所以SEEK_SET就是从文件的开头,从开头算起第三个就是字符1了。

那read就是从字符1开始算4个字符即:1,5,9,2

我不太清楚他的指针是什么机制,但是当运行如下代码

1
2
3
>   lseek(fd, 0, SEEK_SET);//将指针设置在文件的起始位置
> //懒得打开Linux试了,还要重启换系统
>
  • 如果文件起始位置是1,写的时候是不会从0开始写的,因为0不是一个位置,而是从1开始写,也即指针位置的下一个位置,那么lseek就会把指针设置在下一个要读写位置的前面,即每次读写都从指针的下一位开始读写(好像有些类似STL中的rbegin迭代器,我也记不清楚了)。但是,这个说法和书上的说法相矛盾,书上Page. 32的1.6.2中说“在顺序读(写)时,该指针通常指向要读(写)的下一个字节”。
  • 如果文件起始位置是0,那么lseek会将指针设置在第0位,按书上说,下一次将在第0位开始读(写),所以题目中的3可能指的就是文件中的第四个字符。

第二十四题

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

解:

读取文件时间:(10MB) ÷ (200MB/s) = 0.05s = 50ms

总时间:50ms + 50ms + 5ms = 105ms

第二十五题

块特殊文件和字符特殊文件的基本差别是什么?

解:

如果一个硬件设备是以字符流的方式被访问的话,那就应该将它归于字符设备;反过来,如果一个设备是随机(无序的)访问的,那么它就属于块设备。块设备常见的是硬盘,而字符设备常见的是键盘等。

块特殊文件和字符特殊文件又叫做块设备和字符设备,在百度查块特殊文件和字符特殊文件基本查不到什么有用的资料,还能索引到有道词典的翻译是什么鬼???辣鸡百度。。。而查块设备和字符设备还能查到一些有用的东西。

第二十六题

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

IMG_20191009_002644

解:

书上Page. 29说“第七步:跟随在TRAP指令后的内核代码开始检查系统调用编号,然后分配给正确的系统调用处理器,这通常是通过一张由系统调用编号所引用的、指向系统调用处理器的指针表来完成”,

即这些系统调用其实没有名字,只是一些编号。应该在用户态的read更重要,因为他要写成代码,更抽象且容易被理解。

第二十七题

现代操作系统将进程的地址空间从机器物理内存中分离出来,列举这种设计的两个好处。

解:

  1. 他为虚拟内存提出奠定了基础,如果进程地址空间和机器内存一一对应,则就不可能有虚拟内存存在。
  2. 防止其他恶意程序或者有bug的程序修改别的程序的内存。

第二十八题

对程序员而言,系统调用就像对其他库过程的调用一样。有无必要让程序员了解哪一个库过程导致了系统调用?在什么情形下,为什么?

解:

我认为,一个好的库,应该是更抽象、美观。他应该让程序员忽略那些硬件细节和系统细节以达到更高效的开发。

第二十九题

图1-23说明有一批UNIX的系统调用没有与之相等价的Win32 API,对于所列出的每一个没有Win32等价的调用,若程序员要把一个UNIX程序转换到Windows下运行,会有什么后果?

IMG_20191009_181417

解:

  • link:在win32中文件将不能以另一个名字出现在其他目录中
  • mount和unmount:在win32中不能合并两个文件系统,也就必须分清楚哪些文件是在哪个驱动器上面。
  • chmod:在Win32中不能灵活改变文件的保护属性
  • kill:在Win32中不能杀死失常的程序

第三十题

可移植的操作系统是能从一个系统体系结构到另一个体系结构的移动不需要任何修改的操作系统。请解释为什么建立一个完全可移植性的操作系统是不可行的。描述一下在设计一个髙度可移植的操作系统时你设计的两个高级层是什么样的。

解:

  1. 因为不同的硬件往往都有着自己独有的指令集,而某些硬件专用于实现一些功能,不同功能的指令集往往各不相同。即使功能相同的硬件指令集也不尽相同。
  2. 应该有一个用于屏蔽硬件细节吧,类似于计算机网络中的物理层。另一个不知道。。。(什么鬼问题,我对操作系统还不了解了,上来问这种劝退问题)

第三十一题

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

解:

让内核体积更小,将复杂的策略实现交给用户态,使内核做的事情更加专一,效率更高。

第三十二题

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

解:

虚拟机建立在宿主操作系统之上,会给处理器和内存带来很大的开销来使虚拟机看似和宿主操作系统相同。

第三十三题

下面是单位转换的练习:

a)一微年是多少秒?

b)微米常称为micron。那么gigamicron是多长?

c) 1TB存储器中有多少字节?

d)地球的质量是6000 yottagram, 换算成kilogram是多少?

解:

  • 0.000001×365×24×3600 = 31.536s
  • 1000000000×0.000001 = 1000m
  • 2^40字节
  • 6×10^21 kg

参考

《现代操作系统(中文第四版)》课后习题答案 第一章 引论

Donate comment here