《现代操作系统(中文第四版)》课后习题 第一章
网上似乎没有中文版的题解,那我自己来写一份
注意:中文版的书翻译得不是特别好,看不懂题目的话建议去看英文原版书
1,操作系统的量大主要作用是什么?
为应用程序提供一个资源集的清晰抽象(个人理解为通过对计算机底层的抽象,为各类应用程序提供格式一致的接口),管理各种软硬件资源。
2,列举9种操作系统上的应用
①大型机操作系统:银行数据存储系统
②服务器操作系统:Apple的Siri所提供的语音转文本
③多处理器操作系统:使用多核CPU进行渲染的视频编辑软件
④个人计算机操作系统:办公软件
⑤掌上计算机操作系统:各类手机App
⑥嵌入式操作系统:MP3播放系统
⑦传感器节点操作系统:温度计控制
⑧实时操作系统:飞机飞控
⑨智能卡系统:羊城通控制系统
3,分时操作系统和多道操作系统的区别
分时操作系统是使一台计算机采用时间片轮转的方式同时为几个、几十个甚至几百个用户服务的一种操作系统。分时操作系统将系统处理机时间与内存空间按一定的时间间隔,轮流地切换给各终端用户的程序使用。
多道操作系统在内存中同时存放多个作业,使之同时处于运行状态,这些作业共享CPU和外部设备等资源。当一个作业等待I/O完成时,另一个作业可以使用CPU。
所有分时系统都是多道程序设计系统,但并非所有多道程序设计系统都是分时系统,因为多道程序设计系统没有轮流地切换给各终端用户使用。
4,为了使用高速缓存,主存被划分为若干cache行,同城每行长32或64字节。每次缓存一整个cache行,每次缓存一整行而不是一个字节或一个字,这样的优点是什么?
经验证据表明,存储器访问表现出引用局部原则,即如果读取某一个位置,则接下来访问这个位置的概率非常高,尤其是紧随其后的内存位置。
因此,通过缓存整个缓存行,接下来缓存命中的概率会增加。 此外,现代的硬件可以将32或64字节块整个传输到高速缓存行,比单个字节读取,总共读32或64字节的速度要快得多。
5,在早期计算机中,每个字节的读写直接由CPU处理(即没有DMA)。对于多道程序设计而言这种组织方式有什么含义?
多道程序设计的主要原因是在某个程序等待I/O完成时,可以让CPU做一些其他操作。 如果没有DMA,则CPU完全占用I/O,因此通过多道程序设计没有任何收益增加获得(至少在CPU利用率方面)。 无论程序执行多少I/O,CPU都将100%处于忙碌。 这当然假设主要的延迟是数据被复制时的等待。 如果由于其他原因(例如,到达串行线路)I/O很慢,CPU可以执行其他工作。
6、与访问I/O设备相关的指令通常是特权指令,也就是说,他们能在内核态执行而在用户态则不行,说明为什么这些指令是特权指令。
特权指令:只能被操作系统内核使用的指令。这些指令运行于处理器核心态的代码不受任何的限制,可以自由地访问任何有效地址,进行直接端口访问。
非特权指令:能够被所有程序使用的指令。这些指令运行于用户态的代码
不允许在用户程序中使用的指令为特权指令。如果让用户在自己的程序里直接使用“I/O指令”,那么这个用户可以根据自己的需要启动设备进行输入/输出,。这样一来,通过设备所做的输入/输出就可能会丢失信息或产生出错。因此,必须把“I/O指令”规定为是特权指令。同样地,“设置时钟”、“置控制寄存器”等指令,也都应该规定为是特权指令。判断一条指令是否是特权指令,原则是看这条指令的执行,是否会引起系统工作的冲突或意外。
7,系列计算机的思想在20世纪60年代有IBM引入System/360大型机。现在这种思想已经消亡了,还是继续活跃着?
它依然存在着,例如Intel的Core i3,i5和i7 CPU具有不同的属性,包括速度和功耗。但整个系列都在架构上兼容。
8,缓慢采用GUI的一个原因是支持他的硬件的成本高昂,为了支持25行80列的单色文本屏幕,需要多少视频RAM?对于1024x768像素24位色彩图需要多少RAM?在1980年每Kb 5美元,这些RAM成本是多少?现在成本多少?
第一题:25×8×1=2000B 成本约为10$
第二题:1024×768×24/8=2.25MB 不到一分钱
9,在建立一个操作系统时有几个设计目的,例如资源利用、及时性、健壮性等。请列举两个可能互相矛盾的设计目的。
考虑公平和实时。要求每一个考虑公平和实时。要求每一个进程都以公平的方式分配资源, 没有进程 能得到超过公平份额的资源 。另一方面,实时要求 使进程在规定的时间内执行完毕的基础上分配资源 。一个实时的进程可能会得到一个不成比例的资源份额。
10,内核态和用户态有哪些区别?解释在设计操作系统时存在两种不同的模式有什么帮助。
在内核态下,CPU可以执行其指令集中的每条指令,并在内核态下执行使用硬件的各种功能。cpu可以访问内存的所有数据,包括外围设备,例如硬盘,网卡,cpu也可以将自己从一个程序切换到另一个程序
但是用户态只能执行部分指令,执行时仅使用部分功能。只能受限的访问内存,且不允许访问外围设备,占用cpu的能力被剥夺,cpu资源可以被其他程序获取
拥有两种模式允许设计人员以用户态运行用户程序,从而拒绝他们访问关键指令。
11,一个255GB大小的磁盘有65535个柱面,每个柱面255个扇区。每个扇区512字节。这个磁盘有多少盘片和磁头?假设平均寻道时间为11ms,平均旋转延迟为7ms,读取速度100MB/s,计算从一个扇区读取400kb需要的平均时间。
磁头数=255GB/255/65536/512B=32个
盘片数=32/2=16片
平均时间=旋转延时+寻道时间+读取时间=7ms+11ms+400kb/100MB/s=22ms
12、下面的哪一条指令只能在内核态中使用?
a)禁止所有的中断。
b)读日期 -时间钟。
c)设置日期 -时间钟。
d)改变存储器映像。
答案:a,c,d (个人理解b不会修改系统设置所以不是内核态指令)
13、考虑一个有两个CPU的系统,且每一个CPU有两个线程(超线程)。假设有三个程序P0、P1、P2,分别以运行时间5ms, 10ms,20ms开始,运行这些程序需要多少时间?假设这三个程序都是100%限于CPU,在运行时无阻塞,并且一旦设定就不改变CPU。
运行时间可能是20,25,30,35ms,取决于操作系统的调度逻辑
当(P0,P1)在一个CPU上,P2在另一个CPU上运行时,耗时20ms
当(P0,P2)在一个CPU上,P1在另一个CPU上运行时,耗时25ms
当(P1,P2)在一个CPU上,P0在另一个CPU上运行时,耗时30ms
当(P0,P1,P2)在同一个CPU上运行时,耗时35ms
14、一台计算机有一个四级流水线,每一级都花费相同的时间执行其工作,即1ns, 这台机器每秒可执行多少条指令?
答:在流水线中,每1ns都有一条指令会被执行完毕,所以机器每秒能执行1亿条指令。
15、假设一个计算机系统有高速缓存、内存以及磁盘,操作系统用呼你内存。读取缓存中的一个词需要1ns, 内存需要10ns, 磁盘需要10ms。如果缓存命中率是95%, 内存的是99%(缓存失效时),读取一个词的平均时间是多少?
t=0.95*1ns+0.05*(0.99*10ns+0.01*10ms)= 5.001445 μs
16、在用户程序进行一个系统调用,以读写磁盘文件时,该程序提供指示说明了所需要的文件,一个指向数据缓冲区的指针以及计数。然后,控制权转给操作系统,它调用相关的驱动程序。假设驱动程序启动磁盘并且直到中断发生才终止。在从磁盘读的情况下,很明显,调用者会被阻塞(因为文件中没有数据)。在向磁盘写时会发生什么情况?需要把调用者阻塞一直等到磁盘传送完成为止吗?
有可能。向磁盘写时,如果调用者取回控制,在最终发生写操作时立刻重写数据,将会写入错误的数据数据。但是如果驱动程序在返回前将数据复制到一个专用的缓冲器,那么调用者可以继续执行。另外,可以允许调用者继续,当缓冲器被调用时,给它一个信号,不过这很麻烦并且容易出错。
17、什么是陷阱指令?在操作系统中它的用途。
陷阱指令就是将一个处理器的执行模式从用户模式切换到内核模式。这个指令允许用户程序调用操作系统内核中的函数。
18、分时系统中为什么需要进程表?在只有一个进程存在的计算机中,需要进程表吗?
进程表是为了存储当前被挂起、或者是被延迟和阻塞的进程状态。现代个人计算机有许许多多的进程在进行,即使当用户什么事都没做、什么程序都没有在运行时。它们需要检查更新,下载邮件以及许多其他的事。在单一进程的系统中不需要进程表,因为单一进程从不挂起。
19、说明有没有理由在一个非空的目录中安装一个文件系统。如果这样做,如何做?
有可能有理由,装配文件系统会使得装配目录中已有的任何文件都不可访问,所以装配点通常是空的。然而,系统管理人员可能需要将位于被装配目录中非常重要的文件复制到装配点,以至于它们在进行设备检查和修理时,可以在紧急事件中的普通路径找到这些文件。
20、对于下列系统调用,给出引起失败的条件:fork,exec以及unlink.
如果进程表中没有空闲的槽(或者没有内存和交换空间),fork将失败。如果所给的文件名不存在,或者不是一个有效的可执行文件,exec将失败。如果将要解除链接的文件不存在,或者调用unlink的进程没有权限,unlink将失败。
21、下列资源能使用哪种多路复用(时间、空间或者两者皆可):CPU、内存、磁盘、网卡、打印机、键盘以及显示器?
时间复用:CPU、网卡、打印机、键盘。
空间复用:内存、磁盘。
两者:显示。
22、在count = write(fd, buffer,nbytes);调用中,是否能将函数返回值传递给 count变量而不是nbtes变量?如果能,为什么?
(中文版对这一题翻译存在一定的疏漏,英文版原意是:函数count=write(fd,buffer,nbytes)的返回值,是否有可能和nbytes不同,如果能,为什么)
调用可能失败,比如fd不正确,那么将返回-1。而磁盘满的时候,调用也失败,因为这时不可能写入被请求的字节数。而在正确的终止时,会总是返回nbytes。
23、有一个文件,其文件描述符是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
24、假设一个10MB的文件在磁盘连续扇区的同一个轨道上(轨道号:50)。磁盘的磁头臂此时位于第100号轨道。要想从磁盘上找回这个文件,需要多长时间? 假设磁头臂从一个柱面移动到下一个柱面需要1ms,当文件的开始部分存储在的扇区旋转到磁头下需要5ms,并且读的速率是200MB/s。
答:找到文件需要的时间=1ms*50(移动到50号磁道的时间)+ 5 ms (旋转到文件开始部分存储在的扇区的时间)+10/200*1000ms(读取10MB的时间)=105ms
25、块特殊文件和字符特殊文件的基本差别是什么?
块特殊文件包含被编号的块,每一块都可以独立地读取或者写入。而且定位任意块和开始读出或写入是很容易的。但是这对于字符特殊文件是不可能的。
26、在图1-7的例子中库调用称为read,而系统调用自身称为read,这两者都有相同的名字是正常的吗? 如果不是,哪一个更重要?
系统调用实际上没有名称,除了在文件中这样描述外。当库例程陷入内核时,它将系统调用号码放入寄存器或者堆栈中。这个号码通常用于一张表的索引。这里没有使用任何名称。另一方面,库例程的名称是非常重要的,因为它将用于程序中。
27,现代操作系统将进程的地址空间从机器物理内存中分离出来,列举这种设计的两个好处。
1,允许程序在不同的运行状态中,将不同的数据放入内存中。
2,允许程序使用比物理内存还要多的内存,弥补物理内存的不足。
3,为进程提供了一致的地址空间简化了内存管理
28,对程序员而言,系统调用就像对其他库过程的调用一样。有无必要让程序员了解哪一个库过程导致了系统调用?在什么情形下,为什么?
一般不需要,除非在重视性能的场景下。因为使用系统调用,需要额外的开销。
29,图1-23说明有一批UNIX的系统调用没有与之相等价的Win32 API,对于所列出的每一个没有Win32等价的调用,若程序员要把一个UNIX程序转换到Windows下运行,会有什么后果?
对于没有等价调用的部分,在Windows下将无法运行。
31,请解释在建立基于微内核的操作系统时策略与机制分离带来的好处。
机制的分离允许系统设计师在内核态中执行尽量少的源语,这将使得源语得以简化,降低系统内核的开发难度,提高代码的可维护性。其余模块可以作为普通的进程,即使发生错误也只会导致模块崩溃,而不会导致系统崩溃。能有效提高系统的可靠性。
32,虚拟机由于很多因素而十分流星,然而他们也有一些缺点,请给出缺点:
对硬件资源的消耗更大