嵌入式OS入门注意事项-同RTX案件:九.关于优先-翻转,继承和天花板

涉及当调度优先级,会有很多问题,本文中,优先调度和一些战略的主要问题,以应付。

有几个概念如下:(priority inversion),优先度继承(priority inheritance)策略和优先度天花板(priority ceiling)策略。

1.优先度翻转(priority inversion)

大部分的RTOS都支持给不同进程分配优先度,一定程度上可以让调度和时间管理灵活性更大。

可是当涉及到一些代码临界区(critical section)的时候,可能就会出现故障。优先度翻转就是这样一个典型的问题。为了解释这个概念,我们先来看一个实际样例:

首先我们考虑三个进程,T1。T2,T3。

T3的优先度大于T2,T2的优先度大于T1,採用的调度算法是优先度高的能够打断优先度低的进程,临界区等待能够阻断高优先度的进程。

考虑在一个时间轴上。下面事件依次发生:

  1. T1被创造
  2. T1要求进入资源R临界区
  3. T2被创建
  4. T3被创建
  5. T3要求进入资源R临界区

光看文字可能会比較抽象。我们把每一个事件都画在下图:

请先依照时间顺序从左到右看一下全部事件。有没有认为有什么不妥的?

假设没有认为不妥的,我们再依照每一个进程来看。进程1首先被创建。然后进入了临界区运行,然后被阻断,然后又一次进入临界区运行。中间的阻断时间是三个进程最长的。

进程2第二被创建。一创建就打断了进程1,直到被阻断,然后恢复正常运行直到进程消灭。进程3最后被创建。一创建就打断了进程2,直到要求进入临界区被阻断。然后再恢复临界区运行,阻断时间是三个进程中第二长的。

问题恰恰出如今这里:进程3被什么阻断了?进程3由于要求资源R的临界区,而此时资源R临界区被进程1占用。理想状态我们应该让进程1尽快运行尽早退出临界区。以便进程3(当前最高优先度)可以及早运行。可实际上,由于进程1被进程2阻断(进程2优先度比进程1优先度高),所以进程2阻断了希望继续在临界区运行的进程1。直到进程2完毕!

所以,进程3实际上是被进程2阻断了,低优先度的进程阻断了高优先度的进程,这就是优先度翻转问题。(临界区运行阻断不属于优先级阻断。而是资源阻断。

)上面这个样例,假设我们把进程2的运行时间无限延长的话,进程3就全然没有办法继续运行了。

也就是说。理想情况下。我们希望高优先度的进程的最大阻断时间受限于低优先度进程的临界区运行时间之和,实际上在这样的最简单的设定下。高优先度的最大阻断时间是低优先度进程临界区运行时间之和加上优先度高于临界区运行进程的进程的运行时间之和。

一个简单的解决方式,就是在临界区时禁止中断,虽然这个确实可以解决优先度翻转问题,但我们假设考虑例如以下的情况:

这相当于无条件地阻断了进程2和进程3,显然不是我们想要的结果。

2.优先度继承(priority inheritance)

一个比較好的解决的方法就是优先度继承。

优先度继承的意思是,将临界区内的进程的优先度提高为该进程阻断的进程里的优先级最高进程的优先级。这么说可能还是非常绕。我们看一下这个办法详细如何解决我们上面提到的样例的:

当进程3要求进入R临界区运行时,由于被进程1阻断了,进程1此时在临界区内,并且它阻断的是进程3,那么此时它的优先度就会提升为进程3的优先度,也就是说继承了进程3的优先度。

当退出临界运行区后,进程1优先度又会降为原先的优先度。

这就非常好地攻克了高优先度进程被无条件阻断的问题,上面这个样例里面,进程3的阻断时间事实上仅仅是进程1临界区运行的时间。

但这也会引起死锁的问题。我们看以下这个样例:

  1. T1被创造
  2. T1要求进入资源A临界区
  3. T2被创建
  4. T2要讲求进入资源B临界区
  5. T2要求进入资源A临界区
  6. T1要求进入资源B临界区

当进程2要求资源A临界区时,由于进程1正在资源A临界区内。所以其优先级继承了进程2的优先级,但进程1运行了一段时间后又要求进入资源B临界区以完毕当前任务。退出临界区A。两个进程此时都在等待对方退出临界区。而自己却不会主动退出自己占有的临界区,所以死锁。

3.优先度天花板(priority ceiling)

这个策略就是为了解决优先度继承的死锁问题。

详细说来就是,为每一个资源定义优先度天花板,资源的优先度天花板是全部可能要相互排斥使用该资源的进程的最高优先度。

这样的策略仅仅同意满足一个条件的进程去进入临界区,而这个条件就是。该进程的优先度要大于(等于不足够)。全部其它进程占用的资源的优先度天花板的最高优先度。同一时候保留优先度继承策略。 我们看一下上面这个样例,优先度天花板会如何处理:

当进程2想进入资源B临界区时,被阻断了,由于它优先度并不大于其它进程(进程1)占用资源(A)的优先度天花板(进程2的优先度),被进程1阻断,与此同一时候。进程1的优先度提升为进程2的优先度,继续运行,直到退出两个临界区。

4.小结

