优先级翻转的问题
来源:互联网 发布:centos 邮件服务器 编辑:程序博客网 时间:2024/05/22 17:50
在抢占式RTOS中,经常会碰到这个名词,以著名的“火星探路者”为例,解释一下优先级翻转带来的问题,并介绍一下VxWorks中是如何解决这个问题的。
1997年美国航天部门成功发射“探路者”,在活性表面登录,在开始一段时间内,“漫步者探测车”工作稳定,并传回大量数据,但是几天后,“探路者”开始出现系统复位、数据丢失的现象。经过研发人员的分析,最后得出结论,就是因为系统里发生了优先级翻转的问题。
其中有如下两个任务需要互斥访问共享资源“信息总线”:
T1:总线管理任务,具有最高优先级(这里用T1表示),运行频繁进行总线数据I/O。
T6:数据收集任务,优先级低(这里用T6表示),运行少,手机数据,并通过互斥信号量将数据发布到“信息总线”。
如果“数据收集任务 T6”持有信号量期间,总线管理任务就绪并接也申请获取信号量,则总线管理任务阻塞,直到数据收集任务释放信号量。
这样看起来会工作很好,当数据收集任务很快完成后,高优先级的总线管理任务会很快得到运行。
但是,另有一个需要较长时间运行的通信任务(这里用T3表示),其优先级比T6高,比T1低,在很少情况下,如果通信任务被中断程序激活,并且刚好在总线管理任务(T1)等待数据收集任务(T6)完成期间就绪,这样T3将被系统调度,从而比它低优先级的数据收集任务T6得不到运行,因而使最高优先级的总线管理任务(T1)也无法运行,一直被阻塞在那里。在经历一定的时间后,看门狗观测到“总线”没有活动,将其解释为严重错误,并使系统复位。
这个就是优先级翻转。
解决的办法:
VxWorks中采用了优先级继承协议,当高优先级任务需要低优先级任务占用资源时,将低优先级任务的优先级提高到和高优先级相同的级别,也就是低优先级继承了高优先级任务的优先级级别。
在上面的例子中,T6会继承T1的优先级别,从而能保证T1一定比T3优先调度。在VxWorks中,默认情况下该功能被关闭,所以就有可能发生优先级翻转,也就导致了“火星探路者”中问题的发生。
另外还有一个防止优先级翻转的是优先级天花板,不论是否阻塞了高优先级任务,持有该协议的任务在执行期间,都被赋予优先级天花板看作的优先级,以使任务尽快完成操作。
1997年美国航天部门成功发射“探路者”,在活性表面登录,在开始一段时间内,“漫步者探测车”工作稳定,并传回大量数据,但是几天后,“探路者”开始出现系统复位、数据丢失的现象。经过研发人员的分析,最后得出结论,就是因为系统里发生了优先级翻转的问题。
其中有如下两个任务需要互斥访问共享资源“信息总线”:
T1:总线管理任务,具有最高优先级(这里用T1表示),运行频繁进行总线数据I/O。
T6:数据收集任务,优先级低(这里用T6表示),运行少,手机数据,并通过互斥信号量将数据发布到“信息总线”。
如果“数据收集任务 T6”持有信号量期间,总线管理任务就绪并接也申请获取信号量,则总线管理任务阻塞,直到数据收集任务释放信号量。
这样看起来会工作很好,当数据收集任务很快完成后,高优先级的总线管理任务会很快得到运行。
但是,另有一个需要较长时间运行的通信任务(这里用T3表示),其优先级比T6高,比T1低,在很少情况下,如果通信任务被中断程序激活,并且刚好在总线管理任务(T1)等待数据收集任务(T6)完成期间就绪,这样T3将被系统调度,从而比它低优先级的数据收集任务T6得不到运行,因而使最高优先级的总线管理任务(T1)也无法运行,一直被阻塞在那里。在经历一定的时间后,看门狗观测到“总线”没有活动,将其解释为严重错误,并使系统复位。
这个就是优先级翻转。
解决的办法:
VxWorks中采用了优先级继承协议,当高优先级任务需要低优先级任务占用资源时,将低优先级任务的优先级提高到和高优先级相同的级别,也就是低优先级继承了高优先级任务的优先级级别。
在上面的例子中,T6会继承T1的优先级别,从而能保证T1一定比T3优先调度。在VxWorks中,默认情况下该功能被关闭,所以就有可能发生优先级翻转,也就导致了“火星探路者”中问题的发生。
另外还有一个防止优先级翻转的是优先级天花板,不论是否阻塞了高优先级任务,持有该协议的任务在执行期间,都被赋予优先级天花板看作的优先级,以使任务尽快完成操作。
0 0
- 优先级翻转的问题
- 优先级翻转问题
- 火星探测器的优先级翻转
- 实时系统中的优先级翻转问题
- 转自百度百科 - 优先级翻转问题
- 优先级翻转
- 优先级翻转
- 优先级翻转
- 信号量与优先级翻转的分析
- 关于uC/OS-II中优先级翻转问题
- 关于uC/OS-II中优先级翻转问题(转)
- 关于 uC/OS-II 中 优先级 翻转问题
- uC/OS-II 中的优先级翻转问题分析
- 优先级翻转与优先级继承
- 优先级翻转与优先级继承
- 优先级翻转与优先级继承
- 优先级翻转与优先级继承
- 优先级翻转与优先级继承
- go 速学 - 16 - 项目结构
- Dump h264 raw data from LIVE555 client
- 第六周项目二:我的数组类
- 每个人都在自己的逻辑里不可自拔
- ffmpeg图片合成视频
- 优先级翻转的问题
- 详解Hadoop核心架构
- “could not build module UIKit”问题的解决
- 几种流行Webservice框架性能对比(转载、拼接)
- HTML5 SVG和CSS3炫酷液态菜单按钮特效
- 黑马程序员--Java中UDP与TCP的实现
- 安装ESXi5.1弹出提示No Network Adapters
- 第六周阅读程序四
- Objective C 中的nil,Nil,NULL和NSNull理解