2014-02-14 50 views
0

我刚刚得到了一个问题,但提到的答案似乎令人困惑。最大。进程数量可以在其临界区域

Que.- Each Process Pi, i=1....9 is coded as follows 
      repeat 
       P(mutex) 
       {Critical section} 
       V(mutex) 
      forever 

The code for P10 is identical except it uses v(mutex) in place of p(mutex). What is the largest number of processes that can be inside the critical section at any moment. 
a) 1 b) 2 c) 3 d) None 

我相信答案可以是3作为裨的任一项(i = 1至9)可以在它的CS。一旦处理器上下文切换到P10,它就会发出一个互斥信号,它可以从Pi的另一个进程(i = 1..9)转到CS。

但是提到的答案是2.请建议。

感谢

回答

0

我想应该是3

假设互斥值是1,现在如果P0是时间表则互斥= 0,P0,在其CS。现在假设发生了上下文切换,并且P10被调度,因为P10的第一个语句是V互斥量值将变为1并且P10也将在其CS中以及此时的过程P0和P10在其CS中现在再次发生上下文切换并且假设现在我们在CS P0,P1和P10中有三个进程,互斥量值为0.现在让互斥量的值为1这个任何一个三个工艺还打电话叫P,其意味着它会出来的CS.So时间最多的任何时刻,其仅CS 3流程中可能

+0

谢谢,我以相同的方式计算出来。忘记将答案放在这里 – codeomnitrix

+1

@ user2129312如果互斥量的值为0,则p10或任何其他进程不允许在CS中输入。 – akashchandrakar

+0

p10在两个地方都会有V(mutex)我们误读了这个地方 – AAB

3

答案将是10

假设最初互斥= 1. P1进入CS并设置互斥= 0;那么P10进入CS并设置互斥= 1。之后,P1进入CS并设置互斥量= 0。此时我们在CS中有3个进程。接下来假设P10退出,所以互斥= 1,P2进入。然后再次假设P10进入。现在我们在CS中有4个进程(P0,P1,P2,P10)。再次P10退出,这个过程一直持续到结束。最后,我们将拥有CS中的所有流程。

这是考虑到没有一个过程可以同时被调用一次以上。

0

正确答案是2以下是解释。

互斥的初始值= 1

case 1 - any one process among p1...p9 enters the critical section 

互斥的值是通过调用P()设定为0,即它变为零没有其它进程甚至10被允许进入CS作为互斥值为0 。

case 2 - process p10 enters the critical section 

互斥的值是不会被改变为调用V()改掉设置互斥1的值,其已经是1.Since互斥的值是1时任何其他进程P1,...允许p9进入其临界区域,因此CS中任何时候的最大过程数为2.

解决该问题的关键是互斥量可以采用的值只有0和1,并且没有其他值。

+0

Aksam:为什么“通过调用P()将互斥量的值设置为0,即它变成了零,没有其他进程甚至不允许10进入CS互斥值为0“。 P10可以随时进入,但是它需要一个免费的互斥体。 – codeomnitrix

-1

我认为答案应该是11(P0,P1 ... P9和P10)。让我们来看看为什么我说这句话,

为P10 { V(互斥) {CS} V(互斥) }

审时度势:

P0进入互斥封锁全过程= 1点

P10进入互斥畅通总过程= 2

P1进入互斥阻塞总过程= 3

P10退出互斥畅通总过程= 2

P2进入互斥阻塞总过程= 3

P10进入互斥畅通总过程= 4

P3进入互斥阻塞总过程= 5

P10退出互斥量未封锁总进程数= 4

P4进入互斥量锁定总数p rocess = 5

P10进入互斥畅通总过程= 6

P5进入互斥阻塞总过程= 7

P10退出互斥畅通总过程= 6

P6进入互斥阻塞总过程= 7

P10进入互斥畅通总过程= 8

P7进入互斥阻塞总过程= 9

P10退出互斥畅通总过程= 8

P8进入互斥阻塞总过程= 9

P10进入互斥畅通总过程= 10

P9进入互斥阻塞总过程= 11