CPU 调度器简介
1)在任务之间共享CPU
2)(在每个CPU上)选择下一个要执行的任务,当:
- 正在运行的任务终止了
- 正在运行的任务睡眠了(等待一个事件)
- 一个新任务被创建,或者一个睡眠的任务被唤醒了
- 正在运行的任务时间片用光了
3)目标:
- 公平
- 基于优先级的时间片分配
- 低任务响应时间
- 高(任务完成)吞吐量
- CPU之间的负载平衡
- 功耗控制
- 低开销(运行调度代码)
4)能够在大型机/服务器/笔记本/嵌入式设备/手机上工作
O(1)调度器
- 140个优先级。0-99为实时任务,100-139为用户任务
- 每个CPU运行队列有两个数组:活跃的 和 终止的
- 每个数组有140个元素,每个对应一个优先级
- 每个元素是一个链表,使用FIFO(先入先出)方式组织
- bitmap(140位)用来找到,哪个优先级队列是非空的
- 时间片被分配给基于这些优先级的任务
- 终止的任务从Active数组中移动到Expired数组
- 一旦Active数组空了,则交换两个组
- 入队、出队任务和选择下一个任务,都会在常数时间内完成
- 在Linux 2.6.23(2007年)被替换成了CFS