实时操作系统(Real-time operating system, RTOS)是说,任务切换和中断响应的时间必须保证在多少时间内(如5us内)完成。
分为硬实时和软实操作系统:
硬实时是说必须在多少时间内完成切换(如VxWorks, 我们使用的ecos也是硬实时的)
软实时则是绝大多数情况可以在多少时间内完成切换(如linux)
从原理来看判断一个系统是否是实时只需要看它的调度算法即可,具体能实时在多少时间内,则要区分不同硬件了。
为什么需要实时操作系统呢?
举一个经常使用的实例,中高档汽车中使用的气囊。当报告车辆碰撞的传感器中断CPU后,操作系统应快速地分配展开气囊的任务,并且不允许任何其他非实时处理进行干扰,晚一秒钟展开气囊比没有气囊的情况更糟糕,这就是一个典型的必须使用硬实时的系统。
除为中断处理提供确定性外,实时处理也需要支持周期性间隔的任务调度。大量控制系统要求周期性采样与处理。某个特定任务必须按照固定的周期(p)执行,从而确保系统的稳定性。考虑一下汽车的防抱死系统(ABS)。控制系统对车辆的每个车轮的转速进行采样(每秒最多 20 次)并控制每个制动器的压力(防止它锁死)。为了保持控制系统的正常工作,传感器的采样与控制必须按照一定的周期间隔。这意味着必须抢占其他处理,以便 ABS 任务能按照期望的周期执行。
大多数实时操作系统使用的都是基于优先级的可抢占式调用策略,同一优先级则使用时间片轮转调度。
什么是优先级反转
优先级反转的含义是说高优先级的任务被迫等待低优先级任务执行。
因为多进程共享资源, 当出现互斥资源访问时,基于优先级调度会有如下这种现象:
三个任务task1, task2, task3,优先级 task1 > task2 > task3,当task1和task2某种原因被阻塞时,task3调度执行,task3执行时占用互斥资源A执行临界区代码时,很巧task1这时从阻塞状态恢复,基于优先级的调度会立即调度到task1执行,而task1执行时又需要持有互斥资源A,因此task1再度进入阻塞状态,等待task3执行。task3执行还未释放互斥资源A,这时task2从阻塞状态恢复立马得到调度执行并一直等到task2执行完毕。这时就相当于高优先级的task1需要等待中优先级的task2执行了,这就是优先级反转。
如何避免优先级反转?
解决优先级反转有许多方法,普遍使用的有两种:优先级继承;极限优先级。
优先级继承:当高优先级的任务需要等待低优先级任务释放互斥资源时,暂时先把低优先级任务的优先级提升至和高优先级任务优先级一样。这样就确保了不会有其他中优先级任务抢占执行。(ecos产品使用这种)
极限优先级:当任务占用互斥资源执行临界区代码时,先把该任务的优先级提升至极限优先级(系统最高优先级),等到释放资源时再降回原有优先级。
参考:
实时操作系统https://zh.wikipedia.org/wiki/%E5%AE%9E%E6%97%B6%E6%93%8D%E4%BD%9C%E7%B3%BB%E7%BB%9F
什么是真正的实时操作系统http://shanzhai.blog.51cto.com/3129733/924666
嵌入式实时系统中的优先级反转问题 http://www.crifan.com/transfer_embedded_real-time_systems_the_priority_inversion_problem/

