CN102339029A - 一种嵌入式操作系统定时保护的实现方法 - Google Patents

一种嵌入式操作系统定时保护的实现方法 Download PDF

Info

Publication number
CN102339029A
CN102339029A CN2011101816850A CN201110181685A CN102339029A CN 102339029 A CN102339029 A CN 102339029A CN 2011101816850 A CN2011101816850 A CN 2011101816850A CN 201110181685 A CN201110181685 A CN 201110181685A CN 102339029 A CN102339029 A CN 102339029A
Authority
CN
China
Prior art keywords
task
time
interrupt
interruption
regularly
Prior art date
Legal status (The legal status is an assumption and is not a legal conclusion. Google has not performed a legal analysis and makes no representation as to the accuracy of the status listed.)
Granted
Application number
CN2011101816850A
Other languages
English (en)
Other versions
CN102339029B (zh
Inventor
李允�
高嵊昊
陈丽蓉
Current Assignee (The listed assignees may be inaccurate. Google has not performed a legal analysis and makes no representation or warranty as to the accuracy of the list.)
University of Electronic Science and Technology of China
Original Assignee
University of Electronic Science and Technology of China
Priority date (The priority date is an assumption and is not a legal conclusion. Google has not performed a legal analysis and makes no representation as to the accuracy of the date listed.)
Filing date
Publication date
Application filed by University of Electronic Science and Technology of China filed Critical University of Electronic Science and Technology of China
Priority to CN 201110181685 priority Critical patent/CN102339029B/zh
Publication of CN102339029A publication Critical patent/CN102339029A/zh
Application granted granted Critical
Publication of CN102339029B publication Critical patent/CN102339029B/zh
Expired - Fee Related legal-status Critical Current
Anticipated expiration legal-status Critical

Links

Images

Abstract

本发明公开了一种嵌入式操作系统定时保护的实现方法,通过对任务或中断控制块中剩余执行时间、执行时间预算时间以及系统时钟模块定时保护通道计数器、比较寄存器中的值进行计算、比较,并进行相应的操作,使其不超过系统为该任务或中断所配置的执行时间预算,同时,将就绪或到达时间减去任务控制块或中断控制块中上次激活时刻,并与配置信息表中到达预算时间间隔进行比较,如果小于任务或中断到达预算时间间隔,则阻止该任务或中断就绪。这样实现了嵌入式操作系统定时保护,避免执行时间超时和到达频率过高影响其他任务或中断正确执行情况的发生。

Description

一种嵌入式操作系统定时保护的实现方法
技术领域
本发明属于计算机技术领域,更为具体地讲,涉及一种嵌入式操作系统定时保护的实现方法。
背景技术
在汽车电子应用领域,某些汽车电子的控制器系统需要使用到嵌入式实时操作系统软件,提供多任务的应用软件运行环境。AUTOSAR OS(Automotive OpenSystems Architecture Operating System)定义了一套支持分布式的、功能驱动的汽车电子软件开发方法和电子控制单元上的软件架构标准化方案,以便应用于不同的汽车平台,提高软件复用,降低开发成本。AUTOSAR OS为实时应用提供了所有基本服务,即中断处理、调度、系统时间和时钟同步、本地消息处理,以及错误检测机制等。AUTOSAR OS是AUTOSAR体系架构中对嵌入式实时操作系统提出的规范,基于OSEK OS并对其在安全保护以及时间触发的网络同步等功能进行了扩展,更好的满足汽车电子应用领域的需求。
在AUTOSAR OS规范(AUTOSAR Specification of Operating SystemVersion4.0,November 30th,2009)中,提出了定时保护的概念,对任务或中断等实体的运行时间等进行检测。其具体含义是:
1)、在实时操作系统中,对任务或者中断在的结束时间有严格约束,即任务或中断执行必须在某个时间点之前完成,称之为任务或中断的截止时间。
2)、如果任务或者中断错过其截止时间,对整个应用系统也许会造成致命的损伤。而对于支持多任务的操作系统来说,一个任务能否按时执行很可能受到其他任务的影响。比如一个系统中有三个周期性任务,表1中给出该三个任务的执行参数,其截止时间等于任务的周期,任务必须在截止时间前完成。
  任务ID   优先级   执行时间 截止时间(=任务周期)
  A   高   1 5
  B   中   3 8
  C   低   5 15
