PV操作的例题

合集下载

信号量的PV操作(例题)汇总

信号量的PV操作(例题)汇总

???信号量的PV操作是如何定义的?试说明信号量的PV操作的物理意义。

参考答案:P(S):将信号量S减1,若结果大于或等于0,则该进程继续执行;若结果小于0,则该进程被阻塞,并将其插入到该信号量的等待队列中,然后转去调度另一进程。

V(S):将信号量S加1,若结果大于0,则该进程继续执行;若结果小于或等于0,则从该信号量的等待队列中移出一个进程,使其从阻塞状态变为就绪状态,并插入到就绪队列中,然后返回当前进程继续执行。

PV操作的物理含义:信号量S值的大小表示某类资源的数量。

当S>0时,其值表示当前可供分配的资源数目;当S<0时,其绝对值表示S信号量的等待队列中的进程数目。

每执行一次P操作,S值减1,表示请求分配一个资源,若S≥0,表示可以为进程分配资源,即允许进程进入其临界区;若S<0,表示已没有资源可供分配,申请资源的进程被阻塞,并插入S的等待队列中,S的绝对值表示等待队列中进程的数目,此时CPU将重新进行调度。

每执行一次V操作,S值加1,表示释放一个资源,若S>0,表示等待队列为空;若S≤0,则表示等待队列中有因申请不到相应资源而被阻塞的进程,于是唤醒其中一个进程,并将其插入就绪队列。

无论以上哪种情况,执行V操作的进程都可继续运行。

1、设公共汽车上,司机和售票员的活动分别是:司机的活动:启动车辆;正常行车;到站停车;售票员的活动:关车门;售票;开车门;在汽车不断地到站、停车、行驶过程中,这两个活动有什么同步关系?用P、V操作实现它们的同步。

设两个信号量S和C,初值为S=0;C=0;司机:L1:正常行车售票员:L2:售票到站停车P(S)V(S)开车门P(C)关车门启动开车V(C)GO TO L1 GO TO L22、请用PV操作实现他们之间的同步关系:(1)桌上一个盘子,只能放一只水果。

爸爸放苹果,妈妈放桔子,儿子只吃桔子,女儿只吃苹果。

(2)桌上一个盘子,只能放一只水果。

PV操作的例题

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操作(例题)

信号量地PV操作(例题)

???信号量的PV操作是如何定义的?试说明信号量的PV操作的物理意义。

参考答案:P(S):将信号量S减1,若结果大于或等于0,则该进程继续执行;若结果小于0,则该进程被阻塞,并将其插入到该信号量的等待队列中,然后转去调度另一进程。

V(S):将信号量S加1,若结果大于0,则该进程继续执行;若结果小于或等于0,则从该信号量的等待队列中移出一个进程,使其从阻塞状态变为就绪状态,并插入到就绪队列中,然后返回当前进程继续执行。

PV操作的物理含义:信号量S值的大小表示某类资源的数量。

当S>0时,其值表示当前可供分配的资源数目;当S<0时,其绝对值表示S信号量的等待队列中的进程数目。

每执行一次P操作,S值减1,表示请求分配一个资源,若S≥0,表示可以为进程分配资源,即允许进程进入其临界区;若S<0,表示已没有资源可供分配,申请资源的进程被阻塞,并插入S的等待队列中,S的绝对值表示等待队列中进程的数目,此时CPU将重新进行调度。

每执行一次V操作,S值加1,表示释放一个资源,若S>0,表示等待队列为空;若S≤0,则表示等待队列中有因申请不到相应资源而被阻塞的进程,于是唤醒其中一个进程,并将其插入就绪队列。

无论以上哪种情况,执行V操作的进程都可继续运行。

1、设公共汽车上,司机和售票员的活动分别是:司机的活动:启动车辆;正常行车;到站停车;售票员的活动:关车门;售票;开车门;在汽车不断地到站、停车、行驶过程中,这两个活动有什么同步关系?用P、V操作实现它们的同步。

