【操作系统】CPU调度算法

《Modern Operating System》、《Operating Systems:Three easy pieces》阅读笔记

1 作业周转时间【turnaround time】?

周转时间 = 完成时间 − 到达时间

也就是,每个进程从提出要求到完成的时间

2 先来先服务【FCFS】算法?

按照进程就绪的先后顺序来使用CPU

优点:实现简单,公平

缺点:在长进程后面的短进程需要等待很长的时间,不利于用户体验

在这里插入图片描述

三个进程A,B,C同时到达

服务的先后顺序是A->B->C,那么

周转时间的计算为:

A:T = 100 - 0 = 100

B:T = 110 - 0 = 110

C:T = 120 - 0 = 120

则,平均周转时间 = (100 + 110 + 120)/ 3 = 110

3 短作业优先【SJF】算法?

若运行时间可预知,那么运行时间最短的进程优先,非抢占式

优点:最短的平均周转时间

缺点:长进程可能会因为源源不断的短进程而饥饿

在这里插入图片描述

但是我们再来看另外一个例子

A在 t = 0的时候到达,需要100s

而B、C在 t = 10的时候到达,各需要10s的执行时间

在这里插入图片描述

SJF的第一个例子的平均周转时间为50,而这里却上升到了103.33

4 抢占式短作业优先【STCF】算法?

【Shortest Time-to-Completion First 】

也就是最短剩余时间优先,当前就绪队列中剩余时间更短的进程优先调度

在这里插入图片描述

还是同样的例子,我们看到,跟SJF不同的是

在B、C到达的时候,算法会判断所有进程的剩余时间决定谁优先执行

因此,在A执行了10s后,B、C到达,然后CPU调度进程B、C,等待其完成后再完成A剩余的部分

可以看出,这是一个抢占式的算法

5 响应时间【response time】?

响应时间 = 首次执行时间 − 到达时间

响应时间反映了执行的交互性

显然,上述的三个算法在响应时间【response time】和交互性【interactivity】上的表现并不是很好

6 轮转调度【Round Robin】算法?

周期性切换,为每个进程分配一个时间片【time slice】,利用时钟中断来轮换

优点:公平,响应时间快

缺点:进程切换增加系统开销

在这里插入图片描述

我们观察这个例子

在RR算法中,时间片设定为1(每 1s 轮换)

两个算法的响应时间分别为:

RR: 响应时间 = (0 + 1 + 2)/ 3 = 1

SJF:响应时间 = (0 + 5 + 10)/ 3 = 5

关于时间片的大小问题,既不能太小(context switch开销太大),也不能太大(近似于FCFS)

7 最高优先级调度算法?

选择优先级最高的进程运行

通常系统进程优先级高于用户进程

前台进程优先级高于后台进程

操作系统更偏好于IO型进程

优先级可以是静态的,也可以是动态的,比如正在CPU上运行的进程随着运行时间的增加降低优先级,而处于就绪队列的进程随着等待时间的增加而增加优先级

优点:实现简单,灵活度高,各方面表现都不错

缺点:但是不公平,可能优先级低的进程会产生饥饿现象

【注】

对于抢占式的优先级调度,存在优先级反转的问题:即两个进程,优先级高的A,优先级低进程B,共享一段临界资源,B进程先运行,进入前加锁,如果正在临界区时,被A进程挤下去了,然而A进程无法进入临界区无法工作,而B由于无法得到运行时间而释放不了临界区,所以导致两个进程都无法运行

解决方案:设置优先级上限,动态优先级,使用中断禁止

8 多级反馈队列?

结合了优先级时间片轮转

设置多个就绪队列,第一级优先级最高,依次递减

给不同就绪队列的进程分配长度不同的时间片,第一队列时间片最小,随着优先级降低,时间片增大。(这一策略体现了当进程为CPU密集型,如果轮转过快,反而会增加大量的系统消耗,所以对于优先级较低的CPU密集型进程,时间片设置的更大一些,减少轮转)

第一级队列为空时,在第二级队列轮转,以此类推

队列之间按优先级排序

级队列内部按时间片轮转的方式进行调度

新创建的进程,都进入第一级队列

如果进程是用完了CPU时间,被时钟中断,那么进入下一级队列(这体现了操作系统对IO密集型的进程的偏好,IO密集型进程需要更短的时间片以提高响应速度,而对于CPU密集型进程,时间片应该更大一些。所以当进程由于用完了时间片而中断,说明进程是偏向于CPU密集型进程的,应该降级)

如果进程因为阻塞而放弃了CPU,那么它的等待时间发生后,仍然回到这个就绪队列

在这里插入图片描述

9 整合IO?

当一个进程在请求IO的时候,该进程会阻塞直到IO完成

这个时候,正在运行的作业在IO期间并不会去使用CPU,导致了使用效率的降低

在这里插入图片描述

如果我们使用抢占式方式,在IO使用期间

即CPU空闲的时间去执行另一个作业B,可以大大提升系统的使用率

在这里插入图片描述

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

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

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

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值