PV操作应用题
操作系统PV操作经典一百题
![操作系统PV操作经典一百题](https://img.taocdn.com/s3/m/138aba76a417866fb84a8eae.png)
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操作](https://img.taocdn.com/s3/m/25d91008b52acfc789ebc922.png)
操作系统辅导
void operator() {p(ready); 复印; p(finish; { if(waiting<6) waiting=waiting+1; v(mutex); else v(mutex); 离开; } p(chair); p(standard); v(chair); p(finished); v(standup); p(mutex); waiting-1; v(mutex);
操作系统辅导
进程同步
例题解析:(综合应用题) 3、桌子上有一只盘子,可以放 一个水果。爸爸总是放苹果到盘 子中,而妈妈总是放香蕉到盘子 中。一个儿子专等吃盘子中的香 蕉,而一个女儿专等吃盘子中的 苹果。请用P、V操作来实现爸爸、 妈妈、儿子、女儿之间的同步与 互斥关系。
操作系统辅导
进程同步
缓冲区1 PB 复制 缓冲区2 PC 打印
PA 从磁盘读入
操作系统辅导
进程同步
例题解析:(综合应用题) 2、桌子上有一只盘子,最多可容纳 两个水果,每次只能放入或取出一个 水果,爸爸专向盘子放苹果 ( apple ) , 妈 妈 专 向 盘 子 放 桔 子 (orange)。两个儿子专等听吃盘子 中的桔子,两个女儿专等吃盘子中的 苹果。请用P、V操作来实现爸爸、妈 妈、儿子、女儿之间的同步与互斥关 系。
}
v(ready);
例题解析:(综合应用题) 4、有一个东西方向的独木桥,如图 所示,每次只能有一人通过,且不允 许人在桥 上停留,东、西两端各有 若干人在等待过桥。请用P、V操作实 现东西两端人过桥的问题。
独木桥 西 东
操作系统辅导
进程同步
例题解析:(综合应用题)
有关pv操作类的题目
![有关pv操作类的题目](https://img.taocdn.com/s3/m/83bf5214844769eae009ed80.png)
有关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操作的例题](https://img.taocdn.com/s3/m/20366f4a30b765ce0508763231126edb6f1a760b.png)
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操作经典例题与答案](https://img.taocdn.com/s3/m/92587b6df5335a8102d22087.png)
P(mutex)
custNum--;
V(mutex)
V(wait)
}
理发师进程:
While{
P(mutex)
If(custNum ==0){
V(mutex)
P(Barber)
}else{
V(mutex)
理发
}
}
V(SM);
i = (i+1) %k;
};
Receive:
j =0;//标记取产品的缓存区位置
SM=0;//信号量,标记初始没有消息
ReadCount=0;//读进程计数器
Mutex =1;//读进程互斥信号量
SW=0; //信号量,读进程在此信号量等待
while (true) {
P(SM);
从Buffer[j]取消息;
V(W);
Else if(rw>0)
V(R)
rw--
V(mutex);
};
3.理发师睡觉问题
理发店里有一位理发师,一把理发椅和N把供等候理发的顾客坐的椅子
如果没有顾客,则理发师便在理发椅上睡觉。当一个顾客到来时,他必须先唤醒理发师
如果顾客到来时理发师正在理发,则如果有空椅子,可坐下来等;否则离开
Wait =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)){
pv应用题
![pv应用题](https://img.taocdn.com/s3/m/ba05a3cb28ea81c758f5789a.png)
P(barber);//判断理发师忙不忙,如果忙就做下来等待 顾客做下来理发; } else { V(mutex);//人满了,还是走吧 } }
三、银行业务问题
某大型银行办理人民币储蓄业务,由n个储蓄员负责。每个顾客进入银 行后先至取号机取一个号,并且在等待区找到空沙发坐下等着叫号。取 号机给出的号码依次递增,并假定有足够多的空沙发容纳顾客。当一个 储蓄员空闲下来,就叫下一个号。 semaphore server_count=n,mutex=1,customer_count=0; process customeri(i=1,2,3...) { 取号; p(mutex); 在等待区找到空沙发坐下;//每次只允许一个人找到空沙发坐下 v(mutex); v(customer_count);//通知储蓄员,有顾客,可以进行服务 p(server_count);//判断有没有储蓄员(储蓄员忙不忙) 办理业务 } process serverj(j=1,2,3...) { P(customer_count);//判断有没有顾客 P(mutex); 被呼号顾客离开沙发走出等待区; V(mutex); 为该客人服务; 顾客离开; v(server_count);//通知顾客有储蓄员,可以办理业务 }
四、缓冲区管理 *有n个进程将字符逐个读入到一个容量为80的缓冲区中(n>1),当缓冲
区满后,由输出进程Q负责一次性取走这80个字符。这种过程循环往 复,请用信号量和P、V操作写出n个读入进程(P1,P2,…Pn)和输出 进程Q能正确工作的的动作序列 semaphore empty=n;//可用的空缓冲区 semaphore full=0;//判断缓冲区是不是可以读数据 item B[n]; int in=0;//放入缓冲区指针 process read_char { while(true) { 读入一个字符到 x; P(empty); P(mutex);//若有缓冲区,就进入临界区 B[in]=x;//读完之后要赋值 in=(in+1)/n; if(in==80) { V(mutex); V(full);//通知Q可以从缓冲区读走80个字符; } else { V(mutex);//退出临界区 } } } process Q { while(true) { P(full);//判断是不是可以从缓冲区读入字符
PV操作例题
![PV操作例题](https://img.taocdn.com/s3/m/31832814b9d528ea80c7795c.png)
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操作例题](https://img.taocdn.com/s3/m/9fdc7d4a854769eae009581b6bd97f192279bf07.png)
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操作例题软考中级](https://img.taocdn.com/s3/m/fe6af08ce109581b6bd97f19227916888486b9c5.png)
进程pv操作例题软考中级今天咱们来聊一个特别有趣的东西,就像玩游戏一样,这个东西叫进程pv操作,这在软考中级里会出现哦。
咱们先想象一下,有一个小房子,这个小房子就像一个资源。
比如说这个小房子里有5颗糖,这5颗糖就是资源的数量。
现在有好多小朋友(就像进程一样)都想要糖吃。
当一个小朋友走进小房子拿糖的时候,这就像是一个进程在请求资源,这个时候就会有一个P操作。
就好比你要进小房子拿糖,你得先跟门口的小管家说一声“我要拿糖啦”。
如果小房子里还有糖,小管家就会让你进去拿一颗,然后小房子里的糖就少了一颗。
可是如果小房子里没有糖了,那小管家就会让你在门口等着,直到有新的糖被放进来。
那什么时候会有新的糖呢?这就和V操作有关啦。
比如说,有一个大人(就像一个会补充资源的进程),他会时不时地往小房子里放糖。
每次放糖的时候,他就做一个V操作。
这个时候,如果有小朋友在门口等着拿糖,小管家就会让一个小朋友进去拿糖啦。
咱们再来看一个更具体的例子。
假设有一个小操场,操场里可以同时有3个小朋友玩球(这3个玩球的名额就是资源)。
一开始,3个小朋友进去玩了,这时候做了3次P操作,就好像跟管操场的叔叔说“我要进来玩球啦”,叔叔同意了。
后来又有一个小朋友也想玩球,他做了P操作,但是叔叔告诉他操场满了,他就得在旁边等着。
过了一会儿,有一个小朋友玩累了,他不玩球走了,这时候就相当于做了一个V操作。
那个在旁边等的小朋友就可以进去玩球啦。
在软考中级里的这些进程pv操作例题,就像是这些生活中的小场景。
我们只要把那些进程想象成小朋友或者大人们,把资源想象成糖或者玩球的场地,就会觉得特别容易理解。
再想象一个图书馆的例子。
图书馆里有10个可以坐下来看书的座位(这就是资源)。
当一个小朋友走进图书馆想找座位看书的时候,他做P操作。
如果有座位,他就能坐下看书,要是没有座位,他就得在旁边站着等。
当有一个小朋友看完书离开座位的时候,就做V操作,这样站着等的小朋友就有机会坐下看书啦。
pv操作练习题
![pv操作练习题](https://img.taocdn.com/s3/m/0eb187de26fff705cc170aa7.png)
用P,V操作实现下述问题的解。
一、桌上有一个盘子,可以放一个水果;父亲总是放苹果到盘子中;母亲总是放香蕉到盘子中。
一个儿子专等吃盘中的香蕉,而一个女儿专等吃盘中的苹果。
父母只放水果不吃,儿女只吃水果不放。
实现父亲,母亲,儿子,女儿的进程同步。
二、在公共汽车上,司机和售票员的活动分别是:司机的活动:启动车辆,正常行车,到站停车。
售票员的活动:上下乘客,关车门,售票,开车门,上下乘客。
在汽车不停的到站,停站,行驶过程中,这两个活动有什么同步关系?用信号量和P,V操作实现它们的同步。
三、某寺庙,有小,老和尚若干,有一个水缸,有小和尚提水入缸供老和尚饮用。
水缸可以放10桶水,水从一个井里面提。
水井狭窄,每次只能容纳一个桶取水。
水桶总数为3个。
每次入、取缸水只能是1桶,且不可以同时进行。
试给出取水,入水的算法描述。
四、一个快餐厅有4类职员:(1)领班:接受顾客点菜,出菜单;(2)厨师:根据菜单,准备顾客的饭菜;(3)打包工:将做好的饭菜打包;(4)出纳员:收款并提交食品。
每个职员可被看作一个进程,试用一种同步机制写出能让四类职员正确并发运行的程序。
五、假设有一个作业由四个进程组成,这四个进程在运行时必须按如图所示的次序依次执行,试用P,V原语表达四个进程的同步关系:六、观察者和报告者是两个并发执行的进程,观察者不断观察并对通过的卡车计数,报告者定时的将观察者的计数值打印,打印完毕,将计数值清零。
七、假定阅览室最多可同时容纳100个人阅读,读者进入时,必须在阅览室门口的一个登记表上登记,内容包括姓名、座号等,离开时要撤掉登记内容。
用P、V操作描述读者进程的同步算法。
PV操作题
![PV操作题](https://img.taocdn.com/s3/m/6919f342767f5acfa1c7cd19.png)
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操作](https://img.taocdn.com/s3/m/cdf449fdb04e852458fb770bf78a6529647d351e.png)
计算机操作系统pv操作1:在测量控制系统中,数据采集任务把所要采集的数据,送入一个单缓冲区,计算任务以该单缓区中取出数据进行计算。
试写出利用信号量机制实现两者共享单缓区的同步进行算法?2:桌上有一个盘子,只允许放一个水果,爸爸可以向盘子里放苹果,也可以放橘子,儿子只允许吃苹果,女儿只允许吃橘子,盘子一次只允许放一个水果,请用pv操作实现,爸爸儿子,女儿三个并发同步问题?【例2】桌上有一空盘,允许存放一只水果。
爸爸可向盘中放苹果,也可向盘中放桔子,儿子专等吃盘中的桔子,女儿专等吃盘中的苹果。
规定当盘空时一次只能放一只水果供吃者取用,请用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);吃苹果;}}semaphore metexempty=n,full=0item buffer[n];int in=0;out=0;producer(){while(1){producer an item nextp;p(employ);/*看有无权利用缓冲池,还有一个有无权用缓冲区*/ p(mutex);放产品v(mutex);v(full);}}消费者consumer()p(full);p(muter);取产品v(mutex);v(emplety);}}先申请资源,审资源信号量后进行互斥操作。
pv操作例题
![pv操作例题](https://img.taocdn.com/s3/m/30601eae0875f46527d3240c844769eae109a369.png)
pv操作例题
摘要:
1.PV 操作概述
2.PV 操作例题解析
3.PV 操作在实际工程中的应用
正文:
一、PV 操作概述
PV 操作是指在过程控制系统中,通过设定值和反馈信号的比较,计算出偏差,然后根据偏差大小和方向,对控制量进行调整,以达到控制系统目标值的一种控制方法。
PV 操作是过程控制系统中最常见的控制方式,广泛应用于各种工业生产过程中。
二、PV 操作例题解析
假设有一个储罐,需要控制其液位在100m至120m之间。
我们可以通过PV 操作来实现这个目标。
1.设定值:设定液位目标值为110m。
2.反馈信号:液位计测量的实际液位。
3.计算偏差:将实际液位与设定值进行比较,得到偏差。
4.调整控制量:根据偏差的大小和方向,调整进液阀门的开度,使液位上升或下降,直到达到设定值。
三、PV 操作在实际工程中的应用
在实际工程中,PV 操作通常与其他控制策略相结合,如PID 控制、自适
应控制等,以提高控制系统的稳定性和精度。
例如,在锅炉燃烧控制系统中,可以通过PV 操作控制燃料的供给,以维持锅炉的温度在设定值范围内。
同时,根据锅炉的负荷变化,可以通过PID 控制调整PV 操作的参数,以提高控制系统的响应速度和稳定性。
总之,PV 操作作为过程控制系统的基本控制方法,在实际工程中发挥着重要作用。
pv操作例题
![pv操作例题](https://img.taocdn.com/s3/m/c3e5926fb84ae45c3b358cf7.png)
cobegin process producer
begin L1:produce a product; B[k]:=product; k:=(k+1)mod n; V(sg); goto L1 coend; process consumer begin L2:P(sg); Tack a product from B[t]; t:=(t+1)mod n; V(sp); consume; goto:= L2 end coend
例 12 考虑下述页面走向: 1,2,3,4,2,1,5,6,2,1,2,3,7,6,3,2,1,2,3,6
当内存块数量分别为 3 时,试问 FIFO、LRU、OPT 这三种置换算法的缺页次数各是多少? 答:缺页定义为所有内存块最初都是空的,所以第一次用到的页面都产生一次缺页。 当内存块数量为 3 时:
count: Integer; S: semaphore; count:=0; S:=1; cobegin process Pin
R1: Integer; begin P (S); R1:=count; R1:=R1+1; count:=R1; V(S); end;
Process Pout R2: Integer;
father (); mother ();
son (); daughter ();
coend } father () { P(dish); … 放苹果 … V(apple); } mother() { P(dish);
…
放桔子 …
V(orange); } son () { P(orange);
… 取桔子
sp:=1;sg:=0; cobegin process producer (生产者进程)
习题PV操作
![习题PV操作](https://img.taocdn.com/s3/m/e9624416866fb84ae45c8d1c.png)
使用信号量解决吃水果问题2 使用信号量解决吃水果问题
分析:四人之间的关系: 分析:四人之间的关系: 1父亲,母亲要互斥使用盘子,所以两者之间是互斥关系; 父亲, 父亲 母亲要互斥使用盘子,所以两者之间是互斥关系; 2父亲放的苹果,女儿吃,所以两者是同步关系; 父亲放的苹果, 父亲放的苹果 女儿吃,所以两者是同步关系; 3母亲放的桔子,儿子吃,所以两者也是同步关系。 母亲放的桔子, 母亲放的桔子 儿子吃,所以两者也是同步关系。 semaphore S_Plate=1, S_Apple=0, S_Orange=0; void son( ) // 儿子进程 { while(1) { P(S_Orange); 桔子; 从盘中取出一个 桔子; V(S_Plate); 吃桔子; 吃桔子; } } void daughter( ) // 女子进程 { while(1) { P(S_Apple); 苹果; 从盘中取出一个 苹果; V(S_Plate号量解决吃水果问题
分析:四人之间的关系: 分析:四人之间的关系: 1父亲、母亲要互斥使用盘子,所以两者之间是互斥关系; 父亲、 父亲 母亲要互斥使用盘子,所以两者之间是互斥关系; 2父亲放的苹果,女儿吃,所以两者是同步关系; 父亲放的苹果, 父亲放的苹果 女儿吃,所以两者是同步关系; 3母亲放的桔子,儿子吃,所以两者也是同步关系。 母亲放的桔子, 母亲放的桔子 儿子吃,所以两者也是同步关系。 semaphore S_Plate=1, S_Apple=0, S_Orange=0; void father( ) // 父亲进程 { while(1) { P(S_Plate); 往盘子中放入一个苹果; 往盘子中放入一个苹果; V(S_Apple); } } void mother( ) // 母亲进程 { while(1) { P(S_Plate); 往盘子中放入一个桔子; 往盘子中放入一个桔子; V(S_Orange); } }
pv操作例题
![pv操作例题](https://img.taocdn.com/s3/m/af64275ac850ad02de8041d0.png)
有一个仓库,可以存放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操作(典型例题)](https://img.taocdn.com/s3/m/6a928913ff00bed5b9f31d57.png)
有个寺庙,庙中有个小和尚和老和尚若干人,有一只水缸,由小和尚提水入缸给老和尚饮用。
水缸可容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时间片。
pv应用题
![pv应用题](https://img.taocdn.com/s3/m/ba05a3cb28ea81c758f5789a.png)
}
} process 随身听者 { while(true) { p(s1); 购买物品,听歌曲 v(s); } } process 磁带者 { while(true) { p(s2); 购买物品,听歌曲 v(s); } } process battery { while(true) {
P(s3); 购买物品,听歌曲 v(s); } }
semaphore s1=1;//表示有顾客点菜 semaphore s2=0;//表示厨师准备顾客的饭菜 semaphore s3=0;//表示打包工打包饭菜 semaphore s4=0;//表示出纳员收款并提交食物 process 领班 { while(true) { p(s1); 接受顾客点菜; v(s2);//通知厨师准备顾客的饭菜 } } process 厨师 {
P(mutex);//进入临界区 for(int out=0;out<80;out++)//一个一个的从缓冲区里读出字符 take from B[out]; in=0;//此处i重新赋值不能掉 for(j=0;j<80;j++) V(mutex);//退出临界区 for(int j=0;j<80;j++) V(empty); } }
理发店理有一位理发师、一把理发椅和n把供等候理发的顾客坐的椅子 如果没有顾客,理发师便在理发椅上睡觉 一个顾客到来时,它必须叫醒理发师 如果理发师正在理发时又有顾客来到,则如果有空椅子可坐,就坐下来 等待,否则就离开 int waiting=0;//等待的顾客数 int chair_count=n;//为顾客准备的椅子数 semaphore customer=0,barber,mutex=1; process barber { p(customer); P(mutex); //若有顾客,进入临界区 waiting--; V(barber);//通知顾客,可以进行理发了
- 1、下载文档前请自行甄别文档内容的完整性,平台不提供额外的编辑、内容补充、找答案等附加服务。
- 2、"仅部分预览"的文档,不可在线预览部分如存在完整性等问题,可反馈申请退款(可完整预览的文档不适用该条件!)。
- 3、如文档侵犯您的权益,请联系客服反馈,我们会尽快为您处理(人工客服工作时间:9:00-18:30)。
理发师问题(Dijkstra 1965) 问题描述:一个理发店由一个有几张椅子的等候 室和一个放有一张理发椅的理发室组成。若没有 要理发的顾客,则理发师就去睡觉;若一顾客走 进理发店且所有的椅子都被占用了,则该顾客就 离开理发店;若理发师正在为人理发,则该顾客 就找一张空椅子坐下等待;若理发师在睡觉,则 顾客就唤醒他,设计一个协调理发师和顾客的程 序。
busman() {while (1) { 关车门; v(s1);
售票;
p(s2); 开车门; 上下乘客; } }
四人之间的关系
爸爸,妈妈要互斥使用盘子,所以两者之 间是互斥关系; 爸爸放的苹果,女儿吃,所以两者是同步 关系; 妈妈放的桔子,儿子吃,所以两者也是同 步关系。
司机—售票员问题 设公共汽ቤተ መጻሕፍቲ ባይዱ上,司机和售票员的活动分别是: 司机: 售票员: 启动车辆 上下乘客 正常行车 关车门 到站停车 售票 开车门 上下乘客 在汽车不断到站,停车,行驶过程中,这两个 活动的同步关系。
• semaphore s1=0;s2=0; • Main() • {cobegin • driver(); • busman(); • coend;} • Driver() • {while (1) • {p(s1); • 启动车辆; • 正常行车; • 到站停车; • V(s2); • } • }
Void customeri(i=1,2,3,…) {p(mutex); If (waiting<CHAIRS) { Waiting++; V(customers); V(mutex); P(leisure); Get_haicut(); } Else V(mutex); }
吃水果问题 • 问题描述:桌上有一只盘子,每次只能放一个水 果,爸爸专向盘中放苹果,妈妈专向盘中放桔子, 儿子专等吃盘里的桔子,女儿专等吃盘里的苹果。 只要盘子空,则爸爸或妈妈可向盘中放水果,仅 当盘中有自己需要的水果时,儿子或女儿可从中 取出,请给出四人之间的同步关系,并用PV操作 实现四人正确活动的程序。
#define CHAIRS 5 Semaphore customers=0;leisure=0;mutex=1; Int waiting=0; Void barber() { while(1) { P(customers); P(mutex); Waiting--; V(mutex); Cut_hair(); V(leisure);} }
图书馆阅览室问题 问题描述:假定阅览室最多可同时容纳100 个人阅读,读者进入时,必须在阅览室门 口的一个登记表上登记,内容包括姓名、 座号等,离开时要撤掉登记内容。用P、V 操作描述读者进程的同步算法。
#define CHAIRS 100 Semophore mutex=1; Int Readers=0; Void Readeri(I=1,2,3,…) { P(mutex); If (Readers< CHAIRS) { 登记; Readers++; V(mutex) 阅读; P(mutex) 撤销登记; Readers--; V(mutex); } Else v(mutex)