1. 先来先服务和短作业优先调度算法


1)先来先服务调度算法 FCFS (first come first service)

既可以用于作业调度,也可以用于进程调度;比较有利于长作业(进程),而不利于短作业(进程)。
适合CPU繁忙型作业,而不利于I/O繁忙型作业(进程)。

2)短作业(进程)优先调度算法 SJ/PF (Shortest Job/Process First)

既可以用于作业调度,也可以用于进程调度。对长作业不利不能保证紧迫性作业(进程)被及时处理;作业的长短只是被估算出来的。

2. 高优先权优先调度算法 FPF (Priority Scheduling)


1)优先权调度算法的类型

优先权调度算法——照顾紧迫性作业,通常用在批处理系统中,作为作业调度算法,也作为多种操作系统中的进程调度,还可以用于实时系统中。
当其用于作业调度时,将后备队列中若干个优先权最高的作业装入内存
当其用于进程调度时,把处理机分配给就绪队列中优先权最高的进程,此时又可以进一步把该算法分给以下两种:

非抢占式优先权算法

抢占式优先权调度算法(高性能计算机操作系统)

2)优先权类型

对于最高优先权优先调度算法,核心在于:它是使用静态优先权还是动态优先权,以及如何确定进程的优先权

3)动态优先权

高响应比优先调度算法为了弥补短作业优先算法的不足,我们引入动态优先权,使作业的优先等级随着等待时间的增加而以速率a提高。

优先权 = (等待时间+要求服务时间)/ 要求服务时间 即—— (响应时间)/ 要求服务时间

3. 基于时间片的轮转调度算法

1)时间片轮转法 RR (Round Robin)

一般用于进程调度,每次调度,把CPU分配队首进程,并令其执行一个时间片。当执行的时间片用完时,由一个计时器发出一个时钟中断请求,该进程被停止,并被送往就绪队列队尾,依次循环。

2)多级反馈队列调度算法 (Multilevel Feedback Queue Scheduling)

不必事先知道各种进程所需要执行的时间,它是目前被公认的较好的进程调度算法:

  1. 设置多个就绪队列,并为各个队列赋予不同的优先级,在优先权越高的队列中,为每个进程所规定的执行时间片就越小
  2. 当一个新进程进入内存后,首先放入第一队列的队尾,按照FCFS原则等候调度。如果他能在一个时间片中完成,便可以撤离;否则进入第二队列的队尾,同样等待调度…如此下去当一个长作业(进程)从第一队列依次降到第n队列后,便按照第n队列的时间片轮转运行
  3. 仅当第一队列空闲,调度程序才调度第二队列中的进程运行;仅当第1到第(i-1)队列空时,才会调度第i队列的进程运行,并执行响应的时间片轮转
  4. 如果处理机正在处理第i队列中某进程,又有新进程进入优先权较高的队列,则此新队列抢占正在运行的处理机,并把正在运行的进程放在第i队列的队尾

4. 实时调度算法

1)最早截至时间优先 EDF (Earliest Deadline First)

根据任务的开始截至时间来确定任务的优先级。截至时间越早,优先级越高
该算法要求在系统中保持一个实时任务就绪队列,该队列按照各任务截至时间的早晚排序。EDF既可以用于抢占式调度,也可以用于非抢占式调度。

2)最低松弛度优先 LLF (Least Laxity First,LLF)

该算法是根据任务紧急(或松弛)的程度来确定任务的优先级。任务的紧急程度越高,优先级越高。
主要用于可抢占调度方式