嵌入式系统在当今的生产和生活中得到了广泛的应用,鉴于嵌入式实时系统的特点,要求任务调度等实时内核功能精简和高效。综合了EDF 和RM调度策略的CSD 调度策略,更加适合嵌入式系统的特点,满足其内核的要求。任务调度策略是
实时系统内核的关键部分,如何进行任务调度,使得各个任务能在其期限之内得以完成是实时操作系统的一个重要的研究领域。它的精简和高效,对提高低处理能力,小内存系统整体性能具有重大的
意义。
简介
POSIX 1003.b中定义:指系统能够在限定的响应时间内提供所需水平的服务。而一个由Donald Gillies提出的更加为大家接受的定义是:一个
实时系统是指计算的正确性不仅取决于程序的逻辑正确性,也取决于结果产生的时间,如果系统的时间约束条件得不到满足,将会发生系统出错。
分类
实时系统根据其对于
实时性要求的不同,可以分为软实时和硬实时两种类型。
硬实时系统指系统要有确保的最坏情况下的服务时间,即对于事件的响应时间的截止期限是无论如何都必须得到满足。比如航天中的宇宙飞船的控制等就是现实中这样的系统。
其他的所有有实时特性的系统都可以称之为软实时系统。如果明确地来说,软实时系统就是那些从统计的角度来说,一个任务(在下面的论述中,我们将对任务和进程不作区分)能够得到有确保的处理时间,到达系统的事件也能够在截止期限到来之前得到处理,但违反截止期限并不会带来致命的错误,像实时
多媒体系统就是一种软实时系统。
根据建立调度表和可调度性分析是脱机还是联机实现分为静态调度和
动态调度,静态调度无论是单处理器调度还是分布式调度,一般是以
RMS算法为基础;而动态调度则以EDF、LLF为主。
按系统分类实时调度可以分为单处理器调度,集中式多处理器调度和
分布式处理器调度。
按任务是否可抢占又能分为
抢占式调度和不可抢占式调度。
单处理器
问题描述:假设一任务集S={t1,t2,t3,...,tn},周期分别是T1,T2,...,Tn,执行时间为c1,c2,...,cn,deadline为D1,D2,...,Dn,Di=Ti。任务ti可以被抢占。
CPU利用率用U=sum(ci/Ti)来表示。对于单处理器,U≤1是S可调度的前提条件,否则S不可调度。
算法
RMS(Rate-Monotonic Scheduling)调度算法
任务按单调
速率优先级分配(RMPA)的调度算法,称为单调速率调度(
RMS)。RMPA是指任务的优先级按任务周期T来分配。它根据任务的执行周期的长短来决定调度优先级,那些具有小的执行周期的任务具有较高的优先级,周期长的任务优先级低。
不考虑n=1的情况。RMS是单处理器下的最优静态调度算法。1973年Liu和Layland发表的这篇文章的前半部分首次提出了RM调度算法在静态调度中的最优性. 它的一个特点是可通过对系统资源利用率的计算来进行任务可调度性分析, 算法简单、有效, 便于实现。不仅如此, 他们还把系统的利用系数(utilization factor)和系统可调度性联系起来, 推导出用RM调度所能达到的
最小系统利用率公式. 同时, 这篇论文中透露出来的证明思想和方法也被人们所效仿. 下面就让我们来看看这篇文章中关于RM调度算法的重要结论。
任何一个结论都有一个模型假设, 让我们先列出这里的假设:
(A1) 所有的任务请求都是周期性的,必须在限定的时限内完成;
(A2) 任务的作业必须在该任务的下一个作业发生之前完成, 这样避免了考虑队列问题; 在这里, 我们对任务和作业不作特别的区分, 因为一个任务请求就是一个作业。
(A3) 任务之间都是独立的,每个任务的请求不依赖于其他任务请求的开始或完成;
(A4) 每个任务的运行时间是不变的,这里任务的运行时间是指处理器在无中断情况下用于处理该任务的时间;
(A5) 所有的非周期性任务都在特殊的情况下运行,比如系统初始化或系统非正常紧急处理程序。
(A6) 其它一些假设, 比如, 单处理器, 可抢占调度, 任务切换的时间忽略不计等等。
RMS算法
(1) 任务T i (P i, Ci, D i) 模型: 周期为P i,计算时间为Ci, 时限D i 为周期终点。任务在周期起点释放, 高优先级任务可抢占低优先级任务的执行。
(2) 优先级分配方法: 静态固定分配。优先级与周期成反比, 周期越短优先级越高。
(3) 可调度性分析: 如果任务集满足下式, 则该任务集可调度。
定理1:n个独立的周期任务可以被RMPA调度,如果U≤n(2^(1/n)-1)。
一个任务的响应时间(response time)是指一个任务请求到这个任务实际完成的时间跨度. 在静态调度中, 任务的临界时刻(critical instant)这个概念被首先提出来. 它被定义为一个特定的时刻, 如果在这个时刻任务请求到来, 那么会导致这个任务的响应时间最大(A critical instant of a task is the time atwhich the release of a task will produce the largestresponse time). 由此得出
定理1: 一个任务的临界时刻就是比这个任务优先级高的所有任务同时发出请求的时刻.
(Lemma: For any task, the critical instant occurs if thattask is simultaneously released with all higher prioritytasks .)
证明: 由于一个任务的响应时间是它自己的负载时间加上被其它优先级高的任务所打断的时间. 由于自己的负载时间是固定的, 我们考虑在什么时候任一高优先级的任务会有最长的打断时间. 显然, 只有当这一高优先级的任务与该任务同时请求处理时, 才能可能产生最大的打断时间.
如果有任务1和任务2,且任务1的优先级比任务2高,那么任务2的响应时间会被任务1延迟。
当任务1的请求到来的更早,那么任务2的响应时间就更长了。
定理1的价值在于它找到了一个用于证明一个调度算法能否调度任一任务集的
充分必要条件。那就是所有任务同时请求执行的情况下,每个任务仍能满足各自的期限, 那么这个任务集就可以被这个调度算法调度.
有了这个推论, 我们就可以证明RM调度的最优性了.
定理2: 如果一个任务集能够被静态调度, 那么RMS算法就能够调度这个任务集. 从这个意义上说, RMS是最优的静态调度算法.
这个定理的
证明方法就是有名的交换法. 证明思路如下:
假设一个任务集S采用其他静态优先级算法可以调度,那么总有这样两个优先级相邻的任务i和j, 有Ti>Tj,且Pi≥Pj.把Ti和Tj的优先级Pi和Pj互换,明显可以看出这时S仍然可以调度, 因为在所有任务同时请求的情况下, 交换这两个任务不会影响其它任务的完成时间, 同时这两个任务都可以在各自期限内完成. 按照这样的方法,其他任何静态优先级调度最终都可以转换成RM调度.
RMS已被证明是静态最优调度算法, 开销小, 灵活性好, 是实时调度的基础性理论。即使系统瞬时过载, 也完全可预测哪些任务丢失时限。缺点是
处理机利用率较低, 最坏的情况下,当n→∞时, 不超过ln2 (≈ 70%)。另外, RMS是充分但非
必要条件。而在一般情况下,对于随机的任务集大约只有88%. 70%或者88%的处理器利用率对于许多实时应用来说是一个严重的限制,动态调度算法如最早截止期最先(earliest deadline first,EDF)或者最少空闲时间最先(least laxity first,LLF)已经被证明是最优的,并且能够实现100% 的处理器利用率.
具有资源同步约束的RMS调度
当
实时任务间共享资源时, 可能出现低
优先级任务不可预测地阻塞高优先级任务执行的情况, 叫
优先级倒置。这时RMS 算法不能保证任务集的调度, 必须使用有关协议控制优先级的倒置时间。常用的协议有优先级顶级协议和堆资源协议, 使用这些协议可使优先级的倒置时间最多为一个资源临界段的执行时间, 并且不会发生
死锁。
基于RMS 的非周期任务的调度
实时系统中的非
周期任务可采用延迟服务器算法或随机服务器算法进行调度。它们的最大特点是可在周期任务的实时调度环境下处理随机请求。两者的基本思想是将非周期任务转化成周期任务, 再利用
RMS算法进行调度。前者用一个或几个专用的周期任务执行所有非周期任务, 这种周期任务叫非周期任务服务器。根据周期大小,服务器有固定优先级, 服务器的执行时间被称为预算, 它在每个服务器周期Ts 的起点补充。只要服务器有充足的预算, 就可在其周期内为非周期任务服务。该算法实现简单, 但可调度性分析较难, 有时会出现抖动,
可能发生一个非周期任务在相邻两个服务器周期中连续执行2倍预算的现象, 与
RMS理论不符, 需要适当修改RMS算法。随机服务器算法与延迟服务器算法相似, 但预算不是在每个周期起点补充, 而是在预算消耗Ts时间之后再补充。该算法与RMS分析算法一致, 但实现复杂。
EDF
最早截止时间优先算法(EDF)也称为截止时间驱动调度算法(DDS),是一种动态调度算法。EDF指在调度时,任务的优先级根据任务的截止时间动态分配。截止时间越短,优先级越高。EDF有如下定理:
定理2:如果一个任务集按EDF算法调度,当且仅当U≤1。
EDF的特点
(1) 任务模型: 与RMS 调度相同。
(2) 优先级分配方法: 动态分配, 距要求时限所剩时间越短优先级越高。
(3) 可调度性分析: 如果任务集满足下式, 则该任务集可调度。
EDF 调度算法已被证明是动态最优调度, 而且是充要条件。
处理机利用率最大可达100% 。但瞬时过载时, 系统行为不可预测,
可能发生多米诺骨牌现象, 一个任务丢失时会引起一连串的任务接连丢失。另外, 它的在线调度开销比
RMS大。
LLF
最短空闲时间优先算法(LLF)也是一种动态调度算法。LLF指在调度时刻,任务的优先级根据任务的空闲时间动态分配。空闲时间越短,优先级越高。空闲时间=deadline-任务剩余执行时间。LLF可调度条件和EDF相同。
理论上,EDF和LLF算法都是单处理器下的最优调度算法。但是由于EDF和LLF在每个调度时刻都要计算任务的deadline或者空闲时间,并根据计算结果改变任务优先级,因此开销大、不易实现,其应用受到一定限制。
多处理器
静态调度
问题描述:一组具有优先级关系的任务在m个处理器上运行,任务
优先级关系用“<”表示,即如果两个任务(t1,t2)存在优先关系t1< t2,则t1必须在t2开始运行前完成。任务优先关系可用一个无环图来表示,称为计算图G,如图1.表示任务集S={t1,t2,t2,t4,t5}中任务存在优先关系≤{(t1,t2),(t1,t3),(t1,t4),(t2,t6),(t3,t6),(t4,t5),(t5,t6)}。多处理其调度就是要找出长度最短的调度表。
静态多处理器调度又可以有如下三种调度规范:
(1)基本(或非抢占)调度BS(Basic Scheduling)。任务在执行过程中不能被打断。
(2)可抢占调度PS(Preemptable Scheduling),任务可被抢占,此处抢占不必基于优先级。
(3)广义调度GS(General Scheduling)。 GS是一个理论上的概念,允许一个处理器可在同一时刻执行多个任务。事实上每个处理器在每一时刻最多只能执行能够一个任务。GS基于的前提是:在给定的时间段,处理器可以将其计算能力的一部分分配给一个任一个任务。并且规定同一任务不可以同时在多于一个处理器上并行执行。
定义 CA(G,k)表示调度规范A(BS、PS或GS)下,k个处理其的计算图G的最小计算时间。
定理3: 可抢占调度和广义调度的最小计算时间等于对任一k个处理器的计算图G,有
C_GS (G,k)=C_PS (G,k)
BS不能得到最短调度表,GS虽然能够得到最短调度表,但只是理论结果。定理三可知,PS和GS具有相同的最小计算时间,而PS在实际中是可实现的。
PS的一般生成过程是这样的:
(1)更具任务优先级关系画出计算图G
(2)按G生成GS调度表(为什么?)
(3)采用某种方法将GS调度表换成PS调度表
动态调度
问题描述:到达时间不确定而计算时间c和截止时间D已知的n个任务,运行在m个处理器上,n不确定,动态调度的目标是使系统能够对变化的环境做出迅速的反应。
动态调度的任务状态可以用l-c空间表示。横坐标表示任务的空闲时间l(t),纵坐标表示任务的剩余时间c(t)。任务空闲时间l(t)=D - c(t)。图中虚线间隔表示一个时间单位,如t2的当前时刻剩余计算时间为3,空闲时间为2,因此deadline为3+2=5。
每隔一定时间,l-c空间将刷新一次。任务在l-c空间的位置变化具有不同含义:
(1)任务执行:任务向下移动,c(t)变小
(2)任务不执行:任务向左移动,l(t)变小
(3)任务未到达:任务不动。有些任务未到达时已经确认,那么这些任务在l-c图上预留位置,当其到达时被激活
(4)新任务到达:根据任务的计算时间c和空闲时间l,设置其在l-c空间的位置
(5)任务执行完毕:任务到达l轴,此时c(t)=0
(6)任务运行超时失败:任务落在c轴左边,此时l(t)<0
任务的截止时间的属性在l-c空间中由角度表示。相同截止时间的任务都位于125度叫的同一直线上,而截止时间沿45度叫递增。t1和t3截止时间相等,t2比t1,t3长。
在l-c空间里,任务可以按EDF和LLF调度算法调度。但是多处理器下EDF和LLF不是最优算法。
定理4:在多处理器下,如果任务计算时间、截止时间或到达时间不能预先确定,则最优调度算法不存在。
定理4表明基于l-c空间的多处理器动态调度算法没有最优解。由于该算法不能保证所有任务的截止时间,因此属于软实时调度。(软硬实时调度:)
分布式实时调度
分布式实时调度算法可以分为两类:
GRMS
GRMS将
RMS用于分布式
实时系统,对RMS的一些基本概念如可调度性,可抢占星等进行扩展,同时引入一些新的概念,如系统一致性。
DSR
定义:设?X={Xi}是一个分布式的任务集合,1≤i≤n,
分布式系统中有m个节点,对于Xi∈X,Xi={Ti1,?Ti2,…,?Tim},Tij是Xi在Nj节点上的任务,Xi有距离约束ci。对于Tij?有执行时间eij。
定义lk=ck/2「lg(ck/cl), Bik=lk·2lg(ci/lk)」。
ΦNj(lk)=∑eij/Bik,(i=1..n)为调度任务集在节点Nj上的密度。
选择一个使∑ΦNj(lk),(j=1..m)最小值的lk作为系统的划分基r*。?
算法前提: 所有的任务有相同的执行节点,每个任务在网络节点上有同样的距离约束。