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

时间:2016-04-30 20:56:04

标签: operating-system cpu scheduling interrupt preemption

维基百科说:

  

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

其他消息来源说:

  

[...] preemption意味着强行从一个进程中取走处理器并将其分配给另一个进程。 [操作系统(自我版1.1),Sibsankar Haldar ]

     

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

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

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

  

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

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

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

1 个答案:

答案 0 :(得分:2)

维基百科的定义非常糟糕。其他人则不太好。然而,他们都在说基本相同的想法。

抢占只是操作系统更改在CPU上执行的进程的手段之一。

这种改变可以通过执行进程自愿产生CPU或操作系统抢占执行进程来实现。

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

当一个进程不能再执行时,它可以自动生成CPU。例如。在对磁盘执行I / O之后(这将花费很长时间才能完成)。有些系统只支持自愿屈服(合作多任务处理)。

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

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