表1
图1是现有技术的任务执行过程示意图。
如图1所示,任务A、B、C同时在时刻0就绪,任务A优先级最高,先执行,当其在时刻1执行完毕接着任务B执行,由于某些原因任务B执行超时,当它在时刻5执行完后,任务A又再次就绪,任务A也因为某些原因执行超时,当其在时刻7执行完毕,任务C得以运行,而任务C运行一个周期,在时刻8任务B又就绪将任务C抢占,这样任务A、B、C按照优先级抢占运行,最终导致任务C在其截至时间,即时刻15前并没有执行完。
而任务C本身并没有超时现象,是由于任务A、B的超时导致了任务C截至时间未能完成。
3)、所以根据以上示例分析,定时保护应该在系统级,对各个任务和中断的执行都进行监测,才能保证系统中的各任务/中断保持独立,不相互影响,超时不扩散。而一个任务或中断是否能够满足它的截止时间是由上面提到的“某些原因”所决定的,“某些原因”具体包括:
(1)系统中任务/中断的执行时间,执行时间过长影响其他任务或者中断的执行;
(2)系统中任务/中断的到达间隔时间,任务或中断切换的频率过高,间隔时间过短,影响任务或中断的正确执行。
4)、当任务或者中断有违规或超时现象发生时,操作系统可以采取终止任务或者中断,以避免超时扩散到其他任务,也方便定位出现问题的任务或者中断,满足AUTOSAR OS规范有关定时保护的要求。
发明内容
本发明的目的在于克服现有技术的不足,提供一种嵌入式操作系统定时保护的实现方法,使任务/中断的执行时间以及到达时间间隔不超过预算值,避免影响其他任务或中断的正确执行。
为实现上述目的,本发明嵌入式操作系统定时保护的实现方法,其特征在于,包括以下步骤:
(1)、在任务控制块中,增加任务剩余执行时间元素以及任务上次激活时刻元素;在任务控制块中任务配置信息表指针指向的任务配置信息表中,增加任务执行预算时间以及任务到达预算时间间隔,任务剩余执行时间的初始值等于任务执行预算时间;
在中断控制块中,增加中断剩余执行时间元素以及中断上次激活时刻元素;在中断控制块中中断配置信息表指针指向的中断配置信息表中,增加中断执行预算时间以及中断到达预算时间间隔,中断剩余执行时间的初始值等于中断执行预算时间;
(2)、执行的定时保护
选择系统时钟模块的一个通道作为执行的定时保护通道:
2.1)对于任务,在任务即将进入运行态之前,将该任务的任务控制块中记录任务剩余执行时间与定时保护通道中计数器的计数值相加,并存入定时保护通道的比较寄存器中,开始执行的定时保护监测:
任务在执行过程中,计数器以递增的方式计数,当计数器的计数值与比较寄存器中暂存的数值相同时,该任务的执行预算时间到达,定时保护通道产生中断,在该产生中断的服务程序中进行用户所需要的保护处理操作;
如果任务在其执行预算时间到之前正常执行完毕,说明该任务并没有超过其执行预算时间,则恢复该任务控制块中的任务剩余执行时间为其任务配置信息表中静态配置的任务执行预算时间;
如果任务在其执行过程中被抢占,由运行态切换到就绪态时,则将定时保护通道比较寄存器中的数值减去计数器的计数值,得到任务剩余执行时间,并存入该任务的任务控制块中的任务剩余执行时间元素中;
2.2)对于中断,当中断触发并且处理器响应中断后,首先进入操作系统的中断服务程序,在跳转到具体对应的中断服务程序之前,将该中断的中断控制块中记录中断剩余执行时间与定时保护通道中计数器的计数值相加,并存入定时保护通道的比较寄存器中,开始执行的定时保护监测:
中断在执行过程中,计数器以递增的方式计数,当计数器的计数值与比较寄存器中暂存的数值相同时,该中断的执行预算时间到达,定时保护通道产生中断,该产生中断的优先级高于当前正在执行的中断并且抢占后者,在该产生中断的服务程序中进行用户所需要的保护处理操作;
如果中断在其执行预算时间到之前正常执行完毕,说明该中断并没有超过其执行预算时间,则恢复该中断控制块中的中断剩余执行时间为其中断配置信息表中静态配置的中断执行预算时间;
如果中断在其执行过程中被抢占,由运行态切换到就绪态时,则将定时保护通道比较寄存器中的数值减去计数器的计数值,得到中断剩余执行时间,并存入该中断的中断控制块中的中断剩余执行时间元素中;
(3)、任务和中断的到达时间间隔的定时保护
在任务或中断就绪或到达时,对本次就绪或到达时间减去任务控制块或中断控制块中上次激活时刻,得到本次到达时间间隔,并与任务配置信息表或中断配置信息表中的任务或中断到达预算时间间隔进行比较,如果小于任务或中断到达预算时间间隔,则阻止该任务或中断就绪。
本发明的发明目的是这样实现的:
在本发明中,定时保护需要监测的内容及其约束条件有:每个任务的执行时间不能超过系统为该任务所配置的执行时间预算,即任务配置信息表中静态配置的任务执行预算时间,每个任务的就绪或到达间隔时间不能小于系统为该任务所配置的任务到达间隔预算,即任务配置信息表中静态配置的任务到达预算时间间隔;每个中断的执行时间不能超过系统为该中断所配置的执行时间预算,即中断配置信息表中静态配置的中断执行预算时间,每个中断的就绪或到达间隔时间不能小于系统为该中断所配置的中断到达间隔预算,即中断配置信息表中静态配置的中断到达预算时间间隔。本发明通过对任务或中断控制块中剩余执行时间、执行时间预算时间以及系统时钟模块定时保护通道计数器、比较寄存器中的值进行计算、比较,并进行相应的操作,使其不超过系统为该任务或中断所配置的执行时间预算,同时,将就绪或到达时间减去任务控制块或中断控制块中上次激活时刻,并与配置信息表中到达预算时间间隔进行比较,如果超过任务或中断到达预算时间间隔,则阻止该任务或中断就绪。这样实现了嵌入式操作系统定时保护,避免执行时间超时和到达频率过高影响其他任务或中断正确执行情况的发生。
附图说明
图1是现有技术的任务执行过程示意图;
图2是系统时钟模块硬件功能示意图;
图3是任务状态变迁及相关的定时保护操作逻辑示意图;
图4是中断的状态变迁及相关的定时保护操作逻辑示意图;
图5是任务控制块及配置信息表的一种具体实施结构图;
图6是中断控制块及配置信息表的一种具体实施结构图;
图7是系统ID栈示意图;
图8是有定时保护情况下,系统运行过程中任务状态的变化示意图;
图9是t0时刻的系统ID栈示意图;
图10是t1时刻的系统ID栈示意图;
图11是t2时刻的系统ID栈示意图;
图12是t3时刻的系统ID栈示意图;
图13是t4时刻的系统ID栈示意图;
图14是t5时刻的系统ID栈示意图;
图15是t6时刻的系统ID栈示意图;
图16是t7时刻的系统ID栈示意图;
图17是t8时刻的系统ID栈示意图;
图18是t10时刻的系统ID栈示意图;
图19是t11时刻的系统ID栈示意图;
图20是无定时保护情况下,系统运行过程中任务状态的变化示意图。
具体实施方式
下面结合附图对本发明的具体实施方式进行描述,以便本领域的技术人员更好地理解本发明。需要特别提醒注意的是,在以下的描述中,当已知功能和设计的详细描述也许会淡化本发明的主要内容时,这些描述在这里将被忽略。
实施例
为了实现嵌入式实时操作系统的定时保护的功能,满足AUTOSAR规范对于汽车电子嵌入式操作系统的特殊功能要求。在本实施例中,在MPC5634平台上设计实现了一种支持定时保护的方法,MPC5634是一种用于汽车电子领域的嵌入式微处理器。
在本发明中,定时保护功能需要监测的内容及其约束条件有:
(1)、每个任务的执行时间:不能超过系统为该任务所配置的执行预算时间;
(2)、每个任务的到达间隔时间:不能小于系统为该任务所配置的任务到达预算时间间隔;
(3)、每个中断的执行时间:不能超过系统为该中断所配置的执行预算时间;
(4)、每个中断的到达间隔时间:不能小于系统为该中断所配置的中断到达预算时间间隔。
在本实施例中,在MPC5634平台上,本发明嵌入式操作系统定时保护的实现方法采取的策略是:(1)利用MPC5634的系统时钟模块(system timer module,简称STM)来协助完成对以上所列各项内容的监测。(2)当监测到上述任何一种时间超出其约束条件时,采取相应的保护措施,实现嵌入式操作系统定时保护。
图2是系统时钟模块硬件功能示意图。
在本实施例中,如图2所示,MPC5634的系统时钟模块有多个通道(只画出了一个,其他的相同),统一用系统时钟的1-256倍分频做时钟源,系统时钟模块中的计数器是以递增的方式计数,每个通道有自己的比较寄存器,当计数器计数到比较寄存器的值时,可以产生对应的中断,而且比较寄存器的值是可以在系统时钟模块的工作过程中动态修改的。具体示意请参考图2,其中中断寄存器用于标记该通道是否产生中断,而控制寄存器用于存储通道是否打开的状态。
对于AUTOSAR OS的定时保护监测部分设计思路如下:
1、对于执行时间的监测,包括任务执行时间和中断执行时间统一用同一个通道,因为无论是任务还是中断,在任何一个时刻都只有一个对象在CPU中执行,因此,可以共用一个系统时钟模块通道来控制其执行时间。
图3是任务状态变迁及相关的定时保护操作逻辑示意图。
(1)对于任务,如图3所示,任务从就绪态到运行态,执行时间保护开始或继续。在任务即将进入运行态之前,将该任务的任务控制块中记录任务剩余执行时间与定时保护通道中计数器的计数值相加,并存入定时保护通道的比较寄存器中,开始执行的定时保护监测:
任务在执行过程中,计数器以递增的方式计数,当计数器的计数值与比较寄存器中暂存的数值相同时,该任务的执行预算时间到达,定时保护通道产生中断,在该产生中断的服务程序中进行用户所需要的保护处理操作;
如果任务在其执行预算时间到之前正常执行完毕,包括进入等待态或挂起态,说明该任务并没有超过其执行预算时间,则恢复该任务控制块中的任务剩余执行时间为其任务配置信息表中静态配置的任务执行预算时间,执行保护时间终止;
如果任务在其执行过程中被抢占,由运行态切换到就绪态时,执行保护时间暂停,将定时保护通道比较寄存器中的数值减去计数器的计数值,得到任务剩余执行时间,并存入该任务的任务控制块中的任务剩余执行时间元素中。
图4是中断的状态变迁及相关的定时保护操作逻辑示意图。
(2)对于中断,如图4所示,任务从就绪态到运行态,执行时间保护开始或继续。当中断触发并且处理器响应中断后,首先进入操作系统的中断服务程序,在跳转到具体对应的中断服务程序之前,将该中断的中断控制块中记录中断剩余执行时间与定时保护通道中计数器的计数值相加,并存入定时保护通道的比较寄存器中,开始执行的定时保护监测:
中断在执行过程中,计数器以递增的方式计数,当计数器的计数值与比较寄存器中暂存的数值相同时,该中断的执行预算时间到达,定时保护通道产生中断,该产生中断的优先级高于当前正在执行的中断并且抢占后者,在该产生中断的服务程序中进行用户所需要的保护处理操作;
如果中断在其执行预算时间到之前正常执行完毕,进入未激活状态,说明该中断并没有超过其执行预算时间,则该中断退出的时候,恢复该中断控制块中的中断剩余执行时间为其中断配置信息表中静态配置的中断执行预算时间,执行时间保护终止;
如果中断在其执行过程中被抢占,即在系统允许中断嵌套的前提下,被更高优先级的中断抢占,由运行态切换到就绪态时,执行时间保护暂停,将定时保护通道比较寄存器中的数值减去计数器的计数值,得到中断剩余执行时间,并存入该中断的中断控制块中的中断剩余执行时间元素中。
2、对于任务和中断的到达时间间隔的监控,不需要与系统时钟模块结合使用其中断的方法。如图3、4所示,在任务或中断就绪/到达时,对本次就绪距离上次就绪/到达的时间的差值进行计算,并与该任务或中断所配置的到达预算时间间隔进行比较,如果小于任务或中断到达预算时间间隔,则阻止任务或中断就绪或激活。
接下来具体说明与执行时间和到达间隔相关的定时保护功能的数据结构及算法。
图5是任务控制块及配置信息表的一种具体实施结构图。
为了实现定时保护的要求,对传统的任务控制块的数据结构进行了改进,在任务控制块中增加了记录任务剩余执行时间的元素。由于操作系统要求是完全静态配置的,因此在数据结构的设计上,将配置相关的信息独立出来,专门放在任务配置信息表中,在该任务配置信息表中记录任务所允许的最大执行时间,即任务执行预算时间以及任务到达预算时间间隔,任务剩余执行时间的初始值等于任务执行预算时间。
在本实施例中,如图5所示,有关任务控制块及其任务配置信息表中的元素说明如下:
configTable:为任务配置信息表指针,通过它可以获取任务的一些静态配置的信息;
inFIT:用于记录任务是否处于FIT上下文中;FIT是fixed-interval timer简写,为一种系统时钟,定时产生异常,用于操作系统时钟,按时激活周期性任务;任务可以分为两种类型,一种是由FIT触发的周期性任务,则任务在执行过程中其实是处在FIT的上下文中的。另一种是零星任务且不是由FIT触发的任务激活的任务,这样的任务不处于FIT的上下文中。对于以上两种不同类型的任务,在定时保护的过程中要区别对待。
executionTime:用于记录该任务的剩余执行时间,在初始化时,每个任务控制块中的该项都被初始化为配置中的executionBudget。当任务每次由就绪态到运行态时,都将任务控制块中的该项与系统时钟模块定时保护通道中计数器的计数值相加,并存入定时保护通道的比较寄存器中,用于监测该任务的执行。当任务被抢占由运行态到就绪态时,根据任务已经执行的时间,计算任务的剩余执行时间,赋给该任务控制块中的该项。当任务正常执行完毕,未出现超时现象,由运行态转为等待态或挂起态时,将该项记录值重新初始化为配置的执行预算时间。
activatePoint:用于监控任务的到达时间间隔,记录该任务上次激活时刻。该项的值在初始化时初始为-1,在每次由挂起态或等待态转为就绪态时,计算跟上次进入就绪态的时间差,与该任务配置中的到达时间间隔比较,来完成监测任务到达率的目的。
任务配置信息表中的信息都是通过用户静态配置的,在任务的运行过程中是不会改变的,其相关元素的说明如下:
executionBudget:任务执行预算时间。用户为该任务配置的可执行时间,如果任务执行超过这个值将被终止;
timeFrame:任务到达预算时间间隔。用户为该任务配置的到达间隔的最短时间,如果任务的到达间隔小于这个值将被阻止就绪。
图6是中断控制块及配置信息表的一种具体实施结构图。
中断控制块的相关元素说明如下:
configTable:指向中断的配置信息表的指针,通过它可以获取中断的一些静态配置信息;
executionTime:用于记录该中断的剩余执行时间,在初始化时每个中断控制块中的该项都被初始化为配置中的executionBudget。每次该中断触发时,都将中断控制块中的该项与系统时钟模块定时保护通道中计数器的计数值相加,并存入定时保护通道的比较寄存器中,用于监测该中断的执行。当中断被抢占,由运行态到就绪态时,根据中断已经执行的时间,计算中断的剩余执行时间,赋给该中断控制块中的该项。当中断正常执行完毕,未出现超时现象,将该记录值重新初始化为配置的执行时间预算。
activatePoint:用于监控中断的到达时间间隔,记录该中断上次激活时刻。该项的值在初始化时初始为-1,在每次中断触发,由未激活到就绪时,计算跟上次触发的时间差,与该中断配置中的到达时间间隔比较,来完成监测中断到达率的目的。
中断配置信息表中的信息都是通过用户静态配置的,在中断的运行过程中是不会改变的,其相关元素的说明如下:
executionBudget:中断执行预算时间。用户为该中断配置的可执行时间,如果中断执行超过这个值将被终止;
timeFrame:中断到达预算时间间隔。用户为该中断配置的到达间隔的最短时间,如果中断的到达间隔小于这个值将被阻止就绪。
图7是系统ID栈示意图。
由于中断抢占任务后,需要恢复到原任务上下文过程中,所以需要记录系统中任务或中断运行的次序,以判断接下来要运行的对象是谁。
这样就需要维护一个系统的ID栈来记录系统中运行任务或中断的先后顺序。
在本实施例中,如图7所示,ID栈的实现采取的是静态数组的方式,在编译时就已确定其大小,ID栈的大小是系统中所有任务激活次数的和再加上中断个数的和,而栈顶指针始终指向当前的空闲位置。入栈操作时,先对栈顶指针所指位置的内容进行修改,将入栈任务或中断的ID加入,再将栈顶指针加1;出栈操作时则先将栈顶指针减1,再对栈顶指针现在所指位置内容清零。对于任务和中断ID的区分采取的方法是让其ID分布在不同的数段,中断的ID即为其中断向量号,在0到1024之间,而任务ID为其原来的任务ID号加上1024,其值在1024到2048之间。
对于执行时间保护和到达间隔以及ID栈的操作需要完成以下操作:
1、任务或中断由就绪态转为运行态
首先通过任务或中断ID不同来判断要运行的是任务还是中断,再判断ID栈中是否有该任务或中断,如果有,则说明该任务或中断之前运行过,没运行完又被抢占了,此时,需要将该任务或中断ID由栈中的位置调整到栈顶的位置;
如果该ID栈中没有该任务或中断,则说明该任务或中断之前没有未运行完的实体,将该任务或中断ID压入栈中;获得系统时钟模中计数器当前的计数值,与该任务或中断的控制块中的剩余执行时间executionTime相加,得到该任务或中断到期的时间,写到定时保护通道的比较寄存器中。
2、任务或中断由运行态转为就绪态
用比较寄存器的值减去当前计数器的值计算出该任务或中断的剩余执行时间,把该值记录在该任务或中断的控制块的剩余执行时间executionTime中。
3、任务或中断由运行态转为挂起态或等待态、未激活态
将该任务或中断配置信息表中的执行预算时间executionBudget赋给任务或中断控制块中的剩余执行时间executionTime,将该任务或中断控制块中的可执行剩余执行时间还原成配置的执行预算时间值;将该任务或中断的ID弹出栈。
4、任务或中断由挂起态或等待态、未激活态转为就绪态
1)、检查该任务或中断控制块中记录的上次激活时刻activatePoint是否大于0,如果不大于0说明是第一次激活,则将计数器当前计数值记录在该实体控制块中的activatePoint变量中,并返回;
2)、如果大于0说明不是第一次激活,则用计数器当前计数值减去该任务或中断控制块中的上次激活时刻activatePoint中的值,得到该任务或中断本次激活距离上次激活的时间。
3)用这个时间值与该任务或中断配置的到达预算时间间隔timeFrame比较,如果小于到达预算时间间隔timeFrame,则说明该任务或中断到达率太高,则拒绝此次激活,如果大于到达预算时间间隔timeFrame,则该任务或中断可正常就绪。
4)将计数器当前计数值记录在该中断或任务控制块中的任务上次激活时刻activatePoint中。
5、当任务或中断执行出现超时现象,系统定时模块定时保护通道产生中断时
1)、首先进入中断派发程序,中断派发程序根据中断向量号跳转到定时保护通道的中断服务程序中,该服务程序除了清除该通道的中断标志还获取用户对该超时现象所希望采取的动作。
2)、再返回到中断派发程序中,根据需要终止的任务或中断的类型来完成终止操作:
2.1)如果是非FIT上下文中的任务,则需要释放任务所持有的所有资源,终止任务并进行重新调度。
2.2)如果是FIT上下文中的任务,则在释放任务所持有的所有资源,终止任务后不进行重调度,而是回到FIT的派发程序中,完成返回到FIT抢占的实体上下文中。
2.3)如果是中断,则需要释放中断所持有的所有资源,并返回到中断之前的上下文中。
应用实例
通过本发明的方法实现了AUTOSAR操作系统对于定时保护的要求。下面是一个实际的例子,说明了在一个系统中多个任务运行,有些任务或中断执行出现超时的情况,或者有些任务或中断到达时间间隔过短,以及在这个过程中ID栈以及系统定时模块中定时保护通道寄存器的变化情况。
在这个例子中,系统中共有3个任务T1~T3,这3个任务的优先级从高到低依次是:任务T1优先级最高、任务T2优先级次之、任务T3最低,还有2个中断I1、I2,中断I2的优先级高于中断I1,具体如表2所示:
  任务ID   优先级   执行预算时间   到达预算时间间隔 截止时间(=任务周期)
  T1   高   1   5 5
  T2   中   2   8 8
  T3   低   5   15 15
  I1   低   2   4
  I2   高   3   4
