操作系统中的几种算法
高响应比优先调度算法(HRRN)
该算法会先调度优先级高的进程,处理完当前进程后,会计算队列中的进程的优先级,先调度优先级高的进程。
优先权=(等待时间+要求服务时间)/要求服务时间
由于等待服务时间与服务时间之和就是系统对改作业的影响时间,故该优先级又相当于响应比Rp
Rp=(等待时间+要求服务时间)/要求服务时间=响应时间/要求服务时间
轮转调度算法(RR)
**基本原理:**在时间片轮转调度算法中,系统根据先来先服务的原则,将所有的就绪进程排成一个就绪队列,并且每隔一段时间产生一次中断,激活系统中的进程调度程序,完成一次处理机调度,把处理机分配给就绪队列队首进程,让其执行指令。当时间片结束或进程执行结束,系统再次将cpu分配给队首进程。
**切换时机:**若时间片尚未结束,进程已经执行结束,立即激活调度程序,将其从就绪队列中删除,然后调度就绪队列的队首进程执行,此时开启新的时间片,将计数器重置归零;若时间片已经结束,进程尚未结束,立即激活进程调度程序,将未执行完的进程放到就绪队列的队尾。
进程名 | A | B | C | D | E | |
---|---|---|---|---|---|---|
到达时间 | 0 | 1 | 2 | 3 | 4 | |
服务时间 | 4 | 3 | 4 | 2 | 4 | |
时间片q=1 | 完成时间 | 15 | 12 | 16 | 9 | 17 |
周转时间 | 15 | 11 | 14 | 6 | 13 | |
带权周转时间 | 3.75 | 3.67 | 3.5 | 3 | 3.33 |
多级反馈队列调度算法
调度机制:
(1)系统中设置多个就绪队列并赋予不同的优先级,第一个队列最高,依次降低,同时优先级越高的队列,时间片就越小。比如第i+1队列的时间片长度比第 i 个的时间片长一倍。
(2)每个队列都采用FCFS算法。
多级反馈队列调度算法描述:
1、进程在进入待调度的队列等待时,首先进入优先级最高的Q1等待。
2、首先调度优先级高的队列中的进程。若高优先级中队列中已没有调度的进程,则调度次优先级队列中的进程。例如:Q1,Q2,Q3三个队列,只有在Q1中没有进程等待时才去调度Q2,同理,只有Q1,Q2都为空时才会去调度Q3。
3、对于同一个队列中的各个进程,按照时间片轮转法调度。比如Q1队列的时间片为N,那么Q1中的作业在经历了N个时间片后若还没有完成,则进入Q2队列等待,若Q2的时间片用完后作业还不能完成,一直进入下一级队列,直至完成。
4、在低优先级的队列中的进程在运行时,又有新到达的作业,那么在运行完这个时间片后,CPU马上分配给新到达的作业(抢占式)。
我们来看一下该算法是如何运作的:
假设系统中有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再经过一个时间片,完成了任务。于是整个调度过程结束。
从上面的例子看,在多级反馈队列中,后进的作业不一定慢完成。
————————————————
此处借鉴文章
原文链接:https://blog.csdn.net/yangquanhui1991/article/details/47446151
最早截止时间优先算法(EDF)
该算法是根据任务的截止时间来确定任务的优先级,任务的截止时间越早,其优先级越高,具有最高优先级的任务排在队列的队首。该算法既可应用于抢占式调度方式中,也可用于非抢占式调度方式中。
非抢占式调度方式用于非周期实时任务
任务1最先到达最先开始执行
任务1执行过程中任务2、任务3到达,由于任务3截止时间更早,其优先级愈高,所以执行完任务1后执行任务3
任务3执行过程中任务4到达,由于任务4截止时间更早优先级愈高,任务3执行完后执行任务4,
最后执行任务2
抢占式调度方式用于周期实时任务
周期任务A,周期时间20ms,处理时间10ms
周期任务B,周期时间50ms,处理时间25ms
为了说明通常的优先级调度不能适用于实时系统,该图增加了固定优先级调度的第二行和第三行
**第二行中:**固定A,B优先级,且优先级A>B;
先执行A1,A1执行完后执行B1;
B1执行了10ms后被A2抢占;
A2执行完后继续执行B2;
B2执行10ms后被A3抢占;
A3执行完后已经到达B2的截止时间了,但B2总共执行了20ms,很明显低于所需处理时间25ms。
**第三行中:**固定A,B优先级,且优先级B>A;
先执行B1,B1执行完后已经过了A1的截止时间,可知A1根本就没能执行到。
第四行中:使用最早截止时间优先算法
A1截止时间早于B1截止时间,先执行A1;
A1执行完执行B1,B1执行10ms后A2到达;
A2截止时间早于B1截止时间,先执行A2;
A2执行完执行B1,B1执行10ms后A3到达;
B1截止时间早于A3截止时间,继续执行B3;
在此例中,利用最早截止时间优先算法可以满足系统的要求。
————————————————
此处借鉴文章
原文链接:https://blog.csdn.net/Cap220590/article/details/102762190
最低松弛度优先算法(LLF)
该算法根据任务的紧急程度来确定任务的优先级,越紧急,越优先。
任务的松弛度=必须完成时间-该任务的运行时间-当前时间
在实现该算法时,系统中有一个按松弛度排序的实时任务就绪队列,松弛度最低的任务排在前面
- 周期性任务A,要求每20ms执行一次,执行时间为10ms;
- 周期性任务B,要求每50ms执行一次,执行时间为25ms;
松弛度:
t=20,A2=40-10-20=10,B1=50-15-20=15
t=30,A2=40-10-30=0,B1=50-5-30=15,此时A的松弛度优先,切换到A运行
t=50,A3=60-10-50=0,B2=100-25-50=25
t=60,A4=80-10-60=10,B2=100-20-60=20
t=70,A4=0,B2=20,此时A4松弛度为零,抢占B2的处理机,调度A4执行