登机门|登机门CS 2008 |问题63

计数信号上的P和V操作,其中s是计数信号,定义如下:

null
P(s) : s =  s - 1;
  if (s  < 0) then wait;
V(s) : s = s + 1;
  if (s <= 0) then wakeup a process waiting on s;

假设Pb和Vb提供了对二进制信号量的等待和信号操作。两个二进制信号量Xb和Yb用于实现信号量操作P(s)和V(s),如下所示:

P(s) : Pb(Xb);
  s = s - 1;
  if (s < 0) {
   Vb(Xb) ;
   Pb(Yb) ;
  }
  else Vb(Xb); 

V(s) : Pb(Xb) ;
  s = s + 1;
  if (s <= 0) Vb(Yb) ;
  Vb(Xb) ;

Xb和Yb的初始值分别为

(A) 0和0 (B) 0和1

(C) 1和0

(D) 1和1 答复: (C) 说明: 假设Xb=0,那么由于P(s):Pb(Xb)操作,Xb将为-1,进程将被阻塞,因为它将进入等待部分。

所以,Xb将是一个。

假设s=2(意味着2个进程正在访问共享资源),将Xb设为1,

第一点: Pb(Xb)操作将使Xb为零。s将为1,然后执行Vb(Xb)操作,将Xb的计数增加为1。然后重复相同的过程,使Xb为1,s为0。

现在假设再来一个进程,那么Xb将是0,但是s将是-1,这将使这个进程进入循环(s<0),并将导致调用Vb(Xb)和Pb(Yb)操作。Vb(Xb)将导致Xb为1,Pb(Yb)将导致Yb值减小。 案例1: 如果Yb的值为0,它将为-1,它将进入等待状态并被阻止。总共2个进程将访问共享资源(根据计数信号量,最多3个进程可以访问共享资源),s的值为-1意味着只有1个进程将等待资源,而刚才,一个进程被阻塞。所以这仍然是事实。

案例2: 如果Yb的值为1,则为0。共有3个进程将访问共享资源(根据计数信号量,最多2个进程可以访问共享资源),s的值为-1表示只有1个进程将等待资源,但没有进程等待资源。所以这是错误的。

见本报告问题2 https://www.geeksforgeeks.org/operating-systems-set-10/

这个解决方案是由 尼蒂卡·班萨尔

这个问题的小测验

© 版权声明
THE END
喜欢就支持一下吧
点赞15 分享