iOS知识拓展

操作系统学习(三) —— CPU调度

2017-07-11  本文已影响3247人  曲谐_

第三部分 CPU调度

一、相关基本概念

注意前面的知识

二、CPU调度器

CPU调度器的使命

CPU调度器的操作对象.png

由上图我们可以看见,通过CPU 调度器,计算机进程(PCB)有四个去向:
1)留在就绪队列
2)进入CPU
3)等待队列
4)I/O操作

CPU调度器的操作时机

调用CPU调度器的时机,通常发生在:
1)某一进程从执行状态转为等待状态
2)某一进程从执行状态转为就绪状态(图上应为双向箭头)
如果有一个进程进入就绪队列,且进程优先级高,则有可能该优先级高的进程把原先执行队列里的进程抢过来
3)某一进程从等待状态转为就绪状态
如I/O操作完成以后,转回ready queue
4)某一进程终止
进程上下文切换
等等,不限于以上四种,只是举了四个例子(引发调度的时机可能有十几种)。
1,4属于“非抢占式(nonpreemptive)调度”,2,3属于“抢占式(preemptive)调度”。

非抢占式:

进程自愿交出CPU,引起新一轮的调度。

抢占式:

进程被迫交出CPU,引起新一轮的调度。

解释一下第三种情形
本身等待到就绪状态是不需要CPU调度的,由图可知,做完I/O操作,进入ready queue即可。但现在如果有重要或紧迫的进程到达,那么当前进程必须为就绪状态。则强行将CPU调度从等待状态转为就绪状态,并且强行放弃处理现在的运行进程,将CPU立即分配给新到达的进程。故它是一种抢占式调度。

CPU调度器追求目标

优异的指标,当然是

三、CPU分配器(Dispatcher)

CPU调度器决定了将CPU分配给谁。后续操作就是,CPU分配器将CPU控制权移交给该进程
操作内容通常包括:

注意,分配器的工作是有延迟的,这种属于“无用功”,也就是处理时的额外开销。

四、FCFS调度算法(First-Come,First-Served Scheduling)

FCFS调度算法处理进程.png

假设进程到达就绪队列的顺序:P2,P3,P1,则FCFS调度算法的调度结果有显著变化,如甘特图:

P2,P3,P1顺序的等待时间甘特图.png

启示:短进程先于长进程,减少等待时间。
问题:时间波动很大,不稳定。

五、Shortest-Job-First(SJF)调度算法(最短作业优先算法)

算法要求:

算法思想:

举例:非抢占式SJF

非抢占式SJF.png

平均等待时间为
(0+(7-4)+(8-2)+(12-5))/4 = 4
(上面我们都假设CPU利用率为100%)

结论:由等待时间可知,SJF优于FCFS。

举例:抢占式SJF算法

抢占式SJF算法.png

平均等待时间 = (9+1+0+2)/4 = 3。
平均等待时间算法可以由(周转时间-Burst time)得出。
具体写下来就是:
((16-7)+(5-4)+(1-1)+(6-4))=3,即(周转时间-Burst time)。

SJF算法的缺点

六、优先权法(Priority Scheduling)

具体要求:

优先权算法的一个缺陷:

七、轮转法(Round Robin,RR)

轮转法是交互式操作系统必要的条件。(先了解相关名词)

具体步骤:

举例:RR算法,时间片设定为20个单位

RR算法实例.png

轮转法的问题
当时间片到了以后,一个进程要交出CPU。如果交给其他进程,则要做一次进程上下文切换。

时间片与上下文切换时间的关系.png

由图进行性能分析

周转时间受时间片的影响

周转时间受时间片的影响举例.png

轮转法还有一个好处,就是他的响应时间一定优于前面的SJF。因为时间片的存在。

八、多层队列(Multilevel Queue)

前面我们将就绪队列看成一个队列。但是队列里进程诉求是不一样的,有的进程是大块进程运算,不要求马上响应,只需要做完即可。而有的Burst Cycle非常短,但需要响应后立马做完(例如按钮)。因此这些进程如果放入一个队列,将非常不合理。

例如:

多层队列调度实例:

多层队列调度实例.png
按优先级分别为:
设计多层队列:

九、多层反馈队列(Multilevel Feedback Queue)
基本上类似于多层队列算法,另外考虑了进程可以在就绪队列之间迁移

多层反馈队列实例

多层反馈队列实例.png
设计多层反馈队列

如果算法设计OK,那么整体队列效率高,overhead就会降低。

实时调度

分为两点

调度算法这两点表明:
1)硬实时要求在某一时间点前必须做完,要求比较苛刻。
2)软实时要求会把关键任务尽可能提前做,但做不做完无法保证。

调度算法评估

设定指标,指标完成好,则算法优秀。

仿真
仿真模型.png

那么综上,CPU调度的内容就差不多结束了,接下来将要学习的会是线程的知识了。

上一篇 下一篇

猜你喜欢

热点阅读