第三章进程管理课后习题答案.doc
《第三章进程管理课后习题答案.doc》由会员分享,可在线阅读,更多相关《第三章进程管理课后习题答案.doc(9页珍藏版)》请在冰豆网上搜索。
![第三章进程管理课后习题答案.doc](https://file1.bdocx.com/fileroot1/2022-10/9/92e7642f-1226-4b66-bc7e-786d8bea65e0/92e7642f-1226-4b66-bc7e-786d8bea65e01.gif)
进程管理习题
1现代操作系统中为什么要引入“进程”概念?
它与程序有什么区别?
答:
之所以要引入进程的概念,是因为在一些可以并发的程序段之间,存在着某种相互制约的关系,每个程序段的执行不仅要受到其它程序执行的制约,而且还要动态地依赖系统资源的分配情况,因此每个可以并发执行的程序段就会因外界条件的限制而不能运行,被迫处于阻塞状态。
仅用程序的概念无法表示程序的走走停停以及程序运行过程中对资源的竞争现象,因此需要采用一种动态的概念描述并发程序这种走走停停的现象,这就产生了进程的概念。
进程和程序的区别:
(1)进程是程序的执行过程,是动态的过程,属于一种动态概念。
程序是一组有序静态指令和数据的集合,用来指示处理机的操作,是一种静态概念。
(2)从结构上看,每个进程实体是由程序段和相应的数据段两部分构成,并且进程结构中还要包含PCB,即进程控制块。
(3)一个进程可以涉及到一个或几个程序的执行;反之,同一程序可以对应多个进程,即同一个程序段可以在不同数据集合上运行,可以构成不同的进程。
(4)进程能真实地描述并发执行的过程,而程序仅仅是静态指令堆积的序列。
(5)进程有可创建其他进程的功能,而一般的程序不具有创建其它程序的功能。
(6)每一个程序都是在一个进程现场中运行的。
2叙述进程的并发性和制约性。
答:
并发性是进程的重要特征。
即多道程序中多个进程同时向前推进的过程,没个进程总是与其它进程并发地执行的。
进程的制约性是指一个进程的运行受到另一进程的制约。
比如有的进程可能正在等待另一进程的计算结果而无法运行,或者进程所需的资源被别的进程占有而无法运行。
3进程的含义是什么?
如何构造和描述进程?
答:
进程是程序的一次执行。
进程由“进程控制块+程序+数据”构成,用进程控制块描述进程。
4有三个并发进程,R负责从输入设备读入信息并传送给M,M将信息加工并传送给P,P将打印输出,写出下列条件下的并发程序。
(1)双缓冲区,每个区大小为K。
(2)单缓冲区,其大小为K。
答:
(1)双缓冲区,每个区大小为K,信号量初值如下:
mutexR=mutexP=1;
emptyR=emptyP=k;
fullR=fullP=0;
变量的初值如下:
inR=outR=inP=outP=0;
用类Pascal编写程序如下:
var
mutexR,mutexP,emptyR,fullR,emptyP,fullP:
semaphere;
inR,outR,inP,outP:
integer;
buffer:
array0..k-1ofitem;
bufferP:
array0..k-1ofitem;
procedureR
begin
whiletruedo
begin
输入数据data1;
P(emptyR);
P(mutexR);
bufferR(inR):
=data1;
inR:
=(inR+1)mod(k);
V(mutexR);
V(fullR);
end
end;
procedureM
begin
whiletruedo
begin
P(fullR);
P(mutexR);
data2:
=bufferR(outR);
outR:
=(outR+1)mod(k);
V(mutexR);
V(emptyR);
对data2进行加工;
P(emptyP);
P(mutexP);
bufferP(inP):
=data2;
inP:
=(inP+1)mod(k);
V(mutexP);
V(fullP);
end
end;
procedureP:
begin
whiletruedo
begin
P(fullP);
P(mutexP)
data3:
=bufferP(outP);
outP:
=(outP+1)mod(k);
V(mutexP);
V(emptyP);
打印data3;
end
end;
begin
seminitinal(mutexR.v,1;mutexP.v,1;emptyR.v,k;fullR.v,0;emptyP.v,k;fullP.v,0);
inR:
=0;outR:
=0;
inP:
=0;outP:
=0;
cobegin
R;
M;
P;
coend
end.
(2)单缓冲区,大小为k
var
empty,full,ok,mutex :
semaphere;
inR,outR,inP,outP :
integer;
buffer :
array0..k-1ofitem;
procedureR:
begin
whiletruedo
begin
输入数据data1;
P(empty);
P(mutex);
buffer(inR):
=data1;
inR:
=(inR+1)mod(k);
V(mutex);
V(full)
end
end;
procedureM:
begin
whileturedo
begin
P(full);
P(mutex);
data2:
==buffer(outR);
outR:
=(outR+1)mod(k);
V(mutex);
对data2加工;
P(mutex);
buffer(inP):
=data2;
inP:
=(inP+1)mod(k);
V(mutex);
V(ok);
end
end;
proedureP:
begin
whileturedo
begin
P(ok);
P(mutex);
data3:
=buffer(outP);
outP:
=(outP+1)mod(k);
V(mutex);
V(empty);
打印data3;
end;
end
begin
seminitial(empty.v,k;full.v,0;ok.v,0;mutex.v,1);
inR:
=0;outR:
=0;
inP:
=0;outP:
=0;
cobegin
R;
M;
P;
coend
end.
5在生产者与消费者问题的算法中,交换两个V操作的次序会有什么结果?
交换两P操作的次序呢?
说明理由。
答:
交换两P操作的次序有可能造成死锁。
例如,当无空缓冲区时,如果此时生产者先做互斥操作,即:
P(mutex),然后才做同步操作P(empty),由于此时empty=-1造成生产者被阻塞。
当消费者执行到互斥操作P(mutex)时,由于生产者已执行过P(mutex)并未作释放,所以此时mutex=-1,造成消费者也被阻塞,生产者等消费者释放空缓冲区,而消费者则等待生产者释放临界资源的使用权,所以两个进程都无法向前推进而造成死锁。
交换两个V操作的次序不会发生死锁。
6设有三个进程A、B、C,其中A与B构成一对生产者与消费者(A为生产者,B为消费者),共享一个由n个缓冲块组成的缓冲池;B与C也构成一对生产者与消费者(此时B为生产者,C为消费者),共享另一个由m个缓冲块组成的缓冲池。
用P、V操作描述它们之间的同步关系。
答:
var
mutexA,emptyA,fullA,mutexC,emptyC,fullC :
semaphere;
i,j,a,b :
integer;
bufferA:
array0..n-1ofitem
bufferC:
array0..m-1ofitem;
procedureproduceA:
生产者进程A
begin
whileturedo
begin
Producenextproduct;
P(emptyA);
P(mutexA);
bufferA(i):
=products;
i:
=(i+1)mod(n);
V(mutexA);
V(fullA)
end
end
procedureconsumer_procedurerB:
消费者和生产者进程B
begin
whileturedo
begin
P(fullA);
P(mutexA);
Goods:
=buffer(j);
j:
=(j+1)mod(n);
V(mutexA);
V(emptyA);
ConsumegoodsandProducenextproductC;
P(emptyC);
P(mutexC);
BufferC(a):
=productC;
a:
=(a+1)mod(m);
V(mutexC);
V(fullC)
end
end;
procedureconsumerC;消费者C进程
begin
whileturedo
begin
P(fullC);
P(mutexC);
Goods:
=bufferC(b);
b:
=(b+1)mod(m);
V(mutexC);
V(emptyC);
Consumeproduct;
end
end;
begin
Seminitsal(mutexA.v,1;mutexC.v,1;emptyA.v,n;emptyC.v,m;fullA.V,0;fullC.V,0);
i:
=0;j:
=0;a:
=0;b:
=0;
cobegin
produceA
consumer_procedurerB;
consumerC
coend
end.
7有一阅览室,共有100个座位。
读者进入时必须先在一张登记表上登记,该表为每一座位列一表目,包括座号和读者姓名。
读者离开时要消掉登记内容。
试用P、V操作描述读者进程的同步结构。
答:
var
mutex :
semaphere; 信号量,用于互斥
full:
semaphere; 信号量,用于同步
table:
array0..n-1ofitem; 登记表
procedurereader; 读者进程
begin
P(full);
P(mutex);
Register_name(table);
V(mutex);
Reading;
P(mutex);
Delet_name(table);
V(mutex);
V(full)
end;
begin
seminitsal(mutex.v,1;full.v,100); 初始化
cobegin
reader;
reader;
...
coend
end.
8.引入线程的目的是什么?
答:
引入线程的目的是提高程序执行的并行度。
9引入管程的目的是什么?
答:
引入管程的目的把分散的临界区集中起来管理,为每个可共享的资源设立一个专门的机构来统一管理各进程对该共享资源的访问。
这样使互斥操作更安全,既便于系统管理共享资源,又能保证互斥访问。
10用管程实现读者与写者关系。
管程部分描述如下:
monitorrw;
conditionwrt;
varreadcount:
integer;
procedureentryread_start();
begin
readcount:
=readcount+1;
end;
procedureentryread_finish();
begin
readcount:
=readcount-1;
ifreadcount=0thensingal(wrt)
end;
procedureentry