专利名称:基于smp的aedf任务调度方法
技术领域:
本发明涉及的是一种提高计算机处理速度的方法,具体地说是一种计算机 SMP体系结构中处理器任务调度方法。
(二)
背景技术:
多处理器技术是提高计算机运行速度的一种有效技术,它通过多任务并行运 算来协同求解复杂问题,以提高计算机的性能;同时,该技术能够利用冗余处理 器实现系统重构,来提高系统的可靠性和可用性。
对称多处理器结构(SMP: SymmetricMulti-Erocessor)是一种典型的应用于企 业服务器的多处理器体系结构。SMP是一种包含了两个或多个相连处理器、协 同处理同一套任务的计算机体系结构。通常,SMP中采用完全相同的处理器, 每个处理器含有独占的高速缓存(Cache),各个处理器通过一条总线实现内存等 其他系统资源的共享。
将大量任务合理、高效地分配到相应的处理器上是SMP系统研究的重点问 题之一。当前,SMP结构下任务调度方法主要有静态分配、动态分配、自调度 三种形式。
静态分配调度方法是指一个任务从开始执行直至完成,都会被分配到同一台 处理器上运行。每个处理器上都维护一个专用的就绪进程队列。静态分配调度方 法的优点是任务调度的开始小,缺点是使各处理机忙、闲不均。
动态分配调度方法是指在系统中设置一个公共的就绪队列,该队列存放着系 统中所有的就绪任务。任务调度时,就将被调度到的任务随机的分配到系统中的 任一处理器上运行。这种调度方法消除了处理机忙闲不均的现象;但同时造成处 理器的cache命中率降低,增加了系统的开销。
自调度调度方法在系统中同样设置一个公共的就绪队列,系统中的所有任务 都被挂在该队列上。每个处理器在空闲时,就去查看公共就绪队列,从中选择一 个任务到该处理器上执行。这种调度方式实现了系统中各处理器的负载均衡;但 由于系统中共享一个公共队列,要求系统保证各个处理器必须互斥访问就绪队列,导致了任务分派效率的降低。
发明内容
本发明的目的在于提供一种能合理地分配处理器资源,有效地提高SMP中 各个处理器资源的利用率,缩短完成全部任务所需的执行时间,使得SMP的运 行效率和使用效率得到有效改进的基于SMP的AEDF任务调度方法。
本发明的目的是这样实现的 其具体方法步骤为
1、 初始化任务的资源使用参数表;
2、 将已初始化的任务根据其下一周期计时时刻从小到大顺序插入到最优可 用处理器号对应处理器的等待队列Wait—化中;假定最小可用处理器号为i, i6,其对应的处理器为pi,该处理器的等待队列为Wait—qi;然后将i进行 加一、对N取模操作,即1= (i+l) %N;
3、 如果已初始化任务的特权标记为真,执行步骤4;否则,执行步骤5;
4、 将已初始化的任务插入到Eutil_qi队列队尾;
5、 如果处理器pi当前任务指针不为空,执行步骤6;否则,执行步骤14;
6、 将处理器pi当前任务RTu从就绪队列Ru皿able一qi队列中删除;
7、 如果当前时刻小于处理器pi的下次调度时刻,当前任务RTu被抢占或 阻塞,将虹|1插入到阻塞队列?^(^1队尾,并设置当前任务RT"的截止期限值 为RTu的截止期限+ RT"的周期-pi的下次调度时刻,并将Runnable—q,指向 RTii的下一个元素,执行步骤14;否则,暂停当前任务RTu的运行,计算任务 RTu下一周期的截止期限RTu的截止期限+ RTu的周期;并任务RT"按照任务 截止期限从小到大的顺序插入到等待队列Wait一q,中,执行步骤8;
8、 如果任务RTn的运行时间大于RTii的时间片,RTn运行超时,执行步骤 9;否则,执行步骤13;
9、 如果任务RTii的周期的双倍值大于其源周期,将RTu的周期与源周期的 值互换,执行步骤1U否则,执行步骤10;
10、 设置任务RT"的源周期为RTii的当前周期的值,并将RTu的当前周期 的值翻倍;
11、 如果任务RTu的时间片的双倍值大于其源时间片,将RTi!时间片与其源时间片的值互换,执行步骤13;否则,执行步骤12;
12、 设置任务RTu的源时间片为RT"的当前时间片的值,并将RTu的当前 时间片的值翻倍;
13、 设置任务RTu的截止期限RTu的截止期限+ RTu的周期;
14、 如果就绪队列Runnable一q,非空,执行步骤15;否则,执行步骤16;
15、 设置RTc为pi的预备任务,将RT"从就绪队列Ru皿able一q,中删除,并 将Runnable—qi指向RTU的下 一个元素,执行步骤21;
16、 如果阻塞队列PencLqi非空且阻塞任务PEi,下一个周期计时时刻小于或 等于当前时刻,将阻塞任务PEu从Pend一qi中删除,并将其按最后期限值从小到 大的顺序插入到就绪队列Runnable一qi队列,设置其为pi的预备任务,并将PencLqj 指向PEu的下一个元素,执行步骤21;否则,执行步骤17;
17、 如果等待队列Wait一q,非空且等待任务WTi,的下一个周期计时时间小于 或等于当前时刻,将WTu从Wait—qi中删除,并将其按最后期限从小到大的顺序 插入到就绪队列Runnable—qi中,设置WTU为pi的预备任务;并将Wait—q,指向 WTu的下一个元素,执行步骤21;否则,执行步骤18;
18、 如果特权队列Eutil—qi非空,执行步骤19;否则,执行步骤20;
19、 将特权任务EUii从Eutil一q,中删除,将其按最后期限值从小到大的顺序 插入到Ru腿ble一qi队列,设置EU"为pi的预备任务,并将Eutil—qi指向EU"的 下一个元素,执行步骤21;
20、 设置处理器pi的空闲任务为pi的预备任务;
21、 通过处理器的下次调度时刻的计算方式计算pi下次调度时刻,设置pi 的预备任务的运行时间为pi的下次调度时刻与当前时刻的差值;
22、 如果处理器pi的预备任务的可迁标记为假,执行步骤24;否则,执行 步骤23;
23、 如果当前时刻与处理器pi的预备任务的迁移起始时刻的差值小于其迁 移时限,或系统中的空闲可用处理器集为空,执行步骤24;否则,执行步骤25;
24、 调度处理器pi的预备任务到处理器pi上运行,即设置其为pi的当前任 务,执行步骤26;
25、 计算空闲可用处理器集的最小空闲可用位,将pi的预备任务迁移到处理器最小空闲可用位对应的处理器上运行;
26、 查看系统中是否有新的任务,如果有新的任务,则执行步骤l;否则, 执行步骤27;
27、 调度结東。
所述的资源使用参数表包括周期、时间片、截止期限、运行时间、源周期、 源时间片、下一周期计时时刻、迁移起始时刻、可迁标记、特权标记、迁移时限、 当前时刻、空闲可用处理器集、最小空闲可用位、最优可用处理器号、当前任务、 空闲任务、预备任务、Runnable—qi、 Wait—qh Eutil_qi、 Pend—q卜下次调度时刻。
本发明是一种运行在SMP上、基于自适应的动态负载平衡方法。该方法能 够实时跟踪SMP中当前各处理器的负载状况,动态将不同任务合理地分配到负 载较小的处理器中在任务调度过程中,方法通过对被挂起任务(因被阻塞、被 抢占、定时器到期或运行超时等原因而暂时停止运行的任务)运行时长的统计, 来动态调整其下次运行的时间片、周期和截止时间。基于SMP的AEDF任务调 度方法能够综合分析当前处理器负载情况、任务完成情况和系统的运行情况,合 理地分配处理器资源,从而有效地提高SMP中各个处理器资源的利用率,缩短 完成全部任务所需的执行时间,使得SMP的运行效率和使用效能得到有效改进; 同时,该方法通过动态调度任务资源的执行顺序,优先保证了紧急任务执行的实 时性要求。
其主要创新点如下
1、 根据当前SMP上各处理器的负载情况,将即将运行的任务分派到相对空 闲的处理器中,从而,实现了处理器间的负载平衡,提高了处理器的利用率及系 统的吞吐量;
2、 根据任务的运行情况,动态的调整任务的运行周期,时间片及截止期限; 通过调整任务的运行周期及时间片,减少了任务的上下文切换次数,提高了任务 的执行效率;通过截止时间调整,提高了被阻塞任务执行优先级,保证了紧急任
务的实时性。
(四)
图1:具有N个处理器的SMP的结构模型图。 图2:具有N个处理器的SMP的数据结构图。
具体实施方式
下面结合附图举例对本发明做更详细地描述
设每个任务的资源使用参数表为(周期,时间片,截止期限,运行时间,源 周期,源时间片,下一周期计时时刻,迁移起始时刻,可迁标记,特权标记,迁 移时限),任务根据其所处状态分类为就绪任务,特权任务,等待任务和阻塞任 务。,们的定义如下
周期表示该任务的相对运行的相对截止时间,如周期为20ms表示任务从周期
计时开始,在20ms后必定截止运行;
时间片表示任务在一个周期内能运行的最长时间;
截止期限表示任务在一个周期内运行截止时刻;
运行时间表示任务从每次开始调度计时到运行结束实际占用处理器的时长;
源周期表示任务在当前周期更新前的周期;
源时间片表示任务在当前时间片更新前时间片;
下一周期计时时刻表示任务下一周期的开始计时时间;
迁移起始时刻表示任务迁移到其它处理器的时刻;
可迁标记表示为任务能否迁移到其它处理器的标记;
特权标记表示任务在处理器空闲时能否占用额外的处理器份额;当特权标记为 真时,如两个任务各被分配50%的处理器份额,当其中一个被死锁,那么另一 个将可占用100%处理器份额来运行。
迁移时限表示任务连续两次迁移到其它处理器的最少时间间隔。 就绪任务表示已获得了除处理器资源外其它运行时必需资源的任务; 特权任务表示特权标记为真的任务,该类型的任务能在处理器空闲时占用额外 的处理器份额。
等待任务表示还未到达其下一周期计时时刻的任务;
阻塞任务表示在运行过程由于运行所需的资源不足或有优先级更高的任务到 来,被抢占而暂停运行的任务。
系统中用全局变量当前时刻,空闲可用处理器集,最小空闲可用位和最优可 用处理器号记录着系统的状态;设系统中的每个处理器的资源使用参数表为(当 前任务、空闲任务、预备任务、就绪队列、等待队列、特权队列、阻塞队列、下 次调度时刻)记录该处理器的当前状态。如图l所示,SMP中有N个处理器,每个处理器都独立的Cache,各处理器通过系统总结共享内存空间。与图l相对
应的为SMP数据结构图,如图2如示,与处理器processorl, processor2,......,
processorN对应的处理器为pl, p2, p3, ......, pN。每个处理器上拥有四个任
务队列,如处理器pi上的四个队列分别为Runnable_qP Wait—qi, Eutil—qi和Pend一qi 队列,ie [1, N]。系统中用位图表示处理器集合,相应位为l表示该位对应 的处理器可用,否则,表示该位对应的处理器不可用。例如,......01101位图表
示处理器pl, p3, p4......可用。以上全局变量和处理器参数定义如下
当前时刻表示当前的系统时间,该参数返回从1970年1月1日0点以来的秒 数;
空闲可用处理器集为一位图类型变量,它表示SMP中既空闲又可用的处理器 集合,当所有位均为零,表示该位图为空;否则,为非空; 最小空闲可用位表示空闲可用处理器集中为1的最低位所在位置;如, 011010100位图的最小可用处理器号为3;
最优可用处理器号记录着任务初始化时应分配到处理器所对应的处理器编号。 当前任务为正在该处理器上运行的任务;
空闲任务为一空任务,不做任何操作,在该处理器空闲时运行; 预备任务已经被调度并即将在该处理器上运行的任务;
Rimnable_qi:为处理器pi上就绪队列队头,其下一元素RT,为pi的当前任务, 其它元素为该处理器上的就绪任务,该队列中任务用RTy表示,此类任务按照其 截止期限从小到大的顺序排列;
Wait—qi:为处理器pi上等待队列队头,该队列用于放等待任务,该队列中的任 务用WT,j表示,此类任务按照其下一周期计时时刻从小到大的顺序排列; Entil_qi:为处理器pi特权任务队列队头,当一个任务插入Runnable—qi时,若其 特权标记为真,则将该任务也插入EutiLqi队列尾部,该队列中任务用EUij表示, 它们将按照先进先出的顺序被调度;
Peiid_qi:为处理器pi阻塞任务队列队头,当一个任务的时间片尚未用完就停止 运行时,将会被插入Pend一qi队列尾部,该队列中任务用PE,j表示,它们将按照 先进先出的顺序被调度。
下次调度时刻用于记录每个处理器正常情况下,即当前任务未被阻塞或被其它任务抢占时下一次进行任务调度的时间。因对称多处理器的每个处理完全一样, 下面,我们将以pi为例,其中,i€ [1, N]。讨论其下次调度时刻获取方式, 共分为以下六种情况
> Runnable_qi, Wait一qi队列均非空,Pend—qi队列为空,
nst_w = MIN ((当前时刻的时间片-RTu的运行时间),WT"的下 一周 期计时时刻) ① pi的下次调度时刻=pi->nst—w ② 其中,nst一w为临时长整型变量;MIN ()为最小值函数。
> Runnable—qi, Pend—q,队列均非空,Wait—qi队列为空
pi->nst_p = M IN((当前时刻+ RTu的时间片—RTU的运行时间),PEu的下 一周期计时时刻) ③ pi的下次调度时刻=pi->nst—w ④ 其中,nstj为临时长整型变量;
> Runnable_qi, Wait—qi, Pend_q,队列均非空时 经过式①,③计算后
pi的下次调度时刻=MIN(nst一w, nst_p)
> Eutil—q,队列非空,但Runnable—qi, Wait—q。 Pend—qi队列均为空 pi的下次调度时刻-当前时刻+£1^的时间片 ⑥
> Runnable—qi队列非空,Wait—qh Pend—q,队列均为空 pi的下次调度时刻-当前时刻+11丁,1的时间片 ⑦
> Runnable—qi, Wait—qi, Pend—qi, Eutil一qi队列均为空,pi的下次调度时刻大 小为下 一个任务被插入Wait—q,的时间。
首先,初始化系统的全局变量,其中,当前时刻初始化为从硬件读取的系统 时间,初始化空闲可用处理器集为一所有位均为1的位图,最小空闲可用位为0, 最优可用处理器号为1。
其次,建立调度方法所需的数据结构依次初始化处理器pi资源使用参数表 (当前任务,空闲任务,特权任务,就绪队列,等待队列,特权队列,阻塞队列, 下次调度时刻),其中,i€ U,m]。初始化它们当前任务,空闲任务及特权任务 为空指针,并初始就绪队列Runnable—qi,等待队列Wait_qi,特权队列Eutil一qi和阻塞队列Pend—qi指向为空的双链表。 其具体方法步骤为
1: 初始化任务的资源使用参数表(周期、时间片、截止期限、运行时间、源周 期、源时间片、下一周期计时时刻、迁移起始时刻、可迁标记、特权标记、 迁移时限);
2: 将已初始化的任务根据其下一周期计时时刻从小到大顺序插入到最优可用 处理器号对应处理器的等待队列Wait一qi中。假定最小可用处理器号为i, i 6 [1, N],其对应的处理器为pi,该处理器的等待队列为Wait—q,。然后 将i进行加一、对N取模操作,即i- (i+l) %N;
3: 如果已初始化任务的特权标记为真,执行步骤4;否则,执行步骤5;
4: 将已初始化的任务插入到Eutil—qi队列队尾;
5: 如果处理器pi当前任务指针不为空,执行步骤6;否则,执行步骤14;
6: 将处理器pi当前任务RTu从就绪队列Runnable一q,队列中删除;
7: 如果当前时刻小于处理器pi的下次调度时刻,则当前任务RIn被抢占或 阻塞,将RTu插入到阻塞队列Pend一q,队尾,并设置当前任务RTU的截止 期限值为RTn的截止期限+ RTu的周期-pi的下次调度时刻,并将 Rminable一qi指向RTU的下一个元素,执行步骤14;否则,暂停当前任务 RTn的运行,计算任务RTu下一周期的截止期限RTU的截止期限+ RTU 的周期;并任务RTU按照任务截止期限从小到大的顺序插入到等待队列 Wait一qi中,执行步骤8;
8: 如果任务RTu的运行时间大于RTit的时间片,RTU运行超时,执行步骤9; 否则,执行步骤B;
9: 如果任务RTu的周期的双倍值大于其源周期,将RT"的周期与源周期的值
互换,执行步骤ll;否则,执行步骤IO; 10:设置任务RTu的源周期为RTu的当前周期的值,并将RTu的当前周期的值
翻倍;
11:如果任务RTu的时间片的双倍值大于其源时间片,将RTu时间片与其源时
间片的值互换,执行步骤13;否则,执行步骤12; 12:设置任务RTu的源时间片为RTn的当前时间片的值,并将RT"的当前时间片的值翻倍;
13:设置任务RT"的截止期限RTU的截止期限+ RT"的周期;
14:如果就绪队列Runnable一qi非空,执行步骤15;否则,执行步骤16;
15:设置RTi2为pi的预备任务,将RTn从就绪队列Runnable—qi中删除,并将 Runnable—q溜向RTn的下一个元素,执行步骤21;
16:如果阻塞队列Pend—qi非空且阻塞任务PEu下一个周期计时时刻小于或等于 当前时刻,将阻塞任务PEu从Pend—q,中删除,并将其按最后期限值从小到大 的顺序插入到就绪队列Runnable一q,队列,设置其为pi的预备任务,并将 PencLq溜向PEu的下一个元素,执行步骤21;否则,执行步骤17;
17:如果等待队列Wait—^非空且等待任务\\^11的下一个周期计时时间小于或等 于当前时刻,将WTu从Wait一qi中删除,并将其按最后期限从小到大的顺序 插入到就绪队列Runnable—qi中,设置WTu为pi的预备任务;并将Wait一q,指 向WTu的下一个元素,执行步骤21;否则,执行步骤18;
18:如果特权队列Eutil一q,非空,执行步骤19;否则,执行步骤20;
19:将特权任务EUn从Euti1—q,中删除,将其按最后期限值从小到大的顺序插入 到Runnable—q,队列,设置EUi,为pi的预备任务,并将Eutil—q,指向EUU的下一 个元素,执行步骤21;
20:设置处理器pi的空闲任务为pi的预备任务;
21:通过处理器的下次调度时刻的计算方式计算pi下次调度时刻,设置pi的预备 任务的运行时间为pi的下次调度时刻与当前时刻的差值;
22:如果处理器pi的预备任务的可迁标记为假,执行步骤24;否则,执行步骤 23;
23:如果当前时刻与处理器pi的预备任务的迁移起始时刻的差值小于其迁移时 限,或系统中的空闲可用处理器集为空,执行步骤24;否则,执行步骤25;
24:调度处理器pi的预备任务到处理器pi上运行,即设置其为pi的当前任务,执 行步骤26;
25:计算空闲可用处理器集的最小空闲可用位,将pi的预备任务迁移到处理器
最小空闲可用位对应的处理器上运行; 26:查看系统中是否有新的任务,如果有新的任务,则执行步骤l;否则,执行步骤27; 27:调度结東。
基于SMP (对称多处理器)的AEDF ( Advanced Earliest Deadline First)任
务调度方法具体实施模式是这样的
SMP上的各处理器完全一样,因此,各处理器的调度特性也完全一样。整 个方法具体实施模式是以处理器pi为例依次进行,其中,i初始值为1, [1, N]。,共分四个过程,第一个过程是初始化任务的资源使用参数表及处理器pi的
资源使用参数表,及进行任务分派;第二个过程是调整被挂起任务的调度参数; 第三个过程是任务调度;第四个过程是设置任务运行的处理器及运行时间。 第一个过程
初始化系统的全局变量(当前时刻、空闲可用处理器集、最小空闲可用位、 最优可用处理器号),任务的资源使用参数表(周期,时间片,截止期限,运行时 间,源周期,源时间片,下一周期计时时刻,迁移起始时刻,可迁标记,特权标 记,迁移时限)和该任务所在处理器的资源使用参数表(当前任务,空闲任务, 预备任务,就绪队列,等待队列,特权队列,阻塞队列,下次调度时刻)。并将 已初始化的任务分派至最优可用处理器号对应的处理器中(假定最小可用处理器
号为i,则其对应的处理器为pi,其中,[1, N])等待队列Wait—q,中,然后 将i进行加一、对N取模操作,即1= (i+1) %N,至此,第一过程结東。 第二个过程
如果处理器pi的当前任务RTU被挂起时,对RTU的运行时间与其时间片长 度进行比较,共分三种情况,l.如果RTu的运行时间大于RTu的时间片长,则将 当前时间片加倍;后将加倍后的时间片与源时间片长度进行比较,如果加倍后的 时间片大于源时间片时长,则将源时间片与时间片值互换;否则,先将源时间片 值设置为当前时间片值,并将当前时间片值加倍;依次类推,执行RT,!周期和 源周期的更新;2.如果RTu的运行时间小于RTu的时间片长,RTii被阻塞或被其 它任务抢占,此时,设置RTu的下一次截止期限值为^1^的当前截止期限+ RTU的周期-pi的下次调度时刻,以此补偿RTU因此而损失的实时性;3.如果 RTu的运行时间等于RTii的时间片长,任务正常结東。至此,第二过程结東。 第三个过程首先,将当前任务RTu从就绪队列Runnable—q,队列上删除。然后,查看处 理器pi的四个任务队列的当前状态,共分五种情况l.就绪队列Runnabl^qi非 空,调度就绪任务RT,2为处理器pi预备任务,并将Runnable一q,指向RTu的下 一元素;2.就绪队列Runnable一qi为空,但阻塞队列Pend一qj非空且阻塞任务PE,, 的下一周期计时时刻已开始计时,调度阻塞任务PEu为处理器pi预备任务,并 将Pend—q,指向PEU的下一个元素;3.就绪队列Runnable一qi,阻塞队列Pend—qi 均为空,但等待队列Wait—q,非空且等待任务WTn的下 一周期计时时刻已开始计 时,调度Wln为处理器pi预备任务,将并将Wait一q,指WTu的下一个元素;4. 就绪队列Runnable—qi,等待队列Wait—阻塞队列Pend—qi均为空,但特权队 列Eutil一q,非空,将调度特权任务EUu为处理器pi的预备任务,并将Eutil—qi指 向EUu的下一个元素;5.就绪队列Runnable_qi,等待队列Wait—qi,阻塞队列 Pend—qi,特权队列Eutil一qi均为空,则运行处理器pi的空闲任务。最后,根据处 理器下次调度时刻的计算规则计算处理器pi的下次调度时刻,设置预备任务运 行时间为下次调度时刻与当前时刻的时间差值。至此,第三过程结東。 第四个过程
判定处理器pi的预备任务能否在处理器间进行迁移,如果不能迁移,或SMP 中无闲处理器,或其能迁移但不满足迁移时限时,则置预备任务在处理器pi上 运行;否则,将预备任务迁移到最小空闲可用位数值对应的处理器上运行。然后, 查看系统中是否有新的任务,如果有新的任务,则执行过程l;否则,调度结束。 第四过程结東。至此整个方法的实施模式结束。
权利要求
1、一种基于SMP的AEDF任务调度方法,其特征是(1)初始化任务的资源使用参数表;(2)将已初始化的任务根据其下一周期计时时刻从小到大顺序插入到最优可用处理器号对应处理器的等待队列Wait_qi中;假定最小可用处理器号为i,i∈[1,N],其对应的处理器为pi,该处理器的等待队列为Wait_qi;然后将i进行加一、对N取模操作,即i=(i+1)%N;(3)如果已初始化任务的特权标记为真,执行步骤4;否则,执行步骤5;(4)将已初始化的任务插入到Eutil_qi队列队尾;(5)如果处理器pi当前任务指针不为空,执行步骤6;否则,执行步骤14;(6)将处理器pi当前任务RTi1从就绪队列Runnable_qi队列中删除;(7)如果当前时刻小于处理器pi的下次调度时刻,当前任务RTi1被抢占或阻塞,将RTi1插入到阻塞队列Pend_qi队尾,并设置当前任务RTi1的截止期限值为RTi1的截止期限+RTi1的周期-pi的下次调度时刻,并将Runnable_qi指向RTi1的下一个元素,执行步骤14;否则,暂停当前任务RTi1的运行,计算任务RTi1下一周期的截止期限RTi1的截止期限+RTi1的周期;并任务RTi1按照任务截止期限从小到大的顺序插入到等待队列Wait_qi中,执行步骤8;(8)如果任务RTi1的运行时间大于RTi1的时间片,RTi1运行超时,执行步骤9;否则,执行步骤13;(9)如果任务RTi1的周期的双倍值大于其源周期,将RTi1的周期与源周期的值互换,执行步骤11;否则,执行步骤10;(10)设置任务RTi1的源周期为RTi1的当前周期的值,并将RTi1的当前周期的值翻倍;(11)如果任务RTi1的时间片的双倍值大于其源时间片,将RTi1时间片与其源时间片的值互换,执行步骤13;否则,执行步骤12;(12)设置任务RTi1的源时间片为RTi1的当前时间片的值,并将RTi1的当前时间片的值翻倍;(13)设置任务RTi1的截止期限RTi1的截止期限+RTi1的周期;(14)如果就绪队列Runnable_qi非空,执行步骤15;否则,执行步骤16;(15)设置RTi2为pi的预备任务,将RTi1从就绪队列Runnable_qi中删除,并将Runnable_qi指向RTi1的下一个元素,执行步骤21;(16)如果阻塞队列Pend_qi非空且阻塞任务PEi1下一个周期计时时刻小于或等于当前时刻,将阻塞任务PEi1从Pend_qi中删除,并将其按最后期限值从小到大的顺序插入到就绪队列Runnable_qi队列,设置其为pi的预备任务,并将Pend_qi指向PEi1的下一个元素,执行步骤21;否则,执行步骤17;(17)如果等待队列Wait_qi非空且等待任务WTi1的下一个周期计时时间小于或等于当前时刻,将WTi1从Wait_qi中删除,并将其按最后期限从小到大的顺序插入到就绪队列Runnable_qi中,设置WTi1为pi的预备任务;并将Wait_qi指向WTi1的下一个元素,执行步骤21;否则,执行步骤18;(18)如果特权队列Eutil_qi非空,执行步骤19;否则,执行步骤20;(19)将特权任务EUi1从Eutil_qi中删除,将其按最后期限值从小到大的顺序插入到Runnable_qi队列,设置EUi1为pi的预备任务;并将Eutil_qi指向EUi1的下一个元素,执行步骤21;(20)设置处理器pi的空闲任务为pi的预备任务;(21)通过处理器的下次调度时刻的计算方式计算pi下次调度时刻,设置pi的预备任务的运行时间为pi的下次调度时刻与当前时刻的差值;(22)如果处理器pi的预备任务的可迁标记为假,执行步骤24;否则,执行步骤23;(23)如果当前时刻与处理器pi的预备任务的迁移起始时刻的差值小于其迁移时限,或系统中的空闲可用处理器集为空,执行步骤24;否则,执行步骤25;(24)调度处理器pi的预备任务到处理器pi上运行,即设置其为pi的当前任务,执行步骤26;(25)计算空闲可用处理器集的最小空闲可用位,将pi的预备任务迁移到处理器最小空闲可用位对应的处理器上运行;(26)查看系统中是否有新的任务,如果有新的任务,则执行步骤1;否则,执行步骤27;(27)调度结束。
2、根据权利要求1所述的基于SMP的AEDF任务调度方法,其特征是所 述的资源使用参数表包括周期、时间片、截止期限、运行时间、源周期、源 时间片、下一周期计时时刻、迁移起始时刻、可迁标记、特权标记、迁移时限、 当前时刻、空闲可用处理器集、最小空闲可用位、最优可用处理器号、当前任 务、空闲任务、预备任务、Runnable_qi、 Wait_qi、 Eutil—qi、 Pend—qi、下次调度 时刻。
全文摘要
本发明提供的是一种基于SMP的AEDF任务调度方法。设计了一个运行在SMP上、基于自适应的动态负载平衡方法。该方法能够实时跟踪SMP中当前各处理器的负载状况,动态将不同任务合理地分配到负载较小的处理器中在任务调度过程中,方法通过对被挂起任务运行时长的统计,来动态调整其下次运行的时间片、周期和截止时间。基于SMP的AEDF任务调度方法能够综合分析当前处理器负载情况、任务完成情况和系统的运行情况,合理地分配处理器资源,从而有效地提高SMP中各个处理器资源的利用率,缩短完成全部任务所需的执行时间,使得SMP的运行效率和使用效能得到有效改进;同时,该方法通过动态调度任务资源的执行顺序,优先保证了紧急任务执行的实时性要求。
文档编号G06F9/50GK101446910SQ20081020964
公开日2009年6月3日 申请日期2008年12月8日 优先权日2008年12月8日
发明者司艳芳, 姚文斌, 王帅元, 郑兴杰 申请人:哈尔滨工程大学