-2

我在网上找彼得森的算法,我似乎无法区分它是否是抢占式的。

抢占式- 非自愿调度,操作系统决定何时停止进程

非抢占式- 进程完成后自愿放弃 CPU

在此处输入图像描述

我觉得彼得森的算法似乎是非抢占式的,因为没有提到进程的优先级。

那是对的吗?有人可以对此有所了解吗?

4

2 回答 2

1

彼得森算法既不是抢占式也不是非抢占式

抢占是底层操作系统的概念,更准确地说是调度程序。调度程序的任务是以及时(双关语)的方式将时隙分配给进程。

调度程序可以中断有关等待状态的进程。

但是,向调度程序发出信号是“谨慎的”,现在是利用等待状态让另一个进程运行的好时机。

对于彼得森算法,这个信号应该在while-loop 内。一个简单的sleep就足够了。

维基百科还提到:

while 条件即使在抢占的情况下也有效

因此,在我们开始时得出结论:
彼得森算法既不是抢占式的,也不是非抢占式的

于 2015-11-04T22:42:53.250 回答
0

Peterson 的解决方案适用于先发制人的过程。对于非抢占式进程,它可能会失败。

假设两个进程都希望进入临界区。

do {
   flag[0] = 1; 
   turn = 1;
   while(flag[1] && turn == 1);
   CS
   flag[0] = 0;
   RS
   } while(1);

do {
   flag[1] = 1; 
   turn = 0;
   while(flag[0] && turn == 0);
   CS
   flag[1] = 0;
   RS
   } while(1);

如果 turn = 1 进程 0 将处于自旋锁中。它正在浪费 CPU 周期。它被抢占,以便其他进程(即进程 1)获得机会。

于 2020-09-06T07:45:47.263 回答