引言
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);
...
}[page]
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中优先级反转问题进行了探讨,并对此类问题的解决方法进行了描述。本文的探讨将使嵌入式系统开发人员更深入了解优先级反转问题。
参考文献:
[1]. arm940T datasheet http://www.dzsc.com/datasheet/arm940T_1336037.html.
[2]. S3C2510 datasheet http://www.dzsc.com/datasheet/S3C2510_1097662.html.
关键字:实时系统 VxWorks 多任务 优先级反转
引用地址:
嵌入式系统优先级反转问题的分析
推荐阅读最新更新时间:2024-03-16 13:23
基于ARM的实时测控系统的开发平台
国内测控系统开发大多是几个人以小组的形式根据不同的项目组织在一起,由于缺乏一个稳定工作的硬件基础,整个开发工作的重点大都放在调试硬件故障上。首先,所有项目的开发几乎全部使用汇编语言,严重影响了程序的可读性和可移植性,更换不同的处理器就意味着一切从头开始,就连使用相同处理器的不同项目组之间的程序重用也很困难;而对于嵌入式应用系统应着重解决的实际问题往往无暇顾及,非常不利于我国嵌入式应用水平的提高。其次,测控系统通信接口种类比较少, 多为传统的RS232、RS485接口,数据交换速度慢,已经不能满足日益增长的数据传输需求。另外,传统的8位单片机已经越来越不能适应日渐复杂的应用需求;友好的交互界面、网络互连功能、智能化的软件、实时的数据
[单片机]
风河为F-22和F-35航电系统提供通信支持
【新闻要点】 Wind River VxWorks MILS Platform为新的航空电子通信系统提供安全的操作系统基础。 洛克希德马丁项目展示了开放的系统架构是如何以经济高效的方式实现新的航空电子功能的。 风河公司的受信任产品阵容能够实现嵌入式虚拟化和多级混合安全应用集中性。 全球领先的智能互联系统嵌入式软件提供商风河®公司近日宣布,洛克希德马丁公司使用Wind River VxWorks® MILS Platform为其最近试飞的新航空电子通信系统提供基于分离内核的安全基础。 洛克希德马丁独立资助的这项研发活动称为密苏里项目(Project Missouri),该项目主要清楚展示了开放系统架构(OSA,Open
[网络通信]
基于PC104 总线的实时信号采集处理系统
0 引言
PC104是嵌入式工控机的一种,其外部总线接口为PC104 总线.使用堆叠的方式可以将多个PC104 主板结合到一起,并通过螺栓固定,保证系统的牢固可靠,应对恶劣的使用环境.由于PC104具有功耗低,体积小,扩展性高,功能强大等优点,其已经在航空航天.军用武器装备.工业控制等领域得到了广泛的使用.
在对武器装备进行测试维护时,经常需要对设备中的各类模拟信号进行分析,从而对武器系统的运行情况做出判断.目前常见的测试设备往往实时性不高,无法更多地进行人机交互.同时由于测试设备体积过于庞大,并不方便在外场对武器装备进行直接的测试和维护.随着现阶段军用装备外场测试的信息化程度逐渐提高,迫切需要研制出体积小.结
[嵌入式]
基于双CPU实时图像监控系统的设计
图像监控以其直观、方便、信息内容丰富而被广泛应用于许多场合。在电子技术与通讯技术的发展过程中,图像监控系统的技术水平直接反映了不同阶段电子与通讯的技术状况。上世纪90年代末,随着多媒体技术、视频压缩编码技术和网络通讯技术的发展,数字视频监控系统迅速崛起。在数字图像监控系统中,嵌入式监控系统主要由嵌入式处理器、以太网接口控制器等相关支撑硬件及嵌入式操作系统组成。 1 设计方案 采用TI公司的TMS320VC5471为处理器,此芯片是一种双内核器件,内部集成了一个带程序和数据存储器(均为RAM)的TMS320C54x DSP子系统和一个带仿真工具的ARM7TMRISC微控制器核。在双CPU系统中,ARM7TDMI作为主CPU,负责
[工业控制]
一种嵌入式的太阳能干燥实时监控系统的设计方案
干燥室通过RS 485总线和上位机通信,上位机设定干燥室内的目标温度和湿度上限,并实时显示干燥室内温度、湿度、鼓风机转速、排气扇 开关 状态等参数。嵌入式系统软件采用FreeRTOS实时操作系统,保证了系统的实时性和可靠性,实现对太阳能干燥室内温湿度的实时监测与控制。经现场应用验证了系统运行稳定,控制精度高,响应速度快,从而证实了本方案具有较强的实用性。 0 引言 太阳能是一种清洁可再生能源,应用前景十分广阔。近年来,利用太阳能进行农产品、药品的加工也因其节能、干燥时间短、干燥品质高等特点而发展十分迅速。为保证干燥物料的品质与干燥效率,太阳能干燥设备在进行干燥作业时需要对干燥室内的温湿度进行实时监控。沈阳农业大
[单片机]
机器人实时远程控制系统及其开发库的设计与实现
摘 要:以实时性、可靠性为前提,设计了一套机器人远程控制系统。介绍了其中的远程控制平台和本地控制系统的结构及其关键技术;机器人远程控制系统开发库的设计与实现;展示了开发实例。
关键词:机器人远程控制系统 远程控制平台 本地控制系统 自适应视频传输方案 开发库
近年来,随着无线网络技术的发展和日益成熟,利用WLAN和LAN的混和组网,使基于网络的机器人远程控制成为一个热门的研究领域。
本文设计了一套移动机器人远程控制系统。该系统可用于如时延网络环境下控制系统的稳定性理论、实时控制系统的网络通信协议、基于事件驱动方式的网络系统控制策略、目标识别技术等方面的研究。
1 硬件环境
被控的机器人采用了美国A
[传感技术]
stm32 Ctext-M3内核最简单的多任务RTOS
RTOS 实时操作系统,我做的是一个多任务的操作系统,可以同时运行多个任务,我这里设置的最大任务数是32个, 估计跑30多个任务的嵌入式设备很少吧,32个任务够用了。 OS我把它叫做HesOS,主要功能如下,比较简单。 1--实现多任务调度 2--实现任务调度锁 3--实现临界区保护 4--实现读取cpu使用率(这个功能比较重要的) 5--实现us延时(用于模拟如IIC总线模拟) 对于一般的嵌入式应用有这些功能,差不多够用了。 移植HesOS也非常简单,不会像其它的OS一样比较庞大,修改的地方也比较多,使用起来也复杂。 HesOS不管是移植和使用都是非常简单的,类似于PC的线程使用。 主
[单片机]
基于单片机的线阵CCD实时检测系统的开发
CCD(Charge Coupled Devices)电荷耦合器件应用系统的关键技术在于CCD驱动时序的产生和输出信号的采集与处理。目前驱动主要有直接数字电路驱动、EPROM驱动、专用IC驱动、复杂的CPLD驱动等常用的驱动方法,但是它们存在着逻辑设计较为复杂、调试困难、柔性较差等缺点。在数据采集和处理方面,大多数都经过差动放大、采样保持、A/D转换,再通过总线或采集卡等接口与PC机相连。这种系统结构庞大,而且在信号处理、通信软件和界面设计等方面要耗费大量的精力。应该说这种应用系统在静态测量处理方面有其优点,但如果要满足实时控制系统的连续检测要求以及系统体积精小而容易装配等特点,则必须简化驱动电路、数据采集过程和处理方式。本文正是
[测试测量]