计算机操作系统p v操作

上传人:mg****85 文档编号:49620004 上传时间:2018-07-31 格式:PPT 页数:7 大小:1.03MB
返回 下载 相关 举报
计算机操作系统p v操作_第1页
第1页 / 共7页
计算机操作系统p v操作_第2页
第2页 / 共7页
计算机操作系统p v操作_第3页
第3页 / 共7页
计算机操作系统p v操作_第4页
第4页 / 共7页
计算机操作系统p v操作_第5页
第5页 / 共7页
点击查看更多>>
资源描述

《计算机操作系统p v操作》由会员分享,可在线阅读,更多相关《计算机操作系统p v操作(7页珍藏版)》请在金锄头文库上搜索。

1、信号量机制P、V操作例题信号量机制信号量机制wait和signal又称为P、V操作,P、 V原语, P、V操作的一般描述如下:n P操作:(1)S减1;(2)若s减1后仍大于或等于零,则进程 继续执行(可进入临界区);(3)若s减1后小于零,则该进程被阻塞 在与该信号相对应的队列中,然后转进程调 度。 P、V操作入 口S = S - 1S 0 返 回调用进程入等待队列转进程调度否是入 口S = S + 1S 0 返 回唤醒等待队列中的一个进程返回或转进程调度是否n V操作:(1)S加1;(2)若相加结果大于零,进程继续执行( 无等待该临界资源的阻塞进程);(3)若相加结果小于或等于零,则从该信

2、 号的等待队列中唤醒一个等待进程,然后再 返回原进程继续执行或转进程调度。1 1、独木桥问题。某条河上只有一座独木桥,以便行人、独木桥问题。某条河上只有一座独木桥,以便行人 过桥,现在河的两边都有人要过桥,按照下面的规则过桥,现在河的两边都有人要过桥,按照下面的规则 过桥,为了保证过桥安全,请用过桥,为了保证过桥安全,请用P P,V V操作分别实现正操作分别实现正 确的管理。确的管理。 过桥的规则:同一方向的可连续过桥,某方向有人过过桥的规则:同一方向的可连续过桥,某方向有人过 桥时另一方向的人要等待。桥时另一方向的人要等待。2 2、桌上有一空盘,允许存放一只水果。爸爸可向盘中、桌上有一空盘,

3、允许存放一只水果。爸爸可向盘中 放苹果,也可向盘中放桔子,儿子专等吃盘中的香蕉放苹果,也可向盘中放桔子,儿子专等吃盘中的香蕉 ,女儿专等吃盘中的苹果。规定当盘空时一次只能放,女儿专等吃盘中的苹果。规定当盘空时一次只能放 一只水果供吃者使用,请用一只水果供吃者使用,请用P P,V V原语实现爸爸、儿子原语实现爸爸、儿子 、女儿三个并发进程的同步。、女儿三个并发进程的同步。 3 3、某寺庙,有小、老和尚若干,有一水缸,有小和尚提水入缸、某寺庙,有小、老和尚若干,有一水缸,有小和尚提水入缸 供老和尚饮用。水缸可容供老和尚饮用。水缸可容10 10 桶水,水取自同一井中。水井径窄桶水,水取自同一井中。水

4、井径窄 ,每次只能容一个桶取水。水桶总数为,每次只能容一个桶取水。水桶总数为3 3个。每次入、取缸水仅个。每次入、取缸水仅 为为1 1桶,且不可同时进行。给出取水、入水的算法描述。桶,且不可同时进行。给出取水、入水的算法描述。1 1、独木桥问题。过桥的规则:同一方向的可连续过桥,某方向、独木桥问题。过桥的规则:同一方向的可连续过桥,某方向 有人过桥时另一方向的人要等待。有人过桥时另一方向的人要等待。VarVar Semaphore Semaphore mutex,Lmutex,Rmutexmutex,Lmutex,Rmutex=1,0,0;=1,0,0;intint LcountLcount=

5、0, =0, RcountRcount=0=0; Main()Main() cobegincobeginLeft(); Right(); Left(); Right();CoendCoend Left()Left() while (true) while (true) P(LmutexP(Lmutex); ); if if LcountLcount=0 =0 P(mutexP(mutex););LcountLcount=Lcount+1; =Lcount+1; V(LmutexV(Lmutex) )过桥;过桥;p(Lmutexp(Lmutex); ); if if LcountLcount=0

6、 =0 V(mutexV(mutex););LcountLcount=Lcount-1; =Lcount-1; V(LmutexV(Lmutex) ) /mutexmutex左右两边过桥的互斥信号量;左右两边过桥的互斥信号量;LcountLcount, , RcountRcount左右两边过桥人数左右两边过桥人数 /LmutexLmutex, , RmutexRmutex 分别表示对分别表示对LcountLcount, , RcountRcount互斥访问的信号量互斥访问的信号量Right()Right() while (true) while (true) P(RmutexP(Rmutex)

7、; ); if if RcountRcount=0 =0 P(mutexP(mutex); );RcountRcount=Rcount+1; =Rcount+1; V(RmutexV(Rmutex) )过桥;过桥;p(Rmutexp(Rmutex); ); if if RcountRcount=0 =0 V(mutexV(mutex); );RcountRcount=Rcount-1; =Rcount-1; V(RmutexV(Rmutex) ) 桌上有一空盘,允许存放一只水果。爸爸可向盘中放苹果和香蕉,桌上有一空盘,允许存放一只水果。爸爸可向盘中放苹果和香蕉, 儿子专等吃盘中的香蕉,女儿专等

