【问题标题】:Process synchronization - Critical section进程同步 - 关键部分
【发布时间】:2015-07-05 13:43:34
【问题描述】:

我正在为我的 OS 期末考试而学习。目前在进程同步章节。 我们的书提供了以下算法来处理关键部分。 它声称该算法解决了饥饿问题并提供了有限的等待。这是伪代码

var flag: array [0..1] of Boolean;
Turn: 0..1;

Repeat
    flag[i] := true;
    turn := j;
    while (flag[j] and turn=j) do no-op;
       critical section
    flag[i] := false;
       remainder section
until false;

据我了解,当一个进程处于其关键部分并且另一个进程需要访问它但第一个进程无法完成时,就会发生饥饿。所以第二个过程必须永远等待。我记得在 CPU 调度中,例如,在算法中实现 aging 可以解决饥饿问题。但我不知道这会如何发生。

我错了吗?有什么我在这里看不到的吗?谢谢。

【问题讨论】:

  • 您介意提一下书名吗?
  • 请也写下算法的名称。

标签: operating-system synchronization critical-section thread-synchronization


【解决方案1】:

假设我们有 2 个进程:1 和 2, process1想去CS: 让我们从第一个过程开始:

Repeat
    flag[1] := true;
    turn := 2;

我想解释一下代码中的“while”:

  1. 如果 falg[2] 等于 true:这意味着 process2 有 已经运行了它的代码的打击线

    标志[2] := true;

  2. 还有一个问题:process2 是否运行了下一行?我的意思是:它运行了吗: “转:= 1;” ? 如是: 意思是两个人都想同时进入CS。

哪一个应该先去CS?

如果turn值等于数字2,则表示process1在process2之后运行了“turn:=2”代码,因为turn变量是process1设置的值,这意味着process2更早地运行了它,所以它是process2转弯。 当 process2 在 CS 中时,我们什么都不做


while (flag[2] and turn=j) do no-op;
       critical section
    flag[i] := false;
       remainder section
until false;

process2 在 CS 中,而 process1 正在等待,process2 在完成他的 CS 部分后就将他的标志设为 false。 所以process1会去CS。

在这个解决方案中会发生饥饿吗?

饥饿是一个资源管理问题,因为资源被分配给其他进程,进程长时间(可能无限)无法获得所需的资源。 但此时process2无法再次获取资源,因为它的flag设置为0,需要再次运行“flag[2]=1”才能进入CS,但此时process1在CS中,process2应该等待进入 CS。

当一个进程没有完成它的 CS 时会发生什么?

如果 process2 不能完成 CS,process1 将永远等待,但是当我们说一个解决方案没有饥饿时,这个没有解决方案,我们并不是指这种情况。我们的意思是如果两个进程都正常工作并且在关键部分代码中没有任何问题,那么现在饥饿不会发生


算法是如何工作的?

有两个人,他们想进一个房间,这个房间是CS。
两者都应该在那里标记,告诉我们要进入 CS
但是,只有一个人可以进入
他们都有一张票,票上写着一个号码。这个数字是另一个人的身份证。
有一个小包,里面只有票的空间。
当person1想进入时,他应该把票放在那里。
所以现在有一张编号为“2”的票
这时候person2会来
他必须把他的票放在那个包裹上,因为没有空位。他会把它放在第一张票上
所以现在当您查看数据包时,您只会看到第二张票
第二张票上写着数字 1
所以,person1 可以进入。
而且他不能再次进入,因为 person2 站在门前,当 person1 出来时,它的标志是假的(在 cs 之后他的标志是假的),而 while(对于 person2)将停止,所以他可以进入


如果不清楚,请告诉我,我会解释更多

【讨论】:

  • “如果两个进程都正常工作并且关键部分代码没有任何问题”。这几乎回答了我的问题。在防止CS 中的无限循环方面,我想到了Starvation。但现在我明白了其中的区别。非常感谢您的宝贵时间。
猜你喜欢
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 2010-09-29
  • 1970-01-01
  • 2020-07-03
  • 1970-01-01
相关资源
最近更新 更多