表2
表2是任务和中断的参数表。表2中,任务T1的任务周期为5,任务T2的任务周期为8,任务T3的任务周期为15。任务T1的执行时间预算为1,任务T2的执行时间预算为2,任务T3的执行时间预算为5。
图8是有定时保护情况下,系统运行过程中任务状态的变化示意图。
在本实例中,图8展示了在系统运行过程中所做的一些操作,以及T1、T2、T3、T4和T5任务的状态变化情况。
下面是对该系统运行过程中,按时间顺序所发生的一些事件,以及各任务状态变化情况的说明:
1)t0时刻:
a)操作:系统初始化,FIT同时激活任务T1、T2、T3,任务T1,T2,T3就绪,检查三个任务控制块中的上次激活时刻activatePoint,为-1,说明是第一次就绪,将计数器当前计数值记录在各任务控制块的上次激活时刻activatePoint中;
b)ID栈情况:图9是t0时刻的系统ID栈示意图;如图9所示,任务T1、T2、T3同时就绪,但任务T1优先级最高,任务T1先运行,任务T1的ID入栈;
c)任务或中断状态:任务T1、T2、T3都被FIT激活,且任务T1优先级最高,只有任务T1运行,其他任务均为就绪态,操作系统调度任务T1运行,任务T1为运行态;
d)系统定时模块的计数器计数值为:0;
e)系统定时模块中定时保护通道的比较寄存器的值:为任务T1控制块中的剩余执行时间executionTime加上计数器计数值的和,即1;
f)控制块的变化:任务T1、T2、T3的任务控制块中的上次激活时刻activatePoint皆为0。
2)t1时刻:
a)操作:任务T1还没执行完毕,但其执行时间到期,强制将其挂起;
b)ID栈情况:图10是t1时刻的系统ID栈示意图。如图10所示,任务T1的ID出栈,任务T2的ID入栈;
c)任务或中断状态:任务T1变为挂起态,任务T2变为运行态;
d)系统定时模块的计数器计数值为:1;
e)系统定时模块中定时保护通道产生中断,任务T1执行时间到期;定时保护通道的比较寄存器的值:为任务T2控制块中的剩余执行时间executionTime加上计数器计数值,即3;
f)控制块的变化:任务T1新的剩余执行时间executionTime又复原为1。
3)t2时刻:
a)操作:任务T2未执行完毕,中断I1到来,检查中断I1控制块中的上次激活时刻activatePoint,为-1,说明该中断是第一次就绪,将当前的计数器计数值记录在该中断控制块的上次激活时刻activatePoint中;
b)ID栈情况:图11是t2时刻的系统ID栈示意图;如图11所示,中断I1的ID入栈;
c)任务或中断状态:任务T2进入就绪态,任务I1进入运行态;
d)系统定时模块的计数器计数值为:2;
e)系统定时模块中定时保护通道的比较寄存器的值:为中断I1控制块中的剩余执行时间executionTime加上计数器计数值的和,即4;
f)控制块的变化:任务T2的剩余执行时间executionTime为1,中断I1的上次激活时刻activatePoint为2。
4)t3时刻:
a)操作:中断I1未执行完,中断I2到来,检查中断I2控制块中的上次激活时刻activatePoint,为-1,说明该中断是第一次就绪,将当前的计数器计数值记录在该中断控制块的上次激活时刻activatePoint中;
b)ID栈情况:图12是t3时刻的系统ID栈示意图;如图12所示,中断I2的ID入栈;
c)任务或中断状态:中断I1变为就绪态,中断I2变为运行态;
d)系统定时模块的计数器计数值为:3;
e)系统定时模块中定时保护通道的比较寄存器的值:为中断I2控制块中的剩余执行时间executionTime加上计数器计数值的和,即6;
f)控制块的变化:中断I1的剩余执行时间executionTime为1,中断I2上次激活时刻activatePoint为3。
5)t4时刻:
a)操作:中断I2执行完毕;
b)ID栈情况:图13是t4时刻的系统ID栈示意图;如图13所示,中断I2出栈,当前还有中断就绪,继续执行中断I1,查找中断I1是否在栈中,之前是否运行过,发现运行过就在栈顶,则保持中断I1在栈顶;
c)任务或中断状态:中断I2变为挂起态,中断I1变为运行态;
d)系统定时模块的计数器计数值为:4;
e)系统定时模块中定时保护通道的比较寄存器的值:为I1控制块中的剩余执行时间executionTime加上计数器计数值的和,即5;
f)控制块的变化:中断I2的剩余执行时间executionTime又复原为3。
6)t5时刻:
a)操作:中断I1执行时间到期,被强制终止,任务T1就绪,检查任务T1控制块中的上次激活时刻activatePoint,为0,用当前计数器计数值减去0得5,与为该任务配置的到达预算时间间隔timeFrame比较,并不小于到达预算时间间隔timeFrame,允许就绪,将当前的计数器计数值记录在该中断控制块的上次激活时刻中;
b)ID栈情况:图14是t5时刻的系统ID栈示意图;如图14所示,中断I1的ID出栈,本来应该运行任务T2的,可是此时任务T1就绪,且优先级高于任务T2,任务T1运行;
c)任务或中断状态:中断I1执行完毕变为挂起态,任务T2仍然为就绪态,任务T1变为运行态;
d)系统定时模块的计数器计数值为:5;
e)系统定时模块中定时保护通道的比较寄存器的值:为任务T1控制块中的剩余执行时间executionTime加上计数器计数值的和,即6;
f)控制块的变化:中断I1的剩余执行时间executionTime又复原为2,任务T1的上次激活时刻activatePoint为5。
7)t6时刻:
a)操作:任务T1执行完毕,中断I2又就绪,检查中断I2控制块中的上次激活时刻activatePoint,为3,用当前计数器计数值减去3得3,与为该中断配置的timeFrame比较,发现小于到达预算时间间隔timeFrame,不允许就绪,将当前的计数器计数值记录在该中断控制块的上次激活时刻activatePoint中;
b)ID栈情况:图15是t6时刻的系统ID栈示意图;如图15所示,任务T1出栈,发现当前优先级最高的任务是T2,查找ID栈中任务T2是否在栈中,是否之前运行过,且在栈顶,则保持T2在栈顶;
c)任务或中断状态:任务T1为挂起态,任务T2为运行态;
d)系统定时模块的计数器计数值为:6;
e)系统定时模块中定时保护通道的比较寄存器的值:为任务T2控制块中的剩余执行时间executionTime加上计数器计数值的和,即7;
f)控制块的变化:任务T1的剩余执行时间executionTime又复原为1,中断I2的上次激活时刻activatePoint为计数器计数值6。
8)t7时刻:
a)操作:任务T2执行完毕,终止自己;
b)ID栈情况:图16是t7时刻的系统ID栈示意图;如图16所示,任务T2出栈,查找当前就绪队列中优先级最高的任务是任务T3,查找T3是否在ID栈中,发现任务T3不在,就将任务T3的ID入栈;
c)任务或中断状态:只有任务T3为就绪态,任务T3进入运行态;
d)系统定时模块的计数器计数值为:7;
e)系统定时模块中定时保护通道的比较寄存器的值:为任务T3控制块中的剩余执行时间executionTime加上计数器计数值的和,即10;
f)控制块的变化:任务T2的剩余执行时间executionTime又复原为2。
9)t8时刻:
a)操作:任务T3未执行完,任务T2就绪,检查任务T2控制块中的上次激活时刻activatePoint,为0,用计数器计数值减去0得8,与为该任务配置的到达预算时间间隔timeFrame比较,发现不小于到达预算时间间隔timeFrame,允许就绪,将当前的计数器计数值记录在该中断控制块的上次激活时刻activatePoint中;
b)ID栈情况:图17是t8时刻的系统ID栈示意图;如图17所示,任务T2就绪且优先级高于任务T3,任务T2进入运行态,查找栈中是否有任务T2的ID,没有找到,说明任务T2不是没运行完的任务,任务T2入栈;
c)任务或中断状态:任务T2为运行态,任务T3为就绪态;
d)系统定时模块的计数器计数值为:8;
e)系统定时模块中定时保护通道的比较寄存器的值:为任务T2控制块中的剩余执行时间executionTime加上计数器计数值的和,即10。
f)控制块的变化:任务T3的余执行时间executionTime剩余为2,任务T2的activatePoint为8。
10)t9时刻:
a)操作:任务T2执行时间未到,继续执行;
b)ID栈情况:如图17所示,未有变化;
c)任务状态:仍然是任务T2为运行态,任务T3为就绪态;
d)系统定时模块的计数器计数值为:9;
e)系统定时模块中定时保护通道的比较寄存器的值:仍为10;
f)控制块无变化。
11)t10时刻:
a)操作:任务T2执行完毕,此时FIT又激活任务T1,任务T1就绪,检查任务T1控制块中的上次激活时刻activatePoint,为5,用当前计数器计数值减去5得5,与为该任务配置的到达预算时间间隔timeFrame比较,并不小于到达预算时间间隔timeFrame,允许就绪,将当前的计数器计数值记录在该任务控制块的上次激活时刻activatePoint中;
b)ID栈情况:图18是t10时刻的系统ID栈示意图;如图18所示;任务T2执行时间到被终止,从ID栈弹出,任务T1就绪,压入ID栈;
c)任务或中断状态:任务T2变为挂起态,任务T1变为就绪态,任务T3仍为就绪态,任务T1优先级最高,先运行;
d)系统定时模块的计数器计数值为:10;
e)系统定时模块中定时保护通道的比较寄存器的值:为任务T1控制块中的剩余执行时间executionTime加上计数器计数值的和,即11。
f)控制块的变化:任务T2的剩余执行时间executionTime又恢复为2,任务T1的activatePoint为10。
12)t11时刻:
a)操作:任务T1执行未完,但时间到期,强制挂起;
b)ID栈情况:图19是t11时刻的系统ID栈示意图;如图19所示,任务T1执行完毕出栈,检查就绪队列发现优先级最高的是任务T3,任务T3转为运行态,入栈;
c)任务或中断状态:任务T2仍然为运行态;
d)系统定时模块的计数器计数值为:11;
e)系统定时模块中定时保护通道的比较寄存器的值:为任务T3控制块中的剩余执行时间executionTime加上计数器计数值的和,即15;
f)控制块的变化:任务T1的剩余执行时间executionTime又恢复为1。
13)t12~t15时段:
a)操作:任务T3一直运行,刚好在截止时间前运行完;
b)ID栈情况:在t15时刻任务T3运行完毕,出栈此时没有就绪任务;
c)任务状态:所有任务中断均为挂起态;
d)系统定时模块的计数器计数值为:12,13,14,15;
e)系统定时模块中定时保护通道的比较寄存器的值:仍为15;
f)控制块的变化:任务T3的剩余执行时间executionTime又恢复为5。
图20是无定时保护情况下,系统运行过程中任务状态的变化示意图。
而如果没有定时保护模块,相同任务相同配置情况的几个任务调度情况将如图20所示。
在t1时刻,虽然任务T1执行超时,但继续执行,直至t2执行完毕。而t5时刻,中断执行超时,但继续执行至t6,t6时刻,中断I2又就绪,就绪过快,但仍允许其就绪,以上几个超时和到达过快的现象直接导致任务T2在它的截止时间内未执行,而在t8时刻,FIT再次激活T2时,任务T2已经在运行,就无法再次激活运行,使得T2少就绪了一次。
t11时刻,任务T1执行超时,导致任务T3在它的截止时间内没有执行完毕。
在没有定时保护的情况下,任务本身没有任何问题但却没有在其截止时间内执行完毕,更严重的甚至于有些周期性任务少响应了一次。
而在有定时保护的情况下,在t1时刻,任务T1执行的超时,t5时刻,中断I1执行超时,t11时刻,T1执行超时;t6时刻的中断到达过快;操作系统将其及时的终止或阻止其就绪,并没有引起后续所有任务的推迟,以及更严重的后果。
通过跟踪对比系统在由定时保护和没有定时保护的运行情况,客观证明了本发明嵌入式操作系统定时保护的实现方法满足了AUTOSAR操作系统有关定时保护的要求,任务的执行超时不会影响其他任务的执行,保证了各实体的独立性,也方便定位出现问题的任务或中断。
尽管上面对本发明说明性的具体实施方式进行了描述,以便于本技术领域的技术人员理解本发明,但应该清楚,本发明不限于具体实施方式的范围,对本技术领域的普通技术人员来讲,只要各种变化在所附的权利要求限定和确定的本发明的精神和范围内,这些变化是显而易见的,一切利用本发明构思的发明创造均在保护之列。

