深圳高端网站建设美工,wordpress 探针,一天赚30000的偏门,重庆颐众达网站为什么需要调度
进程调度的概念比较简单#xff0c;我们假设在一个单核处理器的系统中#xff0c;同一时刻只有一个进程可以拥有处理器资源#xff0c;那么其他的进程只能在就绪队列中等待#xff0c;等到处理器空闲之后才有计划获得处理器资源来运行。在这种场景下#…为什么需要调度
进程调度的概念比较简单我们假设在一个单核处理器的系统中同一时刻只有一个进程可以拥有处理器资源那么其他的进程只能在就绪队列中等待等到处理器空闲之后才有计划获得处理器资源来运行。在这种场景下操作系统就需要从众多的就绪进程中选择一个最合适的进程来运行这个就是调度器需要做的事情。
作为一个通用的操作系统需要兼顾各种类型的进程包括交互式进程、批处理进程、实时进程等。其特征如下
交互式进程 与人机交互的进程例如鼠标、键盘、触摸屏等相关的应用这类进程的特点是系统响应时间越短越好否则用户就会抱怨系统卡顿
批处理进程 此类进程默默运行可能会占用比较多的系统资源对响应时间没有确定的要求
实时进程 有些应用对整体时延有严格的要求如VR设备从头部转动到画面显示的间隔时间有明确的要求否则人的体验不是太好同时例如工业控制系统不符合时延可能会导致严重的事故。
我们以生活中为例来看看调度器对我们实际生活的影响以我们手机上的一个场景为例
如我们手机上运行一个机器学习的程序大约CPU需要运行30分钟我们也需要播放音乐如果没有调度器 对于手机上运行的学习进程和播放进程学习进程属于批处理进程而播放音乐属于实时进程如果整体播放延时比较大就会出现卡顿的情况用户体验就会很差。如果没有调度器对于用户就需要30分钟才能播放音乐那么它可能等不到30分钟就会抛弃这个手机。 调度器“任性化”将程序切片执行对于用户就可以边听音乐边等待他的程序运行完能够完美地实现二者的兼容。
资料直通车最新Linux内核源码资料文档视频资料
内核学习地址Linux内核源码/内存调优/文件系统/进程管理/设备驱动/网络协议栈
如何设计一个调度器
2.1 什么是调度器
通常来说操作系统是应用程序和可用资源直接的媒体CPU是一个重要的资源调度器可以临时分配一个任务在CPU上执行。为了使各个进程间可以公平共享CPU时间而同时又要考虑不同的任务优先级所以就需要一个调度器来保证以下功能
有效的分配CPU时间片根据用户的目标来提供一个很好的用户体验
当面对一些互相冲突的目标的时候提供一个最优化的调度算法例如既要为关键实时任务最小响应时间又要最大限度的提高CPU的总体利用率
2. 2 进程分类
如果站在CPU的角度来看进程有些进程一直占用处理器有些进程只需要一部分处理器资源即可。所以进程按照这个特性可以分为两类
CPU消耗型
CPU消耗型的进程会把大部分的时间用在运行代码上并且会一直占用CPU。一个常见的例子就是while循环的运行如运行大量计算的程序等。IO消耗性
IO消耗性的进程会把大部分的时间用在提交I/O请求或等待I/O请求所以这类的进程通常只需要很少的处理器计算资源即可如需要键盘的输入进程或等待网路I/O的进程。
2.3 调度器目标
知道了进程的分类那就可以知道哪些场景需要调度来协调如IO消耗性的例如磁盘打印机网络等场景。调度在不同场景下的目标有
高吞吐量 最大系统利用率(高吞吐量)对于一些批处理系统中需要考虑低响应时间 此类进程经常与用户进行交互, 因此需要花费很多时间等待键盘和鼠标操作. 当接受了用户的输入后, 进程必须很快被唤醒, 否则用户会感觉系统反应迟钝主要用于一些交互式系统需要重点考虑低功耗 对于目前的移动设备如何设计一个更优的调度算法来保证系统的低功耗也需要重点考虑实时性 这些进程由很强的调度需要, 这样的进程绝不会被低优先级的进程阻塞. 并且他们的响应时间要尽可能的短为了达到一些共有的目标要达到系统资源的高利用率多任务公平性低调度开销所以需要设计调度器基于以下的场景进行考虑降低周转时间 任务第一次进入系统到执行结束的时间使批处理用户等待输出的时间尽可能短降低响应时间 任务第一次进入系统到第一次给用户输出时间使交互用户的响应时间尽可能短实时性 在任务的截止时间内要完成任务公平性 每个任务都应该有机会执行不能饿死保证每个进程得到合理的CPU时间开销低 调度器是为了优化系统而非制造性能Bug可扩展性 随着任务数量不断增加仍然能正常工作吞吐量 使单位时间内处理的进程数量尽可能多
2.4 调度策略
确定如何从就绪队列中选择下一个执行的进程进入调度需要解决以下问题
如何挑选就绪队列中的哪一个进程通过什么样的调度准则来选择
2.5 如何设计好的调度算法
调度算法的要求希望得到**“更快”**服务那么如何定义什么是更快呢根据调度器的目标其可以重点关注
高吞吐量传输文件时的高带宽低响应延时玩游戏时的低延迟
调度器的响应目标考虑
减小响应时间及时处理用户的输入请求尽快将输出反馈给用户减小平均响应的时间波动在交互系统中可预测性比高差异低平均更重要低延迟调度改善了用户的交互体验如果移动鼠标时屏幕中的光标没动那么客户会如何做呢会不会重启
处理器调度吞吐 量目标考虑
增加吞吐量减小开销主要是上下文切换的开销系统资源的高利用(CPU /IO设备)减小等待时间减小每个进程的等待时间
处理器公平的定义
保证每个进程占用相同的CPU时间保证每个进程的等待时间相同
3 调度算法
3.1 先来先服务算法(First Come First Served, FCFS)
每次从就绪队列选择最先进入队列的进程然后一直运行直到进程退出或被阻塞才会继续从队列中选择第一个进程接着运行。依据进程进入就绪队列的先后顺序排列进程进入等待或者结束状态时就绪队列中的下一个进程占用CPU3个进程计算时间分别为1233FCFS算法的周转时间根据任务到达的顺序不同周转时间不同 结合大家学习中遇到的实际例子我们来学习下整个过程例如该过程中调度器是我们生活中遇到的学霸而此时有3个同学想学霸请教问题其思路如下 该问题对于C同学来说有一个很大的问题是我的问题很简单却需要等那么长的时间。
3.2 短进程优先算法(SPN)
它会优先选择运行时间最短的进程来运行这有助于提高系统的吞吐量。选择就绪队列中执行时间最短进程占用CPU进入运行状态就绪队列按预期的执行时间来排序 进程的平均周转时间为 还是基于刚才学霸解决问题的实例来看看这个算法的执行顺序首先A同学先执行当执行到2后同学B和C都来寻求学霸解决问题但是此时A占用了学霸所以当A解决完问题后发现同学C问题简单所以就优先解决C的问题 3.3 时间片轮转算法(RR, Round-Robin)
每个进程被分配一个时间段称为时间片*Quantum*即允许该进程在该时间段中运行。 如果时间片用完进程还在运行那么将会把此进程从 CPU 释放出来并把 CPU 分配另外一个进程如果该进程在时间片结束前阻塞或结束则 CPU 立即进行切换通过时间片分配处理器资源的基本单元当时间片结束后按FCFS算法切换到下一个就绪进程我们还是以刚才例子为例此时为 时间片太长
等待时间过长极限情况下退化成FCFS
时间片太短
反应迅速但产生大量的上下文切换大量上下文切换开销会影响系统的吞吐量
时间片长度选择目标
选择一个合适的时间片长度经验规律维持上下文切换开销处于1%以内
3.4 调度优先级
对于操作系统中的任务是不同的例如系统进程和用户进程、前台进程和后台进程如果不加以区分那么系统中关键的任务无法及时处理后台运算导致视频播放卡顿所以基于此重要的任务需要被优先调度就产生了优先级的概念。
3.4.1 多队列调度算法(MQ)
对于该调度算法就绪队列被划分成多个独立的子队列如前台(交互)、后台(批处理)每个队列拥有自己的调度策略如前台-RR后台-FCFS队列间的调度
固定优先级先处理前台后处理后台可能导致饥饿时间片轮转每个队列读的到一个确定的能够调度器进程的总时间如80%CPU时间用于前台20%CPU时间用于后台还是以学霸解决问题为例基于此的算法为 所以该算法特征为
维护多个优先级队列高优先级的任务优先执行同优先级内使用Round Robin调度
3.4.2 公平共享调度(FSS Fair Share Scheduling)
公平共享调度控制用户对系统资源的访问
一些用户组比其他用户组更重要
保证不重要的组无法垄断资源未使用的资源按比例分配没有达到资源使用率目标的组获得更高的优先级