设两个信号量S和C,初值为S=0;C=0;司机: L1:正常行车售票员: L2:售票到站停车 P(S)V(S)开车门P(C)关车门启动开车 V(C)GO TO L1 GO TO L22、请用PV操作实现他们之间的同步关系:(1)桌上一个盘子,只能放一只水果。

爸爸放苹果,妈妈放桔子,儿子只吃桔子,女儿只吃苹果。

(2)桌上一个盘子,只能放一只水果。

有关pv操作类的题目

有关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操作

网络操作系统  习题PV操作
决吃水果问题2
分析:四人之间的关系: 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操作例题

PV操作例题
S1:表示R1是否已向缓冲器存入从键盘上读入的一个数,初始值为0.
S2:表示R2是否已向缓冲器存入从磁盘上读入的一个数,初始值为0.
Begin
S,S1,S2:semaphore;
S:=1;S1:=S2:=0;
Cobegin
process R1
xl:integer
begin
L1:从键盘读一个数;
x1:=读入的数;
儿子
V(SM)
P(SA)
拿苹果
V(SE)
吃苹果
女儿
V(SF)
P(SB)
拿香蕉
V(SE)
吃香蕉
问题6有一个超市,最多可容纳N个人进入购物,当N个顾客满员时,后到的顾客在超市外等待;超市中只有一个收银员。可以把顾客和收银员看作两类进程,两类进程间存在同步关系。写出用P;V操作实现的两类进程的算法(2003年系统设计员考试的题目)
答:这四个进程实际上是两个生产者R1,R2和两个消费者W1,W2.各自生成不同的产品中各自的消费对象去消费,他们共享一个的缓冲器。由于缓冲器只能存放一个数,所以,R1和R2在存放数时必须互斥。而R1和W1、R2和W2之间存在同步。为了协调它们的工作可定义三个信号量:
S:表示能否把数存人缓冲器B,初始值为1.
(3)解:从东向西的,和(2)相同;从西向东的和(1)相同。
问题4有一个俱乐部,有甲乙两个服务员,当顾客有请求时,甲负责送烟,乙负责送火,无顾客请求时,服务员睡眠。顾客自己不能带烟和火,当顾客要抽烟时,可请求服务员送烟和火,烟和火还未送到时,顾客必须等待。
设信号量:SY, SH,CY,CH:初值都为0
(1)解
设信号量MUTEX=1
P (MUTEX)
过桥
V (MUTEX)

pv操作例题

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操作经典例题与答案

操作系统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学习例题