Claims (3)

1.一种嵌入式操作系统定时保护的实现方法,其特征在于,包括以下步骤:
(1)、在任务控制块中,增加任务剩余执行时间元素以及任务上次激活时刻元素;在任务控制块中任务配置信息表指针指向的任务配置信息表中,增加任务执行预算时间以及任务到达预算时间间隔,任务剩余执行时间的初始值等于任务执行预算时间;
在中断控制块中,增加中断剩余执行时间元素以及中断上次激活时刻元素;在中断控制块中中断配置信息表指针指向的中断配置信息表中,增加中断执行预算时间以及中断到达预算时间间隔,中断剩余执行时间的初始值等于中断执行预算时间;
(2)、执行的定时保护
选择系统时钟模块的一个通道作为执行的定时保护通道:
2.1)对于任务,在任务即将进入运行态之前,将该任务的任务控制块中记录任务剩余执行时间与定时保护通道中计数器的计数值相加,并存入定时保护通道的比较寄存器中,开始执行的定时保护监测:
任务在执行过程中,计数器以递增的方式计数,当计数器的计数值与比较寄存器中暂存的数值相同时,该任务的执行预算时间到达,定时保护通道产生中断,在该产生中断的服务程序中进行用户所需要的保护处理操作;
如果任务在其执行预算时间到之前正常执行完毕,说明该任务并没有超过其执行预算时间,则恢复该任务控制块中的任务剩余执行时间为其任务配置信息表中静态配置的任务执行预算时间;
如果任务在其执行过程中被抢占,由运行态切换到就绪态时,则将定时保护通道比较寄存器中的数值减去计数器的计数值,得到任务剩余执行时间,并存入该任务的任务控制块中的任务剩余执行时间元素中;
2.2)对于中断,当中断触发并且处理器响应中断后,首先进入操作系统的中断服务程序,在跳转到具体对应的中断服务程序之前,将该中断的中断控制块中记录中断剩余执行时间与定时保护通道中计数器的计数值相加,并存入定时保护通道的比较寄存器中,开始执行的定时保护监测:
中断在执行过程中,计数器以递增的方式计数,当计数器的计数值与比较寄存器中暂存的数值相同时,该中断的执行预算时间到达,定时保护通道产生中断,该产生中断的优先级高于当前正在执行的中断并且抢占后者,在该产生中断的服务程序中进行用户所需要的保护处理操作;
如果中断在其执行预算时间到之前正常执行完毕,说明该中断并没有超过其执行预算时间,则恢复该中断控制块中的中断剩余执行时间为其中断配置信息表中静态配置的中断执行预算时间;
如果中断在其执行过程中被抢占,由运行态切换到就绪态时,则将定时保护通道比较寄存器中的数值减去计数器的计数值,得到中断剩余执行时间,并存入该中断的中断控制块中的中断剩余执行时间元素中;
(3)、任务和中断的到达时间间隔的定时保护
在任务或中断就绪或到达时,对本次就绪或到达时间减去任务控制块或中断控制块中上次激活时刻,得到本次到达时间间隔,并与任务配置信息表或中断配置信息表中的任务或中断到达预算时间间隔进行比较,如果小于任务或中断到达预算时间间隔,则阻止该任务或中断就绪。
2.根据权利要求1所述的嵌入式操作系统定时保护的实现方法,其特征在于,定时保护通道产生中断时,还要进行以下步骤:
1)、首先进入中断派发程序,中断派发程序根据中断向量号跳转到定时保护通道的中断服务程序中,该服务程序除了清除该通道的中断标志还获取用户对该超时现象所希望采取的动作。
2)、再返回到中断派发程序中,根据需要终止的任务或中断的类型来完成终止操作:
2.1)如果是非FIT上下文中的任务,则需要释放任务所持有的所有资源,终止任务并进行重新调度。
2.2)如果是FIT上下文中的任务,则在释放任务所持有的所有资源,终止任务后不进行重调度,而是回到FIT的派发程序中,完成返回到FIT抢占的实体上下文中。
2.3)如果是中断,则需要释放中断所持有的所有资源,并返回到中断之前的上下文中。
3.根据权利要求1所述的嵌入式操作系统定时保护的实现方法,其特征在于,所述的任务或中断运行的先后顺序用ID栈来记录:
ID栈的实现采取的是静态数组的方式,在编译时就已确定其大小,ID栈的大小是系统中所有任务激活次数的和再加上中断个数的和,而栈顶指针始终指向当前的空闲位置;入栈操作时,先对栈顶指针所指位置的内容进行修改,将入栈任务或中断的ID加入,再将栈顶指针加1;出栈操作时则先将栈顶指针减1,再对栈顶指针现在所指位置内容清零。
CN 201110181685 2011-06-30 2011-06-30 一种嵌入式操作系统定时保护的实现方法 Expired - Fee Related CN102339029B (zh)

