【Linux】进程调度器

下面我给你一个 清晰、准确、面向最新 Linux 内核(5.x~6.x)的解释

你的三个问题分别是:

  1. 最新的 Linux 内核是否仍然用 CFS 调度普通进程?
  2. 是不是一个进程指定一种调度器?
  3. CFS 与实时调度器(RT scheduler)的关系是什么?

我逐条解释。


1. 最新 Linux 内核是否仍然使用 CFS?

是的。

在 Linux 6.x 内核中(包括最新的 6.10 LTS),Linux 仍然采用:

  • **CFS(Completely Fair Scheduler)**作为 普通任务(normal tasks) 的主调度器
    对应调度策略:SCHED_NORMAL(SCHED_OTHER)SCHED_BATCH

CFS 仍然是桌面 Linux、服务器 Linux 中绝大多数进程使用的调度器。

✔ CFS = 默认调度器,一直在维护和优化


2. 一个进程是否"指定"一种调度器?

不是直接指定调度器,而是指定调度策略(policy)。

调度策略由内核映射到具体调度器。

用户态只能设置:

  • SCHED_OTHER / SCHED_NORMAL
  • SCHED_BATCH
  • SCHED_IDLE
  • SCHED_FIFO
  • SCHED_RR
  • (新)SCHED_DEADLINE

policy → 内核选定对应的调度器

调度策略(policy) 使用的调度器 说明
SCHED_NORMAL(SCHED_OTHER) CFS 默认普通进程
SCHED_BATCH CFS 批处理,权重较低
SCHED_IDLE CFS idle 调度类 极低优先级
SCHED_FIFO RT 调度器 实时
SCHED_RR RT 调度器 实时(轮转)
SCHED_DEADLINE Deadline 调度器 最强实时、按调度参数保证

🔹 所以,进程并不直接选择 CFS 或 RT 调度器。

🔹 它选择 policy,policy 决定属于哪个调度器类(sched_class)。


3. CFS 与实时调度器(RT scheduler)的关系是什么?

Linux 调度器内部不是一个调度器,而是一个 调度器类链表(scheduler class)

复制代码
stop_sched_class
deadline_sched_class
rt_sched_class
fair_sched_class   <-- CFS
idle_sched_class

调度决策遵循以下优先级:

stop > deadline > rt > fair(CFS) > idle

所以关系是:

  • 最高优先级:实时/硬实时(SCHED_DEADLINE / SCHED_FIFO / SCHED_RR)
  • 其次才是:普通任务(CFS)
  • 最后是:空闲级别(SCHED_IDLE)

简化理解:

复制代码
优先运行 RT > CFS

RT 任务一定会抢占 CFS 任务

CFS 任务永远不阻塞 RT 任务

Deadline 调度比 RT 更强,是硬实时


🔥 最简单的总结(必记)

1. 最新 Linux 内核仍然使用 CFS 作为主要 CPU 调度器

2. 进程不是直接选调度器,而是选调度策略(policy)

3. Linux 有多种调度器并存,按优先级排:

复制代码
Deadline > RT(FIFO/RR) > CFS > Idle

如果你需要,我还能继续解释:

  • 如何在 Linux 中把进程切换成 RT 任务(例子:chrt)
  • CFS 的 vruntime 是怎么确保公平的
  • RT 调度器如何避免任务饿死
  • Deadline 调度器的参数 runtime/period/deadline

你接下来想深入哪个?

相关推荐
lihui_cbdd9 小时前
AMBER 24 生产环境部署完全指南(5090可用)
linux·计算化学
开发者小天11 小时前
python中For Loop的用法
java·服务器·python
绾樘11 小时前
RHCE--基于Nginx的Web服务器配置
运维·服务器·nginx
生活很暖很治愈12 小时前
Linux基础开发工具
linux·服务器·git·vim
打工的小王12 小时前
docker(三)具体项目的部署
运维·docker·容器
似霰13 小时前
Linux Shell 脚本编程——核心基础语法
linux·shell
步步为营DotNet14 小时前
深度剖析.NET中IHostedService:后台服务管理的关键组件
服务器·网络·.net
一叶星殇14 小时前
.NET WebAPI:用 Nginx 还是 IIS 更好
运维·nginx·.net
LUCIFER15 小时前
[驱动进阶——MIPI摄像头驱动(五)]rk3588+OV13855摄像头驱动加载过程详细解析第四部分——ISP驱动
linux·驱动开发
暮云星影15 小时前
四、linux系统 应用开发:UI开发环境配置概述 (一)
linux·ui·arm