操作系统:系统调度中的实时调度

实时调度研讨报告 第四组

20120902

20120889

第一部分 实时/非实时调度比较分析

实时任务的实际需求——实时调度为何而生?

考虑以下情况:

\1. 飞行中的航天飞机由于受到空气动力影响,会使飞行姿态呈现不稳定,因此需要制导计算机对扰流板每秒钟调整数百次。

\2. 科学卫星会以极高的速度进行数据的收集解析存储,若这个过程太慢,则下一条数据就会不可挽回地遗失。

\3. 更为普遍的情况是音视频的处理,必须以一定速率输出音频,视频的画面帧也必须频繁更新,否则就会导致用户体验下降,甚至是信息丢失。

不难发现,以上的场景都有一个共同点,那就是任务请求有一个不能错过的截止时间点,我们不希望它产生任何延误。因此我们称之为实时任务

显然,实时任务与非实时任务有着非常不一样的需求,因此我们有了实时调度机制来对其进行合理,安全的调度。

当我们谈起实时任务截止时间的需求时,有一点要明确,即实时任务又分为软实时和硬实时。

对于硬实时来说,譬如我们刚才的航天飞机例子,一旦任务错过截止时间还没有完成,那么就会带来不可挽回的灾难性后果。

而对于软实时,我们当然还是不希望它发生延误,因为对于一个实时任务来说这意味着它的任务价值将会下降,但倘若它真的错过了截止时间,发生的后果也并不是无法承担。

这两者并没有一个明确量化的分类标准,需要根据具体的任务场景进行判断。

实时调度的过载问题

过载一词在不同领域,不同语义范围下有不同的意思,对于实时调度而言,所谓过载就是当前的所有任务,无论如何调度都无法完全在截止期内完成。

之所以会出现这样的情况,是因为和普通调度不同,实时调度不仅关心任务的正确执行,还要关心在截止时间前完成。然而用户的需求变化,外界环境变化等原因无时无刻不在使动态任务系统的负载发生变化,系统的负载有上限,真实世界的需求与变化却难以预估,这也就引起系统过载的可能。

显然,判断是否过载是一个很重要的问题,对于周期性任务来说,这是好办的,我们可以利用周期规律计算其处理机使用率,如果这个值大过1,说明一个周期内的任务执行需求时间比这个周期本身还要长,这不可能做到。

但对于非周期性任务来说,其到来的时间不可预测,就需要使用其他方法判断。具体可以使用下面的公式。

image-20221110201839627

其中x是当前任务剩余执行时间,Sk为从1号任务到k号任务的剩余执行时间之和,Dk为从1号任务到k号任务的剩余截止时间之和,n为任务总量,Δ表示作业切换时间,我们将其简化为常数

对于该公式的具体推导与证明,参考文献中已经做了详细的推导,其中还包含解决过载的算法,这里就不多赘述了。(其实该公式从感性认识上也是容易理解的)

实时调度对操作系统的需求

我们知道非实时调度有如下期望:

尽量缩短系统的平均响应时间并提高系统的吞吐率,在单位时间内为尽可能多的用户请求提供服务

尽可能将可用的资源平均分配给所有需要处理器的进程,并保证每个进程都得以运行

但实时调度需要考虑截止时间的问题,这必然使其对操作系统提出新的需求,以下面四点为例。

抢占式内核

在一些操作系统中,进程运行在内核态时不能被更高优先级的进程抢占,也就是说截止时间更紧的任务将不得不等待低优先级任务离开内核,这对于实时调度来说是难以接受的,Linux在2.6版本之前也是如此,当然在2.6版本后对其进行了一定程度的更新。

避免完全关中断

在传统Linux中,处理中断的过程会关闭其他中断的响应,以便更好的处理本中断,但处理中断的CPU一直处于关中断的状态,整个过程中,中断和任务均无法得到响应,任务调度时间不确定。

时钟粒度

系统所能提供的最小时间间隔称为时钟粒度,这个值并不是越小越好,较小的时钟粒度会导致系统开销增大,降低整体吞吐量,所以非实时系统往往提供较粗糙的时钟粒度,譬如linux系统的时钟粒度约为10ms,对于并非为实时任务设计的系统来说,这个间隔完全够用,而且可以说非常合适。但实时调度却需要更加细的响应精度,可能要达到微妙级,这就需要操作系统给出更加细的时钟粒度。

