调度程序的功能是调度任务的执行顺序,非调度实体的存在却会导致调度程序的效率下降,为时限调度程序而设计的系统总是尽可能地减少非调度实体的数量以及这些实体所占用的CPU时间,本文介绍嵌入式系统设计过程中任务优先级调度的策略。
在过去的几年里,固定优先级调度技术的发展迅速。分时系统和一些实时系统,要求所有的任务要同时运行。它赋予每个任务一个有效的优先级,并且该优先级在任务等候执行的过程中逐步递增。最后每一个任务都将获得一个有效的优先级,该优先级将确保该任务至少会获得一个短暂的CPU执行时间。
一个高优先级的任务可能会发现自己正在等待一个低优先级的任务释放资源。这样将高优先级任务的有效优先级下降到了低优先级任务的有效优先级以下。这种技术可以实现,但是对于调试却是有害的。优先级继承以及优先级限制协议就是专为解决这样的问题而发明的。该技术推进了低优先级任务的优先级,与此
实际上,绝大多数的实时操作系统都采用静态优先级调度方式,本文介绍如何通过时限调度(deadline scheduling)来保证系统的实时性。
速率单调分析
速率单调性分析(rate monotonic analysis)证明控制工程网版权所有,如果一个固定优先级抢占系统在执行的一系列彼此独立的周期性任务,那么不存在为周期性任务静态分配优先级的算法CONTROL ENGINEERING China版权所有,而为这样的任务分配较短的时间来获得较高的优先级却更容易找到办法。
为此,人们研发了RMA调度,RMA的一个重要特征是可以分析系统的可实现性(feasibility)。采用RMA,结构设计人员可以收集系统的情况,然后分析系统的可实现性控制工程网版权所有,从而获得“调度程序正是如此工作”或者是“固定优先级调度程序不能进行这样的调度”等分析结果。
简单、通用版本的RMA使用超出69%的CPU时间,这将构成实际系统的可实现性方面的问题。如果结构设计工程师退回到老式的时间线分析,RMA甚至要占用100%的CPU时间,问题是我们采用的是单调乏味的手工仿真,而不是高等的代数运算。
在某些系统中,几乎所有的事件都是周期性的控制工程网版权所有,但是大多数的系统中都存在大量的非周期性事件,现实就是如此。可以在一个周期严格的系统中处理非周期性事件,通常是将它们分配到一个周期性调度的时隙中,由于需要实现这种时隙的轮询,所以会极大地降低系统的性能。系统设计工程师也必须决定轮询这些非周期性事件的频度,以及处理这些事件允许的时间长度。
然后,要考虑软实时方面的问题。通过弹出一个任务的优先级使之高于该时段指示的优先级水平,从而在RMA中可以对重要性进行度量。这样就会造成那些没有施加优先级弹出的任务出现问题,这种情况正好与RMA的整体设想相反。程序将分析可实现性,然后确保系统的成功。RMA不是为不可实现的系统而设计的。
固定优先级调度
固定优先级调度最大的问题是对时限的要求具有易忘性,也就是说这种优先级调度对硬实时不敏感。这就像是一个基于定时器的交通灯,没有任何的交通流量传感器。如图1所示。上面的时间线(H)表示一个高优先级的任务,下面的时间线(L)表示一个低优先级的任务。调度程序会首先执行高优先级的任务,这样就容易在该任务的时限内完成该任务。任务H完成后,调度程序就切换到任务LCONTROL ENGINEERING China版权所有,然而在任务L的时限内可能没有足够的时间来完成任务L。如果调度程序对这些时限的情况很了解,那么调度程序就有可能在任务H之前先运行任务L,这样可能能够满足两个任务所有的时限要求。
一个有经验的实时程序设计师可能用一些设计技巧来处理这样的问题,如在系