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操作类的题目
有关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习题
1、有一个报箱为A、B两人共同使用,每次只能装一份报纸。
A订阅《科技报》,B 订阅《新民晚报》,投递员C、D分属科技报社和新民晚报社,试用P、V操作写出他们的同步执行程序。
var s,science,night:semaphore:=1,0,0;beginparbeginA: begin while(true) C: begin while(true){ wait(science); { wait(s);取科技报; 投递科技报;signal(s); signal(science);} }end; end;B: begin while(true) D: begin while(true){wait(night); {wait(s);取新民晚报; 投递新民晚报;signal(s); signal(night);} }end; end;parend;end.2、设有两个优先级相同的进程P1和P2如下。
信号量S1和S2的初值均为0,试问P1、P2并发执行后,x、y、z的值各是多少?请写出判断的过程。
进程P1:进程P2:y=1; x=1;y=y+2; x=x+1;V(S1); P(S1);z=y+1; x=x+y;P(S2); V(S2);y=z+y; z=x+z;并发进程P1、P2中各语句执行的前趋图为:3的执行8可以并发执行:(17,z的值为9。
(212,z的值为9。
varmutex : semaphere;信号量,用于互斥full : semaphere; 信号量,用于同步table : array 0..n-1 of item; 登记表procedure reader; 读者进程beginP(full);P(mutex);Register_name(table);V(mutex);Reading;P(mutex);Delet_name(table);V(mutex);V(full)end;beginseminitsal(mutex.v,1; full.v,100); 初始化cobeginreader;reader;...coendend.司机的活动:启动车辆,正常行车,到站停车。
第11课PV操作练习
P(S1); 将缓冲区R中记 从T中取出记录 录拷贝到缓冲区 放入文件G中; T中; V(S2);
此种解法是否正确: GET: P(S1); 从文件F取记录 放入缓冲区R中; V(S2); COPY: P(S2); 将缓冲区R中记 录拷贝到缓冲区 T中; V(S3); PUT: P(S3); 从T中取出记录 放入文件G中; V(S1);
P145 GET: P(S2); 从文件F取记录 放入缓冲区R中; V(S1); COPY: PUT:
信号量S1,S2 初始值S1=0;S2=0
P(S1); 将缓冲区R中记 从T中取出记录 录拷贝到缓冲区 放入文件G中; T中; V(S2);
此种解法是否正确: GET: P(S1); 从文件F取记录 放入缓冲区R中; V(S2); COPY: P(S2); 将缓冲区R中记 录拷贝到缓冲区 T中; V(S3); PUT: P(S3); 从T中取出记录 放入文件G中; V(S1);
课堂练习
独木桥问题。某条河上只有一座独木桥, 以便行人过桥,现在河的两边都有人要过 桥,按照下面的规则过桥,为了保证过桥 安全,请用P,V操作分别实现正确的管理。 过桥的规则: 每次只允许一个人过桥
课堂练习
独木桥问题。某条河上只有一座独木桥, 以便行人过桥,现在河的两边都有人要过 桥,按照下面的规则过桥,为了保证过桥 安全,请用P,V操作分别实现正确的管理。 过桥的规则: 同一方向的可连续过桥,某方向有人过桥 时另一方向的人要等待。
课堂练习
独木桥问题。某条河上只有一座独木桥, 以便行人过桥,现在河的两边都有人要过 桥,按照下面的规则过桥,为了保证过桥 安全,请用P,V操作分别实现正确的管理。 过桥的规则: 当独木桥上有自东向西的行人时,同方向 的行人可以同时过桥,从西向东的方向, 只允许一个人单独过桥。
网络操作系统 习题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(Present Value)操作的例题:
假设你有一个投资机会,可以在今天投资1000美元,并在五年后获得1500美元的回报。
如果使用贴现率为10%,你将如何计算这个投资的PV(现值)?
PV可以用以下公式计算:
PV = CF / (1 + r)^n
其中,CF表示现金流量(回报),r表示折现率(贴现率),n表示时间期限。
根据这个公式,在这个例子中,CF = 1500美元,r = 10%,n = 5年。
将这些值代入公式中,我们可以计算出PV:
PV = 1500 / (1 + 0.10)^5
PV = 1500 / (1.10)^5
PV ≈ 1500 / 1.61
PV ≈ 930.43美元
因此,根据给定的贴现率,该投资的PV约为930.43美元。
这表示,如果你在今天投资1000美元,五年后的回报以目前的贴现率计算的现值为930.43美元。
操作系统PV操作经典例题与答案
操作系统PV操作经典例题与答案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; //信号量,读进程在此信号量等待while (true) {P(SM);从Buffer[j]取消息;ReadCount++If(ReadCount<n){< p="">V(SM);P(SW)}else{V(SB);j = (j+1) % k;for(int g=1; g< ReadCount;g++)V(SW);ReadCount=0;}};2.第二类读者写者问题:写者优先条件:1)多个读者可以同时进行读2)写者必须互斥(只允许一个写者写,也不能读者写者同时进行)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)||(rc>0)){P(W)}V(mutex);写P(mutex);Wc --;if(wc>0)V(W);Else if(rw>0)V(R)rw--V(mutex);};3.理发师睡觉问题理发店里有一位理发师,一把理发椅和N把供等候理发的顾客坐的椅子如果没有顾客,则理发师便在理发椅上睡觉。
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
第2章PV练习
把学生和监考老师都看作进程,学生有N人, 把学生和监考老师都看作进程,学生有 人 教师1人 考场门口每次只能进出一个人, 教师 人。考场门口每次只能进出一个人,进考场 原则是先来先进。当N个学生都进入考场后, 教师 原则是先来先进。 个学生都进入考场后, 个学生都进入考场后 才能发卷子。学生交卷后可以离开考场, 才能发卷子。学生交卷后可以离开考场, 教师要等 收上来全部卷子并封装卷子后才能离开考场。 收上来全部卷子并封装卷子后才能离开考场。 (1) 问共需设置几个进程 问共需设置几个进程? (2) 试用 、V操作解决上述问题中的同步和互斥 试用P、 操作解决上述问题中的同步和互斥 关系。 关系。
Teacher: begin P(finish);等待学生实习结束 等待学生实习结束 P(finish); 等另一学生实习结 束 Check; V(test); 检查完成 V(test); 检查完成 End; Guard: begin P(student);等待学生到达 等待学生到达 P(student); 等待另一学生到 达 V(enter); 允许学生进入 V(enter); 允许另一学生进入 End;
解答
2)只有当缓冲区中没有数,或W1或W2将数取走后, )只有当缓冲区中没有数, 将数取走后, 或 将数取走后 进程R才可以将新读入的数放到缓冲区中 才可以将新读入的数放到缓冲区中。 进程 才可以将新读入的数放到缓冲区中。 3)进程W1或W2对每次存入缓冲区中的数只能显示 )进程 或 对每次存入缓冲区中的数只能显示 一次, 都不能从空的缓冲区中取数。 一次,且W1和W2都不能从空的缓冲区中取数。 和 都不能从空的缓冲区中取数 假定开始时,缓冲区为空。 假定开始时,缓冲区为空。利用记录型信号量及 wait、signal操作写出三个并发进程正确工作程序。 操作写出三个并发进程正确工作程序。 、 操作写出三个并发进程正确工作程序
PV习题
PV 习题一、填空1.信号量的物理意义是当信号量值大于零时表示;当信号量值小于零时,其绝对值为。
2.所谓临界区是指进程程序中。
3.用P、V操作管理临界区时,一个进程在进入临界区前应对信号量执行操作,退出临界区时应对信号量执行操作。
4.有m个进程共享一个临界资源。
若使用信号量机制实现对临界资源的互斥访问,则该信号量取值最大为,最小为。
5.对信号量S的P操作原语中,使进程进入相应信号量队列等待的条件是。
6.死锁是指系统中多个无休止地等待永远不会发生的事件出现。
7.产生死锁的4个必要条件是互斥、非剥夺、部分分配和。
8.在银行家算法中,如果一个进程对资源提出的请求将会导致系统从的状态进入到的状态时,就暂时拒绝这一请求。
9.信箱在逻辑上被分为和两部分。
10.在操作系统中进程间的通信可以分为通信与通信两种。
二、选择1.P、V操作是。
A.两条低级进程通信原语B.两条高级进程通信原语C.两条系统调用命令D.两条特权指令2.进程的并发执行是指若干个进程。
A.共享系统资源B.在执行的时间上是重叠的C.顺序执行D.相互制约3.若信号量S初值为2,当前值为−1,则表示有个进程在与S相关的队列上等待。
A.0 B.1 C.2 D.34.用P、V操作管理相关进程的临界区时,信号量的初值应定义为。
A.−1 B.0 C.1 D.随意5.用V操作唤醒一个等待进程时,被唤醒进程的状态变为。
A.等待B.就绪C.运行D.完成6.若两个并发进程相关临界区的互斥信号量MUTEX现在取值为0,则正确的描述应该是。
A.没有进程进入临界区B.有一个进程进入临界区C.有一个进程进入临界区,另一个在等待进入临界区D.不定7.在系统中采用按序分配资源的策略,将破坏产生死锁的条件。
A.互斥B.占有并等待 C.不可抢夺D.循环等待8.某系统中有3个并发进程,都需要4个同类资源。
试问该系统不会产生死锁的最少资源总数应该是。
A.9 B.10 C.11 D.129.银行家算法是一种算法。
操作系统PV操作习题.
一、用P、V操作描述前趋关系。
P1、P2、P3、P4、P5、P6为一组合作进程,其前趋图如图2.3所示,试用P、V 操作描述这6个进程的同步。
p23图2.3说明任务启动后P1先执行,当它结束后P2、P3可以开始执行,P2完成后P4、P5可以开始执行,仅当P3、P4、P5都执行完后,P6才能开始执行。
为了确保这一执行顺序,设置5个同步信号量n、摄、f3、f4、g分别表示进程P1、P2、P3、P4、P5是否执行完成,其初值均为0。
这6个进程的同步描述如下:图2.3 描述进程执行先后次序的前趋图int f1=0; /*表示进程P1是否执行完成*/int f2=0; /*表示进程P2是否执行完成*/int f3=0; /*表示进程P3是否执行完成*/int f4=0; /*表示进程P4是否执行完成*/int f5=0; /*表示进程P5是否执行完成*/main(){cobeginP1( );P2( );P3( );P4( );P5( );P6( );coend}P1 ( ){┇v(f1);v(f1):}P2 ( ){p(f1);┇v(f2);v(f2);)P3 ( ){p(f1);┇v(f3);}P4( ){p(f2);┇v(f4);}P5 ( ){p(f2);┇v(f5);}P6( ){p(f3);p(f4);p(f5);┇}二、生产者-消费者问题p25生产者-消费者问题是最著名的进程同步问题。
它描述了一组生产者向一组消费者提供产品,它们共享一个有界缓冲区,生产者向其中投放产品,消费者从中取得产品。
生产者-消费者问题是许多相互合作进程的一种抽象。
例如,在输入时,输入进程是生产者,计算进程是消费者;在输出时,计算进程是生产者,打印进程是消费者。
因此,该问题具有很大实用价值。
我们把一个长度为n的有界缓冲区(n>0)与一群生产者进程P1、P2、…、Pm和一群消费者进程C1、C2、…、Ck 联系起来,如图2.4所示。
(完整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操作典型例题
例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练习题
1、有一个笼子,猎户放老虎,农夫放猪。
动物园取老虎,饭店取猪,请实现。
2、三个人约好到某地集中后一起去看电影,请实现。
3、生产围棋的工人不小心把相等数量的黑子和白子混装在一个箱子里现要用自动分拣系统把黑子和白子分开,该系统有两个并发执行的进程ProcessA和ProcessB组成,系统功能如下:.ProcessA专拣黑子,ProcessB专拣白子;.每个进程每次只拣一子,当一个进程在拣子时,不允许另一个进程去拣子;.当一个进程拣了一个子(黑子或白子)以后,必须让另一个进程拣一子(白子或黑子),请回答:(1)这两个并发进程之间的关系是同步还是互斥?(2)写出用P、V操作管理时应定义的信号量及初值。
(3)根据定义的信号量,写出控制两进程并发执行的程序。
4.进程Pro1往缓冲区Buf1中填入一个记录,进程Pro2把Buf1中的记录复制到Buf2中,语句:5.现有一单向行车道作调度车场,B为入口,A为出口,在车场内最多可同时停放10部汽车,当车场内无车时,A处不得再有发车信号,当车场停满10部汽车后,B处不得再有进车信号,进、发车不得同时进行,试用PV操作实现这一调度方案,说明所用信号量的初值。
A…………………… B6.设一元二次方程的求实根公式为:X=aac bb b24 *-±-,其中若a,b,c已经赋值,且满足b*b>4ac,1)试画出计算的并发执行流程图,原则是最大限度地提高并发度,每条指令只进行一次简单运算。
(5分)2)用P,V实现并发控制。
(10分。
定义信号量并给出初值3分,P,V操作7分)7.某宾馆门前有一个出租汽车停车位,假设宾馆每一位顾客出门都要乘坐出租车,并且对顾客约定:如果有其它顾客在此停车位等车则在旁等待;否则在此等车;此停车位有车则乘坐。
对出租车作出约定:如果此停车位已停有车,则等待此停车位空闲;否则停到此停车位等待顾客;有顾客则搭载顾客离开。
试定义信号量,说明信号的初值和意义,用P、V原语编写程序描述顾客与出租车的行为。
- 1、下载文档前请自行甄别文档内容的完整性,平台不提供额外的编辑、内容补充、找答案等附加服务。
- 2、"仅部分预览"的文档,不可在线预览部分如存在完整性等问题,可反馈申请退款(可完整预览的文档不适用该条件!)。
- 3、如文档侵犯您的权益,请联系客服反馈,我们会尽快为您处理(人工客服工作时间:9:00-18:30)。
进入售票厅;
购票;
退出;
Signal(s);
end;
parend
有座东西方向架设、可双向通行的单车道简易桥,最大负荷为4辆汽车。请定义合适的信号量,正确使用wait/signal操作,实现双向车辆的过桥过程。
信号量应该有4个:
S,初值为1,代表桥的互斥使用的信号量;Scounteast,初值为1,代表由东向西行驶的桥上的车辆计数器的互斥使用;
吃桔子;
}
女儿while(TRUE)
{
Wait(Sa);
从盘中取出苹果;
Signal(S);
吃苹果;
}
父亲-母亲-儿子-女儿一个苹果或桔子
信号量:s=1(空盘);s1=0(苹果);s2=0(桔子);
爸爸:while(true) { wait(s);放苹果; signal(s1); }
妈妈:while(true) { wait(s);放桔子; signal(s2); }
semaphore fulla=0;
semaphore fullb=0;
semaphore sa=n;
semaphore sb=n;
main()
{
cobegin
Provider_A();
Provider_B();
Assembling_shop();
conend
}
Provider_A()
{
while(true)
有一个仓库(无限大),可以存放A和B两种产品,但要求:
(1)每次只能存入一种产品(A或B);
(2)-N<A产品数量-B产品数量<M
其中,N和M是正整数。
试用Wait/Signal操作描述产品A与产品B的入库过程。
int mutex=1; //互斥信号量
int sa=M-1; //表示当前允许A产品比B产品多入库的数量
int sb=N-1; //表示当前允许B产品比A产品多入库的数量
main( )
{
while (1)
{
取一个产品;
if (取的是A产品)
{
P(sa);
P(mutex);
将产品入库;
V(mutex);
V(sb);
}
else
{
P(sb);
P(mutex);
将产品入库;
V(mutex);
V(sa);
}
}
}
signal(mutex);
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);
(1)问共需设置几个进程?
(2)用Wait/Signal操作解决上述问题中的同步互斥关系。
本题中给出的两种零件数量关系为:
A零件数量-B零件数量≤n
B零件数量-A零件数量≤n
A零件数量≤m
B零件数量≤m
semaphore mutex=1;
semaphore emptya=m;
semaphore emptyb=m;
int sb=0; //表示当前仓库中B产品的数量
int dif=0;//表示所销售的A、B产品的数量差
Process_A:
while (1)
{
wait(s1);
produce a product A;
signal(s2);
wait(mutex);
add the product A to the storehouse;
{
wait(emptya);
wait(sa);
wait(mutex);
将零件A放入仓库;
signal(mutex);
signal(fulla);
signal(sb);
}
}
Provider_B()
{
while(true)
{
wait(emptyb);
wait(sb);
wait(mutex);
将零件A放入仓库;
Counteast,Countwest:integer;
Counteast: = 0;Countwest: = 0;
Cobegin ,
process east( i )
begin
P( Scounteast ) ;
if Counteast = 0 then P( S ) ;
Counteast : = Counteast + l ;
process west( i )
begin
P( Scountwest ) ;
if Countwest = 0 then P( S ) ;
Countwest: = Countwest + 1 ;
V( Scountwest ) ;
P ( Scount4 ) ;
上桥;过桥:下桥:
V ( Scount4 ) ;
}
}
设有两个生产者进程A、B和一个销售者进程C,他们共享一个无限大的仓库,生产者每次循环生产一个产品,然后入库供销售者销售;销售者每次循环从仓库中取出一个产品进行销售。如果不允许同时入库,也不允许边入库边出库;而且要求生产和销售A产品和B产品的件数都满足一下关系:
-N≤A产品数量-B产品数量≤M
其中,N和M是正整数。
试用信号量机制写出A、B、C三个进程的工作流程。
int mutex=1; //互斥信号量
int s1=M; //表示当前允许A产品比B产品
多入库的数量
int s2=N; //表示当前允许B产品比A产品
多入库的数量
int s=0; //表示当前仓库中产品的总数量
int sa=0; //表示当前仓库中A产品的数量
设一民航售票系统有n个售票处。每个售票处通过终端访问系统中的公用数据区,假定公用数据区中分别用R1、R2、R3、…Rn表示×月×日×次航班的现存票数。设P1、P2、P3、Pn表示各售票处的处理进程,试用信号量实现进程间的互斥关系
Var s: semaphore :=1;
begin
parbegin
process Pi: begin
wait(mutex);
take a product B;
signal(mutex);
dif:=dif-1; }
else {
wait(mutex);
take a product;
int Sa=0; //Sa表示盘中是否有苹果;
int Sb=0; //Sb表示盘中是否有桔子;
父亲while(TRUE)
{
Wait(S);
将水果放入盘中;
if (放入的是桔子)
Signal(Sb);
Else
Signal(Sa);
}
儿子while(TRUE)
{
Wait(Sb);
从盘中取出桔子;
Signal(S);
汽车进程:
Pi(i=1,2,3,…)
到达桥头;
P(S);
上桥行驶;
到达桥另一端;
V(S);
某超市门口为顾客准备了100辆手推车,每位顾客在进去买东西时取一辆推车,在买完东西结完帐以后再把推车还回去。试用Wait/Signal操作正确实现顾客进程的同步互斥关系。
semaphore S_CartNum=100;//空闲的手推车数量,初值为100
signal(mutex);
signal(fullb);
signal(sa);
}
}
Assembling_shop()
{
while(true)
{
wait(fulla);
wait(fullb);
wait(mutex);
装配零件;
signal(mutex);
signal(emptya);
signal(emptyb);
儿子:while(true) { wait(s2);取桔子; signal(s); }
女儿:while(true) { wait(s1);取苹果; signal(s); }
父亲-母亲-儿子-女儿两个苹果或桔子
信号量:s=2(可用);s1=0(苹果);s2=0(桔子);mutex=1;
爸爸:wait(s); wait(mutex);放苹果; signal(s1); signal(mutex);
(1)进程A专门拣黑子,进程B专门拣白子;
(2)每个进程每次只拣一个子,当一个进程在拣子时不允许另一个进程去拣子;
s:semaphore:=1;
parbegin
process A:begin
L1: Wait(s);
拣黑子;
Signal(s);
goto L1;
end;
process B:begin
L2:Wait(s);
repeat
Wait (s);
按旅客定票要求找到Rk
if Rk>=1 then begin
Rk=Rk-1;
Signal (s);
输出一张票;
end;
else begin
Signal (s);
输出“票已售完”;
end;
until false;
end
parend
end
生产围棋的工人不小心把相等数量的黑子和白子混装在一个箱子里,现要用自动分拣系统把黑子和白子分开,该系统由两个并发执行的进程组成,功能如下:
Scountwest,初值为1,代表由西向东行驶的桥上的车辆计数器的互斥使用;