PV操作解决公交车问题
操作系统同步例题

13. 对于生产者—消费者问题,假设缓冲区是无界的,试用信号灯与PV操作给出解法。
答:由于是无界缓冲区,所以生产者不会因得不到缓冲区而被阻塞,不需要对空缓冲区进行管理,可以去掉在有界缓冲区中用来管理空缓冲区的信号量及其PV操作。
semaphore mutex_in=1;semaphore mutex_out=1;semaphore empty=0;int in=0,out=0;生产者活动:while(1){produce next product;P(mutex_in);add the product to buffer[in]; in++;v(mutex_in);V(empty);} 消费者活动:while(1){P(empty);P(mutex_out);take the product from buffer[out]; out++;V(mutex_out);}14. 设有一个可以装A、B两种物品的仓库,其容量无限大,但要求仓库中A、B两种物品的数量满足下述不等式:-M≤A物品数量-B物品数量≤N其中M和N为正整数。
试用信号灯和PV操作描述A、B两种物品的入库过程。
答:已知条件 -M≤A物品数量-B物品数量≤N 可以拆成两个不等式,即A物品数量-B物品数量≤N,B物品数量-A物品数量≤M。
这两个不等式的含义是:仓库中A物品可以比B物品多,但不能超过N个;B物品可以比A 物品多,但不能超过M个。
semaphore a=n;semaphore b=m;void main(){createprocess(A,…);createprocess(B,…);}A物品入库:void A(){ while(1){ B物品入库:void B(){ while(1){P(a);A物品入库; V(b);}} P(b);B物品入库; V(a);}}15. 试用信号灯与PV操作实现司机与售票员之间的同步问题。
设公共汽车上有一个司机和一个售票员,其活动如下图所示。
pv原语练习题带答案

customer( )
begin
L1:走进理发店
P(chair)
P(hairdresser)
V(chair)
让理发师为他理发
13、设存在三个过程get、copy和put分别对缓冲区S和T进行操作,其中get负责将数据块存入缓冲区S,copy负责从缓冲区S读出数据并复制到缓冲区T中,put负责从缓冲区T中读出数据并打印,如图8.2所示。请用P、V操作描述上述三个过程。
答:设信号量SGC表示缓冲区S是否允许放数据,值为1时表示允许,初值为1;信号量SCG表示缓冲区S是否允许取数据,值为1时表示允许,初值为0;信号量SCP表示缓冲区T是否允许放数据,值为1时表示允许,初值为1;信号量SPC表示缓冲区T是否允许取数据,值为1时表示允许,初值为0。进程get、copy和put描述如下:
R1 R2 R3 R4
P1
0 0 3 2
0 0 1 2
1 6 2 2
P2
1 0 0 0
17 5 0
P3
1 3 5 4
2 3 5 6
P4
0 0 3 2
0 6 5 2
P5
011 4
0 6 5 6
答:(1)由于Available为(1 6 2 2),而P1进程Need(0 0 1 2),因而P1进程所需资源可以满足,经过一段时间P1进程可以执行完,所占有的资源可以释放,这是Available为(1 654)((1 6 2 2)+(0 0 3 2)得)。而P4进程Need(0652),因而P4进程所需资源可以满足,经过一段时间P4进程可以执行完,所占有的资源可以释放,这是Available为(1 686)((1 654)+(0 0 3 2)得)。而P5进程Need(0656),因而P5进程所需资源可以满足,经过一段时间P5进程可以执行完,所占有的资源可以释放,这是Available为(17910)((1 686)+(0114)得)。而P2进程Need(17 5 0),因而P2进程所需资源可以满足,经过一段时间P2进程可以执行完,所占有的资源可以释放,这是Available为(27910)((17910)+(100 0)得)。而P3进程Need(2 3 5 6),因而P3进程所需资源可以满足,经过一段时间P3进程可以执行完,系统中所有进程都可执行完,因此系统处于安全状态。
pv操作大题解题思路

