一种基于时间片段的任务调度方法与流程

文档序号:17881542发布日期:2019-06-13 10:44阅读:151来源:国知局
一种基于时间片段的任务调度方法与流程

本发明属于操作系统领域,尤其涉及到一种基于时间片段的任务调度方法,可用于同构多处理器系统。



背景技术:

任务调度方法是在设计高性能的多处理器系统时必须考虑的关键性问题。随着全球能源紧缺的加剧,如何降低处理器能耗已经引起越来越多的关注。因此,一个好的任务调度方法可以使系统在保证服务质量的同时,还能在尽可能低的额定功率下运行,以达到节能目的。

现有的背景技术,通常采用如图1所示的开环调度方法。多个任务进入多处理器系统时,系统会根据各个任务的大小为每个任务估计一个执行时间。当一个任务在某个处理器上执行时,将在估计执行时间内一直占用这个处理器。鉴于估计执行时间都是基于最坏情况给出的,故而任务实际上常常比估计执行时间要提前完成,之后剩余的这段时间内,即使处理器上并没有任务在运行,却仍然要以前面执行任务时的运行频率运行,这时,不仅剩余的这段时间被白白浪费掉了,而且还会产生不必要的能耗。

任务的估计执行时间与实际执行时间相差越大,说明系统环境的不确定性越大,系统浪费的能耗也就越大。因而,需要找到一种任务调度方法,来克服系统环境的不确定性带来的能源浪费。



技术实现要素:

本发明提出一种基于时间片段的任务调度方法,利用已完成任务的反馈信息来实时调整系统的任务调度表,使系统一直处于最佳工作状态,从而达到减小总能耗的目的。

为实现上述目的,本发明的技术方案包括:

一种基于时间片段的任务调度方法,包括以下步骤:

步骤一:每当系统监测到有新任务到达或者有任务执行结束时,系统中的任务参数进行初始化;

步骤二:对任务拆分,并确定任务执行时间片段;

步骤三:确定任务的执行顺序,并输出任务调度表;

步骤四:系统实时更新任务调度表,按照时间片段的先后顺序,依次控制各处理器执行任务。

进一步根据所述基于时间片段的任务调度方法,步骤一中每当系统监测到有新任务到达或者有任务执行结束时,系统中的任务参数进行初始化;

系统中的任务总数为N,以1,2,...,N对系统中的任务进行编号,编号组成的集合表示为I,I={1,2,...,N},则系统中所有任务的集合可以表示为T,T={Ti|i∈I};bi表示任务的到达时间,xi表示任务的估计最少执行时间,di表示任务的执行时限,则集合T中任一任务Ti用Ti=(bi,xi,di)表示;若任务Ti在bi时刻到达,则它必须在接下来的di时间内完成,即截止时刻为bi+di;

xi为处理器在最坏情况下以最大频率执行该任务时所需的时间,故而任务的实际最少执行时间yi要比xi小,设γi为实际执行时间估计系数,则有yi=γixi,0<γi≤1,γi越小,系统中任务参数的不确定性越大。

进一步根据所述基于时间片段的任务调度方法,步骤二中对任务拆分,并确定任务执行的时间片段;

对任务集T中的所有任务,从第一个任务开始到第N个任务依次作如下映射:第1个任务T1的到达时刻b1映射到时刻τ0,截止时刻b1+d1映射到时刻τ1,满足τ1-τ0=d1;第2个任务T2的到达时刻b2映射到时刻τ1,截止时刻b2+d2映射到时刻τ2,满足τ2-τ1=d2;…;第N个任务TN的到达时刻bN映射到时刻τN-1,截止时刻bN+dN映射到时刻τN,满足τN-τN-1=dN;t1,t2满足t1=τ0<τ1<...<τN=t2,于是时间间隔[t1,t2]就被τ0,τ1,...,τN分割成许多小段的时间片段;用μ来标识上述的{τ0,τ1,...,τN}中的元素,μ∈U,U={0,1,…,N-1},[t1,t2]内的一个时间片段可用[τμ,τμ+1]来表示,确保至少需要1个处理器就可以在[t1,t2]时间内完成任务集T里所有的任务;

系统中包含m个完全相同的处理器,每个处理器的运行频率f1,f2,...,fmax(f1<f2<...<fmax),用运行频率等级集合Q={1,2,...,l}来表示,其中1对应最小的运行频率f1,l对应最大的运行频率fmax;所述处理器的电压/频率分别通过动态电压频率调节DVFS技术独立地进行调整,多个处理器可以同时分别以不同的速率等级执行不同的任务;

