一、调度算法
调度算法:根据系统的资源分配策略所规定的资源分配算法
1、先来先服务调度算法
对作业调度来说:
每次从后备作业队列中,选择一个或多个最先进入该队列的作业调入内存,为它们分配资源、创建进程,然后放入就绪队列。
对进程调度来说:
每次从就绪队列中,选择一个最先进入该队列的进程分配处理机使之运行。直到完成或阻塞后,才放弃处理机。
PS:
先来先服务调度算法有利于长作业(进程),不利于短作业(进程)
2、短作业(进程)优先法
对作业调度来说:
从后备队列中选择一个或若干个估计运行时间最短的作业调入内存运行。
对进程调度来说:
从就绪队列中选出一个估计运行时间最短的进程,分配处理机使它立即执行直到完成,或发生某事件而被阻塞放弃处理机时,再重新调度。
PS:
对长作业不利。如果有一长作业进入系统的后备队列,由于总是优先调度那些短作业(进程),将导致长作业长期不被调度。
不能保证紧迫性作业(进程)被及时处理。
作业(进程)的长短根据用户所提供的估计执行时间而定,不一定能真正做到短作业优先。
3、优先权调度算法
3.1、非抢占式优先权调度算法
把处理机分配给就绪队列中优先权最高的进程后便一直执行下去直至完成或发生某事件使该进程放弃处理机时,可再将处理机重新分配给另一优先权更高的进程。
3.2、抢占式优先权调度算法
把处理机分配给优先权最高的进程,使之执行。在执行期间,只要又出现优先权更高的进程,就重新将处理机分配给新到的优先权最高的进程。
4、优先权的类型
4.1、静态优先权
在创建进程时确定
在进程的整个运行期间保持不变
4.2、动态优先权
优先权随进程推进或随其等待时间的增加而改变的,以便获得更好的调度性能。
4.3、确定优先权依据
(1)进程类型:系统进程高于用户进程
(2)进程对资源的要求:要求少的进程应赋予较高优先权
(3)用户要求:由用户进程的紧迫成都及所付费多少来确定
5、高响应比优先调度算法
优先权=响应时间/要求服务时间,其中的响应时间为等待时间+要求服务时间。
那么我们可以发现这个优先权的确定是动态的,会随着该进程的等待时间的改变而改变。
当作业等待时间相同,有利于短作业。
当服务时间相同,实现的是先来先服务。
通过引入动态优先权,长作业也能获得处理机。
6、时间片轮转法
把就绪队列组织成FIFO队列,把CPU分配给队首进程,规定它执行一个时间片,时间片完时该进程还没结束就排在就绪队列的末尾,若该进程结束,则释放资源,重新把处理机分配给就绪队列中新的队首进程,也执行一个时间片。
通过这样一个分配,使得就绪队列中的所有进程在一给定时间内,可获得一个时间片的CPU时间。
7、多级反馈队列调度算法
为多个队列赋不同的优先级,其中第一个队列的优先级最高,其余逐个降低。
各队列中进程的执行时间片也不同,优先权越高的队列中时间片越小。
新进程进入内存后,首先放入第一列的末尾,按先来先服务原则排队等待调度。到该进程执行时,如果能在该时间片内完成便准备撤离系统;如果未完成,转入第二队列的末尾,再按照先来先服务原则等待调度;如此下去,当一个长作业从第一队列一次降到第N队列后,在第N队列中便采取按时间片轮转的方式运行。
仅当第1~(i-1)队列均空时,才会调度第i队列中的进程运行。如果处理机正在第i队列中为某进程服务时,又有新进程进入优先权较高的队列,则新进程会抢占处理机,并且把正在运行的进程放回到第i队列的末尾