维基百科说:
在计算中,抢占是暂时中断计算机系统正在执行的任务的行为,不需要它的合作,并且意图在以后恢复任务。
其他消息来源说:
[...] preemption意味着强行从一个进程中取走处理器并将其分配给另一个进程。 [操作系统(自我版1.1),Sibsankar Haldar ]
当程序执行期间出现中断并且调度程序选择其他程序执行时,会发生程序抢占。 [操作系统:基于概念的方法,2E,D。M. Dhamdhere ]
所以,我理解的是,如果进程被中断(通过硬件中断,即I / O中断或定时器中断),我们有进程抢占和调度程序,在处理中断后调用,选择另一个进程运行(根据CPU调度算法)。如果调度程序选择中断的进程,则我们没有进程抢占(中断不一定导致抢占)。
但我发现许多其他来源以下列方式定义抢占:
Preemption是从程序中强制释放CPU。 [操作系统:基于概念的方法,2E,D。M. Dhamdhere ]
您可以看到同一本书报告了两种不同的抢占定义。在后者中没有提到必须将CPU分配给另一个进程。根据这个定义,抢占只是“中断”的另一个名称。当出现硬件中断时,进程被中断(它从“正在运行”切换到“就绪”状态)或被抢占。
所以我的问题是:两个定义中的哪一个是正确的?我很困惑。
答案 0 :(得分:2)
维基百科的定义非常糟糕。其他人则不太好。然而,他们都在说基本相同的想法。
抢占只是操作系统更改在CPU上执行的进程的手段之一。
这种改变可以通过执行进程自愿产生CPU或操作系统抢占执行进程来实现。
切换过程的机制(上下文切换)在两种方法中都是相同的。唯一的区别是如何触发上下文切换。
当一个进程不能再执行时,它可以自动生成CPU。例如。在对磁盘执行I / O之后(这将花费很长时间才能完成)。有些系统只支持自愿屈服(合作多任务处理)。
如果进程受计算限制,它将占用CPU,不允许其他进程执行。大多数操作系统使用定时器中断。如果中断处理程序发现当前进程已执行至少一段指定的时间,并且还有其他可以执行操作系统的进程将切换进程。
然后,抢占是CPU上的进程(或线程)[上下文]切换,由操作系统而不是进程(或线程)本身触发。