RTX的相互排斥锁和信号量有内嵌的优先度继承策略,可是没有内嵌的优先度天花板策略,所以假设你的代码涉及了2个以上独占资源。请留心避免死锁。

版权声明:本文博客原创文章。博客,未经同意,不得转载。

转载于:https://www.cnblogs.com/gcczhongduan/p/4739096.html

嵌入式OS入门注意事项-同RTX案件:九.关于优先-翻转,继承和天花板相关推荐

  1. 嵌入式OS入门笔记-以RTX为案例:四.简单的时间管理

    嵌入式OS入门笔记-以RTX为案例:四.简单的时间管理 上一节简单记录了进程task.有了进程以后,我们需要关心怎么样分配CPU资源(或者运行时间)给每个进程.那么就要引入排程(scheduling) ...

  2. 嵌入式OS入门笔记-以RTX为案例:三.初探进程

    嵌入式OS入门笔记-以RTX为案例:三.初探进程 1.理论     进程,英文称呼很多Process, Task 等等,一般通用操作系统称Process的比较多,各种称呼涵义稍微有不一样.一般而言,进 ...

  3. 嵌入式OS入门笔记-以RTX为案例:二.快速移植到RTX

    嵌入式OS入门笔记-以RTX为案例:二.快速移植到RTX 本篇笔记将简单介绍RTX,包括基本架构,如何在Keil中配置.需要安装ARM-MDK和一块硬件板,笔记以STM32F4Discovery为例子 ...

  4. 嵌入式OS入门笔记-以RTX为案例:一.简介

    嵌入式OS入门笔记-以RTX为案例:一.简介 最近在做OS相关的项目,一方面涉及到大量(通用)操作系统的概念和理解,另一方面要深入到一个小实时操作系统的源代码中,并在此操作系统上开发应用.虽然说内容上 ...

  5. 浅谈C语言嵌入式系统编程注意事项

    C语言嵌入式系统编程注意事项之背景篇   本文的讨论主要围绕以通用处理器为中心的协议处理模块进行,因为它更多地牵涉到具体的C语言编程技巧 不同于一般形式的软件编程,嵌入式系统编程建立在特定的硬件平台上 ...

  6. C语言嵌入式系统编程注意事项

    不同于一般形式的软件编程,嵌入式系统编程建立在特定的硬件平台上,势必要求其编程语言具备较强的硬件直接操作能力.无疑, 汇编语言 具备这样的特质.但是,归因于汇编语言开发过程的复杂性,它并不是 嵌入式系 ...

  7. 嵌入式Linux入门经典笔记

    史上最牛的Linux内核学习方法论     点击下载 我的arm_linux移植笔记     点击下载 S3C2440完全开发流程     点击下载 Linux系统命令及其使用详解完整版     点击 ...

  8. 分享:嵌入式Linux入门学习指导

    很多嵌入式linux初学者对嵌入式linux学习十分迷茫,不知道该怎么一步步学习,嵌入式linux学习方法,学习的流程步骤以及学习过程中需要看哪些好的书籍.下面凌阳教育嵌入式培训网就为大家整理的嵌入式 ...

  9. 嵌入式Linux入门13:应用层调试

    本文主要介绍应用程序的调试方法. 很多网友问我怎么调试内核,怎么查找代码bug.其实我的方法不多.一是靠经验,掉入的坑多了,做笔记回顾,自然就有了经验.二是靠printf/printk大法跟踪.三是利 ...

最新文章

  1. 【组原】机器字长、指令字长、存储字长、存储单元、存储字 的区分
  2. 最重要的 Java EE 最佳实践
  3. 在线代理和缓存工具(转)
  4. js基础知识(pomelo阅读)
  5. [No000023]为何没有更多人从事程序员的工作?程序员常有,优秀程序员不常有!...
  6. paip.ikanalyzer 重加载词库的方法.
  7. python的浮点数_python 浮点数 转 整数python函数每日一讲 - all()
  8. 飞凌单片机解密_浅谈单片机解密 单片机解密方法
  9. SolidWorks软件远程安装协助
  10. OPNsense用户手册-反病毒引擎
  11. 运动斗士终南山的不老之道
  12. 北京最好的商标律师解析商标侵权的处罚规定
  13. 最简单三级管振荡分析(自由多谐振荡器电路)
  14. 只用显示器连接云服务器,显示器连接云服务器
  15. android 友盟统计动态设置渠道,Android 友盟多渠道打包
  16. Android App优化之Layout怎么摆
  17. OpenVas简介与安装
  18. 官网实例详解4.37(pretrained_word_embeddings.py)-keras学习笔记四
  19. firefox 绿色护眼
  20. IP核的使用之FIFO(Vivado)

热门文章

  1. AI作画升级!一键帮你用Stable Diffusion 生成无限缩放效果视频
  2. 积分兑换商城系统设立的初衷是什么?
  3. 360删除、修改注册表问题
  4. 【涨姿势】教你识别社交软件上喜欢骗炮的那些男男女女
  5. life in a day
  6. 基于java的小区车辆管理系统
  7. 国产家电与顶级家电的比较
  8. softmax及函数求导
  9. 量子理论若干基本问题
  10. sql数据库分离附加_使用分离和附加方法移动SQL数据库