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

11
维基百科定义:
在计算机领域,抢占是指在不需要进程配合的情况下,暂时中断正在进行的计算机系统任务,并打算在以后恢复该任务。
其他来源的定义:
[...] 抢占是指强制从一个进程中取回处理器,并将其分配给另一个进程。[《操作系统(自助版1.1)》,西布桑卡·哈尔达]
程序的抢占发生在执行过程中出现中断并且调度程序选择了其他程序来执行。[《基于概念的操作系统,第2版》,D. M. Dhamdhere]
因此,我的理解是,如果进程被中断(通过硬件中断,即I/O中断或定时器中断),且在处理中断后调用的调度程序根据CPU调度算法选择了另一个进程来运行,则我们有进程抢占。如果调度程序选择了中断的进程,则没有进程抢占(中断不一定会导致抢占)。
但我找到了许多其他定义抢占的来源:
抢占是指从程序强制释放CPU。[《基于概念的操作系统,第2版》,D. M. Dhamdhere]
可以看出,同一本书报告了两种不同的抢占定义。在后者中,没有提到CPU必须分配给另一个进程。根据这个定义,抢占只是“中断”的另一个名称。当硬件中断发生时,进程会被中断(从“运行”状态切换到“就绪”状态)或被抢占。
所以我的问题是:两种定义哪一个是正确的?我很困惑。
1个回答

14

维基百科的定义相当糟糕。其他定义也不太好。然而,它们实质上都在说同一件事。

抢占是操作系统改变正在CPU上执行的进程的方法之一。

这种更改可以通过执行进程自愿放弃CPU或操作系统抢占正在执行的进程来发生。

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

当进程无法执行时,例如执行了磁盘输入/输出(这需要很长时间完成)后,它可以自愿放弃CPU。有些系统仅支持自愿放弃(协作式多任务处理)。

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

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


网页内容由stack overflow 提供, 点击上面的
可以查看英文原文,
原文链接