Skip to content

算法Algorithm

最早截止期优先与处理器需求

Earliest deadline first · EDF scheduling · Processor demand criterion

按最早绝对截止点抢占执行,以区间需求证明单核可行性,并把整数约束截止期化为有限超周期证书。

形式陈述 ​

选择绝对截止点最早的就绪作业 ​

在单核可抢占偶发任务模型中,EDF在每个选择时刻运行绝对截止点d最小的未完成就绪作业。这里比较r+D,不是相对期限D,也不是剩余执行量。新作业到达时,若它的d更早,就抢占当前作业;截止点相同按固定任务名、作业序破同值,本页采用A、B、C顺序。

没有就绪作业才空闲。调度器无需预知未来释放,也无需根据真实剩余服务猜测谁更短;实际完成事件会通知它何时移除作业。核验器为了推进事件,知道输入的服务量,但选择函数不读取该量。

什么长度的窗口装不下 ​

对任务τᵢ,长度t的任意窗口内,既在窗口开始之后释放、又必须在窗口结束前完成的作业最多有

ni(t)=max(0,⌊t−DiTi⌋+1).

于是定义处理器需求界

dbf(t)=∑ini(t)Ci.

本页的无锁、无开销、独立可抢占模型中,任务集可行,当且仅当对所有t≥0有dbf(t)≤t;条件成立时EDF能让每条允许作业流都按时。[1, §2,Theorem 1]

“窗口内的需求”只计释放和截止同时落入窗口的作业。一个早已释放、截止还很远的作业,可以借用窗口之外的时间,不能把它的全部C机械加到任意短窗口。

直觉

数作业时,最后一个释放必须来得及等D ​

若t<Dᵢ,连一份完整作业窗都放不下,需求为0。否则最早可在窗口起点释放第一份,以后每隔Tᵢ释放;最后一次必须不晚于t−Dᵢ,所以份数为1+⌊(t−Dᵢ)/Tᵢ⌋。各任务可独立选择这样的同步最密释放,因此相加是能达到的需求界,不只是松估计。

若某t满足dbf(t)>t,让所有任务在0首次释放、随后按各T最密释放,取deadline≤t的作业。它们的服务都必须装进[0,t],总量却大于t;这直接给出任何政策都无法满足的证书。

EDF第一次失败,必能找到超载窗口 ​

反过来,假设EDF第一次在d错过某个截止点。只看deadline≤d的作业,从d向前找这一组作业持续未清空的最后一段忙区间[s,d]:起点之前它们没有待处理工作,或s就是系统开始0。

这段里EDF不会运行deadline>d的作业,也不会空闲;否则当时deadline≤d的就绪工作必为空,s还可以向后移。区间里需要服务的相关作业都在s及之后释放,不存在从s以前带来的未完成相关作业,否则s就不是这段的起点。

到d仍有相关作业没做完,说明它们总需求严格大于d−s;它们又都在[s,d]释放且截止于d前,所以总需求不超过dbf(d−s)。因此dbf(d−s)>d−s,与假设矛盾。这个忙区间论证同时解释了EDF为什么在本模型中具有可行性最优性,而不只是一条好用的启发式。

例子与边界

H=20的完整需求表 ​

沿用A=(1,3,4)、B=(2,5,5)、C=(2,7,10)。这里每行列出t之前必须完成的最密作业份数。

t n_A n_B n_C dbf(t) 容量t
3 1 0 0 1 3
5 1 1 0 3 5
7 2 1 1 6 7
10 2 2 1 8 10
11 3 2 1 9 11
15 4 3 1 12 15
17 4 3 2 14 17
19 5 3 2 15 19
20 5 4 2 17 20

全部不超过容量。同步轨迹开始为A₀[0,1)、B₀[1,3)、C₀[3,4)、A₁[4,5)、C₀[5,6)。在5,B₁到达且d=10,C₀仍有更早的d=7,所以先完成C₀。固定任务优先级则会在5换去B,正是两者出现差异的地方。

为什么只检查有限个点就够 ​

整数T使H=lcm(T₁,…,Tₙ)有限。由于0<Dᵢ≤Tᵢ,t≥0时有⌊(t−Dᵢ)/Tᵢ⌋+1≥0,故

