什么是自愿抢占?我只知道这是计划中的概念。
这取决于操作系统。
[在某些RTOS(实时操作系统)中,自愿抢占意味着正在运行的进程声明了可以抢占的点(否则它将在运行之前完成)。考虑此变体的另一种方法是协程中的yield。这与内核决定抢占的大多数台式机OS相反。请记住,某些RTOS没有“用户模式”的概念。
[至少在Linux中,“自愿抢占”是误称的bit:
传统上(没有[[forced抢占),当用户进程进行系统调用(以内核模式)时,它将阻塞直到完成。只能优先使用用户模式代码。
抢占式内核使得可以抢占内核代码本身。这听起来很多余,但是值得注意的是我们的意思是内核是可抢占的
,而不是“内核支持抢占”。强制/非强制抢占意味着,即使在处理系统调用时,高优先级用户进程的中断也可以“强制”内核进行上下文切换,以便内核现在可以运行(从技术上讲,它实际上不是上下文切换,但是具有相同的功能影响)。这减少了“看到”硬件状态变化的用户进程的等待时间。自愿抢占是内核定期检查以查看是否应“在执行内核操作时”重新安排进程的位置。也就是说,它不仅在抢占点安排/重新安排用户进程,而且在处理诸如I / O之类的事情时会定期进行。因此,在通常情况下,高优先级用户进程可能仍必须等待低优先级进程完成其切片的情况下,由于内核要更频繁地检查是否要运行,因此高优先级进程现在可能会“提前”运行。这减少了用户进程从挂起状态变为运行状态的延迟(以总体系统吞吐量为代价)。