欢迎来到天天文库
浏览记录
ID:5280574
大小:365.51 KB
页数:12页
时间:2017-12-07
《进程同步与互斥辅导材料》由会员上传分享,免费在线阅读,更多相关内容在行业资料-天天文库。
1、信号量机制及使用1、试写出相应的程序来描述图1所示的前趋关系。S11S2S11S4S11SS35S111S1S111S11S1S111111S6S11S111分析:在解决这类问题时,首先应找出所有的直接前趋关系。然后,对每一种直接的前趋关系,如Si--->Sj,专门设置一初始值为0的信号量,并在结束之后执行对该信号量Si的signal操作,而在Sj开始之前执行对该信号量的wait操作,这样便可保证程序段Si执行完后才执行程序段Si。示例:semaphorea,b,c,d,e,f,g=0,0,0,0,0,0,0;beginbeginS1;signal(a);signal(b);end;b
2、eginwait(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);wait(f);wait(g);S6;end;end2、在生产者——消费者问题中,如果将两个wait操作,即wait(full)和wait(mutex)互换位置,或者将wait(empty)和wait(mutex)互换位置,其后果如何?如果将两个signal操作互换位置,即signal(full)和sign
3、al(mutex)互换位置,或者将signal(empty)和signal(mutex)互换位置,其后果又如何?答:在生产者——消费者问题中,如果将两个wait操作,即wait(full)和wait(mutex)互换位置,或者将wait(empty)和wait(mutex)互换位置都可能引起死锁。考虑系统中缓冲区全满时,若一生产者进程先执行了wait(mutex)操作并获得成功,则当再执行wait(empty)操作时,它将因不能获得资源而进入阻塞状态,它期待消费者执行signal(empty)来唤醒自己,在此之前,它不可能执行signal(mutex)操作,从而使企图通过wait(mu
4、tex)进入自己的临界区的其它生产者和所有的消费者进程全部进入阻塞状态,引起系统死锁。类似地,消费者进程若先执行wait(mutex),后执行wait(full),同样可能造成死锁。若signal(full)和signal(mutex)互换位置,或者signal(empty)和signal(mutex)互换位置,则不会引起死锁,其影响只是改变临界区资源的释放次序。3、有一计算机进程和打印进程和打印进程,它们共享一个单缓冲区,计算进程不断地计算出结果并将它放入单缓冲区中,打印进程则负责从单缓冲区中取出每一个结果进行打印。请用信号量来实现它们的同步关系。分析1:可以从临界资源的角度来思考,
5、先找临界资源,并为每种临界资源设置信号量,在访问临界资源前加wait操作来申请资源,访问完临界资源后加signal操作以释放临界资源。本题中有两类临界资源:第一类是计算进程争用的空闲缓冲区,初始状态下有一个空闲缓冲区可供使用,故可为它设置初值为1的信号量empty;第二类是打印进程争用的已放入缓冲区中的打印结果,初始状态下缓冲中无结果可供打印,故可为它设置初值为0的信号量full。该算法描述如下:答1:semaphorefull,empty=0,1;计算进程begincomputenextcalculation;wait(empty);putthecalculationintobuff
6、er;signal(full);repeatend打印进程beginwait(full);takethecalculationfrombuffer;signal(empty);printthecalculationrepeatend分析2:还可以从同步的角度来考虑,对于某种同步关系,例如,进程A在某处必须等待进程B完成某个动作D之后才能继续执行,可为它设置一初值为0的信号量,并在需要等待B的位置插入wait操作,在B完成动作D之后处插入signal操作。本题中存在两种同步关系:①打印进程必须等待计算进程将计算结果放入缓冲区之后,才能取结果打印,因此,可为它们设置初值为0的信号量SA。②
7、除第一个计算结果可以直接放入缓冲区外,计算进程必须等打印进程将缓冲中的前一个结果取走,缓冲区变空后,才能将下一个计算结果放入缓冲区,因此,可为他们设置初值为0的信号量SB。该算法描述如下:答2:semaphoreSA,SB=0,0;计算进程begincomputethefirstcalculation;putthecalculationintobuffer;signal(SA);computenextcalculation;wait(SB);p
此文档下载收益归作者所有