基于中断的实时任务调度方法 所属技术领域
本发明涉及一种基于中断的实时任务调度方法,尤其指应用于嵌入式实时系统中的任务调度方法。
背景技术
目前应用于嵌入式实时系统的任务调度方法中有基于实时内核的任务调度方法。基于实时内核的任务调度方法随着实时系统硬件能力的提高渐渐得到应用。实时内核通常分为不可抢占型内核与可抢占型内核,由于不可抢占型内核的任务响应时间不确定,目前的商用的实时内核几乎都是可抢占型内核,本说明书所提及的实时内核特指可抢占型内核。
实时内核中每个任务被赋予一定的优先级,有它自己的一套CPU寄存器和自己的堆栈,因此对每个任务来说,似乎CPU完全只属该任务自己。
实时内核中任务之间的协调工作是通过任务调度来完成的。实时内核系统按图1所示的流程进行操作:1、正在执行的任务;2、发生中断,正在执行的任务被中断打断;3、保护现场,将正在执行的任务地现场保存到正在执行的任务的堆栈中;4、启动中断服务程序(ISR);5、执行任务调度;6、判断:是否有更高优先级任务就绪?如是,进至7,如否,进至10;7、执行任务切换;8、恢复更高优先级任务的现场:从高优先级任务的堆栈中恢复高优先级任务的现场;9、执行更高优先级任务;10、恢复现场:从3中所述的堆栈中恢复1中所述的任务的现场;11、从恢复的现场开始,继续执行1中所述的任务。
基于实时内核的任务调度方法的优点是能使系统严格的实时性要求得到保证。同时由于多任务的使用,开发人员可以将很复杂的应用程序层次化,应用程序更容易设计与维护。
基于实时内核的任务调度方法的缺点是额外的存储器、处理器开销大。首先,任务堆栈带来数据空间(RAM)开销,并随任务数的增大而增大;其次,内核本身的代码需要占用一定的代码空间(ROM);再次,内核代码执行需要额外的CPU负载;更重要的是,实时内核通常十分昂贵。
以上种种原因使基于实时内核的任务调度方法不适于为资源有限的中小型嵌入式实时系统所采用。
发明内容
背景技术无法解决嵌入式实时系统中实时性能要求与系统开销的矛盾。本发明要解决的技术问题是提出一种基于中断的实时任务调度方法。该方法的优点是扩展中断实现嵌入式实时系统中的实时任务调度,系统的额外开销少。
本发明为达到上述的目的而采用的技术方案是在实时内核任务调度方法的基础上,取消该方法的各任务拥有各自的独立堆栈和各任务现场切换的中断工作方式,采用中断与任务统一调度和使用统一堆栈的方式。
现结合附图详细介绍本发明的技术方案。
一种基于中断的实时任务调度方法,该方法在系统当前执行的任务被新产生的中断打断至系统从中断服务程序恢复的期间内施行,所述的系统是嵌入式实时系统,在该系统中,为所有使用到的每一个中断统一分配一个优先级号,优先级定为64,即0~63级,0级和63级分别为最高优先级和最低优先级,优先级号为每一个中断的唯一标识,该系统设有有64个位置的中断就绪表,分别与64级不同的中断相对应,该表的某些位置置位表明与这些位置对应的中断处于就绪状态,其特征在于,该方法将任务看作是一个虚拟中断,像中断一样,统一分配优先级号,任务就绪相当于在中断就绪表中与该任务优先级号对应的位置置位,就绪任务像就绪中断一样,与就绪中断一起进行基于中断的实时任务调度,具体操作步骤:
20、正在执行的中断或任务,设所述的中断或任务的优先级号为int1;
21、发生中断,正在执行的中断或任务被新产生的中断打断;
22、保护现场,将优先级号为int1的中断或任务的现场保存在中断堆栈;
24、登记新产生的中断到中断就绪表;
25、从中断就绪表获得最高优先级号:用传统的方法从中断就绪表中获得最高优先级的级号,设最高优先级号为int2;
26、判断:int2小于int1?如是,进至28,如否,进至30;
28、转而执行优先级号为int2的中断或任务;
29、判断:新的中断或任务就绪?如是,返回25,开始新的一轮基于中断的实时任务调度,如否,进至30;
30、恢复现场:从中断堆栈恢复优先级号为int1的中断或任务的现场;
31、恢复继续执行优先级号为int1的中断或任务:从30中所述的现场开始,继续执行优先级号为int1的中断或任务。
工作原理。
本发明的技术方案将任务看作一个虚拟中断,与中断一样,统一分配优先级号。任务就绪相当于在中断就绪表中该任务优先级数对应的位置置位。就绪任务与就绪中断一起按所述的方法进行实时任务调度。实时任务调度总是发生在该系统从中断退出,即从中断服务程序返回主程序之前,因此本发明的技术方案简化了任务的状态,任务总是从头开始执行或者从中断中恢复继续执行。得到中断响应的任务被当作中断服务程序来执行,使系统严格的实时性要求得到保证。所有的中断使用现成的统一中断堆栈,额外的存储器、处理器开销小。
与背景技术中相比,本发明具有以下优点:
为便于比较,用前缀“RTOS”表示基于实时内核的任务调度方法;用前缀“INT”表示本发明基于中断的任务调度方法。例如:“INT_中断延时”表示基于中断的任务调度方法的中断延时时间,“RTOS_任务响应”表示基于实时内核的任务调度方法的任务响应时间。
一、资源开销小
基于实时内核的任务调度方法ROM(代码区)的开销决定于实时内核本身和应用程序代码的大小;本发明只用十分少量的代码,代码区额外开销可以忽略,仅取决于应用程序代码的大小,显然ROM开销要小得多。
基于实时内核的任务调度方法的各任务采用独立的中断堆栈空间,因此数据区开销除需考虑内核数据外,还要增加所有任务的中断堆栈空间;本发明的任务与中断共用统一中断堆栈,使RAM空间使用达到最优化。
二、响应时间短
(1)中断延时
中断延时是实时内核的重要指标,指中断发生到中断跳转(进入中断周期)的时间,主要取决于内核以及应用程序关中断的时间。本发明不存在内核关中断的问题,因此中断延时主要决定于应用程序关中断的时间。两种方法的中断延时分别由表达式[2.1][2.2]给出。
[2.1]RTOS_中断延时=Max(内核关中断最长时间,应用程序关中断最长时间)+中断跳转时间
[2.2]INT_中断延时=应用程序关中断最长时间+中断跳转时间
本发明的中断延时时间小于等于实时内核的中断延时时间。
(2)中断响应
中断响应指中断发生到执行ISR的时间。本发明由于需在中断就绪表中获得最高优先级就绪中断,因此比基于实时内核的任务调度方法多了寻找最高优先级中断的时间,但因未采用内核,也减少了内核进ISR前的处理时间。本发明通过查表的方法获得最高优先级中断,因此这段时间是固定的,而且很短。两种方法的中断响应时间分别由表达式[2.3][2.4]给出。
[2.3]RTOS_中断响应=RTOS_中断延时+保护现场+内核进中断ISR前的处理
[2.4]INT_中断响应=INT_中断延时+保护现场+寻找最高优先级中断
分析以上两个等式,前者的中断响应时间与所采用的实时内核处理时间有关,两者很难比较。若对于一个精简内核,内核进中断ISR前的处理十分简单,那么很可能前者的时间要小于后者,但并不可能有很大的优势。另外,必须注意到由于本发明是通过查表获得优先级,其响应时间是基本可确定的。
(3)任务响应
两种方法任务响应时间除相同部分外(中断延时,现场保护,ISR),基于实时内核的任务调度方法需要一次寻找最高优先级任务的时间和一次任务切换的时间;本发明则需要两次寻找最高优先级中断的时间,两种方法的任务响应时间分别由表达式[2.5][2.6]给出。
[2.5]RTOS_任务响应=RTOS_中断响应+ISR+寻找最高优先级任务+任务切换
[2.6]INT_任务响应=INT_中断响应+ISR+寻找最高优先级中断
比较而言,寻找最高优先级中断的时间要比任务切换的时间快,因此,总体来说,本发明任务响应时间要比基于实时内核的任务调度方法快一些。
附图说明
图1是基于实时内核的任务调度方法的任务堆栈的示意图。图中示出每个任务都有自己的一套CPU寄存器和自己的中断堆栈空间。
图2是基于实时内核的任务调度方法的操作流程图。
图3是基于中断的任务调度方法的操作流程图。
图4是中断就绪表的示意图。将所有的64个优先级号从高到低分为8组,每组8个优先级号。当某一中断或任务就绪时,中断就绪表的与该中断或任务相应的位置置位。
具体实施方式
实施例1
本实施例完全按上述的发明内容所述的操作步骤进行操作。本实施例是本发明的方法在一个嵌入式实时系统中实施的实例。该嵌入式实时系统采用ARM7TDMI处理器:Samsung S3C4510B处理器。本实施例涉及三个中断和两个任务。由于本发明的方法将任务当作中断处理,所以本实施例涉及五个中断。所述的系统为五个中断统一分配优先级号:五个中断的优先级号分别为3,8,19,33,63。所述的系统正在执行优先级号为8的中断。优先级号为19,33,63的中断为登记在中断就绪表中的就绪中断。优先级号为3的中断是新产生的中断。下面就结合附图详细说明本实施例的具体操作步骤:
20、正在执行的中断或任务,所述的中断或任务的int1为8;
21、发生中断,正在执行的int1为8的中断或任务被新产生的中断打断,新产生的中断的优先级号为3;
22、保护现场,将int1为8的中断或任务的现场保存在中断堆栈;
24、登记优先级号为3的新产生的中断到中断就绪表,优先级号为3的新产生的中断就绪;
25、从中断就绪表获得最高优先级号:用传统的方法从中断就绪表中获得最高优先级的级号,最高优先级号int2为3;
26、判断:int2小于int1?int2小于int1,进至28;
28、转而执行int2为3的中断或任务;
29、判断:新的中断或任务就绪?无新的中断或任务就绪,进至30;
30、恢复现场:从中断堆栈恢复int1为8的中断或任务的现场;
31、恢复执行int1为8的中断或任务:从30中所述的现场开始,继续执行int1为8的中断或任务。
实测结果:
在本实施例的嵌入式实时系统上,移植了目前较流行的小型实时内核μC/OS-II,将其作为比较对象。
实测结果如下:
表1中断响应时间测试结果方案测试次数最小值最大值平均中断响应时间最小最大中断响应时间差μC/OS-II100000253时钟周期317时钟周期5.1μs(253.13568时钟周期)1.28μs(64时钟周期)本发明100000289时钟周期299时钟周期5.8μs(290.05454时钟周期)0.2μs(10时钟周期)
表2任务响应时间测试结果方案测试次数最小值最大值平均中断响应时间最小最大中断响应时间差μC/OS-II100000614时钟周期652时钟周期12.3μs(615.86597时钟周期)0.76μs(38时钟周期)本实施例100000596时钟周期606时钟周期11.9μs(597.33967时钟周期)0.2μs(10时钟周期)
从实测结果来看,本发明可以获得很短的响应时间,且有很好的时间可预测性。从测试数据看来,不管是任务响应时间还是可预测性,本方案都略好于采用μC/OS-II实时内核的方案。
实施例2
本实施例完全按上述的发明内容所述的操作步骤进行操作。本实施例是本发明的方法在一个嵌入式实时系统中实施的实例。该嵌入式实时系统采用ARM7TDMI处理器:Samsung S3C4510B处理器。本实施例涉及三个中断和两个任务。由于本发明的方法将任务当作中断处理,所以本实施例涉及五个中断。所述的系统为五个中断统一分配优先级号:五个中断的优先级号分别为3,8,19,33,63。所述的系统正在执行优先级号为19的中断。优先级号为33,63的中断为登记在中断就绪表中的就绪中断。优先级号为3的中断是新产生的中断。下面就结合附图详细说明本实施例的具体操作步骤:
20、正在执行的中断或任务,所述的中断或任务的int1为19;
21、发生中断,正在执行的int1为19的中断或任务被新产生的中断打断,新产生的中断的优先级号为3;
22、保护现场,将int1为19的中断或任务的现场保存在中断堆栈;
24、登记优先级号为3的新产生的中断到中断就绪表,优先级号为3的新产生的中断就绪;
25、从中断就绪表获得最高优先级号:用传统的方法从中断就绪表中获得最高优先级的级号,最高优先级号int2为3;
26、判断:int2小于int1?int2小于int1,进至28;
28、转而执行int2为3的中断或任务;
29、判断:新的中断或任务就绪?有新的中断或任务就绪,新的中断或任务的优先级号为8,返回25:25、从中断就绪表获得最高优先级号:用传统的方法从中断就绪表中获得最高优先级的级号,这一轮任务调度的最高优先级号int2为8;26、判断:int2小于int1?int2小于int1,进至28;28、转而执行int2为8的中断或任务;29、判断:新的中断或任务就绪?无新的中断或任务就绪,进至30;
30、恢复现场:从中断堆栈恢复int1为19的中断或任务的现场;
31、恢复执行int1为19的中断或任务:从30中所述的现场开始,继续执行int1为19的中断或任务。
实施例3
本实施例完全按上述的发明内容所述的操作步骤进行操作。本实施例是本发明的方法在一个嵌入式实时系统中实施的实例。该嵌入式实时系统采用ARM7TDMI处理器:Samsung S3C4510B处理器。本实施例涉及三个中断和两个任务。由于本发明的方法将任务当作中断处理,所以本实施例涉及五个中断。所述的系统为五个中断统一分配优先级号:五个中断的优先级号分别为3,8,19,33,63。所述的系统正在执行优先级号为3的中断。优先级号为19,33,63的中断为登记在中断就绪表中的就绪中断。优先级号为8的中断是新产生的中断。下面就结合附图详细说明本实施例的具体操作步骤:
20、正在执行的中断或任务,所述的中断或任务的int1为3;
21、发生中断,正在执行的int1为3的中断或任务被新产生的中断打断,新产生的中断的优先级号为8;
22、保护现场,将int1为3的中断或任务的现场保存在中断堆栈;
24、登记优先级号为8的新产生的中断到中断就绪表,优先级号为8的新产生的中断就绪;
25、从中断就绪表获得最高优先级号:用传统的方法从中断就绪表中获得最高优先级的级号,最高优先级号int2为8;
26、判断:int2小于int1?int2大于int1,进至30;
30、恢复现场:从中断堆栈恢复int1为3的中断或任务的现场;
31、恢复执行int1为3的中断或任务:从30中所述的现场开始,继续执行int1为3的中断或任务。
所有实施例采用统一中断堆栈,额外的资源开销小。
所有实施例仅涉及五个中断,如涉及的中断数多至64个,所有实施例中的嵌入式实时系统照样能完成对上述的64个中断进行实时任务调度。