Priority Applications (1)

Application Number Priority Date Filing Date Title
CN 201110181685 CN102339029B (zh) 2011-06-30 2011-06-30 一种嵌入式操作系统定时保护的实现方法

Applications Claiming Priority (1)

Application Number Priority Date Filing Date Title
CN 201110181685 CN102339029B (zh) 2011-06-30 2011-06-30 一种嵌入式操作系统定时保护的实现方法

Publications (2)

Publication Number Publication Date
CN102339029A true CN102339029A (zh) 2012-02-01
CN102339029B CN102339029B (zh) 2013-03-06

Family

ID=45514815

Family Applications (1)

Application Number Title Priority Date Filing Date
CN 201110181685 Expired - Fee Related CN102339029B (zh) 2011-06-30 2011-06-30 一种嵌入式操作系统定时保护的实现方法

Country Status (1)

Country Link
CN (1) CN102339029B (zh)

Cited By (6)

* Cited by examiner, † Cited by third party
Publication number Priority date Publication date Assignee Title
CN103631695A (zh) * 2013-12-19 2014-03-12 北京经纬恒润科技有限公司 时间监测方法及装置
CN108337035A (zh) * 2018-02-05 2018-07-27 北京电子工程总体研究所 一种遥测下行热备份且无缝衔接的星务遥测中断处理方法
CN111427742A (zh) * 2020-03-09 2020-07-17 创驱(上海)新能源科技有限公司 一种基于autosar架构的复杂驱动任务实时监控方法
CN111597016A (zh) * 2020-04-08 2020-08-28 延锋伟世通电子科技(上海)有限公司 一种系统任务的时间保护方法、系统、存储介质及终端
CN111694594A (zh) * 2020-05-18 2020-09-22 成都盛芯微科技有限公司 补丁程序的控制方法和系统
CN117591347A (zh) * 2024-01-18 2024-02-23 北京集度科技有限公司 系统异常检测装置、处理器和嵌入式系统

