CPU任务调度原理

OS是一个非常庞大的软件系统,本文主要探索其中的冰山一角:CPU的调度原理。

在探索CPU调度原理之前,我们先了解一下CPU的上下文切换,它是CPU调度的基础。

OS在切换运行任务时,将上一任务的上下文保存下来,并将即将运行的任务的上下文加载到CPU寄存器上的这一动作,被称为CPU上下文切换。

CPU上下文属于进程上下文的一部分,我们常说的进程上下文由如下两部分组成:

这涉及到两个问题:(1)上一任务的CPU上下文如何保存下来?(2)什么时候执行上下文切换?

问题1:上一任务的CPU上下文如何保存下来?

CPU上下文会被保存在进程的内核空间(kernelspace)上。OS在给每个进程分配虚拟内存空间时,会分配一个内核空间,这部分内存只能由内核代码访问。OS在切换CPU上下文前,会先将当前CPU的通用寄存器、PC等进程现场信息保存在进程的内核空间上,待下次切换时,再取出重新装载到CPU上,以恢复任务的运行。

问题2:什么时候执行上下文切换?

协作式策略依赖用户程序主动让出CPU,比如执行系统调用(SystemCall)或者出现除零等异常。但该策略并不靠谱,如果用户程序没有主动让出CPU,甚至是恶意死循环,那么该程序将会一直占用CPU,唯一的恢复手段就是重启系统了。

抢占式策略则依赖硬件的定时中断机制(TimerInterrupt),OS会在初始化时向硬件注册中断处理回调(InterruptHandler)。当硬件产生中断时,硬件会将CPU的处理权交给来OS,OS就可以在中断回调上实现CPU上下文的切换。

对于一种CPU调度算法的好坏,一般都通过如下两个指标来进行衡量:

OS上的工作负载(也即各类任务运行的状况)总是千变万化的,为了更好的理解各类CPU调度算法原理,我们先对工作负载进行来如下几种假设:

准备工作已经做好,下面我们开始进入CPU调度算法的奇妙世界。

FIFO(FirstInFirstOut,先进先出)调度算法以原理简单,容易实现著称,它先调度首先到达的任务直至结束,然后再调度下一个任务,以此类推。如果有多个任务同时到达,则随机选一个。

在我们假设的工作负载状况下,FIFO效率良好。比如有A、B、C三个任务满足上述所有负载假设,每个任务运行时长为10s,在t=0时刻到达,那么任务调度情况是这样的:

让我们继续打破假设2,A在t=0时刻,B和C则在t=10时刻到达,那么调度情况会变成这样:

为了解决SJF的任务饿死问题,我们需要打破假设3,也即任务在运行过程中是允许被打断的。如果B和C在到达时就立即被调度,问题就解决了。这属于抢占式调度,原理就是CPU上下文切换一节提到的,在中断定时器到达之后,OS完成任务A和B的上下文切换。

更糟糕的是,随着任务运行时长的增长,平均响应时长也随之增长,这对于交互类任务来说将会是灾难性的,严重影响用户体验。该问题的根源在于,当任务都同时到达且运行时长相同时,最后一个任务必须等待其他任务全部完成之后才开始调度。

CPU上下文切换的消耗,不只是保存和恢复寄存器所带来的消耗。程序在运行过程中,会逐渐在CPU各级缓存、TLB、分支预测器等硬件上建立属于自己的缓存数据。当任务被切换后,就意味着又得重来一遍缓存预热,这会带来巨大的消耗。

到目前为止,我们并未考虑任何的I/O操作。我们知道,当触发I/O操作时,进程并不会占用CPU,而是阻塞等待I/O操作的完成。现在让我们打破假设4,考虑任务A和B都在t=0时刻到达,运行时长都是50ms,但A每隔10ms执行一次阻塞10ms的I/O操作,而B没有I/O。

如果使用STCF进行调度,调度的情况是这样的:

从上图看出,任务A和B的调度总时长达到了140ms,比实际A和B运行时长总和100ms要大。而且A阻塞在I/O操作期间,调度器并没有切换到B,导致了CPU的空转!

接下来,我们将介绍一个能够在所有工作负载假设被打破的情况下依然表现良好,被许多现代操作系统采用的CPU调度算法,MLFQ。

MLFQ(Multi-LevelFeedbackQueue,多级反馈队列)调度算法的目标如下:

那么对MLFQ来说,就需要解决如下两个问题:

MLFQ与前文介绍的几种调度算法最显著的特点就是新增了优先级队列存放不同优先级的任务,并定下了如下两个规则:

规则3主要考虑到让新加入的任务都能得到调度机会,避免出现任务饿死的问题

按照上述规则,当一个long-running任务A到达时,调度情况是这样的:

