1. 处理器调度
1.1 简化的处理器调度问题
<aside>
📖 中断机制
处理器以固定的频率被中断
Linux Kernel 可以配置:100/250/300/1000Hz
中断/系统调用返回时可以自由选择进程/线程执行
</aside>
<aside>
📖 处理器调度问题的简化假设
系统中有一个处理器 (1970s)
系统中有多个进程/线程共享 CPU
包括系统调用 (进程/线程的一部分代码在 syscall 中执行)
偶尔会等待 I/O 返回,不使用 CPU (通常时间较长)
</aside>
1.2 Round-Robin

假设当前 $T_i$ 运行
- 中断后试图切换到下一个线程 $T_{(i+1)\mod n}$
 
- 如果下一个线程正在等待 I/O 返回,继续尝试下一个
 
- 如果系统所有的线程都不需要 CPU,就调度 idle 线程执行
 
中断之间的线程执行称为 “时间片” (time-slicing)
1.3 引入优先级
UNIX niceness
- 20 .. 19 的整数,越 nice 越让别人得到 CPU
- -20: 极坏; most favorable to the process
 
- 19: 极好; least favorable to the process
 
 
基于优先级的调度策略
- RTOS: 坏人躺下好人才能上
 
- Linux: nice 相差 10, CPU 资源获得率相差 10 倍
 
2. 真实的处理器调度