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

问题描述 投票:0回答:1

我对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相互竞争?

linux linux-kernel scheduling
1个回答
1
投票

Linux内核有一系列“调度类”,它们是决定核心空闲时应该运行什么线程的模块。

由于SCHED_RR是一个实时调度类,它将决定在SCHED_NORMAL之前安排到空闲核心的内容。这意味着从某种意义上说,A及其子女对B及其子女有严格的优先权。

但是,我相信Linux为非实时调度类保留了5%的CPU,因此B及其子代不应该缺乏CPU。

© www.soinside.com 2019 - 2024. All rights reserved.