欢迎来到天天文库
浏览记录
ID:47457216
大小:42.01 KB
页数:4页
时间:2020-01-11
《操作系统PV操作经典例题与答案》由会员上传分享,免费在线阅读,更多相关内容在行业资料-天天文库。
1、1.推广例子中的消息缓冲问题。消息缓冲区为k个,有1个发送进程,n个接收进程,每个接收进程对发送来的消息都必须取一次若有m个发送进程呢?Send:SB=k;//信号量,标记当前空余缓冲区资源。i=0;//标记存放消息的缓冲区位置while(true){P(SB);往Buffer[i]放消息;V(SM);i=(i+1)%k;};Receive:j=0;//标记取产品的缓存区位置SM=0;//信号量,标记初始没有消息ReadCount=0;//读进程计数器Mutex=1;//读进程互斥信号量SW=0;/
2、/信号量,读进程在此信号量等待while(true){P(SM);从Buffer[j]取消息;ReadCount++If(ReadCount3、)rc=0,//正在读者计数器wc,//写计数器rw,//读等计数器R//等待读信号量W//等待写信号量读者:while(true){P(mutex);if(wc>0){rw++P(R);}rc++;If(rw>0&&wc=0){V(R)rw--}V(mutex);读P(mutex);rc--;if(rc==0){If(wc>0)V(w)}V(mutex);};写者:while(true){P(mutex);wc++;if((wc>1)4、5、(rc>0)){P(W)}V(mutex);写P(mutex6、);Wc--;if(wc>0)V(W);Elseif(rw>0)V(R)rw--V(mutex);};3.理发师睡觉问题理发店里有一位理发师,一把理发椅和N把供等候理发的顾客坐的椅子如果没有顾客,则理发师便在理发椅上睡觉。当一个顾客到来时,他必须先唤醒理发师如果顾客到来时理发师正在理发,则如果有空椅子,可坐下来等;否则离开Wait=0;表示等待顾客资源;Barber=1;表示可以理发custNum关键资源,表示当前顾客数量顾客进程:Coming//顾客来到P(mutex)If(custNum>0){7、If(custNum<=N){V(mutex)P(wait);}else{V(mutex)离开;}}else{V(mutex)V(Barber);理发;离开;P(mutex)custNum--;V(mutex)V(wait)}理发师进程:While{P(mutex)If(custNum==0){V(mutex)P(Barber)}else{V(mutex)理发}}
3、)rc=0,//正在读者计数器wc,//写计数器rw,//读等计数器R//等待读信号量W//等待写信号量读者:while(true){P(mutex);if(wc>0){rw++P(R);}rc++;If(rw>0&&wc=0){V(R)rw--}V(mutex);读P(mutex);rc--;if(rc==0){If(wc>0)V(w)}V(mutex);};写者:while(true){P(mutex);wc++;if((wc>1)
4、
5、(rc>0)){P(W)}V(mutex);写P(mutex
6、);Wc--;if(wc>0)V(W);Elseif(rw>0)V(R)rw--V(mutex);};3.理发师睡觉问题理发店里有一位理发师,一把理发椅和N把供等候理发的顾客坐的椅子如果没有顾客,则理发师便在理发椅上睡觉。当一个顾客到来时,他必须先唤醒理发师如果顾客到来时理发师正在理发,则如果有空椅子,可坐下来等;否则离开Wait=0;表示等待顾客资源;Barber=1;表示可以理发custNum关键资源,表示当前顾客数量顾客进程:Coming//顾客来到P(mutex)If(custNum>0){
7、If(custNum<=N){V(mutex)P(wait);}else{V(mutex)离开;}}else{V(mutex)V(Barber);理发;离开;P(mutex)custNum--;V(mutex)V(wait)}理发师进程:While{P(mutex)If(custNum==0){V(mutex)P(Barber)}else{V(mutex)理发}}
此文档下载收益归作者所有