教材:嵌入式系统及应用,罗蕾、李允、陈丽蓉等,电子工业出版社
任务管理与调度
基础要点
任务是调度的基本单位
采用多任务的好处:
- 任务的规模较小,每个任务更容易编码和调试,其质量也更容易得到保证
- 不少应用本身就是由多个任务构成的,如一个应用可能需要进行以下任务的处理:计算、从网络获取数据和刷新显示屏幕;采用多任务的处理方式是应用问题的一个非常自然的解决方式
- 任务之间具有较高的独立性,耦合性小,通过增加新的任务就能方便的扩充系统功能
- 实时性强,保证紧急事件得到优先处理成为可能
进程是资源分配的单位,所有线程共享该进程的状态和资源,可以访问相同的数据
使用线程的优势
- 创建:在一个已有进程中创建一个新线程比创建一个全新的进程所需的时间开销少;
- 终止:终止一个线程比终止一个进程所花费的时间少;
- 切换:线程切换比进程切换所花费的时间少;
- 通信:使同一进程内部不同线程之间的通信效率得到显著提高
大多数嵌入式实时内核是单进程/多线程模型,或简单地称为任务模型,适用于实时性要求较高的、相对简单的应用
也有一些嵌入式实时操作系统采用了多进程/多线程模型,适合于处理复杂的应用
任务
任务(task)通常为进程(process)和线程(thread)的统称
任务是一个具有独立功能的无限循环的程序段的一次运行活动
实时内核调度的单位
具有动态性、并行性、异步独立性;
任务的内容
代码:一段可执行的程序
数据:程序所需要的相关数据(变量、工作空间、缓冲区等)
堆栈
程序执行的上下文环境
任务通常包含一个具有无限循环的程序
任务与程序的区别
任务能真实地描述工作内容的并发性,而程序不能
程序是任务的组成部分
程序是静态的,任务是动态的
任务有生命周期,有诞生、有消亡,是短暂的;而程序是相对长久的
一个程序可对应多个任务,反之亦然
任务具有创建其他任务的功能,而程序没有
任务上下文环境(context)
包括了实时内核管理任务、以及处理器执行任务所需要的所有信息
- 任务优先级
- 任务的状态等实时内核所需要的信息
- 处理器的各种寄存器的内容(hardware context):程序计数器、堆栈指针、通用寄存器等的内容
任务的上下文环境通过任务控制块(Task Control Block,TCB)来体现
任务的分类
按照到达情况的可预测性,任务可以划分为周期任务(periodic task)和非周期任务
按照重要程度,可分为关键任务(critical task)和非关键任务(noncritical task)
周期任务与非周期任务
周期任务每隔一个固定的时间间隔就会执行一次
非周期任务执行的间隔时间则为不确定的
关键任务与非关键任务
关键任务为需要得到及时执行的任务,否则将出现灾难性的后果
非关键任务如果没有得到及时执行,不会产生严重后果
拥有关键任务的实时系统又被称为强实时(hard real-time)系统,否则称为弱实时(soft real-time)系统
任务参数
优先级(Priority)
优先级越高,表明任务越需要得到优先处理
静态优先级
任务的优先级被确定后,在系统运行过程中将不再发生变化动态优先级
系统运行过程中,任务的优先级是可以动态变化的
周期(Period)
周期任务所具有的参数,表示任务周期性执行的间隔时间
任务的计算时间(Computation Time)
任务在特定硬件环境下被完整执行所需要的时间,也被称为是任务的执行时间(execution time)
由于任务每次执行的软件环境的差异性,导致任务在各次具体执行过程中的计算时间各有不同
通常用最坏情况下的执行时间(worst case time)或是需要的最长执行时间来表示,也可用统计时间(statistical time)来表示
任务的就绪时间(Ready Time)
任务具备了在处理器上被执行所需要条件时的时间
任务的截止时间(Deadline)
任务需要在该时间到来之前被执行完成;
具有强截止时间的任务即为关键任务