- 1、本文档共25页,可阅读全部内容。
- 2、有哪些信誉好的足球投注网站(book118)网站文档一经付费(服务费),不意味着购买了该文档的版权,仅供个人/单位学习、研究之用,不得用于商业用途,未经授权,严禁复制、发行、汇编、翻译或者网络传播等,侵权必究。
- 3、本站所有内容均由合作方或网友上传,本站不对文档的完整性、权威性及其观点立场正确性做任何保证或承诺!文档内容仅供研究参考,付费前请自行鉴别。如您付费,意味着您自己接受本站规则且自行承担风险,本站不退款、不进行额外附加服务;查看《如何避免下载的几个坑》。如果您已付费下载过本站文档,您可以点击 这里二次下载。
- 4、如文档侵犯商业秘密、侵犯著作权、侵犯人身权等,请点击“版权申诉”(推荐),也可以打举报电话:400-050-0827(电话支持时间:9:00-18:30)。
查看更多
计算机操作系统教程 P、V操作 P、V操作的引入 为禁止两个进程同时进入临界区,使用了锁操作方法。 但这带来两个问题: 1.当临界资源被占用,不停的测试会造成错误。 2.无法实现同步 为此E.W.Dijkstra提出了一种解决同步,互斥问题的更一般的方法,这就是信号量以及有关的P、V操作 信号量 信号量是表示资源的实体,是一个与队列有关的整型变量,其值只能由P、V操作来改变。 操作系统利用信号量对进程和资源进行控制和管理。 根据用途的不同,分为公用信号量和私用信号量。公用信号量通常用于实现进程之间的互斥,初值为1,他所联系的一组并发进程均可对其实施P,V操作;私用信号量一般用于实现进程间的同步,初值为0或为某个正整数n,仅允许拥有它的进程对其实施P、V操作。 P、V操作的定义 P、V操作是定义在信号量S上的两个操作。 P(S): (1)S:=S-1; (2) 若S=0,则调用P(S)的进程继续运行。 (3)若S0,则调用P(S)的进程被阻塞,并把它插入到等待信号量S的阻塞队列中 V(S): (1)S:=S+1; (2)若S0,则调用V(S)的进程继续运行; (3)若S=0,从等待信号量S的阻塞队列中唤醒头一个进程,然后调用V(S)的进程继续运行 对P、V操作的分析: 当信号量的初值为1时,如果有若干个进程都要求进入临界区时,由于每个进程都要调用P(S)过程,则只有第一个调用P(S)的进程,执行P操作而使S为0,立即进入临界区;而其余进程在执行完P操作后,由于S变为负值而进入阻塞,被插入到等待信号量S的阻塞队列中。由于信号量的初值为1,P操作起到限制一次只有一个进程进入临界区的作用。任何一个进程,在执行完临界区操作后,在退出临界区前必须调用V操作,从而保证了进程在临界区内逗留有限时间,当一个进程进退出临界区时,如有进程在等待进入临界区,V操作将唤醒位于阻塞队列中的头一个进程,使其可以进入临界区,因而不会出现进程无限等待进入临界区的情况这完全符合对临界区管理的三条原则。 对P、V操作的分析:(续) 信号量S0时的数值表示某类可用资源的数量,执行P操作意味着申请分配一个单位的资源。因此可描述为S:=S-1,当S0时,表示已无资源可用,此时S的绝对值表示信号量S的阻塞队列中的进程数;而执行一次V操作意味着释放一个单位的资源,描述为S:=S+1,若此时S=0,表明信号量地阻塞队列中仍有被阻塞额进程,因此在执行V操作时应唤醒该队列的第一个进程 互斥模式 S:=1 进程P1 进程P2 P(S) P(S) S1 S2 V(S) V(S) 分析:由于信号量的初值为1,故第一个进程P1执行P操作后信号量减为0,表明临界资源空闲,可分配给该进程,使之进入临界区。若此时又有第二个进程P2欲进入临界区,也应先执行P操作。结果使S=-1,表示临界资源已被占用,因此第二进程变为阻塞状态,当第一个进程在临界区内将S1执行完后再执行V操作,释放该资源而使信号量恢复到0,有唤醒了第二个进程P2。待第二个进程P2完成对临界资源的使用(S2)后,有执行V操作,最后信号量恢复到初值1. 同步模式 进程P1 进程P2 L1:P(S) L2:V(S) 分析:设进程P1先到达L1点,当它执行P(S)时,使S=-1; 于是P1进入阻塞状态并进入信号量S的阻塞队列; 然后进程P2到达L2点,当它执行到V(S)时,将S值变为0,于是唤醒P1,使其转变为就绪状态,当再次调度到进程P1时,则P1可在L1点后继续运行下去,由此可见,当进程P1到达L1时,除非进程P2已过了L2点,否则进程P1就要暂停执行,这就是说,P1在L1点必须与进程P2进行同步。在这种同步操作中,进出那个P1受到进程P2的制约,而进程P2却不受进程P1的制约,所以是非对称的。 P、V操作举例 例1:假定某一时刻,观察者已记录了N辆车,又在记录下一辆车,此时,报告者也开始工作。 观察者 begin L:observe a lorry; count := count +1; goto L end; 执行顺序2: (报告者)report count; (观察者)count := count +1; (报告者)count := 0; 观察者刚刚记录的一辆车的信息丢失了 造成不正确的因素是与进程占用处理器的时间、 执行的速度以及外界的影响有关。这些因素都与时间 有关,所以,称它们为“与时间有关
文档评论(0)