进程调度算法
基本知识点介绍
低级调度
Low Level Scheduling
低级调度也称为进程调度和短程调度(ShortTerm Scheduling),调度对象是进程(或内核级进程)。
基本机制
- 排队器。把就绪进程排成一个或几个队列。
- 分派器。从就绪队列中取进程,切换上下文,交由处理机。
- 上下文切换。处理机切换时会发生两对上下文切换:
- 保存当前进程的上下文,装入分派程序的上下文。
- 移除分派程序,把新选进程的CPU线程信息装入到处理机各个寄存器中。
调度方式
非抢占方式
Nonpreemptive
不管运行多长时间都会运行下去,直到自愿交出处理机。
引起进程调度的因素:
- 正常执行完毕,或异常等不能继续运行。
- I/O请求等暂停运行
- 执行了P(), Block(), Wakeup()等原语。
抢占方式
优点: 可以防止进程长时间进行其他进程无法执行,能更公平的为其他进程服务。
运行原则:
- 每个进程分配优先权,允许优先权高的新到进程抢占当前处理级。
- 短作业优先:一个短作业能抢占长作业的处理机优先执行。
- 时间片原则:一个时间片用完就要重新调度。
中级调度
Intermediate Level Scheduling
为了提高内存利用率和系统吞吐量而引入。
将暂时不能利用内存的进程移动到外存中,置为就绪驻外存状态或挂起态,当这些进程又重新具备运行能力时且内存稍有空闲,再把进程调度会内存,修改为就绪态并进入就绪队列等待进一步调度。
五种调度算法
五种算法为FCFS,RR,SPN,SRT,HRRN。以一道例题进行介绍
各个进程的到达时间和服务时间:
Process | ArrivalTime | ServiceTime |
---|---|---|
A | 0 | 3 |
B | 2 | 6 |
C | 4 | 4 |
D | 6 | 5 |
E | 8 | 2 |
五种方式的调度结果为:
FCFS:
先介绍最简单的FCFS即先come(手动变色)先服务,适合长进程,不适合短进程,因为没法让短进程尽快执行而必须等待长进程完成才能执行。适合CPU频繁型,不适合I/O频繁型。下面是运行机制:
- FCFS,字面意思。先来的先执行。
- 当一个进程在当前进程执行时到达,必须要等待当前进程执行完毕资源释放处理机才能执行。
RR:
时间片轮转,分时系统采用的调度算法,本次介绍的是早期使用的简单RR机制。20世纪90年代后多使用feedback。
运行机制:
- 当某个进程到达时,执行顺序是先把这个到达的进程放在就绪队列队尾,然后再把上一个执行的进程放在就绪队列的队尾。
SPN:
对于短服务时间优先,是一种非抢占式的调度机制。由于不是基于时间片并且是非抢占式的,所以调度策略体现在选择下一个要执行的进程的时候(可以理解为SPN-FCFS策略,这五个中只有RR是基于时间片的)。运行机制:
- 顾名思义,服务时间短的先执行。例子中t=3时只有B进程情况故执行B进程;t=9时,C、D、E均到达了,服务时间分别是$ServiceTime_C=4, ServiceTime_D=5,ServiceTime_E=2$,E的服务时间最短,故执行E。t=11同理。
SRN:
SRN,shortest remain-time next,(正规叫法SRT:shortest remain time)是SPN的抢占版本。一个进程到达时需要计算当前所有进程的剩余时间,进而决定接下来执行哪个。运行机制:
- t=4时,C进程到达,计算剩余时间$RemainTime_B=5,RamainTime_C=4$,故先执行C。
- t=8时,E进程到达,剩余时间更短(刚进的进程易知RemainTime即为ServiceTime),故先执行E。E执行结束,再次计算RemainTime,$RemainTime_D=5,RemainTime_B=5$但是由于B是先Come的,所以先执行B再执行D。
HRRN:
最高响应比是基于FCFS和SPN的综合考量。引入变量响应比$R=\frac{WaitTime + ServiceTime}{ServiceTime}$,可以从公式中看出,对于等待时间形同的进程,服务时间短的优先级高;同理,服务时间一致的进程等待时间长的进程优先级高。响应比的考量timing发生在决定下一个要执行的进程时,系统应该遍历就绪队列选出响应比最高的进程执行(非抢占式)。HRRN主要用于作业调度(作业调度是相对于进程调度来说,从外存中调进程进内存等待执行)。执行机制:
- 这里对响应比的计算方式进行变形即$R=1 + \frac{WaitTime}{ServiceTime}$。t=3时,只有B进程,故执行B进程。t=9时,有B、C、D三个进程,分别计算响应比,结果如图。$Rc$在B、C、D中响应比最大,故优先执行。t=13处理方式同理。
补充
周转时间 = 完成时刻 - 到达时刻,意为计算等待时间的总共消耗时间。
带权周转时间 = 周转时间 / 服务时间(ServiceTime),意为每服务时刻的单位周转时间。可以理解为加入ServiceTime作为参考。
可以看出带权周转时间的定义就是响应比。