CPU调度算法总结

08月20日 收藏 0 评论 6 java开发

CPU调度算法总结

转载声明:文章来源https://blog.csdn.net/u013616945/article/details/69569267

批处理系统中采用的调度算法

重要指标(吞吐量,周转时间,CPU利用率,公平平衡)

非抢占式的先来先服务算法(FCFS):按照进程就绪的先后顺序使用CPU
特点:公平,实现简单,但是长进程后面的短进程需要等待很长时间,不利于用户体验。

非抢占式的最短作业优先(SJF):具有最短完成时间的进程优先执行

最短剩余时间优先(SRTN):SJF抢占式版本,即当一个新就绪的进程比当前运行进程具有更短完成时间时,系统抢占当前进程,选择新就绪的进程执行。

短作业优先调度算法特点:改善短作业的周转时间,但如果源源不断有短任务到来,可能使长的任务长时间得不到运行,产生饥饿现象。

最高相应比优先算法(HRRN):是一个综合算法,调度时,首先计算每个进程的响应比R,之后总是选择R最高的进程执行。

响应比R=(等待时间+处理时间)/处理时间

交互系统中采用的调度算法:

重要指标(响应时间,公平平衡)

时间片轮转调度算法: 每个进程被分配一个时间片,允许该进程在该时间段运行,如果在时间片结束时该进程还在运行,则剥夺CPU并分配给另一个进程,如果该进程在时间片结束前阻塞或结束,则CPU立即进行切换。

当时间片选择太长,其降级为先来先服务算法,引起对短的交互请求响应时间长

当时间片选择太短,会导致频繁的进程切换,浪费CPU时间。

通常选择为20ms~50ms.

对进程表中不同进程的大小差异较大的有利,而对进程都是相同大小的不利。

虚拟轮转法:主要基于时间片轮转法进行改进,解决在CPU调度中对于I/O密集型进程的不友好。其设置了一个辅助队列,对于I/O型进程执行完一个时间片之后,则进入辅助队列,CPU调度时总是先检查辅助队列是否为空,如果不为空总是优先调度辅助队列里的进程,直到为空,才调度就绪队列的进程。
最高优先级调度算法:选择优先级最高的进程优先执行。

优先级可以静态不变,也可以动态调整
优先数决定优先级
就绪队列可以按照优先级组织
实现简单,但不公平,可能导致优先级低的进程产生饥饿现象。
可能产生优先级反转问题(基于优先级的抢占式算法),即一个低优先级进程持有一个高优先级进程所需要的资源,使得高优先级进程等待低优先级进程运行。

多级反馈队列调度算法

设置多个就绪队列,并为各个队列赋予不同的优先级。第一个队列的优先级最高,依次递减优先级。
对于各个队列进程执行时间片的大小也不同,优先级越高的队列,分配到的时间片越少。
当第一级队列为空时,再第二级队列进行调度,依次类推,各级队列按照时间片轮转方式进行调度。
当一个新进程创建后,首先把它放入第一队列的末尾。按照FCFS原则排队等待调度。当轮到该进程执行时,如它在该时间片完成,便可准备撤离系统,如果它在一个时间片结束时尚未完成,则调度程序便将该进程转入第二队列的末尾,再同样地按照FCFS原则等待调度执行。依次类推。

各种调度算法比较:

C 6条回复 评论
Eroica

java感觉有点难,前端咋样,好学么

发表于 2023-11-08 21:00:00
0 0
半糖去冰

收藏不息,战斗不止

发表于 2023-01-10 22:00:00
0 0
轻舟行

把简单题目想复杂了

发表于 2022-06-02 23:00:00
0 0
米线还有吗

在卷的地方,测试要比开发还要开发,又要懂业务又要懂测试,还要懂运维,我都搞不懂现在测试到底是个什么角色了

发表于 2022-02-05 21:00:00
0 0
夏至末日

对我帮助很大,最重要的是帮我认识到自己的不足

发表于 2021-12-06 11:20:00
0 0
柚子上上签

清晰直白,真不戳

发表于 2021-09-13 13:35:00
0 0