多进程调度算法

1.作业调度原则

当多个作业同时具备可执行条件时,只能有一个作业能够获得处理器被执行。其中调度的原则有以下几点:

  1. 资源利用率:CPU利用率=CPU有效工作时间/CPU总的运行时间 CPU总的运行时间=CPU有效工作时间+CPU空闲等待时间。

  2. 周转时间:作业从提交给系统开始,到作业完成为止的时间间隔称进程周转时间,应使作业周转时间或平均作业周转时间尽可能短。

  3. 吞吐率:单位时间内处理的作业数量。

  4. 公平性:确保每个作业获得合理的CPU份额或其它资源份额,不会出现饿死情况。

2.作业周转时间与平均作业周转时间

如果作业i提交给系统的时刻是 t s t_s ts,完成时刻是 t f t_f tf,该作业的周转时间 t i t_i ti为: t i = t f − t s t_i=t_f-t_s ti=tfts。实际上,它是作业在系统里的等待时间与运行时间之和。平均作业周转时间为: T = ∑ i = 1 n t i n T=\frac{\sum_{i=1}^{n}t_i}{n} T=ni=1nti

3.作业带权周转时间和平均作业带权周转时间

如果作业i的周转时间为 t i t_i ti,所需运行时间为 t k t_k tk,则称 w i = t i t k w_i=\frac{t_i}{t_k} wi=tkti为该作业的带权周转时间。 t i t_i ti是等待时间与运行时间之和,故带权周转时间总大于1。为了提高性能,要让平均作业周转时间和平均带权周转时间最小。

平均作业带权周转时间为:
W = ∑ i = 1 n w i n W=\frac{\sum_{i=1}^{n}w_i}{n} W=ni=1nwi

4.作业调度的基本类型

  1. 非剥夺式调度:分派程序一旦把处理机分配给某作业后便让它一直运行下去,直到作业完成或发生作业调度某事件而阻塞时,才把处理机分配给另一个作业。

  2. 剥夺式调度:当一个作业正在运行时,系统可以基于某种原则,这个原则包括高优先级作业可剥夺低优先级作业或者当运行的时间片用完后被剥夺,剥夺已分配给它的处理机,将之分配给其它作业。

5.作业生命周期状态

在时间片轮转调度策略中,作业具有进入、后备、执行和完成四种状态。

  1. 进入状态:作业的信息从内存中加载,此时称作业处于进入状态。

  2. 后备状态:当作业的全部信息都已输入,且由系统将其存放在特定位置中,此时称作业处于后备状态。系统将所有处于后备状态的作业组成后备作业链表,等待作业调度程序的调度。

  3. 执行状态:一个后备作业被作业调度程序选中,分配了必要的资源,调入内存运行,称作业处于运行状态。

  4. 完成状态:当作业正常运行完毕或因发生错误非正常终止时,作业进入完成状态。

6.作业调度算法

序号 算法名称 算法描述 示例 特点
1 FCFS算法(First Come First Service,先来先服务) 按照作业在后备队列中的先后次序来挑选作业,排在后备队列前面的作业优先获取处理器被执行 三个作业同时到达系统并立即进入调度。作业序号/所需CPU时间为:作业1/28,作业2/9,作业3/3。
采用FCFS算法,平均作业周转时间为35
若三个作业在后备队列中的顺序改为2、1、3,平均作业周转时间约为29
若三个作业在后备队列中的顺序改为3、2、1,平均作业周转时间约为18
FCFS调度算法的平均作业周转时间与任务提交的顺序有关
2 STF算法(Shortest Task First,最短任务优先) 以进行系统的作业所要求的CPU时间为标准,总选取估计计算时间最短的作业投入运行 四个作业同时到达系统并进行调度。作业序号/所需CPU时间:作业1/9,作业2/4,作业3/10,作业4/8
STF作业调度顺序为:作业2、4、1、3。平均作业周转时间T=17,平均带权作业周转时间W=1.98。
如果施行FCFS调度算法,平均作业周转时间T=19,平均带权作业周转时间W=2.61。
1.算法的主要弱点是忽视了作业等待时间,只考虑作业的运行时间
2.会出现饥饿现象
3.SJF的平均作业周转时间比FCFS要小,故它的调度性能比FCFS好
4.实现STF算法需要知道作业所需运行时间,否则调度就没有依据,要精确知道一个作业的运行时间是办不到的
3 SRTF算法(Shortest Remaining Time Firstt,最短剩余时间优先) 一个作业进入后备状态,如果新作业需要的CPU时间比当前正在执行的作业剩余下来还需的CPU时间短,SRTF强行赶走当前正在执行的作业 四个作业先后到达系统并进行调度。作业序号-到达系统时间/所需CPU时间:作业1-0/8,作业2-1/4,作业3-2/9,作业4-3/5。
SRTF调度平均等待时间=6.5
SJF调度平均等待时间=7.75
SRTF是STF算法的抢占式算法
4 HRRF算法(Highest Response Ratio First,最高响应比优先) 响应比=1+已等待时间/估计运行时间。
把CPU分配给响应比最高的作业
四个作业先后到达系统并进行调度。作业序号-到达系统时间/所需CPU时间:作业1-0/20,作业2-5/15,作业3-10/5,作业4-15/10。
SJF调度顺序为作业1、3、4、2,平均作业周转时间T=25,平均带权作业周转时间W=2.25
FCFS调度顺序为作业1、2、3、4,平均作业周转时间T=28.75,平均带权作业周转时间W=3.125
HRRF调度顺序为任务1、3、2、4,平均作业周转时间T=26.25,平均带权作业周转时间W=2.46
1.介于FCFS和STF两者之间折中的算法,既考虑作业等待时间,又考虑作业的运行时间,既照顾短作业又不使长作业的等待时间过长,改进了调度性能
2.短作业容易得到较高响应比
3.长作业等待时间足够长后,也将获得足够高的响应比
4.饥饿现象不会发生
5 优先级调度算法 优先级调度算法每次从后备队列中选择优先级最髙的一个或几个作业,优先执行优先级更高的作业 四个作业同时到达系统并进行调度。作业序号/优先级为:作业1/2,作业2/1,作业3/3。
优先级调度顺序为作业3、1、2。
设置优先数时,有以下两种策略:
1.静态优先数法:
 1)使用外围设备频繁者优先数大,这样有利于提高效率
 2)重要算题程序的作业优先数大,这样有利于作业执行
  3)进入系统时间长的作业优先数大,这样有利于缩短作业完成的时间
  4)交互式用户的作业优先数大,这样有利于终端用户的响应时间
