在实时系统中,所有的任务分成了两类:
- 周期任务: 有固定的到达时间
- 非周期任务:没有固定的到达时间
这两类任务再根据deadline的类型又可以分成两类,不过,这篇论文里周期任务全部假设为 hard deadline,所以一共可以分成三类任务。
deadline的分类:
- hard deadline:如果达到该deadline对整个系统接下来的操作有关键影响,则被认为是hard deadline。
- soft deadline:最好能满足,不满足的时候对系统没有关键影响。
periodic task假设条件:
- 每一个任务都有已知的最差执行时间
- 所有的周期任务都是 hard deadline
- 每一个周期任务的执行时间都是固定的
- 每一个周期任务的 deadline = 当前周期的终止时刻
Schedulable utilization:调度利用率,低于或等于该指标时,所有的hard deadline 都可以被满足。该指标越高,说明算法的适用性更强
调度稳定性:在过载的情况下,依然能满足关键任务(periodic task和 sporadic task)的deadline,其他任务的deadline可以不被满足
评价一个实时系统中调度算法优劣的两个指标:
- 能否保证hard deadline被满足
- 给soft deadline任务提供的平均响应时间
Scheduling periodic tasks
rate monotonic
- 该算法是基于一种固定优先级的调度算法,优先级根据 periodic task 的周期来设定。 周期较短的 优先级就会相应高一些。
- 该算法是 real-time system 整个调度算法的基础,后续的算法都是以它为基石,再做优化。
- 允许抢占
Scheduling aperiodic tasks
scheduling soft deadline aperiodic tasks
background processing
- 处理机是 idle 状态时(没有正在处理的periodic task,也没有待办的 periodic task),才会去处理aperiodic task
- 如果periodic task很多,那么用该算法频率就会降低缺点:对待 aperiodic task 的响应时间会比较久。
总结: 先处理完 periodic task 再处理 aperiodic task,非周期任务可以被任意地延误
polling task
- polling tasks 会创建一个 periodic task(server)专门用来处理 aperiodic tasks。因此该 task 会循环地启动,来处理待办的 aperiodic task。
- 该server地优先级取决于它本身的周期
- 如果启动这个server时,没有待处理的aperiodic任务,那么该task 被挂起,直到下一个周期再次被启动。
- 没有处理aperiodic task时,这部分时间就会被用于处理periodic task
- server中剩余的时间都会被丢弃
总结:和 background processing相比,periodic task 没有了绝对的优先权。不会无限延迟aperiodic task。
缺点:时间要求比较严格
后面迭代出的新的算法针对polling tasks算法无法保留带宽的特性,而做出了改进。所以后面的算法都属于bandwidth preserving algorithm
deferrable server
- DS中创建的server一般为高优先级
- DS会为aperiodic task保留一个周期的响应时间,即使aperiodic task出现晚于server,但是只要还在这个周期内,该aperiodic task请求都可以被响应。
- 如果处理aperiodic task后还有剩余处理时间,会为其保留至周期末。
- 每一个新周期开始时填满server的容量。
- DS引入了capacity的概念,表示一个周期内server剩余的可处理aperiodic task的时间
- DS对aperiodic task的提交时间有了更宽的包容,不需要和server在同一时间点出现。
sporadic server
- SS算法是对PE算法的一种简化,和DS算法更相似。
- SS算法不会固定在server的每个周期开始时补满时间,而是基于 aperiodic task被响应的时间 + server period 时确定填充时间。
- 在一个周期内为其保留和server相同优先级的执行时间。
- 减少了运行的开销。因为DS算法都会固定每个周期为 server 填充时间,不管这个周期内有没有服务。但是SS只会在aperiodic task被服务后才会填充。也就是说,这部分填充时间的开销不是每个周期都会发生。
- 补充的时间额度也不是每个周期都补满,而是取决于上一个处于active状态时消耗的时间。
相关参数
- Ps:当前系统处于的优先级
- Pi:优先级的表示方式。P1最高
- Active:Ps >= Pi,则Pi优先级为Active状态
- Idle:Ps < Pi,则优先级Pi为Idle状态
- RTi:何时给Pi优先级的server补充时间
- replenishment:补充多少时间
- RTi发生的条件:Pi从idle状态变成active状态时,先检查此时server中是否还剩时间,若剩时间则RTi可生成,否则不生成。
- replenishment:在sporadic server变为idle状态时,去检查上个active状态里消耗的时间
sporadic server算法应用于soft deadline aperiodic tasks
<1> high priority
<2> equal high priority
<3> medium priority
server被更高优先级的任务抢占,导致不连续的消耗,但是这并没有让server的优先级变为idle状态,所以可以让不连续的消耗变为连续的补充。
新的问题
一个周期任务如果当下可以执行,就必须执行,如果延迟了执行,可能就会导致该任务最后没有办法满足其deadline,这也是rate monotonic算法的一种规定。DS和SS本身就类似一个周期任务,但是却违反了这项约束:都保留了带宽,并没有在第一时间执行。后面的证明表明SS的补充算法是可以继续保持满足deadeline,所以SS仍然可以被当作一个周期任务处理,而DS则不行。
实例
-
正常三个周期任务
-
DS替换B任务
- SS替换B任务
证明SS = 周期任务
- SS可以和周期任务有一样的属性:周期和执行时间
- SS在active状态里消耗的时间:
- 消耗为0
- 消耗所有
- 消耗部分
Scheduling sporadic tasks
sporadic task假设条件
- sporadic task必须有一个最小的 interarrival time——minimum,若没有该限制,任务的hard deadline 无法保证总是被满足
- minimum等于或大于服务该sporadic task的server的周期
- sporadic task的deadline等于或大于minimum
server period <= minimum <= hard deadline
如果deadline < minimum,此时再基于rate monotonic算法就不能保证总是满足其deadline
如果这是把该SS简单看成一个周期为10的周期任务,那么他的优先级就变成最高了,虽然可以避免逾期,但是对资源的要求很高,因为8/10=80%,这是一种很浪费的策略。
这种情况下就要利用 deadline monotonic priority assignment算法重新定义优先级
deadline monotonic priority assignment
- server的优先级取决于它服务的task的deadline的优先级,而不是server的周期了
- 其他的周期任务的优先级依然按照其周期排序,不过也可以理解为按deadline排序,因为周期任务的deadline默认等于周期
总结