所述任务集T中的单个任务可以拆分成多个子任务来分步执行,再确定子任务将在哪个执行时间片段,以及执行时长和运行频率等级;

用q表示处理器的一个运行频率等级,q∈Q,把称为负载分布系数,表示处理器将在时间间隔[τμ,τμ+1]上某一时长为的时间区间内以运行频率等级q执行任务Ti,任务T1的负载分布系数集合为表示处理器要在2个时间片段上共3次才能执行完该任务;在时间片段[τ0,τ1]上,一次以运行频率等级1执行[τ0,τ1]中的其中0.4·(τ1-τ0)秒,一次以运行频率等级2执行[τ0,τ1]中的其中0.2·(τ1-τ0)秒,并且这两次执行必须是有序执行,即等前一次执行完成后才能执行下一次,而不能是两次执行同时进行;在时间片段[τ1,τ2]上,以运行频率等级1执行[τ1,τ2]中的其中0.3·(τ2-τ1)秒,在这次执行完成以后,则说明整个任务T1完成;

有如下约束条件:

(1)一个任务一次只能被指派到一个处理器上被执行,于是有μ∈U;

(2)每个处理器在[τμ,τμ+1]内所能处理的最大负载为1,即在[τμ,τμ+1]内该处理器上一直都有任务在执行,而系统包含m个处理器,故系统在[τμ,τμ+1]内所能处理的最大负载即为m,于是有

处理器的标准化运行速率s与运行频率f之间的关系为s=f/fmax,f∈[f1,fmax],s∈[0,1],此时相应的功率由P(sq)给出,于是在时间间隔[t1,t2]内系统的总能耗

所述步骤二中方法等价为一个目的变量和约束条件数量可控的有限维线性规划问题,即求出所有任务在各时间片段内的负载分布系数使得系统在整个时间间隔[t1,t2]内的总能耗E(t1,t2)达到最小;

从而得到负载分布系数集合表示某一处理器将在时间间隔[τμ,τμ+1]中某一时长为的时间区间内以运行频率等级q执行任务Ti。

进一步根据所述基于时间片段的任务调度方法,步骤三中确定任务的执行顺序,并输出任务调度表;

用1,2,...,m对所有处理器进行编号,编号组成的集合表示为K,K={1,2,...,m};i∈I,表示任务编号;k∈K,表示处理器编号;q∈Q,表示频率运行等级;在时间间隔[t1,t2]内的某一时间片段中,用起始系数表示处理器k在时刻开始以模式q运行任务Ti,用截止系数表示在时刻结束该任务的本次执行,具体按如下步骤执行:

(3-1)给所有任务在所有时间片段内的起始系数和截止系数均置0,向系统申请一个处理器用于执行任务,称该处理器处于活跃态,其它暂未被申请过的处理器称为空闲态,此时处于活跃态的处理器最大编号为k=1;

(3-2)按照任务编号i递增的顺序,从第1个任务开始,依次为任务集T中的各任务确定起始系数和截止系数;对第1个任务,其截止系数赋值为从第2个任务开始一直到第N个任务,将前一任务的截止系数作为本任务的起始系数;

(3-3)此时处于活跃态的处理器最大编号为k,若前一个任务的截止系数加上本任务的负载分布系数之和不大于处理器最大编号k,则对所有的执行频率等级q,本任务在处理器k上以速率等级q执行时的截止系数设置为本任务的起始系数加上负载分布系数的和,本任务分配完毕,则返回步骤3-2,开始下个任务分配;

若前一个任务的截止系数加上本任务的负载分布系数之和大于处理器最大编号k,则将本任务在处理器k上以速率等级q执行时的截止系数设置为1,说明已分配的处理器已经达到满负载,故再向系统申请一个处理器;申请规则为:第1次申请的处理器其编号为1,第2次申请的处理器编号为2,……,第m次申请的处理器编号为m;若申请的次数超过任务执行模块中处理器的最大数量,则说明系统出错,本次任务调度结束,此时处于活跃态的处理器最大编号为k=k+1;将本任务的负载分布系数减去本任务在处理器k-1上以速率等级q执行时的截止系数与起始系数的差,作为本任务在处理器k上以速率等级q执行时的截止系数;返回步骤3-2,开始下个任务分配;

(3-4)所有任务分配完毕后,输出包含所有任务的起始系数和截止系数的一个集合该集合为任务调度表。

