实时嵌入式与CPS操作系统
这些结果很少能提供直接的解决方案,但是它们的确为选择好的系统设计和调度算法以及避免差的或错误的选择提供了角度。
静态调度
在静态调度中,调度算法完全了解任务集及其约束,例如ddl,执行时间,优先级约束和将来的release time。
有时将来的release time还不清楚。 如果在制定时间表时知道所有将来的release time,则它仍然是静态算法。
例如,简单的实验室实验或简单的过程控制应用程序可能具有一组固定的传感器和执行器,以及明确定义的环境和处理要求; 静态调度算法对这组任务进行操作,并生成一个固定时间的调度表。
动态调度:
动态调度算法(在本文的上下文中)具有当前活动任务的全部知识,但是可能会有新任务到达(算法在调度当前集合时不知道会不会到达也不知道到达的任务的信息)。
例如,清理化学溢出物或军事指挥与控制应用程序的机器人团队需要动态调度,但是正如我们将看到的那样,实时动态调度算法的已有成果很少。
在线调度与离线调度
在构建实时系统时,无论最终运行时算法是静态还是动态,都应始终进行离线调度分析。
指标
- 最小化完成时间的总和
- 最小化完成时间的加权总和
- 最小化所需的处理器数量
- 最小化最大延迟
- 最小化错过最后期限的任务数量
最优算法
最优调度算法是只有在没有其他调度算法可以满足时才可能无法满足最后期限的算法。
问题定义
α|β|γ
- α表示机器环境(在本节中α= 1,表示单处理器机器)
- β表示工作特征(可抢占,不可抢占,独立,优先级受限,截止日期等)
- γ表示最佳指标(最小化最大延迟,总拖延等)。
假设有n个独立的作业,每个作业j的处理时间为pj,截止日期为dj。 对于任何给定的调度顺序,每个作业也将具有定义的完成时间Cj。 让我们将作业j的延迟定义为Lj = Cj-dj。 假设我们要最大限度地减少最大延迟,假设作业是非抢先执行的;
1 | nopmtn | Lmax
其中1代表单机,nopmtn代表非抢占,最小化的目标函数是Lmax =最大{Lj} j
最早到期日期earliest due date(EDD)算法
定理1(杰克逊规则)。
任何将作业按到期日不降序排列的顺序都是最佳的。
此结果在实时系统设计中似乎不太有用,因为实时系统设计通常要求没有任务错过最后期限。 但是,这是一个静态调度算法,如果最大延迟大于零,那么设计人员知道他必须提高系统计算能力,才能满足不错过任何期限的要求。
我们说,如果作业j不能在时间rj之前开始执行,则其释放时间为rj。
以上问题时间随着发布时间而延长
1 | nopmtn,rj | Lmax 是NP-hard
1 | pmtn,rj | Lmax是简单的
即,存在一种用于其解的算法并且具有多项式复杂度。
定理2
在所有合格的工作中(即释放时间小于或等于当前时间的那些工作),在任何时刻调度ddl最早的工作的任何顺序,对于最大延迟的最小化都是最佳的。
另一个重要领域是周期性任务的实时调度,通常使用速率单调算法。
该算法为每个任务分配一个静态优先级,该优先级与任务的周期成反比。 也就是说,周期最短的任务获得最高优先级。 对于期限与期限相同的一组固定的独立定期任务,我们知道:
定理3。
如果∑in = 1 pi /Ti≤n·(21 / n-1),则可以通过速率单调策略来调度一组独立的周期性作业。其中Ti和pi分别是周期和最坏情况执行时间。
对于大n,我们获得69%的利用率限制,这意味着只要CPU利用率低于69%,所有任务都将按时完成。 这通常称为可调度性测试。
最早截止日期优先算法earliest deadline first(EDF)
截止日期越早,优先级越高。
定理4
当允许抢占并且作业不竞争资源时,当且仅当J有可行的调度时,EDF算法能在处理器上生成具有任意释放时间和截止日期的作业J的可行调度。
优先约束
在下文中,优先级约束将用符号i→j或其相关的有向图G(V,E)表示,其中V是任务集,E是边集,如果任务i在 任务前,则连接i,j
由于并非所有任务都准备好同时进行调度,因此简单的EDF规则不再是最佳选择。
1 | prec,nopmtn | Lmax
通过类似于EDF的算法解决了该问题,该算法向后工作,从优先级图中的叶子节点任务开始。
该算法的工作原理如下:
调度列表是从底部开始按反向拓扑顺序构建的,并在每个步骤中添加到列表中,该任务具有所选指标的最小值,并且已调度完成了其后继任务。 该算法是最佳算法,O(n2)复杂度。
- S集合:已调度的作业(初始值:S =∅)
- J集合:后继任务已经被安排的所有工作(初始:所有工作
- 下一个作业将完成的时间(初始:t = ∑Pj)
Lawler的算法
重复
选择j∈J使得fj(t)=mink∈Jfk(t); 安排j使其在t完成;
将j添加到S,从J中删除j并更新J;
t:= t − pj;
直到J =∅。
1 | prec,nopmtn,ri | Lmax 被证明是NP-hard。
最佳或多项式算法在某些一般假设受到约束的地方退出。
于是有了用于单位计算时间任务和任意优先级约束的多项式算法。
以intree,outtree和串并行图的形式出现的优先关系已经找到了多项式算法。
intree:每个顶点最多只能有一个前任。
Outtree:每个顶点最多只能有一个后继者。
1 | prec,pmtn,ri | Lmax
该问题通过O(n2)算法解决。
定理5
如果根据以下公式修改了截止日期和开始时间,则EDF最适合具有一般优先级关系和不同发布日期的任务:
[image:9FD87141-B636-4FCA-9997-E5FDE963595B-95495-00021873107E6351/D1481361-BA01-4952-9136-5C2B414D3E4B.png]
盯着没有后继任务的任务,并在每个步骤中处理已处理后继任务的任务。
[image:E14CD74A-017D-4A46-A17D-2422E689F99B-95495-000218B4FF8EF458/1961D984-9F43-45AA-AA06-CD0507BBEDB4.png]
从没有前任的任务开始。
共享资源
调度一组具有优先级约束和任意资源冲突的任务的一般问题是NP难题。
定理6
当存在互斥约束时,不可能找到完全在线的最佳运行时调度程序。
如果运行时调度程序不了解任务的未来到达时间,则将其定义为完全在线。
定理7
决定是否可以安排一组仅使用信号量来强制相互排斥的周期性过程的问题是NP难题。
优先驱动方法 Priority-Driven Approach
术语优先级驱动算法是指一类调度算法,它们永远不会故意使任何资源闲置。
换句话说,资源仅在没有任何需要执行资源的作业准备就绪时才空闲。
当发生诸如作业的发布和完成之类的事件时,将做出计划决策。
因此,优先级驱动算法是事件驱动的。
- 通常,非抢占式调度并不比抢占式调度好。
- 没有规则来确定是抢占还是非抢先安排一组作业
- 在特殊情况下,当作业具有相同的释放时间时,如果忽略抢占成本,则抢占式调度会更好。