发明内容
为解决上述问题,本发明旨在针对混合主存嵌入式系统,提出一个任务的实时调度方法以最大程度地节省能耗,同时保证整个任务集的实时约束。在本发明所涉及到的混合存储架构中,PCM和DRAM采取统一编址方式,CPU可对各个部分直接访问。操作系统区分这两部分地址空间,并对其进行管理。本发明提出的实时调度算法旨在操作系统层面保证混合主存系统的高性能和低能耗。本发明所采用的技术方案如下:
一种面向混合主存嵌入式系统的低能耗RM实时任务调度方法,包括以下步骤:
1)将任务集T中的任务按照(Wpi-Wdi)/Nwi降序排列,其中Wpi表示该任务在PCM中的最差情况执行时间,Wdi表示该任务在DRAM中的最差情况执行时间,Nwi表示该任务的执行过程中的写次数;
2)初始化所有任务:将所有任务标记为D-task,且Ci=Wdi,其中Ci表示该任务的最差情况执行时间;
3)根据任务集T的任务顺序将任务逐个放入PCM中,如果任务集依然可调度,则标记该任务为P-task,且Ci=Wpi,直至任务集T中所有任务检查完毕;
4)系统开始执行任务:其中D-task在DRAM中执行,P-task在PCM中执行;
5)当一个任务完成的时候,动态RM算法开始计算此时最近deadline之前的空闲时间,并将此空闲时间分配给即将执行的D-task任务实例,直至该任务结束;
6)重复步骤5直至整个任务集T结束。
所述步骤3中任务集可调度的充分必要条件为:
其中T1,T2,…,Tn为任务,Cj为任务Tj的WCET,Pj,Pj分别为任务Ti,Tj的周期,n为自然数,i和j为小于等于n的自然数。
所述步骤5如果空闲时间足够将该D-task转换为P-task,则将该任务放入PCM中执行,直至该任务结束。
所述步骤5中如果空闲时间不足够将该D-task转换为P-task,则根据最大迁移数据量Si和数据在不同主存中的迁移速率计算迁移时间,假设迁移时间为migTimei,剩余时间为slack time,动态RM算法将该任务放入PCM中执行的时间为slack time-migTimei,如果在此时间内该任务未执行完,则将任务从PCM中迁移到DRAM中,直至该任务执行完。
有益效果
本发明取得的有益效果为:
1)降低了功耗;
2)保证了整个任务集的实时约束;
3)保证了PCM中尽可能少的写操作;
4)保证了任务迁移只能从PCM向DRAM中迁移,而不会迁回,且每个任务最多只迁移一次。
具体实施方式
针对混合主存架构,本发明采用的混合主存系统架构如附图1所示,内存系统包括DRAM和PCM。本发明基于RM算法提出了2个实时任务调度算法,分别为静态RM调度算法(static-RM)和动态RM调度算法(dynamic-RM)。
图2为本发明的流程图。一种面向混合主存嵌入式系统的低能耗RM实时任务调度方法,包括以下步骤:
1)将任务集T中的任务按照(Wpi-Wdi)/Nwi降序排列,其中Wpi表示该任务在PCM中的最差情况执行时间,Wdi表示该任务在DRAM中的最差情况执行时间,Nwi表示该任务的执行过程中的写次数;
2)初始化所有任务:将所有任务标记为D-task,且Ci=Wdi,其中Ci表示该任务的最差情况执行时间;
3)根据任务集T的任务顺序将任务逐个放入PCM中,如果任务集依然可调度,则标记该任务为P-task,且Ci=Wpi,直至任务集T中所有任务检查完毕;
4)系统开始执行任务:其中D-task在DRAM中执行,P-task在PCM中执行;
5)当一个任务完成的时候,动态RM算法开始计算此时最近deadline之前的空闲时间,并将此空闲时间分配给即将执行的D-task任务实例,直至该任务结束;
6)重复步骤5直至整个任务集T结束。
在传统实时系统模型中,RM算法假设每一个任务必须在其下一次调用前结束,且调度前所有任务同时就绪。本发明中采取同样的假设。此外,本发明中所有的任务都是独立的,任务间不存在依赖关系,且所有任务不存在不可抢占的部分。为简单起见,本发明假设调度的开销忽略不计。
在本发明中,对于一个周期任务集T={T1,T2,…,Tn},n为自然数,每个周期任务Ti由一个五元组表示<Wdi,Wpi,Pi,Nwi,Si>,其中Wdi表示该任务在DRAM中的最差情况执行时间(WCET),Wpi表示该任务在PCM中的WCET(在本发明中,Wdi<Wpi),Pi为任务Ti的周期,Nwi为任务Ti的执行过程中的写次数,Si表示当任务需要迁移时,需要迁移的最大数据量(包括该任务的代码段、数据段、堆栈段等),i为小于等于n的自然数。本发明假设所有任务在执行过程中不需要与用户交互,这对于实时嵌入式系统而言是合理的。
1、静态调度算法
在静态调度算法中,针对周期任务集,为了保证PCM中尽量少的写操作(延长PCM寿命),将所有任务按照(Wpi-Wdi)/Nwi降序排序,逐个任务尝试放入PCM中执行。由于将任务放入PCM中增加了任务的执行时间,因此需要检查此时是否破坏了任务集的可调度性,如果将该任务放入PCM中,所有任务的实时性约束不受影响,则将该任务安排在PCM中执行,并标记该任务为P-task,否则该任务为D-task。
对于RM算法而言,将一个任务安排在PCM中执行,并不会影响高优先级任务的可调度性,因此,只需保证低优先级任务的可调度性即可。本发明采用RM算法任务集可调度的充分条件(非必要条件),即:
其中Cj为任务Tj的WCET,Pi,Pj分别为任务Ti,Tj的周期,n为自然数,i和j为小于等于n的自然数。
静态RM(static-RM)算法步骤如下:
(1)对于任务集T中的任务按照(Wpi-Wdi)/Nwi降序排序;
(2)初始化所有任务为D-task,且Ci=Wdi;Ci为任务Ti的最差情况执行时间WCET。
(3)按照任务集T中的任务顺序逐个尝试将其放入PCM中,按照前述可调度性规则检查是否破坏了任务集的可调度性,如果任务集依然可调度,则标记该任务为P-task,且Ci=Wpi;
(4)重复(3)直至T中所有任务检查完毕;
(5)按照RM调度算法调度该任务集,其中D-task在DRAM中执行,P-task在PCM中执行。
2、动态调度算法
在本发明中,动态调度算法是对静态调度算法的优化。在静态调度算法中,算法为每个任务预留了其最差情况执行时间(WCET),然而任务在实际执行中,其实际执行时间往往远远小于其WCET。因此,当任务提前完成的时候,与预留的WCET相比,会产生一些“未使用的时间”,在本发明中,称这些时间为“空闲时间”(Slack Time)。显然,如果调度合理,在保证任务集可调度的情况下,slack time可以被重新分配给尚未执行的任务。如此,可为部分D-task分配更多的时间,使其可以在PCM中执行,进而取得更好的能耗节省。
然而,当回收的slack time不足以将整个D-task完全转换为P-task时,为了保证任务的实时约束,有时不得不将任务在PCM和DRAM中迁移,即任务前一部分在PCM中执行,而后一部分不得不迁移到DRAM中执行。任务的迁移导致了额外的时间、控制和能量开销,因此本发明尽量避免和最小化任务的迁移,动态调度算法保证了所有任务最多会被迁移一次。
在动态调度算法中,关键问题在于slack time的计算和分配,因此,本发明着重解决该问题,进而实现任务集的调度。
(1)动态RM(dynamic-RM)调度算法
动态RM调度算法是对static-RM算法的优化。在动态RM算法中,其动态调度机制基于“最近deadline”(Closest deadline)进行任务的优化。
动态RM算法时刻跟踪最近的deadline,当一个任务完成的时候,算法计算此时最近deadline之前的空闲时间slack time,然后将此空闲时间分配给即将执行的D-task实例,如果slack time足够将该D-task转换为P-task,则将该任务的此次调用放入PCM中执行(注意:该周期任务仍然为D-task,只是此次调用的实例放入PCM中执行)。如果slack time不足以将该任务完全放入PCM中,则根据最大迁移数据量Si和数据在不同主存中的迁移速率计算迁移时间,假设迁移时间为migTimei的。动态RM算法将该任务放入PCM中执行(slacktime-migTimei)的时间,如果在此时间内该任务未执行完,则将任务从PCM中迁移到DRAM中,直至该任务执行完。
本发明提出的静态调度算法通过逐个任务放入PCM,然后测试整个任务集可调度性的方式静态确定任务执行的存储介质。初始的时候所有任务均为D-task,如果一个任务可以完全放入PCM中执行,则静态调度算法将该任务标记为P-task。在静态调度算法中,任务的属性一旦确定(D-task or P-task),则在整个任务集的执行过程中,该任务的属性不会改变。static-RM调度算法的执行过程如下:
为了详细描述动态RM算法的执行过程,考虑3个周期任务T1,T2和T3,其任务参数为Wd1=100,P1=350;Wd2=100,Wp2=150,P2=440;Wd3=150,P3=550。T1有最小的任务周期且所有任务都为D-task,如附图3所示。静态调度算法的调度和分配情况如附图3(a)所示。在实际调度中,T1只消耗了50个时间单位,导致了在最近的deadline前有50个单位的slack time。由于Wd2=100,Wp2=150,因此这50个时间单位可以分配给T2,将T2转换为P-task,如附图3(b,c,d)所示。
在详细表述动态RM算法之前,表1列出了动态RM算法中用到的各符号及其含义。
表1.动态RM算法中各符号及描述
符号 |
描述 |
ti |
任务Ti的一个任务实例(或任务Ti的一次调用) |
allocationi |
分配给ti的任务时间 |
migTimei |
任务Ti从PCM迁移到DRAM中的最大迁移时间 |
migFlagi |
任务ti的迁移标志位,1表示ti需要从PCM迁移到DRAM |
Tclosedeadline |
距离最近的deadline的时间 |
Ci |
任务ti的WCET,若ti为P-task,则Ci=Wpi,否则Ci=Wdi |
dynamic-RM算法的执行过程如下:
Dynamic-RM算法调用过程TimeAllocation(Tclosedeadline)为任务分配额外的slack time。只有当前最高优先级的D-task才会被分配时间。如果slack time足够将该D-task转换为P-task,则将该任务的此次调用放入PCM中执行(注意:该周期任务仍然为D-task,只是此次调用的实例放入PCM中执行)。如果slack time不足以将该任务完全放入PCM中,则算法检查空闲时间是否可以保证任务在PCM中执行至少threshold%(例如50%)。这样做的原因在于,任务的实际执行时间远远小于其WCET,阈值threshold%可能可以满足该任务完全在PCM执行,从而避免了任务的迁移。
由于dynamic-RM算法只给未执行的任务分配slack time,因此当任务从PCM迁移到DRAM中的时候,不会被重新分配时间(过程TimeAllocation(Tclosedeadline)中行1),该任务会一直在DRAM中执行完,故任务最多只会迁移一次。
此外,如果一个任务集在static-RM算法下是可调度的,则其在dynamic-RM算法下依然是可调度的。因dynamic-RM算法针对最近deadline为即将执行的任务分配slack time,在最近deadline到来之前,该任务一直保持最高优先级,因此不会被其他任务抢占。当任务迁移的时候,任务在PCM中执行的时间为(slacktime-migTimei),并未占用static-RM算法初始分配给该任务的时间。因此,dynamic-RM算法保证了时间分配的影响不会跨越deadline,任何一个任务的完成时间不会大于其在static-RM算法中的完成时间,因此,dynamic-RM算法保证了任务集的可调度性。
上述虽然结合附图对本发明的具体实施方式进行了描述,但并非对本发明保护范围的限制,所属领域技术人员应该明白,在本发明的技术方案的基础上,本领域技术人员不需要付出创造性劳动即可做出的各种修改或变形仍在本发明的保护范围以内。