某条河上只有一个独木桥,以便行人过河。现在河的两边 都有人要过桥,若把过桥者看做一个进程,规定: 每次只 有一个人通过。为了保证过桥安全,请用P、V操作分别实 现正确的管理。 void main()
const int n = 进程数; Semaphore mutex = 1; void Process_EW( int i) { while ( true) { P(mutex); <临界区> V(mutex) <其余部分> // signal(s) // wait(s)

要求:“读-写” 互斥;“写-写” 互斥;“读-读” 允许

Wsem :用于互斥,只要一个写进程正在访问共享数据区, 其他的写进程和读进程都不能访问它。 Readcount:用于记录读进程的数目 信号量X用于确保readcount被正确更新。(互斥)
读/写问题 读进程具有优先权
Coend
}
5.6 经典同步问题
生产者/消费者问题

读写者问题 哲学家问题
例1、 生产者/消费者问题
(the producer/consumer problem)
(1)有一群生产者进程在生产消息,
并将消息提供给消 费者进程去消费。为使生产者进程和消费者进程能并发执 行, 在它们之间设置了一个具有n个缓冲区的缓冲池, 生产 者进程可将它所生产的消息放入一个缓冲区中, 消费者进 程可从一个缓冲区中取得一个消息消费。 (2)尽管所有的生产者进程和消费者进程都以异步方式 运行, 但它们之间必须保持同步, 即不允许消费进程者到 一个空缓冲区去取消息, 也不允许生产者进程向一个已装 有消息且尚未被取走消息的缓冲区中投放消息。 (3)任何时刻只能有一个进程可对共享缓冲区进行操作

pv操作练习题

pv操作练习题

用P,V操作实现下述问题的解。

一、桌上有一个盘子,可以放一个水果;父亲总是放苹果到盘子中;母亲总是放香蕉到盘子中。

一个儿子专等吃盘中的香蕉,而一个女儿专等吃盘中的苹果。

父母只放水果不吃,儿女只吃水果不放。

实现父亲,母亲,儿子,女儿的进程同步。

二、在公共汽车上,司机和售票员的活动分别是:司机的活动:启动车辆,正常行车,到站停车。

售票员的活动:上下乘客,关车门,售票,开车门,上下乘客。

在汽车不停的到站,停站,行驶过程中,这两个活动有什么同步关系?用信号量和P,V操作实现它们的同步。

三、某寺庙,有小,老和尚若干,有一个水缸,有小和尚提水入缸供老和尚饮用。

水缸可以放10桶水,水从一个井里面提。

水井狭窄,每次只能容纳一个桶取水。

水桶总数为3个。

每次入、取缸水只能是1桶,且不可以同时进行。

试给出取水,入水的算法描述。

四、一个快餐厅有4类职员:(1)领班:接受顾客点菜,出菜单;(2)厨师:根据菜单,准备顾客的饭菜;(3)打包工:将做好的饭菜打包;(4)出纳员:收款并提交食品。

每个职员可被看作一个进程,试用一种同步机制写出能让四类职员正确并发运行的程序。

五、假设有一个作业由四个进程组成,这四个进程在运行时必须按如图所示的次序依次执行,试用P,V原语表达四个进程的同步关系:六、观察者和报告者是两个并发执行的进程,观察者不断观察并对通过的卡车计数,报告者定时的将观察者的计数值打印,打印完毕,将计数值清零。

七、假定阅览室最多可同时容纳100个人阅读,读者进入时,必须在阅览室门口的一个登记表上登记,内容包括姓名、座号等,离开时要撤掉登记内容。

用P、V操作描述读者进程的同步算法。

PV操作题

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操作
试写出读者“进入”和“注销”之间的同步算法。
答:读者的动作有两个,一是填表进入阅览室读书,这时要考虑阅览室里是否有座位;二是读者阅读完毕,需要注销登记再离开阅览室,这时的操作要考虑阅览室里是否有读者存在。读者在阅览室读书时,由于没有引起资源的变动,不算动作变化。
因此,设置算法所涉及的三个信号量:empty资源信号量——表示阅览室里的空座位的数目,初值为100;full资源信号量——表示阅览室里有人的座位的数目(或表示阅览室里的读者的数目),初值为0;mutex互斥信号量——表示对登记表这个临界资源的互斥访问,初值设为1。
使用信号量机制对读者“进入”阅览室和“注销”登记之间的同步算法描述如下:
Semaphoreempty,full,mutex;//首先定义两个资源信号量empty、full和一个互斥信号量mutex
empty.value=100;full.value=0;mutex.value=1;
cobegin
process getin() //读者“进入”阅览室的进程过木桥;wait(SB);
countB:=countB-1;
if (countB=0) then signal(mutex);
signa(SB);
end
parend
end
2、有一阅览室,共有100个座位。为了很好利用它,读者进入时必须先在登记表上进行登记。该表表目设有座位号和读者姓名;离开时再将其登记项摈除。试用P、V操作描述进程之间的同步或算法。
Var SA,SB,mutex:semaphore:=1,1,1;
CountA,countB:integer:=0,0:
begin
parbegin
processA: begin

操作系统PV操作习题.

操作系统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操作例题详细解释

pv操作例题详细解释PV操作是一种基于现金流量的财务分析方法,用于计算一项投资在未来一段时期内的现值(Present Value)。

PV操作可以帮助决策者判断投资是否具有盈利性和可行性。

下面是一个PV操作的例题及其详细解释。

假设某公司考虑购买一台新机器,价格为10,000美元。

该机器预计可在未来五年内创造每年2,000美元的现金流入。

同时,公司的资本成本率(discount rate)为10%。

现在需要计算该投资的PV值。

解答步骤如下:1. 确定现金流量的时间段。

根据题目所给的信息,现金流量的时间段为未来五年。

2. 计算每年的现金流入的净现值(Net Present Value, NPV)。

净现值是指某一时间点的现金流入与现金流出之间的差额,用来衡量投资的收益。

在这个例子中,每年的现金流入为2,000美元,没有现金流出。

因此,每年的净现值等于每年的现金流入。

3. 根据资本成本率计算每年的现值。

资本成本率表示每一单位资金的折现率,也就是投资所需要的回报率。

在这个例子中,资本成本率为10%。

第一年的现值 = 2,000 / (1+10%)^1 ≈ 1,818.18美元第二年的现值= 2,000 / (1+10%)^2 ≈ 1,652.89美元第三年的现值= 2,000 / (1+10%)^3 ≈ 1,502.63美元第四年的现值= 2,000 / (1+10%)^4 ≈ 1,366.94美元第五年的现值= 2,000 / (1+10%)^5 ≈ 1,244.49美元4. 计算净现值。

将每年的现值相加得到净现值。

NPV = 第一年的现值 + 第二年的现值 + 第三年的现值 + 第四年的现值 + 第五年的现值≈ 1,818.18 + 1,652.89 + 1,502.63 + 1,366.94 + 1,244.49≈ 7,584.13美元根据计算得到的净现值,我们可以得出结论:该投资的PV值为7,584.13美元。

pv操作例题

pv操作例题
P1、P2、P3、P4为具有同步关系的四个进 程,要求P1运行结束后P2和P3才能运行, 但P2和P3之间没有先后顺序关系,P2和P3 均运行结束后,P4才能运行。利用P、V操 作实现上述同步关系。
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操作典型例题

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操作例题

pv操作例题

有一个仓库,可以存放A和B两种产品,但要求:
(1)每次只能存放一种产品(A或B);
(2)-N<A产品数量-B产品数量<M;
其中N和M是正整数。

试用p、v操作描述产品A和产品B的入库过程。

答:
信号量的定义如下:
Var mutex,SA,SB:semphore=1,M-1,N-1;(M,N为题目中给出的整数值)。

这里mutex用来做为互斥的信号量,保证每次只能存放一种产品(A或B);SA用来保证<A 产品数量-B产品数量<M,SB用来保证-N< A产品数量-B产品数量即B产品数量-A产品数量<N。

对这两个信号量的具体操作是,每当放入一个A产品,SA的值就减1,SB 的值就加1;,每当放入一个B产品,SA的值就加1,SB的值就减1;当然这些操作都是由pv操作来完成的。

具体程序如下:(用C或者类C来写都可以)
Begin
Prabegin
PA: (表示A产品放置动作对应的进程)
Begin
Repeat
P(SA)
P(mutex)
放入一个A产品;
V(mutex);
V(SB);
Until false;
End
PB: (表示B产品放置动作对应的进程)
Begin
Repeat
P(SB)
P(mutex)
放入一个B产品;
V(mutex);
V(SA);
Until false;。

P.V操作(典型例题)

P.V操作(典型例题)

有个寺庙,庙中有个小和尚和老和尚若干人,有一只水缸,由小和尚提水入缸给老和尚饮用。

水缸可容10桶水,水取自同一口水井中。

水井径窄,每次仅能容一只水桶取水,水桶总数为3个。

若每次只能入缸一桶水和取缸中一桶水,而且还不可以同时进行。

试用一种同步工具写出小和尚和老和尚入水、取水的活动过程。

4.答:本题为两个进程共享两个缓冲区的问题。

首先考虑本题有几个进程:从井中取水后向缸中倒水此为连续动作,为一个进程;从缸中取水为另一个进程。

其次考虑信号量,有关互斥的有:水井和水缸。

水井一次仅能一个水桶进出,水缸一次入、取水为一桶。

分别设互斥信号量为:mutex1和mutex2控制互斥。

有关同步问题为:三个水桶无论从井中取水还是入出水缸都是一次一个,应为它设信号量count,抢不到水桶的进程只好等待。

水缸满时不可入水,设信号量为empty,控制水量,水缸空时不可出水,设信号量full,控制出水量。

设置信号量初值:mutex1:=mutex2:=1;count:=3;empty:=10;full:=0;Parbegin﹛小和尚打水进程:BeginP(empty);P(count);P(mutex1);从井中打水;V(mutex1);P(mutex2);倒水入缸;V(mutex2);V(count);V(full);End老和尚取水进程:BeginP(full);P(count);P(mutex2);从缸中取水;V(mutex2);V(count);V(empty);End}Parend.2. 假定一个阅览室可供50个人同时阅读。

