3.在某超市里有一个收银员,且同时最多允许有n个顾客购物,我们可以将顾客和收银员看成是两类不同的进程,且工作流程如下图所示。为了利用PV操作正确地协调这两类进程之间的工作,设置了三个信号量S1、S2和Sn,且初值分别为0、0和n。这样图中的a应填写__(1)__,图中的b1、b2应分别填写__(2)__,图中的c1、c2应分别填写__(3)__。
(1) A. P(S1) B.P(S2) C.P(Sn) D.P(Sn)、P(S1)
(2) A.P(Sn)、V(S2) B.P(Sn)、V(S1) C.P(S2)、V(S1) D.V(S1)、P(S2)
(3) A.P(S1)、V(S2) B.P(Sn)、V(S1) C.P(S2)、V(S1) D. V(S1)、 P(S2)
答案:(1)C (2)D (3)A
解析:这是一道考查PV操作的题,所以首先得弄清楚那些地方需要互斥、那些地方需要同步。题目中给出了两类进程:顾客进程与收银元进程,由于超市是顾客进程之间的公有资源,而且超市里限制最多允许有n个顾客购物,所以要设置一个公有信号量Sn,初值是n,顾客进程在进入超市时要执行P(Sn),离开超市时要执行V(Sn)操作。顾客购物后要到收银员处付款,因此顾客进程与收银员进程之间是同步的关系,一次只允许一个顾客进程付款,整个超市只有一个收银员进程收费,所以需要为顾客进程设置一个私有信号量S2,为收银员进程设置一个私有信号量S1,由于开始时没有顾客去付款,收银员也没有收费,所以S1和S2的初值为0。当有顾客买完东西去付款时执行V(S1),通知收银员进程有顾客付款,此时收银员进程执行P(S1)操作后就可进入收费,收费完成后收银元进程执行V(S2),以通知顾客收费完毕,此时顾客执行P(S2)就可离开收银台,在离开超市时需执行V(Sn),释放资源。
复习提示:PV操作在操作系统中处于很重要得地位,要想合适的运用PV操作,必须很好的理解进程之间的互斥与同步,即那些进程之间是互斥的,那些进程之间是同步的。