当前位置: 首页 > news >正文

[AutoSar]BSW_OS 01 priority ceiling protocol(PCP)

目录

  • 关键词
  • 平台说明
  • 参考:状态装换图
  • 一、critical section 临界区的定义
  • 二、priority ceiling protocol是什么
  • 三、使用限制范围
  • 四、优先级反转
  • 五、死锁
  • 六、引入priority ceiling protocol后

  

关键词

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

在这里插入图片描述

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

相关文章:

  • 微信小程序开发学习笔记《10》页面导航
  • 矩阵的乘法
  • ubuntu 22 搭建git服务
  • HackerGPTWhiteRabbitNeo的使用及体验对比
  • Spring Framework和SpringBoot的区别
  • 科研绘图(二)气泡图
  • 揭秘虾皮API接口:开启电商开发新篇章,引领业务增长潮流
  • 平复焦虑,拒绝精神内耗——中国人民大学与加拿大女王大学金融硕士项目
  • PHP企业物资管理系统源码带文字安装教程
  • ubuntu20固定串口名称
  • ubuntu设定时间与外部ntp同步
  • SpringBoot使用过滤器进行接口签名防参数篡改
  • FlinkOnYarn 监控 flink任务
  • JS-DOM树和DOM对象
  • 训练营第四十二天 | 01背包问题,你该了解这些! ● 01背包问题,你该了解这些! 滚动数组 ● 416. 分割等和子集
  • C学习-枚举(九)
  • Java,console输出实时的转向GUI textbox
  • React-生命周期杂记
  • Vue.js源码(2):初探List Rendering
  • Windows Containers 大冒险: 容器网络
  • 编写符合Python风格的对象
  • 利用DataURL技术在网页上显示图片
  • 使用Tinker来调试Laravel应用程序的数据以及使用Tinker一些总结
  • 首页查询功能的一次实现过程
  • 因为阿里,他们成了“杭漂”
  • Java总结 - String - 这篇请使劲喷我
  • ​ ​Redis(五)主从复制:主从模式介绍、配置、拓扑(一主一从结构、一主多从结构、树形主从结构)、原理(复制过程、​​​​​​​数据同步psync)、总结
  • ​人工智能之父图灵诞辰纪念日,一起来看最受读者欢迎的AI技术好书
  • # Pytorch 中可以直接调用的Loss Functions总结:
  • #调用传感器数据_Flink使用函数之监控传感器温度上升提醒
  • #基础#使用Jupyter进行Notebook的转换 .ipynb文件导出为.md文件
  • (1/2)敏捷实践指南 Agile Practice Guide ([美] Project Management institute 著)
  • (C语言版)链表(三)——实现双向链表创建、删除、插入、释放内存等简单操作...
  • (ZT) 理解系统底层的概念是多么重要(by趋势科技邹飞)
  • (ZT)薛涌:谈贫说富
  • (七)Java对象在Hibernate持久化层的状态
  • (十八)三元表达式和列表解析
  • (详细版)Vary: Scaling up the Vision Vocabulary for Large Vision-Language Models
  • (一) springboot详细介绍
  • (一)Linux+Windows下安装ffmpeg
  • (转)LINQ之路
  • (转)树状数组
  • .bat批处理(八):各种形式的变量%0、%i、%%i、var、%var%、!var!的含义和区别
  • .NET 4.0中使用内存映射文件实现进程通讯
  • .NET Core中的去虚
  • .NET Standard、.NET Framework 、.NET Core三者的关系与区别?
  • .NET 中各种混淆(Obfuscation)的含义、原理、实际效果和不同级别的差异(使用 SmartAssembly)
  • .NetCore项目nginx发布
  • .Net下C#针对Excel开发控件汇总(ClosedXML,EPPlus,NPOI)
  • .NET与 java通用的3DES加密解密方法
  • @javax.ws.rs Webservice注解
  • @synthesize和@dynamic分别有什么作用?
  • [ C++ ] STL---string类的模拟实现
  • [1525]字符统计2 (哈希)SDUT
  • [AIGC] Spring Interceptor 拦截器详解