操作系统习题集2进程管理.docx
- 文档编号:30299071
- 上传时间:2023-08-13
- 格式:DOCX
- 页数:29
- 大小:36.87KB
操作系统习题集2进程管理.docx
《操作系统习题集2进程管理.docx》由会员分享,可在线阅读,更多相关《操作系统习题集2进程管理.docx(29页珍藏版)》请在冰豆网上搜索。
操作系统习题集2进程管理
习题集-2-进程管理
1.在优先级调度中,__________类进程可能被“饿死”,即长时间得不到调度。
A.短进程B.长进程C.低优先级进程D.大内存进程
解:
C。
优先级调度算法(PRI)的基本思想是:
内核为每个进程赋予一个优先级,进程按照优先级的大小顺序在就绪队列中排队,内核将CPU分配给就绪队列头部的第一个进程——优先级最大的进程。
因此,进程的优先级越低,在就绪队列中的排队位置就越靠近队列尾,获得运行之前的等待时间就越长。
低优先级的进程必须等待所有高优先级进程运行结束后才会被调度运行。
如果不断有高优先级的进程加入就绪队列,那么低优先级进程就会一直等待下去。
这就是所谓的“饿死”现象。
2.在下面的系统调用中,__________不会导致进程阻塞。
A.读/写文件B.获得进程PIDC.申请内存D.发送消息
解:
B。
当正在执行的进程需要使用某种资源或等待某个事件时,如果资源已被其他进程占用或事件尚未出现,该进程不能获得所需的资源而无法继续运行,于是,进程将被阻塞。
进程在阻塞状态中等待资源被释放,或等待事件的发生。
所以,进程在执行系统调用时,如果需要使用某种资源,就可能导致进程阻塞。
“读/写文件”需要使用设备和文件缓冲区;“申请内存”需要分配内存资源;“发送消息”需要使用消息缓冲区。
3.下面关于临界区的叙述中,正确的是__________
A.临界区可以允许规定数目的多个进程同时执行
B.临界区只包含一个程序段
C.临界区是必须互斥地执行的程序段
D.临界区的执行不能被中断
解:
C。
临界段(临界区)的概念包括两个部分:
①临界资源:
必须互斥访问的资源。
例如,需要独占使用的硬件资源,多个进程共享的变量、结构、队列、栈、文件等软件资源。
②临界区:
访问临界资源的、必须互斥地执行的程序段。
即,当一个进程在某个临界段中执行时,其他进程不能进入相同临界资源的任何临界段。
4.资源顺序分配法破坏了死锁发生的__________必要条件。
A.互斥占用B.占有等待C.非剥夺D.循环等待
解:
D。
资源顺序分配方法是:
给系统中的每类资源赋予一个自然数的序号,限制进程只能严格按照资源序号由小到大的顺序申请资源。
该方法可以避免“循环等待”的情况发生。
因为,若出现循环等待,则必会有进程在获得大序号资源后申请小序号资源。
5.假设某操作系统采用RR调度策略,分配给A类进程的时间片为100ms,分配给B类进程的时间片为400ms,就绪进程队列的平均长度为5(包括正在运行的进程),其中A类进程有4个,B类进程有1个,所有进程的平均服务时间为2s,问A类进程和B类进程的平均周转时间各为多少?
(不考虑IO情况)
解析:
时间片轮转调度(RR)是轮流地调度就绪队列中的每个进程,进程每次占用CPU的时间长度限制为时间片的大小。
当采用固定的时间片大小时,每个进程按照固定周期被循环地执行。
所以,进程的执行速度是由该进程的时间片大小在一个循环周期中所占的比例决定的,比例越高,进程的相对执行速度就越快。
解:
因为就绪进程队列的平均长度为5,单个RR调度循环周期的时间为
4×100+1×400=800(ms)
A类进程需要20个时间片的执行时间,B类进程需要5个时间片的执行时间(1s=1000ms)。
A类进程的平均周转时间为
20×0.8=16(s)
B类进程的平均周转时间为
5×0.8=4(s)
6.某多道程序设计系统中配有一台处理器CPU和两台输入/输出设备IO1、IO2,现有优先级由高到低的3个进程P1、P2、P3同时存在,它们使用资源的先后顺序和占用时间分别是:
进程P1:
IO2(30ms),CPU(10ms),IO1(30ms),CPU(10ms),IO2(10ms)。
进程P2:
IO1(20ms),CPU(20ms),IO1(40ms)。
进程P3:
CPU(30ms),IO2(20ms)。
若进程调度采用“可抢占的最高优先级”调度算法,且忽略调度等所需的时间,请回答下列问题:
(1)进程P1、P2、P3从开始到完成所用的时间分别是多少?
(要求用坐标画出进程P1、P2、P3的工作过程,其中横坐标表示时间,纵坐标表示CPU和IO设备。
)
(2)这3个进程从开始到全部完成时CPU的利用率为多少?
IO1、IO2的利用率为多少?
解析:
在“可抢占的最高优先级”调度中,任何时刻内核都将处理机分配给当前最高优先级的就绪进程。
也就是说,只有当高优先级进程主动放弃CPU时,低优先级进程才有机会运行,并且,一旦高优先级进程需要使用CPU时,内核就会剥夺低优先级进程的CPU,分配给它使用。
在本题中,由于进程P1和P2在开始执行时先需要进行IO,所以最低优先级的进程P3获得了CPU。
但是,P3运行了20ms后就被P2抢占了CPU,因为P2刚好完成了IO,并且P2的优先级大于P3。
同样的原因,P2运行了10ms后,就被P1抢占了CPU。
P1在CPU上运行10ms之后再次需要进行IO而放弃CPU,于是,P2、P1获得继续运行的机会。
以此方式,P1、P2和P3相继完成自己的运行过程。
解:
根据“可抢占的最高优先级”调度算法,画出进程P1、P2、P3的工作过程(见图29)。
图2.9进程P1、P2、P3
进程P1、P2、P3从开始到完成所用的时间分别是90ms、110ms、80ms。
这3个进程从开始到全部完成时的时间为110(ms),在此期间内:
CPU的利用率=(30+20+10+10)/110=63.6%
IO1的利用率=(20+30+40)/110=81.8%
IO2的利用率=(30+20+10)/110=54.5%
7.论述以下解决双进程临界区问题的软件算法是错误的。
ProcessP0:
do{
flag[0]=true;①
while(flag[1]);③
临界区
flag[0]=false;
}while
(1);
ProcessP1:
do{
flag[1]=true;②
while(flag[0]);④
临界区
flag[1]=false;
}while
(1);
解析:
在算法中,两个进程P1和P2各自拥有自己的标志牌flag[0]和flag[1]。
当进程需要进入临界区时,举起标志牌(设置值为true)。
然后观察对方是否举起标志牌,是则等待并继续观察(while语句),直到对方放下标志牌(设置值为false)。
这时,进程才进入临界区。
进程退出临界区时,放下标志牌(设置值为false)。
解:
通过使用标志牌flag[0]和flag[1],能够保证满足“互斥”条件。
但是,当两个进程按照①②③④的顺序执行程序时,它们各自举起了标志牌,同时都因为观察到对方也举起了标志牌而等待在while语句中。
由于两个进程都不会放下自己的标志牌,因此都无法进入临界区,不能满足“有限等待”的条件。
所以,上述解决双进程临界区问题的算法是错误的。
8.以下解决双进程访问共享变量count的程序是否存在错误?
试用信号量实现。
Share:
count=0;
Int:
flag[2];
cobegin
ProcessP0:
do{
flag[0]=true;①
while(flag[1]);③
count=count+1;
flag[0]=false;
}while
(1);
ProcessP1:
do{
flag[1]=true;②
while(flag[0]);④
count=count+1;
flag[1]=false;
}while
(1);
coend
解:
在上述程序中,访问共享变量的语句count=count+1构成临界区。
两个进程P0和P1各自拥有自己的标志牌flag[0]和flag[1]。
当进程需要进入临界区时,举起标志牌(设置值为true)。
然后观察对方是否举起标志牌,是则等待并继续观察(while语句),直到对方放下标志牌(设置值为false)。
这时,进程才进入临界区。
进程退出临界区时,放下标志牌(设置值为false)。
通过使用标志牌flag[0]和flag[1],能够保证满足“单一进入”的条件。
但是,当两个进程按照①、②、③、④的顺序执行程序时,它们各自举起了标志牌,同时都因为观察到对方也举起了标志牌而等待在while语句中。
由于两个进程都不会放下自己的标志牌,因此都无法进入临界区,不能满足“有限等待”的条件。
所以,上述程序是错误的。
设置信号量S实现对共享变量count的互斥访问。
Share:
count=0;
structsemaphoreS=1;
cobegin
ProcessP0:
do{
P(S);
count=count+1;
V(S);
}while
(1);
ProcessP1:
do{
P(S);
count=count+1;
V(S);
}while
(1);
coend
9.假定一个阅览室最多可容纳100人,读者进入和离开阅览室时都必须在阅览室门口的一个登记表上进行登记,而且每次只允许一人进行登记操作。
用信号量实现该过程。
解:
设置信号量S:
控制进入阅览室的人数。
初值=100。
设置信号量mutex:
控制登记表的互斥使用。
初值=1。
structsemaphores=100,mutex=1;
cobegin
reader(i)(i=1,2,…,k)
{
P(S);
P(mutex);
写登记表;
V(mutex);
阅读;
P(mutex);
写登记表;
V(mutex);
V(S);
离开;
}
coend
10.在具有N个进程的系统中,允许M个进程(N≥M≥1)同时进入它们的共享区,其信号量S的值的变化范围是
(1),处于等待状态的进程数最多是
(2)个。
解:
信号量S用于控制进入共享区的进程数,初值为M。
极端情况是N个进程都需要进入共享区。
(1)(M-N,M);
(2)N-M
11.在测量控制系统中,数据采集任务把所采集的数据送一单缓冲区;计算任务从该缓冲区中取出数据进行计算。
试写出利用信号量机制实现两者共享单缓冲区的同步操作算法。
解:
设置信号量S1和S2控制数据采集任务与计算任务之间的同步。
初值:
S1=1,S2=0。
structsemaphoreS1=1,S2=0;
cobegin
数据采集任务:
计算任务:
beginbegin
While(true){While(true){
采集数据;P(S2);
P(S1);从缓冲区读出数据;
数据写入缓冲区;V(S1);
V(S2);计算;
}}
endend
coend
12.有n+1个进程A1,A2,…,An和B,A1,…,An通过同一缓冲区各自不断向B发消息,B不断取消息,它必须取走发来的每一个消息。
刚开始时缓冲区为空,试用P、V操作正确实现之。
解:
设置信号量S1和S2控制进程Ai与进程B之间的同步。
初值:
S1=1,S2=0。
设置信号量S控制进程Ai之间互斥地使用缓冲区。
初值:
S=1。
structsemaphoreS1=1,S2=0,S=1;
cobegin
进程Ai(i=1,2,···,n):
进程B:
beginbegin
While(true){While(true){
P(S1);P(S2);
P(S);从缓冲区读出消息;
消息写入缓冲区;V(S1);
V(S);}
V(S2);
}end
end
coend
13.桌子上有一只盘子,每次只能放入或取出一个水果。
现有许多苹果和橘子。
一家四口人各行其职。
爸爸专向盘子中放苹果,妈妈专向盘子中放橘子,儿子专等吃盘子中的橘子,女儿专等吃盘子中的苹果。
请用PV操作来实现四人之间的同步算法。
解:
设置信号量empty表示盘子的状态。
初值:
empty=1。
设置信号量apple表示盘子中的苹果。
初值:
apple=0。
设置信号量orange表示盘子中的橘子。
初值:
orange=0。
structsemaphoreempty=1,apple=0,orange=0;
Parbegin
爸爸:
begin
L1:
P(empty);
放苹果;
V(apple);
GotoL1;
End;
妈妈:
begin
L2:
P(empty);
放橘子;
V(orange);
GotoL2;
End;
女儿:
begin
L3:
P(apple);
取苹果;
V(empty);
GotoL3;
End;
儿子:
begin
L4:
P(orange);
取橘子;
V(empty);
GotoL4;
End;
Parend
14.下面是两个并发执行的进程。
它们能正确运行吗?
若不能请举例说明,并改正之。
Parbegin
Varx:
integer;
ProcessP1ProcessP2
Vary,z:
integer;Vart,u:
mteger;
BeginBegin
x:
=1;①x:
=0;②
y:
=0;③t:
=0;⑥
ifx>=1theny:
=y+1;④ifx<=1thent:
=t+2;⑦
z:
=y;⑤u:
=t;⑧
endend
Parend
解:
变量x是两个进程的共享资源。
若先执行P1,后执行P2,结果为Y=1,Z=1,T=2,U=2;若并发执行P1和P2,并按图中标示的顺序执行,则结果为Y=0,Z=0。
即不能正确运行。
改正的方法是为临界资源x设置信号量S,初值为1。
程序如下:
Parbegin
Varx:
integer;
structsemaphoreS=1;
ProcessP1ProcessP2
Vary,z:
integer;Vart,u:
mteger;
BeginBegin
P(S);P(S);
x:
=1;①x:
=0;②
y:
=0;③t:
=0;⑥
ifx>=1theny:
=y+1;④ifx<=1thent:
=t+2;⑦
V(S);V(S);
z:
=y;⑤u:
=t;⑧
endend
Parend
15.兄弟俩共同使用一个账号,每次限存或取10元,存钱与取钱的进程分别如下所示:
begin
amount:
integer;
amount:
=0;
cobegin
processSAVE
m1:
integer;
begin
m1:
=amount;①
m1:
=m1+10;
amount:
=m1;②
end;
processTAKE
m2:
integer;
begin
m2:
=amount;③
m2:
=m2-10;
amount:
=m2;④
end;
eoend;
end;
由于兄弟俩可能同时存钱和取钱,因此两个进程是并发的。
若哥哥先存了两次钱,但在第三次存钱的时候,弟弟在取钱,请问最后账号amount上面可能出现的值?
如何用P、V操作实现两并发进程的正确执行?
解:
哥哥存两次钱后,amount=20,第三次存钱时,弟弟正在取钱,因没有对amout互斥操作,则可能发生下面的情况;
(1)执行顺序为①②③④或③④①②:
amount=20;
(2)执行顺序为①③②④或③①②④:
amount=10;
(3)执行顺序为①③④②或③①④②:
amount=30;
设信号量mutex(初值为1)控制两进程对变量amount的互斥使用。
正确过程如下:
begin
amount:
integer;
amount:
=0;
structsemaphoremutex=1;
cobegin
processSAVE
m1:
integer;
begin
P(mutex);
m1:
=amount;①
m1:
=m1+10;
amount:
=m1;②
V(mutex);
end;
processTAKE
m2:
integer;
begin
P(mutex);
m2:
=amount;③
m2:
=m2-10;
amount:
=m2;④
V(mutex);
end;
eoend;
end;
16.战地指挥官通过无线电不断地向他的三个士兵下达作战指令,但是他必须在得到所有士兵对前一条指令的“确认”之后才能下达新的指令。
请使用P、V操作进行指挥官和士兵之间的协同管理。
解:
设置信号量S1表示士兵1的“确认”信息。
初值:
S1=1。
设置信号量S2表示士兵2的“确认”信息。
初值:
S2=1。
设置信号量S3表示士兵3的“确认”信息。
初值:
S3=1。
begin
structsemaphoreS1=1,S2=1,S3=1;
cobegin
process指挥官:
begin
while(true){
P(S1);P(S2);P(S3);
向士兵1发送指令;
向士兵2发送指令;
向士兵3发送指令;
}
end;
process士兵1
begin
while(true){
接收指挥官的指令;
V(S1);
}
end;
process士兵2
begin
while(true){
接收指挥官的指令;
V(S2);
}
end;
process士兵3
begin
while(true){
接收指挥官的指令;
V(S3);
}
end;
eoend;
end;
17.三个并发进程通过缓冲区bufl,buf2以及信号量nonel,nonfl,none2,nonf2,sl和s2协作完成如下图的任务,bufl,buf2的大小分别为n1,n2。
18.三个进程如下,试补充完整:
初值:
nonel=none2=0;nonfl=nl,nonf2=n2,sl=1,s2=1。
输入进程:
while
(1){
(1)
P(s1);
输入一个字符到bufl;
V(s1);
(2);
}
加工进程:
while
(1){
P(nonel);
(3);
从buf1中取一个字符到ch;
(4);
V(nonfl);
P(nonf2);
P(s2);
ch送bur2;
V(s2);
V(none2);
}
输出进程:
while
(1){
(5);
(6);
从bur2取一个字符到打印口;
(7);
(8);
}
解:
通过分析程序可知,信号量s1和s2分别用于实现对缓冲区buf1,buf2的互斥访问;nonel和nonfl用于实现输入进程与加工进程之间的同步,none2和nonf2用于实现加工进程与输出进程之间的同步。
(1)P(nonfl)
(2)V(nonel)(3)P(s1)(4)V(s1)
(5)P(none2)(6)P(s2)(7)V(s2)(8)V(nonf2)
19.一个仓库,可以存放A和B两种产品,但要求:
(1)每次只能存人一种产品(A或B);
(2)A产品数量—B产品数量 (3)B产品数量—A产品数量 其中,M、N是正整数,试用P、V操作描述产品A与产品B的入库过程。 解: 条件 (1)说明产品A与产品B必须互斥地放入仓库。 条件 (2)和(3)说明每放入一个产品B,就可以多放入一个产品A;反之亦然。 设置信号量mutex控制产品A与产品B互斥地放入仓库。 初值: mutex=1。 设置信号量Sa表示可以放入仓库的产品A的数目。 初值: Sa=M-1。 设置信号量Sb表示可以放入仓库的产品B的数目。 初值: Sb=N-1。 产品A与产品B的入库过程如下: Semaphore: Sa,Sb,mutex; Sa=m-1;Sb=n-1;mutex=1; process_A(){ while (1){ P(Sa); P(mutex); A产品入库; V(mutex); V(Sb); } } process_B(){ while (1){ P(Sb); P(mutex); B产品入库; V(mutex); V(Sa); } } 20.今有A、B两组进程共享文件P,规定同组进程可以同时读文件P,但当有A组(或B组)进程在读文件P时,就不允许B组(或A组)进程读文件P。 现定义两个计数器C1和C2,分别记录A组和B组中读文件P的进程数。 当用P、V操作进行管理时,需要三个信号量S1、S2和SAB才能保证正确地并发执行。 程序结构如下: begin S1,S2,SAB: semaphore; C1,C2: integer; S1: =1;S2: =1;SAB: =1;C1: =0;C2: =0; cobegin processAi(i=1,2,···) begin ();/* (1)*/ C1: =C1+1; IfCl=lthen();/* (2)*/ ();/*(3)*/ readP; ();/*(4)*/ C1: =C1-1; ifC1=0then();/*(5)*/ ();/*(6)*/ end; processBj(j=1,2,···) begin ();/*(7)*/ C2: =C2+1; IfC2=lthen();/*(8)*/ ();/*(9)*/ readP; ();/*(l0)/ C2: =C2-1; ifC2=0then();/*(11)*/ ();/*(12)*/ end; eoend; end; 请回答: (1)说明信号量S1,S2,SAB
- 配套讲稿:
如PPT文件的首页显示word图标,表示该PPT已包含配套word讲稿。双击word图标可打开word文档。
- 特殊限制:
部分文档作品中含有的国旗、国徽等图片,仅作为作品整体效果示例展示,禁止商用。设计者仅对作品中独创性部分享有著作权。
- 关 键 词:
- 操作系统习题集 进程管理 操作系统 习题集 进程 管理