PV操作之加强.ppt

  1. 1、本文档共63页,可阅读全部内容。
  2. 2、原创力文档(book118)网站文档一经付费(服务费),不意味着购买了该文档的版权,仅供个人/单位学习、研究之用,不得用于商业用途,未经授权,严禁复制、发行、汇编、翻译或者网络传播等,侵权必究。
  3. 3、本站所有内容均由合作方或网友上传,本站不对文档的完整性、权威性及其观点立场正确性做任何保证或承诺!文档内容仅供研究参考,付费前请自行鉴别。如您付费,意味着您自己接受本站规则且自行承担风险,本站不退款、不进行额外附加服务;查看《如何避免下载的几个坑》。如果您已付费下载过本站文档,您可以点击 这里二次下载
  4. 4、如文档侵犯商业秘密、侵犯著作权、侵犯人身权等,请点击“版权申诉”(推荐),也可以打举报电话:400-050-0827(电话支持时间:9:00-18:30)。
查看更多
PV操作之加强

PV操作之加强 P(wait) V(signal)操作之加强 信号量是最早出现的用来解决进程同步与互斥问题的机制,包括一个称为信号量的变量及对它进行的两个原语操作。 信号量为一个整数,设这个信号量为:S。 规定在S大于等于零的时候代表可供并发进程使用的资源实体数;S小于零的时候,表示正在等待使用临界区的进程的个数。 根据这个原则,在给信号量附初值的时候,我们显然就要设初值大于零(特殊情况下也设为0)。 P操作和V操作是不可中断的程序段,称为原语。 P,V原语中P是荷兰语的Passeren,相当于英文的pass,V是荷兰语的Verhoog,相当于英文中的incremnet。 P V操作的自然语言描述 P(wait)原语操作的动作是: (1)S减1; (2)若S减1后仍大于或等于零,则进程继续执行; (3)若S减1后小于零,则该进程被阻塞后进入与该信号相对应的队列中,然后转进程调度。 V (signal)原语操作的动作是: (1)S加1; (2)若相加结果大于零,则进程继续执行; (3)若相加结果小于或等于零,则从该信号的等待队列中唤醒一等待进程,然后再返回原进程继续执行或转进程调度。 P V操作的数据结构 type semaphore = record value: integer; L: list of process; end 相应地,wait(s)和signal(s)操作可描述为: procedure wait(S) var S: semaphore; begin S.value:=S.value-1; if S.value0 then block(S, L) end procedure signal(S) var S: semaphore; begin S.value:=S.value+1; if S.value=0 then wakeup(S,L); end 在纪录型信号量机制中,S.value的初值表示系统中某类资源的数目,因而又称为资源信号量,每次的P操作,意味着进程请求一个单位的资源,因此描述为S.value:=S.value-1;当S.value0时,表示资源已分配完毕,因而进程调用block原语,进行自我阻塞,放弃处理机,并插入到信号量链表S.L中。 该机制遵循了让权等待准则。此时S.value的绝对值表示在该信号量链表中已阻塞进程的数目。每次V操作,表示执行进程释放一个单位资源,故S.value:= S.value +1操作表示资源数目加1。若加1后仍是S.value=0,则表示在该信号量链表中,仍有等待该资源的进程被阻塞,故还应调用wakeup原语,将S.L链表中的第一个等待进程唤醒。如果S.value的初值为1,表示只允许一个进程访问临界资源,此时的信号量转化为互斥信号量。 信号量的应用 利用信号量实现进程互斥地访问临界资源,只需为该资源设置一互斥信号量mutex,初始值为1,然后将各进程的临界区置于wait(mutex)和signal(mutex)操作之间即可。每个欲访问该临界资源的进程,在进入临界区之前,都要执行wait(mutex),若该资源此刻未被访问,本次wait操作成功,进程便可进入自己的临界区;其它欲进入自己临界区的进程,则会wait(mutex)操作失败,不能进入临界区,从而保证了该临界资源被互斥地访问。使用临界资源的进程退出临界区后,又执行signal(mutex)操作,释放该临界资源。 实 现 互 斥 实现互斥(过河问题1) 某条河上只有一个独木桥,以便行人过河。现在河的两边都有人要过桥,若把过桥者看做一个进程。 规定:为了保证过桥安全,每次只有一个人通过。请用P、V操作分别实现正确的管理。 分析:任意时刻桥上只能有一个人,即桥是一个互斥信号量。 //i表示过河的任意人 var mutex: semaphore := 1; // 初始值为1 parbegin process(i): begin wait(mutex); 过河; signal(mutex); en

文档评论(0)

报告论文库 + 关注
实名认证
内容提供者

该用户很懒,什么也没介绍

1亿VIP精品文档

相关文档