欢迎来到天天文库
浏览记录
ID:26934493
大小:108.50 KB
页数:18页
时间:2018-11-30
《信号量的pv操作[例题]》由会员上传分享,免费在线阅读,更多相关内容在工程资料-天天文库。
1、完美.格式.编辑???信号量的PV操作是如何定义的?试说明信号量的PV操作的物理意义。参考答案:P(S):将信号量S减1,若结果大于或等于0,则该进程继续执行;若结果小于0,则该进程被阻塞,并将其插入到该信号量的等待队列中,然后转去调度另一进程。V(S):将信号量S加1,若结果大于0,则该进程继续执行;若结果小于或等于0,则从该信号量的等待队列中移出一个进程,使其从阻塞状态变为就绪状态,并插入到就绪队列中,然后返回当前进程继续执行。PV操作的物理含义:信号量S值的大小表示某类资源的数量。当S>0时,其值表示当前可供分配的资
2、源数目;当S<0时,其绝对值表示S信号量的等待队列中的进程数目。每执行一次P操作,S值减1,表示请求分配一个资源,若S≥0,表示可以为进程分配资源,即允许进程进入其临界区;若S<0,表示已没有资源可供分配,申请资源的进程被阻塞,并插入S的等待队列中,S的绝对值表示等待队列中进程的数目,此时CPU将重新进行调度。每执行一次V操作,S值加1,表示释放一个资源,若S>0,表示等待队列为空;若S≤0,则表示等待队列中有因申请不到相应资源而被阻塞的进程,于是唤醒其中一个进程,并将其插入就绪队列。无论以上哪种情况,执行V操作的进程都可
3、继续运行。1、设公共汽车上,司机和售票员的活动分别是:司机的活动:启动车辆;正常行车;到站停车;售票员的活动:关车门;售票;开车门;在汽车不断地到站、停车、行驶过程中,这两个活动有什么同步关系?用P、V操作实现它们的同步。设两个信号量S和C,初值为S=0;C=0;司机:L1:正常行车售票员:L2:售票到站停车P(S)V(S)开车门P(C)关车门启动开车V(C)GOTOL1GOTOL22、请用PV操作实现他们之间的同步关系:(1)桌上一个盘子,只能放一只水果。爸爸放苹果,妈妈放桔子,儿子只吃桔子,女儿只吃苹果。(2)桌上一个
4、盘子,只能放一只水果。爸爸放苹果,妈妈放桔子,儿子吃桔子、苹果。参考答案:第一步:确定进程4个进程Father(爸爸)、Mother(妈妈)、Son(儿子)、Daughter(女儿)Father进程:l将苹果放入盘中专业.资料.整理完美.格式.编辑Mother进程:l将桔子放入盘中Son进程:l从盘中取出桔子l吃桔子Daughter进程:l从盘中取出苹果l吃苹果第二步:确定进程的同步、互斥关系l同步:Father当盘中无水果时,才可以将苹果放入盘中l同步:Mother当盘中无水果时,才可以将桔子放入盘中l同步:Son当盘中
5、有桔子时,才可以从盘中取出桔子l同步:Daughter当盘中有苹果时,才可以从盘中取出苹果第三步:设置信号量l盘中无水果,Sp,初值1l盘中有桔子,So,初值0l盘中有苹果,Sa,初值0第四步:用伪代码描述beginSp,So,Sa:semaphore;Sp:=1;So:=0;Sa:=0;cobeginFather();Mother();Son();Daughter();coend;end;processFather()beginL1:P(Sp);将苹果放入盘中;V(Sa);gotoL1;end;processMother
6、()beginL2:P(Sp);将桔子放入盘中;V(So);专业.资料.整理完美.格式.编辑gotoL2;end;processSon()beginL3:P(So);从盘中取出桔子;V(Sp)吃桔子;gotoL3;end;processDaughter()beginL4:P(Sa);从盘中取出苹果;V(Sp)吃苹果;gotoL4;end;(2)第一步:确定进程3个进程Father(爸爸)、Mother(妈妈)、Son(儿子)Father进程:l将苹果放入盘中Mother进程:l将桔子放入盘中Son进程:l从盘中取出水果(桔
7、子或苹果)l吃水果(桔子或苹果)第二步:确定进程的同步、互斥关系l同步:Father当盘中无水果时,才可以将苹果放入盘中l同步:Mother当盘中无水果时,才可以将桔子放入盘中l同步:Son当盘中有水果(桔子或苹果)时,才可以从盘中取出水果第三步:设置信号量l盘中无水果,empty,初值1l盘中有水果(桔子或苹果),full,初值0第四步:用伪代码描述beginempty,full:semaphore;empty:=1;full:=0;专业.资料.整理完美.格式.编辑cobeginFather();Mother();Son
8、();coend;end;processFather()beginL1:P(empty);将苹果放入盘中;V(full);gotoL1;end;processMother()beginL2:P(empty);将桔子放入盘中;V(full);gotoL2;end;processSon()beginL3:P
此文档下载收益归作者所有