Citations (4)

* Cited by examiner, † Cited by third party
Publication number Priority date Publication date Assignee Title
JP2000122883A (ja) * 1998-10-19 2000-04-28 Chokosoku Network Computer Gijutsu Kenkyusho:Kk タスク管理方法
CN1488097A (zh) * 2000-11-13 2004-04-07 �Դ���� 具有错误防护以确定控制和命令型的多任务应用实时运行的安全方法
CN101140550A (zh) * 2007-08-22 2008-03-12 中兴通讯股份有限公司 一种嵌入式实时系统中断处理装置及方法
CN101599663A (zh) * 2009-07-07 2009-12-09 厦门士林电机有限公司 一种智能控制器的实时控制系统

Patent Citations (4)

* Cited by examiner, † Cited by third party
Publication number Priority date Publication date Assignee Title
JP2000122883A (ja) * 1998-10-19 2000-04-28 Chokosoku Network Computer Gijutsu Kenkyusho:Kk タスク管理方法
CN1488097A (zh) * 2000-11-13 2004-04-07 �Դ���� 具有错误防护以确定控制和命令型的多任务应用实时运行的安全方法
CN101140550A (zh) * 2007-08-22 2008-03-12 中兴通讯股份有限公司 一种嵌入式实时系统中断处理装置及方法
CN101599663A (zh) * 2009-07-07 2009-12-09 厦门士林电机有限公司 一种智能控制器的实时控制系统

