1. CPU时间片分配的基本概念
在Linux系统中,CPU时间片分配是操作系统调度器的核心功能之一。简单来说,时间片就是每个进程被允许在CPU上连续执行的时间长度。想象一下餐厅里多位顾客共享一个厨师的情况 - 厨师不会只为一位顾客做完所有菜品,而是轮流为每位顾客做一道菜,确保所有人都能及时得到服务。
Linux内核通过时间片轮转(Round Robin)的方式实现多任务处理。默认情况下,普通进程的时间片长度在5ms到800ms之间,具体值取决于内核版本和系统配置。这个时间片长度不是固定不变的,调度器会根据系统负载和进程优先级动态调整。
注意:现代Linux内核使用完全公平调度器(CFS),它采用更精细的时间分配策略,与传统的时间片概念有所不同,我们将在后面详细讨论。
需要模型API调用? 免费领10W Token,多模型网关一键接入 Claude、DeepSeek 等主流模型。
2. Linux调度器的发展与演变
2.1 O(1)调度器时代
在Linux 2.6.23内核之前,系统使用O(1)调度器。这个调度器之所以得名,是因为它的调度算法时间复杂度为O(1),即无论系统中有多少进程,做出调度决策的时间都是恒定的。
O(1)调度器使用固定长度的时间片,并维护两个进程队列:活动队列和过期队列。调度器从活动队列中选择最高优先级的进程执行,当进程用完时间片后,它会被移到过期队列。当活动队列为空时,两个队列交换角色。
这个调度器的主要特点是:
- 为交互式进程提供更好的响应性
- 使用启发式方法识别交互式进程
- 时间片长度与进程优先级相关
2.2 完全公平调度器(CFS)的引入
从Linux 2.6.23开始,内核引入了完全公平调度器(CFS),这是当前大多数Linux发行版默认使用的调度器。CFS的设计理念完全不同 - 它不再使用传统的时间片概念,而是追求"完全公平"的CPU时间分配。
CFS的核心思想是:
- 维护一个红黑树来跟踪所有可运行进程
- 每个进程都有一个"虚拟运行时间"(vruntime)的概念
- 调度器总是选择vruntime最小的进程来运行
- 通过这种方式,所有进程都能公平地获得CPU时间
3. CFS调度器的工作原理详解
3.1 虚拟运行时间(vruntime)的概念
vruntime是CFS调度器的核心指标,它记录了进程在CPU上运行的"虚拟"时间。这个值不是简单的实际运行时间,而
