pv原语文章收集

上传人:工**** 文档编号:513984831 上传时间:2024-02-26 格式:DOC 页数:11 大小:34.50KB
返回 下载 相关 举报
pv原语文章收集_第1页
第1页 / 共11页
pv原语文章收集_第2页
第2页 / 共11页
pv原语文章收集_第3页
第3页 / 共11页
pv原语文章收集_第4页
第4页 / 共11页
pv原语文章收集_第5页
第5页 / 共11页
点击查看更多>>
资源描述

《pv原语文章收集》由会员分享,可在线阅读,更多相关《pv原语文章收集(11页珍藏版)》请在金锄头文库上搜索。

1、 如何用V原语实现进程间的互斥与同步PV原语的含义操作和V操作是不可中断的程序段,称为原语。PV原语及信号量的概念都是由荷兰科学家E.Djkta提出的。信号量se是一整数,se不小于等于零时代表可供并发进程使用的资源实体数,但sem不不小于零时则表达正在等待使用临界区的进程数。 P原语操作的动作是: (1)sem减1; (2)若e减1后仍不小于或等于零,则进程继续执行; (3)若sm减1后不不小于零,则该进程被阻塞后进入与该信号相相应的队列中,然后转进程调度。 V原语操作的动作是:(1)se加; (2)若相加成果不小于零,则进程继续执行; (3)若相加成果不不小于或等于零,则从该信号的等待队列

2、中唤醒一等待进程,然后再返回原进程继续执行或转进程调度。 PV操作对于每一种进程来说,都只能进行一次,并且必须成对使用。在P原语执行期间不容许有中断的发生。用P原语实现进程的互斥由于用于互斥的信号量sm与所有的并发进程有关,因此称之为公有信号量。公有信号量的值反映了公有资源的数量。只要把临界区置于P(sem)和V(se)之间,即可实现进程间的互斥。就象火车中的每节车厢只有一种卫生间,该车厢的所有旅客共享这个公有资源:卫生间,因此旅客间必须互斥进入卫生间,只要把卫生间放在P(sem)和V(m)之间,就可以达到互斥的效果。如下例子阐明进程的互斥实现。 例1 生产围棋的工人不小心把相等数量的黑子和白

3、子混装载一种箱子里,现要用自动分拣系统把黑子和白子分开,该系统由两个并发执行的进程构成,功能如下: (1)进程A专门拣黑子,进程专门拣白子; (2)每个进程每次只拣一种子,当一种进程在拣子时不容许另一种进程去拣子; 分析: 第一步:拟定进程间的关系。由功能(2)可知进程之间是互斥的关系。 第二步:拟定信号量及其值。由于进程和进程B要互斥进入箱子去拣棋子,箱子是两个进程的公有资源,因此设立一种信号量s,其值取决于公有资源的数目,由于箱子只有一种,的初值就设为。实现: begn s:seaphore;:=; cobei procss A bin L1:P(s); 拣黑子; (s); oto ; e

4、nd; prcss B bgin L2:P(); 拣白子; V(); gto 2; end; ced; end; 判断进程间与否互斥,核心是看进程间与否共享某一公有资源,一种公有资源与一种信号量相相应。拟定信号量的值是一种核心点,它代表了可用资源实体数。如下实例: 例 某车站售票厅,任何时刻最多可容纳20名购票者进入,当售票厅中少于0名购票者时,厅外的购票者可立即进入,否则需要在外面等待。每个购票者可当作一种进程。 分析:第一步:拟定进程间的关系。售票厅是各进程共享的公有资源,当售票厅中多于2名购票者时,厅外的购票者需要在外面等待。因此进程间是互斥的关系。第二步:拟定信号量及其值。只有一种公有

5、资源:售票厅,因此设立一种信号量。售票厅最多容纳20个进程,即可用资源实体数为20,s的初值就设为20。 实现: begn s:semaore; :=; cobegin procs I(I=1,2,) ein P(s); 进入售票厅; 购票; 退出; (s); d; cod 当购票者进入售票厅前要执行P(s)操作,执行后若s不小于或等于零,阐明售票厅的人数尚未满可进入。执行后若s不不小于零,则阐明售票厅的人数已满不能进入。这个实现中同步最多容许2个进程进入售票厅购票,其他进程只能等待。用PV原语实现进程的同步 与进程互斥不同,进程同步时的信号量只与制约进程及被制约进程有关而不是与整组并发进程有

6、关,因此称该信号量为私有信号量。运用V原语实现进程同步的措施是:一方面判断进程间的关系为同步的,且为各并发进程设立私有信号量,然后为私有信号量赋初值,最后运用PV原语和私有信号量规定各进程的执行顺序。下面我们将例1增添一种条件,使其成为进程间是同步的。 例3 在例1的基本之上再添加一种功能:(3)当一种进程拣了一种棋子(黑子或白子)后来,必让另一种进程拣一种棋子(黑子或白子)。 分析: 第一步:拟定进程间的关系。由功能(1)(2)(3)可知,进程间的关系为同步关系。第二步:拟定信号量及其值。进程A和B共享箱子这个公有资源,但规定两个进程必须轮流去取不同色的棋子,因而互相间要互通消息。对于进程A

