考研帮 > 数学 > 每日一练

2.6 进程同步

2.6.3 信号量

  前面互斥算法都存在问题,它们是平等进程间的一种协商机制,需要一个地位高于进程的管理者来解决共有资源的使用问题。操作系统可从进程管理者的角度来处理互斥的问题,信号量就是操作系统提供的管理公有资源的有效手段。
  1.PV操作
  信号量是由荷兰学者Hansan于1965年提出的一种卓有成效的进程同步机制。它是一个二元组(S,Q),其中,S是一个整型变量,初值为非负数,Q为一个初始状态为空的等待队列。在多道系统中,信号量机制是一种有效地实现进程同步与互斥的工具。信号量的值表示系统中某类资源的数目。若它大于0,则表示系统中当前可用资源的数量;若它小于0,表示系统中等待使用该资源的进程数目,即在该信号量队列上排队的PCB的个数。信号量的值是可变的,由P、V操作来改变。
  P、V操作是对信号量进行处理的操作过程,而且信号量只能由P、V操作来改变。P操作是对信号量减1,意味着请求系统分配一个单位资源,若系统无可用资源,则先前进程变为阻塞状态;V操作是对信号量加1,意味着释放一个单位资源,加1后若信号量小于等于0,则从就绪队列中唤醒一个进程,执行V操作的进程继续执行。
  对信号量S进行P操作,记为P(S),P(S)的处理过程如下:
  
  对信号量进行P操作的主要目的是阻塞当前进程。
  对信号量S进行V操作,记为V(S),V(S)的处理过程如下:
  
  2.实现互斥模型
  为临界资源设置一个互斥信号量S,其初值为1;在每个进程中,将临界区代码置于P(S)和V(S)原语之间。必须成对使用P和V原语:缺少P原语,则不能保证互斥访问,缺少V原语,则不能在使用临界资源之后,将其释放(给其他等待的进程);P、V原语不能次序错误、重复或遗漏。互斥模型如下:
  
  3.实现同步模型
  为进程设置一个同步信号量S,其初值为0;在进程需要同步的地方,分别插入P(S)和V(S)原语。一个进程使用P原语时,则另一进程往往使用V原语与之对应,具体怎么使用,要看实际情况来定。下面举个简单例子来说明。
  有两个进程P1和P2,P1的功能是计算x=a+b的值,a和b是常量,在P1的前面代码中能得到;P2的功能是计算y=x+1的值。
  若此两进程并发执行,则有同步关系:P2要执行y=x+1时,必须等到P1已经执行完x=a+b语句,原因很简单,因为y的值依赖于x的值。结合信号量P、V操作的含义,不难得出,使用P原语的进程可能会出现阻塞的状态;使用V原语的进程可能会出现被唤醒的过程。分析此例中的两进程,可知,P2进程可能会因为要等待x的值而阻塞,如果这样的话,P1进程就要在执行的过程中唤醒P2进程,那么何时唤醒它呢?应该在P1计算出x的值后唤醒。所以为了使P1、P2正常运行,用信号量来实现其同步的过程如下:
  

关于"最后阶段,真题的正确打开方式_备考经验_考研帮"15名研友在考研帮APP发表了观点

扫我下载考研帮

考研帮地方站更多

你可能会关心:

来考研帮提升效率

× 关闭