[AutoSar]BSW_OS 03 priority ceiling protocol(PCP)


  

关键词

嵌入式、C语言、autosar、OS、BSW

平台说明

项目Value
OSautosar OS
autosar厂商vector
芯片厂商TI
编程语言C,C++
编译器HighTec (GCC)

在这里插入图片描述

>>>>>回到总目录<<<<<<

参考:状态装换图

在这里插入图片描述

一、critical section 临界区的定义

  多个TASK或者ISR可以同时访问的resource 被成为临界区(critical section)。resource包括 memory、SPI、CAN、I2C。

二、priority ceiling protocol是什么

  priority ceiling protocol(优先级上限协议,又被俗称为天花板优先级协议)。在autosar OS中用于临时提升TASK 或者ISR 的优先级,以最大化减轻优先级反转的影响和避免死锁的产生。在配置好TASK/ISR和与其相挂钩的resource后,会自动分配静态的优先级(P)给resource,P的值等于TASK/ISR的最高的优先级。例如当TASK1,TASK2同时访问resource1,TASK1优先级 =10 ,TASK2优先级 =5,那么静态分配的resource1的优先级就是10.当TASK2使用resource1的时候,TASK2的优先级会被临时调整到10 = resource1的优先级,等TASK2运行完成后,TASK2的优先级重新回到5.具体请参考第六小结。

三、使用限制范围

  单核或者多核芯片中的核内。

四、优先级反转

  在没有优先级上限协议的情况下可能会出现优先级反转的情况。
  定义:优先级较低的task延迟了优先级较高的task的运行结束时间。
  优先级从下往上递增。TASK1 > TASK2 > TASK3 >TASK4。
  TASK1和TASK4可共享一个信号量(S1)。
T1时刻 TASK4先运行并占用S1,TASK1-3处于suspend状态。
T2时刻TASK1,TASK2TASK3被激活运行,但是由于信号量S1被TASK4占用,TASK1在判定envent的时候无法获取S1导致TASK1转移到waiting状态。
T3时刻TASK2由于TASK进入waiting,且TASK2优先级又高于TASK4,所以TASK4被抢占,转移到READY状态。
T4时刻TASK3由于TASK2运行完毕,且TASK3优先级又高于TASK4,所以TASK4依旧被抢占,转移到READY状态。
T5时刻,TASK3运行完毕,TASK4被抢占结束转移到RUNNING状态运行完毕后释放S1。
T6时刻,由于TASK4释放了S1,TASK1满足所有envent,于是开始转移到RUNNING。
于是,TASK1的运行被低优先级的TASK延迟了运行时间的情况称之为优先级反转。
在这里插入图片描述

五、死锁

  两个TASK/ISR同时因只能获取两个resource中的一个并占用,而不能同时获取到两个resoure导致无法运行的情况称之为死锁。
  优先级从下往上递增。TASK1 > TASK2
  TASK1和TASK4可共享两个信号量(S1,S2)。
T1时刻TASK1先运行并占用S1。
T2时刻,由于TASK1需要等待一个其他EVENT(例如其他task设置),转入waiting状态,TASK2开始运行并占用S2。
T3时刻,由于TASK1条件满足继续开始执行。TASK2转为ready状态。
T4时刻,TASK1请求占用S1,但是S1已经被TASK2占用,导致TASK1进入WATING状态,TASK2开始运行。
T5时刻,TASK2请求占用S2,但是S2已经被TASK1占用,导致TASK2进入WATING状态.
至此,TASK1和TASK2 同时进入waiting状态且不可能恢复到running,进入死锁。
在这里插入图片描述

六、引入priority ceiling protocol后

  注意,TASK/ISR不会被同优先级的TASK/ISR所抢占。

  优先级从下往上递增。Ceiling priority = TASK1 > TASK2 > TASK3 >TASK4。
  TASK1和TASK4可共享一个信号量(S1)。
T1时刻,TASK4开始运行,S1被占用。
T2时刻,TASK1,TASK2,TASK3被开始激活,想要抢占TASK4,由于有priority ceiling protocol,此时TASK4的优先级被临时调整到和TASK1一样的优先级,TASK1无法抢占TASK4,且此时TASK4优先级临时比TASK2和TASK3高,所以继续运行TASK4,而TASK2,Task3进入ready状态。
T3时刻,由于TASK4运行完毕并释放S1,TASK1开始执行。
T4时刻,TASK2由于TASK1运行完成,所以转移到了running。
T5时刻,TASK3由于TASK2运行完成,所以转移到了running。
由此可见,引入了priority ceiling protocol后,最大化减小了TASK4对TASK1的的影响。

在这里插入图片描述

>>>>>回到总目录<<<<<<

  • 27
    点赞
  • 29
    收藏
    觉得还不错? 一键收藏
  • 打赏
    打赏
  • 0
    评论

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

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

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包

打赏作者

老灰╮(╯-╰)╭

你的鼓励将是我创作的最大动力

¥1 ¥2 ¥4 ¥6 ¥10 ¥20
扫码支付:¥1
获取中
扫码支付

您的余额不足,请更换扫码支付或充值

打赏作者

实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

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

余额充值