共享资源的互斥访问差异

为了保证临界资源的有序使用,操作系统引入了信号量设计,但当高优先级任务等待低优先级释放临界资源时,就会受到阻塞,若此时低优先级任务被次高优先级任务抢先,就产生了优先级倒置,我们将会发现一个奇怪的状况,本应该是最紧急的高优先级任务,却不得不等待次优先级任务完成,低优先任务放出临界资源后才最后被执行。

需要注意的是,优先级倒置的问题并不只在实时调度中存在,只不过对于普通调度而言,这种情况并不会带来什么严重后果,但被阻塞的高优先任务在实时调度中,可能就是打开安全气囊之类的重要任务,这样的任务是等不起的,因此为了尽量保证实时调度的高优先级任务及时完成,实时操作系统使用优先级继承。

 

第二部分 调度算法适用性分析

背景

  1. 实时操作系统特点:可确定性可响应性用户控制可靠性故障弱化操作

  2. 任务的截止时间:分为开始和完成截止时间,开始截止时间指任务开始的最短时间,完成截止时间同理。区别响应时间

  3. 任务的就绪时间:是某任务进入ready状态的开始时间。

适用于实时调度的调度算法

  1. 实时调度的核心是短任务调度程序。在设计这种调度程序时,公平性、最小平均响应时间不是最重要的,最重要的是所有硬实时任务都能在最后期限内完成,且尽可能多的软实时任务也能在最后期限内完成。因此,先来先服务调度、短作业优先调度、并不适用于实时调度中;非抢占式的轮转调度算法也只可用于要求不高的实时调度。而优先级调度算法的思想则广泛用在实时调度算法中,各种实时调度算法基本都是决定优先级的算法。原因如下:

    • 先进入后备队列的作业/进程不一定有更早的截止时间,FCFS可能导致后来的作业/进程错过开始截止时间。

    • 短作业的执行时间是较短的,但该调度完全不考虑作业的紧迫程度,不考虑截止时间的约束。以短作业优先为例,我们引入了一个实例探讨为何短作业优先调度有可能导致任务错过其截止时间,并且也引入了周期性任务的CPU利用率的计算与概念。

      例:假设现有A、B两个周期性任务,其中A任务的处理时间为15ms,周期时间为30ms; B任务的处理时间为20ms,周期时间为40ms.(请留意 A处理时间/A周期时间+ B处理时间/B周期时间=1)

      设A、B同时在t=0时抵达:

      image-20221110201905581

      t=15ms时 B开始执行;

      t=30ms时 B的执行被A抢占;

      t=40ms时 A仍在执行,B已经错过了其截止日期。

    • 基于公平原则的调度算法并不保证某个任务优先运行,而是尽可能使各进程/用户公平分享CPU时间,这显然不符实时调度的要求。

    • 非抢占的轮转调度也是尽量确定公平性,使n个进程都占用约1/n的处理机时间。因此其响应时间大概为数秒~数十秒,一般用在要求不高的实时系统,使用不广泛。

  2. 根据上述算法的举例,我们可以知道适合实时调度的算法应具有以下特点:

  • 应当属于优先级调度算法,因为根据优先级调度是保证系统参考截止时间进行调度的条件。

  • 广泛采用抢占方式。因为非抢占式调度算法中进行进程是不可被新进入进程打断的,存在有紧迫截止时间的进程无法使用处理机的情况。需要提到的一点是,有观点认为抢占式在实时调度中并不总是优越的,因为CPU切换任务所占用的时间几乎必定导致被切换下去的任务错过截止时间。此外也存在这种情况,CPU处理能力很强,任务的响应时间/截止时间十分小,以至于几乎不需要抢占。

  1. 实时调度算法有不同的分类方法:

    image-20221110201935698

    我们按照动态和静态分为两种:

    静态调度算法(主要用于周期性任务):是在系统编译的时候就做出决定从就绪任务队列中选择哪个任务来运行。它完全脱机的进行可调度性分析,且产生一个调度表,调度器在运行时将参照这张表所提供的信息来选择任务执行。可调度性分析是指给定任务时限、优先级、周期、最坏执行时间等特性后,用可调度性分析算法验证任务集是否满足时限。

    动态调度:是指调度器在运行期间才决定选择哪个就绪任务来运行,主要有最早截止时间优先EDF、最小松弛度优先算法LLF等。

