调度
CPU 调度
1、从就绪队列中挑选一个进程 / 线程作为 CPU 将要运行的下一个进程 / 线程
2、调度策略:OS 要在某个时刻选择哪个进程占用CPU资源,使得计算机效率最高或者满足某些进程的特殊需求
3、调度时机:进程 / 线程的状态改变
4、内核运行调度程序的条件(满足一条即可)
(1)一个进程从运行状态切换到等待状态
(2)一个进程被终结
5、调度程序分为两种方式
(1)不可抢占:调度程序必须等待时间结束,效率不高,比如有一个进程需要等到读写文件整个过程都完成了以后,才会去执行后面的进程
(2)可以抢占:用户无法感知,调度程序在中断被响应后执行,当前的进程从运行切换到就绪,或者一个进程从等待切换到就绪,当前运行的进程可以被换出
调度原则
1、比较调度算法的指标
(1)CPU 利用率:CPU 处于忙状态所占时间的百分比
(2)吞吐量:在单位时间内完成的进程数量
(3)周转时间:一个进程从初始化到结束,包括所有等待时间所花费的时间,等待时间 + 服务时间
(4)等待时间:进程在就绪队列中的总时间
(5)响应时间:从一个请求被提交到产生第一次响应所花费的时间
2、调度算法达到的效果
(1)减少响应时间:及时处理用户的输出并且尽快将输出提供给用户
(2)减少平均响应时间的波动:在交互系统中,可预测性比高差异低平均更重要
(3)增加吞吐量:减少开销(OS 开销,上下文切换),系统资源的高效利用(CPU,IO 设备)
(4)减少等待时间:减少每个进程的等待时间
(5)低延迟调度增加了交互式表现
调度算法
1、先来先服务:First Come First Served(FCFS)
2、短进程优先 / 短作业优先 / 短剩余时间优先:Shortest Process Next(SPN)/ Shortest Job First(SJF)/ Shortest Remaining Time(SRT)
3、最高响应比优先:Highest Response Ratio Next(HRRN)
4、轮循:Round Robin(RR)
5、多级队列:Multilevel Queues(MQ)、多级反馈队列:Multilevel Feedback Queues(MFQ)
6、公平共享调度:Fair Share Scheduling(FSS)
先来先服务算法
1、依据进程进入就绪状态的先后顺序排列,进程进入等待或结束状态时,就绪队列中的下一个进程占用 CPU
2、优点:简单
3、缺点:
(1)平均等待时间波动较大
(2)花费时间少的任务可能排在花费时间长的任务后面,后面的进程会被前面的进程影响
(3)可能导致 I/O 和 CPU 之间的重叠处理,比如 CPU 密集型进程导致 I/O 设备闲置时,I/O密集型进程也在等待
短进程优先 / 短作业优先 / 短剩余时间优先
1、按照预测的完成时间来将任务入队
2、两种实现策略
(1)不抢占:SPN、SJF
(2)抢占:SRT:插入进程的剩余时间比当前进程的剩余时间更小,完成一次抢占,把执行的进程从运行态转化为就绪态,让插入进程占据 CPU 执行
3、优点:根据最短进程优先算法得到的平均周转时间,具有最优平均周转时间
4、缺点
(1)可能会导致饥饿:不能保证每个进程都有一定的机会去占用 CPU 执行,连续的短任务流会使长任务流饥饿,短任务可用时的任何长任务的CPU时间都会增加平均等待时间
(2)需要预知未来:开始执行一个进程的时候,不能预先知道进程的运行时间,无法根据时间长短排序
5、预知未来的解决方法:观察它执行的历史,通过历史情况预估下一时刻的可能时间
最高响应比优先调度算法
1、考虑等待时间,同时考虑执行时间,通过等待时间和执行时间计算响应比 R,选择就绪队列中响应比 R 值最高的进程
2、公式
(1)R = (w + s) / s
(2)w:等待时间,waiting time
(3)s:执行时间,service time
3、特点
(1)SPN 的改进
(2)不可抢占
(3)防止无限期推退
(4)仍然需要历史的执行时间预估未来的执行时间
时间片轮询算法
1、让各进程轮流占用时间片来执行,在时间切片(时间量子)的离散单元中分配处理器,当时间片结束时,切换到下一个准备好的进程
2、特点
(1)花销:因为比较频繁地切换,就多出了额外的上下文切换开销
(2)时间切片太大:等待时间过长,在极限情况下会退化成 FCFS
(3)时间切片太小:反应迅速,但是吞吐量由于大量的上下文切换开销受到影响
多级队列调度算法
1、就绪队列按优先程度被划分成独立的队列:比如说前台注重交互,开销小且需要及时响应,所以优先级比较高;后台完成批处理工作,优先级比较低
2、每个队列拥有自己的调度策略:比如说前台使用 RR,后台使用 FCFS
3、调度必须在队列间进行
(1)固定优先级:先处理前台,然后处理后台,可能导致饥饿
(2)时间切片:每个队列都得到一个确定的,能够调度其进程的 CPU 总时间
多级反馈队列调度算法
1、一个进程可以在不同的队列中移动
2、优点
(1)CPU 密集型任务的优先级下降很快
(2)I/O 密集型任务停留在高优先级
3、时间片大小随着优先级级别增加而增加,如果任务在当前的时间片中没有完成,则降到下一个优先级
4、如果进程此段工作是 I/O 密集型,提高优先级,在等待的数据到达后高优先级队列先处理返回响应;如果进程此段工作是 CPU 密集型,降低优先级,放在优先级高进程执行完后,或者等待时间再执行
公平共享调度算法
1、目的:在用户级别做到公平的调用,控制用户对系统资源的访问
2、一些用户组比其他用户组更重要
3、保证不重要的组无法垄断资源
4、未使用的资源按照每个组所分配的资源的比例来分配
5、没有达到资源使用率目标的组获得更高的优先级
实时调度
1、定义:正确性依赖于其时间和功能两方面的一种操作系统
2、性能指标
(1)时间约束的及时性
(2)速度和平均性能相对不重要
3、主要特性:时间约束的可预测性
4、实时系统
(1)强实时系统:需要在保证的时间内完成重要的任务,必须完成
(2)弱实时系统:要求重要的进程的优先级更高,尽量完成,并非必须
5、时限:
(1)表示一个实时系统在期限内,是否能够满足要求
(2)硬时限:如果错过了最后期限,可能会发生灾难性或非常严重的后果,必须在最坏的情况下也能够满足时限
(3)软时限:理想情况下,时限应该被最大满足,如果时限没有被满足,那么就相应地降低要求
(4)决定实时任务执行的顺序:静态优先级调度、动态优先级调度
实时调度算法
1. 速率单调调度(RM:Rate Monotonic)
(1)最佳静态优先级调度
(2)通过周期安排优先级,周期越短优先级越高,执行周期最短的任务
2. 最早期限调度(EDF:Earliest Deadline First)
(1)最佳的动态优先级调度
(2)Deadline 越早,优先级越高,执行 Deadline 最早的任务
多处理器调度
1、特征
(1)多个相同的单处理器组成一个多处理器
(2)优点:负载共享
2、对称多处理器调度
(1)每个处理器运行自己的调度程序
(2)需要在调度程序中同步
(3)静态进程分配
进程从开始到结束都被分配到一个固定的处理机上执行
每个处理机有自己的就绪队列
调度开销小
各处理机可能忙闲不均
(4)动态进程分配
进程在执行中可分配到任意空闲处理机执行
所有处理机共享一个公共的就绪队列
调度开销大
各处理机的负载是均衡的
优先级反转
1、调度算法产生的错误,高优先级进程长时间等待低优先级进程占用资源的现象
2、可以发生在任何基于优先级的可抢占调度机制中,系统内的环境强制使高优先级任务等待低优先级任务
3、例:优先级:T1 > T3 > T2,T2 执行,T1 抢占,T2 未释放共享资源,T1 进入等待状态,T2 继续执行,T3 抢占,此时优先级最高的 T1,要等 T3 执行完,以及 T2 释放资源后,才有机会继续执行
4、解决
(1)方案 1:低优先级进程继承了高优先级进程,使得中优先级进程无法抢占高优先级进程,如例中的 T2 优先级最低,由于它占用与 T1 共享资源,把它的优先级提升到和 T1 ,此时 T3 不能抢占 T2
(2)方案2:优先级天花板协议
(3)占用资源进程的优先级,和所有可能申请该资源的进程的最高优先级相同,不管是否发生等待,都提升占用资源进程的优先级
(4)除非优先级高于系统中所有被锁定的资源的优先级上限,否则任务尝试执行临界区的时候会被阻塞
(5)持有最高优先级上限信号量锁的任务,会继承被该锁所阻塞的任务的优先级
【推荐】编程新体验,更懂你的AI,立即体验豆包MarsCode编程助手
【推荐】凌霞软件回馈社区,博客园 & 1Panel & Halo 联合会员上线
【推荐】抖音旗下AI助手豆包,你的智能百科全书,全免费不限次数
【推荐】博客园社区专享云产品让利特惠,阿里云新客6.5折上折
【推荐】轻量又高性能的 SSH 工具 IShell:AI 加持,快人一步
· 微软正式发布.NET 10 Preview 1:开启下一代开发框架新篇章
· 没有源码,如何修改代码逻辑?
· PowerShell开发游戏 · 打蜜蜂
· 在鹅厂做java开发是什么体验
· WPF到Web的无缝过渡:英雄联盟客户端的OpenSilver迁移实战