欢迎来到天天文库
浏览记录
ID:38664649
大小:562.50 KB
页数:25页
时间:2019-06-17
《计算机操作系统pv操作》由会员上传分享,免费在线阅读,更多相关内容在教育资源-天天文库。
1、计算机操作系统教程P、V操作P、V操作的引入为禁止两个进程同时进入临界区,使用了锁操作方法。但这带来两个问题:1.当临界资源被占用,不停的测试会造成错误。2.无法实现同步为此E.W.Dijkstra提出了一种解决同步,互斥问题的更一般的方法,这就是信号量以及有关的P、V操作信号量信号量是表示资源的实体,是一个与队列有关的整型变量,其值只能由P、V操作来改变。操作系统利用信号量对进程和资源进行控制和管理。根据用途的不同,分为公用信号量和私用信号量。公用信号量通常用于实现进程之间的互斥,初值为1,他所联系的一组并发进程均可对其实施P,V操作;私用信号量一般用于
2、实现进程间的同步,初值为0或为某个正整数n,仅允许拥有它的进程对其实施P、V操作。P、V操作的定义P、V操作是定义在信号量S上的两个操作。P(S):(1)S:=S-1;(2)若S>=0,则调用P(S)的进程继续运行。(3)若S<0,则调用P(S)的进程被阻塞,并把它插入到等待信号量S的阻塞队列中V(S):(1)S:=S+1;(2)若S>0,则调用V(S)的进程继续运行;(3)若S<=0,从等待信号量S的阻塞队列中唤醒头一个进程,然后调用V(S)的进程继续运行对P、V操作的分析:当信号量的初值为1时,如果有若干个进程都要求进入临界区时,由于每个进程都要调用P
3、(S)过程,则只有第一个调用P(S)的进程,执行P操作而使S为0,立即进入临界区;而其余进程在执行完P操作后,由于S变为负值而进入阻塞,被插入到等待信号量S的阻塞队列中。由于信号量的初值为1,P操作起到限制一次只有一个进程进入临界区的作用。任何一个进程,在执行完临界区操作后,在退出临界区前必须调用V操作,从而保证了进程在临界区内逗留有限时间,当一个进程进退出临界区时,如有进程在等待进入临界区,V操作将唤醒位于阻塞队列中的头一个进程,使其可以进入临界区,因而不会出现进程无限等待进入临界区的情况这完全符合对临界区管理的三条原则。对P、V操作的分析:(续)信号量
4、S>0时的数值表示某类可用资源的数量,执行P操作意味着申请分配一个单位的资源。因此可描述为S:=S-1,当S<0时,表示已无资源可用,此时S的绝对值表示信号量S的阻塞队列中的进程数;而执行一次V操作意味着释放一个单位的资源,描述为S:=S+1,若此时S<=0,表明信号量地阻塞队列中仍有被阻塞额进程,因此在执行V操作时应唤醒该队列的第一个进程互斥模式S:=1进程P1进程P2P(S)P(S)S1S2V(S)V(S)分析:由于信号量的初值为1,故第一个进程P1执行P操作后信号量减为0,表明临界资源空闲,可分配给该进程,使之进入临界区。若此时又有第二个进程P2欲进
5、入临界区,也应先执行P操作。结果使S=-1,表示临界资源已被占用,因此第二进程变为阻塞状态,当第一个进程在临界区内将S1执行完后再执行V操作,释放该资源而使信号量恢复到0,有唤醒了第二个进程P2。待第二个进程P2完成对临界资源的使用(S2)后,有执行V操作,最后信号量恢复到初值1.同步模式进程P1进程P2L1:P(S)L2:V(S)分析:设进程P1先到达L1点,当它执行P(S)时,使S=-1;于是P1进入阻塞状态并进入信号量S的阻塞队列;然后进程P2到达L2点,当它执行到V(S)时,将S值变为0,于是唤醒P1,使其转变为就绪状态,当再次调度到进程P1时,则
6、P1可在L1点后继续运行下去,由此可见,当进程P1到达L1时,除非进程P2已过了L2点,否则进程P1就要暂停执行,这就是说,P1在L1点必须与进程P2进行同步。在这种同步操作中,进出那个P1受到进程P2的制约,而进程P2却不受进程P1的制约,所以是非对称的。P、V操作举例例1:假定某一时刻,观察者已记录了N辆车,又在记录下一辆车,此时,报告者也开始工作。观察者beginL:observealorry;count:=count+1;gotoLend;执行顺序1:(观察者)count:=count+1;(报告者)report;(报告者)count:=0;这是正
7、确的结果。报告者beginprintcount;count:=0;end;执行顺序2:(报告者)reportcount;(观察者)count:=count+1;(报告者)count:=0;观察者刚刚记录的一辆车的信息丢失了造成不正确的因素是与进程占用处理器的时间、执行的速度以及外界的影响有关。这些因素都与时间有关,所以,称它们为“与时间有关的错误”例2:飞机航班有N个售票处,每个售票处通过终端访问系统的公共数据区。售票处1begin从数据单元中取出现有余票;做减1操作;把结果送回到数据单元end;售票处2begin从数据单元中取出现有余票;做减1操作;把结
8、果送回到数据单元end;假定现有余票为1执行顺序:(售票处1)从数
此文档下载收益归作者所有