第三章作业2Word文档下载推荐.docx
- 文档编号:21989573
- 上传时间:2023-02-02
- 格式:DOCX
- 页数:17
- 大小:44.19KB
第三章作业2Word文档下载推荐.docx
《第三章作业2Word文档下载推荐.docx》由会员分享,可在线阅读,更多相关《第三章作业2Word文档下载推荐.docx(17页珍藏版)》请在冰豆网上搜索。
P(S)P(S)
S1S2
V(S)V(S)
其中的S1、S2是两互斥的程序段,即P1、P2的临界区
信号量的物理意义
在操作系统中,信号量是表示资源的实体,是一个与队列有关的整型变量,其值仅能由P、V操作来改变。
14.如何用P、V操作实现进程间的同步?
在同步和互斥中,信号量初值的设置有何不同?
用P、V操作实现进程间的同步
信号量初值为0,两个进程之间的同步模型如下:
进程P1进程P2
L1:
P(S)L2:
V(S)
在这种同步操作中,进程p1受到进程P2的制约,而进程P2却不受进程P1的制约,所以是非对称的。
在同步中,信号量初值的设置为0;
在互斥中,信号量的初值设置为1。
15.试分析生产者—消费者问题的同步过程,并写出相应程序?
设三个信号量:
1、信号量S,初值为1,表示没有产品进入临界区,用于互斥;
2、信号量n1,表示可用缓冲区个数,初值为k
3、信号量n2,表示产品个数,初值为0
生产者—消费者进程描述如下:
问题分析:
当生产者生产出一个产品,对信号量n1进行p操作,n1减1,表示申请占用一个缓冲区。
只有n1大于等于0则继续执行,当n1小于0是进程阻塞。
若n1大于等于0,再对S进行p操作,此时S=0,该进程继续执行,产品放入缓冲区,再对S进行v操作,此时S=1,继续执行,对产品个数n2进行v操作,即产品个数加1.
当有消费者消费产品时,对产品个数n2进行p操作,即产品个数减1,只有n2大于等于0则继续执行,当n2小于0是进程阻塞。
若n,2大于等于0,继续对S进行p操作,此时S=0,产品从缓冲区取出,再对S进行v操作,S=1,继续执行,对缓冲区个数进行v操作,即缓冲区个数加1.
相应程序:
begin
B:
array[0..n-1]ofinteger;
P,R:
integer;
S,Sn,So:
semaphore;
p:
=R:
=0
S:
=1;
Sn:
=n;
So:
=0;
cobegin
processproduceri(i=1,2,……,m)
begin
L1:
produceaproduct;
P(Sn);
P(S);
B[P]:
=product;
P:
=(P+1)modn;
V(So);
V(S);
gotoL1
end;
processconsumerj(j=1,2,…k)
beginL2:
P(So);
P(S);
takeaproductfromB[R];
R:
=(R+1)modn;
V(Sn);
consume
gotoL2
end
coend;
16.高级通讯原语何有优点?
在消息缓冲中通讯方式中,发送原语和接收原语的功能是什么?
P、V操作实现的是进程之间的低级通讯,所以P、V为低级通讯原语。
它只能传递简单的信号,不能传递交换大量信息。
高级通信原语优点便是:
能够实现在进程之间传递大量的信息。
发送原语的功能:
将欲发送的消息从发送区复制到消息缓冲区,并把它挂起在接收进程的消息缓冲队列末尾。
如果该接收进程因等待消息而处于阻塞状态,则将其唤醒。
接收原语的功能:
把发送者发来的消息从消息缓冲区复制到接收区,然后将消息缓冲区从消息队列中消去,如果没有消息可以接收,则进入阻塞状态。
17.何谓死锁?
产生死锁的原因和必要条件是什么?
为什么说死锁是与时间有关的一种错误?
死锁:
一组进程中,每个进程都无限等待被该组进程中另一进程所占有的资源,因而永远无法得到的资源,这种现象称为进程死锁。
产生死锁的原因
1.竞争资源引起
永久性资源:
可以被多个进程多次使用(可再用资源)
•剥夺性资源(CPU、内存)
•非剥夺性资源(磁带机、打印机)
•竞争非剥夺性资源会引起死锁
临时性资源:
只可使用一次的资源;
如信号量,中断信号,同步信号等(可消耗性资源)
竞争临时性资源也会引起死锁
2.进程推进顺序不当引起
对资源采用“申请--分配--使用--释放”模式,由于推进顺序不当两进程都要申请对方已占有的资源
产生死锁的必要条件
1)互斥条件(资源独占):
一个资源每次只能给一个进程使用
2)不可剥夺条件(不可强占):
资源申请者不能强行的从资源占有者手中夺取资源,资源只能由占有者自愿释放
3)请求和保持条件:
(部分分配,占有申请)
在申请新的资源的同时保持对原有资源的占有。
4)循环等待条件:
存在一个进程-等待资源环形链{P1,P2,…,Pn},其中P1等待P2占有的资源,P2等待P3占有的资源,…,Pn等待P1占有的资源。
当进程争夺资源时,有可能产生死锁,但不一定就会死锁。
这取决于各进程推进的速度和对资源请求的顺序,从而说明死锁是一种与时间有关的错误。
18.对死锁问题的处理,有哪几种策略?
A鸵鸟策略
采取不理睬的策略
B预防策略
破坏死锁的四个必要条件
C避免策略
精心地分配资源,动态地回避死锁
D检测和解除
一旦发生死锁,及时检测出来,并采取措施解除死锁。
19.怎么预防死锁发生?
常用的方法有哪些?
系统设计时确定资源分配算法,保证不发生死锁。
做法是破坏产生死锁的四个必要条件之一。
1.破坏“不可剥夺”条件
在允许进程动态申请资源前提下规定,一个进程在申请新的资源不能立即满足而变为等待状态之前,必须释放已占有的全部资源,若需要再重新申请。
2.破坏“请求和保持”条件
要求每个进程在运行前必须一次性申请它所要求的所有资源,且仅当该进程所要资源均可满足时才给予一次性分配。
3.破坏“循环等待”条件
采用资源有序分配法:
把系统中所有资源编号,进程在申请资源时必须严格按资源编号的递增次序进行,否则操作系统不予分配。
4、破坏“互斥性”条件
允许一个资源可由多个进程同时使用(缺点:
对有的资源行不通,例如打印机)
23.设有n个进程共享一个互斥段,如果
1)每次只允许一个进程进入互斥段;
2)每次最多允许m个进程(m<
n)同时进入互斥段。
试问,所采用的信号量初值是否相同?
信号量值的变化范围如何?
(1)所采用的初值是不相同的,其中的初值是1,变化范围是[-1,1],
(2)中的初值是n,变化范围是[-(n-m),m]
24.有一阅览室,读者进入时必须先在一张登记表上进行登记。
该表为每一座位列出一个表目,包括座位、姓名。
读者离开要撤离登记信息。
阅览室有100个座位。
(1)读者的动作有两个,一是填表进入阅览室,这时要考虑阅览室里是否有座位;
一是读者阅读完毕,离开阅览室,这时的操作要考虑阅览室里是否有读者。
读者在阅览室读书时,由于没有引起资源的变动,不算动作变化。
故应编写1个程序,设置2个进程。
进程是程序的一部分,程序运行的时候会产生进程。
(2)
设算法的信号量:
seats——表示阅览室是否有座位(初值为100,代表阅览室的空座位数);
readers——表示阅览室里的读者数,初值为0;
用于互斥的mutex,初值为1。
读者进入阅览室的动作描述getin:
while(TRUE){
P(seats);
/*没有座位则离开*/
P(mutex)/*进入临界区*/
填写登记表;
进入阅览室读书;
V(mutex)/*离开临界区*/
V(readers)
}
读者离开阅览室的动作描述getout:
P(readers)/*阅览室是否有人读书*/
消掉登记;
离开阅览室;
V(seats)/*释放一个座位资源*/
25.设有两个优先级相同的进程P1、P2。
令信号量S1、S1的初值为0,试问P1、P2并发运行结束后x=?
y=?
z=?
(图见书)
因为P1、P1是两个并发进程,所以进程调度程序调度P1和P2的顺序是不确定的。
假设P1先执行,进程P1执行到语句P(S2)时S2=-1,进程P1阻塞。
此时y=3,z=4,。
当进程调度程序调度到P2时,由于进程P1已执行了V(S1),进程P2在执行P(S1)时未阻塞而继续执行,当执行到V(S2)时将P1唤醒,分以下两种情况:
A.执行P2最后一个语句,此时x=5,z=9,当进程P1再次被调度时,继续执行P1的最后一条语句,此时y=12,最终结果为x=5,y=12,z=9
B.如果当P2进程执行到V(S2)时,将P1唤醒,然后P2进程被中断,此时x=5,y=3,z=4.P1进程开始执行然后执行最后一个语句,此时x=5,y=7,z=4,然后P2被调度,执行z:
=x+z,此时x=5,y=7,z=9.
26.设有三个并发进程R、M、P,它们共享一个缓冲区。
进程R负责从输入设备读入信息,每读一个记录后就把它存入缓冲区中;
M负责对缓冲区中的纪录进行加工;
P把加工后的纪录打印输出。
读入的纪录加工输出后,缓冲区中又可存放下一记录。
试写出能正确执行的程序。
三个进程共用一个缓冲区,他们必须同步工作,可定义三个信号量:
S1:
表示是否可把读人的记录放到缓冲区,初始值为1.
S2:
表示是否可对缓冲区中的记录加工,初始值为0.
S3:
表示记录是否加工好,可以输出,初始值也为0.
三个进程可如下设计:
begin
S1,S2,S3:
semaphore;
S1:
=l;
=S3:
=0;
cobegin
processR
L1:
读记录;
P(S1);
记录存入缓冲区;
V(S2);
gotoL1;
end;
processM
L2:
P(S2);
加工记录;
V(S3);
gotoL2;
processP
L3:
P(S3);
输出加工后的记录;
V(S1);
gotoL3;
coend;
end
28.桌上有一只盘子,每次只能放入一个水果。
爸爸专向盘中放苹果,妈妈专向盘中放桔子,儿子专等吃盘里的桔子,女儿专等吃盘里的苹果。
用PV操作实现四人正确活动的程序。
解:
四人之间的关系:
1爸爸,妈妈要互斥使用盘子,所以两者之间是互斥关系;
2爸爸放的苹果,女儿吃,所以两者是同步关系;
3妈妈放的桔子,儿子吃,所以两者也是同步关系。
Structsemaphores=1,so=0,sa=0;
//s表示盘空,so表示橘子,sa表示苹果。
Cobegin
Voidfather(void)
{
while
(1){
p(s);
putapple();
v(sa);
Voidmother(void)
putorange();
v(so);
Voidson(void)
p(so);
eatorange();
v(s);
Voiddaughter(void)
p(sa);
eatapple();
Coend
30.在一个盒子里,混装了数量相等的围棋白子和黑子。
现在要用自动分拣系统把白子和黑子分开。
该系统设有两个进程P1和P2,其中P1拣白子,P2拣黑子。
规定每个进程每次只拣一子,当一进程正在拣子时,不允许另一个进程去拣,当一进程拣了一子时,必须让另一进程去拣,试写出两个并发进程能正确执行的算法。
设信号量S1和S2分别表示可拣白子和黑子
varS1,S2:
semaphore;
S1:
S2:
{
processP1
repeat
P(S1);
拣白子
V(S2);
untilfalse;
end
processP2
P(S2);
拣黑子
V(S1);
coend
赞同
31.在系统中仅有m个同类资源,由n个进程互斥使用。
若每个进程对R资源的最大需求为w,那么当m、n、w取下表的值时,对于下表中的a~e五种情况,那种可能发生死锁?
如果可能死锁请举例说明。
abcde
m22244
n12233
w21223
c和e可能发生死锁。
因为c中2个进程每个进程都只占有一个,那么系统就没有更多的资源了,因此它们就相互等待了,而进入了死锁。
同理e中3个进程每个进程都只占有一个资源,那系统就只剩一个资源了,此时无论分给那个进程都会进入死锁。
32.利用P、V操作,怎样才能保证进程Pi能按图的次序正确执行,其中S表示开始,F表示结束。
(1)程序描述为:
main()
....
int
s12,s13=0;
//表示p2,p3是否可以执行;
s24,s34=0;
//p2,p3是否执行;
cobegin
p1();
p2();
p3();
p4();
coend
}
p1()
...
v(s12);
v(s13);
p2()
p(s12);
v(s24);
p3()
p(s13);
v(s34);
p4()
p(s24);
p(s34);
(2)设信号量S3=0,S4=0,S5=0,S6=0
p5();
p6();
v(s3);
p(s3);
v(s4);
v(s5);
v(s6);
p(s4);
P5()
p(s5);
P6()
p(s6);
33.四个进程P0、P1、P2、P3和四个信箱M0、M1、M2、M3,进程间借助相邻的信箱传递消息,是以P,V操作写出进程的同步算法。
定义如下公共信号量:
mutex0~mutex3:
分别用于控制互斥访问M0~M3,初值为1。
full0~full3:
分别用于控制同步访问M0~M3,其中full0初值为3,full1~full3初值为0,表示信箱中消息条数。
empty0~empty3:
分别用于同步控制对M0~M3的访问。
Empty0初值为0,empty2~
empty3初值为2,empty1初值为3,分别用于表示信箱中空格子个数。
另用send(Mi,message)表示将消息送到(Mimod4)号信箱中;
而用receive(Mi,
message)表示接收已存在于(Mimod4)中的消息。
则使用信号量实现进程Pi(i=0,1,2,3)同步及互斥的流程如下:
mutex0,mutex1,mutex2,mutex3:
semaphore;
full0,full1,full2,full3:
empty0,empty1,empty2,empty3:
begin
mutex0:
=1;
mutex1:
mutex2:
mutex:
full0:
=3;
full1:
=0;
full2:
full3:
empty0:
empty1:
empty2:
=2;
empty3:
Parbegin
P0:
begin
repeat
P(mutex0);
P(full0);
Receive(M0,message);
V(empty0);
Processingthemessageuntilfinished;
P(mutex1);
P(empty1);
Send(M1,message);
V(full1);
V(mutex1);
Untilfalse;
…
end;
P1:
{可类似于P0实现之};
P2:
P3:
Parend;
End;
35.下面是两个并发执行的进程,他们能正确运行吗?
Varx:
integer;
Vary,z:
x:
y:
ifx≥1theny:
=y+1;
z:
=y
Vart,u:
t:
ifx<
1thent:
=t+2
u:
=t
作业题补充
1、如果系统中有N个进程,运行的进程最多几个,最少几个;
就绪进程最多几个最少几个;
等待进程最多几个,最少几个?
运行状态最多1个,最少0个;
就绪状态最多N-1个,最少0个;
等待状态最多N个,最少N-1个。
2、考虑一个理发店,只有一个理发师,只有n张可供顾客等待理发的椅子,如果没有顾客,则理发师睡觉;
如果有一顾客进入理发店发现理发师在睡觉,则把他叫醒,写一个程序协调理发师和顾客之间的关系。
答:
从资源的角度来看,理发师是顾客争用的资源,用信号量barber表示,初值为0;
除此以外,顾客还要争用n张椅子,信号量customers表示等候理发的顾客数,初值为0;
最后设置信号灯变量mutex用于这两个活动对资源barber、customers的互斥,初值为1。
需要两类进程Barber()和Customer()分别描述理发师和顾客的行为。
理发师和顾客之间是同步的关系,由于每次理发师只能为一个人理发,且可供等侯的椅子有限只有n个,即理发师和椅子是临界资源,所以顾客之间是互斥的关系。
故引入3个信号量和一个控制变量:
1)控制变量waiting用来记录等候理发的顾客数,初值均为0;
2)信号量customers用来记录等候理发的顾客数,并用作阻塞理发师进程,初值为0;
3)信号量barbers用来记录正在等候顾客的理发师数,并用作阻塞顾客进程,初值为0;
4)信号量mutex用于互斥,初值为1。
程序如下:
intwaiting=0;
//等候理发的顾客数
intchairs=n;
//为顾客准备的椅子数
semaphorecustomers=0,barbers=0,mutex=1;
barber()
while(TRUE);
//理完一人,还有顾客吗?
P(cutomers);
//若无顾客,理发师睡眠
P(mutex);
//进程互斥
waiting:
=waiting–1;
//等候顾客数少一个
V(barbers);
//理发师去为一个顾客理发
V(mutex);
//开放临界区
cut-hair();
//正在理发}
customer()
if(waiting)
{waiting:
=waiting+1;
//等候顾客数加1
V(customers);
//必要的话唤醒理发师
P(barbers);
//无理发师,顾客坐着养神
get-haircut();
//一个顾客坐下等理/}
else
//人满了,离开}
- 配套讲稿:
如PPT文件的首页显示word图标,表示该PPT已包含配套word讲稿。双击word图标可打开word文档。
- 特殊限制:
部分文档作品中含有的国旗、国徽等图片,仅作为作品整体效果示例展示,禁止商用。设计者仅对作品中独创性部分享有著作权。
- 关 键 词:
- 第三 作业