因为操作系统不是只有一个进程的,一般来说进程的数量会比处理器的数量多。假设有x个进程,就会有x!种的调度方法。这个时候,选择一种调度方法就很有必要。
⑴作业:指在一次应用业务处理过程中,用户提交给OS处理的一个独立任务,用户通常通过作业说明书或特定控制命令来说明作业执行的控制方式。
⑵作业步:在作业运行期间,经过的若干个相对独立又相互关联的顺序加工步骤称为作业步,各作业步之间存在着相互联系,往往是上一个作业步的输出作为下一个作业步的输入。
(3)作业与作业步示例:编程实验作业
(4)作业的三个阶段和三种状态
作业从进入系统到运行结束,通常需要经历收容、运行和完成三个阶段。相应的作业也就有“后备状态”、“运行状态”和“完成状态”。
⑴ 高级调度(作业调度、长程调度):将外存上处于后备队列中的作业调入内存,为它们创建进程、分配必要的资源,放入就绪队列。
⑵ 低级调度(短程调度、进程调度):按照某种算法从进程就绪队列中选取进程,将处理机分配给被它,让进程真正执行器任务。
⑶ 中级调度(中程调度、内存调度、交换调度):把那些暂时不能运行的进程,转移到外存等待,把外存上的已具备运行条件的就绪进程,再重新调入内存,弥补运行内存不足的问题
一、先来先服务调度算法(FCFS)
算法思想:调度最先进入就绪队列的作业或进程,一个进程一旦分得处理机,便执行下去,直到该进程完成或阻塞时,才释放处理机。
例子:三个作业按顺序但几乎同时到达系统:
作业名 所需CPU时间
作业1 28
作业2 9
作业3 3
采用FCFS调度算法进行调度给出各个作业的开始时间、结束时间、周转时间、带权周转时间,计算平均周转时间和平均带权周转时间
平均周转时间=(28+37+40)/3=35
带权值平均周转时间=(28/28+37/9+40/3)/3
二、短作业优先(SJF)
该算法从就绪队列或后备队列中选出所需CPU时间最短的进程或作业,调度运行或为之分配处理机。
SJF算法举例
四个作业按顺序几乎同时到达系统并立即进入调度,用户估算四个作业所需CPU时间(估计运行时间)如下:
作业名 所需CPU时间
作业1 9
作业2 4
作业3 10
作业4 8
假设系统中没有其他作业,采用SJF调度算法,给出各个作业的开始时间、结束时间、周转时间、带权周转时间,计算平均周转时间和平均带权周转时间,并与FCFS调度算法进行对比。
先按照SJF来画表格(结果是这样的)(按照运行的顺序):
按照FCFS来画表格,是这样的:
缺点:
1、这个算法需要提前知道作业运行所需要的时间,实现上是有困难的
2、这个算法对长作业并不友好,可能会出现饥饿等待(干等却没有被叫吃饭)
三、响应比最高的优先算法(HRRF)
引入原因——FCFS与SJF是片面的调度算法
1、FCFS只考虑作业等候时间,对作业大小不做区分,对短作业不公平
2、SJF仅考虑作业计算时间而忽视作业等待时间,对长作业不利
算法原理:作业选择同时考虑等待时间和作业大小两个因素,每次分配处理机时,根据响应比选择作业,将CPU分配给响应比最高的作业,
响应比是作业进入系统后的响应时间与估计运行时间之比:
响应比=1+等待时间/估计运行时间
响应比越大优先级越高,越先分配资源
算法特点(根据响应比计算公式):
1、 短作业估计运行时间短,容易得到较高响应比 作业等待时间足够长后,也将获得足够高的响应比,不会发生饥饿现象
2、既照顾短作业又不使长作业的等待时间过长,增强了公平性,改进了调度性能。
例题:
以下四个作业先后到达系统进入调度:
作业名 到达时间 所需CPU时间
作业1 0 20
作业2 5 15
作业3 10 5
作业4 15 10
四、优先级调度算法 PSA
算法思想:
这种算法是根据确定的优先级来选取作业,每次总是选择优先数高的作业。
规定用户作业优先数的方法:
(a)由用户规定优先数(外部优先数)
用户提交作业时,根据急迫程度规定适当的优先级,如果涉及收费,优先级越高,收费将越高
(b)由系统计算优先数(内部优先数)
有很多方法,考虑作业运行时间、用户给出的优先数、等待时间、作业类型等,SJF和HRRF也是一种特殊的优先级调度算法;
五、抢占式短作业优先算法(最短剩余时间优先)
一、多级反馈队列调度算法 MFQ
1、算法思想:
举例说明:
五个任务的到达时间和运行时间如左图所示,采用非抢占多级反馈队列算法。其中第一级和第二级按任务到达时间的优先级调度。请用Gantt图分析任务的调度过程,计算各进程周转时间与平均周转时间。
解题:
说明:
1、A最先到达,所以A先进入队列1,队列1的时间片是3,所以先执行3个时间单位,然后被插入到队列2中(时间用完了);然后在执行过程中,B来了,B也插入到1队列,开始执行3个时间单位,然后被插入到队列2;(此时一共消耗了6个时间单位)执行过程中C也到了,C开始执行3个单位,然后被插入到队列2;同理D也执行3个时间单位,插入队列2的末尾;最后E直接在时间片没有结束之前,执行完毕。队列1执行完毕,开始执行队列2
2、根据FCFS原则,ABCD依次执行四个时间单位,B和D在队列2中因为没有执行完毕,所以被插入到最后一个队列,也就是队列3。至此,队列2执行完毕,队列3执行开始。
3、最后一个队列按照SJF原则,因为D只有一个单位没有执行,B还有两个,所以先执行D,然后再执行B
二、时间片轮转算法(RR算法)
三、非抢占式优先算法
例3-9
假设就绪队列中有10个进程,系统将时间片设为200ms,CPU进行进程切换要花费用10ms,试问系统开销所占的比率约为多少?若时间片减小到100ms,系统开销所占的比率增加多少?
解: (1) 10个进程以时间片轮转的方式使用CPU。
系统总时间(200ms+10ms)
系统开销所占的比率: 10/(200+10)= 4.8%(切换所占的比例)
(2) 10个进程以时间片轮转的方式使用CPU。
系统总时间(100ms+10ms)
系统开销所占的比率: 10/(100+10)= 9.1%(切换所占的比例)
系统开销所占比例增加:(9.1%-4.8%)=4.3%
时间片越小,系统响应性能越好,但可进程切换频繁,增大调度开销,实际应用中应在时间片大小和调度开销之间进行折衷。
满足实时任务各自时间约束条件的调度称为实时调度
一、实时调度的前提条件
1、最早截止时间优先 EDF
举例:
:四个非周期任务,它们先后到达。
1、 系统先调度任务1执行,在其执行期间,任务2、3又先后到达。
2、 由于任务3的开始截止时间早于任务2,故系统在任务1后将调度任务3执行。
3、 在此期间又到达作业4,其开始截止时间仍是早于任务2的,故在任务3执行完后,系统又调度任务4执行,最后才调度任务2执行。
2、最低松弛度优先算法 LLF
根据任务紧急(或松弛)程度来确定任务的优先级。任务紧迫程度愈高,所赋予优先级愈高。松弛度=必须完成的时间点 - 本身所需运行时间 - 当前时间
例如,一个任务在200ms时必须完成,而它本身运行时间需要100ms,因此,调度程序必须在100 ms之前调度执行(松弛程度为100ms)。
再比如说:
假如一个实时系统中有两个周期性实时任务,A和B,任务A要求每20ms执行一次,执行时间为10ms;任务B只要求每50ms执行一次,执行时间25ms。
图给出了A和 B截止的时间点。