进程的调度算法
-
先来先服务(FCFS)
算法思想:主要是从“公平”的角度考虑;
算法规则:按照作业/进程到达的先后顺序进行服务;
用于作业/进程调度:作业调度和进程调度都有使用;
是否可抢占:非抢占的算法;
优点:公平,算法实现简单
缺点:排在长进程(作业)后面的短作业需要等到很久的时间,带权周转时间很大,对短作业很不友好;即:对长作业有利,对短作业不利;
是否会导致饥饿:不会,长作业和短作业都会上处理机运行; -
短作业优先(SJF)
①非抢占式:
算法思想:追求最少的平均等待时间,最少的平均周转时间、最少的平均平均带权周转时间;
算法规则:最短的作业/进程优先得到服务(所谓“最短”,是指要求服务时间最短);
用于作业/进程调度:作业调度和进程调度都有使用;
是否可抢占:非抢占的算法;
优点:“最短的”平均等待时间、平均周转时间;
缺点:对短作业有利,对长作业不利;另外:作业/进程的运行时间是由用户提供的,并不一定真实,不一定能做到真正的短作业优先
是否会导致饥饿:会;若有源源不断的短进程到来,长进程会出现“饥饿”
②抢占式抢占式和非抢占式的**区别**: 抢占式短作业优先算法叫做:**最短剩余时间优先算法**,每当有**进程加入就绪队列**改变时就需要**调度**,如果**新到达的**进程剩余时间比**当前运行的**进程剩余时间更短,则由新进程抢占处理机,当前运行进程重新回到就绪队列。另外,当一个进程完成时也需要调度; 非抢占式短作业优先算法:每次调度时选择**当前已到达**且运行时间最短的作业/进程。只有在处理机上的进程主动放弃处理机才会发生进程切换;
-
高响应比优先(HRRN)
算法思想:要综合考虑作业/进程的等待时间和要求服务的时间;
算法规则:在每次调度时先计算各个作业/进程的响应比,选择响应比最高的作业/进程为其服务;
用于作业/进程调度:作业调度和进程调度都有使用;
是否可抢占:非抢占的算法,因此只有当前运行的作业/进程主动放弃处理机时,才需要调度,才需要计算响应比;
优点:综合考虑了等待时间和运行时间;
等待时间相同时,要求服务时间短的优先;
要求服务时间相同时,等待时间长的优先;
是否会导致饥饿:不会;
以上三种调度算法适用于早期批处理系统
- 时间片轮转调度算法(RR)
算法思想:公平地、轮流地为各个进程服务,让每个进程在一定时间间隔内都可以得到响应;
算法规则:按照各进程到达就绪队列的顺序,轮流让各个进程执行一个时间片(如100ms)。若进程未在一个时间片内执行完,则剥夺处理机,将进程重新放到就绪队列队尾重新排队;
用于作业/进程调度:只用于进程调度;
是否可抢占:抢占式算法,由时钟装置发出时钟中断来通知CPU时间片已到;
优点:公平,响应快,适用于分时操作系统;
缺点:由于高频率的进程切换,因此有一定开销;不区分任务的紧急程度;
是否会导致饥饿:不会;
时间片太大或者太小有什么影响?
时间片太大:直接退化为先来先服务,大大增加了进程的响应时间;
时间片太小:操作系统会将大量的时间浪费在进程的切换,导致CPU的执行效率低下;
- 优先级调度算法
算法思想:越来越多的应用场景需要根据任务的紧急程度来决定处理顺序;
算法规则:每个作业/进程有各自的优先级,调度时选择优先级最高的作业/进程;
用于作业/进程调度:既可用于作业调度,也可用于进程调度,还可用于I/O调度;
是否可抢占:抢占式算法,非抢占式都有;
非抢占式:每次调度时选择当前已到达且优先级最高的进程。当前进程主动放弃处理机时发生调度。
抢占式:每次调度时选择当前已到达且优先级最高的进程。当前进程主动放弃处理机时发生调度。另外,当就绪队列发生改变时也需要检查是会发生抢占。
优点:用优先级区分紧急程度、重要程度,适用于实时操作系统。可灵活地调整对各种作业/进程的偏好程度;
缺点:若源源不断地有高优先级进程到来,则