pv操作大题解题思路PV操作是指进程同步的一种经典方法,用于解决进程之间的互斥和同步问题。
在解题时,可以按照以下思路进行分析和回答:1. 什么是PV操作?PV操作是指通过对信号量进行P(Proberen)和V(Verhogen)操作来实现进程同步。
P操作用于申请资源,如果资源不可用,则进程进入等待状态;V操作用于释放资源,让等待的进程得以继续执行。
2. PV操作的作用是什么?PV操作用于解决进程之间的互斥和同步问题。
互斥是指同一时间只允许一个进程访问临界资源,而同步是指进程之间按照一定的顺序执行,避免出现竞态条件和死锁等问题。
3. PV操作的原理是什么?PV操作基于信号量(Semaphore)的概念。
信号量是一个计数器,用于控制对共享资源的访问。
P操作会将信号量的值减1,如果结果小于0,则进程进入等待状态;V操作会将信号量的值加1,如果结果小于等于0,则唤醒等待的进程。
4. PV操作的应用场景有哪些?PV操作常用于解决生产者-消费者问题、读者-写者问题、哲学家就餐问题等。
在这些场景中,通过合理使用PV操作可以实现进程之间的协调与同步,避免资源竞争和死锁。
5. PV操作有哪些特点和优势?PV操作具有以下特点和优势:互斥性,PV操作可以确保同一时间只有一个进程访问共享资源,避免数据的不一致性。
同步性,PV操作可以按照一定的顺序执行进程,避免竞态条件和死锁。
简单高效,PV操作是一种经典的进程同步方法,实现简单,高效可靠。
适用性广泛,PV操作可以应用于各种并发场景,解决不同类型的进程同步问题。
总结:PV操作是一种经典的进程同步方法,通过对信号量进行P和V 操作来实现互斥和同步。
它的应用场景广泛,可以解决生产者-消费者问题、读者-写者问题等。
PV操作具有互斥性、同步性、简单高效和适用性广泛等特点和优势。
在解题时,可以根据具体的问题场景,灵活运用PV操作,保证进程之间的协调与同步。
P-V操作经典例题

P就是请求资源,V就是释放资源。
问题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)注销V(MUTEX)V(S)解(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)当独木桥上有自东向西的行人时,同方向的行人可以同时过桥,从西向东的方向,只允许一个人单独过桥.(此问题和读者与写者问题相同,东向西的为读者,西向东的为写者).(1)解设信号量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)}V (MD)从西向东: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)相同.问题4 有一个俱乐部,有甲乙两个服务员,当顾客有请求时,甲负责送烟,乙负责送火,无顾客请求时,服务员睡眠。
计算机操作系统之PV原语分析及计算

操作系统课程之PV原语PV原语通过操作信号量来处理进程间的同步与互斥的问题。
其核心就是一段不可分割不可中断的程序。
信号量的概念1965年由著名的荷兰计算机科学家Dijkstra提出,其基本思路是用一种新的变量类型(semaphore)来记录当前可用资源的数量。
有两种实现方式:1)semaphore的取值必须大于或等于0。
0表示当前已没有空闲资源,而正数表示当前空闲资源的数量;2)semaphore的取值可正可负,负数的绝对值表示正在等待进入临界区的进程个数。
信号量是由操作系统来维护的,用户进程只能通过初始化和两个标准原语(P、V原语)来访问。
初始化可指定一个非负整数,即空闲资源总数。
P原语:P是荷兰语Proberen(测试)的首字母。
为阻塞原语,负责把当前进程由运行状态转换为阻塞状态,直到另外一个进程唤醒它。
操作为:申请一个空闲资源(把信号量减1),若成功,则退出;若失败,则该进程被阻塞;V原语:V是荷兰语Verhogen(增加)的首字母。
为唤醒原语,负责把一个被阻塞的进程唤醒,它有一个参数表,存放着等待被唤醒的进程信息。
操作为:释放一个被占用的资源(把信号量加1),如果发现有被阻塞的进程,则选择一个唤醒之。
具体PV原语对信号量的操作可以分为三种情况:1)把信号量视为一个加锁标志位,实现对一个共享变量的互斥访问。
实现过程:P(mutex); // mutex的初始值为1 访问该共享数据;V(mutex);非临界区2)把信号量视为是某种类型的共享资源的剩余个数,实现对一类共享资源的访问。
实现过程:P(resource); // resource的初始值为该资源的个数N 使用该资源;V(resource); 非临界区3)把信号量作为进程间的同步工具实现过程:临界区C1;P(S);V(S);临界区C2;哲学家问题PV原语程序2009年03月10日星期二 21:29设有5个哲学家,共享一张放有五把椅子的桌子,每人分得一把椅子。
PV操作的例题

