很多实时操作系统书籍都没有明确的阐述如何去安排任务的优先级。任务优先级的安排一般都是架构师去安排,因为这个是一个全局性的战略,必须要做到对不同的任务轻重有别。 在安排任务优先级之前还有一个概念,那就是如何安排任务。
程序在CPU中是以任务的方式在运行,所以我们要将系统的处理框图转化为多任务流程图,对处理进行任务划分。任务划分存在这样一对矛盾:如果任务太多,必然增加系统任务切换的开销;如果任务太少,系统的并行度就降低了,实时性就比较差。在任务划分时要遵循H.Gomma原则:
a. I/O原则:不同的外设执行不同任务;
b. 优先级原则:不同优先级处理不同的任务;
c. 大量运算:归为一个任务;
d. 功能耦合:归为一个任务;
e. 偶然耦合:归为一个任务;
f. 频率组合:对于周期时间,不同任务处理不同的频率。
以上原则中,不同的外设执行不同任务这个原则尤其显现的重要。比如shell终端会用到串口,这个划分为一个单独的任务。又如网络协议栈会使用到网卡,这个时候协议栈内部会有专门的任务服务网卡。
安排任务的优先级犹如一个公司的老板,如何安排员工的职位。下面是安排任务优先级的一个可能的策略: 首先把系统里有哪些任务全部排列出来,这个是排优先级的基础。
以下是安排任务优先级考虑的两点因素: 1 以任务周期为依据,任务周期越短执行频率越高,优先级越高。 2 根据任务的重要程度,越重要的任务优先级越高。
以上两点有时需要一起综合考虑,因为任务周期越短的任务未必是重要的任务,必须结合第2点综合考虑。
[ 本帖最后由 jorya_txj 于 2013-9-20 13:48 编辑 ]
|