什么是自愿抢占?

Ric*_*ard 5 terminology scheduling scheduler

什么是自愿抢占?我只知道这是日程安排中的一个概念。

cha*_*tar 5

这取决于操作系统。


在某些RTOS中,自愿抢占意味着正在运行的进程声明了可以抢占的点(否则它将在运行之前完成)。想到这个变体的另一种方式是,中在一个协程。这与内核决定抢占的大多数台式机OS相反。请记住,某些RTOS没有“用户模式”的概念。


在Linux中(至少),“自愿抢占” 有点用词不当:

传统上(无强制抢占),当用户进程进行系统调用(以内核模式)时,它将阻塞直到完成。只能抢占用户模式代码。

抢占式内核使内核代码本身可以被抢占。这听起来是多余的,但值得注意的是,我们的意思是内核是可抢占的,而不是“内核支持抢占”。强制/非强制抢占意味着,即使在处理系统调用时,高优先级用户进程的中断也可以“强制”内核进行上下文切换,以便内核现在可以运行(从技术上讲,它实际上不是上下文切换,但是具有相同的功能影响)。这减少了“看到”硬件状态变化的用户进程的等待时间。

自愿抢占是内核定期检查以查看是否应“在执行内核操作时”重新安排进程的位置。也就是说,它不仅在抢占点安排/重新安排用户进程,而且还定期处理I / O等事务。因此,在通常情况下,高优先级用户进程可能仍必须等待低优先级进程完成其切片的情况下,由于内核要更频繁地检查是否要运行,因此高优先级进程现在可能会“提前”运行。这减少了用户进程从挂起状态变为运行状态的等待时间(以总体系统吞吐量为代价)。