当前位置:首页 > 嵌入式 > 嵌入式教程
[导读]嵌入式系统优先级反转问题的分析

摘要: 本文介绍了嵌入式系统任务调度优先级反转的一个实例。通过实例的讨论对嵌入式系统优先级反转有一个更深入的了解,有助于在编程中避免此类问题的发生。
关键词: 嵌入式实时系统;VxWorks;多任务;优先级反转

引言
VxWorks是美国Wind River(风河)公司的一个实时操作系统,具有良好的可靠性和实时性。该系统采用基于优先抢占式调度策略,系统为每一个任务分配一个优先级,调度程序保证当前运行的是优先权最高的任务。但在实际开发中,由于任务间资源共享,信号量及中断的引入,往往会出现高优先级任务被低优先级任务长时间阻塞或阻塞一段不确定时间的现象,即所谓优先级反转(Priority Inversion)。优先级反转会造成任务调度的不确定性,严重时可能导致系统崩溃。本文在参考文献的基础上,结合实际项目开发过程中遇到的优先级反转问题,对造成优先级反转的原因及其解决方法进行了探讨。

优先级反转一般性描述
优先级反转发生在一个高优先级的任务被迫等待一段不确定时间,图1中3个任务分别为task1、task2和task3,其优先级由高到低。从图1可知,当task3占有由信号量(semaphore)保护的某种共享资源而进入临界区执行时,task1就绪,由于系统的抢占式调度策略,出现task1抢占task3执行。task1执行一段时间后也进入临界区,但此时task3仍占有此临界资源的信号量,task1被阻塞,等待task3释放此信号量。在经过这么一段时间后,task2已处于就绪状态,于是系统调度task2执行。如果task3在task2的执行期间一直没有能够被调度执行的话,那task1和task3将一直等到task2执行完后才能执行,task1更要等到task3释放它所占有的信号量才能执行;如果这段时间超出task1的最后期限,task1的调度出现了问题,此时轻则任务被长时间阻塞,重则造成系统崩溃。
优先级反转原因可归纳为:高优先级的任务task1由于要等待被低优先级任务task3占有的临界资源而被task2阻塞,而此时具有中优先级的任务task2抢占了task3的CPU时间,导致task2先于task1执行。此类优先级反转问题的解决方法大致有2种:一种被称作优先级继承(inheritance);另一种被称作优先级极限(ceilings)。下面介绍本文所遇到的优先级反转问题。

图1  优先级反转示意图

