gpt4 book ai didi

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

转载 作者:太空宇宙 更新时间:2023-11-04 10:01:43 25 4
gpt4 key购买 nike

我对 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 内核有一系列“调度类”,它们是决定当内核空闲时应该运行哪个线程的模块。

由于 SCHED_RR 是一个实时调度类,它会在 SCHED_NORMAL 之前决定将什么调度到空闲核心上。这意味着在某种意义上,A 及其子项严格优先于 B 及其子项。

但是,我相信 Linux 会为非实时调度类保留大约 5% 的 CPU,因此 B 和它的子级不应该缺少 CPU。

关于linux - sched_setscheduler()/sched_getscheduler() 是否只影响指定进程及其子进程的调度策略?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/55655951/

25 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com