搜索
bottom↓
回复: 1

任务优先级反转现象

[复制链接]

出0入0汤圆

发表于 2013-4-20 08:03:27 | 显示全部楼层 |阅读模式
在可剥夺型内核(可抢占)中,当任务以独占方式使用共享资源时。会出现低优先级任务先于高优先级任务而被运行的现象,这种现象叫做任务优先级反转。在一般情况下是不允许出现这种任务优先级反转现象的。下面就对优先级的反转现象进行一个详细分析:

      假设有三个任务A、B、C三个任务的运行情况。其中,任务A的优先级别高于任务B,任务B的优先级别高于任务C。任务A和C都要使用同一个共享资源S,而用于保护该资源的信号量在同一时间只能允许一个任务以独占的方式对该资源进行访问,即这个信号量是一个互斥型信号量。

      现在,假如任务A和任务B就在等待与各自任务相关的事件发生而处于等待状态,而任务C则正在运行,且在t1时刻取得了信号量并开始访问共享资源S。

      如果在任务C使用共享资源S过程中的t2时刻,任务A等待的事件已经到来,那么由于任务A的优先级别高于任务C的优先级别,所以任务A就剥夺任务C的CPU使用权而进入运行状态,而使任务C中止运行,这样任务C就失去了释放信号量的机会。如果任务A在运行的t3时刻又要访问共享资源S,但由于任务C还未释放信号量,因此任务A在运行的t3时刻又要访问共享资源S,但由于任务C还未释放信号量,因此任务A只好等待,以使任务C可继续使用共享资源S。

     这些都是正常的,但是意外的是,如果任务C继续使用共享资源S的过程中的t4时刻,任务B所等待的事件也到来,由于任务B的优先级别高于C的优先级别,任务B当然要剥夺任务C的CPU使用权而进入运行状态,而任务C则只好等待,这样任务A只有当任务B运行结束,并使任务C继续运行且释放了信号量的t6时刻之后,才能获得信号量而得以重新运行。

     综上所述,任务优先级别低的任务B反而优先于任务优先级高的任务A运行了,换句话说,从实际运行的结果来看,似乎任务B的优先级别高于任务A,系统中的这种现象叫做任务优先级反转。

阿莫论坛20周年了!感谢大家的支持与爱护!!

知道什么是神吗?其实神本来也是人,只不过神做了人做不到的事情 所以才成了神。 (头文字D, 杜汶泽)

出0入0汤圆

发表于 2013-5-26 22:53:58 | 显示全部楼层
书上说用互斥信号号可以避免,没有试过,也刚学,打算在STM32上跑跑
回帖提示: 反政府言论将被立即封锁ID 在按“提交”前,请自问一下:我这样表达会给举报吗,会给自己惹麻烦吗? 另外:尽量不要使用Mark、顶等没有意义的回复。不得大量使用大字体和彩色字。【本论坛不允许直接上传手机拍摄图片,浪费大家下载带宽和论坛服务器空间,请压缩后(图片小于1兆)才上传。压缩方法可以在微信里面发给自己(不要勾选“原图),然后下载,就能得到压缩后的图片。注意:要连续压缩2次才能满足要求!!】。另外,手机版只能上传图片,要上传附件需要切换到电脑版(不需要使用电脑,手机上切换到电脑版就行,页面底部)。
您需要登录后才可以回帖 登录 | 注册

本版积分规则

手机版|Archiver|amobbs.com 阿莫电子技术论坛 ( 粤ICP备2022115958号, 版权所有:东莞阿莫电子贸易商行 创办于2004年 (公安交互式论坛备案:44190002001997 ) )

GMT+8, 2024-7-23 09:25

© Since 2004 www.amobbs.com, 原www.ourdev.cn, 原www.ouravr.com

快速回复 返回顶部 返回列表