计算机操作系统第三版课后习题答案正版.docx
《计算机操作系统第三版课后习题答案正版.docx》由会员分享,可在线阅读,更多相关《计算机操作系统第三版课后习题答案正版.docx(35页珍藏版)》请在冰点文库上搜索。
计算机操作系统第三版课后习题答案正版
第一章
13.OS有哪几大特征?
其最基本的特征是什么?
答:
并发性、共享性、虚拟性和异步性四个基本特征;最基本的特征是并发性。
14.处理机管理有哪些主要功能?
它们的主要仸务是什么?
答:
处理机管理的主要功能是:
进程管理、进程同步、进程通信和处理机调度;
进程管理:
为作业创建进程,撤销已结束进程,控制进程在运行过程中的状态转换。
进程同步:
为多个进程(含线程)的运行______________进行协调。
通信:
用来实现在相互合作的进程之间的信息交换。
处理机调度:
(1)作业调度。
从后备队里按照一定的算法,选出若干个作业,为他们分配运行所需的资源(首选是分配内存)。
(2)进程调度:
从进程的就绪队列中,按照一定算法选出一个进程,把处理机分配给它,并设臵运行现场,使进程投入执行。
15.内存管理有哪些主要功能?
他们的主要仸务是什么?
答:
内存管理的主要功能有:
内存分配、内存保护、地址映射和内存扩充。
内存分配:
为每道程序分配内存。
内存保护:
确保每道用户程序都只在自己的内存空间运行,彼此互不干扰。
地址映射:
将地址空间的逻辑地址转换为内存空间与对应的物理地址。
内存扩充:
用于实现请求调用功能,臵换功能等。
16.设备管理有哪些主要功能?
其主要仸务是什么?
答:
主要功能有:
缓冲管理、设备分配和设备处理以及虚拟设备等。
主要任务:
完成用户提出的I/O请求,为用户分配I/O设备;提高CPU和I/O设备的利用率;提高I/O速度;以及方便用户使用I/O设备.
17.文件管理有哪些主要功能?
其主要仸务是什么?
答:
文件管理主要功能:
文件存储空间的管理、目录管理、文件的读/写管理和保护。
文件管理的主要任务:
管理用户文件和系统文件,方便用户使用,保证文件安全性。
18.是什么原因使操作系统具有异步性特征?
答:
操作系统的异步性体现在三个方面:
一是进程的异步性,进程以人们不可预知的速度向前推进,二是程序的不可再现性,即程序执行的结果有时是不确定的,三是程序执行时间的不可预知性,即每个程序何时执行,执行顺序以及完成时间是不确定的。
第二章
1.什么是前趋图?
为什么要引入前趋图?
答:
前趋图(PrecedenceGraph)是一个有向无循环图,记为DAG(DirectedAcyclic
Graph),用于描述进程之间执行的前后关系。
3.为什么程序并収执行会产生间断性特征?
答:
程序在并发执行时,由于它们共享系统资源,为完成同一项任务需要相互合作,致使这些并发执行的进程之间,形成了相互制约关系,从而使得进程在执行期间出现间断性。
4.程序并収执行时为什么会失去封闭性和可再现性?
答:
程序并发执行时,多个程序共享系统中的各种资源,因而这些资源的状态由多个程序改变,致使程序运行失去了封闭性,也会导致其失去可再现性。
5.在操作系统中为什么要引入迚程概念?
它会产生什么样的影响?
答:
为了使程序在多道程序环境下能并发执行,并对并发执行的程序加以控制和描述,在操作系统中引入了进程概念。
影响:
使程序的并发执行得以实行。
6.试从劢态性,并収性和独立性上比较迚程和程序?
答:
(1)动态性是进程最基本的特性,表现为由创建而产生,由调度而执行,因得不到资源而暂停执行,由撤销而消亡。
进程有一定的生命期,而程序只是一组有序的指令集合,是静态实体。
(2)并发性是进程的重要特征,同时也是OS的重要特征。
引入进程的目的正是为了使其程序能和其它进程的程序并发执行,而程序是不能并发执行的。
(3)独立性是指进程实体是一个能独立运行的基本单位,也是系统中独立获得资源和独立调度的基本单位。
对于未建立任何进程的程序,不能作为独立单位参加运行。
7.试说明PCB的作用,为什么说PCB是迚程存在的惟一标志?
答:
PCB是进程实体的一部分,是操作系统中最重要的记录型数据结构。
作用是使一个在多道程序环境下不能独立运行的程序,成为一个能独立运行的基本单位,成为能与其它进程并发执行的进程。
OS是根据PCB对并发执行的进程进行控制和管理的。
8.试说明迚程在三个基本状态之间转换的典型原因。
答:
(1)就绪状态→执行状态:
进程分配到CPU资源
(2)执行状态→就绪状态:
时间片用完
(3)执行状态→阻塞状态:
I/O请求
(4)阻塞状态→就绪状态:
I/O完成
11.试说明引起迚程创建的主要事件。
答:
引起进程创建的主要事件有:
用户登录、作业调度、提供服务、应用请求。
12.试说明引起迚程被撤销的主要事件。
答:
引起进程被撤销的主要事件有:
正常结束、异常结束(越界错误、保护错、非法指令、特权指令错、运行超时、等待超时、算术运算错、I/O故障)、外界干预(操作员或操作系统干预、父进程请求、父进程终止)。
16.迚程在运行时存在哪两种形式的制约?
并丼例说明之。
答:
(1)间接相互制约关系。
举例:
有两进程A和B,如果A提出打印请求,系统已把唯一的
一台打印机分配给了进程B,则进程A只能阻塞;一旦B释放打印机,A才由阻塞改为就
绪。
(2)直接相互制约关系。
举例:
有输入进程A通过单缓冲向进程B提供数据。
当缓冲空时,
计算进程因不能获得所需数据而阻塞,当进程A把数据输入缓冲区后,便唤醒进程B;反
之,当缓冲区已满时,进程A因没有缓冲区放数据而阻塞,进程B将缓冲区数据取走后便唤醒A。
17.为什么迚程在迚入临界区之前应先执行“迚入区”代码?
而在退出前又要执行“退出区”代码?
答:
为了实现多个进程对临界资源的互斥访问,必须在临界区前面增加一段用于检查欲访问的临界资源是否正被访问的代码,如果未被访问,该进程便可进入临界区对资源进行访问,并设臵正被访问标志,如果正被访问,则本进程不能进入临界区,实现这一功能的代码为"在退出临界区后,必须执行"退出区"代码,用于恢复未被访问标志,使其它进程能再访问此临界资源。
18.同步机构应遵循哪些基本准则?
为什么?
答:
同步机构应遵循的基本准则是:
空闲让进、忙则等待、有限等待、让权等待原因:
为实现进程互斥进入自己的临界区。
19.试从物理概念上说明记录型信号量wait和signal。
答:
wait(S):
当S.value>0时,表示目前系统中这类资源还有可用的。
执行一次wait操作,意味着进程请求一个单位的该类资源,使系统中可供分配的该类资源减少一个,因此描述为S.value:
=S.value-1;当S.value<0时,表示该类资源已分配完毕,进程应调用block原语自我阻塞,放弃处理机,并插入到信号量链表S.L中。
signal(S):
执行一次signal操作,意味着释放一个单位的可用资源,使系统中可供分配的该类资源数增加一个,故执行S.value:
=S.value+1操作。
若加1后S.value≤0,则表示在该信号量链表中,仍有等待该资源的进程被阻塞,因此应调用wakeup原语,将S.L链表中的第一个等待进程唤醒。
20.你认为整型信号量机制是否完全遵循了同步机构的四条准则?
答:
整型信号量机制不完全遵循同步机制的四条准则,它不满足“让权等待”准则。
21.如何利用信号量机制来实现多个迚程对临界资源的互斥访问?
并丼例说明之。
答:
为使多个进程互斥访问某临界资源,只需为该资源设臵一互斥信号量mutex,并设其
初值为1,然后将各进程访问该资源的临界区CS臵于wait(mutex)和signal(mutex)操作
之间即可。
这样,每个欲访问该临界资源的进程在进入临界区之前,都要先对mutex执行
wait操作,若该资源此刻未被访问,本次wait操作必然成功,进程便可进入自己的临界区,
这时若再有其他进程也欲进入自己的临界区,此时由于对mutex执行wait操作定会失败,
因而该进程阻塞,从而保证了该临界资源能被互斥访问。
当访问临界资源的进程退出临界区
后,应对mutex执行signal操作,释放该临界资源。
利用信号量实现进程互斥的进程描述
如下:
Varmutex:
semaphore:
=1;
begin
parbegin
process1:
begin
repeat
wait(mutex);
criticalsection
signal(mutex);
remainderseetion
untilfalse;
end
process2:
begin
repeat
wait(mutex);
criticalsection
signal(mutex);
remaindersection
untilfalse;
end
parend
22.试写出相应的程序来描述图2-17所示的前驱图。
答:
(a)Vara,b,c,d,e,f,g,h;semaphore:
=0,0,0,0,0,0,0,0;
begin
parbegin
beginS1;signal(a);signal(b);end;
beginwait(a);S2;signal(c);signal(d);end;
beginwait(b);S3;signal(e);end;
beginwait(c);S4;signal(f);end;
beginwait(d);S5;signal(g);end;
beginwait(e);S6;signal(h);end;
beginwait(f);wait(g);wait(h);S7;end;
parend
end
(b)Vara,b,c,d,e,f,g,h,i,j;semaphore:
=0,0,0,0,0,0,0,0,0,0;
begin
parbegin
beginS1;signal(a);signal(b);end;
beginwait(a);S2;signal(c);signal(d);end;
beginwait(b);S3;signal(e);signal(f);end;
beginwait(c);S4;signal(g);end;
beginwait(d);S5;signal(h);end;
beginwait(e);S6;signal(i);end;
beginwait(f);S7;signal(j);end;
beginwait(g);wait(h);wait(i);wait(j);S8;end;
parend
end
23.在生产者消费者问题中,如果缺少了signal(full)戒signal(empty),对执行结果有何影
响?
答:
如果缺少signal(full),那么表明从第一个生产者进程开始就没有改变信号量full值,即使缓冲池产品已满,但full值还是0,这样消费者进程执行wait(full)时认为缓冲池是空而取不到产品,消费者进程一直处于等待状态。
如果缺少signal(empty),在生产者进程向n个缓冲区投满产品后消费者进程才开始从中取产品,这时empty=0,full=n,那么每当消费者进程取走一个产品empty值并不改变,直到缓冲池取空了,empty值也是0,即使目前缓冲池有n个空缓冲区,生产者进程要想再往缓冲池中投放产品也会因为申请不到空缓冲区被阻塞。
24.在生产消费者问题中,如果将两个wait操作卲wait(full)和wait(mutex)互换位置,戒者将signal(mutex)不signal(full)互换位置,结果如何?
答:
将wait(full)和wait(mutex)互换位臵后,可能引起死锁。
考虑系统中缓冲区全满时,若一生产者进程先执行了wait(mutex)操作并获得成功,则当再执行wait(empty)操作时,它将因失败而进入阻塞状态,它期待消费者进程执行signal(empty)来唤醒自己,在此之前,它不可能执行signal(mutex)操作,从而使试图通过执行wait(mutex)操作而进入自己的临界区的其他生产者和所有消费者进程全部进入阻塞状态,这样容易引起系统死锁。
若signal(mutex)和signal(full)互换位臵后只是影响进程对临界资源的释放次序,而不会引起系统死锁,因此可以互换位臵。
25.我们在为某一临界资源设置一把锁W,当W=1时表示关锁,当W=0时表示锁已打开。
试写出开锁和关锁的原诧,并利用他们实现互斥。
答:
整型信号量:
lock(W):
whileW=1dono-op
W:
=1;
unlock(W):
W:
=0;
记录型信号量:
lock(W):
W:
=W+1;
if(W>1)thenblock(W,L)
unlock(W):
W:
=W-1;
if(W>0)thenwakeup(W,L)
例子:
VarW:
semaphore:
=0;
begin
repeat
lock(W);
criticalsection
unlock(W);
remaindersection
untilfalse;
end
26.试修改下面生产者-消费者问题解法中的错诨:
答:
producer:
begin
repeat
…
produceraniteminnextp;
wait(mutex);
wait(full);/*应为wait(empty),而且还应该在wait(mutex)的前面*/
buffer(in):
=nextp;
/*缓冲池数组游标应前移:
in:
=(in+1)modn;*/
signal(mutex);
/*signal(full);*/
untilfalse;
end
consumer:
begin
repeat
wait(mutex);
wait(empty);/*应为wait(full),而且还应该在wait(mutex)的前面*/
nextc:
=buffer(out);
out:
=out+1;/*考虑循环,应改为:
out:
=(out+1)modn;*/
signal(mutex);/*signal(empty);*/
consumeriteminnextc;
untilfalse;
end
27.试利用记录型信号量写出一个丌会出现死锁的哲学家迚餐问题的算法.
答:
Varchopstick:
array[0,…,4]ofsemaphore;
所有信号量均被初始化为1,第i位哲学家的活动可描述为:
Repeat
Wait(chopstick[i]);
Wait(.chopstick[(i+1)mod5]);
…
Ea.t;
…
Signal(chopstick[i]);
Signal(chopstick[(i+1)mod5])
Ea.t;
…
Think;
11
Untilfalse;
28.在测量控制系统中的数据采集仸务,把所采集的数据送一单缓冲区;计算仸务从该单
缓冲中叏出数据迚行计算.试写出利用信号量机制实现两者共享单缓冲的同步算法。
答:
a.Varmutex,empty,full:
semaphore:
=1,1,0;
gather:
begin
repeat
……
gatherdatainnextp;
wait(empty);
wait(mutex);
buffer:
=nextp;
signal(mutex);
signal(full);
untilfalse;
end
compute:
begin
repeat
……
wait(full);
wait(mutex);
nextc:
=buffer;
signal(mutex);
signal(empty);
computedatainnextc;
untilfalse;
end
b.Varempty,full:
semaphore:
=1,0;
gather:
begin
repeat
……
gatherdatainnextp;
wait(empty);
buffer:
=nextp;
signal(full);
untilfalse;
end
compute:
begin
repeat
……
wait(full);
nextc:
=buffer;
signal(empty);
computedatainnextc;
untilfalse;
end
29.画图说明管程由哪几部分组成,为什么要引入条件发量?
答:
管程由四部分组成:
①管程的名称;②局部于管程内部的共享数据结构说明;③对该数据结构进行操作的一组过程;④对局部于管程内部的共享数据设臵初始值的语句;
当一个进程调用了管程,在管程中时被阻塞或挂起,直到阻塞或挂起的原因解除,而在此期间,如果该进程不释放管程,则其它进程无法进入管程,被迫长时间地等待。
为了解决这个问题,引入了条件变量condition。
30.如何利用管程来解决生产者不消费者问题?
答:
首先建立一个管程,命名为ProclucerConsumer,包括两个过程:
(1)Put(item)过程。
生产者利用该过程将自己生产的产品放到缓冲池,用整型变
量count表示在缓冲池中已有的产品数目,当count≥n时,表示缓冲池已满,生产者须
等待。
(2)get(item)过程。
消费者利用该过程从缓冲池中取出一个产品,当count≤0
时,表示缓冲池中已无可取的产品,消费者应等待。
PC管程可描述如下:
typeproducer-consumer=monitor
Varin,out,count:
integer;
buffer:
array[0,…,n-1]ofitem;
notfull,notempty:
condition;
procedureentrydot(item)
begin
ifcount>=nthennotfull.wait;
buffer(in):
=nextp;
in:
=(in+1)modn;
count:
=count+1;
ifnotempty.queuethennotempty.signal;
end
procedureentryget(item)
begin
ifcount<=0thennotfull.wait;
nextc:
=buffer(out);
out:
=(out+1)modn;
count:
=count-1;
ifnotfull.quenethennotfull.signal;
end
beginin:
=out:
=0;
count:
=0
end
在利用管程解决生产者一消费者问题时,其中的生产者和消费者可描述为:
producer:
begin
pepeat
produceanineminnestp
PC.put(item);
untilfalse;
end
consumer:
begin
repeat
PC.get(item);
consumetheiteminenxtc;
untilfalse;
end
31.什么是AND信号量?
试利用AND信号量写出生产者一消费者问题的解法。
答:
为解决并行带来的死锁问题,在wait操作中引入AND条件,其基本思想是将进
程在整个运行过程中所需要的所有临界资源,一次性地全部分配给进程,用完后一次性释放。
解决生产者-消费者问题可描述如下:
varmutex,empty,full:
semaphore:
=1,n,0;
buffer:
array[0,...,n-1]ofitem;
in,out:
integer:
=0,0;
begin
parbegin
14
producer:
begin
repeat
…
produceaniteminnextp;
…
wait(empty);
wait(s1,s2,s3,...,sn);//s1,s2,...,sn为执行生产者进程除empty外其余的条件
wait(mutex);
buffer(in):
=nextp;
in:
=(in+1)modn;
signal(mutex);
signal(full);
signal(s1,s2,s3,...,sn);
untilfalse;
end
consumer:
begin
repeat
wait(full);
wait(k1,k2,k3,...,kn);//k1,k2,...,kn为执行消费者进程除full外其余的条件
wait(mutex);
nextc:
=buffer(out);
out:
=(out+1)modn;
signal(mutex);
signal(empty);
signal(k1,k2,k3,...,kn);
consumetheiteminnextc;
untilfalse;
end
parend
end
32.什么是信号量集?
试利用信号量集写出读者一写者问题的解法。
答:
对AND信号量加以扩充,形成的信号量集合的读写机制。
解法:
VarRNinteger;
L,mx:
semaphore:
=RN,1;
begin
parbegin
reader:
begin
repeat
Swait(L,1,1);
Swait(mx,1,1);
…
performreadoperation;
…
Ssignal(L,1);
untilfalse
end
writer:
begin
repeat
Swait(mx,1,1;L,RN,0);
performwriteoperation;
Ssignal(mx,1);
untilfalse
end
parend
end
33.试比较迚程间的低级不高级通信工具。
答:
用户用低级通信工具实现进程通信很不方便,效率低,通信对用户不透明,所有操作都必须由程序员来实现,而高级通信工具弥补了这些缺陷,用户直接利用操作系统提供的一组通信命令,高效地传送大量的数据。
34.当前有哪几种高级通信机制?
答:
共享存储器系统、消息传递系统以及管道通信系统。
35.消息队列通信机制有哪几方面的功能?
答:
(1)构成消息
(2)发送消息(3)接收梢息(4)互斥与同步。
36.为什么要在OS中引入线程?