Linux 内核如何在用户空间进程/线程和内核任务/作业之间调度 CPU

Linux 内核如何在用户空间进程/线程和内核任务/作业之间调度 CPU

我试图了解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]

这些流程的安排方式与您更熟悉的流程相同。

此类任务的常见模式是工作队列;这些的内核文档非常好,如果您对该主题感兴趣,我鼓励您阅读它。

相关内容