进一步根据所述基于时间片段的任务调度方法,步骤四中系统实时更新任务调度表,按照时间片段如[τ0,τ1],[τ1,τ2],……,[τN-1,τN]的先后顺序,依次控制各处理器执行任务;在时间片段[τμ,τμ+1]内,根据和的值,任务执行模块控制处理器k于时刻以运行频率等级q开始执行任务Ti,并于时刻结束该本次任务的执行;

每个任务Ti结束时,任务执行模块将该任务的结束信息及时反馈到开始的输入端,当系统中所有任务执行完毕时,本次任务调度结束。

本发明与现有技术相比,具有如下优点:

1.本发明中,采用了反馈的方法,将已完成任务的信息实时反馈给输入端,加快了系统对任务调度表的有效更新,可以大大减少系统环境的不确定性带来的影响,系统使得处理器的利用率和系统总的处理速率得以提升。

2.本发明中,由于任务提前完成所剩余的时间,可以被回收利用,来执行其它任务,这对提高系统性能和降低系统的总能耗都是有利的。

附图说明

图1为本发明所述方法的实现框架图;

图2为本发明所述方法的实现流程图;

图3为将单个任务拆分成多个子任务的示例图;

图4为将多个任务按任务执行时限映射到时间轴上的示例图。

具体实施方式

为使本发明的目的、技术方案及优点更加清楚明白,以下结合附图,对本发明所述方案和效果作进一步详细描述。

本发明所述一种基于时间片段的任务调度方法,如图1和图2所示,具体实施步骤如下:

步骤一:每当系统监测到有新任务到达或者有任务执行结束时,系统中的任务参数进行初始化。

系统中的任务总数为N,以1,2,...,N对系统中的任务进行编号,编号组成的集合表示为I,I={1,2,...,N},则系统中所有任务的集合可以表示为T,T={Ti|i∈I}。用bi表示任务的到达时间,xi表示任务的估计最少执行时间,di表示任务的执行时限,则集合T中任一任务Ti用Ti=(bi,xi,di)表示。若任务Ti在bi时刻到达,则它必须在接下来的di时间内完成,即截止时刻为bi+di。

xi为处理器在最坏情况下以最大频率执行该任务时所需的时间,故而任务的实际最少执行时间yi要比xi小,设γi为实际执行时间估计系数,则有yi=γixi,0<γi≤1。γi越小,系统中任务参数的不确定性越大。

步骤二:对任务拆分,并确定任务执行的时间片段。

对任务集T中的所有任务,从第一个任务开始到第N个任务依次作如下映射:第1个任务T1的到达时刻b1映射到时刻τ0,截止时刻b1+d1映射到时刻τ1,满足τ1-τ0=d1;第2个任务T2的到达时刻b2映射到时刻τ1,截止时刻b2+d2映射到时刻τ2,满足τ2-τ1=d2;…;第N个任务TN的到达时刻bN映射到时刻τN-1,截止时刻bN+dN映射到时刻τN,满足τN-τN-1=dN。如图3所示,设t1,t2满足t1=τ0<τ1<...<τN=t2,于是时间间隔[t1,t2]就被τ0,τ1,...,τN分割成许多小段的时间片段。用μ来标识上述的{τ0,τ1,...,τN}中的元素,μ∈U,U={0,1,…,N-1}。[t1,t2]内的一个时间片段可用[τμ,τμ+1]来表示,确保至少需要1个处理器就可以在[t1,t2]时间内完成任务集T里所有的任务。

系统中包含m个完全相同的处理器,每个处理器的运行频率f1,f2,...,fmax(f1<f2<...<fmax),用运行频率等级集合Q={1,2,...,l}来表示,其中1对应最小的运行频率f1,l对应最大的运行频率fmax。处理器的电压/频率分别通过动态电压频率调节DVFS技术独立地得到调整,多个处理器可以同时分别以不同的速率等级执行不同的任务。

如图4所示,任务集T中的单个任务可以拆分成多个子任务来分步执行,再确定子任务在哪个执行时间片段,以及执行时长和运行频率等级。

用q表示处理器的一个运行频率等级,q∈Q,把称为负载分布系数,表示处理器将在时间间隔[τμ,τμ+1]上某一时长为的时间区间内以运行频率等级q执行任务Ti,任务T1的负载分布系数集合为表示处理器要在2个时间片段上共3次才能执行完该任务。在时间片段[τ0,τ1]上,一次以运行频率等级1执行[τ0,τ1]中的其中0.4·(τ1-τ0)秒,一次以运行频率等级2执行[τ0,τ1]中的其中0.2·(τ1-τ0)秒,并且这两次执行必须是有序执行,即等前一次执行完成后才能执行下一次,而不能是两次执行同时进行。在时间片段[τ1,τ2]上,以运行频率等级1执行[τ1,τ2]中的其中0.3·(τ2-τ1)秒,在这次执行完成以后,则说明整个任务T1完成。