8、吃盘中的苹果。儿子专等吃盘中的香蕉,女儿专等吃盘中的苹果。VarVar dish,apple,banana:Semaphore:=1,0,0;dish,apple,banana:Semaphore:=1,0,0; Main()Main() cobegincobegin Father(); Father(); son();daugherson();daugher();(); CoendCoend Father()Father() while (true) while (true)p(dish); p(dish); if if 放的是苹果放的是苹果 v(applev(apple););else e

9、lse V(bananaV(banana) ) son()son() while (true) while (true) p(banana); p(banana);从盘子取香蕉;从盘子取香蕉; v(dish); v(dish); 吃香蕉;吃香蕉; daugherdaugher()() while (true) while (true) p(apple); p(apple);从盘子取苹果;从盘子取苹果; v(dish); v(dish); 吃苹果;吃苹果; /dish/dish互斥使用盘子;互斥使用盘子;appleapple盘中苹果数;盘中苹果数;bananabanana盘中香蕉数盘中香蕉数桌上

10、有一空盘,允许存放一只水果。桌上有一空盘,允许存放一只水果。爸爸可向盘中放苹果爸爸可向盘中放苹果,妈妈向妈妈向 盘中放香蕉盘中放香蕉,儿子专等吃盘中的香蕉,女儿专等吃盘中的苹果。,儿子专等吃盘中的香蕉,女儿专等吃盘中的苹果。VarVar dish,apple,banana:Semaphore:=1,0,0;dish,apple,banana:Semaphore:=1,0,0; Main()Main() cobegincobegin Father();mother();son();daugherFather();mother();son();daugher();(); CoendCoend Fa

11、ther()Father() while (true) while (true)p(dish); p(dish); 将苹果放入盘子;将苹果放入盘子;v(apple); v(apple); Mother()Mother() while (true) while (true) p(dish); p(dish);将将香蕉放入盘子;香蕉放入盘子;v(v(bananabanana); ); son()son() while (true) while (true) p(banana); p(banana);从盘子取香蕉;从盘子取香蕉; v(dish); v(dish); 吃香蕉;吃香蕉; daugherd

12、augher()() while (true) while (true) p(apple); p(apple);从盘子取苹果;从盘子取苹果; v(dish); v(dish); 吃苹果;吃苹果; /dish/dish互斥使用盘子;互斥使用盘子;appleapple盘中苹果数;盘中苹果数;bananabanana盘中香蕉数盘中香蕉数某寺庙,有小、老和尚若干,有一水缸,有小和尚提水入缸供老和尚饮用。水缸某寺庙,有小、老和尚若干,有一水缸,有小和尚提水入缸供老和尚饮用。水缸 可容可容10 10 桶水,水取自同一井中。水井径窄,每次只能容一个桶取水。水桶总数为桶水,水取自同一井中。水井径窄,每次只能容

13、一个桶取水。水桶总数为 3 3个。每次入、取缸水仅为个。每次入、取缸水仅为1 1桶,且不可同时进行。给出取水、入水的算法描述桶,且不可同时进行。给出取水、入水的算法描述Semaphore Semaphore mutex1=1;mutex2=1;mutex1=1;mutex2=1; empty=10;full=0;count=3;empty=10;full=0;count=3; Main()Main() cobegincobegin get(); use(); get(); use(); coendcoend Get() /Get() /小和尚入水小和尚入水 while (true)while

14、(true) p(empty) ;p(empty) ; p(count) ; p(count) ; P(mutex1);P(mutex1); 从井中取水;从井中取水; v(mutex1) v(mutex1) ; P(mutex2) P(mutex2) ; 将水倒入缸中;将水倒入缸中; v (mutex2) v (mutex2) ; v (count) v (count) ; v (full) v (full) ; Use() /老和尚取水老和尚取水 while(true)p (full) ;p(count) ;P(mutex2) ;从缸中取水;v (mutex2) ;v(empty) ;v (count) ; /mutex1:/mutex1:互斥从井中提水;互斥从井中提水;mutex2:mutex2:互斥从缸中取水;互斥从缸中取水;empty:empty:缸中缸中 尚能盛水的桶数;尚能盛水的桶数;full:full:缸中已盛水的桶数;缸中已盛水的桶数;count:count:已用水桶数已用水桶数

展开阅读全文
相关资源
正为您匹配相似的精品文档
相关搜索

最新文档


当前位置:首页 > 生活休闲 > 科普知识

电脑版 |金锄头文库版权所有
经营许可证:蜀ICP备13022795号 | 川公网安备 51140202000112号