[AutoSar]BSW_OS 01 priority ceiling protocol(PCP)

发布时间:2024年01月12日


??

关键词

嵌入式、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的的影响。

在这里插入图片描述

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

文章来源:https://blog.csdn.net/weixin_42447823/article/details/135529507
本文来自互联网用户投稿,该文观点仅代表作者本人,不代表本站立场。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。