并且对有如下约束条件:

(1)一个任务一次只能被指派到一个处理器上被执行,于是有μ∈U。

(2)每个处理器在[τμ,τμ+1]内所能处理的最大负载为1,即在[τμ,τμ+1]内该处理器上一直都有任务在执行,而系统包含m个处理器,故系统在[τμ,τμ+1]内所能处理的最大负载即为m,于是有

处理器的标准化运行速率s与运行频率f之间的关系为s=f/fmax,f∈[f1,fmax],s∈[0,1],此时相应的功率由P(sq)给出,于是在时间间隔[t1,t2]内系统的总能耗

所述步骤二中方法等价为一个目的变量和约束条件数量可控的有限维线性规划问题,即求所有任务在各时间片段内的负载分布系数使得系统在整个时间间隔[t1,t2]内的总能耗E(t1,t2)达到最小。

进而得到负载分布系数集合表示某一处理器将在时间间隔[τμ,τμ+1]中某一时长为的时间区间内以运行频率等级q执行任务Ti。

步骤三:确定任务的执行顺序,并输出任务调度表。

用1,2,...,m对所有处理器进行编号,编号组成的集合表示为K,K={1,2,...,m}。i∈I,表示任务编号;k∈K,表示处理器编号;q∈Q,表示频率运行等级。在时间间隔[t1,t2]内的某一时间片段[τμ,τμ+1]中,用起始系数表示处理器k在时刻开始以模式q运行任务Ti,用截止系数表示在时刻结束该任务的本次执行。按如下步骤执行:

(3-1)给所有任务在所有时间片段内的起始系数和截止系数均置0,向系统申请一个处理器用于执行任务,称该处理器处于活跃态,其它暂未被申请过的处理器称为空闲态。此时处于活跃态的处理器最大编号为k=1。

(3-2)按照任务编号i递增的顺序,从第1个任务开始,依次为任务集T中的各任务确定起始系数和截止系数。对第1个任务,其截止系数赋值为从第2个任务开始一直到第N个任务,将前一任务的截止系数作为本任务的起始系数。

(3-3)此时处于活跃态的处理器最大编号为k,若前一个任务的截止系数加上本任务的负载分布系数之和不大于处理器最大编号k,则对所有的执行频率等级q,本任务在处理器k上以速率等级q执行时的截止系数设置为本任务的起始系数加上负载分布系数的和。本任务分配完毕,返回步骤3-2,开始为下个任务分配;

若前一个任务的截止系数加上本任务的负载分布系数之和大于处理器最大编号k,则将本任务在处理器k上以速率等级q执行时的截止系数设置为1,说明已分配的处理器已经达到满负载,故再向系统申请一个处理器。申请规则为:第1次申请的处理器其编号为1,第2次申请的处理器编号为2,……,第m次申请的处理器编号为m。若申请的次数超过任务执行模块中处理器的最大数量,则说明系统出错,本次任务调度结束,此时处于活跃态的处理器最大编号为k=k+1。将本任务的负载分布系数减去本任务在处理器k-1上以速率等级q执行时的截止系数与起始系数的差,作为本任务在处理器k上以速率等级q执行时的截止系数。返回步骤3-2,开始为下个任务分配。

(3-4)所有任务分配完毕后,输出包含所有任务的起始系数和截止系数的一个集合为任务调度表。

步骤四:系统实时更新任务调度表,按照时间片段如[τ0,τ1],[τ1,τ2],…,[τN-1,τN]的先后顺序,依次控制各处理器执行任务。在时间片段内,根据和的值,任务执行模块控制处理器k于时刻以运行频率等级q开始执行任务Ti,并于时刻结束该本次任务的执行。

每个任务Ti结束时,任务执行模块将该任务的结束信息及时反馈到开始的输入端。当系统中所有任务执行完毕时,本次任务调度结束。

上述仅仅是为清楚地说明本发明所作的举例,并非对实施方式的限定。对于所属领域的普通技术人员来说,在上述说明的基础上还可以做出其他不同形式的变化或变动。这里无需也无法对所有的实施方式予以穷举,而由此所引申出的显而易见的变化或变动仍处于本发明的保护范围之中。

当前第1页1 2 3 
网友询问留言 已有0条留言
  • 还没有人留言评论。精彩留言会获得点赞!
1