优先级反转的实例
上节对一般意义上的优先级反转现象进行了描述,本节涉及的优先级反转则较上述更为复杂,更具有隐蔽性。
本文采用的嵌入式微处理器为SAMSUNG公司的S3C2510, CPU核为arm940T。应项目要求任务task1和task2中分别进行调用微秒级和毫秒级的定时器功能函数,由于S3C2510处理器有5个32位定时器,因此只利用其中的两个即可。这里,ms级定时器实现的代码架构如下:
1) 中断处理函数:
LOCAL void Timer1_Int_Handle(void)
{
*S3C2510_TIC |= S3C2510_TIC_T1;/*清除中断*/
...
semGive(TelID4_Stop);/*释放二进制信号量*/
...
}
2) 毫秒级定时函数
void ms_Delay(int ms)
{     
...
semTake(TelID4_Stop,WAIT_FOREVER);
...
}
3) 时钟初始化函数
void msTimer_Init()
{
TelID4_Stop=semCreate (SEM_Q_FI FO,SEM_EMPTY);/*初始化二进制信号量*/
assert(TelID4_Stop);
...
}
us级定时器功能实现的代码与上面类似,这里不再给出相应的代码。函数调用说明:先进行初始化,然后任务可随意调用定时功能函数。当某个任务调用定时功能函数时,该任务被信号量阻塞,同时定时器开始进行减一计数,当计数器减到0时,会产生一个中断请求信号,此时系统会调用中断处理函数,在中断处理函数时将信号量释放,此时信号量变的可用,任务继续执行。
当两个不同优先级任务task1,task2(设优先级分别为93和94)同时运行,并分别调用us和ms级定时功能函数时,优先级反转出现了,task1会被长时间阻塞。其中,task1和task2的调用如下:
void task1(void)
{
...
FOREVER
{
...
us_Delay();
...
taskDelay(4);
}
void Task2(void)
{
...
FOREVER
{
...
ms_Delay();
...
}
上述两个任务之间资源是独立的,但两个任务在一起运行时,高优先级任务task1在经过一段时间后会被长期阻塞。
解决上述问题的方法比较简单,只要调整task1的任务优先级低于task2,这里选为95,则两个任务可长时间并行运行。
由于加入了中断和信号量,使系统任务调度变的复杂,从而导致两个原本看似独立的任务task1和task2,不能正常并行运行。造成此类现象的原因分析极其复杂,可视为是系统应用的一个盲点,但此类问题可通过总结规律而有效绕开。例如在上述问题中,若task1调用的定时函数的定时时间小于task2中的定时时间,则相应的任务优先级也应设有task1Priority< task2Priority,这样高优先级任务就不会被阻塞

结语
本文结合实际例子,对VxWorks中优先级反转问题进行了探讨,并对此类问题的解决方法进行了描述。本文的探讨将使嵌入式系统开发人员更深入了解优先级反转问题。

本站声明: 本文章由作者或相关机构授权发布,目的在于传递更多信息,并不代表本站赞同其观点,本站亦不保证或承诺内容真实性等。需要转载请联系该专栏作者,如若文章内容侵犯您的权益,请及时联系本站删除。
换一批
延伸阅读

9月2日消息,不造车的华为或将催生出更大的独角兽公司,随着阿维塔和赛力斯的入局,华为引望愈发显得引人瞩目。

关键字: 阿维塔 塞力斯 华为

加利福尼亚州圣克拉拉县2024年8月30日 /美通社/ -- 数字化转型技术解决方案公司Trianz今天宣布,该公司与Amazon Web Services (AWS)签订了...

关键字: AWS AN BSP 数字化

伦敦2024年8月29日 /美通社/ -- 英国汽车技术公司SODA.Auto推出其旗舰产品SODA V,这是全球首款涵盖汽车工程师从创意到认证的所有需求的工具,可用于创建软件定义汽车。 SODA V工具的开发耗时1.5...

关键字: 汽车 人工智能 智能驱动 BSP

北京2024年8月28日 /美通社/ -- 越来越多用户希望企业业务能7×24不间断运行,同时企业却面临越来越多业务中断的风险,如企业系统复杂性的增加,频繁的功能更新和发布等。如何确保业务连续性,提升韧性,成...

关键字: 亚马逊 解密 控制平面 BSP

8月30日消息,据媒体报道,腾讯和网易近期正在缩减他们对日本游戏市场的投资。

关键字: 腾讯 编码器 CPU

8月28日消息,今天上午,2024中国国际大数据产业博览会开幕式在贵阳举行,华为董事、质量流程IT总裁陶景文发表了演讲。

关键字: 华为 12nm EDA 半导体

8月28日消息,在2024中国国际大数据产业博览会上,华为常务董事、华为云CEO张平安发表演讲称,数字世界的话语权最终是由生态的繁荣决定的。

关键字: 华为 12nm 手机 卫星通信

要点: 有效应对环境变化,经营业绩稳中有升 落实提质增效举措,毛利润率延续升势 战略布局成效显著,战新业务引领增长 以科技创新为引领,提升企业核心竞争力 坚持高质量发展策略,塑强核心竞争优势...

关键字: 通信 BSP 电信运营商 数字经济

北京2024年8月27日 /美通社/ -- 8月21日,由中央广播电视总台与中国电影电视技术学会联合牵头组建的NVI技术创新联盟在BIRTV2024超高清全产业链发展研讨会上宣布正式成立。 活动现场 NVI技术创新联...

关键字: VI 传输协议 音频 BSP

北京2024年8月27日 /美通社/ -- 在8月23日举办的2024年长三角生态绿色一体化发展示范区联合招商会上,软通动力信息技术(集团)股份有限公司(以下简称"软通动力")与长三角投资(上海)有限...

关键字: BSP 信息技术
关闭
关闭