操作系统中有很多的任务,
CPU 调度的指标:
- 尽快结束任务:周转时间短
- 用户操作尽快响应:响应时间短
- 系统内耗时间少:吞吐量高
任务类型:
- IO 约束型任务:优先级应该更高一些
- CPU 约束型任务
CPU 调用需要在各种类型任务,各种指标之间折中、综合
常见调度算法
1. FCFS:先来先服务
非抢占式,公平,但是长作业后面的短作业需要等待很长的时间,不利于用户体验
2. SJF:短作业优先
非抢占,长作业可能饥饿
3. 时间片轮转调度算法
每个进程被分配一个时间片,允许该进程在该时间段运行,如果在时间片结束时该进程还在运行,则剥夺CPU并分配给另一个进程,如果该进程在时间片结束前阻塞或结束,则CPU立即进行切换。
4. 最高优先级调度算法
选择优先级最高的进程优先执行,优先级可以不变,也可以动态调整。
5. 多级反馈队列调度算法:
- 设置多个就绪队列,并为各个队列赋予不同的优先级。第一个队列的优先级最高,依次递减优先级。
- 对于各个队列进程执行时间片的大小也不同,优先级越高的队列,分配到的时间片越少。
- 当第一级队列为空时,再第二级队列进行调度,依次类推,各级队列按照时间片轮转方式进行调度。
- 当一个新进程创建后,首先把它放入第一队列的末尾。按照FCFS原则排队等待调度。当轮到该进程执行时,如它在该时间片完成,便可准备撤离系统,如果它在一个时间片结束时尚未完成,则调度程序便将该进程转入第二队列的末尾,再同样地按照FCFS原则等待调度执行。依次类推。
4. SRTN:最短剩余时间优先
SJF的抢占版,即当一个新就绪的进程比当前运行进程具有更短完成时间时,系统抢占当前进程,选择新就绪的进程执行。
5. HRRN:最高相应比优先算法
是一个综合算法,调度时,首先计算每个进程的响应比R,之后总是选择R最高的进程执行。 $$ 响应比R = \frac{等待时间 + 处理时间}{处理时间} $$