“进程抢占”的确切定义是什么?

Lor*_*SSJ 7 cpu operating-system scheduling interrupt preemption

维基百科说:

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

其他消息来源说:

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

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

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

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

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

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

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

use*_*003 8

维基百科的定义很糟糕,其他的就不那么好了。然而,他们都在说本质上相同的想法。

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

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

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

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

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

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