袁志祥,甘正良
(安徽工业大学计算机科学与技术学院,安徽马鞍山243032)
基于μC/OS-Ⅲ的实时内核中断管理机制
袁志祥,甘正良
(安徽工业大学计算机科学与技术学院,安徽马鞍山243032)
在嵌入式实时内核中,低优先级中断对紧急任务的截止期干扰较大。针对该问题,提出一种改进的μC/OS-Ⅲ实时内核中断管理机制。利用共用优先级空间的方式实现中断和任务优先级统一分配。根据当前任务在执行过程中发生中断的紧急程度为中断分配相应的优先级,如果中断比任务重要,则其优先级高于当前任务,反之则低于当前任务。优先级低于当前任务的中断以任务方式处理,高于的则通过中断服务程序处理。理论推导和实验结果表明,改进后的中断管理机制可以缩短当前执行任务的响应时间,保证紧急任务的可调度性和可预测性。
嵌入式实时内核;低优先级中断;共用优先级空间;中断服务程序;可调度性;可预测性
嵌入式实时系统是一个能够在指定或者确定的时间内对外部事件作出响应的系统,其重要的特性是实时响应性。嵌入式实时系统对外部事件的响应一般都是通过中断来处理的,其对中断的处理方式直接影响到系统的实时性能[1]。
传统嵌入式实时系统的中断优先级由硬件决定,而任务优先级由内核软件决定,中断服务程序(Interrupt Service Routine,ISR)的处理顺序也是由硬件优先级决定,中断优先级独立于任务优先级并高于任务优先级。任务在执行过程中如果有硬件中断发生,只要没有关闭硬件中断,系统会立即响应中断,执行ISR。所以,在传统实时系统中,如果中断响应及时,则系统负载也小。
中断发生后ISR立即执行的中断处理方式虽然会有上述优点,但是也会带来低优先级ISR影响紧急任务的执行、关中断导致中断丢失、高优先级中断破坏任务的临界区、ISR执行带来时序颠倒和系统过于复杂等问题[2-3]。
中断处理的另一种方式是中断以线程方式处理[4],其本质是中断发生后中断管理模块首先进入ISR进行简单处理,然后调用中断服务任务(Interrupt Service Task,IST),这样中断的主要工作就以任务方式处理(在实时内核中,线程和任务是同一个概念)。中断以任务处理的好处是系统中只有任务这一种异步事件,IST和任务之间的交互就可以像普通任务之间交互一样,例如IST可以进入等待列表,可以使用信号量、消息等。
实时系统中有3类中断[5]会对当前任务执行产生影响:(1)软实时中断;(2)中断周期大于当前任务周期的硬实时中断;(3)中断周期小于当前任务周期的硬实时中断。根据实时内核基础理论RMS[6]算法,前两类中断实际处理的内容没有当前任务紧急,如果按照传统内核中断处理方式,中断发生后立即抢占当前任务执行就代表低优先级事件抢占高优先级事件,存在不合理性,因此,前两类中断可以看作是优先级低于当前任务的中断。而第(3)类中断无论以IST方式还是ISR方式处理,优先级都比当前任务优先级高,因此,抢占当前任务执行是合理的,这类中断看作是优先级高于当前任务的中断Hi。本文针对μC/OS-Ⅲ实时内核,提出一种新的中断管理机制,以降低优先级中断对紧急任务截止期的干扰。
μC/OS-Ⅲ是M icrium公司开发的一个可裁剪、可固化、可剥夺的多任务内核,没有任务数目限制,是第3代内核,提供所有现代实时内核所需的功能,包括资源管理、同步、任务通信等,此外,μC/OS-Ⅲ还提供了很多其他类似内核所不具备的独特功能,例如内嵌的实时性能测试、向任务直接发送信号量和消息、同时等待多个内核对象等[7]。
2.1 μC/OS-Ⅲ中断
μC/OS-Ⅲ采用2种中断管理模式,在系统初始化时选择其中的一种。一种是传统中断管理模式,即中断以ISR方式处理,在当前任务执行的过程中,只要没有关硬件中断,无论何种级别的IRQ发生就立即处理,也称为直接处理模式;另一种是以IST方式处理,在IRQ发生后先进入ISR,向中断队列OSINT-Q发送信号,退出ISR直接调度中断队列处理任务OS-IntQTask,即延时处理模式。
μC/OS-Ⅲ的2种中断管理模式如图1和图2所示。在直接模式中,外设产生IRQ并调用ISR,ISR处理该IRQ的实际工作,这个过程中ISR可能会激活一个任务,该任务优先级可能比当前运行任务的优先级高,也可能低。退出ISR之后会进行任务调度,ISR激活任务过程中系统关中断。
图1 直接处理模式
图2 延时处理模式
在延时处理模式中,外设产生IRQ后,依旧调用ISR,但不在ISR中激活新任务,ISR主要是向中断队列OS-INT-Q发送信号量,有内核服务参与的工作由中断处理任务OS-IntQTask来处理,OS-IntQTask是系统中优先级最高的任务,一旦ISR退出,系统就立即调度OS-IntQTask,该任务主要是向新任务发送内核消息(如信号量)来激活新任务。该模式本质是把ISR分为两部分处理,前半段是处理没有涉及内核服务参与的工作,后半段向OS-INT-Q发送内核信息,激活新任务的工作由OS-IntQTask完成,并且ISR只在向OS-INT-Q发送内核信息时关中断,即在图2中时刻(4)关中断,这样即可减少关中断时间。
2.2 μC/OS-Ⅲ中断管理的缺点
μC/OS-Ⅲ延时中断处理模式实现了中断以任务方式处理,可以最大限度降低关中断的时间,但是μC/OS-Ⅲ中断处理模块会带来2个问题:
(1)中断以任务方式处理的粒度过粗。系统中仅有一个优先级最高的中断队列处理任务OSIntQTask,没有实现中断任务细分。很多异步事件依旧用ISR处理,这样低优先级的ISR对紧急任务的干扰问题依旧存在。
(2)中断优先级和内核任务优先级没有进行统一分配。中断优先级由硬件决定,高于软件优先级,这样不紧急中断的优先级也会比紧急任务优先级高,会影响紧急任务的执行。
针对2.2节提出的问题,本文对实时内核μC/ OS-Ⅲ中断管理机制进行改进,同时从任务最大响应时间这个角度来比较μC/OS-Ⅲ中断管理机制和改进后的中断管理机制的性能。
3.1 改进的中断管理机制
改进的模式采用共用优先级方式实现中断和普通内核任务共用优先级空间,实现优先级共同分配。系统中每一个IRQ都对应一个ISR和IST,具体某个IRQ是以ISR方式执行还是以IST方式执行取决于系统当前执行任务。在当前任务执行过程中如果发生的IRQ属于Li,则向系统中已经在等待信号的该IRQ对应的IST发送一个信号,得到信号后IST就处于就绪态,待当前任务执行结束后再根据IST的优先级和其他低优先级任务一起进行处理,即中断以IST方式处理。如果IRQ属于Hi则不进行延时,直接抢占当前任务以ISR方式处理,虽然以ISR方式处理会带来传统模式下的缺点,但可以保证高优先级IRQ的及时响应和最大限度的降低中断对当前执行任务的干扰。本文提出的所有改进都是为了实现2个目标:实现紧急IRQ的及时响应和高优先级任务的可调度性和可预测性。
混合模式中断处理流程如图3所示。
图3 混合模式中断处理流程
中断处理的具体过程如下:
(1)当任务ti在执行时,一个IRQ发生,系统首先获取该IRQ对应的ID,通过ID可以确定该IRQ对应的中断源。
(2)通过INT-PRIO[ID]获取该IRQ优先级prio,INT-PRIO数组下标是IRQ的ID,值是该IRQ对应的优先级。
(3)通过INT-TCB[ID]获取该IRQ对应的IST任务块指针tcb-Ptr,INT-TCB数组下标是IRQ的ID,值是该IRQ对应的IST任务控制块指针,通过该指针调度IST。获取指向ISR的函数指针fun-Ptr,通过该指针调用ISR。某个IRQ以ISR方式处理还是IST方式并不是固定不变,在一个时间点是以ISR方式处理,但另一个时间点以IST方式处理,这完全由系统当前任务优先级和该IRQ的优先级决定。
(4)将IRQ的优先级prio和ti的优先级os-Prio进行比较,如果IRQ优先级高(优先级值越低,优先级越高),直接执行该IRQ对应的ISR,中断返回后继续执行ti。如果ti优先级高,则发送信号给该IRQ对应的IST,IST一直处于等待信号的状态,一旦获取信号就进入就绪态。然后返回到ti继续执行。
(5)ti结束后重新获取系统新的最高优先级highst-Prio赋值给os-Prio,然后执行该优先级对应的任务,这个任务可能是IST或者是普通任务。
3.2 在低优先级IRQ影响下任务最大响应时间
当采用μC/OS-Ⅲ直接处理模式时对应的任务调度如图4所示。
图4 直接发布模式任务调度图
在图4中,当前高优先级任务ti在执行的过程中,发生了中断请求,执行中断服务程序ISR(用tISRm表示),tISRm结束时会激活一个优先级低于ti优先级的任务tjm,(假设优先级顺序是tj1>tj2…>tjm)ti执行结束后执行tjm。
任务最大响应时间是[8-9]:
在式(1)中,cISRm是tISRm实际执行时间;Ci是任务ti执行时间包括上下文切换时间;γ1是激活tjm时间(向tjm发送信号量所需时间);δI是进入和退出中断进行中断现场保护时间;ci是任务ti实际执行时间;δP是任务切换时间;m是任务执行时发生的不同种类IRQ的数目。为了简化,后文中只给出了一个IRQ,但这不影响分析。
如果采用μC/OS-Ⅲ延时处理模式,对应的任务调度如图5所示。
图5 延时发布模式任务调度图
在图5延时发布模式下,ISR向中断队列OSINT-Q发布消息,退出中断后立即执行中断队列任务OS-IntQTask,该任务把OS-INT-Q中的消息发布给任务tjm,由此可见这个过程多了一次任务调度。此时任务ti响应时间是:
在式(3)中,ISR执行之后向中断队列OS-INTQ发送消息,耗时是γ2,然后调用中断队列处理任务OS-IntQTask,该任务向tjm发送该消息(发送信号量来激活tjm),耗时为γ1注意公式中并没有考虑中断队列任务执行时间,只是考虑中断队列任务发送信号量的时间,所以计算结果和测量结果有一定偏差,但是没有影响。
改进后IRQ和普通内核任务共用同一优先级空间(见图6),IRQ优先级低于当前任务,在当前任务执行时发生此类IRQ后依旧会立即响应IRQ,但是IRQ主要是以IST方式处理,IST处理结束后向tjm发送信号,即tISR的处理分为两部分,第1部分是向IST发送信号,第2部分才是实际执行(用tIST任务),IST处理结束后向tjm发送信号。
图6 改进后任务调度图
在图6中,中断发生后,tISR并不处理主要的工作,大部分工作由tIST完成(即cISR是tIST消耗而不是ISR消耗),因为tIST和ti共用一个优先级空间并且没有ti优先级高,所以不会抢占ti的执行,所以ti的响应时间会减少很多。响应时间计算式如下:
3.3 高优先级IRQ下当前任务响应时间
如果中断请求属于Hi,那么这类中断比当前任务重要,优先级也比当前任务高,改进的模式(直接以ISR方式处理)和μC/OS-Ⅲ直接发布模式一样,对任务响应时间的影响也是一样。因为μC/OS-Ⅲ延时发布需要调用中断处理函数OS-IntQTask,会带来任务切换额外的开销,所以在直接模式下任务响应时间小。
上文从理论分析了在不同中断管理模式中低优先级IRQ的影响的任务最大响应时间,结果表明改进后的中断管理模式可以降低当前执行任务的最大响应时间。
仿真实验硬件平台是STM 32芯片。STM 32芯片采用的是Cortex-M 3处理器,具有门数目少、中断延迟断、调试成本低的特点,是为要求有快速中断响应能力的深度嵌入式应用而设计的,该处理器采用的是ARM v7-M构架[10]。本文仿真实验设置芯片的速度是72 MHz,通过修改μC/OS-Ⅲ内核实现具体的功能。
为了便于观察,仿真实验中断采用STM 32的通用定时器2(TIMER2)产生的中断,这样就可以得到周期性中断,中断主要的工作是通过串口助手向终端发送数据。
实验为了模拟多个中断,设置定时器2中断周期小于当前任务,这样当前任务运行时可以多次发生,类似于在任务一次运行时发生多个中断。内核运行的功能耗时如表1所示。
表1 功能耗时μs
对于情况(1)和情况(2)主要考虑中断对任务截止期的影响,因此,给定任务执行时间和周期而中断执行时间和周期变化,任意取任务执行时间ci= 100 m s,周期Ti=1 000 m s,对于情况(1),中断周期固定,执行时间不定,任意取中断周期30 m s(最好在100 m s内,这样可以保证任务执行时间内中断至少
因为本文重点讨论的是改进的模式中低优先级中断对紧急任务截止期的影响同时也要考虑任务对中断完成响应时间的影响,之所以不考虑改进的模式中高优先级中断是因为高优先级中断直接以ISR方式处理,这个传统的模式没有区别,因此实验主要分以下3种情况进行:
(1)中断执行时间变化但是周期固定的情况下任务截止期是如何变化。此时任务执行时间,周期和中断周期是固定的。
(2)中断执行时间固定但是周期变化的情况下对应任务截止期是如何变化。此时任务执行时间,周期和中断执行时间是固定的。
(3)在任务执行时间和周期变化的情况下,中断完成响应的时间是如何变化的。
在实时内核中事件的可调度性首要条件是:发生一次),则根据式(6),中断执行时间在[0,27]之间,对应在3种模式下理论和实际任务截止期如图7所示。
图7 任务截止期在不同中断执行时间下的值
由图7可见,在3种模式中,直接模式和延时模式任务的截止期受中断执行时间影响比较大,任务截止期会随着中断执行时间增加而增加,特别是中断执行时间比较长时任务截止期会大大增加,这也就是传统模式中为什么要求中断尽可能短小的原因,而改进的模式无论中断实际工作需要多少时间,都不会影响当前任务截止期,即当前任务截止期不会受到中断的影响,并且对于的任务截止期最小。
对于中断执行时间固定,周期变化的情况,任意取中断处理时间是1 m s,根据式(6)中断周期在大于10/9,同样中断周期最好小于100 m s,这样可以保证任务执行时可以发生多次中断,对应的任务截止期如图8所示。
图8 任务截止期在不同中断周期下的值
由图8可见,当前任务截止期在3种模式下都是随着中断周期的变大截止期变小,这也很好理解,即中断周期变大,在任务执行时间内中断发生的次数变少,因此对任务影响也小。
对于情况(3),任务在不同执行时间和周期下,直接模式和延时模式只要发生中断都可以立即处理,而改进的模式中对于低优先级中断是不处理的,直到当前任务执行结束之后才和其他任务一起处理,因此,在改进德模式低优先级中断最快完成执行也要等当前任务处理结束之后,也就是改进的模式中断完成响应的时间大大增加,这点远不如直接模式和延时模式。但是为了保证紧急事件的及时响应,牺牲低优先级的事件响应时间是值得的。
由理论和实验数据可知,在改进后的中断管理模式中,当前中断请求因为和内核普通任务共用一个优先级空间并且没有当前执行的任务ti优先级高(即该类型中断没有当前执行的任务紧急),所以该类型中断发生后并不立即处理,而是等ti结束后以任务方式处理。改进后的中断管理模式主要是延时处理当前低优先级中断以节约时间用于高优先级任务ti的处理,是牺牲低优先级中断的及时响应来满足高优先任务对时间需求的。因此,在改进后的中断管理模式中,当前任务ti执行需要的最大响应时间最小,即截止期最小。
在嵌入式实时内核中,中断和任务统一为事件,系统始终处理优先级最高的事件,这样无论是中断还是任务,始终以优先级为处理依据最符合实际情况,传统内核中中断优先级由硬件分配并且高于任务优先级,在任务处理过程中只要发生中断就立即处理ISR,这样设计的目的是防止中断丢失,但对于截止期很小的紧急任务,在执行过程中如果中断频繁发生会导致任务错过截止期。为保证任务对时间的需求,系统一般采用关中断,这样会造成优先级中断丢失。因此,目前对实时内核的研究主要集中在提高紧急事件的处理时间和防止中断丢失2个方面。
本文主要分析了传统嵌入式实时内核中断管理的优缺点,在此基础上提出了新的中断管理框架,并通过实验验证在指定的环境中该框架比传统的中断管理具有更好的性能,在保证紧急中断及时处理的情况下可以进一步降低低优先级中断对紧急任务执行的干扰。后续的工作主要是继续优化中断对任务的影响,同时也将研究如何保证中断的及时响应,降低中断延时。
[1] 雷红卫,桑 楠,熊光泽.嵌入式实时系统中断管理技术研究[J].单片机与嵌入式系统应用,2004,(5):16-19.
[2] Leyva-del-Foyo L E,Mejia-Alvarez P.Custom Interrupt Management for Real-time and Embedded System Kernels[C]//Proceedings of ETRSI'04.Washington D.C.,USA:IEEE Press,2004.
[3] Leyva-del-Foyo L E,Mejia-Alvarez P,de Niz D. Predictable Interrupt Management for Real Time Kernels over Conventional PC Hardware[C]//Proceedings of the 12th IEEE Symposium on Real-time and Embedded Technology and Applications.Washington D.C.,USA:IEEE Press,2006:14-23.
[4] K leiman S,Eykholt J.Interrupts as Threads[J].ACM SIGOPS Operating System s Review,1995,29(2):21-26.
[5] K lein M H,Ralya T,Pollak B,et al.A Practitioner's Handbook for Real-time Analysis[M].Boston,USA:Kluwer Academic Publishers,1993.
[6] Liu C L,Layland J W.Scheduling Algorithm s for Multiprogramming in a Hard-real-time Environment[J]. Journal of the ACM,1973,20(1):46-61.
[7] Labrosse J J.μC/OS-Ⅲ,The Real-time Kernel[M].[S.l.]:Micrium Incorporated,2010.
[8] Lehoczky J,Sha L,Ding Y.The Rate Monotonic Scheduling Algorithm:Exact Characterization and Average Case Behavior[C]//Proceedings of IEEE Real Tim e System s Symposium.Washington D.C.,USA:IEEE Press,1989:166-171.
[9] Audsley N,Burns A,Richardson M,et al.Applying New Scheduling Theory to Static Priority Pre-emptive Scheduling[J].Software Engineering Journal,1993,8(5):284-292.
[10] Yiu J.Cortex-M 3权威指南[M].宋 岩,译.北京:北京航空航天大学出版社,2009.
编辑 金胡考
Real-time Kernel Interrupt Management Mechanism Based on μC/OS-Ⅲ
YUAN Zhixiang,GAN Zhengliang
(School of Computing Science and Technology,Anhui University of Technology,Maanshan 243032,China)
Aiming at the problem that the low-priority interrupts have bad disturbance on high-priority tasks deadline in embedded real-time kernel,an improved interrupt management mechanism for μC/OS-Ⅲis proposed.Priority assignment is based on the importance of interrupts which occurs during execution of the tasks.If interrupt is more important,its priority is higher than tasks priority,otherwise its priority is lower than task priority.Interrupt Service Routine(ISR)deals with the high-priority interrupts and interrupt service task deals with the low-priority interrupts.The result of the experiment and analysis of theory show that the improved interrupt management mechanism can reduce the response time of task and ensure the schedulability and predictability of the task.
embedded real-time kernel;low-priority interrupt;common priority space;Interrupt Service Routine(ISR);schedulability;predictability
袁志祥,甘正良.基于μC/OS-Ⅲ的实时内核中断管理机制[J].计算机工程,2015,41(11):100-105.
英文引用格式:Yuan Zhixiang,Gan Zhengliang.Real-time Kernel Interrupt Management Mechanism Based on μC/OS-Ⅲ[J].Computing Engineering,2015,41(11):100-105.
1000-3428(2015)11-0100-06
A
TP311
10.3969/j.issn.1000-3428.2015.11.018
国家“十二五”科技支撑计划基金资助项目(2012BAK 30B04-02)。
袁志祥(1973-),男,副教授,主研方向:Petri网理论,嵌入式系统;甘正良,硕士研究生。
2014-09-01
2014-11-10 E-m ail:zxyuan@ahut.edu.cn