【问题标题】:What is voluntary preemption?什么是自愿抢占?
【发布时间】:2011-07-07 16:37:58
【问题描述】:

什么是自愿抢占?我只知道这是调度中的一个概念。

【问题讨论】:

标签: terminology scheduling scheduler


【解决方案1】:

这取决于操作系统。


在某些 RTOS(实时操作系统)中,自愿抢占意味着正在运行的进程声明可以被抢占的点(否则它将一直运行直到完成)。考虑这种变体的另一种方式是 coroutine 中的 yield。这与内核决定抢占的大多数桌面操作系统形成对比。请记住,某些 RTOS 没有“用户模式”的概念。


在 Linux 中(至少),“自愿抢占”是一个用词不当:

传统上(没有强制抢占),当用户进程(在内核模式下)进行系统调用时,它会阻塞直到完成。只有用户模式代码可以被抢占。

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

自愿抢占是内核定期检查以查看它是否应该“在执行内核操作时”重新调度进程。也就是说,它不仅仅在抢占点调度/重新调度用户进程,而是在处理诸如 I/O 之类的事情时定期进行。因此,通常高优先级用户进程可能仍需要等待低优先级进程完成其分片,而高优先级进程现在可能会“提前”运行,因为内核会更频繁地检查它是否要运行。这减少了用户进程从挂起状态转移到运行状态的延迟(以整体系统吞吐量为代价)。

【讨论】:

    猜你喜欢
    • 2010-10-23
    • 2014-06-11
    • 1970-01-01
    • 2018-09-16
    • 2014-01-13
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2018-06-05
    相关资源
    最近更新 更多