进程P1、P2、P3、P4和P5的前趋图如图所示。
若用PV操作控制进程P1~P5并发执行的过程,则需要设置5个信号量S1、S2、S3、S4和S5,进程间同步所使用的信号量标注在图中的边上,且信号量S1~S5的初值都等于零,初始状态下进程P1开始执行。在如图所示的PV操作示意图中a、b和c处应分别填写______;d和e处应分别填写______,f和g处应分别填写______。
A.P(S3)和V(S4)V(S5)
B.P(S3)和P(S4)P(S5)
C.V(S3)和V(S4)V(S5)
D.V(S3)和P(S4)P(S5)
参考答案:B
解析:在多道程序系统中,由于资源共享与进程合作,使各进程之间可能产生两种形式的制约关系,一种是间接相互制约,例如,在仅有一台打印机的系统中,有两个进程A和B,如果进程A需要打印时,系统已将打印机分配给进程B,则进程A必须阻塞;一旦进程B将打印机释放,系统便将进程A唤醒,使之由阻塞状态变为就绪状态;另一种是直接相互制约,例如,输入进程A通过单缓冲区向进程B提供数据。当该缓冲区为空时,进程B不能获得所需的数据而阻塞,一旦进程A将数据送入缓冲区中,进程B就被唤醒。反之,当缓冲区满时,进程A就被阻塞,仅当进程B取走缓冲区中的数据时,才唤醒进程A。
进程同步主要源于进程合作,是进程之间共同完成一项任务时直接发生相互作用的关系,为进程之间的直接制约关系。在多道程序系统中,这种进程间在执行次序上的协调是必不可少的;进程互斥主要源于资源共享,是进程之间的间接制约关系。在多道程序系统中,每次只允许一个进程访问的资源称为临界资源,进程互斥要求保证每次只有一个进程使用临界资源。在每个进程中访问临界资源的程序段称为临界区,进程进入临界区要满足一定的条件,以保证临界资源的安全使用和系统的正常运行。
信号量
信号量是一个二元组(S,Q),其中S是一个整形变量,初值为非负数,Q为一个初始状态为空的等待队列。在多道程序系统中,信号量机制是一种有效的实现进程同步与互斥的工具。信号量的值通常表示系统中某类资源的数目,若它大于0,则表示系统中当前可用资源的数量;若它小于0,则表示系统中等待使用该资源的进程数目,即在该信号量队列上排队的PCB的个数。信号量的值是可变的,由PV操作来改变。
PV操作是对信号量进行处理的操作过程,而且信号量只能由PV操作来改变。P操作是对信号量减1,意味着请求系统分配一个单位资源,若系统无可用资源,则进程变为阻塞状态;V操作是对信号量加1,意味着释放一个单位资源,加1后若信号量小于等于0,则从就绪队列中唤醒一个进程,执行V操作的进程继续执行。
对信号量S进行P操作,记为P(S);对信号量S进行V操作,记为V(S)。P(S)和V(S)的处理过程如表所示。
P(S)和V(S)的处理过程 | |
P(S) | V(S) |
S=S-1; if(S<0) { 当前进程进入等待队列Q; 阻塞当前进程; } else 当前进程继续; | S=S+1; if(S<=0) { 从等待队列Q中取出一个进程P; 进程P进入就绪队列; 当前进程继续; } else 当前进程继续; |
P1和P2的同步过程 | |
P1 | P2 |
… x=a+b; V(S); … | … P(S); y=x+1; … |
实现Read和Print的程序 | |
Read | |
begin P(empty); P(mutex); 读入; V(mutex); V(full); end | begin P(full) P(mutex); 输出 V(mutex); V(empty) end |
①从“P1执行完毕,P2与P3才能开始”可以得知:P2与P3中的b与d位置,分别应填P(S1)和P(S2),以确保在P1执行完毕以前,P2与P3不能执行。当然当P1执行完毕时,应该要对此解锁,所以P1中的a位置应填V(S1)与V(S2)。
②从“P2执行完毕,P4才能开始”可以得知:P4的f位置,应填P(S3),而P2的结束位置c应有V(S3)。
③从“P2与P3都执行完,P5才能开始”可以得知:P5的g位置,应填P(S4)与P(S5),而对应的P2的结束位置c应有V(S4),结合前面的结论可知,c应填V(S3)与V(S4)。而e应填V(S5)。