静态多任务调度算法-速率单调调度算法(Rate—monotonic scheduling,RMS)

RMS针对那些响应和处理周期性事件的实时任务,其中任务按单调速率优先级分配(RMPA).算法思想:基于任务的周期设置它们的优先级,周期越短,任务的优先级设置越高。RMPA算法通过对系统资源利用率的计算来进行任务可调度性分析。

RMS调度算法则必须满足更苛刻的条件:image-20221110202000116

 

,才可保证没有任务错过" 。具体公式推导不再展开,请查看:冯艳红,张玉明,徐美华. 实时调度算法分类研究[J]. 微型电脑应用,2005,21(7):12-14. DOI:10.3969/j.issn.1007-757X.2005.07.005.我们可以总结在周期任务数不同的前提下,要使用RMS算法进行动态调度需要满足的CPU占用率条件,并总结如下图:

image-20221110202130639

因此之前的例子(A、B任务的CPU占用率之和为1>0.828)并不符合用RMS调度的前提条件。我们可以看到,事实上在该情况下,RMS调度的结果是A始终拥有更高优先级,其和SJF调度并无差别,因此无法解决本例中实时调度的问题。

尽管有更严苛的使用条件,但RMS算法仍然是单处理器下最优的静态调度算法。如果一些周期任务可以被静态调度,那么它们就一定可以使用RMS完成调度。

动态多任务调度算法-最早截止时间优先(Earliest— deadline First,EDF)

EDF可用于周期性和非周期性的实时任务,并且也可用与抢占式、非抢占式调度中。

算法思想:根据任务的截止时间确定任务的优先级,截止期越早,其优先级也就越高。(对于周期任务,其截止期即为下一周期开始的时间)。截止时间最早的任务会排在就绪队列队首。

引入之前的例子,我们可以进行推演:

image-20221110202147078

t=0:A、B同时到,A截止时间30ms<B截止时间40ms,A先执行;

t=15ms后,A执行完毕,B开始执行;

t=30ms:下一周期的A再到,此时A截止时间60ms>B截止时间40ms,B继续执行;

t=35ms后,B执行完毕,A开始执行;

t =40ms:下一周期的B再到,此时A截止时间60ms<B截止时间80ms,A继续执行;

t =50ms:A执行完毕,下一周期的B开始执行;

t=60ms:下一周期的A再到,此时A截止时间90ms>B截止时间80ms,B继续执行;

t=70ms: B执行完毕,A开始执行;

……

t=120ms:此时新的A、B又同时到,说明在一个周期内没有任务会错过截止时间。

因此EDF可以调度任何CPU占用率之和不超过1的任务。

 

参考文献

[1]吴悦,唐立三,杨洪斌. 非周期实时任务过载的判别和处理机制[J]. 应用科学学报,2009,27(2):198-202. DOI:10.3969/j.issn.0255-8297.2009.02.016.

[2]冯艳红,张玉明,徐美华. 实时调度算法分类研究[J]. 微型电脑应用,2005,21(7):12-14. DOI:10.3969/j.issn.1007-757X.2005.07.005.

[3]李小群,赵慧斌,叶以民,等. Linux实时调度方案的设计与实现[J]. 计算机研究与发展,2003,40(5):728-733.

posted @   丘丘王  阅读(399)  评论(0编辑  收藏  举报
相关博文:
阅读排行:
· winform 绘制太阳,地球,月球 运作规律
· AI与.NET技术实操系列(五):向量存储与相似性搜索在 .NET 中的实现
· 超详细:普通电脑也行Windows部署deepseek R1训练数据并当服务器共享给他人
· 【硬核科普】Trae如何「偷看」你的代码?零基础破解AI编程运行原理
· 上周热点回顾(3.3-3.9)
鼠标点击页面特效

尝试在空白处点击鼠标

点击右上角即可分享
微信分享提示