如果在任务A运行到t=100时,short-time任务B到达,调度情况是这样的:

如果任务A运行到t=100时,交互类任务C到达,那么调度情况是这样的:

考虑如下场景,任务A运行到t=100时,交互类任务C和D同时到达,那么调度情况会是这样的:

由此可见,如果当前系统上存在很多交互类任务时,CPU密集型任务将会存在饿死的可能!

为了解决该问题,可以设立了如下规则:

加上该规则之后,假设设置S为50ms,那么调度情况是这样的,饿死问题得到解决!

为了解决该问题,我们需要将规则4调整为如下规则:

应用新的规则4后,相同的工作负载,调度情况变成了如下所述,不再出现恶意任务E占用大量CPU的问题。

到目前为止,MLFQ的基本原理已经介绍完,最后,我们总结下MLFQ最关键的5项规则:

现在,再回到本节开始时提出的两个问题:

2、MLFQ如何从历史调度中学习,以便未来做出更好的决策?

MLFQ主要根据任务是否有主动让出CPU的行为来判断其是否是交互类任务,如果是,则维持在当前的优先级,保证该任务的调度优先权,提升交互类任务的响应性。

可以给任务分配权重,让权重高的任务更多的CPU!

还是前面的例子,假设A和B都没有I/O操作,更新vruntime计算规则后,调度情况如下,任务B比任务A能够分得更多的CPU了。

为了兼顾查询、插入、删除的效率,CFS使用红黑树来保存任务和vruntime信息,这样,查询、插入、删除操作的复杂度变成了log(N),并不会随着任务数的增多而线性增长,极大提升了效率。

另外,为了提升存储效率,CFS在红黑树中只保存了处于Running状态的任务的信息。

为了解决该问题,CFS规定当任务从休眠或I/O中返回时,该任务的vruntime会被设置为当前红黑树中的最小vruntime值。上述例子,B从休眠中醒来后,vruntime_{B}vruntimeB会被设置为11,因此也就不会饿死任务A了。

本文中描述的调度算法都是基于单核处理器进行分析的,而多核处理器上的调度算法要比这复杂很多,比如需要考虑处理器之间共享数据同步、缓存亲和性等,但本质原理依然离不开本文所描述的几种基础调度算法。

