分布式实时系统中,很多任务同时尝试访问共享资源(如处理器和网络),调度试图有效地利用这些资源来解决问题,以保证系统是正确的,换句话说是保证系统符合其所有的时间限制。
调度的运行可以采取操作系统形式,由操作系统直接控制硬件;也可采用中间件形式,中间件位于操作系统和应用程序之间。
针对给定的系统资源和一组实时任务,确定每个任务何时何处执行的整个过程称为调度。
实时调度理论中,主要研究任务实时调度算法和可调度性分析。
静态调度与动态调度: 根据调度器做出调度决策的时刻进行区分。
静态调度——调度器的调度决策是在编译时做出的,那么这种调度器是静态的(运行前的),调度器退化为分派器。
动态调度——调度器的调度决策是在运行期间做出的,即从多个处于“就绪”状态的任务里选择一个任务。动态调度器非常灵活,适合在任务情形不断变化的情况下使用。
任务通常为进程和线程的统称,是实时操作系统获取资源、进行调度的基本单位。
非抢占式调度——一旦处理器给予某个任务,这个任务就一直运行下去,不会被其他任务( 即使其他任务的优先级更高 ) 抢占,直到该任务自己释放处理器。
优先级:许多任务调度是以任务的优先级为基础的。在这种系统中 每 个任 务 都 与 优先 级 编 号 (priority number )相联系 ,优先级编号一般为整数 ,可以是固定的,也可以是变化的 。如下图(非抢占式):
低优先级任务 T1
高优先级任务 T2
抢占式调度——如果优先级高于当前运行任务的新任务准备运行,那么当前运行的任务可以被抢占(被中断),即可以切换到优先级更高的新任务 。
优先级:许多任务调度是以任务的优先级为基础的。在这种系统中每个任务都与优先级编号(priority number )相联系 ,优先级编号一般为整数 ,可以是固定的,也可以是变化的 。如左图(抢占式):
低优先级任务 T1
高优先级任务 T2
可调度性分析:对于一组给定的任务,如果所有任务都能满足截止时间要求,那么这些任务是可调度的。当系统采用动态调度算法时,若有新任务需要加入系统,则应该进行可调度性分析。可调度性是评价任务调度算法优劣的重要指标 。
基于CPU利用率的分析——首先计算处理器利用率,然后通过一个与该利用率相关的测试条件来判定系统的可调度性。
基于最大响应时间的分析方法——将整个分析过程分为两个阶段:分析和判定。分析阶段分析各个任务的最大响应时间,判定阶段将分析阶段得到的任务最大响应时间与该任务的截止时间进行比较。如果所有任务的最大响应时间都不大于其截止时间,则系统是可调度的。
基于CPU利用率的测试:一组处于“就绪”状态的任务是否可以通过调度,使得每个任务满足其截止时间要求,可以通过基于CPU利用率的分析方法进行判定,这种方法又称为可调度性测试。
可调度性测试分为三类:充要的(exact)、充分的(sufficient)和必要的( necessary)。
充要可调度性测试算法的复杂性属于一类NP完全(NP-complete) 问题,即使只有一个共享资源也难以实现。一般只做必要性、充分性测试。
周期性任务按一定的周期到达并请求执行。
零星任务的请求时间是不可预知的,但任意两个请求时间之间存在一个最小时间间隔,可以将零星任务当成周期性任务处理,其任务周期为最小时间间隔。
不定期任务的请求时间不能预先确定,无规律可言。
【定理1】如果某任务组中的任务是周期性的,那么必要可调度性测试的条件是任务组里的各个任务的利用系数之和必须满足:
其中n为任务数,m为处理器个数。
零星任务可以按【定理1】进行必要可调度性测试,任务周期设置为任意两个请求时间之间的最小时间间隔。不定期任务的请求时间没有任何约束,前面介绍的必要可调度性测试条件无效 。
一般情况下,通过必要可调度性测试得到的肯定结论并不具备充分性。
不同性能调度器导致(a)不可调度,(b)可调度;不满足充分条件!
【定理2】任务间的关联关系得到满足的情况下,若任务的最大响应时间不大于任务的截止时间,则该任务称为可调度的。如果任务组中的所有任务都是可调度的,那么该任务组是可调度的。
1)排列最低优先级任务(本例为T4)的持续时间(周期)和截止时间。
2)画出能够抢占最低优先级任务的任务/ISR,并根据抢占情况移动低优先级任务。
3)确定每个任务和ISR可能发生的抢占,并进行恰当移动。
4)重复上述过程,直到最低优先级任务的持续时间结束。
5)判断每个任务是否满足其截止时间要求。
【定理3】设某任务组中的任务是相互独立的、周期性的。在所有任务同时到达的最坏情形下,如果每个任务满足其第一个截止时间要求,那么所有任务的截止时间将始终得到满足。
[例2]设任务组由表中的3个相互独立的任务构成,T1的优先级最高,T3的优先级最低。试判断系统的可调度性
【定理3】续:每个任务的响应时间为Ri。计算推导如下: