一种面向复杂任务集的任务调度系统及方法与流程

文档序号:24160682发布日期:2021-03-05 16:23阅读:51来源:国知局
一种面向复杂任务集的任务调度系统及方法与流程

[0001]
本发明涉及任务调度领域,更具体地,涉及一种面向复杂任务集的任务调度系统及方法。


背景技术:

[0002]
测控地面设备需要对测控应答机进行全方位的测试验证,在地面软件中既存在遥测帧解析、测量解算等硬实时周期任务,也存在数传帧、遥测帧显示和遥测数据存储等软实时周期任务。在常规的任务调度方法中,采用基于固定优先级的可抢占式时间片轮转方法对任务集进行调度,该方法在任务调度之初就给各个任务分配了固定优先级,高优先级的任务可以抢占低优先级的任务,同等优先级的任务采用时间片轮转执行。由于该方法无法根据任务当前状态更改优先级,所以具有高优先级但截止期较长的任务将持续占据cpu资源,而具有低优先级但截止期较短的任务可能由于无法抢占cpu资源而夭折。


技术实现要素:

[0003]
本发明的目的在于提供一种面向复杂任务集的任务调度系统及方法,在基于优先级的可抢占式时间片轮转方法的基础之上,综合考虑了任务周期、相对截止时间和空闲时间三个因素动态计算任务优先级,并引入抢占阈值的思想,旨在提高硬实时周期任务满足截止期的概率,减少软实时周期任务的平均响应时间。
[0004]
本发明第一方面提供一种面向复杂任务集的任务调度系统,包括:显控软件和cpu处理器,
[0005]
其中,
[0006]
显控软件包括任务采集单元、优先级计算单元和调度单元;
[0007]
任务采集单元对显控软件中所有任务的当前状态进行采集,包括任务周期、相对截止期、剩余执行时间和系统时间片;
[0008]
优先级计算单元根据任务采集单元获取的任务当前状态更新所有任务的动态优先级,然后对任务就绪队列进行排序;
[0009]
调度单元用于调度任务就绪队列中具有最高优先级的任务;
[0010]
cpu处理器执行调度单元调度的任务。
[0011]
本发明第二方面提供一种利用本发明第一方面所述系统进行任务调度的方法,包括:
[0012]
判断任务为硬实时周期任务还是软实时周期任务,如果为硬实时周期任务,则根据剩余空闲时间、相对截止期和系统时间片三方面因素计算第一优先级,如果为软实时周期任务,则根据任务周期、剩余空闲时间和系统时间片三方面因素计算第一优先级;
[0013]
任务采集单元对显控软件中所有任务的当前状态进行采集,包括任务周期、相对截止期、剩余执行时间和系统时间片;
[0014]
优先级计算单元根据任务采集单元获取的任务当前状态更新所有任务的动态优
先级,然后对任务就绪队列进行排序;
[0015]
调度单元选取任务就绪队列中具有最高第一优先级的任务,同时优先级计算单元计算该任务的第二优先级,即抢占阈值;
[0016]
cpu处理器执行调度单元调度的任务;
[0017]
当新任务来临或者当前系统时间片执行完毕时,优先级计算单元重新计算并更新所有任务的第一优先级,若存在某个任务的第一优先级高于当前执行任务的第一、二优先级,则抢占当前任务开始执行,否则当前任务继续执行。
[0018]
在一个具体实施例中,所述硬实时周期任务的第一优先级的计算方法使用如下公式计算:
[0019]
p
hi
=p
init
+(d
i-t-e
ri
+d
i
)/n/t
slot
*p
range
[0020]
其中,p
init
表示硬实时周期任务的初始优先级,d
i-t-e
ri
表示任务的剩余空闲时间,d
i
表示任务的相对截止期,n为调控因子,t
slot
为系统时间片,p
range
为优先级变化范围。
[0021]
在一个具体实施例中,所述软实时周期任务的第一优先级的计算方法使用如下公式计算:
[0022]
p
si
=p
init
+(d
i-t-e
ri
+t
i
)/n/t
slot
*p
range
[0023]
其中,p
init
表示软实时周期任务的初始优先级,d
i-t-e
ri
表示任务的剩余空闲时间,t
i
表示任务周期,n为调控因子,t
slot
为系统时间片,p
range
为优先级变化范围。
[0024]
在一个具体实施例中,所述第二优先级的计算方法如下式所示:
[0025][0026]
其中,p
init
表示用户应用程序的最高级,p
range
表示优先级的取值范围,取值7,l
i
表示任务当前的剩余空闲时间,l
max
表示剩余空闲时间的最大值,可以表示为任务的相对截止期与任务执行时间之差,即l
max
=d
i-e
i
,u为临界参数,取值l
max
/4。
[0027]
在一个具体实施例中,当剩余空闲时间在[0,u]范围内时,认为当前任务剩余空闲时间较小,设置当前任务的抢占阈值为最高优先级,禁止其他任务抢占该任务;当剩余空闲时间较大时,通过剩余空闲时间所占的比例动态计算抢占阈值。
[0028]
在一个具体实施例中,所述显控软件中任务就绪队列采用单链表结构,遵循先入先出原则,链表结点使用结构体存储结构,用来存储任务信息。
附图说明
[0029]
为了更清楚地说明本发明实施例中的技术方案,下面将对实施例描述中所需要使用的附图作简单地介绍,显而易见地,下面描述中的附图仅仅是本发明的一些实施例,对于本领域普通技术人员来讲,在不付出创造性劳动的前提下,还可以根据这些附图获得其他的附图。
[0030]
图1示出本发明一个实施例一种面向任务集的优先级任务调度系统的示意图。
[0031]
图2示出优先级计算单元的流程图。
[0032]
图3示出链表结点存储结构。
具体实施方式
[0033]
为使本发明的、技术方案和优点更加清楚,下面将结合附图对本发明实施方式作进一步地详细描述。
[0034]
本发明第一实施例提供一种面向任务集的优先级任务调度系统,如图1所示,包括:显控软件和cpu处理器,
[0035]
其中,
[0036]
显控软件包括任务采集单元、优先级计算单元和调度单元;
[0037]
任务采集单元对显控软件中所有任务的当前状态进行采集,包括任务周期、相对截止期、剩余执行时间和系统时间片;
[0038]
优先级计算单元根据任务采集单元获取的任务当前状态更新所有任务的动态优先级,然后对任务就绪队列进行排序;
[0039]
调度单元用于调度任务就绪队列中具有最高优先级的任务;
[0040]
cpu处理器执行调度单元调度的任务。
[0041]
本发明第二实施例提供一种利用本发明第一实施例所述系统进行任务调度的方法,包括:
[0042]
判断任务为硬实时周期任务还是软实时周期任务,如果为硬实时周期任务,则根据剩余空闲时间、相对截止期和系统时间片三方面因素计算第一优先级,如果为软实时周期任务,则根据任务周期、剩余空闲时间和系统时间片三方面因素计算第一优先级;
[0043]
任务采集单元对显控软件中所有任务的当前状态进行采集,包括任务周期、相对截止期、剩余执行时间和系统时间片;
[0044]
优先级计算单元根据任务采集单元获取的任务当前状态更新所有任务的动态优先级,然后对任务就绪队列进行排序;
[0045]
调度单元选取任务就绪队列中具有最高第一优先级的任务,同时优先级计算单元计算该任务的第二优先级,即抢占阈值;
[0046]
cpu处理器执行调度单元调度的任务;
[0047]
当新任务来临或者当前系统时间片执行完毕时,优先级计算单元重新计算并更新所有任务的第一优先级,若存在某个任务的第一优先级高于当前执行任务的第一、二优先级,则抢占当前任务开始执行,否则当前任务继续执行。
[0048]
在一个具体实施例中,所述硬实时周期任务的第一优先级的计算方法使用如下公式计算:
[0049]
p
hi
=p
init
+(d
i-t-e
ri
+d
i
)/n/t
slot
*p
range
[0050]
其中,p
init
表示硬实时周期任务的初始优先级,d
i-t-e
ri
表示任务的剩余空闲时间,d
i
表示任务的相对截止期,n为调控因子,t
slot
为系统时间片,p
range
为优先级变化范围。
[0051]
在一个具体实施例中,所述软实时周期任务的第一优先级的计算方法使用如下公式计算:
[0052]
p
si
=p
init
+(d
i-t-e
ri
+t
i
)/n/t
slot
*p
range
[0053]
其中,p
init
表示软实时周期任务的初始优先级,d
i-t-e
ri
表示任务的剩余空闲时间,t
i
表示任务周期,n为调控因子,t
slot
为系统时间片,p
range
为优先级变化范围。
[0054]
在一个具体实施例中,所述第二优先级的计算方法如下式所示:
[0055][0056]
其中,p
init
表示用户应用程序的最高级,p
range
表示优先级的取值范围,取值7,l
i
表示任务当前的剩余空闲时间,l
max
表示剩余空闲时间的最大值,可以表示为任务的相对截止期与任务执行时间之差,即l
max
=d
i-e
i
,u为临界参数,取值l
max
/4。
[0057]
在一个具体实施例中,当剩余空闲时间在[0,u]范围内时,认为当前任务剩余空闲时间较小,设置当前任务的抢占阈值为最高优先级,禁止其他任务抢占该任务;当剩余空闲时间较大时,通过剩余空闲时间所占的比例动态计算抢占阈值。
[0058]
在一个具体实施例中,所述显控软件中任务就绪队列采用单链表结构,遵循先入先出原则,链表结点使用结构体存储结构,用来存储任务信息。
[0059]
在一个具体实施例中,优先级计算单元的流程如图2所示,
[0060]
其中硬实时周期任务使用struct hardcycletask{}表示,软实时周期任务使用struct softcycletask{}表示。结构体包含的变量如图3所示。
[0061]
其中cwinthread类封装了线程的各类函数,软件中使用afxbeginthread()函数创建线程时返回变量m_thread,用于对线程的各种操作。线程类型threadtype用以区别硬实时周期任务和软实时周期任务,规定threadtype等于1时为硬实时周期任务,等于0时为软实时周期任务,在就绪队列中,各任务按照优先级高低进行排列。
[0062]
在每个调度点到来时,根据线程类型和线程状态更新各任务结点的优先级pi、优先级变化系数ki和剩余执行时间er等信息,其中pi和ki根据线程类型调用不同的方法计算,使用函数void hardtaskpriority(lpvoid,pthread)封装测量结算等硬实时周期任务的优先级计算方法,函数void softtaskpriority(lpvoid,pthread)封装遥测数据显示等软实时周期任务的优先级计算方法。通过调用函数queryperformancefrequency()和queryperformancecounter()获取当前线程的剩余执行时间er,具体实现如下:首先调用queryperformancefrequency()函数返回值n1和n2,则剩余执行时间e=e-(n2-n1)/f。更新完线程的状态信息后,根据各个线程的优先级大小重新排列就绪队列,若上一个时间片中的任务ri执行完毕,则下一个时间片选择就绪队列中具有最高优先级的任务执行,否则判断就绪队列中是否存在满足抢占条件的线程,若存在,下一个时间片调度该线程开始执行,否则ri继续执行,计算即将执行任务的抢占阈值,通过调用cesetthreadpriority()函数设置到线程优先级中。
[0063]
显然,本发明的上述实施例仅仅是为清楚地说明本发明所作的举例,而并非是对本发明的实施方式的限定,对于所属领域的普通技术人员来说,在上述说明的基础上还可以做出其它不同形式的变化或变动,这里无法对所有的实施方式予以穷举,凡是属于本发明的技术方案所引伸出的显而易见的变化或变动仍处于本发明的保护范围之列。
当前第1页1 2 3 
网友询问留言 已有0条留言
  • 还没有人留言评论。精彩留言会获得点赞!
1