Non-Patent Citations (1)

* Cited by examiner, † Cited by third party
Title
李允等,1: "普及计算终端的自适应性技术研究", 《电子学报》 *

Cited By (11)

* Cited by examiner, † Cited by third party
Publication number Priority date Publication date Assignee Title
CN103631695A (zh) * 2013-12-19 2014-03-12 北京经纬恒润科技有限公司 时间监测方法及装置
CN103631695B (zh) * 2013-12-19 2017-02-08 北京经纬恒润科技有限公司 时间监测方法及装置
CN108337035A (zh) * 2018-02-05 2018-07-27 北京电子工程总体研究所 一种遥测下行热备份且无缝衔接的星务遥测中断处理方法
CN111427742A (zh) * 2020-03-09 2020-07-17 创驱(上海)新能源科技有限公司 一种基于autosar架构的复杂驱动任务实时监控方法
CN111427742B (zh) * 2020-03-09 2023-11-03 创驱(上海)新能源科技有限公司 一种基于autosar架构的复杂驱动任务实时监控方法
CN111597016A (zh) * 2020-04-08 2020-08-28 延锋伟世通电子科技(上海)有限公司 一种系统任务的时间保护方法、系统、存储介质及终端
CN111597016B (zh) * 2020-04-08 2023-02-14 延锋伟世通电子科技(上海)有限公司 一种系统任务的时间保护方法、系统、存储介质及终端
CN111694594A (zh) * 2020-05-18 2020-09-22 成都盛芯微科技有限公司 补丁程序的控制方法和系统
CN111694594B (zh) * 2020-05-18 2023-03-03 成都盛芯微科技有限公司 补丁程序的控制方法和系统
CN117591347A (zh) * 2024-01-18 2024-02-23 北京集度科技有限公司 系统异常检测装置、处理器和嵌入式系统
CN117591347B (zh) * 2024-01-18 2024-04-26 北京集度科技有限公司 系统异常检测装置、处理器和嵌入式系统

