单选题 进程P 1 、P 2 、P 3 、P 4 和P 5 的前趋图如图1所示。

图1 前趋图

若用PV操作控制进程P 1 ~P 5 并发执行的过程,则需要设置6个信号S1、S2、S3、S4、S5和S6,且信号量S1~S6的初值都等于零。图2中a和b处应分别填写______;c和d处应分别填写______,e和f处应分别填写______。
【正确答案】 C
【答案解析】
【正确答案】 B
【答案解析】
【正确答案】 C
【答案解析】本题主要考查用PV操作控制进程的并发执行。首先我们需要弄清楚前驱图中给出的各进制的执行顺序。从图中我们不难看出进程P 1 和P 2 没有前驱,也就是可以首先并发执行,而进程P 3 的前驱是P 1 和P 2 ,P 4 的前驱是P1和P 3 ,P 5 的前驱是P 2 和P 3 。那么怎么理解前驱呢?其实前驱就是指只有在前驱进程完成后,该进程才能开始执行。
在本题的前驱图中我们不难看出,有6条路径,分别是P1→P3,P1→P4,P2→P3,P2→P5,P3→P4,P3→P5。而且题目也告诉我们分别有6初值为0个信号量(S1~S6),要我们用PV操作来控制进程P1~P5的并发执行。这里我们就需要清楚P与V这两种操作。
P原语的主要操作是:
(1)信号量(sem)减1;
(2)若相减结果大于等于0,则进程继续执行;
(3)若相减结果小于0,则阻塞一个在该信号量上的进程,然后再返回原进程继续执行或转进程调度。
V原语的主要操作是:
(1)信号量(sem)加1;
(2)若相加结果大于0,则进程继续执行;
(3)若相加结果小于或等于0,则唤醒一阻塞在该信号量上的进程,然后再返回原进程继续执行或转进程调度。
总而言之,进行P操作的主要目的是阻塞某信号量上的进程,而进行V操作的主要目的是唤醒某信号量上的进程。
下面我们具体来求解这个题目。a空处,是在进程P 1 执行完成以后,那么根据题目的前驱图我们可以知道,这个时候它应该唤醒它的后继进程P 3 和P 4 ,因此需要执行两个V操作,同样的道路,b空处也需要执行两个V操作,因此可以知道此空答案选C。
至于c空处,它是在进程P 3 执行前进行的处理。根据前驱的意义,我们可以知道执行P 3 要在P 1 和P 2 完成后,因此这个时候,它首先需要判断P 1 和P 2 进程是否完成,如果它们完成的话,会分别执行唤醒P 3 的V操作(换句话说就是会给相应的信号量进行加1操作),那么这个时候我们也可以通过同样的信号量来判断,即对相应的信号量进行减1操作,判断它是否大于0,如果大于等于0,则执行P 3 。从题目给出的答案来看,这两个信号量应该分别是S1和S3。那么执行完P 3 后,它也需要唤醒它的后继进程P 4 和P 5 ,因此需要执行两个V操作,因此d空处应该是两个V操作。综上所述,我们可以知道第2小题的答案选B。
分析到这里后,答案应该就很明显了,P 4 和P 5 进程在执行前,都需要做与P 3 进程执行前一样的判断,因此都需要进行两个P操作。所以本题答案选C。
其实做这类题也不难,首先需要我们对PV操作有一个透彻的理解,另外就是能分析出题目执行的逻辑关系。