调度

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)持有最高优先级上限信号量锁的任务,会继承被该锁所阻塞的任务的优先级

posted @   半条咸鱼  阅读(309)  评论(0编辑  收藏  举报
(评论功能已被禁用)
相关博文:
阅读排行:
· 微软正式发布.NET 10 Preview 1:开启下一代开发框架新篇章
· 没有源码,如何修改代码逻辑?
· PowerShell开发游戏 · 打蜜蜂
· 在鹅厂做java开发是什么体验
· WPF到Web的无缝过渡:英雄联盟客户端的OpenSilver迁移实战
点击右上角即可分享
微信分享提示