Operating system 过程的最大数量可在其关键部分

Operating system 过程的最大数量可在其关键部分,operating-system,mutex,Operating System,Mutex,我手头有一个问题,但上面提到的答案似乎令人困惑 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 p

我手头有一个问题,但上面提到的答案似乎令人困惑

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,因为Pi(I=1到9)中的任何一个都可以在其CS中。一旦处理器上下文切换到P10,它就会发出一个互斥信号,它可以与Pi(i=1..9)中的另一个进程一起转到它的CS

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

谢谢

我想应该是3点

假设互斥量值现在是1,如果P0是schedule,那么互斥量=0,P0在其CS中出现。现在假设上下文切换发生,P10是调度,因为P10第一个语句是V,互斥体值将变为1,P10也将在其CS中,此时2进程P0和P10也在其CS中。现在再次发生上下文切换,假设P1是调度,则它也将进入其CS,互斥体值=0
现在,在这一点上,我们有三个进程,在CS P0,P1和P10中,互斥值是0。现在,要使互斥值为1,这三个进程中的任何一个都必须调用P,这意味着它将从其CS中出来。因此,在任何时刻,在其CS中最多只能有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中的所有流程


这是考虑到没有一个进程可以同时调用多次

正确答案是2,下面是解释

互斥体的初始值=1

case 1 - any one process among p1...p9 enters the critical section
通过调用p()将互斥量的值设置为0,即它变为0。由于互斥量值为0,因此不允许其他进程(甚至10)输入CS

case 2 - process p10 enters the critical section
当调用V()尝试设置互斥量1的值时,互斥量的值不会改变,因为互斥量的值已经是1。由于互斥量的值是1,任何其他进程p1…p9都可以进入其关键部分,因此CS中任何时候的最大进程数都是2


解决这个问题的关键是互斥体只能取0和1,而不能取其他值。

我认为答案应该是11(P0、P1…P9和P10)。让我们看看我为什么这么说

第10页 { v(互斥) {CS} V(互斥) }

考虑以下情况:

P0进入互斥锁阻塞的总进程=1

P10进入互斥解锁总进程=2

P1进入互斥锁阻止的总进程=3

P10退出互斥解锁总进程=2

P2进入互斥锁阻止的总进程=3

P10进入互斥解锁总进程=4

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

P10退出互斥解锁总进程=4

P4进入互斥锁阻止的总进程=5

P10进入互斥解锁总进程=6

P5进入互斥锁阻塞的总进程=7

P10退出互斥解锁总进程=6

P6进入互斥锁阻止的总进程=7

P10进入互斥解锁总进程=8

P7进入互斥锁阻塞的总进程=9

P10退出互斥解锁总进程=8

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

P10进入互斥解锁总进程=10


P9进入互斥锁阻塞的总进程=11

谢谢,我用同样的方法计算出来了。忘了写答案了here@user2129312如果互斥量的值为0,那么p10或任何其他进程都不允许在CS中输入。p10将在两个位置都有V(互斥量)。我们误读了quetsionAksam:why“互斥量的值通过调用P()设置为0,即它变为零。当互斥量值为0时,任何其他进程甚至10都不允许输入CS。”P10可以随时进入,但需要一个免费的互斥锁才能退出。