嵌入式实时操作系统中的优先级反转问题如何引起的
扫描二维码
随时随地手机看文章
在这篇文章中,小编将为大家带来嵌入式实时操作系统中的优先级反转问题的相关报道。如果你对本文即将要讲解的内容存在一定兴趣,不妨继续往下阅读哦。
嵌入式实时操作系统(Embedded Real-time Operation System,RTOS)。嵌入式系统是“用于控制、监视或者辅助操作机器和设备的装置”。
当外界事件或数据产生时,能够接受并以足够快的速度予以处理,其处理的结果又能在规定的时间之内来控制生产过程或对处理系统作出快速响应,并控制所有实时任务协调一致运行的嵌入式操作系统。
注:在工业控制、 军事设备、 航空航天等领域对系统的响应时间有苛刻的要求,这就需要使用实时系统。我们常常说的嵌入式操作系统都是嵌入式实时操作系统。比如μC/OS-II、eCOS和Linux、HOPEN OS。故对嵌入式实时操作系统的理解应该建立在对嵌入式系统的理解之上加入对响应时间的要求。
二、嵌入式实时操作系统中的优先级反转问题
通常情况下,任务的优先级是根据其重要性和紧急性来设定的。但是,在并发系统或多任务环境中,确实存在一种被称为“优先级反转”的现象。
什么时候会遇到这种现象?解决资源争用问题时。
死锁预防是实时系统设计中的一个重要因素。不幸的是,即使使用安全排除技术,这可能也不是困难的终点。在解决资源争用问题时,可能引入新的优先级翻转问题。
电电侠 能详细解释下优先级反转的原理吗?优先级翻转的基本原理可以通过一个简单的两任务(A 和 B)系统的行为来解释。
假设任务A 正在使用一个锁定的资源,此时调度程序决定进行任务交换,新任务B希望使用 A 持有的资源。在检查访问机制时,发现资源不可用,因此任务 B 挂起。互斥机制按计划执行。但是如果 B的优先级高于 A 呢? 结果仍然相同,B仍然被阻塞。结果是低优先级的任务 A 阻塞了高优先级的任务B;在 A 释放锁定资源之前,B不能执行。系统的行为表现得好像优先级颠倒了一样,即优先级翻转。然而,这种行为正是使用互斥时所期望的,没什么异常。
电电侠 (若有所思)在双任务系统中,性能下降可能不是一个大问题。 但是看下图的情况。
这是一个四任务系统,由任务 A、B、C和 D(按照优先级顺序)组成。系统还包括两个共享资源 W 和 X。请注意,为了简化对系统行为的解释,做了以下假设。
(1)上下文切换(重新调度)仅在滴答(tick)时间发生。
(2)任务可以随时挂起。
(3)任务可以随时就绪。
一个运行时场景
上图示例的一个运行时场景,如下图所示。在t0时刻,任务 D正在执行,其他任务处于挂起状态。在下一个滴答中断(t1时刻)发生之前,D锁定资源W。
注意:所有其他任务都已就绪。
在t1时刻,任务A抢占D,任务D重新进入就绪(等待运行)状态。不久之后,A 试图使用资源W 但发现它被锁定,因此任务A 挂起。t2时刻,任务 B被激活,运行至完成,然后挂起。在t3时刻,任务C运行至完成并挂起。然后在t4时刻,D 再次执行。只有当任务 D释放资源锁时,A 才能执行(t5时刻)。
在此设计中,任务A被赋予最高优先级,因为它是一项重要的任务。然而由于互斥机制锁,任务A只能被迫等待所有其他任务完成后才能执行。
电电侠 显然这种表现是不能接受的, 如何才能防止“连锁”优先级翻转情况的发生? 这个问题可以通过两种方式解决,都涉及临时提升任务优先级。
运行任务的优先级可以提高到通过优先继承技术获取的确定值。
为共享资源分配优先级,然后将正在运行的任务的优先级提高到资源优先级值,这种方式称为优先级天花板技术。
1、缩短中断响应时间。
几乎所有的实时事件都是通过中断上报的,当中断来临时,必须停止当前的一切任务,响应中断,把中断分成两部分:上半部分与下半部分,或者快中断部分与慢中断部分。上半部分屏蔽其他中断,处理那些紧急任务,如清除某些寄存器,保存中断现场,给相应进程发送消息等, 其他不太紧急的部分放在下半部分,此时所有中断打开,不影响其他任务的完成。
2、缩短进程上下文切换时间。
当CPU在执行某个任务时,实时任务到来,需要马上执行实时任务,不能等到当前任务时间片用完才去执行实时任务,必须在中断来临之时马上能够切换过去,保存当前进程的上下文如寄存器,内存,文件,信号等上下文,恢复实时任务的上下文。保存恢复上下文越快越好,这就要求两个进程的上下文共享的资源越少越好,如每个任务的内存是独立的,甚至寄存器也是独立的,这样互不干扰,切换最快了。
3、缩短实时进程调度时间。
一般进程都是按照优先级调度的,实时进程的优先级当然要比非实时的高, 不同实时进程按紧急度不同优先级也不同,实时进程调度算法最好与非实时部分有所区别,算法复杂度最好是O(1)。
以上便是小编此次想要和大家共同分享的内容,如果你对本文内容感到满意,不妨持续关注我们网站哟。最后,十分感谢大家的阅读,have a nice day!