sched_setscheduler()/ sched_getscheduler()仅影响指定进程及其子进程的调度策略吗?

时间:2019-04-12 16:25:44

标签: linux linux-kernel scheduling

我对sched_setscheduler()在Linux中的工作方式感到困惑。

我的理解是Linux内部使用CFS (SCHED_NORMAL)进行内核进程调度。当用户空间启动程序(进程)时,将触发clone()调用以在内核空间中创建相应的调度实体。

因此,假设有用户进程A和进程B。 进程A调用sched_setscheduler(pid_A, SCHED_RR)并生成子进程A1,A2。 进程B调用sched_setscheduler(pid_B, SCHED_NORMAL)并生成子进程B1,B2。

在这种情况下,Linux如何调度进程A和B,因为它们使用不同的调度策略? Linux是否仍然使用其内部默认调度策略在A和B之间进行选择,但让A,A2,A1使用SCHED_RR相互竞争,而B,B1,B2与SCHED_NORMAL竞争呢?

1 个答案:

答案 0 :(得分:1)

Linux内核具有一系列“调度类”,这些模块决定了当内核空闲时应该运行哪个线程的模块。

由于SCHED_RR是实时调度类,因此它将在SCHED_NORMAL之前决定要在空闲核上调度什么。这意味着从某种意义上说,A及其子级比B及其子级具有严格的优先级。

但是,我相信Linux会为非实时调度类预留5%的CPU,因此B及其子级不应缺少CPU。