8

维基百科说:

在计算中,抢占是暂时中断正在由计算机系统执行的任务的行为,不需要它的合作,并打算在以后恢复任务。

其他消息来源说:

[...] 抢占意味着强行从一个进程中取出处理器并将其分配给另一个进程。[操作系统 (Self Edition 1.1),Sibsankar Haldar ]

当程序执行期间出现中断并且调度程序选择其他一些程序执行时,就会发生程序抢占。[操作系统:基于概念的方法,2E,DM Dhamdhere ]

所以,我的理解是,如果进程被中断(通过硬件中断,即 I/O 中断或定时器中断)并且调度程序在处理中断后调用,选择另一个进程运行(根据CPU 调度算法)。如果调度程序选择了被中断的进程,我们就没有进程抢占(中断不一定会导致抢占)。

但我发现许多其他来源以下列方式定义抢占:

抢占是从程序中强制释放 CPU。[操作系统:基于概念的方法,2E,DM Dhamdhere ]

您可以看到同一本书报告了两种不同的抢占定义。在后者中没有提到必须将 CPU 分配给另一个进程。根据这个定义,抢占只是“中断”的另一个名称。当出现硬件中断时,进程被中断(它从“运行”状态切换到“就绪”状态)或被抢占。

所以我的问题是:这两个定义中哪一个是正确的?我很困惑。

4

1 回答 1

9

维基百科的定义很糟糕。其他的不太好。但是,他们都在说基本相同的想法。

抢占只是操作系统改变在 CPU 上执行的进程的一种方式。

这种变化可以通过执行进程自愿让出 CPU 或操作系统抢占执行进程来发生。

两种方法中切换进程(上下文切换)的机制是相同的。唯一的区别是上下文切换的触发方式。

当一个进程不再可以执行时,它可以自愿让出 CPU。例如,在对磁盘进行 I/O 之后(这将需要很长时间才能完成)。一些系统只支持自愿让步(合作多任务)。

如果一个进程是计算密集型的,它将占用 CPU,不允许其他进程执行。大多数操作系统使用定时器中断。如果中断处理程序发现当前进程已经执行了至少一个指定的时间段,并且还有其他进程可以执行,操作系统就会切换进程。

抢占然后是由操作系统而不是由进程(或线程)本身触发的 CPU 上的进程(或线程)[上下文]切换。

于 2016-04-30T21:21:37.113 回答