某仓库有两名发货员,一名审核员。当顾客提货时,只要发货员空闲,允许顾客进入仓库提货,顾客离开时,审核员检验顾客提货是否正确。其工作流程如图3—1所示。为了利用PV操作正确地协调他们之间的工作,设置了两个信号量S1和S2,且S1的初值为2,S2的初值为1。图

admin2019-06-12  38

问题 某仓库有两名发货员,一名审核员。当顾客提货时,只要发货员空闲,允许顾客进入仓库提货,顾客离开时,审核员检验顾客提货是否正确。其工作流程如图3—1所示。为了利用PV操作正确地协调他们之间的工作,设置了两个信号量S1和S2,且S1的初值为2,S2的初值为1。图中的a、b、c和d应分别填写(    )。

选项 A、P(S1)、P(S2)、V(S2)和V(S1)
B、P(S2)、P(S1)、V(S1)和V(S2)
C、P(S1)、V(S1)、P(S2)和V(S2)
D、P(S1)、V(S2)、P(S1)和V(S1)

答案C

解析 首先要理解好PV操作的含义。假设信号量为sem,则
P原语的主要操作是:
(1)Sem减1。
(2)若Sem减1后仍大于或等于零,则该进程继续执行。
(3)若Sem减1后小于零,则该进程被阻塞,在相应队列中排队,然后转向系统的进程调度。
V原语的主要操作是:
(1)Sem加1。
(2)若相加结果大于零,则进程继续执行。
(3)若相加结果小于或等于零,则唤醒一阻塞在该信号量上的进程,然后再返回原进程继续执行或转进程调度。
当信号量S小于0时,其绝对值表示系统中因请求该类资源未被满足而被阻塞的进程数目,S大于0时表示可用的临界资源数。
对于V操作有一些说明,以纠正理解偏差。
Sem大于0时表示有临界资源可供使用,而且这个时候没有进程被阻塞在这个资源上,也就是说,没有进程因为得不到这类资源而阻塞,所以没有被阻塞的进程,自然不需要唤醒。有人可能会问:当Sem小于0时表明没有临界资源可供使用,为什么还要唤醒进程?这是因为V原语操作的本质在于:一个进程使用完临界资源后,释放临界资源,使Sem加1,以通知其他的进程,这个时候如果Sem<0,则表明有进程阻塞在该类资源上,因此要从阻塞队列里唤醒一个进程来“转手”该类资源。比如,有2个某类资源,4个进程A、B、C、D要用该类资源,最开始Sem=2,当A进入时Sem=1;当B进入时Sem=0,表明该类资源刚好用完,当C进入时Sem=-1,表明有一个进程被阻塞了;当D进入时Sere=一2。当A用完该类资源时,进行V操作,Sere=一1,释放该类资源,而这时Sem<0,表明有进程阻塞在该类资源上,于是唤醒一个。
有了上述对PV操作的正确理解,那这道题就很好解决了。
    S1的初值为2,显然表明最开始有两个“发货员”这种资源,当顾客去提货时要用去一个这样的资源,于是a显然填P(S1)。当提货完了之后,顾客进程要释放“发货员”资源,于是b显然填V(S1)。从图中可以看出,接着审核员要审核提货是否正确;同理,顾客要用去一个“审核员”资源,于是c应该填P(S2)。最后,d显然填V(S2)了。
    值得一提的是,很多考生记不清是P操作加1还是V操作加1,这里给大家提供一个小窍门。大家看字母“V”,从下往上看其水平宽度是逐渐变大的,这“表明”v操作是对信号量进行加1操作。
转载请注明原文地址:https://jikaoti.com/ti/Jsf7FFFM
0

相关试题推荐
随机试题
最新回复(0)