读者进入和离开阅览室时都必须在阅览室入口处的一个登记表上登记,阅览室有50个座位,规定每次只允许一个人登记或注销登记。

要求:(1)用PV操作描述读者进程的实现算法(可用流程图表示,登记、注销可用自然语言描述);(2)指出算法中所用信号量的名称、作用及初值。

解S1:阅览室可供使用的空座位,其初值为50S: 是否可通过阅览室,其初值为1Process READ_in(i=1…50){到达阅览室入口处;P(S1);P(S);在入口处登记座位号;V(s);进入座位并阅读;}Process READ_out(j=1…50){结束阅读到达阅览室入口处;P(S);在入口处注销座位号;V(S1);V(S)离开入口处;}●N个并发进程公用一个公共变量Q,信号灯进程:main(){begins=1;cobeginp1();p2();…pn();coend}Pi(){P(s)…V(s)}其中i=1、2…n●用户A、B、C打印进程(间接相互制约关系):s初值为1,假设打印机占用1时间片。

  1. 1、下载文档前请自行甄别文档内容的完整性,平台不提供额外的编辑、内容补充、找答案等附加服务。
  2. 2、"仅部分预览"的文档,不可在线预览部分如存在完整性等问题,可反馈申请退款(可完整预览的文档不适用该条件!)。
  3. 3、如文档侵犯您的权益,请联系客服反馈,我们会尽快为您处理(人工客服工作时间:9:00-18:30)。

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操作实现进程互斥时应该注意的是:(1)每个程序中用户实现互斥的P、V操作必须成对出现,先做P操作,进临界区,后做V操作,出临界区。

