pv操作练习题
操作系统PV操作经典一百题
procedure reader_i
begin // i=1,2,?.
P(rwmutex); //读者、写者互斥
P(rmutex);
V(rwmutex); // 释放读写互斥信号量,允许其它读、写进程访问资源
读数据;
V(rmutex);
end
procedure Writer_j
我们需要分两种情况实现该问题:
读优先: 要求指一个读者试图进行读操作时,如果这时正有其他读者在进行操作,他可直接开始读操作,而不需要等待。
写优先: 一个读者试图进行读操作时,如果有其他写者在等待进行写操作或正在进行写操作,他要等待该写者完成写操作后才开始读操作。
The P,V code Using Pascal
3)写者优先于读者(一旦有写者,则后续读者必须等待,唤醒时优先考虑写者)
如果读者数是固定的,我们可采用下面的算法:
rwmutex:用于写者与其他读者/写者互斥的访问共享数据
rmutex: 该信号量初始值设为10,表示最多允许10个读者进程同时进行读操作
var rwmutex, rmutex : semaphore := 1, 10 ;
操作系统P V题解
第一章 The P,V Theorem
在操作系统理论中有一个非常重要的概念叫做P,V原语。在我们研究进程间的互斥的时候经常会引入这个概念,将P,V操作方法与加锁的方法相比较,来解决进程间的互斥问题。实际上,他的应用范围很广,他不但可以解决进程管理当中的互斥问题,而且我们还可以利用此方法解决进程同步与进程通信的问题。
Figure 1.1: producer-consumer problem
操作系统PV操作一百题
seller smoker paper 3 match 1 tobacco 2
mutex seller The P,V code Using Pascal vars , S1 ,S2 , S3 ; semaphore ; S:=1 ; S1:=S2:=S3:=0 ; fiag1 , flag2 , fiag3 : Boolean ; fiag1:=flag2:=flag3:=true; cobegin process begin repeat P(S) ; flagi //nago1 nage2 nage3 if flag2 & flag3 then V(S1) ; // else if flag1 & fiag3 then V(S2); // else V(S3) ; // until false ;
AND Swait(empty 2 -(Readers-Writers Problem) Reader (Writer) mutex) Ssignal(full mutex)
1 2 3 Semaphore P V Reader Read Writer P() V() Write
The P,V code Using Pascal rwmutex rmutex readcount var rwmutex, rmutex int readcount = 0; cobegin procedure reader_i begin // i=1,2,?. P(rmutex); Readcount + +; if (readcount = = 1) P(rwmutex); V(rmutex); P(rmutex); Readcount - -; if (readcount = = 0) V(rwmutex); V(rmutex); end procedure Writer_j begin // j = 1,2,?. P(rwmutex); V(rwmutex); end coend The P,V code Using Pascal 1 2 3 rwmutex rmutex var rwmutex, rmutex / 10 semaphore := 1, 10 10 semaphore := 1, 1 /
操作系统 PV操作习题答案
4有三个并发进程,R负责从输入设备读入信息并传送给M,M将信息加工并传送给P,P将打印输出,写出下列条件下的并发程序:单缓冲区,缓冲区信号量初值mutex1=1; mutex2=1;buffeR-M // R 和M之间的bufbufferM_P // M 和P之间的buf另外R 自己的缓存区data_buf1,另外M 自己的缓存区data_buf2,另外P 自己的缓存区data_buf3,Procedure R:beginwhile true dodata_buf1 = 读入数据P(mutex1);buffeR-M = data_buf1;V(mutex1);endend;Procedure M:beginwhile true doP(mutex2);P(mutex1);Data_buf2 = bufferR_M;处理Data_buf2;BufferM_P = data_buf2V(mutex1);V(mutex2);endend;Procedure P:beginwhile true doP(mutex2);Data_buf3:= BufferM_P;V(mutex2);V(empty);打印输出数据endend;双缓冲区,缓冲区信号量初值mutex1=1; mutex2=1; Empty1 = 2, full1 = 0; empty2=2, full2=0; buffeR-M[2] // R 和M之间的buf,有两个bufferM_P[2] // M 和P之间的buf 有两个另外R 自己有缓存区data_buf1,另外M 自己有缓存区data_buf2,另外P 自己有缓存区data_buf3,var:i,j,k,nProcedure R:beginwhile true dodata_buf1 = 读入数据P(empty1)P(mutex1);buffeR-M[i] = data_buf1;i=(i+1)mod 2;V(mutex1);V(full1)endend;Procedure M:beginwhile true doP(full1);P(mutex1);Data_buf2 = bufferR_M[j];j=(j+1) mod 2V(mutex1);P(empty1);处理Data_buf2;P(empty2);P(mutex2)BufferM_P[k] = data_buf2;k=(k+1) mod 2V(mutex2);V(full2);endend;Procedure P:beginwhile true doP(full2);P(mutex2);Data_buf3:= BufferM_P[n];n=(n+1) mod 2V(mutex2);V(empty2);打印输出数据endend;设有三个进程A、B、C,其中A与B构成一对生产者与消费者(A为生产者,B为消费者),共享一个由n个缓冲块组成的缓冲池;B与C也构成一对生产者与消费者(此时B为生产者,C为消费者),共享另一个由m个缓冲块组成的缓冲池。
网络操作系统 习题PV操作
分析:四人之间的关系: 1父亲,母亲要互斥使用盘子,所以两者之间是互斥关系; 2父亲放的苹果,女儿吃,所以两者是同步关系; 3母亲放的桔子,儿子吃,所以两者也是同步关系。 semaphore S_Plate=1, S_Apple=0, S_Orange=0; void son( ) // 儿子进程 { while(1) { P(S_Orange); 从盘中取出一个 桔子; V(S_Plate); 吃桔子; } }
吃水果问题2
题目:桌上有一只盘子,允许存放一个水果,父亲 专向盘中放苹果,母亲专向盘中放桔子,儿子专等 吃盘里的桔子,女儿专等吃盘里的苹果。只要盘子 空,则父亲或母亲可向盘中放水果,仅当盘中有自 己需要的水果时,儿子或女儿可从中取出。 请给出四人之间的同步关系,并用PV操作实现四人 正确活动的程序。
试用P、V操作写出能同步执行的程序。
使用信号量解决取动物问题
分析:四者之间的关系: 1.猎人和农民要互斥使用笼子,所以两者之间是互斥关系; 2.猎人放老虎,动物园取老虎,所以两者是同步关系; 3.农民房猪,饭店取猪,所以两者也是同步关系。
semaphore S_EmptyCage=1, S_Tiger=0, S_Pig=0; void hunter( ) // 猎人进程 { while(1) { P(S_EmptyCage); 往笼子里放入一只老虎; V(S_Tiger); } } void zoo( ) // 动物园进程 { while(1) { P(S_Tiger); 从笼子里取出一只老虎; V(S_EmptyCage);; } } void farmer( ) // 农民进程 { while(1) { P(S_EmptyCage); 往笼子里放入一只猪; V(S_Pig); } } void restaurant( ) // 饭店进程 { while(1) { P(S_Pig); 从笼子里取出一只猪; V(S_EmptyCage);; } }
pv操作的一些习题
Main(0
Cobegin{
Father()
{while(1)
{p(empty);
P(mutex);
1、进程P0和P1的共享变量定义及其初值为:
boolean falg[2];
int turn=0;fal[0]=FALSE; falg[1]=FALSE;
若进程P0和P1访问临界资源的类C伪代码实现如下:
则并发执行进程P0和P1时产生的情形是【全国联考2010】
A.不能保证进程互斥进入临界区、会出现“饥饿”现象
答案:设置6个信号量full1、empty1、B-M1、full2、empty2、B-M2,它们的含义和初值如下:
1)full1表示Buff1是否有数据,初值为0;
2)empty1表示Buff1有空间,初值为m;
3)B-M1表示Buff1是否可操作,初值为1;
4)Full2表示Buff2是否有数据,初值为0;
5)Empty2表示Buff2有空间,初值为n;
6)B-M2表示Buff2是否可操作,初值为1;
<PUT类进程>
{
repeat
P(empty1);/*判断Buff1是否有空间,没有则等待*/
P(B-M1);/*是否可操作Buff1*/
PUT;
V(B-M1);/*设置Buff1可操作标志*/
V(full1);/*设置Buff1有数据的标志*/
GET;
V(B-M2);/*设置Buff2可操作标志*/
操作系统PV操作习题
操作系统PV操作习题操作系统PV操作习题-----------------------------------------------------1、引言在操作系统中,PV操作(也称作P操作和V操作)是用于进程同步的一种常见机制。
P操作用于获取或申请资源,V操作用于释放资源。
本文将为您提供一些关于PV操作的习题,以帮助您巩固相关的概念和原理。
2、PV操作基本概念2.1 P操作描述P操作的基本概念和含义,以及在实际应用中的具体场景。
2.2 V操作解释V操作的基本概念和含义,并举例说明其在实际问题中的应用。
3、PV操作习题集3.1 习题一、生产者-消费者问题描述一个典型的生产者-消费者问题,并通过使用P操作和V操作对其进行解决。
3.2 习题二、读者-写者问题解释一个典型的读者-写者问题,并使用PV操作来实现对该问题的解决。
3.3 习题三、哲学家就餐问题描述哲学家就餐问题的场景,并说明如何采用PV操作来解决这一问题。
4、常见PV操作错误4.1 死锁解释什么是死锁以及为什么会发生死锁现象,同时提供一些避免死锁的方法。
4.2 饥饿描述什么是饥饿,以及一些可能导致饥饿的常见原因,并提供解决饥饿问题的一些策略。
5、附录本文档附带以下附件:- 习题的解答和详细说明- 相关的代码示例6、法律名词及注释在本文档中,涉及的法律名词及其注释如下:- PV操作:即P操作和V操作,用于进程同步的一种机制。
- 生产者-消费者问题:一种经典的并发控制问题,涉及到生产者和消费者之间的资源竞争。
- 读者-写者问题:一种并发控制问题,涉及到多个读者和写者对共享资源的访问。
- 哲学家就餐问题:一种经典的并发控制问题,涉及到多个哲学家通过共享的餐具进行就餐。
PV操作题
PV操作题1.独木桥问题:若规定同一方向的人可连续过桥,但同时在桥上人数最多4人,当某方向无人过桥后,另一方向的人才能过桥.请用PV操作模拟实现.2.独木桥问题:若规定同一方向的人可连续过桥最多10人,当某方向连续通过达到10人后,另一方向的人才能过桥.请用PV操作模拟实现.3.类似题目:车辆过单行隧道,火车过单行轨道4.有一阅览室只能容纳100人(每人一个座位),读者进入时必须先在一张登记表上登记一个座位,离开时要销掉登记内容。
请用PV机制描述读者进程的同步关系。
5.超市购物过程:共有100个购物篮,每人进入取一个篮子购物,出去结帐并归还篮子。
出入口共用一个通道。
6.地下停车场车位管理。
(共100个车位)7.某银行最多只允许容纳N个储户办理业务,如果此时银行只有一个柜员,将此柜员和储户的行为看成两个不同进程,请用PV操作模拟上述过程。
其中储户取号等待叫号,若叫到则到柜员处办理业务,结束自行离开;柜员按顺序叫号并为储户办理业务,若N个号已取完需结束当前业务后才能让后来者取号8. 某银行最多只允许容纳N个储户办理业务,如果此时银行有M个柜员,将此柜员和储户的行为看成两个不同进程,请用PV操作模拟上述过程。
其中储户取号等待叫号,若叫到则到柜员处办理业务,结束自行离开;柜员按顺序叫号并为储户办理业务,若N个号已取完需结束当前业务后才能让后来者取号,但是柜员间叫号是互斥的9.有个师傅和三个徒弟,徒弟不断组装产品,做一个产品需要A,B,C 三种零件(分别被三个徒弟掌握),师傅不断提供上述三种零件,但每次只能将其中两种放到桌上,具有另一种零件的徒弟则组装产品,且做完后向师傅发信号,然后师傅再拿出两种零件放到桌上,如此反复,请用PV操作模拟上述活动。
10.书本上司机和售票员问题后续内容继续更新中……。
操作系统PV操作习题
操作系统PV操作习题1. 问题描述在并发编程中,进程间的同步与互斥是非常重要的。
信号量机制(Semaphore)提供了一种有效地实现这些目标的方法。
本文档将介绍关于PV操作(P和V操作)相关概念,并给出一些习题以帮助读者更好地理解。
2. PV 操作简介2.1 P 操作:- 等待一个资源可用。
- 如果该资源不可用,则阻塞当前进程直到它变为可用状态。
- 当前进程获得该资源后,可以执行相应任务。
2.2 V 操作:- 发布或释放一个已经被占有的资源。
- 唤醒等待此资源而处于阻塞状态下的其他进程。
3. PV 示例及其分析假设我们有两个线程 A 和 B 需要访问共享数据 X:```// 共享数据 X 的初始值为 0int X = 0;Thread A:while (true) {// 进行 P(X) 操作来获取对共享数据X进行修改/使用权限 P(X);// 执行需要对共享数据X进行修改/使用处理// 完成后通过 V(X) 来释放控制权,使其他线城能够访问到公众区域.V(x);}Thread B:while (true) {// 进行 P(X) 操作来获取对共享数据X进行修改/使用权限 P(x);// 执行需要对共享数据X进行修改/使用处理V(x); 通过V操作释放控制权,使其他线程能够访问到公众区域.}```4. PV 操作习题问题1:假设在上述示例中,A 线程执行完一次循环后被 B 线程抢占了 CPU。
那么当 A 再次获得CPU时会发生什么?解答:- 当 A 获得 CPU 后,它将继续从之前的状态恢复运行。
- 因为 X 的值已经是非零(由于 B 已经完成过一轮),所以 A 不会阻塞并可以直接进入临界区。
问题2:如果我们不用信号量机制而只依赖互斥锁实现同步和互斥性质,在这个场景下可能出现哪些问题?请详细说明。
解答:- 如果只依赖互斥锁,则无法保证资源可用性检查与等待期间的原子性。
- 在某个线城判断资源是否可用,并尚未加锁时,另一个线城也同时判断该资源是否可用;- 结果两者都认为该资源是空闲的,并试图去申请锁;- 这样就会导致两个线程同时进入临界区,造成数据竞争和不一致性。
pv操作习题
signal(sa);
signal(s);
}
Process_B:
while (1)
{
wait(s2);
produce a product B;
signal(s1);
wait(mutex);
add the product B to the storehouse;
signal(mutex);
if Counteast = 0 then P( S ) ;
Counteast : = Counteast + l ;
V( Scounteast ) ;
P( Scount4 ) ;
上桥:过桥:下桥;
V ( Scount4 ) ;
P ( Scounteast ) ;
Counteast: = Counteast - 1 ;
{
Wait(S_CartNum);
买东西;
结帐;
Signal(S_CartNum);
}
桌子上有一个水果盘,每一次可以往里面放入一个水果。爸爸专向盘子中放苹果,儿子专等吃盘子中的苹果。把爸爸、儿子看作二个进程,试用Wait/Signal操作使这四个进程能正确地并发执行。
semaphore S_PlateNum;//盘子容量,初值为1
Var s: semaphore :=1;
begin
parbegin
process Pi: begin
repeat
Wait (s);
按旅客定票要求找到Rk
if Rk>=1 then begin
Rk=Rk-1;
Signal (s);
输出一张票;
end;
else begin
(完整word版)操作系统PV操作的作业参考答案
关于调度算法【例1】下表给出作业l,2,3的提交时间和运行时间。
采用先来先服务调度算法和短作业优先调度算法,试问作业调度次序和平均周转时间各为多少?(时间单位:小时,以十进制进行计算。
)分析解这样的题关键是要根据系统采用的调度算法,弄清系统中各道作业随时间的推进情况。
我们用一个作业执行时间图来形象地表示作业的执行情况,帮助我们理解此题。
采用先来先服务调度算法,是按照作业提交的先后次序挑选作业,先进入的作业优先被挑选。
然后按照“排队买票”的办法,依次选择作业。
其作业执行时间图如下:采用短作业优先调度算法,作业调度时根据作业的运行时间,优先选择计算时间短且资源能得满足的作业。
其作业执行时间图如下:由于作业1,2,3是依次到来的,所以当开始时系统中只有作业1,于是作业1先被选中。
在8.0时刻,作业1运行完成,这时系统中有两道作业在等待调度,作业2和作业3,按照短作业优先调度算法,作业3只要运行1个时间单位,而作业2要运行4个时间单位,于是作业3被优先选中,所以作业3先运行。
待作业3运行完毕,最后运行作业2。
作业调度的次序是1,3,2。
另外,要记住以下公式:作业i的周转时间T i=作业完成时间-作业提交时间系统中个作业的平均周转时间,其中Ti为作业i的周转时间。
解:采用先来先服务调度策略,则调度次序为l、2、3。
作业号提交时间运行时间开始时间完成时间周转时间1 0.0 8.0 0.0 8.0 8.02 0.4 4.0 8.0 12.0 11.63 1.0 1.0 12.0 13.0 12.0 平均周转时间T=(8+11.6+12)/3=10.53采用短作业优先调度策略,则调度次序为l、3、2。
作业号提交时间运行时间开始时间完成时间周转时间1 0.0 8.0 0.0 8.0 8.03 1.0 1.0 8.0 9.0 8.02 0.4 4.0 9.0 13.0 12.6 平均周转时间T=(8+8+12.6)/3=9.53思考题1请同学们判断这句话:作业一旦被作业调度程序选中,即占有了CPU。
操作系统_PV操作_经典习题1
1、司机-售票员问题
2、理发师问题
理发店里有一位理发师,一把理发椅和N把供等候理发的顾客坐的椅子。
如果没有顾客,则理发师便在理发椅上睡觉。
当一个顾客到来时,他必须先唤醒理发师。
如果顾客到来时理发师正在理发,则如果有空椅子,可坐下来等;否则离开。
3、物流问题
在某个物流系统中,有一个位于上海的集装箱中转枢纽,这些集装箱又被装上其他运输工具继续各自的行程。
根据整体物流规划,从沿长江一线进入枢纽的集装箱,要从这里直接吊装到上
海至旧金山的定期集装箱班轮上。
而从沪杭高速公路进入枢纽的集装箱,要从这里换装到专门在京沪高速公路上行驶的集装箱运输车上。
现在需要设计为该物流系统上海集装箱中转枢纽使用的物流软件,为简化问题,假设该中转枢纽的场地每次只能接收一个方向来的同一批次的集装箱。
(完整word版)计算机操作系统PV操作例题
问题1 一个司机与售票员的例子在公共汽车上,为保证乘客的安全,司机和售票员应协调工作:停车后才能开门,关车门后才能行车。
用PV操作来实现他们之间的协调.S1:是否允许司机启动汽车的变量S2:是否允许售票员开门的变量driver()//司机进程{while (1)//不停地循环{P(S1);//请求启动汽车启动汽车;正常行车;到站停车;V(S2); //释放开门变量,相当于通知售票员可以开门}}busman()//售票员进程{while(1){关车门;V(S1);//释放开车变量,相当于通知司机可以开车售票P(S2);//请求开门开车门;上下乘客;}}注意:busman()driver()两个不停循环的函数问题2 图书馆有100个座位,每位进入图书馆的读者要在登记表上登记,退出时要在登记表上注销。
要几个程序?有多少个进程?(答:一个程序;为每个读者设一个进程)(1)当图书馆中没有座位时,后到的读者在图书馆为等待(阻塞)(2)当图书馆中没有座位时,后到的读者不等待,立即回家。
解(1 )设信号量:S=100;MUTEX=1P(S)P(MUTEX)登记V(MUTEX)阅读P(MUTEX)注销解(2)设整型变量COUNT=100;信号量:MUTEX=1;P(MUTEX);IF (COUNT==0){V(MUTEX);RETURN;}COUNT=COUNT—1;登记V(MUTEX);阅读P(MUTEX);COUNT=COUNT+1;V(MUTEX);RETURN;问题3 有一座东西方向的独木桥;用P,V操作实现:(1)每次只允许一个人过桥;(2)当独木桥上有行人时,同方向的行人可以同时过桥,相反方向的人必须等待。
(3)当独木桥上有自东向西的行人时,同方向的行人可以同时过桥,从西向东的方向,只允许一个人设信号量MUTEX=1P (MUTEX)过桥V (MUTEX)(2)解设信号量: MUTEX=1 (东西方互斥)MD=1 (东向西使用计数变量互斥)MX=1 (西向东使用计数变量互斥)设整型变量:CD=0 (东向西的已上桥人数)CX=0 (西向东的已上桥人数)从东向西:P (MD)IF (CD=0){P (MUTEX) }CD=CD+1V (MD)过桥P (MD)CD=CD—1IF (CD=0){V (MUTEX) }从西向东:P (MX)IF (CX=0){P (MUTEX) }CX=CX+1V (MX)过桥P (MX)CX=CX—1IF (CX=0){V (MUTEX) }V (MX)(3)解:从东向西的,和(2)相同;从西向东的和(1)相同。
操作系统--PV操作习题补
开车
关车门
6.3/25
2018年9月
操作系统
Var S_Door,S_Stop: Semaphore:=0,0
司机进程: Begin Repeat P(S_Door); 行驶; … 停车; V(S_Stop); Until false; End
乘务员进程: Begin Repeat 关门; V(S_Door); 售票; P(S_Stop); 开门; Until false; End
6.4/25
2018年9月
操作系统
Var door,stop : semaphore:1,0 乘务员进程: Begin Repeat P(stop); 开门; 关门; V(door); 售票; Until false; End
司机进程: Begin Repeat P(door); 行驶; … 停车; V(stop); Until false; End
作业:睡眠理发师问题
操作系统
6.10/25
2018年9月
作业:睡眠理发师问题
操作系统
问题描述
(经典理发师问题)
假设后街有家理发店,店里有一个理发师、一把理发椅和n把等 候理发的顾客椅子。 (1).如果没有顾客则理发师便在理发椅上睡觉(看报纸); (2).当有一个顾客到达时,首先查看理发师在干什么,如果 在睡觉(看报纸)则告诉理发师理发,然后坐到理发椅上开始 理发;如果理发师正在理发,则查看是否有空的椅子可坐,如 果有,他就坐下等待,如果没有,则离开; (3).理发师为一位顾客理完发后,查看是否有人等待,如有 则唤醒一位为其理发,如没有则在理发椅上睡觉(看报纸); (4).顾客不分优先级
6.5/25
2018年9月
操作系统
有关pv操作类的题目
有关pv操作类的题目1、假定系统有三个并发进程read, move和print共享缓冲器B1和B2。
进程read负责从输入设备上读信息,每读出一个记录后把它存放到缓冲器B1中。
进程move从缓冲器B1中取出一记录,加工后存入缓冲器B2。
进程print将B2中的记录取出打印输出。
缓冲器B1和B2每次只能存放一个记录。
要求三个进程协调完成任务,使打印出来的与读入的记录的个数,次序完全一样。
请用PV操作,写出它们的并发程序。
解:beginemptyB1 , fullB1, emptyB2, fullB2 : semaphoreB1,B2 : recordemptyB1 := 1,fullB1:=0,emptyB2:=1,fullB2:=0cobegin process readX : record;begin R: 接收来自输入设备上一个记录X:=接收的一个记录;P(emptyB1);B1:=X;V(fullB1);goto R;end;Process moveY:record;beginM:P(fullB1);Y:=B1;V(emptyB1)加工YP(emptyB2);B2:=Y;V(fullB2);goto M; end;Process printZ:record;beginP:P(fullB2);Z:=B2;V(emptyB2)打印Zgoto P;end;coend;end;2、用PV操作解决读者写者问题的正确程序如下:begin S, Sr: Semaphore; rc: integer;S:=1; Sr:=1; rc:=0;cobegin PROCESS Reader i ( i=1,2…)begin ( P(S5))P(Sr)rc:=rc+1;if rc=1 then P(S);V(Sr);read file;P(Sr);rc:=rc-1if rc=0 thenV(S);V(Sr);( V(S5) )end ;PROCESS Writer j (j=1,2…)begin P(S);Write file;V(S)end;coend ;end;请回答:(1)信号量Sr的作用;(2)程序中什么语句用于读写互斥,写写互斥;(3)若规定仅允许5个进程同时读怎样修改程序?解:(1)Sr用于读者计数变量rc的互斥信号量;(2)if rc=1 then P(S)中的P(S)用于读写互斥;写者进程中的P (S)用于写写互斥,读写互斥。
pv操作例题
Type def semaphore; Semaphore s1=s2=s3=s4=0; PROC P1 执行P1的操作; V(S1); V(S2);
process p2 begin repeat p(s2); read A; v(s1); until false end
coend end
设P1为司机进程,它的任务是:启动、行驶、停车; P2为售票员进程,它的任务是:关门、售票、开门。用 P,V操作写出保证P1,P2安全运行的同步算法。
begin close,stop:semaphore; close:=0; stop:=0; cobegin
PROC P2 P(S1); 执行P2的操作; V(S3);
PROC P3 P(S2); 执行P3的操作; V(S4);
PROC P4 P(S3); P(S4); 执行P4的操作
P1、P2、P3、P4为具有合作关系的四个进程,P1执行 三个计算操作并将结果分别存入X、Y、Z变量,P1运行 结束后,P2、P3和P4分别计算X、Y、Z变量的平方值 并将结果存入原变量。利用P、V操作实现上述进程间 的同步关系。
process P2 begin P(S1); 执行工序2; V(S2); end;
process P3 begin P(S2); 执行工序3; end; Coend end
设P1、P2、P3为3个相互合作的进程,P1和P2各自从 外部设备读取数据分别存入X变量和Y变量,P3进程将X、 Y的值相加并将结果存入Z变量。试用P、V操作实现上 述同步关系。
pv操作典型例题
例1 在某展示厅设置一个自动计数系统,以计数器count表示在场的人数,count是动态变化的,若有一个人进入展示厅进程pin对计数器count加1,当有一个人退出展示厅时,进程pout实现计数器减1。
由于进、出所以展示厅的人是随机的,用P-V操作实现。
(并发进程之间的互斥问题)解:定义信号量:S——表示是否有进程进入临界区,初值为1.(表示没有进程进入临界区)begincount: Integer;S: semaphore;count:=0;S:=1;cobeginprocess PinR1: Integer;beginP (S);R1:=count;R1:=R1+1;count:=R1;V(S);end;Process PoutR2: Integer;beginP (S);R2:=count;R2:=R2-1;count:=R2;V (S);end;count;end;例2 与生产者和消费过者相似的问题,把“A进程将记录送入缓冲器”看生产者生产了一件物品且把物品存入缓冲器,把“B进程从缓冲器中取出记录并加工”看作是消费者从缓冲器取出物品去消费,缓冲器中只能放一个记录(一件物品),用P-V操作实现。
(并发进程之间的同步问题)解:定义两个信号量为:sp和sg。
sp:表示生产者是否右以把物品存入缓冲器。
由于缓冲器只能存放一个物品,因此sp的初值为1,即sp:=1。
sg:表示缓冲是否存有物品,它的初值应该为0,即sg:=0,表示缓冲器中还没有物品存在。
生产者和消费者两个进程并发执行时,可按以下的方式实现同步:sp:=1;sg:=0;cobeginprocess producer (生产者进程)beginL1:produce a product;P(sp);Buffer:=product;V(sg);goto L1endprocess consumer(消费者进程)beginL2: P(sg);Take a product;V(sp);consume;goto L1end;coend;例3 如果一个生产者和一个消费共享缓冲器容量为可以存放n件物品时,生产者总可继续存入物品;同时当缓冲器的物品不为“0”时,消费者总可从缓冲器中取走物品,用P-V操作实现。
pv操作练习题
用P,V操作实现下述问题的解。
一、桌上有一个盘子,可以放一个水果;父亲总是放苹果到盘子中;母亲总是放香蕉到盘子中。
一个儿子专等吃盘中的香蕉,而一个女儿专等吃盘中的苹果。
父母只放水果不吃,儿女只吃水果不放。
实现父亲,母亲,儿子,女儿的进程同步。
二、在公共汽车上,司机和售票员的活动分别是:司机的活动:启动车辆,正常行车,到站停车。
售票员的活动:上下乘客,关车门,售票,开车门,上下乘客。
在汽车不停的到站,停站,行驶过程中,这两个活动有什么同步关系?用信号量和P,V操作实现它们的同步。
三、某寺庙,有小,老和尚若干,有一个水缸,有小和尚提水入缸供老和尚饮用。
水缸可以放10桶水,水从一个井里面提。
水井狭窄,每次只能容纳一个桶取水。
水桶总数为3个。
每次入、取缸水只能是1桶,且不可以同时进行。
试给出取水,入水的算法描述。
四、一个快餐厅有4类职员:(1)领班:接受顾客点菜,出菜单;(2)厨师:根据菜单,准备顾客的饭菜;(3)打包工:将做好的饭菜打包;(4)出纳员:收款并提交食品。
每个职员可被看作一个进程,试用一种同步机制写出能让四类职员正确并发运行的程序。
五、假设有一个作业由四个进程组成,这四个进程在运行时必须按如图所示的次序依次执行,试用P,V原语表达四个进程的同步关系:六、观察者和报告者是两个并发执行的进程,观察者不断观察并对通过的卡车计数,报告者定时的将观察者的计数值打印,打印完毕,将计数值清零。
七、假定阅览室最多可同时容纳100个人阅读,读者进入时,必须在阅览室门口的一个登记表上登记,内容包括姓名、座号等,离开时要撤掉登记内容。
用P、V操作描述读者进程的同步算法。
PV操作
PV操作练习题37、现有某类资源有10个供A、B、C三个进程共享。
它们对资源的需求量分别为7个,5个,3个。
目前已分别得到了4个,3个,2个。
如果当三个进程都继续请求再分配资源时,系统先满足进程A的请求,那么系统会出现什么现象?为什么?【1404】41、进程A和进程B共享某个资源。
它们并发执行的程序如下:beginbusy ∶Boolean;busy ∶= true;cobeginprocess AbeginL∶if busy then begin使用资源;busy∶=false;end;goto L;end:process BbeginK∶if not busy then begin使用资源;busy ∶=true;end;goto K;end;coend;end:回答下面问题:【1404】(1)进程A和进程B按什么规律在使用资源?(2)若程序中不使用布尔变量busy,而改用PV操作来管理,则应采用同步方式还是互斥方式?(3)在保持原来的资源使用规律情况下,把上述程序改用PV操作来管理。
3.某系统采用PV操作管理可供n个进程共享的文件F。
若允许最多m个进程(n≥m≥1)同时读文件F,则信号量的值会在什么范围内变化.?处于等待读文件的进程数最多有几个?[1307]43、系统有某类资源m个,被n个进程共享,每个进程都需求k个资源。
若m=5,n=4,则k 的最大值为__________时系统一定不会死锁。
44、用PV操作来管理A,B两个进程共享的缓冲器,信号量的初值定义为S1=1,S2=0。
当B 进程取走了A进程存入缓冲器中的数后,应执行__________。
操作,以允许A进程继续存数。
45、有n个进程竞争必须互斥使用的共享资源。
若采用PV操作管理,则可能出现的信号量最小值是__________。
[1304]42.某进程欲从指定信箱取信件时,若指定的信箱无信件,则应把该进程置成______状态。
43.假定系统有某类资源12个,被5个进程共享,每个进程都需要k个资源,则k的最大值为______时系统一定不会死锁。
pv操作练习
1、有一个自习室,共有50个座位。
学生进入时必须在一张登记表上登记,该表为每一座位列一表目,包括座位号和学生学号。
学生离开时要消掉登记内容。
描述学生进程的程序如下,在适当的位置填上适当的信号量初值和pv操作。
BeginS,count:semaphore;S:= ①;Count:= ②;CobeginProcess Readeri(i=1,2……)Begin进入自习室③;④;I:=获取座位号;登记1项表目(名字,座位号);⑤;坐下学习⑥;消去登记项(名字,座位号);⑦;⑧;离开EndCoendEnd;2、某银行大厅,任何时刻最多可容纳10名顾客进入,当大厅中少于10名顾客时,厅外的顾客可以立即进入,否则需在外等候。
若把一个顾客看做一个进程,试问:(1)用P、V操作管理这些并发进程时,应怎样定义信号量?写出信号量的初值以及信号量各种取值的含义。
(2)若顾客最多为n个人,写出信号量可能的最大值和最小值。
(3)试写出并发程序。
3、一座山上有一个隧道,规定每次只允许一列火车通过隧道,现在南方北方都有火车要过隧道,如果把每个过隧道者看做一个进程,为保证安全,用pv操作实现正确管理程序如下:BeginS:semaphore;S:= ①;CobeginProcess(S-N)i(i=1,2……)Begin②;过隧道;③;End;Process(N -S)i(i=1,2……)Begin④;过隧道;⑤;End。
根据上述程序,请将程序空缺的地方填上适当的内容。
①②③④⑤。
- 1、下载文档前请自行甄别文档内容的完整性,平台不提供额外的编辑、内容补充、找答案等附加服务。
- 2、"仅部分预览"的文档,不可在线预览部分如存在完整性等问题,可反馈申请退款(可完整预览的文档不适用该条件!)。
- 3、如文档侵犯您的权益,请联系客服反馈,我们会尽快为您处理(人工客服工作时间:9:00-18:30)。
用P,V操作实现下述问题的解。
一、桌上有一个盘子,可以放一个水果;父亲总是放苹果到盘子中;母亲总是放香蕉到盘子中。
一个儿子专等吃盘中的香蕉,而一个女儿专等吃盘中的苹果。
父母只放水果不吃,儿女只吃水果不放。
实现父亲,母亲,儿子,女儿的进程同步。
二、在公共汽车上,司机和售票员的活动分别是:
司机的活动:启动车辆,正常行车,到站停车。
售票员的活动:上下乘客,关车门,售票,开车门,上下乘客。
在汽车不停的到站,停站,行驶过程中,这两个活动有什么同步关系?用信号量和P,V操作实现它们的同步。
三、某寺庙,有小,老和尚若干,有一个水缸,有小和尚提水入缸供老和尚饮用。
水缸可以放10桶水,水从一个井里面提。
水井狭窄,每次只能容纳一个桶取水。
水桶总数为3个。
每次入、取缸水只能是1桶,且不可以同时进行。
试给出取水,入水的算法描述。
四、一个快餐厅有4类职员:(1)领班:接受顾客点菜,出菜单;(2)厨师:根据菜单,准备顾客的饭菜;(3)打包工:将做好的饭菜打包;(4)出纳员:收款并提交食品。
每个职员可被看作一个进程,试用一种同步机制写出能让四类职员正确并发运行的程序。
五、假设有一个作业由四个进程组成,这四个进程在运行时必须按如图所示的次序依次执行,试用P,V原语表达四个进程的同步关系:
六、观察者和报告者是两个并发执行的进程,观察者不断观察并对通过的卡车计数,报告者定时的将观察者的计数值打印,打印完毕,将计数值清零。
七、假定阅览室最多可同时容纳100个人阅读,读者进入时,必须在阅览室门口的一个登记表上登记,内容包括姓名、座号等,离开时要撤掉登记内容。
用P、V操作描述读者进程的同步算法。