An algorithm for scheduling certifiable mixed-criticality sporadic task systems——一种调度可证明的混合临界零星任务系统的算法
目录
一、论文核心思想
这篇论文探讨的是混合关键度散发式任务系统的调度问题。
在这类系统中,只有部分任务是关键的,需要获得认证,而其他任务则不需要。(详细参考本人前边几篇博客)
本文提出了一种基于优先级的调度算法,可针对具有混合关键度的有限周期任务集进行调度。同时,文章设计了一种计算任务优先级的算法,并得出了一个足够的可调度性条件,以有效地确定给定的混合关键度任务系统是否可以通过此算法成功调度。
在文章中,针对性的解决了两个问题:
第一个问题涉及到如何在不知道任务发放时间的情况下限制最长繁忙间隙的长度,以确定在处理器空闲之前可以执行的最大作业集合;
第二个问题涉及到如何在任务发放时间(以及截止时间)事先不知道的情况下分配优先级。
对于第一个问题,本文利用实时调度理论中的先前技术来进行解决。对于第二个问题,本文假设在当前繁忙间隙内的所有作业都是在符合散发式任务模型的约束条件下得到许可后立刻释放的,然后分配优先级。在运行时,将监视实际的作业释放时间。只要它们符合我们在分配优先级时所使用的时间,我们就不需要做任何事情。当它们不符合时,我们在某些情况下需要重新计算已分配给某些作业的优先级。
此外,本文提出的算法还通过采用一种名为 OCBP(Optimally-Changed Busy Periods)的技术,设计了一种用于限制任务间干扰的机制,从而实现了关键任务和非关键任务间的隔离。 最后,本文深入讨论了具有混合关键度规格的有限周期任务集调度中的各种问题,提出了一系列有意义的解决方案。
二、案例引入
参考本人另一篇博客操作系统论文导读(七):Response-Time Analysis for Mixed Criticality Systems——混合关键系统的响应时间分析_管二狗赶快去工作!的博客-CSDN博客
与此处完全相同,背景条件及举例也完全相同,即:
混合关键系统的静态验证与安全关键系统的认证问题密切相关。 当前将多种功能集成到一个通用平台上的趋势,意味着即使在高度安全关键的系统中,通常也只有相对较小的一部分 整个系统实际上是关键功能,需要进行认证。
为了证明系统是正确的,证书颁发机构 (CA) 必须对系统在运行时的最坏情况下的行为做出某些假设。 CA 往往非常保守,因此通常情况下,如果不需要认证,CA 所需的假设要比系统设计人员在系统设计过程中通常使用的假设悲观得多。
然而,虽然 CA 只关心系统安全关键部分的正确性,但系统设计者希望确保整个系统的正确性,包括非关键部分。
所以在设计者眼里希望既满足CA又使得整个系统具有良好的正确性,基于此提出相应的调度准则。
三、基础定义
3.1 jobs
每个作业都由一个 5 元组参数表征:Ji = (ai, di, χi, ci(LO), ci(HI)),
其中
• ai ∈ R+ 是发布时间。
• di ∈ R+ 是截止日期。 我们假设 di ≥ ai。
• χi ∈ {LO, HI} 表示工作的关键性。 HI 临界作业(χi = HI 的 Ji)是需要认证的作业,而 LO 临界作业(χi = LO 的 Ji)则不需要认证。
• ci(LO) 指定系统设计者使用的 Ji 的最坏情况执行时间 (WCET) 估计值(即,在 LO 关键级别的 WCET 估计值)。
• ci(HI) 指定认证机构使用的 Ji 的最坏情况执行时间 (WCET) 估计值(即 HI 关键级别的 WCET 估计值)。我们假设
– ci(HI) ≥ ci(LO) (即,系统设计者使用的 WCET 估计永远不会比 CA 使用的更悲观)
– 如果 χi = LO,则 ci(HI) = ci(LO)(即,如果 LO 临界作业的执行时间超过其 LO 临界 WCET 估计 ,则该作业将中止)。
3.2 负载
在经典的实时调度理论中,实例的负载表示所有时间间隔内实例作业在该间隔内的累积执行要求的最大值除以区间长度。
简单来说,经典的实时调度理论中,实例的负载指的是实例的处理时间与截止时间之比
本文中定义了一个 MC 的两个负载:
这些定义实际上就是零星任务系统的拓展:零星任务系统 τ 的 LO 关键度负载 ℓLO(τ ) 被定义为 ℓLO(I) 可以具有的最大值,对于生成的任何实例 τ 。 HI 临界负载 ℓHI(τ) 的定义类似。
实际上简单来说:Loads ℓLO(I) 和 ℓHI(I) 是对于一个混合关键级别实例 I,分别表示其 LO 关键级别负载和 HI 关键级别负载的大小。它们分别通过计算实例 I 内在时序的区间的最大值得到,以表示任务在 HI 和 LO 关键级别下运行的速率。简单来说,ℓLO(I) 和 ℓHI(I) 表示在不同条件下需要处理的工作量。
比如说ℓLO(I)实际上就是在LO关键级别下,在区间t1到t2时间段内,任务运行的时间之和比上区间长度(这个任务必须是在区间内开始和结束的)。
3.3 关键系统的正确性
若调度协议使得关键系统满足以下两个条件则称它是正确的,即:
-如果所有作业都表现出 LO-critical 行为,那么所有作业都会在其发布时间和截止日期之间获得足够的执行,以便能够发出完成信号;
-如果任何作业表现出 HI-criticality 行为,则所有 HI-criticality 作业都会在其发布时间和截止日期之间获得足够的执行,以便能够发出完成信号。
四、OCBP调度算法
OCBP 算法的高级描述如下。 给定这样一个实例 I,我们确定离线(即,在运行时之前)I 的作业的总优先级排序,以便根据此优先级顺序调度作业保证正确的调度,其中根据优先级调度 排序意味着在每个时刻执行最高优先级的可用作业。
OCBP算法是一种针对集合形式的独立作业工作负载的优先级算法。该算法可确保根据预先确定的作业的优先级顺序进行调度,从而获得正确的调度。
算法的具体实现可遵循以下步骤:
1. 给定工作负载实例I,首先采用“Audsley方法”递归地确定作业的优先级顺序,得到可确保正确调度的总的优先级顺序。
2. 根据该方法处理之后,确定I实例中的最低优先级作业。该作业可以是一个LO-criticality作业,当其他作业Jj的执行量累计为cj(LO)时,当前作业Ji的执行时间窗口内至少有ci(LO)的时间可用,或者是一个HI-criticality作业,当其他作业Jj累计执行时间为cj(HI)时,当前作业Ji的执行时间窗口内至少有ci(HI)可用。
3. 选择其中的一个符合要求的作业,将其指定为最低优先级作业,并排除该作业,然后重复步骤2直到所有作业都被排序,或者在某个迭代中没有符合条件的作业可供分类为最低优先级作业为止。
4. 如果出现分类为最低优先级作业为空的情况,则表示优先级分配算法失败,该实例不可被OCBP算法调度。
5. OCBP算法已通过论证,若该算法成功接受了一个实例I内的作业按照其优先级顺序调度,则该调度策略为正确的MC调度策略。
其实本人并没有看出来在算法方面有什么创新点,总感觉还是SMC和AMC的和稀泥。只是解决了两个上边提到的问题。
(其实可以理解为AMC在零星任务系统的应用)
OCBP算法条件:
(本文未提供证明)
引理1:
引理 1:让 {Ji}ni=1 表示作业的集合,所有作业都在时刻 t 发布。 让 pr : {Ji}ni=1 → {1, 2, . . . , n} 是从 {Ji}ni=1 到整数 {1, . . . ,n}。 根据 pr(Jk) 表示分配给作业 Jk 的优先级的解释(按照惯例,我们假设较小的数字表示较高的优先级),pr 是 {Ji}ni=1 的 OCBP 优先级分配当且仅当
∀k :: ∑ Ji : pr(Ji)≤pr(Jk) ci(χk) ≤ (dk − t) 。 (2)
其实这个公式说白了就是在说要让k能够执行完毕,那么就得让所有i(优先级大于i的任务)的最大执行时间之和小于等于k的截止时间减去所有i执行完之后的时间。
五、利用OCBP调度零星任务系统
5.1 直接调用存在问题
将前边的OCBP协议直接应用于零星任务系统至少存在以下两个问题:
1. OCBP 算法有两个阶段:离线阶段,在此期间为所有作业计算优先级;然后是运行时阶段,使用离线阶段分配的优先级部署基于优先级的调度。 但是由于零星任务系统生成的任何实例都可能包含无限多个作业,因此不能保证在运行时之前计算所有优先级的过程会终止。
其实就是没法保证运行前OCBP计算优先级能完事
其实本人觉得这个问题有点点鸡肋的感觉,像是在AMC的基础上,解决一下运行前计算完优先级,但其实Audsley算法本来就是多项式复杂度的,个人感觉不太存在会出现运行前优先级运算还没结束的问题,即使有也会极其极其少,所以解决问题1实际上没有什么实际的应用价值。
后续补充:后续本人慎重的思考了一下,在很多文章中AMC调度计算优先级的方式是EDF,任务一经发布即可更新出优先级,而本文是用Audsley算法计算优先级,所以说需要一个时间片一个时间片的去区分,划出很小一段时间给出计算优先级的时间,故而需要解决这两个问题。所以说这两个问题实际上是有一定意义的。
2.确定OCBP优先级的算法需要实例中所有作业的完整规范。 然而,在我们的运行时调度算法不是监控的(合理的)假设下,对于零星任务系统,我们事先不知道这些信息:虽然我们可能知道作业释放时间的下限,但作业的确切释放时间只有在实际发布时才为人所知。
其实就是在零星任务系统中不知道作业确切啥时候释放
第一个问题解决方案:在每个时刻,给那些在当前繁忙间隔内到达的作业,这里的繁忙间隔是指期间的最大连续时间间隔处理器没有空闲。对于任何零星任务系统 ℓLO(τ ) 和 ℓHI(τ ) 都严格小于 1,可以应用实时调度理论中的先验技术来限制最长繁忙间隔的最大长度,从而确定可能的最大作业集合在处理器空闲之前执行。
Busy interval(繁忙间隔)是一种用于分析混合关键性调度算法的可调度性的概念,它指的是一个连续的时间段,其中处理器一直处于繁忙状态。在这篇论文中,作者定义了两种类型的busy interval,分别是低关键性模式下的busy interval和高关键性模式下的busy interval。
低关键性模式下的busy interval是指系统处于低关键性模式时,从一个任务释放开始,到所有已释放的任务都完成为止的时间段。
高关键性模式下的busy interval是指系统处于高关键性模式时,从一个高关键性任务释放开始,到所有已释放的高关键性任务都完成为止的时间段。
实时调度理论中的先验技术是一种用于确定实时任务优先级的方法,它根据任务的到达时间、执行时间和截止时间来计算任务的优先级,然后按照优先级高低进行调度。先验技术有两种常见的算法:最早截止时间优先EDF算法和最低松弛度优先LLF算法。
第二个问题处理方案:我们将在假设当前繁忙间隔内的所有工作在允许的约束下尽快释放的情况下分配优先级零星任务模型。 在运行时,我们将监控实际的作业发布时间; 只要它们符合我们在分配优先级时使用的那些,我们就不需要做任何事情。 当它们不符合时,在某些情况下,我们将需要重新计算分配给某些工作的优先级。(后续会讲)
5.2 计算 OCBP 优先级(问题一解决方案)
假设一个繁忙的间隔在运行时的某个时刻开始,处理器在 t0 之前处于空闲状态,并且某些作业到达了 t0。 此时我们将优先级分配给所有可能在从 t0 开始的繁忙间隔内安排的作业,每个作业在允许的情况下尽快被释放。为了分配优先级,我们假设所有这些工作都是“提前发布”的。 我们通过一个例子来说明这一步。
其实就是说,假如任务 τi 可以在最长的忙碌间隔内有 3 个工作,并且 τi 在 t0 释放一个工作。所以说这 3 个工作最早可以分别在 t0、t0+Ti 和 t0+2Ti 时发布,截止日期分别为 t0+Di、t0+Ti+Di 和 t0+2Ti+Di。 为了优先级分配,我们会认为这些工作都到达了t0
5.2.1 优先级分配
我们根据 OCBP 优先级分配方案为作业分配优先级。 条件 4 来自引理 1(参考引理1的解释)
5.2.2 运行时优先级分配
现在根据这些优先级调度作业:在每个时刻,具有最小 π(Ji) 值的作业 Ji 已被释放但尚未发出完成信号被选择执行。 这一直持续到发生以下事件之一:
1.某些作业 Ji 执行了超过 ci(LO) 而没有发出已完成执行的信号。 这意味着系统现在处于 HI 关键模式,并且 LO 关键作业不再需要在截止日期前完成。 因此,丢弃所有 LO-criticality 作业。
2.在基于优先级的调度模型下,只有在 t 之前到达的所有作业都已在时间 t 完成执行时,处理器才会在某个时间 t 空闲。 如果发生这种情况,当前的繁忙间隔已经结束,并且分配给在这个繁忙间隔内最终没有到达的作业的优先级将被“取消”。 我们等待某个作业的释放,那时将重新计算可能在该繁忙间隔内安排的所有作业的优先级。
3.由于某些较高优先级作业 Jy 的释放(即 π(Jy) < π(Jx)),例如在时刻 t1,某些较低优先级作业 Jx 的执行被抢占。 我们必须在这个时间点重新计算优先级函数 π。 所有 π(Jz) ≥ π(Jx) 的工作 Jz 保留其优先级,但剩余的工作可能需要有新的优先级计算。(后续会进一步说明)
下面是在条件3发生的情况下优先级重新计算的说明:
对于每个任务 i,让 ∆i 表示作业 Ji 在 [to, t1) 期间的执行量。 设 c′i(LO) = ci(LO) − ∆i,c′i(HI) = ci(HI) − ∆i; 这些表示 Ji 的剩余 WCET 估计值。
引理 2 没有优先级低于 Jx 的作业 Jk(即 π(Jk) > π(Jx))在[to, t1]区间执行过。 也就是说,对于所有此类作业,Δk = 0。
其实说白了就是优先级低的作业还轮不到执行,所以Δk = 0
引理 3 每个优先级高于 Jx 的作业 Jk(即 π(Jk) < π(Jx) )在区间 [to, t1) 已经完成了执行,或者在时刻 t1 之前尚未被释放。
要是在t1前释放了,那么轮到x执行,自然而然的高于他优先级的任务应该已经执行完了,同样的,如果没释放,那就只能放在t1之后执行了。
引理 4 对于每个 π(Jk) ≥ π(Jx) 的 Jk,
这个实际上是等式2的变式,详细解释看上边等式2
我们的目标是重新构建优先分配函数π′ ,在时刻 t1 满足引理 1。 根据引理 4,对于所有具有 π(Jk) ≥ π(Jx) 的 Jk,具有 π'(Jk) ≡ π(Jk) 的任何优先级分配 π' 将满足所有具有 π(Jk) ≥ π(Jx); 换句话说,所有通过优先级分配 π 分配的优先级低于 Jx 的作业都可以在优先级分配 π' 中保留其原始优先级。
其实就是哪怕再分配一遍优先级,之前没有释放过但没执行过的任务(优先级小于x的)相对优先级不会改变,我们要做的就是把新的释放的任务优先级插入进里边就ok了。
在 π 中优先于 Jx 的工作,根据引理 3,每个这样的作业要么在时间点 t1 之前完成执行,要么还没有被释放。 也就是说,所有这些(未完成的)工作都有未来的释放时间,因此合在一起构成了一个可以由任务系统 τ 生成的合法实例。 我们将使用 OCBP 优先级分配算法重新计算这些作业的优先级; 所有这些工作优先于满足 π(Jk) ≥ π(Jx) 的工作 Jk。
引理 5 假设 (n − n′) 个作业已在 [to, t1] 期间发出完成信号:根据引理 3,这些作业 Jk, π(Jk) < π(Jx)。 让 {J ′ i }n′ i=1 表示剩余的工作。 优先级分配如下:
1. 所有尚未完成执行的满足 π(Jk) < π(Jx) 的作业 Jk 重新计算 OCBP 优先级 π′(Jk),再次在“提前释放”假设下都在时刻 t1 释放;
2. 对于满足 π(Jk) ≥ π(Jx) 的每个作业 Jk,π′(Jk) = π(Jk) − (n − n′)
5.3 繁忙间隔大小限制(问题二解决方案)
如果一个任务集的最长繁忙间隔的上界小于等于该任务集中最小的截止时间,那么该任务集就是可调度的。可以通过以下方式限制 τ 的最长忙碌间隔。
根据运行时调度算法,一旦任何作业的执行时间超过其 LO 临界 WCET,就不会执行任何 LO 临界作业。 因此,考虑最长的繁忙间隔由两部分组成:
(i)从繁忙间隔的开始到某个作业执行超过其 LO-criticality WCET 的时刻(如果有的话)
(ii ) 从那一刻到繁忙间隔结束。
不失一般性,我们假设繁忙间隔从零时刻开始,一些作业在时刻 x1 执行超过其 LO 临界 WCET,并且繁忙间隔在时刻 x1 + x2 结束。令 Dmax 表示 τ 中任何任务的最大截止日期。 在 [0, x1) 上执行的所有作业的发布时间和截止日期都在 [0, x1 + Dmax] 区间内; 因此
由于从0到x1区间,一直一LO关键性执行任务,故而任务在[0, x1 + Dmax] 区间内的执行时间之和必然大于等于x1,将符号带入definition1,之后将t2换成x1 + Dmax,t1换成0,即可出现以上结果
由于在 [x1, x1 + x2) 期间执行的所有作业的发布时间和截止日期都在 [0, x1 + x2 + Dmax) 区间内,因此必然是
由于从x1到x2区间,一直以HI关键性执行任务,故而任务在[x1, x1 + x2 + Dmax] 区间内的执行时间之和必然大于等于x2-x1,将符号带入definition1,即可出现以上结果
最长繁忙间隔的长度以 x1 + x2 为界。在 MC 零星任务系统 τ 上执行我们的调度算法期间,这些是在任何给定时间分配给它们的 OCBP 优先级的作业。
5.4 时间复杂度分析
这里略,原文讲的比较清晰也比较好理解,应该是多项式复杂度。
六、 结论
由于安全关键嵌入式系统执行的功能的复杂性和多样性迅速增加,获得此类系统认证的成本和复杂性正迅速成为一个严重的问题。 我们认为,在混合关键系统中,这些认证考虑因素会带来基本的新资源分配和调度挑战,传统的实时调度理论无法充分解决这些挑战。 因此, 我们推导出了一种称为 OCBP 的算法,用于调度此类混合关键性工作负载。 在本文中,将我们的调查扩展到更一般的混合关键工作负载:那些由循环过程生成的工作负载。 我们扩展了零星任务模型,该模型广泛用于表示非 MC 实时系统中的此类进程,以便能够对循环 MC 工作负载进行建模。 我们已经扩展了 OCBP 调度算法来调度这样的 MC 实时系统:这种扩展是非常重要的,因为零星任务系统的特性是作业的释放时间事先不知道,但只有在任务发布的那一刻才知道 工作实际上被释放了。 尽管增加了复杂性,但我们已经表明,由独立作业组成的 MC 工作负载的可调度性条件可以推广到由零星任务组成的 MC 工作负载。