UCOSiii学习笔记<四>

假设有3个任务,优先级从高到底分别是任务H(high)M(middle)L(low)。

任务H和任务L使用互斥信号量访问同一临界资源,任务M不使用临界资源。

图1(1):L任务正在使用某临界资源(信号加锁),H任务被唤醒,执行H任务。但L任务并未执行完毕,此时临界资源还未释放(互斥信号量还处于加锁状态,即使优先级更高的任务也无法访问这个临界资源)
图1(2):这个时刻H任务也要对该临界资源进行访问,但L任务还未释放资源,由于保护机制,H任务进入阻塞态,L任务得以继续运行,此时已经发生了优先级翻转现
图1(3):某个时刻M任务被唤醒,由于M任务的优先级高于工任务,M任务抢占了CPU的使用权,M任务开始运行,此时L任务尚未执行完,临界资源还没被释放
图1(4):M任务运行结束,归还CPU使用权,L任务继续运行。
图1(5):L任务运行结東,释放临界资源(信号解锁),H任务得以对资源进行访问,H任务开始运行。

说的通俗点就是,任务H和任务L都会访问一个临界资源区,通过互斥信号量加锁解锁没问题。任务H和任务L会互相等待对方加锁或解锁,这个也没问题。但是任务M优先级比任务L优先级高,本来任务H等着任务L解锁互斥信号量呢,结果CPU不去执行任务L,CPU被任务M抢了,任务H本来是想等任务L的信号呢,现在还要等任务M执行完,才能让任务L解锁信号量。那任务H可是最高优先级啊,任务H不能忍了。所有任务H把任务L的优先级提到和自己一般高(通过互斥信号量自动完成),这样任务M无法打断任务L了。等任务H获得了这个信号量,在把任务L的优先级调回原来的级别。

那到底什么是优先级反转呢?

我的理解:两个任务使用互斥信号量访问同一资源,由于其他任务抢占了其中某个任务的CPU使用时间,导致另一个任务不能及时接收或发送这个互斥信号量。使得一个任务等待互斥信号量的时间变长。

使用互斥信号量解决上面这个问题:

 图2(1):L任务正在使用某临界资源,L任务正在使用某临界资源,H任务被唤醒执行H任务。但L任务并未执行完毕,此时临界资源还未释放
图2(2):某一时刻任务也要对该资源进行访问,由于保护机制,H任务进入塞态。此时发生优先级继承,系统将L任务的优先级暂时提升到与H任务优先级相同,L任务继续执行
图2(3):在某一时刻M任务被唤醒,由于此时M任务的优先级暂时低于L任务,所以M任务仅在就绪态,而无法获得CPU使用权。
图2(4):L任务运行完毕,H任务获得对资源的访问权,H任务从阻塞态变成运行态,此时L任务的优先级会变回原来的优先级。
图2(5):当H任务运行完毕,M任务得到CPU使用权,开始执行
图2(6):系统正常运行,按照设定好的优先级运行

  • 0
    点赞
  • 1
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值