我试图了解Linux进程管理和调度。我知道调度程序根据优先级/时间切片来调度不同的进程。但是还有一些内核任务(我没有提到将进程带入内核模式的进程的系统调用)也必须进行处理(例如:调度程序/计时器或一些永远运行的内核代码)。我不明白调度程序是否为不同的进程调度 CPU,内核任务在其间是如何服务的。
答案1
未“在进程中”运行(以服务系统调用或中断)的内核任务本身作为单独的进程进行处理,您可以在ps
的输出中看到它们:
root 2 0.0 0.0 0 0 ? S Sep16 0:02 [kthreadd]
root 3 0.0 0.0 0 0 ? I< Sep16 0:00 [rcu_gp]
root 4 0.0 0.0 0 0 ? I< Sep16 0:00 [rcu_par_gp]
root 6 0.0 0.0 0 0 ? I< Sep16 0:00 [kworker/0:0H-kblockd]
root 8 0.0 0.0 0 0 ? I< Sep16 0:00 [mm_percpu_wq]
root 9 0.0 0.0 0 0 ? S Sep16 9:11 [ksoftirqd/0]
root 10 0.2 0.0 0 0 ? I Sep16 173:25 [rcu_sched]
root 11 0.0 0.0 0 0 ? I Sep16 0:00 [rcu_bh]
root 12 0.0 0.0 0 0 ? S Sep16 0:20 [migration/0]
root 14 0.0 0.0 0 0 ? S Sep16 0:00 [cpuhp/0]
root 15 0.0 0.0 0 0 ? S Sep16 0:00 [cpuhp/1]
这些流程的安排方式与您更熟悉的流程相同。
此类任务的常见模式是工作队列;这些的内核文档非常好,如果您对该主题感兴趣,我鼓励您阅读它。