7、可设立一种私有信号量s,该私有信号量用于判断进程A与否能去拣黑子,初值为1。对于进程B同样设立一种私有信号量2,该私有信号量用于判断进程B与否能去拣白子,初值为0。固然你也可以设立1初值为0,s2初值为1。 实现:begin s,:semahore; s:;s2:=0;cobeinproces bgi : P(s1); 拣黑子; V(s2); goto L1; end; pocessB beg L2:P(s2); 拣白子; V(); g L; nd;ond; d; 此外一种问题就是P原语是不是一定在V原语的前面?回答与否认的。下面看一种例子。例4 设在公共汽车上,司机和售票员的活动分别是:司机

8、:启动车辆,正常行车,到站停车。售票员:上乘客,关车门,售票,开车门,下乘客。用PV操作对其控制。 分析:第一步:拟定进程间的关系。司机到站停车后,售票员方可工作。同样,售票员关车门后,司机才干工作。因此司机与售票员之间是一种同步关系。 第二步:拟定信号量及其值。由于司机与售票员之间要互通消息,司机进程设立一种私有信号量run,用于判断司机能否进行工作,初值为0。售票员进程设立一种私有信号量stop,用于判断与否停车,售票员与否可以开车门,初值为0。 实现: eginsto ,un:semphorstop:=;run:=; coben driv: bein L:P(rn); 启动车辆; 正常行

9、车; 到站停车; V(stop); goo L1; end; condcto:begin L2:上乘客; 关车门;V(un); 售票; P(p); 开车门; 下乘客; goto L2; ed; cend; nd; 用PV操作还可以实现进程同步与互斥的混合问题,典型的如:多种生产者和多种消费者共享容量为n的缓存区。这个例子在诸多书中均有简介,在这里就不说了。P原语PV原语通过操作信号量来解决进程间的同步与互斥的问题。其核心就是一段不可分割不可中断的程序。信号量的概念965年由出名的荷兰计算机科学家Dijkstra提出,其基本思路是用一种新的变量类型(semapo)来记录目前可用资源的数量。有两种

10、实现方式:1)sepoe的取值必须不小于或等于。表达目前已没有空闲资源,而正数表达目前空闲资源的数量;2)semhr的取值可正可负,负数的绝对值表达正在等待进入临界区的进程个数。信号量是由操作系统来维护的,顾客进程只能通过初始化和两个原则原语(P、V原语)来访问。初始化可指定一种非负整数,即空闲资源总数。原语:P是荷兰语roen(测试)的首字母。为阻塞原语,负责把目迈进程由运营状态转换为阻塞状态,直到此外一种进程唤醒它。操作为:申请一种空闲资源(把信号量减),若成功,则退出;若失败,则该进程被阻塞;V原语:V是荷兰语Vehogen(增长)的首字母。为唤醒原语,负责把一种被阻塞的进程唤醒,它有一

11、种参数表,寄存着等待被唤醒的进程信息。操作为:释放一种被占用的资源(把信号量加),如果发既有被阻塞的进程,则选择一种唤醒之。具体V原语对信号量的操作可以分为三种状况:)把信号量视为一种加锁标志位,实现对一种共享变量的互斥访问。实现过程:(mute);/ mux的初始值为1 访问该共享数据; V(mex);非临界区)把信号量视为是某种类型的共享资源的剩余个数,实现对一类共享资源的访问。 实现过程: (rourc); rsource的初始值为该资源的个数N 使用该资源; V(eource); 非临界区3)把信号量作为进程间的同步工具 实现过程: 临界区C; (S); V(S); 临界区C2; 原语

12、操作一. 信号量的概念 1 信号量的类型定义每个信号量至少须记录两个信息:信号量的值和等待该信号量的进程队列。它的类型定义如下:(用类ASCAL语言表述)seapore =reord vae: nteg; que:PB; n; 其中PCB是进程控制块,是操作系统为每个进程建立的数据构造。 s.aue=时,.quue为空; .value0时,svalue的绝对值为s.queue中档待进程的个数; 返回 -2V原语 对一种信号量变量可以进行两种原语操作:p操作和操作,定义如下:rodre p(vr s:samphr); s.valu=svlue-1; if (s.valu) asle(s.queu

13、e); rocedu v(va :samhore); svalus.value1;f (s.valu=) wakep(s.qe); 其中用到两个原则过程: aslep(.ue);执行此操作的进程的CB进入qu尾部,进程变成等待状态 wakup(suee);将s.queu头进程唤醒插入就绪队列sau初值为时,可以用来实现进程的互斥。 操作和操作是不可中断的程序段,称为原语。如果将信号量看作共享变量,则pv操作为其临界区,多种进程不能同步执行,一般用硬件措施保证。一种信号量只能置一次初值,后来只能对之进行p操作或操作。由此也可以看到,信号量机制必须有公共内存,不能用于分布式操作系统,这是它最大的弱点。返回 -二. 实例.生产者-消费者问题(有bfe) 问题描述: 一种仓库可以寄存件物品。生产者每生产一件产品,将产品放入仓库,仓库满了就停止生产。消费者每次从仓库中去一件物品,然后进行消费,仓库空时就停止消费。解答:进程:Produce -生产者进程,

展开阅读全文
相关资源
正为您匹配相似的精品文档
相关搜索

最新文档


当前位置:首页 > 办公文档 > 解决方案

电脑版 |金锄头文库版权所有
经营许可证:蜀ICP备13022795号 | 川公网安备 51140202000112号