内核模式下的Linux进程调度

wei*_*wei 5 linux scheduling

以下是Wiki引用的一些描述

Linux内核在某些条件下提供抢占式调度.在内核版本2.4之前,只有进程是抢占式的,即除了时间量程到期之外,如果更高的动态优先级进程进入TASK_RUNNING状态,则用户模式中当前进程的执行将被中断.对于Linux 2.6,增加了中断执行内核代码的任务的能力,尽管并非内核代码的所有部分都可以被抢占.

然后它也说这个,

抢占可以提高延迟,提高响应速度,并使Linux更适合桌面和实时应用程序.较旧版本的内核具有所谓的大内核锁,可以在整个内核中进行同步.这最终在2011年被Arnd Bergmann删除

那么上述语句是否适用于当前Linux内核,内核抢占是有条件的?例如,如果通过进行系统调用将进程捕获到内核模式,则此进程不会处于抢占式调度之下?

在哪里可以找到有关用户模式和内核模式下linux调度的最新介绍文章/书籍?

Sun*_*lly 3

当进程出现以下情况时,可能会做出 CPU 调度决策:

1. Switches from running to waiting state (e.g. I/O request)
2. Switches from running to ready state (e.g. Interrupt)
3. Switches from waiting to ready (e.g. I/O completion)
4. Terminates
Run Code Online (Sandbox Code Playgroud)

1和4下的调度是非抢占式的,所有其他调度都是抢占式的,必须处理操作(系统调用)可能不完整的可能性。

是的,Linux 在某些条件下提供抢占式调度,这与某些 Unix 变体不同,在某些 Unix 变体中,内核会在不抢占的情况下调度直到完成。在 Linux 2.6 中,只要任务没有持有锁并且可以安全地重新调度,内核就会抢占正在运行的任务。

Older versions of the kernel had a so-called big kernel lock for synchronization 
across the entire kernel.
Run Code Online (Sandbox Code Playgroud)

指每个用户级线程只映射到一个内核线程。