THE END
1.服务器配置的带宽高低会影响哪些方面?在现代互联网环境中,服务器的带宽配置是影响系统性能和用户体验的重要因素之一。带宽决定了数据传输的速度和效率,直接影响到服务器的响应时间、数据传输质量以及用户的访问体验。那么,服务器配置的带宽高低具体会影响哪些方面? 1、响应时间:服务器的带宽直接影响到数据传输的响应时间。高带宽可以加快数据的传输速度,减少用https://www.kkidc.com/market/10764.html
2.看文件刷新率越高越好吗1. 对于CRT显示器,高刷新率可以减少画面闪烁,降低眼睛疲劳。但是,对于液晶显示器,刷新率对画质的影响较小,过高的刷新率反而可能影响其使用寿命。 2. 高刷新率会加速CRT显像管的老化,因此建议不要让显示器一直以最高刷新率工作。 3. 对于手机屏幕,高刷新率需要与软件高度适配,包括系统切换动画、屏幕响应优先级、屏https://www.tayang100.com/post/v2o4o357m.html
3.释放性能潜力:深入了解性能调优的艺术和科学(性能释放低会有什么在竞争激烈的数字世界中,性能就是一切。一个缓慢的应用程序或网站会疏远用户、降低参与度并损害业务。 性能调优的艺术和科学可以帮助您释放应用程序和网站的全部性能潜力。通过优化代码、数据库和服务器配置,您可以显着提高响应时间、减少负载并增强用户体验。 https://www.ulidc.com/2024/12/16/%E9%87%8A%E6%94%BE%E6%80%A7%E8%83%BD%E6%BD%9C%E5%8A%9B%EF%BC%9A%E6%B7%B1%E5%85%A5%E4%BA%86%E8%A7%A3%E6%80%A7%E8%83%BD%E8%B0%83%E4%BC%98%E7%9A%84%E8%89%BA%E6%9C%AF%E5%92%8C%E7%A7%91%E5%AD%A6-%E6%80%A7/
4.检测仪表知识19.在分度号S.K.E三种热电偶中,适用于氧化和中性气氛中测温的是(S和K)型热电偶;允许误差最小,测量精度最高的是(S)型热电偶;热电势最大,灵敏度最高的是(E)型热电偶,价格最便宜的是(E)型热电偶;价格最贵的是(S)型热电偶. 20.判断对错并说明原因: https://www.eepw.com.cn/article/201701/336033.htm
5.如何选购好用的曲面屏显示器十大曲面屏显示器排行榜显示器曲面显示器的尺寸和分辨率应该根据使用需求来选择。一般来说,大尺寸的曲面显示器适合用于游戏、影音娱乐等需要更广阔视野的场景,而小尺寸的曲面显示器则适合用于办公、设计等需要更高分辨率的场景。 3.3 曲面显示器的响应时间和刷新率有什么要求? 曲面显示器的响应时间和刷新率应该尽可能高,以保证画面流畅度和稳定性。https://www.jb51.net/hardware/xianshiqi/878898.html
6.清华大学ucore操作系统课笔记XiiX程序运行公平性更好,提高短作业的速度 分时系统中会将处理器的时间分成短的时间片,定时会切换不同的程序执行。这与多道批处理系统有本质上的区别。 分时系统是实现人机交互的系统。 个人电脑操作系统 个人计算机:每个用户一个系统 单用户 利用率不再是关注点 https://www.cnblogs.com/XiiX/p/15995617.html
7.北京科技大学信息化建设与管理办公室响应时间: 1m、5ms、12ms 色域:100%SRGB、75%NTSC 色深:8bit、10bit 色准:ΔE/JNCD(显示和真实差距) 屏幕亮度和对比度HDR TN、VA、IPS面板那种更好? 二、显示器的进阶知识 G-Sync、Free-Sync 干啥用的? VGA、DVI、HDMI、DP、Type-c 显示器如何才不伤眼睛? https://info.ustb.edu.cn/ITxy/APIml/35a819e90429420c8e7d22e08a803b3b.htm
8.ICPAES使用问题解答五十六、什么是背景等效浓度BEC,数值是大好还是小好? 背景等效浓度,即背景强度相当与多大浓度产生的强度,当然小了好啊 五十七、测量方式中BkGr dynamic 这种方式何时要用到?我查了一下是动态背景,一般在什么情况下要用这种测量方式。 动态背景在选用固定位置扣背景有干扰时使用. https://www.macylab.com/index.php?c=article&id=869
9.该如何选购行车记录仪?表现最好的是极路客T1,在LV20的时候都没有出现过曝的现象。但是这里不得不提一下飞利浦ADR800,其最高辉度值只到235(理论上应为255),不知道是黑科技还是无厘头,永远不会过曝,但也无法分辨亮部细节,硬生生的砍掉了一部分亮部细节。1.2场景切换响应时间据统计,有为数不少的车祸发生在高速路隧道进出口,主要是https://www.yoojia.com/ask/17-12117037663480580043.html
10.数据库精选60道高频面试题(含答案),值得收藏数据库常见面试题数据更新的开销比较小。 支持复杂查询(带 where 子句的查询) 非关系型数据库(NOSQL)的优点 无需经过 SQL 层的解析,读写效率高。 基于键值对,读写性能很高,易于扩展 可以支持多种类型数据的存储,如图片,文档等等。 扩展(可分为内存性数据库以及文档型数据库,比如Redis,MongoDB,HBase 等,适合场景:数据量大高可https://blog.csdn.net/qq_46494427/article/details/124154077
11.客户关系管理的论文(精选13篇)同时客户也可以利用客户关系管理系统来反应自身的产品需求,企业管理人员结合这些信息及时调整产品生产方案,从而更好的适应社会化生产。采用客户关系管理系统进行交易,能够最大限度降低交易成本,这样不仅有利于促进企业的生产,同时也可以减少客户的费用。除此之外,客户关系系统的运用,可以缩短交易时间,提高交易效率,为企业与https://mip.ruiwen.com/lunwen/1127667.html
12.售后服务承诺书(精选19篇)五、服务响应时间: 1、接到客户通知后1天内由销售人员安排售后服务人员前往客户处解决问题; 2、对于细小问题,在客户通知后的2天内负责解决好,专人将服装送交客户手中; 3、正常情况:修改服装在10天内返修完毕,送交客户手中; 六、保修期后服装价格承诺 https://www.yjbys.com/chengnuoshu/4343118.html
13.折叠屏大屏Android真的好用吗?用过之后,他们这么说……这些将 Android 放在大屏的设备,用起来究竟怎么样? 从首发前集体「翻车」到国产厂商先后入局,Android 折叠屏设备在过去三年时间里已经成功从概念产品走向了消费市场;而同样追求大屏体验与多任务效率的 Android 平板,也在 Google 亲力亲为的号召之下再次焕发出一丝生机。 https://36kr.com/p/1996699253633795
14.股票前十大股东占比多好还是少好股票前十大股东占比多好还是少好:1、机构的持股多少,有个延迟性,通常能够看到持股情况的时间是在报表公布的时候,所以要根据盘面股价走势、成交量的情况进行判断,避免误判2、总的来说,前十大股东的持股越少,https://m.66law.cn/question/answer/28720541.html