实时操作系统(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产品使用这种) 极限优先级:当任务占用互斥资源执行临界区代码时,先把该任务的优先级提升至极限优先级(系统最高优先级),等到释放资源时再降回原有优先级。 基于操作系统的优先级反转和避免反转的详细介绍 http://bbs.cirmall.com/thread-52338-1-1.html (出处: 电路城) |
|手机版|深圳市光明谷科技有限公司|光明谷商城|Sunshine Silicon Corpporation ( 粤ICP备14060730号 ) |Sitemap
GMT+8, 2021-12-28 17:09 , Processed in 0.092517 second(s), 37 queries .
Powered by Discuz! X3.2 Licensed
© 2001-2013 Comsenz Inc.