dbf(t+H)=dbf(t)+HU.

特别地dbf(H)=HU。若U>1,H本身就是不可行窗口;若U≤1,把任意t写成qH+r(0≤r<H),便有

dbf(t)−t=qH(U−1)+dbf(r)−r≤dbf(r)−r.

因此只需检查[0,H]。该区间内dbf只在Dᵢ+kTᵢ处向上跳;两跳之间dbf不变而t增长,最危险的是跳点本身。检查所有这些点并加入H即可覆盖全部实数长度。这个证明依赖约束截止期;不能直接给D>T也套同一周期差分起点。

利用率判据的正确范围 ​

若所有Dᵢ=Tᵢ,dbf(t)=Σ⌊t/Tᵢ⌋Cᵢ≤tU,所以U≤1已经充分;必要性仍由长期服务容量得到。这是经典隐含截止期EDF结论。[2, §7,Theorem 7]

若改成两任务(2,2,10),U虽为2/5,dbf(2)=4却超过2。增加重试或换一个破同值顺序都没有用:这是输入需求不可行,不是实现的排序失误。

抢占条件也不可省。单次作业X在0释放,c=4、d=10;Y在1释放,c=1、d=2。可抢占EDF让X运行[0,1)、Y运行[1,2),随后继续X;若X一旦开始必须完整运行,Y就错过2。多核、锁依赖、非抢占段和缓存开销也不自动继承本页定理。

推论与应用

调度、判定与证书是三个成本 ​

实际选择可用优先队列保存键(d,任务名,作业序)。每次释放入队、完成出队或抢占后的重入队为O(log(1+J)),处理J个已给定作业可用O(1+J log(1+J))事件开销;这里无自挂起,每次新释放至多触发一次抢占。输出K段轨迹另外占O(1+K)空间。

下载器的无锁执行核心使用这个堆。它还保存截止事件,按同刻完成优先的规则检查迟到;作业输入排序与证书记录也计入上述量级。若输入还列出n个任务,其中一些没有作业,校验任务表另需O(n)时间和空间,合计O(1+n+J log(1+J))时间。独立的证书验证会扫描所有段和作业,不能把穷举oracle的指数工作混入调度器成本。

有限需求检查不一定便宜。令Q=ΣᵢH/Tᵢ,先生成并排序至多Q+1个候选点,再每点求n项需求,简单实现需O(n+Q log(1+Q)+nQ)整数操作、O(n+Q)工作空间。H可能随输入位长指数增长;保存全部表行还要O(1+nQ)个整数的输出空间,因为每行附n个任务份数;实际大整数乘除、最小公倍数计算和这些整数的位成本另计。有限判据不等于位模型多项式算法。

审核失败时,保留容量差 ​

返回失败点t时,同时输出每任务份数、总需求与容量;这些份数连同C/D/T可以重建从0开始的同步作业清单,无需为巨大的H把每份作业都存进报告。别人不用相信调度器,就能检验dbf(t)>t。返回成功时,保存C/D/T、H、U及全部检查点,有限检查的覆盖性由上面的证明承担。

若分析预算不足以枚举巨大的H,应返回“尚未完成判定”,不能把当前已检查前缀当作全部可调度。截止期证书终点分别保留数学成功、数学失败和计算预算不足这三种出口。

参考资料
  1. Lipari、George、Bini、Bertogna,On the Average Complexity of the Processor Demand Analysis for Earliest Deadline Scheduling,2013,§2,印刷pp.76–77(PDF第80–81页),式(1)–(3)及Theorem 1;§5说明超周期检查点数量。本文展开计数、忙区间及超周期覆盖证明,不实现文中的约束消除优化。
  2. Liu、Layland,Scheduling Algorithms for Multiprogramming in a Hard-Real-Time Environment,1973,§7,pp.55–58:按当前deadline动态赋优先级及隐含截止期利用率结论。本页显式区分相对与绝对期限。
关系图谱4 个相邻概念 · 2 类关系

拖动节点调整位置。

显示关系

显示:依赖

  1. 前置三跳
  2. 前置二跳
  3. 前置一跳
  4. 当前条目
  5. 后续一跳
  6. 后续二跳
  7. 后续三跳
文字版关系按与当前条目的最短距离分组
类型化关系

使用的工具