进程调度算法

一、先来先服务和短作业优先调度算法

先来先服务调度算法(FCFS):

简单的操作系统进程调度算法,既可以运用于作业调度,也可以运用于进程调度
(1)在作业调度时:从作业队列中抽取一个或者多个先到的作业,将他们调入内存,分配资源,然后创建进程并且进入就绪队列。
(2)在进程调度时:从就绪队列中抽取一个先到的进程,将处理机分配给它,等到它完成任务或者因为异常阻塞退出后,再将处理机分配给第二个先到的进程

短作业优先调度算法:

和先来先服务调度算法基本类似,就是在抽取作业或者进程时的规则不同,短作业算法是在队列中抽取服务操作时间短的作业或者进程
(1)作业调度时:从作业队列中抽取一个或者多个作业服务运行时间短的作业,调入内存,分配资源,然后创建进程并且进入就绪队列
(2)进程调度时:从就绪队列中抽取服务运行时间最短的进程,分配处理机给它,当该进程运行任务结束或者因为其他原因阻塞退出后,将处理机分配给第二个最短服务运行时间的进程

二、高优先权限调度算法

优先权调度算法:分为:抢占式和非抢占式优先权调度算法

在处理作业调度时都是相同的,从作业队列中抽取一个或者多个优先权最高的作业,调入内存,分配资源并且创建进程,进入就绪队列,在进程调度处理时不同:
(1)非抢占式优先权调度算法:
从就绪队列中抽取优先权最高的进程,将处理机分配给它,一直到该进程任务完成或者阻塞退出为止,再把处理机分配给优先权第二高的进程,以此类推

(2)抢占式优先权调度算法:
从就就绪队列抽取优先权最高的进程,分配处理机给它之后,如果再执行期间,有优先权更高的进程进入就绪队列,那么进程调度就会将正在进行的进程停止,然后将处理机重新分配给最高优先权的进程,也就是说,当一个目前优先权最高的进程在执行的时候,如果新进入一个进程,那么就需要将这个进程的优先权和正在执行的进程进行对比,如果后来的进程优先权更高的话,停止正在执行的进程,重新分配处理机给最高优先权的进程

高响应比优先调度算法:先来先服务和短作业优先调度算法的结合升级版

因为短作业调度算法在处理长作业问题上存在很大问题,长作业在短作业优先调度算法中永远得不到执行,所以需要动态的来计算作业的优先权,作业的优先权会随着等待时间的增加而增加,从而时长作业也能够得到运行的保证
(1)作业等待时间相同时:就要看服务运行时间的长短,服务运行时间越短,优先权越高,这就符合短作业优先调度算法
(2)服务运行时间相同时:先按照优先权进行排序后,作业的优先权就会随着等待的时间越长而增加,这就符合先来先服务的,从而也处理了长作业一直得不到处理的问题
(3)虽然照顾了短作业优先调度算法,也照顾到了先来先服务的调度算法,更处理了长作业的问题,s实现了很好的折衷,但是存在问题:每次进行调度的时候,要计算响应比(也就是等待时间和服务时间之和与优先权的比例),这就会增加系统的开销
所以就有了下面更好的调度算法!

三、基于时间片的轮转调度算法

时间片轮转调度算法

把进程按照先来先服务调度算法排序好,形成一个队列,将处理机分配给队首进程,CPU分配一个固定大小的时间片,并且有一个计数器在计算时间片的时间是否为用完,然后从队首进程开始执行任务,当计数器发现时间片用完之后,进程程序就会停止当前正在执行的进程,并且把它调度到队列的队尾位置,然后将处理机重新分配给队首进程,也是给分配一个时间片。
好处:所有的进程都能够执行到,而且服务时间短的能够快速得到解决,长作业也能够在循环之后获取到长时间片执行任务

多级反馈队列调度算法

这是目前公认最好的调度算法,因为它结合了之前算法的优点,并且改进了它们的缺陷,让这些算法都能够发挥最大的作用。
多级反馈队列调度算法不需要各个进程执行的时间长短,实施过程如下:
(1)设置多个就绪队列,并且每个队列有不同的优先级,优先级从大到小依次递减分配,例如队列一优先级最大,队列二优先级第二大等等,赋予每个队列的时间片大小也不同,按照从开始队列到最后队列依次递增,例如队列一获取的时间片最小,队列二获取的时间片比队列一大,队列三获取的时间片比队列二大等等
(2)每个队列中按照先到先服务调度算法排序,如果有新进程进来则把它放在第一个队列的队尾位置,当队列的时间片快要用完时,如果正在执行的进程没有执行完任务,那么停止该进程运行并且将他放到下一个队列的队尾位置,然后接着分配时间片给当前的队首进程
(3)只有第一个队列为空时,才能执行第二个队列,以此类推,如果此时在执行第二个队列的进程时,有新进来的队列进入到第一个队列的队尾位置,那么就会施行抢占式优先权调度算法,也就是停止当前进程,并且分配处理机给新进入的进程

多级反馈队列调度算法示例:

假设系统中有3个反馈队列Q1,Q2,Q3,时间片分别为2,4,8。

现在有3个作业J1,J2,J3分别在时间 0 ,1,3时刻到达。而它们所需要的CPU时间分别是3,2,1个时间片。

1、时刻0 J1到达。于是进入到队列1 , 运行1个时间片 , 时间片还未到,此时J2到达。

2、时刻1 J2到达。 由于时间片仍然由J1掌控,于是等待。 J1在运行了1个时间片后,已经完成了在Q1中的2个时间片的限制,于是J1置于Q2等待被调度。现在处理机分配给J2。

3、时刻2 J1进入Q2等待调度,J2获得CPU开始运行。

4、时刻3 J3到达,由于J2的时间片未到,故J3在Q1等待调度,J1也在Q2等待调度。

5、时刻4 J2处理完成,由于J3,J1都在等待调度,但是J3所在的队列比J1所在的队列的优先级要高,于是J3被调度,J1继续在Q2等待。

6、时刻5 J3经过1个时间片,完成。

7、时刻6 由于Q1已经空闲,于是开始调度Q2中的作业,则J1得到处理器开始运行。

8、时刻7 J1再经过一个时间片,完成了任务。于是整个调度过程结束。

从上面的例子看,在多级反馈队列中,后进的作业不一定慢完成。

  • 1
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值