PV操作的例题一、线程是进程的一个组成部分,一个进程可以有多个线程,而且至少有一个可执行线程。
进程的多个线程都在进程的地址空间内活动。
资源是分给进程的,而不是分给线程的,线程需要资源时,系统从进程的资源配额中扣除并分配给它。
处理机调度的基本单位是线程,线程之间竞争处理机,真正在处理机上运行的是线程。
线程在执行过程中,需要同步。
二、在计算机操作系统中,PV操作是进程管理中的难点。
首先应弄清PV操作的含义:PV操作由P操作原语和V操作原语组成(原语是不可中断的过程),对信号量进行操作,具体定义如下:P(S):①将信号量S的值减1,即S=S-1;②如果S>=0,则该进程继续执行;否则该进程置为等待状态,排入等待队列。
V(S):①将信号量S的值加1,即S=S+1;②如果S>0,则该进程继续执行;否则释放队列中第一个等待信号量的进程。
PV操作的意义:我们用信号量及PV操作来实现进程的同步和互斥。
PV操作属于进程的低级通信。
什么是信号量?信号量(semaphore)的数据结构为一个值和一个指针,指针指向等待该信号量的下一个进程。
信号量的值与相应资源的使用情况有关。
当它的值大于0时,表示当前可用资源的数量;当它的值小于0时,其绝对值表示等待使用该资源的进程个数。
注意,信号量的值仅能由PV操作来改变。
一般来说,信号量S>=0时,S表示可用资源的数量。
执行一次P操作意味着请求分配一个单位资源,因此S的值减1;当S<0时,表示已经没有可用资源,请求者必须等待别的进程释放该类资源,它才能运行下去。
而执行一个V操作意味着释放一个单位资源,因此S 的值加1;若S?0,表示有某些进程正在等待该资源,因此要唤醒一个等待状态的进程,使之运行下去。
利用信号量和PV操作实现进程互斥的一般模型是:进程P1 进程P2 ……进程Pn………………P(S);P(S);P(S);临界区;临界区;临界区;V(S);V(S);V(S);……………………其中信号量S用于互斥,初值为1。
操作系统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所示。
有关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)用于写写互斥,读写互斥。
- 1、下载文档前请自行甄别文档内容的完整性,平台不提供额外的编辑、内容补充、找答案等附加服务。
- 2、"仅部分预览"的文档,不可在线预览部分如存在完整性等问题,可反馈申请退款(可完整预览的文档不适用该条件!)。
- 3、如文档侵犯您的权益,请联系客服反馈,我们会尽快为您处理(人工客服工作时间:9:00-18:30)。
司机的活动: 启动车辆; 正常行车; 到站停车; 售票员的活动:关车门; 售票; 开车门; 在汽车不断地到站、停车、行驶过程中, 这两个活动有什么同步关系?用信号量和P、 V操作实现它们的同步。
解:
在汽车行驶过程中,司机活动与售票员活 动之间的同步关系为:售票员关车门后,向司 机发开车信号,司机接到开车信号后启动车辆, 在汽车正常行驶过程中售票员售票,到站时司 机停车,售票员在车停后开车门让乘客上下车。 因此司机启动车辆的动作必须与售票员关车门 的动作取得同步;售票员开车门的动作也必须 与司机停车取得同步, 在本题中,应设置两个信号量:S1、S2。 S1表示是否允许司机启动汽车,其初值为0; S2表示是否允许售票员开门,其初值为() driver() int S2=0; { { main() while(1) while(1) { { { cobegin 关车门; P(S1); driver(); V(Sl); 启动车辆; busman(); 售票; 正常行车; coend P(S2); 到站停车; } 开车门; V(S2); 上下乘客; } } } }