如果VXWORKS高cpu优先级级任务获取CPU后,什么情况下会挂起

什么是优先级反转+有何危害+如何避免和解决_百度知道
什么是优先级反转+有何危害+如何避免和解决
提问者采纳
什么是优先级反转优先级反转,英文是priority inversion,也有其他叫法:优先级倒置优先级逆转优先级翻转任务之间谁可以得到执行,是通过任务调度来完成的2.任务调度有多种方法(算法)罗宾环调度算法:Round-robin scheduling algorithm基于优先级的调度算法:Priority-controlled scheduling algorithm3.任务调度的一种常见调度算法就是根据优先级高低去调度,优先让高优先级的任务去执行的任务调度器,总是去激活某个,在所有任务中优先级是最高的,且处于就绪状态的,任务,即让其去执行4.任务有多种状态:就绪,挂起,等等当然,任何任务,都可能由于,需要某种资源,而该资源被别人(别的任务)占用,而无法继续运行下去此时就变成:挂起 –& 等待其所需要的资源被释放然后才可以继续变成,就绪,等待下次调度时,就可以继续执行了。5.任务一般被称为:进程,或更小粒度的线程此处,均以进程为例来说明任务调度器,总是去激活某个,在所有任务中优先级是最高的,且处于就绪状态的,任务,即让其去执行但是,当某个最高优先级的任务A,由于其所需要的某个资源被某个低优先级的任务C占用了(还没使用完,还没释放),所以高优先级任务A就被阻塞了。此高优先级的任务A,必须等到低优先级任务C,把其所占用的资源释放掉后,才能继续运行。但是要等到低优先级任务C释放其所占用的资源的话,则很明显,必须要先让低优先级的任务C去执行,等低优先级任务C执行完毕后,才能去释放,高优先级任务A所希望得到的那个资源。所以,任务调度去,就去调度,让低优先级任务C去执行了。但是,此时,的问题就来了:在高优先级任务A执行的这段时间内,某个中优先级的任务B,已经处于就绪状态了。当高优先级的任务A,由于所需资源被占用而挂起,然后中优先级的任务B,由于比(本来打算去调度执行的)低优先级任务C的优先级高,所以被调度执行,然后B去一直执行,直到结束。一个具有中等优先级的任务(B),却比一个更高优先级的任务(A)先执行本来应该是优先级最高的任务A先执行的,结果却变成了,比优先级最高的任务A,的优先级低一些,中等优先级任务B,先执行了。好像是:高优先级任务A和中优先级任务B,两者之间的优先级调换了,反转了一样。优先级反转有何危害?说实话,很久之前,对于:计算机的概念,都完全只是概念到时候完全不懂相关技术和概念背后的逻辑的时候像对于此处的优先级反转,也无法完全理解的时候,自然也不会去考虑此概念背后的含义。而实际上,不对一个问题背后的现象,原因,去搞清楚的话,自然也是无法理解相关的概念的(对于,对现实世界中的应用情况不了解,对于概念也理解的不深的话,很可能就会问)(不就是个优先级反转嘛)即使,发生了优先级反转了,又如何?(地球还不是照转?!)优先级的反转,有很大危害。但是,在具体解释优先级反转的危害之前,需要知道相关背景知识:1.优先级反转,这个概念,往往都是在嵌入式领域内,尤其是嵌入式实时系统方面,才会提及关于嵌入式实时操作系统,不熟悉的,可以参考:【整理】嵌入式实时操作系统2.嵌入式实时操作系统,最最重要的指标就是:确保任务执行时间是可预测的,即涉及到最后期限deadline要确保,任何时刻,执行某个任务,都不能超过某个时间,比如1ms(我随便举例的)然后再来解释,优先级反转的危害:由于优先级反转,造成任务调度时,时间的不确定性。时间不确定,破坏了实时系统的实时性严重时可能导致系统崩溃由于本身基于优先级设计的任务,每个优先级不同的任务,往往对应着实际的现实中的执行的任务其优先级反转,导致低优先级比高优先级先执行了直接就导致任务错乱,逻辑错乱了程序也就异常了?(待确定此部分的理解是否有误)1.当年火星探路者号(Mars Pathfinder),就由于,此处所说的,优先级反转,而导致了内部执行逻辑出错的bug:在号发射后,在开始搜集气象数据之后没几天,系统(无故)重启了。后来,当然,被相关技术人员找到问题根源,就是,这个优先级反转所导致的,然后修复了此bug。当年火星探路者号用的软硬件是:硬件:CPU:RS6000总线:VME Bus各种接口卡/外设:音频摄像头1553总线接口软件:OS:(Wind River的)VxWorksWhat really happened on Mars ?What really happened on Mars?如何解决或避免优先级反转?既然,相对来说,优先级反转,这样的问题,对于,尤其是嵌入式实时系统中,危害这么大,那么肯定N年前,就有人找到解决办法了:优先级反转的解决办法:禁止所有中断(以保护临近区)当使用,禁止所有中断,来避免优先级反转时,需要满足下面的条件:可被抢占的中断已禁止的由于没有别的第三种的优先级了,所以,也就不可能发生反转了。(暂时没有完全理解此种的含义。。。。)priority inheritance 优先级继承:对于,占了高优先级任务A的某种所需资源的,低优先任务级C,当A被阻塞,要去调度,即使存在另一个中优先级任务B,则也可以实现:由于此时低优先级任务C已有和A同样的优先级了,则调度器自然会去执行:比中优先级任务B的优先级高的C了。然后,等C执行完毕后,就可以继续执行A了。优先级继承的实际例子What really happened on Mars ?中为例来来说明如何应用此,优先级继承:HOW WAS THE PROBLEM CORRECTED?VxWorks中的mutex对象,添加一个布尔值的参数,表示:mutex是否使用优先级继承当mutex初始化时,该参数是关闭的;当此参数被打开时,低优先级的任务,就从高优先级的任务中继承了相同的优先级,当然,背后是对应的检测机制:可以判定出,当然被阻塞的高优先级的任务,所需要的资源,被当前自己这个低优先级任务所占用了由哗窢糕喝蕹估革台宫郡此,解决了优先级反转的问题,避免了系统再次发生无故重启。Priority Celling(最高优先级/优先级天花板)给临界区,即上述的mutex等公用资源的部分凡是想要用到,临界区的资源的任务,要进入临界区之前,都将临界区的优先级赋值给该任务,使得该任务有了最高的优先级,可以不被打断,而始终继续运行,直到用到资源这样,就避免了,被高优先级A发现某资源被低优先级的C占用之类的问题了
来自团队:
其他类似问题
为您推荐:
优先级的相关知识
等待您来回答
下载知道APP
随时随地咨询
出门在外也不愁VxWorks下周期任务调度和任务周期选择_百度文库
两大类热门资源免费畅读
续费一年阅读会员,立省24元!
VxWorks下周期任务调度和任务周期选择
上传于||文档简介
&&V​x​W​o​r​k​s​下​周​期​任​务​调​度​和​任​务​周​期​选​择
阅读已结束,如果下载本文需要使用2下载券
想免费下载本文?
下载文档到电脑,查找使用更方便
还剩2页未读,继续阅读
你可能喜欢当前位置: →
→ 如果VXWORKS高优先级任务获取CPU后,什么情况下会挂起该怎么处理
如果VXWORKS高优先级任务获取CPU后,什么情况下会挂起该怎么处理
& 作者:佚名 & 来源: 互联网 & 热度:
&收藏到→_→:
摘要: 如果VXWORKS高优先级任务获取CPU后,什么情况下会挂起?目前系统设计三个线程,一个优先级最高。 & 如果高优先级任务不自...
"如果VXWORKS高优先级任务获取CPU后,什么情况下会挂起该怎么处理"::
如果vxworks高优先级任务获取cpu后,什么情况下会挂起?目前三个线程,一个优先级最高。 & 如果高优先级任务不自己主动sleep 或者waiting。除了优先级继承这种情况以外,还有哪些情况,低优先级的任务会获得cpu控制权,并开始运行??------解决方案--------------------真不清楚,貌似不行的吧
------解决方案--------------------1.自己运行异常,挂起2.阻塞等待资源而被阻塞,这跟挂起不是一个概念啊
------解决方案--------------------如果你想要低优先级任务也能运行,又想高优先级任务不自己主动sleep 或者waiting,可以用信号量(semtake)或队列(msgqreceive)进行阻塞调用
------解决方案--------------------阻塞或者taskdelay都可以让高优先级任务释放cpu的,然后低优先级任务就可以获取cpu了 搜索此文相关文章:此文来自: 马开东博客
网址: 站长QQ
上一篇:没有了
如果VXWORKS高优先级任务获取CPU后,什么情况下会挂起该怎么处理_VxWorks相关文章
VxWorks_总排行榜
VxWorks_最新
VxWorks_月排行榜
VxWorks_周排行榜
VxWorks_日排行榜}

我要回帖

更多关于 vxworks 获取时间 的文章

更多推荐

版权声明:文章内容来源于网络,版权归原作者所有,如有侵权请点击这里与我们联系,我们将及时删除。

点击添加站长微信