实时操作系统和优先级反转相关推荐

  1. 实时操作系统和通用操作系统区别

    1. 实时操作系统简介 什么是实时操作系统? 一般而言,操作系统的任务是管理计算机的硬件资源和应用程序. 实时操作系统会执行这些任务,但是运行时间精度和可靠度都极高. 在实际应用中,有的系统失常代价高 ...

  2. 操作系统:优先级反转

    (1)什么是优先级反转 简单从字面上来说,就是低优先级的任务先于高优先级的任务执行了,优先级搞反了.那在什么情况下会生这种情况呢? 假设三个任务准备执行,A,B,C,优先级依次是A>B>C ...

  3. 优先级反转和解决方法

    优先级反转的描述: 假设任务1,任务2,任务3:他们的优先级顺序分别为1 > 2 > 3.有一个稀缺资源S,S由一个信号量控制为互斥访问. 任务3正在执行,并申请到了资源S: 任务1抢占了 ...

  4. 优先级反转实验,使用信号量实现【RT-Thread学习笔记 5】

    RTOS中很经典的问题.就是在使用共享资源的时候,优先级低的进程在优先级高的进程之前执行的问题.这里模拟这种情况. 下面的实验模拟了优先级反转的情况: 先定义三个线程: //优先级反转实验 rt_se ...

  5. 信号量优先级反转(翻转)与优先级继承

    <Linux进程管理:内核中的优先级继承互斥(rtmutex.h):防止优先级反转>https://rtoax.blog.csdn.net/article/details/11659433 ...

  6. 多线程的那点儿事(之优先级反转)

    [ 声明:版权所有,欢迎转载,请勿用于商业用途.  联系信箱:feixiaoxing @163.com] 优先级反转对于编写应用层的人员来说不大会发生,但是对于操作系统的设计者来说确是一个逃不过去的问 ...

  7. 【操作系统/OS笔记10】进程/线程的调度原则、调度算法、实时调度、多处理器调度、优先级反转

    本次笔记内容: 8.1 背景 8.2 调度原则 8.3 调度算法1 8.4 调度算法2 8.5 实时调度 8.6 多处理调度与优先级反转 文章目录 CPU调度背景 上下文切换 CPU调度 在进程/线程 ...

  8. 什么是优先级反转及解决方法

    什么是优先级反转 优先级反转,是指在使用信号量时,可能会出现的这样一种不合理的现象,即: 高优先级任务被低优先级任务阻塞,导致高优先级任务迟迟得不到调度.但其他中等优先级的任务却能抢到CPU资源.-- ...

  9. 信号量优先级反转问题记录(总是遗忘)

    1.信号量 信号量一般用于线程间同步,多个线程获取一个共享资源时,该资源信号量的count值不小于0时,取得count的线程皆可访问共享资源(类似于流量QOS中的令牌桶\通行证).当count值小于0 ...

最新文章

  1. windows如何添加本机dns记录_如何规避Sysmon DNS监控
  2. 因一个计算机故障而“停工”!观测宇宙 30 多年的哈勃太空望远镜还能坚持多久?...
  3. Node.js 添加 C/C++ Addon
  4. oracle的listagg函数
  5. SVG关注复杂图形的网页绘制技术
  6. Android—ActivityThread与Handler
  7. uln2003驱动蜂鸣器_让蜂鸣器发声
  8. 获取应用程序信息.h
  9. php头尾分离,laravel怎么做模板的头尾分离
  10. php ajax无刷新翻页,php ajax 无刷新翻页实现代码
  11. discuz论坛添加水印
  12. iPhone开发之第三方回调函数的使用方法
  13. mysql 官方docker_用docker安装官方mysql
  14. VS2008 安装部署工程的小问题
  15. String、StringBuffer 与StringBuilder
  16. asp 基础操作之增删改查
  17. Vue-Treeselect三级动态加载
  18. 虚拟机内linux网络连接,vmware中redhat5虚拟机无法连接网络
  19. 中超16强内援转会更新 陕西重金打造中国银河战舰
  20. http 406 java_java – Spring JSON请求获取406(不可接受)

热门文章

  1. iOS开发:几种静态扫描工具的使用与对比
  2. VC++注册,卸载OCX控件,以及判断是否注册
  3. 【OpenJ_Bailian - 2790】迷宫(bfs)
  4. 格式化输出;while循环;运算符
  5. 商业信息敏感、安全处理(口令、数字证书-U盾-密保卡、指纹识别-虹膜识别)...
  6. MongDB之shard_主从,副本集,分片的理解
  7. 我的Android学习之路
  8. 1074: [SCOI2007]折纸origami - BZOJ
  9. 8 个最好的 jQuery 树形 Tree 插件
  10. 4.Unix工作环境