若有多个分支,要认真检查其成对性。

(2)P、V操作应分别紧靠临界区的头尾部,临界区的代码应尽可能短,不能有死循环。

(3)互斥信号量的初值一般为1。

利用信号量和PV操作实现进程同步PV操作是典型的同步机制之一。

用一个信号量与一个消息联系起来,当信号量的值为0时,表示期望的消息尚未产生;当信号量的值非0时,表示期望的消息已经存在。

用PV操作实现进程同步时,调用P操作测试消息是否到达,调用V操作发送消息。

使用PV操作实现进程同步时应该注意的是:(1)分析进程间的制约关系,确定信号量种类。

在保持进程间有正确的同步关系情况下,哪个进程先执行,哪些进程后执行,彼此间通过什么资源(信号量)进行协调,从而明确要设置哪些信号量。

(2)信号量的初值与相应资源的数量有关,也与P、V操作在程序代码中出现的位置有关。

(3)同一信号量的P、V操作要成对出现,但它们分别在不同的进程代码中。

例题一:过桥问题解:设信号量初值S=1汽车进程Pi(i=1,2,3,…)到达桥头P(s)桥行驶到达桥另一端V(s)例题二若有一售票厅只能容纳300人,当少于300人时,可以进入。

否则,需在外等候,若将每一个购票者作为一个进程,请用P、V操作编程。