Also Published As

Publication number Publication date
CN102339029B (zh) 2013-03-06

Similar Documents

Publication Publication Date Title
CN102339029B (zh) 一种嵌入式操作系统定时保护的实现方法
CN101452404B (zh) 一种嵌入式操作系统的任务调度装置及方法
CN100543686C (zh) 一种检测任务死循环的方法及系统
US20120246652A1 (en) Processor Management Via Thread Status
CN102779075A (zh) 一种在多处理器核系统中进行调度的方法、装置及系统
CN1996257A (zh) 对进程进行监控的方法和系统
US20080201500A1 (en) Multiple interrupt handling method, devices and software
CN109445927B (zh) 一种存储集群的任务管理方法及装置
CN109918141A (zh) 线程执行方法、装置、终端及存储介质
CN106062716B (zh) 在单任务系统中实现多任务的方法、装置及单任务系统
CN101853191B (zh) 检测操作系统中任务死循环的方法及系统
CN109324983A (zh) 一种自动清理缓存文件的方法、存储介质、设备及系统
CN105589772A (zh) 检测fpga芯片逻辑挂死的方法和装置
CN106886450A (zh) 任务调度方法和系统
CN101192192A (zh) 用于实时操作系统的任务异常诊断方法及系统
CN103631695B (zh) 时间监测方法及装置
CN108536531A (zh) 一种基于单片机的任务调度和电源管理方法
CN102521530A (zh) 一种许可证回收方法及系统
CN102096605A (zh) 一种嵌入式实时操作系统中多级资源管理的实现方法
CN102637126B (zh) 嵌入式系统的定时方法、装置和系统
CN108509257B (zh) 一种基于多线程的消息处理方法及装置
Hladik et al. Adequacy between AUTOSAR OS specification and real-time scheduling theory
CN106933681B (zh) 一种多对象阻塞方法及其系统
CN101937371A (zh) 一种嵌入式系统中监控任务执行状态的方法及装置
CN101320443A (zh) 一种电子工单的处理方法及处理装置

Legal Events

Date Code Title Description
C06 Publication
PB01 Publication
C10 Entry into substantive examination
SE01 Entry into force of request for substantive examination
C14 Grant of patent or utility model
GR01 Patent grant
CF01 Termination of patent right due to non-payment of annual fee

Granted publication date: 20130306

Termination date: 20150630

EXPY Termination of patent right or utility model