CPU 调度算法

操作系统中有很多的任务,

CPU 调度的指标:

  • 尽快结束任务:周转时间短
  • 用户操作尽快响应:响应时间短
  • 系统内耗时间少:吞吐量高

任务类型:

  • IO 约束型任务:优先级应该更高一些
  • CPU 约束型任务

CPU 调用需要在各种类型任务,各种指标之间折中、综合

常见调度算法

1. FCFS:先来先服务

非抢占式,公平,但是长作业后面的短作业需要等待很长的时间,不利于用户体验

2. SJF:短作业优先

非抢占,长作业可能饥饿

3. 时间片轮转调度算法

每个进程被分配一个时间片,允许该进程在该时间段运行,如果在时间片结束时该进程还在运行,则剥夺CPU并分配给另一个进程,如果该进程在时间片结束前阻塞或结束,则CPU立即进行切换。

4. 最高优先级调度算法

选择优先级最高的进程优先执行,优先级可以不变,也可以动态调整。

5. 多级反馈队列调度算法:

  • 设置多个就绪队列,并为各个队列赋予不同的优先级。第一个队列的优先级最高,依次递减优先级。
  • 对于各个队列进程执行时间片的大小也不同,优先级越高的队列,分配到的时间片越少。
  • 当第一级队列为空时,再第二级队列进行调度,依次类推,各级队列按照时间片轮转方式进行调度。
  • 当一个新进程创建后,首先把它放入第一队列的末尾。按照FCFS原则排队等待调度。当轮到该进程执行时,如它在该时间片完成,便可准备撤离系统,如果它在一个时间片结束时尚未完成,则调度程序便将该进程转入第二队列的末尾,再同样地按照FCFS原则等待调度执行。依次类推。

4. SRTN:最短剩余时间优先

SJF的抢占版,即当一个新就绪的进程比当前运行进程具有更短完成时间时,系统抢占当前进程,选择新就绪的进程执行。

5. HRRN:最高相应比优先算法

是一个综合算法,调度时,首先计算每个进程的响应比R,之后总是选择R最高的进程执行。 $$ 响应比R = \frac{等待时间 + 处理时间}{处理时间} $$