2.动态优先数法:
 1)根据作业占用CPU时间多少来决定,当作业占有CPU时间愈长,则在它被阻塞之后再次获得调度的优先级就越低;反之,作业获得调度的可能性越大
 2)根据作业等待CPU时间多少来决定,当作业在后备链表中等待时间愈长,则在它被阻塞之后再次获得调度的优先级就越高;反之,任务获得调度的可能性越小
6 时间片轮转调度算法 系统每次把CPU分配给后备队列中的首任务使用一个时间片,例如20ms,后备队列中的每个作业轮流运行一个时间片,当这个时间片结束时强迫一个作业让出处理器,让它排列到后备队列的尾部,等待下一轮调度 时间片长=20ms
作业序号/占用CPU时间:作业1/53,作业2/17,作业3/68,作业4/24
作业执行甘特图:甘特图
1.轮转策略可防止那些很少使用外围设备的作业过长的占用处理器而使得要使用外围设备的那些作业没有机会去启动外围设备
2.轮转策略与间隔时钟:即时间片大小的确定。时间片的大小对系统性能有很大的影响,如选择很小的时间片将有利于短作业,因为它能较快地完成,但这样会频繁地发生中断,从而增加系统的开销;反之,如选择太长的时间片,使得每个作业都能在一个时间片内完成,时间片轮转算法便退化为FCFS算法。一个较为可取的大小是,时间片略大于一次典型的交互所需要的时间。这样可使大多数作业在一个时间片内完成。
7 多级反馈队列调度算法 又称反馈循环队列或多队列策略。主要思想如下:
1.作业在进入待调度的队列等待时,首先进入优先级最高的Q1等待。
2.首先调度优先级高的队列中的作业。若高优先级中队列中已没有调度的作业,则调度较低优先级队列中的作业。
3.对于同一个队列中的各个作业,按照FCFS分配时间片调度。在最后一个队列Qn中的各个作业,按照时间片轮转分配时间片调度。
4.在低优先级队列中的作业在运行时,又有新到达的作业,此时须立即把正在运行的作业放回当前队列的队尾,然后把处理机分给高优先级作业。
假设系统中有3个反馈队列Q1,Q2,Q3,时间片分别为2,4,8。
三个作业先后到达系统并进行调度。作业序号-到达系统时间/所需CPU时间:作业1-0/3,作业2-1/2,作业3-3/1。
 1.时刻0 T1到达。于是进入到Q1 ,运行1个时间片 ,时间片还未到,此时T2到达。
 2.时刻1 T2到达。 由于同一队列采用先来先服务,于是T2等待。 T1在运行了1个时间片后,已经完成了在Q1中的2个时间片的限制,于是T1置于Q2等待被调度。当前处理器分配给T2。
 3.时刻2 T1进入Q2等待调度,T2获得CPU开始运行。
 4.时刻3 T3到达,由于同一队列采用先来先服务,故T3在Q1等待调度,T1在Q2等待调度。
 5.时刻4 T2处理完成,由于T3,T1都在等待调度,但是T3所在的队列比T1所在的队列的优先级要高,于是T3被调度,T1继续在Q2等待。
 6.时刻5 T3经过1个时间片,完成。
 7.时刻6 由于Q1已经空闲,于是开始调度Q2中的作业,则T1得到处理器开始运行。T1再经过一个时间片,完成了作业。到此整个调度过程结束。
1.既能使高优先级的作业得到响应又能使短作业迅速完成
2.将后备作业分为两级或多级,系统相应建立两个或多个后备队列,较高优先级的队列一般分配较短的时间片

猜你喜欢

转载自blog.csdn.net/weixin_43943476/article/details/121265502