解:信号量初值S=300购票者进程Pi(i=1,2,3,…)P(s)进入售票厅购票退出售票厅V(s)例题三有一只铁笼子,每次只能放入一只动物,猎手向笼中放入老虎,农民向笼中放入猪,动物园等待取笼中的老虎,饭店等待取笼中的猪,试用P、V操作写出能同步执行的程序。

解:两个生产者和两个消费者共享了一个仅能存放一件产品的缓冲器,生产者各自生产不同的产品,消费者各自取自己需要的产品,P、V操作编程为:猎手进程农民进程动物园进程饭店进程P(s) P(s) P(s1) P(s2)放入虎放入猪买老虎买猪V(s1) V(s2) V(s) V(s)其中S初值=1,S1=S2=0例题四桌上有一只盘子,每次只能放入一个水果。

爸爸专向盘中放苹果,妈妈专向盘中放桔子,女儿专等吃盘中的苹果,儿子专等吃盘中的桔子。

用P、V操作写出它们能正确同步的程序。

(同例六详解)解:信号量初值S1=0,S2=0,S=1爸爸进程妈妈进程女儿进程儿子进程repeat repeat repeat repeatP(s) P(s) P(s1) P(s2)放苹果放桔子取苹果取桔子V(s1) V(s2) V(s) V(s)until false until false until false until false例题五设有两个优先级相同的进程P1和P2如下,S1和S2初值均为0,求:P1,P2并发执行结束后,x,y,z分别是多少?进程P1 进程P2y:=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是并发进程,所以P1和P2调度顺序不确定。

假设P1先执行,当P1执行到P(s2)时,s2=-1,P1阻塞,此时y=3,z=4;当调度程序调度到P2时,由于进程P1巳执行到了V(s1),P2在执行P(s1)时,不阻塞而继续执行,当执行到V(s2)时,将P1唤醒,然后执行到最后一个语句,此时x=5,z=9;当P1再次被唤醒、调度时,继续执行P1的最后一处语句,此时y=12.所以最后结果是:x=5,y=12,z=9.如果P2先执行,结果同上【例题五】生产者-消费者问题在多道程序环境下,进程同步是一个十分重要又令人感兴趣的问题,而生产者-消费者问题是其中一个有代表性的进程同步问题。

下面我们给出了各种情况下的生产者-消费者问题,深入地分析和透彻地理解这个例子,对于全面解决操作系统内的同步、互斥问题将有很大帮助。

(1)一个生产者,一个消费者,公用一个缓冲区。

定义两个同步信号量:empty——表示缓冲区是否为空,初值为1。

full——表示缓冲区中是否为满,初值为0。

生产者进程while(TRUE){生产一个产品;P(empty);产品送往Buffer;V(full);}消费者进程while(True){P(full);从Buffer取出一个产品;V(empty);消费该产品;}(2)一个生产者,一个消费者,公用n个环形缓冲区。

定义两个同步信号量:empty——表示缓冲区是否为空,初值为n。

full——表示缓冲区中是否为满,初值为0。

设缓冲区的编号为1~n-1,定义两个指针in和out,分别是生产者进程和消费者进程使用的指,指向下一个可用的缓冲区。

生产者进程while(TRUE){生产一个产品;P(empty);产品送往buffer(in);in=(in+1)mod n;V(full);}消费者进程while(TRUE){P(full);从buffer(out)中取出产品;out=(out+1)mod n;V(empty);消费该产品;}(3)一组生产者,一组消费者,公用n个环形缓冲区在这个问题中,不仅生产者与消费者之间要同步,而且各个生产者之间、各个消费者之间还必须互斥地访问缓冲区。

