进程调度的功能
- 记录系统中的所有进程的状态、优先级数和资源的需求情况
- 确定调度算法,决定将CPU分配给哪个进程多少时间
- 分配处理机给进程,进行CPU现场的保护和移交
调度的层次
一个作业从提交开始直到完成,往往要经历以下三级调度,如图所示。
作业调度。又称高级调度,.其主要任务是按一定的原则从外存上处于后备状态的作业中挑选一个(或多个)作业,给它(们)分配内存、输入/输出设备等必要的资源,并建立相应的进程,以使它(们)获得竞争处理机的权利。简言之,就是内存与辅存之间的调度。对于每个作业只调入一次、调出一次。
多道批处理系统中大多配有作业调度,而其他系统中通常不需要配置作业调度。作业调度的执行频率较低,通常为几分钟一次。
中级调度。又称内存调度。引入中级调度是为了提高内存利用率和系统吞吐量。为此,应使那些暂时不能运行的进程,调至外存等待,把此时的进程状态称为挂起状态。当它们已具备运行条件且内存又稍有空闲时,由中级调度来决定,把外存上的那些已具备运行条件的就绪进程,再重新调入内存,并修改其状态为就绪状态,挂在就绪队列上等待。
进程调度。又称为低级调度,其主要任务是按照某种方法和策略从就绪队列中选取一个进程,将处理机分配给它。进程调度是操作系统中最基本的一种调度,在一般操作系统中都必须配置进程调度。进程调度的频率很高,一般几十毫秒一次。
进程调度方式
非抢占式方式
系统一旦把处理机分配给就绪队列中优先级最高的进程后,该进程就一直执行下去,直至完成;或者发生某事件而不得不放弃处理机。通常用于批处理系统。抢占式方式
当一个进程正在执行时,系统可以基于某种策略剥夺CPU给其他进程。剥夺的原则有:优先权原则、短进程优先原则和时间片原则。一般用在分时系统和实时系统中。
调度的基本准则
- CPU利用率。尽可能是CPU处于忙碌状态
- 系统吞吐量。表示单位时间CPU完成作业的数量,短作业消耗的处理机时间较短
- 周转时间。从作业提交到作业完成经历的时间。
- 等待时间。进程处于等处理机状态时间之和,从提交到开始执行,等待时间越长,用户满意度越低。
响应时间。指从用户提交请求到系统首次产生响应所用的时间。在交互式系统尤其明显,调度策略应尽可能降低响应时间,使响应时间处在用户能接受的范围之内。
PS:不可能同时满足所有用户和系统的要求, 采取哪种策略要看具体情况,比如实时性或者交互性;另一方面要考虑整体效率,还有算法的开销。
进程调度算法
先来先服务调度算法(FCFS)
思想:
既可用于作业调度也可用于进程调度。
当在作业调度中采用该算法时,每次调度都是从后备作业队列中选择一个或多个最先进入该队列的作业,将它们调入内存,为它们分配资源,创建进程,然后放入就绪队列;
在进程调度中采用FCFS算法时,则每次调度是从就绪队列中选择一个最先进入该队列的进程,为之分配处理机,使之投入运行,该进程一直运行到完或发生某事件而阻塞后才放弃处理机。–非抢占式
特点:
有利于长作业,不利于短作业;有利于CPU繁忙的作业,不利于I/O繁忙的作业。
短作业(进程)优先调度算法(SJF、SPF)
思想:
可以分别用于作业调度和进程调度。
短作业优先(SJF)的调度算法是从后备作业队列中选择一个或若干个估计运行时间最短的作业,将它们调入内存运行;
而短进程(SPF)调度算法则是从就绪队列中选出一个估计运行时间最短的进程,将处理机分配给它,使它立即执行并一直执行到完成,或发生某事件被阻塞放弃处理机。—非抢占式
特点:
比FCFS改善平均周转时间和平均带权周转时间,提高系统吞吐量;对长作业不利,没能根据紧迫程度来划分执行的优先级,难以准确估计 作业或进程的执行时间。
例子:
假设系统中有4个作业,它们的提交时间分别是8、8.4、8.8、9,运行时间依次是2、1、0.5、0.2。
FCFS调度算法:
作业 提交时间 开始时间 等待时间 完成时间 周转时间 1 8 8 0 10 2 2 8.4 10 1.6 11 2.6 3 8.8 11 2.2 11.5 2.7 4 9 11.5 2.5 11.7 2.7 SJF调度算法:
作业 提交时间 开始时间 等待时间 完成时间 周转时间 1 8 8 0 10 2 2 8.4 10.7 2.3 11.7 3.3 3 8.8 10.2 1.4 10.7 1.9 4 9 10 1 10.2 1.2 优先权调度算法
思想:
当该算法用于作业调度时,系统从后备作业队列中选择若干个优先级最高的,且系统能满足资源要求的作业装入内存运行;
当该算法用于进程调度时,将把处理机分配给就绪进程队列中优先级最高的进程投入运行。分为非抢占式优先级算法和抢占式优先级算法。
优先权类型:
静态优先级:在进程创建时确定进程优先级,在进程整个运行期间保持不变
动态优先级:在创建进程时创立一个优先级,但在其生命周期内优先级可以动态变化,以获得更好的调度性能。确定优先级的依据:
(1)进程的类型:通常系统进程高于一般用户进程;交互型的用户进程高于批处理作业对应的进程
(2)进程对资源的需求:进程的估计运行时间及内存需求量少的进程,优先级应较高,有利于缩小平均周转时间
(3)根据用户需求:用户根据自己作业的紧迫程度来指定一个合适的优先级高响应比优先调度算法
思想:
高响应比优先调度算法主要用于作业调度,该算法是对FCFS调度算法和SJF调度算法的一种综合平衡,同时考虑每个作业的等待时间和估计的运行时间。
在每次进行作业调度时,先计算后备作业队列中每个作业的响应比,从中选出响应比最高的作业投入运行。响应比的变化规律可描述为:
根据公式可知:
● 当作业的等待时间相同时,则要求服务时间越短,其响应比越高,有利于短作业。
● 当要求服务时间相同时,作业的响应比由其等待时间决定,等待时间越长,其响应比越高,因而它实现的是先来先服务。
● 对于长作业,作业的响应比可以随等待时间的增加而提高,当其等待时间足够长时,其响应比便可升到很高,从而也可获得处理机。克服了饥饿状态,兼顾了长作业。时间片轮转调度算法
思想:
系统将就绪进程按到达的顺序排成一个队列,按FCFS原则,进程调度程序总是选择就绪队列中的第一个进程执行,且只运行一个时间片。时间用完后,即使此进程并未完成,仍然将处理机分配给下一个就绪的进程,将此进程返回到就绪队列的末尾,等候重新运行。
主要适用于分时系统。
时间片的长短通常由以下因素确定:系统的响应时间、就绪队列中的进程数目和系统的处理能力。
多级反馈队列调度算法(集合了前几种算法的优点)
思想:
- 设置n个就绪队列,优先级从1到n依次递减,即第1级队列优先级最高
- 每个队列的时间也不相同,优先级高的队列,时间片越短,即从1到n时间片越来越多
- 一个新进程进入内存后,先插入第一级队列的末尾,按照FCFS的原则等待调度。如果某个进程可在一个时间片内完成,那么结束此进程;如果某进程在一个时间片内无法完成,就把此进程转入下一级队列的末尾,按照FCFS原则等待调度,一直到第n-1级队列。当一个很长的进程从第1级一直到第n级队列,那么它在第n级队列按照时间片轮转的方式等待调度。
- 仅当第1级队列为空时,调度程序才调度第2级队列中的进程执行,依次类推。如果处理机正在处理第i级的队列的某进程,又有新的进程进入优先级更高的队列(第1——i -1),则此时新的进程抢占处理机,原本正在执行第i级此进程停止运行,放到第i级就绪队列的末尾,把处理机分配给更高优先级的进程
优势:
- 短作业优先
- 短批处理作业周转时间较短
- 长批处理作业不会长期得不到执行