单选题
进程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
【答案解析】本题主要考查用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操作有一个透彻的理解,另外就是能分析出题目执行的逻辑关系。