定义四个信号量:empty——表示缓冲区是否为空,初值为n。

full——表示缓冲区中是否为满,初值为0。

mutex1——生产者之间的互斥信号量,初值为1。

mutex2——消费者之间的互斥信号量,初值为1。

设缓冲区的编号为1~n-1,定义两个指针in和out,分别是生产者进程和消费者进程使用的指针,指向下一个可用的缓冲区。

生产者进程while(TRUE){生产一个产品;P(empty);P(mutex1);产品送往buffer(in);in=(in+1)mod n;V(mutex1);V(full);}消费者进程while(TRUE){P(full)P(mutex2);从buffer(out)中取出产品;out=(out+1)mod n;V(mutex2);V(empty);消费该产品;}需要注意的是无论在生产者进程中还是在消费者进程中,两个P操作的次序不能颠倒。

应先执行同步信号量的P操作,然后再执行互斥信号量的P操作,否则可能造成进程死锁。

【例题六】桌上有一空盘,允许存放一只水果。

爸爸可向盘中放苹果,也可向盘中放桔子,儿子专等吃盘中的桔子,女儿专等吃盘中的苹果。

规定当盘空时一次只能放一只水果供吃者取用,请用P、V原语实现爸爸、儿子、女儿三个并发进程的同步。

分析在本题中,爸爸、儿子、女儿共用一个盘子,盘中一次只能放一个水果。

当盘子为空时,爸爸可将一个水果放入果盘中。

若放入果盘中的是桔子,则允许儿子吃,女儿必须等待;若放入果盘中的是苹果,则允许女儿吃,儿子必须等待。

本题实际上是生产者-消费者问题的一种变形。

这里,生产者放入缓冲区的产品有两类,消费者也有两类,每类消费者只消费其中固定的一类产品。

解:在本题中,应设置三个信号量S、So、Sa,信号量S表示盘子是否为空,其初值为l;信号量So表示盘中是否有桔子,其初值为0;信号量Sa表示盘中是否有苹果,其初值为0。

同步描述如下:int S=1;int Sa=0;int So=0;main(){cobeginfather();son();daughter();coend}father(){while(1){P(S);将水果放入盘中;if(放入的是桔子)V(So);else V(Sa);}}son(){while(1){P(So);从盘中取出桔子;V(S);吃桔子;}}daughter(){while(1){P(Sa);从盘中取出苹果;V(S);吃苹果;}}思考题:四个进程A、B、C、D都要读一个共享文件F,系统允许多个进程同时读文件F。

但限制是进程A和进程C不能同时读文件F,进程B和进程D也不能同时读文件F。

为了使这四个进程并发执行时能按系统要求使用文件,现用PV操作进行管理,请回答下面的问题:(1)应定义的信号量及初值:。

(2)在下列的程序中填上适当的P、V操作,以保证它们能正确并发工作:A() B() C() D(){ { { {[1]; [3]; [5]; [7];read F; read F; read F; read F;[2]; [4]; [6]; [8];} } } }思考题解答:(1)定义二个信号量S1、S2,初值均为1,即:S1=1,S2=1。

其中进程A和C使用信号量S1,进程B和D使用信号量S2。

(2)从[1]到[8]分别为:P(S1) V(S1) P(S2) V(S2) P(S1) V(S1) P(S2) V(S2)习题1:有三个并发进程使用同一个缓冲区,进程P1负责读数据到缓冲区,P2负责加工缓冲区中的数据,进程P3负责将缓冲区中加工后的数据输出.在进程P3没有输完之前,进程P1不能读入新的数据到缓冲区中.请用P、V操作编程.解:信号量初值:S1=0,S2=0,S3=0进程P1 进程P2 进程P3读数据到P(S1) P(S2)缓冲区加工输出V(S1) V(S2) V(S3)P(S3)习题2:设有六个进程P1、P2、P3、P4、P5、P6,它们并发执行。

相关文档
最新文档