赞
踩
无论是在批处理系统还是分时系统中,用户进程数一般都多于处理机数,这将导致它们互相争夺处理机。另外,系统进程也同样需要使用处理机。
这就要求进程调度程序按一定的策略,动态地把处理机分配给处于就绪队列中的某一个进程,以使之执行。
调度算法是指:根据系统的资源分配策略所规定的资源分配算法。
高级、中级和低级调度作业从提交开始直到完成,往往要经历下述三级调度:
先来先服务(FCFS)调度算法是一种最简单的调度算法,该算法既可用于作业调度,也可用于进程调度。
当在作业调度中采用该算法时,每次调度都是从后备作业队列中选择一个或多个最先进入该队列的作业,将它们调入内存,为它们分配资源、创建进程,然后放入就绪队列。
在进程调度中采用FCFS算法时,则每次调度是从就绪队列中选择一个最先进入该队列的进程,为之分配处理机,使之投入运行。该进程一直运行到完成或发生某事件而阻塞后才放弃处理机。
来看一个例子,假设有三个进程和它们各自执行时间(以毫秒为单位)如下表:
那么如果三个进程按照P1、P2、P3的顺序启动的话,按照先到先服务的调度算法,执行过程如下:
平均等待时间就是(0 + 24 + 27) / 3 = 17毫秒。
FCFS算法是非抢占式的,一旦内核将CPU分配给一个进程就不会被释放了,除非进程结束或者请求I/O阻塞。这也是我们之前学习的多任务系统的特点。
在优先级调度算法中,每个进程都关联一个优先级,内核将CPU分配给最高优先级的进程。具有相同优先级的进程,按照先来先服务的原则进行调度。
假设进程的执行时间和优先级如下,并且这些进程同时存在于内存中时,内核基于优先级的调度过程如下:
采取基于优先级调度算法要考虑进程饿死的问题,因为高优先级的进程总是会被优先调度,具有低优先级的进程可能永远都不会被内核调度执行。Aging是对于这个问题的一个解决方案,所谓Aging就是指逐渐提高系统中长时间等待的进程的优先级。比如如果优先级的范围从127到0(127表示最低优先级),那么我们可以每15分钟将等待进程的优先级加1。最终经过一段时间,即便是拥有最低优先级127的进程也会变成系统中最高优先级的进程,从而被执行。
优先级调度可以抢占式或者非抢占式的。当一个进程在就绪队列中时,内核将它的优先级与正在CPU上执行的进程的优先级进行比较。当发现这个新进程的优先级比正在执行的进程高时:对于抢占式内核,新进程会抢占CPU,之前正在执行的进程转入就绪队列;对于非抢占式内核,新进程只会被放置在就绪队列的头部,不会抢占正在执行的进程。
该算法从就绪队列中选出下一个“CPU执行期最短”的进程,为之分配处理机。
最短作业优先调度是优先级调度的特例。在优先级调度中我们根据进程的优先级来进行调度,在最短作业优先调度中我们根据作业的执行时间长短来调度。
通过下面的例子来看看它是怎样调度的。
进程1首先执行了1毫秒,当执行时间更短的进程2进入就绪队列时发生抢占。进程3在进程2执行1毫秒后到来,但是进程3的执行时间比进程2长。同理进程4的到来也没法抢占进程2,所以进程2可以一直执行到结束。之后是执行时间第二短的进程4执行,最后是进程1(要看剩余执行时间,还剩7毫秒)和进程3。
该算法虽可获得较好的调度性能,但难以准确地知道下一个CPU执行期,而只能根据每一个进程的执行历史来预测。
前几种算法主要用于批处理系统中,不能作为分时系统中的主调度算法,在分时系统中,都采用时间片轮转法。
分类:
RR调度算法转为分时系统设计,它与FCFS很像,但是加入了抢占。具体调度过程是:内核从就绪队列中选取第一个进程,将CPU资源分配给它,并且设置一个定时器在一个时间片后中断该进程,调度就绪队列中的下一进程。很明显,RR调度算法是抢占式的,并且在该算法的调度下,没有一个进程能够连续占用CPU超过一个时间片,从而达到了分时的目的。
来看下面的例子,假设一个时间片的长度为4毫秒:
HRRN是介于FCFS(先来先服务算法)与SJF(短作业优先算法)之间的折中算法。
FCFS算法所考虑的只是作业等待时间,而忽视了作业的运行时间(类似我们在生活中排队买东西)。而SJF算法正好与之相反,只考虑作业的运行时间,而忽视了作业的等待时间。
高响应比优先算法,则是考虑了作业的等待时间,又考虑了作业运行时间的调度算法,因此照顾了短作业,又不致使长作业等待时间过长,从而改善了处理机的调度的性能。
这个算法相当于给与每个作业一个动态的优先级,这个优先级是随着时间变化的变化的,等待时间不断地增加,这将让长作业的优先级在等待期间不断地增大,等待足够的时间,必然会得到处理机。
优先级 = (等待时间+要求服务时间)/要求服务时间。又因为,等待时间与要求服务时间之和为系统对作业的响应时间,所以优先级 = 响应时间/要求服务时间。
规律:
例题:
在采用多级反馈队列调度算法的系统中,调度算法的实施过程如下所述:
多级反馈队列调度算法则不必事先知道各种进程所需的执行时间,而且还可以满足各种类型进程的需要,因而它是目前被公认的一种较好的进程调度算法。
Copyright © 2003-2013 www.wpsshop.cn 版权所有,并保留所有权利。